Merge pull request #8441 from muxi/update-objc-connectivity

Flush ObjC cached channels when network connectivity changes
diff --git a/BUILD b/BUILD
index bad6f3f..e4ee8e9 100644
--- a/BUILD
+++ b/BUILD
@@ -200,27 +200,34 @@
     "src/core/lib/iomgr/pollset.h",
     "src/core/lib/iomgr/pollset_set.h",
     "src/core/lib/iomgr/pollset_set_windows.h",
+    "src/core/lib/iomgr/pollset_uv.h",
     "src/core/lib/iomgr/pollset_windows.h",
+    "src/core/lib/iomgr/port.h",
     "src/core/lib/iomgr/resolve_address.h",
     "src/core/lib/iomgr/sockaddr.h",
     "src/core/lib/iomgr/sockaddr_posix.h",
     "src/core/lib/iomgr/sockaddr_utils.h",
     "src/core/lib/iomgr/sockaddr_windows.h",
+    "src/core/lib/iomgr/socket_utils.h",
     "src/core/lib/iomgr/socket_utils_posix.h",
     "src/core/lib/iomgr/socket_windows.h",
     "src/core/lib/iomgr/tcp_client.h",
     "src/core/lib/iomgr/tcp_posix.h",
     "src/core/lib/iomgr/tcp_server.h",
+    "src/core/lib/iomgr/tcp_uv.h",
     "src/core/lib/iomgr/tcp_windows.h",
     "src/core/lib/iomgr/time_averaged_stats.h",
     "src/core/lib/iomgr/timer.h",
+    "src/core/lib/iomgr/timer_generic.h",
     "src/core/lib/iomgr/timer_heap.h",
+    "src/core/lib/iomgr/timer_uv.h",
     "src/core/lib/iomgr/udp_server.h",
     "src/core/lib/iomgr/unix_sockets_posix.h",
+    "src/core/lib/iomgr/wakeup_fd_cv.h",
     "src/core/lib/iomgr/wakeup_fd_pipe.h",
     "src/core/lib/iomgr/wakeup_fd_posix.h",
     "src/core/lib/iomgr/workqueue.h",
-    "src/core/lib/iomgr/workqueue_posix.h",
+    "src/core/lib/iomgr/workqueue_uv.h",
     "src/core/lib/iomgr/workqueue_windows.h",
     "src/core/lib/json/json.h",
     "src/core/lib/json/json_common.h",
@@ -239,6 +246,7 @@
     "src/core/lib/surface/server.h",
     "src/core/lib/transport/byte_stream.h",
     "src/core/lib/transport/connectivity_state.h",
+    "src/core/lib/transport/mdstr_hash_table.h",
     "src/core/lib/transport/metadata.h",
     "src/core/lib/transport/metadata_batch.h",
     "src/core/lib/transport/static_metadata.h",
@@ -290,22 +298,23 @@
     "src/core/lib/tsi/ssl_types.h",
     "src/core/lib/tsi/transport_security.h",
     "src/core/lib/tsi/transport_security_interface.h",
-    "src/core/ext/client_config/client_channel.h",
-    "src/core/ext/client_config/client_channel_factory.h",
-    "src/core/ext/client_config/connector.h",
-    "src/core/ext/client_config/http_connect_handshaker.h",
-    "src/core/ext/client_config/initial_connect_string.h",
-    "src/core/ext/client_config/lb_policy.h",
-    "src/core/ext/client_config/lb_policy_factory.h",
-    "src/core/ext/client_config/lb_policy_registry.h",
-    "src/core/ext/client_config/parse_address.h",
-    "src/core/ext/client_config/resolver.h",
-    "src/core/ext/client_config/resolver_factory.h",
-    "src/core/ext/client_config/resolver_registry.h",
-    "src/core/ext/client_config/resolver_result.h",
-    "src/core/ext/client_config/subchannel.h",
-    "src/core/ext/client_config/subchannel_index.h",
-    "src/core/ext/client_config/uri_parser.h",
+    "src/core/ext/client_channel/client_channel.h",
+    "src/core/ext/client_channel/client_channel_factory.h",
+    "src/core/ext/client_channel/connector.h",
+    "src/core/ext/client_channel/http_connect_handshaker.h",
+    "src/core/ext/client_channel/initial_connect_string.h",
+    "src/core/ext/client_channel/lb_policy.h",
+    "src/core/ext/client_channel/lb_policy_factory.h",
+    "src/core/ext/client_channel/lb_policy_registry.h",
+    "src/core/ext/client_channel/method_config.h",
+    "src/core/ext/client_channel/parse_address.h",
+    "src/core/ext/client_channel/resolver.h",
+    "src/core/ext/client_channel/resolver_factory.h",
+    "src/core/ext/client_channel/resolver_registry.h",
+    "src/core/ext/client_channel/resolver_result.h",
+    "src/core/ext/client_channel/subchannel.h",
+    "src/core/ext/client_channel/subchannel_index.h",
+    "src/core/ext/client_channel/uri_parser.h",
     "src/core/ext/lb_policy/grpclb/grpclb.h",
     "src/core/ext/lb_policy/grpclb/load_balancer_api.h",
     "src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h",
@@ -343,6 +352,7 @@
     "src/core/lib/iomgr/combiner.c",
     "src/core/lib/iomgr/endpoint.c",
     "src/core/lib/iomgr/endpoint_pair_posix.c",
+    "src/core/lib/iomgr/endpoint_pair_uv.c",
     "src/core/lib/iomgr/endpoint_pair_windows.c",
     "src/core/lib/iomgr/error.c",
     "src/core/lib/iomgr/ev_epoll_linux.c",
@@ -354,36 +364,47 @@
     "src/core/lib/iomgr/iocp_windows.c",
     "src/core/lib/iomgr/iomgr.c",
     "src/core/lib/iomgr/iomgr_posix.c",
+    "src/core/lib/iomgr/iomgr_uv.c",
     "src/core/lib/iomgr/iomgr_windows.c",
     "src/core/lib/iomgr/load_file.c",
     "src/core/lib/iomgr/network_status_tracker.c",
     "src/core/lib/iomgr/polling_entity.c",
+    "src/core/lib/iomgr/pollset_set_uv.c",
     "src/core/lib/iomgr/pollset_set_windows.c",
+    "src/core/lib/iomgr/pollset_uv.c",
     "src/core/lib/iomgr/pollset_windows.c",
     "src/core/lib/iomgr/resolve_address_posix.c",
+    "src/core/lib/iomgr/resolve_address_uv.c",
     "src/core/lib/iomgr/resolve_address_windows.c",
     "src/core/lib/iomgr/sockaddr_utils.c",
     "src/core/lib/iomgr/socket_utils_common_posix.c",
     "src/core/lib/iomgr/socket_utils_linux.c",
     "src/core/lib/iomgr/socket_utils_posix.c",
+    "src/core/lib/iomgr/socket_utils_uv.c",
+    "src/core/lib/iomgr/socket_utils_windows.c",
     "src/core/lib/iomgr/socket_windows.c",
     "src/core/lib/iomgr/tcp_client_posix.c",
+    "src/core/lib/iomgr/tcp_client_uv.c",
     "src/core/lib/iomgr/tcp_client_windows.c",
     "src/core/lib/iomgr/tcp_posix.c",
     "src/core/lib/iomgr/tcp_server_posix.c",
+    "src/core/lib/iomgr/tcp_server_uv.c",
     "src/core/lib/iomgr/tcp_server_windows.c",
+    "src/core/lib/iomgr/tcp_uv.c",
     "src/core/lib/iomgr/tcp_windows.c",
     "src/core/lib/iomgr/time_averaged_stats.c",
-    "src/core/lib/iomgr/timer.c",
+    "src/core/lib/iomgr/timer_generic.c",
     "src/core/lib/iomgr/timer_heap.c",
+    "src/core/lib/iomgr/timer_uv.c",
     "src/core/lib/iomgr/udp_server.c",
     "src/core/lib/iomgr/unix_sockets_posix.c",
     "src/core/lib/iomgr/unix_sockets_posix_noop.c",
+    "src/core/lib/iomgr/wakeup_fd_cv.c",
     "src/core/lib/iomgr/wakeup_fd_eventfd.c",
     "src/core/lib/iomgr/wakeup_fd_nospecial.c",
     "src/core/lib/iomgr/wakeup_fd_pipe.c",
     "src/core/lib/iomgr/wakeup_fd_posix.c",
-    "src/core/lib/iomgr/workqueue_posix.c",
+    "src/core/lib/iomgr/workqueue_uv.c",
     "src/core/lib/iomgr/workqueue_windows.c",
     "src/core/lib/json/json.c",
     "src/core/lib/json/json_reader.c",
@@ -409,6 +430,7 @@
     "src/core/lib/surface/version.c",
     "src/core/lib/transport/byte_stream.c",
     "src/core/lib/transport/connectivity_state.c",
+    "src/core/lib/transport/mdstr_hash_table.c",
     "src/core/lib/transport/metadata.c",
     "src/core/lib/transport/metadata_batch.c",
     "src/core/lib/transport/static_metadata.c",
@@ -444,8 +466,7 @@
     "src/core/lib/security/credentials/credentials.c",
     "src/core/lib/security/credentials/credentials_metadata.c",
     "src/core/lib/security/credentials/fake/fake_credentials.c",
-    "src/core/lib/security/credentials/google_default/credentials_posix.c",
-    "src/core/lib/security/credentials/google_default/credentials_windows.c",
+    "src/core/lib/security/credentials/google_default/credentials_generic.c",
     "src/core/lib/security/credentials/google_default/google_default_credentials.c",
     "src/core/lib/security/credentials/iam/iam_credentials.c",
     "src/core/lib/security/credentials/jwt/json_token.c",
@@ -467,25 +488,26 @@
     "src/core/lib/tsi/ssl_transport_security.c",
     "src/core/lib/tsi/transport_security.c",
     "src/core/ext/transport/chttp2/client/secure/secure_channel_create.c",
-    "src/core/ext/client_config/channel_connectivity.c",
-    "src/core/ext/client_config/client_channel.c",
-    "src/core/ext/client_config/client_channel_factory.c",
-    "src/core/ext/client_config/client_config_plugin.c",
-    "src/core/ext/client_config/connector.c",
-    "src/core/ext/client_config/default_initial_connect_string.c",
-    "src/core/ext/client_config/http_connect_handshaker.c",
-    "src/core/ext/client_config/initial_connect_string.c",
-    "src/core/ext/client_config/lb_policy.c",
-    "src/core/ext/client_config/lb_policy_factory.c",
-    "src/core/ext/client_config/lb_policy_registry.c",
-    "src/core/ext/client_config/parse_address.c",
-    "src/core/ext/client_config/resolver.c",
-    "src/core/ext/client_config/resolver_factory.c",
-    "src/core/ext/client_config/resolver_registry.c",
-    "src/core/ext/client_config/resolver_result.c",
-    "src/core/ext/client_config/subchannel.c",
-    "src/core/ext/client_config/subchannel_index.c",
-    "src/core/ext/client_config/uri_parser.c",
+    "src/core/ext/client_channel/channel_connectivity.c",
+    "src/core/ext/client_channel/client_channel.c",
+    "src/core/ext/client_channel/client_channel_factory.c",
+    "src/core/ext/client_channel/client_channel_plugin.c",
+    "src/core/ext/client_channel/connector.c",
+    "src/core/ext/client_channel/default_initial_connect_string.c",
+    "src/core/ext/client_channel/http_connect_handshaker.c",
+    "src/core/ext/client_channel/initial_connect_string.c",
+    "src/core/ext/client_channel/lb_policy.c",
+    "src/core/ext/client_channel/lb_policy_factory.c",
+    "src/core/ext/client_channel/lb_policy_registry.c",
+    "src/core/ext/client_channel/method_config.c",
+    "src/core/ext/client_channel/parse_address.c",
+    "src/core/ext/client_channel/resolver.c",
+    "src/core/ext/client_channel/resolver_factory.c",
+    "src/core/ext/client_channel/resolver_registry.c",
+    "src/core/ext/client_channel/resolver_result.c",
+    "src/core/ext/client_channel/subchannel.c",
+    "src/core/ext/client_channel/subchannel_index.c",
+    "src/core/ext/client_channel/uri_parser.c",
     "src/core/ext/transport/chttp2/server/insecure/server_chttp2.c",
     "src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.c",
     "src/core/ext/transport/chttp2/client/insecure/channel_create.c",
@@ -601,27 +623,34 @@
     "src/core/lib/iomgr/pollset.h",
     "src/core/lib/iomgr/pollset_set.h",
     "src/core/lib/iomgr/pollset_set_windows.h",
+    "src/core/lib/iomgr/pollset_uv.h",
     "src/core/lib/iomgr/pollset_windows.h",
+    "src/core/lib/iomgr/port.h",
     "src/core/lib/iomgr/resolve_address.h",
     "src/core/lib/iomgr/sockaddr.h",
     "src/core/lib/iomgr/sockaddr_posix.h",
     "src/core/lib/iomgr/sockaddr_utils.h",
     "src/core/lib/iomgr/sockaddr_windows.h",
+    "src/core/lib/iomgr/socket_utils.h",
     "src/core/lib/iomgr/socket_utils_posix.h",
     "src/core/lib/iomgr/socket_windows.h",
     "src/core/lib/iomgr/tcp_client.h",
     "src/core/lib/iomgr/tcp_posix.h",
     "src/core/lib/iomgr/tcp_server.h",
+    "src/core/lib/iomgr/tcp_uv.h",
     "src/core/lib/iomgr/tcp_windows.h",
     "src/core/lib/iomgr/time_averaged_stats.h",
     "src/core/lib/iomgr/timer.h",
+    "src/core/lib/iomgr/timer_generic.h",
     "src/core/lib/iomgr/timer_heap.h",
+    "src/core/lib/iomgr/timer_uv.h",
     "src/core/lib/iomgr/udp_server.h",
     "src/core/lib/iomgr/unix_sockets_posix.h",
+    "src/core/lib/iomgr/wakeup_fd_cv.h",
     "src/core/lib/iomgr/wakeup_fd_pipe.h",
     "src/core/lib/iomgr/wakeup_fd_posix.h",
     "src/core/lib/iomgr/workqueue.h",
-    "src/core/lib/iomgr/workqueue_posix.h",
+    "src/core/lib/iomgr/workqueue_uv.h",
     "src/core/lib/iomgr/workqueue_windows.h",
     "src/core/lib/json/json.h",
     "src/core/lib/json/json_common.h",
@@ -640,6 +669,7 @@
     "src/core/lib/surface/server.h",
     "src/core/lib/transport/byte_stream.h",
     "src/core/lib/transport/connectivity_state.h",
+    "src/core/lib/transport/mdstr_hash_table.h",
     "src/core/lib/transport/metadata.h",
     "src/core/lib/transport/metadata_batch.h",
     "src/core/lib/transport/static_metadata.h",
@@ -668,22 +698,23 @@
     "src/core/ext/transport/chttp2/transport/stream_map.h",
     "src/core/ext/transport/chttp2/transport/varint.h",
     "src/core/ext/transport/chttp2/alpn/alpn.h",
-    "src/core/ext/client_config/client_channel.h",
-    "src/core/ext/client_config/client_channel_factory.h",
-    "src/core/ext/client_config/connector.h",
-    "src/core/ext/client_config/http_connect_handshaker.h",
-    "src/core/ext/client_config/initial_connect_string.h",
-    "src/core/ext/client_config/lb_policy.h",
-    "src/core/ext/client_config/lb_policy_factory.h",
-    "src/core/ext/client_config/lb_policy_registry.h",
-    "src/core/ext/client_config/parse_address.h",
-    "src/core/ext/client_config/resolver.h",
-    "src/core/ext/client_config/resolver_factory.h",
-    "src/core/ext/client_config/resolver_registry.h",
-    "src/core/ext/client_config/resolver_result.h",
-    "src/core/ext/client_config/subchannel.h",
-    "src/core/ext/client_config/subchannel_index.h",
-    "src/core/ext/client_config/uri_parser.h",
+    "src/core/ext/client_channel/client_channel.h",
+    "src/core/ext/client_channel/client_channel_factory.h",
+    "src/core/ext/client_channel/connector.h",
+    "src/core/ext/client_channel/http_connect_handshaker.h",
+    "src/core/ext/client_channel/initial_connect_string.h",
+    "src/core/ext/client_channel/lb_policy.h",
+    "src/core/ext/client_channel/lb_policy_factory.h",
+    "src/core/ext/client_channel/lb_policy_registry.h",
+    "src/core/ext/client_channel/method_config.h",
+    "src/core/ext/client_channel/parse_address.h",
+    "src/core/ext/client_channel/resolver.h",
+    "src/core/ext/client_channel/resolver_factory.h",
+    "src/core/ext/client_channel/resolver_registry.h",
+    "src/core/ext/client_channel/resolver_result.h",
+    "src/core/ext/client_channel/subchannel.h",
+    "src/core/ext/client_channel/subchannel_index.h",
+    "src/core/ext/client_channel/uri_parser.h",
     "src/core/lib/security/context/security_context.h",
     "src/core/lib/security/credentials/composite/composite_credentials.h",
     "src/core/lib/security/credentials/credentials.h",
@@ -729,6 +760,7 @@
     "src/core/lib/iomgr/combiner.c",
     "src/core/lib/iomgr/endpoint.c",
     "src/core/lib/iomgr/endpoint_pair_posix.c",
+    "src/core/lib/iomgr/endpoint_pair_uv.c",
     "src/core/lib/iomgr/endpoint_pair_windows.c",
     "src/core/lib/iomgr/error.c",
     "src/core/lib/iomgr/ev_epoll_linux.c",
@@ -740,36 +772,47 @@
     "src/core/lib/iomgr/iocp_windows.c",
     "src/core/lib/iomgr/iomgr.c",
     "src/core/lib/iomgr/iomgr_posix.c",
+    "src/core/lib/iomgr/iomgr_uv.c",
     "src/core/lib/iomgr/iomgr_windows.c",
     "src/core/lib/iomgr/load_file.c",
     "src/core/lib/iomgr/network_status_tracker.c",
     "src/core/lib/iomgr/polling_entity.c",
+    "src/core/lib/iomgr/pollset_set_uv.c",
     "src/core/lib/iomgr/pollset_set_windows.c",
+    "src/core/lib/iomgr/pollset_uv.c",
     "src/core/lib/iomgr/pollset_windows.c",
     "src/core/lib/iomgr/resolve_address_posix.c",
+    "src/core/lib/iomgr/resolve_address_uv.c",
     "src/core/lib/iomgr/resolve_address_windows.c",
     "src/core/lib/iomgr/sockaddr_utils.c",
     "src/core/lib/iomgr/socket_utils_common_posix.c",
     "src/core/lib/iomgr/socket_utils_linux.c",
     "src/core/lib/iomgr/socket_utils_posix.c",
+    "src/core/lib/iomgr/socket_utils_uv.c",
+    "src/core/lib/iomgr/socket_utils_windows.c",
     "src/core/lib/iomgr/socket_windows.c",
     "src/core/lib/iomgr/tcp_client_posix.c",
+    "src/core/lib/iomgr/tcp_client_uv.c",
     "src/core/lib/iomgr/tcp_client_windows.c",
     "src/core/lib/iomgr/tcp_posix.c",
     "src/core/lib/iomgr/tcp_server_posix.c",
+    "src/core/lib/iomgr/tcp_server_uv.c",
     "src/core/lib/iomgr/tcp_server_windows.c",
+    "src/core/lib/iomgr/tcp_uv.c",
     "src/core/lib/iomgr/tcp_windows.c",
     "src/core/lib/iomgr/time_averaged_stats.c",
-    "src/core/lib/iomgr/timer.c",
+    "src/core/lib/iomgr/timer_generic.c",
     "src/core/lib/iomgr/timer_heap.c",
+    "src/core/lib/iomgr/timer_uv.c",
     "src/core/lib/iomgr/udp_server.c",
     "src/core/lib/iomgr/unix_sockets_posix.c",
     "src/core/lib/iomgr/unix_sockets_posix_noop.c",
+    "src/core/lib/iomgr/wakeup_fd_cv.c",
     "src/core/lib/iomgr/wakeup_fd_eventfd.c",
     "src/core/lib/iomgr/wakeup_fd_nospecial.c",
     "src/core/lib/iomgr/wakeup_fd_pipe.c",
     "src/core/lib/iomgr/wakeup_fd_posix.c",
-    "src/core/lib/iomgr/workqueue_posix.c",
+    "src/core/lib/iomgr/workqueue_uv.c",
     "src/core/lib/iomgr/workqueue_windows.c",
     "src/core/lib/json/json.c",
     "src/core/lib/json/json_reader.c",
@@ -795,6 +838,7 @@
     "src/core/lib/surface/version.c",
     "src/core/lib/transport/byte_stream.c",
     "src/core/lib/transport/connectivity_state.c",
+    "src/core/lib/transport/mdstr_hash_table.c",
     "src/core/lib/transport/metadata.c",
     "src/core/lib/transport/metadata_batch.c",
     "src/core/lib/transport/static_metadata.c",
@@ -827,33 +871,33 @@
     "src/core/ext/transport/chttp2/transport/varint.c",
     "src/core/ext/transport/chttp2/transport/writing.c",
     "src/core/ext/transport/chttp2/alpn/alpn.c",
-    "src/core/ext/client_config/channel_connectivity.c",
-    "src/core/ext/client_config/client_channel.c",
-    "src/core/ext/client_config/client_channel_factory.c",
-    "src/core/ext/client_config/client_config_plugin.c",
-    "src/core/ext/client_config/connector.c",
-    "src/core/ext/client_config/default_initial_connect_string.c",
-    "src/core/ext/client_config/http_connect_handshaker.c",
-    "src/core/ext/client_config/initial_connect_string.c",
-    "src/core/ext/client_config/lb_policy.c",
-    "src/core/ext/client_config/lb_policy_factory.c",
-    "src/core/ext/client_config/lb_policy_registry.c",
-    "src/core/ext/client_config/parse_address.c",
-    "src/core/ext/client_config/resolver.c",
-    "src/core/ext/client_config/resolver_factory.c",
-    "src/core/ext/client_config/resolver_registry.c",
-    "src/core/ext/client_config/resolver_result.c",
-    "src/core/ext/client_config/subchannel.c",
-    "src/core/ext/client_config/subchannel_index.c",
-    "src/core/ext/client_config/uri_parser.c",
+    "src/core/ext/client_channel/channel_connectivity.c",
+    "src/core/ext/client_channel/client_channel.c",
+    "src/core/ext/client_channel/client_channel_factory.c",
+    "src/core/ext/client_channel/client_channel_plugin.c",
+    "src/core/ext/client_channel/connector.c",
+    "src/core/ext/client_channel/default_initial_connect_string.c",
+    "src/core/ext/client_channel/http_connect_handshaker.c",
+    "src/core/ext/client_channel/initial_connect_string.c",
+    "src/core/ext/client_channel/lb_policy.c",
+    "src/core/ext/client_channel/lb_policy_factory.c",
+    "src/core/ext/client_channel/lb_policy_registry.c",
+    "src/core/ext/client_channel/method_config.c",
+    "src/core/ext/client_channel/parse_address.c",
+    "src/core/ext/client_channel/resolver.c",
+    "src/core/ext/client_channel/resolver_factory.c",
+    "src/core/ext/client_channel/resolver_registry.c",
+    "src/core/ext/client_channel/resolver_result.c",
+    "src/core/ext/client_channel/subchannel.c",
+    "src/core/ext/client_channel/subchannel_index.c",
+    "src/core/ext/client_channel/uri_parser.c",
     "src/core/lib/http/httpcli_security_connector.c",
     "src/core/lib/security/context/security_context.c",
     "src/core/lib/security/credentials/composite/composite_credentials.c",
     "src/core/lib/security/credentials/credentials.c",
     "src/core/lib/security/credentials/credentials_metadata.c",
     "src/core/lib/security/credentials/fake/fake_credentials.c",
-    "src/core/lib/security/credentials/google_default/credentials_posix.c",
-    "src/core/lib/security/credentials/google_default/credentials_windows.c",
+    "src/core/lib/security/credentials/google_default/credentials_generic.c",
     "src/core/lib/security/credentials/google_default/google_default_credentials.c",
     "src/core/lib/security/credentials/iam/iam_credentials.c",
     "src/core/lib/security/credentials/jwt/json_token.c",
@@ -957,27 +1001,34 @@
     "src/core/lib/iomgr/pollset.h",
     "src/core/lib/iomgr/pollset_set.h",
     "src/core/lib/iomgr/pollset_set_windows.h",
+    "src/core/lib/iomgr/pollset_uv.h",
     "src/core/lib/iomgr/pollset_windows.h",
+    "src/core/lib/iomgr/port.h",
     "src/core/lib/iomgr/resolve_address.h",
     "src/core/lib/iomgr/sockaddr.h",
     "src/core/lib/iomgr/sockaddr_posix.h",
     "src/core/lib/iomgr/sockaddr_utils.h",
     "src/core/lib/iomgr/sockaddr_windows.h",
+    "src/core/lib/iomgr/socket_utils.h",
     "src/core/lib/iomgr/socket_utils_posix.h",
     "src/core/lib/iomgr/socket_windows.h",
     "src/core/lib/iomgr/tcp_client.h",
     "src/core/lib/iomgr/tcp_posix.h",
     "src/core/lib/iomgr/tcp_server.h",
+    "src/core/lib/iomgr/tcp_uv.h",
     "src/core/lib/iomgr/tcp_windows.h",
     "src/core/lib/iomgr/time_averaged_stats.h",
     "src/core/lib/iomgr/timer.h",
+    "src/core/lib/iomgr/timer_generic.h",
     "src/core/lib/iomgr/timer_heap.h",
+    "src/core/lib/iomgr/timer_uv.h",
     "src/core/lib/iomgr/udp_server.h",
     "src/core/lib/iomgr/unix_sockets_posix.h",
+    "src/core/lib/iomgr/wakeup_fd_cv.h",
     "src/core/lib/iomgr/wakeup_fd_pipe.h",
     "src/core/lib/iomgr/wakeup_fd_posix.h",
     "src/core/lib/iomgr/workqueue.h",
-    "src/core/lib/iomgr/workqueue_posix.h",
+    "src/core/lib/iomgr/workqueue_uv.h",
     "src/core/lib/iomgr/workqueue_windows.h",
     "src/core/lib/json/json.h",
     "src/core/lib/json/json_common.h",
@@ -996,6 +1047,7 @@
     "src/core/lib/surface/server.h",
     "src/core/lib/transport/byte_stream.h",
     "src/core/lib/transport/connectivity_state.h",
+    "src/core/lib/transport/mdstr_hash_table.h",
     "src/core/lib/transport/metadata.h",
     "src/core/lib/transport/metadata_batch.h",
     "src/core/lib/transport/static_metadata.h",
@@ -1023,22 +1075,23 @@
     "src/core/ext/transport/chttp2/transport/stream_map.h",
     "src/core/ext/transport/chttp2/transport/varint.h",
     "src/core/ext/transport/chttp2/alpn/alpn.h",
-    "src/core/ext/client_config/client_channel.h",
-    "src/core/ext/client_config/client_channel_factory.h",
-    "src/core/ext/client_config/connector.h",
-    "src/core/ext/client_config/http_connect_handshaker.h",
-    "src/core/ext/client_config/initial_connect_string.h",
-    "src/core/ext/client_config/lb_policy.h",
-    "src/core/ext/client_config/lb_policy_factory.h",
-    "src/core/ext/client_config/lb_policy_registry.h",
-    "src/core/ext/client_config/parse_address.h",
-    "src/core/ext/client_config/resolver.h",
-    "src/core/ext/client_config/resolver_factory.h",
-    "src/core/ext/client_config/resolver_registry.h",
-    "src/core/ext/client_config/resolver_result.h",
-    "src/core/ext/client_config/subchannel.h",
-    "src/core/ext/client_config/subchannel_index.h",
-    "src/core/ext/client_config/uri_parser.h",
+    "src/core/ext/client_channel/client_channel.h",
+    "src/core/ext/client_channel/client_channel_factory.h",
+    "src/core/ext/client_channel/connector.h",
+    "src/core/ext/client_channel/http_connect_handshaker.h",
+    "src/core/ext/client_channel/initial_connect_string.h",
+    "src/core/ext/client_channel/lb_policy.h",
+    "src/core/ext/client_channel/lb_policy_factory.h",
+    "src/core/ext/client_channel/lb_policy_registry.h",
+    "src/core/ext/client_channel/method_config.h",
+    "src/core/ext/client_channel/parse_address.h",
+    "src/core/ext/client_channel/resolver.h",
+    "src/core/ext/client_channel/resolver_factory.h",
+    "src/core/ext/client_channel/resolver_registry.h",
+    "src/core/ext/client_channel/resolver_result.h",
+    "src/core/ext/client_channel/subchannel.h",
+    "src/core/ext/client_channel/subchannel_index.h",
+    "src/core/ext/client_channel/uri_parser.h",
     "src/core/ext/load_reporting/load_reporting.h",
     "src/core/ext/load_reporting/load_reporting_filter.h",
     "src/core/ext/lb_policy/grpclb/grpclb.h",
@@ -1077,6 +1130,7 @@
     "src/core/lib/iomgr/combiner.c",
     "src/core/lib/iomgr/endpoint.c",
     "src/core/lib/iomgr/endpoint_pair_posix.c",
+    "src/core/lib/iomgr/endpoint_pair_uv.c",
     "src/core/lib/iomgr/endpoint_pair_windows.c",
     "src/core/lib/iomgr/error.c",
     "src/core/lib/iomgr/ev_epoll_linux.c",
@@ -1088,36 +1142,47 @@
     "src/core/lib/iomgr/iocp_windows.c",
     "src/core/lib/iomgr/iomgr.c",
     "src/core/lib/iomgr/iomgr_posix.c",
+    "src/core/lib/iomgr/iomgr_uv.c",
     "src/core/lib/iomgr/iomgr_windows.c",
     "src/core/lib/iomgr/load_file.c",
     "src/core/lib/iomgr/network_status_tracker.c",
     "src/core/lib/iomgr/polling_entity.c",
+    "src/core/lib/iomgr/pollset_set_uv.c",
     "src/core/lib/iomgr/pollset_set_windows.c",
+    "src/core/lib/iomgr/pollset_uv.c",
     "src/core/lib/iomgr/pollset_windows.c",
     "src/core/lib/iomgr/resolve_address_posix.c",
+    "src/core/lib/iomgr/resolve_address_uv.c",
     "src/core/lib/iomgr/resolve_address_windows.c",
     "src/core/lib/iomgr/sockaddr_utils.c",
     "src/core/lib/iomgr/socket_utils_common_posix.c",
     "src/core/lib/iomgr/socket_utils_linux.c",
     "src/core/lib/iomgr/socket_utils_posix.c",
+    "src/core/lib/iomgr/socket_utils_uv.c",
+    "src/core/lib/iomgr/socket_utils_windows.c",
     "src/core/lib/iomgr/socket_windows.c",
     "src/core/lib/iomgr/tcp_client_posix.c",
+    "src/core/lib/iomgr/tcp_client_uv.c",
     "src/core/lib/iomgr/tcp_client_windows.c",
     "src/core/lib/iomgr/tcp_posix.c",
     "src/core/lib/iomgr/tcp_server_posix.c",
+    "src/core/lib/iomgr/tcp_server_uv.c",
     "src/core/lib/iomgr/tcp_server_windows.c",
+    "src/core/lib/iomgr/tcp_uv.c",
     "src/core/lib/iomgr/tcp_windows.c",
     "src/core/lib/iomgr/time_averaged_stats.c",
-    "src/core/lib/iomgr/timer.c",
+    "src/core/lib/iomgr/timer_generic.c",
     "src/core/lib/iomgr/timer_heap.c",
+    "src/core/lib/iomgr/timer_uv.c",
     "src/core/lib/iomgr/udp_server.c",
     "src/core/lib/iomgr/unix_sockets_posix.c",
     "src/core/lib/iomgr/unix_sockets_posix_noop.c",
+    "src/core/lib/iomgr/wakeup_fd_cv.c",
     "src/core/lib/iomgr/wakeup_fd_eventfd.c",
     "src/core/lib/iomgr/wakeup_fd_nospecial.c",
     "src/core/lib/iomgr/wakeup_fd_pipe.c",
     "src/core/lib/iomgr/wakeup_fd_posix.c",
-    "src/core/lib/iomgr/workqueue_posix.c",
+    "src/core/lib/iomgr/workqueue_uv.c",
     "src/core/lib/iomgr/workqueue_windows.c",
     "src/core/lib/json/json.c",
     "src/core/lib/json/json_reader.c",
@@ -1143,6 +1208,7 @@
     "src/core/lib/surface/version.c",
     "src/core/lib/transport/byte_stream.c",
     "src/core/lib/transport/connectivity_state.c",
+    "src/core/lib/transport/mdstr_hash_table.c",
     "src/core/lib/transport/metadata.c",
     "src/core/lib/transport/metadata_batch.c",
     "src/core/lib/transport/static_metadata.c",
@@ -1175,25 +1241,26 @@
     "src/core/ext/transport/chttp2/alpn/alpn.c",
     "src/core/ext/transport/chttp2/client/insecure/channel_create.c",
     "src/core/ext/transport/chttp2/client/insecure/channel_create_posix.c",
-    "src/core/ext/client_config/channel_connectivity.c",
-    "src/core/ext/client_config/client_channel.c",
-    "src/core/ext/client_config/client_channel_factory.c",
-    "src/core/ext/client_config/client_config_plugin.c",
-    "src/core/ext/client_config/connector.c",
-    "src/core/ext/client_config/default_initial_connect_string.c",
-    "src/core/ext/client_config/http_connect_handshaker.c",
-    "src/core/ext/client_config/initial_connect_string.c",
-    "src/core/ext/client_config/lb_policy.c",
-    "src/core/ext/client_config/lb_policy_factory.c",
-    "src/core/ext/client_config/lb_policy_registry.c",
-    "src/core/ext/client_config/parse_address.c",
-    "src/core/ext/client_config/resolver.c",
-    "src/core/ext/client_config/resolver_factory.c",
-    "src/core/ext/client_config/resolver_registry.c",
-    "src/core/ext/client_config/resolver_result.c",
-    "src/core/ext/client_config/subchannel.c",
-    "src/core/ext/client_config/subchannel_index.c",
-    "src/core/ext/client_config/uri_parser.c",
+    "src/core/ext/client_channel/channel_connectivity.c",
+    "src/core/ext/client_channel/client_channel.c",
+    "src/core/ext/client_channel/client_channel_factory.c",
+    "src/core/ext/client_channel/client_channel_plugin.c",
+    "src/core/ext/client_channel/connector.c",
+    "src/core/ext/client_channel/default_initial_connect_string.c",
+    "src/core/ext/client_channel/http_connect_handshaker.c",
+    "src/core/ext/client_channel/initial_connect_string.c",
+    "src/core/ext/client_channel/lb_policy.c",
+    "src/core/ext/client_channel/lb_policy_factory.c",
+    "src/core/ext/client_channel/lb_policy_registry.c",
+    "src/core/ext/client_channel/method_config.c",
+    "src/core/ext/client_channel/parse_address.c",
+    "src/core/ext/client_channel/resolver.c",
+    "src/core/ext/client_channel/resolver_factory.c",
+    "src/core/ext/client_channel/resolver_registry.c",
+    "src/core/ext/client_channel/resolver_result.c",
+    "src/core/ext/client_channel/subchannel.c",
+    "src/core/ext/client_channel/subchannel_index.c",
+    "src/core/ext/client_channel/uri_parser.c",
     "src/core/ext/resolver/dns/native/dns_resolver.c",
     "src/core/ext/resolver/sockaddr/sockaddr_resolver.c",
     "src/core/ext/load_reporting/load_reporting.c",
@@ -1418,6 +1485,154 @@
 
 
 cc_library(
+  name = "grpc++_cronet",
+  srcs = [
+    "src/cpp/client/create_channel_internal.h",
+    "src/cpp/common/channel_filter.h",
+    "src/cpp/server/dynamic_thread_pool.h",
+    "src/cpp/server/thread_pool_interface.h",
+    "src/cpp/client/cronet_credentials.cc",
+    "src/cpp/client/insecure_credentials.cc",
+    "src/cpp/common/insecure_create_auth_context.cc",
+    "src/cpp/server/insecure_server_credentials.cc",
+    "src/cpp/client/channel_cc.cc",
+    "src/cpp/client/client_context.cc",
+    "src/cpp/client/create_channel.cc",
+    "src/cpp/client/create_channel_internal.cc",
+    "src/cpp/client/create_channel_posix.cc",
+    "src/cpp/client/credentials_cc.cc",
+    "src/cpp/client/generic_stub.cc",
+    "src/cpp/common/channel_arguments.cc",
+    "src/cpp/common/channel_filter.cc",
+    "src/cpp/common/completion_queue_cc.cc",
+    "src/cpp/common/core_codegen.cc",
+    "src/cpp/common/rpc_method.cc",
+    "src/cpp/server/async_generic_service.cc",
+    "src/cpp/server/create_default_thread_pool.cc",
+    "src/cpp/server/dynamic_thread_pool.cc",
+    "src/cpp/server/server_builder.cc",
+    "src/cpp/server/server_cc.cc",
+    "src/cpp/server/server_context.cc",
+    "src/cpp/server/server_credentials.cc",
+    "src/cpp/server/server_posix.cc",
+    "src/cpp/util/byte_buffer_cc.cc",
+    "src/cpp/util/slice_cc.cc",
+    "src/cpp/util/status.cc",
+    "src/cpp/util/string_ref.cc",
+    "src/cpp/util/time_cc.cc",
+    "src/cpp/codegen/codegen_init.cc",
+  ],
+  hdrs = [
+    "include/grpc++/alarm.h",
+    "include/grpc++/channel.h",
+    "include/grpc++/client_context.h",
+    "include/grpc++/completion_queue.h",
+    "include/grpc++/create_channel.h",
+    "include/grpc++/create_channel_posix.h",
+    "include/grpc++/generic/async_generic_service.h",
+    "include/grpc++/generic/generic_stub.h",
+    "include/grpc++/grpc++.h",
+    "include/grpc++/impl/call.h",
+    "include/grpc++/impl/client_unary_call.h",
+    "include/grpc++/impl/codegen/core_codegen.h",
+    "include/grpc++/impl/grpc_library.h",
+    "include/grpc++/impl/method_handler_impl.h",
+    "include/grpc++/impl/rpc_method.h",
+    "include/grpc++/impl/rpc_service_method.h",
+    "include/grpc++/impl/serialization_traits.h",
+    "include/grpc++/impl/server_builder_option.h",
+    "include/grpc++/impl/server_builder_plugin.h",
+    "include/grpc++/impl/server_initializer.h",
+    "include/grpc++/impl/service_type.h",
+    "include/grpc++/impl/sync.h",
+    "include/grpc++/impl/sync_cxx11.h",
+    "include/grpc++/impl/sync_no_cxx11.h",
+    "include/grpc++/impl/thd.h",
+    "include/grpc++/impl/thd_cxx11.h",
+    "include/grpc++/impl/thd_no_cxx11.h",
+    "include/grpc++/security/auth_context.h",
+    "include/grpc++/security/auth_metadata_processor.h",
+    "include/grpc++/security/credentials.h",
+    "include/grpc++/security/server_credentials.h",
+    "include/grpc++/server.h",
+    "include/grpc++/server_builder.h",
+    "include/grpc++/server_context.h",
+    "include/grpc++/server_posix.h",
+    "include/grpc++/support/async_stream.h",
+    "include/grpc++/support/async_unary_call.h",
+    "include/grpc++/support/byte_buffer.h",
+    "include/grpc++/support/channel_arguments.h",
+    "include/grpc++/support/config.h",
+    "include/grpc++/support/slice.h",
+    "include/grpc++/support/status.h",
+    "include/grpc++/support/status_code_enum.h",
+    "include/grpc++/support/string_ref.h",
+    "include/grpc++/support/stub_options.h",
+    "include/grpc++/support/sync_stream.h",
+    "include/grpc++/support/time.h",
+    "include/grpc++/impl/codegen/async_stream.h",
+    "include/grpc++/impl/codegen/async_unary_call.h",
+    "include/grpc++/impl/codegen/call.h",
+    "include/grpc++/impl/codegen/call_hook.h",
+    "include/grpc++/impl/codegen/channel_interface.h",
+    "include/grpc++/impl/codegen/client_context.h",
+    "include/grpc++/impl/codegen/client_unary_call.h",
+    "include/grpc++/impl/codegen/completion_queue.h",
+    "include/grpc++/impl/codegen/completion_queue_tag.h",
+    "include/grpc++/impl/codegen/config.h",
+    "include/grpc++/impl/codegen/core_codegen_interface.h",
+    "include/grpc++/impl/codegen/create_auth_context.h",
+    "include/grpc++/impl/codegen/grpc_library.h",
+    "include/grpc++/impl/codegen/method_handler_impl.h",
+    "include/grpc++/impl/codegen/rpc_method.h",
+    "include/grpc++/impl/codegen/rpc_service_method.h",
+    "include/grpc++/impl/codegen/security/auth_context.h",
+    "include/grpc++/impl/codegen/serialization_traits.h",
+    "include/grpc++/impl/codegen/server_context.h",
+    "include/grpc++/impl/codegen/server_interface.h",
+    "include/grpc++/impl/codegen/service_type.h",
+    "include/grpc++/impl/codegen/status.h",
+    "include/grpc++/impl/codegen/status_code_enum.h",
+    "include/grpc++/impl/codegen/status_helper.h",
+    "include/grpc++/impl/codegen/string_ref.h",
+    "include/grpc++/impl/codegen/stub_options.h",
+    "include/grpc++/impl/codegen/sync.h",
+    "include/grpc++/impl/codegen/sync_cxx11.h",
+    "include/grpc++/impl/codegen/sync_no_cxx11.h",
+    "include/grpc++/impl/codegen/sync_stream.h",
+    "include/grpc++/impl/codegen/time.h",
+    "include/grpc/impl/codegen/byte_buffer_reader.h",
+    "include/grpc/impl/codegen/compression_types.h",
+    "include/grpc/impl/codegen/connectivity_state.h",
+    "include/grpc/impl/codegen/grpc_types.h",
+    "include/grpc/impl/codegen/propagation_bits.h",
+    "include/grpc/impl/codegen/status.h",
+    "include/grpc/impl/codegen/atm.h",
+    "include/grpc/impl/codegen/atm_gcc_atomic.h",
+    "include/grpc/impl/codegen/atm_gcc_sync.h",
+    "include/grpc/impl/codegen/atm_windows.h",
+    "include/grpc/impl/codegen/gpr_types.h",
+    "include/grpc/impl/codegen/port_platform.h",
+    "include/grpc/impl/codegen/slice.h",
+    "include/grpc/impl/codegen/sync.h",
+    "include/grpc/impl/codegen/sync_generic.h",
+    "include/grpc/impl/codegen/sync_posix.h",
+    "include/grpc/impl/codegen/sync_windows.h",
+  ],
+  includes = [
+    "include",
+    ".",
+  ],
+  deps = [
+    "//external:libssl",
+    ":gpr",
+    ":grpc_cronet",
+  ],
+)
+
+
+
+cc_library(
   name = "grpc++_reflection",
   srcs = [
     "src/cpp/ext/proto_server_reflection.h",
@@ -1840,6 +2055,7 @@
     "src/core/lib/iomgr/combiner.c",
     "src/core/lib/iomgr/endpoint.c",
     "src/core/lib/iomgr/endpoint_pair_posix.c",
+    "src/core/lib/iomgr/endpoint_pair_uv.c",
     "src/core/lib/iomgr/endpoint_pair_windows.c",
     "src/core/lib/iomgr/error.c",
     "src/core/lib/iomgr/ev_epoll_linux.c",
@@ -1851,36 +2067,47 @@
     "src/core/lib/iomgr/iocp_windows.c",
     "src/core/lib/iomgr/iomgr.c",
     "src/core/lib/iomgr/iomgr_posix.c",
+    "src/core/lib/iomgr/iomgr_uv.c",
     "src/core/lib/iomgr/iomgr_windows.c",
     "src/core/lib/iomgr/load_file.c",
     "src/core/lib/iomgr/network_status_tracker.c",
     "src/core/lib/iomgr/polling_entity.c",
+    "src/core/lib/iomgr/pollset_set_uv.c",
     "src/core/lib/iomgr/pollset_set_windows.c",
+    "src/core/lib/iomgr/pollset_uv.c",
     "src/core/lib/iomgr/pollset_windows.c",
     "src/core/lib/iomgr/resolve_address_posix.c",
+    "src/core/lib/iomgr/resolve_address_uv.c",
     "src/core/lib/iomgr/resolve_address_windows.c",
     "src/core/lib/iomgr/sockaddr_utils.c",
     "src/core/lib/iomgr/socket_utils_common_posix.c",
     "src/core/lib/iomgr/socket_utils_linux.c",
     "src/core/lib/iomgr/socket_utils_posix.c",
+    "src/core/lib/iomgr/socket_utils_uv.c",
+    "src/core/lib/iomgr/socket_utils_windows.c",
     "src/core/lib/iomgr/socket_windows.c",
     "src/core/lib/iomgr/tcp_client_posix.c",
+    "src/core/lib/iomgr/tcp_client_uv.c",
     "src/core/lib/iomgr/tcp_client_windows.c",
     "src/core/lib/iomgr/tcp_posix.c",
     "src/core/lib/iomgr/tcp_server_posix.c",
+    "src/core/lib/iomgr/tcp_server_uv.c",
     "src/core/lib/iomgr/tcp_server_windows.c",
+    "src/core/lib/iomgr/tcp_uv.c",
     "src/core/lib/iomgr/tcp_windows.c",
     "src/core/lib/iomgr/time_averaged_stats.c",
-    "src/core/lib/iomgr/timer.c",
+    "src/core/lib/iomgr/timer_generic.c",
     "src/core/lib/iomgr/timer_heap.c",
+    "src/core/lib/iomgr/timer_uv.c",
     "src/core/lib/iomgr/udp_server.c",
     "src/core/lib/iomgr/unix_sockets_posix.c",
     "src/core/lib/iomgr/unix_sockets_posix_noop.c",
+    "src/core/lib/iomgr/wakeup_fd_cv.c",
     "src/core/lib/iomgr/wakeup_fd_eventfd.c",
     "src/core/lib/iomgr/wakeup_fd_nospecial.c",
     "src/core/lib/iomgr/wakeup_fd_pipe.c",
     "src/core/lib/iomgr/wakeup_fd_posix.c",
-    "src/core/lib/iomgr/workqueue_posix.c",
+    "src/core/lib/iomgr/workqueue_uv.c",
     "src/core/lib/iomgr/workqueue_windows.c",
     "src/core/lib/json/json.c",
     "src/core/lib/json/json_reader.c",
@@ -1906,6 +2133,7 @@
     "src/core/lib/surface/version.c",
     "src/core/lib/transport/byte_stream.c",
     "src/core/lib/transport/connectivity_state.c",
+    "src/core/lib/transport/mdstr_hash_table.c",
     "src/core/lib/transport/metadata.c",
     "src/core/lib/transport/metadata_batch.c",
     "src/core/lib/transport/static_metadata.c",
@@ -1941,8 +2169,7 @@
     "src/core/lib/security/credentials/credentials.c",
     "src/core/lib/security/credentials/credentials_metadata.c",
     "src/core/lib/security/credentials/fake/fake_credentials.c",
-    "src/core/lib/security/credentials/google_default/credentials_posix.c",
-    "src/core/lib/security/credentials/google_default/credentials_windows.c",
+    "src/core/lib/security/credentials/google_default/credentials_generic.c",
     "src/core/lib/security/credentials/google_default/google_default_credentials.c",
     "src/core/lib/security/credentials/iam/iam_credentials.c",
     "src/core/lib/security/credentials/jwt/json_token.c",
@@ -1964,25 +2191,26 @@
     "src/core/lib/tsi/ssl_transport_security.c",
     "src/core/lib/tsi/transport_security.c",
     "src/core/ext/transport/chttp2/client/secure/secure_channel_create.c",
-    "src/core/ext/client_config/channel_connectivity.c",
-    "src/core/ext/client_config/client_channel.c",
-    "src/core/ext/client_config/client_channel_factory.c",
-    "src/core/ext/client_config/client_config_plugin.c",
-    "src/core/ext/client_config/connector.c",
-    "src/core/ext/client_config/default_initial_connect_string.c",
-    "src/core/ext/client_config/http_connect_handshaker.c",
-    "src/core/ext/client_config/initial_connect_string.c",
-    "src/core/ext/client_config/lb_policy.c",
-    "src/core/ext/client_config/lb_policy_factory.c",
-    "src/core/ext/client_config/lb_policy_registry.c",
-    "src/core/ext/client_config/parse_address.c",
-    "src/core/ext/client_config/resolver.c",
-    "src/core/ext/client_config/resolver_factory.c",
-    "src/core/ext/client_config/resolver_registry.c",
-    "src/core/ext/client_config/resolver_result.c",
-    "src/core/ext/client_config/subchannel.c",
-    "src/core/ext/client_config/subchannel_index.c",
-    "src/core/ext/client_config/uri_parser.c",
+    "src/core/ext/client_channel/channel_connectivity.c",
+    "src/core/ext/client_channel/client_channel.c",
+    "src/core/ext/client_channel/client_channel_factory.c",
+    "src/core/ext/client_channel/client_channel_plugin.c",
+    "src/core/ext/client_channel/connector.c",
+    "src/core/ext/client_channel/default_initial_connect_string.c",
+    "src/core/ext/client_channel/http_connect_handshaker.c",
+    "src/core/ext/client_channel/initial_connect_string.c",
+    "src/core/ext/client_channel/lb_policy.c",
+    "src/core/ext/client_channel/lb_policy_factory.c",
+    "src/core/ext/client_channel/lb_policy_registry.c",
+    "src/core/ext/client_channel/method_config.c",
+    "src/core/ext/client_channel/parse_address.c",
+    "src/core/ext/client_channel/resolver.c",
+    "src/core/ext/client_channel/resolver_factory.c",
+    "src/core/ext/client_channel/resolver_registry.c",
+    "src/core/ext/client_channel/resolver_result.c",
+    "src/core/ext/client_channel/subchannel.c",
+    "src/core/ext/client_channel/subchannel_index.c",
+    "src/core/ext/client_channel/uri_parser.c",
     "src/core/ext/transport/chttp2/server/insecure/server_chttp2.c",
     "src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.c",
     "src/core/ext/transport/chttp2/client/insecure/channel_create.c",
@@ -2077,27 +2305,34 @@
     "src/core/lib/iomgr/pollset.h",
     "src/core/lib/iomgr/pollset_set.h",
     "src/core/lib/iomgr/pollset_set_windows.h",
+    "src/core/lib/iomgr/pollset_uv.h",
     "src/core/lib/iomgr/pollset_windows.h",
+    "src/core/lib/iomgr/port.h",
     "src/core/lib/iomgr/resolve_address.h",
     "src/core/lib/iomgr/sockaddr.h",
     "src/core/lib/iomgr/sockaddr_posix.h",
     "src/core/lib/iomgr/sockaddr_utils.h",
     "src/core/lib/iomgr/sockaddr_windows.h",
+    "src/core/lib/iomgr/socket_utils.h",
     "src/core/lib/iomgr/socket_utils_posix.h",
     "src/core/lib/iomgr/socket_windows.h",
     "src/core/lib/iomgr/tcp_client.h",
     "src/core/lib/iomgr/tcp_posix.h",
     "src/core/lib/iomgr/tcp_server.h",
+    "src/core/lib/iomgr/tcp_uv.h",
     "src/core/lib/iomgr/tcp_windows.h",
     "src/core/lib/iomgr/time_averaged_stats.h",
     "src/core/lib/iomgr/timer.h",
+    "src/core/lib/iomgr/timer_generic.h",
     "src/core/lib/iomgr/timer_heap.h",
+    "src/core/lib/iomgr/timer_uv.h",
     "src/core/lib/iomgr/udp_server.h",
     "src/core/lib/iomgr/unix_sockets_posix.h",
+    "src/core/lib/iomgr/wakeup_fd_cv.h",
     "src/core/lib/iomgr/wakeup_fd_pipe.h",
     "src/core/lib/iomgr/wakeup_fd_posix.h",
     "src/core/lib/iomgr/workqueue.h",
-    "src/core/lib/iomgr/workqueue_posix.h",
+    "src/core/lib/iomgr/workqueue_uv.h",
     "src/core/lib/iomgr/workqueue_windows.h",
     "src/core/lib/json/json.h",
     "src/core/lib/json/json_common.h",
@@ -2116,6 +2351,7 @@
     "src/core/lib/surface/server.h",
     "src/core/lib/transport/byte_stream.h",
     "src/core/lib/transport/connectivity_state.h",
+    "src/core/lib/transport/mdstr_hash_table.h",
     "src/core/lib/transport/metadata.h",
     "src/core/lib/transport/metadata_batch.h",
     "src/core/lib/transport/static_metadata.h",
@@ -2167,22 +2403,23 @@
     "src/core/lib/tsi/ssl_types.h",
     "src/core/lib/tsi/transport_security.h",
     "src/core/lib/tsi/transport_security_interface.h",
-    "src/core/ext/client_config/client_channel.h",
-    "src/core/ext/client_config/client_channel_factory.h",
-    "src/core/ext/client_config/connector.h",
-    "src/core/ext/client_config/http_connect_handshaker.h",
-    "src/core/ext/client_config/initial_connect_string.h",
-    "src/core/ext/client_config/lb_policy.h",
-    "src/core/ext/client_config/lb_policy_factory.h",
-    "src/core/ext/client_config/lb_policy_registry.h",
-    "src/core/ext/client_config/parse_address.h",
-    "src/core/ext/client_config/resolver.h",
-    "src/core/ext/client_config/resolver_factory.h",
-    "src/core/ext/client_config/resolver_registry.h",
-    "src/core/ext/client_config/resolver_result.h",
-    "src/core/ext/client_config/subchannel.h",
-    "src/core/ext/client_config/subchannel_index.h",
-    "src/core/ext/client_config/uri_parser.h",
+    "src/core/ext/client_channel/client_channel.h",
+    "src/core/ext/client_channel/client_channel_factory.h",
+    "src/core/ext/client_channel/connector.h",
+    "src/core/ext/client_channel/http_connect_handshaker.h",
+    "src/core/ext/client_channel/initial_connect_string.h",
+    "src/core/ext/client_channel/lb_policy.h",
+    "src/core/ext/client_channel/lb_policy_factory.h",
+    "src/core/ext/client_channel/lb_policy_registry.h",
+    "src/core/ext/client_channel/method_config.h",
+    "src/core/ext/client_channel/parse_address.h",
+    "src/core/ext/client_channel/resolver.h",
+    "src/core/ext/client_channel/resolver_factory.h",
+    "src/core/ext/client_channel/resolver_registry.h",
+    "src/core/ext/client_channel/resolver_result.h",
+    "src/core/ext/client_channel/subchannel.h",
+    "src/core/ext/client_channel/subchannel_index.h",
+    "src/core/ext/client_channel/uri_parser.h",
     "src/core/ext/lb_policy/grpclb/grpclb.h",
     "src/core/ext/lb_policy/grpclb/load_balancer_api.h",
     "src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h",
diff --git a/CMakeLists.txt b/CMakeLists.txt
index c419152..2f301f5 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -310,6 +310,7 @@
   src/core/lib/iomgr/combiner.c
   src/core/lib/iomgr/endpoint.c
   src/core/lib/iomgr/endpoint_pair_posix.c
+  src/core/lib/iomgr/endpoint_pair_uv.c
   src/core/lib/iomgr/endpoint_pair_windows.c
   src/core/lib/iomgr/error.c
   src/core/lib/iomgr/ev_epoll_linux.c
@@ -321,36 +322,47 @@
   src/core/lib/iomgr/iocp_windows.c
   src/core/lib/iomgr/iomgr.c
   src/core/lib/iomgr/iomgr_posix.c
+  src/core/lib/iomgr/iomgr_uv.c
   src/core/lib/iomgr/iomgr_windows.c
   src/core/lib/iomgr/load_file.c
   src/core/lib/iomgr/network_status_tracker.c
   src/core/lib/iomgr/polling_entity.c
+  src/core/lib/iomgr/pollset_set_uv.c
   src/core/lib/iomgr/pollset_set_windows.c
+  src/core/lib/iomgr/pollset_uv.c
   src/core/lib/iomgr/pollset_windows.c
   src/core/lib/iomgr/resolve_address_posix.c
+  src/core/lib/iomgr/resolve_address_uv.c
   src/core/lib/iomgr/resolve_address_windows.c
   src/core/lib/iomgr/sockaddr_utils.c
   src/core/lib/iomgr/socket_utils_common_posix.c
   src/core/lib/iomgr/socket_utils_linux.c
   src/core/lib/iomgr/socket_utils_posix.c
+  src/core/lib/iomgr/socket_utils_uv.c
+  src/core/lib/iomgr/socket_utils_windows.c
   src/core/lib/iomgr/socket_windows.c
   src/core/lib/iomgr/tcp_client_posix.c
+  src/core/lib/iomgr/tcp_client_uv.c
   src/core/lib/iomgr/tcp_client_windows.c
   src/core/lib/iomgr/tcp_posix.c
   src/core/lib/iomgr/tcp_server_posix.c
+  src/core/lib/iomgr/tcp_server_uv.c
   src/core/lib/iomgr/tcp_server_windows.c
+  src/core/lib/iomgr/tcp_uv.c
   src/core/lib/iomgr/tcp_windows.c
   src/core/lib/iomgr/time_averaged_stats.c
-  src/core/lib/iomgr/timer.c
+  src/core/lib/iomgr/timer_generic.c
   src/core/lib/iomgr/timer_heap.c
+  src/core/lib/iomgr/timer_uv.c
   src/core/lib/iomgr/udp_server.c
   src/core/lib/iomgr/unix_sockets_posix.c
   src/core/lib/iomgr/unix_sockets_posix_noop.c
+  src/core/lib/iomgr/wakeup_fd_cv.c
   src/core/lib/iomgr/wakeup_fd_eventfd.c
   src/core/lib/iomgr/wakeup_fd_nospecial.c
   src/core/lib/iomgr/wakeup_fd_pipe.c
   src/core/lib/iomgr/wakeup_fd_posix.c
-  src/core/lib/iomgr/workqueue_posix.c
+  src/core/lib/iomgr/workqueue_uv.c
   src/core/lib/iomgr/workqueue_windows.c
   src/core/lib/json/json.c
   src/core/lib/json/json_reader.c
@@ -376,6 +388,7 @@
   src/core/lib/surface/version.c
   src/core/lib/transport/byte_stream.c
   src/core/lib/transport/connectivity_state.c
+  src/core/lib/transport/mdstr_hash_table.c
   src/core/lib/transport/metadata.c
   src/core/lib/transport/metadata_batch.c
   src/core/lib/transport/static_metadata.c
@@ -411,8 +424,7 @@
   src/core/lib/security/credentials/credentials.c
   src/core/lib/security/credentials/credentials_metadata.c
   src/core/lib/security/credentials/fake/fake_credentials.c
-  src/core/lib/security/credentials/google_default/credentials_posix.c
-  src/core/lib/security/credentials/google_default/credentials_windows.c
+  src/core/lib/security/credentials/google_default/credentials_generic.c
   src/core/lib/security/credentials/google_default/google_default_credentials.c
   src/core/lib/security/credentials/iam/iam_credentials.c
   src/core/lib/security/credentials/jwt/json_token.c
@@ -434,25 +446,26 @@
   src/core/lib/tsi/ssl_transport_security.c
   src/core/lib/tsi/transport_security.c
   src/core/ext/transport/chttp2/client/secure/secure_channel_create.c
-  src/core/ext/client_config/channel_connectivity.c
-  src/core/ext/client_config/client_channel.c
-  src/core/ext/client_config/client_channel_factory.c
-  src/core/ext/client_config/client_config_plugin.c
-  src/core/ext/client_config/connector.c
-  src/core/ext/client_config/default_initial_connect_string.c
-  src/core/ext/client_config/http_connect_handshaker.c
-  src/core/ext/client_config/initial_connect_string.c
-  src/core/ext/client_config/lb_policy.c
-  src/core/ext/client_config/lb_policy_factory.c
-  src/core/ext/client_config/lb_policy_registry.c
-  src/core/ext/client_config/parse_address.c
-  src/core/ext/client_config/resolver.c
-  src/core/ext/client_config/resolver_factory.c
-  src/core/ext/client_config/resolver_registry.c
-  src/core/ext/client_config/resolver_result.c
-  src/core/ext/client_config/subchannel.c
-  src/core/ext/client_config/subchannel_index.c
-  src/core/ext/client_config/uri_parser.c
+  src/core/ext/client_channel/channel_connectivity.c
+  src/core/ext/client_channel/client_channel.c
+  src/core/ext/client_channel/client_channel_factory.c
+  src/core/ext/client_channel/client_channel_plugin.c
+  src/core/ext/client_channel/connector.c
+  src/core/ext/client_channel/default_initial_connect_string.c
+  src/core/ext/client_channel/http_connect_handshaker.c
+  src/core/ext/client_channel/initial_connect_string.c
+  src/core/ext/client_channel/lb_policy.c
+  src/core/ext/client_channel/lb_policy_factory.c
+  src/core/ext/client_channel/lb_policy_registry.c
+  src/core/ext/client_channel/method_config.c
+  src/core/ext/client_channel/parse_address.c
+  src/core/ext/client_channel/resolver.c
+  src/core/ext/client_channel/resolver_factory.c
+  src/core/ext/client_channel/resolver_registry.c
+  src/core/ext/client_channel/resolver_result.c
+  src/core/ext/client_channel/subchannel.c
+  src/core/ext/client_channel/subchannel_index.c
+  src/core/ext/client_channel/uri_parser.c
   src/core/ext/transport/chttp2/server/insecure/server_chttp2.c
   src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.c
   src/core/ext/transport/chttp2/client/insecure/channel_create.c
@@ -569,6 +582,7 @@
   src/core/lib/iomgr/combiner.c
   src/core/lib/iomgr/endpoint.c
   src/core/lib/iomgr/endpoint_pair_posix.c
+  src/core/lib/iomgr/endpoint_pair_uv.c
   src/core/lib/iomgr/endpoint_pair_windows.c
   src/core/lib/iomgr/error.c
   src/core/lib/iomgr/ev_epoll_linux.c
@@ -580,36 +594,47 @@
   src/core/lib/iomgr/iocp_windows.c
   src/core/lib/iomgr/iomgr.c
   src/core/lib/iomgr/iomgr_posix.c
+  src/core/lib/iomgr/iomgr_uv.c
   src/core/lib/iomgr/iomgr_windows.c
   src/core/lib/iomgr/load_file.c
   src/core/lib/iomgr/network_status_tracker.c
   src/core/lib/iomgr/polling_entity.c
+  src/core/lib/iomgr/pollset_set_uv.c
   src/core/lib/iomgr/pollset_set_windows.c
+  src/core/lib/iomgr/pollset_uv.c
   src/core/lib/iomgr/pollset_windows.c
   src/core/lib/iomgr/resolve_address_posix.c
+  src/core/lib/iomgr/resolve_address_uv.c
   src/core/lib/iomgr/resolve_address_windows.c
   src/core/lib/iomgr/sockaddr_utils.c
   src/core/lib/iomgr/socket_utils_common_posix.c
   src/core/lib/iomgr/socket_utils_linux.c
   src/core/lib/iomgr/socket_utils_posix.c
+  src/core/lib/iomgr/socket_utils_uv.c
+  src/core/lib/iomgr/socket_utils_windows.c
   src/core/lib/iomgr/socket_windows.c
   src/core/lib/iomgr/tcp_client_posix.c
+  src/core/lib/iomgr/tcp_client_uv.c
   src/core/lib/iomgr/tcp_client_windows.c
   src/core/lib/iomgr/tcp_posix.c
   src/core/lib/iomgr/tcp_server_posix.c
+  src/core/lib/iomgr/tcp_server_uv.c
   src/core/lib/iomgr/tcp_server_windows.c
+  src/core/lib/iomgr/tcp_uv.c
   src/core/lib/iomgr/tcp_windows.c
   src/core/lib/iomgr/time_averaged_stats.c
-  src/core/lib/iomgr/timer.c
+  src/core/lib/iomgr/timer_generic.c
   src/core/lib/iomgr/timer_heap.c
+  src/core/lib/iomgr/timer_uv.c
   src/core/lib/iomgr/udp_server.c
   src/core/lib/iomgr/unix_sockets_posix.c
   src/core/lib/iomgr/unix_sockets_posix_noop.c
+  src/core/lib/iomgr/wakeup_fd_cv.c
   src/core/lib/iomgr/wakeup_fd_eventfd.c
   src/core/lib/iomgr/wakeup_fd_nospecial.c
   src/core/lib/iomgr/wakeup_fd_pipe.c
   src/core/lib/iomgr/wakeup_fd_posix.c
-  src/core/lib/iomgr/workqueue_posix.c
+  src/core/lib/iomgr/workqueue_uv.c
   src/core/lib/iomgr/workqueue_windows.c
   src/core/lib/json/json.c
   src/core/lib/json/json_reader.c
@@ -635,6 +660,7 @@
   src/core/lib/surface/version.c
   src/core/lib/transport/byte_stream.c
   src/core/lib/transport/connectivity_state.c
+  src/core/lib/transport/mdstr_hash_table.c
   src/core/lib/transport/metadata.c
   src/core/lib/transport/metadata_batch.c
   src/core/lib/transport/static_metadata.c
@@ -667,33 +693,33 @@
   src/core/ext/transport/chttp2/transport/varint.c
   src/core/ext/transport/chttp2/transport/writing.c
   src/core/ext/transport/chttp2/alpn/alpn.c
-  src/core/ext/client_config/channel_connectivity.c
-  src/core/ext/client_config/client_channel.c
-  src/core/ext/client_config/client_channel_factory.c
-  src/core/ext/client_config/client_config_plugin.c
-  src/core/ext/client_config/connector.c
-  src/core/ext/client_config/default_initial_connect_string.c
-  src/core/ext/client_config/http_connect_handshaker.c
-  src/core/ext/client_config/initial_connect_string.c
-  src/core/ext/client_config/lb_policy.c
-  src/core/ext/client_config/lb_policy_factory.c
-  src/core/ext/client_config/lb_policy_registry.c
-  src/core/ext/client_config/parse_address.c
-  src/core/ext/client_config/resolver.c
-  src/core/ext/client_config/resolver_factory.c
-  src/core/ext/client_config/resolver_registry.c
-  src/core/ext/client_config/resolver_result.c
-  src/core/ext/client_config/subchannel.c
-  src/core/ext/client_config/subchannel_index.c
-  src/core/ext/client_config/uri_parser.c
+  src/core/ext/client_channel/channel_connectivity.c
+  src/core/ext/client_channel/client_channel.c
+  src/core/ext/client_channel/client_channel_factory.c
+  src/core/ext/client_channel/client_channel_plugin.c
+  src/core/ext/client_channel/connector.c
+  src/core/ext/client_channel/default_initial_connect_string.c
+  src/core/ext/client_channel/http_connect_handshaker.c
+  src/core/ext/client_channel/initial_connect_string.c
+  src/core/ext/client_channel/lb_policy.c
+  src/core/ext/client_channel/lb_policy_factory.c
+  src/core/ext/client_channel/lb_policy_registry.c
+  src/core/ext/client_channel/method_config.c
+  src/core/ext/client_channel/parse_address.c
+  src/core/ext/client_channel/resolver.c
+  src/core/ext/client_channel/resolver_factory.c
+  src/core/ext/client_channel/resolver_registry.c
+  src/core/ext/client_channel/resolver_result.c
+  src/core/ext/client_channel/subchannel.c
+  src/core/ext/client_channel/subchannel_index.c
+  src/core/ext/client_channel/uri_parser.c
   src/core/lib/http/httpcli_security_connector.c
   src/core/lib/security/context/security_context.c
   src/core/lib/security/credentials/composite/composite_credentials.c
   src/core/lib/security/credentials/credentials.c
   src/core/lib/security/credentials/credentials_metadata.c
   src/core/lib/security/credentials/fake/fake_credentials.c
-  src/core/lib/security/credentials/google_default/credentials_posix.c
-  src/core/lib/security/credentials/google_default/credentials_windows.c
+  src/core/lib/security/credentials/google_default/credentials_generic.c
   src/core/lib/security/credentials/google_default/google_default_credentials.c
   src/core/lib/security/credentials/iam/iam_credentials.c
   src/core/lib/security/credentials/jwt/json_token.c
@@ -800,6 +826,7 @@
   src/core/lib/iomgr/combiner.c
   src/core/lib/iomgr/endpoint.c
   src/core/lib/iomgr/endpoint_pair_posix.c
+  src/core/lib/iomgr/endpoint_pair_uv.c
   src/core/lib/iomgr/endpoint_pair_windows.c
   src/core/lib/iomgr/error.c
   src/core/lib/iomgr/ev_epoll_linux.c
@@ -811,36 +838,47 @@
   src/core/lib/iomgr/iocp_windows.c
   src/core/lib/iomgr/iomgr.c
   src/core/lib/iomgr/iomgr_posix.c
+  src/core/lib/iomgr/iomgr_uv.c
   src/core/lib/iomgr/iomgr_windows.c
   src/core/lib/iomgr/load_file.c
   src/core/lib/iomgr/network_status_tracker.c
   src/core/lib/iomgr/polling_entity.c
+  src/core/lib/iomgr/pollset_set_uv.c
   src/core/lib/iomgr/pollset_set_windows.c
+  src/core/lib/iomgr/pollset_uv.c
   src/core/lib/iomgr/pollset_windows.c
   src/core/lib/iomgr/resolve_address_posix.c
+  src/core/lib/iomgr/resolve_address_uv.c
   src/core/lib/iomgr/resolve_address_windows.c
   src/core/lib/iomgr/sockaddr_utils.c
   src/core/lib/iomgr/socket_utils_common_posix.c
   src/core/lib/iomgr/socket_utils_linux.c
   src/core/lib/iomgr/socket_utils_posix.c
+  src/core/lib/iomgr/socket_utils_uv.c
+  src/core/lib/iomgr/socket_utils_windows.c
   src/core/lib/iomgr/socket_windows.c
   src/core/lib/iomgr/tcp_client_posix.c
+  src/core/lib/iomgr/tcp_client_uv.c
   src/core/lib/iomgr/tcp_client_windows.c
   src/core/lib/iomgr/tcp_posix.c
   src/core/lib/iomgr/tcp_server_posix.c
+  src/core/lib/iomgr/tcp_server_uv.c
   src/core/lib/iomgr/tcp_server_windows.c
+  src/core/lib/iomgr/tcp_uv.c
   src/core/lib/iomgr/tcp_windows.c
   src/core/lib/iomgr/time_averaged_stats.c
-  src/core/lib/iomgr/timer.c
+  src/core/lib/iomgr/timer_generic.c
   src/core/lib/iomgr/timer_heap.c
+  src/core/lib/iomgr/timer_uv.c
   src/core/lib/iomgr/udp_server.c
   src/core/lib/iomgr/unix_sockets_posix.c
   src/core/lib/iomgr/unix_sockets_posix_noop.c
+  src/core/lib/iomgr/wakeup_fd_cv.c
   src/core/lib/iomgr/wakeup_fd_eventfd.c
   src/core/lib/iomgr/wakeup_fd_nospecial.c
   src/core/lib/iomgr/wakeup_fd_pipe.c
   src/core/lib/iomgr/wakeup_fd_posix.c
-  src/core/lib/iomgr/workqueue_posix.c
+  src/core/lib/iomgr/workqueue_uv.c
   src/core/lib/iomgr/workqueue_windows.c
   src/core/lib/json/json.c
   src/core/lib/json/json_reader.c
@@ -866,6 +904,7 @@
   src/core/lib/surface/version.c
   src/core/lib/transport/byte_stream.c
   src/core/lib/transport/connectivity_state.c
+  src/core/lib/transport/mdstr_hash_table.c
   src/core/lib/transport/metadata.c
   src/core/lib/transport/metadata_batch.c
   src/core/lib/transport/static_metadata.c
@@ -898,25 +937,26 @@
   src/core/ext/transport/chttp2/alpn/alpn.c
   src/core/ext/transport/chttp2/client/insecure/channel_create.c
   src/core/ext/transport/chttp2/client/insecure/channel_create_posix.c
-  src/core/ext/client_config/channel_connectivity.c
-  src/core/ext/client_config/client_channel.c
-  src/core/ext/client_config/client_channel_factory.c
-  src/core/ext/client_config/client_config_plugin.c
-  src/core/ext/client_config/connector.c
-  src/core/ext/client_config/default_initial_connect_string.c
-  src/core/ext/client_config/http_connect_handshaker.c
-  src/core/ext/client_config/initial_connect_string.c
-  src/core/ext/client_config/lb_policy.c
-  src/core/ext/client_config/lb_policy_factory.c
-  src/core/ext/client_config/lb_policy_registry.c
-  src/core/ext/client_config/parse_address.c
-  src/core/ext/client_config/resolver.c
-  src/core/ext/client_config/resolver_factory.c
-  src/core/ext/client_config/resolver_registry.c
-  src/core/ext/client_config/resolver_result.c
-  src/core/ext/client_config/subchannel.c
-  src/core/ext/client_config/subchannel_index.c
-  src/core/ext/client_config/uri_parser.c
+  src/core/ext/client_channel/channel_connectivity.c
+  src/core/ext/client_channel/client_channel.c
+  src/core/ext/client_channel/client_channel_factory.c
+  src/core/ext/client_channel/client_channel_plugin.c
+  src/core/ext/client_channel/connector.c
+  src/core/ext/client_channel/default_initial_connect_string.c
+  src/core/ext/client_channel/http_connect_handshaker.c
+  src/core/ext/client_channel/initial_connect_string.c
+  src/core/ext/client_channel/lb_policy.c
+  src/core/ext/client_channel/lb_policy_factory.c
+  src/core/ext/client_channel/lb_policy_registry.c
+  src/core/ext/client_channel/method_config.c
+  src/core/ext/client_channel/parse_address.c
+  src/core/ext/client_channel/resolver.c
+  src/core/ext/client_channel/resolver_factory.c
+  src/core/ext/client_channel/resolver_registry.c
+  src/core/ext/client_channel/resolver_result.c
+  src/core/ext/client_channel/subchannel.c
+  src/core/ext/client_channel/subchannel_index.c
+  src/core/ext/client_channel/uri_parser.c
   src/core/ext/resolver/dns/native/dns_resolver.c
   src/core/ext/resolver/sockaddr/sockaddr_resolver.c
   src/core/ext/load_reporting/load_reporting.c
@@ -1171,6 +1211,169 @@
 endif()
 
   
+add_library(grpc++_cronet
+  src/cpp/client/cronet_credentials.cc
+  src/cpp/client/insecure_credentials.cc
+  src/cpp/common/insecure_create_auth_context.cc
+  src/cpp/server/insecure_server_credentials.cc
+  src/cpp/client/channel_cc.cc
+  src/cpp/client/client_context.cc
+  src/cpp/client/create_channel.cc
+  src/cpp/client/create_channel_internal.cc
+  src/cpp/client/create_channel_posix.cc
+  src/cpp/client/credentials_cc.cc
+  src/cpp/client/generic_stub.cc
+  src/cpp/common/channel_arguments.cc
+  src/cpp/common/channel_filter.cc
+  src/cpp/common/completion_queue_cc.cc
+  src/cpp/common/core_codegen.cc
+  src/cpp/common/rpc_method.cc
+  src/cpp/server/async_generic_service.cc
+  src/cpp/server/create_default_thread_pool.cc
+  src/cpp/server/dynamic_thread_pool.cc
+  src/cpp/server/server_builder.cc
+  src/cpp/server/server_cc.cc
+  src/cpp/server/server_context.cc
+  src/cpp/server/server_credentials.cc
+  src/cpp/server/server_posix.cc
+  src/cpp/util/byte_buffer_cc.cc
+  src/cpp/util/slice_cc.cc
+  src/cpp/util/status.cc
+  src/cpp/util/string_ref.cc
+  src/cpp/util/time_cc.cc
+  src/cpp/codegen/codegen_init.cc
+)
+
+target_include_directories(grpc++_cronet
+  PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}
+  PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include
+  PRIVATE ${BORINGSSL_ROOT_DIR}/include
+  PRIVATE ${PROTOBUF_ROOT_DIR}/src
+  PRIVATE ${ZLIB_INCLUDE_DIR}
+  PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/third_party/zlib
+)
+
+target_link_libraries(grpc++_cronet
+  ${_gRPC_BASELIB_LIBRARIES}
+  ${_gRPC_SSL_LIBRARIES}
+  gpr
+  grpc_cronet
+)
+
+foreach(_hdr
+  include/grpc++/alarm.h
+  include/grpc++/channel.h
+  include/grpc++/client_context.h
+  include/grpc++/completion_queue.h
+  include/grpc++/create_channel.h
+  include/grpc++/create_channel_posix.h
+  include/grpc++/generic/async_generic_service.h
+  include/grpc++/generic/generic_stub.h
+  include/grpc++/grpc++.h
+  include/grpc++/impl/call.h
+  include/grpc++/impl/client_unary_call.h
+  include/grpc++/impl/codegen/core_codegen.h
+  include/grpc++/impl/grpc_library.h
+  include/grpc++/impl/method_handler_impl.h
+  include/grpc++/impl/rpc_method.h
+  include/grpc++/impl/rpc_service_method.h
+  include/grpc++/impl/serialization_traits.h
+  include/grpc++/impl/server_builder_option.h
+  include/grpc++/impl/server_builder_plugin.h
+  include/grpc++/impl/server_initializer.h
+  include/grpc++/impl/service_type.h
+  include/grpc++/impl/sync.h
+  include/grpc++/impl/sync_cxx11.h
+  include/grpc++/impl/sync_no_cxx11.h
+  include/grpc++/impl/thd.h
+  include/grpc++/impl/thd_cxx11.h
+  include/grpc++/impl/thd_no_cxx11.h
+  include/grpc++/security/auth_context.h
+  include/grpc++/security/auth_metadata_processor.h
+  include/grpc++/security/credentials.h
+  include/grpc++/security/server_credentials.h
+  include/grpc++/server.h
+  include/grpc++/server_builder.h
+  include/grpc++/server_context.h
+  include/grpc++/server_posix.h
+  include/grpc++/support/async_stream.h
+  include/grpc++/support/async_unary_call.h
+  include/grpc++/support/byte_buffer.h
+  include/grpc++/support/channel_arguments.h
+  include/grpc++/support/config.h
+  include/grpc++/support/slice.h
+  include/grpc++/support/status.h
+  include/grpc++/support/status_code_enum.h
+  include/grpc++/support/string_ref.h
+  include/grpc++/support/stub_options.h
+  include/grpc++/support/sync_stream.h
+  include/grpc++/support/time.h
+  include/grpc++/impl/codegen/async_stream.h
+  include/grpc++/impl/codegen/async_unary_call.h
+  include/grpc++/impl/codegen/call.h
+  include/grpc++/impl/codegen/call_hook.h
+  include/grpc++/impl/codegen/channel_interface.h
+  include/grpc++/impl/codegen/client_context.h
+  include/grpc++/impl/codegen/client_unary_call.h
+  include/grpc++/impl/codegen/completion_queue.h
+  include/grpc++/impl/codegen/completion_queue_tag.h
+  include/grpc++/impl/codegen/config.h
+  include/grpc++/impl/codegen/core_codegen_interface.h
+  include/grpc++/impl/codegen/create_auth_context.h
+  include/grpc++/impl/codegen/grpc_library.h
+  include/grpc++/impl/codegen/method_handler_impl.h
+  include/grpc++/impl/codegen/rpc_method.h
+  include/grpc++/impl/codegen/rpc_service_method.h
+  include/grpc++/impl/codegen/security/auth_context.h
+  include/grpc++/impl/codegen/serialization_traits.h
+  include/grpc++/impl/codegen/server_context.h
+  include/grpc++/impl/codegen/server_interface.h
+  include/grpc++/impl/codegen/service_type.h
+  include/grpc++/impl/codegen/status.h
+  include/grpc++/impl/codegen/status_code_enum.h
+  include/grpc++/impl/codegen/status_helper.h
+  include/grpc++/impl/codegen/string_ref.h
+  include/grpc++/impl/codegen/stub_options.h
+  include/grpc++/impl/codegen/sync.h
+  include/grpc++/impl/codegen/sync_cxx11.h
+  include/grpc++/impl/codegen/sync_no_cxx11.h
+  include/grpc++/impl/codegen/sync_stream.h
+  include/grpc++/impl/codegen/time.h
+  include/grpc/impl/codegen/byte_buffer_reader.h
+  include/grpc/impl/codegen/compression_types.h
+  include/grpc/impl/codegen/connectivity_state.h
+  include/grpc/impl/codegen/grpc_types.h
+  include/grpc/impl/codegen/propagation_bits.h
+  include/grpc/impl/codegen/status.h
+  include/grpc/impl/codegen/atm.h
+  include/grpc/impl/codegen/atm_gcc_atomic.h
+  include/grpc/impl/codegen/atm_gcc_sync.h
+  include/grpc/impl/codegen/atm_windows.h
+  include/grpc/impl/codegen/gpr_types.h
+  include/grpc/impl/codegen/port_platform.h
+  include/grpc/impl/codegen/slice.h
+  include/grpc/impl/codegen/sync.h
+  include/grpc/impl/codegen/sync_generic.h
+  include/grpc/impl/codegen/sync_posix.h
+  include/grpc/impl/codegen/sync_windows.h
+)
+  string(REPLACE "include/" "" _path ${_hdr})
+  get_filename_component(_path ${_path} PATH)
+  install(FILES ${_hdr}
+    DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/${_path}"
+  )
+endforeach()
+
+  
+if (gRPC_INSTALL)
+  install(TARGETS grpc++_cronet EXPORT gRPCTargets
+    RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+    ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
+  )
+endif()
+
+  
 add_library(grpc++_reflection
   src/cpp/ext/proto_server_reflection.cc
   src/cpp/ext/proto_server_reflection_plugin.cc
diff --git a/Makefile b/Makefile
index 62c6582..892009d 100644
--- a/Makefile
+++ b/Makefile
@@ -345,10 +345,6 @@
 HOST_LD ?= $(LD)
 HOST_LDXX ?= $(LDXX)
 
-ifdef EXTRA_DEFINES
-DEFINES += $(EXTRA_DEFINES)
-endif
-
 CFLAGS += -std=c99 -Wsign-conversion -Wconversion $(W_SHADOW) $(W_EXTRA_SEMI)
 ifeq ($(HAS_CXX11),true)
 CXXFLAGS += -std=c++11
@@ -447,6 +443,14 @@
 LDLIBS += $(addprefix -l, $(LIBS))
 LDLIBSXX += $(addprefix -l, $(LIBSXX))
 
+
+CFLAGS += $(EXTRA_CFLAGS)
+CXXFLAGS += $(EXTRA_CXXFLAGS)
+CPPFLAGS += $(EXTRA_CPPFLAGS)
+LDFLAGS += $(EXTRA_LDFLAGS)
+DEFINES += $(EXTRA_DEFINES)
+LDLIBS += $(EXTRA_LDLIBS)
+
 HOST_CPPFLAGS = $(CPPFLAGS)
 HOST_CFLAGS = $(CFLAGS)
 HOST_CXXFLAGS = $(CXXFLAGS)
@@ -1025,6 +1029,7 @@
 udp_server_test: $(BINDIR)/$(CONFIG)/udp_server_test
 uri_fuzzer_test: $(BINDIR)/$(CONFIG)/uri_fuzzer_test
 uri_parser_test: $(BINDIR)/$(CONFIG)/uri_parser_test
+wakeup_fd_cv_test: $(BINDIR)/$(CONFIG)/wakeup_fd_cv_test
 alarm_cpp_test: $(BINDIR)/$(CONFIG)/alarm_cpp_test
 async_end2end_test: $(BINDIR)/$(CONFIG)/async_end2end_test
 auth_property_iterator_test: $(BINDIR)/$(CONFIG)/auth_property_iterator_test
@@ -1071,6 +1076,7 @@
 secure_auth_context_test: $(BINDIR)/$(CONFIG)/secure_auth_context_test
 secure_sync_unary_ping_pong_test: $(BINDIR)/$(CONFIG)/secure_sync_unary_ping_pong_test
 server_builder_plugin_test: $(BINDIR)/$(CONFIG)/server_builder_plugin_test
+server_context_test_spouse_test: $(BINDIR)/$(CONFIG)/server_context_test_spouse_test
 server_crash_test: $(BINDIR)/$(CONFIG)/server_crash_test
 server_crash_test_client: $(BINDIR)/$(CONFIG)/server_crash_test_client
 shutdown_test: $(BINDIR)/$(CONFIG)/shutdown_test
@@ -1131,6 +1137,7 @@
 bad_ssl_cert_test: $(BINDIR)/$(CONFIG)/bad_ssl_cert_test
 h2_census_test: $(BINDIR)/$(CONFIG)/h2_census_test
 h2_compress_test: $(BINDIR)/$(CONFIG)/h2_compress_test
+h2_fake_resolver_test: $(BINDIR)/$(CONFIG)/h2_fake_resolver_test
 h2_fakesec_test: $(BINDIR)/$(CONFIG)/h2_fakesec_test
 h2_fd_test: $(BINDIR)/$(CONFIG)/h2_fd_test
 h2_full_test: $(BINDIR)/$(CONFIG)/h2_full_test
@@ -1149,6 +1156,7 @@
 h2_uds_test: $(BINDIR)/$(CONFIG)/h2_uds_test
 h2_census_nosec_test: $(BINDIR)/$(CONFIG)/h2_census_nosec_test
 h2_compress_nosec_test: $(BINDIR)/$(CONFIG)/h2_compress_nosec_test
+h2_fake_resolver_nosec_test: $(BINDIR)/$(CONFIG)/h2_fake_resolver_nosec_test
 h2_fd_nosec_test: $(BINDIR)/$(CONFIG)/h2_fd_nosec_test
 h2_full_nosec_test: $(BINDIR)/$(CONFIG)/h2_full_nosec_test
 h2_full+pipe_nosec_test: $(BINDIR)/$(CONFIG)/h2_full+pipe_nosec_test
@@ -1200,12 +1208,12 @@
 
 static_c: pc_c pc_c_unsecure cache.mk  $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgrpc_cronet.a $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a
 
-static_cxx: pc_cxx pc_cxx_unsecure cache.mk  $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc++_reflection.a $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a
+static_cxx: pc_cxx pc_cxx_unsecure cache.mk  $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc++_cronet.a $(LIBDIR)/$(CONFIG)/libgrpc++_reflection.a $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a
 
 shared: shared_c shared_cxx
 
 shared_c: pc_c pc_c_unsecure cache.mk $(LIBDIR)/$(CONFIG)/$(SHARED_PREFIX)gpr$(SHARED_VERSION).$(SHARED_EXT) $(LIBDIR)/$(CONFIG)/$(SHARED_PREFIX)grpc$(SHARED_VERSION).$(SHARED_EXT) $(LIBDIR)/$(CONFIG)/$(SHARED_PREFIX)grpc_cronet$(SHARED_VERSION).$(SHARED_EXT) $(LIBDIR)/$(CONFIG)/$(SHARED_PREFIX)grpc_unsecure$(SHARED_VERSION).$(SHARED_EXT)
-shared_cxx: pc_cxx pc_cxx_unsecure cache.mk $(LIBDIR)/$(CONFIG)/$(SHARED_PREFIX)grpc++$(SHARED_VERSION).$(SHARED_EXT) $(LIBDIR)/$(CONFIG)/$(SHARED_PREFIX)grpc++_reflection$(SHARED_VERSION).$(SHARED_EXT) $(LIBDIR)/$(CONFIG)/$(SHARED_PREFIX)grpc++_unsecure$(SHARED_VERSION).$(SHARED_EXT)
+shared_cxx: pc_cxx pc_cxx_unsecure cache.mk $(LIBDIR)/$(CONFIG)/$(SHARED_PREFIX)grpc++$(SHARED_VERSION).$(SHARED_EXT) $(LIBDIR)/$(CONFIG)/$(SHARED_PREFIX)grpc++_cronet$(SHARED_VERSION).$(SHARED_EXT) $(LIBDIR)/$(CONFIG)/$(SHARED_PREFIX)grpc++_reflection$(SHARED_VERSION).$(SHARED_EXT) $(LIBDIR)/$(CONFIG)/$(SHARED_PREFIX)grpc++_unsecure$(SHARED_VERSION).$(SHARED_EXT)
 
 shared_csharp: shared_c  $(LIBDIR)/$(CONFIG)/$(SHARED_PREFIX)grpc_csharp_ext$(SHARED_VERSION).$(SHARED_EXT)
 grpc_csharp_ext: shared_csharp
@@ -1224,9 +1232,9 @@
 pc_cxx_unsecure: $(LIBDIR)/$(CONFIG)/pkgconfig/grpc++_unsecure.pc
 
 ifeq ($(EMBED_OPENSSL),true)
-privatelibs_cxx:  $(LIBDIR)/$(CONFIG)/libgrpc++_reflection_codegen.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_cli_libs.a $(LIBDIR)/$(CONFIG)/libinterop_client_helper.a $(LIBDIR)/$(CONFIG)/libinterop_client_main.a $(LIBDIR)/$(CONFIG)/libinterop_server_helper.a $(LIBDIR)/$(CONFIG)/libinterop_server_lib.a $(LIBDIR)/$(CONFIG)/libinterop_server_main.a $(LIBDIR)/$(CONFIG)/libqps.a $(LIBDIR)/$(CONFIG)/libboringssl_test_util.a $(LIBDIR)/$(CONFIG)/libboringssl_aes_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_asn1_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_base64_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_bio_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_bn_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_bytestring_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_aead_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_cipher_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_cmac_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_ed25519_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_x25519_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_dh_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_digest_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_ec_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_ecdsa_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_err_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_evp_extra_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_evp_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_pbkdf_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_hmac_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_pkcs12_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_pkcs8_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_poly1305_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_rsa_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_x509_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_ssl_test_lib.a
+privatelibs_cxx:  $(LIBDIR)/$(CONFIG)/libgrpc++_reflection_codegen.a $(LIBDIR)/$(CONFIG)/libgrpc++_test.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_cli_libs.a $(LIBDIR)/$(CONFIG)/libinterop_client_helper.a $(LIBDIR)/$(CONFIG)/libinterop_client_main.a $(LIBDIR)/$(CONFIG)/libinterop_server_helper.a $(LIBDIR)/$(CONFIG)/libinterop_server_lib.a $(LIBDIR)/$(CONFIG)/libinterop_server_main.a $(LIBDIR)/$(CONFIG)/libqps.a $(LIBDIR)/$(CONFIG)/libboringssl_test_util.a $(LIBDIR)/$(CONFIG)/libboringssl_aes_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_asn1_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_base64_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_bio_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_bn_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_bytestring_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_aead_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_cipher_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_cmac_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_ed25519_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_x25519_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_dh_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_digest_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_ec_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_ecdsa_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_err_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_evp_extra_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_evp_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_pbkdf_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_hmac_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_pkcs12_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_pkcs8_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_poly1305_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_rsa_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_x509_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_ssl_test_lib.a
 else
-privatelibs_cxx:  $(LIBDIR)/$(CONFIG)/libgrpc++_reflection_codegen.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_cli_libs.a $(LIBDIR)/$(CONFIG)/libinterop_client_helper.a $(LIBDIR)/$(CONFIG)/libinterop_client_main.a $(LIBDIR)/$(CONFIG)/libinterop_server_helper.a $(LIBDIR)/$(CONFIG)/libinterop_server_lib.a $(LIBDIR)/$(CONFIG)/libinterop_server_main.a $(LIBDIR)/$(CONFIG)/libqps.a
+privatelibs_cxx:  $(LIBDIR)/$(CONFIG)/libgrpc++_reflection_codegen.a $(LIBDIR)/$(CONFIG)/libgrpc++_test.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_cli_libs.a $(LIBDIR)/$(CONFIG)/libinterop_client_helper.a $(LIBDIR)/$(CONFIG)/libinterop_client_main.a $(LIBDIR)/$(CONFIG)/libinterop_server_helper.a $(LIBDIR)/$(CONFIG)/libinterop_server_lib.a $(LIBDIR)/$(CONFIG)/libinterop_server_main.a $(LIBDIR)/$(CONFIG)/libqps.a
 endif
 
 
@@ -1340,6 +1348,7 @@
   $(BINDIR)/$(CONFIG)/transport_security_test \
   $(BINDIR)/$(CONFIG)/udp_server_test \
   $(BINDIR)/$(CONFIG)/uri_parser_test \
+  $(BINDIR)/$(CONFIG)/wakeup_fd_cv_test \
   $(BINDIR)/$(CONFIG)/public_headers_must_be_c89 \
   $(BINDIR)/$(CONFIG)/badreq_bad_client_test \
   $(BINDIR)/$(CONFIG)/connection_prefix_bad_client_test \
@@ -1355,6 +1364,7 @@
   $(BINDIR)/$(CONFIG)/bad_ssl_cert_test \
   $(BINDIR)/$(CONFIG)/h2_census_test \
   $(BINDIR)/$(CONFIG)/h2_compress_test \
+  $(BINDIR)/$(CONFIG)/h2_fake_resolver_test \
   $(BINDIR)/$(CONFIG)/h2_fakesec_test \
   $(BINDIR)/$(CONFIG)/h2_fd_test \
   $(BINDIR)/$(CONFIG)/h2_full_test \
@@ -1373,6 +1383,7 @@
   $(BINDIR)/$(CONFIG)/h2_uds_test \
   $(BINDIR)/$(CONFIG)/h2_census_nosec_test \
   $(BINDIR)/$(CONFIG)/h2_compress_nosec_test \
+  $(BINDIR)/$(CONFIG)/h2_fake_resolver_nosec_test \
   $(BINDIR)/$(CONFIG)/h2_fd_nosec_test \
   $(BINDIR)/$(CONFIG)/h2_full_nosec_test \
   $(BINDIR)/$(CONFIG)/h2_full+pipe_nosec_test \
@@ -1439,6 +1450,7 @@
   $(BINDIR)/$(CONFIG)/secure_auth_context_test \
   $(BINDIR)/$(CONFIG)/secure_sync_unary_ping_pong_test \
   $(BINDIR)/$(CONFIG)/server_builder_plugin_test \
+  $(BINDIR)/$(CONFIG)/server_context_test_spouse_test \
   $(BINDIR)/$(CONFIG)/server_crash_test \
   $(BINDIR)/$(CONFIG)/server_crash_test_client \
   $(BINDIR)/$(CONFIG)/shutdown_test \
@@ -1526,6 +1538,7 @@
   $(BINDIR)/$(CONFIG)/secure_auth_context_test \
   $(BINDIR)/$(CONFIG)/secure_sync_unary_ping_pong_test \
   $(BINDIR)/$(CONFIG)/server_builder_plugin_test \
+  $(BINDIR)/$(CONFIG)/server_context_test_spouse_test \
   $(BINDIR)/$(CONFIG)/server_crash_test \
   $(BINDIR)/$(CONFIG)/server_crash_test_client \
   $(BINDIR)/$(CONFIG)/shutdown_test \
@@ -1738,6 +1751,8 @@
 	$(Q) $(BINDIR)/$(CONFIG)/udp_server_test || ( echo test udp_server_test failed ; exit 1 )
 	$(E) "[RUN]     Testing uri_parser_test"
 	$(Q) $(BINDIR)/$(CONFIG)/uri_parser_test || ( echo test uri_parser_test failed ; exit 1 )
+	$(E) "[RUN]     Testing wakeup_fd_cv_test"
+	$(Q) $(BINDIR)/$(CONFIG)/wakeup_fd_cv_test || ( echo test wakeup_fd_cv_test failed ; exit 1 )
 	$(E) "[RUN]     Testing public_headers_must_be_c89"
 	$(Q) $(BINDIR)/$(CONFIG)/public_headers_must_be_c89 || ( echo test public_headers_must_be_c89 failed ; exit 1 )
 	$(E) "[RUN]     Testing badreq_bad_client_test"
@@ -1828,6 +1843,8 @@
 	$(Q) $(BINDIR)/$(CONFIG)/secure_sync_unary_ping_pong_test || ( echo test secure_sync_unary_ping_pong_test failed ; exit 1 )
 	$(E) "[RUN]     Testing server_builder_plugin_test"
 	$(Q) $(BINDIR)/$(CONFIG)/server_builder_plugin_test || ( echo test server_builder_plugin_test failed ; exit 1 )
+	$(E) "[RUN]     Testing server_context_test_spouse_test"
+	$(Q) $(BINDIR)/$(CONFIG)/server_context_test_spouse_test || ( echo test server_context_test_spouse_test failed ; exit 1 )
 	$(E) "[RUN]     Testing server_crash_test"
 	$(Q) $(BINDIR)/$(CONFIG)/server_crash_test || ( echo test server_crash_test failed ; exit 1 )
 	$(E) "[RUN]     Testing shutdown_test"
@@ -1886,6 +1903,8 @@
 ifeq ($(CONFIG),opt)
 	$(E) "[STRIP]   Stripping libgrpc++.a"
 	$(Q) $(STRIP) $(LIBDIR)/$(CONFIG)/libgrpc++.a
+	$(E) "[STRIP]   Stripping libgrpc++_cronet.a"
+	$(Q) $(STRIP) $(LIBDIR)/$(CONFIG)/libgrpc++_cronet.a
 	$(E) "[STRIP]   Stripping libgrpc++_reflection.a"
 	$(Q) $(STRIP) $(LIBDIR)/$(CONFIG)/libgrpc++_reflection.a
 	$(E) "[STRIP]   Stripping libgrpc++_unsecure.a"
@@ -1908,6 +1927,8 @@
 ifeq ($(CONFIG),opt)
 	$(E) "[STRIP]   Stripping $(SHARED_PREFIX)grpc++$(SHARED_VERSION).$(SHARED_EXT)"
 	$(Q) $(STRIP) $(LIBDIR)/$(CONFIG)/$(SHARED_PREFIX)grpc++$(SHARED_VERSION).$(SHARED_EXT)
+	$(E) "[STRIP]   Stripping $(SHARED_PREFIX)grpc++_cronet$(SHARED_VERSION).$(SHARED_EXT)"
+	$(Q) $(STRIP) $(LIBDIR)/$(CONFIG)/$(SHARED_PREFIX)grpc++_cronet$(SHARED_VERSION).$(SHARED_EXT)
 	$(E) "[STRIP]   Stripping $(SHARED_PREFIX)grpc++_reflection$(SHARED_VERSION).$(SHARED_EXT)"
 	$(Q) $(STRIP) $(LIBDIR)/$(CONFIG)/$(SHARED_PREFIX)grpc++_reflection$(SHARED_VERSION).$(SHARED_EXT)
 	$(E) "[STRIP]   Stripping $(SHARED_PREFIX)grpc++_unsecure$(SHARED_VERSION).$(SHARED_EXT)"
@@ -2229,6 +2250,9 @@
 	$(E) "[INSTALL] Installing libgrpc++.a"
 	$(Q) $(INSTALL) -d $(prefix)/lib
 	$(Q) $(INSTALL) $(LIBDIR)/$(CONFIG)/libgrpc++.a $(prefix)/lib/libgrpc++.a
+	$(E) "[INSTALL] Installing libgrpc++_cronet.a"
+	$(Q) $(INSTALL) -d $(prefix)/lib
+	$(Q) $(INSTALL) $(LIBDIR)/$(CONFIG)/libgrpc++_cronet.a $(prefix)/lib/libgrpc++_cronet.a
 	$(E) "[INSTALL] Installing libgrpc++_reflection.a"
 	$(Q) $(INSTALL) -d $(prefix)/lib
 	$(Q) $(INSTALL) $(LIBDIR)/$(CONFIG)/libgrpc++_reflection.a $(prefix)/lib/libgrpc++_reflection.a
@@ -2292,6 +2316,15 @@
 	$(Q) ln -sf $(SHARED_PREFIX)grpc++$(SHARED_VERSION).$(SHARED_EXT) $(prefix)/lib/libgrpc++.so.1
 	$(Q) ln -sf $(SHARED_PREFIX)grpc++$(SHARED_VERSION).$(SHARED_EXT) $(prefix)/lib/libgrpc++.so
 endif
+	$(E) "[INSTALL] Installing $(SHARED_PREFIX)grpc++_cronet$(SHARED_VERSION).$(SHARED_EXT)"
+	$(Q) $(INSTALL) -d $(prefix)/lib
+	$(Q) $(INSTALL) $(LIBDIR)/$(CONFIG)/$(SHARED_PREFIX)grpc++_cronet$(SHARED_VERSION).$(SHARED_EXT) $(prefix)/lib/$(SHARED_PREFIX)grpc++_cronet$(SHARED_VERSION).$(SHARED_EXT)
+ifeq ($(SYSTEM),MINGW32)
+	$(Q) $(INSTALL) $(LIBDIR)/$(CONFIG)/libgrpc++_cronet-imp.a $(prefix)/lib/libgrpc++_cronet-imp.a
+else ifneq ($(SYSTEM),Darwin)
+	$(Q) ln -sf $(SHARED_PREFIX)grpc++_cronet$(SHARED_VERSION).$(SHARED_EXT) $(prefix)/lib/libgrpc++_cronet.so.1
+	$(Q) ln -sf $(SHARED_PREFIX)grpc++_cronet$(SHARED_VERSION).$(SHARED_EXT) $(prefix)/lib/libgrpc++_cronet.so
+endif
 	$(E) "[INSTALL] Installing $(SHARED_PREFIX)grpc++_reflection$(SHARED_VERSION).$(SHARED_EXT)"
 	$(Q) $(INSTALL) -d $(prefix)/lib
 	$(Q) $(INSTALL) $(LIBDIR)/$(CONFIG)/$(SHARED_PREFIX)grpc++_reflection$(SHARED_VERSION).$(SHARED_EXT) $(prefix)/lib/$(SHARED_PREFIX)grpc++_reflection$(SHARED_VERSION).$(SHARED_EXT)
@@ -2554,6 +2587,7 @@
     src/core/lib/iomgr/combiner.c \
     src/core/lib/iomgr/endpoint.c \
     src/core/lib/iomgr/endpoint_pair_posix.c \
+    src/core/lib/iomgr/endpoint_pair_uv.c \
     src/core/lib/iomgr/endpoint_pair_windows.c \
     src/core/lib/iomgr/error.c \
     src/core/lib/iomgr/ev_epoll_linux.c \
@@ -2565,36 +2599,47 @@
     src/core/lib/iomgr/iocp_windows.c \
     src/core/lib/iomgr/iomgr.c \
     src/core/lib/iomgr/iomgr_posix.c \
+    src/core/lib/iomgr/iomgr_uv.c \
     src/core/lib/iomgr/iomgr_windows.c \
     src/core/lib/iomgr/load_file.c \
     src/core/lib/iomgr/network_status_tracker.c \
     src/core/lib/iomgr/polling_entity.c \
+    src/core/lib/iomgr/pollset_set_uv.c \
     src/core/lib/iomgr/pollset_set_windows.c \
+    src/core/lib/iomgr/pollset_uv.c \
     src/core/lib/iomgr/pollset_windows.c \
     src/core/lib/iomgr/resolve_address_posix.c \
+    src/core/lib/iomgr/resolve_address_uv.c \
     src/core/lib/iomgr/resolve_address_windows.c \
     src/core/lib/iomgr/sockaddr_utils.c \
     src/core/lib/iomgr/socket_utils_common_posix.c \
     src/core/lib/iomgr/socket_utils_linux.c \
     src/core/lib/iomgr/socket_utils_posix.c \
+    src/core/lib/iomgr/socket_utils_uv.c \
+    src/core/lib/iomgr/socket_utils_windows.c \
     src/core/lib/iomgr/socket_windows.c \
     src/core/lib/iomgr/tcp_client_posix.c \
+    src/core/lib/iomgr/tcp_client_uv.c \
     src/core/lib/iomgr/tcp_client_windows.c \
     src/core/lib/iomgr/tcp_posix.c \
     src/core/lib/iomgr/tcp_server_posix.c \
+    src/core/lib/iomgr/tcp_server_uv.c \
     src/core/lib/iomgr/tcp_server_windows.c \
+    src/core/lib/iomgr/tcp_uv.c \
     src/core/lib/iomgr/tcp_windows.c \
     src/core/lib/iomgr/time_averaged_stats.c \
-    src/core/lib/iomgr/timer.c \
+    src/core/lib/iomgr/timer_generic.c \
     src/core/lib/iomgr/timer_heap.c \
+    src/core/lib/iomgr/timer_uv.c \
     src/core/lib/iomgr/udp_server.c \
     src/core/lib/iomgr/unix_sockets_posix.c \
     src/core/lib/iomgr/unix_sockets_posix_noop.c \
+    src/core/lib/iomgr/wakeup_fd_cv.c \
     src/core/lib/iomgr/wakeup_fd_eventfd.c \
     src/core/lib/iomgr/wakeup_fd_nospecial.c \
     src/core/lib/iomgr/wakeup_fd_pipe.c \
     src/core/lib/iomgr/wakeup_fd_posix.c \
-    src/core/lib/iomgr/workqueue_posix.c \
+    src/core/lib/iomgr/workqueue_uv.c \
     src/core/lib/iomgr/workqueue_windows.c \
     src/core/lib/json/json.c \
     src/core/lib/json/json_reader.c \
@@ -2620,6 +2665,7 @@
     src/core/lib/surface/version.c \
     src/core/lib/transport/byte_stream.c \
     src/core/lib/transport/connectivity_state.c \
+    src/core/lib/transport/mdstr_hash_table.c \
     src/core/lib/transport/metadata.c \
     src/core/lib/transport/metadata_batch.c \
     src/core/lib/transport/static_metadata.c \
@@ -2655,8 +2701,7 @@
     src/core/lib/security/credentials/credentials.c \
     src/core/lib/security/credentials/credentials_metadata.c \
     src/core/lib/security/credentials/fake/fake_credentials.c \
-    src/core/lib/security/credentials/google_default/credentials_posix.c \
-    src/core/lib/security/credentials/google_default/credentials_windows.c \
+    src/core/lib/security/credentials/google_default/credentials_generic.c \
     src/core/lib/security/credentials/google_default/google_default_credentials.c \
     src/core/lib/security/credentials/iam/iam_credentials.c \
     src/core/lib/security/credentials/jwt/json_token.c \
@@ -2678,25 +2723,26 @@
     src/core/lib/tsi/ssl_transport_security.c \
     src/core/lib/tsi/transport_security.c \
     src/core/ext/transport/chttp2/client/secure/secure_channel_create.c \
-    src/core/ext/client_config/channel_connectivity.c \
-    src/core/ext/client_config/client_channel.c \
-    src/core/ext/client_config/client_channel_factory.c \
-    src/core/ext/client_config/client_config_plugin.c \
-    src/core/ext/client_config/connector.c \
-    src/core/ext/client_config/default_initial_connect_string.c \
-    src/core/ext/client_config/http_connect_handshaker.c \
-    src/core/ext/client_config/initial_connect_string.c \
-    src/core/ext/client_config/lb_policy.c \
-    src/core/ext/client_config/lb_policy_factory.c \
-    src/core/ext/client_config/lb_policy_registry.c \
-    src/core/ext/client_config/parse_address.c \
-    src/core/ext/client_config/resolver.c \
-    src/core/ext/client_config/resolver_factory.c \
-    src/core/ext/client_config/resolver_registry.c \
-    src/core/ext/client_config/resolver_result.c \
-    src/core/ext/client_config/subchannel.c \
-    src/core/ext/client_config/subchannel_index.c \
-    src/core/ext/client_config/uri_parser.c \
+    src/core/ext/client_channel/channel_connectivity.c \
+    src/core/ext/client_channel/client_channel.c \
+    src/core/ext/client_channel/client_channel_factory.c \
+    src/core/ext/client_channel/client_channel_plugin.c \
+    src/core/ext/client_channel/connector.c \
+    src/core/ext/client_channel/default_initial_connect_string.c \
+    src/core/ext/client_channel/http_connect_handshaker.c \
+    src/core/ext/client_channel/initial_connect_string.c \
+    src/core/ext/client_channel/lb_policy.c \
+    src/core/ext/client_channel/lb_policy_factory.c \
+    src/core/ext/client_channel/lb_policy_registry.c \
+    src/core/ext/client_channel/method_config.c \
+    src/core/ext/client_channel/parse_address.c \
+    src/core/ext/client_channel/resolver.c \
+    src/core/ext/client_channel/resolver_factory.c \
+    src/core/ext/client_channel/resolver_registry.c \
+    src/core/ext/client_channel/resolver_result.c \
+    src/core/ext/client_channel/subchannel.c \
+    src/core/ext/client_channel/subchannel_index.c \
+    src/core/ext/client_channel/uri_parser.c \
     src/core/ext/transport/chttp2/server/insecure/server_chttp2.c \
     src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.c \
     src/core/ext/transport/chttp2/client/insecure/channel_create.c \
@@ -2831,6 +2877,7 @@
     src/core/lib/iomgr/combiner.c \
     src/core/lib/iomgr/endpoint.c \
     src/core/lib/iomgr/endpoint_pair_posix.c \
+    src/core/lib/iomgr/endpoint_pair_uv.c \
     src/core/lib/iomgr/endpoint_pair_windows.c \
     src/core/lib/iomgr/error.c \
     src/core/lib/iomgr/ev_epoll_linux.c \
@@ -2842,36 +2889,47 @@
     src/core/lib/iomgr/iocp_windows.c \
     src/core/lib/iomgr/iomgr.c \
     src/core/lib/iomgr/iomgr_posix.c \
+    src/core/lib/iomgr/iomgr_uv.c \
     src/core/lib/iomgr/iomgr_windows.c \
     src/core/lib/iomgr/load_file.c \
     src/core/lib/iomgr/network_status_tracker.c \
     src/core/lib/iomgr/polling_entity.c \
+    src/core/lib/iomgr/pollset_set_uv.c \
     src/core/lib/iomgr/pollset_set_windows.c \
+    src/core/lib/iomgr/pollset_uv.c \
     src/core/lib/iomgr/pollset_windows.c \
     src/core/lib/iomgr/resolve_address_posix.c \
+    src/core/lib/iomgr/resolve_address_uv.c \
     src/core/lib/iomgr/resolve_address_windows.c \
     src/core/lib/iomgr/sockaddr_utils.c \
     src/core/lib/iomgr/socket_utils_common_posix.c \
     src/core/lib/iomgr/socket_utils_linux.c \
     src/core/lib/iomgr/socket_utils_posix.c \
+    src/core/lib/iomgr/socket_utils_uv.c \
+    src/core/lib/iomgr/socket_utils_windows.c \
     src/core/lib/iomgr/socket_windows.c \
     src/core/lib/iomgr/tcp_client_posix.c \
+    src/core/lib/iomgr/tcp_client_uv.c \
     src/core/lib/iomgr/tcp_client_windows.c \
     src/core/lib/iomgr/tcp_posix.c \
     src/core/lib/iomgr/tcp_server_posix.c \
+    src/core/lib/iomgr/tcp_server_uv.c \
     src/core/lib/iomgr/tcp_server_windows.c \
+    src/core/lib/iomgr/tcp_uv.c \
     src/core/lib/iomgr/tcp_windows.c \
     src/core/lib/iomgr/time_averaged_stats.c \
-    src/core/lib/iomgr/timer.c \
+    src/core/lib/iomgr/timer_generic.c \
     src/core/lib/iomgr/timer_heap.c \
+    src/core/lib/iomgr/timer_uv.c \
     src/core/lib/iomgr/udp_server.c \
     src/core/lib/iomgr/unix_sockets_posix.c \
     src/core/lib/iomgr/unix_sockets_posix_noop.c \
+    src/core/lib/iomgr/wakeup_fd_cv.c \
     src/core/lib/iomgr/wakeup_fd_eventfd.c \
     src/core/lib/iomgr/wakeup_fd_nospecial.c \
     src/core/lib/iomgr/wakeup_fd_pipe.c \
     src/core/lib/iomgr/wakeup_fd_posix.c \
-    src/core/lib/iomgr/workqueue_posix.c \
+    src/core/lib/iomgr/workqueue_uv.c \
     src/core/lib/iomgr/workqueue_windows.c \
     src/core/lib/json/json.c \
     src/core/lib/json/json_reader.c \
@@ -2897,6 +2955,7 @@
     src/core/lib/surface/version.c \
     src/core/lib/transport/byte_stream.c \
     src/core/lib/transport/connectivity_state.c \
+    src/core/lib/transport/mdstr_hash_table.c \
     src/core/lib/transport/metadata.c \
     src/core/lib/transport/metadata_batch.c \
     src/core/lib/transport/static_metadata.c \
@@ -2929,33 +2988,33 @@
     src/core/ext/transport/chttp2/transport/varint.c \
     src/core/ext/transport/chttp2/transport/writing.c \
     src/core/ext/transport/chttp2/alpn/alpn.c \
-    src/core/ext/client_config/channel_connectivity.c \
-    src/core/ext/client_config/client_channel.c \
-    src/core/ext/client_config/client_channel_factory.c \
-    src/core/ext/client_config/client_config_plugin.c \
-    src/core/ext/client_config/connector.c \
-    src/core/ext/client_config/default_initial_connect_string.c \
-    src/core/ext/client_config/http_connect_handshaker.c \
-    src/core/ext/client_config/initial_connect_string.c \
-    src/core/ext/client_config/lb_policy.c \
-    src/core/ext/client_config/lb_policy_factory.c \
-    src/core/ext/client_config/lb_policy_registry.c \
-    src/core/ext/client_config/parse_address.c \
-    src/core/ext/client_config/resolver.c \
-    src/core/ext/client_config/resolver_factory.c \
-    src/core/ext/client_config/resolver_registry.c \
-    src/core/ext/client_config/resolver_result.c \
-    src/core/ext/client_config/subchannel.c \
-    src/core/ext/client_config/subchannel_index.c \
-    src/core/ext/client_config/uri_parser.c \
+    src/core/ext/client_channel/channel_connectivity.c \
+    src/core/ext/client_channel/client_channel.c \
+    src/core/ext/client_channel/client_channel_factory.c \
+    src/core/ext/client_channel/client_channel_plugin.c \
+    src/core/ext/client_channel/connector.c \
+    src/core/ext/client_channel/default_initial_connect_string.c \
+    src/core/ext/client_channel/http_connect_handshaker.c \
+    src/core/ext/client_channel/initial_connect_string.c \
+    src/core/ext/client_channel/lb_policy.c \
+    src/core/ext/client_channel/lb_policy_factory.c \
+    src/core/ext/client_channel/lb_policy_registry.c \
+    src/core/ext/client_channel/method_config.c \
+    src/core/ext/client_channel/parse_address.c \
+    src/core/ext/client_channel/resolver.c \
+    src/core/ext/client_channel/resolver_factory.c \
+    src/core/ext/client_channel/resolver_registry.c \
+    src/core/ext/client_channel/resolver_result.c \
+    src/core/ext/client_channel/subchannel.c \
+    src/core/ext/client_channel/subchannel_index.c \
+    src/core/ext/client_channel/uri_parser.c \
     src/core/lib/http/httpcli_security_connector.c \
     src/core/lib/security/context/security_context.c \
     src/core/lib/security/credentials/composite/composite_credentials.c \
     src/core/lib/security/credentials/credentials.c \
     src/core/lib/security/credentials/credentials_metadata.c \
     src/core/lib/security/credentials/fake/fake_credentials.c \
-    src/core/lib/security/credentials/google_default/credentials_posix.c \
-    src/core/lib/security/credentials/google_default/credentials_windows.c \
+    src/core/lib/security/credentials/google_default/credentials_generic.c \
     src/core/lib/security/credentials/google_default/google_default_credentials.c \
     src/core/lib/security/credentials/iam/iam_credentials.c \
     src/core/lib/security/credentials/jwt/json_token.c \
@@ -3076,6 +3135,7 @@
     test/core/util/passthru_endpoint.c \
     test/core/util/port_posix.c \
     test/core/util/port_server_client.c \
+    test/core/util/port_uv.c \
     test/core/util/port_windows.c \
     test/core/util/slice_splitter.c \
     src/core/lib/channel/channel_args.c \
@@ -3098,6 +3158,7 @@
     src/core/lib/iomgr/combiner.c \
     src/core/lib/iomgr/endpoint.c \
     src/core/lib/iomgr/endpoint_pair_posix.c \
+    src/core/lib/iomgr/endpoint_pair_uv.c \
     src/core/lib/iomgr/endpoint_pair_windows.c \
     src/core/lib/iomgr/error.c \
     src/core/lib/iomgr/ev_epoll_linux.c \
@@ -3109,36 +3170,47 @@
     src/core/lib/iomgr/iocp_windows.c \
     src/core/lib/iomgr/iomgr.c \
     src/core/lib/iomgr/iomgr_posix.c \
+    src/core/lib/iomgr/iomgr_uv.c \
     src/core/lib/iomgr/iomgr_windows.c \
     src/core/lib/iomgr/load_file.c \
     src/core/lib/iomgr/network_status_tracker.c \
     src/core/lib/iomgr/polling_entity.c \
+    src/core/lib/iomgr/pollset_set_uv.c \
     src/core/lib/iomgr/pollset_set_windows.c \
+    src/core/lib/iomgr/pollset_uv.c \
     src/core/lib/iomgr/pollset_windows.c \
     src/core/lib/iomgr/resolve_address_posix.c \
+    src/core/lib/iomgr/resolve_address_uv.c \
     src/core/lib/iomgr/resolve_address_windows.c \
     src/core/lib/iomgr/sockaddr_utils.c \
     src/core/lib/iomgr/socket_utils_common_posix.c \
     src/core/lib/iomgr/socket_utils_linux.c \
     src/core/lib/iomgr/socket_utils_posix.c \
+    src/core/lib/iomgr/socket_utils_uv.c \
+    src/core/lib/iomgr/socket_utils_windows.c \
     src/core/lib/iomgr/socket_windows.c \
     src/core/lib/iomgr/tcp_client_posix.c \
+    src/core/lib/iomgr/tcp_client_uv.c \
     src/core/lib/iomgr/tcp_client_windows.c \
     src/core/lib/iomgr/tcp_posix.c \
     src/core/lib/iomgr/tcp_server_posix.c \
+    src/core/lib/iomgr/tcp_server_uv.c \
     src/core/lib/iomgr/tcp_server_windows.c \
+    src/core/lib/iomgr/tcp_uv.c \
     src/core/lib/iomgr/tcp_windows.c \
     src/core/lib/iomgr/time_averaged_stats.c \
-    src/core/lib/iomgr/timer.c \
+    src/core/lib/iomgr/timer_generic.c \
     src/core/lib/iomgr/timer_heap.c \
+    src/core/lib/iomgr/timer_uv.c \
     src/core/lib/iomgr/udp_server.c \
     src/core/lib/iomgr/unix_sockets_posix.c \
     src/core/lib/iomgr/unix_sockets_posix_noop.c \
+    src/core/lib/iomgr/wakeup_fd_cv.c \
     src/core/lib/iomgr/wakeup_fd_eventfd.c \
     src/core/lib/iomgr/wakeup_fd_nospecial.c \
     src/core/lib/iomgr/wakeup_fd_pipe.c \
     src/core/lib/iomgr/wakeup_fd_posix.c \
-    src/core/lib/iomgr/workqueue_posix.c \
+    src/core/lib/iomgr/workqueue_uv.c \
     src/core/lib/iomgr/workqueue_windows.c \
     src/core/lib/json/json.c \
     src/core/lib/json/json_reader.c \
@@ -3164,6 +3236,7 @@
     src/core/lib/surface/version.c \
     src/core/lib/transport/byte_stream.c \
     src/core/lib/transport/connectivity_state.c \
+    src/core/lib/transport/mdstr_hash_table.c \
     src/core/lib/transport/metadata.c \
     src/core/lib/transport/metadata_batch.c \
     src/core/lib/transport/static_metadata.c \
@@ -3244,6 +3317,7 @@
     test/core/util/passthru_endpoint.c \
     test/core/util/port_posix.c \
     test/core/util/port_server_client.c \
+    test/core/util/port_uv.c \
     test/core/util/port_windows.c \
     test/core/util/slice_splitter.c \
 
@@ -3292,6 +3366,7 @@
     src/core/lib/iomgr/combiner.c \
     src/core/lib/iomgr/endpoint.c \
     src/core/lib/iomgr/endpoint_pair_posix.c \
+    src/core/lib/iomgr/endpoint_pair_uv.c \
     src/core/lib/iomgr/endpoint_pair_windows.c \
     src/core/lib/iomgr/error.c \
     src/core/lib/iomgr/ev_epoll_linux.c \
@@ -3303,36 +3378,47 @@
     src/core/lib/iomgr/iocp_windows.c \
     src/core/lib/iomgr/iomgr.c \
     src/core/lib/iomgr/iomgr_posix.c \
+    src/core/lib/iomgr/iomgr_uv.c \
     src/core/lib/iomgr/iomgr_windows.c \
     src/core/lib/iomgr/load_file.c \
     src/core/lib/iomgr/network_status_tracker.c \
     src/core/lib/iomgr/polling_entity.c \
+    src/core/lib/iomgr/pollset_set_uv.c \
     src/core/lib/iomgr/pollset_set_windows.c \
+    src/core/lib/iomgr/pollset_uv.c \
     src/core/lib/iomgr/pollset_windows.c \
     src/core/lib/iomgr/resolve_address_posix.c \
+    src/core/lib/iomgr/resolve_address_uv.c \
     src/core/lib/iomgr/resolve_address_windows.c \
     src/core/lib/iomgr/sockaddr_utils.c \
     src/core/lib/iomgr/socket_utils_common_posix.c \
     src/core/lib/iomgr/socket_utils_linux.c \
     src/core/lib/iomgr/socket_utils_posix.c \
+    src/core/lib/iomgr/socket_utils_uv.c \
+    src/core/lib/iomgr/socket_utils_windows.c \
     src/core/lib/iomgr/socket_windows.c \
     src/core/lib/iomgr/tcp_client_posix.c \
+    src/core/lib/iomgr/tcp_client_uv.c \
     src/core/lib/iomgr/tcp_client_windows.c \
     src/core/lib/iomgr/tcp_posix.c \
     src/core/lib/iomgr/tcp_server_posix.c \
+    src/core/lib/iomgr/tcp_server_uv.c \
     src/core/lib/iomgr/tcp_server_windows.c \
+    src/core/lib/iomgr/tcp_uv.c \
     src/core/lib/iomgr/tcp_windows.c \
     src/core/lib/iomgr/time_averaged_stats.c \
-    src/core/lib/iomgr/timer.c \
+    src/core/lib/iomgr/timer_generic.c \
     src/core/lib/iomgr/timer_heap.c \
+    src/core/lib/iomgr/timer_uv.c \
     src/core/lib/iomgr/udp_server.c \
     src/core/lib/iomgr/unix_sockets_posix.c \
     src/core/lib/iomgr/unix_sockets_posix_noop.c \
+    src/core/lib/iomgr/wakeup_fd_cv.c \
     src/core/lib/iomgr/wakeup_fd_eventfd.c \
     src/core/lib/iomgr/wakeup_fd_nospecial.c \
     src/core/lib/iomgr/wakeup_fd_pipe.c \
     src/core/lib/iomgr/wakeup_fd_posix.c \
-    src/core/lib/iomgr/workqueue_posix.c \
+    src/core/lib/iomgr/workqueue_uv.c \
     src/core/lib/iomgr/workqueue_windows.c \
     src/core/lib/json/json.c \
     src/core/lib/json/json_reader.c \
@@ -3358,6 +3444,7 @@
     src/core/lib/surface/version.c \
     src/core/lib/transport/byte_stream.c \
     src/core/lib/transport/connectivity_state.c \
+    src/core/lib/transport/mdstr_hash_table.c \
     src/core/lib/transport/metadata.c \
     src/core/lib/transport/metadata_batch.c \
     src/core/lib/transport/static_metadata.c \
@@ -3390,25 +3477,26 @@
     src/core/ext/transport/chttp2/alpn/alpn.c \
     src/core/ext/transport/chttp2/client/insecure/channel_create.c \
     src/core/ext/transport/chttp2/client/insecure/channel_create_posix.c \
-    src/core/ext/client_config/channel_connectivity.c \
-    src/core/ext/client_config/client_channel.c \
-    src/core/ext/client_config/client_channel_factory.c \
-    src/core/ext/client_config/client_config_plugin.c \
-    src/core/ext/client_config/connector.c \
-    src/core/ext/client_config/default_initial_connect_string.c \
-    src/core/ext/client_config/http_connect_handshaker.c \
-    src/core/ext/client_config/initial_connect_string.c \
-    src/core/ext/client_config/lb_policy.c \
-    src/core/ext/client_config/lb_policy_factory.c \
-    src/core/ext/client_config/lb_policy_registry.c \
-    src/core/ext/client_config/parse_address.c \
-    src/core/ext/client_config/resolver.c \
-    src/core/ext/client_config/resolver_factory.c \
-    src/core/ext/client_config/resolver_registry.c \
-    src/core/ext/client_config/resolver_result.c \
-    src/core/ext/client_config/subchannel.c \
-    src/core/ext/client_config/subchannel_index.c \
-    src/core/ext/client_config/uri_parser.c \
+    src/core/ext/client_channel/channel_connectivity.c \
+    src/core/ext/client_channel/client_channel.c \
+    src/core/ext/client_channel/client_channel_factory.c \
+    src/core/ext/client_channel/client_channel_plugin.c \
+    src/core/ext/client_channel/connector.c \
+    src/core/ext/client_channel/default_initial_connect_string.c \
+    src/core/ext/client_channel/http_connect_handshaker.c \
+    src/core/ext/client_channel/initial_connect_string.c \
+    src/core/ext/client_channel/lb_policy.c \
+    src/core/ext/client_channel/lb_policy_factory.c \
+    src/core/ext/client_channel/lb_policy_registry.c \
+    src/core/ext/client_channel/method_config.c \
+    src/core/ext/client_channel/parse_address.c \
+    src/core/ext/client_channel/resolver.c \
+    src/core/ext/client_channel/resolver_factory.c \
+    src/core/ext/client_channel/resolver_registry.c \
+    src/core/ext/client_channel/resolver_result.c \
+    src/core/ext/client_channel/subchannel.c \
+    src/core/ext/client_channel/subchannel_index.c \
+    src/core/ext/client_channel/uri_parser.c \
     src/core/ext/resolver/dns/native/dns_resolver.c \
     src/core/ext/resolver/sockaddr/sockaddr_resolver.c \
     src/core/ext/load_reporting/load_reporting.c \
@@ -3775,6 +3863,198 @@
 endif
 
 
+LIBGRPC++_CRONET_SRC = \
+    src/cpp/client/cronet_credentials.cc \
+    src/cpp/client/insecure_credentials.cc \
+    src/cpp/common/insecure_create_auth_context.cc \
+    src/cpp/server/insecure_server_credentials.cc \
+    src/cpp/client/channel_cc.cc \
+    src/cpp/client/client_context.cc \
+    src/cpp/client/create_channel.cc \
+    src/cpp/client/create_channel_internal.cc \
+    src/cpp/client/create_channel_posix.cc \
+    src/cpp/client/credentials_cc.cc \
+    src/cpp/client/generic_stub.cc \
+    src/cpp/common/channel_arguments.cc \
+    src/cpp/common/channel_filter.cc \
+    src/cpp/common/completion_queue_cc.cc \
+    src/cpp/common/core_codegen.cc \
+    src/cpp/common/rpc_method.cc \
+    src/cpp/server/async_generic_service.cc \
+    src/cpp/server/create_default_thread_pool.cc \
+    src/cpp/server/dynamic_thread_pool.cc \
+    src/cpp/server/server_builder.cc \
+    src/cpp/server/server_cc.cc \
+    src/cpp/server/server_context.cc \
+    src/cpp/server/server_credentials.cc \
+    src/cpp/server/server_posix.cc \
+    src/cpp/util/byte_buffer_cc.cc \
+    src/cpp/util/slice_cc.cc \
+    src/cpp/util/status.cc \
+    src/cpp/util/string_ref.cc \
+    src/cpp/util/time_cc.cc \
+    src/cpp/codegen/codegen_init.cc \
+
+PUBLIC_HEADERS_CXX += \
+    include/grpc++/alarm.h \
+    include/grpc++/channel.h \
+    include/grpc++/client_context.h \
+    include/grpc++/completion_queue.h \
+    include/grpc++/create_channel.h \
+    include/grpc++/create_channel_posix.h \
+    include/grpc++/generic/async_generic_service.h \
+    include/grpc++/generic/generic_stub.h \
+    include/grpc++/grpc++.h \
+    include/grpc++/impl/call.h \
+    include/grpc++/impl/client_unary_call.h \
+    include/grpc++/impl/codegen/core_codegen.h \
+    include/grpc++/impl/grpc_library.h \
+    include/grpc++/impl/method_handler_impl.h \
+    include/grpc++/impl/rpc_method.h \
+    include/grpc++/impl/rpc_service_method.h \
+    include/grpc++/impl/serialization_traits.h \
+    include/grpc++/impl/server_builder_option.h \
+    include/grpc++/impl/server_builder_plugin.h \
+    include/grpc++/impl/server_initializer.h \
+    include/grpc++/impl/service_type.h \
+    include/grpc++/impl/sync.h \
+    include/grpc++/impl/sync_cxx11.h \
+    include/grpc++/impl/sync_no_cxx11.h \
+    include/grpc++/impl/thd.h \
+    include/grpc++/impl/thd_cxx11.h \
+    include/grpc++/impl/thd_no_cxx11.h \
+    include/grpc++/security/auth_context.h \
+    include/grpc++/security/auth_metadata_processor.h \
+    include/grpc++/security/credentials.h \
+    include/grpc++/security/server_credentials.h \
+    include/grpc++/server.h \
+    include/grpc++/server_builder.h \
+    include/grpc++/server_context.h \
+    include/grpc++/server_posix.h \
+    include/grpc++/support/async_stream.h \
+    include/grpc++/support/async_unary_call.h \
+    include/grpc++/support/byte_buffer.h \
+    include/grpc++/support/channel_arguments.h \
+    include/grpc++/support/config.h \
+    include/grpc++/support/slice.h \
+    include/grpc++/support/status.h \
+    include/grpc++/support/status_code_enum.h \
+    include/grpc++/support/string_ref.h \
+    include/grpc++/support/stub_options.h \
+    include/grpc++/support/sync_stream.h \
+    include/grpc++/support/time.h \
+    include/grpc++/impl/codegen/async_stream.h \
+    include/grpc++/impl/codegen/async_unary_call.h \
+    include/grpc++/impl/codegen/call.h \
+    include/grpc++/impl/codegen/call_hook.h \
+    include/grpc++/impl/codegen/channel_interface.h \
+    include/grpc++/impl/codegen/client_context.h \
+    include/grpc++/impl/codegen/client_unary_call.h \
+    include/grpc++/impl/codegen/completion_queue.h \
+    include/grpc++/impl/codegen/completion_queue_tag.h \
+    include/grpc++/impl/codegen/config.h \
+    include/grpc++/impl/codegen/core_codegen_interface.h \
+    include/grpc++/impl/codegen/create_auth_context.h \
+    include/grpc++/impl/codegen/grpc_library.h \
+    include/grpc++/impl/codegen/method_handler_impl.h \
+    include/grpc++/impl/codegen/rpc_method.h \
+    include/grpc++/impl/codegen/rpc_service_method.h \
+    include/grpc++/impl/codegen/security/auth_context.h \
+    include/grpc++/impl/codegen/serialization_traits.h \
+    include/grpc++/impl/codegen/server_context.h \
+    include/grpc++/impl/codegen/server_interface.h \
+    include/grpc++/impl/codegen/service_type.h \
+    include/grpc++/impl/codegen/status.h \
+    include/grpc++/impl/codegen/status_code_enum.h \
+    include/grpc++/impl/codegen/status_helper.h \
+    include/grpc++/impl/codegen/string_ref.h \
+    include/grpc++/impl/codegen/stub_options.h \
+    include/grpc++/impl/codegen/sync.h \
+    include/grpc++/impl/codegen/sync_cxx11.h \
+    include/grpc++/impl/codegen/sync_no_cxx11.h \
+    include/grpc++/impl/codegen/sync_stream.h \
+    include/grpc++/impl/codegen/time.h \
+    include/grpc/impl/codegen/byte_buffer_reader.h \
+    include/grpc/impl/codegen/compression_types.h \
+    include/grpc/impl/codegen/connectivity_state.h \
+    include/grpc/impl/codegen/grpc_types.h \
+    include/grpc/impl/codegen/propagation_bits.h \
+    include/grpc/impl/codegen/status.h \
+    include/grpc/impl/codegen/atm.h \
+    include/grpc/impl/codegen/atm_gcc_atomic.h \
+    include/grpc/impl/codegen/atm_gcc_sync.h \
+    include/grpc/impl/codegen/atm_windows.h \
+    include/grpc/impl/codegen/gpr_types.h \
+    include/grpc/impl/codegen/port_platform.h \
+    include/grpc/impl/codegen/slice.h \
+    include/grpc/impl/codegen/sync.h \
+    include/grpc/impl/codegen/sync_generic.h \
+    include/grpc/impl/codegen/sync_posix.h \
+    include/grpc/impl/codegen/sync_windows.h \
+
+LIBGRPC++_CRONET_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBGRPC++_CRONET_SRC))))
+
+
+ifeq ($(NO_SECURE),true)
+
+# You can't build secure libraries if you don't have OpenSSL.
+
+$(LIBDIR)/$(CONFIG)/libgrpc++_cronet.a: openssl_dep_error
+
+$(LIBDIR)/$(CONFIG)/$(SHARED_PREFIX)grpc++_cronet$(SHARED_VERSION).$(SHARED_EXT): openssl_dep_error
+
+else
+
+ifeq ($(NO_PROTOBUF),true)
+
+# You can't build a C++ library if you don't have protobuf - a bit overreached, but still okay.
+
+$(LIBDIR)/$(CONFIG)/libgrpc++_cronet.a: protobuf_dep_error
+
+$(LIBDIR)/$(CONFIG)/$(SHARED_PREFIX)grpc++_cronet$(SHARED_VERSION).$(SHARED_EXT): protobuf_dep_error
+
+else
+
+$(LIBDIR)/$(CONFIG)/libgrpc++_cronet.a: $(ZLIB_DEP) $(OPENSSL_DEP) $(PROTOBUF_DEP) $(LIBGRPC++_CRONET_OBJS)  $(LIBGPR_OBJS)  $(ZLIB_MERGE_OBJS)  $(OPENSSL_MERGE_OBJS) 
+	$(E) "[AR]      Creating $@"
+	$(Q) mkdir -p `dirname $@`
+	$(Q) rm -f $(LIBDIR)/$(CONFIG)/libgrpc++_cronet.a
+	$(Q) $(AR) $(AROPTS) $(LIBDIR)/$(CONFIG)/libgrpc++_cronet.a $(LIBGRPC++_CRONET_OBJS)  $(LIBGPR_OBJS)  $(ZLIB_MERGE_OBJS)  $(OPENSSL_MERGE_OBJS) 
+ifeq ($(SYSTEM),Darwin)
+	$(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libgrpc++_cronet.a
+endif
+
+
+
+ifeq ($(SYSTEM),MINGW32)
+$(LIBDIR)/$(CONFIG)/grpc++_cronet$(SHARED_VERSION).$(SHARED_EXT): $(LIBGRPC++_CRONET_OBJS)  $(ZLIB_DEP) $(PROTOBUF_DEP) $(LIBDIR)/$(CONFIG)/gpr.$(SHARED_EXT) $(LIBDIR)/$(CONFIG)/grpc_cronet.$(SHARED_EXT) $(OPENSSL_DEP)
+	$(E) "[LD]      Linking $@"
+	$(Q) mkdir -p `dirname $@`
+	$(Q) $(LDXX) $(LDFLAGS) -L$(LIBDIR)/$(CONFIG) -shared grpc++_cronet.def -Wl,--output-def=$(LIBDIR)/$(CONFIG)/grpc++_cronet$(SHARED_VERSION).def -Wl,--out-implib=$(LIBDIR)/$(CONFIG)/libgrpc++_cronet$(SHARED_VERSION)-dll.a -o $(LIBDIR)/$(CONFIG)/grpc++_cronet$(SHARED_VERSION).$(SHARED_EXT) $(LIBGRPC++_CRONET_OBJS) $(LDLIBS) $(OPENSSL_MERGE_LIBS) $(LDLIBS_SECURE) $(ZLIB_MERGE_LIBS) $(LDLIBSXX) $(LDLIBS_PROTOBUF) -lgpr-imp -lgrpc_cronet-imp
+else
+$(LIBDIR)/$(CONFIG)/libgrpc++_cronet$(SHARED_VERSION).$(SHARED_EXT): $(LIBGRPC++_CRONET_OBJS)  $(ZLIB_DEP) $(PROTOBUF_DEP) $(LIBDIR)/$(CONFIG)/libgpr.$(SHARED_EXT) $(LIBDIR)/$(CONFIG)/libgrpc_cronet.$(SHARED_EXT) $(OPENSSL_DEP)
+	$(E) "[LD]      Linking $@"
+	$(Q) mkdir -p `dirname $@`
+ifeq ($(SYSTEM),Darwin)
+	$(Q) $(LDXX) $(LDFLAGS) -L$(LIBDIR)/$(CONFIG) -install_name $(SHARED_PREFIX)grpc++_cronet$(SHARED_VERSION).$(SHARED_EXT) -dynamiclib -o $(LIBDIR)/$(CONFIG)/libgrpc++_cronet$(SHARED_VERSION).$(SHARED_EXT) $(LIBGRPC++_CRONET_OBJS) $(LDLIBS) $(OPENSSL_MERGE_LIBS) $(LDLIBS_SECURE) $(ZLIB_MERGE_LIBS) $(LDLIBSXX) $(LDLIBS_PROTOBUF) -lgpr -lgrpc_cronet
+else
+	$(Q) $(LDXX) $(LDFLAGS) -L$(LIBDIR)/$(CONFIG) -shared -Wl,-soname,libgrpc++_cronet.so.1 -o $(LIBDIR)/$(CONFIG)/libgrpc++_cronet$(SHARED_VERSION).$(SHARED_EXT) $(LIBGRPC++_CRONET_OBJS) $(LDLIBS) $(OPENSSL_MERGE_LIBS) $(LDLIBS_SECURE) $(ZLIB_MERGE_LIBS) $(LDLIBSXX) $(LDLIBS_PROTOBUF) -lgpr -lgrpc_cronet
+	$(Q) ln -sf $(SHARED_PREFIX)grpc++_cronet$(SHARED_VERSION).$(SHARED_EXT) $(LIBDIR)/$(CONFIG)/libgrpc++_cronet$(SHARED_VERSION).so.1
+	$(Q) ln -sf $(SHARED_PREFIX)grpc++_cronet$(SHARED_VERSION).$(SHARED_EXT) $(LIBDIR)/$(CONFIG)/libgrpc++_cronet$(SHARED_VERSION).so
+endif
+endif
+
+endif
+
+endif
+
+ifneq ($(NO_SECURE),true)
+ifneq ($(NO_DEPS),true)
+-include $(LIBGRPC++_CRONET_OBJS:.o=.dep)
+endif
+endif
+
+
 LIBGRPC++_REFLECTION_SRC = \
     src/cpp/ext/proto_server_reflection.cc \
     src/cpp/ext/proto_server_reflection_plugin.cc \
@@ -3948,6 +4228,55 @@
 endif
 
 
+LIBGRPC++_TEST_SRC = \
+    src/cpp/test/server_context_test_spouse.cc \
+
+PUBLIC_HEADERS_CXX += \
+
+LIBGRPC++_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBGRPC++_TEST_SRC))))
+
+
+ifeq ($(NO_SECURE),true)
+
+# You can't build secure libraries if you don't have OpenSSL.
+
+$(LIBDIR)/$(CONFIG)/libgrpc++_test.a: openssl_dep_error
+
+
+else
+
+ifeq ($(NO_PROTOBUF),true)
+
+# You can't build a C++ library if you don't have protobuf - a bit overreached, but still okay.
+
+$(LIBDIR)/$(CONFIG)/libgrpc++_test.a: protobuf_dep_error
+
+
+else
+
+$(LIBDIR)/$(CONFIG)/libgrpc++_test.a: $(ZLIB_DEP) $(OPENSSL_DEP) $(PROTOBUF_DEP) $(LIBGRPC++_TEST_OBJS) 
+	$(E) "[AR]      Creating $@"
+	$(Q) mkdir -p `dirname $@`
+	$(Q) rm -f $(LIBDIR)/$(CONFIG)/libgrpc++_test.a
+	$(Q) $(AR) $(AROPTS) $(LIBDIR)/$(CONFIG)/libgrpc++_test.a $(LIBGRPC++_TEST_OBJS) 
+ifeq ($(SYSTEM),Darwin)
+	$(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libgrpc++_test.a
+endif
+
+
+
+
+endif
+
+endif
+
+ifneq ($(NO_SECURE),true)
+ifneq ($(NO_DEPS),true)
+-include $(LIBGRPC++_TEST_OBJS:.o=.dep)
+endif
+endif
+
+
 LIBGRPC++_TEST_CONFIG_SRC = \
     test/cpp/util/test_config_cc.cc \
 
@@ -7398,7 +7727,7 @@
 
 
 DNS_RESOLVER_CONNECTIVITY_TEST_SRC = \
-    test/core/client_config/resolvers/dns_resolver_connectivity_test.c \
+    test/core/client_channel/resolvers/dns_resolver_connectivity_test.c \
 
 DNS_RESOLVER_CONNECTIVITY_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(DNS_RESOLVER_CONNECTIVITY_TEST_SRC))))
 ifeq ($(NO_SECURE),true)
@@ -7418,7 +7747,7 @@
 
 endif
 
-$(OBJDIR)/$(CONFIG)/test/core/client_config/resolvers/dns_resolver_connectivity_test.o:  $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
+$(OBJDIR)/$(CONFIG)/test/core/client_channel/resolvers/dns_resolver_connectivity_test.o:  $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
 
 deps_dns_resolver_connectivity_test: $(DNS_RESOLVER_CONNECTIVITY_TEST_OBJS:.o=.dep)
 
@@ -7430,7 +7759,7 @@
 
 
 DNS_RESOLVER_TEST_SRC = \
-    test/core/client_config/resolvers/dns_resolver_test.c \
+    test/core/client_channel/resolvers/dns_resolver_test.c \
 
 DNS_RESOLVER_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(DNS_RESOLVER_TEST_SRC))))
 ifeq ($(NO_SECURE),true)
@@ -7450,7 +7779,7 @@
 
 endif
 
-$(OBJDIR)/$(CONFIG)/test/core/client_config/resolvers/dns_resolver_test.o:  $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
+$(OBJDIR)/$(CONFIG)/test/core/client_channel/resolvers/dns_resolver_test.o:  $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
 
 deps_dns_resolver_test: $(DNS_RESOLVER_TEST_OBJS:.o=.dep)
 
@@ -9606,7 +9935,7 @@
 
 
 LB_POLICIES_TEST_SRC = \
-    test/core/client_config/lb_policies_test.c \
+    test/core/client_channel/lb_policies_test.c \
 
 LB_POLICIES_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LB_POLICIES_TEST_SRC))))
 ifeq ($(NO_SECURE),true)
@@ -9626,7 +9955,7 @@
 
 endif
 
-$(OBJDIR)/$(CONFIG)/test/core/client_config/lb_policies_test.o:  $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
+$(OBJDIR)/$(CONFIG)/test/core/client_channel/lb_policies_test.o:  $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
 
 deps_lb_policies_test: $(LB_POLICIES_TEST_OBJS:.o=.dep)
 
@@ -10214,7 +10543,7 @@
 
 
 SET_INITIAL_CONNECT_STRING_TEST_SRC = \
-    test/core/client_config/set_initial_connect_string_test.c \
+    test/core/client_channel/set_initial_connect_string_test.c \
 
 SET_INITIAL_CONNECT_STRING_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(SET_INITIAL_CONNECT_STRING_TEST_SRC))))
 ifeq ($(NO_SECURE),true)
@@ -10234,7 +10563,7 @@
 
 endif
 
-$(OBJDIR)/$(CONFIG)/test/core/client_config/set_initial_connect_string_test.o:  $(LIBDIR)/$(CONFIG)/libtest_tcp_server.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
+$(OBJDIR)/$(CONFIG)/test/core/client_channel/set_initial_connect_string_test.o:  $(LIBDIR)/$(CONFIG)/libtest_tcp_server.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
 
 deps_set_initial_connect_string_test: $(SET_INITIAL_CONNECT_STRING_TEST_OBJS:.o=.dep)
 
@@ -10246,7 +10575,7 @@
 
 
 SOCKADDR_RESOLVER_TEST_SRC = \
-    test/core/client_config/resolvers/sockaddr_resolver_test.c \
+    test/core/client_channel/resolvers/sockaddr_resolver_test.c \
 
 SOCKADDR_RESOLVER_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(SOCKADDR_RESOLVER_TEST_SRC))))
 ifeq ($(NO_SECURE),true)
@@ -10266,7 +10595,7 @@
 
 endif
 
-$(OBJDIR)/$(CONFIG)/test/core/client_config/resolvers/sockaddr_resolver_test.o:  $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
+$(OBJDIR)/$(CONFIG)/test/core/client_channel/resolvers/sockaddr_resolver_test.o:  $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
 
 deps_sockaddr_resolver_test: $(SOCKADDR_RESOLVER_TEST_OBJS:.o=.dep)
 
@@ -10694,7 +11023,7 @@
 
 
 URI_FUZZER_TEST_SRC = \
-    test/core/client_config/uri_fuzzer_test.c \
+    test/core/client_channel/uri_fuzzer_test.c \
 
 URI_FUZZER_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(URI_FUZZER_TEST_SRC))))
 ifeq ($(NO_SECURE),true)
@@ -10714,7 +11043,7 @@
 
 endif
 
-$(OBJDIR)/$(CONFIG)/test/core/client_config/uri_fuzzer_test.o:  $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
+$(OBJDIR)/$(CONFIG)/test/core/client_channel/uri_fuzzer_test.o:  $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
 
 deps_uri_fuzzer_test: $(URI_FUZZER_TEST_OBJS:.o=.dep)
 
@@ -10726,7 +11055,7 @@
 
 
 URI_PARSER_TEST_SRC = \
-    test/core/client_config/uri_parser_test.c \
+    test/core/client_channel/uri_parser_test.c \
 
 URI_PARSER_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(URI_PARSER_TEST_SRC))))
 ifeq ($(NO_SECURE),true)
@@ -10746,7 +11075,7 @@
 
 endif
 
-$(OBJDIR)/$(CONFIG)/test/core/client_config/uri_parser_test.o:  $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
+$(OBJDIR)/$(CONFIG)/test/core/client_channel/uri_parser_test.o:  $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
 
 deps_uri_parser_test: $(URI_PARSER_TEST_OBJS:.o=.dep)
 
@@ -10757,6 +11086,38 @@
 endif
 
 
+WAKEUP_FD_CV_TEST_SRC = \
+    test/core/iomgr/wakeup_fd_cv_test.c \
+
+WAKEUP_FD_CV_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(WAKEUP_FD_CV_TEST_SRC))))
+ifeq ($(NO_SECURE),true)
+
+# You can't build secure targets if you don't have OpenSSL.
+
+$(BINDIR)/$(CONFIG)/wakeup_fd_cv_test: openssl_dep_error
+
+else
+
+
+
+$(BINDIR)/$(CONFIG)/wakeup_fd_cv_test: $(WAKEUP_FD_CV_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
+	$(E) "[LD]      Linking $@"
+	$(Q) mkdir -p `dirname $@`
+	$(Q) $(LD) $(LDFLAGS) $(WAKEUP_FD_CV_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/wakeup_fd_cv_test
+
+endif
+
+$(OBJDIR)/$(CONFIG)/test/core/iomgr/wakeup_fd_cv_test.o:  $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
+
+deps_wakeup_fd_cv_test: $(WAKEUP_FD_CV_TEST_OBJS:.o=.dep)
+
+ifneq ($(NO_SECURE),true)
+ifneq ($(NO_DEPS),true)
+-include $(WAKEUP_FD_CV_TEST_OBJS:.o=.dep)
+endif
+endif
+
+
 ALARM_CPP_TEST_SRC = \
     test/cpp/common/alarm_cpp_test.cc \
 
@@ -12107,16 +12468,16 @@
 
 else
 
-$(BINDIR)/$(CONFIG)/interop_test: $(PROTOBUF_DEP) $(INTEROP_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
+$(BINDIR)/$(CONFIG)/interop_test: $(PROTOBUF_DEP) $(INTEROP_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a
 	$(E) "[LD]      Linking $@"
 	$(Q) mkdir -p `dirname $@`
-	$(Q) $(LDXX) $(LDFLAGS) $(INTEROP_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/interop_test
+	$(Q) $(LDXX) $(LDFLAGS) $(INTEROP_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/interop_test
 
 endif
 
 endif
 
-$(OBJDIR)/$(CONFIG)/test/cpp/interop/interop_test.o:  $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
+$(OBJDIR)/$(CONFIG)/test/cpp/interop/interop_test.o:  $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a
 
 deps_interop_test: $(INTEROP_TEST_OBJS:.o=.dep)
 
@@ -12713,6 +13074,49 @@
 endif
 
 
+SERVER_CONTEXT_TEST_SPOUSE_TEST_SRC = \
+    test/cpp/test/server_context_test_spouse_test.cc \
+
+SERVER_CONTEXT_TEST_SPOUSE_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(SERVER_CONTEXT_TEST_SPOUSE_TEST_SRC))))
+ifeq ($(NO_SECURE),true)
+
+# You can't build secure targets if you don't have OpenSSL.
+
+$(BINDIR)/$(CONFIG)/server_context_test_spouse_test: openssl_dep_error
+
+else
+
+
+
+
+ifeq ($(NO_PROTOBUF),true)
+
+# You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.0.0+.
+
+$(BINDIR)/$(CONFIG)/server_context_test_spouse_test: protobuf_dep_error
+
+else
+
+$(BINDIR)/$(CONFIG)/server_context_test_spouse_test: $(PROTOBUF_DEP) $(SERVER_CONTEXT_TEST_SPOUSE_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
+	$(E) "[LD]      Linking $@"
+	$(Q) mkdir -p `dirname $@`
+	$(Q) $(LDXX) $(LDFLAGS) $(SERVER_CONTEXT_TEST_SPOUSE_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/server_context_test_spouse_test
+
+endif
+
+endif
+
+$(OBJDIR)/$(CONFIG)/test/cpp/test/server_context_test_spouse_test.o:  $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++_test.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
+
+deps_server_context_test_spouse_test: $(SERVER_CONTEXT_TEST_SPOUSE_TEST_OBJS:.o=.dep)
+
+ifneq ($(NO_SECURE),true)
+ifneq ($(NO_DEPS),true)
+-include $(SERVER_CONTEXT_TEST_SPOUSE_TEST_OBJS:.o=.dep)
+endif
+endif
+
+
 SERVER_CRASH_TEST_SRC = \
     test/cpp/end2end/server_crash_test.cc \
 
@@ -12933,6 +13337,7 @@
     $(GENDIR)/src/proto/grpc/testing/messages.pb.cc $(GENDIR)/src/proto/grpc/testing/messages.grpc.pb.cc \
     $(GENDIR)/src/proto/grpc/testing/metrics.pb.cc $(GENDIR)/src/proto/grpc/testing/metrics.grpc.pb.cc \
     $(GENDIR)/src/proto/grpc/testing/test.pb.cc $(GENDIR)/src/proto/grpc/testing/test.grpc.pb.cc \
+    test/cpp/interop/client_helper.cc \
     test/cpp/interop/interop_client.cc \
     test/cpp/interop/stress_interop_client.cc \
     test/cpp/interop/stress_test.cc \
@@ -12975,6 +13380,8 @@
 
 $(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/test.o:  $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a
 
+$(OBJDIR)/$(CONFIG)/test/cpp/interop/client_helper.o:  $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a
+
 $(OBJDIR)/$(CONFIG)/test/cpp/interop/interop_client.o:  $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a
 
 $(OBJDIR)/$(CONFIG)/test/cpp/interop/stress_interop_client.o:  $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a
@@ -12990,6 +13397,7 @@
 -include $(STRESS_TEST_OBJS:.o=.dep)
 endif
 endif
+$(OBJDIR)/$(CONFIG)/test/cpp/interop/client_helper.o: $(GENDIR)/src/proto/grpc/testing/empty.pb.cc $(GENDIR)/src/proto/grpc/testing/empty.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/messages.pb.cc $(GENDIR)/src/proto/grpc/testing/messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/metrics.pb.cc $(GENDIR)/src/proto/grpc/testing/metrics.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/test.pb.cc $(GENDIR)/src/proto/grpc/testing/test.grpc.pb.cc
 $(OBJDIR)/$(CONFIG)/test/cpp/interop/interop_client.o: $(GENDIR)/src/proto/grpc/testing/empty.pb.cc $(GENDIR)/src/proto/grpc/testing/empty.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/messages.pb.cc $(GENDIR)/src/proto/grpc/testing/messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/metrics.pb.cc $(GENDIR)/src/proto/grpc/testing/metrics.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/test.pb.cc $(GENDIR)/src/proto/grpc/testing/test.grpc.pb.cc
 $(OBJDIR)/$(CONFIG)/test/cpp/interop/stress_interop_client.o: $(GENDIR)/src/proto/grpc/testing/empty.pb.cc $(GENDIR)/src/proto/grpc/testing/empty.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/messages.pb.cc $(GENDIR)/src/proto/grpc/testing/messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/metrics.pb.cc $(GENDIR)/src/proto/grpc/testing/metrics.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/test.pb.cc $(GENDIR)/src/proto/grpc/testing/test.grpc.pb.cc
 $(OBJDIR)/$(CONFIG)/test/cpp/interop/stress_test.o: $(GENDIR)/src/proto/grpc/testing/empty.pb.cc $(GENDIR)/src/proto/grpc/testing/empty.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/messages.pb.cc $(GENDIR)/src/proto/grpc/testing/messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/metrics.pb.cc $(GENDIR)/src/proto/grpc/testing/metrics.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/test.pb.cc $(GENDIR)/src/proto/grpc/testing/test.grpc.pb.cc
@@ -14429,6 +14837,38 @@
 endif
 
 
+H2_FAKE_RESOLVER_TEST_SRC = \
+    test/core/end2end/fixtures/h2_fake_resolver.c \
+
+H2_FAKE_RESOLVER_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(H2_FAKE_RESOLVER_TEST_SRC))))
+ifeq ($(NO_SECURE),true)
+
+# You can't build secure targets if you don't have OpenSSL.
+
+$(BINDIR)/$(CONFIG)/h2_fake_resolver_test: openssl_dep_error
+
+else
+
+
+
+$(BINDIR)/$(CONFIG)/h2_fake_resolver_test: $(H2_FAKE_RESOLVER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libend2end_tests.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
+	$(E) "[LD]      Linking $@"
+	$(Q) mkdir -p `dirname $@`
+	$(Q) $(LD) $(LDFLAGS) $(H2_FAKE_RESOLVER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libend2end_tests.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/h2_fake_resolver_test
+
+endif
+
+$(OBJDIR)/$(CONFIG)/test/core/end2end/fixtures/h2_fake_resolver.o:  $(LIBDIR)/$(CONFIG)/libend2end_tests.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
+
+deps_h2_fake_resolver_test: $(H2_FAKE_RESOLVER_TEST_OBJS:.o=.dep)
+
+ifneq ($(NO_SECURE),true)
+ifneq ($(NO_DEPS),true)
+-include $(H2_FAKE_RESOLVER_TEST_OBJS:.o=.dep)
+endif
+endif
+
+
 H2_FAKESEC_TEST_SRC = \
     test/core/end2end/fixtures/h2_fakesec.c \
 
@@ -14981,6 +15421,26 @@
 endif
 
 
+H2_FAKE_RESOLVER_NOSEC_TEST_SRC = \
+    test/core/end2end/fixtures/h2_fake_resolver.c \
+
+H2_FAKE_RESOLVER_NOSEC_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(H2_FAKE_RESOLVER_NOSEC_TEST_SRC))))
+
+
+$(BINDIR)/$(CONFIG)/h2_fake_resolver_nosec_test: $(H2_FAKE_RESOLVER_NOSEC_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libend2end_nosec_tests.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
+	$(E) "[LD]      Linking $@"
+	$(Q) mkdir -p `dirname $@`
+	$(Q) $(LD) $(LDFLAGS) $(H2_FAKE_RESOLVER_NOSEC_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libend2end_nosec_tests.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LDLIBS) -o $(BINDIR)/$(CONFIG)/h2_fake_resolver_nosec_test
+
+$(OBJDIR)/$(CONFIG)/test/core/end2end/fixtures/h2_fake_resolver.o:  $(LIBDIR)/$(CONFIG)/libend2end_nosec_tests.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
+
+deps_h2_fake_resolver_nosec_test: $(H2_FAKE_RESOLVER_NOSEC_TEST_OBJS:.o=.dep)
+
+ifneq ($(NO_DEPS),true)
+-include $(H2_FAKE_RESOLVER_NOSEC_TEST_OBJS:.o=.dep)
+endif
+
+
 H2_FD_NOSEC_TEST_SRC = \
     test/core/end2end/fixtures/h2_fd.c \
 
@@ -15587,7 +16047,7 @@
 
 
 URI_FUZZER_TEST_ONE_ENTRY_SRC = \
-    test/core/client_config/uri_fuzzer_test.c \
+    test/core/client_channel/uri_fuzzer_test.c \
     test/core/util/one_corpus_entry_fuzzer.c \
 
 URI_FUZZER_TEST_ONE_ENTRY_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(URI_FUZZER_TEST_ONE_ENTRY_SRC))))
@@ -15608,7 +16068,7 @@
 
 endif
 
-$(OBJDIR)/$(CONFIG)/test/core/client_config/uri_fuzzer_test.o:  $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
+$(OBJDIR)/$(CONFIG)/test/core/client_channel/uri_fuzzer_test.o:  $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
 
 $(OBJDIR)/$(CONFIG)/test/core/util/one_corpus_entry_fuzzer.o:  $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
 
@@ -15640,8 +16100,7 @@
 src/core/lib/security/credentials/credentials.c: $(OPENSSL_DEP)
 src/core/lib/security/credentials/credentials_metadata.c: $(OPENSSL_DEP)
 src/core/lib/security/credentials/fake/fake_credentials.c: $(OPENSSL_DEP)
-src/core/lib/security/credentials/google_default/credentials_posix.c: $(OPENSSL_DEP)
-src/core/lib/security/credentials/google_default/credentials_windows.c: $(OPENSSL_DEP)
+src/core/lib/security/credentials/google_default/credentials_generic.c: $(OPENSSL_DEP)
 src/core/lib/security/credentials/google_default/google_default_credentials.c: $(OPENSSL_DEP)
 src/core/lib/security/credentials/iam/iam_credentials.c: $(OPENSSL_DEP)
 src/core/lib/security/credentials/jwt/json_token.c: $(OPENSSL_DEP)
@@ -15664,6 +16123,7 @@
 src/core/lib/tsi/transport_security.c: $(OPENSSL_DEP)
 src/core/plugin_registry/grpc_cronet_plugin_registry.c: $(OPENSSL_DEP)
 src/core/plugin_registry/grpc_plugin_registry.c: $(OPENSSL_DEP)
+src/cpp/client/cronet_credentials.cc: $(OPENSSL_DEP)
 src/cpp/client/secure_credentials.cc: $(OPENSSL_DEP)
 src/cpp/common/auth_property_iterator.cc: $(OPENSSL_DEP)
 src/cpp/common/secure_auth_context.cc: $(OPENSSL_DEP)
@@ -15674,6 +16134,7 @@
 src/cpp/ext/reflection.grpc.pb.cc: $(OPENSSL_DEP)
 src/cpp/ext/reflection.pb.cc: $(OPENSSL_DEP)
 src/cpp/server/secure_server_credentials.cc: $(OPENSSL_DEP)
+src/cpp/test/server_context_test_spouse.cc: $(OPENSSL_DEP)
 src/csharp/ext/grpc_csharp_ext.c: $(OPENSSL_DEP)
 test/core/bad_client/bad_client.c: $(OPENSSL_DEP)
 test/core/bad_ssl/server_common.c: $(OPENSSL_DEP)
diff --git a/binding.gyp b/binding.gyp
index 58edda2..390cc52 100644
--- a/binding.gyp
+++ b/binding.gyp
@@ -42,6 +42,9 @@
       '.',
       'include'
     ],
+    'defines': [
+      'GRPC_UV'
+    ],
     'conditions': [
       ['OS == "win"', {
         "include_dirs": [
@@ -585,6 +588,7 @@
         'src/core/lib/iomgr/combiner.c',
         'src/core/lib/iomgr/endpoint.c',
         'src/core/lib/iomgr/endpoint_pair_posix.c',
+        'src/core/lib/iomgr/endpoint_pair_uv.c',
         'src/core/lib/iomgr/endpoint_pair_windows.c',
         'src/core/lib/iomgr/error.c',
         'src/core/lib/iomgr/ev_epoll_linux.c',
@@ -596,36 +600,47 @@
         'src/core/lib/iomgr/iocp_windows.c',
         'src/core/lib/iomgr/iomgr.c',
         'src/core/lib/iomgr/iomgr_posix.c',
+        'src/core/lib/iomgr/iomgr_uv.c',
         'src/core/lib/iomgr/iomgr_windows.c',
         'src/core/lib/iomgr/load_file.c',
         'src/core/lib/iomgr/network_status_tracker.c',
         'src/core/lib/iomgr/polling_entity.c',
+        'src/core/lib/iomgr/pollset_set_uv.c',
         'src/core/lib/iomgr/pollset_set_windows.c',
+        'src/core/lib/iomgr/pollset_uv.c',
         'src/core/lib/iomgr/pollset_windows.c',
         'src/core/lib/iomgr/resolve_address_posix.c',
+        'src/core/lib/iomgr/resolve_address_uv.c',
         'src/core/lib/iomgr/resolve_address_windows.c',
         'src/core/lib/iomgr/sockaddr_utils.c',
         'src/core/lib/iomgr/socket_utils_common_posix.c',
         'src/core/lib/iomgr/socket_utils_linux.c',
         'src/core/lib/iomgr/socket_utils_posix.c',
+        'src/core/lib/iomgr/socket_utils_uv.c',
+        'src/core/lib/iomgr/socket_utils_windows.c',
         'src/core/lib/iomgr/socket_windows.c',
         'src/core/lib/iomgr/tcp_client_posix.c',
+        'src/core/lib/iomgr/tcp_client_uv.c',
         'src/core/lib/iomgr/tcp_client_windows.c',
         'src/core/lib/iomgr/tcp_posix.c',
         'src/core/lib/iomgr/tcp_server_posix.c',
+        'src/core/lib/iomgr/tcp_server_uv.c',
         'src/core/lib/iomgr/tcp_server_windows.c',
+        'src/core/lib/iomgr/tcp_uv.c',
         'src/core/lib/iomgr/tcp_windows.c',
         'src/core/lib/iomgr/time_averaged_stats.c',
-        'src/core/lib/iomgr/timer.c',
+        'src/core/lib/iomgr/timer_generic.c',
         'src/core/lib/iomgr/timer_heap.c',
+        'src/core/lib/iomgr/timer_uv.c',
         'src/core/lib/iomgr/udp_server.c',
         'src/core/lib/iomgr/unix_sockets_posix.c',
         'src/core/lib/iomgr/unix_sockets_posix_noop.c',
+        'src/core/lib/iomgr/wakeup_fd_cv.c',
         'src/core/lib/iomgr/wakeup_fd_eventfd.c',
         'src/core/lib/iomgr/wakeup_fd_nospecial.c',
         'src/core/lib/iomgr/wakeup_fd_pipe.c',
         'src/core/lib/iomgr/wakeup_fd_posix.c',
-        'src/core/lib/iomgr/workqueue_posix.c',
+        'src/core/lib/iomgr/workqueue_uv.c',
         'src/core/lib/iomgr/workqueue_windows.c',
         'src/core/lib/json/json.c',
         'src/core/lib/json/json_reader.c',
@@ -651,6 +666,7 @@
         'src/core/lib/surface/version.c',
         'src/core/lib/transport/byte_stream.c',
         'src/core/lib/transport/connectivity_state.c',
+        'src/core/lib/transport/mdstr_hash_table.c',
         'src/core/lib/transport/metadata.c',
         'src/core/lib/transport/metadata_batch.c',
         'src/core/lib/transport/static_metadata.c',
@@ -686,8 +702,7 @@
         'src/core/lib/security/credentials/credentials.c',
         'src/core/lib/security/credentials/credentials_metadata.c',
         'src/core/lib/security/credentials/fake/fake_credentials.c',
-        'src/core/lib/security/credentials/google_default/credentials_posix.c',
-        'src/core/lib/security/credentials/google_default/credentials_windows.c',
+        'src/core/lib/security/credentials/google_default/credentials_generic.c',
         'src/core/lib/security/credentials/google_default/google_default_credentials.c',
         'src/core/lib/security/credentials/iam/iam_credentials.c',
         'src/core/lib/security/credentials/jwt/json_token.c',
@@ -709,25 +724,26 @@
         'src/core/lib/tsi/ssl_transport_security.c',
         'src/core/lib/tsi/transport_security.c',
         'src/core/ext/transport/chttp2/client/secure/secure_channel_create.c',
-        'src/core/ext/client_config/channel_connectivity.c',
-        'src/core/ext/client_config/client_channel.c',
-        'src/core/ext/client_config/client_channel_factory.c',
-        'src/core/ext/client_config/client_config_plugin.c',
-        'src/core/ext/client_config/connector.c',
-        'src/core/ext/client_config/default_initial_connect_string.c',
-        'src/core/ext/client_config/http_connect_handshaker.c',
-        'src/core/ext/client_config/initial_connect_string.c',
-        'src/core/ext/client_config/lb_policy.c',
-        'src/core/ext/client_config/lb_policy_factory.c',
-        'src/core/ext/client_config/lb_policy_registry.c',
-        'src/core/ext/client_config/parse_address.c',
-        'src/core/ext/client_config/resolver.c',
-        'src/core/ext/client_config/resolver_factory.c',
-        'src/core/ext/client_config/resolver_registry.c',
-        'src/core/ext/client_config/resolver_result.c',
-        'src/core/ext/client_config/subchannel.c',
-        'src/core/ext/client_config/subchannel_index.c',
-        'src/core/ext/client_config/uri_parser.c',
+        'src/core/ext/client_channel/channel_connectivity.c',
+        'src/core/ext/client_channel/client_channel.c',
+        'src/core/ext/client_channel/client_channel_factory.c',
+        'src/core/ext/client_channel/client_channel_plugin.c',
+        'src/core/ext/client_channel/connector.c',
+        'src/core/ext/client_channel/default_initial_connect_string.c',
+        'src/core/ext/client_channel/http_connect_handshaker.c',
+        'src/core/ext/client_channel/initial_connect_string.c',
+        'src/core/ext/client_channel/lb_policy.c',
+        'src/core/ext/client_channel/lb_policy_factory.c',
+        'src/core/ext/client_channel/lb_policy_registry.c',
+        'src/core/ext/client_channel/method_config.c',
+        'src/core/ext/client_channel/parse_address.c',
+        'src/core/ext/client_channel/resolver.c',
+        'src/core/ext/client_channel/resolver_factory.c',
+        'src/core/ext/client_channel/resolver_registry.c',
+        'src/core/ext/client_channel/resolver_result.c',
+        'src/core/ext/client_channel/subchannel.c',
+        'src/core/ext/client_channel/subchannel_index.c',
+        'src/core/ext/client_channel/uri_parser.c',
         'src/core/ext/transport/chttp2/server/insecure/server_chttp2.c',
         'src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.c',
         'src/core/ext/transport/chttp2/client/insecure/channel_create.c',
@@ -813,6 +829,7 @@
         "src/node/ext/call_credentials.cc",
         "src/node/ext/channel.cc",
         "src/node/ext/channel_credentials.cc",
+        "src/node/ext/completion_queue.cc",
         "src/node/ext/completion_queue_async_worker.cc",
         "src/node/ext/node_grpc.cc",
         "src/node/ext/server.cc",
diff --git a/build.yaml b/build.yaml
index 584084f..4332c43 100644
--- a/build.yaml
+++ b/build.yaml
@@ -204,27 +204,34 @@
   - src/core/lib/iomgr/pollset.h
   - src/core/lib/iomgr/pollset_set.h
   - src/core/lib/iomgr/pollset_set_windows.h
+  - src/core/lib/iomgr/pollset_uv.h
   - src/core/lib/iomgr/pollset_windows.h
+  - src/core/lib/iomgr/port.h
   - src/core/lib/iomgr/resolve_address.h
   - src/core/lib/iomgr/sockaddr.h
   - src/core/lib/iomgr/sockaddr_posix.h
   - src/core/lib/iomgr/sockaddr_utils.h
   - src/core/lib/iomgr/sockaddr_windows.h
+  - src/core/lib/iomgr/socket_utils.h
   - src/core/lib/iomgr/socket_utils_posix.h
   - src/core/lib/iomgr/socket_windows.h
   - src/core/lib/iomgr/tcp_client.h
   - src/core/lib/iomgr/tcp_posix.h
   - src/core/lib/iomgr/tcp_server.h
+  - src/core/lib/iomgr/tcp_uv.h
   - src/core/lib/iomgr/tcp_windows.h
   - src/core/lib/iomgr/time_averaged_stats.h
   - src/core/lib/iomgr/timer.h
+  - src/core/lib/iomgr/timer_generic.h
   - src/core/lib/iomgr/timer_heap.h
+  - src/core/lib/iomgr/timer_uv.h
   - src/core/lib/iomgr/udp_server.h
   - src/core/lib/iomgr/unix_sockets_posix.h
+  - src/core/lib/iomgr/wakeup_fd_cv.h
   - src/core/lib/iomgr/wakeup_fd_pipe.h
   - src/core/lib/iomgr/wakeup_fd_posix.h
   - src/core/lib/iomgr/workqueue.h
-  - src/core/lib/iomgr/workqueue_posix.h
+  - src/core/lib/iomgr/workqueue_uv.h
   - src/core/lib/iomgr/workqueue_windows.h
   - src/core/lib/json/json.h
   - src/core/lib/json/json_common.h
@@ -243,6 +250,7 @@
   - src/core/lib/surface/server.h
   - src/core/lib/transport/byte_stream.h
   - src/core/lib/transport/connectivity_state.h
+  - src/core/lib/transport/mdstr_hash_table.h
   - src/core/lib/transport/metadata.h
   - src/core/lib/transport/metadata_batch.h
   - src/core/lib/transport/static_metadata.h
@@ -270,6 +278,7 @@
   - src/core/lib/iomgr/combiner.c
   - src/core/lib/iomgr/endpoint.c
   - src/core/lib/iomgr/endpoint_pair_posix.c
+  - src/core/lib/iomgr/endpoint_pair_uv.c
   - src/core/lib/iomgr/endpoint_pair_windows.c
   - src/core/lib/iomgr/error.c
   - src/core/lib/iomgr/ev_epoll_linux.c
@@ -281,36 +290,47 @@
   - src/core/lib/iomgr/iocp_windows.c
   - src/core/lib/iomgr/iomgr.c
   - src/core/lib/iomgr/iomgr_posix.c
+  - src/core/lib/iomgr/iomgr_uv.c
   - src/core/lib/iomgr/iomgr_windows.c
   - src/core/lib/iomgr/load_file.c
   - src/core/lib/iomgr/network_status_tracker.c
   - src/core/lib/iomgr/polling_entity.c
+  - src/core/lib/iomgr/pollset_set_uv.c
   - src/core/lib/iomgr/pollset_set_windows.c
+  - src/core/lib/iomgr/pollset_uv.c
   - src/core/lib/iomgr/pollset_windows.c
   - src/core/lib/iomgr/resolve_address_posix.c
+  - src/core/lib/iomgr/resolve_address_uv.c
   - src/core/lib/iomgr/resolve_address_windows.c
   - src/core/lib/iomgr/sockaddr_utils.c
   - src/core/lib/iomgr/socket_utils_common_posix.c
   - src/core/lib/iomgr/socket_utils_linux.c
   - src/core/lib/iomgr/socket_utils_posix.c
+  - src/core/lib/iomgr/socket_utils_uv.c
+  - src/core/lib/iomgr/socket_utils_windows.c
   - src/core/lib/iomgr/socket_windows.c
   - src/core/lib/iomgr/tcp_client_posix.c
+  - src/core/lib/iomgr/tcp_client_uv.c
   - src/core/lib/iomgr/tcp_client_windows.c
   - src/core/lib/iomgr/tcp_posix.c
   - src/core/lib/iomgr/tcp_server_posix.c
+  - src/core/lib/iomgr/tcp_server_uv.c
   - src/core/lib/iomgr/tcp_server_windows.c
+  - src/core/lib/iomgr/tcp_uv.c
   - src/core/lib/iomgr/tcp_windows.c
   - src/core/lib/iomgr/time_averaged_stats.c
-  - src/core/lib/iomgr/timer.c
+  - src/core/lib/iomgr/timer_generic.c
   - src/core/lib/iomgr/timer_heap.c
+  - src/core/lib/iomgr/timer_uv.c
   - src/core/lib/iomgr/udp_server.c
   - src/core/lib/iomgr/unix_sockets_posix.c
   - src/core/lib/iomgr/unix_sockets_posix_noop.c
+  - src/core/lib/iomgr/wakeup_fd_cv.c
   - src/core/lib/iomgr/wakeup_fd_eventfd.c
   - src/core/lib/iomgr/wakeup_fd_nospecial.c
   - src/core/lib/iomgr/wakeup_fd_pipe.c
   - src/core/lib/iomgr/wakeup_fd_posix.c
-  - src/core/lib/iomgr/workqueue_posix.c
+  - src/core/lib/iomgr/workqueue_uv.c
   - src/core/lib/iomgr/workqueue_windows.c
   - src/core/lib/json/json.c
   - src/core/lib/json/json_reader.c
@@ -336,6 +356,7 @@
   - src/core/lib/surface/version.c
   - src/core/lib/transport/byte_stream.c
   - src/core/lib/transport/connectivity_state.c
+  - src/core/lib/transport/mdstr_hash_table.c
   - src/core/lib/transport/metadata.c
   - src/core/lib/transport/metadata_batch.c
   - src/core/lib/transport/static_metadata.c
@@ -346,45 +367,47 @@
   - gpr
   uses:
   - grpc_codegen
-- name: grpc_client_config
+- name: grpc_client_channel
   headers:
-  - src/core/ext/client_config/client_channel.h
-  - src/core/ext/client_config/client_channel_factory.h
-  - src/core/ext/client_config/connector.h
-  - src/core/ext/client_config/http_connect_handshaker.h
-  - src/core/ext/client_config/initial_connect_string.h
-  - src/core/ext/client_config/lb_policy.h
-  - src/core/ext/client_config/lb_policy_factory.h
-  - src/core/ext/client_config/lb_policy_registry.h
-  - src/core/ext/client_config/parse_address.h
-  - src/core/ext/client_config/resolver.h
-  - src/core/ext/client_config/resolver_factory.h
-  - src/core/ext/client_config/resolver_registry.h
-  - src/core/ext/client_config/resolver_result.h
-  - src/core/ext/client_config/subchannel.h
-  - src/core/ext/client_config/subchannel_index.h
-  - src/core/ext/client_config/uri_parser.h
+  - src/core/ext/client_channel/client_channel.h
+  - src/core/ext/client_channel/client_channel_factory.h
+  - src/core/ext/client_channel/connector.h
+  - src/core/ext/client_channel/http_connect_handshaker.h
+  - src/core/ext/client_channel/initial_connect_string.h
+  - src/core/ext/client_channel/lb_policy.h
+  - src/core/ext/client_channel/lb_policy_factory.h
+  - src/core/ext/client_channel/lb_policy_registry.h
+  - src/core/ext/client_channel/method_config.h
+  - src/core/ext/client_channel/parse_address.h
+  - src/core/ext/client_channel/resolver.h
+  - src/core/ext/client_channel/resolver_factory.h
+  - src/core/ext/client_channel/resolver_registry.h
+  - src/core/ext/client_channel/resolver_result.h
+  - src/core/ext/client_channel/subchannel.h
+  - src/core/ext/client_channel/subchannel_index.h
+  - src/core/ext/client_channel/uri_parser.h
   src:
-  - src/core/ext/client_config/channel_connectivity.c
-  - src/core/ext/client_config/client_channel.c
-  - src/core/ext/client_config/client_channel_factory.c
-  - src/core/ext/client_config/client_config_plugin.c
-  - src/core/ext/client_config/connector.c
-  - src/core/ext/client_config/default_initial_connect_string.c
-  - src/core/ext/client_config/http_connect_handshaker.c
-  - src/core/ext/client_config/initial_connect_string.c
-  - src/core/ext/client_config/lb_policy.c
-  - src/core/ext/client_config/lb_policy_factory.c
-  - src/core/ext/client_config/lb_policy_registry.c
-  - src/core/ext/client_config/parse_address.c
-  - src/core/ext/client_config/resolver.c
-  - src/core/ext/client_config/resolver_factory.c
-  - src/core/ext/client_config/resolver_registry.c
-  - src/core/ext/client_config/resolver_result.c
-  - src/core/ext/client_config/subchannel.c
-  - src/core/ext/client_config/subchannel_index.c
-  - src/core/ext/client_config/uri_parser.c
-  plugin: grpc_client_config
+  - src/core/ext/client_channel/channel_connectivity.c
+  - src/core/ext/client_channel/client_channel.c
+  - src/core/ext/client_channel/client_channel_factory.c
+  - src/core/ext/client_channel/client_channel_plugin.c
+  - src/core/ext/client_channel/connector.c
+  - src/core/ext/client_channel/default_initial_connect_string.c
+  - src/core/ext/client_channel/http_connect_handshaker.c
+  - src/core/ext/client_channel/initial_connect_string.c
+  - src/core/ext/client_channel/lb_policy.c
+  - src/core/ext/client_channel/lb_policy_factory.c
+  - src/core/ext/client_channel/lb_policy_registry.c
+  - src/core/ext/client_channel/method_config.c
+  - src/core/ext/client_channel/parse_address.c
+  - src/core/ext/client_channel/resolver.c
+  - src/core/ext/client_channel/resolver_factory.c
+  - src/core/ext/client_channel/resolver_registry.c
+  - src/core/ext/client_channel/resolver_result.c
+  - src/core/ext/client_channel/subchannel.c
+  - src/core/ext/client_channel/subchannel_index.c
+  - src/core/ext/client_channel/uri_parser.c
+  plugin: grpc_client_channel
   uses:
   - grpc_base
 - name: grpc_codegen
@@ -409,7 +432,7 @@
   plugin: grpc_lb_policy_grpclb
   uses:
   - grpc_base
-  - grpc_client_config
+  - grpc_client_channel
   - nanopb
 - name: grpc_lb_policy_pick_first
   src:
@@ -417,14 +440,14 @@
   plugin: grpc_lb_policy_pick_first
   uses:
   - grpc_base
-  - grpc_client_config
+  - grpc_client_channel
 - name: grpc_lb_policy_round_robin
   src:
   - src/core/ext/lb_policy/round_robin/round_robin.c
   plugin: grpc_lb_policy_round_robin
   uses:
   - grpc_base
-  - grpc_client_config
+  - grpc_client_channel
 - name: grpc_load_reporting
   headers:
   - src/core/ext/load_reporting/load_reporting.h
@@ -441,14 +464,14 @@
   plugin: grpc_resolver_dns_native
   uses:
   - grpc_base
-  - grpc_client_config
+  - grpc_client_channel
 - name: grpc_resolver_sockaddr
   src:
   - src/core/ext/resolver/sockaddr/sockaddr_resolver.c
   plugin: grpc_resolver_sockaddr
   uses:
   - grpc_base
-  - grpc_client_config
+  - grpc_client_channel
 - name: grpc_secure
   public_headers:
   - include/grpc/grpc_security.h
@@ -479,8 +502,7 @@
   - src/core/lib/security/credentials/credentials.c
   - src/core/lib/security/credentials/credentials_metadata.c
   - src/core/lib/security/credentials/fake/fake_credentials.c
-  - src/core/lib/security/credentials/google_default/credentials_posix.c
-  - src/core/lib/security/credentials/google_default/credentials_windows.c
+  - src/core/lib/security/credentials/google_default/credentials_generic.c
   - src/core/lib/security/credentials/google_default/google_default_credentials.c
   - src/core/lib/security/credentials/iam/iam_credentials.c
   - src/core/lib/security/credentials/jwt/json_token.c
@@ -532,6 +554,7 @@
   - test/core/util/passthru_endpoint.c
   - test/core/util/port_posix.c
   - test/core/util/port_server_client.c
+  - test/core/util/port_uv.c
   - test/core/util/port_windows.c
   - test/core/util/slice_splitter.c
   deps:
@@ -599,14 +622,14 @@
   uses:
   - grpc_transport_chttp2
   - grpc_base
-  - grpc_client_config
+  - grpc_client_channel
 - name: grpc_transport_chttp2_client_secure
   src:
   - src/core/ext/transport/chttp2/client/secure/secure_channel_create.c
   uses:
   - grpc_transport_chttp2
   - grpc_base
-  - grpc_client_config
+  - grpc_client_channel
   - grpc_secure
 - name: grpc_transport_chttp2_server_insecure
   src:
@@ -660,6 +683,8 @@
   deps:
   - gpr
   secure: true
+  uses:
+  - grpc_base
 - name: grpc++_base
   language: c++
   public_headers:
@@ -1003,6 +1028,26 @@
   - grpc++_codegen_base_src
   secure: check
   vs_project_guid: '{C187A093-A0FE-489D-A40A-6E33DE0F9FEB}'
+- name: grpc++_cronet
+  build: all
+  language: c++
+  src:
+  - src/cpp/client/cronet_credentials.cc
+  - src/cpp/client/insecure_credentials.cc
+  - src/cpp/common/insecure_create_auth_context.cc
+  - src/cpp/server/insecure_server_credentials.cc
+  deps:
+  - gpr
+  - grpc_cronet
+  baselib: true
+  dll: true
+  filegroups:
+  - grpc++_base
+  - grpc++_codegen_base
+  - grpc++_codegen_base_src
+  platforms:
+  - linux
+  secure: true
 - name: grpc++_reflection
   build: all
   language: c++
@@ -1022,6 +1067,15 @@
   language: c++
   src:
   - src/proto/grpc/reflection/v1alpha/reflection.proto
+- name: grpc++_test
+  build: private
+  language: c++
+  headers:
+  - include/grpc++/test/server_context_test_spouse.h
+  src:
+  - src/cpp/test/server_context_test_spouse.cc
+  deps:
+  - grpc++
 - name: grpc++_test_config
   build: private
   language: c++
@@ -1324,6 +1378,8 @@
   - grpc
   - gpr_test_util
   - gpr
+  exclude_iomgrs:
+  - uv
 - name: bin_decoder_test
   build: test
   language: c
@@ -1465,6 +1521,8 @@
   - grpc
   - gpr_test_util
   - gpr
+  exclude_iomgrs:
+  - uv
 - name: connection_refused_test
   cpu_cost: 0.1
   build: test
@@ -1481,17 +1539,19 @@
   build: test
   language: c
   src:
-  - test/core/client_config/resolvers/dns_resolver_connectivity_test.c
+  - test/core/client_channel/resolvers/dns_resolver_connectivity_test.c
   deps:
   - grpc_test_util
   - grpc
   - gpr_test_util
   - gpr
+  exclude_iomgrs:
+  - uv
 - name: dns_resolver_test
   build: test
   language: c
   src:
-  - test/core/client_config/resolvers/dns_resolver_test.c
+  - test/core/client_channel/resolvers/dns_resolver_test.c
   deps:
   - grpc_test_util
   - grpc
@@ -1508,6 +1568,8 @@
   - grpc
   - gpr_test_util
   - gpr
+  exclude_iomgrs:
+  - uv
   platforms:
   - mac
   - linux
@@ -1522,6 +1584,8 @@
   - grpc
   - gpr_test_util
   - gpr
+  exclude_iomgrs:
+  - uv
 - name: ev_epoll_linux_test
   build: test
   language: c
@@ -1532,6 +1596,8 @@
   - grpc
   - gpr_test_util
   - gpr
+  exclude_iomgrs:
+  - uv
   platforms:
   - linux
 - name: fd_conservation_posix_test
@@ -1544,6 +1610,8 @@
   - grpc
   - gpr_test_util
   - gpr
+  exclude_iomgrs:
+  - uv
   platforms:
   - mac
   - linux
@@ -1558,6 +1626,8 @@
   - grpc
   - gpr_test_util
   - gpr
+  exclude_iomgrs:
+  - uv
   platforms:
   - mac
   - linux
@@ -1645,6 +1715,8 @@
   - grpc
   - gpr_test_util
   - gpr
+  exclude_iomgrs:
+  - uv
   platforms:
   - mac
   - linux
@@ -1865,6 +1937,8 @@
   - grpc
   - gpr_test_util
   - gpr
+  exclude_iomgrs:
+  - uv
 - name: grpc_create_jwt
   build: tool
   language: c
@@ -2185,7 +2259,7 @@
   build: test
   language: c
   src:
-  - test/core/client_config/lb_policies_test.c
+  - test/core/client_channel/lb_policies_test.c
   deps:
   - grpc_test_util
   - grpc
@@ -2327,6 +2401,8 @@
   - grpc
   - gpr_test_util
   - gpr
+  exclude_iomgrs:
+  - uv
 - name: secure_channel_create_test
   build: test
   language: c
@@ -2347,6 +2423,8 @@
   - grpc
   - gpr_test_util
   - gpr
+  exclude_iomgrs:
+  - uv
 - name: sequential_connectivity_test
   build: test
   language: c
@@ -2357,6 +2435,8 @@
   - grpc
   - gpr_test_util
   - gpr
+  exclude_iomgrs:
+  - uv
 - name: server_chttp2_test
   build: test
   language: c
@@ -2396,18 +2476,20 @@
   build: test
   language: c
   src:
-  - test/core/client_config/set_initial_connect_string_test.c
+  - test/core/client_channel/set_initial_connect_string_test.c
   deps:
   - test_tcp_server
   - grpc_test_util
   - grpc
   - gpr_test_util
   - gpr
+  exclude_iomgrs:
+  - uv
 - name: sockaddr_resolver_test
   build: test
   language: c
   src:
-  - test/core/client_config/resolvers/sockaddr_resolver_test.c
+  - test/core/client_channel/resolvers/sockaddr_resolver_test.c
   deps:
   - grpc_test_util
   - grpc
@@ -2433,6 +2515,8 @@
   - grpc
   - gpr_test_util
   - gpr
+  exclude_iomgrs:
+  - uv
   platforms:
   - mac
   - linux
@@ -2448,6 +2532,8 @@
   - grpc
   - gpr_test_util
   - gpr
+  exclude_iomgrs:
+  - uv
   platforms:
   - mac
   - linux
@@ -2463,6 +2549,8 @@
   - grpc
   - gpr_test_util
   - gpr
+  exclude_iomgrs:
+  - uv
   platforms:
   - mac
   - linux
@@ -2477,6 +2565,8 @@
   - grpc
   - gpr_test_util
   - gpr
+  exclude_iomgrs:
+  - uv
   platforms:
   - mac
   - linux
@@ -2511,6 +2601,8 @@
   - grpc
   - gpr_test_util
   - gpr
+  exclude_iomgrs:
+  - uv
 - name: timer_list_test
   build: test
   language: c
@@ -2521,6 +2613,8 @@
   - grpc
   - gpr_test_util
   - gpr
+  exclude_iomgrs:
+  - uv
 - name: transport_connectivity_state_test
   build: test
   language: c
@@ -2565,6 +2659,8 @@
   - grpc
   - gpr_test_util
   - gpr
+  exclude_iomgrs:
+  - uv
   platforms:
   - mac
   - linux
@@ -2573,25 +2669,41 @@
   build: fuzzer
   language: c
   src:
-  - test/core/client_config/uri_fuzzer_test.c
+  - test/core/client_channel/uri_fuzzer_test.c
   deps:
   - grpc_test_util
   - grpc
   - gpr_test_util
   - gpr
   corpus_dirs:
-  - test/core/client_config/uri_corpus
+  - test/core/client_channel/uri_corpus
   maxlen: 128
 - name: uri_parser_test
   build: test
   language: c
   src:
-  - test/core/client_config/uri_parser_test.c
+  - test/core/client_channel/uri_parser_test.c
   deps:
   - grpc_test_util
   - grpc
   - gpr_test_util
   - gpr
+- name: wakeup_fd_cv_test
+  build: test
+  language: c
+  src:
+  - test/core/iomgr/wakeup_fd_cv_test.c
+  deps:
+  - grpc_test_util
+  - grpc
+  - gpr_test_util
+  - gpr
+  exclude_iomgrs:
+  - uv
+  platforms:
+  - mac
+  - linux
+  - posix
 - name: alarm_cpp_test
   gtest: true
   build: test
@@ -3014,6 +3126,7 @@
   - grpc
   - gpr_test_util
   - gpr
+  - grpc++_test_config
   platforms:
   - mac
   - linux
@@ -3225,6 +3338,19 @@
   - grpc
   - gpr_test_util
   - gpr
+- name: server_context_test_spouse_test
+  gtest: true
+  build: test
+  language: c++
+  src:
+  - test/cpp/test/server_context_test_spouse_test.cc
+  deps:
+  - grpc_test_util
+  - grpc++_test
+  - grpc++
+  - grpc
+  - gpr_test_util
+  - gpr
 - name: server_crash_test
   gtest: true
   cpu_cost: 0.1
@@ -3311,6 +3437,7 @@
   - src/proto/grpc/testing/messages.proto
   - src/proto/grpc/testing/metrics.proto
   - src/proto/grpc/testing/test.proto
+  - test/cpp/interop/client_helper.cc
   - test/cpp/interop/interop_client.cc
   - test/cpp/interop/stress_interop_client.cc
   - test/cpp/interop/stress_test.cc
@@ -3532,6 +3659,7 @@
   - src/node/ext/call_credentials.h
   - src/node/ext/channel.h
   - src/node/ext/channel_credentials.h
+  - src/node/ext/completion_queue.h
   - src/node/ext/completion_queue_async_worker.h
   - src/node/ext/server.h
   - src/node/ext/server_credentials.h
@@ -3551,6 +3679,7 @@
   - src/node/ext/call_credentials.cc
   - src/node/ext/channel.cc
   - src/node/ext/channel_credentials.cc
+  - src/node/ext/completion_queue.cc
   - src/node/ext/completion_queue_async_worker.cc
   - src/node/ext/node_grpc.cc
   - src/node/ext/server.cc
diff --git a/config.m4 b/config.m4
index 0f10365..298708a 100644
--- a/config.m4
+++ b/config.m4
@@ -104,6 +104,7 @@
     src/core/lib/iomgr/combiner.c \
     src/core/lib/iomgr/endpoint.c \
     src/core/lib/iomgr/endpoint_pair_posix.c \
+    src/core/lib/iomgr/endpoint_pair_uv.c \
     src/core/lib/iomgr/endpoint_pair_windows.c \
     src/core/lib/iomgr/error.c \
     src/core/lib/iomgr/ev_epoll_linux.c \
@@ -115,36 +116,47 @@
     src/core/lib/iomgr/iocp_windows.c \
     src/core/lib/iomgr/iomgr.c \
     src/core/lib/iomgr/iomgr_posix.c \
+    src/core/lib/iomgr/iomgr_uv.c \
     src/core/lib/iomgr/iomgr_windows.c \
     src/core/lib/iomgr/load_file.c \
     src/core/lib/iomgr/network_status_tracker.c \
     src/core/lib/iomgr/polling_entity.c \
+    src/core/lib/iomgr/pollset_set_uv.c \
     src/core/lib/iomgr/pollset_set_windows.c \
+    src/core/lib/iomgr/pollset_uv.c \
     src/core/lib/iomgr/pollset_windows.c \
     src/core/lib/iomgr/resolve_address_posix.c \
+    src/core/lib/iomgr/resolve_address_uv.c \
     src/core/lib/iomgr/resolve_address_windows.c \
     src/core/lib/iomgr/sockaddr_utils.c \
     src/core/lib/iomgr/socket_utils_common_posix.c \
     src/core/lib/iomgr/socket_utils_linux.c \
     src/core/lib/iomgr/socket_utils_posix.c \
+    src/core/lib/iomgr/socket_utils_uv.c \
+    src/core/lib/iomgr/socket_utils_windows.c \
     src/core/lib/iomgr/socket_windows.c \
     src/core/lib/iomgr/tcp_client_posix.c \
+    src/core/lib/iomgr/tcp_client_uv.c \
     src/core/lib/iomgr/tcp_client_windows.c \
     src/core/lib/iomgr/tcp_posix.c \
     src/core/lib/iomgr/tcp_server_posix.c \
+    src/core/lib/iomgr/tcp_server_uv.c \
     src/core/lib/iomgr/tcp_server_windows.c \
+    src/core/lib/iomgr/tcp_uv.c \
     src/core/lib/iomgr/tcp_windows.c \
     src/core/lib/iomgr/time_averaged_stats.c \
-    src/core/lib/iomgr/timer.c \
+    src/core/lib/iomgr/timer_generic.c \
     src/core/lib/iomgr/timer_heap.c \
+    src/core/lib/iomgr/timer_uv.c \
     src/core/lib/iomgr/udp_server.c \
     src/core/lib/iomgr/unix_sockets_posix.c \
     src/core/lib/iomgr/unix_sockets_posix_noop.c \
+    src/core/lib/iomgr/wakeup_fd_cv.c \
     src/core/lib/iomgr/wakeup_fd_eventfd.c \
     src/core/lib/iomgr/wakeup_fd_nospecial.c \
     src/core/lib/iomgr/wakeup_fd_pipe.c \
     src/core/lib/iomgr/wakeup_fd_posix.c \
-    src/core/lib/iomgr/workqueue_posix.c \
+    src/core/lib/iomgr/workqueue_uv.c \
     src/core/lib/iomgr/workqueue_windows.c \
     src/core/lib/json/json.c \
     src/core/lib/json/json_reader.c \
@@ -170,6 +182,7 @@
     src/core/lib/surface/version.c \
     src/core/lib/transport/byte_stream.c \
     src/core/lib/transport/connectivity_state.c \
+    src/core/lib/transport/mdstr_hash_table.c \
     src/core/lib/transport/metadata.c \
     src/core/lib/transport/metadata_batch.c \
     src/core/lib/transport/static_metadata.c \
@@ -205,8 +218,7 @@
     src/core/lib/security/credentials/credentials.c \
     src/core/lib/security/credentials/credentials_metadata.c \
     src/core/lib/security/credentials/fake/fake_credentials.c \
-    src/core/lib/security/credentials/google_default/credentials_posix.c \
-    src/core/lib/security/credentials/google_default/credentials_windows.c \
+    src/core/lib/security/credentials/google_default/credentials_generic.c \
     src/core/lib/security/credentials/google_default/google_default_credentials.c \
     src/core/lib/security/credentials/iam/iam_credentials.c \
     src/core/lib/security/credentials/jwt/json_token.c \
@@ -228,25 +240,26 @@
     src/core/lib/tsi/ssl_transport_security.c \
     src/core/lib/tsi/transport_security.c \
     src/core/ext/transport/chttp2/client/secure/secure_channel_create.c \
-    src/core/ext/client_config/channel_connectivity.c \
-    src/core/ext/client_config/client_channel.c \
-    src/core/ext/client_config/client_channel_factory.c \
-    src/core/ext/client_config/client_config_plugin.c \
-    src/core/ext/client_config/connector.c \
-    src/core/ext/client_config/default_initial_connect_string.c \
-    src/core/ext/client_config/http_connect_handshaker.c \
-    src/core/ext/client_config/initial_connect_string.c \
-    src/core/ext/client_config/lb_policy.c \
-    src/core/ext/client_config/lb_policy_factory.c \
-    src/core/ext/client_config/lb_policy_registry.c \
-    src/core/ext/client_config/parse_address.c \
-    src/core/ext/client_config/resolver.c \
-    src/core/ext/client_config/resolver_factory.c \
-    src/core/ext/client_config/resolver_registry.c \
-    src/core/ext/client_config/resolver_result.c \
-    src/core/ext/client_config/subchannel.c \
-    src/core/ext/client_config/subchannel_index.c \
-    src/core/ext/client_config/uri_parser.c \
+    src/core/ext/client_channel/channel_connectivity.c \
+    src/core/ext/client_channel/client_channel.c \
+    src/core/ext/client_channel/client_channel_factory.c \
+    src/core/ext/client_channel/client_channel_plugin.c \
+    src/core/ext/client_channel/connector.c \
+    src/core/ext/client_channel/default_initial_connect_string.c \
+    src/core/ext/client_channel/http_connect_handshaker.c \
+    src/core/ext/client_channel/initial_connect_string.c \
+    src/core/ext/client_channel/lb_policy.c \
+    src/core/ext/client_channel/lb_policy_factory.c \
+    src/core/ext/client_channel/lb_policy_registry.c \
+    src/core/ext/client_channel/method_config.c \
+    src/core/ext/client_channel/parse_address.c \
+    src/core/ext/client_channel/resolver.c \
+    src/core/ext/client_channel/resolver_factory.c \
+    src/core/ext/client_channel/resolver_registry.c \
+    src/core/ext/client_channel/resolver_result.c \
+    src/core/ext/client_channel/subchannel.c \
+    src/core/ext/client_channel/subchannel_index.c \
+    src/core/ext/client_channel/uri_parser.c \
     src/core/ext/transport/chttp2/server/insecure/server_chttp2.c \
     src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.c \
     src/core/ext/transport/chttp2/client/insecure/channel_create.c \
@@ -585,7 +598,7 @@
   PHP_ADD_BUILD_DIR($ext_builddir/src/boringssl)
   PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/census)
   PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/census/gen)
-  PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/client_config)
+  PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/client_channel)
   PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/lb_policy/grpclb)
   PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1)
   PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/lb_policy/pick_first)
diff --git a/doc/environment_variables.md b/doc/environment_variables.md
index 74b7862..d02801b 100644
--- a/doc/environment_variables.md
+++ b/doc/environment_variables.md
@@ -51,6 +51,7 @@
   - glb - traces the grpclb load balancer
   - queue_pluck
   - queue_timeout
+  - server_channel - lightweight trace of significant server channel events
   - secure_endpoint - traces bytes flowing through encrypted channels
   - transport_security - traces metadata about secure channel establishment
   - tcp - traces bytes in and out of a channel
@@ -64,4 +65,3 @@
   - DEBUG - log all gRPC messages
   - INFO - log INFO and ERROR message
   - ERROR - log only errors
-
diff --git a/doc/epoll-polling-engine.md b/doc/epoll-polling-engine.md
new file mode 100644
index 0000000..ab7030a
--- /dev/null
+++ b/doc/epoll-polling-engine.md
@@ -0,0 +1,121 @@
+# `epoll`-based pollset implementation in gRPC
+
+Sree Kuchibhotla (sreek@) [May - 2016]
+(Design input from Craig Tiller and David Klempner)
+
+> Status: As of June 2016, this change is implemented and merged.
+
+> * The bulk of the functionality is in: [ev_poll_linux.c](https://github.com/grpc/grpc/blob/master/src/core/lib/iomgr/ev_epoll_linux.c)
+> * Pull request: https://github.com/grpc/grpc/pull/6803
+
+## 1. Introduction
+The document talks about the proposed changes to `epoll`-based implementation of pollsets in gRPC. Section-2 gives an overview of the current implementation, Section-3 talks about the problems in the current implementation and finally Section-4 talks about the proposed changes.
+
+## 2. Current `epoll`-based implementation in gRPC
+
+![image](images/old_epoll_impl.png)
+
+**Figure 1: Current implementation**
+
+A gRPC client or a server can have more than one completion queue. Each completion queue creates a pollset.
+
+The gRPC core library does not create any threads[^1] on its own and relies on the application using the gRPC core library to provide the threads. A thread starts to poll for events by calling the gRPC core surface APIs `grpc_completion_queue_next()` or `grpc_completion_queue_pluck()`. More than one thread can call `grpc_completion_queue_next()`on the same completion queue[^2].
+
+A file descriptor can be in more than one completion queue. There are examples in the next section that show how this can happen.
+
+When an event of interest happens in a pollset, multiple threads are woken up and there are no guarantees on which thread actually ends up performing the work i.e executing the callbacks associated with that event. The thread that performs the work finally queues a completion event `grpc_cq_completion` on the appropriate completion queue and "kicks" (i.e wakes ups) the thread that is actually interested in that event (which can be itself - in which case there is no thread hop)
+
+For example, in **Figure 1**, if `fd1` becomes readable, any one of the threads i.e *Threads 1* to *Threads K* or *Thread P*, might be woken up. Let's say *Thread P* was calling a `grpc_completion_queue_pluck()` and was actually interested in the event on `fd1` but *Thread 1* woke up. In this case, *Thread 1* executes the callbacks and finally kicks *Thread P* by signalling `event_fd_P`. *Thread P* wakes up, realizes that there is a new completion event for it and returns from `grpc_completion_queue_pluck()` to its caller.
+
+## 3. Issues in the current architecture
+
+### _Thundering Herds_
+
+If multiple threads concurrently call `epoll_wait()`, we are guaranteed that only one thread is woken up if one of the `fds` in the set becomes readable/writable. However, in our current implementation, the threads do not directly call a blocking `epoll_wait()`[^3]. Instead, they call `poll()` on the set containing `[event_fd`[^4]`, epoll_fd]`. **(see Figure 1)**
+
+Considering the fact that an `fd` can be in multiple `pollsets` and that each `pollset` might have multiple poller threads, it means that whenever an `fd` becomes readable/writable, all the threads in all the `pollsets` (in which that `fd` is present) are woken up.
+
+The performance impact of this would be more conspicuous on the server side. Here are a two examples of thundering herds on the server side.
+
+Example 1: Listening fds on server
+
+* A gRPC server can have multiple server completion queues (i.e completion queues which are used to listen for incoming channels).
+* A gRPC server can also listen on more than one TCP-port.
+* A listening socket is created for each port the gRPC server would be listening on.
+* Every listening socket's fd is added to all the server completion queues' pollsets. (Currently we do not do any sharding of the listening fds across these pollsets).
+
+This means that for every incoming new channel, all the threads waiting on all the pollsets are woken up.
+
+Example 2: New Incoming-channel fds on server
+
+* Currently, every new incoming channel's `fd` (i.e the socket `fd` that is returned by doing an `accept()` on the new incoming channel) is added to all the server completion queues' pollsets [^5]).
+* Clearly, this would also cause all thundering herd problem for every read onthat fd
+
+There are other scenarios especially on the client side where an fd can end up being on multiple pollsets which would cause thundering herds on the clients.
+
+
+## 4. Proposed changes to the current `epoll`-based polling implementation:
+
+The main idea in this proposal is to group 'related' `fds` into a single epoll-based set. This would ensure that only one thread wakes up in case of an event on one of the `fds` in the epoll set.
+
+To accomplish this, we introduce a new abstraction called `polling_island` which will have an epoll set underneath (See **Figure 2** below).  A `polling_island` contains the following:
+
+* `epoll_fd`: The file descriptor of the underlying epoll set
+* `fd_set`: The set of 'fds' in the pollset island i.e in the epoll set (The pollset island merging operation described later requires the list of fds in the pollset island and currently there is no API available to enumerate all the fds in an epoll set)
+* `event_fd`: A level triggered _event fd_ that is used to wake up all the threads waiting on this epoll set (Note: This `event_fd` is added to the underlying epoll set during pollset island creation. This is useful in the pollset island merging operation described later)
+* `merged_to`:  The polling island into which this one merged. See section 4.2 (case 2) for more details on this. Also note that if `merged_to` is set, all the other fields in this polling island are not used anymore
+
+In this new model, only one thread wakes up whenever an event of interest happens in an epoll set.
+
+![drawing](images/new_epoll_impl.png)
+
+**Figure 2: Proposed changes**
+
+### 4.1 Relation between `fd`, `pollset` and `polling_island:`
+
+* An `fd` may belong to multiple `pollsets` but belongs to exactly one `polling_island`
+* A `pollset` belongs to exactly one `polling_island`
+* An `fd` and the `pollset(s`) it belongs to, have same `polling_island`
+
+### 4.2 Algorithm to add an `fd` to a `pollset`
+
+There are two cases to check here:
+
+* **Case 1:** Both `fd` and `pollset` already belong to the same `polling_island`
+    * This is straightforward and nothing really needs to be done here
+* **Case 2:** The `fd `and `pollset` point to different `polling_islands`: In this case we _merge_ both the polling islands i.e:
+    * Add all the `fds` from the smaller `polling_island `to the larger `polling_island` and update the `merged_to` pointer on the smaller island to point to the larger island.
+    * Wake up all the threads waiting on the smaller `polling_island`'s `epoll_fd` (by signalling the `event_fd` on that island) and make them now wait on the larger `polling_island`'s `epoll_fd`
+    * Update `fd` and `pollset` to now point to the larger `polling_island`
+
+### 4.3 Directed wakeups:
+
+The new implementation, just like the current implementation, does not provide us any guarantees that the thread that is woken up is the thread that is actually interested in the event.  So the thread that woke up executes the callbacks and finally has to 'kick' the appropriate polling thread interested in the event.
+
+In the current implementation, every polling thread also had a `event_fd` on which it was listening to and hence waking it up was as simple as signalling that `event_fd`. However, using an `event_fd` also meant that every thread has to use a `poll()` (on `event_fd` and `epoll_fd`) instead of doing an `epoll_wait()` and this resulted in the thundering herd problems described above.
+
+The proposal here is to use signals and kicking a thread would just be sending a signal to that thread. Unfortunately there are only a few signals available on posix systems and most of them have pre-determined behavior leaving only a few signals `SIGUSR1`, `SIGUSR2` and `SIGRTx (SIGRTMIN to SIGRTMAX)` for custom use.
+
+The calling application might have registered other signal handlers for these signals. `We will provide a new API where the applications can "give a signal number" to gRPC library to use for this purpose.
+
+```
+void grpc_use_signal(int signal_num)
+```
+
+If the calling application does not provide a signal number, then the gRPC library will relegate to using a model similar to the current implementation (where every thread does a blocking `poll()` on its `wakeup_fd` and the `epoll_fd`).  The function` psi_wait() `in figure 2 implements this logic.
+
+**>> **(**NOTE**: Or alternatively, we can implement a turnstile polling (i.e having only one thread calling `epoll_wait()` on the epoll set at any time - which all other threads call poll on their `wakeup_fds`) 
+in case of not getting a signal number from the applications.
+
+
+## Notes
+
+[^1]: Only exception is in case of name-resolution
+
+[^2]: However, a `grpc_completion_queue_next()` and `grpc_completion_queue_pluck()` must not be called in parallel on the same completion queue
+
+[^3]: The threads first do a blocking` poll()` with `[wakeup_fd, epoll_fd]`.  If the `poll()` returns due to an event of interest in the epoll set, they then call a non-blocking i.e a zero-timeout `epoll_wait()` on the `epoll_fd`
+
+[^4]: `event_fd` is the linux platform specific implementation of `grpc_wakeup_fd`.  A `wakeup_fd` is used to wake up polling threads typically when the event for which the polling thread is waiting is already completed by some other thread.  It is also used to wake up the polling threads in case of shutdowns or to re-evaluate the poller's interest in the fds to poll (the last scenario is only in case of `poll`-based (not `epoll`-based) implementation of `pollsets`).
+
+[^5]: See more details about the issue here https://github.com/grpc/grpc/issues/5470 and for a proposed fix here: https://github.com/grpc/grpc/pull/6149
diff --git a/doc/images/new_epoll_impl.png b/doc/images/new_epoll_impl.png
new file mode 100644
index 0000000..9ca1f49
--- /dev/null
+++ b/doc/images/new_epoll_impl.png
Binary files differ
diff --git a/doc/images/old_epoll_impl.png b/doc/images/old_epoll_impl.png
new file mode 100644
index 0000000..7ac3df8
--- /dev/null
+++ b/doc/images/old_epoll_impl.png
Binary files differ
diff --git a/doc/interop-test-descriptions.md b/doc/interop-test-descriptions.md
index 666af18..96d1f2b 100644
--- a/doc/interop-test-descriptions.md
+++ b/doc/interop-test-descriptions.md
@@ -779,16 +779,15 @@
 
 ### unimplemented_method
 
-Status: Ready for implementation. Blocking beta.
-
-This test verifies calling unimplemented RPC method returns the UNIMPLEMENTED status code.
+This test verifies that calling an unimplemented RPC method returns the
+UNIMPLEMENTED status code.
 
 Server features:
 N/A
 
 Procedure:
-* Client calls `grpc.testing.UnimplementedService/UnimplementedCall` with an
-  empty request (defined as `grpc.testing.Empty`):
+* Client calls `grpc.testing.TestService/UnimplementedCall` with an empty
+  request (defined as `grpc.testing.Empty`):
 
     ```
     {
@@ -797,7 +796,21 @@
 
 Client asserts:
 * received status code is 12 (UNIMPLEMENTED)
-* received status message is empty or null/unset
+
+### unimplemented_service
+
+This test verifies calling an unimplemented server returns the UNIMPLEMENTED
+status code.
+
+Server features:
+N/A
+
+Procedure:
+* Client calls `grpc.testing.UnimplementedService/UnimplementedCall` with an
+  empty request (defined as `grpc.testing.Empty`)
+
+Client asserts:
+* received status code is 12 (UNIMPLEMENTED)
 
 ### cancel_after_begin
 
diff --git a/examples/node/dynamic_codegen/route_guide/route_guide_client.js b/examples/node/dynamic_codegen/route_guide/route_guide_client.js
index 775b9add..b7550b2 100644
--- a/examples/node/dynamic_codegen/route_guide/route_guide_client.js
+++ b/examples/node/dynamic_codegen/route_guide/route_guide_client.js
@@ -55,6 +55,7 @@
   function featureCallback(error, feature) {
     if (error) {
       callback(error);
+      return;
     }
     if (feature.name === '') {
       console.log('Found no feature at ' +
@@ -117,13 +118,17 @@
     string: 'db_path'
   });
   fs.readFile(path.resolve(argv.db_path), function(err, data) {
-    if (err) callback(err);
+    if (err) {
+      callback(err);
+      return;
+    }
     var feature_list = JSON.parse(data);
 
     var num_points = 10;
     var call = client.recordRoute(function(error, stats) {
       if (error) {
         callback(error);
+        return;
       }
       console.log('Finished trip with', stats.point_count, 'points');
       console.log('Passed', stats.feature_count, 'features');
diff --git a/examples/node/static_codegen/route_guide/route_guide_client.js b/examples/node/static_codegen/route_guide/route_guide_client.js
index ecde786..e16de44 100644
--- a/examples/node/static_codegen/route_guide/route_guide_client.js
+++ b/examples/node/static_codegen/route_guide/route_guide_client.js
@@ -56,6 +56,7 @@
   function featureCallback(error, feature) {
     if (error) {
       callback(error);
+      return;
     }
     var latitude = feature.getLocation().getLatitude();
     var longitude = feature.getLocation().getLongitude();
@@ -115,7 +116,10 @@
     string: 'db_path'
   });
   fs.readFile(path.resolve(argv.db_path), function(err, data) {
-    if (err) callback(err);
+    if (err) {
+      callback(err);
+      return;
+    }
     // Transform the loaded features to Feature objects
     var feature_list = _.map(JSON.parse(data), function(value) {
       var feature = new messages.Feature();
@@ -131,6 +135,7 @@
     var call = client.recordRoute(function(error, stats) {
       if (error) {
         callback(error);
+        return;
       }
       console.log('Finished trip with', stats.getPointCount(), 'points');
       console.log('Passed', stats.getFeatureCount(), 'features');
diff --git a/examples/python/helloworld/run_codegen.py b/examples/python/helloworld/run_codegen.py
deleted file mode 100644
index 4835ec2..0000000
--- a/examples/python/helloworld/run_codegen.py
+++ /dev/null
@@ -1,42 +0,0 @@
-# Copyright 2015, Google Inc.
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions are
-# met:
-#
-#     * Redistributions of source code must retain the above copyright
-# notice, this list of conditions and the following disclaimer.
-#     * Redistributions in binary form must reproduce the above
-# copyright notice, this list of conditions and the following disclaimer
-# in the documentation and/or other materials provided with the
-# distribution.
-#     * Neither the name of Google Inc. nor the names of its
-# contributors may be used to endorse or promote products derived from
-# this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-"""Runs protoc with the gRPC plugin to generate messages and gRPC stubs."""
-
-from grpc.tools import protoc
-
-protoc.main(
-    (
-	'',
-	'-I../../protos',
-	'--python_out=.',
-	'--grpc_python_out=.',
-	'../../protos/helloworld.proto',
-    )
-)
diff --git a/gRPC-Core.podspec b/gRPC-Core.podspec
index 6886bdf..6fc65f6 100644
--- a/gRPC-Core.podspec
+++ b/gRPC-Core.podspec
@@ -287,27 +287,34 @@
                       'src/core/lib/iomgr/pollset.h',
                       'src/core/lib/iomgr/pollset_set.h',
                       'src/core/lib/iomgr/pollset_set_windows.h',
+                      'src/core/lib/iomgr/pollset_uv.h',
                       'src/core/lib/iomgr/pollset_windows.h',
+                      'src/core/lib/iomgr/port.h',
                       'src/core/lib/iomgr/resolve_address.h',
                       'src/core/lib/iomgr/sockaddr.h',
                       'src/core/lib/iomgr/sockaddr_posix.h',
                       'src/core/lib/iomgr/sockaddr_utils.h',
                       'src/core/lib/iomgr/sockaddr_windows.h',
+                      'src/core/lib/iomgr/socket_utils.h',
                       'src/core/lib/iomgr/socket_utils_posix.h',
                       'src/core/lib/iomgr/socket_windows.h',
                       'src/core/lib/iomgr/tcp_client.h',
                       'src/core/lib/iomgr/tcp_posix.h',
                       'src/core/lib/iomgr/tcp_server.h',
+                      'src/core/lib/iomgr/tcp_uv.h',
                       'src/core/lib/iomgr/tcp_windows.h',
                       'src/core/lib/iomgr/time_averaged_stats.h',
                       'src/core/lib/iomgr/timer.h',
+                      'src/core/lib/iomgr/timer_generic.h',
                       'src/core/lib/iomgr/timer_heap.h',
+                      'src/core/lib/iomgr/timer_uv.h',
                       'src/core/lib/iomgr/udp_server.h',
                       'src/core/lib/iomgr/unix_sockets_posix.h',
+                      'src/core/lib/iomgr/wakeup_fd_cv.h',
                       'src/core/lib/iomgr/wakeup_fd_pipe.h',
                       'src/core/lib/iomgr/wakeup_fd_posix.h',
                       'src/core/lib/iomgr/workqueue.h',
-                      'src/core/lib/iomgr/workqueue_posix.h',
+                      'src/core/lib/iomgr/workqueue_uv.h',
                       'src/core/lib/iomgr/workqueue_windows.h',
                       'src/core/lib/json/json.h',
                       'src/core/lib/json/json_common.h',
@@ -326,6 +333,7 @@
                       'src/core/lib/surface/server.h',
                       'src/core/lib/transport/byte_stream.h',
                       'src/core/lib/transport/connectivity_state.h',
+                      'src/core/lib/transport/mdstr_hash_table.h',
                       'src/core/lib/transport/metadata.h',
                       'src/core/lib/transport/metadata_batch.h',
                       'src/core/lib/transport/static_metadata.h',
@@ -377,22 +385,23 @@
                       'src/core/lib/tsi/ssl_types.h',
                       'src/core/lib/tsi/transport_security.h',
                       'src/core/lib/tsi/transport_security_interface.h',
-                      'src/core/ext/client_config/client_channel.h',
-                      'src/core/ext/client_config/client_channel_factory.h',
-                      'src/core/ext/client_config/connector.h',
-                      'src/core/ext/client_config/http_connect_handshaker.h',
-                      'src/core/ext/client_config/initial_connect_string.h',
-                      'src/core/ext/client_config/lb_policy.h',
-                      'src/core/ext/client_config/lb_policy_factory.h',
-                      'src/core/ext/client_config/lb_policy_registry.h',
-                      'src/core/ext/client_config/parse_address.h',
-                      'src/core/ext/client_config/resolver.h',
-                      'src/core/ext/client_config/resolver_factory.h',
-                      'src/core/ext/client_config/resolver_registry.h',
-                      'src/core/ext/client_config/resolver_result.h',
-                      'src/core/ext/client_config/subchannel.h',
-                      'src/core/ext/client_config/subchannel_index.h',
-                      'src/core/ext/client_config/uri_parser.h',
+                      'src/core/ext/client_channel/client_channel.h',
+                      'src/core/ext/client_channel/client_channel_factory.h',
+                      'src/core/ext/client_channel/connector.h',
+                      'src/core/ext/client_channel/http_connect_handshaker.h',
+                      'src/core/ext/client_channel/initial_connect_string.h',
+                      'src/core/ext/client_channel/lb_policy.h',
+                      'src/core/ext/client_channel/lb_policy_factory.h',
+                      'src/core/ext/client_channel/lb_policy_registry.h',
+                      'src/core/ext/client_channel/method_config.h',
+                      'src/core/ext/client_channel/parse_address.h',
+                      'src/core/ext/client_channel/resolver.h',
+                      'src/core/ext/client_channel/resolver_factory.h',
+                      'src/core/ext/client_channel/resolver_registry.h',
+                      'src/core/ext/client_channel/resolver_result.h',
+                      'src/core/ext/client_channel/subchannel.h',
+                      'src/core/ext/client_channel/subchannel_index.h',
+                      'src/core/ext/client_channel/uri_parser.h',
                       'src/core/ext/lb_policy/grpclb/grpclb.h',
                       'src/core/ext/lb_policy/grpclb/load_balancer_api.h',
                       'src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h',
@@ -434,6 +443,7 @@
                       'src/core/lib/iomgr/combiner.c',
                       'src/core/lib/iomgr/endpoint.c',
                       'src/core/lib/iomgr/endpoint_pair_posix.c',
+                      'src/core/lib/iomgr/endpoint_pair_uv.c',
                       'src/core/lib/iomgr/endpoint_pair_windows.c',
                       'src/core/lib/iomgr/error.c',
                       'src/core/lib/iomgr/ev_epoll_linux.c',
@@ -445,36 +455,47 @@
                       'src/core/lib/iomgr/iocp_windows.c',
                       'src/core/lib/iomgr/iomgr.c',
                       'src/core/lib/iomgr/iomgr_posix.c',
+                      'src/core/lib/iomgr/iomgr_uv.c',
                       'src/core/lib/iomgr/iomgr_windows.c',
                       'src/core/lib/iomgr/load_file.c',
                       'src/core/lib/iomgr/network_status_tracker.c',
                       'src/core/lib/iomgr/polling_entity.c',
+                      'src/core/lib/iomgr/pollset_set_uv.c',
                       'src/core/lib/iomgr/pollset_set_windows.c',
+                      'src/core/lib/iomgr/pollset_uv.c',
                       'src/core/lib/iomgr/pollset_windows.c',
                       'src/core/lib/iomgr/resolve_address_posix.c',
+                      'src/core/lib/iomgr/resolve_address_uv.c',
                       'src/core/lib/iomgr/resolve_address_windows.c',
                       'src/core/lib/iomgr/sockaddr_utils.c',
                       'src/core/lib/iomgr/socket_utils_common_posix.c',
                       'src/core/lib/iomgr/socket_utils_linux.c',
                       'src/core/lib/iomgr/socket_utils_posix.c',
+                      'src/core/lib/iomgr/socket_utils_uv.c',
+                      'src/core/lib/iomgr/socket_utils_windows.c',
                       'src/core/lib/iomgr/socket_windows.c',
                       'src/core/lib/iomgr/tcp_client_posix.c',
+                      'src/core/lib/iomgr/tcp_client_uv.c',
                       'src/core/lib/iomgr/tcp_client_windows.c',
                       'src/core/lib/iomgr/tcp_posix.c',
                       'src/core/lib/iomgr/tcp_server_posix.c',
+                      'src/core/lib/iomgr/tcp_server_uv.c',
                       'src/core/lib/iomgr/tcp_server_windows.c',
+                      'src/core/lib/iomgr/tcp_uv.c',
                       'src/core/lib/iomgr/tcp_windows.c',
                       'src/core/lib/iomgr/time_averaged_stats.c',
-                      'src/core/lib/iomgr/timer.c',
+                      'src/core/lib/iomgr/timer_generic.c',
                       'src/core/lib/iomgr/timer_heap.c',
+                      'src/core/lib/iomgr/timer_uv.c',
                       'src/core/lib/iomgr/udp_server.c',
                       'src/core/lib/iomgr/unix_sockets_posix.c',
                       'src/core/lib/iomgr/unix_sockets_posix_noop.c',
+                      'src/core/lib/iomgr/wakeup_fd_cv.c',
                       'src/core/lib/iomgr/wakeup_fd_eventfd.c',
                       'src/core/lib/iomgr/wakeup_fd_nospecial.c',
                       'src/core/lib/iomgr/wakeup_fd_pipe.c',
                       'src/core/lib/iomgr/wakeup_fd_posix.c',
-                      'src/core/lib/iomgr/workqueue_posix.c',
+                      'src/core/lib/iomgr/workqueue_uv.c',
                       'src/core/lib/iomgr/workqueue_windows.c',
                       'src/core/lib/json/json.c',
                       'src/core/lib/json/json_reader.c',
@@ -500,6 +521,7 @@
                       'src/core/lib/surface/version.c',
                       'src/core/lib/transport/byte_stream.c',
                       'src/core/lib/transport/connectivity_state.c',
+                      'src/core/lib/transport/mdstr_hash_table.c',
                       'src/core/lib/transport/metadata.c',
                       'src/core/lib/transport/metadata_batch.c',
                       'src/core/lib/transport/static_metadata.c',
@@ -535,8 +557,7 @@
                       'src/core/lib/security/credentials/credentials.c',
                       'src/core/lib/security/credentials/credentials_metadata.c',
                       'src/core/lib/security/credentials/fake/fake_credentials.c',
-                      'src/core/lib/security/credentials/google_default/credentials_posix.c',
-                      'src/core/lib/security/credentials/google_default/credentials_windows.c',
+                      'src/core/lib/security/credentials/google_default/credentials_generic.c',
                       'src/core/lib/security/credentials/google_default/google_default_credentials.c',
                       'src/core/lib/security/credentials/iam/iam_credentials.c',
                       'src/core/lib/security/credentials/jwt/json_token.c',
@@ -558,25 +579,26 @@
                       'src/core/lib/tsi/ssl_transport_security.c',
                       'src/core/lib/tsi/transport_security.c',
                       'src/core/ext/transport/chttp2/client/secure/secure_channel_create.c',
-                      'src/core/ext/client_config/channel_connectivity.c',
-                      'src/core/ext/client_config/client_channel.c',
-                      'src/core/ext/client_config/client_channel_factory.c',
-                      'src/core/ext/client_config/client_config_plugin.c',
-                      'src/core/ext/client_config/connector.c',
-                      'src/core/ext/client_config/default_initial_connect_string.c',
-                      'src/core/ext/client_config/http_connect_handshaker.c',
-                      'src/core/ext/client_config/initial_connect_string.c',
-                      'src/core/ext/client_config/lb_policy.c',
-                      'src/core/ext/client_config/lb_policy_factory.c',
-                      'src/core/ext/client_config/lb_policy_registry.c',
-                      'src/core/ext/client_config/parse_address.c',
-                      'src/core/ext/client_config/resolver.c',
-                      'src/core/ext/client_config/resolver_factory.c',
-                      'src/core/ext/client_config/resolver_registry.c',
-                      'src/core/ext/client_config/resolver_result.c',
-                      'src/core/ext/client_config/subchannel.c',
-                      'src/core/ext/client_config/subchannel_index.c',
-                      'src/core/ext/client_config/uri_parser.c',
+                      'src/core/ext/client_channel/channel_connectivity.c',
+                      'src/core/ext/client_channel/client_channel.c',
+                      'src/core/ext/client_channel/client_channel_factory.c',
+                      'src/core/ext/client_channel/client_channel_plugin.c',
+                      'src/core/ext/client_channel/connector.c',
+                      'src/core/ext/client_channel/default_initial_connect_string.c',
+                      'src/core/ext/client_channel/http_connect_handshaker.c',
+                      'src/core/ext/client_channel/initial_connect_string.c',
+                      'src/core/ext/client_channel/lb_policy.c',
+                      'src/core/ext/client_channel/lb_policy_factory.c',
+                      'src/core/ext/client_channel/lb_policy_registry.c',
+                      'src/core/ext/client_channel/method_config.c',
+                      'src/core/ext/client_channel/parse_address.c',
+                      'src/core/ext/client_channel/resolver.c',
+                      'src/core/ext/client_channel/resolver_factory.c',
+                      'src/core/ext/client_channel/resolver_registry.c',
+                      'src/core/ext/client_channel/resolver_result.c',
+                      'src/core/ext/client_channel/subchannel.c',
+                      'src/core/ext/client_channel/subchannel_index.c',
+                      'src/core/ext/client_channel/uri_parser.c',
                       'src/core/ext/transport/chttp2/server/insecure/server_chttp2.c',
                       'src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.c',
                       'src/core/ext/transport/chttp2/client/insecure/channel_create.c',
@@ -660,27 +682,34 @@
                               'src/core/lib/iomgr/pollset.h',
                               'src/core/lib/iomgr/pollset_set.h',
                               'src/core/lib/iomgr/pollset_set_windows.h',
+                              'src/core/lib/iomgr/pollset_uv.h',
                               'src/core/lib/iomgr/pollset_windows.h',
+                              'src/core/lib/iomgr/port.h',
                               'src/core/lib/iomgr/resolve_address.h',
                               'src/core/lib/iomgr/sockaddr.h',
                               'src/core/lib/iomgr/sockaddr_posix.h',
                               'src/core/lib/iomgr/sockaddr_utils.h',
                               'src/core/lib/iomgr/sockaddr_windows.h',
+                              'src/core/lib/iomgr/socket_utils.h',
                               'src/core/lib/iomgr/socket_utils_posix.h',
                               'src/core/lib/iomgr/socket_windows.h',
                               'src/core/lib/iomgr/tcp_client.h',
                               'src/core/lib/iomgr/tcp_posix.h',
                               'src/core/lib/iomgr/tcp_server.h',
+                              'src/core/lib/iomgr/tcp_uv.h',
                               'src/core/lib/iomgr/tcp_windows.h',
                               'src/core/lib/iomgr/time_averaged_stats.h',
                               'src/core/lib/iomgr/timer.h',
+                              'src/core/lib/iomgr/timer_generic.h',
                               'src/core/lib/iomgr/timer_heap.h',
+                              'src/core/lib/iomgr/timer_uv.h',
                               'src/core/lib/iomgr/udp_server.h',
                               'src/core/lib/iomgr/unix_sockets_posix.h',
+                              'src/core/lib/iomgr/wakeup_fd_cv.h',
                               'src/core/lib/iomgr/wakeup_fd_pipe.h',
                               'src/core/lib/iomgr/wakeup_fd_posix.h',
                               'src/core/lib/iomgr/workqueue.h',
-                              'src/core/lib/iomgr/workqueue_posix.h',
+                              'src/core/lib/iomgr/workqueue_uv.h',
                               'src/core/lib/iomgr/workqueue_windows.h',
                               'src/core/lib/json/json.h',
                               'src/core/lib/json/json_common.h',
@@ -699,6 +728,7 @@
                               'src/core/lib/surface/server.h',
                               'src/core/lib/transport/byte_stream.h',
                               'src/core/lib/transport/connectivity_state.h',
+                              'src/core/lib/transport/mdstr_hash_table.h',
                               'src/core/lib/transport/metadata.h',
                               'src/core/lib/transport/metadata_batch.h',
                               'src/core/lib/transport/static_metadata.h',
@@ -750,22 +780,23 @@
                               'src/core/lib/tsi/ssl_types.h',
                               'src/core/lib/tsi/transport_security.h',
                               'src/core/lib/tsi/transport_security_interface.h',
-                              'src/core/ext/client_config/client_channel.h',
-                              'src/core/ext/client_config/client_channel_factory.h',
-                              'src/core/ext/client_config/connector.h',
-                              'src/core/ext/client_config/http_connect_handshaker.h',
-                              'src/core/ext/client_config/initial_connect_string.h',
-                              'src/core/ext/client_config/lb_policy.h',
-                              'src/core/ext/client_config/lb_policy_factory.h',
-                              'src/core/ext/client_config/lb_policy_registry.h',
-                              'src/core/ext/client_config/parse_address.h',
-                              'src/core/ext/client_config/resolver.h',
-                              'src/core/ext/client_config/resolver_factory.h',
-                              'src/core/ext/client_config/resolver_registry.h',
-                              'src/core/ext/client_config/resolver_result.h',
-                              'src/core/ext/client_config/subchannel.h',
-                              'src/core/ext/client_config/subchannel_index.h',
-                              'src/core/ext/client_config/uri_parser.h',
+                              'src/core/ext/client_channel/client_channel.h',
+                              'src/core/ext/client_channel/client_channel_factory.h',
+                              'src/core/ext/client_channel/connector.h',
+                              'src/core/ext/client_channel/http_connect_handshaker.h',
+                              'src/core/ext/client_channel/initial_connect_string.h',
+                              'src/core/ext/client_channel/lb_policy.h',
+                              'src/core/ext/client_channel/lb_policy_factory.h',
+                              'src/core/ext/client_channel/lb_policy_registry.h',
+                              'src/core/ext/client_channel/method_config.h',
+                              'src/core/ext/client_channel/parse_address.h',
+                              'src/core/ext/client_channel/resolver.h',
+                              'src/core/ext/client_channel/resolver_factory.h',
+                              'src/core/ext/client_channel/resolver_registry.h',
+                              'src/core/ext/client_channel/resolver_result.h',
+                              'src/core/ext/client_channel/subchannel.h',
+                              'src/core/ext/client_channel/subchannel_index.h',
+                              'src/core/ext/client_channel/uri_parser.h',
                               'src/core/ext/lb_policy/grpclb/grpclb.h',
                               'src/core/ext/lb_policy/grpclb/load_balancer_api.h',
                               'src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h',
diff --git a/grpc.gemspec b/grpc.gemspec
index 6079ea2..d991d56 100755
--- a/grpc.gemspec
+++ b/grpc.gemspec
@@ -207,27 +207,34 @@
   s.files += %w( src/core/lib/iomgr/pollset.h )
   s.files += %w( src/core/lib/iomgr/pollset_set.h )
   s.files += %w( src/core/lib/iomgr/pollset_set_windows.h )
+  s.files += %w( src/core/lib/iomgr/pollset_uv.h )
   s.files += %w( src/core/lib/iomgr/pollset_windows.h )
+  s.files += %w( src/core/lib/iomgr/port.h )
   s.files += %w( src/core/lib/iomgr/resolve_address.h )
   s.files += %w( src/core/lib/iomgr/sockaddr.h )
   s.files += %w( src/core/lib/iomgr/sockaddr_posix.h )
   s.files += %w( src/core/lib/iomgr/sockaddr_utils.h )
   s.files += %w( src/core/lib/iomgr/sockaddr_windows.h )
+  s.files += %w( src/core/lib/iomgr/socket_utils.h )
   s.files += %w( src/core/lib/iomgr/socket_utils_posix.h )
   s.files += %w( src/core/lib/iomgr/socket_windows.h )
   s.files += %w( src/core/lib/iomgr/tcp_client.h )
   s.files += %w( src/core/lib/iomgr/tcp_posix.h )
   s.files += %w( src/core/lib/iomgr/tcp_server.h )
+  s.files += %w( src/core/lib/iomgr/tcp_uv.h )
   s.files += %w( src/core/lib/iomgr/tcp_windows.h )
   s.files += %w( src/core/lib/iomgr/time_averaged_stats.h )
   s.files += %w( src/core/lib/iomgr/timer.h )
+  s.files += %w( src/core/lib/iomgr/timer_generic.h )
   s.files += %w( src/core/lib/iomgr/timer_heap.h )
+  s.files += %w( src/core/lib/iomgr/timer_uv.h )
   s.files += %w( src/core/lib/iomgr/udp_server.h )
   s.files += %w( src/core/lib/iomgr/unix_sockets_posix.h )
+  s.files += %w( src/core/lib/iomgr/wakeup_fd_cv.h )
   s.files += %w( src/core/lib/iomgr/wakeup_fd_pipe.h )
   s.files += %w( src/core/lib/iomgr/wakeup_fd_posix.h )
   s.files += %w( src/core/lib/iomgr/workqueue.h )
-  s.files += %w( src/core/lib/iomgr/workqueue_posix.h )
+  s.files += %w( src/core/lib/iomgr/workqueue_uv.h )
   s.files += %w( src/core/lib/iomgr/workqueue_windows.h )
   s.files += %w( src/core/lib/json/json.h )
   s.files += %w( src/core/lib/json/json_common.h )
@@ -246,6 +253,7 @@
   s.files += %w( src/core/lib/surface/server.h )
   s.files += %w( src/core/lib/transport/byte_stream.h )
   s.files += %w( src/core/lib/transport/connectivity_state.h )
+  s.files += %w( src/core/lib/transport/mdstr_hash_table.h )
   s.files += %w( src/core/lib/transport/metadata.h )
   s.files += %w( src/core/lib/transport/metadata_batch.h )
   s.files += %w( src/core/lib/transport/static_metadata.h )
@@ -297,22 +305,23 @@
   s.files += %w( src/core/lib/tsi/ssl_types.h )
   s.files += %w( src/core/lib/tsi/transport_security.h )
   s.files += %w( src/core/lib/tsi/transport_security_interface.h )
-  s.files += %w( src/core/ext/client_config/client_channel.h )
-  s.files += %w( src/core/ext/client_config/client_channel_factory.h )
-  s.files += %w( src/core/ext/client_config/connector.h )
-  s.files += %w( src/core/ext/client_config/http_connect_handshaker.h )
-  s.files += %w( src/core/ext/client_config/initial_connect_string.h )
-  s.files += %w( src/core/ext/client_config/lb_policy.h )
-  s.files += %w( src/core/ext/client_config/lb_policy_factory.h )
-  s.files += %w( src/core/ext/client_config/lb_policy_registry.h )
-  s.files += %w( src/core/ext/client_config/parse_address.h )
-  s.files += %w( src/core/ext/client_config/resolver.h )
-  s.files += %w( src/core/ext/client_config/resolver_factory.h )
-  s.files += %w( src/core/ext/client_config/resolver_registry.h )
-  s.files += %w( src/core/ext/client_config/resolver_result.h )
-  s.files += %w( src/core/ext/client_config/subchannel.h )
-  s.files += %w( src/core/ext/client_config/subchannel_index.h )
-  s.files += %w( src/core/ext/client_config/uri_parser.h )
+  s.files += %w( src/core/ext/client_channel/client_channel.h )
+  s.files += %w( src/core/ext/client_channel/client_channel_factory.h )
+  s.files += %w( src/core/ext/client_channel/connector.h )
+  s.files += %w( src/core/ext/client_channel/http_connect_handshaker.h )
+  s.files += %w( src/core/ext/client_channel/initial_connect_string.h )
+  s.files += %w( src/core/ext/client_channel/lb_policy.h )
+  s.files += %w( src/core/ext/client_channel/lb_policy_factory.h )
+  s.files += %w( src/core/ext/client_channel/lb_policy_registry.h )
+  s.files += %w( src/core/ext/client_channel/method_config.h )
+  s.files += %w( src/core/ext/client_channel/parse_address.h )
+  s.files += %w( src/core/ext/client_channel/resolver.h )
+  s.files += %w( src/core/ext/client_channel/resolver_factory.h )
+  s.files += %w( src/core/ext/client_channel/resolver_registry.h )
+  s.files += %w( src/core/ext/client_channel/resolver_result.h )
+  s.files += %w( src/core/ext/client_channel/subchannel.h )
+  s.files += %w( src/core/ext/client_channel/subchannel_index.h )
+  s.files += %w( src/core/ext/client_channel/uri_parser.h )
   s.files += %w( src/core/ext/lb_policy/grpclb/grpclb.h )
   s.files += %w( src/core/ext/lb_policy/grpclb/load_balancer_api.h )
   s.files += %w( src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h )
@@ -354,6 +363,7 @@
   s.files += %w( src/core/lib/iomgr/combiner.c )
   s.files += %w( src/core/lib/iomgr/endpoint.c )
   s.files += %w( src/core/lib/iomgr/endpoint_pair_posix.c )
+  s.files += %w( src/core/lib/iomgr/endpoint_pair_uv.c )
   s.files += %w( src/core/lib/iomgr/endpoint_pair_windows.c )
   s.files += %w( src/core/lib/iomgr/error.c )
   s.files += %w( src/core/lib/iomgr/ev_epoll_linux.c )
@@ -365,36 +375,47 @@
   s.files += %w( src/core/lib/iomgr/iocp_windows.c )
   s.files += %w( src/core/lib/iomgr/iomgr.c )
   s.files += %w( src/core/lib/iomgr/iomgr_posix.c )
+  s.files += %w( src/core/lib/iomgr/iomgr_uv.c )
   s.files += %w( src/core/lib/iomgr/iomgr_windows.c )
   s.files += %w( src/core/lib/iomgr/load_file.c )
   s.files += %w( src/core/lib/iomgr/network_status_tracker.c )
   s.files += %w( src/core/lib/iomgr/polling_entity.c )
+  s.files += %w( src/core/lib/iomgr/pollset_set_uv.c )
   s.files += %w( src/core/lib/iomgr/pollset_set_windows.c )
+  s.files += %w( src/core/lib/iomgr/pollset_uv.c )
   s.files += %w( src/core/lib/iomgr/pollset_windows.c )
   s.files += %w( src/core/lib/iomgr/resolve_address_posix.c )
+  s.files += %w( src/core/lib/iomgr/resolve_address_uv.c )
   s.files += %w( src/core/lib/iomgr/resolve_address_windows.c )
   s.files += %w( src/core/lib/iomgr/sockaddr_utils.c )
   s.files += %w( src/core/lib/iomgr/socket_utils_common_posix.c )
   s.files += %w( src/core/lib/iomgr/socket_utils_linux.c )
   s.files += %w( src/core/lib/iomgr/socket_utils_posix.c )
+  s.files += %w( src/core/lib/iomgr/socket_utils_uv.c )
+  s.files += %w( src/core/lib/iomgr/socket_utils_windows.c )
   s.files += %w( src/core/lib/iomgr/socket_windows.c )
   s.files += %w( src/core/lib/iomgr/tcp_client_posix.c )
+  s.files += %w( src/core/lib/iomgr/tcp_client_uv.c )
   s.files += %w( src/core/lib/iomgr/tcp_client_windows.c )
   s.files += %w( src/core/lib/iomgr/tcp_posix.c )
   s.files += %w( src/core/lib/iomgr/tcp_server_posix.c )
+  s.files += %w( src/core/lib/iomgr/tcp_server_uv.c )
   s.files += %w( src/core/lib/iomgr/tcp_server_windows.c )
+  s.files += %w( src/core/lib/iomgr/tcp_uv.c )
   s.files += %w( src/core/lib/iomgr/tcp_windows.c )
   s.files += %w( src/core/lib/iomgr/time_averaged_stats.c )
-  s.files += %w( src/core/lib/iomgr/timer.c )
+  s.files += %w( src/core/lib/iomgr/timer_generic.c )
   s.files += %w( src/core/lib/iomgr/timer_heap.c )
+  s.files += %w( src/core/lib/iomgr/timer_uv.c )
   s.files += %w( src/core/lib/iomgr/udp_server.c )
   s.files += %w( src/core/lib/iomgr/unix_sockets_posix.c )
   s.files += %w( src/core/lib/iomgr/unix_sockets_posix_noop.c )
+  s.files += %w( src/core/lib/iomgr/wakeup_fd_cv.c )
   s.files += %w( src/core/lib/iomgr/wakeup_fd_eventfd.c )
   s.files += %w( src/core/lib/iomgr/wakeup_fd_nospecial.c )
   s.files += %w( src/core/lib/iomgr/wakeup_fd_pipe.c )
   s.files += %w( src/core/lib/iomgr/wakeup_fd_posix.c )
-  s.files += %w( src/core/lib/iomgr/workqueue_posix.c )
+  s.files += %w( src/core/lib/iomgr/workqueue_uv.c )
   s.files += %w( src/core/lib/iomgr/workqueue_windows.c )
   s.files += %w( src/core/lib/json/json.c )
   s.files += %w( src/core/lib/json/json_reader.c )
@@ -420,6 +441,7 @@
   s.files += %w( src/core/lib/surface/version.c )
   s.files += %w( src/core/lib/transport/byte_stream.c )
   s.files += %w( src/core/lib/transport/connectivity_state.c )
+  s.files += %w( src/core/lib/transport/mdstr_hash_table.c )
   s.files += %w( src/core/lib/transport/metadata.c )
   s.files += %w( src/core/lib/transport/metadata_batch.c )
   s.files += %w( src/core/lib/transport/static_metadata.c )
@@ -455,8 +477,7 @@
   s.files += %w( src/core/lib/security/credentials/credentials.c )
   s.files += %w( src/core/lib/security/credentials/credentials_metadata.c )
   s.files += %w( src/core/lib/security/credentials/fake/fake_credentials.c )
-  s.files += %w( src/core/lib/security/credentials/google_default/credentials_posix.c )
-  s.files += %w( src/core/lib/security/credentials/google_default/credentials_windows.c )
+  s.files += %w( src/core/lib/security/credentials/google_default/credentials_generic.c )
   s.files += %w( src/core/lib/security/credentials/google_default/google_default_credentials.c )
   s.files += %w( src/core/lib/security/credentials/iam/iam_credentials.c )
   s.files += %w( src/core/lib/security/credentials/jwt/json_token.c )
@@ -478,25 +499,26 @@
   s.files += %w( src/core/lib/tsi/ssl_transport_security.c )
   s.files += %w( src/core/lib/tsi/transport_security.c )
   s.files += %w( src/core/ext/transport/chttp2/client/secure/secure_channel_create.c )
-  s.files += %w( src/core/ext/client_config/channel_connectivity.c )
-  s.files += %w( src/core/ext/client_config/client_channel.c )
-  s.files += %w( src/core/ext/client_config/client_channel_factory.c )
-  s.files += %w( src/core/ext/client_config/client_config_plugin.c )
-  s.files += %w( src/core/ext/client_config/connector.c )
-  s.files += %w( src/core/ext/client_config/default_initial_connect_string.c )
-  s.files += %w( src/core/ext/client_config/http_connect_handshaker.c )
-  s.files += %w( src/core/ext/client_config/initial_connect_string.c )
-  s.files += %w( src/core/ext/client_config/lb_policy.c )
-  s.files += %w( src/core/ext/client_config/lb_policy_factory.c )
-  s.files += %w( src/core/ext/client_config/lb_policy_registry.c )
-  s.files += %w( src/core/ext/client_config/parse_address.c )
-  s.files += %w( src/core/ext/client_config/resolver.c )
-  s.files += %w( src/core/ext/client_config/resolver_factory.c )
-  s.files += %w( src/core/ext/client_config/resolver_registry.c )
-  s.files += %w( src/core/ext/client_config/resolver_result.c )
-  s.files += %w( src/core/ext/client_config/subchannel.c )
-  s.files += %w( src/core/ext/client_config/subchannel_index.c )
-  s.files += %w( src/core/ext/client_config/uri_parser.c )
+  s.files += %w( src/core/ext/client_channel/channel_connectivity.c )
+  s.files += %w( src/core/ext/client_channel/client_channel.c )
+  s.files += %w( src/core/ext/client_channel/client_channel_factory.c )
+  s.files += %w( src/core/ext/client_channel/client_channel_plugin.c )
+  s.files += %w( src/core/ext/client_channel/connector.c )
+  s.files += %w( src/core/ext/client_channel/default_initial_connect_string.c )
+  s.files += %w( src/core/ext/client_channel/http_connect_handshaker.c )
+  s.files += %w( src/core/ext/client_channel/initial_connect_string.c )
+  s.files += %w( src/core/ext/client_channel/lb_policy.c )
+  s.files += %w( src/core/ext/client_channel/lb_policy_factory.c )
+  s.files += %w( src/core/ext/client_channel/lb_policy_registry.c )
+  s.files += %w( src/core/ext/client_channel/method_config.c )
+  s.files += %w( src/core/ext/client_channel/parse_address.c )
+  s.files += %w( src/core/ext/client_channel/resolver.c )
+  s.files += %w( src/core/ext/client_channel/resolver_factory.c )
+  s.files += %w( src/core/ext/client_channel/resolver_registry.c )
+  s.files += %w( src/core/ext/client_channel/resolver_result.c )
+  s.files += %w( src/core/ext/client_channel/subchannel.c )
+  s.files += %w( src/core/ext/client_channel/subchannel_index.c )
+  s.files += %w( src/core/ext/client_channel/uri_parser.c )
   s.files += %w( src/core/ext/transport/chttp2/server/insecure/server_chttp2.c )
   s.files += %w( src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.c )
   s.files += %w( src/core/ext/transport/chttp2/client/insecure/channel_create.c )
diff --git a/include/grpc++/ext/reflection.grpc.pb.h b/include/grpc++/ext/reflection.grpc.pb.h
index 6e56088..151271c 100644
--- a/include/grpc++/ext/reflection.grpc.pb.h
+++ b/include/grpc++/ext/reflection.grpc.pb.h
@@ -176,6 +176,8 @@
     }
   };
   typedef Service StreamedUnaryService;
+  typedef Service SplitStreamedService;
+  typedef Service StreamedService;
 };
 
 }  // namespace v1alpha
diff --git a/include/grpc++/impl/codegen/method_handler_impl.h b/include/grpc++/impl/codegen/method_handler_impl.h
index 52f9276..bb992f0 100644
--- a/include/grpc++/impl/codegen/method_handler_impl.h
+++ b/include/grpc++/impl/codegen/method_handler_impl.h
@@ -236,6 +236,19 @@
             ServerUnaryStreamer<RequestType, ResponseType>, true>(func) {}
 };
 
+template <class RequestType, class ResponseType>
+class SplitServerStreamingHandler
+    : public TemplatedBidiStreamingHandler<
+          ServerSplitStreamer<RequestType, ResponseType>, false> {
+ public:
+  explicit SplitServerStreamingHandler(
+      std::function<Status(ServerContext*,
+                           ServerSplitStreamer<RequestType, ResponseType>*)>
+          func)
+      : TemplatedBidiStreamingHandler<
+            ServerSplitStreamer<RequestType, ResponseType>, false>(func) {}
+};
+
 // Handle unknown method by returning UNIMPLEMENTED error.
 class UnknownMethodHandler : public MethodHandler {
  public:
diff --git a/include/grpc++/impl/codegen/server_context.h b/include/grpc++/impl/codegen/server_context.h
index bce8d2c..ddf50b0 100644
--- a/include/grpc++/impl/codegen/server_context.h
+++ b/include/grpc++/impl/codegen/server_context.h
@@ -44,7 +44,6 @@
 #include <grpc++/impl/codegen/time.h>
 #include <grpc/impl/codegen/compression_types.h>
 
-struct gpr_timespec;
 struct grpc_metadata;
 struct grpc_call;
 struct census_context;
@@ -86,6 +85,7 @@
 
 namespace testing {
 class InteropServerContextInspector;
+class ServerContextTestSpouse;
 }  // namespace testing
 
 // Interface of server side rpc context.
@@ -173,6 +173,7 @@
 
  private:
   friend class ::grpc::testing::InteropServerContextInspector;
+  friend class ::grpc::testing::ServerContextTestSpouse;
   friend class ::grpc::ServerInterface;
   friend class ::grpc::Server;
   template <class W, class R>
diff --git a/include/grpc++/impl/codegen/service_type.h b/include/grpc++/impl/codegen/service_type.h
index 72b2225..bd65ea0 100644
--- a/include/grpc++/impl/codegen/service_type.h
+++ b/include/grpc++/impl/codegen/service_type.h
@@ -147,14 +147,15 @@
     methods_[index].reset();
   }
 
-  void MarkMethodStreamedUnary(int index,
-                               MethodHandler* streamed_unary_method) {
+  void MarkMethodStreamed(int index, MethodHandler* streamed_method) {
     GPR_CODEGEN_ASSERT(methods_[index] && methods_[index]->handler() &&
-                       "Cannot mark an async or generic method Streamed Unary");
-    methods_[index]->SetHandler(streamed_unary_method);
+                       "Cannot mark an async or generic method Streamed");
+    methods_[index]->SetHandler(streamed_method);
 
     // From the server's point of view, streamed unary is a special
-    // case of BIDI_STREAMING that has 1 read and 1 write, in that order.
+    // case of BIDI_STREAMING that has 1 read and 1 write, in that order,
+    // and split server-side streaming is BIDI_STREAMING with 1 read and
+    // any number of writes, in that order
     methods_[index]->SetMethodType(::grpc::RpcMethod::BIDI_STREAMING);
   }
 
diff --git a/include/grpc++/impl/codegen/sync_stream.h b/include/grpc++/impl/codegen/sync_stream.h
index e3c5a91..9a3efb5 100644
--- a/include/grpc++/impl/codegen/sync_stream.h
+++ b/include/grpc++/impl/codegen/sync_stream.h
@@ -538,7 +538,7 @@
 /// the \a NextMessageSize method to determine an upper-bound on the size of
 /// the message.
 /// A key difference relative to streaming: ServerUnaryStreamer
-///  must have exactly 1 Read and exactly 1 Write, in that order, to function
+/// must have exactly 1 Read and exactly 1 Write, in that order, to function
 /// correctly. Otherwise, the RPC is in error.
 template <class RequestType, class ResponseType>
 class ServerUnaryStreamer GRPC_FINAL
@@ -577,6 +577,43 @@
   bool write_done_;
 };
 
+/// A class to represent a flow-controlled server-side streaming call.
+/// This is something of a hybrid between server-side and bidi streaming.
+/// This is invoked through a server-side streaming call on the client side,
+/// but the server responds to it as though it were a bidi streaming call that
+/// must first have exactly 1 Read and then any number of Writes.
+template <class RequestType, class ResponseType>
+class ServerSplitStreamer GRPC_FINAL
+    : public ServerReaderWriterInterface<ResponseType, RequestType> {
+ public:
+  ServerSplitStreamer(Call* call, ServerContext* ctx)
+      : body_(call, ctx), read_done_(false) {}
+
+  void SendInitialMetadata() GRPC_OVERRIDE { body_.SendInitialMetadata(); }
+
+  bool NextMessageSize(uint32_t* sz) GRPC_OVERRIDE {
+    return body_.NextMessageSize(sz);
+  }
+
+  bool Read(RequestType* request) GRPC_OVERRIDE {
+    if (read_done_) {
+      return false;
+    }
+    read_done_ = true;
+    return body_.Read(request);
+  }
+
+  using WriterInterface<ResponseType>::Write;
+  bool Write(const ResponseType& response,
+             const WriteOptions& options) GRPC_OVERRIDE {
+    return read_done_ && body_.Write(response, options);
+  }
+
+ private:
+  internal::ServerReaderWriterBody<ResponseType, RequestType> body_;
+  bool read_done_;
+};
+
 }  // namespace grpc
 
 #endif  // GRPCXX_IMPL_CODEGEN_SYNC_STREAM_H
diff --git a/include/grpc++/security/credentials.h b/include/grpc++/security/credentials.h
index 5439244..59861b7 100644
--- a/include/grpc++/security/credentials.h
+++ b/include/grpc++/security/credentials.h
@@ -201,6 +201,9 @@
 /// Credentials for an unencrypted, unauthenticated channel
 std::shared_ptr<ChannelCredentials> InsecureChannelCredentials();
 
+/// Credentials for a channel using Cronet.
+std::shared_ptr<ChannelCredentials> CronetChannelCredentials(void* engine);
+
 // User defined metadata credentials.
 class MetadataCredentialsPlugin {
  public:
diff --git a/include/grpc++/test/server_context_test_spouse.h b/include/grpc++/test/server_context_test_spouse.h
new file mode 100644
index 0000000..b248285
--- /dev/null
+++ b/include/grpc++/test/server_context_test_spouse.h
@@ -0,0 +1,67 @@
+/*
+ *
+ * Copyright 2016, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ *     * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+#ifndef GRPCXX_TEST_SERVER_CONTEXT_TEST_SPOUSE_H
+#define GRPCXX_TEST_SERVER_CONTEXT_TEST_SPOUSE_H
+
+#include <map>
+
+#include <grpc++/server_context.h>
+
+namespace grpc {
+namespace testing {
+
+// A test-only class to access private members and methods of ServerContext.
+class ServerContextTestSpouse {
+ public:
+  explicit ServerContextTestSpouse(ServerContext* ctx) : ctx_(ctx) {}
+
+  // Inject client metadata to the ServerContext for the test. The test spouse
+  // must be alive when ServerContext::client_metadata is called.
+  void AddClientMetadata(const grpc::string& key, const grpc::string& value);
+  std::multimap<grpc::string, grpc::string> GetInitialMetadata() const {
+    return ctx_->initial_metadata_;
+  }
+  std::multimap<grpc::string, grpc::string> GetTrailingMetadata() const {
+    return ctx_->trailing_metadata_;
+  }
+
+ private:
+  ServerContext* ctx_;  // not owned
+  std::multimap<grpc::string, grpc::string> client_metadata_storage_;
+};
+
+}  // namespace testing
+}  // namespace grpc
+
+#endif  // GRPCXX_TEST_SERVER_CONTEXT_TEST_SPOUSE_H
diff --git a/include/grpc/impl/codegen/grpc_types.h b/include/grpc/impl/codegen/grpc_types.h
index ebeef03..a3fc683 100644
--- a/include/grpc/impl/codegen/grpc_types.h
+++ b/include/grpc/impl/codegen/grpc_types.h
@@ -201,6 +201,9 @@
 #define GRPC_ARG_MAX_METADATA_SIZE "grpc.max_metadata_size"
 /** If non-zero, allow the use of SO_REUSEPORT if it's available (default 1) */
 #define GRPC_ARG_ALLOW_REUSEPORT "grpc.so_reuseport"
+/** Service config data, to be passed to subchannels.
+    Not intended for external use. */
+#define GRPC_ARG_SERVICE_CONFIG "grpc.service_config"
 /** \} */
 
 /** Result of a grpc call. If the caller satisfies the prerequisites of a
diff --git a/include/grpc/impl/codegen/port_platform.h b/include/grpc/impl/codegen/port_platform.h
index 4e9be4d..34df897 100644
--- a/include/grpc/impl/codegen/port_platform.h
+++ b/include/grpc/impl/codegen/port_platform.h
@@ -90,7 +90,6 @@
 #endif
 #define GPR_PLATFORM_STRING "windows"
 #define GPR_WINDOWS 1
-#define GPR_WINSOCK_SOCKET 1
 #define GPR_WINDOWS_SUBPROCESS 1
 #define GPR_WINDOWS_ENV
 #ifdef __MSYS__
@@ -124,24 +123,14 @@
 #define GPR_GCC_TLS 1
 #define GPR_LINUX 1
 #define GPR_LINUX_LOG 1
-#define GPR_POSIX_SOCKET 1
-#define GPR_POSIX_WAKEUP_FD 1
-#define GPR_POSIX_SOCKETADDR 1
-#define GPR_POSIX_NO_SPECIAL_WAKEUP_FD 1
-#define GPR_POSIX_SOCKETUTILS 1
 #define GPR_SUPPORT_CHANNELS_FROM_FD 1
-#define GPR_HAVE_UNIX_SOCKET 1
-#define GPR_HAVE_IP_PKTINFO 1
-#define GPR_HAVE_IPV6_RECVPKTINFO 1
 #define GPR_LINUX_ENV 1
-#define GPR_POSIX_FILE 1
 #define GPR_POSIX_TMPFILE 1
 #define GPR_POSIX_STRING 1
 #define GPR_POSIX_SUBPROCESS 1
 #define GPR_POSIX_SYNC 1
 #define GPR_POSIX_TIME 1
 #define GPR_GETPID_IN_UNISTD_H 1
-#define GPR_HAVE_MSG_NOSIGNAL 1
 #ifdef _LP64
 #define GPR_ARCH_64 1
 #else /* _LP64 */
@@ -158,14 +147,7 @@
 #define GPR_CPU_POSIX 1
 #define GPR_GCC_SYNC 1
 #define GPR_GCC_TLS 1
-#define GPR_POSIX_MULTIPOLL_WITH_POLL 1
-#define GPR_POSIX_WAKEUP_FD 1
-#define GPR_LINUX_EVENTFD 1
-#define GPR_POSIX_SOCKET 1
-#define GPR_POSIX_SOCKETADDR 1
-#define GPR_POSIX_SOCKETUTILS 1
 #define GPR_POSIX_ENV 1
-#define GPR_POSIX_FILE 1
 #define GPR_POSIX_TMPFILE 1
 #define GPR_ANDROID_LOG 1
 #define GPR_POSIX_STRING 1
@@ -174,10 +156,6 @@
 #define GPR_POSIX_TIME 1
 #define GPR_GETPID_IN_UNISTD_H 1
 #define GPR_SUPPORT_CHANNELS_FROM_FD 1
-#define GPR_HAVE_MSG_NOSIGNAL 1
-#define GPR_HAVE_UNIX_SOCKET 1
-#define GPR_HAVE_IP_PKTINFO 1
-#define GPR_HAVE_IPV6_RECVPKTINFO 1
 #elif defined(__linux__)
 #define GPR_POSIX_CRASH_HANDLER 1
 #define GPR_PLATFORM_STRING "linux"
@@ -196,38 +174,14 @@
 #define GPR_GCC_TLS 1
 #define GPR_LINUX 1
 #define GPR_LINUX_LOG
-#define GPR_LINUX_MULTIPOLL_WITH_EPOLL 1
-#define GPR_POSIX_WAKEUP_FD 1
-#define GPR_POSIX_SOCKET 1
-#define GPR_POSIX_SOCKETADDR 1
 #define GPR_SUPPORT_CHANNELS_FROM_FD 1
-#define GPR_HAVE_UNIX_SOCKET 1
-#define GPR_HAVE_IP_PKTINFO 1
-#define GPR_HAVE_IPV6_RECVPKTINFO 1
-#ifdef __GLIBC_PREREQ
-#if __GLIBC_PREREQ(2, 9)
-#define GPR_LINUX_EVENTFD 1
-#define GPR_LINUX_EPOLL 1
-#endif
-#if __GLIBC_PREREQ(2, 10)
-#define GPR_LINUX_SOCKETUTILS 1
-#endif
-#endif
 #define GPR_LINUX_ENV 1
-#ifndef GPR_LINUX_EVENTFD
-#define GPR_POSIX_NO_SPECIAL_WAKEUP_FD 1
-#endif
-#ifndef GPR_LINUX_SOCKETUTILS
-#define GPR_POSIX_SOCKETUTILS
-#endif
-#define GPR_POSIX_FILE 1
 #define GPR_POSIX_TMPFILE 1
 #define GPR_POSIX_STRING 1
 #define GPR_POSIX_SUBPROCESS 1
 #define GPR_POSIX_SYNC 1
 #define GPR_POSIX_TIME 1
 #define GPR_GETPID_IN_UNISTD_H 1
-#define GPR_HAVE_MSG_NOSIGNAL 1
 #ifdef _LP64
 #define GPR_ARCH_64 1
 #else /* _LP64 */
@@ -239,7 +193,6 @@
 #ifndef _BSD_SOURCE
 #define _BSD_SOURCE
 #endif
-#define GPR_MSG_IOVLEN_TYPE int
 #if TARGET_OS_IPHONE
 #define GPR_FORBID_UNREACHABLE_CODE 1
 #define GPR_PLATFORM_STRING "ios"
@@ -261,16 +214,10 @@
 #endif
 #define GPR_POSIX_CRASH_HANDLER 1
 #endif
+#define GPR_APPLE 1
 #define GPR_GCC_ATOMIC 1
 #define GPR_POSIX_LOG 1
-#define GPR_POSIX_MULTIPOLL_WITH_POLL 1
-#define GPR_POSIX_WAKEUP_FD 1
-#define GPR_POSIX_NO_SPECIAL_WAKEUP_FD 1
-#define GPR_POSIX_SOCKET 1
-#define GPR_POSIX_SOCKETADDR 1
-#define GPR_POSIX_SOCKETUTILS 1
 #define GPR_POSIX_ENV 1
-#define GPR_POSIX_FILE 1
 #define GPR_POSIX_TMPFILE 1
 #define GPR_POSIX_STRING 1
 #define GPR_POSIX_SUBPROCESS 1
@@ -278,9 +225,6 @@
 #define GPR_POSIX_TIME 1
 #define GPR_GETPID_IN_UNISTD_H 1
 #define GPR_SUPPORT_CHANNELS_FROM_FD 1
-#define GPR_HAVE_SO_NOSIGPIPE 1
-#define GPR_HAVE_UNIX_SOCKET 1
-#define GPR_HAVE_IP_PKTINFO 1
 #ifdef _LP64
 #define GPR_ARCH_64 1
 #else /* _LP64 */
@@ -291,18 +235,12 @@
 #ifndef _BSD_SOURCE
 #define _BSD_SOURCE
 #endif
+#define GPR_FREEBSD 1
 #define GPR_CPU_POSIX 1
 #define GPR_GCC_ATOMIC 1
 #define GPR_GCC_TLS 1
 #define GPR_POSIX_LOG 1
-#define GPR_POSIX_MULTIPOLL_WITH_POLL 1
-#define GPR_POSIX_WAKEUP_FD 1
-#define GPR_POSIX_NO_SPECIAL_WAKEUP_FD 1
-#define GPR_POSIX_SOCKET 1
-#define GPR_POSIX_SOCKETADDR 1
-#define GPR_POSIX_SOCKETUTILS 1
 #define GPR_POSIX_ENV 1
-#define GPR_POSIX_FILE 1
 #define GPR_POSIX_TMPFILE 1
 #define GPR_POSIX_STRING 1
 #define GPR_POSIX_SUBPROCESS 1
@@ -310,10 +248,6 @@
 #define GPR_POSIX_TIME 1
 #define GPR_GETPID_IN_UNISTD_H 1
 #define GPR_SUPPORT_CHANNELS_FROM_FD 1
-#define GPR_HAVE_SO_NOSIGPIPE 1
-#define GPR_HAVE_UNIX_SOCKET 1
-#define GPR_HAVE_IP_PKTINFO 1
-#define GPR_HAVE_IPV6_RECVPKTINFO 1
 #ifdef _LP64
 #define GPR_ARCH_64 1
 #else /* _LP64 */
@@ -330,18 +264,12 @@
 #ifndef _GNU_SOURCE
 #define _GNU_SOURCE
 #endif
+#define GPR_NACL 1
 #define GPR_CPU_POSIX 1
 #define GPR_GCC_ATOMIC 1
 #define GPR_GCC_TLS 1
 #define GPR_POSIX_LOG 1
-#define GPR_POSIX_MULTIPOLL_WITH_POLL 1
-#define GPR_POSIX_WAKEUP_FD 1
-#define GPR_POSIX_NO_SPECIAL_WAKEUP_FD 1
-#define GPR_POSIX_SOCKET 1
-#define GPR_POSIX_SOCKETADDR 1
-#define GPR_POSIX_SOCKETUTILS 1
 #define GPR_POSIX_ENV 1
-#define GPR_POSIX_FILE 1
 #define GPR_POSIX_TMPFILE 1
 #define GPR_POSIX_STRING 1
 #define GPR_POSIX_SUBPROCESS 1
@@ -422,16 +350,6 @@
 #error Must define exactly one of GPR_CPU_LINUX, GPR_CPU_POSIX, GPR_WINDOWS, GPR_CPU_IPHONE, GPR_CPU_CUSTOM
 #endif
 
-#if defined(GPR_POSIX_MULTIPOLL_WITH_POLL) && !defined(GPR_POSIX_SOCKET)
-#error Must define GPR_POSIX_SOCKET to use GPR_POSIX_MULTIPOLL_WITH_POLL
-#endif
-
-#if defined(GPR_POSIX_SOCKET) + defined(GPR_WINSOCK_SOCKET) + \
-        defined(GPR_CUSTOM_SOCKET) !=                         \
-    1
-#error Must define exactly one of GPR_POSIX_SOCKET, GPR_WINSOCK_SOCKET, GPR_CUSTOM_SOCKET
-#endif
-
 #if defined(GPR_MSVC_TLS) + defined(GPR_GCC_TLS) + defined(GPR_PTHREAD_TLS) + \
         defined(GPR_CUSTOM_TLS) !=                                            \
     1
diff --git a/include/grpc/support/alloc.h b/include/grpc/support/alloc.h
index 327a9ff..7209bec 100644
--- a/include/grpc/support/alloc.h
+++ b/include/grpc/support/alloc.h
@@ -48,7 +48,11 @@
   void (*free_fn)(void *ptr);
 } gpr_allocation_functions;
 
-/* malloc, never returns NULL */
+/* malloc.
+ * If size==0, always returns NULL. Otherwise this function never returns NULL.
+ * The pointer returned is suitably aligned for any kind of variable it could
+ * contain.
+ */
 GPRAPI void *gpr_malloc(size_t size);
 /* free */
 GPRAPI void gpr_free(void *ptr);
diff --git a/package.xml b/package.xml
index 7bac695..5f637f8 100644
--- a/package.xml
+++ b/package.xml
@@ -214,27 +214,34 @@
     <file baseinstalldir="/" name="src/core/lib/iomgr/pollset.h" role="src" />
     <file baseinstalldir="/" name="src/core/lib/iomgr/pollset_set.h" role="src" />
     <file baseinstalldir="/" name="src/core/lib/iomgr/pollset_set_windows.h" role="src" />
+    <file baseinstalldir="/" name="src/core/lib/iomgr/pollset_uv.h" role="src" />
     <file baseinstalldir="/" name="src/core/lib/iomgr/pollset_windows.h" role="src" />
+    <file baseinstalldir="/" name="src/core/lib/iomgr/port.h" role="src" />
     <file baseinstalldir="/" name="src/core/lib/iomgr/resolve_address.h" role="src" />
     <file baseinstalldir="/" name="src/core/lib/iomgr/sockaddr.h" role="src" />
     <file baseinstalldir="/" name="src/core/lib/iomgr/sockaddr_posix.h" role="src" />
     <file baseinstalldir="/" name="src/core/lib/iomgr/sockaddr_utils.h" role="src" />
     <file baseinstalldir="/" name="src/core/lib/iomgr/sockaddr_windows.h" role="src" />
+    <file baseinstalldir="/" name="src/core/lib/iomgr/socket_utils.h" role="src" />
     <file baseinstalldir="/" name="src/core/lib/iomgr/socket_utils_posix.h" role="src" />
     <file baseinstalldir="/" name="src/core/lib/iomgr/socket_windows.h" role="src" />
     <file baseinstalldir="/" name="src/core/lib/iomgr/tcp_client.h" role="src" />
     <file baseinstalldir="/" name="src/core/lib/iomgr/tcp_posix.h" role="src" />
     <file baseinstalldir="/" name="src/core/lib/iomgr/tcp_server.h" role="src" />
+    <file baseinstalldir="/" name="src/core/lib/iomgr/tcp_uv.h" role="src" />
     <file baseinstalldir="/" name="src/core/lib/iomgr/tcp_windows.h" role="src" />
     <file baseinstalldir="/" name="src/core/lib/iomgr/time_averaged_stats.h" role="src" />
     <file baseinstalldir="/" name="src/core/lib/iomgr/timer.h" role="src" />
+    <file baseinstalldir="/" name="src/core/lib/iomgr/timer_generic.h" role="src" />
     <file baseinstalldir="/" name="src/core/lib/iomgr/timer_heap.h" role="src" />
+    <file baseinstalldir="/" name="src/core/lib/iomgr/timer_uv.h" role="src" />
     <file baseinstalldir="/" name="src/core/lib/iomgr/udp_server.h" role="src" />
     <file baseinstalldir="/" name="src/core/lib/iomgr/unix_sockets_posix.h" role="src" />
+    <file baseinstalldir="/" name="src/core/lib/iomgr/wakeup_fd_cv.h" role="src" />
     <file baseinstalldir="/" name="src/core/lib/iomgr/wakeup_fd_pipe.h" role="src" />
     <file baseinstalldir="/" name="src/core/lib/iomgr/wakeup_fd_posix.h" role="src" />
     <file baseinstalldir="/" name="src/core/lib/iomgr/workqueue.h" role="src" />
-    <file baseinstalldir="/" name="src/core/lib/iomgr/workqueue_posix.h" role="src" />
+    <file baseinstalldir="/" name="src/core/lib/iomgr/workqueue_uv.h" role="src" />
     <file baseinstalldir="/" name="src/core/lib/iomgr/workqueue_windows.h" role="src" />
     <file baseinstalldir="/" name="src/core/lib/json/json.h" role="src" />
     <file baseinstalldir="/" name="src/core/lib/json/json_common.h" role="src" />
@@ -253,6 +260,7 @@
     <file baseinstalldir="/" name="src/core/lib/surface/server.h" role="src" />
     <file baseinstalldir="/" name="src/core/lib/transport/byte_stream.h" role="src" />
     <file baseinstalldir="/" name="src/core/lib/transport/connectivity_state.h" role="src" />
+    <file baseinstalldir="/" name="src/core/lib/transport/mdstr_hash_table.h" role="src" />
     <file baseinstalldir="/" name="src/core/lib/transport/metadata.h" role="src" />
     <file baseinstalldir="/" name="src/core/lib/transport/metadata_batch.h" role="src" />
     <file baseinstalldir="/" name="src/core/lib/transport/static_metadata.h" role="src" />
@@ -304,22 +312,23 @@
     <file baseinstalldir="/" name="src/core/lib/tsi/ssl_types.h" role="src" />
     <file baseinstalldir="/" name="src/core/lib/tsi/transport_security.h" role="src" />
     <file baseinstalldir="/" name="src/core/lib/tsi/transport_security_interface.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/client_config/client_channel.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/client_config/client_channel_factory.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/client_config/connector.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/client_config/http_connect_handshaker.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/client_config/initial_connect_string.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/client_config/lb_policy.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/client_config/lb_policy_factory.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/client_config/lb_policy_registry.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/client_config/parse_address.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/client_config/resolver.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/client_config/resolver_factory.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/client_config/resolver_registry.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/client_config/resolver_result.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/client_config/subchannel.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/client_config/subchannel_index.h" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/client_config/uri_parser.h" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/client_channel/client_channel.h" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/client_channel/client_channel_factory.h" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/client_channel/connector.h" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/client_channel/http_connect_handshaker.h" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/client_channel/initial_connect_string.h" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/client_channel/lb_policy.h" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/client_channel/lb_policy_factory.h" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/client_channel/lb_policy_registry.h" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/client_channel/method_config.h" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/client_channel/parse_address.h" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/client_channel/resolver.h" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/client_channel/resolver_factory.h" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/client_channel/resolver_registry.h" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/client_channel/resolver_result.h" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/client_channel/subchannel.h" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/client_channel/subchannel_index.h" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/client_channel/uri_parser.h" role="src" />
     <file baseinstalldir="/" name="src/core/ext/lb_policy/grpclb/grpclb.h" role="src" />
     <file baseinstalldir="/" name="src/core/ext/lb_policy/grpclb/load_balancer_api.h" role="src" />
     <file baseinstalldir="/" name="src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h" role="src" />
@@ -361,6 +370,7 @@
     <file baseinstalldir="/" name="src/core/lib/iomgr/combiner.c" role="src" />
     <file baseinstalldir="/" name="src/core/lib/iomgr/endpoint.c" role="src" />
     <file baseinstalldir="/" name="src/core/lib/iomgr/endpoint_pair_posix.c" role="src" />
+    <file baseinstalldir="/" name="src/core/lib/iomgr/endpoint_pair_uv.c" role="src" />
     <file baseinstalldir="/" name="src/core/lib/iomgr/endpoint_pair_windows.c" role="src" />
     <file baseinstalldir="/" name="src/core/lib/iomgr/error.c" role="src" />
     <file baseinstalldir="/" name="src/core/lib/iomgr/ev_epoll_linux.c" role="src" />
@@ -372,36 +382,47 @@
     <file baseinstalldir="/" name="src/core/lib/iomgr/iocp_windows.c" role="src" />
     <file baseinstalldir="/" name="src/core/lib/iomgr/iomgr.c" role="src" />
     <file baseinstalldir="/" name="src/core/lib/iomgr/iomgr_posix.c" role="src" />
+    <file baseinstalldir="/" name="src/core/lib/iomgr/iomgr_uv.c" role="src" />
     <file baseinstalldir="/" name="src/core/lib/iomgr/iomgr_windows.c" role="src" />
     <file baseinstalldir="/" name="src/core/lib/iomgr/load_file.c" role="src" />
     <file baseinstalldir="/" name="src/core/lib/iomgr/network_status_tracker.c" role="src" />
     <file baseinstalldir="/" name="src/core/lib/iomgr/polling_entity.c" role="src" />
+    <file baseinstalldir="/" name="src/core/lib/iomgr/pollset_set_uv.c" role="src" />
     <file baseinstalldir="/" name="src/core/lib/iomgr/pollset_set_windows.c" role="src" />
+    <file baseinstalldir="/" name="src/core/lib/iomgr/pollset_uv.c" role="src" />
     <file baseinstalldir="/" name="src/core/lib/iomgr/pollset_windows.c" role="src" />
     <file baseinstalldir="/" name="src/core/lib/iomgr/resolve_address_posix.c" role="src" />
+    <file baseinstalldir="/" name="src/core/lib/iomgr/resolve_address_uv.c" role="src" />
     <file baseinstalldir="/" name="src/core/lib/iomgr/resolve_address_windows.c" role="src" />
     <file baseinstalldir="/" name="src/core/lib/iomgr/sockaddr_utils.c" role="src" />
     <file baseinstalldir="/" name="src/core/lib/iomgr/socket_utils_common_posix.c" role="src" />
     <file baseinstalldir="/" name="src/core/lib/iomgr/socket_utils_linux.c" role="src" />
     <file baseinstalldir="/" name="src/core/lib/iomgr/socket_utils_posix.c" role="src" />
+    <file baseinstalldir="/" name="src/core/lib/iomgr/socket_utils_uv.c" role="src" />
+    <file baseinstalldir="/" name="src/core/lib/iomgr/socket_utils_windows.c" role="src" />
     <file baseinstalldir="/" name="src/core/lib/iomgr/socket_windows.c" role="src" />
     <file baseinstalldir="/" name="src/core/lib/iomgr/tcp_client_posix.c" role="src" />
+    <file baseinstalldir="/" name="src/core/lib/iomgr/tcp_client_uv.c" role="src" />
     <file baseinstalldir="/" name="src/core/lib/iomgr/tcp_client_windows.c" role="src" />
     <file baseinstalldir="/" name="src/core/lib/iomgr/tcp_posix.c" role="src" />
     <file baseinstalldir="/" name="src/core/lib/iomgr/tcp_server_posix.c" role="src" />
+    <file baseinstalldir="/" name="src/core/lib/iomgr/tcp_server_uv.c" role="src" />
     <file baseinstalldir="/" name="src/core/lib/iomgr/tcp_server_windows.c" role="src" />
+    <file baseinstalldir="/" name="src/core/lib/iomgr/tcp_uv.c" role="src" />
     <file baseinstalldir="/" name="src/core/lib/iomgr/tcp_windows.c" role="src" />
     <file baseinstalldir="/" name="src/core/lib/iomgr/time_averaged_stats.c" role="src" />
-    <file baseinstalldir="/" name="src/core/lib/iomgr/timer.c" role="src" />
+    <file baseinstalldir="/" name="src/core/lib/iomgr/timer_generic.c" role="src" />
     <file baseinstalldir="/" name="src/core/lib/iomgr/timer_heap.c" role="src" />
+    <file baseinstalldir="/" name="src/core/lib/iomgr/timer_uv.c" role="src" />
     <file baseinstalldir="/" name="src/core/lib/iomgr/udp_server.c" role="src" />
     <file baseinstalldir="/" name="src/core/lib/iomgr/unix_sockets_posix.c" role="src" />
     <file baseinstalldir="/" name="src/core/lib/iomgr/unix_sockets_posix_noop.c" role="src" />
+    <file baseinstalldir="/" name="src/core/lib/iomgr/wakeup_fd_cv.c" role="src" />
     <file baseinstalldir="/" name="src/core/lib/iomgr/wakeup_fd_eventfd.c" role="src" />
     <file baseinstalldir="/" name="src/core/lib/iomgr/wakeup_fd_nospecial.c" role="src" />
     <file baseinstalldir="/" name="src/core/lib/iomgr/wakeup_fd_pipe.c" role="src" />
     <file baseinstalldir="/" name="src/core/lib/iomgr/wakeup_fd_posix.c" role="src" />
-    <file baseinstalldir="/" name="src/core/lib/iomgr/workqueue_posix.c" role="src" />
+    <file baseinstalldir="/" name="src/core/lib/iomgr/workqueue_uv.c" role="src" />
     <file baseinstalldir="/" name="src/core/lib/iomgr/workqueue_windows.c" role="src" />
     <file baseinstalldir="/" name="src/core/lib/json/json.c" role="src" />
     <file baseinstalldir="/" name="src/core/lib/json/json_reader.c" role="src" />
@@ -427,6 +448,7 @@
     <file baseinstalldir="/" name="src/core/lib/surface/version.c" role="src" />
     <file baseinstalldir="/" name="src/core/lib/transport/byte_stream.c" role="src" />
     <file baseinstalldir="/" name="src/core/lib/transport/connectivity_state.c" role="src" />
+    <file baseinstalldir="/" name="src/core/lib/transport/mdstr_hash_table.c" role="src" />
     <file baseinstalldir="/" name="src/core/lib/transport/metadata.c" role="src" />
     <file baseinstalldir="/" name="src/core/lib/transport/metadata_batch.c" role="src" />
     <file baseinstalldir="/" name="src/core/lib/transport/static_metadata.c" role="src" />
@@ -462,8 +484,7 @@
     <file baseinstalldir="/" name="src/core/lib/security/credentials/credentials.c" role="src" />
     <file baseinstalldir="/" name="src/core/lib/security/credentials/credentials_metadata.c" role="src" />
     <file baseinstalldir="/" name="src/core/lib/security/credentials/fake/fake_credentials.c" role="src" />
-    <file baseinstalldir="/" name="src/core/lib/security/credentials/google_default/credentials_posix.c" role="src" />
-    <file baseinstalldir="/" name="src/core/lib/security/credentials/google_default/credentials_windows.c" role="src" />
+    <file baseinstalldir="/" name="src/core/lib/security/credentials/google_default/credentials_generic.c" role="src" />
     <file baseinstalldir="/" name="src/core/lib/security/credentials/google_default/google_default_credentials.c" role="src" />
     <file baseinstalldir="/" name="src/core/lib/security/credentials/iam/iam_credentials.c" role="src" />
     <file baseinstalldir="/" name="src/core/lib/security/credentials/jwt/json_token.c" role="src" />
@@ -485,25 +506,26 @@
     <file baseinstalldir="/" name="src/core/lib/tsi/ssl_transport_security.c" role="src" />
     <file baseinstalldir="/" name="src/core/lib/tsi/transport_security.c" role="src" />
     <file baseinstalldir="/" name="src/core/ext/transport/chttp2/client/secure/secure_channel_create.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/client_config/channel_connectivity.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/client_config/client_channel.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/client_config/client_channel_factory.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/client_config/client_config_plugin.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/client_config/connector.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/client_config/default_initial_connect_string.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/client_config/http_connect_handshaker.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/client_config/initial_connect_string.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/client_config/lb_policy.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/client_config/lb_policy_factory.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/client_config/lb_policy_registry.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/client_config/parse_address.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/client_config/resolver.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/client_config/resolver_factory.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/client_config/resolver_registry.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/client_config/resolver_result.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/client_config/subchannel.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/client_config/subchannel_index.c" role="src" />
-    <file baseinstalldir="/" name="src/core/ext/client_config/uri_parser.c" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/client_channel/channel_connectivity.c" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/client_channel/client_channel.c" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/client_channel/client_channel_factory.c" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/client_channel/client_channel_plugin.c" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/client_channel/connector.c" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/client_channel/default_initial_connect_string.c" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/client_channel/http_connect_handshaker.c" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/client_channel/initial_connect_string.c" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/client_channel/lb_policy.c" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/client_channel/lb_policy_factory.c" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/client_channel/lb_policy_registry.c" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/client_channel/method_config.c" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/client_channel/parse_address.c" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/client_channel/resolver.c" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/client_channel/resolver_factory.c" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/client_channel/resolver_registry.c" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/client_channel/resolver_result.c" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/client_channel/subchannel.c" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/client_channel/subchannel_index.c" role="src" />
+    <file baseinstalldir="/" name="src/core/ext/client_channel/uri_parser.c" role="src" />
     <file baseinstalldir="/" name="src/core/ext/transport/chttp2/server/insecure/server_chttp2.c" role="src" />
     <file baseinstalldir="/" name="src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.c" role="src" />
     <file baseinstalldir="/" name="src/core/ext/transport/chttp2/client/insecure/channel_create.c" role="src" />
diff --git a/src/boringssl/gen_build_yaml.py b/src/boringssl/gen_build_yaml.py
index 20f6413..c53beb0 100755
--- a/src/boringssl/gen_build_yaml.py
+++ b/src/boringssl/gen_build_yaml.py
@@ -36,7 +36,7 @@
 sys.dont_write_bytecode = True
 
 boring_ssl_root = os.path.abspath(os.path.join(
-    os.path.dirname(sys.argv[0]), 
+    os.path.dirname(sys.argv[0]),
     '../../third_party/boringssl'))
 sys.path.append(os.path.join(boring_ssl_root, 'util'))
 
diff --git a/src/compiler/cpp_generator.cc b/src/compiler/cpp_generator.cc
index d0c35ea..fa72f9b 100644
--- a/src/compiler/cpp_generator.cc
+++ b/src/compiler/cpp_generator.cc
@@ -624,7 +624,7 @@
     printer->Indent();
     printer->Print(*vars,
                    "WithStreamedUnaryMethod_$Method$() {\n"
-                   "  ::grpc::Service::MarkMethodStreamedUnary($Idx$,\n"
+                   "  ::grpc::Service::MarkMethodStreamed($Idx$,\n"
                    "    new ::grpc::StreamedUnaryHandler< $Request$, "
                    "$Response$>(std::bind"
                    "(&WithStreamedUnaryMethod_$Method$<BaseClass>::"
@@ -656,6 +656,58 @@
   }
 }
 
+void PrintHeaderServerMethodSplitStreaming(
+    Printer *printer, const Method *method,
+    std::map<grpc::string, grpc::string> *vars) {
+  (*vars)["Method"] = method->name();
+  (*vars)["Request"] = method->input_type_name();
+  (*vars)["Response"] = method->output_type_name();
+  if (method->ServerOnlyStreaming()) {
+    printer->Print(*vars, "template <class BaseClass>\n");
+    printer->Print(*vars,
+                   "class WithSplitStreamingMethod_$Method$ : "
+                   "public BaseClass {\n");
+    printer->Print(
+        " private:\n"
+        "  void BaseClassMustBeDerivedFromService(const Service *service) "
+        "{}\n");
+    printer->Print(" public:\n");
+    printer->Indent();
+    printer->Print(*vars,
+                   "WithSplitStreamingMethod_$Method$() {\n"
+                   "  ::grpc::Service::MarkMethodStreamed($Idx$,\n"
+                   "    new ::grpc::SplitServerStreamingHandler< $Request$, "
+                   "$Response$>(std::bind"
+                   "(&WithSplitStreamingMethod_$Method$<BaseClass>::"
+                   "Streamed$Method$, this, std::placeholders::_1, "
+                   "std::placeholders::_2)));\n"
+                   "}\n");
+    printer->Print(*vars,
+                   "~WithSplitStreamingMethod_$Method$() GRPC_OVERRIDE {\n"
+                   "  BaseClassMustBeDerivedFromService(this);\n"
+                   "}\n");
+    printer->Print(
+        *vars,
+        "// disable regular version of this method\n"
+        "::grpc::Status $Method$("
+        "::grpc::ServerContext* context, const $Request$* request, "
+        "::grpc::ServerWriter< $Response$>* writer) GRPC_FINAL GRPC_OVERRIDE "
+        "{\n"
+        "  abort();\n"
+        "  return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, \"\");\n"
+        "}\n");
+    printer->Print(*vars,
+                   "// replace default version of method with split streamed\n"
+                   "virtual ::grpc::Status Streamed$Method$("
+                   "::grpc::ServerContext* context, "
+                   "::grpc::ServerSplitStreamer< "
+                   "$Request$,$Response$>* server_split_streamer)"
+                   " = 0;\n");
+    printer->Outdent();
+    printer->Print(*vars, "};\n");
+  }
+}
+
 void PrintHeaderServerMethodGeneric(
     Printer *printer, const Method *method,
     std::map<grpc::string, grpc::string> *vars) {
@@ -844,6 +896,48 @@
   }
   printer->Print(" StreamedUnaryService;\n");
 
+  // Server side - controlled server-side streaming
+  for (int i = 0; i < service->method_count(); ++i) {
+    (*vars)["Idx"] = as_string(i);
+    PrintHeaderServerMethodSplitStreaming(printer, service->method(i).get(),
+                                          vars);
+  }
+
+  printer->Print("typedef ");
+  for (int i = 0; i < service->method_count(); ++i) {
+    (*vars)["method_name"] = service->method(i).get()->name();
+    if (service->method(i)->ServerOnlyStreaming()) {
+      printer->Print(*vars, "WithSplitStreamingMethod_$method_name$<");
+    }
+  }
+  printer->Print("Service");
+  for (int i = 0; i < service->method_count(); ++i) {
+    if (service->method(i)->ServerOnlyStreaming()) {
+      printer->Print(" >");
+    }
+  }
+  printer->Print(" SplitStreamedService;\n");
+
+  // Server side - typedef for controlled both unary and server-side streaming
+  printer->Print("typedef ");
+  for (int i = 0; i < service->method_count(); ++i) {
+    (*vars)["method_name"] = service->method(i).get()->name();
+    if (service->method(i)->ServerOnlyStreaming()) {
+      printer->Print(*vars, "WithSplitStreamingMethod_$method_name$<");
+    }
+    if (service->method(i)->NoStreaming()) {
+      printer->Print(*vars, "WithStreamedUnaryMethod_$method_name$<");
+    }
+  }
+  printer->Print("Service");
+  for (int i = 0; i < service->method_count(); ++i) {
+    if (service->method(i)->NoStreaming() ||
+        service->method(i)->ServerOnlyStreaming()) {
+      printer->Print(" >");
+    }
+  }
+  printer->Print(" StreamedService;\n");
+
   printer->Outdent();
   printer->Print("};\n");
   printer->Print(service->GetTrailingComments().c_str());
diff --git a/src/compiler/csharp_generator.cc b/src/compiler/csharp_generator.cc
index 591e5ae..4815703 100644
--- a/src/compiler/csharp_generator.cc
+++ b/src/compiler/csharp_generator.cc
@@ -495,6 +495,9 @@
 
   // override NewInstance method
   out->Print(
+      "/// <summary>Creates a new instance of client from given "
+      "<c>ClientBaseConfiguration</c>.</summary>\n");
+  out->Print(
       "protected override $name$ NewInstance(ClientBaseConfiguration "
       "configuration)\n",
       "name", GetClientClassName(service));
diff --git a/src/core/ext/census/grpc_filter.c b/src/core/ext/census/grpc_filter.c
index 9dacc17..a4cf6f3 100644
--- a/src/core/ext/census/grpc_filter.c
+++ b/src/core/ext/census/grpc_filter.c
@@ -133,7 +133,7 @@
   call_data *d = elem->call_data;
   GPR_ASSERT(d != NULL);
   memset(d, 0, sizeof(*d));
-  d->start_ts = gpr_now(GPR_CLOCK_REALTIME);
+  d->start_ts = args->start_time;
   return GRPC_ERROR_NONE;
 }
 
@@ -152,7 +152,7 @@
   call_data *d = elem->call_data;
   GPR_ASSERT(d != NULL);
   memset(d, 0, sizeof(*d));
-  d->start_ts = gpr_now(GPR_CLOCK_REALTIME);
+  d->start_ts = args->start_time;
   /* TODO(hongyu): call census_tracing_start_op here. */
   grpc_closure_init(&d->finish_recv, server_on_done_recv, elem);
   return GRPC_ERROR_NONE;
diff --git a/src/core/ext/client_config/README.md b/src/core/ext/client_channel/README.md
similarity index 100%
rename from src/core/ext/client_config/README.md
rename to src/core/ext/client_channel/README.md
diff --git a/src/core/ext/client_config/channel_connectivity.c b/src/core/ext/client_channel/channel_connectivity.c
similarity index 98%
rename from src/core/ext/client_config/channel_connectivity.c
rename to src/core/ext/client_channel/channel_connectivity.c
index ce3c13a..9797e66 100644
--- a/src/core/ext/client_config/channel_connectivity.c
+++ b/src/core/ext/client_channel/channel_connectivity.c
@@ -36,7 +36,7 @@
 #include <grpc/support/alloc.h>
 #include <grpc/support/log.h>
 
-#include "src/core/ext/client_config/client_channel.h"
+#include "src/core/ext/client_channel/client_channel.h"
 #include "src/core/lib/iomgr/timer.h"
 #include "src/core/lib/surface/api_trace.h"
 #include "src/core/lib/surface/completion_queue.h"
diff --git a/src/core/ext/client_config/client_channel.c b/src/core/ext/client_channel/client_channel.c
similarity index 77%
rename from src/core/ext/client_config/client_channel.c
rename to src/core/ext/client_channel/client_channel.c
index a6056c3..55bb877 100644
--- a/src/core/ext/client_config/client_channel.c
+++ b/src/core/ext/client_channel/client_channel.c
@@ -31,7 +31,7 @@
  *
  */
 
-#include "src/core/ext/client_config/client_channel.h"
+#include "src/core/ext/client_channel/client_channel.h"
 
 #include <stdbool.h>
 #include <stdio.h>
@@ -42,8 +42,9 @@
 #include <grpc/support/sync.h>
 #include <grpc/support/useful.h>
 
-#include "src/core/ext/client_config/lb_policy_registry.h"
-#include "src/core/ext/client_config/subchannel.h"
+#include "src/core/ext/client_channel/lb_policy_registry.h"
+#include "src/core/ext/client_channel/method_config.h"
+#include "src/core/ext/client_channel/subchannel.h"
 #include "src/core/lib/channel/channel_args.h"
 #include "src/core/lib/channel/connected_channel.h"
 #include "src/core/lib/channel/deadline_filter.h"
@@ -53,10 +54,61 @@
 #include "src/core/lib/support/string.h"
 #include "src/core/lib/surface/channel.h"
 #include "src/core/lib/transport/connectivity_state.h"
+#include "src/core/lib/transport/metadata.h"
+#include "src/core/lib/transport/metadata_batch.h"
+#include "src/core/lib/transport/static_metadata.h"
 
 /* Client channel implementation */
 
 /*************************************************************************
+ * METHOD-CONFIG TABLE
+ */
+
+typedef enum {
+  WAIT_FOR_READY_UNSET,
+  WAIT_FOR_READY_FALSE,
+  WAIT_FOR_READY_TRUE
+} wait_for_ready_value;
+
+typedef struct method_parameters {
+  gpr_timespec timeout;
+  wait_for_ready_value wait_for_ready;
+} method_parameters;
+
+static void *method_parameters_copy(void *value) {
+  void *new_value = gpr_malloc(sizeof(method_parameters));
+  memcpy(new_value, value, sizeof(method_parameters));
+  return new_value;
+}
+
+static int method_parameters_cmp(void *value1, void *value2) {
+  const method_parameters *v1 = value1;
+  const method_parameters *v2 = value2;
+  const int retval = gpr_time_cmp(v1->timeout, v2->timeout);
+  if (retval != 0) return retval;
+  if (v1->wait_for_ready > v2->wait_for_ready) return 1;
+  if (v1->wait_for_ready < v2->wait_for_ready) return -1;
+  return 0;
+}
+
+static const grpc_mdstr_hash_table_vtable method_parameters_vtable = {
+    gpr_free, method_parameters_copy, method_parameters_cmp};
+
+static void *method_config_convert_value(
+    const grpc_method_config *method_config) {
+  method_parameters *value = gpr_malloc(sizeof(method_parameters));
+  const gpr_timespec *timeout = grpc_method_config_get_timeout(method_config);
+  value->timeout = timeout != NULL ? *timeout : gpr_time_0(GPR_TIMESPAN);
+  const bool *wait_for_ready =
+      grpc_method_config_get_wait_for_ready(method_config);
+  value->wait_for_ready =
+      wait_for_ready == NULL
+          ? WAIT_FOR_READY_UNSET
+          : (wait_for_ready ? WAIT_FOR_READY_TRUE : WAIT_FOR_READY_FALSE);
+  return value;
+}
+
+/*************************************************************************
  * CHANNEL-WIDE FUNCTIONS
  */
 
@@ -68,12 +120,13 @@
   /** client channel factory */
   grpc_client_channel_factory *client_channel_factory;
 
-  /** mutex protecting client configuration, including all
-      variables below in this data structure */
+  /** mutex protecting all variables below in this data structure */
   gpr_mu mu;
-  /** currently active load balancer - guarded by mu */
+  /** currently active load balancer */
   grpc_lb_policy *lb_policy;
-  /** incoming resolver result - set by resolver.next(), guarded by mu */
+  /** maps method names to method_parameters structs */
+  grpc_mdstr_hash_table *method_params_table;
+  /** incoming resolver result - set by resolver.next() */
   grpc_resolver_result *resolver_result;
   /** a list of closures that are all waiting for config to come in */
   grpc_closure_list waiting_for_config_closures;
@@ -172,6 +225,7 @@
   channel_data *chand = arg;
   grpc_lb_policy *lb_policy = NULL;
   grpc_lb_policy *old_lb_policy;
+  grpc_mdstr_hash_table *method_params_table = NULL;
   grpc_connectivity_state state = GRPC_CHANNEL_TRANSIENT_FAILURE;
   bool exit_idle = false;
   grpc_error *state_error = GRPC_ERROR_CREATE("No load balancing policy");
@@ -220,6 +274,14 @@
       state =
           grpc_lb_policy_check_connectivity(exec_ctx, lb_policy, &state_error);
     }
+    const grpc_arg *channel_arg = grpc_channel_args_find(
+        lb_policy_args.additional_args, GRPC_ARG_SERVICE_CONFIG);
+    if (channel_arg != NULL) {
+      GPR_ASSERT(channel_arg->type == GRPC_ARG_POINTER);
+      method_params_table = grpc_method_config_table_convert(
+          (grpc_method_config_table *)channel_arg->value.pointer.p,
+          method_config_convert_value, &method_parameters_vtable);
+    }
     grpc_resolver_result_unref(exec_ctx, chand->resolver_result);
     chand->resolver_result = NULL;
   }
@@ -232,6 +294,10 @@
   gpr_mu_lock(&chand->mu);
   old_lb_policy = chand->lb_policy;
   chand->lb_policy = lb_policy;
+  if (chand->method_params_table != NULL) {
+    grpc_mdstr_hash_table_unref(chand->method_params_table);
+  }
+  chand->method_params_table = method_params_table;
   if (lb_policy != NULL) {
     grpc_exec_ctx_enqueue_list(exec_ctx, &chand->waiting_for_config_closures,
                                NULL);
@@ -392,6 +458,9 @@
                                      chand->interested_parties);
     GRPC_LB_POLICY_UNREF(exec_ctx, chand->lb_policy, "channel");
   }
+  if (chand->method_params_table != NULL) {
+    grpc_mdstr_hash_table_unref(chand->method_params_table);
+  }
   grpc_connectivity_state_destroy(exec_ctx, &chand->state_tracker);
   grpc_pollset_set_destroy(chand->interested_parties);
   gpr_mu_destroy(&chand->mu);
@@ -424,7 +493,12 @@
   // stack and each has its own mutex.  If/when we have time, find a way
   // to avoid this without breaking the grpc_deadline_state abstraction.
   grpc_deadline_state deadline_state;
+
+  grpc_mdstr *path;  // Request path.
+  gpr_timespec call_start_time;
   gpr_timespec deadline;
+  wait_for_ready_value wait_for_ready_from_service_config;
+  grpc_closure read_service_config;
 
   grpc_error *cancel_error;
 
@@ -513,10 +587,14 @@
 
 static void subchannel_ready(grpc_exec_ctx *exec_ctx, void *arg,
                              grpc_error *error) {
-  call_data *calld = arg;
+  grpc_call_element *elem = arg;
+  call_data *calld = elem->call_data;
+  channel_data *chand = elem->channel_data;
   gpr_mu_lock(&calld->mu);
   GPR_ASSERT(calld->creation_phase ==
              GRPC_SUBCHANNEL_CALL_HOLDER_PICKING_SUBCHANNEL);
+  grpc_polling_entity_del_from_pollset_set(exec_ctx, calld->pollent,
+                                           chand->interested_parties);
   calld->creation_phase = GRPC_SUBCHANNEL_CALL_HOLDER_NOT_CREATING;
   if (calld->connected_subchannel == NULL) {
     gpr_atm_no_barrier_store(&calld->subchannel_call, 1);
@@ -528,10 +606,11 @@
                 GRPC_ERROR_CREATE_REFERENCING(
                     "Cancelled before creating subchannel", &error, 1));
   } else {
+    /* Create call on subchannel. */
     grpc_subchannel_call *subchannel_call = NULL;
     grpc_error *new_error = grpc_connected_subchannel_create_call(
-        exec_ctx, calld->connected_subchannel, calld->pollent, calld->deadline,
-        &subchannel_call);
+        exec_ctx, calld->connected_subchannel, calld->pollent, calld->path,
+        calld->deadline, &subchannel_call);
     if (new_error != GRPC_ERROR_NONE) {
       new_error = grpc_error_add_child(new_error, error);
       subchannel_call = CANCELLED_CALL;
@@ -564,6 +643,9 @@
   grpc_closure closure;
 } continue_picking_args;
 
+/** Return true if subchannel is available immediately (in which case on_ready
+    should not be called), or false otherwise (in which case on_ready should be
+    called when the subchannel is available). */
 static bool pick_subchannel(grpc_exec_ctx *exec_ctx, grpc_call_element *elem,
                             grpc_metadata_batch *initial_metadata,
                             uint32_t initial_metadata_flags,
@@ -577,11 +659,15 @@
     /* cancelled, do nothing */
   } else if (error != GRPC_ERROR_NONE) {
     grpc_exec_ctx_sched(exec_ctx, cpa->on_ready, GRPC_ERROR_REF(error), NULL);
-  } else if (pick_subchannel(exec_ctx, cpa->elem, cpa->initial_metadata,
-                             cpa->initial_metadata_flags,
-                             cpa->connected_subchannel, cpa->on_ready,
-                             GRPC_ERROR_NONE)) {
-    grpc_exec_ctx_sched(exec_ctx, cpa->on_ready, GRPC_ERROR_NONE, NULL);
+  } else {
+    call_data *calld = cpa->elem->call_data;
+    gpr_mu_lock(&calld->mu);
+    if (pick_subchannel(exec_ctx, cpa->elem, cpa->initial_metadata,
+                        cpa->initial_metadata_flags, cpa->connected_subchannel,
+                        cpa->on_ready, GRPC_ERROR_NONE)) {
+      grpc_exec_ctx_sched(exec_ctx, cpa->on_ready, GRPC_ERROR_NONE, NULL);
+    }
+    gpr_mu_unlock(&calld->mu);
   }
   gpr_free(cpa);
 }
@@ -624,18 +710,33 @@
   GPR_ASSERT(error == GRPC_ERROR_NONE);
   if (chand->lb_policy != NULL) {
     grpc_lb_policy *lb_policy = chand->lb_policy;
-    int r;
     GRPC_LB_POLICY_REF(lb_policy, "pick_subchannel");
     gpr_mu_unlock(&chand->mu);
+    // If the application explicitly set wait_for_ready, use that.
+    // Otherwise, if the service config specified a value for this
+    // method, use that.
+    const bool wait_for_ready_set_from_api =
+        initial_metadata_flags &
+        GRPC_INITIAL_METADATA_WAIT_FOR_READY_EXPLICITLY_SET;
+    const bool wait_for_ready_set_from_service_config =
+        calld->wait_for_ready_from_service_config != WAIT_FOR_READY_UNSET;
+    if (!wait_for_ready_set_from_api &&
+        wait_for_ready_set_from_service_config) {
+      if (calld->wait_for_ready_from_service_config == WAIT_FOR_READY_TRUE) {
+        initial_metadata_flags |= GRPC_INITIAL_METADATA_WAIT_FOR_READY;
+      } else {
+        initial_metadata_flags &= ~GRPC_INITIAL_METADATA_WAIT_FOR_READY;
+      }
+    }
     // TODO(dgq): make this deadline configurable somehow.
     const grpc_lb_policy_pick_args inputs = {
-        calld->pollent, initial_metadata, initial_metadata_flags,
-        &calld->lb_token_mdelem, gpr_inf_future(GPR_CLOCK_MONOTONIC)};
-    r = grpc_lb_policy_pick(exec_ctx, lb_policy, &inputs, connected_subchannel,
-                            NULL, on_ready);
+        initial_metadata, initial_metadata_flags, &calld->lb_token_mdelem,
+        gpr_inf_future(GPR_CLOCK_MONOTONIC)};
+    const bool result = grpc_lb_policy_pick(
+        exec_ctx, lb_policy, &inputs, connected_subchannel, NULL, on_ready);
     GRPC_LB_POLICY_UNREF(exec_ctx, lb_policy, "pick_subchannel");
     GPR_TIMER_END("pick_subchannel", 0);
-    return r;
+    return result;
   }
   if (chand->resolver != NULL && !chand->started_resolving) {
     chand->started_resolving = true;
@@ -672,6 +773,7 @@
                                          grpc_call_element *elem,
                                          grpc_transport_stream_op *op) {
   call_data *calld = elem->call_data;
+  channel_data *chand = elem->channel_data;
   GRPC_CALL_LOG_OP(GPR_INFO, elem, op);
   grpc_deadline_state_client_start_transport_stream_op(exec_ctx, elem, op);
   /* try to (atomically) get the call */
@@ -739,14 +841,20 @@
       calld->connected_subchannel == NULL &&
       op->send_initial_metadata != NULL) {
     calld->creation_phase = GRPC_SUBCHANNEL_CALL_HOLDER_PICKING_SUBCHANNEL;
-    grpc_closure_init(&calld->next_step, subchannel_ready, calld);
+    grpc_closure_init(&calld->next_step, subchannel_ready, elem);
     GRPC_CALL_STACK_REF(calld->owning_call, "pick_subchannel");
+    /* If a subchannel is not available immediately, the polling entity from
+       call_data should be provided to channel_data's interested_parties, so
+       that IO of the lb_policy and resolver could be done under it. */
     if (pick_subchannel(exec_ctx, elem, op->send_initial_metadata,
                         op->send_initial_metadata_flags,
                         &calld->connected_subchannel, &calld->next_step,
                         GRPC_ERROR_NONE)) {
       calld->creation_phase = GRPC_SUBCHANNEL_CALL_HOLDER_NOT_CREATING;
       GRPC_CALL_STACK_UNREF(exec_ctx, calld->owning_call, "pick_subchannel");
+    } else {
+      grpc_polling_entity_add_to_pollset_set(exec_ctx, calld->pollent,
+                                             chand->interested_parties);
     }
   }
   /* if we've got a subchannel, then let's ask it to create a call */
@@ -754,8 +862,8 @@
       calld->connected_subchannel != NULL) {
     grpc_subchannel_call *subchannel_call = NULL;
     grpc_error *error = grpc_connected_subchannel_create_call(
-        exec_ctx, calld->connected_subchannel, calld->pollent, calld->deadline,
-        &subchannel_call);
+        exec_ctx, calld->connected_subchannel, calld->pollent, calld->path,
+        calld->deadline, &subchannel_call);
     if (error != GRPC_ERROR_NONE) {
       subchannel_call = CANCELLED_CALL;
       fail_locked(exec_ctx, calld, GRPC_ERROR_REF(error));
@@ -772,13 +880,67 @@
   GPR_TIMER_END("cc_start_transport_stream_op", 0);
 }
 
+// Gets data from the service config.  Invoked when the resolver returns
+// its initial result.
+static void read_service_config(grpc_exec_ctx *exec_ctx, void *arg,
+                                grpc_error *error) {
+  grpc_call_element *elem = arg;
+  channel_data *chand = elem->channel_data;
+  call_data *calld = elem->call_data;
+  // If this is an error, there's no point in looking at the service config.
+  if (error == GRPC_ERROR_NONE) {
+    // Get the method config table from channel data.
+    gpr_mu_lock(&chand->mu);
+    grpc_mdstr_hash_table *method_params_table = NULL;
+    if (chand->method_params_table != NULL) {
+      method_params_table =
+          grpc_mdstr_hash_table_ref(chand->method_params_table);
+    }
+    gpr_mu_unlock(&chand->mu);
+    // If the method config table was present, use it.
+    if (method_params_table != NULL) {
+      const method_parameters *method_params =
+          grpc_method_config_table_get(method_params_table, calld->path);
+      if (method_params != NULL) {
+        const bool have_method_timeout =
+            gpr_time_cmp(method_params->timeout, gpr_time_0(GPR_TIMESPAN)) != 0;
+        if (have_method_timeout ||
+            method_params->wait_for_ready != WAIT_FOR_READY_UNSET) {
+          gpr_mu_lock(&calld->mu);
+          if (have_method_timeout) {
+            const gpr_timespec per_method_deadline =
+                gpr_time_add(calld->call_start_time, method_params->timeout);
+            if (gpr_time_cmp(per_method_deadline, calld->deadline) < 0) {
+              calld->deadline = per_method_deadline;
+              // Reset deadline timer.
+              grpc_deadline_state_reset(exec_ctx, elem, calld->deadline);
+            }
+          }
+          if (method_params->wait_for_ready != WAIT_FOR_READY_UNSET) {
+            calld->wait_for_ready_from_service_config =
+                method_params->wait_for_ready;
+          }
+          gpr_mu_unlock(&calld->mu);
+        }
+      }
+      grpc_mdstr_hash_table_unref(method_params_table);
+    }
+  }
+  GRPC_CALL_STACK_UNREF(exec_ctx, calld->owning_call, "read_service_config");
+}
+
 /* Constructor for call_data */
 static grpc_error *cc_init_call_elem(grpc_exec_ctx *exec_ctx,
                                      grpc_call_element *elem,
                                      grpc_call_element_args *args) {
+  channel_data *chand = elem->channel_data;
   call_data *calld = elem->call_data;
-  grpc_deadline_state_init(exec_ctx, elem, args);
-  calld->deadline = args->deadline;
+  // Initialize data members.
+  grpc_deadline_state_init(exec_ctx, elem, args->call_stack);
+  calld->path = GRPC_MDSTR_REF(args->path);
+  calld->call_start_time = args->start_time;
+  calld->deadline = gpr_convert_clock_type(args->deadline, GPR_CLOCK_MONOTONIC);
+  calld->wait_for_ready_from_service_config = WAIT_FOR_READY_UNSET;
   calld->cancel_error = GRPC_ERROR_NONE;
   gpr_atm_rel_store(&calld->subchannel_call, 0);
   gpr_mu_init(&calld->mu);
@@ -789,6 +951,51 @@
   calld->creation_phase = GRPC_SUBCHANNEL_CALL_HOLDER_NOT_CREATING;
   calld->owning_call = args->call_stack;
   calld->pollent = NULL;
+  // If the resolver has already returned results, then we can access
+  // the service config parameters immediately.  Otherwise, we need to
+  // defer that work until the resolver returns an initial result.
+  // TODO(roth): This code is almost but not quite identical to the code
+  // in read_service_config() above.  It would be nice to find a way to
+  // combine them, to avoid having to maintain it twice.
+  gpr_mu_lock(&chand->mu);
+  if (chand->lb_policy != NULL) {
+    // We already have a resolver result, so check for service config.
+    if (chand->method_params_table != NULL) {
+      grpc_mdstr_hash_table *method_params_table =
+          grpc_mdstr_hash_table_ref(chand->method_params_table);
+      gpr_mu_unlock(&chand->mu);
+      method_parameters *method_params =
+          grpc_method_config_table_get(method_params_table, args->path);
+      if (method_params != NULL) {
+        if (gpr_time_cmp(method_params->timeout,
+                         gpr_time_0(GPR_CLOCK_MONOTONIC)) != 0) {
+          gpr_timespec per_method_deadline =
+              gpr_time_add(calld->call_start_time, method_params->timeout);
+          calld->deadline = gpr_time_min(calld->deadline, per_method_deadline);
+        }
+        if (method_params->wait_for_ready != WAIT_FOR_READY_UNSET) {
+          calld->wait_for_ready_from_service_config =
+              method_params->wait_for_ready;
+        }
+      }
+      grpc_mdstr_hash_table_unref(method_params_table);
+    } else {
+      gpr_mu_unlock(&chand->mu);
+    }
+  } else {
+    // We don't yet have a resolver result, so register a callback to
+    // get the service config data once the resolver returns.
+    // Take a reference to the call stack to be owned by the callback.
+    GRPC_CALL_STACK_REF(calld->owning_call, "read_service_config");
+    grpc_closure_init(&calld->read_service_config, read_service_config, elem);
+    grpc_closure_list_append(&chand->waiting_for_config_closures,
+                             &calld->read_service_config, GRPC_ERROR_NONE);
+    gpr_mu_unlock(&chand->mu);
+  }
+  // Start the deadline timer with the current deadline value.  If we
+  // do not yet have service config data, then the timer may be reset
+  // later.
+  grpc_deadline_state_start(exec_ctx, elem, calld->deadline);
   return GRPC_ERROR_NONE;
 }
 
@@ -799,6 +1006,7 @@
                                  void *and_free_memory) {
   call_data *calld = elem->call_data;
   grpc_deadline_state_destroy(exec_ctx, elem);
+  GRPC_MDSTR_UNREF(calld->path);
   GRPC_ERROR_UNREF(calld->cancel_error);
   grpc_subchannel_call *call = GET_CALL(calld);
   if (call != NULL && call != CANCELLED_CALL) {
diff --git a/src/core/ext/client_config/client_channel.h b/src/core/ext/client_channel/client_channel.h
similarity index 89%
rename from src/core/ext/client_config/client_channel.h
rename to src/core/ext/client_channel/client_channel.h
index abb5ac4..ab5a84f 100644
--- a/src/core/ext/client_config/client_channel.h
+++ b/src/core/ext/client_channel/client_channel.h
@@ -31,11 +31,11 @@
  *
  */
 
-#ifndef GRPC_CORE_EXT_CLIENT_CONFIG_CLIENT_CHANNEL_H
-#define GRPC_CORE_EXT_CLIENT_CONFIG_CLIENT_CHANNEL_H
+#ifndef GRPC_CORE_EXT_CLIENT_CHANNEL_CLIENT_CHANNEL_H
+#define GRPC_CORE_EXT_CLIENT_CHANNEL_CLIENT_CHANNEL_H
 
-#include "src/core/ext/client_config/client_channel_factory.h"
-#include "src/core/ext/client_config/resolver.h"
+#include "src/core/ext/client_channel/client_channel_factory.h"
+#include "src/core/ext/client_channel/resolver.h"
 #include "src/core/lib/channel/channel_stack.h"
 
 /* A client channel is a channel that begins disconnected, and can connect
@@ -61,4 +61,4 @@
     grpc_exec_ctx *exec_ctx, grpc_channel_element *elem, grpc_pollset *pollset,
     grpc_connectivity_state *state, grpc_closure *on_complete);
 
-#endif /* GRPC_CORE_EXT_CLIENT_CONFIG_CLIENT_CHANNEL_H */
+#endif /* GRPC_CORE_EXT_CLIENT_CHANNEL_CLIENT_CHANNEL_H */
diff --git a/src/core/ext/client_config/client_channel_factory.c b/src/core/ext/client_channel/client_channel_factory.c
similarity index 97%
rename from src/core/ext/client_config/client_channel_factory.c
rename to src/core/ext/client_channel/client_channel_factory.c
index 71c64c0..db1cc90 100644
--- a/src/core/ext/client_config/client_channel_factory.c
+++ b/src/core/ext/client_channel/client_channel_factory.c
@@ -31,7 +31,7 @@
  *
  */
 
-#include "src/core/ext/client_config/client_channel_factory.h"
+#include "src/core/ext/client_channel/client_channel_factory.h"
 
 void grpc_client_channel_factory_ref(grpc_client_channel_factory* factory) {
   factory->vtable->ref(factory);
diff --git a/src/core/ext/client_config/client_channel_factory.h b/src/core/ext/client_channel/client_channel_factory.h
similarity index 93%
rename from src/core/ext/client_config/client_channel_factory.h
rename to src/core/ext/client_channel/client_channel_factory.h
index 1241b9b..28828c2 100644
--- a/src/core/ext/client_config/client_channel_factory.h
+++ b/src/core/ext/client_channel/client_channel_factory.h
@@ -31,12 +31,12 @@
  *
  */
 
-#ifndef GRPC_CORE_EXT_CLIENT_CONFIG_CLIENT_CHANNEL_FACTORY_H
-#define GRPC_CORE_EXT_CLIENT_CONFIG_CLIENT_CHANNEL_FACTORY_H
+#ifndef GRPC_CORE_EXT_CLIENT_CHANNEL_CLIENT_CHANNEL_FACTORY_H
+#define GRPC_CORE_EXT_CLIENT_CHANNEL_CLIENT_CHANNEL_FACTORY_H
 
 #include <grpc/impl/codegen/grpc_types.h>
 
-#include "src/core/ext/client_config/subchannel.h"
+#include "src/core/ext/client_channel/subchannel.h"
 #include "src/core/lib/channel/channel_stack.h"
 
 typedef struct grpc_client_channel_factory grpc_client_channel_factory;
@@ -82,4 +82,4 @@
     grpc_exec_ctx *exec_ctx, grpc_client_channel_factory *factory,
     const char *target, grpc_client_channel_type type, grpc_channel_args *args);
 
-#endif /* GRPC_CORE_EXT_CLIENT_CONFIG_CLIENT_CHANNEL_FACTORY_H */
+#endif /* GRPC_CORE_EXT_CLIENT_CHANNEL_CLIENT_CHANNEL_FACTORY_H */
diff --git a/src/core/ext/client_config/client_config_plugin.c b/src/core/ext/client_channel/client_channel_plugin.c
similarity index 91%
rename from src/core/ext/client_config/client_config_plugin.c
rename to src/core/ext/client_channel/client_channel_plugin.c
index dc3629d..a3e5079 100644
--- a/src/core/ext/client_config/client_config_plugin.c
+++ b/src/core/ext/client_channel/client_channel_plugin.c
@@ -37,10 +37,10 @@
 
 #include <grpc/support/alloc.h>
 
-#include "src/core/ext/client_config/client_channel.h"
-#include "src/core/ext/client_config/lb_policy_registry.h"
-#include "src/core/ext/client_config/resolver_registry.h"
-#include "src/core/ext/client_config/subchannel_index.h"
+#include "src/core/ext/client_channel/client_channel.h"
+#include "src/core/ext/client_channel/lb_policy_registry.h"
+#include "src/core/ext/client_channel/resolver_registry.h"
+#include "src/core/ext/client_channel/subchannel_index.h"
 #include "src/core/lib/surface/channel_init.h"
 
 static bool append_filter(grpc_channel_stack_builder *builder, void *arg) {
@@ -73,7 +73,7 @@
   return true;
 }
 
-void grpc_client_config_init(void) {
+void grpc_client_channel_init(void) {
   grpc_lb_policy_registry_init();
   grpc_resolver_registry_init();
   grpc_subchannel_index_init();
@@ -83,7 +83,7 @@
                                    (void *)&grpc_client_channel_filter);
 }
 
-void grpc_client_config_shutdown(void) {
+void grpc_client_channel_shutdown(void) {
   grpc_subchannel_index_shutdown();
   grpc_channel_init_shutdown();
   grpc_resolver_registry_shutdown();
diff --git a/src/core/ext/client_config/connector.c b/src/core/ext/client_channel/connector.c
similarity index 97%
rename from src/core/ext/client_config/connector.c
rename to src/core/ext/client_channel/connector.c
index 5b629ed..0582e5b 100644
--- a/src/core/ext/client_config/connector.c
+++ b/src/core/ext/client_channel/connector.c
@@ -31,7 +31,7 @@
  *
  */
 
-#include "src/core/ext/client_config/connector.h"
+#include "src/core/ext/client_channel/connector.h"
 
 grpc_connector* grpc_connector_ref(grpc_connector* connector) {
   connector->vtable->ref(connector);
diff --git a/src/core/ext/client_config/connector.h b/src/core/ext/client_channel/connector.h
similarity index 93%
rename from src/core/ext/client_config/connector.h
rename to src/core/ext/client_channel/connector.h
index ea9d237..ed7d545 100644
--- a/src/core/ext/client_config/connector.h
+++ b/src/core/ext/client_channel/connector.h
@@ -31,11 +31,11 @@
  *
  */
 
-#ifndef GRPC_CORE_EXT_CLIENT_CONFIG_CONNECTOR_H
-#define GRPC_CORE_EXT_CLIENT_CONFIG_CONNECTOR_H
+#ifndef GRPC_CORE_EXT_CLIENT_CHANNEL_CONNECTOR_H
+#define GRPC_CORE_EXT_CLIENT_CHANNEL_CONNECTOR_H
 
 #include "src/core/lib/channel/channel_stack.h"
-#include "src/core/lib/iomgr/sockaddr.h"
+#include "src/core/lib/iomgr/resolve_address.h"
 #include "src/core/lib/transport/transport.h"
 
 typedef struct grpc_connector grpc_connector;
@@ -49,7 +49,7 @@
   /** set of pollsets interested in this connection */
   grpc_pollset_set *interested_parties;
   /** address to connect to */
-  const struct sockaddr *addr;
+  const grpc_resolved_address *addr;
   size_t addr_len;
   /** initial connect string to send */
   gpr_slice initial_connect_string;
@@ -89,4 +89,4 @@
 void grpc_connector_shutdown(grpc_exec_ctx *exec_ctx,
                              grpc_connector *connector);
 
-#endif /* GRPC_CORE_EXT_CLIENT_CONFIG_CONNECTOR_H */
+#endif /* GRPC_CORE_EXT_CLIENT_CHANNEL_CONNECTOR_H */
diff --git a/src/core/ext/client_config/default_initial_connect_string.c b/src/core/ext/client_channel/default_initial_connect_string.c
similarity index 90%
rename from src/core/ext/client_config/default_initial_connect_string.c
rename to src/core/ext/client_channel/default_initial_connect_string.c
index a70da4a..0b25137 100644
--- a/src/core/ext/client_config/default_initial_connect_string.c
+++ b/src/core/ext/client_channel/default_initial_connect_string.c
@@ -32,8 +32,7 @@
  */
 
 #include <grpc/support/slice.h>
-#include "src/core/lib/iomgr/sockaddr.h"
+#include "src/core/lib/iomgr/resolve_address.h"
 
-void grpc_set_default_initial_connect_string(struct sockaddr **addr,
-                                             size_t *addr_len,
+void grpc_set_default_initial_connect_string(grpc_resolved_address **addr,
                                              gpr_slice *initial_str) {}
diff --git a/src/core/ext/client_config/http_connect_handshaker.c b/src/core/ext/client_channel/http_connect_handshaker.c
similarity index 98%
rename from src/core/ext/client_config/http_connect_handshaker.c
rename to src/core/ext/client_channel/http_connect_handshaker.c
index fda1df1..ea2cbbd 100644
--- a/src/core/ext/client_config/http_connect_handshaker.c
+++ b/src/core/ext/client_channel/http_connect_handshaker.c
@@ -31,7 +31,7 @@
  *
  */
 
-#include "src/core/ext/client_config/http_connect_handshaker.h"
+#include "src/core/ext/client_channel/http_connect_handshaker.h"
 
 #include <string.h>
 
@@ -40,7 +40,7 @@
 #include <grpc/support/slice_buffer.h>
 #include <grpc/support/string_util.h>
 
-#include "src/core/ext/client_config/uri_parser.h"
+#include "src/core/ext/client_channel/uri_parser.h"
 #include "src/core/lib/http/format_request.h"
 #include "src/core/lib/http/parser.h"
 #include "src/core/lib/iomgr/timer.h"
diff --git a/src/core/ext/client_config/http_connect_handshaker.h b/src/core/ext/client_channel/http_connect_handshaker.h
similarity index 90%
rename from src/core/ext/client_config/http_connect_handshaker.h
rename to src/core/ext/client_channel/http_connect_handshaker.h
index 1fc3948..c689df2 100644
--- a/src/core/ext/client_config/http_connect_handshaker.h
+++ b/src/core/ext/client_channel/http_connect_handshaker.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef GRPC_CORE_EXT_CLIENT_CONFIG_HTTP_CONNECT_HANDSHAKER_H
-#define GRPC_CORE_EXT_CLIENT_CONFIG_HTTP_CONNECT_HANDSHAKER_H
+#ifndef GRPC_CORE_EXT_CLIENT_CHANNEL_HTTP_CONNECT_HANDSHAKER_H
+#define GRPC_CORE_EXT_CLIENT_CHANNEL_HTTP_CONNECT_HANDSHAKER_H
 
 #include "src/core/lib/channel/handshaker.h"
 
@@ -44,4 +44,4 @@
 /// Caller takes ownership of result.
 char* grpc_get_http_proxy_server();
 
-#endif /* GRPC_CORE_EXT_CLIENT_CONFIG_HTTP_CONNECT_HANDSHAKER_H */
+#endif /* GRPC_CORE_EXT_CLIENT_CHANNEL_HTTP_CONNECT_HANDSHAKER_H */
diff --git a/src/core/ext/client_config/initial_connect_string.c b/src/core/ext/client_channel/initial_connect_string.c
similarity index 81%
rename from src/core/ext/client_config/initial_connect_string.c
rename to src/core/ext/client_channel/initial_connect_string.c
index 41580d2..fb1493d 100644
--- a/src/core/ext/client_config/initial_connect_string.c
+++ b/src/core/ext/client_channel/initial_connect_string.c
@@ -31,13 +31,12 @@
  *
  */
 
-#include "src/core/ext/client_config/initial_connect_string.h"
+#include "src/core/ext/client_channel/initial_connect_string.h"
 
 #include <stddef.h>
 
-extern void grpc_set_default_initial_connect_string(struct sockaddr **addr,
-                                                    size_t *addr_len,
-                                                    gpr_slice *initial_str);
+extern void grpc_set_default_initial_connect_string(
+    grpc_resolved_address **addr, gpr_slice *initial_str);
 
 static grpc_set_initial_connect_string_func g_set_initial_connect_string_func =
     grpc_set_default_initial_connect_string;
@@ -47,7 +46,7 @@
   g_set_initial_connect_string_func = func;
 }
 
-void grpc_set_initial_connect_string(struct sockaddr **addr, size_t *addr_len,
+void grpc_set_initial_connect_string(grpc_resolved_address **addr,
                                      gpr_slice *initial_str) {
-  g_set_initial_connect_string_func(addr, addr_len, initial_str);
+  g_set_initial_connect_string_func(addr, initial_str);
 }
diff --git a/src/core/ext/client_config/initial_connect_string.h b/src/core/ext/client_channel/initial_connect_string.h
similarity index 77%
rename from src/core/ext/client_config/initial_connect_string.h
rename to src/core/ext/client_channel/initial_connect_string.h
index 06f0767..68adb03 100644
--- a/src/core/ext/client_config/initial_connect_string.h
+++ b/src/core/ext/client_channel/initial_connect_string.h
@@ -31,20 +31,20 @@
  *
  */
 
-#ifndef GRPC_CORE_EXT_CLIENT_CONFIG_INITIAL_CONNECT_STRING_H
-#define GRPC_CORE_EXT_CLIENT_CONFIG_INITIAL_CONNECT_STRING_H
+#ifndef GRPC_CORE_EXT_CLIENT_CHANNEL_INITIAL_CONNECT_STRING_H
+#define GRPC_CORE_EXT_CLIENT_CHANNEL_INITIAL_CONNECT_STRING_H
 
 #include <grpc/support/slice.h>
-#include "src/core/lib/iomgr/sockaddr.h"
 
-typedef void (*grpc_set_initial_connect_string_func)(struct sockaddr **addr,
-                                                     size_t *addr_len,
-                                                     gpr_slice *initial_str);
+#include "src/core/lib/iomgr/resolve_address.h"
+
+typedef void (*grpc_set_initial_connect_string_func)(
+    grpc_resolved_address **addr, gpr_slice *initial_str);
 void grpc_test_set_initial_connect_string_function(
     grpc_set_initial_connect_string_func func);
 
 /** Set a string to be sent once connected. Optionally reset addr. */
-void grpc_set_initial_connect_string(struct sockaddr **addr, size_t *addr_len,
+void grpc_set_initial_connect_string(grpc_resolved_address **addr,
                                      gpr_slice *connect_string);
 
-#endif /* GRPC_CORE_EXT_CLIENT_CONFIG_INITIAL_CONNECT_STRING_H */
+#endif /* GRPC_CORE_EXT_CLIENT_CHANNEL_INITIAL_CONNECT_STRING_H */
diff --git a/src/core/ext/client_config/lb_policy.c b/src/core/ext/client_channel/lb_policy.c
similarity index 98%
rename from src/core/ext/client_config/lb_policy.c
rename to src/core/ext/client_channel/lb_policy.c
index 4639127..45ee72e 100644
--- a/src/core/ext/client_config/lb_policy.c
+++ b/src/core/ext/client_channel/lb_policy.c
@@ -31,7 +31,7 @@
  *
  */
 
-#include "src/core/ext/client_config/lb_policy.h"
+#include "src/core/ext/client_channel/lb_policy.h"
 
 #define WEAK_REF_BITS 16
 
diff --git a/src/core/ext/client_config/lb_policy.h b/src/core/ext/client_channel/lb_policy.h
similarity index 96%
rename from src/core/ext/client_config/lb_policy.h
rename to src/core/ext/client_channel/lb_policy.h
index 110d08f..54ad779 100644
--- a/src/core/ext/client_config/lb_policy.h
+++ b/src/core/ext/client_channel/lb_policy.h
@@ -31,10 +31,10 @@
  *
  */
 
-#ifndef GRPC_CORE_EXT_CLIENT_CONFIG_LB_POLICY_H
-#define GRPC_CORE_EXT_CLIENT_CONFIG_LB_POLICY_H
+#ifndef GRPC_CORE_EXT_CLIENT_CHANNEL_LB_POLICY_H
+#define GRPC_CORE_EXT_CLIENT_CHANNEL_LB_POLICY_H
 
-#include "src/core/ext/client_config/subchannel.h"
+#include "src/core/ext/client_channel/subchannel.h"
 #include "src/core/lib/iomgr/polling_entity.h"
 #include "src/core/lib/transport/connectivity_state.h"
 
@@ -55,8 +55,6 @@
 
 /** Extra arguments for an LB pick */
 typedef struct grpc_lb_policy_pick_args {
-  /** Parties interested in the pick's progress */
-  grpc_polling_entity *pollent;
   /** Initial metadata associated with the picking call. */
   grpc_metadata_batch *initial_metadata;
   /** Bitmask used for selective cancelling. See \a
@@ -153,7 +151,8 @@
     once the pick is complete with its error argument set to indicate
     success or failure.
 
-    Any I/O should be done under \a pick_args->pollent. */
+    Any IO should be done under the \a interested_parties \a grpc_pollset_set
+    in the \a grpc_lb_policy struct. */
 int grpc_lb_policy_pick(grpc_exec_ctx *exec_ctx, grpc_lb_policy *policy,
                         const grpc_lb_policy_pick_args *pick_args,
                         grpc_connected_subchannel **target, void **user_data,
@@ -194,4 +193,4 @@
     grpc_exec_ctx *exec_ctx, grpc_lb_policy *policy,
     grpc_error **connectivity_error);
 
-#endif /* GRPC_CORE_EXT_CLIENT_CONFIG_LB_POLICY_H */
+#endif /* GRPC_CORE_EXT_CLIENT_CHANNEL_LB_POLICY_H */
diff --git a/src/core/ext/client_config/lb_policy_factory.c b/src/core/ext/client_channel/lb_policy_factory.c
similarity index 98%
rename from src/core/ext/client_config/lb_policy_factory.c
rename to src/core/ext/client_channel/lb_policy_factory.c
index c17af91..45753e6 100644
--- a/src/core/ext/client_config/lb_policy_factory.c
+++ b/src/core/ext/client_channel/lb_policy_factory.c
@@ -36,7 +36,7 @@
 #include <grpc/support/alloc.h>
 #include <grpc/support/string_util.h>
 
-#include "src/core/ext/client_config/lb_policy_factory.h"
+#include "src/core/ext/client_channel/lb_policy_factory.h"
 
 grpc_lb_addresses* grpc_lb_addresses_create(size_t num_addresses) {
   grpc_lb_addresses* addresses = gpr_malloc(sizeof(grpc_lb_addresses));
diff --git a/src/core/ext/client_config/lb_policy_factory.h b/src/core/ext/client_channel/lb_policy_factory.h
similarity index 94%
rename from src/core/ext/client_config/lb_policy_factory.h
rename to src/core/ext/client_channel/lb_policy_factory.h
index ade5570..3e53972 100644
--- a/src/core/ext/client_config/lb_policy_factory.h
+++ b/src/core/ext/client_channel/lb_policy_factory.h
@@ -31,11 +31,11 @@
  *
  */
 
-#ifndef GRPC_CORE_EXT_CLIENT_CONFIG_LB_POLICY_FACTORY_H
-#define GRPC_CORE_EXT_CLIENT_CONFIG_LB_POLICY_FACTORY_H
+#ifndef GRPC_CORE_EXT_CLIENT_CHANNEL_LB_POLICY_FACTORY_H
+#define GRPC_CORE_EXT_CLIENT_CHANNEL_LB_POLICY_FACTORY_H
 
-#include "src/core/ext/client_config/client_channel_factory.h"
-#include "src/core/ext/client_config/lb_policy.h"
+#include "src/core/ext/client_channel/client_channel_factory.h"
+#include "src/core/ext/client_channel/lb_policy.h"
 
 #include "src/core/lib/iomgr/exec_ctx.h"
 #include "src/core/lib/iomgr/resolve_address.h"
@@ -118,4 +118,4 @@
     grpc_exec_ctx *exec_ctx, grpc_lb_policy_factory *factory,
     grpc_lb_policy_args *args);
 
-#endif /* GRPC_CORE_EXT_CLIENT_CONFIG_LB_POLICY_FACTORY_H */
+#endif /* GRPC_CORE_EXT_CLIENT_CHANNEL_LB_POLICY_FACTORY_H */
diff --git a/src/core/ext/client_config/lb_policy_registry.c b/src/core/ext/client_channel/lb_policy_registry.c
similarity index 97%
rename from src/core/ext/client_config/lb_policy_registry.c
rename to src/core/ext/client_channel/lb_policy_registry.c
index a23643e..f46a721 100644
--- a/src/core/ext/client_config/lb_policy_registry.c
+++ b/src/core/ext/client_channel/lb_policy_registry.c
@@ -31,7 +31,7 @@
  *
  */
 
-#include "src/core/ext/client_config/lb_policy_registry.h"
+#include "src/core/ext/client_channel/lb_policy_registry.h"
 
 #include <string.h>
 
diff --git a/src/core/ext/client_config/lb_policy_registry.h b/src/core/ext/client_channel/lb_policy_registry.h
similarity index 90%
rename from src/core/ext/client_config/lb_policy_registry.h
rename to src/core/ext/client_channel/lb_policy_registry.h
index 92f38d6..21c468e 100644
--- a/src/core/ext/client_config/lb_policy_registry.h
+++ b/src/core/ext/client_channel/lb_policy_registry.h
@@ -31,10 +31,10 @@
  *
  */
 
-#ifndef GRPC_CORE_EXT_CLIENT_CONFIG_LB_POLICY_REGISTRY_H
-#define GRPC_CORE_EXT_CLIENT_CONFIG_LB_POLICY_REGISTRY_H
+#ifndef GRPC_CORE_EXT_CLIENT_CHANNEL_LB_POLICY_REGISTRY_H
+#define GRPC_CORE_EXT_CLIENT_CHANNEL_LB_POLICY_REGISTRY_H
 
-#include "src/core/ext/client_config/lb_policy_factory.h"
+#include "src/core/ext/client_channel/lb_policy_factory.h"
 #include "src/core/lib/iomgr/exec_ctx.h"
 
 /** Initialize the registry and set \a default_factory as the factory to be
@@ -52,4 +52,4 @@
 grpc_lb_policy *grpc_lb_policy_create(grpc_exec_ctx *exec_ctx, const char *name,
                                       grpc_lb_policy_args *args);
 
-#endif /* GRPC_CORE_EXT_CLIENT_CONFIG_LB_POLICY_REGISTRY_H */
+#endif /* GRPC_CORE_EXT_CLIENT_CHANNEL_LB_POLICY_REGISTRY_H */
diff --git a/src/core/ext/client_channel/method_config.c b/src/core/ext/client_channel/method_config.c
new file mode 100644
index 0000000..4313ad5
--- /dev/null
+++ b/src/core/ext/client_channel/method_config.c
@@ -0,0 +1,340 @@
+//
+// Copyright 2015, Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+//
+
+#include "src/core/ext/client_channel/method_config.h"
+
+#include <string.h>
+
+#include <grpc/impl/codegen/grpc_types.h>
+#include <grpc/support/alloc.h>
+#include <grpc/support/log.h>
+#include <grpc/support/string_util.h>
+#include <grpc/support/time.h>
+
+#include "src/core/lib/transport/mdstr_hash_table.h"
+#include "src/core/lib/transport/metadata.h"
+
+//
+// grpc_method_config
+//
+
+// bool vtable
+
+static void* bool_copy(void* valuep) {
+  bool value = *(bool*)valuep;
+  bool* new_value = gpr_malloc(sizeof(bool));
+  *new_value = value;
+  return new_value;
+}
+
+static int bool_cmp(void* v1, void* v2) {
+  bool b1 = *(bool*)v1;
+  bool b2 = *(bool*)v2;
+  if (!b1 && b2) return -1;
+  if (b1 && !b2) return 1;
+  return 0;
+}
+
+static grpc_mdstr_hash_table_vtable bool_vtable = {gpr_free, bool_copy,
+                                                   bool_cmp};
+
+// timespec vtable
+
+static void* timespec_copy(void* valuep) {
+  gpr_timespec value = *(gpr_timespec*)valuep;
+  gpr_timespec* new_value = gpr_malloc(sizeof(gpr_timespec));
+  *new_value = value;
+  return new_value;
+}
+
+static int timespec_cmp(void* v1, void* v2) {
+  return gpr_time_cmp(*(gpr_timespec*)v1, *(gpr_timespec*)v2);
+}
+
+static grpc_mdstr_hash_table_vtable timespec_vtable = {gpr_free, timespec_copy,
+                                                       timespec_cmp};
+
+// int32 vtable
+
+static void* int32_copy(void* valuep) {
+  int32_t value = *(int32_t*)valuep;
+  int32_t* new_value = gpr_malloc(sizeof(int32_t));
+  *new_value = value;
+  return new_value;
+}
+
+static int int32_cmp(void* v1, void* v2) {
+  int32_t i1 = *(int32_t*)v1;
+  int32_t i2 = *(int32_t*)v2;
+  if (i1 < i2) return -1;
+  if (i1 > i2) return 1;
+  return 0;
+}
+
+static grpc_mdstr_hash_table_vtable int32_vtable = {gpr_free, int32_copy,
+                                                    int32_cmp};
+
+// Hash table keys.
+#define GRPC_METHOD_CONFIG_WAIT_FOR_READY "grpc.wait_for_ready"  // bool
+#define GRPC_METHOD_CONFIG_TIMEOUT "grpc.timeout"                // gpr_timespec
+#define GRPC_METHOD_CONFIG_MAX_REQUEST_MESSAGE_BYTES \
+  "grpc.max_request_message_bytes"  // int32
+#define GRPC_METHOD_CONFIG_MAX_RESPONSE_MESSAGE_BYTES \
+  "grpc.max_response_message_bytes"  // int32
+
+struct grpc_method_config {
+  grpc_mdstr_hash_table* table;
+  grpc_mdstr* wait_for_ready_key;
+  grpc_mdstr* timeout_key;
+  grpc_mdstr* max_request_message_bytes_key;
+  grpc_mdstr* max_response_message_bytes_key;
+};
+
+grpc_method_config* grpc_method_config_create(
+    bool* wait_for_ready, gpr_timespec* timeout,
+    int32_t* max_request_message_bytes, int32_t* max_response_message_bytes) {
+  grpc_method_config* method_config = gpr_malloc(sizeof(grpc_method_config));
+  memset(method_config, 0, sizeof(grpc_method_config));
+  method_config->wait_for_ready_key =
+      grpc_mdstr_from_string(GRPC_METHOD_CONFIG_WAIT_FOR_READY);
+  method_config->timeout_key =
+      grpc_mdstr_from_string(GRPC_METHOD_CONFIG_TIMEOUT);
+  method_config->max_request_message_bytes_key =
+      grpc_mdstr_from_string(GRPC_METHOD_CONFIG_MAX_REQUEST_MESSAGE_BYTES);
+  method_config->max_response_message_bytes_key =
+      grpc_mdstr_from_string(GRPC_METHOD_CONFIG_MAX_RESPONSE_MESSAGE_BYTES);
+  grpc_mdstr_hash_table_entry entries[4];
+  size_t num_entries = 0;
+  if (wait_for_ready != NULL) {
+    entries[num_entries].key = method_config->wait_for_ready_key;
+    entries[num_entries].value = wait_for_ready;
+    entries[num_entries].vtable = &bool_vtable;
+    ++num_entries;
+  }
+  if (timeout != NULL) {
+    entries[num_entries].key = method_config->timeout_key;
+    entries[num_entries].value = timeout;
+    entries[num_entries].vtable = &timespec_vtable;
+    ++num_entries;
+  }
+  if (max_request_message_bytes != NULL) {
+    entries[num_entries].key = method_config->max_request_message_bytes_key;
+    entries[num_entries].value = max_request_message_bytes;
+    entries[num_entries].vtable = &int32_vtable;
+    ++num_entries;
+  }
+  if (max_response_message_bytes != NULL) {
+    entries[num_entries].key = method_config->max_response_message_bytes_key;
+    entries[num_entries].value = max_response_message_bytes;
+    entries[num_entries].vtable = &int32_vtable;
+    ++num_entries;
+  }
+  method_config->table = grpc_mdstr_hash_table_create(num_entries, entries);
+  return method_config;
+}
+
+grpc_method_config* grpc_method_config_ref(grpc_method_config* method_config) {
+  grpc_mdstr_hash_table_ref(method_config->table);
+  return method_config;
+}
+
+void grpc_method_config_unref(grpc_method_config* method_config) {
+  if (grpc_mdstr_hash_table_unref(method_config->table)) {
+    GRPC_MDSTR_UNREF(method_config->wait_for_ready_key);
+    GRPC_MDSTR_UNREF(method_config->timeout_key);
+    GRPC_MDSTR_UNREF(method_config->max_request_message_bytes_key);
+    GRPC_MDSTR_UNREF(method_config->max_response_message_bytes_key);
+    gpr_free(method_config);
+  }
+}
+
+int grpc_method_config_cmp(const grpc_method_config* method_config1,
+                           const grpc_method_config* method_config2) {
+  return grpc_mdstr_hash_table_cmp(method_config1->table,
+                                   method_config2->table);
+}
+
+const bool* grpc_method_config_get_wait_for_ready(
+    const grpc_method_config* method_config) {
+  return grpc_mdstr_hash_table_get(method_config->table,
+                                   method_config->wait_for_ready_key);
+}
+
+const gpr_timespec* grpc_method_config_get_timeout(
+    const grpc_method_config* method_config) {
+  return grpc_mdstr_hash_table_get(method_config->table,
+                                   method_config->timeout_key);
+}
+
+const int32_t* grpc_method_config_get_max_request_message_bytes(
+    const grpc_method_config* method_config) {
+  return grpc_mdstr_hash_table_get(
+      method_config->table, method_config->max_request_message_bytes_key);
+}
+
+const int32_t* grpc_method_config_get_max_response_message_bytes(
+    const grpc_method_config* method_config) {
+  return grpc_mdstr_hash_table_get(
+      method_config->table, method_config->max_response_message_bytes_key);
+}
+
+//
+// grpc_method_config_table
+//
+
+static void method_config_unref(void* valuep) {
+  grpc_method_config_unref(valuep);
+}
+
+static void* method_config_ref(void* valuep) {
+  return grpc_method_config_ref(valuep);
+}
+
+static int method_config_cmp(void* valuep1, void* valuep2) {
+  return grpc_method_config_cmp(valuep1, valuep2);
+}
+
+static const grpc_mdstr_hash_table_vtable method_config_table_vtable = {
+    method_config_unref, method_config_ref, method_config_cmp};
+
+grpc_method_config_table* grpc_method_config_table_create(
+    size_t num_entries, grpc_method_config_table_entry* entries) {
+  grpc_mdstr_hash_table_entry* hash_table_entries =
+      gpr_malloc(sizeof(grpc_mdstr_hash_table_entry) * num_entries);
+  for (size_t i = 0; i < num_entries; ++i) {
+    hash_table_entries[i].key = entries[i].method_name;
+    hash_table_entries[i].value = entries[i].method_config;
+    hash_table_entries[i].vtable = &method_config_table_vtable;
+  }
+  grpc_method_config_table* method_config_table =
+      grpc_mdstr_hash_table_create(num_entries, hash_table_entries);
+  gpr_free(hash_table_entries);
+  return method_config_table;
+}
+
+grpc_method_config_table* grpc_method_config_table_ref(
+    grpc_method_config_table* table) {
+  return grpc_mdstr_hash_table_ref(table);
+}
+
+void grpc_method_config_table_unref(grpc_method_config_table* table) {
+  grpc_mdstr_hash_table_unref(table);
+}
+
+int grpc_method_config_table_cmp(const grpc_method_config_table* table1,
+                                 const grpc_method_config_table* table2) {
+  return grpc_mdstr_hash_table_cmp(table1, table2);
+}
+
+void* grpc_method_config_table_get(const grpc_mdstr_hash_table* table,
+                                   const grpc_mdstr* path) {
+  void* value = grpc_mdstr_hash_table_get(table, path);
+  // If we didn't find a match for the path, try looking for a wildcard
+  // entry (i.e., change "/service/method" to "/service/*").
+  if (value == NULL) {
+    const char* path_str = grpc_mdstr_as_c_string(path);
+    const char* sep = strrchr(path_str, '/') + 1;
+    const size_t len = (size_t)(sep - path_str);
+    char* buf = gpr_malloc(len + 2);  // '*' and NUL
+    memcpy(buf, path_str, len);
+    buf[len] = '*';
+    buf[len + 1] = '\0';
+    grpc_mdstr* wildcard_path = grpc_mdstr_from_string(buf);
+    gpr_free(buf);
+    value = grpc_mdstr_hash_table_get(table, wildcard_path);
+    GRPC_MDSTR_UNREF(wildcard_path);
+  }
+  return value;
+}
+
+static void* copy_arg(void* p) { return grpc_method_config_table_ref(p); }
+
+static void destroy_arg(void* p) { grpc_method_config_table_unref(p); }
+
+static int cmp_arg(void* p1, void* p2) {
+  return grpc_method_config_table_cmp(p1, p2);
+}
+
+static grpc_arg_pointer_vtable arg_vtable = {copy_arg, destroy_arg, cmp_arg};
+
+grpc_arg grpc_method_config_table_create_channel_arg(
+    grpc_method_config_table* table) {
+  grpc_arg arg;
+  arg.type = GRPC_ARG_POINTER;
+  arg.key = GRPC_ARG_SERVICE_CONFIG;
+  arg.value.pointer.p = table;
+  arg.value.pointer.vtable = &arg_vtable;
+  return arg;
+}
+
+// State used by convert_entry() below.
+typedef struct conversion_state {
+  void* (*convert_value)(const grpc_method_config* method_config);
+  const grpc_mdstr_hash_table_vtable* vtable;
+  size_t num_entries;
+  grpc_mdstr_hash_table_entry* entries;
+} conversion_state;
+
+// A function to be passed to grpc_mdstr_hash_table_iterate() to create
+// a copy of the entries.
+static void convert_entry(const grpc_mdstr_hash_table_entry* entry,
+                          void* user_data) {
+  conversion_state* state = user_data;
+  state->entries[state->num_entries].key = GRPC_MDSTR_REF(entry->key);
+  state->entries[state->num_entries].value = state->convert_value(entry->value);
+  state->entries[state->num_entries].vtable = state->vtable;
+  ++state->num_entries;
+}
+
+grpc_mdstr_hash_table* grpc_method_config_table_convert(
+    const grpc_method_config_table* table,
+    void* (*convert_value)(const grpc_method_config* method_config),
+    const grpc_mdstr_hash_table_vtable* vtable) {
+  // Create an array of the entries in the table with converted values.
+  conversion_state state;
+  state.convert_value = convert_value;
+  state.vtable = vtable;
+  state.num_entries = 0;
+  state.entries = gpr_malloc(sizeof(grpc_mdstr_hash_table_entry) *
+                             grpc_mdstr_hash_table_num_entries(table));
+  grpc_mdstr_hash_table_iterate(table, convert_entry, &state);
+  // Create a new table based on the array we just constructed.
+  grpc_mdstr_hash_table* new_table =
+      grpc_mdstr_hash_table_create(state.num_entries, state.entries);
+  // Clean up the array.
+  for (size_t i = 0; i < state.num_entries; ++i) {
+    GRPC_MDSTR_UNREF(state.entries[i].key);
+    vtable->destroy_value(state.entries[i].value);
+  }
+  gpr_free(state.entries);
+  // Return the new table.
+  return new_table;
+}
diff --git a/src/core/ext/client_channel/method_config.h b/src/core/ext/client_channel/method_config.h
new file mode 100644
index 0000000..4cbeee5
--- /dev/null
+++ b/src/core/ext/client_channel/method_config.h
@@ -0,0 +1,136 @@
+//
+// Copyright 2016, Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+//
+
+#ifndef GRPC_CORE_EXT_CLIENT_CHANNEL_METHOD_CONFIG_H
+#define GRPC_CORE_EXT_CLIENT_CHANNEL_METHOD_CONFIG_H
+
+#include <stdbool.h>
+
+#include <grpc/impl/codegen/gpr_types.h>
+#include <grpc/impl/codegen/grpc_types.h>
+
+#include "src/core/lib/transport/mdstr_hash_table.h"
+#include "src/core/lib/transport/metadata.h"
+
+/// Per-method configuration.
+typedef struct grpc_method_config grpc_method_config;
+
+/// Creates a grpc_method_config with the specified parameters.
+/// Any parameter may be NULL to indicate that the value is unset.
+///
+/// \a wait_for_ready indicates whether the client should wait until the
+/// request deadline for the channel to become ready, even if there is a
+/// temporary failure before the deadline while attempting to connect.
+///
+/// \a timeout indicates the timeout for calls.
+///
+/// \a max_request_message_bytes and \a max_response_message_bytes
+/// indicate the maximum sizes of the request (checked when sending) and
+/// response (checked when receiving) messages.
+grpc_method_config* grpc_method_config_create(
+    bool* wait_for_ready, gpr_timespec* timeout,
+    int32_t* max_request_message_bytes, int32_t* max_response_message_bytes);
+
+grpc_method_config* grpc_method_config_ref(grpc_method_config* method_config);
+void grpc_method_config_unref(grpc_method_config* method_config);
+
+/// Compares two grpc_method_configs.
+/// The sort order is stable but undefined.
+int grpc_method_config_cmp(const grpc_method_config* method_config1,
+                           const grpc_method_config* method_config2);
+
+/// These methods return NULL if the requested field is unset.
+/// The caller does NOT take ownership of the result.
+const bool* grpc_method_config_get_wait_for_ready(
+    const grpc_method_config* method_config);
+const gpr_timespec* grpc_method_config_get_timeout(
+    const grpc_method_config* method_config);
+const int32_t* grpc_method_config_get_max_request_message_bytes(
+    const grpc_method_config* method_config);
+const int32_t* grpc_method_config_get_max_response_message_bytes(
+    const grpc_method_config* method_config);
+
+/// A table of method configs.
+typedef grpc_mdstr_hash_table grpc_method_config_table;
+
+typedef struct grpc_method_config_table_entry {
+  /// The name is of one of the following forms:
+  ///   service/method -- specifies exact service and method name
+  ///   service/*      -- matches all methods for the specified service
+  grpc_mdstr* method_name;
+  grpc_method_config* method_config;
+} grpc_method_config_table_entry;
+
+/// Takes new references to all keys and values in \a entries.
+grpc_method_config_table* grpc_method_config_table_create(
+    size_t num_entries, grpc_method_config_table_entry* entries);
+
+grpc_method_config_table* grpc_method_config_table_ref(
+    grpc_method_config_table* table);
+void grpc_method_config_table_unref(grpc_method_config_table* table);
+
+/// Compares two grpc_method_config_tables.
+/// The sort order is stable but undefined.
+int grpc_method_config_table_cmp(const grpc_method_config_table* table1,
+                                 const grpc_method_config_table* table2);
+
+/// Gets the method config for the specified \a path, which should be of
+/// the form "/service/method".
+/// Returns NULL if the method has no config.
+/// Caller does NOT own a reference to the result.
+///
+/// Note: This returns a void* instead of a grpc_method_config* so that
+/// it can also be used for tables constructed via
+/// grpc_method_config_table_convert().
+void* grpc_method_config_table_get(const grpc_mdstr_hash_table* table,
+                                   const grpc_mdstr* path);
+
+/// Returns a channel arg containing \a table.
+grpc_arg grpc_method_config_table_create_channel_arg(
+    grpc_method_config_table* table);
+
+/// Generates a new table from \a table whose values are converted to a
+/// new form via the \a convert_value function.  The new table will use
+/// \a vtable for its values.
+///
+/// This is generally used to convert the table's value type from
+/// grpc_method_config to a simple struct containing only the parameters
+/// relevant to a particular filter, thus avoiding the need for a hash
+/// table lookup on the fast path.  In that scenario, \a convert_value
+/// will return a new instance of the struct containing the values from
+/// the grpc_method_config, and \a vtable provides the methods for
+/// operating on the struct type.
+grpc_mdstr_hash_table* grpc_method_config_table_convert(
+    const grpc_method_config_table* table,
+    void* (*convert_value)(const grpc_method_config* method_config),
+    const grpc_mdstr_hash_table_vtable* vtable);
+
+#endif /* GRPC_CORE_EXT_CLIENT_CHANNEL_METHOD_CONFIG_H */
diff --git a/src/core/ext/client_config/parse_address.c b/src/core/ext/client_channel/parse_address.c
similarity index 78%
rename from src/core/ext/client_config/parse_address.c
rename to src/core/ext/client_channel/parse_address.c
index 8b4abe2..b1d55ad 100644
--- a/src/core/ext/client_config/parse_address.c
+++ b/src/core/ext/client_channel/parse_address.c
@@ -31,11 +31,12 @@
  *
  */
 
-#include "src/core/ext/client_config/parse_address.h"
+#include "src/core/ext/client_channel/parse_address.h"
+#include "src/core/lib/iomgr/sockaddr.h"
 
 #include <stdio.h>
 #include <string.h>
-#ifdef GPR_HAVE_UNIX_SOCKET
+#ifdef GRPC_HAVE_UNIX_SOCKET
 #include <sys/un.h>
 #endif
 
@@ -44,33 +45,39 @@
 #include <grpc/support/log.h>
 #include <grpc/support/string_util.h>
 
-#ifdef GPR_HAVE_UNIX_SOCKET
-int parse_unix(grpc_uri *uri, struct sockaddr_storage *addr, size_t *len) {
-  struct sockaddr_un *un = (struct sockaddr_un *)addr;
+#ifdef GRPC_HAVE_UNIX_SOCKET
+
+int parse_unix(grpc_uri *uri, grpc_resolved_address *resolved_addr) {
+  struct sockaddr_un *un = (struct sockaddr_un *)resolved_addr->addr;
 
   un->sun_family = AF_UNIX;
   strcpy(un->sun_path, uri->path);
-  *len = strlen(un->sun_path) + sizeof(un->sun_family) + 1;
+  resolved_addr->len = strlen(un->sun_path) + sizeof(un->sun_family) + 1;
 
   return 1;
 }
-#endif
 
-int parse_ipv4(grpc_uri *uri, struct sockaddr_storage *addr, size_t *len) {
+#else /* GRPC_HAVE_UNIX_SOCKET */
+
+int parse_unix(grpc_uri *uri, grpc_resolved_address *resolved_addr) { abort(); }
+
+#endif /* GRPC_HAVE_UNIX_SOCKET */
+
+int parse_ipv4(grpc_uri *uri, grpc_resolved_address *resolved_addr) {
   const char *host_port = uri->path;
   char *host;
   char *port;
   int port_num;
   int result = 0;
-  struct sockaddr_in *in = (struct sockaddr_in *)addr;
+  struct sockaddr_in *in = (struct sockaddr_in *)resolved_addr->addr;
 
   if (*host_port == '/') ++host_port;
   if (!gpr_split_host_port(host_port, &host, &port)) {
     return 0;
   }
 
-  memset(in, 0, sizeof(*in));
-  *len = sizeof(*in);
+  memset(resolved_addr, 0, sizeof(grpc_resolved_address));
+  resolved_addr->len = sizeof(struct sockaddr_in);
   in->sin_family = AF_INET;
   if (inet_pton(AF_INET, host, &in->sin_addr) == 0) {
     gpr_log(GPR_ERROR, "invalid ipv4 address: '%s'", host);
@@ -96,13 +103,13 @@
   return result;
 }
 
-int parse_ipv6(grpc_uri *uri, struct sockaddr_storage *addr, size_t *len) {
+int parse_ipv6(grpc_uri *uri, grpc_resolved_address *resolved_addr) {
   const char *host_port = uri->path;
   char *host;
   char *port;
   int port_num;
   int result = 0;
-  struct sockaddr_in6 *in6 = (struct sockaddr_in6 *)addr;
+  struct sockaddr_in6 *in6 = (struct sockaddr_in6 *)resolved_addr->addr;
 
   if (*host_port == '/') ++host_port;
   if (!gpr_split_host_port(host_port, &host, &port)) {
@@ -110,7 +117,7 @@
   }
 
   memset(in6, 0, sizeof(*in6));
-  *len = sizeof(*in6);
+  resolved_addr->len = sizeof(*in6);
   in6->sin6_family = AF_INET6;
   if (inet_pton(AF_INET6, host, &in6->sin6_addr) == 0) {
     gpr_log(GPR_ERROR, "invalid ipv6 address: '%s'", host);
diff --git a/src/core/ext/client_config/parse_address.h b/src/core/ext/client_channel/parse_address.h
similarity index 79%
rename from src/core/ext/client_config/parse_address.h
rename to src/core/ext/client_channel/parse_address.h
index 74c86f4..bf99c52 100644
--- a/src/core/ext/client_config/parse_address.h
+++ b/src/core/ext/client_channel/parse_address.h
@@ -31,26 +31,24 @@
  *
  */
 
-#ifndef GRPC_CORE_EXT_CLIENT_CONFIG_PARSE_ADDRESS_H
-#define GRPC_CORE_EXT_CLIENT_CONFIG_PARSE_ADDRESS_H
+#ifndef GRPC_CORE_EXT_CLIENT_CHANNEL_PARSE_ADDRESS_H
+#define GRPC_CORE_EXT_CLIENT_CHANNEL_PARSE_ADDRESS_H
 
 #include <stddef.h>
 
-#include "src/core/ext/client_config/uri_parser.h"
-#include "src/core/lib/iomgr/sockaddr.h"
+#include "src/core/ext/client_channel/uri_parser.h"
+#include "src/core/lib/iomgr/resolve_address.h"
 
-#ifdef GPR_HAVE_UNIX_SOCKET
 /** Populate \a addr and \a len from \a uri, whose path is expected to contain a
  * unix socket path. Returns true upon success. */
-int parse_unix(grpc_uri *uri, struct sockaddr_storage *addr, size_t *len);
-#endif
+int parse_unix(grpc_uri *uri, grpc_resolved_address *resolved_addr);
 
 /** Populate /a addr and \a len from \a uri, whose path is expected to contain a
  * host:port pair. Returns true upon success. */
-int parse_ipv4(grpc_uri *uri, struct sockaddr_storage *addr, size_t *len);
+int parse_ipv4(grpc_uri *uri, grpc_resolved_address *resolved_addr);
 
 /** Populate /a addr and \a len from \a uri, whose path is expected to contain a
  * host:port pair. Returns true upon success. */
-int parse_ipv6(grpc_uri *uri, struct sockaddr_storage *addr, size_t *len);
+int parse_ipv6(grpc_uri *uri, grpc_resolved_address *resolved_addr);
 
-#endif /* GRPC_CORE_EXT_CLIENT_CONFIG_PARSE_ADDRESS_H */
+#endif /* GRPC_CORE_EXT_CLIENT_CHANNEL_PARSE_ADDRESS_H */
diff --git a/src/core/ext/client_config/resolver.c b/src/core/ext/client_channel/resolver.c
similarity index 98%
rename from src/core/ext/client_config/resolver.c
rename to src/core/ext/client_channel/resolver.c
index 7534ea6..0c26d95 100644
--- a/src/core/ext/client_config/resolver.c
+++ b/src/core/ext/client_channel/resolver.c
@@ -31,7 +31,7 @@
  *
  */
 
-#include "src/core/ext/client_config/resolver.h"
+#include "src/core/ext/client_channel/resolver.h"
 
 void grpc_resolver_init(grpc_resolver *resolver,
                         const grpc_resolver_vtable *vtable) {
diff --git a/src/core/ext/client_config/resolver.h b/src/core/ext/client_channel/resolver.h
similarity index 93%
rename from src/core/ext/client_config/resolver.h
rename to src/core/ext/client_channel/resolver.h
index 88ac262..0951613 100644
--- a/src/core/ext/client_config/resolver.h
+++ b/src/core/ext/client_channel/resolver.h
@@ -31,11 +31,11 @@
  *
  */
 
-#ifndef GRPC_CORE_EXT_CLIENT_CONFIG_RESOLVER_H
-#define GRPC_CORE_EXT_CLIENT_CONFIG_RESOLVER_H
+#ifndef GRPC_CORE_EXT_CLIENT_CHANNEL_RESOLVER_H
+#define GRPC_CORE_EXT_CLIENT_CHANNEL_RESOLVER_H
 
-#include "src/core/ext/client_config/resolver_result.h"
-#include "src/core/ext/client_config/subchannel.h"
+#include "src/core/ext/client_channel/resolver_result.h"
+#include "src/core/ext/client_channel/subchannel.h"
 #include "src/core/lib/iomgr/iomgr.h"
 
 typedef struct grpc_resolver grpc_resolver;
@@ -91,4 +91,4 @@
                         grpc_resolver_result **result,
                         grpc_closure *on_complete);
 
-#endif /* GRPC_CORE_EXT_CLIENT_CONFIG_RESOLVER_H */
+#endif /* GRPC_CORE_EXT_CLIENT_CHANNEL_RESOLVER_H */
diff --git a/src/core/ext/client_config/resolver_factory.c b/src/core/ext/client_channel/resolver_factory.c
similarity index 97%
rename from src/core/ext/client_config/resolver_factory.c
rename to src/core/ext/client_channel/resolver_factory.c
index 67832dc..7c3d644 100644
--- a/src/core/ext/client_config/resolver_factory.c
+++ b/src/core/ext/client_channel/resolver_factory.c
@@ -31,7 +31,7 @@
  *
  */
 
-#include "src/core/ext/client_config/resolver_factory.h"
+#include "src/core/ext/client_channel/resolver_factory.h"
 
 void grpc_resolver_factory_ref(grpc_resolver_factory* factory) {
   factory->vtable->ref(factory);
diff --git a/src/core/ext/client_config/resolver_factory.h b/src/core/ext/client_channel/resolver_factory.h
similarity index 89%
rename from src/core/ext/client_config/resolver_factory.h
rename to src/core/ext/client_channel/resolver_factory.h
index 9ec5b9a..1ad018c 100644
--- a/src/core/ext/client_config/resolver_factory.h
+++ b/src/core/ext/client_channel/resolver_factory.h
@@ -31,12 +31,12 @@
  *
  */
 
-#ifndef GRPC_CORE_EXT_CLIENT_CONFIG_RESOLVER_FACTORY_H
-#define GRPC_CORE_EXT_CLIENT_CONFIG_RESOLVER_FACTORY_H
+#ifndef GRPC_CORE_EXT_CLIENT_CHANNEL_RESOLVER_FACTORY_H
+#define GRPC_CORE_EXT_CLIENT_CHANNEL_RESOLVER_FACTORY_H
 
-#include "src/core/ext/client_config/client_channel_factory.h"
-#include "src/core/ext/client_config/resolver.h"
-#include "src/core/ext/client_config/uri_parser.h"
+#include "src/core/ext/client_channel/client_channel_factory.h"
+#include "src/core/ext/client_channel/resolver.h"
+#include "src/core/ext/client_channel/uri_parser.h"
 
 typedef struct grpc_resolver_factory grpc_resolver_factory;
 typedef struct grpc_resolver_factory_vtable grpc_resolver_factory_vtable;
@@ -76,4 +76,4 @@
 char *grpc_resolver_factory_get_default_authority(
     grpc_resolver_factory *factory, grpc_uri *uri);
 
-#endif /* GRPC_CORE_EXT_CLIENT_CONFIG_RESOLVER_FACTORY_H */
+#endif /* GRPC_CORE_EXT_CLIENT_CHANNEL_RESOLVER_FACTORY_H */
diff --git a/src/core/ext/client_config/resolver_registry.c b/src/core/ext/client_channel/resolver_registry.c
similarity index 97%
rename from src/core/ext/client_config/resolver_registry.c
rename to src/core/ext/client_channel/resolver_registry.c
index bd5c683..ee43329 100644
--- a/src/core/ext/client_config/resolver_registry.c
+++ b/src/core/ext/client_channel/resolver_registry.c
@@ -31,7 +31,7 @@
  *
  */
 
-#include "src/core/ext/client_config/resolver_registry.h"
+#include "src/core/ext/client_channel/resolver_registry.h"
 
 #include <string.h>
 
@@ -55,7 +55,7 @@
     grpc_resolver_factory_unref(g_all_of_the_resolvers[i]);
   }
   // FIXME(ctiller): this should live in grpc_resolver_registry_init,
-  // however that would have the client_config plugin call this AFTER we start
+  // however that would have the client_channel plugin call this AFTER we start
   // registering resolvers from third party plugins, and so they'd never show
   // up.
   // We likely need some kind of dependency system for plugins.... what form
diff --git a/src/core/ext/client_config/resolver_registry.h b/src/core/ext/client_channel/resolver_registry.h
similarity index 92%
rename from src/core/ext/client_config/resolver_registry.h
rename to src/core/ext/client_channel/resolver_registry.h
index 4c6279b..0a39d4a 100644
--- a/src/core/ext/client_config/resolver_registry.h
+++ b/src/core/ext/client_channel/resolver_registry.h
@@ -31,10 +31,10 @@
  *
  */
 
-#ifndef GRPC_CORE_EXT_CLIENT_CONFIG_RESOLVER_REGISTRY_H
-#define GRPC_CORE_EXT_CLIENT_CONFIG_RESOLVER_REGISTRY_H
+#ifndef GRPC_CORE_EXT_CLIENT_CHANNEL_RESOLVER_REGISTRY_H
+#define GRPC_CORE_EXT_CLIENT_CHANNEL_RESOLVER_REGISTRY_H
 
-#include "src/core/ext/client_config/resolver_factory.h"
+#include "src/core/ext/client_channel/resolver_factory.h"
 
 void grpc_resolver_registry_init();
 void grpc_resolver_registry_shutdown(void);
@@ -68,4 +68,4 @@
     representing the default authority to pass from a client. */
 char *grpc_get_default_authority(const char *target);
 
-#endif /* GRPC_CORE_EXT_CLIENT_CONFIG_RESOLVER_REGISTRY_H */
+#endif /* GRPC_CORE_EXT_CLIENT_CHANNEL_RESOLVER_REGISTRY_H */
diff --git a/src/core/ext/client_config/resolver_result.c b/src/core/ext/client_channel/resolver_result.c
similarity index 98%
rename from src/core/ext/client_config/resolver_result.c
rename to src/core/ext/client_channel/resolver_result.c
index 63480d1..ab1c215 100644
--- a/src/core/ext/client_config/resolver_result.c
+++ b/src/core/ext/client_channel/resolver_result.c
@@ -29,7 +29,7 @@
 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 //
 
-#include "src/core/ext/client_config/resolver_result.h"
+#include "src/core/ext/client_channel/resolver_result.h"
 
 #include <string.h>
 
diff --git a/src/core/ext/client_config/resolver_result.h b/src/core/ext/client_channel/resolver_result.h
similarity index 86%
rename from src/core/ext/client_config/resolver_result.h
rename to src/core/ext/client_channel/resolver_result.h
index 414c2e2..5421fd9 100644
--- a/src/core/ext/client_config/resolver_result.h
+++ b/src/core/ext/client_channel/resolver_result.h
@@ -29,11 +29,10 @@
 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 //
 
-#ifndef GRPC_CORE_EXT_CLIENT_CONFIG_RESOLVER_RESULT_H
-#define GRPC_CORE_EXT_CLIENT_CONFIG_RESOLVER_RESULT_H
+#ifndef GRPC_CORE_EXT_CLIENT_CHANNEL_RESOLVER_RESULT_H
+#define GRPC_CORE_EXT_CLIENT_CHANNEL_RESOLVER_RESULT_H
 
-#include "src/core/ext/client_config/lb_policy_factory.h"
-#include "src/core/lib/iomgr/resolve_address.h"
+#include "src/core/ext/client_channel/lb_policy_factory.h"
 
 // TODO(roth, ctiller): In the long term, we are considering replacing
 // the resolver_result data structure with grpc_channel_args.  The idea is
@@ -52,23 +51,18 @@
 grpc_resolver_result* grpc_resolver_result_create(
     const char* server_name, grpc_lb_addresses* addresses,
     const char* lb_policy_name, grpc_channel_args* lb_policy_args);
+
 void grpc_resolver_result_ref(grpc_resolver_result* result);
 void grpc_resolver_result_unref(grpc_exec_ctx* exec_ctx,
                                 grpc_resolver_result* result);
 
-/// Caller does NOT take ownership of result.
+/// Accessors.  Caller does NOT take ownership of results.
 const char* grpc_resolver_result_get_server_name(grpc_resolver_result* result);
-
-/// Caller does NOT take ownership of result.
 grpc_lb_addresses* grpc_resolver_result_get_addresses(
     grpc_resolver_result* result);
-
-/// Caller does NOT take ownership of result.
 const char* grpc_resolver_result_get_lb_policy_name(
     grpc_resolver_result* result);
-
-/// Caller does NOT take ownership of result.
 grpc_channel_args* grpc_resolver_result_get_lb_policy_args(
     grpc_resolver_result* result);
 
-#endif /* GRPC_CORE_EXT_CLIENT_CONFIG_RESOLVER_RESULT_H */
+#endif /* GRPC_CORE_EXT_CLIENT_CHANNEL_RESOLVER_RESULT_H */
diff --git a/src/core/ext/client_config/subchannel.c b/src/core/ext/client_channel/subchannel.c
similarity index 96%
rename from src/core/ext/client_config/subchannel.c
rename to src/core/ext/client_channel/subchannel.c
index 0bbaa3e..157f788 100644
--- a/src/core/ext/client_config/subchannel.c
+++ b/src/core/ext/client_channel/subchannel.c
@@ -31,7 +31,7 @@
  *
  */
 
-#include "src/core/ext/client_config/subchannel.h"
+#include "src/core/ext/client_channel/subchannel.h"
 
 #include <limits.h>
 #include <string.h>
@@ -39,9 +39,9 @@
 #include <grpc/support/alloc.h>
 #include <grpc/support/avl.h>
 
-#include "src/core/ext/client_config/client_channel.h"
-#include "src/core/ext/client_config/initial_connect_string.h"
-#include "src/core/ext/client_config/subchannel_index.h"
+#include "src/core/ext/client_channel/client_channel.h"
+#include "src/core/ext/client_channel/initial_connect_string.h"
+#include "src/core/ext/client_channel/subchannel_index.h"
 #include "src/core/lib/channel/channel_args.h"
 #include "src/core/lib/channel/connected_channel.h"
 #include "src/core/lib/iomgr/timer.h"
@@ -95,8 +95,7 @@
   /** channel arguments */
   grpc_channel_args *args;
   /** address to connect to */
-  struct sockaddr *addr;
-  size_t addr_len;
+  grpc_resolved_address *addr;
 
   grpc_subchannel_key *key;
 
@@ -220,8 +219,8 @@
                             : gpr_atm_no_barrier_fetch_add(&c->ref_pair, delta);
 #ifdef GRPC_STREAM_REFCOUNT_DEBUG
   gpr_log(file, line, GPR_LOG_SEVERITY_DEBUG,
-          "SUBCHANNEL: %p %12s 0x%08d -> 0x%08d [%s]", c, purpose, (int)old_val,
-          (int)(old_val + delta), reason);
+          "SUBCHANNEL: %p %s 0x%08" PRIxPTR " -> 0x%08" PRIxPTR " [%s]", c,
+          purpose, old_val, old_val + delta, reason);
 #endif
   return old_val;
 }
@@ -320,12 +319,11 @@
   } else {
     c->filters = NULL;
   }
-  c->addr = gpr_malloc(args->addr_len);
-  if (args->addr_len) memcpy(c->addr, args->addr, args->addr_len);
+  c->addr = gpr_malloc(sizeof(grpc_resolved_address));
+  if (args->addr->len)
+    memcpy(c->addr, args->addr, sizeof(grpc_resolved_address));
   c->pollset_set = grpc_pollset_set_create();
-  c->addr_len = args->addr_len;
-  grpc_set_initial_connect_string(&c->addr, &c->addr_len,
-                                  &c->initial_connect_string);
+  grpc_set_initial_connect_string(&c->addr, &c->initial_connect_string);
   c->args = grpc_channel_args_copy(args->args);
   c->root_external_state_watcher.next = c->root_external_state_watcher.prev =
       &c->root_external_state_watcher;
@@ -376,7 +374,6 @@
 
   args.interested_parties = c->pollset_set;
   args.addr = c->addr;
-  args.addr_len = c->addr_len;
   args.deadline = c->next_attempt;
   args.channel_args = c->args;
   args.initial_connect_string = c->initial_connect_string;
@@ -704,7 +701,7 @@
 
 grpc_error *grpc_connected_subchannel_create_call(
     grpc_exec_ctx *exec_ctx, grpc_connected_subchannel *con,
-    grpc_polling_entity *pollent, gpr_timespec deadline,
+    grpc_polling_entity *pollent, grpc_mdstr *path, gpr_timespec deadline,
     grpc_subchannel_call **call) {
   grpc_channel_stack *chanstk = CHANNEL_STACK_FROM_CONNECTION(con);
   *call = gpr_malloc(sizeof(grpc_subchannel_call) + chanstk->call_stack_size);
@@ -712,7 +709,7 @@
   (*call)->connection = con;  // Ref is added below.
   grpc_error *error =
       grpc_call_stack_init(exec_ctx, chanstk, 1, subchannel_call_destroy, *call,
-                           NULL, NULL, deadline, callstk);
+                           NULL, NULL, path, deadline, callstk);
   if (error != GRPC_ERROR_NONE) {
     const char *error_string = grpc_error_string(error);
     gpr_log(GPR_ERROR, "error: %s", error_string);
diff --git a/src/core/ext/client_config/subchannel.h b/src/core/ext/client_channel/subchannel.h
similarity index 95%
rename from src/core/ext/client_config/subchannel.h
rename to src/core/ext/client_channel/subchannel.h
index 3330621..0350d55 100644
--- a/src/core/ext/client_config/subchannel.h
+++ b/src/core/ext/client_channel/subchannel.h
@@ -31,13 +31,14 @@
  *
  */
 
-#ifndef GRPC_CORE_EXT_CLIENT_CONFIG_SUBCHANNEL_H
-#define GRPC_CORE_EXT_CLIENT_CONFIG_SUBCHANNEL_H
+#ifndef GRPC_CORE_EXT_CLIENT_CHANNEL_SUBCHANNEL_H
+#define GRPC_CORE_EXT_CLIENT_CHANNEL_SUBCHANNEL_H
 
-#include "src/core/ext/client_config/connector.h"
+#include "src/core/ext/client_channel/connector.h"
 #include "src/core/lib/channel/channel_stack.h"
 #include "src/core/lib/iomgr/polling_entity.h"
 #include "src/core/lib/transport/connectivity_state.h"
+#include "src/core/lib/transport/metadata.h"
 
 /** A (sub-)channel that knows how to connect to exactly one target
     address. Provides a target for load balancing. */
@@ -110,7 +111,7 @@
 /** construct a subchannel call */
 grpc_error *grpc_connected_subchannel_create_call(
     grpc_exec_ctx *exec_ctx, grpc_connected_subchannel *connected_subchannel,
-    grpc_polling_entity *pollent, gpr_timespec deadline,
+    grpc_polling_entity *pollent, grpc_mdstr *path, gpr_timespec deadline,
     grpc_subchannel_call **subchannel_call);
 
 /** process a transport level op */
@@ -166,8 +167,7 @@
   /** Server name */
   const char *server_name;
   /** Address to connect to */
-  struct sockaddr *addr;
-  size_t addr_len;
+  grpc_resolved_address *addr;
 };
 
 /** create a subchannel given a connector */
@@ -175,4 +175,4 @@
                                         grpc_connector *connector,
                                         grpc_subchannel_args *args);
 
-#endif /* GRPC_CORE_EXT_CLIENT_CONFIG_SUBCHANNEL_H */
+#endif /* GRPC_CORE_EXT_CLIENT_CHANNEL_SUBCHANNEL_H */
diff --git a/src/core/ext/client_config/subchannel_index.c b/src/core/ext/client_channel/subchannel_index.c
similarity index 95%
rename from src/core/ext/client_config/subchannel_index.c
rename to src/core/ext/client_channel/subchannel_index.c
index 673f85b..7933760 100644
--- a/src/core/ext/client_config/subchannel_index.c
+++ b/src/core/ext/client_channel/subchannel_index.c
@@ -31,7 +31,7 @@
 //
 //
 
-#include "src/core/ext/client_config/subchannel_index.h"
+#include "src/core/ext/client_channel/subchannel_index.h"
 
 #include <stdbool.h>
 #include <string.h>
@@ -87,10 +87,10 @@
     k->args.filters = NULL;
   }
   k->args.server_name = gpr_strdup(args->server_name);
-  k->args.addr_len = args->addr_len;
-  k->args.addr = gpr_malloc(args->addr_len);
-  if (k->args.addr_len > 0) {
-    memcpy(k->args.addr, args->addr, k->args.addr_len);
+  k->args.addr = gpr_malloc(sizeof(grpc_resolved_address));
+  k->args.addr->len = args->addr->len;
+  if (k->args.addr->len > 0) {
+    memcpy(k->args.addr, args->addr, sizeof(grpc_resolved_address));
   }
   k->args.args = copy_channel_args(args->args);
   return k;
@@ -109,14 +109,14 @@
                                   grpc_subchannel_key *b) {
   int c = GPR_ICMP(a->connector, b->connector);
   if (c != 0) return c;
-  c = GPR_ICMP(a->args.addr_len, b->args.addr_len);
+  c = GPR_ICMP(a->args.addr->len, b->args.addr->len);
   if (c != 0) return c;
   c = GPR_ICMP(a->args.filter_count, b->args.filter_count);
   if (c != 0) return c;
   c = strcmp(a->args.server_name, b->args.server_name);
   if (c != 0) return c;
-  if (a->args.addr_len) {
-    c = memcmp(a->args.addr, b->args.addr, a->args.addr_len);
+  if (a->args.addr->len) {
+    c = memcmp(a->args.addr->addr, b->args.addr->addr, a->args.addr->len);
     if (c != 0) return c;
   }
   if (a->args.filter_count > 0) {
diff --git a/src/core/ext/client_config/subchannel_index.h b/src/core/ext/client_channel/subchannel_index.h
similarity index 91%
rename from src/core/ext/client_config/subchannel_index.h
rename to src/core/ext/client_channel/subchannel_index.h
index 6b8d063..5b3af6b 100644
--- a/src/core/ext/client_config/subchannel_index.h
+++ b/src/core/ext/client_channel/subchannel_index.h
@@ -31,11 +31,11 @@
  *
  */
 
-#ifndef GRPC_CORE_EXT_CLIENT_CONFIG_SUBCHANNEL_INDEX_H
-#define GRPC_CORE_EXT_CLIENT_CONFIG_SUBCHANNEL_INDEX_H
+#ifndef GRPC_CORE_EXT_CLIENT_CHANNEL_SUBCHANNEL_INDEX_H
+#define GRPC_CORE_EXT_CLIENT_CHANNEL_SUBCHANNEL_INDEX_H
 
-#include "src/core/ext/client_config/connector.h"
-#include "src/core/ext/client_config/subchannel.h"
+#include "src/core/ext/client_channel/connector.h"
+#include "src/core/ext/client_channel/subchannel.h"
 
 /** \file Provides an index of active subchannels so that they can be
     shared amongst channels */
@@ -74,4 +74,4 @@
 /** Shutdown the subchannel index (global) */
 void grpc_subchannel_index_shutdown(void);
 
-#endif /* GRPC_CORE_EXT_CLIENT_CONFIG_SUBCHANNEL_INDEX_H */
+#endif /* GRPC_CORE_EXT_CLIENT_CHANNEL_SUBCHANNEL_INDEX_H */
diff --git a/src/core/ext/client_config/uri_parser.c b/src/core/ext/client_channel/uri_parser.c
similarity index 99%
rename from src/core/ext/client_config/uri_parser.c
rename to src/core/ext/client_channel/uri_parser.c
index 3ca1a58..bcb6a1d 100644
--- a/src/core/ext/client_config/uri_parser.c
+++ b/src/core/ext/client_channel/uri_parser.c
@@ -31,7 +31,7 @@
  *
  */
 
-#include "src/core/ext/client_config/uri_parser.h"
+#include "src/core/ext/client_channel/uri_parser.h"
 
 #include <string.h>
 
diff --git a/src/core/ext/client_config/uri_parser.h b/src/core/ext/client_channel/uri_parser.h
similarity index 93%
rename from src/core/ext/client_config/uri_parser.h
rename to src/core/ext/client_channel/uri_parser.h
index 875a7cb..5fe0e8f 100644
--- a/src/core/ext/client_config/uri_parser.h
+++ b/src/core/ext/client_channel/uri_parser.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef GRPC_CORE_EXT_CLIENT_CONFIG_URI_PARSER_H
-#define GRPC_CORE_EXT_CLIENT_CONFIG_URI_PARSER_H
+#ifndef GRPC_CORE_EXT_CLIENT_CHANNEL_URI_PARSER_H
+#define GRPC_CORE_EXT_CLIENT_CHANNEL_URI_PARSER_H
 
 #include <stddef.h>
 
@@ -60,4 +60,4 @@
 /** destroy a uri */
 void grpc_uri_destroy(grpc_uri *uri);
 
-#endif /* GRPC_CORE_EXT_CLIENT_CONFIG_URI_PARSER_H */
+#endif /* GRPC_CORE_EXT_CLIENT_CHANNEL_URI_PARSER_H */
diff --git a/src/core/ext/lb_policy/grpclb/grpclb.c b/src/core/ext/lb_policy/grpclb/grpclb.c
index 626f285..36f0a90 100644
--- a/src/core/ext/lb_policy/grpclb/grpclb.c
+++ b/src/core/ext/lb_policy/grpclb/grpclb.c
@@ -69,8 +69,8 @@
  * possible scenarios:
  *
  * 1. This is the first server list received. There was no previous instance of
- *    the Round Robin policy. \a rr_handover() will instantiate the RR policy
- *    and perform all the pending operations over it.
+ *    the Round Robin policy. \a rr_handover_locked() will instantiate the RR
+ *    policy and perform all the pending operations over it.
  * 2. There's already a RR policy instance active. We need to introduce the new
  *    one build from the new serverlist, but taking care not to disrupt the
  *    operations in progress over the old RR instance. This is done by
@@ -78,7 +78,7 @@
  *    references are held on the old RR policy, it'll be destroyed and \a
  *    glb_rr_connectivity_changed notified with a \a GRPC_CHANNEL_SHUTDOWN
  *    state. At this point we can transition to a new RR instance safely, which
- *    is done once again via \a rr_handover().
+ *    is done once again via \a rr_handover_locked().
  *
  *
  * Once a RR policy instance is in place (and getting updated as described),
@@ -86,8 +86,8 @@
  * forwarding them to the RR instance. Any time there's no RR policy available
  * (ie, right after the creation of the gRPCLB policy, if an empty serverlist
  * is received, etc), pick/ping requests are added to a list of pending
- * picks/pings to be flushed and serviced as part of \a rr_handover() the moment
- * the RR policy instance becomes available.
+ * picks/pings to be flushed and serviced as part of \a rr_handover_locked() the
+ * moment the RR policy instance becomes available.
  *
  * \see https://github.com/grpc/grpc/blob/master/doc/load-balancing.md for the
  * high level design and details. */
@@ -96,6 +96,12 @@
  * - Implement LB service forwarding (point 2c. in the doc's diagram).
  */
 
+/* With the addition of a libuv endpoint, sockaddr.h now includes uv.h when
+   using that endpoint. Because of various transitive includes in uv.h,
+   including windows.h on Windows, uv.h must be included before other system
+   headers. Therefore, sockaddr.h must always be included first */
+#include "src/core/lib/iomgr/sockaddr.h"
+
 #include <errno.h>
 
 #include <string.h>
@@ -107,13 +113,13 @@
 #include <grpc/support/string_util.h>
 #include <grpc/support/time.h>
 
-#include "src/core/ext/client_config/client_channel_factory.h"
-#include "src/core/ext/client_config/lb_policy_factory.h"
-#include "src/core/ext/client_config/lb_policy_registry.h"
-#include "src/core/ext/client_config/parse_address.h"
+#include "src/core/ext/client_channel/client_channel_factory.h"
+#include "src/core/ext/client_channel/lb_policy_factory.h"
+#include "src/core/ext/client_channel/lb_policy_registry.h"
+#include "src/core/ext/client_channel/parse_address.h"
 #include "src/core/ext/lb_policy/grpclb/grpclb.h"
 #include "src/core/ext/lb_policy/grpclb/load_balancer_api.h"
-#include "src/core/lib/iomgr/sockaddr.h"
+#include "src/core/lib/channel/channel_args.h"
 #include "src/core/lib/iomgr/sockaddr_utils.h"
 #include "src/core/lib/support/string.h"
 #include "src/core/lib/surface/call.h"
@@ -134,6 +140,9 @@
 }
 
 typedef struct wrapped_rr_closure_arg {
+  /* the closure instance using this struct as argument */
+  grpc_closure wrapper_closure;
+
   /* the original closure. Usually a on_complete/notify cb for pick() and ping()
    * calls against the internal RR instance, respectively. */
   grpc_closure *wrapped_closure;
@@ -155,9 +164,8 @@
   /* The RR instance related to the closure */
   grpc_lb_policy *rr_policy;
 
-  /* when not NULL, represents a pending_{pick,ping} node to be freed upon
-   * closure execution */
-  void *owning_pending_node; /* to be freed if not NULL */
+  /* heap memory to be freed upon closure execution. */
+  void *free_when_done;
 } wrapped_rr_closure_arg;
 
 /* The \a on_complete closure passed as part of the pick requires keeping a
@@ -183,10 +191,10 @@
     }
   }
   GPR_ASSERT(wc_arg->wrapped_closure != NULL);
-
   grpc_exec_ctx_sched(exec_ctx, wc_arg->wrapped_closure, GRPC_ERROR_REF(error),
                       NULL);
-  gpr_free(wc_arg->owning_pending_node);
+  GPR_ASSERT(wc_arg->free_when_done != NULL);
+  gpr_free(wc_arg->free_when_done);
 }
 
 /* Linked list of pending pick requests. It stores all information needed to
@@ -207,10 +215,6 @@
    * upon error. */
   grpc_connected_subchannel **target;
 
-  /* a closure wrapping the original on_complete one to be invoked once the
-   * pick() has completed (regardless of success) */
-  grpc_closure wrapped_on_complete;
-
   /* args for wrapped_on_complete */
   wrapped_rr_closure_arg wrapped_on_complete_arg;
 } pending_pick;
@@ -230,8 +234,9 @@
   pp->wrapped_on_complete_arg.initial_metadata = pick_args->initial_metadata;
   pp->wrapped_on_complete_arg.lb_token_mdelem_storage =
       pick_args->lb_token_mdelem_storage;
-  grpc_closure_init(&pp->wrapped_on_complete, wrapped_rr_closure,
-                    &pp->wrapped_on_complete_arg);
+  pp->wrapped_on_complete_arg.free_when_done = pp;
+  grpc_closure_init(&pp->wrapped_on_complete_arg.wrapper_closure,
+                    wrapped_rr_closure, &pp->wrapped_on_complete_arg);
   *root = pp;
 }
 
@@ -239,10 +244,6 @@
 typedef struct pending_ping {
   struct pending_ping *next;
 
-  /* a closure wrapping the original on_complete one to be invoked once the
-   * ping() has completed (regardless of success) */
-  grpc_closure wrapped_notify;
-
   /* args for wrapped_notify */
   wrapped_rr_closure_arg wrapped_notify_arg;
 } pending_ping;
@@ -251,10 +252,11 @@
   pending_ping *pping = gpr_malloc(sizeof(*pping));
   memset(pping, 0, sizeof(pending_ping));
   memset(&pping->wrapped_notify_arg, 0, sizeof(wrapped_rr_closure_arg));
-  pping->next = *root;
-  grpc_closure_init(&pping->wrapped_notify, wrapped_rr_closure,
-                    &pping->wrapped_notify_arg);
   pping->wrapped_notify_arg.wrapped_closure = notify;
+  pping->wrapped_notify_arg.free_when_done = pping;
+  pping->next = *root;
+  grpc_closure_init(&pping->wrapped_notify_arg.wrapper_closure,
+                    wrapped_rr_closure, &pping->wrapped_notify_arg);
   *root = pping;
 }
 
@@ -274,6 +276,7 @@
   /** who the client is trying to communicate with */
   const char *server_name;
   grpc_client_channel_factory *cc_factory;
+  grpc_channel_args *args;
 
   /** deadline for the LB's call */
   gpr_timespec deadline;
@@ -307,13 +310,6 @@
 
   /** for tracking of the RR connectivity */
   rr_connectivity_data *rr_connectivity;
-
-  /* a wrapped (see \a wrapped_rr_closure) on-complete closure for readily
-   * available RR picks */
-  grpc_closure wrapped_on_complete;
-
-  /* arguments for the wrapped_on_complete closure */
-  wrapped_rr_closure_arg wc_arg;
 } glb_lb_policy;
 
 /* Keeps track and reacts to changes in connectivity of the RR instance */
@@ -399,14 +395,14 @@
           GPR_ARRAY_SIZE(server->load_balance_token) - 1;
       grpc_mdstr *lb_token_mdstr = grpc_mdstr_from_buffer(
           (uint8_t *)server->load_balance_token, lb_token_size);
-      user_data = grpc_mdelem_from_metadata_strings(
-          GRPC_MDSTR_LOAD_REPORTING_INITIAL, lb_token_mdstr);
+      user_data = grpc_mdelem_from_metadata_strings(GRPC_MDSTR_LB_TOKEN,
+                                                    lb_token_mdstr);
     } else {
       gpr_log(GPR_ERROR,
               "Missing LB token for backend address '%s'. The empty token will "
               "be used instead",
-              grpc_sockaddr_to_uri((struct sockaddr *)&addr.addr));
-      user_data = GRPC_MDELEM_LOAD_REPORTING_INITIAL_EMPTY;
+              grpc_sockaddr_to_uri(&addr));
+      user_data = GRPC_MDELEM_LB_TOKEN_EMPTY;
     }
 
     grpc_lb_addresses_set_address(lb_addresses, addr_idx, &addr.addr, addr.len,
@@ -424,9 +420,43 @@
   if (token != NULL) GRPC_MDELEM_UNREF(token);
 }
 
-static grpc_lb_policy *create_rr(grpc_exec_ctx *exec_ctx,
-                                 const grpc_grpclb_serverlist *serverlist,
-                                 glb_lb_policy *glb_policy) {
+/* perform a pick over \a rr_policy. Given that a pick can return immediately
+ * (ignoring its completion callback) we need to perform the cleanups this
+ * callback would be otherwise resposible for */
+static bool pick_from_internal_rr_locked(
+    grpc_exec_ctx *exec_ctx, grpc_lb_policy *rr_policy,
+    const grpc_lb_policy_pick_args *pick_args,
+    grpc_connected_subchannel **target, wrapped_rr_closure_arg *wc_arg) {
+  GPR_ASSERT(rr_policy != NULL);
+  const bool pick_done =
+      grpc_lb_policy_pick(exec_ctx, rr_policy, pick_args, target,
+                          (void **)&wc_arg->lb_token, &wc_arg->wrapper_closure);
+  if (pick_done) {
+    /* synchronous grpc_lb_policy_pick call. Unref the RR policy. */
+    if (grpc_lb_glb_trace) {
+      gpr_log(GPR_INFO, "Unreffing RR (0x%" PRIxPTR ")",
+              (intptr_t)wc_arg->rr_policy);
+    }
+    GRPC_LB_POLICY_UNREF(exec_ctx, wc_arg->rr_policy, "glb_pick");
+
+    /* add the load reporting initial metadata */
+    initial_metadata_add_lb_token(pick_args->initial_metadata,
+                                  pick_args->lb_token_mdelem_storage,
+                                  GRPC_MDELEM_REF(wc_arg->lb_token));
+
+    gpr_free(wc_arg);
+  }
+  /* else, the pending pick will be registered and taken care of by the
+   * pending pick list inside the RR policy (glb_policy->rr_policy).
+   * Eventually, wrapped_on_complete will be called, which will -among other
+   * things- add the LB token to the call's initial metadata */
+
+  return pick_done;
+}
+
+static grpc_lb_policy *create_rr_locked(
+    grpc_exec_ctx *exec_ctx, const grpc_grpclb_serverlist *serverlist,
+    glb_lb_policy *glb_policy) {
   GPR_ASSERT(serverlist != NULL && serverlist->num_servers > 0);
 
   grpc_lb_policy_args args;
@@ -434,6 +464,7 @@
   args.server_name = glb_policy->server_name;
   args.client_channel_factory = glb_policy->cc_factory;
   args.addresses = process_serverlist(serverlist);
+  args.additional_args = glb_policy->args;
 
   grpc_lb_policy *rr = grpc_lb_policy_create(exec_ctx, "round_robin", &args);
 
@@ -446,18 +477,21 @@
   return rr;
 }
 
-static void rr_handover(grpc_exec_ctx *exec_ctx, glb_lb_policy *glb_policy,
-                        grpc_error *error) {
+static void rr_handover_locked(grpc_exec_ctx *exec_ctx,
+                               glb_lb_policy *glb_policy, grpc_error *error) {
   GPR_ASSERT(glb_policy->serverlist != NULL &&
              glb_policy->serverlist->num_servers > 0);
   glb_policy->rr_policy =
-      create_rr(exec_ctx, glb_policy->serverlist, glb_policy);
+      create_rr_locked(exec_ctx, glb_policy->serverlist, glb_policy);
 
   if (grpc_lb_glb_trace) {
     gpr_log(GPR_INFO, "Created RR policy (0x%" PRIxPTR ")",
             (intptr_t)glb_policy->rr_policy);
   }
   GPR_ASSERT(glb_policy->rr_policy != NULL);
+  grpc_pollset_set_add_pollset_set(exec_ctx,
+                                   glb_policy->rr_policy->interested_parties,
+                                   glb_policy->base.interested_parties);
   glb_policy->rr_connectivity->state = grpc_lb_policy_check_connectivity(
       exec_ctx, glb_policy->rr_policy, &error);
   grpc_lb_policy_notify_on_state_change(
@@ -478,11 +512,9 @@
       gpr_log(GPR_INFO, "Pending pick about to PICK from 0x%" PRIxPTR "",
               (intptr_t)glb_policy->rr_policy);
     }
-    grpc_lb_policy_pick(exec_ctx, glb_policy->rr_policy, &pp->pick_args,
-                        pp->target,
-                        (void **)&pp->wrapped_on_complete_arg.lb_token,
-                        &pp->wrapped_on_complete);
-    pp->wrapped_on_complete_arg.owning_pending_node = pp;
+    pick_from_internal_rr_locked(exec_ctx, glb_policy->rr_policy,
+                                 &pp->pick_args, pp->target,
+                                 &pp->wrapped_on_complete_arg);
   }
 
   pending_ping *pping;
@@ -495,8 +527,7 @@
               (intptr_t)glb_policy->rr_policy);
     }
     grpc_lb_policy_ping_one(exec_ctx, glb_policy->rr_policy,
-                            &pping->wrapped_notify);
-    pping->wrapped_notify_arg.owning_pending_node = pping;
+                            &pping->wrapped_notify_arg.wrapper_closure);
   }
 }
 
@@ -509,13 +540,16 @@
     if (glb_policy->serverlist != NULL) {
       /* a RR policy is shutting down but there's a serverlist available ->
        * perform a handover */
-      rr_handover(exec_ctx, glb_policy, error);
+      gpr_mu_lock(&glb_policy->mu);
+      rr_handover_locked(exec_ctx, glb_policy, error);
+      gpr_mu_unlock(&glb_policy->mu);
     } else {
       /* shutting down and no new serverlist available. Bail out. */
       gpr_free(rr_conn_data);
     }
   } else {
     if (error == GRPC_ERROR_NONE) {
+      gpr_mu_lock(&glb_policy->mu);
       /* RR not shutting down. Mimic the RR's policy state */
       grpc_connectivity_state_set(exec_ctx, &glb_policy->state_tracker,
                                   rr_conn_data->state, GRPC_ERROR_REF(error),
@@ -524,6 +558,7 @@
       grpc_lb_policy_notify_on_state_change(exec_ctx, glb_policy->rr_policy,
                                             &rr_conn_data->state,
                                             &rr_conn_data->on_change);
+      gpr_mu_unlock(&glb_policy->mu);
     } else { /* error */
       gpr_free(rr_conn_data);
     }
@@ -557,6 +592,7 @@
    * Create a client channel over them to communicate with a LB service */
   glb_policy->server_name = gpr_strdup(args->server_name);
   glb_policy->cc_factory = args->client_channel_factory;
+  glb_policy->args = grpc_channel_args_copy(args->additional_args);
   GPR_ASSERT(glb_policy->cc_factory != NULL);
 
   /* construct a target from the addresses in args, given in the form
@@ -571,15 +607,12 @@
     }
     if (args->addresses->addresses[i].is_balancer) {
       if (addr_index == 0) {
-        addr_strs[addr_index++] = grpc_sockaddr_to_uri(
-            (const struct sockaddr *)&args->addresses->addresses[i]
-                .address.addr);
+        addr_strs[addr_index++] =
+            grpc_sockaddr_to_uri(&args->addresses->addresses[i].address);
       } else {
         GPR_ASSERT(grpc_sockaddr_to_string(
                        &addr_strs[addr_index++],
-                       (const struct sockaddr *)&args->addresses->addresses[i]
-                           .address.addr,
-                       true) > 0);
+                       &args->addresses->addresses[i].address, true) > 0);
       }
     }
   }
@@ -623,6 +656,7 @@
   GPR_ASSERT(glb_policy->pending_picks == NULL);
   GPR_ASSERT(glb_policy->pending_pings == NULL);
   gpr_free((void *)glb_policy->server_name);
+  grpc_channel_args_destroy(glb_policy->args);
   grpc_channel_destroy(glb_policy->lb_channel);
   glb_policy->lb_channel = NULL;
   grpc_connectivity_state_destroy(exec_ctx, &glb_policy->state_tracker);
@@ -648,15 +682,15 @@
   while (pp != NULL) {
     pending_pick *next = pp->next;
     *pp->target = NULL;
-    grpc_exec_ctx_sched(exec_ctx, &pp->wrapped_on_complete, GRPC_ERROR_NONE,
-                        NULL);
+    grpc_exec_ctx_sched(exec_ctx, &pp->wrapped_on_complete_arg.wrapper_closure,
+                        GRPC_ERROR_NONE, NULL);
     pp = next;
   }
 
   while (pping != NULL) {
     pending_ping *next = pping->next;
-    grpc_exec_ctx_sched(exec_ctx, &pping->wrapped_notify, GRPC_ERROR_NONE,
-                        NULL);
+    grpc_exec_ctx_sched(exec_ctx, &pping->wrapped_notify_arg.wrapper_closure,
+                        GRPC_ERROR_NONE, NULL);
     pping = next;
   }
 
@@ -686,11 +720,9 @@
   while (pp != NULL) {
     pending_pick *next = pp->next;
     if (pp->target == target) {
-      grpc_polling_entity_del_from_pollset_set(
-          exec_ctx, pp->pick_args.pollent, glb_policy->base.interested_parties);
       *target = NULL;
       grpc_exec_ctx_sched(
-          exec_ctx, &pp->wrapped_on_complete,
+          exec_ctx, &pp->wrapped_on_complete_arg.wrapper_closure,
           GRPC_ERROR_CREATE_REFERENCING("Pick Cancelled", &error, 1), NULL);
     } else {
       pp->next = glb_policy->pending_picks;
@@ -719,10 +751,8 @@
     pending_pick *next = pp->next;
     if ((pp->pick_args.initial_metadata_flags & initial_metadata_flags_mask) ==
         initial_metadata_flags_eq) {
-      grpc_polling_entity_del_from_pollset_set(
-          exec_ctx, pp->pick_args.pollent, glb_policy->base.interested_parties);
       grpc_exec_ctx_sched(
-          exec_ctx, &pp->wrapped_on_complete,
+          exec_ctx, &pp->wrapped_on_complete_arg.wrapper_closure,
           GRPC_ERROR_CREATE_REFERENCING("Pick Cancelled", &error, 1), NULL);
     } else {
       pp->next = glb_policy->pending_picks;
@@ -775,39 +805,20 @@
               (intptr_t)glb_policy->rr_policy);
     }
     GRPC_LB_POLICY_REF(glb_policy->rr_policy, "glb_pick");
-    memset(&glb_policy->wc_arg, 0, sizeof(wrapped_rr_closure_arg));
-    glb_policy->wc_arg.rr_policy = glb_policy->rr_policy;
-    glb_policy->wc_arg.target = target;
-    glb_policy->wc_arg.wrapped_closure = on_complete;
-    glb_policy->wc_arg.lb_token_mdelem_storage =
-        pick_args->lb_token_mdelem_storage;
-    glb_policy->wc_arg.initial_metadata = pick_args->initial_metadata;
-    glb_policy->wc_arg.owning_pending_node = NULL;
-    grpc_closure_init(&glb_policy->wrapped_on_complete, wrapped_rr_closure,
-                      &glb_policy->wc_arg);
 
-    pick_done =
-        grpc_lb_policy_pick(exec_ctx, glb_policy->rr_policy, pick_args, target,
-                            (void **)&glb_policy->wc_arg.lb_token,
-                            &glb_policy->wrapped_on_complete);
-    if (pick_done) {
-      /* synchronous grpc_lb_policy_pick call. Unref the RR policy. */
-      if (grpc_lb_glb_trace) {
-        gpr_log(GPR_INFO, "Unreffing RR (0x%" PRIxPTR ")",
-                (intptr_t)glb_policy->wc_arg.rr_policy);
-      }
-      GRPC_LB_POLICY_UNREF(exec_ctx, glb_policy->wc_arg.rr_policy, "glb_pick");
+    wrapped_rr_closure_arg *wc_arg = gpr_malloc(sizeof(wrapped_rr_closure_arg));
+    memset(wc_arg, 0, sizeof(wrapped_rr_closure_arg));
 
-      /* add the load reporting initial metadata */
-      initial_metadata_add_lb_token(
-          pick_args->initial_metadata, pick_args->lb_token_mdelem_storage,
-          GRPC_MDELEM_REF(glb_policy->wc_arg.lb_token));
-    }
+    grpc_closure_init(&wc_arg->wrapper_closure, wrapped_rr_closure, wc_arg);
+    wc_arg->rr_policy = glb_policy->rr_policy;
+    wc_arg->target = target;
+    wc_arg->wrapped_closure = on_complete;
+    wc_arg->lb_token_mdelem_storage = pick_args->lb_token_mdelem_storage;
+    wc_arg->initial_metadata = pick_args->initial_metadata;
+    wc_arg->free_when_done = wc_arg;
+    pick_done = pick_from_internal_rr_locked(exec_ctx, glb_policy->rr_policy,
+                                             pick_args, target, wc_arg);
   } else {
-    /* else, the pending pick will be registered and taken care of by the
-     * pending pick list inside the RR policy (glb_policy->rr_policy) */
-    grpc_polling_entity_add_to_pollset_set(exec_ctx, pick_args->pollent,
-                                           glb_policy->base.interested_parties);
     add_pending_pick(&glb_policy->pending_picks, pick_args, target,
                      on_complete);
 
@@ -931,7 +942,7 @@
 
   /* Note the following LB call progresses every time there's activity in \a
    * glb_policy->base.interested_parties, which is comprised of the polling
-   * entities passed to glb_pick(). */
+   * entities from \a client_channel. */
   lb_client->lb_call = grpc_channel_create_pollset_set_call(
       glb_policy->lb_channel, NULL, GRPC_PROPAGATE_DEFAULTS,
       glb_policy->base.interested_parties,
@@ -1076,6 +1087,7 @@
 
       /* update serverlist */
       if (serverlist->num_servers > 0) {
+        gpr_mu_lock(&lb_client->glb_policy->mu);
         if (grpc_grpclb_serverlist_equals(lb_client->glb_policy->serverlist,
                                           serverlist)) {
           if (grpc_lb_glb_trace) {
@@ -1093,7 +1105,7 @@
         if (lb_client->glb_policy->rr_policy == NULL) {
           /* initial "handover", in this case from a null RR policy, meaning
            * it'll just create the first RR policy instance */
-          rr_handover(exec_ctx, lb_client->glb_policy, error);
+          rr_handover_locked(exec_ctx, lb_client->glb_policy, error);
         } else {
           /* unref the RR policy, eventually leading to its substitution with a
            * new one constructed from the received serverlist (see
@@ -1101,6 +1113,7 @@
           GRPC_LB_POLICY_UNREF(exec_ctx, lb_client->glb_policy->rr_policy,
                                "serverlist_received");
         }
+        gpr_mu_unlock(&lb_client->glb_policy->mu);
       } else {
         if (grpc_lb_glb_trace) {
           gpr_log(GPR_INFO,
diff --git a/src/core/ext/lb_policy/grpclb/grpclb.h b/src/core/ext/lb_policy/grpclb/grpclb.h
index 83552b4..ff23f3a 100644
--- a/src/core/ext/lb_policy/grpclb/grpclb.h
+++ b/src/core/ext/lb_policy/grpclb/grpclb.h
@@ -34,7 +34,7 @@
 #ifndef GRPC_CORE_EXT_LB_POLICY_GRPCLB_GRPCLB_H
 #define GRPC_CORE_EXT_LB_POLICY_GRPCLB_GRPCLB_H
 
-#include "src/core/ext/client_config/lb_policy_factory.h"
+#include "src/core/ext/client_channel/lb_policy_factory.h"
 
 /** Returns a load balancing factory for the glb policy, which tries to connect
  * to a load balancing server to decide the next successfully connected
diff --git a/src/core/ext/lb_policy/grpclb/load_balancer_api.h b/src/core/ext/lb_policy/grpclb/load_balancer_api.h
index c1e73d0..079a64a 100644
--- a/src/core/ext/lb_policy/grpclb/load_balancer_api.h
+++ b/src/core/ext/lb_policy/grpclb/load_balancer_api.h
@@ -36,7 +36,7 @@
 
 #include <grpc/support/slice_buffer.h>
 
-#include "src/core/ext/client_config/lb_policy_factory.h"
+#include "src/core/ext/client_channel/lb_policy_factory.h"
 #include "src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h"
 
 #ifdef __cplusplus
diff --git a/src/core/ext/lb_policy/pick_first/pick_first.c b/src/core/ext/lb_policy/pick_first/pick_first.c
index 961a0c9..7b53f88 100644
--- a/src/core/ext/lb_policy/pick_first/pick_first.c
+++ b/src/core/ext/lb_policy/pick_first/pick_first.c
@@ -34,12 +34,11 @@
 #include <string.h>
 
 #include <grpc/support/alloc.h>
-#include "src/core/ext/client_config/lb_policy_registry.h"
+#include "src/core/ext/client_channel/lb_policy_registry.h"
 #include "src/core/lib/transport/connectivity_state.h"
 
 typedef struct pending_pick {
   struct pending_pick *next;
-  grpc_polling_entity *pollent;
   uint32_t initial_metadata_flags;
   grpc_connected_subchannel **target;
   grpc_closure *on_complete;
@@ -119,8 +118,6 @@
   while (pp != NULL) {
     pending_pick *next = pp->next;
     *pp->target = NULL;
-    grpc_polling_entity_del_from_pollset_set(exec_ctx, pp->pollent,
-                                             p->base.interested_parties);
     grpc_exec_ctx_sched(exec_ctx, pp->on_complete, GRPC_ERROR_NONE, NULL);
     gpr_free(pp);
     pp = next;
@@ -138,8 +135,6 @@
   while (pp != NULL) {
     pending_pick *next = pp->next;
     if (pp->target == target) {
-      grpc_polling_entity_del_from_pollset_set(exec_ctx, pp->pollent,
-                                               p->base.interested_parties);
       *target = NULL;
       grpc_exec_ctx_sched(
           exec_ctx, pp->on_complete,
@@ -168,8 +163,6 @@
     pending_pick *next = pp->next;
     if ((pp->initial_metadata_flags & initial_metadata_flags_mask) ==
         initial_metadata_flags_eq) {
-      grpc_polling_entity_del_from_pollset_set(exec_ctx, pp->pollent,
-                                               p->base.interested_parties);
       grpc_exec_ctx_sched(
           exec_ctx, pp->on_complete,
           GRPC_ERROR_CREATE_REFERENCING("Pick Cancelled", &error, 1), NULL);
@@ -229,11 +222,8 @@
     if (!p->started_picking) {
       start_picking(exec_ctx, p);
     }
-    grpc_polling_entity_add_to_pollset_set(exec_ctx, pick_args->pollent,
-                                           p->base.interested_parties);
     pp = gpr_malloc(sizeof(*pp));
     pp->next = p->pending_picks;
-    pp->pollent = pick_args->pollent;
     pp->target = target;
     pp->initial_metadata_flags = pick_args->initial_metadata_flags;
     pp->on_complete = on_complete;
@@ -319,8 +309,6 @@
         while ((pp = p->pending_picks)) {
           p->pending_picks = pp->next;
           *pp->target = selected;
-          grpc_polling_entity_del_from_pollset_set(exec_ctx, pp->pollent,
-                                                   p->base.interested_parties);
           grpc_exec_ctx_sched(exec_ctx, pp->on_complete, GRPC_ERROR_NONE, NULL);
           gpr_free(pp);
         }
@@ -475,9 +463,8 @@
     /* server_name will be copied as part of the subchannel creation. This makes
      * the copying of args->server_name (a borrowed pointer) OK. */
     sc_args.server_name = args->server_name;
-    sc_args.addr =
-        (struct sockaddr *)(&args->addresses->addresses[i].address.addr);
-    sc_args.addr_len = args->addresses->addresses[i].address.len;
+    sc_args.addr = &args->addresses->addresses[i].address;
+    sc_args.args = args->additional_args;
 
     grpc_subchannel *subchannel = grpc_client_channel_factory_create_subchannel(
         exec_ctx, args->client_channel_factory, &sc_args);
diff --git a/src/core/ext/lb_policy/round_robin/round_robin.c b/src/core/ext/lb_policy/round_robin/round_robin.c
index 930fa86..3073c13 100644
--- a/src/core/ext/lb_policy/round_robin/round_robin.c
+++ b/src/core/ext/lb_policy/round_robin/round_robin.c
@@ -63,7 +63,7 @@
 
 #include <grpc/support/alloc.h>
 
-#include "src/core/ext/client_config/lb_policy_registry.h"
+#include "src/core/ext/client_channel/lb_policy_registry.h"
 #include "src/core/lib/debug/trace.h"
 #include "src/core/lib/transport/connectivity_state.h"
 #include "src/core/lib/transport/static_metadata.h"
@@ -78,9 +78,6 @@
 typedef struct pending_pick {
   struct pending_pick *next;
 
-  /* polling entity for the pick()'s async notification */
-  grpc_polling_entity *pollent;
-
   /* output argument where to store the pick()ed user_data. It'll be NULL if no
    * such data is present or there's an error (the definite test for errors is
    * \a target being NULL). */
@@ -318,8 +315,6 @@
   while (pp != NULL) {
     pending_pick *next = pp->next;
     if (pp->target == target) {
-      grpc_polling_entity_del_from_pollset_set(exec_ctx, pp->pollent,
-                                               p->base.interested_parties);
       *target = NULL;
       grpc_exec_ctx_sched(
           exec_ctx, pp->on_complete,
@@ -348,8 +343,6 @@
     pending_pick *next = pp->next;
     if ((pp->initial_metadata_flags & initial_metadata_flags_mask) ==
         initial_metadata_flags_eq) {
-      grpc_polling_entity_del_from_pollset_set(exec_ctx, pp->pollent,
-                                               p->base.interested_parties);
       *pp->target = NULL;
       grpc_exec_ctx_sched(
           exec_ctx, pp->on_complete,
@@ -403,7 +396,6 @@
   gpr_mu_lock(&p->mu);
   if ((selected = peek_next_connected_locked(p))) {
     /* readily available, report right away */
-    gpr_mu_unlock(&p->mu);
     *target = grpc_subchannel_get_connected_subchannel(selected->subchannel);
 
     if (user_data != NULL) {
@@ -416,17 +408,15 @@
     }
     /* only advance the last picked pointer if the selection was used */
     advance_last_picked_locked(p);
+    gpr_mu_unlock(&p->mu);
     return 1;
   } else {
     /* no pick currently available. Save for later in list of pending picks */
     if (!p->started_picking) {
       start_picking(exec_ctx, p);
     }
-    grpc_polling_entity_add_to_pollset_set(exec_ctx, pick_args->pollent,
-                                           p->base.interested_parties);
     pp = gpr_malloc(sizeof(*pp));
     pp->next = p->pending_picks;
-    pp->pollent = pick_args->pollent;
     pp->target = target;
     pp->on_complete = on_complete;
     pp->initial_metadata_flags = pick_args->initial_metadata_flags;
@@ -482,8 +472,6 @@
                     "[RR CONN CHANGED] TARGET <-- SUBCHANNEL %p (NODE %p)",
                     (void *)selected->subchannel, (void *)selected);
           }
-          grpc_polling_entity_del_from_pollset_set(exec_ctx, pp->pollent,
-                                                   p->base.interested_parties);
           grpc_exec_ctx_sched(exec_ctx, pp->on_complete, GRPC_ERROR_NONE, NULL);
           gpr_free(pp);
         }
@@ -638,9 +626,8 @@
     /* server_name will be copied as part of the subchannel creation. This makes
      * the copying of args->server_name (a borrowed pointer) OK. */
     sc_args.server_name = args->server_name;
-    sc_args.addr =
-        (struct sockaddr *)(&args->addresses->addresses[i].address.addr);
-    sc_args.addr_len = args->addresses->addresses[i].address.len;
+    sc_args.addr = &args->addresses->addresses[i].address;
+    sc_args.args = args->additional_args;
 
     grpc_subchannel *subchannel = grpc_client_channel_factory_create_subchannel(
         exec_ctx, args->client_channel_factory, &sc_args);
diff --git a/src/core/ext/load_reporting/load_reporting.h b/src/core/ext/load_reporting/load_reporting.h
index e37817d..a157844 100644
--- a/src/core/ext/load_reporting/load_reporting.h
+++ b/src/core/ext/load_reporting/load_reporting.h
@@ -37,13 +37,21 @@
 #include <grpc/impl/codegen/grpc_types.h>
 #include "src/core/lib/channel/channel_stack.h"
 
-/** Metadata key for initial metadata coming from clients */
-/* TODO(dgq): change to the final value TBD */
-#define GRPC_LOAD_REPORTING_INITIAL_MD_KEY "load-reporting-initial"
+/** Metadata key for the gRPC LB load balancer token.
+ *
+ * The value corresponding to this key is an opaque token that is given to the
+ * frontend as part of each pick; the frontend sends this token to the backend
+ * in each request it sends when using that pick. The token is used by the
+ * backend to verify the request and to allow the backend to report load to the
+ * gRPC LB system. */
+#define GRPC_LB_TOKEN_MD_KEY "lb-token"
 
-/** Metadata key for trailing metadata from servers */
-/* TODO(dgq): change to the final value TBD */
-#define GRPC_LOAD_REPORTING_TRAILING_MD_KEY "load-reporting-trailing"
+/** Metadata key for gRPC LB cost reporting.
+ *
+ * The value corresponding to this key is an opaque binary blob reported by the
+ * backend as part of its trailing metadata containing cost information for the
+ * call. */
+#define GRPC_LB_COST_MD_KEY "lb-cost-bin"
 
 /** Identifiers for the invocation point of the users LR callback */
 typedef enum grpc_load_reporting_source {
diff --git a/src/core/ext/load_reporting/load_reporting_filter.c b/src/core/ext/load_reporting/load_reporting_filter.c
index 394f0cb..eeae240 100644
--- a/src/core/ext/load_reporting/load_reporting_filter.c
+++ b/src/core/ext/load_reporting/load_reporting_filter.c
@@ -75,7 +75,7 @@
 
   if (md->key == GRPC_MDSTR_PATH) {
     calld->service_method = grpc_mdstr_as_c_string(md->value);
-  } else if (md->key == GRPC_MDSTR_LOAD_REPORTING_INITIAL) {
+  } else if (md->key == GRPC_MDSTR_LB_TOKEN) {
     calld->initial_md_string = gpr_strdup(grpc_mdstr_as_c_string(md->value));
     return NULL;
   }
@@ -193,7 +193,7 @@
   grpc_call_element *elem = user_data;
   call_data *calld = elem->call_data;
 
-  if (md->key == GRPC_MDSTR_LOAD_REPORTING_TRAILING) {
+  if (md->key == GRPC_MDSTR_LB_COST_BIN) {
     calld->trailing_md_string = gpr_strdup(grpc_mdstr_as_c_string(md->value));
     return NULL;
   }
diff --git a/src/core/ext/resolver/dns/native/dns_resolver.c b/src/core/ext/resolver/dns/native/dns_resolver.c
index fa33ffd..b4ceee3 100644
--- a/src/core/ext/resolver/dns/native/dns_resolver.c
+++ b/src/core/ext/resolver/dns/native/dns_resolver.c
@@ -37,9 +37,9 @@
 #include <grpc/support/host_port.h>
 #include <grpc/support/string_util.h>
 
-#include "src/core/ext/client_config/http_connect_handshaker.h"
-#include "src/core/ext/client_config/lb_policy_registry.h"
-#include "src/core/ext/client_config/resolver_registry.h"
+#include "src/core/ext/client_channel/http_connect_handshaker.h"
+#include "src/core/ext/client_channel/lb_policy_registry.h"
+#include "src/core/ext/client_channel/resolver_registry.h"
 #include "src/core/lib/iomgr/resolve_address.h"
 #include "src/core/lib/iomgr/timer.h"
 #include "src/core/lib/support/backoff.h"
diff --git a/src/core/ext/resolver/sockaddr/sockaddr_resolver.c b/src/core/ext/resolver/sockaddr/sockaddr_resolver.c
index 5a7a32d..6148cbd 100644
--- a/src/core/ext/resolver/sockaddr/sockaddr_resolver.c
+++ b/src/core/ext/resolver/sockaddr/sockaddr_resolver.c
@@ -33,6 +33,7 @@
 
 #include <stdbool.h>
 #include <stdio.h>
+#include <stdlib.h>
 #include <string.h>
 
 #include <grpc/support/alloc.h>
@@ -40,8 +41,8 @@
 #include <grpc/support/port_platform.h>
 #include <grpc/support/string_util.h>
 
-#include "src/core/ext/client_config/parse_address.h"
-#include "src/core/ext/client_config/resolver_registry.h"
+#include "src/core/ext/client_channel/parse_address.h"
+#include "src/core/ext/client_channel/resolver_registry.h"
 #include "src/core/lib/iomgr/resolve_address.h"
 #include "src/core/lib/iomgr/unix_sockets_posix.h"
 #include "src/core/lib/support/string.h"
@@ -119,7 +120,7 @@
     *r->target_result = grpc_resolver_result_create(
         r->target_name,
         grpc_lb_addresses_copy(r->addresses, NULL /* user_data_copy */),
-        NULL /* lb_policy_name */, NULL);
+        NULL /* lb_policy_name */, NULL /* lb_policy_args */);
     grpc_exec_ctx_sched(exec_ctx, r->next_completion, GRPC_ERROR_NONE, NULL);
     r->next_completion = NULL;
   }
@@ -128,8 +129,8 @@
 static void sockaddr_destroy(grpc_exec_ctx *exec_ctx, grpc_resolver *gr) {
   sockaddr_resolver *r = (sockaddr_resolver *)gr;
   gpr_mu_destroy(&r->mu);
-  grpc_lb_addresses_destroy(r->addresses, NULL /* user_data_destroy */);
   gpr_free(r->target_name);
+  grpc_lb_addresses_destroy(r->addresses, NULL /* user_data_destroy */);
   gpr_free(r);
 }
 
@@ -149,7 +150,7 @@
   return ip_get_default_authority(uri);
 }
 
-#ifdef GPR_HAVE_UNIX_SOCKET
+#ifdef GRPC_HAVE_UNIX_SOCKET
 char *unix_get_default_authority(grpc_resolver_factory *factory,
                                  grpc_uri *uri) {
   return gpr_strdup("localhost");
@@ -160,8 +161,7 @@
 
 static grpc_resolver *sockaddr_create(grpc_resolver_args *args,
                                       int parse(grpc_uri *uri,
-                                                struct sockaddr_storage *dst,
-                                                size_t *len)) {
+                                                grpc_resolved_address *dst)) {
   if (0 != strcmp(args->uri->authority, "")) {
     gpr_log(GPR_ERROR, "authority based uri's not supported by the %s scheme",
             args->uri->scheme);
@@ -179,11 +179,8 @@
     grpc_uri ith_uri = *args->uri;
     char *part_str = gpr_dump_slice(path_parts.slices[i], GPR_DUMP_ASCII);
     ith_uri.path = part_str;
-    if (!parse(
-            &ith_uri,
-            (struct sockaddr_storage *)(&addresses->addresses[i].address.addr),
-            &addresses->addresses[i].address.len)) {
-      errors_found = true;
+    if (!parse(&ith_uri, &addresses->addresses[i].address)) {
+      errors_found = true; /* GPR_TRUE */
     }
     gpr_free(part_str);
     if (errors_found) break;
@@ -223,7 +220,7 @@
   static grpc_resolver_factory name##_resolver_factory = {                  \
       &name##_factory_vtable}
 
-#ifdef GPR_HAVE_UNIX_SOCKET
+#ifdef GRPC_HAVE_UNIX_SOCKET
 DECL_FACTORY(unix);
 #endif
 DECL_FACTORY(ipv4);
@@ -232,7 +229,7 @@
 void grpc_resolver_sockaddr_init(void) {
   grpc_register_resolver_type(&ipv4_resolver_factory);
   grpc_register_resolver_type(&ipv6_resolver_factory);
-#ifdef GPR_HAVE_UNIX_SOCKET
+#ifdef GRPC_HAVE_UNIX_SOCKET
   grpc_register_resolver_type(&unix_resolver_factory);
 #endif
 }
diff --git a/src/core/ext/transport/chttp2/client/insecure/channel_create.c b/src/core/ext/transport/chttp2/client/insecure/channel_create.c
index c2b5956..bd9eab8 100644
--- a/src/core/ext/transport/chttp2/client/insecure/channel_create.c
+++ b/src/core/ext/transport/chttp2/client/insecure/channel_create.c
@@ -40,9 +40,9 @@
 #include <grpc/support/slice.h>
 #include <grpc/support/slice_buffer.h>
 
-#include "src/core/ext/client_config/client_channel.h"
-#include "src/core/ext/client_config/http_connect_handshaker.h"
-#include "src/core/ext/client_config/resolver_registry.h"
+#include "src/core/ext/client_channel/client_channel.h"
+#include "src/core/ext/client_channel/http_connect_handshaker.h"
+#include "src/core/ext/client_channel/resolver_registry.h"
 #include "src/core/ext/transport/chttp2/transport/chttp2_transport.h"
 #include "src/core/lib/channel/channel_args.h"
 #include "src/core/lib/channel/compress_filter.h"
@@ -150,8 +150,7 @@
   c->tcp = NULL;
   grpc_closure_init(&c->connected, connected, c);
   grpc_tcp_client_connect(exec_ctx, &c->connected, &c->tcp,
-                          args->interested_parties, args->addr, args->addr_len,
-                          args->deadline);
+                          args->interested_parties, args->addr, args->deadline);
 }
 
 static const grpc_connector_vtable connector_vtable = {
diff --git a/src/core/ext/transport/chttp2/client/secure/secure_channel_create.c b/src/core/ext/transport/chttp2/client/secure/secure_channel_create.c
index 31c54ff..c5f4d49 100644
--- a/src/core/ext/transport/chttp2/client/secure/secure_channel_create.c
+++ b/src/core/ext/transport/chttp2/client/secure/secure_channel_create.c
@@ -40,9 +40,9 @@
 #include <grpc/support/slice.h>
 #include <grpc/support/slice_buffer.h>
 
-#include "src/core/ext/client_config/client_channel.h"
-#include "src/core/ext/client_config/http_connect_handshaker.h"
-#include "src/core/ext/client_config/resolver_registry.h"
+#include "src/core/ext/client_channel/client_channel.h"
+#include "src/core/ext/client_channel/http_connect_handshaker.h"
+#include "src/core/ext/client_channel/resolver_registry.h"
 #include "src/core/ext/transport/chttp2/transport/chttp2_transport.h"
 #include "src/core/lib/channel/channel_args.h"
 #include "src/core/lib/channel/handshaker.h"
@@ -208,9 +208,9 @@
   GPR_ASSERT(c->connecting_endpoint == NULL);
   gpr_mu_unlock(&c->mu);
   grpc_closure_init(&c->connected_closure, connected, c);
-  grpc_tcp_client_connect(
-      exec_ctx, &c->connected_closure, &c->newly_connecting_endpoint,
-      args->interested_parties, args->addr, args->addr_len, args->deadline);
+  grpc_tcp_client_connect(exec_ctx, &c->connected_closure,
+                          &c->newly_connecting_endpoint,
+                          args->interested_parties, args->addr, args->deadline);
 }
 
 static const grpc_connector_vtable connector_vtable = {
@@ -290,8 +290,6 @@
     channel = NULL;
   }
 
-  GRPC_SECURITY_CONNECTOR_UNREF(&f->security_connector->base,
-                                "client_channel_factory_create_channel");
   return channel;
 }
 
@@ -360,6 +358,9 @@
   grpc_channel *channel = client_channel_factory_create_channel(
       &exec_ctx, &f->base, target, GRPC_CLIENT_CHANNEL_TYPE_REGULAR, NULL);
 
+  GRPC_SECURITY_CONNECTOR_UNREF(&f->security_connector->base,
+                                "client_channel_factory_create_channel");
+
   grpc_client_channel_factory_unref(&exec_ctx, &f->base);
   grpc_exec_ctx_finish(&exec_ctx);
 
diff --git a/src/core/ext/transport/chttp2/server/insecure/server_chttp2.c b/src/core/ext/transport/chttp2/server/insecure/server_chttp2.c
index f0e0742..e4967c2 100644
--- a/src/core/ext/transport/chttp2/server/insecure/server_chttp2.c
+++ b/src/core/ext/transport/chttp2/server/insecure/server_chttp2.c
@@ -148,9 +148,7 @@
   const size_t naddrs = resolved->naddrs;
   errors = gpr_malloc(sizeof(*errors) * naddrs);
   for (i = 0; i < naddrs; i++) {
-    errors[i] = grpc_tcp_server_add_port(
-        tcp, (struct sockaddr *)&resolved->addrs[i].addr,
-        resolved->addrs[i].len, &port_temp);
+    errors[i] = grpc_tcp_server_add_port(tcp, &resolved->addrs[i], &port_temp);
     if (errors[i] == GRPC_ERROR_NONE) {
       if (port_num == -1) {
         port_num = port_temp;
diff --git a/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.c b/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.c
index 563271f..0fab888 100644
--- a/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.c
+++ b/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.c
@@ -286,9 +286,7 @@
 
   errors = gpr_malloc(sizeof(*errors) * resolved->naddrs);
   for (i = 0; i < resolved->naddrs; i++) {
-    errors[i] = grpc_tcp_server_add_port(
-        tcp, (struct sockaddr *)&resolved->addrs[i].addr,
-        resolved->addrs[i].len, &port_temp);
+    errors[i] = grpc_tcp_server_add_port(tcp, &resolved->addrs[i], &port_temp);
     if (errors[i] == GRPC_ERROR_NONE) {
       if (port_num == -1) {
         port_num = port_temp;
diff --git a/src/core/ext/transport/chttp2/transport/chttp2_plugin.c b/src/core/ext/transport/chttp2/transport/chttp2_plugin.c
index 7d5279b..bd87253 100644
--- a/src/core/ext/transport/chttp2/transport/chttp2_plugin.c
+++ b/src/core/ext/transport/chttp2/transport/chttp2_plugin.c
@@ -36,14 +36,11 @@
 #include "src/core/lib/debug/trace.h"
 #include "src/core/lib/transport/metadata.h"
 
-extern int grpc_http_write_state_trace;
-
 void grpc_chttp2_plugin_init(void) {
   grpc_chttp2_base64_encode_and_huffman_compress =
       grpc_chttp2_base64_encode_and_huffman_compress_impl;
   grpc_register_tracer("http", &grpc_http_trace);
   grpc_register_tracer("flowctl", &grpc_flowctl_trace);
-  grpc_register_tracer("http_write_state", &grpc_http_write_state_trace);
 }
 
 void grpc_chttp2_plugin_shutdown(void) {}
diff --git a/src/core/ext/transport/chttp2/transport/chttp2_transport.c b/src/core/ext/transport/chttp2/transport/chttp2_transport.c
index 1dd7fef..ecf3aea 100644
--- a/src/core/ext/transport/chttp2/transport/chttp2_transport.c
+++ b/src/core/ext/transport/chttp2/transport/chttp2_transport.c
@@ -65,91 +65,59 @@
 #define MAX_CLIENT_STREAM_ID 0x7fffffffu
 int grpc_http_trace = 0;
 int grpc_flowctl_trace = 0;
-int grpc_http_write_state_trace = 0;
-
-#define TRANSPORT_FROM_WRITING(tw)                                        \
-  ((grpc_chttp2_transport *)((char *)(tw)-offsetof(grpc_chttp2_transport, \
-                                                   writing)))
-
-#define TRANSPORT_FROM_PARSING(tp)                                        \
-  ((grpc_chttp2_transport *)((char *)(tp)-offsetof(grpc_chttp2_transport, \
-                                                   parsing)))
-
-#define TRANSPORT_FROM_GLOBAL(tg)                                         \
-  ((grpc_chttp2_transport *)((char *)(tg)-offsetof(grpc_chttp2_transport, \
-                                                   global)))
-
-#define STREAM_FROM_GLOBAL(sg) \
-  ((grpc_chttp2_stream *)((char *)(sg)-offsetof(grpc_chttp2_stream, global)))
-
-#define STREAM_FROM_PARSING(sg) \
-  ((grpc_chttp2_stream *)((char *)(sg)-offsetof(grpc_chttp2_stream, parsing)))
 
 static const grpc_transport_vtable vtable;
 
 /* forward declarations of various callbacks that we'll build closures around */
-static void writing_action(grpc_exec_ctx *exec_ctx, void *t, grpc_error *error);
-static void reading_action(grpc_exec_ctx *exec_ctx, void *t, grpc_error *error);
-static void parsing_action(grpc_exec_ctx *exec_ctx, void *t, grpc_error *error);
-static void reading_action_locked(grpc_exec_ctx *exec_ctx, void *arg,
-                                  grpc_error *error);
-static void post_parse_locked(grpc_exec_ctx *exec_ctx, void *arg,
-                              grpc_error *error);
-static void initiate_writing_locked(grpc_exec_ctx *exec_ctx, void *t,
+static void write_action_begin_locked(grpc_exec_ctx *exec_ctx, void *t,
+                                      grpc_error *error);
+static void write_action(grpc_exec_ctx *exec_ctx, void *t, grpc_error *error);
+static void write_action_end(grpc_exec_ctx *exec_ctx, void *t,
+                             grpc_error *error);
+static void write_action_end_locked(grpc_exec_ctx *exec_ctx, void *t,
                                     grpc_error *error);
-static void initiate_read_flush_locked(grpc_exec_ctx *exec_ctx, void *t,
-                                       grpc_error *error);
-static void terminate_writing_with_lock(grpc_exec_ctx *exec_ctx, void *t,
-                                        grpc_error *error);
 
-static void start_writing(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t);
-static void end_waiting_for_write(grpc_exec_ctx *exec_ctx,
-                                  grpc_chttp2_transport *t, grpc_error *error);
+static void read_action_begin(grpc_exec_ctx *exec_ctx, void *t,
+                              grpc_error *error);
+static void read_action_locked(grpc_exec_ctx *exec_ctx, void *t,
+                               grpc_error *error);
 
+static void complete_fetch_locked(grpc_exec_ctx *exec_ctx, void *gs,
+                                  grpc_error *error);
+static void complete_fetch(grpc_exec_ctx *exec_ctx, void *gs,
+                           grpc_error *error);
 /** Set a transport level setting, and push it to our peer */
 static void push_setting(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t,
                          grpc_chttp2_setting_id id, uint32_t value);
 
-/** Start disconnection chain */
-static void drop_connection(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t,
-                            grpc_error *error);
-
-/** Cancel a stream: coming from the transport API */
-static void cancel_from_api(grpc_exec_ctx *exec_ctx,
-                            grpc_chttp2_transport_global *transport_global,
-                            grpc_chttp2_stream_global *stream_global,
-                            grpc_error *error);
-
-static void close_from_api(grpc_exec_ctx *exec_ctx,
-                           grpc_chttp2_transport_global *transport_global,
-                           grpc_chttp2_stream_global *stream_global,
-                           grpc_error *error);
+static void close_from_api(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t,
+                           grpc_chttp2_stream *s, grpc_error *error);
 
 /** Start new streams that have been created if we can */
-static void maybe_start_some_streams(
-    grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_global *transport_global);
+static void maybe_start_some_streams(grpc_exec_ctx *exec_ctx,
+                                     grpc_chttp2_transport *t);
 
-static void connectivity_state_set(
-    grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_global *transport_global,
-    grpc_connectivity_state state, grpc_error *error, const char *reason);
+static void connectivity_state_set(grpc_exec_ctx *exec_ctx,
+                                   grpc_chttp2_transport *t,
+                                   grpc_connectivity_state state,
+                                   grpc_error *error, const char *reason);
 
-static void check_read_ops(grpc_exec_ctx *exec_ctx,
-                           grpc_chttp2_transport_global *transport_global);
-
-static void incoming_byte_stream_update_flow_control(
-    grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_global *transport_global,
-    grpc_chttp2_stream_global *stream_global, size_t max_size_hint,
-    size_t have_already);
+static void incoming_byte_stream_update_flow_control(grpc_exec_ctx *exec_ctx,
+                                                     grpc_chttp2_transport *t,
+                                                     grpc_chttp2_stream *s,
+                                                     size_t max_size_hint,
+                                                     size_t have_already);
 static void incoming_byte_stream_destroy_locked(grpc_exec_ctx *exec_ctx,
                                                 void *byte_stream,
                                                 grpc_error *error_ignored);
 static void fail_pending_writes(grpc_exec_ctx *exec_ctx,
-                                grpc_chttp2_transport_global *transport_global,
-                                grpc_chttp2_stream_global *stream_global,
+                                grpc_chttp2_transport *t, grpc_chttp2_stream *s,
                                 grpc_error *error);
 
-static void set_write_state(grpc_chttp2_transport *t,
-                            grpc_chttp2_write_state state, const char *reason);
+static void close_transport_locked(grpc_exec_ctx *exec_ctx,
+                                   grpc_chttp2_transport *t, grpc_error *error);
+static void end_all_the_calls(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t,
+                              grpc_error *error);
 
 /*******************************************************************************
  * CONSTRUCTION/DESTRUCTION/REFCOUNTING
@@ -161,34 +129,31 @@
 
   grpc_endpoint_destroy(exec_ctx, t->ep);
 
-  gpr_slice_buffer_destroy(&t->global.qbuf);
+  gpr_slice_buffer_destroy(&t->qbuf);
 
-  gpr_slice_buffer_destroy(&t->writing.outbuf);
-  grpc_chttp2_hpack_compressor_destroy(&t->writing.hpack_compressor);
+  gpr_slice_buffer_destroy(&t->outbuf);
+  grpc_chttp2_hpack_compressor_destroy(&t->hpack_compressor);
 
-  gpr_slice_buffer_destroy(&t->parsing.qbuf);
   gpr_slice_buffer_destroy(&t->read_buffer);
-  grpc_chttp2_hpack_parser_destroy(&t->parsing.hpack_parser);
-  grpc_chttp2_goaway_parser_destroy(&t->parsing.goaway_parser);
+  grpc_chttp2_hpack_parser_destroy(&t->hpack_parser);
+  grpc_chttp2_goaway_parser_destroy(&t->goaway_parser);
 
   for (i = 0; i < STREAM_LIST_COUNT; i++) {
     GPR_ASSERT(t->lists[i].head == NULL);
     GPR_ASSERT(t->lists[i].tail == NULL);
   }
 
-  GPR_ASSERT(grpc_chttp2_stream_map_size(&t->parsing_stream_map) == 0);
-  GPR_ASSERT(grpc_chttp2_stream_map_size(&t->new_stream_map) == 0);
+  GPR_ASSERT(grpc_chttp2_stream_map_size(&t->stream_map) == 0);
 
-  grpc_chttp2_stream_map_destroy(&t->parsing_stream_map);
-  grpc_chttp2_stream_map_destroy(&t->new_stream_map);
+  grpc_chttp2_stream_map_destroy(&t->stream_map);
   grpc_connectivity_state_destroy(exec_ctx, &t->channel_callback.state_tracker);
 
-  grpc_combiner_destroy(exec_ctx, t->executor.combiner);
+  grpc_combiner_destroy(exec_ctx, t->combiner);
 
   /* callback remaining pings: they're not allowed to call into the transpot,
      and maybe they hold resources that need to be freed */
-  while (t->global.pings.next != &t->global.pings) {
-    grpc_chttp2_outstanding_ping *ping = t->global.pings.next;
+  while (t->pings.next != &t->pings) {
+    grpc_chttp2_outstanding_ping *ping = t->pings.next;
     grpc_exec_ctx_sched(exec_ctx, ping->on_recv,
                         GRPC_ERROR_CREATE("Transport closed"), NULL);
     ping->next->prev = ping->prev;
@@ -196,37 +161,40 @@
     gpr_free(ping);
   }
 
+  while (t->write_cb_pool) {
+    grpc_chttp2_write_cb *next = t->write_cb_pool->next;
+    gpr_free(t->write_cb_pool);
+    t->write_cb_pool = next;
+  }
+
   gpr_free(t->peer_string);
   gpr_free(t);
 }
 
-/*#define REFCOUNTING_DEBUG 1*/
-#ifdef REFCOUNTING_DEBUG
-#define REF_TRANSPORT(t, r) ref_transport(t, r, __FILE__, __LINE__)
-#define UNREF_TRANSPORT(cl, t, r) unref_transport(cl, t, r, __FILE__, __LINE__)
-static void unref_transport(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t,
-                            const char *reason, const char *file, int line) {
-  gpr_log(GPR_DEBUG, "chttp2:unref:%p %d->%d %s [%s:%d]", t, t->refs.count,
-          t->refs.count - 1, reason, file, line);
+#ifdef GRPC_CHTTP2_REFCOUNTING_DEBUG
+void grpc_chttp2_unref_transport(grpc_exec_ctx *exec_ctx,
+                                 grpc_chttp2_transport *t, const char *reason,
+                                 const char *file, int line) {
+  gpr_log(GPR_DEBUG, "chttp2:unref:%p %" PRIdPTR "->%" PRIdPTR " %s [%s:%d]", t,
+          t->refs.count, t->refs.count - 1, reason, file, line);
   if (!gpr_unref(&t->refs)) return;
   destruct_transport(exec_ctx, t);
 }
 
-static void ref_transport(grpc_chttp2_transport *t, const char *reason,
-                          const char *file, int line) {
-  gpr_log(GPR_DEBUG, "chttp2:  ref:%p %d->%d %s [%s:%d]", t, t->refs.count,
-          t->refs.count + 1, reason, file, line);
+void grpc_chttp2_ref_transport(grpc_chttp2_transport *t, const char *reason,
+                               const char *file, int line) {
+  gpr_log(GPR_DEBUG, "chttp2:  ref:%p %" PRIdPTR "->%" PRIdPTR " %s [%s:%d]", t,
+          t->refs.count, t->refs.count + 1, reason, file, line);
   gpr_ref(&t->refs);
 }
 #else
-#define REF_TRANSPORT(t, r) ref_transport(t)
-#define UNREF_TRANSPORT(cl, t, r) unref_transport(cl, t)
-static void unref_transport(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t) {
+void grpc_chttp2_unref_transport(grpc_exec_ctx *exec_ctx,
+                                 grpc_chttp2_transport *t) {
   if (!gpr_unref(&t->refs)) return;
   destruct_transport(exec_ctx, t);
 }
 
-static void ref_transport(grpc_chttp2_transport *t) { gpr_ref(&t->refs); }
+void grpc_chttp2_ref_transport(grpc_chttp2_transport *t) { gpr_ref(&t->refs); }
 #endif
 
 static void init_transport(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t,
@@ -241,51 +209,41 @@
   memset(t, 0, sizeof(*t));
 
   t->base.vtable = &vtable;
-  t->executor.write_state = GRPC_CHTTP2_WRITES_CORKED;
   t->ep = ep;
   /* one ref is for destroy */
   gpr_ref_init(&t->refs, 1);
-  /* ref is dropped at transport close() */
-  gpr_ref_init(&t->shutdown_ep_refs, 1);
-  t->executor.combiner = grpc_combiner_create(grpc_endpoint_get_workqueue(ep));
+  t->combiner = grpc_combiner_create(grpc_endpoint_get_workqueue(ep));
   t->peer_string = grpc_endpoint_get_peer(ep);
   t->endpoint_reading = 1;
-  t->global.next_stream_id = is_client ? 1 : 2;
-  t->global.is_client = is_client;
-  t->writing.outgoing_window = DEFAULT_WINDOW;
-  t->parsing.incoming_window = DEFAULT_WINDOW;
-  t->global.stream_lookahead = DEFAULT_WINDOW;
-  t->global.connection_window_target = DEFAULT_CONNECTION_WINDOW_TARGET;
-  t->global.ping_counter = 1;
-  t->global.pings.next = t->global.pings.prev = &t->global.pings;
-  t->parsing.is_client = is_client;
-  t->parsing.deframe_state =
-      is_client ? GRPC_DTS_FH_0 : GRPC_DTS_CLIENT_PREFIX_0;
-  t->parsing.is_first_frame = true;
-  t->writing.is_client = is_client;
+  t->next_stream_id = is_client ? 1 : 2;
+  t->is_client = is_client;
+  t->outgoing_window = DEFAULT_WINDOW;
+  t->incoming_window = DEFAULT_WINDOW;
+  t->stream_lookahead = DEFAULT_WINDOW;
+  t->connection_window_target = DEFAULT_CONNECTION_WINDOW_TARGET;
+  t->ping_counter = 1;
+  t->pings.next = t->pings.prev = &t->pings;
+  t->deframe_state = is_client ? GRPC_DTS_FH_0 : GRPC_DTS_CLIENT_PREFIX_0;
+  t->is_first_frame = true;
   grpc_connectivity_state_init(
       &t->channel_callback.state_tracker, GRPC_CHANNEL_READY,
       is_client ? "client_transport" : "server_transport");
 
-  gpr_slice_buffer_init(&t->global.qbuf);
+  gpr_slice_buffer_init(&t->qbuf);
 
-  gpr_slice_buffer_init(&t->writing.outbuf);
-  grpc_chttp2_hpack_compressor_init(&t->writing.hpack_compressor);
-  grpc_closure_init(&t->writing_action, writing_action, t);
-  grpc_closure_init(&t->reading_action, reading_action, t);
-  grpc_closure_init(&t->reading_action_locked, reading_action_locked, t);
-  grpc_closure_init(&t->parsing_action, parsing_action, t);
-  grpc_closure_init(&t->post_parse_locked, post_parse_locked, t);
-  grpc_closure_init(&t->initiate_writing, initiate_writing_locked, t);
-  grpc_closure_init(&t->terminate_writing, terminate_writing_with_lock, t);
-  grpc_closure_init(&t->initiate_read_flush_locked, initiate_read_flush_locked,
+  gpr_slice_buffer_init(&t->outbuf);
+  grpc_chttp2_hpack_compressor_init(&t->hpack_compressor);
+
+  grpc_closure_init(&t->write_action_begin_locked, write_action_begin_locked,
                     t);
-  grpc_closure_init(&t->writing.done_cb, grpc_chttp2_terminate_writing,
-                    &t->writing);
+  grpc_closure_init(&t->write_action, write_action, t);
+  grpc_closure_init(&t->write_action_end, write_action_end, t);
+  grpc_closure_init(&t->write_action_end_locked, write_action_end_locked, t);
+  grpc_closure_init(&t->read_action_begin, read_action_begin, t);
+  grpc_closure_init(&t->read_action_locked, read_action_locked, t);
 
-  gpr_slice_buffer_init(&t->parsing.qbuf);
-  grpc_chttp2_goaway_parser_init(&t->parsing.goaway_parser);
-  grpc_chttp2_hpack_parser_init(&t->parsing.hpack_parser);
+  grpc_chttp2_goaway_parser_init(&t->goaway_parser);
+  grpc_chttp2_hpack_parser_init(&t->hpack_parser);
 
   gpr_slice_buffer_init(&t->read_buffer);
 
@@ -294,28 +252,24 @@
      large enough that the exponential growth should happen nicely when it's
      needed.
      TODO(ctiller): tune this */
-  grpc_chttp2_stream_map_init(&t->parsing_stream_map, 8);
-  grpc_chttp2_stream_map_init(&t->new_stream_map, 8);
+  grpc_chttp2_stream_map_init(&t->stream_map, 8);
 
   /* copy in initial settings to all setting sets */
   for (i = 0; i < GRPC_CHTTP2_NUM_SETTINGS; i++) {
-    t->parsing.settings[i] = grpc_chttp2_settings_parameters[i].default_value;
     for (j = 0; j < GRPC_NUM_SETTING_SETS; j++) {
-      t->global.settings[j][i] =
-          grpc_chttp2_settings_parameters[i].default_value;
+      t->settings[j][i] = grpc_chttp2_settings_parameters[i].default_value;
     }
   }
-  t->global.dirtied_local_settings = 1;
+  t->dirtied_local_settings = 1;
   /* Hack: it's common for implementations to assume 65536 bytes initial send
      window -- this should by rights be 0 */
-  t->global.force_send_settings = 1 << GRPC_CHTTP2_SETTINGS_INITIAL_WINDOW_SIZE;
-  t->global.sent_local_settings = 0;
+  t->force_send_settings = 1 << GRPC_CHTTP2_SETTINGS_INITIAL_WINDOW_SIZE;
+  t->sent_local_settings = 0;
 
   if (is_client) {
-    gpr_slice_buffer_add(
-        &t->writing.outbuf,
-        gpr_slice_from_copied_string(GRPC_CHTTP2_CLIENT_CONNECT_STRING));
-    grpc_chttp2_initiate_write(exec_ctx, &t->global, false, "initial_write");
+    gpr_slice_buffer_add(&t->outbuf, gpr_slice_from_copied_string(
+                                         GRPC_CHTTP2_CLIENT_CONNECT_STRING));
+    grpc_chttp2_initiate_write(exec_ctx, t, false, "initial_write");
   }
 
   /* configure http2 the way we like it */
@@ -330,34 +284,18 @@
 
   if (channel_args) {
     for (i = 0; i < channel_args->num_args; i++) {
-      if (0 ==
-          strcmp(channel_args->args[i].key, GRPC_ARG_MAX_CONCURRENT_STREAMS)) {
-        if (is_client) {
-          gpr_log(GPR_ERROR, "%s: is ignored on the client",
-                  GRPC_ARG_MAX_CONCURRENT_STREAMS);
-        } else {
-          const grpc_integer_options options = {-1, 0, INT_MAX};
-          const int value =
-              grpc_channel_arg_get_integer(&channel_args->args[i], options);
-          if (value >= 0) {
-            push_setting(exec_ctx, t,
-                         GRPC_CHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS,
-                         (uint32_t)value);
-          }
-        }
-      } else if (0 == strcmp(channel_args->args[i].key,
-                             GRPC_ARG_HTTP2_INITIAL_SEQUENCE_NUMBER)) {
+      if (0 == strcmp(channel_args->args[i].key,
+                      GRPC_ARG_HTTP2_INITIAL_SEQUENCE_NUMBER)) {
         const grpc_integer_options options = {-1, 0, INT_MAX};
         const int value =
             grpc_channel_arg_get_integer(&channel_args->args[i], options);
         if (value >= 0) {
-          if ((t->global.next_stream_id & 1) != (value & 1)) {
+          if ((t->next_stream_id & 1) != (value & 1)) {
             gpr_log(GPR_ERROR, "%s: low bit must be %d on %s",
                     GRPC_ARG_HTTP2_INITIAL_SEQUENCE_NUMBER,
-                    t->global.next_stream_id & 1,
-                    is_client ? "client" : "server");
+                    t->next_stream_id & 1, is_client ? "client" : "server");
           } else {
-            t->global.next_stream_id = (uint32_t)value;
+            t->next_stream_id = (uint32_t)value;
           }
         }
       } else if (0 == strcmp(channel_args->args[i].key,
@@ -366,16 +304,7 @@
         const int value =
             grpc_channel_arg_get_integer(&channel_args->args[i], options);
         if (value >= 0) {
-          t->global.stream_lookahead = (uint32_t)value;
-        }
-      } else if (0 == strcmp(channel_args->args[i].key,
-                             GRPC_ARG_HTTP2_HPACK_TABLE_SIZE_DECODER)) {
-        const grpc_integer_options options = {-1, 0, INT_MAX};
-        const int value =
-            grpc_channel_arg_get_integer(&channel_args->args[i], options);
-        if (value >= 0) {
-          push_setting(exec_ctx, t, GRPC_CHTTP2_SETTINGS_HEADER_TABLE_SIZE,
-                       (uint32_t)value);
+          t->stream_lookahead = (uint32_t)value;
         }
       } else if (0 == strcmp(channel_args->args[i].key,
                              GRPC_ARG_HTTP2_HPACK_TABLE_SIZE_ENCODER)) {
@@ -383,118 +312,125 @@
         const int value =
             grpc_channel_arg_get_integer(&channel_args->args[i], options);
         if (value >= 0) {
-          grpc_chttp2_hpack_compressor_set_max_usable_size(
-              &t->writing.hpack_compressor, (uint32_t)value);
+          grpc_chttp2_hpack_compressor_set_max_usable_size(&t->hpack_compressor,
+                                                           (uint32_t)value);
         }
-      } else if (0 == strcmp(channel_args->args[i].key,
-                             GRPC_ARG_MAX_METADATA_SIZE)) {
-        const grpc_integer_options options = {-1, 0, INT_MAX};
-        const int value =
-            grpc_channel_arg_get_integer(&channel_args->args[i], options);
-        if (value >= 0) {
-          push_setting(exec_ctx, t, GRPC_CHTTP2_SETTINGS_MAX_HEADER_LIST_SIZE,
-                       (uint32_t)value);
-        }
-      } else if (0 == strcmp(channel_args->args[i].key,
-                             GRPC_ARG_HTTP2_MAX_FRAME_SIZE)) {
-        if (channel_args->args[i].type != GRPC_ARG_INTEGER) {
-          gpr_log(GPR_ERROR, "%s: must be an integer",
-                  GRPC_ARG_HTTP2_MAX_FRAME_SIZE);
-        } else if (channel_args->args[i].value.integer < 16384 ||
-                   channel_args->args[i].value.integer > 16777215) {
-          gpr_log(GPR_ERROR, "%s: must be between 16384 and 16777215",
-                  GRPC_ARG_HTTP2_MAX_FRAME_SIZE);
-        } else {
-          push_setting(exec_ctx, t, GRPC_CHTTP2_SETTINGS_MAX_FRAME_SIZE,
-                       (uint32_t)channel_args->args[i].value.integer);
+      } else {
+        static const struct {
+          const char *channel_arg_name;
+          grpc_chttp2_setting_id setting_id;
+          grpc_integer_options integer_options;
+          bool availability[2] /* server, client */;
+        } settings_map[] = {
+            {GRPC_ARG_MAX_CONCURRENT_STREAMS,
+             GRPC_CHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS,
+             {-1, 0, INT_MAX},
+             {true, false}},
+            {GRPC_ARG_HTTP2_HPACK_TABLE_SIZE_DECODER,
+             GRPC_CHTTP2_SETTINGS_HEADER_TABLE_SIZE,
+             {-1, 0, INT_MAX},
+             {true, true}},
+            {GRPC_ARG_MAX_METADATA_SIZE,
+             GRPC_CHTTP2_SETTINGS_MAX_HEADER_LIST_SIZE,
+             {-1, 0, INT_MAX},
+             {true, true}},
+            {GRPC_ARG_HTTP2_MAX_FRAME_SIZE,
+             GRPC_CHTTP2_SETTINGS_MAX_FRAME_SIZE,
+             {-1, 16384, 16777215},
+             {true, true}},
+        };
+        for (j = 0; j < (int)GPR_ARRAY_SIZE(settings_map); j++) {
+          if (0 == strcmp(channel_args->args[i].key,
+                          settings_map[j].channel_arg_name)) {
+            if (!settings_map[j].availability[is_client]) {
+              gpr_log(GPR_DEBUG, "%s is not available on %s",
+                      settings_map[j].channel_arg_name,
+                      is_client ? "clients" : "servers");
+            } else {
+              int value = grpc_channel_arg_get_integer(
+                  &channel_args->args[i], settings_map[j].integer_options);
+              if (value >= 0) {
+                push_setting(exec_ctx, t, settings_map[j].setting_id,
+                             (uint32_t)value);
+              }
+            }
+            break;
+          }
         }
       }
     }
   }
 
-  set_write_state(t, GRPC_CHTTP2_WRITING_INACTIVE, "uncork");
-  grpc_chttp2_initiate_write(exec_ctx, &t->global, false, "init");
+  grpc_chttp2_initiate_write(exec_ctx, t, false, "init");
 }
 
 static void destroy_transport_locked(grpc_exec_ctx *exec_ctx, void *tp,
                                      grpc_error *error) {
   grpc_chttp2_transport *t = tp;
   t->destroying = 1;
-  drop_connection(exec_ctx, t, GRPC_ERROR_CREATE("Transport destroyed"));
-  UNREF_TRANSPORT(exec_ctx, t, "destroy");
+  close_transport_locked(
+      exec_ctx, t,
+      grpc_error_set_int(GRPC_ERROR_CREATE("Transport destroyed"),
+                         GRPC_ERROR_INT_OCCURRED_DURING_WRITE, t->write_state));
+  GRPC_CHTTP2_UNREF_TRANSPORT(exec_ctx, t, "destroy");
 }
 
 static void destroy_transport(grpc_exec_ctx *exec_ctx, grpc_transport *gt) {
   grpc_chttp2_transport *t = (grpc_chttp2_transport *)gt;
-  grpc_combiner_execute(exec_ctx, t->executor.combiner,
+  grpc_combiner_execute(exec_ctx, t->combiner,
                         grpc_closure_create(destroy_transport_locked, t),
-                        GRPC_ERROR_NONE);
-}
-
-/** block grpc_endpoint_shutdown being called until a paired
-    allow_endpoint_shutdown is made */
-static void prevent_endpoint_shutdown(grpc_chttp2_transport *t) {
-  gpr_ref(&t->shutdown_ep_refs);
-}
-
-static void allow_endpoint_shutdown_locked(grpc_exec_ctx *exec_ctx,
-                                           grpc_chttp2_transport *t) {
-  if (gpr_unref(&t->shutdown_ep_refs)) {
-    grpc_endpoint_shutdown(exec_ctx, t->ep);
-  }
+                        GRPC_ERROR_NONE, false);
 }
 
 static void close_transport_locked(grpc_exec_ctx *exec_ctx,
                                    grpc_chttp2_transport *t,
                                    grpc_error *error) {
   if (!t->closed) {
-    if (grpc_http_write_state_trace) {
-      gpr_log(GPR_DEBUG, "W:%p close transport", t);
+    if (t->write_state != GRPC_CHTTP2_WRITE_STATE_IDLE) {
+      if (t->close_transport_on_writes_finished == NULL) {
+        t->close_transport_on_writes_finished =
+            GRPC_ERROR_CREATE("Delayed close due to in-progress write");
+      }
+      t->close_transport_on_writes_finished =
+          grpc_error_add_child(t->close_transport_on_writes_finished, error);
+      return;
+    }
+    if (!grpc_error_get_int(error, GRPC_ERROR_INT_GRPC_STATUS, NULL)) {
+      error = grpc_error_set_int(error, GRPC_ERROR_INT_GRPC_STATUS,
+                                 GRPC_STATUS_UNAVAILABLE);
     }
     t->closed = 1;
-    connectivity_state_set(exec_ctx, &t->global, GRPC_CHANNEL_SHUTDOWN,
+    connectivity_state_set(exec_ctx, t, GRPC_CHANNEL_SHUTDOWN,
                            GRPC_ERROR_REF(error), "close_transport");
-    allow_endpoint_shutdown_locked(exec_ctx, t);
+    grpc_endpoint_shutdown(exec_ctx, t->ep);
 
     /* flush writable stream list to avoid dangling references */
-    grpc_chttp2_stream_global *stream_global;
-    grpc_chttp2_stream_writing *stream_writing;
-    while (grpc_chttp2_list_pop_writable_stream(
-        &t->global, &t->writing, &stream_global, &stream_writing)) {
-      GRPC_CHTTP2_STREAM_UNREF(exec_ctx, stream_global, "chttp2_writing");
+    grpc_chttp2_stream *s;
+    while (grpc_chttp2_list_pop_writable_stream(t, &s)) {
+      GRPC_CHTTP2_STREAM_UNREF(exec_ctx, s, "chttp2_writing:close");
     }
+    end_all_the_calls(exec_ctx, t, GRPC_ERROR_REF(error));
   }
   GRPC_ERROR_UNREF(error);
 }
 
 #ifdef GRPC_STREAM_REFCOUNT_DEBUG
-void grpc_chttp2_stream_ref(grpc_chttp2_stream_global *stream_global,
-                            const char *reason) {
-  grpc_stream_ref(STREAM_FROM_GLOBAL(stream_global)->refcount, reason);
+void grpc_chttp2_stream_ref(grpc_chttp2_stream *s, const char *reason) {
+  grpc_stream_ref(s->refcount, reason);
 }
-void grpc_chttp2_stream_unref(grpc_exec_ctx *exec_ctx,
-                              grpc_chttp2_stream_global *stream_global,
+void grpc_chttp2_stream_unref(grpc_exec_ctx *exec_ctx, grpc_chttp2_stream *s,
                               const char *reason) {
-  grpc_stream_unref(exec_ctx, STREAM_FROM_GLOBAL(stream_global)->refcount,
-                    reason);
+  grpc_stream_unref(exec_ctx, s->refcount, reason);
 }
 #else
-void grpc_chttp2_stream_ref(grpc_chttp2_stream_global *stream_global) {
-  grpc_stream_ref(STREAM_FROM_GLOBAL(stream_global)->refcount);
+void grpc_chttp2_stream_ref(grpc_chttp2_stream *s) {
+  grpc_stream_ref(s->refcount);
 }
-void grpc_chttp2_stream_unref(grpc_exec_ctx *exec_ctx,
-                              grpc_chttp2_stream_global *stream_global) {
-  grpc_stream_unref(exec_ctx, STREAM_FROM_GLOBAL(stream_global)->refcount);
+void grpc_chttp2_stream_unref(grpc_exec_ctx *exec_ctx, grpc_chttp2_stream *s) {
+  grpc_stream_unref(exec_ctx, s->refcount);
 }
 #endif
 
-static void finish_init_stream_locked(grpc_exec_ctx *exec_ctx, void *sp,
-                                      grpc_error *error) {
-  grpc_chttp2_stream *s = sp;
-  grpc_chttp2_register_stream(s->t, s);
-  GRPC_CHTTP2_STREAM_UNREF(exec_ctx, &s->global, "init");
-}
-
 static int init_stream(grpc_exec_ctx *exec_ctx, grpc_transport *gt,
                        grpc_stream *gs, grpc_stream_refcount *refcount,
                        const void *server_data) {
@@ -509,41 +445,30 @@
   /* We reserve one 'active stream' that's dropped when the stream is
      read-closed. The others are for incoming_byte_streams that are actively
      reading */
-  gpr_ref_init(&s->global.active_streams, 1);
-  GRPC_CHTTP2_STREAM_REF(&s->global, "chttp2");
+  gpr_ref_init(&s->active_streams, 1);
+  GRPC_CHTTP2_STREAM_REF(s, "chttp2");
 
-  grpc_chttp2_incoming_metadata_buffer_init(&s->parsing.metadata_buffer[0]);
-  grpc_chttp2_incoming_metadata_buffer_init(&s->parsing.metadata_buffer[1]);
-  grpc_chttp2_incoming_metadata_buffer_init(
-      &s->global.received_initial_metadata);
-  grpc_chttp2_incoming_metadata_buffer_init(
-      &s->global.received_trailing_metadata);
-  grpc_chttp2_data_parser_init(&s->parsing.data_parser);
-  gpr_slice_buffer_init(&s->writing.flow_controlled_buffer);
-  s->global.deadline = gpr_inf_future(GPR_CLOCK_MONOTONIC);
+  grpc_chttp2_incoming_metadata_buffer_init(&s->metadata_buffer[0]);
+  grpc_chttp2_incoming_metadata_buffer_init(&s->metadata_buffer[1]);
+  grpc_chttp2_data_parser_init(&s->data_parser);
+  gpr_slice_buffer_init(&s->flow_controlled_buffer);
+  s->deadline = gpr_inf_future(GPR_CLOCK_MONOTONIC);
+  grpc_closure_init(&s->complete_fetch, complete_fetch, s);
+  grpc_closure_init(&s->complete_fetch_locked, complete_fetch_locked, s);
 
-  REF_TRANSPORT(t, "stream");
+  GRPC_CHTTP2_REF_TRANSPORT(t, "stream");
 
   if (server_data) {
-    GPR_ASSERT(t->executor.parsing_active);
-    s->global.id = (uint32_t)(uintptr_t)server_data;
-    s->parsing.id = s->global.id;
-    s->global.outgoing_window =
-        t->global.settings[GRPC_PEER_SETTINGS]
-                          [GRPC_CHTTP2_SETTINGS_INITIAL_WINDOW_SIZE];
-    s->parsing.incoming_window = s->global.max_recv_bytes =
-        t->global.settings[GRPC_SENT_SETTINGS]
-                          [GRPC_CHTTP2_SETTINGS_INITIAL_WINDOW_SIZE];
+    s->id = (uint32_t)(uintptr_t)server_data;
+    s->outgoing_window = t->settings[GRPC_PEER_SETTINGS]
+                                    [GRPC_CHTTP2_SETTINGS_INITIAL_WINDOW_SIZE];
+    s->incoming_window = s->max_recv_bytes =
+        t->settings[GRPC_SENT_SETTINGS]
+                   [GRPC_CHTTP2_SETTINGS_INITIAL_WINDOW_SIZE];
     *t->accepting_stream = s;
-    grpc_chttp2_stream_map_add(&t->parsing_stream_map, s->global.id, s);
-    s->global.in_stream_map = true;
+    grpc_chttp2_stream_map_add(&t->stream_map, s->id, s);
   }
 
-  grpc_closure_init(&s->init_stream, finish_init_stream_locked, s);
-  GRPC_CHTTP2_STREAM_REF(&s->global, "init");
-  grpc_combiner_execute(exec_ctx, t->executor.combiner, &s->init_stream,
-                        GRPC_ERROR_NONE);
-
   GPR_TIMER_END("init_stream", 0);
 
   return 0;
@@ -557,55 +482,39 @@
 
   GPR_TIMER_BEGIN("destroy_stream", 0);
 
-  GPR_ASSERT((s->global.write_closed && s->global.read_closed) ||
-             s->global.id == 0);
-  GPR_ASSERT(!s->global.in_stream_map);
-  if (grpc_chttp2_unregister_stream(t, s) && t->global.sent_goaway) {
-    close_transport_locked(
-        exec_ctx, t,
-        GRPC_ERROR_CREATE("Last stream closed after sending goaway"));
-  }
-  if (!t->executor.parsing_active && s->global.id) {
-    GPR_ASSERT(grpc_chttp2_stream_map_find(&t->parsing_stream_map,
-                                           s->global.id) == NULL);
+  GPR_ASSERT((s->write_closed && s->read_closed) || s->id == 0);
+  if (s->id != 0) {
+    GPR_ASSERT(grpc_chttp2_stream_map_find(&t->stream_map, s->id) == NULL);
   }
 
-  while (
-      (bs = grpc_chttp2_incoming_frame_queue_pop(&s->global.incoming_frames))) {
+  while ((bs = grpc_chttp2_incoming_frame_queue_pop(&s->incoming_frames))) {
     incoming_byte_stream_destroy_locked(exec_ctx, bs, GRPC_ERROR_NONE);
   }
 
-  grpc_chttp2_list_remove_unannounced_incoming_window_available(&t->global,
-                                                                &s->global);
-  grpc_chttp2_list_remove_stalled_by_transport(&t->global, &s->global);
-  grpc_chttp2_list_remove_check_read_ops(&t->global, &s->global);
+  grpc_chttp2_list_remove_stalled_by_transport(t, s);
 
   for (int i = 0; i < STREAM_LIST_COUNT; i++) {
     if (s->included[i]) {
       gpr_log(GPR_ERROR, "%s stream %d still included in list %d",
-              t->global.is_client ? "client" : "server", s->global.id, i);
+              t->is_client ? "client" : "server", s->id, i);
       abort();
     }
   }
 
-  GPR_ASSERT(s->global.send_initial_metadata_finished == NULL);
-  GPR_ASSERT(s->global.send_message_finished == NULL);
-  GPR_ASSERT(s->global.send_trailing_metadata_finished == NULL);
-  GPR_ASSERT(s->global.recv_initial_metadata_ready == NULL);
-  GPR_ASSERT(s->global.recv_message_ready == NULL);
-  GPR_ASSERT(s->global.recv_trailing_metadata_finished == NULL);
-  grpc_chttp2_data_parser_destroy(exec_ctx, &s->parsing.data_parser);
-  grpc_chttp2_incoming_metadata_buffer_destroy(&s->parsing.metadata_buffer[0]);
-  grpc_chttp2_incoming_metadata_buffer_destroy(&s->parsing.metadata_buffer[1]);
-  grpc_chttp2_incoming_metadata_buffer_destroy(
-      &s->global.received_initial_metadata);
-  grpc_chttp2_incoming_metadata_buffer_destroy(
-      &s->global.received_trailing_metadata);
-  gpr_slice_buffer_destroy(&s->writing.flow_controlled_buffer);
-  GRPC_ERROR_UNREF(s->global.read_closed_error);
-  GRPC_ERROR_UNREF(s->global.write_closed_error);
+  GPR_ASSERT(s->send_initial_metadata_finished == NULL);
+  GPR_ASSERT(s->fetching_send_message == NULL);
+  GPR_ASSERT(s->send_trailing_metadata_finished == NULL);
+  GPR_ASSERT(s->recv_initial_metadata_ready == NULL);
+  GPR_ASSERT(s->recv_message_ready == NULL);
+  GPR_ASSERT(s->recv_trailing_metadata_finished == NULL);
+  grpc_chttp2_data_parser_destroy(exec_ctx, &s->data_parser);
+  grpc_chttp2_incoming_metadata_buffer_destroy(&s->metadata_buffer[0]);
+  grpc_chttp2_incoming_metadata_buffer_destroy(&s->metadata_buffer[1]);
+  gpr_slice_buffer_destroy(&s->flow_controlled_buffer);
+  GRPC_ERROR_UNREF(s->read_closed_error);
+  GRPC_ERROR_UNREF(s->write_closed_error);
 
-  UNREF_TRANSPORT(exec_ctx, t, "stream");
+  GRPC_CHTTP2_UNREF_TRANSPORT(exec_ctx, t, "stream");
 
   GPR_TIMER_END("destroy_stream", 0);
 
@@ -620,174 +529,184 @@
 
   s->destroy_stream_arg = and_free_memory;
   grpc_closure_init(&s->destroy_stream, destroy_stream_locked, s);
-  grpc_combiner_execute(exec_ctx, t->executor.combiner, &s->destroy_stream,
-                        GRPC_ERROR_NONE);
+  grpc_combiner_execute(exec_ctx, t->combiner, &s->destroy_stream,
+                        GRPC_ERROR_NONE, false);
   GPR_TIMER_END("destroy_stream", 0);
 }
 
-grpc_chttp2_stream_parsing *grpc_chttp2_parsing_lookup_stream(
-    grpc_chttp2_transport_parsing *transport_parsing, uint32_t id) {
-  grpc_chttp2_transport *t = TRANSPORT_FROM_PARSING(transport_parsing);
-  grpc_chttp2_stream *s =
-      grpc_chttp2_stream_map_find(&t->parsing_stream_map, id);
-  return s ? &s->parsing : NULL;
+grpc_chttp2_stream *grpc_chttp2_parsing_lookup_stream(grpc_chttp2_transport *t,
+                                                      uint32_t id) {
+  return grpc_chttp2_stream_map_find(&t->stream_map, id);
 }
 
-grpc_chttp2_stream_parsing *grpc_chttp2_parsing_accept_stream(
-    grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_parsing *transport_parsing,
-    uint32_t id) {
+grpc_chttp2_stream *grpc_chttp2_parsing_accept_stream(grpc_exec_ctx *exec_ctx,
+                                                      grpc_chttp2_transport *t,
+                                                      uint32_t id) {
+  if (t->channel_callback.accept_stream == NULL) {
+    return NULL;
+  }
   grpc_chttp2_stream *accepting;
-  grpc_chttp2_transport *t = TRANSPORT_FROM_PARSING(transport_parsing);
   GPR_ASSERT(t->accepting_stream == NULL);
   t->accepting_stream = &accepting;
   t->channel_callback.accept_stream(exec_ctx,
                                     t->channel_callback.accept_stream_user_data,
                                     &t->base, (void *)(uintptr_t)id);
   t->accepting_stream = NULL;
-  return &accepting->parsing;
-}
-
-/*******************************************************************************
- * LOCK MANAGEMENT
- */
-
-static const char *write_state_name(grpc_chttp2_write_state state) {
-  switch (state) {
-    case GRPC_CHTTP2_WRITES_CORKED:
-      return "CORKED";
-    case GRPC_CHTTP2_WRITING_INACTIVE:
-      return "INACTIVE";
-    case GRPC_CHTTP2_WRITE_SCHEDULED:
-      return "SCHEDULED";
-    case GRPC_CHTTP2_WRITING:
-      return "WRITING";
-    case GRPC_CHTTP2_WRITING_STALE_WITH_POLLER:
-      return "WRITING[p=1]";
-    case GRPC_CHTTP2_WRITING_STALE_NO_POLLER:
-      return "WRITING[p=0]";
-  }
-  GPR_UNREACHABLE_CODE(return "UNKNOWN");
-}
-
-static void set_write_state(grpc_chttp2_transport *t,
-                            grpc_chttp2_write_state state, const char *reason) {
-  if (grpc_http_write_state_trace) {
-    gpr_log(GPR_DEBUG, "W:%p %s -> %s because %s", t,
-            write_state_name(t->executor.write_state), write_state_name(state),
-            reason);
-  }
-  t->executor.write_state = state;
-}
-
-static void initiate_writing_locked(grpc_exec_ctx *exec_ctx, void *tp,
-                                    grpc_error *error) {
-  grpc_chttp2_transport *t = tp;
-  GPR_ASSERT(t->executor.write_state == GRPC_CHTTP2_WRITE_SCHEDULED);
-  start_writing(exec_ctx, t);
-}
-
-static void initiate_read_flush_locked(grpc_exec_ctx *exec_ctx, void *tp,
-                                       grpc_error *error) {
-  grpc_chttp2_transport *t = tp;
-  t->executor.check_read_ops_scheduled = false;
-  check_read_ops(exec_ctx, &t->global);
+  return accepting;
 }
 
 /*******************************************************************************
  * OUTPUT PROCESSING
  */
 
+static const char *write_state_name(grpc_chttp2_write_state st) {
+  switch (st) {
+    case GRPC_CHTTP2_WRITE_STATE_IDLE:
+      return "IDLE";
+    case GRPC_CHTTP2_WRITE_STATE_WRITING:
+      return "WRITING";
+    case GRPC_CHTTP2_WRITE_STATE_WRITING_WITH_MORE:
+      return "WRITING+MORE";
+    case GRPC_CHTTP2_WRITE_STATE_WRITING_WITH_MORE_AND_COVERED_BY_POLLER:
+      return "WRITING+MORE+COVERED";
+  }
+  GPR_UNREACHABLE_CODE(return "UNKNOWN");
+}
+
+static void set_write_state(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t,
+                            grpc_chttp2_write_state st, const char *reason) {
+  GRPC_CHTTP2_IF_TRACING(gpr_log(GPR_DEBUG, "W:%p %s state %s -> %s [%s]", t,
+                                 t->is_client ? "CLIENT" : "SERVER",
+                                 write_state_name(t->write_state),
+                                 write_state_name(st), reason));
+  t->write_state = st;
+  if (st == GRPC_CHTTP2_WRITE_STATE_IDLE &&
+      t->close_transport_on_writes_finished != NULL) {
+    grpc_error *err = t->close_transport_on_writes_finished;
+    t->close_transport_on_writes_finished = NULL;
+    close_transport_locked(exec_ctx, t, err);
+  }
+}
+
 void grpc_chttp2_initiate_write(grpc_exec_ctx *exec_ctx,
-                                grpc_chttp2_transport_global *transport_global,
+                                grpc_chttp2_transport *t,
                                 bool covered_by_poller, const char *reason) {
   GPR_TIMER_BEGIN("grpc_chttp2_initiate_write", 0);
 
-  /* Perform state checks, and transition to a scheduled state if appropriate.
-     If we are inactive, schedule a write chain to begin once the transport
-     combiner finishes any executions in its current batch (which may be
-     scheduled AFTER this code executes). The write chain will:
-      - call start_writing, which verifies (under the global lock) that there
-        are things that need to be written by calling
-        grpc_chttp2_unlocking_check_writes, and if so schedules writing_action
-        against the current exec_ctx, to be executed OUTSIDE of the global lock
-      - eventually writing_action results in grpc_chttp2_terminate_writing being
-        called, which re-takes the global lock, updates state, checks if we need
-        to do *another* write immediately, and if so loops back to
-        start_writing.
-
-     Current problems:
-       - too much lock entry/exiting
-       - the writing thread can become stuck indefinitely (punt through the
-         workqueue periodically to fix) */
-
-  grpc_chttp2_transport *t = TRANSPORT_FROM_GLOBAL(transport_global);
-  switch (t->executor.write_state) {
-    case GRPC_CHTTP2_WRITES_CORKED:
+  switch (t->write_state) {
+    case GRPC_CHTTP2_WRITE_STATE_IDLE:
+      set_write_state(exec_ctx, t, GRPC_CHTTP2_WRITE_STATE_WRITING, reason);
+      GRPC_CHTTP2_REF_TRANSPORT(t, "writing");
+      grpc_combiner_execute_finally(exec_ctx, t->combiner,
+                                    &t->write_action_begin_locked,
+                                    GRPC_ERROR_NONE, covered_by_poller);
       break;
-    case GRPC_CHTTP2_WRITING_INACTIVE:
-      set_write_state(t, GRPC_CHTTP2_WRITE_SCHEDULED, reason);
-      REF_TRANSPORT(t, "writing");
-      grpc_combiner_execute_finally(exec_ctx, t->executor.combiner,
-                                    &t->initiate_writing, GRPC_ERROR_NONE,
-                                    covered_by_poller);
+    case GRPC_CHTTP2_WRITE_STATE_WRITING:
+      set_write_state(
+          exec_ctx, t,
+          covered_by_poller
+              ? GRPC_CHTTP2_WRITE_STATE_WRITING_WITH_MORE_AND_COVERED_BY_POLLER
+              : GRPC_CHTTP2_WRITE_STATE_WRITING_WITH_MORE,
+          reason);
       break;
-    case GRPC_CHTTP2_WRITE_SCHEDULED:
+    case GRPC_CHTTP2_WRITE_STATE_WRITING_WITH_MORE:
       if (covered_by_poller) {
-        /* upgrade to note poller is available to cover the write */
-        grpc_combiner_force_async_finally(t->executor.combiner);
+        set_write_state(
+            exec_ctx, t,
+            GRPC_CHTTP2_WRITE_STATE_WRITING_WITH_MORE_AND_COVERED_BY_POLLER,
+            reason);
       }
       break;
-    case GRPC_CHTTP2_WRITING:
-      set_write_state(t,
-                      covered_by_poller ? GRPC_CHTTP2_WRITING_STALE_WITH_POLLER
-                                        : GRPC_CHTTP2_WRITING_STALE_NO_POLLER,
-                      reason);
-      break;
-    case GRPC_CHTTP2_WRITING_STALE_WITH_POLLER:
-      /* nothing to do: write already requested */
-      break;
-    case GRPC_CHTTP2_WRITING_STALE_NO_POLLER:
-      if (covered_by_poller) {
-        /* upgrade to note poller is available to cover the write */
-        set_write_state(t, GRPC_CHTTP2_WRITING_STALE_WITH_POLLER, reason);
-      }
+    case GRPC_CHTTP2_WRITE_STATE_WRITING_WITH_MORE_AND_COVERED_BY_POLLER:
       break;
   }
   GPR_TIMER_END("grpc_chttp2_initiate_write", 0);
 }
 
-static void start_writing(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t) {
-  GPR_TIMER_BEGIN("start_writing", 0);
-  GPR_ASSERT(t->executor.write_state == GRPC_CHTTP2_WRITE_SCHEDULED);
-  if (!t->closed &&
-      grpc_chttp2_unlocking_check_writes(exec_ctx, &t->global, &t->writing)) {
-    set_write_state(t, GRPC_CHTTP2_WRITING, "start_writing");
-    prevent_endpoint_shutdown(t);
-    grpc_exec_ctx_sched(exec_ctx, &t->writing_action, GRPC_ERROR_NONE, NULL);
-  } else {
-    if (t->closed) {
-      set_write_state(t, GRPC_CHTTP2_WRITING_INACTIVE,
-                      "start_writing:transport_closed");
-    } else {
-      set_write_state(t, GRPC_CHTTP2_WRITING_INACTIVE,
-                      "start_writing:nothing_to_write");
-    }
-    end_waiting_for_write(exec_ctx, t, GRPC_ERROR_NONE);
-    UNREF_TRANSPORT(exec_ctx, t, "writing");
+void grpc_chttp2_become_writable(grpc_exec_ctx *exec_ctx,
+                                 grpc_chttp2_transport *t,
+                                 grpc_chttp2_stream *s, bool covered_by_poller,
+                                 const char *reason) {
+  if (!t->closed && grpc_chttp2_list_add_writable_stream(t, s)) {
+    GRPC_CHTTP2_STREAM_REF(s, "chttp2_writing:become");
+    grpc_chttp2_initiate_write(exec_ctx, t, covered_by_poller, reason);
   }
-  GPR_TIMER_END("start_writing", 0);
 }
 
-void grpc_chttp2_become_writable(grpc_exec_ctx *exec_ctx,
-                                 grpc_chttp2_transport_global *transport_global,
-                                 grpc_chttp2_stream_global *stream_global,
-                                 bool covered_by_poller, const char *reason) {
-  if (!TRANSPORT_FROM_GLOBAL(transport_global)->closed &&
-      grpc_chttp2_list_add_writable_stream(transport_global, stream_global)) {
-    GRPC_CHTTP2_STREAM_REF(stream_global, "chttp2_writing");
-    grpc_chttp2_initiate_write(exec_ctx, transport_global, covered_by_poller,
-                               reason);
+static void write_action_begin_locked(grpc_exec_ctx *exec_ctx, void *gt,
+                                      grpc_error *error_ignored) {
+  GPR_TIMER_BEGIN("write_action_begin_locked", 0);
+  grpc_chttp2_transport *t = gt;
+  GPR_ASSERT(t->write_state != GRPC_CHTTP2_WRITE_STATE_IDLE);
+  if (!t->closed && grpc_chttp2_begin_write(exec_ctx, t)) {
+    set_write_state(exec_ctx, t, GRPC_CHTTP2_WRITE_STATE_WRITING,
+                    "begin writing");
+    grpc_exec_ctx_sched(exec_ctx, &t->write_action, GRPC_ERROR_NONE, NULL);
+  } else {
+    set_write_state(exec_ctx, t, GRPC_CHTTP2_WRITE_STATE_IDLE,
+                    "begin writing nothing");
+    GRPC_CHTTP2_UNREF_TRANSPORT(exec_ctx, t, "writing");
   }
+  GPR_TIMER_END("write_action_begin_locked", 0);
+}
+
+static void write_action(grpc_exec_ctx *exec_ctx, void *gt, grpc_error *error) {
+  grpc_chttp2_transport *t = gt;
+  GPR_TIMER_BEGIN("write_action", 0);
+  grpc_endpoint_write(exec_ctx, t->ep, &t->outbuf, &t->write_action_end);
+  GPR_TIMER_END("write_action", 0);
+}
+
+static void write_action_end(grpc_exec_ctx *exec_ctx, void *gt,
+                             grpc_error *error) {
+  grpc_chttp2_transport *t = gt;
+  GPR_TIMER_BEGIN("write_action_end", 0);
+  grpc_combiner_execute(exec_ctx, t->combiner, &t->write_action_end_locked,
+                        GRPC_ERROR_REF(error), false);
+  GPR_TIMER_END("write_action_end", 0);
+}
+
+static void write_action_end_locked(grpc_exec_ctx *exec_ctx, void *tp,
+                                    grpc_error *error) {
+  GPR_TIMER_BEGIN("terminate_writing_with_lock", 0);
+  grpc_chttp2_transport *t = tp;
+
+  if (error != GRPC_ERROR_NONE) {
+    close_transport_locked(exec_ctx, t, GRPC_ERROR_REF(error));
+  }
+
+  grpc_chttp2_end_write(exec_ctx, t, GRPC_ERROR_REF(error));
+
+  switch (t->write_state) {
+    case GRPC_CHTTP2_WRITE_STATE_IDLE:
+      GPR_UNREACHABLE_CODE(break);
+    case GRPC_CHTTP2_WRITE_STATE_WRITING:
+      GPR_TIMER_MARK("state=writing", 0);
+      set_write_state(exec_ctx, t, GRPC_CHTTP2_WRITE_STATE_IDLE,
+                      "finish writing");
+      break;
+    case GRPC_CHTTP2_WRITE_STATE_WRITING_WITH_MORE:
+      GPR_TIMER_MARK("state=writing_stale_no_poller", 0);
+      set_write_state(exec_ctx, t, GRPC_CHTTP2_WRITE_STATE_WRITING,
+                      "continue writing [!covered]");
+      GRPC_CHTTP2_REF_TRANSPORT(t, "writing");
+      grpc_combiner_execute_finally(exec_ctx, t->combiner,
+                                    &t->write_action_begin_locked,
+                                    GRPC_ERROR_NONE, false);
+      break;
+    case GRPC_CHTTP2_WRITE_STATE_WRITING_WITH_MORE_AND_COVERED_BY_POLLER:
+      GPR_TIMER_MARK("state=writing_stale_with_poller", 0);
+      set_write_state(exec_ctx, t, GRPC_CHTTP2_WRITE_STATE_WRITING,
+                      "continue writing [covered]");
+      GRPC_CHTTP2_REF_TRANSPORT(t, "writing");
+      grpc_combiner_execute_finally(exec_ctx, t->combiner,
+                                    &t->write_action_begin_locked,
+                                    GRPC_ERROR_NONE, true);
+      break;
+  }
+
+  GRPC_CHTTP2_UNREF_TRANSPORT(exec_ctx, t, "writing");
+  GPR_TIMER_END("terminate_writing_with_lock", 0);
 }
 
 static void push_setting(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t,
@@ -799,101 +718,26 @@
     gpr_log(GPR_INFO, "Requested parameter %s clamped from %d to %d", sp->name,
             value, use_value);
   }
-  if (use_value != t->global.settings[GRPC_LOCAL_SETTINGS][id]) {
-    t->global.settings[GRPC_LOCAL_SETTINGS][id] = use_value;
-    t->global.dirtied_local_settings = 1;
-    grpc_chttp2_initiate_write(exec_ctx, &t->global, false, "push_setting");
+  if (use_value != t->settings[GRPC_LOCAL_SETTINGS][id]) {
+    t->settings[GRPC_LOCAL_SETTINGS][id] = use_value;
+    t->dirtied_local_settings = 1;
+    grpc_chttp2_initiate_write(exec_ctx, t, false, "push_setting");
   }
 }
 
-/* error may be GRPC_ERROR_NONE if there is no error allocated yet.
-   In that case, use "reason" as the text for a new error. */
-static void end_waiting_for_write(grpc_exec_ctx *exec_ctx,
-                                  grpc_chttp2_transport *t, grpc_error *error) {
-  grpc_chttp2_stream_global *stream_global;
-  while (grpc_chttp2_list_pop_closed_waiting_for_writing(&t->global,
-                                                         &stream_global)) {
-    fail_pending_writes(exec_ctx, &t->global, stream_global,
-                        GRPC_ERROR_REF(error));
-    GRPC_CHTTP2_STREAM_UNREF(exec_ctx, stream_global, "finish_writes");
-  }
-  GRPC_ERROR_UNREF(error);
-}
-
-static void terminate_writing_with_lock(grpc_exec_ctx *exec_ctx, void *tp,
-                                        grpc_error *error) {
-  GPR_TIMER_BEGIN("terminate_writing_with_lock", 0);
-  grpc_chttp2_transport *t = tp;
-  allow_endpoint_shutdown_locked(exec_ctx, t);
-
-  if (error != GRPC_ERROR_NONE) {
-    drop_connection(exec_ctx, t, GRPC_ERROR_REF(error));
-  }
-
-  grpc_chttp2_cleanup_writing(exec_ctx, &t->global, &t->writing);
-
-  end_waiting_for_write(exec_ctx, t, GRPC_ERROR_REF(error));
-
-  switch (t->executor.write_state) {
-    case GRPC_CHTTP2_WRITES_CORKED:
-    case GRPC_CHTTP2_WRITING_INACTIVE:
-    case GRPC_CHTTP2_WRITE_SCHEDULED:
-      GPR_UNREACHABLE_CODE(break);
-    case GRPC_CHTTP2_WRITING:
-      GPR_TIMER_MARK("state=writing", 0);
-      set_write_state(t, GRPC_CHTTP2_WRITING_INACTIVE, "terminate_writing");
-      break;
-    case GRPC_CHTTP2_WRITING_STALE_WITH_POLLER:
-      GPR_TIMER_MARK("state=writing_stale_with_poller", 0);
-      set_write_state(t, GRPC_CHTTP2_WRITE_SCHEDULED, "terminate_writing");
-      REF_TRANSPORT(t, "writing");
-      grpc_combiner_execute_finally(exec_ctx, t->executor.combiner,
-                                    &t->initiate_writing, GRPC_ERROR_NONE,
-                                    true);
-      break;
-    case GRPC_CHTTP2_WRITING_STALE_NO_POLLER:
-      GPR_TIMER_MARK("state=writing_stale_no_poller", 0);
-      set_write_state(t, GRPC_CHTTP2_WRITE_SCHEDULED, "terminate_writing");
-      REF_TRANSPORT(t, "writing");
-      grpc_combiner_execute_finally(exec_ctx, t->executor.combiner,
-                                    &t->initiate_writing, GRPC_ERROR_NONE,
-                                    false);
-      break;
-  }
-
-  UNREF_TRANSPORT(exec_ctx, t, "writing");
-  GPR_TIMER_END("terminate_writing_with_lock", 0);
-}
-
-void grpc_chttp2_terminate_writing(grpc_exec_ctx *exec_ctx,
-                                   void *transport_writing, grpc_error *error) {
-  GPR_TIMER_BEGIN("grpc_chttp2_terminate_writing", 0);
-  grpc_chttp2_transport *t = TRANSPORT_FROM_WRITING(transport_writing);
-  grpc_combiner_execute(exec_ctx, t->executor.combiner, &t->terminate_writing,
-                        GRPC_ERROR_REF(error));
-  GPR_TIMER_END("grpc_chttp2_terminate_writing", 0);
-}
-
-static void writing_action(grpc_exec_ctx *exec_ctx, void *gt,
-                           grpc_error *error) {
-  grpc_chttp2_transport *t = gt;
-  GPR_TIMER_BEGIN("writing_action", 0);
-  grpc_chttp2_perform_writes(exec_ctx, &t->writing, t->ep);
-  GPR_TIMER_END("writing_action", 0);
-}
-
-void grpc_chttp2_add_incoming_goaway(
-    grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_global *transport_global,
-    uint32_t goaway_error, gpr_slice goaway_text) {
+void grpc_chttp2_add_incoming_goaway(grpc_exec_ctx *exec_ctx,
+                                     grpc_chttp2_transport *t,
+                                     uint32_t goaway_error,
+                                     gpr_slice goaway_text) {
   char *msg = gpr_dump_slice(goaway_text, GPR_DUMP_HEX | GPR_DUMP_ASCII);
   GRPC_CHTTP2_IF_TRACING(
       gpr_log(GPR_DEBUG, "got goaway [%d]: %s", goaway_error, msg));
   gpr_slice_unref(goaway_text);
-  transport_global->seen_goaway = 1;
+  t->seen_goaway = 1;
   /* lie: use transient failure from the transport to indicate goaway has been
    * received */
   connectivity_state_set(
-      exec_ctx, transport_global, GRPC_CHANNEL_TRANSIENT_FAILURE,
+      exec_ctx, t, GRPC_CHANNEL_TRANSIENT_FAILURE,
       grpc_error_set_str(
           grpc_error_set_int(GRPC_ERROR_CREATE("GOAWAY received"),
                              GRPC_ERROR_INT_HTTP2_ERROR,
@@ -903,61 +747,49 @@
   gpr_free(msg);
 }
 
-static void maybe_start_some_streams(
-    grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_global *transport_global) {
-  grpc_chttp2_stream_global *stream_global;
+static void maybe_start_some_streams(grpc_exec_ctx *exec_ctx,
+                                     grpc_chttp2_transport *t) {
+  grpc_chttp2_stream *s;
   uint32_t stream_incoming_window;
   /* start streams where we have free grpc_chttp2_stream ids and free
    * concurrency */
-  while (transport_global->next_stream_id <= MAX_CLIENT_STREAM_ID &&
-         transport_global->concurrent_stream_count <
-             transport_global
-                 ->settings[GRPC_PEER_SETTINGS]
-                           [GRPC_CHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS] &&
-         grpc_chttp2_list_pop_waiting_for_concurrency(transport_global,
-                                                      &stream_global)) {
+  while (t->next_stream_id <= MAX_CLIENT_STREAM_ID &&
+         grpc_chttp2_stream_map_size(&t->stream_map) <
+             t->settings[GRPC_PEER_SETTINGS]
+                        [GRPC_CHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS] &&
+         grpc_chttp2_list_pop_waiting_for_concurrency(t, &s)) {
     /* safe since we can't (legally) be parsing this stream yet */
-    grpc_chttp2_stream_parsing *stream_parsing =
-        &STREAM_FROM_GLOBAL(stream_global)->parsing;
     GRPC_CHTTP2_IF_TRACING(gpr_log(
         GPR_DEBUG, "HTTP:%s: Allocating new grpc_chttp2_stream %p to id %d",
-        transport_global->is_client ? "CLI" : "SVR", stream_global,
-        transport_global->next_stream_id));
+        t->is_client ? "CLI" : "SVR", s, t->next_stream_id));
 
-    GPR_ASSERT(stream_global->id == 0);
-    stream_global->id = stream_parsing->id = transport_global->next_stream_id;
-    transport_global->next_stream_id += 2;
+    GPR_ASSERT(s->id == 0);
+    s->id = t->next_stream_id;
+    t->next_stream_id += 2;
 
-    if (transport_global->next_stream_id >= MAX_CLIENT_STREAM_ID) {
-      connectivity_state_set(
-          exec_ctx, transport_global, GRPC_CHANNEL_TRANSIENT_FAILURE,
-          GRPC_ERROR_CREATE("Stream IDs exhausted"), "no_more_stream_ids");
+    if (t->next_stream_id >= MAX_CLIENT_STREAM_ID) {
+      connectivity_state_set(exec_ctx, t, GRPC_CHANNEL_TRANSIENT_FAILURE,
+                             GRPC_ERROR_CREATE("Stream IDs exhausted"),
+                             "no_more_stream_ids");
     }
 
-    stream_global->outgoing_window =
-        transport_global->settings[GRPC_PEER_SETTINGS]
-                                  [GRPC_CHTTP2_SETTINGS_INITIAL_WINDOW_SIZE];
-    stream_parsing->incoming_window = stream_incoming_window =
-        transport_global->settings[GRPC_SENT_SETTINGS]
-                                  [GRPC_CHTTP2_SETTINGS_INITIAL_WINDOW_SIZE];
-    stream_global->max_recv_bytes =
-        GPR_MAX(stream_incoming_window, stream_global->max_recv_bytes);
-    grpc_chttp2_stream_map_add(
-        &TRANSPORT_FROM_GLOBAL(transport_global)->new_stream_map,
-        stream_global->id, STREAM_FROM_GLOBAL(stream_global));
-    stream_global->in_stream_map = true;
-    transport_global->concurrent_stream_count++;
-    grpc_chttp2_become_writable(exec_ctx, transport_global, stream_global, true,
-                                "new_stream");
+    s->outgoing_window = t->settings[GRPC_PEER_SETTINGS]
+                                    [GRPC_CHTTP2_SETTINGS_INITIAL_WINDOW_SIZE];
+    s->incoming_window = stream_incoming_window =
+        t->settings[GRPC_SENT_SETTINGS]
+                   [GRPC_CHTTP2_SETTINGS_INITIAL_WINDOW_SIZE];
+    s->max_recv_bytes = GPR_MAX(stream_incoming_window, s->max_recv_bytes);
+    grpc_chttp2_stream_map_add(&t->stream_map, s->id, s);
+    grpc_chttp2_become_writable(exec_ctx, t, s, true, "new_stream");
   }
   /* cancel out streams that will never be started */
-  while (transport_global->next_stream_id >= MAX_CLIENT_STREAM_ID &&
-         grpc_chttp2_list_pop_waiting_for_concurrency(transport_global,
-                                                      &stream_global)) {
-    cancel_from_api(exec_ctx, transport_global, stream_global,
-                    grpc_error_set_int(
-                        GRPC_ERROR_CREATE("Stream IDs exhausted"),
-                        GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAVAILABLE));
+  while (t->next_stream_id >= MAX_CLIENT_STREAM_ID &&
+         grpc_chttp2_list_pop_waiting_for_concurrency(t, &s)) {
+    grpc_chttp2_cancel_stream(
+        exec_ctx, t, s,
+        grpc_error_set_int(GRPC_ERROR_CREATE("Stream IDs exhausted"),
+                           GRPC_ERROR_INT_GRPC_STATUS,
+                           GRPC_STATUS_UNAVAILABLE));
   }
 }
 
@@ -969,48 +801,125 @@
   return closure;
 }
 
-void grpc_chttp2_complete_closure_step(
-    grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_global *transport_global,
-    grpc_chttp2_stream_global *stream_global, grpc_closure **pclosure,
-    grpc_error *error) {
+static void null_then_run_closure(grpc_exec_ctx *exec_ctx,
+                                  grpc_closure **closure, grpc_error *error) {
+  grpc_closure *c = *closure;
+  *closure = NULL;
+  grpc_closure_run(exec_ctx, c, error);
+}
+
+void grpc_chttp2_complete_closure_step(grpc_exec_ctx *exec_ctx,
+                                       grpc_chttp2_transport *t,
+                                       grpc_chttp2_stream *s,
+                                       grpc_closure **pclosure,
+                                       grpc_error *error, const char *desc) {
   grpc_closure *closure = *pclosure;
+  *pclosure = NULL;
   if (closure == NULL) {
     GRPC_ERROR_UNREF(error);
     return;
   }
   closure->next_data.scratch -= CLOSURE_BARRIER_FIRST_REF_BIT;
   if (error != GRPC_ERROR_NONE) {
-    if (closure->error == GRPC_ERROR_NONE) {
-      closure->error =
+    if (closure->error_data.error == GRPC_ERROR_NONE) {
+      closure->error_data.error =
           GRPC_ERROR_CREATE("Error in HTTP transport completing operation");
-      closure->error = grpc_error_set_str(
-          closure->error, GRPC_ERROR_STR_TARGET_ADDRESS,
-          TRANSPORT_FROM_GLOBAL(transport_global)->peer_string);
+      closure->error_data.error =
+          grpc_error_set_str(closure->error_data.error,
+                             GRPC_ERROR_STR_TARGET_ADDRESS, t->peer_string);
     }
-    closure->error = grpc_error_add_child(closure->error, error);
+    closure->error_data.error =
+        grpc_error_add_child(closure->error_data.error, error);
   }
   if (closure->next_data.scratch < CLOSURE_BARRIER_FIRST_REF_BIT) {
     if (closure->next_data.scratch & CLOSURE_BARRIER_STATS_BIT) {
-      grpc_transport_move_stats(&stream_global->stats,
-                                stream_global->collecting_stats);
-      stream_global->collecting_stats = NULL;
+      grpc_transport_move_stats(&s->stats, s->collecting_stats);
+      s->collecting_stats = NULL;
     }
-    grpc_exec_ctx_sched(exec_ctx, closure, closure->error, NULL);
+    grpc_closure_run(exec_ctx, closure, closure->error_data.error);
   }
-  *pclosure = NULL;
 }
 
-static int contains_non_ok_status(
-    grpc_chttp2_transport_global *transport_global,
-    grpc_metadata_batch *batch) {
+static bool contains_non_ok_status(grpc_metadata_batch *batch) {
   grpc_linked_mdelem *l;
   for (l = batch->list.head; l; l = l->next) {
     if (l->md->key == GRPC_MDSTR_GRPC_STATUS &&
         l->md != GRPC_MDELEM_GRPC_STATUS_0) {
-      return 1;
+      return true;
     }
   }
-  return 0;
+  return false;
+}
+
+static void add_fetched_slice_locked(grpc_exec_ctx *exec_ctx,
+                                     grpc_chttp2_transport *t,
+                                     grpc_chttp2_stream *s) {
+  s->fetched_send_message_length +=
+      (uint32_t)GPR_SLICE_LENGTH(s->fetching_slice);
+  gpr_slice_buffer_add(&s->flow_controlled_buffer, s->fetching_slice);
+  if (s->id != 0) {
+    grpc_chttp2_become_writable(exec_ctx, t, s, true, "op.send_message");
+  }
+}
+
+static void continue_fetching_send_locked(grpc_exec_ctx *exec_ctx,
+                                          grpc_chttp2_transport *t,
+                                          grpc_chttp2_stream *s) {
+  for (;;) {
+    if (s->fetching_send_message == NULL) {
+      /* Stream was cancelled before message fetch completed */
+      abort(); /* TODO(ctiller): what cleanup here? */
+      return;  /* early out */
+    }
+    if (s->fetched_send_message_length == s->fetching_send_message->length) {
+      int64_t notify_offset = s->next_message_end_offset;
+      if (notify_offset <= s->flow_controlled_bytes_written) {
+        grpc_chttp2_complete_closure_step(
+            exec_ctx, t, s, &s->fetching_send_message_finished, GRPC_ERROR_NONE,
+            "fetching_send_message_finished");
+      } else {
+        grpc_chttp2_write_cb *cb = t->write_cb_pool;
+        if (cb == NULL) {
+          cb = gpr_malloc(sizeof(*cb));
+        } else {
+          t->write_cb_pool = cb->next;
+        }
+        cb->call_at_byte = notify_offset;
+        cb->closure = s->fetching_send_message_finished;
+        s->fetching_send_message_finished = NULL;
+        cb->next = s->on_write_finished_cbs;
+        s->on_write_finished_cbs = cb;
+      }
+      s->fetching_send_message = NULL;
+      return; /* early out */
+    } else if (grpc_byte_stream_next(exec_ctx, s->fetching_send_message,
+                                     &s->fetching_slice, UINT32_MAX,
+                                     &s->complete_fetch)) {
+      add_fetched_slice_locked(exec_ctx, t, s);
+    }
+  }
+}
+
+static void complete_fetch_locked(grpc_exec_ctx *exec_ctx, void *gs,
+                                  grpc_error *error) {
+  grpc_chttp2_stream *s = gs;
+  grpc_chttp2_transport *t = s->t;
+  if (error == GRPC_ERROR_NONE) {
+    add_fetched_slice_locked(exec_ctx, t, s);
+    continue_fetching_send_locked(exec_ctx, t, s);
+  } else {
+    /* TODO(ctiller): what to do here */
+    abort();
+  }
+}
+
+static void complete_fetch(grpc_exec_ctx *exec_ctx, void *gs,
+                           grpc_error *error) {
+  grpc_chttp2_stream *s = gs;
+  grpc_chttp2_transport *t = s->t;
+  grpc_combiner_execute(exec_ctx, t->combiner, &s->complete_fetch_locked,
+                        GRPC_ERROR_REF(error),
+                        s->complete_fetch_covered_by_poller);
 }
 
 static void do_nothing(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) {}
@@ -1022,12 +931,11 @@
   grpc_transport_stream_op *op = stream_op;
   grpc_chttp2_transport *t = op->transport_private.args[0];
   grpc_chttp2_stream *s = op->transport_private.args[1];
-  grpc_chttp2_transport_global *transport_global = &t->global;
-  grpc_chttp2_stream_global *stream_global = &s->global;
 
   if (grpc_http_trace) {
     char *str = grpc_transport_stream_op_string(op);
-    gpr_log(GPR_DEBUG, "perform_stream_op_locked: %s", str);
+    gpr_log(GPR_DEBUG, "perform_stream_op_locked: %s; on_complete = %p", str,
+            op->on_complete);
     gpr_free(str);
   }
 
@@ -1035,45 +943,42 @@
   if (on_complete == NULL) {
     on_complete = grpc_closure_create(do_nothing, NULL);
   }
+
   /* use final_data as a barrier until enqueue time; the inital counter is
      dropped at the end of this function */
   on_complete->next_data.scratch = CLOSURE_BARRIER_FIRST_REF_BIT;
-  on_complete->error = GRPC_ERROR_NONE;
+  on_complete->error_data.error = GRPC_ERROR_NONE;
 
   if (op->collect_stats != NULL) {
-    GPR_ASSERT(stream_global->collecting_stats == NULL);
-    stream_global->collecting_stats = op->collect_stats;
+    GPR_ASSERT(s->collecting_stats == NULL);
+    s->collecting_stats = op->collect_stats;
     on_complete->next_data.scratch |= CLOSURE_BARRIER_STATS_BIT;
   }
 
   if (op->cancel_error != GRPC_ERROR_NONE) {
-    cancel_from_api(exec_ctx, transport_global, stream_global,
-                    GRPC_ERROR_REF(op->cancel_error));
+    grpc_chttp2_cancel_stream(exec_ctx, t, s, GRPC_ERROR_REF(op->cancel_error));
   }
 
   if (op->close_error != GRPC_ERROR_NONE) {
-    close_from_api(exec_ctx, transport_global, stream_global,
-                   GRPC_ERROR_REF(op->close_error));
+    close_from_api(exec_ctx, t, s, GRPC_ERROR_REF(op->close_error));
   }
 
   if (op->send_initial_metadata != NULL) {
-    GPR_ASSERT(stream_global->send_initial_metadata_finished == NULL);
-    stream_global->send_initial_metadata_finished =
-        add_closure_barrier(on_complete);
-    stream_global->send_initial_metadata = op->send_initial_metadata;
+    GPR_ASSERT(s->send_initial_metadata_finished == NULL);
+    s->send_initial_metadata_finished = add_closure_barrier(on_complete);
+    s->send_initial_metadata = op->send_initial_metadata;
     const size_t metadata_size =
         grpc_metadata_batch_size(op->send_initial_metadata);
     const size_t metadata_peer_limit =
-        transport_global->settings[GRPC_PEER_SETTINGS]
-                                  [GRPC_CHTTP2_SETTINGS_MAX_HEADER_LIST_SIZE];
-    if (transport_global->is_client) {
-      stream_global->deadline =
-          gpr_time_min(stream_global->deadline,
-                       stream_global->send_initial_metadata->deadline);
+        t->settings[GRPC_PEER_SETTINGS]
+                   [GRPC_CHTTP2_SETTINGS_MAX_HEADER_LIST_SIZE];
+    if (t->is_client) {
+      s->deadline =
+          gpr_time_min(s->deadline, s->send_initial_metadata->deadline);
     }
     if (metadata_size > metadata_peer_limit) {
-      cancel_from_api(
-          exec_ctx, transport_global, stream_global,
+      grpc_chttp2_cancel_stream(
+          exec_ctx, t, s,
           grpc_error_set_int(
               grpc_error_set_int(
                   grpc_error_set_int(
@@ -1083,64 +988,78 @@
                   GRPC_ERROR_INT_LIMIT, (intptr_t)metadata_peer_limit),
               GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_RESOURCE_EXHAUSTED));
     } else {
-      if (contains_non_ok_status(transport_global, op->send_initial_metadata)) {
-        stream_global->seen_error = true;
-        grpc_chttp2_list_add_check_read_ops(exec_ctx, transport_global,
-                                            stream_global);
+      if (contains_non_ok_status(op->send_initial_metadata)) {
+        s->seen_error = true;
       }
-      if (!stream_global->write_closed) {
-        if (transport_global->is_client) {
-          GPR_ASSERT(stream_global->id == 0);
-          grpc_chttp2_list_add_waiting_for_concurrency(transport_global,
-                                                       stream_global);
-          maybe_start_some_streams(exec_ctx, transport_global);
+      if (!s->write_closed) {
+        if (t->is_client) {
+          GPR_ASSERT(s->id == 0);
+          grpc_chttp2_list_add_waiting_for_concurrency(t, s);
+          maybe_start_some_streams(exec_ctx, t);
         } else {
-          GPR_ASSERT(stream_global->id != 0);
-          grpc_chttp2_become_writable(exec_ctx, transport_global, stream_global,
-                                      true, "op.send_initial_metadata");
+          GPR_ASSERT(s->id != 0);
+          grpc_chttp2_become_writable(exec_ctx, t, s, true,
+                                      "op.send_initial_metadata");
         }
       } else {
-        stream_global->send_trailing_metadata = NULL;
+        s->send_trailing_metadata = NULL;
         grpc_chttp2_complete_closure_step(
-            exec_ctx, transport_global, stream_global,
-            &stream_global->send_initial_metadata_finished,
+            exec_ctx, t, s, &s->send_initial_metadata_finished,
             GRPC_ERROR_CREATE(
-                "Attempt to send initial metadata after stream was closed"));
+                "Attempt to send initial metadata after stream was closed"),
+            "send_initial_metadata_finished");
       }
     }
   }
 
   if (op->send_message != NULL) {
-    GPR_ASSERT(stream_global->send_message_finished == NULL);
-    GPR_ASSERT(stream_global->send_message == NULL);
-    stream_global->send_message_finished = add_closure_barrier(on_complete);
-    if (stream_global->write_closed) {
+    s->fetching_send_message_finished = add_closure_barrier(op->on_complete);
+    if (s->write_closed) {
       grpc_chttp2_complete_closure_step(
-          exec_ctx, transport_global, stream_global,
-          &stream_global->send_message_finished,
-          GRPC_ERROR_CREATE("Attempt to send message after stream was closed"));
+          exec_ctx, t, s, &s->fetching_send_message_finished,
+          GRPC_ERROR_CREATE("Attempt to send message after stream was closed"),
+          "fetching_send_message_finished");
     } else {
-      stream_global->send_message = op->send_message;
-      if (stream_global->id != 0) {
-        grpc_chttp2_become_writable(exec_ctx, transport_global, stream_global,
-                                    true, "op.send_message");
+      GPR_ASSERT(s->fetching_send_message == NULL);
+      uint8_t *frame_hdr =
+          gpr_slice_buffer_tiny_add(&s->flow_controlled_buffer, 5);
+      uint32_t flags = op->send_message->flags;
+      frame_hdr[0] = (flags & GRPC_WRITE_INTERNAL_COMPRESS) != 0;
+      size_t len = op->send_message->length;
+      frame_hdr[1] = (uint8_t)(len >> 24);
+      frame_hdr[2] = (uint8_t)(len >> 16);
+      frame_hdr[3] = (uint8_t)(len >> 8);
+      frame_hdr[4] = (uint8_t)(len);
+      s->fetching_send_message = op->send_message;
+      s->fetched_send_message_length = 0;
+      s->next_message_end_offset = s->flow_controlled_bytes_written +
+                                   (int64_t)s->flow_controlled_buffer.length +
+                                   (int64_t)len;
+      s->complete_fetch_covered_by_poller = op->covered_by_poller;
+      if (flags & GRPC_WRITE_BUFFER_HINT) {
+        /* allow up to 64kb to be buffered */
+        /* TODO(ctiller): make this configurable */
+        s->next_message_end_offset -= 65536;
+      }
+      continue_fetching_send_locked(exec_ctx, t, s);
+      if (s->id != 0) {
+        grpc_chttp2_become_writable(exec_ctx, t, s, true, "op.send_message");
       }
     }
   }
 
   if (op->send_trailing_metadata != NULL) {
-    GPR_ASSERT(stream_global->send_trailing_metadata_finished == NULL);
-    stream_global->send_trailing_metadata_finished =
-        add_closure_barrier(on_complete);
-    stream_global->send_trailing_metadata = op->send_trailing_metadata;
+    GPR_ASSERT(s->send_trailing_metadata_finished == NULL);
+    s->send_trailing_metadata_finished = add_closure_barrier(on_complete);
+    s->send_trailing_metadata = op->send_trailing_metadata;
     const size_t metadata_size =
         grpc_metadata_batch_size(op->send_trailing_metadata);
     const size_t metadata_peer_limit =
-        transport_global->settings[GRPC_PEER_SETTINGS]
-                                  [GRPC_CHTTP2_SETTINGS_MAX_HEADER_LIST_SIZE];
+        t->settings[GRPC_PEER_SETTINGS]
+                   [GRPC_CHTTP2_SETTINGS_MAX_HEADER_LIST_SIZE];
     if (metadata_size > metadata_peer_limit) {
-      cancel_from_api(
-          exec_ctx, transport_global, stream_global,
+      grpc_chttp2_cancel_stream(
+          exec_ctx, t, s,
           grpc_error_set_int(
               grpc_error_set_int(
                   grpc_error_set_int(
@@ -1150,69 +1069,59 @@
                   GRPC_ERROR_INT_LIMIT, (intptr_t)metadata_peer_limit),
               GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_RESOURCE_EXHAUSTED));
     } else {
-      if (contains_non_ok_status(transport_global,
-                                 op->send_trailing_metadata)) {
-        stream_global->seen_error = true;
-        grpc_chttp2_list_add_check_read_ops(exec_ctx, transport_global,
-                                            stream_global);
+      if (contains_non_ok_status(op->send_trailing_metadata)) {
+        s->seen_error = true;
       }
-      if (stream_global->write_closed) {
-        stream_global->send_trailing_metadata = NULL;
+      if (s->write_closed) {
+        s->send_trailing_metadata = NULL;
         grpc_chttp2_complete_closure_step(
-            exec_ctx, transport_global, stream_global,
-            &stream_global->send_trailing_metadata_finished,
+            exec_ctx, t, s, &s->send_trailing_metadata_finished,
             grpc_metadata_batch_is_empty(op->send_trailing_metadata)
                 ? GRPC_ERROR_NONE
                 : GRPC_ERROR_CREATE("Attempt to send trailing metadata after "
-                                    "stream was closed"));
-      } else if (stream_global->id != 0) {
+                                    "stream was closed"),
+            "send_trailing_metadata_finished");
+      } else if (s->id != 0) {
         /* TODO(ctiller): check if there's flow control for any outstanding
            bytes before going writable */
-        grpc_chttp2_become_writable(exec_ctx, transport_global, stream_global,
-                                    true, "op.send_trailing_metadata");
+        grpc_chttp2_become_writable(exec_ctx, t, s, true,
+                                    "op.send_trailing_metadata");
       }
     }
   }
 
   if (op->recv_initial_metadata != NULL) {
-    GPR_ASSERT(stream_global->recv_initial_metadata_ready == NULL);
-    stream_global->recv_initial_metadata_ready =
-        op->recv_initial_metadata_ready;
-    stream_global->recv_initial_metadata = op->recv_initial_metadata;
-    grpc_chttp2_list_add_check_read_ops(exec_ctx, transport_global,
-                                        stream_global);
+    GPR_ASSERT(s->recv_initial_metadata_ready == NULL);
+    s->recv_initial_metadata_ready = op->recv_initial_metadata_ready;
+    s->recv_initial_metadata = op->recv_initial_metadata;
+    grpc_chttp2_maybe_complete_recv_initial_metadata(exec_ctx, t, s);
   }
 
   if (op->recv_message != NULL) {
-    GPR_ASSERT(stream_global->recv_message_ready == NULL);
-    stream_global->recv_message_ready = op->recv_message_ready;
-    stream_global->recv_message = op->recv_message;
-    if (stream_global->id != 0 &&
-        (stream_global->incoming_frames.head == NULL ||
-         stream_global->incoming_frames.head->is_tail)) {
-      incoming_byte_stream_update_flow_control(
-          exec_ctx, transport_global, stream_global,
-          transport_global->stream_lookahead, 0);
+    GPR_ASSERT(s->recv_message_ready == NULL);
+    s->recv_message_ready = op->recv_message_ready;
+    s->recv_message = op->recv_message;
+    if (s->id != 0 &&
+        (s->incoming_frames.head == NULL || s->incoming_frames.head->is_tail)) {
+      incoming_byte_stream_update_flow_control(exec_ctx, t, s,
+                                               t->stream_lookahead, 0);
     }
-    grpc_chttp2_list_add_check_read_ops(exec_ctx, transport_global,
-                                        stream_global);
+    grpc_chttp2_maybe_complete_recv_message(exec_ctx, t, s);
   }
 
   if (op->recv_trailing_metadata != NULL) {
-    GPR_ASSERT(stream_global->recv_trailing_metadata_finished == NULL);
-    stream_global->recv_trailing_metadata_finished =
-        add_closure_barrier(on_complete);
-    stream_global->recv_trailing_metadata = op->recv_trailing_metadata;
-    stream_global->final_metadata_requested = true;
-    grpc_chttp2_list_add_check_read_ops(exec_ctx, transport_global,
-                                        stream_global);
+    GPR_ASSERT(s->recv_trailing_metadata_finished == NULL);
+    s->recv_trailing_metadata_finished = add_closure_barrier(on_complete);
+    s->recv_trailing_metadata = op->recv_trailing_metadata;
+    s->final_metadata_requested = true;
+    grpc_chttp2_maybe_complete_recv_trailing_metadata(exec_ctx, t, s);
   }
 
-  grpc_chttp2_complete_closure_step(exec_ctx, transport_global, stream_global,
-                                    &on_complete, GRPC_ERROR_NONE);
+  grpc_chttp2_complete_closure_step(exec_ctx, t, s, &on_complete,
+                                    GRPC_ERROR_NONE, "op->on_complete");
 
   GPR_TIMER_END("perform_stream_op_locked", 0);
-  GRPC_CHTTP2_STREAM_UNREF(exec_ctx, &s->global, "perform_stream_op");
+  GRPC_CHTTP2_STREAM_UNREF(exec_ctx, s, "perform_stream_op");
 }
 
 static void perform_stream_op(grpc_exec_ctx *exec_ctx, grpc_transport *gt,
@@ -1220,70 +1129,60 @@
   GPR_TIMER_BEGIN("perform_stream_op", 0);
   grpc_chttp2_transport *t = (grpc_chttp2_transport *)gt;
   grpc_chttp2_stream *s = (grpc_chttp2_stream *)gs;
+
+  if (grpc_http_trace) {
+    char *str = grpc_transport_stream_op_string(op);
+    gpr_log(GPR_DEBUG, "perform_stream_op[s=%p/%d]: %s", s, s->id, str);
+    gpr_free(str);
+  }
+
   grpc_closure_init(&op->transport_private.closure, perform_stream_op_locked,
                     op);
   op->transport_private.args[0] = gt;
   op->transport_private.args[1] = gs;
-  GRPC_CHTTP2_STREAM_REF(&s->global, "perform_stream_op");
-  grpc_combiner_execute(exec_ctx, t->executor.combiner,
-                        &op->transport_private.closure, GRPC_ERROR_NONE);
+  GRPC_CHTTP2_STREAM_REF(s, "perform_stream_op");
+  grpc_combiner_execute(exec_ctx, t->combiner, &op->transport_private.closure,
+                        GRPC_ERROR_NONE, op->covered_by_poller);
   GPR_TIMER_END("perform_stream_op", 0);
 }
 
 static void send_ping_locked(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t,
                              grpc_closure *on_recv) {
   grpc_chttp2_outstanding_ping *p = gpr_malloc(sizeof(*p));
-  p->next = &t->global.pings;
+  p->next = &t->pings;
   p->prev = p->next->prev;
   p->prev->next = p->next->prev = p;
-  p->id[0] = (uint8_t)((t->global.ping_counter >> 56) & 0xff);
-  p->id[1] = (uint8_t)((t->global.ping_counter >> 48) & 0xff);
-  p->id[2] = (uint8_t)((t->global.ping_counter >> 40) & 0xff);
-  p->id[3] = (uint8_t)((t->global.ping_counter >> 32) & 0xff);
-  p->id[4] = (uint8_t)((t->global.ping_counter >> 24) & 0xff);
-  p->id[5] = (uint8_t)((t->global.ping_counter >> 16) & 0xff);
-  p->id[6] = (uint8_t)((t->global.ping_counter >> 8) & 0xff);
-  p->id[7] = (uint8_t)(t->global.ping_counter & 0xff);
+  p->id[0] = (uint8_t)((t->ping_counter >> 56) & 0xff);
+  p->id[1] = (uint8_t)((t->ping_counter >> 48) & 0xff);
+  p->id[2] = (uint8_t)((t->ping_counter >> 40) & 0xff);
+  p->id[3] = (uint8_t)((t->ping_counter >> 32) & 0xff);
+  p->id[4] = (uint8_t)((t->ping_counter >> 24) & 0xff);
+  p->id[5] = (uint8_t)((t->ping_counter >> 16) & 0xff);
+  p->id[6] = (uint8_t)((t->ping_counter >> 8) & 0xff);
+  p->id[7] = (uint8_t)(t->ping_counter & 0xff);
+  t->ping_counter++;
   p->on_recv = on_recv;
-  gpr_slice_buffer_add(&t->global.qbuf, grpc_chttp2_ping_create(0, p->id));
-  grpc_chttp2_initiate_write(exec_ctx, &t->global, true, "send_ping");
+  gpr_slice_buffer_add(&t->qbuf, grpc_chttp2_ping_create(0, p->id));
+  grpc_chttp2_initiate_write(exec_ctx, t, true, "send_ping");
 }
 
-typedef struct ack_ping_args {
-  grpc_closure closure;
-  grpc_chttp2_transport *t;
-  uint8_t opaque_8bytes[8];
-} ack_ping_args;
-
-static void ack_ping_locked(grpc_exec_ctx *exec_ctx, void *a,
-                            grpc_error *error_ignored) {
-  ack_ping_args *args = a;
+void grpc_chttp2_ack_ping(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t,
+                          const uint8_t *opaque_8bytes) {
   grpc_chttp2_outstanding_ping *ping;
-  grpc_chttp2_transport_global *transport_global = &args->t->global;
-  for (ping = transport_global->pings.next; ping != &transport_global->pings;
-       ping = ping->next) {
-    if (0 == memcmp(args->opaque_8bytes, ping->id, 8)) {
+  for (ping = t->pings.next; ping != &t->pings; ping = ping->next) {
+    if (0 == memcmp(opaque_8bytes, ping->id, 8)) {
       grpc_exec_ctx_sched(exec_ctx, ping->on_recv, GRPC_ERROR_NONE, NULL);
       ping->next->prev = ping->prev;
       ping->prev->next = ping->next;
       gpr_free(ping);
-      break;
+      return;
     }
   }
-  UNREF_TRANSPORT(exec_ctx, args->t, "ack_ping");
-  gpr_free(args);
-}
-
-void grpc_chttp2_ack_ping(grpc_exec_ctx *exec_ctx,
-                          grpc_chttp2_transport_parsing *transport_parsing,
-                          const uint8_t *opaque_8bytes) {
-  ack_ping_args *args = gpr_malloc(sizeof(*args));
-  args->t = TRANSPORT_FROM_PARSING(transport_parsing);
-  memcpy(args->opaque_8bytes, opaque_8bytes, sizeof(args->opaque_8bytes));
-  grpc_closure_init(&args->closure, ack_ping_locked, args);
-  REF_TRANSPORT(args->t, "ack_ping");
-  grpc_combiner_execute(exec_ctx, args->t->executor.combiner, &args->closure,
-                        GRPC_ERROR_NONE);
+  char *msg = gpr_dump((const char *)opaque_8bytes, 8, GPR_DUMP_HEX);
+  char *from = grpc_endpoint_get_peer(t->ep);
+  gpr_log(GPR_DEBUG, "Unknown ping response from %s: %s", from, msg);
+  gpr_free(from);
+  gpr_free(msg);
 }
 
 static void perform_transport_op_locked(grpc_exec_ctx *exec_ctx,
@@ -1293,15 +1192,6 @@
   grpc_chttp2_transport *t = op->transport_private.args[0];
   grpc_error *close_transport = op->disconnect_with_error;
 
-  /* If there's a set_accept_stream ensure that we're not parsing
-     to avoid changing things out from underneath */
-  if (t->executor.parsing_active && op->set_accept_stream) {
-    GPR_ASSERT(t->post_parsing_op == NULL);
-    t->post_parsing_op = gpr_malloc(sizeof(*op));
-    memcpy(t->post_parsing_op, op, sizeof(*op));
-    return;
-  }
-
   if (op->on_connectivity_state_change != NULL) {
     grpc_connectivity_state_notify_on_state_change(
         exec_ctx, &t->channel_callback.state_tracker, op->connectivity_state,
@@ -1309,15 +1199,15 @@
   }
 
   if (op->send_goaway) {
-    t->global.sent_goaway = 1;
+    t->sent_goaway = 1;
     grpc_chttp2_goaway_append(
-        t->global.last_incoming_stream_id,
+        t->last_new_stream_id,
         (uint32_t)grpc_chttp2_grpc_status_to_http2_error(op->goaway_status),
-        gpr_slice_ref(*op->goaway_message), &t->global.qbuf);
-    close_transport = grpc_chttp2_has_streams(t)
-                          ? GRPC_ERROR_NONE
-                          : GRPC_ERROR_CREATE("GOAWAY sent");
-    grpc_chttp2_initiate_write(exec_ctx, &t->global, false, "goaway_sent");
+        gpr_slice_ref(*op->goaway_message), &t->qbuf);
+    close_transport = grpc_chttp2_stream_map_size(&t->stream_map) == 0
+                          ? GRPC_ERROR_CREATE("GOAWAY sent")
+                          : GRPC_ERROR_NONE;
+    grpc_chttp2_initiate_write(exec_ctx, t, false, "goaway_sent");
   }
 
   if (op->set_accept_stream) {
@@ -1342,154 +1232,127 @@
     close_transport_locked(exec_ctx, t, close_transport);
   }
 
-  grpc_exec_ctx_sched(exec_ctx, op->on_consumed, GRPC_ERROR_NONE, NULL);
+  grpc_closure_run(exec_ctx, op->on_consumed, GRPC_ERROR_NONE);
 
-  UNREF_TRANSPORT(exec_ctx, t, "transport_op");
+  GRPC_CHTTP2_UNREF_TRANSPORT(exec_ctx, t, "transport_op");
 }
 
 static void perform_transport_op(grpc_exec_ctx *exec_ctx, grpc_transport *gt,
                                  grpc_transport_op *op) {
   grpc_chttp2_transport *t = (grpc_chttp2_transport *)gt;
+  char *msg = grpc_transport_op_string(op);
+  gpr_free(msg);
   op->transport_private.args[0] = gt;
   grpc_closure_init(&op->transport_private.closure, perform_transport_op_locked,
                     op);
-  REF_TRANSPORT(t, "transport_op");
-  grpc_combiner_execute(exec_ctx, t->executor.combiner,
-                        &op->transport_private.closure, GRPC_ERROR_NONE);
+  GRPC_CHTTP2_REF_TRANSPORT(t, "transport_op");
+  grpc_combiner_execute(exec_ctx, t->combiner, &op->transport_private.closure,
+                        GRPC_ERROR_NONE, false);
 }
 
 /*******************************************************************************
  * INPUT PROCESSING - GENERAL
  */
 
-static void check_read_ops(grpc_exec_ctx *exec_ctx,
-                           grpc_chttp2_transport_global *transport_global) {
-  GPR_TIMER_BEGIN("check_read_ops", 0);
-  grpc_chttp2_stream_global *stream_global;
+void grpc_chttp2_maybe_complete_recv_initial_metadata(grpc_exec_ctx *exec_ctx,
+                                                      grpc_chttp2_transport *t,
+                                                      grpc_chttp2_stream *s) {
   grpc_byte_stream *bs;
-  while (
-      grpc_chttp2_list_pop_check_read_ops(transport_global, &stream_global)) {
-    if (stream_global->recv_initial_metadata_ready != NULL &&
-        stream_global->published_initial_metadata) {
-      if (stream_global->seen_error) {
-        while ((bs = grpc_chttp2_incoming_frame_queue_pop(
-                    &stream_global->incoming_frames)) != NULL) {
-          incoming_byte_stream_destroy_locked(exec_ctx, bs, GRPC_ERROR_NONE);
-        }
-        if (stream_global->exceeded_metadata_size) {
-          cancel_from_api(
-              exec_ctx, transport_global, stream_global,
-              grpc_error_set_int(
-                  GRPC_ERROR_CREATE(
-                      "received initial metadata size exceeds limit"),
-                  GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_RESOURCE_EXHAUSTED));
-        }
-      }
-      grpc_chttp2_incoming_metadata_buffer_publish(
-          &stream_global->received_initial_metadata,
-          stream_global->recv_initial_metadata);
-      grpc_exec_ctx_sched(exec_ctx, stream_global->recv_initial_metadata_ready,
-                          GRPC_ERROR_NONE, NULL);
-      stream_global->recv_initial_metadata_ready = NULL;
-    }
-    if (stream_global->recv_message_ready != NULL) {
-      while (stream_global->final_metadata_requested &&
-             stream_global->seen_error &&
-             (bs = grpc_chttp2_incoming_frame_queue_pop(
-                  &stream_global->incoming_frames)) != NULL) {
+  if (s->recv_initial_metadata_ready != NULL &&
+      s->published_metadata[0] != GRPC_METADATA_NOT_PUBLISHED) {
+    if (s->seen_error) {
+      while ((bs = grpc_chttp2_incoming_frame_queue_pop(&s->incoming_frames)) !=
+             NULL) {
         incoming_byte_stream_destroy_locked(exec_ctx, bs, GRPC_ERROR_NONE);
       }
-      if (stream_global->incoming_frames.head != NULL) {
-        *stream_global->recv_message = grpc_chttp2_incoming_frame_queue_pop(
-            &stream_global->incoming_frames);
-        GPR_ASSERT(*stream_global->recv_message != NULL);
-        grpc_exec_ctx_sched(exec_ctx, stream_global->recv_message_ready,
-                            GRPC_ERROR_NONE, NULL);
-        stream_global->recv_message_ready = NULL;
-      } else if (stream_global->published_trailing_metadata) {
-        *stream_global->recv_message = NULL;
-        grpc_exec_ctx_sched(exec_ctx, stream_global->recv_message_ready,
-                            GRPC_ERROR_NONE, NULL);
-        stream_global->recv_message_ready = NULL;
-      }
     }
-    if (stream_global->recv_trailing_metadata_finished != NULL &&
-        stream_global->read_closed && stream_global->write_closed) {
-      if (stream_global->seen_error) {
-        while ((bs = grpc_chttp2_incoming_frame_queue_pop(
-                    &stream_global->incoming_frames)) != NULL) {
-          incoming_byte_stream_destroy_locked(exec_ctx, bs, GRPC_ERROR_NONE);
-        }
-        if (stream_global->exceeded_metadata_size) {
-          cancel_from_api(
-              exec_ctx, transport_global, stream_global,
-              grpc_error_set_int(
-                  GRPC_ERROR_CREATE(
-                      "received trailing metadata size exceeds limit"),
-                  GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_RESOURCE_EXHAUSTED));
-        }
-      }
-      if (stream_global->all_incoming_byte_streams_finished) {
-        grpc_chttp2_incoming_metadata_buffer_publish(
-            &stream_global->received_trailing_metadata,
-            stream_global->recv_trailing_metadata);
-        grpc_chttp2_complete_closure_step(
-            exec_ctx, transport_global, stream_global,
-            &stream_global->recv_trailing_metadata_finished, GRPC_ERROR_NONE);
-      }
-    }
+    grpc_chttp2_incoming_metadata_buffer_publish(&s->metadata_buffer[0],
+                                                 s->recv_initial_metadata);
+    null_then_run_closure(exec_ctx, &s->recv_initial_metadata_ready,
+                          GRPC_ERROR_NONE);
   }
-  GPR_TIMER_END("check_read_ops", 0);
 }
 
-static void decrement_active_streams_locked(
-    grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_global *transport_global,
-    grpc_chttp2_stream_global *stream_global) {
-  if ((stream_global->all_incoming_byte_streams_finished =
-           gpr_unref(&stream_global->active_streams))) {
-    grpc_chttp2_list_add_check_read_ops(exec_ctx, transport_global,
-                                        stream_global);
+void grpc_chttp2_maybe_complete_recv_message(grpc_exec_ctx *exec_ctx,
+                                             grpc_chttp2_transport *t,
+                                             grpc_chttp2_stream *s) {
+  grpc_byte_stream *bs;
+  if (s->recv_message_ready != NULL) {
+    while (s->final_metadata_requested && s->seen_error &&
+           (bs = grpc_chttp2_incoming_frame_queue_pop(&s->incoming_frames)) !=
+               NULL) {
+      incoming_byte_stream_destroy_locked(exec_ctx, bs, GRPC_ERROR_NONE);
+    }
+    if (s->incoming_frames.head != NULL) {
+      *s->recv_message =
+          grpc_chttp2_incoming_frame_queue_pop(&s->incoming_frames);
+      GPR_ASSERT(*s->recv_message != NULL);
+      null_then_run_closure(exec_ctx, &s->recv_message_ready, GRPC_ERROR_NONE);
+    } else if (s->published_metadata[1] != GRPC_METADATA_NOT_PUBLISHED) {
+      *s->recv_message = NULL;
+      null_then_run_closure(exec_ctx, &s->recv_message_ready, GRPC_ERROR_NONE);
+    }
+  }
+}
+
+void grpc_chttp2_maybe_complete_recv_trailing_metadata(grpc_exec_ctx *exec_ctx,
+                                                       grpc_chttp2_transport *t,
+                                                       grpc_chttp2_stream *s) {
+  grpc_byte_stream *bs;
+  grpc_chttp2_maybe_complete_recv_message(exec_ctx, t, s);
+  if (s->recv_trailing_metadata_finished != NULL && s->read_closed &&
+      s->write_closed) {
+    if (s->seen_error) {
+      while ((bs = grpc_chttp2_incoming_frame_queue_pop(&s->incoming_frames)) !=
+             NULL) {
+        incoming_byte_stream_destroy_locked(exec_ctx, bs, GRPC_ERROR_NONE);
+      }
+    }
+    if (s->all_incoming_byte_streams_finished &&
+        s->recv_trailing_metadata_finished != NULL) {
+      grpc_chttp2_incoming_metadata_buffer_publish(&s->metadata_buffer[1],
+                                                   s->recv_trailing_metadata);
+      grpc_chttp2_complete_closure_step(
+          exec_ctx, t, s, &s->recv_trailing_metadata_finished, GRPC_ERROR_NONE,
+          "recv_trailing_metadata_finished");
+    }
+  }
+}
+
+static void decrement_active_streams_locked(grpc_exec_ctx *exec_ctx,
+                                            grpc_chttp2_transport *t,
+                                            grpc_chttp2_stream *s) {
+  if ((s->all_incoming_byte_streams_finished = gpr_unref(&s->active_streams))) {
+    grpc_chttp2_maybe_complete_recv_trailing_metadata(exec_ctx, t, s);
   }
 }
 
 static void remove_stream(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t,
                           uint32_t id, grpc_error *error) {
-  size_t new_stream_count;
-  grpc_chttp2_stream *s =
-      grpc_chttp2_stream_map_delete(&t->parsing_stream_map, id);
-  if (!s) {
-    s = grpc_chttp2_stream_map_delete(&t->new_stream_map, id);
-  }
+  grpc_chttp2_stream *s = grpc_chttp2_stream_map_delete(&t->stream_map, id);
   GPR_ASSERT(s);
-  s->global.in_stream_map = false;
-  if (t->parsing.incoming_stream == &s->parsing) {
-    t->parsing.incoming_stream = NULL;
-    grpc_chttp2_parsing_become_skip_parser(exec_ctx, &t->parsing);
+  if (t->incoming_stream == s) {
+    t->incoming_stream = NULL;
+    grpc_chttp2_parsing_become_skip_parser(exec_ctx, t);
   }
-  if (s->parsing.data_parser.parsing_frame != NULL) {
+  if (s->data_parser.parsing_frame != NULL) {
     grpc_chttp2_incoming_byte_stream_finished(
-        exec_ctx, s->parsing.data_parser.parsing_frame, GRPC_ERROR_REF(error),
-        0);
-    s->parsing.data_parser.parsing_frame = NULL;
+        exec_ctx, s->data_parser.parsing_frame, GRPC_ERROR_REF(error));
+    s->data_parser.parsing_frame = NULL;
   }
 
-  if (grpc_chttp2_unregister_stream(t, s) && t->global.sent_goaway) {
+  if (grpc_chttp2_stream_map_size(&t->stream_map) == 0 && t->sent_goaway) {
     close_transport_locked(
         exec_ctx, t, GRPC_ERROR_CREATE_REFERENCING(
                          "Last stream closed after sending GOAWAY", &error, 1));
   }
-  if (grpc_chttp2_list_remove_writable_stream(&t->global, &s->global)) {
-    GRPC_CHTTP2_STREAM_UNREF(exec_ctx, &s->global, "chttp2_writing");
+  if (grpc_chttp2_list_remove_writable_stream(t, s)) {
+    GRPC_CHTTP2_STREAM_UNREF(exec_ctx, s, "chttp2_writing:remove_stream");
   }
 
-  new_stream_count = grpc_chttp2_stream_map_size(&t->parsing_stream_map) +
-                     grpc_chttp2_stream_map_size(&t->new_stream_map);
-  GPR_ASSERT(new_stream_count <= UINT32_MAX);
-  if (new_stream_count != t->global.concurrent_stream_count) {
-    t->global.concurrent_stream_count = (uint32_t)new_stream_count;
-    maybe_start_some_streams(exec_ctx, &t->global);
-  }
   GRPC_ERROR_UNREF(error);
+
+  maybe_start_some_streams(exec_ctx, t);
 }
 
 static void status_codes_from_error(grpc_error *error, gpr_timespec deadline,
@@ -1519,23 +1382,20 @@
   }
 }
 
-static void cancel_from_api(grpc_exec_ctx *exec_ctx,
-                            grpc_chttp2_transport_global *transport_global,
-                            grpc_chttp2_stream_global *stream_global,
-                            grpc_error *due_to_error) {
-  if (!stream_global->read_closed || !stream_global->write_closed) {
+void grpc_chttp2_cancel_stream(grpc_exec_ctx *exec_ctx,
+                               grpc_chttp2_transport *t, grpc_chttp2_stream *s,
+                               grpc_error *due_to_error) {
+  if (!s->read_closed || !s->write_closed) {
     grpc_status_code grpc_status;
     grpc_chttp2_error_code http_error;
-    status_codes_from_error(due_to_error, stream_global->deadline, &http_error,
+    status_codes_from_error(due_to_error, s->deadline, &http_error,
                             &grpc_status);
 
-    if (stream_global->id != 0) {
+    if (s->id != 0) {
       gpr_slice_buffer_add(
-          &transport_global->qbuf,
-          grpc_chttp2_rst_stream_create(stream_global->id, (uint32_t)http_error,
-                                        &stream_global->stats.outgoing));
-      grpc_chttp2_initiate_write(exec_ctx, transport_global, false,
-                                 "rst_stream");
+          &t->qbuf, grpc_chttp2_rst_stream_create(s->id, (uint32_t)http_error,
+                                                  &s->stats.outgoing));
+      grpc_chttp2_initiate_write(exec_ctx, t, false, "rst_stream");
     }
 
     const char *msg =
@@ -1546,27 +1406,21 @@
       msg = grpc_error_string(due_to_error);
     }
     gpr_slice msg_slice = gpr_slice_from_copied_string(msg);
-    grpc_chttp2_fake_status(exec_ctx, transport_global, stream_global,
-                            grpc_status, &msg_slice);
+    grpc_chttp2_fake_status(exec_ctx, t, s, grpc_status, &msg_slice);
     if (free_msg) grpc_error_free_string(msg);
   }
-  if (due_to_error != GRPC_ERROR_NONE && !stream_global->seen_error) {
-    stream_global->seen_error = true;
-    grpc_chttp2_list_add_check_read_ops(exec_ctx, transport_global,
-                                        stream_global);
+  if (due_to_error != GRPC_ERROR_NONE && !s->seen_error) {
+    s->seen_error = true;
+    grpc_chttp2_maybe_complete_recv_trailing_metadata(exec_ctx, t, s);
   }
-  grpc_chttp2_mark_stream_closed(exec_ctx, transport_global, stream_global, 1,
-                                 1, due_to_error);
+  grpc_chttp2_mark_stream_closed(exec_ctx, t, s, 1, 1, due_to_error);
 }
 
-void grpc_chttp2_fake_status(grpc_exec_ctx *exec_ctx,
-                             grpc_chttp2_transport_global *transport_global,
-                             grpc_chttp2_stream_global *stream_global,
-                             grpc_status_code status, gpr_slice *slice) {
+void grpc_chttp2_fake_status(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t,
+                             grpc_chttp2_stream *s, grpc_status_code status,
+                             gpr_slice *slice) {
   if (status != GRPC_STATUS_OK) {
-    stream_global->seen_error = true;
-    grpc_chttp2_list_add_check_read_ops(exec_ctx, transport_global,
-                                        stream_global);
+    s->seen_error = true;
   }
   /* stream_global->recv_trailing_metadata_finished gives us a
      last chance replacement: we've received trailing metadata,
@@ -1574,24 +1428,23 @@
      to the upper layers - drop what we've got, and then publish
      what we want - which is safe because we haven't told anyone
      about the metadata yet */
-  if (!stream_global->published_trailing_metadata ||
-      stream_global->recv_trailing_metadata_finished != NULL) {
+  if (s->published_metadata[1] == GRPC_METADATA_NOT_PUBLISHED ||
+      s->recv_trailing_metadata_finished != NULL) {
     char status_string[GPR_LTOA_MIN_BUFSIZE];
     gpr_ltoa(status, status_string);
     grpc_chttp2_incoming_metadata_buffer_add(
-        &stream_global->received_trailing_metadata,
+        &s->metadata_buffer[1],
         grpc_mdelem_from_metadata_strings(
             GRPC_MDSTR_GRPC_STATUS, grpc_mdstr_from_string(status_string)));
     if (slice) {
       grpc_chttp2_incoming_metadata_buffer_add(
-          &stream_global->received_trailing_metadata,
+          &s->metadata_buffer[1],
           grpc_mdelem_from_metadata_strings(
               GRPC_MDSTR_GRPC_MESSAGE,
               grpc_mdstr_from_slice(gpr_slice_ref(*slice))));
     }
-    stream_global->published_trailing_metadata = true;
-    grpc_chttp2_list_add_check_read_ops(exec_ctx, transport_global,
-                                        stream_global);
+    s->published_metadata[1] = GRPC_METADATA_SYNTHESIZED_FROM_FAKE;
+    grpc_chttp2_maybe_complete_recv_trailing_metadata(exec_ctx, t, s);
   }
   if (slice) {
     gpr_slice_unref(*slice);
@@ -1609,91 +1462,88 @@
   ++*nrefs;
 }
 
-static grpc_error *removal_error(grpc_error *extra_error,
-                                 grpc_chttp2_stream_global *stream_global) {
+static grpc_error *removal_error(grpc_error *extra_error, grpc_chttp2_stream *s,
+                                 const char *master_error_msg) {
   grpc_error *refs[3];
   size_t nrefs = 0;
-  add_error(stream_global->read_closed_error, refs, &nrefs);
-  add_error(stream_global->write_closed_error, refs, &nrefs);
+  add_error(s->read_closed_error, refs, &nrefs);
+  add_error(s->write_closed_error, refs, &nrefs);
   add_error(extra_error, refs, &nrefs);
   grpc_error *error = GRPC_ERROR_NONE;
   if (nrefs > 0) {
-    error = GRPC_ERROR_CREATE_REFERENCING("Failed due to stream removal", refs,
-                                          nrefs);
+    error = GRPC_ERROR_CREATE_REFERENCING(master_error_msg, refs, nrefs);
   }
   GRPC_ERROR_UNREF(extra_error);
   return error;
 }
 
 static void fail_pending_writes(grpc_exec_ctx *exec_ctx,
-                                grpc_chttp2_transport_global *transport_global,
-                                grpc_chttp2_stream_global *stream_global,
+                                grpc_chttp2_transport *t, grpc_chttp2_stream *s,
                                 grpc_error *error) {
-  error = removal_error(error, stream_global);
-  stream_global->send_message = NULL;
+  error =
+      removal_error(error, s, "Pending writes failed due to stream closure");
+  s->fetching_send_message = NULL;
   grpc_chttp2_complete_closure_step(
-      exec_ctx, transport_global, stream_global,
-      &stream_global->send_initial_metadata_finished, GRPC_ERROR_REF(error));
+      exec_ctx, t, s, &s->send_initial_metadata_finished, GRPC_ERROR_REF(error),
+      "send_initial_metadata_finished");
   grpc_chttp2_complete_closure_step(
-      exec_ctx, transport_global, stream_global,
-      &stream_global->send_trailing_metadata_finished, GRPC_ERROR_REF(error));
-  grpc_chttp2_complete_closure_step(exec_ctx, transport_global, stream_global,
-                                    &stream_global->send_message_finished,
-                                    error);
-}
-
-void grpc_chttp2_mark_stream_closed(
-    grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_global *transport_global,
-    grpc_chttp2_stream_global *stream_global, int close_reads, int close_writes,
-    grpc_error *error) {
-  if (stream_global->read_closed && stream_global->write_closed) {
-    /* already closed */
-    GRPC_ERROR_UNREF(error);
-    return;
-  }
-  grpc_chttp2_list_add_check_read_ops(exec_ctx, transport_global,
-                                      stream_global);
-  if (close_reads && !stream_global->read_closed) {
-    stream_global->read_closed_error = GRPC_ERROR_REF(error);
-    stream_global->read_closed = true;
-    stream_global->published_initial_metadata = true;
-    stream_global->published_trailing_metadata = true;
-    decrement_active_streams_locked(exec_ctx, transport_global, stream_global);
-  }
-  if (close_writes && !stream_global->write_closed) {
-    stream_global->write_closed_error = GRPC_ERROR_REF(error);
-    stream_global->write_closed = true;
-    if (TRANSPORT_FROM_GLOBAL(transport_global)->executor.write_state !=
-        GRPC_CHTTP2_WRITING_INACTIVE) {
-      GRPC_CHTTP2_STREAM_REF(stream_global, "finish_writes");
-      grpc_chttp2_list_add_closed_waiting_for_writing(transport_global,
-                                                      stream_global);
-    } else {
-      fail_pending_writes(exec_ctx, transport_global, stream_global,
-                          GRPC_ERROR_REF(error));
-    }
-  }
-  if (stream_global->read_closed && stream_global->write_closed) {
-    if (stream_global->id != 0 &&
-        TRANSPORT_FROM_GLOBAL(transport_global)->executor.parsing_active) {
-      grpc_chttp2_list_add_closed_waiting_for_parsing(transport_global,
-                                                      stream_global);
-    } else {
-      if (stream_global->id != 0) {
-        remove_stream(exec_ctx, TRANSPORT_FROM_GLOBAL(transport_global),
-                      stream_global->id,
-                      removal_error(GRPC_ERROR_REF(error), stream_global));
-      }
-      GRPC_CHTTP2_STREAM_UNREF(exec_ctx, stream_global, "chttp2");
-    }
+      exec_ctx, t, s, &s->send_trailing_metadata_finished,
+      GRPC_ERROR_REF(error), "send_trailing_metadata_finished");
+  grpc_chttp2_complete_closure_step(
+      exec_ctx, t, s, &s->fetching_send_message_finished, GRPC_ERROR_REF(error),
+      "fetching_send_message_finished");
+  while (s->on_write_finished_cbs) {
+    grpc_chttp2_write_cb *cb = s->on_write_finished_cbs;
+    s->on_write_finished_cbs = cb->next;
+    grpc_chttp2_complete_closure_step(exec_ctx, t, s, &cb->closure,
+                                      GRPC_ERROR_REF(error),
+                                      "on_write_finished_cb");
+    cb->next = t->write_cb_pool;
+    t->write_cb_pool = cb;
   }
   GRPC_ERROR_UNREF(error);
 }
 
-static void close_from_api(grpc_exec_ctx *exec_ctx,
-                           grpc_chttp2_transport_global *transport_global,
-                           grpc_chttp2_stream_global *stream_global,
-                           grpc_error *error) {
+void grpc_chttp2_mark_stream_closed(grpc_exec_ctx *exec_ctx,
+                                    grpc_chttp2_transport *t,
+                                    grpc_chttp2_stream *s, int close_reads,
+                                    int close_writes, grpc_error *error) {
+  if (s->read_closed && s->write_closed) {
+    /* already closed */
+    GRPC_ERROR_UNREF(error);
+    return;
+  }
+  if (close_reads && !s->read_closed) {
+    s->read_closed_error = GRPC_ERROR_REF(error);
+    s->read_closed = true;
+    for (int i = 0; i < 2; i++) {
+      if (s->published_metadata[i] == GRPC_METADATA_NOT_PUBLISHED) {
+        s->published_metadata[i] = GPRC_METADATA_PUBLISHED_AT_CLOSE;
+      }
+    }
+    decrement_active_streams_locked(exec_ctx, t, s);
+    grpc_chttp2_maybe_complete_recv_initial_metadata(exec_ctx, t, s);
+    grpc_chttp2_maybe_complete_recv_message(exec_ctx, t, s);
+    grpc_chttp2_maybe_complete_recv_trailing_metadata(exec_ctx, t, s);
+  }
+  if (close_writes && !s->write_closed) {
+    s->write_closed_error = GRPC_ERROR_REF(error);
+    s->write_closed = true;
+    fail_pending_writes(exec_ctx, t, s, GRPC_ERROR_REF(error));
+    grpc_chttp2_maybe_complete_recv_trailing_metadata(exec_ctx, t, s);
+  }
+  if (s->read_closed && s->write_closed) {
+    if (s->id != 0) {
+      remove_stream(exec_ctx, t, s->id,
+                    removal_error(GRPC_ERROR_REF(error), s, "Stream removed"));
+    }
+    GRPC_CHTTP2_STREAM_UNREF(exec_ctx, s, "chttp2");
+  }
+  GRPC_ERROR_UNREF(error);
+}
+
+static void close_from_api(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t,
+                           grpc_chttp2_stream *s, grpc_error *error) {
   gpr_slice hdr;
   gpr_slice status_hdr;
   gpr_slice message_pfx;
@@ -1701,16 +1551,17 @@
   uint32_t len = 0;
   grpc_status_code grpc_status;
   grpc_chttp2_error_code http_error;
-  status_codes_from_error(error, stream_global->deadline, &http_error,
-                          &grpc_status);
+  status_codes_from_error(error, s->deadline, &http_error, &grpc_status);
 
   GPR_ASSERT(grpc_status >= 0 && (int)grpc_status < 100);
 
-  if (stream_global->id != 0 && !transport_global->is_client) {
+  if (s->id != 0 && !t->is_client) {
     /* Hand roll a header block.
-       This is unnecessarily ugly - at some point we should find a more elegant
+       This is unnecessarily ugly - at some point we should find a more
+       elegant
        solution.
-       It's complicated by the fact that our send machinery would be dead by the
+       It's complicated by the fact that our send machinery would be dead by
+       the
        time we got around to sending this, so instead we ignore HPACK
        compression
        and just write the uncompressed bytes onto the wire. */
@@ -1775,23 +1626,22 @@
     *p++ = (uint8_t)(len);
     *p++ = GRPC_CHTTP2_FRAME_HEADER;
     *p++ = GRPC_CHTTP2_DATA_FLAG_END_STREAM | GRPC_CHTTP2_DATA_FLAG_END_HEADERS;
-    *p++ = (uint8_t)(stream_global->id >> 24);
-    *p++ = (uint8_t)(stream_global->id >> 16);
-    *p++ = (uint8_t)(stream_global->id >> 8);
-    *p++ = (uint8_t)(stream_global->id);
+    *p++ = (uint8_t)(s->id >> 24);
+    *p++ = (uint8_t)(s->id >> 16);
+    *p++ = (uint8_t)(s->id >> 8);
+    *p++ = (uint8_t)(s->id);
     GPR_ASSERT(p == GPR_SLICE_END_PTR(hdr));
 
-    gpr_slice_buffer_add(&transport_global->qbuf, hdr);
-    gpr_slice_buffer_add(&transport_global->qbuf, status_hdr);
+    gpr_slice_buffer_add(&t->qbuf, hdr);
+    gpr_slice_buffer_add(&t->qbuf, status_hdr);
     if (optional_message) {
-      gpr_slice_buffer_add(&transport_global->qbuf, message_pfx);
-      gpr_slice_buffer_add(&transport_global->qbuf,
+      gpr_slice_buffer_add(&t->qbuf, message_pfx);
+      gpr_slice_buffer_add(&t->qbuf,
                            gpr_slice_from_copied_string(optional_message));
     }
     gpr_slice_buffer_add(
-        &transport_global->qbuf,
-        grpc_chttp2_rst_stream_create(stream_global->id, GRPC_CHTTP2_NO_ERROR,
-                                      &stream_global->stats.outgoing));
+        &t->qbuf, grpc_chttp2_rst_stream_create(s->id, GRPC_CHTTP2_NO_ERROR,
+                                                &s->stats.outgoing));
   }
 
   const char *msg = grpc_error_get_str(error, GRPC_ERROR_STR_GRPC_MESSAGE);
@@ -1801,46 +1651,33 @@
     msg = grpc_error_string(error);
   }
   gpr_slice msg_slice = gpr_slice_from_copied_string(msg);
-  grpc_chttp2_fake_status(exec_ctx, transport_global, stream_global,
-                          grpc_status, &msg_slice);
+  grpc_chttp2_fake_status(exec_ctx, t, s, grpc_status, &msg_slice);
   if (free_msg) grpc_error_free_string(msg);
 
-  grpc_chttp2_mark_stream_closed(exec_ctx, transport_global, stream_global, 1,
-                                 1, error);
-  grpc_chttp2_initiate_write(exec_ctx, transport_global, false,
-                             "close_from_api");
+  grpc_chttp2_mark_stream_closed(exec_ctx, t, s, 1, 1, error);
+  grpc_chttp2_initiate_write(exec_ctx, t, false, "close_from_api");
 }
 
 typedef struct {
   grpc_exec_ctx *exec_ctx;
   grpc_error *error;
+  grpc_chttp2_transport *t;
 } cancel_stream_cb_args;
 
-static void cancel_stream_cb(grpc_chttp2_transport_global *transport_global,
-                             void *user_data,
-                             grpc_chttp2_stream_global *stream_global) {
+static void cancel_stream_cb(void *user_data, uint32_t key, void *stream) {
   cancel_stream_cb_args *args = user_data;
-  cancel_from_api(args->exec_ctx, transport_global, stream_global,
-                  GRPC_ERROR_REF(args->error));
+  grpc_chttp2_stream *s = stream;
+  grpc_chttp2_cancel_stream(args->exec_ctx, args->t, s,
+                            GRPC_ERROR_REF(args->error));
 }
 
 static void end_all_the_calls(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t,
                               grpc_error *error) {
-  cancel_stream_cb_args args = {exec_ctx, error};
-  grpc_chttp2_for_all_streams(&t->global, &args, cancel_stream_cb);
+  cancel_stream_cb_args args = {exec_ctx, error, t};
+  grpc_chttp2_stream_map_for_each(&t->stream_map, cancel_stream_cb, &args);
   GRPC_ERROR_UNREF(error);
 }
 
-static void drop_connection(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t,
-                            grpc_error *error) {
-  if (!grpc_error_get_int(error, GRPC_ERROR_INT_GRPC_STATUS, NULL)) {
-    error = grpc_error_set_int(error, GRPC_ERROR_INT_GRPC_STATUS,
-                               GRPC_STATUS_UNAVAILABLE);
-  }
-  close_transport_locked(exec_ctx, t, GRPC_ERROR_REF(error));
-  end_all_the_calls(exec_ctx, t, error);
-}
-
 /** update window from a settings change */
 typedef struct {
   grpc_chttp2_transport *t;
@@ -1851,20 +1688,23 @@
   update_global_window_args *a = args;
   grpc_chttp2_transport *t = a->t;
   grpc_chttp2_stream *s = stream;
-  grpc_chttp2_transport_global *transport_global = &t->global;
-  grpc_chttp2_stream_global *stream_global = &s->global;
   int was_zero;
   int is_zero;
-  int64_t initial_window_update = t->parsing.initial_window_update;
+  int64_t initial_window_update = t->initial_window_update;
 
-  was_zero = stream_global->outgoing_window <= 0;
-  GRPC_CHTTP2_FLOW_CREDIT_STREAM("settings", transport_global, stream_global,
-                                 outgoing_window, initial_window_update);
-  is_zero = stream_global->outgoing_window <= 0;
+  if (initial_window_update > 0) {
+    was_zero = s->outgoing_window <= 0;
+    GRPC_CHTTP2_FLOW_CREDIT_STREAM("settings", t, s, outgoing_window,
+                                   initial_window_update);
+    is_zero = s->outgoing_window <= 0;
 
-  if (was_zero && !is_zero) {
-    grpc_chttp2_become_writable(a->exec_ctx, transport_global, stream_global,
-                                true, "update_global_window");
+    if (was_zero && !is_zero) {
+      grpc_chttp2_become_writable(a->exec_ctx, t, s, true,
+                                  "update_global_window");
+    }
+  } else {
+    GRPC_CHTTP2_FLOW_DEBIT_STREAM("settings", t, s, outgoing_window,
+                                  -initial_window_update);
   }
 }
 
@@ -1872,50 +1712,19 @@
  * INPUT PROCESSING - PARSING
  */
 
-static void parsing_action(grpc_exec_ctx *exec_ctx, void *arg,
-                           grpc_error *error);
-static void post_reading_action_locked(grpc_exec_ctx *exec_ctx, void *arg,
-                                       grpc_error *error);
-static void post_parse_locked(grpc_exec_ctx *exec_ctx, void *arg,
-                              grpc_error *error);
-
-static void reading_action(grpc_exec_ctx *exec_ctx, void *tp,
-                           grpc_error *error) {
+static void read_action_begin(grpc_exec_ctx *exec_ctx, void *tp,
+                              grpc_error *error) {
   /* Control flow:
      reading_action_locked ->
        (parse_unlocked -> post_parse_locked)? ->
        post_reading_action_locked */
   GPR_TIMER_BEGIN("reading_action", 0);
   grpc_chttp2_transport *t = tp;
-  grpc_combiner_execute(exec_ctx, t->executor.combiner,
-                        &t->reading_action_locked, GRPC_ERROR_REF(error));
+  grpc_combiner_execute(exec_ctx, t->combiner, &t->read_action_locked,
+                        GRPC_ERROR_REF(error), false);
   GPR_TIMER_END("reading_action", 0);
 }
 
-static void reading_action_locked(grpc_exec_ctx *exec_ctx, void *tp,
-                                  grpc_error *error) {
-  GPR_TIMER_BEGIN("reading_action_locked", 0);
-
-  grpc_chttp2_transport *t = tp;
-  grpc_chttp2_transport_global *transport_global = &t->global;
-  grpc_chttp2_transport_parsing *transport_parsing = &t->parsing;
-
-  GPR_ASSERT(!t->executor.parsing_active);
-  if (!t->closed) {
-    t->executor.parsing_active = 1;
-    /* merge stream lists */
-    grpc_chttp2_stream_map_move_into(&t->new_stream_map,
-                                     &t->parsing_stream_map);
-    grpc_chttp2_prepare_to_read(transport_global, transport_parsing);
-    grpc_exec_ctx_sched(exec_ctx, &t->parsing_action, GRPC_ERROR_REF(error),
-                        NULL);
-  } else {
-    post_reading_action_locked(exec_ctx, t, error);
-  }
-
-  GPR_TIMER_END("reading_action_locked", 0);
-}
-
 static grpc_error *try_http_parsing(grpc_exec_ctx *exec_ctx,
                                     grpc_chttp2_transport *t) {
   grpc_http_parser parser;
@@ -1944,131 +1753,102 @@
   return error;
 }
 
-static void parsing_action(grpc_exec_ctx *exec_ctx, void *arg,
-                           grpc_error *error) {
-  grpc_chttp2_transport *t = arg;
-  grpc_error *err = GRPC_ERROR_NONE;
-  GPR_TIMER_BEGIN("reading_action.parse", 0);
-  size_t i = 0;
-  grpc_error *errors[3] = {GRPC_ERROR_REF(error), GRPC_ERROR_NONE,
-                           GRPC_ERROR_NONE};
-  for (; i < t->read_buffer.count && errors[1] == GRPC_ERROR_NONE; i++) {
-    errors[1] = grpc_chttp2_perform_read(exec_ctx, &t->parsing,
-                                         t->read_buffer.slices[i]);
-  };
-  if (errors[1] == GRPC_ERROR_NONE) {
-    err = GRPC_ERROR_REF(error);
-  } else {
-    errors[2] = try_http_parsing(exec_ctx, t);
-    err = GRPC_ERROR_CREATE_REFERENCING("Failed parsing HTTP/2", errors,
-                                        GPR_ARRAY_SIZE(errors));
-  }
-  for (i = 0; i < GPR_ARRAY_SIZE(errors); i++) {
-    GRPC_ERROR_UNREF(errors[i]);
-  }
-  grpc_combiner_execute(exec_ctx, t->executor.combiner, &t->post_parse_locked,
-                        err);
-  GPR_TIMER_END("reading_action.parse", 0);
-}
+static void read_action_locked(grpc_exec_ctx *exec_ctx, void *tp,
+                               grpc_error *error) {
+  GPR_TIMER_BEGIN("reading_action_locked", 0);
 
-static void post_parse_locked(grpc_exec_ctx *exec_ctx, void *arg,
-                              grpc_error *error) {
-  GPR_TIMER_BEGIN("post_parse_locked", 0);
-  grpc_chttp2_transport *t = arg;
-  grpc_chttp2_transport_global *transport_global = &t->global;
-  grpc_chttp2_transport_parsing *transport_parsing = &t->parsing;
-  /* copy parsing qbuf to global qbuf */
-  if (t->parsing.qbuf.count > 0) {
-    gpr_slice_buffer_move_into(&t->parsing.qbuf, &t->global.qbuf);
-    grpc_chttp2_initiate_write(exec_ctx, transport_global, false,
-                               "parsing_qbuf");
-  }
-  /* merge stream lists */
-  grpc_chttp2_stream_map_move_into(&t->new_stream_map, &t->parsing_stream_map);
-  transport_global->concurrent_stream_count =
-      (uint32_t)grpc_chttp2_stream_map_size(&t->parsing_stream_map);
-  if (transport_parsing->initial_window_update != 0) {
-    update_global_window_args args = {t, exec_ctx};
-    grpc_chttp2_stream_map_for_each(&t->parsing_stream_map,
-                                    update_global_window, &args);
-    transport_parsing->initial_window_update = 0;
-  }
-  /* handle higher level things */
-  grpc_chttp2_publish_reads(exec_ctx, transport_global, transport_parsing);
-  t->executor.parsing_active = 0;
-  /* handle delayed transport ops (if there is one) */
-  if (t->post_parsing_op) {
-    grpc_transport_op *op = t->post_parsing_op;
-    t->post_parsing_op = NULL;
-    perform_transport_op_locked(exec_ctx, op, GRPC_ERROR_NONE);
-    gpr_free(op);
-  }
-  /* if a stream is in the stream map, and gets cancelled, we need to
-   * ensure we are not parsing before continuing the cancellation to keep
-   * things in a sane state */
-  grpc_chttp2_stream_global *stream_global;
-  while (grpc_chttp2_list_pop_closed_waiting_for_parsing(transport_global,
-                                                         &stream_global)) {
-    GPR_ASSERT(stream_global->in_stream_map);
-    GPR_ASSERT(stream_global->write_closed);
-    GPR_ASSERT(stream_global->read_closed);
-    remove_stream(exec_ctx, t, stream_global->id,
-                  removal_error(GRPC_ERROR_NONE, stream_global));
-    GRPC_CHTTP2_STREAM_UNREF(exec_ctx, stream_global, "chttp2");
-  }
+  grpc_chttp2_transport *t = tp;
 
-  post_reading_action_locked(exec_ctx, t, error);
-  GPR_TIMER_END("post_parse_locked", 0);
-}
-
-static void post_reading_action_locked(grpc_exec_ctx *exec_ctx, void *arg,
-                                       grpc_error *error) {
-  GPR_TIMER_BEGIN("post_reading_action_locked", 0);
-  grpc_chttp2_transport *t = arg;
-  bool keep_reading = false;
   GRPC_ERROR_REF(error);
+
+  grpc_error *err = error;
+  if (err != GRPC_ERROR_NONE) {
+    err = grpc_error_set_int(
+        GRPC_ERROR_CREATE_REFERENCING("Endpoint read failed", &err, 1),
+        GRPC_ERROR_INT_OCCURRED_DURING_WRITE, t->write_state);
+  }
+  GPR_SWAP(grpc_error *, err, error);
+  GRPC_ERROR_UNREF(err);
+  if (!t->closed) {
+    GPR_TIMER_BEGIN("reading_action.parse", 0);
+    size_t i = 0;
+    grpc_error *errors[3] = {GRPC_ERROR_REF(error), GRPC_ERROR_NONE,
+                             GRPC_ERROR_NONE};
+    for (; i < t->read_buffer.count && errors[1] == GRPC_ERROR_NONE; i++) {
+      errors[1] =
+          grpc_chttp2_perform_read(exec_ctx, t, t->read_buffer.slices[i]);
+    };
+    if (errors[1] != GRPC_ERROR_NONE) {
+      errors[2] = try_http_parsing(exec_ctx, t);
+      GRPC_ERROR_UNREF(error);
+      error = GRPC_ERROR_CREATE_REFERENCING("Failed parsing HTTP/2", errors,
+                                            GPR_ARRAY_SIZE(errors));
+    }
+    for (i = 0; i < GPR_ARRAY_SIZE(errors); i++) {
+      GRPC_ERROR_UNREF(errors[i]);
+    }
+    GPR_TIMER_END("reading_action.parse", 0);
+
+    GPR_TIMER_BEGIN("post_parse_locked", 0);
+    if (t->initial_window_update != 0) {
+      update_global_window_args args = {t, exec_ctx};
+      grpc_chttp2_stream_map_for_each(&t->stream_map, update_global_window,
+                                      &args);
+      t->initial_window_update = 0;
+    }
+    /* handle higher level things */
+    if (t->incoming_window < t->connection_window_target * 3 / 4) {
+      int64_t announce_bytes = t->connection_window_target - t->incoming_window;
+      GRPC_CHTTP2_FLOW_CREDIT_TRANSPORT("parsed", t, announce_incoming_window,
+                                        announce_bytes);
+      GRPC_CHTTP2_FLOW_CREDIT_TRANSPORT("parsed", t, incoming_window,
+                                        announce_bytes);
+      grpc_chttp2_initiate_write(exec_ctx, t, false, "global incoming window");
+    }
+
+    GPR_TIMER_END("post_parse_locked", 0);
+  }
+
+  GPR_TIMER_BEGIN("post_reading_action_locked", 0);
+  bool keep_reading = false;
   if (error == GRPC_ERROR_NONE && t->closed) {
     error = GRPC_ERROR_CREATE("Transport closed");
   }
   if (error != GRPC_ERROR_NONE) {
-    drop_connection(exec_ctx, t, GRPC_ERROR_REF(error));
+    close_transport_locked(exec_ctx, t, GRPC_ERROR_REF(error));
     t->endpoint_reading = 0;
-    if (grpc_http_write_state_trace) {
-      gpr_log(GPR_DEBUG, "R:%p -> 0 ws=%s", t,
-              write_state_name(t->executor.write_state));
-    }
   } else if (!t->closed) {
     keep_reading = true;
-    REF_TRANSPORT(t, "keep_reading");
-    prevent_endpoint_shutdown(t);
+    GRPC_CHTTP2_REF_TRANSPORT(t, "keep_reading");
   }
   gpr_slice_buffer_reset_and_unref(&t->read_buffer);
 
   if (keep_reading) {
-    grpc_endpoint_read(exec_ctx, t->ep, &t->read_buffer, &t->reading_action);
-    allow_endpoint_shutdown_locked(exec_ctx, t);
-    UNREF_TRANSPORT(exec_ctx, t, "keep_reading");
+    grpc_endpoint_read(exec_ctx, t->ep, &t->read_buffer, &t->read_action_begin);
+    GRPC_CHTTP2_UNREF_TRANSPORT(exec_ctx, t, "keep_reading");
   } else {
-    UNREF_TRANSPORT(exec_ctx, t, "reading_action");
+    GRPC_CHTTP2_UNREF_TRANSPORT(exec_ctx, t, "reading_action");
   }
-  GRPC_ERROR_UNREF(error);
 
   GPR_TIMER_END("post_reading_action_locked", 0);
+
+  GRPC_ERROR_UNREF(error);
+
+  GPR_TIMER_END("reading_action_locked", 0);
 }
 
 /*******************************************************************************
  * CALLBACK LOOP
  */
 
-static void connectivity_state_set(
-    grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_global *transport_global,
-    grpc_connectivity_state state, grpc_error *error, const char *reason) {
+static void connectivity_state_set(grpc_exec_ctx *exec_ctx,
+                                   grpc_chttp2_transport *t,
+                                   grpc_connectivity_state state,
+                                   grpc_error *error, const char *reason) {
   GRPC_CHTTP2_IF_TRACING(
       gpr_log(GPR_DEBUG, "set connectivity_state=%d", state));
-  grpc_connectivity_state_set(
-      exec_ctx,
-      &TRANSPORT_FROM_GLOBAL(transport_global)->channel_callback.state_tracker,
-      state, error, reason);
+  grpc_connectivity_state_set(exec_ctx, &t->channel_callback.state_tracker,
+                              state, error, reason);
 }
 
 /*******************************************************************************
@@ -2101,15 +1881,16 @@
   }
 }
 
-static void incoming_byte_stream_update_flow_control(
-    grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_global *transport_global,
-    grpc_chttp2_stream_global *stream_global, size_t max_size_hint,
-    size_t have_already) {
+static void incoming_byte_stream_update_flow_control(grpc_exec_ctx *exec_ctx,
+                                                     grpc_chttp2_transport *t,
+                                                     grpc_chttp2_stream *s,
+                                                     size_t max_size_hint,
+                                                     size_t have_already) {
   uint32_t max_recv_bytes;
 
   /* clamp max recv hint to an allowable size */
-  if (max_size_hint >= UINT32_MAX - transport_global->stream_lookahead) {
-    max_recv_bytes = UINT32_MAX - transport_global->stream_lookahead;
+  if (max_size_hint >= UINT32_MAX - t->stream_lookahead) {
+    max_recv_bytes = UINT32_MAX - t->stream_lookahead;
   } else {
     max_recv_bytes = (uint32_t)max_size_hint;
   }
@@ -2122,23 +1903,21 @@
   }
 
   /* add some small lookahead to keep pipelines flowing */
-  GPR_ASSERT(max_recv_bytes <= UINT32_MAX - transport_global->stream_lookahead);
-  max_recv_bytes += transport_global->stream_lookahead;
-  if (stream_global->max_recv_bytes < max_recv_bytes) {
-    uint32_t add_max_recv_bytes =
-        max_recv_bytes - stream_global->max_recv_bytes;
-    GRPC_CHTTP2_FLOW_CREDIT_STREAM("op", transport_global, stream_global,
-                                   max_recv_bytes, add_max_recv_bytes);
-    GRPC_CHTTP2_FLOW_CREDIT_STREAM("op", transport_global, stream_global,
-                                   unannounced_incoming_window_for_parse,
+  GPR_ASSERT(max_recv_bytes <= UINT32_MAX - t->stream_lookahead);
+  max_recv_bytes += t->stream_lookahead;
+  if (s->max_recv_bytes < max_recv_bytes) {
+    uint32_t add_max_recv_bytes = max_recv_bytes - s->max_recv_bytes;
+    bool new_window_write_is_covered_by_poller =
+        s->max_recv_bytes < have_already;
+    GRPC_CHTTP2_FLOW_CREDIT_STREAM("op", t, s, max_recv_bytes,
                                    add_max_recv_bytes);
-    GRPC_CHTTP2_FLOW_CREDIT_STREAM("op", transport_global, stream_global,
-                                   unannounced_incoming_window_for_writing,
+    GRPC_CHTTP2_FLOW_CREDIT_STREAM("op", t, s, incoming_window,
                                    add_max_recv_bytes);
-    grpc_chttp2_list_add_unannounced_incoming_window_available(transport_global,
-                                                               stream_global);
-    grpc_chttp2_become_writable(exec_ctx, transport_global, stream_global,
-                                false, "read_incoming_stream");
+    GRPC_CHTTP2_FLOW_CREDIT_STREAM("op", t, s, announce_window,
+                                   add_max_recv_bytes);
+    grpc_chttp2_become_writable(exec_ctx, t, s,
+                                new_window_write_is_covered_by_poller,
+                                "read_incoming_stream");
   }
 }
 
@@ -2146,25 +1925,23 @@
                                              void *argp,
                                              grpc_error *error_ignored) {
   grpc_chttp2_incoming_byte_stream *bs = argp;
-  grpc_chttp2_transport_global *transport_global = &bs->transport->global;
-  grpc_chttp2_stream_global *stream_global = &bs->stream->global;
+  grpc_chttp2_transport *t = bs->transport;
+  grpc_chttp2_stream *s = bs->stream;
 
   if (bs->is_tail) {
     gpr_mu_lock(&bs->slice_mu);
     size_t cur_length = bs->slices.length;
     gpr_mu_unlock(&bs->slice_mu);
     incoming_byte_stream_update_flow_control(
-        exec_ctx, transport_global, stream_global,
-        bs->next_action.max_size_hint, cur_length);
+        exec_ctx, t, s, bs->next_action.max_size_hint, cur_length);
   }
   gpr_mu_lock(&bs->slice_mu);
   if (bs->slices.count > 0) {
     *bs->next_action.slice = gpr_slice_buffer_take_first(&bs->slices);
-    grpc_exec_ctx_sched(exec_ctx, bs->next_action.on_complete, GRPC_ERROR_NONE,
-                        NULL);
+    grpc_closure_run(exec_ctx, bs->next_action.on_complete, GRPC_ERROR_NONE);
   } else if (bs->error != GRPC_ERROR_NONE) {
-    grpc_exec_ctx_sched(exec_ctx, bs->next_action.on_complete,
-                        GRPC_ERROR_REF(bs->error), NULL);
+    grpc_closure_run(exec_ctx, bs->next_action.on_complete,
+                     GRPC_ERROR_REF(bs->error));
   } else {
     bs->on_next = bs->next_action.on_complete;
     bs->next = bs->next_action.slice;
@@ -2186,8 +1963,8 @@
   bs->next_action.on_complete = on_complete;
   grpc_closure_init(&bs->next_action.closure, incoming_byte_stream_next_locked,
                     bs);
-  grpc_combiner_execute(exec_ctx, bs->transport->executor.combiner,
-                        &bs->next_action.closure, GRPC_ERROR_NONE);
+  grpc_combiner_execute(exec_ctx, bs->transport->combiner,
+                        &bs->next_action.closure, GRPC_ERROR_NONE, false);
   GPR_TIMER_END("incoming_byte_stream_next", 0);
   return 0;
 }
@@ -2200,8 +1977,7 @@
                                                 grpc_error *error_ignored) {
   grpc_chttp2_incoming_byte_stream *bs = byte_stream;
   GPR_ASSERT(bs->base.destroy == incoming_byte_stream_destroy);
-  decrement_active_streams_locked(exec_ctx, &bs->transport->global,
-                                  &bs->stream->global);
+  decrement_active_streams_locked(exec_ctx, bs->transport, bs->stream);
   incoming_byte_stream_unref(exec_ctx, bs);
 }
 
@@ -2212,84 +1988,86 @@
       (grpc_chttp2_incoming_byte_stream *)byte_stream;
   grpc_closure_init(&bs->destroy_action, incoming_byte_stream_destroy_locked,
                     bs);
-  grpc_combiner_execute(exec_ctx, bs->transport->executor.combiner,
-                        &bs->destroy_action, GRPC_ERROR_NONE);
+  grpc_combiner_execute(exec_ctx, bs->transport->combiner, &bs->destroy_action,
+                        GRPC_ERROR_NONE, false);
   GPR_TIMER_END("incoming_byte_stream_destroy", 0);
 }
 
-typedef struct {
-  grpc_chttp2_incoming_byte_stream *byte_stream;
-  gpr_slice slice;
-} incoming_byte_stream_push_arg;
+static void incoming_byte_stream_publish_error(
+    grpc_exec_ctx *exec_ctx, grpc_chttp2_incoming_byte_stream *bs,
+    grpc_error *error) {
+  GPR_ASSERT(error != GRPC_ERROR_NONE);
+  grpc_exec_ctx_sched(exec_ctx, bs->on_next, GRPC_ERROR_REF(error), NULL);
+  bs->on_next = NULL;
+  GRPC_ERROR_UNREF(bs->error);
+  bs->error = error;
+}
 
 void grpc_chttp2_incoming_byte_stream_push(grpc_exec_ctx *exec_ctx,
                                            grpc_chttp2_incoming_byte_stream *bs,
                                            gpr_slice slice) {
   gpr_mu_lock(&bs->slice_mu);
-  if (bs->on_next != NULL) {
-    *bs->next = slice;
-    grpc_exec_ctx_sched(exec_ctx, bs->on_next, GRPC_ERROR_NONE, NULL);
-    bs->on_next = NULL;
+  if (bs->remaining_bytes < GPR_SLICE_LENGTH(slice)) {
+    incoming_byte_stream_publish_error(
+        exec_ctx, bs, GRPC_ERROR_CREATE("Too many bytes in stream"));
   } else {
-    gpr_slice_buffer_add(&bs->slices, slice);
+    bs->remaining_bytes -= (uint32_t)GPR_SLICE_LENGTH(slice);
+    if (bs->on_next != NULL) {
+      *bs->next = slice;
+      grpc_exec_ctx_sched(exec_ctx, bs->on_next, GRPC_ERROR_NONE, NULL);
+      bs->on_next = NULL;
+    } else {
+      gpr_slice_buffer_add(&bs->slices, slice);
+    }
   }
   gpr_mu_unlock(&bs->slice_mu);
 }
 
-static void incoming_byte_stream_finished_locked(grpc_exec_ctx *exec_ctx,
-                                                 void *bsp, grpc_error *error) {
-  grpc_chttp2_incoming_byte_stream *bs = bsp;
+void grpc_chttp2_incoming_byte_stream_finished(
+    grpc_exec_ctx *exec_ctx, grpc_chttp2_incoming_byte_stream *bs,
+    grpc_error *error) {
+  if (error == GRPC_ERROR_NONE) {
+    gpr_mu_lock(&bs->slice_mu);
+    if (bs->remaining_bytes != 0) {
+      error = GRPC_ERROR_CREATE("Truncated message");
+    }
+    gpr_mu_unlock(&bs->slice_mu);
+  }
   if (error != GRPC_ERROR_NONE) {
-    grpc_exec_ctx_sched(exec_ctx, bs->on_next, GRPC_ERROR_REF(error), NULL);
-    bs->on_next = NULL;
-    GRPC_ERROR_UNREF(bs->error);
-    bs->error = error;
+    incoming_byte_stream_publish_error(exec_ctx, bs, error);
   }
   incoming_byte_stream_unref(exec_ctx, bs);
 }
 
-void grpc_chttp2_incoming_byte_stream_finished(
-    grpc_exec_ctx *exec_ctx, grpc_chttp2_incoming_byte_stream *bs,
-    grpc_error *error, int from_parsing_thread) {
-  GPR_TIMER_BEGIN("grpc_chttp2_incoming_byte_stream_finished", 0);
-  if (from_parsing_thread) {
-    grpc_closure_init(&bs->finished_action,
-                      incoming_byte_stream_finished_locked, bs);
-    grpc_combiner_execute(exec_ctx, bs->transport->executor.combiner,
-                          &bs->finished_action, GRPC_ERROR_REF(error));
-  } else {
-    incoming_byte_stream_finished_locked(exec_ctx, bs, error);
-  }
-  GPR_TIMER_END("grpc_chttp2_incoming_byte_stream_finished", 0);
-}
-
 grpc_chttp2_incoming_byte_stream *grpc_chttp2_incoming_byte_stream_create(
-    grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_parsing *transport_parsing,
-    grpc_chttp2_stream_parsing *stream_parsing, uint32_t frame_size,
-    uint32_t flags, grpc_chttp2_incoming_frame_queue *add_to_queue) {
+    grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t, grpc_chttp2_stream *s,
+    uint32_t frame_size, uint32_t flags) {
   grpc_chttp2_incoming_byte_stream *incoming_byte_stream =
       gpr_malloc(sizeof(*incoming_byte_stream));
   incoming_byte_stream->base.length = frame_size;
+  incoming_byte_stream->remaining_bytes = frame_size;
   incoming_byte_stream->base.flags = flags;
   incoming_byte_stream->base.next = incoming_byte_stream_next;
   incoming_byte_stream->base.destroy = incoming_byte_stream_destroy;
   gpr_mu_init(&incoming_byte_stream->slice_mu);
   gpr_ref_init(&incoming_byte_stream->refs, 2);
   incoming_byte_stream->next_message = NULL;
-  incoming_byte_stream->transport = TRANSPORT_FROM_PARSING(transport_parsing);
-  incoming_byte_stream->stream = STREAM_FROM_PARSING(stream_parsing);
-  gpr_ref(&incoming_byte_stream->stream->global.active_streams);
+  incoming_byte_stream->transport = t;
+  incoming_byte_stream->stream = s;
+  gpr_ref(&incoming_byte_stream->stream->active_streams);
   gpr_slice_buffer_init(&incoming_byte_stream->slices);
   incoming_byte_stream->on_next = NULL;
   incoming_byte_stream->is_tail = 1;
   incoming_byte_stream->error = GRPC_ERROR_NONE;
-  if (add_to_queue->head == NULL) {
-    add_to_queue->head = incoming_byte_stream;
+  grpc_chttp2_incoming_frame_queue *q = &s->incoming_frames;
+  if (q->head == NULL) {
+    q->head = incoming_byte_stream;
   } else {
-    add_to_queue->tail->is_tail = 0;
-    add_to_queue->tail->next_message = incoming_byte_stream;
+    q->tail->is_tail = 0;
+    q->tail->next_message = incoming_byte_stream;
   }
-  add_to_queue->tail = incoming_byte_stream;
+  q->tail = incoming_byte_stream;
+  grpc_chttp2_maybe_complete_recv_message(exec_ctx, t, s);
   return incoming_byte_stream;
 }
 
@@ -2298,67 +2076,49 @@
  */
 
 static char *format_flowctl_context_var(const char *context, const char *var,
-                                        int64_t val, uint32_t id,
-                                        char **scope) {
-  char *underscore_pos;
-  char *buf;
-  char *result;
+                                        int64_t val, uint32_t id) {
+  char *name;
   if (context == NULL) {
-    *scope = NULL;
-    gpr_asprintf(&buf, "%s(%" PRId64 ")", var, val);
-    result = gpr_leftpad(buf, ' ', 60);
-    gpr_free(buf);
-    return result;
+    name = gpr_strdup(var);
+  } else if (0 == strcmp(context, "t")) {
+    GPR_ASSERT(id == 0);
+    gpr_asprintf(&name, "TRANSPORT:%s", var);
+  } else if (0 == strcmp(context, "s")) {
+    GPR_ASSERT(id != 0);
+    gpr_asprintf(&name, "STREAM[%d]:%s", id, var);
+  } else {
+    gpr_asprintf(&name, "BAD_CONTEXT[%s][%d]:%s", context, id, var);
   }
-  underscore_pos = strchr(context, '_');
-  *scope = gpr_strdup(context);
-  (*scope)[underscore_pos - context] = 0;
-  if (id != 0) {
-    char *tmp = *scope;
-    gpr_asprintf(scope, "%s[%d]", tmp, id);
-    gpr_free(tmp);
-  }
-  gpr_asprintf(&buf, "%s.%s(%" PRId64 ")", underscore_pos + 1, var, val);
-  result = gpr_leftpad(buf, ' ', 60);
-  gpr_free(buf);
+  char *name_fld = gpr_leftpad(name, ' ', 64);
+  char *value;
+  gpr_asprintf(&value, "%" PRId64, val);
+  char *value_fld = gpr_leftpad(value, ' ', 8);
+  char *result;
+  gpr_asprintf(&result, "%s %s", name_fld, value_fld);
+  gpr_free(name);
+  gpr_free(name_fld);
+  gpr_free(value);
+  gpr_free(value_fld);
   return result;
 }
 
-static int samestr(char *a, char *b) {
-  if (a == NULL) {
-    return b == NULL;
-  }
-  if (b == NULL) {
-    return 0;
-  }
-  return 0 == strcmp(a, b);
-}
-
 void grpc_chttp2_flowctl_trace(const char *file, int line, const char *phase,
                                grpc_chttp2_flowctl_op op, const char *context1,
                                const char *var1, const char *context2,
                                const char *var2, int is_client,
                                uint32_t stream_id, int64_t val1, int64_t val2) {
-  char *scope1;
-  char *scope2;
   char *tmp_phase;
-  char *tmp_scope1;
-  char *label1 =
-      format_flowctl_context_var(context1, var1, val1, stream_id, &scope1);
-  char *label2 =
-      format_flowctl_context_var(context2, var2, val2, stream_id, &scope2);
+  char *label1 = format_flowctl_context_var(context1, var1, val1, stream_id);
+  char *label2 = format_flowctl_context_var(context2, var2, val2, stream_id);
   char *clisvr = is_client ? "client" : "server";
   char *prefix;
 
   tmp_phase = gpr_leftpad(phase, ' ', 8);
-  tmp_scope1 = gpr_leftpad(scope1, ' ', 11);
-  gpr_asprintf(&prefix, "FLOW %s: %s %s ", tmp_phase, clisvr, scope1);
+  gpr_asprintf(&prefix, "FLOW %s: %s ", tmp_phase, clisvr);
   gpr_free(tmp_phase);
-  gpr_free(tmp_scope1);
 
   switch (op) {
     case GRPC_CHTTP2_FLOWCTL_MOVE:
-      GPR_ASSERT(samestr(scope1, scope2));
       if (val2 != 0) {
         gpr_log(file, line, GPR_LOG_SEVERITY_DEBUG,
                 "%sMOVE   %s <- %s giving %" PRId64, prefix, label1, label2,
@@ -2383,8 +2143,6 @@
       break;
   }
 
-  gpr_free(scope1);
-  gpr_free(scope2);
   gpr_free(label1);
   gpr_free(label2);
   gpr_free(prefix);
@@ -2421,10 +2179,11 @@
                                          grpc_transport *transport,
                                          gpr_slice_buffer *read_buffer) {
   grpc_chttp2_transport *t = (grpc_chttp2_transport *)transport;
-  REF_TRANSPORT(t, "reading_action"); /* matches unref inside reading_action */
+  GRPC_CHTTP2_REF_TRANSPORT(
+      t, "reading_action"); /* matches unref inside reading_action */
   if (read_buffer != NULL) {
     gpr_slice_buffer_move_into(read_buffer, &t->read_buffer);
     gpr_free(read_buffer);
   }
-  reading_action(exec_ctx, t, GRPC_ERROR_NONE);
+  read_action_begin(exec_ctx, t, GRPC_ERROR_NONE);
 }
diff --git a/src/core/ext/transport/chttp2/transport/frame.h b/src/core/ext/transport/chttp2/transport/frame.h
index 507aae4..1e444a9 100644
--- a/src/core/ext/transport/chttp2/transport/frame.h
+++ b/src/core/ext/transport/chttp2/transport/frame.h
@@ -40,8 +40,8 @@
 #include "src/core/lib/iomgr/error.h"
 
 /* defined in internal.h */
-typedef struct grpc_chttp2_stream_parsing grpc_chttp2_stream_parsing;
-typedef struct grpc_chttp2_transport_parsing grpc_chttp2_transport_parsing;
+typedef struct grpc_chttp2_stream grpc_chttp2_stream;
+typedef struct grpc_chttp2_transport grpc_chttp2_transport;
 
 #define GRPC_CHTTP2_FRAME_DATA 0
 #define GRPC_CHTTP2_FRAME_HEADER 1
diff --git a/src/core/ext/transport/chttp2/transport/frame_data.c b/src/core/ext/transport/chttp2/transport/frame_data.c
index 9046fbc..8668816 100644
--- a/src/core/ext/transport/chttp2/transport/frame_data.c
+++ b/src/core/ext/transport/chttp2/transport/frame_data.c
@@ -51,16 +51,11 @@
 
 void grpc_chttp2_data_parser_destroy(grpc_exec_ctx *exec_ctx,
                                      grpc_chttp2_data_parser *parser) {
-  grpc_byte_stream *bs;
-  if (parser->parsing_frame) {
+  if (parser->parsing_frame != NULL) {
     grpc_chttp2_incoming_byte_stream_finished(
-        exec_ctx, parser->parsing_frame, GRPC_ERROR_CREATE("Parser destroyed"),
-        1);
+        exec_ctx, parser->parsing_frame, GRPC_ERROR_CREATE("Parser destroyed"));
   }
-  while (
-      (bs = grpc_chttp2_incoming_frame_queue_pop(&parser->incoming_frames))) {
-    grpc_byte_stream_destroy(exec_ctx, bs);
-  }
+  GRPC_ERROR_UNREF(parser->error);
 }
 
 grpc_error *grpc_chttp2_data_parser_begin_frame(grpc_chttp2_data_parser *parser,
@@ -145,22 +140,17 @@
   stats->data_bytes += write_bytes;
 }
 
-grpc_error *grpc_chttp2_data_parser_parse(
-    grpc_exec_ctx *exec_ctx, void *parser,
-    grpc_chttp2_transport_parsing *transport_parsing,
-    grpc_chttp2_stream_parsing *stream_parsing, gpr_slice slice, int is_last) {
+static grpc_error *parse_inner(grpc_exec_ctx *exec_ctx,
+                               grpc_chttp2_data_parser *p,
+                               grpc_chttp2_transport *t, grpc_chttp2_stream *s,
+                               gpr_slice slice) {
   uint8_t *const beg = GPR_SLICE_START_PTR(slice);
   uint8_t *const end = GPR_SLICE_END_PTR(slice);
   uint8_t *cur = beg;
-  grpc_chttp2_data_parser *p = parser;
   uint32_t message_flags;
   grpc_chttp2_incoming_byte_stream *incoming_byte_stream;
   char *msg;
 
-  if (is_last && p->is_last_frame) {
-    stream_parsing->received_close = 1;
-  }
-
   if (cur == end) {
     return GRPC_ERROR_NONE;
   }
@@ -171,7 +161,7 @@
       return GRPC_ERROR_REF(p->error);
     fh_0:
     case GRPC_CHTTP2_DATA_FH_0:
-      stream_parsing->stats.incoming.framing_bytes++;
+      s->stats.incoming.framing_bytes++;
       p->frame_type = *cur;
       switch (p->frame_type) {
         case 0:
@@ -184,7 +174,7 @@
           gpr_asprintf(&msg, "Bad GRPC frame type 0x%02x", p->frame_type);
           p->error = GRPC_ERROR_CREATE(msg);
           p->error = grpc_error_set_int(p->error, GRPC_ERROR_INT_STREAM_ID,
-                                        (intptr_t)stream_parsing->id);
+                                        (intptr_t)s->id);
           gpr_free(msg);
           msg = gpr_dump_slice(slice, GPR_DUMP_HEX | GPR_DUMP_ASCII);
           p->error =
@@ -201,7 +191,7 @@
       }
     /* fallthrough */
     case GRPC_CHTTP2_DATA_FH_1:
-      stream_parsing->stats.incoming.framing_bytes++;
+      s->stats.incoming.framing_bytes++;
       p->frame_size = ((uint32_t)*cur) << 24;
       if (++cur == end) {
         p->state = GRPC_CHTTP2_DATA_FH_2;
@@ -209,7 +199,7 @@
       }
     /* fallthrough */
     case GRPC_CHTTP2_DATA_FH_2:
-      stream_parsing->stats.incoming.framing_bytes++;
+      s->stats.incoming.framing_bytes++;
       p->frame_size |= ((uint32_t)*cur) << 16;
       if (++cur == end) {
         p->state = GRPC_CHTTP2_DATA_FH_3;
@@ -217,7 +207,7 @@
       }
     /* fallthrough */
     case GRPC_CHTTP2_DATA_FH_3:
-      stream_parsing->stats.incoming.framing_bytes++;
+      s->stats.incoming.framing_bytes++;
       p->frame_size |= ((uint32_t)*cur) << 8;
       if (++cur == end) {
         p->state = GRPC_CHTTP2_DATA_FH_4;
@@ -225,7 +215,7 @@
       }
     /* fallthrough */
     case GRPC_CHTTP2_DATA_FH_4:
-      stream_parsing->stats.incoming.framing_bytes++;
+      s->stats.incoming.framing_bytes++;
       p->frame_size |= ((uint32_t)*cur);
       p->state = GRPC_CHTTP2_DATA_FRAME;
       ++cur;
@@ -234,35 +224,32 @@
         message_flags |= GRPC_WRITE_INTERNAL_COMPRESS;
       }
       p->parsing_frame = incoming_byte_stream =
-          grpc_chttp2_incoming_byte_stream_create(
-              exec_ctx, transport_parsing, stream_parsing, p->frame_size,
-              message_flags, &p->incoming_frames);
+          grpc_chttp2_incoming_byte_stream_create(exec_ctx, t, s, p->frame_size,
+                                                  message_flags);
     /* fallthrough */
     case GRPC_CHTTP2_DATA_FRAME:
-      grpc_chttp2_list_add_parsing_seen_stream(transport_parsing,
-                                               stream_parsing);
       if (cur == end) {
         return GRPC_ERROR_NONE;
       }
       uint32_t remaining = (uint32_t)(end - cur);
       if (remaining == p->frame_size) {
-        stream_parsing->stats.incoming.data_bytes += p->frame_size;
+        s->stats.incoming.data_bytes += p->frame_size;
         grpc_chttp2_incoming_byte_stream_push(
             exec_ctx, p->parsing_frame,
             gpr_slice_sub(slice, (size_t)(cur - beg), (size_t)(end - beg)));
         grpc_chttp2_incoming_byte_stream_finished(exec_ctx, p->parsing_frame,
-                                                  GRPC_ERROR_NONE, 1);
+                                                  GRPC_ERROR_NONE);
         p->parsing_frame = NULL;
         p->state = GRPC_CHTTP2_DATA_FH_0;
         return GRPC_ERROR_NONE;
       } else if (remaining > p->frame_size) {
-        stream_parsing->stats.incoming.data_bytes += p->frame_size;
+        s->stats.incoming.data_bytes += p->frame_size;
         grpc_chttp2_incoming_byte_stream_push(
             exec_ctx, p->parsing_frame,
             gpr_slice_sub(slice, (size_t)(cur - beg),
                           (size_t)(cur + p->frame_size - beg)));
         grpc_chttp2_incoming_byte_stream_finished(exec_ctx, p->parsing_frame,
-                                                  GRPC_ERROR_NONE, 1);
+                                                  GRPC_ERROR_NONE);
         p->parsing_frame = NULL;
         cur += p->frame_size;
         goto fh_0; /* loop */
@@ -272,10 +259,25 @@
             exec_ctx, p->parsing_frame,
             gpr_slice_sub(slice, (size_t)(cur - beg), (size_t)(end - beg)));
         p->frame_size -= remaining;
-        stream_parsing->stats.incoming.data_bytes += remaining;
+        s->stats.incoming.data_bytes += remaining;
         return GRPC_ERROR_NONE;
       }
   }
 
   GPR_UNREACHABLE_CODE(return GRPC_ERROR_CREATE("Should never reach here"));
 }
+
+grpc_error *grpc_chttp2_data_parser_parse(grpc_exec_ctx *exec_ctx, void *parser,
+                                          grpc_chttp2_transport *t,
+                                          grpc_chttp2_stream *s,
+                                          gpr_slice slice, int is_last) {
+  grpc_chttp2_data_parser *p = parser;
+  grpc_error *error = parse_inner(exec_ctx, p, t, s, slice);
+
+  if (is_last && p->is_last_frame) {
+    grpc_chttp2_mark_stream_closed(exec_ctx, t, s, true, false,
+                                   GRPC_ERROR_NONE);
+  }
+
+  return error;
+}
diff --git a/src/core/ext/transport/chttp2/transport/frame_data.h b/src/core/ext/transport/chttp2/transport/frame_data.h
index a21a794..eb2d97d 100644
--- a/src/core/ext/transport/chttp2/transport/frame_data.h
+++ b/src/core/ext/transport/chttp2/transport/frame_data.h
@@ -69,7 +69,6 @@
   grpc_error *error;
 
   int is_frame_compressed;
-  grpc_chttp2_incoming_frame_queue incoming_frames;
   grpc_chttp2_incoming_byte_stream *parsing_frame;
 } grpc_chttp2_data_parser;
 
@@ -92,10 +91,10 @@
 
 /* handle a slice of a data frame - is_last indicates the last slice of a
    frame */
-grpc_error *grpc_chttp2_data_parser_parse(
-    grpc_exec_ctx *exec_ctx, void *parser,
-    grpc_chttp2_transport_parsing *transport_parsing,
-    grpc_chttp2_stream_parsing *stream_parsing, gpr_slice slice, int is_last);
+grpc_error *grpc_chttp2_data_parser_parse(grpc_exec_ctx *exec_ctx, void *parser,
+                                          grpc_chttp2_transport *t,
+                                          grpc_chttp2_stream *s,
+                                          gpr_slice slice, int is_last);
 
 void grpc_chttp2_encode_data(uint32_t id, gpr_slice_buffer *inbuf,
                              uint32_t write_bytes, int is_eof,
diff --git a/src/core/ext/transport/chttp2/transport/frame_goaway.c b/src/core/ext/transport/chttp2/transport/frame_goaway.c
index 299e27a..33d2269 100644
--- a/src/core/ext/transport/chttp2/transport/frame_goaway.c
+++ b/src/core/ext/transport/chttp2/transport/frame_goaway.c
@@ -67,10 +67,11 @@
   return GRPC_ERROR_NONE;
 }
 
-grpc_error *grpc_chttp2_goaway_parser_parse(
-    grpc_exec_ctx *exec_ctx, void *parser,
-    grpc_chttp2_transport_parsing *transport_parsing,
-    grpc_chttp2_stream_parsing *stream_parsing, gpr_slice slice, int is_last) {
+grpc_error *grpc_chttp2_goaway_parser_parse(grpc_exec_ctx *exec_ctx,
+                                            void *parser,
+                                            grpc_chttp2_transport *t,
+                                            grpc_chttp2_stream *s,
+                                            gpr_slice slice, int is_last) {
   uint8_t *const beg = GPR_SLICE_START_PTR(slice);
   uint8_t *const end = GPR_SLICE_END_PTR(slice);
   uint8_t *cur = beg;
@@ -148,12 +149,9 @@
       p->debug_pos += (uint32_t)(end - cur);
       p->state = GRPC_CHTTP2_GOAWAY_DEBUG;
       if (is_last) {
-        transport_parsing->goaway_received = 1;
-        transport_parsing->goaway_last_stream_index = p->last_stream_id;
-        gpr_slice_unref(transport_parsing->goaway_text);
-        transport_parsing->goaway_error = (grpc_status_code)p->error_code;
-        transport_parsing->goaway_text =
-            gpr_slice_new(p->debug_data, p->debug_length, gpr_free);
+        grpc_chttp2_add_incoming_goaway(
+            exec_ctx, t, (uint32_t)p->error_code,
+            gpr_slice_new(p->debug_data, p->debug_length, gpr_free));
         p->debug_data = NULL;
       }
       return GRPC_ERROR_NONE;
diff --git a/src/core/ext/transport/chttp2/transport/frame_goaway.h b/src/core/ext/transport/chttp2/transport/frame_goaway.h
index eb43034..355104a 100644
--- a/src/core/ext/transport/chttp2/transport/frame_goaway.h
+++ b/src/core/ext/transport/chttp2/transport/frame_goaway.h
@@ -65,10 +65,11 @@
 void grpc_chttp2_goaway_parser_destroy(grpc_chttp2_goaway_parser *p);
 grpc_error *grpc_chttp2_goaway_parser_begin_frame(
     grpc_chttp2_goaway_parser *parser, uint32_t length, uint8_t flags);
-grpc_error *grpc_chttp2_goaway_parser_parse(
-    grpc_exec_ctx *exec_ctx, void *parser,
-    grpc_chttp2_transport_parsing *transport_parsing,
-    grpc_chttp2_stream_parsing *stream_parsing, gpr_slice slice, int is_last);
+grpc_error *grpc_chttp2_goaway_parser_parse(grpc_exec_ctx *exec_ctx,
+                                            void *parser,
+                                            grpc_chttp2_transport *t,
+                                            grpc_chttp2_stream *s,
+                                            gpr_slice slice, int is_last);
 
 void grpc_chttp2_goaway_append(uint32_t last_stream_id, uint32_t error_code,
                                gpr_slice debug_data,
diff --git a/src/core/ext/transport/chttp2/transport/frame_ping.c b/src/core/ext/transport/chttp2/transport/frame_ping.c
index 1f814ab..624f426 100644
--- a/src/core/ext/transport/chttp2/transport/frame_ping.c
+++ b/src/core/ext/transport/chttp2/transport/frame_ping.c
@@ -73,10 +73,10 @@
   return GRPC_ERROR_NONE;
 }
 
-grpc_error *grpc_chttp2_ping_parser_parse(
-    grpc_exec_ctx *exec_ctx, void *parser,
-    grpc_chttp2_transport_parsing *transport_parsing,
-    grpc_chttp2_stream_parsing *stream_parsing, gpr_slice slice, int is_last) {
+grpc_error *grpc_chttp2_ping_parser_parse(grpc_exec_ctx *exec_ctx, void *parser,
+                                          grpc_chttp2_transport *t,
+                                          grpc_chttp2_stream *s,
+                                          gpr_slice slice, int is_last) {
   uint8_t *const beg = GPR_SLICE_START_PTR(slice);
   uint8_t *const end = GPR_SLICE_END_PTR(slice);
   uint8_t *cur = beg;
@@ -91,10 +91,11 @@
   if (p->byte == 8) {
     GPR_ASSERT(is_last);
     if (p->is_ack) {
-      grpc_chttp2_ack_ping(exec_ctx, transport_parsing, p->opaque_8bytes);
+      grpc_chttp2_ack_ping(exec_ctx, t, p->opaque_8bytes);
     } else {
-      gpr_slice_buffer_add(&transport_parsing->qbuf,
+      gpr_slice_buffer_add(&t->qbuf,
                            grpc_chttp2_ping_create(1, p->opaque_8bytes));
+      grpc_chttp2_initiate_write(exec_ctx, t, false, "ping response");
     }
   }
 
diff --git a/src/core/ext/transport/chttp2/transport/frame_ping.h b/src/core/ext/transport/chttp2/transport/frame_ping.h
index 5a87234..2071f64 100644
--- a/src/core/ext/transport/chttp2/transport/frame_ping.h
+++ b/src/core/ext/transport/chttp2/transport/frame_ping.h
@@ -48,9 +48,9 @@
 
 grpc_error *grpc_chttp2_ping_parser_begin_frame(grpc_chttp2_ping_parser *parser,
                                                 uint32_t length, uint8_t flags);
-grpc_error *grpc_chttp2_ping_parser_parse(
-    grpc_exec_ctx *exec_ctx, void *parser,
-    grpc_chttp2_transport_parsing *transport_parsing,
-    grpc_chttp2_stream_parsing *stream_parsing, gpr_slice slice, int is_last);
+grpc_error *grpc_chttp2_ping_parser_parse(grpc_exec_ctx *exec_ctx, void *parser,
+                                          grpc_chttp2_transport *t,
+                                          grpc_chttp2_stream *s,
+                                          gpr_slice slice, int is_last);
 
 #endif /* GRPC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_FRAME_PING_H */
diff --git a/src/core/ext/transport/chttp2/transport/frame_rst_stream.c b/src/core/ext/transport/chttp2/transport/frame_rst_stream.c
index e3a3c9e..9eac050 100644
--- a/src/core/ext/transport/chttp2/transport/frame_rst_stream.c
+++ b/src/core/ext/transport/chttp2/transport/frame_rst_stream.c
@@ -39,6 +39,8 @@
 #include <grpc/support/string_util.h>
 
 #include "src/core/ext/transport/chttp2/transport/frame.h"
+#include "src/core/ext/transport/chttp2/transport/http2_errors.h"
+#include "src/core/ext/transport/chttp2/transport/status_conversion.h"
 
 gpr_slice grpc_chttp2_rst_stream_create(uint32_t id, uint32_t code,
                                         grpc_transport_one_way_stats *stats) {
@@ -83,10 +85,11 @@
   return GRPC_ERROR_NONE;
 }
 
-grpc_error *grpc_chttp2_rst_stream_parser_parse(
-    grpc_exec_ctx *exec_ctx, void *parser,
-    grpc_chttp2_transport_parsing *transport_parsing,
-    grpc_chttp2_stream_parsing *stream_parsing, gpr_slice slice, int is_last) {
+grpc_error *grpc_chttp2_rst_stream_parser_parse(grpc_exec_ctx *exec_ctx,
+                                                void *parser,
+                                                grpc_chttp2_transport *t,
+                                                grpc_chttp2_stream *s,
+                                                gpr_slice slice, int is_last) {
   uint8_t *const beg = GPR_SLICE_START_PTR(slice);
   uint8_t *const end = GPR_SLICE_END_PTR(slice);
   uint8_t *cur = beg;
@@ -97,19 +100,28 @@
     cur++;
     p->byte++;
   }
-  stream_parsing->stats.incoming.framing_bytes += (uint64_t)(end - cur);
+  s->stats.incoming.framing_bytes += (uint64_t)(end - cur);
 
   if (p->byte == 4) {
     GPR_ASSERT(is_last);
-    stream_parsing->received_close = 1;
-    if (stream_parsing->forced_close_error == GRPC_ERROR_NONE) {
-      stream_parsing->forced_close_error = grpc_error_set_int(
-          GRPC_ERROR_CREATE("RST_STREAM"), GRPC_ERROR_INT_HTTP2_ERROR,
-          (intptr_t)((((uint32_t)p->reason_bytes[0]) << 24) |
-                     (((uint32_t)p->reason_bytes[1]) << 16) |
-                     (((uint32_t)p->reason_bytes[2]) << 8) |
-                     (((uint32_t)p->reason_bytes[3]))));
+    uint32_t reason = (((uint32_t)p->reason_bytes[0]) << 24) |
+                      (((uint32_t)p->reason_bytes[1]) << 16) |
+                      (((uint32_t)p->reason_bytes[2]) << 8) |
+                      (((uint32_t)p->reason_bytes[3]));
+    grpc_error *error = GRPC_ERROR_NONE;
+    if (reason != GRPC_CHTTP2_NO_ERROR) {
+      error = grpc_error_set_int(GRPC_ERROR_CREATE("RST_STREAM"),
+                                 GRPC_ERROR_INT_HTTP2_ERROR, (intptr_t)reason);
+      grpc_status_code status_code = grpc_chttp2_http2_error_to_grpc_status(
+          (grpc_chttp2_error_code)reason, s->deadline);
+      char *status_details;
+      gpr_asprintf(&status_details, "Received RST_STREAM with error code %d",
+                   reason);
+      gpr_slice slice_details = gpr_slice_from_copied_string(status_details);
+      gpr_free(status_details);
+      grpc_chttp2_fake_status(exec_ctx, t, s, status_code, &slice_details);
     }
+    grpc_chttp2_mark_stream_closed(exec_ctx, t, s, true, true, error);
   }
 
   return GRPC_ERROR_NONE;
diff --git a/src/core/ext/transport/chttp2/transport/frame_rst_stream.h b/src/core/ext/transport/chttp2/transport/frame_rst_stream.h
index 11cf94f..5a1f578 100644
--- a/src/core/ext/transport/chttp2/transport/frame_rst_stream.h
+++ b/src/core/ext/transport/chttp2/transport/frame_rst_stream.h
@@ -49,9 +49,10 @@
 
 grpc_error *grpc_chttp2_rst_stream_parser_begin_frame(
     grpc_chttp2_rst_stream_parser *parser, uint32_t length, uint8_t flags);
-grpc_error *grpc_chttp2_rst_stream_parser_parse(
-    grpc_exec_ctx *exec_ctx, void *parser,
-    grpc_chttp2_transport_parsing *transport_parsing,
-    grpc_chttp2_stream_parsing *stream_parsing, gpr_slice slice, int is_last);
+grpc_error *grpc_chttp2_rst_stream_parser_parse(grpc_exec_ctx *exec_ctx,
+                                                void *parser,
+                                                grpc_chttp2_transport *t,
+                                                grpc_chttp2_stream *s,
+                                                gpr_slice slice, int is_last);
 
 #endif /* GRPC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_FRAME_RST_STREAM_H */
diff --git a/src/core/ext/transport/chttp2/transport/frame_settings.c b/src/core/ext/transport/chttp2/transport/frame_settings.c
index 04b96c4..92022f9 100644
--- a/src/core/ext/transport/chttp2/transport/frame_settings.c
+++ b/src/core/ext/transport/chttp2/transport/frame_settings.c
@@ -143,10 +143,10 @@
   }
 }
 
-grpc_error *grpc_chttp2_settings_parser_parse(
-    grpc_exec_ctx *exec_ctx, void *p,
-    grpc_chttp2_transport_parsing *transport_parsing,
-    grpc_chttp2_stream_parsing *stream_parsing, gpr_slice slice, int is_last) {
+grpc_error *grpc_chttp2_settings_parser_parse(grpc_exec_ctx *exec_ctx, void *p,
+                                              grpc_chttp2_transport *t,
+                                              grpc_chttp2_stream *s,
+                                              gpr_slice slice, int is_last) {
   grpc_chttp2_settings_parser *parser = p;
   const uint8_t *cur = GPR_SLICE_START_PTR(slice);
   const uint8_t *end = GPR_SLICE_END_PTR(slice);
@@ -162,11 +162,9 @@
         if (cur == end) {
           parser->state = GRPC_CHTTP2_SPS_ID0;
           if (is_last) {
-            transport_parsing->settings_updated = 1;
             memcpy(parser->target_settings, parser->incoming_settings,
                    GRPC_CHTTP2_NUM_SETTINGS * sizeof(uint32_t));
-            gpr_slice_buffer_add(&transport_parsing->qbuf,
-                                 grpc_chttp2_settings_ack_create());
+            gpr_slice_buffer_add(&t->qbuf, grpc_chttp2_settings_ack_create());
           }
           return GRPC_ERROR_NONE;
         }
@@ -226,9 +224,9 @@
                 break;
               case GRPC_CHTTP2_DISCONNECT_ON_INVALID_VALUE:
                 grpc_chttp2_goaway_append(
-                    transport_parsing->last_incoming_stream_id, sp->error_value,
+                    t->last_new_stream_id, sp->error_value,
                     gpr_slice_from_static_string("HTTP2 settings error"),
-                    &transport_parsing->qbuf);
+                    &t->qbuf);
                 gpr_asprintf(&msg, "invalid value %u passed for %s",
                              parser->value, sp->name);
                 grpc_error *err = GRPC_ERROR_CREATE(msg);
@@ -238,18 +236,17 @@
           }
           if (parser->id == GRPC_CHTTP2_SETTINGS_INITIAL_WINDOW_SIZE &&
               parser->incoming_settings[parser->id] != parser->value) {
-            transport_parsing->initial_window_update =
+            t->initial_window_update =
                 (int64_t)parser->value - parser->incoming_settings[parser->id];
             if (grpc_http_trace) {
               gpr_log(GPR_DEBUG, "adding %d for initial_window change",
-                      (int)transport_parsing->initial_window_update);
+                      (int)t->initial_window_update);
             }
           }
           parser->incoming_settings[parser->id] = parser->value;
           if (grpc_http_trace) {
             gpr_log(GPR_DEBUG, "CHTTP2:%s: got setting %d = %d",
-                    transport_parsing->is_client ? "CLI" : "SVR", parser->id,
-                    parser->value);
+                    t->is_client ? "CLI" : "SVR", parser->id, parser->value);
           }
         } else if (grpc_http_trace) {
           gpr_log(GPR_ERROR, "CHTTP2: Ignoring unknown setting %d (value %d)",
diff --git a/src/core/ext/transport/chttp2/transport/frame_settings.h b/src/core/ext/transport/chttp2/transport/frame_settings.h
index f654c59..4bfa944 100644
--- a/src/core/ext/transport/chttp2/transport/frame_settings.h
+++ b/src/core/ext/transport/chttp2/transport/frame_settings.h
@@ -95,9 +95,10 @@
 grpc_error *grpc_chttp2_settings_parser_begin_frame(
     grpc_chttp2_settings_parser *parser, uint32_t length, uint8_t flags,
     uint32_t *settings);
-grpc_error *grpc_chttp2_settings_parser_parse(
-    grpc_exec_ctx *exec_ctx, void *parser,
-    grpc_chttp2_transport_parsing *transport_parsing,
-    grpc_chttp2_stream_parsing *stream_parsing, gpr_slice slice, int is_last);
+grpc_error *grpc_chttp2_settings_parser_parse(grpc_exec_ctx *exec_ctx,
+                                              void *parser,
+                                              grpc_chttp2_transport *t,
+                                              grpc_chttp2_stream *s,
+                                              gpr_slice slice, int is_last);
 
 #endif /* GRPC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_FRAME_SETTINGS_H */
diff --git a/src/core/ext/transport/chttp2/transport/frame_window_update.c b/src/core/ext/transport/chttp2/transport/frame_window_update.c
index 3cf848f..418166a 100644
--- a/src/core/ext/transport/chttp2/transport/frame_window_update.c
+++ b/src/core/ext/transport/chttp2/transport/frame_window_update.c
@@ -80,9 +80,8 @@
 }
 
 grpc_error *grpc_chttp2_window_update_parser_parse(
-    grpc_exec_ctx *exec_ctx, void *parser,
-    grpc_chttp2_transport_parsing *transport_parsing,
-    grpc_chttp2_stream_parsing *stream_parsing, gpr_slice slice, int is_last) {
+    grpc_exec_ctx *exec_ctx, void *parser, grpc_chttp2_transport *t,
+    grpc_chttp2_stream *s, gpr_slice slice, int is_last) {
   uint8_t *const beg = GPR_SLICE_START_PTR(slice);
   uint8_t *const end = GPR_SLICE_END_PTR(slice);
   uint8_t *cur = beg;
@@ -94,8 +93,8 @@
     p->byte++;
   }
 
-  if (stream_parsing != NULL) {
-    stream_parsing->stats.incoming.framing_bytes += (uint32_t)(end - cur);
+  if (s != NULL) {
+    s->stats.incoming.framing_bytes += (uint32_t)(end - cur);
   }
 
   if (p->byte == 4) {
@@ -109,17 +108,26 @@
     }
     GPR_ASSERT(is_last);
 
-    if (transport_parsing->incoming_stream_id != 0) {
-      if (stream_parsing != NULL) {
-        GRPC_CHTTP2_FLOW_CREDIT_STREAM("parse", transport_parsing,
-                                       stream_parsing, outgoing_window,
+    if (t->incoming_stream_id != 0) {
+      if (s != NULL) {
+        bool was_zero = s->outgoing_window <= 0;
+        GRPC_CHTTP2_FLOW_CREDIT_STREAM("parse", t, s, outgoing_window,
                                        received_update);
-        grpc_chttp2_list_add_parsing_seen_stream(transport_parsing,
-                                                 stream_parsing);
+        bool is_zero = s->outgoing_window <= 0;
+        if (was_zero && !is_zero) {
+          grpc_chttp2_become_writable(exec_ctx, t, s, false,
+                                      "stream.read_flow_control");
+        }
       }
     } else {
-      GRPC_CHTTP2_FLOW_CREDIT_TRANSPORT("parse", transport_parsing,
-                                        outgoing_window, received_update);
+      bool was_zero = t->outgoing_window <= 0;
+      GRPC_CHTTP2_FLOW_CREDIT_TRANSPORT("parse", t, outgoing_window,
+                                        received_update);
+      bool is_zero = t->outgoing_window <= 0;
+      if (was_zero && !is_zero) {
+        grpc_chttp2_initiate_write(exec_ctx, t, false,
+                                   "new_global_flow_control");
+      }
     }
   }
 
diff --git a/src/core/ext/transport/chttp2/transport/frame_window_update.h b/src/core/ext/transport/chttp2/transport/frame_window_update.h
index 1bcbbf9..6e62f31 100644
--- a/src/core/ext/transport/chttp2/transport/frame_window_update.h
+++ b/src/core/ext/transport/chttp2/transport/frame_window_update.h
@@ -51,8 +51,7 @@
 grpc_error *grpc_chttp2_window_update_parser_begin_frame(
     grpc_chttp2_window_update_parser *parser, uint32_t length, uint8_t flags);
 grpc_error *grpc_chttp2_window_update_parser_parse(
-    grpc_exec_ctx *exec_ctx, void *parser,
-    grpc_chttp2_transport_parsing *transport_parsing,
-    grpc_chttp2_stream_parsing *stream_parsing, gpr_slice slice, int is_last);
+    grpc_exec_ctx *exec_ctx, void *parser, grpc_chttp2_transport *t,
+    grpc_chttp2_stream *s, gpr_slice slice, int is_last);
 
 #endif /* GRPC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_FRAME_WINDOW_UPDATE_H */
diff --git a/src/core/ext/transport/chttp2/transport/hpack_parser.c b/src/core/ext/transport/chttp2/transport/hpack_parser.c
index 522455f..8180f78 100644
--- a/src/core/ext/transport/chttp2/transport/hpack_parser.c
+++ b/src/core/ext/transport/chttp2/transport/hpack_parser.c
@@ -78,69 +78,96 @@
    a set of indirect jumps, and so not waste stack space. */
 
 /* forward declarations for parsing states */
-static grpc_error *parse_begin(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
+static grpc_error *parse_begin(grpc_exec_ctx *exec_ctx,
+                               grpc_chttp2_hpack_parser *p, const uint8_t *cur,
                                const uint8_t *end);
-static grpc_error *parse_error(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
+static grpc_error *parse_error(grpc_exec_ctx *exec_ctx,
+                               grpc_chttp2_hpack_parser *p, const uint8_t *cur,
                                const uint8_t *end, grpc_error *error);
-static grpc_error *still_parse_error(grpc_chttp2_hpack_parser *p,
+static grpc_error *still_parse_error(grpc_exec_ctx *exec_ctx,
+                                     grpc_chttp2_hpack_parser *p,
                                      const uint8_t *cur, const uint8_t *end);
-static grpc_error *parse_illegal_op(grpc_chttp2_hpack_parser *p,
+static grpc_error *parse_illegal_op(grpc_exec_ctx *exec_ctx,
+                                    grpc_chttp2_hpack_parser *p,
                                     const uint8_t *cur, const uint8_t *end);
 
-static grpc_error *parse_string_prefix(grpc_chttp2_hpack_parser *p,
+static grpc_error *parse_string_prefix(grpc_exec_ctx *exec_ctx,
+                                       grpc_chttp2_hpack_parser *p,
                                        const uint8_t *cur, const uint8_t *end);
-static grpc_error *parse_key_string(grpc_chttp2_hpack_parser *p,
+static grpc_error *parse_key_string(grpc_exec_ctx *exec_ctx,
+                                    grpc_chttp2_hpack_parser *p,
                                     const uint8_t *cur, const uint8_t *end);
 static grpc_error *parse_value_string_with_indexed_key(
-    grpc_chttp2_hpack_parser *p, const uint8_t *cur, const uint8_t *end);
+    grpc_exec_ctx *exec_ctx, grpc_chttp2_hpack_parser *p, const uint8_t *cur,
+    const uint8_t *end);
 static grpc_error *parse_value_string_with_literal_key(
-    grpc_chttp2_hpack_parser *p, const uint8_t *cur, const uint8_t *end);
+    grpc_exec_ctx *exec_ctx, grpc_chttp2_hpack_parser *p, const uint8_t *cur,
+    const uint8_t *end);
 
-static grpc_error *parse_value0(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
+static grpc_error *parse_value0(grpc_exec_ctx *exec_ctx,
+                                grpc_chttp2_hpack_parser *p, const uint8_t *cur,
                                 const uint8_t *end);
-static grpc_error *parse_value1(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
+static grpc_error *parse_value1(grpc_exec_ctx *exec_ctx,
+                                grpc_chttp2_hpack_parser *p, const uint8_t *cur,
                                 const uint8_t *end);
-static grpc_error *parse_value2(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
+static grpc_error *parse_value2(grpc_exec_ctx *exec_ctx,
+                                grpc_chttp2_hpack_parser *p, const uint8_t *cur,
                                 const uint8_t *end);
-static grpc_error *parse_value3(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
+static grpc_error *parse_value3(grpc_exec_ctx *exec_ctx,
+                                grpc_chttp2_hpack_parser *p, const uint8_t *cur,
                                 const uint8_t *end);
-static grpc_error *parse_value4(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
+static grpc_error *parse_value4(grpc_exec_ctx *exec_ctx,
+                                grpc_chttp2_hpack_parser *p, const uint8_t *cur,
                                 const uint8_t *end);
-static grpc_error *parse_value5up(grpc_chttp2_hpack_parser *p,
+static grpc_error *parse_value5up(grpc_exec_ctx *exec_ctx,
+                                  grpc_chttp2_hpack_parser *p,
                                   const uint8_t *cur, const uint8_t *end);
 
-static grpc_error *parse_indexed_field(grpc_chttp2_hpack_parser *p,
+static grpc_error *parse_indexed_field(grpc_exec_ctx *exec_ctx,
+                                       grpc_chttp2_hpack_parser *p,
                                        const uint8_t *cur, const uint8_t *end);
-static grpc_error *parse_indexed_field_x(grpc_chttp2_hpack_parser *p,
+static grpc_error *parse_indexed_field_x(grpc_exec_ctx *exec_ctx,
+                                         grpc_chttp2_hpack_parser *p,
                                          const uint8_t *cur,
                                          const uint8_t *end);
-static grpc_error *parse_lithdr_incidx(grpc_chttp2_hpack_parser *p,
+static grpc_error *parse_lithdr_incidx(grpc_exec_ctx *exec_ctx,
+                                       grpc_chttp2_hpack_parser *p,
                                        const uint8_t *cur, const uint8_t *end);
-static grpc_error *parse_lithdr_incidx_x(grpc_chttp2_hpack_parser *p,
+static grpc_error *parse_lithdr_incidx_x(grpc_exec_ctx *exec_ctx,
+                                         grpc_chttp2_hpack_parser *p,
                                          const uint8_t *cur,
                                          const uint8_t *end);
-static grpc_error *parse_lithdr_incidx_v(grpc_chttp2_hpack_parser *p,
+static grpc_error *parse_lithdr_incidx_v(grpc_exec_ctx *exec_ctx,
+                                         grpc_chttp2_hpack_parser *p,
                                          const uint8_t *cur,
                                          const uint8_t *end);
-static grpc_error *parse_lithdr_notidx(grpc_chttp2_hpack_parser *p,
+static grpc_error *parse_lithdr_notidx(grpc_exec_ctx *exec_ctx,
+                                       grpc_chttp2_hpack_parser *p,
                                        const uint8_t *cur, const uint8_t *end);
-static grpc_error *parse_lithdr_notidx_x(grpc_chttp2_hpack_parser *p,
+static grpc_error *parse_lithdr_notidx_x(grpc_exec_ctx *exec_ctx,
+                                         grpc_chttp2_hpack_parser *p,
                                          const uint8_t *cur,
                                          const uint8_t *end);
-static grpc_error *parse_lithdr_notidx_v(grpc_chttp2_hpack_parser *p,
+static grpc_error *parse_lithdr_notidx_v(grpc_exec_ctx *exec_ctx,
+                                         grpc_chttp2_hpack_parser *p,
                                          const uint8_t *cur,
                                          const uint8_t *end);
-static grpc_error *parse_lithdr_nvridx(grpc_chttp2_hpack_parser *p,
+static grpc_error *parse_lithdr_nvridx(grpc_exec_ctx *exec_ctx,
+                                       grpc_chttp2_hpack_parser *p,
                                        const uint8_t *cur, const uint8_t *end);
-static grpc_error *parse_lithdr_nvridx_x(grpc_chttp2_hpack_parser *p,
+static grpc_error *parse_lithdr_nvridx_x(grpc_exec_ctx *exec_ctx,
+                                         grpc_chttp2_hpack_parser *p,
                                          const uint8_t *cur,
                                          const uint8_t *end);
-static grpc_error *parse_lithdr_nvridx_v(grpc_chttp2_hpack_parser *p,
+static grpc_error *parse_lithdr_nvridx_v(grpc_exec_ctx *exec_ctx,
+                                         grpc_chttp2_hpack_parser *p,
                                          const uint8_t *cur,
                                          const uint8_t *end);
-static grpc_error *parse_max_tbl_size(grpc_chttp2_hpack_parser *p,
+static grpc_error *parse_max_tbl_size(grpc_exec_ctx *exec_ctx,
+                                      grpc_chttp2_hpack_parser *p,
                                       const uint8_t *cur, const uint8_t *end);
-static grpc_error *parse_max_tbl_size_x(grpc_chttp2_hpack_parser *p,
+static grpc_error *parse_max_tbl_size_x(grpc_exec_ctx *exec_ctx,
+                                        grpc_chttp2_hpack_parser *p,
                                         const uint8_t *cur, const uint8_t *end);
 
 /* we translate the first byte of a hpack field into one of these decoding
@@ -639,8 +666,8 @@
 };
 
 /* emission helpers */
-static grpc_error *on_hdr(grpc_chttp2_hpack_parser *p, grpc_mdelem *md,
-                          int add_to_table) {
+static grpc_error *on_hdr(grpc_exec_ctx *exec_ctx, grpc_chttp2_hpack_parser *p,
+                          grpc_mdelem *md, int add_to_table) {
   if (add_to_table) {
     grpc_error *err = grpc_chttp2_hptbl_add(&p->table, md);
     if (err != GRPC_ERROR_NONE) return err;
@@ -649,7 +676,7 @@
     GRPC_MDELEM_UNREF(md);
     return GRPC_ERROR_CREATE("on_header callback not set");
   }
-  p->on_header(p->on_header_user_data, md);
+  p->on_header(exec_ctx, p->on_header_user_data, md);
   return GRPC_ERROR_NONE;
 }
 
@@ -661,78 +688,86 @@
 }
 
 /* jump to the next state */
-static grpc_error *parse_next(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
+static grpc_error *parse_next(grpc_exec_ctx *exec_ctx,
+                              grpc_chttp2_hpack_parser *p, const uint8_t *cur,
                               const uint8_t *end) {
   p->state = *p->next_state++;
-  return p->state(p, cur, end);
+  return p->state(exec_ctx, p, cur, end);
 }
 
 /* begin parsing a header: all functionality is encoded into lookup tables
    above */
-static grpc_error *parse_begin(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
+static grpc_error *parse_begin(grpc_exec_ctx *exec_ctx,
+                               grpc_chttp2_hpack_parser *p, const uint8_t *cur,
                                const uint8_t *end) {
   if (cur == end) {
     p->state = parse_begin;
     return GRPC_ERROR_NONE;
   }
 
-  return first_byte_action[first_byte_lut[*cur]](p, cur, end);
+  return first_byte_action[first_byte_lut[*cur]](exec_ctx, p, cur, end);
 }
 
 /* stream dependency and prioritization data: we just skip it */
-static grpc_error *parse_stream_weight(grpc_chttp2_hpack_parser *p,
+static grpc_error *parse_stream_weight(grpc_exec_ctx *exec_ctx,
+                                       grpc_chttp2_hpack_parser *p,
                                        const uint8_t *cur, const uint8_t *end) {
   if (cur == end) {
     p->state = parse_stream_weight;
     return GRPC_ERROR_NONE;
   }
 
-  return p->after_prioritization(p, cur + 1, end);
+  return p->after_prioritization(exec_ctx, p, cur + 1, end);
 }
 
-static grpc_error *parse_stream_dep3(grpc_chttp2_hpack_parser *p,
+static grpc_error *parse_stream_dep3(grpc_exec_ctx *exec_ctx,
+                                     grpc_chttp2_hpack_parser *p,
                                      const uint8_t *cur, const uint8_t *end) {
   if (cur == end) {
     p->state = parse_stream_dep3;
     return GRPC_ERROR_NONE;
   }
 
-  return parse_stream_weight(p, cur + 1, end);
+  return parse_stream_weight(exec_ctx, p, cur + 1, end);
 }
 
-static grpc_error *parse_stream_dep2(grpc_chttp2_hpack_parser *p,
+static grpc_error *parse_stream_dep2(grpc_exec_ctx *exec_ctx,
+                                     grpc_chttp2_hpack_parser *p,
                                      const uint8_t *cur, const uint8_t *end) {
   if (cur == end) {
     p->state = parse_stream_dep2;
     return GRPC_ERROR_NONE;
   }
 
-  return parse_stream_dep3(p, cur + 1, end);
+  return parse_stream_dep3(exec_ctx, p, cur + 1, end);
 }
 
-static grpc_error *parse_stream_dep1(grpc_chttp2_hpack_parser *p,
+static grpc_error *parse_stream_dep1(grpc_exec_ctx *exec_ctx,
+                                     grpc_chttp2_hpack_parser *p,
                                      const uint8_t *cur, const uint8_t *end) {
   if (cur == end) {
     p->state = parse_stream_dep1;
     return GRPC_ERROR_NONE;
   }
 
-  return parse_stream_dep2(p, cur + 1, end);
+  return parse_stream_dep2(exec_ctx, p, cur + 1, end);
 }
 
-static grpc_error *parse_stream_dep0(grpc_chttp2_hpack_parser *p,
+static grpc_error *parse_stream_dep0(grpc_exec_ctx *exec_ctx,
+                                     grpc_chttp2_hpack_parser *p,
                                      const uint8_t *cur, const uint8_t *end) {
   if (cur == end) {
     p->state = parse_stream_dep0;
     return GRPC_ERROR_NONE;
   }
 
-  return parse_stream_dep1(p, cur + 1, end);
+  return parse_stream_dep1(exec_ctx, p, cur + 1, end);
 }
 
 /* emit an indexed field; for now just logs it to console; jumps to
    begin the next field on completion */
-static grpc_error *finish_indexed_field(grpc_chttp2_hpack_parser *p,
+static grpc_error *finish_indexed_field(grpc_exec_ctx *exec_ctx,
+                                        grpc_chttp2_hpack_parser *p,
                                         const uint8_t *cur,
                                         const uint8_t *end) {
   grpc_mdelem *md = grpc_chttp2_hptbl_lookup(&p->table, p->index);
@@ -743,21 +778,23 @@
         GRPC_ERROR_INT_SIZE, (intptr_t)p->table.num_ents);
   }
   GRPC_MDELEM_REF(md);
-  grpc_error *err = on_hdr(p, md, 0);
+  grpc_error *err = on_hdr(exec_ctx, p, md, 0);
   if (err != GRPC_ERROR_NONE) return err;
-  return parse_begin(p, cur, end);
+  return parse_begin(exec_ctx, p, cur, end);
 }
 
 /* parse an indexed field with index < 127 */
-static grpc_error *parse_indexed_field(grpc_chttp2_hpack_parser *p,
+static grpc_error *parse_indexed_field(grpc_exec_ctx *exec_ctx,
+                                       grpc_chttp2_hpack_parser *p,
                                        const uint8_t *cur, const uint8_t *end) {
   p->dynamic_table_update_allowed = 0;
   p->index = (*cur) & 0x7f;
-  return finish_indexed_field(p, cur + 1, end);
+  return finish_indexed_field(exec_ctx, p, cur + 1, end);
 }
 
 /* parse an indexed field with index >= 127 */
-static grpc_error *parse_indexed_field_x(grpc_chttp2_hpack_parser *p,
+static grpc_error *parse_indexed_field_x(grpc_exec_ctx *exec_ctx,
+                                         grpc_chttp2_hpack_parser *p,
                                          const uint8_t *cur,
                                          const uint8_t *end) {
   static const grpc_chttp2_hpack_parser_state and_then[] = {
@@ -766,49 +803,53 @@
   p->next_state = and_then;
   p->index = 0x7f;
   p->parsing.value = &p->index;
-  return parse_value0(p, cur + 1, end);
+  return parse_value0(exec_ctx, p, cur + 1, end);
 }
 
 /* finish a literal header with incremental indexing: just log, and jump to '
    begin */
-static grpc_error *finish_lithdr_incidx(grpc_chttp2_hpack_parser *p,
+static grpc_error *finish_lithdr_incidx(grpc_exec_ctx *exec_ctx,
+                                        grpc_chttp2_hpack_parser *p,
                                         const uint8_t *cur,
                                         const uint8_t *end) {
   grpc_mdelem *md = grpc_chttp2_hptbl_lookup(&p->table, p->index);
   GPR_ASSERT(md != NULL); /* handled in string parsing */
-  grpc_error *err =
-      on_hdr(p, grpc_mdelem_from_metadata_strings(GRPC_MDSTR_REF(md->key),
-                                                  take_string(p, &p->value)),
-             1);
-  if (err != GRPC_ERROR_NONE) return parse_error(p, cur, end, err);
-  return parse_begin(p, cur, end);
+  grpc_error *err = on_hdr(
+      exec_ctx, p, grpc_mdelem_from_metadata_strings(GRPC_MDSTR_REF(md->key),
+                                                     take_string(p, &p->value)),
+      1);
+  if (err != GRPC_ERROR_NONE) return parse_error(exec_ctx, p, cur, end, err);
+  return parse_begin(exec_ctx, p, cur, end);
 }
 
 /* finish a literal header with incremental indexing with no index */
-static grpc_error *finish_lithdr_incidx_v(grpc_chttp2_hpack_parser *p,
+static grpc_error *finish_lithdr_incidx_v(grpc_exec_ctx *exec_ctx,
+                                          grpc_chttp2_hpack_parser *p,
                                           const uint8_t *cur,
                                           const uint8_t *end) {
-  grpc_error *err =
-      on_hdr(p, grpc_mdelem_from_metadata_strings(take_string(p, &p->key),
-                                                  take_string(p, &p->value)),
-             1);
-  if (err != GRPC_ERROR_NONE) return parse_error(p, cur, end, err);
-  return parse_begin(p, cur, end);
+  grpc_error *err = on_hdr(
+      exec_ctx, p, grpc_mdelem_from_metadata_strings(take_string(p, &p->key),
+                                                     take_string(p, &p->value)),
+      1);
+  if (err != GRPC_ERROR_NONE) return parse_error(exec_ctx, p, cur, end, err);
+  return parse_begin(exec_ctx, p, cur, end);
 }
 
 /* parse a literal header with incremental indexing; index < 63 */
-static grpc_error *parse_lithdr_incidx(grpc_chttp2_hpack_parser *p,
+static grpc_error *parse_lithdr_incidx(grpc_exec_ctx *exec_ctx,
+                                       grpc_chttp2_hpack_parser *p,
                                        const uint8_t *cur, const uint8_t *end) {
   static const grpc_chttp2_hpack_parser_state and_then[] = {
       parse_value_string_with_indexed_key, finish_lithdr_incidx};
   p->dynamic_table_update_allowed = 0;
   p->next_state = and_then;
   p->index = (*cur) & 0x3f;
-  return parse_string_prefix(p, cur + 1, end);
+  return parse_string_prefix(exec_ctx, p, cur + 1, end);
 }
 
 /* parse a literal header with incremental indexing; index >= 63 */
-static grpc_error *parse_lithdr_incidx_x(grpc_chttp2_hpack_parser *p,
+static grpc_error *parse_lithdr_incidx_x(grpc_exec_ctx *exec_ctx,
+                                         grpc_chttp2_hpack_parser *p,
                                          const uint8_t *cur,
                                          const uint8_t *end) {
   static const grpc_chttp2_hpack_parser_state and_then[] = {
@@ -818,11 +859,12 @@
   p->next_state = and_then;
   p->index = 0x3f;
   p->parsing.value = &p->index;
-  return parse_value0(p, cur + 1, end);
+  return parse_value0(exec_ctx, p, cur + 1, end);
 }
 
 /* parse a literal header with incremental indexing; index = 0 */
-static grpc_error *parse_lithdr_incidx_v(grpc_chttp2_hpack_parser *p,
+static grpc_error *parse_lithdr_incidx_v(grpc_exec_ctx *exec_ctx,
+                                         grpc_chttp2_hpack_parser *p,
                                          const uint8_t *cur,
                                          const uint8_t *end) {
   static const grpc_chttp2_hpack_parser_state and_then[] = {
@@ -830,48 +872,52 @@
       parse_value_string_with_literal_key, finish_lithdr_incidx_v};
   p->dynamic_table_update_allowed = 0;
   p->next_state = and_then;
-  return parse_string_prefix(p, cur + 1, end);
+  return parse_string_prefix(exec_ctx, p, cur + 1, end);
 }
 
 /* finish a literal header without incremental indexing */
-static grpc_error *finish_lithdr_notidx(grpc_chttp2_hpack_parser *p,
+static grpc_error *finish_lithdr_notidx(grpc_exec_ctx *exec_ctx,
+                                        grpc_chttp2_hpack_parser *p,
                                         const uint8_t *cur,
                                         const uint8_t *end) {
   grpc_mdelem *md = grpc_chttp2_hptbl_lookup(&p->table, p->index);
   GPR_ASSERT(md != NULL); /* handled in string parsing */
-  grpc_error *err =
-      on_hdr(p, grpc_mdelem_from_metadata_strings(GRPC_MDSTR_REF(md->key),
-                                                  take_string(p, &p->value)),
-             0);
-  if (err != GRPC_ERROR_NONE) return parse_error(p, cur, end, err);
-  return parse_begin(p, cur, end);
+  grpc_error *err = on_hdr(
+      exec_ctx, p, grpc_mdelem_from_metadata_strings(GRPC_MDSTR_REF(md->key),
+                                                     take_string(p, &p->value)),
+      0);
+  if (err != GRPC_ERROR_NONE) return parse_error(exec_ctx, p, cur, end, err);
+  return parse_begin(exec_ctx, p, cur, end);
 }
 
 /* finish a literal header without incremental indexing with index = 0 */
-static grpc_error *finish_lithdr_notidx_v(grpc_chttp2_hpack_parser *p,
+static grpc_error *finish_lithdr_notidx_v(grpc_exec_ctx *exec_ctx,
+                                          grpc_chttp2_hpack_parser *p,
                                           const uint8_t *cur,
                                           const uint8_t *end) {
-  grpc_error *err =
-      on_hdr(p, grpc_mdelem_from_metadata_strings(take_string(p, &p->key),
-                                                  take_string(p, &p->value)),
-             0);
-  if (err != GRPC_ERROR_NONE) return parse_error(p, cur, end, err);
-  return parse_begin(p, cur, end);
+  grpc_error *err = on_hdr(
+      exec_ctx, p, grpc_mdelem_from_metadata_strings(take_string(p, &p->key),
+                                                     take_string(p, &p->value)),
+      0);
+  if (err != GRPC_ERROR_NONE) return parse_error(exec_ctx, p, cur, end, err);
+  return parse_begin(exec_ctx, p, cur, end);
 }
 
 /* parse a literal header without incremental indexing; index < 15 */
-static grpc_error *parse_lithdr_notidx(grpc_chttp2_hpack_parser *p,
+static grpc_error *parse_lithdr_notidx(grpc_exec_ctx *exec_ctx,
+                                       grpc_chttp2_hpack_parser *p,
                                        const uint8_t *cur, const uint8_t *end) {
   static const grpc_chttp2_hpack_parser_state and_then[] = {
       parse_value_string_with_indexed_key, finish_lithdr_notidx};
   p->dynamic_table_update_allowed = 0;
   p->next_state = and_then;
   p->index = (*cur) & 0xf;
-  return parse_string_prefix(p, cur + 1, end);
+  return parse_string_prefix(exec_ctx, p, cur + 1, end);
 }
 
 /* parse a literal header without incremental indexing; index >= 15 */
-static grpc_error *parse_lithdr_notidx_x(grpc_chttp2_hpack_parser *p,
+static grpc_error *parse_lithdr_notidx_x(grpc_exec_ctx *exec_ctx,
+                                         grpc_chttp2_hpack_parser *p,
                                          const uint8_t *cur,
                                          const uint8_t *end) {
   static const grpc_chttp2_hpack_parser_state and_then[] = {
@@ -881,11 +927,12 @@
   p->next_state = and_then;
   p->index = 0xf;
   p->parsing.value = &p->index;
-  return parse_value0(p, cur + 1, end);
+  return parse_value0(exec_ctx, p, cur + 1, end);
 }
 
 /* parse a literal header without incremental indexing; index == 0 */
-static grpc_error *parse_lithdr_notidx_v(grpc_chttp2_hpack_parser *p,
+static grpc_error *parse_lithdr_notidx_v(grpc_exec_ctx *exec_ctx,
+                                         grpc_chttp2_hpack_parser *p,
                                          const uint8_t *cur,
                                          const uint8_t *end) {
   static const grpc_chttp2_hpack_parser_state and_then[] = {
@@ -893,48 +940,52 @@
       parse_value_string_with_literal_key, finish_lithdr_notidx_v};
   p->dynamic_table_update_allowed = 0;
   p->next_state = and_then;
-  return parse_string_prefix(p, cur + 1, end);
+  return parse_string_prefix(exec_ctx, p, cur + 1, end);
 }
 
 /* finish a literal header that is never indexed */
-static grpc_error *finish_lithdr_nvridx(grpc_chttp2_hpack_parser *p,
+static grpc_error *finish_lithdr_nvridx(grpc_exec_ctx *exec_ctx,
+                                        grpc_chttp2_hpack_parser *p,
                                         const uint8_t *cur,
                                         const uint8_t *end) {
   grpc_mdelem *md = grpc_chttp2_hptbl_lookup(&p->table, p->index);
   GPR_ASSERT(md != NULL); /* handled in string parsing */
-  grpc_error *err =
-      on_hdr(p, grpc_mdelem_from_metadata_strings(GRPC_MDSTR_REF(md->key),
-                                                  take_string(p, &p->value)),
-             0);
-  if (err != GRPC_ERROR_NONE) return parse_error(p, cur, end, err);
-  return parse_begin(p, cur, end);
+  grpc_error *err = on_hdr(
+      exec_ctx, p, grpc_mdelem_from_metadata_strings(GRPC_MDSTR_REF(md->key),
+                                                     take_string(p, &p->value)),
+      0);
+  if (err != GRPC_ERROR_NONE) return parse_error(exec_ctx, p, cur, end, err);
+  return parse_begin(exec_ctx, p, cur, end);
 }
 
 /* finish a literal header that is never indexed with an extra value */
-static grpc_error *finish_lithdr_nvridx_v(grpc_chttp2_hpack_parser *p,
+static grpc_error *finish_lithdr_nvridx_v(grpc_exec_ctx *exec_ctx,
+                                          grpc_chttp2_hpack_parser *p,
                                           const uint8_t *cur,
                                           const uint8_t *end) {
-  grpc_error *err =
-      on_hdr(p, grpc_mdelem_from_metadata_strings(take_string(p, &p->key),
-                                                  take_string(p, &p->value)),
-             0);
-  if (err != GRPC_ERROR_NONE) return parse_error(p, cur, end, err);
-  return parse_begin(p, cur, end);
+  grpc_error *err = on_hdr(
+      exec_ctx, p, grpc_mdelem_from_metadata_strings(take_string(p, &p->key),
+                                                     take_string(p, &p->value)),
+      0);
+  if (err != GRPC_ERROR_NONE) return parse_error(exec_ctx, p, cur, end, err);
+  return parse_begin(exec_ctx, p, cur, end);
 }
 
 /* parse a literal header that is never indexed; index < 15 */
-static grpc_error *parse_lithdr_nvridx(grpc_chttp2_hpack_parser *p,
+static grpc_error *parse_lithdr_nvridx(grpc_exec_ctx *exec_ctx,
+                                       grpc_chttp2_hpack_parser *p,
                                        const uint8_t *cur, const uint8_t *end) {
   static const grpc_chttp2_hpack_parser_state and_then[] = {
       parse_value_string_with_indexed_key, finish_lithdr_nvridx};
   p->dynamic_table_update_allowed = 0;
   p->next_state = and_then;
   p->index = (*cur) & 0xf;
-  return parse_string_prefix(p, cur + 1, end);
+  return parse_string_prefix(exec_ctx, p, cur + 1, end);
 }
 
 /* parse a literal header that is never indexed; index >= 15 */
-static grpc_error *parse_lithdr_nvridx_x(grpc_chttp2_hpack_parser *p,
+static grpc_error *parse_lithdr_nvridx_x(grpc_exec_ctx *exec_ctx,
+                                         grpc_chttp2_hpack_parser *p,
                                          const uint8_t *cur,
                                          const uint8_t *end) {
   static const grpc_chttp2_hpack_parser_state and_then[] = {
@@ -944,11 +995,12 @@
   p->next_state = and_then;
   p->index = 0xf;
   p->parsing.value = &p->index;
-  return parse_value0(p, cur + 1, end);
+  return parse_value0(exec_ctx, p, cur + 1, end);
 }
 
 /* parse a literal header that is never indexed; index == 0 */
-static grpc_error *parse_lithdr_nvridx_v(grpc_chttp2_hpack_parser *p,
+static grpc_error *parse_lithdr_nvridx_v(grpc_exec_ctx *exec_ctx,
+                                         grpc_chttp2_hpack_parser *p,
                                          const uint8_t *cur,
                                          const uint8_t *end) {
   static const grpc_chttp2_hpack_parser_state and_then[] = {
@@ -956,44 +1008,47 @@
       parse_value_string_with_literal_key, finish_lithdr_nvridx_v};
   p->dynamic_table_update_allowed = 0;
   p->next_state = and_then;
-  return parse_string_prefix(p, cur + 1, end);
+  return parse_string_prefix(exec_ctx, p, cur + 1, end);
 }
 
 /* finish parsing a max table size change */
-static grpc_error *finish_max_tbl_size(grpc_chttp2_hpack_parser *p,
+static grpc_error *finish_max_tbl_size(grpc_exec_ctx *exec_ctx,
+                                       grpc_chttp2_hpack_parser *p,
                                        const uint8_t *cur, const uint8_t *end) {
   if (grpc_http_trace) {
     gpr_log(GPR_INFO, "MAX TABLE SIZE: %d", p->index);
   }
   grpc_error *err =
       grpc_chttp2_hptbl_set_current_table_size(&p->table, p->index);
-  if (err != GRPC_ERROR_NONE) return parse_error(p, cur, end, err);
-  return parse_begin(p, cur, end);
+  if (err != GRPC_ERROR_NONE) return parse_error(exec_ctx, p, cur, end, err);
+  return parse_begin(exec_ctx, p, cur, end);
 }
 
 /* parse a max table size change, max size < 15 */
-static grpc_error *parse_max_tbl_size(grpc_chttp2_hpack_parser *p,
+static grpc_error *parse_max_tbl_size(grpc_exec_ctx *exec_ctx,
+                                      grpc_chttp2_hpack_parser *p,
                                       const uint8_t *cur, const uint8_t *end) {
   if (p->dynamic_table_update_allowed == 0) {
     return parse_error(
-        p, cur, end,
+        exec_ctx, p, cur, end,
         GRPC_ERROR_CREATE(
             "More than two max table size changes in a single frame"));
   }
   p->dynamic_table_update_allowed--;
   p->index = (*cur) & 0x1f;
-  return finish_max_tbl_size(p, cur + 1, end);
+  return finish_max_tbl_size(exec_ctx, p, cur + 1, end);
 }
 
 /* parse a max table size change, max size >= 15 */
-static grpc_error *parse_max_tbl_size_x(grpc_chttp2_hpack_parser *p,
+static grpc_error *parse_max_tbl_size_x(grpc_exec_ctx *exec_ctx,
+                                        grpc_chttp2_hpack_parser *p,
                                         const uint8_t *cur,
                                         const uint8_t *end) {
   static const grpc_chttp2_hpack_parser_state and_then[] = {
       finish_max_tbl_size};
   if (p->dynamic_table_update_allowed == 0) {
     return parse_error(
-        p, cur, end,
+        exec_ctx, p, cur, end,
         GRPC_ERROR_CREATE(
             "More than two max table size changes in a single frame"));
   }
@@ -1001,11 +1056,12 @@
   p->next_state = and_then;
   p->index = 0x1f;
   p->parsing.value = &p->index;
-  return parse_value0(p, cur + 1, end);
+  return parse_value0(exec_ctx, p, cur + 1, end);
 }
 
 /* a parse error: jam the parse state into parse_error, and return error */
-static grpc_error *parse_error(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
+static grpc_error *parse_error(grpc_exec_ctx *exec_ctx,
+                               grpc_chttp2_hpack_parser *p, const uint8_t *cur,
                                const uint8_t *end, grpc_error *err) {
   GPR_ASSERT(err != GRPC_ERROR_NONE);
   if (p->last_error == GRPC_ERROR_NONE) {
@@ -1015,24 +1071,27 @@
   return err;
 }
 
-static grpc_error *still_parse_error(grpc_chttp2_hpack_parser *p,
+static grpc_error *still_parse_error(grpc_exec_ctx *exec_ctx,
+                                     grpc_chttp2_hpack_parser *p,
                                      const uint8_t *cur, const uint8_t *end) {
   return GRPC_ERROR_REF(p->last_error);
 }
 
-static grpc_error *parse_illegal_op(grpc_chttp2_hpack_parser *p,
+static grpc_error *parse_illegal_op(grpc_exec_ctx *exec_ctx,
+                                    grpc_chttp2_hpack_parser *p,
                                     const uint8_t *cur, const uint8_t *end) {
   GPR_ASSERT(cur != end);
   char *msg;
   gpr_asprintf(&msg, "Illegal hpack op code %d", *cur);
   grpc_error *err = GRPC_ERROR_CREATE(msg);
   gpr_free(msg);
-  return parse_error(p, cur, end, err);
+  return parse_error(exec_ctx, p, cur, end, err);
 }
 
 /* parse the 1st byte of a varint into p->parsing.value
    no overflow is possible */
-static grpc_error *parse_value0(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
+static grpc_error *parse_value0(grpc_exec_ctx *exec_ctx,
+                                grpc_chttp2_hpack_parser *p, const uint8_t *cur,
                                 const uint8_t *end) {
   if (cur == end) {
     p->state = parse_value0;
@@ -1042,15 +1101,16 @@
   *p->parsing.value += (*cur) & 0x7f;
 
   if ((*cur) & 0x80) {
-    return parse_value1(p, cur + 1, end);
+    return parse_value1(exec_ctx, p, cur + 1, end);
   } else {
-    return parse_next(p, cur + 1, end);
+    return parse_next(exec_ctx, p, cur + 1, end);
   }
 }
 
 /* parse the 2nd byte of a varint into p->parsing.value
    no overflow is possible */
-static grpc_error *parse_value1(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
+static grpc_error *parse_value1(grpc_exec_ctx *exec_ctx,
+                                grpc_chttp2_hpack_parser *p, const uint8_t *cur,
                                 const uint8_t *end) {
   if (cur == end) {
     p->state = parse_value1;
@@ -1060,15 +1120,16 @@
   *p->parsing.value += (((uint32_t)*cur) & 0x7f) << 7;
 
   if ((*cur) & 0x80) {
-    return parse_value2(p, cur + 1, end);
+    return parse_value2(exec_ctx, p, cur + 1, end);
   } else {
-    return parse_next(p, cur + 1, end);
+    return parse_next(exec_ctx, p, cur + 1, end);
   }
 }
 
 /* parse the 3rd byte of a varint into p->parsing.value
    no overflow is possible */
-static grpc_error *parse_value2(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
+static grpc_error *parse_value2(grpc_exec_ctx *exec_ctx,
+                                grpc_chttp2_hpack_parser *p, const uint8_t *cur,
                                 const uint8_t *end) {
   if (cur == end) {
     p->state = parse_value2;
@@ -1078,15 +1139,16 @@
   *p->parsing.value += (((uint32_t)*cur) & 0x7f) << 14;
 
   if ((*cur) & 0x80) {
-    return parse_value3(p, cur + 1, end);
+    return parse_value3(exec_ctx, p, cur + 1, end);
   } else {
-    return parse_next(p, cur + 1, end);
+    return parse_next(exec_ctx, p, cur + 1, end);
   }
 }
 
 /* parse the 4th byte of a varint into p->parsing.value
    no overflow is possible */
-static grpc_error *parse_value3(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
+static grpc_error *parse_value3(grpc_exec_ctx *exec_ctx,
+                                grpc_chttp2_hpack_parser *p, const uint8_t *cur,
                                 const uint8_t *end) {
   if (cur == end) {
     p->state = parse_value3;
@@ -1096,15 +1158,16 @@
   *p->parsing.value += (((uint32_t)*cur) & 0x7f) << 21;
 
   if ((*cur) & 0x80) {
-    return parse_value4(p, cur + 1, end);
+    return parse_value4(exec_ctx, p, cur + 1, end);
   } else {
-    return parse_next(p, cur + 1, end);
+    return parse_next(exec_ctx, p, cur + 1, end);
   }
 }
 
 /* parse the 5th byte of a varint into p->parsing.value
    depending on the byte, we may overflow, and care must be taken */
-static grpc_error *parse_value4(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
+static grpc_error *parse_value4(grpc_exec_ctx *exec_ctx,
+                                grpc_chttp2_hpack_parser *p, const uint8_t *cur,
                                 const uint8_t *end) {
   uint8_t c;
   uint32_t cur_value;
@@ -1130,9 +1193,9 @@
   *p->parsing.value = cur_value + add_value;
 
   if ((*cur) & 0x80) {
-    return parse_value5up(p, cur + 1, end);
+    return parse_value5up(exec_ctx, p, cur + 1, end);
   } else {
-    return parse_next(p, cur + 1, end);
+    return parse_next(exec_ctx, p, cur + 1, end);
   }
 
 error:
@@ -1142,13 +1205,14 @@
                *p->parsing.value, *cur);
   grpc_error *err = GRPC_ERROR_CREATE(msg);
   gpr_free(msg);
-  return parse_error(p, cur, end, err);
+  return parse_error(exec_ctx, p, cur, end, err);
 }
 
 /* parse any trailing bytes in a varint: it's possible to append an arbitrary
    number of 0x80's and not affect the value - a zero will terminate - and
    anything else will overflow */
-static grpc_error *parse_value5up(grpc_chttp2_hpack_parser *p,
+static grpc_error *parse_value5up(grpc_exec_ctx *exec_ctx,
+                                  grpc_chttp2_hpack_parser *p,
                                   const uint8_t *cur, const uint8_t *end) {
   while (cur != end && *cur == 0x80) {
     ++cur;
@@ -1160,7 +1224,7 @@
   }
 
   if (*cur == 0) {
-    return parse_next(p, cur + 1, end);
+    return parse_next(exec_ctx, p, cur + 1, end);
   }
 
   char *msg;
@@ -1170,11 +1234,12 @@
                *p->parsing.value, *cur);
   grpc_error *err = GRPC_ERROR_CREATE(msg);
   gpr_free(msg);
-  return parse_error(p, cur, end, err);
+  return parse_error(exec_ctx, p, cur, end, err);
 }
 
 /* parse a string prefix */
-static grpc_error *parse_string_prefix(grpc_chttp2_hpack_parser *p,
+static grpc_error *parse_string_prefix(grpc_exec_ctx *exec_ctx,
+                                       grpc_chttp2_hpack_parser *p,
                                        const uint8_t *cur, const uint8_t *end) {
   if (cur == end) {
     p->state = parse_string_prefix;
@@ -1185,9 +1250,9 @@
   p->huff = (*cur) >> 7;
   if (p->strlen == 0x7f) {
     p->parsing.value = &p->strlen;
-    return parse_value0(p, cur + 1, end);
+    return parse_value0(exec_ctx, p, cur + 1, end);
   } else {
-    return parse_next(p, cur + 1, end);
+    return parse_next(exec_ctx, p, cur + 1, end);
   }
 }
 
@@ -1205,7 +1270,8 @@
   str->length += (uint32_t)length;
 }
 
-static grpc_error *append_string(grpc_chttp2_hpack_parser *p,
+static grpc_error *append_string(grpc_exec_ctx *exec_ctx,
+                                 grpc_chttp2_hpack_parser *p,
                                  const uint8_t *cur, const uint8_t *end) {
   grpc_chttp2_hpack_parser_string *str = p->parsing.str;
   uint32_t bits;
@@ -1223,7 +1289,7 @@
       bits = inverse_base64[*cur];
       ++cur;
       if (bits == 255)
-        return parse_error(p, cur, end,
+        return parse_error(exec_ctx, p, cur, end,
                            GRPC_ERROR_CREATE("Illegal base64 character"));
       else if (bits == 64)
         goto b64_byte0;
@@ -1238,7 +1304,7 @@
       bits = inverse_base64[*cur];
       ++cur;
       if (bits == 255)
-        return parse_error(p, cur, end,
+        return parse_error(exec_ctx, p, cur, end,
                            GRPC_ERROR_CREATE("Illegal base64 character"));
       else if (bits == 64)
         goto b64_byte1;
@@ -1253,7 +1319,7 @@
       bits = inverse_base64[*cur];
       ++cur;
       if (bits == 255)
-        return parse_error(p, cur, end,
+        return parse_error(exec_ctx, p, cur, end,
                            GRPC_ERROR_CREATE("Illegal base64 character"));
       else if (bits == 64)
         goto b64_byte2;
@@ -1268,7 +1334,7 @@
       bits = inverse_base64[*cur];
       ++cur;
       if (bits == 255)
-        return parse_error(p, cur, end,
+        return parse_error(exec_ctx, p, cur, end,
                            GRPC_ERROR_CREATE("Illegal base64 character"));
       else if (bits == 64)
         goto b64_byte3;
@@ -1281,11 +1347,12 @@
       goto b64_byte0;
   }
   GPR_UNREACHABLE_CODE(return parse_error(
-      p, cur, end, GRPC_ERROR_CREATE("Should never reach here")));
+      exec_ctx, p, cur, end, GRPC_ERROR_CREATE("Should never reach here")));
 }
 
 /* append a null terminator to a string */
-static grpc_error *finish_str(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
+static grpc_error *finish_str(grpc_exec_ctx *exec_ctx,
+                              grpc_chttp2_hpack_parser *p, const uint8_t *cur,
                               const uint8_t *end) {
   uint8_t terminator = 0;
   uint8_t decoded[2];
@@ -1298,7 +1365,7 @@
       break;
     case B64_BYTE1:
       return parse_error(
-          p, cur, end,
+          exec_ctx, p, cur, end,
           GRPC_ERROR_CREATE("illegal base64 encoding")); /* illegal encoding */
     case B64_BYTE2:
       bits = p->base64_buffer;
@@ -1308,7 +1375,7 @@
                      bits & 0xffff);
         grpc_error *err = GRPC_ERROR_CREATE(msg);
         gpr_free(msg);
-        return parse_error(p, cur, end, err);
+        return parse_error(exec_ctx, p, cur, end, err);
       }
       decoded[0] = (uint8_t)(bits >> 16);
       append_bytes(str, decoded, 1);
@@ -1321,7 +1388,7 @@
                      bits & 0xff);
         grpc_error *err = GRPC_ERROR_CREATE(msg);
         gpr_free(msg);
-        return parse_error(p, cur, end, err);
+        return parse_error(exec_ctx, p, cur, end, err);
       }
       decoded[0] = (uint8_t)(bits >> 16);
       decoded[1] = (uint8_t)(bits >> 8);
@@ -1334,13 +1401,14 @@
 }
 
 /* decode a nibble from a huffman encoded stream */
-static grpc_error *huff_nibble(grpc_chttp2_hpack_parser *p, uint8_t nibble) {
+static grpc_error *huff_nibble(grpc_exec_ctx *exec_ctx,
+                               grpc_chttp2_hpack_parser *p, uint8_t nibble) {
   int16_t emit = emit_sub_tbl[16 * emit_tbl[p->huff_state] + nibble];
   int16_t next = next_sub_tbl[16 * next_tbl[p->huff_state] + nibble];
   if (emit != -1) {
     if (emit >= 0 && emit < 256) {
       uint8_t c = (uint8_t)emit;
-      grpc_error *err = append_string(p, &c, (&c) + 1);
+      grpc_error *err = append_string(exec_ctx, p, &c, (&c) + 1);
       if (err != GRPC_ERROR_NONE) return err;
     } else {
       assert(emit == 256);
@@ -1351,42 +1419,45 @@
 }
 
 /* decode full bytes from a huffman encoded stream */
-static grpc_error *add_huff_bytes(grpc_chttp2_hpack_parser *p,
+static grpc_error *add_huff_bytes(grpc_exec_ctx *exec_ctx,
+                                  grpc_chttp2_hpack_parser *p,
                                   const uint8_t *cur, const uint8_t *end) {
   for (; cur != end; ++cur) {
-    grpc_error *err = huff_nibble(p, *cur >> 4);
-    if (err != GRPC_ERROR_NONE) return parse_error(p, cur, end, err);
-    err = huff_nibble(p, *cur & 0xf);
-    if (err != GRPC_ERROR_NONE) return parse_error(p, cur, end, err);
+    grpc_error *err = huff_nibble(exec_ctx, p, *cur >> 4);
+    if (err != GRPC_ERROR_NONE) return parse_error(exec_ctx, p, cur, end, err);
+    err = huff_nibble(exec_ctx, p, *cur & 0xf);
+    if (err != GRPC_ERROR_NONE) return parse_error(exec_ctx, p, cur, end, err);
   }
   return GRPC_ERROR_NONE;
 }
 
 /* decode some string bytes based on the current decoding mode
    (huffman or not) */
-static grpc_error *add_str_bytes(grpc_chttp2_hpack_parser *p,
+static grpc_error *add_str_bytes(grpc_exec_ctx *exec_ctx,
+                                 grpc_chttp2_hpack_parser *p,
                                  const uint8_t *cur, const uint8_t *end) {
   if (p->huff) {
-    return add_huff_bytes(p, cur, end);
+    return add_huff_bytes(exec_ctx, p, cur, end);
   } else {
-    return append_string(p, cur, end);
+    return append_string(exec_ctx, p, cur, end);
   }
 }
 
 /* parse a string - tries to do large chunks at a time */
-static grpc_error *parse_string(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
+static grpc_error *parse_string(grpc_exec_ctx *exec_ctx,
+                                grpc_chttp2_hpack_parser *p, const uint8_t *cur,
                                 const uint8_t *end) {
   size_t remaining = p->strlen - p->strgot;
   size_t given = (size_t)(end - cur);
   if (remaining <= given) {
-    grpc_error *err = add_str_bytes(p, cur, cur + remaining);
-    if (err != GRPC_ERROR_NONE) return parse_error(p, cur, end, err);
-    err = finish_str(p, cur + remaining, end);
-    if (err != GRPC_ERROR_NONE) return parse_error(p, cur, end, err);
-    return parse_next(p, cur + remaining, end);
+    grpc_error *err = add_str_bytes(exec_ctx, p, cur, cur + remaining);
+    if (err != GRPC_ERROR_NONE) return parse_error(exec_ctx, p, cur, end, err);
+    err = finish_str(exec_ctx, p, cur + remaining, end);
+    if (err != GRPC_ERROR_NONE) return parse_error(exec_ctx, p, cur, end, err);
+    return parse_next(exec_ctx, p, cur + remaining, end);
   } else {
-    grpc_error *err = add_str_bytes(p, cur, cur + given);
-    if (err != GRPC_ERROR_NONE) return parse_error(p, cur, end, err);
+    grpc_error *err = add_str_bytes(exec_ctx, p, cur, cur + given);
+    if (err != GRPC_ERROR_NONE) return parse_error(exec_ctx, p, cur, end, err);
     GPR_ASSERT(given <= UINT32_MAX - p->strgot);
     p->strgot += (uint32_t)given;
     p->state = parse_string;
@@ -1395,7 +1466,8 @@
 }
 
 /* begin parsing a string - performs setup, calls parse_string */
-static grpc_error *begin_parse_string(grpc_chttp2_hpack_parser *p,
+static grpc_error *begin_parse_string(grpc_exec_ctx *exec_ctx,
+                                      grpc_chttp2_hpack_parser *p,
                                       const uint8_t *cur, const uint8_t *end,
                                       uint8_t binary,
                                       grpc_chttp2_hpack_parser_string *str) {
@@ -1404,13 +1476,14 @@
   p->parsing.str = str;
   p->huff_state = 0;
   p->binary = binary;
-  return parse_string(p, cur, end);
+  return parse_string(exec_ctx, p, cur, end);
 }
 
 /* parse the key string */
-static grpc_error *parse_key_string(grpc_chttp2_hpack_parser *p,
+static grpc_error *parse_key_string(grpc_exec_ctx *exec_ctx,
+                                    grpc_chttp2_hpack_parser *p,
                                     const uint8_t *cur, const uint8_t *end) {
-  return begin_parse_string(p, cur, end, NOT_BINARY, &p->key);
+  return begin_parse_string(exec_ctx, p, cur, end, NOT_BINARY, &p->key);
 }
 
 /* check if a key represents a binary header or not */
@@ -1435,24 +1508,27 @@
 }
 
 /* parse the value string */
-static grpc_error *parse_value_string(grpc_chttp2_hpack_parser *p,
+static grpc_error *parse_value_string(grpc_exec_ctx *exec_ctx,
+                                      grpc_chttp2_hpack_parser *p,
                                       const uint8_t *cur, const uint8_t *end,
                                       bool is_binary) {
-  return begin_parse_string(p, cur, end, is_binary ? B64_BYTE0 : NOT_BINARY,
-                            &p->value);
+  return begin_parse_string(exec_ctx, p, cur, end,
+                            is_binary ? B64_BYTE0 : NOT_BINARY, &p->value);
 }
 
 static grpc_error *parse_value_string_with_indexed_key(
-    grpc_chttp2_hpack_parser *p, const uint8_t *cur, const uint8_t *end) {
+    grpc_exec_ctx *exec_ctx, grpc_chttp2_hpack_parser *p, const uint8_t *cur,
+    const uint8_t *end) {
   bool is_binary = false;
   grpc_error *err = is_binary_indexed_header(p, &is_binary);
-  if (err != GRPC_ERROR_NONE) return parse_error(p, cur, end, err);
-  return parse_value_string(p, cur, end, is_binary);
+  if (err != GRPC_ERROR_NONE) return parse_error(exec_ctx, p, cur, end, err);
+  return parse_value_string(exec_ctx, p, cur, end, is_binary);
 }
 
 static grpc_error *parse_value_string_with_literal_key(
-    grpc_chttp2_hpack_parser *p, const uint8_t *cur, const uint8_t *end) {
-  return parse_value_string(p, cur, end, is_binary_literal_header(p));
+    grpc_exec_ctx *exec_ctx, grpc_chttp2_hpack_parser *p, const uint8_t *cur,
+    const uint8_t *end) {
+  return parse_value_string(exec_ctx, p, cur, end, is_binary_literal_header(p));
 }
 
 /* PUBLIC INTERFACE */
@@ -1484,27 +1560,36 @@
   gpr_free(p->value.str);
 }
 
-grpc_error *grpc_chttp2_hpack_parser_parse(grpc_chttp2_hpack_parser *p,
+grpc_error *grpc_chttp2_hpack_parser_parse(grpc_exec_ctx *exec_ctx,
+                                           grpc_chttp2_hpack_parser *p,
                                            const uint8_t *beg,
                                            const uint8_t *end) {
   /* TODO(ctiller): limit the distance of end from beg, and perform multiple
      steps in the event of a large chunk of data to limit
      stack space usage when no tail call optimization is
      available */
-  return p->state(p, beg, end);
+  return p->state(exec_ctx, p, beg, end);
 }
 
-grpc_error *grpc_chttp2_header_parser_parse(
-    grpc_exec_ctx *exec_ctx, void *hpack_parser,
-    grpc_chttp2_transport_parsing *transport_parsing,
-    grpc_chttp2_stream_parsing *stream_parsing, gpr_slice slice, int is_last) {
+typedef void (*maybe_complete_func_type)(grpc_exec_ctx *exec_ctx,
+                                         grpc_chttp2_transport *t,
+                                         grpc_chttp2_stream *s);
+static const maybe_complete_func_type maybe_complete_funcs[] = {
+    grpc_chttp2_maybe_complete_recv_initial_metadata,
+    grpc_chttp2_maybe_complete_recv_trailing_metadata};
+
+grpc_error *grpc_chttp2_header_parser_parse(grpc_exec_ctx *exec_ctx,
+                                            void *hpack_parser,
+                                            grpc_chttp2_transport *t,
+                                            grpc_chttp2_stream *s,
+                                            gpr_slice slice, int is_last) {
   grpc_chttp2_hpack_parser *parser = hpack_parser;
   GPR_TIMER_BEGIN("grpc_chttp2_hpack_parser_parse", 0);
-  if (stream_parsing != NULL) {
-    stream_parsing->stats.incoming.header_bytes += GPR_SLICE_LENGTH(slice);
+  if (s != NULL) {
+    s->stats.incoming.header_bytes += GPR_SLICE_LENGTH(slice);
   }
   grpc_error *error = grpc_chttp2_hpack_parser_parse(
-      parser, GPR_SLICE_START_PTR(slice), GPR_SLICE_END_PTR(slice));
+      exec_ctx, parser, GPR_SLICE_START_PTR(slice), GPR_SLICE_END_PTR(slice));
   if (error != GRPC_ERROR_NONE) {
     GPR_TIMER_END("grpc_chttp2_hpack_parser_parse", 0);
     return error;
@@ -1517,20 +1602,19 @@
     }
     /* need to check for null stream: this can occur if we receive an invalid
        stream id on a header */
-    if (stream_parsing != NULL) {
+    if (s != NULL) {
       if (parser->is_boundary) {
-        if (stream_parsing->header_frames_received ==
-            GPR_ARRAY_SIZE(stream_parsing->got_metadata_on_parse)) {
+        if (s->header_frames_received == GPR_ARRAY_SIZE(s->metadata_buffer)) {
           return GRPC_ERROR_CREATE("Too many trailer frames");
         }
-        stream_parsing
-            ->got_metadata_on_parse[stream_parsing->header_frames_received] = 1;
-        stream_parsing->header_frames_received++;
-        grpc_chttp2_list_add_parsing_seen_stream(transport_parsing,
-                                                 stream_parsing);
+        s->published_metadata[s->header_frames_received] =
+            GRPC_METADATA_PUBLISHED_FROM_WIRE;
+        maybe_complete_funcs[s->header_frames_received](exec_ctx, t, s);
+        s->header_frames_received++;
       }
       if (parser->is_eof) {
-        stream_parsing->received_close = 1;
+        grpc_chttp2_mark_stream_closed(exec_ctx, t, s, true, false,
+                                       GRPC_ERROR_NONE);
       }
     }
     parser->on_header = NULL;
diff --git a/src/core/ext/transport/chttp2/transport/hpack_parser.h b/src/core/ext/transport/chttp2/transport/hpack_parser.h
index 78eb38d..0290c78 100644
--- a/src/core/ext/transport/chttp2/transport/hpack_parser.h
+++ b/src/core/ext/transport/chttp2/transport/hpack_parser.h
@@ -45,7 +45,8 @@
 typedef struct grpc_chttp2_hpack_parser grpc_chttp2_hpack_parser;
 
 typedef grpc_error *(*grpc_chttp2_hpack_parser_state)(
-    grpc_chttp2_hpack_parser *p, const uint8_t *beg, const uint8_t *end);
+    grpc_exec_ctx *exec_ctx, grpc_chttp2_hpack_parser *p, const uint8_t *beg,
+    const uint8_t *end);
 
 typedef struct {
   char *str;
@@ -55,7 +56,7 @@
 
 struct grpc_chttp2_hpack_parser {
   /* user specified callback for each header output */
-  void (*on_header)(void *user_data, grpc_mdelem *md);
+  void (*on_header)(grpc_exec_ctx *exec_ctx, void *user_data, grpc_mdelem *md);
   void *on_header_user_data;
 
   grpc_error *last_error;
@@ -104,15 +105,17 @@
 void grpc_chttp2_hpack_parser_set_has_priority(grpc_chttp2_hpack_parser *p);
 
 /* returns 1 on success, 0 on error */
-grpc_error *grpc_chttp2_hpack_parser_parse(grpc_chttp2_hpack_parser *p,
+grpc_error *grpc_chttp2_hpack_parser_parse(grpc_exec_ctx *exec_ctx,
+                                           grpc_chttp2_hpack_parser *p,
                                            const uint8_t *beg,
                                            const uint8_t *end);
 
 /* wraps grpc_chttp2_hpack_parser_parse to provide a frame level parser for
    the transport */
-grpc_error *grpc_chttp2_header_parser_parse(
-    grpc_exec_ctx *exec_ctx, void *hpack_parser,
-    grpc_chttp2_transport_parsing *transport_parsing,
-    grpc_chttp2_stream_parsing *stream_parsing, gpr_slice slice, int is_last);
+grpc_error *grpc_chttp2_header_parser_parse(grpc_exec_ctx *exec_ctx,
+                                            void *hpack_parser,
+                                            grpc_chttp2_transport *t,
+                                            grpc_chttp2_stream *s,
+                                            gpr_slice slice, int is_last);
 
 #endif /* GRPC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_HPACK_PARSER_H */
diff --git a/src/core/ext/transport/chttp2/transport/internal.h b/src/core/ext/transport/chttp2/transport/internal.h
index 04b788b..01f521c 100644
--- a/src/core/ext/transport/chttp2/transport/internal.h
+++ b/src/core/ext/transport/chttp2/transport/internal.h
@@ -53,31 +53,25 @@
 #include "src/core/lib/transport/connectivity_state.h"
 #include "src/core/lib/transport/transport_impl.h"
 
-typedef struct grpc_chttp2_transport grpc_chttp2_transport;
-typedef struct grpc_chttp2_stream grpc_chttp2_stream;
-
 /* streams are kept in various linked lists depending on what things need to
    happen to them... this enum labels each list */
 typedef enum {
-  GRPC_CHTTP2_LIST_ALL_STREAMS,
-  GRPC_CHTTP2_LIST_CHECK_READ_OPS,
-  GRPC_CHTTP2_LIST_UNANNOUNCED_INCOMING_WINDOW_AVAILABLE,
   GRPC_CHTTP2_LIST_WRITABLE,
   GRPC_CHTTP2_LIST_WRITING,
-  GRPC_CHTTP2_LIST_WRITTEN,
-  GRPC_CHTTP2_LIST_PARSING_SEEN,
-  GRPC_CHTTP2_LIST_CLOSED_WAITING_FOR_PARSING,
-  GRPC_CHTTP2_LIST_CLOSED_WAITING_FOR_WRITING,
   GRPC_CHTTP2_LIST_STALLED_BY_TRANSPORT,
-  /* streams waiting for the outgoing window in the writing path, they will be
-   * merged to the stalled list or writable list under transport lock. */
-  GRPC_CHTTP2_LIST_WRITING_STALLED_BY_TRANSPORT,
   /** streams that are waiting to start because there are too many concurrent
       streams on the connection */
   GRPC_CHTTP2_LIST_WAITING_FOR_CONCURRENCY,
   STREAM_LIST_COUNT /* must be last */
 } grpc_chttp2_stream_list_id;
 
+typedef enum {
+  GRPC_CHTTP2_WRITE_STATE_IDLE,
+  GRPC_CHTTP2_WRITE_STATE_WRITING,
+  GRPC_CHTTP2_WRITE_STATE_WRITING_WITH_MORE,
+  GRPC_CHTTP2_WRITE_STATE_WRITING_WITH_MORE_AND_COVERED_BY_POLLER,
+} grpc_chttp2_write_state;
+
 /* deframer state for the overall http2 stream of bytes */
 typedef enum {
   /* prefix: one entry per http2 connection prefix byte */
@@ -152,6 +146,12 @@
   struct grpc_chttp2_outstanding_ping *prev;
 } grpc_chttp2_outstanding_ping;
 
+typedef struct grpc_chttp2_write_cb {
+  int64_t call_at_byte;
+  grpc_closure *closure;
+  struct grpc_chttp2_write_cb *next;
+} grpc_chttp2_write_cb;
+
 /* forward declared in frame_data.h */
 struct grpc_chttp2_incoming_byte_stream {
   grpc_byte_stream base;
@@ -161,12 +161,13 @@
 
   grpc_chttp2_transport *transport;
   grpc_chttp2_stream *stream;
-  int is_tail;
+  bool is_tail;
 
   gpr_mu slice_mu;  // protects slices, on_next
   gpr_slice_buffer slices;
   grpc_closure *on_next;
   gpr_slice *next;
+  uint32_t remaining_bytes;
 
   struct {
     grpc_closure closure;
@@ -178,172 +179,16 @@
   grpc_closure finished_action;
 };
 
-typedef struct {
-  /** data to write next write */
-  gpr_slice_buffer qbuf;
-
-  /** window available for us to send to peer */
-  int64_t outgoing_window;
-  /** window available to announce to peer */
-  int64_t announce_incoming_window;
-  /** how much window would we like to have for incoming_window */
-  uint32_t connection_window_target;
-
-  /** have we seen a goaway */
-  uint8_t seen_goaway;
-  /** have we sent a goaway */
-  uint8_t sent_goaway;
-
-  /** is this transport a client? */
-  uint8_t is_client;
-  /** are the local settings dirty and need to be sent? */
-  uint8_t dirtied_local_settings;
-  /** have local settings been sent? */
-  uint8_t sent_local_settings;
-  /** bitmask of setting indexes to send out */
-  uint32_t force_send_settings;
-  /** settings values */
-  uint32_t settings[GRPC_NUM_SETTING_SETS][GRPC_CHTTP2_NUM_SETTINGS];
-
-  /** what is the next stream id to be allocated by this peer?
-      copied to next_stream_id in parsing when parsing commences */
-  uint32_t next_stream_id;
-
-  /** how far to lookahead in a stream? */
-  uint32_t stream_lookahead;
-
-  /** last received stream id */
-  uint32_t last_incoming_stream_id;
-
-  /** pings awaiting responses */
-  grpc_chttp2_outstanding_ping pings;
-  /** next payload for an outgoing ping */
-  uint64_t ping_counter;
-
-  /** concurrent stream count: updated when not parsing,
-      so this is a strict over-estimation on the client */
-  uint32_t concurrent_stream_count;
-} grpc_chttp2_transport_global;
-
-typedef struct {
-  /** data to write now */
-  gpr_slice_buffer outbuf;
-  /** hpack encoding */
-  grpc_chttp2_hpack_compressor hpack_compressor;
-  int64_t outgoing_window;
-  /** is this a client? */
-  uint8_t is_client;
-  /** callback for when writing is done */
-  grpc_closure done_cb;
-  /** maximum frame size */
-  uint32_t max_frame_size;
-} grpc_chttp2_transport_writing;
-
-struct grpc_chttp2_transport_parsing {
-  /** is this transport a client? (boolean) */
-  uint8_t is_client;
-
-  /** were settings updated? */
-  uint8_t settings_updated;
-  /** was a settings ack received? */
-  uint8_t settings_ack_received;
-  /** was a goaway frame received? */
-  uint8_t goaway_received;
-
-  /** initial window change */
-  int64_t initial_window_update;
-
-  /** data to write later - after parsing */
-  gpr_slice_buffer qbuf;
-  /** parser for headers */
-  grpc_chttp2_hpack_parser hpack_parser;
-  /** simple one shot parsers */
-  union {
-    grpc_chttp2_window_update_parser window_update;
-    grpc_chttp2_settings_parser settings;
-    grpc_chttp2_ping_parser ping;
-    grpc_chttp2_rst_stream_parser rst_stream;
-  } simple;
-  /** parser for goaway frames */
-  grpc_chttp2_goaway_parser goaway_parser;
-
-  /** window available for peer to send to us */
-  int64_t incoming_window;
-
-  /** next stream id available at the time of beginning parsing */
-  uint32_t next_stream_id;
-  uint32_t last_incoming_stream_id;
-
-  /* deframing */
-  grpc_chttp2_deframe_transport_state deframe_state;
-  uint8_t incoming_frame_type;
-  uint8_t incoming_frame_flags;
-  uint8_t header_eof;
-  bool is_first_frame;
-  uint32_t expect_continuation_stream_id;
-  uint32_t incoming_frame_size;
-  uint32_t incoming_stream_id;
-
-  /* current max frame size */
-  uint32_t max_frame_size;
-
-  /* active parser */
-  void *parser_data;
-  grpc_chttp2_stream_parsing *incoming_stream;
-  grpc_error *(*parser)(grpc_exec_ctx *exec_ctx, void *parser_user_data,
-                        grpc_chttp2_transport_parsing *transport_parsing,
-                        grpc_chttp2_stream_parsing *stream_parsing,
-                        gpr_slice slice, int is_last);
-
-  /* received settings */
-  uint32_t settings[GRPC_CHTTP2_NUM_SETTINGS];
-  /* last settings that were sent */
-  uint32_t last_sent_settings[GRPC_CHTTP2_NUM_SETTINGS];
-
-  /* goaway data */
-  grpc_status_code goaway_error;
-  uint32_t goaway_last_stream_index;
-  gpr_slice goaway_text;
-
-  int64_t outgoing_window;
-};
-
-typedef enum {
-  /** no writing activity allowed */
-  GRPC_CHTTP2_WRITES_CORKED,
-  /** no writing activity */
-  GRPC_CHTTP2_WRITING_INACTIVE,
-  /** write has been requested and scheduled against the workqueue */
-  GRPC_CHTTP2_WRITE_SCHEDULED,
-  /** write has been initiated after being reaped from the workqueue */
-  GRPC_CHTTP2_WRITING,
-  /** write has been initiated, AND another write needs to be started once it's
-      done */
-  GRPC_CHTTP2_WRITING_STALE_WITH_POLLER,
-  GRPC_CHTTP2_WRITING_STALE_NO_POLLER,
-} grpc_chttp2_write_state;
-
 struct grpc_chttp2_transport {
   grpc_transport base; /* must be first */
   gpr_refcount refs;
   grpc_endpoint *ep;
   char *peer_string;
 
-  /** when this drops to zero it's safe to shutdown the endpoint */
-  gpr_refcount shutdown_ep_refs;
+  grpc_combiner *combiner;
 
-  struct {
-    grpc_combiner *combiner;
-
-    /** is a thread currently in the global lock */
-    bool global_active;
-    /** is a thread currently parsing */
-    bool parsing_active;
-    /** write execution state of the transport */
-    grpc_chttp2_write_state write_state;
-    /** has a check_read_ops been scheduled */
-    bool check_read_ops_scheduled;
-  } executor;
+  /** write execution state of the transport */
+  grpc_chttp2_write_state write_state;
 
   /** is the transport destroying itself? */
   uint8_t destroying;
@@ -356,39 +201,16 @@
   /** various lists of streams */
   grpc_chttp2_stream_list lists[STREAM_LIST_COUNT];
 
-  /** global state for reading/writing */
-  grpc_chttp2_transport_global global;
-  /** state only accessible by the chain of execution that
-      set writing_state >= GRPC_WRITING, and only by the writing closure
-      chain. */
-  grpc_chttp2_transport_writing writing;
-  /** state only accessible by the chain of execution that
-      set parsing_active=1 */
-  grpc_chttp2_transport_parsing parsing;
+  /** maps stream id to grpc_chttp2_stream objects */
+  grpc_chttp2_stream_map stream_map;
 
-  /** maps stream id to grpc_chttp2_stream objects;
-      owned by the parsing thread when parsing */
-  grpc_chttp2_stream_map parsing_stream_map;
+  grpc_closure write_action_begin_locked;
+  grpc_closure write_action;
+  grpc_closure write_action_end;
+  grpc_closure write_action_end_locked;
 
-  /** streams created by the client (possibly during parsing);
-      merged with parsing_stream_map during unlock when no
-      parsing is occurring */
-  grpc_chttp2_stream_map new_stream_map;
-
-  /** closure to execute writing */
-  grpc_closure writing_action;
-  /** closure to start reading from the endpoint */
-  grpc_closure reading_action;
-  grpc_closure reading_action_locked;
-  grpc_closure post_parse_locked;
-  /** closure to actually do parsing */
-  grpc_closure parsing_action;
-  /** closure to initiate writing */
-  grpc_closure initiate_writing;
-  /** closure to finish writing */
-  grpc_closure terminate_writing;
-  /** closure to flush read state up the stack */
-  grpc_closure initiate_read_flush_locked;
+  grpc_closure read_action_begin;
+  grpc_closure read_action_locked;
 
   /** incoming read bytes */
   gpr_slice_buffer read_buffer;
@@ -408,11 +230,115 @@
     grpc_connectivity_state_tracker state_tracker;
   } channel_callback;
 
-  /** Transport op to be applied post-parsing */
-  grpc_transport_op *post_parsing_op;
+  /** data to write now */
+  gpr_slice_buffer outbuf;
+  /** hpack encoding */
+  grpc_chttp2_hpack_compressor hpack_compressor;
+  int64_t outgoing_window;
+  /** is this a client? */
+  uint8_t is_client;
+
+  /** data to write next write */
+  gpr_slice_buffer qbuf;
+
+  /** window available to announce to peer */
+  int64_t announce_incoming_window;
+  /** how much window would we like to have for incoming_window */
+  uint32_t connection_window_target;
+
+  /** have we seen a goaway */
+  uint8_t seen_goaway;
+  /** have we sent a goaway */
+  uint8_t sent_goaway;
+
+  /** are the local settings dirty and need to be sent? */
+  uint8_t dirtied_local_settings;
+  /** have local settings been sent? */
+  uint8_t sent_local_settings;
+  /** bitmask of setting indexes to send out */
+  uint32_t force_send_settings;
+  /** settings values */
+  uint32_t settings[GRPC_NUM_SETTING_SETS][GRPC_CHTTP2_NUM_SETTINGS];
+
+  /** what is the next stream id to be allocated by this peer?
+      copied to next_stream_id in parsing when parsing commences */
+  uint32_t next_stream_id;
+
+  /** how far to lookahead in a stream? */
+  uint32_t stream_lookahead;
+
+  /** last new stream id */
+  uint32_t last_new_stream_id;
+
+  /** pings awaiting responses */
+  grpc_chttp2_outstanding_ping pings;
+  /** next payload for an outgoing ping */
+  uint64_t ping_counter;
+
+  /** parser for headers */
+  grpc_chttp2_hpack_parser hpack_parser;
+  /** simple one shot parsers */
+  union {
+    grpc_chttp2_window_update_parser window_update;
+    grpc_chttp2_settings_parser settings;
+    grpc_chttp2_ping_parser ping;
+    grpc_chttp2_rst_stream_parser rst_stream;
+  } simple;
+  /** parser for goaway frames */
+  grpc_chttp2_goaway_parser goaway_parser;
+
+  /** initial window change */
+  int64_t initial_window_update;
+
+  /** window available for peer to send to us */
+  int64_t incoming_window;
+
+  /* deframing */
+  grpc_chttp2_deframe_transport_state deframe_state;
+  uint8_t incoming_frame_type;
+  uint8_t incoming_frame_flags;
+  uint8_t header_eof;
+  bool is_first_frame;
+  uint32_t expect_continuation_stream_id;
+  uint32_t incoming_frame_size;
+  uint32_t incoming_stream_id;
+
+  /* active parser */
+  void *parser_data;
+  grpc_chttp2_stream *incoming_stream;
+  grpc_error *(*parser)(grpc_exec_ctx *exec_ctx, void *parser_user_data,
+                        grpc_chttp2_transport *t, grpc_chttp2_stream *s,
+                        gpr_slice slice, int is_last);
+
+  /* goaway data */
+  grpc_status_code goaway_error;
+  uint32_t goaway_last_stream_index;
+  gpr_slice goaway_text;
+
+  grpc_chttp2_write_cb *write_cb_pool;
+
+  /* if non-NULL, close the transport with this error when writes are finished
+   */
+  grpc_error *close_transport_on_writes_finished;
 };
 
-typedef struct {
+typedef enum {
+  GRPC_METADATA_NOT_PUBLISHED,
+  GRPC_METADATA_SYNTHESIZED_FROM_FAKE,
+  GRPC_METADATA_PUBLISHED_FROM_WIRE,
+  GPRC_METADATA_PUBLISHED_AT_CLOSE
+} grpc_published_metadata_method;
+
+struct grpc_chttp2_stream {
+  grpc_chttp2_transport *t;
+  grpc_stream_refcount *refcount;
+
+  grpc_closure destroy_stream;
+  void *destroy_stream_arg;
+
+  grpc_chttp2_stream_link links[STREAM_LIST_COUNT];
+  uint8_t included[STREAM_LIST_COUNT];
+
   /** HTTP2 stream id for this stream, or zero if one has not been assigned */
   uint32_t id;
 
@@ -422,20 +348,22 @@
       As the upper layer offers more bytes, this value increases.
       As bytes are read, this value decreases. */
   uint32_t max_recv_bytes;
-  /** The number of bytes the upper layer has offered to read but we have
-      not yet announced to HTTP2 flow control.
-      As the upper layers offer to read more bytes, this value increases.
-      As we advertise incoming flow control window, this value decreases. */
-  uint32_t unannounced_incoming_window_for_parse;
-  uint32_t unannounced_incoming_window_for_writing;
   /** things the upper layers would like to send */
   grpc_metadata_batch *send_initial_metadata;
   grpc_closure *send_initial_metadata_finished;
-  grpc_byte_stream *send_message;
-  grpc_closure *send_message_finished;
   grpc_metadata_batch *send_trailing_metadata;
   grpc_closure *send_trailing_metadata_finished;
 
+  grpc_byte_stream *fetching_send_message;
+  uint32_t fetched_send_message_length;
+  gpr_slice fetching_slice;
+  int64_t next_message_end_offset;
+  int64_t flow_controlled_bytes_written;
+  bool complete_fetch_covered_by_poller;
+  grpc_closure complete_fetch;
+  grpc_closure complete_fetch_locked;
+  grpc_closure *fetching_send_message_finished;
+
   grpc_metadata_batch *recv_initial_metadata;
   grpc_closure *recv_initial_metadata_ready;
   grpc_byte_stream **recv_message;
@@ -455,95 +383,44 @@
   bool read_closed;
   /** Are all published incoming byte streams closed. */
   bool all_incoming_byte_streams_finished;
-  /** Is this stream in the stream map. */
-  bool in_stream_map;
   /** Has this stream seen an error.
       If true, then pending incoming frames can be thrown away. */
   bool seen_error;
-  bool exceeded_metadata_size;
 
   /** the error that resulted in this stream being read-closed */
   grpc_error *read_closed_error;
   /** the error that resulted in this stream being write-closed */
   grpc_error *write_closed_error;
 
-  bool published_initial_metadata;
-  bool published_trailing_metadata;
+  grpc_published_metadata_method published_metadata[2];
   bool final_metadata_requested;
 
-  grpc_chttp2_incoming_metadata_buffer received_initial_metadata;
-  grpc_chttp2_incoming_metadata_buffer received_trailing_metadata;
+  grpc_chttp2_incoming_metadata_buffer metadata_buffer[2];
 
   grpc_chttp2_incoming_frame_queue incoming_frames;
 
   gpr_timespec deadline;
-} grpc_chttp2_stream_global;
 
-typedef struct {
-  /** HTTP2 stream id for this stream, or zero if one has not been assigned */
-  uint32_t id;
-  uint8_t fetching;
-  bool sent_initial_metadata;
-  uint8_t sent_message;
-  uint8_t sent_trailing_metadata;
-  uint8_t read_closed;
-  /** send this initial metadata */
-  grpc_metadata_batch *send_initial_metadata;
-  grpc_byte_stream *send_message;
-  grpc_metadata_batch *send_trailing_metadata;
-  int64_t outgoing_window;
-  /** how much window should we announce? */
-  uint32_t announce_window;
-  gpr_slice_buffer flow_controlled_buffer;
-  gpr_slice fetching_slice;
-  size_t stream_fetched;
-  grpc_closure finished_fetch;
-  /** stats gathered during the write */
-  grpc_transport_one_way_stats stats;
-} grpc_chttp2_stream_writing;
-
-struct grpc_chttp2_stream_parsing {
   /** saw some stream level error */
   grpc_error *forced_close_error;
-  /** HTTP2 stream id for this stream, or zero if one has not been assigned */
-  uint32_t id;
-  /** has this stream received a close */
-  uint8_t received_close;
   /** how many header frames have we received? */
   uint8_t header_frames_received;
-  /** which metadata did we get (on this parse) */
-  uint8_t got_metadata_on_parse[2];
-  /** should we raise the seen_error flag in transport_global */
-  bool seen_error;
-  bool exceeded_metadata_size;
   /** window available for peer to send to us */
   int64_t incoming_window;
   /** parsing state for data frames */
   grpc_chttp2_data_parser data_parser;
-  /** amount of window given */
-  int64_t outgoing_window;
   /** number of bytes received - reset at end of parse thread execution */
   int64_t received_bytes;
-  /** stats gathered during the parse */
-  grpc_transport_stream_stats stats;
 
-  /** incoming metadata */
-  grpc_chttp2_incoming_metadata_buffer metadata_buffer[2];
-};
+  bool sent_initial_metadata;
+  bool sent_trailing_metadata;
+  /** how much window should we announce? */
+  uint32_t announce_window;
+  gpr_slice_buffer flow_controlled_buffer;
 
-struct grpc_chttp2_stream {
-  grpc_chttp2_transport *t;
-  grpc_stream_refcount *refcount;
-  grpc_chttp2_stream_global global;
-  grpc_chttp2_stream_writing writing;
-  grpc_chttp2_stream_parsing parsing;
-
-  grpc_closure init_stream;
-  grpc_closure destroy_stream;
-  void *destroy_stream_arg;
-
-  grpc_chttp2_stream_link links[STREAM_LIST_COUNT];
-  uint8_t included[STREAM_LIST_COUNT];
+  grpc_chttp2_write_cb *on_write_finished_cbs;
+  grpc_chttp2_write_cb *finish_after_write;
+  size_t sending_bytes;
 };
 
 /** Transport writing call flow:
@@ -559,162 +436,71 @@
     The actual call chain is documented in the implementation of this function.
     */
 void grpc_chttp2_initiate_write(grpc_exec_ctx *exec_ctx,
-                                grpc_chttp2_transport_global *transport_global,
+                                grpc_chttp2_transport *t,
                                 bool covered_by_poller, const char *reason);
 
 /** Someone is unlocking the transport mutex: check to see if writes
-    are required, and schedule them if so */
-int grpc_chttp2_unlocking_check_writes(grpc_exec_ctx *exec_ctx,
-                                       grpc_chttp2_transport_global *global,
-                                       grpc_chttp2_transport_writing *writing);
-void grpc_chttp2_perform_writes(
-    grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_writing *transport_writing,
-    grpc_endpoint *endpoint);
-void grpc_chttp2_terminate_writing(grpc_exec_ctx *exec_ctx,
-                                   void *transport_writing, grpc_error *error);
-void grpc_chttp2_cleanup_writing(grpc_exec_ctx *exec_ctx,
-                                 grpc_chttp2_transport_global *global,
-                                 grpc_chttp2_transport_writing *writing);
+    are required, and frame them if so */
+bool grpc_chttp2_begin_write(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t);
+void grpc_chttp2_end_write(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t,
+                           grpc_error *error);
 
-void grpc_chttp2_prepare_to_read(grpc_chttp2_transport_global *global,
-                                 grpc_chttp2_transport_parsing *parsing);
 /** Process one slice of incoming data; return 1 if the connection is still
     viable after reading, or 0 if the connection should be torn down */
-grpc_error *grpc_chttp2_perform_read(
-    grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_parsing *transport_parsing,
-    gpr_slice slice);
-void grpc_chttp2_publish_reads(grpc_exec_ctx *exec_ctx,
-                               grpc_chttp2_transport_global *global,
-                               grpc_chttp2_transport_parsing *parsing);
+grpc_error *grpc_chttp2_perform_read(grpc_exec_ctx *exec_ctx,
+                                     grpc_chttp2_transport *t, gpr_slice slice);
 
-bool grpc_chttp2_list_add_writable_stream(
-    grpc_chttp2_transport_global *transport_global,
-    grpc_chttp2_stream_global *stream_global);
+bool grpc_chttp2_list_add_writable_stream(grpc_chttp2_transport *t,
+                                          grpc_chttp2_stream *s);
 /** Get a writable stream
     returns non-zero if there was a stream available */
-int grpc_chttp2_list_pop_writable_stream(
-    grpc_chttp2_transport_global *transport_global,
-    grpc_chttp2_transport_writing *transport_writing,
-    grpc_chttp2_stream_global **stream_global,
-    grpc_chttp2_stream_writing **stream_writing);
+int grpc_chttp2_list_pop_writable_stream(grpc_chttp2_transport *t,
+                                         grpc_chttp2_stream **s);
 bool grpc_chttp2_list_remove_writable_stream(
-    grpc_chttp2_transport_global *transport_global,
-    grpc_chttp2_stream_global *stream_global) GRPC_MUST_USE_RESULT;
+    grpc_chttp2_transport *t, grpc_chttp2_stream *s) GRPC_MUST_USE_RESULT;
 
-void grpc_chttp2_list_add_writing_stream(
-    grpc_chttp2_transport_writing *transport_writing,
-    grpc_chttp2_stream_writing *stream_writing);
-int grpc_chttp2_list_have_writing_streams(
-    grpc_chttp2_transport_writing *transport_writing);
-int grpc_chttp2_list_pop_writing_stream(
-    grpc_chttp2_transport_writing *transport_writing,
-    grpc_chttp2_stream_writing **stream_writing);
+bool grpc_chttp2_list_add_writing_stream(grpc_chttp2_transport *t,
+                                         grpc_chttp2_stream *s);
+int grpc_chttp2_list_have_writing_streams(grpc_chttp2_transport *t);
+int grpc_chttp2_list_pop_writing_stream(grpc_chttp2_transport *t,
+                                        grpc_chttp2_stream **s);
 
-void grpc_chttp2_list_add_written_stream(
-    grpc_chttp2_transport_writing *transport_writing,
-    grpc_chttp2_stream_writing *stream_writing);
-int grpc_chttp2_list_pop_written_stream(
-    grpc_chttp2_transport_global *transport_global,
-    grpc_chttp2_transport_writing *transport_writing,
-    grpc_chttp2_stream_global **stream_global,
-    grpc_chttp2_stream_writing **stream_writing);
+void grpc_chttp2_list_add_written_stream(grpc_chttp2_transport *t,
+                                         grpc_chttp2_stream *s);
+int grpc_chttp2_list_pop_written_stream(grpc_chttp2_transport *t,
+                                        grpc_chttp2_stream **s);
 
-void grpc_chttp2_list_add_parsing_seen_stream(
-    grpc_chttp2_transport_parsing *transport_parsing,
-    grpc_chttp2_stream_parsing *stream_parsing);
-int grpc_chttp2_list_pop_parsing_seen_stream(
-    grpc_chttp2_transport_global *transport_global,
-    grpc_chttp2_transport_parsing *transport_parsing,
-    grpc_chttp2_stream_global **stream_global,
-    grpc_chttp2_stream_parsing **stream_parsing);
+void grpc_chttp2_list_add_waiting_for_concurrency(grpc_chttp2_transport *t,
+                                                  grpc_chttp2_stream *s);
+int grpc_chttp2_list_pop_waiting_for_concurrency(grpc_chttp2_transport *t,
+                                                 grpc_chttp2_stream **s);
 
-void grpc_chttp2_list_add_waiting_for_concurrency(
-    grpc_chttp2_transport_global *transport_global,
-    grpc_chttp2_stream_global *stream_global);
-int grpc_chttp2_list_pop_waiting_for_concurrency(
-    grpc_chttp2_transport_global *transport_global,
-    grpc_chttp2_stream_global **stream_global);
+void grpc_chttp2_list_add_stalled_by_transport(grpc_chttp2_transport *t,
+                                               grpc_chttp2_stream *s);
+int grpc_chttp2_list_pop_stalled_by_transport(grpc_chttp2_transport *t,
+                                              grpc_chttp2_stream **s);
+void grpc_chttp2_list_remove_stalled_by_transport(grpc_chttp2_transport *t,
+                                                  grpc_chttp2_stream *s);
 
-void grpc_chttp2_list_add_check_read_ops(
-    grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_global *transport_global,
-    grpc_chttp2_stream_global *stream_global);
-bool grpc_chttp2_list_remove_check_read_ops(
-    grpc_chttp2_transport_global *transport_global,
-    grpc_chttp2_stream_global *stream_global);
-int grpc_chttp2_list_pop_check_read_ops(
-    grpc_chttp2_transport_global *transport_global,
-    grpc_chttp2_stream_global **stream_global);
+grpc_chttp2_stream *grpc_chttp2_parsing_lookup_stream(grpc_chttp2_transport *t,
+                                                      uint32_t id);
+grpc_chttp2_stream *grpc_chttp2_parsing_accept_stream(grpc_exec_ctx *exec_ctx,
+                                                      grpc_chttp2_transport *t,
+                                                      uint32_t id);
 
-void grpc_chttp2_list_add_writing_stalled_by_transport(
-    grpc_chttp2_transport_writing *transport_writing,
-    grpc_chttp2_stream_writing *stream_writing);
-bool grpc_chttp2_list_flush_writing_stalled_by_transport(
-    grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_writing *transport_writing);
+void grpc_chttp2_add_incoming_goaway(grpc_exec_ctx *exec_ctx,
+                                     grpc_chttp2_transport *t,
+                                     uint32_t goaway_error,
+                                     gpr_slice goaway_text);
 
-void grpc_chttp2_list_add_stalled_by_transport(
-    grpc_chttp2_transport_writing *transport_writing,
-    grpc_chttp2_stream_writing *stream_writing);
-int grpc_chttp2_list_pop_stalled_by_transport(
-    grpc_chttp2_transport_global *transport_global,
-    grpc_chttp2_stream_global **stream_global);
-void grpc_chttp2_list_remove_stalled_by_transport(
-    grpc_chttp2_transport_global *transport_global,
-    grpc_chttp2_stream_global *stream_global);
+void grpc_chttp2_parsing_become_skip_parser(grpc_exec_ctx *exec_ctx,
+                                            grpc_chttp2_transport *t);
 
-void grpc_chttp2_list_add_unannounced_incoming_window_available(
-    grpc_chttp2_transport_global *transport_global,
-    grpc_chttp2_stream_global *stream_global);
-void grpc_chttp2_list_remove_unannounced_incoming_window_available(
-    grpc_chttp2_transport_global *transport_global,
-    grpc_chttp2_stream_global *stream_global);
-int grpc_chttp2_list_pop_unannounced_incoming_window_available(
-    grpc_chttp2_transport_global *transport_global,
-    grpc_chttp2_transport_parsing *transport_parsing,
-    grpc_chttp2_stream_global **stream_global,
-    grpc_chttp2_stream_parsing **stream_parsing);
-
-void grpc_chttp2_list_add_closed_waiting_for_parsing(
-    grpc_chttp2_transport_global *transport_global,
-    grpc_chttp2_stream_global *stream_global);
-int grpc_chttp2_list_pop_closed_waiting_for_parsing(
-    grpc_chttp2_transport_global *transport_global,
-    grpc_chttp2_stream_global **stream_global);
-
-void grpc_chttp2_list_add_closed_waiting_for_writing(
-    grpc_chttp2_transport_global *transport_global,
-    grpc_chttp2_stream_global *stream_global);
-int grpc_chttp2_list_pop_closed_waiting_for_writing(
-    grpc_chttp2_transport_global *transport_global,
-    grpc_chttp2_stream_global **stream_global);
-
-grpc_chttp2_stream_parsing *grpc_chttp2_parsing_lookup_stream(
-    grpc_chttp2_transport_parsing *transport_parsing, uint32_t id);
-grpc_chttp2_stream_parsing *grpc_chttp2_parsing_accept_stream(
-    grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_parsing *transport_parsing,
-    uint32_t id);
-
-void grpc_chttp2_add_incoming_goaway(
-    grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_global *transport_global,
-    uint32_t goaway_error, gpr_slice goaway_text);
-
-void grpc_chttp2_register_stream(grpc_chttp2_transport *t,
-                                 grpc_chttp2_stream *s);
-/* returns 1 if this is the last stream, 0 otherwise */
-int grpc_chttp2_unregister_stream(grpc_chttp2_transport *t,
-                                  grpc_chttp2_stream *s) GRPC_MUST_USE_RESULT;
-int grpc_chttp2_has_streams(grpc_chttp2_transport *t);
-void grpc_chttp2_for_all_streams(
-    grpc_chttp2_transport_global *transport_global, void *user_data,
-    void (*cb)(grpc_chttp2_transport_global *transport_global, void *user_data,
-               grpc_chttp2_stream_global *stream_global));
-
-void grpc_chttp2_parsing_become_skip_parser(
-    grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_parsing *transport_parsing);
-
-void grpc_chttp2_complete_closure_step(
-    grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_global *transport_global,
-    grpc_chttp2_stream_global *stream_global, grpc_closure **pclosure,
-    grpc_error *error);
+void grpc_chttp2_complete_closure_step(grpc_exec_ctx *exec_ctx,
+                                       grpc_chttp2_transport *t,
+                                       grpc_chttp2_stream *s,
+                                       grpc_closure **pclosure,
+                                       grpc_error *error, const char *desc);
 
 #define GRPC_CHTTP2_CLIENT_CONNECT_STRING "PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n"
 #define GRPC_CHTTP2_CLIENT_CONNECT_STRLEN \
@@ -805,57 +591,83 @@
                                const char *var2, int is_client,
                                uint32_t stream_id, int64_t val1, int64_t val2);
 
-void grpc_chttp2_fake_status(grpc_exec_ctx *exec_ctx,
-                             grpc_chttp2_transport_global *transport_global,
-                             grpc_chttp2_stream_global *stream,
+void grpc_chttp2_fake_status(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t,
+                             grpc_chttp2_stream *stream,
                              grpc_status_code status, gpr_slice *details);
-void grpc_chttp2_mark_stream_closed(
-    grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_global *transport_global,
-    grpc_chttp2_stream_global *stream_global, int close_reads, int close_writes,
-    grpc_error *error);
+void grpc_chttp2_mark_stream_closed(grpc_exec_ctx *exec_ctx,
+                                    grpc_chttp2_transport *t,
+                                    grpc_chttp2_stream *s, int close_reads,
+                                    int close_writes, grpc_error *error);
 void grpc_chttp2_start_writing(grpc_exec_ctx *exec_ctx,
-                               grpc_chttp2_transport_global *transport_global);
+                               grpc_chttp2_transport *t);
 
 #ifdef GRPC_STREAM_REFCOUNT_DEBUG
-#define GRPC_CHTTP2_STREAM_REF(stream_global, reason) \
-  grpc_chttp2_stream_ref(stream_global, reason)
-#define GRPC_CHTTP2_STREAM_UNREF(exec_ctx, stream_global, reason) \
-  grpc_chttp2_stream_unref(exec_ctx, stream_global, reason)
-void grpc_chttp2_stream_ref(grpc_chttp2_stream_global *stream_global,
-                            const char *reason);
-void grpc_chttp2_stream_unref(grpc_exec_ctx *exec_ctx,
-                              grpc_chttp2_stream_global *stream_global,
+#define GRPC_CHTTP2_STREAM_REF(stream, reason) \
+  grpc_chttp2_stream_ref(stream, reason)
+#define GRPC_CHTTP2_STREAM_UNREF(exec_ctx, stream, reason) \
+  grpc_chttp2_stream_unref(exec_ctx, stream, reason)
+void grpc_chttp2_stream_ref(grpc_chttp2_stream *s, const char *reason);
+void grpc_chttp2_stream_unref(grpc_exec_ctx *exec_ctx, grpc_chttp2_stream *s,
                               const char *reason);
 #else
-#define GRPC_CHTTP2_STREAM_REF(stream_global, reason) \
-  grpc_chttp2_stream_ref(stream_global)
-#define GRPC_CHTTP2_STREAM_UNREF(exec_ctx, stream_global, reason) \
-  grpc_chttp2_stream_unref(exec_ctx, stream_global)
-void grpc_chttp2_stream_ref(grpc_chttp2_stream_global *stream_global);
-void grpc_chttp2_stream_unref(grpc_exec_ctx *exec_ctx,
-                              grpc_chttp2_stream_global *stream_global);
+#define GRPC_CHTTP2_STREAM_REF(stream, reason) grpc_chttp2_stream_ref(stream)
+#define GRPC_CHTTP2_STREAM_UNREF(exec_ctx, stream, reason) \
+  grpc_chttp2_stream_unref(exec_ctx, stream)
+void grpc_chttp2_stream_ref(grpc_chttp2_stream *s);
+void grpc_chttp2_stream_unref(grpc_exec_ctx *exec_ctx, grpc_chttp2_stream *s);
+#endif
+
+//#define GRPC_CHTTP2_REFCOUNTING_DEBUG 1
+#ifdef GRPC_CHTTP2_REFCOUNTING_DEBUG
+#define GRPC_CHTTP2_REF_TRANSPORT(t, r) \
+  grpc_chttp2_ref_transport(t, r, __FILE__, __LINE__)
+#define GRPC_CHTTP2_UNREF_TRANSPORT(cl, t, r) \
+  grpc_chttp2_unref_transport(cl, t, r, __FILE__, __LINE__)
+void grpc_chttp2_unref_transport(grpc_exec_ctx *exec_ctx,
+                                 grpc_chttp2_transport *t, const char *reason,
+                                 const char *file, int line);
+void grpc_chttp2_ref_transport(grpc_chttp2_transport *t, const char *reason,
+                               const char *file, int line);
+#else
+#define GRPC_CHTTP2_REF_TRANSPORT(t, r) grpc_chttp2_ref_transport(t)
+#define GRPC_CHTTP2_UNREF_TRANSPORT(cl, t, r) grpc_chttp2_unref_transport(cl, t)
+void grpc_chttp2_unref_transport(grpc_exec_ctx *exec_ctx,
+                                 grpc_chttp2_transport *t);
+void grpc_chttp2_ref_transport(grpc_chttp2_transport *t);
 #endif
 
 grpc_chttp2_incoming_byte_stream *grpc_chttp2_incoming_byte_stream_create(
-    grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_parsing *transport_parsing,
-    grpc_chttp2_stream_parsing *stream_parsing, uint32_t frame_size,
-    uint32_t flags, grpc_chttp2_incoming_frame_queue *add_to_queue);
+    grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t, grpc_chttp2_stream *s,
+    uint32_t frame_size, uint32_t flags);
 void grpc_chttp2_incoming_byte_stream_push(grpc_exec_ctx *exec_ctx,
                                            grpc_chttp2_incoming_byte_stream *bs,
                                            gpr_slice slice);
 void grpc_chttp2_incoming_byte_stream_finished(
     grpc_exec_ctx *exec_ctx, grpc_chttp2_incoming_byte_stream *bs,
-    grpc_error *error, int from_parsing_thread);
+    grpc_error *error);
 
-void grpc_chttp2_ack_ping(grpc_exec_ctx *exec_ctx,
-                          grpc_chttp2_transport_parsing *parsing,
+void grpc_chttp2_ack_ping(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t,
                           const uint8_t *opaque_8bytes);
 
 /** add a ref to the stream and add it to the writable list;
     ref will be dropped in writing.c */
 void grpc_chttp2_become_writable(grpc_exec_ctx *exec_ctx,
-                                 grpc_chttp2_transport_global *transport_global,
-                                 grpc_chttp2_stream_global *stream_global,
-                                 bool covered_by_poller, const char *reason);
+                                 grpc_chttp2_transport *t,
+                                 grpc_chttp2_stream *s, bool covered_by_poller,
+                                 const char *reason);
+
+void grpc_chttp2_cancel_stream(grpc_exec_ctx *exec_ctx,
+                               grpc_chttp2_transport *t, grpc_chttp2_stream *s,
+                               grpc_error *due_to_error);
+
+void grpc_chttp2_maybe_complete_recv_initial_metadata(grpc_exec_ctx *exec_ctx,
+                                                      grpc_chttp2_transport *t,
+                                                      grpc_chttp2_stream *s);
+void grpc_chttp2_maybe_complete_recv_message(grpc_exec_ctx *exec_ctx,
+                                             grpc_chttp2_transport *t,
+                                             grpc_chttp2_stream *s);
+void grpc_chttp2_maybe_complete_recv_trailing_metadata(grpc_exec_ctx *exec_ctx,
+                                                       grpc_chttp2_transport *t,
+                                                       grpc_chttp2_stream *s);
 
 #endif /* GRPC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_INTERNAL_H */
diff --git a/src/core/ext/transport/chttp2/transport/parsing.c b/src/core/ext/transport/chttp2/transport/parsing.c
index 0e6d579..8005350 100644
--- a/src/core/ext/transport/chttp2/transport/parsing.c
+++ b/src/core/ext/transport/chttp2/transport/parsing.c
@@ -45,227 +45,34 @@
 #include "src/core/lib/transport/static_metadata.h"
 #include "src/core/lib/transport/timeout_encoding.h"
 
-#define TRANSPORT_FROM_PARSING(tp)                                        \
-  ((grpc_chttp2_transport *)((char *)(tp)-offsetof(grpc_chttp2_transport, \
-                                                   parsing)))
+static grpc_error *init_frame_parser(grpc_exec_ctx *exec_ctx,
+                                     grpc_chttp2_transport *t);
+static grpc_error *init_header_frame_parser(grpc_exec_ctx *exec_ctx,
+                                            grpc_chttp2_transport *t,
+                                            int is_continuation);
+static grpc_error *init_data_frame_parser(grpc_exec_ctx *exec_ctx,
+                                          grpc_chttp2_transport *t);
+static grpc_error *init_rst_stream_parser(grpc_exec_ctx *exec_ctx,
+                                          grpc_chttp2_transport *t);
+static grpc_error *init_settings_frame_parser(grpc_exec_ctx *exec_ctx,
+                                              grpc_chttp2_transport *t);
+static grpc_error *init_window_update_frame_parser(grpc_exec_ctx *exec_ctx,
+                                                   grpc_chttp2_transport *t);
+static grpc_error *init_ping_parser(grpc_exec_ctx *exec_ctx,
+                                    grpc_chttp2_transport *t);
+static grpc_error *init_goaway_parser(grpc_exec_ctx *exec_ctx,
+                                      grpc_chttp2_transport *t);
+static grpc_error *init_skip_frame_parser(grpc_exec_ctx *exec_ctx,
+                                          grpc_chttp2_transport *t,
+                                          int is_header);
 
-static grpc_error *init_frame_parser(
-    grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_parsing *transport_parsing);
-static grpc_error *init_header_frame_parser(
-    grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_parsing *transport_parsing,
-    int is_continuation);
-static grpc_error *init_data_frame_parser(
-    grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_parsing *transport_parsing);
-static grpc_error *init_rst_stream_parser(
-    grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_parsing *transport_parsing);
-static grpc_error *init_settings_frame_parser(
-    grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_parsing *transport_parsing);
-static grpc_error *init_window_update_frame_parser(
-    grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_parsing *transport_parsing);
-static grpc_error *init_ping_parser(
-    grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_parsing *transport_parsing);
-static grpc_error *init_goaway_parser(
-    grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_parsing *transport_parsing);
-static grpc_error *init_skip_frame_parser(
-    grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_parsing *transport_parsing,
-    int is_header);
+static grpc_error *parse_frame_slice(grpc_exec_ctx *exec_ctx,
+                                     grpc_chttp2_transport *t, gpr_slice slice,
+                                     int is_last);
 
-static grpc_error *parse_frame_slice(
-    grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_parsing *transport_parsing,
-    gpr_slice slice, int is_last);
-
-void grpc_chttp2_prepare_to_read(
-    grpc_chttp2_transport_global *transport_global,
-    grpc_chttp2_transport_parsing *transport_parsing) {
-  grpc_chttp2_stream_global *stream_global;
-  grpc_chttp2_stream_parsing *stream_parsing;
-
-  GPR_TIMER_BEGIN("grpc_chttp2_prepare_to_read", 0);
-
-  transport_parsing->next_stream_id = transport_global->next_stream_id;
-  memcpy(transport_parsing->last_sent_settings,
-         transport_global->settings[GRPC_SENT_SETTINGS],
-         sizeof(transport_parsing->last_sent_settings));
-  transport_parsing->max_frame_size =
-      transport_global->settings[GRPC_ACKED_SETTINGS]
-                                [GRPC_CHTTP2_SETTINGS_MAX_FRAME_SIZE];
-
-  /* update the parsing view of incoming window */
-  while (grpc_chttp2_list_pop_unannounced_incoming_window_available(
-      transport_global, transport_parsing, &stream_global, &stream_parsing)) {
-    GRPC_CHTTP2_FLOW_MOVE_STREAM("parse", transport_parsing, stream_parsing,
-                                 incoming_window, stream_global,
-                                 unannounced_incoming_window_for_parse);
-  }
-
-  GPR_TIMER_END("grpc_chttp2_prepare_to_read", 0);
-}
-
-void grpc_chttp2_publish_reads(
-    grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_global *transport_global,
-    grpc_chttp2_transport_parsing *transport_parsing) {
-  grpc_chttp2_stream_global *stream_global;
-  grpc_chttp2_stream_parsing *stream_parsing;
-  int was_zero;
-  int is_zero;
-
-  /* transport_parsing->last_incoming_stream_id is used as
-     last-grpc_chttp2_stream-id when
-     sending GOAWAY frame.
-     https://tools.ietf.org/html/draft-ietf-httpbis-http2-17#section-6.8
-     says that last-grpc_chttp2_stream-id is peer-initiated grpc_chttp2_stream
-     ID.  So,
-     since we don't have server pushed streams, client should send
-     GOAWAY last-grpc_chttp2_stream-id=0 in this case. */
-  if (!transport_parsing->is_client) {
-    transport_global->last_incoming_stream_id =
-        transport_parsing->last_incoming_stream_id;
-  }
-
-  /* update global settings */
-  if (transport_parsing->settings_updated) {
-    memcpy(transport_global->settings[GRPC_PEER_SETTINGS],
-           transport_parsing->settings, sizeof(transport_parsing->settings));
-    transport_parsing->settings_updated = 0;
-  }
-
-  /* update settings based on ack if received */
-  if (transport_parsing->settings_ack_received) {
-    memcpy(transport_global->settings[GRPC_ACKED_SETTINGS],
-           transport_global->settings[GRPC_SENT_SETTINGS],
-           GRPC_CHTTP2_NUM_SETTINGS * sizeof(uint32_t));
-    transport_parsing->settings_ack_received = 0;
-    transport_global->sent_local_settings = 0;
-  }
-
-  /* move goaway to the global state if we received one (it will be
-     published later */
-  if (transport_parsing->goaway_received) {
-    grpc_chttp2_add_incoming_goaway(exec_ctx, transport_global,
-                                    (uint32_t)transport_parsing->goaway_error,
-                                    transport_parsing->goaway_text);
-    transport_parsing->goaway_text = gpr_empty_slice();
-    transport_parsing->goaway_received = 0;
-  }
-
-  /* propagate flow control tokens to global state */
-  was_zero = transport_global->outgoing_window <= 0;
-  GRPC_CHTTP2_FLOW_MOVE_TRANSPORT("parsed", transport_global, outgoing_window,
-                                  transport_parsing, outgoing_window);
-  is_zero = transport_global->outgoing_window <= 0;
-  if (was_zero && !is_zero) {
-    grpc_chttp2_initiate_write(exec_ctx, transport_global, false,
-                               "new_global_flow_control");
-  }
-
-  if (transport_parsing->incoming_window <
-      transport_global->connection_window_target * 3 / 4) {
-    int64_t announce_bytes = transport_global->connection_window_target -
-                             transport_parsing->incoming_window;
-    GRPC_CHTTP2_FLOW_CREDIT_TRANSPORT("parsed", transport_global,
-                                      announce_incoming_window, announce_bytes);
-    GRPC_CHTTP2_FLOW_CREDIT_TRANSPORT("parsed", transport_parsing,
-                                      incoming_window, announce_bytes);
-    grpc_chttp2_initiate_write(exec_ctx, transport_global, false,
-                               "global incoming window");
-  }
-
-  /* for each stream that saw an update, fixup global state */
-  while (grpc_chttp2_list_pop_parsing_seen_stream(
-      transport_global, transport_parsing, &stream_global, &stream_parsing)) {
-    if (stream_parsing->seen_error) {
-      stream_global->seen_error = true;
-      stream_global->exceeded_metadata_size =
-          stream_parsing->exceeded_metadata_size;
-      grpc_chttp2_list_add_check_read_ops(exec_ctx, transport_global,
-                                          stream_global);
-    }
-
-    /* flush stats to global stream state */
-    grpc_transport_move_stats(&stream_parsing->stats, &stream_global->stats);
-
-    /* update outgoing flow control window */
-    was_zero = stream_global->outgoing_window <= 0;
-    GRPC_CHTTP2_FLOW_MOVE_STREAM("parsed", transport_global, stream_global,
-                                 outgoing_window, stream_parsing,
-                                 outgoing_window);
-    is_zero = stream_global->outgoing_window <= 0;
-    if (was_zero && !is_zero) {
-      grpc_chttp2_become_writable(exec_ctx, transport_global, stream_global,
-                                  false, "stream.read_flow_control");
-    }
-
-    stream_global->max_recv_bytes -= (uint32_t)GPR_MIN(
-        stream_global->max_recv_bytes, stream_parsing->received_bytes);
-    stream_parsing->received_bytes = 0;
-
-    /* publish incoming stream ops */
-    if (stream_global->incoming_frames.tail != NULL) {
-      stream_global->incoming_frames.tail->is_tail = 0;
-    }
-    if (stream_parsing->data_parser.incoming_frames.head != NULL) {
-      grpc_chttp2_list_add_check_read_ops(exec_ctx, transport_global,
-                                          stream_global);
-    }
-    grpc_chttp2_incoming_frame_queue_merge(
-        &stream_global->incoming_frames,
-        &stream_parsing->data_parser.incoming_frames);
-    if (stream_global->incoming_frames.tail != NULL) {
-      stream_global->incoming_frames.tail->is_tail = 1;
-    }
-
-    if (!stream_global->published_initial_metadata &&
-        stream_parsing->got_metadata_on_parse[0]) {
-      stream_parsing->got_metadata_on_parse[0] = 0;
-      stream_global->published_initial_metadata = 1;
-      GPR_SWAP(grpc_chttp2_incoming_metadata_buffer,
-               stream_parsing->metadata_buffer[0],
-               stream_global->received_initial_metadata);
-      grpc_chttp2_list_add_check_read_ops(exec_ctx, transport_global,
-                                          stream_global);
-    }
-    if (!stream_global->published_trailing_metadata &&
-        stream_parsing->got_metadata_on_parse[1]) {
-      stream_parsing->got_metadata_on_parse[1] = 0;
-      stream_global->published_trailing_metadata = 1;
-      GPR_SWAP(grpc_chttp2_incoming_metadata_buffer,
-               stream_parsing->metadata_buffer[1],
-               stream_global->received_trailing_metadata);
-      grpc_chttp2_list_add_check_read_ops(exec_ctx, transport_global,
-                                          stream_global);
-    }
-
-    if (stream_parsing->forced_close_error != GRPC_ERROR_NONE) {
-      intptr_t reason;
-      bool has_reason = grpc_error_get_int(stream_parsing->forced_close_error,
-                                           GRPC_ERROR_INT_HTTP2_ERROR, &reason);
-      if (has_reason && reason != GRPC_CHTTP2_NO_ERROR) {
-        grpc_status_code status_code =
-            has_reason
-                ? grpc_chttp2_http2_error_to_grpc_status(
-                      (grpc_chttp2_error_code)reason, stream_global->deadline)
-                : GRPC_STATUS_INTERNAL;
-        const char *status_details =
-            grpc_error_string(stream_parsing->forced_close_error);
-        gpr_slice slice_details = gpr_slice_from_copied_string(status_details);
-        grpc_error_free_string(status_details);
-        grpc_chttp2_fake_status(exec_ctx, transport_global, stream_global,
-                                status_code, &slice_details);
-      }
-      grpc_chttp2_mark_stream_closed(exec_ctx, transport_global, stream_global,
-                                     1, 1, stream_parsing->forced_close_error);
-    }
-
-    if (stream_parsing->received_close) {
-      grpc_chttp2_mark_stream_closed(exec_ctx, transport_global, stream_global,
-                                     1, 0, GRPC_ERROR_NONE);
-    }
-  }
-}
-
-grpc_error *grpc_chttp2_perform_read(
-    grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_parsing *transport_parsing,
-    gpr_slice slice) {
+grpc_error *grpc_chttp2_perform_read(grpc_exec_ctx *exec_ctx,
+                                     grpc_chttp2_transport *t,
+                                     gpr_slice slice) {
   uint8_t *beg = GPR_SLICE_START_PTR(slice);
   uint8_t *end = GPR_SLICE_END_PTR(slice);
   uint8_t *cur = beg;
@@ -273,7 +80,7 @@
 
   if (cur == end) return GRPC_ERROR_NONE;
 
-  switch (transport_parsing->deframe_state) {
+  switch (t->deframe_state) {
     case GRPC_DTS_CLIENT_PREFIX_0:
     case GRPC_DTS_CLIENT_PREFIX_1:
     case GRPC_DTS_CLIENT_PREFIX_2:
@@ -298,25 +105,22 @@
     case GRPC_DTS_CLIENT_PREFIX_21:
     case GRPC_DTS_CLIENT_PREFIX_22:
     case GRPC_DTS_CLIENT_PREFIX_23:
-      while (cur != end && transport_parsing->deframe_state != GRPC_DTS_FH_0) {
-        if (*cur != GRPC_CHTTP2_CLIENT_CONNECT_STRING[transport_parsing
-                                                          ->deframe_state]) {
+      while (cur != end && t->deframe_state != GRPC_DTS_FH_0) {
+        if (*cur != GRPC_CHTTP2_CLIENT_CONNECT_STRING[t->deframe_state]) {
           char *msg;
           gpr_asprintf(
               &msg,
               "Connect string mismatch: expected '%c' (%d) got '%c' (%d) "
               "at byte %d",
-              GRPC_CHTTP2_CLIENT_CONNECT_STRING[transport_parsing
-                                                    ->deframe_state],
-              (int)(uint8_t)GRPC_CHTTP2_CLIENT_CONNECT_STRING
-                  [transport_parsing->deframe_state],
-              *cur, (int)*cur, transport_parsing->deframe_state);
+              GRPC_CHTTP2_CLIENT_CONNECT_STRING[t->deframe_state],
+              (int)(uint8_t)GRPC_CHTTP2_CLIENT_CONNECT_STRING[t->deframe_state],
+              *cur, (int)*cur, t->deframe_state);
           err = GRPC_ERROR_CREATE(msg);
           gpr_free(msg);
           return err;
         }
         ++cur;
-        ++transport_parsing->deframe_state;
+        ++t->deframe_state;
       }
       if (cur == end) {
         return GRPC_ERROR_NONE;
@@ -325,100 +129,95 @@
     dts_fh_0:
     case GRPC_DTS_FH_0:
       GPR_ASSERT(cur < end);
-      transport_parsing->incoming_frame_size = ((uint32_t)*cur) << 16;
+      t->incoming_frame_size = ((uint32_t)*cur) << 16;
       if (++cur == end) {
-        transport_parsing->deframe_state = GRPC_DTS_FH_1;
+        t->deframe_state = GRPC_DTS_FH_1;
         return GRPC_ERROR_NONE;
       }
     /* fallthrough */
     case GRPC_DTS_FH_1:
       GPR_ASSERT(cur < end);
-      transport_parsing->incoming_frame_size |= ((uint32_t)*cur) << 8;
+      t->incoming_frame_size |= ((uint32_t)*cur) << 8;
       if (++cur == end) {
-        transport_parsing->deframe_state = GRPC_DTS_FH_2;
+        t->deframe_state = GRPC_DTS_FH_2;
         return GRPC_ERROR_NONE;
       }
     /* fallthrough */
     case GRPC_DTS_FH_2:
       GPR_ASSERT(cur < end);
-      transport_parsing->incoming_frame_size |= *cur;
+      t->incoming_frame_size |= *cur;
       if (++cur == end) {
-        transport_parsing->deframe_state = GRPC_DTS_FH_3;
+        t->deframe_state = GRPC_DTS_FH_3;
         return GRPC_ERROR_NONE;
       }
     /* fallthrough */
     case GRPC_DTS_FH_3:
       GPR_ASSERT(cur < end);
-      transport_parsing->incoming_frame_type = *cur;
+      t->incoming_frame_type = *cur;
       if (++cur == end) {
-        transport_parsing->deframe_state = GRPC_DTS_FH_4;
+        t->deframe_state = GRPC_DTS_FH_4;
         return GRPC_ERROR_NONE;
       }
     /* fallthrough */
     case GRPC_DTS_FH_4:
       GPR_ASSERT(cur < end);
-      transport_parsing->incoming_frame_flags = *cur;
+      t->incoming_frame_flags = *cur;
       if (++cur == end) {
-        transport_parsing->deframe_state = GRPC_DTS_FH_5;
+        t->deframe_state = GRPC_DTS_FH_5;
         return GRPC_ERROR_NONE;
       }
     /* fallthrough */
     case GRPC_DTS_FH_5:
       GPR_ASSERT(cur < end);
-      transport_parsing->incoming_stream_id = (((uint32_t)*cur) & 0x7f) << 24;
+      t->incoming_stream_id = (((uint32_t)*cur) & 0x7f) << 24;
       if (++cur == end) {
-        transport_parsing->deframe_state = GRPC_DTS_FH_6;
+        t->deframe_state = GRPC_DTS_FH_6;
         return GRPC_ERROR_NONE;
       }
     /* fallthrough */
     case GRPC_DTS_FH_6:
       GPR_ASSERT(cur < end);
-      transport_parsing->incoming_stream_id |= ((uint32_t)*cur) << 16;
+      t->incoming_stream_id |= ((uint32_t)*cur) << 16;
       if (++cur == end) {
-        transport_parsing->deframe_state = GRPC_DTS_FH_7;
+        t->deframe_state = GRPC_DTS_FH_7;
         return GRPC_ERROR_NONE;
       }
     /* fallthrough */
     case GRPC_DTS_FH_7:
       GPR_ASSERT(cur < end);
-      transport_parsing->incoming_stream_id |= ((uint32_t)*cur) << 8;
+      t->incoming_stream_id |= ((uint32_t)*cur) << 8;
       if (++cur == end) {
-        transport_parsing->deframe_state = GRPC_DTS_FH_8;
+        t->deframe_state = GRPC_DTS_FH_8;
         return GRPC_ERROR_NONE;
       }
     /* fallthrough */
     case GRPC_DTS_FH_8:
       GPR_ASSERT(cur < end);
-      transport_parsing->incoming_stream_id |= ((uint32_t)*cur);
-      transport_parsing->deframe_state = GRPC_DTS_FRAME;
-      err = init_frame_parser(exec_ctx, transport_parsing);
+      t->incoming_stream_id |= ((uint32_t)*cur);
+      t->deframe_state = GRPC_DTS_FRAME;
+      err = init_frame_parser(exec_ctx, t);
       if (err != GRPC_ERROR_NONE) {
         return err;
       }
-      if (transport_parsing->incoming_stream_id != 0 &&
-          transport_parsing->incoming_stream_id >
-              transport_parsing->last_incoming_stream_id) {
-        transport_parsing->last_incoming_stream_id =
-            transport_parsing->incoming_stream_id;
-      }
-      if (transport_parsing->incoming_frame_size == 0) {
-        err = parse_frame_slice(exec_ctx, transport_parsing, gpr_empty_slice(),
-                                1);
+      if (t->incoming_frame_size == 0) {
+        err = parse_frame_slice(exec_ctx, t, gpr_empty_slice(), 1);
         if (err != GRPC_ERROR_NONE) {
           return err;
         }
-        transport_parsing->incoming_stream = NULL;
+        t->incoming_stream = NULL;
         if (++cur == end) {
-          transport_parsing->deframe_state = GRPC_DTS_FH_0;
+          t->deframe_state = GRPC_DTS_FH_0;
           return GRPC_ERROR_NONE;
         }
         goto dts_fh_0; /* loop */
-      } else if (transport_parsing->incoming_frame_size >
-                 transport_parsing->max_frame_size) {
+      } else if (t->incoming_frame_size >
+                 t->settings[GRPC_ACKED_SETTINGS]
+                            [GRPC_CHTTP2_SETTINGS_MAX_FRAME_SIZE]) {
         char *msg;
         gpr_asprintf(&msg, "Frame size %d is larger than max frame size %d",
-                     transport_parsing->incoming_frame_size,
-                     transport_parsing->max_frame_size);
+                     t->incoming_frame_size,
+                     t->settings[GRPC_ACKED_SETTINGS]
+                                [GRPC_CHTTP2_SETTINGS_MAX_FRAME_SIZE]);
         err = GRPC_ERROR_CREATE(msg);
         gpr_free(msg);
         return err;
@@ -429,41 +228,39 @@
     /* fallthrough */
     case GRPC_DTS_FRAME:
       GPR_ASSERT(cur < end);
-      if ((uint32_t)(end - cur) == transport_parsing->incoming_frame_size) {
-        err = parse_frame_slice(exec_ctx, transport_parsing,
+      if ((uint32_t)(end - cur) == t->incoming_frame_size) {
+        err = parse_frame_slice(exec_ctx, t,
                                 gpr_slice_sub_no_ref(slice, (size_t)(cur - beg),
                                                      (size_t)(end - beg)),
                                 1);
         if (err != GRPC_ERROR_NONE) {
           return err;
         }
-        transport_parsing->deframe_state = GRPC_DTS_FH_0;
-        transport_parsing->incoming_stream = NULL;
+        t->deframe_state = GRPC_DTS_FH_0;
+        t->incoming_stream = NULL;
         return GRPC_ERROR_NONE;
-      } else if ((uint32_t)(end - cur) >
-                 transport_parsing->incoming_frame_size) {
+      } else if ((uint32_t)(end - cur) > t->incoming_frame_size) {
         size_t cur_offset = (size_t)(cur - beg);
         err = parse_frame_slice(
-            exec_ctx, transport_parsing,
-            gpr_slice_sub_no_ref(
-                slice, cur_offset,
-                cur_offset + transport_parsing->incoming_frame_size),
+            exec_ctx, t,
+            gpr_slice_sub_no_ref(slice, cur_offset,
+                                 cur_offset + t->incoming_frame_size),
             1);
         if (err != GRPC_ERROR_NONE) {
           return err;
         }
-        cur += transport_parsing->incoming_frame_size;
-        transport_parsing->incoming_stream = NULL;
+        cur += t->incoming_frame_size;
+        t->incoming_stream = NULL;
         goto dts_fh_0; /* loop */
       } else {
-        err = parse_frame_slice(exec_ctx, transport_parsing,
+        err = parse_frame_slice(exec_ctx, t,
                                 gpr_slice_sub_no_ref(slice, (size_t)(cur - beg),
                                                      (size_t)(end - beg)),
                                 0);
         if (err != GRPC_ERROR_NONE) {
           return err;
         }
-        transport_parsing->incoming_frame_size -= (uint32_t)(end - cur);
+        t->incoming_frame_size -= (uint32_t)(end - cur);
         return GRPC_ERROR_NONE;
       }
       GPR_UNREACHABLE_CODE(return 0);
@@ -472,175 +269,172 @@
   GPR_UNREACHABLE_CODE(return 0);
 }
 
-static grpc_error *init_frame_parser(
-    grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_parsing *transport_parsing) {
-  if (transport_parsing->is_first_frame &&
-      transport_parsing->incoming_frame_type != GRPC_CHTTP2_FRAME_SETTINGS) {
+static grpc_error *init_frame_parser(grpc_exec_ctx *exec_ctx,
+                                     grpc_chttp2_transport *t) {
+  if (t->is_first_frame &&
+      t->incoming_frame_type != GRPC_CHTTP2_FRAME_SETTINGS) {
     char *msg;
     gpr_asprintf(
         &msg, "Expected SETTINGS frame as the first frame, got frame type %d",
-        transport_parsing->incoming_frame_type);
+        t->incoming_frame_type);
     grpc_error *err = GRPC_ERROR_CREATE(msg);
     gpr_free(msg);
     return err;
   }
-  transport_parsing->is_first_frame = false;
-  if (transport_parsing->expect_continuation_stream_id != 0) {
-    if (transport_parsing->incoming_frame_type !=
-        GRPC_CHTTP2_FRAME_CONTINUATION) {
+  t->is_first_frame = false;
+  if (t->expect_continuation_stream_id != 0) {
+    if (t->incoming_frame_type != GRPC_CHTTP2_FRAME_CONTINUATION) {
       char *msg;
       gpr_asprintf(&msg, "Expected CONTINUATION frame, got frame type %02x",
-                   transport_parsing->incoming_frame_type);
+                   t->incoming_frame_type);
       grpc_error *err = GRPC_ERROR_CREATE(msg);
       gpr_free(msg);
       return err;
     }
-    if (transport_parsing->expect_continuation_stream_id !=
-        transport_parsing->incoming_stream_id) {
+    if (t->expect_continuation_stream_id != t->incoming_stream_id) {
       char *msg;
       gpr_asprintf(
           &msg,
           "Expected CONTINUATION frame for grpc_chttp2_stream %08x, got "
           "grpc_chttp2_stream %08x",
-          transport_parsing->expect_continuation_stream_id,
-          transport_parsing->incoming_stream_id);
+          t->expect_continuation_stream_id, t->incoming_stream_id);
       grpc_error *err = GRPC_ERROR_CREATE(msg);
       gpr_free(msg);
       return err;
     }
-    return init_header_frame_parser(exec_ctx, transport_parsing, 1);
+    return init_header_frame_parser(exec_ctx, t, 1);
   }
-  switch (transport_parsing->incoming_frame_type) {
+  switch (t->incoming_frame_type) {
     case GRPC_CHTTP2_FRAME_DATA:
-      return init_data_frame_parser(exec_ctx, transport_parsing);
+      return init_data_frame_parser(exec_ctx, t);
     case GRPC_CHTTP2_FRAME_HEADER:
-      return init_header_frame_parser(exec_ctx, transport_parsing, 0);
+      return init_header_frame_parser(exec_ctx, t, 0);
     case GRPC_CHTTP2_FRAME_CONTINUATION:
       return GRPC_ERROR_CREATE("Unexpected CONTINUATION frame");
     case GRPC_CHTTP2_FRAME_RST_STREAM:
-      return init_rst_stream_parser(exec_ctx, transport_parsing);
+      return init_rst_stream_parser(exec_ctx, t);
     case GRPC_CHTTP2_FRAME_SETTINGS:
-      return init_settings_frame_parser(exec_ctx, transport_parsing);
+      return init_settings_frame_parser(exec_ctx, t);
     case GRPC_CHTTP2_FRAME_WINDOW_UPDATE:
-      return init_window_update_frame_parser(exec_ctx, transport_parsing);
+      return init_window_update_frame_parser(exec_ctx, t);
     case GRPC_CHTTP2_FRAME_PING:
-      return init_ping_parser(exec_ctx, transport_parsing);
+      return init_ping_parser(exec_ctx, t);
     case GRPC_CHTTP2_FRAME_GOAWAY:
-      return init_goaway_parser(exec_ctx, transport_parsing);
+      return init_goaway_parser(exec_ctx, t);
     default:
       if (grpc_http_trace) {
-        gpr_log(GPR_ERROR, "Unknown frame type %02x",
-                transport_parsing->incoming_frame_type);
+        gpr_log(GPR_ERROR, "Unknown frame type %02x", t->incoming_frame_type);
       }
-      return init_skip_frame_parser(exec_ctx, transport_parsing, 0);
+      return init_skip_frame_parser(exec_ctx, t, 0);
   }
 }
 
 static grpc_error *skip_parser(grpc_exec_ctx *exec_ctx, void *parser,
-                               grpc_chttp2_transport_parsing *transport_parsing,
-                               grpc_chttp2_stream_parsing *stream_parsing,
+                               grpc_chttp2_transport *t, grpc_chttp2_stream *s,
                                gpr_slice slice, int is_last) {
   return GRPC_ERROR_NONE;
 }
 
-static void skip_header(void *tp, grpc_mdelem *md) { GRPC_MDELEM_UNREF(md); }
+static void skip_header(grpc_exec_ctx *exec_ctx, void *tp, grpc_mdelem *md) {
+  GRPC_MDELEM_UNREF(md);
+}
 
-static grpc_error *init_skip_frame_parser(
-    grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_parsing *transport_parsing,
-    int is_header) {
+static grpc_error *init_skip_frame_parser(grpc_exec_ctx *exec_ctx,
+                                          grpc_chttp2_transport *t,
+                                          int is_header) {
   if (is_header) {
-    uint8_t is_eoh = transport_parsing->expect_continuation_stream_id != 0;
-    transport_parsing->parser = grpc_chttp2_header_parser_parse;
-    transport_parsing->parser_data = &transport_parsing->hpack_parser;
-    transport_parsing->hpack_parser.on_header = skip_header;
-    transport_parsing->hpack_parser.on_header_user_data = NULL;
-    transport_parsing->hpack_parser.is_boundary = is_eoh;
-    transport_parsing->hpack_parser.is_eof =
-        (uint8_t)(is_eoh ? transport_parsing->header_eof : 0);
+    uint8_t is_eoh = t->expect_continuation_stream_id != 0;
+    t->parser = grpc_chttp2_header_parser_parse;
+    t->parser_data = &t->hpack_parser;
+    t->hpack_parser.on_header = skip_header;
+    t->hpack_parser.on_header_user_data = NULL;
+    t->hpack_parser.is_boundary = is_eoh;
+    t->hpack_parser.is_eof = (uint8_t)(is_eoh ? t->header_eof : 0);
   } else {
-    transport_parsing->parser = skip_parser;
+    t->parser = skip_parser;
   }
   return GRPC_ERROR_NONE;
 }
 
-void grpc_chttp2_parsing_become_skip_parser(
-    grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_parsing *transport_parsing) {
-  init_skip_frame_parser(
-      exec_ctx, transport_parsing,
-      transport_parsing->parser == grpc_chttp2_header_parser_parse);
+void grpc_chttp2_parsing_become_skip_parser(grpc_exec_ctx *exec_ctx,
+                                            grpc_chttp2_transport *t) {
+  init_skip_frame_parser(exec_ctx, t,
+                         t->parser == grpc_chttp2_header_parser_parse);
 }
 
-static grpc_error *update_incoming_window(
-    grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_parsing *transport_parsing,
-    grpc_chttp2_stream_parsing *stream_parsing) {
-  uint32_t incoming_frame_size = transport_parsing->incoming_frame_size;
-  if (incoming_frame_size > transport_parsing->incoming_window) {
+static grpc_error *update_incoming_window(grpc_exec_ctx *exec_ctx,
+                                          grpc_chttp2_transport *t,
+                                          grpc_chttp2_stream *s) {
+  uint32_t incoming_frame_size = t->incoming_frame_size;
+  if (incoming_frame_size > t->incoming_window) {
     char *msg;
     gpr_asprintf(&msg, "frame of size %d overflows incoming window of %" PRId64,
-                 transport_parsing->incoming_frame_size,
-                 transport_parsing->incoming_window);
+                 t->incoming_frame_size, t->incoming_window);
     grpc_error *err = GRPC_ERROR_CREATE(msg);
     gpr_free(msg);
     return err;
   }
 
-  if (incoming_frame_size > stream_parsing->incoming_window) {
-    char *msg;
-    gpr_asprintf(&msg, "frame of size %d overflows incoming window of %" PRId64,
-                 transport_parsing->incoming_frame_size,
-                 stream_parsing->incoming_window);
-    grpc_error *err = GRPC_ERROR_CREATE(msg);
-    gpr_free(msg);
-    return err;
-  }
-
-  GRPC_CHTTP2_FLOW_DEBIT_TRANSPORT("parse", transport_parsing, incoming_window,
+  GRPC_CHTTP2_FLOW_DEBIT_TRANSPORT("parse", t, incoming_window,
                                    incoming_frame_size);
-  GRPC_CHTTP2_FLOW_DEBIT_STREAM("parse", transport_parsing, stream_parsing,
-                                incoming_window, incoming_frame_size);
-  stream_parsing->received_bytes += incoming_frame_size;
 
-  grpc_chttp2_list_add_parsing_seen_stream(transport_parsing, stream_parsing);
+  if (s != NULL) {
+    if (incoming_frame_size > s->incoming_window) {
+      char *msg;
+      gpr_asprintf(&msg,
+                   "frame of size %d overflows incoming window of %" PRId64,
+                   t->incoming_frame_size, s->incoming_window);
+      grpc_error *err = GRPC_ERROR_CREATE(msg);
+      gpr_free(msg);
+      return err;
+    }
+
+    GRPC_CHTTP2_FLOW_DEBIT_STREAM("parse", t, s, incoming_window,
+                                  incoming_frame_size);
+    s->received_bytes += incoming_frame_size;
+    s->max_recv_bytes -=
+        (uint32_t)GPR_MIN(s->max_recv_bytes, incoming_frame_size);
+  }
 
   return GRPC_ERROR_NONE;
 }
 
-static grpc_error *init_data_frame_parser(
-    grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_parsing *transport_parsing) {
-  grpc_chttp2_stream_parsing *stream_parsing =
-      grpc_chttp2_parsing_lookup_stream(transport_parsing,
-                                        transport_parsing->incoming_stream_id);
+static grpc_error *init_data_frame_parser(grpc_exec_ctx *exec_ctx,
+                                          grpc_chttp2_transport *t) {
+  grpc_chttp2_stream *s =
+      grpc_chttp2_parsing_lookup_stream(t, t->incoming_stream_id);
   grpc_error *err = GRPC_ERROR_NONE;
-  if (stream_parsing == NULL) {
-    return init_skip_frame_parser(exec_ctx, transport_parsing, 0);
+  err = update_incoming_window(exec_ctx, t, s);
+  if (err != GRPC_ERROR_NONE) {
+    goto error_handler;
   }
-  stream_parsing->stats.incoming.framing_bytes += 9;
-  if (stream_parsing->received_close) {
-    return init_skip_frame_parser(exec_ctx, transport_parsing, 0);
+  if (s == NULL) {
+    return init_skip_frame_parser(exec_ctx, t, 0);
+  }
+  s->stats.incoming.framing_bytes += 9;
+  if (err == GRPC_ERROR_NONE && s->read_closed) {
+    return init_skip_frame_parser(exec_ctx, t, 0);
   }
   if (err == GRPC_ERROR_NONE) {
-    err = update_incoming_window(exec_ctx, transport_parsing, stream_parsing);
+    err = grpc_chttp2_data_parser_begin_frame(&s->data_parser,
+                                              t->incoming_frame_flags, s->id);
   }
+error_handler:
   if (err == GRPC_ERROR_NONE) {
-    err = grpc_chttp2_data_parser_begin_frame(
-        &stream_parsing->data_parser, transport_parsing->incoming_frame_flags,
-        stream_parsing->id);
-  }
-  if (err == GRPC_ERROR_NONE) {
-    transport_parsing->incoming_stream = stream_parsing;
-    transport_parsing->parser = grpc_chttp2_data_parser_parse;
-    transport_parsing->parser_data = &stream_parsing->data_parser;
+    t->incoming_stream = s;
+    t->parser = grpc_chttp2_data_parser_parse;
+    t->parser_data = &s->data_parser;
     return GRPC_ERROR_NONE;
   } else if (grpc_error_get_int(err, GRPC_ERROR_INT_STREAM_ID, NULL)) {
     /* handle stream errors by closing the stream */
-    stream_parsing->received_close = 1;
-    stream_parsing->forced_close_error = err;
+    if (s != NULL) {
+      grpc_chttp2_mark_stream_closed(exec_ctx, t, s, true, false, err);
+    }
     gpr_slice_buffer_add(
-        &transport_parsing->qbuf,
-        grpc_chttp2_rst_stream_create(transport_parsing->incoming_stream_id,
-                                      GRPC_CHTTP2_PROTOCOL_ERROR,
-                                      &stream_parsing->stats.outgoing));
-    return init_skip_frame_parser(exec_ctx, transport_parsing, 0);
+        &t->qbuf, grpc_chttp2_rst_stream_create(t->incoming_stream_id,
+                                                GRPC_CHTTP2_PROTOCOL_ERROR,
+                                                &s->stats.outgoing));
+    return init_skip_frame_parser(exec_ctx, t, 0);
   } else {
     return err;
   }
@@ -648,23 +442,22 @@
 
 static void free_timeout(void *p) { gpr_free(p); }
 
-static void on_initial_header(void *tp, grpc_mdelem *md) {
-  grpc_chttp2_transport_parsing *transport_parsing = tp;
-  grpc_chttp2_stream_parsing *stream_parsing =
-      transport_parsing->incoming_stream;
+static void on_initial_header(grpc_exec_ctx *exec_ctx, void *tp,
+                              grpc_mdelem *md) {
+  grpc_chttp2_transport *t = tp;
+  grpc_chttp2_stream *s = t->incoming_stream;
 
   GPR_TIMER_BEGIN("on_initial_header", 0);
 
-  GPR_ASSERT(stream_parsing);
+  GPR_ASSERT(s != NULL);
 
   GRPC_CHTTP2_IF_TRACING(gpr_log(
-      GPR_INFO, "HTTP:%d:HDR:%s: %s: %s", stream_parsing->id,
-      transport_parsing->is_client ? "CLI" : "SVR",
+      GPR_INFO, "HTTP:%d:HDR:%s: %s: %s", s->id, t->is_client ? "CLI" : "SVR",
       grpc_mdstr_as_c_string(md->key), grpc_mdstr_as_c_string(md->value)));
 
   if (md->key == GRPC_MDSTR_GRPC_STATUS && md != GRPC_MDELEM_GRPC_STATUS_0) {
     /* TODO(ctiller): check for a status like " 0" */
-    stream_parsing->seen_error = true;
+    s->seen_error = true;
   }
 
   if (md->key == GRPC_MDSTR_GRPC_TIMEOUT) {
@@ -681,306 +474,273 @@
       grpc_mdelem_set_user_data(md, free_timeout, cached_timeout);
     }
     grpc_chttp2_incoming_metadata_buffer_set_deadline(
-        &stream_parsing->metadata_buffer[0],
+        &s->metadata_buffer[0],
         gpr_time_add(gpr_now(GPR_CLOCK_MONOTONIC), *cached_timeout));
     GRPC_MDELEM_UNREF(md);
   } else {
-    const size_t new_size =
-        stream_parsing->metadata_buffer[0].size + GRPC_MDELEM_LENGTH(md);
-    grpc_chttp2_transport_global *transport_global =
-        &TRANSPORT_FROM_PARSING(transport_parsing)->global;
+    const size_t new_size = s->metadata_buffer[0].size + GRPC_MDELEM_LENGTH(md);
     const size_t metadata_size_limit =
-        transport_global->settings[GRPC_LOCAL_SETTINGS]
-                                  [GRPC_CHTTP2_SETTINGS_MAX_HEADER_LIST_SIZE];
+        t->settings[GRPC_ACKED_SETTINGS]
+                   [GRPC_CHTTP2_SETTINGS_MAX_HEADER_LIST_SIZE];
     if (new_size > metadata_size_limit) {
-      if (!stream_parsing->exceeded_metadata_size) {
-        gpr_log(GPR_DEBUG,
-                "received initial metadata size exceeds limit (%" PRIuPTR
-                " vs. %" PRIuPTR ")",
-                new_size, metadata_size_limit);
-        stream_parsing->seen_error = true;
-        stream_parsing->exceeded_metadata_size = true;
-      }
+      gpr_log(GPR_DEBUG,
+              "received initial metadata size exceeds limit (%" PRIuPTR
+              " vs. %" PRIuPTR ")",
+              new_size, metadata_size_limit);
+      grpc_chttp2_cancel_stream(
+          exec_ctx, t, s,
+          grpc_error_set_int(
+              GRPC_ERROR_CREATE("received initial metadata size exceeds limit"),
+              GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_RESOURCE_EXHAUSTED));
+      grpc_chttp2_parsing_become_skip_parser(exec_ctx, t);
+      s->seen_error = true;
       GRPC_MDELEM_UNREF(md);
     } else {
-      grpc_chttp2_incoming_metadata_buffer_add(
-          &stream_parsing->metadata_buffer[0], md);
+      grpc_chttp2_incoming_metadata_buffer_add(&s->metadata_buffer[0], md);
     }
   }
 
-  grpc_chttp2_list_add_parsing_seen_stream(transport_parsing, stream_parsing);
-
   GPR_TIMER_END("on_initial_header", 0);
 }
 
-static void on_trailing_header(void *tp, grpc_mdelem *md) {
-  grpc_chttp2_transport_parsing *transport_parsing = tp;
-  grpc_chttp2_stream_parsing *stream_parsing =
-      transport_parsing->incoming_stream;
+static void on_trailing_header(grpc_exec_ctx *exec_ctx, void *tp,
+                               grpc_mdelem *md) {
+  grpc_chttp2_transport *t = tp;
+  grpc_chttp2_stream *s = t->incoming_stream;
 
   GPR_TIMER_BEGIN("on_trailing_header", 0);
 
-  GPR_ASSERT(stream_parsing);
+  GPR_ASSERT(s != NULL);
 
   GRPC_CHTTP2_IF_TRACING(gpr_log(
-      GPR_INFO, "HTTP:%d:TRL:%s: %s: %s", stream_parsing->id,
-      transport_parsing->is_client ? "CLI" : "SVR",
+      GPR_INFO, "HTTP:%d:TRL:%s: %s: %s", s->id, t->is_client ? "CLI" : "SVR",
       grpc_mdstr_as_c_string(md->key), grpc_mdstr_as_c_string(md->value)));
 
   if (md->key == GRPC_MDSTR_GRPC_STATUS && md != GRPC_MDELEM_GRPC_STATUS_0) {
     /* TODO(ctiller): check for a status like " 0" */
-    stream_parsing->seen_error = true;
+    s->seen_error = true;
   }
 
-  const size_t new_size =
-      stream_parsing->metadata_buffer[1].size + GRPC_MDELEM_LENGTH(md);
-  grpc_chttp2_transport_global *transport_global =
-      &TRANSPORT_FROM_PARSING(transport_parsing)->global;
+  const size_t new_size = s->metadata_buffer[1].size + GRPC_MDELEM_LENGTH(md);
   const size_t metadata_size_limit =
-      transport_global->settings[GRPC_LOCAL_SETTINGS]
-                                [GRPC_CHTTP2_SETTINGS_MAX_HEADER_LIST_SIZE];
+      t->settings[GRPC_ACKED_SETTINGS]
+                 [GRPC_CHTTP2_SETTINGS_MAX_HEADER_LIST_SIZE];
   if (new_size > metadata_size_limit) {
-    if (!stream_parsing->exceeded_metadata_size) {
-      gpr_log(GPR_DEBUG,
-              "received trailing metadata size exceeds limit (%" PRIuPTR
-              " vs. %" PRIuPTR ")",
-              new_size, metadata_size_limit);
-      stream_parsing->seen_error = true;
-      stream_parsing->exceeded_metadata_size = true;
-    }
+    gpr_log(GPR_DEBUG,
+            "received trailing metadata size exceeds limit (%" PRIuPTR
+            " vs. %" PRIuPTR ")",
+            new_size, metadata_size_limit);
+    grpc_chttp2_cancel_stream(
+        exec_ctx, t, s,
+        grpc_error_set_int(
+            GRPC_ERROR_CREATE("received trailing metadata size exceeds limit"),
+            GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_RESOURCE_EXHAUSTED));
+    grpc_chttp2_parsing_become_skip_parser(exec_ctx, t);
+    s->seen_error = true;
     GRPC_MDELEM_UNREF(md);
   } else {
-    grpc_chttp2_incoming_metadata_buffer_add(
-        &stream_parsing->metadata_buffer[1], md);
+    grpc_chttp2_incoming_metadata_buffer_add(&s->metadata_buffer[1], md);
   }
 
-  grpc_chttp2_list_add_parsing_seen_stream(transport_parsing, stream_parsing);
-
   GPR_TIMER_END("on_trailing_header", 0);
 }
 
-static grpc_error *init_header_frame_parser(
-    grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_parsing *transport_parsing,
-    int is_continuation) {
-  uint8_t is_eoh = (transport_parsing->incoming_frame_flags &
-                    GRPC_CHTTP2_DATA_FLAG_END_HEADERS) != 0;
-  int via_accept = 0;
-  grpc_chttp2_stream_parsing *stream_parsing;
+static grpc_error *init_header_frame_parser(grpc_exec_ctx *exec_ctx,
+                                            grpc_chttp2_transport *t,
+                                            int is_continuation) {
+  uint8_t is_eoh =
+      (t->incoming_frame_flags & GRPC_CHTTP2_DATA_FLAG_END_HEADERS) != 0;
+  grpc_chttp2_stream *s;
 
   /* TODO(ctiller): when to increment header_frames_received? */
 
   if (is_eoh) {
-    transport_parsing->expect_continuation_stream_id = 0;
+    t->expect_continuation_stream_id = 0;
   } else {
-    transport_parsing->expect_continuation_stream_id =
-        transport_parsing->incoming_stream_id;
+    t->expect_continuation_stream_id = t->incoming_stream_id;
   }
 
   if (!is_continuation) {
-    transport_parsing->header_eof = (transport_parsing->incoming_frame_flags &
-                                     GRPC_CHTTP2_DATA_FLAG_END_STREAM) != 0;
+    t->header_eof =
+        (t->incoming_frame_flags & GRPC_CHTTP2_DATA_FLAG_END_STREAM) != 0;
   }
 
   /* could be a new grpc_chttp2_stream or an existing grpc_chttp2_stream */
-  stream_parsing = grpc_chttp2_parsing_lookup_stream(
-      transport_parsing, transport_parsing->incoming_stream_id);
-  if (stream_parsing == NULL) {
+  s = grpc_chttp2_parsing_lookup_stream(t, t->incoming_stream_id);
+  if (s == NULL) {
     if (is_continuation) {
-      gpr_log(GPR_ERROR,
-              "grpc_chttp2_stream disbanded before CONTINUATION received");
-      return init_skip_frame_parser(exec_ctx, transport_parsing, 1);
+      GRPC_CHTTP2_IF_TRACING(
+          gpr_log(GPR_ERROR,
+                  "grpc_chttp2_stream disbanded before CONTINUATION received"));
+      return init_skip_frame_parser(exec_ctx, t, 1);
     }
-    if (transport_parsing->is_client) {
-      if ((transport_parsing->incoming_stream_id & 1) &&
-          transport_parsing->incoming_stream_id <
-              transport_parsing->next_stream_id) {
+    if (t->is_client) {
+      if ((t->incoming_stream_id & 1) &&
+          t->incoming_stream_id < t->next_stream_id) {
         /* this is an old (probably cancelled) grpc_chttp2_stream */
       } else {
-        gpr_log(GPR_ERROR,
-                "ignoring new grpc_chttp2_stream creation on client");
+        GRPC_CHTTP2_IF_TRACING(gpr_log(
+            GPR_ERROR, "ignoring new grpc_chttp2_stream creation on client"));
       }
-      return init_skip_frame_parser(exec_ctx, transport_parsing, 1);
-    } else if (transport_parsing->last_incoming_stream_id >
-               transport_parsing->incoming_stream_id) {
-      gpr_log(GPR_ERROR,
-              "ignoring out of order new grpc_chttp2_stream request on server; "
-              "last grpc_chttp2_stream "
-              "id=%d, new grpc_chttp2_stream id=%d",
-              transport_parsing->last_incoming_stream_id,
-              transport_parsing->incoming_stream_id);
-      return init_skip_frame_parser(exec_ctx, transport_parsing, 1);
-    } else if ((transport_parsing->incoming_stream_id & 1) == 0) {
-      gpr_log(GPR_ERROR,
-              "ignoring grpc_chttp2_stream with non-client generated index %d",
-              transport_parsing->incoming_stream_id);
-      return init_skip_frame_parser(exec_ctx, transport_parsing, 1);
+      return init_skip_frame_parser(exec_ctx, t, 1);
+    } else if (t->last_new_stream_id >= t->incoming_stream_id) {
+      GRPC_CHTTP2_IF_TRACING(gpr_log(
+          GPR_ERROR,
+          "ignoring out of order new grpc_chttp2_stream request on server; "
+          "last grpc_chttp2_stream "
+          "id=%d, new grpc_chttp2_stream id=%d",
+          t->last_new_stream_id, t->incoming_stream_id));
+      return init_skip_frame_parser(exec_ctx, t, 1);
+    } else if ((t->incoming_stream_id & 1) == 0) {
+      GRPC_CHTTP2_IF_TRACING(gpr_log(
+          GPR_ERROR,
+          "ignoring grpc_chttp2_stream with non-client generated index %d",
+          t->incoming_stream_id));
+      return init_skip_frame_parser(exec_ctx, t, 1);
     }
-    stream_parsing = transport_parsing->incoming_stream =
-        grpc_chttp2_parsing_accept_stream(
-            exec_ctx, transport_parsing, transport_parsing->incoming_stream_id);
-    if (stream_parsing == NULL) {
-      gpr_log(GPR_ERROR, "grpc_chttp2_stream not accepted");
-      return init_skip_frame_parser(exec_ctx, transport_parsing, 1);
+    t->last_new_stream_id = t->incoming_stream_id;
+    s = t->incoming_stream =
+        grpc_chttp2_parsing_accept_stream(exec_ctx, t, t->incoming_stream_id);
+    if (s == NULL) {
+      GRPC_CHTTP2_IF_TRACING(
+          gpr_log(GPR_ERROR, "grpc_chttp2_stream not accepted"));
+      return init_skip_frame_parser(exec_ctx, t, 1);
     }
-    via_accept = 1;
   } else {
-    transport_parsing->incoming_stream = stream_parsing;
+    t->incoming_stream = s;
   }
-  GPR_ASSERT(stream_parsing != NULL && (via_accept == 0 || via_accept == 1));
-  stream_parsing->stats.incoming.framing_bytes += 9;
-  if (stream_parsing->received_close) {
-    gpr_log(GPR_ERROR, "skipping already closed grpc_chttp2_stream header");
-    transport_parsing->incoming_stream = NULL;
-    return init_skip_frame_parser(exec_ctx, transport_parsing, 1);
+  GPR_ASSERT(s != NULL);
+  s->stats.incoming.framing_bytes += 9;
+  if (s->read_closed) {
+    GRPC_CHTTP2_IF_TRACING(gpr_log(
+        GPR_ERROR, "skipping already closed grpc_chttp2_stream header"));
+    t->incoming_stream = NULL;
+    return init_skip_frame_parser(exec_ctx, t, 1);
   }
-  transport_parsing->parser = grpc_chttp2_header_parser_parse;
-  transport_parsing->parser_data = &transport_parsing->hpack_parser;
-  switch (stream_parsing->header_frames_received) {
+  t->parser = grpc_chttp2_header_parser_parse;
+  t->parser_data = &t->hpack_parser;
+  switch (s->header_frames_received) {
     case 0:
-      transport_parsing->hpack_parser.on_header = on_initial_header;
+      t->hpack_parser.on_header = on_initial_header;
       break;
     case 1:
-      transport_parsing->hpack_parser.on_header = on_trailing_header;
+      t->hpack_parser.on_header = on_trailing_header;
       break;
     case 2:
       gpr_log(GPR_ERROR, "too many header frames received");
-      return init_skip_frame_parser(exec_ctx, transport_parsing, 1);
+      return init_skip_frame_parser(exec_ctx, t, 1);
   }
-  transport_parsing->hpack_parser.on_header_user_data = transport_parsing;
-  transport_parsing->hpack_parser.is_boundary = is_eoh;
-  transport_parsing->hpack_parser.is_eof =
-      (uint8_t)(is_eoh ? transport_parsing->header_eof : 0);
-  if (!is_continuation && (transport_parsing->incoming_frame_flags &
-                           GRPC_CHTTP2_FLAG_HAS_PRIORITY)) {
-    grpc_chttp2_hpack_parser_set_has_priority(&transport_parsing->hpack_parser);
+  t->hpack_parser.on_header_user_data = t;
+  t->hpack_parser.is_boundary = is_eoh;
+  t->hpack_parser.is_eof = (uint8_t)(is_eoh ? t->header_eof : 0);
+  if (!is_continuation &&
+      (t->incoming_frame_flags & GRPC_CHTTP2_FLAG_HAS_PRIORITY)) {
+    grpc_chttp2_hpack_parser_set_has_priority(&t->hpack_parser);
   }
   return GRPC_ERROR_NONE;
 }
 
-static grpc_error *init_window_update_frame_parser(
-    grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_parsing *transport_parsing) {
+static grpc_error *init_window_update_frame_parser(grpc_exec_ctx *exec_ctx,
+                                                   grpc_chttp2_transport *t) {
   grpc_error *err = grpc_chttp2_window_update_parser_begin_frame(
-      &transport_parsing->simple.window_update,
-      transport_parsing->incoming_frame_size,
-      transport_parsing->incoming_frame_flags);
+      &t->simple.window_update, t->incoming_frame_size,
+      t->incoming_frame_flags);
   if (err != GRPC_ERROR_NONE) return err;
-  if (transport_parsing->incoming_stream_id != 0) {
-    grpc_chttp2_stream_parsing *stream_parsing =
-        transport_parsing->incoming_stream = grpc_chttp2_parsing_lookup_stream(
-            transport_parsing, transport_parsing->incoming_stream_id);
-    if (stream_parsing == NULL) {
-      return init_skip_frame_parser(exec_ctx, transport_parsing, 0);
+  if (t->incoming_stream_id != 0) {
+    grpc_chttp2_stream *s = t->incoming_stream =
+        grpc_chttp2_parsing_lookup_stream(t, t->incoming_stream_id);
+    if (s == NULL) {
+      return init_skip_frame_parser(exec_ctx, t, 0);
     }
-    stream_parsing->stats.incoming.framing_bytes += 9;
+    s->stats.incoming.framing_bytes += 9;
   }
-  transport_parsing->parser = grpc_chttp2_window_update_parser_parse;
-  transport_parsing->parser_data = &transport_parsing->simple.window_update;
+  t->parser = grpc_chttp2_window_update_parser_parse;
+  t->parser_data = &t->simple.window_update;
   return GRPC_ERROR_NONE;
 }
 
-static grpc_error *init_ping_parser(
-    grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_parsing *transport_parsing) {
+static grpc_error *init_ping_parser(grpc_exec_ctx *exec_ctx,
+                                    grpc_chttp2_transport *t) {
   grpc_error *err = grpc_chttp2_ping_parser_begin_frame(
-      &transport_parsing->simple.ping, transport_parsing->incoming_frame_size,
-      transport_parsing->incoming_frame_flags);
+      &t->simple.ping, t->incoming_frame_size, t->incoming_frame_flags);
   if (err != GRPC_ERROR_NONE) return err;
-  transport_parsing->parser = grpc_chttp2_ping_parser_parse;
-  transport_parsing->parser_data = &transport_parsing->simple.ping;
+  t->parser = grpc_chttp2_ping_parser_parse;
+  t->parser_data = &t->simple.ping;
   return GRPC_ERROR_NONE;
 }
 
-static grpc_error *init_rst_stream_parser(
-    grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_parsing *transport_parsing) {
+static grpc_error *init_rst_stream_parser(grpc_exec_ctx *exec_ctx,
+                                          grpc_chttp2_transport *t) {
   grpc_error *err = grpc_chttp2_rst_stream_parser_begin_frame(
-      &transport_parsing->simple.rst_stream,
-      transport_parsing->incoming_frame_size,
-      transport_parsing->incoming_frame_flags);
+      &t->simple.rst_stream, t->incoming_frame_size, t->incoming_frame_flags);
   if (err != GRPC_ERROR_NONE) return err;
-  grpc_chttp2_stream_parsing *stream_parsing =
-      transport_parsing->incoming_stream = grpc_chttp2_parsing_lookup_stream(
-          transport_parsing, transport_parsing->incoming_stream_id);
-  if (!transport_parsing->incoming_stream) {
-    return init_skip_frame_parser(exec_ctx, transport_parsing, 0);
+  grpc_chttp2_stream *s = t->incoming_stream =
+      grpc_chttp2_parsing_lookup_stream(t, t->incoming_stream_id);
+  if (!t->incoming_stream) {
+    return init_skip_frame_parser(exec_ctx, t, 0);
   }
-  stream_parsing->stats.incoming.framing_bytes += 9;
-  transport_parsing->parser = grpc_chttp2_rst_stream_parser_parse;
-  transport_parsing->parser_data = &transport_parsing->simple.rst_stream;
+  s->stats.incoming.framing_bytes += 9;
+  t->parser = grpc_chttp2_rst_stream_parser_parse;
+  t->parser_data = &t->simple.rst_stream;
   return GRPC_ERROR_NONE;
 }
 
-static grpc_error *init_goaway_parser(
-    grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_parsing *transport_parsing) {
+static grpc_error *init_goaway_parser(grpc_exec_ctx *exec_ctx,
+                                      grpc_chttp2_transport *t) {
   grpc_error *err = grpc_chttp2_goaway_parser_begin_frame(
-      &transport_parsing->goaway_parser, transport_parsing->incoming_frame_size,
-      transport_parsing->incoming_frame_flags);
+      &t->goaway_parser, t->incoming_frame_size, t->incoming_frame_flags);
   if (err != GRPC_ERROR_NONE) return err;
-  transport_parsing->parser = grpc_chttp2_goaway_parser_parse;
-  transport_parsing->parser_data = &transport_parsing->goaway_parser;
+  t->parser = grpc_chttp2_goaway_parser_parse;
+  t->parser_data = &t->goaway_parser;
   return GRPC_ERROR_NONE;
 }
 
-static grpc_error *init_settings_frame_parser(
-    grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_parsing *transport_parsing) {
-  if (transport_parsing->incoming_stream_id != 0) {
+static grpc_error *init_settings_frame_parser(grpc_exec_ctx *exec_ctx,
+                                              grpc_chttp2_transport *t) {
+  if (t->incoming_stream_id != 0) {
     return GRPC_ERROR_CREATE("Settings frame received for grpc_chttp2_stream");
   }
 
   grpc_error *err = grpc_chttp2_settings_parser_begin_frame(
-      &transport_parsing->simple.settings,
-      transport_parsing->incoming_frame_size,
-      transport_parsing->incoming_frame_flags, transport_parsing->settings);
+      &t->simple.settings, t->incoming_frame_size, t->incoming_frame_flags,
+      t->settings[GRPC_PEER_SETTINGS]);
   if (err != GRPC_ERROR_NONE) {
     return err;
   }
-  if (transport_parsing->incoming_frame_flags & GRPC_CHTTP2_FLAG_ACK) {
-    transport_parsing->settings_ack_received = 1;
+  if (t->incoming_frame_flags & GRPC_CHTTP2_FLAG_ACK) {
+    memcpy(t->settings[GRPC_ACKED_SETTINGS], t->settings[GRPC_SENT_SETTINGS],
+           GRPC_CHTTP2_NUM_SETTINGS * sizeof(uint32_t));
     grpc_chttp2_hptbl_set_max_bytes(
-        &transport_parsing->hpack_parser.table,
-        transport_parsing
-            ->last_sent_settings[GRPC_CHTTP2_SETTINGS_HEADER_TABLE_SIZE]);
-    transport_parsing->max_frame_size =
-        transport_parsing
-            ->last_sent_settings[GRPC_CHTTP2_SETTINGS_MAX_FRAME_SIZE];
+        &t->hpack_parser.table,
+        t->settings[GRPC_ACKED_SETTINGS]
+                   [GRPC_CHTTP2_SETTINGS_HEADER_TABLE_SIZE]);
+    t->sent_local_settings = 0;
   }
-  transport_parsing->parser = grpc_chttp2_settings_parser_parse;
-  transport_parsing->parser_data = &transport_parsing->simple.settings;
+  t->parser = grpc_chttp2_settings_parser_parse;
+  t->parser_data = &t->simple.settings;
   return GRPC_ERROR_NONE;
 }
 
-/*
-static int is_window_update_legal(int64_t window_update, int64_t window) {
-  return window + window_update < MAX_WINDOW;
-}
-*/
-
-static grpc_error *parse_frame_slice(
-    grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_parsing *transport_parsing,
-    gpr_slice slice, int is_last) {
-  grpc_chttp2_stream_parsing *stream_parsing =
-      transport_parsing->incoming_stream;
-  grpc_error *err = transport_parsing->parser(
-      exec_ctx, transport_parsing->parser_data, transport_parsing,
-      stream_parsing, slice, is_last);
+static grpc_error *parse_frame_slice(grpc_exec_ctx *exec_ctx,
+                                     grpc_chttp2_transport *t, gpr_slice slice,
+                                     int is_last) {
+  grpc_chttp2_stream *s = t->incoming_stream;
+  grpc_error *err = t->parser(exec_ctx, t->parser_data, t, s, slice, is_last);
   if (err == GRPC_ERROR_NONE) {
-    if (stream_parsing) {
-      grpc_chttp2_list_add_parsing_seen_stream(transport_parsing,
-                                               stream_parsing);
-    }
-    return GRPC_ERROR_NONE;
+    return err;
   } else if (grpc_error_get_int(err, GRPC_ERROR_INT_STREAM_ID, NULL)) {
     if (grpc_http_trace) {
       const char *msg = grpc_error_string(err);
       gpr_log(GPR_ERROR, "%s", msg);
       grpc_error_free_string(msg);
     }
-    grpc_chttp2_parsing_become_skip_parser(exec_ctx, transport_parsing);
-    if (stream_parsing) {
-      stream_parsing->forced_close_error = err;
+    grpc_chttp2_parsing_become_skip_parser(exec_ctx, t);
+    if (s) {
+      s->forced_close_error = err;
       gpr_slice_buffer_add(
-          &transport_parsing->qbuf,
-          grpc_chttp2_rst_stream_create(transport_parsing->incoming_stream_id,
-                                        GRPC_CHTTP2_PROTOCOL_ERROR,
-                                        &stream_parsing->stats.outgoing));
+          &t->qbuf, grpc_chttp2_rst_stream_create(t->incoming_stream_id,
+                                                  GRPC_CHTTP2_PROTOCOL_ERROR,
+                                                  &s->stats.outgoing));
     } else {
       GRPC_ERROR_UNREF(err);
     }
diff --git a/src/core/ext/transport/chttp2/transport/stream_lists.c b/src/core/ext/transport/chttp2/transport/stream_lists.c
index 4dc4968..6d25b3a 100644
--- a/src/core/ext/transport/chttp2/transport/stream_lists.c
+++ b/src/core/ext/transport/chttp2/transport/stream_lists.c
@@ -35,27 +35,6 @@
 
 #include <grpc/support/log.h>
 
-#define TRANSPORT_FROM_GLOBAL(tg)                                         \
-  ((grpc_chttp2_transport *)((char *)(tg)-offsetof(grpc_chttp2_transport, \
-                                                   global)))
-
-#define STREAM_FROM_GLOBAL(sg) \
-  ((grpc_chttp2_stream *)((char *)(sg)-offsetof(grpc_chttp2_stream, global)))
-
-#define TRANSPORT_FROM_WRITING(tw)                                        \
-  ((grpc_chttp2_transport *)((char *)(tw)-offsetof(grpc_chttp2_transport, \
-                                                   writing)))
-
-#define STREAM_FROM_WRITING(sw) \
-  ((grpc_chttp2_stream *)((char *)(sw)-offsetof(grpc_chttp2_stream, writing)))
-
-#define TRANSPORT_FROM_PARSING(tp)                                        \
-  ((grpc_chttp2_transport *)((char *)(tp)-offsetof(grpc_chttp2_transport, \
-                                                   parsing)))
-
-#define STREAM_FROM_PARSING(sp) \
-  ((grpc_chttp2_stream *)((char *)(sp)-offsetof(grpc_chttp2_stream, parsing)))
-
 /* core list management */
 
 static int stream_list_empty(grpc_chttp2_transport *t,
@@ -139,321 +118,57 @@
 
 /* wrappers for specializations */
 
-bool grpc_chttp2_list_add_writable_stream(
-    grpc_chttp2_transport_global *transport_global,
-    grpc_chttp2_stream_global *stream_global) {
-  GPR_ASSERT(stream_global->id != 0);
-  return stream_list_add(TRANSPORT_FROM_GLOBAL(transport_global),
-                         STREAM_FROM_GLOBAL(stream_global),
-                         GRPC_CHTTP2_LIST_WRITABLE);
+bool grpc_chttp2_list_add_writable_stream(grpc_chttp2_transport *t,
+                                          grpc_chttp2_stream *s) {
+  GPR_ASSERT(s->id != 0);
+  return stream_list_add(t, s, GRPC_CHTTP2_LIST_WRITABLE);
 }
 
-int grpc_chttp2_list_pop_writable_stream(
-    grpc_chttp2_transport_global *transport_global,
-    grpc_chttp2_transport_writing *transport_writing,
-    grpc_chttp2_stream_global **stream_global,
-    grpc_chttp2_stream_writing **stream_writing) {
-  grpc_chttp2_stream *stream;
-  int r = stream_list_pop(TRANSPORT_FROM_GLOBAL(transport_global), &stream,
-                          GRPC_CHTTP2_LIST_WRITABLE);
-  if (r != 0) {
-    *stream_global = &stream->global;
-    *stream_writing = &stream->writing;
-  }
-  return r;
+int grpc_chttp2_list_pop_writable_stream(grpc_chttp2_transport *t,
+                                         grpc_chttp2_stream **s) {
+  return stream_list_pop(t, s, GRPC_CHTTP2_LIST_WRITABLE);
 }
 
-bool grpc_chttp2_list_remove_writable_stream(
-    grpc_chttp2_transport_global *transport_global,
-    grpc_chttp2_stream_global *stream_global) {
-  return stream_list_maybe_remove(TRANSPORT_FROM_GLOBAL(transport_global),
-                                  STREAM_FROM_GLOBAL(stream_global),
-                                  GRPC_CHTTP2_LIST_WRITABLE);
+bool grpc_chttp2_list_remove_writable_stream(grpc_chttp2_transport *t,
+                                             grpc_chttp2_stream *s) {
+  return stream_list_maybe_remove(t, s, GRPC_CHTTP2_LIST_WRITABLE);
 }
 
-void grpc_chttp2_list_add_writing_stream(
-    grpc_chttp2_transport_writing *transport_writing,
-    grpc_chttp2_stream_writing *stream_writing) {
-  GPR_ASSERT(stream_list_add(TRANSPORT_FROM_WRITING(transport_writing),
-                             STREAM_FROM_WRITING(stream_writing),
-                             GRPC_CHTTP2_LIST_WRITING));
+bool grpc_chttp2_list_add_writing_stream(grpc_chttp2_transport *t,
+                                         grpc_chttp2_stream *s) {
+  return stream_list_add(t, s, GRPC_CHTTP2_LIST_WRITING);
 }
 
-int grpc_chttp2_list_have_writing_streams(
-    grpc_chttp2_transport_writing *transport_writing) {
-  return !stream_list_empty(TRANSPORT_FROM_WRITING(transport_writing),
-                            GRPC_CHTTP2_LIST_WRITING);
+int grpc_chttp2_list_have_writing_streams(grpc_chttp2_transport *t) {
+  return !stream_list_empty(t, GRPC_CHTTP2_LIST_WRITING);
 }
 
-int grpc_chttp2_list_pop_writing_stream(
-    grpc_chttp2_transport_writing *transport_writing,
-    grpc_chttp2_stream_writing **stream_writing) {
-  grpc_chttp2_stream *stream;
-  int r = stream_list_pop(TRANSPORT_FROM_WRITING(transport_writing), &stream,
-                          GRPC_CHTTP2_LIST_WRITING);
-  if (r != 0) {
-    *stream_writing = &stream->writing;
-  }
-  return r;
+int grpc_chttp2_list_pop_writing_stream(grpc_chttp2_transport *t,
+                                        grpc_chttp2_stream **s) {
+  return stream_list_pop(t, s, GRPC_CHTTP2_LIST_WRITING);
 }
 
-void grpc_chttp2_list_add_written_stream(
-    grpc_chttp2_transport_writing *transport_writing,
-    grpc_chttp2_stream_writing *stream_writing) {
-  stream_list_add(TRANSPORT_FROM_WRITING(transport_writing),
-                  STREAM_FROM_WRITING(stream_writing),
-                  GRPC_CHTTP2_LIST_WRITTEN);
+void grpc_chttp2_list_add_waiting_for_concurrency(grpc_chttp2_transport *t,
+                                                  grpc_chttp2_stream *s) {
+  stream_list_add(t, s, GRPC_CHTTP2_LIST_WAITING_FOR_CONCURRENCY);
 }
 
-int grpc_chttp2_list_pop_written_stream(
-    grpc_chttp2_transport_global *transport_global,
-    grpc_chttp2_transport_writing *transport_writing,
-    grpc_chttp2_stream_global **stream_global,
-    grpc_chttp2_stream_writing **stream_writing) {
-  grpc_chttp2_stream *stream;
-  int r = stream_list_pop(TRANSPORT_FROM_WRITING(transport_writing), &stream,
-                          GRPC_CHTTP2_LIST_WRITTEN);
-  if (r != 0) {
-    *stream_global = &stream->global;
-    *stream_writing = &stream->writing;
-  }
-  return r;
+int grpc_chttp2_list_pop_waiting_for_concurrency(grpc_chttp2_transport *t,
+                                                 grpc_chttp2_stream **s) {
+  return stream_list_pop(t, s, GRPC_CHTTP2_LIST_WAITING_FOR_CONCURRENCY);
 }
 
-void grpc_chttp2_list_add_unannounced_incoming_window_available(
-    grpc_chttp2_transport_global *transport_global,
-    grpc_chttp2_stream_global *stream_global) {
-  GPR_ASSERT(stream_global->id != 0);
-  stream_list_add(TRANSPORT_FROM_GLOBAL(transport_global),
-                  STREAM_FROM_GLOBAL(stream_global),
-                  GRPC_CHTTP2_LIST_UNANNOUNCED_INCOMING_WINDOW_AVAILABLE);
+void grpc_chttp2_list_add_stalled_by_transport(grpc_chttp2_transport *t,
+                                               grpc_chttp2_stream *s) {
+  stream_list_add(t, s, GRPC_CHTTP2_LIST_STALLED_BY_TRANSPORT);
 }
 
-void grpc_chttp2_list_remove_unannounced_incoming_window_available(
-    grpc_chttp2_transport_global *transport_global,
-    grpc_chttp2_stream_global *stream_global) {
-  stream_list_maybe_remove(
-      TRANSPORT_FROM_GLOBAL(transport_global),
-      STREAM_FROM_GLOBAL(stream_global),
-      GRPC_CHTTP2_LIST_UNANNOUNCED_INCOMING_WINDOW_AVAILABLE);
+int grpc_chttp2_list_pop_stalled_by_transport(grpc_chttp2_transport *t,
+                                              grpc_chttp2_stream **s) {
+  return stream_list_pop(t, s, GRPC_CHTTP2_LIST_STALLED_BY_TRANSPORT);
 }
 
-int grpc_chttp2_list_pop_unannounced_incoming_window_available(
-    grpc_chttp2_transport_global *transport_global,
-    grpc_chttp2_transport_parsing *transport_parsing,
-    grpc_chttp2_stream_global **stream_global,
-    grpc_chttp2_stream_parsing **stream_parsing) {
-  grpc_chttp2_stream *stream;
-  int r =
-      stream_list_pop(TRANSPORT_FROM_GLOBAL(transport_global), &stream,
-                      GRPC_CHTTP2_LIST_UNANNOUNCED_INCOMING_WINDOW_AVAILABLE);
-  if (r != 0) {
-    *stream_global = &stream->global;
-    *stream_parsing = &stream->parsing;
-  }
-  return r;
-}
-
-void grpc_chttp2_list_add_parsing_seen_stream(
-    grpc_chttp2_transport_parsing *transport_parsing,
-    grpc_chttp2_stream_parsing *stream_parsing) {
-  stream_list_add(TRANSPORT_FROM_PARSING(transport_parsing),
-                  STREAM_FROM_PARSING(stream_parsing),
-                  GRPC_CHTTP2_LIST_PARSING_SEEN);
-}
-
-int grpc_chttp2_list_pop_parsing_seen_stream(
-    grpc_chttp2_transport_global *transport_global,
-    grpc_chttp2_transport_parsing *transport_parsing,
-    grpc_chttp2_stream_global **stream_global,
-    grpc_chttp2_stream_parsing **stream_parsing) {
-  grpc_chttp2_stream *stream;
-  int r = stream_list_pop(TRANSPORT_FROM_PARSING(transport_parsing), &stream,
-                          GRPC_CHTTP2_LIST_PARSING_SEEN);
-  if (r != 0) {
-    *stream_global = &stream->global;
-    *stream_parsing = &stream->parsing;
-  }
-  return r;
-}
-
-void grpc_chttp2_list_add_waiting_for_concurrency(
-    grpc_chttp2_transport_global *transport_global,
-    grpc_chttp2_stream_global *stream_global) {
-  stream_list_add(TRANSPORT_FROM_GLOBAL(transport_global),
-                  STREAM_FROM_GLOBAL(stream_global),
-                  GRPC_CHTTP2_LIST_WAITING_FOR_CONCURRENCY);
-}
-
-int grpc_chttp2_list_pop_waiting_for_concurrency(
-    grpc_chttp2_transport_global *transport_global,
-    grpc_chttp2_stream_global **stream_global) {
-  grpc_chttp2_stream *stream;
-  int r = stream_list_pop(TRANSPORT_FROM_GLOBAL(transport_global), &stream,
-                          GRPC_CHTTP2_LIST_WAITING_FOR_CONCURRENCY);
-  if (r != 0) {
-    *stream_global = &stream->global;
-  }
-  return r;
-}
-
-void grpc_chttp2_list_add_check_read_ops(
-    grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_global *transport_global,
-    grpc_chttp2_stream_global *stream_global) {
-  grpc_chttp2_transport *t = TRANSPORT_FROM_GLOBAL(transport_global);
-  if (!t->executor.check_read_ops_scheduled) {
-    grpc_combiner_execute_finally(exec_ctx, t->executor.combiner,
-                                  &t->initiate_read_flush_locked,
-                                  GRPC_ERROR_NONE, false);
-    t->executor.check_read_ops_scheduled = true;
-  }
-  stream_list_add(TRANSPORT_FROM_GLOBAL(transport_global),
-                  STREAM_FROM_GLOBAL(stream_global),
-                  GRPC_CHTTP2_LIST_CHECK_READ_OPS);
-}
-
-bool grpc_chttp2_list_remove_check_read_ops(
-    grpc_chttp2_transport_global *transport_global,
-    grpc_chttp2_stream_global *stream_global) {
-  return stream_list_maybe_remove(TRANSPORT_FROM_GLOBAL(transport_global),
-                                  STREAM_FROM_GLOBAL(stream_global),
-                                  GRPC_CHTTP2_LIST_CHECK_READ_OPS);
-}
-
-int grpc_chttp2_list_pop_check_read_ops(
-    grpc_chttp2_transport_global *transport_global,
-    grpc_chttp2_stream_global **stream_global) {
-  grpc_chttp2_stream *stream;
-  int r = stream_list_pop(TRANSPORT_FROM_GLOBAL(transport_global), &stream,
-                          GRPC_CHTTP2_LIST_CHECK_READ_OPS);
-  if (r != 0) {
-    *stream_global = &stream->global;
-  }
-  return r;
-}
-
-void grpc_chttp2_list_add_writing_stalled_by_transport(
-    grpc_chttp2_transport_writing *transport_writing,
-    grpc_chttp2_stream_writing *stream_writing) {
-  grpc_chttp2_stream *stream = STREAM_FROM_WRITING(stream_writing);
-  gpr_log(GPR_DEBUG, "writing stalled %d", stream->global.id);
-  if (!stream->included[GRPC_CHTTP2_LIST_WRITING_STALLED_BY_TRANSPORT]) {
-    GRPC_CHTTP2_STREAM_REF(&stream->global, "chttp2_writing_stalled");
-  }
-  stream_list_add(TRANSPORT_FROM_WRITING(transport_writing), stream,
-                  GRPC_CHTTP2_LIST_WRITING_STALLED_BY_TRANSPORT);
-}
-
-bool grpc_chttp2_list_flush_writing_stalled_by_transport(
-    grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_writing *transport_writing) {
-  grpc_chttp2_stream *stream;
-  bool out = false;
-  grpc_chttp2_transport *transport = TRANSPORT_FROM_WRITING(transport_writing);
-  while (stream_list_pop(transport, &stream,
-                         GRPC_CHTTP2_LIST_WRITING_STALLED_BY_TRANSPORT)) {
-    gpr_log(GPR_DEBUG, "move %d from writing stalled to just stalled",
-            stream->global.id);
-    grpc_chttp2_list_add_stalled_by_transport(transport_writing,
-                                              &stream->writing);
-    GRPC_CHTTP2_STREAM_UNREF(exec_ctx, &stream->global,
-                             "chttp2_writing_stalled");
-    out = true;
-  }
-  return out;
-}
-
-void grpc_chttp2_list_add_stalled_by_transport(
-    grpc_chttp2_transport_writing *transport_writing,
-    grpc_chttp2_stream_writing *stream_writing) {
-  gpr_log(GPR_DEBUG, "stalled %d", stream_writing->id);
-  stream_list_add(TRANSPORT_FROM_WRITING(transport_writing),
-                  STREAM_FROM_WRITING(stream_writing),
-                  GRPC_CHTTP2_LIST_STALLED_BY_TRANSPORT);
-}
-
-int grpc_chttp2_list_pop_stalled_by_transport(
-    grpc_chttp2_transport_global *transport_global,
-    grpc_chttp2_stream_global **stream_global) {
-  grpc_chttp2_stream *stream;
-  int r = stream_list_pop(TRANSPORT_FROM_GLOBAL(transport_global), &stream,
-                          GRPC_CHTTP2_LIST_STALLED_BY_TRANSPORT);
-  if (r != 0) {
-    *stream_global = &stream->global;
-  }
-  return r;
-}
-
-void grpc_chttp2_list_remove_stalled_by_transport(
-    grpc_chttp2_transport_global *transport_global,
-    grpc_chttp2_stream_global *stream_global) {
-  stream_list_maybe_remove(TRANSPORT_FROM_GLOBAL(transport_global),
-                           STREAM_FROM_GLOBAL(stream_global),
-                           GRPC_CHTTP2_LIST_STALLED_BY_TRANSPORT);
-}
-
-void grpc_chttp2_list_add_closed_waiting_for_parsing(
-    grpc_chttp2_transport_global *transport_global,
-    grpc_chttp2_stream_global *stream_global) {
-  stream_list_add(TRANSPORT_FROM_GLOBAL(transport_global),
-                  STREAM_FROM_GLOBAL(stream_global),
-                  GRPC_CHTTP2_LIST_CLOSED_WAITING_FOR_PARSING);
-}
-
-int grpc_chttp2_list_pop_closed_waiting_for_parsing(
-    grpc_chttp2_transport_global *transport_global,
-    grpc_chttp2_stream_global **stream_global) {
-  grpc_chttp2_stream *stream;
-  int r = stream_list_pop(TRANSPORT_FROM_GLOBAL(transport_global), &stream,
-                          GRPC_CHTTP2_LIST_CLOSED_WAITING_FOR_PARSING);
-  if (r != 0) {
-    *stream_global = &stream->global;
-  }
-  return r;
-}
-
-void grpc_chttp2_list_add_closed_waiting_for_writing(
-    grpc_chttp2_transport_global *transport_global,
-    grpc_chttp2_stream_global *stream_global) {
-  stream_list_add(TRANSPORT_FROM_GLOBAL(transport_global),
-                  STREAM_FROM_GLOBAL(stream_global),
-                  GRPC_CHTTP2_LIST_CLOSED_WAITING_FOR_WRITING);
-}
-
-int grpc_chttp2_list_pop_closed_waiting_for_writing(
-    grpc_chttp2_transport_global *transport_global,
-    grpc_chttp2_stream_global **stream_global) {
-  grpc_chttp2_stream *stream;
-  int r = stream_list_pop(TRANSPORT_FROM_GLOBAL(transport_global), &stream,
-                          GRPC_CHTTP2_LIST_CLOSED_WAITING_FOR_WRITING);
-  if (r != 0) {
-    *stream_global = &stream->global;
-  }
-  return r;
-}
-
-void grpc_chttp2_register_stream(grpc_chttp2_transport *t,
-                                 grpc_chttp2_stream *s) {
-  stream_list_add_tail(t, s, GRPC_CHTTP2_LIST_ALL_STREAMS);
-}
-
-int grpc_chttp2_unregister_stream(grpc_chttp2_transport *t,
-                                  grpc_chttp2_stream *s) {
-  stream_list_maybe_remove(t, s, GRPC_CHTTP2_LIST_ALL_STREAMS);
-  return stream_list_empty(t, GRPC_CHTTP2_LIST_ALL_STREAMS);
-}
-
-int grpc_chttp2_has_streams(grpc_chttp2_transport *t) {
-  return !stream_list_empty(t, GRPC_CHTTP2_LIST_ALL_STREAMS);
-}
-
-void grpc_chttp2_for_all_streams(
-    grpc_chttp2_transport_global *transport_global, void *user_data,
-    void (*cb)(grpc_chttp2_transport_global *transport_global, void *user_data,
-               grpc_chttp2_stream_global *stream_global)) {
-  grpc_chttp2_stream *s;
-  grpc_chttp2_transport *t = TRANSPORT_FROM_GLOBAL(transport_global);
-  for (s = t->lists[GRPC_CHTTP2_LIST_ALL_STREAMS].head; s != NULL;
-       s = s->links[GRPC_CHTTP2_LIST_ALL_STREAMS].next) {
-    cb(transport_global, user_data, &s->global);
-  }
+void grpc_chttp2_list_remove_stalled_by_transport(grpc_chttp2_transport *t,
+                                                  grpc_chttp2_stream *s) {
+  stream_list_maybe_remove(t, s, GRPC_CHTTP2_LIST_STALLED_BY_TRANSPORT);
 }
diff --git a/src/core/ext/transport/chttp2/transport/stream_map.c b/src/core/ext/transport/chttp2/transport/stream_map.c
index f70791c..59b3a14 100644
--- a/src/core/ext/transport/chttp2/transport/stream_map.c
+++ b/src/core/ext/transport/chttp2/transport/stream_map.c
@@ -77,6 +77,7 @@
 
   GPR_ASSERT(count == 0 || keys[count - 1] < key);
   GPR_ASSERT(value);
+  GPR_ASSERT(grpc_chttp2_stream_map_find(map, key) == NULL);
 
   if (count == capacity) {
     if (map->free > capacity / 4) {
@@ -96,40 +97,6 @@
   map->count = count + 1;
 }
 
-void grpc_chttp2_stream_map_move_into(grpc_chttp2_stream_map *src,
-                                      grpc_chttp2_stream_map *dst) {
-  /* if src is empty we dont need to do anything */
-  if (src->count == src->free) {
-    return;
-  }
-  /* if dst is empty we simply need to swap */
-  if (dst->count == dst->free) {
-    GPR_SWAP(grpc_chttp2_stream_map, *src, *dst);
-    return;
-  }
-  /* the first element of src must be greater than the last of dst...
-   * however the maps may need compacting for this property to hold */
-  if (src->keys[0] <= dst->keys[dst->count - 1]) {
-    src->count = compact(src->keys, src->values, src->count);
-    src->free = 0;
-    dst->count = compact(dst->keys, dst->values, dst->count);
-    dst->free = 0;
-  }
-  GPR_ASSERT(src->keys[0] > dst->keys[dst->count - 1]);
-  /* if dst doesn't have capacity, resize */
-  if (dst->count + src->count > dst->capacity) {
-    dst->capacity = GPR_MAX(dst->capacity * 3 / 2, dst->count + src->count);
-    dst->keys = gpr_realloc(dst->keys, dst->capacity * sizeof(uint32_t));
-    dst->values = gpr_realloc(dst->values, dst->capacity * sizeof(void *));
-  }
-  memcpy(dst->keys + dst->count, src->keys, src->count * sizeof(uint32_t));
-  memcpy(dst->values + dst->count, src->values, src->count * sizeof(void *));
-  dst->count += src->count;
-  dst->free += src->free;
-  src->count = 0;
-  src->free = 0;
-}
-
 static void **find(grpc_chttp2_stream_map *map, uint32_t key) {
   size_t min_idx = 0;
   size_t max_idx = map->count;
@@ -170,6 +137,7 @@
     if (map->free == map->count) {
       map->free = map->count = 0;
     }
+    GPR_ASSERT(grpc_chttp2_stream_map_find(map, key) == NULL);
   }
   return out;
 }
diff --git a/src/core/ext/transport/chttp2/transport/stream_map.h b/src/core/ext/transport/chttp2/transport/stream_map.h
index b1d59ca..e76312d 100644
--- a/src/core/ext/transport/chttp2/transport/stream_map.h
+++ b/src/core/ext/transport/chttp2/transport/stream_map.h
@@ -65,10 +65,6 @@
    or NULL otherwise */
 void *grpc_chttp2_stream_map_delete(grpc_chttp2_stream_map *map, uint32_t key);
 
-/* Move all elements of src into dst */
-void grpc_chttp2_stream_map_move_into(grpc_chttp2_stream_map *src,
-                                      grpc_chttp2_stream_map *dst);
-
 /* Return an existing key, or NULL if it does not exist */
 void *grpc_chttp2_stream_map_find(grpc_chttp2_stream_map *map, uint32_t key);
 
diff --git a/src/core/ext/transport/chttp2/transport/writing.c b/src/core/ext/transport/chttp2/transport/writing.c
index 979515b..b39695a 100644
--- a/src/core/ext/transport/chttp2/transport/writing.c
+++ b/src/core/ext/transport/chttp2/transport/writing.c
@@ -40,349 +40,221 @@
 #include "src/core/ext/transport/chttp2/transport/http2_errors.h"
 #include "src/core/lib/profiling/timers.h"
 
-static void finalize_outbuf(grpc_exec_ctx *exec_ctx,
-                            grpc_chttp2_transport_writing *transport_writing);
+static void add_to_write_list(grpc_chttp2_write_cb **list,
+                              grpc_chttp2_write_cb *cb) {
+  cb->next = *list;
+  *list = cb;
+}
 
-int grpc_chttp2_unlocking_check_writes(
-    grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_global *transport_global,
-    grpc_chttp2_transport_writing *transport_writing) {
-  grpc_chttp2_stream_global *stream_global;
-  grpc_chttp2_stream_writing *stream_writing;
+static void finish_write_cb(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t,
+                            grpc_chttp2_stream *s, grpc_chttp2_write_cb *cb,
+                            grpc_error *error) {
+  grpc_chttp2_complete_closure_step(exec_ctx, t, s, &cb->closure, error,
+                                    "finish_write_cb");
+  cb->next = t->write_cb_pool;
+  t->write_cb_pool = cb;
+}
 
-  GPR_TIMER_BEGIN("grpc_chttp2_unlocking_check_writes", 0);
+static void update_list(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t,
+                        grpc_chttp2_stream *s, int64_t send_bytes,
+                        grpc_chttp2_write_cb **list, grpc_error *error) {
+  grpc_chttp2_write_cb *cb = *list;
+  *list = NULL;
+  s->flow_controlled_bytes_written += send_bytes;
+  while (cb) {
+    grpc_chttp2_write_cb *next = cb->next;
+    if (cb->call_at_byte <= s->flow_controlled_bytes_written) {
+      finish_write_cb(exec_ctx, t, s, cb, GRPC_ERROR_REF(error));
+    } else {
+      add_to_write_list(list, cb);
+    }
+    cb = next;
+  }
+  GRPC_ERROR_UNREF(error);
+}
 
-  transport_writing->max_frame_size =
-      transport_global->settings[GRPC_ACKED_SETTINGS]
-                                [GRPC_CHTTP2_SETTINGS_MAX_FRAME_SIZE];
+bool grpc_chttp2_begin_write(grpc_exec_ctx *exec_ctx,
+                             grpc_chttp2_transport *t) {
+  grpc_chttp2_stream *s;
 
-  if (transport_global->dirtied_local_settings &&
-      !transport_global->sent_local_settings) {
+  GPR_TIMER_BEGIN("grpc_chttp2_begin_write", 0);
+
+  if (t->dirtied_local_settings && !t->sent_local_settings) {
     gpr_slice_buffer_add(
-        &transport_writing->outbuf,
+        &t->outbuf,
         grpc_chttp2_settings_create(
-            transport_global->settings[GRPC_SENT_SETTINGS],
-            transport_global->settings[GRPC_LOCAL_SETTINGS],
-            transport_global->force_send_settings, GRPC_CHTTP2_NUM_SETTINGS));
-    transport_global->force_send_settings = 0;
-    transport_global->dirtied_local_settings = 0;
-    transport_global->sent_local_settings = 1;
+            t->settings[GRPC_SENT_SETTINGS], t->settings[GRPC_LOCAL_SETTINGS],
+            t->force_send_settings, GRPC_CHTTP2_NUM_SETTINGS));
+    t->force_send_settings = 0;
+    t->dirtied_local_settings = 0;
+    t->sent_local_settings = 1;
   }
 
   /* simple writes are queued to qbuf, and flushed here */
-  gpr_slice_buffer_move_into(&transport_global->qbuf,
-                             &transport_writing->outbuf);
-  GPR_ASSERT(transport_global->qbuf.count == 0);
+  gpr_slice_buffer_move_into(&t->qbuf, &t->outbuf);
+  GPR_ASSERT(t->qbuf.count == 0);
 
   grpc_chttp2_hpack_compressor_set_max_table_size(
-      &transport_writing->hpack_compressor,
-      transport_global->settings[GRPC_PEER_SETTINGS]
-                                [GRPC_CHTTP2_SETTINGS_HEADER_TABLE_SIZE]);
+      &t->hpack_compressor,
+      t->settings[GRPC_PEER_SETTINGS][GRPC_CHTTP2_SETTINGS_HEADER_TABLE_SIZE]);
 
-  GRPC_CHTTP2_FLOW_MOVE_TRANSPORT("write", transport_writing, outgoing_window,
-                                  transport_global, outgoing_window);
-  if (transport_writing->outgoing_window > 0) {
-    while (grpc_chttp2_list_pop_stalled_by_transport(transport_global,
-                                                     &stream_global)) {
-      grpc_chttp2_become_writable(exec_ctx, transport_global, stream_global,
-                                  false, "transport.read_flow_control");
+  if (t->outgoing_window > 0) {
+    while (grpc_chttp2_list_pop_stalled_by_transport(t, &s)) {
+      grpc_chttp2_become_writable(exec_ctx, t, s, false,
+                                  "transport.read_flow_control");
     }
   }
 
   /* for each grpc_chttp2_stream that's become writable, frame it's data
      (according to available window sizes) and add to the output buffer */
-  while (grpc_chttp2_list_pop_writable_stream(
-      transport_global, transport_writing, &stream_global, &stream_writing)) {
-    bool sent_initial_metadata = stream_writing->sent_initial_metadata;
-    bool become_writable = false;
+  while (grpc_chttp2_list_pop_writable_stream(t, &s)) {
+    bool sent_initial_metadata = s->sent_initial_metadata;
+    bool now_writing = false;
 
-    stream_writing->id = stream_global->id;
-    stream_writing->read_closed = stream_global->read_closed;
+    GRPC_CHTTP2_IF_TRACING(gpr_log(
+        GPR_DEBUG, "W:%p %s[%d] im-(sent,send)=(%d,%d) announce=%d", t,
+        t->is_client ? "CLIENT" : "SERVER", s->id, sent_initial_metadata,
+        s->send_initial_metadata != NULL, s->announce_window));
 
-    GRPC_CHTTP2_FLOW_MOVE_STREAM("write", transport_writing, stream_writing,
-                                 outgoing_window, stream_global,
-                                 outgoing_window);
-
-    if (!sent_initial_metadata && stream_global->send_initial_metadata) {
-      stream_writing->send_initial_metadata =
-          stream_global->send_initial_metadata;
-      stream_global->send_initial_metadata = NULL;
-      become_writable = true;
+    /* send initial metadata if it's available */
+    if (!sent_initial_metadata && s->send_initial_metadata) {
+      grpc_chttp2_encode_header(
+          &t->hpack_compressor, s->id, s->send_initial_metadata, 0,
+          t->settings[GRPC_ACKED_SETTINGS][GRPC_CHTTP2_SETTINGS_MAX_FRAME_SIZE],
+          &s->stats.outgoing, &t->outbuf);
+      s->send_initial_metadata = NULL;
+      s->sent_initial_metadata = true;
       sent_initial_metadata = true;
+      now_writing = true;
+    }
+    /* send any window updates */
+    if (s->announce_window > 0) {
+      uint32_t announce = s->announce_window;
+      gpr_slice_buffer_add(&t->outbuf,
+                           grpc_chttp2_window_update_create(
+                               s->id, s->announce_window, &s->stats.outgoing));
+      GRPC_CHTTP2_FLOW_DEBIT_STREAM("write", t, s, announce_window, announce);
     }
     if (sent_initial_metadata) {
-      if (stream_global->send_message != NULL) {
-        gpr_slice hdr = gpr_slice_malloc(5);
-        uint8_t *p = GPR_SLICE_START_PTR(hdr);
-        uint32_t len = stream_global->send_message->length;
-        GPR_ASSERT(stream_writing->send_message == NULL);
-        p[0] = (stream_global->send_message->flags &
-                GRPC_WRITE_INTERNAL_COMPRESS) != 0;
-        p[1] = (uint8_t)(len >> 24);
-        p[2] = (uint8_t)(len >> 16);
-        p[3] = (uint8_t)(len >> 8);
-        p[4] = (uint8_t)(len);
-        gpr_slice_buffer_add(&stream_writing->flow_controlled_buffer, hdr);
-        if (stream_global->send_message->length > 0) {
-          stream_writing->send_message = stream_global->send_message;
-        } else {
-          stream_writing->send_message = NULL;
-        }
-        stream_writing->stream_fetched = 0;
-        stream_global->send_message = NULL;
-      }
-      if ((stream_writing->send_message != NULL ||
-           stream_writing->flow_controlled_buffer.length > 0) &&
-          stream_writing->outgoing_window > 0) {
-        if (transport_writing->outgoing_window > 0) {
-          become_writable = true;
-        } else {
-          grpc_chttp2_list_add_stalled_by_transport(transport_writing,
-                                                    stream_writing);
+      /* send any body bytes, if allowed by flow control */
+      if (s->flow_controlled_buffer.length > 0) {
+        uint32_t max_outgoing =
+            (uint32_t)GPR_MIN(t->settings[GRPC_ACKED_SETTINGS]
+                                         [GRPC_CHTTP2_SETTINGS_MAX_FRAME_SIZE],
+                              GPR_MIN(s->outgoing_window, t->outgoing_window));
+        if (max_outgoing > 0) {
+          uint32_t send_bytes =
+              (uint32_t)GPR_MIN(max_outgoing, s->flow_controlled_buffer.length);
+          bool is_last_data_frame =
+              s->fetching_send_message == NULL &&
+              send_bytes == s->flow_controlled_buffer.length;
+          bool is_last_frame =
+              is_last_data_frame && s->send_trailing_metadata != NULL &&
+              grpc_metadata_batch_is_empty(s->send_trailing_metadata);
+          grpc_chttp2_encode_data(s->id, &s->flow_controlled_buffer, send_bytes,
+                                  is_last_frame, &s->stats.outgoing,
+                                  &t->outbuf);
+          GRPC_CHTTP2_FLOW_DEBIT_STREAM("write", t, s, outgoing_window,
+                                        send_bytes);
+          GRPC_CHTTP2_FLOW_DEBIT_TRANSPORT("write", t, outgoing_window,
+                                           send_bytes);
+          if (is_last_frame) {
+            s->send_trailing_metadata = NULL;
+            s->sent_trailing_metadata = true;
+            if (!t->is_client && !s->read_closed) {
+              gpr_slice_buffer_add(&t->outbuf, grpc_chttp2_rst_stream_create(
+                                                   s->id, GRPC_CHTTP2_NO_ERROR,
+                                                   &s->stats.outgoing));
+            }
+          }
+          s->sending_bytes += send_bytes;
+          now_writing = true;
+          if (s->flow_controlled_buffer.length > 0) {
+            GRPC_CHTTP2_STREAM_REF(s, "chttp2_writing:fork");
+            grpc_chttp2_list_add_writable_stream(t, s);
+          }
+        } else if (t->outgoing_window == 0) {
+          grpc_chttp2_list_add_stalled_by_transport(t, s);
+          now_writing = true;
         }
       }
-      if (stream_global->send_trailing_metadata) {
-        stream_writing->send_trailing_metadata =
-            stream_global->send_trailing_metadata;
-        stream_global->send_trailing_metadata = NULL;
-        become_writable = true;
+      if (s->send_trailing_metadata != NULL &&
+          s->fetching_send_message == NULL &&
+          s->flow_controlled_buffer.length == 0) {
+        if (grpc_metadata_batch_is_empty(s->send_trailing_metadata)) {
+          grpc_chttp2_encode_data(s->id, &s->flow_controlled_buffer, 0, true,
+                                  &s->stats.outgoing, &t->outbuf);
+        } else {
+          grpc_chttp2_encode_header(
+              &t->hpack_compressor, s->id, s->send_trailing_metadata, true,
+              t->settings[GRPC_ACKED_SETTINGS]
+                         [GRPC_CHTTP2_SETTINGS_MAX_FRAME_SIZE],
+              &s->stats.outgoing, &t->outbuf);
+        }
+        s->send_trailing_metadata = NULL;
+        s->sent_trailing_metadata = true;
+        if (!t->is_client && !s->read_closed) {
+          gpr_slice_buffer_add(
+              &t->outbuf, grpc_chttp2_rst_stream_create(
+                              s->id, GRPC_CHTTP2_NO_ERROR, &s->stats.outgoing));
+        }
+        now_writing = true;
       }
     }
 
-    if (!stream_global->read_closed &&
-        stream_global->unannounced_incoming_window_for_writing > 1024) {
-      GRPC_CHTTP2_FLOW_MOVE_STREAM("write", transport_global, stream_writing,
-                                   announce_window, stream_global,
-                                   unannounced_incoming_window_for_writing);
-      become_writable = true;
-    }
-
-    if (become_writable) {
-      grpc_chttp2_list_add_writing_stream(transport_writing, stream_writing);
+    if (now_writing) {
+      if (!grpc_chttp2_list_add_writing_stream(t, s)) {
+        /* already in writing list: drop ref */
+        GRPC_CHTTP2_STREAM_UNREF(exec_ctx, s, "chttp2_writing:already_writing");
+      }
     } else {
-      GRPC_CHTTP2_STREAM_UNREF(exec_ctx, stream_global, "chttp2_writing");
+      GRPC_CHTTP2_STREAM_UNREF(exec_ctx, s, "chttp2_writing:no_write");
     }
   }
 
   /* if the grpc_chttp2_transport is ready to send a window update, do so here
      also; 3/4 is a magic number that will likely get tuned soon */
-  if (transport_global->announce_incoming_window > 0) {
-    uint32_t announced = (uint32_t)GPR_MIN(
-        transport_global->announce_incoming_window, UINT32_MAX);
-    GRPC_CHTTP2_FLOW_DEBIT_TRANSPORT("write", transport_global,
-                                     announce_incoming_window, announced);
+  if (t->announce_incoming_window > 0) {
+    uint32_t announced =
+        (uint32_t)GPR_MIN(t->announce_incoming_window, UINT32_MAX);
+    GRPC_CHTTP2_FLOW_DEBIT_TRANSPORT("write", t, announce_incoming_window,
+                                     announced);
     grpc_transport_one_way_stats throwaway_stats;
-    gpr_slice_buffer_add(
-        &transport_writing->outbuf,
-        grpc_chttp2_window_update_create(0, announced, &throwaway_stats));
+    gpr_slice_buffer_add(&t->outbuf, grpc_chttp2_window_update_create(
+                                         0, announced, &throwaway_stats));
   }
 
-  GPR_TIMER_END("grpc_chttp2_unlocking_check_writes", 0);
+  GPR_TIMER_END("grpc_chttp2_begin_write", 0);
 
-  return transport_writing->outbuf.count > 0 ||
-         grpc_chttp2_list_have_writing_streams(transport_writing);
+  return t->outbuf.count > 0;
 }
 
-void grpc_chttp2_perform_writes(
-    grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_writing *transport_writing,
-    grpc_endpoint *endpoint) {
-  GPR_ASSERT(transport_writing->outbuf.count > 0 ||
-             grpc_chttp2_list_have_writing_streams(transport_writing));
+void grpc_chttp2_end_write(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t,
+                           grpc_error *error) {
+  GPR_TIMER_BEGIN("grpc_chttp2_end_write", 0);
+  grpc_chttp2_stream *s;
 
-  finalize_outbuf(exec_ctx, transport_writing);
-
-  GPR_ASSERT(endpoint);
-
-  if (transport_writing->outbuf.count > 0) {
-    grpc_endpoint_write(exec_ctx, endpoint, &transport_writing->outbuf,
-                        &transport_writing->done_cb);
-  } else {
-    grpc_exec_ctx_sched(exec_ctx, &transport_writing->done_cb, GRPC_ERROR_NONE,
-                        NULL);
-  }
-}
-
-static void finalize_outbuf(grpc_exec_ctx *exec_ctx,
-                            grpc_chttp2_transport_writing *transport_writing) {
-  grpc_chttp2_stream_writing *stream_writing;
-
-  GPR_TIMER_BEGIN("finalize_outbuf", 0);
-
-  bool is_first_data_frame = true;
-  while (
-      grpc_chttp2_list_pop_writing_stream(transport_writing, &stream_writing)) {
-    uint32_t max_outgoing =
-        (uint32_t)GPR_MIN(transport_writing->max_frame_size,
-                          GPR_MIN(stream_writing->outgoing_window,
-                                  transport_writing->outgoing_window));
-    /* send initial metadata if it's available */
-    if (stream_writing->send_initial_metadata != NULL) {
-      grpc_chttp2_encode_header(
-          &transport_writing->hpack_compressor, stream_writing->id,
-          stream_writing->send_initial_metadata, 0,
-          transport_writing->max_frame_size, &stream_writing->stats,
-          &transport_writing->outbuf);
-      stream_writing->send_initial_metadata = NULL;
-      stream_writing->sent_initial_metadata = 1;
-    }
-    /* send any window updates */
-    if (stream_writing->announce_window > 0 &&
-        stream_writing->send_initial_metadata == NULL) {
-      uint32_t announce = stream_writing->announce_window;
-      gpr_slice_buffer_add(
-          &transport_writing->outbuf,
-          grpc_chttp2_window_update_create(stream_writing->id,
-                                           stream_writing->announce_window,
-                                           &stream_writing->stats));
-      GRPC_CHTTP2_FLOW_DEBIT_STREAM("write", transport_writing, stream_writing,
-                                    announce_window, announce);
-      stream_writing->announce_window = 0;
-    }
-    /* fetch any body bytes */
-    while (!stream_writing->fetching && stream_writing->send_message &&
-           stream_writing->flow_controlled_buffer.length < max_outgoing &&
-           stream_writing->stream_fetched <
-               stream_writing->send_message->length) {
-      if (grpc_byte_stream_next(exec_ctx, stream_writing->send_message,
-                                &stream_writing->fetching_slice, max_outgoing,
-                                &stream_writing->finished_fetch)) {
-        stream_writing->stream_fetched +=
-            GPR_SLICE_LENGTH(stream_writing->fetching_slice);
-        if (stream_writing->stream_fetched ==
-            stream_writing->send_message->length) {
-          stream_writing->send_message = NULL;
-        }
-        gpr_slice_buffer_add(&stream_writing->flow_controlled_buffer,
-                             stream_writing->fetching_slice);
-      } else {
-        stream_writing->fetching = 1;
-      }
-    }
-    /* send any body bytes */
-    if (stream_writing->flow_controlled_buffer.length > 0) {
-      if (max_outgoing > 0) {
-        uint32_t send_bytes = (uint32_t)GPR_MIN(
-            max_outgoing, stream_writing->flow_controlled_buffer.length);
-        int is_last_data_frame =
-            stream_writing->send_message == NULL &&
-            send_bytes == stream_writing->flow_controlled_buffer.length;
-        int is_last_frame = is_last_data_frame &&
-                            stream_writing->send_trailing_metadata != NULL &&
-                            grpc_metadata_batch_is_empty(
-                                stream_writing->send_trailing_metadata);
-        grpc_chttp2_encode_data(
-            stream_writing->id, &stream_writing->flow_controlled_buffer,
-            send_bytes, is_last_frame, &stream_writing->stats,
-            &transport_writing->outbuf);
-        if (is_first_data_frame) {
-          /* TODO(dgq): this is a hack. It'll be fix in a future refactoring */
-          stream_writing->stats.data_bytes -= 5; /* discount grpc framing */
-          is_first_data_frame = false;
-        }
-        GRPC_CHTTP2_FLOW_DEBIT_STREAM("write", transport_writing,
-                                      stream_writing, outgoing_window,
-                                      send_bytes);
-        GRPC_CHTTP2_FLOW_DEBIT_TRANSPORT("write", transport_writing,
-                                         outgoing_window, send_bytes);
-        if (is_last_frame) {
-          stream_writing->send_trailing_metadata = NULL;
-          stream_writing->sent_trailing_metadata = 1;
-        }
-        if (is_last_data_frame) {
-          GPR_ASSERT(stream_writing->send_message == NULL);
-          stream_writing->sent_message = 1;
-        }
-      } else if (transport_writing->outgoing_window == 0) {
-        grpc_chttp2_list_add_writing_stalled_by_transport(transport_writing,
-                                                          stream_writing);
-        grpc_chttp2_list_add_written_stream(transport_writing, stream_writing);
-      }
-    }
-    /* send trailing metadata if it's available and we're ready for it */
-    if (stream_writing->send_message == NULL &&
-        stream_writing->flow_controlled_buffer.length == 0 &&
-        stream_writing->send_trailing_metadata != NULL) {
-      if (grpc_metadata_batch_is_empty(
-              stream_writing->send_trailing_metadata)) {
-        grpc_chttp2_encode_data(
-            stream_writing->id, &stream_writing->flow_controlled_buffer, 0, 1,
-            &stream_writing->stats, &transport_writing->outbuf);
-      } else {
-        grpc_chttp2_encode_header(
-            &transport_writing->hpack_compressor, stream_writing->id,
-            stream_writing->send_trailing_metadata, 1,
-            transport_writing->max_frame_size, &stream_writing->stats,
-            &transport_writing->outbuf);
-      }
-      if (!transport_writing->is_client && !stream_writing->read_closed) {
-        gpr_slice_buffer_add(&transport_writing->outbuf,
-                             grpc_chttp2_rst_stream_create(
-                                 stream_writing->id, GRPC_CHTTP2_NO_ERROR,
-                                 &stream_writing->stats));
-      }
-      stream_writing->send_trailing_metadata = NULL;
-      stream_writing->sent_trailing_metadata = 1;
-    }
-    /* if there's more to write, then loop, otherwise prepare to finish the
-     * write */
-    if ((stream_writing->flow_controlled_buffer.length > 0 ||
-         (stream_writing->send_message && !stream_writing->fetching)) &&
-        stream_writing->outgoing_window > 0) {
-      if (transport_writing->outgoing_window > 0) {
-        grpc_chttp2_list_add_writing_stream(transport_writing, stream_writing);
-      } else {
-        grpc_chttp2_list_add_writing_stalled_by_transport(transport_writing,
-                                                          stream_writing);
-        grpc_chttp2_list_add_written_stream(transport_writing, stream_writing);
-      }
-    } else {
-      grpc_chttp2_list_add_written_stream(transport_writing, stream_writing);
-    }
-  }
-
-  GPR_TIMER_END("finalize_outbuf", 0);
-}
-
-void grpc_chttp2_cleanup_writing(
-    grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_global *transport_global,
-    grpc_chttp2_transport_writing *transport_writing) {
-  GPR_TIMER_BEGIN("grpc_chttp2_cleanup_writing", 0);
-  grpc_chttp2_stream_writing *stream_writing;
-  grpc_chttp2_stream_global *stream_global;
-
-  if (grpc_chttp2_list_flush_writing_stalled_by_transport(exec_ctx,
-                                                          transport_writing)) {
-    grpc_chttp2_initiate_write(exec_ctx, transport_global, false,
-                               "resume_stalled_stream");
-  }
-
-  while (grpc_chttp2_list_pop_written_stream(
-      transport_global, transport_writing, &stream_global, &stream_writing)) {
-    if (stream_writing->sent_initial_metadata) {
+  while (grpc_chttp2_list_pop_writing_stream(t, &s)) {
+    if (s->sent_initial_metadata) {
       grpc_chttp2_complete_closure_step(
-          exec_ctx, transport_global, stream_global,
-          &stream_global->send_initial_metadata_finished, GRPC_ERROR_NONE);
+          exec_ctx, t, s, &s->send_initial_metadata_finished,
+          GRPC_ERROR_REF(error), "send_initial_metadata_finished");
     }
-    grpc_transport_move_one_way_stats(&stream_writing->stats,
-                                      &stream_global->stats.outgoing);
-    if (stream_writing->sent_message) {
-      GPR_ASSERT(stream_writing->send_message == NULL);
+    if (s->sending_bytes != 0) {
+      update_list(exec_ctx, t, s, (int64_t)s->sending_bytes,
+                  &s->on_write_finished_cbs, GRPC_ERROR_REF(error));
+      s->sending_bytes = 0;
+    }
+    if (s->sent_trailing_metadata) {
       grpc_chttp2_complete_closure_step(
-          exec_ctx, transport_global, stream_global,
-          &stream_global->send_message_finished, GRPC_ERROR_NONE);
-      stream_writing->sent_message = 0;
+          exec_ctx, t, s, &s->send_trailing_metadata_finished,
+          GRPC_ERROR_REF(error), "send_trailing_metadata_finished");
+      grpc_chttp2_mark_stream_closed(exec_ctx, t, s, !t->is_client, 1,
+                                     GRPC_ERROR_REF(error));
     }
-    if (stream_writing->sent_trailing_metadata) {
-      grpc_chttp2_complete_closure_step(
-          exec_ctx, transport_global, stream_global,
-          &stream_global->send_trailing_metadata_finished, GRPC_ERROR_NONE);
-    }
-    if (stream_writing->sent_trailing_metadata) {
-      grpc_chttp2_mark_stream_closed(exec_ctx, transport_global, stream_global,
-                                     !transport_global->is_client, 1,
-                                     GRPC_ERROR_NONE);
-    }
-    GRPC_CHTTP2_STREAM_UNREF(exec_ctx, stream_global, "chttp2_writing");
+    GRPC_CHTTP2_STREAM_UNREF(exec_ctx, s, "chttp2_writing:end");
   }
-  gpr_slice_buffer_reset_and_unref(&transport_writing->outbuf);
-  GPR_TIMER_END("grpc_chttp2_cleanup_writing", 0);
+  gpr_slice_buffer_reset_and_unref(&t->outbuf);
+  GRPC_ERROR_UNREF(error);
+  GPR_TIMER_END("grpc_chttp2_end_write", 0);
 }
diff --git a/src/core/lib/channel/channel_args.c b/src/core/lib/channel/channel_args.c
index 3a56b1f..2957d2c 100644
--- a/src/core/lib/channel/channel_args.c
+++ b/src/core/lib/channel/channel_args.c
@@ -272,6 +272,18 @@
   return 0;
 }
 
+const grpc_arg *grpc_channel_args_find(const grpc_channel_args *args,
+                                       const char *name) {
+  if (args != NULL) {
+    for (size_t i = 0; i < args->num_args; ++i) {
+      if (strcmp(args->args[i].key, name) == 0) {
+        return &args->args[i];
+      }
+    }
+  }
+  return NULL;
+}
+
 int grpc_channel_arg_get_integer(grpc_arg *arg, grpc_integer_options options) {
   if (arg->type != GRPC_ARG_INTEGER) {
     gpr_log(GPR_ERROR, "%s ignored: it must be an integer", arg->key);
diff --git a/src/core/lib/channel/channel_args.h b/src/core/lib/channel/channel_args.h
index 586a296..a80340c 100644
--- a/src/core/lib/channel/channel_args.h
+++ b/src/core/lib/channel/channel_args.h
@@ -89,6 +89,10 @@
 int grpc_channel_args_compare(const grpc_channel_args *a,
                               const grpc_channel_args *b);
 
+/** Returns the value of argument \a name from \a args, or NULL if not found. */
+const grpc_arg *grpc_channel_args_find(const grpc_channel_args *args,
+                                       const char *name);
+
 typedef struct grpc_integer_options {
   int default_value;  // Return this if value is outside of expected bounds.
   int min_value;
diff --git a/src/core/lib/channel/channel_stack.c b/src/core/lib/channel/channel_stack.c
index 57d34d9..2c53679 100644
--- a/src/core/lib/channel/channel_stack.c
+++ b/src/core/lib/channel/channel_stack.c
@@ -162,7 +162,7 @@
     grpc_exec_ctx *exec_ctx, grpc_channel_stack *channel_stack,
     int initial_refs, grpc_iomgr_cb_func destroy, void *destroy_arg,
     grpc_call_context_element *context, const void *transport_server_data,
-    gpr_timespec deadline, grpc_call_stack *call_stack) {
+    grpc_mdstr *path, gpr_timespec deadline, grpc_call_stack *call_stack) {
   grpc_channel_element *channel_elems = CHANNEL_ELEMS_FROM_STACK(channel_stack);
   grpc_call_element_args args;
   size_t count = channel_stack->count;
@@ -179,10 +179,12 @@
 
   /* init per-filter data */
   grpc_error *first_error = GRPC_ERROR_NONE;
+  args.start_time = gpr_now(GPR_CLOCK_MONOTONIC);
   for (i = 0; i < count; i++) {
     args.call_stack = call_stack;
     args.server_transport_data = transport_server_data;
     args.context = context;
+    args.path = path;
     args.deadline = deadline;
     call_elems[i].filter = channel_elems[i].filter;
     call_elems[i].channel_data = channel_elems[i].channel_data;
diff --git a/src/core/lib/channel/channel_stack.h b/src/core/lib/channel/channel_stack.h
index 1cfe288..27f3be7 100644
--- a/src/core/lib/channel/channel_stack.h
+++ b/src/core/lib/channel/channel_stack.h
@@ -74,6 +74,8 @@
   grpc_call_stack *call_stack;
   const void *server_transport_data;
   grpc_call_context_element *context;
+  grpc_mdstr *path;
+  gpr_timespec start_time;
   gpr_timespec deadline;
 } grpc_call_element_args;
 
@@ -225,7 +227,7 @@
     grpc_exec_ctx *exec_ctx, grpc_channel_stack *channel_stack,
     int initial_refs, grpc_iomgr_cb_func destroy, void *destroy_arg,
     grpc_call_context_element *context, const void *transport_server_data,
-    gpr_timespec deadline, grpc_call_stack *call_stack);
+    grpc_mdstr *path, gpr_timespec deadline, grpc_call_stack *call_stack);
 /* Set a pollset or a pollset_set for a call stack: must occur before the first
  * op is started */
 void grpc_call_stack_set_pollset_or_pollset_set(grpc_exec_ctx *exec_ctx,
diff --git a/src/core/lib/channel/deadline_filter.c b/src/core/lib/channel/deadline_filter.c
index 079b98a..d2ea525 100644
--- a/src/core/lib/channel/deadline_filter.c
+++ b/src/core/lib/channel/deadline_filter.c
@@ -64,30 +64,49 @@
 }
 
 // Starts the deadline timer.
+static void start_timer_if_needed_locked(grpc_exec_ctx* exec_ctx,
+                                         grpc_call_element* elem,
+                                         gpr_timespec deadline) {
+  grpc_deadline_state* deadline_state = elem->call_data;
+  deadline = gpr_convert_clock_type(deadline, GPR_CLOCK_MONOTONIC);
+  // Note: We do not start the timer if there is already a timer
+  // pending.  This should be okay, because this is only called from two
+  // functions exported by this module: grpc_deadline_state_start(), which
+  // starts the initial timer, and grpc_deadline_state_reset(), which
+  // cancels any pre-existing timer before starting a new one.  In
+  // particular, we want to ensure that if grpc_deadline_state_start()
+  // winds up trying to start the timer after grpc_deadline_state_reset()
+  // has already done so, we ignore the value from the former.
+  if (!deadline_state->timer_pending &&
+      gpr_time_cmp(deadline, gpr_inf_future(GPR_CLOCK_MONOTONIC)) != 0) {
+    // Take a reference to the call stack, to be owned by the timer.
+    GRPC_CALL_STACK_REF(deadline_state->call_stack, "deadline_timer");
+    deadline_state->timer_pending = true;
+    grpc_timer_init(exec_ctx, &deadline_state->timer, deadline, timer_callback,
+                    elem, gpr_now(GPR_CLOCK_MONOTONIC));
+  }
+}
 static void start_timer_if_needed(grpc_exec_ctx* exec_ctx,
                                   grpc_call_element* elem,
                                   gpr_timespec deadline) {
   grpc_deadline_state* deadline_state = elem->call_data;
-  deadline = gpr_convert_clock_type(deadline, GPR_CLOCK_MONOTONIC);
-  if (gpr_time_cmp(deadline, gpr_inf_future(GPR_CLOCK_MONOTONIC)) != 0) {
-    // Take a reference to the call stack, to be owned by the timer.
-    GRPC_CALL_STACK_REF(deadline_state->call_stack, "deadline_timer");
-    gpr_mu_lock(&deadline_state->timer_mu);
-    deadline_state->timer_pending = true;
-    grpc_timer_init(exec_ctx, &deadline_state->timer, deadline, timer_callback,
-                    elem, gpr_now(GPR_CLOCK_MONOTONIC));
-    gpr_mu_unlock(&deadline_state->timer_mu);
-  }
+  gpr_mu_lock(&deadline_state->timer_mu);
+  start_timer_if_needed_locked(exec_ctx, elem, deadline);
+  gpr_mu_unlock(&deadline_state->timer_mu);
 }
 
 // Cancels the deadline timer.
-static void cancel_timer_if_needed(grpc_exec_ctx* exec_ctx,
-                                   grpc_deadline_state* deadline_state) {
-  gpr_mu_lock(&deadline_state->timer_mu);
+static void cancel_timer_if_needed_locked(grpc_exec_ctx* exec_ctx,
+                                          grpc_deadline_state* deadline_state) {
   if (deadline_state->timer_pending) {
     grpc_timer_cancel(exec_ctx, &deadline_state->timer);
     deadline_state->timer_pending = false;
   }
+}
+static void cancel_timer_if_needed(grpc_exec_ctx* exec_ctx,
+                                   grpc_deadline_state* deadline_state) {
+  gpr_mu_lock(&deadline_state->timer_mu);
+  cancel_timer_if_needed_locked(exec_ctx, deadline_state);
   gpr_mu_unlock(&deadline_state->timer_mu);
 }
 
@@ -108,6 +127,21 @@
   op->on_complete = &deadline_state->on_complete;
 }
 
+void grpc_deadline_state_init(grpc_exec_ctx* exec_ctx, grpc_call_element* elem,
+                              grpc_call_stack* call_stack) {
+  grpc_deadline_state* deadline_state = elem->call_data;
+  memset(deadline_state, 0, sizeof(*deadline_state));
+  deadline_state->call_stack = call_stack;
+  gpr_mu_init(&deadline_state->timer_mu);
+}
+
+void grpc_deadline_state_destroy(grpc_exec_ctx* exec_ctx,
+                                 grpc_call_element* elem) {
+  grpc_deadline_state* deadline_state = elem->call_data;
+  cancel_timer_if_needed(exec_ctx, deadline_state);
+  gpr_mu_destroy(&deadline_state->timer_mu);
+}
+
 // Callback and associated state for starting the timer after call stack
 // initialization has been completed.
 struct start_timer_after_init_state {
@@ -122,16 +156,11 @@
   gpr_free(state);
 }
 
-void grpc_deadline_state_init(grpc_exec_ctx* exec_ctx, grpc_call_element* elem,
-                              grpc_call_element_args* args) {
-  grpc_deadline_state* deadline_state = elem->call_data;
-  memset(deadline_state, 0, sizeof(*deadline_state));
-  deadline_state->call_stack = args->call_stack;
-  gpr_mu_init(&deadline_state->timer_mu);
+void grpc_deadline_state_start(grpc_exec_ctx* exec_ctx, grpc_call_element* elem,
+                               gpr_timespec deadline) {
   // Deadline will always be infinite on servers, so the timer will only be
   // set on clients with a finite deadline.
-  const gpr_timespec deadline =
-      gpr_convert_clock_type(args->deadline, GPR_CLOCK_MONOTONIC);
+  deadline = gpr_convert_clock_type(deadline, GPR_CLOCK_MONOTONIC);
   if (gpr_time_cmp(deadline, gpr_inf_future(GPR_CLOCK_MONOTONIC)) != 0) {
     // When the deadline passes, we indicate the failure by sending down
     // an op with cancel_error set.  However, we can't send down any ops
@@ -148,11 +177,13 @@
   }
 }
 
-void grpc_deadline_state_destroy(grpc_exec_ctx* exec_ctx,
-                                 grpc_call_element* elem) {
+void grpc_deadline_state_reset(grpc_exec_ctx* exec_ctx, grpc_call_element* elem,
+                               gpr_timespec new_deadline) {
   grpc_deadline_state* deadline_state = elem->call_data;
-  cancel_timer_if_needed(exec_ctx, deadline_state);
-  gpr_mu_destroy(&deadline_state->timer_mu);
+  gpr_mu_lock(&deadline_state->timer_mu);
+  cancel_timer_if_needed_locked(exec_ctx, deadline_state);
+  start_timer_if_needed_locked(exec_ctx, elem, new_deadline);
+  gpr_mu_unlock(&deadline_state->timer_mu);
 }
 
 void grpc_deadline_state_client_start_transport_stream_op(
@@ -209,7 +240,8 @@
                                   grpc_call_element_args* args) {
   // Note: size of call data is different between client and server.
   memset(elem->call_data, 0, elem->filter->sizeof_call_data);
-  grpc_deadline_state_init(exec_ctx, elem, args);
+  grpc_deadline_state_init(exec_ctx, elem, args->call_stack);
+  grpc_deadline_state_start(exec_ctx, elem, args->deadline);
   return GRPC_ERROR_NONE;
 }
 
diff --git a/src/core/lib/channel/deadline_filter.h b/src/core/lib/channel/deadline_filter.h
index 685df87..716a852 100644
--- a/src/core/lib/channel/deadline_filter.h
+++ b/src/core/lib/channel/deadline_filter.h
@@ -54,18 +54,37 @@
   grpc_closure* next_on_complete;
 } grpc_deadline_state;
 
-// To be used in a filter's init_call_elem(), destroy_call_elem(), and
-// start_transport_stream_op() methods to enforce call deadlines.
 //
-// REQUIRES: The first field in elem->call_data is a grpc_deadline_state.
+// NOTE: All of these functions require that the first field in
+// elem->call_data is a grpc_deadline_state.
 //
-// For grpc_deadline_state_client_start_transport_stream_op(), it is the
-// caller's responsibility to chain to the next filter if necessary
-// after the function returns.
+
 void grpc_deadline_state_init(grpc_exec_ctx* exec_ctx, grpc_call_element* elem,
-                              grpc_call_element_args* args);
+                              grpc_call_stack* call_stack);
 void grpc_deadline_state_destroy(grpc_exec_ctx* exec_ctx,
                                  grpc_call_element* elem);
+
+// Starts the timer with the specified deadline.
+// Should be called from the filter's init_call_elem() method.
+void grpc_deadline_state_start(grpc_exec_ctx* exec_ctx, grpc_call_element* elem,
+                               gpr_timespec deadline);
+
+// Cancels the existing timer and starts a new one with new_deadline.
+//
+// Note: It is generally safe to call this with an earlier deadline
+// value than the current one, but not the reverse.  No checks are done
+// to ensure that the timer callback is not invoked while it is in the
+// process of being reset, which means that attempting to increase the
+// deadline may result in the timer being called twice.
+void grpc_deadline_state_reset(grpc_exec_ctx* exec_ctx, grpc_call_element* elem,
+                               gpr_timespec new_deadline);
+
+// To be called from the client-side filter's start_transport_stream_op()
+// method.  Ensures that the deadline timer is cancelled when the call
+// is completed.
+//
+// Note: It is the caller's responsibility to chain to the next filter if
+// necessary after this function returns.
 void grpc_deadline_state_client_start_transport_stream_op(
     grpc_exec_ctx* exec_ctx, grpc_call_element* elem,
     grpc_transport_stream_op* op);
diff --git a/src/core/lib/channel/handshaker.c b/src/core/lib/channel/handshaker.c
index 8f9fb17..0d75988 100644
--- a/src/core/lib/channel/handshaker.c
+++ b/src/core/lib/channel/handshaker.c
@@ -183,7 +183,7 @@
     gpr_timespec deadline, grpc_tcp_server_acceptor* acceptor,
     grpc_handshaker_done_cb cb, void* user_data) {
   grpc_channel_args* args_copy = grpc_channel_args_copy(args);
-  gpr_slice_buffer* read_buffer = malloc(sizeof(*read_buffer));
+  gpr_slice_buffer* read_buffer = gpr_malloc(sizeof(*read_buffer));
   gpr_slice_buffer_init(read_buffer);
   if (mgr->count == 0) {
     // No handshakers registered, so we just immediately call the done
diff --git a/src/core/lib/channel/http_server_filter.c b/src/core/lib/channel/http_server_filter.c
index 0f2bf97..f2221fb 100644
--- a/src/core/lib/channel/http_server_filter.c
+++ b/src/core/lib/channel/http_server_filter.c
@@ -42,6 +42,8 @@
 #define EXPECTED_CONTENT_TYPE "application/grpc"
 #define EXPECTED_CONTENT_TYPE_LENGTH sizeof(EXPECTED_CONTENT_TYPE) - 1
 
+extern int grpc_http_trace;
+
 typedef struct call_data {
   uint8_t seen_path;
   uint8_t seen_method;
@@ -209,6 +211,11 @@
             err, GRPC_ERROR_CREATE("Missing te: trailers header"));
       }
       /* Error this call out */
+      if (grpc_http_trace) {
+        const char *error_str = grpc_error_string(err);
+        gpr_log(GPR_ERROR, "Invalid http2 headers: %s", error_str);
+        grpc_error_free_string(error_str);
+      }
       grpc_call_element_send_cancel(exec_ctx, elem);
     }
   } else {
diff --git a/src/core/lib/channel/message_size_filter.c b/src/core/lib/channel/message_size_filter.c
index f067a3a..b8b2546 100644
--- a/src/core/lib/channel/message_size_filter.c
+++ b/src/core/lib/channel/message_size_filter.c
@@ -38,13 +38,54 @@
 #include <grpc/support/log.h>
 #include <grpc/support/string_util.h>
 
+#include "src/core/ext/client_channel/method_config.h"
 #include "src/core/lib/channel/channel_args.h"
 
 #define DEFAULT_MAX_SEND_MESSAGE_LENGTH -1  // Unlimited.
 // The protobuf library will (by default) start warning at 100 megs.
 #define DEFAULT_MAX_RECV_MESSAGE_LENGTH (4 * 1024 * 1024)
 
+typedef struct message_size_limits {
+  int max_send_size;
+  int max_recv_size;
+} message_size_limits;
+
+static void* message_size_limits_copy(void* value) {
+  void* new_value = gpr_malloc(sizeof(message_size_limits));
+  memcpy(new_value, value, sizeof(message_size_limits));
+  return new_value;
+}
+
+static int message_size_limits_cmp(void* value1, void* value2) {
+  const message_size_limits* v1 = value1;
+  const message_size_limits* v2 = value2;
+  if (v1->max_send_size > v2->max_send_size) return 1;
+  if (v1->max_send_size < v2->max_send_size) return -1;
+  if (v1->max_recv_size > v2->max_recv_size) return 1;
+  if (v1->max_recv_size < v2->max_recv_size) return -1;
+  return 0;
+}
+
+static const grpc_mdstr_hash_table_vtable message_size_limits_vtable = {
+    gpr_free, message_size_limits_copy, message_size_limits_cmp};
+
+static void* method_config_convert_value(
+    const grpc_method_config* method_config) {
+  message_size_limits* value = gpr_malloc(sizeof(message_size_limits));
+  const int32_t* max_request_message_bytes =
+      grpc_method_config_get_max_request_message_bytes(method_config);
+  value->max_send_size =
+      max_request_message_bytes != NULL ? *max_request_message_bytes : -1;
+  const int32_t* max_response_message_bytes =
+      grpc_method_config_get_max_response_message_bytes(method_config);
+  value->max_recv_size =
+      max_response_message_bytes != NULL ? *max_response_message_bytes : -1;
+  return value;
+}
+
 typedef struct call_data {
+  int max_send_size;
+  int max_recv_size;
   // Receive closures are chained: we inject this closure as the
   // recv_message_ready up-call on transport_stream_op, and remember to
   // call our next_recv_message_ready member after handling it.
@@ -58,6 +99,8 @@
 typedef struct channel_data {
   int max_send_size;
   int max_recv_size;
+  // Maps path names to message_size_limits structs.
+  grpc_mdstr_hash_table* method_limit_table;
 } channel_data;
 
 // Callback invoked when we receive a message.  Here we check the max
@@ -66,13 +109,12 @@
                                grpc_error* error) {
   grpc_call_element* elem = user_data;
   call_data* calld = elem->call_data;
-  channel_data* chand = elem->channel_data;
-  if (*calld->recv_message != NULL && chand->max_recv_size >= 0 &&
-      (*calld->recv_message)->length > (size_t)chand->max_recv_size) {
+  if (*calld->recv_message != NULL && calld->max_recv_size >= 0 &&
+      (*calld->recv_message)->length > (size_t)calld->max_recv_size) {
     char* message_string;
     gpr_asprintf(&message_string,
                  "Received message larger than max (%u vs. %d)",
-                 (*calld->recv_message)->length, chand->max_recv_size);
+                 (*calld->recv_message)->length, calld->max_recv_size);
     grpc_error* new_error = grpc_error_set_int(
         GRPC_ERROR_CREATE(message_string), GRPC_ERROR_INT_GRPC_STATUS,
         GRPC_STATUS_INVALID_ARGUMENT);
@@ -93,13 +135,12 @@
                                       grpc_call_element* elem,
                                       grpc_transport_stream_op* op) {
   call_data* calld = elem->call_data;
-  channel_data* chand = elem->channel_data;
   // Check max send message size.
-  if (op->send_message != NULL && chand->max_send_size >= 0 &&
-      op->send_message->length > (size_t)chand->max_send_size) {
+  if (op->send_message != NULL && calld->max_send_size >= 0 &&
+      op->send_message->length > (size_t)calld->max_send_size) {
     char* message_string;
     gpr_asprintf(&message_string, "Sent message larger than max (%u vs. %d)",
-                 op->send_message->length, chand->max_send_size);
+                 op->send_message->length, calld->max_send_size);
     gpr_slice message = gpr_slice_from_copied_string(message_string);
     gpr_free(message_string);
     grpc_call_element_send_close_with_message(
@@ -119,9 +160,32 @@
 static grpc_error* init_call_elem(grpc_exec_ctx* exec_ctx,
                                   grpc_call_element* elem,
                                   grpc_call_element_args* args) {
+  channel_data* chand = elem->channel_data;
   call_data* calld = elem->call_data;
   calld->next_recv_message_ready = NULL;
   grpc_closure_init(&calld->recv_message_ready, recv_message_ready, elem);
+  // Get max sizes from channel data, then merge in per-method config values.
+  // Note: Per-method config is only available on the client, so we
+  // apply the max request size to the send limit and the max response
+  // size to the receive limit.
+  calld->max_send_size = chand->max_send_size;
+  calld->max_recv_size = chand->max_recv_size;
+  if (chand->method_limit_table != NULL) {
+    message_size_limits* limits =
+        grpc_method_config_table_get(chand->method_limit_table, args->path);
+    if (limits != NULL) {
+      if (limits->max_send_size >= 0 &&
+          (limits->max_send_size < calld->max_send_size ||
+           calld->max_send_size < 0)) {
+        calld->max_send_size = limits->max_send_size;
+      }
+      if (limits->max_recv_size >= 0 &&
+          (limits->max_recv_size < calld->max_recv_size ||
+           calld->max_recv_size < 0)) {
+        calld->max_recv_size = limits->max_recv_size;
+      }
+    }
+  }
   return GRPC_ERROR_NONE;
 }
 
@@ -155,11 +219,23 @@
           grpc_channel_arg_get_integer(&args->channel_args->args[i], options);
     }
   }
+  // Get method config table from channel args.
+  const grpc_arg* channel_arg =
+      grpc_channel_args_find(args->channel_args, GRPC_ARG_SERVICE_CONFIG);
+  if (channel_arg != NULL) {
+    GPR_ASSERT(channel_arg->type == GRPC_ARG_POINTER);
+    chand->method_limit_table = grpc_method_config_table_convert(
+        (grpc_method_config_table*)channel_arg->value.pointer.p,
+        method_config_convert_value, &message_size_limits_vtable);
+  }
 }
 
 // Destructor for channel_data.
 static void destroy_channel_elem(grpc_exec_ctx* exec_ctx,
-                                 grpc_channel_element* elem) {}
+                                 grpc_channel_element* elem) {
+  channel_data* chand = elem->channel_data;
+  grpc_mdstr_hash_table_unref(chand->method_limit_table);
+}
 
 const grpc_channel_filter grpc_message_size_filter = {
     start_transport_stream_op,
diff --git a/src/core/lib/http/httpcli.c b/src/core/lib/http/httpcli.c
index 7f3c2d1..55de1b5 100644
--- a/src/core/lib/http/httpcli.c
+++ b/src/core/lib/http/httpcli.c
@@ -32,7 +32,6 @@
  */
 
 #include "src/core/lib/http/httpcli.h"
-#include "src/core/lib/iomgr/sockaddr.h"
 
 #include <string.h>
 
@@ -126,7 +125,7 @@
     req->overall_error = GRPC_ERROR_CREATE("Failed HTTP/1 client request");
   }
   grpc_resolved_address *addr = &req->addresses->addrs[req->next_address - 1];
-  char *addr_text = grpc_sockaddr_to_uri((struct sockaddr *)addr->addr);
+  char *addr_text = grpc_sockaddr_to_uri(addr);
   req->overall_error = grpc_error_add_child(
       req->overall_error,
       grpc_error_set_str(error, GRPC_ERROR_STR_TARGET_ADDRESS, addr_text));
@@ -224,9 +223,8 @@
   }
   addr = &req->addresses->addrs[req->next_address++];
   grpc_closure_init(&req->connected, on_connected, req);
-  grpc_tcp_client_connect(
-      exec_ctx, &req->connected, &req->ep, req->context->pollset_set,
-      (struct sockaddr *)&addr->addr, addr->len, req->deadline);
+  grpc_tcp_client_connect(exec_ctx, &req->connected, &req->ep,
+                          req->context->pollset_set, addr, req->deadline);
 }
 
 static void on_resolved(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) {
diff --git a/src/core/lib/iomgr/closure.c b/src/core/lib/iomgr/closure.c
index 1ba0a5c..c6ddc76 100644
--- a/src/core/lib/iomgr/closure.c
+++ b/src/core/lib/iomgr/closure.c
@@ -35,6 +35,8 @@
 
 #include <grpc/support/alloc.h>
 
+#include "src/core/lib/profiling/timers.h"
+
 void grpc_closure_init(grpc_closure *closure, grpc_iomgr_cb_func cb,
                        void *cb_arg) {
   closure->cb = cb;
@@ -51,7 +53,7 @@
     GRPC_ERROR_UNREF(error);
     return;
   }
-  closure->error = error;
+  closure->error_data.error = error;
   closure->next_data.next = NULL;
   if (closure_list->head == NULL) {
     closure_list->head = closure;
@@ -64,8 +66,8 @@
 void grpc_closure_list_fail_all(grpc_closure_list *list,
                                 grpc_error *forced_failure) {
   for (grpc_closure *c = list->head; c != NULL; c = c->next_data.next) {
-    if (c->error == GRPC_ERROR_NONE) {
-      c->error = GRPC_ERROR_REF(forced_failure);
+    if (c->error_data.error == GRPC_ERROR_NONE) {
+      c->error_data.error = GRPC_ERROR_REF(forced_failure);
     }
   }
   GRPC_ERROR_UNREF(forced_failure);
@@ -110,3 +112,13 @@
   grpc_closure_init(&wc->wrapper, closure_wrapper, wc);
   return &wc->wrapper;
 }
+
+void grpc_closure_run(grpc_exec_ctx *exec_ctx, grpc_closure *c,
+                      grpc_error *error) {
+  GPR_TIMER_BEGIN("grpc_closure_run", 0);
+  if (c != NULL) {
+    c->cb(exec_ctx, c->cb_arg, error);
+  }
+  GRPC_ERROR_UNREF(error);
+  GPR_TIMER_END("grpc_closure_run", 0);
+}
diff --git a/src/core/lib/iomgr/closure.h b/src/core/lib/iomgr/closure.h
index c1a22b6..2b4b271 100644
--- a/src/core/lib/iomgr/closure.h
+++ b/src/core/lib/iomgr/closure.h
@@ -76,7 +76,10 @@
   void *cb_arg;
 
   /** Once queued, the result of the closure. Before then: scratch space */
-  grpc_error *error;
+  union {
+    grpc_error *error;
+    uintptr_t scratch;
+  } error_data;
 };
 
 /** Initializes \a closure with \a cb and \a cb_arg. */
@@ -106,4 +109,10 @@
 /** return whether \a list is empty. */
 bool grpc_closure_list_empty(grpc_closure_list list);
 
+/** Run a closure directly. Caller ensures that no locks are being held above.
+ *  Note that calling this at the end of a closure callback function itself is
+ *  by definition safe. */
+void grpc_closure_run(grpc_exec_ctx *exec_ctx, grpc_closure *closure,
+                      grpc_error *error);
+
 #endif /* GRPC_CORE_LIB_IOMGR_CLOSURE_H */
diff --git a/src/core/lib/iomgr/combiner.c b/src/core/lib/iomgr/combiner.c
index 831bdb4..60ee14e 100644
--- a/src/core/lib/iomgr/combiner.c
+++ b/src/core/lib/iomgr/combiner.c
@@ -50,25 +50,57 @@
     }                           \
   } while (0)
 
+#define STATE_UNORPHANED 1
+#define STATE_ELEM_COUNT_LOW_BIT 2
+
 struct grpc_combiner {
+  grpc_combiner *next_combiner_on_this_exec_ctx;
   grpc_workqueue *optional_workqueue;
   gpr_mpscq queue;
   // state is:
-  // lower bit - zero if orphaned
-  // other bits - number of items queued on the lock
+  // lower bit - zero if orphaned (STATE_UNORPHANED)
+  // other bits - number of items queued on the lock (STATE_ELEM_COUNT_LOW_BIT)
   gpr_atm state;
-  bool take_async_break_before_final_list;
+  // number of elements in the list that are covered by a poller: if >0, we can
+  // offload safely
+  gpr_atm elements_covered_by_poller;
+  bool time_to_execute_final_list;
+  bool final_list_covered_by_poller;
   grpc_closure_list final_list;
-  grpc_closure continue_finishing;
+  grpc_closure offload;
 };
 
+static void offload(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error);
+
+typedef struct {
+  grpc_error *error;
+  bool covered_by_poller;
+} error_data;
+
+static uintptr_t pack_error_data(error_data d) {
+  return ((uintptr_t)d.error) | (d.covered_by_poller ? 1 : 0);
+}
+
+static error_data unpack_error_data(uintptr_t p) {
+  return (error_data){(grpc_error *)(p & ~(uintptr_t)1), p & 1};
+}
+
+static bool is_covered_by_poller(grpc_combiner *lock) {
+  return lock->final_list_covered_by_poller ||
+         gpr_atm_acq_load(&lock->elements_covered_by_poller) > 0;
+}
+
 grpc_combiner *grpc_combiner_create(grpc_workqueue *optional_workqueue) {
   grpc_combiner *lock = gpr_malloc(sizeof(*lock));
+  lock->next_combiner_on_this_exec_ctx = NULL;
+  lock->time_to_execute_final_list = false;
   lock->optional_workqueue = optional_workqueue;
-  gpr_atm_no_barrier_store(&lock->state, 1);
+  lock->final_list_covered_by_poller = false;
+  gpr_atm_no_barrier_store(&lock->state, STATE_UNORPHANED);
+  gpr_atm_no_barrier_store(&lock->elements_covered_by_poller, 0);
   gpr_mpscq_init(&lock->queue);
-  lock->take_async_break_before_final_list = false;
   grpc_closure_list_init(&lock->final_list);
+  grpc_closure_init(&lock->offload, offload, lock);
   GRPC_COMBINER_TRACE(gpr_log(GPR_DEBUG, "C:%p create", lock));
   return lock;
 }
@@ -82,7 +114,7 @@
 }
 
 void grpc_combiner_destroy(grpc_exec_ctx *exec_ctx, grpc_combiner *lock) {
-  gpr_atm old_state = gpr_atm_full_fetch_add(&lock->state, -1);
+  gpr_atm old_state = gpr_atm_full_fetch_add(&lock->state, -STATE_UNORPHANED);
   GRPC_COMBINER_TRACE(gpr_log(
       GPR_DEBUG, "C:%p really_destroy old_state=%" PRIdPTR, lock, old_state));
   if (old_state == 1) {
@@ -90,172 +122,188 @@
   }
 }
 
-static bool maybe_finish_one(grpc_exec_ctx *exec_ctx, grpc_combiner *lock);
-static void finish(grpc_exec_ctx *exec_ctx, grpc_combiner *lock);
-
-static void continue_finishing_mainline(grpc_exec_ctx *exec_ctx, void *arg,
-                                        grpc_error *error) {
-  GPR_TIMER_BEGIN("combiner.continue_executing_mainline", 0);
-  grpc_combiner *lock = arg;
-  GRPC_COMBINER_TRACE(
-      gpr_log(GPR_DEBUG, "C:%p continue_finishing_mainline", lock));
-  GPR_ASSERT(exec_ctx->active_combiner == NULL);
-  exec_ctx->active_combiner = lock;
-  if (maybe_finish_one(exec_ctx, lock)) finish(exec_ctx, lock);
-  GPR_ASSERT(exec_ctx->active_combiner == lock);
-  exec_ctx->active_combiner = NULL;
-  GPR_TIMER_END("combiner.continue_executing_mainline", 0);
-}
-
-static void execute_final(grpc_exec_ctx *exec_ctx, grpc_combiner *lock) {
-  GPR_TIMER_BEGIN("combiner.execute_final", 0);
-  grpc_closure *c = lock->final_list.head;
-  GPR_ASSERT(c != NULL);
-  grpc_closure_list_init(&lock->final_list);
-  lock->take_async_break_before_final_list = false;
-  int loops = 0;
-  while (c != NULL) {
-    GRPC_COMBINER_TRACE(
-        gpr_log(GPR_DEBUG, "C:%p execute_final[%d] c=%p", lock, loops, c));
-    grpc_closure *next = c->next_data.next;
-    grpc_error *error = c->error;
-    c->cb(exec_ctx, c->cb_arg, error);
-    GRPC_ERROR_UNREF(error);
-    c = next;
-    loops++;
-  }
-  GPR_TIMER_END("combiner.execute_final", 0);
-}
-
-static void continue_executing_final(grpc_exec_ctx *exec_ctx, void *arg,
-                                     grpc_error *error) {
-  GPR_TIMER_BEGIN("combiner.continue_executing_final", 0);
-  grpc_combiner *lock = arg;
-  GRPC_COMBINER_TRACE(
-      gpr_log(GPR_DEBUG, "C:%p continue_executing_final", lock));
-  GPR_ASSERT(exec_ctx->active_combiner == NULL);
-  exec_ctx->active_combiner = lock;
-  // quick peek to see if new things have turned up on the queue: if so, go back
-  // to executing them before the final list
-  if ((gpr_atm_acq_load(&lock->state) >> 1) > 1) {
-    if (maybe_finish_one(exec_ctx, lock)) finish(exec_ctx, lock);
+static void push_last_on_exec_ctx(grpc_exec_ctx *exec_ctx,
+                                  grpc_combiner *lock) {
+  lock->next_combiner_on_this_exec_ctx = NULL;
+  if (exec_ctx->active_combiner == NULL) {
+    exec_ctx->active_combiner = exec_ctx->last_combiner = lock;
   } else {
-    execute_final(exec_ctx, lock);
-    finish(exec_ctx, lock);
-  }
-  GPR_ASSERT(exec_ctx->active_combiner == lock);
-  exec_ctx->active_combiner = NULL;
-  GPR_TIMER_END("combiner.continue_executing_final", 0);
-}
-
-static bool start_execute_final(grpc_exec_ctx *exec_ctx, grpc_combiner *lock) {
-  GPR_TIMER_BEGIN("combiner.start_execute_final", 0);
-  GPR_ASSERT(exec_ctx->active_combiner == lock);
-  GRPC_COMBINER_TRACE(
-      gpr_log(GPR_DEBUG,
-              "C:%p start_execute_final take_async_break_before_final_list=%d",
-              lock, lock->take_async_break_before_final_list));
-  if (lock->take_async_break_before_final_list) {
-    grpc_closure_init(&lock->continue_finishing, continue_executing_final,
-                      lock);
-    grpc_exec_ctx_sched(exec_ctx, &lock->continue_finishing, GRPC_ERROR_NONE,
-                        GRPC_WORKQUEUE_REF(lock->optional_workqueue, "sched"));
-    GPR_TIMER_END("combiner.start_execute_final", 0);
-    return false;
-  } else {
-    execute_final(exec_ctx, lock);
-    GPR_TIMER_END("combiner.start_execute_final", 0);
-    return true;
+    exec_ctx->last_combiner->next_combiner_on_this_exec_ctx = lock;
+    exec_ctx->last_combiner = lock;
   }
 }
 
-static bool maybe_finish_one(grpc_exec_ctx *exec_ctx, grpc_combiner *lock) {
-  GPR_TIMER_BEGIN("combiner.maybe_finish_one", 0);
-  gpr_mpscq_node *n = gpr_mpscq_pop(&lock->queue);
-  GRPC_COMBINER_TRACE(
-      gpr_log(GPR_DEBUG, "C:%p maybe_finish_one n=%p", lock, n));
-  GPR_ASSERT(exec_ctx->active_combiner == lock);
-  if (n == NULL) {
-    // Queue is in an transiently inconsistent state: a new item is being queued
-    // but is not visible to this thread yet.
-    // Use this as a cue that we should go off and do something else for a while
-    // (and come back later)
-    grpc_closure_init(&lock->continue_finishing, continue_finishing_mainline,
-                      lock);
-    grpc_exec_ctx_sched(exec_ctx, &lock->continue_finishing, GRPC_ERROR_NONE,
-                        GRPC_WORKQUEUE_REF(lock->optional_workqueue, "sched"));
-    GPR_TIMER_END("combiner.maybe_finish_one", 0);
-    return false;
+static void push_first_on_exec_ctx(grpc_exec_ctx *exec_ctx,
+                                   grpc_combiner *lock) {
+  lock->next_combiner_on_this_exec_ctx = exec_ctx->active_combiner;
+  exec_ctx->active_combiner = lock;
+  if (lock->next_combiner_on_this_exec_ctx == NULL) {
+    exec_ctx->last_combiner = lock;
   }
-  grpc_closure *cl = (grpc_closure *)n;
-  grpc_error *error = cl->error;
-  cl->cb(exec_ctx, cl->cb_arg, error);
-  GRPC_ERROR_UNREF(error);
-  GPR_TIMER_END("combiner.maybe_finish_one", 0);
-  return true;
-}
-
-static void finish(grpc_exec_ctx *exec_ctx, grpc_combiner *lock) {
-  bool (*executor)(grpc_exec_ctx * exec_ctx, grpc_combiner * lock);
-  GPR_TIMER_BEGIN("combiner.finish", 0);
-  int loops = 0;
-  do {
-    executor = maybe_finish_one;
-    gpr_atm old_state = gpr_atm_full_fetch_add(&lock->state, -2);
-    GRPC_COMBINER_TRACE(gpr_log(GPR_DEBUG,
-                                "C:%p finish[%d] old_state=%" PRIdPTR, lock,
-                                loops, old_state));
-    switch (old_state) {
-      default:
-        // we have multiple queued work items: just continue executing them
-        break;
-      case 5:  // we're down to one queued item: if it's the final list we
-      case 4:  // should do that
-        if (!grpc_closure_list_empty(lock->final_list)) {
-          executor = start_execute_final;
-        }
-        break;
-      case 3:  // had one count, one unorphaned --> unlocked unorphaned
-        GPR_TIMER_END("combiner.finish", 0);
-        return;
-      case 2:  // and one count, one orphaned --> unlocked and orphaned
-        really_destroy(exec_ctx, lock);
-        GPR_TIMER_END("combiner.finish", 0);
-        return;
-      case 1:
-      case 0:
-        // these values are illegal - representing an already unlocked or
-        // deleted lock
-        GPR_UNREACHABLE_CODE(return );
-    }
-    loops++;
-  } while (executor(exec_ctx, lock));
-  GPR_TIMER_END("combiner.finish", 0);
 }
 
 void grpc_combiner_execute(grpc_exec_ctx *exec_ctx, grpc_combiner *lock,
-                           grpc_closure *cl, grpc_error *error) {
-  GRPC_COMBINER_TRACE(
-      gpr_log(GPR_DEBUG, "C:%p grpc_combiner_execute c=%p", lock, cl));
+                           grpc_closure *cl, grpc_error *error,
+                           bool covered_by_poller) {
   GPR_TIMER_BEGIN("combiner.execute", 0);
-  gpr_atm last = gpr_atm_full_fetch_add(&lock->state, 2);
-  GPR_ASSERT(last & 1);  // ensure lock has not been destroyed
+  gpr_atm last = gpr_atm_full_fetch_add(&lock->state, STATE_ELEM_COUNT_LOW_BIT);
+  GRPC_COMBINER_TRACE(gpr_log(
+      GPR_DEBUG, "C:%p grpc_combiner_execute c=%p cov=%d last=%" PRIdPTR, lock,
+      cl, covered_by_poller, last));
+  GPR_ASSERT(last & STATE_UNORPHANED);  // ensure lock has not been destroyed
+  cl->error_data.scratch =
+      pack_error_data((error_data){error, covered_by_poller});
+  if (covered_by_poller) {
+    gpr_atm_no_barrier_fetch_add(&lock->elements_covered_by_poller, 1);
+  }
+  gpr_mpscq_push(&lock->queue, &cl->next_data.atm_next);
   if (last == 1) {
-    exec_ctx->active_combiner = lock;
-    GPR_TIMER_BEGIN("combiner.execute_first_cb", 0);
-    cl->cb(exec_ctx, cl->cb_arg, error);
-    GPR_TIMER_END("combiner.execute_first_cb", 0);
-    GRPC_ERROR_UNREF(error);
-    finish(exec_ctx, lock);
-    GPR_ASSERT(exec_ctx->active_combiner == lock);
-    exec_ctx->active_combiner = NULL;
-  } else {
-    cl->error = error;
-    gpr_mpscq_push(&lock->queue, &cl->next_data.atm_next);
+    // first element on this list: add it to the list of combiner locks
+    // executing within this exec_ctx
+    push_last_on_exec_ctx(exec_ctx, lock);
   }
   GPR_TIMER_END("combiner.execute", 0);
 }
 
+static void move_next(grpc_exec_ctx *exec_ctx) {
+  exec_ctx->active_combiner =
+      exec_ctx->active_combiner->next_combiner_on_this_exec_ctx;
+  if (exec_ctx->active_combiner == NULL) {
+    exec_ctx->last_combiner = NULL;
+  }
+}
+
+static void offload(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) {
+  grpc_combiner *lock = arg;
+  push_last_on_exec_ctx(exec_ctx, lock);
+}
+
+static void queue_offload(grpc_exec_ctx *exec_ctx, grpc_combiner *lock) {
+  move_next(exec_ctx);
+  GRPC_COMBINER_TRACE(gpr_log(GPR_DEBUG, "C:%p queue_offload --> %p", lock,
+                              lock->optional_workqueue));
+  grpc_workqueue_enqueue(exec_ctx, lock->optional_workqueue, &lock->offload,
+                         GRPC_ERROR_NONE);
+}
+
+bool grpc_combiner_continue_exec_ctx(grpc_exec_ctx *exec_ctx) {
+  GPR_TIMER_BEGIN("combiner.continue_exec_ctx", 0);
+  grpc_combiner *lock = exec_ctx->active_combiner;
+  if (lock == NULL) {
+    GPR_TIMER_END("combiner.continue_exec_ctx", 0);
+    return false;
+  }
+
+  GRPC_COMBINER_TRACE(
+      gpr_log(GPR_DEBUG,
+              "C:%p grpc_combiner_continue_exec_ctx workqueue=%p "
+              "is_covered_by_poller=%d exec_ctx_ready_to_finish=%d "
+              "time_to_execute_final_list=%d",
+              lock, lock->optional_workqueue, is_covered_by_poller(lock),
+              grpc_exec_ctx_ready_to_finish(exec_ctx),
+              lock->time_to_execute_final_list));
+
+  if (lock->optional_workqueue != NULL && is_covered_by_poller(lock) &&
+      grpc_exec_ctx_ready_to_finish(exec_ctx)) {
+    GPR_TIMER_MARK("offload_from_finished_exec_ctx", 0);
+    // this execution context wants to move on, and we have a workqueue (and
+    // so can help the execution context out): schedule remaining work to be
+    // picked up on the workqueue
+    queue_offload(exec_ctx, lock);
+    GPR_TIMER_END("combiner.continue_exec_ctx", 0);
+    return true;
+  }
+
+  if (!lock->time_to_execute_final_list ||
+      // peek to see if something new has shown up, and execute that with
+      // priority
+      (gpr_atm_acq_load(&lock->state) >> 1) > 1) {
+    gpr_mpscq_node *n = gpr_mpscq_pop(&lock->queue);
+    GRPC_COMBINER_TRACE(
+        gpr_log(GPR_DEBUG, "C:%p maybe_finish_one n=%p", lock, n));
+    if (n == NULL) {
+      // queue is in an inconsistent state: use this as a cue that we should
+      // go off and do something else for a while (and come back later)
+      GPR_TIMER_MARK("delay_busy", 0);
+      if (lock->optional_workqueue != NULL && is_covered_by_poller(lock)) {
+        queue_offload(exec_ctx, lock);
+      }
+      GPR_TIMER_END("combiner.continue_exec_ctx", 0);
+      return true;
+    }
+    GPR_TIMER_BEGIN("combiner.exec1", 0);
+    grpc_closure *cl = (grpc_closure *)n;
+    error_data err = unpack_error_data(cl->error_data.scratch);
+    cl->cb(exec_ctx, cl->cb_arg, err.error);
+    if (err.covered_by_poller) {
+      gpr_atm_no_barrier_fetch_add(&lock->elements_covered_by_poller, -1);
+    }
+    GRPC_ERROR_UNREF(err.error);
+    GPR_TIMER_END("combiner.exec1", 0);
+  } else {
+    grpc_closure *c = lock->final_list.head;
+    GPR_ASSERT(c != NULL);
+    grpc_closure_list_init(&lock->final_list);
+    lock->final_list_covered_by_poller = false;
+    int loops = 0;
+    while (c != NULL) {
+      GPR_TIMER_BEGIN("combiner.exec_1final", 0);
+      GRPC_COMBINER_TRACE(
+          gpr_log(GPR_DEBUG, "C:%p execute_final[%d] c=%p", lock, loops, c));
+      grpc_closure *next = c->next_data.next;
+      grpc_error *error = c->error_data.error;
+      c->cb(exec_ctx, c->cb_arg, error);
+      GRPC_ERROR_UNREF(error);
+      c = next;
+      GPR_TIMER_END("combiner.exec_1final", 0);
+    }
+  }
+
+  GPR_TIMER_MARK("unref", 0);
+  move_next(exec_ctx);
+  lock->time_to_execute_final_list = false;
+  gpr_atm old_state =
+      gpr_atm_full_fetch_add(&lock->state, -STATE_ELEM_COUNT_LOW_BIT);
+  GRPC_COMBINER_TRACE(
+      gpr_log(GPR_DEBUG, "C:%p finish old_state=%" PRIdPTR, lock, old_state));
+// Define a macro to ease readability of the following switch statement.
+#define OLD_STATE_WAS(orphaned, elem_count) \
+  (((orphaned) ? 0 : STATE_UNORPHANED) |    \
+   ((elem_count)*STATE_ELEM_COUNT_LOW_BIT))
+  // Depending on what the previous state was, we need to perform different
+  // actions.
+  switch (old_state) {
+    default:
+      // we have multiple queued work items: just continue executing them
+      break;
+    case OLD_STATE_WAS(false, 2):
+    case OLD_STATE_WAS(true, 2):
+      // we're down to one queued item: if it's the final list we should do that
+      if (!grpc_closure_list_empty(lock->final_list)) {
+        lock->time_to_execute_final_list = true;
+      }
+      break;
+    case OLD_STATE_WAS(false, 1):
+      // had one count, one unorphaned --> unlocked unorphaned
+      GPR_TIMER_END("combiner.continue_exec_ctx", 0);
+      return true;
+    case OLD_STATE_WAS(true, 1):
+      // and one count, one orphaned --> unlocked and orphaned
+      really_destroy(exec_ctx, lock);
+      GPR_TIMER_END("combiner.continue_exec_ctx", 0);
+      return true;
+    case OLD_STATE_WAS(false, 0):
+    case OLD_STATE_WAS(true, 0):
+      // these values are illegal - representing an already unlocked or
+      // deleted lock
+      GPR_TIMER_END("combiner.continue_exec_ctx", 0);
+      GPR_UNREACHABLE_CODE(return true);
+  }
+  push_first_on_exec_ctx(exec_ctx, lock);
+  GPR_TIMER_END("combiner.continue_exec_ctx", 0);
+  return true;
+}
+
 static void enqueue_finally(grpc_exec_ctx *exec_ctx, void *closure,
                             grpc_error *error) {
   grpc_combiner_execute_finally(exec_ctx, exec_ctx->active_combiner, closure,
@@ -264,30 +312,26 @@
 
 void grpc_combiner_execute_finally(grpc_exec_ctx *exec_ctx, grpc_combiner *lock,
                                    grpc_closure *closure, grpc_error *error,
-                                   bool force_async_break) {
+                                   bool covered_by_poller) {
   GRPC_COMBINER_TRACE(gpr_log(
-      GPR_DEBUG,
-      "C:%p grpc_combiner_execute_finally c=%p force_async_break=%d; ac=%p",
-      lock, closure, force_async_break, exec_ctx->active_combiner));
+      GPR_DEBUG, "C:%p grpc_combiner_execute_finally c=%p; ac=%p; cov=%d", lock,
+      closure, exec_ctx->active_combiner, covered_by_poller));
   GPR_TIMER_BEGIN("combiner.execute_finally", 0);
   if (exec_ctx->active_combiner != lock) {
     GPR_TIMER_MARK("slowpath", 0);
     grpc_combiner_execute(exec_ctx, lock,
-                          grpc_closure_create(enqueue_finally, closure), error);
+                          grpc_closure_create(enqueue_finally, closure), error,
+                          false);
     GPR_TIMER_END("combiner.execute_finally", 0);
     return;
   }
 
-  if (force_async_break) {
-    lock->take_async_break_before_final_list = true;
-  }
   if (grpc_closure_list_empty(lock->final_list)) {
-    gpr_atm_full_fetch_add(&lock->state, 2);
+    gpr_atm_full_fetch_add(&lock->state, STATE_ELEM_COUNT_LOW_BIT);
+  }
+  if (covered_by_poller) {
+    lock->final_list_covered_by_poller = true;
   }
   grpc_closure_list_append(&lock->final_list, closure, error);
   GPR_TIMER_END("combiner.execute_finally", 0);
 }
-
-void grpc_combiner_force_async_finally(grpc_combiner *lock) {
-  lock->take_async_break_before_final_list = true;
-}
diff --git a/src/core/lib/iomgr/combiner.h b/src/core/lib/iomgr/combiner.h
index 1409db2..d04eeed 100644
--- a/src/core/lib/iomgr/combiner.h
+++ b/src/core/lib/iomgr/combiner.h
@@ -52,19 +52,14 @@
 void grpc_combiner_destroy(grpc_exec_ctx *exec_ctx, grpc_combiner *lock);
 // Execute \a action within the lock.
 void grpc_combiner_execute(grpc_exec_ctx *exec_ctx, grpc_combiner *lock,
-                           grpc_closure *closure, grpc_error *error);
+                           grpc_closure *closure, grpc_error *error,
+                           bool covered_by_poller);
 // Execute \a action within the lock just prior to unlocking.
-// if \a hint_async_break is true, the combiner tries to hand execution to
-// another thread before finishing the primary queue of combined closures and
-// executing the finally list.
-// Deprecation warning: \a hint_async_break will be removed in a future version
-// Takes a very slow and round-about path if not called from a
-// grpc_combiner_execute closure.
 void grpc_combiner_execute_finally(grpc_exec_ctx *exec_ctx, grpc_combiner *lock,
                                    grpc_closure *closure, grpc_error *error,
-                                   bool hint_async_break);
-// Deprecated: force the finally list execution onto another thread
-void grpc_combiner_force_async_finally(grpc_combiner *lock);
+                                   bool covered_by_poller);
+
+bool grpc_combiner_continue_exec_ctx(grpc_exec_ctx *exec_ctx);
 
 extern int grpc_combiner_trace;
 
diff --git a/src/core/lib/iomgr/endpoint_pair_posix.c b/src/core/lib/iomgr/endpoint_pair_posix.c
index e295fb4..ec2cd78 100644
--- a/src/core/lib/iomgr/endpoint_pair_posix.c
+++ b/src/core/lib/iomgr/endpoint_pair_posix.c
@@ -31,9 +31,9 @@
  *
  */
 
-#include <grpc/support/port_platform.h>
+#include "src/core/lib/iomgr/port.h"
 
-#ifdef GPR_POSIX_SOCKET
+#ifdef GRPC_POSIX_SOCKET
 
 #include "src/core/lib/iomgr/endpoint_pair.h"
 #include "src/core/lib/iomgr/socket_utils_posix.h"
diff --git a/test/core/client_config/uri_fuzzer_test.c b/src/core/lib/iomgr/endpoint_pair_uv.c
similarity index 72%
copy from test/core/client_config/uri_fuzzer_test.c
copy to src/core/lib/iomgr/endpoint_pair_uv.c
index f297140..7941e20 100644
--- a/test/core/client_config/uri_fuzzer_test.c
+++ b/src/core/lib/iomgr/endpoint_pair_uv.c
@@ -1,6 +1,6 @@
 /*
  *
- * Copyright 2015, Google Inc.
+ * Copyright 2016, Google Inc.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -31,26 +31,23 @@
  *
  */
 
-#include <stdbool.h>
-#include <stdint.h>
-#include <string.h>
+#include "src/core/lib/iomgr/port.h"
 
-#include <grpc/support/alloc.h>
+#ifdef GRPC_UV
 
-#include "src/core/ext/client_config/uri_parser.h"
+#include <stdlib.h>
 
-bool squelch = true;
-bool leak_check = true;
+#include <grpc/support/log.h>
 
-int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
-  char *s = gpr_malloc(size + 1);
-  memcpy(s, data, size);
-  s[size] = 0;
+#include "src/core/lib/iomgr/endpoint_pair.h"
 
-  grpc_uri *x;
-  if ((x = grpc_uri_parse(s, 1))) {
-    grpc_uri_destroy(x);
-  }
-  gpr_free(s);
-  return 0;
+grpc_endpoint_pair grpc_iomgr_create_endpoint_pair(const char *name,
+                                                   size_t read_slice_size) {
+  grpc_endpoint_pair endpoint_pair;
+  // TODO(mlumish): implement this properly under libuv
+  GPR_ASSERT(false &&
+             "grpc_iomgr_create_endpoint_pair is not suppoted with libuv");
+  return endpoint_pair;
 }
+
+#endif /* GRPC_UV */
diff --git a/src/core/lib/iomgr/endpoint_pair_windows.c b/src/core/lib/iomgr/endpoint_pair_windows.c
index 582704e..5c78c95 100644
--- a/src/core/lib/iomgr/endpoint_pair_windows.c
+++ b/src/core/lib/iomgr/endpoint_pair_windows.c
@@ -31,9 +31,9 @@
  *
  */
 
-#include <grpc/support/port_platform.h>
+#include "src/core/lib/iomgr/port.h"
 
-#ifdef GPR_WINSOCK_SOCKET
+#ifdef GRPC_WINSOCK_SOCKET
 #include "src/core/lib/iomgr/endpoint_pair.h"
 #include "src/core/lib/iomgr/sockaddr_utils.h"
 
diff --git a/src/core/lib/iomgr/error.c b/src/core/lib/iomgr/error.c
index 31c8026..f6bb3a0 100644
--- a/src/core/lib/iomgr/error.c
+++ b/src/core/lib/iomgr/error.c
@@ -120,6 +120,8 @@
       return "http_status";
     case GRPC_ERROR_INT_LIMIT:
       return "limit";
+    case GRPC_ERROR_INT_OCCURRED_DURING_WRITE:
+      return "occurred_during_write";
   }
   GPR_UNREACHABLE_CODE(return "unknown");
 }
@@ -144,6 +146,8 @@
       return "tsi_error";
     case GRPC_ERROR_STR_FILENAME:
       return "filename";
+    case GRPC_ERROR_STR_QUEUED_BUFFERS:
+      return "queued_buffers";
   }
   GPR_UNREACHABLE_CODE(return "unknown");
 }
@@ -265,7 +269,7 @@
   } else {
     out = gpr_malloc(sizeof(*out));
 #ifdef GRPC_ERROR_REFCOUNT_DEBUG
-    gpr_log(GPR_DEBUG, "%p create copying", out);
+    gpr_log(GPR_DEBUG, "%p create copying %p", out, in);
 #endif
     out->ints = gpr_avl_ref(in->ints);
     out->strs = gpr_avl_ref(in->strs);
@@ -523,21 +527,25 @@
   return out;
 }
 
-static void add_errs(gpr_avl_node *n, char **s, size_t *sz, size_t *cap) {
+static void add_errs(gpr_avl_node *n, char **s, size_t *sz, size_t *cap,
+                     bool *first) {
   if (n == NULL) return;
-  add_errs(n->left, s, sz, cap);
+  add_errs(n->left, s, sz, cap, first);
+  if (!*first) append_chr(',', s, sz, cap);
+  *first = false;
   const char *e = grpc_error_string(n->value);
   append_str(e, s, sz, cap);
   grpc_error_free_string(e);
-  add_errs(n->right, s, sz, cap);
+  add_errs(n->right, s, sz, cap, first);
 }
 
 static char *errs_string(grpc_error *err) {
   char *s = NULL;
   size_t sz = 0;
   size_t cap = 0;
+  bool first = true;
   append_chr('[', &s, &sz, &cap);
-  add_errs(err->errs.root, &s, &sz, &cap);
+  add_errs(err->errs.root, &s, &sz, &cap, &first);
   append_chr(']', &s, &sz, &cap);
   append_chr(0, &s, &sz, &cap);
   return s;
diff --git a/src/core/lib/iomgr/error.h b/src/core/lib/iomgr/error.h
index 00ace8a..f3f3b80 100644
--- a/src/core/lib/iomgr/error.h
+++ b/src/core/lib/iomgr/error.h
@@ -100,6 +100,8 @@
   GRPC_ERROR_INT_HTTP_STATUS,
   /// context sensitive limit associated with the error
   GRPC_ERROR_INT_LIMIT,
+  /// chttp2: did the error occur while a write was in progress
+  GRPC_ERROR_INT_OCCURRED_DURING_WRITE,
 } grpc_error_ints;
 
 typedef enum {
@@ -121,6 +123,8 @@
   GRPC_ERROR_STR_TSI_ERROR,
   /// filename that we were trying to read/write when this error occurred
   GRPC_ERROR_STR_FILENAME,
+  /// which data was queued for writing when the error occurred
+  GRPC_ERROR_STR_QUEUED_BUFFERS
 } grpc_error_strs;
 
 typedef enum {
@@ -128,9 +132,13 @@
   GRPC_ERROR_TIME_CREATED,
 } grpc_error_times;
 
+/// The following "special" errors can be propagated without allocating memory.
+/// They are always even so that other code (particularly combiner locks) can
+/// safely use the lower bit for themselves.
+
 #define GRPC_ERROR_NONE ((grpc_error *)NULL)
-#define GRPC_ERROR_OOM ((grpc_error *)1)
-#define GRPC_ERROR_CANCELLED ((grpc_error *)2)
+#define GRPC_ERROR_OOM ((grpc_error *)2)
+#define GRPC_ERROR_CANCELLED ((grpc_error *)4)
 
 const char *grpc_error_string(grpc_error *error);
 void grpc_error_free_string(const char *str);
diff --git a/src/core/lib/iomgr/ev_epoll_linux.c b/src/core/lib/iomgr/ev_epoll_linux.c
index ab77ebc..8381f4a 100644
--- a/src/core/lib/iomgr/ev_epoll_linux.c
+++ b/src/core/lib/iomgr/ev_epoll_linux.c
@@ -32,10 +32,10 @@
  */
 
 #include <grpc/grpc_posix.h>
-#include <grpc/support/port_platform.h>
+#include "src/core/lib/iomgr/port.h"
 
 /* This polling engine is only relevant on linux kernels supporting epoll() */
-#ifdef GPR_LINUX_EPOLL
+#ifdef GRPC_LINUX_EPOLL
 
 #include "src/core/lib/iomgr/ev_epoll_linux.h"
 
@@ -152,20 +152,20 @@
  * Polling island Declarations
  */
 
-//#define GRPC_PI_REF_COUNT_DEBUG
-#ifdef GRPC_PI_REF_COUNT_DEBUG
+#ifdef GRPC_WORKQUEUE_REFCOUNT_DEBUG
 
 #define PI_ADD_REF(p, r) pi_add_ref_dbg((p), (r), __FILE__, __LINE__)
 #define PI_UNREF(exec_ctx, p, r) \
   pi_unref_dbg((exec_ctx), (p), (r), __FILE__, __LINE__)
 
-#else /* defined(GRPC_PI_REF_COUNT_DEBUG) */
+#else /* defined(GRPC_WORKQUEUE_REFCOUNT_DEBUG) */
 
 #define PI_ADD_REF(p, r) pi_add_ref((p))
 #define PI_UNREF(exec_ctx, p, r) pi_unref((exec_ctx), (p))
 
 #endif /* !defined(GPRC_PI_REF_COUNT_DEBUG) */
 
+/* This is also used as grpc_workqueue (by directly casing it) */
 typedef struct polling_island {
   gpr_mu mu;
   /* Ref count. Use PI_ADD_REF() and PI_UNREF() macros to increment/decrement
@@ -185,8 +185,17 @@
    * (except mu and ref_count) are invalid and must be ignored. */
   gpr_atm merged_to;
 
-  /* The workqueue associated with this polling island */
-  grpc_workqueue *workqueue;
+  /* Number of threads currently polling on this island */
+  gpr_atm poller_count;
+  /* Mutex guarding the read end of the workqueue (must be held to pop from
+   * workqueue_items) */
+  gpr_mu workqueue_read_mu;
+  /* Queue of closures to be executed */
+  gpr_mpscq workqueue_items;
+  /* Count of items in workqueue_items */
+  gpr_atm workqueue_item_count;
+  /* Wakeup fd used to wake pollers to check the contents of workqueue_items */
+  grpc_wakeup_fd workqueue_wakeup_fd;
 
   /* The fd of the underlying epoll set */
   int epoll_fd;
@@ -275,6 +284,10 @@
    threads that woke up MUST NOT call grpc_wakeup_fd_consume_wakeup() */
 static grpc_wakeup_fd polling_island_wakeup_fd;
 
+/* The polling island being polled right now.
+   See comments in workqueue_maybe_wakeup for why this is tracked. */
+static __thread polling_island *g_current_thread_polling_island;
+
 /* Forward declaration */
 static void polling_island_delete(grpc_exec_ctx *exec_ctx, polling_island *pi);
 
@@ -289,12 +302,12 @@
 gpr_atm g_epoll_sync;
 #endif /* defined(GRPC_TSAN) */
 
-#ifdef GRPC_PI_REF_COUNT_DEBUG
 static void pi_add_ref(polling_island *pi);
 static void pi_unref(grpc_exec_ctx *exec_ctx, polling_island *pi);
 
-static void pi_add_ref_dbg(polling_island *pi, char *reason, char *file,
-                           int line) {
+#ifdef GRPC_WORKQUEUE_REFCOUNT_DEBUG
+static void pi_add_ref_dbg(polling_island *pi, const char *reason,
+                           const char *file, int line) {
   long old_cnt = gpr_atm_acq_load(&pi->ref_count);
   pi_add_ref(pi);
   gpr_log(GPR_DEBUG, "Add ref pi: %p, old: %ld -> new:%ld (%s) - (%s, %d)",
@@ -302,12 +315,42 @@
 }
 
 static void pi_unref_dbg(grpc_exec_ctx *exec_ctx, polling_island *pi,
-                         char *reason, char *file, int line) {
+                         const char *reason, const char *file, int line) {
   long old_cnt = gpr_atm_acq_load(&pi->ref_count);
   pi_unref(exec_ctx, pi);
   gpr_log(GPR_DEBUG, "Unref pi: %p, old:%ld -> new:%ld (%s) - (%s, %d)",
           (void *)pi, old_cnt, (old_cnt - 1), reason, file, line);
 }
+
+static grpc_workqueue *workqueue_ref(grpc_workqueue *workqueue,
+                                     const char *file, int line,
+                                     const char *reason) {
+  if (workqueue != NULL) {
+    pi_add_ref_dbg((polling_island *)workqueue, reason, file, line);
+  }
+  return workqueue;
+}
+
+static void workqueue_unref(grpc_exec_ctx *exec_ctx, grpc_workqueue *workqueue,
+                            const char *file, int line, const char *reason) {
+  if (workqueue != NULL) {
+    pi_unref_dbg(exec_ctx, (polling_island *)workqueue, reason, file, line);
+  }
+}
+#else
+static grpc_workqueue *workqueue_ref(grpc_workqueue *workqueue) {
+  if (workqueue != NULL) {
+    pi_add_ref((polling_island *)workqueue);
+  }
+  return workqueue;
+}
+
+static void workqueue_unref(grpc_exec_ctx *exec_ctx,
+                            grpc_workqueue *workqueue) {
+  if (workqueue != NULL) {
+    pi_unref(exec_ctx, (polling_island *)workqueue);
+  }
+}
 #endif
 
 static void pi_add_ref(polling_island *pi) {
@@ -315,10 +358,7 @@
 }
 
 static void pi_unref(grpc_exec_ctx *exec_ctx, polling_island *pi) {
-  /* If ref count went to one, we're back to just the workqueue owning a ref.
-     Unref the workqueue to break the loop.
-
-     If ref count went to zero, delete the polling island.
+  /* If ref count went to zero, delete the polling island.
      Note that this deletion not be done under a lock. Once the ref count goes
      to zero, we are guaranteed that no one else holds a reference to the
      polling island (and that there is no racing pi_add_ref() call either).
@@ -326,20 +366,12 @@
      Also, if we are deleting the polling island and the merged_to field is
      non-empty, we should remove a ref to the merged_to polling island
    */
-  switch (gpr_atm_full_fetch_add(&pi->ref_count, -1)) {
-    case 2: /* last external ref: the only one now owned is by the workqueue */
-      GRPC_WORKQUEUE_UNREF(exec_ctx, pi->workqueue, "polling_island");
-      break;
-    case 1: {
-      polling_island *next = (polling_island *)gpr_atm_acq_load(&pi->merged_to);
-      polling_island_delete(exec_ctx, pi);
-      if (next != NULL) {
-        PI_UNREF(exec_ctx, next, "pi_delete"); /* Recursive call */
-      }
-      break;
+  if (1 == gpr_atm_full_fetch_add(&pi->ref_count, -1)) {
+    polling_island *next = (polling_island *)gpr_atm_acq_load(&pi->merged_to);
+    polling_island_delete(exec_ctx, pi);
+    if (next != NULL) {
+      PI_UNREF(exec_ctx, next, "pi_delete"); /* Recursive call */
     }
-    case 0:
-      GPR_UNREACHABLE_CODE(return );
   }
 }
 
@@ -488,11 +520,20 @@
   pi->fd_capacity = 0;
   pi->fds = NULL;
   pi->epoll_fd = -1;
-  pi->workqueue = NULL;
+
+  gpr_mu_init(&pi->workqueue_read_mu);
+  gpr_mpscq_init(&pi->workqueue_items);
+  gpr_atm_rel_store(&pi->workqueue_item_count, 0);
 
   gpr_atm_rel_store(&pi->ref_count, 0);
+  gpr_atm_rel_store(&pi->poller_count, 0);
   gpr_atm_rel_store(&pi->merged_to, (gpr_atm)NULL);
 
+  if (!append_error(error, grpc_wakeup_fd_init(&pi->workqueue_wakeup_fd),
+                    err_desc)) {
+    goto done;
+  }
+
   pi->epoll_fd = epoll_create1(EPOLL_CLOEXEC);
 
   if (pi->epoll_fd < 0) {
@@ -501,26 +542,14 @@
   }
 
   polling_island_add_wakeup_fd_locked(pi, &grpc_global_wakeup_fd, error);
+  polling_island_add_wakeup_fd_locked(pi, &pi->workqueue_wakeup_fd, error);
 
   if (initial_fd != NULL) {
     polling_island_add_fds_locked(pi, &initial_fd, 1, true, error);
   }
 
-  if (append_error(error, grpc_workqueue_create(exec_ctx, &pi->workqueue),
-                   err_desc) &&
-      *error == GRPC_ERROR_NONE) {
-    polling_island_add_fds_locked(pi, &pi->workqueue->wakeup_read_fd, 1, true,
-                                  error);
-    GPR_ASSERT(pi->workqueue->wakeup_read_fd->polling_island == NULL);
-    pi->workqueue->wakeup_read_fd->polling_island = pi;
-    PI_ADD_REF(pi, "fd");
-  }
-
 done:
   if (*error != GRPC_ERROR_NONE) {
-    if (pi->workqueue != NULL) {
-      GRPC_WORKQUEUE_UNREF(exec_ctx, pi->workqueue, "polling_island");
-    }
     polling_island_delete(exec_ctx, pi);
     pi = NULL;
   }
@@ -533,7 +562,11 @@
   if (pi->epoll_fd >= 0) {
     close(pi->epoll_fd);
   }
+  GPR_ASSERT(gpr_atm_no_barrier_load(&pi->workqueue_item_count) == 0);
+  gpr_mu_destroy(&pi->workqueue_read_mu);
+  gpr_mpscq_destroy(&pi->workqueue_items);
   gpr_mu_destroy(&pi->mu);
+  grpc_wakeup_fd_destroy(&pi->workqueue_wakeup_fd);
   gpr_free(pi->fds);
   gpr_free(pi);
 }
@@ -678,6 +711,45 @@
   }
 }
 
+static void workqueue_maybe_wakeup(polling_island *pi) {
+  /* If this thread is the current poller, then it may be that it's about to
+     decrement the current poller count, so we need to look past this thread */
+  bool is_current_poller = (g_current_thread_polling_island == pi);
+  gpr_atm min_current_pollers_for_wakeup = is_current_poller ? 1 : 0;
+  gpr_atm current_pollers = gpr_atm_no_barrier_load(&pi->poller_count);
+  /* Only issue a wakeup if it's likely that some poller could come in and take
+     it right now. Note that since we do an anticipatory mpscq_pop every poll
+     loop, it's ok if we miss the wakeup here, as we'll get the work item when
+     the next poller enters anyway. */
+  if (current_pollers > min_current_pollers_for_wakeup) {
+    GRPC_LOG_IF_ERROR("workqueue_wakeup_fd",
+                      grpc_wakeup_fd_wakeup(&pi->workqueue_wakeup_fd));
+  }
+}
+
+static void workqueue_move_items_to_parent(polling_island *q) {
+  polling_island *p = (polling_island *)gpr_atm_no_barrier_load(&q->merged_to);
+  if (p == NULL) {
+    return;
+  }
+  gpr_mu_lock(&q->workqueue_read_mu);
+  int num_added = 0;
+  while (gpr_atm_no_barrier_load(&q->workqueue_item_count) > 0) {
+    gpr_mpscq_node *n = gpr_mpscq_pop(&q->workqueue_items);
+    if (n != NULL) {
+      gpr_atm_no_barrier_fetch_add(&q->workqueue_item_count, -1);
+      gpr_atm_no_barrier_fetch_add(&p->workqueue_item_count, 1);
+      gpr_mpscq_push(&p->workqueue_items, n);
+      num_added++;
+    }
+  }
+  gpr_mu_unlock(&q->workqueue_read_mu);
+  if (num_added > 0) {
+    workqueue_maybe_wakeup(p);
+  }
+  workqueue_move_items_to_parent(p);
+}
+
 static polling_island *polling_island_merge(polling_island *p,
                                             polling_island *q,
                                             grpc_error **error) {
@@ -702,6 +774,8 @@
     /* Add the 'merged_to' link from p --> q */
     gpr_atm_rel_store(&p->merged_to, (gpr_atm)q);
     PI_ADD_REF(q, "pi_merge"); /* To account for the new incoming ref from p */
+
+    workqueue_move_items_to_parent(q);
   }
   /* else if p == q, nothing needs to be done */
 
@@ -712,6 +786,26 @@
   return q;
 }
 
+static void workqueue_enqueue(grpc_exec_ctx *exec_ctx,
+                              grpc_workqueue *workqueue, grpc_closure *closure,
+                              grpc_error *error) {
+  GPR_TIMER_BEGIN("workqueue.enqueue", 0);
+  /* take a ref to the workqueue: otherwise it can happen that whatever events
+   * this kicks off ends up destroying the workqueue before this function
+   * completes */
+  GRPC_WORKQUEUE_REF(workqueue, "enqueue");
+  polling_island *pi = (polling_island *)workqueue;
+  gpr_atm last = gpr_atm_no_barrier_fetch_add(&pi->workqueue_item_count, 1);
+  closure->error_data.error = error;
+  gpr_mpscq_push(&pi->workqueue_items, &closure->next_data.atm_next);
+  if (last == 0) {
+    workqueue_maybe_wakeup(pi);
+  }
+  workqueue_move_items_to_parent(pi);
+  GRPC_WORKQUEUE_UNREF(exec_ctx, workqueue, "enqueue");
+  GPR_TIMER_END("workqueue.enqueue", 0);
+}
+
 static grpc_error *polling_island_global_init() {
   grpc_error *error = GRPC_ERROR_NONE;
 
@@ -1042,11 +1136,8 @@
 
 static grpc_workqueue *fd_get_workqueue(grpc_fd *fd) {
   gpr_mu_lock(&fd->mu);
-  grpc_workqueue *workqueue = NULL;
-  if (fd->polling_island != NULL) {
-    workqueue =
-        GRPC_WORKQUEUE_REF(fd->polling_island->workqueue, "get_workqueue");
-  }
+  grpc_workqueue *workqueue = GRPC_WORKQUEUE_REF(
+      (grpc_workqueue *)fd->polling_island, "fd_get_workqueue");
   gpr_mu_unlock(&fd->mu);
   return workqueue;
 }
@@ -1299,7 +1390,29 @@
   GPR_ASSERT(pollset->polling_island == NULL);
 }
 
-#define GRPC_EPOLL_MAX_EVENTS 1000
+static bool maybe_do_workqueue_work(grpc_exec_ctx *exec_ctx,
+                                    polling_island *pi) {
+  if (gpr_mu_trylock(&pi->workqueue_read_mu)) {
+    gpr_mpscq_node *n = gpr_mpscq_pop(&pi->workqueue_items);
+    gpr_mu_unlock(&pi->workqueue_read_mu);
+    if (n != NULL) {
+      if (gpr_atm_full_fetch_add(&pi->workqueue_item_count, -1) > 1) {
+        workqueue_maybe_wakeup(pi);
+      }
+      grpc_closure *c = (grpc_closure *)n;
+      grpc_closure_run(exec_ctx, c, c->error_data.error);
+      return true;
+    } else if (gpr_atm_no_barrier_load(&pi->workqueue_item_count) > 0) {
+      /* n == NULL might mean there's work but it's not available to be popped
+       * yet - try to ensure another workqueue wakes up to check shortly if so
+       */
+      workqueue_maybe_wakeup(pi);
+    }
+  }
+  return false;
+}
+
+#define GRPC_EPOLL_MAX_EVENTS 100
 /* Note: sig_mask contains the signal mask to use *during* epoll_wait() */
 static void pollset_work_and_unlock(grpc_exec_ctx *exec_ctx,
                                     grpc_pollset *pollset,
@@ -1354,7 +1467,13 @@
   PI_ADD_REF(pi, "ps_work");
   gpr_mu_unlock(&pollset->mu);
 
-  do {
+  /* If we get some workqueue work to do, it might end up completing an item on
+     the completion queue, so there's no need to poll... so we skip that and
+     redo the complete loop to verify */
+  if (!maybe_do_workqueue_work(exec_ctx, pi)) {
+    gpr_atm_no_barrier_fetch_add(&pi->poller_count, 1);
+    g_current_thread_polling_island = pi;
+
     GRPC_SCHEDULING_START_BLOCKING_REGION;
     ep_rv = epoll_pwait(epoll_fd, ep_ev, GRPC_EPOLL_MAX_EVENTS, timeout_ms,
                         sig_mask);
@@ -1386,6 +1505,11 @@
         append_error(error,
                      grpc_wakeup_fd_consume_wakeup(&grpc_global_wakeup_fd),
                      err_desc);
+      } else if (data_ptr == &pi->workqueue_wakeup_fd) {
+        append_error(error,
+                     grpc_wakeup_fd_consume_wakeup(&grpc_global_wakeup_fd),
+                     err_desc);
+        maybe_do_workqueue_work(exec_ctx, pi);
       } else if (data_ptr == &polling_island_wakeup_fd) {
         GRPC_POLLING_TRACE(
             "pollset_work: pollset: %p, worker: %p polling island (epoll_fd: "
@@ -1408,7 +1532,10 @@
         }
       }
     }
-  } while (ep_rv == GRPC_EPOLL_MAX_EVENTS);
+
+    g_current_thread_polling_island = NULL;
+    gpr_atm_no_barrier_fetch_add(&pi->poller_count, -1);
+  }
 
   GPR_ASSERT(pi != NULL);
 
@@ -1868,6 +1995,10 @@
 
     .kick_poller = kick_poller,
 
+    .workqueue_ref = workqueue_ref,
+    .workqueue_unref = workqueue_unref,
+    .workqueue_enqueue = workqueue_enqueue,
+
     .shutdown_engine = shutdown_engine,
 };
 
@@ -1892,6 +2023,10 @@
     return NULL;
   }
 
+  if (!grpc_has_wakeup_fd()) {
+    return NULL;
+  }
+
   if (!is_epoll_available()) {
     return NULL;
   }
@@ -1914,13 +2049,13 @@
   return &vtable;
 }
 
-#else /* defined(GPR_LINUX_EPOLL) */
-#if defined(GPR_POSIX_SOCKET)
+#else /* defined(GRPC_LINUX_EPOLL) */
+#if defined(GRPC_POSIX_SOCKET)
 #include "src/core/lib/iomgr/ev_posix.h"
-/* If GPR_LINUX_EPOLL is not defined, it means epoll is not available. Return
+/* If GRPC_LINUX_EPOLL is not defined, it means epoll is not available. Return
  * NULL */
 const grpc_event_engine_vtable *grpc_init_epoll_linux(void) { return NULL; }
-#endif /* defined(GPR_POSIX_SOCKET) */
+#endif /* defined(GRPC_POSIX_SOCKET) */
 
 void grpc_use_signal(int signum) {}
-#endif /* !defined(GPR_LINUX_EPOLL) */
+#endif /* !defined(GRPC_LINUX_EPOLL) */
diff --git a/src/core/lib/iomgr/ev_epoll_linux.h b/src/core/lib/iomgr/ev_epoll_linux.h
index 7a494ab..8fc3ff5 100644
--- a/src/core/lib/iomgr/ev_epoll_linux.h
+++ b/src/core/lib/iomgr/ev_epoll_linux.h
@@ -35,13 +35,14 @@
 #define GRPC_CORE_LIB_IOMGR_EV_EPOLL_LINUX_H
 
 #include "src/core/lib/iomgr/ev_posix.h"
+#include "src/core/lib/iomgr/port.h"
 
 const grpc_event_engine_vtable *grpc_init_epoll_linux(void);
 
-#ifdef GPR_LINUX_EPOLL
+#ifdef GRPC_LINUX_EPOLL
 void *grpc_fd_get_polling_island(grpc_fd *fd);
 void *grpc_pollset_get_polling_island(grpc_pollset *ps);
 bool grpc_are_polling_islands_equal(void *p, void *q);
-#endif /* defined(GPR_LINUX_EPOLL) */
+#endif /* defined(GRPC_LINUX_EPOLL) */
 
 #endif /* GRPC_CORE_LIB_IOMGR_EV_EPOLL_LINUX_H */
diff --git a/src/core/lib/iomgr/ev_poll_and_epoll_posix.c b/src/core/lib/iomgr/ev_poll_and_epoll_posix.c
index c2107e5..bf51404 100644
--- a/src/core/lib/iomgr/ev_poll_and_epoll_posix.c
+++ b/src/core/lib/iomgr/ev_poll_and_epoll_posix.c
@@ -42,9 +42,9 @@
  *  - ev_epoll_posix.{h,c}
  */
 
-#include <grpc/support/port_platform.h>
+#include "src/core/lib/iomgr/port.h"
 
-#ifdef GPR_POSIX_SOCKET
+#ifdef GRPC_POSIX_SOCKET
 
 #include "src/core/lib/iomgr/ev_poll_and_epoll_posix.h"
 
@@ -1338,7 +1338,7 @@
  * pollset_multipoller_with_poll_posix.c
  */
 
-#ifndef GPR_LINUX_MULTIPOLL_WITH_EPOLL
+#ifndef GRPC_LINUX_MULTIPOLL_WITH_EPOLL
 
 typedef struct {
   /* all polled fds */
@@ -1520,13 +1520,13 @@
   }
 }
 
-#endif /* !GPR_LINUX_MULTIPOLL_WITH_EPOLL */
+#endif /* !GRPC_LINUX_MULTIPOLL_WITH_EPOLL */
 
 /*******************************************************************************
  * pollset_multipoller_with_epoll_posix.c
  */
 
-#ifdef GPR_LINUX_MULTIPOLL_WITH_EPOLL
+#ifdef GRPC_LINUX_MULTIPOLL_WITH_EPOLL
 
 #include <errno.h>
 #include <poll.h>
@@ -1839,11 +1839,11 @@
   }
 }
 
-#else /* GPR_LINUX_MULTIPOLL_WITH_EPOLL */
+#else /* GRPC_LINUX_MULTIPOLL_WITH_EPOLL */
 
 static void remove_fd_from_all_epoll_sets(int fd) {}
 
-#endif /* GPR_LINUX_MULTIPOLL_WITH_EPOLL */
+#endif /* GRPC_LINUX_MULTIPOLL_WITH_EPOLL */
 
 /*******************************************************************************
  * pollset_set_posix.c
@@ -1989,6 +1989,32 @@
 }
 
 /*******************************************************************************
+ * workqueue stubs
+ */
+
+#ifdef GRPC_WORKQUEUE_REFCOUNT_DEBUG
+static grpc_workqueue *workqueue_ref(grpc_workqueue *workqueue,
+                                     const char *file, int line,
+                                     const char *reason) {
+  return workqueue;
+}
+static void workqueue_unref(grpc_exec_ctx *exec_ctx, grpc_workqueue *workqueue,
+                            const char *file, int line, const char *reason) {}
+#else
+static grpc_workqueue *workqueue_ref(grpc_workqueue *workqueue) {
+  return workqueue;
+}
+static void workqueue_unref(grpc_exec_ctx *exec_ctx,
+                            grpc_workqueue *workqueue) {}
+#endif
+
+static void workqueue_enqueue(grpc_exec_ctx *exec_ctx,
+                              grpc_workqueue *workqueue, grpc_closure *closure,
+                              grpc_error *error) {
+  grpc_exec_ctx_sched(exec_ctx, closure, error, NULL);
+}
+
+/*******************************************************************************
  * event engine binding
  */
 
@@ -2029,11 +2055,15 @@
 
     .kick_poller = kick_poller,
 
+    .workqueue_ref = workqueue_ref,
+    .workqueue_unref = workqueue_unref,
+    .workqueue_enqueue = workqueue_enqueue,
+
     .shutdown_engine = shutdown_engine,
 };
 
 const grpc_event_engine_vtable *grpc_init_poll_and_epoll_posix(void) {
-#ifdef GPR_LINUX_MULTIPOLL_WITH_EPOLL
+#ifdef GRPC_LINUX_MULTIPOLL_WITH_EPOLL
   platform_become_multipoller = epoll_become_multipoller;
 #else
   platform_become_multipoller = poll_become_multipoller;
diff --git a/src/core/lib/iomgr/ev_poll_posix.c b/src/core/lib/iomgr/ev_poll_posix.c
index 16a5e30..e1d620c 100644
--- a/src/core/lib/iomgr/ev_poll_posix.c
+++ b/src/core/lib/iomgr/ev_poll_posix.c
@@ -31,9 +31,9 @@
  *
  */
 
-#include <grpc/support/port_platform.h>
+#include "src/core/lib/iomgr/port.h"
 
-#ifdef GPR_POSIX_SOCKET
+#ifdef GRPC_POSIX_SOCKET
 
 #include "src/core/lib/iomgr/ev_poll_posix.h"
 
@@ -47,10 +47,12 @@
 #include <grpc/support/alloc.h>
 #include <grpc/support/log.h>
 #include <grpc/support/string_util.h>
+#include <grpc/support/thd.h>
 #include <grpc/support/tls.h>
 #include <grpc/support/useful.h>
 
 #include "src/core/lib/iomgr/iomgr_internal.h"
+#include "src/core/lib/iomgr/wakeup_fd_cv.h"
 #include "src/core/lib/iomgr/wakeup_fd_posix.h"
 #include "src/core/lib/profiling/timers.h"
 #include "src/core/lib/support/block_annotate.h"
@@ -246,6 +248,28 @@
 };
 
 /*******************************************************************************
+ * condition variable polling definitions
+ */
+
+#define CV_POLL_PERIOD_MS 1000
+#define CV_DEFAULT_TABLE_SIZE 16
+
+typedef enum poll_status_t { INPROGRESS, COMPLETED, CANCELLED } poll_status_t;
+
+typedef struct poll_args {
+  gpr_refcount refcount;
+  gpr_cv *cv;
+  struct pollfd *fds;
+  nfds_t nfds;
+  int timeout;
+  int retval;
+  int err;
+  gpr_atm status;
+} poll_args;
+
+cv_fd_table g_cvfds;
+
+/*******************************************************************************
  * fd_posix.c
  */
 
@@ -961,8 +985,15 @@
         if (errno != EINTR) {
           work_combine_error(&error, GRPC_OS_ERROR(errno, "poll"));
         }
+
         for (i = 2; i < pfd_count; i++) {
-          fd_end_poll(exec_ctx, &watchers[i], 0, 0, NULL);
+          if (watchers[i].fd == NULL) {
+            fd_end_poll(exec_ctx, &watchers[i], 0, 0, NULL);
+          } else {
+            // Wake up all the file descriptors, if we have an invalid one
+            // we can identify it on the next pollset_work()
+            fd_end_poll(exec_ctx, &watchers[i], 1, 1, pollset);
+          }
         }
       } else if (r == 0) {
         for (i = 2; i < pfd_count; i++) {
@@ -1236,10 +1267,237 @@
 }
 
 /*******************************************************************************
+ * workqueue stubs
+ */
+
+#ifdef GRPC_WORKQUEUE_REFCOUNT_DEBUG
+static grpc_workqueue *workqueue_ref(grpc_workqueue *workqueue,
+                                     const char *file, int line,
+                                     const char *reason) {
+  return workqueue;
+}
+static void workqueue_unref(grpc_exec_ctx *exec_ctx, grpc_workqueue *workqueue,
+                            const char *file, int line, const char *reason) {}
+#else
+static grpc_workqueue *workqueue_ref(grpc_workqueue *workqueue) {
+  return workqueue;
+}
+static void workqueue_unref(grpc_exec_ctx *exec_ctx,
+                            grpc_workqueue *workqueue) {}
+#endif
+
+static void workqueue_enqueue(grpc_exec_ctx *exec_ctx,
+                              grpc_workqueue *workqueue, grpc_closure *closure,
+                              grpc_error *error) {
+  grpc_exec_ctx_sched(exec_ctx, closure, error, NULL);
+}
+
+/*******************************************************************************
+ * Condition Variable polling extensions
+ */
+
+static void decref_poll_args(poll_args *args) {
+  if (gpr_unref(&args->refcount)) {
+    gpr_free(args->fds);
+    gpr_cv_destroy(args->cv);
+    gpr_free(args->cv);
+    gpr_free(args);
+  }
+}
+
+// Poll in a background thread
+static void run_poll(void *arg) {
+  int timeout, retval;
+  poll_args *pargs = (poll_args *)arg;
+  while (gpr_atm_no_barrier_load(&pargs->status) == INPROGRESS) {
+    if (pargs->timeout < 0) {
+      timeout = CV_POLL_PERIOD_MS;
+    } else {
+      timeout = GPR_MIN(CV_POLL_PERIOD_MS, pargs->timeout);
+      pargs->timeout -= timeout;
+    }
+    retval = g_cvfds.poll(pargs->fds, pargs->nfds, timeout);
+    if (retval != 0 || pargs->timeout == 0) {
+      pargs->retval = retval;
+      pargs->err = errno;
+      break;
+    }
+  }
+  gpr_mu_lock(&g_cvfds.mu);
+  if (gpr_atm_no_barrier_load(&pargs->status) == INPROGRESS) {
+    // Signal main thread that the poll completed
+    gpr_atm_no_barrier_store(&pargs->status, COMPLETED);
+    gpr_cv_signal(pargs->cv);
+  }
+  decref_poll_args(pargs);
+  g_cvfds.pollcount--;
+  if (g_cvfds.shutdown && g_cvfds.pollcount == 0) {
+    gpr_cv_signal(&g_cvfds.shutdown_complete);
+  }
+  gpr_mu_unlock(&g_cvfds.mu);
+}
+
+// This function overrides poll() to handle condition variable wakeup fds
+static int cvfd_poll(struct pollfd *fds, nfds_t nfds, int timeout) {
+  unsigned int i;
+  int res, idx;
+  gpr_cv *pollcv;
+  cv_node *cvn, *prev;
+  nfds_t nsockfds = 0;
+  gpr_thd_id t_id;
+  gpr_thd_options opt;
+  poll_args *pargs = NULL;
+  gpr_mu_lock(&g_cvfds.mu);
+  pollcv = gpr_malloc(sizeof(gpr_cv));
+  gpr_cv_init(pollcv);
+  for (i = 0; i < nfds; i++) {
+    fds[i].revents = 0;
+    if (fds[i].fd < 0 && (fds[i].events & POLLIN)) {
+      idx = FD_TO_IDX(fds[i].fd);
+      cvn = gpr_malloc(sizeof(cv_node));
+      cvn->cv = pollcv;
+      cvn->next = g_cvfds.cvfds[idx].cvs;
+      g_cvfds.cvfds[idx].cvs = cvn;
+      // We should return immediately if there are pending events,
+      // but we still need to call poll() to check for socket events
+      if (g_cvfds.cvfds[idx].is_set) {
+        timeout = 0;
+      }
+    } else if (fds[i].fd >= 0) {
+      nsockfds++;
+    }
+  }
+
+  if (nsockfds > 0) {
+    pargs = gpr_malloc(sizeof(struct poll_args));
+    // Both the main thread and calling thread get a reference
+    gpr_ref_init(&pargs->refcount, 2);
+    pargs->cv = pollcv;
+    pargs->fds = gpr_malloc(sizeof(struct pollfd) * nsockfds);
+    pargs->nfds = nsockfds;
+    pargs->timeout = timeout;
+    pargs->retval = 0;
+    pargs->err = 0;
+    gpr_atm_no_barrier_store(&pargs->status, INPROGRESS);
+    idx = 0;
+    for (i = 0; i < nfds; i++) {
+      if (fds[i].fd >= 0) {
+        pargs->fds[idx].fd = fds[i].fd;
+        pargs->fds[idx].events = fds[i].events;
+        pargs->fds[idx].revents = 0;
+        idx++;
+      }
+    }
+    g_cvfds.pollcount++;
+    opt = gpr_thd_options_default();
+    gpr_thd_options_set_detached(&opt);
+    gpr_thd_new(&t_id, &run_poll, pargs, &opt);
+    // We want the poll() thread to trigger the deadline, so wait forever here
+    gpr_cv_wait(pollcv, &g_cvfds.mu, gpr_inf_future(GPR_CLOCK_MONOTONIC));
+    if (gpr_atm_no_barrier_load(&pargs->status) == COMPLETED) {
+      res = pargs->retval;
+      errno = pargs->err;
+    } else {
+      res = 0;
+      errno = 0;
+      gpr_atm_no_barrier_store(&pargs->status, CANCELLED);
+    }
+  } else {
+    gpr_timespec deadline = gpr_now(GPR_CLOCK_REALTIME);
+    deadline =
+        gpr_time_add(deadline, gpr_time_from_millis(timeout, GPR_TIMESPAN));
+    gpr_cv_wait(pollcv, &g_cvfds.mu, deadline);
+    res = 0;
+  }
+
+  idx = 0;
+  for (i = 0; i < nfds; i++) {
+    if (fds[i].fd < 0 && (fds[i].events & POLLIN)) {
+      cvn = g_cvfds.cvfds[FD_TO_IDX(fds[i].fd)].cvs;
+      prev = NULL;
+      while (cvn->cv != pollcv) {
+        prev = cvn;
+        cvn = cvn->next;
+        GPR_ASSERT(cvn);
+      }
+      if (!prev) {
+        g_cvfds.cvfds[FD_TO_IDX(fds[i].fd)].cvs = cvn->next;
+      } else {
+        prev->next = cvn->next;
+      }
+      gpr_free(cvn);
+
+      if (g_cvfds.cvfds[FD_TO_IDX(fds[i].fd)].is_set) {
+        fds[i].revents = POLLIN;
+        if (res >= 0) res++;
+      }
+    } else if (fds[i].fd >= 0 &&
+               gpr_atm_no_barrier_load(&pargs->status) == COMPLETED) {
+      fds[i].revents = pargs->fds[idx].revents;
+      idx++;
+    }
+  }
+
+  if (pargs) {
+    decref_poll_args(pargs);
+  } else {
+    gpr_cv_destroy(pollcv);
+    gpr_free(pollcv);
+  }
+  gpr_mu_unlock(&g_cvfds.mu);
+
+  return res;
+}
+
+static void global_cv_fd_table_init() {
+  gpr_mu_init(&g_cvfds.mu);
+  gpr_mu_lock(&g_cvfds.mu);
+  gpr_cv_init(&g_cvfds.shutdown_complete);
+  g_cvfds.shutdown = 0;
+  g_cvfds.pollcount = 0;
+  g_cvfds.size = CV_DEFAULT_TABLE_SIZE;
+  g_cvfds.cvfds = gpr_malloc(sizeof(fd_node) * CV_DEFAULT_TABLE_SIZE);
+  g_cvfds.free_fds = NULL;
+  for (int i = 0; i < CV_DEFAULT_TABLE_SIZE; i++) {
+    g_cvfds.cvfds[i].is_set = 0;
+    g_cvfds.cvfds[i].cvs = NULL;
+    g_cvfds.cvfds[i].next_free = g_cvfds.free_fds;
+    g_cvfds.free_fds = &g_cvfds.cvfds[i];
+  }
+  // Override the poll function with one that supports cvfds
+  g_cvfds.poll = grpc_poll_function;
+  grpc_poll_function = &cvfd_poll;
+  gpr_mu_unlock(&g_cvfds.mu);
+}
+
+static void global_cv_fd_table_shutdown() {
+  gpr_mu_lock(&g_cvfds.mu);
+  g_cvfds.shutdown = 1;
+  // Attempt to wait for all abandoned poll() threads to terminate
+  // Not doing so will result in reported memory leaks
+  if (g_cvfds.pollcount > 0) {
+    int res = gpr_cv_wait(&g_cvfds.shutdown_complete, &g_cvfds.mu,
+                          gpr_time_add(gpr_now(GPR_CLOCK_REALTIME),
+                                       gpr_time_from_seconds(3, GPR_TIMESPAN)));
+    GPR_ASSERT(res == 0);
+  }
+  gpr_cv_destroy(&g_cvfds.shutdown_complete);
+  grpc_poll_function = g_cvfds.poll;
+  gpr_free(g_cvfds.cvfds);
+  gpr_mu_unlock(&g_cvfds.mu);
+  gpr_mu_destroy(&g_cvfds.mu);
+}
+
+/*******************************************************************************
  * event engine binding
  */
 
-static void shutdown_engine(void) { pollset_global_shutdown(); }
+static void shutdown_engine(void) {
+  pollset_global_shutdown();
+  if (grpc_cv_wakeup_fds_enabled()) {
+    global_cv_fd_table_shutdown();
+  }
+}
 
 static const grpc_event_engine_vtable vtable = {
     .pollset_size = sizeof(grpc_pollset),
@@ -1273,14 +1531,32 @@
 
     .kick_poller = kick_poller,
 
+    .workqueue_ref = workqueue_ref,
+    .workqueue_unref = workqueue_unref,
+    .workqueue_enqueue = workqueue_enqueue,
+
     .shutdown_engine = shutdown_engine,
 };
 
 const grpc_event_engine_vtable *grpc_init_poll_posix(void) {
+  if (!grpc_has_wakeup_fd()) {
+    return NULL;
+  }
   if (!GRPC_LOG_IF_ERROR("pollset_global_init", pollset_global_init())) {
     return NULL;
   }
   return &vtable;
 }
 
+const grpc_event_engine_vtable *grpc_init_poll_cv_posix(void) {
+  global_cv_fd_table_init();
+  grpc_enable_cv_wakeup_fds(1);
+  if (!GRPC_LOG_IF_ERROR("pollset_global_init", pollset_global_init())) {
+    global_cv_fd_table_shutdown();
+    grpc_enable_cv_wakeup_fds(0);
+    return NULL;
+  }
+  return &vtable;
+}
+
 #endif
diff --git a/src/core/lib/iomgr/ev_poll_posix.h b/src/core/lib/iomgr/ev_poll_posix.h
index 291736a..202ffca 100644
--- a/src/core/lib/iomgr/ev_poll_posix.h
+++ b/src/core/lib/iomgr/ev_poll_posix.h
@@ -37,5 +37,6 @@
 #include "src/core/lib/iomgr/ev_posix.h"
 
 const grpc_event_engine_vtable *grpc_init_poll_posix(void);
+const grpc_event_engine_vtable *grpc_init_poll_cv_posix(void);
 
 #endif /* GRPC_CORE_LIB_IOMGR_EV_POLL_POSIX_H */
diff --git a/src/core/lib/iomgr/ev_posix.c b/src/core/lib/iomgr/ev_posix.c
index 6536672..ef36ba8 100644
--- a/src/core/lib/iomgr/ev_posix.c
+++ b/src/core/lib/iomgr/ev_posix.c
@@ -31,9 +31,9 @@
  *
  */
 
-#include <grpc/support/port_platform.h>
+#include "src/core/lib/iomgr/port.h"
 
-#ifdef GPR_POSIX_SOCKET
+#ifdef GRPC_POSIX_SOCKET
 
 #include "src/core/lib/iomgr/ev_posix.h"
 
@@ -66,6 +66,7 @@
 static const event_engine_factory g_factories[] = {
     {"epoll", grpc_init_epoll_linux},
     {"poll", grpc_init_poll_posix},
+    {"poll-cv", grpc_init_poll_cv_posix},
     {"legacy", grpc_init_poll_and_epoll_posix},
 };
 
@@ -258,4 +259,27 @@
 
 grpc_error *grpc_kick_poller(void) { return g_event_engine->kick_poller(); }
 
-#endif  // GPR_POSIX_SOCKET
+#ifdef GRPC_WORKQUEUE_REFCOUNT_DEBUG
+grpc_workqueue *grpc_workqueue_ref(grpc_workqueue *workqueue, const char *file,
+                                   int line, const char *reason) {
+  return g_event_engine->workqueue_ref(workqueue, file, line, reason);
+}
+void grpc_workqueue_unref(grpc_exec_ctx *exec_ctx, grpc_workqueue *workqueue,
+                          const char *file, int line, const char *reason) {
+  g_event_engine->workqueue_unref(exec_ctx, workqueue, file, line, reason);
+}
+#else
+grpc_workqueue *grpc_workqueue_ref(grpc_workqueue *workqueue) {
+  return g_event_engine->workqueue_ref(workqueue);
+}
+void grpc_workqueue_unref(grpc_exec_ctx *exec_ctx, grpc_workqueue *workqueue) {
+  g_event_engine->workqueue_unref(exec_ctx, workqueue);
+}
+#endif
+
+void grpc_workqueue_enqueue(grpc_exec_ctx *exec_ctx, grpc_workqueue *workqueue,
+                            grpc_closure *closure, grpc_error *error) {
+  g_event_engine->workqueue_enqueue(exec_ctx, workqueue, closure, error);
+}
+
+#endif  // GRPC_POSIX_SOCKET
diff --git a/src/core/lib/iomgr/ev_posix.h b/src/core/lib/iomgr/ev_posix.h
index c2aa175..2fdef06 100644
--- a/src/core/lib/iomgr/ev_posix.h
+++ b/src/core/lib/iomgr/ev_posix.h
@@ -40,6 +40,7 @@
 #include "src/core/lib/iomgr/pollset.h"
 #include "src/core/lib/iomgr/pollset_set.h"
 #include "src/core/lib/iomgr/wakeup_fd_posix.h"
+#include "src/core/lib/iomgr/workqueue.h"
 
 typedef struct grpc_fd grpc_fd;
 
@@ -95,6 +96,18 @@
   grpc_error *(*kick_poller)(void);
 
   void (*shutdown_engine)(void);
+
+#ifdef GRPC_WORKQUEUE_REFCOUNT_DEBUG
+  grpc_workqueue *(*workqueue_ref)(grpc_workqueue *workqueue, const char *file,
+                                   int line, const char *reason);
+  void (*workqueue_unref)(grpc_exec_ctx *exec_ctx, grpc_workqueue *workqueue,
+                          const char *file, int line, const char *reason);
+#else
+  grpc_workqueue *(*workqueue_ref)(grpc_workqueue *workqueue);
+  void (*workqueue_unref)(grpc_exec_ctx *exec_ctx, grpc_workqueue *workqueue);
+#endif
+  void (*workqueue_enqueue)(grpc_exec_ctx *exec_ctx, grpc_workqueue *workqueue,
+                            grpc_closure *closure, grpc_error *error);
 } grpc_event_engine_vtable;
 
 void grpc_event_engine_init(void);
diff --git a/src/core/lib/iomgr/exec_ctx.c b/src/core/lib/iomgr/exec_ctx.c
index ac7785e..604713e 100644
--- a/src/core/lib/iomgr/exec_ctx.c
+++ b/src/core/lib/iomgr/exec_ctx.c
@@ -37,6 +37,7 @@
 #include <grpc/support/sync.h>
 #include <grpc/support/thd.h>
 
+#include "src/core/lib/iomgr/combiner.h"
 #include "src/core/lib/iomgr/workqueue.h"
 #include "src/core/lib/profiling/timers.h"
 
@@ -60,18 +61,43 @@
 bool grpc_exec_ctx_flush(grpc_exec_ctx *exec_ctx) {
   bool did_something = 0;
   GPR_TIMER_BEGIN("grpc_exec_ctx_flush", 0);
-  while (!grpc_closure_list_empty(exec_ctx->closure_list)) {
-    grpc_closure *c = exec_ctx->closure_list.head;
-    exec_ctx->closure_list.head = exec_ctx->closure_list.tail = NULL;
-    while (c != NULL) {
-      grpc_closure *next = c->next_data.next;
-      grpc_error *error = c->error;
-      did_something = true;
-      GPR_TIMER_BEGIN("grpc_exec_ctx_flush.cb", 0);
+  for (;;) {
+    if (!grpc_closure_list_empty(exec_ctx->closure_list)) {
+      grpc_closure *c = exec_ctx->closure_list.head;
+      exec_ctx->closure_list.head = exec_ctx->closure_list.tail = NULL;
+      while (c != NULL) {
+        grpc_closure *next = c->next_data.next;
+        did_something = true;
+        grpc_closure_run(exec_ctx, c, c->error_data.error);
+        c = next;
+      }
+    } else if (!grpc_combiner_continue_exec_ctx(exec_ctx)) {
+      break;
+    }
+  }
+  GPR_ASSERT(exec_ctx->active_combiner == NULL);
+  if (exec_ctx->stealing_from_workqueue != NULL) {
+    if (grpc_exec_ctx_ready_to_finish(exec_ctx)) {
+      grpc_workqueue_enqueue(exec_ctx, exec_ctx->stealing_from_workqueue,
+                             exec_ctx->stolen_closure,
+                             exec_ctx->stolen_closure->error_data.error);
+      GRPC_WORKQUEUE_UNREF(exec_ctx, exec_ctx->stealing_from_workqueue,
+                           "exec_ctx_sched");
+      exec_ctx->stealing_from_workqueue = NULL;
+      exec_ctx->stolen_closure = NULL;
+    } else {
+      grpc_closure *c = exec_ctx->stolen_closure;
+      GRPC_WORKQUEUE_UNREF(exec_ctx, exec_ctx->stealing_from_workqueue,
+                           "exec_ctx_sched");
+      exec_ctx->stealing_from_workqueue = NULL;
+      exec_ctx->stolen_closure = NULL;
+      grpc_error *error = c->error_data.error;
+      GPR_TIMER_BEGIN("grpc_exec_ctx_flush.stolen_cb", 0);
       c->cb(exec_ctx, c->cb_arg, error);
       GRPC_ERROR_UNREF(error);
-      GPR_TIMER_END("grpc_exec_ctx_flush.cb", 0);
-      c = next;
+      GPR_TIMER_END("grpc_exec_ctx_flush.stolen_cb", 0);
+      grpc_exec_ctx_flush(exec_ctx);
+      did_something = true;
     }
   }
   GPR_TIMER_END("grpc_exec_ctx_flush", 0);
@@ -86,12 +112,25 @@
 void grpc_exec_ctx_sched(grpc_exec_ctx *exec_ctx, grpc_closure *closure,
                          grpc_error *error,
                          grpc_workqueue *offload_target_or_null) {
+  GPR_TIMER_BEGIN("grpc_exec_ctx_sched", 0);
   if (offload_target_or_null == NULL) {
     grpc_closure_list_append(&exec_ctx->closure_list, closure, error);
-  } else {
+  } else if (exec_ctx->stealing_from_workqueue == NULL) {
+    exec_ctx->stealing_from_workqueue = offload_target_or_null;
+    closure->error_data.error = error;
+    exec_ctx->stolen_closure = closure;
+  } else if (exec_ctx->stealing_from_workqueue != offload_target_or_null) {
     grpc_workqueue_enqueue(exec_ctx, offload_target_or_null, closure, error);
     GRPC_WORKQUEUE_UNREF(exec_ctx, offload_target_or_null, "exec_ctx_sched");
+  } else { /* stealing_from_workqueue == offload_target_or_null */
+    grpc_workqueue_enqueue(exec_ctx, offload_target_or_null,
+                           exec_ctx->stolen_closure,
+                           exec_ctx->stolen_closure->error_data.error);
+    closure->error_data.error = error;
+    exec_ctx->stolen_closure = closure;
+    GRPC_WORKQUEUE_UNREF(exec_ctx, offload_target_or_null, "exec_ctx_sched");
   }
+  GPR_TIMER_END("grpc_exec_ctx_sched", 0);
 }
 
 void grpc_exec_ctx_enqueue_list(grpc_exec_ctx *exec_ctx,
diff --git a/src/core/lib/iomgr/exec_ctx.h b/src/core/lib/iomgr/exec_ctx.h
index 4d20ecf..7e50cb9 100644
--- a/src/core/lib/iomgr/exec_ctx.h
+++ b/src/core/lib/iomgr/exec_ctx.h
@@ -66,15 +66,33 @@
 #ifndef GRPC_EXECUTION_CONTEXT_SANITIZER
 struct grpc_exec_ctx {
   grpc_closure_list closure_list;
+  /** The workqueue we're stealing work from.
+      As items are queued to the execution context, we try to steal one
+      workqueue item and execute it inline (assuming the exec_ctx is not
+      finished) - doing so does not invalidate the workqueue's contract, and
+      provides a small latency win in cases where we get a hit */
+  grpc_workqueue *stealing_from_workqueue;
+  /** The workqueue item that was stolen from the workqueue above. When new
+      items are scheduled to be offloaded to that workqueue, we need to update
+      this like a 1-deep fifo to maintain the invariant that workqueue items
+      queued by one thread are started in order */
+  grpc_closure *stolen_closure;
   /** currently active combiner: updated only via combiner.c */
   grpc_combiner *active_combiner;
+  /** last active combiner in the active combiner list */
+  grpc_combiner *last_combiner;
   bool cached_ready_to_finish;
   void *check_ready_to_finish_arg;
   bool (*check_ready_to_finish)(grpc_exec_ctx *exec_ctx, void *arg);
 };
 
+/* initializer for grpc_exec_ctx:
+   prefer to use GRPC_EXEC_CTX_INIT whenever possible */
 #define GRPC_EXEC_CTX_INIT_WITH_FINISH_CHECK(finish_check, finish_check_arg) \
-  { GRPC_CLOSURE_LIST_INIT, NULL, false, finish_check_arg, finish_check }
+  {                                                                          \
+    GRPC_CLOSURE_LIST_INIT, NULL, NULL, NULL, NULL, false, finish_check_arg, \
+        finish_check                                                         \
+  }
 #else
 struct grpc_exec_ctx {
   bool cached_ready_to_finish;
@@ -85,8 +103,10 @@
   { false, finish_check_arg, finish_check }
 #endif
 
+/* initialize an execution context at the top level of an API call into grpc
+   (this is safe to use elsewhere, though possibly not as efficient) */
 #define GRPC_EXEC_CTX_INIT \
-  GRPC_EXEC_CTX_INIT_WITH_FINISH_CHECK(grpc_never_ready_to_finish, NULL)
+  GRPC_EXEC_CTX_INIT_WITH_FINISH_CHECK(grpc_always_ready_to_finish, NULL)
 
 /** Flush any work that has been enqueued onto this grpc_exec_ctx.
  *  Caller must guarantee that no interfering locks are held.
diff --git a/src/core/lib/iomgr/iocp_windows.c b/src/core/lib/iomgr/iocp_windows.c
index 2532e52..60ebe43 100644
--- a/src/core/lib/iomgr/iocp_windows.c
+++ b/src/core/lib/iomgr/iocp_windows.c
@@ -31,9 +31,9 @@
  *
  */
 
-#include <grpc/support/port_platform.h>
+#include "src/core/lib/iomgr/port.h"
 
-#ifdef GPR_WINSOCK_SOCKET
+#ifdef GRPC_WINSOCK_SOCKET
 
 #include <winsock2.h>
 
@@ -166,4 +166,4 @@
   GPR_ASSERT(ret == g_iocp);
 }
 
-#endif /* GPR_WINSOCK_SOCKET */
+#endif /* GRPC_WINSOCK_SOCKET */
diff --git a/src/core/lib/iomgr/iomgr.c b/src/core/lib/iomgr/iomgr.c
index d67d388..4fd83e0 100644
--- a/src/core/lib/iomgr/iomgr.c
+++ b/src/core/lib/iomgr/iomgr.c
@@ -112,6 +112,14 @@
       continue;
     }
     if (g_root_object.next != &g_root_object) {
+      if (grpc_iomgr_abort_on_leaks()) {
+        gpr_log(GPR_DEBUG, "Failed to free %" PRIuPTR
+                           " iomgr objects before shutdown deadline: "
+                           "memory leaks are likely",
+                count_objects());
+        dump_objects("LEAKED");
+        abort();
+      }
       gpr_timespec short_deadline = gpr_time_add(
           gpr_now(GPR_CLOCK_REALTIME), gpr_time_from_millis(100, GPR_TIMESPAN));
       if (gpr_cv_wait(&g_rcv, &g_mu, short_deadline)) {
@@ -122,9 +130,6 @@
                                "memory leaks are likely",
                     count_objects());
             dump_objects("LEAKED");
-            if (grpc_iomgr_abort_on_leaks()) {
-              abort();
-            }
           }
           break;
         }
diff --git a/src/core/lib/iomgr/iomgr.h b/src/core/lib/iomgr/iomgr.h
index 6c82de7..c1cfaf3 100644
--- a/src/core/lib/iomgr/iomgr.h
+++ b/src/core/lib/iomgr/iomgr.h
@@ -34,6 +34,8 @@
 #ifndef GRPC_CORE_LIB_IOMGR_IOMGR_H
 #define GRPC_CORE_LIB_IOMGR_IOMGR_H
 
+#include "src/core/lib/iomgr/port.h"
+
 /** Initializes the iomgr. */
 void grpc_iomgr_init(void);
 
diff --git a/src/core/lib/iomgr/iomgr_posix.c b/src/core/lib/iomgr/iomgr_posix.c
index cede97f..f5ee0c9 100644
--- a/src/core/lib/iomgr/iomgr_posix.c
+++ b/src/core/lib/iomgr/iomgr_posix.c
@@ -31,9 +31,9 @@
  *
  */
 
-#include <grpc/support/port_platform.h>
+#include "src/core/lib/iomgr/port.h"
 
-#ifdef GPR_POSIX_SOCKET
+#ifdef GRPC_POSIX_SOCKET
 
 #include "src/core/lib/debug/trace.h"
 #include "src/core/lib/iomgr/ev_posix.h"
diff --git a/test/core/client_config/uri_fuzzer_test.c b/src/core/lib/iomgr/iomgr_uv.c
similarity index 76%
copy from test/core/client_config/uri_fuzzer_test.c
copy to src/core/lib/iomgr/iomgr_uv.c
index f297140..96516ff 100644
--- a/test/core/client_config/uri_fuzzer_test.c
+++ b/src/core/lib/iomgr/iomgr_uv.c
@@ -1,6 +1,6 @@
 /*
  *
- * Copyright 2015, Google Inc.
+ * Copyright 2016, Google Inc.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -31,26 +31,19 @@
  *
  */
 
-#include <stdbool.h>
-#include <stdint.h>
-#include <string.h>
+#include "src/core/lib/iomgr/port.h"
 
-#include <grpc/support/alloc.h>
+#ifdef GRPC_UV
 
-#include "src/core/ext/client_config/uri_parser.h"
+#include "src/core/lib/debug/trace.h"
+#include "src/core/lib/iomgr/pollset_uv.h"
+#include "src/core/lib/iomgr/tcp_uv.h"
 
-bool squelch = true;
-bool leak_check = true;
-
-int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
-  char *s = gpr_malloc(size + 1);
-  memcpy(s, data, size);
-  s[size] = 0;
-
-  grpc_uri *x;
-  if ((x = grpc_uri_parse(s, 1))) {
-    grpc_uri_destroy(x);
-  }
-  gpr_free(s);
-  return 0;
+void grpc_iomgr_platform_init(void) {
+  grpc_pollset_global_init();
+  grpc_register_tracer("tcp", &grpc_tcp_trace);
 }
+void grpc_iomgr_platform_flush(void) {}
+void grpc_iomgr_platform_shutdown(void) { grpc_pollset_global_shutdown(); }
+
+#endif /* GRPC_UV */
diff --git a/src/core/lib/iomgr/iomgr_windows.c b/src/core/lib/iomgr/iomgr_windows.c
index 7653f6e..b659264 100644
--- a/src/core/lib/iomgr/iomgr_windows.c
+++ b/src/core/lib/iomgr/iomgr_windows.c
@@ -31,9 +31,9 @@
  *
  */
 
-#include <grpc/support/port_platform.h>
+#include "src/core/lib/iomgr/port.h"
 
-#ifdef GPR_WINSOCK_SOCKET
+#ifdef GRPC_WINSOCK_SOCKET
 
 #include "src/core/lib/iomgr/sockaddr_windows.h"
 
diff --git a/src/core/lib/iomgr/pollset_set_uv.c b/src/core/lib/iomgr/pollset_set_uv.c
new file mode 100644
index 0000000..e5ef8b2
--- /dev/null
+++ b/src/core/lib/iomgr/pollset_set_uv.c
@@ -0,0 +1,62 @@
+/*
+ *
+ * Copyright 2016, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ *     * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+#include "src/core/lib/iomgr/port.h"
+
+#ifdef GRPC_UV
+
+#include "src/core/lib/iomgr/pollset_set.h"
+
+grpc_pollset_set* grpc_pollset_set_create(void) {
+  return (grpc_pollset_set*)((intptr_t)0xdeafbeef);
+}
+
+void grpc_pollset_set_destroy(grpc_pollset_set* pollset_set) {}
+
+void grpc_pollset_set_add_pollset(grpc_exec_ctx* exec_ctx,
+                                  grpc_pollset_set* pollset_set,
+                                  grpc_pollset* pollset) {}
+
+void grpc_pollset_set_del_pollset(grpc_exec_ctx* exec_ctx,
+                                  grpc_pollset_set* pollset_set,
+                                  grpc_pollset* pollset) {}
+
+void grpc_pollset_set_add_pollset_set(grpc_exec_ctx* exec_ctx,
+                                      grpc_pollset_set* bag,
+                                      grpc_pollset_set* item) {}
+
+void grpc_pollset_set_del_pollset_set(grpc_exec_ctx* exec_ctx,
+                                      grpc_pollset_set* bag,
+                                      grpc_pollset_set* item) {}
+
+#endif /* GRPC_UV */
diff --git a/src/core/lib/iomgr/pollset_set_windows.c b/src/core/lib/iomgr/pollset_set_windows.c
index a35a976..645650d 100644
--- a/src/core/lib/iomgr/pollset_set_windows.c
+++ b/src/core/lib/iomgr/pollset_set_windows.c
@@ -31,10 +31,10 @@
  *
  */
 
-#include <grpc/support/port_platform.h>
 #include <stdint.h>
+#include "src/core/lib/iomgr/port.h"
 
-#ifdef GPR_WINSOCK_SOCKET
+#ifdef GRPC_WINSOCK_SOCKET
 
 #include "src/core/lib/iomgr/pollset_set_windows.h"
 
@@ -60,4 +60,4 @@
                                       grpc_pollset_set* bag,
                                       grpc_pollset_set* item) {}
 
-#endif /* GPR_WINSOCK_SOCKET */
+#endif /* GRPC_WINSOCK_SOCKET */
diff --git a/src/core/lib/iomgr/pollset_uv.c b/src/core/lib/iomgr/pollset_uv.c
new file mode 100644
index 0000000..3a74b84
--- /dev/null
+++ b/src/core/lib/iomgr/pollset_uv.c
@@ -0,0 +1,142 @@
+/*
+ *
+ * Copyright 2016, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ *     * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+#include "src/core/lib/iomgr/port.h"
+
+#ifdef GRPC_UV
+
+#include <uv.h>
+
+#include <string.h>
+
+#include <grpc/support/log.h>
+#include <grpc/support/sync.h>
+
+#include "src/core/lib/iomgr/pollset.h"
+#include "src/core/lib/iomgr/pollset_uv.h"
+
+struct grpc_pollset {
+  uv_timer_t timer;
+  int shutting_down;
+};
+
+/* Indicates that grpc_pollset_work should run an iteration of the UV loop
+   before running callbacks. This defaults to 1, and should be disabled if
+   grpc_pollset_work will be called within the callstack of uv_run */
+int grpc_pollset_work_run_loop;
+
+gpr_mu grpc_polling_mu;
+
+size_t grpc_pollset_size() { return sizeof(grpc_pollset); }
+
+void grpc_pollset_global_init(void) {
+  gpr_mu_init(&grpc_polling_mu);
+  grpc_pollset_work_run_loop = 1;
+}
+
+void grpc_pollset_global_shutdown(void) { gpr_mu_destroy(&grpc_polling_mu); }
+
+void grpc_pollset_init(grpc_pollset *pollset, gpr_mu **mu) {
+  *mu = &grpc_polling_mu;
+  memset(pollset, 0, sizeof(grpc_pollset));
+  uv_timer_init(uv_default_loop(), &pollset->timer);
+  pollset->shutting_down = 0;
+}
+
+static void timer_close_cb(uv_handle_t *handle) { handle->data = (void *)1; }
+
+void grpc_pollset_shutdown(grpc_exec_ctx *exec_ctx, grpc_pollset *pollset,
+                           grpc_closure *closure) {
+  GPR_ASSERT(!pollset->shutting_down);
+  pollset->shutting_down = 1;
+  if (grpc_pollset_work_run_loop) {
+    // Drain any pending UV callbacks without blocking
+    uv_run(uv_default_loop(), UV_RUN_NOWAIT);
+  }
+  grpc_exec_ctx_sched(exec_ctx, closure, GRPC_ERROR_NONE, NULL);
+}
+
+void grpc_pollset_destroy(grpc_pollset *pollset) {
+  uv_close((uv_handle_t *)&pollset->timer, timer_close_cb);
+  // timer.data is a boolean indicating that the timer has finished closing
+  pollset->timer.data = (void *)0;
+  if (grpc_pollset_work_run_loop) {
+    while (!pollset->timer.data) {
+      uv_run(uv_default_loop(), UV_RUN_NOWAIT);
+    }
+  }
+}
+
+void grpc_pollset_reset(grpc_pollset *pollset) {
+  GPR_ASSERT(pollset->shutting_down);
+  pollset->shutting_down = 0;
+}
+
+static void timer_run_cb(uv_timer_t *timer) {}
+
+grpc_error *grpc_pollset_work(grpc_exec_ctx *exec_ctx, grpc_pollset *pollset,
+                              grpc_pollset_worker **worker_hdl,
+                              gpr_timespec now, gpr_timespec deadline) {
+  uint64_t timeout;
+  gpr_mu_unlock(&grpc_polling_mu);
+  if (grpc_pollset_work_run_loop) {
+    if (gpr_time_cmp(deadline, now) >= 0) {
+      timeout = (uint64_t)gpr_time_to_millis(gpr_time_sub(deadline, now));
+    } else {
+      timeout = 0;
+    }
+    /* We special-case timeout=0 so that we don't bother with the timer when
+       the loop won't block anyway */
+    if (timeout > 0) {
+      uv_timer_start(&pollset->timer, timer_run_cb, timeout, 0);
+      /* Run until there is some I/O activity or the timer triggers. It doesn't
+         matter which happens */
+      uv_run(uv_default_loop(), UV_RUN_ONCE);
+      uv_timer_stop(&pollset->timer);
+    } else {
+      uv_run(uv_default_loop(), UV_RUN_NOWAIT);
+    }
+  }
+  if (!grpc_closure_list_empty(exec_ctx->closure_list)) {
+    grpc_exec_ctx_flush(exec_ctx);
+  }
+  gpr_mu_lock(&grpc_polling_mu);
+  return GRPC_ERROR_NONE;
+}
+
+grpc_error *grpc_pollset_kick(grpc_pollset *pollset,
+                              grpc_pollset_worker *specific_worker) {
+  return GRPC_ERROR_NONE;
+}
+
+#endif /* GRPC_UV */
diff --git a/src/core/ext/client_config/default_initial_connect_string.c b/src/core/lib/iomgr/pollset_uv.h
similarity index 82%
copy from src/core/ext/client_config/default_initial_connect_string.c
copy to src/core/lib/iomgr/pollset_uv.h
index a70da4a..0715eb4 100644
--- a/src/core/ext/client_config/default_initial_connect_string.c
+++ b/src/core/lib/iomgr/pollset_uv.h
@@ -1,6 +1,6 @@
 /*
  *
- * Copyright 2015, Google Inc.
+ * Copyright 2016, Google Inc.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -31,9 +31,12 @@
  *
  */
 
-#include <grpc/support/slice.h>
-#include "src/core/lib/iomgr/sockaddr.h"
+#ifndef GRPC_CORE_LIB_IOMGR_POLLSET_UV_H
+#define GRPC_CORE_LIB_IOMGR_POLLSET_UV_H
 
-void grpc_set_default_initial_connect_string(struct sockaddr **addr,
-                                             size_t *addr_len,
-                                             gpr_slice *initial_str) {}
+extern int grpc_pollset_work_run_loop;
+
+void grpc_pollset_global_init(void);
+void grpc_pollset_global_shutdown(void);
+
+#endif /* GRPC_CORE_LIB_IOMGR_POLLSET_UV_H */
diff --git a/src/core/lib/iomgr/pollset_windows.c b/src/core/lib/iomgr/pollset_windows.c
index 626dd78..5540303 100644
--- a/src/core/lib/iomgr/pollset_windows.c
+++ b/src/core/lib/iomgr/pollset_windows.c
@@ -31,9 +31,9 @@
  *
  */
 
-#include <grpc/support/port_platform.h>
+#include "src/core/lib/iomgr/port.h"
 
-#ifdef GPR_WINSOCK_SOCKET
+#ifdef GRPC_WINSOCK_SOCKET
 
 #include <grpc/support/log.h>
 #include <grpc/support/thd.h>
@@ -241,4 +241,4 @@
 
 void grpc_kick_poller(void) { grpc_iocp_kick(); }
 
-#endif /* GPR_WINSOCK_SOCKET */
+#endif /* GRPC_WINSOCK_SOCKET */
diff --git a/src/core/lib/iomgr/port.h b/src/core/lib/iomgr/port.h
new file mode 100644
index 0000000..c0bb3b5
--- /dev/null
+++ b/src/core/lib/iomgr/port.h
@@ -0,0 +1,131 @@
+/*
+ *
+ * Copyright 2016, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ *     * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+#include <grpc/support/port_platform.h>
+
+#ifndef GRPC_CORE_LIB_IOMGR_PORT_H
+#define GRPC_CORE_LIB_IOMGR_PORT_H
+
+#if defined(GRPC_UV)
+// Do nothing
+#elif defined(GPR_MANYLINUX1)
+#define GRPC_HAVE_IPV6_RECVPKTINFO 1
+#define GRPC_HAVE_IP_PKTINFO 1
+#define GRPC_HAVE_MSG_NOSIGNAL 1
+#define GRPC_HAVE_UNIX_SOCKET 1
+#define GRPC_POSIX_NO_SPECIAL_WAKEUP_FD 1
+#define GRPC_POSIX_SOCKET 1
+#define GRPC_POSIX_SOCKETADDR 1
+#define GRPC_POSIX_SOCKETUTILS 1
+#define GRPC_POSIX_WAKEUP_FD 1
+#define GRPC_TIMER_USE_GENERIC 1
+#elif defined(GPR_WINDOWS)
+#define GRPC_TIMER_USE_GENERIC 1
+#define GRPC_WINSOCK_SOCKET 1
+#define GRPC_WINDOWS_SOCKETUTILS 1
+#elif defined(GPR_ANDROID)
+#define GRPC_HAVE_IPV6_RECVPKTINFO 1
+#define GRPC_HAVE_IP_PKTINFO 1
+#define GRPC_HAVE_MSG_NOSIGNAL 1
+#define GRPC_HAVE_UNIX_SOCKET 1
+#define GRPC_LINUX_EVENTFD 1
+#define GRPC_POSIX_SOCKET 1
+#define GRPC_POSIX_SOCKETADDR 1
+#define GRPC_POSIX_SOCKETUTILS 1
+#define GRPC_POSIX_WAKEUP_FD 1
+#define GRPC_TIMER_USE_GENERIC 1
+#elif defined(GPR_LINUX)
+#define GRPC_HAVE_IPV6_RECVPKTINFO 1
+#define GRPC_HAVE_IP_PKTINFO 1
+#define GRPC_HAVE_MSG_NOSIGNAL 1
+#define GRPC_HAVE_UNIX_SOCKET 1
+#define GRPC_LINUX_MULTIPOLL_WITH_EPOLL 1
+#define GRPC_POSIX_SOCKET 1
+#define GRPC_POSIX_SOCKETADDR 1
+#define GRPC_POSIX_WAKEUP_FD 1
+#define GRPC_TIMER_USE_GENERIC 1
+#ifdef __GLIBC_PREREQ
+#if __GLIBC_PREREQ(2, 9)
+#define GRPC_LINUX_EPOLL 1
+#define GRPC_LINUX_EVENTFD 1
+#endif
+#if __GLIBC_PREREQ(2, 10)
+#define GRPC_LINUX_SOCKETUTILS 1
+#endif
+#endif
+#ifndef GRPC_LINUX_EVENTFD
+#define GRPC_POSIX_NO_SPECIAL_WAKEUP_FD 1
+#endif
+#ifndef GRPC_LINUX_SOCKETUTILS
+#define GRPC_POSIX_SOCKETUTILS
+#endif
+#elif defined(GPR_APPLE)
+#define GRPC_HAVE_IP_PKTINFO 1
+#define GRPC_HAVE_SO_NOSIGPIPE 1
+#define GRPC_HAVE_UNIX_SOCKET 1
+#define GRPC_MSG_IOVLEN_TYPE int
+#define GRPC_POSIX_NO_SPECIAL_WAKEUP_FD 1
+#define GRPC_POSIX_SOCKET 1
+#define GRPC_POSIX_SOCKETADDR 1
+#define GRPC_POSIX_SOCKETUTILS 1
+#define GRPC_POSIX_WAKEUP_FD 1
+#define GRPC_TIMER_USE_GENERIC 1
+#elif defined(GPR_FREEBSD)
+#define GRPC_HAVE_IPV6_RECVPKTINFO 1
+#define GRPC_HAVE_IP_PKTINFO 1
+#define GRPC_HAVE_SO_NOSIGPIPE 1
+#define GRPC_HAVE_UNIX_SOCKET 1
+#define GRPC_POSIX_NO_SPECIAL_WAKEUP_FD 1
+#define GRPC_POSIX_SOCKET 1
+#define GRPC_POSIX_SOCKETADDR 1
+#define GRPC_POSIX_SOCKETUTILS 1
+#define GRPC_POSIX_WAKEUP_FD 1
+#define GRPC_TIMER_USE_GENERIC 1
+#elif defined(GPR_NACL)
+#define GRPC_POSIX_NO_SPECIAL_WAKEUP_FD 1
+#define GRPC_POSIX_SOCKET 1
+#define GRPC_POSIX_SOCKETADDR 1
+#define GRPC_POSIX_SOCKETUTILS 1
+#define GRPC_POSIX_WAKEUP_FD 1
+#define GRPC_TIMER_USE_GENERIC 1
+#elif !defined(GPR_NO_AUTODETECT_PLATFORM)
+#error "Platform not recognized"
+#endif
+
+#if defined(GRPC_POSIX_SOCKET) + defined(GRPC_WINSOCK_SOCKET) + \
+        defined(GRPC_CUSTOM_SOCKET) + defined(GRPC_UV) !=       \
+    1
+#error Must define exactly one of GRPC_POSIX_SOCKET, GRPC_WINSOCK_SOCKET, GPR_CUSTOM_SOCKET
+#endif
+
+#endif /* GRPC_CORE_LIB_IOMGR_PORT_H */
diff --git a/src/core/lib/iomgr/resolve_address.h b/src/core/lib/iomgr/resolve_address.h
index ddbe375..2759244 100644
--- a/src/core/lib/iomgr/resolve_address.h
+++ b/src/core/lib/iomgr/resolve_address.h
@@ -36,7 +36,6 @@
 
 #include <stddef.h>
 #include "src/core/lib/iomgr/exec_ctx.h"
-#include "src/core/lib/iomgr/iomgr.h"
 
 #define GRPC_MAX_SOCKADDR_SIZE 128
 
diff --git a/src/core/lib/iomgr/resolve_address_posix.c b/src/core/lib/iomgr/resolve_address_posix.c
index 4e9f978..de791b2 100644
--- a/src/core/lib/iomgr/resolve_address_posix.c
+++ b/src/core/lib/iomgr/resolve_address_posix.c
@@ -31,11 +31,12 @@
  *
  */
 
-#include <grpc/support/port_platform.h>
-#ifdef GPR_POSIX_SOCKET
+#include "src/core/lib/iomgr/port.h"
+#ifdef GRPC_POSIX_SOCKET
+
+#include "src/core/lib/iomgr/sockaddr.h"
 
 #include "src/core/lib/iomgr/resolve_address.h"
-#include "src/core/lib/iomgr/sockaddr.h"
 
 #include <string.h>
 #include <sys/types.h>
@@ -49,7 +50,6 @@
 #include <grpc/support/useful.h>
 #include "src/core/lib/iomgr/executor.h"
 #include "src/core/lib/iomgr/iomgr_internal.h"
-#include "src/core/lib/iomgr/sockaddr_utils.h"
 #include "src/core/lib/iomgr/unix_sockets_posix.h"
 #include "src/core/lib/support/block_annotate.h"
 #include "src/core/lib/support/string.h"
diff --git a/src/core/lib/iomgr/resolve_address_uv.c b/src/core/lib/iomgr/resolve_address_uv.c
new file mode 100644
index 0000000..b8295ac
--- /dev/null
+++ b/src/core/lib/iomgr/resolve_address_uv.c
@@ -0,0 +1,231 @@
+/*
+ *
+ * Copyright 2016, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ *     * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+#include "src/core/lib/iomgr/port.h"
+#ifdef GRPC_UV
+
+#include <uv.h>
+
+#include <grpc/support/alloc.h>
+#include <grpc/support/host_port.h>
+#include <grpc/support/log.h>
+#include <grpc/support/string_util.h>
+
+#include "src/core/lib/iomgr/closure.h"
+#include "src/core/lib/iomgr/error.h"
+#include "src/core/lib/iomgr/exec_ctx.h"
+#include "src/core/lib/iomgr/resolve_address.h"
+#include "src/core/lib/iomgr/sockaddr.h"
+#include "src/core/lib/iomgr/sockaddr_utils.h"
+
+#include <string.h>
+
+typedef struct request {
+  grpc_closure *on_done;
+  grpc_resolved_addresses **addresses;
+  struct addrinfo *hints;
+} request;
+
+static grpc_error *handle_addrinfo_result(int status, struct addrinfo *result,
+                                          grpc_resolved_addresses **addresses) {
+  struct addrinfo *resp;
+  size_t i;
+  if (status != 0) {
+    grpc_error *error;
+    *addresses = NULL;
+    error = GRPC_ERROR_CREATE("getaddrinfo failed");
+    error =
+        grpc_error_set_str(error, GRPC_ERROR_STR_OS_ERROR, uv_strerror(status));
+    return error;
+  }
+  (*addresses) = gpr_malloc(sizeof(grpc_resolved_addresses));
+  (*addresses)->naddrs = 0;
+  for (resp = result; resp != NULL; resp = resp->ai_next) {
+    (*addresses)->naddrs++;
+  }
+  (*addresses)->addrs =
+      gpr_malloc(sizeof(grpc_resolved_address) * (*addresses)->naddrs);
+  i = 0;
+  for (resp = result; resp != NULL; resp = resp->ai_next) {
+    memcpy(&(*addresses)->addrs[i].addr, resp->ai_addr, resp->ai_addrlen);
+    (*addresses)->addrs[i].len = resp->ai_addrlen;
+    i++;
+  }
+
+  {
+    for (i = 0; i < (*addresses)->naddrs; i++) {
+      char *buf;
+      grpc_sockaddr_to_string(&buf, &(*addresses)->addrs[i], 0);
+      gpr_free(buf);
+    }
+  }
+  return GRPC_ERROR_NONE;
+}
+
+static void getaddrinfo_callback(uv_getaddrinfo_t *req, int status,
+                                 struct addrinfo *res) {
+  request *r = (request *)req->data;
+  grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
+  grpc_error *error;
+  error = handle_addrinfo_result(status, res, r->addresses);
+  grpc_exec_ctx_sched(&exec_ctx, r->on_done, error, NULL);
+  grpc_exec_ctx_finish(&exec_ctx);
+
+  gpr_free(r->hints);
+  gpr_free(r);
+  gpr_free(req);
+  uv_freeaddrinfo(res);
+}
+
+static grpc_error *try_split_host_port(const char *name,
+                                       const char *default_port, char **host,
+                                       char **port) {
+  /* parse name, splitting it into host and port parts */
+  grpc_error *error;
+  gpr_split_host_port(name, host, port);
+  if (host == NULL) {
+    char *msg;
+    gpr_asprintf(&msg, "unparseable host:port: '%s'", name);
+    error = GRPC_ERROR_CREATE(msg);
+    gpr_free(msg);
+    return error;
+  }
+  if (port == NULL) {
+    if (default_port == NULL) {
+      char *msg;
+      gpr_asprintf(&msg, "no port in name '%s'", name);
+      error = GRPC_ERROR_CREATE(msg);
+      gpr_free(msg);
+      return error;
+    }
+    *port = gpr_strdup(default_port);
+  }
+  return GRPC_ERROR_NONE;
+}
+
+static grpc_error *blocking_resolve_address_impl(
+    const char *name, const char *default_port,
+    grpc_resolved_addresses **addresses) {
+  char *host;
+  char *port;
+  struct addrinfo hints;
+  uv_getaddrinfo_t req;
+  int s;
+  grpc_error *err;
+
+  req.addrinfo = NULL;
+
+  err = try_split_host_port(name, default_port, &host, &port);
+  if (err != GRPC_ERROR_NONE) {
+    goto done;
+  }
+
+  /* Call getaddrinfo */
+  memset(&hints, 0, sizeof(hints));
+  hints.ai_family = AF_UNSPEC;     /* ipv4 or ipv6 */
+  hints.ai_socktype = SOCK_STREAM; /* stream socket */
+  hints.ai_flags = AI_PASSIVE;     /* for wildcard IP address */
+
+  s = uv_getaddrinfo(uv_default_loop(), &req, NULL, host, port, &hints);
+  err = handle_addrinfo_result(s, req.addrinfo, addresses);
+
+done:
+  gpr_free(host);
+  gpr_free(port);
+  if (req.addrinfo) {
+    uv_freeaddrinfo(req.addrinfo);
+  }
+  return err;
+}
+
+grpc_error *(*grpc_blocking_resolve_address)(
+    const char *name, const char *default_port,
+    grpc_resolved_addresses **addresses) = blocking_resolve_address_impl;
+
+void grpc_resolved_addresses_destroy(grpc_resolved_addresses *addrs) {
+  if (addrs != NULL) {
+    gpr_free(addrs->addrs);
+  }
+  gpr_free(addrs);
+}
+
+static void resolve_address_impl(grpc_exec_ctx *exec_ctx, const char *name,
+                                 const char *default_port,
+                                 grpc_closure *on_done,
+                                 grpc_resolved_addresses **addrs) {
+  uv_getaddrinfo_t *req;
+  request *r;
+  struct addrinfo *hints;
+  char *host;
+  char *port;
+  grpc_error *err;
+  int s;
+  err = try_split_host_port(name, default_port, &host, &port);
+  if (err != GRPC_ERROR_NONE) {
+    grpc_exec_ctx_sched(exec_ctx, on_done, err, NULL);
+    return;
+  }
+  r = gpr_malloc(sizeof(request));
+  r->on_done = on_done;
+  r->addresses = addrs;
+  req = gpr_malloc(sizeof(uv_getaddrinfo_t));
+  req->data = r;
+
+  /* Call getaddrinfo */
+  hints = gpr_malloc(sizeof(struct addrinfo));
+  memset(hints, 0, sizeof(struct addrinfo));
+  hints->ai_family = AF_UNSPEC;     /* ipv4 or ipv6 */
+  hints->ai_socktype = SOCK_STREAM; /* stream socket */
+  hints->ai_flags = AI_PASSIVE;     /* for wildcard IP address */
+  r->hints = hints;
+
+  s = uv_getaddrinfo(uv_default_loop(), req, getaddrinfo_callback, host, port,
+                     hints);
+
+  if (s != 0) {
+    *addrs = NULL;
+    err = GRPC_ERROR_CREATE("getaddrinfo failed");
+    err = grpc_error_set_str(err, GRPC_ERROR_STR_OS_ERROR, uv_strerror(s));
+    grpc_exec_ctx_sched(exec_ctx, on_done, err, NULL);
+    gpr_free(r);
+    gpr_free(req);
+    gpr_free(hints);
+  }
+}
+
+void (*grpc_resolve_address)(grpc_exec_ctx *exec_ctx, const char *name,
+                             const char *default_port, grpc_closure *on_done,
+                             grpc_resolved_addresses **addrs) =
+    resolve_address_impl;
+
+#endif /* GRPC_UV */
diff --git a/src/core/lib/iomgr/resolve_address_windows.c b/src/core/lib/iomgr/resolve_address_windows.c
index 2af8af8..e139293 100644
--- a/src/core/lib/iomgr/resolve_address_windows.c
+++ b/src/core/lib/iomgr/resolve_address_windows.c
@@ -31,11 +31,12 @@
  *
  */
 
-#include <grpc/support/port_platform.h>
-#ifdef GPR_WINSOCK_SOCKET
+#include "src/core/lib/iomgr/port.h"
+#ifdef GRPC_WINSOCK_SOCKET
+
+#include "src/core/lib/iomgr/sockaddr.h"
 
 #include "src/core/lib/iomgr/resolve_address.h"
-#include "src/core/lib/iomgr/sockaddr.h"
 
 #include <string.h>
 #include <sys/types.h>
@@ -124,8 +125,7 @@
   {
     for (i = 0; i < (*addresses)->naddrs; i++) {
       char *buf;
-      grpc_sockaddr_to_string(
-          &buf, (struct sockaddr *)&(*addresses)->addrs[i].addr, 0);
+      grpc_sockaddr_to_string(&buf, &(*addresses)->addrs[i], 0);
       gpr_free(buf);
     }
   }
diff --git a/src/core/lib/iomgr/sockaddr.h b/src/core/lib/iomgr/sockaddr.h
index 5563d0b..52b5043 100644
--- a/src/core/lib/iomgr/sockaddr.h
+++ b/src/core/lib/iomgr/sockaddr.h
@@ -31,16 +31,24 @@
  *
  */
 
+/* This header transitively includes other headers that care about include
+ * order, so it should be included first. As a consequence, it should not be
+ * included in any other header. */
+
 #ifndef GRPC_CORE_LIB_IOMGR_SOCKADDR_H
 #define GRPC_CORE_LIB_IOMGR_SOCKADDR_H
 
-#include <grpc/support/port_platform.h>
+#include "src/core/lib/iomgr/port.h"
+
+#ifdef GRPC_UV
+#include <uv.h>
+#endif
 
 #ifdef GPR_WINDOWS
 #include "src/core/lib/iomgr/sockaddr_windows.h"
 #endif
 
-#ifdef GPR_POSIX_SOCKETADDR
+#ifdef GRPC_POSIX_SOCKETADDR
 #include "src/core/lib/iomgr/sockaddr_posix.h"
 #endif
 
diff --git a/src/core/lib/iomgr/sockaddr_utils.c b/src/core/lib/iomgr/sockaddr_utils.c
index 127d95c..44bc2f9 100644
--- a/src/core/lib/iomgr/sockaddr_utils.c
+++ b/src/core/lib/iomgr/sockaddr_utils.c
@@ -42,26 +42,32 @@
 #include <grpc/support/port_platform.h>
 #include <grpc/support/string_util.h>
 
+#include "src/core/lib/iomgr/sockaddr.h"
+#include "src/core/lib/iomgr/socket_utils.h"
 #include "src/core/lib/iomgr/unix_sockets_posix.h"
 #include "src/core/lib/support/string.h"
 
 static const uint8_t kV4MappedPrefix[] = {0, 0, 0, 0, 0,    0,
                                           0, 0, 0, 0, 0xff, 0xff};
 
-int grpc_sockaddr_is_v4mapped(const struct sockaddr *addr,
-                              struct sockaddr_in *addr4_out) {
-  GPR_ASSERT(addr != (struct sockaddr *)addr4_out);
+int grpc_sockaddr_is_v4mapped(const grpc_resolved_address *resolved_addr,
+                              grpc_resolved_address *resolved_addr4_out) {
+  GPR_ASSERT(resolved_addr != resolved_addr4_out);
+  const struct sockaddr *addr = (const struct sockaddr *)resolved_addr->addr;
+  struct sockaddr_in *addr4_out =
+      (struct sockaddr_in *)resolved_addr4_out->addr;
   if (addr->sa_family == AF_INET6) {
     const struct sockaddr_in6 *addr6 = (const struct sockaddr_in6 *)addr;
     if (memcmp(addr6->sin6_addr.s6_addr, kV4MappedPrefix,
                sizeof(kV4MappedPrefix)) == 0) {
-      if (addr4_out != NULL) {
+      if (resolved_addr4_out != NULL) {
         /* Normalize ::ffff:0.0.0.0/96 to IPv4. */
-        memset(addr4_out, 0, sizeof(*addr4_out));
+        memset(resolved_addr4_out, 0, sizeof(*resolved_addr4_out));
         addr4_out->sin_family = AF_INET;
         /* s6_addr32 would be nice, but it's non-standard. */
         memcpy(&addr4_out->sin_addr, &addr6->sin6_addr.s6_addr[12], 4);
         addr4_out->sin_port = addr6->sin6_port;
+        resolved_addr4_out->len = sizeof(struct sockaddr_in);
       }
       return 1;
     }
@@ -69,26 +75,33 @@
   return 0;
 }
 
-int grpc_sockaddr_to_v4mapped(const struct sockaddr *addr,
-                              struct sockaddr_in6 *addr6_out) {
-  GPR_ASSERT(addr != (struct sockaddr *)addr6_out);
+int grpc_sockaddr_to_v4mapped(const grpc_resolved_address *resolved_addr,
+                              grpc_resolved_address *resolved_addr6_out) {
+  GPR_ASSERT(resolved_addr != resolved_addr6_out);
+  const struct sockaddr *addr = (const struct sockaddr *)resolved_addr->addr;
+  struct sockaddr_in6 *addr6_out =
+      (struct sockaddr_in6 *)resolved_addr6_out->addr;
   if (addr->sa_family == AF_INET) {
     const struct sockaddr_in *addr4 = (const struct sockaddr_in *)addr;
-    memset(addr6_out, 0, sizeof(*addr6_out));
+    memset(resolved_addr6_out, 0, sizeof(*resolved_addr6_out));
     addr6_out->sin6_family = AF_INET6;
     memcpy(&addr6_out->sin6_addr.s6_addr[0], kV4MappedPrefix, 12);
     memcpy(&addr6_out->sin6_addr.s6_addr[12], &addr4->sin_addr, 4);
     addr6_out->sin6_port = addr4->sin_port;
+    resolved_addr6_out->len = sizeof(struct sockaddr_in6);
     return 1;
   }
   return 0;
 }
 
-int grpc_sockaddr_is_wildcard(const struct sockaddr *addr, int *port_out) {
-  struct sockaddr_in addr4_normalized;
-  if (grpc_sockaddr_is_v4mapped(addr, &addr4_normalized)) {
-    addr = (struct sockaddr *)&addr4_normalized;
+int grpc_sockaddr_is_wildcard(const grpc_resolved_address *resolved_addr,
+                              int *port_out) {
+  const struct sockaddr *addr;
+  grpc_resolved_address addr4_normalized;
+  if (grpc_sockaddr_is_v4mapped(resolved_addr, &addr4_normalized)) {
+    resolved_addr = &addr4_normalized;
   }
+  addr = (const struct sockaddr *)resolved_addr->addr;
   if (addr->sa_family == AF_INET) {
     /* Check for 0.0.0.0 */
     const struct sockaddr_in *addr4 = (const struct sockaddr_in *)addr;
@@ -113,39 +126,49 @@
   }
 }
 
-void grpc_sockaddr_make_wildcards(int port, struct sockaddr_in *wild4_out,
-                                  struct sockaddr_in6 *wild6_out) {
+void grpc_sockaddr_make_wildcards(int port, grpc_resolved_address *wild4_out,
+                                  grpc_resolved_address *wild6_out) {
   grpc_sockaddr_make_wildcard4(port, wild4_out);
   grpc_sockaddr_make_wildcard6(port, wild6_out);
 }
 
-void grpc_sockaddr_make_wildcard4(int port, struct sockaddr_in *wild_out) {
+void grpc_sockaddr_make_wildcard4(int port,
+                                  grpc_resolved_address *resolved_wild_out) {
+  struct sockaddr_in *wild_out = (struct sockaddr_in *)resolved_wild_out->addr;
   GPR_ASSERT(port >= 0 && port < 65536);
-  memset(wild_out, 0, sizeof(*wild_out));
+  memset(resolved_wild_out, 0, sizeof(*resolved_wild_out));
   wild_out->sin_family = AF_INET;
   wild_out->sin_port = htons((uint16_t)port);
+  resolved_wild_out->len = sizeof(struct sockaddr_in);
 }
 
-void grpc_sockaddr_make_wildcard6(int port, struct sockaddr_in6 *wild_out) {
+void grpc_sockaddr_make_wildcard6(int port,
+                                  grpc_resolved_address *resolved_wild_out) {
+  struct sockaddr_in6 *wild_out =
+      (struct sockaddr_in6 *)resolved_wild_out->addr;
   GPR_ASSERT(port >= 0 && port < 65536);
-  memset(wild_out, 0, sizeof(*wild_out));
+  memset(resolved_wild_out, 0, sizeof(*resolved_wild_out));
   wild_out->sin6_family = AF_INET6;
   wild_out->sin6_port = htons((uint16_t)port);
+  resolved_wild_out->len = sizeof(struct sockaddr_in6);
 }
 
-int grpc_sockaddr_to_string(char **out, const struct sockaddr *addr,
+int grpc_sockaddr_to_string(char **out,
+                            const grpc_resolved_address *resolved_addr,
                             int normalize) {
+  const struct sockaddr *addr;
   const int save_errno = errno;
-  struct sockaddr_in addr_normalized;
+  grpc_resolved_address addr_normalized;
   char ntop_buf[INET6_ADDRSTRLEN];
   const void *ip = NULL;
   int port;
   int ret;
 
   *out = NULL;
-  if (normalize && grpc_sockaddr_is_v4mapped(addr, &addr_normalized)) {
-    addr = (const struct sockaddr *)&addr_normalized;
+  if (normalize && grpc_sockaddr_is_v4mapped(resolved_addr, &addr_normalized)) {
+    resolved_addr = &addr_normalized;
   }
+  addr = (const struct sockaddr *)resolved_addr->addr;
   if (addr->sa_family == AF_INET) {
     const struct sockaddr_in *addr4 = (const struct sockaddr_in *)addr;
     ip = &addr4->sin_addr;
@@ -155,10 +178,8 @@
     ip = &addr6->sin6_addr;
     port = ntohs(addr6->sin6_port);
   }
-  /* Windows inet_ntop wants a mutable ip pointer */
   if (ip != NULL &&
-      inet_ntop(addr->sa_family, (void *)ip, ntop_buf, sizeof(ntop_buf)) !=
-          NULL) {
+      grpc_inet_ntop(addr->sa_family, ip, ntop_buf, sizeof(ntop_buf)) != NULL) {
     ret = gpr_join_host_port(out, ntop_buf, port);
   } else {
     ret = gpr_asprintf(out, "(sockaddr family=%d)", addr->sa_family);
@@ -168,39 +189,43 @@
   return ret;
 }
 
-char *grpc_sockaddr_to_uri(const struct sockaddr *addr) {
+char *grpc_sockaddr_to_uri(const grpc_resolved_address *resolved_addr) {
   char *temp;
   char *result;
-  struct sockaddr_in addr_normalized;
+  grpc_resolved_address addr_normalized;
+  const struct sockaddr *addr;
 
-  if (grpc_sockaddr_is_v4mapped(addr, &addr_normalized)) {
-    addr = (const struct sockaddr *)&addr_normalized;
+  if (grpc_sockaddr_is_v4mapped(resolved_addr, &addr_normalized)) {
+    resolved_addr = &addr_normalized;
   }
 
+  addr = (const struct sockaddr *)resolved_addr->addr;
+
   switch (addr->sa_family) {
     case AF_INET:
-      grpc_sockaddr_to_string(&temp, addr, 0);
+      grpc_sockaddr_to_string(&temp, resolved_addr, 0);
       gpr_asprintf(&result, "ipv4:%s", temp);
       gpr_free(temp);
       return result;
     case AF_INET6:
-      grpc_sockaddr_to_string(&temp, addr, 0);
+      grpc_sockaddr_to_string(&temp, resolved_addr, 0);
       gpr_asprintf(&result, "ipv6:%s", temp);
       gpr_free(temp);
       return result;
     default:
-      return grpc_sockaddr_to_uri_unix_if_possible(addr);
+      return grpc_sockaddr_to_uri_unix_if_possible(resolved_addr);
   }
 }
 
-int grpc_sockaddr_get_port(const struct sockaddr *addr) {
+int grpc_sockaddr_get_port(const grpc_resolved_address *resolved_addr) {
+  const struct sockaddr *addr = (const struct sockaddr *)resolved_addr->addr;
   switch (addr->sa_family) {
     case AF_INET:
       return ntohs(((struct sockaddr_in *)addr)->sin_port);
     case AF_INET6:
       return ntohs(((struct sockaddr_in6 *)addr)->sin6_port);
     default:
-      if (grpc_is_unix_socket(addr)) {
+      if (grpc_is_unix_socket(resolved_addr)) {
         return 1;
       }
       gpr_log(GPR_ERROR, "Unknown socket family %d in grpc_sockaddr_get_port",
@@ -209,7 +234,9 @@
   }
 }
 
-int grpc_sockaddr_set_port(const struct sockaddr *addr, int port) {
+int grpc_sockaddr_set_port(const grpc_resolved_address *resolved_addr,
+                           int port) {
+  const struct sockaddr *addr = (const struct sockaddr *)resolved_addr->addr;
   switch (addr->sa_family) {
     case AF_INET:
       GPR_ASSERT(port >= 0 && port < 65536);
diff --git a/src/core/lib/iomgr/sockaddr_utils.h b/src/core/lib/iomgr/sockaddr_utils.h
index 9f81992..5371e36 100644
--- a/src/core/lib/iomgr/sockaddr_utils.h
+++ b/src/core/lib/iomgr/sockaddr_utils.h
@@ -34,40 +34,40 @@
 #ifndef GRPC_CORE_LIB_IOMGR_SOCKADDR_UTILS_H
 #define GRPC_CORE_LIB_IOMGR_SOCKADDR_UTILS_H
 
-#include "src/core/lib/iomgr/sockaddr.h"
+#include "src/core/lib/iomgr/resolve_address.h"
 
 /* Returns true if addr is an IPv4-mapped IPv6 address within the
    ::ffff:0.0.0.0/96 range, or false otherwise.
 
    If addr4_out is non-NULL, the inner IPv4 address will be copied here when
    returning true. */
-int grpc_sockaddr_is_v4mapped(const struct sockaddr *addr,
-                              struct sockaddr_in *addr4_out);
+int grpc_sockaddr_is_v4mapped(const grpc_resolved_address *addr,
+                              grpc_resolved_address *addr4_out);
 
 /* If addr is an AF_INET address, writes the corresponding ::ffff:0.0.0.0/96
    address to addr6_out and returns true.  Otherwise returns false. */
-int grpc_sockaddr_to_v4mapped(const struct sockaddr *addr,
-                              struct sockaddr_in6 *addr6_out);
+int grpc_sockaddr_to_v4mapped(const grpc_resolved_address *addr,
+                              grpc_resolved_address *addr6_out);
 
 /* If addr is ::, 0.0.0.0, or ::ffff:0.0.0.0, writes the port number to
    *port_out (if not NULL) and returns true, otherwise returns false. */
-int grpc_sockaddr_is_wildcard(const struct sockaddr *addr, int *port_out);
+int grpc_sockaddr_is_wildcard(const grpc_resolved_address *addr, int *port_out);
 
 /* Writes 0.0.0.0:port and [::]:port to separate sockaddrs. */
-void grpc_sockaddr_make_wildcards(int port, struct sockaddr_in *wild4_out,
-                                  struct sockaddr_in6 *wild6_out);
+void grpc_sockaddr_make_wildcards(int port, grpc_resolved_address *wild4_out,
+                                  grpc_resolved_address *wild6_out);
 
 /* Writes 0.0.0.0:port. */
-void grpc_sockaddr_make_wildcard4(int port, struct sockaddr_in *wild_out);
+void grpc_sockaddr_make_wildcard4(int port, grpc_resolved_address *wild_out);
 
 /* Writes [::]:port. */
-void grpc_sockaddr_make_wildcard6(int port, struct sockaddr_in6 *wild_out);
+void grpc_sockaddr_make_wildcard6(int port, grpc_resolved_address *wild_out);
 
 /* Return the IP port number of a sockaddr */
-int grpc_sockaddr_get_port(const struct sockaddr *addr);
+int grpc_sockaddr_get_port(const grpc_resolved_address *addr);
 
 /* Set IP port number of a sockaddr */
-int grpc_sockaddr_set_port(const struct sockaddr *addr, int port);
+int grpc_sockaddr_set_port(const grpc_resolved_address *addr, int port);
 
 /* Converts a sockaddr into a newly-allocated human-readable string.
 
@@ -81,9 +81,9 @@
 
    In the unlikely event of an error, returns -1 and sets *out to NULL.
    The existing value of errno is always preserved. */
-int grpc_sockaddr_to_string(char **out, const struct sockaddr *addr,
+int grpc_sockaddr_to_string(char **out, const grpc_resolved_address *addr,
                             int normalize);
 
-char *grpc_sockaddr_to_uri(const struct sockaddr *addr);
+char *grpc_sockaddr_to_uri(const grpc_resolved_address *addr);
 
 #endif /* GRPC_CORE_LIB_IOMGR_SOCKADDR_UTILS_H */
diff --git a/src/core/ext/client_config/default_initial_connect_string.c b/src/core/lib/iomgr/socket_utils.h
similarity index 82%
copy from src/core/ext/client_config/default_initial_connect_string.c
copy to src/core/lib/iomgr/socket_utils.h
index a70da4a..cc3ee2e 100644
--- a/src/core/ext/client_config/default_initial_connect_string.c
+++ b/src/core/lib/iomgr/socket_utils.h
@@ -31,9 +31,12 @@
  *
  */
 
-#include <grpc/support/slice.h>
-#include "src/core/lib/iomgr/sockaddr.h"
+#ifndef GRPC_CORE_LIB_IOMGR_SOCKET_UTILS_H
+#define GRPC_CORE_LIB_IOMGR_SOCKET_UTILS_H
 
-void grpc_set_default_initial_connect_string(struct sockaddr **addr,
-                                             size_t *addr_len,
-                                             gpr_slice *initial_str) {}
+#include <stddef.h>
+
+/* A wrapper for inet_ntop on POSIX systems and InetNtop on Windows systems */
+const char *grpc_inet_ntop(int af, const void *src, char *dst, size_t size);
+
+#endif /* GRPC_CORE_LIB_IOMGR_SOCKET_UTILS_H */
diff --git a/src/core/lib/iomgr/socket_utils_common_posix.c b/src/core/lib/iomgr/socket_utils_common_posix.c
index d2f6261..bc28bbe 100644
--- a/src/core/lib/iomgr/socket_utils_common_posix.c
+++ b/src/core/lib/iomgr/socket_utils_common_posix.c
@@ -31,10 +31,11 @@
  *
  */
 
-#include <grpc/support/port_platform.h>
+#include "src/core/lib/iomgr/port.h"
 
-#ifdef GPR_POSIX_SOCKET
+#ifdef GRPC_POSIX_SOCKET
 
+#include "src/core/lib/iomgr/socket_utils.h"
 #include "src/core/lib/iomgr/socket_utils_posix.h"
 
 #include <arpa/inet.h>
@@ -78,7 +79,7 @@
 }
 
 grpc_error *grpc_set_socket_no_sigpipe_if_possible(int fd) {
-#ifdef GPR_HAVE_SO_NOSIGPIPE
+#ifdef GRPC_HAVE_SO_NOSIGPIPE
   int val = 1;
   int newval;
   socklen_t intlen = sizeof(newval);
@@ -96,7 +97,7 @@
 }
 
 grpc_error *grpc_set_socket_ip_pktinfo_if_possible(int fd) {
-#ifdef GPR_HAVE_IP_PKTINFO
+#ifdef GRPC_HAVE_IP_PKTINFO
   int get_local_ip = 1;
   if (0 != setsockopt(fd, IPPROTO_IP, IP_PKTINFO, &get_local_ip,
                       sizeof(get_local_ip))) {
@@ -107,7 +108,7 @@
 }
 
 grpc_error *grpc_set_socket_ipv6_recvpktinfo_if_possible(int fd) {
-#ifdef GPR_HAVE_IPV6_RECVPKTINFO
+#ifdef GRPC_HAVE_IPV6_RECVPKTINFO
   int get_local_ip = 1;
   if (0 != setsockopt(fd, IPPROTO_IPV6, IPV6_RECVPKTINFO, &get_local_ip,
                       sizeof(get_local_ip))) {
@@ -253,7 +254,7 @@
   }
 }
 
-static grpc_error *error_for_fd(int fd, const struct sockaddr *addr) {
+static grpc_error *error_for_fd(int fd, const grpc_resolved_address *addr) {
   if (fd >= 0) return GRPC_ERROR_NONE;
   char *addr_str;
   grpc_sockaddr_to_string(&addr_str, addr, 0);
@@ -263,10 +264,10 @@
   return err;
 }
 
-grpc_error *grpc_create_dualstack_socket(const struct sockaddr *addr, int type,
-                                         int protocol,
-                                         grpc_dualstack_mode *dsmode,
-                                         int *newfd) {
+grpc_error *grpc_create_dualstack_socket(
+    const grpc_resolved_address *resolved_addr, int type, int protocol,
+    grpc_dualstack_mode *dsmode, int *newfd) {
+  const struct sockaddr *addr = (const struct sockaddr *)resolved_addr->addr;
   int family = addr->sa_family;
   if (family == AF_INET6) {
     if (grpc_ipv6_loopback_available()) {
@@ -281,9 +282,9 @@
       return GRPC_ERROR_NONE;
     }
     /* If this isn't an IPv4 address, then return whatever we've got. */
-    if (!grpc_sockaddr_is_v4mapped(addr, NULL)) {
+    if (!grpc_sockaddr_is_v4mapped(resolved_addr, NULL)) {
       *dsmode = GRPC_DSMODE_IPV6;
-      return error_for_fd(*newfd, addr);
+      return error_for_fd(*newfd, resolved_addr);
     }
     /* Fall back to AF_INET. */
     if (*newfd >= 0) {
@@ -293,7 +294,12 @@
   }
   *dsmode = family == AF_INET ? GRPC_DSMODE_IPV4 : GRPC_DSMODE_NONE;
   *newfd = socket(family, type, protocol);
-  return error_for_fd(*newfd, addr);
+  return error_for_fd(*newfd, resolved_addr);
+}
+
+const char *grpc_inet_ntop(int af, const void *src, char *dst, size_t size) {
+  GPR_ASSERT(size <= (socklen_t)-1);
+  return inet_ntop(af, src, dst, (socklen_t)size);
 }
 
 #endif
diff --git a/src/core/lib/iomgr/socket_utils_linux.c b/src/core/lib/iomgr/socket_utils_linux.c
index 144e311..bf6e9e4 100644
--- a/src/core/lib/iomgr/socket_utils_linux.c
+++ b/src/core/lib/iomgr/socket_utils_linux.c
@@ -31,21 +31,27 @@
  *
  */
 
-#include <grpc/support/port_platform.h>
+#include "src/core/lib/iomgr/port.h"
 
-#ifdef GPR_LINUX_SOCKETUTILS
+#ifdef GRPC_LINUX_SOCKETUTILS
 
+#include "src/core/lib/iomgr/sockaddr.h"
 #include "src/core/lib/iomgr/socket_utils_posix.h"
 
+#include <grpc/support/log.h>
+
 #include <sys/socket.h>
 #include <sys/types.h>
 
-int grpc_accept4(int sockfd, struct sockaddr *addr, socklen_t *addrlen,
-                 int nonblock, int cloexec) {
+int grpc_accept4(int sockfd, grpc_resolved_address *resolved_addr, int nonblock,
+                 int cloexec) {
   int flags = 0;
+  GPR_ASSERT(sizeof(socklen_t) <= sizeof(size_t));
+  GPR_ASSERT(resolved_addr->len <= (socklen_t)-1);
   flags |= nonblock ? SOCK_NONBLOCK : 0;
   flags |= cloexec ? SOCK_CLOEXEC : 0;
-  return accept4(sockfd, addr, addrlen, flags);
+  return accept4(sockfd, (struct sockaddr *)resolved_addr->addr,
+                 (socklen_t *)&resolved_addr->len, flags);
 }
 
 #endif
diff --git a/src/core/lib/iomgr/socket_utils_posix.c b/src/core/lib/iomgr/socket_utils_posix.c
index 57ae64c..9dea0c0 100644
--- a/src/core/lib/iomgr/socket_utils_posix.c
+++ b/src/core/lib/iomgr/socket_utils_posix.c
@@ -31,9 +31,9 @@
  *
  */
 
-#include <grpc/support/port_platform.h>
+#include "src/core/lib/iomgr/port.h"
 
-#ifdef GPR_POSIX_SOCKETUTILS
+#ifdef GRPC_POSIX_SOCKETUTILS
 
 #include "src/core/lib/iomgr/socket_utils_posix.h"
 
@@ -42,12 +42,15 @@
 #include <unistd.h>
 
 #include <grpc/support/log.h>
+#include "src/core/lib/iomgr/sockaddr.h"
 
-int grpc_accept4(int sockfd, struct sockaddr *addr, socklen_t *addrlen,
-                 int nonblock, int cloexec) {
+int grpc_accept4(int sockfd, grpc_resolved_address *resolved_addr, int nonblock,
+                 int cloexec) {
   int fd, flags;
-
-  fd = accept(sockfd, addr, addrlen);
+  GPR_ASSERT(sizeof(socklen_t) <= sizeof(size_t));
+  GPR_ASSERT(resolved_addr->len <= (socklen_t)-1);
+  fd = accept(sockfd, (struct sockaddr *)resolved_addr->addr,
+              (socklen_t *)&resolved_addr->len);
   if (fd >= 0) {
     if (nonblock) {
       flags = fcntl(fd, F_GETFL, 0);
@@ -67,4 +70,4 @@
   return -1;
 }
 
-#endif /* GPR_POSIX_SOCKETUTILS */
+#endif /* GRPC_POSIX_SOCKETUTILS */
diff --git a/src/core/lib/iomgr/socket_utils_posix.h b/src/core/lib/iomgr/socket_utils_posix.h
index 7bcc221..175fb2b 100644
--- a/src/core/lib/iomgr/socket_utils_posix.h
+++ b/src/core/lib/iomgr/socket_utils_posix.h
@@ -34,14 +34,16 @@
 #ifndef GRPC_CORE_LIB_IOMGR_SOCKET_UTILS_POSIX_H
 #define GRPC_CORE_LIB_IOMGR_SOCKET_UTILS_POSIX_H
 
+#include "src/core/lib/iomgr/resolve_address.h"
+
 #include <sys/socket.h>
 #include <unistd.h>
 
 #include "src/core/lib/iomgr/error.h"
 
 /* a wrapper for accept or accept4 */
-int grpc_accept4(int sockfd, struct sockaddr *addr, socklen_t *addrlen,
-                 int nonblock, int cloexec);
+int grpc_accept4(int sockfd, grpc_resolved_address *resolved_addr, int nonblock,
+                 int cloexec);
 
 /* set a socket to non blocking mode */
 grpc_error *grpc_set_socket_nonblocking(int fd, int non_blocking);
@@ -125,8 +127,8 @@
      IPv4, so that bind() or connect() see the correct family.
    Also, it's important to distinguish between DUALSTACK and IPV6 when
    listening on the [::] wildcard address. */
-grpc_error *grpc_create_dualstack_socket(const struct sockaddr *addr, int type,
-                                         int protocol,
+grpc_error *grpc_create_dualstack_socket(const grpc_resolved_address *addr,
+                                         int type, int protocol,
                                          grpc_dualstack_mode *dsmode,
                                          int *newfd);
 
diff --git a/src/core/ext/client_config/default_initial_connect_string.c b/src/core/lib/iomgr/socket_utils_uv.c
similarity index 81%
copy from src/core/ext/client_config/default_initial_connect_string.c
copy to src/core/lib/iomgr/socket_utils_uv.c
index a70da4a..741bf28 100644
--- a/src/core/ext/client_config/default_initial_connect_string.c
+++ b/src/core/lib/iomgr/socket_utils_uv.c
@@ -1,6 +1,6 @@
 /*
  *
- * Copyright 2015, Google Inc.
+ * Copyright 2016, Google Inc.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -31,9 +31,19 @@
  *
  */
 
-#include <grpc/support/slice.h>
-#include "src/core/lib/iomgr/sockaddr.h"
+#include "src/core/lib/iomgr/port.h"
 
-void grpc_set_default_initial_connect_string(struct sockaddr **addr,
-                                             size_t *addr_len,
-                                             gpr_slice *initial_str) {}
+#ifdef GRPC_UV
+
+#include <uv.h>
+
+#include "src/core/lib/iomgr/socket_utils.h"
+
+#include <grpc/support/log.h>
+
+const char *grpc_inet_ntop(int af, const void *src, char *dst, size_t size) {
+  uv_inet_ntop(af, src, dst, size);
+  return dst;
+}
+
+#endif /* GRPC_UV */
diff --git a/src/core/ext/client_config/default_initial_connect_string.c b/src/core/lib/iomgr/socket_utils_windows.c
similarity index 79%
copy from src/core/ext/client_config/default_initial_connect_string.c
copy to src/core/lib/iomgr/socket_utils_windows.c
index a70da4a..628ad4a 100644
--- a/src/core/ext/client_config/default_initial_connect_string.c
+++ b/src/core/lib/iomgr/socket_utils_windows.c
@@ -1,6 +1,6 @@
 /*
  *
- * Copyright 2015, Google Inc.
+ * Copyright 2016, Google Inc.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -31,9 +31,18 @@
  *
  */
 
-#include <grpc/support/slice.h>
-#include "src/core/lib/iomgr/sockaddr.h"
+#include "src/core/lib/iomgr/port.h"
 
-void grpc_set_default_initial_connect_string(struct sockaddr **addr,
-                                             size_t *addr_len,
-                                             gpr_slice *initial_str) {}
+#ifdef GRPC_WINDOWS_SOCKETUTILS
+
+#include "src/core/lib/iomgr/sockaddr.h"
+#include "src/core/lib/iomgr/socket_utils.h"
+
+#include <grpc/support/log.h>
+
+const char *grpc_inet_ntop(int af, const void *src, char *dst, size_t size) {
+  /* Windows InetNtopA wants a mutable ip pointer */
+  return InetNtopA(af, (void *)src, dst, size);
+}
+
+#endif /* GRPC_WINDOWS_SOCKETUTILS */
diff --git a/src/core/lib/iomgr/socket_windows.c b/src/core/lib/iomgr/socket_windows.c
index 78ef46d..35f2330 100644
--- a/src/core/lib/iomgr/socket_windows.c
+++ b/src/core/lib/iomgr/socket_windows.c
@@ -31,9 +31,9 @@
  *
  */
 
-#include <grpc/support/port_platform.h>
+#include "src/core/lib/iomgr/port.h"
 
-#ifdef GPR_WINSOCK_SOCKET
+#ifdef GRPC_WINSOCK_SOCKET
 
 #include <winsock2.h>
 
@@ -156,4 +156,4 @@
   if (should_destroy) destroy(socket);
 }
 
-#endif /* GPR_WINSOCK_SOCKET */
+#endif /* GRPC_WINSOCK_SOCKET */
diff --git a/src/core/lib/iomgr/tcp_client.h b/src/core/lib/iomgr/tcp_client.h
index a07e0b9..fe1e7f4 100644
--- a/src/core/lib/iomgr/tcp_client.h
+++ b/src/core/lib/iomgr/tcp_client.h
@@ -37,7 +37,7 @@
 #include <grpc/support/time.h>
 #include "src/core/lib/iomgr/endpoint.h"
 #include "src/core/lib/iomgr/pollset_set.h"
-#include "src/core/lib/iomgr/sockaddr.h"
+#include "src/core/lib/iomgr/resolve_address.h"
 
 /* Asynchronously connect to an address (specified as (addr, len)), and call
    cb with arg and the completed connection when done (or call cb with arg and
@@ -47,7 +47,7 @@
 void grpc_tcp_client_connect(grpc_exec_ctx *exec_ctx, grpc_closure *on_connect,
                              grpc_endpoint **endpoint,
                              grpc_pollset_set *interested_parties,
-                             const struct sockaddr *addr, size_t addr_len,
+                             const grpc_resolved_address *addr,
                              gpr_timespec deadline);
 
 #endif /* GRPC_CORE_LIB_IOMGR_TCP_CLIENT_H */
diff --git a/src/core/lib/iomgr/tcp_client_posix.c b/src/core/lib/iomgr/tcp_client_posix.c
index 3496b60..e7ae1ef 100644
--- a/src/core/lib/iomgr/tcp_client_posix.c
+++ b/src/core/lib/iomgr/tcp_client_posix.c
@@ -31,9 +31,9 @@
  *
  */
 
-#include <grpc/support/port_platform.h>
+#include "src/core/lib/iomgr/port.h"
 
-#ifdef GPR_POSIX_SOCKET
+#ifdef GRPC_POSIX_SOCKET
 
 #include "src/core/lib/iomgr/tcp_client.h"
 
@@ -71,7 +71,7 @@
   grpc_closure *closure;
 } async_connect;
 
-static grpc_error *prepare_socket(const struct sockaddr *addr, int fd) {
+static grpc_error *prepare_socket(const grpc_resolved_address *addr, int fd) {
   grpc_error *err = GRPC_ERROR_NONE;
 
   GPR_ASSERT(fd >= 0);
@@ -223,14 +223,14 @@
 static void tcp_client_connect_impl(grpc_exec_ctx *exec_ctx,
                                     grpc_closure *closure, grpc_endpoint **ep,
                                     grpc_pollset_set *interested_parties,
-                                    const struct sockaddr *addr,
-                                    size_t addr_len, gpr_timespec deadline) {
+                                    const grpc_resolved_address *addr,
+                                    gpr_timespec deadline) {
   int fd;
   grpc_dualstack_mode dsmode;
   int err;
   async_connect *ac;
-  struct sockaddr_in6 addr6_v4mapped;
-  struct sockaddr_in addr4_copy;
+  grpc_resolved_address addr6_v4mapped;
+  grpc_resolved_address addr4_copy;
   grpc_fd *fdobj;
   char *name;
   char *addr_str;
@@ -240,8 +240,7 @@
 
   /* Use dualstack sockets where available. */
   if (grpc_sockaddr_to_v4mapped(addr, &addr6_v4mapped)) {
-    addr = (const struct sockaddr *)&addr6_v4mapped;
-    addr_len = sizeof(addr6_v4mapped);
+    addr = &addr6_v4mapped;
   }
 
   error = grpc_create_dualstack_socket(addr, SOCK_STREAM, 0, &dsmode, &fd);
@@ -252,8 +251,7 @@
   if (dsmode == GRPC_DSMODE_IPV4) {
     /* If we got an AF_INET socket, map the address back to IPv4. */
     GPR_ASSERT(grpc_sockaddr_is_v4mapped(addr, &addr4_copy));
-    addr = (struct sockaddr *)&addr4_copy;
-    addr_len = sizeof(addr4_copy);
+    addr = &addr4_copy;
   }
   if ((error = prepare_socket(addr, fd)) != GRPC_ERROR_NONE) {
     grpc_exec_ctx_sched(exec_ctx, closure, error, NULL);
@@ -261,8 +259,9 @@
   }
 
   do {
-    GPR_ASSERT(addr_len < ~(socklen_t)0);
-    err = connect(fd, addr, (socklen_t)addr_len);
+    GPR_ASSERT(addr->len < ~(socklen_t)0);
+    err =
+        connect(fd, (const struct sockaddr *)addr->addr, (socklen_t)addr->len);
   } while (err < 0 && errno == EINTR);
 
   addr_str = grpc_sockaddr_to_uri(addr);
@@ -317,16 +316,16 @@
 // overridden by api_fuzzer.c
 void (*grpc_tcp_client_connect_impl)(
     grpc_exec_ctx *exec_ctx, grpc_closure *closure, grpc_endpoint **ep,
-    grpc_pollset_set *interested_parties, const struct sockaddr *addr,
-    size_t addr_len, gpr_timespec deadline) = tcp_client_connect_impl;
+    grpc_pollset_set *interested_parties, const grpc_resolved_address *addr,
+    gpr_timespec deadline) = tcp_client_connect_impl;
 
 void grpc_tcp_client_connect(grpc_exec_ctx *exec_ctx, grpc_closure *closure,
                              grpc_endpoint **ep,
                              grpc_pollset_set *interested_parties,
-                             const struct sockaddr *addr, size_t addr_len,
+                             const grpc_resolved_address *addr,
                              gpr_timespec deadline) {
   grpc_tcp_client_connect_impl(exec_ctx, closure, ep, interested_parties, addr,
-                               addr_len, deadline);
+                               deadline);
 }
 
 #endif
diff --git a/src/core/lib/iomgr/tcp_client_uv.c b/src/core/lib/iomgr/tcp_client_uv.c
new file mode 100644
index 0000000..6274667
--- /dev/null
+++ b/src/core/lib/iomgr/tcp_client_uv.c
@@ -0,0 +1,153 @@
+/*
+ *
+ * Copyright 2016, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ *     * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+#include "src/core/lib/iomgr/port.h"
+
+#ifdef GRPC_UV
+
+#include <string.h>
+
+#include <grpc/support/alloc.h>
+#include <grpc/support/log.h>
+
+#include "src/core/lib/iomgr/error.h"
+#include "src/core/lib/iomgr/sockaddr_utils.h"
+#include "src/core/lib/iomgr/tcp_client.h"
+#include "src/core/lib/iomgr/tcp_uv.h"
+#include "src/core/lib/iomgr/timer.h"
+
+typedef struct grpc_uv_tcp_connect {
+  uv_connect_t connect_req;
+  grpc_timer alarm;
+  uv_tcp_t *tcp_handle;
+  grpc_closure *closure;
+  grpc_endpoint **endpoint;
+  int refs;
+  char *addr_name;
+} grpc_uv_tcp_connect;
+
+static void uv_tcp_connect_cleanup(grpc_uv_tcp_connect *connect) {
+  gpr_free(connect);
+}
+
+static void tcp_close_callback(uv_handle_t *handle) { gpr_free(handle); }
+
+static void uv_tc_on_alarm(grpc_exec_ctx *exec_ctx, void *acp,
+                           grpc_error *error) {
+  int done;
+  grpc_uv_tcp_connect *connect = acp;
+  if (error == GRPC_ERROR_NONE) {
+    /* error == NONE implies that the timer ran out, and wasn't cancelled. If
+       it was cancelled, then the handler that cancelled it also should close
+       the handle, if applicable */
+    uv_close((uv_handle_t *)connect->tcp_handle, tcp_close_callback);
+  }
+  done = (--connect->refs == 0);
+  if (done) {
+    uv_tcp_connect_cleanup(connect);
+  }
+}
+
+static void uv_tc_on_connect(uv_connect_t *req, int status) {
+  grpc_uv_tcp_connect *connect = req->data;
+  grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
+  grpc_error *error = GRPC_ERROR_NONE;
+  int done;
+  grpc_closure *closure = connect->closure;
+  grpc_timer_cancel(&exec_ctx, &connect->alarm);
+  if (status == 0) {
+    *connect->endpoint =
+        grpc_tcp_create(connect->tcp_handle, connect->addr_name);
+  } else {
+    error = GRPC_ERROR_CREATE("Failed to connect to remote host");
+    error = grpc_error_set_int(error, GRPC_ERROR_INT_ERRNO, -status);
+    error =
+        grpc_error_set_str(error, GRPC_ERROR_STR_OS_ERROR, uv_strerror(status));
+    if (status == UV_ECANCELED) {
+      error = grpc_error_set_str(error, GRPC_ERROR_STR_OS_ERROR,
+                                 "Timeout occurred");
+      // This should only happen if the handle is already closed
+    } else {
+      error = grpc_error_set_str(error, GRPC_ERROR_STR_OS_ERROR,
+                                 uv_strerror(status));
+      uv_close((uv_handle_t *)connect->tcp_handle, tcp_close_callback);
+    }
+  }
+  done = (--connect->refs == 0);
+  if (done) {
+    uv_tcp_connect_cleanup(connect);
+  }
+  grpc_exec_ctx_sched(&exec_ctx, closure, error, NULL);
+  grpc_exec_ctx_finish(&exec_ctx);
+}
+
+static void tcp_client_connect_impl(grpc_exec_ctx *exec_ctx,
+                                    grpc_closure *closure, grpc_endpoint **ep,
+                                    grpc_pollset_set *interested_parties,
+                                    const grpc_resolved_address *resolved_addr,
+                                    gpr_timespec deadline) {
+  grpc_uv_tcp_connect *connect;
+  (void)interested_parties;
+  connect = gpr_malloc(sizeof(grpc_uv_tcp_connect));
+  memset(connect, 0, sizeof(grpc_uv_tcp_connect));
+  connect->closure = closure;
+  connect->endpoint = ep;
+  connect->tcp_handle = gpr_malloc(sizeof(uv_tcp_t));
+  connect->addr_name = grpc_sockaddr_to_uri(resolved_addr);
+  uv_tcp_init(uv_default_loop(), connect->tcp_handle);
+  connect->connect_req.data = connect;
+  // TODO(murgatroid99): figure out what the return value here means
+  uv_tcp_connect(&connect->connect_req, connect->tcp_handle,
+                 (const struct sockaddr *)resolved_addr->addr,
+                 uv_tc_on_connect);
+  grpc_timer_init(exec_ctx, &connect->alarm,
+                  gpr_convert_clock_type(deadline, GPR_CLOCK_MONOTONIC),
+                  uv_tc_on_alarm, connect, gpr_now(GPR_CLOCK_MONOTONIC));
+}
+
+// overridden by api_fuzzer.c
+void (*grpc_tcp_client_connect_impl)(
+    grpc_exec_ctx *exec_ctx, grpc_closure *closure, grpc_endpoint **ep,
+    grpc_pollset_set *interested_parties, const grpc_resolved_address *addr,
+    gpr_timespec deadline) = tcp_client_connect_impl;
+
+void grpc_tcp_client_connect(grpc_exec_ctx *exec_ctx, grpc_closure *closure,
+                             grpc_endpoint **ep,
+                             grpc_pollset_set *interested_parties,
+                             const grpc_resolved_address *addr,
+                             gpr_timespec deadline) {
+  grpc_tcp_client_connect_impl(exec_ctx, closure, ep, interested_parties, addr,
+                               deadline);
+}
+
+#endif /* GRPC_UV */
diff --git a/src/core/lib/iomgr/tcp_client_windows.c b/src/core/lib/iomgr/tcp_client_windows.c
index 562cb9c..fdd8c1a 100644
--- a/src/core/lib/iomgr/tcp_client_windows.c
+++ b/src/core/lib/iomgr/tcp_client_windows.c
@@ -31,9 +31,9 @@
  *
  */
 
-#include <grpc/support/port_platform.h>
+#include "src/core/lib/iomgr/port.h"
 
-#ifdef GPR_WINSOCK_SOCKET
+#ifdef GRPC_WINSOCK_SOCKET
 
 #include "src/core/lib/iomgr/sockaddr_windows.h"
 
@@ -129,13 +129,13 @@
 void grpc_tcp_client_connect(grpc_exec_ctx *exec_ctx, grpc_closure *on_done,
                              grpc_endpoint **endpoint,
                              grpc_pollset_set *interested_parties,
-                             const struct sockaddr *addr, size_t addr_len,
+                             const grpc_resolved_address *addr,
                              gpr_timespec deadline) {
   SOCKET sock = INVALID_SOCKET;
   BOOL success;
   int status;
-  struct sockaddr_in6 addr6_v4mapped;
-  struct sockaddr_in6 local_address;
+  grpc_resolved_address addr6_v4mapped;
+  grpc_resolved_address local_address;
   async_connect *ac;
   grpc_winsocket *socket = NULL;
   LPFN_CONNECTEX ConnectEx;
@@ -148,8 +148,7 @@
 
   /* Use dualstack sockets where available. */
   if (grpc_sockaddr_to_v4mapped(addr, &addr6_v4mapped)) {
-    addr = (const struct sockaddr *)&addr6_v4mapped;
-    addr_len = sizeof(addr6_v4mapped);
+    addr = &addr6_v4mapped;
   }
 
   sock = WSASocket(AF_INET6, SOCK_STREAM, IPPROTO_TCP, NULL, 0,
@@ -178,7 +177,8 @@
 
   grpc_sockaddr_make_wildcard6(0, &local_address);
 
-  status = bind(sock, (struct sockaddr *)&local_address, sizeof(local_address));
+  status =
+      bind(sock, (struct sockaddr *)&local_address.addr, local_address.len);
   if (status != 0) {
     error = GRPC_WSA_ERROR(WSAGetLastError(), "bind");
     goto failure;
@@ -186,8 +186,8 @@
 
   socket = grpc_winsocket_create(sock, "client");
   info = &socket->write_info;
-  success =
-      ConnectEx(sock, addr, (int)addr_len, NULL, 0, NULL, &info->overlapped);
+  success = ConnectEx(sock, (struct sockaddr *)&addr->addr, (int)addr->len,
+                      NULL, 0, NULL, &info->overlapped);
 
   /* It wouldn't be unusual to get a success immediately. But we'll still get
      an IOCP notification, so let's ignore it. */
@@ -228,4 +228,4 @@
   grpc_exec_ctx_sched(exec_ctx, on_done, final_error, NULL);
 }
 
-#endif /* GPR_WINSOCK_SOCKET */
+#endif /* GRPC_WINSOCK_SOCKET */
diff --git a/src/core/lib/iomgr/tcp_posix.c b/src/core/lib/iomgr/tcp_posix.c
index 9276772..18c63cf 100644
--- a/src/core/lib/iomgr/tcp_posix.c
+++ b/src/core/lib/iomgr/tcp_posix.c
@@ -31,9 +31,9 @@
  *
  */
 
-#include <grpc/support/port_platform.h>
+#include "src/core/lib/iomgr/port.h"
 
-#ifdef GPR_POSIX_SOCKET
+#ifdef GRPC_POSIX_SOCKET
 
 #include "src/core/lib/iomgr/network_status_tracker.h"
 #include "src/core/lib/iomgr/tcp_posix.h"
@@ -58,14 +58,14 @@
 #include "src/core/lib/profiling/timers.h"
 #include "src/core/lib/support/string.h"
 
-#ifdef GPR_HAVE_MSG_NOSIGNAL
+#ifdef GRPC_HAVE_MSG_NOSIGNAL
 #define SENDMSG_FLAGS MSG_NOSIGNAL
 #else
 #define SENDMSG_FLAGS 0
 #endif
 
-#ifdef GPR_MSG_IOVLEN_TYPE
-typedef GPR_MSG_IOVLEN_TYPE msg_iovlen_type;
+#ifdef GRPC_MSG_IOVLEN_TYPE
+typedef GRPC_MSG_IOVLEN_TYPE msg_iovlen_type;
 #else
 typedef size_t msg_iovlen_type;
 #endif
@@ -177,7 +177,7 @@
 
   tcp->read_cb = NULL;
   tcp->incoming_buffer = NULL;
-  grpc_exec_ctx_sched(exec_ctx, cb, error, NULL);
+  grpc_closure_run(exec_ctx, cb, error);
 }
 
 #define MAX_READ_IOVEC 4
@@ -209,11 +209,11 @@
   msg.msg_controllen = 0;
   msg.msg_flags = 0;
 
-  GPR_TIMER_BEGIN("recvmsg", 1);
+  GPR_TIMER_BEGIN("recvmsg", 0);
   do {
     read_bytes = recvmsg(tcp->fd, &msg, 0);
   } while (read_bytes < 0 && errno == EINTR);
-  GPR_TIMER_END("recvmsg", 0);
+  GPR_TIMER_END("recvmsg", read_bytes >= 0);
 
   if (read_bytes < 0) {
     /* NB: After calling call_read_cb a parallel call of the read handler may
@@ -392,11 +392,8 @@
       grpc_error_free_string(str);
     }
 
-    GPR_TIMER_BEGIN("tcp_handle_write.cb", 0);
-    cb->cb(exec_ctx, cb->cb_arg, error);
-    GPR_TIMER_END("tcp_handle_write.cb", 0);
+    grpc_closure_run(exec_ctx, cb, error);
     TCP_UNREF(exec_ctx, tcp, "write");
-    GRPC_ERROR_UNREF(error);
   }
 }
 
diff --git a/src/core/lib/iomgr/tcp_server.h b/src/core/lib/iomgr/tcp_server.h
index 9a39069..0c2a4f4 100644
--- a/src/core/lib/iomgr/tcp_server.h
+++ b/src/core/lib/iomgr/tcp_server.h
@@ -38,6 +38,7 @@
 
 #include "src/core/lib/iomgr/closure.h"
 #include "src/core/lib/iomgr/endpoint.h"
+#include "src/core/lib/iomgr/resolve_address.h"
 
 /* Forward decl of grpc_tcp_server */
 typedef struct grpc_tcp_server grpc_tcp_server;
@@ -78,8 +79,9 @@
    but not dualstack sockets. */
 /* TODO(ctiller): deprecate this, and make grpc_tcp_server_add_ports to handle
                   all of the multiple socket port matching logic in one place */
-grpc_error *grpc_tcp_server_add_port(grpc_tcp_server *s, const void *addr,
-                                     size_t addr_len, int *out_port);
+grpc_error *grpc_tcp_server_add_port(grpc_tcp_server *s,
+                                     const grpc_resolved_address *addr,
+                                     int *out_port);
 
 /* Number of fds at the given port_index, or 0 if port_index is out of
    bounds. */
diff --git a/src/core/lib/iomgr/tcp_server_posix.c b/src/core/lib/iomgr/tcp_server_posix.c
index 73df547..127f859 100644
--- a/src/core/lib/iomgr/tcp_server_posix.c
+++ b/src/core/lib/iomgr/tcp_server_posix.c
@@ -36,9 +36,9 @@
 #define _GNU_SOURCE
 #endif
 
-#include <grpc/support/port_platform.h>
+#include "src/core/lib/iomgr/port.h"
 
-#ifdef GPR_POSIX_SOCKET
+#ifdef GRPC_POSIX_SOCKET
 
 #include "src/core/lib/iomgr/tcp_server.h"
 
@@ -62,6 +62,7 @@
 #include <grpc/support/useful.h>
 
 #include "src/core/lib/iomgr/resolve_address.h"
+#include "src/core/lib/iomgr/sockaddr.h"
 #include "src/core/lib/iomgr/sockaddr_utils.h"
 #include "src/core/lib/iomgr/socket_utils_posix.h"
 #include "src/core/lib/iomgr/tcp_posix.h"
@@ -79,11 +80,7 @@
   int fd;
   grpc_fd *emfd;
   grpc_tcp_server *server;
-  union {
-    uint8_t untyped[GRPC_MAX_SOCKADDR_SIZE];
-    struct sockaddr sockaddr;
-  } addr;
-  size_t addr_len;
+  grpc_resolved_address addr;
   int port;
   unsigned port_index;
   unsigned fd_index;
@@ -238,7 +235,7 @@
   if (s->head) {
     grpc_tcp_listener *sp;
     for (sp = s->head; sp; sp = sp->next) {
-      grpc_unlink_if_unix_domain_socket(&sp->addr.sockaddr);
+      grpc_unlink_if_unix_domain_socket(&sp->addr);
       sp->destroyed_closure.cb = destroyed_port;
       sp->destroyed_closure.cb_arg = s;
       grpc_fd_orphan(exec_ctx, sp->emfd, &sp->destroyed_closure, NULL,
@@ -304,11 +301,9 @@
 }
 
 /* Prepare a recently-created socket for listening. */
-static grpc_error *prepare_socket(int fd, const struct sockaddr *addr,
-                                  size_t addr_len, bool so_reuseport,
-                                  int *port) {
-  struct sockaddr_storage sockname_temp;
-  socklen_t sockname_len;
+static grpc_error *prepare_socket(int fd, const grpc_resolved_address *addr,
+                                  bool so_reuseport, int *port) {
+  grpc_resolved_address sockname_temp;
   grpc_error *err = GRPC_ERROR_NONE;
 
   GPR_ASSERT(fd >= 0);
@@ -331,8 +326,8 @@
   err = grpc_set_socket_no_sigpipe_if_possible(fd);
   if (err != GRPC_ERROR_NONE) goto error;
 
-  GPR_ASSERT(addr_len < ~(socklen_t)0);
-  if (bind(fd, addr, (socklen_t)addr_len) < 0) {
+  GPR_ASSERT(addr->len < ~(socklen_t)0);
+  if (bind(fd, (struct sockaddr *)addr->addr, (socklen_t)addr->len) < 0) {
     err = GRPC_OS_ERROR(errno, "bind");
     goto error;
   }
@@ -342,13 +337,15 @@
     goto error;
   }
 
-  sockname_len = sizeof(sockname_temp);
-  if (getsockname(fd, (struct sockaddr *)&sockname_temp, &sockname_len) < 0) {
+  sockname_temp.len = sizeof(struct sockaddr_storage);
+
+  if (getsockname(fd, (struct sockaddr *)sockname_temp.addr,
+                  (socklen_t *)&sockname_temp.len) < 0) {
     err = GRPC_OS_ERROR(errno, "getsockname");
     goto error;
   }
 
-  *port = grpc_sockaddr_get_port((struct sockaddr *)&sockname_temp);
+  *port = grpc_sockaddr_get_port(&sockname_temp);
   return GRPC_ERROR_NONE;
 
 error:
@@ -382,13 +379,13 @@
 
   /* loop until accept4 returns EAGAIN, and then re-arm notification */
   for (;;) {
-    struct sockaddr_storage addr;
-    socklen_t addrlen = sizeof(addr);
+    grpc_resolved_address addr;
     char *addr_str;
     char *name;
+    addr.len = sizeof(struct sockaddr_storage);
     /* Note: If we ever decide to return this address to the user, remember to
        strip off the ::ffff:0.0.0.0/96 prefix first. */
-    int fd = grpc_accept4(sp->fd, (struct sockaddr *)&addr, &addrlen, 1, 1);
+    int fd = grpc_accept4(sp->fd, &addr, 1, 1);
     if (fd < 0) {
       switch (errno) {
         case EINTR:
@@ -404,7 +401,7 @@
 
     grpc_set_socket_no_sigpipe_if_possible(fd);
 
-    addr_str = grpc_sockaddr_to_uri((struct sockaddr *)&addr);
+    addr_str = grpc_sockaddr_to_uri(&addr);
     gpr_asprintf(&name, "tcp-server-connection:%s", addr_str);
 
     if (grpc_tcp_trace) {
@@ -442,19 +439,18 @@
 }
 
 static grpc_error *add_socket_to_server(grpc_tcp_server *s, int fd,
-                                        const struct sockaddr *addr,
-                                        size_t addr_len, unsigned port_index,
-                                        unsigned fd_index,
+                                        const grpc_resolved_address *addr,
+                                        unsigned port_index, unsigned fd_index,
                                         grpc_tcp_listener **listener) {
   grpc_tcp_listener *sp = NULL;
   int port = -1;
   char *addr_str;
   char *name;
 
-  grpc_error *err = prepare_socket(fd, addr, addr_len, s->so_reuseport, &port);
+  grpc_error *err = prepare_socket(fd, addr, s->so_reuseport, &port);
   if (err == GRPC_ERROR_NONE) {
     GPR_ASSERT(port > 0);
-    grpc_sockaddr_to_string(&addr_str, (struct sockaddr *)&addr, 1);
+    grpc_sockaddr_to_string(&addr_str, addr, 1);
     gpr_asprintf(&name, "tcp-server-listener:%s", addr_str);
     gpr_mu_lock(&s->mu);
     s->nports++;
@@ -470,8 +466,7 @@
     sp->server = s;
     sp->fd = fd;
     sp->emfd = grpc_fd_create(fd, name);
-    memcpy(sp->addr.untyped, addr, addr_len);
-    sp->addr_len = addr_len;
+    memcpy(&sp->addr, addr, sizeof(grpc_resolved_address));
     sp->port = port;
     sp->port_index = port_index;
     sp->fd_index = fd_index;
@@ -504,14 +499,13 @@
     int fd = -1;
     int port = -1;
     grpc_dualstack_mode dsmode;
-    err = grpc_create_dualstack_socket(&listener->addr.sockaddr, SOCK_STREAM, 0,
-                                       &dsmode, &fd);
+    err = grpc_create_dualstack_socket(&listener->addr, SOCK_STREAM, 0, &dsmode,
+                                       &fd);
     if (err != GRPC_ERROR_NONE) return err;
-    err = prepare_socket(fd, &listener->addr.sockaddr, listener->addr_len, true,
-                         &port);
+    err = prepare_socket(fd, &listener->addr, true, &port);
     if (err != GRPC_ERROR_NONE) return err;
     listener->server->nports++;
-    grpc_sockaddr_to_string(&addr_str, &listener->addr.sockaddr, 1);
+    grpc_sockaddr_to_string(&addr_str, &listener->addr, 1);
     gpr_asprintf(&name, "tcp-server-listener:%s/clone-%d", addr_str, i);
     sp = gpr_malloc(sizeof(grpc_tcp_listener));
     sp->next = listener->next;
@@ -524,8 +518,7 @@
     sp->server = listener->server;
     sp->fd = fd;
     sp->emfd = grpc_fd_create(fd, name);
-    memcpy(sp->addr.untyped, listener->addr.untyped, listener->addr_len);
-    sp->addr_len = listener->addr_len;
+    memcpy(&sp->addr, &listener->addr, sizeof(grpc_resolved_address));
     sp->port = port;
     sp->port_index = listener->port_index;
     sp->fd_index = listener->fd_index + count - i;
@@ -540,19 +533,19 @@
   return GRPC_ERROR_NONE;
 }
 
-grpc_error *grpc_tcp_server_add_port(grpc_tcp_server *s, const void *addr,
-                                     size_t addr_len, int *out_port) {
+grpc_error *grpc_tcp_server_add_port(grpc_tcp_server *s,
+                                     const grpc_resolved_address *addr,
+                                     int *out_port) {
   grpc_tcp_listener *sp;
   grpc_tcp_listener *sp2 = NULL;
   int fd;
   grpc_dualstack_mode dsmode;
-  struct sockaddr_in6 addr6_v4mapped;
-  struct sockaddr_in wild4;
-  struct sockaddr_in6 wild6;
-  struct sockaddr_in addr4_copy;
-  struct sockaddr *allocated_addr = NULL;
-  struct sockaddr_storage sockname_temp;
-  socklen_t sockname_len;
+  grpc_resolved_address addr6_v4mapped;
+  grpc_resolved_address wild4;
+  grpc_resolved_address wild6;
+  grpc_resolved_address addr4_copy;
+  grpc_resolved_address *allocated_addr = NULL;
+  grpc_resolved_address sockname_temp;
   int port;
   unsigned port_index = 0;
   unsigned fd_index = 0;
@@ -560,19 +553,19 @@
   if (s->tail != NULL) {
     port_index = s->tail->port_index + 1;
   }
-  grpc_unlink_if_unix_domain_socket((struct sockaddr *)addr);
+  grpc_unlink_if_unix_domain_socket(addr);
 
   /* Check if this is a wildcard port, and if so, try to keep the port the same
      as some previously created listener. */
   if (grpc_sockaddr_get_port(addr) == 0) {
     for (sp = s->head; sp; sp = sp->next) {
-      sockname_len = sizeof(sockname_temp);
-      if (0 == getsockname(sp->fd, (struct sockaddr *)&sockname_temp,
-                           &sockname_len)) {
-        port = grpc_sockaddr_get_port((struct sockaddr *)&sockname_temp);
+      sockname_temp.len = sizeof(struct sockaddr_storage);
+      if (0 == getsockname(sp->fd, (struct sockaddr *)sockname_temp.addr,
+                           (socklen_t *)&sockname_temp.len)) {
+        port = grpc_sockaddr_get_port(&sockname_temp);
         if (port > 0) {
-          allocated_addr = gpr_malloc(addr_len);
-          memcpy(allocated_addr, addr, addr_len);
+          allocated_addr = gpr_malloc(sizeof(grpc_resolved_address));
+          memcpy(allocated_addr, addr, addr->len);
           grpc_sockaddr_set_port(allocated_addr, port);
           addr = allocated_addr;
           break;
@@ -584,8 +577,7 @@
   sp = NULL;
 
   if (grpc_sockaddr_to_v4mapped(addr, &addr6_v4mapped)) {
-    addr = (const struct sockaddr *)&addr6_v4mapped;
-    addr_len = sizeof(addr6_v4mapped);
+    addr = &addr6_v4mapped;
   }
 
   /* Treat :: or 0.0.0.0 as a family-agnostic wildcard. */
@@ -593,12 +585,10 @@
     grpc_sockaddr_make_wildcards(port, &wild4, &wild6);
 
     /* Try listening on IPv6 first. */
-    addr = (struct sockaddr *)&wild6;
-    addr_len = sizeof(wild6);
+    addr = &wild6;
     errs[0] = grpc_create_dualstack_socket(addr, SOCK_STREAM, 0, &dsmode, &fd);
     if (errs[0] == GRPC_ERROR_NONE) {
-      errs[0] = add_socket_to_server(s, fd, addr, addr_len, port_index,
-                                     fd_index, &sp);
+      errs[0] = add_socket_to_server(s, fd, addr, port_index, fd_index, &sp);
       if (fd >= 0 && dsmode == GRPC_DSMODE_DUALSTACK) {
         goto done;
       }
@@ -607,23 +597,20 @@
       }
       /* If we didn't get a dualstack socket, also listen on 0.0.0.0. */
       if (port == 0 && sp != NULL) {
-        grpc_sockaddr_set_port((struct sockaddr *)&wild4, sp->port);
+        grpc_sockaddr_set_port(&wild4, sp->port);
       }
     }
-    addr = (struct sockaddr *)&wild4;
-    addr_len = sizeof(wild4);
+    addr = &wild4;
   }
 
   errs[1] = grpc_create_dualstack_socket(addr, SOCK_STREAM, 0, &dsmode, &fd);
   if (errs[1] == GRPC_ERROR_NONE) {
     if (dsmode == GRPC_DSMODE_IPV4 &&
         grpc_sockaddr_is_v4mapped(addr, &addr4_copy)) {
-      addr = (struct sockaddr *)&addr4_copy;
-      addr_len = sizeof(addr4_copy);
+      addr = &addr4_copy;
     }
     sp2 = sp;
-    errs[1] =
-        add_socket_to_server(s, fd, addr, addr_len, port_index, fd_index, &sp);
+    errs[1] = add_socket_to_server(s, fd, addr, port_index, fd_index, &sp);
     if (sp2 != NULL && sp != NULL) {
       sp2->sibling = sp;
       sp->is_sibling = 1;
@@ -704,7 +691,7 @@
   s->pollset_count = pollset_count;
   sp = s->head;
   while (sp != NULL) {
-    if (s->so_reuseport && !grpc_is_unix_socket(&sp->addr.sockaddr) &&
+    if (s->so_reuseport && !grpc_is_unix_socket(&sp->addr) &&
         pollset_count > 1) {
       GPR_ASSERT(GRPC_LOG_IF_ERROR(
           "clone_port", clone_port(sp, (unsigned)(pollset_count - 1))));
diff --git a/src/core/lib/iomgr/tcp_server_uv.c b/src/core/lib/iomgr/tcp_server_uv.c
new file mode 100644
index 0000000..73e4db3
--- /dev/null
+++ b/src/core/lib/iomgr/tcp_server_uv.c
@@ -0,0 +1,365 @@
+/*
+ *
+ * Copyright 2015, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ *     * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+#include "src/core/lib/iomgr/port.h"
+
+#ifdef GRPC_UV
+
+#include <string.h>
+
+#include <grpc/support/alloc.h>
+#include <grpc/support/log.h>
+
+#include "src/core/lib/iomgr/error.h"
+#include "src/core/lib/iomgr/exec_ctx.h"
+#include "src/core/lib/iomgr/sockaddr.h"
+#include "src/core/lib/iomgr/sockaddr_utils.h"
+#include "src/core/lib/iomgr/tcp_server.h"
+#include "src/core/lib/iomgr/tcp_uv.h"
+
+/* one listening port */
+typedef struct grpc_tcp_listener grpc_tcp_listener;
+struct grpc_tcp_listener {
+  uv_tcp_t *handle;
+  grpc_tcp_server *server;
+  unsigned port_index;
+  int port;
+  /* linked list */
+  struct grpc_tcp_listener *next;
+};
+
+struct grpc_tcp_server {
+  gpr_refcount refs;
+
+  /* Called whenever accept() succeeds on a server port. */
+  grpc_tcp_server_cb on_accept_cb;
+  void *on_accept_cb_arg;
+
+  int open_ports;
+
+  /* linked list of server ports */
+  grpc_tcp_listener *head;
+  grpc_tcp_listener *tail;
+
+  /* List of closures passed to shutdown_starting_add(). */
+  grpc_closure_list shutdown_starting;
+
+  /* shutdown callback */
+  grpc_closure *shutdown_complete;
+};
+
+grpc_error *grpc_tcp_server_create(grpc_closure *shutdown_complete,
+                                   const grpc_channel_args *args,
+                                   grpc_tcp_server **server) {
+  grpc_tcp_server *s = gpr_malloc(sizeof(grpc_tcp_server));
+  (void)args;
+  gpr_ref_init(&s->refs, 1);
+  s->on_accept_cb = NULL;
+  s->on_accept_cb_arg = NULL;
+  s->open_ports = 0;
+  s->head = NULL;
+  s->tail = NULL;
+  s->shutdown_starting.head = NULL;
+  s->shutdown_starting.tail = NULL;
+  s->shutdown_complete = shutdown_complete;
+  *server = s;
+  return GRPC_ERROR_NONE;
+}
+
+grpc_tcp_server *grpc_tcp_server_ref(grpc_tcp_server *s) {
+  gpr_ref(&s->refs);
+  return s;
+}
+
+void grpc_tcp_server_shutdown_starting_add(grpc_tcp_server *s,
+                                           grpc_closure *shutdown_starting) {
+  grpc_closure_list_append(&s->shutdown_starting, shutdown_starting,
+                           GRPC_ERROR_NONE);
+}
+
+static void finish_shutdown(grpc_exec_ctx *exec_ctx, grpc_tcp_server *s) {
+  if (s->shutdown_complete != NULL) {
+    grpc_exec_ctx_sched(exec_ctx, s->shutdown_complete, GRPC_ERROR_NONE, NULL);
+  }
+
+  while (s->head) {
+    grpc_tcp_listener *sp = s->head;
+    s->head = sp->next;
+    sp->next = NULL;
+    gpr_free(sp->handle);
+    gpr_free(sp);
+  }
+  gpr_free(s);
+}
+
+static void handle_close_callback(uv_handle_t *handle) {
+  grpc_tcp_listener *sp = (grpc_tcp_listener *)handle->data;
+  grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
+  sp->server->open_ports--;
+  if (sp->server->open_ports == 0) {
+    finish_shutdown(&exec_ctx, sp->server);
+  }
+  grpc_exec_ctx_finish(&exec_ctx);
+}
+
+static void tcp_server_destroy(grpc_exec_ctx *exec_ctx, grpc_tcp_server *s) {
+  int immediately_done = 0;
+  grpc_tcp_listener *sp;
+
+  if (s->open_ports == 0) {
+    immediately_done = 1;
+  }
+  for (sp = s->head; sp; sp = sp->next) {
+    uv_close((uv_handle_t *)sp->handle, handle_close_callback);
+  }
+
+  if (immediately_done) {
+    finish_shutdown(exec_ctx, s);
+  }
+}
+
+void grpc_tcp_server_unref(grpc_exec_ctx *exec_ctx, grpc_tcp_server *s) {
+  if (gpr_unref(&s->refs)) {
+    /* Complete shutdown_starting work before destroying. */
+    grpc_exec_ctx local_exec_ctx = GRPC_EXEC_CTX_INIT;
+    grpc_exec_ctx_enqueue_list(&local_exec_ctx, &s->shutdown_starting, NULL);
+    if (exec_ctx == NULL) {
+      grpc_exec_ctx_flush(&local_exec_ctx);
+      tcp_server_destroy(&local_exec_ctx, s);
+      grpc_exec_ctx_finish(&local_exec_ctx);
+    } else {
+      grpc_exec_ctx_finish(&local_exec_ctx);
+      tcp_server_destroy(exec_ctx, s);
+    }
+  }
+}
+
+static void accepted_connection_close_cb(uv_handle_t *handle) {
+  gpr_free(handle);
+}
+
+static void on_connect(uv_stream_t *server, int status) {
+  grpc_tcp_listener *sp = (grpc_tcp_listener *)server->data;
+  grpc_tcp_server_acceptor acceptor = {sp->server, sp->port_index, 0};
+  uv_tcp_t *client;
+  grpc_endpoint *ep = NULL;
+  grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
+  grpc_resolved_address peer_name;
+  char *peer_name_string;
+  int err;
+
+  if (status < 0) {
+    gpr_log(GPR_INFO, "Skipping on_accept due to error: %s",
+            uv_strerror(status));
+    return;
+  }
+  client = gpr_malloc(sizeof(uv_tcp_t));
+  uv_tcp_init(uv_default_loop(), client);
+  // UV documentation says this is guaranteed to succeed
+  uv_accept((uv_stream_t *)server, (uv_stream_t *)client);
+  // If the server has not been started, we discard incoming connections
+  if (sp->server->on_accept_cb == NULL) {
+    uv_close((uv_handle_t *)client, accepted_connection_close_cb);
+  } else {
+    peer_name_string = NULL;
+    memset(&peer_name, 0, sizeof(grpc_resolved_address));
+    peer_name.len = sizeof(struct sockaddr_storage);
+    err = uv_tcp_getpeername(client, (struct sockaddr *)&peer_name.addr,
+                             (int *)&peer_name.len);
+    if (err == 0) {
+      peer_name_string = grpc_sockaddr_to_uri(&peer_name);
+    } else {
+      gpr_log(GPR_INFO, "uv_tcp_getpeername error: %s", uv_strerror(status));
+    }
+    ep = grpc_tcp_create(client, peer_name_string);
+    sp->server->on_accept_cb(&exec_ctx, sp->server->on_accept_cb_arg, ep, NULL,
+                             &acceptor);
+    grpc_exec_ctx_finish(&exec_ctx);
+  }
+}
+
+static grpc_error *add_socket_to_server(grpc_tcp_server *s, uv_tcp_t *handle,
+                                        const grpc_resolved_address *addr,
+                                        unsigned port_index,
+                                        grpc_tcp_listener **listener) {
+  grpc_tcp_listener *sp = NULL;
+  int port = -1;
+  int status;
+  grpc_error *error;
+  grpc_resolved_address sockname_temp;
+
+  // The last argument to uv_tcp_bind is flags
+  status = uv_tcp_bind(handle, (struct sockaddr *)addr->addr, 0);
+  if (status != 0) {
+    error = GRPC_ERROR_CREATE("Failed to bind to port");
+    error =
+        grpc_error_set_str(error, GRPC_ERROR_STR_OS_ERROR, uv_strerror(status));
+    return error;
+  }
+
+  status = uv_listen((uv_stream_t *)handle, SOMAXCONN, on_connect);
+  if (status != 0) {
+    error = GRPC_ERROR_CREATE("Failed to listen to port");
+    error =
+        grpc_error_set_str(error, GRPC_ERROR_STR_OS_ERROR, uv_strerror(status));
+    return error;
+  }
+
+  sockname_temp.len = (int)sizeof(struct sockaddr_storage);
+  status = uv_tcp_getsockname(handle, (struct sockaddr *)&sockname_temp.addr,
+                              (int *)&sockname_temp.len);
+  if (status != 0) {
+    error = GRPC_ERROR_CREATE("getsockname failed");
+    error =
+        grpc_error_set_str(error, GRPC_ERROR_STR_OS_ERROR, uv_strerror(status));
+    return error;
+  }
+
+  port = grpc_sockaddr_get_port(&sockname_temp);
+
+  GPR_ASSERT(port >= 0);
+  GPR_ASSERT(!s->on_accept_cb && "must add ports before starting server");
+  sp = gpr_malloc(sizeof(grpc_tcp_listener));
+  sp->next = NULL;
+  if (s->head == NULL) {
+    s->head = sp;
+  } else {
+    s->tail->next = sp;
+  }
+  s->tail = sp;
+  sp->server = s;
+  sp->handle = handle;
+  sp->port = port;
+  sp->port_index = port_index;
+  handle->data = sp;
+  s->open_ports++;
+  GPR_ASSERT(sp->handle);
+  *listener = sp;
+
+  return GRPC_ERROR_NONE;
+}
+
+grpc_error *grpc_tcp_server_add_port(grpc_tcp_server *s,
+                                     const grpc_resolved_address *addr,
+                                     int *port) {
+  // This function is mostly copied from tcp_server_windows.c
+  grpc_tcp_listener *sp = NULL;
+  uv_tcp_t *handle;
+  grpc_resolved_address addr6_v4mapped;
+  grpc_resolved_address wildcard;
+  grpc_resolved_address *allocated_addr = NULL;
+  grpc_resolved_address sockname_temp;
+  unsigned port_index = 0;
+  int status;
+  grpc_error *error = GRPC_ERROR_NONE;
+
+  if (s->tail != NULL) {
+    port_index = s->tail->port_index + 1;
+  }
+
+  /* Check if this is a wildcard port, and if so, try to keep the port the same
+     as some previously created listener. */
+  if (grpc_sockaddr_get_port(addr) == 0) {
+    for (sp = s->head; sp; sp = sp->next) {
+      sockname_temp.len = sizeof(struct sockaddr_storage);
+      if (0 == uv_tcp_getsockname(sp->handle,
+                                  (struct sockaddr *)&sockname_temp.addr,
+                                  (int *)&sockname_temp.len)) {
+        *port = grpc_sockaddr_get_port(&sockname_temp);
+        if (*port > 0) {
+          allocated_addr = gpr_malloc(sizeof(grpc_resolved_address));
+          memcpy(allocated_addr, addr, sizeof(grpc_resolved_address));
+          grpc_sockaddr_set_port(allocated_addr, *port);
+          addr = allocated_addr;
+          break;
+        }
+      }
+    }
+  }
+
+  if (grpc_sockaddr_to_v4mapped(addr, &addr6_v4mapped)) {
+    addr = &addr6_v4mapped;
+  }
+
+  /* Treat :: or 0.0.0.0 as a family-agnostic wildcard. */
+  if (grpc_sockaddr_is_wildcard(addr, port)) {
+    grpc_sockaddr_make_wildcard6(*port, &wildcard);
+
+    addr = &wildcard;
+  }
+
+  handle = gpr_malloc(sizeof(uv_tcp_t));
+  status = uv_tcp_init(uv_default_loop(), handle);
+  if (status == 0) {
+    error = add_socket_to_server(s, handle, addr, port_index, &sp);
+  } else {
+    error = GRPC_ERROR_CREATE("Failed to initialize UV tcp handle");
+    error =
+        grpc_error_set_str(error, GRPC_ERROR_STR_OS_ERROR, uv_strerror(status));
+  }
+
+  gpr_free(allocated_addr);
+
+  if (error != GRPC_ERROR_NONE) {
+    grpc_error *error_out = GRPC_ERROR_CREATE_REFERENCING(
+        "Failed to add port to server", &error, 1);
+    GRPC_ERROR_UNREF(error);
+    error = error_out;
+    *port = -1;
+  } else {
+    GPR_ASSERT(sp != NULL);
+    *port = sp->port;
+  }
+  return error;
+}
+
+void grpc_tcp_server_start(grpc_exec_ctx *exec_ctx, grpc_tcp_server *server,
+                           grpc_pollset **pollsets, size_t pollset_count,
+                           grpc_tcp_server_cb on_accept_cb, void *cb_arg) {
+  grpc_tcp_listener *sp;
+  (void)pollsets;
+  (void)pollset_count;
+  GPR_ASSERT(on_accept_cb);
+  GPR_ASSERT(!server->on_accept_cb);
+  server->on_accept_cb = on_accept_cb;
+  server->on_accept_cb_arg = cb_arg;
+  for (sp = server->head; sp; sp = sp->next) {
+    GPR_ASSERT(uv_listen((uv_stream_t *)sp->handle, SOMAXCONN, on_connect) ==
+               0);
+  }
+}
+
+void grpc_tcp_server_shutdown_listeners(grpc_exec_ctx *exec_ctx,
+                                        grpc_tcp_server *s) {}
+
+#endif /* GRPC_UV */
diff --git a/src/core/lib/iomgr/tcp_server_windows.c b/src/core/lib/iomgr/tcp_server_windows.c
index 4ff0560..ad6769a 100644
--- a/src/core/lib/iomgr/tcp_server_windows.c
+++ b/src/core/lib/iomgr/tcp_server_windows.c
@@ -31,14 +31,14 @@
  *
  */
 
-#include <grpc/support/port_platform.h>
+#include "src/core/lib/iomgr/port.h"
 
-#ifdef GPR_WINSOCK_SOCKET
+#ifdef GRPC_WINSOCK_SOCKET
+
+#include "src/core/lib/iomgr/sockaddr.h"
 
 #include <io.h>
 
-#include "src/core/lib/iomgr/sockaddr_utils.h"
-
 #include <grpc/support/alloc.h>
 #include <grpc/support/log.h>
 #include <grpc/support/log_windows.h>
@@ -48,6 +48,8 @@
 
 #include "src/core/lib/iomgr/iocp_windows.h"
 #include "src/core/lib/iomgr/pollset_windows.h"
+#include "src/core/lib/iomgr/resolve_address.h"
+#include "src/core/lib/iomgr/sockaddr_utils.h"
 #include "src/core/lib/iomgr/socket_windows.h"
 #include "src/core/lib/iomgr/tcp_server.h"
 #include "src/core/lib/iomgr/tcp_windows.h"
@@ -183,10 +185,10 @@
 }
 
 /* Prepare (bind) a recently-created socket for listening. */
-static grpc_error *prepare_socket(SOCKET sock, const struct sockaddr *addr,
-                                  size_t addr_len, int *port) {
-  struct sockaddr_storage sockname_temp;
-  socklen_t sockname_len;
+static grpc_error *prepare_socket(SOCKET sock,
+                                  const grpc_resolved_address *addr,
+                                  int *port) {
+  grpc_resolved_address sockname_temp;
   grpc_error *error = GRPC_ERROR_NONE;
 
   error = grpc_tcp_prepare_socket(sock);
@@ -194,7 +196,8 @@
     goto failure;
   }
 
-  if (bind(sock, addr, (int)addr_len) == SOCKET_ERROR) {
+  if (bind(sock, (const struct sockaddr *)addr->addr, (int)addr->len) ==
+      SOCKET_ERROR) {
     error = GRPC_WSA_ERROR(WSAGetLastError(), "bind");
     goto failure;
   }
@@ -204,14 +207,14 @@
     goto failure;
   }
 
-  sockname_len = sizeof(sockname_temp);
-  if (getsockname(sock, (struct sockaddr *)&sockname_temp, &sockname_len) ==
-      SOCKET_ERROR) {
+  sockname_temp.len = sizeof(struct sockaddr_storage);
+  if (getsockname(sock, (struct sockaddr *)sockname_temp.addr,
+                  &sockname_temp.len) == SOCKET_ERROR) {
     error = GRPC_WSA_ERROR(WSAGetLastError(), "getsockname");
     goto failure;
   }
 
-  *port = grpc_sockaddr_get_port((struct sockaddr *)&sockname_temp);
+  *port = grpc_sockaddr_get_port(&sockname_temp);
   return GRPC_ERROR_NONE;
 
 failure:
@@ -307,15 +310,16 @@
   SOCKET sock = sp->new_socket;
   grpc_winsocket_callback_info *info = &sp->socket->read_info;
   grpc_endpoint *ep = NULL;
-  struct sockaddr_storage peer_name;
+  grpc_resolved_address peer_name;
   char *peer_name_string;
   char *fd_name;
-  int peer_name_len = sizeof(peer_name);
   DWORD transfered_bytes;
   DWORD flags;
   BOOL wsa_success;
   int err;
 
+  peer_name.len = sizeof(struct sockaddr_storage);
+
   /* The general mechanism for shutting down is to queue abortion calls. While
      this is necessary in the read/write case, it's useless for the accept
      case. We only need to adjust the pending callback count */
@@ -353,9 +357,10 @@
         gpr_log(GPR_ERROR, "setsockopt error: %s", utf8_message);
         gpr_free(utf8_message);
       }
-      err = getpeername(sock, (struct sockaddr *)&peer_name, &peer_name_len);
+      err =
+          getpeername(sock, (struct sockaddr *)peer_name.addr, &peer_name.len);
       if (!err) {
-        peer_name_string = grpc_sockaddr_to_uri((struct sockaddr *)&peer_name);
+        peer_name_string = grpc_sockaddr_to_uri(&peer_name);
       } else {
         char *utf8_message = gpr_format_message(WSAGetLastError());
         gpr_log(GPR_ERROR, "getpeername error: %s", utf8_message);
@@ -385,8 +390,8 @@
 }
 
 static grpc_error *add_socket_to_server(grpc_tcp_server *s, SOCKET sock,
-                                        const struct sockaddr *addr,
-                                        size_t addr_len, unsigned port_index,
+                                        const grpc_resolved_address *addr,
+                                        unsigned port_index,
                                         grpc_tcp_listener **listener) {
   grpc_tcp_listener *sp = NULL;
   int port = -1;
@@ -410,7 +415,7 @@
     return NULL;
   }
 
-  error = prepare_socket(sock, addr, addr_len, &port);
+  error = prepare_socket(sock, addr, &port);
   if (error != GRPC_ERROR_NONE) {
     return error;
   }
@@ -441,15 +446,15 @@
   return GRPC_ERROR_NONE;
 }
 
-grpc_error *grpc_tcp_server_add_port(grpc_tcp_server *s, const void *addr,
-                                     size_t addr_len, int *port) {
+grpc_error *grpc_tcp_server_add_port(grpc_tcp_server *s,
+                                     const grpc_resolved_address *addr,
+                                     int *port) {
   grpc_tcp_listener *sp = NULL;
   SOCKET sock;
-  struct sockaddr_in6 addr6_v4mapped;
-  struct sockaddr_in6 wildcard;
-  struct sockaddr *allocated_addr = NULL;
-  struct sockaddr_storage sockname_temp;
-  socklen_t sockname_len;
+  grpc_resolved_address addr6_v4mapped;
+  grpc_resolved_address wildcard;
+  grpc_resolved_address *allocated_addr = NULL;
+  grpc_resolved_address sockname_temp;
   unsigned port_index = 0;
   grpc_error *error = GRPC_ERROR_NONE;
 
@@ -461,13 +466,14 @@
      as some previously created listener. */
   if (grpc_sockaddr_get_port(addr) == 0) {
     for (sp = s->head; sp; sp = sp->next) {
-      sockname_len = sizeof(sockname_temp);
+      sockname_temp.len = sizeof(struct sockaddr_storage);
       if (0 == getsockname(sp->socket->socket,
-                           (struct sockaddr *)&sockname_temp, &sockname_len)) {
-        *port = grpc_sockaddr_get_port((struct sockaddr *)&sockname_temp);
+                           (struct sockaddr *)sockname_temp.addr,
+                           &sockname_temp.len)) {
+        *port = grpc_sockaddr_get_port(&sockname_temp);
         if (*port > 0) {
-          allocated_addr = gpr_malloc(addr_len);
-          memcpy(allocated_addr, addr, addr_len);
+          allocated_addr = gpr_malloc(sizeof(grpc_resolved_address));
+          memcpy(allocated_addr, addr, sizeof(grpc_resolved_address));
           grpc_sockaddr_set_port(allocated_addr, *port);
           addr = allocated_addr;
           break;
@@ -477,16 +483,14 @@
   }
 
   if (grpc_sockaddr_to_v4mapped(addr, &addr6_v4mapped)) {
-    addr = (const struct sockaddr *)&addr6_v4mapped;
-    addr_len = sizeof(addr6_v4mapped);
+    addr = &addr6_v4mapped;
   }
 
   /* Treat :: or 0.0.0.0 as a family-agnostic wildcard. */
   if (grpc_sockaddr_is_wildcard(addr, port)) {
     grpc_sockaddr_make_wildcard6(*port, &wildcard);
 
-    addr = (struct sockaddr *)&wildcard;
-    addr_len = sizeof(wildcard);
+    addr = &wildcard;
   }
 
   sock = WSASocket(AF_INET6, SOCK_STREAM, IPPROTO_TCP, NULL, 0,
@@ -496,7 +500,7 @@
     goto done;
   }
 
-  error = add_socket_to_server(s, sock, addr, addr_len, port_index, &sp);
+  error = add_socket_to_server(s, sock, addr, port_index, &sp);
 
 done:
   gpr_free(allocated_addr);
@@ -535,4 +539,4 @@
 void grpc_tcp_server_shutdown_listeners(grpc_exec_ctx *exec_ctx,
                                         grpc_tcp_server *s) {}
 
-#endif /* GPR_WINSOCK_SOCKET */
+#endif /* GRPC_WINSOCK_SOCKET */
diff --git a/src/core/lib/iomgr/tcp_uv.c b/src/core/lib/iomgr/tcp_uv.c
new file mode 100644
index 0000000..05d6eeb
--- /dev/null
+++ b/src/core/lib/iomgr/tcp_uv.c
@@ -0,0 +1,335 @@
+/*
+ *
+ * Copyright 2016, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ *     * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+#include "src/core/lib/iomgr/port.h"
+
+#ifdef GRPC_UV
+
+#include <limits.h>
+#include <string.h>
+
+#include <grpc/support/alloc.h>
+#include <grpc/support/log.h>
+#include <grpc/support/slice_buffer.h>
+#include <grpc/support/string_util.h>
+
+#include "src/core/lib/iomgr/error.h"
+#include "src/core/lib/iomgr/network_status_tracker.h"
+#include "src/core/lib/iomgr/tcp_uv.h"
+#include "src/core/lib/support/string.h"
+
+int grpc_tcp_trace = 0;
+
+typedef struct {
+  grpc_endpoint base;
+  gpr_refcount refcount;
+
+  uv_tcp_t *handle;
+
+  grpc_closure *read_cb;
+  grpc_closure *write_cb;
+
+  gpr_slice read_slice;
+  gpr_slice_buffer *read_slices;
+  gpr_slice_buffer *write_slices;
+  uv_buf_t *write_buffers;
+
+  bool shutting_down;
+  char *peer_string;
+  grpc_pollset *pollset;
+} grpc_tcp;
+
+static void uv_close_callback(uv_handle_t *handle) { gpr_free(handle); }
+
+static void tcp_free(grpc_tcp *tcp) { gpr_free(tcp); }
+
+/*#define GRPC_TCP_REFCOUNT_DEBUG*/
+#ifdef GRPC_TCP_REFCOUNT_DEBUG
+#define TCP_UNREF(tcp, reason) tcp_unref((tcp), (reason), __FILE__, __LINE__)
+#define TCP_REF(tcp, reason) tcp_ref((tcp), (reason), __FILE__, __LINE__)
+static void tcp_unref(grpc_tcp *tcp, const char *reason, const char *file,
+                      int line) {
+  gpr_log(file, line, GPR_LOG_SEVERITY_DEBUG, "TCP unref %p : %s %d -> %d", tcp,
+          reason, tcp->refcount.count, tcp->refcount.count - 1);
+  if (gpr_unref(&tcp->refcount)) {
+    tcp_free(tcp);
+  }
+}
+
+static void tcp_ref(grpc_tcp *tcp, const char *reason, const char *file,
+                    int line) {
+  gpr_log(file, line, GPR_LOG_SEVERITY_DEBUG, "TCP   ref %p : %s %d -> %d", tcp,
+          reason, tcp->refcount.count, tcp->refcount.count + 1);
+  gpr_ref(&tcp->refcount);
+}
+#else
+#define TCP_UNREF(tcp, reason) tcp_unref((tcp))
+#define TCP_REF(tcp, reason) tcp_ref((tcp))
+static void tcp_unref(grpc_tcp *tcp) {
+  if (gpr_unref(&tcp->refcount)) {
+    tcp_free(tcp);
+  }
+}
+
+static void tcp_ref(grpc_tcp *tcp) { gpr_ref(&tcp->refcount); }
+#endif
+
+static void alloc_uv_buf(uv_handle_t *handle, size_t suggested_size,
+                         uv_buf_t *buf) {
+  grpc_tcp *tcp = handle->data;
+  (void)suggested_size;
+  tcp->read_slice = gpr_slice_malloc(GRPC_TCP_DEFAULT_READ_SLICE_SIZE);
+  buf->base = (char *)GPR_SLICE_START_PTR(tcp->read_slice);
+  buf->len = GPR_SLICE_LENGTH(tcp->read_slice);
+}
+
+static void read_callback(uv_stream_t *stream, ssize_t nread,
+                          const uv_buf_t *buf) {
+  gpr_slice sub;
+  grpc_error *error;
+  grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
+  grpc_tcp *tcp = stream->data;
+  grpc_closure *cb = tcp->read_cb;
+  if (nread == 0) {
+    // Nothing happened. Wait for the next callback
+    return;
+  }
+  TCP_UNREF(tcp, "read");
+  tcp->read_cb = NULL;
+  // TODO(murgatroid99): figure out what the return value here means
+  uv_read_stop(stream);
+  if (nread == UV_EOF) {
+    error = GRPC_ERROR_CREATE("EOF");
+  } else if (nread > 0) {
+    // Successful read
+    sub = gpr_slice_sub_no_ref(tcp->read_slice, 0, (size_t)nread);
+    gpr_slice_buffer_add(tcp->read_slices, sub);
+    error = GRPC_ERROR_NONE;
+    if (grpc_tcp_trace) {
+      size_t i;
+      const char *str = grpc_error_string(error);
+      gpr_log(GPR_DEBUG, "read: error=%s", str);
+      grpc_error_free_string(str);
+      for (i = 0; i < tcp->read_slices->count; i++) {
+        char *dump = gpr_dump_slice(tcp->read_slices->slices[i],
+                                    GPR_DUMP_HEX | GPR_DUMP_ASCII);
+        gpr_log(GPR_DEBUG, "READ %p (peer=%s): %s", tcp, tcp->peer_string,
+                dump);
+        gpr_free(dump);
+      }
+    }
+  } else {
+    // nread < 0: Error
+    error = GRPC_ERROR_CREATE("TCP Read failed");
+  }
+  grpc_exec_ctx_sched(&exec_ctx, cb, error, NULL);
+  grpc_exec_ctx_finish(&exec_ctx);
+}
+
+static void uv_endpoint_read(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep,
+                             gpr_slice_buffer *read_slices, grpc_closure *cb) {
+  grpc_tcp *tcp = (grpc_tcp *)ep;
+  int status;
+  grpc_error *error = GRPC_ERROR_NONE;
+  GPR_ASSERT(tcp->read_cb == NULL);
+  tcp->read_cb = cb;
+  tcp->read_slices = read_slices;
+  gpr_slice_buffer_reset_and_unref(read_slices);
+  TCP_REF(tcp, "read");
+  // TODO(murgatroid99): figure out what the return value here means
+  status =
+      uv_read_start((uv_stream_t *)tcp->handle, alloc_uv_buf, read_callback);
+  if (status != 0) {
+    error = GRPC_ERROR_CREATE("TCP Read failed at start");
+    error =
+        grpc_error_set_str(error, GRPC_ERROR_STR_OS_ERROR, uv_strerror(status));
+    grpc_exec_ctx_sched(exec_ctx, cb, error, NULL);
+  }
+  if (grpc_tcp_trace) {
+    const char *str = grpc_error_string(error);
+    gpr_log(GPR_DEBUG, "Initiating read on %p: error=%s", tcp, str);
+  }
+}
+
+static void write_callback(uv_write_t *req, int status) {
+  grpc_tcp *tcp = req->data;
+  grpc_error *error;
+  grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
+  grpc_closure *cb = tcp->write_cb;
+  tcp->write_cb = NULL;
+  TCP_UNREF(tcp, "write");
+  if (status == 0) {
+    error = GRPC_ERROR_NONE;
+  } else {
+    error = GRPC_ERROR_CREATE("TCP Write failed");
+  }
+  if (grpc_tcp_trace) {
+    const char *str = grpc_error_string(error);
+    gpr_log(GPR_DEBUG, "write complete on %p: error=%s", tcp, str);
+  }
+  gpr_free(tcp->write_buffers);
+  gpr_free(req);
+  grpc_exec_ctx_sched(&exec_ctx, cb, error, NULL);
+  grpc_exec_ctx_finish(&exec_ctx);
+}
+
+static void uv_endpoint_write(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep,
+                              gpr_slice_buffer *write_slices,
+                              grpc_closure *cb) {
+  grpc_tcp *tcp = (grpc_tcp *)ep;
+  uv_buf_t *buffers;
+  unsigned int buffer_count;
+  unsigned int i;
+  gpr_slice *slice;
+  uv_write_t *write_req;
+
+  if (grpc_tcp_trace) {
+    size_t j;
+
+    for (j = 0; j < write_slices->count; j++) {
+      char *data = gpr_dump_slice(write_slices->slices[j],
+                                  GPR_DUMP_HEX | GPR_DUMP_ASCII);
+      gpr_log(GPR_DEBUG, "WRITE %p (peer=%s): %s", tcp, tcp->peer_string, data);
+      gpr_free(data);
+    }
+  }
+
+  if (tcp->shutting_down) {
+    grpc_exec_ctx_sched(exec_ctx, cb,
+                        GRPC_ERROR_CREATE("TCP socket is shutting down"), NULL);
+    return;
+  }
+
+  GPR_ASSERT(tcp->write_cb == NULL);
+  tcp->write_slices = write_slices;
+  GPR_ASSERT(tcp->write_slices->count <= UINT_MAX);
+  if (tcp->write_slices->count == 0) {
+    // No slices means we don't have to do anything,
+    // and libuv doesn't like empty writes
+    grpc_exec_ctx_sched(exec_ctx, cb, GRPC_ERROR_NONE, NULL);
+    return;
+  }
+
+  tcp->write_cb = cb;
+  buffer_count = (unsigned int)tcp->write_slices->count;
+  buffers = gpr_malloc(sizeof(uv_buf_t) * buffer_count);
+  for (i = 0; i < buffer_count; i++) {
+    slice = &tcp->write_slices->slices[i];
+    buffers[i].base = (char *)GPR_SLICE_START_PTR(*slice);
+    buffers[i].len = GPR_SLICE_LENGTH(*slice);
+  }
+  write_req = gpr_malloc(sizeof(uv_write_t));
+  write_req->data = tcp;
+  TCP_REF(tcp, "write");
+  // TODO(murgatroid99): figure out what the return value here means
+  uv_write(write_req, (uv_stream_t *)tcp->handle, buffers, buffer_count,
+           write_callback);
+}
+
+static void uv_add_to_pollset(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep,
+                              grpc_pollset *pollset) {
+  // No-op. We're ignoring pollsets currently
+  (void)exec_ctx;
+  (void)ep;
+  (void)pollset;
+  grpc_tcp *tcp = (grpc_tcp *)ep;
+  tcp->pollset = pollset;
+}
+
+static void uv_add_to_pollset_set(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep,
+                                  grpc_pollset_set *pollset) {
+  // No-op. We're ignoring pollsets currently
+  (void)exec_ctx;
+  (void)ep;
+  (void)pollset;
+}
+
+static void shutdown_callback(uv_shutdown_t *req, int status) { gpr_free(req); }
+
+static void uv_endpoint_shutdown(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep) {
+  grpc_tcp *tcp = (grpc_tcp *)ep;
+  if (!tcp->shutting_down) {
+    tcp->shutting_down = true;
+    uv_shutdown_t *req = gpr_malloc(sizeof(uv_shutdown_t));
+    uv_shutdown(req, (uv_stream_t *)tcp->handle, shutdown_callback);
+  }
+}
+
+static void uv_destroy(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep) {
+  grpc_network_status_unregister_endpoint(ep);
+  grpc_tcp *tcp = (grpc_tcp *)ep;
+  uv_close((uv_handle_t *)tcp->handle, uv_close_callback);
+  TCP_UNREF(tcp, "destroy");
+}
+
+static char *uv_get_peer(grpc_endpoint *ep) {
+  grpc_tcp *tcp = (grpc_tcp *)ep;
+  return gpr_strdup(tcp->peer_string);
+}
+
+static grpc_workqueue *uv_get_workqueue(grpc_endpoint *ep) { return NULL; }
+
+static grpc_endpoint_vtable vtable = {uv_endpoint_read,
+                                      uv_endpoint_write,
+                                      uv_get_workqueue,
+                                      uv_add_to_pollset,
+                                      uv_add_to_pollset_set,
+                                      uv_endpoint_shutdown,
+                                      uv_destroy,
+                                      uv_get_peer};
+
+grpc_endpoint *grpc_tcp_create(uv_tcp_t *handle, char *peer_string) {
+  grpc_tcp *tcp = (grpc_tcp *)gpr_malloc(sizeof(grpc_tcp));
+
+  if (grpc_tcp_trace) {
+    gpr_log(GPR_DEBUG, "Creating TCP endpoint %p", tcp);
+  }
+
+  memset(tcp, 0, sizeof(grpc_tcp));
+  tcp->base.vtable = &vtable;
+  tcp->handle = handle;
+  handle->data = tcp;
+  gpr_ref_init(&tcp->refcount, 1);
+  tcp->peer_string = gpr_strdup(peer_string);
+  tcp->shutting_down = false;
+  /* Tell network status tracking code about the new endpoint */
+  grpc_network_status_register_endpoint(&tcp->base);
+
+#ifndef GRPC_UV_TCP_HOLD_LOOP
+  uv_unref((uv_handle_t *)handle);
+#endif
+
+  return &tcp->base;
+}
+
+#endif /* GRPC_UV */
diff --git a/src/core/ext/client_config/http_connect_handshaker.h b/src/core/lib/iomgr/tcp_uv.h
similarity index 71%
copy from src/core/ext/client_config/http_connect_handshaker.h
copy to src/core/lib/iomgr/tcp_uv.h
index 1fc3948..eed4115 100644
--- a/src/core/ext/client_config/http_connect_handshaker.h
+++ b/src/core/lib/iomgr/tcp_uv.h
@@ -31,17 +31,27 @@
  *
  */
 
-#ifndef GRPC_CORE_EXT_CLIENT_CONFIG_HTTP_CONNECT_HANDSHAKER_H
-#define GRPC_CORE_EXT_CLIENT_CONFIG_HTTP_CONNECT_HANDSHAKER_H
+#ifndef GRPC_CORE_LIB_IOMGR_TCP_UV_H
+#define GRPC_CORE_LIB_IOMGR_TCP_UV_H
+/*
+   Low level TCP "bottom half" implementation, for use by transports built on
+   top of a TCP connection.
 
-#include "src/core/lib/channel/handshaker.h"
+   Note that this file does not (yet) include APIs for creating the socket in
+   the first place.
 
-/// Does NOT take ownership of \a proxy_server or \a server_name.
-grpc_handshaker* grpc_http_connect_handshaker_create(const char* proxy_server,
-                                                     const char* server_name);
+   All calls passing slice transfer ownership of a slice refcount unless
+   otherwise specified.
+*/
 
-/// Returns the name of the proxy to use, or NULL if no proxy is configured.
-/// Caller takes ownership of result.
-char* grpc_get_http_proxy_server();
+#include "src/core/lib/iomgr/endpoint.h"
 
-#endif /* GRPC_CORE_EXT_CLIENT_CONFIG_HTTP_CONNECT_HANDSHAKER_H */
+#include <uv.h>
+
+extern int grpc_tcp_trace;
+
+#define GRPC_TCP_DEFAULT_READ_SLICE_SIZE 8192
+
+grpc_endpoint *grpc_tcp_create(uv_tcp_t *handle, char *peer_string);
+
+#endif /* GRPC_CORE_LIB_IOMGR_TCP_UV_H */
diff --git a/src/core/lib/iomgr/tcp_windows.c b/src/core/lib/iomgr/tcp_windows.c
index 448a726..a5f508a 100644
--- a/src/core/lib/iomgr/tcp_windows.c
+++ b/src/core/lib/iomgr/tcp_windows.c
@@ -31,9 +31,9 @@
  *
  */
 
-#include <grpc/support/port_platform.h>
+#include "src/core/lib/iomgr/port.h"
 
-#ifdef GPR_WINSOCK_SOCKET
+#ifdef GRPC_WINSOCK_SOCKET
 
 #include <limits.h>
 
@@ -417,4 +417,4 @@
   return &tcp->base;
 }
 
-#endif /* GPR_WINSOCK_SOCKET */
+#endif /* GRPC_WINSOCK_SOCKET */
diff --git a/src/core/lib/iomgr/timer.h b/src/core/lib/iomgr/timer.h
index a825d2a..20fe98c 100644
--- a/src/core/lib/iomgr/timer.h
+++ b/src/core/lib/iomgr/timer.h
@@ -34,26 +34,27 @@
 #ifndef GRPC_CORE_LIB_IOMGR_TIMER_H
 #define GRPC_CORE_LIB_IOMGR_TIMER_H
 
+#include "src/core/lib/iomgr/port.h"
+
+#ifdef GRPC_UV
+#include "src/core/lib/iomgr/timer_uv.h"
+#else
+#include "src/core/lib/iomgr/timer_generic.h"
+#endif /* GRPC_UV */
+
 #include <grpc/support/port_platform.h>
 #include <grpc/support/time.h>
 #include "src/core/lib/iomgr/exec_ctx.h"
 #include "src/core/lib/iomgr/iomgr.h"
 
-typedef struct grpc_timer {
-  gpr_timespec deadline;
-  uint32_t heap_index; /* INVALID_HEAP_INDEX if not in heap */
-  int triggered;
-  struct grpc_timer *next;
-  struct grpc_timer *prev;
-  grpc_closure closure;
-} grpc_timer;
+typedef struct grpc_timer grpc_timer;
 
 /* Initialize *timer. When expired or canceled, timer_cb will be called with
-   *timer_cb_arg and status to indicate if it expired (SUCCESS) or was
-   canceled (CANCELLED). timer_cb is guaranteed to be called exactly once,
-   and application code should check the status to determine how it was
-   invoked. The application callback is also responsible for maintaining
-   information about when to free up any user-level state. */
+   *timer_cb_arg and error set to indicate if it expired (GRPC_ERROR_NONE) or
+   was canceled (GRPC_ERROR_CANCELLED). timer_cb is guaranteed to be called
+   exactly once, and application code should check the error to determine
+   how it was invoked. The application callback is also responsible for
+   maintaining information about when to free up any user-level state. */
 void grpc_timer_init(grpc_exec_ctx *exec_ctx, grpc_timer *timer,
                      gpr_timespec deadline, grpc_iomgr_cb_func timer_cb,
                      void *timer_cb_arg, gpr_timespec now);
@@ -74,8 +75,8 @@
 
    In all of these cases, the cancellation is still considered successful.
    They are essentially distinguished in that the timer_cb will be run
-   exactly once from either the cancellation (with status CANCELLED)
-   or from the activation (with status SUCCESS)
+   exactly once from either the cancellation (with error GRPC_ERROR_CANCELLED)
+   or from the activation (with error GRPC_ERROR_NONE).
 
    Note carefully that the callback function MAY occur in the same callstack
    as grpc_timer_cancel. It's expected that most timers will be cancelled (their
@@ -83,14 +84,13 @@
    that cancellation costs as little as possible. Making callbacks run inline
    matches this aim.
 
-   Requires:  cancel() must happen after add() on a given timer */
+   Requires: cancel() must happen after init() on a given timer */
 void grpc_timer_cancel(grpc_exec_ctx *exec_ctx, grpc_timer *timer);
 
 /* iomgr internal api for dealing with timers */
 
 /* Check for timers to be run, and run them.
    Return true if timer callbacks were executed.
-   Drops drop_mu if it is non-null before executing callbacks.
    If next is non-null, TRY to update *next with the next running timer
    IF that timer occurs before *next current value.
    *next is never guaranteed to be updated on any given execution; however,
diff --git a/src/core/lib/iomgr/timer.c b/src/core/lib/iomgr/timer_generic.c
similarity index 98%
rename from src/core/lib/iomgr/timer.c
rename to src/core/lib/iomgr/timer_generic.c
index 9975fa1..00058f9 100644
--- a/src/core/lib/iomgr/timer.c
+++ b/src/core/lib/iomgr/timer_generic.c
@@ -31,6 +31,10 @@
  *
  */
 
+#include "src/core/lib/iomgr/port.h"
+
+#ifdef GRPC_TIMER_USE_GENERIC
+
 #include "src/core/lib/iomgr/timer.h"
 
 #include <grpc/support/log.h>
@@ -382,3 +386,5 @@
           ? GRPC_ERROR_NONE
           : GRPC_ERROR_CREATE("Shutting down timer system"));
 }
+
+#endif /* GRPC_TIMER_USE_GENERIC */
diff --git a/src/core/ext/client_config/default_initial_connect_string.c b/src/core/lib/iomgr/timer_generic.h
similarity index 76%
copy from src/core/ext/client_config/default_initial_connect_string.c
copy to src/core/lib/iomgr/timer_generic.h
index a70da4a..e4494ad 100644
--- a/src/core/ext/client_config/default_initial_connect_string.c
+++ b/src/core/lib/iomgr/timer_generic.h
@@ -1,6 +1,6 @@
 /*
  *
- * Copyright 2015, Google Inc.
+ * Copyright 2016, Google Inc.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -31,9 +31,19 @@
  *
  */
 
-#include <grpc/support/slice.h>
-#include "src/core/lib/iomgr/sockaddr.h"
+#ifndef GRPC_CORE_LIB_IOMGR_TIMER_GENERIC_H
+#define GRPC_CORE_LIB_IOMGR_TIMER_GENERIC_H
 
-void grpc_set_default_initial_connect_string(struct sockaddr **addr,
-                                             size_t *addr_len,
-                                             gpr_slice *initial_str) {}
+#include <grpc/support/time.h>
+#include "src/core/lib/iomgr/exec_ctx.h"
+
+struct grpc_timer {
+  gpr_timespec deadline;
+  uint32_t heap_index; /* INVALID_HEAP_INDEX if not in heap */
+  int triggered;
+  struct grpc_timer *next;
+  struct grpc_timer *prev;
+  grpc_closure closure;
+};
+
+#endif /* GRPC_CORE_LIB_IOMGR_TIMER_GENERIC_H */
diff --git a/src/core/lib/iomgr/timer_heap.c b/src/core/lib/iomgr/timer_heap.c
index 2ad9bb9..f736d33 100644
--- a/src/core/lib/iomgr/timer_heap.c
+++ b/src/core/lib/iomgr/timer_heap.c
@@ -31,6 +31,10 @@
  *
  */
 
+#include "src/core/lib/iomgr/port.h"
+
+#ifdef GRPC_TIMER_USE_GENERIC
+
 #include "src/core/lib/iomgr/timer_heap.h"
 
 #include <string.h>
@@ -144,3 +148,5 @@
 void grpc_timer_heap_pop(grpc_timer_heap *heap) {
   grpc_timer_heap_remove(heap, grpc_timer_heap_top(heap));
 }
+
+#endif /* GRPC_TIMER_USE_GENERIC */
diff --git a/src/core/lib/iomgr/timer_uv.c b/src/core/lib/iomgr/timer_uv.c
new file mode 100644
index 0000000..cfcb892
--- /dev/null
+++ b/src/core/lib/iomgr/timer_uv.c
@@ -0,0 +1,99 @@
+/*
+ *
+ * Copyright 2016, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ *     * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+#include "src/core/lib/iomgr/port.h"
+
+#if GRPC_UV
+
+#include <grpc/support/alloc.h>
+#include <grpc/support/log.h>
+
+#include "src/core/lib/iomgr/timer.h"
+
+#include <uv.h>
+
+static void timer_close_callback(uv_handle_t *handle) { gpr_free(handle); }
+
+static void stop_uv_timer(uv_timer_t *handle) {
+  uv_timer_stop(handle);
+  uv_unref((uv_handle_t *)handle);
+  uv_close((uv_handle_t *)handle, timer_close_callback);
+}
+
+void run_expired_timer(uv_timer_t *handle) {
+  grpc_timer *timer = (grpc_timer *)handle->data;
+  grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
+  GPR_ASSERT(!timer->triggered);
+  timer->triggered = 1;
+  grpc_exec_ctx_sched(&exec_ctx, &timer->closure, GRPC_ERROR_NONE, NULL);
+  stop_uv_timer(handle);
+  grpc_exec_ctx_finish(&exec_ctx);
+}
+
+void grpc_timer_init(grpc_exec_ctx *exec_ctx, grpc_timer *timer,
+                     gpr_timespec deadline, grpc_iomgr_cb_func timer_cb,
+                     void *timer_cb_arg, gpr_timespec now) {
+  uint64_t timeout;
+  uv_timer_t *uv_timer;
+  grpc_closure_init(&timer->closure, timer_cb, timer_cb_arg);
+  if (gpr_time_cmp(deadline, now) <= 0) {
+    timer->triggered = 1;
+    grpc_exec_ctx_sched(exec_ctx, &timer->closure, GRPC_ERROR_NONE, NULL);
+    return;
+  }
+  timer->triggered = 0;
+  timeout = (uint64_t)gpr_time_to_millis(gpr_time_sub(deadline, now));
+  uv_timer = gpr_malloc(sizeof(uv_timer_t));
+  uv_timer_init(uv_default_loop(), uv_timer);
+  uv_timer->data = timer;
+  timer->uv_timer = uv_timer;
+  uv_timer_start(uv_timer, run_expired_timer, timeout, 0);
+}
+
+void grpc_timer_cancel(grpc_exec_ctx *exec_ctx, grpc_timer *timer) {
+  if (!timer->triggered) {
+    timer->triggered = 1;
+    grpc_exec_ctx_sched(exec_ctx, &timer->closure, GRPC_ERROR_CANCELLED, NULL);
+    stop_uv_timer((uv_timer_t *)timer->uv_timer);
+  }
+}
+
+bool grpc_timer_check(grpc_exec_ctx *exec_ctx, gpr_timespec now,
+                      gpr_timespec *next) {
+  return false;
+}
+
+void grpc_timer_list_init(gpr_timespec now) {}
+void grpc_timer_list_shutdown(grpc_exec_ctx *exec_ctx) {}
+
+#endif /* GRPC_UV */
diff --git a/src/core/ext/client_config/default_initial_connect_string.c b/src/core/lib/iomgr/timer_uv.h
similarity index 79%
copy from src/core/ext/client_config/default_initial_connect_string.c
copy to src/core/lib/iomgr/timer_uv.h
index a70da4a..3de383e 100644
--- a/src/core/ext/client_config/default_initial_connect_string.c
+++ b/src/core/lib/iomgr/timer_uv.h
@@ -1,6 +1,6 @@
 /*
  *
- * Copyright 2015, Google Inc.
+ * Copyright 2016, Google Inc.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -31,9 +31,17 @@
  *
  */
 
-#include <grpc/support/slice.h>
-#include "src/core/lib/iomgr/sockaddr.h"
+#ifndef GRPC_CORE_LIB_IOMGR_TIMER_UV_H
+#define GRPC_CORE_LIB_IOMGR_TIMER_UV_H
 
-void grpc_set_default_initial_connect_string(struct sockaddr **addr,
-                                             size_t *addr_len,
-                                             gpr_slice *initial_str) {}
+#include "src/core/lib/iomgr/exec_ctx.h"
+
+struct grpc_timer {
+  grpc_closure closure;
+  /* This is actually a uv_timer_t*, but we want to keep platform-specific
+     types out of headers */
+  void *uv_timer;
+  int triggered;
+};
+
+#endif /* GRPC_CORE_LIB_IOMGR_TIMER_UV_H */
diff --git a/src/core/lib/iomgr/udp_server.c b/src/core/lib/iomgr/udp_server.c
index edf7b13..fd0c7a0 100644
--- a/src/core/lib/iomgr/udp_server.c
+++ b/src/core/lib/iomgr/udp_server.c
@@ -36,9 +36,9 @@
 #define _GNU_SOURCE
 #endif
 
-#include <grpc/support/port_platform.h>
+#include "src/core/lib/iomgr/port.h"
 
-#ifdef GPR_POSIX_SOCKET
+#ifdef GRPC_POSIX_SOCKET
 
 #include "src/core/lib/iomgr/udp_server.h"
 
@@ -62,32 +62,30 @@
 #include "src/core/lib/iomgr/error.h"
 #include "src/core/lib/iomgr/ev_posix.h"
 #include "src/core/lib/iomgr/resolve_address.h"
+#include "src/core/lib/iomgr/sockaddr.h"
 #include "src/core/lib/iomgr/sockaddr_utils.h"
 #include "src/core/lib/iomgr/socket_utils_posix.h"
+#include "src/core/lib/iomgr/unix_sockets_posix.h"
 #include "src/core/lib/support/string.h"
 
-#define INIT_PORT_CAP 2
-
 /* one listening port */
-typedef struct {
+typedef struct grpc_udp_listener grpc_udp_listener;
+struct grpc_udp_listener {
   int fd;
   grpc_fd *emfd;
   grpc_udp_server *server;
-  union {
-    uint8_t untyped[GRPC_MAX_SOCKADDR_SIZE];
-    struct sockaddr sockaddr;
-  } addr;
-  size_t addr_len;
+  grpc_resolved_address addr;
   grpc_closure read_closure;
   grpc_closure destroyed_closure;
   grpc_udp_server_read_cb read_cb;
   grpc_udp_server_orphan_cb orphan_cb;
-} server_port;
+
+  struct grpc_udp_listener *next;
+};
 
 /* the overall server */
 struct grpc_udp_server {
   gpr_mu mu;
-  gpr_cv cv;
 
   /* active port count: how many ports are actually still listening */
   size_t active_ports;
@@ -97,10 +95,10 @@
   /* is this server shutting down? (boolean) */
   int shutdown;
 
-  /* all listening ports */
-  server_port *ports;
-  size_t nports;
-  size_t port_capacity;
+  /* linked list of server ports */
+  grpc_udp_listener *head;
+  grpc_udp_listener *tail;
+  unsigned nports;
 
   /* shutdown callback */
   grpc_closure *shutdown_complete;
@@ -116,24 +114,29 @@
 grpc_udp_server *grpc_udp_server_create(void) {
   grpc_udp_server *s = gpr_malloc(sizeof(grpc_udp_server));
   gpr_mu_init(&s->mu);
-  gpr_cv_init(&s->cv);
   s->active_ports = 0;
   s->destroyed_ports = 0;
   s->shutdown = 0;
-  s->ports = gpr_malloc(sizeof(server_port) * INIT_PORT_CAP);
+  s->head = NULL;
+  s->tail = NULL;
   s->nports = 0;
-  s->port_capacity = INIT_PORT_CAP;
 
   return s;
 }
 
 static void finish_shutdown(grpc_exec_ctx *exec_ctx, grpc_udp_server *s) {
-  grpc_exec_ctx_sched(exec_ctx, s->shutdown_complete, GRPC_ERROR_NONE, NULL);
+  if (s->shutdown_complete != NULL) {
+    grpc_exec_ctx_sched(exec_ctx, s->shutdown_complete, GRPC_ERROR_NONE, NULL);
+  }
 
   gpr_mu_destroy(&s->mu);
-  gpr_cv_destroy(&s->cv);
 
-  gpr_free(s->ports);
+  while (s->head) {
+    grpc_udp_listener *sp = s->head;
+    s->head = sp->next;
+    gpr_free(sp);
+  }
+
   gpr_free(s);
 }
 
@@ -154,8 +157,6 @@
    events will be received on them - at this point it's safe to destroy
    things */
 static void deactivated_all_ports(grpc_exec_ctx *exec_ctx, grpc_udp_server *s) {
-  size_t i;
-
   /* delete ALL the things */
   gpr_mu_lock(&s->mu);
 
@@ -164,9 +165,11 @@
     return;
   }
 
-  if (s->nports) {
-    for (i = 0; i < s->nports; i++) {
-      server_port *sp = &s->ports[i];
+  if (s->head) {
+    grpc_udp_listener *sp;
+    for (sp = s->head; sp; sp = sp->next) {
+      grpc_unlink_if_unix_domain_socket(&sp->addr);
+
       sp->destroyed_closure.cb = destroyed_port;
       sp->destroyed_closure.cb_arg = s;
 
@@ -187,7 +190,7 @@
 
 void grpc_udp_server_destroy(grpc_exec_ctx *exec_ctx, grpc_udp_server *s,
                              grpc_closure *on_done) {
-  size_t i;
+  grpc_udp_listener *sp;
   gpr_mu_lock(&s->mu);
 
   GPR_ASSERT(!s->shutdown);
@@ -197,14 +200,10 @@
 
   /* shutdown all fd's */
   if (s->active_ports) {
-    for (i = 0; i < s->nports; i++) {
-      server_port *sp = &s->ports[i];
-      /* Call the orphan_cb to signal that the FD is about to be closed and
-       * should no longer be used. */
+    for (sp = s->head; sp; sp = sp->next) {
       GPR_ASSERT(sp->orphan_cb);
       sp->orphan_cb(sp->emfd);
-
-      grpc_fd_shutdown(exec_ctx, s->ports[i].emfd);
+      grpc_fd_shutdown(exec_ctx, sp->emfd);
     }
     gpr_mu_unlock(&s->mu);
   } else {
@@ -214,10 +213,9 @@
 }
 
 /* Prepare a recently-created socket for listening. */
-static int prepare_socket(int fd, const struct sockaddr *addr,
-                          size_t addr_len) {
-  struct sockaddr_storage sockname_temp;
-  socklen_t sockname_len;
+static int prepare_socket(int fd, const grpc_resolved_address *addr) {
+  grpc_resolved_address sockname_temp;
+  struct sockaddr *addr_ptr = (struct sockaddr *)addr->addr;
   /* Set send/receive socket buffers to 1 MB */
   int buffer_size_bytes = 1024 * 1024;
 
@@ -237,15 +235,15 @@
   if (grpc_set_socket_ip_pktinfo_if_possible(fd) != GRPC_ERROR_NONE) {
     gpr_log(GPR_ERROR, "Unable to set ip_pktinfo.");
     goto error;
-  } else if (addr->sa_family == AF_INET6) {
+  } else if (addr_ptr->sa_family == AF_INET6) {
     if (grpc_set_socket_ipv6_recvpktinfo_if_possible(fd) != GRPC_ERROR_NONE) {
       gpr_log(GPR_ERROR, "Unable to set ipv6_recvpktinfo.");
       goto error;
     }
   }
 
-  GPR_ASSERT(addr_len < ~(socklen_t)0);
-  if (bind(fd, addr, (socklen_t)addr_len) < 0) {
+  GPR_ASSERT(addr->len < ~(socklen_t)0);
+  if (bind(fd, (struct sockaddr *)addr, (socklen_t)addr->len) < 0) {
     char *addr_str;
     grpc_sockaddr_to_string(&addr_str, addr, 0);
     gpr_log(GPR_ERROR, "bind addr=%s: %s", addr_str, strerror(errno));
@@ -253,8 +251,10 @@
     goto error;
   }
 
-  sockname_len = sizeof(sockname_temp);
-  if (getsockname(fd, (struct sockaddr *)&sockname_temp, &sockname_len) < 0) {
+  sockname_temp.len = sizeof(struct sockaddr_storage);
+
+  if (getsockname(fd, (struct sockaddr *)sockname_temp.addr,
+                  (socklen_t *)&sockname_temp.len) < 0) {
     goto error;
   }
 
@@ -270,7 +270,7 @@
     goto error;
   }
 
-  return grpc_sockaddr_get_port((struct sockaddr *)&sockname_temp);
+  return grpc_sockaddr_get_port(&sockname_temp);
 
 error:
   if (fd >= 0) {
@@ -281,10 +281,10 @@
 
 /* event manager callback when reads are ready */
 static void on_read(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) {
-  server_port *sp = arg;
+  grpc_udp_listener *sp = arg;
 
+  gpr_mu_lock(&sp->server->mu);
   if (error != GRPC_ERROR_NONE) {
-    gpr_mu_lock(&sp->server->mu);
     if (0 == --sp->server->active_ports) {
       gpr_mu_unlock(&sp->server->mu);
       deactivated_all_ports(exec_ctx, sp->server);
@@ -300,34 +300,37 @@
 
   /* Re-arm the notification event so we get another chance to read. */
   grpc_fd_notify_on_read(exec_ctx, sp->emfd, &sp->read_closure);
+  gpr_mu_unlock(&sp->server->mu);
 }
 
 static int add_socket_to_server(grpc_udp_server *s, int fd,
-                                const struct sockaddr *addr, size_t addr_len,
+                                const grpc_resolved_address *addr,
                                 grpc_udp_server_read_cb read_cb,
                                 grpc_udp_server_orphan_cb orphan_cb) {
-  server_port *sp;
+  grpc_udp_listener *sp;
   int port;
   char *addr_str;
   char *name;
 
-  port = prepare_socket(fd, addr, addr_len);
+  port = prepare_socket(fd, addr);
   if (port >= 0) {
-    grpc_sockaddr_to_string(&addr_str, (struct sockaddr *)&addr, 1);
+    grpc_sockaddr_to_string(&addr_str, addr, 1);
     gpr_asprintf(&name, "udp-server-listener:%s", addr_str);
     gpr_free(addr_str);
     gpr_mu_lock(&s->mu);
-    /* append it to the list under a lock */
-    if (s->nports == s->port_capacity) {
-      s->port_capacity *= 2;
-      s->ports = gpr_realloc(s->ports, sizeof(server_port) * s->port_capacity);
+    s->nports++;
+    sp = gpr_malloc(sizeof(grpc_udp_listener));
+    sp->next = NULL;
+    if (s->head == NULL) {
+      s->head = sp;
+    } else {
+      s->tail->next = sp;
     }
-    sp = &s->ports[s->nports++];
+    s->tail = sp;
     sp->server = s;
     sp->fd = fd;
     sp->emfd = grpc_fd_create(fd, name);
-    memcpy(sp->addr.untyped, addr, addr_len);
-    sp->addr_len = addr_len;
+    memcpy(&sp->addr, addr, sizeof(grpc_resolved_address));
     sp->read_cb = read_cb;
     sp->orphan_cb = orphan_cb;
     GPR_ASSERT(sp->emfd);
@@ -338,34 +341,34 @@
   return port;
 }
 
-int grpc_udp_server_add_port(grpc_udp_server *s, const void *addr,
-                             size_t addr_len, grpc_udp_server_read_cb read_cb,
+int grpc_udp_server_add_port(grpc_udp_server *s,
+                             const grpc_resolved_address *addr,
+                             grpc_udp_server_read_cb read_cb,
                              grpc_udp_server_orphan_cb orphan_cb) {
+  grpc_udp_listener *sp;
   int allocated_port1 = -1;
   int allocated_port2 = -1;
-  unsigned i;
   int fd;
   grpc_dualstack_mode dsmode;
-  struct sockaddr_in6 addr6_v4mapped;
-  struct sockaddr_in wild4;
-  struct sockaddr_in6 wild6;
-  struct sockaddr_in addr4_copy;
-  struct sockaddr *allocated_addr = NULL;
-  struct sockaddr_storage sockname_temp;
-  socklen_t sockname_len;
+  grpc_resolved_address addr6_v4mapped;
+  grpc_resolved_address wild4;
+  grpc_resolved_address wild6;
+  grpc_resolved_address addr4_copy;
+  grpc_resolved_address *allocated_addr = NULL;
+  grpc_resolved_address sockname_temp;
   int port;
 
   /* Check if this is a wildcard port, and if so, try to keep the port the same
      as some previously created listener. */
   if (grpc_sockaddr_get_port(addr) == 0) {
-    for (i = 0; i < s->nports; i++) {
-      sockname_len = sizeof(sockname_temp);
-      if (0 == getsockname(s->ports[i].fd, (struct sockaddr *)&sockname_temp,
-                           &sockname_len)) {
-        port = grpc_sockaddr_get_port((struct sockaddr *)&sockname_temp);
+    for (sp = s->head; sp; sp = sp->next) {
+      sockname_temp.len = sizeof(struct sockaddr_storage);
+      if (0 == getsockname(sp->fd, (struct sockaddr *)sockname_temp.addr,
+                           (socklen_t *)&sockname_temp.len)) {
+        port = grpc_sockaddr_get_port(&sockname_temp);
         if (port > 0) {
-          allocated_addr = gpr_malloc(addr_len);
-          memcpy(allocated_addr, addr, addr_len);
+          allocated_addr = gpr_malloc(sizeof(grpc_resolved_address));
+          memcpy(allocated_addr, addr, sizeof(grpc_resolved_address));
           grpc_sockaddr_set_port(allocated_addr, port);
           addr = allocated_addr;
           break;
@@ -375,8 +378,7 @@
   }
 
   if (grpc_sockaddr_to_v4mapped(addr, &addr6_v4mapped)) {
-    addr = (const struct sockaddr *)&addr6_v4mapped;
-    addr_len = sizeof(addr6_v4mapped);
+    addr = &addr6_v4mapped;
   }
 
   /* Treat :: or 0.0.0.0 as a family-agnostic wildcard. */
@@ -384,22 +386,19 @@
     grpc_sockaddr_make_wildcards(port, &wild4, &wild6);
 
     /* Try listening on IPv6 first. */
-    addr = (struct sockaddr *)&wild6;
-    addr_len = sizeof(wild6);
+    addr = &wild6;
     // TODO(rjshade): Test and propagate the returned grpc_error*:
     grpc_create_dualstack_socket(addr, SOCK_DGRAM, IPPROTO_UDP, &dsmode, &fd);
-    allocated_port1 =
-        add_socket_to_server(s, fd, addr, addr_len, read_cb, orphan_cb);
+    allocated_port1 = add_socket_to_server(s, fd, addr, read_cb, orphan_cb);
     if (fd >= 0 && dsmode == GRPC_DSMODE_DUALSTACK) {
       goto done;
     }
 
     /* If we didn't get a dualstack socket, also listen on 0.0.0.0. */
     if (port == 0 && allocated_port1 > 0) {
-      grpc_sockaddr_set_port((struct sockaddr *)&wild4, allocated_port1);
+      grpc_sockaddr_set_port(&wild4, allocated_port1);
     }
-    addr = (struct sockaddr *)&wild4;
-    addr_len = sizeof(wild4);
+    addr = &wild4;
   }
 
   // TODO(rjshade): Test and propagate the returned grpc_error*:
@@ -409,11 +408,9 @@
   }
   if (dsmode == GRPC_DSMODE_IPV4 &&
       grpc_sockaddr_is_v4mapped(addr, &addr4_copy)) {
-    addr = (struct sockaddr *)&addr4_copy;
-    addr_len = sizeof(addr4_copy);
+    addr = &addr4_copy;
   }
-  allocated_port2 =
-      add_socket_to_server(s, fd, addr, addr_len, read_cb, orphan_cb);
+  allocated_port2 = add_socket_to_server(s, fd, addr, read_cb, orphan_cb);
 
 done:
   gpr_free(allocated_addr);
@@ -421,27 +418,40 @@
 }
 
 int grpc_udp_server_get_fd(grpc_udp_server *s, unsigned port_index) {
-  return (port_index < s->nports) ? s->ports[port_index].fd : -1;
+  grpc_udp_listener *sp;
+  if (port_index >= s->nports) {
+    return -1;
+  }
+
+  for (sp = s->head; sp && port_index != 0; sp = sp->next) {
+    --port_index;
+  }
+  return sp->fd;
 }
 
 void grpc_udp_server_start(grpc_exec_ctx *exec_ctx, grpc_udp_server *s,
                            grpc_pollset **pollsets, size_t pollset_count,
                            grpc_server *server) {
-  size_t i, j;
+  size_t i;
   gpr_mu_lock(&s->mu);
+  grpc_udp_listener *sp;
   GPR_ASSERT(s->active_ports == 0);
   s->pollsets = pollsets;
   s->grpc_server = server;
-  for (i = 0; i < s->nports; i++) {
-    for (j = 0; j < pollset_count; j++) {
-      grpc_pollset_add_fd(exec_ctx, pollsets[j], s->ports[i].emfd);
+
+  sp = s->head;
+  while (sp != NULL) {
+    for (i = 0; i < pollset_count; i++) {
+      grpc_pollset_add_fd(exec_ctx, pollsets[i], sp->emfd);
     }
-    s->ports[i].read_closure.cb = on_read;
-    s->ports[i].read_closure.cb_arg = &s->ports[i];
-    grpc_fd_notify_on_read(exec_ctx, s->ports[i].emfd,
-                           &s->ports[i].read_closure);
+    sp->read_closure.cb = on_read;
+    sp->read_closure.cb_arg = sp;
+    grpc_fd_notify_on_read(exec_ctx, sp->emfd, &sp->read_closure);
+
     s->active_ports++;
+    sp = sp->next;
   }
+
   gpr_mu_unlock(&s->mu);
 }
 
diff --git a/src/core/lib/iomgr/udp_server.h b/src/core/lib/iomgr/udp_server.h
index 33c5ce1..f3c466a 100644
--- a/src/core/lib/iomgr/udp_server.h
+++ b/src/core/lib/iomgr/udp_server.h
@@ -36,6 +36,7 @@
 
 #include "src/core/lib/iomgr/endpoint.h"
 #include "src/core/lib/iomgr/ev_posix.h"
+#include "src/core/lib/iomgr/resolve_address.h"
 
 /* Forward decl of struct grpc_server */
 /* This is not typedef'ed to avoid a typedef-redefinition error */
@@ -59,7 +60,7 @@
                            grpc_pollset **pollsets, size_t pollset_count,
                            struct grpc_server *server);
 
-int grpc_udp_server_get_fd(grpc_udp_server *s, unsigned index);
+int grpc_udp_server_get_fd(grpc_udp_server *s, unsigned port_index);
 
 /* Add a port to the server, returning port number on success, or negative
    on failure.
@@ -71,8 +72,9 @@
 
 /* TODO(ctiller): deprecate this, and make grpc_udp_server_add_ports to handle
                   all of the multiple socket port matching logic in one place */
-int grpc_udp_server_add_port(grpc_udp_server *s, const void *addr,
-                             size_t addr_len, grpc_udp_server_read_cb read_cb,
+int grpc_udp_server_add_port(grpc_udp_server *s,
+                             const grpc_resolved_address *addr,
+                             grpc_udp_server_read_cb read_cb,
                              grpc_udp_server_orphan_cb orphan_cb);
 
 void grpc_udp_server_destroy(grpc_exec_ctx *exec_ctx, grpc_udp_server *server,
diff --git a/src/core/lib/iomgr/unix_sockets_posix.c b/src/core/lib/iomgr/unix_sockets_posix.c
index 0e7670e..030acd9 100644
--- a/src/core/lib/iomgr/unix_sockets_posix.c
+++ b/src/core/lib/iomgr/unix_sockets_posix.c
@@ -30,16 +30,19 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  *
  */
+#include "src/core/lib/iomgr/port.h"
 
-#include "src/core/lib/iomgr/unix_sockets_posix.h"
+#ifdef GRPC_HAVE_UNIX_SOCKET
 
-#ifdef GPR_HAVE_UNIX_SOCKET
+#include "src/core/lib/iomgr/sockaddr.h"
 
 #include <string.h>
 #include <sys/stat.h>
 #include <sys/types.h>
 #include <sys/un.h>
 
+#include "src/core/lib/iomgr/unix_sockets_posix.h"
+
 #include <grpc/support/alloc.h>
 #include <grpc/support/log.h>
 
@@ -61,15 +64,18 @@
   return GRPC_ERROR_NONE;
 }
 
-int grpc_is_unix_socket(const struct sockaddr *addr) {
+int grpc_is_unix_socket(const grpc_resolved_address *resolved_addr) {
+  const struct sockaddr *addr = (const struct sockaddr *)resolved_addr->addr;
   return addr->sa_family == AF_UNIX;
 }
 
-void grpc_unlink_if_unix_domain_socket(const struct sockaddr *addr) {
+void grpc_unlink_if_unix_domain_socket(
+    const grpc_resolved_address *resolved_addr) {
+  const struct sockaddr *addr = (const struct sockaddr *)resolved_addr->addr;
   if (addr->sa_family != AF_UNIX) {
     return;
   }
-  struct sockaddr_un *un = (struct sockaddr_un *)addr;
+  struct sockaddr_un *un = (struct sockaddr_un *)resolved_addr->addr;
   struct stat st;
 
   if (stat(un->sun_path, &st) == 0 && (st.st_mode & S_IFMT) == S_IFSOCK) {
@@ -77,7 +83,9 @@
   }
 }
 
-char *grpc_sockaddr_to_uri_unix_if_possible(const struct sockaddr *addr) {
+char *grpc_sockaddr_to_uri_unix_if_possible(
+    const grpc_resolved_address *resolved_addr) {
+  const struct sockaddr *addr = (const struct sockaddr *)resolved_addr->addr;
   if (addr->sa_family != AF_UNIX) {
     return NULL;
   }
diff --git a/src/core/lib/iomgr/unix_sockets_posix.h b/src/core/lib/iomgr/unix_sockets_posix.h
index db0516d..21afd3a 100644
--- a/src/core/lib/iomgr/unix_sockets_posix.h
+++ b/src/core/lib/iomgr/unix_sockets_posix.h
@@ -34,22 +34,23 @@
 #ifndef GRPC_CORE_LIB_IOMGR_UNIX_SOCKETS_POSIX_H
 #define GRPC_CORE_LIB_IOMGR_UNIX_SOCKETS_POSIX_H
 
-#include <grpc/support/port_platform.h>
+#include "src/core/lib/iomgr/port.h"
 
 #include <grpc/support/string_util.h>
 
 #include "src/core/lib/iomgr/resolve_address.h"
-#include "src/core/lib/iomgr/sockaddr.h"
 
 void grpc_create_socketpair_if_unix(int sv[2]);
 
 grpc_error *grpc_resolve_unix_domain_address(
     const char *name, grpc_resolved_addresses **addresses);
 
-int grpc_is_unix_socket(const struct sockaddr *addr);
+int grpc_is_unix_socket(const grpc_resolved_address *resolved_addr);
 
-void grpc_unlink_if_unix_domain_socket(const struct sockaddr *addr);
+void grpc_unlink_if_unix_domain_socket(
+    const grpc_resolved_address *resolved_addr);
 
-char *grpc_sockaddr_to_uri_unix_if_possible(const struct sockaddr *addr);
+char *grpc_sockaddr_to_uri_unix_if_possible(
+    const grpc_resolved_address *resolved_addr);
 
 #endif /* GRPC_CORE_LIB_IOMGR_UNIX_SOCKETS_POSIX_H */
diff --git a/src/core/lib/iomgr/unix_sockets_posix_noop.c b/src/core/lib/iomgr/unix_sockets_posix_noop.c
index 56b47c3..1daf515 100644
--- a/src/core/lib/iomgr/unix_sockets_posix_noop.c
+++ b/src/core/lib/iomgr/unix_sockets_posix_noop.c
@@ -33,7 +33,7 @@
 
 #include "src/core/lib/iomgr/unix_sockets_posix.h"
 
-#ifndef GPR_HAVE_UNIX_SOCKET
+#ifndef GRPC_HAVE_UNIX_SOCKET
 
 #include <grpc/support/log.h>
 
@@ -50,11 +50,11 @@
   return GRPC_ERROR_CREATE("Unix domain sockets are not supported on Windows");
 }
 
-int grpc_is_unix_socket(const struct sockaddr *addr) { return false; }
+int grpc_is_unix_socket(const grpc_resolved_address *addr) { return false; }
 
-void grpc_unlink_if_unix_domain_socket(const struct sockaddr *addr) {}
+void grpc_unlink_if_unix_domain_socket(const grpc_resolved_address *addr) {}
 
-char *grpc_sockaddr_to_uri_unix_if_possible(const struct sockaddr *addr) {
+char *grpc_sockaddr_to_uri_unix_if_possible(const grpc_resolved_address *addr) {
   return NULL;
 }
 
diff --git a/src/core/lib/iomgr/wakeup_fd_cv.c b/src/core/lib/iomgr/wakeup_fd_cv.c
new file mode 100644
index 0000000..da4c287
--- /dev/null
+++ b/src/core/lib/iomgr/wakeup_fd_cv.c
@@ -0,0 +1,118 @@
+/*
+ *
+ * Copyright 2016, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ *     * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+#include "src/core/lib/iomgr/port.h"
+
+#ifdef GRPC_POSIX_WAKEUP_FD
+
+#include "src/core/lib/iomgr/wakeup_fd_cv.h"
+
+#include <errno.h>
+#include <string.h>
+
+#include <grpc/support/alloc.h>
+#include <grpc/support/log.h>
+#include <grpc/support/sync.h>
+#include <grpc/support/thd.h>
+#include <grpc/support/time.h>
+#include <grpc/support/useful.h>
+
+#define MAX_TABLE_RESIZE 256
+
+extern cv_fd_table g_cvfds;
+
+static grpc_error* cv_fd_init(grpc_wakeup_fd* fd_info) {
+  unsigned int i, newsize;
+  int idx;
+  gpr_mu_lock(&g_cvfds.mu);
+  if (!g_cvfds.free_fds) {
+    newsize = GPR_MIN(g_cvfds.size * 2, g_cvfds.size + MAX_TABLE_RESIZE);
+    g_cvfds.cvfds = gpr_realloc(g_cvfds.cvfds, sizeof(fd_node) * newsize);
+    for (i = g_cvfds.size; i < newsize; i++) {
+      g_cvfds.cvfds[i].is_set = 0;
+      g_cvfds.cvfds[i].cvs = NULL;
+      g_cvfds.cvfds[i].next_free = g_cvfds.free_fds;
+      g_cvfds.free_fds = &g_cvfds.cvfds[i];
+    }
+    g_cvfds.size = newsize;
+  }
+
+  idx = (int)(g_cvfds.free_fds - g_cvfds.cvfds);
+  g_cvfds.free_fds = g_cvfds.free_fds->next_free;
+  g_cvfds.cvfds[idx].cvs = NULL;
+  g_cvfds.cvfds[idx].is_set = 0;
+  fd_info->read_fd = IDX_TO_FD(idx);
+  fd_info->write_fd = -1;
+  gpr_mu_unlock(&g_cvfds.mu);
+  return GRPC_ERROR_NONE;
+}
+
+static grpc_error* cv_fd_wakeup(grpc_wakeup_fd* fd_info) {
+  cv_node* cvn;
+  gpr_mu_lock(&g_cvfds.mu);
+  g_cvfds.cvfds[FD_TO_IDX(fd_info->read_fd)].is_set = 1;
+  cvn = g_cvfds.cvfds[FD_TO_IDX(fd_info->read_fd)].cvs;
+  while (cvn) {
+    gpr_cv_signal(cvn->cv);
+    cvn = cvn->next;
+  }
+  gpr_mu_unlock(&g_cvfds.mu);
+  return GRPC_ERROR_NONE;
+}
+
+static grpc_error* cv_fd_consume(grpc_wakeup_fd* fd_info) {
+  gpr_mu_lock(&g_cvfds.mu);
+  g_cvfds.cvfds[FD_TO_IDX(fd_info->read_fd)].is_set = 0;
+  gpr_mu_unlock(&g_cvfds.mu);
+  return GRPC_ERROR_NONE;
+}
+
+static void cv_fd_destroy(grpc_wakeup_fd* fd_info) {
+  if (fd_info->read_fd == 0) {
+    return;
+  }
+  gpr_mu_lock(&g_cvfds.mu);
+  // Assert that there are no active pollers
+  GPR_ASSERT(!g_cvfds.cvfds[FD_TO_IDX(fd_info->read_fd)].cvs);
+  g_cvfds.cvfds[FD_TO_IDX(fd_info->read_fd)].next_free = g_cvfds.free_fds;
+  g_cvfds.free_fds = &g_cvfds.cvfds[FD_TO_IDX(fd_info->read_fd)];
+  gpr_mu_unlock(&g_cvfds.mu);
+}
+
+static int cv_check_availability(void) { return 1; }
+
+const grpc_wakeup_fd_vtable grpc_cv_wakeup_fd_vtable = {
+    cv_fd_init, cv_fd_consume, cv_fd_wakeup, cv_fd_destroy,
+    cv_check_availability};
+
+#endif /* GRPC_POSIX_WAKUP_FD */
diff --git a/src/core/lib/iomgr/wakeup_fd_cv.h b/src/core/lib/iomgr/wakeup_fd_cv.h
new file mode 100644
index 0000000..ac16be1
--- /dev/null
+++ b/src/core/lib/iomgr/wakeup_fd_cv.h
@@ -0,0 +1,80 @@
+/*
+ *
+ * Copyright 2016, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ *     * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+/*
+ * wakeup_fd_cv uses condition variables to implement wakeup fds.
+ *
+ * It is intended for use only in cases when eventfd() and pipe() are not
+ * available.  It can only be used with the "poll" engine.
+ *
+ * Implementation:
+ * A global table of cv wakeup fds is mantained.  A cv wakeup fd is a negative
+ * file descriptor.  poll() is then run in a background thread with only the
+ * real socket fds while we wait on a condition variable trigged by either the
+ * poll() completion or a wakeup_fd() call.
+ *
+ */
+
+#ifndef GRPC_CORE_LIB_IOMGR_WAKEUP_FD_CV_H
+#define GRPC_CORE_LIB_IOMGR_WAKEUP_FD_CV_H
+
+#include <grpc/support/sync.h>
+
+#include "src/core/lib/iomgr/ev_posix.h"
+
+#define FD_TO_IDX(fd) (-(fd)-1)
+#define IDX_TO_FD(idx) (-(idx)-1)
+
+typedef struct cv_node {
+  gpr_cv* cv;
+  struct cv_node* next;
+} cv_node;
+
+typedef struct fd_node {
+  int is_set;
+  cv_node* cvs;
+  struct fd_node* next_free;
+} fd_node;
+
+typedef struct cv_fd_table {
+  gpr_mu mu;
+  int pollcount;
+  int shutdown;
+  gpr_cv shutdown_complete;
+  fd_node* cvfds;
+  fd_node* free_fds;
+  unsigned int size;
+  grpc_poll_function_type poll;
+} cv_fd_table;
+
+#endif /* GRPC_CORE_LIB_IOMGR_WAKEUP_FD_CV_H */
diff --git a/src/core/lib/iomgr/wakeup_fd_eventfd.c b/src/core/lib/iomgr/wakeup_fd_eventfd.c
index 95f6102..373e21d 100644
--- a/src/core/lib/iomgr/wakeup_fd_eventfd.c
+++ b/src/core/lib/iomgr/wakeup_fd_eventfd.c
@@ -31,9 +31,9 @@
  *
  */
 
-#include <grpc/support/port_platform.h>
+#include "src/core/lib/iomgr/port.h"
 
-#ifdef GPR_LINUX_EVENTFD
+#ifdef GRPC_LINUX_EVENTFD
 
 #include <errno.h>
 #include <sys/eventfd.h>
@@ -94,4 +94,4 @@
     eventfd_create, eventfd_consume, eventfd_wakeup, eventfd_destroy,
     eventfd_check_availability};
 
-#endif /* GPR_LINUX_EVENTFD */
+#endif /* GRPC_LINUX_EVENTFD */
diff --git a/src/core/lib/iomgr/wakeup_fd_nospecial.c b/src/core/lib/iomgr/wakeup_fd_nospecial.c
index cb2f707..611bced 100644
--- a/src/core/lib/iomgr/wakeup_fd_nospecial.c
+++ b/src/core/lib/iomgr/wakeup_fd_nospecial.c
@@ -36,9 +36,9 @@
  * systems without anything better than pipe.
  */
 
-#include <grpc/support/port_platform.h>
+#include "src/core/lib/iomgr/port.h"
 
-#ifdef GPR_POSIX_NO_SPECIAL_WAKEUP_FD
+#ifdef GRPC_POSIX_NO_SPECIAL_WAKEUP_FD
 
 #include <stddef.h>
 #include "src/core/lib/iomgr/wakeup_fd_posix.h"
@@ -48,4 +48,4 @@
 const grpc_wakeup_fd_vtable grpc_specialized_wakeup_fd_vtable = {
     NULL, NULL, NULL, NULL, check_availability_invalid};
 
-#endif /* GPR_POSIX_NO_SPECIAL_WAKEUP_FD */
+#endif /* GRPC_POSIX_NO_SPECIAL_WAKEUP_FD */
diff --git a/src/core/lib/iomgr/wakeup_fd_pipe.c b/src/core/lib/iomgr/wakeup_fd_pipe.c
index 4e5dbdc..183f0eb 100644
--- a/src/core/lib/iomgr/wakeup_fd_pipe.c
+++ b/src/core/lib/iomgr/wakeup_fd_pipe.c
@@ -31,9 +31,9 @@
  *
  */
 
-#include <grpc/support/port_platform.h>
+#include "src/core/lib/iomgr/port.h"
 
-#ifdef GPR_POSIX_WAKEUP_FD
+#ifdef GRPC_POSIX_WAKEUP_FD
 
 #include "src/core/lib/iomgr/wakeup_fd_posix.h"
 
@@ -47,11 +47,10 @@
 
 static grpc_error* pipe_init(grpc_wakeup_fd* fd_info) {
   int pipefd[2];
-  /* TODO(klempner): Make this nonfatal */
   int r = pipe(pipefd);
   if (0 != r) {
     gpr_log(GPR_ERROR, "pipe creation failed (%d): %s", errno, strerror(errno));
-    abort();
+    return GRPC_OS_ERROR(errno, "pipe");
   }
   grpc_error* err;
   err = grpc_set_socket_nonblocking(pipefd[0], 1);
@@ -95,8 +94,13 @@
 }
 
 static int pipe_check_availability(void) {
-  /* Assume that pipes are always available. */
-  return 1;
+  grpc_wakeup_fd fd;
+  if (pipe_init(&fd) == GRPC_ERROR_NONE) {
+    pipe_destroy(&fd);
+    return 1;
+  } else {
+    return 0;
+  }
 }
 
 const grpc_wakeup_fd_vtable grpc_pipe_wakeup_fd_vtable = {
diff --git a/src/core/lib/iomgr/wakeup_fd_posix.c b/src/core/lib/iomgr/wakeup_fd_posix.c
index 046208a..8552640 100644
--- a/src/core/lib/iomgr/wakeup_fd_posix.c
+++ b/src/core/lib/iomgr/wakeup_fd_posix.c
@@ -31,42 +31,71 @@
  *
  */
 
-#include <grpc/support/port_platform.h>
+#include "src/core/lib/iomgr/port.h"
 
-#ifdef GPR_POSIX_WAKEUP_FD
+#ifdef GRPC_POSIX_WAKEUP_FD
 
 #include <stddef.h>
+#include "src/core/lib/iomgr/wakeup_fd_cv.h"
 #include "src/core/lib/iomgr/wakeup_fd_pipe.h"
 #include "src/core/lib/iomgr/wakeup_fd_posix.h"
 
+extern grpc_wakeup_fd_vtable grpc_cv_wakeup_fd_vtable;
 static const grpc_wakeup_fd_vtable *wakeup_fd_vtable = NULL;
+
 int grpc_allow_specialized_wakeup_fd = 1;
+int grpc_allow_pipe_wakeup_fd = 1;
+
+int has_real_wakeup_fd = 1;
+int cv_wakeup_fds_enabled = 0;
 
 void grpc_wakeup_fd_global_init(void) {
   if (grpc_allow_specialized_wakeup_fd &&
       grpc_specialized_wakeup_fd_vtable.check_availability()) {
     wakeup_fd_vtable = &grpc_specialized_wakeup_fd_vtable;
-  } else {
+  } else if (grpc_allow_pipe_wakeup_fd &&
+             grpc_pipe_wakeup_fd_vtable.check_availability()) {
     wakeup_fd_vtable = &grpc_pipe_wakeup_fd_vtable;
+  } else {
+    has_real_wakeup_fd = 0;
   }
 }
 
 void grpc_wakeup_fd_global_destroy(void) { wakeup_fd_vtable = NULL; }
 
+int grpc_has_wakeup_fd(void) { return has_real_wakeup_fd; }
+
+int grpc_cv_wakeup_fds_enabled(void) { return cv_wakeup_fds_enabled; }
+
+void grpc_enable_cv_wakeup_fds(int enable) { cv_wakeup_fds_enabled = enable; }
+
 grpc_error *grpc_wakeup_fd_init(grpc_wakeup_fd *fd_info) {
+  if (cv_wakeup_fds_enabled) {
+    return grpc_cv_wakeup_fd_vtable.init(fd_info);
+  }
   return wakeup_fd_vtable->init(fd_info);
 }
 
 grpc_error *grpc_wakeup_fd_consume_wakeup(grpc_wakeup_fd *fd_info) {
+  if (cv_wakeup_fds_enabled) {
+    return grpc_cv_wakeup_fd_vtable.consume(fd_info);
+  }
   return wakeup_fd_vtable->consume(fd_info);
 }
 
 grpc_error *grpc_wakeup_fd_wakeup(grpc_wakeup_fd *fd_info) {
+  if (cv_wakeup_fds_enabled) {
+    return grpc_cv_wakeup_fd_vtable.wakeup(fd_info);
+  }
   return wakeup_fd_vtable->wakeup(fd_info);
 }
 
 void grpc_wakeup_fd_destroy(grpc_wakeup_fd *fd_info) {
-  wakeup_fd_vtable->destroy(fd_info);
+  if (cv_wakeup_fds_enabled) {
+    grpc_cv_wakeup_fd_vtable.destroy(fd_info);
+  } else {
+    wakeup_fd_vtable->destroy(fd_info);
+  }
 }
 
-#endif /* GPR_POSIX_WAKEUP_FD */
+#endif /* GRPC_POSIX_WAKEUP_FD */
diff --git a/src/core/lib/iomgr/wakeup_fd_posix.h b/src/core/lib/iomgr/wakeup_fd_posix.h
index e269f24..71d32d9 100644
--- a/src/core/lib/iomgr/wakeup_fd_posix.h
+++ b/src/core/lib/iomgr/wakeup_fd_posix.h
@@ -71,6 +71,10 @@
  * purposes only.*/
 void grpc_wakeup_fd_global_init_force_fallback(void);
 
+int grpc_has_wakeup_fd(void);
+int grpc_cv_wakeup_fds_enabled(void);
+void grpc_enable_cv_wakeup_fds(int enable);
+
 typedef struct grpc_wakeup_fd grpc_wakeup_fd;
 
 typedef struct grpc_wakeup_fd_vtable {
@@ -88,6 +92,7 @@
 };
 
 extern int grpc_allow_specialized_wakeup_fd;
+extern int grpc_allow_pipe_wakeup_fd;
 
 #define GRPC_WAKEUP_FD_GET_READ_FD(fd_info) ((fd_info)->read_fd)
 
diff --git a/src/core/lib/iomgr/workqueue.h b/src/core/lib/iomgr/workqueue.h
index b2805dc..73d9849 100644
--- a/src/core/lib/iomgr/workqueue.h
+++ b/src/core/lib/iomgr/workqueue.h
@@ -39,10 +39,7 @@
 #include "src/core/lib/iomgr/iomgr.h"
 #include "src/core/lib/iomgr/pollset.h"
 #include "src/core/lib/iomgr/pollset_set.h"
-
-#ifdef GPR_POSIX_SOCKET
-#include "src/core/lib/iomgr/workqueue_posix.h"
-#endif
+#include "src/core/lib/iomgr/port.h"
 
 #ifdef GPR_WINDOWS
 #include "src/core/lib/iomgr/workqueue_windows.h"
@@ -58,20 +55,20 @@
    string will be printed alongside the refcount. When it is not defined, the
    string will be discarded at compilation time. */
 
-//#define GRPC_WORKQUEUE_REFCOUNT_DEBUG
+/*#define GRPC_WORKQUEUE_REFCOUNT_DEBUG*/
 #ifdef GRPC_WORKQUEUE_REFCOUNT_DEBUG
 #define GRPC_WORKQUEUE_REF(p, r) \
-  (grpc_workqueue_ref((p), __FILE__, __LINE__, (r)), (p))
+  grpc_workqueue_ref((p), __FILE__, __LINE__, (r))
 #define GRPC_WORKQUEUE_UNREF(exec_ctx, p, r) \
   grpc_workqueue_unref((exec_ctx), (p), __FILE__, __LINE__, (r))
-void grpc_workqueue_ref(grpc_workqueue *workqueue, const char *file, int line,
-                        const char *reason);
+grpc_workqueue *grpc_workqueue_ref(grpc_workqueue *workqueue, const char *file,
+                                   int line, const char *reason);
 void grpc_workqueue_unref(grpc_exec_ctx *exec_ctx, grpc_workqueue *workqueue,
                           const char *file, int line, const char *reason);
 #else
-#define GRPC_WORKQUEUE_REF(p, r) (grpc_workqueue_ref((p)), (p))
+#define GRPC_WORKQUEUE_REF(p, r) grpc_workqueue_ref((p))
 #define GRPC_WORKQUEUE_UNREF(cl, p, r) grpc_workqueue_unref((cl), (p))
-void grpc_workqueue_ref(grpc_workqueue *workqueue);
+grpc_workqueue *grpc_workqueue_ref(grpc_workqueue *workqueue);
 void grpc_workqueue_unref(grpc_exec_ctx *exec_ctx, grpc_workqueue *workqueue);
 #endif
 
diff --git a/src/core/lib/iomgr/workqueue_posix.c b/src/core/lib/iomgr/workqueue_posix.c
deleted file mode 100644
index ecfea68..0000000
--- a/src/core/lib/iomgr/workqueue_posix.c
+++ /dev/null
@@ -1,196 +0,0 @@
-/*
- *
- * Copyright 2015, Google Inc.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- *     * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- *     * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- */
-
-#include <grpc/support/port_platform.h>
-
-#ifdef GPR_POSIX_SOCKET
-
-#include "src/core/lib/iomgr/workqueue.h"
-
-#include <stdio.h>
-
-#include <grpc/support/alloc.h>
-#include <grpc/support/log.h>
-#include <grpc/support/useful.h>
-
-#include "src/core/lib/iomgr/ev_posix.h"
-#include "src/core/lib/profiling/timers.h"
-
-static void on_readable(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error);
-
-grpc_error *grpc_workqueue_create(grpc_exec_ctx *exec_ctx,
-                                  grpc_workqueue **workqueue) {
-  char name[32];
-  *workqueue = gpr_malloc(sizeof(grpc_workqueue));
-  gpr_ref_init(&(*workqueue)->refs, 1);
-  gpr_atm_no_barrier_store(&(*workqueue)->state, 1);
-  grpc_error *err = grpc_wakeup_fd_init(&(*workqueue)->wakeup_fd);
-  if (err != GRPC_ERROR_NONE) {
-    gpr_free(*workqueue);
-    return err;
-  }
-  sprintf(name, "workqueue:%p", (void *)(*workqueue));
-  (*workqueue)->wakeup_read_fd = grpc_fd_create(
-      GRPC_WAKEUP_FD_GET_READ_FD(&(*workqueue)->wakeup_fd), name);
-  gpr_mpscq_init(&(*workqueue)->queue);
-  grpc_closure_init(&(*workqueue)->read_closure, on_readable, *workqueue);
-  grpc_fd_notify_on_read(exec_ctx, (*workqueue)->wakeup_read_fd,
-                         &(*workqueue)->read_closure);
-  return GRPC_ERROR_NONE;
-}
-
-static void workqueue_destroy(grpc_exec_ctx *exec_ctx,
-                              grpc_workqueue *workqueue) {
-  grpc_fd_shutdown(exec_ctx, workqueue->wakeup_read_fd);
-}
-
-static void workqueue_orphan(grpc_exec_ctx *exec_ctx,
-                             grpc_workqueue *workqueue) {
-  if (gpr_atm_full_fetch_add(&workqueue->state, -1) == 1) {
-    workqueue_destroy(exec_ctx, workqueue);
-  }
-}
-
-#ifdef GRPC_WORKQUEUE_REFCOUNT_DEBUG
-void grpc_workqueue_ref(grpc_workqueue *workqueue, const char *file, int line,
-                        const char *reason) {
-  if (workqueue == NULL) return;
-  gpr_log(file, line, GPR_LOG_SEVERITY_DEBUG, "WORKQUEUE:%p   ref %d -> %d %s",
-          workqueue, (int)workqueue->refs.count, (int)workqueue->refs.count + 1,
-          reason);
-  gpr_ref(&workqueue->refs);
-}
-#else
-void grpc_workqueue_ref(grpc_workqueue *workqueue) {
-  if (workqueue == NULL) return;
-  gpr_ref(&workqueue->refs);
-}
-#endif
-
-#ifdef GRPC_WORKQUEUE_REFCOUNT_DEBUG
-void grpc_workqueue_unref(grpc_exec_ctx *exec_ctx, grpc_workqueue *workqueue,
-                          const char *file, int line, const char *reason) {
-  if (workqueue == NULL) return;
-  gpr_log(file, line, GPR_LOG_SEVERITY_DEBUG, "WORKQUEUE:%p unref %d -> %d %s",
-          workqueue, (int)workqueue->refs.count, (int)workqueue->refs.count - 1,
-          reason);
-  if (gpr_unref(&workqueue->refs)) {
-    workqueue_orphan(exec_ctx, workqueue);
-  }
-}
-#else
-void grpc_workqueue_unref(grpc_exec_ctx *exec_ctx, grpc_workqueue *workqueue) {
-  if (workqueue == NULL) return;
-  if (gpr_unref(&workqueue->refs)) {
-    workqueue_orphan(exec_ctx, workqueue);
-  }
-}
-#endif
-
-static void drain(grpc_exec_ctx *exec_ctx, grpc_workqueue *workqueue) {
-  abort();
-}
-
-static void wakeup(grpc_exec_ctx *exec_ctx, grpc_workqueue *workqueue) {
-  GPR_TIMER_MARK("workqueue.wakeup", 0);
-  grpc_error *err = grpc_wakeup_fd_wakeup(&workqueue->wakeup_fd);
-  if (!GRPC_LOG_IF_ERROR("wakeupfd_wakeup", err)) {
-    drain(exec_ctx, workqueue);
-  }
-}
-
-static void on_readable(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) {
-  GPR_TIMER_BEGIN("workqueue.on_readable", 0);
-
-  grpc_workqueue *workqueue = arg;
-
-  if (error != GRPC_ERROR_NONE) {
-    /* HACK: let wakeup_fd code know that we stole the fd */
-    workqueue->wakeup_fd.read_fd = 0;
-    grpc_wakeup_fd_destroy(&workqueue->wakeup_fd);
-    grpc_fd_orphan(exec_ctx, workqueue->wakeup_read_fd, NULL, NULL, "destroy");
-    GPR_ASSERT(gpr_atm_no_barrier_load(&workqueue->state) == 0);
-    gpr_free(workqueue);
-  } else {
-    error = grpc_wakeup_fd_consume_wakeup(&workqueue->wakeup_fd);
-    gpr_mpscq_node *n = gpr_mpscq_pop(&workqueue->queue);
-    if (error == GRPC_ERROR_NONE) {
-      grpc_fd_notify_on_read(exec_ctx, workqueue->wakeup_read_fd,
-                             &workqueue->read_closure);
-    } else {
-      /* recurse to get error handling */
-      on_readable(exec_ctx, arg, error);
-    }
-    if (n == NULL) {
-      /* try again - queue in an inconsistant state */
-      wakeup(exec_ctx, workqueue);
-    } else {
-      switch (gpr_atm_full_fetch_add(&workqueue->state, -2)) {
-        case 3:  // had one count, one unorphaned --> done, unorphaned
-          break;
-        case 2:  // had one count, one orphaned --> done, orphaned
-          workqueue_destroy(exec_ctx, workqueue);
-          break;
-        case 1:
-        case 0:
-          // these values are illegal - representing an already done or
-          // deleted workqueue
-          GPR_UNREACHABLE_CODE(break);
-        default:
-          // schedule a wakeup since there's more to do
-          wakeup(exec_ctx, workqueue);
-      }
-      grpc_closure *cl = (grpc_closure *)n;
-      grpc_error *clerr = cl->error;
-      cl->cb(exec_ctx, cl->cb_arg, clerr);
-      GRPC_ERROR_UNREF(clerr);
-    }
-  }
-
-  GPR_TIMER_END("workqueue.on_readable", 0);
-}
-
-void grpc_workqueue_enqueue(grpc_exec_ctx *exec_ctx, grpc_workqueue *workqueue,
-                            grpc_closure *closure, grpc_error *error) {
-  GPR_TIMER_BEGIN("workqueue.enqueue", 0);
-  gpr_atm last = gpr_atm_full_fetch_add(&workqueue->state, 2);
-  GPR_ASSERT(last & 1);
-  closure->error = error;
-  gpr_mpscq_push(&workqueue->queue, &closure->next_data.atm_next);
-  if (last == 1) {
-    wakeup(exec_ctx, workqueue);
-  }
-  GPR_TIMER_END("workqueue.enqueue", 0);
-}
-
-#endif /* GPR_POSIX_SOCKET */
diff --git a/src/core/lib/iomgr/workqueue_posix.h b/src/core/lib/iomgr/workqueue_posix.h
deleted file mode 100644
index 03ee21c..0000000
--- a/src/core/lib/iomgr/workqueue_posix.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- *
- * Copyright 2015, Google Inc.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- *     * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- *     * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- */
-
-#ifndef GRPC_CORE_LIB_IOMGR_WORKQUEUE_POSIX_H
-#define GRPC_CORE_LIB_IOMGR_WORKQUEUE_POSIX_H
-
-#include "src/core/lib/iomgr/wakeup_fd_posix.h"
-#include "src/core/lib/support/mpscq.h"
-
-struct grpc_fd;
-
-struct grpc_workqueue {
-  gpr_refcount refs;
-  gpr_mpscq queue;
-  // state is:
-  // lower bit - zero if orphaned
-  // other bits - number of items enqueued
-  gpr_atm state;
-
-  grpc_wakeup_fd wakeup_fd;
-  struct grpc_fd *wakeup_read_fd;
-
-  grpc_closure read_closure;
-};
-
-/** Create a work queue. Returns an error if creation fails. If creation
-    succeeds, sets *workqueue to point to it. */
-grpc_error *grpc_workqueue_create(grpc_exec_ctx *exec_ctx,
-                                  grpc_workqueue **workqueue);
-
-#endif /* GRPC_CORE_LIB_IOMGR_WORKQUEUE_POSIX_H */
diff --git a/src/core/lib/iomgr/workqueue_uv.c b/src/core/lib/iomgr/workqueue_uv.c
new file mode 100644
index 0000000..e58ca47
--- /dev/null
+++ b/src/core/lib/iomgr/workqueue_uv.c
@@ -0,0 +1,66 @@
+/*
+ *
+ * Copyright 2016, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ *     * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+#include "src/core/lib/iomgr/port.h"
+
+#ifdef GRPC_UV
+
+#include "src/core/lib/iomgr/workqueue.h"
+
+// Minimal implementation of grpc_workqueue for libuv
+// Works by directly enqueuing workqueue items onto the current execution
+// context, which is at least correct, if not performant or in the spirit of
+// workqueues.
+
+void grpc_workqueue_flush(grpc_exec_ctx *exec_ctx, grpc_workqueue *workqueue) {}
+
+#ifdef GRPC_WORKQUEUE_REFCOUNT_DEBUG
+grpc_workqueue *grpc_workqueue_ref(grpc_workqueue *workqueue, const char *file,
+                                   int line, const char *reason) {
+  return workqueue;
+}
+void grpc_workqueue_unref(grpc_exec_ctx *exec_ctx, grpc_workqueue *workqueue,
+                          const char *file, int line, const char *reason) {}
+#else
+grpc_workqueue *grpc_workqueue_ref(grpc_workqueue *workqueue) {
+  return workqueue;
+}
+void grpc_workqueue_unref(grpc_exec_ctx *exec_ctx, grpc_workqueue *workqueue) {}
+#endif
+
+void grpc_workqueue_enqueue(grpc_exec_ctx *exec_ctx, grpc_workqueue *workqueue,
+                            grpc_closure *closure, grpc_error *error) {
+  grpc_exec_ctx_sched(exec_ctx, closure, error, NULL);
+}
+
+#endif /* GPR_UV */
diff --git a/src/core/ext/client_config/default_initial_connect_string.c b/src/core/lib/iomgr/workqueue_uv.h
similarity index 82%
copy from src/core/ext/client_config/default_initial_connect_string.c
copy to src/core/lib/iomgr/workqueue_uv.h
index a70da4a..be3f8e4 100644
--- a/src/core/ext/client_config/default_initial_connect_string.c
+++ b/src/core/lib/iomgr/workqueue_uv.h
@@ -1,6 +1,6 @@
 /*
  *
- * Copyright 2015, Google Inc.
+ * Copyright 2016, Google Inc.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -31,9 +31,7 @@
  *
  */
 
-#include <grpc/support/slice.h>
-#include "src/core/lib/iomgr/sockaddr.h"
+#ifndef GRPC_CORE_LIB_IOMGR_WORKQUEUE_UV_H
+#define GRPC_CORE_LIB_IOMGR_WORKQUEUE_UV_H
 
-void grpc_set_default_initial_connect_string(struct sockaddr **addr,
-                                             size_t *addr_len,
-                                             gpr_slice *initial_str) {}
+#endif /* GRPC_CORE_LIB_IOMGR_WORKQUEUE_UV_H */
diff --git a/src/core/lib/iomgr/workqueue_windows.c b/src/core/lib/iomgr/workqueue_windows.c
index ee81dc2..5c93d3c 100644
--- a/src/core/lib/iomgr/workqueue_windows.c
+++ b/src/core/lib/iomgr/workqueue_windows.c
@@ -43,12 +43,16 @@
 // workqueues.
 
 #ifdef GRPC_WORKQUEUE_REFCOUNT_DEBUG
-void grpc_workqueue_ref(grpc_workqueue *workqueue, const char *file, int line,
-                        const char *reason) {}
+grpc_workqueue *grpc_workqueue_ref(grpc_workqueue *workqueue, const char *file,
+                                   int line, const char *reason) {
+  return workqueue;
+}
 void grpc_workqueue_unref(grpc_exec_ctx *exec_ctx, grpc_workqueue *workqueue,
                           const char *file, int line, const char *reason) {}
 #else
-void grpc_workqueue_ref(grpc_workqueue *workqueue) {}
+grpc_workqueue *grpc_workqueue_ref(grpc_workqueue *workqueue) {
+  return workqueue;
+}
 void grpc_workqueue_unref(grpc_exec_ctx *exec_ctx, grpc_workqueue *workqueue) {}
 #endif
 
diff --git a/src/core/lib/profiling/basic_timers.c b/src/core/lib/profiling/basic_timers.c
index 51813d0..bdf9af2 100644
--- a/src/core/lib/profiling/basic_timers.c
+++ b/src/core/lib/profiling/basic_timers.c
@@ -83,6 +83,7 @@
 static gpr_thd_id g_writing_thread;
 static __thread int g_thread_id;
 static int g_next_thread_id;
+static int g_writing_enabled = 1;
 
 static int timer_log_push_back(gpr_timer_log_list *list, gpr_timer_log *log) {
   if (list->head == NULL) {
@@ -177,7 +178,7 @@
   }
 }
 
-static void finish_writing() {
+static void finish_writing(void) {
   pthread_mutex_lock(&g_mu);
   g_shutdown = 1;
   pthread_cond_signal(&g_cv);
@@ -230,6 +231,10 @@
                                int important, const char *file, int line) {
   gpr_timer_entry *entry;
 
+  if (!g_writing_enabled) {
+    return;
+  }
+
   if (g_thread_log == NULL || g_thread_log->num_entries == MAX_COUNT) {
     rotate_log();
   }
@@ -261,6 +266,8 @@
   gpr_timers_log_add(tagstr, END, important, file, line);
 }
 
+void gpr_timer_set_enabled(int enabled) { g_writing_enabled = enabled; }
+
 /* Basic profiler specific API functions. */
 void gpr_timers_global_init(void) {}
 
@@ -272,4 +279,6 @@
 void gpr_timers_global_destroy(void) {}
 
 void gpr_timers_set_log_filename(const char *filename) {}
+
+void gpr_timer_set_enabled(int enabled) {}
 #endif /* GRPC_BASIC_PROFILER */
diff --git a/src/core/lib/profiling/timers.h b/src/core/lib/profiling/timers.h
index c8567e8..621cdbf 100644
--- a/src/core/lib/profiling/timers.h
+++ b/src/core/lib/profiling/timers.h
@@ -50,6 +50,8 @@
 
 void gpr_timers_set_log_filename(const char *filename);
 
+void gpr_timer_set_enabled(int enabled);
+
 #if !(defined(GRPC_STAP_PROFILER) + defined(GRPC_BASIC_PROFILER))
 /* No profiling. No-op all the things. */
 #define GPR_TIMER_MARK(tag, important) \
diff --git a/src/core/lib/security/credentials/google_default/credentials_posix.c b/src/core/lib/security/credentials/google_default/credentials_generic.c
similarity index 81%
rename from src/core/lib/security/credentials/google_default/credentials_posix.c
rename to src/core/lib/security/credentials/google_default/credentials_generic.c
index 42c9d7f..d13d8c5 100644
--- a/src/core/lib/security/credentials/google_default/credentials_posix.c
+++ b/src/core/lib/security/credentials/google_default/credentials_generic.c
@@ -1,6 +1,6 @@
 /*
  *
- * Copyright 2015, Google Inc.
+ * Copyright 2016, Google Inc.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -31,10 +31,6 @@
  *
  */
 
-#include <grpc/support/port_platform.h>
-
-#ifdef GPR_POSIX_FILE
-
 #include "src/core/lib/security/credentials/google_default/google_default_credentials.h"
 
 #include <grpc/support/alloc.h>
@@ -46,16 +42,13 @@
 
 char *grpc_get_well_known_google_credentials_file_path_impl(void) {
   char *result = NULL;
-  char *home = gpr_getenv("HOME");
-  if (home == NULL) {
-    gpr_log(GPR_ERROR, "Could not get HOME environment variable.");
+  char *base = gpr_getenv(GRPC_GOOGLE_CREDENTIALS_PATH_ENV_VAR);
+  if (base == NULL) {
+    gpr_log(GPR_ERROR, "Could not get " GRPC_GOOGLE_CREDENTIALS_ENV_VAR
+                       " environment variable.");
     return NULL;
   }
-  gpr_asprintf(&result, "%s/.config/%s/%s", home,
-               GRPC_GOOGLE_CLOUD_SDK_CONFIG_DIRECTORY,
-               GRPC_GOOGLE_WELL_KNOWN_CREDENTIALS_FILE);
-  gpr_free(home);
+  gpr_asprintf(&result, "%s/%s", base, GRPC_GOOGLE_CREDENTIALS_PATH_SUFFIX);
+  gpr_free(base);
   return result;
 }
-
-#endif /* GPR_POSIX_FILE */
diff --git a/src/core/lib/security/credentials/google_default/credentials_windows.c b/src/core/lib/security/credentials/google_default/credentials_windows.c
deleted file mode 100644
index 208b8fd..0000000
--- a/src/core/lib/security/credentials/google_default/credentials_windows.c
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- *
- * Copyright 2015, Google Inc.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- *     * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- *     * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- */
-
-#include <grpc/support/port_platform.h>
-
-#ifdef GPR_WINDOWS
-
-#include "src/core/lib/security/credentials/google_default/google_default_credentials.h"
-
-#include <grpc/support/alloc.h>
-#include <grpc/support/log.h>
-#include <grpc/support/string_util.h>
-
-#include "src/core/lib/support/env.h"
-#include "src/core/lib/support/string.h"
-
-char *grpc_get_well_known_google_credentials_file_path_impl(void) {
-  char *result = NULL;
-  char *appdata_path = gpr_getenv("APPDATA");
-  if (appdata_path == NULL) {
-    gpr_log(GPR_ERROR, "Could not get APPDATA environment variable.");
-    return NULL;
-  }
-  gpr_asprintf(&result, "%s/%s/%s", appdata_path,
-               GRPC_GOOGLE_CLOUD_SDK_CONFIG_DIRECTORY,
-               GRPC_GOOGLE_WELL_KNOWN_CREDENTIALS_FILE);
-  gpr_free(appdata_path);
-  return result;
-}
-
-#endif /* GPR_WINDOWS */
diff --git a/src/core/lib/security/credentials/google_default/google_default_credentials.h b/src/core/lib/security/credentials/google_default/google_default_credentials.h
index fac4377..b55546d 100644
--- a/src/core/lib/security/credentials/google_default/google_default_credentials.h
+++ b/src/core/lib/security/credentials/google_default/google_default_credentials.h
@@ -34,12 +34,26 @@
 #ifndef GRPC_CORE_LIB_SECURITY_CREDENTIALS_GOOGLE_DEFAULT_GOOGLE_DEFAULT_CREDENTIALS_H
 #define GRPC_CORE_LIB_SECURITY_CREDENTIALS_GOOGLE_DEFAULT_GOOGLE_DEFAULT_CREDENTIALS_H
 
+#include <grpc/support/port_platform.h>
+
 #include "src/core/lib/security/credentials/credentials.h"
 
 #define GRPC_GOOGLE_CLOUD_SDK_CONFIG_DIRECTORY "gcloud"
 #define GRPC_GOOGLE_WELL_KNOWN_CREDENTIALS_FILE \
   "application_default_credentials.json"
 
+#ifdef GPR_WINDOWS
+#define GRPC_GOOGLE_CREDENTIALS_PATH_ENV_VAR "APPDATA"
+#define GRPC_GOOGLE_CREDENTIALS_PATH_SUFFIX \
+  GRPC_GOOGLE_CLOUD_SDK_CONFIG_DIRECTORY    \
+  "/" GRPC_GOOGLE_WELL_KNOWN_CREDENTIALS_FILE
+#else
+#define GRPC_GOOGLE_CREDENTIALS_PATH_ENV_VAR "HOME"
+#define GRPC_GOOGLE_CREDENTIALS_PATH_SUFFIX         \
+  ".config/" GRPC_GOOGLE_CLOUD_SDK_CONFIG_DIRECTORY \
+  "/" GRPC_GOOGLE_WELL_KNOWN_CREDENTIALS_FILE
+#endif
+
 void grpc_flush_cached_google_default_credentials(void);
 
 #endif /* GRPC_CORE_LIB_SECURITY_CREDENTIALS_GOOGLE_DEFAULT_GOOGLE_DEFAULT_CREDENTIALS_H \
diff --git a/src/core/lib/support/log.c b/src/core/lib/support/log.c
index 899f121..af1651d 100644
--- a/src/core/lib/support/log.c
+++ b/src/core/lib/support/log.c
@@ -60,8 +60,9 @@
 
 void gpr_log_message(const char *file, int line, gpr_log_severity severity,
                      const char *message) {
-  if ((gpr_atm)severity < gpr_atm_no_barrier_load(&g_min_severity_to_print))
+  if ((gpr_atm)severity < gpr_atm_no_barrier_load(&g_min_severity_to_print)) {
     return;
+  }
 
   gpr_log_func_args lfargs;
   memset(&lfargs, 0, sizeof(lfargs));
@@ -82,11 +83,11 @@
 
   gpr_atm min_severity_to_print = GPR_LOG_SEVERITY_ERROR;
   if (verbosity != NULL) {
-    if (strcmp(verbosity, "DEBUG") == 0) {
+    if (gpr_stricmp(verbosity, "DEBUG") == 0) {
       min_severity_to_print = (gpr_atm)GPR_LOG_SEVERITY_DEBUG;
-    } else if (strcmp(verbosity, "INFO") == 0) {
+    } else if (gpr_stricmp(verbosity, "INFO") == 0) {
       min_severity_to_print = (gpr_atm)GPR_LOG_SEVERITY_INFO;
-    } else if (strcmp(verbosity, "ERROR") == 0) {
+    } else if (gpr_stricmp(verbosity, "ERROR") == 0) {
       min_severity_to_print = (gpr_atm)GPR_LOG_SEVERITY_ERROR;
     }
     gpr_free(verbosity);
diff --git a/src/core/lib/support/string.c b/src/core/lib/support/string.c
index 30c1e67..d17fb9d 100644
--- a/src/core/lib/support/string.c
+++ b/src/core/lib/support/string.c
@@ -304,3 +304,14 @@
 char *gpr_strvec_flatten(gpr_strvec *sv, size_t *final_length) {
   return gpr_strjoin((const char **)sv->strs, sv->count, final_length);
 }
+
+int gpr_stricmp(const char *a, const char *b) {
+  int ca, cb;
+  do {
+    ca = tolower(*a);
+    cb = tolower(*b);
+    ++a;
+    ++b;
+  } while (ca == cb && ca && cb);
+  return ca - cb;
+}
diff --git a/src/core/lib/support/string.h b/src/core/lib/support/string.h
index 2b6bb3e..9a94e94 100644
--- a/src/core/lib/support/string.h
+++ b/src/core/lib/support/string.h
@@ -118,6 +118,10 @@
    total_length as per gpr_strjoin */
 char *gpr_strvec_flatten(gpr_strvec *strs, size_t *total_length);
 
+/** Case insensitive string comparison... return <0 if lower(a)<lower(b), ==0 if
+    lower(a)==lower(b), >0 if lower(a)>lower(b) */
+int gpr_stricmp(const char *a, const char *b);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/src/core/lib/support/thd.c b/src/core/lib/support/thd.c
index 41daeb5..40f53a1 100644
--- a/src/core/lib/support/thd.c
+++ b/src/core/lib/support/thd.c
@@ -33,7 +33,7 @@
 
 /* Posix implementation for gpr threads. */
 
-#include <memory.h>
+#include <string.h>
 
 #include <grpc/support/thd.h>
 
diff --git a/src/core/lib/surface/call.c b/src/core/lib/surface/call.c
index b0f66f4..02a5de0 100644
--- a/src/core/lib/surface/call.c
+++ b/src/core/lib/surface/call.c
@@ -30,6 +30,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  *
  */
+
 #include <assert.h>
 #include <limits.h>
 #include <stdio.h>
@@ -223,33 +224,37 @@
 static void receiving_slice_ready(grpc_exec_ctx *exec_ctx, void *bctlp,
                                   grpc_error *error);
 
-grpc_call *grpc_call_create(
-    grpc_channel *channel, grpc_call *parent_call, uint32_t propagation_mask,
-    grpc_completion_queue *cq, grpc_pollset_set *pollset_set_alternative,
-    const void *server_transport_data, grpc_mdelem **add_initial_metadata,
-    size_t add_initial_metadata_count, gpr_timespec send_deadline) {
+grpc_error *grpc_call_create(const grpc_call_create_args *args,
+                             grpc_call **out_call) {
   size_t i, j;
-  grpc_channel_stack *channel_stack = grpc_channel_get_channel_stack(channel);
+  grpc_channel_stack *channel_stack =
+      grpc_channel_get_channel_stack(args->channel);
   grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
   grpc_call *call;
   GPR_TIMER_BEGIN("grpc_call_create", 0);
   call = gpr_malloc(sizeof(grpc_call) + channel_stack->call_stack_size);
+  *out_call = call;
   memset(call, 0, sizeof(grpc_call));
   gpr_mu_init(&call->mu);
-  call->channel = channel;
-  call->cq = cq;
-  call->parent = parent_call;
+  call->channel = args->channel;
+  call->cq = args->cq;
+  call->parent = args->parent_call;
   /* Always support no compression */
   GPR_BITSET(&call->encodings_accepted_by_peer, GRPC_COMPRESS_NONE);
-  call->is_client = server_transport_data == NULL;
+  call->is_client = args->server_transport_data == NULL;
+  grpc_mdstr *path = NULL;
   if (call->is_client) {
-    GPR_ASSERT(add_initial_metadata_count < MAX_SEND_EXTRA_METADATA_COUNT);
-    for (i = 0; i < add_initial_metadata_count; i++) {
-      call->send_extra_metadata[i].md = add_initial_metadata[i];
+    GPR_ASSERT(args->add_initial_metadata_count <
+               MAX_SEND_EXTRA_METADATA_COUNT);
+    for (i = 0; i < args->add_initial_metadata_count; i++) {
+      call->send_extra_metadata[i].md = args->add_initial_metadata[i];
+      if (args->add_initial_metadata[i]->key == GRPC_MDSTR_PATH) {
+        path = GRPC_MDSTR_REF(args->add_initial_metadata[i]->value);
+      }
     }
-    call->send_extra_metadata_count = (int)add_initial_metadata_count;
+    call->send_extra_metadata_count = (int)args->add_initial_metadata_count;
   } else {
-    GPR_ASSERT(add_initial_metadata_count == 0);
+    GPR_ASSERT(args->add_initial_metadata_count == 0);
     call->send_extra_metadata_count = 0;
   }
   for (i = 0; i < 2; i++) {
@@ -257,84 +262,87 @@
       call->metadata_batch[i][j].deadline = gpr_inf_future(GPR_CLOCK_MONOTONIC);
     }
   }
-  send_deadline = gpr_convert_clock_type(send_deadline, GPR_CLOCK_MONOTONIC);
+  gpr_timespec send_deadline =
+      gpr_convert_clock_type(args->send_deadline, GPR_CLOCK_MONOTONIC);
 
-  if (parent_call != NULL) {
-    GRPC_CALL_INTERNAL_REF(parent_call, "child");
+  if (args->parent_call != NULL) {
+    GRPC_CALL_INTERNAL_REF(args->parent_call, "child");
     GPR_ASSERT(call->is_client);
-    GPR_ASSERT(!parent_call->is_client);
+    GPR_ASSERT(!args->parent_call->is_client);
 
-    gpr_mu_lock(&parent_call->mu);
+    gpr_mu_lock(&args->parent_call->mu);
 
-    if (propagation_mask & GRPC_PROPAGATE_DEADLINE) {
+    if (args->propagation_mask & GRPC_PROPAGATE_DEADLINE) {
       send_deadline = gpr_time_min(
           gpr_convert_clock_type(send_deadline,
-                                 parent_call->send_deadline.clock_type),
-          parent_call->send_deadline);
+                                 args->parent_call->send_deadline.clock_type),
+          args->parent_call->send_deadline);
     }
     /* for now GRPC_PROPAGATE_TRACING_CONTEXT *MUST* be passed with
      * GRPC_PROPAGATE_STATS_CONTEXT */
     /* TODO(ctiller): This should change to use the appropriate census start_op
      * call. */
-    if (propagation_mask & GRPC_PROPAGATE_CENSUS_TRACING_CONTEXT) {
-      GPR_ASSERT(propagation_mask & GRPC_PROPAGATE_CENSUS_STATS_CONTEXT);
-      grpc_call_context_set(call, GRPC_CONTEXT_TRACING,
-                            parent_call->context[GRPC_CONTEXT_TRACING].value,
-                            NULL);
+    if (args->propagation_mask & GRPC_PROPAGATE_CENSUS_TRACING_CONTEXT) {
+      GPR_ASSERT(args->propagation_mask & GRPC_PROPAGATE_CENSUS_STATS_CONTEXT);
+      grpc_call_context_set(
+          call, GRPC_CONTEXT_TRACING,
+          args->parent_call->context[GRPC_CONTEXT_TRACING].value, NULL);
     } else {
-      GPR_ASSERT(propagation_mask & GRPC_PROPAGATE_CENSUS_STATS_CONTEXT);
+      GPR_ASSERT(args->propagation_mask & GRPC_PROPAGATE_CENSUS_STATS_CONTEXT);
     }
-    if (propagation_mask & GRPC_PROPAGATE_CANCELLATION) {
+    if (args->propagation_mask & GRPC_PROPAGATE_CANCELLATION) {
       call->cancellation_is_inherited = 1;
     }
 
-    if (parent_call->first_child == NULL) {
-      parent_call->first_child = call;
+    if (args->parent_call->first_child == NULL) {
+      args->parent_call->first_child = call;
       call->sibling_next = call->sibling_prev = call;
     } else {
-      call->sibling_next = parent_call->first_child;
-      call->sibling_prev = parent_call->first_child->sibling_prev;
+      call->sibling_next = args->parent_call->first_child;
+      call->sibling_prev = args->parent_call->first_child->sibling_prev;
       call->sibling_next->sibling_prev = call->sibling_prev->sibling_next =
           call;
     }
 
-    gpr_mu_unlock(&parent_call->mu);
+    gpr_mu_unlock(&args->parent_call->mu);
   }
 
   call->send_deadline = send_deadline;
 
-  GRPC_CHANNEL_INTERNAL_REF(channel, "call");
+  GRPC_CHANNEL_INTERNAL_REF(args->channel, "call");
   /* initial refcount dropped by grpc_call_destroy */
-  grpc_error *error = grpc_call_stack_init(
-      &exec_ctx, channel_stack, 1, destroy_call, call, call->context,
-      server_transport_data, send_deadline, CALL_STACK_FROM_CALL(call));
+  grpc_error *error =
+      grpc_call_stack_init(&exec_ctx, channel_stack, 1, destroy_call, call,
+                           call->context, args->server_transport_data, path,
+                           send_deadline, CALL_STACK_FROM_CALL(call));
   if (error != GRPC_ERROR_NONE) {
     grpc_status_code status;
     const char *error_str;
     grpc_error_get_status(error, &status, &error_str);
     close_with_status(&exec_ctx, call, status, error_str);
-    GRPC_ERROR_UNREF(error);
   }
-  if (cq != NULL) {
+  if (args->cq != NULL) {
     GPR_ASSERT(
-        pollset_set_alternative == NULL &&
+        args->pollset_set_alternative == NULL &&
         "Only one of 'cq' and 'pollset_set_alternative' should be non-NULL.");
-    GRPC_CQ_INTERNAL_REF(cq, "bind");
+    GRPC_CQ_INTERNAL_REF(args->cq, "bind");
     call->pollent =
-        grpc_polling_entity_create_from_pollset(grpc_cq_pollset(cq));
+        grpc_polling_entity_create_from_pollset(grpc_cq_pollset(args->cq));
   }
-  if (pollset_set_alternative != NULL) {
-    call->pollent =
-        grpc_polling_entity_create_from_pollset_set(pollset_set_alternative);
+  if (args->pollset_set_alternative != NULL) {
+    call->pollent = grpc_polling_entity_create_from_pollset_set(
+        args->pollset_set_alternative);
   }
   if (!grpc_polling_entity_is_empty(&call->pollent)) {
     grpc_call_stack_set_pollset_or_pollset_set(
         &exec_ctx, CALL_STACK_FROM_CALL(call), &call->pollent);
   }
 
+  if (path != NULL) GRPC_MDSTR_UNREF(path);
+
   grpc_exec_ctx_finish(&exec_ctx);
   GPR_TIMER_END("grpc_call_create", 0);
-  return call;
+  return error;
 }
 
 void grpc_call_set_completion_queue(grpc_exec_ctx *exec_ctx, grpc_call *call,
@@ -1038,9 +1046,14 @@
 static void post_batch_completion(grpc_exec_ctx *exec_ctx,
                                   batch_control *bctl) {
   grpc_call *call = bctl->call;
+  grpc_error *error = bctl->error;
+  if (bctl->recv_final_op) {
+    GRPC_ERROR_UNREF(error);
+    error = GRPC_ERROR_NONE;
+  }
   if (bctl->is_notify_tag_closure) {
     /* unrefs bctl->error */
-    grpc_exec_ctx_sched(exec_ctx, bctl->notify_tag, bctl->error, NULL);
+    grpc_closure_run(exec_ctx, bctl->notify_tag, error);
     gpr_mu_lock(&call->mu);
     bctl->call->used_batches =
         (uint8_t)(bctl->call->used_batches &
@@ -1049,7 +1062,7 @@
     GRPC_CALL_INTERNAL_UNREF(exec_ctx, call, "completion");
   } else {
     /* unrefs bctl->error */
-    grpc_cq_end_op(exec_ctx, bctl->call->cq, bctl->notify_tag, bctl->error,
+    grpc_cq_end_op(exec_ctx, bctl->call->cq, bctl->notify_tag, error,
                    finish_batch_completion, bctl, &bctl->cq_completion);
   }
 }
@@ -1198,6 +1211,14 @@
   }
 }
 
+static void add_batch_error(batch_control *bctl, grpc_error *error) {
+  if (error == GRPC_ERROR_NONE) return;
+  if (bctl->error == GRPC_ERROR_NONE) {
+    bctl->error = GRPC_ERROR_CREATE("Call batch operation failed");
+  }
+  bctl->error = grpc_error_add_child(bctl->error, error);
+}
+
 static void receiving_initial_metadata_ready(grpc_exec_ctx *exec_ctx,
                                              void *bctlp, grpc_error *error) {
   batch_control *bctl = bctlp;
@@ -1205,9 +1226,8 @@
 
   gpr_mu_lock(&call->mu);
 
-  if (error != GRPC_ERROR_NONE) {
-    bctl->error = GRPC_ERROR_REF(error);
-  } else {
+  add_batch_error(bctl, GRPC_ERROR_REF(error));
+  if (error == GRPC_ERROR_NONE) {
     grpc_metadata_batch *md =
         &call->metadata_batch[1 /* is_receiving */][0 /* is_trailing */];
     grpc_metadata_batch_filter(md, recv_initial_filter, call);
@@ -1304,8 +1324,7 @@
     GRPC_ERROR_UNREF(error);
     error = GRPC_ERROR_NONE;
   }
-  GRPC_ERROR_UNREF(bctl->error);
-  bctl->error = GRPC_ERROR_REF(error);
+  add_batch_error(bctl, GRPC_ERROR_REF(error));
   gpr_mu_unlock(&call->mu);
   if (gpr_unref(&bctl->steps_to_complete)) {
     post_batch_completion(exec_ctx, bctl);
@@ -1341,6 +1360,7 @@
 
   grpc_transport_stream_op *stream_op = &bctl->op;
   memset(stream_op, 0, sizeof(*stream_op));
+  stream_op->covered_by_poller = true;
 
   if (nops == 0) {
     GRPC_CALL_INTERNAL_REF(call, "completion");
diff --git a/src/core/lib/surface/call.h b/src/core/lib/surface/call.h
index 3a78fe3..18af41b 100644
--- a/src/core/lib/surface/call.h
+++ b/src/core/lib/surface/call.h
@@ -49,15 +49,29 @@
                                            grpc_call *call, int success,
                                            void *user_data);
 
-grpc_call *grpc_call_create(grpc_channel *channel, grpc_call *parent_call,
-                            uint32_t propagation_mask,
-                            grpc_completion_queue *cq,
-                            /* if not NULL, it'll be used in lieu of \a cq */
-                            grpc_pollset_set *pollset_set_alternative,
-                            const void *server_transport_data,
-                            grpc_mdelem **add_initial_metadata,
-                            size_t add_initial_metadata_count,
-                            gpr_timespec send_deadline);
+typedef struct grpc_call_create_args {
+  grpc_channel *channel;
+
+  grpc_call *parent_call;
+  uint32_t propagation_mask;
+
+  grpc_completion_queue *cq;
+  /* if not NULL, it'll be used in lieu of cq */
+  grpc_pollset_set *pollset_set_alternative;
+
+  const void *server_transport_data;
+
+  grpc_mdelem **add_initial_metadata;
+  size_t add_initial_metadata_count;
+
+  gpr_timespec send_deadline;
+} grpc_call_create_args;
+
+/* Create a new call based on \a args.
+   Regardless of success or failure, always returns a valid new call into *call
+   */
+grpc_error *grpc_call_create(const grpc_call_create_args *args,
+                             grpc_call **call);
 
 void grpc_call_set_completion_queue(grpc_exec_ctx *exec_ctx, grpc_call *call,
                                     grpc_completion_queue *cq);
diff --git a/src/core/lib/surface/channel.c b/src/core/lib/surface/channel.c
index 6adb70a..92d783b 100644
--- a/src/core/lib/surface/channel.c
+++ b/src/core/lib/surface/channel.c
@@ -193,9 +193,21 @@
     send_metadata[num_metadata++] = GRPC_MDELEM_REF(channel->default_authority);
   }
 
-  return grpc_call_create(channel, parent_call, propagation_mask, cq,
-                          pollset_set_alternative, NULL, send_metadata,
-                          num_metadata, deadline);
+  grpc_call_create_args args;
+  memset(&args, 0, sizeof(args));
+  args.channel = channel;
+  args.parent_call = parent_call;
+  args.propagation_mask = propagation_mask;
+  args.cq = cq;
+  args.pollset_set_alternative = pollset_set_alternative;
+  args.server_transport_data = NULL;
+  args.add_initial_metadata = send_metadata;
+  args.add_initial_metadata_count = num_metadata;
+  args.send_deadline = deadline;
+
+  grpc_call *call;
+  GRPC_LOG_IF_ERROR("call_create", grpc_call_create(&args, &call));
+  return call;
 }
 
 grpc_call *grpc_channel_create_call(grpc_channel *channel,
diff --git a/src/core/lib/surface/completion_queue.c b/src/core/lib/surface/completion_queue.c
index 5978884..4e0feb5 100644
--- a/src/core/lib/surface/completion_queue.c
+++ b/src/core/lib/surface/completion_queue.c
@@ -39,6 +39,7 @@
 #include <grpc/support/alloc.h>
 #include <grpc/support/atm.h>
 #include <grpc/support/log.h>
+#include <grpc/support/string_util.h>
 #include <grpc/support/time.h>
 
 #include "src/core/lib/iomgr/pollset.h"
@@ -50,6 +51,9 @@
 #include "src/core/lib/surface/event_string.h"
 
 int grpc_trace_operation_failures;
+#ifndef NDEBUG
+int grpc_trace_pending_tags;
+#endif
 
 typedef struct {
   grpc_pollset_worker **worker;
@@ -67,6 +71,9 @@
   gpr_refcount pending_events;
   /** Once owning_refs drops to zero, we will destroy the cq */
   gpr_refcount owning_refs;
+  /** counter of how many things have ever been queued on this completion queue
+      useful for avoiding locks to check the queue */
+  gpr_atm things_queued_ever;
   /** 0 initially, 1 once we've begun shutting down */
   int shutdown;
   int shutdown_called;
@@ -121,15 +128,6 @@
   }
 }
 
-struct grpc_cq_alarm {
-  grpc_timer alarm;
-  grpc_cq_completion completion;
-  /** completion queue where events about this alarm will be posted */
-  grpc_completion_queue *cq;
-  /** user supplied tag */
-  void *tag;
-};
-
 grpc_completion_queue *grpc_completion_queue_create(void *reserved) {
   grpc_completion_queue *cc;
   GPR_ASSERT(!reserved);
@@ -166,6 +164,7 @@
   cc->is_server_cq = 0;
   cc->is_non_listening_server_cq = 0;
   cc->num_pluckers = 0;
+  gpr_atm_no_barrier_store(&cc->things_queued_ever, 0);
 #ifndef NDEBUG
   cc->outstanding_tag_count = 0;
 #endif
@@ -276,6 +275,7 @@
   GPR_ASSERT(found);
 #endif
   shutdown = gpr_unref(&cc->pending_events);
+  gpr_atm_no_barrier_fetch_add(&cc->things_queued_ever, 1);
   if (!shutdown) {
     cc->completed_tail->next =
         ((uintptr_t)storage) | (1u & (uintptr_t)cc->completed_tail->next);
@@ -313,13 +313,66 @@
   GRPC_ERROR_UNREF(error);
 }
 
+typedef struct {
+  gpr_atm last_seen_things_queued_ever;
+  grpc_completion_queue *cq;
+  gpr_timespec deadline;
+  grpc_cq_completion *stolen_completion;
+  void *tag; /* for pluck */
+  bool first_loop;
+} cq_is_finished_arg;
+
+static bool cq_is_next_finished(grpc_exec_ctx *exec_ctx, void *arg) {
+  cq_is_finished_arg *a = arg;
+  grpc_completion_queue *cq = a->cq;
+  GPR_ASSERT(a->stolen_completion == NULL);
+  gpr_atm current_last_seen_things_queued_ever =
+      gpr_atm_no_barrier_load(&cq->things_queued_ever);
+  if (current_last_seen_things_queued_ever != a->last_seen_things_queued_ever) {
+    gpr_mu_lock(cq->mu);
+    a->last_seen_things_queued_ever =
+        gpr_atm_no_barrier_load(&cq->things_queued_ever);
+    if (cq->completed_tail != &cq->completed_head) {
+      a->stolen_completion = (grpc_cq_completion *)cq->completed_head.next;
+      cq->completed_head.next = a->stolen_completion->next & ~(uintptr_t)1;
+      if (a->stolen_completion == cq->completed_tail) {
+        cq->completed_tail = &cq->completed_head;
+      }
+      gpr_mu_unlock(cq->mu);
+      return true;
+    }
+    gpr_mu_unlock(cq->mu);
+  }
+  return !a->first_loop &&
+         gpr_time_cmp(a->deadline, gpr_now(a->deadline.clock_type)) < 0;
+}
+
+#ifndef NDEBUG
+static void dump_pending_tags(grpc_completion_queue *cc) {
+  if (!grpc_trace_pending_tags) return;
+
+  gpr_strvec v;
+  gpr_strvec_init(&v);
+  gpr_strvec_add(&v, gpr_strdup("PENDING TAGS:"));
+  for (size_t i = 0; i < cc->outstanding_tag_count; i++) {
+    char *s;
+    gpr_asprintf(&s, " %p", cc->outstanding_tags[i]);
+    gpr_strvec_add(&v, s);
+  }
+  char *out = gpr_strvec_flatten(&v, NULL);
+  gpr_strvec_destroy(&v);
+  gpr_log(GPR_DEBUG, "%s", out);
+  gpr_free(out);
+}
+#else
+static void dump_pending_tags(grpc_completion_queue *cc) {}
+#endif
+
 grpc_event grpc_completion_queue_next(grpc_completion_queue *cc,
                                       gpr_timespec deadline, void *reserved) {
   grpc_event ret;
   grpc_pollset_worker *worker = NULL;
-  int first_loop = 1;
   gpr_timespec now;
-  grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
 
   GPR_TIMER_BEGIN("grpc_completion_queue_next", 0);
 
@@ -333,11 +386,33 @@
           reserved));
   GPR_ASSERT(!reserved);
 
+  dump_pending_tags(cc);
+
   deadline = gpr_convert_clock_type(deadline, GPR_CLOCK_MONOTONIC);
 
   GRPC_CQ_INTERNAL_REF(cc, "next");
   gpr_mu_lock(cc->mu);
+  cq_is_finished_arg is_finished_arg = {
+      .last_seen_things_queued_ever =
+          gpr_atm_no_barrier_load(&cc->things_queued_ever),
+      .cq = cc,
+      .deadline = deadline,
+      .stolen_completion = NULL,
+      .tag = NULL,
+      .first_loop = true};
+  grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT_WITH_FINISH_CHECK(
+      cq_is_next_finished, &is_finished_arg);
   for (;;) {
+    if (is_finished_arg.stolen_completion != NULL) {
+      gpr_mu_unlock(cc->mu);
+      grpc_cq_completion *c = is_finished_arg.stolen_completion;
+      is_finished_arg.stolen_completion = NULL;
+      ret.type = GRPC_OP_COMPLETE;
+      ret.success = c->next & 1u;
+      ret.tag = c->tag;
+      c->done(&exec_ctx, c->done_arg, c);
+      break;
+    }
     if (cc->completed_tail != &cc->completed_head) {
       grpc_cq_completion *c = (grpc_cq_completion *)cc->completed_head.next;
       cc->completed_head.next = c->next & ~(uintptr_t)1;
@@ -358,13 +433,13 @@
       break;
     }
     now = gpr_now(GPR_CLOCK_MONOTONIC);
-    if (!first_loop && gpr_time_cmp(now, deadline) >= 0) {
+    if (!is_finished_arg.first_loop && gpr_time_cmp(now, deadline) >= 0) {
       gpr_mu_unlock(cc->mu);
       memset(&ret, 0, sizeof(ret));
       ret.type = GRPC_QUEUE_TIMEOUT;
+      dump_pending_tags(cc);
       break;
     }
-    first_loop = 0;
     /* Check alarms - these are a global resource so we just ping
        each time through on every pollset.
        May update deadline to ensure timely wakeups.
@@ -387,13 +462,16 @@
         GRPC_ERROR_UNREF(err);
         memset(&ret, 0, sizeof(ret));
         ret.type = GRPC_QUEUE_TIMEOUT;
+        dump_pending_tags(cc);
         break;
       }
     }
+    is_finished_arg.first_loop = false;
   }
   GRPC_SURFACE_TRACE_RETURNED_EVENT(cc, &ret);
   GRPC_CQ_INTERNAL_UNREF(cc, "next");
   grpc_exec_ctx_finish(&exec_ctx);
+  GPR_ASSERT(is_finished_arg.stolen_completion == NULL);
 
   GPR_TIMER_END("grpc_completion_queue_next", 0);
 
@@ -424,6 +502,37 @@
   GPR_UNREACHABLE_CODE(return );
 }
 
+static bool cq_is_pluck_finished(grpc_exec_ctx *exec_ctx, void *arg) {
+  cq_is_finished_arg *a = arg;
+  grpc_completion_queue *cq = a->cq;
+  GPR_ASSERT(a->stolen_completion == NULL);
+  gpr_atm current_last_seen_things_queued_ever =
+      gpr_atm_no_barrier_load(&cq->things_queued_ever);
+  if (current_last_seen_things_queued_ever != a->last_seen_things_queued_ever) {
+    gpr_mu_lock(cq->mu);
+    a->last_seen_things_queued_ever =
+        gpr_atm_no_barrier_load(&cq->things_queued_ever);
+    grpc_cq_completion *c;
+    grpc_cq_completion *prev = &cq->completed_head;
+    while ((c = (grpc_cq_completion *)(prev->next & ~(uintptr_t)1)) !=
+           &cq->completed_head) {
+      if (c->tag == a->tag) {
+        prev->next = (prev->next & (uintptr_t)1) | (c->next & ~(uintptr_t)1);
+        if (c == cq->completed_tail) {
+          cq->completed_tail = prev;
+        }
+        gpr_mu_unlock(cq->mu);
+        a->stolen_completion = c;
+        return true;
+      }
+      prev = c;
+    }
+    gpr_mu_unlock(cq->mu);
+  }
+  return !a->first_loop &&
+         gpr_time_cmp(a->deadline, gpr_now(a->deadline.clock_type)) < 0;
+}
+
 grpc_event grpc_completion_queue_pluck(grpc_completion_queue *cc, void *tag,
                                        gpr_timespec deadline, void *reserved) {
   grpc_event ret;
@@ -431,8 +540,6 @@
   grpc_cq_completion *prev;
   grpc_pollset_worker *worker = NULL;
   gpr_timespec now;
-  int first_loop = 1;
-  grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
 
   GPR_TIMER_BEGIN("grpc_completion_queue_pluck", 0);
 
@@ -448,11 +555,33 @@
   }
   GPR_ASSERT(!reserved);
 
+  dump_pending_tags(cc);
+
   deadline = gpr_convert_clock_type(deadline, GPR_CLOCK_MONOTONIC);
 
   GRPC_CQ_INTERNAL_REF(cc, "pluck");
   gpr_mu_lock(cc->mu);
+  cq_is_finished_arg is_finished_arg = {
+      .last_seen_things_queued_ever =
+          gpr_atm_no_barrier_load(&cc->things_queued_ever),
+      .cq = cc,
+      .deadline = deadline,
+      .stolen_completion = NULL,
+      .tag = tag,
+      .first_loop = true};
+  grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT_WITH_FINISH_CHECK(
+      cq_is_pluck_finished, &is_finished_arg);
   for (;;) {
+    if (is_finished_arg.stolen_completion != NULL) {
+      gpr_mu_unlock(cc->mu);
+      c = is_finished_arg.stolen_completion;
+      is_finished_arg.stolen_completion = NULL;
+      ret.type = GRPC_OP_COMPLETE;
+      ret.success = c->next & 1u;
+      ret.tag = c->tag;
+      c->done(&exec_ctx, c->done_arg, c);
+      break;
+    }
     prev = &cc->completed_head;
     while ((c = (grpc_cq_completion *)(prev->next & ~(uintptr_t)1)) !=
            &cc->completed_head) {
@@ -485,17 +614,18 @@
       memset(&ret, 0, sizeof(ret));
       /* TODO(ctiller): should we use a different result here */
       ret.type = GRPC_QUEUE_TIMEOUT;
+      dump_pending_tags(cc);
       break;
     }
     now = gpr_now(GPR_CLOCK_MONOTONIC);
-    if (!first_loop && gpr_time_cmp(now, deadline) >= 0) {
+    if (!is_finished_arg.first_loop && gpr_time_cmp(now, deadline) >= 0) {
       del_plucker(cc, tag, &worker);
       gpr_mu_unlock(cc->mu);
       memset(&ret, 0, sizeof(ret));
       ret.type = GRPC_QUEUE_TIMEOUT;
+      dump_pending_tags(cc);
       break;
     }
-    first_loop = 0;
     /* Check alarms - these are a global resource so we just ping
        each time through on every pollset.
        May update deadline to ensure timely wakeups.
@@ -518,15 +648,18 @@
         GRPC_ERROR_UNREF(err);
         memset(&ret, 0, sizeof(ret));
         ret.type = GRPC_QUEUE_TIMEOUT;
+        dump_pending_tags(cc);
         break;
       }
     }
+    is_finished_arg.first_loop = false;
     del_plucker(cc, tag, &worker);
   }
 done:
   GRPC_SURFACE_TRACE_RETURNED_EVENT(cc, &ret);
   GRPC_CQ_INTERNAL_UNREF(cc, "pluck");
   grpc_exec_ctx_finish(&exec_ctx);
+  GPR_ASSERT(is_finished_arg.stolen_completion == NULL);
 
   GPR_TIMER_END("grpc_completion_queue_pluck", 0);
 
diff --git a/src/core/lib/surface/completion_queue.h b/src/core/lib/surface/completion_queue.h
index 4dbf3aa..c1cafba 100644
--- a/src/core/lib/surface/completion_queue.h
+++ b/src/core/lib/surface/completion_queue.h
@@ -44,6 +44,9 @@
 extern int grpc_cq_pluck_trace;
 extern int grpc_cq_event_timeout_trace;
 extern int grpc_trace_operation_failures;
+#ifndef NDEBUG
+extern int grpc_trace_pending_tags;
+#endif
 
 typedef struct grpc_cq_completion {
   /** user supplied tag */
diff --git a/src/core/lib/surface/init.c b/src/core/lib/surface/init.c
index 289f4ce..8ca0643 100644
--- a/src/core/lib/surface/init.c
+++ b/src/core/lib/surface/init.c
@@ -184,12 +184,16 @@
     grpc_register_tracer("compression", &grpc_compression_trace);
     grpc_register_tracer("queue_pluck", &grpc_cq_pluck_trace);
     grpc_register_tracer("combiner", &grpc_combiner_trace);
+    grpc_register_tracer("server_channel", &grpc_server_channel_trace);
     // Default pluck trace to 1
     grpc_cq_pluck_trace = 1;
     grpc_register_tracer("queue_timeout", &grpc_cq_event_timeout_trace);
     // Default timeout trace to 1
     grpc_cq_event_timeout_trace = 1;
     grpc_register_tracer("op_failure", &grpc_trace_operation_failures);
+#ifndef NDEBUG
+    grpc_register_tracer("pending_tags", &grpc_trace_pending_tags);
+#endif
     grpc_security_pre_init();
     grpc_iomgr_init();
     grpc_executor_init();
diff --git a/src/core/lib/surface/server.c b/src/core/lib/surface/server.c
index 7300d79..3a90308 100644
--- a/src/core/lib/surface/server.c
+++ b/src/core/lib/surface/server.c
@@ -71,6 +71,8 @@
 
 typedef enum { BATCH_CALL, REGISTERED_CALL } requested_call_type;
 
+int grpc_server_channel_trace = 0;
+
 typedef struct requested_call {
   requested_call_type type;
   size_t cq_idx;
@@ -280,6 +282,7 @@
   grpc_channel_element *elem;
 
   op->send_goaway = send_goaway;
+  op->set_accept_stream = true;
   sc->slice = gpr_slice_from_copied_string("Server shutdown");
   op->goaway_message = &sc->slice;
   op->goaway_status = GRPC_STATUS_OK;
@@ -439,6 +442,13 @@
   chand->finish_destroy_channel_closure.cb = finish_destroy_channel;
   chand->finish_destroy_channel_closure.cb_arg = chand;
 
+  if (grpc_server_channel_trace && error != GRPC_ERROR_NONE) {
+    const char *msg = grpc_error_string(error);
+    gpr_log(GPR_INFO, "Disconnected client: %s", msg);
+    grpc_error_free_string(msg);
+  }
+  GRPC_ERROR_UNREF(error);
+
   grpc_transport_op *op =
       grpc_make_transport_op(&chand->finish_destroy_channel_closure);
   op->set_accept_stream = true;
@@ -446,13 +456,6 @@
                        grpc_channel_stack_element(
                            grpc_channel_get_channel_stack(chand->channel), 0),
                        op);
-
-  if (error != GRPC_ERROR_NONE) {
-    const char *msg = grpc_error_string(error);
-    gpr_log(GPR_INFO, "Disconnected client: %s", msg);
-    grpc_error_free_string(msg);
-  }
-  GRPC_ERROR_UNREF(error);
 }
 
 static void cpstr(char **dest, size_t *capacity, grpc_mdstr *value) {
@@ -773,8 +776,7 @@
         GRPC_ERROR_CREATE_REFERENCING("Missing :authority or :path", &error, 1);
   }
 
-  grpc_exec_ctx_sched(exec_ctx, calld->on_done_recv_initial_metadata, error,
-                      NULL);
+  grpc_closure_run(exec_ctx, calld->on_done_recv_initial_metadata, error);
 }
 
 static void server_mutate_op(grpc_call_element *elem,
@@ -829,11 +831,20 @@
                           const void *transport_server_data) {
   channel_data *chand = cd;
   /* create a call */
-  grpc_call *call = grpc_call_create(chand->channel, NULL, 0, NULL, NULL,
-                                     transport_server_data, NULL, 0,
-                                     gpr_inf_future(GPR_CLOCK_MONOTONIC));
+  grpc_call_create_args args;
+  memset(&args, 0, sizeof(args));
+  args.channel = chand->channel;
+  args.server_transport_data = transport_server_data;
+  args.send_deadline = gpr_inf_future(GPR_CLOCK_MONOTONIC);
+  grpc_call *call;
+  grpc_error *error = grpc_call_create(&args, &call);
   grpc_call_element *elem =
       grpc_call_stack_element(grpc_call_get_call_stack(call), 0);
+  if (error != GRPC_ERROR_NONE) {
+    got_initial_metadata(exec_ctx, elem, error);
+    GRPC_ERROR_UNREF(error);
+    return;
+  }
   call_data *calld = elem->call_data;
   grpc_op op;
   memset(&op, 0, sizeof(op));
diff --git a/src/core/lib/surface/server.h b/src/core/lib/surface/server.h
index 551a40a..a85d9f4 100644
--- a/src/core/lib/surface/server.h
+++ b/src/core/lib/surface/server.h
@@ -40,6 +40,9 @@
 
 extern const grpc_channel_filter grpc_server_top_filter;
 
+/** Lightweight tracing of server channel state */
+extern int grpc_server_channel_trace;
+
 /* Add a listener to the server: when the server starts, it will call start,
    and when it shuts down, it will call destroy */
 void grpc_server_add_listener(
diff --git a/src/core/lib/transport/connectivity_state.c b/src/core/lib/transport/connectivity_state.c
index 68d05e3..fdb5307 100644
--- a/src/core/lib/transport/connectivity_state.c
+++ b/src/core/lib/transport/connectivity_state.c
@@ -180,7 +180,8 @@
     *w->current = tracker->current_state;
     tracker->watchers = w->next;
     if (grpc_connectivity_state_trace) {
-      gpr_log(GPR_DEBUG, "NOTIFY: %p", w->notify);
+      gpr_log(GPR_DEBUG, "NOTIFY: %p %s: %p", tracker, tracker->name,
+              w->notify);
     }
     grpc_exec_ctx_sched(exec_ctx, w->notify,
                         GRPC_ERROR_REF(tracker->current_error), NULL);
diff --git a/src/core/lib/transport/mdstr_hash_table.c b/src/core/lib/transport/mdstr_hash_table.c
new file mode 100644
index 0000000..8e914c4
--- /dev/null
+++ b/src/core/lib/transport/mdstr_hash_table.c
@@ -0,0 +1,157 @@
+//
+// Copyright 2016, Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+//
+
+#include "src/core/lib/transport/mdstr_hash_table.h"
+
+#include <stdbool.h>
+#include <string.h>
+
+#include <grpc/support/alloc.h>
+#include <grpc/support/log.h>
+
+#include "src/core/lib/transport/metadata.h"
+
+struct grpc_mdstr_hash_table {
+  gpr_refcount refs;
+  size_t num_entries;
+  size_t size;
+  grpc_mdstr_hash_table_entry* entries;
+};
+
+// Helper function for insert and get operations that performs quadratic
+// probing (https://en.wikipedia.org/wiki/Quadratic_probing).
+static size_t grpc_mdstr_hash_table_find_index(
+    const grpc_mdstr_hash_table* table, const grpc_mdstr* key,
+    bool find_empty) {
+  for (size_t i = 0; i < table->size; ++i) {
+    const size_t idx = (key->hash + i * i) % table->size;
+    if (table->entries[idx].key == NULL) return find_empty ? idx : table->size;
+    if (table->entries[idx].key == key) return idx;
+  }
+  return table->size;  // Not found.
+}
+
+static void grpc_mdstr_hash_table_add(
+    grpc_mdstr_hash_table* table, grpc_mdstr* key, void* value,
+    const grpc_mdstr_hash_table_vtable* vtable) {
+  GPR_ASSERT(value != NULL);
+  const size_t idx =
+      grpc_mdstr_hash_table_find_index(table, key, true /* find_empty */);
+  GPR_ASSERT(idx != table->size);  // Table should never be full.
+  grpc_mdstr_hash_table_entry* entry = &table->entries[idx];
+  entry->key = GRPC_MDSTR_REF(key);
+  entry->value = vtable->copy_value(value);
+  entry->vtable = vtable;
+}
+
+grpc_mdstr_hash_table* grpc_mdstr_hash_table_create(
+    size_t num_entries, grpc_mdstr_hash_table_entry* entries) {
+  grpc_mdstr_hash_table* table = gpr_malloc(sizeof(*table));
+  memset(table, 0, sizeof(*table));
+  gpr_ref_init(&table->refs, 1);
+  table->num_entries = num_entries;
+  // Quadratic probing gets best performance when the table is no more
+  // than half full.
+  table->size = num_entries * 2;
+  const size_t entry_size = sizeof(grpc_mdstr_hash_table_entry) * table->size;
+  table->entries = gpr_malloc(entry_size);
+  memset(table->entries, 0, entry_size);
+  for (size_t i = 0; i < num_entries; ++i) {
+    grpc_mdstr_hash_table_entry* entry = &entries[i];
+    grpc_mdstr_hash_table_add(table, entry->key, entry->value, entry->vtable);
+  }
+  return table;
+}
+
+grpc_mdstr_hash_table* grpc_mdstr_hash_table_ref(grpc_mdstr_hash_table* table) {
+  if (table != NULL) gpr_ref(&table->refs);
+  return table;
+}
+
+int grpc_mdstr_hash_table_unref(grpc_mdstr_hash_table* table) {
+  if (table != NULL && gpr_unref(&table->refs)) {
+    for (size_t i = 0; i < table->size; ++i) {
+      grpc_mdstr_hash_table_entry* entry = &table->entries[i];
+      if (entry->key != NULL) {
+        GRPC_MDSTR_UNREF(entry->key);
+        entry->vtable->destroy_value(entry->value);
+      }
+    }
+    gpr_free(table->entries);
+    gpr_free(table);
+    return 1;
+  }
+  return 0;
+}
+
+size_t grpc_mdstr_hash_table_num_entries(const grpc_mdstr_hash_table* table) {
+  return table->num_entries;
+}
+
+void* grpc_mdstr_hash_table_get(const grpc_mdstr_hash_table* table,
+                                const grpc_mdstr* key) {
+  const size_t idx =
+      grpc_mdstr_hash_table_find_index(table, key, false /* find_empty */);
+  if (idx == table->size) return NULL;  // Not found.
+  return table->entries[idx].value;
+}
+
+int grpc_mdstr_hash_table_cmp(const grpc_mdstr_hash_table* table1,
+                              const grpc_mdstr_hash_table* table2) {
+  // Compare by num_entries.
+  if (table1->num_entries < table2->num_entries) return -1;
+  if (table1->num_entries > table2->num_entries) return 1;
+  for (size_t i = 0; i < table1->num_entries; ++i) {
+    grpc_mdstr_hash_table_entry* e1 = &table1->entries[i];
+    grpc_mdstr_hash_table_entry* e2 = &table2->entries[i];
+    // Compare keys by hash value.
+    if (e1->key->hash < e2->key->hash) return -1;
+    if (e1->key->hash > e2->key->hash) return 1;
+    // Compare by vtable (pointer equality).
+    if (e1->vtable < e2->vtable) return -1;
+    if (e1->vtable > e2->vtable) return 1;
+    // Compare values via vtable.
+    const int value_result = e1->vtable->compare_value(e1->value, e2->value);
+    if (value_result != 0) return value_result;
+  }
+  return 0;
+}
+
+void grpc_mdstr_hash_table_iterate(
+    const grpc_mdstr_hash_table* table,
+    void (*func)(const grpc_mdstr_hash_table_entry* entry, void* user_data),
+    void* user_data) {
+  for (size_t i = 0; i < table->size; ++i) {
+    if (table->entries[i].key != NULL) {
+      func(&table->entries[i], user_data);
+    }
+  }
+}
diff --git a/src/core/lib/transport/mdstr_hash_table.h b/src/core/lib/transport/mdstr_hash_table.h
new file mode 100644
index 0000000..bceb4df
--- /dev/null
+++ b/src/core/lib/transport/mdstr_hash_table.h
@@ -0,0 +1,92 @@
+/*
+ * Copyright 2016, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ *     * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef GRPC_CORE_LIB_TRANSPORT_MDSTR_HASH_TABLE_H
+#define GRPC_CORE_LIB_TRANSPORT_MDSTR_HASH_TABLE_H
+
+#include "src/core/lib/transport/metadata.h"
+
+/** Hash table implementation.
+ *
+ * This implementation uses open addressing
+ * (https://en.wikipedia.org/wiki/Open_addressing) with quadratic
+ * probing (https://en.wikipedia.org/wiki/Quadratic_probing).
+ *
+ * The keys are \a grpc_mdstr objects.  The values are arbitrary pointers
+ * with a common vtable.
+ *
+ * Hash tables are intentionally immutable, to avoid the need for locking.
+ */
+
+typedef struct grpc_mdstr_hash_table grpc_mdstr_hash_table;
+
+typedef struct grpc_mdstr_hash_table_vtable {
+  void (*destroy_value)(void* value);
+  void* (*copy_value)(void* value);
+  int (*compare_value)(void* value1, void* value2);
+} grpc_mdstr_hash_table_vtable;
+
+typedef struct grpc_mdstr_hash_table_entry {
+  grpc_mdstr* key;
+  void* value; /* Must not be NULL. */
+  const grpc_mdstr_hash_table_vtable* vtable;
+} grpc_mdstr_hash_table_entry;
+
+/** Creates a new hash table of containing \a entries, which is an array
+    of length \a num_entries.
+    Creates its own copy of all keys and values from \a entries. */
+grpc_mdstr_hash_table* grpc_mdstr_hash_table_create(
+    size_t num_entries, grpc_mdstr_hash_table_entry* entries);
+
+grpc_mdstr_hash_table* grpc_mdstr_hash_table_ref(grpc_mdstr_hash_table* table);
+/** Returns 1 when \a table is destroyed. */
+int grpc_mdstr_hash_table_unref(grpc_mdstr_hash_table* table);
+
+/** Returns the number of entries in \a table. */
+size_t grpc_mdstr_hash_table_num_entries(const grpc_mdstr_hash_table* table);
+
+/** Returns the value from \a table associated with \a key.
+    Returns NULL if \a key is not found. */
+void* grpc_mdstr_hash_table_get(const grpc_mdstr_hash_table* table,
+                                const grpc_mdstr* key);
+
+/** Compares two hash tables.
+    The sort order is stable but undefined. */
+int grpc_mdstr_hash_table_cmp(const grpc_mdstr_hash_table* table1,
+                              const grpc_mdstr_hash_table* table2);
+
+/** Iterates over the entries in \a table, calling \a func for each entry. */
+void grpc_mdstr_hash_table_iterate(
+    const grpc_mdstr_hash_table* table,
+    void (*func)(const grpc_mdstr_hash_table_entry* entry, void* user_data),
+    void* user_data);
+
+#endif /* GRPC_CORE_LIB_TRANSPORT_MDSTR_HASH_TABLE_H */
diff --git a/src/core/lib/transport/static_metadata.c b/src/core/lib/transport/static_metadata.c
index 5e0352a..8b22592 100644
--- a/src/core/lib/transport/static_metadata.c
+++ b/src/core/lib/transport/static_metadata.c
@@ -126,9 +126,9 @@
     "if-range",
     "if-unmodified-since",
     "last-modified",
+    "lb-cost-bin",
+    "lb-token",
     "link",
-    "load-reporting-initial",
-    "load-reporting-trailing",
     "location",
     "max-forwards",
     ":method",
diff --git a/src/core/lib/transport/static_metadata.h b/src/core/lib/transport/static_metadata.h
index 5b9ee1a..28ad6f2 100644
--- a/src/core/lib/transport/static_metadata.h
+++ b/src/core/lib/transport/static_metadata.h
@@ -175,12 +175,12 @@
 #define GRPC_MDSTR_IF_UNMODIFIED_SINCE (&grpc_static_mdstr_table[62])
 /* "last-modified" */
 #define GRPC_MDSTR_LAST_MODIFIED (&grpc_static_mdstr_table[63])
+/* "lb-cost-bin" */
+#define GRPC_MDSTR_LB_COST_BIN (&grpc_static_mdstr_table[64])
+/* "lb-token" */
+#define GRPC_MDSTR_LB_TOKEN (&grpc_static_mdstr_table[65])
 /* "link" */
-#define GRPC_MDSTR_LINK (&grpc_static_mdstr_table[64])
-/* "load-reporting-initial" */
-#define GRPC_MDSTR_LOAD_REPORTING_INITIAL (&grpc_static_mdstr_table[65])
-/* "load-reporting-trailing" */
-#define GRPC_MDSTR_LOAD_REPORTING_TRAILING (&grpc_static_mdstr_table[66])
+#define GRPC_MDSTR_LINK (&grpc_static_mdstr_table[66])
 /* "location" */
 #define GRPC_MDSTR_LOCATION (&grpc_static_mdstr_table[67])
 /* "max-forwards" */
@@ -337,13 +337,12 @@
 #define GRPC_MDELEM_IF_UNMODIFIED_SINCE_EMPTY (&grpc_static_mdelem_table[44])
 /* "last-modified": "" */
 #define GRPC_MDELEM_LAST_MODIFIED_EMPTY (&grpc_static_mdelem_table[45])
+/* "lb-cost-bin": "" */
+#define GRPC_MDELEM_LB_COST_BIN_EMPTY (&grpc_static_mdelem_table[46])
+/* "lb-token": "" */
+#define GRPC_MDELEM_LB_TOKEN_EMPTY (&grpc_static_mdelem_table[47])
 /* "link": "" */
-#define GRPC_MDELEM_LINK_EMPTY (&grpc_static_mdelem_table[46])
-/* "load-reporting-initial": "" */
-#define GRPC_MDELEM_LOAD_REPORTING_INITIAL_EMPTY (&grpc_static_mdelem_table[47])
-/* "load-reporting-trailing": "" */
-#define GRPC_MDELEM_LOAD_REPORTING_TRAILING_EMPTY \
-  (&grpc_static_mdelem_table[48])
+#define GRPC_MDELEM_LINK_EMPTY (&grpc_static_mdelem_table[48])
 /* "location": "" */
 #define GRPC_MDELEM_LOCATION_EMPTY (&grpc_static_mdelem_table[49])
 /* "max-forwards": "" */
diff --git a/src/core/lib/transport/transport.c b/src/core/lib/transport/transport.c
index 82fc605..75aec7a 100644
--- a/src/core/lib/transport/transport.c
+++ b/src/core/lib/transport/transport.c
@@ -46,8 +46,9 @@
 #ifdef GRPC_STREAM_REFCOUNT_DEBUG
 void grpc_stream_ref(grpc_stream_refcount *refcount, const char *reason) {
   gpr_atm val = gpr_atm_no_barrier_load(&refcount->refs.count);
-  gpr_log(GPR_DEBUG, "%s %p:%p   REF %d->%d %s", refcount->object_type,
-          refcount, refcount->destroy.cb_arg, (int)val, (int)val + 1, reason);
+  gpr_log(GPR_DEBUG, "%s %p:%p   REF %" PRIdPTR "->%" PRIdPTR " %s",
+          refcount->object_type, refcount, refcount->destroy.cb_arg, val,
+          val + 1, reason);
 #else
 void grpc_stream_ref(grpc_stream_refcount *refcount) {
 #endif
@@ -58,8 +59,9 @@
 void grpc_stream_unref(grpc_exec_ctx *exec_ctx, grpc_stream_refcount *refcount,
                        const char *reason) {
   gpr_atm val = gpr_atm_no_barrier_load(&refcount->refs.count);
-  gpr_log(GPR_DEBUG, "%s %p:%p UNREF %d->%d %s", refcount->object_type,
-          refcount, refcount->destroy.cb_arg, (int)val, (int)val - 1, reason);
+  gpr_log(GPR_DEBUG, "%s %p:%p UNREF %" PRIdPTR "->%" PRIdPTR " %s",
+          refcount->object_type, refcount, refcount->destroy.cb_arg, val,
+          val - 1, reason);
 #else
 void grpc_stream_unref(grpc_exec_ctx *exec_ctx,
                        grpc_stream_refcount *refcount) {
@@ -274,3 +276,28 @@
   op->op.on_consumed = &op->outer_on_complete;
   return &op->op;
 }
+
+typedef struct {
+  grpc_closure outer_on_complete;
+  grpc_closure *inner_on_complete;
+  grpc_transport_stream_op op;
+} made_transport_stream_op;
+
+static void destroy_made_transport_stream_op(grpc_exec_ctx *exec_ctx, void *arg,
+                                             grpc_error *error) {
+  made_transport_stream_op *op = arg;
+  grpc_exec_ctx_sched(exec_ctx, op->inner_on_complete, GRPC_ERROR_REF(error),
+                      NULL);
+  gpr_free(op);
+}
+
+grpc_transport_stream_op *grpc_make_transport_stream_op(
+    grpc_closure *on_complete) {
+  made_transport_stream_op *op = gpr_malloc(sizeof(*op));
+  grpc_closure_init(&op->outer_on_complete, destroy_made_transport_stream_op,
+                    op);
+  op->inner_on_complete = on_complete;
+  memset(&op->op, 0, sizeof(op->op));
+  op->op.on_complete = &op->outer_on_complete;
+  return &op->op;
+}
diff --git a/src/core/lib/transport/transport.h b/src/core/lib/transport/transport.h
index 8dc393f..50253eb 100644
--- a/src/core/lib/transport/transport.h
+++ b/src/core/lib/transport/transport.h
@@ -113,6 +113,10 @@
       have been completed. */
   grpc_closure *on_complete;
 
+  /** Is the completion of this op covered by a poller (if false: the op should
+      complete independently of some pollset being polled) */
+  bool covered_by_poller;
+
   /** Send initial metadata to the peer, from the provided metadata batch.
       idempotent_request MUST be set if this is non-null */
   grpc_metadata_batch *send_initial_metadata;
@@ -252,6 +256,7 @@
                                         gpr_slice *optional_message);
 
 char *grpc_transport_stream_op_string(grpc_transport_stream_op *op);
+char *grpc_transport_op_string(grpc_transport_op *op);
 
 /* Send a batch of operations on a transport
 
@@ -293,6 +298,10 @@
 /* Allocate a grpc_transport_op, and preconfigure the on_consumed closure to
    \a on_consumed and then delete the returned transport op */
 grpc_transport_op *grpc_make_transport_op(grpc_closure *on_consumed);
+/* Allocate a grpc_transport_stream_op, and preconfigure the on_consumed closure
+   to \a on_consumed and then delete the returned transport op */
+grpc_transport_stream_op *grpc_make_transport_stream_op(
+    grpc_closure *on_consumed);
 
 #ifdef __cplusplus
 }
diff --git a/src/core/lib/transport/transport_op_string.c b/src/core/lib/transport/transport_op_string.c
index 138591d..533ec52 100644
--- a/src/core/lib/transport/transport_op_string.c
+++ b/src/core/lib/transport/transport_op_string.c
@@ -41,6 +41,7 @@
 #include <grpc/support/string_util.h>
 #include <grpc/support/useful.h>
 #include "src/core/lib/support/string.h"
+#include "src/core/lib/transport/connectivity_state.h"
 
 /* These routines are here to facilitate debugging - they produce string
    representations of various transport data structures */
@@ -72,56 +73,51 @@
 char *grpc_transport_stream_op_string(grpc_transport_stream_op *op) {
   char *tmp;
   char *out;
-  int first = 1;
 
   gpr_strvec b;
   gpr_strvec_init(&b);
 
+  gpr_strvec_add(
+      &b, gpr_strdup(op->covered_by_poller ? "[COVERED]" : "[UNCOVERED]"));
+
   if (op->send_initial_metadata != NULL) {
-    if (!first) gpr_strvec_add(&b, gpr_strdup(" "));
-    first = 0;
+    gpr_strvec_add(&b, gpr_strdup(" "));
     gpr_strvec_add(&b, gpr_strdup("SEND_INITIAL_METADATA{"));
     put_metadata_list(&b, *op->send_initial_metadata);
     gpr_strvec_add(&b, gpr_strdup("}"));
   }
 
   if (op->send_message != NULL) {
-    if (!first) gpr_strvec_add(&b, gpr_strdup(" "));
-    first = 0;
+    gpr_strvec_add(&b, gpr_strdup(" "));
     gpr_asprintf(&tmp, "SEND_MESSAGE:flags=0x%08x:len=%d",
                  op->send_message->flags, op->send_message->length);
     gpr_strvec_add(&b, tmp);
   }
 
   if (op->send_trailing_metadata != NULL) {
-    if (!first) gpr_strvec_add(&b, gpr_strdup(" "));
-    first = 0;
+    gpr_strvec_add(&b, gpr_strdup(" "));
     gpr_strvec_add(&b, gpr_strdup("SEND_TRAILING_METADATA{"));
     put_metadata_list(&b, *op->send_trailing_metadata);
     gpr_strvec_add(&b, gpr_strdup("}"));
   }
 
   if (op->recv_initial_metadata != NULL) {
-    if (!first) gpr_strvec_add(&b, gpr_strdup(" "));
-    first = 0;
+    gpr_strvec_add(&b, gpr_strdup(" "));
     gpr_strvec_add(&b, gpr_strdup("RECV_INITIAL_METADATA"));
   }
 
   if (op->recv_message != NULL) {
-    if (!first) gpr_strvec_add(&b, gpr_strdup(" "));
-    first = 0;
+    gpr_strvec_add(&b, gpr_strdup(" "));
     gpr_strvec_add(&b, gpr_strdup("RECV_MESSAGE"));
   }
 
   if (op->recv_trailing_metadata != NULL) {
-    if (!first) gpr_strvec_add(&b, gpr_strdup(" "));
-    first = 0;
+    gpr_strvec_add(&b, gpr_strdup(" "));
     gpr_strvec_add(&b, gpr_strdup("RECV_TRAILING_METADATA"));
   }
 
   if (op->cancel_error != GRPC_ERROR_NONE) {
-    if (!first) gpr_strvec_add(&b, gpr_strdup(" "));
-    first = 0;
+    gpr_strvec_add(&b, gpr_strdup(" "));
     const char *msg = grpc_error_string(op->cancel_error);
     gpr_asprintf(&tmp, "CANCEL:%s", msg);
     grpc_error_free_string(msg);
@@ -129,8 +125,7 @@
   }
 
   if (op->close_error != GRPC_ERROR_NONE) {
-    if (!first) gpr_strvec_add(&b, gpr_strdup(" "));
-    first = 0;
+    gpr_strvec_add(&b, gpr_strdup(" "));
     const char *msg = grpc_error_string(op->close_error);
     gpr_asprintf(&tmp, "CLOSE:%s", msg);
     grpc_error_free_string(msg);
@@ -143,6 +138,82 @@
   return out;
 }
 
+char *grpc_transport_op_string(grpc_transport_op *op) {
+  char *tmp;
+  char *out;
+  bool first = true;
+
+  gpr_strvec b;
+  gpr_strvec_init(&b);
+
+  if (op->on_connectivity_state_change != NULL) {
+    if (!first) gpr_strvec_add(&b, gpr_strdup(" "));
+    first = false;
+    if (op->connectivity_state != NULL) {
+      gpr_asprintf(&tmp, "ON_CONNECTIVITY_STATE_CHANGE:p=%p:from=%s",
+                   op->on_connectivity_state_change,
+                   grpc_connectivity_state_name(*op->connectivity_state));
+      gpr_strvec_add(&b, tmp);
+    } else {
+      gpr_asprintf(&tmp, "ON_CONNECTIVITY_STATE_CHANGE:p=%p:unsubscribe",
+                   op->on_connectivity_state_change);
+      gpr_strvec_add(&b, tmp);
+    }
+  }
+
+  if (op->disconnect_with_error != GRPC_ERROR_NONE) {
+    if (!first) gpr_strvec_add(&b, gpr_strdup(" "));
+    first = false;
+    const char *err = grpc_error_string(op->disconnect_with_error);
+    gpr_asprintf(&tmp, "DISCONNECT:%s", err);
+    gpr_strvec_add(&b, tmp);
+    grpc_error_free_string(err);
+  }
+
+  if (op->send_goaway) {
+    if (!first) gpr_strvec_add(&b, gpr_strdup(" "));
+    first = false;
+    char *msg = op->goaway_message == NULL
+                    ? "null"
+                    : gpr_dump_slice(*op->goaway_message,
+                                     GPR_DUMP_ASCII | GPR_DUMP_HEX);
+    gpr_asprintf(&tmp, "SEND_GOAWAY:status=%d:msg=%s", op->goaway_status, msg);
+    if (op->goaway_message != NULL) gpr_free(msg);
+    gpr_strvec_add(&b, tmp);
+  }
+
+  if (op->set_accept_stream) {
+    if (!first) gpr_strvec_add(&b, gpr_strdup(" "));
+    first = false;
+    gpr_asprintf(&tmp, "SET_ACCEPT_STREAM:%p(%p,...)", op->set_accept_stream_fn,
+                 op->set_accept_stream_user_data);
+    gpr_strvec_add(&b, tmp);
+  }
+
+  if (op->bind_pollset != NULL) {
+    if (!first) gpr_strvec_add(&b, gpr_strdup(" "));
+    first = false;
+    gpr_strvec_add(&b, gpr_strdup("BIND_POLLSET"));
+  }
+
+  if (op->bind_pollset_set != NULL) {
+    if (!first) gpr_strvec_add(&b, gpr_strdup(" "));
+    first = false;
+    gpr_strvec_add(&b, gpr_strdup("BIND_POLLSET_SET"));
+  }
+
+  if (op->send_ping != NULL) {
+    if (!first) gpr_strvec_add(&b, gpr_strdup(" "));
+    first = false;
+    gpr_strvec_add(&b, gpr_strdup("SEND_PING"));
+  }
+
+  out = gpr_strvec_flatten(&b, NULL);
+  gpr_strvec_destroy(&b);
+
+  return out;
+}
+
 void grpc_call_log_op(char *file, int line, gpr_log_severity severity,
                       grpc_call_element *elem, grpc_transport_stream_op *op) {
   char *str = grpc_transport_stream_op_string(op);
diff --git a/src/core/lib/tsi/ssl_transport_security.c b/src/core/lib/tsi/ssl_transport_security.c
index e91c631..749b46e 100644
--- a/src/core/lib/tsi/ssl_transport_security.c
+++ b/src/core/lib/tsi/ssl_transport_security.c
@@ -31,6 +31,9 @@
  *
  */
 
+#include "src/core/lib/iomgr/sockaddr.h"
+
+#include "src/core/lib/iomgr/socket_utils.h"
 #include "src/core/lib/tsi/ssl_transport_security.h"
 
 #include <grpc/support/port_platform.h>
@@ -38,13 +41,6 @@
 #include <limits.h>
 #include <string.h>
 
-/* TODO(jboeuf): refactor inet_ntop into a portability header. */
-#ifdef GPR_WINSOCK_SOCKET
-#include <ws2tcpip.h>
-#else
-#include <arpa/inet.h>
-#endif
-
 #include <grpc/support/alloc.h>
 #include <grpc/support/log.h>
 #include <grpc/support/sync.h>
@@ -353,8 +349,8 @@
         result = TSI_INTERNAL_ERROR;
         break;
       }
-      const char *name = inet_ntop(af, subject_alt_name->d.iPAddress->data,
-                                   ntop_buf, INET6_ADDRSTRLEN);
+      const char *name = grpc_inet_ntop(af, subject_alt_name->d.iPAddress->data,
+                                        ntop_buf, INET6_ADDRSTRLEN);
       if (name == NULL) {
         gpr_log(GPR_ERROR, "Could not get IP string from asn1 octet.");
         result = TSI_INTERNAL_ERROR;
diff --git a/src/core/plugin_registry/grpc_cronet_plugin_registry.c b/src/core/plugin_registry/grpc_cronet_plugin_registry.c
index d0b5f5c..d339ed3 100644
--- a/src/core/plugin_registry/grpc_cronet_plugin_registry.c
+++ b/src/core/plugin_registry/grpc_cronet_plugin_registry.c
@@ -35,12 +35,12 @@
 
 extern void grpc_chttp2_plugin_init(void);
 extern void grpc_chttp2_plugin_shutdown(void);
-extern void grpc_client_config_init(void);
-extern void grpc_client_config_shutdown(void);
+extern void grpc_client_channel_init(void);
+extern void grpc_client_channel_shutdown(void);
 
 void grpc_register_built_in_plugins(void) {
   grpc_register_plugin(grpc_chttp2_plugin_init,
                        grpc_chttp2_plugin_shutdown);
-  grpc_register_plugin(grpc_client_config_init,
-                       grpc_client_config_shutdown);
+  grpc_register_plugin(grpc_client_channel_init,
+                       grpc_client_channel_shutdown);
 }
diff --git a/src/core/plugin_registry/grpc_plugin_registry.c b/src/core/plugin_registry/grpc_plugin_registry.c
index 7a7a9ce..2efd9cd 100644
--- a/src/core/plugin_registry/grpc_plugin_registry.c
+++ b/src/core/plugin_registry/grpc_plugin_registry.c
@@ -35,8 +35,8 @@
 
 extern void grpc_chttp2_plugin_init(void);
 extern void grpc_chttp2_plugin_shutdown(void);
-extern void grpc_client_config_init(void);
-extern void grpc_client_config_shutdown(void);
+extern void grpc_client_channel_init(void);
+extern void grpc_client_channel_shutdown(void);
 extern void grpc_lb_policy_grpclb_init(void);
 extern void grpc_lb_policy_grpclb_shutdown(void);
 extern void grpc_lb_policy_pick_first_init(void);
@@ -55,8 +55,8 @@
 void grpc_register_built_in_plugins(void) {
   grpc_register_plugin(grpc_chttp2_plugin_init,
                        grpc_chttp2_plugin_shutdown);
-  grpc_register_plugin(grpc_client_config_init,
-                       grpc_client_config_shutdown);
+  grpc_register_plugin(grpc_client_channel_init,
+                       grpc_client_channel_shutdown);
   grpc_register_plugin(grpc_lb_policy_grpclb_init,
                        grpc_lb_policy_grpclb_shutdown);
   grpc_register_plugin(grpc_lb_policy_pick_first_init,
diff --git a/src/core/plugin_registry/grpc_unsecure_plugin_registry.c b/src/core/plugin_registry/grpc_unsecure_plugin_registry.c
index ad4ddf0..8b18af6 100644
--- a/src/core/plugin_registry/grpc_unsecure_plugin_registry.c
+++ b/src/core/plugin_registry/grpc_unsecure_plugin_registry.c
@@ -35,8 +35,8 @@
 
 extern void grpc_chttp2_plugin_init(void);
 extern void grpc_chttp2_plugin_shutdown(void);
-extern void grpc_client_config_init(void);
-extern void grpc_client_config_shutdown(void);
+extern void grpc_client_channel_init(void);
+extern void grpc_client_channel_shutdown(void);
 extern void grpc_resolver_dns_native_init(void);
 extern void grpc_resolver_dns_native_shutdown(void);
 extern void grpc_resolver_sockaddr_init(void);
@@ -55,8 +55,8 @@
 void grpc_register_built_in_plugins(void) {
   grpc_register_plugin(grpc_chttp2_plugin_init,
                        grpc_chttp2_plugin_shutdown);
-  grpc_register_plugin(grpc_client_config_init,
-                       grpc_client_config_shutdown);
+  grpc_register_plugin(grpc_client_channel_init,
+                       grpc_client_channel_shutdown);
   grpc_register_plugin(grpc_resolver_dns_native_init,
                        grpc_resolver_dns_native_shutdown);
   grpc_register_plugin(grpc_resolver_sockaddr_init,
diff --git a/src/cpp/client/cronet_credentials.cc b/src/cpp/client/cronet_credentials.cc
new file mode 100644
index 0000000..60cad09
--- /dev/null
+++ b/src/cpp/client/cronet_credentials.cc
@@ -0,0 +1,69 @@
+/*
+ *
+ * Copyright 2016, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ *     * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+#include <grpc++/security/credentials.h>
+
+#include <grpc++/channel.h>
+#include <grpc++/support/channel_arguments.h>
+#include <grpc/grpc_cronet.h>
+#include "src/cpp/client/create_channel_internal.h"
+
+namespace grpc {
+
+class CronetChannelCredentialsImpl GRPC_FINAL : public ChannelCredentials {
+ public:
+  CronetChannelCredentialsImpl(void* engine) : engine_(engine) {}
+
+  std::shared_ptr<grpc::Channel> CreateChannel(
+      const string& target, const grpc::ChannelArguments& args) GRPC_OVERRIDE {
+    grpc_channel_args channel_args;
+    args.SetChannelArgs(&channel_args);
+    return CreateChannelInternal(
+        "", grpc_cronet_secure_channel_create(engine_, target.c_str(),
+                                              &channel_args, nullptr));
+  }
+
+  SecureChannelCredentials* AsSecureCredentials() GRPC_OVERRIDE {
+    return nullptr;
+  }
+
+ private:
+  void* engine_;
+};
+
+std::shared_ptr<ChannelCredentials> CronetChannelCredentials(void* engine) {
+  return std::shared_ptr<ChannelCredentials>(
+      new CronetChannelCredentialsImpl(engine));
+}
+
+}  // namespace grpc
diff --git a/src/core/ext/client_config/http_connect_handshaker.h b/src/cpp/test/server_context_test_spouse.cc
similarity index 69%
copy from src/core/ext/client_config/http_connect_handshaker.h
copy to src/cpp/test/server_context_test_spouse.cc
index 1fc3948..b93152e 100644
--- a/src/core/ext/client_config/http_connect_handshaker.h
+++ b/src/cpp/test/server_context_test_spouse.cc
@@ -31,17 +31,22 @@
  *
  */
 
-#ifndef GRPC_CORE_EXT_CLIENT_CONFIG_HTTP_CONNECT_HANDSHAKER_H
-#define GRPC_CORE_EXT_CLIENT_CONFIG_HTTP_CONNECT_HANDSHAKER_H
+#include <grpc++/test/server_context_test_spouse.h>
 
-#include "src/core/lib/channel/handshaker.h"
+namespace grpc {
+namespace testing {
 
-/// Does NOT take ownership of \a proxy_server or \a server_name.
-grpc_handshaker* grpc_http_connect_handshaker_create(const char* proxy_server,
-                                                     const char* server_name);
+void ServerContextTestSpouse::AddClientMetadata(const grpc::string& key,
+                                                const grpc::string& value) {
+  client_metadata_storage_.insert(
+      std::pair<grpc::string, grpc::string>(key, value));
+  ctx_->client_metadata_.clear();
+  for (auto iter = client_metadata_storage_.begin();
+       iter != client_metadata_storage_.end(); ++iter) {
+    ctx_->client_metadata_.insert(std::pair<grpc::string_ref, grpc::string_ref>(
+        iter->first.c_str(), iter->second.c_str()));
+  }
+}
 
-/// Returns the name of the proxy to use, or NULL if no proxy is configured.
-/// Caller takes ownership of result.
-char* grpc_get_http_proxy_server();
-
-#endif /* GRPC_CORE_EXT_CLIENT_CONFIG_HTTP_CONNECT_HANDSHAKER_H */
+}  // namespace testing
+}  // namespace grpc
diff --git a/src/csharp/Grpc.Auth/GoogleAuthInterceptors.cs b/src/csharp/Grpc.Auth/GoogleAuthInterceptors.cs
index 96d6ee8..c5bca44 100644
--- a/src/csharp/Grpc.Auth/GoogleAuthInterceptors.cs
+++ b/src/csharp/Grpc.Auth/GoogleAuthInterceptors.cs
@@ -33,6 +33,7 @@
 
 using System;
 using System.Threading;
+using System.Threading.Tasks;
 
 using Google.Apis.Auth.OAuth2;
 using Grpc.Core;
@@ -72,9 +73,10 @@
         public static AsyncAuthInterceptor FromAccessToken(string accessToken)
         {
             GrpcPreconditions.CheckNotNull(accessToken);
-            return new AsyncAuthInterceptor(async (context, metadata) =>
+            return new AsyncAuthInterceptor((context, metadata) =>
             {
                 metadata.Add(CreateBearerTokenHeader(accessToken));
+                return TaskUtils.CompletedTask;
             });
         }
 
diff --git a/src/csharp/Grpc.Core/DefaultCallInvoker.cs b/src/csharp/Grpc.Core/DefaultCallInvoker.cs
index 1a99e41..b15aaef 100644
--- a/src/csharp/Grpc.Core/DefaultCallInvoker.cs
+++ b/src/csharp/Grpc.Core/DefaultCallInvoker.cs
@@ -102,6 +102,7 @@
             return Calls.AsyncDuplexStreamingCall(call);
         }
 
+        /// <summary>Creates call invocation details for given method.</summary>
         protected virtual CallInvocationDetails<TRequest, TResponse> CreateCall<TRequest, TResponse>(Method<TRequest, TResponse> method, string host, CallOptions options)
                 where TRequest : class
                 where TResponse : class
diff --git a/src/csharp/Grpc.Core/Grpc.Core.csproj b/src/csharp/Grpc.Core/Grpc.Core.csproj
index 622813f..d315e6d 100644
--- a/src/csharp/Grpc.Core/Grpc.Core.csproj
+++ b/src/csharp/Grpc.Core/Grpc.Core.csproj
@@ -138,6 +138,8 @@
     <Compile Include="Internal\CallError.cs" />
     <Compile Include="Logging\LogLevel.cs" />
     <Compile Include="Logging\LogLevelFilterLogger.cs" />
+    <Compile Include="Internal\RequestCallContextSafeHandle.cs" />
+    <Compile Include="Utils\TaskUtils.cs" />
   </ItemGroup>
   <ItemGroup>
     <None Include="Grpc.Core.nuspec" />
diff --git a/src/csharp/Grpc.Core/GrpcEnvironment.cs b/src/csharp/Grpc.Core/GrpcEnvironment.cs
index 3ed2df2..c57c904 100644
--- a/src/csharp/Grpc.Core/GrpcEnvironment.cs
+++ b/src/csharp/Grpc.Core/GrpcEnvironment.cs
@@ -59,7 +59,6 @@
 
         static ILogger logger = new NullLogger();
 
-        readonly object myLock = new object();
         readonly GrpcThreadPool threadPool;
         readonly DebugStats debugStats = new DebugStats();
         readonly AtomicCounter cqPickerCounter = new AtomicCounter();
diff --git a/src/csharp/Grpc.Core/Internal/AsyncCall.cs b/src/csharp/Grpc.Core/Internal/AsyncCall.cs
index 9abaf11..49d0a11 100644
--- a/src/csharp/Grpc.Core/Internal/AsyncCall.cs
+++ b/src/csharp/Grpc.Core/Internal/AsyncCall.cs
@@ -265,7 +265,7 @@
                     // the halfclose has already been done implicitly, so just return
                     // completed task here.
                     halfcloseRequested = true;
-                    return Task.FromResult<object>(null);
+                    return TaskUtils.CompletedTask;
                 }
                 call.StartSendCloseFromClient(HandleSendFinished);
 
diff --git a/src/csharp/Grpc.Core/Internal/BatchContextSafeHandle.cs b/src/csharp/Grpc.Core/Internal/BatchContextSafeHandle.cs
index c28a6f6..26449ee 100644
--- a/src/csharp/Grpc.Core/Internal/BatchContextSafeHandle.cs
+++ b/src/csharp/Grpc.Core/Internal/BatchContextSafeHandle.cs
@@ -93,21 +93,6 @@
             return data;
         }
 
-        // Gets data of server_rpc_new completion.
-        public ServerRpcNew GetServerRpcNew(Server server)
-        {
-            var call = Native.grpcsharp_batch_context_server_rpc_new_call(this);
-
-            var method = Marshal.PtrToStringAnsi(Native.grpcsharp_batch_context_server_rpc_new_method(this));
-            var host = Marshal.PtrToStringAnsi(Native.grpcsharp_batch_context_server_rpc_new_host(this));
-            var deadline = Native.grpcsharp_batch_context_server_rpc_new_deadline(this);
-
-            IntPtr metadataArrayPtr = Native.grpcsharp_batch_context_server_rpc_new_request_metadata(this);
-            var metadata = MetadataArraySafeHandle.ReadMetadataFromPtrUnsafe(metadataArrayPtr);
-
-            return new ServerRpcNew(server, call, method, host, deadline, metadata);
-        }
-
         // Gets data of receive_close_on_server completion.
         public bool GetReceivedCloseOnServerCancelled()
         {
diff --git a/src/csharp/Grpc.Core/Internal/CompletionRegistry.cs b/src/csharp/Grpc.Core/Internal/CompletionRegistry.cs
index 628844f..7e2f0e9 100644
--- a/src/csharp/Grpc.Core/Internal/CompletionRegistry.cs
+++ b/src/csharp/Grpc.Core/Internal/CompletionRegistry.cs
@@ -44,6 +44,8 @@
 
     internal delegate void BatchCompletionDelegate(bool success, BatchContextSafeHandle ctx);
 
+    internal delegate void RequestCallCompletionDelegate(bool success, RequestCallContextSafeHandle ctx);
+
     internal class CompletionRegistry
     {
         static readonly ILogger Logger = GrpcEnvironment.Logger.ForType<CompletionRegistry>();
@@ -68,6 +70,12 @@
             Register(ctx.Handle, opCallback);
         }
 
+        public void RegisterRequestCallCompletion(RequestCallContextSafeHandle ctx, RequestCallCompletionDelegate callback)
+        {
+            OpCompletionDelegate opCallback = ((success) => HandleRequestCallCompletion(success, ctx, callback));
+            Register(ctx.Handle, opCallback);
+        }
+
         public OpCompletionDelegate Extract(IntPtr key)
         {
             OpCompletionDelegate value;
@@ -84,7 +92,26 @@
             }
             catch (Exception e)
             {
-                Logger.Error(e, "Exception occured while invoking completion delegate.");
+                Logger.Error(e, "Exception occured while invoking batch completion delegate.");
+            }
+            finally
+            {
+                if (ctx != null)
+                {
+                    ctx.Dispose();
+                }
+            }
+        }
+
+        private static void HandleRequestCallCompletion(bool success, RequestCallContextSafeHandle ctx, RequestCallCompletionDelegate callback)
+        {
+            try
+            {
+                callback(success, ctx);
+            }
+            catch (Exception e)
+            {
+                Logger.Error(e, "Exception occured while invoking request call completion delegate.");
             }
             finally
             {
diff --git a/src/csharp/Grpc.Core/Internal/InterceptingCallInvoker.cs b/src/csharp/Grpc.Core/Internal/InterceptingCallInvoker.cs
index ef48dc7..0c63e20 100644
--- a/src/csharp/Grpc.Core/Internal/InterceptingCallInvoker.cs
+++ b/src/csharp/Grpc.Core/Internal/InterceptingCallInvoker.cs
@@ -48,7 +48,7 @@
         readonly Func<CallOptions, CallOptions> callOptionsInterceptor;
 
         /// <summary>
-        /// Initializes a new instance of the <see cref="Grpc.Core.InterceptingCallInvoker"/> class.
+        /// Initializes a new instance of the <see cref="Grpc.Core.Internal.InterceptingCallInvoker"/> class.
         /// </summary>
         public InterceptingCallInvoker(CallInvoker callInvoker,
             Func<string, string> hostInterceptor = null,
diff --git a/src/csharp/Grpc.Core/Internal/NativeMetadataCredentialsPlugin.cs b/src/csharp/Grpc.Core/Internal/NativeMetadataCredentialsPlugin.cs
index 26af631..b371448 100644
--- a/src/csharp/Grpc.Core/Internal/NativeMetadataCredentialsPlugin.cs
+++ b/src/csharp/Grpc.Core/Internal/NativeMetadataCredentialsPlugin.cs
@@ -78,7 +78,10 @@
             {
                 var context = new AuthInterceptorContext(Marshal.PtrToStringAnsi(serviceUrlPtr),
                                                          Marshal.PtrToStringAnsi(methodNamePtr));
-                StartGetMetadata(context, callbackPtr, userDataPtr);
+                // Don't await, we are in a native callback and need to return.
+                #pragma warning disable 4014
+                GetMetadataAsync(context, callbackPtr, userDataPtr);
+                #pragma warning restore 4014
             }
             catch (Exception e)
             {
@@ -87,7 +90,7 @@
             }
         }
 
-        private async Task StartGetMetadata(AuthInterceptorContext context, IntPtr callbackPtr, IntPtr userDataPtr)
+        private async Task GetMetadataAsync(AuthInterceptorContext context, IntPtr callbackPtr, IntPtr userDataPtr)
         {
             try
             {
diff --git a/src/csharp/Grpc.Core/Internal/NativeMethods.cs b/src/csharp/Grpc.Core/Internal/NativeMethods.cs
index f457c9d..40ba7e3 100644
--- a/src/csharp/Grpc.Core/Internal/NativeMethods.cs
+++ b/src/csharp/Grpc.Core/Internal/NativeMethods.cs
@@ -64,14 +64,17 @@
         public readonly Delegates.grpcsharp_batch_context_recv_status_on_client_status_delegate grpcsharp_batch_context_recv_status_on_client_status;
         public readonly Delegates.grpcsharp_batch_context_recv_status_on_client_details_delegate grpcsharp_batch_context_recv_status_on_client_details;
         public readonly Delegates.grpcsharp_batch_context_recv_status_on_client_trailing_metadata_delegate grpcsharp_batch_context_recv_status_on_client_trailing_metadata;
-        public readonly Delegates.grpcsharp_batch_context_server_rpc_new_call_delegate grpcsharp_batch_context_server_rpc_new_call;
-        public readonly Delegates.grpcsharp_batch_context_server_rpc_new_method_delegate grpcsharp_batch_context_server_rpc_new_method;
-        public readonly Delegates.grpcsharp_batch_context_server_rpc_new_host_delegate grpcsharp_batch_context_server_rpc_new_host;
-        public readonly Delegates.grpcsharp_batch_context_server_rpc_new_deadline_delegate grpcsharp_batch_context_server_rpc_new_deadline;
-        public readonly Delegates.grpcsharp_batch_context_server_rpc_new_request_metadata_delegate grpcsharp_batch_context_server_rpc_new_request_metadata;
         public readonly Delegates.grpcsharp_batch_context_recv_close_on_server_cancelled_delegate grpcsharp_batch_context_recv_close_on_server_cancelled;
         public readonly Delegates.grpcsharp_batch_context_destroy_delegate grpcsharp_batch_context_destroy;
 
+        public readonly Delegates.grpcsharp_request_call_context_create_delegate grpcsharp_request_call_context_create;
+        public readonly Delegates.grpcsharp_request_call_context_call_delegate grpcsharp_request_call_context_call;
+        public readonly Delegates.grpcsharp_request_call_context_method_delegate grpcsharp_request_call_context_method;
+        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_destroy_delegate grpcsharp_request_call_context_destroy;
+
         public readonly Delegates.grpcsharp_composite_call_credentials_create_delegate grpcsharp_composite_call_credentials_create;
         public readonly Delegates.grpcsharp_call_credentials_release_delegate grpcsharp_call_credentials_release;
 
@@ -170,14 +173,17 @@
             this.grpcsharp_batch_context_recv_status_on_client_status = GetMethodDelegate<Delegates.grpcsharp_batch_context_recv_status_on_client_status_delegate>(library);
             this.grpcsharp_batch_context_recv_status_on_client_details = GetMethodDelegate<Delegates.grpcsharp_batch_context_recv_status_on_client_details_delegate>(library);
             this.grpcsharp_batch_context_recv_status_on_client_trailing_metadata = GetMethodDelegate<Delegates.grpcsharp_batch_context_recv_status_on_client_trailing_metadata_delegate>(library);
-            this.grpcsharp_batch_context_server_rpc_new_call = GetMethodDelegate<Delegates.grpcsharp_batch_context_server_rpc_new_call_delegate>(library);
-            this.grpcsharp_batch_context_server_rpc_new_method = GetMethodDelegate<Delegates.grpcsharp_batch_context_server_rpc_new_method_delegate>(library);
-            this.grpcsharp_batch_context_server_rpc_new_host = GetMethodDelegate<Delegates.grpcsharp_batch_context_server_rpc_new_host_delegate>(library);
-            this.grpcsharp_batch_context_server_rpc_new_deadline = GetMethodDelegate<Delegates.grpcsharp_batch_context_server_rpc_new_deadline_delegate>(library);
-            this.grpcsharp_batch_context_server_rpc_new_request_metadata = GetMethodDelegate<Delegates.grpcsharp_batch_context_server_rpc_new_request_metadata_delegate>(library);
             this.grpcsharp_batch_context_recv_close_on_server_cancelled = GetMethodDelegate<Delegates.grpcsharp_batch_context_recv_close_on_server_cancelled_delegate>(library);
             this.grpcsharp_batch_context_destroy = GetMethodDelegate<Delegates.grpcsharp_batch_context_destroy_delegate>(library);
 
+            this.grpcsharp_request_call_context_create = GetMethodDelegate<Delegates.grpcsharp_request_call_context_create_delegate>(library);
+            this.grpcsharp_request_call_context_call = GetMethodDelegate<Delegates.grpcsharp_request_call_context_call_delegate>(library);
+            this.grpcsharp_request_call_context_method = GetMethodDelegate<Delegates.grpcsharp_request_call_context_method_delegate>(library);
+            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_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);
             this.grpcsharp_call_credentials_release = GetMethodDelegate<Delegates.grpcsharp_call_credentials_release_delegate>(library);
 
@@ -302,14 +308,17 @@
             public delegate StatusCode grpcsharp_batch_context_recv_status_on_client_status_delegate(BatchContextSafeHandle ctx);
             public delegate IntPtr grpcsharp_batch_context_recv_status_on_client_details_delegate(BatchContextSafeHandle ctx);  // returns const char*
             public delegate IntPtr grpcsharp_batch_context_recv_status_on_client_trailing_metadata_delegate(BatchContextSafeHandle ctx);
-            public delegate CallSafeHandle grpcsharp_batch_context_server_rpc_new_call_delegate(BatchContextSafeHandle ctx);
-            public delegate IntPtr grpcsharp_batch_context_server_rpc_new_method_delegate(BatchContextSafeHandle ctx);  // returns const char*
-            public delegate IntPtr grpcsharp_batch_context_server_rpc_new_host_delegate(BatchContextSafeHandle ctx);  // returns const char*
-            public delegate Timespec grpcsharp_batch_context_server_rpc_new_deadline_delegate(BatchContextSafeHandle ctx);
-            public delegate IntPtr grpcsharp_batch_context_server_rpc_new_request_metadata_delegate(BatchContextSafeHandle ctx);
             public delegate int grpcsharp_batch_context_recv_close_on_server_cancelled_delegate(BatchContextSafeHandle ctx);
             public delegate void grpcsharp_batch_context_destroy_delegate(IntPtr ctx);
 
+            public delegate RequestCallContextSafeHandle grpcsharp_request_call_context_create_delegate();
+            public delegate CallSafeHandle grpcsharp_request_call_context_call_delegate(RequestCallContextSafeHandle ctx);
+            public delegate IntPtr grpcsharp_request_call_context_method_delegate(RequestCallContextSafeHandle ctx);  // returns const char*
+            public delegate IntPtr grpcsharp_request_call_context_host_delegate(RequestCallContextSafeHandle ctx);  // returns const char*
+            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_destroy_delegate(IntPtr ctx);
+
             public delegate CallCredentialsSafeHandle grpcsharp_composite_call_credentials_create_delegate(CallCredentialsSafeHandle creds1, CallCredentialsSafeHandle creds2);
             public delegate void grpcsharp_call_credentials_release_delegate(IntPtr credentials);
 
@@ -393,7 +402,7 @@
             public delegate int grpcsharp_server_add_insecure_http2_port_delegate(ServerSafeHandle server, string addr);
             public delegate int grpcsharp_server_add_secure_http2_port_delegate(ServerSafeHandle server, string addr, ServerCredentialsSafeHandle creds);
             public delegate void grpcsharp_server_start_delegate(ServerSafeHandle server);
-            public delegate CallError grpcsharp_server_request_call_delegate(ServerSafeHandle server, CompletionQueueSafeHandle cq, BatchContextSafeHandle ctx);
+            public delegate CallError grpcsharp_server_request_call_delegate(ServerSafeHandle server, CompletionQueueSafeHandle cq, RequestCallContextSafeHandle ctx);
             public delegate void grpcsharp_server_cancel_all_calls_delegate(ServerSafeHandle server);
             public delegate void grpcsharp_server_shutdown_and_notify_callback_delegate(ServerSafeHandle server, CompletionQueueSafeHandle cq, BatchContextSafeHandle ctx);
             public delegate void grpcsharp_server_destroy_delegate(IntPtr server);
diff --git a/src/csharp/Grpc.Core/Internal/RequestCallContextSafeHandle.cs b/src/csharp/Grpc.Core/Internal/RequestCallContextSafeHandle.cs
new file mode 100644
index 0000000..ea7819d
--- /dev/null
+++ b/src/csharp/Grpc.Core/Internal/RequestCallContextSafeHandle.cs
@@ -0,0 +1,85 @@
+#region Copyright notice and license
+
+// Copyright 2015, Google Inc.
+// All rights reserved.
+// 
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+// 
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+// 
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+#endregion
+
+using System;
+using System.Runtime.InteropServices;
+using Grpc.Core;
+
+namespace Grpc.Core.Internal
+{
+    /// <summary>
+    /// grpcsharp_request_call_context
+    /// </summary>
+    internal class RequestCallContextSafeHandle : SafeHandleZeroIsInvalid
+    {
+        static readonly NativeMethods Native = NativeMethods.Get();
+
+        private RequestCallContextSafeHandle()
+        {
+        }
+
+        public static RequestCallContextSafeHandle Create()
+        {
+            return Native.grpcsharp_request_call_context_create();
+        }
+
+        public IntPtr Handle
+        {
+            get
+            {
+                return handle;
+            }
+        }
+
+        // Gets data of server_rpc_new completion.
+        public ServerRpcNew GetServerRpcNew(Server server)
+        {
+            var call = Native.grpcsharp_request_call_context_call(this);
+
+            var method = Marshal.PtrToStringAnsi(Native.grpcsharp_request_call_context_method(this));
+            var host = Marshal.PtrToStringAnsi(Native.grpcsharp_request_call_context_host(this));
+            var deadline = Native.grpcsharp_request_call_context_deadline(this);
+
+            IntPtr metadataArrayPtr = Native.grpcsharp_request_call_context_request_metadata(this);
+            var metadata = MetadataArraySafeHandle.ReadMetadataFromPtrUnsafe(metadataArrayPtr);
+
+            return new ServerRpcNew(server, call, method, host, deadline, metadata);
+        }
+
+        protected override bool ReleaseHandle()
+        {
+            Native.grpcsharp_request_call_context_destroy(handle);
+            return true;
+        }
+    }
+}
diff --git a/src/csharp/Grpc.Core/Internal/ServerCallHandler.cs b/src/csharp/Grpc.Core/Internal/ServerCallHandler.cs
index 6a2f520..1dbd4bb 100644
--- a/src/csharp/Grpc.Core/Internal/ServerCallHandler.cs
+++ b/src/csharp/Grpc.Core/Internal/ServerCallHandler.cs
@@ -277,20 +277,31 @@
         }
     }
 
-    internal class NoSuchMethodCallHandler : IServerCallHandler
+    internal class UnimplementedMethodCallHandler : IServerCallHandler
     {
-        public static readonly NoSuchMethodCallHandler Instance = new NoSuchMethodCallHandler();
+        public static readonly UnimplementedMethodCallHandler Instance = new UnimplementedMethodCallHandler();
 
-        public async Task HandleCall(ServerRpcNew newRpc, CompletionQueueSafeHandle cq)
+        DuplexStreamingServerCallHandler<byte[], byte[]> callHandlerImpl;
+
+        public UnimplementedMethodCallHandler()
         {
-            // We don't care about the payload type here.
-            var asyncCall = new AsyncCallServer<byte[], byte[]>(
-                (payload) => payload, (payload) => payload, newRpc.Server);
-            
-            asyncCall.Initialize(newRpc.Call, cq);
-            var finishedTask = asyncCall.ServerSideCallAsync();
-            await asyncCall.SendStatusFromServerAsync(new Status(StatusCode.Unimplemented, ""), Metadata.Empty, null).ConfigureAwait(false);
-            await finishedTask.ConfigureAwait(false);
+            var marshaller = new Marshaller<byte[]>((payload) => payload, (payload) => payload);
+            var method = new Method<byte[], byte[]>(MethodType.DuplexStreaming, "", "", marshaller, marshaller);
+            this.callHandlerImpl = new DuplexStreamingServerCallHandler<byte[], byte[]>(method, new DuplexStreamingServerMethod<byte[], byte[]>(UnimplementedMethod));
+        }
+
+        /// <summary>
+        /// Handler used for unimplemented method.
+        /// </summary>
+        private Task UnimplementedMethod(IAsyncStreamReader<byte[]> requestStream, IServerStreamWriter<byte[]> responseStream, ServerCallContext ctx)
+        {
+            ctx.Status = new Status(StatusCode.Unimplemented, "");
+            return TaskUtils.CompletedTask;
+        }
+
+        public Task HandleCall(ServerRpcNew newRpc, CompletionQueueSafeHandle cq)
+        {
+            return callHandlerImpl.HandleCall(newRpc, cq);
         }
     }
 
diff --git a/src/csharp/Grpc.Core/Internal/ServerSafeHandle.cs b/src/csharp/Grpc.Core/Internal/ServerSafeHandle.cs
index 014a8db..7d7b838 100644
--- a/src/csharp/Grpc.Core/Internal/ServerSafeHandle.cs
+++ b/src/csharp/Grpc.Core/Internal/ServerSafeHandle.cs
@@ -85,12 +85,12 @@
             }
         }
 
-        public void RequestCall(BatchCompletionDelegate callback, CompletionQueueSafeHandle completionQueue)
+        public void RequestCall(RequestCallCompletionDelegate callback, CompletionQueueSafeHandle completionQueue)
         {
             using (completionQueue.NewScope())
             {
-                var ctx = BatchContextSafeHandle.Create();
-                completionQueue.CompletionRegistry.RegisterBatchCompletion(ctx, callback);
+                var ctx = RequestCallContextSafeHandle.Create();
+                completionQueue.CompletionRegistry.RegisterRequestCallCompletion(ctx, callback);
                 Native.grpcsharp_server_request_call(this, completionQueue, ctx).CheckOk();
             }
         }
diff --git a/src/csharp/Grpc.Core/Internal/UnmanagedLibrary.cs b/src/csharp/Grpc.Core/Internal/UnmanagedLibrary.cs
index 31e1402..1553bdd 100644
--- a/src/csharp/Grpc.Core/Internal/UnmanagedLibrary.cs
+++ b/src/csharp/Grpc.Core/Internal/UnmanagedLibrary.cs
@@ -134,7 +134,11 @@
             {
                 throw new MissingMethodException(string.Format("The native method \"{0}\" does not exist", methodName));
             }
-            return Marshal.GetDelegateForFunctionPointer(ptr, typeof(T)) as T;
+#if NETSTANDARD1_5
+            return Marshal.GetDelegateForFunctionPointer<T>(ptr);  // non-generic version is obsolete
+#else
+            return Marshal.GetDelegateForFunctionPointer(ptr, typeof(T)) as T;  // generic version not available in .NET45
+#endif
         }
 
         /// <summary>
diff --git a/src/csharp/Grpc.Core/Metadata.cs b/src/csharp/Grpc.Core/Metadata.cs
index 915bec1..6fc715d 100644
--- a/src/csharp/Grpc.Core/Metadata.cs
+++ b/src/csharp/Grpc.Core/Metadata.cs
@@ -95,11 +95,18 @@
 
         #region IList members
 
+
+        /// <summary>
+        /// <see cref="T:IList`1"/>
+        /// </summary>
         public int IndexOf(Metadata.Entry item)
         {
             return entries.IndexOf(item);
         }
 
+        /// <summary>
+        /// <see cref="T:IList`1"/>
+        /// </summary>
         public void Insert(int index, Metadata.Entry item)
         {
             GrpcPreconditions.CheckNotNull(item);
@@ -107,12 +114,18 @@
             entries.Insert(index, item);
         }
 
+        /// <summary>
+        /// <see cref="T:IList`1"/>
+        /// </summary>
         public void RemoveAt(int index)
         {
             CheckWriteable();
             entries.RemoveAt(index);
         }
 
+        /// <summary>
+        /// <see cref="T:IList`1"/>
+        /// </summary>
         public Metadata.Entry this[int index]
         {
             get
@@ -128,6 +141,9 @@
             }
         }
 
+        /// <summary>
+        /// <see cref="T:IList`1"/>
+        /// </summary>
         public void Add(Metadata.Entry item)
         {
             GrpcPreconditions.CheckNotNull(item);
@@ -135,48 +151,75 @@
             entries.Add(item);
         }
 
+        /// <summary>
+        /// <see cref="T:IList`1"/>
+        /// </summary>
         public void Add(string key, string value)
         {
             Add(new Entry(key, value));
         }
 
+        /// <summary>
+        /// <see cref="T:IList`1"/>
+        /// </summary>
         public void Add(string key, byte[] valueBytes)
         {
             Add(new Entry(key, valueBytes));
         }
 
+        /// <summary>
+        /// <see cref="T:IList`1"/>
+        /// </summary>
         public void Clear()
         {
             CheckWriteable();
             entries.Clear();
         }
 
+        /// <summary>
+        /// <see cref="T:IList`1"/>
+        /// </summary>
         public bool Contains(Metadata.Entry item)
         {
             return entries.Contains(item);
         }
 
+        /// <summary>
+        /// <see cref="T:IList`1"/>
+        /// </summary>
         public void CopyTo(Metadata.Entry[] array, int arrayIndex)
         {
             entries.CopyTo(array, arrayIndex);
         }
 
+        /// <summary>
+        /// <see cref="T:IList`1"/>
+        /// </summary>
         public int Count
         {
             get { return entries.Count; }
         }
 
+        /// <summary>
+        /// <see cref="T:IList`1"/>
+        /// </summary>
         public bool IsReadOnly
         {
             get { return readOnly; }
         }
 
+        /// <summary>
+        /// <see cref="T:IList`1"/>
+        /// </summary>
         public bool Remove(Metadata.Entry item)
         {
             CheckWriteable();
             return entries.Remove(item);
         }
 
+        /// <summary>
+        /// <see cref="T:IList`1"/>
+        /// </summary>
         public IEnumerator<Metadata.Entry> GetEnumerator()
         {
             return entries.GetEnumerator();
@@ -221,7 +264,7 @@
             public Entry(string key, byte[] valueBytes)
             {
                 this.key = NormalizeKey(key);
-                GrpcPreconditions.CheckArgument(this.key.EndsWith(BinaryHeaderSuffix),
+                GrpcPreconditions.CheckArgument(HasBinaryHeaderSuffix(this.key),
                     "Key for binary valued metadata entry needs to have suffix indicating binary value.");
                 this.value = null;
                 GrpcPreconditions.CheckNotNull(valueBytes, "valueBytes");
@@ -237,7 +280,7 @@
             public Entry(string key, string value)
             {
                 this.key = NormalizeKey(key);
-                GrpcPreconditions.CheckArgument(!this.key.EndsWith(BinaryHeaderSuffix),
+                GrpcPreconditions.CheckArgument(!HasBinaryHeaderSuffix(this.key),
                     "Key for ASCII valued metadata entry cannot have suffix indicating binary value.");
                 this.value = GrpcPreconditions.CheckNotNull(value, "value");
                 this.valueBytes = null;
@@ -324,7 +367,7 @@
             /// </summary>
             internal static Entry CreateUnsafe(string key, byte[] valueBytes)
             {
-                if (key.EndsWith(BinaryHeaderSuffix))
+                if (HasBinaryHeaderSuffix(key))
                 {
                     return new Entry(key, null, valueBytes);
                 }
@@ -338,6 +381,27 @@
                     "Metadata entry key not valid. Keys can only contain lowercase alphanumeric characters, underscores and hyphens.");
                 return normalized;
             }
+
+            /// <summary>
+            /// Returns <c>true</c> if the key has "-bin" binary header suffix.
+            /// </summary>
+            private static bool HasBinaryHeaderSuffix(string key)
+            {
+                // We don't use just string.EndsWith because its implementation is extremely slow
+                // on CoreCLR and we've seen significant differences in gRPC benchmarks caused by it.
+                // See https://github.com/dotnet/coreclr/issues/5612
+
+                int len = key.Length;
+                if (len >= 4 &&
+                    key[len - 4] == '-' &&
+                    key[len - 3] == 'b' &&
+                    key[len - 2] == 'i' &&
+                    key[len - 1] == 'n')
+                {
+                    return true;
+                }
+                return false;
+            }
         }
     }
 }
diff --git a/src/csharp/Grpc.Core/Server.cs b/src/csharp/Grpc.Core/Server.cs
index 3b554e5..63c1d9c 100644
--- a/src/csharp/Grpc.Core/Server.cs
+++ b/src/csharp/Grpc.Core/Server.cs
@@ -47,7 +47,7 @@
     /// </summary>
     public class Server
     {
-        const int InitialAllowRpcTokenCountPerCq = 10;
+        const int DefaultRequestCallTokensPerCq = 2000;
         static readonly ILogger Logger = GrpcEnvironment.Logger.ForType<Server>();
 
         readonly AtomicCounter activeCallCounter = new AtomicCounter();
@@ -66,7 +66,7 @@
 
         bool startRequested;
         volatile bool shutdownRequested;
-
+        int requestCallTokensPerCq = DefaultRequestCallTokensPerCq;
 
         /// <summary>
         /// Creates a new server.
@@ -133,6 +133,27 @@
         }
 
         /// <summary>
+        /// Experimental API. Might anytime change without prior notice.
+        /// Number or calls requested via grpc_server_request_call at any given time for each completion queue.
+        /// </summary>
+        public int RequestCallTokensPerCompletionQueue
+        {
+            get
+            {
+                return requestCallTokensPerCq;
+            }
+            set
+            {
+                lock (myLock)
+                {
+                    GrpcPreconditions.CheckState(!startRequested);
+                    GrpcPreconditions.CheckArgument(value > 0);
+                    requestCallTokensPerCq = value;
+                }
+            }
+        }
+
+        /// <summary>
         /// Starts the server.
         /// </summary>
         public void Start()
@@ -145,9 +166,7 @@
                 
                 handle.Start();
 
-                // Starting with more than one AllowOneRpc tokens can significantly increase
-                // unary RPC throughput.
-                for (int i = 0; i < InitialAllowRpcTokenCountPerCq; i++)
+                for (int i = 0; i < requestCallTokensPerCq; i++)
                 {
                     foreach (var cq in environment.CompletionQueues)
                     {
@@ -310,14 +329,14 @@
         /// <summary>
         /// Selects corresponding handler for given call and handles the call.
         /// </summary>
-        private async Task HandleCallAsync(ServerRpcNew newRpc, CompletionQueueSafeHandle cq)
+        private async Task HandleCallAsync(ServerRpcNew newRpc, CompletionQueueSafeHandle cq, Action continuation)
         {
             try
             {
                 IServerCallHandler callHandler;
                 if (!callHandlers.TryGetValue(newRpc.Method, out callHandler))
                 {
-                    callHandler = NoSuchMethodCallHandler.Instance;
+                    callHandler = UnimplementedMethodCallHandler.Instance;
                 }
                 await callHandler.HandleCall(newRpc, cq).ConfigureAwait(false);
             }
@@ -325,25 +344,40 @@
             {
                 Logger.Warning(e, "Exception while handling RPC.");
             }
+            finally
+            {
+                continuation();
+            }
         }
 
         /// <summary>
         /// Handles the native callback.
         /// </summary>
-        private void HandleNewServerRpc(bool success, BatchContextSafeHandle ctx, CompletionQueueSafeHandle cq)
+        private void HandleNewServerRpc(bool success, RequestCallContextSafeHandle ctx, CompletionQueueSafeHandle cq)
         {
-			Task.Run(() => AllowOneRpc(cq));
-
+            bool nextRpcRequested = false;
             if (success)
             {
-                ServerRpcNew newRpc = ctx.GetServerRpcNew(this);
+                var newRpc = ctx.GetServerRpcNew(this);
 
                 // after server shutdown, the callback returns with null call
                 if (!newRpc.Call.IsInvalid)
                 {
-                    HandleCallAsync(newRpc, cq);  // we don't need to await.
+                    nextRpcRequested = true;
+
+                    // Start asynchronous handler for the call.
+                    // Don't await, the continuations will run on gRPC thread pool once triggered
+                    // by cq.Next().
+                    #pragma warning disable 4014
+                    HandleCallAsync(newRpc, cq, () => AllowOneRpc(cq));
+                    #pragma warning restore 4014
                 }
             }
+
+            if (!nextRpcRequested)
+            {
+                AllowOneRpc(cq);
+            }
         }
 
         /// <summary>
diff --git a/src/csharp/Grpc.Core/Utils/TaskUtils.cs b/src/csharp/Grpc.Core/Utils/TaskUtils.cs
new file mode 100644
index 0000000..2cf1144
--- /dev/null
+++ b/src/csharp/Grpc.Core/Utils/TaskUtils.cs
@@ -0,0 +1,59 @@
+#region Copyright notice and license
+
+// Copyright 2015, Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+#endregion
+
+using System;
+using System.Threading.Tasks;
+
+namespace Grpc.Core.Utils
+{
+    /// <summary>
+    /// Utility methods for task parallel library.
+    /// </summary>
+    public static class TaskUtils
+    {
+        /// <summary>
+        /// Framework independent equivalent of <c>Task.CompletedTask</c>.
+        /// </summary>
+        public static Task CompletedTask
+        {
+            get
+            {
+#if NETSTANDARD1_5
+                return Task.CompletedTask;
+#else
+                return Task.FromResult<object>(null);  // for .NET45, emulate the functionality
+#endif
+            }
+        }
+    }
+}
diff --git a/src/csharp/Grpc.Examples/Math.cs b/src/csharp/Grpc.Examples/Math.cs
index a17228c..fae4fd3 100644
--- a/src/csharp/Grpc.Examples/Math.cs
+++ b/src/csharp/Grpc.Examples/Math.cs
@@ -10,7 +10,6 @@
 namespace Math {
 
   /// <summary>Holder for reflection information generated from math.proto</summary>
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
   public static partial class MathReflection {
 
     #region Descriptor
@@ -46,30 +45,35 @@
 
   }
   #region Messages
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
   public sealed partial class DivArgs : pb::IMessage<DivArgs> {
     private static readonly pb::MessageParser<DivArgs> _parser = new pb::MessageParser<DivArgs>(() => new DivArgs());
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public static pb::MessageParser<DivArgs> Parser { get { return _parser; } }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public static pbr::MessageDescriptor Descriptor {
       get { return global::Math.MathReflection.Descriptor.MessageTypes[0]; }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     pbr::MessageDescriptor pb::IMessage.Descriptor {
       get { return Descriptor; }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public DivArgs() {
       OnConstruction();
     }
 
     partial void OnConstruction();
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public DivArgs(DivArgs other) : this() {
       dividend_ = other.dividend_;
       divisor_ = other.divisor_;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public DivArgs Clone() {
       return new DivArgs(this);
     }
@@ -77,6 +81,7 @@
     /// <summary>Field number for the "dividend" field.</summary>
     public const int DividendFieldNumber = 1;
     private long dividend_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public long Dividend {
       get { return dividend_; }
       set {
@@ -87,6 +92,7 @@
     /// <summary>Field number for the "divisor" field.</summary>
     public const int DivisorFieldNumber = 2;
     private long divisor_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public long Divisor {
       get { return divisor_; }
       set {
@@ -94,10 +100,12 @@
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override bool Equals(object other) {
       return Equals(other as DivArgs);
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public bool Equals(DivArgs other) {
       if (ReferenceEquals(other, null)) {
         return false;
@@ -110,6 +118,7 @@
       return true;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override int GetHashCode() {
       int hash = 1;
       if (Dividend != 0L) hash ^= Dividend.GetHashCode();
@@ -117,10 +126,12 @@
       return hash;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override string ToString() {
       return pb::JsonFormatter.ToDiagnosticString(this);
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void WriteTo(pb::CodedOutputStream output) {
       if (Dividend != 0L) {
         output.WriteRawTag(8);
@@ -132,6 +143,7 @@
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public int CalculateSize() {
       int size = 0;
       if (Dividend != 0L) {
@@ -143,6 +155,7 @@
       return size;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void MergeFrom(DivArgs other) {
       if (other == null) {
         return;
@@ -155,6 +168,7 @@
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void MergeFrom(pb::CodedInputStream input) {
       uint tag;
       while ((tag = input.ReadTag()) != 0) {
@@ -176,30 +190,35 @@
 
   }
 
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
   public sealed partial class DivReply : pb::IMessage<DivReply> {
     private static readonly pb::MessageParser<DivReply> _parser = new pb::MessageParser<DivReply>(() => new DivReply());
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public static pb::MessageParser<DivReply> Parser { get { return _parser; } }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public static pbr::MessageDescriptor Descriptor {
       get { return global::Math.MathReflection.Descriptor.MessageTypes[1]; }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     pbr::MessageDescriptor pb::IMessage.Descriptor {
       get { return Descriptor; }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public DivReply() {
       OnConstruction();
     }
 
     partial void OnConstruction();
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public DivReply(DivReply other) : this() {
       quotient_ = other.quotient_;
       remainder_ = other.remainder_;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public DivReply Clone() {
       return new DivReply(this);
     }
@@ -207,6 +226,7 @@
     /// <summary>Field number for the "quotient" field.</summary>
     public const int QuotientFieldNumber = 1;
     private long quotient_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public long Quotient {
       get { return quotient_; }
       set {
@@ -217,6 +237,7 @@
     /// <summary>Field number for the "remainder" field.</summary>
     public const int RemainderFieldNumber = 2;
     private long remainder_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public long Remainder {
       get { return remainder_; }
       set {
@@ -224,10 +245,12 @@
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override bool Equals(object other) {
       return Equals(other as DivReply);
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public bool Equals(DivReply other) {
       if (ReferenceEquals(other, null)) {
         return false;
@@ -240,6 +263,7 @@
       return true;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override int GetHashCode() {
       int hash = 1;
       if (Quotient != 0L) hash ^= Quotient.GetHashCode();
@@ -247,10 +271,12 @@
       return hash;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override string ToString() {
       return pb::JsonFormatter.ToDiagnosticString(this);
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void WriteTo(pb::CodedOutputStream output) {
       if (Quotient != 0L) {
         output.WriteRawTag(8);
@@ -262,6 +288,7 @@
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public int CalculateSize() {
       int size = 0;
       if (Quotient != 0L) {
@@ -273,6 +300,7 @@
       return size;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void MergeFrom(DivReply other) {
       if (other == null) {
         return;
@@ -285,6 +313,7 @@
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void MergeFrom(pb::CodedInputStream input) {
       uint tag;
       while ((tag = input.ReadTag()) != 0) {
@@ -306,29 +335,34 @@
 
   }
 
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
   public sealed partial class FibArgs : pb::IMessage<FibArgs> {
     private static readonly pb::MessageParser<FibArgs> _parser = new pb::MessageParser<FibArgs>(() => new FibArgs());
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public static pb::MessageParser<FibArgs> Parser { get { return _parser; } }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public static pbr::MessageDescriptor Descriptor {
       get { return global::Math.MathReflection.Descriptor.MessageTypes[2]; }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     pbr::MessageDescriptor pb::IMessage.Descriptor {
       get { return Descriptor; }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public FibArgs() {
       OnConstruction();
     }
 
     partial void OnConstruction();
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public FibArgs(FibArgs other) : this() {
       limit_ = other.limit_;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public FibArgs Clone() {
       return new FibArgs(this);
     }
@@ -336,6 +370,7 @@
     /// <summary>Field number for the "limit" field.</summary>
     public const int LimitFieldNumber = 1;
     private long limit_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public long Limit {
       get { return limit_; }
       set {
@@ -343,10 +378,12 @@
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override bool Equals(object other) {
       return Equals(other as FibArgs);
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public bool Equals(FibArgs other) {
       if (ReferenceEquals(other, null)) {
         return false;
@@ -358,16 +395,19 @@
       return true;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override int GetHashCode() {
       int hash = 1;
       if (Limit != 0L) hash ^= Limit.GetHashCode();
       return hash;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override string ToString() {
       return pb::JsonFormatter.ToDiagnosticString(this);
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void WriteTo(pb::CodedOutputStream output) {
       if (Limit != 0L) {
         output.WriteRawTag(8);
@@ -375,6 +415,7 @@
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public int CalculateSize() {
       int size = 0;
       if (Limit != 0L) {
@@ -383,6 +424,7 @@
       return size;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void MergeFrom(FibArgs other) {
       if (other == null) {
         return;
@@ -392,6 +434,7 @@
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void MergeFrom(pb::CodedInputStream input) {
       uint tag;
       while ((tag = input.ReadTag()) != 0) {
@@ -409,29 +452,34 @@
 
   }
 
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
   public sealed partial class Num : pb::IMessage<Num> {
     private static readonly pb::MessageParser<Num> _parser = new pb::MessageParser<Num>(() => new Num());
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public static pb::MessageParser<Num> Parser { get { return _parser; } }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public static pbr::MessageDescriptor Descriptor {
       get { return global::Math.MathReflection.Descriptor.MessageTypes[3]; }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     pbr::MessageDescriptor pb::IMessage.Descriptor {
       get { return Descriptor; }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public Num() {
       OnConstruction();
     }
 
     partial void OnConstruction();
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public Num(Num other) : this() {
       num_ = other.num_;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public Num Clone() {
       return new Num(this);
     }
@@ -439,6 +487,7 @@
     /// <summary>Field number for the "num" field.</summary>
     public const int Num_FieldNumber = 1;
     private long num_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public long Num_ {
       get { return num_; }
       set {
@@ -446,10 +495,12 @@
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override bool Equals(object other) {
       return Equals(other as Num);
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public bool Equals(Num other) {
       if (ReferenceEquals(other, null)) {
         return false;
@@ -461,16 +512,19 @@
       return true;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override int GetHashCode() {
       int hash = 1;
       if (Num_ != 0L) hash ^= Num_.GetHashCode();
       return hash;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override string ToString() {
       return pb::JsonFormatter.ToDiagnosticString(this);
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void WriteTo(pb::CodedOutputStream output) {
       if (Num_ != 0L) {
         output.WriteRawTag(8);
@@ -478,6 +532,7 @@
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public int CalculateSize() {
       int size = 0;
       if (Num_ != 0L) {
@@ -486,6 +541,7 @@
       return size;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void MergeFrom(Num other) {
       if (other == null) {
         return;
@@ -495,6 +551,7 @@
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void MergeFrom(pb::CodedInputStream input) {
       uint tag;
       while ((tag = input.ReadTag()) != 0) {
@@ -512,29 +569,34 @@
 
   }
 
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
   public sealed partial class FibReply : pb::IMessage<FibReply> {
     private static readonly pb::MessageParser<FibReply> _parser = new pb::MessageParser<FibReply>(() => new FibReply());
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public static pb::MessageParser<FibReply> Parser { get { return _parser; } }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public static pbr::MessageDescriptor Descriptor {
       get { return global::Math.MathReflection.Descriptor.MessageTypes[4]; }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     pbr::MessageDescriptor pb::IMessage.Descriptor {
       get { return Descriptor; }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public FibReply() {
       OnConstruction();
     }
 
     partial void OnConstruction();
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public FibReply(FibReply other) : this() {
       count_ = other.count_;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public FibReply Clone() {
       return new FibReply(this);
     }
@@ -542,6 +604,7 @@
     /// <summary>Field number for the "count" field.</summary>
     public const int CountFieldNumber = 1;
     private long count_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public long Count {
       get { return count_; }
       set {
@@ -549,10 +612,12 @@
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override bool Equals(object other) {
       return Equals(other as FibReply);
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public bool Equals(FibReply other) {
       if (ReferenceEquals(other, null)) {
         return false;
@@ -564,16 +629,19 @@
       return true;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override int GetHashCode() {
       int hash = 1;
       if (Count != 0L) hash ^= Count.GetHashCode();
       return hash;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override string ToString() {
       return pb::JsonFormatter.ToDiagnosticString(this);
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void WriteTo(pb::CodedOutputStream output) {
       if (Count != 0L) {
         output.WriteRawTag(8);
@@ -581,6 +649,7 @@
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public int CalculateSize() {
       int size = 0;
       if (Count != 0L) {
@@ -589,6 +658,7 @@
       return size;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void MergeFrom(FibReply other) {
       if (other == null) {
         return;
@@ -598,6 +668,7 @@
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void MergeFrom(pb::CodedInputStream input) {
       uint tag;
       while ((tag = input.ReadTag()) != 0) {
diff --git a/src/csharp/Grpc.Examples/MathGrpc.cs b/src/csharp/Grpc.Examples/MathGrpc.cs
index 25abc51..d6ba61e7 100644
--- a/src/csharp/Grpc.Examples/MathGrpc.cs
+++ b/src/csharp/Grpc.Examples/MathGrpc.cs
@@ -234,6 +234,7 @@
       {
         return CallInvoker.AsyncClientStreamingCall(__Method_Sum, null, options);
       }
+      /// <summary>Creates a new instance of client from given <c>ClientBaseConfiguration</c>.</summary>
       protected override MathClient NewInstance(ClientBaseConfiguration configuration)
       {
         return new MathClient(configuration);
diff --git a/src/csharp/Grpc.HealthCheck/Health.cs b/src/csharp/Grpc.HealthCheck/Health.cs
index 100ad18..b8e2e22 100644
--- a/src/csharp/Grpc.HealthCheck/Health.cs
+++ b/src/csharp/Grpc.HealthCheck/Health.cs
@@ -10,7 +10,6 @@
 namespace Grpc.Health.V1 {
 
   /// <summary>Holder for reflection information generated from health.proto</summary>
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
   public static partial class HealthReflection {
 
     #region Descriptor
@@ -42,29 +41,34 @@
 
   }
   #region Messages
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
   public sealed partial class HealthCheckRequest : pb::IMessage<HealthCheckRequest> {
     private static readonly pb::MessageParser<HealthCheckRequest> _parser = new pb::MessageParser<HealthCheckRequest>(() => new HealthCheckRequest());
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public static pb::MessageParser<HealthCheckRequest> Parser { get { return _parser; } }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public static pbr::MessageDescriptor Descriptor {
       get { return global::Grpc.Health.V1.HealthReflection.Descriptor.MessageTypes[0]; }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     pbr::MessageDescriptor pb::IMessage.Descriptor {
       get { return Descriptor; }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public HealthCheckRequest() {
       OnConstruction();
     }
 
     partial void OnConstruction();
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public HealthCheckRequest(HealthCheckRequest other) : this() {
       service_ = other.service_;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public HealthCheckRequest Clone() {
       return new HealthCheckRequest(this);
     }
@@ -72,6 +76,7 @@
     /// <summary>Field number for the "service" field.</summary>
     public const int ServiceFieldNumber = 1;
     private string service_ = "";
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public string Service {
       get { return service_; }
       set {
@@ -79,10 +84,12 @@
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override bool Equals(object other) {
       return Equals(other as HealthCheckRequest);
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public bool Equals(HealthCheckRequest other) {
       if (ReferenceEquals(other, null)) {
         return false;
@@ -94,16 +101,19 @@
       return true;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override int GetHashCode() {
       int hash = 1;
       if (Service.Length != 0) hash ^= Service.GetHashCode();
       return hash;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override string ToString() {
       return pb::JsonFormatter.ToDiagnosticString(this);
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void WriteTo(pb::CodedOutputStream output) {
       if (Service.Length != 0) {
         output.WriteRawTag(10);
@@ -111,6 +121,7 @@
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public int CalculateSize() {
       int size = 0;
       if (Service.Length != 0) {
@@ -119,6 +130,7 @@
       return size;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void MergeFrom(HealthCheckRequest other) {
       if (other == null) {
         return;
@@ -128,6 +140,7 @@
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void MergeFrom(pb::CodedInputStream input) {
       uint tag;
       while ((tag = input.ReadTag()) != 0) {
@@ -145,29 +158,34 @@
 
   }
 
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
   public sealed partial class HealthCheckResponse : pb::IMessage<HealthCheckResponse> {
     private static readonly pb::MessageParser<HealthCheckResponse> _parser = new pb::MessageParser<HealthCheckResponse>(() => new HealthCheckResponse());
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public static pb::MessageParser<HealthCheckResponse> Parser { get { return _parser; } }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public static pbr::MessageDescriptor Descriptor {
       get { return global::Grpc.Health.V1.HealthReflection.Descriptor.MessageTypes[1]; }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     pbr::MessageDescriptor pb::IMessage.Descriptor {
       get { return Descriptor; }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public HealthCheckResponse() {
       OnConstruction();
     }
 
     partial void OnConstruction();
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public HealthCheckResponse(HealthCheckResponse other) : this() {
       status_ = other.status_;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public HealthCheckResponse Clone() {
       return new HealthCheckResponse(this);
     }
@@ -175,6 +193,7 @@
     /// <summary>Field number for the "status" field.</summary>
     public const int StatusFieldNumber = 1;
     private global::Grpc.Health.V1.HealthCheckResponse.Types.ServingStatus status_ = 0;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public global::Grpc.Health.V1.HealthCheckResponse.Types.ServingStatus Status {
       get { return status_; }
       set {
@@ -182,10 +201,12 @@
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override bool Equals(object other) {
       return Equals(other as HealthCheckResponse);
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public bool Equals(HealthCheckResponse other) {
       if (ReferenceEquals(other, null)) {
         return false;
@@ -197,16 +218,19 @@
       return true;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override int GetHashCode() {
       int hash = 1;
       if (Status != 0) hash ^= Status.GetHashCode();
       return hash;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override string ToString() {
       return pb::JsonFormatter.ToDiagnosticString(this);
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void WriteTo(pb::CodedOutputStream output) {
       if (Status != 0) {
         output.WriteRawTag(8);
@@ -214,6 +238,7 @@
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public int CalculateSize() {
       int size = 0;
       if (Status != 0) {
@@ -222,6 +247,7 @@
       return size;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void MergeFrom(HealthCheckResponse other) {
       if (other == null) {
         return;
@@ -231,6 +257,7 @@
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void MergeFrom(pb::CodedInputStream input) {
       uint tag;
       while ((tag = input.ReadTag()) != 0) {
@@ -248,7 +275,7 @@
 
     #region Nested types
     /// <summary>Container for nested types declared in the HealthCheckResponse message type.</summary>
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public static partial class Types {
       public enum ServingStatus {
         [pbr::OriginalName("UNKNOWN")] Unknown = 0,
diff --git a/src/csharp/Grpc.HealthCheck/HealthGrpc.cs b/src/csharp/Grpc.HealthCheck/HealthGrpc.cs
index 43eea0f..b2a35a7 100644
--- a/src/csharp/Grpc.HealthCheck/HealthGrpc.cs
+++ b/src/csharp/Grpc.HealthCheck/HealthGrpc.cs
@@ -107,6 +107,7 @@
       {
         return CallInvoker.AsyncUnaryCall(__Method_Check, null, options, request);
       }
+      /// <summary>Creates a new instance of client from given <c>ClientBaseConfiguration</c>.</summary>
       protected override HealthClient NewInstance(ClientBaseConfiguration configuration)
       {
         return new HealthClient(configuration);
diff --git a/src/csharp/Grpc.IntegrationTesting.QpsWorker/project.json b/src/csharp/Grpc.IntegrationTesting.QpsWorker/project.json
index 1b900c8..fe200f8 100644
--- a/src/csharp/Grpc.IntegrationTesting.QpsWorker/project.json
+++ b/src/csharp/Grpc.IntegrationTesting.QpsWorker/project.json
@@ -67,5 +67,10 @@
         }
       }
     }
+  },
+  "runtimeOptions": {
+    "configProperties": {
+      "System.GC.Server": true
+    }
   }
 }
diff --git a/src/csharp/Grpc.IntegrationTesting/Control.cs b/src/csharp/Grpc.IntegrationTesting/Control.cs
index 412f800..7928b51 100644
--- a/src/csharp/Grpc.IntegrationTesting/Control.cs
+++ b/src/csharp/Grpc.IntegrationTesting/Control.cs
@@ -10,7 +10,6 @@
 namespace Grpc.Testing {
 
   /// <summary>Holder for reflection information generated from src/proto/grpc/testing/control.proto</summary>
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
   public static partial class ControlReflection {
 
     #region Descriptor
@@ -71,18 +70,19 @@
             "ASgBEhoKEmNsaWVudF9zeXN0ZW1fdGltZRgFIAEoARIYChBjbGllbnRfdXNl",
             "cl90aW1lGAYgASgBEhIKCmxhdGVuY3lfNTAYByABKAESEgoKbGF0ZW5jeV85",
             "MBgIIAEoARISCgpsYXRlbmN5Xzk1GAkgASgBEhIKCmxhdGVuY3lfOTkYCiAB",
-            "KAESEwoLbGF0ZW5jeV85OTkYCyABKAEimAIKDlNjZW5hcmlvUmVzdWx0EigK",
+            "KAESEwoLbGF0ZW5jeV85OTkYCyABKAEiyAIKDlNjZW5hcmlvUmVzdWx0EigK",
             "CHNjZW5hcmlvGAEgASgLMhYuZ3JwYy50ZXN0aW5nLlNjZW5hcmlvEi4KCWxh",
             "dGVuY2llcxgCIAEoCzIbLmdycGMudGVzdGluZy5IaXN0b2dyYW1EYXRhEi8K",
             "DGNsaWVudF9zdGF0cxgDIAMoCzIZLmdycGMudGVzdGluZy5DbGllbnRTdGF0",
             "cxIvCgxzZXJ2ZXJfc3RhdHMYBCADKAsyGS5ncnBjLnRlc3RpbmcuU2VydmVy",
             "U3RhdHMSFAoMc2VydmVyX2NvcmVzGAUgAygFEjQKB3N1bW1hcnkYBiABKAsy",
-            "Iy5ncnBjLnRlc3RpbmcuU2NlbmFyaW9SZXN1bHRTdW1tYXJ5KkEKCkNsaWVu",
-            "dFR5cGUSDwoLU1lOQ19DTElFTlQQABIQCgxBU1lOQ19DTElFTlQQARIQCgxP",
-            "VEhFUl9DTElFTlQQAipbCgpTZXJ2ZXJUeXBlEg8KC1NZTkNfU0VSVkVSEAAS",
-            "EAoMQVNZTkNfU0VSVkVSEAESGAoUQVNZTkNfR0VORVJJQ19TRVJWRVIQAhIQ",
-            "CgxPVEhFUl9TRVJWRVIQAyojCgdScGNUeXBlEgkKBVVOQVJZEAASDQoJU1RS",
-            "RUFNSU5HEAFiBnByb3RvMw=="));
+            "Iy5ncnBjLnRlc3RpbmcuU2NlbmFyaW9SZXN1bHRTdW1tYXJ5EhYKDmNsaWVu",
+            "dF9zdWNjZXNzGAcgAygIEhYKDnNlcnZlcl9zdWNjZXNzGAggAygIKkEKCkNs",
+            "aWVudFR5cGUSDwoLU1lOQ19DTElFTlQQABIQCgxBU1lOQ19DTElFTlQQARIQ",
+            "CgxPVEhFUl9DTElFTlQQAipbCgpTZXJ2ZXJUeXBlEg8KC1NZTkNfU0VSVkVS",
+            "EAASEAoMQVNZTkNfU0VSVkVSEAESGAoUQVNZTkNfR0VORVJJQ19TRVJWRVIQ",
+            "AhIQCgxPVEhFUl9TRVJWRVIQAyojCgdScGNUeXBlEgkKBVVOQVJZEAASDQoJ",
+            "U1RSRUFNSU5HEAFiBnByb3RvMw=="));
       descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
           new pbr::FileDescriptor[] { global::Grpc.Testing.PayloadsReflection.Descriptor, global::Grpc.Testing.StatsReflection.Descriptor, },
           new pbr::GeneratedClrTypeInfo(new[] {typeof(global::Grpc.Testing.ClientType), typeof(global::Grpc.Testing.ServerType), typeof(global::Grpc.Testing.RpcType), }, new pbr::GeneratedClrTypeInfo[] {
@@ -103,7 +103,7 @@
             new pbr::GeneratedClrTypeInfo(typeof(global::Grpc.Testing.Scenario), global::Grpc.Testing.Scenario.Parser, new[]{ "Name", "ClientConfig", "NumClients", "ServerConfig", "NumServers", "WarmupSeconds", "BenchmarkSeconds", "SpawnLocalWorkerCount" }, null, null, null),
             new pbr::GeneratedClrTypeInfo(typeof(global::Grpc.Testing.Scenarios), global::Grpc.Testing.Scenarios.Parser, new[]{ "Scenarios_" }, null, null, null),
             new pbr::GeneratedClrTypeInfo(typeof(global::Grpc.Testing.ScenarioResultSummary), global::Grpc.Testing.ScenarioResultSummary.Parser, new[]{ "Qps", "QpsPerServerCore", "ServerSystemTime", "ServerUserTime", "ClientSystemTime", "ClientUserTime", "Latency50", "Latency90", "Latency95", "Latency99", "Latency999" }, null, null, null),
-            new pbr::GeneratedClrTypeInfo(typeof(global::Grpc.Testing.ScenarioResult), global::Grpc.Testing.ScenarioResult.Parser, new[]{ "Scenario", "Latencies", "ClientStats", "ServerStats", "ServerCores", "Summary" }, null, null, null)
+            new pbr::GeneratedClrTypeInfo(typeof(global::Grpc.Testing.ScenarioResult), global::Grpc.Testing.ScenarioResult.Parser, new[]{ "Scenario", "Latencies", "ClientStats", "ServerStats", "ServerCores", "Summary", "ClientSuccess", "ServerSuccess" }, null, null, null)
           }));
     }
     #endregion
@@ -145,29 +145,34 @@
   ///  Parameters of poisson process distribution, which is a good representation
   ///  of activity coming in from independent identical stationary sources.
   /// </summary>
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
   public sealed partial class PoissonParams : pb::IMessage<PoissonParams> {
     private static readonly pb::MessageParser<PoissonParams> _parser = new pb::MessageParser<PoissonParams>(() => new PoissonParams());
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public static pb::MessageParser<PoissonParams> Parser { get { return _parser; } }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public static pbr::MessageDescriptor Descriptor {
       get { return global::Grpc.Testing.ControlReflection.Descriptor.MessageTypes[0]; }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     pbr::MessageDescriptor pb::IMessage.Descriptor {
       get { return Descriptor; }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public PoissonParams() {
       OnConstruction();
     }
 
     partial void OnConstruction();
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public PoissonParams(PoissonParams other) : this() {
       offeredLoad_ = other.offeredLoad_;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public PoissonParams Clone() {
       return new PoissonParams(this);
     }
@@ -178,6 +183,7 @@
     /// <summary>
     ///  The rate of arrivals (a.k.a. lambda parameter of the exp distribution).
     /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public double OfferedLoad {
       get { return offeredLoad_; }
       set {
@@ -185,10 +191,12 @@
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override bool Equals(object other) {
       return Equals(other as PoissonParams);
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public bool Equals(PoissonParams other) {
       if (ReferenceEquals(other, null)) {
         return false;
@@ -200,16 +208,19 @@
       return true;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override int GetHashCode() {
       int hash = 1;
       if (OfferedLoad != 0D) hash ^= OfferedLoad.GetHashCode();
       return hash;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override string ToString() {
       return pb::JsonFormatter.ToDiagnosticString(this);
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void WriteTo(pb::CodedOutputStream output) {
       if (OfferedLoad != 0D) {
         output.WriteRawTag(9);
@@ -217,6 +228,7 @@
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public int CalculateSize() {
       int size = 0;
       if (OfferedLoad != 0D) {
@@ -225,6 +237,7 @@
       return size;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void MergeFrom(PoissonParams other) {
       if (other == null) {
         return;
@@ -234,6 +247,7 @@
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void MergeFrom(pb::CodedInputStream input) {
       uint tag;
       while ((tag = input.ReadTag()) != 0) {
@@ -255,36 +269,43 @@
   ///  Once an RPC finishes, immediately start a new one.
   ///  No configuration parameters needed.
   /// </summary>
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
   public sealed partial class ClosedLoopParams : pb::IMessage<ClosedLoopParams> {
     private static readonly pb::MessageParser<ClosedLoopParams> _parser = new pb::MessageParser<ClosedLoopParams>(() => new ClosedLoopParams());
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public static pb::MessageParser<ClosedLoopParams> Parser { get { return _parser; } }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public static pbr::MessageDescriptor Descriptor {
       get { return global::Grpc.Testing.ControlReflection.Descriptor.MessageTypes[1]; }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     pbr::MessageDescriptor pb::IMessage.Descriptor {
       get { return Descriptor; }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public ClosedLoopParams() {
       OnConstruction();
     }
 
     partial void OnConstruction();
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public ClosedLoopParams(ClosedLoopParams other) : this() {
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public ClosedLoopParams Clone() {
       return new ClosedLoopParams(this);
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override bool Equals(object other) {
       return Equals(other as ClosedLoopParams);
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public bool Equals(ClosedLoopParams other) {
       if (ReferenceEquals(other, null)) {
         return false;
@@ -295,29 +316,35 @@
       return true;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override int GetHashCode() {
       int hash = 1;
       return hash;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override string ToString() {
       return pb::JsonFormatter.ToDiagnosticString(this);
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void WriteTo(pb::CodedOutputStream output) {
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public int CalculateSize() {
       int size = 0;
       return size;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void MergeFrom(ClosedLoopParams other) {
       if (other == null) {
         return;
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void MergeFrom(pb::CodedInputStream input) {
       uint tag;
       while ((tag = input.ReadTag()) != 0) {
@@ -331,25 +358,29 @@
 
   }
 
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
   public sealed partial class LoadParams : pb::IMessage<LoadParams> {
     private static readonly pb::MessageParser<LoadParams> _parser = new pb::MessageParser<LoadParams>(() => new LoadParams());
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public static pb::MessageParser<LoadParams> Parser { get { return _parser; } }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public static pbr::MessageDescriptor Descriptor {
       get { return global::Grpc.Testing.ControlReflection.Descriptor.MessageTypes[2]; }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     pbr::MessageDescriptor pb::IMessage.Descriptor {
       get { return Descriptor; }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public LoadParams() {
       OnConstruction();
     }
 
     partial void OnConstruction();
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public LoadParams(LoadParams other) : this() {
       switch (other.LoadCase) {
         case LoadOneofCase.ClosedLoop:
@@ -362,12 +393,14 @@
 
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public LoadParams Clone() {
       return new LoadParams(this);
     }
 
     /// <summary>Field number for the "closed_loop" field.</summary>
     public const int ClosedLoopFieldNumber = 1;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public global::Grpc.Testing.ClosedLoopParams ClosedLoop {
       get { return loadCase_ == LoadOneofCase.ClosedLoop ? (global::Grpc.Testing.ClosedLoopParams) load_ : null; }
       set {
@@ -378,6 +411,7 @@
 
     /// <summary>Field number for the "poisson" field.</summary>
     public const int PoissonFieldNumber = 2;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public global::Grpc.Testing.PoissonParams Poisson {
       get { return loadCase_ == LoadOneofCase.Poisson ? (global::Grpc.Testing.PoissonParams) load_ : null; }
       set {
@@ -394,19 +428,23 @@
       Poisson = 2,
     }
     private LoadOneofCase loadCase_ = LoadOneofCase.None;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public LoadOneofCase LoadCase {
       get { return loadCase_; }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void ClearLoad() {
       loadCase_ = LoadOneofCase.None;
       load_ = null;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override bool Equals(object other) {
       return Equals(other as LoadParams);
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public bool Equals(LoadParams other) {
       if (ReferenceEquals(other, null)) {
         return false;
@@ -420,6 +458,7 @@
       return true;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override int GetHashCode() {
       int hash = 1;
       if (loadCase_ == LoadOneofCase.ClosedLoop) hash ^= ClosedLoop.GetHashCode();
@@ -428,10 +467,12 @@
       return hash;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override string ToString() {
       return pb::JsonFormatter.ToDiagnosticString(this);
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void WriteTo(pb::CodedOutputStream output) {
       if (loadCase_ == LoadOneofCase.ClosedLoop) {
         output.WriteRawTag(10);
@@ -443,6 +484,7 @@
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public int CalculateSize() {
       int size = 0;
       if (loadCase_ == LoadOneofCase.ClosedLoop) {
@@ -454,6 +496,7 @@
       return size;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void MergeFrom(LoadParams other) {
       if (other == null) {
         return;
@@ -469,6 +512,7 @@
 
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void MergeFrom(pb::CodedInputStream input) {
       uint tag;
       while ((tag = input.ReadTag()) != 0) {
@@ -503,30 +547,35 @@
   /// <summary>
   ///  presence of SecurityParams implies use of TLS
   /// </summary>
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
   public sealed partial class SecurityParams : pb::IMessage<SecurityParams> {
     private static readonly pb::MessageParser<SecurityParams> _parser = new pb::MessageParser<SecurityParams>(() => new SecurityParams());
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public static pb::MessageParser<SecurityParams> Parser { get { return _parser; } }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public static pbr::MessageDescriptor Descriptor {
       get { return global::Grpc.Testing.ControlReflection.Descriptor.MessageTypes[3]; }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     pbr::MessageDescriptor pb::IMessage.Descriptor {
       get { return Descriptor; }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public SecurityParams() {
       OnConstruction();
     }
 
     partial void OnConstruction();
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public SecurityParams(SecurityParams other) : this() {
       useTestCa_ = other.useTestCa_;
       serverHostOverride_ = other.serverHostOverride_;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public SecurityParams Clone() {
       return new SecurityParams(this);
     }
@@ -534,6 +583,7 @@
     /// <summary>Field number for the "use_test_ca" field.</summary>
     public const int UseTestCaFieldNumber = 1;
     private bool useTestCa_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public bool UseTestCa {
       get { return useTestCa_; }
       set {
@@ -544,6 +594,7 @@
     /// <summary>Field number for the "server_host_override" field.</summary>
     public const int ServerHostOverrideFieldNumber = 2;
     private string serverHostOverride_ = "";
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public string ServerHostOverride {
       get { return serverHostOverride_; }
       set {
@@ -551,10 +602,12 @@
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override bool Equals(object other) {
       return Equals(other as SecurityParams);
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public bool Equals(SecurityParams other) {
       if (ReferenceEquals(other, null)) {
         return false;
@@ -567,6 +620,7 @@
       return true;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override int GetHashCode() {
       int hash = 1;
       if (UseTestCa != false) hash ^= UseTestCa.GetHashCode();
@@ -574,10 +628,12 @@
       return hash;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override string ToString() {
       return pb::JsonFormatter.ToDiagnosticString(this);
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void WriteTo(pb::CodedOutputStream output) {
       if (UseTestCa != false) {
         output.WriteRawTag(8);
@@ -589,6 +645,7 @@
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public int CalculateSize() {
       int size = 0;
       if (UseTestCa != false) {
@@ -600,6 +657,7 @@
       return size;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void MergeFrom(SecurityParams other) {
       if (other == null) {
         return;
@@ -612,6 +670,7 @@
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void MergeFrom(pb::CodedInputStream input) {
       uint tag;
       while ((tag = input.ReadTag()) != 0) {
@@ -633,25 +692,29 @@
 
   }
 
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
   public sealed partial class ClientConfig : pb::IMessage<ClientConfig> {
     private static readonly pb::MessageParser<ClientConfig> _parser = new pb::MessageParser<ClientConfig>(() => new ClientConfig());
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public static pb::MessageParser<ClientConfig> Parser { get { return _parser; } }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public static pbr::MessageDescriptor Descriptor {
       get { return global::Grpc.Testing.ControlReflection.Descriptor.MessageTypes[4]; }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     pbr::MessageDescriptor pb::IMessage.Descriptor {
       get { return Descriptor; }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public ClientConfig() {
       OnConstruction();
     }
 
     partial void OnConstruction();
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public ClientConfig(ClientConfig other) : this() {
       serverTargets_ = other.serverTargets_.Clone();
       clientType_ = other.clientType_;
@@ -668,6 +731,7 @@
       otherClientApi_ = other.otherClientApi_;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public ClientConfig Clone() {
       return new ClientConfig(this);
     }
@@ -680,6 +744,7 @@
     /// <summary>
     ///  List of targets to connect to. At least one target needs to be specified.
     /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public pbc::RepeatedField<string> ServerTargets {
       get { return serverTargets_; }
     }
@@ -687,6 +752,7 @@
     /// <summary>Field number for the "client_type" field.</summary>
     public const int ClientTypeFieldNumber = 2;
     private global::Grpc.Testing.ClientType clientType_ = 0;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public global::Grpc.Testing.ClientType ClientType {
       get { return clientType_; }
       set {
@@ -697,6 +763,7 @@
     /// <summary>Field number for the "security_params" field.</summary>
     public const int SecurityParamsFieldNumber = 3;
     private global::Grpc.Testing.SecurityParams securityParams_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public global::Grpc.Testing.SecurityParams SecurityParams {
       get { return securityParams_; }
       set {
@@ -711,6 +778,7 @@
     ///  How many concurrent RPCs to start for each channel.
     ///  For synchronous client, use a separate thread for each outstanding RPC.
     /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public int OutstandingRpcsPerChannel {
       get { return outstandingRpcsPerChannel_; }
       set {
@@ -725,6 +793,7 @@
     ///  Number of independent client channels to create.
     ///  i-th channel will connect to server_target[i % server_targets.size()]
     /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public int ClientChannels {
       get { return clientChannels_; }
       set {
@@ -738,6 +807,7 @@
     /// <summary>
     ///  Only for async client. Number of threads to use to start/manage RPCs.
     /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public int AsyncClientThreads {
       get { return asyncClientThreads_; }
       set {
@@ -748,6 +818,7 @@
     /// <summary>Field number for the "rpc_type" field.</summary>
     public const int RpcTypeFieldNumber = 8;
     private global::Grpc.Testing.RpcType rpcType_ = 0;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public global::Grpc.Testing.RpcType RpcType {
       get { return rpcType_; }
       set {
@@ -761,6 +832,7 @@
     /// <summary>
     ///  The requested load for the entire client (aggregated over all the threads).
     /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public global::Grpc.Testing.LoadParams LoadParams {
       get { return loadParams_; }
       set {
@@ -771,6 +843,7 @@
     /// <summary>Field number for the "payload_config" field.</summary>
     public const int PayloadConfigFieldNumber = 11;
     private global::Grpc.Testing.PayloadConfig payloadConfig_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public global::Grpc.Testing.PayloadConfig PayloadConfig {
       get { return payloadConfig_; }
       set {
@@ -781,6 +854,7 @@
     /// <summary>Field number for the "histogram_params" field.</summary>
     public const int HistogramParamsFieldNumber = 12;
     private global::Grpc.Testing.HistogramParams histogramParams_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public global::Grpc.Testing.HistogramParams HistogramParams {
       get { return histogramParams_; }
       set {
@@ -796,6 +870,7 @@
     /// <summary>
     ///  Specify the cores we should run the client on, if desired
     /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public pbc::RepeatedField<int> CoreList {
       get { return coreList_; }
     }
@@ -803,6 +878,7 @@
     /// <summary>Field number for the "core_limit" field.</summary>
     public const int CoreLimitFieldNumber = 14;
     private int coreLimit_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public int CoreLimit {
       get { return coreLimit_; }
       set {
@@ -816,6 +892,7 @@
     /// <summary>
     ///  If we use an OTHER_CLIENT client_type, this string gives more detail
     /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public string OtherClientApi {
       get { return otherClientApi_; }
       set {
@@ -823,10 +900,12 @@
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override bool Equals(object other) {
       return Equals(other as ClientConfig);
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public bool Equals(ClientConfig other) {
       if (ReferenceEquals(other, null)) {
         return false;
@@ -850,6 +929,7 @@
       return true;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override int GetHashCode() {
       int hash = 1;
       hash ^= serverTargets_.GetHashCode();
@@ -868,10 +948,12 @@
       return hash;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override string ToString() {
       return pb::JsonFormatter.ToDiagnosticString(this);
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void WriteTo(pb::CodedOutputStream output) {
       serverTargets_.WriteTo(output, _repeated_serverTargets_codec);
       if (ClientType != 0) {
@@ -921,6 +1003,7 @@
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public int CalculateSize() {
       int size = 0;
       size += serverTargets_.CalculateSize(_repeated_serverTargets_codec);
@@ -961,6 +1044,7 @@
       return size;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void MergeFrom(ClientConfig other) {
       if (other == null) {
         return;
@@ -1014,6 +1098,7 @@
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void MergeFrom(pb::CodedInputStream input) {
       uint tag;
       while ((tag = input.ReadTag()) != 0) {
@@ -1092,29 +1177,34 @@
 
   }
 
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
   public sealed partial class ClientStatus : pb::IMessage<ClientStatus> {
     private static readonly pb::MessageParser<ClientStatus> _parser = new pb::MessageParser<ClientStatus>(() => new ClientStatus());
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public static pb::MessageParser<ClientStatus> Parser { get { return _parser; } }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public static pbr::MessageDescriptor Descriptor {
       get { return global::Grpc.Testing.ControlReflection.Descriptor.MessageTypes[5]; }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     pbr::MessageDescriptor pb::IMessage.Descriptor {
       get { return Descriptor; }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public ClientStatus() {
       OnConstruction();
     }
 
     partial void OnConstruction();
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public ClientStatus(ClientStatus other) : this() {
       Stats = other.stats_ != null ? other.Stats.Clone() : null;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public ClientStatus Clone() {
       return new ClientStatus(this);
     }
@@ -1122,6 +1212,7 @@
     /// <summary>Field number for the "stats" field.</summary>
     public const int StatsFieldNumber = 1;
     private global::Grpc.Testing.ClientStats stats_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public global::Grpc.Testing.ClientStats Stats {
       get { return stats_; }
       set {
@@ -1129,10 +1220,12 @@
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override bool Equals(object other) {
       return Equals(other as ClientStatus);
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public bool Equals(ClientStatus other) {
       if (ReferenceEquals(other, null)) {
         return false;
@@ -1144,16 +1237,19 @@
       return true;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override int GetHashCode() {
       int hash = 1;
       if (stats_ != null) hash ^= Stats.GetHashCode();
       return hash;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override string ToString() {
       return pb::JsonFormatter.ToDiagnosticString(this);
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void WriteTo(pb::CodedOutputStream output) {
       if (stats_ != null) {
         output.WriteRawTag(10);
@@ -1161,6 +1257,7 @@
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public int CalculateSize() {
       int size = 0;
       if (stats_ != null) {
@@ -1169,6 +1266,7 @@
       return size;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void MergeFrom(ClientStatus other) {
       if (other == null) {
         return;
@@ -1181,6 +1279,7 @@
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void MergeFrom(pb::CodedInputStream input) {
       uint tag;
       while ((tag = input.ReadTag()) != 0) {
@@ -1204,29 +1303,34 @@
   /// <summary>
   ///  Request current stats
   /// </summary>
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
   public sealed partial class Mark : pb::IMessage<Mark> {
     private static readonly pb::MessageParser<Mark> _parser = new pb::MessageParser<Mark>(() => new Mark());
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public static pb::MessageParser<Mark> Parser { get { return _parser; } }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public static pbr::MessageDescriptor Descriptor {
       get { return global::Grpc.Testing.ControlReflection.Descriptor.MessageTypes[6]; }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     pbr::MessageDescriptor pb::IMessage.Descriptor {
       get { return Descriptor; }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public Mark() {
       OnConstruction();
     }
 
     partial void OnConstruction();
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public Mark(Mark other) : this() {
       reset_ = other.reset_;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public Mark Clone() {
       return new Mark(this);
     }
@@ -1237,6 +1341,7 @@
     /// <summary>
     ///  if true, the stats will be reset after taking their snapshot.
     /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public bool Reset {
       get { return reset_; }
       set {
@@ -1244,10 +1349,12 @@
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override bool Equals(object other) {
       return Equals(other as Mark);
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public bool Equals(Mark other) {
       if (ReferenceEquals(other, null)) {
         return false;
@@ -1259,16 +1366,19 @@
       return true;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override int GetHashCode() {
       int hash = 1;
       if (Reset != false) hash ^= Reset.GetHashCode();
       return hash;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override string ToString() {
       return pb::JsonFormatter.ToDiagnosticString(this);
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void WriteTo(pb::CodedOutputStream output) {
       if (Reset != false) {
         output.WriteRawTag(8);
@@ -1276,6 +1386,7 @@
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public int CalculateSize() {
       int size = 0;
       if (Reset != false) {
@@ -1284,6 +1395,7 @@
       return size;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void MergeFrom(Mark other) {
       if (other == null) {
         return;
@@ -1293,6 +1405,7 @@
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void MergeFrom(pb::CodedInputStream input) {
       uint tag;
       while ((tag = input.ReadTag()) != 0) {
@@ -1310,25 +1423,29 @@
 
   }
 
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
   public sealed partial class ClientArgs : pb::IMessage<ClientArgs> {
     private static readonly pb::MessageParser<ClientArgs> _parser = new pb::MessageParser<ClientArgs>(() => new ClientArgs());
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public static pb::MessageParser<ClientArgs> Parser { get { return _parser; } }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public static pbr::MessageDescriptor Descriptor {
       get { return global::Grpc.Testing.ControlReflection.Descriptor.MessageTypes[7]; }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     pbr::MessageDescriptor pb::IMessage.Descriptor {
       get { return Descriptor; }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public ClientArgs() {
       OnConstruction();
     }
 
     partial void OnConstruction();
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public ClientArgs(ClientArgs other) : this() {
       switch (other.ArgtypeCase) {
         case ArgtypeOneofCase.Setup:
@@ -1341,12 +1458,14 @@
 
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public ClientArgs Clone() {
       return new ClientArgs(this);
     }
 
     /// <summary>Field number for the "setup" field.</summary>
     public const int SetupFieldNumber = 1;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public global::Grpc.Testing.ClientConfig Setup {
       get { return argtypeCase_ == ArgtypeOneofCase.Setup ? (global::Grpc.Testing.ClientConfig) argtype_ : null; }
       set {
@@ -1357,6 +1476,7 @@
 
     /// <summary>Field number for the "mark" field.</summary>
     public const int MarkFieldNumber = 2;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public global::Grpc.Testing.Mark Mark {
       get { return argtypeCase_ == ArgtypeOneofCase.Mark ? (global::Grpc.Testing.Mark) argtype_ : null; }
       set {
@@ -1373,19 +1493,23 @@
       Mark = 2,
     }
     private ArgtypeOneofCase argtypeCase_ = ArgtypeOneofCase.None;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public ArgtypeOneofCase ArgtypeCase {
       get { return argtypeCase_; }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void ClearArgtype() {
       argtypeCase_ = ArgtypeOneofCase.None;
       argtype_ = null;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override bool Equals(object other) {
       return Equals(other as ClientArgs);
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public bool Equals(ClientArgs other) {
       if (ReferenceEquals(other, null)) {
         return false;
@@ -1399,6 +1523,7 @@
       return true;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override int GetHashCode() {
       int hash = 1;
       if (argtypeCase_ == ArgtypeOneofCase.Setup) hash ^= Setup.GetHashCode();
@@ -1407,10 +1532,12 @@
       return hash;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override string ToString() {
       return pb::JsonFormatter.ToDiagnosticString(this);
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void WriteTo(pb::CodedOutputStream output) {
       if (argtypeCase_ == ArgtypeOneofCase.Setup) {
         output.WriteRawTag(10);
@@ -1422,6 +1549,7 @@
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public int CalculateSize() {
       int size = 0;
       if (argtypeCase_ == ArgtypeOneofCase.Setup) {
@@ -1433,6 +1561,7 @@
       return size;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void MergeFrom(ClientArgs other) {
       if (other == null) {
         return;
@@ -1448,6 +1577,7 @@
 
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void MergeFrom(pb::CodedInputStream input) {
       uint tag;
       while ((tag = input.ReadTag()) != 0) {
@@ -1479,25 +1609,29 @@
 
   }
 
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
   public sealed partial class ServerConfig : pb::IMessage<ServerConfig> {
     private static readonly pb::MessageParser<ServerConfig> _parser = new pb::MessageParser<ServerConfig>(() => new ServerConfig());
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public static pb::MessageParser<ServerConfig> Parser { get { return _parser; } }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public static pbr::MessageDescriptor Descriptor {
       get { return global::Grpc.Testing.ControlReflection.Descriptor.MessageTypes[8]; }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     pbr::MessageDescriptor pb::IMessage.Descriptor {
       get { return Descriptor; }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public ServerConfig() {
       OnConstruction();
     }
 
     partial void OnConstruction();
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public ServerConfig(ServerConfig other) : this() {
       serverType_ = other.serverType_;
       SecurityParams = other.securityParams_ != null ? other.SecurityParams.Clone() : null;
@@ -1509,6 +1643,7 @@
       otherServerApi_ = other.otherServerApi_;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public ServerConfig Clone() {
       return new ServerConfig(this);
     }
@@ -1516,6 +1651,7 @@
     /// <summary>Field number for the "server_type" field.</summary>
     public const int ServerTypeFieldNumber = 1;
     private global::Grpc.Testing.ServerType serverType_ = 0;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public global::Grpc.Testing.ServerType ServerType {
       get { return serverType_; }
       set {
@@ -1526,6 +1662,7 @@
     /// <summary>Field number for the "security_params" field.</summary>
     public const int SecurityParamsFieldNumber = 2;
     private global::Grpc.Testing.SecurityParams securityParams_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public global::Grpc.Testing.SecurityParams SecurityParams {
       get { return securityParams_; }
       set {
@@ -1539,6 +1676,7 @@
     /// <summary>
     ///  Port on which to listen. Zero means pick unused port.
     /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public int Port {
       get { return port_; }
       set {
@@ -1552,6 +1690,7 @@
     /// <summary>
     ///  Only for async server. Number of threads used to serve the requests.
     /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public int AsyncServerThreads {
       get { return asyncServerThreads_; }
       set {
@@ -1565,6 +1704,7 @@
     /// <summary>
     ///  Specify the number of cores to limit server to, if desired
     /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public int CoreLimit {
       get { return coreLimit_; }
       set {
@@ -1578,6 +1718,7 @@
     /// <summary>
     ///  payload config, used in generic server
     /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public global::Grpc.Testing.PayloadConfig PayloadConfig {
       get { return payloadConfig_; }
       set {
@@ -1593,6 +1734,7 @@
     /// <summary>
     ///  Specify the cores we should run the server on, if desired
     /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public pbc::RepeatedField<int> CoreList {
       get { return coreList_; }
     }
@@ -1603,6 +1745,7 @@
     /// <summary>
     ///  If we use an OTHER_SERVER client_type, this string gives more detail
     /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public string OtherServerApi {
       get { return otherServerApi_; }
       set {
@@ -1610,10 +1753,12 @@
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override bool Equals(object other) {
       return Equals(other as ServerConfig);
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public bool Equals(ServerConfig other) {
       if (ReferenceEquals(other, null)) {
         return false;
@@ -1632,6 +1777,7 @@
       return true;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override int GetHashCode() {
       int hash = 1;
       if (ServerType != 0) hash ^= ServerType.GetHashCode();
@@ -1645,10 +1791,12 @@
       return hash;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override string ToString() {
       return pb::JsonFormatter.ToDiagnosticString(this);
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void WriteTo(pb::CodedOutputStream output) {
       if (ServerType != 0) {
         output.WriteRawTag(8);
@@ -1681,6 +1829,7 @@
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public int CalculateSize() {
       int size = 0;
       if (ServerType != 0) {
@@ -1708,6 +1857,7 @@
       return size;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void MergeFrom(ServerConfig other) {
       if (other == null) {
         return;
@@ -1742,6 +1892,7 @@
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void MergeFrom(pb::CodedInputStream input) {
       uint tag;
       while ((tag = input.ReadTag()) != 0) {
@@ -1794,25 +1945,29 @@
 
   }
 
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
   public sealed partial class ServerArgs : pb::IMessage<ServerArgs> {
     private static readonly pb::MessageParser<ServerArgs> _parser = new pb::MessageParser<ServerArgs>(() => new ServerArgs());
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public static pb::MessageParser<ServerArgs> Parser { get { return _parser; } }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public static pbr::MessageDescriptor Descriptor {
       get { return global::Grpc.Testing.ControlReflection.Descriptor.MessageTypes[9]; }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     pbr::MessageDescriptor pb::IMessage.Descriptor {
       get { return Descriptor; }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public ServerArgs() {
       OnConstruction();
     }
 
     partial void OnConstruction();
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public ServerArgs(ServerArgs other) : this() {
       switch (other.ArgtypeCase) {
         case ArgtypeOneofCase.Setup:
@@ -1825,12 +1980,14 @@
 
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public ServerArgs Clone() {
       return new ServerArgs(this);
     }
 
     /// <summary>Field number for the "setup" field.</summary>
     public const int SetupFieldNumber = 1;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public global::Grpc.Testing.ServerConfig Setup {
       get { return argtypeCase_ == ArgtypeOneofCase.Setup ? (global::Grpc.Testing.ServerConfig) argtype_ : null; }
       set {
@@ -1841,6 +1998,7 @@
 
     /// <summary>Field number for the "mark" field.</summary>
     public const int MarkFieldNumber = 2;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public global::Grpc.Testing.Mark Mark {
       get { return argtypeCase_ == ArgtypeOneofCase.Mark ? (global::Grpc.Testing.Mark) argtype_ : null; }
       set {
@@ -1857,19 +2015,23 @@
       Mark = 2,
     }
     private ArgtypeOneofCase argtypeCase_ = ArgtypeOneofCase.None;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public ArgtypeOneofCase ArgtypeCase {
       get { return argtypeCase_; }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void ClearArgtype() {
       argtypeCase_ = ArgtypeOneofCase.None;
       argtype_ = null;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override bool Equals(object other) {
       return Equals(other as ServerArgs);
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public bool Equals(ServerArgs other) {
       if (ReferenceEquals(other, null)) {
         return false;
@@ -1883,6 +2045,7 @@
       return true;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override int GetHashCode() {
       int hash = 1;
       if (argtypeCase_ == ArgtypeOneofCase.Setup) hash ^= Setup.GetHashCode();
@@ -1891,10 +2054,12 @@
       return hash;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override string ToString() {
       return pb::JsonFormatter.ToDiagnosticString(this);
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void WriteTo(pb::CodedOutputStream output) {
       if (argtypeCase_ == ArgtypeOneofCase.Setup) {
         output.WriteRawTag(10);
@@ -1906,6 +2071,7 @@
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public int CalculateSize() {
       int size = 0;
       if (argtypeCase_ == ArgtypeOneofCase.Setup) {
@@ -1917,6 +2083,7 @@
       return size;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void MergeFrom(ServerArgs other) {
       if (other == null) {
         return;
@@ -1932,6 +2099,7 @@
 
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void MergeFrom(pb::CodedInputStream input) {
       uint tag;
       while ((tag = input.ReadTag()) != 0) {
@@ -1963,31 +2131,36 @@
 
   }
 
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
   public sealed partial class ServerStatus : pb::IMessage<ServerStatus> {
     private static readonly pb::MessageParser<ServerStatus> _parser = new pb::MessageParser<ServerStatus>(() => new ServerStatus());
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public static pb::MessageParser<ServerStatus> Parser { get { return _parser; } }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public static pbr::MessageDescriptor Descriptor {
       get { return global::Grpc.Testing.ControlReflection.Descriptor.MessageTypes[10]; }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     pbr::MessageDescriptor pb::IMessage.Descriptor {
       get { return Descriptor; }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public ServerStatus() {
       OnConstruction();
     }
 
     partial void OnConstruction();
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public ServerStatus(ServerStatus other) : this() {
       Stats = other.stats_ != null ? other.Stats.Clone() : null;
       port_ = other.port_;
       cores_ = other.cores_;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public ServerStatus Clone() {
       return new ServerStatus(this);
     }
@@ -1995,6 +2168,7 @@
     /// <summary>Field number for the "stats" field.</summary>
     public const int StatsFieldNumber = 1;
     private global::Grpc.Testing.ServerStats stats_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public global::Grpc.Testing.ServerStats Stats {
       get { return stats_; }
       set {
@@ -2008,6 +2182,7 @@
     /// <summary>
     ///  the port bound by the server
     /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public int Port {
       get { return port_; }
       set {
@@ -2021,6 +2196,7 @@
     /// <summary>
     ///  Number of cores available to the server
     /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public int Cores {
       get { return cores_; }
       set {
@@ -2028,10 +2204,12 @@
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override bool Equals(object other) {
       return Equals(other as ServerStatus);
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public bool Equals(ServerStatus other) {
       if (ReferenceEquals(other, null)) {
         return false;
@@ -2045,6 +2223,7 @@
       return true;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override int GetHashCode() {
       int hash = 1;
       if (stats_ != null) hash ^= Stats.GetHashCode();
@@ -2053,10 +2232,12 @@
       return hash;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override string ToString() {
       return pb::JsonFormatter.ToDiagnosticString(this);
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void WriteTo(pb::CodedOutputStream output) {
       if (stats_ != null) {
         output.WriteRawTag(10);
@@ -2072,6 +2253,7 @@
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public int CalculateSize() {
       int size = 0;
       if (stats_ != null) {
@@ -2086,6 +2268,7 @@
       return size;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void MergeFrom(ServerStatus other) {
       if (other == null) {
         return;
@@ -2104,6 +2287,7 @@
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void MergeFrom(pb::CodedInputStream input) {
       uint tag;
       while ((tag = input.ReadTag()) != 0) {
@@ -2132,36 +2316,43 @@
 
   }
 
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
   public sealed partial class CoreRequest : pb::IMessage<CoreRequest> {
     private static readonly pb::MessageParser<CoreRequest> _parser = new pb::MessageParser<CoreRequest>(() => new CoreRequest());
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public static pb::MessageParser<CoreRequest> Parser { get { return _parser; } }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public static pbr::MessageDescriptor Descriptor {
       get { return global::Grpc.Testing.ControlReflection.Descriptor.MessageTypes[11]; }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     pbr::MessageDescriptor pb::IMessage.Descriptor {
       get { return Descriptor; }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public CoreRequest() {
       OnConstruction();
     }
 
     partial void OnConstruction();
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public CoreRequest(CoreRequest other) : this() {
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public CoreRequest Clone() {
       return new CoreRequest(this);
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override bool Equals(object other) {
       return Equals(other as CoreRequest);
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public bool Equals(CoreRequest other) {
       if (ReferenceEquals(other, null)) {
         return false;
@@ -2172,29 +2363,35 @@
       return true;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override int GetHashCode() {
       int hash = 1;
       return hash;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override string ToString() {
       return pb::JsonFormatter.ToDiagnosticString(this);
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void WriteTo(pb::CodedOutputStream output) {
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public int CalculateSize() {
       int size = 0;
       return size;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void MergeFrom(CoreRequest other) {
       if (other == null) {
         return;
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void MergeFrom(pb::CodedInputStream input) {
       uint tag;
       while ((tag = input.ReadTag()) != 0) {
@@ -2208,29 +2405,34 @@
 
   }
 
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
   public sealed partial class CoreResponse : pb::IMessage<CoreResponse> {
     private static readonly pb::MessageParser<CoreResponse> _parser = new pb::MessageParser<CoreResponse>(() => new CoreResponse());
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public static pb::MessageParser<CoreResponse> Parser { get { return _parser; } }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public static pbr::MessageDescriptor Descriptor {
       get { return global::Grpc.Testing.ControlReflection.Descriptor.MessageTypes[12]; }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     pbr::MessageDescriptor pb::IMessage.Descriptor {
       get { return Descriptor; }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public CoreResponse() {
       OnConstruction();
     }
 
     partial void OnConstruction();
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public CoreResponse(CoreResponse other) : this() {
       cores_ = other.cores_;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public CoreResponse Clone() {
       return new CoreResponse(this);
     }
@@ -2241,6 +2443,7 @@
     /// <summary>
     ///  Number of cores available on the server
     /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public int Cores {
       get { return cores_; }
       set {
@@ -2248,10 +2451,12 @@
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override bool Equals(object other) {
       return Equals(other as CoreResponse);
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public bool Equals(CoreResponse other) {
       if (ReferenceEquals(other, null)) {
         return false;
@@ -2263,16 +2468,19 @@
       return true;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override int GetHashCode() {
       int hash = 1;
       if (Cores != 0) hash ^= Cores.GetHashCode();
       return hash;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override string ToString() {
       return pb::JsonFormatter.ToDiagnosticString(this);
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void WriteTo(pb::CodedOutputStream output) {
       if (Cores != 0) {
         output.WriteRawTag(8);
@@ -2280,6 +2488,7 @@
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public int CalculateSize() {
       int size = 0;
       if (Cores != 0) {
@@ -2288,6 +2497,7 @@
       return size;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void MergeFrom(CoreResponse other) {
       if (other == null) {
         return;
@@ -2297,6 +2507,7 @@
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void MergeFrom(pb::CodedInputStream input) {
       uint tag;
       while ((tag = input.ReadTag()) != 0) {
@@ -2314,36 +2525,43 @@
 
   }
 
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
   public sealed partial class Void : pb::IMessage<Void> {
     private static readonly pb::MessageParser<Void> _parser = new pb::MessageParser<Void>(() => new Void());
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public static pb::MessageParser<Void> Parser { get { return _parser; } }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public static pbr::MessageDescriptor Descriptor {
       get { return global::Grpc.Testing.ControlReflection.Descriptor.MessageTypes[13]; }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     pbr::MessageDescriptor pb::IMessage.Descriptor {
       get { return Descriptor; }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public Void() {
       OnConstruction();
     }
 
     partial void OnConstruction();
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public Void(Void other) : this() {
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public Void Clone() {
       return new Void(this);
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override bool Equals(object other) {
       return Equals(other as Void);
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public bool Equals(Void other) {
       if (ReferenceEquals(other, null)) {
         return false;
@@ -2354,29 +2572,35 @@
       return true;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override int GetHashCode() {
       int hash = 1;
       return hash;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override string ToString() {
       return pb::JsonFormatter.ToDiagnosticString(this);
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void WriteTo(pb::CodedOutputStream output) {
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public int CalculateSize() {
       int size = 0;
       return size;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void MergeFrom(Void other) {
       if (other == null) {
         return;
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void MergeFrom(pb::CodedInputStream input) {
       uint tag;
       while ((tag = input.ReadTag()) != 0) {
@@ -2393,25 +2617,29 @@
   /// <summary>
   ///  A single performance scenario: input to qps_json_driver
   /// </summary>
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
   public sealed partial class Scenario : pb::IMessage<Scenario> {
     private static readonly pb::MessageParser<Scenario> _parser = new pb::MessageParser<Scenario>(() => new Scenario());
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public static pb::MessageParser<Scenario> Parser { get { return _parser; } }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public static pbr::MessageDescriptor Descriptor {
       get { return global::Grpc.Testing.ControlReflection.Descriptor.MessageTypes[14]; }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     pbr::MessageDescriptor pb::IMessage.Descriptor {
       get { return Descriptor; }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public Scenario() {
       OnConstruction();
     }
 
     partial void OnConstruction();
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public Scenario(Scenario other) : this() {
       name_ = other.name_;
       ClientConfig = other.clientConfig_ != null ? other.ClientConfig.Clone() : null;
@@ -2423,6 +2651,7 @@
       spawnLocalWorkerCount_ = other.spawnLocalWorkerCount_;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public Scenario Clone() {
       return new Scenario(this);
     }
@@ -2433,6 +2662,7 @@
     /// <summary>
     ///  Human readable name for this scenario
     /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public string Name {
       get { return name_; }
       set {
@@ -2446,6 +2676,7 @@
     /// <summary>
     ///  Client configuration
     /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public global::Grpc.Testing.ClientConfig ClientConfig {
       get { return clientConfig_; }
       set {
@@ -2459,6 +2690,7 @@
     /// <summary>
     ///  Number of clients to start for the test
     /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public int NumClients {
       get { return numClients_; }
       set {
@@ -2472,6 +2704,7 @@
     /// <summary>
     ///  Server configuration
     /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public global::Grpc.Testing.ServerConfig ServerConfig {
       get { return serverConfig_; }
       set {
@@ -2485,6 +2718,7 @@
     /// <summary>
     ///  Number of servers to start for the test
     /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public int NumServers {
       get { return numServers_; }
       set {
@@ -2498,6 +2732,7 @@
     /// <summary>
     ///  Warmup period, in seconds
     /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public int WarmupSeconds {
       get { return warmupSeconds_; }
       set {
@@ -2511,6 +2746,7 @@
     /// <summary>
     ///  Benchmark time, in seconds
     /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public int BenchmarkSeconds {
       get { return benchmarkSeconds_; }
       set {
@@ -2524,6 +2760,7 @@
     /// <summary>
     ///  Number of workers to spawn locally (usually zero)
     /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public int SpawnLocalWorkerCount {
       get { return spawnLocalWorkerCount_; }
       set {
@@ -2531,10 +2768,12 @@
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override bool Equals(object other) {
       return Equals(other as Scenario);
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public bool Equals(Scenario other) {
       if (ReferenceEquals(other, null)) {
         return false;
@@ -2553,6 +2792,7 @@
       return true;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override int GetHashCode() {
       int hash = 1;
       if (Name.Length != 0) hash ^= Name.GetHashCode();
@@ -2566,10 +2806,12 @@
       return hash;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override string ToString() {
       return pb::JsonFormatter.ToDiagnosticString(this);
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void WriteTo(pb::CodedOutputStream output) {
       if (Name.Length != 0) {
         output.WriteRawTag(10);
@@ -2605,6 +2847,7 @@
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public int CalculateSize() {
       int size = 0;
       if (Name.Length != 0) {
@@ -2634,6 +2877,7 @@
       return size;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void MergeFrom(Scenario other) {
       if (other == null) {
         return;
@@ -2670,6 +2914,7 @@
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void MergeFrom(pb::CodedInputStream input) {
       uint tag;
       while ((tag = input.ReadTag()) != 0) {
@@ -2724,29 +2969,34 @@
   /// <summary>
   ///  A set of scenarios to be run with qps_json_driver
   /// </summary>
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
   public sealed partial class Scenarios : pb::IMessage<Scenarios> {
     private static readonly pb::MessageParser<Scenarios> _parser = new pb::MessageParser<Scenarios>(() => new Scenarios());
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public static pb::MessageParser<Scenarios> Parser { get { return _parser; } }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public static pbr::MessageDescriptor Descriptor {
       get { return global::Grpc.Testing.ControlReflection.Descriptor.MessageTypes[15]; }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     pbr::MessageDescriptor pb::IMessage.Descriptor {
       get { return Descriptor; }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public Scenarios() {
       OnConstruction();
     }
 
     partial void OnConstruction();
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public Scenarios(Scenarios other) : this() {
       scenarios_ = other.scenarios_.Clone();
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public Scenarios Clone() {
       return new Scenarios(this);
     }
@@ -2756,14 +3006,17 @@
     private static readonly pb::FieldCodec<global::Grpc.Testing.Scenario> _repeated_scenarios_codec
         = pb::FieldCodec.ForMessage(10, global::Grpc.Testing.Scenario.Parser);
     private readonly pbc::RepeatedField<global::Grpc.Testing.Scenario> scenarios_ = new pbc::RepeatedField<global::Grpc.Testing.Scenario>();
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public pbc::RepeatedField<global::Grpc.Testing.Scenario> Scenarios_ {
       get { return scenarios_; }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override bool Equals(object other) {
       return Equals(other as Scenarios);
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public bool Equals(Scenarios other) {
       if (ReferenceEquals(other, null)) {
         return false;
@@ -2775,26 +3028,31 @@
       return true;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override int GetHashCode() {
       int hash = 1;
       hash ^= scenarios_.GetHashCode();
       return hash;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override string ToString() {
       return pb::JsonFormatter.ToDiagnosticString(this);
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void WriteTo(pb::CodedOutputStream output) {
       scenarios_.WriteTo(output, _repeated_scenarios_codec);
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public int CalculateSize() {
       int size = 0;
       size += scenarios_.CalculateSize(_repeated_scenarios_codec);
       return size;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void MergeFrom(Scenarios other) {
       if (other == null) {
         return;
@@ -2802,6 +3060,7 @@
       scenarios_.Add(other.scenarios_);
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void MergeFrom(pb::CodedInputStream input) {
       uint tag;
       while ((tag = input.ReadTag()) != 0) {
@@ -2823,25 +3082,29 @@
   ///  Basic summary that can be computed from ClientStats and ServerStats
   ///  once the scenario has finished.
   /// </summary>
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
   public sealed partial class ScenarioResultSummary : pb::IMessage<ScenarioResultSummary> {
     private static readonly pb::MessageParser<ScenarioResultSummary> _parser = new pb::MessageParser<ScenarioResultSummary>(() => new ScenarioResultSummary());
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public static pb::MessageParser<ScenarioResultSummary> Parser { get { return _parser; } }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public static pbr::MessageDescriptor Descriptor {
       get { return global::Grpc.Testing.ControlReflection.Descriptor.MessageTypes[16]; }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     pbr::MessageDescriptor pb::IMessage.Descriptor {
       get { return Descriptor; }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public ScenarioResultSummary() {
       OnConstruction();
     }
 
     partial void OnConstruction();
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public ScenarioResultSummary(ScenarioResultSummary other) : this() {
       qps_ = other.qps_;
       qpsPerServerCore_ = other.qpsPerServerCore_;
@@ -2856,6 +3119,7 @@
       latency999_ = other.latency999_;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public ScenarioResultSummary Clone() {
       return new ScenarioResultSummary(this);
     }
@@ -2866,6 +3130,7 @@
     /// <summary>
     ///  Total number of operations per second over all clients.
     /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public double Qps {
       get { return qps_; }
       set {
@@ -2879,6 +3144,7 @@
     /// <summary>
     ///  QPS per one server core.
     /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public double QpsPerServerCore {
       get { return qpsPerServerCore_; }
       set {
@@ -2892,6 +3158,7 @@
     /// <summary>
     ///  server load based on system_time (0.85 => 85%)
     /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public double ServerSystemTime {
       get { return serverSystemTime_; }
       set {
@@ -2905,6 +3172,7 @@
     /// <summary>
     ///  server load based on user_time (0.85 => 85%)
     /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public double ServerUserTime {
       get { return serverUserTime_; }
       set {
@@ -2918,6 +3186,7 @@
     /// <summary>
     ///  client load based on system_time (0.85 => 85%)
     /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public double ClientSystemTime {
       get { return clientSystemTime_; }
       set {
@@ -2931,6 +3200,7 @@
     /// <summary>
     ///  client load based on user_time (0.85 => 85%)
     /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public double ClientUserTime {
       get { return clientUserTime_; }
       set {
@@ -2944,6 +3214,7 @@
     /// <summary>
     ///  X% latency percentiles (in nanoseconds)
     /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public double Latency50 {
       get { return latency50_; }
       set {
@@ -2954,6 +3225,7 @@
     /// <summary>Field number for the "latency_90" field.</summary>
     public const int Latency90FieldNumber = 8;
     private double latency90_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public double Latency90 {
       get { return latency90_; }
       set {
@@ -2964,6 +3236,7 @@
     /// <summary>Field number for the "latency_95" field.</summary>
     public const int Latency95FieldNumber = 9;
     private double latency95_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public double Latency95 {
       get { return latency95_; }
       set {
@@ -2974,6 +3247,7 @@
     /// <summary>Field number for the "latency_99" field.</summary>
     public const int Latency99FieldNumber = 10;
     private double latency99_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public double Latency99 {
       get { return latency99_; }
       set {
@@ -2984,6 +3258,7 @@
     /// <summary>Field number for the "latency_999" field.</summary>
     public const int Latency999FieldNumber = 11;
     private double latency999_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public double Latency999 {
       get { return latency999_; }
       set {
@@ -2991,10 +3266,12 @@
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override bool Equals(object other) {
       return Equals(other as ScenarioResultSummary);
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public bool Equals(ScenarioResultSummary other) {
       if (ReferenceEquals(other, null)) {
         return false;
@@ -3016,6 +3293,7 @@
       return true;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override int GetHashCode() {
       int hash = 1;
       if (Qps != 0D) hash ^= Qps.GetHashCode();
@@ -3032,10 +3310,12 @@
       return hash;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override string ToString() {
       return pb::JsonFormatter.ToDiagnosticString(this);
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void WriteTo(pb::CodedOutputStream output) {
       if (Qps != 0D) {
         output.WriteRawTag(9);
@@ -3083,6 +3363,7 @@
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public int CalculateSize() {
       int size = 0;
       if (Qps != 0D) {
@@ -3121,6 +3402,7 @@
       return size;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void MergeFrom(ScenarioResultSummary other) {
       if (other == null) {
         return;
@@ -3160,6 +3442,7 @@
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void MergeFrom(pb::CodedInputStream input) {
       uint tag;
       while ((tag = input.ReadTag()) != 0) {
@@ -3220,25 +3503,29 @@
   /// <summary>
   ///  Results of a single benchmark scenario.
   /// </summary>
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
   public sealed partial class ScenarioResult : pb::IMessage<ScenarioResult> {
     private static readonly pb::MessageParser<ScenarioResult> _parser = new pb::MessageParser<ScenarioResult>(() => new ScenarioResult());
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public static pb::MessageParser<ScenarioResult> Parser { get { return _parser; } }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public static pbr::MessageDescriptor Descriptor {
       get { return global::Grpc.Testing.ControlReflection.Descriptor.MessageTypes[17]; }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     pbr::MessageDescriptor pb::IMessage.Descriptor {
       get { return Descriptor; }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public ScenarioResult() {
       OnConstruction();
     }
 
     partial void OnConstruction();
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public ScenarioResult(ScenarioResult other) : this() {
       Scenario = other.scenario_ != null ? other.Scenario.Clone() : null;
       Latencies = other.latencies_ != null ? other.Latencies.Clone() : null;
@@ -3246,8 +3533,11 @@
       serverStats_ = other.serverStats_.Clone();
       serverCores_ = other.serverCores_.Clone();
       Summary = other.summary_ != null ? other.Summary.Clone() : null;
+      clientSuccess_ = other.clientSuccess_.Clone();
+      serverSuccess_ = other.serverSuccess_.Clone();
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public ScenarioResult Clone() {
       return new ScenarioResult(this);
     }
@@ -3258,6 +3548,7 @@
     /// <summary>
     ///  Inputs used to run the scenario.
     /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public global::Grpc.Testing.Scenario Scenario {
       get { return scenario_; }
       set {
@@ -3271,6 +3562,7 @@
     /// <summary>
     ///  Histograms from all clients merged into one histogram.
     /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public global::Grpc.Testing.HistogramData Latencies {
       get { return latencies_; }
       set {
@@ -3286,6 +3578,7 @@
     /// <summary>
     ///  Client stats for each client
     /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public pbc::RepeatedField<global::Grpc.Testing.ClientStats> ClientStats {
       get { return clientStats_; }
     }
@@ -3298,6 +3591,7 @@
     /// <summary>
     ///  Server stats for each server
     /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public pbc::RepeatedField<global::Grpc.Testing.ServerStats> ServerStats {
       get { return serverStats_; }
     }
@@ -3310,6 +3604,7 @@
     /// <summary>
     ///  Number of cores available to each server
     /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public pbc::RepeatedField<int> ServerCores {
       get { return serverCores_; }
     }
@@ -3320,6 +3615,7 @@
     /// <summary>
     ///  An after-the-fact computed summary
     /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public global::Grpc.Testing.ScenarioResultSummary Summary {
       get { return summary_; }
       set {
@@ -3327,10 +3623,35 @@
       }
     }
 
+    /// <summary>Field number for the "client_success" field.</summary>
+    public const int ClientSuccessFieldNumber = 7;
+    private static readonly pb::FieldCodec<bool> _repeated_clientSuccess_codec
+        = pb::FieldCodec.ForBool(58);
+    private readonly pbc::RepeatedField<bool> clientSuccess_ = new pbc::RepeatedField<bool>();
+    /// <summary>
+    ///  Information on success or failure of each worker
+    /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public pbc::RepeatedField<bool> ClientSuccess {
+      get { return clientSuccess_; }
+    }
+
+    /// <summary>Field number for the "server_success" field.</summary>
+    public const int ServerSuccessFieldNumber = 8;
+    private static readonly pb::FieldCodec<bool> _repeated_serverSuccess_codec
+        = pb::FieldCodec.ForBool(66);
+    private readonly pbc::RepeatedField<bool> serverSuccess_ = new pbc::RepeatedField<bool>();
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public pbc::RepeatedField<bool> ServerSuccess {
+      get { return serverSuccess_; }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override bool Equals(object other) {
       return Equals(other as ScenarioResult);
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public bool Equals(ScenarioResult other) {
       if (ReferenceEquals(other, null)) {
         return false;
@@ -3344,9 +3665,12 @@
       if(!serverStats_.Equals(other.serverStats_)) return false;
       if(!serverCores_.Equals(other.serverCores_)) return false;
       if (!object.Equals(Summary, other.Summary)) return false;
+      if(!clientSuccess_.Equals(other.clientSuccess_)) return false;
+      if(!serverSuccess_.Equals(other.serverSuccess_)) return false;
       return true;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override int GetHashCode() {
       int hash = 1;
       if (scenario_ != null) hash ^= Scenario.GetHashCode();
@@ -3355,13 +3679,17 @@
       hash ^= serverStats_.GetHashCode();
       hash ^= serverCores_.GetHashCode();
       if (summary_ != null) hash ^= Summary.GetHashCode();
+      hash ^= clientSuccess_.GetHashCode();
+      hash ^= serverSuccess_.GetHashCode();
       return hash;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override string ToString() {
       return pb::JsonFormatter.ToDiagnosticString(this);
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void WriteTo(pb::CodedOutputStream output) {
       if (scenario_ != null) {
         output.WriteRawTag(10);
@@ -3378,8 +3706,11 @@
         output.WriteRawTag(50);
         output.WriteMessage(Summary);
       }
+      clientSuccess_.WriteTo(output, _repeated_clientSuccess_codec);
+      serverSuccess_.WriteTo(output, _repeated_serverSuccess_codec);
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public int CalculateSize() {
       int size = 0;
       if (scenario_ != null) {
@@ -3394,9 +3725,12 @@
       if (summary_ != null) {
         size += 1 + pb::CodedOutputStream.ComputeMessageSize(Summary);
       }
+      size += clientSuccess_.CalculateSize(_repeated_clientSuccess_codec);
+      size += serverSuccess_.CalculateSize(_repeated_serverSuccess_codec);
       return size;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void MergeFrom(ScenarioResult other) {
       if (other == null) {
         return;
@@ -3422,8 +3756,11 @@
         }
         Summary.MergeFrom(other.Summary);
       }
+      clientSuccess_.Add(other.clientSuccess_);
+      serverSuccess_.Add(other.serverSuccess_);
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void MergeFrom(pb::CodedInputStream input) {
       uint tag;
       while ((tag = input.ReadTag()) != 0) {
@@ -3465,6 +3802,16 @@
             input.ReadMessage(summary_);
             break;
           }
+          case 58:
+          case 56: {
+            clientSuccess_.AddEntriesFrom(input, _repeated_clientSuccess_codec);
+            break;
+          }
+          case 66:
+          case 64: {
+            serverSuccess_.AddEntriesFrom(input, _repeated_serverSuccess_codec);
+            break;
+          }
         }
       }
     }
diff --git a/src/csharp/Grpc.IntegrationTesting/Empty.cs b/src/csharp/Grpc.IntegrationTesting/Empty.cs
index cf1c23f..3017e66 100644
--- a/src/csharp/Grpc.IntegrationTesting/Empty.cs
+++ b/src/csharp/Grpc.IntegrationTesting/Empty.cs
@@ -10,7 +10,6 @@
 namespace Grpc.Testing {
 
   /// <summary>Holder for reflection information generated from src/proto/grpc/testing/empty.proto</summary>
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
   public static partial class EmptyReflection {
 
     #region Descriptor
@@ -44,36 +43,43 @@
   ///      rpc Bar (grpc.testing.Empty) returns (grpc.testing.Empty) { };
   ///    };
   /// </summary>
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
   public sealed partial class Empty : pb::IMessage<Empty> {
     private static readonly pb::MessageParser<Empty> _parser = new pb::MessageParser<Empty>(() => new Empty());
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public static pb::MessageParser<Empty> Parser { get { return _parser; } }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public static pbr::MessageDescriptor Descriptor {
       get { return global::Grpc.Testing.EmptyReflection.Descriptor.MessageTypes[0]; }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     pbr::MessageDescriptor pb::IMessage.Descriptor {
       get { return Descriptor; }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public Empty() {
       OnConstruction();
     }
 
     partial void OnConstruction();
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public Empty(Empty other) : this() {
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public Empty Clone() {
       return new Empty(this);
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override bool Equals(object other) {
       return Equals(other as Empty);
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public bool Equals(Empty other) {
       if (ReferenceEquals(other, null)) {
         return false;
@@ -84,29 +90,35 @@
       return true;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override int GetHashCode() {
       int hash = 1;
       return hash;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override string ToString() {
       return pb::JsonFormatter.ToDiagnosticString(this);
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void WriteTo(pb::CodedOutputStream output) {
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public int CalculateSize() {
       int size = 0;
       return size;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void MergeFrom(Empty other) {
       if (other == null) {
         return;
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void MergeFrom(pb::CodedInputStream input) {
       uint tag;
       while ((tag = input.ReadTag()) != 0) {
diff --git a/src/csharp/Grpc.IntegrationTesting/InterarrivalTimers.cs b/src/csharp/Grpc.IntegrationTesting/InterarrivalTimers.cs
index 6492d34..8bea083 100644
--- a/src/csharp/Grpc.IntegrationTesting/InterarrivalTimers.cs
+++ b/src/csharp/Grpc.IntegrationTesting/InterarrivalTimers.cs
@@ -69,7 +69,7 @@
 
         public Task WaitForNextAsync()
         {
-            return Task.FromResult<object>(null);
+            return TaskUtils.CompletedTask;
         }
     }
 
diff --git a/src/csharp/Grpc.IntegrationTesting/InteropClient.cs b/src/csharp/Grpc.IntegrationTesting/InteropClient.cs
index 79fd18b..5ba83b1 100644
--- a/src/csharp/Grpc.IntegrationTesting/InteropClient.cs
+++ b/src/csharp/Grpc.IntegrationTesting/InteropClient.cs
@@ -195,8 +195,11 @@
                 case "status_code_and_message":
                     await RunStatusCodeAndMessageAsync(client);
                     break;
+                case "unimplemented_service":
+                    RunUnimplementedService(new UnimplementedService.UnimplementedServiceClient(channel));
+                    break;
                 case "unimplemented_method":
-                    RunUnimplementedMethod(new UnimplementedService.UnimplementedServiceClient(channel));
+                    RunUnimplementedMethod(client);
                     break;
                 case "client_compressed_unary":
                     RunClientCompressedUnary(client);
@@ -520,12 +523,12 @@
                 };
 
                 var call = client.FullDuplexCall(headers: CreateTestMetadata());
-                var responseHeaders = await call.ResponseHeadersAsync;
 
                 await call.RequestStream.WriteAsync(request);
                 await call.RequestStream.CompleteAsync();
                 await call.ResponseStream.ToListAsync();
 
+                var responseHeaders = await call.ResponseHeadersAsync;
                 var responseTrailers = call.GetTrailers();
 
                 Assert.AreEqual("test_initial_metadata_value", responseHeaders.First((entry) => entry.Key == "x-grpc-test-echo-initial").Value);
@@ -577,13 +580,21 @@
             Console.WriteLine("Passed!");
         }
 
-        public static void RunUnimplementedMethod(UnimplementedService.UnimplementedServiceClient client)
+        public static void RunUnimplementedService(UnimplementedService.UnimplementedServiceClient client)
+        {
+            Console.WriteLine("running unimplemented_service");
+            var e = Assert.Throws<RpcException>(() => client.UnimplementedCall(new Empty()));
+
+            Assert.AreEqual(StatusCode.Unimplemented, e.Status.StatusCode);
+            Console.WriteLine("Passed!");
+        }
+
+        public static void RunUnimplementedMethod(TestService.TestServiceClient client)
         {
             Console.WriteLine("running unimplemented_method");
             var e = Assert.Throws<RpcException>(() => client.UnimplementedCall(new Empty()));
 
             Assert.AreEqual(StatusCode.Unimplemented, e.Status.StatusCode);
-            Assert.AreEqual("", e.Status.Detail);
             Console.WriteLine("Passed!");
         }
 
diff --git a/src/csharp/Grpc.IntegrationTesting/InteropClientServerTest.cs b/src/csharp/Grpc.IntegrationTesting/InteropClientServerTest.cs
index f907f63..4960a53 100644
--- a/src/csharp/Grpc.IntegrationTesting/InteropClientServerTest.cs
+++ b/src/csharp/Grpc.IntegrationTesting/InteropClientServerTest.cs
@@ -146,9 +146,15 @@
         }
 
         [Test]
+        public void UnimplementedService()
+        {
+            InteropClient.RunUnimplementedService(new UnimplementedService.UnimplementedServiceClient(channel));
+        }
+
+        [Test]
         public void UnimplementedMethod()
         {
-            InteropClient.RunUnimplementedMethod(new UnimplementedService.UnimplementedServiceClient(channel));
+            InteropClient.RunUnimplementedMethod(client);
         }
     }
 }
diff --git a/src/csharp/Grpc.IntegrationTesting/Messages.cs b/src/csharp/Grpc.IntegrationTesting/Messages.cs
index 1240db1..369fe73 100644
--- a/src/csharp/Grpc.IntegrationTesting/Messages.cs
+++ b/src/csharp/Grpc.IntegrationTesting/Messages.cs
@@ -10,7 +10,6 @@
 namespace Grpc.Testing {
 
   /// <summary>Holder for reflection information generated from src/proto/grpc/testing/messages.proto</summary>
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
   public static partial class MessagesReflection {
 
     #region Descriptor
@@ -94,29 +93,34 @@
   ///  https://github.com/grpc/grpc/issues/6980 has been fixed.
   ///  import "google/protobuf/wrappers.proto";
   /// </summary>
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
   public sealed partial class BoolValue : pb::IMessage<BoolValue> {
     private static readonly pb::MessageParser<BoolValue> _parser = new pb::MessageParser<BoolValue>(() => new BoolValue());
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public static pb::MessageParser<BoolValue> Parser { get { return _parser; } }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public static pbr::MessageDescriptor Descriptor {
       get { return global::Grpc.Testing.MessagesReflection.Descriptor.MessageTypes[0]; }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     pbr::MessageDescriptor pb::IMessage.Descriptor {
       get { return Descriptor; }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public BoolValue() {
       OnConstruction();
     }
 
     partial void OnConstruction();
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public BoolValue(BoolValue other) : this() {
       value_ = other.value_;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public BoolValue Clone() {
       return new BoolValue(this);
     }
@@ -127,6 +131,7 @@
     /// <summary>
     ///  The bool value.
     /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public bool Value {
       get { return value_; }
       set {
@@ -134,10 +139,12 @@
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override bool Equals(object other) {
       return Equals(other as BoolValue);
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public bool Equals(BoolValue other) {
       if (ReferenceEquals(other, null)) {
         return false;
@@ -149,16 +156,19 @@
       return true;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override int GetHashCode() {
       int hash = 1;
       if (Value != false) hash ^= Value.GetHashCode();
       return hash;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override string ToString() {
       return pb::JsonFormatter.ToDiagnosticString(this);
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void WriteTo(pb::CodedOutputStream output) {
       if (Value != false) {
         output.WriteRawTag(8);
@@ -166,6 +176,7 @@
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public int CalculateSize() {
       int size = 0;
       if (Value != false) {
@@ -174,6 +185,7 @@
       return size;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void MergeFrom(BoolValue other) {
       if (other == null) {
         return;
@@ -183,6 +195,7 @@
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void MergeFrom(pb::CodedInputStream input) {
       uint tag;
       while ((tag = input.ReadTag()) != 0) {
@@ -203,30 +216,35 @@
   /// <summary>
   ///  A block of data, to simply increase gRPC message size.
   /// </summary>
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
   public sealed partial class Payload : pb::IMessage<Payload> {
     private static readonly pb::MessageParser<Payload> _parser = new pb::MessageParser<Payload>(() => new Payload());
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public static pb::MessageParser<Payload> Parser { get { return _parser; } }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public static pbr::MessageDescriptor Descriptor {
       get { return global::Grpc.Testing.MessagesReflection.Descriptor.MessageTypes[1]; }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     pbr::MessageDescriptor pb::IMessage.Descriptor {
       get { return Descriptor; }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public Payload() {
       OnConstruction();
     }
 
     partial void OnConstruction();
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public Payload(Payload other) : this() {
       type_ = other.type_;
       body_ = other.body_;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public Payload Clone() {
       return new Payload(this);
     }
@@ -238,6 +256,7 @@
     ///  DEPRECATED, don't use. To be removed shortly.
     ///  The type of data in body.
     /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public global::Grpc.Testing.PayloadType Type {
       get { return type_; }
       set {
@@ -251,6 +270,7 @@
     /// <summary>
     ///  Primary contents of payload.
     /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public pb::ByteString Body {
       get { return body_; }
       set {
@@ -258,10 +278,12 @@
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override bool Equals(object other) {
       return Equals(other as Payload);
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public bool Equals(Payload other) {
       if (ReferenceEquals(other, null)) {
         return false;
@@ -274,6 +296,7 @@
       return true;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override int GetHashCode() {
       int hash = 1;
       if (Type != 0) hash ^= Type.GetHashCode();
@@ -281,10 +304,12 @@
       return hash;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override string ToString() {
       return pb::JsonFormatter.ToDiagnosticString(this);
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void WriteTo(pb::CodedOutputStream output) {
       if (Type != 0) {
         output.WriteRawTag(8);
@@ -296,6 +321,7 @@
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public int CalculateSize() {
       int size = 0;
       if (Type != 0) {
@@ -307,6 +333,7 @@
       return size;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void MergeFrom(Payload other) {
       if (other == null) {
         return;
@@ -319,6 +346,7 @@
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void MergeFrom(pb::CodedInputStream input) {
       uint tag;
       while ((tag = input.ReadTag()) != 0) {
@@ -344,30 +372,35 @@
   ///  A protobuf representation for grpc status. This is used by test
   ///  clients to specify a status that the server should attempt to return.
   /// </summary>
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
   public sealed partial class EchoStatus : pb::IMessage<EchoStatus> {
     private static readonly pb::MessageParser<EchoStatus> _parser = new pb::MessageParser<EchoStatus>(() => new EchoStatus());
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public static pb::MessageParser<EchoStatus> Parser { get { return _parser; } }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public static pbr::MessageDescriptor Descriptor {
       get { return global::Grpc.Testing.MessagesReflection.Descriptor.MessageTypes[2]; }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     pbr::MessageDescriptor pb::IMessage.Descriptor {
       get { return Descriptor; }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public EchoStatus() {
       OnConstruction();
     }
 
     partial void OnConstruction();
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public EchoStatus(EchoStatus other) : this() {
       code_ = other.code_;
       message_ = other.message_;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public EchoStatus Clone() {
       return new EchoStatus(this);
     }
@@ -375,6 +408,7 @@
     /// <summary>Field number for the "code" field.</summary>
     public const int CodeFieldNumber = 1;
     private int code_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public int Code {
       get { return code_; }
       set {
@@ -385,6 +419,7 @@
     /// <summary>Field number for the "message" field.</summary>
     public const int MessageFieldNumber = 2;
     private string message_ = "";
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public string Message {
       get { return message_; }
       set {
@@ -392,10 +427,12 @@
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override bool Equals(object other) {
       return Equals(other as EchoStatus);
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public bool Equals(EchoStatus other) {
       if (ReferenceEquals(other, null)) {
         return false;
@@ -408,6 +445,7 @@
       return true;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override int GetHashCode() {
       int hash = 1;
       if (Code != 0) hash ^= Code.GetHashCode();
@@ -415,10 +453,12 @@
       return hash;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override string ToString() {
       return pb::JsonFormatter.ToDiagnosticString(this);
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void WriteTo(pb::CodedOutputStream output) {
       if (Code != 0) {
         output.WriteRawTag(8);
@@ -430,6 +470,7 @@
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public int CalculateSize() {
       int size = 0;
       if (Code != 0) {
@@ -441,6 +482,7 @@
       return size;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void MergeFrom(EchoStatus other) {
       if (other == null) {
         return;
@@ -453,6 +495,7 @@
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void MergeFrom(pb::CodedInputStream input) {
       uint tag;
       while ((tag = input.ReadTag()) != 0) {
@@ -477,25 +520,29 @@
   /// <summary>
   ///  Unary request.
   /// </summary>
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
   public sealed partial class SimpleRequest : pb::IMessage<SimpleRequest> {
     private static readonly pb::MessageParser<SimpleRequest> _parser = new pb::MessageParser<SimpleRequest>(() => new SimpleRequest());
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public static pb::MessageParser<SimpleRequest> Parser { get { return _parser; } }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public static pbr::MessageDescriptor Descriptor {
       get { return global::Grpc.Testing.MessagesReflection.Descriptor.MessageTypes[3]; }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     pbr::MessageDescriptor pb::IMessage.Descriptor {
       get { return Descriptor; }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public SimpleRequest() {
       OnConstruction();
     }
 
     partial void OnConstruction();
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public SimpleRequest(SimpleRequest other) : this() {
       responseType_ = other.responseType_;
       responseSize_ = other.responseSize_;
@@ -507,6 +554,7 @@
       ExpectCompressed = other.expectCompressed_ != null ? other.ExpectCompressed.Clone() : null;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public SimpleRequest Clone() {
       return new SimpleRequest(this);
     }
@@ -519,6 +567,7 @@
     ///  Desired payload type in the response from the server.
     ///  If response_type is RANDOM, server randomly chooses one from other formats.
     /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public global::Grpc.Testing.PayloadType ResponseType {
       get { return responseType_; }
       set {
@@ -532,6 +581,7 @@
     /// <summary>
     ///  Desired payload size in the response from the server.
     /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public int ResponseSize {
       get { return responseSize_; }
       set {
@@ -545,6 +595,7 @@
     /// <summary>
     ///  Optional input payload sent along with the request.
     /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public global::Grpc.Testing.Payload Payload {
       get { return payload_; }
       set {
@@ -558,6 +609,7 @@
     /// <summary>
     ///  Whether SimpleResponse should include username.
     /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public bool FillUsername {
       get { return fillUsername_; }
       set {
@@ -571,6 +623,7 @@
     /// <summary>
     ///  Whether SimpleResponse should include OAuth scope.
     /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public bool FillOauthScope {
       get { return fillOauthScope_; }
       set {
@@ -587,6 +640,7 @@
     ///  implement the full compression tests by introspecting the call to verify
     ///  the response's compression status.
     /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public global::Grpc.Testing.BoolValue ResponseCompressed {
       get { return responseCompressed_; }
       set {
@@ -600,6 +654,7 @@
     /// <summary>
     ///  Whether server should return a given status
     /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public global::Grpc.Testing.EchoStatus ResponseStatus {
       get { return responseStatus_; }
       set {
@@ -613,6 +668,7 @@
     /// <summary>
     ///  Whether the server should expect this request to be compressed.
     /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public global::Grpc.Testing.BoolValue ExpectCompressed {
       get { return expectCompressed_; }
       set {
@@ -620,10 +676,12 @@
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override bool Equals(object other) {
       return Equals(other as SimpleRequest);
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public bool Equals(SimpleRequest other) {
       if (ReferenceEquals(other, null)) {
         return false;
@@ -642,6 +700,7 @@
       return true;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override int GetHashCode() {
       int hash = 1;
       if (ResponseType != 0) hash ^= ResponseType.GetHashCode();
@@ -655,10 +714,12 @@
       return hash;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override string ToString() {
       return pb::JsonFormatter.ToDiagnosticString(this);
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void WriteTo(pb::CodedOutputStream output) {
       if (ResponseType != 0) {
         output.WriteRawTag(8);
@@ -694,6 +755,7 @@
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public int CalculateSize() {
       int size = 0;
       if (ResponseType != 0) {
@@ -723,6 +785,7 @@
       return size;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void MergeFrom(SimpleRequest other) {
       if (other == null) {
         return;
@@ -765,6 +828,7 @@
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void MergeFrom(pb::CodedInputStream input) {
       uint tag;
       while ((tag = input.ReadTag()) != 0) {
@@ -825,31 +889,36 @@
   /// <summary>
   ///  Unary response, as configured by the request.
   /// </summary>
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
   public sealed partial class SimpleResponse : pb::IMessage<SimpleResponse> {
     private static readonly pb::MessageParser<SimpleResponse> _parser = new pb::MessageParser<SimpleResponse>(() => new SimpleResponse());
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public static pb::MessageParser<SimpleResponse> Parser { get { return _parser; } }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public static pbr::MessageDescriptor Descriptor {
       get { return global::Grpc.Testing.MessagesReflection.Descriptor.MessageTypes[4]; }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     pbr::MessageDescriptor pb::IMessage.Descriptor {
       get { return Descriptor; }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public SimpleResponse() {
       OnConstruction();
     }
 
     partial void OnConstruction();
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public SimpleResponse(SimpleResponse other) : this() {
       Payload = other.payload_ != null ? other.Payload.Clone() : null;
       username_ = other.username_;
       oauthScope_ = other.oauthScope_;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public SimpleResponse Clone() {
       return new SimpleResponse(this);
     }
@@ -860,6 +929,7 @@
     /// <summary>
     ///  Payload to increase message size.
     /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public global::Grpc.Testing.Payload Payload {
       get { return payload_; }
       set {
@@ -874,6 +944,7 @@
     ///  The user the request came from, for verifying authentication was
     ///  successful when the client expected it.
     /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public string Username {
       get { return username_; }
       set {
@@ -887,6 +958,7 @@
     /// <summary>
     ///  OAuth scope.
     /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public string OauthScope {
       get { return oauthScope_; }
       set {
@@ -894,10 +966,12 @@
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override bool Equals(object other) {
       return Equals(other as SimpleResponse);
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public bool Equals(SimpleResponse other) {
       if (ReferenceEquals(other, null)) {
         return false;
@@ -911,6 +985,7 @@
       return true;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override int GetHashCode() {
       int hash = 1;
       if (payload_ != null) hash ^= Payload.GetHashCode();
@@ -919,10 +994,12 @@
       return hash;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override string ToString() {
       return pb::JsonFormatter.ToDiagnosticString(this);
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void WriteTo(pb::CodedOutputStream output) {
       if (payload_ != null) {
         output.WriteRawTag(10);
@@ -938,6 +1015,7 @@
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public int CalculateSize() {
       int size = 0;
       if (payload_ != null) {
@@ -952,6 +1030,7 @@
       return size;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void MergeFrom(SimpleResponse other) {
       if (other == null) {
         return;
@@ -970,6 +1049,7 @@
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void MergeFrom(pb::CodedInputStream input) {
       uint tag;
       while ((tag = input.ReadTag()) != 0) {
@@ -1001,30 +1081,35 @@
   /// <summary>
   ///  Client-streaming request.
   /// </summary>
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
   public sealed partial class StreamingInputCallRequest : pb::IMessage<StreamingInputCallRequest> {
     private static readonly pb::MessageParser<StreamingInputCallRequest> _parser = new pb::MessageParser<StreamingInputCallRequest>(() => new StreamingInputCallRequest());
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public static pb::MessageParser<StreamingInputCallRequest> Parser { get { return _parser; } }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public static pbr::MessageDescriptor Descriptor {
       get { return global::Grpc.Testing.MessagesReflection.Descriptor.MessageTypes[5]; }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     pbr::MessageDescriptor pb::IMessage.Descriptor {
       get { return Descriptor; }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public StreamingInputCallRequest() {
       OnConstruction();
     }
 
     partial void OnConstruction();
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public StreamingInputCallRequest(StreamingInputCallRequest other) : this() {
       Payload = other.payload_ != null ? other.Payload.Clone() : null;
       ExpectCompressed = other.expectCompressed_ != null ? other.ExpectCompressed.Clone() : null;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public StreamingInputCallRequest Clone() {
       return new StreamingInputCallRequest(this);
     }
@@ -1035,6 +1120,7 @@
     /// <summary>
     ///  Optional input payload sent along with the request.
     /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public global::Grpc.Testing.Payload Payload {
       get { return payload_; }
       set {
@@ -1051,6 +1137,7 @@
     ///  implement the full compression tests by introspecting the call to verify
     ///  the request's compression status.
     /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public global::Grpc.Testing.BoolValue ExpectCompressed {
       get { return expectCompressed_; }
       set {
@@ -1058,10 +1145,12 @@
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override bool Equals(object other) {
       return Equals(other as StreamingInputCallRequest);
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public bool Equals(StreamingInputCallRequest other) {
       if (ReferenceEquals(other, null)) {
         return false;
@@ -1074,6 +1163,7 @@
       return true;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override int GetHashCode() {
       int hash = 1;
       if (payload_ != null) hash ^= Payload.GetHashCode();
@@ -1081,10 +1171,12 @@
       return hash;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override string ToString() {
       return pb::JsonFormatter.ToDiagnosticString(this);
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void WriteTo(pb::CodedOutputStream output) {
       if (payload_ != null) {
         output.WriteRawTag(10);
@@ -1096,6 +1188,7 @@
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public int CalculateSize() {
       int size = 0;
       if (payload_ != null) {
@@ -1107,6 +1200,7 @@
       return size;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void MergeFrom(StreamingInputCallRequest other) {
       if (other == null) {
         return;
@@ -1125,6 +1219,7 @@
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void MergeFrom(pb::CodedInputStream input) {
       uint tag;
       while ((tag = input.ReadTag()) != 0) {
@@ -1155,29 +1250,34 @@
   /// <summary>
   ///  Client-streaming response.
   /// </summary>
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
   public sealed partial class StreamingInputCallResponse : pb::IMessage<StreamingInputCallResponse> {
     private static readonly pb::MessageParser<StreamingInputCallResponse> _parser = new pb::MessageParser<StreamingInputCallResponse>(() => new StreamingInputCallResponse());
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public static pb::MessageParser<StreamingInputCallResponse> Parser { get { return _parser; } }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public static pbr::MessageDescriptor Descriptor {
       get { return global::Grpc.Testing.MessagesReflection.Descriptor.MessageTypes[6]; }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     pbr::MessageDescriptor pb::IMessage.Descriptor {
       get { return Descriptor; }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public StreamingInputCallResponse() {
       OnConstruction();
     }
 
     partial void OnConstruction();
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public StreamingInputCallResponse(StreamingInputCallResponse other) : this() {
       aggregatedPayloadSize_ = other.aggregatedPayloadSize_;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public StreamingInputCallResponse Clone() {
       return new StreamingInputCallResponse(this);
     }
@@ -1188,6 +1288,7 @@
     /// <summary>
     ///  Aggregated size of payloads received from the client.
     /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public int AggregatedPayloadSize {
       get { return aggregatedPayloadSize_; }
       set {
@@ -1195,10 +1296,12 @@
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override bool Equals(object other) {
       return Equals(other as StreamingInputCallResponse);
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public bool Equals(StreamingInputCallResponse other) {
       if (ReferenceEquals(other, null)) {
         return false;
@@ -1210,16 +1313,19 @@
       return true;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override int GetHashCode() {
       int hash = 1;
       if (AggregatedPayloadSize != 0) hash ^= AggregatedPayloadSize.GetHashCode();
       return hash;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override string ToString() {
       return pb::JsonFormatter.ToDiagnosticString(this);
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void WriteTo(pb::CodedOutputStream output) {
       if (AggregatedPayloadSize != 0) {
         output.WriteRawTag(8);
@@ -1227,6 +1333,7 @@
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public int CalculateSize() {
       int size = 0;
       if (AggregatedPayloadSize != 0) {
@@ -1235,6 +1342,7 @@
       return size;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void MergeFrom(StreamingInputCallResponse other) {
       if (other == null) {
         return;
@@ -1244,6 +1352,7 @@
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void MergeFrom(pb::CodedInputStream input) {
       uint tag;
       while ((tag = input.ReadTag()) != 0) {
@@ -1264,31 +1373,36 @@
   /// <summary>
   ///  Configuration for a particular response.
   /// </summary>
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
   public sealed partial class ResponseParameters : pb::IMessage<ResponseParameters> {
     private static readonly pb::MessageParser<ResponseParameters> _parser = new pb::MessageParser<ResponseParameters>(() => new ResponseParameters());
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public static pb::MessageParser<ResponseParameters> Parser { get { return _parser; } }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public static pbr::MessageDescriptor Descriptor {
       get { return global::Grpc.Testing.MessagesReflection.Descriptor.MessageTypes[7]; }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     pbr::MessageDescriptor pb::IMessage.Descriptor {
       get { return Descriptor; }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public ResponseParameters() {
       OnConstruction();
     }
 
     partial void OnConstruction();
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public ResponseParameters(ResponseParameters other) : this() {
       size_ = other.size_;
       intervalUs_ = other.intervalUs_;
       Compressed = other.compressed_ != null ? other.Compressed.Clone() : null;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public ResponseParameters Clone() {
       return new ResponseParameters(this);
     }
@@ -1299,6 +1413,7 @@
     /// <summary>
     ///  Desired payload sizes in responses from the server.
     /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public int Size {
       get { return size_; }
       set {
@@ -1313,6 +1428,7 @@
     ///  Desired interval between consecutive responses in the response stream in
     ///  microseconds.
     /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public int IntervalUs {
       get { return intervalUs_; }
       set {
@@ -1329,6 +1445,7 @@
     ///  implement the full compression tests by introspecting the call to verify
     ///  the response's compression status.
     /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public global::Grpc.Testing.BoolValue Compressed {
       get { return compressed_; }
       set {
@@ -1336,10 +1453,12 @@
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override bool Equals(object other) {
       return Equals(other as ResponseParameters);
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public bool Equals(ResponseParameters other) {
       if (ReferenceEquals(other, null)) {
         return false;
@@ -1353,6 +1472,7 @@
       return true;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override int GetHashCode() {
       int hash = 1;
       if (Size != 0) hash ^= Size.GetHashCode();
@@ -1361,10 +1481,12 @@
       return hash;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override string ToString() {
       return pb::JsonFormatter.ToDiagnosticString(this);
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void WriteTo(pb::CodedOutputStream output) {
       if (Size != 0) {
         output.WriteRawTag(8);
@@ -1380,6 +1502,7 @@
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public int CalculateSize() {
       int size = 0;
       if (Size != 0) {
@@ -1394,6 +1517,7 @@
       return size;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void MergeFrom(ResponseParameters other) {
       if (other == null) {
         return;
@@ -1412,6 +1536,7 @@
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void MergeFrom(pb::CodedInputStream input) {
       uint tag;
       while ((tag = input.ReadTag()) != 0) {
@@ -1443,25 +1568,29 @@
   /// <summary>
   ///  Server-streaming request.
   /// </summary>
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
   public sealed partial class StreamingOutputCallRequest : pb::IMessage<StreamingOutputCallRequest> {
     private static readonly pb::MessageParser<StreamingOutputCallRequest> _parser = new pb::MessageParser<StreamingOutputCallRequest>(() => new StreamingOutputCallRequest());
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public static pb::MessageParser<StreamingOutputCallRequest> Parser { get { return _parser; } }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public static pbr::MessageDescriptor Descriptor {
       get { return global::Grpc.Testing.MessagesReflection.Descriptor.MessageTypes[8]; }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     pbr::MessageDescriptor pb::IMessage.Descriptor {
       get { return Descriptor; }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public StreamingOutputCallRequest() {
       OnConstruction();
     }
 
     partial void OnConstruction();
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public StreamingOutputCallRequest(StreamingOutputCallRequest other) : this() {
       responseType_ = other.responseType_;
       responseParameters_ = other.responseParameters_.Clone();
@@ -1469,6 +1598,7 @@
       ResponseStatus = other.responseStatus_ != null ? other.ResponseStatus.Clone() : null;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public StreamingOutputCallRequest Clone() {
       return new StreamingOutputCallRequest(this);
     }
@@ -1483,6 +1613,7 @@
     ///  might be of different types. This is to simulate a mixed type of payload
     ///  stream.
     /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public global::Grpc.Testing.PayloadType ResponseType {
       get { return responseType_; }
       set {
@@ -1498,6 +1629,7 @@
     /// <summary>
     ///  Configuration for each expected response message.
     /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public pbc::RepeatedField<global::Grpc.Testing.ResponseParameters> ResponseParameters {
       get { return responseParameters_; }
     }
@@ -1508,6 +1640,7 @@
     /// <summary>
     ///  Optional input payload sent along with the request.
     /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public global::Grpc.Testing.Payload Payload {
       get { return payload_; }
       set {
@@ -1521,6 +1654,7 @@
     /// <summary>
     ///  Whether server should return a given status
     /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public global::Grpc.Testing.EchoStatus ResponseStatus {
       get { return responseStatus_; }
       set {
@@ -1528,10 +1662,12 @@
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override bool Equals(object other) {
       return Equals(other as StreamingOutputCallRequest);
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public bool Equals(StreamingOutputCallRequest other) {
       if (ReferenceEquals(other, null)) {
         return false;
@@ -1546,6 +1682,7 @@
       return true;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override int GetHashCode() {
       int hash = 1;
       if (ResponseType != 0) hash ^= ResponseType.GetHashCode();
@@ -1555,10 +1692,12 @@
       return hash;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override string ToString() {
       return pb::JsonFormatter.ToDiagnosticString(this);
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void WriteTo(pb::CodedOutputStream output) {
       if (ResponseType != 0) {
         output.WriteRawTag(8);
@@ -1575,6 +1714,7 @@
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public int CalculateSize() {
       int size = 0;
       if (ResponseType != 0) {
@@ -1590,6 +1730,7 @@
       return size;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void MergeFrom(StreamingOutputCallRequest other) {
       if (other == null) {
         return;
@@ -1612,6 +1753,7 @@
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void MergeFrom(pb::CodedInputStream input) {
       uint tag;
       while ((tag = input.ReadTag()) != 0) {
@@ -1650,29 +1792,34 @@
   /// <summary>
   ///  Server-streaming response, as configured by the request and parameters.
   /// </summary>
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
   public sealed partial class StreamingOutputCallResponse : pb::IMessage<StreamingOutputCallResponse> {
     private static readonly pb::MessageParser<StreamingOutputCallResponse> _parser = new pb::MessageParser<StreamingOutputCallResponse>(() => new StreamingOutputCallResponse());
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public static pb::MessageParser<StreamingOutputCallResponse> Parser { get { return _parser; } }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public static pbr::MessageDescriptor Descriptor {
       get { return global::Grpc.Testing.MessagesReflection.Descriptor.MessageTypes[9]; }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     pbr::MessageDescriptor pb::IMessage.Descriptor {
       get { return Descriptor; }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public StreamingOutputCallResponse() {
       OnConstruction();
     }
 
     partial void OnConstruction();
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public StreamingOutputCallResponse(StreamingOutputCallResponse other) : this() {
       Payload = other.payload_ != null ? other.Payload.Clone() : null;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public StreamingOutputCallResponse Clone() {
       return new StreamingOutputCallResponse(this);
     }
@@ -1683,6 +1830,7 @@
     /// <summary>
     ///  Payload to increase response size.
     /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public global::Grpc.Testing.Payload Payload {
       get { return payload_; }
       set {
@@ -1690,10 +1838,12 @@
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override bool Equals(object other) {
       return Equals(other as StreamingOutputCallResponse);
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public bool Equals(StreamingOutputCallResponse other) {
       if (ReferenceEquals(other, null)) {
         return false;
@@ -1705,16 +1855,19 @@
       return true;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override int GetHashCode() {
       int hash = 1;
       if (payload_ != null) hash ^= Payload.GetHashCode();
       return hash;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override string ToString() {
       return pb::JsonFormatter.ToDiagnosticString(this);
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void WriteTo(pb::CodedOutputStream output) {
       if (payload_ != null) {
         output.WriteRawTag(10);
@@ -1722,6 +1875,7 @@
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public int CalculateSize() {
       int size = 0;
       if (payload_ != null) {
@@ -1730,6 +1884,7 @@
       return size;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void MergeFrom(StreamingOutputCallResponse other) {
       if (other == null) {
         return;
@@ -1742,6 +1897,7 @@
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void MergeFrom(pb::CodedInputStream input) {
       uint tag;
       while ((tag = input.ReadTag()) != 0) {
@@ -1766,29 +1922,34 @@
   ///  For reconnect interop test only.
   ///  Client tells server what reconnection parameters it used.
   /// </summary>
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
   public sealed partial class ReconnectParams : pb::IMessage<ReconnectParams> {
     private static readonly pb::MessageParser<ReconnectParams> _parser = new pb::MessageParser<ReconnectParams>(() => new ReconnectParams());
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public static pb::MessageParser<ReconnectParams> Parser { get { return _parser; } }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public static pbr::MessageDescriptor Descriptor {
       get { return global::Grpc.Testing.MessagesReflection.Descriptor.MessageTypes[10]; }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     pbr::MessageDescriptor pb::IMessage.Descriptor {
       get { return Descriptor; }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public ReconnectParams() {
       OnConstruction();
     }
 
     partial void OnConstruction();
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public ReconnectParams(ReconnectParams other) : this() {
       maxReconnectBackoffMs_ = other.maxReconnectBackoffMs_;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public ReconnectParams Clone() {
       return new ReconnectParams(this);
     }
@@ -1796,6 +1957,7 @@
     /// <summary>Field number for the "max_reconnect_backoff_ms" field.</summary>
     public const int MaxReconnectBackoffMsFieldNumber = 1;
     private int maxReconnectBackoffMs_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public int MaxReconnectBackoffMs {
       get { return maxReconnectBackoffMs_; }
       set {
@@ -1803,10 +1965,12 @@
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override bool Equals(object other) {
       return Equals(other as ReconnectParams);
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public bool Equals(ReconnectParams other) {
       if (ReferenceEquals(other, null)) {
         return false;
@@ -1818,16 +1982,19 @@
       return true;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override int GetHashCode() {
       int hash = 1;
       if (MaxReconnectBackoffMs != 0) hash ^= MaxReconnectBackoffMs.GetHashCode();
       return hash;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override string ToString() {
       return pb::JsonFormatter.ToDiagnosticString(this);
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void WriteTo(pb::CodedOutputStream output) {
       if (MaxReconnectBackoffMs != 0) {
         output.WriteRawTag(8);
@@ -1835,6 +2002,7 @@
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public int CalculateSize() {
       int size = 0;
       if (MaxReconnectBackoffMs != 0) {
@@ -1843,6 +2011,7 @@
       return size;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void MergeFrom(ReconnectParams other) {
       if (other == null) {
         return;
@@ -1852,6 +2021,7 @@
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void MergeFrom(pb::CodedInputStream input) {
       uint tag;
       while ((tag = input.ReadTag()) != 0) {
@@ -1874,30 +2044,35 @@
   ///  Server tells client whether its reconnects are following the spec and the
   ///  reconnect backoffs it saw.
   /// </summary>
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
   public sealed partial class ReconnectInfo : pb::IMessage<ReconnectInfo> {
     private static readonly pb::MessageParser<ReconnectInfo> _parser = new pb::MessageParser<ReconnectInfo>(() => new ReconnectInfo());
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public static pb::MessageParser<ReconnectInfo> Parser { get { return _parser; } }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public static pbr::MessageDescriptor Descriptor {
       get { return global::Grpc.Testing.MessagesReflection.Descriptor.MessageTypes[11]; }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     pbr::MessageDescriptor pb::IMessage.Descriptor {
       get { return Descriptor; }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public ReconnectInfo() {
       OnConstruction();
     }
 
     partial void OnConstruction();
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public ReconnectInfo(ReconnectInfo other) : this() {
       passed_ = other.passed_;
       backoffMs_ = other.backoffMs_.Clone();
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public ReconnectInfo Clone() {
       return new ReconnectInfo(this);
     }
@@ -1905,6 +2080,7 @@
     /// <summary>Field number for the "passed" field.</summary>
     public const int PassedFieldNumber = 1;
     private bool passed_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public bool Passed {
       get { return passed_; }
       set {
@@ -1917,14 +2093,17 @@
     private static readonly pb::FieldCodec<int> _repeated_backoffMs_codec
         = pb::FieldCodec.ForInt32(18);
     private readonly pbc::RepeatedField<int> backoffMs_ = new pbc::RepeatedField<int>();
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public pbc::RepeatedField<int> BackoffMs {
       get { return backoffMs_; }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override bool Equals(object other) {
       return Equals(other as ReconnectInfo);
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public bool Equals(ReconnectInfo other) {
       if (ReferenceEquals(other, null)) {
         return false;
@@ -1937,6 +2116,7 @@
       return true;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override int GetHashCode() {
       int hash = 1;
       if (Passed != false) hash ^= Passed.GetHashCode();
@@ -1944,10 +2124,12 @@
       return hash;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override string ToString() {
       return pb::JsonFormatter.ToDiagnosticString(this);
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void WriteTo(pb::CodedOutputStream output) {
       if (Passed != false) {
         output.WriteRawTag(8);
@@ -1956,6 +2138,7 @@
       backoffMs_.WriteTo(output, _repeated_backoffMs_codec);
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public int CalculateSize() {
       int size = 0;
       if (Passed != false) {
@@ -1965,6 +2148,7 @@
       return size;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void MergeFrom(ReconnectInfo other) {
       if (other == null) {
         return;
@@ -1975,6 +2159,7 @@
       backoffMs_.Add(other.backoffMs_);
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void MergeFrom(pb::CodedInputStream input) {
       uint tag;
       while ((tag = input.ReadTag()) != 0) {
diff --git a/src/csharp/Grpc.IntegrationTesting/Metrics.cs b/src/csharp/Grpc.IntegrationTesting/Metrics.cs
index 8f31fbc..4de1847 100644
--- a/src/csharp/Grpc.IntegrationTesting/Metrics.cs
+++ b/src/csharp/Grpc.IntegrationTesting/Metrics.cs
@@ -10,7 +10,6 @@
 namespace Grpc.Testing {
 
   /// <summary>Holder for reflection information generated from src/proto/grpc/testing/metrics.proto</summary>
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
   public static partial class MetricsReflection {
 
     #region Descriptor
@@ -47,25 +46,29 @@
   /// <summary>
   ///  Reponse message containing the gauge name and value
   /// </summary>
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
   public sealed partial class GaugeResponse : pb::IMessage<GaugeResponse> {
     private static readonly pb::MessageParser<GaugeResponse> _parser = new pb::MessageParser<GaugeResponse>(() => new GaugeResponse());
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public static pb::MessageParser<GaugeResponse> Parser { get { return _parser; } }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public static pbr::MessageDescriptor Descriptor {
       get { return global::Grpc.Testing.MetricsReflection.Descriptor.MessageTypes[0]; }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     pbr::MessageDescriptor pb::IMessage.Descriptor {
       get { return Descriptor; }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public GaugeResponse() {
       OnConstruction();
     }
 
     partial void OnConstruction();
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public GaugeResponse(GaugeResponse other) : this() {
       name_ = other.name_;
       switch (other.ValueCase) {
@@ -82,6 +85,7 @@
 
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public GaugeResponse Clone() {
       return new GaugeResponse(this);
     }
@@ -89,6 +93,7 @@
     /// <summary>Field number for the "name" field.</summary>
     public const int NameFieldNumber = 1;
     private string name_ = "";
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public string Name {
       get { return name_; }
       set {
@@ -98,6 +103,7 @@
 
     /// <summary>Field number for the "long_value" field.</summary>
     public const int LongValueFieldNumber = 2;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public long LongValue {
       get { return valueCase_ == ValueOneofCase.LongValue ? (long) value_ : 0L; }
       set {
@@ -108,6 +114,7 @@
 
     /// <summary>Field number for the "double_value" field.</summary>
     public const int DoubleValueFieldNumber = 3;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public double DoubleValue {
       get { return valueCase_ == ValueOneofCase.DoubleValue ? (double) value_ : 0D; }
       set {
@@ -118,6 +125,7 @@
 
     /// <summary>Field number for the "string_value" field.</summary>
     public const int StringValueFieldNumber = 4;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public string StringValue {
       get { return valueCase_ == ValueOneofCase.StringValue ? (string) value_ : ""; }
       set {
@@ -135,19 +143,23 @@
       StringValue = 4,
     }
     private ValueOneofCase valueCase_ = ValueOneofCase.None;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public ValueOneofCase ValueCase {
       get { return valueCase_; }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void ClearValue() {
       valueCase_ = ValueOneofCase.None;
       value_ = null;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override bool Equals(object other) {
       return Equals(other as GaugeResponse);
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public bool Equals(GaugeResponse other) {
       if (ReferenceEquals(other, null)) {
         return false;
@@ -163,6 +175,7 @@
       return true;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override int GetHashCode() {
       int hash = 1;
       if (Name.Length != 0) hash ^= Name.GetHashCode();
@@ -173,10 +186,12 @@
       return hash;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override string ToString() {
       return pb::JsonFormatter.ToDiagnosticString(this);
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void WriteTo(pb::CodedOutputStream output) {
       if (Name.Length != 0) {
         output.WriteRawTag(10);
@@ -196,6 +211,7 @@
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public int CalculateSize() {
       int size = 0;
       if (Name.Length != 0) {
@@ -213,6 +229,7 @@
       return size;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void MergeFrom(GaugeResponse other) {
       if (other == null) {
         return;
@@ -234,6 +251,7 @@
 
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void MergeFrom(pb::CodedInputStream input) {
       uint tag;
       while ((tag = input.ReadTag()) != 0) {
@@ -266,29 +284,34 @@
   /// <summary>
   ///  Request message containing the gauge name
   /// </summary>
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
   public sealed partial class GaugeRequest : pb::IMessage<GaugeRequest> {
     private static readonly pb::MessageParser<GaugeRequest> _parser = new pb::MessageParser<GaugeRequest>(() => new GaugeRequest());
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public static pb::MessageParser<GaugeRequest> Parser { get { return _parser; } }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public static pbr::MessageDescriptor Descriptor {
       get { return global::Grpc.Testing.MetricsReflection.Descriptor.MessageTypes[1]; }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     pbr::MessageDescriptor pb::IMessage.Descriptor {
       get { return Descriptor; }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public GaugeRequest() {
       OnConstruction();
     }
 
     partial void OnConstruction();
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public GaugeRequest(GaugeRequest other) : this() {
       name_ = other.name_;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public GaugeRequest Clone() {
       return new GaugeRequest(this);
     }
@@ -296,6 +319,7 @@
     /// <summary>Field number for the "name" field.</summary>
     public const int NameFieldNumber = 1;
     private string name_ = "";
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public string Name {
       get { return name_; }
       set {
@@ -303,10 +327,12 @@
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override bool Equals(object other) {
       return Equals(other as GaugeRequest);
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public bool Equals(GaugeRequest other) {
       if (ReferenceEquals(other, null)) {
         return false;
@@ -318,16 +344,19 @@
       return true;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override int GetHashCode() {
       int hash = 1;
       if (Name.Length != 0) hash ^= Name.GetHashCode();
       return hash;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override string ToString() {
       return pb::JsonFormatter.ToDiagnosticString(this);
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void WriteTo(pb::CodedOutputStream output) {
       if (Name.Length != 0) {
         output.WriteRawTag(10);
@@ -335,6 +364,7 @@
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public int CalculateSize() {
       int size = 0;
       if (Name.Length != 0) {
@@ -343,6 +373,7 @@
       return size;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void MergeFrom(GaugeRequest other) {
       if (other == null) {
         return;
@@ -352,6 +383,7 @@
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void MergeFrom(pb::CodedInputStream input) {
       uint tag;
       while ((tag = input.ReadTag()) != 0) {
@@ -369,36 +401,43 @@
 
   }
 
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
   public sealed partial class EmptyMessage : pb::IMessage<EmptyMessage> {
     private static readonly pb::MessageParser<EmptyMessage> _parser = new pb::MessageParser<EmptyMessage>(() => new EmptyMessage());
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public static pb::MessageParser<EmptyMessage> Parser { get { return _parser; } }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public static pbr::MessageDescriptor Descriptor {
       get { return global::Grpc.Testing.MetricsReflection.Descriptor.MessageTypes[2]; }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     pbr::MessageDescriptor pb::IMessage.Descriptor {
       get { return Descriptor; }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public EmptyMessage() {
       OnConstruction();
     }
 
     partial void OnConstruction();
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public EmptyMessage(EmptyMessage other) : this() {
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public EmptyMessage Clone() {
       return new EmptyMessage(this);
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override bool Equals(object other) {
       return Equals(other as EmptyMessage);
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public bool Equals(EmptyMessage other) {
       if (ReferenceEquals(other, null)) {
         return false;
@@ -409,29 +448,35 @@
       return true;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override int GetHashCode() {
       int hash = 1;
       return hash;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override string ToString() {
       return pb::JsonFormatter.ToDiagnosticString(this);
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void WriteTo(pb::CodedOutputStream output) {
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public int CalculateSize() {
       int size = 0;
       return size;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void MergeFrom(EmptyMessage other) {
       if (other == null) {
         return;
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void MergeFrom(pb::CodedInputStream input) {
       uint tag;
       while ((tag = input.ReadTag()) != 0) {
diff --git a/src/csharp/Grpc.IntegrationTesting/MetricsGrpc.cs b/src/csharp/Grpc.IntegrationTesting/MetricsGrpc.cs
index 040798e..bcd7e3c 100644
--- a/src/csharp/Grpc.IntegrationTesting/MetricsGrpc.cs
+++ b/src/csharp/Grpc.IntegrationTesting/MetricsGrpc.cs
@@ -161,6 +161,7 @@
       {
         return CallInvoker.AsyncUnaryCall(__Method_GetGauge, null, options, request);
       }
+      /// <summary>Creates a new instance of client from given <c>ClientBaseConfiguration</c>.</summary>
       protected override MetricsServiceClient NewInstance(ClientBaseConfiguration configuration)
       {
         return new MetricsServiceClient(configuration);
diff --git a/src/csharp/Grpc.IntegrationTesting/Payloads.cs b/src/csharp/Grpc.IntegrationTesting/Payloads.cs
index 3ad7a44..7aef35c 100644
--- a/src/csharp/Grpc.IntegrationTesting/Payloads.cs
+++ b/src/csharp/Grpc.IntegrationTesting/Payloads.cs
@@ -10,7 +10,6 @@
 namespace Grpc.Testing {
 
   /// <summary>Holder for reflection information generated from src/proto/grpc/testing/payloads.proto</summary>
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
   public static partial class PayloadsReflection {
 
     #region Descriptor
@@ -45,30 +44,35 @@
 
   }
   #region Messages
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
   public sealed partial class ByteBufferParams : pb::IMessage<ByteBufferParams> {
     private static readonly pb::MessageParser<ByteBufferParams> _parser = new pb::MessageParser<ByteBufferParams>(() => new ByteBufferParams());
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public static pb::MessageParser<ByteBufferParams> Parser { get { return _parser; } }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public static pbr::MessageDescriptor Descriptor {
       get { return global::Grpc.Testing.PayloadsReflection.Descriptor.MessageTypes[0]; }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     pbr::MessageDescriptor pb::IMessage.Descriptor {
       get { return Descriptor; }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public ByteBufferParams() {
       OnConstruction();
     }
 
     partial void OnConstruction();
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public ByteBufferParams(ByteBufferParams other) : this() {
       reqSize_ = other.reqSize_;
       respSize_ = other.respSize_;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public ByteBufferParams Clone() {
       return new ByteBufferParams(this);
     }
@@ -76,6 +80,7 @@
     /// <summary>Field number for the "req_size" field.</summary>
     public const int ReqSizeFieldNumber = 1;
     private int reqSize_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public int ReqSize {
       get { return reqSize_; }
       set {
@@ -86,6 +91,7 @@
     /// <summary>Field number for the "resp_size" field.</summary>
     public const int RespSizeFieldNumber = 2;
     private int respSize_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public int RespSize {
       get { return respSize_; }
       set {
@@ -93,10 +99,12 @@
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override bool Equals(object other) {
       return Equals(other as ByteBufferParams);
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public bool Equals(ByteBufferParams other) {
       if (ReferenceEquals(other, null)) {
         return false;
@@ -109,6 +117,7 @@
       return true;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override int GetHashCode() {
       int hash = 1;
       if (ReqSize != 0) hash ^= ReqSize.GetHashCode();
@@ -116,10 +125,12 @@
       return hash;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override string ToString() {
       return pb::JsonFormatter.ToDiagnosticString(this);
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void WriteTo(pb::CodedOutputStream output) {
       if (ReqSize != 0) {
         output.WriteRawTag(8);
@@ -131,6 +142,7 @@
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public int CalculateSize() {
       int size = 0;
       if (ReqSize != 0) {
@@ -142,6 +154,7 @@
       return size;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void MergeFrom(ByteBufferParams other) {
       if (other == null) {
         return;
@@ -154,6 +167,7 @@
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void MergeFrom(pb::CodedInputStream input) {
       uint tag;
       while ((tag = input.ReadTag()) != 0) {
@@ -175,30 +189,35 @@
 
   }
 
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
   public sealed partial class SimpleProtoParams : pb::IMessage<SimpleProtoParams> {
     private static readonly pb::MessageParser<SimpleProtoParams> _parser = new pb::MessageParser<SimpleProtoParams>(() => new SimpleProtoParams());
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public static pb::MessageParser<SimpleProtoParams> Parser { get { return _parser; } }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public static pbr::MessageDescriptor Descriptor {
       get { return global::Grpc.Testing.PayloadsReflection.Descriptor.MessageTypes[1]; }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     pbr::MessageDescriptor pb::IMessage.Descriptor {
       get { return Descriptor; }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public SimpleProtoParams() {
       OnConstruction();
     }
 
     partial void OnConstruction();
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public SimpleProtoParams(SimpleProtoParams other) : this() {
       reqSize_ = other.reqSize_;
       respSize_ = other.respSize_;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public SimpleProtoParams Clone() {
       return new SimpleProtoParams(this);
     }
@@ -206,6 +225,7 @@
     /// <summary>Field number for the "req_size" field.</summary>
     public const int ReqSizeFieldNumber = 1;
     private int reqSize_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public int ReqSize {
       get { return reqSize_; }
       set {
@@ -216,6 +236,7 @@
     /// <summary>Field number for the "resp_size" field.</summary>
     public const int RespSizeFieldNumber = 2;
     private int respSize_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public int RespSize {
       get { return respSize_; }
       set {
@@ -223,10 +244,12 @@
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override bool Equals(object other) {
       return Equals(other as SimpleProtoParams);
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public bool Equals(SimpleProtoParams other) {
       if (ReferenceEquals(other, null)) {
         return false;
@@ -239,6 +262,7 @@
       return true;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override int GetHashCode() {
       int hash = 1;
       if (ReqSize != 0) hash ^= ReqSize.GetHashCode();
@@ -246,10 +270,12 @@
       return hash;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override string ToString() {
       return pb::JsonFormatter.ToDiagnosticString(this);
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void WriteTo(pb::CodedOutputStream output) {
       if (ReqSize != 0) {
         output.WriteRawTag(8);
@@ -261,6 +287,7 @@
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public int CalculateSize() {
       int size = 0;
       if (ReqSize != 0) {
@@ -272,6 +299,7 @@
       return size;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void MergeFrom(SimpleProtoParams other) {
       if (other == null) {
         return;
@@ -284,6 +312,7 @@
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void MergeFrom(pb::CodedInputStream input) {
       uint tag;
       while ((tag = input.ReadTag()) != 0) {
@@ -309,36 +338,43 @@
   ///  TODO (vpai): Fill this in once the details of complex, representative
   ///               protos are decided
   /// </summary>
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
   public sealed partial class ComplexProtoParams : pb::IMessage<ComplexProtoParams> {
     private static readonly pb::MessageParser<ComplexProtoParams> _parser = new pb::MessageParser<ComplexProtoParams>(() => new ComplexProtoParams());
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public static pb::MessageParser<ComplexProtoParams> Parser { get { return _parser; } }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public static pbr::MessageDescriptor Descriptor {
       get { return global::Grpc.Testing.PayloadsReflection.Descriptor.MessageTypes[2]; }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     pbr::MessageDescriptor pb::IMessage.Descriptor {
       get { return Descriptor; }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public ComplexProtoParams() {
       OnConstruction();
     }
 
     partial void OnConstruction();
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public ComplexProtoParams(ComplexProtoParams other) : this() {
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public ComplexProtoParams Clone() {
       return new ComplexProtoParams(this);
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override bool Equals(object other) {
       return Equals(other as ComplexProtoParams);
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public bool Equals(ComplexProtoParams other) {
       if (ReferenceEquals(other, null)) {
         return false;
@@ -349,29 +385,35 @@
       return true;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override int GetHashCode() {
       int hash = 1;
       return hash;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override string ToString() {
       return pb::JsonFormatter.ToDiagnosticString(this);
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void WriteTo(pb::CodedOutputStream output) {
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public int CalculateSize() {
       int size = 0;
       return size;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void MergeFrom(ComplexProtoParams other) {
       if (other == null) {
         return;
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void MergeFrom(pb::CodedInputStream input) {
       uint tag;
       while ((tag = input.ReadTag()) != 0) {
@@ -385,25 +427,29 @@
 
   }
 
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
   public sealed partial class PayloadConfig : pb::IMessage<PayloadConfig> {
     private static readonly pb::MessageParser<PayloadConfig> _parser = new pb::MessageParser<PayloadConfig>(() => new PayloadConfig());
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public static pb::MessageParser<PayloadConfig> Parser { get { return _parser; } }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public static pbr::MessageDescriptor Descriptor {
       get { return global::Grpc.Testing.PayloadsReflection.Descriptor.MessageTypes[3]; }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     pbr::MessageDescriptor pb::IMessage.Descriptor {
       get { return Descriptor; }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public PayloadConfig() {
       OnConstruction();
     }
 
     partial void OnConstruction();
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public PayloadConfig(PayloadConfig other) : this() {
       switch (other.PayloadCase) {
         case PayloadOneofCase.BytebufParams:
@@ -419,12 +465,14 @@
 
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public PayloadConfig Clone() {
       return new PayloadConfig(this);
     }
 
     /// <summary>Field number for the "bytebuf_params" field.</summary>
     public const int BytebufParamsFieldNumber = 1;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public global::Grpc.Testing.ByteBufferParams BytebufParams {
       get { return payloadCase_ == PayloadOneofCase.BytebufParams ? (global::Grpc.Testing.ByteBufferParams) payload_ : null; }
       set {
@@ -435,6 +483,7 @@
 
     /// <summary>Field number for the "simple_params" field.</summary>
     public const int SimpleParamsFieldNumber = 2;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public global::Grpc.Testing.SimpleProtoParams SimpleParams {
       get { return payloadCase_ == PayloadOneofCase.SimpleParams ? (global::Grpc.Testing.SimpleProtoParams) payload_ : null; }
       set {
@@ -445,6 +494,7 @@
 
     /// <summary>Field number for the "complex_params" field.</summary>
     public const int ComplexParamsFieldNumber = 3;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public global::Grpc.Testing.ComplexProtoParams ComplexParams {
       get { return payloadCase_ == PayloadOneofCase.ComplexParams ? (global::Grpc.Testing.ComplexProtoParams) payload_ : null; }
       set {
@@ -462,19 +512,23 @@
       ComplexParams = 3,
     }
     private PayloadOneofCase payloadCase_ = PayloadOneofCase.None;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public PayloadOneofCase PayloadCase {
       get { return payloadCase_; }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void ClearPayload() {
       payloadCase_ = PayloadOneofCase.None;
       payload_ = null;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override bool Equals(object other) {
       return Equals(other as PayloadConfig);
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public bool Equals(PayloadConfig other) {
       if (ReferenceEquals(other, null)) {
         return false;
@@ -489,6 +543,7 @@
       return true;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override int GetHashCode() {
       int hash = 1;
       if (payloadCase_ == PayloadOneofCase.BytebufParams) hash ^= BytebufParams.GetHashCode();
@@ -498,10 +553,12 @@
       return hash;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override string ToString() {
       return pb::JsonFormatter.ToDiagnosticString(this);
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void WriteTo(pb::CodedOutputStream output) {
       if (payloadCase_ == PayloadOneofCase.BytebufParams) {
         output.WriteRawTag(10);
@@ -517,6 +574,7 @@
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public int CalculateSize() {
       int size = 0;
       if (payloadCase_ == PayloadOneofCase.BytebufParams) {
@@ -531,6 +589,7 @@
       return size;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void MergeFrom(PayloadConfig other) {
       if (other == null) {
         return;
@@ -549,6 +608,7 @@
 
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void MergeFrom(pb::CodedInputStream input) {
       uint tag;
       while ((tag = input.ReadTag()) != 0) {
diff --git a/src/csharp/Grpc.IntegrationTesting/QpsWorker.cs b/src/csharp/Grpc.IntegrationTesting/QpsWorker.cs
index 865556c..62a7347 100644
--- a/src/csharp/Grpc.IntegrationTesting/QpsWorker.cs
+++ b/src/csharp/Grpc.IntegrationTesting/QpsWorker.cs
@@ -76,6 +76,11 @@
 
         private async Task RunAsync()
         {
+            // (ThreadPoolSize == ProcessorCount) gives best throughput in benchmarks
+            // and doesn't seem to harm performance even when server and client
+            // are running on the same machine.
+            GrpcEnvironment.SetThreadPoolSize(Environment.ProcessorCount);
+
             string host = "0.0.0.0";
             int port = options.DriverPort;
 
diff --git a/src/csharp/Grpc.IntegrationTesting/Services.cs b/src/csharp/Grpc.IntegrationTesting/Services.cs
index e10b45c..bf36a02 100644
--- a/src/csharp/Grpc.IntegrationTesting/Services.cs
+++ b/src/csharp/Grpc.IntegrationTesting/Services.cs
@@ -10,7 +10,6 @@
 namespace Grpc.Testing {
 
   /// <summary>Holder for reflection information generated from src/proto/grpc/testing/services.proto</summary>
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
   public static partial class ServicesReflection {
 
     #region Descriptor
diff --git a/src/csharp/Grpc.IntegrationTesting/ServicesGrpc.cs b/src/csharp/Grpc.IntegrationTesting/ServicesGrpc.cs
index e205dea..848dd04 100644
--- a/src/csharp/Grpc.IntegrationTesting/ServicesGrpc.cs
+++ b/src/csharp/Grpc.IntegrationTesting/ServicesGrpc.cs
@@ -161,6 +161,7 @@
       {
         return CallInvoker.AsyncDuplexStreamingCall(__Method_StreamingCall, null, options);
       }
+      /// <summary>Creates a new instance of client from given <c>ClientBaseConfiguration</c>.</summary>
       protected override BenchmarkServiceClient NewInstance(ClientBaseConfiguration configuration)
       {
         return new BenchmarkServiceClient(configuration);
@@ -396,6 +397,7 @@
       {
         return CallInvoker.AsyncUnaryCall(__Method_QuitWorker, null, options, request);
       }
+      /// <summary>Creates a new instance of client from given <c>ClientBaseConfiguration</c>.</summary>
       protected override WorkerServiceClient NewInstance(ClientBaseConfiguration configuration)
       {
         return new WorkerServiceClient(configuration);
diff --git a/src/csharp/Grpc.IntegrationTesting/Stats.cs b/src/csharp/Grpc.IntegrationTesting/Stats.cs
index 304d676..0ae77cf 100644
--- a/src/csharp/Grpc.IntegrationTesting/Stats.cs
+++ b/src/csharp/Grpc.IntegrationTesting/Stats.cs
@@ -10,7 +10,6 @@
 namespace Grpc.Testing {
 
   /// <summary>Holder for reflection information generated from src/proto/grpc/testing/stats.proto</summary>
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
   public static partial class StatsReflection {
 
     #region Descriptor
@@ -46,31 +45,36 @@
 
   }
   #region Messages
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
   public sealed partial class ServerStats : pb::IMessage<ServerStats> {
     private static readonly pb::MessageParser<ServerStats> _parser = new pb::MessageParser<ServerStats>(() => new ServerStats());
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public static pb::MessageParser<ServerStats> Parser { get { return _parser; } }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public static pbr::MessageDescriptor Descriptor {
       get { return global::Grpc.Testing.StatsReflection.Descriptor.MessageTypes[0]; }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     pbr::MessageDescriptor pb::IMessage.Descriptor {
       get { return Descriptor; }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public ServerStats() {
       OnConstruction();
     }
 
     partial void OnConstruction();
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public ServerStats(ServerStats other) : this() {
       timeElapsed_ = other.timeElapsed_;
       timeUser_ = other.timeUser_;
       timeSystem_ = other.timeSystem_;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public ServerStats Clone() {
       return new ServerStats(this);
     }
@@ -81,6 +85,7 @@
     /// <summary>
     ///  wall clock time change in seconds since last reset
     /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public double TimeElapsed {
       get { return timeElapsed_; }
       set {
@@ -94,6 +99,7 @@
     /// <summary>
     ///  change in user time (in seconds) used by the server since last reset
     /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public double TimeUser {
       get { return timeUser_; }
       set {
@@ -108,6 +114,7 @@
     ///  change in server time (in seconds) used by the server process and all
     ///  threads since last reset
     /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public double TimeSystem {
       get { return timeSystem_; }
       set {
@@ -115,10 +122,12 @@
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override bool Equals(object other) {
       return Equals(other as ServerStats);
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public bool Equals(ServerStats other) {
       if (ReferenceEquals(other, null)) {
         return false;
@@ -132,6 +141,7 @@
       return true;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override int GetHashCode() {
       int hash = 1;
       if (TimeElapsed != 0D) hash ^= TimeElapsed.GetHashCode();
@@ -140,10 +150,12 @@
       return hash;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override string ToString() {
       return pb::JsonFormatter.ToDiagnosticString(this);
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void WriteTo(pb::CodedOutputStream output) {
       if (TimeElapsed != 0D) {
         output.WriteRawTag(9);
@@ -159,6 +171,7 @@
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public int CalculateSize() {
       int size = 0;
       if (TimeElapsed != 0D) {
@@ -173,6 +186,7 @@
       return size;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void MergeFrom(ServerStats other) {
       if (other == null) {
         return;
@@ -188,6 +202,7 @@
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void MergeFrom(pb::CodedInputStream input) {
       uint tag;
       while ((tag = input.ReadTag()) != 0) {
@@ -216,30 +231,35 @@
   /// <summary>
   ///  Histogram params based on grpc/support/histogram.c
   /// </summary>
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
   public sealed partial class HistogramParams : pb::IMessage<HistogramParams> {
     private static readonly pb::MessageParser<HistogramParams> _parser = new pb::MessageParser<HistogramParams>(() => new HistogramParams());
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public static pb::MessageParser<HistogramParams> Parser { get { return _parser; } }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public static pbr::MessageDescriptor Descriptor {
       get { return global::Grpc.Testing.StatsReflection.Descriptor.MessageTypes[1]; }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     pbr::MessageDescriptor pb::IMessage.Descriptor {
       get { return Descriptor; }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public HistogramParams() {
       OnConstruction();
     }
 
     partial void OnConstruction();
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public HistogramParams(HistogramParams other) : this() {
       resolution_ = other.resolution_;
       maxPossible_ = other.maxPossible_;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public HistogramParams Clone() {
       return new HistogramParams(this);
     }
@@ -250,6 +270,7 @@
     /// <summary>
     ///  first bucket is [0, 1 + resolution)
     /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public double Resolution {
       get { return resolution_; }
       set {
@@ -263,6 +284,7 @@
     /// <summary>
     ///  use enough buckets to allow this value
     /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public double MaxPossible {
       get { return maxPossible_; }
       set {
@@ -270,10 +292,12 @@
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override bool Equals(object other) {
       return Equals(other as HistogramParams);
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public bool Equals(HistogramParams other) {
       if (ReferenceEquals(other, null)) {
         return false;
@@ -286,6 +310,7 @@
       return true;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override int GetHashCode() {
       int hash = 1;
       if (Resolution != 0D) hash ^= Resolution.GetHashCode();
@@ -293,10 +318,12 @@
       return hash;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override string ToString() {
       return pb::JsonFormatter.ToDiagnosticString(this);
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void WriteTo(pb::CodedOutputStream output) {
       if (Resolution != 0D) {
         output.WriteRawTag(9);
@@ -308,6 +335,7 @@
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public int CalculateSize() {
       int size = 0;
       if (Resolution != 0D) {
@@ -319,6 +347,7 @@
       return size;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void MergeFrom(HistogramParams other) {
       if (other == null) {
         return;
@@ -331,6 +360,7 @@
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void MergeFrom(pb::CodedInputStream input) {
       uint tag;
       while ((tag = input.ReadTag()) != 0) {
@@ -355,25 +385,29 @@
   /// <summary>
   ///  Histogram data based on grpc/support/histogram.c
   /// </summary>
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
   public sealed partial class HistogramData : pb::IMessage<HistogramData> {
     private static readonly pb::MessageParser<HistogramData> _parser = new pb::MessageParser<HistogramData>(() => new HistogramData());
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public static pb::MessageParser<HistogramData> Parser { get { return _parser; } }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public static pbr::MessageDescriptor Descriptor {
       get { return global::Grpc.Testing.StatsReflection.Descriptor.MessageTypes[2]; }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     pbr::MessageDescriptor pb::IMessage.Descriptor {
       get { return Descriptor; }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public HistogramData() {
       OnConstruction();
     }
 
     partial void OnConstruction();
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public HistogramData(HistogramData other) : this() {
       bucket_ = other.bucket_.Clone();
       minSeen_ = other.minSeen_;
@@ -383,6 +417,7 @@
       count_ = other.count_;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public HistogramData Clone() {
       return new HistogramData(this);
     }
@@ -392,6 +427,7 @@
     private static readonly pb::FieldCodec<uint> _repeated_bucket_codec
         = pb::FieldCodec.ForUInt32(10);
     private readonly pbc::RepeatedField<uint> bucket_ = new pbc::RepeatedField<uint>();
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public pbc::RepeatedField<uint> Bucket {
       get { return bucket_; }
     }
@@ -399,6 +435,7 @@
     /// <summary>Field number for the "min_seen" field.</summary>
     public const int MinSeenFieldNumber = 2;
     private double minSeen_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public double MinSeen {
       get { return minSeen_; }
       set {
@@ -409,6 +446,7 @@
     /// <summary>Field number for the "max_seen" field.</summary>
     public const int MaxSeenFieldNumber = 3;
     private double maxSeen_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public double MaxSeen {
       get { return maxSeen_; }
       set {
@@ -419,6 +457,7 @@
     /// <summary>Field number for the "sum" field.</summary>
     public const int SumFieldNumber = 4;
     private double sum_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public double Sum {
       get { return sum_; }
       set {
@@ -429,6 +468,7 @@
     /// <summary>Field number for the "sum_of_squares" field.</summary>
     public const int SumOfSquaresFieldNumber = 5;
     private double sumOfSquares_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public double SumOfSquares {
       get { return sumOfSquares_; }
       set {
@@ -439,6 +479,7 @@
     /// <summary>Field number for the "count" field.</summary>
     public const int CountFieldNumber = 6;
     private double count_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public double Count {
       get { return count_; }
       set {
@@ -446,10 +487,12 @@
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override bool Equals(object other) {
       return Equals(other as HistogramData);
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public bool Equals(HistogramData other) {
       if (ReferenceEquals(other, null)) {
         return false;
@@ -466,6 +509,7 @@
       return true;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override int GetHashCode() {
       int hash = 1;
       hash ^= bucket_.GetHashCode();
@@ -477,10 +521,12 @@
       return hash;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override string ToString() {
       return pb::JsonFormatter.ToDiagnosticString(this);
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void WriteTo(pb::CodedOutputStream output) {
       bucket_.WriteTo(output, _repeated_bucket_codec);
       if (MinSeen != 0D) {
@@ -505,6 +551,7 @@
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public int CalculateSize() {
       int size = 0;
       size += bucket_.CalculateSize(_repeated_bucket_codec);
@@ -526,6 +573,7 @@
       return size;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void MergeFrom(HistogramData other) {
       if (other == null) {
         return;
@@ -548,6 +596,7 @@
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void MergeFrom(pb::CodedInputStream input) {
       uint tag;
       while ((tag = input.ReadTag()) != 0) {
@@ -586,25 +635,29 @@
 
   }
 
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
   public sealed partial class ClientStats : pb::IMessage<ClientStats> {
     private static readonly pb::MessageParser<ClientStats> _parser = new pb::MessageParser<ClientStats>(() => new ClientStats());
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public static pb::MessageParser<ClientStats> Parser { get { return _parser; } }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public static pbr::MessageDescriptor Descriptor {
       get { return global::Grpc.Testing.StatsReflection.Descriptor.MessageTypes[3]; }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     pbr::MessageDescriptor pb::IMessage.Descriptor {
       get { return Descriptor; }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public ClientStats() {
       OnConstruction();
     }
 
     partial void OnConstruction();
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public ClientStats(ClientStats other) : this() {
       Latencies = other.latencies_ != null ? other.Latencies.Clone() : null;
       timeElapsed_ = other.timeElapsed_;
@@ -612,6 +665,7 @@
       timeSystem_ = other.timeSystem_;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public ClientStats Clone() {
       return new ClientStats(this);
     }
@@ -622,6 +676,7 @@
     /// <summary>
     ///  Latency histogram. Data points are in nanoseconds.
     /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public global::Grpc.Testing.HistogramData Latencies {
       get { return latencies_; }
       set {
@@ -635,6 +690,7 @@
     /// <summary>
     ///  See ServerStats for details.
     /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public double TimeElapsed {
       get { return timeElapsed_; }
       set {
@@ -645,6 +701,7 @@
     /// <summary>Field number for the "time_user" field.</summary>
     public const int TimeUserFieldNumber = 3;
     private double timeUser_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public double TimeUser {
       get { return timeUser_; }
       set {
@@ -655,6 +712,7 @@
     /// <summary>Field number for the "time_system" field.</summary>
     public const int TimeSystemFieldNumber = 4;
     private double timeSystem_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public double TimeSystem {
       get { return timeSystem_; }
       set {
@@ -662,10 +720,12 @@
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override bool Equals(object other) {
       return Equals(other as ClientStats);
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public bool Equals(ClientStats other) {
       if (ReferenceEquals(other, null)) {
         return false;
@@ -680,6 +740,7 @@
       return true;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override int GetHashCode() {
       int hash = 1;
       if (latencies_ != null) hash ^= Latencies.GetHashCode();
@@ -689,10 +750,12 @@
       return hash;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override string ToString() {
       return pb::JsonFormatter.ToDiagnosticString(this);
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void WriteTo(pb::CodedOutputStream output) {
       if (latencies_ != null) {
         output.WriteRawTag(10);
@@ -712,6 +775,7 @@
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public int CalculateSize() {
       int size = 0;
       if (latencies_ != null) {
@@ -729,6 +793,7 @@
       return size;
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void MergeFrom(ClientStats other) {
       if (other == null) {
         return;
@@ -750,6 +815,7 @@
       }
     }
 
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public void MergeFrom(pb::CodedInputStream input) {
       uint tag;
       while ((tag = input.ReadTag()) != 0) {
diff --git a/src/csharp/Grpc.IntegrationTesting/Test.cs b/src/csharp/Grpc.IntegrationTesting/Test.cs
index 9258dc1..d2fa9f8 100644
--- a/src/csharp/Grpc.IntegrationTesting/Test.cs
+++ b/src/csharp/Grpc.IntegrationTesting/Test.cs
@@ -10,7 +10,6 @@
 namespace Grpc.Testing {
 
   /// <summary>Holder for reflection information generated from src/proto/grpc/testing/test.proto</summary>
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
   public static partial class TestReflection {
 
     #region Descriptor
@@ -25,25 +24,28 @@
           string.Concat(
             "CiFzcmMvcHJvdG8vZ3JwYy90ZXN0aW5nL3Rlc3QucHJvdG8SDGdycGMudGVz",
             "dGluZxoic3JjL3Byb3RvL2dycGMvdGVzdGluZy9lbXB0eS5wcm90bxolc3Jj",
-            "L3Byb3RvL2dycGMvdGVzdGluZy9tZXNzYWdlcy5wcm90bzK7BAoLVGVzdFNl",
+            "L3Byb3RvL2dycGMvdGVzdGluZy9tZXNzYWdlcy5wcm90bzLLBQoLVGVzdFNl",
             "cnZpY2USNQoJRW1wdHlDYWxsEhMuZ3JwYy50ZXN0aW5nLkVtcHR5GhMuZ3Jw",
             "Yy50ZXN0aW5nLkVtcHR5EkYKCVVuYXJ5Q2FsbBIbLmdycGMudGVzdGluZy5T",
-            "aW1wbGVSZXF1ZXN0GhwuZ3JwYy50ZXN0aW5nLlNpbXBsZVJlc3BvbnNlEmwK",
-            "E1N0cmVhbWluZ091dHB1dENhbGwSKC5ncnBjLnRlc3RpbmcuU3RyZWFtaW5n",
-            "T3V0cHV0Q2FsbFJlcXVlc3QaKS5ncnBjLnRlc3RpbmcuU3RyZWFtaW5nT3V0",
-            "cHV0Q2FsbFJlc3BvbnNlMAESaQoSU3RyZWFtaW5nSW5wdXRDYWxsEicuZ3Jw",
-            "Yy50ZXN0aW5nLlN0cmVhbWluZ0lucHV0Q2FsbFJlcXVlc3QaKC5ncnBjLnRl",
-            "c3RpbmcuU3RyZWFtaW5nSW5wdXRDYWxsUmVzcG9uc2UoARJpCg5GdWxsRHVw",
-            "bGV4Q2FsbBIoLmdycGMudGVzdGluZy5TdHJlYW1pbmdPdXRwdXRDYWxsUmVx",
-            "dWVzdBopLmdycGMudGVzdGluZy5TdHJlYW1pbmdPdXRwdXRDYWxsUmVzcG9u",
-            "c2UoATABEmkKDkhhbGZEdXBsZXhDYWxsEiguZ3JwYy50ZXN0aW5nLlN0cmVh",
-            "bWluZ091dHB1dENhbGxSZXF1ZXN0GikuZ3JwYy50ZXN0aW5nLlN0cmVhbWlu",
-            "Z091dHB1dENhbGxSZXNwb25zZSgBMAEyVQoUVW5pbXBsZW1lbnRlZFNlcnZp",
-            "Y2USPQoRVW5pbXBsZW1lbnRlZENhbGwSEy5ncnBjLnRlc3RpbmcuRW1wdHka",
-            "Ey5ncnBjLnRlc3RpbmcuRW1wdHkyiQEKEFJlY29ubmVjdFNlcnZpY2USOwoF",
-            "U3RhcnQSHS5ncnBjLnRlc3RpbmcuUmVjb25uZWN0UGFyYW1zGhMuZ3JwYy50",
-            "ZXN0aW5nLkVtcHR5EjgKBFN0b3ASEy5ncnBjLnRlc3RpbmcuRW1wdHkaGy5n",
-            "cnBjLnRlc3RpbmcuUmVjb25uZWN0SW5mb2IGcHJvdG8z"));
+            "aW1wbGVSZXF1ZXN0GhwuZ3JwYy50ZXN0aW5nLlNpbXBsZVJlc3BvbnNlEk8K",
+            "EkNhY2hlYWJsZVVuYXJ5Q2FsbBIbLmdycGMudGVzdGluZy5TaW1wbGVSZXF1",
+            "ZXN0GhwuZ3JwYy50ZXN0aW5nLlNpbXBsZVJlc3BvbnNlEmwKE1N0cmVhbWlu",
+            "Z091dHB1dENhbGwSKC5ncnBjLnRlc3RpbmcuU3RyZWFtaW5nT3V0cHV0Q2Fs",
+            "bFJlcXVlc3QaKS5ncnBjLnRlc3RpbmcuU3RyZWFtaW5nT3V0cHV0Q2FsbFJl",
+            "c3BvbnNlMAESaQoSU3RyZWFtaW5nSW5wdXRDYWxsEicuZ3JwYy50ZXN0aW5n",
+            "LlN0cmVhbWluZ0lucHV0Q2FsbFJlcXVlc3QaKC5ncnBjLnRlc3RpbmcuU3Ry",
+            "ZWFtaW5nSW5wdXRDYWxsUmVzcG9uc2UoARJpCg5GdWxsRHVwbGV4Q2FsbBIo",
+            "LmdycGMudGVzdGluZy5TdHJlYW1pbmdPdXRwdXRDYWxsUmVxdWVzdBopLmdy",
+            "cGMudGVzdGluZy5TdHJlYW1pbmdPdXRwdXRDYWxsUmVzcG9uc2UoATABEmkK",
+            "DkhhbGZEdXBsZXhDYWxsEiguZ3JwYy50ZXN0aW5nLlN0cmVhbWluZ091dHB1",
+            "dENhbGxSZXF1ZXN0GikuZ3JwYy50ZXN0aW5nLlN0cmVhbWluZ091dHB1dENh",
+            "bGxSZXNwb25zZSgBMAESPQoRVW5pbXBsZW1lbnRlZENhbGwSEy5ncnBjLnRl",
+            "c3RpbmcuRW1wdHkaEy5ncnBjLnRlc3RpbmcuRW1wdHkyVQoUVW5pbXBsZW1l",
+            "bnRlZFNlcnZpY2USPQoRVW5pbXBsZW1lbnRlZENhbGwSEy5ncnBjLnRlc3Rp",
+            "bmcuRW1wdHkaEy5ncnBjLnRlc3RpbmcuRW1wdHkyiQEKEFJlY29ubmVjdFNl",
+            "cnZpY2USOwoFU3RhcnQSHS5ncnBjLnRlc3RpbmcuUmVjb25uZWN0UGFyYW1z",
+            "GhMuZ3JwYy50ZXN0aW5nLkVtcHR5EjgKBFN0b3ASEy5ncnBjLnRlc3Rpbmcu",
+            "RW1wdHkaGy5ncnBjLnRlc3RpbmcuUmVjb25uZWN0SW5mb2IGcHJvdG8z"));
       descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
           new pbr::FileDescriptor[] { global::Grpc.Testing.EmptyReflection.Descriptor, global::Grpc.Testing.MessagesReflection.Descriptor, },
           new pbr::GeneratedClrTypeInfo(null, null));
diff --git a/src/csharp/Grpc.IntegrationTesting/TestGrpc.cs b/src/csharp/Grpc.IntegrationTesting/TestGrpc.cs
index 3e149da..8d649bf 100644
--- a/src/csharp/Grpc.IntegrationTesting/TestGrpc.cs
+++ b/src/csharp/Grpc.IntegrationTesting/TestGrpc.cs
@@ -71,6 +71,13 @@
         __Marshaller_SimpleRequest,
         __Marshaller_SimpleResponse);
 
+    static readonly Method<global::Grpc.Testing.SimpleRequest, global::Grpc.Testing.SimpleResponse> __Method_CacheableUnaryCall = new Method<global::Grpc.Testing.SimpleRequest, global::Grpc.Testing.SimpleResponse>(
+        MethodType.Unary,
+        __ServiceName,
+        "CacheableUnaryCall",
+        __Marshaller_SimpleRequest,
+        __Marshaller_SimpleResponse);
+
     static readonly Method<global::Grpc.Testing.StreamingOutputCallRequest, global::Grpc.Testing.StreamingOutputCallResponse> __Method_StreamingOutputCall = new Method<global::Grpc.Testing.StreamingOutputCallRequest, global::Grpc.Testing.StreamingOutputCallResponse>(
         MethodType.ServerStreaming,
         __ServiceName,
@@ -99,6 +106,13 @@
         __Marshaller_StreamingOutputCallRequest,
         __Marshaller_StreamingOutputCallResponse);
 
+    static readonly Method<global::Grpc.Testing.Empty, global::Grpc.Testing.Empty> __Method_UnimplementedCall = new Method<global::Grpc.Testing.Empty, global::Grpc.Testing.Empty>(
+        MethodType.Unary,
+        __ServiceName,
+        "UnimplementedCall",
+        __Marshaller_Empty,
+        __Marshaller_Empty);
+
     /// <summary>Service descriptor</summary>
     public static global::Google.Protobuf.Reflection.ServiceDescriptor Descriptor
     {
@@ -125,6 +139,16 @@
       }
 
       /// <summary>
+      ///  One request followed by one response. Response has cache control
+      ///  headers set such that a caching HTTP proxy (such as GFE) can
+      ///  satisfy subsequent requests.
+      /// </summary>
+      public virtual global::System.Threading.Tasks.Task<global::Grpc.Testing.SimpleResponse> CacheableUnaryCall(global::Grpc.Testing.SimpleRequest request, ServerCallContext context)
+      {
+        throw new RpcException(new Status(StatusCode.Unimplemented, ""));
+      }
+
+      /// <summary>
       ///  One request followed by a sequence of responses (streamed download).
       ///  The server returns the payload with client desired type and sizes.
       /// </summary>
@@ -163,6 +187,15 @@
         throw new RpcException(new Status(StatusCode.Unimplemented, ""));
       }
 
+      /// <summary>
+      ///  The test server will not implement this method. It will be used
+      ///  to test the behavior when clients call unimplemented methods.
+      /// </summary>
+      public virtual global::System.Threading.Tasks.Task<global::Grpc.Testing.Empty> UnimplementedCall(global::Grpc.Testing.Empty request, ServerCallContext context)
+      {
+        throw new RpcException(new Status(StatusCode.Unimplemented, ""));
+      }
+
     }
 
     /// <summary>Client for TestService</summary>
@@ -245,6 +278,42 @@
         return CallInvoker.AsyncUnaryCall(__Method_UnaryCall, null, options, request);
       }
       /// <summary>
+      ///  One request followed by one response. Response has cache control
+      ///  headers set such that a caching HTTP proxy (such as GFE) can
+      ///  satisfy subsequent requests.
+      /// </summary>
+      public virtual global::Grpc.Testing.SimpleResponse CacheableUnaryCall(global::Grpc.Testing.SimpleRequest request, Metadata headers = null, DateTime? deadline = null, CancellationToken cancellationToken = default(CancellationToken))
+      {
+        return CacheableUnaryCall(request, new CallOptions(headers, deadline, cancellationToken));
+      }
+      /// <summary>
+      ///  One request followed by one response. Response has cache control
+      ///  headers set such that a caching HTTP proxy (such as GFE) can
+      ///  satisfy subsequent requests.
+      /// </summary>
+      public virtual global::Grpc.Testing.SimpleResponse CacheableUnaryCall(global::Grpc.Testing.SimpleRequest request, CallOptions options)
+      {
+        return CallInvoker.BlockingUnaryCall(__Method_CacheableUnaryCall, null, options, request);
+      }
+      /// <summary>
+      ///  One request followed by one response. Response has cache control
+      ///  headers set such that a caching HTTP proxy (such as GFE) can
+      ///  satisfy subsequent requests.
+      /// </summary>
+      public virtual AsyncUnaryCall<global::Grpc.Testing.SimpleResponse> CacheableUnaryCallAsync(global::Grpc.Testing.SimpleRequest request, Metadata headers = null, DateTime? deadline = null, CancellationToken cancellationToken = default(CancellationToken))
+      {
+        return CacheableUnaryCallAsync(request, new CallOptions(headers, deadline, cancellationToken));
+      }
+      /// <summary>
+      ///  One request followed by one response. Response has cache control
+      ///  headers set such that a caching HTTP proxy (such as GFE) can
+      ///  satisfy subsequent requests.
+      /// </summary>
+      public virtual AsyncUnaryCall<global::Grpc.Testing.SimpleResponse> CacheableUnaryCallAsync(global::Grpc.Testing.SimpleRequest request, CallOptions options)
+      {
+        return CallInvoker.AsyncUnaryCall(__Method_CacheableUnaryCall, null, options, request);
+      }
+      /// <summary>
       ///  One request followed by a sequence of responses (streamed download).
       ///  The server returns the payload with client desired type and sizes.
       /// </summary>
@@ -314,6 +383,39 @@
       {
         return CallInvoker.AsyncDuplexStreamingCall(__Method_HalfDuplexCall, null, options);
       }
+      /// <summary>
+      ///  The test server will not implement this method. It will be used
+      ///  to test the behavior when clients call unimplemented methods.
+      /// </summary>
+      public virtual global::Grpc.Testing.Empty UnimplementedCall(global::Grpc.Testing.Empty request, Metadata headers = null, DateTime? deadline = null, CancellationToken cancellationToken = default(CancellationToken))
+      {
+        return UnimplementedCall(request, new CallOptions(headers, deadline, cancellationToken));
+      }
+      /// <summary>
+      ///  The test server will not implement this method. It will be used
+      ///  to test the behavior when clients call unimplemented methods.
+      /// </summary>
+      public virtual global::Grpc.Testing.Empty UnimplementedCall(global::Grpc.Testing.Empty request, CallOptions options)
+      {
+        return CallInvoker.BlockingUnaryCall(__Method_UnimplementedCall, null, options, request);
+      }
+      /// <summary>
+      ///  The test server will not implement this method. It will be used
+      ///  to test the behavior when clients call unimplemented methods.
+      /// </summary>
+      public virtual AsyncUnaryCall<global::Grpc.Testing.Empty> UnimplementedCallAsync(global::Grpc.Testing.Empty request, Metadata headers = null, DateTime? deadline = null, CancellationToken cancellationToken = default(CancellationToken))
+      {
+        return UnimplementedCallAsync(request, new CallOptions(headers, deadline, cancellationToken));
+      }
+      /// <summary>
+      ///  The test server will not implement this method. It will be used
+      ///  to test the behavior when clients call unimplemented methods.
+      /// </summary>
+      public virtual AsyncUnaryCall<global::Grpc.Testing.Empty> UnimplementedCallAsync(global::Grpc.Testing.Empty request, CallOptions options)
+      {
+        return CallInvoker.AsyncUnaryCall(__Method_UnimplementedCall, null, options, request);
+      }
+      /// <summary>Creates a new instance of client from given <c>ClientBaseConfiguration</c>.</summary>
       protected override TestServiceClient NewInstance(ClientBaseConfiguration configuration)
       {
         return new TestServiceClient(configuration);
@@ -326,10 +428,12 @@
       return ServerServiceDefinition.CreateBuilder()
           .AddMethod(__Method_EmptyCall, serviceImpl.EmptyCall)
           .AddMethod(__Method_UnaryCall, serviceImpl.UnaryCall)
+          .AddMethod(__Method_CacheableUnaryCall, serviceImpl.CacheableUnaryCall)
           .AddMethod(__Method_StreamingOutputCall, serviceImpl.StreamingOutputCall)
           .AddMethod(__Method_StreamingInputCall, serviceImpl.StreamingInputCall)
           .AddMethod(__Method_FullDuplexCall, serviceImpl.FullDuplexCall)
-          .AddMethod(__Method_HalfDuplexCall, serviceImpl.HalfDuplexCall).Build();
+          .AddMethod(__Method_HalfDuplexCall, serviceImpl.HalfDuplexCall)
+          .AddMethod(__Method_UnimplementedCall, serviceImpl.UnimplementedCall).Build();
     }
 
   }
@@ -420,6 +524,7 @@
       {
         return CallInvoker.AsyncUnaryCall(__Method_UnimplementedCall, null, options, request);
       }
+      /// <summary>Creates a new instance of client from given <c>ClientBaseConfiguration</c>.</summary>
       protected override UnimplementedServiceClient NewInstance(ClientBaseConfiguration configuration)
       {
         return new UnimplementedServiceClient(configuration);
@@ -535,6 +640,7 @@
       {
         return CallInvoker.AsyncUnaryCall(__Method_Stop, null, options, request);
       }
+      /// <summary>Creates a new instance of client from given <c>ClientBaseConfiguration</c>.</summary>
       protected override ReconnectServiceClient NewInstance(ClientBaseConfiguration configuration)
       {
         return new ReconnectServiceClient(configuration);
diff --git a/src/csharp/ext/grpc_csharp_ext.c b/src/csharp/ext/grpc_csharp_ext.c
index 068bf70..9a5d786 100644
--- a/src/csharp/ext/grpc_csharp_ext.c
+++ b/src/csharp/ext/grpc_csharp_ext.c
@@ -84,11 +84,6 @@
     size_t status_details_capacity;
   } recv_status_on_client;
   int recv_close_on_server_cancelled;
-  struct {
-    grpc_call *call;
-    grpc_call_details call_details;
-    grpc_metadata_array request_metadata;
-  } server_rpc_new;
 } grpcsharp_batch_context;
 
 GPR_EXPORT grpcsharp_batch_context *GPR_CALLTYPE grpcsharp_batch_context_create() {
@@ -97,6 +92,18 @@
   return ctx;
 }
 
+typedef struct {
+  grpc_call *call;
+  grpc_call_details call_details;
+  grpc_metadata_array request_metadata;
+} grpcsharp_request_call_context;
+
+GPR_EXPORT grpcsharp_request_call_context *GPR_CALLTYPE grpcsharp_request_call_context_create() {
+  grpcsharp_request_call_context *ctx = gpr_malloc(sizeof(grpcsharp_request_call_context));
+  memset(ctx, 0, sizeof(grpcsharp_request_call_context));
+  return ctx;
+}
+
 /*
  * Destroys array->metadata.
  * The array pointer itself is not freed.
@@ -230,13 +237,20 @@
       &(ctx->recv_status_on_client.trailing_metadata));
   gpr_free((void *)ctx->recv_status_on_client.status_details);
 
+  gpr_free(ctx);
+}
+
+GPR_EXPORT void GPR_CALLTYPE grpcsharp_request_call_context_destroy(grpcsharp_request_call_context *ctx) {
+  if (!ctx) {
+    return;
+  }
   /* NOTE: ctx->server_rpc_new.call is not destroyed because callback handler is
      supposed
      to take its ownership. */
 
-  grpc_call_details_destroy(&(ctx->server_rpc_new.call_details));
+  grpc_call_details_destroy(&(ctx->call_details));
   grpcsharp_metadata_array_destroy_metadata_only(
-      &(ctx->server_rpc_new.request_metadata));
+      &(ctx->request_metadata));
 
   gpr_free(ctx);
 }
@@ -303,32 +317,32 @@
   return &(ctx->recv_status_on_client.trailing_metadata);
 }
 
-GPR_EXPORT grpc_call *GPR_CALLTYPE grpcsharp_batch_context_server_rpc_new_call(
-    const grpcsharp_batch_context *ctx) {
-  return ctx->server_rpc_new.call;
+GPR_EXPORT grpc_call *GPR_CALLTYPE grpcsharp_request_call_context_call(
+    const grpcsharp_request_call_context *ctx) {
+  return ctx->call;
 }
 
 GPR_EXPORT const char *GPR_CALLTYPE
-grpcsharp_batch_context_server_rpc_new_method(
-    const grpcsharp_batch_context *ctx) {
-  return ctx->server_rpc_new.call_details.method;
+grpcsharp_request_call_context_method(
+    const grpcsharp_request_call_context *ctx) {
+  return ctx->call_details.method;
 }
 
-GPR_EXPORT const char *GPR_CALLTYPE grpcsharp_batch_context_server_rpc_new_host(
-    const grpcsharp_batch_context *ctx) {
-  return ctx->server_rpc_new.call_details.host;
+GPR_EXPORT const char *GPR_CALLTYPE grpcsharp_request_call_context_host(
+    const grpcsharp_request_call_context *ctx) {
+  return ctx->call_details.host;
 }
 
 GPR_EXPORT gpr_timespec GPR_CALLTYPE
-grpcsharp_batch_context_server_rpc_new_deadline(
-    const grpcsharp_batch_context *ctx) {
-  return ctx->server_rpc_new.call_details.deadline;
+grpcsharp_request_call_context_deadline(
+    const grpcsharp_request_call_context *ctx) {
+  return ctx->call_details.deadline;
 }
 
 GPR_EXPORT const grpc_metadata_array *GPR_CALLTYPE
-grpcsharp_batch_context_server_rpc_new_request_metadata(
-    const grpcsharp_batch_context *ctx) {
-  return &(ctx->server_rpc_new.request_metadata);
+grpcsharp_request_call_context_request_metadata(
+    const grpcsharp_request_call_context *ctx) {
+  return &(ctx->request_metadata);
 }
 
 GPR_EXPORT int32_t GPR_CALLTYPE
@@ -853,10 +867,10 @@
 
 GPR_EXPORT grpc_call_error GPR_CALLTYPE
 grpcsharp_server_request_call(grpc_server *server, grpc_completion_queue *cq,
-                              grpcsharp_batch_context *ctx) {
+                              grpcsharp_request_call_context *ctx) {
   return grpc_server_request_call(
-      server, &(ctx->server_rpc_new.call), &(ctx->server_rpc_new.call_details),
-      &(ctx->server_rpc_new.request_metadata), cq, cq, ctx);
+      server, &(ctx->call), &(ctx->call_details),
+      &(ctx->request_metadata), cq, cq, ctx);
 }
 
 /* Security */
diff --git a/src/node/ext/call.cc b/src/node/ext/call.cc
index 9f023b5..b48a7bd 100644
--- a/src/node/ext/call.cc
+++ b/src/node/ext/call.cc
@@ -45,6 +45,7 @@
 #include "byte_buffer.h"
 #include "call.h"
 #include "channel.h"
+#include "completion_queue.h"
 #include "completion_queue_async_worker.h"
 #include "call_credentials.h"
 #include "timeval.h"
@@ -222,6 +223,9 @@
     out->data.send_initial_metadata.metadata = array.metadata;
     return true;
   }
+  bool IsFinalOp() {
+    return false;
+  }
  protected:
   std::string GetTypeString() const {
     return "send_metadata";
@@ -263,6 +267,9 @@
     resources->handles.push_back(unique_ptr<PersistentValue>(handle));
     return true;
   }
+  bool IsFinalOp() {
+    return false;
+  }
  protected:
   std::string GetTypeString() const {
     return "send_message";
@@ -281,6 +288,9 @@
                shared_ptr<Resources> resources) {
     return true;
   }
+  bool IsFinalOp() {
+    return false;
+  }
  protected:
   std::string GetTypeString() const {
     return "client_close";
@@ -341,6 +351,9 @@
     out->data.send_status_from_server.status_details = **str;
     return true;
   }
+  bool IsFinalOp() {
+    return true;
+  }
  protected:
   std::string GetTypeString() const {
     return "send_status";
@@ -367,6 +380,9 @@
     out->data.recv_initial_metadata = &recv_metadata;
     return true;
   }
+  bool IsFinalOp() {
+    return false;
+  }
 
  protected:
   std::string GetTypeString() const {
@@ -397,6 +413,9 @@
     out->data.recv_message = &recv_message;
     return true;
   }
+  bool IsFinalOp() {
+    return false;
+  }
 
  protected:
   std::string GetTypeString() const {
@@ -442,6 +461,9 @@
              ParseMetadata(&metadata_array));
     return scope.Escape(status_obj);
   }
+  bool IsFinalOp() {
+    return true;
+  }
  protected:
   std::string GetTypeString() const {
     return "status";
@@ -465,6 +487,9 @@
     out->data.recv_close_on_server.cancelled = &cancelled;
     return true;
   }
+  bool IsFinalOp() {
+    return false;
+  }
 
  protected:
   std::string GetTypeString() const {
@@ -476,8 +501,8 @@
 };
 
 tag::tag(Callback *callback, OpVec *ops,
-         shared_ptr<Resources> resources) :
-    callback(callback), ops(ops), resources(resources){
+         shared_ptr<Resources> resources, Call *call) :
+    callback(callback), ops(ops), resources(resources), call(call){
 }
 
 tag::~tag() {
@@ -502,16 +527,36 @@
   return tag_struct->callback;
 }
 
+void CompleteTag(void *tag) {
+  struct tag *tag_struct = reinterpret_cast<struct tag *>(tag);
+  bool is_final_op = false;
+  if (tag_struct->call == NULL) {
+    return;
+  }
+  for (vector<unique_ptr<Op> >::iterator it = tag_struct->ops->begin();
+       it != tag_struct->ops->end(); ++it) {
+    Op *op_ptr = it->get();
+    if (op_ptr->IsFinalOp()) {
+      is_final_op = true;
+    }
+  }
+  tag_struct->call->CompleteBatch(is_final_op);
+}
+
 void DestroyTag(void *tag) {
   struct tag *tag_struct = reinterpret_cast<struct tag *>(tag);
   delete tag_struct;
 }
 
-Call::Call(grpc_call *call) : wrapped_call(call) {
+Call::Call(grpc_call *call) : wrapped_call(call),
+                              pending_batches(0),
+                              has_final_op_completed(false) {
 }
 
 Call::~Call() {
-  grpc_call_destroy(wrapped_call);
+  if (wrapped_call != NULL) {
+    grpc_call_destroy(wrapped_call);
+  }
 }
 
 void Call::Init(Local<Object> exports) {
@@ -552,6 +597,17 @@
   }
 }
 
+void Call::CompleteBatch(bool is_final_op) {
+  if (is_final_op) {
+    this->has_final_op_completed = true;
+  }
+  this->pending_batches--;
+  if (this->has_final_op_completed && this->pending_batches == 0) {
+    grpc_call_destroy(this->wrapped_call);
+    this->wrapped_call = NULL;
+  }
+}
+
 NAN_METHOD(Call::New) {
   if (info.IsConstructCall()) {
     Call *call;
@@ -602,12 +658,12 @@
         Utf8String host_override(info[3]);
         wrapped_call = grpc_channel_create_call(
             wrapped_channel, parent_call, propagate_flags,
-            CompletionQueueAsyncWorker::GetQueue(), *method,
+            GetCompletionQueue(), *method,
             *host_override, MillisecondsToTimespec(deadline), NULL);
       } else if (info[3]->IsUndefined() || info[3]->IsNull()) {
         wrapped_call = grpc_channel_create_call(
             wrapped_channel, parent_call, propagate_flags,
-            CompletionQueueAsyncWorker::GetQueue(), *method,
+            GetCompletionQueue(), *method,
             NULL, MillisecondsToTimespec(deadline), NULL);
       } else {
         return Nan::ThrowTypeError("Call's fourth argument must be a string");
@@ -697,11 +753,12 @@
   Callback *callback = new Callback(callback_func);
   grpc_call_error error = grpc_call_start_batch(
       call->wrapped_call, &ops[0], nops, new struct tag(
-          callback, op_vector.release(), resources), NULL);
+          callback, op_vector.release(), resources, call), NULL);
   if (error != GRPC_CALL_OK) {
     return Nan::ThrowError(nanErrorWithCode("startBatch failed", error));
   }
-  CompletionQueueAsyncWorker::Next();
+  call->pending_batches++;
+  CompletionQueueNext();
 }
 
 NAN_METHOD(Call::Cancel) {
diff --git a/src/node/ext/call.h b/src/node/ext/call.h
index 1e3c3ba..31c6566 100644
--- a/src/node/ext/call.h
+++ b/src/node/ext/call.h
@@ -66,34 +66,6 @@
                          grpc_metadata_array *array,
                          shared_ptr<Resources> resources);
 
-class Op {
- public:
-  virtual v8::Local<v8::Value> GetNodeValue() const = 0;
-  virtual bool ParseOp(v8::Local<v8::Value> value, grpc_op *out,
-                       shared_ptr<Resources> resources) = 0;
-  virtual ~Op();
-  v8::Local<v8::Value> GetOpType() const;
-
- protected:
-  virtual std::string GetTypeString() const = 0;
-};
-
-typedef std::vector<unique_ptr<Op>> OpVec;
-struct tag {
-  tag(Nan::Callback *callback, OpVec *ops,
-      shared_ptr<Resources> resources);
-  ~tag();
-  Nan::Callback *callback;
-  OpVec *ops;
-  shared_ptr<Resources> resources;
-};
-
-v8::Local<v8::Value> GetTagNodeValue(void *tag);
-
-Nan::Callback *GetTagCallback(void *tag);
-
-void DestroyTag(void *tag);
-
 /* Wrapper class for grpc_call structs. */
 class Call : public Nan::ObjectWrap {
  public:
@@ -102,6 +74,8 @@
   /* Wrap a grpc_call struct in a javascript object */
   static v8::Local<v8::Value> WrapStruct(grpc_call *call);
 
+  void CompleteBatch(bool is_final_op);
+
  private:
   explicit Call(grpc_call *call);
   ~Call();
@@ -121,8 +95,46 @@
   static Nan::Persistent<v8::FunctionTemplate> fun_tpl;
 
   grpc_call *wrapped_call;
+  // The number of ops that were started but not completed on this call
+  int pending_batches;
+  /* Indicates whether the "final" op on a call has completed. For a client
+     call, this is GRPC_OP_RECV_STATUS_ON_CLIENT and for a server call, this
+     is GRPC_OP_SEND_STATUS_FROM_SERVER */
+  bool has_final_op_completed;
 };
 
+class Op {
+ public:
+  virtual v8::Local<v8::Value> GetNodeValue() const = 0;
+  virtual bool ParseOp(v8::Local<v8::Value> value, grpc_op *out,
+                       shared_ptr<Resources> resources) = 0;
+  virtual ~Op();
+  v8::Local<v8::Value> GetOpType() const;
+  virtual bool IsFinalOp() = 0;
+
+ protected:
+  virtual std::string GetTypeString() const = 0;
+};
+
+typedef std::vector<unique_ptr<Op>> OpVec;
+struct tag {
+  tag(Nan::Callback *callback, OpVec *ops,
+      shared_ptr<Resources> resources, Call *call);
+  ~tag();
+  Nan::Callback *callback;
+  OpVec *ops;
+  shared_ptr<Resources> resources;
+  Call *call;
+};
+
+v8::Local<v8::Value> GetTagNodeValue(void *tag);
+
+Nan::Callback *GetTagCallback(void *tag);
+
+void DestroyTag(void *tag);
+
+void CompleteTag(void *tag);
+
 }  // namespace node
 }  // namespace grpc
 
diff --git a/src/node/ext/channel.cc b/src/node/ext/channel.cc
index 00fcca6..c402817 100644
--- a/src/node/ext/channel.cc
+++ b/src/node/ext/channel.cc
@@ -41,6 +41,7 @@
 #include "grpc/grpc_security.h"
 #include "call.h"
 #include "channel.h"
+#include "completion_queue.h"
 #include "completion_queue_async_worker.h"
 #include "channel_credentials.h"
 #include "timeval.h"
@@ -140,6 +141,7 @@
 Channel::Channel(grpc_channel *channel) : wrapped_channel(channel) {}
 
 Channel::~Channel() {
+  gpr_log(GPR_DEBUG, "Destroying channel");
   if (wrapped_channel != NULL) {
     grpc_channel_destroy(wrapped_channel);
   }
@@ -276,11 +278,11 @@
   unique_ptr<OpVec> ops(new OpVec());
   grpc_channel_watch_connectivity_state(
       channel->wrapped_channel, last_state, MillisecondsToTimespec(deadline),
-      CompletionQueueAsyncWorker::GetQueue(),
+      GetCompletionQueue(),
       new struct tag(callback,
                      ops.release(),
-                     shared_ptr<Resources>(nullptr)));
-  CompletionQueueAsyncWorker::Next();
+                     shared_ptr<Resources>(nullptr), NULL));
+  CompletionQueueNext();
 }
 
 }  // namespace node
diff --git a/src/node/ext/completion_queue.cc b/src/node/ext/completion_queue.cc
new file mode 100644
index 0000000..fcfa77b
--- /dev/null
+++ b/src/node/ext/completion_queue.cc
@@ -0,0 +1,114 @@
+/*
+ *
+ * Copyright 2016, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ *     * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+#include <uv.h>
+#include <node.h>
+#include <v8.h>
+#include <grpc/grpc.h>
+
+#include "call.h"
+#include "completion_queue.h"
+#include "completion_queue_async_worker.h"
+
+namespace grpc {
+namespace node {
+
+using v8::Local;
+using v8::Object;
+using v8::Value;
+
+grpc_completion_queue *queue;
+uv_prepare_t prepare;
+int pending_batches;
+
+void drain_completion_queue(uv_prepare_t *handle) {
+  Nan::HandleScope scope;
+  grpc_event event;
+  (void)handle;
+  do {
+    event = grpc_completion_queue_next(
+        queue, gpr_inf_past(GPR_CLOCK_MONOTONIC), NULL);
+
+    if (event.type == GRPC_OP_COMPLETE) {
+      Nan::Callback *callback = grpc::node::GetTagCallback(event.tag);
+      if (event.success) {
+        Local<Value> argv[] = {Nan::Null(),
+                             grpc::node::GetTagNodeValue(event.tag)};
+        callback->Call(2, argv);
+      } else {
+        Local<Value> argv[] = {Nan::Error(
+            "The async function encountered an error")};
+        callback->Call(1, argv);
+      }
+      grpc::node::CompleteTag(event.tag);
+      grpc::node::DestroyTag(event.tag);
+      pending_batches--;
+      if (pending_batches == 0) {
+        uv_prepare_stop(&prepare);
+      }
+    }
+  } while (event.type != GRPC_QUEUE_TIMEOUT);
+}
+
+grpc_completion_queue *GetCompletionQueue() {
+#ifdef GRPC_UV
+  return queue;
+#else
+  return CompletionQueueAsyncWorker::GetQueue();
+#endif
+}
+
+void CompletionQueueNext() {
+#ifdef GRPC_UV
+  if (pending_batches == 0) {
+    GPR_ASSERT(!uv_is_active((uv_handle_t *)&prepare));
+    uv_prepare_start(&prepare, drain_completion_queue);
+  }
+  pending_batches++;
+#else
+  CompletionQueueAsyncWorker::Next();
+#endif
+}
+
+void CompletionQueueInit(Local<Object> exports) {
+#ifdef GRPC_UV
+  queue = grpc_completion_queue_create(NULL);
+  uv_prepare_init(uv_default_loop(), &prepare);
+  pending_batches = 0;
+#else
+  CompletionQueueAsyncWorker::Init(exports);
+#endif
+}
+
+}  // namespace node
+}  // namespace grpc
diff --git a/src/core/ext/client_config/default_initial_connect_string.c b/src/node/ext/completion_queue.h
similarity index 82%
copy from src/core/ext/client_config/default_initial_connect_string.c
copy to src/node/ext/completion_queue.h
index a70da4a..bf280f7 100644
--- a/src/core/ext/client_config/default_initial_connect_string.c
+++ b/src/node/ext/completion_queue.h
@@ -1,6 +1,6 @@
 /*
  *
- * Copyright 2015, Google Inc.
+ * Copyright 2016, Google Inc.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -31,9 +31,16 @@
  *
  */
 
-#include <grpc/support/slice.h>
-#include "src/core/lib/iomgr/sockaddr.h"
+#include <v8.h>
 
-void grpc_set_default_initial_connect_string(struct sockaddr **addr,
-                                             size_t *addr_len,
-                                             gpr_slice *initial_str) {}
+namespace grpc {
+namespace node {
+
+grpc_completion_queue *GetCompletionQueue();
+
+void CompletionQueueNext();
+
+void CompletionQueueInit(v8::Local<v8::Object> exports);
+
+}  // namespace node
+}  // namespace grpc
diff --git a/src/node/ext/completion_queue_async_worker.cc b/src/node/ext/completion_queue_async_worker.cc
index 619ea41..f5e03b2 100644
--- a/src/node/ext/completion_queue_async_worker.cc
+++ b/src/node/ext/completion_queue_async_worker.cc
@@ -74,6 +74,7 @@
 grpc_completion_queue *CompletionQueueAsyncWorker::GetQueue() { return queue; }
 
 void CompletionQueueAsyncWorker::Next() {
+#ifndef GRPC_UV
   Nan::HandleScope scope;
   if (current_threads < max_queue_threads) {
     current_threads += 1;
@@ -85,6 +86,7 @@
   GPR_ASSERT(current_threads <= max_queue_threads);
   GPR_ASSERT((current_threads == max_queue_threads) ||
              (waiting_next_calls == 0));
+#endif
 }
 
 void CompletionQueueAsyncWorker::Init(Local<Object> exports) {
diff --git a/src/node/ext/node_grpc.cc b/src/node/ext/node_grpc.cc
index 745b502..9b9eee8 100644
--- a/src/node/ext/node_grpc.cc
+++ b/src/node/ext/node_grpc.cc
@@ -42,6 +42,13 @@
 #include "grpc/support/log.h"
 #include "grpc/support/time.h"
 
+// TODO(murgatroid99): Remove this when the endpoint API becomes public
+#ifdef GRPC_UV
+extern "C" {
+#include "src/core/lib/iomgr/pollset_uv.h"
+}
+#endif
+
 #include "call.h"
 #include "call_credentials.h"
 #include "channel.h"
@@ -50,6 +57,7 @@
 #include "completion_queue_async_worker.h"
 #include "server_credentials.h"
 #include "timeval.h"
+#include "completion_queue.h"
 
 using v8::FunctionTemplate;
 using v8::Local;
@@ -261,10 +269,10 @@
   Nan::HandleScope scope;
   Local<Object> log_verbosity = Nan::New<Object>();
   Nan::Set(exports, Nan::New("logVerbosity").ToLocalChecked(), log_verbosity);
-  Local<Value> DEBUG(Nan::New<Uint32, uint32_t>(GPR_LOG_SEVERITY_DEBUG));
-  Nan::Set(log_verbosity, Nan::New("DEBUG").ToLocalChecked(), DEBUG);
-  Local<Value> INFO(Nan::New<Uint32, uint32_t>(GPR_LOG_SEVERITY_INFO));
-  Nan::Set(log_verbosity, Nan::New("INFO").ToLocalChecked(), INFO);
+  Local<Value> LOG_DEBUG(Nan::New<Uint32, uint32_t>(GPR_LOG_SEVERITY_DEBUG));
+  Nan::Set(log_verbosity, Nan::New("DEBUG").ToLocalChecked(), LOG_DEBUG);
+  Local<Value> LOG_INFO(Nan::New<Uint32, uint32_t>(GPR_LOG_SEVERITY_INFO));
+  Nan::Set(log_verbosity, Nan::New("INFO").ToLocalChecked(), LOG_INFO);
   Local<Value> LOG_ERROR(Nan::New<Uint32, uint32_t>(GPR_LOG_SEVERITY_ERROR));
   Nan::Set(log_verbosity, Nan::New("ERROR").ToLocalChecked(), LOG_ERROR);
 }
@@ -428,14 +436,19 @@
   InitWriteFlags(exports);
   InitLogConstants(exports);
 
+#ifdef GRPC_UV
+  grpc_pollset_work_run_loop = 0;
+#endif
+
   grpc::node::Call::Init(exports);
   grpc::node::CallCredentials::Init(exports);
   grpc::node::Channel::Init(exports);
   grpc::node::ChannelCredentials::Init(exports);
   grpc::node::Server::Init(exports);
-  grpc::node::CompletionQueueAsyncWorker::Init(exports);
   grpc::node::ServerCredentials::Init(exports);
 
+  grpc::node::CompletionQueueInit(exports);
+
   // Attach a few utility functions directly to the module
   Nan::Set(exports, Nan::New("metadataKeyIsLegal").ToLocalChecked(),
            Nan::GetFunction(
diff --git a/src/node/ext/server.cc b/src/node/ext/server.cc
index dd1b777..29f31ff 100644
--- a/src/node/ext/server.cc
+++ b/src/node/ext/server.cc
@@ -40,6 +40,7 @@
 
 #include <vector>
 #include "call.h"
+#include "completion_queue.h"
 #include "completion_queue_async_worker.h"
 #include "grpc/grpc.h"
 #include "grpc/grpc_security.h"
@@ -64,6 +65,7 @@
 using v8::Boolean;
 using v8::Date;
 using v8::Exception;
+using v8::External;
 using v8::Function;
 using v8::FunctionTemplate;
 using v8::Local;
@@ -75,6 +77,8 @@
 Nan::Callback *Server::constructor;
 Persistent<FunctionTemplate> Server::fun_tpl;
 
+static Callback *shutdown_callback;
+
 class NewCallOp : public Op {
  public:
   NewCallOp() {
@@ -111,6 +115,9 @@
                shared_ptr<Resources> resources) {
     return true;
   }
+  bool IsFinalOp() {
+    return false;
+  }
 
   grpc_call *call;
   grpc_call_details details;
@@ -120,17 +127,50 @@
   std::string GetTypeString() const { return "new_call"; }
 };
 
+class ServerShutdownOp : public Op {
+ public:
+  ServerShutdownOp(grpc_server *server): server(server) {
+  }
+
+  ~ServerShutdownOp() {
+  }
+
+  Local<Value> GetNodeValue() const {
+    return Nan::New<External>(reinterpret_cast<void *>(server));
+  }
+
+  bool ParseOp(Local<Value> value, grpc_op *out,
+               shared_ptr<Resources> resources) {
+    return true;
+  }
+  bool IsFinalOp() {
+    return false;
+  }
+
+  grpc_server *server;
+
+ protected:
+  std::string GetTypeString() const { return "shutdown"; }
+};
+
+NAN_METHOD(ServerShutdownCallback) {
+  if (!info[0]->IsNull()) {
+    return Nan::ThrowError("forceShutdown failed somehow");
+  }
+  MaybeLocal<Object> maybe_result = Nan::To<Object>(info[1]);
+  Local<Object> result = maybe_result.ToLocalChecked();
+  Local<Value> server_val = Nan::Get(
+      result, Nan::New("shutdown").ToLocalChecked()).ToLocalChecked();
+  Local<External> server_extern = server_val.As<External>();
+  grpc_server *server = reinterpret_cast<grpc_server *>(server_extern->Value());
+  grpc_server_destroy(server);
+}
+
 Server::Server(grpc_server *server) : wrapped_server(server) {
-  shutdown_queue = grpc_completion_queue_create(NULL);
-  grpc_server_register_non_listening_completion_queue(server, shutdown_queue,
-                                                      NULL);
 }
 
 Server::~Server() {
   this->ShutdownServer();
-  grpc_completion_queue_shutdown(this->shutdown_queue);
-  grpc_server_destroy(this->wrapped_server);
-  grpc_completion_queue_destroy(this->shutdown_queue);
 }
 
 void Server::Init(Local<Object> exports) {
@@ -147,6 +187,11 @@
   Local<Function> ctr = Nan::GetFunction(tpl).ToLocalChecked();
   Nan::Set(exports, Nan::New("Server").ToLocalChecked(), ctr);
   constructor = new Callback(ctr);
+
+  Local<FunctionTemplate>callback_tpl =
+      Nan::New<FunctionTemplate>(ServerShutdownCallback);
+  shutdown_callback = new Callback(
+      Nan::GetFunction(callback_tpl).ToLocalChecked());
 }
 
 bool Server::HasInstance(Local<Value> val) {
@@ -155,11 +200,19 @@
 }
 
 void Server::ShutdownServer() {
-  grpc_server_shutdown_and_notify(this->wrapped_server, this->shutdown_queue,
-                                  NULL);
-  grpc_server_cancel_all_calls(this->wrapped_server);
-  grpc_completion_queue_pluck(this->shutdown_queue, NULL,
-                              gpr_inf_future(GPR_CLOCK_REALTIME), NULL);
+  if (this->wrapped_server != NULL) {
+    ServerShutdownOp *op = new ServerShutdownOp(this->wrapped_server);
+    unique_ptr<OpVec> ops(new OpVec());
+    ops->push_back(unique_ptr<Op>(op));
+
+    grpc_server_shutdown_and_notify(
+        this->wrapped_server, GetCompletionQueue(),
+        new struct tag(new Callback(**shutdown_callback), ops.release(),
+                       shared_ptr<Resources>(nullptr), NULL));
+    grpc_server_cancel_all_calls(this->wrapped_server);
+    CompletionQueueNext();
+    this->wrapped_server = NULL;
+  }
 }
 
 NAN_METHOD(Server::New) {
@@ -179,7 +232,7 @@
     }
   }
   grpc_server *wrapped_server;
-  grpc_completion_queue *queue = CompletionQueueAsyncWorker::GetQueue();
+  grpc_completion_queue *queue = GetCompletionQueue();
   grpc_channel_args *channel_args;
   if (!ParseChannelArgs(info[0], &channel_args)) {
     DeallocateChannelArgs(channel_args);
@@ -205,14 +258,14 @@
   ops->push_back(unique_ptr<Op>(op));
   grpc_call_error error = grpc_server_request_call(
       server->wrapped_server, &op->call, &op->details, &op->request_metadata,
-      CompletionQueueAsyncWorker::GetQueue(),
-      CompletionQueueAsyncWorker::GetQueue(),
+      GetCompletionQueue(),
+      GetCompletionQueue(),
       new struct tag(new Callback(info[0].As<Function>()), ops.release(),
-                     shared_ptr<Resources>(nullptr)));
+                     shared_ptr<Resources>(nullptr), NULL));
   if (error != GRPC_CALL_OK) {
     return Nan::ThrowError(nanErrorWithCode("requestCall failed", error));
   }
-  CompletionQueueAsyncWorker::Next();
+  CompletionQueueNext();
 }
 
 NAN_METHOD(Server::AddHttp2Port) {
@@ -259,10 +312,10 @@
   Server *server = ObjectWrap::Unwrap<Server>(info.This());
   unique_ptr<OpVec> ops(new OpVec());
   grpc_server_shutdown_and_notify(
-      server->wrapped_server, CompletionQueueAsyncWorker::GetQueue(),
+      server->wrapped_server, GetCompletionQueue(),
       new struct tag(new Nan::Callback(info[0].As<Function>()), ops.release(),
-                     shared_ptr<Resources>(nullptr)));
-  CompletionQueueAsyncWorker::Next();
+                     shared_ptr<Resources>(nullptr), NULL));
+  CompletionQueueNext();
 }
 
 NAN_METHOD(Server::ForceShutdown) {
diff --git a/src/node/ext/server.h b/src/node/ext/server.h
index ab5fc21..9e6a7bd 100644
--- a/src/node/ext/server.h
+++ b/src/node/ext/server.h
@@ -73,7 +73,6 @@
   static Nan::Persistent<v8::FunctionTemplate> fun_tpl;
 
   grpc_server *wrapped_server;
-  grpc_completion_queue *shutdown_queue;
 };
 
 }  // namespace node
diff --git a/src/node/index.js b/src/node/index.js
index 9fb6faa..a294aad 100644
--- a/src/node/index.js
+++ b/src/node/index.js
@@ -219,3 +219,7 @@
  * @see module:src/client.waitForClientReady
  */
 exports.waitForClientReady = client.waitForClientReady;
+
+exports.closeClient = function closeClient(client_obj) {
+  client.getClientChannel(client_obj).close();
+};
diff --git a/src/node/interop/interop_client.js b/src/node/interop/interop_client.js
index e8f2d37..a59a66b 100644
--- a/src/node/interop/interop_client.js
+++ b/src/node/interop/interop_client.js
@@ -375,7 +375,8 @@
   duplex.end();
 }
 
-function unimplementedMethod(client, done) {
+// NOTE: the client param to this function is from UnimplementedService
+function unimplementedService(client, done) {
   client.unimplementedCall({}, function(err, resp) {
     assert(err);
     assert.strictEqual(err.code, grpc.status.UNIMPLEMENTED);
@@ -384,6 +385,15 @@
   });
 }
 
+// NOTE: the client param to this function is from TestService
+function unimplementedMethod(client, done) {
+  client.unimplementedCall({}, function(err, resp) {
+    assert(err);
+    assert.strictEqual(err.code, grpc.status.UNIMPLEMENTED);
+    done();
+  });
+}
+
 /**
  * Run one of the authentication tests.
  * @param {string} expected_user The expected username in the response
@@ -527,8 +537,10 @@
                     Client: testProto.TestService},
   status_code_and_message: {run: statusCodeAndMessage,
                             Client: testProto.TestService},
-  unimplemented_method: {run: unimplementedMethod,
+  unimplemented_service: {run: unimplementedService,
                          Client: testProto.UnimplementedService},
+  unimplemented_method: {run: unimplementedMethod,
+                         Client: testProto.TestService},
   compute_engine_creds: {run: computeEngineCreds,
                          Client: testProto.TestService,
                          getCreds: getApplicationCreds},
diff --git a/src/node/src/client.js b/src/node/src/client.js
index f75f951..9c1562e 100644
--- a/src/node/src/client.js
+++ b/src/node/src/client.js
@@ -382,6 +382,7 @@
     if (args.options) {
       message.grpcWriteFlags = args.options.flags;
     }
+
     client_batch[grpc.opType.SEND_INITIAL_METADATA] =
         metadata._getCoreRepresentation();
     client_batch[grpc.opType.SEND_MESSAGE] = message;
diff --git a/src/node/src/grpc_extension.js b/src/node/src/grpc_extension.js
index 6a8fe2c..63a281d 100644
--- a/src/node/src/grpc_extension.js
+++ b/src/node/src/grpc_extension.js
@@ -31,7 +31,7 @@
  *
  */
 
-var binary = require('node-pre-gyp');
+var binary = require('node-pre-gyp/lib/pre-binding');
 var path = require('path');
 var binding_path =
     binary.find(path.resolve(path.join(__dirname, '../../../package.json')));
diff --git a/src/node/test/async_test.js b/src/node/test/async_test.js
index c46e745..7b467e5 100644
--- a/src/node/test/async_test.js
+++ b/src/node/test/async_test.js
@@ -61,6 +61,7 @@
     done();
   });
   after(function() {
+    grpc.closeClient(math_client);
     server.forceShutdown();
   });
   it('should not hang', function(done) {
diff --git a/src/node/test/interop_sanity_test.js b/src/node/test/interop_sanity_test.js
index f008a87..58f8842 100644
--- a/src/node/test/interop_sanity_test.js
+++ b/src/node/test/interop_sanity_test.js
@@ -98,6 +98,10 @@
     interop_client.runTest(port, name_override, 'status_code_and_message',
                            true, true, done);
   });
+  it('should pass unimplemented_service', function(done) {
+    interop_client.runTest(port, name_override, 'unimplemented_service',
+                           true, true, done);
+  });
   it('should pass unimplemented_method', function(done) {
     interop_client.runTest(port, name_override, 'unimplemented_method',
                            true, true, done);
diff --git a/src/objective-c/tests/InteropTests.m b/src/objective-c/tests/InteropTests.m
index 44f22c9..9804734 100644
--- a/src/objective-c/tests/InteropTests.m
+++ b/src/objective-c/tests/InteropTests.m
@@ -92,20 +92,21 @@
   return 0;
 }
 
++ (void)setUp {
+#ifdef GRPC_COMPILE_WITH_CRONET
+  // Cronet setup
+  [Cronet setHttp2Enabled:YES];
+  [Cronet start];
+  [GRPCCall useCronetWithEngine:[Cronet getGlobalEngine]];
+#endif
+}
+
 - (void)setUp {
   self.continueAfterFailure = NO;
 
   [GRPCCall resetHostSettings];
 
   _service = self.class.host ? [RMTTestService serviceWithHost:self.class.host] : nil;
-#ifdef GRPC_COMPILE_WITH_CRONET
-  if (cronetEngine == NULL) {
-    // Cronet setup
-    [Cronet setHttp2Enabled:YES];
-    [Cronet start];
-    [GRPCCall useCronetWithEngine:[Cronet getGlobalEngine]];
-  }
-#endif
 }
 
 - (void)testEmptyUnaryRPC {
diff --git a/src/php/tests/interop/interop_client.php b/src/php/tests/interop/interop_client.php
index 124d324..3d62e86 100755
--- a/src/php/tests/interop/interop_client.php
+++ b/src/php/tests/interop/interop_client.php
@@ -477,9 +477,11 @@
     list($result, $status) = $call->wait();
 
     hardAssert($status->code === 2,
-               'Received unexpected status code');
+               'Received unexpected UnaryCall status code: ' .
+               $status->code);
     hardAssert($status->details === 'test status message',
-               'Received unexpected status details');
+               'Received unexpected UnaryCall status details: ' .
+               $status->details);
 
     $streaming_call = $stub->FullDuplexCall();
 
@@ -487,14 +489,27 @@
     $streaming_request->setResponseStatus($echo_status);
     $streaming_call->write($streaming_request);
     $streaming_call->writesDone();
+    $result = $streaming_call->read();
 
     $status = $streaming_call->getStatus();
     hardAssert($status->code === 2,
-               'Received unexpected status code');
+               'Received unexpected FullDuplexCall status code: ' .
+               $status->code);
     hardAssert($status->details === 'test status message',
-               'Received unexpected status details');
+               'Received unexpected FullDuplexCall status details: ' .
+               $status->details);
 }
 
+# NOTE: the stub input to this function is from UnimplementedService
+function unimplementedService($stub)
+{
+    $call = $stub->UnimplementedCall(new grpc\testing\EmptyMessage());
+    list($result, $status) = $call->wait();
+    hardAssert($status->code === Grpc\STATUS_UNIMPLEMENTED,
+               'Received unexpected status code');
+}
+
+# NOTE: the stub input to this function is from TestService
 function unimplementedMethod($stub)
 {
     $call = $stub->UnimplementedCall(new grpc\testing\EmptyMessage());
@@ -587,7 +602,7 @@
         $opts['update_metadata'] = $update_metadata;
     }
 
-    if ($test_case === 'unimplemented_method') {
+    if ($test_case === 'unimplemented_service') {
         $stub = new grpc\testing\UnimplementedServiceClient($server_address,
                                                             $opts);
     } else {
@@ -640,6 +655,9 @@
         case 'status_code_and_message':
             statusCodeAndMessage($stub);
             break;
+        case 'unimplemented_service':
+            unimplementedService($stub);
+            break;
         case 'unimplemented_method':
             unimplementedMethod($stub);
             break;
diff --git a/src/proto/grpc/testing/duplicate/echo_duplicate.proto b/src/proto/grpc/testing/duplicate/echo_duplicate.proto
index 94130ea..97fdbc4 100644
--- a/src/proto/grpc/testing/duplicate/echo_duplicate.proto
+++ b/src/proto/grpc/testing/duplicate/echo_duplicate.proto
@@ -38,4 +38,5 @@
 
 service EchoTestService {
   rpc Echo(grpc.testing.EchoRequest) returns (grpc.testing.EchoResponse);
+  rpc ResponseStream(EchoRequest) returns (stream EchoResponse);
 }
diff --git a/src/proto/grpc/testing/test.proto b/src/proto/grpc/testing/test.proto
index b52c4cb..2b0dcde 100644
--- a/src/proto/grpc/testing/test.proto
+++ b/src/proto/grpc/testing/test.proto
@@ -74,6 +74,10 @@
   // first request.
   rpc HalfDuplexCall(stream StreamingOutputCallRequest)
       returns (stream StreamingOutputCallResponse);
+
+  // The test server will not implement this method. It will be used
+  // to test the behavior when clients call unimplemented methods.
+  rpc UnimplementedCall(grpc.testing.Empty) returns (grpc.testing.Empty);
 }
 
 // A simple service NOT implemented at servers so clients can test for
diff --git a/src/python/grpcio/grpc/_cython/_cygrpc/grpc.pxi b/src/python/grpcio/grpc/_cython/_cygrpc/grpc.pxi
index ad20c94..9560fad 100644
--- a/src/python/grpcio/grpc/_cython/_cygrpc/grpc.pxi
+++ b/src/python/grpcio/grpc/_cython/_cygrpc/grpc.pxi
@@ -173,10 +173,14 @@
     GRPC_ARG_INTEGER
     GRPC_ARG_POINTER
 
-  ctypedef struct grpc_arg_value_pointer:
-    void *address "p"
+  ctypedef struct grpc_arg_pointer_vtable:
     void *(*copy)(void *)
     void (*destroy)(void *)
+    int (*cmp)(void *, void *)
+
+  ctypedef struct grpc_arg_value_pointer:
+    void *address "p"
+    grpc_arg_pointer_vtable *vtable
 
   union grpc_arg_value:
     char *string
diff --git a/src/python/grpcio/grpc/_cython/_cygrpc/records.pxd.pxi b/src/python/grpcio/grpc/_cython/_cygrpc/records.pxd.pxi
index 96c5b02..00ec91b 100644
--- a/src/python/grpcio/grpc/_cython/_cygrpc/records.pxd.pxi
+++ b/src/python/grpcio/grpc/_cython/_cygrpc/records.pxd.pxi
@@ -84,6 +84,7 @@
 cdef class ChannelArg:
 
   cdef grpc_arg c_arg
+  cdef grpc_arg_pointer_vtable ptr_vtable
   cdef readonly object key, value
 
 
diff --git a/src/python/grpcio/grpc/_cython/_cygrpc/records.pyx.pxi b/src/python/grpcio/grpc/_cython/_cygrpc/records.pyx.pxi
index 5a11a08..8a4eef4 100644
--- a/src/python/grpcio/grpc/_cython/_cygrpc/records.pyx.pxi
+++ b/src/python/grpcio/grpc/_cython/_cygrpc/records.pyx.pxi
@@ -27,6 +27,7 @@
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
+from libc.stdint cimport intptr_t
 
 class ConnectivityState:
   idle = GRPC_CHANNEL_IDLE
@@ -304,20 +305,49 @@
     self.c_pair.certificate_chain = self.certificate_chain
 
 
+
+cdef void* copy_ptr(void* ptr):
+  return ptr
+
+
+cdef void destroy_ptr(void* ptr):
+  pass
+
+
+cdef int compare_ptr(void* ptr1, void* ptr2):
+  if ptr1 < ptr2:
+    return -1
+  elif ptr1 > ptr2:
+    return 1
+  else:
+    return 0
+
+
 cdef class ChannelArg:
 
   def __cinit__(self, bytes key, value):
     self.key = key
+    self.value = value
     self.c_arg.key = self.key
     if isinstance(value, int):
-      self.value = value
       self.c_arg.type = GRPC_ARG_INTEGER
       self.c_arg.value.integer = self.value
     elif isinstance(value, bytes):
-      self.value = value
       self.c_arg.type = GRPC_ARG_STRING
       self.c_arg.value.string = self.value
+    elif hasattr(value, '__int__'):
+      # Pointer objects must override __int__() to return
+      # the underlying C address (Python ints are word size).  The
+      # lifecycle of the pointer is fixed to the lifecycle of the 
+      # python object wrapping it.
+      self.ptr_vtable.copy = &copy_ptr
+      self.ptr_vtable.destroy = &destroy_ptr
+      self.ptr_vtable.cmp = &compare_ptr
+      self.c_arg.type = GRPC_ARG_POINTER
+      self.c_arg.value.pointer.vtable = &self.ptr_vtable
+      self.c_arg.value.pointer.address = <void*>(<intptr_t>int(self.value))
     else:
+      # TODO Add supported pointer types to this message
       raise TypeError('Expected int or bytes, got {}'.format(type(value)))
 
 
diff --git a/src/python/grpcio/grpc_core_dependencies.py b/src/python/grpcio/grpc_core_dependencies.py
index 2bebf48..0ffb0e3 100644
--- a/src/python/grpcio/grpc_core_dependencies.py
+++ b/src/python/grpcio/grpc_core_dependencies.py
@@ -98,6 +98,7 @@
   'src/core/lib/iomgr/combiner.c',
   'src/core/lib/iomgr/endpoint.c',
   'src/core/lib/iomgr/endpoint_pair_posix.c',
+  'src/core/lib/iomgr/endpoint_pair_uv.c',
   'src/core/lib/iomgr/endpoint_pair_windows.c',
   'src/core/lib/iomgr/error.c',
   'src/core/lib/iomgr/ev_epoll_linux.c',
@@ -109,36 +110,47 @@
   'src/core/lib/iomgr/iocp_windows.c',
   'src/core/lib/iomgr/iomgr.c',
   'src/core/lib/iomgr/iomgr_posix.c',
+  'src/core/lib/iomgr/iomgr_uv.c',
   'src/core/lib/iomgr/iomgr_windows.c',
   'src/core/lib/iomgr/load_file.c',
   'src/core/lib/iomgr/network_status_tracker.c',
   'src/core/lib/iomgr/polling_entity.c',
+  'src/core/lib/iomgr/pollset_set_uv.c',
   'src/core/lib/iomgr/pollset_set_windows.c',
+  'src/core/lib/iomgr/pollset_uv.c',
   'src/core/lib/iomgr/pollset_windows.c',
   'src/core/lib/iomgr/resolve_address_posix.c',
+  'src/core/lib/iomgr/resolve_address_uv.c',
   'src/core/lib/iomgr/resolve_address_windows.c',
   'src/core/lib/iomgr/sockaddr_utils.c',
   'src/core/lib/iomgr/socket_utils_common_posix.c',
   'src/core/lib/iomgr/socket_utils_linux.c',
   'src/core/lib/iomgr/socket_utils_posix.c',
+  'src/core/lib/iomgr/socket_utils_uv.c',
+  'src/core/lib/iomgr/socket_utils_windows.c',
   'src/core/lib/iomgr/socket_windows.c',
   'src/core/lib/iomgr/tcp_client_posix.c',
+  'src/core/lib/iomgr/tcp_client_uv.c',
   'src/core/lib/iomgr/tcp_client_windows.c',
   'src/core/lib/iomgr/tcp_posix.c',
   'src/core/lib/iomgr/tcp_server_posix.c',
+  'src/core/lib/iomgr/tcp_server_uv.c',
   'src/core/lib/iomgr/tcp_server_windows.c',
+  'src/core/lib/iomgr/tcp_uv.c',
   'src/core/lib/iomgr/tcp_windows.c',
   'src/core/lib/iomgr/time_averaged_stats.c',
-  'src/core/lib/iomgr/timer.c',
+  'src/core/lib/iomgr/timer_generic.c',
   'src/core/lib/iomgr/timer_heap.c',
+  'src/core/lib/iomgr/timer_uv.c',
   'src/core/lib/iomgr/udp_server.c',
   'src/core/lib/iomgr/unix_sockets_posix.c',
   'src/core/lib/iomgr/unix_sockets_posix_noop.c',
+  'src/core/lib/iomgr/wakeup_fd_cv.c',
   'src/core/lib/iomgr/wakeup_fd_eventfd.c',
   'src/core/lib/iomgr/wakeup_fd_nospecial.c',
   'src/core/lib/iomgr/wakeup_fd_pipe.c',
   'src/core/lib/iomgr/wakeup_fd_posix.c',
-  'src/core/lib/iomgr/workqueue_posix.c',
+  'src/core/lib/iomgr/workqueue_uv.c',
   'src/core/lib/iomgr/workqueue_windows.c',
   'src/core/lib/json/json.c',
   'src/core/lib/json/json_reader.c',
@@ -164,6 +176,7 @@
   'src/core/lib/surface/version.c',
   'src/core/lib/transport/byte_stream.c',
   'src/core/lib/transport/connectivity_state.c',
+  'src/core/lib/transport/mdstr_hash_table.c',
   'src/core/lib/transport/metadata.c',
   'src/core/lib/transport/metadata_batch.c',
   'src/core/lib/transport/static_metadata.c',
@@ -199,8 +212,7 @@
   'src/core/lib/security/credentials/credentials.c',
   'src/core/lib/security/credentials/credentials_metadata.c',
   'src/core/lib/security/credentials/fake/fake_credentials.c',
-  'src/core/lib/security/credentials/google_default/credentials_posix.c',
-  'src/core/lib/security/credentials/google_default/credentials_windows.c',
+  'src/core/lib/security/credentials/google_default/credentials_generic.c',
   'src/core/lib/security/credentials/google_default/google_default_credentials.c',
   'src/core/lib/security/credentials/iam/iam_credentials.c',
   'src/core/lib/security/credentials/jwt/json_token.c',
@@ -222,25 +234,26 @@
   'src/core/lib/tsi/ssl_transport_security.c',
   'src/core/lib/tsi/transport_security.c',
   'src/core/ext/transport/chttp2/client/secure/secure_channel_create.c',
-  'src/core/ext/client_config/channel_connectivity.c',
-  'src/core/ext/client_config/client_channel.c',
-  'src/core/ext/client_config/client_channel_factory.c',
-  'src/core/ext/client_config/client_config_plugin.c',
-  'src/core/ext/client_config/connector.c',
-  'src/core/ext/client_config/default_initial_connect_string.c',
-  'src/core/ext/client_config/http_connect_handshaker.c',
-  'src/core/ext/client_config/initial_connect_string.c',
-  'src/core/ext/client_config/lb_policy.c',
-  'src/core/ext/client_config/lb_policy_factory.c',
-  'src/core/ext/client_config/lb_policy_registry.c',
-  'src/core/ext/client_config/parse_address.c',
-  'src/core/ext/client_config/resolver.c',
-  'src/core/ext/client_config/resolver_factory.c',
-  'src/core/ext/client_config/resolver_registry.c',
-  'src/core/ext/client_config/resolver_result.c',
-  'src/core/ext/client_config/subchannel.c',
-  'src/core/ext/client_config/subchannel_index.c',
-  'src/core/ext/client_config/uri_parser.c',
+  'src/core/ext/client_channel/channel_connectivity.c',
+  'src/core/ext/client_channel/client_channel.c',
+  'src/core/ext/client_channel/client_channel_factory.c',
+  'src/core/ext/client_channel/client_channel_plugin.c',
+  'src/core/ext/client_channel/connector.c',
+  'src/core/ext/client_channel/default_initial_connect_string.c',
+  'src/core/ext/client_channel/http_connect_handshaker.c',
+  'src/core/ext/client_channel/initial_connect_string.c',
+  'src/core/ext/client_channel/lb_policy.c',
+  'src/core/ext/client_channel/lb_policy_factory.c',
+  'src/core/ext/client_channel/lb_policy_registry.c',
+  'src/core/ext/client_channel/method_config.c',
+  'src/core/ext/client_channel/parse_address.c',
+  'src/core/ext/client_channel/resolver.c',
+  'src/core/ext/client_channel/resolver_factory.c',
+  'src/core/ext/client_channel/resolver_registry.c',
+  'src/core/ext/client_channel/resolver_result.c',
+  'src/core/ext/client_channel/subchannel.c',
+  'src/core/ext/client_channel/subchannel_index.c',
+  'src/core/ext/client_channel/uri_parser.c',
   'src/core/ext/transport/chttp2/server/insecure/server_chttp2.c',
   'src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.c',
   'src/core/ext/transport/chttp2/client/insecure/channel_create.c',
diff --git a/src/python/grpcio/support.py b/src/python/grpcio/support.py
index 7730374..f363f5f 100644
--- a/src/python/grpcio/support.py
+++ b/src/python/grpcio/support.py
@@ -45,7 +45,10 @@
 """
 C_PYTHON_DEV_ERROR_MESSAGE = """
 Could not find <Python.h>. This could mean the following:
-  * You're on Ubuntu and haven't `apt-get install`ed `python-dev`.
+  * You're on Ubuntu and haven't run `apt-get install python-dev`.
+  * You're on RHEL/Fedora and haven't run `yum install python-devel` or
+    `dnf install python-devel` (make sure you also have redhat-rpm-config
+    installed)
   * You're on Mac OS X and the usual Python framework was somehow corrupted
     (check your environment variables or try re-installing?)
   * You're on Windows and your Python installation was somehow corrupted
diff --git a/src/python/grpcio_tests/tests/unit/_channel_args_test.py b/src/python/grpcio_tests/tests/unit/_channel_args_test.py
index 6a636d7..b46497a 100644
--- a/src/python/grpcio_tests/tests/unit/_channel_args_test.py
+++ b/src/python/grpcio_tests/tests/unit/_channel_args_test.py
@@ -33,11 +33,18 @@
 
 import grpc
 
+class TestPointerWrapper(object):
+
+  def __int__(self):
+    return 123456
+
+
 TEST_CHANNEL_ARGS = (
     ('arg1', b'bytes_val'),
     ('arg2', 'str_val'),
     ('arg3', 1),
     (b'arg4', 'str_val'),
+    ('arg6', TestPointerWrapper()),
 )
 
 
diff --git a/src/python/grpcio_tests/tests/unit/_channel_connectivity_test.py b/src/python/grpcio_tests/tests/unit/_channel_connectivity_test.py
index 1324ad3..3d9dd17 100644
--- a/src/python/grpcio_tests/tests/unit/_channel_connectivity_test.py
+++ b/src/python/grpcio_tests/tests/unit/_channel_connectivity_test.py
@@ -34,8 +34,6 @@
 import unittest
 
 import grpc
-from grpc import _channel
-from grpc import _server
 from tests.unit.framework.common import test_constants
 from tests.unit import _thread_pool
 
@@ -78,7 +76,7 @@
   def test_lonely_channel_connectivity(self):
     callback = _Callback()
 
-    channel = _channel.Channel('localhost:12345', (), None)
+    channel = grpc.insecure_channel('localhost:12345')
     channel.subscribe(callback.update, try_to_connect=False)
     first_connectivities = callback.block_until_connectivities_satisfy(bool)
     channel.subscribe(callback.update, try_to_connect=True)
@@ -105,13 +103,13 @@
 
   def test_immediately_connectable_channel_connectivity(self):
     thread_pool = _thread_pool.RecordingThreadPool(max_workers=None)
-    server = _server.Server(thread_pool, (), ())
+    server = grpc.server(thread_pool)
     port = server.add_insecure_port('[::]:0')
     server.start()
     first_callback = _Callback()
     second_callback = _Callback()
 
-    channel = _channel.Channel('localhost:{}'.format(port), (), None)
+    channel = grpc.insecure_channel('localhost:{}'.format(port))
     channel.subscribe(first_callback.update, try_to_connect=False)
     first_connectivities = first_callback.block_until_connectivities_satisfy(
         bool)
@@ -146,12 +144,12 @@
 
   def test_reachable_then_unreachable_channel_connectivity(self):
     thread_pool = _thread_pool.RecordingThreadPool(max_workers=None)
-    server = _server.Server(thread_pool, (), ())
+    server = grpc.server(thread_pool)
     port = server.add_insecure_port('[::]:0')
     server.start()
     callback = _Callback()
 
-    channel = _channel.Channel('localhost:{}'.format(port), (), None)
+    channel = grpc.insecure_channel('localhost:{}'.format(port))
     channel.subscribe(callback.update, try_to_connect=True)
     callback.block_until_connectivities_satisfy(_ready_in_connectivities)
     # Now take down the server and confirm that channel readiness is repudiated.
diff --git a/src/python/grpcio_tests/tests/unit/_channel_ready_future_test.py b/src/python/grpcio_tests/tests/unit/_channel_ready_future_test.py
index 60d478b..e0a7d15 100644
--- a/src/python/grpcio_tests/tests/unit/_channel_ready_future_test.py
+++ b/src/python/grpcio_tests/tests/unit/_channel_ready_future_test.py
@@ -33,8 +33,6 @@
 import unittest
 
 import grpc
-from grpc import _channel
-from grpc import _server
 from tests.unit.framework.common import test_constants
 from tests.unit import _thread_pool
 
@@ -79,7 +77,7 @@
 
   def test_immediately_connectable_channel_connectivity(self):
     thread_pool = _thread_pool.RecordingThreadPool(max_workers=None)
-    server = _server.Server(thread_pool, (), ())
+    server = grpc.server(thread_pool)
     port = server.add_insecure_port('[::]:0')
     server.start()
     channel = grpc.insecure_channel('localhost:{}'.format(port))
diff --git a/src/ruby/README.md b/src/ruby/README.md
index f476fe7..266d6b2 100644
--- a/src/ruby/README.md
+++ b/src/ruby/README.md
@@ -59,7 +59,7 @@
 - bin: example gRPC clients and servers, e.g,
 
   ```ruby
-  stub = Math::Math::Stub.new('my.test.math.server.com:8080')
+  stub = Math::Math::Stub.new('my.test.math.server.com:8080', :this_channel_is_insecure)
   req = Math::DivArgs.new(dividend: 7, divisor: 3)
   GRPC.logger.info("div(7/3): req=#{req.inspect}")
   resp = stub.div(req)
diff --git a/src/ruby/spec/generic/active_call_spec.rb b/src/ruby/spec/generic/active_call_spec.rb
index 48bc61e..5ae4f25 100644
--- a/src/ruby/spec/generic/active_call_spec.rb
+++ b/src/ruby/spec/generic/active_call_spec.rb
@@ -137,6 +137,8 @@
         msg = 'message is a string'
         client_call.write_flag = f
         client_call.remote_send(msg)
+        # flush the message in case writes are set to buffered
+        call.run_batch(CallOps::SEND_CLOSE_FROM_CLIENT => nil) if f == 1
 
         # confirm that the message was marshalled
         recvd_rpc =  @server.request_call
diff --git a/templates/Makefile.template b/templates/Makefile.template
index e6a28d1..3b76ded 100644
--- a/templates/Makefile.template
+++ b/templates/Makefile.template
@@ -219,10 +219,6 @@
   HOST_LD ?= $(LD)
   HOST_LDXX ?= $(LDXX)
 
-  ifdef EXTRA_DEFINES
-  DEFINES += $(EXTRA_DEFINES)
-  endif
-
   CFLAGS += -std=c99 -Wsign-conversion -Wconversion ${' '.join(warning_var('$(W_%s)', warning) for warning in PREFERRED_WARNINGS)}
   ifeq ($(HAS_CXX11),true)
   CXXFLAGS += -std=c++11
@@ -324,6 +320,11 @@
   LDLIBS += $(addprefix -l, $(LIBS))
   LDLIBSXX += $(addprefix -l, $(LIBSXX))
 
+
+  % for arg in ['CFLAGS', 'CXXFLAGS', 'CPPFLAGS', 'LDFLAGS', 'DEFINES', 'LDLIBS']:
+  ${arg} += $(EXTRA_${arg})
+  % endfor
+
   HOST_CPPFLAGS = $(CPPFLAGS)
   HOST_CFLAGS = $(CFLAGS)
   HOST_CXXFLAGS = $(CXXFLAGS)
diff --git a/templates/binding.gyp.template b/templates/binding.gyp.template
index 40d430f..e6592ac 100644
--- a/templates/binding.gyp.template
+++ b/templates/binding.gyp.template
@@ -44,6 +44,9 @@
         '.',
         'include'
       ],
+      'defines': [
+        'GRPC_UV'
+      ],
       'conditions': [
         ['OS == "win"', {
           "include_dirs": [
diff --git a/templates/src/csharp/Grpc.IntegrationTesting.QpsWorker/project.json.template b/templates/src/csharp/Grpc.IntegrationTesting.QpsWorker/project.json.template
index 83b8a9b..8304d20 100644
--- a/templates/src/csharp/Grpc.IntegrationTesting.QpsWorker/project.json.template
+++ b/templates/src/csharp/Grpc.IntegrationTesting.QpsWorker/project.json.template
@@ -20,5 +20,10 @@
           }
         }
       }
+    },
+    "runtimeOptions": {
+      "configProperties": {
+        "System.GC.Server": true
+      }
     }
   }
diff --git a/templates/tools/dockerfile/libuv_install.include b/templates/tools/dockerfile/libuv_install.include
new file mode 100644
index 0000000..a249c09
--- /dev/null
+++ b/templates/tools/dockerfile/libuv_install.include
@@ -0,0 +1,7 @@
+#================
+# libuv
+RUN cd /tmp \
+    && wget http://dist.libuv.org/dist/v1.9.1/libuv-v1.9.1.tar.gz \
+    && tar -xf libuv-v1.9.1.tar.gz \
+    && cd libuv-v1.9.1 \
+    && sh autogen.sh && ./configure --prefix=/usr && make && make install
\ No newline at end of file
diff --git a/templates/tools/dockerfile/test/cxx_jessie_x64/Dockerfile.template b/templates/tools/dockerfile/test/cxx_jessie_x64/Dockerfile.template
index 0476724..211baff 100644
--- a/templates/tools/dockerfile/test/cxx_jessie_x64/Dockerfile.template
+++ b/templates/tools/dockerfile/test/cxx_jessie_x64/Dockerfile.template
@@ -28,13 +28,14 @@
   # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
   # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
   # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-  
+
   FROM debian:jessie
-  
+
   <%include file="../../apt_get_basic.include"/>
   <%include file="../../python_deps.include"/>
   <%include file="../../cxx_deps.include"/>
   <%include file="../../clang_update.include"/>
   <%include file="../../run_tests_addons.include"/>
+  <%include file="../../libuv_install.include"/>
   # Define the default command.
   CMD ["bash"]
diff --git a/templates/tools/run_tests/tests.json.template b/templates/tools/run_tests/tests.json.template
index 5690874..1e21465 100644
--- a/templates/tools/run_tests/tests.json.template
+++ b/templates/tools/run_tests/tests.json.template
@@ -10,6 +10,7 @@
                  "ci_platforms": tgt.ci_platforms,
                  "gtest": tgt.gtest,
                  "exclude_configs": tgt.get("exclude_configs", []),
+                 "exclude_iomgrs": tgt.get("exclude_iomgrs", []),
                  "args": [],
                  "flaky": tgt.flaky,
                  "cpu_cost": tgt.get("cpu_cost", 1.0)}
diff --git a/test/core/bad_client/gen_build_yaml.py b/test/core/bad_client/gen_build_yaml.py
index fb86525..32ab3f2 100755
--- a/test/core/bad_client/gen_build_yaml.py
+++ b/test/core/bad_client/gen_build_yaml.py
@@ -83,6 +83,7 @@
               'secure': 'no',
               'src': ['test/core/bad_client/tests/%s.c' % t],
               'vs_proj_dir': 'test',
+              'exclude_iomgrs': ['uv'],
               'deps': [
                   'bad_client_test',
                   'grpc_test_util_unsecure',
diff --git a/test/core/bad_client/tests/large_metadata.c b/test/core/bad_client/tests/large_metadata.c
index d106ce6..b9c8093 100644
--- a/test/core/bad_client/tests/large_metadata.c
+++ b/test/core/bad_client/tests/large_metadata.c
@@ -50,6 +50,7 @@
   "\x00\x00\x00\x04\x00\x00\x00\x00\x00" /* headers: generated from        \
                                             large_metadata.headers in this \
                                             directory */                   \
+  "\x00\x00\x00\x04\x01\x00\x00\x00\x00"                                   \
   "\x00"                                                                   \
   "5{\x01\x05\x00\x00\x00\x01"                                             \
   "\x10\x05:path\x08/foo/bar"                                              \
@@ -92,6 +93,7 @@
                                                                     in this                \
                                                                     directory              \
                                                                     */                     \
+  "\x00\x00\x00\x04\x01\x00\x00\x00\x00"                                                   \
   "\x00\x00\xc9\x01\x04\x00\x00\x00\x01"                                                   \
   "\x10\x05:path\x08/foo/bar"                                                              \
   "\x10\x07:scheme\x04http"                                                                \
diff --git a/test/core/channel/channel_stack_test.c b/test/core/channel/channel_stack_test.c
index b1c1ed9..26fc3dc 100644
--- a/test/core/channel/channel_stack_test.c
+++ b/test/core/channel/channel_stack_test.c
@@ -118,6 +118,7 @@
   int *channel_data;
   int *call_data;
   grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
+  grpc_mdstr *path = grpc_mdstr_from_string("/service/method");
 
   arg.type = GRPC_ARG_INTEGER;
   arg.key = "test_key";
@@ -136,7 +137,7 @@
 
   call_stack = gpr_malloc(channel_stack->call_stack_size);
   grpc_error *error = grpc_call_stack_init(
-      &exec_ctx, channel_stack, 1, free_call, call_stack, NULL, NULL,
+      &exec_ctx, channel_stack, 1, free_call, call_stack, NULL, NULL, path,
       gpr_inf_future(GPR_CLOCK_MONOTONIC), call_stack);
   GPR_ASSERT(error == GRPC_ERROR_NONE);
   GPR_ASSERT(call_stack->count == 1);
@@ -154,6 +155,7 @@
   GRPC_CHANNEL_STACK_UNREF(&exec_ctx, channel_stack, "done");
 
   grpc_exec_ctx_finish(&exec_ctx);
+  GRPC_MDSTR_UNREF(path);
 }
 
 int main(int argc, char **argv) {
diff --git a/test/core/client_config/lb_policies_test.c b/test/core/client_channel/lb_policies_test.c
similarity index 99%
rename from test/core/client_config/lb_policies_test.c
rename to test/core/client_channel/lb_policies_test.c
index fafff7b..844db5e 100644
--- a/test/core/client_config/lb_policies_test.c
+++ b/test/core/client_channel/lb_policies_test.c
@@ -41,8 +41,8 @@
 #include <grpc/support/string_util.h>
 #include <grpc/support/time.h>
 
-#include "src/core/ext/client_config/client_channel.h"
-#include "src/core/ext/client_config/lb_policy_registry.h"
+#include "src/core/ext/client_channel/client_channel.h"
+#include "src/core/ext/client_channel/lb_policy_registry.h"
 #include "src/core/lib/channel/channel_stack.h"
 #include "src/core/lib/support/string.h"
 #include "src/core/lib/surface/channel.h"
diff --git a/test/core/client_config/resolvers/dns_resolver_connectivity_test.c b/test/core/client_channel/resolvers/dns_resolver_connectivity_test.c
similarity index 98%
rename from test/core/client_config/resolvers/dns_resolver_connectivity_test.c
rename to test/core/client_channel/resolvers/dns_resolver_connectivity_test.c
index d3b9619..07723c2 100644
--- a/test/core/client_config/resolvers/dns_resolver_connectivity_test.c
+++ b/test/core/client_channel/resolvers/dns_resolver_connectivity_test.c
@@ -36,7 +36,7 @@
 #include <grpc/grpc.h>
 #include <grpc/support/alloc.h>
 
-#include "src/core/ext/client_config/resolver_registry.h"
+#include "src/core/ext/client_channel/resolver_registry.h"
 #include "src/core/lib/iomgr/resolve_address.h"
 #include "src/core/lib/iomgr/timer.h"
 #include "test/core/util/test_config.h"
diff --git a/test/core/client_config/resolvers/dns_resolver_test.c b/test/core/client_channel/resolvers/dns_resolver_test.c
similarity index 97%
rename from test/core/client_config/resolvers/dns_resolver_test.c
rename to test/core/client_channel/resolvers/dns_resolver_test.c
index c3f4cb1..41a9125 100644
--- a/test/core/client_config/resolvers/dns_resolver_test.c
+++ b/test/core/client_channel/resolvers/dns_resolver_test.c
@@ -35,7 +35,7 @@
 
 #include <grpc/support/log.h>
 
-#include "src/core/ext/client_config/resolver_registry.h"
+#include "src/core/ext/client_channel/resolver_registry.h"
 #include "test/core/util/test_config.h"
 
 static void test_succeeds(grpc_resolver_factory *factory, const char *string) {
diff --git a/test/core/client_config/resolvers/sockaddr_resolver_test.c b/test/core/client_channel/resolvers/sockaddr_resolver_test.c
similarity index 97%
rename from test/core/client_config/resolvers/sockaddr_resolver_test.c
rename to test/core/client_channel/resolvers/sockaddr_resolver_test.c
index b5d96ef..c39052c 100644
--- a/test/core/client_config/resolvers/sockaddr_resolver_test.c
+++ b/test/core/client_channel/resolvers/sockaddr_resolver_test.c
@@ -37,8 +37,8 @@
 #include <grpc/support/log.h>
 #include <grpc/support/string_util.h>
 
-#include "src/core/ext/client_config/resolver_registry.h"
-#include "src/core/ext/client_config/resolver_result.h"
+#include "src/core/ext/client_channel/resolver_registry.h"
+#include "src/core/ext/client_channel/resolver_result.h"
 
 #include "test/core/util/test_config.h"
 
diff --git a/test/core/client_config/set_initial_connect_string_test.c b/test/core/client_channel/set_initial_connect_string_test.c
similarity index 92%
rename from test/core/client_config/set_initial_connect_string_test.c
rename to test/core/client_channel/set_initial_connect_string_test.c
index 1b51424..379f30f 100644
--- a/test/core/client_config/set_initial_connect_string_test.c
+++ b/test/core/client_channel/set_initial_connect_string_test.c
@@ -30,6 +30,13 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  *
  */
+
+/* With the addition of a libuv endpoint, sockaddr.h now includes uv.h when
+   using that endpoint. Because of various transitive includes in uv.h,
+   including windows.h on Windows, uv.h must be included before other system
+   headers. Therefore, sockaddr.h must always be included first */
+#include "src/core/lib/iomgr/sockaddr.h"
+
 #include <string.h>
 
 #include <grpc/grpc.h>
@@ -39,7 +46,7 @@
 #include <grpc/support/slice.h>
 #include <grpc/support/thd.h>
 
-#include "src/core/ext/client_config/initial_connect_string.h"
+#include "src/core/ext/client_channel/initial_connect_string.h"
 #include "src/core/lib/iomgr/sockaddr.h"
 #include "src/core/lib/security/credentials/fake/fake_credentials.h"
 #include "src/core/lib/support/string.h"
@@ -93,15 +100,14 @@
   grpc_endpoint_read(exec_ctx, tcp, &state.temp_incoming_buffer, &on_read);
 }
 
-static void set_magic_initial_string(struct sockaddr **addr, size_t *addr_len,
+static void set_magic_initial_string(grpc_resolved_address **addr,
                                      gpr_slice *connect_string) {
   GPR_ASSERT(addr);
-  GPR_ASSERT(addr_len);
+  GPR_ASSERT((*addr)->len);
   *connect_string = gpr_slice_from_copied_string(magic_connect_string);
 }
 
-static void reset_addr_and_set_magic_string(struct sockaddr **addr,
-                                            size_t *addr_len,
+static void reset_addr_and_set_magic_string(grpc_resolved_address **addr,
                                             gpr_slice *connect_string) {
   struct sockaddr_in target;
   *connect_string = gpr_slice_from_copied_string(magic_connect_string);
@@ -109,9 +115,9 @@
   target.sin_family = AF_INET;
   target.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
   target.sin_port = htons((uint16_t)server_port);
-  *addr_len = sizeof(target);
-  *addr = (struct sockaddr *)gpr_malloc(sizeof(target));
-  memcpy(*addr, &target, sizeof(target));
+  (*addr)->len = sizeof(target);
+  *addr = (grpc_resolved_address *)gpr_malloc(sizeof(grpc_resolved_address));
+  memcpy((*addr)->addr, &target, sizeof(target));
 }
 
 static gpr_timespec n_sec_deadline(int seconds) {
diff --git a/test/core/client_config/uri_corpus/02d156dc5e6f2c11c90c2e06fcee04adf036a342 b/test/core/client_channel/uri_corpus/02d156dc5e6f2c11c90c2e06fcee04adf036a342
similarity index 100%
rename from test/core/client_config/uri_corpus/02d156dc5e6f2c11c90c2e06fcee04adf036a342
rename to test/core/client_channel/uri_corpus/02d156dc5e6f2c11c90c2e06fcee04adf036a342
diff --git a/test/core/client_config/uri_corpus/042dc4512fa3d391c5170cf3aa61e6a638f84342 b/test/core/client_channel/uri_corpus/042dc4512fa3d391c5170cf3aa61e6a638f84342
similarity index 100%
rename from test/core/client_config/uri_corpus/042dc4512fa3d391c5170cf3aa61e6a638f84342
rename to test/core/client_channel/uri_corpus/042dc4512fa3d391c5170cf3aa61e6a638f84342
diff --git a/test/core/client_config/uri_corpus/0e9bbe975f2027e8c39c89f85f667530368e7d11 b/test/core/client_channel/uri_corpus/0e9bbe975f2027e8c39c89f85f667530368e7d11
similarity index 100%
rename from test/core/client_config/uri_corpus/0e9bbe975f2027e8c39c89f85f667530368e7d11
rename to test/core/client_channel/uri_corpus/0e9bbe975f2027e8c39c89f85f667530368e7d11
diff --git a/test/core/client_config/uri_corpus/1155aa6ea7ef262a81a63692513ea395f84dad6f b/test/core/client_channel/uri_corpus/1155aa6ea7ef262a81a63692513ea395f84dad6f
similarity index 100%
rename from test/core/client_config/uri_corpus/1155aa6ea7ef262a81a63692513ea395f84dad6f
rename to test/core/client_channel/uri_corpus/1155aa6ea7ef262a81a63692513ea395f84dad6f
diff --git a/test/core/client_config/uri_corpus/13856a5569ffd085a4d5c07af5f8e9310835a118 b/test/core/client_channel/uri_corpus/13856a5569ffd085a4d5c07af5f8e9310835a118
similarity index 100%
rename from test/core/client_config/uri_corpus/13856a5569ffd085a4d5c07af5f8e9310835a118
rename to test/core/client_channel/uri_corpus/13856a5569ffd085a4d5c07af5f8e9310835a118
diff --git a/test/core/client_config/uri_corpus/14b57bcbf1e17b1db1de491ef2ba3768f704b7dc b/test/core/client_channel/uri_corpus/14b57bcbf1e17b1db1de491ef2ba3768f704b7dc
similarity index 100%
rename from test/core/client_config/uri_corpus/14b57bcbf1e17b1db1de491ef2ba3768f704b7dc
rename to test/core/client_channel/uri_corpus/14b57bcbf1e17b1db1de491ef2ba3768f704b7dc
diff --git a/test/core/client_config/uri_corpus/1794310671a060eead6e5ee66ac978a18ec7e84f b/test/core/client_channel/uri_corpus/1794310671a060eead6e5ee66ac978a18ec7e84f
similarity index 100%
rename from test/core/client_config/uri_corpus/1794310671a060eead6e5ee66ac978a18ec7e84f
rename to test/core/client_channel/uri_corpus/1794310671a060eead6e5ee66ac978a18ec7e84f
diff --git a/test/core/client_config/uri_corpus/1d30b2a79afbaf2828ff42b9a9647e942ba1ab80 b/test/core/client_channel/uri_corpus/1d30b2a79afbaf2828ff42b9a9647e942ba1ab80
similarity index 100%
rename from test/core/client_config/uri_corpus/1d30b2a79afbaf2828ff42b9a9647e942ba1ab80
rename to test/core/client_channel/uri_corpus/1d30b2a79afbaf2828ff42b9a9647e942ba1ab80
diff --git a/test/core/client_config/uri_corpus/1fcf5d9c333b70596cf5ba04d1f7affdf445b971 b/test/core/client_channel/uri_corpus/1fcf5d9c333b70596cf5ba04d1f7affdf445b971
similarity index 100%
rename from test/core/client_config/uri_corpus/1fcf5d9c333b70596cf5ba04d1f7affdf445b971
rename to test/core/client_channel/uri_corpus/1fcf5d9c333b70596cf5ba04d1f7affdf445b971
diff --git a/test/core/client_config/uri_corpus/23162c8a8936e20b195404c21337ee734d02a6bc b/test/core/client_channel/uri_corpus/23162c8a8936e20b195404c21337ee734d02a6bc
similarity index 100%
rename from test/core/client_config/uri_corpus/23162c8a8936e20b195404c21337ee734d02a6bc
rename to test/core/client_channel/uri_corpus/23162c8a8936e20b195404c21337ee734d02a6bc
diff --git a/test/core/client_config/uri_corpus/23f3198b815ca60bdadcaae682b9f965dda387f1 b/test/core/client_channel/uri_corpus/23f3198b815ca60bdadcaae682b9f965dda387f1
similarity index 100%
rename from test/core/client_config/uri_corpus/23f3198b815ca60bdadcaae682b9f965dda387f1
rename to test/core/client_channel/uri_corpus/23f3198b815ca60bdadcaae682b9f965dda387f1
diff --git a/test/core/client_config/uri_corpus/2ef3893b43f1f60b77b59ce06a6bce9815d78eaf b/test/core/client_channel/uri_corpus/2ef3893b43f1f60b77b59ce06a6bce9815d78eaf
similarity index 100%
rename from test/core/client_config/uri_corpus/2ef3893b43f1f60b77b59ce06a6bce9815d78eaf
rename to test/core/client_channel/uri_corpus/2ef3893b43f1f60b77b59ce06a6bce9815d78eaf
diff --git a/test/core/client_config/uri_corpus/356c3c129e203b5c74550b4209764d74b9caefce b/test/core/client_channel/uri_corpus/356c3c129e203b5c74550b4209764d74b9caefce
similarity index 100%
rename from test/core/client_config/uri_corpus/356c3c129e203b5c74550b4209764d74b9caefce
rename to test/core/client_channel/uri_corpus/356c3c129e203b5c74550b4209764d74b9caefce
diff --git a/test/core/client_config/uri_corpus/396568fc41c8ccb31ec925b4a862e4d29ead1327 b/test/core/client_channel/uri_corpus/396568fc41c8ccb31ec925b4a862e4d29ead1327
similarity index 100%
rename from test/core/client_config/uri_corpus/396568fc41c8ccb31ec925b4a862e4d29ead1327
rename to test/core/client_channel/uri_corpus/396568fc41c8ccb31ec925b4a862e4d29ead1327
diff --git a/test/core/client_config/uri_corpus/3b1e7526a99918006b87e499d2beb6c4ac9c3c0c b/test/core/client_channel/uri_corpus/3b1e7526a99918006b87e499d2beb6c4ac9c3c0c
similarity index 100%
rename from test/core/client_config/uri_corpus/3b1e7526a99918006b87e499d2beb6c4ac9c3c0c
rename to test/core/client_channel/uri_corpus/3b1e7526a99918006b87e499d2beb6c4ac9c3c0c
diff --git a/test/core/client_config/uri_corpus/3b58860f3451d3e7aad99690a8d39782ca5116fc b/test/core/client_channel/uri_corpus/3b58860f3451d3e7aad99690a8d39782ca5116fc
similarity index 100%
rename from test/core/client_config/uri_corpus/3b58860f3451d3e7aad99690a8d39782ca5116fc
rename to test/core/client_channel/uri_corpus/3b58860f3451d3e7aad99690a8d39782ca5116fc
diff --git a/test/core/client_config/uri_corpus/41963cc10752f70c3af7e3d85868efb097a0ea9c b/test/core/client_channel/uri_corpus/41963cc10752f70c3af7e3d85868efb097a0ea9c
similarity index 100%
rename from test/core/client_config/uri_corpus/41963cc10752f70c3af7e3d85868efb097a0ea9c
rename to test/core/client_channel/uri_corpus/41963cc10752f70c3af7e3d85868efb097a0ea9c
diff --git a/test/core/client_config/uri_corpus/47b5228404451fc9d4071fa69192514bb4ce33c1 b/test/core/client_channel/uri_corpus/47b5228404451fc9d4071fa69192514bb4ce33c1
similarity index 100%
rename from test/core/client_config/uri_corpus/47b5228404451fc9d4071fa69192514bb4ce33c1
rename to test/core/client_channel/uri_corpus/47b5228404451fc9d4071fa69192514bb4ce33c1
diff --git a/test/core/client_config/uri_corpus/56a2da4b2e6fb795243901023ed8d0aa083d1aab b/test/core/client_channel/uri_corpus/56a2da4b2e6fb795243901023ed8d0aa083d1aab
similarity index 100%
rename from test/core/client_config/uri_corpus/56a2da4b2e6fb795243901023ed8d0aa083d1aab
rename to test/core/client_channel/uri_corpus/56a2da4b2e6fb795243901023ed8d0aa083d1aab
diff --git a/test/core/client_config/uri_corpus/574c2f13858a9a6d724654bd913ede9ae3abf822 b/test/core/client_channel/uri_corpus/574c2f13858a9a6d724654bd913ede9ae3abf822
similarity index 100%
rename from test/core/client_config/uri_corpus/574c2f13858a9a6d724654bd913ede9ae3abf822
rename to test/core/client_channel/uri_corpus/574c2f13858a9a6d724654bd913ede9ae3abf822
diff --git a/test/core/client_config/uri_corpus/582f789c19033a152094cbf8565f14154a778ddb b/test/core/client_channel/uri_corpus/582f789c19033a152094cbf8565f14154a778ddb
similarity index 100%
rename from test/core/client_config/uri_corpus/582f789c19033a152094cbf8565f14154a778ddb
rename to test/core/client_channel/uri_corpus/582f789c19033a152094cbf8565f14154a778ddb
diff --git a/test/core/client_config/uri_corpus/636c5606fc23713a1bae88c8899c0541cfad4fd8 b/test/core/client_channel/uri_corpus/636c5606fc23713a1bae88c8899c0541cfad4fd8
similarity index 100%
rename from test/core/client_config/uri_corpus/636c5606fc23713a1bae88c8899c0541cfad4fd8
rename to test/core/client_channel/uri_corpus/636c5606fc23713a1bae88c8899c0541cfad4fd8
diff --git a/test/core/client_config/uri_corpus/63fe493b270b17426d77a27cbf3abac5b2c2794a b/test/core/client_channel/uri_corpus/63fe493b270b17426d77a27cbf3abac5b2c2794a
similarity index 100%
rename from test/core/client_config/uri_corpus/63fe493b270b17426d77a27cbf3abac5b2c2794a
rename to test/core/client_channel/uri_corpus/63fe493b270b17426d77a27cbf3abac5b2c2794a
diff --git a/test/core/client_config/uri_corpus/655300a902b62662296a8e46bfb04fbcb07182cb b/test/core/client_channel/uri_corpus/655300a902b62662296a8e46bfb04fbcb07182cb
similarity index 100%
rename from test/core/client_config/uri_corpus/655300a902b62662296a8e46bfb04fbcb07182cb
rename to test/core/client_channel/uri_corpus/655300a902b62662296a8e46bfb04fbcb07182cb
diff --git a/test/core/client_config/uri_corpus/6ae3acd9d8507b61bf235748026080a4138dba58 b/test/core/client_channel/uri_corpus/6ae3acd9d8507b61bf235748026080a4138dba58
similarity index 100%
rename from test/core/client_config/uri_corpus/6ae3acd9d8507b61bf235748026080a4138dba58
rename to test/core/client_channel/uri_corpus/6ae3acd9d8507b61bf235748026080a4138dba58
diff --git a/test/core/client_config/uri_corpus/6b70979a70a038ff6607d6cf85485ee95baf58e6 b/test/core/client_channel/uri_corpus/6b70979a70a038ff6607d6cf85485ee95baf58e6
similarity index 100%
rename from test/core/client_config/uri_corpus/6b70979a70a038ff6607d6cf85485ee95baf58e6
rename to test/core/client_channel/uri_corpus/6b70979a70a038ff6607d6cf85485ee95baf58e6
diff --git a/test/core/client_config/uri_corpus/7314ab3545a7535a26e0e8aad67caea5534d68b1 b/test/core/client_channel/uri_corpus/7314ab3545a7535a26e0e8aad67caea5534d68b1
similarity index 100%
rename from test/core/client_config/uri_corpus/7314ab3545a7535a26e0e8aad67caea5534d68b1
rename to test/core/client_channel/uri_corpus/7314ab3545a7535a26e0e8aad67caea5534d68b1
diff --git a/test/core/client_config/uri_corpus/7ff4d8b8d1ffd0d42c48bbb91e5856a9ec31aecb b/test/core/client_channel/uri_corpus/7ff4d8b8d1ffd0d42c48bbb91e5856a9ec31aecb
similarity index 100%
rename from test/core/client_config/uri_corpus/7ff4d8b8d1ffd0d42c48bbb91e5856a9ec31aecb
rename to test/core/client_channel/uri_corpus/7ff4d8b8d1ffd0d42c48bbb91e5856a9ec31aecb
diff --git a/test/core/client_config/uri_corpus/87daa131e0973b77a232a870ed749ef29cf58e6d b/test/core/client_channel/uri_corpus/87daa131e0973b77a232a870ed749ef29cf58e6d
similarity index 100%
rename from test/core/client_config/uri_corpus/87daa131e0973b77a232a870ed749ef29cf58e6d
rename to test/core/client_channel/uri_corpus/87daa131e0973b77a232a870ed749ef29cf58e6d
diff --git a/test/core/client_config/uri_corpus/884dcaee2908ffe5f12b65b8eba81016099c4266 b/test/core/client_channel/uri_corpus/884dcaee2908ffe5f12b65b8eba81016099c4266
similarity index 100%
rename from test/core/client_config/uri_corpus/884dcaee2908ffe5f12b65b8eba81016099c4266
rename to test/core/client_channel/uri_corpus/884dcaee2908ffe5f12b65b8eba81016099c4266
diff --git a/test/core/client_config/uri_corpus/8d7e944fd5d0ede94097fcc98b47b09a3f9c76cb b/test/core/client_channel/uri_corpus/8d7e944fd5d0ede94097fcc98b47b09a3f9c76cb
similarity index 100%
rename from test/core/client_config/uri_corpus/8d7e944fd5d0ede94097fcc98b47b09a3f9c76cb
rename to test/core/client_channel/uri_corpus/8d7e944fd5d0ede94097fcc98b47b09a3f9c76cb
diff --git a/test/core/client_config/uri_corpus/9671149af0b444f59bbdf71340d3441dadd8a7b4 b/test/core/client_channel/uri_corpus/9671149af0b444f59bbdf71340d3441dadd8a7b4
similarity index 100%
rename from test/core/client_config/uri_corpus/9671149af0b444f59bbdf71340d3441dadd8a7b4
rename to test/core/client_channel/uri_corpus/9671149af0b444f59bbdf71340d3441dadd8a7b4
diff --git a/test/core/client_config/uri_corpus/96c8d266b7dc037288ef305c996608270f72e7fb b/test/core/client_channel/uri_corpus/96c8d266b7dc037288ef305c996608270f72e7fb
similarity index 100%
rename from test/core/client_config/uri_corpus/96c8d266b7dc037288ef305c996608270f72e7fb
rename to test/core/client_channel/uri_corpus/96c8d266b7dc037288ef305c996608270f72e7fb
diff --git a/test/core/client_config/uri_corpus/975536c71ade4800415a7e9c2f1b45c35a6d5ea8 b/test/core/client_channel/uri_corpus/975536c71ade4800415a7e9c2f1b45c35a6d5ea8
similarity index 100%
rename from test/core/client_config/uri_corpus/975536c71ade4800415a7e9c2f1b45c35a6d5ea8
rename to test/core/client_channel/uri_corpus/975536c71ade4800415a7e9c2f1b45c35a6d5ea8
diff --git a/test/core/client_config/uri_corpus/99750aa67d30beaea8af565c829d4999aa8cb91b b/test/core/client_channel/uri_corpus/99750aa67d30beaea8af565c829d4999aa8cb91b
similarity index 100%
rename from test/core/client_config/uri_corpus/99750aa67d30beaea8af565c829d4999aa8cb91b
rename to test/core/client_channel/uri_corpus/99750aa67d30beaea8af565c829d4999aa8cb91b
diff --git a/test/core/client_config/uri_corpus/a1140f3f8b5cffc1010221b9a4084a25fb75c1f6 b/test/core/client_channel/uri_corpus/a1140f3f8b5cffc1010221b9a4084a25fb75c1f6
similarity index 100%
rename from test/core/client_config/uri_corpus/a1140f3f8b5cffc1010221b9a4084a25fb75c1f6
rename to test/core/client_channel/uri_corpus/a1140f3f8b5cffc1010221b9a4084a25fb75c1f6
diff --git a/test/core/client_config/uri_corpus/a1f0f9b75bb354eb063d7cba4fcfa2d0b88d63de b/test/core/client_channel/uri_corpus/a1f0f9b75bb354eb063d7cba4fcfa2d0b88d63de
similarity index 100%
rename from test/core/client_config/uri_corpus/a1f0f9b75bb354eb063d7cba4fcfa2d0b88d63de
rename to test/core/client_channel/uri_corpus/a1f0f9b75bb354eb063d7cba4fcfa2d0b88d63de
diff --git a/test/core/client_config/uri_corpus/a296eb3d1d436ed7df7195b10aa3c4de3896f98d b/test/core/client_channel/uri_corpus/a296eb3d1d436ed7df7195b10aa3c4de3896f98d
similarity index 100%
rename from test/core/client_config/uri_corpus/a296eb3d1d436ed7df7195b10aa3c4de3896f98d
rename to test/core/client_channel/uri_corpus/a296eb3d1d436ed7df7195b10aa3c4de3896f98d
diff --git a/test/core/client_config/uri_corpus/a8b8e66050b424f1b8c07d46f868199fb7f60e38 b/test/core/client_channel/uri_corpus/a8b8e66050b424f1b8c07d46f868199fb7f60e38
similarity index 100%
rename from test/core/client_config/uri_corpus/a8b8e66050b424f1b8c07d46f868199fb7f60e38
rename to test/core/client_channel/uri_corpus/a8b8e66050b424f1b8c07d46f868199fb7f60e38
diff --git a/test/core/client_config/uri_corpus/aba1472880406a318ce207ee79815b7acf087757 b/test/core/client_channel/uri_corpus/aba1472880406a318ce207ee79815b7acf087757
similarity index 100%
rename from test/core/client_config/uri_corpus/aba1472880406a318ce207ee79815b7acf087757
rename to test/core/client_channel/uri_corpus/aba1472880406a318ce207ee79815b7acf087757
diff --git a/test/core/client_config/uri_corpus/af55baf8c8855e563befdf1eefbcbd46c5ddb8d2 b/test/core/client_channel/uri_corpus/af55baf8c8855e563befdf1eefbcbd46c5ddb8d2
similarity index 100%
rename from test/core/client_config/uri_corpus/af55baf8c8855e563befdf1eefbcbd46c5ddb8d2
rename to test/core/client_channel/uri_corpus/af55baf8c8855e563befdf1eefbcbd46c5ddb8d2
diff --git a/test/core/client_config/uri_corpus/b3c0bf66c2bf5d24ef1daf4cc5a9d6d5bd0e8bfd b/test/core/client_channel/uri_corpus/b3c0bf66c2bf5d24ef1daf4cc5a9d6d5bd0e8bfd
similarity index 100%
rename from test/core/client_config/uri_corpus/b3c0bf66c2bf5d24ef1daf4cc5a9d6d5bd0e8bfd
rename to test/core/client_channel/uri_corpus/b3c0bf66c2bf5d24ef1daf4cc5a9d6d5bd0e8bfd
diff --git a/test/core/client_config/uri_corpus/c28a47409cf5d95bb372238d01e73d8b831408e4 b/test/core/client_channel/uri_corpus/c28a47409cf5d95bb372238d01e73d8b831408e4
similarity index 100%
rename from test/core/client_config/uri_corpus/c28a47409cf5d95bb372238d01e73d8b831408e4
rename to test/core/client_channel/uri_corpus/c28a47409cf5d95bb372238d01e73d8b831408e4
diff --git a/test/core/client_config/uri_corpus/c3ef1d41888063a08700c3add1e4465aabcf8807 b/test/core/client_channel/uri_corpus/c3ef1d41888063a08700c3add1e4465aabcf8807
similarity index 100%
rename from test/core/client_config/uri_corpus/c3ef1d41888063a08700c3add1e4465aabcf8807
rename to test/core/client_channel/uri_corpus/c3ef1d41888063a08700c3add1e4465aabcf8807
diff --git a/test/core/client_config/uri_corpus/c550a76af21f9b9cc92a386d5c8998b26f8f2e4d b/test/core/client_channel/uri_corpus/c550a76af21f9b9cc92a386d5c8998b26f8f2e4d
similarity index 100%
rename from test/core/client_config/uri_corpus/c550a76af21f9b9cc92a386d5c8998b26f8f2e4d
rename to test/core/client_channel/uri_corpus/c550a76af21f9b9cc92a386d5c8998b26f8f2e4d
diff --git a/test/core/client_config/uri_corpus/c79721406d0ab80495f186fd88e37fba98637ae9 b/test/core/client_channel/uri_corpus/c79721406d0ab80495f186fd88e37fba98637ae9
similarity index 100%
rename from test/core/client_config/uri_corpus/c79721406d0ab80495f186fd88e37fba98637ae9
rename to test/core/client_channel/uri_corpus/c79721406d0ab80495f186fd88e37fba98637ae9
diff --git a/test/core/client_config/uri_corpus/ceb4e2264ba7a8d5be47d276b37ec09489e00245 b/test/core/client_channel/uri_corpus/ceb4e2264ba7a8d5be47d276b37ec09489e00245
similarity index 100%
rename from test/core/client_config/uri_corpus/ceb4e2264ba7a8d5be47d276b37ec09489e00245
rename to test/core/client_channel/uri_corpus/ceb4e2264ba7a8d5be47d276b37ec09489e00245
diff --git a/test/core/client_config/uri_corpus/cf4395958f5bfb46fd6f535a39657d016c75114c b/test/core/client_channel/uri_corpus/cf4395958f5bfb46fd6f535a39657d016c75114c
similarity index 100%
rename from test/core/client_config/uri_corpus/cf4395958f5bfb46fd6f535a39657d016c75114c
rename to test/core/client_channel/uri_corpus/cf4395958f5bfb46fd6f535a39657d016c75114c
diff --git a/test/core/client_config/uri_corpus/d46668372b7e20154a89409a7430a28e642afdca b/test/core/client_channel/uri_corpus/d46668372b7e20154a89409a7430a28e642afdca
similarity index 100%
rename from test/core/client_config/uri_corpus/d46668372b7e20154a89409a7430a28e642afdca
rename to test/core/client_channel/uri_corpus/d46668372b7e20154a89409a7430a28e642afdca
diff --git a/test/core/client_config/uri_corpus/d6fe7412a0a1d1c733160246f3fa425f4f97682a b/test/core/client_channel/uri_corpus/d6fe7412a0a1d1c733160246f3fa425f4f97682a
similarity index 100%
rename from test/core/client_config/uri_corpus/d6fe7412a0a1d1c733160246f3fa425f4f97682a
rename to test/core/client_channel/uri_corpus/d6fe7412a0a1d1c733160246f3fa425f4f97682a
diff --git a/test/core/client_config/uri_corpus/dns.txt b/test/core/client_channel/uri_corpus/dns.txt
similarity index 100%
rename from test/core/client_config/uri_corpus/dns.txt
rename to test/core/client_channel/uri_corpus/dns.txt
diff --git a/test/core/client_config/uri_corpus/e241f29957b0e30ec11aaaf91b2339f7015fa5fd b/test/core/client_channel/uri_corpus/e241f29957b0e30ec11aaaf91b2339f7015fa5fd
similarity index 100%
rename from test/core/client_config/uri_corpus/e241f29957b0e30ec11aaaf91b2339f7015fa5fd
rename to test/core/client_channel/uri_corpus/e241f29957b0e30ec11aaaf91b2339f7015fa5fd
diff --git a/test/core/client_config/uri_corpus/ea02d9fea9bad5b89cf353a0169238f584177e71 b/test/core/client_channel/uri_corpus/ea02d9fea9bad5b89cf353a0169238f584177e71
similarity index 100%
rename from test/core/client_config/uri_corpus/ea02d9fea9bad5b89cf353a0169238f584177e71
rename to test/core/client_channel/uri_corpus/ea02d9fea9bad5b89cf353a0169238f584177e71
diff --git a/test/core/client_config/uri_corpus/ec4731dddf94ed3ea92ae4d5a71f145ab6e3f6ee b/test/core/client_channel/uri_corpus/ec4731dddf94ed3ea92ae4d5a71f145ab6e3f6ee
similarity index 100%
rename from test/core/client_config/uri_corpus/ec4731dddf94ed3ea92ae4d5a71f145ab6e3f6ee
rename to test/core/client_channel/uri_corpus/ec4731dddf94ed3ea92ae4d5a71f145ab6e3f6ee
diff --git a/test/core/client_config/uri_corpus/ed2f78646f19fc47dd85ff0877c232b71913ece2 b/test/core/client_channel/uri_corpus/ed2f78646f19fc47dd85ff0877c232b71913ece2
similarity index 100%
rename from test/core/client_config/uri_corpus/ed2f78646f19fc47dd85ff0877c232b71913ece2
rename to test/core/client_channel/uri_corpus/ed2f78646f19fc47dd85ff0877c232b71913ece2
diff --git a/test/core/client_config/uri_corpus/f6889f4a6350fea1596a3adea5cdac02bd5d1ff3 b/test/core/client_channel/uri_corpus/f6889f4a6350fea1596a3adea5cdac02bd5d1ff3
similarity index 100%
rename from test/core/client_config/uri_corpus/f6889f4a6350fea1596a3adea5cdac02bd5d1ff3
rename to test/core/client_channel/uri_corpus/f6889f4a6350fea1596a3adea5cdac02bd5d1ff3
diff --git a/test/core/client_config/uri_corpus/f6f3bd030f0d321efe7c51ca3f057de23509af67 b/test/core/client_channel/uri_corpus/f6f3bd030f0d321efe7c51ca3f057de23509af67
similarity index 100%
rename from test/core/client_config/uri_corpus/f6f3bd030f0d321efe7c51ca3f057de23509af67
rename to test/core/client_channel/uri_corpus/f6f3bd030f0d321efe7c51ca3f057de23509af67
diff --git a/test/core/client_config/uri_corpus/f97598cff03306af3c70400608fec47268b5075d b/test/core/client_channel/uri_corpus/f97598cff03306af3c70400608fec47268b5075d
similarity index 100%
rename from test/core/client_config/uri_corpus/f97598cff03306af3c70400608fec47268b5075d
rename to test/core/client_channel/uri_corpus/f97598cff03306af3c70400608fec47268b5075d
diff --git a/test/core/client_config/uri_corpus/f9e1ec1fc642b575bc9955618b7065747f56b101 b/test/core/client_channel/uri_corpus/f9e1ec1fc642b575bc9955618b7065747f56b101
similarity index 100%
rename from test/core/client_config/uri_corpus/f9e1ec1fc642b575bc9955618b7065747f56b101
rename to test/core/client_channel/uri_corpus/f9e1ec1fc642b575bc9955618b7065747f56b101
diff --git a/test/core/client_config/uri_corpus/fe0630a3aeed2ec6f474f362e4c839478290d5c4 b/test/core/client_channel/uri_corpus/fe0630a3aeed2ec6f474f362e4c839478290d5c4
similarity index 100%
rename from test/core/client_config/uri_corpus/fe0630a3aeed2ec6f474f362e4c839478290d5c4
rename to test/core/client_channel/uri_corpus/fe0630a3aeed2ec6f474f362e4c839478290d5c4
diff --git a/test/core/client_config/uri_corpus/ipv4.txt b/test/core/client_channel/uri_corpus/ipv4.txt
similarity index 100%
rename from test/core/client_config/uri_corpus/ipv4.txt
rename to test/core/client_channel/uri_corpus/ipv4.txt
diff --git a/test/core/client_config/uri_corpus/ipv6.txt b/test/core/client_channel/uri_corpus/ipv6.txt
similarity index 100%
rename from test/core/client_config/uri_corpus/ipv6.txt
rename to test/core/client_channel/uri_corpus/ipv6.txt
diff --git a/test/core/client_config/uri_corpus/unix.txt b/test/core/client_channel/uri_corpus/unix.txt
similarity index 100%
rename from test/core/client_config/uri_corpus/unix.txt
rename to test/core/client_channel/uri_corpus/unix.txt
diff --git a/test/core/client_config/uri_fuzzer_test.c b/test/core/client_channel/uri_fuzzer_test.c
similarity index 97%
rename from test/core/client_config/uri_fuzzer_test.c
rename to test/core/client_channel/uri_fuzzer_test.c
index f297140..d2e3fb4 100644
--- a/test/core/client_config/uri_fuzzer_test.c
+++ b/test/core/client_channel/uri_fuzzer_test.c
@@ -37,7 +37,7 @@
 
 #include <grpc/support/alloc.h>
 
-#include "src/core/ext/client_config/uri_parser.h"
+#include "src/core/ext/client_channel/uri_parser.h"
 
 bool squelch = true;
 bool leak_check = true;
diff --git a/test/core/client_config/uri_parser_test.c b/test/core/client_channel/uri_parser_test.c
similarity index 98%
rename from test/core/client_config/uri_parser_test.c
rename to test/core/client_channel/uri_parser_test.c
index 323e8b6..5f32d32 100644
--- a/test/core/client_config/uri_parser_test.c
+++ b/test/core/client_channel/uri_parser_test.c
@@ -31,7 +31,7 @@
  *
  */
 
-#include "src/core/ext/client_config/uri_parser.h"
+#include "src/core/ext/client_channel/uri_parser.h"
 
 #include <string.h>
 
diff --git a/test/core/end2end/bad_server_response_test.c b/test/core/end2end/bad_server_response_test.c
index 5ed0eb6..9a3e130 100644
--- a/test/core/end2end/bad_server_response_test.c
+++ b/test/core/end2end/bad_server_response_test.c
@@ -30,6 +30,13 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  *
  */
+
+/* With the addition of a libuv endpoint, sockaddr.h now includes uv.h when
+   using that endpoint. Because of various transitive includes in uv.h,
+   including windows.h on Windows, uv.h must be included before other system
+   headers. Therefore, sockaddr.h must always be included first */
+#include "src/core/lib/iomgr/sockaddr.h"
+
 #include <string.h>
 
 #include <grpc/grpc.h>
@@ -40,7 +47,6 @@
 #include <grpc/support/thd.h>
 
 // #include "src/core/ext/transport/chttp2/transport/internal.h"
-#include "src/core/lib/iomgr/sockaddr.h"
 #include "src/core/lib/support/string.h"
 #include "test/core/end2end/cq_verifier.h"
 #include "test/core/util/port.h"
diff --git a/test/core/end2end/connection_refused_test.c b/test/core/end2end/connection_refused_test.c
index 62278d6..07d7010 100644
--- a/test/core/end2end/connection_refused_test.c
+++ b/test/core/end2end/connection_refused_test.c
@@ -37,14 +37,16 @@
 #include <grpc/support/alloc.h>
 #include <grpc/support/host_port.h>
 #include <grpc/support/log.h>
+#include <grpc/support/string_util.h>
 
 #include "test/core/end2end/cq_verifier.h"
+#include "test/core/end2end/fake_resolver.h"
 #include "test/core/util/port.h"
 #include "test/core/util/test_config.h"
 
 static void *tag(intptr_t i) { return (void *)i; }
 
-static void run_test(bool wait_for_ready) {
+static void run_test(bool wait_for_ready, bool use_service_config) {
   grpc_channel *chan;
   grpc_call *call;
   gpr_timespec deadline = GRPC_TIMEOUT_SECONDS_TO_DEADLINE(2);
@@ -57,8 +59,10 @@
   char *details = NULL;
   size_t details_capacity = 0;
 
-  gpr_log(GPR_INFO, "TEST: wait_for_ready=%d", wait_for_ready);
+  gpr_log(GPR_INFO, "TEST: wait_for_ready=%d use_service_config=%d",
+          wait_for_ready, use_service_config);
 
+  grpc_fake_resolver_init();
   grpc_init();
 
   grpc_metadata_array_init(&trailing_metadata_recv);
@@ -69,11 +73,21 @@
   /* create a call, channel to a port which will refuse connection */
   int port = grpc_pick_unused_port_or_die();
   char *addr;
-  gpr_join_host_port(&addr, "localhost", port);
+  gpr_join_host_port(&addr, "127.0.0.1", port);
+  if (use_service_config) {
+    GPR_ASSERT(wait_for_ready);
+    char *server_uri;
+    gpr_asprintf(&server_uri,
+                 "test:%s?method_name=/service/method&wait_for_ready=1", addr);
+    gpr_free(addr);
+    addr = server_uri;
+  }
+  gpr_log(GPR_INFO, "server: %s", addr);
 
   chan = grpc_insecure_channel_create(addr, NULL, NULL);
   call = grpc_channel_create_call(chan, NULL, GRPC_PROPAGATE_DEFAULTS, cq,
-                                  "/Foo", "nonexistant", deadline, NULL);
+                                  "/service/method", "nonexistant", deadline,
+                                  NULL);
 
   gpr_free(addr);
 
@@ -81,7 +95,9 @@
   op = ops;
   op->op = GRPC_OP_SEND_INITIAL_METADATA;
   op->data.send_initial_metadata.count = 0;
-  op->flags = wait_for_ready ? GRPC_INITIAL_METADATA_WAIT_FOR_READY : 0;
+  op->flags = (wait_for_ready && !use_service_config)
+                  ? GRPC_INITIAL_METADATA_WAIT_FOR_READY
+                  : 0;
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_RECV_STATUS_ON_CLIENT;
@@ -122,7 +138,8 @@
 
 int main(int argc, char **argv) {
   grpc_test_init(argc, argv);
-  run_test(false);
-  run_test(true);
+  run_test(false /* wait_for_ready */, false /* use_service_config */);
+  run_test(true /* wait_for_ready */, false /* use_service_config */);
+  run_test(true /* wait_for_ready */, true /* use_service_config */);
   return 0;
 }
diff --git a/test/core/end2end/cq_verifier.c b/test/core/end2end/cq_verifier.c
index 1f42d34..3e7e3f2 100644
--- a/test/core/end2end/cq_verifier.c
+++ b/test/core/end2end/cq_verifier.c
@@ -126,14 +126,14 @@
   return out;
 }
 
-static int byte_buffer_eq_slice(grpc_byte_buffer *bb, gpr_slice b) {
+int raw_byte_buffer_eq_slice(grpc_byte_buffer *rbb, gpr_slice b) {
   gpr_slice a;
   int ok;
 
-  if (!bb) return 0;
+  if (!rbb) return 0;
 
-  a = merge_slices(bb->data.raw.slice_buffer.slices,
-                   bb->data.raw.slice_buffer.count);
+  a = merge_slices(rbb->data.raw.slice_buffer.slices,
+                   rbb->data.raw.slice_buffer.count);
   ok = GPR_SLICE_LENGTH(a) == GPR_SLICE_LENGTH(b) &&
        0 == memcmp(GPR_SLICE_START_PTR(a), GPR_SLICE_START_PTR(b),
                    GPR_SLICE_LENGTH(a));
@@ -142,6 +142,21 @@
   return ok;
 }
 
+int byte_buffer_eq_slice(grpc_byte_buffer *bb, gpr_slice b) {
+  grpc_byte_buffer_reader reader;
+  grpc_byte_buffer *rbb;
+  int res;
+
+  GPR_ASSERT(grpc_byte_buffer_reader_init(&reader, bb) &&
+             "Couldn't init byte buffer reader");
+  rbb = grpc_raw_byte_buffer_from_reader(&reader);
+  res = raw_byte_buffer_eq_slice(rbb, b);
+  grpc_byte_buffer_reader_destroy(&reader);
+  grpc_byte_buffer_destroy(rbb);
+
+  return res;
+}
+
 int byte_buffer_eq_string(grpc_byte_buffer *bb, const char *str) {
   grpc_byte_buffer_reader reader;
   grpc_byte_buffer *rbb;
@@ -150,7 +165,7 @@
   GPR_ASSERT(grpc_byte_buffer_reader_init(&reader, bb) &&
              "Couldn't init byte buffer reader");
   rbb = grpc_raw_byte_buffer_from_reader(&reader);
-  res = byte_buffer_eq_slice(rbb, gpr_slice_from_copied_string(str));
+  res = raw_byte_buffer_eq_slice(rbb, gpr_slice_from_copied_string(str));
   grpc_byte_buffer_reader_destroy(&reader);
   grpc_byte_buffer_destroy(rbb);
 
diff --git a/test/core/end2end/cq_verifier.h b/test/core/end2end/cq_verifier.h
index 0a7c03c..47464fa 100644
--- a/test/core/end2end/cq_verifier.h
+++ b/test/core/end2end/cq_verifier.h
@@ -67,6 +67,7 @@
 #define CQ_EXPECT_COMPLETION(v, tag, success) \
   cq_expect_completion(v, __FILE__, __LINE__, tag, success)
 
+int byte_buffer_eq_slice(grpc_byte_buffer *bb, gpr_slice b);
 int byte_buffer_eq_string(grpc_byte_buffer *byte_buffer, const char *string);
 int contains_metadata(grpc_metadata_array *array, const char *key,
                       const char *value);
diff --git a/test/core/client_config/uri_fuzzer_test.c b/test/core/end2end/cq_verifier_internal.h
similarity index 76%
copy from test/core/client_config/uri_fuzzer_test.c
copy to test/core/end2end/cq_verifier_internal.h
index f297140..1549608 100644
--- a/test/core/client_config/uri_fuzzer_test.c
+++ b/test/core/end2end/cq_verifier_internal.h
@@ -31,26 +31,17 @@
  *
  */
 
-#include <stdbool.h>
-#include <stdint.h>
-#include <string.h>
+#ifndef GRPC_TEST_CORE_END2END_CQ_VERIFIER_INTERNAL_H
+#define GRPC_TEST_CORE_END2END_CQ_VERIFIER_INTERNAL_H
 
-#include <grpc/support/alloc.h>
+#include "test/core/end2end/cq_verifier.h"
 
-#include "src/core/ext/client_config/uri_parser.h"
+typedef struct expectation expectation;
 
-bool squelch = true;
-bool leak_check = true;
+expectation *cq_verifier_get_first_expectation(cq_verifier *v);
 
-int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
-  char *s = gpr_malloc(size + 1);
-  memcpy(s, data, size);
-  s[size] = 0;
+void cq_verifier_set_first_expectation(cq_verifier *v, expectation *e);
 
-  grpc_uri *x;
-  if ((x = grpc_uri_parse(s, 1))) {
-    grpc_uri_destroy(x);
-  }
-  gpr_free(s);
-  return 0;
-}
+grpc_event cq_verifier_next_event(cq_verifier *v, int timeout_seconds);
+
+#endif /* GRPC_TEST_CORE_END2END_CQ_VERIFIER_INTERNAL_H */
diff --git a/src/core/ext/client_config/http_connect_handshaker.h b/test/core/end2end/cq_verifier_native.c
similarity index 60%
copy from src/core/ext/client_config/http_connect_handshaker.h
copy to test/core/end2end/cq_verifier_native.c
index 1fc3948..b1fcb4b 100644
--- a/src/core/ext/client_config/http_connect_handshaker.h
+++ b/test/core/end2end/cq_verifier_native.c
@@ -31,17 +31,44 @@
  *
  */
 
-#ifndef GRPC_CORE_EXT_CLIENT_CONFIG_HTTP_CONNECT_HANDSHAKER_H
-#define GRPC_CORE_EXT_CLIENT_CONFIG_HTTP_CONNECT_HANDSHAKER_H
+/* This check is for testing only. */
+#ifndef GRPC_UV
 
-#include "src/core/lib/channel/handshaker.h"
+#include "test/core/end2end/cq_verifier_internal.h"
 
-/// Does NOT take ownership of \a proxy_server or \a server_name.
-grpc_handshaker* grpc_http_connect_handshaker_create(const char* proxy_server,
-                                                     const char* server_name);
+/* the verifier itself */
+struct cq_verifier {
+  /* bound completion queue */
+  grpc_completion_queue *cq;
+  /* start of expectation list */
+  expectation *first_expectation;
+  uv_timer_t timer;
+};
 
-/// Returns the name of the proxy to use, or NULL if no proxy is configured.
-/// Caller takes ownership of result.
-char* grpc_get_http_proxy_server();
+cq_verifier *cq_verifier_create(grpc_completion_queue *cq) {
+  cq_verifier *v = gpr_malloc(sizeof(cq_verifier));
+  v->cq = cq;
+  cq_verifier_set_first_expectation(v, NULL);
+  return v;
+}
 
-#endif /* GRPC_CORE_EXT_CLIENT_CONFIG_HTTP_CONNECT_HANDSHAKER_H */
+void cq_verifier_destroy(cq_verifier *v) {
+  cq_verify(v);
+  gpr_free(v);
+}
+
+expectation *cq_verifier_get_first_expectation(cq_verifier *v) {
+  return v->first_expectation;
+}
+
+void cq_verifier_set_first_expectation(cq_verifier *v, expectation *e) {
+  v->first_expectation = e;
+}
+
+grpc_event cq_verifier_next_event(cq_verifier *v, int timeout_seconds) {
+  const gpr_timespec deadline =
+      GRPC_TIMEOUT_SECONDS_TO_DEADLINE(timeout_seconds);
+  return grpc_completion_queue_next(v->cq, deadline, NULL);
+}
+
+#endif /* GRPC_UV */
diff --git a/test/core/end2end/cq_verifier_uv.c b/test/core/end2end/cq_verifier_uv.c
new file mode 100644
index 0000000..2b5a2ca
--- /dev/null
+++ b/test/core/end2end/cq_verifier_uv.c
@@ -0,0 +1,112 @@
+/*
+ *
+ * Copyright 2016, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ *     * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+#include <grpc/support/port_platform.h>
+
+#ifdef GRPC_UV
+
+#include <uv.h>
+
+#include <grpc/support/alloc.h>
+#include <grpc/support/log.h>
+
+#include "test/core/end2end/cq_verifier_internal.h"
+
+typedef enum timer_state {
+  TIMER_STARTED,
+  TIMER_TRIGGERED,
+  TIMER_CLOSED
+} timer_state;
+
+/* the verifier itself */
+struct cq_verifier {
+  /* bound completion queue */
+  grpc_completion_queue *cq;
+  /* start of expectation list */
+  expectation *first_expectation;
+  uv_timer_t timer;
+};
+
+cq_verifier *cq_verifier_create(grpc_completion_queue *cq) {
+  cq_verifier *v = gpr_malloc(sizeof(cq_verifier));
+  v->cq = cq;
+  v->first_expectation = NULL;
+  uv_timer_init(uv_default_loop(), &v->timer);
+  v->timer.data = (void *)TIMER_STARTED;
+  return v;
+}
+
+static void timer_close_cb(uv_handle_t *handle) {
+  handle->data = (void *)TIMER_CLOSED;
+}
+
+void cq_verifier_destroy(cq_verifier *v) {
+  cq_verify(v);
+  uv_close((uv_handle_t *)&v->timer, timer_close_cb);
+  while ((timer_state)v->timer.data != TIMER_CLOSED) {
+    uv_run(uv_default_loop(), UV_RUN_NOWAIT);
+  }
+  gpr_free(v);
+}
+
+expectation *cq_verifier_get_first_expectation(cq_verifier *v) {
+  return v->first_expectation;
+}
+
+void cq_verifier_set_first_expectation(cq_verifier *v, expectation *e) {
+  v->first_expectation = e;
+}
+
+static void timer_run_cb(uv_timer_t *timer) {
+  timer->data = (void *)TIMER_TRIGGERED;
+}
+
+grpc_event cq_verifier_next_event(cq_verifier *v, int timeout_seconds) {
+  uint64_t timeout_ms =
+      timeout_seconds < 0 ? 0 : (uint64_t)timeout_seconds * 1000;
+  grpc_event ev;
+  v->timer.data = (void *)TIMER_STARTED;
+  uv_timer_start(&v->timer, timer_run_cb, timeout_ms, 0);
+  ev = grpc_completion_queue_next(v->cq, gpr_inf_past(GPR_CLOCK_MONOTONIC),
+                                  NULL);
+  // Stop the loop if the timer goes off or we get a non-timeout event
+  while (((timer_state)v->timer.data != TIMER_TRIGGERED) &&
+         ev.type == GRPC_QUEUE_TIMEOUT) {
+    uv_run(uv_default_loop(), UV_RUN_ONCE);
+    ev = grpc_completion_queue_next(v->cq, gpr_inf_past(GPR_CLOCK_MONOTONIC),
+                                    NULL);
+  }
+  return ev;
+}
+
+#endif /* GRPC_UV */
diff --git a/test/core/end2end/dualstack_socket_test.c b/test/core/end2end/dualstack_socket_test.c
index cb07ca5..f427202 100644
--- a/test/core/end2end/dualstack_socket_test.c
+++ b/test/core/end2end/dualstack_socket_test.c
@@ -31,6 +31,11 @@
  *
  */
 
+#include "src/core/lib/iomgr/port.h"
+
+// This test won't work except with posix sockets enabled
+#ifdef GRPC_POSIX_SOCKET
+
 #include <string.h>
 
 #include <grpc/grpc.h>
@@ -353,3 +358,9 @@
 
   return 0;
 }
+
+#else /* GRPC_POSIX_SOCKET */
+
+int main(int argc, char **argv) { return 1; }
+
+#endif /* GRPC_POSIX_SOCKET */
diff --git a/test/core/end2end/end2end_tests.h b/test/core/end2end/end2end_tests.h
index 34af093..e20273d 100644
--- a/test/core/end2end/end2end_tests.h
+++ b/test/core/end2end/end2end_tests.h
@@ -43,6 +43,7 @@
 #define FEATURE_MASK_SUPPORTS_HOSTNAME_VERIFICATION 2
 #define FEATURE_MASK_SUPPORTS_PER_CALL_CREDENTIALS 4
 #define FEATURE_MASK_SUPPORTS_REQUEST_PROXYING 8
+#define FEATURE_MASK_SUPPORTS_QUERY_ARGS 16
 
 #define FAIL_AUTH_CHECK_SERVER_ARG_NAME "fail_auth_check"
 
@@ -59,7 +60,7 @@
   grpc_end2end_test_fixture (*create_fixture)(grpc_channel_args *client_args,
                                               grpc_channel_args *server_args);
   void (*init_client)(grpc_end2end_test_fixture *f,
-                      grpc_channel_args *client_args);
+                      grpc_channel_args *client_args, const char *query_args);
   void (*init_server)(grpc_end2end_test_fixture *f,
                       grpc_channel_args *server_args);
   void (*tear_down_data)(grpc_end2end_test_fixture *f);
diff --git a/test/core/end2end/fake_resolver.c b/test/core/end2end/fake_resolver.c
index 8a6624a..ed97217 100644
--- a/test/core/end2end/fake_resolver.c
+++ b/test/core/end2end/fake_resolver.c
@@ -42,8 +42,9 @@
 #include <grpc/support/port_platform.h>
 #include <grpc/support/string_util.h>
 
-#include "src/core/ext/client_config/parse_address.h"
-#include "src/core/ext/client_config/resolver_registry.h"
+#include "src/core/ext/client_channel/method_config.h"
+#include "src/core/ext/client_channel/parse_address.h"
+#include "src/core/ext/client_channel/resolver_registry.h"
 #include "src/core/lib/channel/channel_args.h"
 #include "src/core/lib/iomgr/resolve_address.h"
 #include "src/core/lib/iomgr/unix_sockets_posix.h"
@@ -61,6 +62,7 @@
   char* target_name;  // the path component of the uri passed in
   grpc_lb_addresses* addresses;
   char* lb_policy_name;
+  grpc_method_config_table* method_config_table;
 
   // mutex guarding the rest of the state
   gpr_mu mu;
@@ -78,6 +80,7 @@
   gpr_free(r->target_name);
   grpc_lb_addresses_destroy(r->addresses, NULL /* user_data_destroy */);
   gpr_free(r->lb_policy_name);
+  grpc_method_config_table_unref(r->method_config_table);
   gpr_free(r);
 }
 
@@ -97,10 +100,16 @@
                                                    fake_resolver* r) {
   if (r->next_completion != NULL && !r->published) {
     r->published = true;
+    grpc_channel_args* lb_policy_args = NULL;
+    if (r->method_config_table != NULL) {
+      const grpc_arg arg =
+          grpc_method_config_table_create_channel_arg(r->method_config_table);
+      lb_policy_args = grpc_channel_args_copy_and_add(NULL /* src */, &arg, 1);
+    }
     *r->target_result = grpc_resolver_result_create(
         r->target_name,
         grpc_lb_addresses_copy(r->addresses, NULL /* user_data_copy */),
-        r->lb_policy_name, NULL /* lb_policy_args */);
+        r->lb_policy_name, lb_policy_args);
     grpc_exec_ctx_sched(exec_ctx, r->next_completion, GRPC_ERROR_NONE, NULL);
     r->next_completion = NULL;
   }
@@ -165,10 +174,7 @@
     grpc_uri ith_uri = *args->uri;
     char* part_str = gpr_dump_slice(path_parts.slices[i], GPR_DUMP_ASCII);
     ith_uri.path = part_str;
-    if (!parse_ipv4(
-            &ith_uri,
-            (struct sockaddr_storage*)(&addresses->addresses[i].address.addr),
-            &addresses->addresses[i].address.len)) {
+    if (!parse_ipv4(&ith_uri, &addresses->addresses[i].address)) {
       errors_found = true;
     }
     gpr_free(part_str);
@@ -181,6 +187,45 @@
     grpc_lb_addresses_destroy(addresses, NULL /* user_data_destroy */);
     return NULL;
   }
+  // Construct method config table.
+  // We only support parameters for a single method.
+  grpc_method_config_table* method_config_table = NULL;
+  const char* method_name = grpc_uri_get_query_arg(args->uri, "method_name");
+  if (method_name != NULL) {
+    const char* wait_for_ready_str =
+        grpc_uri_get_query_arg(args->uri, "wait_for_ready");
+    // Anything other than "0" is interpreted as true.
+    bool wait_for_ready =
+        wait_for_ready_str != NULL && strcmp("0", wait_for_ready_str) != 0;
+    const char* timeout_str =
+        grpc_uri_get_query_arg(args->uri, "timeout_seconds");
+    gpr_timespec timeout = {timeout_str == NULL ? 0 : atoi(timeout_str), 0,
+                            GPR_TIMESPAN};
+    const char* max_request_message_bytes_str =
+        grpc_uri_get_query_arg(args->uri, "max_request_message_bytes");
+    int32_t max_request_message_bytes =
+        max_request_message_bytes_str == NULL
+            ? 0
+            : atoi(max_request_message_bytes_str);
+    const char* max_response_message_bytes_str =
+        grpc_uri_get_query_arg(args->uri, "max_response_message_bytes");
+    int32_t max_response_message_bytes =
+        max_response_message_bytes_str == NULL
+            ? 0
+            : atoi(max_response_message_bytes_str);
+    grpc_method_config* method_config = grpc_method_config_create(
+        wait_for_ready_str == NULL ? NULL : &wait_for_ready,
+        timeout_str == NULL ? NULL : &timeout,
+        max_request_message_bytes_str == NULL ? NULL
+                                              : &max_request_message_bytes,
+        max_response_message_bytes_str == NULL ? NULL
+                                               : &max_response_message_bytes);
+    grpc_method_config_table_entry entry = {grpc_mdstr_from_string(method_name),
+                                            method_config};
+    method_config_table = grpc_method_config_table_create(1, &entry);
+    GRPC_MDSTR_UNREF(entry.method_name);
+    grpc_method_config_unref(method_config);
+  }
   // Instantiate resolver.
   fake_resolver* r = gpr_malloc(sizeof(fake_resolver));
   memset(r, 0, sizeof(*r));
@@ -188,6 +233,7 @@
   r->addresses = addresses;
   r->lb_policy_name =
       gpr_strdup(grpc_uri_get_query_arg(args->uri, "lb_policy"));
+  r->method_config_table = method_config_table;
   gpr_mu_init(&r->mu);
   grpc_resolver_init(&r->base, &fake_resolver_vtable);
   return &r->base;
diff --git a/test/core/end2end/fixtures/h2_census.c b/test/core/end2end/fixtures/h2_census.c
index e46b39e..c2e1acf 100644
--- a/test/core/end2end/fixtures/h2_census.c
+++ b/test/core/end2end/fixtures/h2_census.c
@@ -41,7 +41,7 @@
 #include <grpc/support/sync.h>
 #include <grpc/support/thd.h>
 #include <grpc/support/useful.h>
-#include "src/core/ext/client_config/client_channel.h"
+#include "src/core/ext/client_channel/client_channel.h"
 #include "src/core/ext/transport/chttp2/transport/chttp2_transport.h"
 #include "src/core/lib/channel/channel_args.h"
 #include "src/core/lib/channel/connected_channel.h"
@@ -79,13 +79,15 @@
 }
 
 void chttp2_init_client_fullstack(grpc_end2end_test_fixture *f,
-                                  grpc_channel_args *client_args) {
+                                  grpc_channel_args *client_args,
+                                  const char *query_args) {
+  GPR_ASSERT(query_args == NULL);
   fullstack_fixture_data *ffd = f->fixture_data;
   grpc_arg arg = make_census_enable_arg();
   client_args = grpc_channel_args_copy_and_add(client_args, &arg, 1);
   f->client = grpc_insecure_channel_create(ffd->localaddr, client_args, NULL);
-  grpc_channel_args_destroy(client_args);
   GPR_ASSERT(f->client);
+  grpc_channel_args_destroy(client_args);
 }
 
 void chttp2_init_server_fullstack(grpc_end2end_test_fixture *f,
diff --git a/test/core/end2end/fixtures/h2_compress.c b/test/core/end2end/fixtures/h2_compress.c
index 8f9b7c9..94a198f 100644
--- a/test/core/end2end/fixtures/h2_compress.c
+++ b/test/core/end2end/fixtures/h2_compress.c
@@ -41,7 +41,7 @@
 #include <grpc/support/sync.h>
 #include <grpc/support/thd.h>
 #include <grpc/support/useful.h>
-#include "src/core/ext/client_config/client_channel.h"
+#include "src/core/ext/client_channel/client_channel.h"
 #include "src/core/ext/transport/chttp2/transport/chttp2_transport.h"
 #include "src/core/lib/channel/channel_args.h"
 #include "src/core/lib/channel/connected_channel.h"
@@ -75,7 +75,9 @@
 }
 
 void chttp2_init_client_fullstack_compression(grpc_end2end_test_fixture *f,
-                                              grpc_channel_args *client_args) {
+                                              grpc_channel_args *client_args,
+                                              const char *query_args) {
+  GPR_ASSERT(query_args == NULL);
   fullstack_compression_fixture_data *ffd = f->fixture_data;
   if (ffd->client_args_compression != NULL) {
     grpc_channel_args_destroy(ffd->client_args_compression);
diff --git a/test/core/end2end/fixtures/h2_fake_resolver.c b/test/core/end2end/fixtures/h2_fake_resolver.c
new file mode 100644
index 0000000..429f3c9
--- /dev/null
+++ b/test/core/end2end/fixtures/h2_fake_resolver.c
@@ -0,0 +1,128 @@
+//
+// Copyright 2016, Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+//
+
+#include "test/core/end2end/end2end_tests.h"
+
+#include <string.h>
+
+#include <grpc/support/alloc.h>
+#include <grpc/support/host_port.h>
+#include <grpc/support/log.h>
+#include <grpc/support/string_util.h>
+#include <grpc/support/sync.h>
+#include <grpc/support/thd.h>
+#include <grpc/support/useful.h>
+
+#include "src/core/ext/client_channel/client_channel.h"
+#include "src/core/ext/transport/chttp2/transport/chttp2_transport.h"
+#include "src/core/lib/channel/connected_channel.h"
+#include "src/core/lib/channel/http_server_filter.h"
+#include "src/core/lib/surface/channel.h"
+#include "src/core/lib/surface/server.h"
+#include "test/core/end2end/fake_resolver.h"
+#include "test/core/util/port.h"
+#include "test/core/util/test_config.h"
+
+typedef struct fullstack_fixture_data {
+  char *localaddr;
+} fullstack_fixture_data;
+
+static grpc_end2end_test_fixture chttp2_create_fixture_fullstack(
+    grpc_channel_args *client_args, grpc_channel_args *server_args) {
+  grpc_end2end_test_fixture f;
+  int port = grpc_pick_unused_port_or_die();
+  fullstack_fixture_data *ffd = gpr_malloc(sizeof(fullstack_fixture_data));
+  memset(&f, 0, sizeof(f));
+
+  gpr_join_host_port(&ffd->localaddr, "127.0.0.1", port);
+
+  f.fixture_data = ffd;
+  f.cq = grpc_completion_queue_create(NULL);
+
+  return f;
+}
+
+void chttp2_init_client_fullstack(grpc_end2end_test_fixture *f,
+                                  grpc_channel_args *client_args,
+                                  const char *query_args) {
+  fullstack_fixture_data *ffd = f->fixture_data;
+  char *server_uri;
+  gpr_asprintf(&server_uri, "test:%s%s%s", ffd->localaddr,
+               (query_args == NULL ? "" : "?"),
+               (query_args == NULL ? "" : query_args));
+  gpr_log(GPR_INFO, "server_uri: %s", server_uri);
+  f->client = grpc_insecure_channel_create(server_uri, client_args, NULL);
+  GPR_ASSERT(f->client);
+  gpr_free(server_uri);
+}
+
+void chttp2_init_server_fullstack(grpc_end2end_test_fixture *f,
+                                  grpc_channel_args *server_args) {
+  fullstack_fixture_data *ffd = f->fixture_data;
+  if (f->server) {
+    grpc_server_destroy(f->server);
+  }
+  f->server = grpc_server_create(server_args, NULL);
+  grpc_server_register_completion_queue(f->server, f->cq, NULL);
+  GPR_ASSERT(grpc_server_add_insecure_http2_port(f->server, ffd->localaddr));
+  grpc_server_start(f->server);
+}
+
+void chttp2_tear_down_fullstack(grpc_end2end_test_fixture *f) {
+  fullstack_fixture_data *ffd = f->fixture_data;
+  gpr_free(ffd->localaddr);
+  gpr_free(ffd);
+}
+
+/* All test configurations */
+static grpc_end2end_test_config configs[] = {
+    {"chttp2/fullstack", FEATURE_MASK_SUPPORTS_DELAYED_CONNECTION |
+                             FEATURE_MASK_SUPPORTS_QUERY_ARGS,
+     chttp2_create_fixture_fullstack, chttp2_init_client_fullstack,
+     chttp2_init_server_fullstack, chttp2_tear_down_fullstack},
+};
+
+int main(int argc, char **argv) {
+  size_t i;
+
+  grpc_test_init(argc, argv);
+  grpc_end2end_tests_pre_init();
+  grpc_fake_resolver_init();
+  grpc_init();
+
+  for (i = 0; i < sizeof(configs) / sizeof(*configs); i++) {
+    grpc_end2end_tests(argc, argv, configs[i]);
+  }
+
+  grpc_shutdown();
+
+  return 0;
+}
diff --git a/test/core/end2end/fixtures/h2_fakesec.c b/test/core/end2end/fixtures/h2_fakesec.c
index 44408b2..dbe9011 100644
--- a/test/core/end2end/fixtures/h2_fakesec.c
+++ b/test/core/end2end/fixtures/h2_fakesec.c
@@ -105,7 +105,9 @@
 }
 
 static void chttp2_init_client_fake_secure_fullstack(
-    grpc_end2end_test_fixture *f, grpc_channel_args *client_args) {
+    grpc_end2end_test_fixture *f, grpc_channel_args *client_args,
+    const char *query_args) {
+  GPR_ASSERT(query_args == NULL);
   grpc_channel_credentials *fake_ts_creds =
       grpc_fake_transport_security_credentials_create();
   chttp2_init_client_secure_fullstack(f, client_args, fake_ts_creds);
diff --git a/test/core/end2end/fixtures/h2_fd.c b/test/core/end2end/fixtures/h2_fd.c
index 8561fee..2dfa54f 100644
--- a/test/core/end2end/fixtures/h2_fd.c
+++ b/test/core/end2end/fixtures/h2_fd.c
@@ -31,6 +31,11 @@
  *
  */
 
+#include "src/core/lib/iomgr/port.h"
+
+// This test won't work except with posix sockets enabled
+#ifdef GRPC_POSIX_SOCKET
+
 #include "test/core/end2end/end2end_tests.h"
 
 #include <fcntl.h>
@@ -73,7 +78,10 @@
 }
 
 static void chttp2_init_client_socketpair(grpc_end2end_test_fixture *f,
-                                          grpc_channel_args *client_args) {
+                                          grpc_channel_args *client_args,
+                                          const char *query_args) {
+  GPR_ASSERT(query_args == NULL);
+
   grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
   sp_fixture_data *sfd = f->fixture_data;
 
@@ -126,3 +134,9 @@
 
   return 0;
 }
+
+#else /* GRPC_POSIX_SOCKET */
+
+int main(int argc, char **argv) { return 1; }
+
+#endif /* GRPC_POSIX_SOCKET */
diff --git a/test/core/end2end/fixtures/h2_full+pipe.c b/test/core/end2end/fixtures/h2_full+pipe.c
index e7dfc56..e0026a7 100644
--- a/test/core/end2end/fixtures/h2_full+pipe.c
+++ b/test/core/end2end/fixtures/h2_full+pipe.c
@@ -31,6 +31,11 @@
  *
  */
 
+#include "src/core/lib/iomgr/port.h"
+
+// This test requires posix wakeup fds
+#ifdef GRPC_POSIX_WAKEUP_FD
+
 #include "test/core/end2end/end2end_tests.h"
 
 #include <string.h>
@@ -41,7 +46,7 @@
 #include <grpc/support/sync.h>
 #include <grpc/support/thd.h>
 #include <grpc/support/useful.h>
-#include "src/core/ext/client_config/client_channel.h"
+#include "src/core/ext/client_channel/client_channel.h"
 #include "src/core/ext/transport/chttp2/transport/chttp2_transport.h"
 #include "src/core/lib/channel/connected_channel.h"
 #include "src/core/lib/channel/http_server_filter.h"
@@ -71,7 +76,9 @@
 }
 
 void chttp2_init_client_fullstack(grpc_end2end_test_fixture *f,
-                                  grpc_channel_args *client_args) {
+                                  grpc_channel_args *client_args,
+                                  const char *query_args) {
+  GPR_ASSERT(query_args == NULL);
   fullstack_fixture_data *ffd = f->fixture_data;
   f->client = grpc_insecure_channel_create(ffd->localaddr, client_args, NULL);
   GPR_ASSERT(f->client);
@@ -119,3 +126,9 @@
 
   return 0;
 }
+
+#else /* GRPC_POSIX_WAKEUP_FD */
+
+int main(int argc, char **argv) { return 1; }
+
+#endif /* GRPC_POSIX_WAKEUP_FD */
diff --git a/test/core/end2end/fixtures/h2_full+trace.c b/test/core/end2end/fixtures/h2_full+trace.c
index c4dc5b9..eadc62d 100644
--- a/test/core/end2end/fixtures/h2_full+trace.c
+++ b/test/core/end2end/fixtures/h2_full+trace.c
@@ -31,9 +31,14 @@
  *
  */
 
+#include "src/core/lib/iomgr/port.h"
+
 #include "test/core/end2end/end2end_tests.h"
 
 #include <string.h>
+#ifdef GRPC_POSIX_SOCKET
+#include <unistd.h>
+#endif
 
 #include <grpc/support/alloc.h>
 #include <grpc/support/host_port.h>
@@ -41,7 +46,7 @@
 #include <grpc/support/sync.h>
 #include <grpc/support/thd.h>
 #include <grpc/support/useful.h>
-#include "src/core/ext/client_config/client_channel.h"
+#include "src/core/ext/client_channel/client_channel.h"
 #include "src/core/ext/transport/chttp2/transport/chttp2_transport.h"
 #include "src/core/lib/channel/connected_channel.h"
 #include "src/core/lib/channel/http_server_filter.h"
@@ -71,7 +76,9 @@
 }
 
 void chttp2_init_client_fullstack(grpc_end2end_test_fixture *f,
-                                  grpc_channel_args *client_args) {
+                                  grpc_channel_args *client_args,
+                                  const char *query_args) {
+  GPR_ASSERT(query_args == NULL);
   fullstack_fixture_data *ffd = f->fixture_data;
   f->client = grpc_insecure_channel_create(ffd->localaddr, client_args, NULL);
   GPR_ASSERT(f->client);
@@ -109,7 +116,7 @@
      code paths in trace.c to be taken */
   gpr_setenv("GRPC_TRACE", "doesnt-exist,http,all");
 
-#ifdef GPR_POSIX_SOCKET
+#ifdef GRPC_POSIX_SOCKET
   g_fixture_slowdown_factor = isatty(STDOUT_FILENO) ? 10.0 : 1.0;
 #else
   g_fixture_slowdown_factor = 10.0;
diff --git a/test/core/end2end/fixtures/h2_full.c b/test/core/end2end/fixtures/h2_full.c
index 4a2f17e..182ce23 100644
--- a/test/core/end2end/fixtures/h2_full.c
+++ b/test/core/end2end/fixtures/h2_full.c
@@ -41,7 +41,7 @@
 #include <grpc/support/sync.h>
 #include <grpc/support/thd.h>
 #include <grpc/support/useful.h>
-#include "src/core/ext/client_config/client_channel.h"
+#include "src/core/ext/client_channel/client_channel.h"
 #include "src/core/ext/transport/chttp2/transport/chttp2_transport.h"
 #include "src/core/lib/channel/connected_channel.h"
 #include "src/core/lib/channel/http_server_filter.h"
@@ -70,7 +70,9 @@
 }
 
 void chttp2_init_client_fullstack(grpc_end2end_test_fixture *f,
-                                  grpc_channel_args *client_args) {
+                                  grpc_channel_args *client_args,
+                                  const char *query_args) {
+  GPR_ASSERT(query_args == NULL);
   fullstack_fixture_data *ffd = f->fixture_data;
   f->client = grpc_insecure_channel_create(ffd->localaddr, client_args, NULL);
   GPR_ASSERT(f->client);
diff --git a/test/core/end2end/fixtures/h2_http_proxy.c b/test/core/end2end/fixtures/h2_http_proxy.c
index a675a11..2acc06f 100644
--- a/test/core/end2end/fixtures/h2_http_proxy.c
+++ b/test/core/end2end/fixtures/h2_http_proxy.c
@@ -42,7 +42,7 @@
 #include <grpc/support/sync.h>
 #include <grpc/support/thd.h>
 #include <grpc/support/useful.h>
-#include "src/core/ext/client_config/client_channel.h"
+#include "src/core/ext/client_channel/client_channel.h"
 #include "src/core/ext/transport/chttp2/transport/chttp2_transport.h"
 #include "src/core/lib/channel/connected_channel.h"
 #include "src/core/lib/channel/http_server_filter.h"
@@ -75,7 +75,9 @@
 }
 
 void chttp2_init_client_fullstack(grpc_end2end_test_fixture *f,
-                                  grpc_channel_args *client_args) {
+                                  grpc_channel_args *client_args,
+                                  const char *query_args) {
+  GPR_ASSERT(query_args == NULL);
   fullstack_fixture_data *ffd = f->fixture_data;
   char *proxy_uri;
   gpr_asprintf(&proxy_uri, "http://%s",
diff --git a/test/core/end2end/fixtures/h2_load_reporting.c b/test/core/end2end/fixtures/h2_load_reporting.c
index f6d3923..0957666 100644
--- a/test/core/end2end/fixtures/h2_load_reporting.c
+++ b/test/core/end2end/fixtures/h2_load_reporting.c
@@ -41,7 +41,7 @@
 #include <grpc/support/sync.h>
 #include <grpc/support/thd.h>
 #include <grpc/support/useful.h>
-#include "src/core/ext/client_config/client_channel.h"
+#include "src/core/ext/client_channel/client_channel.h"
 #include "src/core/ext/load_reporting/load_reporting.h"
 #include "src/core/ext/transport/chttp2/transport/chttp2_transport.h"
 #include "src/core/lib/channel/channel_args.h"
@@ -73,7 +73,9 @@
 }
 
 void chttp2_init_client_load_reporting(grpc_end2end_test_fixture *f,
-                                       grpc_channel_args *client_args) {
+                                       grpc_channel_args *client_args,
+                                       const char *query_args) {
+  GPR_ASSERT(query_args == NULL);
   load_reporting_fixture_data *ffd = f->fixture_data;
   f->client = grpc_insecure_channel_create(ffd->localaddr, client_args, NULL);
   GPR_ASSERT(f->client);
diff --git a/test/core/end2end/fixtures/h2_oauth2.c b/test/core/end2end/fixtures/h2_oauth2.c
index fc56998..dd636cf 100644
--- a/test/core/end2end/fixtures/h2_oauth2.c
+++ b/test/core/end2end/fixtures/h2_oauth2.c
@@ -150,7 +150,9 @@
 }
 
 static void chttp2_init_client_simple_ssl_with_oauth2_secure_fullstack(
-    grpc_end2end_test_fixture *f, grpc_channel_args *client_args) {
+    grpc_end2end_test_fixture *f, grpc_channel_args *client_args,
+    const char *query_args) {
+  GPR_ASSERT(query_args == NULL);
   grpc_channel_credentials *ssl_creds =
       grpc_ssl_credentials_create(test_root_cert, NULL, NULL);
   grpc_call_credentials *oauth2_creds =
diff --git a/test/core/end2end/fixtures/h2_proxy.c b/test/core/end2end/fixtures/h2_proxy.c
index c7b9986..2671e0a 100644
--- a/test/core/end2end/fixtures/h2_proxy.c
+++ b/test/core/end2end/fixtures/h2_proxy.c
@@ -41,7 +41,7 @@
 #include <grpc/support/sync.h>
 #include <grpc/support/thd.h>
 #include <grpc/support/useful.h>
-#include "src/core/ext/client_config/client_channel.h"
+#include "src/core/ext/client_channel/client_channel.h"
 #include "src/core/ext/transport/chttp2/transport/chttp2_transport.h"
 #include "src/core/lib/channel/connected_channel.h"
 #include "src/core/lib/channel/http_server_filter.h"
@@ -85,7 +85,9 @@
 }
 
 void chttp2_init_client_fullstack(grpc_end2end_test_fixture *f,
-                                  grpc_channel_args *client_args) {
+                                  grpc_channel_args *client_args,
+                                  const char *query_args) {
+  GPR_ASSERT(query_args == NULL);
   fullstack_fixture_data *ffd = f->fixture_data;
   f->client = grpc_insecure_channel_create(
       grpc_end2end_proxy_get_client_target(ffd->proxy), client_args, NULL);
diff --git a/test/core/end2end/fixtures/h2_sockpair+trace.c b/test/core/end2end/fixtures/h2_sockpair+trace.c
index b8a5257..15b045c 100644
--- a/test/core/end2end/fixtures/h2_sockpair+trace.c
+++ b/test/core/end2end/fixtures/h2_sockpair+trace.c
@@ -31,16 +31,21 @@
  *
  */
 
+#include "src/core/lib/iomgr/port.h"
+
 #include "test/core/end2end/end2end_tests.h"
 
 #include <string.h>
+#ifdef GRPC_POSIX_SOCKET
+#include <unistd.h>
+#endif
 
 #include <grpc/support/alloc.h>
 #include <grpc/support/log.h>
 #include <grpc/support/sync.h>
 #include <grpc/support/thd.h>
 #include <grpc/support/useful.h>
-#include "src/core/ext/client_config/client_channel.h"
+#include "src/core/ext/client_channel/client_channel.h"
 #include "src/core/ext/transport/chttp2/transport/chttp2_transport.h"
 #include "src/core/lib/channel/compress_filter.h"
 #include "src/core/lib/channel/connected_channel.h"
@@ -97,7 +102,9 @@
 }
 
 static void chttp2_init_client_socketpair(grpc_end2end_test_fixture *f,
-                                          grpc_channel_args *client_args) {
+                                          grpc_channel_args *client_args,
+                                          const char *query_args) {
+  GPR_ASSERT(query_args == NULL);
   grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
   grpc_endpoint_pair *sfd = f->fixture_data;
   grpc_transport *transport;
@@ -146,7 +153,7 @@
   /* force tracing on, with a value to force many
      code paths in trace.c to be taken */
   gpr_setenv("GRPC_TRACE", "doesnt-exist,http,all");
-#ifdef GPR_POSIX_SOCKET
+#ifdef GRPC_POSIX_SOCKET
   g_fixture_slowdown_factor = isatty(STDOUT_FILENO) ? 10.0 : 1.0;
 #else
   g_fixture_slowdown_factor = 10.0;
diff --git a/test/core/end2end/fixtures/h2_sockpair.c b/test/core/end2end/fixtures/h2_sockpair.c
index a57990d..87091f7 100644
--- a/test/core/end2end/fixtures/h2_sockpair.c
+++ b/test/core/end2end/fixtures/h2_sockpair.c
@@ -40,7 +40,7 @@
 #include <grpc/support/sync.h>
 #include <grpc/support/thd.h>
 #include <grpc/support/useful.h>
-#include "src/core/ext/client_config/client_channel.h"
+#include "src/core/ext/client_channel/client_channel.h"
 #include "src/core/ext/transport/chttp2/transport/chttp2_transport.h"
 #include "src/core/lib/channel/compress_filter.h"
 #include "src/core/lib/channel/connected_channel.h"
@@ -96,7 +96,9 @@
 }
 
 static void chttp2_init_client_socketpair(grpc_end2end_test_fixture *f,
-                                          grpc_channel_args *client_args) {
+                                          grpc_channel_args *client_args,
+                                          const char *query_args) {
+  GPR_ASSERT(query_args == NULL);
   grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
   grpc_endpoint_pair *sfd = f->fixture_data;
   grpc_transport *transport;
diff --git a/test/core/end2end/fixtures/h2_sockpair_1byte.c b/test/core/end2end/fixtures/h2_sockpair_1byte.c
index 50aac80..7d0a14c 100644
--- a/test/core/end2end/fixtures/h2_sockpair_1byte.c
+++ b/test/core/end2end/fixtures/h2_sockpair_1byte.c
@@ -40,7 +40,7 @@
 #include <grpc/support/sync.h>
 #include <grpc/support/thd.h>
 #include <grpc/support/useful.h>
-#include "src/core/ext/client_config/client_channel.h"
+#include "src/core/ext/client_channel/client_channel.h"
 #include "src/core/ext/transport/chttp2/transport/chttp2_transport.h"
 #include "src/core/lib/channel/compress_filter.h"
 #include "src/core/lib/channel/connected_channel.h"
@@ -96,7 +96,9 @@
 }
 
 static void chttp2_init_client_socketpair(grpc_end2end_test_fixture *f,
-                                          grpc_channel_args *client_args) {
+                                          grpc_channel_args *client_args,
+                                          const char *query_args) {
+  GPR_ASSERT(query_args == NULL);
   grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
   grpc_endpoint_pair *sfd = f->fixture_data;
   grpc_transport *transport;
diff --git a/test/core/end2end/fixtures/h2_ssl.c b/test/core/end2end/fixtures/h2_ssl.c
index eb28623..63282ae 100644
--- a/test/core/end2end/fixtures/h2_ssl.c
+++ b/test/core/end2end/fixtures/h2_ssl.c
@@ -109,7 +109,9 @@
 }
 
 static void chttp2_init_client_simple_ssl_secure_fullstack(
-    grpc_end2end_test_fixture *f, grpc_channel_args *client_args) {
+    grpc_end2end_test_fixture *f, grpc_channel_args *client_args,
+    const char *query_args) {
+  GPR_ASSERT(query_args == NULL);
   grpc_channel_credentials *ssl_creds =
       grpc_ssl_credentials_create(NULL, NULL, NULL);
   grpc_arg ssl_name_override = {GRPC_ARG_STRING,
diff --git a/test/core/end2end/fixtures/h2_ssl_cert.c b/test/core/end2end/fixtures/h2_ssl_cert.c
index ae2604d..4c2f5f5 100644
--- a/test/core/end2end/fixtures/h2_ssl_cert.c
+++ b/test/core/end2end/fixtures/h2_ssl_cert.c
@@ -154,39 +154,41 @@
 
 typedef enum { NONE, SELF_SIGNED, SIGNED, BAD_CERT_PAIR } certtype;
 
-#define CLIENT_INIT(cert_type)                                               \
-  static void CLIENT_INIT_NAME(cert_type)(grpc_end2end_test_fixture * f,     \
-                                          grpc_channel_args * client_args) { \
-    grpc_channel_credentials *ssl_creds = NULL;                              \
-    grpc_ssl_pem_key_cert_pair self_signed_client_key_cert_pair = {          \
-        test_self_signed_client_key, test_self_signed_client_cert};          \
-    grpc_ssl_pem_key_cert_pair signed_client_key_cert_pair = {               \
-        test_signed_client_key, test_signed_client_cert};                    \
-    grpc_ssl_pem_key_cert_pair bad_client_key_cert_pair = {                  \
-        test_self_signed_client_key, test_signed_client_cert};               \
-    grpc_ssl_pem_key_cert_pair *key_cert_pair = NULL;                        \
-    switch (cert_type) {                                                     \
-      case SELF_SIGNED:                                                      \
-        key_cert_pair = &self_signed_client_key_cert_pair;                   \
-        break;                                                               \
-      case SIGNED:                                                           \
-        key_cert_pair = &signed_client_key_cert_pair;                        \
-        break;                                                               \
-      case BAD_CERT_PAIR:                                                    \
-        key_cert_pair = &bad_client_key_cert_pair;                           \
-        break;                                                               \
-      default:                                                               \
-        break;                                                               \
-    }                                                                        \
-    ssl_creds =                                                              \
-        grpc_ssl_credentials_create(test_root_cert, key_cert_pair, NULL);    \
-    grpc_arg ssl_name_override = {GRPC_ARG_STRING,                           \
-                                  GRPC_SSL_TARGET_NAME_OVERRIDE_ARG,         \
-                                  {"foo.test.google.fr"}};                   \
-    grpc_channel_args *new_client_args =                                     \
-        grpc_channel_args_copy_and_add(client_args, &ssl_name_override, 1);  \
-    chttp2_init_client_secure_fullstack(f, new_client_args, ssl_creds);      \
-    grpc_channel_args_destroy(new_client_args);                              \
+#define CLIENT_INIT(cert_type)                                              \
+  static void CLIENT_INIT_NAME(cert_type)(grpc_end2end_test_fixture * f,    \
+                                          grpc_channel_args * client_args,  \
+                                          const char *query_args) {         \
+    GPR_ASSERT(query_args == NULL);                                         \
+    grpc_channel_credentials *ssl_creds = NULL;                             \
+    grpc_ssl_pem_key_cert_pair self_signed_client_key_cert_pair = {         \
+        test_self_signed_client_key, test_self_signed_client_cert};         \
+    grpc_ssl_pem_key_cert_pair signed_client_key_cert_pair = {              \
+        test_signed_client_key, test_signed_client_cert};                   \
+    grpc_ssl_pem_key_cert_pair bad_client_key_cert_pair = {                 \
+        test_self_signed_client_key, test_signed_client_cert};              \
+    grpc_ssl_pem_key_cert_pair *key_cert_pair = NULL;                       \
+    switch (cert_type) {                                                    \
+      case SELF_SIGNED:                                                     \
+        key_cert_pair = &self_signed_client_key_cert_pair;                  \
+        break;                                                              \
+      case SIGNED:                                                          \
+        key_cert_pair = &signed_client_key_cert_pair;                       \
+        break;                                                              \
+      case BAD_CERT_PAIR:                                                   \
+        key_cert_pair = &bad_client_key_cert_pair;                          \
+        break;                                                              \
+      default:                                                              \
+        break;                                                              \
+    }                                                                       \
+    ssl_creds =                                                             \
+        grpc_ssl_credentials_create(test_root_cert, key_cert_pair, NULL);   \
+    grpc_arg ssl_name_override = {GRPC_ARG_STRING,                          \
+                                  GRPC_SSL_TARGET_NAME_OVERRIDE_ARG,        \
+                                  {"foo.test.google.fr"}};                  \
+    grpc_channel_args *new_client_args =                                    \
+        grpc_channel_args_copy_and_add(client_args, &ssl_name_override, 1); \
+    chttp2_init_client_secure_fullstack(f, new_client_args, ssl_creds);     \
+    grpc_channel_args_destroy(new_client_args);                             \
   }
 
 CLIENT_INIT(NONE)
@@ -265,7 +267,7 @@
   gpr_log(GPR_INFO, "%s/%s", test_name, config.name);
   f = config.create_fixture(client_args, server_args);
   config.init_server(&f, server_args);
-  config.init_client(&f, client_args);
+  config.init_client(&f, client_args, NULL);
   return f;
 }
 
diff --git a/test/core/end2end/fixtures/h2_ssl_proxy.c b/test/core/end2end/fixtures/h2_ssl_proxy.c
index eeb54b8..7d39fb2 100644
--- a/test/core/end2end/fixtures/h2_ssl_proxy.c
+++ b/test/core/end2end/fixtures/h2_ssl_proxy.c
@@ -142,7 +142,9 @@
 }
 
 static void chttp2_init_client_simple_ssl_secure_fullstack(
-    grpc_end2end_test_fixture *f, grpc_channel_args *client_args) {
+    grpc_end2end_test_fixture *f, grpc_channel_args *client_args,
+    const char *query_args) {
+  GPR_ASSERT(query_args == NULL);
   grpc_channel_credentials *ssl_creds =
       grpc_ssl_credentials_create(NULL, NULL, NULL);
   grpc_arg ssl_name_override = {GRPC_ARG_STRING,
diff --git a/test/core/end2end/fixtures/h2_uds.c b/test/core/end2end/fixtures/h2_uds.c
index cffbeaf..888d6c0 100644
--- a/test/core/end2end/fixtures/h2_uds.c
+++ b/test/core/end2end/fixtures/h2_uds.c
@@ -44,7 +44,7 @@
 #include <grpc/support/sync.h>
 #include <grpc/support/thd.h>
 #include <grpc/support/useful.h>
-#include "src/core/ext/client_config/client_channel.h"
+#include "src/core/ext/client_channel/client_channel.h"
 #include "src/core/ext/transport/chttp2/transport/chttp2_transport.h"
 #include "src/core/lib/channel/connected_channel.h"
 #include "src/core/lib/channel/http_server_filter.h"
@@ -76,7 +76,9 @@
 }
 
 void chttp2_init_client_fullstack(grpc_end2end_test_fixture *f,
-                                  grpc_channel_args *client_args) {
+                                  grpc_channel_args *client_args,
+                                  const char *query_args) {
+  GPR_ASSERT(query_args == NULL);
   fullstack_fixture_data *ffd = f->fixture_data;
   f->client = grpc_insecure_channel_create(ffd->localaddr, client_args, NULL);
 }
diff --git a/test/core/end2end/fixtures/http_proxy.c b/test/core/end2end/fixtures/http_proxy.c
index 22533b9..b8f046c 100644
--- a/test/core/end2end/fixtures/http_proxy.c
+++ b/test/core/end2end/fixtures/http_proxy.c
@@ -33,6 +33,8 @@
 
 #include "test/core/end2end/fixtures/http_proxy.h"
 
+#include "src/core/lib/iomgr/sockaddr.h"
+
 #include <string.h>
 
 #include <grpc/support/alloc.h>
@@ -358,8 +360,7 @@
       gpr_now(GPR_CLOCK_MONOTONIC), gpr_time_from_seconds(10, GPR_TIMESPAN));
   grpc_tcp_client_connect(exec_ctx, &conn->on_server_connect_done,
                           &conn->server_endpoint, conn->pollset_set,
-                          (struct sockaddr*)&resolved_addresses->addrs[0].addr,
-                          resolved_addresses->addrs[0].len, deadline);
+                          &resolved_addresses->addrs[0], deadline);
   grpc_resolved_addresses_destroy(resolved_addresses);
 }
 
@@ -430,13 +431,13 @@
       grpc_tcp_server_create(NULL, proxy->channel_args, &proxy->server);
   GPR_ASSERT(error == GRPC_ERROR_NONE);
   // Bind to port.
-  struct sockaddr_in addr;
-  memset(&addr, 0, sizeof(addr));
-  addr.sin_family = AF_INET;
-  grpc_sockaddr_set_port((struct sockaddr*)&addr, proxy_port);
+  grpc_resolved_address resolved_addr;
+  struct sockaddr_in* addr = (struct sockaddr_in*)resolved_addr.addr;
+  memset(&resolved_addr, 0, sizeof(resolved_addr));
+  addr->sin_family = AF_INET;
+  grpc_sockaddr_set_port(&resolved_addr, proxy_port);
   int port;
-  error = grpc_tcp_server_add_port(proxy->server, (struct sockaddr*)&addr,
-                                   sizeof(addr), &port);
+  error = grpc_tcp_server_add_port(proxy->server, &resolved_addr, &port);
   GPR_ASSERT(error == GRPC_ERROR_NONE);
   GPR_ASSERT(port == proxy_port);
   // Start server.
diff --git a/test/core/end2end/fuzzers/api_fuzzer.c b/test/core/end2end/fuzzers/api_fuzzer.c
index 96ea82d..4e19b76 100644
--- a/test/core/end2end/fuzzers/api_fuzzer.c
+++ b/test/core/end2end/fuzzers/api_fuzzer.c
@@ -231,8 +231,8 @@
 // defined in tcp_client_posix.c
 extern void (*grpc_tcp_client_connect_impl)(
     grpc_exec_ctx *exec_ctx, grpc_closure *closure, grpc_endpoint **ep,
-    grpc_pollset_set *interested_parties, const struct sockaddr *addr,
-    size_t addr_len, gpr_timespec deadline);
+    grpc_pollset_set *interested_parties, const grpc_resolved_address *addr,
+    gpr_timespec deadline);
 
 static void sched_connect(grpc_exec_ctx *exec_ctx, grpc_closure *closure,
                           grpc_endpoint **ep, gpr_timespec deadline);
@@ -289,7 +289,7 @@
 static void my_tcp_client_connect(grpc_exec_ctx *exec_ctx,
                                   grpc_closure *closure, grpc_endpoint **ep,
                                   grpc_pollset_set *interested_parties,
-                                  const struct sockaddr *addr, size_t addr_len,
+                                  const grpc_resolved_address *addr,
                                   gpr_timespec deadline) {
   sched_connect(exec_ctx, closure, ep, deadline);
 }
diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/0083d5addbeca55271ed7ef93c8016bf7ca76903 b/test/core/end2end/fuzzers/client_fuzzer_corpus/0083d5addbeca55271ed7ef93c8016bf7ca76903
new file mode 100644
index 0000000..821d85d
--- /dev/null
+++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/0083d5addbeca55271ed7ef93c8016bf7ca76903
Binary files differ
diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/07b0bed3226eefac4a84000ec584e4ce06ebf1bf b/test/core/end2end/fuzzers/client_fuzzer_corpus/07b0bed3226eefac4a84000ec584e4ce06ebf1bf
new file mode 100644
index 0000000..8ba8dfa
--- /dev/null
+++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/07b0bed3226eefac4a84000ec584e4ce06ebf1bf
Binary files differ
diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/07cec5c8d9c856a910c6fb57da2ae954f44beed0 b/test/core/end2end/fuzzers/client_fuzzer_corpus/07cec5c8d9c856a910c6fb57da2ae954f44beed0
new file mode 100644
index 0000000..28c9554
--- /dev/null
+++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/07cec5c8d9c856a910c6fb57da2ae954f44beed0
Binary files differ
diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/0c27c9999302b39bf2256a90b0cdb767fb2b6fe3 b/test/core/end2end/fuzzers/client_fuzzer_corpus/0c27c9999302b39bf2256a90b0cdb767fb2b6fe3
new file mode 100644
index 0000000..a3ecb27
--- /dev/null
+++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/0c27c9999302b39bf2256a90b0cdb767fb2b6fe3
Binary files differ
diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/0d407f099f8418de3dd94bd2146c858a8c6575ad b/test/core/end2end/fuzzers/client_fuzzer_corpus/0d407f099f8418de3dd94bd2146c858a8c6575ad
new file mode 100644
index 0000000..ad20f50
--- /dev/null
+++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/0d407f099f8418de3dd94bd2146c858a8c6575ad
Binary files differ
diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/0d4d486aa9fd6e9c10cc9ca8967e922cadddb2fe b/test/core/end2end/fuzzers/client_fuzzer_corpus/0d4d486aa9fd6e9c10cc9ca8967e922cadddb2fe
new file mode 100644
index 0000000..fa6d96d
--- /dev/null
+++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/0d4d486aa9fd6e9c10cc9ca8967e922cadddb2fe
Binary files differ
diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/0d9ba07b57eb0e076b187c4455f662db085e730b b/test/core/end2end/fuzzers/client_fuzzer_corpus/0d9ba07b57eb0e076b187c4455f662db085e730b
new file mode 100644
index 0000000..bf6ec61
--- /dev/null
+++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/0d9ba07b57eb0e076b187c4455f662db085e730b
Binary files differ
diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/0f6b989cec08ef9da603dc83704d85900bd22f1f b/test/core/end2end/fuzzers/client_fuzzer_corpus/0f6b989cec08ef9da603dc83704d85900bd22f1f
new file mode 100644
index 0000000..6469f3c
--- /dev/null
+++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/0f6b989cec08ef9da603dc83704d85900bd22f1f
Binary files differ
diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/10b25b0726cb6d820165699e5a453691c7a9c343 b/test/core/end2end/fuzzers/client_fuzzer_corpus/10b25b0726cb6d820165699e5a453691c7a9c343
new file mode 100644
index 0000000..bda05de
--- /dev/null
+++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/10b25b0726cb6d820165699e5a453691c7a9c343
Binary files differ
diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/1231c6d007d9e43d169122348363e20d9f25ee93 b/test/core/end2end/fuzzers/client_fuzzer_corpus/1231c6d007d9e43d169122348363e20d9f25ee93
new file mode 100644
index 0000000..ed848cb
--- /dev/null
+++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/1231c6d007d9e43d169122348363e20d9f25ee93
Binary files differ
diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/13a9b61e431c20734c19bb36d85883b6a501284e b/test/core/end2end/fuzzers/client_fuzzer_corpus/13a9b61e431c20734c19bb36d85883b6a501284e
new file mode 100644
index 0000000..462273d
--- /dev/null
+++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/13a9b61e431c20734c19bb36d85883b6a501284e
Binary files differ
diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/1698ec182fad9d973b84615da3a683ecdf2d0b3b b/test/core/end2end/fuzzers/client_fuzzer_corpus/1698ec182fad9d973b84615da3a683ecdf2d0b3b
new file mode 100644
index 0000000..0c2710f
--- /dev/null
+++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/1698ec182fad9d973b84615da3a683ecdf2d0b3b
Binary files differ
diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/1859e2ee759e20fe195f67615a1576ce2b7d5bbd b/test/core/end2end/fuzzers/client_fuzzer_corpus/1859e2ee759e20fe195f67615a1576ce2b7d5bbd
new file mode 100644
index 0000000..ed91baf
--- /dev/null
+++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/1859e2ee759e20fe195f67615a1576ce2b7d5bbd
Binary files differ
diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/1a9017db5ad8a9dc6cfe72305da1683a87a73452 b/test/core/end2end/fuzzers/client_fuzzer_corpus/1a9017db5ad8a9dc6cfe72305da1683a87a73452
new file mode 100644
index 0000000..85d4be1
--- /dev/null
+++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/1a9017db5ad8a9dc6cfe72305da1683a87a73452
Binary files differ
diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/1bd90335afc9e0a1e6a9296e3cc27c03c1201886 b/test/core/end2end/fuzzers/client_fuzzer_corpus/1bd90335afc9e0a1e6a9296e3cc27c03c1201886
new file mode 100644
index 0000000..f020c9b
--- /dev/null
+++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/1bd90335afc9e0a1e6a9296e3cc27c03c1201886
Binary files differ
diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/1be157b0fc79f0e7e1e05dfa3cbbe1ad71528bc2 b/test/core/end2end/fuzzers/client_fuzzer_corpus/1be157b0fc79f0e7e1e05dfa3cbbe1ad71528bc2
new file mode 100644
index 0000000..ce32d23
--- /dev/null
+++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/1be157b0fc79f0e7e1e05dfa3cbbe1ad71528bc2
Binary files differ
diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/2185f411bdb1edc610f16ffc86836ae366193e03 b/test/core/end2end/fuzzers/client_fuzzer_corpus/2185f411bdb1edc610f16ffc86836ae366193e03
new file mode 100644
index 0000000..0516cfa
--- /dev/null
+++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/2185f411bdb1edc610f16ffc86836ae366193e03
Binary files differ
diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/22661803bd1c7198df4be6e08924ef6a48af9cd4 b/test/core/end2end/fuzzers/client_fuzzer_corpus/22661803bd1c7198df4be6e08924ef6a48af9cd4
new file mode 100644
index 0000000..2443c3b
--- /dev/null
+++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/22661803bd1c7198df4be6e08924ef6a48af9cd4
Binary files differ
diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/2717067bbc0e9bfc1d90d15cddf6154800a25ec6 b/test/core/end2end/fuzzers/client_fuzzer_corpus/2717067bbc0e9bfc1d90d15cddf6154800a25ec6
new file mode 100644
index 0000000..d0fe18d
--- /dev/null
+++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/2717067bbc0e9bfc1d90d15cddf6154800a25ec6
Binary files differ
diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/2825cfc19c9371f4fe70851283c68d49470d4d55 b/test/core/end2end/fuzzers/client_fuzzer_corpus/2825cfc19c9371f4fe70851283c68d49470d4d55
new file mode 100644
index 0000000..e1e52b9
--- /dev/null
+++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/2825cfc19c9371f4fe70851283c68d49470d4d55
Binary files differ
diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/29303c16f3afa18c2c0b84e77e587535a705a74c b/test/core/end2end/fuzzers/client_fuzzer_corpus/29303c16f3afa18c2c0b84e77e587535a705a74c
new file mode 100644
index 0000000..b684106
--- /dev/null
+++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/29303c16f3afa18c2c0b84e77e587535a705a74c
Binary files differ
diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/2b5eb5aac77af905877bd98ec2c4d746b247abb6 b/test/core/end2end/fuzzers/client_fuzzer_corpus/2b5eb5aac77af905877bd98ec2c4d746b247abb6
new file mode 100644
index 0000000..76655ea
--- /dev/null
+++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/2b5eb5aac77af905877bd98ec2c4d746b247abb6
Binary files differ
diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/2cc43573f271ecd332551c1fb34ebc8645eaefe8 b/test/core/end2end/fuzzers/client_fuzzer_corpus/2cc43573f271ecd332551c1fb34ebc8645eaefe8
new file mode 100644
index 0000000..25ead66
--- /dev/null
+++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/2cc43573f271ecd332551c1fb34ebc8645eaefe8
Binary files differ
diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/2feb41037f5dd34e9f3465a2fbf1a6d355c8ce9d b/test/core/end2end/fuzzers/client_fuzzer_corpus/2feb41037f5dd34e9f3465a2fbf1a6d355c8ce9d
new file mode 100644
index 0000000..9614683
--- /dev/null
+++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/2feb41037f5dd34e9f3465a2fbf1a6d355c8ce9d
Binary files differ
diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/300998021c7f743ff49d9cc192343ffd43eb47f2 b/test/core/end2end/fuzzers/client_fuzzer_corpus/300998021c7f743ff49d9cc192343ffd43eb47f2
new file mode 100644
index 0000000..a327645
--- /dev/null
+++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/300998021c7f743ff49d9cc192343ffd43eb47f2
Binary files differ
diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/310b2aff5e2ec78b6004630bed39d49f8d13bb21 b/test/core/end2end/fuzzers/client_fuzzer_corpus/310b2aff5e2ec78b6004630bed39d49f8d13bb21
new file mode 100644
index 0000000..e48ee01
--- /dev/null
+++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/310b2aff5e2ec78b6004630bed39d49f8d13bb21
Binary files differ
diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/3bb052abecc1b916cc869b9aad29c9dd55a95068 b/test/core/end2end/fuzzers/client_fuzzer_corpus/3bb052abecc1b916cc869b9aad29c9dd55a95068
new file mode 100644
index 0000000..e256230
--- /dev/null
+++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/3bb052abecc1b916cc869b9aad29c9dd55a95068
Binary files differ
diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/3c5fa483ebfabe6e684831ce7c413176bc998c33 b/test/core/end2end/fuzzers/client_fuzzer_corpus/3c5fa483ebfabe6e684831ce7c413176bc998c33
new file mode 100644
index 0000000..82c60ba
--- /dev/null
+++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/3c5fa483ebfabe6e684831ce7c413176bc998c33
Binary files differ
diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/3c6444b64ace5cd6c145614ad4412382271a6120 b/test/core/end2end/fuzzers/client_fuzzer_corpus/3c6444b64ace5cd6c145614ad4412382271a6120
new file mode 100644
index 0000000..a829aad
--- /dev/null
+++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/3c6444b64ace5cd6c145614ad4412382271a6120
Binary files differ
diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/4045d25f065bb1d70a8b9c3751f7453d4b0625b9 b/test/core/end2end/fuzzers/client_fuzzer_corpus/4045d25f065bb1d70a8b9c3751f7453d4b0625b9
new file mode 100644
index 0000000..d3d6384
--- /dev/null
+++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/4045d25f065bb1d70a8b9c3751f7453d4b0625b9
Binary files differ
diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/407cedf992b14edac6e19f7d440ab73c88e72465 b/test/core/end2end/fuzzers/client_fuzzer_corpus/407cedf992b14edac6e19f7d440ab73c88e72465
new file mode 100644
index 0000000..151a983
--- /dev/null
+++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/407cedf992b14edac6e19f7d440ab73c88e72465
Binary files differ
diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/411966ea7d9164fc432eeab55a55248ad808bb01 b/test/core/end2end/fuzzers/client_fuzzer_corpus/411966ea7d9164fc432eeab55a55248ad808bb01
new file mode 100644
index 0000000..b60637b
--- /dev/null
+++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/411966ea7d9164fc432eeab55a55248ad808bb01
Binary files differ
diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/415dde26637ed3c0e803111c532a1a9ea9c49092 b/test/core/end2end/fuzzers/client_fuzzer_corpus/415dde26637ed3c0e803111c532a1a9ea9c49092
new file mode 100644
index 0000000..2d8b9cf
--- /dev/null
+++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/415dde26637ed3c0e803111c532a1a9ea9c49092
Binary files differ
diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/4fc34239f220392581520aa8cebc659daa65a7a6 b/test/core/end2end/fuzzers/client_fuzzer_corpus/4fc34239f220392581520aa8cebc659daa65a7a6
new file mode 100644
index 0000000..1ca1c28
--- /dev/null
+++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/4fc34239f220392581520aa8cebc659daa65a7a6
Binary files differ
diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/52939682304314f04897deddfbc9c7afa8ee50a9 b/test/core/end2end/fuzzers/client_fuzzer_corpus/52939682304314f04897deddfbc9c7afa8ee50a9
new file mode 100644
index 0000000..27c5ca4
--- /dev/null
+++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/52939682304314f04897deddfbc9c7afa8ee50a9
Binary files differ
diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/5369926a559827d08bccf264876d592c7cae660d b/test/core/end2end/fuzzers/client_fuzzer_corpus/5369926a559827d08bccf264876d592c7cae660d
new file mode 100644
index 0000000..9a2c59f
--- /dev/null
+++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/5369926a559827d08bccf264876d592c7cae660d
Binary files differ
diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/53ef530f65b0cff2e338a51b469c224f53b628d7 b/test/core/end2end/fuzzers/client_fuzzer_corpus/53ef530f65b0cff2e338a51b469c224f53b628d7
new file mode 100644
index 0000000..cd12901
--- /dev/null
+++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/53ef530f65b0cff2e338a51b469c224f53b628d7
Binary files differ
diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/560c1057487e6b0d2d457748c3ad8434423eb263 b/test/core/end2end/fuzzers/client_fuzzer_corpus/560c1057487e6b0d2d457748c3ad8434423eb263
new file mode 100644
index 0000000..889056f
--- /dev/null
+++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/560c1057487e6b0d2d457748c3ad8434423eb263
Binary files differ
diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/564f203f678fb333c7b1f8f4df79237589ce346d b/test/core/end2end/fuzzers/client_fuzzer_corpus/564f203f678fb333c7b1f8f4df79237589ce346d
new file mode 100644
index 0000000..d64ca59
--- /dev/null
+++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/564f203f678fb333c7b1f8f4df79237589ce346d
Binary files differ
diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/56b0ac0636c57838f63415082b3ae2ec7a93f017 b/test/core/end2end/fuzzers/client_fuzzer_corpus/56b0ac0636c57838f63415082b3ae2ec7a93f017
new file mode 100644
index 0000000..f997ced
--- /dev/null
+++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/56b0ac0636c57838f63415082b3ae2ec7a93f017
Binary files differ
diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/58bcbd601894835bb3312d2a0bc56f2e0f65984c b/test/core/end2end/fuzzers/client_fuzzer_corpus/58bcbd601894835bb3312d2a0bc56f2e0f65984c
new file mode 100644
index 0000000..016a98e
--- /dev/null
+++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/58bcbd601894835bb3312d2a0bc56f2e0f65984c
Binary files differ
diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/598d346f284bcff26d1de997c4ba5c4794c90b68 b/test/core/end2end/fuzzers/client_fuzzer_corpus/598d346f284bcff26d1de997c4ba5c4794c90b68
new file mode 100644
index 0000000..1230998
--- /dev/null
+++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/598d346f284bcff26d1de997c4ba5c4794c90b68
Binary files differ
diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/5c14b48da74ab06b3cc20c4fe355e24f7dd7852a b/test/core/end2end/fuzzers/client_fuzzer_corpus/5c14b48da74ab06b3cc20c4fe355e24f7dd7852a
new file mode 100644
index 0000000..c0223af
--- /dev/null
+++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/5c14b48da74ab06b3cc20c4fe355e24f7dd7852a
Binary files differ
diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/5de72e607205dc17a45df703ec4e9b63c36821ec b/test/core/end2end/fuzzers/client_fuzzer_corpus/5de72e607205dc17a45df703ec4e9b63c36821ec
new file mode 100644
index 0000000..6f50853
--- /dev/null
+++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/5de72e607205dc17a45df703ec4e9b63c36821ec
Binary files differ
diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/5e25cf639ba8ea37543d944f5efa94824c6272ff b/test/core/end2end/fuzzers/client_fuzzer_corpus/5e25cf639ba8ea37543d944f5efa94824c6272ff
new file mode 100644
index 0000000..33b465f
--- /dev/null
+++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/5e25cf639ba8ea37543d944f5efa94824c6272ff
Binary files differ
diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/5f247d7b6753f7a8798cf952f49f303c532e017c b/test/core/end2end/fuzzers/client_fuzzer_corpus/5f247d7b6753f7a8798cf952f49f303c532e017c
new file mode 100644
index 0000000..922c3cc
--- /dev/null
+++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/5f247d7b6753f7a8798cf952f49f303c532e017c
Binary files differ
diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/63a1cb41d219394c9bab947202921506f3574ad0 b/test/core/end2end/fuzzers/client_fuzzer_corpus/63a1cb41d219394c9bab947202921506f3574ad0
new file mode 100644
index 0000000..417548a
--- /dev/null
+++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/63a1cb41d219394c9bab947202921506f3574ad0
Binary files differ
diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/650f74738d3961af2d1fe85ad8fc8212ea13cbbf b/test/core/end2end/fuzzers/client_fuzzer_corpus/650f74738d3961af2d1fe85ad8fc8212ea13cbbf
new file mode 100644
index 0000000..382f3de
--- /dev/null
+++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/650f74738d3961af2d1fe85ad8fc8212ea13cbbf
Binary files differ
diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/65dff388749da6a44926b491cdc555f61d708171 b/test/core/end2end/fuzzers/client_fuzzer_corpus/65dff388749da6a44926b491cdc555f61d708171
new file mode 100644
index 0000000..8e35246
--- /dev/null
+++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/65dff388749da6a44926b491cdc555f61d708171
Binary files differ
diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/676adbb1e5b3f4f9e3cba51d3d4ef963ba4ea7e3 b/test/core/end2end/fuzzers/client_fuzzer_corpus/676adbb1e5b3f4f9e3cba51d3d4ef963ba4ea7e3
new file mode 100644
index 0000000..720dcdb
--- /dev/null
+++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/676adbb1e5b3f4f9e3cba51d3d4ef963ba4ea7e3
Binary files differ
diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/67f160446ded73c408f4e5a0665731b642b6edd4 b/test/core/end2end/fuzzers/client_fuzzer_corpus/67f160446ded73c408f4e5a0665731b642b6edd4
new file mode 100644
index 0000000..cdbee59
--- /dev/null
+++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/67f160446ded73c408f4e5a0665731b642b6edd4
Binary files differ
diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/6856c7cb02d2ba74a60fd47140f042701dda63b3 b/test/core/end2end/fuzzers/client_fuzzer_corpus/6856c7cb02d2ba74a60fd47140f042701dda63b3
new file mode 100644
index 0000000..f2dc196
--- /dev/null
+++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/6856c7cb02d2ba74a60fd47140f042701dda63b3
Binary files differ
diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/69e14b73af03e8f2d998cfcf16215f65bf589efb b/test/core/end2end/fuzzers/client_fuzzer_corpus/69e14b73af03e8f2d998cfcf16215f65bf589efb
new file mode 100644
index 0000000..ae23d16
--- /dev/null
+++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/69e14b73af03e8f2d998cfcf16215f65bf589efb
Binary files differ
diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/77cff7548cafe87410e4a0dde3ba6892b25594d3 b/test/core/end2end/fuzzers/client_fuzzer_corpus/77cff7548cafe87410e4a0dde3ba6892b25594d3
new file mode 100644
index 0000000..95defaa
--- /dev/null
+++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/77cff7548cafe87410e4a0dde3ba6892b25594d3
Binary files differ
diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/7beeb19272131701f3a0d1dd633f1b1969899366 b/test/core/end2end/fuzzers/client_fuzzer_corpus/7beeb19272131701f3a0d1dd633f1b1969899366
new file mode 100644
index 0000000..4293d0c
--- /dev/null
+++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/7beeb19272131701f3a0d1dd633f1b1969899366
Binary files differ
diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/8b0cf53ac17015fe066002cb3814933df9ee96be b/test/core/end2end/fuzzers/client_fuzzer_corpus/8b0cf53ac17015fe066002cb3814933df9ee96be
new file mode 100644
index 0000000..ba952ec
--- /dev/null
+++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/8b0cf53ac17015fe066002cb3814933df9ee96be
Binary files differ
diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/8b5c4543923da5e468aca1de1ab880aed2ac4451 b/test/core/end2end/fuzzers/client_fuzzer_corpus/8b5c4543923da5e468aca1de1ab880aed2ac4451
new file mode 100644
index 0000000..7c5cd2b
--- /dev/null
+++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/8b5c4543923da5e468aca1de1ab880aed2ac4451
Binary files differ
diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/8d9784f85e9662734e180ca8bec2164425ae8a87 b/test/core/end2end/fuzzers/client_fuzzer_corpus/8d9784f85e9662734e180ca8bec2164425ae8a87
new file mode 100644
index 0000000..b2ad2b0
--- /dev/null
+++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/8d9784f85e9662734e180ca8bec2164425ae8a87
Binary files differ
diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/8e3f138d163022d6e105ab595788f4cfdd9b9db3 b/test/core/end2end/fuzzers/client_fuzzer_corpus/8e3f138d163022d6e105ab595788f4cfdd9b9db3
new file mode 100644
index 0000000..e10a35c
--- /dev/null
+++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/8e3f138d163022d6e105ab595788f4cfdd9b9db3
Binary files differ
diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/914464d372dcccf31ed5331293d84121e17616bb b/test/core/end2end/fuzzers/client_fuzzer_corpus/914464d372dcccf31ed5331293d84121e17616bb
new file mode 100644
index 0000000..c67d9de
--- /dev/null
+++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/914464d372dcccf31ed5331293d84121e17616bb
Binary files differ
diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/934a41b5027d1c5cca27ebda57560c38cb9e09ea b/test/core/end2end/fuzzers/client_fuzzer_corpus/934a41b5027d1c5cca27ebda57560c38cb9e09ea
new file mode 100644
index 0000000..8ca1a43
--- /dev/null
+++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/934a41b5027d1c5cca27ebda57560c38cb9e09ea
Binary files differ
diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/9354652806d96b09c8e7082b1b7d22e7c3fb9f0b b/test/core/end2end/fuzzers/client_fuzzer_corpus/9354652806d96b09c8e7082b1b7d22e7c3fb9f0b
new file mode 100644
index 0000000..41461a1
--- /dev/null
+++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/9354652806d96b09c8e7082b1b7d22e7c3fb9f0b
Binary files differ
diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/9398ac1c2b4015792661266a9c84b6d7a68c3155 b/test/core/end2end/fuzzers/client_fuzzer_corpus/9398ac1c2b4015792661266a9c84b6d7a68c3155
new file mode 100644
index 0000000..f9b2aaf
--- /dev/null
+++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/9398ac1c2b4015792661266a9c84b6d7a68c3155
Binary files differ
diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/99099024a3f3e389f57cb7b697eb34485846f316 b/test/core/end2end/fuzzers/client_fuzzer_corpus/99099024a3f3e389f57cb7b697eb34485846f316
new file mode 100644
index 0000000..1721f92
--- /dev/null
+++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/99099024a3f3e389f57cb7b697eb34485846f316
Binary files differ
diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/998a54dc94ab6e7d6a6066415fb0dd9b52356171 b/test/core/end2end/fuzzers/client_fuzzer_corpus/998a54dc94ab6e7d6a6066415fb0dd9b52356171
new file mode 100644
index 0000000..06ec60a
--- /dev/null
+++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/998a54dc94ab6e7d6a6066415fb0dd9b52356171
Binary files differ
diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/a25b31398669b585ccab97bceadc31994de7ead7 b/test/core/end2end/fuzzers/client_fuzzer_corpus/a25b31398669b585ccab97bceadc31994de7ead7
new file mode 100644
index 0000000..9d41026
--- /dev/null
+++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/a25b31398669b585ccab97bceadc31994de7ead7
Binary files differ
diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/a39ac9e92b41d1889096ed415b4c2eb1aba6ed50 b/test/core/end2end/fuzzers/client_fuzzer_corpus/a39ac9e92b41d1889096ed415b4c2eb1aba6ed50
new file mode 100644
index 0000000..be4a64b
--- /dev/null
+++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/a39ac9e92b41d1889096ed415b4c2eb1aba6ed50
Binary files differ
diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/a5c2fdae1a1c0487d00db0eec6e3429b12244b1f b/test/core/end2end/fuzzers/client_fuzzer_corpus/a5c2fdae1a1c0487d00db0eec6e3429b12244b1f
new file mode 100644
index 0000000..1c323b7
--- /dev/null
+++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/a5c2fdae1a1c0487d00db0eec6e3429b12244b1f
Binary files differ
diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/a649093880c2a2f143f861893eaff5d30be95eb7 b/test/core/end2end/fuzzers/client_fuzzer_corpus/a649093880c2a2f143f861893eaff5d30be95eb7
new file mode 100644
index 0000000..7b879ac
--- /dev/null
+++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/a649093880c2a2f143f861893eaff5d30be95eb7
Binary files differ
diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/a8249ebfe91327806446f14a6b2e7d9c8440257f b/test/core/end2end/fuzzers/client_fuzzer_corpus/a8249ebfe91327806446f14a6b2e7d9c8440257f
new file mode 100644
index 0000000..2bdbe51
--- /dev/null
+++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/a8249ebfe91327806446f14a6b2e7d9c8440257f
Binary files differ
diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/a8e306820fb76566b522c23ec68bdce0ad0536f2 b/test/core/end2end/fuzzers/client_fuzzer_corpus/a8e306820fb76566b522c23ec68bdce0ad0536f2
new file mode 100644
index 0000000..3c62087
--- /dev/null
+++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/a8e306820fb76566b522c23ec68bdce0ad0536f2
Binary files differ
diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/a97dbb159ef9bc6e39c9c25e04315752e871e739 b/test/core/end2end/fuzzers/client_fuzzer_corpus/a97dbb159ef9bc6e39c9c25e04315752e871e739
new file mode 100644
index 0000000..b43e55b
--- /dev/null
+++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/a97dbb159ef9bc6e39c9c25e04315752e871e739
Binary files differ
diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/ae448bfe17f9a3a6eff074d4caa9f7261c94d2d5 b/test/core/end2end/fuzzers/client_fuzzer_corpus/ae448bfe17f9a3a6eff074d4caa9f7261c94d2d5
new file mode 100644
index 0000000..5d16743
--- /dev/null
+++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/ae448bfe17f9a3a6eff074d4caa9f7261c94d2d5
Binary files differ
diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/ae8cdc02275a1436bc131bee52a17ee797e2e6c9 b/test/core/end2end/fuzzers/client_fuzzer_corpus/ae8cdc02275a1436bc131bee52a17ee797e2e6c9
new file mode 100644
index 0000000..12c2446
--- /dev/null
+++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/ae8cdc02275a1436bc131bee52a17ee797e2e6c9
Binary files differ
diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/b10353c265bef989d8909055fd6cd52e49eef3e6 b/test/core/end2end/fuzzers/client_fuzzer_corpus/b10353c265bef989d8909055fd6cd52e49eef3e6
new file mode 100644
index 0000000..4f6e5cc
--- /dev/null
+++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/b10353c265bef989d8909055fd6cd52e49eef3e6
Binary files differ
diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/b387e46c23912785e6c353ab49b8ea4a92c2c2e5 b/test/core/end2end/fuzzers/client_fuzzer_corpus/b387e46c23912785e6c353ab49b8ea4a92c2c2e5
new file mode 100644
index 0000000..32397f0
--- /dev/null
+++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/b387e46c23912785e6c353ab49b8ea4a92c2c2e5
Binary files differ
diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/b3cfcd55b0331ab0c931b8c61d4df41464587f10 b/test/core/end2end/fuzzers/client_fuzzer_corpus/b3cfcd55b0331ab0c931b8c61d4df41464587f10
new file mode 100644
index 0000000..fd118bc
--- /dev/null
+++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/b3cfcd55b0331ab0c931b8c61d4df41464587f10
Binary files differ
diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/b758f5c019696f33c50895168219c0e6cb04e11d b/test/core/end2end/fuzzers/client_fuzzer_corpus/b758f5c019696f33c50895168219c0e6cb04e11d
new file mode 100644
index 0000000..6b74b8a
--- /dev/null
+++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/b758f5c019696f33c50895168219c0e6cb04e11d
Binary files differ
diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/b93fd0a15287dd035eac86e547e3ce42183bdb28 b/test/core/end2end/fuzzers/client_fuzzer_corpus/b93fd0a15287dd035eac86e547e3ce42183bdb28
new file mode 100644
index 0000000..0bb5774
--- /dev/null
+++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/b93fd0a15287dd035eac86e547e3ce42183bdb28
Binary files differ
diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/ba3566735888b53712c6b2e6d52ff5f2197afd6a b/test/core/end2end/fuzzers/client_fuzzer_corpus/ba3566735888b53712c6b2e6d52ff5f2197afd6a
new file mode 100644
index 0000000..3d91afe
--- /dev/null
+++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/ba3566735888b53712c6b2e6d52ff5f2197afd6a
Binary files differ
diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/bd275178fd473028a5cedf7d5780b27e809882ee b/test/core/end2end/fuzzers/client_fuzzer_corpus/bd275178fd473028a5cedf7d5780b27e809882ee
new file mode 100644
index 0000000..eb3276b
--- /dev/null
+++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/bd275178fd473028a5cedf7d5780b27e809882ee
Binary files differ
diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/c4c53b4727e9e1f040c5d7870639dd3daa184ddb b/test/core/end2end/fuzzers/client_fuzzer_corpus/c4c53b4727e9e1f040c5d7870639dd3daa184ddb
new file mode 100644
index 0000000..80e75c5
--- /dev/null
+++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/c4c53b4727e9e1f040c5d7870639dd3daa184ddb
Binary files differ
diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/c9e2cf8be8a4dc2294020026c62840ef1fb4853b b/test/core/end2end/fuzzers/client_fuzzer_corpus/c9e2cf8be8a4dc2294020026c62840ef1fb4853b
new file mode 100644
index 0000000..e97dce0
--- /dev/null
+++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/c9e2cf8be8a4dc2294020026c62840ef1fb4853b
Binary files differ
diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/caaf9a7751c0eccc34f0fc00a048012ab5ed2f37 b/test/core/end2end/fuzzers/client_fuzzer_corpus/caaf9a7751c0eccc34f0fc00a048012ab5ed2f37
new file mode 100644
index 0000000..f2374b7
--- /dev/null
+++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/caaf9a7751c0eccc34f0fc00a048012ab5ed2f37
Binary files differ
diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/cb49955601d171fd14c9ac21137b221392c7dab1 b/test/core/end2end/fuzzers/client_fuzzer_corpus/cb49955601d171fd14c9ac21137b221392c7dab1
new file mode 100644
index 0000000..adfce80
--- /dev/null
+++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/cb49955601d171fd14c9ac21137b221392c7dab1
Binary files differ
diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/cbaabef34763f2fd922e67ff5f2ea283347e9823 b/test/core/end2end/fuzzers/client_fuzzer_corpus/cbaabef34763f2fd922e67ff5f2ea283347e9823
new file mode 100644
index 0000000..3a937ae
--- /dev/null
+++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/cbaabef34763f2fd922e67ff5f2ea283347e9823
Binary files differ
diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/cdd1a4e358ee2396ece54b32c1f0a8d0a2e3f3dc b/test/core/end2end/fuzzers/client_fuzzer_corpus/cdd1a4e358ee2396ece54b32c1f0a8d0a2e3f3dc
new file mode 100644
index 0000000..82466bf
--- /dev/null
+++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/cdd1a4e358ee2396ece54b32c1f0a8d0a2e3f3dc
Binary files differ
diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/cf922d44bf08d223d3ebcd37a7e77d3e43555d08 b/test/core/end2end/fuzzers/client_fuzzer_corpus/cf922d44bf08d223d3ebcd37a7e77d3e43555d08
new file mode 100644
index 0000000..b9399a2
--- /dev/null
+++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/cf922d44bf08d223d3ebcd37a7e77d3e43555d08
Binary files differ
diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/crash-17d5b79ce495f7d3f2e33d95588457281a5e8965 b/test/core/end2end/fuzzers/client_fuzzer_corpus/crash-17d5b79ce495f7d3f2e33d95588457281a5e8965
new file mode 100644
index 0000000..7b5b32c
--- /dev/null
+++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/crash-17d5b79ce495f7d3f2e33d95588457281a5e8965
Binary files differ
diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/crash-3e52af52deb0ed5d6ef06487d7e475e8fb616972 b/test/core/end2end/fuzzers/client_fuzzer_corpus/crash-3e52af52deb0ed5d6ef06487d7e475e8fb616972
new file mode 100644
index 0000000..30614ec
--- /dev/null
+++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/crash-3e52af52deb0ed5d6ef06487d7e475e8fb616972
Binary files differ
diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/crash-ff53a3d713e83ae945b8dd1782e21f5b51aa649a b/test/core/end2end/fuzzers/client_fuzzer_corpus/crash-ff53a3d713e83ae945b8dd1782e21f5b51aa649a
new file mode 100644
index 0000000..28ad75e
--- /dev/null
+++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/crash-ff53a3d713e83ae945b8dd1782e21f5b51aa649a
Binary files differ
diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/d17e9507af1855fcf9eca78e2d25c8fb2c40a34c b/test/core/end2end/fuzzers/client_fuzzer_corpus/d17e9507af1855fcf9eca78e2d25c8fb2c40a34c
new file mode 100644
index 0000000..b262a23
--- /dev/null
+++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/d17e9507af1855fcf9eca78e2d25c8fb2c40a34c
Binary files differ
diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/d46c3dcede830286dd9f4a1ba02a20a0b1430664 b/test/core/end2end/fuzzers/client_fuzzer_corpus/d46c3dcede830286dd9f4a1ba02a20a0b1430664
new file mode 100644
index 0000000..a11ecbe
--- /dev/null
+++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/d46c3dcede830286dd9f4a1ba02a20a0b1430664
Binary files differ
diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/d4a744ef6dcef5cf08d5289e167b26270d39e9f2 b/test/core/end2end/fuzzers/client_fuzzer_corpus/d4a744ef6dcef5cf08d5289e167b26270d39e9f2
new file mode 100644
index 0000000..462391f
--- /dev/null
+++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/d4a744ef6dcef5cf08d5289e167b26270d39e9f2
Binary files differ
diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/d5a85ad91cfde27a96960b2e783d2ee43c50dcb9 b/test/core/end2end/fuzzers/client_fuzzer_corpus/d5a85ad91cfde27a96960b2e783d2ee43c50dcb9
new file mode 100644
index 0000000..c187ee3
--- /dev/null
+++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/d5a85ad91cfde27a96960b2e783d2ee43c50dcb9
Binary files differ
diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/d88bb0b7ff687af84f33e6af22d3516fcdac5534 b/test/core/end2end/fuzzers/client_fuzzer_corpus/d88bb0b7ff687af84f33e6af22d3516fcdac5534
new file mode 100644
index 0000000..a64fe17
--- /dev/null
+++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/d88bb0b7ff687af84f33e6af22d3516fcdac5534
Binary files differ
diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/d895ece988ad4712b87de8aa9bc273eee315e8b8 b/test/core/end2end/fuzzers/client_fuzzer_corpus/d895ece988ad4712b87de8aa9bc273eee315e8b8
new file mode 100644
index 0000000..615ac35
--- /dev/null
+++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/d895ece988ad4712b87de8aa9bc273eee315e8b8
Binary files differ
diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/da424090e1b94c5d0e91e26f3f3dd6c4af18fcd5 b/test/core/end2end/fuzzers/client_fuzzer_corpus/da424090e1b94c5d0e91e26f3f3dd6c4af18fcd5
new file mode 100644
index 0000000..99ae121
--- /dev/null
+++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/da424090e1b94c5d0e91e26f3f3dd6c4af18fcd5
Binary files differ
diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/db3a30a6d8e605dd587e51b214c42f68bc43cf19 b/test/core/end2end/fuzzers/client_fuzzer_corpus/db3a30a6d8e605dd587e51b214c42f68bc43cf19
new file mode 100644
index 0000000..cc05683
--- /dev/null
+++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/db3a30a6d8e605dd587e51b214c42f68bc43cf19
Binary files differ
diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/e3d12a2385b75443fe38d989e77c252e1f3cdb6d b/test/core/end2end/fuzzers/client_fuzzer_corpus/e3d12a2385b75443fe38d989e77c252e1f3cdb6d
new file mode 100644
index 0000000..1878ff2
--- /dev/null
+++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/e3d12a2385b75443fe38d989e77c252e1f3cdb6d
Binary files differ
diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/e4f55281c481484bd9edc28fd10df0c2e0f7d546 b/test/core/end2end/fuzzers/client_fuzzer_corpus/e4f55281c481484bd9edc28fd10df0c2e0f7d546
new file mode 100644
index 0000000..042b169
--- /dev/null
+++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/e4f55281c481484bd9edc28fd10df0c2e0f7d546
Binary files differ
diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/e6c52f2f31db7595d1ecde2939a7390777f15182 b/test/core/end2end/fuzzers/client_fuzzer_corpus/e6c52f2f31db7595d1ecde2939a7390777f15182
new file mode 100644
index 0000000..17fbabe
--- /dev/null
+++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/e6c52f2f31db7595d1ecde2939a7390777f15182
Binary files differ
diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/f09cd3e3a16658174717668e51e7382e491df1da b/test/core/end2end/fuzzers/client_fuzzer_corpus/f09cd3e3a16658174717668e51e7382e491df1da
new file mode 100644
index 0000000..82c3e4f
--- /dev/null
+++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/f09cd3e3a16658174717668e51e7382e491df1da
Binary files differ
diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/f11abb090bae8cdac1f7d9a2e344f2def0e50066 b/test/core/end2end/fuzzers/client_fuzzer_corpus/f11abb090bae8cdac1f7d9a2e344f2def0e50066
new file mode 100644
index 0000000..2a12fb9
--- /dev/null
+++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/f11abb090bae8cdac1f7d9a2e344f2def0e50066
Binary files differ
diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/f4ae2a2b692bfa83cdde75d007813426e14daef7 b/test/core/end2end/fuzzers/client_fuzzer_corpus/f4ae2a2b692bfa83cdde75d007813426e14daef7
new file mode 100644
index 0000000..ea1c77e
--- /dev/null
+++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/f4ae2a2b692bfa83cdde75d007813426e14daef7
Binary files differ
diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/f5a629c8fd5720236b66a875e96ea22e29c45965 b/test/core/end2end/fuzzers/client_fuzzer_corpus/f5a629c8fd5720236b66a875e96ea22e29c45965
new file mode 100644
index 0000000..8b2a877
--- /dev/null
+++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/f5a629c8fd5720236b66a875e96ea22e29c45965
Binary files differ
diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/f6627c55881fe4f0c8e6999980fb226836e6f5ce b/test/core/end2end/fuzzers/client_fuzzer_corpus/f6627c55881fe4f0c8e6999980fb226836e6f5ce
new file mode 100644
index 0000000..60c8c75
--- /dev/null
+++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/f6627c55881fe4f0c8e6999980fb226836e6f5ce
Binary files differ
diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/f7aeceaf0b6d971038a677994b5d080fa0e18011 b/test/core/end2end/fuzzers/client_fuzzer_corpus/f7aeceaf0b6d971038a677994b5d080fa0e18011
new file mode 100644
index 0000000..a80c582
--- /dev/null
+++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/f7aeceaf0b6d971038a677994b5d080fa0e18011
Binary files differ
diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/f803c87a92662898e2c8c847787b56d2c31f63b3 b/test/core/end2end/fuzzers/client_fuzzer_corpus/f803c87a92662898e2c8c847787b56d2c31f63b3
new file mode 100644
index 0000000..146a748
--- /dev/null
+++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/f803c87a92662898e2c8c847787b56d2c31f63b3
Binary files differ
diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/f89ad475ff51a5a9fe18603df833453bed320f36 b/test/core/end2end/fuzzers/client_fuzzer_corpus/f89ad475ff51a5a9fe18603df833453bed320f36
new file mode 100644
index 0000000..ae4812d
--- /dev/null
+++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/f89ad475ff51a5a9fe18603df833453bed320f36
Binary files differ
diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/f9583b3a39c1aecbba6e81d71e7fe9b9519c8b08 b/test/core/end2end/fuzzers/client_fuzzer_corpus/f9583b3a39c1aecbba6e81d71e7fe9b9519c8b08
new file mode 100644
index 0000000..9018d4d
--- /dev/null
+++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/f9583b3a39c1aecbba6e81d71e7fe9b9519c8b08
Binary files differ
diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/ffd52d31f9c59a346aa195a683f077dda5ecef6b b/test/core/end2end/fuzzers/client_fuzzer_corpus/ffd52d31f9c59a346aa195a683f077dda5ecef6b
new file mode 100644
index 0000000..d7e73ad
--- /dev/null
+++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/ffd52d31f9c59a346aa195a683f077dda5ecef6b
Binary files differ
diff --git a/test/core/end2end/fuzzers/hpack.dictionary b/test/core/end2end/fuzzers/hpack.dictionary
index a93bccf..12db0ff 100644
--- a/test/core/end2end/fuzzers/hpack.dictionary
+++ b/test/core/end2end/fuzzers/hpack.dictionary
@@ -63,9 +63,9 @@
 "\x08if-range"
 "\x13if-unmodified-since"
 "\x0Dlast-modified"
+"\x0Blb-cost-bin"
+"\x08lb-token"
 "\x04link"
-"\x16load-reporting-initial"
-"\x17load-reporting-trailing"
 "\x08location"
 "\x0Cmax-forwards"
 "\x07:method"
@@ -138,9 +138,9 @@
 "\x00\x08if-range\x00"
 "\x00\x13if-unmodified-since\x00"
 "\x00\x0Dlast-modified\x00"
+"\x00\x0Blb-cost-bin\x00"
+"\x00\x08lb-token\x00"
 "\x00\x04link\x00"
-"\x00\x16load-reporting-initial\x00"
-"\x00\x17load-reporting-trailing\x00"
 "\x00\x08location\x00"
 "\x00\x0Cmax-forwards\x00"
 "\x00\x07:method\x03GET"
diff --git a/test/core/end2end/gen_build_yaml.py b/test/core/end2end/gen_build_yaml.py
index 78b37ef..0bbf10d 100755
--- a/test/core/end2end/gen_build_yaml.py
+++ b/test/core/end2end/gen_build_yaml.py
@@ -39,47 +39,52 @@
 
 FixtureOptions = collections.namedtuple(
     'FixtureOptions',
-    'fullstack includes_proxy dns_resolver secure platforms ci_mac tracing exclude_configs')
+    'fullstack includes_proxy dns_resolver secure platforms ci_mac tracing exclude_configs exclude_iomgrs')
 default_unsecure_fixture_options = FixtureOptions(
-    True, False, True, False, ['windows', 'linux', 'mac', 'posix'], True, False, [])
+    True, False, True, False, ['windows', 'linux', 'mac', 'posix'], True, False, [], [])
 socketpair_unsecure_fixture_options = default_unsecure_fixture_options._replace(fullstack=False, dns_resolver=False)
 default_secure_fixture_options = default_unsecure_fixture_options._replace(secure=True)
-uds_fixture_options = default_unsecure_fixture_options._replace(dns_resolver=False, platforms=['linux', 'mac', 'posix'])
+uds_fixture_options = default_unsecure_fixture_options._replace(dns_resolver=False, platforms=['linux', 'mac', 'posix'], exclude_iomgrs=['uv'])
 fd_unsecure_fixture_options = default_unsecure_fixture_options._replace(
-    dns_resolver=False, fullstack=False, platforms=['linux', 'mac', 'posix'])
+    dns_resolver=False, fullstack=False, platforms=['linux', 'mac', 'posix'], exclude_iomgrs=['uv'])
 
 
 # maps fixture name to whether it requires the security library
 END2END_FIXTURES = {
     'h2_compress': default_unsecure_fixture_options,
+
     'h2_census': default_unsecure_fixture_options,
     'h2_load_reporting': default_unsecure_fixture_options,
     'h2_fakesec': default_secure_fixture_options._replace(ci_mac=False),
+    'h2_fake_resolver': default_unsecure_fixture_options,
     'h2_fd': fd_unsecure_fixture_options,
     'h2_full': default_unsecure_fixture_options,
     'h2_full+pipe': default_unsecure_fixture_options._replace(
-        platforms=['linux']),
+        platforms=['linux'], exclude_iomgrs=['uv']),
     'h2_full+trace': default_unsecure_fixture_options._replace(tracing=True),
-    'h2_http_proxy': default_unsecure_fixture_options._replace(ci_mac=False),
-    'h2_oauth2': default_secure_fixture_options._replace(ci_mac=False),
-    'h2_proxy': default_unsecure_fixture_options._replace(includes_proxy=True,
-                                                          ci_mac=False),
+    'h2_http_proxy': default_unsecure_fixture_options._replace(
+        ci_mac=False, exclude_iomgrs=['uv']),
+    'h2_oauth2': default_secure_fixture_options._replace(
+        ci_mac=False, exclude_iomgrs=['uv']),
+    'h2_proxy': default_unsecure_fixture_options._replace(
+        includes_proxy=True, ci_mac=False, exclude_iomgrs=['uv']),
     'h2_sockpair_1byte': socketpair_unsecure_fixture_options._replace(
-        ci_mac=False, exclude_configs=['msan']),
-    'h2_sockpair': socketpair_unsecure_fixture_options._replace(ci_mac=False),
+        ci_mac=False, exclude_configs=['msan'], exclude_iomgrs=['uv']),
+    'h2_sockpair': socketpair_unsecure_fixture_options._replace(
+        ci_mac=False, exclude_iomgrs=['uv']),
     'h2_sockpair+trace': socketpair_unsecure_fixture_options._replace(
-        ci_mac=False, tracing=True),
+        ci_mac=False, tracing=True, exclude_iomgrs=['uv']),
     'h2_ssl': default_secure_fixture_options,
     'h2_ssl_cert': default_secure_fixture_options,
-    'h2_ssl_proxy': default_secure_fixture_options._replace(includes_proxy=True,
-                                                            ci_mac=False),
+    'h2_ssl_proxy': default_secure_fixture_options._replace(
+        includes_proxy=True, ci_mac=False, exclude_iomgrs=['uv']),
     'h2_uds': uds_fixture_options,
 }
 
 TestOptions = collections.namedtuple(
     'TestOptions',
-    'needs_fullstack needs_dns proxyable secure traceable cpu_cost')
-default_test_options = TestOptions(False, False, True, False, True, 1.0)
+    'needs_fullstack needs_dns proxyable secure traceable cpu_cost exclude_iomgrs')
+default_test_options = TestOptions(False, False, True, False, True, 1.0, [])
 connectivity_test_options = default_test_options._replace(needs_fullstack=True)
 
 LOWCPU = 0.1
@@ -96,8 +101,8 @@
     'cancel_in_a_vacuum': default_test_options._replace(cpu_cost=LOWCPU),
     'cancel_with_status': default_test_options._replace(cpu_cost=LOWCPU),
     'compressed_payload': default_test_options._replace(proxyable=False),
-    'connectivity': connectivity_test_options._replace(proxyable=False,
-                                                       cpu_cost=LOWCPU),
+    'connectivity': connectivity_test_options._replace(
+        proxyable=False, cpu_cost=LOWCPU, exclude_iomgrs=['uv']),
     'default_host': default_test_options._replace(needs_fullstack=True,
                                                   needs_dns=True),
     'disappearing_server': connectivity_test_options,
@@ -245,7 +250,9 @@
           {
               'name': '%s_test' % f,
               'args': [t],
-              'exclude_configs': [],
+              'exclude_configs': END2END_FIXTURES[f].exclude_configs,
+              'exclude_iomgrs': list(set(END2END_FIXTURES[f].exclude_iomgrs) |
+                                     set(END2END_TESTS[t].exclude_iomgrs)),
               'platforms': END2END_FIXTURES[f].platforms,
               'ci_platforms': (END2END_FIXTURES[f].platforms
                                if END2END_FIXTURES[f].ci_mac else without(
@@ -261,6 +268,8 @@
               'name': '%s_nosec_test' % f,
               'args': [t],
               'exclude_configs': END2END_FIXTURES[f].exclude_configs,
+              'exclude_iomgrs': list(set(END2END_FIXTURES[f].exclude_iomgrs) |
+                                     set(END2END_TESTS[t].exclude_iomgrs)),
               'platforms': END2END_FIXTURES[f].platforms,
               'ci_platforms': (END2END_FIXTURES[f].platforms
                                if END2END_FIXTURES[f].ci_mac else without(
diff --git a/test/core/end2end/tests/bad_hostname.c b/test/core/end2end/tests/bad_hostname.c
index e0c7ac7..85258dd 100644
--- a/test/core/end2end/tests/bad_hostname.c
+++ b/test/core/end2end/tests/bad_hostname.c
@@ -54,7 +54,7 @@
   grpc_end2end_test_fixture f;
   gpr_log(GPR_INFO, "%s/%s", test_name, config.name);
   f = config.create_fixture(client_args, server_args);
-  config.init_client(&f, client_args);
+  config.init_client(&f, client_args, NULL);
   config.init_server(&f, server_args);
   return f;
 }
diff --git a/test/core/end2end/tests/binary_metadata.c b/test/core/end2end/tests/binary_metadata.c
index 6b105de..73b0f17 100644
--- a/test/core/end2end/tests/binary_metadata.c
+++ b/test/core/end2end/tests/binary_metadata.c
@@ -53,7 +53,7 @@
   gpr_log(GPR_INFO, "%s/%s", test_name, config.name);
   f = config.create_fixture(client_args, server_args);
   config.init_server(&f, server_args);
-  config.init_client(&f, client_args);
+  config.init_client(&f, client_args, NULL);
   return f;
 }
 
diff --git a/test/core/end2end/tests/call_creds.c b/test/core/end2end/tests/call_creds.c
index 981c0fc..99c5d94 100644
--- a/test/core/end2end/tests/call_creds.c
+++ b/test/core/end2end/tests/call_creds.c
@@ -61,7 +61,7 @@
   grpc_end2end_test_fixture f;
   gpr_log(GPR_INFO, "%s/%s", test_name, config.name);
   f = config.create_fixture(NULL, NULL);
-  config.init_client(&f, NULL);
+  config.init_client(&f, NULL, NULL);
   if (fail_server_auth_check) {
     grpc_arg fail_auth_arg = {
         GRPC_ARG_STRING, FAIL_AUTH_CHECK_SERVER_ARG_NAME, {NULL}};
diff --git a/test/core/end2end/tests/cancel_after_accept.c b/test/core/end2end/tests/cancel_after_accept.c
index b4ac3b3..9f49815 100644
--- a/test/core/end2end/tests/cancel_after_accept.c
+++ b/test/core/end2end/tests/cancel_after_accept.c
@@ -49,12 +49,13 @@
 static grpc_end2end_test_fixture begin_test(grpc_end2end_test_config config,
                                             const char *test_name,
                                             grpc_channel_args *client_args,
-                                            grpc_channel_args *server_args) {
+                                            grpc_channel_args *server_args,
+                                            const char *query_args) {
   grpc_end2end_test_fixture f;
   gpr_log(GPR_INFO, "%s/%s", test_name, config.name);
   f = config.create_fixture(client_args, server_args);
   config.init_server(&f, server_args);
-  config.init_client(&f, client_args);
+  config.init_client(&f, client_args, query_args);
   return f;
 }
 
@@ -98,15 +99,15 @@
 
 /* Cancel after accept, no payload */
 static void test_cancel_after_accept(grpc_end2end_test_config config,
-                                     cancellation_mode mode) {
+                                     cancellation_mode mode,
+                                     bool use_service_config) {
   grpc_op ops[6];
   grpc_op *op;
   grpc_call *c;
   grpc_call *s;
-  grpc_end2end_test_fixture f =
-      begin_test(config, "cancel_after_accept", NULL, NULL);
-  gpr_timespec deadline = five_seconds_time();
-  cq_verifier *cqv = cq_verifier_create(f.cq);
+  gpr_timespec deadline = use_service_config
+                              ? gpr_inf_future(GPR_CLOCK_MONOTONIC)
+                              : five_seconds_time();
   grpc_metadata_array initial_metadata_recv;
   grpc_metadata_array trailing_metadata_recv;
   grpc_metadata_array request_metadata_recv;
@@ -125,8 +126,19 @@
       grpc_raw_byte_buffer_create(&response_payload_slice, 1);
   int was_cancelled = 2;
 
+  const char *query_args = NULL;
+  if (use_service_config) {
+    query_args =
+        "method_name=/service/method"
+        "&timeout_seconds=5";
+  }
+  grpc_end2end_test_fixture f =
+      begin_test(config, "cancel_after_accept", NULL, NULL, query_args);
+  cq_verifier *cqv = cq_verifier_create(f.cq);
+
   c = grpc_channel_create_call(f.client, NULL, GRPC_PROPAGATE_DEFAULTS, f.cq,
-                               "/foo", "foo.test.google.fr", deadline, NULL);
+                               "/service/method", "foo.test.google.fr",
+                               deadline, NULL);
   GPR_ASSERT(c);
 
   grpc_metadata_array_init(&initial_metadata_recv);
@@ -230,7 +242,18 @@
   unsigned i;
 
   for (i = 0; i < GPR_ARRAY_SIZE(cancellation_modes); i++) {
-    test_cancel_after_accept(config, cancellation_modes[i]);
+    test_cancel_after_accept(config, cancellation_modes[i],
+                             false /* use_service_config */);
+  }
+
+  if (config.feature_mask & FEATURE_MASK_SUPPORTS_QUERY_ARGS) {
+    for (i = 0; i < GPR_ARRAY_SIZE(cancellation_modes); i++) {
+      if (cancellation_modes[i].expect_status ==
+          GRPC_STATUS_DEADLINE_EXCEEDED) {
+        test_cancel_after_accept(config, cancellation_modes[i],
+                                 true /* use_service_config */);
+      }
+    }
   }
 }
 
diff --git a/test/core/end2end/tests/cancel_after_client_done.c b/test/core/end2end/tests/cancel_after_client_done.c
index 5adc71e..f61a404 100644
--- a/test/core/end2end/tests/cancel_after_client_done.c
+++ b/test/core/end2end/tests/cancel_after_client_done.c
@@ -54,7 +54,7 @@
   gpr_log(GPR_INFO, "%s/%s", test_name, config.name);
   f = config.create_fixture(client_args, server_args);
   config.init_server(&f, server_args);
-  config.init_client(&f, client_args);
+  config.init_client(&f, client_args, NULL);
   return f;
 }
 
diff --git a/test/core/end2end/tests/cancel_after_invoke.c b/test/core/end2end/tests/cancel_after_invoke.c
index 85d8799..c31582b 100644
--- a/test/core/end2end/tests/cancel_after_invoke.c
+++ b/test/core/end2end/tests/cancel_after_invoke.c
@@ -55,7 +55,7 @@
   gpr_log(GPR_INFO, "%s/%s/%s", test_name, config.name, mode.name);
   f = config.create_fixture(client_args, server_args);
   config.init_server(&f, server_args);
-  config.init_client(&f, client_args);
+  config.init_client(&f, client_args, NULL);
   return f;
 }
 
diff --git a/test/core/end2end/tests/cancel_before_invoke.c b/test/core/end2end/tests/cancel_before_invoke.c
index c570914..5dcd44e 100644
--- a/test/core/end2end/tests/cancel_before_invoke.c
+++ b/test/core/end2end/tests/cancel_before_invoke.c
@@ -53,7 +53,7 @@
   gpr_log(GPR_INFO, "%s/%s", test_name, config.name);
   f = config.create_fixture(client_args, server_args);
   config.init_server(&f, server_args);
-  config.init_client(&f, client_args);
+  config.init_client(&f, client_args, NULL);
   return f;
 }
 
diff --git a/test/core/end2end/tests/cancel_in_a_vacuum.c b/test/core/end2end/tests/cancel_in_a_vacuum.c
index 3b03616..7f75a92 100644
--- a/test/core/end2end/tests/cancel_in_a_vacuum.c
+++ b/test/core/end2end/tests/cancel_in_a_vacuum.c
@@ -54,7 +54,7 @@
   gpr_log(GPR_INFO, "%s/%s", test_name, config.name);
   f = config.create_fixture(client_args, server_args);
   config.init_server(&f, server_args);
-  config.init_client(&f, client_args);
+  config.init_client(&f, client_args, NULL);
   return f;
 }
 
diff --git a/test/core/end2end/tests/cancel_with_status.c b/test/core/end2end/tests/cancel_with_status.c
index e65390a..5cf3eb6 100644
--- a/test/core/end2end/tests/cancel_with_status.c
+++ b/test/core/end2end/tests/cancel_with_status.c
@@ -55,7 +55,7 @@
   gpr_log(GPR_INFO, "%s/%s", test_name, config.name);
   f = config.create_fixture(client_args, server_args);
   config.init_server(&f, server_args);
-  config.init_client(&f, client_args);
+  config.init_client(&f, client_args, NULL);
   return f;
 }
 
diff --git a/test/core/end2end/tests/compressed_payload.c b/test/core/end2end/tests/compressed_payload.c
index 1724da4..f598a38 100644
--- a/test/core/end2end/tests/compressed_payload.c
+++ b/test/core/end2end/tests/compressed_payload.c
@@ -60,7 +60,7 @@
   gpr_log(GPR_INFO, "%s/%s", test_name, config.name);
   f = config.create_fixture(client_args, server_args);
   config.init_server(&f, server_args);
-  config.init_client(&f, client_args);
+  config.init_client(&f, client_args, NULL);
   return f;
 }
 
diff --git a/test/core/end2end/tests/connectivity.c b/test/core/end2end/tests/connectivity.c
index 260297e..4a99165 100644
--- a/test/core/end2end/tests/connectivity.c
+++ b/test/core/end2end/tests/connectivity.c
@@ -68,7 +68,7 @@
   gpr_thd_options thdopt = gpr_thd_options_default();
   gpr_thd_id thdid;
 
-  config.init_client(&f, NULL);
+  config.init_client(&f, NULL, NULL);
 
   ce.channel = f.client;
   ce.cq = f.cq;
diff --git a/test/core/end2end/tests/default_host.c b/test/core/end2end/tests/default_host.c
index 208e316..5b32b50 100644
--- a/test/core/end2end/tests/default_host.c
+++ b/test/core/end2end/tests/default_host.c
@@ -54,7 +54,7 @@
   grpc_end2end_test_fixture f;
   gpr_log(GPR_INFO, "%s/%s", test_name, config.name);
   f = config.create_fixture(client_args, server_args);
-  config.init_client(&f, client_args);
+  config.init_client(&f, client_args, NULL);
   config.init_server(&f, server_args);
   return f;
 }
diff --git a/test/core/end2end/tests/disappearing_server.c b/test/core/end2end/tests/disappearing_server.c
index a0059b9..d8d76f8 100644
--- a/test/core/end2end/tests/disappearing_server.c
+++ b/test/core/end2end/tests/disappearing_server.c
@@ -193,7 +193,7 @@
 
   gpr_log(GPR_INFO, "%s/%s", "disappearing_server_test", config.name);
 
-  config.init_client(&f, NULL);
+  config.init_client(&f, NULL, NULL);
   config.init_server(&f, NULL);
 
   do_request_and_shutdown_server(&f, cqv);
diff --git a/test/core/end2end/tests/empty_batch.c b/test/core/end2end/tests/empty_batch.c
index ac53e18..bc27b1a 100644
--- a/test/core/end2end/tests/empty_batch.c
+++ b/test/core/end2end/tests/empty_batch.c
@@ -55,7 +55,7 @@
   gpr_log(GPR_INFO, "%s/%s", test_name, config.name);
   f = config.create_fixture(client_args, server_args);
   config.init_server(&f, server_args);
-  config.init_client(&f, client_args);
+  config.init_client(&f, client_args, NULL);
   return f;
 }
 
diff --git a/test/core/end2end/tests/filter_call_init_fails.c b/test/core/end2end/tests/filter_call_init_fails.c
index a70f50a..0e5692f 100644
--- a/test/core/end2end/tests/filter_call_init_fails.c
+++ b/test/core/end2end/tests/filter_call_init_fails.c
@@ -61,7 +61,7 @@
   gpr_log(GPR_INFO, "%s/%s", test_name, config.name);
   f = config.create_fixture(client_args, server_args);
   config.init_server(&f, server_args);
-  config.init_client(&f, client_args);
+  config.init_client(&f, client_args, NULL);
   return f;
 }
 
diff --git a/test/core/end2end/tests/filter_causes_close.c b/test/core/end2end/tests/filter_causes_close.c
index cdf8683..d5eddc7 100644
--- a/test/core/end2end/tests/filter_causes_close.c
+++ b/test/core/end2end/tests/filter_causes_close.c
@@ -58,7 +58,7 @@
   gpr_log(GPR_INFO, "%s/%s", test_name, config.name);
   f = config.create_fixture(client_args, server_args);
   config.init_server(&f, server_args);
-  config.init_client(&f, client_args);
+  config.init_client(&f, client_args, NULL);
   return f;
 }
 
@@ -209,11 +209,10 @@
     // close the stream with an error.
     gpr_slice message =
         gpr_slice_from_copied_string("Failure that's not preventable.");
-    grpc_transport_stream_op op;
-    memset(&op, 0, sizeof(op));
-    grpc_transport_stream_op_add_close(&op, GRPC_STATUS_PERMISSION_DENIED,
+    grpc_transport_stream_op *op = grpc_make_transport_stream_op(NULL);
+    grpc_transport_stream_op_add_close(op, GRPC_STATUS_PERMISSION_DENIED,
                                        &message);
-    grpc_call_next_op(exec_ctx, elem, &op);
+    grpc_call_next_op(exec_ctx, elem, op);
   }
   grpc_exec_ctx_sched(
       exec_ctx, calld->recv_im_ready,
diff --git a/test/core/end2end/tests/graceful_server_shutdown.c b/test/core/end2end/tests/graceful_server_shutdown.c
index 29347a0..e098a63 100644
--- a/test/core/end2end/tests/graceful_server_shutdown.c
+++ b/test/core/end2end/tests/graceful_server_shutdown.c
@@ -53,7 +53,7 @@
   gpr_log(GPR_INFO, "%s/%s", test_name, config.name);
   f = config.create_fixture(client_args, server_args);
   config.init_server(&f, server_args);
-  config.init_client(&f, client_args);
+  config.init_client(&f, client_args, NULL);
   return f;
 }
 
diff --git a/test/core/end2end/tests/high_initial_seqno.c b/test/core/end2end/tests/high_initial_seqno.c
index dab5270..193706b 100644
--- a/test/core/end2end/tests/high_initial_seqno.c
+++ b/test/core/end2end/tests/high_initial_seqno.c
@@ -57,7 +57,7 @@
   gpr_log(GPR_INFO, "%s/%s", test_name, config.name);
   f = config.create_fixture(client_args, server_args);
   config.init_server(&f, server_args);
-  config.init_client(&f, client_args);
+  config.init_client(&f, client_args, NULL);
   return f;
 }
 
diff --git a/test/core/end2end/tests/hpack_size.c b/test/core/end2end/tests/hpack_size.c
index fb00ae4..78afdb5 100644
--- a/test/core/end2end/tests/hpack_size.c
+++ b/test/core/end2end/tests/hpack_size.c
@@ -197,7 +197,7 @@
   gpr_log(GPR_INFO, "%s/%s", test_name, config.name);
   f = config.create_fixture(client_args, server_args);
   config.init_server(&f, server_args);
-  config.init_client(&f, client_args);
+  config.init_client(&f, client_args, NULL);
   return f;
 }
 
diff --git a/test/core/end2end/tests/idempotent_request.c b/test/core/end2end/tests/idempotent_request.c
index 65f6dd0..b53e003 100644
--- a/test/core/end2end/tests/idempotent_request.c
+++ b/test/core/end2end/tests/idempotent_request.c
@@ -55,7 +55,7 @@
   gpr_log(GPR_INFO, "%s/%s", test_name, config.name);
   f = config.create_fixture(client_args, server_args);
   config.init_server(&f, server_args);
-  config.init_client(&f, client_args);
+  config.init_client(&f, client_args, NULL);
   return f;
 }
 
diff --git a/test/core/end2end/tests/invoke_large_request.c b/test/core/end2end/tests/invoke_large_request.c
index 1df237c..3820504 100644
--- a/test/core/end2end/tests/invoke_large_request.c
+++ b/test/core/end2end/tests/invoke_large_request.c
@@ -54,7 +54,7 @@
   gpr_log(GPR_INFO, "%s/%s", test_name, config.name);
   f = config.create_fixture(client_args, server_args);
   config.init_server(&f, server_args);
-  config.init_client(&f, client_args);
+  config.init_client(&f, client_args, NULL);
   return f;
 }
 
diff --git a/test/core/end2end/tests/large_metadata.c b/test/core/end2end/tests/large_metadata.c
index eb174a2..6107836 100644
--- a/test/core/end2end/tests/large_metadata.c
+++ b/test/core/end2end/tests/large_metadata.c
@@ -53,7 +53,7 @@
   gpr_log(GPR_INFO, "%s/%s", test_name, config.name);
   f = config.create_fixture(client_args, server_args);
   config.init_server(&f, server_args);
-  config.init_client(&f, client_args);
+  config.init_client(&f, client_args, NULL);
   return f;
 }
 
diff --git a/test/core/end2end/tests/load_reporting_hook.c b/test/core/end2end/tests/load_reporting_hook.c
index 59d054c..0915730 100644
--- a/test/core/end2end/tests/load_reporting_hook.c
+++ b/test/core/end2end/tests/load_reporting_hook.c
@@ -78,7 +78,7 @@
 
   f = config.create_fixture(client_args, server_args);
   config.init_server(&f, server_args);
-  config.init_client(&f, client_args);
+  config.init_client(&f, client_args, NULL);
 
   return f;
 }
@@ -295,13 +295,13 @@
   grpc_metadata initial_lr_metadata;
   grpc_metadata trailing_lr_metadata;
 
-  initial_lr_metadata.key = GRPC_LOAD_REPORTING_INITIAL_MD_KEY;
+  initial_lr_metadata.key = GRPC_LB_TOKEN_MD_KEY;
   initial_lr_metadata.value = "client-token";
   initial_lr_metadata.value_length = strlen(initial_lr_metadata.value);
   memset(&initial_lr_metadata.internal_data, 0,
          sizeof(initial_lr_metadata.internal_data));
 
-  trailing_lr_metadata.key = GRPC_LOAD_REPORTING_TRAILING_MD_KEY;
+  trailing_lr_metadata.key = GRPC_LB_COST_MD_KEY;
   trailing_lr_metadata.value = "server-token";
   trailing_lr_metadata.value_length = strlen(trailing_lr_metadata.value);
   memset(&trailing_lr_metadata.internal_data, 0,
diff --git a/test/core/end2end/tests/max_concurrent_streams.c b/test/core/end2end/tests/max_concurrent_streams.c
index 65fa946..6c7bf9f 100644
--- a/test/core/end2end/tests/max_concurrent_streams.c
+++ b/test/core/end2end/tests/max_concurrent_streams.c
@@ -53,7 +53,7 @@
   gpr_log(GPR_INFO, "%s/%s", test_name, config.name);
   f = config.create_fixture(client_args, server_args);
   config.init_server(&f, server_args);
-  config.init_client(&f, client_args);
+  config.init_client(&f, client_args, NULL);
   return f;
 }
 
diff --git a/test/core/end2end/tests/max_message_length.c b/test/core/end2end/tests/max_message_length.c
index d27cced..e698987 100644
--- a/test/core/end2end/tests/max_message_length.c
+++ b/test/core/end2end/tests/max_message_length.c
@@ -48,7 +48,8 @@
 static grpc_end2end_test_fixture begin_test(grpc_end2end_test_config config,
                                             const char *test_name,
                                             grpc_channel_args *client_args,
-                                            grpc_channel_args *server_args) {
+                                            grpc_channel_args *server_args,
+                                            const char *query_args) {
   grpc_end2end_test_fixture f;
   gpr_log(GPR_INFO, "%s/%s", test_name, config.name);
   // We intentionally do not pass the client and server args to
@@ -56,7 +57,7 @@
   // proxy, only on the backend server.
   f = config.create_fixture(NULL, NULL);
   config.init_server(&f, server_args);
-  config.init_client(&f, client_args);
+  config.init_client(&f, client_args, query_args);
   return f;
 }
 
@@ -102,8 +103,10 @@
 // If send_limit is true, applies send limit on client; otherwise, applies
 // recv limit on server.
 static void test_max_message_length_on_request(grpc_end2end_test_config config,
-                                               bool send_limit) {
-  gpr_log(GPR_INFO, "testing request with send_limit=%d", send_limit);
+                                               bool send_limit,
+                                               bool use_service_config) {
+  gpr_log(GPR_INFO, "testing request with send_limit=%d use_service_config=%d",
+          send_limit, use_service_config);
 
   grpc_end2end_test_fixture f;
   grpc_arg channel_arg;
@@ -127,21 +130,36 @@
   size_t details_capacity = 0;
   int was_cancelled = 2;
 
-  channel_arg.key = send_limit ? GRPC_ARG_MAX_SEND_MESSAGE_LENGTH
-                               : GRPC_ARG_MAX_RECEIVE_MESSAGE_LENGTH;
-  channel_arg.type = GRPC_ARG_INTEGER;
-  channel_arg.value.integer = 5;
+  char *query_args = NULL;
+  grpc_channel_args *client_args = NULL;
+  grpc_channel_args *server_args = NULL;
+  if (use_service_config) {
+    // We don't currently support service configs on the server side.
+    GPR_ASSERT(send_limit);
+    query_args =
+        "method_name=/service/method"
+        "&max_request_message_bytes=5";
+  } else {
+    // Set limit via channel args.
+    channel_arg.key = send_limit ? GRPC_ARG_MAX_SEND_MESSAGE_LENGTH
+                                 : GRPC_ARG_MAX_RECEIVE_MESSAGE_LENGTH;
+    channel_arg.type = GRPC_ARG_INTEGER;
+    channel_arg.value.integer = 5;
+    channel_args.num_args = 1;
+    channel_args.args = &channel_arg;
+    if (send_limit) {
+      client_args = &channel_args;
+    } else {
+      server_args = &channel_args;
+    }
+  }
 
-  channel_args.num_args = 1;
-  channel_args.args = &channel_arg;
-
-  f = begin_test(config, "test_max_message_length",
-                 send_limit ? &channel_args : NULL,
-                 send_limit ? NULL : &channel_args);
+  f = begin_test(config, "test_max_request_message_length", client_args,
+                 server_args, query_args);
   cqv = cq_verifier_create(f.cq);
 
   c = grpc_channel_create_call(f.client, NULL, GRPC_PROPAGATE_DEFAULTS, f.cq,
-                               "/foo", "foo.test.google.fr:1234",
+                               "/service/method", "foo.test.google.fr:1234",
                                gpr_inf_future(GPR_CLOCK_REALTIME), NULL);
   GPR_ASSERT(c);
 
@@ -214,7 +232,7 @@
   CQ_EXPECT_COMPLETION(cqv, tag(1), 1);
   cq_verify(cqv);
 
-  GPR_ASSERT(0 == strcmp(call_details.method, "/foo"));
+  GPR_ASSERT(0 == strcmp(call_details.method, "/service/method"));
   GPR_ASSERT(0 == strcmp(call_details.host, "foo.test.google.fr:1234"));
   GPR_ASSERT(was_cancelled == 1);
 
@@ -246,8 +264,10 @@
 // If send_limit is true, applies send limit on server; otherwise, applies
 // recv limit on client.
 static void test_max_message_length_on_response(grpc_end2end_test_config config,
-                                                bool send_limit) {
-  gpr_log(GPR_INFO, "testing response with send_limit=%d", send_limit);
+                                                bool send_limit,
+                                                bool use_service_config) {
+  gpr_log(GPR_INFO, "testing response with send_limit=%d use_service_config=%d",
+          send_limit, use_service_config);
 
   grpc_end2end_test_fixture f;
   grpc_arg channel_arg;
@@ -272,21 +292,36 @@
   size_t details_capacity = 0;
   int was_cancelled = 2;
 
-  channel_arg.key = send_limit ? GRPC_ARG_MAX_SEND_MESSAGE_LENGTH
-                               : GRPC_ARG_MAX_RECEIVE_MESSAGE_LENGTH;
-  channel_arg.type = GRPC_ARG_INTEGER;
-  channel_arg.value.integer = 5;
+  char *query_args = NULL;
+  grpc_channel_args *client_args = NULL;
+  grpc_channel_args *server_args = NULL;
+  if (use_service_config) {
+    // We don't currently support service configs on the server side.
+    GPR_ASSERT(!send_limit);
+    query_args =
+        "method_name=/service/method"
+        "&max_response_message_bytes=5";
+  } else {
+    // Set limit via channel args.
+    channel_arg.key = send_limit ? GRPC_ARG_MAX_SEND_MESSAGE_LENGTH
+                                 : GRPC_ARG_MAX_RECEIVE_MESSAGE_LENGTH;
+    channel_arg.type = GRPC_ARG_INTEGER;
+    channel_arg.value.integer = 5;
+    channel_args.num_args = 1;
+    channel_args.args = &channel_arg;
+    if (send_limit) {
+      server_args = &channel_args;
+    } else {
+      client_args = &channel_args;
+    }
+  }
 
-  channel_args.num_args = 1;
-  channel_args.args = &channel_arg;
-
-  f = begin_test(config, "test_max_message_length",
-                 send_limit ? NULL : &channel_args,
-                 send_limit ? &channel_args : NULL);
+  f = begin_test(config, "test_max_response_message_length", client_args,
+                 server_args, query_args);
   cqv = cq_verifier_create(f.cq);
 
   c = grpc_channel_create_call(f.client, NULL, GRPC_PROPAGATE_DEFAULTS, f.cq,
-                               "/foo", "foo.test.google.fr:1234",
+                               "/service/method", "foo.test.google.fr:1234",
                                gpr_inf_future(GPR_CLOCK_REALTIME), NULL);
   GPR_ASSERT(c);
 
@@ -365,7 +400,7 @@
   CQ_EXPECT_COMPLETION(cqv, tag(1), 1);
   cq_verify(cqv);
 
-  GPR_ASSERT(0 == strcmp(call_details.method, "/foo"));
+  GPR_ASSERT(0 == strcmp(call_details.method, "/service/method"));
   GPR_ASSERT(0 == strcmp(call_details.host, "foo.test.google.fr:1234"));
   GPR_ASSERT(was_cancelled == 0);
 
@@ -393,10 +428,20 @@
 }
 
 void max_message_length(grpc_end2end_test_config config) {
-  test_max_message_length_on_request(config, false /* send_limit */);
-  test_max_message_length_on_request(config, true /* send_limit */);
-  test_max_message_length_on_response(config, false /* send_limit */);
-  test_max_message_length_on_response(config, true /* send_limit */);
+  test_max_message_length_on_request(config, false /* send_limit */,
+                                     false /* use_service_config */);
+  test_max_message_length_on_request(config, true /* send_limit */,
+                                     false /* use_service_config */);
+  test_max_message_length_on_response(config, false /* send_limit */,
+                                      false /* use_service_config */);
+  test_max_message_length_on_response(config, true /* send_limit */,
+                                      false /* use_service_config */);
+  if (config.feature_mask & FEATURE_MASK_SUPPORTS_QUERY_ARGS) {
+    test_max_message_length_on_request(config, true /* send_limit */,
+                                       true /* use_service_config */);
+    test_max_message_length_on_response(config, false /* send_limit */,
+                                        true /* use_service_config */);
+  }
 }
 
 void max_message_length_pre_init(void) {}
diff --git a/test/core/end2end/tests/negative_deadline.c b/test/core/end2end/tests/negative_deadline.c
index c999ac1..12c6a0f 100644
--- a/test/core/end2end/tests/negative_deadline.c
+++ b/test/core/end2end/tests/negative_deadline.c
@@ -55,7 +55,7 @@
   gpr_log(GPR_INFO, "%s/%s", test_name, config.name);
   f = config.create_fixture(client_args, server_args);
   config.init_server(&f, server_args);
-  config.init_client(&f, client_args);
+  config.init_client(&f, client_args, NULL);
   return f;
 }
 
diff --git a/test/core/end2end/tests/network_status_change.c b/test/core/end2end/tests/network_status_change.c
index 1d4b6db..8d6b8f8 100644
--- a/test/core/end2end/tests/network_status_change.c
+++ b/test/core/end2end/tests/network_status_change.c
@@ -56,7 +56,7 @@
   gpr_log(GPR_INFO, "%s/%s", test_name, config.name);
   f = config.create_fixture(client_args, server_args);
   config.init_server(&f, server_args);
-  config.init_client(&f, client_args);
+  config.init_client(&f, client_args, NULL);
   return f;
 }
 
diff --git a/test/core/end2end/tests/no_logging.c b/test/core/end2end/tests/no_logging.c
index 430bfdc..8f9ef78 100644
--- a/test/core/end2end/tests/no_logging.c
+++ b/test/core/end2end/tests/no_logging.c
@@ -83,7 +83,7 @@
   gpr_log(GPR_INFO, "%s/%s", test_name, config.name);
   f = config.create_fixture(client_args, server_args);
   config.init_server(&f, server_args);
-  config.init_client(&f, client_args);
+  config.init_client(&f, client_args, NULL);
   return f;
 }
 
@@ -293,6 +293,8 @@
 }
 
 void no_logging(grpc_end2end_test_config config) {
+  gpr_set_log_verbosity(GPR_LOG_SEVERITY_DEBUG);
+  grpc_tracer_set_enabled("all", 0);
   gpr_set_log_function(log_dispatcher_func);
   test_no_logging_in_one_request(config);
   test_no_error_logging_in_entire_process(config);
diff --git a/test/core/end2end/tests/no_op.c b/test/core/end2end/tests/no_op.c
index 8b29c21..a1c61cb 100644
--- a/test/core/end2end/tests/no_op.c
+++ b/test/core/end2end/tests/no_op.c
@@ -53,7 +53,7 @@
   gpr_log(GPR_INFO, "%s/%s", test_name, config.name);
   f = config.create_fixture(client_args, server_args);
   config.init_server(&f, server_args);
-  config.init_client(&f, client_args);
+  config.init_client(&f, client_args, NULL);
   return f;
 }
 
diff --git a/test/core/end2end/tests/payload.c b/test/core/end2end/tests/payload.c
index c71704f..8353ea3 100644
--- a/test/core/end2end/tests/payload.c
+++ b/test/core/end2end/tests/payload.c
@@ -53,7 +53,7 @@
   gpr_log(GPR_INFO, "%s/%s", test_name, config.name);
   f = config.create_fixture(client_args, server_args);
   config.init_server(&f, server_args);
-  config.init_client(&f, client_args);
+  config.init_client(&f, client_args, NULL);
   return f;
 }
 
@@ -95,9 +95,29 @@
   grpc_completion_queue_destroy(f->cq);
 }
 
+/* Creates and returns a gpr_slice containing random alphanumeric characters. */
+static gpr_slice generate_random_slice() {
+  size_t i;
+  static const char chars[] = "abcdefghijklmnopqrstuvwxyz1234567890";
+  char *output;
+  const size_t output_size = 1024 * 1024;
+  output = gpr_malloc(output_size);
+  for (i = 0; i < output_size - 1; ++i) {
+    output[i] = chars[rand() % (int)(sizeof(chars) - 1)];
+  }
+  output[output_size - 1] = '\0';
+  gpr_slice out = gpr_slice_from_copied_string(output);
+  gpr_free(output);
+  return out;
+}
+
 static void request_response_with_payload(grpc_end2end_test_fixture f) {
-  gpr_slice request_payload_slice = gpr_slice_from_copied_string("hello world");
-  gpr_slice response_payload_slice = gpr_slice_from_copied_string("hello you");
+  /* Create large request and response bodies. These are big enough to require
+   * multiple round trips to deliver to the peer, and their exact contents of
+   * will be verified on completion. */
+  gpr_slice request_payload_slice = generate_random_slice();
+  gpr_slice response_payload_slice = generate_random_slice();
+
   grpc_call *c;
   grpc_call *s;
   grpc_byte_buffer *request_payload =
@@ -222,8 +242,9 @@
   GPR_ASSERT(0 == strcmp(call_details.method, "/foo"));
   GPR_ASSERT(0 == strcmp(call_details.host, "foo.test.google.fr"));
   GPR_ASSERT(was_cancelled == 0);
-  GPR_ASSERT(byte_buffer_eq_string(request_payload_recv, "hello world"));
-  GPR_ASSERT(byte_buffer_eq_string(response_payload_recv, "hello you"));
+  GPR_ASSERT(byte_buffer_eq_slice(request_payload_recv, request_payload_slice));
+  GPR_ASSERT(
+      byte_buffer_eq_slice(response_payload_recv, response_payload_slice));
 
   gpr_free(details);
   grpc_metadata_array_destroy(&initial_metadata_recv);
diff --git a/test/core/end2end/tests/ping.c b/test/core/end2end/tests/ping.c
index 5e5169d..f7e119c 100644
--- a/test/core/end2end/tests/ping.c
+++ b/test/core/end2end/tests/ping.c
@@ -48,7 +48,7 @@
   grpc_connectivity_state state = GRPC_CHANNEL_IDLE;
   int i;
 
-  config.init_client(&f, NULL);
+  config.init_client(&f, NULL, NULL);
   config.init_server(&f, NULL);
 
   grpc_channel_ping(f.client, f.cq, tag(0), NULL);
diff --git a/test/core/end2end/tests/ping_pong_streaming.c b/test/core/end2end/tests/ping_pong_streaming.c
index 7e360c4..30ea800 100644
--- a/test/core/end2end/tests/ping_pong_streaming.c
+++ b/test/core/end2end/tests/ping_pong_streaming.c
@@ -53,7 +53,7 @@
   gpr_log(GPR_INFO, "%s/%s", test_name, config.name);
   f = config.create_fixture(client_args, server_args);
   config.init_server(&f, server_args);
-  config.init_client(&f, client_args);
+  config.init_client(&f, client_args, NULL);
   return f;
 }
 
diff --git a/test/core/end2end/tests/registered_call.c b/test/core/end2end/tests/registered_call.c
index 9b2b42b..4c094e1 100644
--- a/test/core/end2end/tests/registered_call.c
+++ b/test/core/end2end/tests/registered_call.c
@@ -55,7 +55,7 @@
   gpr_log(GPR_INFO, "%s/%s", test_name, config.name);
   f = config.create_fixture(client_args, server_args);
   config.init_server(&f, server_args);
-  config.init_client(&f, client_args);
+  config.init_client(&f, client_args, NULL);
   return f;
 }
 
diff --git a/test/core/end2end/tests/request_with_flags.c b/test/core/end2end/tests/request_with_flags.c
index 25150e6..69ad69a 100644
--- a/test/core/end2end/tests/request_with_flags.c
+++ b/test/core/end2end/tests/request_with_flags.c
@@ -54,7 +54,7 @@
   gpr_log(GPR_INFO, "%s/%s", test_name, config.name);
   f = config.create_fixture(client_args, server_args);
   config.init_server(&f, server_args);
-  config.init_client(&f, client_args);
+  config.init_client(&f, client_args, NULL);
   return f;
 }
 
diff --git a/test/core/end2end/tests/request_with_payload.c b/test/core/end2end/tests/request_with_payload.c
index 67208c0..56ff83c 100644
--- a/test/core/end2end/tests/request_with_payload.c
+++ b/test/core/end2end/tests/request_with_payload.c
@@ -53,7 +53,7 @@
   gpr_log(GPR_INFO, "%s/%s", test_name, config.name);
   f = config.create_fixture(client_args, server_args);
   config.init_server(&f, server_args);
-  config.init_client(&f, client_args);
+  config.init_client(&f, client_args, NULL);
   return f;
 }
 
diff --git a/test/core/end2end/tests/server_finishes_request.c b/test/core/end2end/tests/server_finishes_request.c
index 7fb9025..c23b758 100644
--- a/test/core/end2end/tests/server_finishes_request.c
+++ b/test/core/end2end/tests/server_finishes_request.c
@@ -55,7 +55,7 @@
   gpr_log(GPR_INFO, "%s/%s", test_name, config.name);
   f = config.create_fixture(client_args, server_args);
   config.init_server(&f, server_args);
-  config.init_client(&f, client_args);
+  config.init_client(&f, client_args, NULL);
   return f;
 }
 
diff --git a/test/core/end2end/tests/shutdown_finishes_calls.c b/test/core/end2end/tests/shutdown_finishes_calls.c
index dff2e6f..a21a63a 100644
--- a/test/core/end2end/tests/shutdown_finishes_calls.c
+++ b/test/core/end2end/tests/shutdown_finishes_calls.c
@@ -53,7 +53,7 @@
   gpr_log(GPR_INFO, "%s/%s", test_name, config.name);
   f = config.create_fixture(client_args, server_args);
   config.init_server(&f, server_args);
-  config.init_client(&f, client_args);
+  config.init_client(&f, client_args, NULL);
   return f;
 }
 
diff --git a/test/core/end2end/tests/shutdown_finishes_tags.c b/test/core/end2end/tests/shutdown_finishes_tags.c
index 1d110a7..aca7c55 100644
--- a/test/core/end2end/tests/shutdown_finishes_tags.c
+++ b/test/core/end2end/tests/shutdown_finishes_tags.c
@@ -53,7 +53,7 @@
   gpr_log(GPR_INFO, "%s/%s", test_name, config.name);
   f = config.create_fixture(client_args, server_args);
   config.init_server(&f, server_args);
-  config.init_client(&f, client_args);
+  config.init_client(&f, client_args, NULL);
   return f;
 }
 
diff --git a/test/core/end2end/tests/simple_cacheable_request.c b/test/core/end2end/tests/simple_cacheable_request.c
index b52eb19..29ba41b 100644
--- a/test/core/end2end/tests/simple_cacheable_request.c
+++ b/test/core/end2end/tests/simple_cacheable_request.c
@@ -55,7 +55,7 @@
   gpr_log(GPR_INFO, "%s/%s", test_name, config.name);
   f = config.create_fixture(client_args, server_args);
   config.init_server(&f, server_args);
-  config.init_client(&f, client_args);
+  config.init_client(&f, client_args, NULL);
   return f;
 }
 
diff --git a/test/core/end2end/tests/simple_delayed_request.c b/test/core/end2end/tests/simple_delayed_request.c
index 50d1975..9d7d3a6 100644
--- a/test/core/end2end/tests/simple_delayed_request.c
+++ b/test/core/end2end/tests/simple_delayed_request.c
@@ -104,7 +104,7 @@
   size_t details_capacity = 0;
   int was_cancelled = 2;
 
-  config.init_client(f, client_args);
+  config.init_client(f, client_args, NULL);
 
   c = grpc_channel_create_call(f->client, NULL, GRPC_PROPAGATE_DEFAULTS, f->cq,
                                "/foo", "foo.test.google.fr", deadline, NULL);
diff --git a/test/core/end2end/tests/simple_metadata.c b/test/core/end2end/tests/simple_metadata.c
index 13c77c0..304af9c 100644
--- a/test/core/end2end/tests/simple_metadata.c
+++ b/test/core/end2end/tests/simple_metadata.c
@@ -53,7 +53,7 @@
   gpr_log(GPR_INFO, "%s/%s", test_name, config.name);
   f = config.create_fixture(client_args, server_args);
   config.init_server(&f, server_args);
-  config.init_client(&f, client_args);
+  config.init_client(&f, client_args, NULL);
   return f;
 }
 
diff --git a/test/core/end2end/tests/simple_request.c b/test/core/end2end/tests/simple_request.c
index ed7b850..65a3710 100644
--- a/test/core/end2end/tests/simple_request.c
+++ b/test/core/end2end/tests/simple_request.c
@@ -55,7 +55,7 @@
   gpr_log(GPR_INFO, "%s/%s", test_name, config.name);
   f = config.create_fixture(client_args, server_args);
   config.init_server(&f, server_args);
-  config.init_client(&f, client_args);
+  config.init_client(&f, client_args, NULL);
   return f;
 }
 
diff --git a/test/core/end2end/tests/streaming_error_response.c b/test/core/end2end/tests/streaming_error_response.c
index 8285468..fe63c6f 100644
--- a/test/core/end2end/tests/streaming_error_response.c
+++ b/test/core/end2end/tests/streaming_error_response.c
@@ -55,7 +55,7 @@
           request_status_early ? "true" : "false");
   f = config.create_fixture(client_args, server_args);
   config.init_server(&f, server_args);
-  config.init_client(&f, client_args);
+  config.init_client(&f, client_args, NULL);
   return f;
 }
 
diff --git a/test/core/end2end/tests/trailing_metadata.c b/test/core/end2end/tests/trailing_metadata.c
index d7093ae..e6bfc7c 100644
--- a/test/core/end2end/tests/trailing_metadata.c
+++ b/test/core/end2end/tests/trailing_metadata.c
@@ -53,7 +53,7 @@
   gpr_log(GPR_INFO, "%s/%s", test_name, config.name);
   f = config.create_fixture(client_args, server_args);
   config.init_server(&f, server_args);
-  config.init_client(&f, client_args);
+  config.init_client(&f, client_args, NULL);
   return f;
 }
 
diff --git a/test/core/iomgr/combiner_test.c b/test/core/iomgr/combiner_test.c
index 197998c..f7d5809 100644
--- a/test/core/iomgr/combiner_test.c
+++ b/test/core/iomgr/combiner_test.c
@@ -61,7 +61,7 @@
   grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
   grpc_combiner_execute(&exec_ctx, lock,
                         grpc_closure_create(set_bool_to_true, &done),
-                        GRPC_ERROR_NONE);
+                        GRPC_ERROR_NONE, false);
   grpc_exec_ctx_flush(&exec_ctx);
   GPR_ASSERT(done);
   grpc_combiner_destroy(&exec_ctx, lock);
@@ -95,7 +95,8 @@
       c->ctr = &args->ctr;
       c->value = n++;
       grpc_combiner_execute(&exec_ctx, args->lock,
-                            grpc_closure_create(check_one, c), GRPC_ERROR_NONE);
+                            grpc_closure_create(check_one, c), GRPC_ERROR_NONE,
+                            false);
       grpc_exec_ctx_flush(&exec_ctx);
     }
     // sleep for a little bit, to test a combiner draining and another thread
@@ -144,7 +145,7 @@
   grpc_combiner *lock = grpc_combiner_create(NULL);
   grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
   grpc_combiner_execute(&exec_ctx, lock, grpc_closure_create(add_finally, lock),
-                        GRPC_ERROR_NONE);
+                        GRPC_ERROR_NONE, false);
   grpc_exec_ctx_flush(&exec_ctx);
   GPR_ASSERT(got_in_finally);
   grpc_combiner_destroy(&exec_ctx, lock);
diff --git a/test/core/iomgr/ev_epoll_linux_test.c b/test/core/iomgr/ev_epoll_linux_test.c
index 2547dc9..564b05d 100644
--- a/test/core/iomgr/ev_epoll_linux_test.c
+++ b/test/core/iomgr/ev_epoll_linux_test.c
@@ -30,10 +30,10 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  *
  */
-#include <grpc/support/port_platform.h>
+#include "src/core/lib/iomgr/port.h"
 
 /* This test only relevant on linux systems where epoll() is available */
-#ifdef GPR_LINUX_EPOLL
+#ifdef GRPC_LINUX_EPOLL
 #include "src/core/lib/iomgr/ev_epoll_linux.h"
 #include "src/core/lib/iomgr/ev_posix.h"
 
@@ -239,6 +239,6 @@
   grpc_iomgr_shutdown();
   return 0;
 }
-#else /* defined(GPR_LINUX_EPOLL) */
+#else /* defined(GRPC_LINUX_EPOLL) */
 int main(int argc, char **argv) { return 0; }
-#endif /* !defined(GPR_LINUX_EPOLL) */
+#endif /* !defined(GRPC_LINUX_EPOLL) */
diff --git a/test/core/iomgr/fd_posix_test.c b/test/core/iomgr/fd_posix_test.c
index 62dc24d..6166699 100644
--- a/test/core/iomgr/fd_posix_test.c
+++ b/test/core/iomgr/fd_posix_test.c
@@ -31,6 +31,11 @@
  *
  */
 
+#include "src/core/lib/iomgr/port.h"
+
+// This test won't work except with posix sockets enabled
+#ifdef GRPC_POSIX_SOCKET
+
 #include "src/core/lib/iomgr/ev_posix.h"
 
 #include <ctype.h>
@@ -548,3 +553,9 @@
   grpc_iomgr_shutdown();
   return 0;
 }
+
+#else /* GRPC_POSIX_SOCKET */
+
+int main(int argc, char **argv) { return 1; }
+
+#endif /* GRPC_POSIX_SOCKET */
diff --git a/test/core/iomgr/resolve_address_test.c b/test/core/iomgr/resolve_address_test.c
index 4417d96..2dd0d88 100644
--- a/test/core/iomgr/resolve_address_test.c
+++ b/test/core/iomgr/resolve_address_test.c
@@ -36,6 +36,7 @@
 #include <grpc/support/sync.h>
 #include <grpc/support/time.h>
 #include "src/core/lib/iomgr/executor.h"
+#include "src/core/lib/iomgr/iomgr.h"
 #include "test/core/util/test_config.h"
 
 static gpr_timespec test_deadline(void) {
diff --git a/test/core/iomgr/sockaddr_utils_test.c b/test/core/iomgr/sockaddr_utils_test.c
index a330314..8569c69 100644
--- a/test/core/iomgr/sockaddr_utils_test.c
+++ b/test/core/iomgr/sockaddr_utils_test.c
@@ -31,6 +31,11 @@
  *
  */
 
+/* With the addition of a libuv endpoint, sockaddr.h now includes uv.h when
+   using that endpoint. Because of various transitive includes in uv.h,
+   including windows.h on Windows, uv.h must be included before other system
+   headers. Therefore, sockaddr.h must always be included first */
+#include "src/core/lib/iomgr/sockaddr.h"
 #include "src/core/lib/iomgr/sockaddr_utils.h"
 
 #include <errno.h>
@@ -41,24 +46,28 @@
 #include <grpc/support/port_platform.h>
 #include "test/core/util/test_config.h"
 
-static struct sockaddr_in make_addr4(const uint8_t *data, size_t data_len) {
-  struct sockaddr_in addr4;
-  memset(&addr4, 0, sizeof(addr4));
-  addr4.sin_family = AF_INET;
-  GPR_ASSERT(data_len == sizeof(addr4.sin_addr.s_addr));
-  memcpy(&addr4.sin_addr.s_addr, data, data_len);
-  addr4.sin_port = htons(12345);
-  return addr4;
+static grpc_resolved_address make_addr4(const uint8_t *data, size_t data_len) {
+  grpc_resolved_address resolved_addr4;
+  struct sockaddr_in *addr4 = (struct sockaddr_in *)resolved_addr4.addr;
+  memset(&resolved_addr4, 0, sizeof(resolved_addr4));
+  addr4->sin_family = AF_INET;
+  GPR_ASSERT(data_len == sizeof(addr4->sin_addr.s_addr));
+  memcpy(&addr4->sin_addr.s_addr, data, data_len);
+  addr4->sin_port = htons(12345);
+  resolved_addr4.len = sizeof(struct sockaddr_in);
+  return resolved_addr4;
 }
 
-static struct sockaddr_in6 make_addr6(const uint8_t *data, size_t data_len) {
-  struct sockaddr_in6 addr6;
-  memset(&addr6, 0, sizeof(addr6));
-  addr6.sin6_family = AF_INET6;
-  GPR_ASSERT(data_len == sizeof(addr6.sin6_addr.s6_addr));
-  memcpy(&addr6.sin6_addr.s6_addr, data, data_len);
-  addr6.sin6_port = htons(12345);
-  return addr6;
+static grpc_resolved_address make_addr6(const uint8_t *data, size_t data_len) {
+  grpc_resolved_address resolved_addr6;
+  struct sockaddr_in6 *addr6 = (struct sockaddr_in6 *)resolved_addr6.addr;
+  memset(&resolved_addr6, 0, sizeof(resolved_addr6));
+  addr6->sin6_family = AF_INET6;
+  GPR_ASSERT(data_len == sizeof(addr6->sin6_addr.s6_addr));
+  memcpy(&addr6->sin6_addr.s6_addr, data, data_len);
+  addr6->sin6_port = htons(12345);
+  resolved_addr6.len = sizeof(struct sockaddr_in6);
+  return resolved_addr6;
 }
 
 static const uint8_t kMapped[] = {0, 0, 0,    0,    0,   0, 0, 0,
@@ -72,102 +81,96 @@
                                 0,    0,    0,    0,    0, 0, 0, 1};
 
 static void test_sockaddr_is_v4mapped(void) {
-  struct sockaddr_in input4;
-  struct sockaddr_in6 input6;
-  struct sockaddr_in output4;
-  struct sockaddr_in expect4;
+  grpc_resolved_address input4;
+  grpc_resolved_address input6;
+  grpc_resolved_address output4;
+  grpc_resolved_address expect4;
 
   gpr_log(GPR_INFO, "%s", "test_sockaddr_is_v4mapped");
 
   /* v4mapped input should succeed. */
   input6 = make_addr6(kMapped, sizeof(kMapped));
-  GPR_ASSERT(grpc_sockaddr_is_v4mapped((const struct sockaddr *)&input6, NULL));
-  GPR_ASSERT(
-      grpc_sockaddr_is_v4mapped((const struct sockaddr *)&input6, &output4));
+  GPR_ASSERT(grpc_sockaddr_is_v4mapped(&input6, NULL));
+  GPR_ASSERT(grpc_sockaddr_is_v4mapped(&input6, &output4));
   expect4 = make_addr4(kIPv4, sizeof(kIPv4));
   GPR_ASSERT(memcmp(&expect4, &output4, sizeof(expect4)) == 0);
 
   /* Non-v4mapped input should fail. */
   input6 = make_addr6(kNotQuiteMapped, sizeof(kNotQuiteMapped));
-  GPR_ASSERT(
-      !grpc_sockaddr_is_v4mapped((const struct sockaddr *)&input6, NULL));
-  GPR_ASSERT(
-      !grpc_sockaddr_is_v4mapped((const struct sockaddr *)&input6, &output4));
+  GPR_ASSERT(!grpc_sockaddr_is_v4mapped(&input6, NULL));
+  GPR_ASSERT(!grpc_sockaddr_is_v4mapped(&input6, &output4));
   /* Output is unchanged. */
   GPR_ASSERT(memcmp(&expect4, &output4, sizeof(expect4)) == 0);
 
   /* Plain IPv4 input should also fail. */
   input4 = make_addr4(kIPv4, sizeof(kIPv4));
-  GPR_ASSERT(
-      !grpc_sockaddr_is_v4mapped((const struct sockaddr *)&input4, NULL));
+  GPR_ASSERT(!grpc_sockaddr_is_v4mapped(&input4, NULL));
 }
 
 static void test_sockaddr_to_v4mapped(void) {
-  struct sockaddr_in input4;
-  struct sockaddr_in6 input6;
-  struct sockaddr_in6 output6;
-  struct sockaddr_in6 expect6;
+  grpc_resolved_address input4;
+  grpc_resolved_address input6;
+  grpc_resolved_address output6;
+  grpc_resolved_address expect6;
 
   gpr_log(GPR_INFO, "%s", "test_sockaddr_to_v4mapped");
 
   /* IPv4 input should succeed. */
   input4 = make_addr4(kIPv4, sizeof(kIPv4));
-  GPR_ASSERT(
-      grpc_sockaddr_to_v4mapped((const struct sockaddr *)&input4, &output6));
+  GPR_ASSERT(grpc_sockaddr_to_v4mapped(&input4, &output6));
   expect6 = make_addr6(kMapped, sizeof(kMapped));
   GPR_ASSERT(memcmp(&expect6, &output6, sizeof(output6)) == 0);
 
   /* IPv6 input should fail. */
   input6 = make_addr6(kIPv6, sizeof(kIPv6));
-  GPR_ASSERT(
-      !grpc_sockaddr_to_v4mapped((const struct sockaddr *)&input6, &output6));
+  GPR_ASSERT(!grpc_sockaddr_to_v4mapped(&input6, &output6));
   /* Output is unchanged. */
   GPR_ASSERT(memcmp(&expect6, &output6, sizeof(output6)) == 0);
 
   /* Already-v4mapped input should also fail. */
   input6 = make_addr6(kMapped, sizeof(kMapped));
-  GPR_ASSERT(
-      !grpc_sockaddr_to_v4mapped((const struct sockaddr *)&input6, &output6));
+  GPR_ASSERT(!grpc_sockaddr_to_v4mapped(&input6, &output6));
 }
 
 static void test_sockaddr_is_wildcard(void) {
-  struct sockaddr_in wild4;
-  struct sockaddr_in6 wild6;
-  struct sockaddr_in6 wild_mapped;
-  struct sockaddr dummy;
+  grpc_resolved_address wild4;
+  grpc_resolved_address wild6;
+  grpc_resolved_address wild_mapped;
+  grpc_resolved_address dummy;
+  struct sockaddr_in *wild4_addr;
+  struct sockaddr_in6 *wild6_addr;
+  struct sockaddr_in6 *wild_mapped_addr;
   int port;
 
   gpr_log(GPR_INFO, "%s", "test_sockaddr_is_wildcard");
 
   /* Generate wildcards. */
   grpc_sockaddr_make_wildcards(555, &wild4, &wild6);
-  GPR_ASSERT(
-      grpc_sockaddr_to_v4mapped((const struct sockaddr *)&wild4, &wild_mapped));
+  GPR_ASSERT(grpc_sockaddr_to_v4mapped(&wild4, &wild_mapped));
 
   /* Test 0.0.0.0:555 */
   port = -1;
-  GPR_ASSERT(grpc_sockaddr_is_wildcard((const struct sockaddr *)&wild4, &port));
+  GPR_ASSERT(grpc_sockaddr_is_wildcard(&wild4, &port));
   GPR_ASSERT(port == 555);
-  memset(&wild4.sin_addr.s_addr, 0xbd, 1);
-  GPR_ASSERT(
-      !grpc_sockaddr_is_wildcard((const struct sockaddr *)&wild4, &port));
+  wild4_addr = (struct sockaddr_in *)&wild4.addr;
+  memset(&wild4_addr->sin_addr.s_addr, 0xbd, 1);
+  GPR_ASSERT(!grpc_sockaddr_is_wildcard(&wild4, &port));
 
   /* Test [::]:555 */
   port = -1;
-  GPR_ASSERT(grpc_sockaddr_is_wildcard((const struct sockaddr *)&wild6, &port));
+  GPR_ASSERT(grpc_sockaddr_is_wildcard(&wild6, &port));
   GPR_ASSERT(port == 555);
-  memset(&wild6.sin6_addr.s6_addr, 0xbd, 1);
-  GPR_ASSERT(
-      !grpc_sockaddr_is_wildcard((const struct sockaddr *)&wild6, &port));
+  wild6_addr = (struct sockaddr_in6 *)&wild6.addr;
+  memset(&wild6_addr->sin6_addr.s6_addr, 0xbd, 1);
+  GPR_ASSERT(!grpc_sockaddr_is_wildcard(&wild6, &port));
 
   /* Test [::ffff:0.0.0.0]:555 */
   port = -1;
-  GPR_ASSERT(
-      grpc_sockaddr_is_wildcard((const struct sockaddr *)&wild_mapped, &port));
+  GPR_ASSERT(grpc_sockaddr_is_wildcard(&wild_mapped, &port));
   GPR_ASSERT(port == 555);
-  memset(&wild_mapped.sin6_addr.s6_addr, 0xbd, 1);
-  GPR_ASSERT(
-      !grpc_sockaddr_is_wildcard((const struct sockaddr *)&wild_mapped, &port));
+  wild_mapped_addr = (struct sockaddr_in6 *)&wild_mapped.addr;
+  memset(&wild_mapped_addr->sin6_addr.s6_addr, 0xbd, 1);
+  GPR_ASSERT(!grpc_sockaddr_is_wildcard(&wild_mapped, &port));
 
   /* Test AF_UNSPEC. */
   port = -1;
@@ -176,12 +179,12 @@
   GPR_ASSERT(port == -1);
 }
 
-static void expect_sockaddr_str(const char *expected, void *addr,
-                                int normalize) {
+static void expect_sockaddr_str(const char *expected,
+                                grpc_resolved_address *addr, int normalize) {
   int result;
   char *str;
   gpr_log(GPR_INFO, "  expect_sockaddr_str(%s)", expected);
-  result = grpc_sockaddr_to_string(&str, (struct sockaddr *)addr, normalize);
+  result = grpc_sockaddr_to_string(&str, addr, normalize);
   GPR_ASSERT(str != NULL);
   GPR_ASSERT(result >= 0);
   GPR_ASSERT((size_t)result == strlen(str));
@@ -189,19 +192,21 @@
   gpr_free(str);
 }
 
-static void expect_sockaddr_uri(const char *expected, void *addr) {
+static void expect_sockaddr_uri(const char *expected,
+                                grpc_resolved_address *addr) {
   char *str;
   gpr_log(GPR_INFO, "  expect_sockaddr_uri(%s)", expected);
-  str = grpc_sockaddr_to_uri((struct sockaddr *)addr);
+  str = grpc_sockaddr_to_uri(addr);
   GPR_ASSERT(str != NULL);
   GPR_ASSERT(strcmp(expected, str) == 0);
   gpr_free(str);
 }
 
 static void test_sockaddr_to_string(void) {
-  struct sockaddr_in input4;
-  struct sockaddr_in6 input6;
-  struct sockaddr dummy;
+  grpc_resolved_address input4;
+  grpc_resolved_address input6;
+  grpc_resolved_address dummy;
+  struct sockaddr *dummy_addr;
 
   gpr_log(GPR_INFO, "%s", "test_sockaddr_to_string");
 
@@ -228,7 +233,8 @@
   expect_sockaddr_uri("ipv6:[::fffe:c000:263]:12345", &input6);
 
   memset(&dummy, 0, sizeof(dummy));
-  dummy.sa_family = 123;
+  dummy_addr = (struct sockaddr *)dummy.addr;
+  dummy_addr->sa_family = 123;
   expect_sockaddr_str("(sockaddr family=123)", &dummy, 0);
   expect_sockaddr_str("(sockaddr family=123)", &dummy, 1);
   GPR_ASSERT(grpc_sockaddr_to_uri(&dummy) == NULL);
@@ -237,24 +243,26 @@
 }
 
 static void test_sockaddr_set_get_port(void) {
-  struct sockaddr_in input4;
-  struct sockaddr_in6 input6;
-  struct sockaddr dummy;
+  grpc_resolved_address input4;
+  grpc_resolved_address input6;
+  grpc_resolved_address dummy;
+  struct sockaddr *dummy_addr;
 
   gpr_log(GPR_DEBUG, "test_sockaddr_set_get_port");
 
   input4 = make_addr4(kIPv4, sizeof(kIPv4));
-  GPR_ASSERT(grpc_sockaddr_get_port((struct sockaddr *)&input4) == 12345);
-  GPR_ASSERT(grpc_sockaddr_set_port((struct sockaddr *)&input4, 54321));
-  GPR_ASSERT(grpc_sockaddr_get_port((struct sockaddr *)&input4) == 54321);
+  GPR_ASSERT(grpc_sockaddr_get_port(&input4) == 12345);
+  GPR_ASSERT(grpc_sockaddr_set_port(&input4, 54321));
+  GPR_ASSERT(grpc_sockaddr_get_port(&input4) == 54321);
 
   input6 = make_addr6(kIPv6, sizeof(kIPv6));
-  GPR_ASSERT(grpc_sockaddr_get_port((struct sockaddr *)&input6) == 12345);
-  GPR_ASSERT(grpc_sockaddr_set_port((struct sockaddr *)&input6, 54321));
-  GPR_ASSERT(grpc_sockaddr_get_port((struct sockaddr *)&input6) == 54321);
+  GPR_ASSERT(grpc_sockaddr_get_port(&input6) == 12345);
+  GPR_ASSERT(grpc_sockaddr_set_port(&input6, 54321));
+  GPR_ASSERT(grpc_sockaddr_get_port(&input6) == 54321);
 
   memset(&dummy, 0, sizeof(dummy));
-  dummy.sa_family = 123;
+  dummy_addr = (struct sockaddr *)dummy.addr;
+  dummy_addr->sa_family = 123;
   GPR_ASSERT(grpc_sockaddr_get_port(&dummy) == 0);
   GPR_ASSERT(grpc_sockaddr_set_port(&dummy, 1234) == 0);
 }
diff --git a/test/core/iomgr/socket_utils_test.c b/test/core/iomgr/socket_utils_test.c
index 297531c..67bc914 100644
--- a/test/core/iomgr/socket_utils_test.c
+++ b/test/core/iomgr/socket_utils_test.c
@@ -31,7 +31,11 @@
  *
  */
 
-#include <grpc/support/port_platform.h>
+#include "src/core/lib/iomgr/port.h"
+
+// This test won't work except with posix sockets enabled
+#ifdef GRPC_POSIX_SOCKET
+
 #include "src/core/lib/iomgr/socket_utils_posix.h"
 
 #include <errno.h>
@@ -68,3 +72,9 @@
 
   return 0;
 }
+
+#else /* GRPC_POSIX_SOCKET */
+
+int main(int argc, char **argv) { return 1; }
+
+#endif /* GRPC_POSIX_SOCKET */
diff --git a/test/core/iomgr/tcp_client_posix_test.c b/test/core/iomgr/tcp_client_posix_test.c
index d0c1047..6c6962e 100644
--- a/test/core/iomgr/tcp_client_posix_test.c
+++ b/test/core/iomgr/tcp_client_posix_test.c
@@ -85,8 +85,8 @@
 }
 
 void test_succeeds(void) {
-  struct sockaddr_in addr;
-  socklen_t addr_len = sizeof(addr);
+  grpc_resolved_address resolved_addr;
+  struct sockaddr_in *addr = (struct sockaddr_in *)resolved_addr.addr;
   int svr_fd;
   int r;
   int connections_complete_before;
@@ -95,13 +95,15 @@
 
   gpr_log(GPR_DEBUG, "test_succeeds");
 
-  memset(&addr, 0, sizeof(addr));
-  addr.sin_family = AF_INET;
+  memset(&resolved_addr, 0, sizeof(resolved_addr));
+  resolved_addr.len = sizeof(struct sockaddr_in);
+  addr->sin_family = AF_INET;
 
   /* create a dummy server */
   svr_fd = socket(AF_INET, SOCK_STREAM, 0);
   GPR_ASSERT(svr_fd >= 0);
-  GPR_ASSERT(0 == bind(svr_fd, (struct sockaddr *)&addr, addr_len));
+  GPR_ASSERT(
+      0 == bind(svr_fd, (struct sockaddr *)addr, (socklen_t)resolved_addr.len));
   GPR_ASSERT(0 == listen(svr_fd, 1));
 
   gpr_mu_lock(g_mu);
@@ -109,16 +111,17 @@
   gpr_mu_unlock(g_mu);
 
   /* connect to it */
-  GPR_ASSERT(getsockname(svr_fd, (struct sockaddr *)&addr, &addr_len) == 0);
+  GPR_ASSERT(getsockname(svr_fd, (struct sockaddr *)addr,
+                         (socklen_t *)&resolved_addr.len) == 0);
   grpc_closure_init(&done, must_succeed, NULL);
   grpc_tcp_client_connect(&exec_ctx, &done, &g_connecting, g_pollset_set,
-                          (struct sockaddr *)&addr, addr_len,
-                          gpr_inf_future(GPR_CLOCK_REALTIME));
+                          &resolved_addr, gpr_inf_future(GPR_CLOCK_REALTIME));
 
   /* await the connection */
   do {
-    addr_len = sizeof(addr);
-    r = accept(svr_fd, (struct sockaddr *)&addr, &addr_len);
+    resolved_addr.len = sizeof(addr);
+    r = accept(svr_fd, (struct sockaddr *)addr,
+               (socklen_t *)&resolved_addr.len);
   } while (r == -1 && errno == EINTR);
   GPR_ASSERT(r >= 0);
   close(r);
@@ -143,16 +146,17 @@
 }
 
 void test_fails(void) {
-  struct sockaddr_in addr;
-  socklen_t addr_len = sizeof(addr);
+  grpc_resolved_address resolved_addr;
+  struct sockaddr_in *addr = (struct sockaddr_in *)resolved_addr.addr;
   int connections_complete_before;
   grpc_closure done;
   grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
 
   gpr_log(GPR_DEBUG, "test_fails");
 
-  memset(&addr, 0, sizeof(addr));
-  addr.sin_family = AF_INET;
+  memset(&resolved_addr, 0, sizeof(resolved_addr));
+  resolved_addr.len = sizeof(struct sockaddr_in);
+  addr->sin_family = AF_INET;
 
   gpr_mu_lock(g_mu);
   connections_complete_before = g_connections_complete;
@@ -161,8 +165,7 @@
   /* connect to a broken address */
   grpc_closure_init(&done, must_fail, NULL);
   grpc_tcp_client_connect(&exec_ctx, &done, &g_connecting, g_pollset_set,
-                          (struct sockaddr *)&addr, addr_len,
-                          gpr_inf_future(GPR_CLOCK_REALTIME));
+                          &resolved_addr, gpr_inf_future(GPR_CLOCK_REALTIME));
 
   gpr_mu_lock(g_mu);
 
diff --git a/test/core/iomgr/tcp_posix_test.c b/test/core/iomgr/tcp_posix_test.c
index 4261456..d998958 100644
--- a/test/core/iomgr/tcp_posix_test.c
+++ b/test/core/iomgr/tcp_posix_test.c
@@ -31,6 +31,11 @@
  *
  */
 
+#include "src/core/lib/iomgr/port.h"
+
+// This test won't work except with posix sockets enabled
+#ifdef GRPC_POSIX_SOCKET
+
 #include "src/core/lib/iomgr/tcp_posix.h"
 
 #include <errno.h>
@@ -544,3 +549,9 @@
 
   return 0;
 }
+
+#else /* GRPC_POSIX_SOCKET */
+
+int main(int argc, char **argv) { return 1; }
+
+#endif /* GRPC_POSIX_SOCKET */
diff --git a/test/core/iomgr/tcp_server_posix_test.c b/test/core/iomgr/tcp_server_posix_test.c
index 6b1dd42..f839911 100644
--- a/test/core/iomgr/tcp_server_posix_test.c
+++ b/test/core/iomgr/tcp_server_posix_test.c
@@ -31,6 +31,11 @@
  *
  */
 
+#include "src/core/lib/iomgr/port.h"
+
+// This test won't work except with posix sockets enabled
+#ifdef GRPC_POSIX_SOCKET
+
 #include "src/core/lib/iomgr/tcp_server.h"
 
 #include <errno.h>
@@ -46,6 +51,7 @@
 #include <grpc/support/time.h>
 
 #include "src/core/lib/iomgr/iomgr.h"
+#include "src/core/lib/iomgr/resolve_address.h"
 #include "src/core/lib/iomgr/sockaddr_utils.h"
 #include "test/core/util/port.h"
 #include "test/core/util/test_config.h"
@@ -118,8 +124,11 @@
   grpc_endpoint_shutdown(exec_ctx, tcp);
   grpc_endpoint_destroy(exec_ctx, tcp);
 
+  on_connect_result temp_result;
+  on_connect_result_set(&temp_result, acceptor);
+
   gpr_mu_lock(g_mu);
-  on_connect_result_set(&g_result, acceptor);
+  g_result = temp_result;
   g_nconnects++;
   GPR_ASSERT(
       GRPC_LOG_IF_ERROR("pollset_kick", grpc_pollset_kick(g_pollset, NULL)));
@@ -146,16 +155,18 @@
 
 static void test_no_op_with_port(void) {
   grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
-  struct sockaddr_in addr;
+  grpc_resolved_address resolved_addr;
+  struct sockaddr_in *addr = (struct sockaddr_in *)resolved_addr.addr;
   grpc_tcp_server *s;
   GPR_ASSERT(GRPC_ERROR_NONE == grpc_tcp_server_create(NULL, NULL, &s));
   LOG_TEST("test_no_op_with_port");
 
-  memset(&addr, 0, sizeof(addr));
-  addr.sin_family = AF_INET;
+  memset(&resolved_addr, 0, sizeof(resolved_addr));
+  resolved_addr.len = sizeof(struct sockaddr_in);
+  addr->sin_family = AF_INET;
   int port;
-  GPR_ASSERT(grpc_tcp_server_add_port(s, (struct sockaddr *)&addr, sizeof(addr),
-                                      &port) == GRPC_ERROR_NONE &&
+  GPR_ASSERT(grpc_tcp_server_add_port(s, &resolved_addr, &port) ==
+                 GRPC_ERROR_NONE &&
              port > 0);
 
   grpc_tcp_server_unref(&exec_ctx, s);
@@ -164,16 +175,18 @@
 
 static void test_no_op_with_port_and_start(void) {
   grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
-  struct sockaddr_in addr;
+  grpc_resolved_address resolved_addr;
+  struct sockaddr_in *addr = (struct sockaddr_in *)resolved_addr.addr;
   grpc_tcp_server *s;
   GPR_ASSERT(GRPC_ERROR_NONE == grpc_tcp_server_create(NULL, NULL, &s));
   LOG_TEST("test_no_op_with_port_and_start");
   int port;
 
-  memset(&addr, 0, sizeof(addr));
-  addr.sin_family = AF_INET;
-  GPR_ASSERT(grpc_tcp_server_add_port(s, (struct sockaddr *)&addr, sizeof(addr),
-                                      &port) == GRPC_ERROR_NONE &&
+  memset(&resolved_addr, 0, sizeof(resolved_addr));
+  resolved_addr.len = sizeof(struct sockaddr_in);
+  addr->sin_family = AF_INET;
+  GPR_ASSERT(grpc_tcp_server_add_port(s, &resolved_addr, &port) ==
+                 GRPC_ERROR_NONE &&
              port > 0);
 
   grpc_tcp_server_start(&exec_ctx, s, NULL, 0, on_connect, NULL);
@@ -218,9 +231,11 @@
    the same port should be tested. */
 static void test_connect(unsigned n) {
   grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
-  struct sockaddr_storage addr;
-  struct sockaddr_storage addr1;
-  socklen_t addr_len = sizeof(addr);
+  grpc_resolved_address resolved_addr;
+  grpc_resolved_address resolved_addr1;
+  struct sockaddr_storage *addr = (struct sockaddr_storage *)resolved_addr.addr;
+  struct sockaddr_storage *addr1 =
+      (struct sockaddr_storage *)resolved_addr1.addr;
   unsigned svr_fd_count;
   int svr_port;
   unsigned svr1_fd_count;
@@ -232,19 +247,20 @@
   server_weak_ref_init(&weak_ref);
   LOG_TEST("test_connect");
   gpr_log(GPR_INFO, "clients=%d", n);
-  memset(&addr, 0, sizeof(addr));
-  memset(&addr1, 0, sizeof(addr1));
-  addr.ss_family = addr1.ss_family = AF_INET;
+  memset(&resolved_addr, 0, sizeof(resolved_addr));
+  memset(&resolved_addr1, 0, sizeof(resolved_addr1));
+  resolved_addr.len = sizeof(struct sockaddr_storage);
+  resolved_addr1.len = sizeof(struct sockaddr_storage);
+  addr->ss_family = addr1->ss_family = AF_INET;
   GPR_ASSERT(GRPC_ERROR_NONE ==
-             grpc_tcp_server_add_port(s, (struct sockaddr *)&addr, addr_len,
-                                      &svr_port));
+             grpc_tcp_server_add_port(s, &resolved_addr, &svr_port));
   GPR_ASSERT(svr_port > 0);
   /* Cannot use wildcard (port==0), because add_port() will try to reuse the
      same port as a previous add_port(). */
   svr1_port = grpc_pick_unused_port_or_die();
-  grpc_sockaddr_set_port((struct sockaddr *)&addr1, svr1_port);
-  GPR_ASSERT(grpc_tcp_server_add_port(s, (struct sockaddr *)&addr1, addr_len,
-                                      &svr_port) == GRPC_ERROR_NONE &&
+  grpc_sockaddr_set_port(&resolved_addr1, svr1_port);
+  GPR_ASSERT(grpc_tcp_server_add_port(s, &resolved_addr1, &svr_port) ==
+                 GRPC_ERROR_NONE &&
              svr_port == svr1_port);
 
   /* Bad port_index. */
@@ -265,16 +281,18 @@
     int fd = grpc_tcp_server_port_fd(s, 0, i);
     GPR_ASSERT(fd >= 0);
     if (i == 0) {
-      GPR_ASSERT(getsockname(fd, (struct sockaddr *)&addr, &addr_len) == 0);
-      GPR_ASSERT(addr_len <= sizeof(addr));
+      GPR_ASSERT(getsockname(fd, (struct sockaddr *)addr,
+                             (socklen_t *)&resolved_addr.len) == 0);
+      GPR_ASSERT(resolved_addr.len <= sizeof(*addr));
     }
   }
   for (i = 0; i < svr1_fd_count; ++i) {
     int fd = grpc_tcp_server_port_fd(s, 1, i);
     GPR_ASSERT(fd >= 0);
     if (i == 0) {
-      GPR_ASSERT(getsockname(fd, (struct sockaddr *)&addr1, &addr_len) == 0);
-      GPR_ASSERT(addr_len <= sizeof(addr1));
+      GPR_ASSERT(getsockname(fd, (struct sockaddr *)addr1,
+                             (socklen_t *)&resolved_addr1.len) == 0);
+      GPR_ASSERT(resolved_addr1.len <= sizeof(*addr1));
     }
   }
 
@@ -284,7 +302,8 @@
     on_connect_result result;
     int svr_fd;
     on_connect_result_init(&result);
-    tcp_connect(&exec_ctx, (struct sockaddr *)&addr, addr_len, &result);
+    tcp_connect(&exec_ctx, (struct sockaddr *)addr,
+                (socklen_t)resolved_addr.len, &result);
     GPR_ASSERT(result.server_fd >= 0);
     svr_fd = result.server_fd;
     GPR_ASSERT(grpc_tcp_server_port_fd(s, result.port_index, result.fd_index) ==
@@ -298,7 +317,8 @@
     grpc_tcp_server_unref(&exec_ctx, result.server);
 
     on_connect_result_init(&result);
-    tcp_connect(&exec_ctx, (struct sockaddr *)&addr1, addr_len, &result);
+    tcp_connect(&exec_ctx, (struct sockaddr *)addr1,
+                (socklen_t)resolved_addr1.len, &result);
     GPR_ASSERT(result.server_fd >= 0);
     GPR_ASSERT(result.server_fd != svr_fd);
     GPR_ASSERT(grpc_tcp_server_port_fd(s, result.port_index, result.fd_index) ==
@@ -347,3 +367,9 @@
   gpr_free(g_pollset);
   return 0;
 }
+
+#else /* GRPC_POSIX_SOCKET */
+
+int main(int argc, char **argv) { return 1; }
+
+#endif /* GRPC_POSIX_SOCKET */
diff --git a/test/core/iomgr/timer_heap_test.c b/test/core/iomgr/timer_heap_test.c
index d1cb004..410d972 100644
--- a/test/core/iomgr/timer_heap_test.c
+++ b/test/core/iomgr/timer_heap_test.c
@@ -31,6 +31,11 @@
  *
  */
 
+#include "src/core/lib/iomgr/port.h"
+
+// This test only works with the generic timer implementation
+#ifdef GRPC_TIMER_USE_GENERIC
+
 #include "src/core/lib/iomgr/timer_heap.h"
 
 #include <stdlib.h>
@@ -315,3 +320,9 @@
 
   return 0;
 }
+
+#else /* GRPC_TIMER_USE_GENERIC */
+
+int main(int argc, char **argv) { return 1; }
+
+#endif /* GRPC_TIMER_USE_GENERIC */
diff --git a/test/core/iomgr/udp_server_test.c b/test/core/iomgr/udp_server_test.c
index 71d2fb5..d9f9cd7 100644
--- a/test/core/iomgr/udp_server_test.c
+++ b/test/core/iomgr/udp_server_test.c
@@ -31,6 +31,11 @@
  *
  */
 
+#include "src/core/lib/iomgr/port.h"
+
+// This test won't work except with posix sockets enabled
+#ifdef GRPC_POSIX_SOCKET
+
 #include "src/core/lib/iomgr/udp_server.h"
 
 #include <netinet/in.h>
@@ -98,14 +103,16 @@
 static void test_no_op_with_port(void) {
   g_number_of_orphan_calls = 0;
   grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
-  struct sockaddr_in addr;
+  grpc_resolved_address resolved_addr;
+  struct sockaddr_in *addr = (struct sockaddr_in *)resolved_addr.addr;
   grpc_udp_server *s = grpc_udp_server_create();
   LOG_TEST("test_no_op_with_port");
 
-  memset(&addr, 0, sizeof(addr));
-  addr.sin_family = AF_INET;
-  GPR_ASSERT(grpc_udp_server_add_port(s, (struct sockaddr *)&addr, sizeof(addr),
-                                      on_read, on_fd_orphaned));
+  memset(&resolved_addr, 0, sizeof(resolved_addr));
+  resolved_addr.len = sizeof(struct sockaddr_in);
+  addr->sin_family = AF_INET;
+  GPR_ASSERT(
+      grpc_udp_server_add_port(s, &resolved_addr, on_read, on_fd_orphaned));
 
   grpc_udp_server_destroy(&exec_ctx, s, NULL);
   grpc_exec_ctx_finish(&exec_ctx);
@@ -117,14 +124,16 @@
 static void test_no_op_with_port_and_start(void) {
   g_number_of_orphan_calls = 0;
   grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
-  struct sockaddr_in addr;
+  grpc_resolved_address resolved_addr;
+  struct sockaddr_in *addr = (struct sockaddr_in *)resolved_addr.addr;
   grpc_udp_server *s = grpc_udp_server_create();
   LOG_TEST("test_no_op_with_port_and_start");
 
-  memset(&addr, 0, sizeof(addr));
-  addr.sin_family = AF_INET;
-  GPR_ASSERT(grpc_udp_server_add_port(s, (struct sockaddr *)&addr, sizeof(addr),
-                                      on_read, on_fd_orphaned));
+  memset(&resolved_addr, 0, sizeof(resolved_addr));
+  resolved_addr.len = sizeof(struct sockaddr_in);
+  addr->sin_family = AF_INET;
+  GPR_ASSERT(
+      grpc_udp_server_add_port(s, &resolved_addr, on_read, on_fd_orphaned));
 
   grpc_udp_server_start(&exec_ctx, s, NULL, 0, NULL);
 
@@ -138,8 +147,8 @@
 
 static void test_receive(int number_of_clients) {
   grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
-  struct sockaddr_storage addr;
-  socklen_t addr_len = sizeof(addr);
+  grpc_resolved_address resolved_addr;
+  struct sockaddr_storage *addr = (struct sockaddr_storage *)resolved_addr.addr;
   int clifd, svrfd;
   grpc_udp_server *s = grpc_udp_server_create();
   int i;
@@ -152,15 +161,17 @@
   g_number_of_bytes_read = 0;
   g_number_of_orphan_calls = 0;
 
-  memset(&addr, 0, sizeof(addr));
-  addr.ss_family = AF_INET;
-  GPR_ASSERT(grpc_udp_server_add_port(s, (struct sockaddr *)&addr, addr_len,
-                                      on_read, on_fd_orphaned));
+  memset(&resolved_addr, 0, sizeof(resolved_addr));
+  resolved_addr.len = sizeof(struct sockaddr_storage);
+  addr->ss_family = AF_INET;
+  GPR_ASSERT(
+      grpc_udp_server_add_port(s, &resolved_addr, on_read, on_fd_orphaned));
 
   svrfd = grpc_udp_server_get_fd(s, 0);
   GPR_ASSERT(svrfd >= 0);
-  GPR_ASSERT(getsockname(svrfd, (struct sockaddr *)&addr, &addr_len) == 0);
-  GPR_ASSERT(addr_len <= sizeof(addr));
+  GPR_ASSERT(getsockname(svrfd, (struct sockaddr *)addr,
+                         (socklen_t *)&resolved_addr.len) == 0);
+  GPR_ASSERT(resolved_addr.len <= sizeof(struct sockaddr_storage));
 
   pollsets[0] = g_pollset;
   grpc_udp_server_start(&exec_ctx, s, pollsets, 1, NULL);
@@ -172,9 +183,10 @@
 
     number_of_reads_before = g_number_of_reads;
     /* Create a socket, send a packet to the UDP server. */
-    clifd = socket(addr.ss_family, SOCK_DGRAM, 0);
+    clifd = socket(addr->ss_family, SOCK_DGRAM, 0);
     GPR_ASSERT(clifd >= 0);
-    GPR_ASSERT(connect(clifd, (struct sockaddr *)&addr, addr_len) == 0);
+    GPR_ASSERT(connect(clifd, (struct sockaddr *)&addr,
+                       (socklen_t)resolved_addr.len) == 0);
     GPR_ASSERT(5 == write(clifd, "hello", 5));
     while (g_number_of_reads == number_of_reads_before &&
            gpr_time_cmp(deadline, gpr_now(deadline.clock_type)) > 0) {
@@ -229,3 +241,9 @@
   grpc_iomgr_shutdown();
   return 0;
 }
+
+#else /* GRPC_POSIX_SOCKET */
+
+int main(int argc, char **argv) { return 1; }
+
+#endif /* GRPC_POSIX_SOCKET */
diff --git a/test/core/iomgr/wakeup_fd_cv_test.c b/test/core/iomgr/wakeup_fd_cv_test.c
new file mode 100644
index 0000000..82452d2
--- /dev/null
+++ b/test/core/iomgr/wakeup_fd_cv_test.c
@@ -0,0 +1,250 @@
+/*
+ *
+ * Copyright 2016, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ *     * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+#include "src/core/lib/iomgr/port.h"
+
+#ifdef GRPC_POSIX_SOCKET
+
+#include <pthread.h>
+
+#include <grpc/support/log.h>
+#include <grpc/support/thd.h>
+#include <grpc/support/time.h>
+#include <grpc/support/useful.h>
+
+#include "src/core/lib/iomgr/ev_posix.h"
+#include "src/core/lib/iomgr/iomgr_posix.h"
+#include "src/core/lib/support/env.h"
+
+typedef struct poll_args {
+  struct pollfd *fds;
+  nfds_t nfds;
+  int timeout;
+  int result;
+} poll_args;
+
+gpr_cv poll_cv;
+gpr_mu poll_mu;
+static int socket_event = 0;
+
+// Trigger a "socket" POLLIN in mock_poll()
+void trigger_socket_event() {
+  gpr_mu_lock(&poll_mu);
+  socket_event = 1;
+  gpr_cv_broadcast(&poll_cv);
+  gpr_mu_unlock(&poll_mu);
+}
+
+void reset_socket_event() {
+  gpr_mu_lock(&poll_mu);
+  socket_event = 0;
+  gpr_mu_unlock(&poll_mu);
+}
+
+// Mocks posix poll() function
+int mock_poll(struct pollfd *fds, nfds_t nfds, int timeout) {
+  int res = 0;
+  gpr_timespec poll_time;
+  gpr_mu_lock(&poll_mu);
+  GPR_ASSERT(nfds == 3);
+  GPR_ASSERT(fds[0].fd == 20);
+  GPR_ASSERT(fds[1].fd == 30);
+  GPR_ASSERT(fds[2].fd == 50);
+  GPR_ASSERT(fds[0].events == (POLLIN | POLLHUP));
+  GPR_ASSERT(fds[1].events == (POLLIN | POLLHUP));
+  GPR_ASSERT(fds[2].events == POLLIN);
+
+  if (timeout < 0) {
+    poll_time = gpr_inf_future(GPR_CLOCK_REALTIME);
+  } else {
+    poll_time = gpr_time_add(gpr_now(GPR_CLOCK_REALTIME),
+                             gpr_time_from_millis(timeout, GPR_TIMESPAN));
+  }
+
+  if (socket_event || !gpr_cv_wait(&poll_cv, &poll_mu, poll_time)) {
+    fds[0].revents = POLLIN;
+    res = 1;
+  }
+  gpr_mu_unlock(&poll_mu);
+  return res;
+}
+
+void background_poll(void *args) {
+  poll_args *pargs = (poll_args *)args;
+  pargs->result = grpc_poll_function(pargs->fds, pargs->nfds, pargs->timeout);
+}
+
+void test_many_fds(void) {
+  int i;
+  grpc_wakeup_fd fd[1000];
+  for (i = 0; i < 1000; i++) {
+    GPR_ASSERT(grpc_wakeup_fd_init(&fd[i]) == GRPC_ERROR_NONE);
+  }
+  for (i = 0; i < 1000; i++) {
+    grpc_wakeup_fd_destroy(&fd[i]);
+  }
+}
+
+void test_poll_cv_trigger(void) {
+  grpc_wakeup_fd cvfd1, cvfd2, cvfd3;
+  struct pollfd pfds[6];
+  poll_args pargs;
+  gpr_thd_id t_id;
+  gpr_thd_options opt;
+
+  GPR_ASSERT(grpc_wakeup_fd_init(&cvfd1) == GRPC_ERROR_NONE);
+  GPR_ASSERT(grpc_wakeup_fd_init(&cvfd2) == GRPC_ERROR_NONE);
+  GPR_ASSERT(grpc_wakeup_fd_init(&cvfd3) == GRPC_ERROR_NONE);
+  GPR_ASSERT(cvfd1.read_fd < 0);
+  GPR_ASSERT(cvfd2.read_fd < 0);
+  GPR_ASSERT(cvfd3.read_fd < 0);
+  GPR_ASSERT(cvfd1.read_fd != cvfd2.read_fd);
+  GPR_ASSERT(cvfd2.read_fd != cvfd3.read_fd);
+  GPR_ASSERT(cvfd1.read_fd != cvfd3.read_fd);
+
+  pfds[0].fd = cvfd1.read_fd;
+  pfds[1].fd = cvfd2.read_fd;
+  pfds[2].fd = 20;
+  pfds[3].fd = 30;
+  pfds[4].fd = cvfd3.read_fd;
+  pfds[5].fd = 50;
+
+  pfds[0].events = 0;
+  pfds[1].events = POLLIN;
+  pfds[2].events = POLLIN | POLLHUP;
+  pfds[3].events = POLLIN | POLLHUP;
+  pfds[4].events = POLLIN;
+  pfds[5].events = POLLIN;
+
+  pargs.fds = pfds;
+  pargs.nfds = 6;
+  pargs.timeout = 1000;
+  pargs.result = -2;
+
+  opt = gpr_thd_options_default();
+  gpr_thd_options_set_joinable(&opt);
+  gpr_thd_new(&t_id, &background_poll, &pargs, &opt);
+
+  // Wakeup wakeup_fd not listening for events
+  GPR_ASSERT(grpc_wakeup_fd_wakeup(&cvfd1) == GRPC_ERROR_NONE);
+  gpr_thd_join(t_id);
+  GPR_ASSERT(pargs.result == 0);
+  GPR_ASSERT(pfds[0].revents == 0);
+  GPR_ASSERT(pfds[1].revents == 0);
+  GPR_ASSERT(pfds[2].revents == 0);
+  GPR_ASSERT(pfds[3].revents == 0);
+  GPR_ASSERT(pfds[4].revents == 0);
+  GPR_ASSERT(pfds[5].revents == 0);
+
+  // Pollin on socket fd
+  pargs.timeout = -1;
+  pargs.result = -2;
+  gpr_thd_new(&t_id, &background_poll, &pargs, &opt);
+  trigger_socket_event();
+  gpr_thd_join(t_id);
+  GPR_ASSERT(pargs.result == 1);
+  GPR_ASSERT(pfds[0].revents == 0);
+  GPR_ASSERT(pfds[1].revents == 0);
+  GPR_ASSERT(pfds[2].revents == POLLIN);
+  GPR_ASSERT(pfds[3].revents == 0);
+  GPR_ASSERT(pfds[4].revents == 0);
+  GPR_ASSERT(pfds[5].revents == 0);
+
+  // Pollin on wakeup fd
+  reset_socket_event();
+  pargs.result = -2;
+  gpr_thd_new(&t_id, &background_poll, &pargs, &opt);
+  GPR_ASSERT(grpc_wakeup_fd_wakeup(&cvfd2) == GRPC_ERROR_NONE);
+  gpr_thd_join(t_id);
+
+  GPR_ASSERT(pargs.result == 1);
+  GPR_ASSERT(pfds[0].revents == 0);
+  GPR_ASSERT(pfds[1].revents == POLLIN);
+  GPR_ASSERT(pfds[2].revents == 0);
+  GPR_ASSERT(pfds[3].revents == 0);
+  GPR_ASSERT(pfds[4].revents == 0);
+  GPR_ASSERT(pfds[5].revents == 0);
+
+  // Pollin on wakeup fd + socket fd
+  trigger_socket_event();
+  pargs.result = -2;
+  gpr_thd_new(&t_id, &background_poll, &pargs, &opt);
+  gpr_thd_join(t_id);
+
+  GPR_ASSERT(pargs.result == 2);
+  GPR_ASSERT(pfds[0].revents == 0);
+  GPR_ASSERT(pfds[1].revents == POLLIN);
+  GPR_ASSERT(pfds[2].revents == POLLIN);
+  GPR_ASSERT(pfds[3].revents == 0);
+  GPR_ASSERT(pfds[4].revents == 0);
+  GPR_ASSERT(pfds[5].revents == 0);
+
+  // No Events
+  pargs.result = -2;
+  pargs.timeout = 1000;
+  reset_socket_event();
+  GPR_ASSERT(grpc_wakeup_fd_consume_wakeup(&cvfd1) == GRPC_ERROR_NONE);
+  GPR_ASSERT(grpc_wakeup_fd_consume_wakeup(&cvfd2) == GRPC_ERROR_NONE);
+  gpr_thd_new(&t_id, &background_poll, &pargs, &opt);
+  gpr_thd_join(t_id);
+
+  GPR_ASSERT(pargs.result == 0);
+  GPR_ASSERT(pfds[0].revents == 0);
+  GPR_ASSERT(pfds[1].revents == 0);
+  GPR_ASSERT(pfds[2].revents == 0);
+  GPR_ASSERT(pfds[3].revents == 0);
+  GPR_ASSERT(pfds[4].revents == 0);
+  GPR_ASSERT(pfds[5].revents == 0);
+}
+
+int main(int argc, char **argv) {
+  gpr_setenv("GRPC_POLL_STRATEGY", "poll-cv");
+  grpc_poll_function = &mock_poll;
+  gpr_mu_init(&poll_mu);
+  gpr_cv_init(&poll_cv);
+
+  grpc_iomgr_platform_init();
+  test_many_fds();
+  grpc_iomgr_platform_shutdown();
+
+  grpc_iomgr_platform_init();
+  test_poll_cv_trigger();
+  grpc_iomgr_platform_shutdown();
+  return 0;
+}
+
+#else /* GRPC_POSIX_SOCKET */
+
+int main(int argc, char **argv) { return 1; }
+
+#endif /* GRPC_POSIX_SOCKET */
diff --git a/test/core/security/credentials_test.c b/test/core/security/credentials_test.c
index 2f8ffe4..b74baa3 100644
--- a/test/core/security/credentials_test.c
+++ b/test/core/security/credentials_test.c
@@ -1125,28 +1125,19 @@
 }
 
 static void test_get_well_known_google_credentials_file_path(void) {
-#ifdef GPR_POSIX_FILE
   char *path;
-  char *old_home = gpr_getenv("HOME");
-  gpr_setenv("HOME", "/tmp");
+  char *home = gpr_getenv("HOME");
   path = grpc_get_well_known_google_credentials_file_path();
   GPR_ASSERT(path != NULL);
-  GPR_ASSERT(0 == strcmp("/tmp/.config/" GRPC_GOOGLE_CLOUD_SDK_CONFIG_DIRECTORY
-                         "/" GRPC_GOOGLE_WELL_KNOWN_CREDENTIALS_FILE,
-                         path));
   gpr_free(path);
 #if defined(GPR_POSIX_ENV) || defined(GPR_LINUX_ENV)
   unsetenv("HOME");
   path = grpc_get_well_known_google_credentials_file_path();
   GPR_ASSERT(path == NULL);
-#endif /* GPR_POSIX_ENV || GPR_LINUX_ENV */
-  gpr_setenv("HOME", old_home);
-  gpr_free(old_home);
-#else /* GPR_POSIX_FILE */
-  char *path = grpc_get_well_known_google_credentials_file_path();
-  GPR_ASSERT(path != NULL);
+  gpr_setenv("HOME", home);
   gpr_free(path);
-#endif
+#endif /* GPR_POSIX_ENV || GPR_LINUX_ENV */
+  gpr_free(home);
 }
 
 static void test_channel_creds_duplicate_without_call_creds(void) {
diff --git a/test/core/support/string_test.c b/test/core/support/string_test.c
index 553a824..378e45a 100644
--- a/test/core/support/string_test.c
+++ b/test/core/support/string_test.c
@@ -366,6 +366,13 @@
   gpr_free(padded);
 }
 
+static void test_stricmp(void) {
+  GPR_ASSERT(0 == gpr_stricmp("hello", "hello"));
+  GPR_ASSERT(0 == gpr_stricmp("HELLO", "hello"));
+  GPR_ASSERT(gpr_stricmp("a", "b") < 0);
+  GPR_ASSERT(gpr_stricmp("b", "a") > 0);
+}
+
 int main(int argc, char **argv) {
   grpc_test_init(argc, argv);
   test_strdup();
@@ -379,5 +386,6 @@
   test_ltoa();
   test_int64toa();
   test_leftpad();
+  test_stricmp();
   return 0;
 }
diff --git a/test/core/surface/channel_create_test.c b/test/core/surface/channel_create_test.c
index 580eb30..ad7970a 100644
--- a/test/core/surface/channel_create_test.c
+++ b/test/core/surface/channel_create_test.c
@@ -33,7 +33,7 @@
 
 #include <grpc/grpc.h>
 #include <grpc/support/log.h>
-#include "src/core/ext/client_config/resolver_registry.h"
+#include "src/core/ext/client_channel/resolver_registry.h"
 #include "test/core/util/test_config.h"
 
 void test_unknown_scheme_target(void) {
diff --git a/test/core/surface/concurrent_connectivity_test.c b/test/core/surface/concurrent_connectivity_test.c
index f7567f3..f9f723b 100644
--- a/test/core/surface/concurrent_connectivity_test.c
+++ b/test/core/surface/concurrent_connectivity_test.c
@@ -31,6 +31,12 @@
  *
  */
 
+/* With the addition of a libuv endpoint, sockaddr.h now includes uv.h when
+   using that endpoint. Because of various transitive includes in uv.h,
+   including windows.h on Windows, uv.h must be included before other system
+   headers. Therefore, sockaddr.h must always be included first */
+#include "src/core/lib/iomgr/sockaddr.h"
+
 #include <memory.h>
 #include <stdio.h>
 
@@ -42,6 +48,7 @@
 
 #include "src/core/lib/iomgr/exec_ctx.h"
 #include "src/core/lib/iomgr/iomgr.h"
+#include "src/core/lib/iomgr/resolve_address.h"
 #include "src/core/lib/iomgr/sockaddr_utils.h"
 #include "src/core/lib/iomgr/tcp_server.h"
 
@@ -109,16 +116,15 @@
   struct server_thread_args *args = (struct server_thread_args *)vargs;
 
   grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
-  struct sockaddr_storage addr;
-  socklen_t addr_len = sizeof(addr);
+  grpc_resolved_address resolved_addr;
+  struct sockaddr_storage *addr = (struct sockaddr_storage *)resolved_addr.addr;
   int port;
   grpc_tcp_server *s;
   grpc_error *error = grpc_tcp_server_create(NULL, NULL, &s);
   GPR_ASSERT(error == GRPC_ERROR_NONE);
-  memset(&addr, 0, sizeof(addr));
-  addr.ss_family = AF_INET;
-  error =
-      grpc_tcp_server_add_port(s, (struct sockaddr *)&addr, addr_len, &port);
+  memset(&resolved_addr, 0, sizeof(resolved_addr));
+  addr->ss_family = AF_INET;
+  error = grpc_tcp_server_add_port(s, &resolved_addr, &port);
   GPR_ASSERT(GRPC_LOG_IF_ERROR("grpc_tcp_server_add_port", error));
   GPR_ASSERT(port > 0);
   gpr_asprintf(&args->addr, "localhost:%d", port);
diff --git a/test/core/surface/secure_channel_create_test.c b/test/core/surface/secure_channel_create_test.c
index f8a9a64..444ebdc 100644
--- a/test/core/surface/secure_channel_create_test.c
+++ b/test/core/surface/secure_channel_create_test.c
@@ -36,7 +36,7 @@
 #include <grpc/grpc.h>
 #include <grpc/grpc_security.h>
 #include <grpc/support/log.h>
-#include "src/core/ext/client_config/resolver_registry.h"
+#include "src/core/ext/client_channel/resolver_registry.h"
 #include "src/core/lib/security/credentials/fake/fake_credentials.h"
 #include "src/core/lib/security/transport/security_connector.h"
 #include "src/core/lib/surface/channel.h"
diff --git a/test/core/transport/chttp2/hpack_parser_fuzzer_test.c b/test/core/transport/chttp2/hpack_parser_fuzzer_test.c
index b7f68e0..95acbf1 100644
--- a/test/core/transport/chttp2/hpack_parser_fuzzer_test.c
+++ b/test/core/transport/chttp2/hpack_parser_fuzzer_test.c
@@ -43,7 +43,9 @@
 bool squelch = true;
 bool leak_check = true;
 
-static void onhdr(void *ud, grpc_mdelem *md) { GRPC_MDELEM_UNREF(md); }
+static void onhdr(grpc_exec_ctx *exec_ctx, void *ud, grpc_mdelem *md) {
+  GRPC_MDELEM_UNREF(md);
+}
 static void dont_log(gpr_log_func_args *args) {}
 
 int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
@@ -53,7 +55,10 @@
   grpc_chttp2_hpack_parser parser;
   grpc_chttp2_hpack_parser_init(&parser);
   parser.on_header = onhdr;
-  GRPC_ERROR_UNREF(grpc_chttp2_hpack_parser_parse(&parser, data, data + size));
+  grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
+  GRPC_ERROR_UNREF(
+      grpc_chttp2_hpack_parser_parse(&exec_ctx, &parser, data, data + size));
+  grpc_exec_ctx_finish(&exec_ctx);
   grpc_chttp2_hpack_parser_destroy(&parser);
   grpc_shutdown();
   return 0;
diff --git a/test/core/transport/chttp2/hpack_parser_test.c b/test/core/transport/chttp2/hpack_parser_test.c
index 9ddceb8..55b64f5 100644
--- a/test/core/transport/chttp2/hpack_parser_test.c
+++ b/test/core/transport/chttp2/hpack_parser_test.c
@@ -45,7 +45,7 @@
 
 typedef struct { va_list args; } test_checker;
 
-static void onhdr(void *ud, grpc_mdelem *md) {
+static void onhdr(grpc_exec_ctx *exec_ctx, void *ud, grpc_mdelem *md) {
   const char *ekey, *evalue;
   test_checker *chk = ud;
   ekey = va_arg(chk->args, char *);
@@ -75,9 +75,11 @@
   gpr_slice_unref(input);
 
   for (i = 0; i < nslices; i++) {
+    grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
     GPR_ASSERT(grpc_chttp2_hpack_parser_parse(
-                   parser, GPR_SLICE_START_PTR(slices[i]),
+                   &exec_ctx, parser, GPR_SLICE_START_PTR(slices[i]),
                    GPR_SLICE_END_PTR(slices[i])) == GRPC_ERROR_NONE);
+    grpc_exec_ctx_finish(&exec_ctx);
   }
 
   for (i = 0; i < nslices; i++) {
diff --git a/test/core/util/port_posix.c b/test/core/util/port_posix.c
index 265e0ac..60537b4 100644
--- a/test/core/util/port_posix.c
+++ b/test/core/util/port_posix.c
@@ -31,9 +31,9 @@
  *
  */
 
-#include <grpc/support/port_platform.h>
+#include "src/core/lib/iomgr/port.h"
 #include "test/core/util/test_config.h"
-#if defined(GPR_POSIX_SOCKET) && defined(GRPC_TEST_PICK_PORT)
+#if defined(GRPC_POSIX_SOCKET) && defined(GRPC_TEST_PICK_PORT)
 
 #include "test/core/util/port.h"
 
@@ -237,4 +237,4 @@
 
 void grpc_recycle_unused_port(int port) { GPR_ASSERT(free_chosen_port(port)); }
 
-#endif /* GPR_POSIX_SOCKET && GRPC_TEST_PICK_PORT */
+#endif /* GRPC_POSIX_SOCKET && GRPC_TEST_PICK_PORT */
diff --git a/test/core/util/port_uv.c b/test/core/util/port_uv.c
new file mode 100644
index 0000000..0c9c0d8
--- /dev/null
+++ b/test/core/util/port_uv.c
@@ -0,0 +1,117 @@
+/*
+ *
+ * Copyright 2015, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ *     * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+#include "src/core/lib/iomgr/port.h"
+#include "test/core/util/test_config.h"
+#if defined(GRPC_UV) && defined(GRPC_TEST_PICK_PORT)
+
+#include <grpc/support/alloc.h>
+#include <grpc/support/log.h>
+
+#include "src/core/lib/support/env.h"
+#include "test/core/util/port.h"
+#include "test/core/util/port_server_client.h"
+
+// Almost everything in this file has been copied from port_posix.c
+
+static int *chosen_ports = NULL;
+static size_t num_chosen_ports = 0;
+
+static int free_chosen_port(int port) {
+  size_t i;
+  int found = 0;
+  size_t found_at = 0;
+  char *env = gpr_getenv("GRPC_TEST_PORT_SERVER");
+  /* Find the port and erase it from the list, then tell the server it can be
+     freed. */
+  for (i = 0; i < num_chosen_ports; i++) {
+    if (chosen_ports[i] == port) {
+      GPR_ASSERT(found == 0);
+      found = 1;
+      found_at = i;
+    }
+  }
+  if (found) {
+    chosen_ports[found_at] = chosen_ports[num_chosen_ports - 1];
+    num_chosen_ports--;
+    if (env) {
+      grpc_free_port_using_server(env, port);
+    }
+  }
+  gpr_free(env);
+  return found;
+}
+
+static void free_chosen_ports(void) {
+  char *env = gpr_getenv("GRPC_TEST_PORT_SERVER");
+  if (env != NULL) {
+    size_t i;
+    for (i = 0; i < num_chosen_ports; i++) {
+      grpc_free_port_using_server(env, chosen_ports[i]);
+    }
+    gpr_free(env);
+  }
+
+  gpr_free(chosen_ports);
+}
+
+static void chose_port(int port) {
+  if (chosen_ports == NULL) {
+    atexit(free_chosen_ports);
+  }
+  num_chosen_ports++;
+  chosen_ports = gpr_realloc(chosen_ports, sizeof(int) * num_chosen_ports);
+  chosen_ports[num_chosen_ports - 1] = port;
+}
+
+int grpc_pick_unused_port(void) {
+  // Currently only works with the port server
+  char *env = gpr_getenv("GRPC_TEST_PORT_SERVER");
+  GPR_ASSERT(env);
+  int port = grpc_pick_port_using_server(env);
+  gpr_free(env);
+  if (port != 0) {
+    chose_port(port);
+  }
+  return port;
+}
+
+int grpc_pick_unused_port_or_die(void) {
+  int port = grpc_pick_unused_port();
+  GPR_ASSERT(port > 0);
+  return port;
+}
+
+void grpc_recycle_unused_port(int port) { GPR_ASSERT(free_chosen_port(port)); }
+
+#endif /* GRPC_UV && GRPC_TEST_PICK_PORT */
diff --git a/test/core/util/port_windows.c b/test/core/util/port_windows.c
index 9023719..0c50a46 100644
--- a/test/core/util/port_windows.c
+++ b/test/core/util/port_windows.c
@@ -31,9 +31,11 @@
  *
  */
 
-#include <grpc/support/port_platform.h>
+#include "src/core/lib/iomgr/port.h"
 #include "test/core/util/test_config.h"
-#if defined(GPR_WINSOCK_SOCKET) && defined(GRPC_TEST_PICK_PORT)
+#if defined(GRPC_WINSOCK_SOCKET) && defined(GRPC_TEST_PICK_PORT)
+
+#include "src/core/lib/iomgr/sockaddr.h"
 
 #include "test/core/util/port.h"
 
@@ -242,4 +244,4 @@
 
 void grpc_recycle_unused_port(int port) { GPR_ASSERT(free_chosen_port(port)); }
 
-#endif /* GPR_WINSOCK_SOCKET && GRPC_TEST_PICK_PORT */
+#endif /* GRPC_WINSOCK_SOCKET && GRPC_TEST_PICK_PORT */
diff --git a/test/core/util/test_tcp_server.c b/test/core/util/test_tcp_server.c
index 8a0b393..9ac9741 100644
--- a/test/core/util/test_tcp_server.c
+++ b/test/core/util/test_tcp_server.c
@@ -31,6 +31,8 @@
  *
  */
 
+#include "src/core/lib/iomgr/sockaddr.h"
+
 #include "test/core/util/test_tcp_server.h"
 
 #include <grpc/grpc.h>
@@ -41,7 +43,7 @@
 #include <grpc/support/time.h>
 #include <string.h>
 #include "src/core/lib/iomgr/endpoint.h"
-#include "src/core/lib/iomgr/sockaddr.h"
+#include "src/core/lib/iomgr/resolve_address.h"
 #include "src/core/lib/iomgr/tcp_server.h"
 #include "test/core/util/port.h"
 
@@ -64,19 +66,20 @@
 }
 
 void test_tcp_server_start(test_tcp_server *server, int port) {
-  struct sockaddr_in addr;
+  grpc_resolved_address resolved_addr;
+  struct sockaddr_in *addr = (struct sockaddr_in *)resolved_addr.addr;
   int port_added;
   grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
 
-  addr.sin_family = AF_INET;
-  addr.sin_port = htons((uint16_t)port);
-  memset(&addr.sin_addr, 0, sizeof(addr.sin_addr));
+  addr->sin_family = AF_INET;
+  addr->sin_port = htons((uint16_t)port);
+  memset(&addr->sin_addr, 0, sizeof(addr->sin_addr));
 
   grpc_error *error = grpc_tcp_server_create(&server->shutdown_complete, NULL,
                                              &server->tcp_server);
   GPR_ASSERT(error == GRPC_ERROR_NONE);
-  error = grpc_tcp_server_add_port(server->tcp_server, &addr, sizeof(addr),
-                                   &port_added);
+  error =
+      grpc_tcp_server_add_port(server->tcp_server, &resolved_addr, &port_added);
   GPR_ASSERT(error == GRPC_ERROR_NONE);
   GPR_ASSERT(port_added == port);
 
diff --git a/test/cpp/codegen/compiler_test_golden b/test/cpp/codegen/compiler_test_golden
index 7b0fd6c..5f0e824 100644
--- a/test/cpp/codegen/compiler_test_golden
+++ b/test/cpp/codegen/compiler_test_golden
@@ -213,7 +213,7 @@
     void BaseClassMustBeDerivedFromService(const Service *service) {}
    public:
     WithStreamedUnaryMethod_MethodA1() {
-      ::grpc::Service::MarkMethodStreamedUnary(0,
+      ::grpc::Service::MarkMethodStreamed(0,
         new ::grpc::StreamedUnaryHandler< ::grpc::testing::Request, ::grpc::testing::Response>(std::bind(&WithStreamedUnaryMethod_MethodA1<BaseClass>::StreamedMethodA1, this, std::placeholders::_1, std::placeholders::_2)));
     }
     ~WithStreamedUnaryMethod_MethodA1() GRPC_OVERRIDE {
@@ -228,6 +228,8 @@
     virtual ::grpc::Status StreamedMethodA1(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::grpc::testing::Request,::grpc::testing::Response>* server_unary_streamer) = 0;
   };
   typedef WithStreamedUnaryMethod_MethodA1<Service > StreamedUnaryService;
+  typedef Service SplitStreamedService;
+  typedef WithStreamedUnaryMethod_MethodA1<Service > StreamedService;
 };
 
 // ServiceB leading comment 1
@@ -312,7 +314,7 @@
     void BaseClassMustBeDerivedFromService(const Service *service) {}
    public:
     WithStreamedUnaryMethod_MethodB1() {
-      ::grpc::Service::MarkMethodStreamedUnary(0,
+      ::grpc::Service::MarkMethodStreamed(0,
         new ::grpc::StreamedUnaryHandler< ::grpc::testing::Request, ::grpc::testing::Response>(std::bind(&WithStreamedUnaryMethod_MethodB1<BaseClass>::StreamedMethodB1, this, std::placeholders::_1, std::placeholders::_2)));
     }
     ~WithStreamedUnaryMethod_MethodB1() GRPC_OVERRIDE {
@@ -327,6 +329,8 @@
     virtual ::grpc::Status StreamedMethodB1(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::grpc::testing::Request,::grpc::testing::Response>* server_unary_streamer) = 0;
   };
   typedef WithStreamedUnaryMethod_MethodB1<Service > StreamedUnaryService;
+  typedef Service SplitStreamedService;
+  typedef WithStreamedUnaryMethod_MethodB1<Service > StreamedService;
 };
 // ServiceB trailing comment 1
 
diff --git a/test/cpp/end2end/async_end2end_test.cc b/test/cpp/end2end/async_end2end_test.cc
index a9b7c8f..823f0bd 100644
--- a/test/cpp/end2end/async_end2end_test.cc
+++ b/test/cpp/end2end/async_end2end_test.cc
@@ -47,6 +47,7 @@
 #include <grpc/support/tls.h>
 #include <gtest/gtest.h>
 
+#include "src/core/lib/iomgr/port.h"
 #include "src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.h"
 #include "src/proto/grpc/testing/echo.grpc.pb.h"
 #include "test/core/util/port.h"
@@ -54,7 +55,7 @@
 #include "test/cpp/util/string_ref_helper.h"
 #include "test/cpp/util/test_credentials_provider.h"
 
-#ifdef GPR_POSIX_SOCKET
+#ifdef GRPC_POSIX_SOCKET
 #include "src/core/lib/iomgr/ev_posix.h"
 #endif
 
@@ -73,7 +74,7 @@
 void* tag(int i) { return (void*)(intptr_t)i; }
 int detag(void* p) { return static_cast<int>(reinterpret_cast<intptr_t>(p)); }
 
-#ifdef GPR_POSIX_SOCKET
+#ifdef GRPC_POSIX_SOCKET
 static int maybe_assert_non_blocking_poll(struct pollfd* pfds, nfds_t nfds,
                                           int timeout) {
   if (gpr_tls_get(&g_is_async_end2end_test)) {
diff --git a/test/cpp/end2end/hybrid_end2end_test.cc b/test/cpp/end2end/hybrid_end2end_test.cc
index 8cd2e66..76a5732 100644
--- a/test/cpp/end2end/hybrid_end2end_test.cc
+++ b/test/cpp/end2end/hybrid_end2end_test.cc
@@ -320,6 +320,29 @@
     EXPECT_TRUE(s.ok());
   }
 
+  void SendSimpleServerStreamingToDupService() {
+    std::shared_ptr<Channel> channel =
+        CreateChannel(server_address_.str(), InsecureChannelCredentials());
+    auto stub = grpc::testing::duplicate::EchoTestService::NewStub(channel);
+    EchoRequest request;
+    EchoResponse response;
+    ClientContext context;
+    context.set_wait_for_ready(true);
+    request.set_message("hello");
+
+    auto stream = stub->ResponseStream(&context, request);
+    EXPECT_TRUE(stream->Read(&response));
+    EXPECT_EQ(response.message(), request.message() + "0_dup");
+    EXPECT_TRUE(stream->Read(&response));
+    EXPECT_EQ(response.message(), request.message() + "1_dup");
+    EXPECT_TRUE(stream->Read(&response));
+    EXPECT_EQ(response.message(), request.message() + "2_dup");
+    EXPECT_FALSE(stream->Read(&response));
+
+    Status s = stream->Finish();
+    EXPECT_TRUE(s.ok());
+  }
+
   void SendBidiStreaming() {
     EchoRequest request;
     EchoResponse response;
@@ -498,6 +521,140 @@
   request_stream_handler_thread.join();
 }
 
+// Add a second service with one sync split server streaming method.
+class SplitResponseStreamDupPkg
+    : public duplicate::EchoTestService::
+          WithSplitStreamingMethod_ResponseStream<TestServiceImplDupPkg> {
+ public:
+  Status StreamedResponseStream(
+      ServerContext* context,
+      ServerSplitStreamer<EchoRequest, EchoResponse>* stream) GRPC_OVERRIDE {
+    EchoRequest req;
+    EchoResponse resp;
+    uint32_t next_msg_sz;
+    stream->NextMessageSize(&next_msg_sz);
+    gpr_log(GPR_INFO, "Split Streamed Next Message Size is %u", next_msg_sz);
+    GPR_ASSERT(stream->Read(&req));
+    for (int i = 0; i < kNumResponseStreamsMsgs; i++) {
+      resp.set_message(req.message() + grpc::to_string(i) + "_dup");
+      GPR_ASSERT(stream->Write(resp));
+    }
+    return Status::OK;
+  }
+};
+
+TEST_F(HybridEnd2endTest,
+       AsyncRequestStreamResponseStream_SyncSplitStreamedDupService) {
+  typedef EchoTestService::WithAsyncMethod_RequestStream<
+      EchoTestService::WithAsyncMethod_ResponseStream<TestServiceImpl>>
+      SType;
+  SType service;
+  SplitResponseStreamDupPkg dup_service;
+  SetUpServer(&service, &dup_service, nullptr, 8192);
+  ResetStub();
+  std::thread response_stream_handler_thread(HandleServerStreaming<SType>,
+                                             &service, cqs_[0].get());
+  std::thread request_stream_handler_thread(HandleClientStreaming<SType>,
+                                            &service, cqs_[1].get());
+  TestAllMethods();
+  SendSimpleServerStreamingToDupService();
+  response_stream_handler_thread.join();
+  request_stream_handler_thread.join();
+}
+
+// Add a second service that is fully split server streamed
+class FullySplitStreamedDupPkg
+    : public duplicate::EchoTestService::SplitStreamedService {
+ public:
+  Status StreamedResponseStream(
+      ServerContext* context,
+      ServerSplitStreamer<EchoRequest, EchoResponse>* stream) GRPC_OVERRIDE {
+    EchoRequest req;
+    EchoResponse resp;
+    uint32_t next_msg_sz;
+    stream->NextMessageSize(&next_msg_sz);
+    gpr_log(GPR_INFO, "Split Streamed Next Message Size is %u", next_msg_sz);
+    GPR_ASSERT(stream->Read(&req));
+    for (int i = 0; i < kNumResponseStreamsMsgs; i++) {
+      resp.set_message(req.message() + grpc::to_string(i) + "_dup");
+      GPR_ASSERT(stream->Write(resp));
+    }
+    return Status::OK;
+  }
+};
+
+TEST_F(HybridEnd2endTest,
+       AsyncRequestStreamResponseStream_FullySplitStreamedDupService) {
+  typedef EchoTestService::WithAsyncMethod_RequestStream<
+      EchoTestService::WithAsyncMethod_ResponseStream<TestServiceImpl>>
+      SType;
+  SType service;
+  FullySplitStreamedDupPkg dup_service;
+  SetUpServer(&service, &dup_service, nullptr, 8192);
+  ResetStub();
+  std::thread response_stream_handler_thread(HandleServerStreaming<SType>,
+                                             &service, cqs_[0].get());
+  std::thread request_stream_handler_thread(HandleClientStreaming<SType>,
+                                            &service, cqs_[1].get());
+  TestAllMethods();
+  SendSimpleServerStreamingToDupService();
+  response_stream_handler_thread.join();
+  request_stream_handler_thread.join();
+}
+
+// Add a second service that is fully server streamed
+class FullyStreamedDupPkg : public duplicate::EchoTestService::StreamedService {
+ public:
+  Status StreamedEcho(ServerContext* context,
+                      ServerUnaryStreamer<EchoRequest, EchoResponse>* stream)
+      GRPC_OVERRIDE {
+    EchoRequest req;
+    EchoResponse resp;
+    uint32_t next_msg_sz;
+    stream->NextMessageSize(&next_msg_sz);
+    gpr_log(GPR_INFO, "Streamed Unary Next Message Size is %u", next_msg_sz);
+    GPR_ASSERT(stream->Read(&req));
+    resp.set_message(req.message() + "_dup");
+    GPR_ASSERT(stream->Write(resp));
+    return Status::OK;
+  }
+  Status StreamedResponseStream(
+      ServerContext* context,
+      ServerSplitStreamer<EchoRequest, EchoResponse>* stream) GRPC_OVERRIDE {
+    EchoRequest req;
+    EchoResponse resp;
+    uint32_t next_msg_sz;
+    stream->NextMessageSize(&next_msg_sz);
+    gpr_log(GPR_INFO, "Split Streamed Next Message Size is %u", next_msg_sz);
+    GPR_ASSERT(stream->Read(&req));
+    for (int i = 0; i < kNumResponseStreamsMsgs; i++) {
+      resp.set_message(req.message() + grpc::to_string(i) + "_dup");
+      GPR_ASSERT(stream->Write(resp));
+    }
+    return Status::OK;
+  }
+};
+
+TEST_F(HybridEnd2endTest,
+       AsyncRequestStreamResponseStream_FullyStreamedDupService) {
+  typedef EchoTestService::WithAsyncMethod_RequestStream<
+      EchoTestService::WithAsyncMethod_ResponseStream<TestServiceImpl>>
+      SType;
+  SType service;
+  FullyStreamedDupPkg dup_service;
+  SetUpServer(&service, &dup_service, nullptr, 8192);
+  ResetStub();
+  std::thread response_stream_handler_thread(HandleServerStreaming<SType>,
+                                             &service, cqs_[0].get());
+  std::thread request_stream_handler_thread(HandleClientStreaming<SType>,
+                                            &service, cqs_[1].get());
+  TestAllMethods();
+  SendEchoToDupService();
+  SendSimpleServerStreamingToDupService();
+  response_stream_handler_thread.join();
+  request_stream_handler_thread.join();
+}
+
 // Add a second service with one async method.
 TEST_F(HybridEnd2endTest, AsyncRequestStreamResponseStream_AsyncDupService) {
   typedef EchoTestService::WithAsyncMethod_RequestStream<
diff --git a/test/cpp/end2end/thread_stress_test.cc b/test/cpp/end2end/thread_stress_test.cc
index b021b34..0b9d4cd 100644
--- a/test/cpp/end2end/thread_stress_test.cc
+++ b/test/cpp/end2end/thread_stress_test.cc
@@ -339,7 +339,11 @@
     ClientContext context;
     Status s = stub->Echo(&context, request, &response);
     EXPECT_EQ(response.message(), request.message());
-    EXPECT_TRUE(s.ok());
+    if (!s.ok()) {
+      gpr_log(GPR_ERROR, "RPC error: %d: %s", s.error_code(),
+              s.error_message().c_str());
+    }
+    ASSERT_TRUE(s.ok());
   }
 }
 
diff --git a/test/cpp/grpclb/grpclb_test.cc b/test/cpp/grpclb/grpclb_test.cc
index 7666c4e..b6056f9 100644
--- a/test/cpp/grpclb/grpclb_test.cc
+++ b/test/cpp/grpclb/grpclb_test.cc
@@ -51,7 +51,7 @@
 
 #include <grpc++/impl/codegen/config.h>
 extern "C" {
-#include "src/core/ext/client_config/client_channel.h"
+#include "src/core/ext/client_channel/client_channel.h"
 #include "src/core/lib/channel/channel_stack.h"
 #include "src/core/lib/iomgr/sockaddr.h"
 #include "src/core/lib/support/string.h"
@@ -334,8 +334,7 @@
     // have a version for int but does have one for long long int.
     string expected_token = "token" + std::to_string((long long int)sf->port);
     expected_token.resize(64, '-');
-    GPR_ASSERT(contains_metadata(&request_metadata_recv,
-                                 "load-reporting-initial",
+    GPR_ASSERT(contains_metadata(&request_metadata_recv, "lb-token",
                                  expected_token.c_str()));
 
     gpr_log(GPR_INFO, "Server[%s] after tag 100", sf->servers_hostport);
diff --git a/test/cpp/interop/client.cc b/test/cpp/interop/client.cc
index 999be9d..4197ba8 100644
--- a/test/cpp/interop/client.cc
+++ b/test/cpp/interop/client.cc
@@ -79,7 +79,8 @@
               "slow_consumer : single request with response streaming with "
               "slow client consumer;\n"
               "status_code_and_message: verify status code & message;\n"
-              "timeout_on_sleeping_server: deadline exceeds on stream;\n");
+              "timeout_on_sleeping_server: deadline exceeds on stream;\n"
+              "unimplemented_method: client calls an unimplemented method;\n");
 DEFINE_string(default_service_account, "",
               "Email of GCE default service account");
 DEFINE_string(service_account_key_file, "",
@@ -149,6 +150,8 @@
     client.DoStatusWithMessage();
   } else if (FLAGS_test_case == "custom_metadata") {
     client.DoCustomMetadata();
+  } else if (FLAGS_test_case == "unimplemented_method") {
+    client.DoUnimplementedMethod();
   } else if (FLAGS_test_case == "cacheable_unary") {
     client.DoCacheableUnary();
   } else if (FLAGS_test_case == "all") {
@@ -168,6 +171,7 @@
     client.DoEmptyStream();
     client.DoStatusWithMessage();
     client.DoCustomMetadata();
+    client.DoUnimplementedMethod();
     client.DoCacheableUnary();
     // service_account_creds and jwt_token_creds can only run with ssl.
     if (FLAGS_use_tls) {
@@ -202,7 +206,8 @@
                                "server_compressed_unary",
                                "server_streaming",
                                "status_code_and_message",
-                               "timeout_on_sleeping_server"};
+                               "timeout_on_sleeping_server",
+                               "unimplemented_method"};
     char* joined_testcases =
         gpr_strjoin_sep(testcases, GPR_ARRAY_SIZE(testcases), "\n", NULL);
 
diff --git a/test/cpp/interop/interop_client.cc b/test/cpp/interop/interop_client.cc
index e9a804c..1668589 100644
--- a/test/cpp/interop/interop_client.cc
+++ b/test/cpp/interop/interop_client.cc
@@ -827,21 +827,42 @@
   gpr_log(GPR_DEBUG,
           "Sending RPC with a request for status code 2 and message");
 
+  const grpc::StatusCode test_code = grpc::StatusCode::UNKNOWN;
+  const grpc::string test_msg = "This is a test message";
+
+  // Test UnaryCall.
   ClientContext context;
   SimpleRequest request;
   SimpleResponse response;
   EchoStatus* requested_status = request.mutable_response_status();
-  requested_status->set_code(grpc::StatusCode::UNKNOWN);
-  grpc::string test_msg = "This is a test message";
+  requested_status->set_code(test_code);
   requested_status->set_message(test_msg);
-
   Status s = serviceStub_.Get()->UnaryCall(&context, request, &response);
-
   if (!AssertStatusCode(s, grpc::StatusCode::UNKNOWN)) {
     return false;
   }
-
   GPR_ASSERT(s.error_message() == test_msg);
+
+  // Test FullDuplexCall.
+  ClientContext stream_context;
+  std::shared_ptr<ClientReaderWriter<StreamingOutputCallRequest,
+                                     StreamingOutputCallResponse>>
+      stream(serviceStub_.Get()->FullDuplexCall(&stream_context));
+  StreamingOutputCallRequest streaming_request;
+  requested_status = streaming_request.mutable_response_status();
+  requested_status->set_code(test_code);
+  requested_status->set_message(test_msg);
+  stream->Write(streaming_request);
+  stream->WritesDone();
+  StreamingOutputCallResponse streaming_response;
+  while (stream->Read(&streaming_response))
+    ;
+  s = stream->Finish();
+  if (!AssertStatusCode(s, grpc::StatusCode::UNKNOWN)) {
+    return false;
+  }
+  GPR_ASSERT(s.error_message() == test_msg);
+
   gpr_log(GPR_DEBUG, "Done testing Status and Message");
   return true;
 }
@@ -981,5 +1002,23 @@
   return true;
 }
 
+bool InteropClient::DoUnimplementedMethod() {
+  gpr_log(GPR_DEBUG, "Sending a request for an unimplemented rpc...");
+
+  Empty request = Empty::default_instance();
+  Empty response = Empty::default_instance();
+  ClientContext context;
+
+  Status s =
+      serviceStub_.Get()->UnimplementedCall(&context, request, &response);
+
+  if (!AssertStatusCode(s, StatusCode::UNIMPLEMENTED)) {
+    return false;
+  }
+
+  gpr_log(GPR_DEBUG, "unimplemented rpc done.");
+  return true;
+}
+
 }  // namespace testing
 }  // namespace grpc
diff --git a/test/cpp/interop/interop_client.h b/test/cpp/interop/interop_client.h
index 1e89f09..0a96e77 100644
--- a/test/cpp/interop/interop_client.h
+++ b/test/cpp/interop/interop_client.h
@@ -79,6 +79,7 @@
   bool DoEmptyStream();
   bool DoStatusWithMessage();
   bool DoCustomMetadata();
+  bool DoUnimplementedMethod();
   bool DoCacheableUnary();
   // Auth tests.
   // username is a string containing the user email
diff --git a/test/cpp/interop/interop_server.cc b/test/cpp/interop/interop_server.cc
index 58f20aa..8b50ae8 100644
--- a/test/cpp/interop/interop_server.cc
+++ b/test/cpp/interop/interop_server.cc
@@ -269,6 +269,11 @@
     StreamingOutputCallResponse response;
     bool write_success = true;
     while (write_success && stream->Read(&request)) {
+      if (request.has_response_status()) {
+        return Status(
+            static_cast<grpc::StatusCode>(request.response_status().code()),
+            request.response_status().message());
+      }
       if (request.response_parameters_size() != 0) {
         response.mutable_payload()->set_type(request.payload().type());
         response.mutable_payload()->set_body(
diff --git a/test/cpp/interop/interop_test.cc b/test/cpp/interop/interop_test.cc
index 8e71a2b..c066598 100644
--- a/test/cpp/interop/interop_test.cc
+++ b/test/cpp/interop/interop_test.cc
@@ -44,17 +44,21 @@
 #include <sys/wait.h>
 #include <unistd.h>
 
+#include <gflags/gflags.h>
 #include <grpc/support/alloc.h>
 #include <grpc/support/host_port.h>
 #include <grpc/support/log.h>
 #include <grpc/support/string_util.h>
 #include "test/core/util/port.h"
+#include "test/cpp/util/test_config.h"
 
 extern "C" {
 #include "src/core/lib/iomgr/socket_utils_posix.h"
 #include "src/core/lib/support/string.h"
 }
 
+DEFINE_string(extra_server_flags, "", "Extra flags to pass to server.");
+
 int test_client(const char* root, const char* host, int port) {
   int status;
   pid_t cli;
@@ -80,6 +84,7 @@
 }
 
 int main(int argc, char** argv) {
+  grpc::testing::InitTest(&argc, &argv, true);
   char* me = argv[0];
   char* lslash = strrchr(me, '/');
   char root[1024];
@@ -105,15 +110,19 @@
   /* start the server */
   svr = fork();
   if (svr == 0) {
-    char* binary_path;
-    char* port_arg;
-    gpr_asprintf(&binary_path, "%s/interop_server", root);
-    gpr_asprintf(&port_arg, "--port=%d", port);
-
-    execl(binary_path, binary_path, port_arg, NULL);
-
-    gpr_free(binary_path);
-    gpr_free(port_arg);
+    const size_t num_args = 3 + !FLAGS_extra_server_flags.empty();
+    char** args = (char**)gpr_malloc(sizeof(char*) * num_args);
+    memset(args, 0, sizeof(char*) * num_args);
+    gpr_asprintf(&args[0], "%s/interop_server", root);
+    gpr_asprintf(&args[1], "--port=%d", port);
+    if (!FLAGS_extra_server_flags.empty()) {
+      args[2] = gpr_strdup(FLAGS_extra_server_flags.c_str());
+    }
+    execv(args[0], args);
+    for (size_t i = 0; i < num_args - 1; ++i) {
+      gpr_free(args[i]);
+    }
+    gpr_free(args);
     return 1;
   }
   /* wait a little */
diff --git a/test/cpp/interop/stress_test.cc b/test/cpp/interop/stress_test.cc
index 5647cb5..46d09b7 100644
--- a/test/cpp/interop/stress_test.cc
+++ b/test/cpp/interop/stress_test.cc
@@ -46,6 +46,7 @@
 
 #include "src/proto/grpc/testing/metrics.grpc.pb.h"
 #include "src/proto/grpc/testing/metrics.pb.h"
+#include "test/cpp/interop/client_helper.h"
 #include "test/cpp/interop/interop_client.h"
 #include "test/cpp/interop/stress_interop_client.h"
 #include "test/cpp/util/metrics_server.h"
@@ -68,7 +69,8 @@
 
 DEFINE_string(server_addresses, "localhost:8080",
               "The list of server"
-              " addresses in the format:\n"
+              "addresses. This option is ignored if either\n"
+              "server_port or server_host is specified. The format is: \n"
               " \"<name_1>:<port_1>,<name_2>:<port_1>...<name_N>:<port_N>\"\n"
               " Note: <name> can be servername or IP address.");
 
@@ -79,6 +81,34 @@
              "indicates the max number of parallel RPC calls on each channel "
              "at any given time.");
 
+DEFINE_string(test_case, "",
+              "Configure different test cases. Valid options are:\n\n"
+              "all : all test cases;\n"
+              "cancel_after_begin : cancel stream after starting it;\n"
+              "cancel_after_first_response: cancel on first response;\n"
+              "client_compressed_streaming : compressed request streaming with "
+              "client_compressed_unary : single compressed request;\n"
+              "client_streaming : request streaming with single response;\n"
+              "compute_engine_creds: large_unary with compute engine auth;\n"
+              "custom_metadata: server will echo custom metadata;\n"
+              "empty_stream : bi-di stream with no request/response;\n"
+              "empty_unary : empty (zero bytes) request and response;\n"
+              "half_duplex : half-duplex streaming;\n"
+              "jwt_token_creds: large_unary with JWT token auth;\n"
+              "large_unary : single request and (large) response;\n"
+              "oauth2_auth_token: raw oauth2 access token auth;\n"
+              "per_rpc_creds: raw oauth2 access token on a single rpc;\n"
+              "ping_pong : full-duplex streaming;\n"
+              "response streaming;\n"
+              "server_compressed_streaming : single request with compressed "
+              "server_compressed_unary : single compressed response;\n"
+              "server_streaming : single request with response streaming;\n"
+              "slow_consumer : single request with response streaming with "
+              "slow client consumer;\n"
+              "status_code_and_message: verify status code & message;\n"
+              "timeout_on_sleeping_server: deadline exceeds on stream;\n"
+              "unimplemented_method: client calls an unimplemented_method;\n");
+
 // TODO(sreek): Add more test cases here in future
 DEFINE_string(test_cases, "",
               "List of test cases to call along with the"
@@ -115,6 +145,17 @@
             "If set to 'true', abort() is not called in case of transient "
             "failures like temporary connection failures.");
 
+// Options from client.cc (for compatibility with interop test).
+// TODO(sreek): Consolidate overlapping options
+DEFINE_bool(use_tls, false, "Whether to use tls.");
+DEFINE_bool(use_test_ca, false, "False to use SSL roots for google");
+DEFINE_int32(server_port, 0, "Server port.");
+DEFINE_string(server_host, "127.0.0.1", "Server host to connect to");
+DEFINE_string(server_host_override, "foo.test.google.fr",
+              "Override the server host which is sent in HTTP header");
+DEFINE_string(service_account_key_file, "",
+              "Path to service account json key file.");
+
 using grpc::testing::kTestCaseList;
 using grpc::testing::MetricsService;
 using grpc::testing::MetricsServiceImpl;
@@ -200,6 +241,8 @@
 void LogParameterInfo(const std::vector<grpc::string>& addresses,
                       const std::vector<std::pair<TestCaseType, int>>& tests) {
   gpr_log(GPR_INFO, "server_addresses: %s", FLAGS_server_addresses.c_str());
+  gpr_log(GPR_INFO, "server_host: %s", FLAGS_server_host.c_str());
+  gpr_log(GPR_INFO, "server_port: %d", FLAGS_server_port);
   gpr_log(GPR_INFO, "test_cases : %s", FLAGS_test_cases.c_str());
   gpr_log(GPR_INFO, "sleep_duration_ms: %d", FLAGS_sleep_duration_ms);
   gpr_log(GPR_INFO, "test_duration_secs: %d", FLAGS_test_duration_secs);
@@ -243,11 +286,24 @@
 
   // Parse the server addresses
   std::vector<grpc::string> server_addresses;
-  ParseCommaDelimitedString(FLAGS_server_addresses, server_addresses);
+  if (FLAGS_server_port != 0) {
+    // We are using interop_client style cmdline options.
+    const int host_port_buf_size = 1024;
+    char host_port[host_port_buf_size];
+    snprintf(host_port, host_port_buf_size, "%s:%d", FLAGS_server_host.c_str(),
+             FLAGS_server_port);
+    std::string host_port_str(host_port);
+    ParseCommaDelimitedString(host_port_str, server_addresses);
+  } else {
+    ParseCommaDelimitedString(FLAGS_server_addresses, server_addresses);
+  }
 
   // Parse test cases and weights
   if (FLAGS_test_cases.length() == 0) {
-    gpr_log(GPR_ERROR, "Not running tests. The 'test_cases' string is empty");
+    // We are using interop_client style test_case option
+    FLAGS_test_cases = FLAGS_test_case + ":100";
+  } else if (FLAGS_test_case != "") {
+    gpr_log(GPR_ERROR, "specify --test_case or --test_cases but not both.");
     return 1;
   }
 
@@ -283,9 +339,14 @@
     // Create channel(s) for each server
     for (int channel_idx = 0; channel_idx < FLAGS_num_channels_per_server;
          channel_idx++) {
-      // TODO (sreek). This won't work for tests that require Authentication
-      std::shared_ptr<grpc::Channel> channel(
-          grpc::CreateChannel(*it, grpc::InsecureChannelCredentials()));
+      gpr_log(GPR_INFO, "Starting test with %s channel_idx=%d..", it->c_str(),
+              channel_idx);
+      std::shared_ptr<grpc::Channel> channel;
+      if (FLAGS_use_tls) {
+        channel = grpc::testing::CreateChannelForTestCase(FLAGS_test_case);
+      } else {
+        channel = grpc::CreateChannel(*it, grpc::InsecureChannelCredentials());
+      }
 
       // Create stub(s) for each channel
       for (int stub_idx = 0; stub_idx < FLAGS_num_stubs_per_channel;
@@ -311,8 +372,10 @@
   }
 
   // Start metrics server before waiting for the stress test threads
-  std::unique_ptr<grpc::Server> metrics_server =
-      metrics_service.StartServer(FLAGS_metrics_port);
+  if (FLAGS_metrics_port > 0) {
+    std::unique_ptr<grpc::Server> metrics_server =
+        metrics_service.StartServer(FLAGS_metrics_port);
+  }
 
   // Wait for the stress test threads to complete
   for (auto it = test_threads.begin(); it != test_threads.end(); it++) {
diff --git a/test/cpp/qps/client_sync.cc b/test/cpp/qps/client_sync.cc
index 8062424..0ccf4e2 100644
--- a/test/cpp/qps/client_sync.cc
+++ b/test/cpp/qps/client_sync.cc
@@ -130,6 +130,10 @@
     grpc::Status s =
         stub->UnaryCall(&context, request_, &responses_[thread_idx]);
     entry->set_value((UsageTimer::Now() - start) * 1e9);
+    if (!s.ok()) {
+      gpr_log(GPR_ERROR, "RPC error: %d: %s", s.error_code(),
+              s.error_message().c_str());
+    }
     return s.ok();
   }
 };
diff --git a/test/cpp/qps/driver.cc b/test/cpp/qps/driver.cc
index 7460bb5..6c675e3 100644
--- a/test/cpp/qps/driver.cc
+++ b/test/cpp/qps/driver.cc
@@ -45,6 +45,7 @@
 #include <grpc/support/host_port.h>
 #include <grpc/support/log.h>
 
+#include "src/core/lib/profiling/timers.h"
 #include "src/core/lib/support/env.h"
 #include "src/proto/grpc/testing/services.grpc.pb.h"
 #include "test/core/util/port.h"
@@ -438,6 +439,8 @@
       start,
       gpr_time_from_seconds(warmup_seconds + benchmark_seconds, GPR_TIMESPAN)));
 
+  gpr_timer_set_enabled(0);
+
   // Finish a run
   std::unique_ptr<ScenarioResult> result(new ScenarioResult);
   Histogram merged_latencies;
diff --git a/test/cpp/qps/server_async.cc b/test/cpp/qps/server_async.cc
index 082b4bc..2fcc648 100644
--- a/test/cpp/qps/server_async.cc
+++ b/test/cpp/qps/server_async.cc
@@ -57,7 +57,7 @@
 
 template <class RequestType, class ResponseType, class ServiceType,
           class ServerContextType>
-class AsyncQpsServerTest : public Server {
+class AsyncQpsServerTest GRPC_FINAL : public grpc::testing::Server {
  public:
   AsyncQpsServerTest(
       const ServerConfig &config,
@@ -131,9 +131,7 @@
       std::lock_guard<std::mutex> lock((*ss)->mutex);
       (*ss)->shutdown = true;
     }
-    // TODO (vpai): Remove this deadline and allow Shutdown to finish properly
-    auto deadline = std::chrono::system_clock::now() + std::chrono::seconds(3);
-    server_->Shutdown(deadline);
+    std::thread shutdown_thread(&AsyncQpsServerTest::ShutdownThreadFunc, this);
     for (auto cq = srv_cqs_.begin(); cq != srv_cqs_.end(); ++cq) {
       (*cq)->Shutdown();
     }
@@ -146,9 +144,16 @@
       while ((*cq)->Next(&got_tag, &ok))
         ;
     }
+    shutdown_thread.join();
   }
 
  private:
+  void ShutdownThreadFunc() {
+    // TODO (vpai): Remove this deadline and allow Shutdown to finish properly
+    auto deadline = std::chrono::system_clock::now() + std::chrono::seconds(3);
+    server_->Shutdown(deadline);
+  }
+
   void ThreadFunc(int thread_idx) {
     // Wait until work is available or we are shutting down
     bool ok;
diff --git a/test/cpp/qps/server_sync.cc b/test/cpp/qps/server_sync.cc
index c774985..0caed0a 100644
--- a/test/cpp/qps/server_sync.cc
+++ b/test/cpp/qps/server_sync.cc
@@ -31,8 +31,6 @@
  *
  */
 
-#include <thread>
-
 #include <grpc++/security/server_credentials.h>
 #include <grpc++/server.h>
 #include <grpc++/server_builder.h>
diff --git a/test/cpp/test/server_context_test_spouse_test.cc b/test/cpp/test/server_context_test_spouse_test.cc
new file mode 100644
index 0000000..e0d6a2f
--- /dev/null
+++ b/test/cpp/test/server_context_test_spouse_test.cc
@@ -0,0 +1,108 @@
+/*
+ *
+ * Copyright 2016, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ *     * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+#include <grpc++/test/server_context_test_spouse.h>
+
+#include <cstring>
+#include <vector>
+
+#include <gtest/gtest.h>
+
+namespace grpc {
+namespace testing {
+
+const char key1[] = "metadata-key1";
+const char key2[] = "metadata-key2";
+const char val1[] = "metadata-val1";
+const char val2[] = "metadata-val2";
+
+bool ClientMetadataContains(const ServerContext& context,
+                            const grpc::string_ref& key,
+                            const grpc::string_ref& value) {
+  const auto& client_metadata = context.client_metadata();
+  for (auto iter = client_metadata.begin(); iter != client_metadata.end();
+       ++iter) {
+    if (iter->first == key && iter->second == value) {
+      return true;
+    }
+  }
+  return false;
+}
+
+TEST(ServerContextTestSpouseTest, ClientMetadata) {
+  ServerContext context;
+  ServerContextTestSpouse spouse(&context);
+
+  spouse.AddClientMetadata(key1, val1);
+  ASSERT_TRUE(ClientMetadataContains(context, key1, val1));
+
+  spouse.AddClientMetadata(key2, val2);
+  ASSERT_TRUE(ClientMetadataContains(context, key1, val1));
+  ASSERT_TRUE(ClientMetadataContains(context, key2, val2));
+}
+
+TEST(ServerContextTestSpouseTest, InitialMetadata) {
+  ServerContext context;
+  ServerContextTestSpouse spouse(&context);
+  std::multimap<grpc::string, grpc::string> metadata;
+
+  context.AddInitialMetadata(key1, val1);
+  metadata.insert(std::pair<grpc::string, grpc::string>(key1, val1));
+  ASSERT_EQ(metadata, spouse.GetInitialMetadata());
+
+  context.AddInitialMetadata(key2, val2);
+  metadata.insert(std::pair<grpc::string, grpc::string>(key2, val2));
+  ASSERT_EQ(metadata, spouse.GetInitialMetadata());
+}
+
+TEST(ServerContextTestSpouseTest, TrailingMetadata) {
+  ServerContext context;
+  ServerContextTestSpouse spouse(&context);
+  std::multimap<grpc::string, grpc::string> metadata;
+
+  context.AddTrailingMetadata(key1, val1);
+  metadata.insert(std::pair<grpc::string, grpc::string>(key1, val1));
+  ASSERT_EQ(metadata, spouse.GetTrailingMetadata());
+
+  context.AddTrailingMetadata(key2, val2);
+  metadata.insert(std::pair<grpc::string, grpc::string>(key2, val2));
+  ASSERT_EQ(metadata, spouse.GetTrailingMetadata());
+}
+
+}  // namespace
+}  // namespace grpc
+
+int main(int argc, char** argv) {
+  ::testing::InitGoogleTest(&argc, argv);
+  return RUN_ALL_TESTS();
+}
diff --git a/tools/buildgen/plugins/make_fuzzer_tests.py b/tools/buildgen/plugins/make_fuzzer_tests.py
index 1d215e9..ba9825a 100644
--- a/tools/buildgen/plugins/make_fuzzer_tests.py
+++ b/tools/buildgen/plugins/make_fuzzer_tests.py
@@ -49,6 +49,7 @@
           tests.append({
               'name': new_target['name'],
               'args': [fn],
+              'exclude_iomgrs': ['uv'],
               'exclude_configs': ['tsan'],
               'uses_polling': False,
               'platforms': ['linux'],
diff --git a/tools/codegen/core/gen_static_metadata.py b/tools/codegen/core/gen_static_metadata.py
index 6f40010..cf3762d 100755
--- a/tools/codegen/core/gen_static_metadata.py
+++ b/tools/codegen/core/gen_static_metadata.py
@@ -109,8 +109,8 @@
     ('if-range', ''),
     ('if-unmodified-since', ''),
     ('last-modified', ''),
-    ('load-reporting-initial', ''),
-    ('load-reporting-trailing', ''),
+    ('lb-token', ''),
+    ('lb-cost-bin', ''),
     ('link', ''),
     ('location', ''),
     ('max-forwards', ''),
diff --git a/tools/dockerfile/test/cxx_jessie_x64/Dockerfile b/tools/dockerfile/test/cxx_jessie_x64/Dockerfile
index 67cee19..1f6641a 100644
--- a/tools/dockerfile/test/cxx_jessie_x64/Dockerfile
+++ b/tools/dockerfile/test/cxx_jessie_x64/Dockerfile
@@ -126,5 +126,8 @@
 
 RUN mkdir /var/local/jenkins
 
+#================
+# libuv
+RUN cd /tmp     && wget http://dist.libuv.org/dist/v1.9.1/libuv-v1.9.1.tar.gz     && tar -xf libuv-v1.9.1.tar.gz     && cd libuv-v1.9.1     && sh autogen.sh && ./configure --prefix=/usr && make && make install
 # Define the default command.
 CMD ["bash"]
diff --git a/tools/doxygen/Doxyfile.core.internal b/tools/doxygen/Doxyfile.core.internal
index 44f147a..827159a 100644
--- a/tools/doxygen/Doxyfile.core.internal
+++ b/tools/doxygen/Doxyfile.core.internal
@@ -824,27 +824,34 @@
 src/core/lib/iomgr/pollset.h \
 src/core/lib/iomgr/pollset_set.h \
 src/core/lib/iomgr/pollset_set_windows.h \
+src/core/lib/iomgr/pollset_uv.h \
 src/core/lib/iomgr/pollset_windows.h \
+src/core/lib/iomgr/port.h \
 src/core/lib/iomgr/resolve_address.h \
 src/core/lib/iomgr/sockaddr.h \
 src/core/lib/iomgr/sockaddr_posix.h \
 src/core/lib/iomgr/sockaddr_utils.h \
 src/core/lib/iomgr/sockaddr_windows.h \
+src/core/lib/iomgr/socket_utils.h \
 src/core/lib/iomgr/socket_utils_posix.h \
 src/core/lib/iomgr/socket_windows.h \
 src/core/lib/iomgr/tcp_client.h \
 src/core/lib/iomgr/tcp_posix.h \
 src/core/lib/iomgr/tcp_server.h \
+src/core/lib/iomgr/tcp_uv.h \
 src/core/lib/iomgr/tcp_windows.h \
 src/core/lib/iomgr/time_averaged_stats.h \
 src/core/lib/iomgr/timer.h \
+src/core/lib/iomgr/timer_generic.h \
 src/core/lib/iomgr/timer_heap.h \
+src/core/lib/iomgr/timer_uv.h \
 src/core/lib/iomgr/udp_server.h \
 src/core/lib/iomgr/unix_sockets_posix.h \
+src/core/lib/iomgr/wakeup_fd_cv.h \
 src/core/lib/iomgr/wakeup_fd_pipe.h \
 src/core/lib/iomgr/wakeup_fd_posix.h \
 src/core/lib/iomgr/workqueue.h \
-src/core/lib/iomgr/workqueue_posix.h \
+src/core/lib/iomgr/workqueue_uv.h \
 src/core/lib/iomgr/workqueue_windows.h \
 src/core/lib/json/json.h \
 src/core/lib/json/json_common.h \
@@ -863,6 +870,7 @@
 src/core/lib/surface/server.h \
 src/core/lib/transport/byte_stream.h \
 src/core/lib/transport/connectivity_state.h \
+src/core/lib/transport/mdstr_hash_table.h \
 src/core/lib/transport/metadata.h \
 src/core/lib/transport/metadata_batch.h \
 src/core/lib/transport/static_metadata.h \
@@ -914,22 +922,23 @@
 src/core/lib/tsi/ssl_types.h \
 src/core/lib/tsi/transport_security.h \
 src/core/lib/tsi/transport_security_interface.h \
-src/core/ext/client_config/client_channel.h \
-src/core/ext/client_config/client_channel_factory.h \
-src/core/ext/client_config/connector.h \
-src/core/ext/client_config/http_connect_handshaker.h \
-src/core/ext/client_config/initial_connect_string.h \
-src/core/ext/client_config/lb_policy.h \
-src/core/ext/client_config/lb_policy_factory.h \
-src/core/ext/client_config/lb_policy_registry.h \
-src/core/ext/client_config/parse_address.h \
-src/core/ext/client_config/resolver.h \
-src/core/ext/client_config/resolver_factory.h \
-src/core/ext/client_config/resolver_registry.h \
-src/core/ext/client_config/resolver_result.h \
-src/core/ext/client_config/subchannel.h \
-src/core/ext/client_config/subchannel_index.h \
-src/core/ext/client_config/uri_parser.h \
+src/core/ext/client_channel/client_channel.h \
+src/core/ext/client_channel/client_channel_factory.h \
+src/core/ext/client_channel/connector.h \
+src/core/ext/client_channel/http_connect_handshaker.h \
+src/core/ext/client_channel/initial_connect_string.h \
+src/core/ext/client_channel/lb_policy.h \
+src/core/ext/client_channel/lb_policy_factory.h \
+src/core/ext/client_channel/lb_policy_registry.h \
+src/core/ext/client_channel/method_config.h \
+src/core/ext/client_channel/parse_address.h \
+src/core/ext/client_channel/resolver.h \
+src/core/ext/client_channel/resolver_factory.h \
+src/core/ext/client_channel/resolver_registry.h \
+src/core/ext/client_channel/resolver_result.h \
+src/core/ext/client_channel/subchannel.h \
+src/core/ext/client_channel/subchannel_index.h \
+src/core/ext/client_channel/uri_parser.h \
 src/core/ext/lb_policy/grpclb/grpclb.h \
 src/core/ext/lb_policy/grpclb/load_balancer_api.h \
 src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h \
@@ -971,6 +980,7 @@
 src/core/lib/iomgr/combiner.c \
 src/core/lib/iomgr/endpoint.c \
 src/core/lib/iomgr/endpoint_pair_posix.c \
+src/core/lib/iomgr/endpoint_pair_uv.c \
 src/core/lib/iomgr/endpoint_pair_windows.c \
 src/core/lib/iomgr/error.c \
 src/core/lib/iomgr/ev_epoll_linux.c \
@@ -982,36 +992,47 @@
 src/core/lib/iomgr/iocp_windows.c \
 src/core/lib/iomgr/iomgr.c \
 src/core/lib/iomgr/iomgr_posix.c \
+src/core/lib/iomgr/iomgr_uv.c \
 src/core/lib/iomgr/iomgr_windows.c \
 src/core/lib/iomgr/load_file.c \
 src/core/lib/iomgr/network_status_tracker.c \
 src/core/lib/iomgr/polling_entity.c \
+src/core/lib/iomgr/pollset_set_uv.c \
 src/core/lib/iomgr/pollset_set_windows.c \
+src/core/lib/iomgr/pollset_uv.c \
 src/core/lib/iomgr/pollset_windows.c \
 src/core/lib/iomgr/resolve_address_posix.c \
+src/core/lib/iomgr/resolve_address_uv.c \
 src/core/lib/iomgr/resolve_address_windows.c \
 src/core/lib/iomgr/sockaddr_utils.c \
 src/core/lib/iomgr/socket_utils_common_posix.c \
 src/core/lib/iomgr/socket_utils_linux.c \
 src/core/lib/iomgr/socket_utils_posix.c \
+src/core/lib/iomgr/socket_utils_uv.c \
+src/core/lib/iomgr/socket_utils_windows.c \
 src/core/lib/iomgr/socket_windows.c \
 src/core/lib/iomgr/tcp_client_posix.c \
+src/core/lib/iomgr/tcp_client_uv.c \
 src/core/lib/iomgr/tcp_client_windows.c \
 src/core/lib/iomgr/tcp_posix.c \
 src/core/lib/iomgr/tcp_server_posix.c \
+src/core/lib/iomgr/tcp_server_uv.c \
 src/core/lib/iomgr/tcp_server_windows.c \
+src/core/lib/iomgr/tcp_uv.c \
 src/core/lib/iomgr/tcp_windows.c \
 src/core/lib/iomgr/time_averaged_stats.c \
-src/core/lib/iomgr/timer.c \
+src/core/lib/iomgr/timer_generic.c \
 src/core/lib/iomgr/timer_heap.c \
+src/core/lib/iomgr/timer_uv.c \
 src/core/lib/iomgr/udp_server.c \
 src/core/lib/iomgr/unix_sockets_posix.c \
 src/core/lib/iomgr/unix_sockets_posix_noop.c \
+src/core/lib/iomgr/wakeup_fd_cv.c \
 src/core/lib/iomgr/wakeup_fd_eventfd.c \
 src/core/lib/iomgr/wakeup_fd_nospecial.c \
 src/core/lib/iomgr/wakeup_fd_pipe.c \
 src/core/lib/iomgr/wakeup_fd_posix.c \
-src/core/lib/iomgr/workqueue_posix.c \
+src/core/lib/iomgr/workqueue_uv.c \
 src/core/lib/iomgr/workqueue_windows.c \
 src/core/lib/json/json.c \
 src/core/lib/json/json_reader.c \
@@ -1037,6 +1058,7 @@
 src/core/lib/surface/version.c \
 src/core/lib/transport/byte_stream.c \
 src/core/lib/transport/connectivity_state.c \
+src/core/lib/transport/mdstr_hash_table.c \
 src/core/lib/transport/metadata.c \
 src/core/lib/transport/metadata_batch.c \
 src/core/lib/transport/static_metadata.c \
@@ -1072,8 +1094,7 @@
 src/core/lib/security/credentials/credentials.c \
 src/core/lib/security/credentials/credentials_metadata.c \
 src/core/lib/security/credentials/fake/fake_credentials.c \
-src/core/lib/security/credentials/google_default/credentials_posix.c \
-src/core/lib/security/credentials/google_default/credentials_windows.c \
+src/core/lib/security/credentials/google_default/credentials_generic.c \
 src/core/lib/security/credentials/google_default/google_default_credentials.c \
 src/core/lib/security/credentials/iam/iam_credentials.c \
 src/core/lib/security/credentials/jwt/json_token.c \
@@ -1095,25 +1116,26 @@
 src/core/lib/tsi/ssl_transport_security.c \
 src/core/lib/tsi/transport_security.c \
 src/core/ext/transport/chttp2/client/secure/secure_channel_create.c \
-src/core/ext/client_config/channel_connectivity.c \
-src/core/ext/client_config/client_channel.c \
-src/core/ext/client_config/client_channel_factory.c \
-src/core/ext/client_config/client_config_plugin.c \
-src/core/ext/client_config/connector.c \
-src/core/ext/client_config/default_initial_connect_string.c \
-src/core/ext/client_config/http_connect_handshaker.c \
-src/core/ext/client_config/initial_connect_string.c \
-src/core/ext/client_config/lb_policy.c \
-src/core/ext/client_config/lb_policy_factory.c \
-src/core/ext/client_config/lb_policy_registry.c \
-src/core/ext/client_config/parse_address.c \
-src/core/ext/client_config/resolver.c \
-src/core/ext/client_config/resolver_factory.c \
-src/core/ext/client_config/resolver_registry.c \
-src/core/ext/client_config/resolver_result.c \
-src/core/ext/client_config/subchannel.c \
-src/core/ext/client_config/subchannel_index.c \
-src/core/ext/client_config/uri_parser.c \
+src/core/ext/client_channel/channel_connectivity.c \
+src/core/ext/client_channel/client_channel.c \
+src/core/ext/client_channel/client_channel_factory.c \
+src/core/ext/client_channel/client_channel_plugin.c \
+src/core/ext/client_channel/connector.c \
+src/core/ext/client_channel/default_initial_connect_string.c \
+src/core/ext/client_channel/http_connect_handshaker.c \
+src/core/ext/client_channel/initial_connect_string.c \
+src/core/ext/client_channel/lb_policy.c \
+src/core/ext/client_channel/lb_policy_factory.c \
+src/core/ext/client_channel/lb_policy_registry.c \
+src/core/ext/client_channel/method_config.c \
+src/core/ext/client_channel/parse_address.c \
+src/core/ext/client_channel/resolver.c \
+src/core/ext/client_channel/resolver_factory.c \
+src/core/ext/client_channel/resolver_registry.c \
+src/core/ext/client_channel/resolver_result.c \
+src/core/ext/client_channel/subchannel.c \
+src/core/ext/client_channel/subchannel_index.c \
+src/core/ext/client_channel/uri_parser.c \
 src/core/ext/transport/chttp2/server/insecure/server_chttp2.c \
 src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.c \
 src/core/ext/transport/chttp2/client/insecure/channel_create.c \
diff --git a/tools/fuzzer/runners/uri_fuzzer_test.sh b/tools/fuzzer/runners/uri_fuzzer_test.sh
index 84d63bf..316f6c2 100644
--- a/tools/fuzzer/runners/uri_fuzzer_test.sh
+++ b/tools/fuzzer/runners/uri_fuzzer_test.sh
@@ -42,4 +42,4 @@
   flags="-use_traces=1 $flags"
 fi
 
-bins/$config/uri_fuzzer_test $flags fuzzer_output test/core/client_config/uri_corpus
+bins/$config/uri_fuzzer_test $flags fuzzer_output test/core/client_channel/uri_corpus
diff --git a/tools/gce/create_linux_performance_worker.sh b/tools/gce/create_linux_performance_worker.sh
index c9a0ffa..2c8cf0b 100755
--- a/tools/gce/create_linux_performance_worker.sh
+++ b/tools/gce/create_linux_performance_worker.sh
@@ -48,7 +48,8 @@
     --project="$CLOUD_PROJECT" \
     --zone "$ZONE" \
     --machine-type $MACHINE_TYPE \
-    --image ubuntu-15-10 \
+    --image-project ubuntu-os-cloud \
+    --image-family ubuntu-1604-lts \
     --boot-disk-size 300 \
     --scopes https://www.googleapis.com/auth/bigquery
 
diff --git a/tools/gce/linux_performance_worker_init.sh b/tools/gce/linux_performance_worker_init.sh
index ea80d74..523749e 100755
--- a/tools/gce/linux_performance_worker_init.sh
+++ b/tools/gce/linux_performance_worker_init.sh
@@ -90,6 +90,16 @@
 # Python dependencies
 sudo pip install tabulate
 sudo pip install google-api-python-client
+sudo pip install virtualenv
+
+# TODO(jtattermusch): For some reason, building gRPC Python depends on python3.4
+# being installed, but python3.4 is not available on Ubuntu 16.04.
+# Temporarily fixing this by adding a PPA with python3.4, but we should
+# really remove this hack once possible.
+sudo add-apt-repository -y ppa:fkrull/deadsnakes
+sudo apt-get update
+sudo apt-get install -y python3.4 python3.4-dev
+python3.4 -m pip install virtualenv
 
 curl -O https://bootstrap.pypa.io/get-pip.py
 sudo pypy get-pip.py
@@ -105,17 +115,17 @@
 nvm install 5 && npm config set cache /tmp/npm-cache
 nvm alias default 4
 
-# C# dependencies (http://www.mono-project.com/docs/getting-started/install/linux/#debian-ubuntu-and-derivatives)
-
+# C# mono dependencies (http://www.mono-project.com/docs/getting-started/install/linux/#debian-ubuntu-and-derivatives)
 sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
 echo "deb http://download.mono-project.com/repo/debian wheezy main" | sudo tee /etc/apt/sources.list.d/mono-xamarin.list
 sudo apt-get update
 sudo apt-get install -y mono-devel nuget
 
-# The version of nuget that is installed using apt-get is too old to download
-# the System.Interactive.Async.3.0.0 C# dependency. Update to the latest version
-# in order to be able download it.
-sudo nuget update -self
+# C# .NET Core dependencies (https://www.microsoft.com/net/core#ubuntu)
+sudo sh -c 'echo "deb [arch=amd64] https://apt-mo.trafficmanager.net/repos/dotnet-release/ xenial main" > /etc/apt/sources.list.d/dotnetdev.list'
+sudo apt-key adv --keyserver apt-mo.trafficmanager.net --recv-keys 417A0893
+sudo apt-get update
+sudo apt-get install -y dotnet-dev-1.0.0-preview2-003131
 
 # Ruby dependencies
 gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3
@@ -128,4 +138,15 @@
 # Java dependencies - nothing as we already have Java JDK 8
 
 # Go dependencies
-sudo apt-get install -y golang-go
+# Currently, the golang package available via apt-get doesn't have the latest go.
+# Significant performance improvements with grpc-go have been observed after
+# upgrading from go 1.5 to a later version, so a later go version is preferred.
+# Following go install instructions from https://golang.org/doc/install
+GO_VERSION=1.7.1
+OS=linux
+ARCH=amd64
+curl -O https://storage.googleapis.com/golang/go${GO_VERSION}.${OS}-${ARCH}.tar.gz
+sudo tar -C /usr/local -xzf go$GO_VERSION.$OS-$ARCH.tar.gz
+# Put go on the PATH, keep the usual installation dir
+sudo ln -s /usr/local/go/bin/go /usr/bin/go
+rm go$GO_VERSION.$OS-$ARCH.tar.gz
diff --git a/tools/jenkins/run_sweep_performance.sh b/tools/jenkins/run_sweep_performance.sh
index 6cd7a91..3b22e25 100755
--- a/tools/jenkins/run_sweep_performance.sh
+++ b/tools/jenkins/run_sweep_performance.sh
@@ -31,6 +31,9 @@
 # This script is invoked by Jenkins and runs full performance test suite.
 set -ex
 
+SERVER_HOST=${1:-grpc-performance-server-32core}
+CLIENT_HOST1=${2:-grpc-performance-client-32core}
+CLIENT_HOST2=${3:-grpc-performance-client2-32core}
 # Enter the gRPC repo root
 cd $(dirname $0)/../..
 
@@ -39,7 +42,7 @@
     -l c++ \
     --category sweep \
     --bq_result_table performance_test.performance_experiment_32core \
-    --remote_worker_host grpc-performance-server-32core grpc-performance-client-32core grpc-performance-client2-32core \
+    --remote_worker_host ${SERVER_HOST} ${CLIENT_HOST1} ${CLIENT_HOST2} \
     || EXIT_CODE=1
 
 exit $EXIT_CODE
diff --git a/tools/profiling/perf/run_perf_unconstrained.sh b/tools/profiling/perf/run_perf_unconstrained.sh
new file mode 100755
index 0000000..dbfd282
--- /dev/null
+++ b/tools/profiling/perf/run_perf_unconstrained.sh
@@ -0,0 +1,95 @@
+#!/bin/bash
+# Copyright 2016, Google Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+#     * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#     * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+#     * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+# format argument via
+# $ echo '{...}' | python -mjson.tool
+read -r -d '' SCENARIOS_JSON_ARG <<'EOF'
+{
+    "scenarios": [
+        {
+            "benchmark_seconds": 60,
+            "warmup_seconds": 5,
+            "client_config": {
+                "client_channels": 100,
+                "client_type": "ASYNC_CLIENT",
+                "histogram_params": {
+                    "max_possible": 60000000000.0,
+                    "resolution": 0.01
+                },
+                "load_params": {
+                    "closed_loop": {}
+                },
+                "outstanding_rpcs_per_channel": 100,
+                "payload_config": {
+                    "simple_params": {
+                        "req_size": 0,
+                        "resp_size": 0
+                    }
+                },
+                "rpc_type": "UNARY",
+                "security_params": null
+            },
+            "name": "name_goes_here",
+            "num_clients": 1,
+            "num_servers": 1,
+            "server_config": {
+                "security_params": null,
+                "server_type": "ASYNC_SERVER"
+            },
+            "spawn_local_worker_count": -2
+        }
+    ]
+}
+
+EOF
+
+set -ex
+
+cd $(dirname $0)/../../..
+
+CPUS=`python -c 'import multiprocessing; print multiprocessing.cpu_count()'`
+
+# try to use pypy for generating reports
+# each trace dumps 7-8gig of text to disk, and processing this into a report is
+# heavyweight - so any speed boost is worthwhile
+# TODO(ctiller): consider rewriting report generation in C++ for performance
+if which pypy >/dev/null; then
+  PYTHON=pypy
+else
+  PYTHON=python2.7
+fi
+
+export config=mutrace
+
+make CONFIG=$config -j$CPUS qps_json_driver
+
+sudo perf record -F 997 -g bins/$config/qps_json_driver --scenarios_json="$SCENARIOS_JSON_ARG"
+sudo perf report
+
diff --git a/tools/run_tests/filter_pull_request_tests.py b/tools/run_tests/filter_pull_request_tests.py
new file mode 100644
index 0000000..e2027a2
--- /dev/null
+++ b/tools/run_tests/filter_pull_request_tests.py
@@ -0,0 +1,195 @@
+#!/usr/bin/env python2.7
+# Copyright 2015, Google Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+#     * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#     * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+#     * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+"""Filter out tests based on file differences compared to merge target branch"""
+
+import re
+from subprocess import call, check_output
+
+
+class TestSuite:
+  """
+  Contains label to identify job as belonging to this test suite and
+  triggers to identify if changed files are relevant
+  """
+  def __init__(self, labels):
+    """
+    Build TestSuite to group tests based on labeling
+    :param label: strings that should match a jobs's platform, config, language, or test group
+    """
+    self.triggers = []
+    self.labels = labels
+
+  def add_trigger(self, trigger):
+    """
+    Add a regex to list of triggers that determine if a changed file should run tests
+    :param trigger: regex matching file relevant to tests
+    """
+    self.triggers.append(trigger)
+
+
+# Create test suites
+_SANITY_TEST_SUITE = TestSuite(['sanity'])
+_CORE_TEST_SUITE = TestSuite(['c'])
+_CPP_TEST_SUITE = TestSuite(['c++'])
+_CSHARP_TEST_SUITE = TestSuite(['csharp'])
+_NODE_TEST_SUITE = TestSuite(['node'])
+_OBJC_TEST_SUITE = TestSuite(['objc'])
+_PHP_TEST_SUITE = TestSuite(['php', 'php7'])
+_PYTHON_TEST_SUITE = TestSuite(['python'])
+_RUBY_TEST_SUITE = TestSuite(['ruby'])
+_LINUX_TEST_SUITE = TestSuite(['linux'])
+_WINDOWS_TEST_SUITE = TestSuite(['windows'])
+_MACOS_TEST_SUITE = TestSuite(['macos'])
+_ALL_TEST_SUITES = [_SANITY_TEST_SUITE, _CORE_TEST_SUITE, _CPP_TEST_SUITE,
+                    _CSHARP_TEST_SUITE, _NODE_TEST_SUITE, _OBJC_TEST_SUITE,
+                    _PHP_TEST_SUITE, _PYTHON_TEST_SUITE, _RUBY_TEST_SUITE,
+                    _LINUX_TEST_SUITE, _WINDOWS_TEST_SUITE, _MACOS_TEST_SUITE]
+
+# Dictionary of whitelistable files where the key is a regex matching changed files
+# and the value is a list of tests that should be run. An empty list means that
+# the changed files should not trigger any tests. Any changed file that does not
+# match any of these regexes will trigger all tests
+_WHITELIST_DICT = {
+  '^doc/': [],
+  '^examples/': [],
+  '^include/grpc\+\+/': [_CPP_TEST_SUITE],
+  '^summerofcode/': [],
+  '^src/cpp/': [_CPP_TEST_SUITE],
+  '^src/csharp/': [_CSHARP_TEST_SUITE],
+  '^src/node/': [_NODE_TEST_SUITE],
+  '^src/objective\-c/': [_OBJC_TEST_SUITE],
+  '^src/php/': [_PHP_TEST_SUITE],
+  '^src/python/': [_PYTHON_TEST_SUITE],
+  '^src/ruby/': [_RUBY_TEST_SUITE],
+  '^templates/': [_SANITY_TEST_SUITE],
+  '^test/core/': [_CORE_TEST_SUITE],
+  '^test/cpp/': [_CPP_TEST_SUITE],
+  '^test/distrib/cpp/': [_CPP_TEST_SUITE],
+  '^test/distrib/csharp/': [_CSHARP_TEST_SUITE],
+  '^test/distrib/node/': [_NODE_TEST_SUITE],
+  '^test/distrib/php/': [_PHP_TEST_SUITE],
+  '^test/distrib/python/': [_PYTHON_TEST_SUITE],
+  '^test/distrib/ruby/': [_RUBY_TEST_SUITE],
+  '^vsprojects/': [_WINDOWS_TEST_SUITE],
+  'binding\.gyp$': [_NODE_TEST_SUITE],
+  'composer\.json$': [_PHP_TEST_SUITE],
+  'config\.m4$': [_PHP_TEST_SUITE],
+  'CONTRIBUTING\.md$': [],
+  'Gemfile$': [_RUBY_TEST_SUITE],
+  'grpc.def$': [_WINDOWS_TEST_SUITE],
+  'grpc\.gemspec$': [_RUBY_TEST_SUITE],
+  'gRPC\.podspec$': [_OBJC_TEST_SUITE],
+  'gRPC\-Core\.podspec$': [_OBJC_TEST_SUITE],
+  'gRPC\-ProtoRPC\.podspec$': [_OBJC_TEST_SUITE],
+  'gRPC\-RxLibrary\.podspec$': [_OBJC_TEST_SUITE],
+  'INSTALL\.md$': [],
+  'LICENSE$': [],
+  'MANIFEST\.md$': [],
+  'package\.json$': [_PHP_TEST_SUITE],
+  'package\.xml$': [_PHP_TEST_SUITE],
+  'PATENTS$': [],
+  'PYTHON\-MANIFEST\.in$': [_PYTHON_TEST_SUITE],
+  'README\.md$': [],
+  'requirements\.txt$': [_PYTHON_TEST_SUITE],
+  'setup\.cfg$': [_PYTHON_TEST_SUITE],
+  'setup\.py$': [_PYTHON_TEST_SUITE]
+}
+
+# Add all triggers to their respective test suites
+for trigger, test_suites in _WHITELIST_DICT.iteritems():
+  for test_suite in test_suites:
+    test_suite.add_trigger(trigger)
+
+
+def _get_changed_files(base_branch):
+  """
+  Get list of changed files between current branch and base of target merge branch
+  """
+  # Get file changes between branch and merge-base of specified branch
+  # Not combined to be Windows friendly
+  base_commit = check_output(["git", "merge-base", base_branch, "HEAD"]).rstrip()
+  return check_output(["git", "diff", base_commit, "--name-only"]).splitlines()
+
+
+def _can_skip_tests(file_names, triggers):
+  """
+  Determines if tests are skippable based on if all files do not match list of regexes
+  :param file_names: list of changed files generated by _get_changed_files()
+  :param triggers: list of regexes matching file name that indicates tests should be run
+  :return: safe to skip tests
+  """
+  for file_name in file_names:
+    if any(re.match(trigger, file_name) for trigger in triggers):
+      return False
+  return True
+
+
+def _remove_irrelevant_tests(tests, skippable_labels):
+  """
+  Filters out tests by config or language - will not remove sanitizer tests
+  :param tests: list of all tests generated by run_tests_matrix.py
+  :param skippable_labels: list of languages and platforms with skippable tests
+  :return: list of relevant tests
+  """
+  # test.labels[0] is platform and test.labels[2] is language
+  # We skip a test if both are considered safe to skip
+  return [test for test in tests if test.labels[0] not in skippable_labels or \
+          test.labels[2] not in skippable_labels]
+
+
+def filter_tests(tests, base_branch):
+  """
+  Filters out tests that are safe to ignore
+  :param tests: list of all tests generated by run_tests_matrix.py
+  :return: list of relevant tests
+  """
+  print("Finding file differences between gRPC %s branch and pull request...\n" % base_branch)
+  changed_files = _get_changed_files(base_branch)
+  for changed_file in changed_files:
+    print(changed_file)
+  print
+
+  # Regex that combines all keys in _WHITELIST_DICT
+  all_triggers = "(" + ")|(".join(_WHITELIST_DICT.keys()) + ")"
+  # Check if all tests have to be run
+  for changed_file in changed_files:
+    if not re.match(all_triggers, changed_file):
+      return(tests)
+  # Figure out which language and platform tests to run
+  skippable_labels = []
+  for test_suite in _ALL_TEST_SUITES:
+    if _can_skip_tests(changed_files, test_suite.triggers):
+      for label in test_suite.labels:
+        print("  Filtering %s tests" % label)
+        skippable_labels.append(label)
+
+  tests = _remove_irrelevant_tests(tests, skippable_labels)
+  return tests
diff --git a/tools/run_tests/performance/build_performance.sh b/tools/run_tests/performance/build_performance.sh
index 352c679..e981cae 100755
--- a/tools/run_tests/performance/build_performance.sh
+++ b/tools/run_tests/performance/build_performance.sh
@@ -54,6 +54,9 @@
   "go")
     tools/run_tests/performance/build_performance_go.sh
     ;;
+  "csharp")
+    tools/run_tests/run_tests.py -l $language -c $CONFIG --build_only -j 8 --compiler coreclr
+    ;;
   *)
     tools/run_tests/run_tests.py -l $language -c $CONFIG --build_only -j 8
     ;;
diff --git a/tools/run_tests/performance/kill_workers.sh b/tools/run_tests/performance/kill_workers.sh
index 279cc7d..6e33efa 100755
--- a/tools/run_tests/performance/kill_workers.sh
+++ b/tools/run_tests/performance/kill_workers.sh
@@ -40,6 +40,7 @@
 
 # C#
 ps -C mono -o pid=,cmd= | grep QpsWorker | awk '{print $1}' | xargs kill -9 || true
+ps -C dotnet -o pid=,cmd= | grep QpsWorker | awk '{print $1}' | xargs kill -9 || true
 
 # Ruby
 ps -C ruby -o pid=,cmd= | grep 'qps/worker.rb' | awk '{print $1}' | xargs kill -9 || true
diff --git a/tools/run_tests/performance/run_worker_csharp.sh b/tools/run_tests/performance/run_worker_csharp.sh
index b91df09..b4c5ec2 100755
--- a/tools/run_tests/performance/run_worker_csharp.sh
+++ b/tools/run_tests/performance/run_worker_csharp.sh
@@ -33,6 +33,6 @@
 cd $(dirname $0)/../../..
 
 # needed to correctly locate testca
-cd src/csharp/Grpc.IntegrationTesting.QpsWorker/bin/Release
+cd src/csharp/Grpc.IntegrationTesting.QpsWorker/bin/Release/netcoreapp1.0
 
-mono Grpc.IntegrationTesting.QpsWorker.exe $@
+dotnet exec Grpc.IntegrationTesting.QpsWorker.dll $@
diff --git a/tools/run_tests/performance/scenario_config.py b/tools/run_tests/performance/scenario_config.py
index 725ca29..c1a23a9 100644
--- a/tools/run_tests/performance/scenario_config.py
+++ b/tools/run_tests/performance/scenario_config.py
@@ -219,6 +219,16 @@
           server_core_limit=1, async_server_threads=1,
           secure=secure)
 
+      yield _ping_pong_scenario(
+          'cpp_protobuf_async_client_sync_server_unary_qps_unconstrained_%s' %
+          (secstr),
+          rpc_type='UNARY',
+          client_type='ASYNC_CLIENT',
+          server_type='SYNC_SERVER',
+          unconstrained_client='async',
+          secure=secure,
+          categories=smoketest_categories + [SCALABLE])
+
       for rpc_type in ['unary', 'streaming']:
         for synchronicity in ['sync', 'async']:
           yield _ping_pong_scenario(
@@ -361,6 +371,11 @@
         categories=[SCALABLE, SMOKETEST])
 
     yield _ping_pong_scenario(
+        'cpp_to_node_unary_ping_pong', rpc_type='UNARY',
+        client_type='ASYNC_CLIENT', server_type='async_server',
+        client_language='c++')
+
+    yield _ping_pong_scenario(
         'node_protobuf_async_unary_qps_unconstrained', rpc_type='UNARY',
         client_type='ASYNC_CLIENT', server_type='ASYNC_SERVER',
         unconstrained_client='async',
diff --git a/tools/run_tests/report_utils.py b/tools/run_tests/report_utils.py
index 5648a69..efe5dc9 100644
--- a/tools/run_tests/report_utils.py
+++ b/tools/run_tests/report_utils.py
@@ -57,11 +57,12 @@
     return msg
 
 
-def render_junit_xml_report(resultset, xml_report):
+def render_junit_xml_report(resultset, xml_report, suite_package='grpc',
+                            suite_name='tests'):
   """Generate JUnit-like XML report."""
   root = ET.Element('testsuites')
-  testsuite = ET.SubElement(root, 'testsuite', id='1', package='grpc', 
-                            name='tests')
+  testsuite = ET.SubElement(root, 'testsuite', id='1', package=suite_package,
+                            name=suite_name)
   for shortname, results in resultset.items():
     for result in results:
       xml_test = ET.SubElement(testsuite, 'testcase', name=shortname) 
diff --git a/tools/run_tests/run_interop_tests.py b/tools/run_tests/run_interop_tests.py
index 389d070..29f6533 100755
--- a/tools/run_tests/run_interop_tests.py
+++ b/tools/run_tests/run_interop_tests.py
@@ -64,8 +64,9 @@
 
 _SKIP_COMPRESSION = _SKIP_CLIENT_COMPRESSION + _SKIP_SERVER_COMPRESSION
 
-_SKIP_ADVANCED = ['custom_metadata', 'status_code_and_message',
-                  'unimplemented_method']
+_SKIP_ADVANCED_GO = ['custom_metadata', 'unimplemented_method']
+
+_SKIP_ADVANCED = _SKIP_ADVANCED_GO + ['status_code_and_message']
 
 _TEST_TIMEOUT = 3*60
 
@@ -89,10 +90,10 @@
     return {}
 
   def unimplemented_test_cases(self):
-    return _SKIP_ADVANCED
+    return []
 
   def unimplemented_test_cases_server(self):
-    return _SKIP_ADVANCED
+    return []
 
   def __str__(self):
     return 'c++'
@@ -206,10 +207,10 @@
     return {}
 
   def unimplemented_test_cases(self):
-    return _SKIP_ADVANCED + _SKIP_COMPRESSION
+    return _SKIP_ADVANCED_GO + _SKIP_COMPRESSION
 
   def unimplemented_test_cases_server(self):
-    return _SKIP_ADVANCED + _SKIP_COMPRESSION
+    return _SKIP_ADVANCED_GO + _SKIP_COMPRESSION
 
   def __str__(self):
     return 'go'
diff --git a/tools/run_tests/run_performance_tests.py b/tools/run_tests/run_performance_tests.py
index 9214911..099ab89 100755
--- a/tools/run_tests/run_performance_tests.py
+++ b/tools/run_tests/run_performance_tests.py
@@ -91,12 +91,11 @@
   else:
     host_and_port='localhost:%s' % port
 
-  # TODO(jtattermusch): with some care, we can calculate the right timeout
-  # of a worker from the sum of warmup + benchmark times for all the scenarios
   jobspec = jobset.JobSpec(
       cmdline=cmdline,
       shortname=shortname,
-      timeout_seconds=2*60*60)
+      timeout_seconds=5*60,  # workers get restarted after each scenario
+      verbose_success=True)
   return QpsWorkerJob(jobspec, language, host_and_port)
 
 
@@ -357,6 +356,7 @@
 def finish_qps_workers(jobs):
   """Waits for given jobs to finish and eventually kills them."""
   retries = 0
+  num_killed = 0
   while any(job.is_running() for job in jobs):
     for job in qpsworker_jobs:
       if job.is_running():
@@ -365,10 +365,11 @@
       print('Killing all QPS workers.')
       for job in jobs:
         job.kill()
+        num_killed += 1
     retries += 1
     time.sleep(3)
   print('All QPS workers finished.')
-
+  return num_killed
 
 argp = argparse.ArgumentParser(description='Run performance tests.')
 argp.add_argument('-l', '--language',
@@ -450,6 +451,8 @@
 if not scenarios:
   raise Exception('No scenarios to run')
 
+total_scenario_failures = 0
+qps_workers_killed = 0
 for scenario in scenarios:
   if args.dry_run:
     print(scenario.name)
@@ -457,8 +460,14 @@
     try:
       for worker in scenario.workers:
         worker.start()
-      jobset.run([scenario.jobspec,
-                  create_quit_jobspec(scenario.workers, remote_host=args.remote_driver_host)],
-                 newline_on_success=True, maxjobs=1)
+      scenario_failures, _ = jobset.run([scenario.jobspec,
+                                 create_quit_jobspec(scenario.workers, remote_host=args.remote_driver_host)],
+                                 newline_on_success=True, maxjobs=1)
+      total_scenario_failures += scenario_failures
     finally:
-      finish_qps_workers(scenario.workers)
+      # Consider qps workers that need to be killed as failures
+      qps_workers_killed += finish_qps_workers(scenario.workers)
+
+if total_scenario_failures > 0 or qps_workers_killed > 0:
+  print ("%s scenarios failed and %s qps worker jobs killed" % (total_scenario_failures, qps_workers_killed))
+  sys.exit(1)
diff --git a/tools/run_tests/run_tests.py b/tools/run_tests/run_tests.py
index a6f3d40..db261d9 100755
--- a/tools/run_tests/run_tests.py
+++ b/tools/run_tests/run_tests.py
@@ -69,7 +69,7 @@
 
 
 _POLLING_STRATEGIES = {
-  'linux': ['epoll', 'poll', 'legacy']
+  'linux': ['epoll', 'poll', 'poll-cv', 'legacy']
 }
 
 
@@ -83,7 +83,7 @@
 # SimpleConfig: just compile with CONFIG=config, and run the binary to test
 class Config(object):
 
-  def __init__(self, config, environ=None, timeout_multiplier=1, tool_prefix=[]):
+  def __init__(self, config, environ=None, timeout_multiplier=1, tool_prefix=[], iomgr_platform='native'):
     if environ is None:
       environ = {}
     self.build_config = config
@@ -91,6 +91,7 @@
     self.environ['CONFIG'] = config
     self.tool_prefix = tool_prefix
     self.timeout_multiplier = timeout_multiplier
+    self.iomgr_platform = iomgr_platform
 
   def job_spec(self, cmdline, timeout_seconds=_DEFAULT_TIMEOUT_SECONDS,
                shortname=None, environ={}, cpu_cost=1.0, flaky=False):
@@ -202,6 +203,18 @@
     else:
       self._docker_distro, self._make_options = self._compiler_options(self.args.use_docker,
                                                                        self.args.compiler)
+    if args.iomgr_platform == "uv":
+      cflags = '-DGRPC_UV '
+      try:
+        cflags += subprocess.check_output(['pkg-config', '--cflags', 'libuv']).strip() + ' '
+      except (subprocess.CalledProcessError, OSError):
+        pass
+      try:
+        ldflags = subprocess.check_output(['pkg-config', '--libs', 'libuv']).strip() + ' '
+      except (subprocess.CalledProcessError, OSError):
+        ldflags = '-luv '
+      self._make_options += ['EXTRA_CPPFLAGS={}'.format(cflags),
+                             'EXTRA_LDLIBS={}'.format(ldflags)]
 
   def test_specs(self):
     out = []
@@ -210,6 +223,8 @@
       polling_strategies = (_POLLING_STRATEGIES.get(self.platform, ['all'])
                             if target.get('uses_polling', True)
                             else ['all'])
+      if self.args.iomgr_platform == 'uv':
+        polling_strategies = ['all']
       for polling_strategy in polling_strategies:
         env={'GRPC_DEFAULT_SSL_ROOTS_FILE_PATH':
                  _ROOT + '/src/core/lib/tsi/test_creds/ca.pem',
@@ -218,6 +233,8 @@
         shortname_ext = '' if polling_strategy=='all' else ' GRPC_POLL_STRATEGY=%s' % polling_strategy
         if self.config.build_config in target['exclude_configs']:
           continue
+        if self.args.iomgr_platform in target.get('exclude_iomgrs', []):
+          continue
         if self.platform == 'windows':
           binary = 'vsprojects/%s%s/%s.exe' % (
               'x64/' if self.args.arch == 'x64' else '',
@@ -1002,6 +1019,10 @@
                            'coreclr'],
                   default='default',
                   help='Selects compiler to use. Allowed values depend on the platform and language.')
+argp.add_argument('--iomgr_platform',
+                  choices=['native', 'uv'],
+                  default='native',
+                  help='Selects iomgr platform to build on')
 argp.add_argument('--build_only',
                   default=False,
                   action='store_const',
@@ -1015,6 +1036,8 @@
 argp.add_argument('-a', '--antagonists', default=0, type=int)
 argp.add_argument('-x', '--xml_report', default=None, type=str,
         help='Generates a JUnit-compatible XML report')
+argp.add_argument('--report_suite_name', default='tests', type=str,
+        help='Test suite name to use in generated JUnit XML report')
 argp.add_argument('--force_default_poller', default=False, action='store_const', const=True,
                   help='Dont try to iterate over many polling strategies when they exist')
 args = argp.parse_args()
@@ -1327,7 +1350,8 @@
 
   if build_only:
     if xml_report:
-      report_utils.render_junit_xml_report(resultset, xml_report)
+      report_utils.render_junit_xml_report(resultset, xml_report,
+                                           suite_name=args.report_suite_name)
     return []
 
   # start antagonists
@@ -1379,7 +1403,8 @@
     for antagonist in antagonists:
       antagonist.kill()
     if xml_report and resultset:
-      report_utils.render_junit_xml_report(resultset, xml_report)
+      report_utils.render_junit_xml_report(resultset, xml_report,
+                                           suite_name=args.report_suite_name)
 
   number_failures, _ = jobset.run(
       post_tests_steps, maxjobs=1, stop_on_failure=True,
diff --git a/tools/run_tests/run_tests_matrix.py b/tools/run_tests/run_tests_matrix.py
index a94f9cf..b65010a 100755
--- a/tools/run_tests/run_tests_matrix.py
+++ b/tools/run_tests/run_tests_matrix.py
@@ -36,13 +36,14 @@
 import os
 import report_utils
 import sys
+from filter_pull_request_tests import filter_tests
 
 _ROOT = os.path.abspath(os.path.join(os.path.dirname(sys.argv[0]), '../..'))
 os.chdir(_ROOT)
 
 # Set the timeout high to allow enough time for sanitizers and pre-building
 # clang docker.
-_RUNTESTS_TIMEOUT = 2*60*60
+_RUNTESTS_TIMEOUT = 4*60*60
 
 # Number of jobs assigned to each run_tests.py instance
 _INNER_JOBS = 2
@@ -55,7 +56,8 @@
                    '--use_docker',
                    '-t',
                    '-j', str(_INNER_JOBS),
-                   '-x', 'report_%s.xml' % name] + runtests_args,
+                   '-x', 'report_%s.xml' % name,
+                   '--report_suite_name', '%s' % name] + runtests_args,
           shortname='run_tests_%s' % name,
           timeout_seconds=_RUNTESTS_TIMEOUT)
   return test_job
@@ -70,7 +72,8 @@
           cmdline=['tools/run_tests/run_tests_in_workspace.sh',
                    '-t',
                    '-j', str(_INNER_JOBS),
-                   '-x', '../report_%s.xml' % name] + runtests_args,
+                   '-x', '../report_%s.xml' % name,
+                   '--report_suite_name', '%s' % name] + runtests_args,
           environ=env,
           shortname='run_tests_%s' % name,
           timeout_seconds=_RUNTESTS_TIMEOUT)
@@ -111,28 +114,28 @@
                              platforms=['linux'],
                              labels=['basictests'],
                              extra_args=extra_args)
-  
+
   # supported on all platforms.
   test_jobs += _generate_jobs(languages=['c', 'csharp', 'node', 'python'],
                              configs=['dbg', 'opt'],
                              platforms=['linux', 'macos', 'windows'],
                              labels=['basictests'],
                              extra_args=extra_args)
-  
+
   # supported on linux and mac.
   test_jobs += _generate_jobs(languages=['c++', 'ruby', 'php'],
                               configs=['dbg', 'opt'],
                               platforms=['linux', 'macos'],
                               labels=['basictests'],
                               extra_args=extra_args)
-  
+
   # supported on mac only.
   test_jobs += _generate_jobs(languages=['objc'],
                               configs=['dbg', 'opt'],
                               platforms=['macos'],
                               labels=['basictests'],
                               extra_args=extra_args)
-  
+
   # sanitizers
   test_jobs += _generate_jobs(languages=['c'],
                               configs=['msan', 'asan', 'tsan'],
@@ -144,9 +147,17 @@
                               platforms=['linux'],
                               labels=['sanitizers'],
                               extra_args=extra_args)
+
+  # libuv tests
+  test_jobs += _generate_jobs(languages=['c'],
+                              configs=['dbg', 'opt'],
+                              platforms=['linux'],
+                              labels=['libuv'],
+                              extra_args=extra_args + ['--iomgr_platform=uv'])
+
   return test_jobs
 
-  
+
 def _create_portability_test_jobs(extra_args=[]):
   test_jobs = []
   # portability C x86
@@ -157,7 +168,7 @@
                               compiler='default',
                               labels=['portability'],
                               extra_args=extra_args)
-  
+
   # portability C and C++ on x64
   for compiler in ['gcc4.4', 'gcc4.6', 'gcc5.3',
                    'clang3.5', 'clang3.6', 'clang3.7']:
@@ -168,7 +179,7 @@
                                 compiler=compiler,
                                 labels=['portability'],
                                 extra_args=extra_args)
-  
+
   # portability C on Windows
   for arch in ['x86', 'x64']:
     for compiler in ['vs2013', 'vs2015']:
@@ -179,7 +190,7 @@
                                   compiler=compiler,
                                   labels=['portability'],
                                   extra_args=extra_args)
-  
+
   test_jobs += _generate_jobs(languages=['python'],
                               configs=['dbg'],
                               platforms=['linux'],
@@ -187,7 +198,7 @@
                               compiler='python3.4',
                               labels=['portability'],
                               extra_args=extra_args)
-  
+
   test_jobs += _generate_jobs(languages=['csharp'],
                               configs=['dbg'],
                               platforms=['linux'],
@@ -195,7 +206,7 @@
                               compiler='coreclr',
                               labels=['portability'],
                               extra_args=extra_args)
-  return test_jobs  
+  return test_jobs
 
 
 def _allowed_labels():
@@ -229,6 +240,15 @@
                   action='store_const',
                   const=True,
                   help='Only print what would be run.')
+argp.add_argument('--filter_pr_tests',
+	          default=False,
+		  action='store_const',	
+		  const=True,	  
+		  help='Filters out tests irrelavant to pull request changes.')
+argp.add_argument('--base_branch',
+                  default='origin/master',
+                  type=str,
+                  help='Branch that pull request is requesting to merge into')
 args = argp.parse_args()
 
 extra_args = []
@@ -248,12 +268,12 @@
   jobset.message('FAILED', 'No test suites match given criteria.',
                  do_newline=True)
   sys.exit(1)
-  
+
 print('IMPORTANT: The changes you are testing need to be locally committed')
 print('because only the committed changes in the current branch will be')
 print('copied to the docker environment or into subworkspaces.')
 
-print 
+print
 print 'Will run these tests:'
 for job in jobs:
   if args.dry_run:
@@ -262,6 +282,19 @@
     print '  %s' % job.shortname
 print
 
+if args.filter_pr_tests:
+  print 'IMPORTANT: Test filtering is not active; this is only for testing.'
+  relevant_jobs = filter_tests(jobs, args.base_branch)
+  # todo(mattkwong): add skipped tests to report.xml
+  print
+  if len(relevant_jobs) == len(jobs):
+    print '(TESTING) No tests will be skipped.'
+  else:
+    print '(TESTING) These tests will be skipped:'
+    for job in list(set(jobs) - set(relevant_jobs)):
+      print '  %s' % job.shortname
+  print
+
 if args.dry_run:
   print '--dry_run was used, exiting'
   sys.exit(1)
@@ -271,7 +304,8 @@
                                      newline_on_success=True,
                                      travis=True,
                                      maxjobs=args.jobs)
-report_utils.render_junit_xml_report(resultset, 'report.xml')
+report_utils.render_junit_xml_report(resultset, 'report.xml',
+                                     suite_name='aggregate_tests')
 
 if num_failures == 0:
   jobset.message('SUCCESS', 'All run_tests.py instance finished successfully.',
diff --git a/tools/run_tests/sources_and_headers.json b/tools/run_tests/sources_and_headers.json
index c05d194..02cf4eb 100644
--- a/tools/run_tests/sources_and_headers.json
+++ b/tools/run_tests/sources_and_headers.json
@@ -365,7 +365,7 @@
     "language": "c", 
     "name": "dns_resolver_connectivity_test", 
     "src": [
-      "test/core/client_config/resolvers/dns_resolver_connectivity_test.c"
+      "test/core/client_channel/resolvers/dns_resolver_connectivity_test.c"
     ], 
     "third_party": false, 
     "type": "target"
@@ -382,7 +382,7 @@
     "language": "c", 
     "name": "dns_resolver_test", 
     "src": [
-      "test/core/client_config/resolvers/dns_resolver_test.c"
+      "test/core/client_channel/resolvers/dns_resolver_test.c"
     ], 
     "third_party": false, 
     "type": "target"
@@ -1480,7 +1480,7 @@
     "language": "c", 
     "name": "lb_policies_test", 
     "src": [
-      "test/core/client_config/lb_policies_test.c"
+      "test/core/client_channel/lb_policies_test.c"
     ], 
     "third_party": false, 
     "type": "target"
@@ -1802,7 +1802,7 @@
     "language": "c", 
     "name": "set_initial_connect_string_test", 
     "src": [
-      "test/core/client_config/set_initial_connect_string_test.c"
+      "test/core/client_channel/set_initial_connect_string_test.c"
     ], 
     "third_party": false, 
     "type": "target"
@@ -1819,7 +1819,7 @@
     "language": "c", 
     "name": "sockaddr_resolver_test", 
     "src": [
-      "test/core/client_config/resolvers/sockaddr_resolver_test.c"
+      "test/core/client_channel/resolvers/sockaddr_resolver_test.c"
     ], 
     "third_party": false, 
     "type": "target"
@@ -2057,7 +2057,7 @@
     "language": "c", 
     "name": "uri_fuzzer_test", 
     "src": [
-      "test/core/client_config/uri_fuzzer_test.c"
+      "test/core/client_channel/uri_fuzzer_test.c"
     ], 
     "third_party": false, 
     "type": "target"
@@ -2074,7 +2074,24 @@
     "language": "c", 
     "name": "uri_parser_test", 
     "src": [
-      "test/core/client_config/uri_parser_test.c"
+      "test/core/client_channel/uri_parser_test.c"
+    ], 
+    "third_party": false, 
+    "type": "target"
+  }, 
+  {
+    "deps": [
+      "gpr", 
+      "gpr_test_util", 
+      "grpc", 
+      "grpc_test_util"
+    ], 
+    "headers": [], 
+    "is_filegroup": false, 
+    "language": "c", 
+    "name": "wakeup_fd_cv_test", 
+    "src": [
+      "test/core/iomgr/wakeup_fd_cv_test.c"
     ], 
     "third_party": false, 
     "type": "target"
@@ -2678,6 +2695,7 @@
       "gpr", 
       "gpr_test_util", 
       "grpc", 
+      "grpc++_test_config", 
       "grpc_test_util"
     ], 
     "headers": [], 
@@ -2983,6 +3001,25 @@
       "gpr_test_util", 
       "grpc", 
       "grpc++", 
+      "grpc++_test", 
+      "grpc_test_util"
+    ], 
+    "headers": [], 
+    "is_filegroup": false, 
+    "language": "c++", 
+    "name": "server_context_test_spouse_test", 
+    "src": [
+      "test/cpp/test/server_context_test_spouse_test.cc"
+    ], 
+    "third_party": false, 
+    "type": "target"
+  }, 
+  {
+    "deps": [
+      "gpr", 
+      "gpr_test_util", 
+      "grpc", 
+      "grpc++", 
       "grpc++_test_util", 
       "grpc_test_util"
     ], 
@@ -3099,6 +3136,7 @@
     "language": "c++", 
     "name": "stress_test", 
     "src": [
+      "test/cpp/interop/client_helper.cc", 
       "test/cpp/interop/client_helper.h", 
       "test/cpp/interop/interop_client.cc", 
       "test/cpp/interop/interop_client.h", 
@@ -3939,6 +3977,24 @@
     "headers": [], 
     "is_filegroup": false, 
     "language": "c", 
+    "name": "h2_fake_resolver_test", 
+    "src": [
+      "test/core/end2end/fixtures/h2_fake_resolver.c"
+    ], 
+    "third_party": false, 
+    "type": "target"
+  }, 
+  {
+    "deps": [
+      "end2end_tests", 
+      "gpr", 
+      "gpr_test_util", 
+      "grpc", 
+      "grpc_test_util"
+    ], 
+    "headers": [], 
+    "is_filegroup": false, 
+    "language": "c", 
     "name": "h2_fakesec_test", 
     "src": [
       "test/core/end2end/fixtures/h2_fakesec.c"
@@ -4263,6 +4319,24 @@
     "headers": [], 
     "is_filegroup": false, 
     "language": "c", 
+    "name": "h2_fake_resolver_nosec_test", 
+    "src": [
+      "test/core/end2end/fixtures/h2_fake_resolver.c"
+    ], 
+    "third_party": false, 
+    "type": "target"
+  }, 
+  {
+    "deps": [
+      "end2end_nosec_tests", 
+      "gpr", 
+      "gpr_test_util", 
+      "grpc_test_util_unsecure", 
+      "grpc_unsecure"
+    ], 
+    "headers": [], 
+    "is_filegroup": false, 
+    "language": "c", 
     "name": "h2_fd_nosec_test", 
     "src": [
       "test/core/end2end/fixtures/h2_fd.c"
@@ -4660,7 +4734,7 @@
     "language": "c", 
     "name": "uri_fuzzer_test_one_entry", 
     "src": [
-      "test/core/client_config/uri_fuzzer_test.c", 
+      "test/core/client_channel/uri_fuzzer_test.c", 
       "test/core/util/one_corpus_entry_fuzzer.c"
     ], 
     "third_party": false, 
@@ -4896,6 +4970,27 @@
   }, 
   {
     "deps": [
+      "gpr", 
+      "grpc++_base", 
+      "grpc++_codegen_base", 
+      "grpc++_codegen_base_src", 
+      "grpc_cronet"
+    ], 
+    "headers": [], 
+    "is_filegroup": false, 
+    "language": "c++", 
+    "name": "grpc++_cronet", 
+    "src": [
+      "src/cpp/client/cronet_credentials.cc", 
+      "src/cpp/client/insecure_credentials.cc", 
+      "src/cpp/common/insecure_create_auth_context.cc", 
+      "src/cpp/server/insecure_server_credentials.cc"
+    ], 
+    "third_party": false, 
+    "type": "lib"
+  }, 
+  {
+    "deps": [
       "grpc++", 
       "grpc++_reflection_proto"
     ], 
@@ -4929,6 +5024,23 @@
     "type": "lib"
   }, 
   {
+    "deps": [
+      "grpc++"
+    ], 
+    "headers": [
+      "include/grpc++/test/server_context_test_spouse.h"
+    ], 
+    "is_filegroup": false, 
+    "language": "c++", 
+    "name": "grpc++_test", 
+    "src": [
+      "include/grpc++/test/server_context_test_spouse.h", 
+      "src/cpp/test/server_context_test_spouse.cc"
+    ], 
+    "third_party": false, 
+    "type": "lib"
+  }, 
+  {
     "deps": [], 
     "headers": [
       "test/cpp/util/test_config.h"
@@ -6388,27 +6500,34 @@
       "src/core/lib/iomgr/pollset.h", 
       "src/core/lib/iomgr/pollset_set.h", 
       "src/core/lib/iomgr/pollset_set_windows.h", 
+      "src/core/lib/iomgr/pollset_uv.h", 
       "src/core/lib/iomgr/pollset_windows.h", 
+      "src/core/lib/iomgr/port.h", 
       "src/core/lib/iomgr/resolve_address.h", 
       "src/core/lib/iomgr/sockaddr.h", 
       "src/core/lib/iomgr/sockaddr_posix.h", 
       "src/core/lib/iomgr/sockaddr_utils.h", 
       "src/core/lib/iomgr/sockaddr_windows.h", 
+      "src/core/lib/iomgr/socket_utils.h", 
       "src/core/lib/iomgr/socket_utils_posix.h", 
       "src/core/lib/iomgr/socket_windows.h", 
       "src/core/lib/iomgr/tcp_client.h", 
       "src/core/lib/iomgr/tcp_posix.h", 
       "src/core/lib/iomgr/tcp_server.h", 
+      "src/core/lib/iomgr/tcp_uv.h", 
       "src/core/lib/iomgr/tcp_windows.h", 
       "src/core/lib/iomgr/time_averaged_stats.h", 
       "src/core/lib/iomgr/timer.h", 
+      "src/core/lib/iomgr/timer_generic.h", 
       "src/core/lib/iomgr/timer_heap.h", 
+      "src/core/lib/iomgr/timer_uv.h", 
       "src/core/lib/iomgr/udp_server.h", 
       "src/core/lib/iomgr/unix_sockets_posix.h", 
+      "src/core/lib/iomgr/wakeup_fd_cv.h", 
       "src/core/lib/iomgr/wakeup_fd_pipe.h", 
       "src/core/lib/iomgr/wakeup_fd_posix.h", 
       "src/core/lib/iomgr/workqueue.h", 
-      "src/core/lib/iomgr/workqueue_posix.h", 
+      "src/core/lib/iomgr/workqueue_uv.h", 
       "src/core/lib/iomgr/workqueue_windows.h", 
       "src/core/lib/json/json.h", 
       "src/core/lib/json/json_common.h", 
@@ -6427,6 +6546,7 @@
       "src/core/lib/surface/server.h", 
       "src/core/lib/transport/byte_stream.h", 
       "src/core/lib/transport/connectivity_state.h", 
+      "src/core/lib/transport/mdstr_hash_table.h", 
       "src/core/lib/transport/metadata.h", 
       "src/core/lib/transport/metadata_batch.h", 
       "src/core/lib/transport/static_metadata.h", 
@@ -6486,6 +6606,7 @@
       "src/core/lib/iomgr/endpoint.h", 
       "src/core/lib/iomgr/endpoint_pair.h", 
       "src/core/lib/iomgr/endpoint_pair_posix.c", 
+      "src/core/lib/iomgr/endpoint_pair_uv.c", 
       "src/core/lib/iomgr/endpoint_pair_windows.c", 
       "src/core/lib/iomgr/error.c", 
       "src/core/lib/iomgr/error.h", 
@@ -6508,6 +6629,7 @@
       "src/core/lib/iomgr/iomgr_internal.h", 
       "src/core/lib/iomgr/iomgr_posix.c", 
       "src/core/lib/iomgr/iomgr_posix.h", 
+      "src/core/lib/iomgr/iomgr_uv.c", 
       "src/core/lib/iomgr/iomgr_windows.c", 
       "src/core/lib/iomgr/load_file.c", 
       "src/core/lib/iomgr/load_file.h", 
@@ -6517,45 +6639,62 @@
       "src/core/lib/iomgr/polling_entity.h", 
       "src/core/lib/iomgr/pollset.h", 
       "src/core/lib/iomgr/pollset_set.h", 
+      "src/core/lib/iomgr/pollset_set_uv.c", 
       "src/core/lib/iomgr/pollset_set_windows.c", 
       "src/core/lib/iomgr/pollset_set_windows.h", 
+      "src/core/lib/iomgr/pollset_uv.c", 
+      "src/core/lib/iomgr/pollset_uv.h", 
       "src/core/lib/iomgr/pollset_windows.c", 
       "src/core/lib/iomgr/pollset_windows.h", 
+      "src/core/lib/iomgr/port.h", 
       "src/core/lib/iomgr/resolve_address.h", 
       "src/core/lib/iomgr/resolve_address_posix.c", 
+      "src/core/lib/iomgr/resolve_address_uv.c", 
       "src/core/lib/iomgr/resolve_address_windows.c", 
       "src/core/lib/iomgr/sockaddr.h", 
       "src/core/lib/iomgr/sockaddr_posix.h", 
       "src/core/lib/iomgr/sockaddr_utils.c", 
       "src/core/lib/iomgr/sockaddr_utils.h", 
       "src/core/lib/iomgr/sockaddr_windows.h", 
+      "src/core/lib/iomgr/socket_utils.h", 
       "src/core/lib/iomgr/socket_utils_common_posix.c", 
       "src/core/lib/iomgr/socket_utils_linux.c", 
       "src/core/lib/iomgr/socket_utils_posix.c", 
       "src/core/lib/iomgr/socket_utils_posix.h", 
+      "src/core/lib/iomgr/socket_utils_uv.c", 
+      "src/core/lib/iomgr/socket_utils_windows.c", 
       "src/core/lib/iomgr/socket_windows.c", 
       "src/core/lib/iomgr/socket_windows.h", 
       "src/core/lib/iomgr/tcp_client.h", 
       "src/core/lib/iomgr/tcp_client_posix.c", 
+      "src/core/lib/iomgr/tcp_client_uv.c", 
       "src/core/lib/iomgr/tcp_client_windows.c", 
       "src/core/lib/iomgr/tcp_posix.c", 
       "src/core/lib/iomgr/tcp_posix.h", 
       "src/core/lib/iomgr/tcp_server.h", 
       "src/core/lib/iomgr/tcp_server_posix.c", 
+      "src/core/lib/iomgr/tcp_server_uv.c", 
       "src/core/lib/iomgr/tcp_server_windows.c", 
+      "src/core/lib/iomgr/tcp_uv.c", 
+      "src/core/lib/iomgr/tcp_uv.h", 
       "src/core/lib/iomgr/tcp_windows.c", 
       "src/core/lib/iomgr/tcp_windows.h", 
       "src/core/lib/iomgr/time_averaged_stats.c", 
       "src/core/lib/iomgr/time_averaged_stats.h", 
-      "src/core/lib/iomgr/timer.c", 
       "src/core/lib/iomgr/timer.h", 
+      "src/core/lib/iomgr/timer_generic.c", 
+      "src/core/lib/iomgr/timer_generic.h", 
       "src/core/lib/iomgr/timer_heap.c", 
       "src/core/lib/iomgr/timer_heap.h", 
+      "src/core/lib/iomgr/timer_uv.c", 
+      "src/core/lib/iomgr/timer_uv.h", 
       "src/core/lib/iomgr/udp_server.c", 
       "src/core/lib/iomgr/udp_server.h", 
       "src/core/lib/iomgr/unix_sockets_posix.c", 
       "src/core/lib/iomgr/unix_sockets_posix.h", 
       "src/core/lib/iomgr/unix_sockets_posix_noop.c", 
+      "src/core/lib/iomgr/wakeup_fd_cv.c", 
+      "src/core/lib/iomgr/wakeup_fd_cv.h", 
       "src/core/lib/iomgr/wakeup_fd_eventfd.c", 
       "src/core/lib/iomgr/wakeup_fd_nospecial.c", 
       "src/core/lib/iomgr/wakeup_fd_pipe.c", 
@@ -6563,8 +6702,8 @@
       "src/core/lib/iomgr/wakeup_fd_posix.c", 
       "src/core/lib/iomgr/wakeup_fd_posix.h", 
       "src/core/lib/iomgr/workqueue.h", 
-      "src/core/lib/iomgr/workqueue_posix.c", 
-      "src/core/lib/iomgr/workqueue_posix.h", 
+      "src/core/lib/iomgr/workqueue_uv.c", 
+      "src/core/lib/iomgr/workqueue_uv.h", 
       "src/core/lib/iomgr/workqueue_windows.c", 
       "src/core/lib/iomgr/workqueue_windows.h", 
       "src/core/lib/json/json.c", 
@@ -6608,6 +6747,8 @@
       "src/core/lib/transport/byte_stream.h", 
       "src/core/lib/transport/connectivity_state.c", 
       "src/core/lib/transport/connectivity_state.h", 
+      "src/core/lib/transport/mdstr_hash_table.c", 
+      "src/core/lib/transport/mdstr_hash_table.h", 
       "src/core/lib/transport/metadata.c", 
       "src/core/lib/transport/metadata.h", 
       "src/core/lib/transport/metadata_batch.c", 
@@ -6630,62 +6771,65 @@
       "grpc_base"
     ], 
     "headers": [
-      "src/core/ext/client_config/client_channel.h", 
-      "src/core/ext/client_config/client_channel_factory.h", 
-      "src/core/ext/client_config/connector.h", 
-      "src/core/ext/client_config/http_connect_handshaker.h", 
-      "src/core/ext/client_config/initial_connect_string.h", 
-      "src/core/ext/client_config/lb_policy.h", 
-      "src/core/ext/client_config/lb_policy_factory.h", 
-      "src/core/ext/client_config/lb_policy_registry.h", 
-      "src/core/ext/client_config/parse_address.h", 
-      "src/core/ext/client_config/resolver.h", 
-      "src/core/ext/client_config/resolver_factory.h", 
-      "src/core/ext/client_config/resolver_registry.h", 
-      "src/core/ext/client_config/resolver_result.h", 
-      "src/core/ext/client_config/subchannel.h", 
-      "src/core/ext/client_config/subchannel_index.h", 
-      "src/core/ext/client_config/uri_parser.h"
+      "src/core/ext/client_channel/client_channel.h", 
+      "src/core/ext/client_channel/client_channel_factory.h", 
+      "src/core/ext/client_channel/connector.h", 
+      "src/core/ext/client_channel/http_connect_handshaker.h", 
+      "src/core/ext/client_channel/initial_connect_string.h", 
+      "src/core/ext/client_channel/lb_policy.h", 
+      "src/core/ext/client_channel/lb_policy_factory.h", 
+      "src/core/ext/client_channel/lb_policy_registry.h", 
+      "src/core/ext/client_channel/method_config.h", 
+      "src/core/ext/client_channel/parse_address.h", 
+      "src/core/ext/client_channel/resolver.h", 
+      "src/core/ext/client_channel/resolver_factory.h", 
+      "src/core/ext/client_channel/resolver_registry.h", 
+      "src/core/ext/client_channel/resolver_result.h", 
+      "src/core/ext/client_channel/subchannel.h", 
+      "src/core/ext/client_channel/subchannel_index.h", 
+      "src/core/ext/client_channel/uri_parser.h"
     ], 
     "is_filegroup": true, 
     "language": "c", 
-    "name": "grpc_client_config", 
+    "name": "grpc_client_channel", 
     "src": [
-      "src/core/ext/client_config/channel_connectivity.c", 
-      "src/core/ext/client_config/client_channel.c", 
-      "src/core/ext/client_config/client_channel.h", 
-      "src/core/ext/client_config/client_channel_factory.c", 
-      "src/core/ext/client_config/client_channel_factory.h", 
-      "src/core/ext/client_config/client_config_plugin.c", 
-      "src/core/ext/client_config/connector.c", 
-      "src/core/ext/client_config/connector.h", 
-      "src/core/ext/client_config/default_initial_connect_string.c", 
-      "src/core/ext/client_config/http_connect_handshaker.c", 
-      "src/core/ext/client_config/http_connect_handshaker.h", 
-      "src/core/ext/client_config/initial_connect_string.c", 
-      "src/core/ext/client_config/initial_connect_string.h", 
-      "src/core/ext/client_config/lb_policy.c", 
-      "src/core/ext/client_config/lb_policy.h", 
-      "src/core/ext/client_config/lb_policy_factory.c", 
-      "src/core/ext/client_config/lb_policy_factory.h", 
-      "src/core/ext/client_config/lb_policy_registry.c", 
-      "src/core/ext/client_config/lb_policy_registry.h", 
-      "src/core/ext/client_config/parse_address.c", 
-      "src/core/ext/client_config/parse_address.h", 
-      "src/core/ext/client_config/resolver.c", 
-      "src/core/ext/client_config/resolver.h", 
-      "src/core/ext/client_config/resolver_factory.c", 
-      "src/core/ext/client_config/resolver_factory.h", 
-      "src/core/ext/client_config/resolver_registry.c", 
-      "src/core/ext/client_config/resolver_registry.h", 
-      "src/core/ext/client_config/resolver_result.c", 
-      "src/core/ext/client_config/resolver_result.h", 
-      "src/core/ext/client_config/subchannel.c", 
-      "src/core/ext/client_config/subchannel.h", 
-      "src/core/ext/client_config/subchannel_index.c", 
-      "src/core/ext/client_config/subchannel_index.h", 
-      "src/core/ext/client_config/uri_parser.c", 
-      "src/core/ext/client_config/uri_parser.h"
+      "src/core/ext/client_channel/channel_connectivity.c", 
+      "src/core/ext/client_channel/client_channel.c", 
+      "src/core/ext/client_channel/client_channel.h", 
+      "src/core/ext/client_channel/client_channel_factory.c", 
+      "src/core/ext/client_channel/client_channel_factory.h", 
+      "src/core/ext/client_channel/client_channel_plugin.c", 
+      "src/core/ext/client_channel/connector.c", 
+      "src/core/ext/client_channel/connector.h", 
+      "src/core/ext/client_channel/default_initial_connect_string.c", 
+      "src/core/ext/client_channel/http_connect_handshaker.c", 
+      "src/core/ext/client_channel/http_connect_handshaker.h", 
+      "src/core/ext/client_channel/initial_connect_string.c", 
+      "src/core/ext/client_channel/initial_connect_string.h", 
+      "src/core/ext/client_channel/lb_policy.c", 
+      "src/core/ext/client_channel/lb_policy.h", 
+      "src/core/ext/client_channel/lb_policy_factory.c", 
+      "src/core/ext/client_channel/lb_policy_factory.h", 
+      "src/core/ext/client_channel/lb_policy_registry.c", 
+      "src/core/ext/client_channel/lb_policy_registry.h", 
+      "src/core/ext/client_channel/method_config.c", 
+      "src/core/ext/client_channel/method_config.h", 
+      "src/core/ext/client_channel/parse_address.c", 
+      "src/core/ext/client_channel/parse_address.h", 
+      "src/core/ext/client_channel/resolver.c", 
+      "src/core/ext/client_channel/resolver.h", 
+      "src/core/ext/client_channel/resolver_factory.c", 
+      "src/core/ext/client_channel/resolver_factory.h", 
+      "src/core/ext/client_channel/resolver_registry.c", 
+      "src/core/ext/client_channel/resolver_registry.h", 
+      "src/core/ext/client_channel/resolver_result.c", 
+      "src/core/ext/client_channel/resolver_result.h", 
+      "src/core/ext/client_channel/subchannel.c", 
+      "src/core/ext/client_channel/subchannel.h", 
+      "src/core/ext/client_channel/subchannel_index.c", 
+      "src/core/ext/client_channel/subchannel_index.h", 
+      "src/core/ext/client_channel/uri_parser.c", 
+      "src/core/ext/client_channel/uri_parser.h"
     ], 
     "third_party": false, 
     "type": "filegroup"
@@ -6720,7 +6864,7 @@
     "deps": [
       "gpr", 
       "grpc_base", 
-      "grpc_client_config", 
+      "grpc_client_channel", 
       "nanopb"
     ], 
     "headers": [
@@ -6746,7 +6890,7 @@
     "deps": [
       "gpr", 
       "grpc_base", 
-      "grpc_client_config"
+      "grpc_client_channel"
     ], 
     "headers": [], 
     "is_filegroup": true, 
@@ -6762,7 +6906,7 @@
     "deps": [
       "gpr", 
       "grpc_base", 
-      "grpc_client_config"
+      "grpc_client_channel"
     ], 
     "headers": [], 
     "is_filegroup": true, 
@@ -6799,7 +6943,7 @@
     "deps": [
       "gpr", 
       "grpc_base", 
-      "grpc_client_config"
+      "grpc_client_channel"
     ], 
     "headers": [], 
     "is_filegroup": true, 
@@ -6815,7 +6959,7 @@
     "deps": [
       "gpr", 
       "grpc_base", 
-      "grpc_client_config"
+      "grpc_client_channel"
     ], 
     "headers": [], 
     "is_filegroup": true, 
@@ -6871,8 +7015,7 @@
       "src/core/lib/security/credentials/credentials_metadata.c", 
       "src/core/lib/security/credentials/fake/fake_credentials.c", 
       "src/core/lib/security/credentials/fake/fake_credentials.h", 
-      "src/core/lib/security/credentials/google_default/credentials_posix.c", 
-      "src/core/lib/security/credentials/google_default/credentials_windows.c", 
+      "src/core/lib/security/credentials/google_default/credentials_generic.c", 
       "src/core/lib/security/credentials/google_default/google_default_credentials.c", 
       "src/core/lib/security/credentials/google_default/google_default_credentials.h", 
       "src/core/lib/security/credentials/iam/iam_credentials.c", 
@@ -6957,6 +7100,7 @@
       "test/core/util/port_posix.c", 
       "test/core/util/port_server_client.c", 
       "test/core/util/port_server_client.h", 
+      "test/core/util/port_uv.c", 
       "test/core/util/port_windows.c", 
       "test/core/util/slice_splitter.c", 
       "test/core/util/slice_splitter.h"
@@ -7062,7 +7206,7 @@
     "deps": [
       "gpr", 
       "grpc_base", 
-      "grpc_client_config", 
+      "grpc_client_channel", 
       "grpc_transport_chttp2"
     ], 
     "headers": [], 
@@ -7080,7 +7224,7 @@
     "deps": [
       "gpr", 
       "grpc_base", 
-      "grpc_client_config", 
+      "grpc_client_channel", 
       "grpc_secure", 
       "grpc_transport_chttp2"
     ], 
@@ -7170,7 +7314,8 @@
   }, 
   {
     "deps": [
-      "gpr"
+      "gpr", 
+      "grpc_base"
     ], 
     "headers": [
       "src/core/lib/tsi/fake_transport_security.h", 
diff --git a/tools/run_tests/tests.json b/tools/run_tests/tests.json
index c339506..63c9fd9 100644
--- a/tools/run_tests/tests.json
+++ b/tools/run_tests/tests.json
@@ -11,6 +11,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "gtest": false, 
     "language": "c", 
@@ -32,6 +33,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "gtest": false, 
     "language": "c", 
@@ -53,6 +55,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "gtest": false, 
     "language": "c", 
@@ -74,6 +77,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "gtest": false, 
     "language": "c", 
@@ -95,6 +99,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "gtest": false, 
     "language": "c", 
@@ -116,6 +123,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "gtest": false, 
     "language": "c", 
@@ -137,6 +145,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "gtest": false, 
     "language": "c", 
@@ -158,6 +167,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "gtest": false, 
     "language": "c", 
@@ -179,6 +189,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "gtest": false, 
     "language": "c", 
@@ -200,6 +211,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "gtest": false, 
     "language": "c", 
@@ -221,6 +233,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "gtest": false, 
     "language": "c", 
@@ -242,6 +255,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "gtest": false, 
     "language": "c", 
@@ -263,6 +277,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "gtest": false, 
     "language": "c", 
@@ -284,6 +299,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "gtest": false, 
     "language": "c", 
@@ -305,6 +321,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "gtest": false, 
     "language": "c", 
@@ -326,6 +343,7 @@
     ], 
     "cpu_cost": 30, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "gtest": false, 
     "language": "c", 
@@ -347,6 +365,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "gtest": false, 
     "language": "c", 
@@ -368,6 +387,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "gtest": false, 
     "language": "c", 
@@ -389,6 +411,7 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "gtest": false, 
     "language": "c", 
@@ -410,6 +433,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "gtest": false, 
     "language": "c", 
@@ -431,6 +457,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "gtest": false, 
     "language": "c", 
@@ -451,6 +478,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "gtest": false, 
     "language": "c", 
@@ -471,6 +501,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "gtest": false, 
     "language": "c", 
@@ -489,6 +522,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "gtest": false, 
     "language": "c", 
@@ -506,6 +542,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "gtest": false, 
     "language": "c", 
@@ -525,6 +564,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "gtest": false, 
     "language": "c", 
@@ -544,6 +586,7 @@
     ], 
     "cpu_cost": 1.5, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "gtest": false, 
     "language": "c", 
@@ -563,6 +606,7 @@
     ], 
     "cpu_cost": 1.5, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "gtest": false, 
     "language": "c", 
@@ -582,6 +626,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "gtest": false, 
     "language": "c", 
@@ -602,6 +649,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "gtest": false, 
     "language": "c", 
@@ -623,6 +671,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "gtest": false, 
     "language": "c", 
@@ -644,6 +693,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "gtest": false, 
     "language": "c", 
@@ -665,6 +715,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "gtest": false, 
     "language": "c", 
@@ -686,6 +737,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "gtest": false, 
     "language": "c", 
@@ -707,6 +759,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "gtest": false, 
     "language": "c", 
@@ -728,6 +781,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "gtest": false, 
     "language": "c", 
@@ -749,6 +803,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "gtest": false, 
     "language": "c", 
@@ -770,6 +825,7 @@
     ], 
     "cpu_cost": 30, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "gtest": false, 
     "language": "c", 
@@ -791,6 +847,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "gtest": false, 
     "language": "c", 
@@ -812,6 +869,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "gtest": false, 
     "language": "c", 
@@ -833,6 +891,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "gtest": false, 
     "language": "c", 
@@ -854,6 +913,7 @@
     ], 
     "cpu_cost": 7, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "gtest": false, 
     "language": "c", 
@@ -875,6 +935,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "gtest": false, 
     "language": "c", 
@@ -896,6 +957,7 @@
     ], 
     "cpu_cost": 10, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "gtest": false, 
     "language": "c", 
@@ -917,6 +979,7 @@
     ], 
     "cpu_cost": 10, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "gtest": false, 
     "language": "c", 
@@ -938,6 +1001,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "gtest": false, 
     "language": "c", 
@@ -959,6 +1023,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "gtest": false, 
     "language": "c", 
@@ -980,6 +1045,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "gtest": false, 
     "language": "c", 
@@ -1001,6 +1067,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "gtest": false, 
     "language": "c", 
@@ -1022,6 +1089,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "gtest": false, 
     "language": "c", 
@@ -1043,6 +1111,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "gtest": false, 
     "language": "c", 
@@ -1064,6 +1133,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "gtest": false, 
     "language": "c", 
@@ -1085,6 +1155,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "gtest": false, 
     "language": "c", 
@@ -1106,6 +1177,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "gtest": false, 
     "language": "c", 
@@ -1127,6 +1201,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "gtest": false, 
     "language": "c", 
@@ -1148,6 +1223,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "gtest": false, 
     "language": "c", 
@@ -1168,6 +1244,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "gtest": false, 
     "language": "c", 
@@ -1188,6 +1265,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "gtest": false, 
     "language": "c", 
@@ -1209,6 +1287,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "gtest": false, 
     "language": "c", 
@@ -1230,6 +1309,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "gtest": false, 
     "language": "c", 
@@ -1251,6 +1331,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "gtest": false, 
     "language": "c", 
@@ -1272,6 +1353,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "gtest": false, 
     "language": "c", 
@@ -1293,6 +1375,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "gtest": false, 
     "language": "c", 
@@ -1313,6 +1396,7 @@
     ], 
     "cpu_cost": 0.5, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "gtest": false, 
     "language": "c", 
@@ -1330,6 +1414,7 @@
     ], 
     "cpu_cost": 0.5, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "gtest": false, 
     "language": "c", 
@@ -1348,6 +1433,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "gtest": false, 
     "language": "c", 
@@ -1369,6 +1455,7 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "gtest": false, 
     "language": "c", 
@@ -1390,6 +1477,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "gtest": false, 
     "language": "c", 
@@ -1411,6 +1499,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "gtest": false, 
     "language": "c", 
@@ -1432,6 +1521,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "gtest": false, 
     "language": "c", 
@@ -1453,6 +1543,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "gtest": false, 
     "language": "c", 
@@ -1474,6 +1565,7 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": true, 
     "gtest": false, 
     "language": "c", 
@@ -1495,6 +1587,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "gtest": false, 
     "language": "c", 
@@ -1516,6 +1609,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "gtest": false, 
     "language": "c", 
@@ -1537,6 +1631,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": true, 
     "gtest": false, 
     "language": "c", 
@@ -1558,6 +1653,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "gtest": false, 
     "language": "c", 
@@ -1579,6 +1675,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "gtest": false, 
     "language": "c", 
@@ -1600,6 +1697,7 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "gtest": false, 
     "language": "c", 
@@ -1621,6 +1719,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "gtest": false, 
     "language": "c", 
@@ -1642,6 +1743,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "gtest": false, 
     "language": "c", 
@@ -1663,6 +1765,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "gtest": false, 
     "language": "c", 
@@ -1684,6 +1789,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "gtest": false, 
     "language": "c", 
@@ -1705,6 +1813,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "gtest": false, 
     "language": "c", 
@@ -1726,6 +1835,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "gtest": false, 
     "language": "c", 
@@ -1747,6 +1857,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "gtest": false, 
     "language": "c", 
@@ -1768,6 +1881,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "gtest": false, 
     "language": "c", 
@@ -1789,6 +1903,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "gtest": false, 
     "language": "c", 
@@ -1809,6 +1924,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "gtest": false, 
     "language": "c", 
@@ -1828,6 +1946,9 @@
     ], 
     "cpu_cost": 0.5, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "gtest": false, 
     "language": "c", 
@@ -1847,6 +1968,9 @@
     ], 
     "cpu_cost": 0.2, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "gtest": false, 
     "language": "c", 
@@ -1866,6 +1990,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "gtest": false, 
     "language": "c", 
@@ -1886,6 +2013,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "gtest": false, 
     "language": "c", 
@@ -1907,6 +2035,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "gtest": false, 
     "language": "c", 
@@ -1928,6 +2057,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "gtest": false, 
     "language": "c", 
@@ -1949,6 +2081,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "gtest": false, 
     "language": "c", 
@@ -1970,6 +2105,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "gtest": false, 
     "language": "c", 
@@ -1991,6 +2127,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "gtest": false, 
     "language": "c", 
@@ -2011,6 +2148,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "gtest": false, 
     "language": "c", 
@@ -2030,6 +2168,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "gtest": false, 
     "language": "c", 
@@ -2050,6 +2191,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "gtest": false, 
     "language": "c", 
@@ -2066,11 +2208,34 @@
     "ci_platforms": [
       "linux", 
       "mac", 
+      "posix"
+    ], 
+    "cpu_cost": 1.0, 
+    "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "gtest": false, 
+    "language": "c", 
+    "name": "wakeup_fd_cv_test", 
+    "platforms": [
+      "linux", 
+      "mac", 
+      "posix"
+    ]
+  }, 
+  {
+    "args": [], 
+    "ci_platforms": [
+      "linux", 
+      "mac", 
       "posix", 
       "windows"
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "gtest": true, 
     "language": "c++", 
@@ -2092,6 +2257,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "gtest": true, 
     "language": "c++", 
@@ -2113,6 +2279,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "gtest": true, 
     "language": "c++", 
@@ -2134,6 +2301,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "gtest": true, 
     "language": "c++", 
@@ -2155,6 +2323,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "gtest": true, 
     "language": "c++", 
@@ -2175,6 +2344,7 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "gtest": true, 
     "language": "c++", 
@@ -2195,6 +2365,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "gtest": true, 
     "language": "c++", 
@@ -2216,6 +2387,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "gtest": true, 
     "language": "c++", 
@@ -2237,6 +2409,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "gtest": true, 
     "language": "c++", 
@@ -2258,6 +2431,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "gtest": true, 
     "language": "c++", 
@@ -2279,6 +2453,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "gtest": true, 
     "language": "c++", 
@@ -2300,6 +2475,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "gtest": true, 
     "language": "c++", 
@@ -2321,6 +2497,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "gtest": true, 
     "language": "c++", 
@@ -2342,6 +2519,7 @@
     ], 
     "cpu_cost": 0.5, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "gtest": true, 
     "language": "c++", 
@@ -2363,6 +2541,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "gtest": true, 
     "language": "c++", 
@@ -2384,6 +2563,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "gtest": true, 
     "language": "c++", 
@@ -2405,6 +2585,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "gtest": true, 
     "language": "c++", 
@@ -2426,6 +2607,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "gtest": true, 
     "language": "c++", 
@@ -2447,6 +2629,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "gtest": true, 
     "language": "c++", 
@@ -2468,6 +2651,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "gtest": false, 
     "language": "c++", 
@@ -2489,6 +2673,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "gtest": true, 
     "language": "c++", 
@@ -2509,6 +2694,7 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "gtest": false, 
     "language": "c++", 
@@ -2529,6 +2715,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "gtest": true, 
     "language": "c++", 
@@ -2550,6 +2737,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "gtest": true, 
     "language": "c++", 
@@ -2570,6 +2758,7 @@
     ], 
     "cpu_cost": 0.5, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "gtest": false, 
     "language": "c++", 
@@ -2590,6 +2779,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "gtest": true, 
     "language": "c++", 
@@ -2610,6 +2800,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "gtest": false, 
     "language": "c++", 
@@ -2630,6 +2821,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "gtest": true, 
     "language": "c++", 
@@ -2646,10 +2838,33 @@
     "ci_platforms": [
       "linux", 
       "mac", 
+      "posix", 
+      "windows"
+    ], 
+    "cpu_cost": 1.0, 
+    "exclude_configs": [], 
+    "exclude_iomgrs": [], 
+    "flaky": false, 
+    "gtest": true, 
+    "language": "c++", 
+    "name": "server_context_test_spouse_test", 
+    "platforms": [
+      "linux", 
+      "mac", 
+      "posix", 
+      "windows"
+    ]
+  }, 
+  {
+    "args": [], 
+    "ci_platforms": [
+      "linux", 
+      "mac", 
       "posix"
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "gtest": true, 
     "language": "c++", 
@@ -2670,6 +2885,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "gtest": true, 
     "language": "c++", 
@@ -2691,6 +2907,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "gtest": false, 
     "language": "c++", 
@@ -2711,6 +2928,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "gtest": true, 
     "language": "c++", 
@@ -2731,6 +2949,7 @@
     ], 
     "cpu_cost": 100, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "gtest": true, 
     "language": "c++", 
@@ -2752,6 +2971,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "gtest": false, 
     "language": "c89", 
@@ -2773,6 +2993,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "gtest": false, 
     "language": "c", 
@@ -2794,6 +3017,9 @@
     ], 
     "cpu_cost": 0.2, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "gtest": false, 
     "language": "c", 
@@ -2815,6 +3041,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "gtest": false, 
     "language": "c", 
@@ -2836,6 +3065,9 @@
     ], 
     "cpu_cost": 0.2, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "gtest": false, 
     "language": "c", 
@@ -2857,6 +3089,9 @@
     ], 
     "cpu_cost": 0.2, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "gtest": false, 
     "language": "c", 
@@ -2878,6 +3113,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "gtest": false, 
     "language": "c", 
@@ -2899,6 +3137,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "gtest": false, 
     "language": "c", 
@@ -2920,6 +3161,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "gtest": false, 
     "language": "c", 
@@ -2941,6 +3185,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "gtest": false, 
     "language": "c", 
@@ -2962,6 +3209,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "gtest": false, 
     "language": "c", 
@@ -2982,6 +3232,7 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "gtest": false, 
     "language": "c", 
@@ -4550,6 +4801,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_census_test", 
@@ -4572,6 +4824,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_census_test", 
@@ -4594,6 +4847,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_census_test", 
@@ -4616,6 +4870,7 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_census_test", 
@@ -4638,6 +4893,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_census_test", 
@@ -4660,6 +4916,7 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_census_test", 
@@ -4682,6 +4939,7 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_census_test", 
@@ -4704,6 +4962,7 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_census_test", 
@@ -4726,6 +4985,7 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_census_test", 
@@ -4748,6 +5008,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_census_test", 
@@ -4770,6 +5031,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_census_test", 
@@ -4792,6 +5056,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_census_test", 
@@ -4814,6 +5079,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_census_test", 
@@ -4836,6 +5102,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_census_test", 
@@ -4858,6 +5125,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_census_test", 
@@ -4880,6 +5148,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_census_test", 
@@ -4902,6 +5171,7 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_census_test", 
@@ -4924,6 +5194,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_census_test", 
@@ -4946,6 +5217,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_census_test", 
@@ -4968,6 +5240,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_census_test", 
@@ -4990,6 +5263,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_census_test", 
@@ -5012,6 +5286,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_census_test", 
@@ -5034,6 +5309,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_census_test", 
@@ -5056,6 +5332,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_census_test", 
@@ -5078,6 +5355,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_census_test", 
@@ -5100,6 +5378,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_census_test", 
@@ -5122,6 +5401,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_census_test", 
@@ -5144,6 +5424,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_census_test", 
@@ -5166,6 +5447,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_census_test", 
@@ -5188,6 +5470,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_census_test", 
@@ -5210,6 +5493,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_census_test", 
@@ -5232,6 +5516,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_census_test", 
@@ -5254,6 +5539,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_census_test", 
@@ -5276,6 +5562,7 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_census_test", 
@@ -5298,6 +5585,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_census_test", 
@@ -5320,6 +5608,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_census_test", 
@@ -5342,6 +5631,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_census_test", 
@@ -5364,6 +5654,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_census_test", 
@@ -5386,6 +5677,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_census_test", 
@@ -5408,6 +5700,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_census_test", 
@@ -5430,6 +5723,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_census_test", 
@@ -5452,6 +5746,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_census_test", 
@@ -5474,6 +5769,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_census_test", 
@@ -5496,6 +5792,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_census_test", 
@@ -5518,6 +5815,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_compress_test", 
@@ -5540,6 +5838,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_compress_test", 
@@ -5562,6 +5861,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_compress_test", 
@@ -5584,6 +5884,7 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_compress_test", 
@@ -5606,6 +5907,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_compress_test", 
@@ -5628,6 +5930,7 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_compress_test", 
@@ -5650,6 +5953,7 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_compress_test", 
@@ -5672,6 +5976,7 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_compress_test", 
@@ -5694,6 +5999,7 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_compress_test", 
@@ -5716,6 +6022,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_compress_test", 
@@ -5738,6 +6045,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_compress_test", 
@@ -5760,6 +6070,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_compress_test", 
@@ -5782,6 +6093,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_compress_test", 
@@ -5804,6 +6116,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_compress_test", 
@@ -5826,6 +6139,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_compress_test", 
@@ -5848,6 +6162,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_compress_test", 
@@ -5870,6 +6185,7 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_compress_test", 
@@ -5892,6 +6208,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_compress_test", 
@@ -5914,6 +6231,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_compress_test", 
@@ -5936,6 +6254,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_compress_test", 
@@ -5958,6 +6277,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_compress_test", 
@@ -5980,6 +6300,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_compress_test", 
@@ -6002,6 +6323,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_compress_test", 
@@ -6024,6 +6346,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_compress_test", 
@@ -6046,6 +6369,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_compress_test", 
@@ -6068,6 +6392,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_compress_test", 
@@ -6090,6 +6415,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_compress_test", 
@@ -6112,6 +6438,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_compress_test", 
@@ -6134,6 +6461,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_compress_test", 
@@ -6156,6 +6484,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_compress_test", 
@@ -6178,6 +6507,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_compress_test", 
@@ -6200,6 +6530,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_compress_test", 
@@ -6222,6 +6553,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_compress_test", 
@@ -6244,6 +6576,7 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_compress_test", 
@@ -6266,6 +6599,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_compress_test", 
@@ -6288,6 +6622,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_compress_test", 
@@ -6310,6 +6645,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_compress_test", 
@@ -6332,6 +6668,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_compress_test", 
@@ -6354,6 +6691,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_compress_test", 
@@ -6376,6 +6714,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_compress_test", 
@@ -6398,6 +6737,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_compress_test", 
@@ -6420,6 +6760,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_compress_test", 
@@ -6442,6 +6783,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_compress_test", 
@@ -6464,6 +6806,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_compress_test", 
@@ -6481,10 +6824,1025 @@
     "ci_platforms": [
       "windows", 
       "linux", 
+      "mac", 
+      "posix"
+    ], 
+    "cpu_cost": 1.0, 
+    "exclude_configs": [], 
+    "exclude_iomgrs": [], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "h2_fake_resolver_test", 
+    "platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ]
+  }, 
+  {
+    "args": [
+      "binary_metadata"
+    ], 
+    "ci_platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ], 
+    "cpu_cost": 1.0, 
+    "exclude_configs": [], 
+    "exclude_iomgrs": [], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "h2_fake_resolver_test", 
+    "platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ]
+  }, 
+  {
+    "args": [
+      "call_creds"
+    ], 
+    "ci_platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ], 
+    "cpu_cost": 1.0, 
+    "exclude_configs": [], 
+    "exclude_iomgrs": [], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "h2_fake_resolver_test", 
+    "platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ]
+  }, 
+  {
+    "args": [
+      "cancel_after_accept"
+    ], 
+    "ci_platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [], 
+    "exclude_iomgrs": [], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "h2_fake_resolver_test", 
+    "platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ]
+  }, 
+  {
+    "args": [
+      "cancel_after_client_done"
+    ], 
+    "ci_platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ], 
+    "cpu_cost": 1.0, 
+    "exclude_configs": [], 
+    "exclude_iomgrs": [], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "h2_fake_resolver_test", 
+    "platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ]
+  }, 
+  {
+    "args": [
+      "cancel_after_invoke"
+    ], 
+    "ci_platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [], 
+    "exclude_iomgrs": [], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "h2_fake_resolver_test", 
+    "platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ]
+  }, 
+  {
+    "args": [
+      "cancel_before_invoke"
+    ], 
+    "ci_platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [], 
+    "exclude_iomgrs": [], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "h2_fake_resolver_test", 
+    "platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ]
+  }, 
+  {
+    "args": [
+      "cancel_in_a_vacuum"
+    ], 
+    "ci_platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [], 
+    "exclude_iomgrs": [], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "h2_fake_resolver_test", 
+    "platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ]
+  }, 
+  {
+    "args": [
+      "cancel_with_status"
+    ], 
+    "ci_platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [], 
+    "exclude_iomgrs": [], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "h2_fake_resolver_test", 
+    "platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ]
+  }, 
+  {
+    "args": [
+      "compressed_payload"
+    ], 
+    "ci_platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ], 
+    "cpu_cost": 1.0, 
+    "exclude_configs": [], 
+    "exclude_iomgrs": [], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "h2_fake_resolver_test", 
+    "platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ]
+  }, 
+  {
+    "args": [
+      "connectivity"
+    ], 
+    "ci_platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "h2_fake_resolver_test", 
+    "platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ]
+  }, 
+  {
+    "args": [
+      "default_host"
+    ], 
+    "ci_platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ], 
+    "cpu_cost": 1.0, 
+    "exclude_configs": [], 
+    "exclude_iomgrs": [], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "h2_fake_resolver_test", 
+    "platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ]
+  }, 
+  {
+    "args": [
+      "disappearing_server"
+    ], 
+    "ci_platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ], 
+    "cpu_cost": 1.0, 
+    "exclude_configs": [], 
+    "exclude_iomgrs": [], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "h2_fake_resolver_test", 
+    "platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ]
+  }, 
+  {
+    "args": [
+      "empty_batch"
+    ], 
+    "ci_platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ], 
+    "cpu_cost": 1.0, 
+    "exclude_configs": [], 
+    "exclude_iomgrs": [], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "h2_fake_resolver_test", 
+    "platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ]
+  }, 
+  {
+    "args": [
+      "filter_call_init_fails"
+    ], 
+    "ci_platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ], 
+    "cpu_cost": 1.0, 
+    "exclude_configs": [], 
+    "exclude_iomgrs": [], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "h2_fake_resolver_test", 
+    "platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ]
+  }, 
+  {
+    "args": [
+      "filter_causes_close"
+    ], 
+    "ci_platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ], 
+    "cpu_cost": 1.0, 
+    "exclude_configs": [], 
+    "exclude_iomgrs": [], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "h2_fake_resolver_test", 
+    "platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ]
+  }, 
+  {
+    "args": [
+      "graceful_server_shutdown"
+    ], 
+    "ci_platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [], 
+    "exclude_iomgrs": [], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "h2_fake_resolver_test", 
+    "platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ]
+  }, 
+  {
+    "args": [
+      "high_initial_seqno"
+    ], 
+    "ci_platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ], 
+    "cpu_cost": 1.0, 
+    "exclude_configs": [], 
+    "exclude_iomgrs": [], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "h2_fake_resolver_test", 
+    "platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ]
+  }, 
+  {
+    "args": [
+      "hpack_size"
+    ], 
+    "ci_platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ], 
+    "cpu_cost": 1.0, 
+    "exclude_configs": [], 
+    "exclude_iomgrs": [], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "h2_fake_resolver_test", 
+    "platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ]
+  }, 
+  {
+    "args": [
+      "idempotent_request"
+    ], 
+    "ci_platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ], 
+    "cpu_cost": 1.0, 
+    "exclude_configs": [], 
+    "exclude_iomgrs": [], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "h2_fake_resolver_test", 
+    "platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ]
+  }, 
+  {
+    "args": [
+      "invoke_large_request"
+    ], 
+    "ci_platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ], 
+    "cpu_cost": 1.0, 
+    "exclude_configs": [], 
+    "exclude_iomgrs": [], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "h2_fake_resolver_test", 
+    "platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ]
+  }, 
+  {
+    "args": [
+      "large_metadata"
+    ], 
+    "ci_platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ], 
+    "cpu_cost": 1.0, 
+    "exclude_configs": [], 
+    "exclude_iomgrs": [], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "h2_fake_resolver_test", 
+    "platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ]
+  }, 
+  {
+    "args": [
+      "load_reporting_hook"
+    ], 
+    "ci_platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ], 
+    "cpu_cost": 1.0, 
+    "exclude_configs": [], 
+    "exclude_iomgrs": [], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "h2_fake_resolver_test", 
+    "platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ]
+  }, 
+  {
+    "args": [
+      "max_concurrent_streams"
+    ], 
+    "ci_platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ], 
+    "cpu_cost": 1.0, 
+    "exclude_configs": [], 
+    "exclude_iomgrs": [], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "h2_fake_resolver_test", 
+    "platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ]
+  }, 
+  {
+    "args": [
+      "max_message_length"
+    ], 
+    "ci_platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ], 
+    "cpu_cost": 1.0, 
+    "exclude_configs": [], 
+    "exclude_iomgrs": [], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "h2_fake_resolver_test", 
+    "platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ]
+  }, 
+  {
+    "args": [
+      "negative_deadline"
+    ], 
+    "ci_platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ], 
+    "cpu_cost": 1.0, 
+    "exclude_configs": [], 
+    "exclude_iomgrs": [], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "h2_fake_resolver_test", 
+    "platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ]
+  }, 
+  {
+    "args": [
+      "network_status_change"
+    ], 
+    "ci_platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ], 
+    "cpu_cost": 1.0, 
+    "exclude_configs": [], 
+    "exclude_iomgrs": [], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "h2_fake_resolver_test", 
+    "platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ]
+  }, 
+  {
+    "args": [
+      "no_logging"
+    ], 
+    "ci_platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ], 
+    "cpu_cost": 1.0, 
+    "exclude_configs": [], 
+    "exclude_iomgrs": [], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "h2_fake_resolver_test", 
+    "platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ]
+  }, 
+  {
+    "args": [
+      "no_op"
+    ], 
+    "ci_platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ], 
+    "cpu_cost": 1.0, 
+    "exclude_configs": [], 
+    "exclude_iomgrs": [], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "h2_fake_resolver_test", 
+    "platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ]
+  }, 
+  {
+    "args": [
+      "payload"
+    ], 
+    "ci_platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ], 
+    "cpu_cost": 1.0, 
+    "exclude_configs": [], 
+    "exclude_iomgrs": [], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "h2_fake_resolver_test", 
+    "platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ]
+  }, 
+  {
+    "args": [
+      "ping"
+    ], 
+    "ci_platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ], 
+    "cpu_cost": 1.0, 
+    "exclude_configs": [], 
+    "exclude_iomgrs": [], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "h2_fake_resolver_test", 
+    "platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ]
+  }, 
+  {
+    "args": [
+      "ping_pong_streaming"
+    ], 
+    "ci_platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ], 
+    "cpu_cost": 1.0, 
+    "exclude_configs": [], 
+    "exclude_iomgrs": [], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "h2_fake_resolver_test", 
+    "platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ]
+  }, 
+  {
+    "args": [
+      "registered_call"
+    ], 
+    "ci_platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ], 
+    "cpu_cost": 1.0, 
+    "exclude_configs": [], 
+    "exclude_iomgrs": [], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "h2_fake_resolver_test", 
+    "platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ]
+  }, 
+  {
+    "args": [
+      "request_with_flags"
+    ], 
+    "ci_platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [], 
+    "exclude_iomgrs": [], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "h2_fake_resolver_test", 
+    "platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ]
+  }, 
+  {
+    "args": [
+      "request_with_payload"
+    ], 
+    "ci_platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ], 
+    "cpu_cost": 1.0, 
+    "exclude_configs": [], 
+    "exclude_iomgrs": [], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "h2_fake_resolver_test", 
+    "platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ]
+  }, 
+  {
+    "args": [
+      "server_finishes_request"
+    ], 
+    "ci_platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ], 
+    "cpu_cost": 1.0, 
+    "exclude_configs": [], 
+    "exclude_iomgrs": [], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "h2_fake_resolver_test", 
+    "platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ]
+  }, 
+  {
+    "args": [
+      "shutdown_finishes_calls"
+    ], 
+    "ci_platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ], 
+    "cpu_cost": 1.0, 
+    "exclude_configs": [], 
+    "exclude_iomgrs": [], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "h2_fake_resolver_test", 
+    "platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ]
+  }, 
+  {
+    "args": [
+      "shutdown_finishes_tags"
+    ], 
+    "ci_platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ], 
+    "cpu_cost": 1.0, 
+    "exclude_configs": [], 
+    "exclude_iomgrs": [], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "h2_fake_resolver_test", 
+    "platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ]
+  }, 
+  {
+    "args": [
+      "simple_cacheable_request"
+    ], 
+    "ci_platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ], 
+    "cpu_cost": 1.0, 
+    "exclude_configs": [], 
+    "exclude_iomgrs": [], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "h2_fake_resolver_test", 
+    "platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ]
+  }, 
+  {
+    "args": [
+      "simple_delayed_request"
+    ], 
+    "ci_platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ], 
+    "cpu_cost": 1.0, 
+    "exclude_configs": [], 
+    "exclude_iomgrs": [], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "h2_fake_resolver_test", 
+    "platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ]
+  }, 
+  {
+    "args": [
+      "simple_metadata"
+    ], 
+    "ci_platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ], 
+    "cpu_cost": 1.0, 
+    "exclude_configs": [], 
+    "exclude_iomgrs": [], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "h2_fake_resolver_test", 
+    "platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ]
+  }, 
+  {
+    "args": [
+      "simple_request"
+    ], 
+    "ci_platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ], 
+    "cpu_cost": 1.0, 
+    "exclude_configs": [], 
+    "exclude_iomgrs": [], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "h2_fake_resolver_test", 
+    "platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ]
+  }, 
+  {
+    "args": [
+      "streaming_error_response"
+    ], 
+    "ci_platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ], 
+    "cpu_cost": 1.0, 
+    "exclude_configs": [], 
+    "exclude_iomgrs": [], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "h2_fake_resolver_test", 
+    "platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ]
+  }, 
+  {
+    "args": [
+      "trailing_metadata"
+    ], 
+    "ci_platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ], 
+    "cpu_cost": 1.0, 
+    "exclude_configs": [], 
+    "exclude_iomgrs": [], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "h2_fake_resolver_test", 
+    "platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ]
+  }, 
+  {
+    "args": [
+      "bad_hostname"
+    ], 
+    "ci_platforms": [
+      "windows", 
+      "linux", 
       "posix"
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fakesec_test", 
@@ -6506,6 +7864,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fakesec_test", 
@@ -6527,6 +7886,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fakesec_test", 
@@ -6548,6 +7908,7 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fakesec_test", 
@@ -6569,6 +7930,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fakesec_test", 
@@ -6590,6 +7952,7 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fakesec_test", 
@@ -6611,6 +7974,7 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fakesec_test", 
@@ -6632,6 +7996,7 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fakesec_test", 
@@ -6653,6 +8018,7 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fakesec_test", 
@@ -6674,6 +8040,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fakesec_test", 
@@ -6695,6 +8062,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fakesec_test", 
@@ -6716,6 +8086,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fakesec_test", 
@@ -6737,6 +8108,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fakesec_test", 
@@ -6758,6 +8130,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fakesec_test", 
@@ -6779,6 +8152,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fakesec_test", 
@@ -6800,6 +8174,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fakesec_test", 
@@ -6821,6 +8196,7 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fakesec_test", 
@@ -6842,6 +8218,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fakesec_test", 
@@ -6863,6 +8240,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fakesec_test", 
@@ -6884,6 +8262,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fakesec_test", 
@@ -6905,6 +8284,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fakesec_test", 
@@ -6926,6 +8306,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fakesec_test", 
@@ -6947,6 +8328,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fakesec_test", 
@@ -6968,6 +8350,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fakesec_test", 
@@ -6989,6 +8372,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fakesec_test", 
@@ -7010,6 +8394,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fakesec_test", 
@@ -7031,6 +8416,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fakesec_test", 
@@ -7052,6 +8438,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fakesec_test", 
@@ -7073,6 +8460,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fakesec_test", 
@@ -7094,6 +8482,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fakesec_test", 
@@ -7115,6 +8504,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fakesec_test", 
@@ -7136,6 +8526,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fakesec_test", 
@@ -7157,6 +8548,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fakesec_test", 
@@ -7178,6 +8570,7 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fakesec_test", 
@@ -7199,6 +8592,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fakesec_test", 
@@ -7220,6 +8614,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fakesec_test", 
@@ -7241,6 +8636,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fakesec_test", 
@@ -7262,6 +8658,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fakesec_test", 
@@ -7283,6 +8680,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fakesec_test", 
@@ -7304,6 +8702,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fakesec_test", 
@@ -7325,6 +8724,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fakesec_test", 
@@ -7346,6 +8746,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fakesec_test", 
@@ -7367,6 +8768,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fakesec_test", 
@@ -7388,6 +8790,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fakesec_test", 
@@ -7409,6 +8812,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fd_test", 
@@ -7429,6 +8835,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fd_test", 
@@ -7449,6 +8858,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fd_test", 
@@ -7469,6 +8881,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fd_test", 
@@ -7489,6 +8904,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fd_test", 
@@ -7509,6 +8927,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fd_test", 
@@ -7529,6 +8950,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fd_test", 
@@ -7549,6 +8973,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fd_test", 
@@ -7569,6 +8996,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fd_test", 
@@ -7589,6 +9019,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fd_test", 
@@ -7609,6 +9042,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fd_test", 
@@ -7629,6 +9065,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fd_test", 
@@ -7649,6 +9088,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fd_test", 
@@ -7669,6 +9111,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fd_test", 
@@ -7689,6 +9134,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fd_test", 
@@ -7709,6 +9157,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fd_test", 
@@ -7729,6 +9180,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fd_test", 
@@ -7749,6 +9203,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fd_test", 
@@ -7769,6 +9226,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fd_test", 
@@ -7789,6 +9249,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fd_test", 
@@ -7809,6 +9272,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fd_test", 
@@ -7829,6 +9295,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fd_test", 
@@ -7849,6 +9318,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fd_test", 
@@ -7869,6 +9341,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fd_test", 
@@ -7889,6 +9364,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fd_test", 
@@ -7909,6 +9387,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fd_test", 
@@ -7929,6 +9410,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fd_test", 
@@ -7949,6 +9433,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fd_test", 
@@ -7969,6 +9456,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fd_test", 
@@ -7989,6 +9479,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fd_test", 
@@ -8009,6 +9502,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fd_test", 
@@ -8029,6 +9525,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fd_test", 
@@ -8049,6 +9548,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fd_test", 
@@ -8069,6 +9571,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fd_test", 
@@ -8089,6 +9594,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fd_test", 
@@ -8109,6 +9617,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fd_test", 
@@ -8129,6 +9640,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fd_test", 
@@ -8149,6 +9663,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fd_test", 
@@ -8169,6 +9686,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fd_test", 
@@ -8190,6 +9710,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full_test", 
@@ -8212,6 +9733,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full_test", 
@@ -8234,6 +9756,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full_test", 
@@ -8256,6 +9779,7 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full_test", 
@@ -8278,6 +9802,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full_test", 
@@ -8300,6 +9825,7 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full_test", 
@@ -8322,6 +9848,7 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full_test", 
@@ -8344,6 +9871,7 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full_test", 
@@ -8366,6 +9894,7 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full_test", 
@@ -8388,6 +9917,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full_test", 
@@ -8410,6 +9940,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full_test", 
@@ -8432,6 +9965,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full_test", 
@@ -8454,6 +9988,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full_test", 
@@ -8476,6 +10011,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full_test", 
@@ -8498,6 +10034,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full_test", 
@@ -8520,6 +10057,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full_test", 
@@ -8542,6 +10080,7 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full_test", 
@@ -8564,6 +10103,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full_test", 
@@ -8586,6 +10126,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full_test", 
@@ -8608,6 +10149,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full_test", 
@@ -8630,6 +10172,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full_test", 
@@ -8652,6 +10195,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full_test", 
@@ -8674,6 +10218,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full_test", 
@@ -8696,6 +10241,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full_test", 
@@ -8718,6 +10264,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full_test", 
@@ -8740,6 +10287,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full_test", 
@@ -8762,6 +10310,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full_test", 
@@ -8784,6 +10333,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full_test", 
@@ -8806,6 +10356,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full_test", 
@@ -8828,6 +10379,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full_test", 
@@ -8850,6 +10402,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full_test", 
@@ -8872,6 +10425,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full_test", 
@@ -8894,6 +10448,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full_test", 
@@ -8916,6 +10471,7 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full_test", 
@@ -8938,6 +10494,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full_test", 
@@ -8960,6 +10517,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full_test", 
@@ -8982,6 +10540,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full_test", 
@@ -9004,6 +10563,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full_test", 
@@ -9026,6 +10586,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full_test", 
@@ -9048,6 +10609,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full_test", 
@@ -9070,6 +10632,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full_test", 
@@ -9092,6 +10655,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full_test", 
@@ -9114,6 +10678,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full_test", 
@@ -9136,6 +10701,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full_test", 
@@ -9155,6 +10721,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+pipe_test", 
@@ -9171,6 +10740,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+pipe_test", 
@@ -9187,6 +10759,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+pipe_test", 
@@ -9203,6 +10778,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+pipe_test", 
@@ -9219,6 +10797,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+pipe_test", 
@@ -9235,6 +10816,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+pipe_test", 
@@ -9251,6 +10835,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+pipe_test", 
@@ -9267,6 +10854,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+pipe_test", 
@@ -9283,6 +10873,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+pipe_test", 
@@ -9299,6 +10892,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+pipe_test", 
@@ -9315,6 +10911,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+pipe_test", 
@@ -9331,6 +10930,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+pipe_test", 
@@ -9347,6 +10949,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+pipe_test", 
@@ -9363,6 +10968,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+pipe_test", 
@@ -9379,6 +10987,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+pipe_test", 
@@ -9395,6 +11006,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+pipe_test", 
@@ -9411,6 +11025,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+pipe_test", 
@@ -9427,6 +11044,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+pipe_test", 
@@ -9443,6 +11063,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+pipe_test", 
@@ -9459,6 +11082,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+pipe_test", 
@@ -9475,6 +11101,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+pipe_test", 
@@ -9491,6 +11120,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+pipe_test", 
@@ -9507,6 +11139,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+pipe_test", 
@@ -9523,6 +11158,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+pipe_test", 
@@ -9539,6 +11177,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+pipe_test", 
@@ -9555,6 +11196,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+pipe_test", 
@@ -9571,6 +11215,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+pipe_test", 
@@ -9587,6 +11234,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+pipe_test", 
@@ -9603,6 +11253,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+pipe_test", 
@@ -9619,6 +11272,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+pipe_test", 
@@ -9635,6 +11291,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+pipe_test", 
@@ -9651,6 +11310,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+pipe_test", 
@@ -9667,6 +11329,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+pipe_test", 
@@ -9683,6 +11348,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+pipe_test", 
@@ -9699,6 +11367,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+pipe_test", 
@@ -9715,6 +11386,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+pipe_test", 
@@ -9731,6 +11405,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+pipe_test", 
@@ -9747,6 +11424,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+pipe_test", 
@@ -9763,6 +11443,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+pipe_test", 
@@ -9779,6 +11462,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+pipe_test", 
@@ -9795,6 +11481,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+pipe_test", 
@@ -9811,6 +11500,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+pipe_test", 
@@ -9827,6 +11519,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+pipe_test", 
@@ -9843,6 +11538,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+pipe_test", 
@@ -9862,6 +11560,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+trace_test", 
@@ -9884,6 +11583,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+trace_test", 
@@ -9906,6 +11606,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+trace_test", 
@@ -9928,6 +11629,7 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+trace_test", 
@@ -9950,6 +11652,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+trace_test", 
@@ -9972,6 +11675,7 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+trace_test", 
@@ -9994,6 +11698,7 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+trace_test", 
@@ -10016,6 +11721,7 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+trace_test", 
@@ -10038,6 +11744,7 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+trace_test", 
@@ -10060,6 +11767,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+trace_test", 
@@ -10082,6 +11790,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+trace_test", 
@@ -10104,6 +11815,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+trace_test", 
@@ -10126,6 +11838,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+trace_test", 
@@ -10148,6 +11861,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+trace_test", 
@@ -10170,6 +11884,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+trace_test", 
@@ -10192,6 +11907,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+trace_test", 
@@ -10214,6 +11930,7 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+trace_test", 
@@ -10236,6 +11953,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+trace_test", 
@@ -10258,6 +11976,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+trace_test", 
@@ -10280,6 +11999,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+trace_test", 
@@ -10302,6 +12022,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+trace_test", 
@@ -10324,6 +12045,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+trace_test", 
@@ -10346,6 +12068,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+trace_test", 
@@ -10368,6 +12091,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+trace_test", 
@@ -10390,6 +12114,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+trace_test", 
@@ -10412,6 +12137,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+trace_test", 
@@ -10434,6 +12160,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+trace_test", 
@@ -10456,6 +12183,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+trace_test", 
@@ -10478,6 +12206,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+trace_test", 
@@ -10500,6 +12229,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+trace_test", 
@@ -10522,6 +12252,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+trace_test", 
@@ -10544,6 +12275,7 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+trace_test", 
@@ -10566,6 +12298,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+trace_test", 
@@ -10588,6 +12321,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+trace_test", 
@@ -10610,6 +12344,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+trace_test", 
@@ -10632,6 +12367,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+trace_test", 
@@ -10654,6 +12390,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+trace_test", 
@@ -10676,6 +12413,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+trace_test", 
@@ -10698,6 +12436,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+trace_test", 
@@ -10720,6 +12459,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+trace_test", 
@@ -10742,6 +12482,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+trace_test", 
@@ -10764,6 +12505,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+trace_test", 
@@ -10785,6 +12527,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_http_proxy_test", 
@@ -10806,6 +12551,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_http_proxy_test", 
@@ -10827,6 +12575,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_http_proxy_test", 
@@ -10848,6 +12599,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_http_proxy_test", 
@@ -10869,6 +12623,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_http_proxy_test", 
@@ -10890,6 +12647,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_http_proxy_test", 
@@ -10911,6 +12671,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_http_proxy_test", 
@@ -10932,6 +12695,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_http_proxy_test", 
@@ -10953,6 +12719,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_http_proxy_test", 
@@ -10974,6 +12743,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_http_proxy_test", 
@@ -10995,6 +12767,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_http_proxy_test", 
@@ -11016,6 +12791,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_http_proxy_test", 
@@ -11037,6 +12815,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_http_proxy_test", 
@@ -11058,6 +12839,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_http_proxy_test", 
@@ -11079,6 +12863,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_http_proxy_test", 
@@ -11100,6 +12887,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_http_proxy_test", 
@@ -11121,6 +12911,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_http_proxy_test", 
@@ -11142,6 +12935,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_http_proxy_test", 
@@ -11163,6 +12959,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_http_proxy_test", 
@@ -11184,6 +12983,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_http_proxy_test", 
@@ -11205,6 +13007,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_http_proxy_test", 
@@ -11226,6 +13031,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_http_proxy_test", 
@@ -11247,6 +13055,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_http_proxy_test", 
@@ -11268,6 +13079,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_http_proxy_test", 
@@ -11289,6 +13103,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_http_proxy_test", 
@@ -11310,6 +13127,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_http_proxy_test", 
@@ -11331,6 +13151,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_http_proxy_test", 
@@ -11352,6 +13175,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_http_proxy_test", 
@@ -11373,6 +13199,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_http_proxy_test", 
@@ -11394,6 +13223,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_http_proxy_test", 
@@ -11415,6 +13247,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_http_proxy_test", 
@@ -11436,6 +13271,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_http_proxy_test", 
@@ -11457,6 +13295,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_http_proxy_test", 
@@ -11478,6 +13319,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_http_proxy_test", 
@@ -11499,6 +13343,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_http_proxy_test", 
@@ -11520,6 +13367,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_http_proxy_test", 
@@ -11541,6 +13391,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_http_proxy_test", 
@@ -11562,6 +13415,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_http_proxy_test", 
@@ -11583,6 +13439,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_http_proxy_test", 
@@ -11604,6 +13463,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_http_proxy_test", 
@@ -11625,6 +13487,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_http_proxy_test", 
@@ -11646,6 +13511,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_http_proxy_test", 
@@ -11667,6 +13535,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_http_proxy_test", 
@@ -11688,6 +13559,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_http_proxy_test", 
@@ -11710,6 +13584,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_load_reporting_test", 
@@ -11732,6 +13607,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_load_reporting_test", 
@@ -11754,6 +13630,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_load_reporting_test", 
@@ -11776,6 +13653,7 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_load_reporting_test", 
@@ -11798,6 +13676,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_load_reporting_test", 
@@ -11820,6 +13699,7 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_load_reporting_test", 
@@ -11842,6 +13722,7 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_load_reporting_test", 
@@ -11864,6 +13745,7 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_load_reporting_test", 
@@ -11886,6 +13768,7 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_load_reporting_test", 
@@ -11908,6 +13791,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_load_reporting_test", 
@@ -11930,6 +13814,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_load_reporting_test", 
@@ -11952,6 +13839,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_load_reporting_test", 
@@ -11974,6 +13862,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_load_reporting_test", 
@@ -11996,6 +13885,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_load_reporting_test", 
@@ -12018,6 +13908,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_load_reporting_test", 
@@ -12040,6 +13931,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_load_reporting_test", 
@@ -12062,6 +13954,7 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_load_reporting_test", 
@@ -12084,6 +13977,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_load_reporting_test", 
@@ -12106,6 +14000,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_load_reporting_test", 
@@ -12128,6 +14023,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_load_reporting_test", 
@@ -12150,6 +14046,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_load_reporting_test", 
@@ -12172,6 +14069,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_load_reporting_test", 
@@ -12194,6 +14092,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_load_reporting_test", 
@@ -12216,6 +14115,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_load_reporting_test", 
@@ -12238,6 +14138,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_load_reporting_test", 
@@ -12260,6 +14161,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_load_reporting_test", 
@@ -12282,6 +14184,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_load_reporting_test", 
@@ -12304,6 +14207,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_load_reporting_test", 
@@ -12326,6 +14230,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_load_reporting_test", 
@@ -12348,6 +14253,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_load_reporting_test", 
@@ -12370,6 +14276,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_load_reporting_test", 
@@ -12392,6 +14299,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_load_reporting_test", 
@@ -12414,6 +14322,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_load_reporting_test", 
@@ -12436,6 +14345,7 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_load_reporting_test", 
@@ -12458,6 +14368,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_load_reporting_test", 
@@ -12480,6 +14391,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_load_reporting_test", 
@@ -12502,6 +14414,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_load_reporting_test", 
@@ -12524,6 +14437,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_load_reporting_test", 
@@ -12546,6 +14460,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_load_reporting_test", 
@@ -12568,6 +14483,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_load_reporting_test", 
@@ -12590,6 +14506,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_load_reporting_test", 
@@ -12612,6 +14529,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_load_reporting_test", 
@@ -12634,6 +14552,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_load_reporting_test", 
@@ -12656,6 +14575,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_load_reporting_test", 
@@ -12677,6 +14597,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_oauth2_test", 
@@ -12698,6 +14621,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_oauth2_test", 
@@ -12719,6 +14645,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_oauth2_test", 
@@ -12740,6 +14669,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_oauth2_test", 
@@ -12761,6 +14693,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_oauth2_test", 
@@ -12782,6 +14717,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_oauth2_test", 
@@ -12803,6 +14741,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_oauth2_test", 
@@ -12824,6 +14765,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_oauth2_test", 
@@ -12845,6 +14789,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_oauth2_test", 
@@ -12866,6 +14813,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_oauth2_test", 
@@ -12887,6 +14837,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_oauth2_test", 
@@ -12908,6 +14861,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_oauth2_test", 
@@ -12929,6 +14885,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_oauth2_test", 
@@ -12950,6 +14909,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_oauth2_test", 
@@ -12971,6 +14933,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_oauth2_test", 
@@ -12992,6 +14957,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_oauth2_test", 
@@ -13013,6 +14981,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_oauth2_test", 
@@ -13034,6 +15005,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_oauth2_test", 
@@ -13055,6 +15029,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_oauth2_test", 
@@ -13076,6 +15053,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_oauth2_test", 
@@ -13097,6 +15077,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_oauth2_test", 
@@ -13118,6 +15101,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_oauth2_test", 
@@ -13139,6 +15125,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_oauth2_test", 
@@ -13160,6 +15149,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_oauth2_test", 
@@ -13181,6 +15173,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_oauth2_test", 
@@ -13202,6 +15197,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_oauth2_test", 
@@ -13223,6 +15221,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_oauth2_test", 
@@ -13244,6 +15245,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_oauth2_test", 
@@ -13265,6 +15269,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_oauth2_test", 
@@ -13286,6 +15293,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_oauth2_test", 
@@ -13307,6 +15317,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_oauth2_test", 
@@ -13328,6 +15341,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_oauth2_test", 
@@ -13349,6 +15365,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_oauth2_test", 
@@ -13370,6 +15389,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_oauth2_test", 
@@ -13391,6 +15413,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_oauth2_test", 
@@ -13412,6 +15437,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_oauth2_test", 
@@ -13433,6 +15461,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_oauth2_test", 
@@ -13454,6 +15485,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_oauth2_test", 
@@ -13475,6 +15509,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_oauth2_test", 
@@ -13496,6 +15533,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_oauth2_test", 
@@ -13517,6 +15557,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_oauth2_test", 
@@ -13538,6 +15581,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_oauth2_test", 
@@ -13559,6 +15605,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_oauth2_test", 
@@ -13580,6 +15629,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_oauth2_test", 
@@ -13601,6 +15653,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_proxy_test", 
@@ -13622,6 +15677,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_proxy_test", 
@@ -13643,6 +15701,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_proxy_test", 
@@ -13664,6 +15725,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_proxy_test", 
@@ -13685,6 +15749,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_proxy_test", 
@@ -13706,6 +15773,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_proxy_test", 
@@ -13727,6 +15797,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_proxy_test", 
@@ -13748,6 +15821,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_proxy_test", 
@@ -13769,6 +15845,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_proxy_test", 
@@ -13790,6 +15869,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_proxy_test", 
@@ -13811,6 +15893,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_proxy_test", 
@@ -13832,6 +15917,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_proxy_test", 
@@ -13853,6 +15941,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_proxy_test", 
@@ -13874,6 +15965,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_proxy_test", 
@@ -13895,6 +15989,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_proxy_test", 
@@ -13916,6 +16013,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_proxy_test", 
@@ -13937,6 +16037,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_proxy_test", 
@@ -13958,6 +16061,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_proxy_test", 
@@ -13979,6 +16085,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_proxy_test", 
@@ -14000,6 +16109,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_proxy_test", 
@@ -14021,6 +16133,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_proxy_test", 
@@ -14042,6 +16157,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_proxy_test", 
@@ -14063,6 +16181,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_proxy_test", 
@@ -14084,6 +16205,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_proxy_test", 
@@ -14105,6 +16229,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_proxy_test", 
@@ -14126,6 +16253,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_proxy_test", 
@@ -14147,6 +16277,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_proxy_test", 
@@ -14168,6 +16301,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_proxy_test", 
@@ -14189,6 +16325,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_proxy_test", 
@@ -14210,6 +16349,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_proxy_test", 
@@ -14231,6 +16373,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_proxy_test", 
@@ -14252,6 +16397,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_proxy_test", 
@@ -14273,6 +16421,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_proxy_test", 
@@ -14294,6 +16445,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_proxy_test", 
@@ -14315,6 +16469,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_proxy_test", 
@@ -14336,6 +16493,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_proxy_test", 
@@ -14357,6 +16517,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_proxy_test", 
@@ -14378,6 +16541,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_proxy_test", 
@@ -14399,6 +16565,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_test", 
@@ -14420,6 +16589,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_test", 
@@ -14441,6 +16613,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_test", 
@@ -14462,6 +16637,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_test", 
@@ -14483,6 +16661,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_test", 
@@ -14504,6 +16685,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_test", 
@@ -14525,6 +16709,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_test", 
@@ -14546,6 +16733,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_test", 
@@ -14567,6 +16757,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_test", 
@@ -14588,6 +16781,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_test", 
@@ -14609,6 +16805,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_test", 
@@ -14630,6 +16829,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_test", 
@@ -14651,6 +16853,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_test", 
@@ -14672,6 +16877,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_test", 
@@ -14693,6 +16901,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_test", 
@@ -14714,6 +16925,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_test", 
@@ -14735,6 +16949,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_test", 
@@ -14756,6 +16973,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_test", 
@@ -14777,6 +16997,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_test", 
@@ -14798,6 +17021,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_test", 
@@ -14819,6 +17045,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_test", 
@@ -14840,6 +17069,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_test", 
@@ -14861,6 +17093,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_test", 
@@ -14882,6 +17117,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_test", 
@@ -14903,6 +17141,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_test", 
@@ -14924,6 +17165,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_test", 
@@ -14945,6 +17189,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_test", 
@@ -14966,6 +17213,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_test", 
@@ -14987,6 +17237,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_test", 
@@ -15008,6 +17261,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_test", 
@@ -15029,6 +17285,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_test", 
@@ -15050,6 +17309,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_test", 
@@ -15071,6 +17333,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_test", 
@@ -15092,6 +17357,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_test", 
@@ -15113,6 +17381,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_test", 
@@ -15134,6 +17405,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_test", 
@@ -15155,6 +17429,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_test", 
@@ -15176,6 +17453,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_test", 
@@ -15197,6 +17477,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_test", 
@@ -15218,6 +17501,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair+trace_test", 
@@ -15239,6 +17525,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair+trace_test", 
@@ -15260,6 +17549,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair+trace_test", 
@@ -15281,6 +17573,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair+trace_test", 
@@ -15302,6 +17597,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair+trace_test", 
@@ -15323,6 +17621,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair+trace_test", 
@@ -15344,6 +17645,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair+trace_test", 
@@ -15365,6 +17669,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair+trace_test", 
@@ -15386,6 +17693,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair+trace_test", 
@@ -15407,6 +17717,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair+trace_test", 
@@ -15428,6 +17741,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair+trace_test", 
@@ -15449,6 +17765,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair+trace_test", 
@@ -15470,6 +17789,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair+trace_test", 
@@ -15491,6 +17813,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair+trace_test", 
@@ -15512,6 +17837,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair+trace_test", 
@@ -15533,6 +17861,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair+trace_test", 
@@ -15554,6 +17885,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair+trace_test", 
@@ -15575,6 +17909,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair+trace_test", 
@@ -15596,6 +17933,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair+trace_test", 
@@ -15617,6 +17957,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair+trace_test", 
@@ -15638,6 +17981,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair+trace_test", 
@@ -15659,6 +18005,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair+trace_test", 
@@ -15680,6 +18029,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair+trace_test", 
@@ -15701,6 +18053,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair+trace_test", 
@@ -15722,6 +18077,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair+trace_test", 
@@ -15743,6 +18101,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair+trace_test", 
@@ -15764,6 +18125,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair+trace_test", 
@@ -15785,6 +18149,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair+trace_test", 
@@ -15806,6 +18173,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair+trace_test", 
@@ -15827,6 +18197,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair+trace_test", 
@@ -15848,6 +18221,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair+trace_test", 
@@ -15869,6 +18245,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair+trace_test", 
@@ -15890,6 +18269,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair+trace_test", 
@@ -15911,6 +18293,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair+trace_test", 
@@ -15932,6 +18317,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair+trace_test", 
@@ -15953,6 +18341,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair+trace_test", 
@@ -15974,6 +18365,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair+trace_test", 
@@ -15994,7 +18388,12 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [], 
+    "exclude_configs": [
+      "msan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_test", 
@@ -16015,7 +18414,12 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [], 
+    "exclude_configs": [
+      "msan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_test", 
@@ -16036,7 +18440,12 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [], 
+    "exclude_configs": [
+      "msan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_test", 
@@ -16057,7 +18466,12 @@
       "posix"
     ], 
     "cpu_cost": 0.1, 
-    "exclude_configs": [], 
+    "exclude_configs": [
+      "msan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_test", 
@@ -16078,7 +18492,12 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [], 
+    "exclude_configs": [
+      "msan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_test", 
@@ -16099,7 +18518,12 @@
       "posix"
     ], 
     "cpu_cost": 0.1, 
-    "exclude_configs": [], 
+    "exclude_configs": [
+      "msan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_test", 
@@ -16120,7 +18544,12 @@
       "posix"
     ], 
     "cpu_cost": 0.1, 
-    "exclude_configs": [], 
+    "exclude_configs": [
+      "msan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_test", 
@@ -16141,7 +18570,12 @@
       "posix"
     ], 
     "cpu_cost": 0.1, 
-    "exclude_configs": [], 
+    "exclude_configs": [
+      "msan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_test", 
@@ -16162,7 +18596,12 @@
       "posix"
     ], 
     "cpu_cost": 0.1, 
-    "exclude_configs": [], 
+    "exclude_configs": [
+      "msan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_test", 
@@ -16183,7 +18622,12 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [], 
+    "exclude_configs": [
+      "msan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_test", 
@@ -16204,7 +18648,12 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [], 
+    "exclude_configs": [
+      "msan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_test", 
@@ -16225,7 +18674,12 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [], 
+    "exclude_configs": [
+      "msan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_test", 
@@ -16246,7 +18700,12 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [], 
+    "exclude_configs": [
+      "msan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_test", 
@@ -16267,7 +18726,12 @@
       "posix"
     ], 
     "cpu_cost": 0.1, 
-    "exclude_configs": [], 
+    "exclude_configs": [
+      "msan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_test", 
@@ -16288,7 +18752,12 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [], 
+    "exclude_configs": [
+      "msan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_test", 
@@ -16309,7 +18778,12 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [], 
+    "exclude_configs": [
+      "msan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_test", 
@@ -16330,7 +18804,12 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [], 
+    "exclude_configs": [
+      "msan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_test", 
@@ -16351,7 +18830,12 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [], 
+    "exclude_configs": [
+      "msan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_test", 
@@ -16372,7 +18856,12 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [], 
+    "exclude_configs": [
+      "msan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_test", 
@@ -16393,7 +18882,12 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [], 
+    "exclude_configs": [
+      "msan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_test", 
@@ -16414,7 +18908,12 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [], 
+    "exclude_configs": [
+      "msan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_test", 
@@ -16435,7 +18934,12 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [], 
+    "exclude_configs": [
+      "msan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_test", 
@@ -16456,7 +18960,12 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [], 
+    "exclude_configs": [
+      "msan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_test", 
@@ -16477,7 +18986,12 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [], 
+    "exclude_configs": [
+      "msan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_test", 
@@ -16498,7 +19012,12 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [], 
+    "exclude_configs": [
+      "msan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_test", 
@@ -16519,7 +19038,12 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [], 
+    "exclude_configs": [
+      "msan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_test", 
@@ -16540,7 +19064,12 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [], 
+    "exclude_configs": [
+      "msan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_test", 
@@ -16561,7 +19090,12 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [], 
+    "exclude_configs": [
+      "msan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_test", 
@@ -16582,7 +19116,12 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [], 
+    "exclude_configs": [
+      "msan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_test", 
@@ -16603,7 +19142,12 @@
       "posix"
     ], 
     "cpu_cost": 0.1, 
-    "exclude_configs": [], 
+    "exclude_configs": [
+      "msan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_test", 
@@ -16624,7 +19168,12 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [], 
+    "exclude_configs": [
+      "msan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_test", 
@@ -16645,7 +19194,12 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [], 
+    "exclude_configs": [
+      "msan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_test", 
@@ -16666,7 +19220,12 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [], 
+    "exclude_configs": [
+      "msan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_test", 
@@ -16687,7 +19246,12 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [], 
+    "exclude_configs": [
+      "msan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_test", 
@@ -16708,7 +19272,12 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [], 
+    "exclude_configs": [
+      "msan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_test", 
@@ -16729,7 +19298,12 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [], 
+    "exclude_configs": [
+      "msan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_test", 
@@ -16750,7 +19324,12 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [], 
+    "exclude_configs": [
+      "msan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_test", 
@@ -16771,7 +19350,12 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [], 
+    "exclude_configs": [
+      "msan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_test", 
@@ -16792,7 +19376,12 @@
       "posix"
     ], 
     "cpu_cost": 1.0, 
-    "exclude_configs": [], 
+    "exclude_configs": [
+      "msan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_test", 
@@ -16815,6 +19404,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_test", 
@@ -16837,6 +19427,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_test", 
@@ -16859,6 +19450,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_test", 
@@ -16881,6 +19473,7 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_test", 
@@ -16903,6 +19496,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_test", 
@@ -16925,6 +19519,7 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_test", 
@@ -16947,6 +19542,7 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_test", 
@@ -16969,6 +19565,7 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_test", 
@@ -16991,6 +19588,7 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_test", 
@@ -17013,6 +19611,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_test", 
@@ -17035,6 +19634,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_test", 
@@ -17057,6 +19659,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_test", 
@@ -17079,6 +19682,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_test", 
@@ -17101,6 +19705,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_test", 
@@ -17123,6 +19728,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_test", 
@@ -17145,6 +19751,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_test", 
@@ -17167,6 +19774,7 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_test", 
@@ -17189,6 +19797,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_test", 
@@ -17211,6 +19820,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_test", 
@@ -17233,6 +19843,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_test", 
@@ -17255,6 +19866,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_test", 
@@ -17277,6 +19889,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_test", 
@@ -17299,6 +19912,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_test", 
@@ -17321,6 +19935,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_test", 
@@ -17343,6 +19958,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_test", 
@@ -17365,6 +19981,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_test", 
@@ -17387,6 +20004,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_test", 
@@ -17409,6 +20027,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_test", 
@@ -17431,6 +20050,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_test", 
@@ -17453,6 +20073,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_test", 
@@ -17475,6 +20096,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_test", 
@@ -17497,6 +20119,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_test", 
@@ -17519,6 +20142,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_test", 
@@ -17541,6 +20165,7 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_test", 
@@ -17563,6 +20188,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_test", 
@@ -17585,6 +20211,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_test", 
@@ -17607,6 +20234,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_test", 
@@ -17629,6 +20257,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_test", 
@@ -17651,6 +20280,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_test", 
@@ -17673,6 +20303,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_test", 
@@ -17695,6 +20326,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_test", 
@@ -17717,6 +20349,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_test", 
@@ -17739,6 +20372,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_test", 
@@ -17761,6 +20395,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_test", 
@@ -17783,6 +20418,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_cert_test", 
@@ -17805,6 +20441,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_cert_test", 
@@ -17827,6 +20464,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_cert_test", 
@@ -17849,6 +20487,7 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_cert_test", 
@@ -17871,6 +20510,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_cert_test", 
@@ -17893,6 +20533,7 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_cert_test", 
@@ -17915,6 +20556,7 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_cert_test", 
@@ -17937,6 +20579,7 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_cert_test", 
@@ -17959,6 +20602,7 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_cert_test", 
@@ -17981,6 +20625,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_cert_test", 
@@ -18003,6 +20648,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_cert_test", 
@@ -18025,6 +20673,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_cert_test", 
@@ -18047,6 +20696,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_cert_test", 
@@ -18069,6 +20719,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_cert_test", 
@@ -18091,6 +20742,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_cert_test", 
@@ -18113,6 +20765,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_cert_test", 
@@ -18135,6 +20788,7 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_cert_test", 
@@ -18157,6 +20811,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_cert_test", 
@@ -18179,6 +20834,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_cert_test", 
@@ -18201,6 +20857,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_cert_test", 
@@ -18223,6 +20880,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_cert_test", 
@@ -18245,6 +20903,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_cert_test", 
@@ -18267,6 +20926,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_cert_test", 
@@ -18289,6 +20949,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_cert_test", 
@@ -18311,6 +20972,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_cert_test", 
@@ -18333,6 +20995,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_cert_test", 
@@ -18355,6 +21018,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_cert_test", 
@@ -18377,6 +21041,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_cert_test", 
@@ -18399,6 +21064,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_cert_test", 
@@ -18421,6 +21087,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_cert_test", 
@@ -18443,6 +21110,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_cert_test", 
@@ -18465,6 +21133,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_cert_test", 
@@ -18487,6 +21156,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_cert_test", 
@@ -18509,6 +21179,7 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_cert_test", 
@@ -18531,6 +21202,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_cert_test", 
@@ -18553,6 +21225,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_cert_test", 
@@ -18575,6 +21248,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_cert_test", 
@@ -18597,6 +21271,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_cert_test", 
@@ -18619,6 +21294,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_cert_test", 
@@ -18641,6 +21317,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_cert_test", 
@@ -18663,6 +21340,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_cert_test", 
@@ -18685,6 +21363,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_cert_test", 
@@ -18707,6 +21386,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_cert_test", 
@@ -18729,6 +21409,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_cert_test", 
@@ -18750,6 +21431,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_proxy_test", 
@@ -18771,6 +21455,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_proxy_test", 
@@ -18792,6 +21479,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_proxy_test", 
@@ -18813,6 +21503,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_proxy_test", 
@@ -18834,6 +21527,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_proxy_test", 
@@ -18855,6 +21551,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_proxy_test", 
@@ -18876,6 +21575,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_proxy_test", 
@@ -18897,6 +21599,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_proxy_test", 
@@ -18918,6 +21623,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_proxy_test", 
@@ -18939,6 +21647,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_proxy_test", 
@@ -18960,6 +21671,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_proxy_test", 
@@ -18981,6 +21695,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_proxy_test", 
@@ -19002,6 +21719,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_proxy_test", 
@@ -19023,6 +21743,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_proxy_test", 
@@ -19044,6 +21767,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_proxy_test", 
@@ -19065,6 +21791,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_proxy_test", 
@@ -19086,6 +21815,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_proxy_test", 
@@ -19107,6 +21839,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_proxy_test", 
@@ -19128,6 +21863,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_proxy_test", 
@@ -19149,6 +21887,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_proxy_test", 
@@ -19170,6 +21911,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_proxy_test", 
@@ -19191,6 +21935,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_proxy_test", 
@@ -19212,6 +21959,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_proxy_test", 
@@ -19233,6 +21983,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_proxy_test", 
@@ -19254,6 +22007,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_proxy_test", 
@@ -19275,6 +22031,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_proxy_test", 
@@ -19296,6 +22055,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_proxy_test", 
@@ -19317,6 +22079,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_proxy_test", 
@@ -19338,6 +22103,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_proxy_test", 
@@ -19359,6 +22127,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_proxy_test", 
@@ -19380,6 +22151,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_proxy_test", 
@@ -19401,6 +22175,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_proxy_test", 
@@ -19422,6 +22199,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_proxy_test", 
@@ -19443,6 +22223,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_proxy_test", 
@@ -19464,6 +22247,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_proxy_test", 
@@ -19485,6 +22271,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_proxy_test", 
@@ -19506,6 +22295,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_proxy_test", 
@@ -19527,6 +22319,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_ssl_proxy_test", 
@@ -19548,6 +22343,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_uds_test", 
@@ -19568,6 +22366,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_uds_test", 
@@ -19588,6 +22389,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_uds_test", 
@@ -19608,6 +22412,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_uds_test", 
@@ -19628,6 +22435,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_uds_test", 
@@ -19648,6 +22458,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_uds_test", 
@@ -19668,6 +22481,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_uds_test", 
@@ -19688,6 +22504,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_uds_test", 
@@ -19708,6 +22527,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_uds_test", 
@@ -19728,6 +22550,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_uds_test", 
@@ -19748,6 +22573,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_uds_test", 
@@ -19768,6 +22596,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_uds_test", 
@@ -19788,6 +22619,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_uds_test", 
@@ -19808,6 +22642,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_uds_test", 
@@ -19828,6 +22665,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_uds_test", 
@@ -19848,6 +22688,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_uds_test", 
@@ -19868,6 +22711,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_uds_test", 
@@ -19888,6 +22734,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_uds_test", 
@@ -19908,6 +22757,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_uds_test", 
@@ -19928,6 +22780,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_uds_test", 
@@ -19948,6 +22803,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_uds_test", 
@@ -19968,6 +22826,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_uds_test", 
@@ -19988,6 +22849,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_uds_test", 
@@ -20008,6 +22872,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_uds_test", 
@@ -20028,6 +22895,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_uds_test", 
@@ -20048,6 +22918,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_uds_test", 
@@ -20068,6 +22941,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_uds_test", 
@@ -20088,6 +22964,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_uds_test", 
@@ -20108,6 +22987,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_uds_test", 
@@ -20128,6 +23010,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_uds_test", 
@@ -20148,6 +23033,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_uds_test", 
@@ -20168,6 +23056,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_uds_test", 
@@ -20188,6 +23079,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_uds_test", 
@@ -20208,6 +23102,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_uds_test", 
@@ -20228,6 +23125,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_uds_test", 
@@ -20248,6 +23148,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_uds_test", 
@@ -20268,6 +23171,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_uds_test", 
@@ -20288,6 +23194,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_uds_test", 
@@ -20308,6 +23217,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_uds_test", 
@@ -20328,6 +23240,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_uds_test", 
@@ -20348,6 +23263,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_uds_test", 
@@ -20368,6 +23286,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_uds_test", 
@@ -20388,6 +23309,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_uds_test", 
@@ -20409,6 +23333,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_census_nosec_test", 
@@ -20431,6 +23356,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_census_nosec_test", 
@@ -20453,6 +23379,7 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_census_nosec_test", 
@@ -20475,6 +23402,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_census_nosec_test", 
@@ -20497,6 +23425,7 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_census_nosec_test", 
@@ -20519,6 +23448,7 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_census_nosec_test", 
@@ -20541,6 +23471,7 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_census_nosec_test", 
@@ -20563,6 +23494,7 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_census_nosec_test", 
@@ -20585,6 +23517,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_census_nosec_test", 
@@ -20607,6 +23540,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_census_nosec_test", 
@@ -20629,6 +23565,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_census_nosec_test", 
@@ -20651,6 +23588,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_census_nosec_test", 
@@ -20673,6 +23611,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_census_nosec_test", 
@@ -20695,6 +23634,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_census_nosec_test", 
@@ -20717,6 +23657,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_census_nosec_test", 
@@ -20739,6 +23680,7 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_census_nosec_test", 
@@ -20761,6 +23703,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_census_nosec_test", 
@@ -20783,6 +23726,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_census_nosec_test", 
@@ -20805,6 +23749,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_census_nosec_test", 
@@ -20827,6 +23772,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_census_nosec_test", 
@@ -20849,6 +23795,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_census_nosec_test", 
@@ -20871,6 +23818,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_census_nosec_test", 
@@ -20893,6 +23841,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_census_nosec_test", 
@@ -20915,6 +23864,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_census_nosec_test", 
@@ -20937,6 +23887,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_census_nosec_test", 
@@ -20959,6 +23910,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_census_nosec_test", 
@@ -20981,6 +23933,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_census_nosec_test", 
@@ -21003,6 +23956,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_census_nosec_test", 
@@ -21025,6 +23979,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_census_nosec_test", 
@@ -21047,6 +24002,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_census_nosec_test", 
@@ -21069,6 +24025,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_census_nosec_test", 
@@ -21091,6 +24048,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_census_nosec_test", 
@@ -21113,6 +24071,7 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_census_nosec_test", 
@@ -21135,6 +24094,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_census_nosec_test", 
@@ -21157,6 +24117,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_census_nosec_test", 
@@ -21179,6 +24140,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_census_nosec_test", 
@@ -21201,6 +24163,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_census_nosec_test", 
@@ -21223,6 +24186,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_census_nosec_test", 
@@ -21245,6 +24209,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_census_nosec_test", 
@@ -21267,6 +24232,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_census_nosec_test", 
@@ -21289,6 +24255,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_census_nosec_test", 
@@ -21311,6 +24278,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_census_nosec_test", 
@@ -21333,6 +24301,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_census_nosec_test", 
@@ -21355,6 +24324,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_compress_nosec_test", 
@@ -21377,6 +24347,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_compress_nosec_test", 
@@ -21399,6 +24370,7 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_compress_nosec_test", 
@@ -21421,6 +24393,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_compress_nosec_test", 
@@ -21443,6 +24416,7 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_compress_nosec_test", 
@@ -21465,6 +24439,7 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_compress_nosec_test", 
@@ -21487,6 +24462,7 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_compress_nosec_test", 
@@ -21509,6 +24485,7 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_compress_nosec_test", 
@@ -21531,6 +24508,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_compress_nosec_test", 
@@ -21553,6 +24531,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_compress_nosec_test", 
@@ -21575,6 +24556,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_compress_nosec_test", 
@@ -21597,6 +24579,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_compress_nosec_test", 
@@ -21619,6 +24602,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_compress_nosec_test", 
@@ -21641,6 +24625,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_compress_nosec_test", 
@@ -21663,6 +24648,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_compress_nosec_test", 
@@ -21685,6 +24671,7 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_compress_nosec_test", 
@@ -21707,6 +24694,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_compress_nosec_test", 
@@ -21729,6 +24717,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_compress_nosec_test", 
@@ -21751,6 +24740,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_compress_nosec_test", 
@@ -21773,6 +24763,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_compress_nosec_test", 
@@ -21795,6 +24786,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_compress_nosec_test", 
@@ -21817,6 +24809,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_compress_nosec_test", 
@@ -21839,6 +24832,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_compress_nosec_test", 
@@ -21861,6 +24855,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_compress_nosec_test", 
@@ -21883,6 +24878,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_compress_nosec_test", 
@@ -21905,6 +24901,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_compress_nosec_test", 
@@ -21927,6 +24924,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_compress_nosec_test", 
@@ -21949,6 +24947,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_compress_nosec_test", 
@@ -21971,6 +24970,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_compress_nosec_test", 
@@ -21993,6 +24993,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_compress_nosec_test", 
@@ -22015,6 +25016,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_compress_nosec_test", 
@@ -22037,6 +25039,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_compress_nosec_test", 
@@ -22059,6 +25062,7 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_compress_nosec_test", 
@@ -22081,6 +25085,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_compress_nosec_test", 
@@ -22103,6 +25108,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_compress_nosec_test", 
@@ -22125,6 +25131,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_compress_nosec_test", 
@@ -22147,6 +25154,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_compress_nosec_test", 
@@ -22169,6 +25177,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_compress_nosec_test", 
@@ -22191,6 +25200,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_compress_nosec_test", 
@@ -22213,6 +25223,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_compress_nosec_test", 
@@ -22235,6 +25246,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_compress_nosec_test", 
@@ -22257,6 +25269,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_compress_nosec_test", 
@@ -22279,6 +25292,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_compress_nosec_test", 
@@ -22294,12 +25308,1006 @@
       "bad_hostname"
     ], 
     "ci_platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ], 
+    "cpu_cost": 1.0, 
+    "exclude_configs": [], 
+    "exclude_iomgrs": [], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "h2_fake_resolver_nosec_test", 
+    "platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ]
+  }, 
+  {
+    "args": [
+      "binary_metadata"
+    ], 
+    "ci_platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ], 
+    "cpu_cost": 1.0, 
+    "exclude_configs": [], 
+    "exclude_iomgrs": [], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "h2_fake_resolver_nosec_test", 
+    "platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ]
+  }, 
+  {
+    "args": [
+      "cancel_after_accept"
+    ], 
+    "ci_platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [], 
+    "exclude_iomgrs": [], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "h2_fake_resolver_nosec_test", 
+    "platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ]
+  }, 
+  {
+    "args": [
+      "cancel_after_client_done"
+    ], 
+    "ci_platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ], 
+    "cpu_cost": 1.0, 
+    "exclude_configs": [], 
+    "exclude_iomgrs": [], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "h2_fake_resolver_nosec_test", 
+    "platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ]
+  }, 
+  {
+    "args": [
+      "cancel_after_invoke"
+    ], 
+    "ci_platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [], 
+    "exclude_iomgrs": [], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "h2_fake_resolver_nosec_test", 
+    "platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ]
+  }, 
+  {
+    "args": [
+      "cancel_before_invoke"
+    ], 
+    "ci_platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [], 
+    "exclude_iomgrs": [], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "h2_fake_resolver_nosec_test", 
+    "platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ]
+  }, 
+  {
+    "args": [
+      "cancel_in_a_vacuum"
+    ], 
+    "ci_platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [], 
+    "exclude_iomgrs": [], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "h2_fake_resolver_nosec_test", 
+    "platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ]
+  }, 
+  {
+    "args": [
+      "cancel_with_status"
+    ], 
+    "ci_platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [], 
+    "exclude_iomgrs": [], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "h2_fake_resolver_nosec_test", 
+    "platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ]
+  }, 
+  {
+    "args": [
+      "compressed_payload"
+    ], 
+    "ci_platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ], 
+    "cpu_cost": 1.0, 
+    "exclude_configs": [], 
+    "exclude_iomgrs": [], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "h2_fake_resolver_nosec_test", 
+    "platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ]
+  }, 
+  {
+    "args": [
+      "connectivity"
+    ], 
+    "ci_platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "h2_fake_resolver_nosec_test", 
+    "platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ]
+  }, 
+  {
+    "args": [
+      "default_host"
+    ], 
+    "ci_platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ], 
+    "cpu_cost": 1.0, 
+    "exclude_configs": [], 
+    "exclude_iomgrs": [], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "h2_fake_resolver_nosec_test", 
+    "platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ]
+  }, 
+  {
+    "args": [
+      "disappearing_server"
+    ], 
+    "ci_platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ], 
+    "cpu_cost": 1.0, 
+    "exclude_configs": [], 
+    "exclude_iomgrs": [], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "h2_fake_resolver_nosec_test", 
+    "platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ]
+  }, 
+  {
+    "args": [
+      "empty_batch"
+    ], 
+    "ci_platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ], 
+    "cpu_cost": 1.0, 
+    "exclude_configs": [], 
+    "exclude_iomgrs": [], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "h2_fake_resolver_nosec_test", 
+    "platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ]
+  }, 
+  {
+    "args": [
+      "filter_call_init_fails"
+    ], 
+    "ci_platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ], 
+    "cpu_cost": 1.0, 
+    "exclude_configs": [], 
+    "exclude_iomgrs": [], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "h2_fake_resolver_nosec_test", 
+    "platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ]
+  }, 
+  {
+    "args": [
+      "filter_causes_close"
+    ], 
+    "ci_platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ], 
+    "cpu_cost": 1.0, 
+    "exclude_configs": [], 
+    "exclude_iomgrs": [], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "h2_fake_resolver_nosec_test", 
+    "platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ]
+  }, 
+  {
+    "args": [
+      "graceful_server_shutdown"
+    ], 
+    "ci_platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [], 
+    "exclude_iomgrs": [], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "h2_fake_resolver_nosec_test", 
+    "platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ]
+  }, 
+  {
+    "args": [
+      "high_initial_seqno"
+    ], 
+    "ci_platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ], 
+    "cpu_cost": 1.0, 
+    "exclude_configs": [], 
+    "exclude_iomgrs": [], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "h2_fake_resolver_nosec_test", 
+    "platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ]
+  }, 
+  {
+    "args": [
+      "hpack_size"
+    ], 
+    "ci_platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ], 
+    "cpu_cost": 1.0, 
+    "exclude_configs": [], 
+    "exclude_iomgrs": [], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "h2_fake_resolver_nosec_test", 
+    "platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ]
+  }, 
+  {
+    "args": [
+      "idempotent_request"
+    ], 
+    "ci_platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ], 
+    "cpu_cost": 1.0, 
+    "exclude_configs": [], 
+    "exclude_iomgrs": [], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "h2_fake_resolver_nosec_test", 
+    "platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ]
+  }, 
+  {
+    "args": [
+      "invoke_large_request"
+    ], 
+    "ci_platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ], 
+    "cpu_cost": 1.0, 
+    "exclude_configs": [], 
+    "exclude_iomgrs": [], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "h2_fake_resolver_nosec_test", 
+    "platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ]
+  }, 
+  {
+    "args": [
+      "large_metadata"
+    ], 
+    "ci_platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ], 
+    "cpu_cost": 1.0, 
+    "exclude_configs": [], 
+    "exclude_iomgrs": [], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "h2_fake_resolver_nosec_test", 
+    "platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ]
+  }, 
+  {
+    "args": [
+      "load_reporting_hook"
+    ], 
+    "ci_platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ], 
+    "cpu_cost": 1.0, 
+    "exclude_configs": [], 
+    "exclude_iomgrs": [], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "h2_fake_resolver_nosec_test", 
+    "platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ]
+  }, 
+  {
+    "args": [
+      "max_concurrent_streams"
+    ], 
+    "ci_platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ], 
+    "cpu_cost": 1.0, 
+    "exclude_configs": [], 
+    "exclude_iomgrs": [], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "h2_fake_resolver_nosec_test", 
+    "platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ]
+  }, 
+  {
+    "args": [
+      "max_message_length"
+    ], 
+    "ci_platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ], 
+    "cpu_cost": 1.0, 
+    "exclude_configs": [], 
+    "exclude_iomgrs": [], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "h2_fake_resolver_nosec_test", 
+    "platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ]
+  }, 
+  {
+    "args": [
+      "negative_deadline"
+    ], 
+    "ci_platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ], 
+    "cpu_cost": 1.0, 
+    "exclude_configs": [], 
+    "exclude_iomgrs": [], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "h2_fake_resolver_nosec_test", 
+    "platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ]
+  }, 
+  {
+    "args": [
+      "network_status_change"
+    ], 
+    "ci_platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ], 
+    "cpu_cost": 1.0, 
+    "exclude_configs": [], 
+    "exclude_iomgrs": [], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "h2_fake_resolver_nosec_test", 
+    "platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ]
+  }, 
+  {
+    "args": [
+      "no_logging"
+    ], 
+    "ci_platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ], 
+    "cpu_cost": 1.0, 
+    "exclude_configs": [], 
+    "exclude_iomgrs": [], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "h2_fake_resolver_nosec_test", 
+    "platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ]
+  }, 
+  {
+    "args": [
+      "no_op"
+    ], 
+    "ci_platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ], 
+    "cpu_cost": 1.0, 
+    "exclude_configs": [], 
+    "exclude_iomgrs": [], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "h2_fake_resolver_nosec_test", 
+    "platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ]
+  }, 
+  {
+    "args": [
+      "payload"
+    ], 
+    "ci_platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ], 
+    "cpu_cost": 1.0, 
+    "exclude_configs": [], 
+    "exclude_iomgrs": [], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "h2_fake_resolver_nosec_test", 
+    "platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ]
+  }, 
+  {
+    "args": [
+      "ping"
+    ], 
+    "ci_platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ], 
+    "cpu_cost": 1.0, 
+    "exclude_configs": [], 
+    "exclude_iomgrs": [], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "h2_fake_resolver_nosec_test", 
+    "platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ]
+  }, 
+  {
+    "args": [
+      "ping_pong_streaming"
+    ], 
+    "ci_platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ], 
+    "cpu_cost": 1.0, 
+    "exclude_configs": [], 
+    "exclude_iomgrs": [], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "h2_fake_resolver_nosec_test", 
+    "platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ]
+  }, 
+  {
+    "args": [
+      "registered_call"
+    ], 
+    "ci_platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ], 
+    "cpu_cost": 1.0, 
+    "exclude_configs": [], 
+    "exclude_iomgrs": [], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "h2_fake_resolver_nosec_test", 
+    "platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ]
+  }, 
+  {
+    "args": [
+      "request_with_flags"
+    ], 
+    "ci_platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [], 
+    "exclude_iomgrs": [], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "h2_fake_resolver_nosec_test", 
+    "platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ]
+  }, 
+  {
+    "args": [
+      "request_with_payload"
+    ], 
+    "ci_platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ], 
+    "cpu_cost": 1.0, 
+    "exclude_configs": [], 
+    "exclude_iomgrs": [], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "h2_fake_resolver_nosec_test", 
+    "platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ]
+  }, 
+  {
+    "args": [
+      "server_finishes_request"
+    ], 
+    "ci_platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ], 
+    "cpu_cost": 1.0, 
+    "exclude_configs": [], 
+    "exclude_iomgrs": [], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "h2_fake_resolver_nosec_test", 
+    "platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ]
+  }, 
+  {
+    "args": [
+      "shutdown_finishes_calls"
+    ], 
+    "ci_platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ], 
+    "cpu_cost": 1.0, 
+    "exclude_configs": [], 
+    "exclude_iomgrs": [], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "h2_fake_resolver_nosec_test", 
+    "platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ]
+  }, 
+  {
+    "args": [
+      "shutdown_finishes_tags"
+    ], 
+    "ci_platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ], 
+    "cpu_cost": 1.0, 
+    "exclude_configs": [], 
+    "exclude_iomgrs": [], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "h2_fake_resolver_nosec_test", 
+    "platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ]
+  }, 
+  {
+    "args": [
+      "simple_cacheable_request"
+    ], 
+    "ci_platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ], 
+    "cpu_cost": 1.0, 
+    "exclude_configs": [], 
+    "exclude_iomgrs": [], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "h2_fake_resolver_nosec_test", 
+    "platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ]
+  }, 
+  {
+    "args": [
+      "simple_delayed_request"
+    ], 
+    "ci_platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ], 
+    "cpu_cost": 1.0, 
+    "exclude_configs": [], 
+    "exclude_iomgrs": [], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "h2_fake_resolver_nosec_test", 
+    "platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ]
+  }, 
+  {
+    "args": [
+      "simple_metadata"
+    ], 
+    "ci_platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ], 
+    "cpu_cost": 1.0, 
+    "exclude_configs": [], 
+    "exclude_iomgrs": [], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "h2_fake_resolver_nosec_test", 
+    "platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ]
+  }, 
+  {
+    "args": [
+      "simple_request"
+    ], 
+    "ci_platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ], 
+    "cpu_cost": 1.0, 
+    "exclude_configs": [], 
+    "exclude_iomgrs": [], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "h2_fake_resolver_nosec_test", 
+    "platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ]
+  }, 
+  {
+    "args": [
+      "streaming_error_response"
+    ], 
+    "ci_platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ], 
+    "cpu_cost": 1.0, 
+    "exclude_configs": [], 
+    "exclude_iomgrs": [], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "h2_fake_resolver_nosec_test", 
+    "platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ]
+  }, 
+  {
+    "args": [
+      "trailing_metadata"
+    ], 
+    "ci_platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ], 
+    "cpu_cost": 1.0, 
+    "exclude_configs": [], 
+    "exclude_iomgrs": [], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "h2_fake_resolver_nosec_test", 
+    "platforms": [
+      "windows", 
+      "linux", 
+      "mac", 
+      "posix"
+    ]
+  }, 
+  {
+    "args": [
+      "bad_hostname"
+    ], 
+    "ci_platforms": [
       "linux", 
       "mac", 
       "posix"
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fd_nosec_test", 
@@ -22320,6 +26328,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fd_nosec_test", 
@@ -22340,6 +26351,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fd_nosec_test", 
@@ -22360,6 +26374,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fd_nosec_test", 
@@ -22380,6 +26397,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fd_nosec_test", 
@@ -22400,6 +26420,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fd_nosec_test", 
@@ -22420,6 +26443,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fd_nosec_test", 
@@ -22440,6 +26466,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fd_nosec_test", 
@@ -22460,6 +26489,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fd_nosec_test", 
@@ -22480,6 +26512,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fd_nosec_test", 
@@ -22500,6 +26535,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fd_nosec_test", 
@@ -22520,6 +26558,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fd_nosec_test", 
@@ -22540,6 +26581,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fd_nosec_test", 
@@ -22560,6 +26604,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fd_nosec_test", 
@@ -22580,6 +26627,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fd_nosec_test", 
@@ -22600,6 +26650,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fd_nosec_test", 
@@ -22620,6 +26673,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fd_nosec_test", 
@@ -22640,6 +26696,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fd_nosec_test", 
@@ -22660,6 +26719,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fd_nosec_test", 
@@ -22680,6 +26742,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fd_nosec_test", 
@@ -22700,6 +26765,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fd_nosec_test", 
@@ -22720,6 +26788,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fd_nosec_test", 
@@ -22740,6 +26811,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fd_nosec_test", 
@@ -22760,6 +26834,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fd_nosec_test", 
@@ -22780,6 +26857,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fd_nosec_test", 
@@ -22800,6 +26880,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fd_nosec_test", 
@@ -22820,6 +26903,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fd_nosec_test", 
@@ -22840,6 +26926,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fd_nosec_test", 
@@ -22860,6 +26949,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fd_nosec_test", 
@@ -22880,6 +26972,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fd_nosec_test", 
@@ -22900,6 +26995,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fd_nosec_test", 
@@ -22920,6 +27018,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fd_nosec_test", 
@@ -22940,6 +27041,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fd_nosec_test", 
@@ -22960,6 +27064,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fd_nosec_test", 
@@ -22980,6 +27087,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fd_nosec_test", 
@@ -23000,6 +27110,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fd_nosec_test", 
@@ -23020,6 +27133,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fd_nosec_test", 
@@ -23040,6 +27156,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_fd_nosec_test", 
@@ -23061,6 +27180,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full_nosec_test", 
@@ -23083,6 +27203,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full_nosec_test", 
@@ -23105,6 +27226,7 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full_nosec_test", 
@@ -23127,6 +27249,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full_nosec_test", 
@@ -23149,6 +27272,7 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full_nosec_test", 
@@ -23171,6 +27295,7 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full_nosec_test", 
@@ -23193,6 +27318,7 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full_nosec_test", 
@@ -23215,6 +27341,7 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full_nosec_test", 
@@ -23237,6 +27364,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full_nosec_test", 
@@ -23259,6 +27387,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full_nosec_test", 
@@ -23281,6 +27412,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full_nosec_test", 
@@ -23303,6 +27435,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full_nosec_test", 
@@ -23325,6 +27458,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full_nosec_test", 
@@ -23347,6 +27481,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full_nosec_test", 
@@ -23369,6 +27504,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full_nosec_test", 
@@ -23391,6 +27527,7 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full_nosec_test", 
@@ -23413,6 +27550,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full_nosec_test", 
@@ -23435,6 +27573,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full_nosec_test", 
@@ -23457,6 +27596,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full_nosec_test", 
@@ -23479,6 +27619,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full_nosec_test", 
@@ -23501,6 +27642,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full_nosec_test", 
@@ -23523,6 +27665,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full_nosec_test", 
@@ -23545,6 +27688,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full_nosec_test", 
@@ -23567,6 +27711,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full_nosec_test", 
@@ -23589,6 +27734,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full_nosec_test", 
@@ -23611,6 +27757,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full_nosec_test", 
@@ -23633,6 +27780,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full_nosec_test", 
@@ -23655,6 +27803,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full_nosec_test", 
@@ -23677,6 +27826,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full_nosec_test", 
@@ -23699,6 +27849,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full_nosec_test", 
@@ -23721,6 +27872,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full_nosec_test", 
@@ -23743,6 +27895,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full_nosec_test", 
@@ -23765,6 +27918,7 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full_nosec_test", 
@@ -23787,6 +27941,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full_nosec_test", 
@@ -23809,6 +27964,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full_nosec_test", 
@@ -23831,6 +27987,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full_nosec_test", 
@@ -23853,6 +28010,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full_nosec_test", 
@@ -23875,6 +28033,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full_nosec_test", 
@@ -23897,6 +28056,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full_nosec_test", 
@@ -23919,6 +28079,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full_nosec_test", 
@@ -23941,6 +28102,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full_nosec_test", 
@@ -23963,6 +28125,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full_nosec_test", 
@@ -23985,6 +28148,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full_nosec_test", 
@@ -24004,6 +28168,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+pipe_nosec_test", 
@@ -24020,6 +28187,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+pipe_nosec_test", 
@@ -24036,6 +28206,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+pipe_nosec_test", 
@@ -24052,6 +28225,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+pipe_nosec_test", 
@@ -24068,6 +28244,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+pipe_nosec_test", 
@@ -24084,6 +28263,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+pipe_nosec_test", 
@@ -24100,6 +28282,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+pipe_nosec_test", 
@@ -24116,6 +28301,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+pipe_nosec_test", 
@@ -24132,6 +28320,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+pipe_nosec_test", 
@@ -24148,6 +28339,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+pipe_nosec_test", 
@@ -24164,6 +28358,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+pipe_nosec_test", 
@@ -24180,6 +28377,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+pipe_nosec_test", 
@@ -24196,6 +28396,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+pipe_nosec_test", 
@@ -24212,6 +28415,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+pipe_nosec_test", 
@@ -24228,6 +28434,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+pipe_nosec_test", 
@@ -24244,6 +28453,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+pipe_nosec_test", 
@@ -24260,6 +28472,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+pipe_nosec_test", 
@@ -24276,6 +28491,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+pipe_nosec_test", 
@@ -24292,6 +28510,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+pipe_nosec_test", 
@@ -24308,6 +28529,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+pipe_nosec_test", 
@@ -24324,6 +28548,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+pipe_nosec_test", 
@@ -24340,6 +28567,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+pipe_nosec_test", 
@@ -24356,6 +28586,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+pipe_nosec_test", 
@@ -24372,6 +28605,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+pipe_nosec_test", 
@@ -24388,6 +28624,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+pipe_nosec_test", 
@@ -24404,6 +28643,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+pipe_nosec_test", 
@@ -24420,6 +28662,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+pipe_nosec_test", 
@@ -24436,6 +28681,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+pipe_nosec_test", 
@@ -24452,6 +28700,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+pipe_nosec_test", 
@@ -24468,6 +28719,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+pipe_nosec_test", 
@@ -24484,6 +28738,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+pipe_nosec_test", 
@@ -24500,6 +28757,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+pipe_nosec_test", 
@@ -24516,6 +28776,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+pipe_nosec_test", 
@@ -24532,6 +28795,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+pipe_nosec_test", 
@@ -24548,6 +28814,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+pipe_nosec_test", 
@@ -24564,6 +28833,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+pipe_nosec_test", 
@@ -24580,6 +28852,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+pipe_nosec_test", 
@@ -24596,6 +28871,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+pipe_nosec_test", 
@@ -24612,6 +28890,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+pipe_nosec_test", 
@@ -24628,6 +28909,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+pipe_nosec_test", 
@@ -24644,6 +28928,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+pipe_nosec_test", 
@@ -24660,6 +28947,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+pipe_nosec_test", 
@@ -24676,6 +28966,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+pipe_nosec_test", 
@@ -24695,6 +28988,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+trace_nosec_test", 
@@ -24717,6 +29011,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+trace_nosec_test", 
@@ -24739,6 +29034,7 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+trace_nosec_test", 
@@ -24761,6 +29057,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+trace_nosec_test", 
@@ -24783,6 +29080,7 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+trace_nosec_test", 
@@ -24805,6 +29103,7 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+trace_nosec_test", 
@@ -24827,6 +29126,7 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+trace_nosec_test", 
@@ -24849,6 +29149,7 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+trace_nosec_test", 
@@ -24871,6 +29172,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+trace_nosec_test", 
@@ -24893,6 +29195,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+trace_nosec_test", 
@@ -24915,6 +29220,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+trace_nosec_test", 
@@ -24937,6 +29243,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+trace_nosec_test", 
@@ -24959,6 +29266,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+trace_nosec_test", 
@@ -24981,6 +29289,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+trace_nosec_test", 
@@ -25003,6 +29312,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+trace_nosec_test", 
@@ -25025,6 +29335,7 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+trace_nosec_test", 
@@ -25047,6 +29358,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+trace_nosec_test", 
@@ -25069,6 +29381,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+trace_nosec_test", 
@@ -25091,6 +29404,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+trace_nosec_test", 
@@ -25113,6 +29427,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+trace_nosec_test", 
@@ -25135,6 +29450,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+trace_nosec_test", 
@@ -25157,6 +29473,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+trace_nosec_test", 
@@ -25179,6 +29496,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+trace_nosec_test", 
@@ -25201,6 +29519,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+trace_nosec_test", 
@@ -25223,6 +29542,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+trace_nosec_test", 
@@ -25245,6 +29565,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+trace_nosec_test", 
@@ -25267,6 +29588,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+trace_nosec_test", 
@@ -25289,6 +29611,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+trace_nosec_test", 
@@ -25311,6 +29634,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+trace_nosec_test", 
@@ -25333,6 +29657,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+trace_nosec_test", 
@@ -25355,6 +29680,7 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+trace_nosec_test", 
@@ -25377,6 +29703,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+trace_nosec_test", 
@@ -25399,6 +29726,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+trace_nosec_test", 
@@ -25421,6 +29749,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+trace_nosec_test", 
@@ -25443,6 +29772,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+trace_nosec_test", 
@@ -25465,6 +29795,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+trace_nosec_test", 
@@ -25487,6 +29818,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+trace_nosec_test", 
@@ -25509,6 +29841,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+trace_nosec_test", 
@@ -25531,6 +29864,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+trace_nosec_test", 
@@ -25553,6 +29887,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+trace_nosec_test", 
@@ -25575,6 +29910,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_full+trace_nosec_test", 
@@ -25596,6 +29932,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_http_proxy_nosec_test", 
@@ -25617,6 +29956,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_http_proxy_nosec_test", 
@@ -25638,6 +29980,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_http_proxy_nosec_test", 
@@ -25659,6 +30004,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_http_proxy_nosec_test", 
@@ -25680,6 +30028,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_http_proxy_nosec_test", 
@@ -25701,6 +30052,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_http_proxy_nosec_test", 
@@ -25722,6 +30076,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_http_proxy_nosec_test", 
@@ -25743,6 +30100,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_http_proxy_nosec_test", 
@@ -25764,6 +30124,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_http_proxy_nosec_test", 
@@ -25785,6 +30148,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_http_proxy_nosec_test", 
@@ -25806,6 +30172,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_http_proxy_nosec_test", 
@@ -25827,6 +30196,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_http_proxy_nosec_test", 
@@ -25848,6 +30220,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_http_proxy_nosec_test", 
@@ -25869,6 +30244,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_http_proxy_nosec_test", 
@@ -25890,6 +30268,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_http_proxy_nosec_test", 
@@ -25911,6 +30292,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_http_proxy_nosec_test", 
@@ -25932,6 +30316,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_http_proxy_nosec_test", 
@@ -25953,6 +30340,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_http_proxy_nosec_test", 
@@ -25974,6 +30364,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_http_proxy_nosec_test", 
@@ -25995,6 +30388,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_http_proxy_nosec_test", 
@@ -26016,6 +30412,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_http_proxy_nosec_test", 
@@ -26037,6 +30436,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_http_proxy_nosec_test", 
@@ -26058,6 +30460,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_http_proxy_nosec_test", 
@@ -26079,6 +30484,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_http_proxy_nosec_test", 
@@ -26100,6 +30508,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_http_proxy_nosec_test", 
@@ -26121,6 +30532,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_http_proxy_nosec_test", 
@@ -26142,6 +30556,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_http_proxy_nosec_test", 
@@ -26163,6 +30580,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_http_proxy_nosec_test", 
@@ -26184,6 +30604,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_http_proxy_nosec_test", 
@@ -26205,6 +30628,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_http_proxy_nosec_test", 
@@ -26226,6 +30652,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_http_proxy_nosec_test", 
@@ -26247,6 +30676,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_http_proxy_nosec_test", 
@@ -26268,6 +30700,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_http_proxy_nosec_test", 
@@ -26289,6 +30724,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_http_proxy_nosec_test", 
@@ -26310,6 +30748,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_http_proxy_nosec_test", 
@@ -26331,6 +30772,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_http_proxy_nosec_test", 
@@ -26352,6 +30796,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_http_proxy_nosec_test", 
@@ -26373,6 +30820,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_http_proxy_nosec_test", 
@@ -26394,6 +30844,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_http_proxy_nosec_test", 
@@ -26415,6 +30868,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_http_proxy_nosec_test", 
@@ -26436,6 +30892,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_http_proxy_nosec_test", 
@@ -26457,6 +30916,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_http_proxy_nosec_test", 
@@ -26478,6 +30940,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_http_proxy_nosec_test", 
@@ -26500,6 +30965,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_load_reporting_nosec_test", 
@@ -26522,6 +30988,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_load_reporting_nosec_test", 
@@ -26544,6 +31011,7 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_load_reporting_nosec_test", 
@@ -26566,6 +31034,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_load_reporting_nosec_test", 
@@ -26588,6 +31057,7 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_load_reporting_nosec_test", 
@@ -26610,6 +31080,7 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_load_reporting_nosec_test", 
@@ -26632,6 +31103,7 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_load_reporting_nosec_test", 
@@ -26654,6 +31126,7 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_load_reporting_nosec_test", 
@@ -26676,6 +31149,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_load_reporting_nosec_test", 
@@ -26698,6 +31172,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_load_reporting_nosec_test", 
@@ -26720,6 +31197,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_load_reporting_nosec_test", 
@@ -26742,6 +31220,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_load_reporting_nosec_test", 
@@ -26764,6 +31243,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_load_reporting_nosec_test", 
@@ -26786,6 +31266,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_load_reporting_nosec_test", 
@@ -26808,6 +31289,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_load_reporting_nosec_test", 
@@ -26830,6 +31312,7 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_load_reporting_nosec_test", 
@@ -26852,6 +31335,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_load_reporting_nosec_test", 
@@ -26874,6 +31358,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_load_reporting_nosec_test", 
@@ -26896,6 +31381,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_load_reporting_nosec_test", 
@@ -26918,6 +31404,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_load_reporting_nosec_test", 
@@ -26940,6 +31427,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_load_reporting_nosec_test", 
@@ -26962,6 +31450,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_load_reporting_nosec_test", 
@@ -26984,6 +31473,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_load_reporting_nosec_test", 
@@ -27006,6 +31496,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_load_reporting_nosec_test", 
@@ -27028,6 +31519,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_load_reporting_nosec_test", 
@@ -27050,6 +31542,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_load_reporting_nosec_test", 
@@ -27072,6 +31565,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_load_reporting_nosec_test", 
@@ -27094,6 +31588,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_load_reporting_nosec_test", 
@@ -27116,6 +31611,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_load_reporting_nosec_test", 
@@ -27138,6 +31634,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_load_reporting_nosec_test", 
@@ -27160,6 +31657,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_load_reporting_nosec_test", 
@@ -27182,6 +31680,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_load_reporting_nosec_test", 
@@ -27204,6 +31703,7 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_load_reporting_nosec_test", 
@@ -27226,6 +31726,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_load_reporting_nosec_test", 
@@ -27248,6 +31749,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_load_reporting_nosec_test", 
@@ -27270,6 +31772,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_load_reporting_nosec_test", 
@@ -27292,6 +31795,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_load_reporting_nosec_test", 
@@ -27314,6 +31818,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_load_reporting_nosec_test", 
@@ -27336,6 +31841,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_load_reporting_nosec_test", 
@@ -27358,6 +31864,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_load_reporting_nosec_test", 
@@ -27380,6 +31887,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_load_reporting_nosec_test", 
@@ -27402,6 +31910,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_load_reporting_nosec_test", 
@@ -27424,6 +31933,7 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_load_reporting_nosec_test", 
@@ -27445,6 +31955,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_proxy_nosec_test", 
@@ -27466,6 +31979,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_proxy_nosec_test", 
@@ -27487,6 +32003,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_proxy_nosec_test", 
@@ -27508,6 +32027,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_proxy_nosec_test", 
@@ -27529,6 +32051,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_proxy_nosec_test", 
@@ -27550,6 +32075,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_proxy_nosec_test", 
@@ -27571,6 +32099,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_proxy_nosec_test", 
@@ -27592,6 +32123,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_proxy_nosec_test", 
@@ -27613,6 +32147,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_proxy_nosec_test", 
@@ -27634,6 +32171,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_proxy_nosec_test", 
@@ -27655,6 +32195,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_proxy_nosec_test", 
@@ -27676,6 +32219,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_proxy_nosec_test", 
@@ -27697,6 +32243,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_proxy_nosec_test", 
@@ -27718,6 +32267,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_proxy_nosec_test", 
@@ -27739,6 +32291,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_proxy_nosec_test", 
@@ -27760,6 +32315,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_proxy_nosec_test", 
@@ -27781,6 +32339,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_proxy_nosec_test", 
@@ -27802,6 +32363,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_proxy_nosec_test", 
@@ -27823,6 +32387,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_proxy_nosec_test", 
@@ -27844,6 +32411,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_proxy_nosec_test", 
@@ -27865,6 +32435,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_proxy_nosec_test", 
@@ -27886,6 +32459,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_proxy_nosec_test", 
@@ -27907,6 +32483,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_proxy_nosec_test", 
@@ -27928,6 +32507,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_proxy_nosec_test", 
@@ -27949,6 +32531,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_proxy_nosec_test", 
@@ -27970,6 +32555,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_proxy_nosec_test", 
@@ -27991,6 +32579,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_proxy_nosec_test", 
@@ -28012,6 +32603,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_proxy_nosec_test", 
@@ -28033,6 +32627,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_proxy_nosec_test", 
@@ -28054,6 +32651,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_proxy_nosec_test", 
@@ -28075,6 +32675,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_proxy_nosec_test", 
@@ -28096,6 +32699,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_proxy_nosec_test", 
@@ -28117,6 +32723,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_proxy_nosec_test", 
@@ -28138,6 +32747,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_proxy_nosec_test", 
@@ -28159,6 +32771,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_proxy_nosec_test", 
@@ -28180,6 +32795,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_proxy_nosec_test", 
@@ -28201,6 +32819,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_proxy_nosec_test", 
@@ -28222,6 +32843,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_nosec_test", 
@@ -28243,6 +32867,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_nosec_test", 
@@ -28264,6 +32891,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_nosec_test", 
@@ -28285,6 +32915,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_nosec_test", 
@@ -28306,6 +32939,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_nosec_test", 
@@ -28327,6 +32963,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_nosec_test", 
@@ -28348,6 +32987,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_nosec_test", 
@@ -28369,6 +33011,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_nosec_test", 
@@ -28390,6 +33035,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_nosec_test", 
@@ -28411,6 +33059,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_nosec_test", 
@@ -28432,6 +33083,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_nosec_test", 
@@ -28453,6 +33107,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_nosec_test", 
@@ -28474,6 +33131,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_nosec_test", 
@@ -28495,6 +33155,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_nosec_test", 
@@ -28516,6 +33179,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_nosec_test", 
@@ -28537,6 +33203,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_nosec_test", 
@@ -28558,6 +33227,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_nosec_test", 
@@ -28579,6 +33251,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_nosec_test", 
@@ -28600,6 +33275,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_nosec_test", 
@@ -28621,6 +33299,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_nosec_test", 
@@ -28642,6 +33323,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_nosec_test", 
@@ -28663,6 +33347,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_nosec_test", 
@@ -28684,6 +33371,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_nosec_test", 
@@ -28705,6 +33395,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_nosec_test", 
@@ -28726,6 +33419,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_nosec_test", 
@@ -28747,6 +33443,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_nosec_test", 
@@ -28768,6 +33467,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_nosec_test", 
@@ -28789,6 +33491,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_nosec_test", 
@@ -28810,6 +33515,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_nosec_test", 
@@ -28831,6 +33539,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_nosec_test", 
@@ -28852,6 +33563,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_nosec_test", 
@@ -28873,6 +33587,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_nosec_test", 
@@ -28894,6 +33611,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_nosec_test", 
@@ -28915,6 +33635,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_nosec_test", 
@@ -28936,6 +33659,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_nosec_test", 
@@ -28957,6 +33683,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_nosec_test", 
@@ -28978,6 +33707,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_nosec_test", 
@@ -28999,6 +33731,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_nosec_test", 
@@ -29020,6 +33755,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair+trace_nosec_test", 
@@ -29041,6 +33779,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair+trace_nosec_test", 
@@ -29062,6 +33803,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair+trace_nosec_test", 
@@ -29083,6 +33827,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair+trace_nosec_test", 
@@ -29104,6 +33851,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair+trace_nosec_test", 
@@ -29125,6 +33875,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair+trace_nosec_test", 
@@ -29146,6 +33899,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair+trace_nosec_test", 
@@ -29167,6 +33923,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair+trace_nosec_test", 
@@ -29188,6 +33947,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair+trace_nosec_test", 
@@ -29209,6 +33971,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair+trace_nosec_test", 
@@ -29230,6 +33995,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair+trace_nosec_test", 
@@ -29251,6 +34019,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair+trace_nosec_test", 
@@ -29272,6 +34043,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair+trace_nosec_test", 
@@ -29293,6 +34067,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair+trace_nosec_test", 
@@ -29314,6 +34091,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair+trace_nosec_test", 
@@ -29335,6 +34115,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair+trace_nosec_test", 
@@ -29356,6 +34139,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair+trace_nosec_test", 
@@ -29377,6 +34163,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair+trace_nosec_test", 
@@ -29398,6 +34187,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair+trace_nosec_test", 
@@ -29419,6 +34211,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair+trace_nosec_test", 
@@ -29440,6 +34235,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair+trace_nosec_test", 
@@ -29461,6 +34259,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair+trace_nosec_test", 
@@ -29482,6 +34283,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair+trace_nosec_test", 
@@ -29503,6 +34307,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair+trace_nosec_test", 
@@ -29524,6 +34331,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair+trace_nosec_test", 
@@ -29545,6 +34355,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair+trace_nosec_test", 
@@ -29566,6 +34379,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair+trace_nosec_test", 
@@ -29587,6 +34403,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair+trace_nosec_test", 
@@ -29608,6 +34427,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair+trace_nosec_test", 
@@ -29629,6 +34451,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair+trace_nosec_test", 
@@ -29650,6 +34475,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair+trace_nosec_test", 
@@ -29671,6 +34499,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair+trace_nosec_test", 
@@ -29692,6 +34523,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair+trace_nosec_test", 
@@ -29713,6 +34547,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair+trace_nosec_test", 
@@ -29734,6 +34571,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair+trace_nosec_test", 
@@ -29755,6 +34595,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair+trace_nosec_test", 
@@ -29778,6 +34621,9 @@
     "exclude_configs": [
       "msan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_nosec_test", 
@@ -29801,6 +34647,9 @@
     "exclude_configs": [
       "msan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_nosec_test", 
@@ -29824,6 +34673,9 @@
     "exclude_configs": [
       "msan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_nosec_test", 
@@ -29847,6 +34699,9 @@
     "exclude_configs": [
       "msan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_nosec_test", 
@@ -29870,6 +34725,9 @@
     "exclude_configs": [
       "msan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_nosec_test", 
@@ -29893,6 +34751,9 @@
     "exclude_configs": [
       "msan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_nosec_test", 
@@ -29916,6 +34777,9 @@
     "exclude_configs": [
       "msan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_nosec_test", 
@@ -29939,6 +34803,9 @@
     "exclude_configs": [
       "msan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_nosec_test", 
@@ -29962,6 +34829,9 @@
     "exclude_configs": [
       "msan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_nosec_test", 
@@ -29985,6 +34855,9 @@
     "exclude_configs": [
       "msan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_nosec_test", 
@@ -30008,6 +34881,9 @@
     "exclude_configs": [
       "msan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_nosec_test", 
@@ -30031,6 +34907,9 @@
     "exclude_configs": [
       "msan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_nosec_test", 
@@ -30054,6 +34933,9 @@
     "exclude_configs": [
       "msan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_nosec_test", 
@@ -30077,6 +34959,9 @@
     "exclude_configs": [
       "msan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_nosec_test", 
@@ -30100,6 +34985,9 @@
     "exclude_configs": [
       "msan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_nosec_test", 
@@ -30123,6 +35011,9 @@
     "exclude_configs": [
       "msan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_nosec_test", 
@@ -30146,6 +35037,9 @@
     "exclude_configs": [
       "msan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_nosec_test", 
@@ -30169,6 +35063,9 @@
     "exclude_configs": [
       "msan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_nosec_test", 
@@ -30192,6 +35089,9 @@
     "exclude_configs": [
       "msan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_nosec_test", 
@@ -30215,6 +35115,9 @@
     "exclude_configs": [
       "msan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_nosec_test", 
@@ -30238,6 +35141,9 @@
     "exclude_configs": [
       "msan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_nosec_test", 
@@ -30261,6 +35167,9 @@
     "exclude_configs": [
       "msan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_nosec_test", 
@@ -30284,6 +35193,9 @@
     "exclude_configs": [
       "msan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_nosec_test", 
@@ -30307,6 +35219,9 @@
     "exclude_configs": [
       "msan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_nosec_test", 
@@ -30330,6 +35245,9 @@
     "exclude_configs": [
       "msan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_nosec_test", 
@@ -30353,6 +35271,9 @@
     "exclude_configs": [
       "msan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_nosec_test", 
@@ -30376,6 +35297,9 @@
     "exclude_configs": [
       "msan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_nosec_test", 
@@ -30399,6 +35323,9 @@
     "exclude_configs": [
       "msan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_nosec_test", 
@@ -30422,6 +35349,9 @@
     "exclude_configs": [
       "msan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_nosec_test", 
@@ -30445,6 +35375,9 @@
     "exclude_configs": [
       "msan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_nosec_test", 
@@ -30468,6 +35401,9 @@
     "exclude_configs": [
       "msan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_nosec_test", 
@@ -30491,6 +35427,9 @@
     "exclude_configs": [
       "msan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_nosec_test", 
@@ -30514,6 +35453,9 @@
     "exclude_configs": [
       "msan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_nosec_test", 
@@ -30537,6 +35479,9 @@
     "exclude_configs": [
       "msan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_nosec_test", 
@@ -30560,6 +35505,9 @@
     "exclude_configs": [
       "msan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_nosec_test", 
@@ -30583,6 +35531,9 @@
     "exclude_configs": [
       "msan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_nosec_test", 
@@ -30606,6 +35557,9 @@
     "exclude_configs": [
       "msan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_nosec_test", 
@@ -30629,6 +35583,9 @@
     "exclude_configs": [
       "msan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_sockpair_1byte_nosec_test", 
@@ -30650,6 +35607,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_uds_nosec_test", 
@@ -30670,6 +35630,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_uds_nosec_test", 
@@ -30690,6 +35653,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_uds_nosec_test", 
@@ -30710,6 +35676,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_uds_nosec_test", 
@@ -30730,6 +35699,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_uds_nosec_test", 
@@ -30750,6 +35722,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_uds_nosec_test", 
@@ -30770,6 +35745,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_uds_nosec_test", 
@@ -30790,6 +35768,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_uds_nosec_test", 
@@ -30810,6 +35791,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_uds_nosec_test", 
@@ -30830,6 +35814,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_uds_nosec_test", 
@@ -30850,6 +35837,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_uds_nosec_test", 
@@ -30870,6 +35860,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_uds_nosec_test", 
@@ -30890,6 +35883,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_uds_nosec_test", 
@@ -30910,6 +35906,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_uds_nosec_test", 
@@ -30930,6 +35929,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_uds_nosec_test", 
@@ -30950,6 +35952,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_uds_nosec_test", 
@@ -30970,6 +35975,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_uds_nosec_test", 
@@ -30990,6 +35998,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_uds_nosec_test", 
@@ -31010,6 +36021,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_uds_nosec_test", 
@@ -31030,6 +36044,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_uds_nosec_test", 
@@ -31050,6 +36067,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_uds_nosec_test", 
@@ -31070,6 +36090,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_uds_nosec_test", 
@@ -31090,6 +36113,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_uds_nosec_test", 
@@ -31110,6 +36136,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_uds_nosec_test", 
@@ -31130,6 +36159,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_uds_nosec_test", 
@@ -31150,6 +36182,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_uds_nosec_test", 
@@ -31170,6 +36205,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_uds_nosec_test", 
@@ -31190,6 +36228,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_uds_nosec_test", 
@@ -31210,6 +36251,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_uds_nosec_test", 
@@ -31230,6 +36274,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_uds_nosec_test", 
@@ -31250,6 +36297,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_uds_nosec_test", 
@@ -31270,6 +36320,9 @@
     ], 
     "cpu_cost": 0.1, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_uds_nosec_test", 
@@ -31290,6 +36343,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_uds_nosec_test", 
@@ -31310,6 +36366,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_uds_nosec_test", 
@@ -31330,6 +36389,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_uds_nosec_test", 
@@ -31350,6 +36412,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_uds_nosec_test", 
@@ -31370,6 +36435,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_uds_nosec_test", 
@@ -31390,6 +36458,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_uds_nosec_test", 
@@ -31410,6 +36481,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_uds_nosec_test", 
@@ -31430,6 +36504,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_uds_nosec_test", 
@@ -31450,6 +36527,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_uds_nosec_test", 
@@ -31470,6 +36550,9 @@
     ], 
     "cpu_cost": 1.0, 
     "exclude_configs": [], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "h2_uds_nosec_test", 
@@ -31545,6 +36628,27 @@
   {
     "args": [
       "--scenarios_json", 
+      "{\"scenarios\": [{\"name\": \"cpp_protobuf_async_client_sync_server_unary_qps_unconstrained_secure\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"num_servers\": 1, \"server_config\": {\"async_server_threads\": 0, \"core_limit\": 0, \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"server_type\": \"SYNC_SERVER\"}, \"client_config\": {\"client_type\": \"ASYNC_CLIENT\", \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 64, \"async_client_threads\": 0, \"outstanding_rpcs_per_channel\": 100, \"rpc_type\": \"UNARY\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}, \"num_clients\": 0}]}"
+    ], 
+    "boringssl": true, 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 8, 
+    "defaults": "boringssl", 
+    "exclude_configs": [], 
+    "flaky": false, 
+    "language": "c++", 
+    "name": "json_run_localhost", 
+    "platforms": [
+      "linux"
+    ], 
+    "shortname": "json_run_localhost:cpp_protobuf_async_client_sync_server_unary_qps_unconstrained_secure", 
+    "timeout_seconds": 180
+  }, 
+  {
+    "args": [
+      "--scenarios_json", 
       "{\"scenarios\": [{\"name\": \"cpp_protobuf_sync_unary_ping_pong_secure\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"num_servers\": 1, \"server_config\": {\"async_server_threads\": 1, \"core_limit\": 1, \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"server_type\": \"SYNC_SERVER\"}, \"client_config\": {\"client_type\": \"SYNC_CLIENT\", \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 1, \"async_client_threads\": 1, \"outstanding_rpcs_per_channel\": 1, \"rpc_type\": \"UNARY\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}, \"num_clients\": 1}]}"
     ], 
     "boringssl": true, 
@@ -31776,6 +36880,27 @@
   {
     "args": [
       "--scenarios_json", 
+      "{\"scenarios\": [{\"name\": \"cpp_protobuf_async_client_sync_server_unary_qps_unconstrained_insecure\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"num_servers\": 1, \"server_config\": {\"async_server_threads\": 0, \"core_limit\": 0, \"security_params\": null, \"server_type\": \"SYNC_SERVER\"}, \"client_config\": {\"client_type\": \"ASYNC_CLIENT\", \"security_params\": null, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 64, \"async_client_threads\": 0, \"outstanding_rpcs_per_channel\": 100, \"rpc_type\": \"UNARY\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}, \"num_clients\": 0}]}"
+    ], 
+    "boringssl": true, 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 8, 
+    "defaults": "boringssl", 
+    "exclude_configs": [], 
+    "flaky": false, 
+    "language": "c++", 
+    "name": "json_run_localhost", 
+    "platforms": [
+      "linux"
+    ], 
+    "shortname": "json_run_localhost:cpp_protobuf_async_client_sync_server_unary_qps_unconstrained_insecure", 
+    "timeout_seconds": 180
+  }, 
+  {
+    "args": [
+      "--scenarios_json", 
       "{\"scenarios\": [{\"name\": \"cpp_protobuf_sync_unary_ping_pong_insecure\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"num_servers\": 1, \"server_config\": {\"async_server_threads\": 1, \"core_limit\": 1, \"security_params\": null, \"server_type\": \"SYNC_SERVER\"}, \"client_config\": {\"client_type\": \"SYNC_CLIENT\", \"security_params\": null, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 1, \"async_client_threads\": 1, \"outstanding_rpcs_per_channel\": 1, \"rpc_type\": \"UNARY\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}, \"num_clients\": 1}]}"
     ], 
     "boringssl": true, 
@@ -31952,6 +37077,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -31971,6 +37099,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -31990,6 +37121,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -32009,6 +37143,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -32028,6 +37165,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -32047,6 +37187,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -32066,6 +37209,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -32085,6 +37231,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -32104,6 +37253,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -32123,6 +37275,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -32142,6 +37297,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -32161,6 +37319,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -32180,6 +37341,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -32199,6 +37363,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -32218,6 +37385,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -32237,6 +37407,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -32256,6 +37429,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -32275,6 +37451,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -32294,6 +37473,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -32313,6 +37495,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -32332,6 +37517,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -32351,6 +37539,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -32370,6 +37561,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -32389,6 +37583,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -32408,6 +37605,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -32427,6 +37627,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -32446,6 +37649,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -32465,6 +37671,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -32484,6 +37693,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -32503,6 +37715,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -32522,6 +37737,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -32541,6 +37759,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -32560,6 +37781,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -32579,6 +37803,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -32598,6 +37825,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -32617,6 +37847,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -32636,6 +37869,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -32655,6 +37891,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -32674,6 +37913,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -32693,6 +37935,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -32712,6 +37957,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -32731,6 +37979,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -32750,6 +38001,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -32769,6 +38023,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -32788,6 +38045,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -32807,6 +38067,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -32826,6 +38089,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -32845,6 +38111,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -32864,6 +38133,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -32883,6 +38155,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -32902,6 +38177,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -32921,6 +38199,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -32940,6 +38221,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -32959,6 +38243,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -32978,6 +38265,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -32997,6 +38287,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -33016,6 +38309,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -33035,6 +38331,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -33054,6 +38353,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -33073,6 +38375,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -33092,6 +38397,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -33111,6 +38419,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -33130,6 +38441,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -33149,6 +38463,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -33168,6 +38485,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -33187,6 +38507,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -33206,6 +38529,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -33225,6 +38551,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -33244,6 +38573,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -33263,6 +38595,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -33282,6 +38617,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -33301,6 +38639,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -33320,6 +38661,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -33339,6 +38683,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -33358,6 +38705,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -33377,6 +38727,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -33396,6 +38749,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -33415,6 +38771,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -33434,6 +38793,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -33453,6 +38815,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -33472,6 +38837,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -33491,6 +38859,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -33510,6 +38881,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -33529,6 +38903,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -33548,6 +38925,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -33567,6 +38947,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -33586,6 +38969,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -33605,6 +38991,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -33624,6 +39013,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -33643,6 +39035,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -33662,6 +39057,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -33681,6 +39079,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -33700,6 +39101,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -33719,6 +39123,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -33738,6 +39145,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -33757,6 +39167,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -33776,6 +39189,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -33795,6 +39211,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -33814,6 +39233,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -33833,6 +39255,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -33852,6 +39277,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -33871,6 +39299,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -33890,6 +39321,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -33909,6 +39343,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -33928,6 +39365,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -33947,6 +39387,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -33966,6 +39409,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -33985,6 +39431,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -34004,6 +39453,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -34023,6 +39475,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -34042,6 +39497,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -34061,6 +39519,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -34080,6 +39541,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -34099,6 +39563,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -34118,6 +39585,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -34137,6 +39607,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -34156,6 +39629,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -34175,6 +39651,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -34194,6 +39673,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -34213,6 +39695,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -34232,6 +39717,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -34251,6 +39739,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -34270,6 +39761,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -34289,6 +39783,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -34308,6 +39805,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -34327,6 +39827,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -34346,6 +39849,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -34365,6 +39871,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -34384,6 +39893,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -34403,6 +39915,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -34422,6 +39937,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -34441,6 +39959,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -34460,6 +39981,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -34479,6 +40003,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -34498,6 +40025,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -34517,6 +40047,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -34536,6 +40069,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -34555,6 +40091,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -34574,6 +40113,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -34593,6 +40135,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -34612,6 +40157,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -34631,6 +40179,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -34650,6 +40201,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -34669,6 +40223,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -34688,6 +40245,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -34707,6 +40267,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -34726,6 +40289,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -34745,6 +40311,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -34764,6 +40333,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -34783,6 +40355,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -34802,6 +40377,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -34821,6 +40399,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -34840,6 +40421,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -34859,6 +40443,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -34878,6 +40465,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -34897,6 +40487,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -34916,6 +40509,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -34935,6 +40531,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -34954,6 +40553,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -34973,6 +40575,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -34992,6 +40597,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -35011,6 +40619,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -35030,6 +40641,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -35049,6 +40663,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -35068,6 +40685,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -35087,6 +40707,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -35106,6 +40729,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -35125,6 +40751,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -35144,6 +40773,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -35163,6 +40795,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -35182,6 +40817,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -35201,6 +40839,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -35220,6 +40861,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -35239,6 +40883,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -35258,6 +40905,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -35277,6 +40927,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -35296,6 +40949,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -35315,6 +40971,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -35334,6 +40993,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -35353,6 +41015,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -35372,6 +41037,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -35391,6 +41059,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -35410,6 +41081,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -35429,6 +41103,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -35448,6 +41125,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -35467,6 +41147,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -35486,6 +41169,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -35505,6 +41191,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -35524,6 +41213,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -35543,6 +41235,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -35562,6 +41257,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -35581,6 +41279,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -35600,6 +41301,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -35619,6 +41323,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -35638,6 +41345,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -35657,6 +41367,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -35676,6 +41389,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -35695,6 +41411,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -35714,6 +41433,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -35733,6 +41455,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -35752,6 +41477,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -35771,6 +41499,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -35790,6 +41521,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -35809,6 +41543,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -35828,6 +41565,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -35847,6 +41587,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -35866,6 +41609,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -35885,6 +41631,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -35904,6 +41653,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -35923,6 +41675,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -35942,6 +41697,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -35961,6 +41719,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -35980,6 +41741,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -35999,6 +41763,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -36018,6 +41785,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -36037,6 +41807,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -36056,6 +41829,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -36075,6 +41851,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -36094,6 +41873,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -36113,6 +41895,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -36132,6 +41917,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -36151,6 +41939,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -36170,6 +41961,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -36189,6 +41983,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -36208,6 +42005,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -36227,6 +42027,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -36246,6 +42049,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -36265,6 +42071,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -36284,6 +42093,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -36303,6 +42115,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -36322,6 +42137,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -36341,6 +42159,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -36360,6 +42181,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -36379,6 +42203,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -36398,6 +42225,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -36417,6 +42247,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -36436,6 +42269,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -36455,6 +42291,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -36474,6 +42313,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -36493,6 +42335,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -36512,6 +42357,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -36531,6 +42379,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -36550,6 +42401,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -36569,6 +42423,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -36588,6 +42445,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -36607,6 +42467,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -36626,6 +42489,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -36645,6 +42511,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -36664,6 +42533,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -36683,6 +42555,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -36702,6 +42577,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -36721,6 +42599,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -36740,6 +42621,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -36759,6 +42643,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -36778,6 +42665,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -36797,6 +42687,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -36816,6 +42709,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -36835,6 +42731,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -36854,6 +42753,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -36873,6 +42775,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -36892,6 +42797,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -36911,6 +42819,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -36930,6 +42841,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -36949,6 +42863,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -36968,6 +42885,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -36987,6 +42907,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -37006,6 +42929,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -37025,6 +42951,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -37044,6 +42973,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -37063,6 +42995,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -37082,6 +43017,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -37101,6 +43039,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -37120,6 +43061,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -37139,6 +43083,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -37158,6 +43105,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -37177,6 +43127,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -37196,6 +43149,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -37215,6 +43171,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -37234,6 +43193,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -37253,6 +43215,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -37272,6 +43237,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -37291,6 +43259,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -37310,6 +43281,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -37329,6 +43303,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -37348,6 +43325,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -37367,6 +43347,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -37386,6 +43369,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -37405,6 +43391,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -37424,6 +43413,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -37443,6 +43435,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -37462,6 +43457,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -37481,6 +43479,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -37500,6 +43501,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -37519,6 +43523,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -37538,6 +43545,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -37557,6 +43567,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -37576,6 +43589,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -37595,6 +43611,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -37614,6 +43633,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -37633,6 +43655,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -37652,6 +43677,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -37671,6 +43699,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -37690,6 +43721,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -37709,6 +43743,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -37728,6 +43765,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -37747,6 +43787,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -37766,6 +43809,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -37785,6 +43831,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -37804,6 +43853,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -37823,6 +43875,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -37842,6 +43897,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -37861,6 +43919,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -37880,6 +43941,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -37899,6 +43963,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -37918,6 +43985,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -37937,6 +44007,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -37956,6 +44029,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -37975,6 +44051,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -37994,6 +44073,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -38013,6 +44095,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -38032,6 +44117,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -38051,6 +44139,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -38070,6 +44161,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -38089,6 +44183,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -38108,6 +44205,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -38127,6 +44227,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -38146,6 +44249,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -38165,6 +44271,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -38184,6 +44293,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -38203,6 +44315,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -38222,6 +44337,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -38241,6 +44359,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -38260,6 +44381,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -38279,6 +44403,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -38298,6 +44425,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -38317,6 +44447,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -38336,6 +44469,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -38355,6 +44491,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -38374,6 +44513,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -38393,6 +44535,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -38412,6 +44557,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -38431,6 +44579,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -38450,6 +44601,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -38469,6 +44623,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -38488,6 +44645,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -38507,6 +44667,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -38526,6 +44689,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -38545,6 +44711,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -38564,6 +44733,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -38583,6 +44755,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -38602,6 +44777,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -38621,6 +44799,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -38640,6 +44821,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -38659,6 +44843,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -38678,6 +44865,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -38697,6 +44887,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -38716,6 +44909,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -38735,6 +44931,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -38754,6 +44953,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -38773,6 +44975,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -38792,6 +44997,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -38811,6 +45019,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -38830,6 +45041,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -38849,6 +45063,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -38868,6 +45085,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -38887,6 +45107,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -38906,6 +45129,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -38925,6 +45151,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -38944,6 +45173,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -38963,6 +45195,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -38982,6 +45217,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -39001,6 +45239,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -39020,6 +45261,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -39039,6 +45283,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -39058,6 +45305,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -39077,6 +45327,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -39096,6 +45349,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -39115,6 +45371,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -39134,6 +45393,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -39153,6 +45415,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -39172,6 +45437,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -39191,6 +45459,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -39210,6 +45481,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -39229,6 +45503,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -39248,6 +45525,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -39267,6 +45547,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -39286,6 +45569,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -39305,6 +45591,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -39324,6 +45613,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -39343,6 +45635,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -39362,6 +45657,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -39381,6 +45679,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -39400,6 +45701,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -39419,6 +45723,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -39438,6 +45745,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -39457,6 +45767,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -39476,6 +45789,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -39495,6 +45811,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -39514,6 +45833,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -39533,6 +45855,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -39552,6 +45877,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -39571,6 +45899,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -39590,6 +45921,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -39609,6 +45943,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -39628,6 +45965,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -39647,6 +45987,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -39666,6 +46009,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -39685,6 +46031,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -39704,6 +46053,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -39723,6 +46075,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -39742,6 +46097,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -39761,6 +46119,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -39780,6 +46141,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -39799,6 +46163,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -39818,6 +46185,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -39837,6 +46207,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -39856,6 +46229,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -39875,6 +46251,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -39894,6 +46273,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -39913,6 +46295,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -39932,6 +46317,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -39951,6 +46339,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -39970,6 +46361,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -39989,6 +46383,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -40008,6 +46405,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -40027,6 +46427,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -40046,6 +46449,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -40065,6 +46471,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -40084,6 +46493,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -40103,6 +46515,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -40122,6 +46537,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -40141,6 +46559,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -40160,6 +46581,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -40179,6 +46603,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -40198,6 +46625,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -40217,6 +46647,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -40236,6 +46669,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -40255,6 +46691,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -40274,6 +46713,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -40293,6 +46735,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -40312,6 +46757,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -40331,6 +46779,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -40350,6 +46801,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -40369,6 +46823,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -40388,6 +46845,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -40407,6 +46867,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -40426,6 +46889,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -40445,6 +46911,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -40464,6 +46933,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -40483,6 +46955,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -40502,6 +46977,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -40521,6 +46999,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -40540,6 +47021,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -40559,6 +47043,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -40578,6 +47065,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -40597,6 +47087,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -40616,6 +47109,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -40635,6 +47131,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -40654,6 +47153,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -40673,6 +47175,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -40692,6 +47197,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -40711,6 +47219,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -40730,6 +47241,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -40749,6 +47263,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -40768,6 +47285,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -40787,6 +47307,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -40806,6 +47329,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -40825,6 +47351,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -40844,6 +47373,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -40863,6 +47395,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -40882,6 +47417,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -40901,6 +47439,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -40920,6 +47461,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -40939,6 +47483,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -40958,6 +47505,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -40977,6 +47527,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -40996,6 +47549,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -41015,6 +47571,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -41034,6 +47593,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -41053,6 +47615,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -41072,6 +47637,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -41091,6 +47659,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -41110,6 +47681,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -41129,6 +47703,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -41148,6 +47725,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -41167,6 +47747,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -41186,6 +47769,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -41205,6 +47791,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -41224,6 +47813,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -41243,6 +47835,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -41262,6 +47857,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -41281,6 +47879,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -41300,6 +47901,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -41319,6 +47923,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -41338,6 +47945,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -41357,6 +47967,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -41376,6 +47989,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -41395,6 +48011,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -41414,6 +48033,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -41433,6 +48055,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -41452,6 +48077,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -41471,6 +48099,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -41490,6 +48121,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -41509,6 +48143,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -41528,6 +48165,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -41547,6 +48187,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -41566,6 +48209,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -41585,6 +48231,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -41604,6 +48253,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -41623,6 +48275,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -41642,6 +48297,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -41661,6 +48319,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -41680,6 +48341,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -41699,6 +48363,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -41718,6 +48385,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -41737,6 +48407,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -41756,6 +48429,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -41775,6 +48451,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -41794,6 +48473,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -41813,6 +48495,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -41832,6 +48517,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -41851,6 +48539,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -41870,6 +48561,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -41889,6 +48583,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -41908,6 +48605,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -41927,6 +48627,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -41946,6 +48649,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -41965,6 +48671,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -41984,6 +48693,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -42003,6 +48715,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -42022,6 +48737,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -42041,6 +48759,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -42060,6 +48781,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -42079,6 +48803,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -42098,6 +48825,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -42117,6 +48847,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -42136,6 +48869,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -42155,6 +48891,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -42174,6 +48913,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -42193,6 +48935,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -42212,6 +48957,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -42231,6 +48979,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -42250,6 +49001,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -42269,6 +49023,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -42288,6 +49045,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -42307,6 +49067,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -42326,6 +49089,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -42345,6 +49111,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -42364,6 +49133,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -42383,6 +49155,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -42402,6 +49177,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -42421,6 +49199,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -42440,6 +49221,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -42459,6 +49243,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -42478,6 +49265,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -42497,6 +49287,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -42516,6 +49309,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -42535,6 +49331,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -42554,6 +49353,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -42573,6 +49375,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -42592,6 +49397,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -42611,6 +49419,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -42630,6 +49441,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -42649,6 +49463,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -42668,6 +49485,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -42687,6 +49507,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -42706,6 +49529,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -42725,6 +49551,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -42744,6 +49573,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -42763,6 +49595,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -42782,6 +49617,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -42801,6 +49639,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -42820,6 +49661,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -42839,6 +49683,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -42858,6 +49705,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -42877,6 +49727,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -42896,6 +49749,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -42915,6 +49771,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -42934,6 +49793,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -42953,6 +49815,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -42972,6 +49837,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -42991,6 +49859,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -43010,6 +49881,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -43029,6 +49903,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -43048,6 +49925,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -43067,6 +49947,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -43086,6 +49969,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -43105,6 +49991,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -43124,6 +50013,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -43143,6 +50035,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -43162,6 +50057,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -43181,6 +50079,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -43200,6 +50101,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -43219,6 +50123,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -43238,6 +50145,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -43257,6 +50167,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -43276,6 +50189,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -43295,6 +50211,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -43314,6 +50233,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -43333,6 +50255,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -43352,6 +50277,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -43371,6 +50299,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -43390,6 +50321,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -43409,6 +50343,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -43428,6 +50365,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -43447,6 +50387,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -43466,6 +50409,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -43485,6 +50431,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -43504,6 +50453,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -43523,6 +50475,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -43542,6 +50497,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -43561,6 +50519,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -43580,6 +50541,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -43599,6 +50563,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -43618,6 +50585,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -43637,6 +50607,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -43656,6 +50629,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -43675,6 +50651,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -43694,6 +50673,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -43713,6 +50695,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -43732,6 +50717,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -43751,6 +50739,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -43770,6 +50761,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -43789,6 +50783,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -43808,6 +50805,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -43827,6 +50827,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -43846,6 +50849,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -43865,6 +50871,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -43884,6 +50893,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -43903,6 +50915,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -43922,6 +50937,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -43941,6 +50959,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -43960,6 +50981,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -43979,6 +51003,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -43998,6 +51025,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -44017,6 +51047,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -44036,6 +51069,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -44055,6 +51091,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -44074,6 +51113,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -44093,6 +51135,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -44112,6 +51157,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -44131,6 +51179,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -44150,6 +51201,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -44169,6 +51223,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -44188,6 +51245,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -44207,6 +51267,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -44226,6 +51289,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -44245,6 +51311,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -44264,6 +51333,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -44283,6 +51355,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -44302,6 +51377,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -44321,6 +51399,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -44340,6 +51421,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -44359,6 +51443,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -44378,6 +51465,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -44397,6 +51487,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -44416,6 +51509,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -44435,6 +51531,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -44454,6 +51553,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -44473,6 +51575,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -44492,6 +51597,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -44511,6 +51619,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -44530,6 +51641,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -44549,6 +51663,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -44568,6 +51685,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -44587,6 +51707,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -44606,6 +51729,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -44625,6 +51751,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -44644,6 +51773,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -44663,6 +51795,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -44682,6 +51817,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -44701,6 +51839,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -44720,6 +51861,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -44739,6 +51883,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -44758,6 +51905,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -44777,6 +51927,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -44796,6 +51949,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -44815,6 +51971,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -44834,6 +51993,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -44853,6 +52015,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -44872,6 +52037,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -44891,6 +52059,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -44910,6 +52081,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -44929,6 +52103,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -44948,6 +52125,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -44967,6 +52147,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -44986,6 +52169,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -45005,6 +52191,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -45024,6 +52213,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -45043,6 +52235,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -45062,6 +52257,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -45081,6 +52279,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -45100,6 +52301,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -45119,6 +52323,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -45138,6 +52345,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -45157,6 +52367,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -45176,6 +52389,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -45195,6 +52411,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -45214,6 +52433,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -45233,6 +52455,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -45252,6 +52477,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -45271,6 +52499,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -45290,6 +52521,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -45309,6 +52543,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -45328,6 +52565,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -45347,6 +52587,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -45366,6 +52609,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -45385,6 +52631,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -45404,6 +52653,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -45423,6 +52675,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -45442,6 +52697,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -45461,6 +52719,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -45480,6 +52741,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -45499,6 +52763,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -45518,6 +52785,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -45537,6 +52807,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -45556,6 +52829,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -45575,6 +52851,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -45594,6 +52873,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -45613,6 +52895,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -45632,6 +52917,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -45651,6 +52939,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -45670,6 +52961,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -45689,6 +52983,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -45708,6 +53005,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -45727,6 +53027,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -45746,6 +53049,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -45765,6 +53071,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -45784,6 +53093,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -45803,6 +53115,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -45822,6 +53137,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -45841,6 +53159,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -45860,6 +53181,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -45879,6 +53203,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -45898,6 +53225,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -45917,6 +53247,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -45936,6 +53269,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -45955,6 +53291,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -45974,6 +53313,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -45993,6 +53335,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -46012,6 +53357,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -46031,6 +53379,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -46050,6 +53401,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -46069,6 +53423,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -46088,6 +53445,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -46107,6 +53467,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -46126,6 +53489,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -46145,6 +53511,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -46164,6 +53533,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -46183,6 +53555,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -46202,6 +53577,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -46221,6 +53599,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -46240,6 +53621,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -46259,6 +53643,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -46278,6 +53665,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -46297,6 +53687,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -46316,6 +53709,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -46335,6 +53731,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -46354,6 +53753,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -46373,6 +53775,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -46392,6 +53797,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -46411,6 +53819,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -46430,6 +53841,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -46449,6 +53863,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -46468,6 +53885,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -46487,6 +53907,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -46506,6 +53929,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -46525,6 +53951,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -46544,6 +53973,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -46563,6 +53995,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -46582,6 +54017,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -46601,6 +54039,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -46620,6 +54061,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -46639,6 +54083,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -46658,6 +54105,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -46677,6 +54127,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -46696,6 +54149,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -46715,6 +54171,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -46734,6 +54193,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -46753,6 +54215,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -46772,6 +54237,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -46791,6 +54259,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -46810,6 +54281,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -46829,6 +54303,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -46848,6 +54325,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -46867,6 +54347,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -46886,6 +54369,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -46905,6 +54391,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -46924,6 +54413,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -46943,6 +54435,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -46962,6 +54457,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -46981,6 +54479,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -47000,6 +54501,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -47019,6 +54523,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -47038,6 +54545,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -47057,6 +54567,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -47076,6 +54589,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -47095,6 +54611,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -47114,6 +54633,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -47133,6 +54655,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -47152,6 +54677,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -47171,6 +54699,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -47190,6 +54721,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -47209,6 +54743,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -47228,6 +54765,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -47247,6 +54787,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -47266,6 +54809,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -47285,6 +54831,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -47304,6 +54853,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -47323,6 +54875,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -47342,6 +54897,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -47361,6 +54919,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -47380,6 +54941,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -47399,6 +54963,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -47418,6 +54985,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -47437,6 +55007,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -47456,6 +55029,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -47475,6 +55051,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -47494,6 +55073,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -47513,6 +55095,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -47532,6 +55117,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -47551,6 +55139,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -47570,6 +55161,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -47589,6 +55183,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -47608,6 +55205,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -47627,6 +55227,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -47646,6 +55249,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -47665,6 +55271,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -47684,6 +55293,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -47703,6 +55315,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -47722,6 +55337,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -47741,6 +55359,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -47760,6 +55381,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -47779,6 +55403,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -47798,6 +55425,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -47817,6 +55447,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -47836,6 +55469,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -47855,6 +55491,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -47874,6 +55513,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -47893,6 +55535,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -47912,6 +55557,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -47931,6 +55579,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -47950,6 +55601,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -47969,6 +55623,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -47988,6 +55645,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -48007,6 +55667,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -48026,6 +55689,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -48045,6 +55711,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -48064,6 +55733,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -48083,6 +55755,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -48102,6 +55777,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -48121,6 +55799,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -48140,6 +55821,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -48159,6 +55843,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -48178,6 +55865,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -48197,6 +55887,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -48216,6 +55909,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -48235,6 +55931,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -48254,6 +55953,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -48273,6 +55975,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -48292,6 +55997,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -48311,6 +56019,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -48330,6 +56041,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -48349,6 +56063,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -48368,6 +56085,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -48387,6 +56107,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -48406,6 +56129,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -48425,6 +56151,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -48444,6 +56173,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -48463,6 +56195,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -48482,6 +56217,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -48501,6 +56239,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -48520,6 +56261,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -48539,6 +56283,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -48558,6 +56305,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -48577,6 +56327,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -48596,6 +56349,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -48615,6 +56371,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -48634,6 +56393,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -48653,6 +56415,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -48672,6 +56437,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -48691,6 +56459,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -48710,6 +56481,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -48729,6 +56503,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -48748,6 +56525,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -48767,6 +56547,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -48786,6 +56569,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -48805,6 +56591,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -48824,6 +56613,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -48843,6 +56635,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -48862,6 +56657,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -48881,6 +56679,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -48900,6 +56701,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -48919,6 +56723,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -48938,6 +56745,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -48957,6 +56767,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -48976,6 +56789,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -48995,6 +56811,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -49014,6 +56833,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -49033,6 +56855,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -49052,6 +56877,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -49071,6 +56899,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -49090,6 +56921,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -49109,6 +56943,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -49128,6 +56965,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -49147,6 +56987,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -49166,6 +57009,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -49185,6 +57031,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -49204,6 +57053,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -49223,6 +57075,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -49242,6 +57097,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -49261,6 +57119,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -49280,6 +57141,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -49299,6 +57163,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -49318,6 +57185,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -49337,6 +57207,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -49356,6 +57229,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -49375,6 +57251,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -49394,6 +57273,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -49413,6 +57295,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -49432,6 +57317,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -49451,6 +57339,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -49470,6 +57361,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -49489,6 +57383,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -49508,6 +57405,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -49527,6 +57427,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -49546,6 +57449,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -49565,6 +57471,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -49584,6 +57493,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -49603,6 +57515,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -49622,6 +57537,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -49641,6 +57559,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -49660,6 +57581,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -49679,6 +57603,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -49698,6 +57625,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -49717,6 +57647,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -49736,6 +57669,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -49755,6 +57691,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -49774,6 +57713,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -49793,6 +57735,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -49812,6 +57757,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -49831,6 +57779,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -49850,6 +57801,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -49869,6 +57823,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -49888,6 +57845,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -49907,6 +57867,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -49926,6 +57889,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -49945,6 +57911,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -49964,6 +57933,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -49983,6 +57955,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -50002,6 +57977,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -50021,6 +57999,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -50040,6 +58021,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -50059,6 +58043,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -50078,6 +58065,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -50097,6 +58087,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -50116,6 +58109,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -50135,6 +58131,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -50154,6 +58153,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -50173,6 +58175,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -50192,6 +58197,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -50211,6 +58219,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -50230,6 +58241,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -50249,6 +58263,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -50268,6 +58285,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -50287,6 +58307,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -50306,6 +58329,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -50325,6 +58351,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -50344,6 +58373,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -50363,6 +58395,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -50382,6 +58417,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -50401,6 +58439,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -50420,6 +58461,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -50439,6 +58483,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -50458,6 +58505,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -50477,6 +58527,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -50496,6 +58549,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -50515,6 +58571,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -50534,6 +58593,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -50553,6 +58615,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -50572,6 +58637,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -50591,6 +58659,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -50610,6 +58681,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -50629,6 +58703,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -50648,6 +58725,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -50667,6 +58747,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -50686,6 +58769,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -50705,6 +58791,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -50724,6 +58813,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -50743,6 +58835,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -50762,6 +58857,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -50781,6 +58879,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -50800,6 +58901,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -50819,6 +58923,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -50838,6 +58945,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -50857,6 +58967,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -50876,6 +58989,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -50895,6 +59011,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -50914,6 +59033,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -50933,6 +59055,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -50952,6 +59077,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -50971,6 +59099,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -50990,6 +59121,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -51009,6 +59143,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -51028,6 +59165,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -51047,6 +59187,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -51066,6 +59209,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -51085,6 +59231,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -51104,6 +59253,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -51123,6 +59275,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -51142,6 +59297,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -51161,6 +59319,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -51180,6 +59341,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -51199,6 +59363,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -51218,6 +59385,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -51237,6 +59407,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -51256,6 +59429,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -51275,6 +59451,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -51294,6 +59473,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -51313,6 +59495,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -51332,6 +59517,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -51351,6 +59539,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -51370,6 +59561,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -51389,6 +59583,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -51408,6 +59605,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -51427,6 +59627,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -51446,6 +59649,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -51465,6 +59671,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -51484,6 +59693,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -51503,6 +59715,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -51522,6 +59737,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -51541,6 +59759,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -51560,6 +59781,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -51579,6 +59803,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -51598,6 +59825,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -51617,6 +59847,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -51636,6 +59869,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -51655,6 +59891,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -51674,6 +59913,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -51693,6 +59935,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -51712,6 +59957,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -51731,6 +59979,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -51750,6 +60001,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -51769,6 +60023,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -51788,6 +60045,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -51807,6 +60067,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -51826,6 +60089,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -51845,6 +60111,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -51864,6 +60133,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -51883,6 +60155,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -51902,6 +60177,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -51921,6 +60199,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -51940,6 +60221,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -51959,6 +60243,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -51978,6 +60265,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -51997,6 +60287,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -52016,6 +60309,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -52035,6 +60331,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -52054,6 +60353,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -52073,6 +60375,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -52092,6 +60397,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -52111,6 +60419,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -52130,6 +60441,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -52149,6 +60463,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -52168,6 +60485,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -52187,6 +60507,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -52206,6 +60529,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -52225,6 +60551,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -52244,6 +60573,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -52263,6 +60595,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -52282,6 +60617,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -52301,6 +60639,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -52320,6 +60661,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -52339,6 +60683,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -52358,6 +60705,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -52377,6 +60727,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -52396,6 +60749,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -52415,6 +60771,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -52434,6 +60793,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -52453,6 +60815,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -52472,6 +60837,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -52491,6 +60859,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -52510,6 +60881,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -52529,6 +60903,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -52548,6 +60925,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -52567,6 +60947,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -52586,6 +60969,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -52605,6 +60991,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -52624,6 +61013,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -52643,6 +61035,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -52662,6 +61057,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -52681,6 +61079,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -52700,6 +61101,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -52719,6 +61123,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -52738,6 +61145,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -52757,6 +61167,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -52776,6 +61189,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -52795,6 +61211,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -52814,6 +61233,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -52833,6 +61255,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -52852,6 +61277,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -52871,6 +61299,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -52890,6 +61321,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -52909,6 +61343,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -52928,6 +61365,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -52947,6 +61387,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -52966,6 +61409,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -52985,6 +61431,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -53004,6 +61453,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -53023,6 +61475,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -53042,6 +61497,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -53061,6 +61519,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -53080,6 +61541,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -53099,6 +61563,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -53118,6 +61585,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -53137,6 +61607,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -53156,6 +61629,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -53175,6 +61651,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -53194,6 +61673,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -53213,6 +61695,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -53232,6 +61717,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -53251,6 +61739,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -53270,6 +61761,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -53289,6 +61783,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -53308,6 +61805,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -53327,6 +61827,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -53346,6 +61849,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -53365,6 +61871,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -53384,6 +61893,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -53403,6 +61915,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -53422,6 +61937,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -53441,6 +61959,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -53460,6 +61981,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -53479,6 +62003,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -53498,6 +62025,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -53517,6 +62047,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -53536,6 +62069,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -53555,6 +62091,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -53574,6 +62113,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -53593,6 +62135,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -53612,6 +62157,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -53631,6 +62179,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -53650,6 +62201,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -53669,6 +62223,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -53688,6 +62245,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -53707,6 +62267,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -53726,6 +62289,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -53745,6 +62311,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -53764,6 +62333,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -53783,6 +62355,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -53802,6 +62377,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -53821,6 +62399,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -53840,6 +62421,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -53859,6 +62443,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -53878,6 +62465,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -53897,6 +62487,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -53916,6 +62509,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -53935,6 +62531,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -53954,6 +62553,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -53973,6 +62575,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -53992,6 +62597,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -54011,6 +62619,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -54030,6 +62641,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -54049,6 +62663,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -54068,6 +62685,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -54087,6 +62707,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -54106,6 +62729,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -54125,6 +62751,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -54144,6 +62773,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -54163,6 +62795,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -54182,6 +62817,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -54201,6 +62839,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -54220,6 +62861,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -54239,6 +62883,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -54258,6 +62905,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -54277,6 +62927,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -54296,6 +62949,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -54315,6 +62971,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -54334,6 +62993,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -54353,6 +63015,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -54372,6 +63037,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -54391,6 +63059,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -54410,6 +63081,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -54429,6 +63103,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -54448,6 +63125,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -54467,6 +63147,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -54486,6 +63169,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -54505,6 +63191,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -54524,6 +63213,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -54543,6 +63235,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -54562,6 +63257,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -54581,6 +63279,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -54600,6 +63301,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -54619,6 +63323,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -54638,6 +63345,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -54657,6 +63367,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -54676,6 +63389,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -54695,6 +63411,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -54714,6 +63433,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -54733,6 +63455,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -54752,6 +63477,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -54771,6 +63499,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -54790,6 +63521,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -54809,6 +63543,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -54828,6 +63565,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -54847,6 +63587,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -54866,6 +63609,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -54885,6 +63631,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -54904,6 +63653,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -54923,6 +63675,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -54942,6 +63697,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -54961,6 +63719,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -54980,6 +63741,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -54999,6 +63763,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -55018,6 +63785,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -55037,6 +63807,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -55056,6 +63829,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -55075,6 +63851,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -55094,6 +63873,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -55113,6 +63895,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -55132,6 +63917,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -55151,6 +63939,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -55170,6 +63961,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -55189,6 +63983,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -55208,6 +64005,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -55227,6 +64027,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -55246,6 +64049,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -55265,6 +64071,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -55284,6 +64093,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -55303,6 +64115,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -55322,6 +64137,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -55341,6 +64159,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -55360,6 +64181,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -55379,6 +64203,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -55398,6 +64225,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -55417,6 +64247,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -55436,6 +64269,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -55455,6 +64291,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -55474,6 +64313,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -55493,6 +64335,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -55512,6 +64357,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -55531,6 +64379,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -55550,6 +64401,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -55569,6 +64423,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -55588,6 +64445,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -55607,6 +64467,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -55626,6 +64489,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -55645,6 +64511,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -55664,6 +64533,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -55683,6 +64555,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -55702,6 +64577,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -55721,6 +64599,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -55740,6 +64621,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -55759,6 +64643,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -55778,6 +64665,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -55797,6 +64687,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -55816,6 +64709,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -55835,6 +64731,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -55854,6 +64753,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -55873,6 +64775,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -55892,6 +64797,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -55911,6 +64819,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -55930,6 +64841,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -55949,6 +64863,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -55968,6 +64885,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -55987,6 +64907,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -56006,6 +64929,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -56025,6 +64951,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -56044,6 +64973,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -56063,6 +64995,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -56082,6 +65017,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -56101,6 +65039,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -56120,6 +65061,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -56139,6 +65083,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -56158,6 +65105,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -56177,6 +65127,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -56196,6 +65149,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -56215,6 +65171,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -56234,6 +65193,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -56253,6 +65215,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -56272,6 +65237,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -56291,6 +65259,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -56310,6 +65281,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -56329,6 +65303,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -56348,6 +65325,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -56367,6 +65347,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -56386,6 +65369,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -56405,6 +65391,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -56424,6 +65413,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -56443,6 +65435,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -56462,6 +65457,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -56481,6 +65479,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -56500,6 +65501,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -56519,6 +65523,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -56538,6 +65545,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -56557,6 +65567,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -56576,6 +65589,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -56595,6 +65611,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -56614,6 +65633,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -56633,6 +65655,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -56652,6 +65677,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -56671,6 +65699,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -56690,6 +65721,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -56709,6 +65743,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -56728,6 +65765,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -56747,6 +65787,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -56766,6 +65809,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -56785,6 +65831,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -56804,6 +65853,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -56823,6 +65875,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -56842,6 +65897,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -56861,6 +65919,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -56880,6 +65941,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -56899,6 +65963,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -56918,6 +65985,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -56937,6 +66007,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -56956,6 +66029,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -56975,6 +66051,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -56994,6 +66073,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -57013,6 +66095,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -57032,6 +66117,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -57051,6 +66139,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -57070,6 +66161,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -57089,6 +66183,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -57108,6 +66205,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -57127,6 +66227,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -57146,6 +66249,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -57165,6 +66271,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -57184,6 +66293,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -57203,6 +66315,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -57222,6 +66337,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -57241,6 +66359,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -57260,6 +66381,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -57279,6 +66403,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -57298,6 +66425,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -57317,6 +66447,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -57336,6 +66469,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -57355,6 +66491,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -57374,6 +66513,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -57393,6 +66535,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -57412,6 +66557,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -57431,6 +66579,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -57450,6 +66601,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -57469,6 +66623,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -57488,6 +66645,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -57507,6 +66667,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -57526,6 +66689,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -57545,6 +66711,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -57564,6 +66733,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -57583,6 +66755,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -57602,6 +66777,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -57621,6 +66799,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -57640,6 +66821,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -57659,6 +66843,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -57678,6 +66865,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -57697,6 +66887,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -57716,6 +66909,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -57735,6 +66931,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -57754,6 +66953,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -57773,6 +66975,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -57792,6 +66997,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -57811,6 +67019,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -57830,6 +67041,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -57849,6 +67063,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -57868,6 +67085,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -57887,6 +67107,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -57906,6 +67129,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -57925,6 +67151,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -57944,6 +67173,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -57963,6 +67195,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "api_fuzzer_one_entry", 
@@ -57982,6 +67217,31 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "client_fuzzer_one_entry", 
+    "platforms": [
+      "linux"
+    ], 
+    "uses_polling": false
+  }, 
+  {
+    "args": [
+      "test/core/end2end/fuzzers/client_fuzzer_corpus/0083d5addbeca55271ed7ef93c8016bf7ca76903"
+    ], 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [
+      "tsan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -58001,6 +67261,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -58020,6 +67283,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -58039,6 +67305,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -58058,6 +67327,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -58077,6 +67349,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -58096,6 +67371,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -58115,6 +67393,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -58134,6 +67415,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -58153,6 +67437,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -58172,6 +67459,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -58191,6 +67481,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -58210,6 +67503,53 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "client_fuzzer_one_entry", 
+    "platforms": [
+      "linux"
+    ], 
+    "uses_polling": false
+  }, 
+  {
+    "args": [
+      "test/core/end2end/fuzzers/client_fuzzer_corpus/07b0bed3226eefac4a84000ec584e4ce06ebf1bf"
+    ], 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [
+      "tsan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "client_fuzzer_one_entry", 
+    "platforms": [
+      "linux"
+    ], 
+    "uses_polling": false
+  }, 
+  {
+    "args": [
+      "test/core/end2end/fuzzers/client_fuzzer_corpus/07cec5c8d9c856a910c6fb57da2ae954f44beed0"
+    ], 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [
+      "tsan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -58229,6 +67569,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -58248,6 +67591,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -58267,6 +67613,31 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "client_fuzzer_one_entry", 
+    "platforms": [
+      "linux"
+    ], 
+    "uses_polling": false
+  }, 
+  {
+    "args": [
+      "test/core/end2end/fuzzers/client_fuzzer_corpus/0c27c9999302b39bf2256a90b0cdb767fb2b6fe3"
+    ], 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [
+      "tsan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -58286,6 +67657,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -58305,6 +67679,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -58324,6 +67701,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -58343,6 +67723,53 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "client_fuzzer_one_entry", 
+    "platforms": [
+      "linux"
+    ], 
+    "uses_polling": false
+  }, 
+  {
+    "args": [
+      "test/core/end2end/fuzzers/client_fuzzer_corpus/0d407f099f8418de3dd94bd2146c858a8c6575ad"
+    ], 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [
+      "tsan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "client_fuzzer_one_entry", 
+    "platforms": [
+      "linux"
+    ], 
+    "uses_polling": false
+  }, 
+  {
+    "args": [
+      "test/core/end2end/fuzzers/client_fuzzer_corpus/0d4d486aa9fd6e9c10cc9ca8967e922cadddb2fe"
+    ], 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [
+      "tsan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -58362,6 +67789,31 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "client_fuzzer_one_entry", 
+    "platforms": [
+      "linux"
+    ], 
+    "uses_polling": false
+  }, 
+  {
+    "args": [
+      "test/core/end2end/fuzzers/client_fuzzer_corpus/0d9ba07b57eb0e076b187c4455f662db085e730b"
+    ], 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [
+      "tsan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -58381,6 +67833,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -58400,6 +67855,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -58419,6 +67877,31 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "client_fuzzer_one_entry", 
+    "platforms": [
+      "linux"
+    ], 
+    "uses_polling": false
+  }, 
+  {
+    "args": [
+      "test/core/end2end/fuzzers/client_fuzzer_corpus/0f6b989cec08ef9da603dc83704d85900bd22f1f"
+    ], 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [
+      "tsan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -58438,6 +67921,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -58457,6 +67943,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -58476,6 +67965,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -58495,6 +67987,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -58514,6 +68009,31 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "client_fuzzer_one_entry", 
+    "platforms": [
+      "linux"
+    ], 
+    "uses_polling": false
+  }, 
+  {
+    "args": [
+      "test/core/end2end/fuzzers/client_fuzzer_corpus/10b25b0726cb6d820165699e5a453691c7a9c343"
+    ], 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [
+      "tsan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -58533,6 +68053,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -58552,6 +68075,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -58571,6 +68097,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -58590,6 +68119,31 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "client_fuzzer_one_entry", 
+    "platforms": [
+      "linux"
+    ], 
+    "uses_polling": false
+  }, 
+  {
+    "args": [
+      "test/core/end2end/fuzzers/client_fuzzer_corpus/1231c6d007d9e43d169122348363e20d9f25ee93"
+    ], 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [
+      "tsan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -58609,6 +68163,31 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "client_fuzzer_one_entry", 
+    "platforms": [
+      "linux"
+    ], 
+    "uses_polling": false
+  }, 
+  {
+    "args": [
+      "test/core/end2end/fuzzers/client_fuzzer_corpus/13a9b61e431c20734c19bb36d85883b6a501284e"
+    ], 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [
+      "tsan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -58628,6 +68207,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -58647,6 +68229,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -58666,6 +68251,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -58685,6 +68273,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -58704,6 +68295,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -58723,6 +68317,31 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "client_fuzzer_one_entry", 
+    "platforms": [
+      "linux"
+    ], 
+    "uses_polling": false
+  }, 
+  {
+    "args": [
+      "test/core/end2end/fuzzers/client_fuzzer_corpus/1698ec182fad9d973b84615da3a683ecdf2d0b3b"
+    ], 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [
+      "tsan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -58742,6 +68361,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -58761,6 +68383,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -58780,6 +68405,31 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "client_fuzzer_one_entry", 
+    "platforms": [
+      "linux"
+    ], 
+    "uses_polling": false
+  }, 
+  {
+    "args": [
+      "test/core/end2end/fuzzers/client_fuzzer_corpus/1859e2ee759e20fe195f67615a1576ce2b7d5bbd"
+    ], 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [
+      "tsan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -58799,6 +68449,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -58818,6 +68471,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -58837,6 +68493,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -58856,6 +68515,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -58875,6 +68537,31 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "client_fuzzer_one_entry", 
+    "platforms": [
+      "linux"
+    ], 
+    "uses_polling": false
+  }, 
+  {
+    "args": [
+      "test/core/end2end/fuzzers/client_fuzzer_corpus/1a9017db5ad8a9dc6cfe72305da1683a87a73452"
+    ], 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [
+      "tsan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -58894,6 +68581,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -58913,6 +68603,53 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "client_fuzzer_one_entry", 
+    "platforms": [
+      "linux"
+    ], 
+    "uses_polling": false
+  }, 
+  {
+    "args": [
+      "test/core/end2end/fuzzers/client_fuzzer_corpus/1bd90335afc9e0a1e6a9296e3cc27c03c1201886"
+    ], 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [
+      "tsan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "client_fuzzer_one_entry", 
+    "platforms": [
+      "linux"
+    ], 
+    "uses_polling": false
+  }, 
+  {
+    "args": [
+      "test/core/end2end/fuzzers/client_fuzzer_corpus/1be157b0fc79f0e7e1e05dfa3cbbe1ad71528bc2"
+    ], 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [
+      "tsan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -58932,6 +68669,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -58951,6 +68691,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -58970,6 +68713,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -58989,6 +68735,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -59008,6 +68757,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -59027,6 +68779,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -59046,6 +68801,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -59065,6 +68823,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -59084,6 +68845,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -59103,6 +68867,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -59122,6 +68889,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -59141,6 +68911,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -59160,6 +68933,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -59179,6 +68955,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -59198,6 +68977,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -59217,6 +68999,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -59236,6 +69021,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -59255,6 +69043,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -59274,6 +69065,31 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "client_fuzzer_one_entry", 
+    "platforms": [
+      "linux"
+    ], 
+    "uses_polling": false
+  }, 
+  {
+    "args": [
+      "test/core/end2end/fuzzers/client_fuzzer_corpus/2185f411bdb1edc610f16ffc86836ae366193e03"
+    ], 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [
+      "tsan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -59293,6 +69109,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -59312,6 +69131,31 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "client_fuzzer_one_entry", 
+    "platforms": [
+      "linux"
+    ], 
+    "uses_polling": false
+  }, 
+  {
+    "args": [
+      "test/core/end2end/fuzzers/client_fuzzer_corpus/22661803bd1c7198df4be6e08924ef6a48af9cd4"
+    ], 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [
+      "tsan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -59331,6 +69175,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -59350,6 +69197,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -59369,6 +69219,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -59388,6 +69241,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -59407,6 +69263,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -59426,6 +69285,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -59445,6 +69307,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -59464,6 +69329,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -59483,6 +69351,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -59502,6 +69373,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -59521,6 +69395,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -59540,6 +69417,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -59559,6 +69439,31 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "client_fuzzer_one_entry", 
+    "platforms": [
+      "linux"
+    ], 
+    "uses_polling": false
+  }, 
+  {
+    "args": [
+      "test/core/end2end/fuzzers/client_fuzzer_corpus/2717067bbc0e9bfc1d90d15cddf6154800a25ec6"
+    ], 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [
+      "tsan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -59578,6 +69483,31 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "client_fuzzer_one_entry", 
+    "platforms": [
+      "linux"
+    ], 
+    "uses_polling": false
+  }, 
+  {
+    "args": [
+      "test/core/end2end/fuzzers/client_fuzzer_corpus/2825cfc19c9371f4fe70851283c68d49470d4d55"
+    ], 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [
+      "tsan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -59597,6 +69527,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -59616,6 +69549,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -59635,6 +69571,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -59654,6 +69593,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -59673,6 +69615,31 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "client_fuzzer_one_entry", 
+    "platforms": [
+      "linux"
+    ], 
+    "uses_polling": false
+  }, 
+  {
+    "args": [
+      "test/core/end2end/fuzzers/client_fuzzer_corpus/29303c16f3afa18c2c0b84e77e587535a705a74c"
+    ], 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [
+      "tsan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -59692,6 +69659,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -59711,6 +69681,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -59730,6 +69703,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -59749,6 +69725,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -59768,6 +69747,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -59787,6 +69769,31 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "client_fuzzer_one_entry", 
+    "platforms": [
+      "linux"
+    ], 
+    "uses_polling": false
+  }, 
+  {
+    "args": [
+      "test/core/end2end/fuzzers/client_fuzzer_corpus/2b5eb5aac77af905877bd98ec2c4d746b247abb6"
+    ], 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [
+      "tsan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -59806,6 +69813,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -59825,6 +69835,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -59844,6 +69857,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -59863,6 +69879,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -59882,6 +69901,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -59901,6 +69923,31 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "client_fuzzer_one_entry", 
+    "platforms": [
+      "linux"
+    ], 
+    "uses_polling": false
+  }, 
+  {
+    "args": [
+      "test/core/end2end/fuzzers/client_fuzzer_corpus/2cc43573f271ecd332551c1fb34ebc8645eaefe8"
+    ], 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [
+      "tsan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -59920,6 +69967,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -59939,6 +69989,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -59958,6 +70011,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -59977,6 +70033,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -59996,6 +70055,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -60015,6 +70077,53 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "client_fuzzer_one_entry", 
+    "platforms": [
+      "linux"
+    ], 
+    "uses_polling": false
+  }, 
+  {
+    "args": [
+      "test/core/end2end/fuzzers/client_fuzzer_corpus/2feb41037f5dd34e9f3465a2fbf1a6d355c8ce9d"
+    ], 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [
+      "tsan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "client_fuzzer_one_entry", 
+    "platforms": [
+      "linux"
+    ], 
+    "uses_polling": false
+  }, 
+  {
+    "args": [
+      "test/core/end2end/fuzzers/client_fuzzer_corpus/300998021c7f743ff49d9cc192343ffd43eb47f2"
+    ], 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [
+      "tsan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -60034,6 +70143,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -60053,6 +70165,31 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "client_fuzzer_one_entry", 
+    "platforms": [
+      "linux"
+    ], 
+    "uses_polling": false
+  }, 
+  {
+    "args": [
+      "test/core/end2end/fuzzers/client_fuzzer_corpus/310b2aff5e2ec78b6004630bed39d49f8d13bb21"
+    ], 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [
+      "tsan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -60072,6 +70209,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -60091,6 +70231,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -60110,6 +70253,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -60129,6 +70275,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -60148,6 +70297,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -60167,6 +70319,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -60186,6 +70341,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -60205,6 +70363,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -60224,6 +70385,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -60243,6 +70407,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -60262,6 +70429,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -60281,6 +70451,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -60300,6 +70473,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -60319,6 +70495,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -60338,6 +70517,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -60357,6 +70539,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -60376,6 +70561,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -60395,6 +70583,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -60414,6 +70605,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -60433,6 +70627,31 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "client_fuzzer_one_entry", 
+    "platforms": [
+      "linux"
+    ], 
+    "uses_polling": false
+  }, 
+  {
+    "args": [
+      "test/core/end2end/fuzzers/client_fuzzer_corpus/3bb052abecc1b916cc869b9aad29c9dd55a95068"
+    ], 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [
+      "tsan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -60452,6 +70671,53 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "client_fuzzer_one_entry", 
+    "platforms": [
+      "linux"
+    ], 
+    "uses_polling": false
+  }, 
+  {
+    "args": [
+      "test/core/end2end/fuzzers/client_fuzzer_corpus/3c5fa483ebfabe6e684831ce7c413176bc998c33"
+    ], 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [
+      "tsan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "client_fuzzer_one_entry", 
+    "platforms": [
+      "linux"
+    ], 
+    "uses_polling": false
+  }, 
+  {
+    "args": [
+      "test/core/end2end/fuzzers/client_fuzzer_corpus/3c6444b64ace5cd6c145614ad4412382271a6120"
+    ], 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [
+      "tsan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -60471,6 +70737,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -60490,6 +70759,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -60509,6 +70781,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -60528,6 +70803,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -60547,6 +70825,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -60566,6 +70847,53 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "client_fuzzer_one_entry", 
+    "platforms": [
+      "linux"
+    ], 
+    "uses_polling": false
+  }, 
+  {
+    "args": [
+      "test/core/end2end/fuzzers/client_fuzzer_corpus/4045d25f065bb1d70a8b9c3751f7453d4b0625b9"
+    ], 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [
+      "tsan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "client_fuzzer_one_entry", 
+    "platforms": [
+      "linux"
+    ], 
+    "uses_polling": false
+  }, 
+  {
+    "args": [
+      "test/core/end2end/fuzzers/client_fuzzer_corpus/407cedf992b14edac6e19f7d440ab73c88e72465"
+    ], 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [
+      "tsan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -60585,6 +70913,53 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "client_fuzzer_one_entry", 
+    "platforms": [
+      "linux"
+    ], 
+    "uses_polling": false
+  }, 
+  {
+    "args": [
+      "test/core/end2end/fuzzers/client_fuzzer_corpus/411966ea7d9164fc432eeab55a55248ad808bb01"
+    ], 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [
+      "tsan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "client_fuzzer_one_entry", 
+    "platforms": [
+      "linux"
+    ], 
+    "uses_polling": false
+  }, 
+  {
+    "args": [
+      "test/core/end2end/fuzzers/client_fuzzer_corpus/415dde26637ed3c0e803111c532a1a9ea9c49092"
+    ], 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [
+      "tsan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -60604,6 +70979,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -60623,6 +71001,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -60642,6 +71023,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -60661,6 +71045,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -60680,6 +71067,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -60699,6 +71089,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -60718,6 +71111,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -60737,6 +71133,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -60756,6 +71155,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -60775,6 +71177,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -60794,6 +71199,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -60813,6 +71221,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -60832,6 +71243,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -60851,6 +71265,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -60870,6 +71287,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -60889,6 +71309,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -60908,6 +71331,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -60927,6 +71353,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -60946,6 +71375,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -60965,6 +71397,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -60984,6 +71419,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -61003,6 +71441,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -61022,6 +71463,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -61041,6 +71485,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -61060,6 +71507,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -61079,6 +71529,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -61098,6 +71551,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -61117,6 +71573,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -61136,6 +71595,31 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "client_fuzzer_one_entry", 
+    "platforms": [
+      "linux"
+    ], 
+    "uses_polling": false
+  }, 
+  {
+    "args": [
+      "test/core/end2end/fuzzers/client_fuzzer_corpus/4fc34239f220392581520aa8cebc659daa65a7a6"
+    ], 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [
+      "tsan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -61155,6 +71639,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -61174,6 +71661,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -61193,6 +71683,31 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "client_fuzzer_one_entry", 
+    "platforms": [
+      "linux"
+    ], 
+    "uses_polling": false
+  }, 
+  {
+    "args": [
+      "test/core/end2end/fuzzers/client_fuzzer_corpus/52939682304314f04897deddfbc9c7afa8ee50a9"
+    ], 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [
+      "tsan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -61212,6 +71727,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -61231,6 +71749,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -61250,6 +71771,53 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "client_fuzzer_one_entry", 
+    "platforms": [
+      "linux"
+    ], 
+    "uses_polling": false
+  }, 
+  {
+    "args": [
+      "test/core/end2end/fuzzers/client_fuzzer_corpus/5369926a559827d08bccf264876d592c7cae660d"
+    ], 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [
+      "tsan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "client_fuzzer_one_entry", 
+    "platforms": [
+      "linux"
+    ], 
+    "uses_polling": false
+  }, 
+  {
+    "args": [
+      "test/core/end2end/fuzzers/client_fuzzer_corpus/53ef530f65b0cff2e338a51b469c224f53b628d7"
+    ], 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [
+      "tsan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -61269,6 +71837,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -61288,6 +71859,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -61307,6 +71881,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -61326,6 +71903,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -61345,6 +71925,75 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "client_fuzzer_one_entry", 
+    "platforms": [
+      "linux"
+    ], 
+    "uses_polling": false
+  }, 
+  {
+    "args": [
+      "test/core/end2end/fuzzers/client_fuzzer_corpus/560c1057487e6b0d2d457748c3ad8434423eb263"
+    ], 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [
+      "tsan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "client_fuzzer_one_entry", 
+    "platforms": [
+      "linux"
+    ], 
+    "uses_polling": false
+  }, 
+  {
+    "args": [
+      "test/core/end2end/fuzzers/client_fuzzer_corpus/564f203f678fb333c7b1f8f4df79237589ce346d"
+    ], 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [
+      "tsan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "client_fuzzer_one_entry", 
+    "platforms": [
+      "linux"
+    ], 
+    "uses_polling": false
+  }, 
+  {
+    "args": [
+      "test/core/end2end/fuzzers/client_fuzzer_corpus/56b0ac0636c57838f63415082b3ae2ec7a93f017"
+    ], 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [
+      "tsan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -61364,6 +72013,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -61383,6 +72035,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -61402,6 +72057,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -61421,6 +72079,31 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "client_fuzzer_one_entry", 
+    "platforms": [
+      "linux"
+    ], 
+    "uses_polling": false
+  }, 
+  {
+    "args": [
+      "test/core/end2end/fuzzers/client_fuzzer_corpus/58bcbd601894835bb3312d2a0bc56f2e0f65984c"
+    ], 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [
+      "tsan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -61440,6 +72123,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -61459,6 +72145,31 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "client_fuzzer_one_entry", 
+    "platforms": [
+      "linux"
+    ], 
+    "uses_polling": false
+  }, 
+  {
+    "args": [
+      "test/core/end2end/fuzzers/client_fuzzer_corpus/598d346f284bcff26d1de997c4ba5c4794c90b68"
+    ], 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [
+      "tsan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -61478,6 +72189,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -61497,6 +72211,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -61516,6 +72233,31 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "client_fuzzer_one_entry", 
+    "platforms": [
+      "linux"
+    ], 
+    "uses_polling": false
+  }, 
+  {
+    "args": [
+      "test/core/end2end/fuzzers/client_fuzzer_corpus/5c14b48da74ab06b3cc20c4fe355e24f7dd7852a"
+    ], 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [
+      "tsan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -61535,6 +72277,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -61554,6 +72299,31 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "client_fuzzer_one_entry", 
+    "platforms": [
+      "linux"
+    ], 
+    "uses_polling": false
+  }, 
+  {
+    "args": [
+      "test/core/end2end/fuzzers/client_fuzzer_corpus/5de72e607205dc17a45df703ec4e9b63c36821ec"
+    ], 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [
+      "tsan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -61573,6 +72343,53 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "client_fuzzer_one_entry", 
+    "platforms": [
+      "linux"
+    ], 
+    "uses_polling": false
+  }, 
+  {
+    "args": [
+      "test/core/end2end/fuzzers/client_fuzzer_corpus/5e25cf639ba8ea37543d944f5efa94824c6272ff"
+    ], 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [
+      "tsan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "client_fuzzer_one_entry", 
+    "platforms": [
+      "linux"
+    ], 
+    "uses_polling": false
+  }, 
+  {
+    "args": [
+      "test/core/end2end/fuzzers/client_fuzzer_corpus/5f247d7b6753f7a8798cf952f49f303c532e017c"
+    ], 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [
+      "tsan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -61592,6 +72409,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -61611,6 +72431,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -61630,6 +72453,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -61649,6 +72475,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -61668,6 +72497,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -61687,6 +72519,31 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "client_fuzzer_one_entry", 
+    "platforms": [
+      "linux"
+    ], 
+    "uses_polling": false
+  }, 
+  {
+    "args": [
+      "test/core/end2end/fuzzers/client_fuzzer_corpus/63a1cb41d219394c9bab947202921506f3574ad0"
+    ], 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [
+      "tsan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -61706,6 +72563,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -61725,6 +72585,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -61744,6 +72607,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -61763,6 +72629,31 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "client_fuzzer_one_entry", 
+    "platforms": [
+      "linux"
+    ], 
+    "uses_polling": false
+  }, 
+  {
+    "args": [
+      "test/core/end2end/fuzzers/client_fuzzer_corpus/650f74738d3961af2d1fe85ad8fc8212ea13cbbf"
+    ], 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [
+      "tsan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -61782,6 +72673,31 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "client_fuzzer_one_entry", 
+    "platforms": [
+      "linux"
+    ], 
+    "uses_polling": false
+  }, 
+  {
+    "args": [
+      "test/core/end2end/fuzzers/client_fuzzer_corpus/65dff388749da6a44926b491cdc555f61d708171"
+    ], 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [
+      "tsan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -61801,6 +72717,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -61820,6 +72739,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -61839,6 +72761,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -61858,6 +72783,31 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "client_fuzzer_one_entry", 
+    "platforms": [
+      "linux"
+    ], 
+    "uses_polling": false
+  }, 
+  {
+    "args": [
+      "test/core/end2end/fuzzers/client_fuzzer_corpus/676adbb1e5b3f4f9e3cba51d3d4ef963ba4ea7e3"
+    ], 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [
+      "tsan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -61877,6 +72827,53 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "client_fuzzer_one_entry", 
+    "platforms": [
+      "linux"
+    ], 
+    "uses_polling": false
+  }, 
+  {
+    "args": [
+      "test/core/end2end/fuzzers/client_fuzzer_corpus/67f160446ded73c408f4e5a0665731b642b6edd4"
+    ], 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [
+      "tsan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "client_fuzzer_one_entry", 
+    "platforms": [
+      "linux"
+    ], 
+    "uses_polling": false
+  }, 
+  {
+    "args": [
+      "test/core/end2end/fuzzers/client_fuzzer_corpus/6856c7cb02d2ba74a60fd47140f042701dda63b3"
+    ], 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [
+      "tsan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -61896,6 +72893,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -61915,6 +72915,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -61934,6 +72937,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -61953,6 +72959,31 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "client_fuzzer_one_entry", 
+    "platforms": [
+      "linux"
+    ], 
+    "uses_polling": false
+  }, 
+  {
+    "args": [
+      "test/core/end2end/fuzzers/client_fuzzer_corpus/69e14b73af03e8f2d998cfcf16215f65bf589efb"
+    ], 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [
+      "tsan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -61972,6 +73003,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -61991,6 +73025,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -62010,6 +73047,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -62029,6 +73069,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -62048,6 +73091,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -62067,6 +73113,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -62086,6 +73135,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -62105,6 +73157,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -62124,6 +73179,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -62143,6 +73201,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -62162,6 +73223,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -62181,6 +73245,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -62200,6 +73267,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -62219,6 +73289,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -62238,6 +73311,31 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "client_fuzzer_one_entry", 
+    "platforms": [
+      "linux"
+    ], 
+    "uses_polling": false
+  }, 
+  {
+    "args": [
+      "test/core/end2end/fuzzers/client_fuzzer_corpus/77cff7548cafe87410e4a0dde3ba6892b25594d3"
+    ], 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [
+      "tsan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -62257,6 +73355,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -62276,6 +73377,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -62295,6 +73399,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -62314,6 +73421,31 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "client_fuzzer_one_entry", 
+    "platforms": [
+      "linux"
+    ], 
+    "uses_polling": false
+  }, 
+  {
+    "args": [
+      "test/core/end2end/fuzzers/client_fuzzer_corpus/7beeb19272131701f3a0d1dd633f1b1969899366"
+    ], 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [
+      "tsan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -62333,6 +73465,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -62352,6 +73487,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -62371,6 +73509,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -62390,6 +73531,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -62409,6 +73553,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -62428,6 +73575,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -62447,6 +73597,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -62466,6 +73619,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -62485,6 +73641,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -62504,6 +73663,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -62523,6 +73685,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -62542,6 +73707,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -62561,6 +73729,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -62580,6 +73751,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -62599,6 +73773,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -62618,6 +73795,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -62637,6 +73817,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -62656,6 +73839,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -62675,6 +73861,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -62694,6 +73883,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -62713,6 +73905,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -62732,6 +73927,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -62751,6 +73949,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -62770,6 +73971,53 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "client_fuzzer_one_entry", 
+    "platforms": [
+      "linux"
+    ], 
+    "uses_polling": false
+  }, 
+  {
+    "args": [
+      "test/core/end2end/fuzzers/client_fuzzer_corpus/8b0cf53ac17015fe066002cb3814933df9ee96be"
+    ], 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [
+      "tsan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "client_fuzzer_one_entry", 
+    "platforms": [
+      "linux"
+    ], 
+    "uses_polling": false
+  }, 
+  {
+    "args": [
+      "test/core/end2end/fuzzers/client_fuzzer_corpus/8b5c4543923da5e468aca1de1ab880aed2ac4451"
+    ], 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [
+      "tsan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -62789,6 +74037,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -62808,6 +74059,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -62827,6 +74081,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -62846,6 +74103,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -62865,6 +74125,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -62884,6 +74147,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -62903,6 +74169,31 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "client_fuzzer_one_entry", 
+    "platforms": [
+      "linux"
+    ], 
+    "uses_polling": false
+  }, 
+  {
+    "args": [
+      "test/core/end2end/fuzzers/client_fuzzer_corpus/8d9784f85e9662734e180ca8bec2164425ae8a87"
+    ], 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [
+      "tsan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -62922,6 +74213,31 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "client_fuzzer_one_entry", 
+    "platforms": [
+      "linux"
+    ], 
+    "uses_polling": false
+  }, 
+  {
+    "args": [
+      "test/core/end2end/fuzzers/client_fuzzer_corpus/8e3f138d163022d6e105ab595788f4cfdd9b9db3"
+    ], 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [
+      "tsan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -62941,6 +74257,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -62960,6 +74279,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -62979,6 +74301,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -62998,6 +74323,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -63017,6 +74345,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -63036,6 +74367,31 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "client_fuzzer_one_entry", 
+    "platforms": [
+      "linux"
+    ], 
+    "uses_polling": false
+  }, 
+  {
+    "args": [
+      "test/core/end2end/fuzzers/client_fuzzer_corpus/914464d372dcccf31ed5331293d84121e17616bb"
+    ], 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [
+      "tsan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -63055,6 +74411,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -63074,6 +74433,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -63093,6 +74455,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -63112,6 +74477,75 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "client_fuzzer_one_entry", 
+    "platforms": [
+      "linux"
+    ], 
+    "uses_polling": false
+  }, 
+  {
+    "args": [
+      "test/core/end2end/fuzzers/client_fuzzer_corpus/934a41b5027d1c5cca27ebda57560c38cb9e09ea"
+    ], 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [
+      "tsan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "client_fuzzer_one_entry", 
+    "platforms": [
+      "linux"
+    ], 
+    "uses_polling": false
+  }, 
+  {
+    "args": [
+      "test/core/end2end/fuzzers/client_fuzzer_corpus/9354652806d96b09c8e7082b1b7d22e7c3fb9f0b"
+    ], 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [
+      "tsan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "client_fuzzer_one_entry", 
+    "platforms": [
+      "linux"
+    ], 
+    "uses_polling": false
+  }, 
+  {
+    "args": [
+      "test/core/end2end/fuzzers/client_fuzzer_corpus/9398ac1c2b4015792661266a9c84b6d7a68c3155"
+    ], 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [
+      "tsan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -63131,6 +74565,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -63150,6 +74587,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -63169,6 +74609,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -63188,6 +74631,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -63207,6 +74653,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -63226,6 +74675,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -63245,6 +74697,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -63264,6 +74719,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -63283,6 +74741,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -63302,6 +74763,53 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "client_fuzzer_one_entry", 
+    "platforms": [
+      "linux"
+    ], 
+    "uses_polling": false
+  }, 
+  {
+    "args": [
+      "test/core/end2end/fuzzers/client_fuzzer_corpus/99099024a3f3e389f57cb7b697eb34485846f316"
+    ], 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [
+      "tsan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "client_fuzzer_one_entry", 
+    "platforms": [
+      "linux"
+    ], 
+    "uses_polling": false
+  }, 
+  {
+    "args": [
+      "test/core/end2end/fuzzers/client_fuzzer_corpus/998a54dc94ab6e7d6a6066415fb0dd9b52356171"
+    ], 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [
+      "tsan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -63321,6 +74829,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -63340,6 +74851,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -63359,6 +74873,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -63378,6 +74895,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -63397,6 +74917,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -63416,6 +74939,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -63435,6 +74961,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -63454,6 +74983,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -63473,6 +75005,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -63492,6 +75027,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -63511,6 +75049,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -63530,6 +75071,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -63549,6 +75093,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -63568,6 +75115,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -63587,6 +75137,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -63606,6 +75159,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -63625,6 +75181,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -63644,6 +75203,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -63663,6 +75225,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -63682,6 +75247,31 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "client_fuzzer_one_entry", 
+    "platforms": [
+      "linux"
+    ], 
+    "uses_polling": false
+  }, 
+  {
+    "args": [
+      "test/core/end2end/fuzzers/client_fuzzer_corpus/a25b31398669b585ccab97bceadc31994de7ead7"
+    ], 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [
+      "tsan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -63701,6 +75291,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -63720,6 +75313,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -63739,6 +75335,31 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "client_fuzzer_one_entry", 
+    "platforms": [
+      "linux"
+    ], 
+    "uses_polling": false
+  }, 
+  {
+    "args": [
+      "test/core/end2end/fuzzers/client_fuzzer_corpus/a39ac9e92b41d1889096ed415b4c2eb1aba6ed50"
+    ], 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [
+      "tsan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -63758,6 +75379,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -63777,6 +75401,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -63796,6 +75423,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -63815,6 +75445,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -63834,6 +75467,31 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "client_fuzzer_one_entry", 
+    "platforms": [
+      "linux"
+    ], 
+    "uses_polling": false
+  }, 
+  {
+    "args": [
+      "test/core/end2end/fuzzers/client_fuzzer_corpus/a5c2fdae1a1c0487d00db0eec6e3429b12244b1f"
+    ], 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [
+      "tsan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -63853,6 +75511,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -63872,6 +75533,31 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "client_fuzzer_one_entry", 
+    "platforms": [
+      "linux"
+    ], 
+    "uses_polling": false
+  }, 
+  {
+    "args": [
+      "test/core/end2end/fuzzers/client_fuzzer_corpus/a649093880c2a2f143f861893eaff5d30be95eb7"
+    ], 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [
+      "tsan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -63891,6 +75577,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -63910,6 +75599,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -63929,6 +75621,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -63948,6 +75643,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -63967,6 +75665,53 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "client_fuzzer_one_entry", 
+    "platforms": [
+      "linux"
+    ], 
+    "uses_polling": false
+  }, 
+  {
+    "args": [
+      "test/core/end2end/fuzzers/client_fuzzer_corpus/a8249ebfe91327806446f14a6b2e7d9c8440257f"
+    ], 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [
+      "tsan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "client_fuzzer_one_entry", 
+    "platforms": [
+      "linux"
+    ], 
+    "uses_polling": false
+  }, 
+  {
+    "args": [
+      "test/core/end2end/fuzzers/client_fuzzer_corpus/a8e306820fb76566b522c23ec68bdce0ad0536f2"
+    ], 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [
+      "tsan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -63986,6 +75731,31 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "client_fuzzer_one_entry", 
+    "platforms": [
+      "linux"
+    ], 
+    "uses_polling": false
+  }, 
+  {
+    "args": [
+      "test/core/end2end/fuzzers/client_fuzzer_corpus/a97dbb159ef9bc6e39c9c25e04315752e871e739"
+    ], 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [
+      "tsan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -64005,6 +75775,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -64024,6 +75797,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -64043,6 +75819,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -64062,6 +75841,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -64081,6 +75863,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -64100,6 +75885,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -64119,6 +75907,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -64138,6 +75929,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -64157,6 +75951,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -64176,6 +75973,31 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "client_fuzzer_one_entry", 
+    "platforms": [
+      "linux"
+    ], 
+    "uses_polling": false
+  }, 
+  {
+    "args": [
+      "test/core/end2end/fuzzers/client_fuzzer_corpus/ae448bfe17f9a3a6eff074d4caa9f7261c94d2d5"
+    ], 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [
+      "tsan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -64195,6 +76017,31 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "client_fuzzer_one_entry", 
+    "platforms": [
+      "linux"
+    ], 
+    "uses_polling": false
+  }, 
+  {
+    "args": [
+      "test/core/end2end/fuzzers/client_fuzzer_corpus/ae8cdc02275a1436bc131bee52a17ee797e2e6c9"
+    ], 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [
+      "tsan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -64214,6 +76061,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -64233,6 +76083,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -64252,6 +76105,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -64271,6 +76127,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -64290,6 +76149,31 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "client_fuzzer_one_entry", 
+    "platforms": [
+      "linux"
+    ], 
+    "uses_polling": false
+  }, 
+  {
+    "args": [
+      "test/core/end2end/fuzzers/client_fuzzer_corpus/b10353c265bef989d8909055fd6cd52e49eef3e6"
+    ], 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [
+      "tsan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -64309,6 +76193,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -64328,6 +76215,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -64347,6 +76237,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -64366,6 +76259,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -64385,6 +76281,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -64404,6 +76303,31 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "client_fuzzer_one_entry", 
+    "platforms": [
+      "linux"
+    ], 
+    "uses_polling": false
+  }, 
+  {
+    "args": [
+      "test/core/end2end/fuzzers/client_fuzzer_corpus/b387e46c23912785e6c353ab49b8ea4a92c2c2e5"
+    ], 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [
+      "tsan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -64423,6 +76347,31 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "client_fuzzer_one_entry", 
+    "platforms": [
+      "linux"
+    ], 
+    "uses_polling": false
+  }, 
+  {
+    "args": [
+      "test/core/end2end/fuzzers/client_fuzzer_corpus/b3cfcd55b0331ab0c931b8c61d4df41464587f10"
+    ], 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [
+      "tsan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -64442,6 +76391,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -64461,6 +76413,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -64480,6 +76435,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -64499,6 +76457,31 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "client_fuzzer_one_entry", 
+    "platforms": [
+      "linux"
+    ], 
+    "uses_polling": false
+  }, 
+  {
+    "args": [
+      "test/core/end2end/fuzzers/client_fuzzer_corpus/b758f5c019696f33c50895168219c0e6cb04e11d"
+    ], 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [
+      "tsan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -64518,6 +76501,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -64537,6 +76523,53 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "client_fuzzer_one_entry", 
+    "platforms": [
+      "linux"
+    ], 
+    "uses_polling": false
+  }, 
+  {
+    "args": [
+      "test/core/end2end/fuzzers/client_fuzzer_corpus/b93fd0a15287dd035eac86e547e3ce42183bdb28"
+    ], 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [
+      "tsan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "client_fuzzer_one_entry", 
+    "platforms": [
+      "linux"
+    ], 
+    "uses_polling": false
+  }, 
+  {
+    "args": [
+      "test/core/end2end/fuzzers/client_fuzzer_corpus/ba3566735888b53712c6b2e6d52ff5f2197afd6a"
+    ], 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [
+      "tsan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -64556,6 +76589,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -64575,6 +76611,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -64594,6 +76633,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -64613,6 +76655,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -64632,6 +76677,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -64651,6 +76699,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -64670,6 +76721,31 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "client_fuzzer_one_entry", 
+    "platforms": [
+      "linux"
+    ], 
+    "uses_polling": false
+  }, 
+  {
+    "args": [
+      "test/core/end2end/fuzzers/client_fuzzer_corpus/bd275178fd473028a5cedf7d5780b27e809882ee"
+    ], 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [
+      "tsan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -64689,6 +76765,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -64708,6 +76787,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -64727,6 +76809,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -64746,6 +76831,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -64765,6 +76853,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -64784,6 +76875,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -64803,6 +76897,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -64822,6 +76919,31 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "client_fuzzer_one_entry", 
+    "platforms": [
+      "linux"
+    ], 
+    "uses_polling": false
+  }, 
+  {
+    "args": [
+      "test/core/end2end/fuzzers/client_fuzzer_corpus/c4c53b4727e9e1f040c5d7870639dd3daa184ddb"
+    ], 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [
+      "tsan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -64841,6 +76963,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -64860,6 +76985,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -64879,6 +77007,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -64898,6 +77029,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -64917,6 +77051,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -64936,6 +77073,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -64955,6 +77095,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -64974,6 +77117,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -64993,6 +77139,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -65012,6 +77161,31 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "client_fuzzer_one_entry", 
+    "platforms": [
+      "linux"
+    ], 
+    "uses_polling": false
+  }, 
+  {
+    "args": [
+      "test/core/end2end/fuzzers/client_fuzzer_corpus/c9e2cf8be8a4dc2294020026c62840ef1fb4853b"
+    ], 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [
+      "tsan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -65031,6 +77205,75 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "client_fuzzer_one_entry", 
+    "platforms": [
+      "linux"
+    ], 
+    "uses_polling": false
+  }, 
+  {
+    "args": [
+      "test/core/end2end/fuzzers/client_fuzzer_corpus/caaf9a7751c0eccc34f0fc00a048012ab5ed2f37"
+    ], 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [
+      "tsan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "client_fuzzer_one_entry", 
+    "platforms": [
+      "linux"
+    ], 
+    "uses_polling": false
+  }, 
+  {
+    "args": [
+      "test/core/end2end/fuzzers/client_fuzzer_corpus/cb49955601d171fd14c9ac21137b221392c7dab1"
+    ], 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [
+      "tsan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "client_fuzzer_one_entry", 
+    "platforms": [
+      "linux"
+    ], 
+    "uses_polling": false
+  }, 
+  {
+    "args": [
+      "test/core/end2end/fuzzers/client_fuzzer_corpus/cbaabef34763f2fd922e67ff5f2ea283347e9823"
+    ], 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [
+      "tsan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -65050,6 +77293,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -65069,6 +77315,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -65088,6 +77337,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -65107,6 +77359,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -65126,6 +77381,31 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "client_fuzzer_one_entry", 
+    "platforms": [
+      "linux"
+    ], 
+    "uses_polling": false
+  }, 
+  {
+    "args": [
+      "test/core/end2end/fuzzers/client_fuzzer_corpus/cdd1a4e358ee2396ece54b32c1f0a8d0a2e3f3dc"
+    ], 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [
+      "tsan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -65145,6 +77425,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -65164,6 +77447,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -65183,6 +77469,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -65202,6 +77491,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -65221,6 +77513,31 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "client_fuzzer_one_entry", 
+    "platforms": [
+      "linux"
+    ], 
+    "uses_polling": false
+  }, 
+  {
+    "args": [
+      "test/core/end2end/fuzzers/client_fuzzer_corpus/cf922d44bf08d223d3ebcd37a7e77d3e43555d08"
+    ], 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [
+      "tsan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -65240,6 +77557,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -65259,6 +77579,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -65278,6 +77601,31 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "client_fuzzer_one_entry", 
+    "platforms": [
+      "linux"
+    ], 
+    "uses_polling": false
+  }, 
+  {
+    "args": [
+      "test/core/end2end/fuzzers/client_fuzzer_corpus/crash-17d5b79ce495f7d3f2e33d95588457281a5e8965"
+    ], 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [
+      "tsan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -65297,6 +77645,31 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "client_fuzzer_one_entry", 
+    "platforms": [
+      "linux"
+    ], 
+    "uses_polling": false
+  }, 
+  {
+    "args": [
+      "test/core/end2end/fuzzers/client_fuzzer_corpus/crash-3e52af52deb0ed5d6ef06487d7e475e8fb616972"
+    ], 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [
+      "tsan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -65316,6 +77689,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -65335,6 +77711,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -65354,6 +77733,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -65373,6 +77755,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -65392,6 +77777,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -65411,6 +77799,53 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "client_fuzzer_one_entry", 
+    "platforms": [
+      "linux"
+    ], 
+    "uses_polling": false
+  }, 
+  {
+    "args": [
+      "test/core/end2end/fuzzers/client_fuzzer_corpus/crash-ff53a3d713e83ae945b8dd1782e21f5b51aa649a"
+    ], 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [
+      "tsan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "client_fuzzer_one_entry", 
+    "platforms": [
+      "linux"
+    ], 
+    "uses_polling": false
+  }, 
+  {
+    "args": [
+      "test/core/end2end/fuzzers/client_fuzzer_corpus/d17e9507af1855fcf9eca78e2d25c8fb2c40a34c"
+    ], 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [
+      "tsan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -65430,6 +77865,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -65449,6 +77887,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -65468,6 +77909,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -65487,6 +77931,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -65506,6 +77953,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -65525,6 +77975,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -65544,6 +77997,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -65563,6 +78019,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -65582,6 +78041,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -65601,6 +78063,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -65620,6 +78085,31 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "client_fuzzer_one_entry", 
+    "platforms": [
+      "linux"
+    ], 
+    "uses_polling": false
+  }, 
+  {
+    "args": [
+      "test/core/end2end/fuzzers/client_fuzzer_corpus/d46c3dcede830286dd9f4a1ba02a20a0b1430664"
+    ], 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [
+      "tsan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -65639,6 +78129,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -65658,6 +78151,53 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "client_fuzzer_one_entry", 
+    "platforms": [
+      "linux"
+    ], 
+    "uses_polling": false
+  }, 
+  {
+    "args": [
+      "test/core/end2end/fuzzers/client_fuzzer_corpus/d4a744ef6dcef5cf08d5289e167b26270d39e9f2"
+    ], 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [
+      "tsan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "client_fuzzer_one_entry", 
+    "platforms": [
+      "linux"
+    ], 
+    "uses_polling": false
+  }, 
+  {
+    "args": [
+      "test/core/end2end/fuzzers/client_fuzzer_corpus/d5a85ad91cfde27a96960b2e783d2ee43c50dcb9"
+    ], 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [
+      "tsan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -65677,6 +78217,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -65696,6 +78239,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -65715,6 +78261,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -65734,6 +78283,31 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "client_fuzzer_one_entry", 
+    "platforms": [
+      "linux"
+    ], 
+    "uses_polling": false
+  }, 
+  {
+    "args": [
+      "test/core/end2end/fuzzers/client_fuzzer_corpus/d88bb0b7ff687af84f33e6af22d3516fcdac5534"
+    ], 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [
+      "tsan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -65753,6 +78327,31 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "client_fuzzer_one_entry", 
+    "platforms": [
+      "linux"
+    ], 
+    "uses_polling": false
+  }, 
+  {
+    "args": [
+      "test/core/end2end/fuzzers/client_fuzzer_corpus/d895ece988ad4712b87de8aa9bc273eee315e8b8"
+    ], 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [
+      "tsan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -65772,6 +78371,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -65791,6 +78393,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -65810,6 +78415,31 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "client_fuzzer_one_entry", 
+    "platforms": [
+      "linux"
+    ], 
+    "uses_polling": false
+  }, 
+  {
+    "args": [
+      "test/core/end2end/fuzzers/client_fuzzer_corpus/da424090e1b94c5d0e91e26f3f3dd6c4af18fcd5"
+    ], 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [
+      "tsan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -65829,6 +78459,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -65848,6 +78481,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -65867,6 +78503,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -65886,6 +78525,31 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "client_fuzzer_one_entry", 
+    "platforms": [
+      "linux"
+    ], 
+    "uses_polling": false
+  }, 
+  {
+    "args": [
+      "test/core/end2end/fuzzers/client_fuzzer_corpus/db3a30a6d8e605dd587e51b214c42f68bc43cf19"
+    ], 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [
+      "tsan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -65905,6 +78569,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -65924,6 +78591,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -65943,6 +78613,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -65962,6 +78635,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -65981,6 +78657,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -66000,6 +78679,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -66019,6 +78701,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -66038,6 +78723,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -66057,6 +78745,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -66076,6 +78767,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -66095,6 +78789,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -66114,6 +78811,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -66133,6 +78833,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -66152,6 +78855,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -66171,6 +78877,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -66190,6 +78899,31 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "client_fuzzer_one_entry", 
+    "platforms": [
+      "linux"
+    ], 
+    "uses_polling": false
+  }, 
+  {
+    "args": [
+      "test/core/end2end/fuzzers/client_fuzzer_corpus/e3d12a2385b75443fe38d989e77c252e1f3cdb6d"
+    ], 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [
+      "tsan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -66209,6 +78943,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -66228,6 +78965,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -66247,6 +78987,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -66266,6 +79009,31 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "client_fuzzer_one_entry", 
+    "platforms": [
+      "linux"
+    ], 
+    "uses_polling": false
+  }, 
+  {
+    "args": [
+      "test/core/end2end/fuzzers/client_fuzzer_corpus/e4f55281c481484bd9edc28fd10df0c2e0f7d546"
+    ], 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [
+      "tsan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -66285,6 +79053,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -66304,6 +79075,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -66323,6 +79097,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -66342,6 +79119,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -66361,6 +79141,31 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "client_fuzzer_one_entry", 
+    "platforms": [
+      "linux"
+    ], 
+    "uses_polling": false
+  }, 
+  {
+    "args": [
+      "test/core/end2end/fuzzers/client_fuzzer_corpus/e6c52f2f31db7595d1ecde2939a7390777f15182"
+    ], 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [
+      "tsan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -66380,6 +79185,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -66399,6 +79207,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -66418,6 +79229,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -66437,6 +79251,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -66456,6 +79273,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -66475,6 +79295,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -66494,6 +79317,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -66513,6 +79339,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -66532,6 +79361,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -66551,6 +79383,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -66570,6 +79405,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -66589,6 +79427,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -66608,6 +79449,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -66627,6 +79471,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -66646,6 +79493,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -66665,6 +79515,53 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "client_fuzzer_one_entry", 
+    "platforms": [
+      "linux"
+    ], 
+    "uses_polling": false
+  }, 
+  {
+    "args": [
+      "test/core/end2end/fuzzers/client_fuzzer_corpus/f09cd3e3a16658174717668e51e7382e491df1da"
+    ], 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [
+      "tsan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "client_fuzzer_one_entry", 
+    "platforms": [
+      "linux"
+    ], 
+    "uses_polling": false
+  }, 
+  {
+    "args": [
+      "test/core/end2end/fuzzers/client_fuzzer_corpus/f11abb090bae8cdac1f7d9a2e344f2def0e50066"
+    ], 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [
+      "tsan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -66684,6 +79581,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -66703,6 +79603,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -66722,6 +79625,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -66741,6 +79647,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -66760,6 +79669,53 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "client_fuzzer_one_entry", 
+    "platforms": [
+      "linux"
+    ], 
+    "uses_polling": false
+  }, 
+  {
+    "args": [
+      "test/core/end2end/fuzzers/client_fuzzer_corpus/f4ae2a2b692bfa83cdde75d007813426e14daef7"
+    ], 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [
+      "tsan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "client_fuzzer_one_entry", 
+    "platforms": [
+      "linux"
+    ], 
+    "uses_polling": false
+  }, 
+  {
+    "args": [
+      "test/core/end2end/fuzzers/client_fuzzer_corpus/f5a629c8fd5720236b66a875e96ea22e29c45965"
+    ], 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [
+      "tsan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -66779,6 +79735,31 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "client_fuzzer_one_entry", 
+    "platforms": [
+      "linux"
+    ], 
+    "uses_polling": false
+  }, 
+  {
+    "args": [
+      "test/core/end2end/fuzzers/client_fuzzer_corpus/f6627c55881fe4f0c8e6999980fb226836e6f5ce"
+    ], 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [
+      "tsan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -66798,6 +79779,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -66817,6 +79801,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -66836,6 +79823,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -66855,6 +79845,53 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "client_fuzzer_one_entry", 
+    "platforms": [
+      "linux"
+    ], 
+    "uses_polling": false
+  }, 
+  {
+    "args": [
+      "test/core/end2end/fuzzers/client_fuzzer_corpus/f7aeceaf0b6d971038a677994b5d080fa0e18011"
+    ], 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [
+      "tsan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "client_fuzzer_one_entry", 
+    "platforms": [
+      "linux"
+    ], 
+    "uses_polling": false
+  }, 
+  {
+    "args": [
+      "test/core/end2end/fuzzers/client_fuzzer_corpus/f803c87a92662898e2c8c847787b56d2c31f63b3"
+    ], 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [
+      "tsan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -66874,6 +79911,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -66893,6 +79933,31 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "client_fuzzer_one_entry", 
+    "platforms": [
+      "linux"
+    ], 
+    "uses_polling": false
+  }, 
+  {
+    "args": [
+      "test/core/end2end/fuzzers/client_fuzzer_corpus/f89ad475ff51a5a9fe18603df833453bed320f36"
+    ], 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [
+      "tsan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -66912,6 +79977,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -66931,6 +79999,31 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "client_fuzzer_one_entry", 
+    "platforms": [
+      "linux"
+    ], 
+    "uses_polling": false
+  }, 
+  {
+    "args": [
+      "test/core/end2end/fuzzers/client_fuzzer_corpus/f9583b3a39c1aecbba6e81d71e7fe9b9519c8b08"
+    ], 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [
+      "tsan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -66950,6 +80043,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -66969,6 +80065,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -66988,6 +80087,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -67007,6 +80109,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -67026,6 +80131,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -67045,6 +80153,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -67064,6 +80175,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -67083,6 +80197,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -67102,6 +80219,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -67121,6 +80241,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -67140,6 +80263,31 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
+    "flaky": false, 
+    "language": "c", 
+    "name": "client_fuzzer_one_entry", 
+    "platforms": [
+      "linux"
+    ], 
+    "uses_polling": false
+  }, 
+  {
+    "args": [
+      "test/core/end2end/fuzzers/client_fuzzer_corpus/ffd52d31f9c59a346aa195a683f077dda5ecef6b"
+    ], 
+    "ci_platforms": [
+      "linux"
+    ], 
+    "cpu_cost": 0.1, 
+    "exclude_configs": [
+      "tsan"
+    ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -67159,6 +80307,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -67178,6 +80329,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -67197,6 +80351,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "client_fuzzer_one_entry", 
@@ -67216,6 +80373,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -67235,6 +80395,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -67254,6 +80417,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -67273,6 +80439,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -67292,6 +80461,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -67311,6 +80483,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -67330,6 +80505,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -67349,6 +80527,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -67368,6 +80549,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -67387,6 +80571,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -67406,6 +80593,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -67425,6 +80615,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -67444,6 +80637,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -67463,6 +80659,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -67482,6 +80681,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -67501,6 +80703,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -67520,6 +80725,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -67539,6 +80747,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -67558,6 +80769,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -67577,6 +80791,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -67596,6 +80813,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -67615,6 +80835,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -67634,6 +80857,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -67653,6 +80879,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -67672,6 +80901,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -67691,6 +80923,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -67710,6 +80945,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -67729,6 +80967,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -67748,6 +80989,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -67767,6 +81011,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -67786,6 +81033,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -67805,6 +81055,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -67824,6 +81077,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -67843,6 +81099,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -67862,6 +81121,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -67881,6 +81143,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -67900,6 +81165,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -67919,6 +81187,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -67938,6 +81209,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -67957,6 +81231,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -67976,6 +81253,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -67995,6 +81275,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -68014,6 +81297,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -68033,6 +81319,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -68052,6 +81341,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -68071,6 +81363,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -68090,6 +81385,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -68109,6 +81407,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -68128,6 +81429,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -68147,6 +81451,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -68166,6 +81473,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -68185,6 +81495,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -68204,6 +81517,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -68223,6 +81539,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -68242,6 +81561,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -68261,6 +81583,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -68280,6 +81605,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -68299,6 +81627,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -68318,6 +81649,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -68337,6 +81671,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -68356,6 +81693,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -68375,6 +81715,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -68394,6 +81737,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -68413,6 +81759,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -68432,6 +81781,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -68451,6 +81803,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -68470,6 +81825,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -68489,6 +81847,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -68508,6 +81869,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -68527,6 +81891,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -68546,6 +81913,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -68565,6 +81935,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -68584,6 +81957,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -68603,6 +81979,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -68622,6 +82001,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -68641,6 +82023,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -68660,6 +82045,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -68679,6 +82067,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -68698,6 +82089,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -68717,6 +82111,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -68736,6 +82133,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -68755,6 +82155,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -68774,6 +82177,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -68793,6 +82199,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -68812,6 +82221,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -68831,6 +82243,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -68850,6 +82265,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -68869,6 +82287,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -68888,6 +82309,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -68907,6 +82331,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -68926,6 +82353,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -68945,6 +82375,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -68964,6 +82397,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -68983,6 +82419,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -69002,6 +82441,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -69021,6 +82463,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -69040,6 +82485,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -69059,6 +82507,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -69078,6 +82529,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -69097,6 +82551,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -69116,6 +82573,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -69135,6 +82595,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -69154,6 +82617,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -69173,6 +82639,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -69192,6 +82661,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -69211,6 +82683,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -69230,6 +82705,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -69249,6 +82727,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -69268,6 +82749,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -69287,6 +82771,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -69306,6 +82793,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -69325,6 +82815,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -69344,6 +82837,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -69363,6 +82859,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -69382,6 +82881,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -69401,6 +82903,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -69420,6 +82925,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -69439,6 +82947,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -69458,6 +82969,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -69477,6 +82991,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -69496,6 +83013,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -69515,6 +83035,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -69534,6 +83057,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -69553,6 +83079,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -69572,6 +83101,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -69591,6 +83123,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -69610,6 +83145,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -69629,6 +83167,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -69648,6 +83189,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -69667,6 +83211,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -69686,6 +83233,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -69705,6 +83255,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -69724,6 +83277,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -69743,6 +83299,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -69762,6 +83321,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -69781,6 +83343,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -69800,6 +83365,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -69819,6 +83387,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -69838,6 +83409,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -69857,6 +83431,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -69876,6 +83453,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -69895,6 +83475,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -69914,6 +83497,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -69933,6 +83519,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -69952,6 +83541,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -69971,6 +83563,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -69990,6 +83585,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -70009,6 +83607,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -70028,6 +83629,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -70047,6 +83651,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -70066,6 +83673,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -70085,6 +83695,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -70104,6 +83717,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -70123,6 +83739,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -70142,6 +83761,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -70161,6 +83783,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -70180,6 +83805,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -70199,6 +83827,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -70218,6 +83849,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -70237,6 +83871,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -70256,6 +83893,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -70275,6 +83915,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -70294,6 +83937,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -70313,6 +83959,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -70332,6 +83981,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -70351,6 +84003,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -70370,6 +84025,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -70389,6 +84047,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -70408,6 +84069,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -70427,6 +84091,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -70446,6 +84113,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -70465,6 +84135,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -70484,6 +84157,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -70503,6 +84179,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -70522,6 +84201,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -70541,6 +84223,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -70560,6 +84245,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -70579,6 +84267,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -70598,6 +84289,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -70617,6 +84311,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -70636,6 +84333,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -70655,6 +84355,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -70674,6 +84377,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -70693,6 +84399,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -70712,6 +84421,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -70731,6 +84443,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -70750,6 +84465,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -70769,6 +84487,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -70788,6 +84509,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -70807,6 +84531,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -70826,6 +84553,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -70845,6 +84575,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -70864,6 +84597,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -70883,6 +84619,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -70902,6 +84641,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -70921,6 +84663,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -70940,6 +84685,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -70959,6 +84707,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -70978,6 +84729,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -70997,6 +84751,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -71016,6 +84773,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -71035,6 +84795,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -71054,6 +84817,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -71073,6 +84839,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -71092,6 +84861,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -71111,6 +84883,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -71130,6 +84905,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -71149,6 +84927,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -71168,6 +84949,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -71187,6 +84971,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -71206,6 +84993,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -71225,6 +85015,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -71244,6 +85037,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -71263,6 +85059,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -71282,6 +85081,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -71301,6 +85103,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -71320,6 +85125,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -71339,6 +85147,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -71358,6 +85169,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -71377,6 +85191,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -71396,6 +85213,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -71415,6 +85235,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -71434,6 +85257,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -71453,6 +85279,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -71472,6 +85301,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -71491,6 +85323,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -71510,6 +85345,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -71529,6 +85367,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -71548,6 +85389,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -71567,6 +85411,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -71586,6 +85433,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -71605,6 +85455,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -71624,6 +85477,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -71643,6 +85499,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -71662,6 +85521,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -71681,6 +85543,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -71700,6 +85565,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -71719,6 +85587,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -71738,6 +85609,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -71757,6 +85631,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -71776,6 +85653,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -71795,6 +85675,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -71814,6 +85697,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -71833,6 +85719,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -71852,6 +85741,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -71871,6 +85763,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -71890,6 +85785,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -71909,6 +85807,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -71928,6 +85829,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -71947,6 +85851,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -71966,6 +85873,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -71985,6 +85895,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -72004,6 +85917,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -72023,6 +85939,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -72042,6 +85961,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -72061,6 +85983,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -72080,6 +86005,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -72099,6 +86027,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -72118,6 +86049,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -72137,6 +86071,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -72156,6 +86093,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -72175,6 +86115,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -72194,6 +86137,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -72213,6 +86159,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -72232,6 +86181,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -72251,6 +86203,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -72270,6 +86225,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -72289,6 +86247,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -72308,6 +86269,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -72327,6 +86291,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -72346,6 +86313,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -72365,6 +86335,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -72384,6 +86357,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -72403,6 +86379,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -72422,6 +86401,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -72441,6 +86423,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -72460,6 +86445,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -72479,6 +86467,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -72498,6 +86489,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -72517,6 +86511,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -72536,6 +86533,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -72555,6 +86555,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -72574,6 +86577,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -72593,6 +86599,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -72612,6 +86621,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -72631,6 +86643,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -72650,6 +86665,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -72669,6 +86687,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -72688,6 +86709,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -72707,6 +86731,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -72726,6 +86753,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -72745,6 +86775,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -72764,6 +86797,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -72783,6 +86819,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -72802,6 +86841,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -72821,6 +86863,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -72840,6 +86885,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -72859,6 +86907,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -72878,6 +86929,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -72897,6 +86951,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -72916,6 +86973,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -72935,6 +86995,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -72954,6 +87017,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -72973,6 +87039,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -72992,6 +87061,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -73011,6 +87083,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -73030,6 +87105,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -73049,6 +87127,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -73068,6 +87149,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -73087,6 +87171,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -73106,6 +87193,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -73125,6 +87215,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -73144,6 +87237,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -73163,6 +87259,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -73182,6 +87281,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -73201,6 +87303,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -73220,6 +87325,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -73239,6 +87347,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -73258,6 +87369,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -73277,6 +87391,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -73296,6 +87413,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -73315,6 +87435,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -73334,6 +87457,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -73353,6 +87479,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -73372,6 +87501,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -73391,6 +87523,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -73410,6 +87545,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -73429,6 +87567,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "hpack_parser_fuzzer_test_one_entry", 
@@ -73448,6 +87589,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -73467,6 +87611,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -73486,6 +87633,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -73505,6 +87655,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -73524,6 +87677,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -73543,6 +87699,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -73562,6 +87721,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -73581,6 +87743,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -73600,6 +87765,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -73619,6 +87787,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -73638,6 +87809,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -73657,6 +87831,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -73676,6 +87853,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -73695,6 +87875,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -73714,6 +87897,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -73733,6 +87919,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -73752,6 +87941,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -73771,6 +87963,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -73790,6 +87985,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -73809,6 +88007,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -73828,6 +88029,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -73847,6 +88051,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -73866,6 +88073,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -73885,6 +88095,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -73904,6 +88117,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -73923,6 +88139,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -73942,6 +88161,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -73961,6 +88183,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -73980,6 +88205,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -73999,6 +88227,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -74018,6 +88249,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -74037,6 +88271,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -74056,6 +88293,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -74075,6 +88315,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -74094,6 +88337,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -74113,6 +88359,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -74132,6 +88381,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -74151,6 +88403,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -74170,6 +88425,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -74189,6 +88447,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -74208,6 +88469,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -74227,6 +88491,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -74246,6 +88513,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -74265,6 +88535,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -74284,6 +88557,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -74303,6 +88579,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -74322,6 +88601,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -74341,6 +88623,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -74360,6 +88645,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -74379,6 +88667,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -74398,6 +88689,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -74417,6 +88711,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -74436,6 +88733,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -74455,6 +88755,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -74474,6 +88777,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -74493,6 +88799,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -74512,6 +88821,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -74531,6 +88843,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -74550,6 +88865,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -74569,6 +88887,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -74588,6 +88909,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -74607,6 +88931,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -74626,6 +88953,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -74645,6 +88975,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -74664,6 +88997,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -74683,6 +89019,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -74702,6 +89041,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -74721,6 +89063,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -74740,6 +89085,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -74759,6 +89107,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -74778,6 +89129,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -74797,6 +89151,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -74816,6 +89173,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -74835,6 +89195,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -74854,6 +89217,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -74873,6 +89239,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -74892,6 +89261,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -74911,6 +89283,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -74930,6 +89305,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -74949,6 +89327,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -74968,6 +89349,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -74987,6 +89371,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -75006,6 +89393,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -75025,6 +89415,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -75044,6 +89437,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -75063,6 +89459,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -75082,6 +89481,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -75101,6 +89503,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -75120,6 +89525,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -75139,6 +89547,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -75158,6 +89569,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -75177,6 +89591,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -75196,6 +89613,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -75215,6 +89635,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -75234,6 +89657,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -75253,6 +89679,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -75272,6 +89701,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -75291,6 +89723,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -75310,6 +89745,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -75329,6 +89767,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -75348,6 +89789,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -75367,6 +89811,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -75386,6 +89833,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -75405,6 +89855,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -75424,6 +89877,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -75443,6 +89899,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -75462,6 +89921,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -75481,6 +89943,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -75500,6 +89965,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -75519,6 +89987,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -75538,6 +90009,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -75557,6 +90031,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -75576,6 +90053,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -75595,6 +90075,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -75614,6 +90097,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -75633,6 +90119,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -75652,6 +90141,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -75671,6 +90163,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -75690,6 +90185,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -75709,6 +90207,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -75728,6 +90229,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -75747,6 +90251,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -75766,6 +90273,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -75785,6 +90295,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -75804,6 +90317,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -75823,6 +90339,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -75842,6 +90361,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -75861,6 +90383,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -75880,6 +90405,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -75899,6 +90427,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -75918,6 +90449,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -75937,6 +90471,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -75956,6 +90493,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -75975,6 +90515,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -75994,6 +90537,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -76013,6 +90559,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -76032,6 +90581,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -76051,6 +90603,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -76070,6 +90625,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -76089,6 +90647,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -76108,6 +90669,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -76127,6 +90691,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -76146,6 +90713,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -76165,6 +90735,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -76184,6 +90757,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -76203,6 +90779,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -76222,6 +90801,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -76241,6 +90823,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -76260,6 +90845,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -76279,6 +90867,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -76298,6 +90889,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -76317,6 +90911,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -76336,6 +90933,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -76355,6 +90955,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -76374,6 +90977,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -76393,6 +90999,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -76412,6 +91021,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -76431,6 +91043,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -76450,6 +91065,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -76469,6 +91087,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -76488,6 +91109,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -76507,6 +91131,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -76526,6 +91153,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -76545,6 +91175,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -76564,6 +91197,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -76583,6 +91219,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -76602,6 +91241,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -76621,6 +91263,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -76640,6 +91285,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -76659,6 +91307,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -76678,6 +91329,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -76697,6 +91351,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -76716,6 +91373,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -76735,6 +91395,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -76754,6 +91417,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -76773,6 +91439,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -76792,6 +91461,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -76811,6 +91483,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -76830,6 +91505,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -76849,6 +91527,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -76868,6 +91549,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -76887,6 +91571,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -76906,6 +91593,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -76925,6 +91615,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -76944,6 +91637,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -76963,6 +91659,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -76982,6 +91681,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -77001,6 +91703,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -77020,6 +91725,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -77039,6 +91747,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -77058,6 +91769,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -77077,6 +91791,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -77096,6 +91813,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -77115,6 +91835,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -77134,6 +91857,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -77153,6 +91879,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -77172,6 +91901,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -77191,6 +91923,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -77210,6 +91945,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -77229,6 +91967,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -77248,6 +91989,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -77267,6 +92011,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -77286,6 +92033,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -77305,6 +92055,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -77324,6 +92077,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -77343,6 +92099,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -77362,6 +92121,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -77381,6 +92143,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -77400,6 +92165,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -77419,6 +92187,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -77438,6 +92209,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -77457,6 +92231,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -77476,6 +92253,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -77495,6 +92275,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -77514,6 +92297,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -77533,6 +92319,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -77552,6 +92341,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -77571,6 +92363,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -77590,6 +92385,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -77609,6 +92407,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -77628,6 +92429,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -77647,6 +92451,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -77666,6 +92473,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -77685,6 +92495,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -77704,6 +92517,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -77723,6 +92539,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -77742,6 +92561,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -77761,6 +92583,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -77780,6 +92605,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -77799,6 +92627,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -77818,6 +92649,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -77837,6 +92671,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -77856,6 +92693,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -77875,6 +92715,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -77894,6 +92737,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -77913,6 +92759,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -77932,6 +92781,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -77951,6 +92803,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -77970,6 +92825,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -77989,6 +92847,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -78008,6 +92869,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -78027,6 +92891,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -78046,6 +92913,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -78065,6 +92935,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -78084,6 +92957,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -78103,6 +92979,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -78122,6 +93001,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -78141,6 +93023,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -78160,6 +93045,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -78179,6 +93067,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -78198,6 +93089,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -78217,6 +93111,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -78236,6 +93133,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -78255,6 +93155,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -78274,6 +93177,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -78293,6 +93199,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -78312,6 +93221,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -78331,6 +93243,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -78350,6 +93265,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -78369,6 +93287,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -78388,6 +93309,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -78407,6 +93331,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -78426,6 +93353,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -78445,6 +93375,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -78464,6 +93397,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -78483,6 +93419,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -78502,6 +93441,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -78521,6 +93463,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -78540,6 +93485,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -78559,6 +93507,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -78578,6 +93529,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -78597,6 +93551,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -78616,6 +93573,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -78635,6 +93595,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -78654,6 +93617,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -78673,6 +93639,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -78692,6 +93661,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -78711,6 +93683,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -78730,6 +93705,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -78749,6 +93727,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -78768,6 +93749,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -78787,6 +93771,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -78806,6 +93793,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -78825,6 +93815,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -78844,6 +93837,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -78863,6 +93859,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -78882,6 +93881,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -78901,6 +93903,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -78920,6 +93925,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -78939,6 +93947,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -78958,6 +93969,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -78977,6 +93991,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -78996,6 +94013,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -79015,6 +94035,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -79034,6 +94057,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -79053,6 +94079,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -79072,6 +94101,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -79091,6 +94123,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -79110,6 +94145,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -79129,6 +94167,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -79148,6 +94189,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -79167,6 +94211,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -79186,6 +94233,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -79205,6 +94255,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -79224,6 +94277,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -79243,6 +94299,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -79262,6 +94321,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -79281,6 +94343,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -79300,6 +94365,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -79319,6 +94387,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -79338,6 +94409,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -79357,6 +94431,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -79376,6 +94453,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -79395,6 +94475,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -79414,6 +94497,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -79433,6 +94519,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -79452,6 +94541,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -79471,6 +94563,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -79490,6 +94585,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -79509,6 +94607,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -79528,6 +94629,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -79547,6 +94651,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -79566,6 +94673,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -79585,6 +94695,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -79604,6 +94717,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -79623,6 +94739,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -79642,6 +94761,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -79661,6 +94783,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -79680,6 +94805,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -79699,6 +94827,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -79718,6 +94849,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -79737,6 +94871,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -79756,6 +94893,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -79775,6 +94915,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -79794,6 +94937,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -79813,6 +94959,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -79832,6 +94981,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -79851,6 +95003,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -79870,6 +95025,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -79889,6 +95047,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -79908,6 +95069,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -79927,6 +95091,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -79946,6 +95113,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -79965,6 +95135,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -79984,6 +95157,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -80003,6 +95179,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -80022,6 +95201,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -80041,6 +95223,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "json_fuzzer_test_one_entry", 
@@ -80060,6 +95245,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_response_test_one_entry", 
@@ -80079,6 +95267,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_response_test_one_entry", 
@@ -80098,6 +95289,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_response_test_one_entry", 
@@ -80117,6 +95311,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_response_test_one_entry", 
@@ -80136,6 +95333,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_response_test_one_entry", 
@@ -80155,6 +95355,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_response_test_one_entry", 
@@ -80174,6 +95377,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_response_test_one_entry", 
@@ -80193,6 +95399,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_response_test_one_entry", 
@@ -80212,6 +95421,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_response_test_one_entry", 
@@ -80231,6 +95443,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_response_test_one_entry", 
@@ -80250,6 +95465,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_response_test_one_entry", 
@@ -80269,6 +95487,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_response_test_one_entry", 
@@ -80288,6 +95509,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_response_test_one_entry", 
@@ -80307,6 +95531,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_response_test_one_entry", 
@@ -80326,6 +95553,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_response_test_one_entry", 
@@ -80345,6 +95575,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_response_test_one_entry", 
@@ -80364,6 +95597,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_response_test_one_entry", 
@@ -80383,6 +95619,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_response_test_one_entry", 
@@ -80402,6 +95641,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_response_test_one_entry", 
@@ -80421,6 +95663,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_response_test_one_entry", 
@@ -80440,6 +95685,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_response_test_one_entry", 
@@ -80459,6 +95707,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_response_test_one_entry", 
@@ -80478,6 +95729,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_response_test_one_entry", 
@@ -80497,6 +95751,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_response_test_one_entry", 
@@ -80516,6 +95773,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_response_test_one_entry", 
@@ -80535,6 +95795,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_response_test_one_entry", 
@@ -80554,6 +95817,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_response_test_one_entry", 
@@ -80573,6 +95839,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_response_test_one_entry", 
@@ -80592,6 +95861,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_response_test_one_entry", 
@@ -80611,6 +95883,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_response_test_one_entry", 
@@ -80630,6 +95905,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_response_test_one_entry", 
@@ -80649,6 +95927,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_response_test_one_entry", 
@@ -80668,6 +95949,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_response_test_one_entry", 
@@ -80687,6 +95971,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_response_test_one_entry", 
@@ -80706,6 +95993,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_response_test_one_entry", 
@@ -80725,6 +96015,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_response_test_one_entry", 
@@ -80744,6 +96037,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_response_test_one_entry", 
@@ -80763,6 +96059,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_response_test_one_entry", 
@@ -80782,6 +96081,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_response_test_one_entry", 
@@ -80801,6 +96103,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_response_test_one_entry", 
@@ -80820,6 +96125,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_response_test_one_entry", 
@@ -80839,6 +96147,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_response_test_one_entry", 
@@ -80858,6 +96169,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_response_test_one_entry", 
@@ -80877,6 +96191,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_response_test_one_entry", 
@@ -80896,6 +96213,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_response_test_one_entry", 
@@ -80915,6 +96235,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_response_test_one_entry", 
@@ -80934,6 +96257,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_response_test_one_entry", 
@@ -80953,6 +96279,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_response_test_one_entry", 
@@ -80972,6 +96301,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_response_test_one_entry", 
@@ -80991,6 +96323,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_response_test_one_entry", 
@@ -81010,6 +96345,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_response_test_one_entry", 
@@ -81029,6 +96367,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_response_test_one_entry", 
@@ -81048,6 +96389,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_response_test_one_entry", 
@@ -81067,6 +96411,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_response_test_one_entry", 
@@ -81086,6 +96433,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_response_test_one_entry", 
@@ -81105,6 +96455,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_response_test_one_entry", 
@@ -81124,6 +96477,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_response_test_one_entry", 
@@ -81143,6 +96499,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_response_test_one_entry", 
@@ -81162,6 +96521,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_response_test_one_entry", 
@@ -81181,6 +96543,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_response_test_one_entry", 
@@ -81200,6 +96565,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_response_test_one_entry", 
@@ -81219,6 +96587,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_response_test_one_entry", 
@@ -81238,6 +96609,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_response_test_one_entry", 
@@ -81257,6 +96631,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -81276,6 +96653,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -81295,6 +96675,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -81314,6 +96697,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -81333,6 +96719,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -81352,6 +96741,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -81371,6 +96763,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -81390,6 +96785,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -81409,6 +96807,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -81428,6 +96829,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -81447,6 +96851,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -81466,6 +96873,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -81485,6 +96895,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -81504,6 +96917,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -81523,6 +96939,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -81542,6 +96961,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -81561,6 +96983,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -81580,6 +97005,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -81599,6 +97027,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -81618,6 +97049,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -81637,6 +97071,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -81656,6 +97093,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -81675,6 +97115,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -81694,6 +97137,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -81713,6 +97159,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -81732,6 +97181,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -81751,6 +97203,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -81770,6 +97225,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -81789,6 +97247,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -81808,6 +97269,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -81827,6 +97291,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -81846,6 +97313,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -81865,6 +97335,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -81884,6 +97357,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -81903,6 +97379,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -81922,6 +97401,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -81941,6 +97423,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -81960,6 +97445,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -81979,6 +97467,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -81998,6 +97489,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -82017,6 +97511,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -82036,6 +97533,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -82055,6 +97555,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -82074,6 +97577,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -82093,6 +97599,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -82112,6 +97621,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -82131,6 +97643,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -82150,6 +97665,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -82169,6 +97687,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -82188,6 +97709,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -82207,6 +97731,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -82226,6 +97753,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -82245,6 +97775,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -82264,6 +97797,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -82283,6 +97819,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -82302,6 +97841,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -82321,6 +97863,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -82340,6 +97885,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -82359,6 +97907,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -82378,6 +97929,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -82397,6 +97951,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -82416,6 +97973,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -82435,6 +97995,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -82454,6 +98017,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -82473,6 +98039,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -82492,6 +98061,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -82511,6 +98083,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -82530,6 +98105,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -82549,6 +98127,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -82568,6 +98149,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -82587,6 +98171,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -82606,6 +98193,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -82625,6 +98215,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -82644,6 +98237,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -82663,6 +98259,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -82682,6 +98281,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -82701,6 +98303,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -82720,6 +98325,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -82739,6 +98347,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -82758,6 +98369,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -82777,6 +98391,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -82796,6 +98413,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -82815,6 +98435,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -82834,6 +98457,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -82853,6 +98479,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -82872,6 +98501,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -82891,6 +98523,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -82910,6 +98545,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -82929,6 +98567,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -82948,6 +98589,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -82967,6 +98611,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -82986,6 +98633,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -83005,6 +98655,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -83024,6 +98677,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -83043,6 +98699,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -83062,6 +98721,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -83081,6 +98743,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -83100,6 +98765,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -83119,6 +98787,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -83138,6 +98809,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -83157,6 +98831,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -83176,6 +98853,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -83195,6 +98875,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -83214,6 +98897,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -83233,6 +98919,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -83252,6 +98941,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -83271,6 +98963,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -83290,6 +98985,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -83309,6 +99007,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -83328,6 +99029,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -83347,6 +99051,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -83366,6 +99073,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -83385,6 +99095,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -83404,6 +99117,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -83423,6 +99139,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -83442,6 +99161,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -83461,6 +99183,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -83480,6 +99205,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -83499,6 +99227,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -83518,6 +99249,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -83537,6 +99271,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -83556,6 +99293,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -83575,6 +99315,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -83594,6 +99337,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -83613,6 +99359,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -83632,6 +99381,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -83651,6 +99403,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -83670,6 +99425,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -83689,6 +99447,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -83708,6 +99469,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -83727,6 +99491,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -83746,6 +99513,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -83765,6 +99535,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -83784,6 +99557,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -83803,6 +99579,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -83822,6 +99601,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -83841,6 +99623,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -83860,6 +99645,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -83879,6 +99667,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -83898,6 +99689,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -83917,6 +99711,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -83936,6 +99733,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -83955,6 +99755,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -83974,6 +99777,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -83993,6 +99799,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -84012,6 +99821,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -84031,6 +99843,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -84050,6 +99865,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -84069,6 +99887,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -84088,6 +99909,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -84107,6 +99931,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -84126,6 +99953,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -84145,6 +99975,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -84164,6 +99997,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -84183,6 +100019,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -84202,6 +100041,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -84221,6 +100063,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -84240,6 +100085,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -84259,6 +100107,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -84278,6 +100129,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -84297,6 +100151,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -84316,6 +100173,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -84335,6 +100195,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -84354,6 +100217,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -84373,6 +100239,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -84392,6 +100261,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -84411,6 +100283,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -84430,6 +100305,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -84449,6 +100327,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -84468,6 +100349,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -84487,6 +100371,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -84506,6 +100393,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -84525,6 +100415,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -84544,6 +100437,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -84563,6 +100459,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -84582,6 +100481,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -84601,6 +100503,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -84620,6 +100525,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -84639,6 +100547,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -84658,6 +100569,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -84677,6 +100591,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -84696,6 +100613,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -84715,6 +100635,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -84734,6 +100657,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -84753,6 +100679,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -84772,6 +100701,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -84791,6 +100723,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -84810,6 +100745,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -84829,6 +100767,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -84848,6 +100789,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -84867,6 +100811,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -84886,6 +100833,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -84905,6 +100855,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -84924,6 +100877,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -84943,6 +100899,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -84962,6 +100921,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -84981,6 +100943,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -85000,6 +100965,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -85019,6 +100987,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -85038,6 +101009,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -85057,6 +101031,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -85076,6 +101053,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -85095,6 +101075,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -85114,6 +101097,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -85133,6 +101119,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -85152,6 +101141,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -85171,6 +101163,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -85190,6 +101185,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -85209,6 +101207,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -85228,6 +101229,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -85247,6 +101251,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -85266,6 +101273,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -85285,6 +101295,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -85304,6 +101317,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -85323,6 +101339,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -85342,6 +101361,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -85361,6 +101383,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -85380,6 +101405,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -85399,6 +101427,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -85418,6 +101449,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -85437,6 +101471,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -85456,6 +101493,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -85475,6 +101515,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -85494,6 +101537,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -85513,6 +101559,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -85532,6 +101581,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -85551,6 +101603,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -85570,6 +101625,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -85589,6 +101647,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -85608,6 +101669,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -85627,6 +101691,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -85646,6 +101713,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -85665,6 +101735,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -85684,6 +101757,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -85703,6 +101779,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -85722,6 +101801,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -85741,6 +101823,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -85760,6 +101845,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -85779,6 +101867,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -85798,6 +101889,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -85817,6 +101911,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -85836,6 +101933,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -85855,6 +101955,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -85874,6 +101977,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -85893,6 +101999,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -85912,6 +102021,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -85931,6 +102043,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -85950,6 +102065,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -85969,6 +102087,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -85988,6 +102109,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -86007,6 +102131,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -86026,6 +102153,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -86045,6 +102175,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -86064,6 +102197,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -86083,6 +102219,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -86102,6 +102241,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -86121,6 +102263,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -86140,6 +102285,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -86159,6 +102307,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -86178,6 +102329,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -86197,6 +102351,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -86216,6 +102373,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -86235,6 +102395,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -86254,6 +102417,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -86273,6 +102439,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -86292,6 +102461,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -86311,6 +102483,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -86330,6 +102505,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -86349,6 +102527,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -86368,6 +102549,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -86387,6 +102571,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -86406,6 +102593,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "nanopb_fuzzer_serverlist_test_one_entry", 
@@ -86425,6 +102615,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "percent_decode_fuzzer_one_entry", 
@@ -86444,6 +102637,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "percent_decode_fuzzer_one_entry", 
@@ -86463,6 +102659,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "percent_decode_fuzzer_one_entry", 
@@ -86482,6 +102681,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "percent_decode_fuzzer_one_entry", 
@@ -86501,6 +102703,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "percent_decode_fuzzer_one_entry", 
@@ -86520,6 +102725,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "percent_decode_fuzzer_one_entry", 
@@ -86539,6 +102747,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "percent_decode_fuzzer_one_entry", 
@@ -86558,6 +102769,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "percent_decode_fuzzer_one_entry", 
@@ -86577,6 +102791,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "percent_decode_fuzzer_one_entry", 
@@ -86596,6 +102813,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "percent_decode_fuzzer_one_entry", 
@@ -86615,6 +102835,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "percent_decode_fuzzer_one_entry", 
@@ -86634,6 +102857,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "percent_decode_fuzzer_one_entry", 
@@ -86653,6 +102879,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "percent_decode_fuzzer_one_entry", 
@@ -86672,6 +102901,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "percent_decode_fuzzer_one_entry", 
@@ -86691,6 +102923,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "percent_decode_fuzzer_one_entry", 
@@ -86710,6 +102945,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "percent_decode_fuzzer_one_entry", 
@@ -86729,6 +102967,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "percent_decode_fuzzer_one_entry", 
@@ -86748,6 +102989,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "percent_decode_fuzzer_one_entry", 
@@ -86767,6 +103011,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "percent_decode_fuzzer_one_entry", 
@@ -86786,6 +103033,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "percent_decode_fuzzer_one_entry", 
@@ -86805,6 +103055,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "percent_decode_fuzzer_one_entry", 
@@ -86824,6 +103077,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "percent_decode_fuzzer_one_entry", 
@@ -86843,6 +103099,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "percent_decode_fuzzer_one_entry", 
@@ -86862,6 +103121,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "percent_decode_fuzzer_one_entry", 
@@ -86881,6 +103143,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "percent_decode_fuzzer_one_entry", 
@@ -86900,6 +103165,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "percent_decode_fuzzer_one_entry", 
@@ -86919,6 +103187,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "percent_encode_fuzzer_one_entry", 
@@ -86938,6 +103209,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "percent_encode_fuzzer_one_entry", 
@@ -86957,6 +103231,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "percent_encode_fuzzer_one_entry", 
@@ -86976,6 +103253,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "percent_encode_fuzzer_one_entry", 
@@ -86995,6 +103275,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "percent_encode_fuzzer_one_entry", 
@@ -87014,6 +103297,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "percent_encode_fuzzer_one_entry", 
@@ -87033,6 +103319,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "percent_encode_fuzzer_one_entry", 
@@ -87052,6 +103341,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "percent_encode_fuzzer_one_entry", 
@@ -87071,6 +103363,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "percent_encode_fuzzer_one_entry", 
@@ -87090,6 +103385,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "percent_encode_fuzzer_one_entry", 
@@ -87109,6 +103407,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "percent_encode_fuzzer_one_entry", 
@@ -87128,6 +103429,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "percent_encode_fuzzer_one_entry", 
@@ -87147,6 +103451,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "percent_encode_fuzzer_one_entry", 
@@ -87166,6 +103473,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "percent_encode_fuzzer_one_entry", 
@@ -87185,6 +103495,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "percent_encode_fuzzer_one_entry", 
@@ -87204,6 +103517,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "percent_encode_fuzzer_one_entry", 
@@ -87223,6 +103539,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -87242,6 +103561,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -87261,6 +103583,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -87280,6 +103605,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -87299,6 +103627,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -87318,6 +103649,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -87337,6 +103671,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -87356,6 +103693,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -87375,6 +103715,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -87394,6 +103737,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -87413,6 +103759,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -87432,6 +103781,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -87451,6 +103803,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -87470,6 +103825,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -87489,6 +103847,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -87508,6 +103869,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -87527,6 +103891,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -87546,6 +103913,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -87565,6 +103935,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -87584,6 +103957,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -87603,6 +103979,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -87622,6 +104001,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -87641,6 +104023,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -87660,6 +104045,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -87679,6 +104067,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -87698,6 +104089,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -87717,6 +104111,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -87736,6 +104133,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -87755,6 +104155,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -87774,6 +104177,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -87793,6 +104199,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -87812,6 +104221,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -87831,6 +104243,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -87850,6 +104265,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -87869,6 +104287,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -87888,6 +104309,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -87907,6 +104331,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -87926,6 +104353,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -87945,6 +104375,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -87964,6 +104397,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -87983,6 +104419,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -88002,6 +104441,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -88021,6 +104463,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -88040,6 +104485,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -88059,6 +104507,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -88078,6 +104529,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -88097,6 +104551,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -88116,6 +104573,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -88135,6 +104595,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -88154,6 +104617,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -88173,6 +104639,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -88192,6 +104661,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -88211,6 +104683,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -88230,6 +104705,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -88249,6 +104727,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -88268,6 +104749,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -88287,6 +104771,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -88306,6 +104793,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -88325,6 +104815,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -88344,6 +104837,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -88363,6 +104859,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -88382,6 +104881,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -88401,6 +104903,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -88420,6 +104925,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -88439,6 +104947,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -88458,6 +104969,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -88477,6 +104991,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -88496,6 +105013,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -88515,6 +105035,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -88534,6 +105057,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -88553,6 +105079,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -88572,6 +105101,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -88591,6 +105123,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -88610,6 +105145,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -88629,6 +105167,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -88648,6 +105189,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -88667,6 +105211,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -88686,6 +105233,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -88705,6 +105255,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -88724,6 +105277,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -88743,6 +105299,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -88762,6 +105321,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -88781,6 +105343,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -88800,6 +105365,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -88819,6 +105387,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -88838,6 +105409,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -88857,6 +105431,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -88876,6 +105453,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -88895,6 +105475,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -88914,6 +105497,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -88933,6 +105519,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -88952,6 +105541,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -88971,6 +105563,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -88990,6 +105585,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -89009,6 +105607,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -89028,6 +105629,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -89047,6 +105651,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -89066,6 +105673,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -89085,6 +105695,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -89104,6 +105717,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -89123,6 +105739,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -89142,6 +105761,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -89161,6 +105783,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -89180,6 +105805,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -89199,6 +105827,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -89218,6 +105849,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -89237,6 +105871,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -89256,6 +105893,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -89275,6 +105915,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -89294,6 +105937,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -89313,6 +105959,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -89332,6 +105981,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -89351,6 +106003,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -89370,6 +106025,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -89389,6 +106047,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -89408,6 +106069,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -89427,6 +106091,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -89446,6 +106113,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -89465,6 +106135,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -89484,6 +106157,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -89503,6 +106179,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -89522,6 +106201,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -89541,6 +106223,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -89560,6 +106245,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -89579,6 +106267,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -89598,6 +106289,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -89617,6 +106311,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -89636,6 +106333,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -89655,6 +106355,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -89674,6 +106377,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -89693,6 +106399,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -89712,6 +106421,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -89731,6 +106443,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -89750,6 +106465,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -89769,6 +106487,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -89788,6 +106509,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -89807,6 +106531,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -89826,6 +106553,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -89845,6 +106575,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -89864,6 +106597,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -89883,6 +106619,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -89902,6 +106641,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -89921,6 +106663,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -89940,6 +106685,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -89959,6 +106707,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -89978,6 +106729,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -89997,6 +106751,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -90016,6 +106773,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -90035,6 +106795,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -90054,6 +106817,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -90073,6 +106839,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -90092,6 +106861,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -90111,6 +106883,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -90130,6 +106905,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -90149,6 +106927,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -90168,6 +106949,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -90187,6 +106971,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -90206,6 +106993,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -90225,6 +107015,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -90244,6 +107037,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -90263,6 +107059,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -90282,6 +107081,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -90301,6 +107103,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -90320,6 +107125,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -90339,6 +107147,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -90358,6 +107169,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -90377,6 +107191,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -90396,6 +107213,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -90415,6 +107235,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -90434,6 +107257,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -90453,6 +107279,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -90472,6 +107301,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -90491,6 +107323,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -90510,6 +107345,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -90529,6 +107367,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -90548,6 +107389,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -90567,6 +107411,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -90586,6 +107433,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -90605,6 +107455,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -90624,6 +107477,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -90643,6 +107499,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -90662,6 +107521,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -90681,6 +107543,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -90700,6 +107565,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -90719,6 +107587,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -90738,6 +107609,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -90757,6 +107631,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -90776,6 +107653,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -90795,6 +107675,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -90814,6 +107697,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -90833,6 +107719,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -90852,6 +107741,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -90871,6 +107763,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -90890,6 +107785,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -90909,6 +107807,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -90928,6 +107829,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -90947,6 +107851,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -90966,6 +107873,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -90985,6 +107895,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -91004,6 +107917,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -91023,6 +107939,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -91042,6 +107961,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -91061,6 +107983,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -91080,6 +108005,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -91099,6 +108027,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -91118,6 +108049,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -91137,6 +108071,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -91156,6 +108093,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -91175,6 +108115,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -91194,6 +108137,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -91213,6 +108159,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -91232,6 +108181,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -91251,6 +108203,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -91270,6 +108225,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -91289,6 +108247,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -91308,6 +108269,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -91327,6 +108291,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -91346,6 +108313,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -91365,6 +108335,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -91384,6 +108357,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -91403,6 +108379,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -91422,6 +108401,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -91441,6 +108423,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -91460,6 +108445,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -91479,6 +108467,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -91498,6 +108489,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -91517,6 +108511,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -91536,6 +108533,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -91555,6 +108555,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -91574,6 +108577,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -91593,6 +108599,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -91612,6 +108621,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -91631,6 +108643,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -91650,6 +108665,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -91669,6 +108687,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -91688,6 +108709,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -91707,6 +108731,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -91726,6 +108753,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -91745,6 +108775,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -91764,6 +108797,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -91783,6 +108819,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -91802,6 +108841,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -91821,6 +108863,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -91840,6 +108885,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -91859,6 +108907,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -91878,6 +108929,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -91897,6 +108951,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -91916,6 +108973,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -91935,6 +108995,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -91954,6 +109017,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -91973,6 +109039,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -91992,6 +109061,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -92011,6 +109083,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -92030,6 +109105,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -92049,6 +109127,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -92068,6 +109149,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -92087,6 +109171,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -92106,6 +109193,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -92125,6 +109215,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -92144,6 +109237,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -92163,6 +109259,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -92182,6 +109281,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -92201,6 +109303,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -92220,6 +109325,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -92239,6 +109347,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -92258,6 +109369,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -92277,6 +109391,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -92296,6 +109413,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -92315,6 +109435,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -92334,6 +109457,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -92353,6 +109479,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -92372,6 +109501,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -92391,6 +109523,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -92410,6 +109545,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -92429,6 +109567,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -92448,6 +109589,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -92467,6 +109611,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -92486,6 +109633,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -92505,6 +109655,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -92524,6 +109677,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -92543,6 +109699,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -92562,6 +109721,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -92581,6 +109743,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -92600,6 +109765,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -92619,6 +109787,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -92638,6 +109809,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -92657,6 +109831,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -92676,6 +109853,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -92695,6 +109875,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -92714,6 +109897,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -92733,6 +109919,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -92752,6 +109941,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -92771,6 +109963,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -92790,6 +109985,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -92809,6 +110007,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -92828,6 +110029,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -92847,6 +110051,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -92866,6 +110073,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -92885,6 +110095,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -92904,6 +110117,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -92923,6 +110139,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -92942,6 +110161,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -92961,6 +110183,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -92980,6 +110205,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -92999,6 +110227,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -93018,6 +110249,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -93037,6 +110271,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -93056,6 +110293,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -93075,6 +110315,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -93094,6 +110337,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -93113,6 +110359,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -93132,6 +110381,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -93151,6 +110403,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -93170,6 +110425,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -93189,6 +110447,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -93208,6 +110469,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -93227,6 +110491,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -93246,6 +110513,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -93265,6 +110535,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -93284,6 +110557,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -93303,6 +110579,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -93322,6 +110601,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -93341,6 +110623,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -93360,6 +110645,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -93379,6 +110667,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -93398,6 +110689,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -93417,6 +110711,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -93436,6 +110733,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -93455,6 +110755,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -93474,6 +110777,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -93493,6 +110799,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -93512,6 +110821,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -93531,6 +110843,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -93550,6 +110865,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -93569,6 +110887,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -93588,6 +110909,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -93607,6 +110931,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -93626,6 +110953,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -93645,6 +110975,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -93664,6 +110997,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -93683,6 +111019,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -93702,6 +111041,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -93721,6 +111063,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -93740,6 +111085,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -93759,6 +111107,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -93778,6 +111129,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -93797,6 +111151,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -93816,6 +111173,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -93835,6 +111195,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -93854,6 +111217,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -93873,6 +111239,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -93892,6 +111261,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -93911,6 +111283,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -93930,6 +111305,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -93949,6 +111327,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -93968,6 +111349,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -93987,6 +111371,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -94006,6 +111393,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -94025,6 +111415,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -94044,6 +111437,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -94063,6 +111459,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -94082,6 +111481,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -94101,6 +111503,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -94120,6 +111525,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -94139,6 +111547,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -94158,6 +111569,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -94177,6 +111591,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -94196,6 +111613,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -94215,6 +111635,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -94234,6 +111657,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -94253,6 +111679,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -94272,6 +111701,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -94291,6 +111723,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -94310,6 +111745,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -94329,6 +111767,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -94348,6 +111789,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -94367,6 +111811,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -94386,6 +111833,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -94405,6 +111855,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -94424,6 +111877,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -94443,6 +111899,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -94462,6 +111921,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -94481,6 +111943,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -94500,6 +111965,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -94519,6 +111987,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -94538,6 +112009,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -94557,6 +112031,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -94576,6 +112053,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -94595,6 +112075,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -94614,6 +112097,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -94633,6 +112119,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -94652,6 +112141,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -94671,6 +112163,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -94690,6 +112185,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -94709,6 +112207,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -94728,6 +112229,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -94747,6 +112251,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -94766,6 +112273,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -94785,6 +112295,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -94804,6 +112317,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -94823,6 +112339,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -94842,6 +112361,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -94861,6 +112383,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -94880,6 +112405,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -94899,6 +112427,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -94918,6 +112449,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -94937,6 +112471,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -94956,6 +112493,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -94975,6 +112515,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -94994,6 +112537,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -95013,6 +112559,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -95032,6 +112581,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -95051,6 +112603,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -95070,6 +112625,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -95089,6 +112647,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -95108,6 +112669,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -95127,6 +112691,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -95146,6 +112713,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -95165,6 +112735,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -95184,6 +112757,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -95203,6 +112779,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -95222,6 +112801,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -95241,6 +112823,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -95260,6 +112845,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -95279,6 +112867,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -95298,6 +112889,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -95317,6 +112911,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -95336,6 +112933,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -95355,6 +112955,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -95374,6 +112977,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "server_fuzzer_one_entry", 
@@ -95384,7 +112990,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/02d156dc5e6f2c11c90c2e06fcee04adf036a342"
+      "test/core/client_channel/uri_corpus/02d156dc5e6f2c11c90c2e06fcee04adf036a342"
     ], 
     "ci_platforms": [
       "linux"
@@ -95393,6 +112999,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "uri_fuzzer_test_one_entry", 
@@ -95403,7 +113012,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/042dc4512fa3d391c5170cf3aa61e6a638f84342"
+      "test/core/client_channel/uri_corpus/042dc4512fa3d391c5170cf3aa61e6a638f84342"
     ], 
     "ci_platforms": [
       "linux"
@@ -95412,6 +113021,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "uri_fuzzer_test_one_entry", 
@@ -95422,7 +113034,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/0e9bbe975f2027e8c39c89f85f667530368e7d11"
+      "test/core/client_channel/uri_corpus/0e9bbe975f2027e8c39c89f85f667530368e7d11"
     ], 
     "ci_platforms": [
       "linux"
@@ -95431,6 +113043,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "uri_fuzzer_test_one_entry", 
@@ -95441,7 +113056,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/1155aa6ea7ef262a81a63692513ea395f84dad6f"
+      "test/core/client_channel/uri_corpus/1155aa6ea7ef262a81a63692513ea395f84dad6f"
     ], 
     "ci_platforms": [
       "linux"
@@ -95450,6 +113065,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "uri_fuzzer_test_one_entry", 
@@ -95460,7 +113078,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/13856a5569ffd085a4d5c07af5f8e9310835a118"
+      "test/core/client_channel/uri_corpus/13856a5569ffd085a4d5c07af5f8e9310835a118"
     ], 
     "ci_platforms": [
       "linux"
@@ -95469,6 +113087,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "uri_fuzzer_test_one_entry", 
@@ -95479,7 +113100,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/14b57bcbf1e17b1db1de491ef2ba3768f704b7dc"
+      "test/core/client_channel/uri_corpus/14b57bcbf1e17b1db1de491ef2ba3768f704b7dc"
     ], 
     "ci_platforms": [
       "linux"
@@ -95488,6 +113109,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "uri_fuzzer_test_one_entry", 
@@ -95498,7 +113122,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/1794310671a060eead6e5ee66ac978a18ec7e84f"
+      "test/core/client_channel/uri_corpus/1794310671a060eead6e5ee66ac978a18ec7e84f"
     ], 
     "ci_platforms": [
       "linux"
@@ -95507,6 +113131,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "uri_fuzzer_test_one_entry", 
@@ -95517,7 +113144,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/1d30b2a79afbaf2828ff42b9a9647e942ba1ab80"
+      "test/core/client_channel/uri_corpus/1d30b2a79afbaf2828ff42b9a9647e942ba1ab80"
     ], 
     "ci_platforms": [
       "linux"
@@ -95526,6 +113153,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "uri_fuzzer_test_one_entry", 
@@ -95536,7 +113166,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/1fcf5d9c333b70596cf5ba04d1f7affdf445b971"
+      "test/core/client_channel/uri_corpus/1fcf5d9c333b70596cf5ba04d1f7affdf445b971"
     ], 
     "ci_platforms": [
       "linux"
@@ -95545,6 +113175,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "uri_fuzzer_test_one_entry", 
@@ -95555,7 +113188,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/23162c8a8936e20b195404c21337ee734d02a6bc"
+      "test/core/client_channel/uri_corpus/23162c8a8936e20b195404c21337ee734d02a6bc"
     ], 
     "ci_platforms": [
       "linux"
@@ -95564,6 +113197,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "uri_fuzzer_test_one_entry", 
@@ -95574,7 +113210,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/23f3198b815ca60bdadcaae682b9f965dda387f1"
+      "test/core/client_channel/uri_corpus/23f3198b815ca60bdadcaae682b9f965dda387f1"
     ], 
     "ci_platforms": [
       "linux"
@@ -95583,6 +113219,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "uri_fuzzer_test_one_entry", 
@@ -95593,7 +113232,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/2ef3893b43f1f60b77b59ce06a6bce9815d78eaf"
+      "test/core/client_channel/uri_corpus/2ef3893b43f1f60b77b59ce06a6bce9815d78eaf"
     ], 
     "ci_platforms": [
       "linux"
@@ -95602,6 +113241,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "uri_fuzzer_test_one_entry", 
@@ -95612,7 +113254,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/356c3c129e203b5c74550b4209764d74b9caefce"
+      "test/core/client_channel/uri_corpus/356c3c129e203b5c74550b4209764d74b9caefce"
     ], 
     "ci_platforms": [
       "linux"
@@ -95621,6 +113263,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "uri_fuzzer_test_one_entry", 
@@ -95631,7 +113276,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/396568fc41c8ccb31ec925b4a862e4d29ead1327"
+      "test/core/client_channel/uri_corpus/396568fc41c8ccb31ec925b4a862e4d29ead1327"
     ], 
     "ci_platforms": [
       "linux"
@@ -95640,6 +113285,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "uri_fuzzer_test_one_entry", 
@@ -95650,7 +113298,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/3b1e7526a99918006b87e499d2beb6c4ac9c3c0c"
+      "test/core/client_channel/uri_corpus/3b1e7526a99918006b87e499d2beb6c4ac9c3c0c"
     ], 
     "ci_platforms": [
       "linux"
@@ -95659,6 +113307,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "uri_fuzzer_test_one_entry", 
@@ -95669,7 +113320,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/3b58860f3451d3e7aad99690a8d39782ca5116fc"
+      "test/core/client_channel/uri_corpus/3b58860f3451d3e7aad99690a8d39782ca5116fc"
     ], 
     "ci_platforms": [
       "linux"
@@ -95678,6 +113329,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "uri_fuzzer_test_one_entry", 
@@ -95688,7 +113342,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/41963cc10752f70c3af7e3d85868efb097a0ea9c"
+      "test/core/client_channel/uri_corpus/41963cc10752f70c3af7e3d85868efb097a0ea9c"
     ], 
     "ci_platforms": [
       "linux"
@@ -95697,6 +113351,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "uri_fuzzer_test_one_entry", 
@@ -95707,7 +113364,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/47b5228404451fc9d4071fa69192514bb4ce33c1"
+      "test/core/client_channel/uri_corpus/47b5228404451fc9d4071fa69192514bb4ce33c1"
     ], 
     "ci_platforms": [
       "linux"
@@ -95716,6 +113373,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "uri_fuzzer_test_one_entry", 
@@ -95726,7 +113386,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/56a2da4b2e6fb795243901023ed8d0aa083d1aab"
+      "test/core/client_channel/uri_corpus/56a2da4b2e6fb795243901023ed8d0aa083d1aab"
     ], 
     "ci_platforms": [
       "linux"
@@ -95735,6 +113395,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "uri_fuzzer_test_one_entry", 
@@ -95745,7 +113408,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/574c2f13858a9a6d724654bd913ede9ae3abf822"
+      "test/core/client_channel/uri_corpus/574c2f13858a9a6d724654bd913ede9ae3abf822"
     ], 
     "ci_platforms": [
       "linux"
@@ -95754,6 +113417,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "uri_fuzzer_test_one_entry", 
@@ -95764,7 +113430,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/582f789c19033a152094cbf8565f14154a778ddb"
+      "test/core/client_channel/uri_corpus/582f789c19033a152094cbf8565f14154a778ddb"
     ], 
     "ci_platforms": [
       "linux"
@@ -95773,6 +113439,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "uri_fuzzer_test_one_entry", 
@@ -95783,7 +113452,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/636c5606fc23713a1bae88c8899c0541cfad4fd8"
+      "test/core/client_channel/uri_corpus/636c5606fc23713a1bae88c8899c0541cfad4fd8"
     ], 
     "ci_platforms": [
       "linux"
@@ -95792,6 +113461,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "uri_fuzzer_test_one_entry", 
@@ -95802,7 +113474,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/63fe493b270b17426d77a27cbf3abac5b2c2794a"
+      "test/core/client_channel/uri_corpus/63fe493b270b17426d77a27cbf3abac5b2c2794a"
     ], 
     "ci_platforms": [
       "linux"
@@ -95811,6 +113483,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "uri_fuzzer_test_one_entry", 
@@ -95821,7 +113496,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/655300a902b62662296a8e46bfb04fbcb07182cb"
+      "test/core/client_channel/uri_corpus/655300a902b62662296a8e46bfb04fbcb07182cb"
     ], 
     "ci_platforms": [
       "linux"
@@ -95830,6 +113505,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "uri_fuzzer_test_one_entry", 
@@ -95840,7 +113518,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/6ae3acd9d8507b61bf235748026080a4138dba58"
+      "test/core/client_channel/uri_corpus/6ae3acd9d8507b61bf235748026080a4138dba58"
     ], 
     "ci_platforms": [
       "linux"
@@ -95849,6 +113527,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "uri_fuzzer_test_one_entry", 
@@ -95859,7 +113540,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/6b70979a70a038ff6607d6cf85485ee95baf58e6"
+      "test/core/client_channel/uri_corpus/6b70979a70a038ff6607d6cf85485ee95baf58e6"
     ], 
     "ci_platforms": [
       "linux"
@@ -95868,6 +113549,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "uri_fuzzer_test_one_entry", 
@@ -95878,7 +113562,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/7314ab3545a7535a26e0e8aad67caea5534d68b1"
+      "test/core/client_channel/uri_corpus/7314ab3545a7535a26e0e8aad67caea5534d68b1"
     ], 
     "ci_platforms": [
       "linux"
@@ -95887,6 +113571,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "uri_fuzzer_test_one_entry", 
@@ -95897,7 +113584,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/7ff4d8b8d1ffd0d42c48bbb91e5856a9ec31aecb"
+      "test/core/client_channel/uri_corpus/7ff4d8b8d1ffd0d42c48bbb91e5856a9ec31aecb"
     ], 
     "ci_platforms": [
       "linux"
@@ -95906,6 +113593,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "uri_fuzzer_test_one_entry", 
@@ -95916,7 +113606,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/87daa131e0973b77a232a870ed749ef29cf58e6d"
+      "test/core/client_channel/uri_corpus/87daa131e0973b77a232a870ed749ef29cf58e6d"
     ], 
     "ci_platforms": [
       "linux"
@@ -95925,6 +113615,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "uri_fuzzer_test_one_entry", 
@@ -95935,7 +113628,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/884dcaee2908ffe5f12b65b8eba81016099c4266"
+      "test/core/client_channel/uri_corpus/884dcaee2908ffe5f12b65b8eba81016099c4266"
     ], 
     "ci_platforms": [
       "linux"
@@ -95944,6 +113637,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "uri_fuzzer_test_one_entry", 
@@ -95954,7 +113650,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/8d7e944fd5d0ede94097fcc98b47b09a3f9c76cb"
+      "test/core/client_channel/uri_corpus/8d7e944fd5d0ede94097fcc98b47b09a3f9c76cb"
     ], 
     "ci_platforms": [
       "linux"
@@ -95963,6 +113659,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "uri_fuzzer_test_one_entry", 
@@ -95973,7 +113672,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/9671149af0b444f59bbdf71340d3441dadd8a7b4"
+      "test/core/client_channel/uri_corpus/9671149af0b444f59bbdf71340d3441dadd8a7b4"
     ], 
     "ci_platforms": [
       "linux"
@@ -95982,6 +113681,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "uri_fuzzer_test_one_entry", 
@@ -95992,7 +113694,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/96c8d266b7dc037288ef305c996608270f72e7fb"
+      "test/core/client_channel/uri_corpus/96c8d266b7dc037288ef305c996608270f72e7fb"
     ], 
     "ci_platforms": [
       "linux"
@@ -96001,6 +113703,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "uri_fuzzer_test_one_entry", 
@@ -96011,7 +113716,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/975536c71ade4800415a7e9c2f1b45c35a6d5ea8"
+      "test/core/client_channel/uri_corpus/975536c71ade4800415a7e9c2f1b45c35a6d5ea8"
     ], 
     "ci_platforms": [
       "linux"
@@ -96020,6 +113725,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "uri_fuzzer_test_one_entry", 
@@ -96030,7 +113738,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/99750aa67d30beaea8af565c829d4999aa8cb91b"
+      "test/core/client_channel/uri_corpus/99750aa67d30beaea8af565c829d4999aa8cb91b"
     ], 
     "ci_platforms": [
       "linux"
@@ -96039,6 +113747,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "uri_fuzzer_test_one_entry", 
@@ -96049,7 +113760,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/a1140f3f8b5cffc1010221b9a4084a25fb75c1f6"
+      "test/core/client_channel/uri_corpus/a1140f3f8b5cffc1010221b9a4084a25fb75c1f6"
     ], 
     "ci_platforms": [
       "linux"
@@ -96058,6 +113769,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "uri_fuzzer_test_one_entry", 
@@ -96068,7 +113782,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/a1f0f9b75bb354eb063d7cba4fcfa2d0b88d63de"
+      "test/core/client_channel/uri_corpus/a1f0f9b75bb354eb063d7cba4fcfa2d0b88d63de"
     ], 
     "ci_platforms": [
       "linux"
@@ -96077,6 +113791,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "uri_fuzzer_test_one_entry", 
@@ -96087,7 +113804,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/a296eb3d1d436ed7df7195b10aa3c4de3896f98d"
+      "test/core/client_channel/uri_corpus/a296eb3d1d436ed7df7195b10aa3c4de3896f98d"
     ], 
     "ci_platforms": [
       "linux"
@@ -96096,6 +113813,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "uri_fuzzer_test_one_entry", 
@@ -96106,7 +113826,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/a8b8e66050b424f1b8c07d46f868199fb7f60e38"
+      "test/core/client_channel/uri_corpus/a8b8e66050b424f1b8c07d46f868199fb7f60e38"
     ], 
     "ci_platforms": [
       "linux"
@@ -96115,6 +113835,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "uri_fuzzer_test_one_entry", 
@@ -96125,7 +113848,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/aba1472880406a318ce207ee79815b7acf087757"
+      "test/core/client_channel/uri_corpus/aba1472880406a318ce207ee79815b7acf087757"
     ], 
     "ci_platforms": [
       "linux"
@@ -96134,6 +113857,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "uri_fuzzer_test_one_entry", 
@@ -96144,7 +113870,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/af55baf8c8855e563befdf1eefbcbd46c5ddb8d2"
+      "test/core/client_channel/uri_corpus/af55baf8c8855e563befdf1eefbcbd46c5ddb8d2"
     ], 
     "ci_platforms": [
       "linux"
@@ -96153,6 +113879,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "uri_fuzzer_test_one_entry", 
@@ -96163,7 +113892,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/b3c0bf66c2bf5d24ef1daf4cc5a9d6d5bd0e8bfd"
+      "test/core/client_channel/uri_corpus/b3c0bf66c2bf5d24ef1daf4cc5a9d6d5bd0e8bfd"
     ], 
     "ci_platforms": [
       "linux"
@@ -96172,6 +113901,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "uri_fuzzer_test_one_entry", 
@@ -96182,7 +113914,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/c28a47409cf5d95bb372238d01e73d8b831408e4"
+      "test/core/client_channel/uri_corpus/c28a47409cf5d95bb372238d01e73d8b831408e4"
     ], 
     "ci_platforms": [
       "linux"
@@ -96191,6 +113923,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "uri_fuzzer_test_one_entry", 
@@ -96201,7 +113936,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/c3ef1d41888063a08700c3add1e4465aabcf8807"
+      "test/core/client_channel/uri_corpus/c3ef1d41888063a08700c3add1e4465aabcf8807"
     ], 
     "ci_platforms": [
       "linux"
@@ -96210,6 +113945,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "uri_fuzzer_test_one_entry", 
@@ -96220,7 +113958,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/c550a76af21f9b9cc92a386d5c8998b26f8f2e4d"
+      "test/core/client_channel/uri_corpus/c550a76af21f9b9cc92a386d5c8998b26f8f2e4d"
     ], 
     "ci_platforms": [
       "linux"
@@ -96229,6 +113967,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "uri_fuzzer_test_one_entry", 
@@ -96239,7 +113980,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/c79721406d0ab80495f186fd88e37fba98637ae9"
+      "test/core/client_channel/uri_corpus/c79721406d0ab80495f186fd88e37fba98637ae9"
     ], 
     "ci_platforms": [
       "linux"
@@ -96248,6 +113989,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "uri_fuzzer_test_one_entry", 
@@ -96258,7 +114002,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/ceb4e2264ba7a8d5be47d276b37ec09489e00245"
+      "test/core/client_channel/uri_corpus/ceb4e2264ba7a8d5be47d276b37ec09489e00245"
     ], 
     "ci_platforms": [
       "linux"
@@ -96267,6 +114011,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "uri_fuzzer_test_one_entry", 
@@ -96277,7 +114024,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/cf4395958f5bfb46fd6f535a39657d016c75114c"
+      "test/core/client_channel/uri_corpus/cf4395958f5bfb46fd6f535a39657d016c75114c"
     ], 
     "ci_platforms": [
       "linux"
@@ -96286,6 +114033,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "uri_fuzzer_test_one_entry", 
@@ -96296,7 +114046,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/d46668372b7e20154a89409a7430a28e642afdca"
+      "test/core/client_channel/uri_corpus/d46668372b7e20154a89409a7430a28e642afdca"
     ], 
     "ci_platforms": [
       "linux"
@@ -96305,6 +114055,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "uri_fuzzer_test_one_entry", 
@@ -96315,7 +114068,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/d6fe7412a0a1d1c733160246f3fa425f4f97682a"
+      "test/core/client_channel/uri_corpus/d6fe7412a0a1d1c733160246f3fa425f4f97682a"
     ], 
     "ci_platforms": [
       "linux"
@@ -96324,6 +114077,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "uri_fuzzer_test_one_entry", 
@@ -96334,7 +114090,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/dns.txt"
+      "test/core/client_channel/uri_corpus/dns.txt"
     ], 
     "ci_platforms": [
       "linux"
@@ -96343,6 +114099,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "uri_fuzzer_test_one_entry", 
@@ -96353,7 +114112,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/e241f29957b0e30ec11aaaf91b2339f7015fa5fd"
+      "test/core/client_channel/uri_corpus/e241f29957b0e30ec11aaaf91b2339f7015fa5fd"
     ], 
     "ci_platforms": [
       "linux"
@@ -96362,6 +114121,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "uri_fuzzer_test_one_entry", 
@@ -96372,7 +114134,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/ea02d9fea9bad5b89cf353a0169238f584177e71"
+      "test/core/client_channel/uri_corpus/ea02d9fea9bad5b89cf353a0169238f584177e71"
     ], 
     "ci_platforms": [
       "linux"
@@ -96381,6 +114143,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "uri_fuzzer_test_one_entry", 
@@ -96391,7 +114156,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/ec4731dddf94ed3ea92ae4d5a71f145ab6e3f6ee"
+      "test/core/client_channel/uri_corpus/ec4731dddf94ed3ea92ae4d5a71f145ab6e3f6ee"
     ], 
     "ci_platforms": [
       "linux"
@@ -96400,6 +114165,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "uri_fuzzer_test_one_entry", 
@@ -96410,7 +114178,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/ed2f78646f19fc47dd85ff0877c232b71913ece2"
+      "test/core/client_channel/uri_corpus/ed2f78646f19fc47dd85ff0877c232b71913ece2"
     ], 
     "ci_platforms": [
       "linux"
@@ -96419,6 +114187,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "uri_fuzzer_test_one_entry", 
@@ -96429,7 +114200,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/f6889f4a6350fea1596a3adea5cdac02bd5d1ff3"
+      "test/core/client_channel/uri_corpus/f6889f4a6350fea1596a3adea5cdac02bd5d1ff3"
     ], 
     "ci_platforms": [
       "linux"
@@ -96438,6 +114209,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "uri_fuzzer_test_one_entry", 
@@ -96448,7 +114222,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/f6f3bd030f0d321efe7c51ca3f057de23509af67"
+      "test/core/client_channel/uri_corpus/f6f3bd030f0d321efe7c51ca3f057de23509af67"
     ], 
     "ci_platforms": [
       "linux"
@@ -96457,6 +114231,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "uri_fuzzer_test_one_entry", 
@@ -96467,7 +114244,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/f97598cff03306af3c70400608fec47268b5075d"
+      "test/core/client_channel/uri_corpus/f97598cff03306af3c70400608fec47268b5075d"
     ], 
     "ci_platforms": [
       "linux"
@@ -96476,6 +114253,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "uri_fuzzer_test_one_entry", 
@@ -96486,7 +114266,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/f9e1ec1fc642b575bc9955618b7065747f56b101"
+      "test/core/client_channel/uri_corpus/f9e1ec1fc642b575bc9955618b7065747f56b101"
     ], 
     "ci_platforms": [
       "linux"
@@ -96495,6 +114275,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "uri_fuzzer_test_one_entry", 
@@ -96505,7 +114288,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/fe0630a3aeed2ec6f474f362e4c839478290d5c4"
+      "test/core/client_channel/uri_corpus/fe0630a3aeed2ec6f474f362e4c839478290d5c4"
     ], 
     "ci_platforms": [
       "linux"
@@ -96514,6 +114297,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "uri_fuzzer_test_one_entry", 
@@ -96524,7 +114310,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/ipv4.txt"
+      "test/core/client_channel/uri_corpus/ipv4.txt"
     ], 
     "ci_platforms": [
       "linux"
@@ -96533,6 +114319,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "uri_fuzzer_test_one_entry", 
@@ -96543,7 +114332,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/ipv6.txt"
+      "test/core/client_channel/uri_corpus/ipv6.txt"
     ], 
     "ci_platforms": [
       "linux"
@@ -96552,6 +114341,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "uri_fuzzer_test_one_entry", 
@@ -96562,7 +114354,7 @@
   }, 
   {
     "args": [
-      "test/core/client_config/uri_corpus/unix.txt"
+      "test/core/client_channel/uri_corpus/unix.txt"
     ], 
     "ci_platforms": [
       "linux"
@@ -96571,6 +114363,9 @@
     "exclude_configs": [
       "tsan"
     ], 
+    "exclude_iomgrs": [
+      "uv"
+    ], 
     "flaky": false, 
     "language": "c", 
     "name": "uri_fuzzer_test_one_entry", 
diff --git a/vsprojects/buildtests_c.sln b/vsprojects/buildtests_c.sln
index f8824cc..339b42f 100644
--- a/vsprojects/buildtests_c.sln
+++ b/vsprojects/buildtests_c.sln
@@ -755,6 +755,30 @@
 		{B23D3D1A-9438-4EDA-BEB6-9A0A03D17792} = {B23D3D1A-9438-4EDA-BEB6-9A0A03D17792}
 	EndProjectSection
 EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "h2_fake_resolver_nosec_test", "vcxproj\test/end2end/fixtures\h2_fake_resolver_nosec_test\h2_fake_resolver_nosec_test.vcxproj", "{5C8F9B15-B0D0-54FE-1E54-A53F963D2B2F}"
+	ProjectSection(myProperties) = preProject
+        	lib = "False"
+	EndProjectSection
+	ProjectSection(ProjectDependencies) = postProject
+		{47C2CB41-4E9F-58B6-F606-F6FAED5D00ED} = {47C2CB41-4E9F-58B6-F606-F6FAED5D00ED}
+		{0A7E7F92-FDEA-40F1-A9EC-3BA484F98BBF} = {0A7E7F92-FDEA-40F1-A9EC-3BA484F98BBF}
+		{46CEDFFF-9692-456A-AA24-38B5D6BCF4C5} = {46CEDFFF-9692-456A-AA24-38B5D6BCF4C5}
+		{EAB0A629-17A9-44DB-B5FF-E91A721FE037} = {EAB0A629-17A9-44DB-B5FF-E91A721FE037}
+		{B23D3D1A-9438-4EDA-BEB6-9A0A03D17792} = {B23D3D1A-9438-4EDA-BEB6-9A0A03D17792}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "h2_fake_resolver_test", "vcxproj\test/end2end/fixtures\h2_fake_resolver_test\h2_fake_resolver_test.vcxproj", "{085ACF7D-D7CE-A9F1-576D-1AF901409FA4}"
+	ProjectSection(myProperties) = preProject
+        	lib = "False"
+	EndProjectSection
+	ProjectSection(ProjectDependencies) = postProject
+		{1F1F9084-2A93-B80E-364F-5754894AFAB4} = {1F1F9084-2A93-B80E-364F-5754894AFAB4}
+		{17BCAFC0-5FDC-4C94-AEB9-95F3E220614B} = {17BCAFC0-5FDC-4C94-AEB9-95F3E220614B}
+		{29D16885-7228-4C31-81ED-5F9187C7F2A9} = {29D16885-7228-4C31-81ED-5F9187C7F2A9}
+		{EAB0A629-17A9-44DB-B5FF-E91A721FE037} = {EAB0A629-17A9-44DB-B5FF-E91A721FE037}
+		{B23D3D1A-9438-4EDA-BEB6-9A0A03D17792} = {B23D3D1A-9438-4EDA-BEB6-9A0A03D17792}
+	EndProjectSection
+EndProject
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "h2_fakesec_test", "vcxproj\test/end2end/fixtures\h2_fakesec_test\h2_fakesec_test.vcxproj", "{0E980562-3AA0-91B1-C590-85C9A899BE44}"
 	ProjectSection(myProperties) = preProject
         	lib = "False"
@@ -2730,6 +2754,38 @@
 		{C7E516E9-B80F-4BC1-A617-095FC6E14BC9}.Release-DLL|Win32.Build.0 = Release|Win32
 		{C7E516E9-B80F-4BC1-A617-095FC6E14BC9}.Release-DLL|x64.ActiveCfg = Release|x64
 		{C7E516E9-B80F-4BC1-A617-095FC6E14BC9}.Release-DLL|x64.Build.0 = Release|x64
+		{5C8F9B15-B0D0-54FE-1E54-A53F963D2B2F}.Debug|Win32.ActiveCfg = Debug|Win32
+		{5C8F9B15-B0D0-54FE-1E54-A53F963D2B2F}.Debug|x64.ActiveCfg = Debug|x64
+		{5C8F9B15-B0D0-54FE-1E54-A53F963D2B2F}.Release|Win32.ActiveCfg = Release|Win32
+		{5C8F9B15-B0D0-54FE-1E54-A53F963D2B2F}.Release|x64.ActiveCfg = Release|x64
+		{5C8F9B15-B0D0-54FE-1E54-A53F963D2B2F}.Debug|Win32.Build.0 = Debug|Win32
+		{5C8F9B15-B0D0-54FE-1E54-A53F963D2B2F}.Debug|x64.Build.0 = Debug|x64
+		{5C8F9B15-B0D0-54FE-1E54-A53F963D2B2F}.Release|Win32.Build.0 = Release|Win32
+		{5C8F9B15-B0D0-54FE-1E54-A53F963D2B2F}.Release|x64.Build.0 = Release|x64
+		{5C8F9B15-B0D0-54FE-1E54-A53F963D2B2F}.Debug-DLL|Win32.ActiveCfg = Debug|Win32
+		{5C8F9B15-B0D0-54FE-1E54-A53F963D2B2F}.Debug-DLL|Win32.Build.0 = Debug|Win32
+		{5C8F9B15-B0D0-54FE-1E54-A53F963D2B2F}.Debug-DLL|x64.ActiveCfg = Debug|x64
+		{5C8F9B15-B0D0-54FE-1E54-A53F963D2B2F}.Debug-DLL|x64.Build.0 = Debug|x64
+		{5C8F9B15-B0D0-54FE-1E54-A53F963D2B2F}.Release-DLL|Win32.ActiveCfg = Release|Win32
+		{5C8F9B15-B0D0-54FE-1E54-A53F963D2B2F}.Release-DLL|Win32.Build.0 = Release|Win32
+		{5C8F9B15-B0D0-54FE-1E54-A53F963D2B2F}.Release-DLL|x64.ActiveCfg = Release|x64
+		{5C8F9B15-B0D0-54FE-1E54-A53F963D2B2F}.Release-DLL|x64.Build.0 = Release|x64
+		{085ACF7D-D7CE-A9F1-576D-1AF901409FA4}.Debug|Win32.ActiveCfg = Debug|Win32
+		{085ACF7D-D7CE-A9F1-576D-1AF901409FA4}.Debug|x64.ActiveCfg = Debug|x64
+		{085ACF7D-D7CE-A9F1-576D-1AF901409FA4}.Release|Win32.ActiveCfg = Release|Win32
+		{085ACF7D-D7CE-A9F1-576D-1AF901409FA4}.Release|x64.ActiveCfg = Release|x64
+		{085ACF7D-D7CE-A9F1-576D-1AF901409FA4}.Debug|Win32.Build.0 = Debug|Win32
+		{085ACF7D-D7CE-A9F1-576D-1AF901409FA4}.Debug|x64.Build.0 = Debug|x64
+		{085ACF7D-D7CE-A9F1-576D-1AF901409FA4}.Release|Win32.Build.0 = Release|Win32
+		{085ACF7D-D7CE-A9F1-576D-1AF901409FA4}.Release|x64.Build.0 = Release|x64
+		{085ACF7D-D7CE-A9F1-576D-1AF901409FA4}.Debug-DLL|Win32.ActiveCfg = Debug|Win32
+		{085ACF7D-D7CE-A9F1-576D-1AF901409FA4}.Debug-DLL|Win32.Build.0 = Debug|Win32
+		{085ACF7D-D7CE-A9F1-576D-1AF901409FA4}.Debug-DLL|x64.ActiveCfg = Debug|x64
+		{085ACF7D-D7CE-A9F1-576D-1AF901409FA4}.Debug-DLL|x64.Build.0 = Debug|x64
+		{085ACF7D-D7CE-A9F1-576D-1AF901409FA4}.Release-DLL|Win32.ActiveCfg = Release|Win32
+		{085ACF7D-D7CE-A9F1-576D-1AF901409FA4}.Release-DLL|Win32.Build.0 = Release|Win32
+		{085ACF7D-D7CE-A9F1-576D-1AF901409FA4}.Release-DLL|x64.ActiveCfg = Release|x64
+		{085ACF7D-D7CE-A9F1-576D-1AF901409FA4}.Release-DLL|x64.Build.0 = Release|x64
 		{0E980562-3AA0-91B1-C590-85C9A899BE44}.Debug|Win32.ActiveCfg = Debug|Win32
 		{0E980562-3AA0-91B1-C590-85C9A899BE44}.Debug|x64.ActiveCfg = Debug|x64
 		{0E980562-3AA0-91B1-C590-85C9A899BE44}.Release|Win32.ActiveCfg = Release|Win32
diff --git a/vsprojects/vcxproj/grpc++_test/grpc++_test.vcxproj b/vsprojects/vcxproj/grpc++_test/grpc++_test.vcxproj
new file mode 100644
index 0000000..cd3e406
--- /dev/null
+++ b/vsprojects/vcxproj/grpc++_test/grpc++_test.vcxproj
@@ -0,0 +1,170 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{3D3EAEA9-76C4-0CFE-4718-5A1F6B7F72C8}</ProjectGuid>
+    <IgnoreWarnIntDirInTempDetected>true</IgnoreWarnIntDirInTempDetected>
+    <IntDir>$(SolutionDir)IntDir\$(MSBuildProjectName)\</IntDir>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(VisualStudioVersion)' == '10.0'" Label="Configuration">
+    <PlatformToolset>v100</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(VisualStudioVersion)' == '11.0'" Label="Configuration">
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(VisualStudioVersion)' == '12.0'" Label="Configuration">
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(VisualStudioVersion)' == '14.0'" Label="Configuration">
+    <PlatformToolset>v140</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)'=='Debug'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)'=='Release'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="$(SolutionDir)\..\vsprojects\global.props" />
+    <Import Project="$(SolutionDir)\..\vsprojects\winsock.props" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup Condition="'$(Configuration)'=='Debug'">
+    <TargetName>grpc++_test</TargetName>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)'=='Release'">
+    <TargetName>grpc++_test</TargetName>
+  </PropertyGroup>
+    <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <SDLCheck>true</SDLCheck>
+      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+      <TreatWarningAsError>true</TreatWarningAsError>
+      <DebugInformationFormat Condition="$(Jenkins)">None</DebugInformationFormat>
+      <MinimalRebuild Condition="$(Jenkins)">false</MinimalRebuild>
+    </ClCompile>
+    <Link>
+      <SubSystem>Windows</SubSystem>
+      <GenerateDebugInformation Condition="!$(Jenkins)">true</GenerateDebugInformation>
+      <GenerateDebugInformation Condition="$(Jenkins)">false</GenerateDebugInformation>
+    </Link>
+  </ItemDefinitionGroup>
+
+    <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <SDLCheck>true</SDLCheck>
+      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+      <TreatWarningAsError>true</TreatWarningAsError>
+      <DebugInformationFormat Condition="$(Jenkins)">None</DebugInformationFormat>
+      <MinimalRebuild Condition="$(Jenkins)">false</MinimalRebuild>
+    </ClCompile>
+    <Link>
+      <SubSystem>Windows</SubSystem>
+      <GenerateDebugInformation Condition="!$(Jenkins)">true</GenerateDebugInformation>
+      <GenerateDebugInformation Condition="$(Jenkins)">false</GenerateDebugInformation>
+    </Link>
+  </ItemDefinitionGroup>
+
+    <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>MaxSpeed</Optimization>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <SDLCheck>true</SDLCheck>
+      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+      <TreatWarningAsError>true</TreatWarningAsError>
+      <DebugInformationFormat Condition="$(Jenkins)">None</DebugInformationFormat>
+      <MinimalRebuild Condition="$(Jenkins)">false</MinimalRebuild>
+    </ClCompile>
+    <Link>
+      <SubSystem>Windows</SubSystem>
+      <GenerateDebugInformation Condition="!$(Jenkins)">true</GenerateDebugInformation>
+      <GenerateDebugInformation Condition="$(Jenkins)">false</GenerateDebugInformation>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+    </Link>
+  </ItemDefinitionGroup>
+
+    <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>MaxSpeed</Optimization>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <SDLCheck>true</SDLCheck>
+      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+      <TreatWarningAsError>true</TreatWarningAsError>
+      <DebugInformationFormat Condition="$(Jenkins)">None</DebugInformationFormat>
+      <MinimalRebuild Condition="$(Jenkins)">false</MinimalRebuild>
+    </ClCompile>
+    <Link>
+      <SubSystem>Windows</SubSystem>
+      <GenerateDebugInformation Condition="!$(Jenkins)">true</GenerateDebugInformation>
+      <GenerateDebugInformation Condition="$(Jenkins)">false</GenerateDebugInformation>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+    </Link>
+  </ItemDefinitionGroup>
+
+  <ItemGroup>
+    <ClInclude Include="$(SolutionDir)\..\include\grpc++\test\server_context_test_spouse.h" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="$(SolutionDir)\..\src\cpp\test\server_context_test_spouse.cc">
+    </ClCompile>
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="$(SolutionDir)\..\vsprojects\vcxproj\.\grpc++\grpc++.vcxproj">
+      <Project>{C187A093-A0FE-489D-A40A-6E33DE0F9FEB}</Project>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+  <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
+    <PropertyGroup>
+      <ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
+    </PropertyGroup>
+  </Target>
+</Project>
+
diff --git a/vsprojects/vcxproj/grpc++_test/grpc++_test.vcxproj.filters b/vsprojects/vcxproj/grpc++_test/grpc++_test.vcxproj.filters
new file mode 100644
index 0000000..e1d8fe1
--- /dev/null
+++ b/vsprojects/vcxproj/grpc++_test/grpc++_test.vcxproj.filters
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <ClCompile Include="$(SolutionDir)\..\src\cpp\test\server_context_test_spouse.cc">
+      <Filter>src\cpp\test</Filter>
+    </ClCompile>
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="$(SolutionDir)\..\include\grpc++\test\server_context_test_spouse.h">
+      <Filter>include\grpc++\test</Filter>
+    </ClInclude>
+  </ItemGroup>
+
+  <ItemGroup>
+    <Filter Include="include">
+      <UniqueIdentifier>{418e2be9-9a04-af8a-8878-956543c507a1}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="include\grpc++">
+      <UniqueIdentifier>{bcaf3a2d-e884-bfbd-477b-09634054bcc5}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="include\grpc++\test">
+      <UniqueIdentifier>{3a14b66f-1d31-2d06-e9a1-c6d1199ab04d}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="src">
+      <UniqueIdentifier>{bc08c75b-ee7e-85a0-fb0f-7586bbd33c6f}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="src\cpp">
+      <UniqueIdentifier>{9797a57d-93ac-ff9c-5ac6-fd335777d782}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="src\cpp\test">
+      <UniqueIdentifier>{58d4b4e0-5617-abf4-48a6-f1264d127b27}</UniqueIdentifier>
+    </Filter>
+  </ItemGroup>
+</Project>
+
diff --git a/vsprojects/vcxproj/grpc/grpc.vcxproj b/vsprojects/vcxproj/grpc/grpc.vcxproj
index 965d06d..7870234 100644
--- a/vsprojects/vcxproj/grpc/grpc.vcxproj
+++ b/vsprojects/vcxproj/grpc/grpc.vcxproj
@@ -333,27 +333,34 @@
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\pollset.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\pollset_set.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\pollset_set_windows.h" />
+    <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\pollset_uv.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\pollset_windows.h" />
+    <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\port.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\resolve_address.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\sockaddr.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\sockaddr_posix.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\sockaddr_utils.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\sockaddr_windows.h" />
+    <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\socket_utils.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\socket_utils_posix.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\socket_windows.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_client.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_posix.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_server.h" />
+    <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_uv.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_windows.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\time_averaged_stats.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\timer.h" />
+    <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\timer_generic.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\timer_heap.h" />
+    <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\timer_uv.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\udp_server.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\unix_sockets_posix.h" />
+    <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\wakeup_fd_cv.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\wakeup_fd_pipe.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\wakeup_fd_posix.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\workqueue.h" />
-    <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\workqueue_posix.h" />
+    <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\workqueue_uv.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\workqueue_windows.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\json\json.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\json\json_common.h" />
@@ -372,6 +379,7 @@
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\surface\server.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\transport\byte_stream.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\transport\connectivity_state.h" />
+    <ClInclude Include="$(SolutionDir)\..\src\core\lib\transport\mdstr_hash_table.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\transport\metadata.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\transport\metadata_batch.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\transport\static_metadata.h" />
@@ -423,22 +431,23 @@
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\tsi\ssl_types.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\tsi\transport_security.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\tsi\transport_security_interface.h" />
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\client_channel.h" />
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\client_channel_factory.h" />
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\connector.h" />
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\http_connect_handshaker.h" />
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\initial_connect_string.h" />
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\lb_policy.h" />
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\lb_policy_factory.h" />
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\lb_policy_registry.h" />
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\parse_address.h" />
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\resolver.h" />
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\resolver_factory.h" />
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\resolver_registry.h" />
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\resolver_result.h" />
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\subchannel.h" />
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\subchannel_index.h" />
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\uri_parser.h" />
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\client_channel.h" />
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\client_channel_factory.h" />
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\connector.h" />
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\http_connect_handshaker.h" />
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\initial_connect_string.h" />
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\lb_policy.h" />
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\lb_policy_factory.h" />
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\lb_policy_registry.h" />
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\method_config.h" />
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\parse_address.h" />
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\resolver.h" />
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\resolver_factory.h" />
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\resolver_registry.h" />
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\resolver_result.h" />
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\subchannel.h" />
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\subchannel_index.h" />
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\uri_parser.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\ext\lb_policy\grpclb\grpclb.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\ext\lb_policy\grpclb\load_balancer_api.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\ext\lb_policy\grpclb\proto\grpc\lb\v1\load_balancer.pb.h" />
@@ -503,6 +512,8 @@
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\endpoint_pair_posix.c">
     </ClCompile>
+    <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\endpoint_pair_uv.c">
+    </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\endpoint_pair_windows.c">
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\error.c">
@@ -525,6 +536,8 @@
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\iomgr_posix.c">
     </ClCompile>
+    <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\iomgr_uv.c">
+    </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\iomgr_windows.c">
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\load_file.c">
@@ -533,12 +546,18 @@
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\polling_entity.c">
     </ClCompile>
+    <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\pollset_set_uv.c">
+    </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\pollset_set_windows.c">
     </ClCompile>
+    <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\pollset_uv.c">
+    </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\pollset_windows.c">
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\resolve_address_posix.c">
     </ClCompile>
+    <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\resolve_address_uv.c">
+    </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\resolve_address_windows.c">
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\sockaddr_utils.c">
@@ -549,32 +568,46 @@
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\socket_utils_posix.c">
     </ClCompile>
+    <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\socket_utils_uv.c">
+    </ClCompile>
+    <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\socket_utils_windows.c">
+    </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\socket_windows.c">
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_client_posix.c">
     </ClCompile>
+    <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_client_uv.c">
+    </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_client_windows.c">
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_posix.c">
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_server_posix.c">
     </ClCompile>
+    <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_server_uv.c">
+    </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_server_windows.c">
     </ClCompile>
+    <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_uv.c">
+    </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_windows.c">
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\time_averaged_stats.c">
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\timer.c">
+    <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\timer_generic.c">
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\timer_heap.c">
     </ClCompile>
+    <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\timer_uv.c">
+    </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\udp_server.c">
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\unix_sockets_posix.c">
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\unix_sockets_posix_noop.c">
     </ClCompile>
+    <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\wakeup_fd_cv.c">
+    </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\wakeup_fd_eventfd.c">
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\wakeup_fd_nospecial.c">
@@ -583,7 +616,7 @@
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\wakeup_fd_posix.c">
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\workqueue_posix.c">
+    <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\workqueue_uv.c">
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\workqueue_windows.c">
     </ClCompile>
@@ -635,6 +668,8 @@
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\transport\connectivity_state.c">
     </ClCompile>
+    <ClCompile Include="$(SolutionDir)\..\src\core\lib\transport\mdstr_hash_table.c">
+    </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\transport\metadata.c">
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\transport\metadata_batch.c">
@@ -705,9 +740,7 @@
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\security\credentials\fake\fake_credentials.c">
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\lib\security\credentials\google_default\credentials_posix.c">
-    </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\lib\security\credentials\google_default\credentials_windows.c">
+    <ClCompile Include="$(SolutionDir)\..\src\core\lib\security\credentials\google_default\credentials_generic.c">
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\security\credentials\google_default\google_default_credentials.c">
     </ClCompile>
@@ -751,43 +784,45 @@
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\ext\transport\chttp2\client\secure\secure_channel_create.c">
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\channel_connectivity.c">
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\channel_connectivity.c">
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\client_channel.c">
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\client_channel.c">
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\client_channel_factory.c">
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\client_channel_factory.c">
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\client_config_plugin.c">
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\client_channel_plugin.c">
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\connector.c">
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\connector.c">
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\default_initial_connect_string.c">
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\default_initial_connect_string.c">
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\http_connect_handshaker.c">
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\http_connect_handshaker.c">
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\initial_connect_string.c">
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\initial_connect_string.c">
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\lb_policy.c">
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\lb_policy.c">
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\lb_policy_factory.c">
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\lb_policy_factory.c">
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\lb_policy_registry.c">
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\lb_policy_registry.c">
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\parse_address.c">
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\method_config.c">
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\resolver.c">
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\parse_address.c">
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\resolver_factory.c">
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\resolver.c">
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\resolver_registry.c">
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\resolver_factory.c">
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\resolver_result.c">
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\resolver_registry.c">
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\subchannel.c">
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\resolver_result.c">
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\subchannel_index.c">
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\subchannel.c">
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\uri_parser.c">
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\subchannel_index.c">
+    </ClCompile>
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\uri_parser.c">
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\ext\transport\chttp2\server\insecure\server_chttp2.c">
     </ClCompile>
diff --git a/vsprojects/vcxproj/grpc/grpc.vcxproj.filters b/vsprojects/vcxproj/grpc/grpc.vcxproj.filters
index dddd4ec..760ac31 100644
--- a/vsprojects/vcxproj/grpc/grpc.vcxproj.filters
+++ b/vsprojects/vcxproj/grpc/grpc.vcxproj.filters
@@ -64,6 +64,9 @@
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\endpoint_pair_posix.c">
       <Filter>src\core\lib\iomgr</Filter>
     </ClCompile>
+    <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\endpoint_pair_uv.c">
+      <Filter>src\core\lib\iomgr</Filter>
+    </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\endpoint_pair_windows.c">
       <Filter>src\core\lib\iomgr</Filter>
     </ClCompile>
@@ -97,6 +100,9 @@
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\iomgr_posix.c">
       <Filter>src\core\lib\iomgr</Filter>
     </ClCompile>
+    <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\iomgr_uv.c">
+      <Filter>src\core\lib\iomgr</Filter>
+    </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\iomgr_windows.c">
       <Filter>src\core\lib\iomgr</Filter>
     </ClCompile>
@@ -109,15 +115,24 @@
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\polling_entity.c">
       <Filter>src\core\lib\iomgr</Filter>
     </ClCompile>
+    <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\pollset_set_uv.c">
+      <Filter>src\core\lib\iomgr</Filter>
+    </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\pollset_set_windows.c">
       <Filter>src\core\lib\iomgr</Filter>
     </ClCompile>
+    <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\pollset_uv.c">
+      <Filter>src\core\lib\iomgr</Filter>
+    </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\pollset_windows.c">
       <Filter>src\core\lib\iomgr</Filter>
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\resolve_address_posix.c">
       <Filter>src\core\lib\iomgr</Filter>
     </ClCompile>
+    <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\resolve_address_uv.c">
+      <Filter>src\core\lib\iomgr</Filter>
+    </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\resolve_address_windows.c">
       <Filter>src\core\lib\iomgr</Filter>
     </ClCompile>
@@ -133,12 +148,21 @@
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\socket_utils_posix.c">
       <Filter>src\core\lib\iomgr</Filter>
     </ClCompile>
+    <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\socket_utils_uv.c">
+      <Filter>src\core\lib\iomgr</Filter>
+    </ClCompile>
+    <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\socket_utils_windows.c">
+      <Filter>src\core\lib\iomgr</Filter>
+    </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\socket_windows.c">
       <Filter>src\core\lib\iomgr</Filter>
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_client_posix.c">
       <Filter>src\core\lib\iomgr</Filter>
     </ClCompile>
+    <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_client_uv.c">
+      <Filter>src\core\lib\iomgr</Filter>
+    </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_client_windows.c">
       <Filter>src\core\lib\iomgr</Filter>
     </ClCompile>
@@ -148,21 +172,30 @@
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_server_posix.c">
       <Filter>src\core\lib\iomgr</Filter>
     </ClCompile>
+    <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_server_uv.c">
+      <Filter>src\core\lib\iomgr</Filter>
+    </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_server_windows.c">
       <Filter>src\core\lib\iomgr</Filter>
     </ClCompile>
+    <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_uv.c">
+      <Filter>src\core\lib\iomgr</Filter>
+    </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_windows.c">
       <Filter>src\core\lib\iomgr</Filter>
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\time_averaged_stats.c">
       <Filter>src\core\lib\iomgr</Filter>
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\timer.c">
+    <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\timer_generic.c">
       <Filter>src\core\lib\iomgr</Filter>
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\timer_heap.c">
       <Filter>src\core\lib\iomgr</Filter>
     </ClCompile>
+    <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\timer_uv.c">
+      <Filter>src\core\lib\iomgr</Filter>
+    </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\udp_server.c">
       <Filter>src\core\lib\iomgr</Filter>
     </ClCompile>
@@ -172,6 +205,9 @@
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\unix_sockets_posix_noop.c">
       <Filter>src\core\lib\iomgr</Filter>
     </ClCompile>
+    <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\wakeup_fd_cv.c">
+      <Filter>src\core\lib\iomgr</Filter>
+    </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\wakeup_fd_eventfd.c">
       <Filter>src\core\lib\iomgr</Filter>
     </ClCompile>
@@ -184,7 +220,7 @@
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\wakeup_fd_posix.c">
       <Filter>src\core\lib\iomgr</Filter>
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\workqueue_posix.c">
+    <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\workqueue_uv.c">
       <Filter>src\core\lib\iomgr</Filter>
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\workqueue_windows.c">
@@ -262,6 +298,9 @@
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\transport\connectivity_state.c">
       <Filter>src\core\lib\transport</Filter>
     </ClCompile>
+    <ClCompile Include="$(SolutionDir)\..\src\core\lib\transport\mdstr_hash_table.c">
+      <Filter>src\core\lib\transport</Filter>
+    </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\transport\metadata.c">
       <Filter>src\core\lib\transport</Filter>
     </ClCompile>
@@ -367,10 +406,7 @@
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\security\credentials\fake\fake_credentials.c">
       <Filter>src\core\lib\security\credentials\fake</Filter>
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\lib\security\credentials\google_default\credentials_posix.c">
-      <Filter>src\core\lib\security\credentials\google_default</Filter>
-    </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\lib\security\credentials\google_default\credentials_windows.c">
+    <ClCompile Include="$(SolutionDir)\..\src\core\lib\security\credentials\google_default\credentials_generic.c">
       <Filter>src\core\lib\security\credentials\google_default</Filter>
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\security\credentials\google_default\google_default_credentials.c">
@@ -436,62 +472,65 @@
     <ClCompile Include="$(SolutionDir)\..\src\core\ext\transport\chttp2\client\secure\secure_channel_create.c">
       <Filter>src\core\ext\transport\chttp2\client\secure</Filter>
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\channel_connectivity.c">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\channel_connectivity.c">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\client_channel.c">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\client_channel.c">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\client_channel_factory.c">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\client_channel_factory.c">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\client_config_plugin.c">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\client_channel_plugin.c">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\connector.c">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\connector.c">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\default_initial_connect_string.c">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\default_initial_connect_string.c">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\http_connect_handshaker.c">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\http_connect_handshaker.c">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\initial_connect_string.c">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\initial_connect_string.c">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\lb_policy.c">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\lb_policy.c">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\lb_policy_factory.c">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\lb_policy_factory.c">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\lb_policy_registry.c">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\lb_policy_registry.c">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\parse_address.c">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\method_config.c">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\resolver.c">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\parse_address.c">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\resolver_factory.c">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\resolver.c">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\resolver_registry.c">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\resolver_factory.c">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\resolver_result.c">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\resolver_registry.c">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\subchannel.c">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\resolver_result.c">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\subchannel_index.c">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\subchannel.c">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\uri_parser.c">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\subchannel_index.c">
+      <Filter>src\core\ext\client_channel</Filter>
+    </ClCompile>
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\uri_parser.c">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\ext\transport\chttp2\server\insecure\server_chttp2.c">
       <Filter>src\core\ext\transport\chttp2\server\insecure</Filter>
@@ -782,9 +821,15 @@
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\pollset_set_windows.h">
       <Filter>src\core\lib\iomgr</Filter>
     </ClInclude>
+    <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\pollset_uv.h">
+      <Filter>src\core\lib\iomgr</Filter>
+    </ClInclude>
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\pollset_windows.h">
       <Filter>src\core\lib\iomgr</Filter>
     </ClInclude>
+    <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\port.h">
+      <Filter>src\core\lib\iomgr</Filter>
+    </ClInclude>
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\resolve_address.h">
       <Filter>src\core\lib\iomgr</Filter>
     </ClInclude>
@@ -800,6 +845,9 @@
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\sockaddr_windows.h">
       <Filter>src\core\lib\iomgr</Filter>
     </ClInclude>
+    <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\socket_utils.h">
+      <Filter>src\core\lib\iomgr</Filter>
+    </ClInclude>
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\socket_utils_posix.h">
       <Filter>src\core\lib\iomgr</Filter>
     </ClInclude>
@@ -815,6 +863,9 @@
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_server.h">
       <Filter>src\core\lib\iomgr</Filter>
     </ClInclude>
+    <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_uv.h">
+      <Filter>src\core\lib\iomgr</Filter>
+    </ClInclude>
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_windows.h">
       <Filter>src\core\lib\iomgr</Filter>
     </ClInclude>
@@ -824,15 +875,24 @@
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\timer.h">
       <Filter>src\core\lib\iomgr</Filter>
     </ClInclude>
+    <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\timer_generic.h">
+      <Filter>src\core\lib\iomgr</Filter>
+    </ClInclude>
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\timer_heap.h">
       <Filter>src\core\lib\iomgr</Filter>
     </ClInclude>
+    <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\timer_uv.h">
+      <Filter>src\core\lib\iomgr</Filter>
+    </ClInclude>
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\udp_server.h">
       <Filter>src\core\lib\iomgr</Filter>
     </ClInclude>
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\unix_sockets_posix.h">
       <Filter>src\core\lib\iomgr</Filter>
     </ClInclude>
+    <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\wakeup_fd_cv.h">
+      <Filter>src\core\lib\iomgr</Filter>
+    </ClInclude>
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\wakeup_fd_pipe.h">
       <Filter>src\core\lib\iomgr</Filter>
     </ClInclude>
@@ -842,7 +902,7 @@
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\workqueue.h">
       <Filter>src\core\lib\iomgr</Filter>
     </ClInclude>
-    <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\workqueue_posix.h">
+    <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\workqueue_uv.h">
       <Filter>src\core\lib\iomgr</Filter>
     </ClInclude>
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\workqueue_windows.h">
@@ -899,6 +959,9 @@
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\transport\connectivity_state.h">
       <Filter>src\core\lib\transport</Filter>
     </ClInclude>
+    <ClInclude Include="$(SolutionDir)\..\src\core\lib\transport\mdstr_hash_table.h">
+      <Filter>src\core\lib\transport</Filter>
+    </ClInclude>
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\transport\metadata.h">
       <Filter>src\core\lib\transport</Filter>
     </ClInclude>
@@ -1052,53 +1115,56 @@
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\tsi\transport_security_interface.h">
       <Filter>src\core\lib\tsi</Filter>
     </ClInclude>
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\client_channel.h">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\client_channel.h">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClInclude>
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\client_channel_factory.h">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\client_channel_factory.h">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClInclude>
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\connector.h">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\connector.h">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClInclude>
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\http_connect_handshaker.h">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\http_connect_handshaker.h">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClInclude>
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\initial_connect_string.h">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\initial_connect_string.h">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClInclude>
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\lb_policy.h">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\lb_policy.h">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClInclude>
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\lb_policy_factory.h">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\lb_policy_factory.h">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClInclude>
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\lb_policy_registry.h">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\lb_policy_registry.h">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClInclude>
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\parse_address.h">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\method_config.h">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClInclude>
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\resolver.h">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\parse_address.h">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClInclude>
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\resolver_factory.h">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\resolver.h">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClInclude>
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\resolver_registry.h">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\resolver_factory.h">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClInclude>
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\resolver_result.h">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\resolver_registry.h">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClInclude>
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\subchannel.h">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\resolver_result.h">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClInclude>
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\subchannel_index.h">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\subchannel.h">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClInclude>
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\uri_parser.h">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\subchannel_index.h">
+      <Filter>src\core\ext\client_channel</Filter>
+    </ClInclude>
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\uri_parser.h">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClInclude>
     <ClInclude Include="$(SolutionDir)\..\src\core\ext\lb_policy\grpclb\grpclb.h">
       <Filter>src\core\ext\lb_policy\grpclb</Filter>
@@ -1190,8 +1256,8 @@
     <Filter Include="src\core\ext\census\gen">
       <UniqueIdentifier>{4a14dd37-5868-c656-7333-fa80574cbb07}</UniqueIdentifier>
     </Filter>
-    <Filter Include="src\core\ext\client_config">
-      <UniqueIdentifier>{003725f8-37fc-80b5-deba-baae32caf915}</UniqueIdentifier>
+    <Filter Include="src\core\ext\client_channel">
+      <UniqueIdentifier>{36eee53a-cd19-738a-c387-20c44a2bfd07}</UniqueIdentifier>
     </Filter>
     <Filter Include="src\core\ext\lb_policy">
       <UniqueIdentifier>{030f00ff-6c54-76c8-12df-37e3008335d1}</UniqueIdentifier>
diff --git a/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj b/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj
index b724c21..8eb4292 100644
--- a/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj
+++ b/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj
@@ -226,27 +226,34 @@
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\pollset.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\pollset_set.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\pollset_set_windows.h" />
+    <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\pollset_uv.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\pollset_windows.h" />
+    <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\port.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\resolve_address.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\sockaddr.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\sockaddr_posix.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\sockaddr_utils.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\sockaddr_windows.h" />
+    <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\socket_utils.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\socket_utils_posix.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\socket_windows.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_client.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_posix.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_server.h" />
+    <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_uv.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_windows.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\time_averaged_stats.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\timer.h" />
+    <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\timer_generic.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\timer_heap.h" />
+    <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\timer_uv.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\udp_server.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\unix_sockets_posix.h" />
+    <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\wakeup_fd_cv.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\wakeup_fd_pipe.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\wakeup_fd_posix.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\workqueue.h" />
-    <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\workqueue_posix.h" />
+    <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\workqueue_uv.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\workqueue_windows.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\json\json.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\json\json_common.h" />
@@ -265,6 +272,7 @@
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\surface\server.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\transport\byte_stream.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\transport\connectivity_state.h" />
+    <ClInclude Include="$(SolutionDir)\..\src\core\lib\transport\mdstr_hash_table.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\transport\metadata.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\transport\metadata_batch.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\transport\static_metadata.h" />
@@ -307,6 +315,8 @@
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\test\core\util\port_server_client.c">
     </ClCompile>
+    <ClCompile Include="$(SolutionDir)\..\test\core\util\port_uv.c">
+    </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\test\core\util\port_windows.c">
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\test\core\util\slice_splitter.c">
@@ -351,6 +361,8 @@
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\endpoint_pair_posix.c">
     </ClCompile>
+    <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\endpoint_pair_uv.c">
+    </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\endpoint_pair_windows.c">
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\error.c">
@@ -373,6 +385,8 @@
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\iomgr_posix.c">
     </ClCompile>
+    <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\iomgr_uv.c">
+    </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\iomgr_windows.c">
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\load_file.c">
@@ -381,12 +395,18 @@
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\polling_entity.c">
     </ClCompile>
+    <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\pollset_set_uv.c">
+    </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\pollset_set_windows.c">
     </ClCompile>
+    <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\pollset_uv.c">
+    </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\pollset_windows.c">
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\resolve_address_posix.c">
     </ClCompile>
+    <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\resolve_address_uv.c">
+    </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\resolve_address_windows.c">
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\sockaddr_utils.c">
@@ -397,32 +417,46 @@
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\socket_utils_posix.c">
     </ClCompile>
+    <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\socket_utils_uv.c">
+    </ClCompile>
+    <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\socket_utils_windows.c">
+    </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\socket_windows.c">
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_client_posix.c">
     </ClCompile>
+    <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_client_uv.c">
+    </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_client_windows.c">
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_posix.c">
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_server_posix.c">
     </ClCompile>
+    <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_server_uv.c">
+    </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_server_windows.c">
     </ClCompile>
+    <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_uv.c">
+    </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_windows.c">
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\time_averaged_stats.c">
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\timer.c">
+    <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\timer_generic.c">
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\timer_heap.c">
     </ClCompile>
+    <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\timer_uv.c">
+    </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\udp_server.c">
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\unix_sockets_posix.c">
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\unix_sockets_posix_noop.c">
     </ClCompile>
+    <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\wakeup_fd_cv.c">
+    </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\wakeup_fd_eventfd.c">
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\wakeup_fd_nospecial.c">
@@ -431,7 +465,7 @@
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\wakeup_fd_posix.c">
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\workqueue_posix.c">
+    <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\workqueue_uv.c">
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\workqueue_windows.c">
     </ClCompile>
@@ -483,6 +517,8 @@
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\transport\connectivity_state.c">
     </ClCompile>
+    <ClCompile Include="$(SolutionDir)\..\src\core\lib\transport\mdstr_hash_table.c">
+    </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\transport\metadata.c">
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\transport\metadata_batch.c">
diff --git a/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj.filters b/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj.filters
index 92806fa..90ea7bd 100644
--- a/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj.filters
+++ b/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj.filters
@@ -52,6 +52,9 @@
     <ClCompile Include="$(SolutionDir)\..\test\core\util\port_server_client.c">
       <Filter>test\core\util</Filter>
     </ClCompile>
+    <ClCompile Include="$(SolutionDir)\..\test\core\util\port_uv.c">
+      <Filter>test\core\util</Filter>
+    </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\test\core\util\port_windows.c">
       <Filter>test\core\util</Filter>
     </ClCompile>
@@ -118,6 +121,9 @@
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\endpoint_pair_posix.c">
       <Filter>src\core\lib\iomgr</Filter>
     </ClCompile>
+    <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\endpoint_pair_uv.c">
+      <Filter>src\core\lib\iomgr</Filter>
+    </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\endpoint_pair_windows.c">
       <Filter>src\core\lib\iomgr</Filter>
     </ClCompile>
@@ -151,6 +157,9 @@
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\iomgr_posix.c">
       <Filter>src\core\lib\iomgr</Filter>
     </ClCompile>
+    <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\iomgr_uv.c">
+      <Filter>src\core\lib\iomgr</Filter>
+    </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\iomgr_windows.c">
       <Filter>src\core\lib\iomgr</Filter>
     </ClCompile>
@@ -163,15 +172,24 @@
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\polling_entity.c">
       <Filter>src\core\lib\iomgr</Filter>
     </ClCompile>
+    <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\pollset_set_uv.c">
+      <Filter>src\core\lib\iomgr</Filter>
+    </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\pollset_set_windows.c">
       <Filter>src\core\lib\iomgr</Filter>
     </ClCompile>
+    <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\pollset_uv.c">
+      <Filter>src\core\lib\iomgr</Filter>
+    </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\pollset_windows.c">
       <Filter>src\core\lib\iomgr</Filter>
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\resolve_address_posix.c">
       <Filter>src\core\lib\iomgr</Filter>
     </ClCompile>
+    <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\resolve_address_uv.c">
+      <Filter>src\core\lib\iomgr</Filter>
+    </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\resolve_address_windows.c">
       <Filter>src\core\lib\iomgr</Filter>
     </ClCompile>
@@ -187,12 +205,21 @@
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\socket_utils_posix.c">
       <Filter>src\core\lib\iomgr</Filter>
     </ClCompile>
+    <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\socket_utils_uv.c">
+      <Filter>src\core\lib\iomgr</Filter>
+    </ClCompile>
+    <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\socket_utils_windows.c">
+      <Filter>src\core\lib\iomgr</Filter>
+    </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\socket_windows.c">
       <Filter>src\core\lib\iomgr</Filter>
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_client_posix.c">
       <Filter>src\core\lib\iomgr</Filter>
     </ClCompile>
+    <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_client_uv.c">
+      <Filter>src\core\lib\iomgr</Filter>
+    </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_client_windows.c">
       <Filter>src\core\lib\iomgr</Filter>
     </ClCompile>
@@ -202,21 +229,30 @@
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_server_posix.c">
       <Filter>src\core\lib\iomgr</Filter>
     </ClCompile>
+    <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_server_uv.c">
+      <Filter>src\core\lib\iomgr</Filter>
+    </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_server_windows.c">
       <Filter>src\core\lib\iomgr</Filter>
     </ClCompile>
+    <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_uv.c">
+      <Filter>src\core\lib\iomgr</Filter>
+    </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_windows.c">
       <Filter>src\core\lib\iomgr</Filter>
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\time_averaged_stats.c">
       <Filter>src\core\lib\iomgr</Filter>
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\timer.c">
+    <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\timer_generic.c">
       <Filter>src\core\lib\iomgr</Filter>
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\timer_heap.c">
       <Filter>src\core\lib\iomgr</Filter>
     </ClCompile>
+    <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\timer_uv.c">
+      <Filter>src\core\lib\iomgr</Filter>
+    </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\udp_server.c">
       <Filter>src\core\lib\iomgr</Filter>
     </ClCompile>
@@ -226,6 +262,9 @@
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\unix_sockets_posix_noop.c">
       <Filter>src\core\lib\iomgr</Filter>
     </ClCompile>
+    <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\wakeup_fd_cv.c">
+      <Filter>src\core\lib\iomgr</Filter>
+    </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\wakeup_fd_eventfd.c">
       <Filter>src\core\lib\iomgr</Filter>
     </ClCompile>
@@ -238,7 +277,7 @@
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\wakeup_fd_posix.c">
       <Filter>src\core\lib\iomgr</Filter>
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\workqueue_posix.c">
+    <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\workqueue_uv.c">
       <Filter>src\core\lib\iomgr</Filter>
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\workqueue_windows.c">
@@ -316,6 +355,9 @@
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\transport\connectivity_state.c">
       <Filter>src\core\lib\transport</Filter>
     </ClCompile>
+    <ClCompile Include="$(SolutionDir)\..\src\core\lib\transport\mdstr_hash_table.c">
+      <Filter>src\core\lib\transport</Filter>
+    </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\transport\metadata.c">
       <Filter>src\core\lib\transport</Filter>
     </ClCompile>
@@ -569,9 +611,15 @@
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\pollset_set_windows.h">
       <Filter>src\core\lib\iomgr</Filter>
     </ClInclude>
+    <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\pollset_uv.h">
+      <Filter>src\core\lib\iomgr</Filter>
+    </ClInclude>
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\pollset_windows.h">
       <Filter>src\core\lib\iomgr</Filter>
     </ClInclude>
+    <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\port.h">
+      <Filter>src\core\lib\iomgr</Filter>
+    </ClInclude>
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\resolve_address.h">
       <Filter>src\core\lib\iomgr</Filter>
     </ClInclude>
@@ -587,6 +635,9 @@
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\sockaddr_windows.h">
       <Filter>src\core\lib\iomgr</Filter>
     </ClInclude>
+    <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\socket_utils.h">
+      <Filter>src\core\lib\iomgr</Filter>
+    </ClInclude>
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\socket_utils_posix.h">
       <Filter>src\core\lib\iomgr</Filter>
     </ClInclude>
@@ -602,6 +653,9 @@
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_server.h">
       <Filter>src\core\lib\iomgr</Filter>
     </ClInclude>
+    <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_uv.h">
+      <Filter>src\core\lib\iomgr</Filter>
+    </ClInclude>
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_windows.h">
       <Filter>src\core\lib\iomgr</Filter>
     </ClInclude>
@@ -611,15 +665,24 @@
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\timer.h">
       <Filter>src\core\lib\iomgr</Filter>
     </ClInclude>
+    <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\timer_generic.h">
+      <Filter>src\core\lib\iomgr</Filter>
+    </ClInclude>
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\timer_heap.h">
       <Filter>src\core\lib\iomgr</Filter>
     </ClInclude>
+    <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\timer_uv.h">
+      <Filter>src\core\lib\iomgr</Filter>
+    </ClInclude>
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\udp_server.h">
       <Filter>src\core\lib\iomgr</Filter>
     </ClInclude>
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\unix_sockets_posix.h">
       <Filter>src\core\lib\iomgr</Filter>
     </ClInclude>
+    <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\wakeup_fd_cv.h">
+      <Filter>src\core\lib\iomgr</Filter>
+    </ClInclude>
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\wakeup_fd_pipe.h">
       <Filter>src\core\lib\iomgr</Filter>
     </ClInclude>
@@ -629,7 +692,7 @@
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\workqueue.h">
       <Filter>src\core\lib\iomgr</Filter>
     </ClInclude>
-    <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\workqueue_posix.h">
+    <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\workqueue_uv.h">
       <Filter>src\core\lib\iomgr</Filter>
     </ClInclude>
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\workqueue_windows.h">
@@ -686,6 +749,9 @@
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\transport\connectivity_state.h">
       <Filter>src\core\lib\transport</Filter>
     </ClInclude>
+    <ClInclude Include="$(SolutionDir)\..\src\core\lib\transport\mdstr_hash_table.h">
+      <Filter>src\core\lib\transport</Filter>
+    </ClInclude>
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\transport\metadata.h">
       <Filter>src\core\lib\transport</Filter>
     </ClInclude>
diff --git a/vsprojects/vcxproj/grpc_test_util_unsecure/grpc_test_util_unsecure.vcxproj b/vsprojects/vcxproj/grpc_test_util_unsecure/grpc_test_util_unsecure.vcxproj
index 7878683..7f3e101 100644
--- a/vsprojects/vcxproj/grpc_test_util_unsecure/grpc_test_util_unsecure.vcxproj
+++ b/vsprojects/vcxproj/grpc_test_util_unsecure/grpc_test_util_unsecure.vcxproj
@@ -186,6 +186,8 @@
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\test\core\util\port_server_client.c">
     </ClCompile>
+    <ClCompile Include="$(SolutionDir)\..\test\core\util\port_uv.c">
+    </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\test\core\util\port_windows.c">
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\test\core\util\slice_splitter.c">
diff --git a/vsprojects/vcxproj/grpc_test_util_unsecure/grpc_test_util_unsecure.vcxproj.filters b/vsprojects/vcxproj/grpc_test_util_unsecure/grpc_test_util_unsecure.vcxproj.filters
index 2b20ab3..8be9f5b 100644
--- a/vsprojects/vcxproj/grpc_test_util_unsecure/grpc_test_util_unsecure.vcxproj.filters
+++ b/vsprojects/vcxproj/grpc_test_util_unsecure/grpc_test_util_unsecure.vcxproj.filters
@@ -37,6 +37,9 @@
     <ClCompile Include="$(SolutionDir)\..\test\core\util\port_server_client.c">
       <Filter>test\core\util</Filter>
     </ClCompile>
+    <ClCompile Include="$(SolutionDir)\..\test\core\util\port_uv.c">
+      <Filter>test\core\util</Filter>
+    </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\test\core\util\port_windows.c">
       <Filter>test\core\util</Filter>
     </ClCompile>
diff --git a/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj b/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj
index b467736..577264d 100644
--- a/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj
+++ b/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj
@@ -323,27 +323,34 @@
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\pollset.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\pollset_set.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\pollset_set_windows.h" />
+    <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\pollset_uv.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\pollset_windows.h" />
+    <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\port.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\resolve_address.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\sockaddr.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\sockaddr_posix.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\sockaddr_utils.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\sockaddr_windows.h" />
+    <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\socket_utils.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\socket_utils_posix.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\socket_windows.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_client.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_posix.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_server.h" />
+    <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_uv.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_windows.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\time_averaged_stats.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\timer.h" />
+    <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\timer_generic.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\timer_heap.h" />
+    <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\timer_uv.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\udp_server.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\unix_sockets_posix.h" />
+    <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\wakeup_fd_cv.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\wakeup_fd_pipe.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\wakeup_fd_posix.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\workqueue.h" />
-    <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\workqueue_posix.h" />
+    <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\workqueue_uv.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\workqueue_windows.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\json\json.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\json\json_common.h" />
@@ -362,6 +369,7 @@
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\surface\server.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\transport\byte_stream.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\transport\connectivity_state.h" />
+    <ClInclude Include="$(SolutionDir)\..\src\core\lib\transport\mdstr_hash_table.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\transport\metadata.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\transport\metadata_batch.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\transport\static_metadata.h" />
@@ -389,22 +397,23 @@
     <ClInclude Include="$(SolutionDir)\..\src\core\ext\transport\chttp2\transport\stream_map.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\ext\transport\chttp2\transport\varint.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\ext\transport\chttp2\alpn\alpn.h" />
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\client_channel.h" />
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\client_channel_factory.h" />
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\connector.h" />
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\http_connect_handshaker.h" />
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\initial_connect_string.h" />
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\lb_policy.h" />
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\lb_policy_factory.h" />
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\lb_policy_registry.h" />
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\parse_address.h" />
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\resolver.h" />
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\resolver_factory.h" />
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\resolver_registry.h" />
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\resolver_result.h" />
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\subchannel.h" />
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\subchannel_index.h" />
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\uri_parser.h" />
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\client_channel.h" />
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\client_channel_factory.h" />
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\connector.h" />
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\http_connect_handshaker.h" />
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\initial_connect_string.h" />
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\lb_policy.h" />
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\lb_policy_factory.h" />
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\lb_policy_registry.h" />
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\method_config.h" />
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\parse_address.h" />
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\resolver.h" />
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\resolver_factory.h" />
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\resolver_registry.h" />
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\resolver_result.h" />
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\subchannel.h" />
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\subchannel_index.h" />
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\uri_parser.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\ext\load_reporting\load_reporting.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\ext\load_reporting\load_reporting_filter.h" />
     <ClInclude Include="$(SolutionDir)\..\src\core\ext\lb_policy\grpclb\grpclb.h" />
@@ -471,6 +480,8 @@
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\endpoint_pair_posix.c">
     </ClCompile>
+    <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\endpoint_pair_uv.c">
+    </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\endpoint_pair_windows.c">
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\error.c">
@@ -493,6 +504,8 @@
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\iomgr_posix.c">
     </ClCompile>
+    <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\iomgr_uv.c">
+    </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\iomgr_windows.c">
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\load_file.c">
@@ -501,12 +514,18 @@
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\polling_entity.c">
     </ClCompile>
+    <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\pollset_set_uv.c">
+    </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\pollset_set_windows.c">
     </ClCompile>
+    <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\pollset_uv.c">
+    </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\pollset_windows.c">
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\resolve_address_posix.c">
     </ClCompile>
+    <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\resolve_address_uv.c">
+    </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\resolve_address_windows.c">
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\sockaddr_utils.c">
@@ -517,32 +536,46 @@
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\socket_utils_posix.c">
     </ClCompile>
+    <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\socket_utils_uv.c">
+    </ClCompile>
+    <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\socket_utils_windows.c">
+    </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\socket_windows.c">
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_client_posix.c">
     </ClCompile>
+    <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_client_uv.c">
+    </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_client_windows.c">
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_posix.c">
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_server_posix.c">
     </ClCompile>
+    <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_server_uv.c">
+    </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_server_windows.c">
     </ClCompile>
+    <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_uv.c">
+    </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_windows.c">
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\time_averaged_stats.c">
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\timer.c">
+    <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\timer_generic.c">
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\timer_heap.c">
     </ClCompile>
+    <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\timer_uv.c">
+    </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\udp_server.c">
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\unix_sockets_posix.c">
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\unix_sockets_posix_noop.c">
     </ClCompile>
+    <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\wakeup_fd_cv.c">
+    </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\wakeup_fd_eventfd.c">
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\wakeup_fd_nospecial.c">
@@ -551,7 +584,7 @@
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\wakeup_fd_posix.c">
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\workqueue_posix.c">
+    <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\workqueue_uv.c">
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\workqueue_windows.c">
     </ClCompile>
@@ -603,6 +636,8 @@
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\transport\connectivity_state.c">
     </ClCompile>
+    <ClCompile Include="$(SolutionDir)\..\src\core\lib\transport\mdstr_hash_table.c">
+    </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\transport\metadata.c">
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\transport\metadata_batch.c">
@@ -667,43 +702,45 @@
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\ext\transport\chttp2\client\insecure\channel_create_posix.c">
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\channel_connectivity.c">
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\channel_connectivity.c">
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\client_channel.c">
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\client_channel.c">
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\client_channel_factory.c">
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\client_channel_factory.c">
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\client_config_plugin.c">
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\client_channel_plugin.c">
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\connector.c">
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\connector.c">
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\default_initial_connect_string.c">
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\default_initial_connect_string.c">
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\http_connect_handshaker.c">
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\http_connect_handshaker.c">
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\initial_connect_string.c">
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\initial_connect_string.c">
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\lb_policy.c">
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\lb_policy.c">
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\lb_policy_factory.c">
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\lb_policy_factory.c">
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\lb_policy_registry.c">
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\lb_policy_registry.c">
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\parse_address.c">
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\method_config.c">
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\resolver.c">
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\parse_address.c">
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\resolver_factory.c">
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\resolver.c">
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\resolver_registry.c">
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\resolver_factory.c">
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\resolver_result.c">
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\resolver_registry.c">
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\subchannel.c">
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\resolver_result.c">
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\subchannel_index.c">
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\subchannel.c">
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\uri_parser.c">
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\subchannel_index.c">
+    </ClCompile>
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\uri_parser.c">
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\ext\resolver\dns\native\dns_resolver.c">
     </ClCompile>
diff --git a/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj.filters b/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj.filters
index 6ffc1ea..9b3c694 100644
--- a/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj.filters
+++ b/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj.filters
@@ -67,6 +67,9 @@
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\endpoint_pair_posix.c">
       <Filter>src\core\lib\iomgr</Filter>
     </ClCompile>
+    <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\endpoint_pair_uv.c">
+      <Filter>src\core\lib\iomgr</Filter>
+    </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\endpoint_pair_windows.c">
       <Filter>src\core\lib\iomgr</Filter>
     </ClCompile>
@@ -100,6 +103,9 @@
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\iomgr_posix.c">
       <Filter>src\core\lib\iomgr</Filter>
     </ClCompile>
+    <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\iomgr_uv.c">
+      <Filter>src\core\lib\iomgr</Filter>
+    </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\iomgr_windows.c">
       <Filter>src\core\lib\iomgr</Filter>
     </ClCompile>
@@ -112,15 +118,24 @@
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\polling_entity.c">
       <Filter>src\core\lib\iomgr</Filter>
     </ClCompile>
+    <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\pollset_set_uv.c">
+      <Filter>src\core\lib\iomgr</Filter>
+    </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\pollset_set_windows.c">
       <Filter>src\core\lib\iomgr</Filter>
     </ClCompile>
+    <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\pollset_uv.c">
+      <Filter>src\core\lib\iomgr</Filter>
+    </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\pollset_windows.c">
       <Filter>src\core\lib\iomgr</Filter>
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\resolve_address_posix.c">
       <Filter>src\core\lib\iomgr</Filter>
     </ClCompile>
+    <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\resolve_address_uv.c">
+      <Filter>src\core\lib\iomgr</Filter>
+    </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\resolve_address_windows.c">
       <Filter>src\core\lib\iomgr</Filter>
     </ClCompile>
@@ -136,12 +151,21 @@
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\socket_utils_posix.c">
       <Filter>src\core\lib\iomgr</Filter>
     </ClCompile>
+    <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\socket_utils_uv.c">
+      <Filter>src\core\lib\iomgr</Filter>
+    </ClCompile>
+    <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\socket_utils_windows.c">
+      <Filter>src\core\lib\iomgr</Filter>
+    </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\socket_windows.c">
       <Filter>src\core\lib\iomgr</Filter>
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_client_posix.c">
       <Filter>src\core\lib\iomgr</Filter>
     </ClCompile>
+    <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_client_uv.c">
+      <Filter>src\core\lib\iomgr</Filter>
+    </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_client_windows.c">
       <Filter>src\core\lib\iomgr</Filter>
     </ClCompile>
@@ -151,21 +175,30 @@
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_server_posix.c">
       <Filter>src\core\lib\iomgr</Filter>
     </ClCompile>
+    <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_server_uv.c">
+      <Filter>src\core\lib\iomgr</Filter>
+    </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_server_windows.c">
       <Filter>src\core\lib\iomgr</Filter>
     </ClCompile>
+    <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_uv.c">
+      <Filter>src\core\lib\iomgr</Filter>
+    </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_windows.c">
       <Filter>src\core\lib\iomgr</Filter>
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\time_averaged_stats.c">
       <Filter>src\core\lib\iomgr</Filter>
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\timer.c">
+    <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\timer_generic.c">
       <Filter>src\core\lib\iomgr</Filter>
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\timer_heap.c">
       <Filter>src\core\lib\iomgr</Filter>
     </ClCompile>
+    <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\timer_uv.c">
+      <Filter>src\core\lib\iomgr</Filter>
+    </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\udp_server.c">
       <Filter>src\core\lib\iomgr</Filter>
     </ClCompile>
@@ -175,6 +208,9 @@
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\unix_sockets_posix_noop.c">
       <Filter>src\core\lib\iomgr</Filter>
     </ClCompile>
+    <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\wakeup_fd_cv.c">
+      <Filter>src\core\lib\iomgr</Filter>
+    </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\wakeup_fd_eventfd.c">
       <Filter>src\core\lib\iomgr</Filter>
     </ClCompile>
@@ -187,7 +223,7 @@
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\wakeup_fd_posix.c">
       <Filter>src\core\lib\iomgr</Filter>
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\workqueue_posix.c">
+    <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\workqueue_uv.c">
       <Filter>src\core\lib\iomgr</Filter>
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\workqueue_windows.c">
@@ -265,6 +301,9 @@
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\transport\connectivity_state.c">
       <Filter>src\core\lib\transport</Filter>
     </ClCompile>
+    <ClCompile Include="$(SolutionDir)\..\src\core\lib\transport\mdstr_hash_table.c">
+      <Filter>src\core\lib\transport</Filter>
+    </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\lib\transport\metadata.c">
       <Filter>src\core\lib\transport</Filter>
     </ClCompile>
@@ -361,62 +400,65 @@
     <ClCompile Include="$(SolutionDir)\..\src\core\ext\transport\chttp2\client\insecure\channel_create_posix.c">
       <Filter>src\core\ext\transport\chttp2\client\insecure</Filter>
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\channel_connectivity.c">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\channel_connectivity.c">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\client_channel.c">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\client_channel.c">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\client_channel_factory.c">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\client_channel_factory.c">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\client_config_plugin.c">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\client_channel_plugin.c">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\connector.c">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\connector.c">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\default_initial_connect_string.c">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\default_initial_connect_string.c">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\http_connect_handshaker.c">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\http_connect_handshaker.c">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\initial_connect_string.c">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\initial_connect_string.c">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\lb_policy.c">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\lb_policy.c">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\lb_policy_factory.c">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\lb_policy_factory.c">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\lb_policy_registry.c">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\lb_policy_registry.c">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\parse_address.c">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\method_config.c">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\resolver.c">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\parse_address.c">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\resolver_factory.c">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\resolver.c">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\resolver_registry.c">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\resolver_factory.c">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\resolver_result.c">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\resolver_registry.c">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\subchannel.c">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\resolver_result.c">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\subchannel_index.c">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\subchannel.c">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClCompile>
-    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_config\uri_parser.c">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\subchannel_index.c">
+      <Filter>src\core\ext\client_channel</Filter>
+    </ClCompile>
+    <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\uri_parser.c">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\ext\resolver\dns\native\dns_resolver.c">
       <Filter>src\core\ext\resolver\dns\native</Filter>
@@ -692,9 +734,15 @@
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\pollset_set_windows.h">
       <Filter>src\core\lib\iomgr</Filter>
     </ClInclude>
+    <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\pollset_uv.h">
+      <Filter>src\core\lib\iomgr</Filter>
+    </ClInclude>
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\pollset_windows.h">
       <Filter>src\core\lib\iomgr</Filter>
     </ClInclude>
+    <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\port.h">
+      <Filter>src\core\lib\iomgr</Filter>
+    </ClInclude>
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\resolve_address.h">
       <Filter>src\core\lib\iomgr</Filter>
     </ClInclude>
@@ -710,6 +758,9 @@
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\sockaddr_windows.h">
       <Filter>src\core\lib\iomgr</Filter>
     </ClInclude>
+    <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\socket_utils.h">
+      <Filter>src\core\lib\iomgr</Filter>
+    </ClInclude>
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\socket_utils_posix.h">
       <Filter>src\core\lib\iomgr</Filter>
     </ClInclude>
@@ -725,6 +776,9 @@
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_server.h">
       <Filter>src\core\lib\iomgr</Filter>
     </ClInclude>
+    <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_uv.h">
+      <Filter>src\core\lib\iomgr</Filter>
+    </ClInclude>
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_windows.h">
       <Filter>src\core\lib\iomgr</Filter>
     </ClInclude>
@@ -734,15 +788,24 @@
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\timer.h">
       <Filter>src\core\lib\iomgr</Filter>
     </ClInclude>
+    <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\timer_generic.h">
+      <Filter>src\core\lib\iomgr</Filter>
+    </ClInclude>
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\timer_heap.h">
       <Filter>src\core\lib\iomgr</Filter>
     </ClInclude>
+    <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\timer_uv.h">
+      <Filter>src\core\lib\iomgr</Filter>
+    </ClInclude>
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\udp_server.h">
       <Filter>src\core\lib\iomgr</Filter>
     </ClInclude>
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\unix_sockets_posix.h">
       <Filter>src\core\lib\iomgr</Filter>
     </ClInclude>
+    <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\wakeup_fd_cv.h">
+      <Filter>src\core\lib\iomgr</Filter>
+    </ClInclude>
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\wakeup_fd_pipe.h">
       <Filter>src\core\lib\iomgr</Filter>
     </ClInclude>
@@ -752,7 +815,7 @@
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\workqueue.h">
       <Filter>src\core\lib\iomgr</Filter>
     </ClInclude>
-    <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\workqueue_posix.h">
+    <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\workqueue_uv.h">
       <Filter>src\core\lib\iomgr</Filter>
     </ClInclude>
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\workqueue_windows.h">
@@ -809,6 +872,9 @@
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\transport\connectivity_state.h">
       <Filter>src\core\lib\transport</Filter>
     </ClInclude>
+    <ClInclude Include="$(SolutionDir)\..\src\core\lib\transport\mdstr_hash_table.h">
+      <Filter>src\core\lib\transport</Filter>
+    </ClInclude>
     <ClInclude Include="$(SolutionDir)\..\src\core\lib\transport\metadata.h">
       <Filter>src\core\lib\transport</Filter>
     </ClInclude>
@@ -890,53 +956,56 @@
     <ClInclude Include="$(SolutionDir)\..\src\core\ext\transport\chttp2\alpn\alpn.h">
       <Filter>src\core\ext\transport\chttp2\alpn</Filter>
     </ClInclude>
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\client_channel.h">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\client_channel.h">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClInclude>
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\client_channel_factory.h">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\client_channel_factory.h">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClInclude>
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\connector.h">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\connector.h">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClInclude>
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\http_connect_handshaker.h">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\http_connect_handshaker.h">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClInclude>
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\initial_connect_string.h">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\initial_connect_string.h">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClInclude>
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\lb_policy.h">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\lb_policy.h">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClInclude>
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\lb_policy_factory.h">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\lb_policy_factory.h">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClInclude>
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\lb_policy_registry.h">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\lb_policy_registry.h">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClInclude>
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\parse_address.h">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\method_config.h">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClInclude>
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\resolver.h">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\parse_address.h">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClInclude>
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\resolver_factory.h">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\resolver.h">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClInclude>
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\resolver_registry.h">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\resolver_factory.h">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClInclude>
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\resolver_result.h">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\resolver_registry.h">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClInclude>
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\subchannel.h">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\resolver_result.h">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClInclude>
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\subchannel_index.h">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\subchannel.h">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClInclude>
-    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_config\uri_parser.h">
-      <Filter>src\core\ext\client_config</Filter>
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\subchannel_index.h">
+      <Filter>src\core\ext\client_channel</Filter>
+    </ClInclude>
+    <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\uri_parser.h">
+      <Filter>src\core\ext\client_channel</Filter>
     </ClInclude>
     <ClInclude Include="$(SolutionDir)\..\src\core\ext\load_reporting\load_reporting.h">
       <Filter>src\core\ext\load_reporting</Filter>
@@ -1028,8 +1097,8 @@
     <Filter Include="src\core\ext\census\gen">
       <UniqueIdentifier>{dfe53168-57b0-3ac4-d8ba-07fd958cc8f5}</UniqueIdentifier>
     </Filter>
-    <Filter Include="src\core\ext\client_config">
-      <UniqueIdentifier>{25fa8af3-0a05-987c-741f-fa8ff9d65d51}</UniqueIdentifier>
+    <Filter Include="src\core\ext\client_channel">
+      <UniqueIdentifier>{2edd1aad-34cf-0c66-e03e-b1b2dd81d9a8}</UniqueIdentifier>
     </Filter>
     <Filter Include="src\core\ext\lb_policy">
       <UniqueIdentifier>{a23781d2-27e4-7cb0-12cd-59782ecb21ce}</UniqueIdentifier>
diff --git a/vsprojects/vcxproj/test/dns_resolver_connectivity_test/dns_resolver_connectivity_test.vcxproj b/vsprojects/vcxproj/test/dns_resolver_connectivity_test/dns_resolver_connectivity_test.vcxproj
index 76ac196..e8958bb 100644
--- a/vsprojects/vcxproj/test/dns_resolver_connectivity_test/dns_resolver_connectivity_test.vcxproj
+++ b/vsprojects/vcxproj/test/dns_resolver_connectivity_test/dns_resolver_connectivity_test.vcxproj
@@ -158,7 +158,7 @@
   </ItemDefinitionGroup>
 
   <ItemGroup>
-    <ClCompile Include="$(SolutionDir)\..\test\core\client_config\resolvers\dns_resolver_connectivity_test.c">
+    <ClCompile Include="$(SolutionDir)\..\test\core\client_channel\resolvers\dns_resolver_connectivity_test.c">
     </ClCompile>
   </ItemGroup>
   <ItemGroup>
diff --git a/vsprojects/vcxproj/test/dns_resolver_connectivity_test/dns_resolver_connectivity_test.vcxproj.filters b/vsprojects/vcxproj/test/dns_resolver_connectivity_test/dns_resolver_connectivity_test.vcxproj.filters
index e49318d..eb80b8e 100644
--- a/vsprojects/vcxproj/test/dns_resolver_connectivity_test/dns_resolver_connectivity_test.vcxproj.filters
+++ b/vsprojects/vcxproj/test/dns_resolver_connectivity_test/dns_resolver_connectivity_test.vcxproj.filters
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?>
 <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
   <ItemGroup>
-    <ClCompile Include="$(SolutionDir)\..\test\core\client_config\resolvers\dns_resolver_connectivity_test.c">
-      <Filter>test\core\client_config\resolvers</Filter>
+    <ClCompile Include="$(SolutionDir)\..\test\core\client_channel\resolvers\dns_resolver_connectivity_test.c">
+      <Filter>test\core\client_channel\resolvers</Filter>
     </ClCompile>
   </ItemGroup>
 
@@ -13,11 +13,11 @@
     <Filter Include="test\core">
       <UniqueIdentifier>{cc06b800-cd26-f7a8-7ecf-ec789e78881b}</UniqueIdentifier>
     </Filter>
-    <Filter Include="test\core\client_config">
-      <UniqueIdentifier>{4fbd5c0a-d1e3-6658-5788-2fc6f2cc9071}</UniqueIdentifier>
+    <Filter Include="test\core\client_channel">
+      <UniqueIdentifier>{0998596f-2aa1-8205-173b-0bd27b7617d1}</UniqueIdentifier>
     </Filter>
-    <Filter Include="test\core\client_config\resolvers">
-      <UniqueIdentifier>{eab637a2-7ac1-f6be-4fc2-c8989c66070b}</UniqueIdentifier>
+    <Filter Include="test\core\client_channel\resolvers">
+      <UniqueIdentifier>{8925594d-dbe2-fee6-1553-d3258d9361da}</UniqueIdentifier>
     </Filter>
   </ItemGroup>
 </Project>
diff --git a/vsprojects/vcxproj/test/dns_resolver_test/dns_resolver_test.vcxproj b/vsprojects/vcxproj/test/dns_resolver_test/dns_resolver_test.vcxproj
index 1f3089b..8337510 100644
--- a/vsprojects/vcxproj/test/dns_resolver_test/dns_resolver_test.vcxproj
+++ b/vsprojects/vcxproj/test/dns_resolver_test/dns_resolver_test.vcxproj
@@ -158,7 +158,7 @@
   </ItemDefinitionGroup>
 
   <ItemGroup>
-    <ClCompile Include="$(SolutionDir)\..\test\core\client_config\resolvers\dns_resolver_test.c">
+    <ClCompile Include="$(SolutionDir)\..\test\core\client_channel\resolvers\dns_resolver_test.c">
     </ClCompile>
   </ItemGroup>
   <ItemGroup>
diff --git a/vsprojects/vcxproj/test/dns_resolver_test/dns_resolver_test.vcxproj.filters b/vsprojects/vcxproj/test/dns_resolver_test/dns_resolver_test.vcxproj.filters
index ea6e707..540da55 100644
--- a/vsprojects/vcxproj/test/dns_resolver_test/dns_resolver_test.vcxproj.filters
+++ b/vsprojects/vcxproj/test/dns_resolver_test/dns_resolver_test.vcxproj.filters
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?>
 <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
   <ItemGroup>
-    <ClCompile Include="$(SolutionDir)\..\test\core\client_config\resolvers\dns_resolver_test.c">
-      <Filter>test\core\client_config\resolvers</Filter>
+    <ClCompile Include="$(SolutionDir)\..\test\core\client_channel\resolvers\dns_resolver_test.c">
+      <Filter>test\core\client_channel\resolvers</Filter>
     </ClCompile>
   </ItemGroup>
 
@@ -13,11 +13,11 @@
     <Filter Include="test\core">
       <UniqueIdentifier>{edc57049-e918-50c2-5ba9-04771a506c89}</UniqueIdentifier>
     </Filter>
-    <Filter Include="test\core\client_config">
-      <UniqueIdentifier>{7922598e-4d7b-3a07-85d1-467b736756f6}</UniqueIdentifier>
+    <Filter Include="test\core\client_channel">
+      <UniqueIdentifier>{227838e2-4ac8-f960-68b6-e82cc6e0cefa}</UniqueIdentifier>
     </Filter>
-    <Filter Include="test\core\client_config\resolvers">
-      <UniqueIdentifier>{fb24db82-f42b-3f44-fb9b-b540e8f9c6ab}</UniqueIdentifier>
+    <Filter Include="test\core\client_channel\resolvers">
+      <UniqueIdentifier>{5d51c3a6-a50e-4d84-53b3-44ee7c39f36c}</UniqueIdentifier>
     </Filter>
   </ItemGroup>
 </Project>
diff --git a/vsprojects/vcxproj/test/end2end/fixtures/h2_fake_resolver_nosec_test/h2_fake_resolver_nosec_test.vcxproj b/vsprojects/vcxproj/test/end2end/fixtures/h2_fake_resolver_nosec_test/h2_fake_resolver_nosec_test.vcxproj
new file mode 100644
index 0000000..3e5f60d
--- /dev/null
+++ b/vsprojects/vcxproj/test/end2end/fixtures/h2_fake_resolver_nosec_test/h2_fake_resolver_nosec_test.vcxproj
@@ -0,0 +1,191 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{5C8F9B15-B0D0-54FE-1E54-A53F963D2B2F}</ProjectGuid>
+    <IgnoreWarnIntDirInTempDetected>true</IgnoreWarnIntDirInTempDetected>
+    <IntDir>$(SolutionDir)IntDir\$(MSBuildProjectName)\</IntDir>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(VisualStudioVersion)' == '10.0'" Label="Configuration">
+    <PlatformToolset>v100</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(VisualStudioVersion)' == '11.0'" Label="Configuration">
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(VisualStudioVersion)' == '12.0'" Label="Configuration">
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(VisualStudioVersion)' == '14.0'" Label="Configuration">
+    <PlatformToolset>v140</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)'=='Debug'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)'=='Release'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="$(SolutionDir)\..\vsprojects\global.props" />
+    <Import Project="$(SolutionDir)\..\vsprojects\winsock.props" />
+    <Import Project="$(SolutionDir)\..\vsprojects\zlib.props" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup Condition="'$(Configuration)'=='Debug'">
+    <TargetName>h2_fake_resolver_nosec_test</TargetName>
+    <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
+    <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)'=='Release'">
+    <TargetName>h2_fake_resolver_nosec_test</TargetName>
+    <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
+    <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+  </PropertyGroup>
+    <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <SDLCheck>true</SDLCheck>
+      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+      <TreatWarningAsError>true</TreatWarningAsError>
+      <DebugInformationFormat Condition="$(Jenkins)">None</DebugInformationFormat>
+      <MinimalRebuild Condition="$(Jenkins)">false</MinimalRebuild>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation Condition="!$(Jenkins)">true</GenerateDebugInformation>
+      <GenerateDebugInformation Condition="$(Jenkins)">false</GenerateDebugInformation>
+    </Link>
+  </ItemDefinitionGroup>
+
+    <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <SDLCheck>true</SDLCheck>
+      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+      <TreatWarningAsError>true</TreatWarningAsError>
+      <DebugInformationFormat Condition="$(Jenkins)">None</DebugInformationFormat>
+      <MinimalRebuild Condition="$(Jenkins)">false</MinimalRebuild>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation Condition="!$(Jenkins)">true</GenerateDebugInformation>
+      <GenerateDebugInformation Condition="$(Jenkins)">false</GenerateDebugInformation>
+    </Link>
+  </ItemDefinitionGroup>
+
+    <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>MaxSpeed</Optimization>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <SDLCheck>true</SDLCheck>
+      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+      <TreatWarningAsError>true</TreatWarningAsError>
+      <DebugInformationFormat Condition="$(Jenkins)">None</DebugInformationFormat>
+      <MinimalRebuild Condition="$(Jenkins)">false</MinimalRebuild>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation Condition="!$(Jenkins)">true</GenerateDebugInformation>
+      <GenerateDebugInformation Condition="$(Jenkins)">false</GenerateDebugInformation>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+    </Link>
+  </ItemDefinitionGroup>
+
+    <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>MaxSpeed</Optimization>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <SDLCheck>true</SDLCheck>
+      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+      <TreatWarningAsError>true</TreatWarningAsError>
+      <DebugInformationFormat Condition="$(Jenkins)">None</DebugInformationFormat>
+      <MinimalRebuild Condition="$(Jenkins)">false</MinimalRebuild>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation Condition="!$(Jenkins)">true</GenerateDebugInformation>
+      <GenerateDebugInformation Condition="$(Jenkins)">false</GenerateDebugInformation>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+    </Link>
+  </ItemDefinitionGroup>
+
+  <ItemGroup>
+    <ClCompile Include="$(SolutionDir)\..\test\core\end2end\fixtures\h2_fake_resolver.c">
+    </ClCompile>
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="$(SolutionDir)\..\vsprojects\vcxproj\test/end2end/tests\end2end_nosec_tests\end2end_nosec_tests.vcxproj">
+      <Project>{47C2CB41-4E9F-58B6-F606-F6FAED5D00ED}</Project>
+    </ProjectReference>
+    <ProjectReference Include="$(SolutionDir)\..\vsprojects\vcxproj\.\grpc_test_util_unsecure\grpc_test_util_unsecure.vcxproj">
+      <Project>{0A7E7F92-FDEA-40F1-A9EC-3BA484F98BBF}</Project>
+    </ProjectReference>
+    <ProjectReference Include="$(SolutionDir)\..\vsprojects\vcxproj\.\grpc_unsecure\grpc_unsecure.vcxproj">
+      <Project>{46CEDFFF-9692-456A-AA24-38B5D6BCF4C5}</Project>
+    </ProjectReference>
+    <ProjectReference Include="$(SolutionDir)\..\vsprojects\vcxproj\.\gpr_test_util\gpr_test_util.vcxproj">
+      <Project>{EAB0A629-17A9-44DB-B5FF-E91A721FE037}</Project>
+    </ProjectReference>
+    <ProjectReference Include="$(SolutionDir)\..\vsprojects\vcxproj\.\gpr\gpr.vcxproj">
+      <Project>{B23D3D1A-9438-4EDA-BEB6-9A0A03D17792}</Project>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="packages.config" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  <Import Project="$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.redist.1.2.8.10\build\native\grpc.dependencies.zlib.redist.targets" Condition="Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.redist.1.2.8.10\build\native\grpc.dependencies\grpc.dependencies.zlib.targets')" />
+  <Import Project="$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.1.2.8.10\build\native\grpc.dependencies.zlib.targets" Condition="Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.1.2.8.10\build\native\grpc.dependencies\grpc.dependencies.zlib.targets')" />
+  </ImportGroup>
+  <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
+    <PropertyGroup>
+      <ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
+    </PropertyGroup>
+    <Error Condition="!Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.redist.1.2.8.10\build\native\grpc.dependencies.zlib.redist.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.redist.1.2.8.10\build\native\grpc.dependencies.zlib.redist.targets')" />
+    <Error Condition="!Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.1.2.8.10\build\native\grpc.dependencies.zlib.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.1.2.8.10\build\native\grpc.dependencies.zlib.targets')" />
+  </Target>
+</Project>
+
diff --git a/vsprojects/vcxproj/test/end2end/fixtures/h2_fake_resolver_nosec_test/h2_fake_resolver_nosec_test.vcxproj.filters b/vsprojects/vcxproj/test/end2end/fixtures/h2_fake_resolver_nosec_test/h2_fake_resolver_nosec_test.vcxproj.filters
new file mode 100644
index 0000000..fa77558
--- /dev/null
+++ b/vsprojects/vcxproj/test/end2end/fixtures/h2_fake_resolver_nosec_test/h2_fake_resolver_nosec_test.vcxproj.filters
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <ClCompile Include="$(SolutionDir)\..\test\core\end2end\fixtures\h2_fake_resolver.c">
+      <Filter>test\core\end2end\fixtures</Filter>
+    </ClCompile>
+  </ItemGroup>
+
+  <ItemGroup>
+    <Filter Include="test">
+      <UniqueIdentifier>{d16c806f-b9ed-2fc4-d125-d2f213d24e94}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="test\core">
+      <UniqueIdentifier>{35eb96d1-e1d6-7d4f-1b67-58c90bbafc08}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="test\core\end2end">
+      <UniqueIdentifier>{c8a16f5b-264e-c0f0-122b-295477b396f0}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="test\core\end2end\fixtures">
+      <UniqueIdentifier>{cd25af84-98e8-39f6-6af3-c1a852a54156}</UniqueIdentifier>
+    </Filter>
+  </ItemGroup>
+</Project>
+
diff --git a/vsprojects/vcxproj/test/end2end/fixtures/h2_fake_resolver_test/h2_fake_resolver_test.vcxproj b/vsprojects/vcxproj/test/end2end/fixtures/h2_fake_resolver_test/h2_fake_resolver_test.vcxproj
new file mode 100644
index 0000000..a3977f1
--- /dev/null
+++ b/vsprojects/vcxproj/test/end2end/fixtures/h2_fake_resolver_test/h2_fake_resolver_test.vcxproj
@@ -0,0 +1,202 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies.openssl.props" Condition="Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\1.0.204.1.props')" />
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{085ACF7D-D7CE-A9F1-576D-1AF901409FA4}</ProjectGuid>
+    <IgnoreWarnIntDirInTempDetected>true</IgnoreWarnIntDirInTempDetected>
+    <IntDir>$(SolutionDir)IntDir\$(MSBuildProjectName)\</IntDir>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(VisualStudioVersion)' == '10.0'" Label="Configuration">
+    <PlatformToolset>v100</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(VisualStudioVersion)' == '11.0'" Label="Configuration">
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(VisualStudioVersion)' == '12.0'" Label="Configuration">
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(VisualStudioVersion)' == '14.0'" Label="Configuration">
+    <PlatformToolset>v140</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)'=='Debug'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)'=='Release'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="$(SolutionDir)\..\vsprojects\global.props" />
+    <Import Project="$(SolutionDir)\..\vsprojects\openssl.props" />
+    <Import Project="$(SolutionDir)\..\vsprojects\winsock.props" />
+    <Import Project="$(SolutionDir)\..\vsprojects\zlib.props" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup Condition="'$(Configuration)'=='Debug'">
+    <TargetName>h2_fake_resolver_test</TargetName>
+    <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
+    <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
+    <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)'=='Release'">
+    <TargetName>h2_fake_resolver_test</TargetName>
+    <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
+    <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
+    <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
+  </PropertyGroup>
+    <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <SDLCheck>true</SDLCheck>
+      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+      <TreatWarningAsError>true</TreatWarningAsError>
+      <DebugInformationFormat Condition="$(Jenkins)">None</DebugInformationFormat>
+      <MinimalRebuild Condition="$(Jenkins)">false</MinimalRebuild>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation Condition="!$(Jenkins)">true</GenerateDebugInformation>
+      <GenerateDebugInformation Condition="$(Jenkins)">false</GenerateDebugInformation>
+    </Link>
+  </ItemDefinitionGroup>
+
+    <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <SDLCheck>true</SDLCheck>
+      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+      <TreatWarningAsError>true</TreatWarningAsError>
+      <DebugInformationFormat Condition="$(Jenkins)">None</DebugInformationFormat>
+      <MinimalRebuild Condition="$(Jenkins)">false</MinimalRebuild>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation Condition="!$(Jenkins)">true</GenerateDebugInformation>
+      <GenerateDebugInformation Condition="$(Jenkins)">false</GenerateDebugInformation>
+    </Link>
+  </ItemDefinitionGroup>
+
+    <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>MaxSpeed</Optimization>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <SDLCheck>true</SDLCheck>
+      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+      <TreatWarningAsError>true</TreatWarningAsError>
+      <DebugInformationFormat Condition="$(Jenkins)">None</DebugInformationFormat>
+      <MinimalRebuild Condition="$(Jenkins)">false</MinimalRebuild>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation Condition="!$(Jenkins)">true</GenerateDebugInformation>
+      <GenerateDebugInformation Condition="$(Jenkins)">false</GenerateDebugInformation>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+    </Link>
+  </ItemDefinitionGroup>
+
+    <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>MaxSpeed</Optimization>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <SDLCheck>true</SDLCheck>
+      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+      <TreatWarningAsError>true</TreatWarningAsError>
+      <DebugInformationFormat Condition="$(Jenkins)">None</DebugInformationFormat>
+      <MinimalRebuild Condition="$(Jenkins)">false</MinimalRebuild>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation Condition="!$(Jenkins)">true</GenerateDebugInformation>
+      <GenerateDebugInformation Condition="$(Jenkins)">false</GenerateDebugInformation>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+    </Link>
+  </ItemDefinitionGroup>
+
+  <ItemGroup>
+    <ClCompile Include="$(SolutionDir)\..\test\core\end2end\fixtures\h2_fake_resolver.c">
+    </ClCompile>
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="$(SolutionDir)\..\vsprojects\vcxproj\test/end2end/tests\end2end_tests\end2end_tests.vcxproj">
+      <Project>{1F1F9084-2A93-B80E-364F-5754894AFAB4}</Project>
+    </ProjectReference>
+    <ProjectReference Include="$(SolutionDir)\..\vsprojects\vcxproj\.\grpc_test_util\grpc_test_util.vcxproj">
+      <Project>{17BCAFC0-5FDC-4C94-AEB9-95F3E220614B}</Project>
+    </ProjectReference>
+    <ProjectReference Include="$(SolutionDir)\..\vsprojects\vcxproj\.\grpc\grpc.vcxproj">
+      <Project>{29D16885-7228-4C31-81ED-5F9187C7F2A9}</Project>
+    </ProjectReference>
+    <ProjectReference Include="$(SolutionDir)\..\vsprojects\vcxproj\.\gpr_test_util\gpr_test_util.vcxproj">
+      <Project>{EAB0A629-17A9-44DB-B5FF-E91A721FE037}</Project>
+    </ProjectReference>
+    <ProjectReference Include="$(SolutionDir)\..\vsprojects\vcxproj\.\gpr\gpr.vcxproj">
+      <Project>{B23D3D1A-9438-4EDA-BEB6-9A0A03D17792}</Project>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="packages.config" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  <Import Project="$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.redist.1.2.8.10\build\native\grpc.dependencies.zlib.redist.targets" Condition="Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.redist.1.2.8.10\build\native\grpc.dependencies\grpc.dependencies.zlib.targets')" />
+  <Import Project="$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.1.2.8.10\build\native\grpc.dependencies.zlib.targets" Condition="Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.1.2.8.10\build\native\grpc.dependencies\grpc.dependencies.zlib.targets')" />
+  <Import Project="$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.redist.1.0.204.1\build\native\grpc.dependencies.openssl.redist.targets" Condition="Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.redist.1.0.204.1\build\native\grpc.dependencies\grpc.dependencies.openssl.targets')" />
+  <Import Project="$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies.openssl.targets" Condition="Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies\grpc.dependencies.openssl.targets')" />
+  </ImportGroup>
+  <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
+    <PropertyGroup>
+      <ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
+    </PropertyGroup>
+    <Error Condition="!Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.redist.1.2.8.10\build\native\grpc.dependencies.zlib.redist.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.redist.1.2.8.10\build\native\grpc.dependencies.zlib.redist.targets')" />
+    <Error Condition="!Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.1.2.8.10\build\native\grpc.dependencies.zlib.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.1.2.8.10\build\native\grpc.dependencies.zlib.targets')" />
+    <Error Condition="!Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.redist.1.0.204.1\build\native\grpc.dependencies.openssl.redist.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.redist.1.0.204.1\build\native\grpc.dependencies.openssl.redist.targets')" />
+    <Error Condition="!Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies.openssl.props')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies.openssl.props')" />
+    <Error Condition="!Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies.openssl.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies.openssl.targets')" />
+  </Target>
+</Project>
+
diff --git a/vsprojects/vcxproj/test/end2end/fixtures/h2_fake_resolver_test/h2_fake_resolver_test.vcxproj.filters b/vsprojects/vcxproj/test/end2end/fixtures/h2_fake_resolver_test/h2_fake_resolver_test.vcxproj.filters
new file mode 100644
index 0000000..cb68d33
--- /dev/null
+++ b/vsprojects/vcxproj/test/end2end/fixtures/h2_fake_resolver_test/h2_fake_resolver_test.vcxproj.filters
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <ClCompile Include="$(SolutionDir)\..\test\core\end2end\fixtures\h2_fake_resolver.c">
+      <Filter>test\core\end2end\fixtures</Filter>
+    </ClCompile>
+  </ItemGroup>
+
+  <ItemGroup>
+    <Filter Include="test">
+      <UniqueIdentifier>{3bb40091-0d52-0156-cc55-ce5f69e612a8}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="test\core">
+      <UniqueIdentifier>{cac8fdf8-f489-f1ff-2812-79c47527b524}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="test\core\end2end">
+      <UniqueIdentifier>{2fe5cc8d-2908-878f-3b45-50f8c2cfadea}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="test\core\end2end\fixtures">
+      <UniqueIdentifier>{f07f474f-9277-9b94-38b7-3f7d0c846fdb}</UniqueIdentifier>
+    </Filter>
+  </ItemGroup>
+</Project>
+
diff --git a/vsprojects/vcxproj/test/lb_policies_test/lb_policies_test.vcxproj b/vsprojects/vcxproj/test/lb_policies_test/lb_policies_test.vcxproj
index 22b364f..b4da019 100644
--- a/vsprojects/vcxproj/test/lb_policies_test/lb_policies_test.vcxproj
+++ b/vsprojects/vcxproj/test/lb_policies_test/lb_policies_test.vcxproj
@@ -158,7 +158,7 @@
   </ItemDefinitionGroup>
 
   <ItemGroup>
-    <ClCompile Include="$(SolutionDir)\..\test\core\client_config\lb_policies_test.c">
+    <ClCompile Include="$(SolutionDir)\..\test\core\client_channel\lb_policies_test.c">
     </ClCompile>
   </ItemGroup>
   <ItemGroup>
diff --git a/vsprojects/vcxproj/test/lb_policies_test/lb_policies_test.vcxproj.filters b/vsprojects/vcxproj/test/lb_policies_test/lb_policies_test.vcxproj.filters
index d606813..362cfab 100644
--- a/vsprojects/vcxproj/test/lb_policies_test/lb_policies_test.vcxproj.filters
+++ b/vsprojects/vcxproj/test/lb_policies_test/lb_policies_test.vcxproj.filters
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?>
 <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
   <ItemGroup>
-    <ClCompile Include="$(SolutionDir)\..\test\core\client_config\lb_policies_test.c">
-      <Filter>test\core\client_config</Filter>
+    <ClCompile Include="$(SolutionDir)\..\test\core\client_channel\lb_policies_test.c">
+      <Filter>test\core\client_channel</Filter>
     </ClCompile>
   </ItemGroup>
 
@@ -13,8 +13,8 @@
     <Filter Include="test\core">
       <UniqueIdentifier>{6e194f4b-ceb1-0e6b-e77a-8149b0411d99}</UniqueIdentifier>
     </Filter>
-    <Filter Include="test\core\client_config">
-      <UniqueIdentifier>{f948fe8f-47f8-fcce-2740-6c390af3c30b}</UniqueIdentifier>
+    <Filter Include="test\core\client_channel">
+      <UniqueIdentifier>{c4b19e85-1a5c-066b-9503-b58971695a58}</UniqueIdentifier>
     </Filter>
   </ItemGroup>
 </Project>
diff --git a/vsprojects/vcxproj/test/server_context_test_spouse_test/server_context_test_spouse_test.vcxproj b/vsprojects/vcxproj/test/server_context_test_spouse_test/server_context_test_spouse_test.vcxproj
new file mode 100644
index 0000000..9e586c6
--- /dev/null
+++ b/vsprojects/vcxproj/test/server_context_test_spouse_test/server_context_test_spouse_test.vcxproj
@@ -0,0 +1,207 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies.openssl.props" Condition="Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\1.0.204.1.props')" />
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{A6F63996-B33B-9904-57AB-9C9559D52007}</ProjectGuid>
+    <IgnoreWarnIntDirInTempDetected>true</IgnoreWarnIntDirInTempDetected>
+    <IntDir>$(SolutionDir)IntDir\$(MSBuildProjectName)\</IntDir>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(VisualStudioVersion)' == '10.0'" Label="Configuration">
+    <PlatformToolset>v100</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(VisualStudioVersion)' == '11.0'" Label="Configuration">
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(VisualStudioVersion)' == '12.0'" Label="Configuration">
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(VisualStudioVersion)' == '14.0'" Label="Configuration">
+    <PlatformToolset>v140</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)'=='Debug'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)'=='Release'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="$(SolutionDir)\..\vsprojects\cpptest.props" />
+    <Import Project="$(SolutionDir)\..\vsprojects\global.props" />
+    <Import Project="$(SolutionDir)\..\vsprojects\openssl.props" />
+    <Import Project="$(SolutionDir)\..\vsprojects\protobuf.props" />
+    <Import Project="$(SolutionDir)\..\vsprojects\winsock.props" />
+    <Import Project="$(SolutionDir)\..\vsprojects\zlib.props" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup Condition="'$(Configuration)'=='Debug'">
+    <TargetName>server_context_test_spouse_test</TargetName>
+    <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
+    <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
+    <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)'=='Release'">
+    <TargetName>server_context_test_spouse_test</TargetName>
+    <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
+    <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
+    <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
+  </PropertyGroup>
+    <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <SDLCheck>true</SDLCheck>
+      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+      <TreatWarningAsError>true</TreatWarningAsError>
+      <DebugInformationFormat Condition="$(Jenkins)">None</DebugInformationFormat>
+      <MinimalRebuild Condition="$(Jenkins)">false</MinimalRebuild>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation Condition="!$(Jenkins)">true</GenerateDebugInformation>
+      <GenerateDebugInformation Condition="$(Jenkins)">false</GenerateDebugInformation>
+    </Link>
+  </ItemDefinitionGroup>
+
+    <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <SDLCheck>true</SDLCheck>
+      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+      <TreatWarningAsError>true</TreatWarningAsError>
+      <DebugInformationFormat Condition="$(Jenkins)">None</DebugInformationFormat>
+      <MinimalRebuild Condition="$(Jenkins)">false</MinimalRebuild>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation Condition="!$(Jenkins)">true</GenerateDebugInformation>
+      <GenerateDebugInformation Condition="$(Jenkins)">false</GenerateDebugInformation>
+    </Link>
+  </ItemDefinitionGroup>
+
+    <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>MaxSpeed</Optimization>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <SDLCheck>true</SDLCheck>
+      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+      <TreatWarningAsError>true</TreatWarningAsError>
+      <DebugInformationFormat Condition="$(Jenkins)">None</DebugInformationFormat>
+      <MinimalRebuild Condition="$(Jenkins)">false</MinimalRebuild>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation Condition="!$(Jenkins)">true</GenerateDebugInformation>
+      <GenerateDebugInformation Condition="$(Jenkins)">false</GenerateDebugInformation>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+    </Link>
+  </ItemDefinitionGroup>
+
+    <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>MaxSpeed</Optimization>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <SDLCheck>true</SDLCheck>
+      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+      <TreatWarningAsError>true</TreatWarningAsError>
+      <DebugInformationFormat Condition="$(Jenkins)">None</DebugInformationFormat>
+      <MinimalRebuild Condition="$(Jenkins)">false</MinimalRebuild>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation Condition="!$(Jenkins)">true</GenerateDebugInformation>
+      <GenerateDebugInformation Condition="$(Jenkins)">false</GenerateDebugInformation>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+    </Link>
+  </ItemDefinitionGroup>
+
+  <ItemGroup>
+    <ClCompile Include="$(SolutionDir)\..\test\cpp\test\server_context_test_spouse_test.cc">
+    </ClCompile>
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="$(SolutionDir)\..\vsprojects\vcxproj\.\grpc_test_util\grpc_test_util.vcxproj">
+      <Project>{17BCAFC0-5FDC-4C94-AEB9-95F3E220614B}</Project>
+    </ProjectReference>
+    <ProjectReference Include="$(SolutionDir)\..\vsprojects\vcxproj\.\grpc++_test\grpc++_test.vcxproj">
+      <Project>{3D3EAEA9-76C4-0CFE-4718-5A1F6B7F72C8}</Project>
+    </ProjectReference>
+    <ProjectReference Include="$(SolutionDir)\..\vsprojects\vcxproj\.\grpc++\grpc++.vcxproj">
+      <Project>{C187A093-A0FE-489D-A40A-6E33DE0F9FEB}</Project>
+    </ProjectReference>
+    <ProjectReference Include="$(SolutionDir)\..\vsprojects\vcxproj\.\grpc\grpc.vcxproj">
+      <Project>{29D16885-7228-4C31-81ED-5F9187C7F2A9}</Project>
+    </ProjectReference>
+    <ProjectReference Include="$(SolutionDir)\..\vsprojects\vcxproj\.\gpr_test_util\gpr_test_util.vcxproj">
+      <Project>{EAB0A629-17A9-44DB-B5FF-E91A721FE037}</Project>
+    </ProjectReference>
+    <ProjectReference Include="$(SolutionDir)\..\vsprojects\vcxproj\.\gpr\gpr.vcxproj">
+      <Project>{B23D3D1A-9438-4EDA-BEB6-9A0A03D17792}</Project>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="packages.config" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  <Import Project="$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.redist.1.2.8.10\build\native\grpc.dependencies.zlib.redist.targets" Condition="Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.redist.1.2.8.10\build\native\grpc.dependencies\grpc.dependencies.zlib.targets')" />
+  <Import Project="$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.1.2.8.10\build\native\grpc.dependencies.zlib.targets" Condition="Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.1.2.8.10\build\native\grpc.dependencies\grpc.dependencies.zlib.targets')" />
+  <Import Project="$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.redist.1.0.204.1\build\native\grpc.dependencies.openssl.redist.targets" Condition="Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.redist.1.0.204.1\build\native\grpc.dependencies\grpc.dependencies.openssl.targets')" />
+  <Import Project="$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies.openssl.targets" Condition="Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies\grpc.dependencies.openssl.targets')" />
+  </ImportGroup>
+  <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
+    <PropertyGroup>
+      <ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
+    </PropertyGroup>
+    <Error Condition="!Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.redist.1.2.8.10\build\native\grpc.dependencies.zlib.redist.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.redist.1.2.8.10\build\native\grpc.dependencies.zlib.redist.targets')" />
+    <Error Condition="!Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.1.2.8.10\build\native\grpc.dependencies.zlib.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.1.2.8.10\build\native\grpc.dependencies.zlib.targets')" />
+    <Error Condition="!Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.redist.1.0.204.1\build\native\grpc.dependencies.openssl.redist.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.redist.1.0.204.1\build\native\grpc.dependencies.openssl.redist.targets')" />
+    <Error Condition="!Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies.openssl.props')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies.openssl.props')" />
+    <Error Condition="!Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies.openssl.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies.openssl.targets')" />
+  </Target>
+</Project>
+
diff --git a/vsprojects/vcxproj/test/server_context_test_spouse_test/server_context_test_spouse_test.vcxproj.filters b/vsprojects/vcxproj/test/server_context_test_spouse_test/server_context_test_spouse_test.vcxproj.filters
new file mode 100644
index 0000000..469ef95
--- /dev/null
+++ b/vsprojects/vcxproj/test/server_context_test_spouse_test/server_context_test_spouse_test.vcxproj.filters
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <ClCompile Include="$(SolutionDir)\..\test\cpp\test\server_context_test_spouse_test.cc">
+      <Filter>test\cpp\test</Filter>
+    </ClCompile>
+  </ItemGroup>
+
+  <ItemGroup>
+    <Filter Include="test">
+      <UniqueIdentifier>{fa83809b-e1fe-3f85-ebbb-73570c33fa2e}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="test\cpp">
+      <UniqueIdentifier>{7bad6fd3-6c15-e1fa-4037-8627e3622c7c}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="test\cpp\test">
+      <UniqueIdentifier>{990725da-41e1-2c80-ecc7-2b90c8914dd7}</UniqueIdentifier>
+    </Filter>
+  </ItemGroup>
+</Project>
+
diff --git a/vsprojects/vcxproj/test/set_initial_connect_string_test/set_initial_connect_string_test.vcxproj b/vsprojects/vcxproj/test/set_initial_connect_string_test/set_initial_connect_string_test.vcxproj
index 5fda720..a438391 100644
--- a/vsprojects/vcxproj/test/set_initial_connect_string_test/set_initial_connect_string_test.vcxproj
+++ b/vsprojects/vcxproj/test/set_initial_connect_string_test/set_initial_connect_string_test.vcxproj
@@ -158,7 +158,7 @@
   </ItemDefinitionGroup>
 
   <ItemGroup>
-    <ClCompile Include="$(SolutionDir)\..\test\core\client_config\set_initial_connect_string_test.c">
+    <ClCompile Include="$(SolutionDir)\..\test\core\client_channel\set_initial_connect_string_test.c">
     </ClCompile>
   </ItemGroup>
   <ItemGroup>
diff --git a/vsprojects/vcxproj/test/set_initial_connect_string_test/set_initial_connect_string_test.vcxproj.filters b/vsprojects/vcxproj/test/set_initial_connect_string_test/set_initial_connect_string_test.vcxproj.filters
index 8abfa19..4422a3e 100644
--- a/vsprojects/vcxproj/test/set_initial_connect_string_test/set_initial_connect_string_test.vcxproj.filters
+++ b/vsprojects/vcxproj/test/set_initial_connect_string_test/set_initial_connect_string_test.vcxproj.filters
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?>
 <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
   <ItemGroup>
-    <ClCompile Include="$(SolutionDir)\..\test\core\client_config\set_initial_connect_string_test.c">
-      <Filter>test\core\client_config</Filter>
+    <ClCompile Include="$(SolutionDir)\..\test\core\client_channel\set_initial_connect_string_test.c">
+      <Filter>test\core\client_channel</Filter>
     </ClCompile>
   </ItemGroup>
 
@@ -13,8 +13,8 @@
     <Filter Include="test\core">
       <UniqueIdentifier>{a554b5ef-0c80-ac03-1848-bccd947a06a6}</UniqueIdentifier>
     </Filter>
-    <Filter Include="test\core\client_config">
-      <UniqueIdentifier>{a6c4917f-b1b0-e958-6ea8-34950c2f8f36}</UniqueIdentifier>
+    <Filter Include="test\core\client_channel">
+      <UniqueIdentifier>{4726253c-a562-0ace-2798-996807381208}</UniqueIdentifier>
     </Filter>
   </ItemGroup>
 </Project>
diff --git a/vsprojects/vcxproj/test/sockaddr_resolver_test/sockaddr_resolver_test.vcxproj b/vsprojects/vcxproj/test/sockaddr_resolver_test/sockaddr_resolver_test.vcxproj
index 1062132..8d5d02e 100644
--- a/vsprojects/vcxproj/test/sockaddr_resolver_test/sockaddr_resolver_test.vcxproj
+++ b/vsprojects/vcxproj/test/sockaddr_resolver_test/sockaddr_resolver_test.vcxproj
@@ -158,7 +158,7 @@
   </ItemDefinitionGroup>
 
   <ItemGroup>
-    <ClCompile Include="$(SolutionDir)\..\test\core\client_config\resolvers\sockaddr_resolver_test.c">
+    <ClCompile Include="$(SolutionDir)\..\test\core\client_channel\resolvers\sockaddr_resolver_test.c">
     </ClCompile>
   </ItemGroup>
   <ItemGroup>
diff --git a/vsprojects/vcxproj/test/sockaddr_resolver_test/sockaddr_resolver_test.vcxproj.filters b/vsprojects/vcxproj/test/sockaddr_resolver_test/sockaddr_resolver_test.vcxproj.filters
index 50de4b3..aa63da1 100644
--- a/vsprojects/vcxproj/test/sockaddr_resolver_test/sockaddr_resolver_test.vcxproj.filters
+++ b/vsprojects/vcxproj/test/sockaddr_resolver_test/sockaddr_resolver_test.vcxproj.filters
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?>
 <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
   <ItemGroup>
-    <ClCompile Include="$(SolutionDir)\..\test\core\client_config\resolvers\sockaddr_resolver_test.c">
-      <Filter>test\core\client_config\resolvers</Filter>
+    <ClCompile Include="$(SolutionDir)\..\test\core\client_channel\resolvers\sockaddr_resolver_test.c">
+      <Filter>test\core\client_channel\resolvers</Filter>
     </ClCompile>
   </ItemGroup>
 
@@ -13,11 +13,11 @@
     <Filter Include="test\core">
       <UniqueIdentifier>{efc6f7cf-eb13-376c-85bb-64fae70baf03}</UniqueIdentifier>
     </Filter>
-    <Filter Include="test\core\client_config">
-      <UniqueIdentifier>{cba53434-a270-8e21-2976-5f7950730eb8}</UniqueIdentifier>
+    <Filter Include="test\core\client_channel">
+      <UniqueIdentifier>{a3fef8b1-3b99-63c9-5f35-feff99af1381}</UniqueIdentifier>
     </Filter>
-    <Filter Include="test\core\client_config\resolvers">
-      <UniqueIdentifier>{79868613-ffd2-ead6-5b23-fc1d8d0709ba}</UniqueIdentifier>
+    <Filter Include="test\core\client_channel\resolvers">
+      <UniqueIdentifier>{d32b4315-4e08-e492-5e10-4dc0c5c8cd55}</UniqueIdentifier>
     </Filter>
   </ItemGroup>
 </Project>
diff --git a/vsprojects/vcxproj/test/stress_test/stress_test.vcxproj b/vsprojects/vcxproj/test/stress_test/stress_test.vcxproj
index ba2ed46..8e1b6bb 100644
--- a/vsprojects/vcxproj/test/stress_test/stress_test.vcxproj
+++ b/vsprojects/vcxproj/test/stress_test/stress_test.vcxproj
@@ -198,6 +198,8 @@
     </ClCompile>
     <ClInclude Include="$(SolutionDir)\..\src\proto\grpc\testing\test.grpc.pb.h">
     </ClInclude>
+    <ClCompile Include="$(SolutionDir)\..\test\cpp\interop\client_helper.cc">
+    </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\test\cpp\interop\interop_client.cc">
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\test\cpp\interop\stress_interop_client.cc">
diff --git a/vsprojects/vcxproj/test/stress_test/stress_test.vcxproj.filters b/vsprojects/vcxproj/test/stress_test/stress_test.vcxproj.filters
index 08367b7..476c04e 100644
--- a/vsprojects/vcxproj/test/stress_test/stress_test.vcxproj.filters
+++ b/vsprojects/vcxproj/test/stress_test/stress_test.vcxproj.filters
@@ -13,6 +13,9 @@
     <ClCompile Include="$(SolutionDir)\..\src\proto\grpc\testing\test.proto">
       <Filter>src\proto\grpc\testing</Filter>
     </ClCompile>
+    <ClCompile Include="$(SolutionDir)\..\test\cpp\interop\client_helper.cc">
+      <Filter>test\cpp\interop</Filter>
+    </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\test\cpp\interop\interop_client.cc">
       <Filter>test\cpp\interop</Filter>
     </ClCompile>
diff --git a/vsprojects/vcxproj/test/uri_parser_test/uri_parser_test.vcxproj b/vsprojects/vcxproj/test/uri_parser_test/uri_parser_test.vcxproj
index 51c4a27..d5229e0 100644
--- a/vsprojects/vcxproj/test/uri_parser_test/uri_parser_test.vcxproj
+++ b/vsprojects/vcxproj/test/uri_parser_test/uri_parser_test.vcxproj
@@ -158,7 +158,7 @@
   </ItemDefinitionGroup>
 
   <ItemGroup>
-    <ClCompile Include="$(SolutionDir)\..\test\core\client_config\uri_parser_test.c">
+    <ClCompile Include="$(SolutionDir)\..\test\core\client_channel\uri_parser_test.c">
     </ClCompile>
   </ItemGroup>
   <ItemGroup>
diff --git a/vsprojects/vcxproj/test/uri_parser_test/uri_parser_test.vcxproj.filters b/vsprojects/vcxproj/test/uri_parser_test/uri_parser_test.vcxproj.filters
index e95dd1d..bafab6a 100644
--- a/vsprojects/vcxproj/test/uri_parser_test/uri_parser_test.vcxproj.filters
+++ b/vsprojects/vcxproj/test/uri_parser_test/uri_parser_test.vcxproj.filters
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?>
 <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
   <ItemGroup>
-    <ClCompile Include="$(SolutionDir)\..\test\core\client_config\uri_parser_test.c">
-      <Filter>test\core\client_config</Filter>
+    <ClCompile Include="$(SolutionDir)\..\test\core\client_channel\uri_parser_test.c">
+      <Filter>test\core\client_channel</Filter>
     </ClCompile>
   </ItemGroup>
 
@@ -13,8 +13,8 @@
     <Filter Include="test\core">
       <UniqueIdentifier>{5e9a3063-bec4-a26c-b10d-13c866d4e639}</UniqueIdentifier>
     </Filter>
-    <Filter Include="test\core\client_config">
-      <UniqueIdentifier>{65156042-def7-b09c-d76e-38ba78456f20}</UniqueIdentifier>
+    <Filter Include="test\core\client_channel">
+      <UniqueIdentifier>{1d9f3085-019b-9673-74b6-55a857b824af}</UniqueIdentifier>
     </Filter>
   </ItemGroup>
 </Project>