aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rw-r--r--BUILD13
-rw-r--r--Makefile124
-rw-r--r--binding.gyp3
-rw-r--r--build.yaml38
-rw-r--r--gRPC.podspec6
-rw-r--r--include/grpc/grpc.h5
-rw-r--r--include/grpc/support/avl.h91
-rw-r--r--src/core/client_config/connector.h2
-rw-r--r--src/core/client_config/default_initial_connect_string.c39
-rw-r--r--src/core/client_config/initial_connect_string.c53
-rw-r--r--src/core/client_config/initial_connect_string.h50
-rw-r--r--src/core/client_config/subchannel.c7
-rw-r--r--src/core/iomgr/pollset_posix.c1
-rw-r--r--src/core/iomgr/tcp_server.h3
-rw-r--r--src/core/iomgr/tcp_server_posix.c13
-rw-r--r--src/core/iomgr/tcp_server_windows.c10
-rw-r--r--src/core/profiling/basic_timers.c185
-rw-r--r--src/core/profiling/timers.h2
-rw-r--r--src/core/support/avl.c288
-rw-r--r--src/core/support/thd_posix.c9
-rw-r--r--src/core/surface/channel_create.c24
-rw-r--r--src/core/surface/secure_channel_create.c28
-rw-r--r--src/core/transport/chttp2/internal.h3
-rw-r--r--src/core/transport/chttp2/writing.c2
-rw-r--r--src/core/transport/chttp2_transport.c23
-rw-r--r--test/core/client_config/lb_policies_test.c13
-rw-r--r--test/core/client_config/set_initial_connect_string_test.c221
-rw-r--r--test/core/fling/client.c11
-rw-r--r--test/core/fling/server.c7
-rw-r--r--test/core/support/avl_test.c3671
-rw-r--r--test/core/util/reconnect_server.c51
-rw-r--r--test/core/util/reconnect_server.h6
-rw-r--r--test/core/util/test_tcp_server.c120
-rw-r--r--test/core/util/test_tcp_server.h55
-rw-r--r--test/cpp/interop/reconnect_interop_server.cc16
-rw-r--r--test/proto/benchmarks/stats.proto4
-rw-r--r--test/proto/metrics.proto3
-rw-r--r--tools/doxygen/Doxyfile.core1
-rw-r--r--tools/doxygen/Doxyfile.core.internal5
-rw-r--r--tools/http2_interop/frameheader.go13
-rw-r--r--tools/http2_interop/http1frame.go49
-rw-r--r--tools/http2_interop/http2interop.go178
-rw-r--r--tools/http2_interop/http2interop_test.go37
-rwxr-xr-xtools/profiling/latency_profile/profile_analyzer.py3
-rw-r--r--tools/run_tests/sources_and_headers.json61
-rw-r--r--tools/run_tests/tests.json36
-rw-r--r--vsprojects/buildtests_c.sln81
-rw-r--r--vsprojects/grpc.sln28
-rw-r--r--vsprojects/vcxproj/gpr/gpr.vcxproj3
-rw-r--r--vsprojects/vcxproj/gpr/gpr.vcxproj.filters6
-rw-r--r--vsprojects/vcxproj/grpc/grpc.vcxproj5
-rw-r--r--vsprojects/vcxproj/grpc/grpc.vcxproj.filters9
-rw-r--r--vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj5
-rw-r--r--vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj.filters9
-rw-r--r--vsprojects/vcxproj/reconnect_server/reconnect_server.vcxproj3
-rw-r--r--vsprojects/vcxproj/test/gpr_avl_test/gpr_avl_test.vcxproj178
-rw-r--r--vsprojects/vcxproj/test/gpr_avl_test/gpr_avl_test.vcxproj.filters21
-rw-r--r--vsprojects/vcxproj/test/reconnect_interop_server/reconnect_interop_server.vcxproj3
-rw-r--r--vsprojects/vcxproj/test/set_initial_connect_string_test/set_initial_connect_string_test.vcxproj187
-rw-r--r--vsprojects/vcxproj/test/set_initial_connect_string_test/set_initial_connect_string_test.vcxproj.filters21
-rw-r--r--vsprojects/vcxproj/test_tcp_server/test_tcp_server.vcxproj166
-rw-r--r--vsprojects/vcxproj/test_tcp_server/test_tcp_server.vcxproj.filters26
63 files changed, 6132 insertions, 203 deletions
diff --git a/.gitignore b/.gitignore
index 40f4c4734c..f059eca239 100644
--- a/.gitignore
+++ b/.gitignore
@@ -38,6 +38,7 @@ cache.mk
# Temporary test reports
report.xml
latency_trace.txt
+latency_trace.*.txt
# port server log
portlog.txt
diff --git a/BUILD b/BUILD
index 091669917b..f1395dafd8 100644
--- a/BUILD
+++ b/BUILD
@@ -57,6 +57,7 @@ cc_library(
"src/core/profiling/basic_timers.c",
"src/core/profiling/stap_timers.c",
"src/core/support/alloc.c",
+ "src/core/support/avl.c",
"src/core/support/cmdline.c",
"src/core/support/cpu_iphone.c",
"src/core/support/cpu_linux.c",
@@ -101,6 +102,7 @@ cc_library(
"include/grpc/support/atm_gcc_atomic.h",
"include/grpc/support/atm_gcc_sync.h",
"include/grpc/support/atm_win32.h",
+ "include/grpc/support/avl.h",
"include/grpc/support/cmdline.h",
"include/grpc/support/cpu.h",
"include/grpc/support/histogram.h",
@@ -163,6 +165,7 @@ cc_library(
"src/core/channel/subchannel_call_holder.h",
"src/core/client_config/client_config.h",
"src/core/client_config/connector.h",
+ "src/core/client_config/initial_connect_string.h",
"src/core/client_config/lb_policies/pick_first.h",
"src/core/client_config/lb_policies/round_robin.h",
"src/core/client_config/lb_policy.h",
@@ -302,6 +305,8 @@ cc_library(
"src/core/channel/subchannel_call_holder.c",
"src/core/client_config/client_config.c",
"src/core/client_config/connector.c",
+ "src/core/client_config/default_initial_connect_string.c",
+ "src/core/client_config/initial_connect_string.c",
"src/core/client_config/lb_policies/pick_first.c",
"src/core/client_config/lb_policies/round_robin.c",
"src/core/client_config/lb_policy.c",
@@ -456,6 +461,7 @@ cc_library(
"src/core/channel/subchannel_call_holder.h",
"src/core/client_config/client_config.h",
"src/core/client_config/connector.h",
+ "src/core/client_config/initial_connect_string.h",
"src/core/client_config/lb_policies/pick_first.h",
"src/core/client_config/lb_policies/round_robin.h",
"src/core/client_config/lb_policy.h",
@@ -575,6 +581,8 @@ cc_library(
"src/core/channel/subchannel_call_holder.c",
"src/core/client_config/client_config.c",
"src/core/client_config/connector.c",
+ "src/core/client_config/default_initial_connect_string.c",
+ "src/core/client_config/initial_connect_string.c",
"src/core/client_config/lb_policies/pick_first.c",
"src/core/client_config/lb_policies/round_robin.c",
"src/core/client_config/lb_policy.c",
@@ -981,6 +989,7 @@ objc_library(
"src/core/profiling/basic_timers.c",
"src/core/profiling/stap_timers.c",
"src/core/support/alloc.c",
+ "src/core/support/avl.c",
"src/core/support/cmdline.c",
"src/core/support/cpu_iphone.c",
"src/core/support/cpu_linux.c",
@@ -1025,6 +1034,7 @@ objc_library(
"include/grpc/support/atm_gcc_atomic.h",
"include/grpc/support/atm_gcc_sync.h",
"include/grpc/support/atm_win32.h",
+ "include/grpc/support/avl.h",
"include/grpc/support/cmdline.h",
"include/grpc/support/cpu.h",
"include/grpc/support/histogram.h",
@@ -1105,6 +1115,8 @@ objc_library(
"src/core/channel/subchannel_call_holder.c",
"src/core/client_config/client_config.c",
"src/core/client_config/connector.c",
+ "src/core/client_config/default_initial_connect_string.c",
+ "src/core/client_config/initial_connect_string.c",
"src/core/client_config/lb_policies/pick_first.c",
"src/core/client_config/lb_policies/round_robin.c",
"src/core/client_config/lb_policy.c",
@@ -1256,6 +1268,7 @@ objc_library(
"src/core/channel/subchannel_call_holder.h",
"src/core/client_config/client_config.h",
"src/core/client_config/connector.h",
+ "src/core/client_config/initial_connect_string.h",
"src/core/client_config/lb_policies/pick_first.h",
"src/core/client_config/lb_policies/round_robin.h",
"src/core/client_config/lb_policy.h",
diff --git a/Makefile b/Makefile
index f4a305f1f1..5363b4fe19 100644
--- a/Makefile
+++ b/Makefile
@@ -793,6 +793,7 @@ fling_stream_test: $(BINDIR)/$(CONFIG)/fling_stream_test
fling_test: $(BINDIR)/$(CONFIG)/fling_test
gen_hpack_tables: $(BINDIR)/$(CONFIG)/gen_hpack_tables
gen_legal_metadata_characters: $(BINDIR)/$(CONFIG)/gen_legal_metadata_characters
+gpr_avl_test: $(BINDIR)/$(CONFIG)/gpr_avl_test
gpr_cmdline_test: $(BINDIR)/$(CONFIG)/gpr_cmdline_test
gpr_cpu_test: $(BINDIR)/$(CONFIG)/gpr_cpu_test
gpr_env_test: $(BINDIR)/$(CONFIG)/gpr_env_test
@@ -841,6 +842,7 @@ murmur_hash_test: $(BINDIR)/$(CONFIG)/murmur_hash_test
no_server_test: $(BINDIR)/$(CONFIG)/no_server_test
resolve_address_test: $(BINDIR)/$(CONFIG)/resolve_address_test
secure_endpoint_test: $(BINDIR)/$(CONFIG)/secure_endpoint_test
+set_initial_connect_string_test: $(BINDIR)/$(CONFIG)/set_initial_connect_string_test
sockaddr_utils_test: $(BINDIR)/$(CONFIG)/sockaddr_utils_test
tcp_client_posix_test: $(BINDIR)/$(CONFIG)/tcp_client_posix_test
tcp_posix_test: $(BINDIR)/$(CONFIG)/tcp_posix_test
@@ -1843,7 +1845,7 @@ plugins: $(PROTOC_PLUGINS)
privatelibs: privatelibs_c privatelibs_cxx
-privatelibs_c: $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBDIR)/$(CONFIG)/libreconnect_server.a $(LIBDIR)/$(CONFIG)/libend2end_fixture_h2_compress.a $(LIBDIR)/$(CONFIG)/libend2end_fixture_h2_fakesec.a $(LIBDIR)/$(CONFIG)/libend2end_fixture_h2_full.a $(LIBDIR)/$(CONFIG)/libend2end_fixture_h2_full+poll.a $(LIBDIR)/$(CONFIG)/libend2end_fixture_h2_oauth2.a $(LIBDIR)/$(CONFIG)/libend2end_fixture_h2_proxy.a $(LIBDIR)/$(CONFIG)/libend2end_fixture_h2_sockpair.a $(LIBDIR)/$(CONFIG)/libend2end_fixture_h2_sockpair+trace.a $(LIBDIR)/$(CONFIG)/libend2end_fixture_h2_sockpair_1byte.a $(LIBDIR)/$(CONFIG)/libend2end_fixture_h2_ssl.a $(LIBDIR)/$(CONFIG)/libend2end_fixture_h2_ssl+poll.a $(LIBDIR)/$(CONFIG)/libend2end_fixture_h2_ssl_proxy.a $(LIBDIR)/$(CONFIG)/libend2end_fixture_h2_uchannel.a $(LIBDIR)/$(CONFIG)/libend2end_fixture_h2_uds.a $(LIBDIR)/$(CONFIG)/libend2end_fixture_h2_uds+poll.a $(LIBDIR)/$(CONFIG)/libend2end_test_bad_hostname.a $(LIBDIR)/$(CONFIG)/libend2end_test_binary_metadata.a $(LIBDIR)/$(CONFIG)/libend2end_test_call_creds.a $(LIBDIR)/$(CONFIG)/libend2end_test_cancel_after_accept.a $(LIBDIR)/$(CONFIG)/libend2end_test_cancel_after_client_done.a $(LIBDIR)/$(CONFIG)/libend2end_test_cancel_after_invoke.a $(LIBDIR)/$(CONFIG)/libend2end_test_cancel_before_invoke.a $(LIBDIR)/$(CONFIG)/libend2end_test_cancel_in_a_vacuum.a $(LIBDIR)/$(CONFIG)/libend2end_test_cancel_with_status.a $(LIBDIR)/$(CONFIG)/libend2end_test_census_simple_request.a $(LIBDIR)/$(CONFIG)/libend2end_test_channel_connectivity.a $(LIBDIR)/$(CONFIG)/libend2end_test_compressed_payload.a $(LIBDIR)/$(CONFIG)/libend2end_test_default_host.a $(LIBDIR)/$(CONFIG)/libend2end_test_disappearing_server.a $(LIBDIR)/$(CONFIG)/libend2end_test_empty_batch.a $(LIBDIR)/$(CONFIG)/libend2end_test_graceful_server_shutdown.a $(LIBDIR)/$(CONFIG)/libend2end_test_high_initial_seqno.a $(LIBDIR)/$(CONFIG)/libend2end_test_hpack_size.a $(LIBDIR)/$(CONFIG)/libend2end_test_invoke_large_request.a $(LIBDIR)/$(CONFIG)/libend2end_test_large_metadata.a $(LIBDIR)/$(CONFIG)/libend2end_test_max_concurrent_streams.a $(LIBDIR)/$(CONFIG)/libend2end_test_max_message_length.a $(LIBDIR)/$(CONFIG)/libend2end_test_metadata.a $(LIBDIR)/$(CONFIG)/libend2end_test_negative_deadline.a $(LIBDIR)/$(CONFIG)/libend2end_test_no_op.a $(LIBDIR)/$(CONFIG)/libend2end_test_payload.a $(LIBDIR)/$(CONFIG)/libend2end_test_ping_pong_streaming.a $(LIBDIR)/$(CONFIG)/libend2end_test_registered_call.a $(LIBDIR)/$(CONFIG)/libend2end_test_request_with_flags.a $(LIBDIR)/$(CONFIG)/libend2end_test_request_with_payload.a $(LIBDIR)/$(CONFIG)/libend2end_test_server_finishes_request.a $(LIBDIR)/$(CONFIG)/libend2end_test_shutdown_finishes_calls.a $(LIBDIR)/$(CONFIG)/libend2end_test_shutdown_finishes_tags.a $(LIBDIR)/$(CONFIG)/libend2end_test_simple_delayed_request.a $(LIBDIR)/$(CONFIG)/libend2end_test_simple_request.a $(LIBDIR)/$(CONFIG)/libend2end_test_trailing_metadata.a $(LIBDIR)/$(CONFIG)/libend2end_certs.a $(LIBDIR)/$(CONFIG)/libbad_client_test.a
+privatelibs_c: $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBDIR)/$(CONFIG)/libreconnect_server.a $(LIBDIR)/$(CONFIG)/libtest_tcp_server.a $(LIBDIR)/$(CONFIG)/libend2end_fixture_h2_compress.a $(LIBDIR)/$(CONFIG)/libend2end_fixture_h2_fakesec.a $(LIBDIR)/$(CONFIG)/libend2end_fixture_h2_full.a $(LIBDIR)/$(CONFIG)/libend2end_fixture_h2_full+poll.a $(LIBDIR)/$(CONFIG)/libend2end_fixture_h2_oauth2.a $(LIBDIR)/$(CONFIG)/libend2end_fixture_h2_proxy.a $(LIBDIR)/$(CONFIG)/libend2end_fixture_h2_sockpair.a $(LIBDIR)/$(CONFIG)/libend2end_fixture_h2_sockpair+trace.a $(LIBDIR)/$(CONFIG)/libend2end_fixture_h2_sockpair_1byte.a $(LIBDIR)/$(CONFIG)/libend2end_fixture_h2_ssl.a $(LIBDIR)/$(CONFIG)/libend2end_fixture_h2_ssl+poll.a $(LIBDIR)/$(CONFIG)/libend2end_fixture_h2_ssl_proxy.a $(LIBDIR)/$(CONFIG)/libend2end_fixture_h2_uchannel.a $(LIBDIR)/$(CONFIG)/libend2end_fixture_h2_uds.a $(LIBDIR)/$(CONFIG)/libend2end_fixture_h2_uds+poll.a $(LIBDIR)/$(CONFIG)/libend2end_test_bad_hostname.a $(LIBDIR)/$(CONFIG)/libend2end_test_binary_metadata.a $(LIBDIR)/$(CONFIG)/libend2end_test_call_creds.a $(LIBDIR)/$(CONFIG)/libend2end_test_cancel_after_accept.a $(LIBDIR)/$(CONFIG)/libend2end_test_cancel_after_client_done.a $(LIBDIR)/$(CONFIG)/libend2end_test_cancel_after_invoke.a $(LIBDIR)/$(CONFIG)/libend2end_test_cancel_before_invoke.a $(LIBDIR)/$(CONFIG)/libend2end_test_cancel_in_a_vacuum.a $(LIBDIR)/$(CONFIG)/libend2end_test_cancel_with_status.a $(LIBDIR)/$(CONFIG)/libend2end_test_census_simple_request.a $(LIBDIR)/$(CONFIG)/libend2end_test_channel_connectivity.a $(LIBDIR)/$(CONFIG)/libend2end_test_compressed_payload.a $(LIBDIR)/$(CONFIG)/libend2end_test_default_host.a $(LIBDIR)/$(CONFIG)/libend2end_test_disappearing_server.a $(LIBDIR)/$(CONFIG)/libend2end_test_empty_batch.a $(LIBDIR)/$(CONFIG)/libend2end_test_graceful_server_shutdown.a $(LIBDIR)/$(CONFIG)/libend2end_test_high_initial_seqno.a $(LIBDIR)/$(CONFIG)/libend2end_test_hpack_size.a $(LIBDIR)/$(CONFIG)/libend2end_test_invoke_large_request.a $(LIBDIR)/$(CONFIG)/libend2end_test_large_metadata.a $(LIBDIR)/$(CONFIG)/libend2end_test_max_concurrent_streams.a $(LIBDIR)/$(CONFIG)/libend2end_test_max_message_length.a $(LIBDIR)/$(CONFIG)/libend2end_test_metadata.a $(LIBDIR)/$(CONFIG)/libend2end_test_negative_deadline.a $(LIBDIR)/$(CONFIG)/libend2end_test_no_op.a $(LIBDIR)/$(CONFIG)/libend2end_test_payload.a $(LIBDIR)/$(CONFIG)/libend2end_test_ping_pong_streaming.a $(LIBDIR)/$(CONFIG)/libend2end_test_registered_call.a $(LIBDIR)/$(CONFIG)/libend2end_test_request_with_flags.a $(LIBDIR)/$(CONFIG)/libend2end_test_request_with_payload.a $(LIBDIR)/$(CONFIG)/libend2end_test_server_finishes_request.a $(LIBDIR)/$(CONFIG)/libend2end_test_shutdown_finishes_calls.a $(LIBDIR)/$(CONFIG)/libend2end_test_shutdown_finishes_tags.a $(LIBDIR)/$(CONFIG)/libend2end_test_simple_delayed_request.a $(LIBDIR)/$(CONFIG)/libend2end_test_simple_request.a $(LIBDIR)/$(CONFIG)/libend2end_test_trailing_metadata.a $(LIBDIR)/$(CONFIG)/libend2end_certs.a $(LIBDIR)/$(CONFIG)/libbad_client_test.a
pc_gpr: $(LIBDIR)/$(CONFIG)/pkgconfig/gpr.pc
pc_c: $(LIBDIR)/$(CONFIG)/pkgconfig/grpc.pc
@@ -1871,7 +1873,7 @@ endif
buildtests: buildtests_c buildtests_cxx buildtests_zookeeper
-buildtests_c: privatelibs_c $(BINDIR)/$(CONFIG)/alpn_test $(BINDIR)/$(CONFIG)/bin_encoder_test $(BINDIR)/$(CONFIG)/chttp2_hpack_encoder_test $(BINDIR)/$(CONFIG)/chttp2_status_conversion_test $(BINDIR)/$(CONFIG)/chttp2_stream_map_test $(BINDIR)/$(CONFIG)/compression_test $(BINDIR)/$(CONFIG)/dualstack_socket_test $(BINDIR)/$(CONFIG)/endpoint_pair_test $(BINDIR)/$(CONFIG)/fd_conservation_posix_test $(BINDIR)/$(CONFIG)/fd_posix_test $(BINDIR)/$(CONFIG)/fling_client $(BINDIR)/$(CONFIG)/fling_server $(BINDIR)/$(CONFIG)/fling_stream_test $(BINDIR)/$(CONFIG)/fling_test $(BINDIR)/$(CONFIG)/gpr_cmdline_test $(BINDIR)/$(CONFIG)/gpr_cpu_test $(BINDIR)/$(CONFIG)/gpr_env_test $(BINDIR)/$(CONFIG)/gpr_file_test $(BINDIR)/$(CONFIG)/gpr_histogram_test $(BINDIR)/$(CONFIG)/gpr_host_port_test $(BINDIR)/$(CONFIG)/gpr_log_test $(BINDIR)/$(CONFIG)/gpr_slice_buffer_test $(BINDIR)/$(CONFIG)/gpr_slice_test $(BINDIR)/$(CONFIG)/gpr_stack_lockfree_test $(BINDIR)/$(CONFIG)/gpr_string_test $(BINDIR)/$(CONFIG)/gpr_sync_test $(BINDIR)/$(CONFIG)/gpr_thd_test $(BINDIR)/$(CONFIG)/gpr_time_test $(BINDIR)/$(CONFIG)/gpr_tls_test $(BINDIR)/$(CONFIG)/gpr_useful_test $(BINDIR)/$(CONFIG)/grpc_auth_context_test $(BINDIR)/$(CONFIG)/grpc_base64_test $(BINDIR)/$(CONFIG)/grpc_byte_buffer_reader_test $(BINDIR)/$(CONFIG)/grpc_channel_args_test $(BINDIR)/$(CONFIG)/grpc_channel_stack_test $(BINDIR)/$(CONFIG)/grpc_completion_queue_test $(BINDIR)/$(CONFIG)/grpc_credentials_test $(BINDIR)/$(CONFIG)/grpc_json_token_test $(BINDIR)/$(CONFIG)/grpc_jwt_verifier_test $(BINDIR)/$(CONFIG)/grpc_security_connector_test $(BINDIR)/$(CONFIG)/hpack_parser_test $(BINDIR)/$(CONFIG)/hpack_table_test $(BINDIR)/$(CONFIG)/httpcli_format_request_test $(BINDIR)/$(CONFIG)/httpcli_parser_test $(BINDIR)/$(CONFIG)/httpcli_test $(BINDIR)/$(CONFIG)/json_rewrite $(BINDIR)/$(CONFIG)/json_rewrite_test $(BINDIR)/$(CONFIG)/json_test $(BINDIR)/$(CONFIG)/lame_client_test $(BINDIR)/$(CONFIG)/lb_policies_test $(BINDIR)/$(CONFIG)/message_compress_test $(BINDIR)/$(CONFIG)/multi_init_test $(BINDIR)/$(CONFIG)/multiple_server_queues_test $(BINDIR)/$(CONFIG)/murmur_hash_test $(BINDIR)/$(CONFIG)/no_server_test $(BINDIR)/$(CONFIG)/resolve_address_test $(BINDIR)/$(CONFIG)/secure_endpoint_test $(BINDIR)/$(CONFIG)/sockaddr_utils_test $(BINDIR)/$(CONFIG)/tcp_client_posix_test $(BINDIR)/$(CONFIG)/tcp_posix_test $(BINDIR)/$(CONFIG)/tcp_server_posix_test $(BINDIR)/$(CONFIG)/time_averaged_stats_test $(BINDIR)/$(CONFIG)/timeout_encoding_test $(BINDIR)/$(CONFIG)/timer_heap_test $(BINDIR)/$(CONFIG)/timer_list_test $(BINDIR)/$(CONFIG)/timers_test $(BINDIR)/$(CONFIG)/transport_metadata_test $(BINDIR)/$(CONFIG)/transport_security_test $(BINDIR)/$(CONFIG)/udp_server_test $(BINDIR)/$(CONFIG)/uri_parser_test $(BINDIR)/$(CONFIG)/workqueue_test $(BINDIR)/$(CONFIG)/h2_compress_bad_hostname_test $(BINDIR)/$(CONFIG)/h2_compress_binary_metadata_test $(BINDIR)/$(CONFIG)/h2_compress_call_creds_test $(BINDIR)/$(CONFIG)/h2_compress_cancel_after_accept_test $(BINDIR)/$(CONFIG)/h2_compress_cancel_after_client_done_test $(BINDIR)/$(CONFIG)/h2_compress_cancel_after_invoke_test $(BINDIR)/$(CONFIG)/h2_compress_cancel_before_invoke_test $(BINDIR)/$(CONFIG)/h2_compress_cancel_in_a_vacuum_test $(BINDIR)/$(CONFIG)/h2_compress_cancel_with_status_test $(BINDIR)/$(CONFIG)/h2_compress_census_simple_request_test $(BINDIR)/$(CONFIG)/h2_compress_channel_connectivity_test $(BINDIR)/$(CONFIG)/h2_compress_compressed_payload_test $(BINDIR)/$(CONFIG)/h2_compress_default_host_test $(BINDIR)/$(CONFIG)/h2_compress_disappearing_server_test $(BINDIR)/$(CONFIG)/h2_compress_empty_batch_test $(BINDIR)/$(CONFIG)/h2_compress_graceful_server_shutdown_test $(BINDIR)/$(CONFIG)/h2_compress_high_initial_seqno_test $(BINDIR)/$(CONFIG)/h2_compress_hpack_size_test $(BINDIR)/$(CONFIG)/h2_compress_invoke_large_request_test $(BINDIR)/$(CONFIG)/h2_compress_large_metadata_test $(BINDIR)/$(CONFIG)/h2_compress_max_concurrent_streams_test $(BINDIR)/$(CONFIG)/h2_compress_max_message_length_test $(BINDIR)/$(CONFIG)/h2_compress_metadata_test $(BINDIR)/$(CONFIG)/h2_compress_negative_deadline_test $(BINDIR)/$(CONFIG)/h2_compress_no_op_test $(BINDIR)/$(CONFIG)/h2_compress_payload_test $(BINDIR)/$(CONFIG)/h2_compress_ping_pong_streaming_test $(BINDIR)/$(CONFIG)/h2_compress_registered_call_test $(BINDIR)/$(CONFIG)/h2_compress_request_with_flags_test $(BINDIR)/$(CONFIG)/h2_compress_request_with_payload_test $(BINDIR)/$(CONFIG)/h2_compress_server_finishes_request_test $(BINDIR)/$(CONFIG)/h2_compress_shutdown_finishes_calls_test $(BINDIR)/$(CONFIG)/h2_compress_shutdown_finishes_tags_test $(BINDIR)/$(CONFIG)/h2_compress_simple_delayed_request_test $(BINDIR)/$(CONFIG)/h2_compress_simple_request_test $(BINDIR)/$(CONFIG)/h2_compress_trailing_metadata_test $(BINDIR)/$(CONFIG)/h2_fakesec_bad_hostname_test $(BINDIR)/$(CONFIG)/h2_fakesec_binary_metadata_test $(BINDIR)/$(CONFIG)/h2_fakesec_call_creds_test $(BINDIR)/$(CONFIG)/h2_fakesec_cancel_after_accept_test $(BINDIR)/$(CONFIG)/h2_fakesec_cancel_after_client_done_test $(BINDIR)/$(CONFIG)/h2_fakesec_cancel_after_invoke_test $(BINDIR)/$(CONFIG)/h2_fakesec_cancel_before_invoke_test $(BINDIR)/$(CONFIG)/h2_fakesec_cancel_in_a_vacuum_test $(BINDIR)/$(CONFIG)/h2_fakesec_cancel_with_status_test $(BINDIR)/$(CONFIG)/h2_fakesec_census_simple_request_test $(BINDIR)/$(CONFIG)/h2_fakesec_channel_connectivity_test $(BINDIR)/$(CONFIG)/h2_fakesec_compressed_payload_test $(BINDIR)/$(CONFIG)/h2_fakesec_default_host_test $(BINDIR)/$(CONFIG)/h2_fakesec_disappearing_server_test $(BINDIR)/$(CONFIG)/h2_fakesec_empty_batch_test $(BINDIR)/$(CONFIG)/h2_fakesec_graceful_server_shutdown_test $(BINDIR)/$(CONFIG)/h2_fakesec_high_initial_seqno_test $(BINDIR)/$(CONFIG)/h2_fakesec_hpack_size_test $(BINDIR)/$(CONFIG)/h2_fakesec_invoke_large_request_test $(BINDIR)/$(CONFIG)/h2_fakesec_large_metadata_test $(BINDIR)/$(CONFIG)/h2_fakesec_max_concurrent_streams_test $(BINDIR)/$(CONFIG)/h2_fakesec_max_message_length_test $(BINDIR)/$(CONFIG)/h2_fakesec_metadata_test $(BINDIR)/$(CONFIG)/h2_fakesec_negative_deadline_test $(BINDIR)/$(CONFIG)/h2_fakesec_no_op_test $(BINDIR)/$(CONFIG)/h2_fakesec_payload_test $(BINDIR)/$(CONFIG)/h2_fakesec_ping_pong_streaming_test $(BINDIR)/$(CONFIG)/h2_fakesec_registered_call_test $(BINDIR)/$(CONFIG)/h2_fakesec_request_with_flags_test $(BINDIR)/$(CONFIG)/h2_fakesec_request_with_payload_test $(BINDIR)/$(CONFIG)/h2_fakesec_server_finishes_request_test $(BINDIR)/$(CONFIG)/h2_fakesec_shutdown_finishes_calls_test $(BINDIR)/$(CONFIG)/h2_fakesec_shutdown_finishes_tags_test $(BINDIR)/$(CONFIG)/h2_fakesec_simple_delayed_request_test $(BINDIR)/$(CONFIG)/h2_fakesec_simple_request_test $(BINDIR)/$(CONFIG)/h2_fakesec_trailing_metadata_test $(BINDIR)/$(CONFIG)/h2_full_bad_hostname_test $(BINDIR)/$(CONFIG)/h2_full_binary_metadata_test $(BINDIR)/$(CONFIG)/h2_full_call_creds_test $(BINDIR)/$(CONFIG)/h2_full_cancel_after_accept_test $(BINDIR)/$(CONFIG)/h2_full_cancel_after_client_done_test $(BINDIR)/$(CONFIG)/h2_full_cancel_after_invoke_test $(BINDIR)/$(CONFIG)/h2_full_cancel_before_invoke_test $(BINDIR)/$(CONFIG)/h2_full_cancel_in_a_vacuum_test $(BINDIR)/$(CONFIG)/h2_full_cancel_with_status_test $(BINDIR)/$(CONFIG)/h2_full_census_simple_request_test $(BINDIR)/$(CONFIG)/h2_full_channel_connectivity_test $(BINDIR)/$(CONFIG)/h2_full_compressed_payload_test $(BINDIR)/$(CONFIG)/h2_full_default_host_test $(BINDIR)/$(CONFIG)/h2_full_disappearing_server_test $(BINDIR)/$(CONFIG)/h2_full_empty_batch_test $(BINDIR)/$(CONFIG)/h2_full_graceful_server_shutdown_test $(BINDIR)/$(CONFIG)/h2_full_high_initial_seqno_test $(BINDIR)/$(CONFIG)/h2_full_hpack_size_test $(BINDIR)/$(CONFIG)/h2_full_invoke_large_request_test $(BINDIR)/$(CONFIG)/h2_full_large_metadata_test $(BINDIR)/$(CONFIG)/h2_full_max_concurrent_streams_test $(BINDIR)/$(CONFIG)/h2_full_max_message_length_test $(BINDIR)/$(CONFIG)/h2_full_metadata_test $(BINDIR)/$(CONFIG)/h2_full_negative_deadline_test $(BINDIR)/$(CONFIG)/h2_full_no_op_test $(BINDIR)/$(CONFIG)/h2_full_payload_test $(BINDIR)/$(CONFIG)/h2_full_ping_pong_streaming_test $(BINDIR)/$(CONFIG)/h2_full_registered_call_test $(BINDIR)/$(CONFIG)/h2_full_request_with_flags_test $(BINDIR)/$(CONFIG)/h2_full_request_with_payload_test $(BINDIR)/$(CONFIG)/h2_full_server_finishes_request_test $(BINDIR)/$(CONFIG)/h2_full_shutdown_finishes_calls_test $(BINDIR)/$(CONFIG)/h2_full_shutdown_finishes_tags_test $(BINDIR)/$(CONFIG)/h2_full_simple_delayed_request_test $(BINDIR)/$(CONFIG)/h2_full_simple_request_test $(BINDIR)/$(CONFIG)/h2_full_trailing_metadata_test $(BINDIR)/$(CONFIG)/h2_full+poll_bad_hostname_test $(BINDIR)/$(CONFIG)/h2_full+poll_binary_metadata_test $(BINDIR)/$(CONFIG)/h2_full+poll_call_creds_test $(BINDIR)/$(CONFIG)/h2_full+poll_cancel_after_accept_test $(BINDIR)/$(CONFIG)/h2_full+poll_cancel_after_client_done_test $(BINDIR)/$(CONFIG)/h2_full+poll_cancel_after_invoke_test $(BINDIR)/$(CONFIG)/h2_full+poll_cancel_before_invoke_test $(BINDIR)/$(CONFIG)/h2_full+poll_cancel_in_a_vacuum_test $(BINDIR)/$(CONFIG)/h2_full+poll_cancel_with_status_test $(BINDIR)/$(CONFIG)/h2_full+poll_census_simple_request_test $(BINDIR)/$(CONFIG)/h2_full+poll_channel_connectivity_test $(BINDIR)/$(CONFIG)/h2_full+poll_compressed_payload_test $(BINDIR)/$(CONFIG)/h2_full+poll_default_host_test $(BINDIR)/$(CONFIG)/h2_full+poll_disappearing_server_test $(BINDIR)/$(CONFIG)/h2_full+poll_empty_batch_test $(BINDIR)/$(CONFIG)/h2_full+poll_graceful_server_shutdown_test $(BINDIR)/$(CONFIG)/h2_full+poll_high_initial_seqno_test $(BINDIR)/$(CONFIG)/h2_full+poll_hpack_size_test $(BINDIR)/$(CONFIG)/h2_full+poll_invoke_large_request_test $(BINDIR)/$(CONFIG)/h2_full+poll_large_metadata_test $(BINDIR)/$(CONFIG)/h2_full+poll_max_concurrent_streams_test $(BINDIR)/$(CONFIG)/h2_full+poll_max_message_length_test $(BINDIR)/$(CONFIG)/h2_full+poll_metadata_test $(BINDIR)/$(CONFIG)/h2_full+poll_negative_deadline_test $(BINDIR)/$(CONFIG)/h2_full+poll_no_op_test $(BINDIR)/$(CONFIG)/h2_full+poll_payload_test $(BINDIR)/$(CONFIG)/h2_full+poll_ping_pong_streaming_test $(BINDIR)/$(CONFIG)/h2_full+poll_registered_call_test $(BINDIR)/$(CONFIG)/h2_full+poll_request_with_flags_test $(BINDIR)/$(CONFIG)/h2_full+poll_request_with_payload_test $(BINDIR)/$(CONFIG)/h2_full+poll_server_finishes_request_test $(BINDIR)/$(CONFIG)/h2_full+poll_shutdown_finishes_calls_test $(BINDIR)/$(CONFIG)/h2_full+poll_shutdown_finishes_tags_test $(BINDIR)/$(CONFIG)/h2_full+poll_simple_delayed_request_test $(BINDIR)/$(CONFIG)/h2_full+poll_simple_request_test $(BINDIR)/$(CONFIG)/h2_full+poll_trailing_metadata_test $(BINDIR)/$(CONFIG)/h2_oauth2_bad_hostname_test $(BINDIR)/$(CONFIG)/h2_oauth2_binary_metadata_test $(BINDIR)/$(CONFIG)/h2_oauth2_call_creds_test $(BINDIR)/$(CONFIG)/h2_oauth2_cancel_after_accept_test $(BINDIR)/$(CONFIG)/h2_oauth2_cancel_after_client_done_test $(BINDIR)/$(CONFIG)/h2_oauth2_cancel_after_invoke_test $(BINDIR)/$(CONFIG)/h2_oauth2_cancel_before_invoke_test $(BINDIR)/$(CONFIG)/h2_oauth2_cancel_in_a_vacuum_test $(BINDIR)/$(CONFIG)/h2_oauth2_cancel_with_status_test $(BINDIR)/$(CONFIG)/h2_oauth2_census_simple_request_test $(BINDIR)/$(CONFIG)/h2_oauth2_channel_connectivity_test $(BINDIR)/$(CONFIG)/h2_oauth2_compressed_payload_test $(BINDIR)/$(CONFIG)/h2_oauth2_default_host_test $(BINDIR)/$(CONFIG)/h2_oauth2_disappearing_server_test $(BINDIR)/$(CONFIG)/h2_oauth2_empty_batch_test $(BINDIR)/$(CONFIG)/h2_oauth2_graceful_server_shutdown_test $(BINDIR)/$(CONFIG)/h2_oauth2_high_initial_seqno_test $(BINDIR)/$(CONFIG)/h2_oauth2_hpack_size_test $(BINDIR)/$(CONFIG)/h2_oauth2_invoke_large_request_test $(BINDIR)/$(CONFIG)/h2_oauth2_large_metadata_test $(BINDIR)/$(CONFIG)/h2_oauth2_max_concurrent_streams_test $(BINDIR)/$(CONFIG)/h2_oauth2_max_message_length_test $(BINDIR)/$(CONFIG)/h2_oauth2_metadata_test $(BINDIR)/$(CONFIG)/h2_oauth2_negative_deadline_test $(BINDIR)/$(CONFIG)/h2_oauth2_no_op_test $(BINDIR)/$(CONFIG)/h2_oauth2_payload_test $(BINDIR)/$(CONFIG)/h2_oauth2_ping_pong_streaming_test $(BINDIR)/$(CONFIG)/h2_oauth2_registered_call_test $(BINDIR)/$(CONFIG)/h2_oauth2_request_with_flags_test $(BINDIR)/$(CONFIG)/h2_oauth2_request_with_payload_test $(BINDIR)/$(CONFIG)/h2_oauth2_server_finishes_request_test $(BINDIR)/$(CONFIG)/h2_oauth2_shutdown_finishes_calls_test $(BINDIR)/$(CONFIG)/h2_oauth2_shutdown_finishes_tags_test $(BINDIR)/$(CONFIG)/h2_oauth2_simple_delayed_request_test $(BINDIR)/$(CONFIG)/h2_oauth2_simple_request_test $(BINDIR)/$(CONFIG)/h2_oauth2_trailing_metadata_test $(BINDIR)/$(CONFIG)/h2_proxy_bad_hostname_test $(BINDIR)/$(CONFIG)/h2_proxy_binary_metadata_test $(BINDIR)/$(CONFIG)/h2_proxy_call_creds_test $(BINDIR)/$(CONFIG)/h2_proxy_cancel_after_accept_test $(BINDIR)/$(CONFIG)/h2_proxy_cancel_after_client_done_test $(BINDIR)/$(CONFIG)/h2_proxy_cancel_after_invoke_test $(BINDIR)/$(CONFIG)/h2_proxy_cancel_before_invoke_test $(BINDIR)/$(CONFIG)/h2_proxy_cancel_in_a_vacuum_test $(BINDIR)/$(CONFIG)/h2_proxy_cancel_with_status_test $(BINDIR)/$(CONFIG)/h2_proxy_census_simple_request_test $(BINDIR)/$(CONFIG)/h2_proxy_default_host_test $(BINDIR)/$(CONFIG)/h2_proxy_disappearing_server_test $(BINDIR)/$(CONFIG)/h2_proxy_empty_batch_test $(BINDIR)/$(CONFIG)/h2_proxy_graceful_server_shutdown_test $(BINDIR)/$(CONFIG)/h2_proxy_high_initial_seqno_test $(BINDIR)/$(CONFIG)/h2_proxy_invoke_large_request_test $(BINDIR)/$(CONFIG)/h2_proxy_large_metadata_test $(BINDIR)/$(CONFIG)/h2_proxy_max_message_length_test $(BINDIR)/$(CONFIG)/h2_proxy_metadata_test $(BINDIR)/$(CONFIG)/h2_proxy_negative_deadline_test $(BINDIR)/$(CONFIG)/h2_proxy_no_op_test $(BINDIR)/$(CONFIG)/h2_proxy_payload_test $(BINDIR)/$(CONFIG)/h2_proxy_ping_pong_streaming_test $(BINDIR)/$(CONFIG)/h2_proxy_registered_call_test $(BINDIR)/$(CONFIG)/h2_proxy_request_with_payload_test $(BINDIR)/$(CONFIG)/h2_proxy_server_finishes_request_test $(BINDIR)/$(CONFIG)/h2_proxy_shutdown_finishes_calls_test $(BINDIR)/$(CONFIG)/h2_proxy_shutdown_finishes_tags_test $(BINDIR)/$(CONFIG)/h2_proxy_simple_delayed_request_test $(BINDIR)/$(CONFIG)/h2_proxy_simple_request_test $(BINDIR)/$(CONFIG)/h2_proxy_trailing_metadata_test $(BINDIR)/$(CONFIG)/h2_sockpair_bad_hostname_test $(BINDIR)/$(CONFIG)/h2_sockpair_binary_metadata_test $(BINDIR)/$(CONFIG)/h2_sockpair_call_creds_test $(BINDIR)/$(CONFIG)/h2_sockpair_cancel_after_accept_test $(BINDIR)/$(CONFIG)/h2_sockpair_cancel_after_client_done_test $(BINDIR)/$(CONFIG)/h2_sockpair_cancel_after_invoke_test $(BINDIR)/$(CONFIG)/h2_sockpair_cancel_before_invoke_test $(BINDIR)/$(CONFIG)/h2_sockpair_cancel_in_a_vacuum_test $(BINDIR)/$(CONFIG)/h2_sockpair_cancel_with_status_test $(BINDIR)/$(CONFIG)/h2_sockpair_census_simple_request_test $(BINDIR)/$(CONFIG)/h2_sockpair_compressed_payload_test $(BINDIR)/$(CONFIG)/h2_sockpair_empty_batch_test $(BINDIR)/$(CONFIG)/h2_sockpair_graceful_server_shutdown_test $(BINDIR)/$(CONFIG)/h2_sockpair_high_initial_seqno_test $(BINDIR)/$(CONFIG)/h2_sockpair_hpack_size_test $(BINDIR)/$(CONFIG)/h2_sockpair_invoke_large_request_test $(BINDIR)/$(CONFIG)/h2_sockpair_large_metadata_test $(BINDIR)/$(CONFIG)/h2_sockpair_max_concurrent_streams_test $(BINDIR)/$(CONFIG)/h2_sockpair_max_message_length_test $(BINDIR)/$(CONFIG)/h2_sockpair_metadata_test $(BINDIR)/$(CONFIG)/h2_sockpair_negative_deadline_test $(BINDIR)/$(CONFIG)/h2_sockpair_no_op_test $(BINDIR)/$(CONFIG)/h2_sockpair_payload_test $(BINDIR)/$(CONFIG)/h2_sockpair_ping_pong_streaming_test $(BINDIR)/$(CONFIG)/h2_sockpair_registered_call_test $(BINDIR)/$(CONFIG)/h2_sockpair_request_with_flags_test $(BINDIR)/$(CONFIG)/h2_sockpair_request_with_payload_test $(BINDIR)/$(CONFIG)/h2_sockpair_server_finishes_request_test $(BINDIR)/$(CONFIG)/h2_sockpair_shutdown_finishes_calls_test $(BINDIR)/$(CONFIG)/h2_sockpair_shutdown_finishes_tags_test $(BINDIR)/$(CONFIG)/h2_sockpair_simple_request_test $(BINDIR)/$(CONFIG)/h2_sockpair_trailing_metadata_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_bad_hostname_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_binary_metadata_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_call_creds_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_cancel_after_accept_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_cancel_after_client_done_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_cancel_after_invoke_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_cancel_before_invoke_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_cancel_in_a_vacuum_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_cancel_with_status_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_census_simple_request_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_compressed_payload_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_empty_batch_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_graceful_server_shutdown_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_high_initial_seqno_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_invoke_large_request_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_large_metadata_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_max_concurrent_streams_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_max_message_length_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_metadata_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_negative_deadline_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_no_op_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_payload_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_ping_pong_streaming_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_registered_call_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_request_with_flags_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_request_with_payload_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_server_finishes_request_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_shutdown_finishes_calls_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_shutdown_finishes_tags_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_simple_request_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_trailing_metadata_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_bad_hostname_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_binary_metadata_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_call_creds_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_cancel_after_accept_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_cancel_after_client_done_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_cancel_after_invoke_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_cancel_before_invoke_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_cancel_in_a_vacuum_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_cancel_with_status_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_census_simple_request_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_compressed_payload_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_empty_batch_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_graceful_server_shutdown_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_high_initial_seqno_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_hpack_size_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_invoke_large_request_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_large_metadata_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_max_concurrent_streams_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_max_message_length_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_metadata_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_negative_deadline_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_no_op_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_payload_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_ping_pong_streaming_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_registered_call_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_request_with_flags_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_request_with_payload_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_server_finishes_request_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_shutdown_finishes_calls_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_shutdown_finishes_tags_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_simple_request_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_trailing_metadata_test $(BINDIR)/$(CONFIG)/h2_ssl_bad_hostname_test $(BINDIR)/$(CONFIG)/h2_ssl_binary_metadata_test $(BINDIR)/$(CONFIG)/h2_ssl_call_creds_test $(BINDIR)/$(CONFIG)/h2_ssl_cancel_after_accept_test $(BINDIR)/$(CONFIG)/h2_ssl_cancel_after_client_done_test $(BINDIR)/$(CONFIG)/h2_ssl_cancel_after_invoke_test $(BINDIR)/$(CONFIG)/h2_ssl_cancel_before_invoke_test $(BINDIR)/$(CONFIG)/h2_ssl_cancel_in_a_vacuum_test $(BINDIR)/$(CONFIG)/h2_ssl_cancel_with_status_test $(BINDIR)/$(CONFIG)/h2_ssl_census_simple_request_test $(BINDIR)/$(CONFIG)/h2_ssl_channel_connectivity_test $(BINDIR)/$(CONFIG)/h2_ssl_compressed_payload_test $(BINDIR)/$(CONFIG)/h2_ssl_default_host_test $(BINDIR)/$(CONFIG)/h2_ssl_disappearing_server_test $(BINDIR)/$(CONFIG)/h2_ssl_empty_batch_test $(BINDIR)/$(CONFIG)/h2_ssl_graceful_server_shutdown_test $(BINDIR)/$(CONFIG)/h2_ssl_high_initial_seqno_test $(BINDIR)/$(CONFIG)/h2_ssl_hpack_size_test $(BINDIR)/$(CONFIG)/h2_ssl_invoke_large_request_test $(BINDIR)/$(CONFIG)/h2_ssl_large_metadata_test $(BINDIR)/$(CONFIG)/h2_ssl_max_concurrent_streams_test $(BINDIR)/$(CONFIG)/h2_ssl_max_message_length_test $(BINDIR)/$(CONFIG)/h2_ssl_metadata_test $(BINDIR)/$(CONFIG)/h2_ssl_negative_deadline_test $(BINDIR)/$(CONFIG)/h2_ssl_no_op_test $(BINDIR)/$(CONFIG)/h2_ssl_payload_test $(BINDIR)/$(CONFIG)/h2_ssl_ping_pong_streaming_test $(BINDIR)/$(CONFIG)/h2_ssl_registered_call_test $(BINDIR)/$(CONFIG)/h2_ssl_request_with_flags_test $(BINDIR)/$(CONFIG)/h2_ssl_request_with_payload_test $(BINDIR)/$(CONFIG)/h2_ssl_server_finishes_request_test $(BINDIR)/$(CONFIG)/h2_ssl_shutdown_finishes_calls_test $(BINDIR)/$(CONFIG)/h2_ssl_shutdown_finishes_tags_test $(BINDIR)/$(CONFIG)/h2_ssl_simple_delayed_request_test $(BINDIR)/$(CONFIG)/h2_ssl_simple_request_test $(BINDIR)/$(CONFIG)/h2_ssl_trailing_metadata_test $(BINDIR)/$(CONFIG)/h2_ssl+poll_bad_hostname_test $(BINDIR)/$(CONFIG)/h2_ssl+poll_binary_metadata_test $(BINDIR)/$(CONFIG)/h2_ssl+poll_call_creds_test $(BINDIR)/$(CONFIG)/h2_ssl+poll_cancel_after_accept_test $(BINDIR)/$(CONFIG)/h2_ssl+poll_cancel_after_client_done_test $(BINDIR)/$(CONFIG)/h2_ssl+poll_cancel_after_invoke_test $(BINDIR)/$(CONFIG)/h2_ssl+poll_cancel_before_invoke_test $(BINDIR)/$(CONFIG)/h2_ssl+poll_cancel_in_a_vacuum_test $(BINDIR)/$(CONFIG)/h2_ssl+poll_cancel_with_status_test $(BINDIR)/$(CONFIG)/h2_ssl+poll_census_simple_request_test $(BINDIR)/$(CONFIG)/h2_ssl+poll_channel_connectivity_test $(BINDIR)/$(CONFIG)/h2_ssl+poll_compressed_payload_test $(BINDIR)/$(CONFIG)/h2_ssl+poll_default_host_test $(BINDIR)/$(CONFIG)/h2_ssl+poll_disappearing_server_test $(BINDIR)/$(CONFIG)/h2_ssl+poll_empty_batch_test $(BINDIR)/$(CONFIG)/h2_ssl+poll_graceful_server_shutdown_test $(BINDIR)/$(CONFIG)/h2_ssl+poll_high_initial_seqno_test $(BINDIR)/$(CONFIG)/h2_ssl+poll_hpack_size_test $(BINDIR)/$(CONFIG)/h2_ssl+poll_invoke_large_request_test $(BINDIR)/$(CONFIG)/h2_ssl+poll_large_metadata_test $(BINDIR)/$(CONFIG)/h2_ssl+poll_max_concurrent_streams_test $(BINDIR)/$(CONFIG)/h2_ssl+poll_max_message_length_test $(BINDIR)/$(CONFIG)/h2_ssl+poll_metadata_test $(BINDIR)/$(CONFIG)/h2_ssl+poll_negative_deadline_test $(BINDIR)/$(CONFIG)/h2_ssl+poll_no_op_test $(BINDIR)/$(CONFIG)/h2_ssl+poll_payload_test $(BINDIR)/$(CONFIG)/h2_ssl+poll_ping_pong_streaming_test $(BINDIR)/$(CONFIG)/h2_ssl+poll_registered_call_test $(BINDIR)/$(CONFIG)/h2_ssl+poll_request_with_flags_test $(BINDIR)/$(CONFIG)/h2_ssl+poll_request_with_payload_test $(BINDIR)/$(CONFIG)/h2_ssl+poll_server_finishes_request_test $(BINDIR)/$(CONFIG)/h2_ssl+poll_shutdown_finishes_calls_test $(BINDIR)/$(CONFIG)/h2_ssl+poll_shutdown_finishes_tags_test $(BINDIR)/$(CONFIG)/h2_ssl+poll_simple_delayed_request_test $(BINDIR)/$(CONFIG)/h2_ssl+poll_simple_request_test $(BINDIR)/$(CONFIG)/h2_ssl+poll_trailing_metadata_test $(BINDIR)/$(CONFIG)/h2_ssl_proxy_bad_hostname_test $(BINDIR)/$(CONFIG)/h2_ssl_proxy_binary_metadata_test $(BINDIR)/$(CONFIG)/h2_ssl_proxy_call_creds_test $(BINDIR)/$(CONFIG)/h2_ssl_proxy_cancel_after_accept_test $(BINDIR)/$(CONFIG)/h2_ssl_proxy_cancel_after_client_done_test $(BINDIR)/$(CONFIG)/h2_ssl_proxy_cancel_after_invoke_test $(BINDIR)/$(CONFIG)/h2_ssl_proxy_cancel_before_invoke_test $(BINDIR)/$(CONFIG)/h2_ssl_proxy_cancel_in_a_vacuum_test $(BINDIR)/$(CONFIG)/h2_ssl_proxy_cancel_with_status_test $(BINDIR)/$(CONFIG)/h2_ssl_proxy_census_simple_request_test $(BINDIR)/$(CONFIG)/h2_ssl_proxy_default_host_test $(BINDIR)/$(CONFIG)/h2_ssl_proxy_disappearing_server_test $(BINDIR)/$(CONFIG)/h2_ssl_proxy_empty_batch_test $(BINDIR)/$(CONFIG)/h2_ssl_proxy_graceful_server_shutdown_test $(BINDIR)/$(CONFIG)/h2_ssl_proxy_high_initial_seqno_test $(BINDIR)/$(CONFIG)/h2_ssl_proxy_invoke_large_request_test $(BINDIR)/$(CONFIG)/h2_ssl_proxy_large_metadata_test $(BINDIR)/$(CONFIG)/h2_ssl_proxy_max_message_length_test $(BINDIR)/$(CONFIG)/h2_ssl_proxy_metadata_test $(BINDIR)/$(CONFIG)/h2_ssl_proxy_negative_deadline_test $(BINDIR)/$(CONFIG)/h2_ssl_proxy_no_op_test $(BINDIR)/$(CONFIG)/h2_ssl_proxy_payload_test $(BINDIR)/$(CONFIG)/h2_ssl_proxy_ping_pong_streaming_test $(BINDIR)/$(CONFIG)/h2_ssl_proxy_registered_call_test $(BINDIR)/$(CONFIG)/h2_ssl_proxy_request_with_payload_test $(BINDIR)/$(CONFIG)/h2_ssl_proxy_server_finishes_request_test $(BINDIR)/$(CONFIG)/h2_ssl_proxy_shutdown_finishes_calls_test $(BINDIR)/$(CONFIG)/h2_ssl_proxy_shutdown_finishes_tags_test $(BINDIR)/$(CONFIG)/h2_ssl_proxy_simple_delayed_request_test $(BINDIR)/$(CONFIG)/h2_ssl_proxy_simple_request_test $(BINDIR)/$(CONFIG)/h2_ssl_proxy_trailing_metadata_test $(BINDIR)/$(CONFIG)/h2_uchannel_bad_hostname_test $(BINDIR)/$(CONFIG)/h2_uchannel_binary_metadata_test $(BINDIR)/$(CONFIG)/h2_uchannel_call_creds_test $(BINDIR)/$(CONFIG)/h2_uchannel_cancel_after_accept_test $(BINDIR)/$(CONFIG)/h2_uchannel_cancel_after_client_done_test $(BINDIR)/$(CONFIG)/h2_uchannel_cancel_after_invoke_test $(BINDIR)/$(CONFIG)/h2_uchannel_cancel_before_invoke_test $(BINDIR)/$(CONFIG)/h2_uchannel_cancel_in_a_vacuum_test $(BINDIR)/$(CONFIG)/h2_uchannel_cancel_with_status_test $(BINDIR)/$(CONFIG)/h2_uchannel_census_simple_request_test $(BINDIR)/$(CONFIG)/h2_uchannel_channel_connectivity_test $(BINDIR)/$(CONFIG)/h2_uchannel_compressed_payload_test $(BINDIR)/$(CONFIG)/h2_uchannel_default_host_test $(BINDIR)/$(CONFIG)/h2_uchannel_disappearing_server_test $(BINDIR)/$(CONFIG)/h2_uchannel_empty_batch_test $(BINDIR)/$(CONFIG)/h2_uchannel_graceful_server_shutdown_test $(BINDIR)/$(CONFIG)/h2_uchannel_high_initial_seqno_test $(BINDIR)/$(CONFIG)/h2_uchannel_hpack_size_test $(BINDIR)/$(CONFIG)/h2_uchannel_invoke_large_request_test $(BINDIR)/$(CONFIG)/h2_uchannel_large_metadata_test $(BINDIR)/$(CONFIG)/h2_uchannel_max_concurrent_streams_test $(BINDIR)/$(CONFIG)/h2_uchannel_max_message_length_test $(BINDIR)/$(CONFIG)/h2_uchannel_metadata_test $(BINDIR)/$(CONFIG)/h2_uchannel_negative_deadline_test $(BINDIR)/$(CONFIG)/h2_uchannel_no_op_test $(BINDIR)/$(CONFIG)/h2_uchannel_payload_test $(BINDIR)/$(CONFIG)/h2_uchannel_ping_pong_streaming_test $(BINDIR)/$(CONFIG)/h2_uchannel_registered_call_test $(BINDIR)/$(CONFIG)/h2_uchannel_request_with_flags_test $(BINDIR)/$(CONFIG)/h2_uchannel_request_with_payload_test $(BINDIR)/$(CONFIG)/h2_uchannel_server_finishes_request_test $(BINDIR)/$(CONFIG)/h2_uchannel_shutdown_finishes_calls_test $(BINDIR)/$(CONFIG)/h2_uchannel_shutdown_finishes_tags_test $(BINDIR)/$(CONFIG)/h2_uchannel_simple_delayed_request_test $(BINDIR)/$(CONFIG)/h2_uchannel_simple_request_test $(BINDIR)/$(CONFIG)/h2_uchannel_trailing_metadata_test $(BINDIR)/$(CONFIG)/h2_uds_bad_hostname_test $(BINDIR)/$(CONFIG)/h2_uds_binary_metadata_test $(BINDIR)/$(CONFIG)/h2_uds_call_creds_test $(BINDIR)/$(CONFIG)/h2_uds_cancel_after_accept_test $(BINDIR)/$(CONFIG)/h2_uds_cancel_after_client_done_test $(BINDIR)/$(CONFIG)/h2_uds_cancel_after_invoke_test $(BINDIR)/$(CONFIG)/h2_uds_cancel_before_invoke_test $(BINDIR)/$(CONFIG)/h2_uds_cancel_in_a_vacuum_test $(BINDIR)/$(CONFIG)/h2_uds_cancel_with_status_test $(BINDIR)/$(CONFIG)/h2_uds_census_simple_request_test $(BINDIR)/$(CONFIG)/h2_uds_channel_connectivity_test $(BINDIR)/$(CONFIG)/h2_uds_compressed_payload_test $(BINDIR)/$(CONFIG)/h2_uds_disappearing_server_test $(BINDIR)/$(CONFIG)/h2_uds_empty_batch_test $(BINDIR)/$(CONFIG)/h2_uds_graceful_server_shutdown_test $(BINDIR)/$(CONFIG)/h2_uds_high_initial_seqno_test $(BINDIR)/$(CONFIG)/h2_uds_hpack_size_test $(BINDIR)/$(CONFIG)/h2_uds_invoke_large_request_test $(BINDIR)/$(CONFIG)/h2_uds_large_metadata_test $(BINDIR)/$(CONFIG)/h2_uds_max_concurrent_streams_test $(BINDIR)/$(CONFIG)/h2_uds_max_message_length_test $(BINDIR)/$(CONFIG)/h2_uds_metadata_test $(BINDIR)/$(CONFIG)/h2_uds_negative_deadline_test $(BINDIR)/$(CONFIG)/h2_uds_no_op_test $(BINDIR)/$(CONFIG)/h2_uds_payload_test $(BINDIR)/$(CONFIG)/h2_uds_ping_pong_streaming_test $(BINDIR)/$(CONFIG)/h2_uds_registered_call_test $(BINDIR)/$(CONFIG)/h2_uds_request_with_flags_test $(BINDIR)/$(CONFIG)/h2_uds_request_with_payload_test $(BINDIR)/$(CONFIG)/h2_uds_server_finishes_request_test $(BINDIR)/$(CONFIG)/h2_uds_shutdown_finishes_calls_test $(BINDIR)/$(CONFIG)/h2_uds_shutdown_finishes_tags_test $(BINDIR)/$(CONFIG)/h2_uds_simple_delayed_request_test $(BINDIR)/$(CONFIG)/h2_uds_simple_request_test $(BINDIR)/$(CONFIG)/h2_uds_trailing_metadata_test $(BINDIR)/$(CONFIG)/h2_uds+poll_bad_hostname_test $(BINDIR)/$(CONFIG)/h2_uds+poll_binary_metadata_test $(BINDIR)/$(CONFIG)/h2_uds+poll_call_creds_test $(BINDIR)/$(CONFIG)/h2_uds+poll_cancel_after_accept_test $(BINDIR)/$(CONFIG)/h2_uds+poll_cancel_after_client_done_test $(BINDIR)/$(CONFIG)/h2_uds+poll_cancel_after_invoke_test $(BINDIR)/$(CONFIG)/h2_uds+poll_cancel_before_invoke_test $(BINDIR)/$(CONFIG)/h2_uds+poll_cancel_in_a_vacuum_test $(BINDIR)/$(CONFIG)/h2_uds+poll_cancel_with_status_test $(BINDIR)/$(CONFIG)/h2_uds+poll_census_simple_request_test $(BINDIR)/$(CONFIG)/h2_uds+poll_channel_connectivity_test $(BINDIR)/$(CONFIG)/h2_uds+poll_compressed_payload_test $(BINDIR)/$(CONFIG)/h2_uds+poll_disappearing_server_test $(BINDIR)/$(CONFIG)/h2_uds+poll_empty_batch_test $(BINDIR)/$(CONFIG)/h2_uds+poll_graceful_server_shutdown_test $(BINDIR)/$(CONFIG)/h2_uds+poll_high_initial_seqno_test $(BINDIR)/$(CONFIG)/h2_uds+poll_hpack_size_test $(BINDIR)/$(CONFIG)/h2_uds+poll_invoke_large_request_test $(BINDIR)/$(CONFIG)/h2_uds+poll_large_metadata_test $(BINDIR)/$(CONFIG)/h2_uds+poll_max_concurrent_streams_test $(BINDIR)/$(CONFIG)/h2_uds+poll_max_message_length_test $(BINDIR)/$(CONFIG)/h2_uds+poll_metadata_test $(BINDIR)/$(CONFIG)/h2_uds+poll_negative_deadline_test $(BINDIR)/$(CONFIG)/h2_uds+poll_no_op_test $(BINDIR)/$(CONFIG)/h2_uds+poll_payload_test $(BINDIR)/$(CONFIG)/h2_uds+poll_ping_pong_streaming_test $(BINDIR)/$(CONFIG)/h2_uds+poll_registered_call_test $(BINDIR)/$(CONFIG)/h2_uds+poll_request_with_flags_test $(BINDIR)/$(CONFIG)/h2_uds+poll_request_with_payload_test $(BINDIR)/$(CONFIG)/h2_uds+poll_server_finishes_request_test $(BINDIR)/$(CONFIG)/h2_uds+poll_shutdown_finishes_calls_test $(BINDIR)/$(CONFIG)/h2_uds+poll_shutdown_finishes_tags_test $(BINDIR)/$(CONFIG)/h2_uds+poll_simple_delayed_request_test $(BINDIR)/$(CONFIG)/h2_uds+poll_simple_request_test $(BINDIR)/$(CONFIG)/h2_uds+poll_trailing_metadata_test $(BINDIR)/$(CONFIG)/h2_compress_bad_hostname_nosec_test $(BINDIR)/$(CONFIG)/h2_compress_binary_metadata_nosec_test $(BINDIR)/$(CONFIG)/h2_compress_cancel_after_accept_nosec_test $(BINDIR)/$(CONFIG)/h2_compress_cancel_after_client_done_nosec_test $(BINDIR)/$(CONFIG)/h2_compress_cancel_after_invoke_nosec_test $(BINDIR)/$(CONFIG)/h2_compress_cancel_before_invoke_nosec_test $(BINDIR)/$(CONFIG)/h2_compress_cancel_in_a_vacuum_nosec_test $(BINDIR)/$(CONFIG)/h2_compress_cancel_with_status_nosec_test $(BINDIR)/$(CONFIG)/h2_compress_census_simple_request_nosec_test $(BINDIR)/$(CONFIG)/h2_compress_channel_connectivity_nosec_test $(BINDIR)/$(CONFIG)/h2_compress_compressed_payload_nosec_test $(BINDIR)/$(CONFIG)/h2_compress_default_host_nosec_test $(BINDIR)/$(CONFIG)/h2_compress_disappearing_server_nosec_test $(BINDIR)/$(CONFIG)/h2_compress_empty_batch_nosec_test $(BINDIR)/$(CONFIG)/h2_compress_graceful_server_shutdown_nosec_test $(BINDIR)/$(CONFIG)/h2_compress_high_initial_seqno_nosec_test $(BINDIR)/$(CONFIG)/h2_compress_hpack_size_nosec_test $(BINDIR)/$(CONFIG)/h2_compress_invoke_large_request_nosec_test $(BINDIR)/$(CONFIG)/h2_compress_large_metadata_nosec_test $(BINDIR)/$(CONFIG)/h2_compress_max_concurrent_streams_nosec_test $(BINDIR)/$(CONFIG)/h2_compress_max_message_length_nosec_test $(BINDIR)/$(CONFIG)/h2_compress_metadata_nosec_test $(BINDIR)/$(CONFIG)/h2_compress_negative_deadline_nosec_test $(BINDIR)/$(CONFIG)/h2_compress_no_op_nosec_test $(BINDIR)/$(CONFIG)/h2_compress_payload_nosec_test $(BINDIR)/$(CONFIG)/h2_compress_ping_pong_streaming_nosec_test $(BINDIR)/$(CONFIG)/h2_compress_registered_call_nosec_test $(BINDIR)/$(CONFIG)/h2_compress_request_with_flags_nosec_test $(BINDIR)/$(CONFIG)/h2_compress_request_with_payload_nosec_test $(BINDIR)/$(CONFIG)/h2_compress_server_finishes_request_nosec_test $(BINDIR)/$(CONFIG)/h2_compress_shutdown_finishes_calls_nosec_test $(BINDIR)/$(CONFIG)/h2_compress_shutdown_finishes_tags_nosec_test $(BINDIR)/$(CONFIG)/h2_compress_simple_delayed_request_nosec_test $(BINDIR)/$(CONFIG)/h2_compress_simple_request_nosec_test $(BINDIR)/$(CONFIG)/h2_compress_trailing_metadata_nosec_test $(BINDIR)/$(CONFIG)/h2_full_bad_hostname_nosec_test $(BINDIR)/$(CONFIG)/h2_full_binary_metadata_nosec_test $(BINDIR)/$(CONFIG)/h2_full_cancel_after_accept_nosec_test $(BINDIR)/$(CONFIG)/h2_full_cancel_after_client_done_nosec_test $(BINDIR)/$(CONFIG)/h2_full_cancel_after_invoke_nosec_test $(BINDIR)/$(CONFIG)/h2_full_cancel_before_invoke_nosec_test $(BINDIR)/$(CONFIG)/h2_full_cancel_in_a_vacuum_nosec_test $(BINDIR)/$(CONFIG)/h2_full_cancel_with_status_nosec_test $(BINDIR)/$(CONFIG)/h2_full_census_simple_request_nosec_test $(BINDIR)/$(CONFIG)/h2_full_channel_connectivity_nosec_test $(BINDIR)/$(CONFIG)/h2_full_compressed_payload_nosec_test $(BINDIR)/$(CONFIG)/h2_full_default_host_nosec_test $(BINDIR)/$(CONFIG)/h2_full_disappearing_server_nosec_test $(BINDIR)/$(CONFIG)/h2_full_empty_batch_nosec_test $(BINDIR)/$(CONFIG)/h2_full_graceful_server_shutdown_nosec_test $(BINDIR)/$(CONFIG)/h2_full_high_initial_seqno_nosec_test $(BINDIR)/$(CONFIG)/h2_full_hpack_size_nosec_test $(BINDIR)/$(CONFIG)/h2_full_invoke_large_request_nosec_test $(BINDIR)/$(CONFIG)/h2_full_large_metadata_nosec_test $(BINDIR)/$(CONFIG)/h2_full_max_concurrent_streams_nosec_test $(BINDIR)/$(CONFIG)/h2_full_max_message_length_nosec_test $(BINDIR)/$(CONFIG)/h2_full_metadata_nosec_test $(BINDIR)/$(CONFIG)/h2_full_negative_deadline_nosec_test $(BINDIR)/$(CONFIG)/h2_full_no_op_nosec_test $(BINDIR)/$(CONFIG)/h2_full_payload_nosec_test $(BINDIR)/$(CONFIG)/h2_full_ping_pong_streaming_nosec_test $(BINDIR)/$(CONFIG)/h2_full_registered_call_nosec_test $(BINDIR)/$(CONFIG)/h2_full_request_with_flags_nosec_test $(BINDIR)/$(CONFIG)/h2_full_request_with_payload_nosec_test $(BINDIR)/$(CONFIG)/h2_full_server_finishes_request_nosec_test $(BINDIR)/$(CONFIG)/h2_full_shutdown_finishes_calls_nosec_test $(BINDIR)/$(CONFIG)/h2_full_shutdown_finishes_tags_nosec_test $(BINDIR)/$(CONFIG)/h2_full_simple_delayed_request_nosec_test $(BINDIR)/$(CONFIG)/h2_full_simple_request_nosec_test $(BINDIR)/$(CONFIG)/h2_full_trailing_metadata_nosec_test $(BINDIR)/$(CONFIG)/h2_full+poll_bad_hostname_nosec_test $(BINDIR)/$(CONFIG)/h2_full+poll_binary_metadata_nosec_test $(BINDIR)/$(CONFIG)/h2_full+poll_cancel_after_accept_nosec_test $(BINDIR)/$(CONFIG)/h2_full+poll_cancel_after_client_done_nosec_test $(BINDIR)/$(CONFIG)/h2_full+poll_cancel_after_invoke_nosec_test $(BINDIR)/$(CONFIG)/h2_full+poll_cancel_before_invoke_nosec_test $(BINDIR)/$(CONFIG)/h2_full+poll_cancel_in_a_vacuum_nosec_test $(BINDIR)/$(CONFIG)/h2_full+poll_cancel_with_status_nosec_test $(BINDIR)/$(CONFIG)/h2_full+poll_census_simple_request_nosec_test $(BINDIR)/$(CONFIG)/h2_full+poll_channel_connectivity_nosec_test $(BINDIR)/$(CONFIG)/h2_full+poll_compressed_payload_nosec_test $(BINDIR)/$(CONFIG)/h2_full+poll_default_host_nosec_test $(BINDIR)/$(CONFIG)/h2_full+poll_disappearing_server_nosec_test $(BINDIR)/$(CONFIG)/h2_full+poll_empty_batch_nosec_test $(BINDIR)/$(CONFIG)/h2_full+poll_graceful_server_shutdown_nosec_test $(BINDIR)/$(CONFIG)/h2_full+poll_high_initial_seqno_nosec_test $(BINDIR)/$(CONFIG)/h2_full+poll_hpack_size_nosec_test $(BINDIR)/$(CONFIG)/h2_full+poll_invoke_large_request_nosec_test $(BINDIR)/$(CONFIG)/h2_full+poll_large_metadata_nosec_test $(BINDIR)/$(CONFIG)/h2_full+poll_max_concurrent_streams_nosec_test $(BINDIR)/$(CONFIG)/h2_full+poll_max_message_length_nosec_test $(BINDIR)/$(CONFIG)/h2_full+poll_metadata_nosec_test $(BINDIR)/$(CONFIG)/h2_full+poll_negative_deadline_nosec_test $(BINDIR)/$(CONFIG)/h2_full+poll_no_op_nosec_test $(BINDIR)/$(CONFIG)/h2_full+poll_payload_nosec_test $(BINDIR)/$(CONFIG)/h2_full+poll_ping_pong_streaming_nosec_test $(BINDIR)/$(CONFIG)/h2_full+poll_registered_call_nosec_test $(BINDIR)/$(CONFIG)/h2_full+poll_request_with_flags_nosec_test $(BINDIR)/$(CONFIG)/h2_full+poll_request_with_payload_nosec_test $(BINDIR)/$(CONFIG)/h2_full+poll_server_finishes_request_nosec_test $(BINDIR)/$(CONFIG)/h2_full+poll_shutdown_finishes_calls_nosec_test $(BINDIR)/$(CONFIG)/h2_full+poll_shutdown_finishes_tags_nosec_test $(BINDIR)/$(CONFIG)/h2_full+poll_simple_delayed_request_nosec_test $(BINDIR)/$(CONFIG)/h2_full+poll_simple_request_nosec_test $(BINDIR)/$(CONFIG)/h2_full+poll_trailing_metadata_nosec_test $(BINDIR)/$(CONFIG)/h2_proxy_bad_hostname_nosec_test $(BINDIR)/$(CONFIG)/h2_proxy_binary_metadata_nosec_test $(BINDIR)/$(CONFIG)/h2_proxy_cancel_after_accept_nosec_test $(BINDIR)/$(CONFIG)/h2_proxy_cancel_after_client_done_nosec_test $(BINDIR)/$(CONFIG)/h2_proxy_cancel_after_invoke_nosec_test $(BINDIR)/$(CONFIG)/h2_proxy_cancel_before_invoke_nosec_test $(BINDIR)/$(CONFIG)/h2_proxy_cancel_in_a_vacuum_nosec_test $(BINDIR)/$(CONFIG)/h2_proxy_cancel_with_status_nosec_test $(BINDIR)/$(CONFIG)/h2_proxy_census_simple_request_nosec_test $(BINDIR)/$(CONFIG)/h2_proxy_default_host_nosec_test $(BINDIR)/$(CONFIG)/h2_proxy_disappearing_server_nosec_test $(BINDIR)/$(CONFIG)/h2_proxy_empty_batch_nosec_test $(BINDIR)/$(CONFIG)/h2_proxy_graceful_server_shutdown_nosec_test $(BINDIR)/$(CONFIG)/h2_proxy_high_initial_seqno_nosec_test $(BINDIR)/$(CONFIG)/h2_proxy_invoke_large_request_nosec_test $(BINDIR)/$(CONFIG)/h2_proxy_large_metadata_nosec_test $(BINDIR)/$(CONFIG)/h2_proxy_max_message_length_nosec_test $(BINDIR)/$(CONFIG)/h2_proxy_metadata_nosec_test $(BINDIR)/$(CONFIG)/h2_proxy_negative_deadline_nosec_test $(BINDIR)/$(CONFIG)/h2_proxy_no_op_nosec_test $(BINDIR)/$(CONFIG)/h2_proxy_payload_nosec_test $(BINDIR)/$(CONFIG)/h2_proxy_ping_pong_streaming_nosec_test $(BINDIR)/$(CONFIG)/h2_proxy_registered_call_nosec_test $(BINDIR)/$(CONFIG)/h2_proxy_request_with_payload_nosec_test $(BINDIR)/$(CONFIG)/h2_proxy_server_finishes_request_nosec_test $(BINDIR)/$(CONFIG)/h2_proxy_shutdown_finishes_calls_nosec_test $(BINDIR)/$(CONFIG)/h2_proxy_shutdown_finishes_tags_nosec_test $(BINDIR)/$(CONFIG)/h2_proxy_simple_delayed_request_nosec_test $(BINDIR)/$(CONFIG)/h2_proxy_simple_request_nosec_test $(BINDIR)/$(CONFIG)/h2_proxy_trailing_metadata_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_bad_hostname_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_binary_metadata_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_cancel_after_accept_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_cancel_after_client_done_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_cancel_after_invoke_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_cancel_before_invoke_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_cancel_in_a_vacuum_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_cancel_with_status_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_census_simple_request_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_compressed_payload_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_empty_batch_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_graceful_server_shutdown_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_high_initial_seqno_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_hpack_size_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_invoke_large_request_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_large_metadata_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_max_concurrent_streams_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_max_message_length_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_metadata_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_negative_deadline_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_no_op_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_payload_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_ping_pong_streaming_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_registered_call_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_request_with_flags_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_request_with_payload_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_server_finishes_request_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_shutdown_finishes_calls_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_shutdown_finishes_tags_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_simple_request_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_trailing_metadata_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_bad_hostname_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_binary_metadata_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_cancel_after_accept_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_cancel_after_client_done_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_cancel_after_invoke_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_cancel_before_invoke_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_cancel_in_a_vacuum_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_cancel_with_status_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_census_simple_request_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_compressed_payload_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_empty_batch_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_graceful_server_shutdown_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_high_initial_seqno_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_invoke_large_request_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_large_metadata_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_max_concurrent_streams_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_max_message_length_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_metadata_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_negative_deadline_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_no_op_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_payload_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_ping_pong_streaming_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_registered_call_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_request_with_flags_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_request_with_payload_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_server_finishes_request_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_shutdown_finishes_calls_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_shutdown_finishes_tags_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_simple_request_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_trailing_metadata_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_bad_hostname_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_binary_metadata_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_cancel_after_accept_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_cancel_after_client_done_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_cancel_after_invoke_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_cancel_before_invoke_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_cancel_in_a_vacuum_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_cancel_with_status_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_census_simple_request_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_compressed_payload_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_empty_batch_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_graceful_server_shutdown_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_high_initial_seqno_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_hpack_size_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_invoke_large_request_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_large_metadata_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_max_concurrent_streams_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_max_message_length_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_metadata_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_negative_deadline_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_no_op_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_payload_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_ping_pong_streaming_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_registered_call_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_request_with_flags_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_request_with_payload_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_server_finishes_request_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_shutdown_finishes_calls_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_shutdown_finishes_tags_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_simple_request_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_trailing_metadata_nosec_test $(BINDIR)/$(CONFIG)/h2_uchannel_bad_hostname_nosec_test $(BINDIR)/$(CONFIG)/h2_uchannel_binary_metadata_nosec_test $(BINDIR)/$(CONFIG)/h2_uchannel_cancel_after_accept_nosec_test $(BINDIR)/$(CONFIG)/h2_uchannel_cancel_after_client_done_nosec_test $(BINDIR)/$(CONFIG)/h2_uchannel_cancel_after_invoke_nosec_test $(BINDIR)/$(CONFIG)/h2_uchannel_cancel_before_invoke_nosec_test $(BINDIR)/$(CONFIG)/h2_uchannel_cancel_in_a_vacuum_nosec_test $(BINDIR)/$(CONFIG)/h2_uchannel_cancel_with_status_nosec_test $(BINDIR)/$(CONFIG)/h2_uchannel_census_simple_request_nosec_test $(BINDIR)/$(CONFIG)/h2_uchannel_channel_connectivity_nosec_test $(BINDIR)/$(CONFIG)/h2_uchannel_compressed_payload_nosec_test $(BINDIR)/$(CONFIG)/h2_uchannel_default_host_nosec_test $(BINDIR)/$(CONFIG)/h2_uchannel_disappearing_server_nosec_test $(BINDIR)/$(CONFIG)/h2_uchannel_empty_batch_nosec_test $(BINDIR)/$(CONFIG)/h2_uchannel_graceful_server_shutdown_nosec_test $(BINDIR)/$(CONFIG)/h2_uchannel_high_initial_seqno_nosec_test $(BINDIR)/$(CONFIG)/h2_uchannel_hpack_size_nosec_test $(BINDIR)/$(CONFIG)/h2_uchannel_invoke_large_request_nosec_test $(BINDIR)/$(CONFIG)/h2_uchannel_large_metadata_nosec_test $(BINDIR)/$(CONFIG)/h2_uchannel_max_concurrent_streams_nosec_test $(BINDIR)/$(CONFIG)/h2_uchannel_max_message_length_nosec_test $(BINDIR)/$(CONFIG)/h2_uchannel_metadata_nosec_test $(BINDIR)/$(CONFIG)/h2_uchannel_negative_deadline_nosec_test $(BINDIR)/$(CONFIG)/h2_uchannel_no_op_nosec_test $(BINDIR)/$(CONFIG)/h2_uchannel_payload_nosec_test $(BINDIR)/$(CONFIG)/h2_uchannel_ping_pong_streaming_nosec_test $(BINDIR)/$(CONFIG)/h2_uchannel_registered_call_nosec_test $(BINDIR)/$(CONFIG)/h2_uchannel_request_with_flags_nosec_test $(BINDIR)/$(CONFIG)/h2_uchannel_request_with_payload_nosec_test $(BINDIR)/$(CONFIG)/h2_uchannel_server_finishes_request_nosec_test $(BINDIR)/$(CONFIG)/h2_uchannel_shutdown_finishes_calls_nosec_test $(BINDIR)/$(CONFIG)/h2_uchannel_shutdown_finishes_tags_nosec_test $(BINDIR)/$(CONFIG)/h2_uchannel_simple_delayed_request_nosec_test $(BINDIR)/$(CONFIG)/h2_uchannel_simple_request_nosec_test $(BINDIR)/$(CONFIG)/h2_uchannel_trailing_metadata_nosec_test $(BINDIR)/$(CONFIG)/h2_uds_bad_hostname_nosec_test $(BINDIR)/$(CONFIG)/h2_uds_binary_metadata_nosec_test $(BINDIR)/$(CONFIG)/h2_uds_cancel_after_accept_nosec_test $(BINDIR)/$(CONFIG)/h2_uds_cancel_after_client_done_nosec_test $(BINDIR)/$(CONFIG)/h2_uds_cancel_after_invoke_nosec_test $(BINDIR)/$(CONFIG)/h2_uds_cancel_before_invoke_nosec_test $(BINDIR)/$(CONFIG)/h2_uds_cancel_in_a_vacuum_nosec_test $(BINDIR)/$(CONFIG)/h2_uds_cancel_with_status_nosec_test $(BINDIR)/$(CONFIG)/h2_uds_census_simple_request_nosec_test $(BINDIR)/$(CONFIG)/h2_uds_channel_connectivity_nosec_test $(BINDIR)/$(CONFIG)/h2_uds_compressed_payload_nosec_test $(BINDIR)/$(CONFIG)/h2_uds_disappearing_server_nosec_test $(BINDIR)/$(CONFIG)/h2_uds_empty_batch_nosec_test $(BINDIR)/$(CONFIG)/h2_uds_graceful_server_shutdown_nosec_test $(BINDIR)/$(CONFIG)/h2_uds_high_initial_seqno_nosec_test $(BINDIR)/$(CONFIG)/h2_uds_hpack_size_nosec_test $(BINDIR)/$(CONFIG)/h2_uds_invoke_large_request_nosec_test $(BINDIR)/$(CONFIG)/h2_uds_large_metadata_nosec_test $(BINDIR)/$(CONFIG)/h2_uds_max_concurrent_streams_nosec_test $(BINDIR)/$(CONFIG)/h2_uds_max_message_length_nosec_test $(BINDIR)/$(CONFIG)/h2_uds_metadata_nosec_test $(BINDIR)/$(CONFIG)/h2_uds_negative_deadline_nosec_test $(BINDIR)/$(CONFIG)/h2_uds_no_op_nosec_test $(BINDIR)/$(CONFIG)/h2_uds_payload_nosec_test $(BINDIR)/$(CONFIG)/h2_uds_ping_pong_streaming_nosec_test $(BINDIR)/$(CONFIG)/h2_uds_registered_call_nosec_test $(BINDIR)/$(CONFIG)/h2_uds_request_with_flags_nosec_test $(BINDIR)/$(CONFIG)/h2_uds_request_with_payload_nosec_test $(BINDIR)/$(CONFIG)/h2_uds_server_finishes_request_nosec_test $(BINDIR)/$(CONFIG)/h2_uds_shutdown_finishes_calls_nosec_test $(BINDIR)/$(CONFIG)/h2_uds_shutdown_finishes_tags_nosec_test $(BINDIR)/$(CONFIG)/h2_uds_simple_delayed_request_nosec_test $(BINDIR)/$(CONFIG)/h2_uds_simple_request_nosec_test $(BINDIR)/$(CONFIG)/h2_uds_trailing_metadata_nosec_test $(BINDIR)/$(CONFIG)/h2_uds+poll_bad_hostname_nosec_test $(BINDIR)/$(CONFIG)/h2_uds+poll_binary_metadata_nosec_test $(BINDIR)/$(CONFIG)/h2_uds+poll_cancel_after_accept_nosec_test $(BINDIR)/$(CONFIG)/h2_uds+poll_cancel_after_client_done_nosec_test $(BINDIR)/$(CONFIG)/h2_uds+poll_cancel_after_invoke_nosec_test $(BINDIR)/$(CONFIG)/h2_uds+poll_cancel_before_invoke_nosec_test $(BINDIR)/$(CONFIG)/h2_uds+poll_cancel_in_a_vacuum_nosec_test $(BINDIR)/$(CONFIG)/h2_uds+poll_cancel_with_status_nosec_test $(BINDIR)/$(CONFIG)/h2_uds+poll_census_simple_request_nosec_test $(BINDIR)/$(CONFIG)/h2_uds+poll_channel_connectivity_nosec_test $(BINDIR)/$(CONFIG)/h2_uds+poll_compressed_payload_nosec_test $(BINDIR)/$(CONFIG)/h2_uds+poll_disappearing_server_nosec_test $(BINDIR)/$(CONFIG)/h2_uds+poll_empty_batch_nosec_test $(BINDIR)/$(CONFIG)/h2_uds+poll_graceful_server_shutdown_nosec_test $(BINDIR)/$(CONFIG)/h2_uds+poll_high_initial_seqno_nosec_test $(BINDIR)/$(CONFIG)/h2_uds+poll_hpack_size_nosec_test $(BINDIR)/$(CONFIG)/h2_uds+poll_invoke_large_request_nosec_test $(BINDIR)/$(CONFIG)/h2_uds+poll_large_metadata_nosec_test $(BINDIR)/$(CONFIG)/h2_uds+poll_max_concurrent_streams_nosec_test $(BINDIR)/$(CONFIG)/h2_uds+poll_max_message_length_nosec_test $(BINDIR)/$(CONFIG)/h2_uds+poll_metadata_nosec_test $(BINDIR)/$(CONFIG)/h2_uds+poll_negative_deadline_nosec_test $(BINDIR)/$(CONFIG)/h2_uds+poll_no_op_nosec_test $(BINDIR)/$(CONFIG)/h2_uds+poll_payload_nosec_test $(BINDIR)/$(CONFIG)/h2_uds+poll_ping_pong_streaming_nosec_test $(BINDIR)/$(CONFIG)/h2_uds+poll_registered_call_nosec_test $(BINDIR)/$(CONFIG)/h2_uds+poll_request_with_flags_nosec_test $(BINDIR)/$(CONFIG)/h2_uds+poll_request_with_payload_nosec_test $(BINDIR)/$(CONFIG)/h2_uds+poll_server_finishes_request_nosec_test $(BINDIR)/$(CONFIG)/h2_uds+poll_shutdown_finishes_calls_nosec_test $(BINDIR)/$(CONFIG)/h2_uds+poll_shutdown_finishes_tags_nosec_test $(BINDIR)/$(CONFIG)/h2_uds+poll_simple_delayed_request_nosec_test $(BINDIR)/$(CONFIG)/h2_uds+poll_simple_request_nosec_test $(BINDIR)/$(CONFIG)/h2_uds+poll_trailing_metadata_nosec_test $(BINDIR)/$(CONFIG)/connection_prefix_bad_client_test $(BINDIR)/$(CONFIG)/initial_settings_frame_bad_client_test
+buildtests_c: privatelibs_c $(BINDIR)/$(CONFIG)/alpn_test $(BINDIR)/$(CONFIG)/bin_encoder_test $(BINDIR)/$(CONFIG)/chttp2_hpack_encoder_test $(BINDIR)/$(CONFIG)/chttp2_status_conversion_test $(BINDIR)/$(CONFIG)/chttp2_stream_map_test $(BINDIR)/$(CONFIG)/compression_test $(BINDIR)/$(CONFIG)/dualstack_socket_test $(BINDIR)/$(CONFIG)/endpoint_pair_test $(BINDIR)/$(CONFIG)/fd_conservation_posix_test $(BINDIR)/$(CONFIG)/fd_posix_test $(BINDIR)/$(CONFIG)/fling_client $(BINDIR)/$(CONFIG)/fling_server $(BINDIR)/$(CONFIG)/fling_stream_test $(BINDIR)/$(CONFIG)/fling_test $(BINDIR)/$(CONFIG)/gpr_avl_test $(BINDIR)/$(CONFIG)/gpr_cmdline_test $(BINDIR)/$(CONFIG)/gpr_cpu_test $(BINDIR)/$(CONFIG)/gpr_env_test $(BINDIR)/$(CONFIG)/gpr_file_test $(BINDIR)/$(CONFIG)/gpr_histogram_test $(BINDIR)/$(CONFIG)/gpr_host_port_test $(BINDIR)/$(CONFIG)/gpr_log_test $(BINDIR)/$(CONFIG)/gpr_slice_buffer_test $(BINDIR)/$(CONFIG)/gpr_slice_test $(BINDIR)/$(CONFIG)/gpr_stack_lockfree_test $(BINDIR)/$(CONFIG)/gpr_string_test $(BINDIR)/$(CONFIG)/gpr_sync_test $(BINDIR)/$(CONFIG)/gpr_thd_test $(BINDIR)/$(CONFIG)/gpr_time_test $(BINDIR)/$(CONFIG)/gpr_tls_test $(BINDIR)/$(CONFIG)/gpr_useful_test $(BINDIR)/$(CONFIG)/grpc_auth_context_test $(BINDIR)/$(CONFIG)/grpc_base64_test $(BINDIR)/$(CONFIG)/grpc_byte_buffer_reader_test $(BINDIR)/$(CONFIG)/grpc_channel_args_test $(BINDIR)/$(CONFIG)/grpc_channel_stack_test $(BINDIR)/$(CONFIG)/grpc_completion_queue_test $(BINDIR)/$(CONFIG)/grpc_credentials_test $(BINDIR)/$(CONFIG)/grpc_json_token_test $(BINDIR)/$(CONFIG)/grpc_jwt_verifier_test $(BINDIR)/$(CONFIG)/grpc_security_connector_test $(BINDIR)/$(CONFIG)/hpack_parser_test $(BINDIR)/$(CONFIG)/hpack_table_test $(BINDIR)/$(CONFIG)/httpcli_format_request_test $(BINDIR)/$(CONFIG)/httpcli_parser_test $(BINDIR)/$(CONFIG)/httpcli_test $(BINDIR)/$(CONFIG)/json_rewrite $(BINDIR)/$(CONFIG)/json_rewrite_test $(BINDIR)/$(CONFIG)/json_test $(BINDIR)/$(CONFIG)/lame_client_test $(BINDIR)/$(CONFIG)/lb_policies_test $(BINDIR)/$(CONFIG)/message_compress_test $(BINDIR)/$(CONFIG)/multi_init_test $(BINDIR)/$(CONFIG)/multiple_server_queues_test $(BINDIR)/$(CONFIG)/murmur_hash_test $(BINDIR)/$(CONFIG)/no_server_test $(BINDIR)/$(CONFIG)/resolve_address_test $(BINDIR)/$(CONFIG)/secure_endpoint_test $(BINDIR)/$(CONFIG)/set_initial_connect_string_test $(BINDIR)/$(CONFIG)/sockaddr_utils_test $(BINDIR)/$(CONFIG)/tcp_client_posix_test $(BINDIR)/$(CONFIG)/tcp_posix_test $(BINDIR)/$(CONFIG)/tcp_server_posix_test $(BINDIR)/$(CONFIG)/time_averaged_stats_test $(BINDIR)/$(CONFIG)/timeout_encoding_test $(BINDIR)/$(CONFIG)/timer_heap_test $(BINDIR)/$(CONFIG)/timer_list_test $(BINDIR)/$(CONFIG)/timers_test $(BINDIR)/$(CONFIG)/transport_metadata_test $(BINDIR)/$(CONFIG)/transport_security_test $(BINDIR)/$(CONFIG)/udp_server_test $(BINDIR)/$(CONFIG)/uri_parser_test $(BINDIR)/$(CONFIG)/workqueue_test $(BINDIR)/$(CONFIG)/h2_compress_bad_hostname_test $(BINDIR)/$(CONFIG)/h2_compress_binary_metadata_test $(BINDIR)/$(CONFIG)/h2_compress_call_creds_test $(BINDIR)/$(CONFIG)/h2_compress_cancel_after_accept_test $(BINDIR)/$(CONFIG)/h2_compress_cancel_after_client_done_test $(BINDIR)/$(CONFIG)/h2_compress_cancel_after_invoke_test $(BINDIR)/$(CONFIG)/h2_compress_cancel_before_invoke_test $(BINDIR)/$(CONFIG)/h2_compress_cancel_in_a_vacuum_test $(BINDIR)/$(CONFIG)/h2_compress_cancel_with_status_test $(BINDIR)/$(CONFIG)/h2_compress_census_simple_request_test $(BINDIR)/$(CONFIG)/h2_compress_channel_connectivity_test $(BINDIR)/$(CONFIG)/h2_compress_compressed_payload_test $(BINDIR)/$(CONFIG)/h2_compress_default_host_test $(BINDIR)/$(CONFIG)/h2_compress_disappearing_server_test $(BINDIR)/$(CONFIG)/h2_compress_empty_batch_test $(BINDIR)/$(CONFIG)/h2_compress_graceful_server_shutdown_test $(BINDIR)/$(CONFIG)/h2_compress_high_initial_seqno_test $(BINDIR)/$(CONFIG)/h2_compress_hpack_size_test $(BINDIR)/$(CONFIG)/h2_compress_invoke_large_request_test $(BINDIR)/$(CONFIG)/h2_compress_large_metadata_test $(BINDIR)/$(CONFIG)/h2_compress_max_concurrent_streams_test $(BINDIR)/$(CONFIG)/h2_compress_max_message_length_test $(BINDIR)/$(CONFIG)/h2_compress_metadata_test $(BINDIR)/$(CONFIG)/h2_compress_negative_deadline_test $(BINDIR)/$(CONFIG)/h2_compress_no_op_test $(BINDIR)/$(CONFIG)/h2_compress_payload_test $(BINDIR)/$(CONFIG)/h2_compress_ping_pong_streaming_test $(BINDIR)/$(CONFIG)/h2_compress_registered_call_test $(BINDIR)/$(CONFIG)/h2_compress_request_with_flags_test $(BINDIR)/$(CONFIG)/h2_compress_request_with_payload_test $(BINDIR)/$(CONFIG)/h2_compress_server_finishes_request_test $(BINDIR)/$(CONFIG)/h2_compress_shutdown_finishes_calls_test $(BINDIR)/$(CONFIG)/h2_compress_shutdown_finishes_tags_test $(BINDIR)/$(CONFIG)/h2_compress_simple_delayed_request_test $(BINDIR)/$(CONFIG)/h2_compress_simple_request_test $(BINDIR)/$(CONFIG)/h2_compress_trailing_metadata_test $(BINDIR)/$(CONFIG)/h2_fakesec_bad_hostname_test $(BINDIR)/$(CONFIG)/h2_fakesec_binary_metadata_test $(BINDIR)/$(CONFIG)/h2_fakesec_call_creds_test $(BINDIR)/$(CONFIG)/h2_fakesec_cancel_after_accept_test $(BINDIR)/$(CONFIG)/h2_fakesec_cancel_after_client_done_test $(BINDIR)/$(CONFIG)/h2_fakesec_cancel_after_invoke_test $(BINDIR)/$(CONFIG)/h2_fakesec_cancel_before_invoke_test $(BINDIR)/$(CONFIG)/h2_fakesec_cancel_in_a_vacuum_test $(BINDIR)/$(CONFIG)/h2_fakesec_cancel_with_status_test $(BINDIR)/$(CONFIG)/h2_fakesec_census_simple_request_test $(BINDIR)/$(CONFIG)/h2_fakesec_channel_connectivity_test $(BINDIR)/$(CONFIG)/h2_fakesec_compressed_payload_test $(BINDIR)/$(CONFIG)/h2_fakesec_default_host_test $(BINDIR)/$(CONFIG)/h2_fakesec_disappearing_server_test $(BINDIR)/$(CONFIG)/h2_fakesec_empty_batch_test $(BINDIR)/$(CONFIG)/h2_fakesec_graceful_server_shutdown_test $(BINDIR)/$(CONFIG)/h2_fakesec_high_initial_seqno_test $(BINDIR)/$(CONFIG)/h2_fakesec_hpack_size_test $(BINDIR)/$(CONFIG)/h2_fakesec_invoke_large_request_test $(BINDIR)/$(CONFIG)/h2_fakesec_large_metadata_test $(BINDIR)/$(CONFIG)/h2_fakesec_max_concurrent_streams_test $(BINDIR)/$(CONFIG)/h2_fakesec_max_message_length_test $(BINDIR)/$(CONFIG)/h2_fakesec_metadata_test $(BINDIR)/$(CONFIG)/h2_fakesec_negative_deadline_test $(BINDIR)/$(CONFIG)/h2_fakesec_no_op_test $(BINDIR)/$(CONFIG)/h2_fakesec_payload_test $(BINDIR)/$(CONFIG)/h2_fakesec_ping_pong_streaming_test $(BINDIR)/$(CONFIG)/h2_fakesec_registered_call_test $(BINDIR)/$(CONFIG)/h2_fakesec_request_with_flags_test $(BINDIR)/$(CONFIG)/h2_fakesec_request_with_payload_test $(BINDIR)/$(CONFIG)/h2_fakesec_server_finishes_request_test $(BINDIR)/$(CONFIG)/h2_fakesec_shutdown_finishes_calls_test $(BINDIR)/$(CONFIG)/h2_fakesec_shutdown_finishes_tags_test $(BINDIR)/$(CONFIG)/h2_fakesec_simple_delayed_request_test $(BINDIR)/$(CONFIG)/h2_fakesec_simple_request_test $(BINDIR)/$(CONFIG)/h2_fakesec_trailing_metadata_test $(BINDIR)/$(CONFIG)/h2_full_bad_hostname_test $(BINDIR)/$(CONFIG)/h2_full_binary_metadata_test $(BINDIR)/$(CONFIG)/h2_full_call_creds_test $(BINDIR)/$(CONFIG)/h2_full_cancel_after_accept_test $(BINDIR)/$(CONFIG)/h2_full_cancel_after_client_done_test $(BINDIR)/$(CONFIG)/h2_full_cancel_after_invoke_test $(BINDIR)/$(CONFIG)/h2_full_cancel_before_invoke_test $(BINDIR)/$(CONFIG)/h2_full_cancel_in_a_vacuum_test $(BINDIR)/$(CONFIG)/h2_full_cancel_with_status_test $(BINDIR)/$(CONFIG)/h2_full_census_simple_request_test $(BINDIR)/$(CONFIG)/h2_full_channel_connectivity_test $(BINDIR)/$(CONFIG)/h2_full_compressed_payload_test $(BINDIR)/$(CONFIG)/h2_full_default_host_test $(BINDIR)/$(CONFIG)/h2_full_disappearing_server_test $(BINDIR)/$(CONFIG)/h2_full_empty_batch_test $(BINDIR)/$(CONFIG)/h2_full_graceful_server_shutdown_test $(BINDIR)/$(CONFIG)/h2_full_high_initial_seqno_test $(BINDIR)/$(CONFIG)/h2_full_hpack_size_test $(BINDIR)/$(CONFIG)/h2_full_invoke_large_request_test $(BINDIR)/$(CONFIG)/h2_full_large_metadata_test $(BINDIR)/$(CONFIG)/h2_full_max_concurrent_streams_test $(BINDIR)/$(CONFIG)/h2_full_max_message_length_test $(BINDIR)/$(CONFIG)/h2_full_metadata_test $(BINDIR)/$(CONFIG)/h2_full_negative_deadline_test $(BINDIR)/$(CONFIG)/h2_full_no_op_test $(BINDIR)/$(CONFIG)/h2_full_payload_test $(BINDIR)/$(CONFIG)/h2_full_ping_pong_streaming_test $(BINDIR)/$(CONFIG)/h2_full_registered_call_test $(BINDIR)/$(CONFIG)/h2_full_request_with_flags_test $(BINDIR)/$(CONFIG)/h2_full_request_with_payload_test $(BINDIR)/$(CONFIG)/h2_full_server_finishes_request_test $(BINDIR)/$(CONFIG)/h2_full_shutdown_finishes_calls_test $(BINDIR)/$(CONFIG)/h2_full_shutdown_finishes_tags_test $(BINDIR)/$(CONFIG)/h2_full_simple_delayed_request_test $(BINDIR)/$(CONFIG)/h2_full_simple_request_test $(BINDIR)/$(CONFIG)/h2_full_trailing_metadata_test $(BINDIR)/$(CONFIG)/h2_full+poll_bad_hostname_test $(BINDIR)/$(CONFIG)/h2_full+poll_binary_metadata_test $(BINDIR)/$(CONFIG)/h2_full+poll_call_creds_test $(BINDIR)/$(CONFIG)/h2_full+poll_cancel_after_accept_test $(BINDIR)/$(CONFIG)/h2_full+poll_cancel_after_client_done_test $(BINDIR)/$(CONFIG)/h2_full+poll_cancel_after_invoke_test $(BINDIR)/$(CONFIG)/h2_full+poll_cancel_before_invoke_test $(BINDIR)/$(CONFIG)/h2_full+poll_cancel_in_a_vacuum_test $(BINDIR)/$(CONFIG)/h2_full+poll_cancel_with_status_test $(BINDIR)/$(CONFIG)/h2_full+poll_census_simple_request_test $(BINDIR)/$(CONFIG)/h2_full+poll_channel_connectivity_test $(BINDIR)/$(CONFIG)/h2_full+poll_compressed_payload_test $(BINDIR)/$(CONFIG)/h2_full+poll_default_host_test $(BINDIR)/$(CONFIG)/h2_full+poll_disappearing_server_test $(BINDIR)/$(CONFIG)/h2_full+poll_empty_batch_test $(BINDIR)/$(CONFIG)/h2_full+poll_graceful_server_shutdown_test $(BINDIR)/$(CONFIG)/h2_full+poll_high_initial_seqno_test $(BINDIR)/$(CONFIG)/h2_full+poll_hpack_size_test $(BINDIR)/$(CONFIG)/h2_full+poll_invoke_large_request_test $(BINDIR)/$(CONFIG)/h2_full+poll_large_metadata_test $(BINDIR)/$(CONFIG)/h2_full+poll_max_concurrent_streams_test $(BINDIR)/$(CONFIG)/h2_full+poll_max_message_length_test $(BINDIR)/$(CONFIG)/h2_full+poll_metadata_test $(BINDIR)/$(CONFIG)/h2_full+poll_negative_deadline_test $(BINDIR)/$(CONFIG)/h2_full+poll_no_op_test $(BINDIR)/$(CONFIG)/h2_full+poll_payload_test $(BINDIR)/$(CONFIG)/h2_full+poll_ping_pong_streaming_test $(BINDIR)/$(CONFIG)/h2_full+poll_registered_call_test $(BINDIR)/$(CONFIG)/h2_full+poll_request_with_flags_test $(BINDIR)/$(CONFIG)/h2_full+poll_request_with_payload_test $(BINDIR)/$(CONFIG)/h2_full+poll_server_finishes_request_test $(BINDIR)/$(CONFIG)/h2_full+poll_shutdown_finishes_calls_test $(BINDIR)/$(CONFIG)/h2_full+poll_shutdown_finishes_tags_test $(BINDIR)/$(CONFIG)/h2_full+poll_simple_delayed_request_test $(BINDIR)/$(CONFIG)/h2_full+poll_simple_request_test $(BINDIR)/$(CONFIG)/h2_full+poll_trailing_metadata_test $(BINDIR)/$(CONFIG)/h2_oauth2_bad_hostname_test $(BINDIR)/$(CONFIG)/h2_oauth2_binary_metadata_test $(BINDIR)/$(CONFIG)/h2_oauth2_call_creds_test $(BINDIR)/$(CONFIG)/h2_oauth2_cancel_after_accept_test $(BINDIR)/$(CONFIG)/h2_oauth2_cancel_after_client_done_test $(BINDIR)/$(CONFIG)/h2_oauth2_cancel_after_invoke_test $(BINDIR)/$(CONFIG)/h2_oauth2_cancel_before_invoke_test $(BINDIR)/$(CONFIG)/h2_oauth2_cancel_in_a_vacuum_test $(BINDIR)/$(CONFIG)/h2_oauth2_cancel_with_status_test $(BINDIR)/$(CONFIG)/h2_oauth2_census_simple_request_test $(BINDIR)/$(CONFIG)/h2_oauth2_channel_connectivity_test $(BINDIR)/$(CONFIG)/h2_oauth2_compressed_payload_test $(BINDIR)/$(CONFIG)/h2_oauth2_default_host_test $(BINDIR)/$(CONFIG)/h2_oauth2_disappearing_server_test $(BINDIR)/$(CONFIG)/h2_oauth2_empty_batch_test $(BINDIR)/$(CONFIG)/h2_oauth2_graceful_server_shutdown_test $(BINDIR)/$(CONFIG)/h2_oauth2_high_initial_seqno_test $(BINDIR)/$(CONFIG)/h2_oauth2_hpack_size_test $(BINDIR)/$(CONFIG)/h2_oauth2_invoke_large_request_test $(BINDIR)/$(CONFIG)/h2_oauth2_large_metadata_test $(BINDIR)/$(CONFIG)/h2_oauth2_max_concurrent_streams_test $(BINDIR)/$(CONFIG)/h2_oauth2_max_message_length_test $(BINDIR)/$(CONFIG)/h2_oauth2_metadata_test $(BINDIR)/$(CONFIG)/h2_oauth2_negative_deadline_test $(BINDIR)/$(CONFIG)/h2_oauth2_no_op_test $(BINDIR)/$(CONFIG)/h2_oauth2_payload_test $(BINDIR)/$(CONFIG)/h2_oauth2_ping_pong_streaming_test $(BINDIR)/$(CONFIG)/h2_oauth2_registered_call_test $(BINDIR)/$(CONFIG)/h2_oauth2_request_with_flags_test $(BINDIR)/$(CONFIG)/h2_oauth2_request_with_payload_test $(BINDIR)/$(CONFIG)/h2_oauth2_server_finishes_request_test $(BINDIR)/$(CONFIG)/h2_oauth2_shutdown_finishes_calls_test $(BINDIR)/$(CONFIG)/h2_oauth2_shutdown_finishes_tags_test $(BINDIR)/$(CONFIG)/h2_oauth2_simple_delayed_request_test $(BINDIR)/$(CONFIG)/h2_oauth2_simple_request_test $(BINDIR)/$(CONFIG)/h2_oauth2_trailing_metadata_test $(BINDIR)/$(CONFIG)/h2_proxy_bad_hostname_test $(BINDIR)/$(CONFIG)/h2_proxy_binary_metadata_test $(BINDIR)/$(CONFIG)/h2_proxy_call_creds_test $(BINDIR)/$(CONFIG)/h2_proxy_cancel_after_accept_test $(BINDIR)/$(CONFIG)/h2_proxy_cancel_after_client_done_test $(BINDIR)/$(CONFIG)/h2_proxy_cancel_after_invoke_test $(BINDIR)/$(CONFIG)/h2_proxy_cancel_before_invoke_test $(BINDIR)/$(CONFIG)/h2_proxy_cancel_in_a_vacuum_test $(BINDIR)/$(CONFIG)/h2_proxy_cancel_with_status_test $(BINDIR)/$(CONFIG)/h2_proxy_census_simple_request_test $(BINDIR)/$(CONFIG)/h2_proxy_default_host_test $(BINDIR)/$(CONFIG)/h2_proxy_disappearing_server_test $(BINDIR)/$(CONFIG)/h2_proxy_empty_batch_test $(BINDIR)/$(CONFIG)/h2_proxy_graceful_server_shutdown_test $(BINDIR)/$(CONFIG)/h2_proxy_high_initial_seqno_test $(BINDIR)/$(CONFIG)/h2_proxy_invoke_large_request_test $(BINDIR)/$(CONFIG)/h2_proxy_large_metadata_test $(BINDIR)/$(CONFIG)/h2_proxy_max_message_length_test $(BINDIR)/$(CONFIG)/h2_proxy_metadata_test $(BINDIR)/$(CONFIG)/h2_proxy_negative_deadline_test $(BINDIR)/$(CONFIG)/h2_proxy_no_op_test $(BINDIR)/$(CONFIG)/h2_proxy_payload_test $(BINDIR)/$(CONFIG)/h2_proxy_ping_pong_streaming_test $(BINDIR)/$(CONFIG)/h2_proxy_registered_call_test $(BINDIR)/$(CONFIG)/h2_proxy_request_with_payload_test $(BINDIR)/$(CONFIG)/h2_proxy_server_finishes_request_test $(BINDIR)/$(CONFIG)/h2_proxy_shutdown_finishes_calls_test $(BINDIR)/$(CONFIG)/h2_proxy_shutdown_finishes_tags_test $(BINDIR)/$(CONFIG)/h2_proxy_simple_delayed_request_test $(BINDIR)/$(CONFIG)/h2_proxy_simple_request_test $(BINDIR)/$(CONFIG)/h2_proxy_trailing_metadata_test $(BINDIR)/$(CONFIG)/h2_sockpair_bad_hostname_test $(BINDIR)/$(CONFIG)/h2_sockpair_binary_metadata_test $(BINDIR)/$(CONFIG)/h2_sockpair_call_creds_test $(BINDIR)/$(CONFIG)/h2_sockpair_cancel_after_accept_test $(BINDIR)/$(CONFIG)/h2_sockpair_cancel_after_client_done_test $(BINDIR)/$(CONFIG)/h2_sockpair_cancel_after_invoke_test $(BINDIR)/$(CONFIG)/h2_sockpair_cancel_before_invoke_test $(BINDIR)/$(CONFIG)/h2_sockpair_cancel_in_a_vacuum_test $(BINDIR)/$(CONFIG)/h2_sockpair_cancel_with_status_test $(BINDIR)/$(CONFIG)/h2_sockpair_census_simple_request_test $(BINDIR)/$(CONFIG)/h2_sockpair_compressed_payload_test $(BINDIR)/$(CONFIG)/h2_sockpair_empty_batch_test $(BINDIR)/$(CONFIG)/h2_sockpair_graceful_server_shutdown_test $(BINDIR)/$(CONFIG)/h2_sockpair_high_initial_seqno_test $(BINDIR)/$(CONFIG)/h2_sockpair_hpack_size_test $(BINDIR)/$(CONFIG)/h2_sockpair_invoke_large_request_test $(BINDIR)/$(CONFIG)/h2_sockpair_large_metadata_test $(BINDIR)/$(CONFIG)/h2_sockpair_max_concurrent_streams_test $(BINDIR)/$(CONFIG)/h2_sockpair_max_message_length_test $(BINDIR)/$(CONFIG)/h2_sockpair_metadata_test $(BINDIR)/$(CONFIG)/h2_sockpair_negative_deadline_test $(BINDIR)/$(CONFIG)/h2_sockpair_no_op_test $(BINDIR)/$(CONFIG)/h2_sockpair_payload_test $(BINDIR)/$(CONFIG)/h2_sockpair_ping_pong_streaming_test $(BINDIR)/$(CONFIG)/h2_sockpair_registered_call_test $(BINDIR)/$(CONFIG)/h2_sockpair_request_with_flags_test $(BINDIR)/$(CONFIG)/h2_sockpair_request_with_payload_test $(BINDIR)/$(CONFIG)/h2_sockpair_server_finishes_request_test $(BINDIR)/$(CONFIG)/h2_sockpair_shutdown_finishes_calls_test $(BINDIR)/$(CONFIG)/h2_sockpair_shutdown_finishes_tags_test $(BINDIR)/$(CONFIG)/h2_sockpair_simple_request_test $(BINDIR)/$(CONFIG)/h2_sockpair_trailing_metadata_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_bad_hostname_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_binary_metadata_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_call_creds_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_cancel_after_accept_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_cancel_after_client_done_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_cancel_after_invoke_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_cancel_before_invoke_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_cancel_in_a_vacuum_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_cancel_with_status_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_census_simple_request_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_compressed_payload_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_empty_batch_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_graceful_server_shutdown_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_high_initial_seqno_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_invoke_large_request_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_large_metadata_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_max_concurrent_streams_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_max_message_length_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_metadata_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_negative_deadline_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_no_op_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_payload_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_ping_pong_streaming_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_registered_call_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_request_with_flags_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_request_with_payload_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_server_finishes_request_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_shutdown_finishes_calls_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_shutdown_finishes_tags_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_simple_request_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_trailing_metadata_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_bad_hostname_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_binary_metadata_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_call_creds_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_cancel_after_accept_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_cancel_after_client_done_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_cancel_after_invoke_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_cancel_before_invoke_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_cancel_in_a_vacuum_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_cancel_with_status_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_census_simple_request_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_compressed_payload_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_empty_batch_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_graceful_server_shutdown_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_high_initial_seqno_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_hpack_size_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_invoke_large_request_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_large_metadata_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_max_concurrent_streams_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_max_message_length_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_metadata_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_negative_deadline_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_no_op_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_payload_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_ping_pong_streaming_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_registered_call_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_request_with_flags_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_request_with_payload_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_server_finishes_request_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_shutdown_finishes_calls_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_shutdown_finishes_tags_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_simple_request_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_trailing_metadata_test $(BINDIR)/$(CONFIG)/h2_ssl_bad_hostname_test $(BINDIR)/$(CONFIG)/h2_ssl_binary_metadata_test $(BINDIR)/$(CONFIG)/h2_ssl_call_creds_test $(BINDIR)/$(CONFIG)/h2_ssl_cancel_after_accept_test $(BINDIR)/$(CONFIG)/h2_ssl_cancel_after_client_done_test $(BINDIR)/$(CONFIG)/h2_ssl_cancel_after_invoke_test $(BINDIR)/$(CONFIG)/h2_ssl_cancel_before_invoke_test $(BINDIR)/$(CONFIG)/h2_ssl_cancel_in_a_vacuum_test $(BINDIR)/$(CONFIG)/h2_ssl_cancel_with_status_test $(BINDIR)/$(CONFIG)/h2_ssl_census_simple_request_test $(BINDIR)/$(CONFIG)/h2_ssl_channel_connectivity_test $(BINDIR)/$(CONFIG)/h2_ssl_compressed_payload_test $(BINDIR)/$(CONFIG)/h2_ssl_default_host_test $(BINDIR)/$(CONFIG)/h2_ssl_disappearing_server_test $(BINDIR)/$(CONFIG)/h2_ssl_empty_batch_test $(BINDIR)/$(CONFIG)/h2_ssl_graceful_server_shutdown_test $(BINDIR)/$(CONFIG)/h2_ssl_high_initial_seqno_test $(BINDIR)/$(CONFIG)/h2_ssl_hpack_size_test $(BINDIR)/$(CONFIG)/h2_ssl_invoke_large_request_test $(BINDIR)/$(CONFIG)/h2_ssl_large_metadata_test $(BINDIR)/$(CONFIG)/h2_ssl_max_concurrent_streams_test $(BINDIR)/$(CONFIG)/h2_ssl_max_message_length_test $(BINDIR)/$(CONFIG)/h2_ssl_metadata_test $(BINDIR)/$(CONFIG)/h2_ssl_negative_deadline_test $(BINDIR)/$(CONFIG)/h2_ssl_no_op_test $(BINDIR)/$(CONFIG)/h2_ssl_payload_test $(BINDIR)/$(CONFIG)/h2_ssl_ping_pong_streaming_test $(BINDIR)/$(CONFIG)/h2_ssl_registered_call_test $(BINDIR)/$(CONFIG)/h2_ssl_request_with_flags_test $(BINDIR)/$(CONFIG)/h2_ssl_request_with_payload_test $(BINDIR)/$(CONFIG)/h2_ssl_server_finishes_request_test $(BINDIR)/$(CONFIG)/h2_ssl_shutdown_finishes_calls_test $(BINDIR)/$(CONFIG)/h2_ssl_shutdown_finishes_tags_test $(BINDIR)/$(CONFIG)/h2_ssl_simple_delayed_request_test $(BINDIR)/$(CONFIG)/h2_ssl_simple_request_test $(BINDIR)/$(CONFIG)/h2_ssl_trailing_metadata_test $(BINDIR)/$(CONFIG)/h2_ssl+poll_bad_hostname_test $(BINDIR)/$(CONFIG)/h2_ssl+poll_binary_metadata_test $(BINDIR)/$(CONFIG)/h2_ssl+poll_call_creds_test $(BINDIR)/$(CONFIG)/h2_ssl+poll_cancel_after_accept_test $(BINDIR)/$(CONFIG)/h2_ssl+poll_cancel_after_client_done_test $(BINDIR)/$(CONFIG)/h2_ssl+poll_cancel_after_invoke_test $(BINDIR)/$(CONFIG)/h2_ssl+poll_cancel_before_invoke_test $(BINDIR)/$(CONFIG)/h2_ssl+poll_cancel_in_a_vacuum_test $(BINDIR)/$(CONFIG)/h2_ssl+poll_cancel_with_status_test $(BINDIR)/$(CONFIG)/h2_ssl+poll_census_simple_request_test $(BINDIR)/$(CONFIG)/h2_ssl+poll_channel_connectivity_test $(BINDIR)/$(CONFIG)/h2_ssl+poll_compressed_payload_test $(BINDIR)/$(CONFIG)/h2_ssl+poll_default_host_test $(BINDIR)/$(CONFIG)/h2_ssl+poll_disappearing_server_test $(BINDIR)/$(CONFIG)/h2_ssl+poll_empty_batch_test $(BINDIR)/$(CONFIG)/h2_ssl+poll_graceful_server_shutdown_test $(BINDIR)/$(CONFIG)/h2_ssl+poll_high_initial_seqno_test $(BINDIR)/$(CONFIG)/h2_ssl+poll_hpack_size_test $(BINDIR)/$(CONFIG)/h2_ssl+poll_invoke_large_request_test $(BINDIR)/$(CONFIG)/h2_ssl+poll_large_metadata_test $(BINDIR)/$(CONFIG)/h2_ssl+poll_max_concurrent_streams_test $(BINDIR)/$(CONFIG)/h2_ssl+poll_max_message_length_test $(BINDIR)/$(CONFIG)/h2_ssl+poll_metadata_test $(BINDIR)/$(CONFIG)/h2_ssl+poll_negative_deadline_test $(BINDIR)/$(CONFIG)/h2_ssl+poll_no_op_test $(BINDIR)/$(CONFIG)/h2_ssl+poll_payload_test $(BINDIR)/$(CONFIG)/h2_ssl+poll_ping_pong_streaming_test $(BINDIR)/$(CONFIG)/h2_ssl+poll_registered_call_test $(BINDIR)/$(CONFIG)/h2_ssl+poll_request_with_flags_test $(BINDIR)/$(CONFIG)/h2_ssl+poll_request_with_payload_test $(BINDIR)/$(CONFIG)/h2_ssl+poll_server_finishes_request_test $(BINDIR)/$(CONFIG)/h2_ssl+poll_shutdown_finishes_calls_test $(BINDIR)/$(CONFIG)/h2_ssl+poll_shutdown_finishes_tags_test $(BINDIR)/$(CONFIG)/h2_ssl+poll_simple_delayed_request_test $(BINDIR)/$(CONFIG)/h2_ssl+poll_simple_request_test $(BINDIR)/$(CONFIG)/h2_ssl+poll_trailing_metadata_test $(BINDIR)/$(CONFIG)/h2_ssl_proxy_bad_hostname_test $(BINDIR)/$(CONFIG)/h2_ssl_proxy_binary_metadata_test $(BINDIR)/$(CONFIG)/h2_ssl_proxy_call_creds_test $(BINDIR)/$(CONFIG)/h2_ssl_proxy_cancel_after_accept_test $(BINDIR)/$(CONFIG)/h2_ssl_proxy_cancel_after_client_done_test $(BINDIR)/$(CONFIG)/h2_ssl_proxy_cancel_after_invoke_test $(BINDIR)/$(CONFIG)/h2_ssl_proxy_cancel_before_invoke_test $(BINDIR)/$(CONFIG)/h2_ssl_proxy_cancel_in_a_vacuum_test $(BINDIR)/$(CONFIG)/h2_ssl_proxy_cancel_with_status_test $(BINDIR)/$(CONFIG)/h2_ssl_proxy_census_simple_request_test $(BINDIR)/$(CONFIG)/h2_ssl_proxy_default_host_test $(BINDIR)/$(CONFIG)/h2_ssl_proxy_disappearing_server_test $(BINDIR)/$(CONFIG)/h2_ssl_proxy_empty_batch_test $(BINDIR)/$(CONFIG)/h2_ssl_proxy_graceful_server_shutdown_test $(BINDIR)/$(CONFIG)/h2_ssl_proxy_high_initial_seqno_test $(BINDIR)/$(CONFIG)/h2_ssl_proxy_invoke_large_request_test $(BINDIR)/$(CONFIG)/h2_ssl_proxy_large_metadata_test $(BINDIR)/$(CONFIG)/h2_ssl_proxy_max_message_length_test $(BINDIR)/$(CONFIG)/h2_ssl_proxy_metadata_test $(BINDIR)/$(CONFIG)/h2_ssl_proxy_negative_deadline_test $(BINDIR)/$(CONFIG)/h2_ssl_proxy_no_op_test $(BINDIR)/$(CONFIG)/h2_ssl_proxy_payload_test $(BINDIR)/$(CONFIG)/h2_ssl_proxy_ping_pong_streaming_test $(BINDIR)/$(CONFIG)/h2_ssl_proxy_registered_call_test $(BINDIR)/$(CONFIG)/h2_ssl_proxy_request_with_payload_test $(BINDIR)/$(CONFIG)/h2_ssl_proxy_server_finishes_request_test $(BINDIR)/$(CONFIG)/h2_ssl_proxy_shutdown_finishes_calls_test $(BINDIR)/$(CONFIG)/h2_ssl_proxy_shutdown_finishes_tags_test $(BINDIR)/$(CONFIG)/h2_ssl_proxy_simple_delayed_request_test $(BINDIR)/$(CONFIG)/h2_ssl_proxy_simple_request_test $(BINDIR)/$(CONFIG)/h2_ssl_proxy_trailing_metadata_test $(BINDIR)/$(CONFIG)/h2_uchannel_bad_hostname_test $(BINDIR)/$(CONFIG)/h2_uchannel_binary_metadata_test $(BINDIR)/$(CONFIG)/h2_uchannel_call_creds_test $(BINDIR)/$(CONFIG)/h2_uchannel_cancel_after_accept_test $(BINDIR)/$(CONFIG)/h2_uchannel_cancel_after_client_done_test $(BINDIR)/$(CONFIG)/h2_uchannel_cancel_after_invoke_test $(BINDIR)/$(CONFIG)/h2_uchannel_cancel_before_invoke_test $(BINDIR)/$(CONFIG)/h2_uchannel_cancel_in_a_vacuum_test $(BINDIR)/$(CONFIG)/h2_uchannel_cancel_with_status_test $(BINDIR)/$(CONFIG)/h2_uchannel_census_simple_request_test $(BINDIR)/$(CONFIG)/h2_uchannel_channel_connectivity_test $(BINDIR)/$(CONFIG)/h2_uchannel_compressed_payload_test $(BINDIR)/$(CONFIG)/h2_uchannel_default_host_test $(BINDIR)/$(CONFIG)/h2_uchannel_disappearing_server_test $(BINDIR)/$(CONFIG)/h2_uchannel_empty_batch_test $(BINDIR)/$(CONFIG)/h2_uchannel_graceful_server_shutdown_test $(BINDIR)/$(CONFIG)/h2_uchannel_high_initial_seqno_test $(BINDIR)/$(CONFIG)/h2_uchannel_hpack_size_test $(BINDIR)/$(CONFIG)/h2_uchannel_invoke_large_request_test $(BINDIR)/$(CONFIG)/h2_uchannel_large_metadata_test $(BINDIR)/$(CONFIG)/h2_uchannel_max_concurrent_streams_test $(BINDIR)/$(CONFIG)/h2_uchannel_max_message_length_test $(BINDIR)/$(CONFIG)/h2_uchannel_metadata_test $(BINDIR)/$(CONFIG)/h2_uchannel_negative_deadline_test $(BINDIR)/$(CONFIG)/h2_uchannel_no_op_test $(BINDIR)/$(CONFIG)/h2_uchannel_payload_test $(BINDIR)/$(CONFIG)/h2_uchannel_ping_pong_streaming_test $(BINDIR)/$(CONFIG)/h2_uchannel_registered_call_test $(BINDIR)/$(CONFIG)/h2_uchannel_request_with_flags_test $(BINDIR)/$(CONFIG)/h2_uchannel_request_with_payload_test $(BINDIR)/$(CONFIG)/h2_uchannel_server_finishes_request_test $(BINDIR)/$(CONFIG)/h2_uchannel_shutdown_finishes_calls_test $(BINDIR)/$(CONFIG)/h2_uchannel_shutdown_finishes_tags_test $(BINDIR)/$(CONFIG)/h2_uchannel_simple_delayed_request_test $(BINDIR)/$(CONFIG)/h2_uchannel_simple_request_test $(BINDIR)/$(CONFIG)/h2_uchannel_trailing_metadata_test $(BINDIR)/$(CONFIG)/h2_uds_bad_hostname_test $(BINDIR)/$(CONFIG)/h2_uds_binary_metadata_test $(BINDIR)/$(CONFIG)/h2_uds_call_creds_test $(BINDIR)/$(CONFIG)/h2_uds_cancel_after_accept_test $(BINDIR)/$(CONFIG)/h2_uds_cancel_after_client_done_test $(BINDIR)/$(CONFIG)/h2_uds_cancel_after_invoke_test $(BINDIR)/$(CONFIG)/h2_uds_cancel_before_invoke_test $(BINDIR)/$(CONFIG)/h2_uds_cancel_in_a_vacuum_test $(BINDIR)/$(CONFIG)/h2_uds_cancel_with_status_test $(BINDIR)/$(CONFIG)/h2_uds_census_simple_request_test $(BINDIR)/$(CONFIG)/h2_uds_channel_connectivity_test $(BINDIR)/$(CONFIG)/h2_uds_compressed_payload_test $(BINDIR)/$(CONFIG)/h2_uds_disappearing_server_test $(BINDIR)/$(CONFIG)/h2_uds_empty_batch_test $(BINDIR)/$(CONFIG)/h2_uds_graceful_server_shutdown_test $(BINDIR)/$(CONFIG)/h2_uds_high_initial_seqno_test $(BINDIR)/$(CONFIG)/h2_uds_hpack_size_test $(BINDIR)/$(CONFIG)/h2_uds_invoke_large_request_test $(BINDIR)/$(CONFIG)/h2_uds_large_metadata_test $(BINDIR)/$(CONFIG)/h2_uds_max_concurrent_streams_test $(BINDIR)/$(CONFIG)/h2_uds_max_message_length_test $(BINDIR)/$(CONFIG)/h2_uds_metadata_test $(BINDIR)/$(CONFIG)/h2_uds_negative_deadline_test $(BINDIR)/$(CONFIG)/h2_uds_no_op_test $(BINDIR)/$(CONFIG)/h2_uds_payload_test $(BINDIR)/$(CONFIG)/h2_uds_ping_pong_streaming_test $(BINDIR)/$(CONFIG)/h2_uds_registered_call_test $(BINDIR)/$(CONFIG)/h2_uds_request_with_flags_test $(BINDIR)/$(CONFIG)/h2_uds_request_with_payload_test $(BINDIR)/$(CONFIG)/h2_uds_server_finishes_request_test $(BINDIR)/$(CONFIG)/h2_uds_shutdown_finishes_calls_test $(BINDIR)/$(CONFIG)/h2_uds_shutdown_finishes_tags_test $(BINDIR)/$(CONFIG)/h2_uds_simple_delayed_request_test $(BINDIR)/$(CONFIG)/h2_uds_simple_request_test $(BINDIR)/$(CONFIG)/h2_uds_trailing_metadata_test $(BINDIR)/$(CONFIG)/h2_uds+poll_bad_hostname_test $(BINDIR)/$(CONFIG)/h2_uds+poll_binary_metadata_test $(BINDIR)/$(CONFIG)/h2_uds+poll_call_creds_test $(BINDIR)/$(CONFIG)/h2_uds+poll_cancel_after_accept_test $(BINDIR)/$(CONFIG)/h2_uds+poll_cancel_after_client_done_test $(BINDIR)/$(CONFIG)/h2_uds+poll_cancel_after_invoke_test $(BINDIR)/$(CONFIG)/h2_uds+poll_cancel_before_invoke_test $(BINDIR)/$(CONFIG)/h2_uds+poll_cancel_in_a_vacuum_test $(BINDIR)/$(CONFIG)/h2_uds+poll_cancel_with_status_test $(BINDIR)/$(CONFIG)/h2_uds+poll_census_simple_request_test $(BINDIR)/$(CONFIG)/h2_uds+poll_channel_connectivity_test $(BINDIR)/$(CONFIG)/h2_uds+poll_compressed_payload_test $(BINDIR)/$(CONFIG)/h2_uds+poll_disappearing_server_test $(BINDIR)/$(CONFIG)/h2_uds+poll_empty_batch_test $(BINDIR)/$(CONFIG)/h2_uds+poll_graceful_server_shutdown_test $(BINDIR)/$(CONFIG)/h2_uds+poll_high_initial_seqno_test $(BINDIR)/$(CONFIG)/h2_uds+poll_hpack_size_test $(BINDIR)/$(CONFIG)/h2_uds+poll_invoke_large_request_test $(BINDIR)/$(CONFIG)/h2_uds+poll_large_metadata_test $(BINDIR)/$(CONFIG)/h2_uds+poll_max_concurrent_streams_test $(BINDIR)/$(CONFIG)/h2_uds+poll_max_message_length_test $(BINDIR)/$(CONFIG)/h2_uds+poll_metadata_test $(BINDIR)/$(CONFIG)/h2_uds+poll_negative_deadline_test $(BINDIR)/$(CONFIG)/h2_uds+poll_no_op_test $(BINDIR)/$(CONFIG)/h2_uds+poll_payload_test $(BINDIR)/$(CONFIG)/h2_uds+poll_ping_pong_streaming_test $(BINDIR)/$(CONFIG)/h2_uds+poll_registered_call_test $(BINDIR)/$(CONFIG)/h2_uds+poll_request_with_flags_test $(BINDIR)/$(CONFIG)/h2_uds+poll_request_with_payload_test $(BINDIR)/$(CONFIG)/h2_uds+poll_server_finishes_request_test $(BINDIR)/$(CONFIG)/h2_uds+poll_shutdown_finishes_calls_test $(BINDIR)/$(CONFIG)/h2_uds+poll_shutdown_finishes_tags_test $(BINDIR)/$(CONFIG)/h2_uds+poll_simple_delayed_request_test $(BINDIR)/$(CONFIG)/h2_uds+poll_simple_request_test $(BINDIR)/$(CONFIG)/h2_uds+poll_trailing_metadata_test $(BINDIR)/$(CONFIG)/h2_compress_bad_hostname_nosec_test $(BINDIR)/$(CONFIG)/h2_compress_binary_metadata_nosec_test $(BINDIR)/$(CONFIG)/h2_compress_cancel_after_accept_nosec_test $(BINDIR)/$(CONFIG)/h2_compress_cancel_after_client_done_nosec_test $(BINDIR)/$(CONFIG)/h2_compress_cancel_after_invoke_nosec_test $(BINDIR)/$(CONFIG)/h2_compress_cancel_before_invoke_nosec_test $(BINDIR)/$(CONFIG)/h2_compress_cancel_in_a_vacuum_nosec_test $(BINDIR)/$(CONFIG)/h2_compress_cancel_with_status_nosec_test $(BINDIR)/$(CONFIG)/h2_compress_census_simple_request_nosec_test $(BINDIR)/$(CONFIG)/h2_compress_channel_connectivity_nosec_test $(BINDIR)/$(CONFIG)/h2_compress_compressed_payload_nosec_test $(BINDIR)/$(CONFIG)/h2_compress_default_host_nosec_test $(BINDIR)/$(CONFIG)/h2_compress_disappearing_server_nosec_test $(BINDIR)/$(CONFIG)/h2_compress_empty_batch_nosec_test $(BINDIR)/$(CONFIG)/h2_compress_graceful_server_shutdown_nosec_test $(BINDIR)/$(CONFIG)/h2_compress_high_initial_seqno_nosec_test $(BINDIR)/$(CONFIG)/h2_compress_hpack_size_nosec_test $(BINDIR)/$(CONFIG)/h2_compress_invoke_large_request_nosec_test $(BINDIR)/$(CONFIG)/h2_compress_large_metadata_nosec_test $(BINDIR)/$(CONFIG)/h2_compress_max_concurrent_streams_nosec_test $(BINDIR)/$(CONFIG)/h2_compress_max_message_length_nosec_test $(BINDIR)/$(CONFIG)/h2_compress_metadata_nosec_test $(BINDIR)/$(CONFIG)/h2_compress_negative_deadline_nosec_test $(BINDIR)/$(CONFIG)/h2_compress_no_op_nosec_test $(BINDIR)/$(CONFIG)/h2_compress_payload_nosec_test $(BINDIR)/$(CONFIG)/h2_compress_ping_pong_streaming_nosec_test $(BINDIR)/$(CONFIG)/h2_compress_registered_call_nosec_test $(BINDIR)/$(CONFIG)/h2_compress_request_with_flags_nosec_test $(BINDIR)/$(CONFIG)/h2_compress_request_with_payload_nosec_test $(BINDIR)/$(CONFIG)/h2_compress_server_finishes_request_nosec_test $(BINDIR)/$(CONFIG)/h2_compress_shutdown_finishes_calls_nosec_test $(BINDIR)/$(CONFIG)/h2_compress_shutdown_finishes_tags_nosec_test $(BINDIR)/$(CONFIG)/h2_compress_simple_delayed_request_nosec_test $(BINDIR)/$(CONFIG)/h2_compress_simple_request_nosec_test $(BINDIR)/$(CONFIG)/h2_compress_trailing_metadata_nosec_test $(BINDIR)/$(CONFIG)/h2_full_bad_hostname_nosec_test $(BINDIR)/$(CONFIG)/h2_full_binary_metadata_nosec_test $(BINDIR)/$(CONFIG)/h2_full_cancel_after_accept_nosec_test $(BINDIR)/$(CONFIG)/h2_full_cancel_after_client_done_nosec_test $(BINDIR)/$(CONFIG)/h2_full_cancel_after_invoke_nosec_test $(BINDIR)/$(CONFIG)/h2_full_cancel_before_invoke_nosec_test $(BINDIR)/$(CONFIG)/h2_full_cancel_in_a_vacuum_nosec_test $(BINDIR)/$(CONFIG)/h2_full_cancel_with_status_nosec_test $(BINDIR)/$(CONFIG)/h2_full_census_simple_request_nosec_test $(BINDIR)/$(CONFIG)/h2_full_channel_connectivity_nosec_test $(BINDIR)/$(CONFIG)/h2_full_compressed_payload_nosec_test $(BINDIR)/$(CONFIG)/h2_full_default_host_nosec_test $(BINDIR)/$(CONFIG)/h2_full_disappearing_server_nosec_test $(BINDIR)/$(CONFIG)/h2_full_empty_batch_nosec_test $(BINDIR)/$(CONFIG)/h2_full_graceful_server_shutdown_nosec_test $(BINDIR)/$(CONFIG)/h2_full_high_initial_seqno_nosec_test $(BINDIR)/$(CONFIG)/h2_full_hpack_size_nosec_test $(BINDIR)/$(CONFIG)/h2_full_invoke_large_request_nosec_test $(BINDIR)/$(CONFIG)/h2_full_large_metadata_nosec_test $(BINDIR)/$(CONFIG)/h2_full_max_concurrent_streams_nosec_test $(BINDIR)/$(CONFIG)/h2_full_max_message_length_nosec_test $(BINDIR)/$(CONFIG)/h2_full_metadata_nosec_test $(BINDIR)/$(CONFIG)/h2_full_negative_deadline_nosec_test $(BINDIR)/$(CONFIG)/h2_full_no_op_nosec_test $(BINDIR)/$(CONFIG)/h2_full_payload_nosec_test $(BINDIR)/$(CONFIG)/h2_full_ping_pong_streaming_nosec_test $(BINDIR)/$(CONFIG)/h2_full_registered_call_nosec_test $(BINDIR)/$(CONFIG)/h2_full_request_with_flags_nosec_test $(BINDIR)/$(CONFIG)/h2_full_request_with_payload_nosec_test $(BINDIR)/$(CONFIG)/h2_full_server_finishes_request_nosec_test $(BINDIR)/$(CONFIG)/h2_full_shutdown_finishes_calls_nosec_test $(BINDIR)/$(CONFIG)/h2_full_shutdown_finishes_tags_nosec_test $(BINDIR)/$(CONFIG)/h2_full_simple_delayed_request_nosec_test $(BINDIR)/$(CONFIG)/h2_full_simple_request_nosec_test $(BINDIR)/$(CONFIG)/h2_full_trailing_metadata_nosec_test $(BINDIR)/$(CONFIG)/h2_full+poll_bad_hostname_nosec_test $(BINDIR)/$(CONFIG)/h2_full+poll_binary_metadata_nosec_test $(BINDIR)/$(CONFIG)/h2_full+poll_cancel_after_accept_nosec_test $(BINDIR)/$(CONFIG)/h2_full+poll_cancel_after_client_done_nosec_test $(BINDIR)/$(CONFIG)/h2_full+poll_cancel_after_invoke_nosec_test $(BINDIR)/$(CONFIG)/h2_full+poll_cancel_before_invoke_nosec_test $(BINDIR)/$(CONFIG)/h2_full+poll_cancel_in_a_vacuum_nosec_test $(BINDIR)/$(CONFIG)/h2_full+poll_cancel_with_status_nosec_test $(BINDIR)/$(CONFIG)/h2_full+poll_census_simple_request_nosec_test $(BINDIR)/$(CONFIG)/h2_full+poll_channel_connectivity_nosec_test $(BINDIR)/$(CONFIG)/h2_full+poll_compressed_payload_nosec_test $(BINDIR)/$(CONFIG)/h2_full+poll_default_host_nosec_test $(BINDIR)/$(CONFIG)/h2_full+poll_disappearing_server_nosec_test $(BINDIR)/$(CONFIG)/h2_full+poll_empty_batch_nosec_test $(BINDIR)/$(CONFIG)/h2_full+poll_graceful_server_shutdown_nosec_test $(BINDIR)/$(CONFIG)/h2_full+poll_high_initial_seqno_nosec_test $(BINDIR)/$(CONFIG)/h2_full+poll_hpack_size_nosec_test $(BINDIR)/$(CONFIG)/h2_full+poll_invoke_large_request_nosec_test $(BINDIR)/$(CONFIG)/h2_full+poll_large_metadata_nosec_test $(BINDIR)/$(CONFIG)/h2_full+poll_max_concurrent_streams_nosec_test $(BINDIR)/$(CONFIG)/h2_full+poll_max_message_length_nosec_test $(BINDIR)/$(CONFIG)/h2_full+poll_metadata_nosec_test $(BINDIR)/$(CONFIG)/h2_full+poll_negative_deadline_nosec_test $(BINDIR)/$(CONFIG)/h2_full+poll_no_op_nosec_test $(BINDIR)/$(CONFIG)/h2_full+poll_payload_nosec_test $(BINDIR)/$(CONFIG)/h2_full+poll_ping_pong_streaming_nosec_test $(BINDIR)/$(CONFIG)/h2_full+poll_registered_call_nosec_test $(BINDIR)/$(CONFIG)/h2_full+poll_request_with_flags_nosec_test $(BINDIR)/$(CONFIG)/h2_full+poll_request_with_payload_nosec_test $(BINDIR)/$(CONFIG)/h2_full+poll_server_finishes_request_nosec_test $(BINDIR)/$(CONFIG)/h2_full+poll_shutdown_finishes_calls_nosec_test $(BINDIR)/$(CONFIG)/h2_full+poll_shutdown_finishes_tags_nosec_test $(BINDIR)/$(CONFIG)/h2_full+poll_simple_delayed_request_nosec_test $(BINDIR)/$(CONFIG)/h2_full+poll_simple_request_nosec_test $(BINDIR)/$(CONFIG)/h2_full+poll_trailing_metadata_nosec_test $(BINDIR)/$(CONFIG)/h2_proxy_bad_hostname_nosec_test $(BINDIR)/$(CONFIG)/h2_proxy_binary_metadata_nosec_test $(BINDIR)/$(CONFIG)/h2_proxy_cancel_after_accept_nosec_test $(BINDIR)/$(CONFIG)/h2_proxy_cancel_after_client_done_nosec_test $(BINDIR)/$(CONFIG)/h2_proxy_cancel_after_invoke_nosec_test $(BINDIR)/$(CONFIG)/h2_proxy_cancel_before_invoke_nosec_test $(BINDIR)/$(CONFIG)/h2_proxy_cancel_in_a_vacuum_nosec_test $(BINDIR)/$(CONFIG)/h2_proxy_cancel_with_status_nosec_test $(BINDIR)/$(CONFIG)/h2_proxy_census_simple_request_nosec_test $(BINDIR)/$(CONFIG)/h2_proxy_default_host_nosec_test $(BINDIR)/$(CONFIG)/h2_proxy_disappearing_server_nosec_test $(BINDIR)/$(CONFIG)/h2_proxy_empty_batch_nosec_test $(BINDIR)/$(CONFIG)/h2_proxy_graceful_server_shutdown_nosec_test $(BINDIR)/$(CONFIG)/h2_proxy_high_initial_seqno_nosec_test $(BINDIR)/$(CONFIG)/h2_proxy_invoke_large_request_nosec_test $(BINDIR)/$(CONFIG)/h2_proxy_large_metadata_nosec_test $(BINDIR)/$(CONFIG)/h2_proxy_max_message_length_nosec_test $(BINDIR)/$(CONFIG)/h2_proxy_metadata_nosec_test $(BINDIR)/$(CONFIG)/h2_proxy_negative_deadline_nosec_test $(BINDIR)/$(CONFIG)/h2_proxy_no_op_nosec_test $(BINDIR)/$(CONFIG)/h2_proxy_payload_nosec_test $(BINDIR)/$(CONFIG)/h2_proxy_ping_pong_streaming_nosec_test $(BINDIR)/$(CONFIG)/h2_proxy_registered_call_nosec_test $(BINDIR)/$(CONFIG)/h2_proxy_request_with_payload_nosec_test $(BINDIR)/$(CONFIG)/h2_proxy_server_finishes_request_nosec_test $(BINDIR)/$(CONFIG)/h2_proxy_shutdown_finishes_calls_nosec_test $(BINDIR)/$(CONFIG)/h2_proxy_shutdown_finishes_tags_nosec_test $(BINDIR)/$(CONFIG)/h2_proxy_simple_delayed_request_nosec_test $(BINDIR)/$(CONFIG)/h2_proxy_simple_request_nosec_test $(BINDIR)/$(CONFIG)/h2_proxy_trailing_metadata_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_bad_hostname_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_binary_metadata_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_cancel_after_accept_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_cancel_after_client_done_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_cancel_after_invoke_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_cancel_before_invoke_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_cancel_in_a_vacuum_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_cancel_with_status_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_census_simple_request_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_compressed_payload_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_empty_batch_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_graceful_server_shutdown_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_high_initial_seqno_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_hpack_size_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_invoke_large_request_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_large_metadata_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_max_concurrent_streams_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_max_message_length_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_metadata_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_negative_deadline_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_no_op_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_payload_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_ping_pong_streaming_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_registered_call_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_request_with_flags_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_request_with_payload_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_server_finishes_request_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_shutdown_finishes_calls_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_shutdown_finishes_tags_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_simple_request_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_trailing_metadata_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_bad_hostname_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_binary_metadata_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_cancel_after_accept_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_cancel_after_client_done_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_cancel_after_invoke_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_cancel_before_invoke_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_cancel_in_a_vacuum_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_cancel_with_status_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_census_simple_request_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_compressed_payload_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_empty_batch_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_graceful_server_shutdown_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_high_initial_seqno_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_invoke_large_request_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_large_metadata_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_max_concurrent_streams_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_max_message_length_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_metadata_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_negative_deadline_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_no_op_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_payload_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_ping_pong_streaming_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_registered_call_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_request_with_flags_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_request_with_payload_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_server_finishes_request_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_shutdown_finishes_calls_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_shutdown_finishes_tags_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_simple_request_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair+trace_trailing_metadata_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_bad_hostname_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_binary_metadata_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_cancel_after_accept_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_cancel_after_client_done_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_cancel_after_invoke_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_cancel_before_invoke_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_cancel_in_a_vacuum_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_cancel_with_status_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_census_simple_request_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_compressed_payload_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_empty_batch_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_graceful_server_shutdown_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_high_initial_seqno_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_hpack_size_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_invoke_large_request_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_large_metadata_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_max_concurrent_streams_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_max_message_length_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_metadata_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_negative_deadline_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_no_op_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_payload_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_ping_pong_streaming_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_registered_call_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_request_with_flags_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_request_with_payload_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_server_finishes_request_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_shutdown_finishes_calls_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_shutdown_finishes_tags_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_simple_request_nosec_test $(BINDIR)/$(CONFIG)/h2_sockpair_1byte_trailing_metadata_nosec_test $(BINDIR)/$(CONFIG)/h2_uchannel_bad_hostname_nosec_test $(BINDIR)/$(CONFIG)/h2_uchannel_binary_metadata_nosec_test $(BINDIR)/$(CONFIG)/h2_uchannel_cancel_after_accept_nosec_test $(BINDIR)/$(CONFIG)/h2_uchannel_cancel_after_client_done_nosec_test $(BINDIR)/$(CONFIG)/h2_uchannel_cancel_after_invoke_nosec_test $(BINDIR)/$(CONFIG)/h2_uchannel_cancel_before_invoke_nosec_test $(BINDIR)/$(CONFIG)/h2_uchannel_cancel_in_a_vacuum_nosec_test $(BINDIR)/$(CONFIG)/h2_uchannel_cancel_with_status_nosec_test $(BINDIR)/$(CONFIG)/h2_uchannel_census_simple_request_nosec_test $(BINDIR)/$(CONFIG)/h2_uchannel_channel_connectivity_nosec_test $(BINDIR)/$(CONFIG)/h2_uchannel_compressed_payload_nosec_test $(BINDIR)/$(CONFIG)/h2_uchannel_default_host_nosec_test $(BINDIR)/$(CONFIG)/h2_uchannel_disappearing_server_nosec_test $(BINDIR)/$(CONFIG)/h2_uchannel_empty_batch_nosec_test $(BINDIR)/$(CONFIG)/h2_uchannel_graceful_server_shutdown_nosec_test $(BINDIR)/$(CONFIG)/h2_uchannel_high_initial_seqno_nosec_test $(BINDIR)/$(CONFIG)/h2_uchannel_hpack_size_nosec_test $(BINDIR)/$(CONFIG)/h2_uchannel_invoke_large_request_nosec_test $(BINDIR)/$(CONFIG)/h2_uchannel_large_metadata_nosec_test $(BINDIR)/$(CONFIG)/h2_uchannel_max_concurrent_streams_nosec_test $(BINDIR)/$(CONFIG)/h2_uchannel_max_message_length_nosec_test $(BINDIR)/$(CONFIG)/h2_uchannel_metadata_nosec_test $(BINDIR)/$(CONFIG)/h2_uchannel_negative_deadline_nosec_test $(BINDIR)/$(CONFIG)/h2_uchannel_no_op_nosec_test $(BINDIR)/$(CONFIG)/h2_uchannel_payload_nosec_test $(BINDIR)/$(CONFIG)/h2_uchannel_ping_pong_streaming_nosec_test $(BINDIR)/$(CONFIG)/h2_uchannel_registered_call_nosec_test $(BINDIR)/$(CONFIG)/h2_uchannel_request_with_flags_nosec_test $(BINDIR)/$(CONFIG)/h2_uchannel_request_with_payload_nosec_test $(BINDIR)/$(CONFIG)/h2_uchannel_server_finishes_request_nosec_test $(BINDIR)/$(CONFIG)/h2_uchannel_shutdown_finishes_calls_nosec_test $(BINDIR)/$(CONFIG)/h2_uchannel_shutdown_finishes_tags_nosec_test $(BINDIR)/$(CONFIG)/h2_uchannel_simple_delayed_request_nosec_test $(BINDIR)/$(CONFIG)/h2_uchannel_simple_request_nosec_test $(BINDIR)/$(CONFIG)/h2_uchannel_trailing_metadata_nosec_test $(BINDIR)/$(CONFIG)/h2_uds_bad_hostname_nosec_test $(BINDIR)/$(CONFIG)/h2_uds_binary_metadata_nosec_test $(BINDIR)/$(CONFIG)/h2_uds_cancel_after_accept_nosec_test $(BINDIR)/$(CONFIG)/h2_uds_cancel_after_client_done_nosec_test $(BINDIR)/$(CONFIG)/h2_uds_cancel_after_invoke_nosec_test $(BINDIR)/$(CONFIG)/h2_uds_cancel_before_invoke_nosec_test $(BINDIR)/$(CONFIG)/h2_uds_cancel_in_a_vacuum_nosec_test $(BINDIR)/$(CONFIG)/h2_uds_cancel_with_status_nosec_test $(BINDIR)/$(CONFIG)/h2_uds_census_simple_request_nosec_test $(BINDIR)/$(CONFIG)/h2_uds_channel_connectivity_nosec_test $(BINDIR)/$(CONFIG)/h2_uds_compressed_payload_nosec_test $(BINDIR)/$(CONFIG)/h2_uds_disappearing_server_nosec_test $(BINDIR)/$(CONFIG)/h2_uds_empty_batch_nosec_test $(BINDIR)/$(CONFIG)/h2_uds_graceful_server_shutdown_nosec_test $(BINDIR)/$(CONFIG)/h2_uds_high_initial_seqno_nosec_test $(BINDIR)/$(CONFIG)/h2_uds_hpack_size_nosec_test $(BINDIR)/$(CONFIG)/h2_uds_invoke_large_request_nosec_test $(BINDIR)/$(CONFIG)/h2_uds_large_metadata_nosec_test $(BINDIR)/$(CONFIG)/h2_uds_max_concurrent_streams_nosec_test $(BINDIR)/$(CONFIG)/h2_uds_max_message_length_nosec_test $(BINDIR)/$(CONFIG)/h2_uds_metadata_nosec_test $(BINDIR)/$(CONFIG)/h2_uds_negative_deadline_nosec_test $(BINDIR)/$(CONFIG)/h2_uds_no_op_nosec_test $(BINDIR)/$(CONFIG)/h2_uds_payload_nosec_test $(BINDIR)/$(CONFIG)/h2_uds_ping_pong_streaming_nosec_test $(BINDIR)/$(CONFIG)/h2_uds_registered_call_nosec_test $(BINDIR)/$(CONFIG)/h2_uds_request_with_flags_nosec_test $(BINDIR)/$(CONFIG)/h2_uds_request_with_payload_nosec_test $(BINDIR)/$(CONFIG)/h2_uds_server_finishes_request_nosec_test $(BINDIR)/$(CONFIG)/h2_uds_shutdown_finishes_calls_nosec_test $(BINDIR)/$(CONFIG)/h2_uds_shutdown_finishes_tags_nosec_test $(BINDIR)/$(CONFIG)/h2_uds_simple_delayed_request_nosec_test $(BINDIR)/$(CONFIG)/h2_uds_simple_request_nosec_test $(BINDIR)/$(CONFIG)/h2_uds_trailing_metadata_nosec_test $(BINDIR)/$(CONFIG)/h2_uds+poll_bad_hostname_nosec_test $(BINDIR)/$(CONFIG)/h2_uds+poll_binary_metadata_nosec_test $(BINDIR)/$(CONFIG)/h2_uds+poll_cancel_after_accept_nosec_test $(BINDIR)/$(CONFIG)/h2_uds+poll_cancel_after_client_done_nosec_test $(BINDIR)/$(CONFIG)/h2_uds+poll_cancel_after_invoke_nosec_test $(BINDIR)/$(CONFIG)/h2_uds+poll_cancel_before_invoke_nosec_test $(BINDIR)/$(CONFIG)/h2_uds+poll_cancel_in_a_vacuum_nosec_test $(BINDIR)/$(CONFIG)/h2_uds+poll_cancel_with_status_nosec_test $(BINDIR)/$(CONFIG)/h2_uds+poll_census_simple_request_nosec_test $(BINDIR)/$(CONFIG)/h2_uds+poll_channel_connectivity_nosec_test $(BINDIR)/$(CONFIG)/h2_uds+poll_compressed_payload_nosec_test $(BINDIR)/$(CONFIG)/h2_uds+poll_disappearing_server_nosec_test $(BINDIR)/$(CONFIG)/h2_uds+poll_empty_batch_nosec_test $(BINDIR)/$(CONFIG)/h2_uds+poll_graceful_server_shutdown_nosec_test $(BINDIR)/$(CONFIG)/h2_uds+poll_high_initial_seqno_nosec_test $(BINDIR)/$(CONFIG)/h2_uds+poll_hpack_size_nosec_test $(BINDIR)/$(CONFIG)/h2_uds+poll_invoke_large_request_nosec_test $(BINDIR)/$(CONFIG)/h2_uds+poll_large_metadata_nosec_test $(BINDIR)/$(CONFIG)/h2_uds+poll_max_concurrent_streams_nosec_test $(BINDIR)/$(CONFIG)/h2_uds+poll_max_message_length_nosec_test $(BINDIR)/$(CONFIG)/h2_uds+poll_metadata_nosec_test $(BINDIR)/$(CONFIG)/h2_uds+poll_negative_deadline_nosec_test $(BINDIR)/$(CONFIG)/h2_uds+poll_no_op_nosec_test $(BINDIR)/$(CONFIG)/h2_uds+poll_payload_nosec_test $(BINDIR)/$(CONFIG)/h2_uds+poll_ping_pong_streaming_nosec_test $(BINDIR)/$(CONFIG)/h2_uds+poll_registered_call_nosec_test $(BINDIR)/$(CONFIG)/h2_uds+poll_request_with_flags_nosec_test $(BINDIR)/$(CONFIG)/h2_uds+poll_request_with_payload_nosec_test $(BINDIR)/$(CONFIG)/h2_uds+poll_server_finishes_request_nosec_test $(BINDIR)/$(CONFIG)/h2_uds+poll_shutdown_finishes_calls_nosec_test $(BINDIR)/$(CONFIG)/h2_uds+poll_shutdown_finishes_tags_nosec_test $(BINDIR)/$(CONFIG)/h2_uds+poll_simple_delayed_request_nosec_test $(BINDIR)/$(CONFIG)/h2_uds+poll_simple_request_nosec_test $(BINDIR)/$(CONFIG)/h2_uds+poll_trailing_metadata_nosec_test $(BINDIR)/$(CONFIG)/connection_prefix_bad_client_test $(BINDIR)/$(CONFIG)/initial_settings_frame_bad_client_test
buildtests_cxx: buildtests_zookeeper privatelibs_cxx $(BINDIR)/$(CONFIG)/async_end2end_test $(BINDIR)/$(CONFIG)/async_streaming_ping_pong_test $(BINDIR)/$(CONFIG)/async_unary_ping_pong_test $(BINDIR)/$(CONFIG)/auth_property_iterator_test $(BINDIR)/$(CONFIG)/channel_arguments_test $(BINDIR)/$(CONFIG)/cli_call_test $(BINDIR)/$(CONFIG)/client_crash_test $(BINDIR)/$(CONFIG)/client_crash_test_server $(BINDIR)/$(CONFIG)/credentials_test $(BINDIR)/$(CONFIG)/cxx_byte_buffer_test $(BINDIR)/$(CONFIG)/cxx_slice_test $(BINDIR)/$(CONFIG)/cxx_string_ref_test $(BINDIR)/$(CONFIG)/cxx_time_test $(BINDIR)/$(CONFIG)/end2end_test $(BINDIR)/$(CONFIG)/generic_end2end_test $(BINDIR)/$(CONFIG)/grpc_cli $(BINDIR)/$(CONFIG)/interop_client $(BINDIR)/$(CONFIG)/interop_server $(BINDIR)/$(CONFIG)/interop_test $(BINDIR)/$(CONFIG)/metrics_client $(BINDIR)/$(CONFIG)/mock_test $(BINDIR)/$(CONFIG)/qps_interarrival_test $(BINDIR)/$(CONFIG)/qps_openloop_test $(BINDIR)/$(CONFIG)/qps_test $(BINDIR)/$(CONFIG)/reconnect_interop_client $(BINDIR)/$(CONFIG)/reconnect_interop_server $(BINDIR)/$(CONFIG)/secure_auth_context_test $(BINDIR)/$(CONFIG)/secure_sync_unary_ping_pong_test $(BINDIR)/$(CONFIG)/server_crash_test $(BINDIR)/$(CONFIG)/server_crash_test_client $(BINDIR)/$(CONFIG)/shutdown_test $(BINDIR)/$(CONFIG)/status_test $(BINDIR)/$(CONFIG)/streaming_throughput_test $(BINDIR)/$(CONFIG)/stress_test $(BINDIR)/$(CONFIG)/sync_streaming_ping_pong_test $(BINDIR)/$(CONFIG)/sync_unary_ping_pong_test $(BINDIR)/$(CONFIG)/thread_stress_test
@@ -1911,6 +1913,8 @@ test_c: buildtests_c
$(Q) $(BINDIR)/$(CONFIG)/fling_stream_test || ( echo test fling_stream_test failed ; exit 1 )
$(E) "[RUN] Testing fling_test"
$(Q) $(BINDIR)/$(CONFIG)/fling_test || ( echo test fling_test failed ; exit 1 )
+ $(E) "[RUN] Testing gpr_avl_test"
+ $(Q) $(BINDIR)/$(CONFIG)/gpr_avl_test || ( echo test gpr_avl_test failed ; exit 1 )
$(E) "[RUN] Testing gpr_cmdline_test"
$(Q) $(BINDIR)/$(CONFIG)/gpr_cmdline_test || ( echo test gpr_cmdline_test failed ; exit 1 )
$(E) "[RUN] Testing gpr_cpu_test"
@@ -1995,6 +1999,8 @@ test_c: buildtests_c
$(Q) $(BINDIR)/$(CONFIG)/resolve_address_test || ( echo test resolve_address_test failed ; exit 1 )
$(E) "[RUN] Testing secure_endpoint_test"
$(Q) $(BINDIR)/$(CONFIG)/secure_endpoint_test || ( echo test secure_endpoint_test failed ; exit 1 )
+ $(E) "[RUN] Testing set_initial_connect_string_test"
+ $(Q) $(BINDIR)/$(CONFIG)/set_initial_connect_string_test || ( echo test set_initial_connect_string_test failed ; exit 1 )
$(E) "[RUN] Testing sockaddr_utils_test"
$(Q) $(BINDIR)/$(CONFIG)/sockaddr_utils_test || ( echo test sockaddr_utils_test failed ; exit 1 )
$(E) "[RUN] Testing tcp_client_posix_test"
@@ -4364,6 +4370,7 @@ LIBGPR_SRC = \
src/core/profiling/basic_timers.c \
src/core/profiling/stap_timers.c \
src/core/support/alloc.c \
+ src/core/support/avl.c \
src/core/support/cmdline.c \
src/core/support/cpu_iphone.c \
src/core/support/cpu_linux.c \
@@ -4408,6 +4415,7 @@ PUBLIC_HEADERS_C += \
include/grpc/support/atm_gcc_atomic.h \
include/grpc/support/atm_gcc_sync.h \
include/grpc/support/atm_win32.h \
+ include/grpc/support/avl.h \
include/grpc/support/cmdline.h \
include/grpc/support/cpu.h \
include/grpc/support/histogram.h \
@@ -4526,6 +4534,8 @@ LIBGRPC_SRC = \
src/core/channel/subchannel_call_holder.c \
src/core/client_config/client_config.c \
src/core/client_config/connector.c \
+ src/core/client_config/default_initial_connect_string.c \
+ src/core/client_config/initial_connect_string.c \
src/core/client_config/lb_policies/pick_first.c \
src/core/client_config/lb_policies/round_robin.c \
src/core/client_config/lb_policy.c \
@@ -4810,6 +4820,8 @@ LIBGRPC_UNSECURE_SRC = \
src/core/channel/subchannel_call_holder.c \
src/core/client_config/client_config.c \
src/core/client_config/connector.c \
+ src/core/client_config/default_initial_connect_string.c \
+ src/core/client_config/initial_connect_string.c \
src/core/client_config/lb_policies/pick_first.c \
src/core/client_config/lb_policies/round_robin.c \
src/core/client_config/lb_policy.c \
@@ -5049,6 +5061,43 @@ endif
endif
+LIBTEST_TCP_SERVER_SRC = \
+ test/core/util/test_tcp_server.c \
+
+
+LIBTEST_TCP_SERVER_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBTEST_TCP_SERVER_SRC))))
+
+ifeq ($(NO_SECURE),true)
+
+# You can't build secure libraries if you don't have OpenSSL.
+
+$(LIBDIR)/$(CONFIG)/libtest_tcp_server.a: openssl_dep_error
+
+
+else
+
+
+$(LIBDIR)/$(CONFIG)/libtest_tcp_server.a: $(ZLIB_DEP) $(OPENSSL_DEP) $(LIBTEST_TCP_SERVER_OBJS)
+ $(E) "[AR] Creating $@"
+ $(Q) mkdir -p `dirname $@`
+ $(Q) rm -f $(LIBDIR)/$(CONFIG)/libtest_tcp_server.a
+ $(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libtest_tcp_server.a $(LIBTEST_TCP_SERVER_OBJS)
+ifeq ($(SYSTEM),Darwin)
+ $(Q) ranlib $(LIBDIR)/$(CONFIG)/libtest_tcp_server.a
+endif
+
+
+
+
+endif
+
+ifneq ($(NO_SECURE),true)
+ifneq ($(NO_DEPS),true)
+-include $(LIBTEST_TCP_SERVER_OBJS:.o=.dep)
+endif
+endif
+
+
LIBGRPC++_SRC = \
src/cpp/client/secure_channel_arguments.cc \
src/cpp/client/secure_credentials.cc \
@@ -7594,6 +7643,35 @@ endif
endif
+GPR_AVL_TEST_SRC = \
+ test/core/support/avl_test.c \
+
+GPR_AVL_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(GPR_AVL_TEST_SRC))))
+ifeq ($(NO_SECURE),true)
+
+# You can't build secure targets if you don't have OpenSSL.
+
+$(BINDIR)/$(CONFIG)/gpr_avl_test: openssl_dep_error
+
+else
+
+$(BINDIR)/$(CONFIG)/gpr_avl_test: $(GPR_AVL_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
+ $(E) "[LD] Linking $@"
+ $(Q) mkdir -p `dirname $@`
+ $(Q) $(LD) $(LDFLAGS) $(GPR_AVL_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/gpr_avl_test
+
+endif
+
+$(OBJDIR)/$(CONFIG)/test/core/support/avl_test.o: $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
+deps_gpr_avl_test: $(GPR_AVL_TEST_OBJS:.o=.dep)
+
+ifneq ($(NO_SECURE),true)
+ifneq ($(NO_DEPS),true)
+-include $(GPR_AVL_TEST_OBJS:.o=.dep)
+endif
+endif
+
+
GPR_CMDLINE_TEST_SRC = \
test/core/support/cmdline_test.c \
@@ -8986,6 +9064,35 @@ endif
endif
+SET_INITIAL_CONNECT_STRING_TEST_SRC = \
+ test/core/client_config/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)
+
+# You can't build secure targets if you don't have OpenSSL.
+
+$(BINDIR)/$(CONFIG)/set_initial_connect_string_test: openssl_dep_error
+
+else
+
+$(BINDIR)/$(CONFIG)/set_initial_connect_string_test: $(SET_INITIAL_CONNECT_STRING_TEST_OBJS) $(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
+ $(E) "[LD] Linking $@"
+ $(Q) mkdir -p `dirname $@`
+ $(Q) $(LD) $(LDFLAGS) $(SET_INITIAL_CONNECT_STRING_TEST_OBJS) $(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 $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/set_initial_connect_string_test
+
+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
+deps_set_initial_connect_string_test: $(SET_INITIAL_CONNECT_STRING_TEST_OBJS:.o=.dep)
+
+ifneq ($(NO_SECURE),true)
+ifneq ($(NO_DEPS),true)
+-include $(SET_INITIAL_CONNECT_STRING_TEST_OBJS:.o=.dep)
+endif
+endif
+
+
SOCKADDR_UTILS_TEST_SRC = \
test/core/iomgr/sockaddr_utils_test.c \
@@ -10624,19 +10731,19 @@ $(BINDIR)/$(CONFIG)/reconnect_interop_server: protobuf_dep_error
else
-$(BINDIR)/$(CONFIG)/reconnect_interop_server: $(PROTOBUF_DEP) $(RECONNECT_INTEROP_SERVER_OBJS) $(LIBDIR)/$(CONFIG)/libreconnect_server.a $(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
+$(BINDIR)/$(CONFIG)/reconnect_interop_server: $(PROTOBUF_DEP) $(RECONNECT_INTEROP_SERVER_OBJS) $(LIBDIR)/$(CONFIG)/libreconnect_server.a $(LIBDIR)/$(CONFIG)/libtest_tcp_server.a $(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
$(E) "[LD] Linking $@"
$(Q) mkdir -p `dirname $@`
- $(Q) $(LDXX) $(LDFLAGS) $(RECONNECT_INTEROP_SERVER_OBJS) $(LIBDIR)/$(CONFIG)/libreconnect_server.a $(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 $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/reconnect_interop_server
+ $(Q) $(LDXX) $(LDFLAGS) $(RECONNECT_INTEROP_SERVER_OBJS) $(LIBDIR)/$(CONFIG)/libreconnect_server.a $(LIBDIR)/$(CONFIG)/libtest_tcp_server.a $(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 $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/reconnect_interop_server
endif
endif
-$(OBJDIR)/$(CONFIG)/test/proto/empty.o: $(LIBDIR)/$(CONFIG)/libreconnect_server.a $(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/proto/messages.o: $(LIBDIR)/$(CONFIG)/libreconnect_server.a $(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/proto/test.o: $(LIBDIR)/$(CONFIG)/libreconnect_server.a $(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/reconnect_interop_server.o: $(LIBDIR)/$(CONFIG)/libreconnect_server.a $(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/proto/empty.o: $(LIBDIR)/$(CONFIG)/libreconnect_server.a $(LIBDIR)/$(CONFIG)/libtest_tcp_server.a $(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/proto/messages.o: $(LIBDIR)/$(CONFIG)/libreconnect_server.a $(LIBDIR)/$(CONFIG)/libtest_tcp_server.a $(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/proto/test.o: $(LIBDIR)/$(CONFIG)/libreconnect_server.a $(LIBDIR)/$(CONFIG)/libtest_tcp_server.a $(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/reconnect_interop_server.o: $(LIBDIR)/$(CONFIG)/libreconnect_server.a $(LIBDIR)/$(CONFIG)/libtest_tcp_server.a $(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
deps_reconnect_interop_server: $(RECONNECT_INTEROP_SERVER_OBJS:.o=.dep)
ifneq ($(NO_SECURE),true)
@@ -23136,6 +23243,7 @@ test/core/end2end/fixtures/h2_ssl.c: $(OPENSSL_DEP)
test/core/end2end/fixtures/h2_ssl_proxy.c: $(OPENSSL_DEP)
test/core/end2end/tests/call_creds.c: $(OPENSSL_DEP)
test/core/util/reconnect_server.c: $(OPENSSL_DEP)
+test/core/util/test_tcp_server.c: $(OPENSSL_DEP)
test/cpp/interop/client.cc: $(OPENSSL_DEP)
test/cpp/interop/client_helper.cc: $(OPENSSL_DEP)
test/cpp/interop/interop_client.cc: $(OPENSSL_DEP)
diff --git a/binding.gyp b/binding.gyp
index 6ccd15bb8d..5205568739 100644
--- a/binding.gyp
+++ b/binding.gyp
@@ -97,6 +97,7 @@
'src/core/profiling/basic_timers.c',
'src/core/profiling/stap_timers.c',
'src/core/support/alloc.c',
+ 'src/core/support/avl.c',
'src/core/support/cmdline.c',
'src/core/support/cpu_iphone.c',
'src/core/support/cpu_linux.c',
@@ -186,6 +187,8 @@
'src/core/channel/subchannel_call_holder.c',
'src/core/client_config/client_config.c',
'src/core/client_config/connector.c',
+ 'src/core/client_config/default_initial_connect_string.c',
+ 'src/core/client_config/initial_connect_string.c',
'src/core/client_config/lb_policies/pick_first.c',
'src/core/client_config/lb_policies/round_robin.c',
'src/core/client_config/lb_policy.c',
diff --git a/build.yaml b/build.yaml
index 7f7ae1c66b..f1e44fedd2 100644
--- a/build.yaml
+++ b/build.yaml
@@ -119,6 +119,7 @@ filegroups:
- src/core/channel/subchannel_call_holder.h
- src/core/client_config/client_config.h
- src/core/client_config/connector.h
+ - src/core/client_config/initial_connect_string.h
- src/core/client_config/lb_policies/pick_first.h
- src/core/client_config/lb_policies/round_robin.h
- src/core/client_config/lb_policy.h
@@ -235,6 +236,8 @@ filegroups:
- src/core/channel/subchannel_call_holder.c
- src/core/client_config/client_config.c
- src/core/client_config/connector.c
+ - src/core/client_config/default_initial_connect_string.c
+ - src/core/client_config/initial_connect_string.c
- src/core/client_config/lb_policies/pick_first.c
- src/core/client_config/lb_policies/round_robin.c
- src/core/client_config/lb_policy.c
@@ -376,6 +379,7 @@ libs:
- include/grpc/support/atm_gcc_atomic.h
- include/grpc/support/atm_gcc_sync.h
- include/grpc/support/atm_win32.h
+ - include/grpc/support/avl.h
- include/grpc/support/cmdline.h
- include/grpc/support/cpu.h
- include/grpc/support/histogram.h
@@ -413,6 +417,7 @@ libs:
- src/core/profiling/basic_timers.c
- src/core/profiling/stap_timers.c
- src/core/support/alloc.c
+ - src/core/support/avl.c
- src/core/support/cmdline.c
- src/core/support/cpu_iphone.c
- src/core/support/cpu_linux.c
@@ -582,6 +587,19 @@ libs:
src:
- test/core/util/reconnect_server.c
deps:
+ - test_tcp_server
+ - grpc_test_util
+ - grpc
+ - gpr_test_util
+ - gpr
+- name: test_tcp_server
+ build: private
+ language: c
+ headers:
+ - test/core/util/test_tcp_server.h
+ src:
+ - test/core/util/test_tcp_server.c
+ deps:
- grpc_test_util
- grpc
- gpr_test_util
@@ -972,6 +990,14 @@ targets:
src:
- tools/codegen/core/gen_legal_metadata_characters.c
deps: []
+- name: gpr_avl_test
+ build: test
+ language: c
+ src:
+ - test/core/support/avl_test.c
+ deps:
+ - gpr_test_util
+ - gpr
- name: gpr_cmdline_test
build: test
language: c
@@ -1429,6 +1455,17 @@ targets:
- grpc
- gpr_test_util
- gpr
+- name: set_initial_connect_string_test
+ build: test
+ language: c
+ src:
+ - test/core/client_config/set_initial_connect_string_test.c
+ deps:
+ - test_tcp_server
+ - grpc_test_util
+ - grpc
+ - gpr_test_util
+ - gpr
- name: sockaddr_utils_test
build: test
language: c
@@ -2032,6 +2069,7 @@ targets:
- test/cpp/interop/reconnect_interop_server.cc
deps:
- reconnect_server
+ - test_tcp_server
- grpc++_test_util
- grpc_test_util
- grpc++
diff --git a/gRPC.podspec b/gRPC.podspec
index ac80ee02a9..777638e8a0 100644
--- a/gRPC.podspec
+++ b/gRPC.podspec
@@ -78,6 +78,7 @@ Pod::Spec.new do |s|
'include/grpc/support/atm_gcc_atomic.h',
'include/grpc/support/atm_gcc_sync.h',
'include/grpc/support/atm_win32.h',
+ 'include/grpc/support/avl.h',
'include/grpc/support/cmdline.h',
'include/grpc/support/cpu.h',
'include/grpc/support/histogram.h',
@@ -103,6 +104,7 @@ Pod::Spec.new do |s|
'src/core/profiling/basic_timers.c',
'src/core/profiling/stap_timers.c',
'src/core/support/alloc.c',
+ 'src/core/support/avl.c',
'src/core/support/cmdline.c',
'src/core/support/cpu_iphone.c',
'src/core/support/cpu_linux.c',
@@ -167,6 +169,7 @@ Pod::Spec.new do |s|
'src/core/channel/subchannel_call_holder.h',
'src/core/client_config/client_config.h',
'src/core/client_config/connector.h',
+ 'src/core/client_config/initial_connect_string.h',
'src/core/client_config/lb_policies/pick_first.h',
'src/core/client_config/lb_policies/round_robin.h',
'src/core/client_config/lb_policy.h',
@@ -313,6 +316,8 @@ Pod::Spec.new do |s|
'src/core/channel/subchannel_call_holder.c',
'src/core/client_config/client_config.c',
'src/core/client_config/connector.c',
+ 'src/core/client_config/default_initial_connect_string.c',
+ 'src/core/client_config/initial_connect_string.c',
'src/core/client_config/lb_policies/pick_first.c',
'src/core/client_config/lb_policies/round_robin.c',
'src/core/client_config/lb_policy.c',
@@ -466,6 +471,7 @@ Pod::Spec.new do |s|
'src/core/channel/subchannel_call_holder.h',
'src/core/client_config/client_config.h',
'src/core/client_config/connector.h',
+ 'src/core/client_config/initial_connect_string.h',
'src/core/client_config/lb_policies/pick_first.h',
'src/core/client_config/lb_policies/round_robin.h',
'src/core/client_config/lb_policy.h',
diff --git a/include/grpc/grpc.h b/include/grpc/grpc.h
index f07f584ef2..cedcee7c54 100644
--- a/include/grpc/grpc.h
+++ b/include/grpc/grpc.h
@@ -127,6 +127,11 @@ typedef struct {
/** Initial sequence number for http2 transports */
#define GRPC_ARG_HTTP2_INITIAL_SEQUENCE_NUMBER \
"grpc.http2.initial_sequence_number"
+/** Amount to read ahead on individual streams. Defaults to 64kb, larger
+ values can help throughput on high-latency connections.
+ NOTE: at some point we'd like to auto-tune this, and this parameter
+ will become a no-op. */
+#define GRPC_ARG_HTTP2_STREAM_LOOKAHEAD_BYTES "grpc.http2.lookahead_bytes"
/** How much memory to use for hpack decoding */
#define GRPC_ARG_HTTP2_HPACK_TABLE_SIZE_DECODER \
"grpc.http2.hpack_table_size.decoder"
diff --git a/include/grpc/support/avl.h b/include/grpc/support/avl.h
new file mode 100644
index 0000000000..d462f52bfe
--- /dev/null
+++ b/include/grpc/support/avl.h
@@ -0,0 +1,91 @@
+/*
+ *
+ * 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_SUPPORT_AVL_H
+#define GRPC_SUPPORT_AVL_H
+
+#include <grpc/support/sync.h>
+
+/** internal node of an AVL tree */
+typedef struct gpr_avl_node {
+ gpr_refcount refs;
+ void *key;
+ void *value;
+ struct gpr_avl_node *left;
+ struct gpr_avl_node *right;
+ long height;
+} gpr_avl_node;
+
+typedef struct gpr_avl_vtable {
+ /** destroy a key */
+ void (*destroy_key)(void *key);
+ /** copy a key, returning new value */
+ void *(*copy_key)(void *key);
+ /** compare key1, key2; return <0 if key1 < key2,
+ >0 if key1 > key2, 0 if key1 == key2 */
+ long (*compare_keys)(void *key1, void *key2);
+ /** destroy a value */
+ void (*destroy_value)(void *value);
+ /** copy a value */
+ void *(*copy_value)(void *value);
+} gpr_avl_vtable;
+
+/** "pointer" to an AVL tree - this is a reference
+ counted object - use gpr_avl_ref to add a reference,
+ gpr_avl_unref when done with a reference */
+typedef struct gpr_avl {
+ const gpr_avl_vtable *vtable;
+ gpr_avl_node *root;
+} gpr_avl;
+
+/** create an immutable AVL tree */
+gpr_avl gpr_avl_create(const gpr_avl_vtable *vtable);
+/** add a reference to an existing tree - returns
+ the tree as a convenience */
+gpr_avl gpr_avl_ref(gpr_avl avl);
+/** remove a reference to a tree - destroying it if there
+ are no references left */
+void gpr_avl_unref(gpr_avl avl);
+/** return a new tree with (key, value) added to avl.
+ implicitly unrefs avl to allow easy chaining.
+ if key exists in avl, the new tree's key entry updated
+ (i.e. a duplicate is not created) */
+gpr_avl gpr_avl_add(gpr_avl avl, void *key, void *value);
+/** return a new tree with key deleted */
+gpr_avl gpr_avl_remove(gpr_avl avl, void *key);
+/** lookup key, and return the associated value.
+ does not mutate avl.
+ returns NULL if key is not found. */
+void *gpr_avl_get(gpr_avl avl, void *key);
+
+#endif
diff --git a/src/core/client_config/connector.h b/src/core/client_config/connector.h
index e9b8be4b53..a649f143ae 100644
--- a/src/core/client_config/connector.h
+++ b/src/core/client_config/connector.h
@@ -51,6 +51,8 @@ typedef struct {
/** address to connect to */
const struct sockaddr *addr;
size_t addr_len;
+ /** initial connect string to send */
+ gpr_slice initial_connect_string;
/** deadline for connection */
gpr_timespec deadline;
/** channel arguments (to be passed to transport) */
diff --git a/src/core/client_config/default_initial_connect_string.c b/src/core/client_config/default_initial_connect_string.c
new file mode 100644
index 0000000000..6a4e23e6f2
--- /dev/null
+++ b/src/core/client_config/default_initial_connect_string.c
@@ -0,0 +1,39 @@
+/*
+ *
+ * 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/slice.h>
+#include "src/core/iomgr/sockaddr.h"
+
+void grpc_set_default_initial_connect_string(struct sockaddr **addr,
+ size_t *addr_len,
+ gpr_slice *initial_str) {}
diff --git a/src/core/client_config/initial_connect_string.c b/src/core/client_config/initial_connect_string.c
new file mode 100644
index 0000000000..19afa1675a
--- /dev/null
+++ b/src/core/client_config/initial_connect_string.c
@@ -0,0 +1,53 @@
+/*
+ *
+ * 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/client_config/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);
+
+static grpc_set_initial_connect_string_func g_set_initial_connect_string_func =
+ grpc_set_default_initial_connect_string;
+
+void grpc_test_set_initial_connect_string_function(
+ grpc_set_initial_connect_string_func func) {
+ g_set_initial_connect_string_func = func;
+}
+
+void grpc_set_initial_connect_string(struct sockaddr **addr, size_t *addr_len,
+ gpr_slice *initial_str) {
+ g_set_initial_connect_string_func(addr, addr_len, initial_str);
+}
diff --git a/src/core/client_config/initial_connect_string.h b/src/core/client_config/initial_connect_string.h
new file mode 100644
index 0000000000..b6dca7134a
--- /dev/null
+++ b/src/core/client_config/initial_connect_string.h
@@ -0,0 +1,50 @@
+/*
+ *
+ * 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_INTERNAL_CORE_CLIENT_CONFIG_INITIAL_CONNECT_STRING_H
+#define GRPC_INTERNAL_CORE_CLIENT_CONFIG_INITIAL_CONNECT_STRING_H
+
+#include <grpc/support/slice.h>
+#include "src/core/iomgr/sockaddr.h"
+
+typedef void (*grpc_set_initial_connect_string_func)(struct sockaddr **addr,
+ size_t *addr_len,
+ 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,
+ gpr_slice *connect_string);
+
+#endif /* GRPC_INTERNAL_CORE_CLIENT_CONFIG_INITIAL_CONNECT_STRING_H */
diff --git a/src/core/client_config/subchannel.c b/src/core/client_config/subchannel.c
index 8e19701997..28496ac2c9 100644
--- a/src/core/client_config/subchannel.c
+++ b/src/core/client_config/subchannel.c
@@ -40,6 +40,7 @@
#include "src/core/channel/channel_args.h"
#include "src/core/channel/client_channel.h"
#include "src/core/channel/connected_channel.h"
+#include "src/core/client_config/initial_connect_string.h"
#include "src/core/iomgr/timer.h"
#include "src/core/profiling/timers.h"
#include "src/core/surface/channel.h"
@@ -87,6 +88,8 @@ struct grpc_subchannel {
/** address to connect to */
struct sockaddr *addr;
size_t addr_len;
+ /** initial string to send to peer */
+ gpr_slice initial_connect_string;
/** master channel - the grpc_channel instance that ultimately owns
this channel_data via its channel stack.
We occasionally use this to bump the refcount on the master channel
@@ -265,6 +268,7 @@ static void subchannel_destroy(grpc_exec_ctx *exec_ctx, grpc_subchannel *c) {
gpr_free((void *)c->filters);
grpc_channel_args_destroy(c->args);
gpr_free(c->addr);
+ gpr_slice_unref(c->initial_connect_string);
grpc_connectivity_state_destroy(exec_ctx, &c->state_tracker);
grpc_connector_unref(exec_ctx, c->connector);
gpr_free(c);
@@ -302,6 +306,8 @@ grpc_subchannel *grpc_subchannel_create(grpc_connector *connector,
c->addr = gpr_malloc(args->addr_len);
memcpy(c->addr, args->addr, args->addr_len);
c->addr_len = args->addr_len;
+ grpc_set_initial_connect_string(&c->addr, &c->addr_len,
+ &c->initial_connect_string);
c->args = grpc_channel_args_copy(args->args);
c->master = args->master;
c->pollset_set = grpc_client_channel_get_connecting_pollset_set(parent_elem);
@@ -375,6 +381,7 @@ static void continue_connect(grpc_exec_ctx *exec_ctx, grpc_subchannel *c) {
args.addr_len = c->addr_len;
args.deadline = compute_connect_deadline(c);
args.channel_args = c->args;
+ args.initial_connect_string = c->initial_connect_string;
grpc_connector_connect(exec_ctx, c->connector, &args, &c->connecting_result,
&c->connected);
diff --git a/src/core/iomgr/pollset_posix.c b/src/core/iomgr/pollset_posix.c
index 5d701fa87b..c179248214 100644
--- a/src/core/iomgr/pollset_posix.c
+++ b/src/core/iomgr/pollset_posix.c
@@ -194,6 +194,7 @@ void grpc_pollset_init(grpc_pollset *pollset) {
pollset->in_flight_cbs = 0;
pollset->shutting_down = 0;
pollset->called_shutdown = 0;
+ pollset->kicked_without_pollers = 0;
pollset->idle_jobs.head = pollset->idle_jobs.tail = NULL;
pollset->local_wakeup_cache = NULL;
pollset->kicked_without_pollers = 0;
diff --git a/src/core/iomgr/tcp_server.h b/src/core/iomgr/tcp_server.h
index 3df36174e7..3294e13797 100644
--- a/src/core/iomgr/tcp_server.h
+++ b/src/core/iomgr/tcp_server.h
@@ -64,8 +64,7 @@ void grpc_tcp_server_start(grpc_exec_ctx *exec_ctx, grpc_tcp_server *server,
/* 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_tcp_listener *grpc_tcp_server_add_port(grpc_tcp_server *s,
- const void *addr,
- size_t addr_len);
+ const void *addr, size_t addr_len);
/* Returns the file descriptor of the Nth listening socket on this server,
or -1 if the index is out of bounds.
diff --git a/src/core/iomgr/tcp_server_posix.c b/src/core/iomgr/tcp_server_posix.c
index 1439dfcd6e..0ece77c4e8 100644
--- a/src/core/iomgr/tcp_server_posix.c
+++ b/src/core/iomgr/tcp_server_posix.c
@@ -374,8 +374,8 @@ error:
}
static grpc_tcp_listener *add_socket_to_server(grpc_tcp_server *s, int fd,
- const struct sockaddr *addr,
- size_t addr_len) {
+ const struct sockaddr *addr,
+ size_t addr_len) {
grpc_tcp_listener *sp = NULL;
int port;
char *addr_str;
@@ -410,8 +410,7 @@ static grpc_tcp_listener *add_socket_to_server(grpc_tcp_server *s, int fd,
}
grpc_tcp_listener *grpc_tcp_server_add_port(grpc_tcp_server *s,
- const void *addr,
- size_t addr_len) {
+ const void *addr, size_t addr_len) {
int allocated_port = -1;
grpc_tcp_listener *sp;
grpc_tcp_listener *sp2 = NULL;
@@ -499,7 +498,8 @@ done:
int grpc_tcp_server_get_fd(grpc_tcp_server *s, unsigned port_index) {
grpc_tcp_listener *sp;
- for (sp = s->head; sp && port_index != 0; sp = sp->next, port_index--);
+ for (sp = s->head; sp && port_index != 0; sp = sp->next, port_index--)
+ ;
if (port_index == 0 && sp) {
return sp->fd;
} else {
@@ -527,8 +527,7 @@ void grpc_tcp_server_start(grpc_exec_ctx *exec_ctx, grpc_tcp_server *s,
}
sp->read_closure.cb = on_read;
sp->read_closure.cb_arg = sp;
- grpc_fd_notify_on_read(exec_ctx, sp->emfd,
- &sp->read_closure);
+ grpc_fd_notify_on_read(exec_ctx, sp->emfd, &sp->read_closure);
s->active_ports++;
}
gpr_mu_unlock(&s->mu);
diff --git a/src/core/iomgr/tcp_server_windows.c b/src/core/iomgr/tcp_server_windows.c
index e4a1d7f498..a2425cd4d2 100644
--- a/src/core/iomgr/tcp_server_windows.c
+++ b/src/core/iomgr/tcp_server_windows.c
@@ -352,8 +352,8 @@ static void on_accept(grpc_exec_ctx *exec_ctx, void *arg, int from_iocp) {
}
static grpc_tcp_listener *add_socket_to_server(grpc_tcp_server *s, SOCKET sock,
- const struct sockaddr *addr,
- size_t addr_len) {
+ const struct sockaddr *addr,
+ size_t addr_len) {
grpc_tcp_listener *sp = NULL;
int port;
int status;
@@ -400,8 +400,7 @@ static grpc_tcp_listener *add_socket_to_server(grpc_tcp_server *s, SOCKET sock,
}
grpc_tcp_listener *grpc_tcp_server_add_port(grpc_tcp_server *s,
- const void *addr,
- size_t addr_len) {
+ const void *addr, size_t addr_len) {
grpc_tcp_listener *sp;
SOCKET sock;
struct sockaddr_in6 addr6_v4mapped;
@@ -459,7 +458,8 @@ grpc_tcp_listener *grpc_tcp_server_add_port(grpc_tcp_server *s,
int grpc_tcp_server_get_fd(grpc_tcp_server *s, unsigned port_index) {
grpc_tcp_listener *sp;
- for (sp = s->head; sp && port_index != 0; sp = sp->next, port_index--);
+ for (sp = s->head; sp && port_index != 0; sp = sp->next, port_index--)
+ ;
if (port_index == 0 && sp) {
return _open_osfhandle(sp->socket->socket, 0);
} else {
diff --git a/src/core/profiling/basic_timers.c b/src/core/profiling/basic_timers.c
index 527a160101..f0fce7858d 100644
--- a/src/core/profiling/basic_timers.c
+++ b/src/core/profiling/basic_timers.c
@@ -53,50 +53,186 @@ typedef struct gpr_timer_entry {
short line;
char type;
gpr_uint8 important;
+ int thd;
} gpr_timer_entry;
-#define MAX_COUNT (5 * 1024 * 1024 / sizeof(gpr_timer_entry))
+#define MAX_COUNT 1000000
-static __thread gpr_timer_entry g_log[MAX_COUNT];
-static __thread int g_count;
+typedef struct gpr_timer_log {
+ size_t num_entries;
+ struct gpr_timer_log *next;
+ struct gpr_timer_log *prev;
+ gpr_timer_entry log[MAX_COUNT];
+} gpr_timer_log;
+
+typedef struct gpr_timer_log_list {
+ gpr_timer_log *head;
+ /* valid iff head!=NULL */
+ gpr_timer_log *tail;
+} gpr_timer_log_list;
+
+static __thread gpr_timer_log *g_thread_log;
static gpr_once g_once_init = GPR_ONCE_INIT;
static FILE *output_file;
+static const char *output_filename = "latency_trace.txt";
+static pthread_mutex_t g_mu;
+static pthread_cond_t g_cv;
+static gpr_timer_log_list g_in_progress_logs;
+static gpr_timer_log_list g_done_logs;
+static int g_shutdown;
+static gpr_thd_id g_writing_thread;
+static __thread int g_thread_id;
+static int g_next_thread_id;
-static void close_output() { fclose(output_file); }
+static int timer_log_push_back(gpr_timer_log_list *list, gpr_timer_log *log) {
+ if (list->head == NULL) {
+ list->head = list->tail = log;
+ log->next = log->prev = NULL;
+ return 1;
+ } else {
+ log->prev = list->tail;
+ log->next = NULL;
+ list->tail->next = log;
+ list->tail = log;
+ return 0;
+ }
+}
-static void init_output() {
- output_file = fopen("latency_trace.txt", "w");
- GPR_ASSERT(output_file);
- atexit(close_output);
+static gpr_timer_log *timer_log_pop_front(gpr_timer_log_list *list) {
+ gpr_timer_log *out = list->head;
+ if (out != NULL) {
+ list->head = out->next;
+ if (list->head != NULL) {
+ list->head->prev = NULL;
+ } else {
+ list->tail = NULL;
+ }
+ }
+ return out;
}
-static void log_report() {
- int i;
- gpr_once_init(&g_once_init, init_output);
- for (i = 0; i < g_count; i++) {
- gpr_timer_entry *entry = &(g_log[i]);
+static void timer_log_remove(gpr_timer_log_list *list, gpr_timer_log *log) {
+ if (log->prev == NULL) {
+ list->head = log->next;
+ if (list->head != NULL) {
+ list->head->prev = NULL;
+ }
+ } else {
+ log->prev->next = log->next;
+ }
+ if (log->next == NULL) {
+ list->tail = log->prev;
+ if (list->tail != NULL) {
+ list->tail->next = NULL;
+ }
+ } else {
+ log->next->prev = log->prev;
+ }
+}
+
+static void write_log(gpr_timer_log *log) {
+ size_t i;
+ if (output_file == NULL) {
+ output_file = fopen(output_filename, "w");
+ }
+ for (i = 0; i < log->num_entries; i++) {
+ gpr_timer_entry *entry = &(log->log[i]);
+ if (gpr_time_cmp(entry->tm, gpr_time_0(entry->tm.clock_type)) < 0) {
+ entry->tm = gpr_time_0(entry->tm.clock_type);
+ }
fprintf(output_file,
- "{\"t\": %ld.%09d, \"thd\": \"%p\", \"type\": \"%c\", \"tag\": "
+ "{\"t\": %ld.%09d, \"thd\": \"%d\", \"type\": \"%c\", \"tag\": "
"\"%s\", \"file\": \"%s\", \"line\": %d, \"imp\": %d}\n",
- entry->tm.tv_sec, entry->tm.tv_nsec,
- (void *)(gpr_intptr)gpr_thd_currentid(), entry->type, entry->tagstr,
- entry->file, entry->line, entry->important);
+ entry->tm.tv_sec, entry->tm.tv_nsec, entry->thd, entry->type,
+ entry->tagstr, entry->file, entry->line, entry->important);
+ }
+}
+
+static void writing_thread(void *unused) {
+ gpr_timer_log *log;
+ pthread_mutex_lock(&g_mu);
+ for (;;) {
+ while ((log = timer_log_pop_front(&g_done_logs)) == NULL && !g_shutdown) {
+ pthread_cond_wait(&g_cv, &g_mu);
+ }
+ if (log != NULL) {
+ pthread_mutex_unlock(&g_mu);
+ write_log(log);
+ free(log);
+ pthread_mutex_lock(&g_mu);
+ }
+ if (g_shutdown) {
+ pthread_mutex_unlock(&g_mu);
+ return;
+ }
}
+}
- /* Now clear out the log */
- g_count = 0;
+static void flush_logs(gpr_timer_log_list *list) {
+ gpr_timer_log *log;
+ while ((log = timer_log_pop_front(list)) != NULL) {
+ write_log(log);
+ free(log);
+ }
+}
+
+static void finish_writing() {
+ pthread_mutex_lock(&g_mu);
+ g_shutdown = 1;
+ pthread_cond_signal(&g_cv);
+ pthread_mutex_unlock(&g_mu);
+ gpr_thd_join(g_writing_thread);
+
+ gpr_log(GPR_INFO, "flushing logs");
+
+ pthread_mutex_lock(&g_mu);
+ flush_logs(&g_done_logs);
+ flush_logs(&g_in_progress_logs);
+ pthread_mutex_unlock(&g_mu);
+
+ if (output_file) {
+ fclose(output_file);
+ }
+}
+
+void gpr_timers_set_log_filename(const char *filename) {
+ output_filename = filename;
+}
+
+static void init_output() {
+ gpr_thd_options options = gpr_thd_options_default();
+ gpr_thd_options_set_joinable(&options);
+ gpr_thd_new(&g_writing_thread, writing_thread, NULL, &options);
+ atexit(finish_writing);
+}
+
+static void rotate_log() {
+ gpr_timer_log *new = malloc(sizeof(*new));
+ gpr_once_init(&g_once_init, init_output);
+ new->num_entries = 0;
+ pthread_mutex_lock(&g_mu);
+ if (g_thread_log != NULL) {
+ timer_log_remove(&g_in_progress_logs, g_thread_log);
+ if (timer_log_push_back(&g_done_logs, g_thread_log)) {
+ pthread_cond_signal(&g_cv);
+ }
+ } else {
+ g_thread_id = g_next_thread_id++;
+ }
+ timer_log_push_back(&g_in_progress_logs, new);
+ pthread_mutex_unlock(&g_mu);
+ g_thread_log = new;
}
static void gpr_timers_log_add(const char *tagstr, marker_type type,
int important, const char *file, int line) {
gpr_timer_entry *entry;
- /* TODO (vpai) : Improve concurrency */
- if (g_count == MAX_COUNT) {
- log_report();
+ if (g_thread_log == NULL || g_thread_log->num_entries == MAX_COUNT) {
+ rotate_log();
}
- entry = &g_log[g_count++];
+ entry = &g_thread_log->log[g_thread_log->num_entries++];
entry->tm = gpr_now(GPR_CLOCK_PRECISE);
entry->tagstr = tagstr;
@@ -104,6 +240,7 @@ static void gpr_timers_log_add(const char *tagstr, marker_type type,
entry->file = file;
entry->line = (short)line;
entry->important = important != 0;
+ entry->thd = g_thread_id;
}
/* Latency profiler API implementation. */
@@ -131,4 +268,6 @@ void gpr_timers_global_destroy(void) {}
void gpr_timers_global_init(void) {}
void gpr_timers_global_destroy(void) {}
+
+void gpr_timers_set_log_filename(const char *filename) {}
#endif /* GRPC_BASIC_PROFILER */
diff --git a/src/core/profiling/timers.h b/src/core/profiling/timers.h
index 0d112e7248..6a188dc566 100644
--- a/src/core/profiling/timers.h
+++ b/src/core/profiling/timers.h
@@ -48,6 +48,8 @@ void gpr_timer_begin(const char *tagstr, int important, const char *file,
void gpr_timer_end(const char *tagstr, int important, const char *file,
int line);
+void gpr_timers_set_log_filename(const char *filename);
+
#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/support/avl.c b/src/core/support/avl.c
new file mode 100644
index 0000000000..9734c9987f
--- /dev/null
+++ b/src/core/support/avl.c
@@ -0,0 +1,288 @@
+/*
+ *
+ * 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/avl.h>
+
+#include <assert.h>
+#include <stdlib.h>
+
+#include <grpc/support/alloc.h>
+#include <grpc/support/string_util.h>
+#include <grpc/support/useful.h>
+
+gpr_avl gpr_avl_create(const gpr_avl_vtable *vtable) {
+ gpr_avl out;
+ out.vtable = vtable;
+ out.root = NULL;
+ return out;
+}
+
+static gpr_avl_node *ref_node(gpr_avl_node *node) {
+ if (node) {
+ gpr_ref(&node->refs);
+ }
+ return node;
+}
+
+static void unref_node(const gpr_avl_vtable *vtable, gpr_avl_node *node) {
+ if (node == NULL) {
+ return;
+ }
+ if (gpr_unref(&node->refs)) {
+ vtable->destroy_key(node->key);
+ vtable->destroy_value(node->value);
+ unref_node(vtable, node->left);
+ unref_node(vtable, node->right);
+ gpr_free(node);
+ }
+}
+
+static long node_height(gpr_avl_node *node) {
+ return node == NULL ? 0 : node->height;
+}
+
+#ifndef NDEBUG
+static long calculate_height(gpr_avl_node *node) {
+ return node == NULL ? 0 : 1 + GPR_MAX(calculate_height(node->left),
+ calculate_height(node->right));
+}
+
+static gpr_avl_node *assert_invariants(gpr_avl_node *n) {
+ if (n == NULL) return NULL;
+ assert_invariants(n->left);
+ assert_invariants(n->right);
+ assert(calculate_height(n) == n->height);
+ assert(labs(node_height(n->left) - node_height(n->right)) <= 1);
+ return n;
+}
+#else
+static gpr_avl_node *assert_invariants(gpr_avl_node *n) { return n; }
+#endif
+
+gpr_avl_node *new_node(void *key, void *value, gpr_avl_node *left,
+ gpr_avl_node *right) {
+ gpr_avl_node *node = gpr_malloc(sizeof(*node));
+ gpr_ref_init(&node->refs, 1);
+ node->key = key;
+ node->value = value;
+ node->left = assert_invariants(left);
+ node->right = assert_invariants(right);
+ node->height = 1 + GPR_MAX(node_height(left), node_height(right));
+ return node;
+}
+
+static gpr_avl_node *get(const gpr_avl_vtable *vtable, gpr_avl_node *node,
+ void *key) {
+ long cmp;
+
+ if (node == NULL) {
+ return NULL;
+ }
+
+ cmp = vtable->compare_keys(node->key, key);
+ if (cmp == 0) {
+ return node;
+ } else if (cmp > 0) {
+ return get(vtable, node->left, key);
+ } else {
+ return get(vtable, node->right, key);
+ }
+}
+
+void *gpr_avl_get(gpr_avl avl, void *key) {
+ gpr_avl_node *node = get(avl.vtable, avl.root, key);
+ return node ? node->value : NULL;
+}
+
+static gpr_avl_node *rotate_left(const gpr_avl_vtable *vtable, void *key,
+ void *value, gpr_avl_node *left,
+ gpr_avl_node *right) {
+ gpr_avl_node *n =
+ new_node(vtable->copy_key(right->key), vtable->copy_value(right->value),
+ new_node(key, value, left, ref_node(right->left)),
+ ref_node(right->right));
+ unref_node(vtable, right);
+ return n;
+}
+
+static gpr_avl_node *rotate_right(const gpr_avl_vtable *vtable, void *key,
+ void *value, gpr_avl_node *left,
+ gpr_avl_node *right) {
+ gpr_avl_node *n = new_node(
+ vtable->copy_key(left->key), vtable->copy_value(left->value),
+ ref_node(left->left), new_node(key, value, ref_node(left->right), right));
+ unref_node(vtable, left);
+ return n;
+}
+
+static gpr_avl_node *rotate_left_right(const gpr_avl_vtable *vtable, void *key,
+ void *value, gpr_avl_node *left,
+ gpr_avl_node *right) {
+ /* rotate_right(..., rotate_left(left), right) */
+ gpr_avl_node *n = new_node(
+ vtable->copy_key(left->right->key),
+ vtable->copy_value(left->right->value),
+ new_node(vtable->copy_key(left->key), vtable->copy_value(left->value),
+ ref_node(left->left), ref_node(left->right->left)),
+ new_node(key, value, ref_node(left->right->right), right));
+ unref_node(vtable, left);
+ return n;
+}
+
+static gpr_avl_node *rotate_right_left(const gpr_avl_vtable *vtable, void *key,
+ void *value, gpr_avl_node *left,
+ gpr_avl_node *right) {
+ /* rotate_left(..., left, rotate_right(right)) */
+ gpr_avl_node *n = new_node(
+ vtable->copy_key(right->left->key),
+ vtable->copy_value(right->left->value),
+ new_node(key, value, left, ref_node(right->left->left)),
+ new_node(vtable->copy_key(right->key), vtable->copy_key(right->value),
+ ref_node(right->left->right), ref_node(right->right)));
+ unref_node(vtable, right);
+ return n;
+}
+
+static gpr_avl_node *rebalance(const gpr_avl_vtable *vtable, void *key,
+ void *value, gpr_avl_node *left,
+ gpr_avl_node *right) {
+ switch (node_height(left) - node_height(right)) {
+ case 2:
+ if (node_height(left->left) - node_height(left->right) == -1) {
+ return assert_invariants(
+ rotate_left_right(vtable, key, value, left, right));
+ } else {
+ return assert_invariants(rotate_right(vtable, key, value, left, right));
+ }
+ case -2:
+ if (node_height(right->left) - node_height(right->right) == 1) {
+ return assert_invariants(
+ rotate_right_left(vtable, key, value, left, right));
+ } else {
+ return assert_invariants(rotate_left(vtable, key, value, left, right));
+ }
+ default:
+ return assert_invariants(new_node(key, value, left, right));
+ }
+}
+
+static gpr_avl_node *add(const gpr_avl_vtable *vtable, gpr_avl_node *node,
+ void *key, void *value) {
+ long cmp;
+ if (node == NULL) {
+ return new_node(key, value, NULL, NULL);
+ }
+ cmp = vtable->compare_keys(node->key, key);
+ if (cmp == 0) {
+ return new_node(key, value, ref_node(node->left), ref_node(node->right));
+ } else if (cmp > 0) {
+ return rebalance(
+ vtable, vtable->copy_key(node->key), vtable->copy_value(node->value),
+ add(vtable, node->left, key, value), ref_node(node->right));
+ } else {
+ return rebalance(vtable, vtable->copy_key(node->key),
+ vtable->copy_value(node->value), ref_node(node->left),
+ add(vtable, node->right, key, value));
+ }
+}
+
+gpr_avl gpr_avl_add(gpr_avl avl, void *key, void *value) {
+ gpr_avl_node *old_root = avl.root;
+ avl.root = add(avl.vtable, avl.root, key, value);
+ assert_invariants(avl.root);
+ unref_node(avl.vtable, old_root);
+ return avl;
+}
+
+static gpr_avl_node *in_order_head(gpr_avl_node *node) {
+ while (node->left != NULL) {
+ node = node->left;
+ }
+ return node;
+}
+
+static gpr_avl_node *in_order_tail(gpr_avl_node *node) {
+ while (node->right != NULL) {
+ node = node->right;
+ }
+ return node;
+}
+
+static gpr_avl_node *remove(const gpr_avl_vtable *vtable, gpr_avl_node *node,
+ void *key) {
+ long cmp;
+ if (node == NULL) {
+ return NULL;
+ }
+ cmp = vtable->compare_keys(node->key, key);
+ if (cmp == 0) {
+ if (node->left == NULL) {
+ return ref_node(node->right);
+ } else if (node->right == NULL) {
+ return ref_node(node->left);
+ } else if (node->left->height < node->right->height) {
+ gpr_avl_node *h = in_order_head(node->right);
+ return rebalance(vtable, vtable->copy_key(h->key),
+ vtable->copy_value(h->value), ref_node(node->left),
+ remove(vtable, node->right, h->key));
+ } else {
+ gpr_avl_node *h = in_order_tail(node->left);
+ return rebalance(
+ vtable, vtable->copy_key(h->key), vtable->copy_value(h->value),
+ remove(vtable, node->left, h->key), ref_node(node->right));
+ }
+ } else if (cmp > 0) {
+ return rebalance(vtable, vtable->copy_key(node->key),
+ vtable->copy_value(node->value),
+ remove(vtable, node->left, key), ref_node(node->right));
+ } else {
+ return rebalance(vtable, vtable->copy_key(node->key),
+ vtable->copy_value(node->value), ref_node(node->left),
+ remove(vtable, node->right, key));
+ }
+}
+
+gpr_avl gpr_avl_remove(gpr_avl avl, void *key) {
+ gpr_avl_node *old_root = avl.root;
+ avl.root = remove(avl.vtable, avl.root, key);
+ assert_invariants(avl.root);
+ unref_node(avl.vtable, old_root);
+ return avl;
+}
+
+gpr_avl gpr_avl_ref(gpr_avl avl) {
+ ref_node(avl.root);
+ return avl;
+}
+
+void gpr_avl_unref(gpr_avl avl) { unref_node(avl.vtable, avl.root); }
diff --git a/src/core/support/thd_posix.c b/src/core/support/thd_posix.c
index c36d94d044..653a1c88c1 100644
--- a/src/core/support/thd_posix.c
+++ b/src/core/support/thd_posix.c
@@ -53,7 +53,7 @@ struct thd_arg {
/* Body of every thread started via gpr_thd_new. */
static void *thread_body(void *v) {
struct thd_arg a = *(struct thd_arg *)v;
- gpr_free(v);
+ free(v);
(*a.body)(a.arg);
return NULL;
}
@@ -63,7 +63,10 @@ int gpr_thd_new(gpr_thd_id *t, void (*thd_body)(void *arg), void *arg,
int thread_started;
pthread_attr_t attr;
pthread_t p;
- struct thd_arg *a = gpr_malloc(sizeof(*a));
+ /* don't use gpr_malloc as we may cause an infinite recursion with
+ * the profiling code */
+ struct thd_arg *a = malloc(sizeof(*a));
+ GPR_ASSERT(a != NULL);
a->body = thd_body;
a->arg = arg;
@@ -78,7 +81,7 @@ int gpr_thd_new(gpr_thd_id *t, void (*thd_body)(void *arg), void *arg,
thread_started = (pthread_create(&p, &attr, &thread_body, a) == 0);
GPR_ASSERT(pthread_attr_destroy(&attr) == 0);
if (!thread_started) {
- gpr_free(a);
+ free(a);
}
*t = (gpr_thd_id)p;
return thread_started;
diff --git a/src/core/surface/channel_create.c b/src/core/surface/channel_create.c
index 026592db95..6d40780497 100644
--- a/src/core/surface/channel_create.c
+++ b/src/core/surface/channel_create.c
@@ -37,6 +37,8 @@
#include <string.h>
#include <grpc/support/alloc.h>
+#include <grpc/support/slice.h>
+#include <grpc/support/slice_buffer.h>
#include "src/core/census/grpc_filter.h"
#include "src/core/channel/channel_args.h"
@@ -56,6 +58,8 @@ typedef struct {
grpc_closure *notify;
grpc_connect_in_args args;
grpc_connect_out_args *result;
+ grpc_closure initial_string_sent;
+ gpr_slice_buffer initial_string_buffer;
grpc_endpoint *tcp;
@@ -70,17 +74,33 @@ static void connector_ref(grpc_connector *con) {
static void connector_unref(grpc_exec_ctx *exec_ctx, grpc_connector *con) {
connector *c = (connector *)con;
if (gpr_unref(&c->refs)) {
+ /* c->initial_string_buffer does not need to be destroyed */
gpr_free(c);
}
}
+static void on_initial_connect_string_sent(grpc_exec_ctx *exec_ctx, void *arg,
+ int success) {
+ connector_unref(exec_ctx, arg);
+}
+
static void connected(grpc_exec_ctx *exec_ctx, void *arg, int success) {
connector *c = arg;
grpc_closure *notify;
grpc_endpoint *tcp = c->tcp;
if (tcp != NULL) {
- c->result->transport =
- grpc_create_chttp2_transport(exec_ctx, c->args.channel_args, tcp, 1);
+ if (!GPR_SLICE_IS_EMPTY(c->args.initial_connect_string)) {
+ grpc_closure_init(&c->initial_string_sent, on_initial_connect_string_sent,
+ c);
+ gpr_slice_buffer_init(&c->initial_string_buffer);
+ gpr_slice_buffer_add(&c->initial_string_buffer,
+ c->args.initial_connect_string);
+ connector_ref(arg);
+ grpc_endpoint_write(exec_ctx, tcp, &c->initial_string_buffer,
+ &c->initial_string_sent);
+ }
+ c->result->transport = grpc_create_chttp2_transport(
+ exec_ctx, c->args.channel_args, tcp, 1);
grpc_chttp2_transport_start_reading(exec_ctx, c->result->transport, NULL,
0);
GPR_ASSERT(c->result->transport);
diff --git a/src/core/surface/secure_channel_create.c b/src/core/surface/secure_channel_create.c
index 471b5a71e7..374b44b406 100644
--- a/src/core/surface/secure_channel_create.c
+++ b/src/core/surface/secure_channel_create.c
@@ -37,6 +37,8 @@
#include <string.h>
#include <grpc/support/alloc.h>
+#include <grpc/support/slice.h>
+#include <grpc/support/slice_buffer.h>
#include "src/core/census/grpc_filter.h"
#include "src/core/channel/channel_args.h"
@@ -61,6 +63,8 @@ typedef struct {
grpc_closure *notify;
grpc_connect_in_args args;
grpc_connect_out_args *result;
+ grpc_closure initial_string_sent;
+ gpr_slice_buffer initial_string_buffer;
gpr_mu mu;
grpc_endpoint *connecting_endpoint;
@@ -77,6 +81,7 @@ static void connector_ref(grpc_connector *con) {
static void connector_unref(grpc_exec_ctx *exec_ctx, grpc_connector *con) {
connector *c = (connector *)con;
if (gpr_unref(&c->refs)) {
+ /* c->initial_string_buffer does not need to be destroyed */
gpr_free(c);
}
}
@@ -115,6 +120,14 @@ static void on_secure_handshake_done(grpc_exec_ctx *exec_ctx, void *arg,
notify->cb(exec_ctx, notify->cb_arg, 1);
}
+static void on_initial_connect_string_sent(grpc_exec_ctx *exec_ctx, void *arg,
+ int success) {
+ connector *c = arg;
+ grpc_security_connector_do_handshake(exec_ctx, &c->security_connector->base,
+ c->connecting_endpoint,
+ on_secure_handshake_done, c);
+}
+
static void connected(grpc_exec_ctx *exec_ctx, void *arg, int success) {
connector *c = arg;
grpc_closure *notify;
@@ -124,8 +137,19 @@ static void connected(grpc_exec_ctx *exec_ctx, void *arg, int success) {
GPR_ASSERT(c->connecting_endpoint == NULL);
c->connecting_endpoint = tcp;
gpr_mu_unlock(&c->mu);
- grpc_security_connector_do_handshake(exec_ctx, &c->security_connector->base,
- tcp, on_secure_handshake_done, c);
+ if (!GPR_SLICE_IS_EMPTY(c->args.initial_connect_string)) {
+ grpc_closure_init(&c->initial_string_sent, on_initial_connect_string_sent,
+ c);
+ gpr_slice_buffer_init(&c->initial_string_buffer);
+ gpr_slice_buffer_add(&c->initial_string_buffer,
+ c->args.initial_connect_string);
+ grpc_endpoint_write(exec_ctx, tcp, &c->initial_string_buffer,
+ &c->initial_string_sent);
+ } else {
+ grpc_security_connector_do_handshake(exec_ctx,
+ &c->security_connector->base, tcp,
+ on_secure_handshake_done, c);
+ }
} else {
memset(c->result, 0, sizeof(*c->result));
notify = c->notify;
diff --git a/src/core/transport/chttp2/internal.h b/src/core/transport/chttp2/internal.h
index ebfa347398..3952f8a0e8 100644
--- a/src/core/transport/chttp2/internal.h
+++ b/src/core/transport/chttp2/internal.h
@@ -191,6 +191,9 @@ typedef struct {
copied to next_stream_id in parsing when parsing commences */
gpr_uint32 next_stream_id;
+ /** how far to lookahead in a stream? */
+ gpr_uint32 stream_lookahead;
+
/** last received stream id */
gpr_uint32 last_incoming_stream_id;
diff --git a/src/core/transport/chttp2/writing.c b/src/core/transport/chttp2/writing.c
index 3cb28f8f0c..805d05222d 100644
--- a/src/core/transport/chttp2/writing.c
+++ b/src/core/transport/chttp2/writing.c
@@ -320,6 +320,8 @@ static void finalize_outbuf(grpc_exec_ctx *exec_ctx,
grpc_chttp2_list_add_written_stream(transport_writing, stream_writing);
}
}
+
+ GPR_TIMER_END("finalize_outbuf", 0);
}
void grpc_chttp2_cleanup_writing(
diff --git a/src/core/transport/chttp2_transport.c b/src/core/transport/chttp2_transport.c
index dedd208cbf..97f2a1b75c 100644
--- a/src/core/transport/chttp2_transport.c
+++ b/src/core/transport/chttp2_transport.c
@@ -53,7 +53,6 @@
#include "src/core/transport/transport_impl.h"
#define DEFAULT_WINDOW 65535
-#define GRPC_CHTTP2_STREAM_LOOKAHEAD DEFAULT_WINDOW
#define DEFAULT_CONNECTION_WINDOW_TARGET (1024 * 1024)
#define MAX_WINDOW 0x7fffffffu
@@ -238,6 +237,7 @@ static void init_transport(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t,
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;
@@ -328,6 +328,18 @@ static void init_transport(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t,
(gpr_uint32)channel_args->args[i].value.integer;
}
} else if (0 == strcmp(channel_args->args[i].key,
+ GRPC_ARG_HTTP2_STREAM_LOOKAHEAD_BYTES)) {
+ if (channel_args->args[i].type != GRPC_ARG_INTEGER) {
+ gpr_log(GPR_ERROR, "%s: must be an integer",
+ GRPC_ARG_HTTP2_STREAM_LOOKAHEAD_BYTES);
+ } else if (channel_args->args[i].value.integer <= 5) {
+ gpr_log(GPR_ERROR, "%s: must be at least 5",
+ GRPC_ARG_HTTP2_STREAM_LOOKAHEAD_BYTES);
+ } else {
+ t->global.stream_lookahead =
+ (gpr_uint32)channel_args->args[i].value.integer;
+ }
+ } else if (0 == strcmp(channel_args->args[i].key,
GRPC_ARG_HTTP2_HPACK_TABLE_SIZE_DECODER)) {
if (channel_args->args[i].type != GRPC_ARG_INTEGER) {
gpr_log(GPR_ERROR, "%s: must be an integer",
@@ -1391,8 +1403,8 @@ static void incoming_byte_stream_update_flow_control(
gpr_uint32 max_recv_bytes;
/* clamp max recv hint to an allowable size */
- if (max_size_hint >= GPR_UINT32_MAX - GRPC_CHTTP2_STREAM_LOOKAHEAD) {
- max_recv_bytes = GPR_UINT32_MAX - GRPC_CHTTP2_STREAM_LOOKAHEAD;
+ if (max_size_hint >= GPR_UINT32_MAX - transport_global->stream_lookahead) {
+ max_recv_bytes = GPR_UINT32_MAX - transport_global->stream_lookahead;
} else {
max_recv_bytes = (gpr_uint32)max_size_hint;
}
@@ -1405,8 +1417,9 @@ static void incoming_byte_stream_update_flow_control(
}
/* add some small lookahead to keep pipelines flowing */
- GPR_ASSERT(max_recv_bytes <= GPR_UINT32_MAX - GRPC_CHTTP2_STREAM_LOOKAHEAD);
- max_recv_bytes += GRPC_CHTTP2_STREAM_LOOKAHEAD;
+ GPR_ASSERT(max_recv_bytes <=
+ GPR_UINT32_MAX - transport_global->stream_lookahead);
+ max_recv_bytes += transport_global->stream_lookahead;
if (stream_global->max_recv_bytes < max_recv_bytes) {
gpr_uint32 add_max_recv_bytes =
max_recv_bytes - stream_global->max_recv_bytes;
diff --git a/test/core/client_config/lb_policies_test.c b/test/core/client_config/lb_policies_test.c
index 6f218e7f08..5aa8140e08 100644
--- a/test/core/client_config/lb_policies_test.c
+++ b/test/core/client_config/lb_policies_test.c
@@ -135,8 +135,9 @@ static void kill_server(const servers_fixture *f, size_t i) {
gpr_log(GPR_INFO, "KILLING SERVER %d", i);
GPR_ASSERT(f->servers[i] != NULL);
grpc_server_shutdown_and_notify(f->servers[i], f->cq, tag(10000));
- GPR_ASSERT(grpc_completion_queue_pluck(f->cq, tag(10000), n_millis_time(5000),
- NULL).type == GRPC_OP_COMPLETE);
+ GPR_ASSERT(
+ grpc_completion_queue_pluck(f->cq, tag(10000), n_millis_time(5000), NULL)
+ .type == GRPC_OP_COMPLETE);
grpc_server_destroy(f->servers[i]);
f->servers[i] = NULL;
}
@@ -202,8 +203,8 @@ static void teardown_servers(servers_fixture *f) {
if (f->servers[i] == NULL) continue;
grpc_server_shutdown_and_notify(f->servers[i], f->cq, tag(10000));
GPR_ASSERT(grpc_completion_queue_pluck(f->cq, tag(10000),
- n_millis_time(5000),
- NULL).type == GRPC_OP_COMPLETE);
+ n_millis_time(5000), NULL)
+ .type == GRPC_OP_COMPLETE);
grpc_server_destroy(f->servers[i]);
}
grpc_completion_queue_shutdown(f->cq);
@@ -303,8 +304,8 @@ int *perform_request(servers_fixture *f, grpc_channel *client,
s_idx = -1;
while ((ev = grpc_completion_queue_next(
- f->cq, GRPC_TIMEOUT_SECONDS_TO_DEADLINE(1), NULL)).type !=
- GRPC_QUEUE_TIMEOUT) {
+ f->cq, GRPC_TIMEOUT_SECONDS_TO_DEADLINE(1), NULL))
+ .type != GRPC_QUEUE_TIMEOUT) {
GPR_ASSERT(ev.type == GRPC_OP_COMPLETE);
read_tag = ((int)(gpr_intptr)ev.tag);
gpr_log(GPR_DEBUG, "EVENT: success:%d, type:%d, tag:%d iter:%d",
diff --git a/test/core/client_config/set_initial_connect_string_test.c b/test/core/client_config/set_initial_connect_string_test.c
new file mode 100644
index 0000000000..13517b7c1f
--- /dev/null
+++ b/test/core/client_config/set_initial_connect_string_test.c
@@ -0,0 +1,221 @@
+/*
+ *
+ * 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 <string.h>
+
+#include <grpc/grpc.h>
+#include <grpc/support/alloc.h>
+#include <grpc/support/host_port.h>
+#include <grpc/support/log.h>
+#include <grpc/support/slice.h>
+
+#include "src/core/client_config/initial_connect_string.h"
+#include "src/core/iomgr/sockaddr.h"
+#include "src/core/security/credentials.h"
+#include "src/core/support/string.h"
+#include "test/core/util/port.h"
+#include "test/core/util/test_config.h"
+#include "test/core/util/test_tcp_server.h"
+
+struct rpc_state {
+ char *target;
+ grpc_channel_credentials *creds;
+ grpc_completion_queue *cq;
+ grpc_channel *channel;
+ grpc_call *call;
+ grpc_op op;
+ gpr_slice_buffer incoming_buffer;
+ gpr_slice_buffer temp_incoming_buffer;
+ grpc_endpoint *tcp;
+ int done;
+};
+
+static const char *magic_connect_string = "magic initial string";
+static int server_port;
+static struct rpc_state state;
+static grpc_closure on_read;
+
+static void handle_read(grpc_exec_ctx *exec_ctx, void *arg, int success) {
+ GPR_ASSERT(success);
+ gpr_slice_buffer_move_into(
+ &state.temp_incoming_buffer, &state.incoming_buffer);
+ if (state.incoming_buffer.length > strlen(magic_connect_string)) {
+ state.done = 1;
+ grpc_endpoint_shutdown(exec_ctx, state.tcp);
+ grpc_endpoint_destroy(exec_ctx, state.tcp);
+ } else {
+ grpc_endpoint_read(
+ exec_ctx, state.tcp, &state.temp_incoming_buffer, &on_read);
+ }
+}
+
+static void on_connect(grpc_exec_ctx *exec_ctx, void *arg, grpc_endpoint *tcp) {
+ test_tcp_server *server = arg;
+ grpc_closure_init(&on_read, handle_read, NULL);
+ gpr_slice_buffer_init(&state.incoming_buffer);
+ gpr_slice_buffer_init(&state.temp_incoming_buffer);
+ state.tcp = tcp;
+ grpc_endpoint_add_to_pollset(exec_ctx, tcp, &server->pollset);
+ 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,
+ gpr_slice *connect_string) {
+ GPR_ASSERT(addr);
+ 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,
+ gpr_slice *connect_string) {
+ struct sockaddr_in target;
+ *connect_string = gpr_slice_from_copied_string(magic_connect_string);
+ gpr_free(*addr);
+ 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));
+}
+
+static gpr_timespec n_sec_deadline(int seconds) {
+ return gpr_time_add(gpr_now(GPR_CLOCK_REALTIME),
+ gpr_time_from_seconds(seconds, GPR_TIMESPAN));
+}
+
+static void start_rpc(int use_creds, int target_port) {
+ state.done = 0;
+ state.cq = grpc_completion_queue_create(NULL);
+ if (use_creds) {
+ state.creds = grpc_fake_transport_security_credentials_create();
+ } else {
+ state.creds = NULL;
+ }
+ gpr_join_host_port(&state.target, "127.0.0.1", target_port);
+ if (use_creds) {
+ state.channel =
+ grpc_secure_channel_create(state.creds, state.target, NULL, NULL);
+ } else {
+ state.channel = grpc_insecure_channel_create(state.target, NULL, NULL);
+ }
+ state.call = grpc_channel_create_call(
+ state.channel, NULL, GRPC_PROPAGATE_DEFAULTS, state.cq, "/Service/Method",
+ "localhost", gpr_inf_future(GPR_CLOCK_REALTIME), NULL);
+ state.op.op = GRPC_OP_SEND_INITIAL_METADATA;
+ state.op.data.send_initial_metadata.count = 0;
+ state.op.flags = 0;
+ state.op.reserved = NULL;
+ GPR_ASSERT(GRPC_CALL_OK == grpc_call_start_batch(state.call, &state.op,
+ (size_t)(1), NULL, NULL));
+ grpc_completion_queue_next(state.cq, n_sec_deadline(1), NULL);
+}
+
+static void cleanup_rpc(void) {
+ grpc_event ev;
+ gpr_slice_buffer_destroy(&state.incoming_buffer);
+ gpr_slice_buffer_destroy(&state.temp_incoming_buffer);
+ grpc_channel_credentials_unref(state.creds);
+ grpc_call_destroy(state.call);
+ grpc_completion_queue_shutdown(state.cq);
+ do {
+ ev = grpc_completion_queue_next(state.cq, n_sec_deadline(1), NULL);
+ } while (ev.type != GRPC_QUEUE_SHUTDOWN);
+ grpc_completion_queue_destroy(state.cq);
+ grpc_channel_destroy(state.channel);
+ gpr_free(state.target);
+}
+
+static void poll_server_until_read_done(test_tcp_server *server) {
+ gpr_timespec deadline = n_sec_deadline(5);
+ while (state.done == 0 &&
+ gpr_time_cmp(gpr_now(GPR_CLOCK_REALTIME), deadline) < 0) {
+ test_tcp_server_poll(server, 1);
+ }
+}
+
+static void match_initial_magic_string(gpr_slice_buffer *buffer) {
+ size_t i, j, cmp_length;
+ size_t magic_length = strlen(magic_connect_string);
+ GPR_ASSERT(buffer->length >= magic_length);
+ for (i = 0, j = 0; i < state.incoming_buffer.count && j < magic_length; i++) {
+ char *dump =
+ gpr_dump_slice(state.incoming_buffer.slices[i], GPR_DUMP_ASCII);
+ cmp_length = GPR_MIN(strlen(dump), magic_length - j);
+ GPR_ASSERT(strncmp(dump, magic_connect_string + j, cmp_length) == 0);
+ j += cmp_length;
+ gpr_free(dump);
+ }
+}
+
+static void test_initial_string(test_tcp_server *server, int secure) {
+ grpc_test_set_initial_connect_string_function(set_magic_initial_string);
+ start_rpc(secure, server_port);
+ poll_server_until_read_done(server);
+ match_initial_magic_string(&state.incoming_buffer);
+ cleanup_rpc();
+}
+
+static void test_initial_string_with_redirect(test_tcp_server *server,
+ int secure) {
+ int another_port = grpc_pick_unused_port_or_die();
+ grpc_test_set_initial_connect_string_function(
+ reset_addr_and_set_magic_string);
+ start_rpc(secure, another_port);
+ poll_server_until_read_done(server);
+ match_initial_magic_string(&state.incoming_buffer);
+ cleanup_rpc();
+}
+
+static void run_test(void (*test)(test_tcp_server *server, int secure),
+ int secure) {
+ test_tcp_server test_server;
+ server_port = grpc_pick_unused_port_or_die();
+ test_tcp_server_init(&test_server, on_connect, &test_server);
+ test_tcp_server_start(&test_server, server_port);
+ test(&test_server, secure);
+ test_tcp_server_destroy(&test_server);
+}
+
+int main(int argc, char **argv) {
+ grpc_test_init(argc, argv);
+ grpc_init();
+
+ run_test(test_initial_string, 0);
+ run_test(test_initial_string, 1);
+ run_test(test_initial_string_with_redirect, 0);
+ run_test(test_initial_string_with_redirect, 1);
+
+ grpc_shutdown();
+ return 0;
+}
diff --git a/test/core/fling/client.c b/test/core/fling/client.c
index a53411c2f5..99b30d6c4a 100644
--- a/test/core/fling/client.c
+++ b/test/core/fling/client.c
@@ -41,6 +41,7 @@
#include <grpc/support/log.h>
#include <grpc/support/time.h>
#include <grpc/support/useful.h>
+#include "src/core/profiling/timers.h"
#include "test/core/util/grpc_profiler.h"
#include "test/core/util/test_config.h"
@@ -89,6 +90,7 @@ static void init_ping_pong_request(void) {
}
static void step_ping_pong_request(void) {
+ GPR_TIMER_BEGIN("ping_pong", 1);
call = grpc_channel_create_call(channel, NULL, GRPC_PROPAGATE_DEFAULTS, cq,
"/Reflector/reflectUnary", "localhost",
gpr_inf_future(GPR_CLOCK_REALTIME), NULL);
@@ -99,6 +101,7 @@ static void step_ping_pong_request(void) {
grpc_call_destroy(call);
grpc_byte_buffer_destroy(response_payload_recv);
call = NULL;
+ GPR_TIMER_END("ping_pong", 1);
}
static void init_ping_pong_stream(void) {
@@ -122,10 +125,12 @@ static void init_ping_pong_stream(void) {
static void step_ping_pong_stream(void) {
grpc_call_error error;
+ GPR_TIMER_BEGIN("ping_pong", 1);
error = grpc_call_start_batch(call, stream_step_ops, 2, (void *)1, NULL);
GPR_ASSERT(GRPC_CALL_OK == error);
grpc_completion_queue_next(cq, gpr_inf_future(GPR_CLOCK_REALTIME), NULL);
grpc_byte_buffer_destroy(response_payload_recv);
+ GPR_TIMER_END("ping_pong", 1);
}
static double now(void) {
@@ -159,12 +164,14 @@ int main(int argc, char **argv) {
char *scenario_name = "ping-pong-request";
scenario sc = {NULL, NULL, NULL};
+ gpr_timers_set_log_filename("latency_trace.fling_client.txt");
+
+ grpc_init();
+
GPR_ASSERT(argc >= 1);
fake_argv[0] = argv[0];
grpc_test_init(1, fake_argv);
- grpc_init();
-
cl = gpr_cmdline_create("fling client");
gpr_cmdline_add_int(cl, "payload_size", "Size of the payload to send",
&payload_size);
diff --git a/test/core/fling/server.c b/test/core/fling/server.c
index 67631e5a07..14a1a815bc 100644
--- a/test/core/fling/server.c
+++ b/test/core/fling/server.c
@@ -44,15 +44,16 @@
#include <unistd.h>
#endif
-#include "test/core/util/grpc_profiler.h"
-#include "test/core/util/test_config.h"
#include <grpc/support/alloc.h>
#include <grpc/support/cmdline.h>
#include <grpc/support/host_port.h>
#include <grpc/support/log.h>
#include <grpc/support/time.h>
+#include "src/core/profiling/timers.h"
#include "test/core/util/port.h"
#include "test/core/end2end/data/ssl_test_data.h"
+#include "test/core/util/grpc_profiler.h"
+#include "test/core/util/test_config.h"
static grpc_completion_queue *cq;
static grpc_server *server;
@@ -192,6 +193,8 @@ int main(int argc, char **argv) {
char *fake_argv[1];
+ gpr_timers_set_log_filename("latency_trace.fling_server.txt");
+
GPR_ASSERT(argc >= 1);
fake_argv[0] = argv[0];
grpc_test_init(1, fake_argv);
diff --git a/test/core/support/avl_test.c b/test/core/support/avl_test.c
new file mode 100644
index 0000000000..6530fe4269
--- /dev/null
+++ b/test/core/support/avl_test.c
@@ -0,0 +1,3671 @@
+/*
+ *
+ * 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/avl.h>
+
+#include <stdio.h>
+#include <string.h>
+
+#include <grpc/support/alloc.h>
+#include <grpc/support/log.h>
+#include <grpc/support/useful.h>
+
+#include "test/core/util/test_config.h"
+
+static int *box(int x) {
+ int *b = gpr_malloc(sizeof(*b));
+ *b = x;
+ return b;
+}
+
+static long int_compare(void *int1, void *int2) {
+ return (*(int *)int1) - (*(int *)int2);
+}
+static void *int_copy(void *p) { return box(*(int *)p); }
+
+static const gpr_avl_vtable int_int_vtable = {gpr_free, int_copy, int_compare,
+ gpr_free, int_copy};
+
+static void check_get(gpr_avl avl, int key, int value) {
+ int *k = box(key);
+ GPR_ASSERT(*(int *)gpr_avl_get(avl, k) == value);
+ gpr_free(k);
+}
+
+static void check_negget(gpr_avl avl, int key) {
+ int *k = box(key);
+ GPR_ASSERT(gpr_avl_get(avl, k) == NULL);
+ gpr_free(k);
+}
+
+static gpr_avl remove_int(gpr_avl avl, int key) {
+ int *k = box(key);
+ avl = gpr_avl_remove(avl, k);
+ gpr_free(k);
+ return avl;
+}
+
+static void test_get(void) {
+ gpr_avl avl;
+ gpr_log(GPR_DEBUG, "test_get");
+ avl = gpr_avl_create(&int_int_vtable);
+ avl = gpr_avl_add(avl, box(1), box(11));
+ avl = gpr_avl_add(avl, box(2), box(22));
+ avl = gpr_avl_add(avl, box(3), box(33));
+ check_get(avl, 1, 11);
+ check_get(avl, 2, 22);
+ check_get(avl, 3, 33);
+ check_negget(avl, 4);
+ gpr_avl_unref(avl);
+}
+
+static void test_ll(void) {
+ gpr_avl avl;
+ gpr_log(GPR_DEBUG, "test_ll");
+ avl = gpr_avl_create(&int_int_vtable);
+ avl = gpr_avl_add(avl, box(5), box(1));
+ avl = gpr_avl_add(avl, box(4), box(2));
+ avl = gpr_avl_add(avl, box(3), box(3));
+ GPR_ASSERT(*(int *)avl.root->key == 4);
+ GPR_ASSERT(*(int *)avl.root->left->key == 3);
+ GPR_ASSERT(*(int *)avl.root->right->key == 5);
+ gpr_avl_unref(avl);
+}
+
+static void test_lr(void) {
+ gpr_avl avl;
+ gpr_log(GPR_DEBUG, "test_lr");
+ avl = gpr_avl_create(&int_int_vtable);
+ avl = gpr_avl_add(avl, box(5), box(1));
+ avl = gpr_avl_add(avl, box(3), box(2));
+ avl = gpr_avl_add(avl, box(4), box(3));
+ GPR_ASSERT(*(int *)avl.root->key == 4);
+ GPR_ASSERT(*(int *)avl.root->left->key == 3);
+ GPR_ASSERT(*(int *)avl.root->right->key == 5);
+ gpr_avl_unref(avl);
+}
+
+static void test_rr(void) {
+ gpr_avl avl;
+ gpr_log(GPR_DEBUG, "test_rr");
+ avl = gpr_avl_create(&int_int_vtable);
+ avl = gpr_avl_add(avl, box(3), box(1));
+ avl = gpr_avl_add(avl, box(4), box(2));
+ avl = gpr_avl_add(avl, box(5), box(3));
+ GPR_ASSERT(*(int *)avl.root->key == 4);
+ GPR_ASSERT(*(int *)avl.root->left->key == 3);
+ GPR_ASSERT(*(int *)avl.root->right->key == 5);
+ gpr_avl_unref(avl);
+}
+
+static void test_rl(void) {
+ gpr_avl avl;
+ gpr_log(GPR_DEBUG, "test_rl");
+ avl = gpr_avl_create(&int_int_vtable);
+ avl = gpr_avl_add(avl, box(3), box(1));
+ avl = gpr_avl_add(avl, box(5), box(2));
+ avl = gpr_avl_add(avl, box(4), box(3));
+ GPR_ASSERT(*(int *)avl.root->key == 4);
+ GPR_ASSERT(*(int *)avl.root->left->key == 3);
+ GPR_ASSERT(*(int *)avl.root->right->key == 5);
+ gpr_avl_unref(avl);
+}
+
+static void test_unbalanced(void) {
+ gpr_avl avl;
+ gpr_log(GPR_DEBUG, "test_unbalanced");
+ avl = gpr_avl_create(&int_int_vtable);
+ avl = gpr_avl_add(avl, box(5), box(1));
+ avl = gpr_avl_add(avl, box(4), box(2));
+ avl = gpr_avl_add(avl, box(3), box(3));
+ avl = gpr_avl_add(avl, box(2), box(4));
+ avl = gpr_avl_add(avl, box(1), box(5));
+ GPR_ASSERT(*(int *)avl.root->key == 4);
+ GPR_ASSERT(*(int *)avl.root->left->key == 2);
+ GPR_ASSERT(*(int *)avl.root->left->left->key == 1);
+ GPR_ASSERT(*(int *)avl.root->left->right->key == 3);
+ GPR_ASSERT(*(int *)avl.root->right->key == 5);
+ gpr_avl_unref(avl);
+}
+
+static void test_replace(void) {
+ gpr_avl avl;
+ gpr_log(GPR_DEBUG, "test_replace");
+ avl = gpr_avl_create(&int_int_vtable);
+ avl = gpr_avl_add(avl, box(1), box(1));
+ avl = gpr_avl_add(avl, box(1), box(2));
+ check_get(avl, 1, 2);
+ check_negget(avl, 2);
+ gpr_avl_unref(avl);
+}
+
+static void test_remove(void) {
+ gpr_avl avl;
+ gpr_avl avl3, avl4, avl5, avln;
+ gpr_log(GPR_DEBUG, "test_remove");
+ avl = gpr_avl_create(&int_int_vtable);
+ avl = gpr_avl_add(avl, box(3), box(1));
+ avl = gpr_avl_add(avl, box(4), box(2));
+ avl = gpr_avl_add(avl, box(5), box(3));
+
+ avl3 = remove_int(gpr_avl_ref(avl), 3);
+ avl4 = remove_int(gpr_avl_ref(avl), 4);
+ avl5 = remove_int(gpr_avl_ref(avl), 5);
+ avln = remove_int(gpr_avl_ref(avl), 1);
+
+ gpr_avl_unref(avl);
+
+ check_negget(avl3, 3);
+ check_get(avl3, 4, 2);
+ check_get(avl3, 5, 3);
+ gpr_avl_unref(avl3);
+
+ check_get(avl4, 3, 1);
+ check_negget(avl4, 4);
+ check_get(avl4, 5, 3);
+ gpr_avl_unref(avl4);
+
+ check_get(avl5, 3, 1);
+ check_get(avl5, 4, 2);
+ check_negget(avl5, 5);
+ gpr_avl_unref(avl5);
+
+ check_get(avln, 3, 1);
+ check_get(avln, 4, 2);
+ check_get(avln, 5, 3);
+ gpr_avl_unref(avln);
+}
+
+static void test_badcase1(void) {
+ gpr_avl avl;
+
+ gpr_log(GPR_DEBUG, "test_badcase1");
+
+ avl = gpr_avl_create(&int_int_vtable);
+ avl = gpr_avl_add(avl, box(88), box(1));
+ avl = remove_int(avl, 643);
+ avl = remove_int(avl, 983);
+ avl = gpr_avl_add(avl, box(985), box(4));
+ avl = gpr_avl_add(avl, box(640), box(5));
+ avl = gpr_avl_add(avl, box(41), box(6));
+ avl = gpr_avl_add(avl, box(112), box(7));
+ avl = gpr_avl_add(avl, box(342), box(8));
+ avl = remove_int(avl, 1013);
+ avl = gpr_avl_add(avl, box(434), box(10));
+ avl = gpr_avl_add(avl, box(520), box(11));
+ avl = gpr_avl_add(avl, box(231), box(12));
+ avl = gpr_avl_add(avl, box(852), box(13));
+ avl = remove_int(avl, 461);
+ avl = gpr_avl_add(avl, box(108), box(15));
+ avl = gpr_avl_add(avl, box(806), box(16));
+ avl = gpr_avl_add(avl, box(827), box(17));
+ avl = remove_int(avl, 796);
+ avl = gpr_avl_add(avl, box(340), box(19));
+ avl = gpr_avl_add(avl, box(498), box(20));
+ avl = gpr_avl_add(avl, box(203), box(21));
+ avl = gpr_avl_add(avl, box(751), box(22));
+ avl = gpr_avl_add(avl, box(150), box(23));
+ avl = remove_int(avl, 237);
+ avl = gpr_avl_add(avl, box(830), box(25));
+ avl = remove_int(avl, 1007);
+ avl = remove_int(avl, 394);
+ avl = gpr_avl_add(avl, box(65), box(28));
+ avl = remove_int(avl, 904);
+ avl = remove_int(avl, 123);
+ avl = gpr_avl_add(avl, box(238), box(31));
+ avl = gpr_avl_add(avl, box(184), box(32));
+ avl = remove_int(avl, 331);
+ avl = gpr_avl_add(avl, box(827), box(34));
+
+ check_get(avl, 830, 25);
+
+ gpr_avl_unref(avl);
+}
+
+static void test_badcase2(void) {
+ gpr_avl avl;
+
+ gpr_log(GPR_DEBUG, "test_badcase2");
+
+ avl = gpr_avl_create(&int_int_vtable);
+ avl = gpr_avl_add(avl, box(288), box(1));
+ avl = remove_int(avl, 415);
+ avl = gpr_avl_add(avl, box(953), box(3));
+ avl = gpr_avl_add(avl, box(101), box(4));
+ avl = gpr_avl_add(avl, box(516), box(5));
+ avl = gpr_avl_add(avl, box(547), box(6));
+ avl = gpr_avl_add(avl, box(467), box(7));
+ avl = gpr_avl_add(avl, box(793), box(8));
+ avl = remove_int(avl, 190);
+ avl = gpr_avl_add(avl, box(687), box(10));
+ avl = gpr_avl_add(avl, box(242), box(11));
+ avl = gpr_avl_add(avl, box(142), box(12));
+ avl = remove_int(avl, 705);
+ avl = remove_int(avl, 578);
+ avl = remove_int(avl, 767);
+ avl = remove_int(avl, 183);
+ avl = gpr_avl_add(avl, box(950), box(17));
+ avl = gpr_avl_add(avl, box(622), box(18));
+ avl = remove_int(avl, 513);
+ avl = remove_int(avl, 429);
+ avl = gpr_avl_add(avl, box(205), box(21));
+ avl = remove_int(avl, 663);
+ avl = remove_int(avl, 953);
+ avl = remove_int(avl, 892);
+ avl = gpr_avl_add(avl, box(236), box(25));
+ avl = remove_int(avl, 982);
+ avl = remove_int(avl, 201);
+ avl = remove_int(avl, 684);
+ avl = gpr_avl_add(avl, box(572), box(29));
+ avl = remove_int(avl, 817);
+ avl = gpr_avl_add(avl, box(970), box(31));
+ avl = remove_int(avl, 347);
+ avl = remove_int(avl, 574);
+ avl = gpr_avl_add(avl, box(752), box(34));
+ avl = gpr_avl_add(avl, box(670), box(35));
+ avl = gpr_avl_add(avl, box(69), box(36));
+ avl = remove_int(avl, 111);
+ avl = remove_int(avl, 523);
+ avl = gpr_avl_add(avl, box(141), box(39));
+ avl = remove_int(avl, 159);
+ avl = gpr_avl_add(avl, box(947), box(41));
+ avl = gpr_avl_add(avl, box(855), box(42));
+ avl = remove_int(avl, 218);
+ avl = remove_int(avl, 6);
+ avl = gpr_avl_add(avl, box(753), box(45));
+ avl = remove_int(avl, 82);
+ avl = remove_int(avl, 799);
+ avl = gpr_avl_add(avl, box(572), box(48));
+ avl = remove_int(avl, 376);
+ avl = remove_int(avl, 413);
+ avl = gpr_avl_add(avl, box(458), box(51));
+ avl = remove_int(avl, 897);
+ avl = gpr_avl_add(avl, box(191), box(53));
+ avl = gpr_avl_add(avl, box(609), box(54));
+ avl = remove_int(avl, 787);
+ avl = remove_int(avl, 710);
+ avl = remove_int(avl, 886);
+ avl = remove_int(avl, 835);
+ avl = remove_int(avl, 33);
+ avl = gpr_avl_add(avl, box(871), box(60));
+ avl = remove_int(avl, 641);
+ avl = gpr_avl_add(avl, box(462), box(62));
+ avl = remove_int(avl, 359);
+ avl = remove_int(avl, 767);
+ avl = gpr_avl_add(avl, box(310), box(65));
+ avl = remove_int(avl, 757);
+ avl = remove_int(avl, 639);
+ avl = remove_int(avl, 314);
+ avl = gpr_avl_add(avl, box(2), box(69));
+ avl = remove_int(avl, 138);
+ avl = gpr_avl_add(avl, box(669), box(71));
+ avl = remove_int(avl, 477);
+ avl = gpr_avl_add(avl, box(366), box(73));
+ avl = gpr_avl_add(avl, box(612), box(74));
+ avl = gpr_avl_add(avl, box(106), box(75));
+ avl = remove_int(avl, 161);
+ avl = gpr_avl_add(avl, box(388), box(77));
+ avl = gpr_avl_add(avl, box(141), box(78));
+ avl = remove_int(avl, 633);
+ avl = remove_int(avl, 459);
+ avl = gpr_avl_add(avl, box(40), box(81));
+ avl = remove_int(avl, 689);
+ avl = gpr_avl_add(avl, box(823), box(83));
+ avl = remove_int(avl, 485);
+ avl = gpr_avl_add(avl, box(903), box(85));
+ avl = gpr_avl_add(avl, box(592), box(86));
+ avl = remove_int(avl, 448);
+ avl = gpr_avl_add(avl, box(56), box(88));
+ avl = remove_int(avl, 333);
+ avl = gpr_avl_add(avl, box(189), box(90));
+ avl = gpr_avl_add(avl, box(103), box(91));
+ avl = remove_int(avl, 164);
+ avl = remove_int(avl, 974);
+ avl = gpr_avl_add(avl, box(215), box(94));
+ avl = remove_int(avl, 189);
+ avl = remove_int(avl, 504);
+ avl = gpr_avl_add(avl, box(868), box(97));
+ avl = remove_int(avl, 909);
+ avl = remove_int(avl, 148);
+ avl = remove_int(avl, 469);
+ avl = gpr_avl_add(avl, box(994), box(101));
+ avl = gpr_avl_add(avl, box(576), box(102));
+ avl = remove_int(avl, 82);
+ avl = remove_int(avl, 209);
+ avl = gpr_avl_add(avl, box(276), box(105));
+ avl = remove_int(avl, 856);
+ avl = gpr_avl_add(avl, box(750), box(107));
+ avl = remove_int(avl, 871);
+ avl = gpr_avl_add(avl, box(301), box(109));
+ avl = remove_int(avl, 260);
+ avl = remove_int(avl, 737);
+ avl = remove_int(avl, 719);
+ avl = gpr_avl_add(avl, box(933), box(113));
+ avl = gpr_avl_add(avl, box(225), box(114));
+ avl = gpr_avl_add(avl, box(975), box(115));
+ avl = gpr_avl_add(avl, box(86), box(116));
+ avl = remove_int(avl, 732);
+ avl = gpr_avl_add(avl, box(340), box(118));
+ avl = gpr_avl_add(avl, box(271), box(119));
+ avl = remove_int(avl, 206);
+ avl = gpr_avl_add(avl, box(949), box(121));
+ avl = gpr_avl_add(avl, box(927), box(122));
+ avl = gpr_avl_add(avl, box(34), box(123));
+ avl = gpr_avl_add(avl, box(351), box(124));
+ avl = remove_int(avl, 836);
+ avl = gpr_avl_add(avl, box(825), box(126));
+ avl = gpr_avl_add(avl, box(352), box(127));
+ avl = remove_int(avl, 107);
+ avl = remove_int(avl, 101);
+ avl = gpr_avl_add(avl, box(320), box(130));
+ avl = gpr_avl_add(avl, box(3), box(131));
+ avl = remove_int(avl, 998);
+ avl = remove_int(avl, 44);
+ avl = gpr_avl_add(avl, box(525), box(134));
+ avl = gpr_avl_add(avl, box(864), box(135));
+ avl = gpr_avl_add(avl, box(863), box(136));
+ avl = remove_int(avl, 770);
+ avl = gpr_avl_add(avl, box(440), box(138));
+ avl = remove_int(avl, 516);
+ avl = gpr_avl_add(avl, box(116), box(140));
+ avl = remove_int(avl, 380);
+ avl = gpr_avl_add(avl, box(878), box(142));
+ avl = remove_int(avl, 439);
+ avl = gpr_avl_add(avl, box(994), box(144));
+ avl = remove_int(avl, 294);
+ avl = remove_int(avl, 593);
+ avl = gpr_avl_add(avl, box(696), box(147));
+ avl = remove_int(avl, 8);
+ avl = gpr_avl_add(avl, box(881), box(149));
+ avl = remove_int(avl, 32);
+ avl = remove_int(avl, 242);
+ avl = gpr_avl_add(avl, box(487), box(152));
+ avl = gpr_avl_add(avl, box(637), box(153));
+ avl = gpr_avl_add(avl, box(793), box(154));
+ avl = gpr_avl_add(avl, box(696), box(155));
+ avl = remove_int(avl, 458);
+ avl = gpr_avl_add(avl, box(828), box(157));
+ avl = remove_int(avl, 784);
+ avl = remove_int(avl, 274);
+ avl = gpr_avl_add(avl, box(783), box(160));
+ avl = remove_int(avl, 21);
+ avl = gpr_avl_add(avl, box(866), box(162));
+ avl = remove_int(avl, 919);
+ avl = gpr_avl_add(avl, box(435), box(164));
+ avl = remove_int(avl, 385);
+ avl = gpr_avl_add(avl, box(475), box(166));
+ avl = remove_int(avl, 339);
+ avl = gpr_avl_add(avl, box(615), box(168));
+ avl = remove_int(avl, 866);
+ avl = remove_int(avl, 82);
+ avl = remove_int(avl, 271);
+ avl = gpr_avl_add(avl, box(590), box(172));
+ avl = gpr_avl_add(avl, box(852), box(173));
+ avl = remove_int(avl, 318);
+ avl = remove_int(avl, 82);
+ avl = gpr_avl_add(avl, box(672), box(176));
+ avl = remove_int(avl, 430);
+ avl = gpr_avl_add(avl, box(821), box(178));
+ avl = gpr_avl_add(avl, box(365), box(179));
+ avl = remove_int(avl, 78);
+ avl = gpr_avl_add(avl, box(700), box(181));
+ avl = gpr_avl_add(avl, box(353), box(182));
+ avl = remove_int(avl, 492);
+ avl = gpr_avl_add(avl, box(991), box(184));
+ avl = remove_int(avl, 330);
+ avl = gpr_avl_add(avl, box(873), box(186));
+ avl = remove_int(avl, 589);
+ avl = gpr_avl_add(avl, box(676), box(188));
+ avl = gpr_avl_add(avl, box(790), box(189));
+ avl = remove_int(avl, 521);
+ avl = remove_int(avl, 47);
+ avl = gpr_avl_add(avl, box(976), box(192));
+ avl = gpr_avl_add(avl, box(683), box(193));
+ avl = remove_int(avl, 803);
+ avl = remove_int(avl, 1006);
+ avl = gpr_avl_add(avl, box(775), box(196));
+ avl = gpr_avl_add(avl, box(411), box(197));
+ avl = gpr_avl_add(avl, box(697), box(198));
+ avl = remove_int(avl, 50);
+ avl = gpr_avl_add(avl, box(213), box(200));
+ avl = remove_int(avl, 714);
+ avl = gpr_avl_add(avl, box(981), box(202));
+ avl = gpr_avl_add(avl, box(502), box(203));
+ avl = gpr_avl_add(avl, box(697), box(204));
+ avl = gpr_avl_add(avl, box(603), box(205));
+ avl = gpr_avl_add(avl, box(117), box(206));
+ avl = remove_int(avl, 363);
+ avl = gpr_avl_add(avl, box(104), box(208));
+ avl = remove_int(avl, 842);
+ avl = gpr_avl_add(avl, box(48), box(210));
+ avl = remove_int(avl, 764);
+ avl = gpr_avl_add(avl, box(482), box(212));
+ avl = gpr_avl_add(avl, box(928), box(213));
+ avl = gpr_avl_add(avl, box(30), box(214));
+ avl = gpr_avl_add(avl, box(820), box(215));
+ avl = gpr_avl_add(avl, box(334), box(216));
+ avl = remove_int(avl, 306);
+ avl = gpr_avl_add(avl, box(789), box(218));
+ avl = remove_int(avl, 924);
+ avl = gpr_avl_add(avl, box(53), box(220));
+ avl = remove_int(avl, 657);
+ avl = gpr_avl_add(avl, box(130), box(222));
+ avl = gpr_avl_add(avl, box(239), box(223));
+ avl = remove_int(avl, 20);
+ avl = gpr_avl_add(avl, box(117), box(225));
+ avl = remove_int(avl, 882);
+ avl = remove_int(avl, 891);
+ avl = gpr_avl_add(avl, box(9), box(228));
+ avl = gpr_avl_add(avl, box(496), box(229));
+ avl = gpr_avl_add(avl, box(750), box(230));
+ avl = gpr_avl_add(avl, box(283), box(231));
+ avl = gpr_avl_add(avl, box(802), box(232));
+ avl = remove_int(avl, 352);
+ avl = gpr_avl_add(avl, box(374), box(234));
+ avl = gpr_avl_add(avl, box(6), box(235));
+ avl = gpr_avl_add(avl, box(756), box(236));
+ avl = gpr_avl_add(avl, box(597), box(237));
+ avl = gpr_avl_add(avl, box(661), box(238));
+ avl = remove_int(avl, 96);
+ avl = gpr_avl_add(avl, box(894), box(240));
+ avl = remove_int(avl, 749);
+ avl = gpr_avl_add(avl, box(71), box(242));
+ avl = remove_int(avl, 68);
+ avl = gpr_avl_add(avl, box(388), box(244));
+ avl = remove_int(avl, 119);
+ avl = remove_int(avl, 856);
+ avl = gpr_avl_add(avl, box(176), box(247));
+ avl = gpr_avl_add(avl, box(993), box(248));
+ avl = remove_int(avl, 178);
+ avl = remove_int(avl, 781);
+ avl = remove_int(avl, 771);
+ avl = remove_int(avl, 848);
+ avl = remove_int(avl, 376);
+ avl = remove_int(avl, 157);
+ avl = remove_int(avl, 142);
+ avl = remove_int(avl, 686);
+ avl = gpr_avl_add(avl, box(779), box(257));
+ avl = gpr_avl_add(avl, box(484), box(258));
+ avl = remove_int(avl, 837);
+ avl = gpr_avl_add(avl, box(388), box(260));
+ avl = remove_int(avl, 987);
+ avl = gpr_avl_add(avl, box(336), box(262));
+ avl = remove_int(avl, 855);
+ avl = gpr_avl_add(avl, box(668), box(264));
+ avl = remove_int(avl, 648);
+ avl = gpr_avl_add(avl, box(193), box(266));
+ avl = remove_int(avl, 939);
+ avl = gpr_avl_add(avl, box(740), box(268));
+ avl = gpr_avl_add(avl, box(503), box(269));
+ avl = gpr_avl_add(avl, box(765), box(270));
+ avl = remove_int(avl, 924);
+ avl = remove_int(avl, 513);
+ avl = gpr_avl_add(avl, box(161), box(273));
+ avl = gpr_avl_add(avl, box(502), box(274));
+ avl = gpr_avl_add(avl, box(846), box(275));
+ avl = remove_int(avl, 931);
+ avl = gpr_avl_add(avl, box(87), box(277));
+ avl = gpr_avl_add(avl, box(949), box(278));
+ avl = gpr_avl_add(avl, box(548), box(279));
+ avl = gpr_avl_add(avl, box(951), box(280));
+ avl = remove_int(avl, 1018);
+ avl = remove_int(avl, 568);
+ avl = gpr_avl_add(avl, box(138), box(283));
+ avl = gpr_avl_add(avl, box(202), box(284));
+ avl = gpr_avl_add(avl, box(157), box(285));
+ avl = gpr_avl_add(avl, box(264), box(286));
+ avl = gpr_avl_add(avl, box(370), box(287));
+ avl = remove_int(avl, 736);
+ avl = remove_int(avl, 751);
+ avl = remove_int(avl, 506);
+ avl = remove_int(avl, 81);
+ avl = remove_int(avl, 358);
+ avl = remove_int(avl, 657);
+ avl = remove_int(avl, 86);
+ avl = gpr_avl_add(avl, box(876), box(295));
+ avl = remove_int(avl, 354);
+ avl = gpr_avl_add(avl, box(134), box(297));
+ avl = remove_int(avl, 781);
+ avl = remove_int(avl, 183);
+ avl = gpr_avl_add(avl, box(914), box(300));
+ avl = remove_int(avl, 926);
+ avl = remove_int(avl, 398);
+ avl = remove_int(avl, 932);
+ avl = remove_int(avl, 804);
+ avl = remove_int(avl, 326);
+ avl = gpr_avl_add(avl, box(208), box(306));
+ avl = gpr_avl_add(avl, box(699), box(307));
+ avl = remove_int(avl, 576);
+ avl = remove_int(avl, 850);
+ avl = remove_int(avl, 514);
+ avl = remove_int(avl, 676);
+ avl = remove_int(avl, 549);
+ avl = remove_int(avl, 767);
+ avl = gpr_avl_add(avl, box(58), box(314));
+ avl = gpr_avl_add(avl, box(265), box(315));
+ avl = gpr_avl_add(avl, box(268), box(316));
+ avl = gpr_avl_add(avl, box(103), box(317));
+ avl = gpr_avl_add(avl, box(440), box(318));
+ avl = remove_int(avl, 777);
+ avl = gpr_avl_add(avl, box(670), box(320));
+ avl = remove_int(avl, 506);
+ avl = remove_int(avl, 487);
+ avl = gpr_avl_add(avl, box(421), box(323));
+ avl = remove_int(avl, 514);
+ avl = gpr_avl_add(avl, box(701), box(325));
+ avl = remove_int(avl, 949);
+ avl = remove_int(avl, 872);
+ avl = remove_int(avl, 139);
+ avl = gpr_avl_add(avl, box(781), box(329));
+ avl = gpr_avl_add(avl, box(543), box(330));
+ avl = gpr_avl_add(avl, box(147), box(331));
+ avl = remove_int(avl, 190);
+ avl = gpr_avl_add(avl, box(453), box(333));
+ avl = remove_int(avl, 262);
+ avl = remove_int(avl, 850);
+ avl = remove_int(avl, 286);
+ avl = remove_int(avl, 787);
+ avl = gpr_avl_add(avl, box(514), box(338));
+ avl = remove_int(avl, 812);
+ avl = gpr_avl_add(avl, box(431), box(340));
+ avl = gpr_avl_add(avl, box(8), box(341));
+ avl = remove_int(avl, 843);
+ avl = gpr_avl_add(avl, box(831), box(343));
+ avl = remove_int(avl, 472);
+ avl = remove_int(avl, 157);
+ avl = gpr_avl_add(avl, box(612), box(346));
+ avl = gpr_avl_add(avl, box(802), box(347));
+ avl = remove_int(avl, 554);
+ avl = gpr_avl_add(avl, box(409), box(349));
+ avl = gpr_avl_add(avl, box(439), box(350));
+ avl = gpr_avl_add(avl, box(725), box(351));
+ avl = gpr_avl_add(avl, box(568), box(352));
+ avl = remove_int(avl, 475);
+ avl = remove_int(avl, 672);
+ avl = remove_int(avl, 62);
+ avl = remove_int(avl, 753);
+ avl = gpr_avl_add(avl, box(435), box(357));
+ avl = gpr_avl_add(avl, box(950), box(358));
+ avl = gpr_avl_add(avl, box(532), box(359));
+ avl = gpr_avl_add(avl, box(832), box(360));
+ avl = remove_int(avl, 390);
+ avl = gpr_avl_add(avl, box(993), box(362));
+ avl = remove_int(avl, 198);
+ avl = remove_int(avl, 401);
+ avl = gpr_avl_add(avl, box(316), box(365));
+ avl = remove_int(avl, 843);
+ avl = gpr_avl_add(avl, box(541), box(367));
+ avl = gpr_avl_add(avl, box(505), box(368));
+ avl = remove_int(avl, 445);
+ avl = remove_int(avl, 256);
+ avl = gpr_avl_add(avl, box(232), box(371));
+ avl = remove_int(avl, 577);
+ avl = remove_int(avl, 558);
+ avl = gpr_avl_add(avl, box(910), box(374));
+ avl = remove_int(avl, 902);
+ avl = remove_int(avl, 755);
+ avl = remove_int(avl, 114);
+ avl = remove_int(avl, 438);
+ avl = remove_int(avl, 224);
+ avl = gpr_avl_add(avl, box(920), box(380));
+ avl = gpr_avl_add(avl, box(655), box(381));
+ avl = remove_int(avl, 557);
+ avl = remove_int(avl, 102);
+ avl = remove_int(avl, 165);
+ avl = gpr_avl_add(avl, box(191), box(385));
+ avl = remove_int(avl, 30);
+ avl = gpr_avl_add(avl, box(406), box(387));
+ avl = gpr_avl_add(avl, box(66), box(388));
+ avl = gpr_avl_add(avl, box(87), box(389));
+ avl = remove_int(avl, 7);
+ avl = remove_int(avl, 671);
+ avl = gpr_avl_add(avl, box(234), box(392));
+ avl = remove_int(avl, 463);
+ avl = gpr_avl_add(avl, box(75), box(394));
+ avl = gpr_avl_add(avl, box(487), box(395));
+ avl = remove_int(avl, 203);
+ avl = gpr_avl_add(avl, box(711), box(397));
+ avl = remove_int(avl, 291);
+ avl = remove_int(avl, 798);
+ avl = remove_int(avl, 337);
+ avl = gpr_avl_add(avl, box(877), box(401));
+ avl = gpr_avl_add(avl, box(388), box(402));
+ avl = remove_int(avl, 975);
+ avl = gpr_avl_add(avl, box(200), box(404));
+ avl = gpr_avl_add(avl, box(408), box(405));
+ avl = gpr_avl_add(avl, box(3), box(406));
+ avl = gpr_avl_add(avl, box(971), box(407));
+ avl = remove_int(avl, 841);
+ avl = remove_int(avl, 910);
+ avl = remove_int(avl, 74);
+ avl = remove_int(avl, 888);
+ avl = gpr_avl_add(avl, box(492), box(412));
+ avl = remove_int(avl, 14);
+ avl = remove_int(avl, 364);
+ avl = gpr_avl_add(avl, box(215), box(415));
+ avl = remove_int(avl, 778);
+ avl = remove_int(avl, 45);
+ avl = gpr_avl_add(avl, box(328), box(418));
+ avl = gpr_avl_add(avl, box(597), box(419));
+ avl = remove_int(avl, 34);
+ avl = gpr_avl_add(avl, box(736), box(421));
+ avl = remove_int(avl, 37);
+ avl = gpr_avl_add(avl, box(275), box(423));
+ avl = gpr_avl_add(avl, box(70), box(424));
+ avl = gpr_avl_add(avl, box(771), box(425));
+ avl = remove_int(avl, 536);
+ avl = remove_int(avl, 421);
+ avl = gpr_avl_add(avl, box(186), box(428));
+ avl = gpr_avl_add(avl, box(788), box(429));
+ avl = gpr_avl_add(avl, box(224), box(430));
+ avl = remove_int(avl, 228);
+ avl = gpr_avl_add(avl, box(48), box(432));
+ avl = gpr_avl_add(avl, box(120), box(433));
+ avl = gpr_avl_add(avl, box(269), box(434));
+ avl = gpr_avl_add(avl, box(904), box(435));
+ avl = remove_int(avl, 699);
+ avl = gpr_avl_add(avl, box(340), box(437));
+ avl = remove_int(avl, 276);
+ avl = gpr_avl_add(avl, box(591), box(439));
+ avl = gpr_avl_add(avl, box(778), box(440));
+ avl = remove_int(avl, 490);
+ avl = remove_int(avl, 973);
+ avl = gpr_avl_add(avl, box(294), box(443));
+ avl = gpr_avl_add(avl, box(323), box(444));
+ avl = remove_int(avl, 685);
+ avl = gpr_avl_add(avl, box(38), box(446));
+ avl = gpr_avl_add(avl, box(525), box(447));
+ avl = remove_int(avl, 162);
+ avl = gpr_avl_add(avl, box(462), box(449));
+ avl = gpr_avl_add(avl, box(340), box(450));
+ avl = remove_int(avl, 734);
+ avl = remove_int(avl, 959);
+ avl = gpr_avl_add(avl, box(752), box(453));
+ avl = gpr_avl_add(avl, box(667), box(454));
+ avl = remove_int(avl, 558);
+ avl = remove_int(avl, 657);
+ avl = gpr_avl_add(avl, box(711), box(457));
+ avl = remove_int(avl, 937);
+ avl = gpr_avl_add(avl, box(741), box(459));
+ avl = gpr_avl_add(avl, box(40), box(460));
+ avl = remove_int(avl, 784);
+ avl = gpr_avl_add(avl, box(292), box(462));
+ avl = remove_int(avl, 164);
+ avl = remove_int(avl, 931);
+ avl = remove_int(avl, 886);
+ avl = gpr_avl_add(avl, box(968), box(466));
+ avl = remove_int(avl, 263);
+ avl = gpr_avl_add(avl, box(647), box(468));
+ avl = gpr_avl_add(avl, box(92), box(469));
+ avl = remove_int(avl, 310);
+ avl = gpr_avl_add(avl, box(711), box(471));
+ avl = gpr_avl_add(avl, box(675), box(472));
+ avl = remove_int(avl, 549);
+ avl = gpr_avl_add(avl, box(380), box(474));
+ avl = remove_int(avl, 825);
+ avl = gpr_avl_add(avl, box(668), box(476));
+ avl = remove_int(avl, 498);
+ avl = gpr_avl_add(avl, box(870), box(478));
+ avl = gpr_avl_add(avl, box(391), box(479));
+ avl = gpr_avl_add(avl, box(264), box(480));
+ avl = remove_int(avl, 1);
+ avl = remove_int(avl, 849);
+ avl = remove_int(avl, 88);
+ avl = remove_int(avl, 255);
+ avl = remove_int(avl, 763);
+ avl = remove_int(avl, 831);
+ avl = gpr_avl_add(avl, box(508), box(487));
+ avl = remove_int(avl, 849);
+ avl = remove_int(avl, 47);
+ avl = gpr_avl_add(avl, box(299), box(490));
+ avl = remove_int(avl, 625);
+ avl = remove_int(avl, 433);
+ avl = remove_int(avl, 904);
+ avl = remove_int(avl, 761);
+ avl = gpr_avl_add(avl, box(33), box(495));
+ avl = gpr_avl_add(avl, box(524), box(496));
+ avl = remove_int(avl, 210);
+ avl = remove_int(avl, 299);
+ avl = gpr_avl_add(avl, box(823), box(499));
+ avl = remove_int(avl, 479);
+ avl = remove_int(avl, 96);
+ avl = remove_int(avl, 1013);
+ avl = gpr_avl_add(avl, box(768), box(503));
+ avl = remove_int(avl, 638);
+ avl = remove_int(avl, 20);
+ avl = gpr_avl_add(avl, box(663), box(506));
+ avl = remove_int(avl, 882);
+ avl = gpr_avl_add(avl, box(745), box(508));
+ avl = remove_int(avl, 352);
+ avl = gpr_avl_add(avl, box(10), box(510));
+ avl = remove_int(avl, 484);
+ avl = gpr_avl_add(avl, box(420), box(512));
+ avl = gpr_avl_add(avl, box(884), box(513));
+ avl = gpr_avl_add(avl, box(993), box(514));
+ avl = gpr_avl_add(avl, box(251), box(515));
+ avl = remove_int(avl, 222);
+ avl = gpr_avl_add(avl, box(734), box(517));
+ avl = gpr_avl_add(avl, box(952), box(518));
+ avl = remove_int(avl, 26);
+ avl = remove_int(avl, 270);
+ avl = remove_int(avl, 481);
+ avl = remove_int(avl, 693);
+ avl = remove_int(avl, 1006);
+ avl = gpr_avl_add(avl, box(77), box(524));
+ avl = remove_int(avl, 897);
+ avl = gpr_avl_add(avl, box(719), box(526));
+ avl = gpr_avl_add(avl, box(622), box(527));
+ avl = remove_int(avl, 28);
+ avl = remove_int(avl, 836);
+ avl = remove_int(avl, 142);
+ avl = gpr_avl_add(avl, box(445), box(531));
+ avl = gpr_avl_add(avl, box(410), box(532));
+ avl = remove_int(avl, 575);
+ avl = gpr_avl_add(avl, box(634), box(534));
+ avl = gpr_avl_add(avl, box(906), box(535));
+ avl = remove_int(avl, 649);
+ avl = gpr_avl_add(avl, box(813), box(537));
+ avl = remove_int(avl, 702);
+ avl = remove_int(avl, 732);
+ avl = gpr_avl_add(avl, box(105), box(540));
+ avl = gpr_avl_add(avl, box(867), box(541));
+ avl = remove_int(avl, 964);
+ avl = remove_int(avl, 941);
+ avl = gpr_avl_add(avl, box(947), box(544));
+ avl = remove_int(avl, 990);
+ avl = gpr_avl_add(avl, box(816), box(546));
+ avl = remove_int(avl, 429);
+ avl = remove_int(avl, 567);
+ avl = remove_int(avl, 541);
+ avl = remove_int(avl, 583);
+ avl = gpr_avl_add(avl, box(57), box(551));
+ avl = gpr_avl_add(avl, box(786), box(552));
+ avl = gpr_avl_add(avl, box(526), box(553));
+ avl = remove_int(avl, 642);
+ avl = remove_int(avl, 220);
+ avl = remove_int(avl, 840);
+ avl = remove_int(avl, 548);
+ avl = gpr_avl_add(avl, box(528), box(558));
+ avl = gpr_avl_add(avl, box(749), box(559));
+ avl = gpr_avl_add(avl, box(194), box(560));
+ avl = remove_int(avl, 517);
+ avl = gpr_avl_add(avl, box(102), box(562));
+ avl = remove_int(avl, 189);
+ avl = gpr_avl_add(avl, box(927), box(564));
+ avl = remove_int(avl, 846);
+ avl = remove_int(avl, 130);
+ avl = gpr_avl_add(avl, box(694), box(567));
+ avl = remove_int(avl, 750);
+ avl = gpr_avl_add(avl, box(357), box(569));
+ avl = remove_int(avl, 431);
+ avl = remove_int(avl, 91);
+ avl = gpr_avl_add(avl, box(640), box(572));
+ avl = remove_int(avl, 4);
+ avl = gpr_avl_add(avl, box(81), box(574));
+ avl = gpr_avl_add(avl, box(595), box(575));
+ avl = remove_int(avl, 444);
+ avl = remove_int(avl, 262);
+ avl = remove_int(avl, 11);
+ avl = gpr_avl_add(avl, box(192), box(579));
+ avl = gpr_avl_add(avl, box(158), box(580));
+ avl = remove_int(avl, 401);
+ avl = remove_int(avl, 918);
+ avl = gpr_avl_add(avl, box(180), box(583));
+ avl = remove_int(avl, 268);
+ avl = gpr_avl_add(avl, box(1012), box(585));
+ avl = gpr_avl_add(avl, box(90), box(586));
+ avl = gpr_avl_add(avl, box(946), box(587));
+ avl = remove_int(avl, 719);
+ avl = gpr_avl_add(avl, box(874), box(589));
+ avl = gpr_avl_add(avl, box(679), box(590));
+ avl = remove_int(avl, 53);
+ avl = remove_int(avl, 534);
+ avl = gpr_avl_add(avl, box(646), box(593));
+ avl = gpr_avl_add(avl, box(767), box(594));
+ avl = gpr_avl_add(avl, box(460), box(595));
+ avl = gpr_avl_add(avl, box(852), box(596));
+ avl = gpr_avl_add(avl, box(189), box(597));
+ avl = remove_int(avl, 932);
+ avl = remove_int(avl, 366);
+ avl = remove_int(avl, 907);
+ avl = gpr_avl_add(avl, box(875), box(601));
+ avl = gpr_avl_add(avl, box(434), box(602));
+ avl = gpr_avl_add(avl, box(704), box(603));
+ avl = gpr_avl_add(avl, box(724), box(604));
+ avl = gpr_avl_add(avl, box(930), box(605));
+ avl = gpr_avl_add(avl, box(1000), box(606));
+ avl = remove_int(avl, 479);
+ avl = gpr_avl_add(avl, box(275), box(608));
+ avl = remove_int(avl, 32);
+ avl = gpr_avl_add(avl, box(939), box(610));
+ avl = remove_int(avl, 943);
+ avl = remove_int(avl, 329);
+ avl = gpr_avl_add(avl, box(490), box(613));
+ avl = remove_int(avl, 477);
+ avl = remove_int(avl, 414);
+ avl = remove_int(avl, 187);
+ avl = remove_int(avl, 334);
+ avl = gpr_avl_add(avl, box(40), box(618));
+ avl = remove_int(avl, 751);
+ avl = gpr_avl_add(avl, box(568), box(620));
+ avl = gpr_avl_add(avl, box(120), box(621));
+ avl = gpr_avl_add(avl, box(617), box(622));
+ avl = gpr_avl_add(avl, box(32), box(623));
+ avl = remove_int(avl, 701);
+ avl = gpr_avl_add(avl, box(910), box(625));
+ avl = remove_int(avl, 557);
+ avl = remove_int(avl, 361);
+ avl = remove_int(avl, 937);
+ avl = remove_int(avl, 100);
+ avl = remove_int(avl, 684);
+ avl = gpr_avl_add(avl, box(751), box(631));
+ avl = remove_int(avl, 781);
+ avl = remove_int(avl, 469);
+ avl = remove_int(avl, 75);
+ avl = remove_int(avl, 561);
+ avl = gpr_avl_add(avl, box(854), box(636));
+ avl = remove_int(avl, 164);
+ avl = remove_int(avl, 258);
+ avl = remove_int(avl, 315);
+ avl = remove_int(avl, 261);
+ avl = gpr_avl_add(avl, box(552), box(641));
+ avl = gpr_avl_add(avl, box(6), box(642));
+ avl = gpr_avl_add(avl, box(680), box(643));
+ avl = remove_int(avl, 741);
+ avl = remove_int(avl, 309);
+ avl = remove_int(avl, 272);
+ avl = gpr_avl_add(avl, box(249), box(647));
+ avl = remove_int(avl, 97);
+ avl = remove_int(avl, 850);
+ avl = gpr_avl_add(avl, box(915), box(650));
+ avl = gpr_avl_add(avl, box(816), box(651));
+ avl = gpr_avl_add(avl, box(45), box(652));
+ avl = gpr_avl_add(avl, box(168), box(653));
+ avl = remove_int(avl, 153);
+ avl = remove_int(avl, 239);
+ avl = gpr_avl_add(avl, box(684), box(656));
+ avl = gpr_avl_add(avl, box(208), box(657));
+ avl = gpr_avl_add(avl, box(681), box(658));
+ avl = gpr_avl_add(avl, box(609), box(659));
+ avl = gpr_avl_add(avl, box(645), box(660));
+ avl = remove_int(avl, 799);
+ avl = gpr_avl_add(avl, box(955), box(662));
+ avl = gpr_avl_add(avl, box(946), box(663));
+ avl = gpr_avl_add(avl, box(744), box(664));
+ avl = gpr_avl_add(avl, box(201), box(665));
+ avl = gpr_avl_add(avl, box(136), box(666));
+ avl = remove_int(avl, 357);
+ avl = gpr_avl_add(avl, box(974), box(668));
+ avl = remove_int(avl, 485);
+ avl = gpr_avl_add(avl, box(1009), box(670));
+ avl = gpr_avl_add(avl, box(517), box(671));
+ avl = remove_int(avl, 491);
+ avl = gpr_avl_add(avl, box(336), box(673));
+ avl = gpr_avl_add(avl, box(589), box(674));
+ avl = remove_int(avl, 546);
+ avl = remove_int(avl, 840);
+ avl = remove_int(avl, 104);
+ avl = remove_int(avl, 347);
+ avl = gpr_avl_add(avl, box(801), box(679));
+ avl = remove_int(avl, 799);
+ avl = remove_int(avl, 702);
+ avl = remove_int(avl, 996);
+ avl = remove_int(avl, 93);
+ avl = gpr_avl_add(avl, box(561), box(684));
+ avl = gpr_avl_add(avl, box(25), box(685));
+ avl = remove_int(avl, 278);
+ avl = gpr_avl_add(avl, box(191), box(687));
+ avl = remove_int(avl, 243);
+ avl = remove_int(avl, 918);
+ avl = remove_int(avl, 449);
+ avl = gpr_avl_add(avl, box(19), box(691));
+ avl = gpr_avl_add(avl, box(762), box(692));
+ avl = gpr_avl_add(avl, box(13), box(693));
+ avl = gpr_avl_add(avl, box(151), box(694));
+ avl = gpr_avl_add(avl, box(152), box(695));
+ avl = gpr_avl_add(avl, box(793), box(696));
+ avl = remove_int(avl, 862);
+ avl = remove_int(avl, 890);
+ avl = gpr_avl_add(avl, box(687), box(699));
+ avl = gpr_avl_add(avl, box(509), box(700));
+ avl = gpr_avl_add(avl, box(973), box(701));
+ avl = remove_int(avl, 230);
+ avl = gpr_avl_add(avl, box(532), box(703));
+ avl = remove_int(avl, 668);
+ avl = gpr_avl_add(avl, box(281), box(705));
+ avl = gpr_avl_add(avl, box(867), box(706));
+ avl = gpr_avl_add(avl, box(359), box(707));
+ avl = remove_int(avl, 425);
+ avl = gpr_avl_add(avl, box(691), box(709));
+ avl = gpr_avl_add(avl, box(163), box(710));
+ avl = gpr_avl_add(avl, box(502), box(711));
+ avl = remove_int(avl, 674);
+ avl = gpr_avl_add(avl, box(697), box(713));
+ avl = remove_int(avl, 271);
+ avl = gpr_avl_add(avl, box(968), box(715));
+ avl = gpr_avl_add(avl, box(48), box(716));
+ avl = remove_int(avl, 543);
+ avl = gpr_avl_add(avl, box(35), box(718));
+ avl = gpr_avl_add(avl, box(751), box(719));
+ avl = gpr_avl_add(avl, box(478), box(720));
+ avl = remove_int(avl, 797);
+ avl = remove_int(avl, 309);
+ avl = gpr_avl_add(avl, box(927), box(723));
+ avl = remove_int(avl, 504);
+ avl = gpr_avl_add(avl, box(286), box(725));
+ avl = gpr_avl_add(avl, box(413), box(726));
+ avl = gpr_avl_add(avl, box(599), box(727));
+ avl = remove_int(avl, 105);
+ avl = remove_int(avl, 605);
+ avl = gpr_avl_add(avl, box(632), box(730));
+ avl = gpr_avl_add(avl, box(133), box(731));
+ avl = remove_int(avl, 443);
+ avl = gpr_avl_add(avl, box(958), box(733));
+ avl = gpr_avl_add(avl, box(729), box(734));
+ avl = remove_int(avl, 158);
+ avl = gpr_avl_add(avl, box(694), box(736));
+ avl = gpr_avl_add(avl, box(505), box(737));
+ avl = remove_int(avl, 63);
+ avl = remove_int(avl, 714);
+ avl = gpr_avl_add(avl, box(1002), box(740));
+ avl = remove_int(avl, 211);
+ avl = gpr_avl_add(avl, box(765), box(742));
+ avl = gpr_avl_add(avl, box(455), box(743));
+ avl = remove_int(avl, 59);
+ avl = remove_int(avl, 224);
+ avl = gpr_avl_add(avl, box(586), box(746));
+ avl = gpr_avl_add(avl, box(348), box(747));
+ avl = remove_int(avl, 10);
+ avl = remove_int(avl, 484);
+ avl = gpr_avl_add(avl, box(968), box(750));
+ avl = gpr_avl_add(avl, box(923), box(751));
+ avl = remove_int(avl, 573);
+ avl = remove_int(avl, 617);
+ avl = gpr_avl_add(avl, box(812), box(754));
+ avl = gpr_avl_add(avl, box(179), box(755));
+ avl = remove_int(avl, 284);
+ avl = remove_int(avl, 157);
+ avl = remove_int(avl, 177);
+ avl = remove_int(avl, 896);
+ avl = gpr_avl_add(avl, box(649), box(760));
+ avl = gpr_avl_add(avl, box(927), box(761));
+ avl = gpr_avl_add(avl, box(454), box(762));
+ avl = gpr_avl_add(avl, box(217), box(763));
+ avl = remove_int(avl, 534);
+ avl = gpr_avl_add(avl, box(180), box(765));
+ avl = gpr_avl_add(avl, box(319), box(766));
+ avl = remove_int(avl, 92);
+ avl = gpr_avl_add(avl, box(483), box(768));
+ avl = remove_int(avl, 504);
+ avl = remove_int(avl, 1017);
+ avl = remove_int(avl, 37);
+ avl = remove_int(avl, 50);
+ avl = gpr_avl_add(avl, box(302), box(773));
+ avl = remove_int(avl, 807);
+ avl = gpr_avl_add(avl, box(463), box(775));
+ avl = gpr_avl_add(avl, box(271), box(776));
+ avl = gpr_avl_add(avl, box(644), box(777));
+ avl = remove_int(avl, 618);
+ avl = gpr_avl_add(avl, box(166), box(779));
+ avl = gpr_avl_add(avl, box(538), box(780));
+ avl = remove_int(avl, 606);
+ avl = gpr_avl_add(avl, box(425), box(782));
+ avl = remove_int(avl, 725);
+ avl = remove_int(avl, 383);
+ avl = gpr_avl_add(avl, box(155), box(785));
+ avl = remove_int(avl, 889);
+ avl = gpr_avl_add(avl, box(653), box(787));
+ avl = remove_int(avl, 386);
+ avl = gpr_avl_add(avl, box(142), box(789));
+ avl = remove_int(avl, 107);
+ avl = remove_int(avl, 603);
+ avl = remove_int(avl, 971);
+ avl = gpr_avl_add(avl, box(80), box(793));
+ avl = gpr_avl_add(avl, box(61), box(794));
+ avl = gpr_avl_add(avl, box(693), box(795));
+ avl = gpr_avl_add(avl, box(592), box(796));
+ avl = gpr_avl_add(avl, box(433), box(797));
+ avl = gpr_avl_add(avl, box(973), box(798));
+ avl = remove_int(avl, 901);
+ avl = remove_int(avl, 340);
+ avl = remove_int(avl, 709);
+ avl = gpr_avl_add(avl, box(224), box(802));
+ avl = remove_int(avl, 120);
+ avl = remove_int(avl, 271);
+ avl = gpr_avl_add(avl, box(780), box(805));
+ avl = gpr_avl_add(avl, box(867), box(806));
+ avl = gpr_avl_add(avl, box(756), box(807));
+ avl = gpr_avl_add(avl, box(583), box(808));
+ avl = gpr_avl_add(avl, box(356), box(809));
+ avl = gpr_avl_add(avl, box(58), box(810));
+ avl = remove_int(avl, 219);
+ avl = gpr_avl_add(avl, box(301), box(812));
+ avl = remove_int(avl, 643);
+ avl = remove_int(avl, 787);
+ avl = remove_int(avl, 583);
+ avl = remove_int(avl, 552);
+ avl = remove_int(avl, 308);
+ avl = remove_int(avl, 608);
+ avl = remove_int(avl, 363);
+ avl = remove_int(avl, 690);
+ avl = gpr_avl_add(avl, box(233), box(821));
+ avl = gpr_avl_add(avl, box(479), box(822));
+ avl = gpr_avl_add(avl, box(323), box(823));
+ avl = gpr_avl_add(avl, box(802), box(824));
+ avl = remove_int(avl, 682);
+ avl = remove_int(avl, 705);
+ avl = remove_int(avl, 487);
+ avl = gpr_avl_add(avl, box(530), box(828));
+ avl = gpr_avl_add(avl, box(232), box(829));
+ avl = remove_int(avl, 627);
+ avl = gpr_avl_add(avl, box(396), box(831));
+ avl = gpr_avl_add(avl, box(61), box(832));
+ avl = gpr_avl_add(avl, box(932), box(833));
+ avl = gpr_avl_add(avl, box(108), box(834));
+ avl = gpr_avl_add(avl, box(524), box(835));
+ avl = remove_int(avl, 390);
+ avl = remove_int(avl, 307);
+ avl = gpr_avl_add(avl, box(722), box(838));
+ avl = gpr_avl_add(avl, box(907), box(839));
+ avl = remove_int(avl, 286);
+ avl = remove_int(avl, 337);
+ avl = remove_int(avl, 443);
+ avl = gpr_avl_add(avl, box(973), box(843));
+ avl = remove_int(avl, 930);
+ avl = remove_int(avl, 242);
+ avl = gpr_avl_add(avl, box(997), box(846));
+ avl = gpr_avl_add(avl, box(689), box(847));
+ avl = remove_int(avl, 318);
+ avl = gpr_avl_add(avl, box(703), box(849));
+ avl = gpr_avl_add(avl, box(868), box(850));
+ avl = gpr_avl_add(avl, box(200), box(851));
+ avl = gpr_avl_add(avl, box(960), box(852));
+ avl = gpr_avl_add(avl, box(80), box(853));
+ avl = remove_int(avl, 113);
+ avl = gpr_avl_add(avl, box(135), box(855));
+ avl = remove_int(avl, 529);
+ avl = gpr_avl_add(avl, box(366), box(857));
+ avl = remove_int(avl, 272);
+ avl = gpr_avl_add(avl, box(921), box(859));
+ avl = remove_int(avl, 497);
+ avl = gpr_avl_add(avl, box(712), box(861));
+ avl = remove_int(avl, 777);
+ avl = remove_int(avl, 505);
+ avl = remove_int(avl, 974);
+ avl = remove_int(avl, 497);
+ avl = gpr_avl_add(avl, box(388), box(866));
+ avl = gpr_avl_add(avl, box(29), box(867));
+ avl = gpr_avl_add(avl, box(180), box(868));
+ avl = gpr_avl_add(avl, box(983), box(869));
+ avl = gpr_avl_add(avl, box(72), box(870));
+ avl = gpr_avl_add(avl, box(693), box(871));
+ avl = gpr_avl_add(avl, box(567), box(872));
+ avl = remove_int(avl, 549);
+ avl = remove_int(avl, 351);
+ avl = gpr_avl_add(avl, box(1019), box(875));
+ avl = remove_int(avl, 585);
+ avl = remove_int(avl, 294);
+ avl = remove_int(avl, 61);
+ avl = gpr_avl_add(avl, box(409), box(879));
+ avl = gpr_avl_add(avl, box(984), box(880));
+ avl = gpr_avl_add(avl, box(830), box(881));
+ avl = remove_int(avl, 579);
+ avl = gpr_avl_add(avl, box(672), box(883));
+ avl = remove_int(avl, 968);
+
+ gpr_avl_unref(avl);
+}
+
+static void test_badcase3(void) {
+ gpr_avl avl;
+
+ gpr_log(GPR_DEBUG, "test_badcase3");
+
+ avl = gpr_avl_create(&int_int_vtable);
+ avl = remove_int(avl, 624);
+ avl = gpr_avl_add(avl, box(59), box(2));
+ avl = gpr_avl_add(avl, box(494), box(3));
+ avl = gpr_avl_add(avl, box(226), box(4));
+ avl = remove_int(avl, 524);
+ avl = gpr_avl_add(avl, box(540), box(6));
+ avl = remove_int(avl, 1008);
+ avl = gpr_avl_add(avl, box(502), box(8));
+ avl = remove_int(avl, 267);
+ avl = remove_int(avl, 764);
+ avl = remove_int(avl, 443);
+ avl = gpr_avl_add(avl, box(8), box(12));
+ avl = remove_int(avl, 291);
+ avl = remove_int(avl, 796);
+ avl = remove_int(avl, 1002);
+ avl = gpr_avl_add(avl, box(778), box(16));
+ avl = remove_int(avl, 621);
+ avl = remove_int(avl, 891);
+ avl = remove_int(avl, 880);
+ avl = gpr_avl_add(avl, box(197), box(20));
+ avl = gpr_avl_add(avl, box(441), box(21));
+ avl = gpr_avl_add(avl, box(719), box(22));
+ avl = remove_int(avl, 109);
+ avl = gpr_avl_add(avl, box(458), box(24));
+ avl = remove_int(avl, 86);
+ avl = gpr_avl_add(avl, box(897), box(26));
+ avl = gpr_avl_add(avl, box(997), box(27));
+ avl = remove_int(avl, 235);
+ avl = remove_int(avl, 425);
+ avl = remove_int(avl, 186);
+ avl = gpr_avl_add(avl, box(887), box(31));
+ avl = gpr_avl_add(avl, box(1005), box(32));
+ avl = gpr_avl_add(avl, box(778), box(33));
+ avl = gpr_avl_add(avl, box(575), box(34));
+ avl = remove_int(avl, 966);
+ avl = remove_int(avl, 1015);
+ avl = gpr_avl_add(avl, box(486), box(37));
+ avl = gpr_avl_add(avl, box(809), box(38));
+ avl = gpr_avl_add(avl, box(907), box(39));
+ avl = gpr_avl_add(avl, box(971), box(40));
+ avl = remove_int(avl, 441);
+ avl = remove_int(avl, 498);
+ avl = gpr_avl_add(avl, box(727), box(43));
+ avl = remove_int(avl, 679);
+ avl = remove_int(avl, 740);
+ avl = remove_int(avl, 532);
+ avl = gpr_avl_add(avl, box(805), box(47));
+ avl = remove_int(avl, 64);
+ avl = gpr_avl_add(avl, box(362), box(49));
+ avl = gpr_avl_add(avl, box(170), box(50));
+ avl = gpr_avl_add(avl, box(389), box(51));
+ avl = gpr_avl_add(avl, box(689), box(52));
+ avl = remove_int(avl, 871);
+ avl = gpr_avl_add(avl, box(447), box(54));
+ avl = remove_int(avl, 718);
+ avl = gpr_avl_add(avl, box(724), box(56));
+ avl = remove_int(avl, 215);
+ avl = gpr_avl_add(avl, box(550), box(58));
+ avl = remove_int(avl, 932);
+ avl = gpr_avl_add(avl, box(47), box(60));
+ avl = remove_int(avl, 46);
+ avl = remove_int(avl, 229);
+ avl = gpr_avl_add(avl, box(68), box(63));
+ avl = gpr_avl_add(avl, box(387), box(64));
+ avl = remove_int(avl, 933);
+ avl = remove_int(avl, 736);
+ avl = remove_int(avl, 719);
+ avl = gpr_avl_add(avl, box(150), box(68));
+ avl = remove_int(avl, 875);
+ avl = remove_int(avl, 298);
+ avl = gpr_avl_add(avl, box(991), box(71));
+ avl = remove_int(avl, 705);
+ avl = gpr_avl_add(avl, box(197), box(73));
+ avl = gpr_avl_add(avl, box(101), box(74));
+ avl = remove_int(avl, 436);
+ avl = gpr_avl_add(avl, box(755), box(76));
+ avl = gpr_avl_add(avl, box(727), box(77));
+ avl = remove_int(avl, 309);
+ avl = remove_int(avl, 253);
+ avl = gpr_avl_add(avl, box(203), box(80));
+ avl = remove_int(avl, 231);
+ avl = gpr_avl_add(avl, box(461), box(82));
+ avl = remove_int(avl, 316);
+ avl = remove_int(avl, 493);
+ avl = gpr_avl_add(avl, box(184), box(85));
+ avl = remove_int(avl, 737);
+ avl = gpr_avl_add(avl, box(790), box(87));
+ avl = gpr_avl_add(avl, box(335), box(88));
+ avl = remove_int(avl, 649);
+ avl = gpr_avl_add(avl, box(69), box(90));
+ avl = remove_int(avl, 585);
+ avl = remove_int(avl, 543);
+ avl = gpr_avl_add(avl, box(784), box(93));
+ avl = gpr_avl_add(avl, box(60), box(94));
+ avl = gpr_avl_add(avl, box(525), box(95));
+ avl = gpr_avl_add(avl, box(177), box(96));
+ avl = gpr_avl_add(avl, box(178), box(97));
+ avl = gpr_avl_add(avl, box(683), box(98));
+ avl = gpr_avl_add(avl, box(226), box(99));
+ avl = gpr_avl_add(avl, box(662), box(100));
+ avl = remove_int(avl, 944);
+ avl = gpr_avl_add(avl, box(562), box(102));
+ avl = gpr_avl_add(avl, box(793), box(103));
+ avl = remove_int(avl, 673);
+ avl = gpr_avl_add(avl, box(310), box(105));
+ avl = remove_int(avl, 479);
+ avl = remove_int(avl, 543);
+ avl = remove_int(avl, 159);
+ avl = remove_int(avl, 850);
+ avl = gpr_avl_add(avl, box(318), box(110));
+ avl = gpr_avl_add(avl, box(483), box(111));
+ avl = gpr_avl_add(avl, box(84), box(112));
+ avl = remove_int(avl, 109);
+ avl = gpr_avl_add(avl, box(132), box(114));
+ avl = gpr_avl_add(avl, box(920), box(115));
+ avl = remove_int(avl, 746);
+ avl = gpr_avl_add(avl, box(145), box(117));
+ avl = gpr_avl_add(avl, box(526), box(118));
+ avl = remove_int(avl, 158);
+ avl = gpr_avl_add(avl, box(332), box(120));
+ avl = gpr_avl_add(avl, box(918), box(121));
+ avl = remove_int(avl, 339);
+ avl = gpr_avl_add(avl, box(809), box(123));
+ avl = gpr_avl_add(avl, box(742), box(124));
+ avl = gpr_avl_add(avl, box(718), box(125));
+ avl = remove_int(avl, 988);
+ avl = remove_int(avl, 531);
+ avl = remove_int(avl, 840);
+ avl = gpr_avl_add(avl, box(816), box(129));
+ avl = gpr_avl_add(avl, box(976), box(130));
+ avl = remove_int(avl, 743);
+ avl = remove_int(avl, 528);
+ avl = remove_int(avl, 982);
+ avl = gpr_avl_add(avl, box(803), box(134));
+ avl = gpr_avl_add(avl, box(205), box(135));
+ avl = gpr_avl_add(avl, box(584), box(136));
+ avl = remove_int(avl, 923);
+ avl = remove_int(avl, 538);
+ avl = remove_int(avl, 398);
+ avl = remove_int(avl, 320);
+ avl = remove_int(avl, 292);
+ avl = gpr_avl_add(avl, box(270), box(142));
+ avl = gpr_avl_add(avl, box(333), box(143));
+ avl = remove_int(avl, 439);
+ avl = gpr_avl_add(avl, box(35), box(145));
+ avl = gpr_avl_add(avl, box(837), box(146));
+ avl = remove_int(avl, 65);
+ avl = remove_int(avl, 642);
+ avl = remove_int(avl, 371);
+ avl = remove_int(avl, 140);
+ avl = remove_int(avl, 533);
+ avl = remove_int(avl, 676);
+ avl = gpr_avl_add(avl, box(624), box(153));
+ avl = gpr_avl_add(avl, box(116), box(154));
+ avl = gpr_avl_add(avl, box(446), box(155));
+ avl = remove_int(avl, 91);
+ avl = remove_int(avl, 721);
+ avl = remove_int(avl, 537);
+ avl = gpr_avl_add(avl, box(448), box(159));
+ avl = remove_int(avl, 155);
+ avl = remove_int(avl, 344);
+ avl = remove_int(avl, 237);
+ avl = gpr_avl_add(avl, box(309), box(163));
+ avl = gpr_avl_add(avl, box(434), box(164));
+ avl = gpr_avl_add(avl, box(277), box(165));
+ avl = remove_int(avl, 233);
+ avl = gpr_avl_add(avl, box(275), box(167));
+ avl = gpr_avl_add(avl, box(218), box(168));
+ avl = gpr_avl_add(avl, box(76), box(169));
+ avl = gpr_avl_add(avl, box(898), box(170));
+ avl = remove_int(avl, 771);
+ avl = gpr_avl_add(avl, box(237), box(172));
+ avl = remove_int(avl, 327);
+ avl = gpr_avl_add(avl, box(499), box(174));
+ avl = remove_int(avl, 727);
+ avl = remove_int(avl, 234);
+ avl = remove_int(avl, 623);
+ avl = remove_int(avl, 458);
+ avl = remove_int(avl, 326);
+ avl = remove_int(avl, 589);
+ avl = gpr_avl_add(avl, box(442), box(181));
+ avl = remove_int(avl, 389);
+ avl = gpr_avl_add(avl, box(708), box(183));
+ avl = gpr_avl_add(avl, box(594), box(184));
+ avl = gpr_avl_add(avl, box(942), box(185));
+ avl = gpr_avl_add(avl, box(282), box(186));
+ avl = remove_int(avl, 434);
+ avl = remove_int(avl, 134);
+ avl = remove_int(avl, 270);
+ avl = remove_int(avl, 512);
+ avl = remove_int(avl, 265);
+ avl = remove_int(avl, 21);
+ avl = remove_int(avl, 193);
+ avl = remove_int(avl, 797);
+ avl = remove_int(avl, 347);
+ avl = gpr_avl_add(avl, box(99), box(196));
+ avl = gpr_avl_add(avl, box(161), box(197));
+ avl = remove_int(avl, 484);
+ avl = gpr_avl_add(avl, box(72), box(199));
+ avl = remove_int(avl, 629);
+ avl = gpr_avl_add(avl, box(522), box(201));
+ avl = remove_int(avl, 679);
+ avl = gpr_avl_add(avl, box(407), box(203));
+ avl = remove_int(avl, 693);
+ avl = gpr_avl_add(avl, box(424), box(205));
+ avl = gpr_avl_add(avl, box(651), box(206));
+ avl = gpr_avl_add(avl, box(927), box(207));
+ avl = remove_int(avl, 553);
+ avl = gpr_avl_add(avl, box(128), box(209));
+ avl = gpr_avl_add(avl, box(616), box(210));
+ avl = gpr_avl_add(avl, box(690), box(211));
+ avl = remove_int(avl, 241);
+ avl = remove_int(avl, 179);
+ avl = gpr_avl_add(avl, box(697), box(214));
+ avl = remove_int(avl, 779);
+ avl = gpr_avl_add(avl, box(241), box(216));
+ avl = remove_int(avl, 190);
+ avl = remove_int(avl, 210);
+ avl = gpr_avl_add(avl, box(711), box(219));
+ avl = remove_int(avl, 251);
+ avl = remove_int(avl, 61);
+ avl = gpr_avl_add(avl, box(800), box(222));
+ avl = remove_int(avl, 551);
+ avl = gpr_avl_add(avl, box(61), box(224));
+ avl = gpr_avl_add(avl, box(656), box(225));
+ avl = remove_int(avl, 130);
+ avl = remove_int(avl, 368);
+ avl = remove_int(avl, 150);
+ avl = remove_int(avl, 73);
+ avl = gpr_avl_add(avl, box(799), box(230));
+ avl = gpr_avl_add(avl, box(125), box(231));
+ avl = remove_int(avl, 107);
+ avl = gpr_avl_add(avl, box(938), box(233));
+ avl = gpr_avl_add(avl, box(914), box(234));
+ avl = gpr_avl_add(avl, box(197), box(235));
+ avl = remove_int(avl, 736);
+ avl = gpr_avl_add(avl, box(20), box(237));
+ avl = remove_int(avl, 224);
+ avl = remove_int(avl, 841);
+ avl = gpr_avl_add(avl, box(226), box(240));
+ avl = remove_int(avl, 963);
+ avl = remove_int(avl, 796);
+ avl = remove_int(avl, 728);
+ avl = gpr_avl_add(avl, box(855), box(244));
+ avl = gpr_avl_add(avl, box(769), box(245));
+ avl = gpr_avl_add(avl, box(631), box(246));
+ avl = remove_int(avl, 648);
+ avl = gpr_avl_add(avl, box(187), box(248));
+ avl = gpr_avl_add(avl, box(31), box(249));
+ avl = remove_int(avl, 163);
+ avl = gpr_avl_add(avl, box(218), box(251));
+ avl = gpr_avl_add(avl, box(488), box(252));
+ avl = gpr_avl_add(avl, box(387), box(253));
+ avl = gpr_avl_add(avl, box(809), box(254));
+ avl = gpr_avl_add(avl, box(997), box(255));
+ avl = remove_int(avl, 678);
+ avl = gpr_avl_add(avl, box(368), box(257));
+ avl = gpr_avl_add(avl, box(220), box(258));
+ avl = gpr_avl_add(avl, box(373), box(259));
+ avl = remove_int(avl, 874);
+ avl = remove_int(avl, 682);
+ avl = remove_int(avl, 1014);
+ avl = remove_int(avl, 195);
+ avl = gpr_avl_add(avl, box(868), box(264));
+ avl = remove_int(avl, 254);
+ avl = remove_int(avl, 456);
+ avl = gpr_avl_add(avl, box(906), box(267));
+ avl = remove_int(avl, 711);
+ avl = gpr_avl_add(avl, box(632), box(269));
+ avl = remove_int(avl, 474);
+ avl = gpr_avl_add(avl, box(508), box(271));
+ avl = gpr_avl_add(avl, box(518), box(272));
+ avl = remove_int(avl, 579);
+ avl = remove_int(avl, 948);
+ avl = gpr_avl_add(avl, box(789), box(275));
+ avl = gpr_avl_add(avl, box(48), box(276));
+ avl = gpr_avl_add(avl, box(256), box(277));
+ avl = gpr_avl_add(avl, box(754), box(278));
+ avl = remove_int(avl, 215);
+ avl = gpr_avl_add(avl, box(679), box(280));
+ avl = gpr_avl_add(avl, box(606), box(281));
+ avl = remove_int(avl, 941);
+ avl = remove_int(avl, 31);
+ avl = gpr_avl_add(avl, box(758), box(284));
+ avl = remove_int(avl, 101);
+ avl = gpr_avl_add(avl, box(244), box(286));
+ avl = gpr_avl_add(avl, box(337), box(287));
+ avl = gpr_avl_add(avl, box(461), box(288));
+ avl = remove_int(avl, 476);
+ avl = gpr_avl_add(avl, box(845), box(290));
+ avl = remove_int(avl, 160);
+ avl = gpr_avl_add(avl, box(690), box(292));
+ avl = remove_int(avl, 931);
+ avl = gpr_avl_add(avl, box(869), box(294));
+ avl = gpr_avl_add(avl, box(1019), box(295));
+ avl = remove_int(avl, 591);
+ avl = remove_int(avl, 635);
+ avl = remove_int(avl, 67);
+ avl = gpr_avl_add(avl, box(113), box(299));
+ avl = remove_int(avl, 305);
+ avl = gpr_avl_add(avl, box(10), box(301));
+ avl = remove_int(avl, 823);
+ avl = remove_int(avl, 288);
+ avl = remove_int(avl, 239);
+ avl = gpr_avl_add(avl, box(646), box(305));
+ avl = gpr_avl_add(avl, box(1006), box(306));
+ avl = gpr_avl_add(avl, box(954), box(307));
+ avl = gpr_avl_add(avl, box(199), box(308));
+ avl = gpr_avl_add(avl, box(69), box(309));
+ avl = gpr_avl_add(avl, box(984), box(310));
+ avl = remove_int(avl, 568);
+ avl = remove_int(avl, 666);
+ avl = remove_int(avl, 37);
+ avl = gpr_avl_add(avl, box(845), box(314));
+ avl = remove_int(avl, 535);
+ avl = remove_int(avl, 365);
+ avl = remove_int(avl, 676);
+ avl = remove_int(avl, 892);
+ avl = remove_int(avl, 425);
+ avl = remove_int(avl, 704);
+ avl = remove_int(avl, 168);
+ avl = gpr_avl_add(avl, box(853), box(322));
+ avl = gpr_avl_add(avl, box(335), box(323));
+ avl = gpr_avl_add(avl, box(961), box(324));
+ avl = gpr_avl_add(avl, box(73), box(325));
+ avl = remove_int(avl, 469);
+ avl = gpr_avl_add(avl, box(449), box(327));
+ avl = remove_int(avl, 821);
+ avl = gpr_avl_add(avl, box(845), box(329));
+ avl = remove_int(avl, 637);
+ avl = gpr_avl_add(avl, box(769), box(331));
+ avl = gpr_avl_add(avl, box(901), box(332));
+ avl = remove_int(avl, 142);
+ avl = remove_int(avl, 361);
+ avl = remove_int(avl, 876);
+ avl = gpr_avl_add(avl, box(614), box(336));
+ avl = gpr_avl_add(avl, box(729), box(337));
+ avl = remove_int(avl, 120);
+ avl = remove_int(avl, 473);
+ avl = remove_int(avl, 445);
+ avl = gpr_avl_add(avl, box(978), box(341));
+ avl = gpr_avl_add(avl, box(164), box(342));
+ avl = gpr_avl_add(avl, box(1), box(343));
+ avl = remove_int(avl, 890);
+ avl = gpr_avl_add(avl, box(605), box(345));
+ avl = gpr_avl_add(avl, box(178), box(346));
+ avl = gpr_avl_add(avl, box(481), box(347));
+ avl = gpr_avl_add(avl, box(772), box(348));
+ avl = remove_int(avl, 824);
+ avl = remove_int(avl, 167);
+ avl = remove_int(avl, 151);
+ avl = gpr_avl_add(avl, box(698), box(352));
+ avl = gpr_avl_add(avl, box(202), box(353));
+ avl = gpr_avl_add(avl, box(921), box(354));
+ avl = gpr_avl_add(avl, box(875), box(355));
+ avl = remove_int(avl, 197);
+ avl = remove_int(avl, 232);
+ avl = gpr_avl_add(avl, box(209), box(358));
+ avl = remove_int(avl, 324);
+ avl = remove_int(avl, 56);
+ avl = remove_int(avl, 579);
+ avl = remove_int(avl, 255);
+ avl = remove_int(avl, 290);
+ avl = gpr_avl_add(avl, box(661), box(364));
+ avl = gpr_avl_add(avl, box(113), box(365));
+ avl = remove_int(avl, 767);
+ avl = gpr_avl_add(avl, box(586), box(367));
+ avl = gpr_avl_add(avl, box(121), box(368));
+ avl = remove_int(avl, 235);
+ avl = remove_int(avl, 439);
+ avl = remove_int(avl, 360);
+ avl = gpr_avl_add(avl, box(916), box(372));
+ avl = remove_int(avl, 999);
+ avl = gpr_avl_add(avl, box(825), box(374));
+ avl = gpr_avl_add(avl, box(177), box(375));
+ avl = remove_int(avl, 204);
+ avl = remove_int(avl, 92);
+ avl = gpr_avl_add(avl, box(794), box(378));
+ avl = gpr_avl_add(avl, box(463), box(379));
+ avl = gpr_avl_add(avl, box(472), box(380));
+ avl = remove_int(avl, 235);
+ avl = gpr_avl_add(avl, box(840), box(382));
+ avl = remove_int(avl, 657);
+ avl = gpr_avl_add(avl, box(586), box(384));
+ avl = gpr_avl_add(avl, box(979), box(385));
+ avl = remove_int(avl, 979);
+ avl = gpr_avl_add(avl, box(639), box(387));
+ avl = remove_int(avl, 907);
+ avl = remove_int(avl, 973);
+ avl = gpr_avl_add(avl, box(913), box(390));
+ avl = gpr_avl_add(avl, box(566), box(391));
+ avl = gpr_avl_add(avl, box(883), box(392));
+ avl = gpr_avl_add(avl, box(552), box(393));
+ avl = gpr_avl_add(avl, box(16), box(394));
+ avl = remove_int(avl, 60);
+ avl = gpr_avl_add(avl, box(567), box(396));
+ avl = gpr_avl_add(avl, box(705), box(397));
+ avl = gpr_avl_add(avl, box(94), box(398));
+ avl = remove_int(avl, 321);
+ avl = gpr_avl_add(avl, box(207), box(400));
+ avl = gpr_avl_add(avl, box(682), box(401));
+ avl = gpr_avl_add(avl, box(592), box(402));
+ avl = gpr_avl_add(avl, box(10), box(403));
+ avl = remove_int(avl, 911);
+ avl = remove_int(avl, 161);
+ avl = gpr_avl_add(avl, box(86), box(406));
+ avl = remove_int(avl, 893);
+ avl = remove_int(avl, 362);
+ avl = gpr_avl_add(avl, box(599), box(409));
+ avl = remove_int(avl, 413);
+ avl = gpr_avl_add(avl, box(867), box(411));
+ avl = remove_int(avl, 955);
+ avl = gpr_avl_add(avl, box(341), box(413));
+ avl = gpr_avl_add(avl, box(887), box(414));
+ avl = remove_int(avl, 706);
+ avl = gpr_avl_add(avl, box(939), box(416));
+ avl = remove_int(avl, 233);
+ avl = remove_int(avl, 662);
+ avl = remove_int(avl, 984);
+ avl = remove_int(avl, 203);
+ avl = gpr_avl_add(avl, box(326), box(421));
+ avl = remove_int(avl, 848);
+ avl = gpr_avl_add(avl, box(235), box(423));
+ avl = remove_int(avl, 617);
+ avl = gpr_avl_add(avl, box(565), box(425));
+ avl = remove_int(avl, 469);
+ avl = gpr_avl_add(avl, box(988), box(427));
+ avl = remove_int(avl, 957);
+ avl = gpr_avl_add(avl, box(426), box(429));
+ avl = remove_int(avl, 967);
+ avl = gpr_avl_add(avl, box(890), box(431));
+ avl = gpr_avl_add(avl, box(473), box(432));
+ avl = remove_int(avl, 367);
+ avl = remove_int(avl, 344);
+ avl = remove_int(avl, 660);
+ avl = remove_int(avl, 448);
+ avl = remove_int(avl, 837);
+ avl = remove_int(avl, 158);
+ avl = gpr_avl_add(avl, box(459), box(439));
+ avl = remove_int(avl, 882);
+ avl = remove_int(avl, 782);
+ avl = gpr_avl_add(avl, box(408), box(442));
+ avl = gpr_avl_add(avl, box(728), box(443));
+ avl = remove_int(avl, 27);
+ avl = gpr_avl_add(avl, box(137), box(445));
+ avl = gpr_avl_add(avl, box(239), box(446));
+ avl = remove_int(avl, 854);
+ avl = gpr_avl_add(avl, box(104), box(448));
+ avl = gpr_avl_add(avl, box(823), box(449));
+ avl = gpr_avl_add(avl, box(524), box(450));
+ avl = gpr_avl_add(avl, box(995), box(451));
+ avl = remove_int(avl, 422);
+ avl = remove_int(avl, 220);
+ avl = gpr_avl_add(avl, box(856), box(454));
+ avl = remove_int(avl, 332);
+ avl = gpr_avl_add(avl, box(679), box(456));
+ avl = remove_int(avl, 18);
+ avl = gpr_avl_add(avl, box(837), box(458));
+ avl = remove_int(avl, 405);
+ avl = remove_int(avl, 877);
+ avl = remove_int(avl, 835);
+ avl = gpr_avl_add(avl, box(547), box(462));
+ avl = remove_int(avl, 805);
+ avl = remove_int(avl, 862);
+ avl = gpr_avl_add(avl, box(75), box(465));
+ avl = remove_int(avl, 41);
+ avl = gpr_avl_add(avl, box(310), box(467));
+ avl = remove_int(avl, 855);
+ avl = gpr_avl_add(avl, box(20), box(469));
+ avl = remove_int(avl, 186);
+ avl = remove_int(avl, 378);
+ avl = remove_int(avl, 442);
+ avl = remove_int(avl, 930);
+ avl = gpr_avl_add(avl, box(118), box(474));
+ avl = gpr_avl_add(avl, box(96), box(475));
+ avl = remove_int(avl, 854);
+ avl = gpr_avl_add(avl, box(65), box(477));
+ avl = gpr_avl_add(avl, box(573), box(478));
+ avl = gpr_avl_add(avl, box(4), box(479));
+ avl = gpr_avl_add(avl, box(451), box(480));
+ avl = gpr_avl_add(avl, box(774), box(481));
+ avl = gpr_avl_add(avl, box(126), box(482));
+ avl = remove_int(avl, 956);
+ avl = remove_int(avl, 591);
+ avl = remove_int(avl, 644);
+ avl = gpr_avl_add(avl, box(304), box(486));
+ avl = remove_int(avl, 620);
+ avl = remove_int(avl, 394);
+ avl = gpr_avl_add(avl, box(1002), box(489));
+ avl = gpr_avl_add(avl, box(837), box(490));
+ avl = remove_int(avl, 485);
+ avl = gpr_avl_add(avl, box(1005), box(492));
+ avl = remove_int(avl, 21);
+ avl = gpr_avl_add(avl, box(396), box(494));
+ avl = remove_int(avl, 966);
+ avl = gpr_avl_add(avl, box(105), box(496));
+ avl = gpr_avl_add(avl, box(316), box(497));
+ avl = remove_int(avl, 776);
+ avl = gpr_avl_add(avl, box(188), box(499));
+ avl = remove_int(avl, 200);
+ avl = gpr_avl_add(avl, box(98), box(501));
+ avl = gpr_avl_add(avl, box(831), box(502));
+ avl = gpr_avl_add(avl, box(227), box(503));
+ avl = gpr_avl_add(avl, box(220), box(504));
+ avl = remove_int(avl, 715);
+ avl = remove_int(avl, 279);
+ avl = gpr_avl_add(avl, box(701), box(507));
+ avl = gpr_avl_add(avl, box(726), box(508));
+ avl = gpr_avl_add(avl, box(815), box(509));
+ avl = gpr_avl_add(avl, box(749), box(510));
+ avl = remove_int(avl, 946);
+ avl = remove_int(avl, 449);
+ avl = remove_int(avl, 62);
+ avl = remove_int(avl, 487);
+ avl = gpr_avl_add(avl, box(545), box(515));
+ avl = remove_int(avl, 59);
+ avl = gpr_avl_add(avl, box(168), box(517));
+ avl = remove_int(avl, 337);
+ avl = gpr_avl_add(avl, box(69), box(519));
+ avl = remove_int(avl, 600);
+ avl = gpr_avl_add(avl, box(591), box(521));
+ avl = gpr_avl_add(avl, box(960), box(522));
+ avl = gpr_avl_add(avl, box(116), box(523));
+ avl = remove_int(avl, 991);
+ avl = gpr_avl_add(avl, box(760), box(525));
+ avl = gpr_avl_add(avl, box(664), box(526));
+ avl = gpr_avl_add(avl, box(547), box(527));
+ avl = remove_int(avl, 922);
+ avl = gpr_avl_add(avl, box(290), box(529));
+ avl = gpr_avl_add(avl, box(859), box(530));
+ avl = gpr_avl_add(avl, box(49), box(531));
+ avl = remove_int(avl, 455);
+ avl = remove_int(avl, 786);
+ avl = gpr_avl_add(avl, box(613), box(534));
+ avl = gpr_avl_add(avl, box(326), box(535));
+ avl = remove_int(avl, 615);
+ avl = gpr_avl_add(avl, box(45), box(537));
+ avl = gpr_avl_add(avl, box(162), box(538));
+ avl = gpr_avl_add(avl, box(189), box(539));
+ avl = remove_int(avl, 68);
+ avl = remove_int(avl, 846);
+ avl = gpr_avl_add(avl, box(608), box(542));
+ avl = remove_int(avl, 821);
+ avl = gpr_avl_add(avl, box(978), box(544));
+ avl = gpr_avl_add(avl, box(892), box(545));
+ avl = remove_int(avl, 924);
+ avl = gpr_avl_add(avl, box(708), box(547));
+ avl = remove_int(avl, 135);
+ avl = remove_int(avl, 124);
+ avl = gpr_avl_add(avl, box(301), box(550));
+ avl = gpr_avl_add(avl, box(939), box(551));
+ avl = gpr_avl_add(avl, box(344), box(552));
+ avl = remove_int(avl, 443);
+ avl = remove_int(avl, 122);
+ avl = gpr_avl_add(avl, box(636), box(555));
+ avl = remove_int(avl, 558);
+ avl = gpr_avl_add(avl, box(923), box(557));
+ avl = remove_int(avl, 827);
+ avl = gpr_avl_add(avl, box(649), box(559));
+ avl = gpr_avl_add(avl, box(808), box(560));
+ avl = remove_int(avl, 570);
+ avl = remove_int(avl, 434);
+ avl = gpr_avl_add(avl, box(40), box(563));
+ avl = gpr_avl_add(avl, box(725), box(564));
+ avl = remove_int(avl, 295);
+ avl = remove_int(avl, 615);
+ avl = remove_int(avl, 919);
+ avl = remove_int(avl, 170);
+ avl = remove_int(avl, 442);
+ avl = remove_int(avl, 971);
+ avl = gpr_avl_add(avl, box(483), box(571));
+ avl = gpr_avl_add(avl, box(512), box(572));
+ avl = remove_int(avl, 648);
+ avl = remove_int(avl, 78);
+ avl = remove_int(avl, 72);
+ avl = remove_int(avl, 790);
+ avl = remove_int(avl, 571);
+ avl = gpr_avl_add(avl, box(898), box(578));
+ avl = remove_int(avl, 770);
+ avl = remove_int(avl, 776);
+ avl = gpr_avl_add(avl, box(602), box(581));
+ avl = remove_int(avl, 251);
+ avl = gpr_avl_add(avl, box(303), box(583));
+ avl = remove_int(avl, 837);
+ avl = gpr_avl_add(avl, box(714), box(585));
+ avl = remove_int(avl, 800);
+ avl = gpr_avl_add(avl, box(266), box(587));
+ avl = gpr_avl_add(avl, box(555), box(588));
+ avl = remove_int(avl, 604);
+ avl = remove_int(avl, 163);
+ avl = remove_int(avl, 497);
+ avl = gpr_avl_add(avl, box(296), box(592));
+ avl = remove_int(avl, 129);
+ avl = gpr_avl_add(avl, box(656), box(594));
+ avl = remove_int(avl, 769);
+ avl = remove_int(avl, 941);
+ avl = gpr_avl_add(avl, box(775), box(597));
+ avl = gpr_avl_add(avl, box(846), box(598));
+ avl = remove_int(avl, 591);
+ avl = remove_int(avl, 801);
+ avl = remove_int(avl, 419);
+ avl = remove_int(avl, 455);
+ avl = gpr_avl_add(avl, box(866), box(603));
+ avl = gpr_avl_add(avl, box(575), box(604));
+ avl = gpr_avl_add(avl, box(620), box(605));
+ avl = remove_int(avl, 100);
+ avl = remove_int(avl, 667);
+ avl = gpr_avl_add(avl, box(138), box(608));
+ avl = gpr_avl_add(avl, box(566), box(609));
+ avl = gpr_avl_add(avl, box(673), box(610));
+ avl = gpr_avl_add(avl, box(178), box(611));
+ avl = remove_int(avl, 659);
+ avl = gpr_avl_add(avl, box(759), box(613));
+ avl = gpr_avl_add(avl, box(1008), box(614));
+ avl = remove_int(avl, 116);
+ avl = gpr_avl_add(avl, box(608), box(616));
+ avl = gpr_avl_add(avl, box(339), box(617));
+ avl = gpr_avl_add(avl, box(197), box(618));
+ avl = remove_int(avl, 25);
+ avl = remove_int(avl, 628);
+ avl = gpr_avl_add(avl, box(487), box(621));
+ avl = remove_int(avl, 739);
+ avl = remove_int(avl, 100);
+ avl = remove_int(avl, 928);
+ avl = gpr_avl_add(avl, box(647), box(625));
+ avl = remove_int(avl, 978);
+ avl = remove_int(avl, 143);
+ avl = remove_int(avl, 755);
+ avl = gpr_avl_add(avl, box(71), box(629));
+ avl = remove_int(avl, 205);
+ avl = gpr_avl_add(avl, box(501), box(631));
+ avl = remove_int(avl, 723);
+ avl = remove_int(avl, 852);
+ avl = remove_int(avl, 1021);
+ avl = remove_int(avl, 670);
+ avl = remove_int(avl, 500);
+ avl = gpr_avl_add(avl, box(330), box(637));
+ avl = remove_int(avl, 264);
+ avl = gpr_avl_add(avl, box(69), box(639));
+ avl = remove_int(avl, 73);
+ avl = gpr_avl_add(avl, box(745), box(641));
+ avl = remove_int(avl, 518);
+ avl = remove_int(avl, 641);
+ avl = remove_int(avl, 768);
+ avl = gpr_avl_add(avl, box(988), box(645));
+ avl = gpr_avl_add(avl, box(899), box(646));
+ avl = remove_int(avl, 763);
+ avl = remove_int(avl, 281);
+ avl = remove_int(avl, 496);
+ avl = gpr_avl_add(avl, box(445), box(650));
+ avl = remove_int(avl, 905);
+ avl = gpr_avl_add(avl, box(275), box(652));
+ avl = gpr_avl_add(avl, box(137), box(653));
+ avl = remove_int(avl, 642);
+ avl = gpr_avl_add(avl, box(708), box(655));
+ avl = remove_int(avl, 922);
+ avl = gpr_avl_add(avl, box(743), box(657));
+ avl = remove_int(avl, 295);
+ avl = remove_int(avl, 665);
+ avl = remove_int(avl, 48);
+ avl = gpr_avl_add(avl, box(1012), box(661));
+ avl = remove_int(avl, 71);
+ avl = remove_int(avl, 523);
+ avl = gpr_avl_add(avl, box(319), box(664));
+ avl = remove_int(avl, 632);
+ avl = gpr_avl_add(avl, box(137), box(666));
+ avl = gpr_avl_add(avl, box(686), box(667));
+ avl = gpr_avl_add(avl, box(724), box(668));
+ avl = gpr_avl_add(avl, box(952), box(669));
+ avl = gpr_avl_add(avl, box(5), box(670));
+ avl = remove_int(avl, 35);
+ avl = gpr_avl_add(avl, box(43), box(672));
+ avl = gpr_avl_add(avl, box(320), box(673));
+ avl = gpr_avl_add(avl, box(115), box(674));
+ avl = remove_int(avl, 377);
+ avl = remove_int(avl, 591);
+ avl = remove_int(avl, 87);
+ avl = remove_int(avl, 93);
+ avl = gpr_avl_add(avl, box(1016), box(679));
+ avl = gpr_avl_add(avl, box(605), box(680));
+ avl = gpr_avl_add(avl, box(152), box(681));
+ avl = gpr_avl_add(avl, box(113), box(682));
+ avl = remove_int(avl, 131);
+ avl = remove_int(avl, 637);
+ avl = gpr_avl_add(avl, box(156), box(685));
+ avl = remove_int(avl, 696);
+ avl = gpr_avl_add(avl, box(546), box(687));
+ avl = remove_int(avl, 970);
+ avl = remove_int(avl, 53);
+ avl = remove_int(avl, 827);
+ avl = remove_int(avl, 224);
+ avl = remove_int(avl, 796);
+ avl = remove_int(avl, 34);
+ avl = remove_int(avl, 922);
+ avl = remove_int(avl, 277);
+ avl = remove_int(avl, 650);
+ avl = remove_int(avl, 222);
+ avl = remove_int(avl, 244);
+ avl = remove_int(avl, 576);
+ avl = remove_int(avl, 413);
+ avl = gpr_avl_add(avl, box(500), box(701));
+ avl = remove_int(avl, 924);
+ avl = gpr_avl_add(avl, box(825), box(703));
+ avl = remove_int(avl, 888);
+ avl = remove_int(avl, 931);
+ avl = gpr_avl_add(avl, box(285), box(706));
+ avl = remove_int(avl, 62);
+ avl = remove_int(avl, 444);
+ avl = remove_int(avl, 946);
+ avl = gpr_avl_add(avl, box(122), box(710));
+ avl = gpr_avl_add(avl, box(846), box(711));
+ avl = remove_int(avl, 628);
+ avl = gpr_avl_add(avl, box(511), box(713));
+ avl = gpr_avl_add(avl, box(398), box(714));
+ avl = remove_int(avl, 730);
+ avl = gpr_avl_add(avl, box(797), box(716));
+ avl = remove_int(avl, 897);
+ avl = remove_int(avl, 228);
+ avl = remove_int(avl, 544);
+ avl = remove_int(avl, 552);
+ avl = remove_int(avl, 783);
+ avl = remove_int(avl, 583);
+ avl = remove_int(avl, 894);
+ avl = remove_int(avl, 942);
+ avl = gpr_avl_add(avl, box(346), box(725));
+ avl = gpr_avl_add(avl, box(1015), box(726));
+ avl = remove_int(avl, 813);
+ avl = gpr_avl_add(avl, box(213), box(728));
+ avl = remove_int(avl, 468);
+ avl = remove_int(avl, 365);
+ avl = remove_int(avl, 399);
+ avl = gpr_avl_add(avl, box(380), box(732));
+ avl = remove_int(avl, 835);
+ avl = remove_int(avl, 970);
+ avl = gpr_avl_add(avl, box(700), box(735));
+ avl = gpr_avl_add(avl, box(807), box(736));
+ avl = remove_int(avl, 312);
+ avl = remove_int(avl, 282);
+ avl = remove_int(avl, 370);
+ avl = remove_int(avl, 999);
+ avl = remove_int(avl, 241);
+ avl = remove_int(avl, 884);
+ avl = gpr_avl_add(avl, box(587), box(743));
+ avl = gpr_avl_add(avl, box(332), box(744));
+ avl = remove_int(avl, 686);
+ avl = remove_int(avl, 206);
+ avl = remove_int(avl, 835);
+ avl = gpr_avl_add(avl, box(334), box(748));
+ avl = remove_int(avl, 171);
+ avl = gpr_avl_add(avl, box(1002), box(750));
+ avl = gpr_avl_add(avl, box(779), box(751));
+ avl = gpr_avl_add(avl, box(307), box(752));
+ avl = gpr_avl_add(avl, box(127), box(753));
+ avl = gpr_avl_add(avl, box(251), box(754));
+ avl = remove_int(avl, 790);
+ avl = remove_int(avl, 189);
+ avl = remove_int(avl, 193);
+ avl = remove_int(avl, 38);
+ avl = remove_int(avl, 124);
+ avl = gpr_avl_add(avl, box(812), box(760));
+ avl = remove_int(avl, 43);
+ avl = gpr_avl_add(avl, box(871), box(762));
+ avl = gpr_avl_add(avl, box(580), box(763));
+ avl = remove_int(avl, 501);
+ avl = remove_int(avl, 462);
+ avl = remove_int(avl, 599);
+ avl = gpr_avl_add(avl, box(240), box(767));
+ avl = gpr_avl_add(avl, box(285), box(768));
+ avl = gpr_avl_add(avl, box(472), box(769));
+ avl = remove_int(avl, 865);
+ avl = remove_int(avl, 763);
+ avl = remove_int(avl, 245);
+ avl = remove_int(avl, 80);
+ avl = remove_int(avl, 713);
+ avl = remove_int(avl, 654);
+ avl = remove_int(avl, 1014);
+ avl = gpr_avl_add(avl, box(495), box(777));
+ avl = gpr_avl_add(avl, box(552), box(778));
+ avl = remove_int(avl, 19);
+ avl = remove_int(avl, 803);
+ avl = gpr_avl_add(avl, box(508), box(781));
+ avl = remove_int(avl, 699);
+ avl = remove_int(avl, 260);
+ avl = remove_int(avl, 92);
+ avl = remove_int(avl, 497);
+ avl = gpr_avl_add(avl, box(970), box(786));
+ avl = remove_int(avl, 987);
+ avl = remove_int(avl, 168);
+ avl = remove_int(avl, 476);
+ avl = remove_int(avl, 248);
+ avl = gpr_avl_add(avl, box(358), box(791));
+ avl = remove_int(avl, 804);
+ avl = remove_int(avl, 77);
+ avl = remove_int(avl, 905);
+ avl = remove_int(avl, 362);
+ avl = gpr_avl_add(avl, box(578), box(796));
+ avl = remove_int(avl, 38);
+ avl = remove_int(avl, 595);
+ avl = gpr_avl_add(avl, box(213), box(799));
+ avl = remove_int(avl, 7);
+ avl = remove_int(avl, 620);
+ avl = gpr_avl_add(avl, box(946), box(802));
+ avl = remove_int(avl, 145);
+ avl = gpr_avl_add(avl, box(628), box(804));
+ avl = remove_int(avl, 972);
+ avl = gpr_avl_add(avl, box(728), box(806));
+ avl = remove_int(avl, 91);
+ avl = gpr_avl_add(avl, box(136), box(808));
+ avl = gpr_avl_add(avl, box(841), box(809));
+ avl = gpr_avl_add(avl, box(265), box(810));
+ avl = gpr_avl_add(avl, box(701), box(811));
+ avl = gpr_avl_add(avl, box(27), box(812));
+ avl = remove_int(avl, 72);
+ avl = remove_int(avl, 14);
+ avl = gpr_avl_add(avl, box(286), box(815));
+ avl = remove_int(avl, 996);
+ avl = remove_int(avl, 998);
+ avl = gpr_avl_add(avl, box(466), box(818));
+ avl = remove_int(avl, 1009);
+ avl = remove_int(avl, 741);
+ avl = remove_int(avl, 947);
+ avl = remove_int(avl, 241);
+ avl = remove_int(avl, 954);
+ avl = remove_int(avl, 183);
+ avl = remove_int(avl, 395);
+ avl = remove_int(avl, 951);
+ avl = gpr_avl_add(avl, box(267), box(827));
+ avl = remove_int(avl, 812);
+ avl = gpr_avl_add(avl, box(577), box(829));
+ avl = remove_int(avl, 624);
+ avl = remove_int(avl, 847);
+ avl = remove_int(avl, 745);
+ avl = gpr_avl_add(avl, box(491), box(833));
+ avl = gpr_avl_add(avl, box(941), box(834));
+ avl = remove_int(avl, 258);
+ avl = gpr_avl_add(avl, box(410), box(836));
+ avl = gpr_avl_add(avl, box(80), box(837));
+ avl = gpr_avl_add(avl, box(196), box(838));
+ avl = gpr_avl_add(avl, box(5), box(839));
+ avl = remove_int(avl, 782);
+ avl = gpr_avl_add(avl, box(827), box(841));
+ avl = remove_int(avl, 472);
+ avl = remove_int(avl, 664);
+ avl = gpr_avl_add(avl, box(409), box(844));
+ avl = gpr_avl_add(avl, box(62), box(845));
+ avl = remove_int(avl, 56);
+ avl = remove_int(avl, 606);
+ avl = remove_int(avl, 707);
+ avl = remove_int(avl, 989);
+ avl = remove_int(avl, 549);
+ avl = remove_int(avl, 259);
+ avl = gpr_avl_add(avl, box(405), box(852));
+ avl = remove_int(avl, 587);
+ avl = remove_int(avl, 350);
+ avl = gpr_avl_add(avl, box(980), box(855));
+ avl = gpr_avl_add(avl, box(992), box(856));
+ avl = gpr_avl_add(avl, box(818), box(857));
+ avl = remove_int(avl, 853);
+ avl = remove_int(avl, 701);
+ avl = gpr_avl_add(avl, box(675), box(860));
+ avl = remove_int(avl, 248);
+ avl = remove_int(avl, 649);
+ avl = gpr_avl_add(avl, box(508), box(863));
+ avl = remove_int(avl, 927);
+ avl = gpr_avl_add(avl, box(957), box(865));
+ avl = gpr_avl_add(avl, box(698), box(866));
+ avl = gpr_avl_add(avl, box(388), box(867));
+ avl = gpr_avl_add(avl, box(532), box(868));
+ avl = gpr_avl_add(avl, box(681), box(869));
+ avl = remove_int(avl, 544);
+ avl = remove_int(avl, 991);
+ avl = remove_int(avl, 397);
+ avl = gpr_avl_add(avl, box(954), box(873));
+ avl = gpr_avl_add(avl, box(219), box(874));
+ avl = gpr_avl_add(avl, box(465), box(875));
+ avl = remove_int(avl, 371);
+ avl = gpr_avl_add(avl, box(601), box(877));
+ avl = gpr_avl_add(avl, box(543), box(878));
+ avl = remove_int(avl, 329);
+ avl = gpr_avl_add(avl, box(560), box(880));
+ avl = remove_int(avl, 898);
+ avl = gpr_avl_add(avl, box(455), box(882));
+ avl = remove_int(avl, 313);
+ avl = gpr_avl_add(avl, box(215), box(884));
+ avl = remove_int(avl, 846);
+ avl = gpr_avl_add(avl, box(608), box(886));
+ avl = remove_int(avl, 248);
+ avl = gpr_avl_add(avl, box(575), box(888));
+ avl = remove_int(avl, 207);
+ avl = remove_int(avl, 810);
+ avl = remove_int(avl, 665);
+ avl = remove_int(avl, 361);
+ avl = gpr_avl_add(avl, box(154), box(893));
+ avl = gpr_avl_add(avl, box(329), box(894));
+ avl = gpr_avl_add(avl, box(326), box(895));
+ avl = remove_int(avl, 746);
+ avl = remove_int(avl, 99);
+ avl = gpr_avl_add(avl, box(464), box(898));
+ avl = gpr_avl_add(avl, box(141), box(899));
+ avl = remove_int(avl, 383);
+ avl = gpr_avl_add(avl, box(414), box(901));
+ avl = gpr_avl_add(avl, box(777), box(902));
+ avl = remove_int(avl, 972);
+ avl = remove_int(avl, 841);
+ avl = remove_int(avl, 100);
+ avl = gpr_avl_add(avl, box(828), box(906));
+ avl = remove_int(avl, 785);
+ avl = gpr_avl_add(avl, box(1008), box(908));
+ avl = gpr_avl_add(avl, box(46), box(909));
+ avl = remove_int(avl, 399);
+ avl = gpr_avl_add(avl, box(178), box(911));
+ avl = gpr_avl_add(avl, box(573), box(912));
+ avl = remove_int(avl, 299);
+ avl = gpr_avl_add(avl, box(690), box(914));
+ avl = gpr_avl_add(avl, box(692), box(915));
+ avl = remove_int(avl, 404);
+ avl = remove_int(avl, 16);
+ avl = remove_int(avl, 746);
+ avl = remove_int(avl, 486);
+ avl = remove_int(avl, 119);
+ avl = gpr_avl_add(avl, box(167), box(921));
+ avl = remove_int(avl, 328);
+ avl = gpr_avl_add(avl, box(89), box(923));
+ avl = remove_int(avl, 867);
+ avl = remove_int(avl, 626);
+ avl = remove_int(avl, 507);
+ avl = gpr_avl_add(avl, box(365), box(927));
+ avl = gpr_avl_add(avl, box(58), box(928));
+ avl = gpr_avl_add(avl, box(70), box(929));
+ avl = remove_int(avl, 81);
+ avl = remove_int(avl, 797);
+ avl = gpr_avl_add(avl, box(846), box(932));
+ avl = remove_int(avl, 642);
+ avl = gpr_avl_add(avl, box(777), box(934));
+ avl = remove_int(avl, 107);
+ avl = gpr_avl_add(avl, box(691), box(936));
+ avl = gpr_avl_add(avl, box(820), box(937));
+ avl = gpr_avl_add(avl, box(202), box(938));
+ avl = gpr_avl_add(avl, box(308), box(939));
+ avl = gpr_avl_add(avl, box(20), box(940));
+ avl = remove_int(avl, 289);
+ avl = gpr_avl_add(avl, box(714), box(942));
+ avl = gpr_avl_add(avl, box(584), box(943));
+ avl = remove_int(avl, 294);
+ avl = gpr_avl_add(avl, box(496), box(945));
+ avl = gpr_avl_add(avl, box(394), box(946));
+ avl = gpr_avl_add(avl, box(860), box(947));
+ avl = gpr_avl_add(avl, box(58), box(948));
+ avl = remove_int(avl, 784);
+ avl = remove_int(avl, 584);
+ avl = remove_int(avl, 708);
+ avl = gpr_avl_add(avl, box(142), box(952));
+ avl = gpr_avl_add(avl, box(247), box(953));
+ avl = gpr_avl_add(avl, box(389), box(954));
+ avl = remove_int(avl, 390);
+ avl = gpr_avl_add(avl, box(465), box(956));
+ avl = gpr_avl_add(avl, box(936), box(957));
+ avl = gpr_avl_add(avl, box(309), box(958));
+ avl = remove_int(avl, 928);
+ avl = remove_int(avl, 128);
+ avl = remove_int(avl, 979);
+ avl = remove_int(avl, 670);
+ avl = remove_int(avl, 738);
+ avl = remove_int(avl, 271);
+ avl = remove_int(avl, 540);
+ avl = gpr_avl_add(avl, box(365), box(966));
+ avl = remove_int(avl, 82);
+ avl = gpr_avl_add(avl, box(728), box(968));
+ avl = remove_int(avl, 852);
+ avl = gpr_avl_add(avl, box(884), box(970));
+ avl = gpr_avl_add(avl, box(502), box(971));
+ avl = remove_int(avl, 898);
+ avl = remove_int(avl, 481);
+ avl = gpr_avl_add(avl, box(911), box(974));
+ avl = remove_int(avl, 787);
+ avl = remove_int(avl, 785);
+ avl = remove_int(avl, 537);
+ avl = remove_int(avl, 535);
+ avl = remove_int(avl, 136);
+ avl = remove_int(avl, 749);
+ avl = remove_int(avl, 637);
+ avl = remove_int(avl, 900);
+ avl = gpr_avl_add(avl, box(598), box(983));
+ avl = remove_int(avl, 25);
+ avl = remove_int(avl, 697);
+ avl = gpr_avl_add(avl, box(645), box(986));
+ avl = gpr_avl_add(avl, box(211), box(987));
+ avl = gpr_avl_add(avl, box(589), box(988));
+ avl = remove_int(avl, 702);
+ avl = gpr_avl_add(avl, box(53), box(990));
+ avl = remove_int(avl, 492);
+ avl = remove_int(avl, 185);
+ avl = remove_int(avl, 246);
+ avl = remove_int(avl, 257);
+ avl = remove_int(avl, 502);
+ avl = remove_int(avl, 34);
+ avl = gpr_avl_add(avl, box(74), box(997));
+ avl = gpr_avl_add(avl, box(834), box(998));
+ avl = gpr_avl_add(avl, box(514), box(999));
+ avl = gpr_avl_add(avl, box(75), box(1000));
+ avl = remove_int(avl, 745);
+ avl = gpr_avl_add(avl, box(362), box(1002));
+ avl = remove_int(avl, 215);
+ avl = gpr_avl_add(avl, box(624), box(1004));
+ avl = remove_int(avl, 404);
+ avl = remove_int(avl, 359);
+ avl = remove_int(avl, 491);
+ avl = gpr_avl_add(avl, box(903), box(1008));
+ avl = gpr_avl_add(avl, box(240), box(1009));
+ avl = remove_int(avl, 95);
+ avl = gpr_avl_add(avl, box(119), box(1011));
+ avl = gpr_avl_add(avl, box(857), box(1012));
+ avl = remove_int(avl, 39);
+ avl = remove_int(avl, 866);
+ avl = gpr_avl_add(avl, box(503), box(1015));
+ avl = gpr_avl_add(avl, box(740), box(1016));
+ avl = remove_int(avl, 637);
+ avl = remove_int(avl, 156);
+ avl = remove_int(avl, 6);
+ avl = remove_int(avl, 745);
+ avl = remove_int(avl, 433);
+ avl = remove_int(avl, 283);
+ avl = gpr_avl_add(avl, box(625), box(1023));
+ avl = remove_int(avl, 638);
+ avl = gpr_avl_add(avl, box(299), box(1025));
+ avl = gpr_avl_add(avl, box(584), box(1026));
+ avl = remove_int(avl, 863);
+ avl = gpr_avl_add(avl, box(612), box(1028));
+ avl = gpr_avl_add(avl, box(62), box(1029));
+ avl = gpr_avl_add(avl, box(432), box(1030));
+ avl = remove_int(avl, 371);
+ avl = remove_int(avl, 790);
+ avl = remove_int(avl, 227);
+ avl = remove_int(avl, 836);
+ avl = gpr_avl_add(avl, box(703), box(1035));
+ avl = gpr_avl_add(avl, box(644), box(1036));
+ avl = remove_int(avl, 638);
+ avl = gpr_avl_add(avl, box(13), box(1038));
+ avl = remove_int(avl, 66);
+ avl = remove_int(avl, 82);
+ avl = gpr_avl_add(avl, box(362), box(1041));
+ avl = gpr_avl_add(avl, box(783), box(1042));
+ avl = remove_int(avl, 60);
+ avl = gpr_avl_add(avl, box(80), box(1044));
+ avl = gpr_avl_add(avl, box(825), box(1045));
+ avl = gpr_avl_add(avl, box(688), box(1046));
+ avl = gpr_avl_add(avl, box(662), box(1047));
+ avl = remove_int(avl, 156);
+ avl = remove_int(avl, 376);
+ avl = remove_int(avl, 99);
+ avl = gpr_avl_add(avl, box(526), box(1051));
+ avl = gpr_avl_add(avl, box(168), box(1052));
+ avl = remove_int(avl, 646);
+ avl = remove_int(avl, 380);
+ avl = remove_int(avl, 833);
+ avl = gpr_avl_add(avl, box(53), box(1056));
+ avl = remove_int(avl, 105);
+ avl = gpr_avl_add(avl, box(373), box(1058));
+ avl = gpr_avl_add(avl, box(184), box(1059));
+ avl = remove_int(avl, 288);
+ avl = gpr_avl_add(avl, box(966), box(1061));
+ avl = remove_int(avl, 158);
+ avl = gpr_avl_add(avl, box(406), box(1063));
+ avl = remove_int(avl, 470);
+ avl = gpr_avl_add(avl, box(283), box(1065));
+ avl = gpr_avl_add(avl, box(838), box(1066));
+ avl = gpr_avl_add(avl, box(288), box(1067));
+ avl = gpr_avl_add(avl, box(950), box(1068));
+ avl = gpr_avl_add(avl, box(163), box(1069));
+ avl = remove_int(avl, 623);
+ avl = remove_int(avl, 769);
+ avl = gpr_avl_add(avl, box(144), box(1072));
+ avl = gpr_avl_add(avl, box(489), box(1073));
+ avl = remove_int(avl, 15);
+ avl = gpr_avl_add(avl, box(971), box(1075));
+ avl = remove_int(avl, 660);
+ avl = gpr_avl_add(avl, box(255), box(1077));
+ avl = remove_int(avl, 494);
+ avl = gpr_avl_add(avl, box(109), box(1079));
+ avl = gpr_avl_add(avl, box(420), box(1080));
+ avl = gpr_avl_add(avl, box(509), box(1081));
+ avl = remove_int(avl, 178);
+ avl = gpr_avl_add(avl, box(216), box(1083));
+ avl = gpr_avl_add(avl, box(707), box(1084));
+ avl = gpr_avl_add(avl, box(411), box(1085));
+ avl = gpr_avl_add(avl, box(352), box(1086));
+ avl = remove_int(avl, 983);
+ avl = gpr_avl_add(avl, box(6), box(1088));
+ avl = gpr_avl_add(avl, box(1014), box(1089));
+ avl = remove_int(avl, 98);
+ avl = remove_int(avl, 325);
+ avl = gpr_avl_add(avl, box(851), box(1092));
+ avl = remove_int(avl, 553);
+ avl = gpr_avl_add(avl, box(218), box(1094));
+ avl = gpr_avl_add(avl, box(261), box(1095));
+ avl = remove_int(avl, 31);
+ avl = gpr_avl_add(avl, box(872), box(1097));
+ avl = remove_int(avl, 543);
+ avl = remove_int(avl, 314);
+ avl = remove_int(avl, 443);
+ avl = gpr_avl_add(avl, box(533), box(1101));
+ avl = remove_int(avl, 881);
+ avl = remove_int(avl, 269);
+ avl = remove_int(avl, 940);
+ avl = remove_int(avl, 909);
+ avl = remove_int(avl, 197);
+ avl = remove_int(avl, 773);
+ avl = remove_int(avl, 790);
+ avl = remove_int(avl, 345);
+ avl = gpr_avl_add(avl, box(965), box(1110));
+ avl = remove_int(avl, 622);
+ avl = gpr_avl_add(avl, box(352), box(1112));
+ avl = remove_int(avl, 182);
+ avl = gpr_avl_add(avl, box(534), box(1114));
+ avl = gpr_avl_add(avl, box(97), box(1115));
+ avl = gpr_avl_add(avl, box(198), box(1116));
+ avl = remove_int(avl, 750);
+ avl = gpr_avl_add(avl, box(98), box(1118));
+ avl = remove_int(avl, 943);
+ avl = gpr_avl_add(avl, box(254), box(1120));
+ avl = gpr_avl_add(avl, box(30), box(1121));
+ avl = remove_int(avl, 14);
+ avl = remove_int(avl, 475);
+ avl = remove_int(avl, 82);
+ avl = gpr_avl_add(avl, box(789), box(1125));
+ avl = gpr_avl_add(avl, box(402), box(1126));
+ avl = remove_int(avl, 1019);
+ avl = gpr_avl_add(avl, box(858), box(1128));
+ avl = gpr_avl_add(avl, box(625), box(1129));
+ avl = remove_int(avl, 675);
+ avl = remove_int(avl, 323);
+ avl = gpr_avl_add(avl, box(329), box(1132));
+ avl = remove_int(avl, 929);
+ avl = remove_int(avl, 44);
+ avl = gpr_avl_add(avl, box(443), box(1135));
+ avl = gpr_avl_add(avl, box(653), box(1136));
+ avl = gpr_avl_add(avl, box(750), box(1137));
+ avl = gpr_avl_add(avl, box(252), box(1138));
+ avl = gpr_avl_add(avl, box(449), box(1139));
+ avl = remove_int(avl, 1022);
+ avl = remove_int(avl, 357);
+ avl = remove_int(avl, 602);
+ avl = remove_int(avl, 131);
+ avl = gpr_avl_add(avl, box(531), box(1144));
+ avl = remove_int(avl, 806);
+ avl = gpr_avl_add(avl, box(455), box(1146));
+ avl = remove_int(avl, 31);
+ avl = gpr_avl_add(avl, box(154), box(1148));
+ avl = gpr_avl_add(avl, box(189), box(1149));
+ avl = remove_int(avl, 786);
+ avl = gpr_avl_add(avl, box(496), box(1151));
+ avl = gpr_avl_add(avl, box(81), box(1152));
+ avl = gpr_avl_add(avl, box(59), box(1153));
+ avl = remove_int(avl, 424);
+ avl = remove_int(avl, 668);
+ avl = gpr_avl_add(avl, box(723), box(1156));
+ avl = gpr_avl_add(avl, box(822), box(1157));
+ avl = gpr_avl_add(avl, box(354), box(1158));
+ avl = remove_int(avl, 738);
+ avl = gpr_avl_add(avl, box(686), box(1160));
+ avl = gpr_avl_add(avl, box(43), box(1161));
+ avl = gpr_avl_add(avl, box(625), box(1162));
+ avl = gpr_avl_add(avl, box(902), box(1163));
+ avl = gpr_avl_add(avl, box(12), box(1164));
+ avl = gpr_avl_add(avl, box(977), box(1165));
+ avl = gpr_avl_add(avl, box(699), box(1166));
+ avl = gpr_avl_add(avl, box(189), box(1167));
+ avl = remove_int(avl, 672);
+ avl = remove_int(avl, 90);
+ avl = remove_int(avl, 757);
+ avl = remove_int(avl, 494);
+ avl = gpr_avl_add(avl, box(759), box(1172));
+ avl = remove_int(avl, 758);
+ avl = remove_int(avl, 222);
+ avl = gpr_avl_add(avl, box(975), box(1175));
+ avl = remove_int(avl, 993);
+ avl = gpr_avl_add(avl, box(2), box(1177));
+ avl = gpr_avl_add(avl, box(70), box(1178));
+ avl = remove_int(avl, 350);
+ avl = remove_int(avl, 972);
+ avl = remove_int(avl, 880);
+ avl = gpr_avl_add(avl, box(753), box(1182));
+ avl = remove_int(avl, 404);
+ avl = gpr_avl_add(avl, box(294), box(1184));
+ avl = remove_int(avl, 474);
+ avl = gpr_avl_add(avl, box(228), box(1186));
+ avl = gpr_avl_add(avl, box(484), box(1187));
+ avl = remove_int(avl, 238);
+ avl = remove_int(avl, 53);
+ avl = remove_int(avl, 691);
+ avl = gpr_avl_add(avl, box(345), box(1191));
+ avl = remove_int(avl, 0);
+ avl = gpr_avl_add(avl, box(230), box(1193));
+ avl = remove_int(avl, 227);
+ avl = remove_int(avl, 152);
+ avl = gpr_avl_add(avl, box(884), box(1196));
+ avl = remove_int(avl, 823);
+ avl = remove_int(avl, 53);
+ avl = gpr_avl_add(avl, box(1015), box(1199));
+ avl = gpr_avl_add(avl, box(697), box(1200));
+ avl = gpr_avl_add(avl, box(376), box(1201));
+ avl = remove_int(avl, 411);
+ avl = gpr_avl_add(avl, box(888), box(1203));
+ avl = remove_int(avl, 55);
+ avl = gpr_avl_add(avl, box(85), box(1205));
+ avl = remove_int(avl, 947);
+ avl = remove_int(avl, 382);
+ avl = remove_int(avl, 777);
+ avl = gpr_avl_add(avl, box(1017), box(1209));
+ avl = gpr_avl_add(avl, box(169), box(1210));
+ avl = gpr_avl_add(avl, box(156), box(1211));
+ avl = remove_int(avl, 153);
+ avl = remove_int(avl, 642);
+ avl = remove_int(avl, 158);
+ avl = gpr_avl_add(avl, box(554), box(1215));
+ avl = gpr_avl_add(avl, box(76), box(1216));
+ avl = gpr_avl_add(avl, box(756), box(1217));
+ avl = remove_int(avl, 767);
+ avl = remove_int(avl, 112);
+ avl = remove_int(avl, 539);
+ avl = remove_int(avl, 544);
+ avl = remove_int(avl, 628);
+ avl = remove_int(avl, 385);
+ avl = remove_int(avl, 514);
+ avl = remove_int(avl, 362);
+ avl = gpr_avl_add(avl, box(523), box(1226));
+ avl = gpr_avl_add(avl, box(712), box(1227));
+ avl = gpr_avl_add(avl, box(474), box(1228));
+ avl = gpr_avl_add(avl, box(882), box(1229));
+ avl = gpr_avl_add(avl, box(965), box(1230));
+ avl = remove_int(avl, 464);
+ avl = gpr_avl_add(avl, box(319), box(1232));
+ avl = gpr_avl_add(avl, box(504), box(1233));
+ avl = remove_int(avl, 818);
+ avl = gpr_avl_add(avl, box(884), box(1235));
+ avl = gpr_avl_add(avl, box(813), box(1236));
+ avl = gpr_avl_add(avl, box(795), box(1237));
+ avl = remove_int(avl, 306);
+ avl = gpr_avl_add(avl, box(799), box(1239));
+ avl = remove_int(avl, 534);
+ avl = gpr_avl_add(avl, box(480), box(1241));
+ avl = gpr_avl_add(avl, box(656), box(1242));
+ avl = gpr_avl_add(avl, box(709), box(1243));
+ avl = gpr_avl_add(avl, box(500), box(1244));
+ avl = remove_int(avl, 740);
+ avl = gpr_avl_add(avl, box(980), box(1246));
+ avl = gpr_avl_add(avl, box(458), box(1247));
+ avl = remove_int(avl, 377);
+ avl = remove_int(avl, 338);
+ avl = gpr_avl_add(avl, box(554), box(1250));
+ avl = gpr_avl_add(avl, box(504), box(1251));
+ avl = gpr_avl_add(avl, box(603), box(1252));
+ avl = gpr_avl_add(avl, box(761), box(1253));
+ avl = remove_int(avl, 431);
+ avl = gpr_avl_add(avl, box(707), box(1255));
+ avl = gpr_avl_add(avl, box(673), box(1256));
+ avl = remove_int(avl, 998);
+ avl = remove_int(avl, 332);
+ avl = remove_int(avl, 413);
+ avl = remove_int(avl, 227);
+ avl = remove_int(avl, 249);
+ avl = remove_int(avl, 309);
+ avl = remove_int(avl, 459);
+ avl = gpr_avl_add(avl, box(645), box(1264));
+ avl = remove_int(avl, 858);
+ avl = remove_int(avl, 997);
+ avl = gpr_avl_add(avl, box(519), box(1267));
+ avl = remove_int(avl, 614);
+ avl = remove_int(avl, 462);
+ avl = remove_int(avl, 792);
+ avl = gpr_avl_add(avl, box(987), box(1271));
+ avl = gpr_avl_add(avl, box(309), box(1272));
+ avl = remove_int(avl, 747);
+ avl = gpr_avl_add(avl, box(621), box(1274));
+ avl = gpr_avl_add(avl, box(450), box(1275));
+ avl = remove_int(avl, 265);
+ avl = remove_int(avl, 8);
+ avl = remove_int(avl, 383);
+ avl = gpr_avl_add(avl, box(238), box(1279));
+ avl = remove_int(avl, 241);
+ avl = gpr_avl_add(avl, box(180), box(1281));
+ avl = gpr_avl_add(avl, box(411), box(1282));
+ avl = gpr_avl_add(avl, box(791), box(1283));
+ avl = gpr_avl_add(avl, box(955), box(1284));
+ avl = remove_int(avl, 24);
+ avl = remove_int(avl, 375);
+ avl = gpr_avl_add(avl, box(140), box(1287));
+ avl = remove_int(avl, 949);
+ avl = gpr_avl_add(avl, box(301), box(1289));
+ avl = gpr_avl_add(avl, box(0), box(1290));
+ avl = remove_int(avl, 371);
+ avl = remove_int(avl, 427);
+ avl = remove_int(avl, 841);
+ avl = remove_int(avl, 847);
+ avl = gpr_avl_add(avl, box(814), box(1295));
+ avl = gpr_avl_add(avl, box(127), box(1296));
+ avl = gpr_avl_add(avl, box(279), box(1297));
+ avl = remove_int(avl, 669);
+ avl = remove_int(avl, 541);
+ avl = remove_int(avl, 275);
+ avl = remove_int(avl, 299);
+ avl = remove_int(avl, 552);
+ avl = gpr_avl_add(avl, box(310), box(1303));
+ avl = gpr_avl_add(avl, box(304), box(1304));
+ avl = gpr_avl_add(avl, box(1), box(1305));
+ avl = gpr_avl_add(avl, box(339), box(1306));
+ avl = remove_int(avl, 570);
+ avl = remove_int(avl, 752);
+ avl = remove_int(avl, 552);
+ avl = remove_int(avl, 442);
+ avl = remove_int(avl, 639);
+ avl = gpr_avl_add(avl, box(313), box(1312));
+ avl = remove_int(avl, 85);
+ avl = gpr_avl_add(avl, box(964), box(1314));
+ avl = gpr_avl_add(avl, box(559), box(1315));
+ avl = remove_int(avl, 167);
+ avl = gpr_avl_add(avl, box(866), box(1317));
+ avl = remove_int(avl, 275);
+ avl = gpr_avl_add(avl, box(173), box(1319));
+ avl = gpr_avl_add(avl, box(765), box(1320));
+ avl = remove_int(avl, 883);
+ avl = gpr_avl_add(avl, box(547), box(1322));
+ avl = gpr_avl_add(avl, box(847), box(1323));
+ avl = remove_int(avl, 817);
+ avl = remove_int(avl, 850);
+ avl = remove_int(avl, 718);
+ avl = gpr_avl_add(avl, box(806), box(1327));
+ avl = gpr_avl_add(avl, box(360), box(1328));
+ avl = remove_int(avl, 991);
+ avl = gpr_avl_add(avl, box(493), box(1330));
+ avl = remove_int(avl, 516);
+ avl = gpr_avl_add(avl, box(361), box(1332));
+ avl = remove_int(avl, 355);
+ avl = gpr_avl_add(avl, box(512), box(1334));
+ avl = gpr_avl_add(avl, box(191), box(1335));
+ avl = remove_int(avl, 703);
+ avl = gpr_avl_add(avl, box(333), box(1337));
+ avl = remove_int(avl, 481);
+ avl = gpr_avl_add(avl, box(501), box(1339));
+ avl = remove_int(avl, 532);
+ avl = remove_int(avl, 510);
+ avl = gpr_avl_add(avl, box(793), box(1342));
+ avl = gpr_avl_add(avl, box(234), box(1343));
+ avl = remove_int(avl, 159);
+ avl = remove_int(avl, 429);
+ avl = remove_int(avl, 728);
+ avl = remove_int(avl, 288);
+ avl = gpr_avl_add(avl, box(281), box(1348));
+ avl = gpr_avl_add(avl, box(702), box(1349));
+ avl = gpr_avl_add(avl, box(149), box(1350));
+ avl = remove_int(avl, 22);
+ avl = remove_int(avl, 944);
+ avl = remove_int(avl, 55);
+ avl = remove_int(avl, 512);
+ avl = remove_int(avl, 676);
+ avl = remove_int(avl, 884);
+ avl = gpr_avl_add(avl, box(246), box(1357));
+ avl = gpr_avl_add(avl, box(455), box(1358));
+ avl = remove_int(avl, 782);
+ avl = remove_int(avl, 682);
+ avl = gpr_avl_add(avl, box(243), box(1361));
+ avl = gpr_avl_add(avl, box(109), box(1362));
+ avl = gpr_avl_add(avl, box(452), box(1363));
+ avl = remove_int(avl, 151);
+ avl = gpr_avl_add(avl, box(159), box(1365));
+ avl = remove_int(avl, 1023);
+ avl = gpr_avl_add(avl, box(129), box(1367));
+ avl = gpr_avl_add(avl, box(537), box(1368));
+ avl = remove_int(avl, 321);
+ avl = gpr_avl_add(avl, box(740), box(1370));
+ avl = remove_int(avl, 45);
+ avl = remove_int(avl, 136);
+ avl = gpr_avl_add(avl, box(229), box(1373));
+ avl = remove_int(avl, 772);
+ avl = gpr_avl_add(avl, box(181), box(1375));
+ avl = remove_int(avl, 175);
+ avl = gpr_avl_add(avl, box(817), box(1377));
+ avl = remove_int(avl, 956);
+ avl = gpr_avl_add(avl, box(675), box(1379));
+ avl = gpr_avl_add(avl, box(375), box(1380));
+ avl = remove_int(avl, 384);
+ avl = gpr_avl_add(avl, box(1016), box(1382));
+ avl = remove_int(avl, 295);
+ avl = remove_int(avl, 697);
+ avl = remove_int(avl, 554);
+ avl = remove_int(avl, 590);
+ avl = remove_int(avl, 1014);
+ avl = gpr_avl_add(avl, box(890), box(1388));
+ avl = gpr_avl_add(avl, box(293), box(1389));
+ avl = remove_int(avl, 207);
+ avl = remove_int(avl, 46);
+ avl = gpr_avl_add(avl, box(899), box(1392));
+ avl = gpr_avl_add(avl, box(666), box(1393));
+ avl = gpr_avl_add(avl, box(85), box(1394));
+ avl = gpr_avl_add(avl, box(914), box(1395));
+ avl = gpr_avl_add(avl, box(128), box(1396));
+ avl = gpr_avl_add(avl, box(835), box(1397));
+ avl = gpr_avl_add(avl, box(787), box(1398));
+ avl = gpr_avl_add(avl, box(649), box(1399));
+ avl = gpr_avl_add(avl, box(723), box(1400));
+ avl = remove_int(avl, 874);
+ avl = gpr_avl_add(avl, box(778), box(1402));
+ avl = gpr_avl_add(avl, box(1015), box(1403));
+ avl = gpr_avl_add(avl, box(59), box(1404));
+ avl = gpr_avl_add(avl, box(259), box(1405));
+ avl = gpr_avl_add(avl, box(758), box(1406));
+ avl = remove_int(avl, 648);
+ avl = gpr_avl_add(avl, box(145), box(1408));
+ avl = gpr_avl_add(avl, box(440), box(1409));
+ avl = remove_int(avl, 608);
+ avl = remove_int(avl, 690);
+ avl = gpr_avl_add(avl, box(605), box(1412));
+ avl = remove_int(avl, 856);
+ avl = remove_int(avl, 608);
+ avl = gpr_avl_add(avl, box(829), box(1415));
+ avl = gpr_avl_add(avl, box(660), box(1416));
+ avl = remove_int(avl, 596);
+ avl = gpr_avl_add(avl, box(519), box(1418));
+ avl = gpr_avl_add(avl, box(35), box(1419));
+ avl = gpr_avl_add(avl, box(871), box(1420));
+ avl = remove_int(avl, 845);
+ avl = gpr_avl_add(avl, box(600), box(1422));
+ avl = gpr_avl_add(avl, box(215), box(1423));
+ avl = remove_int(avl, 761);
+ avl = gpr_avl_add(avl, box(975), box(1425));
+ avl = remove_int(avl, 987);
+ avl = gpr_avl_add(avl, box(58), box(1427));
+ avl = remove_int(avl, 119);
+ avl = gpr_avl_add(avl, box(937), box(1429));
+ avl = gpr_avl_add(avl, box(372), box(1430));
+ avl = gpr_avl_add(avl, box(11), box(1431));
+ avl = gpr_avl_add(avl, box(398), box(1432));
+ avl = gpr_avl_add(avl, box(423), box(1433));
+ avl = remove_int(avl, 171);
+ avl = gpr_avl_add(avl, box(473), box(1435));
+ avl = remove_int(avl, 752);
+ avl = remove_int(avl, 625);
+ avl = remove_int(avl, 764);
+ avl = remove_int(avl, 49);
+ avl = gpr_avl_add(avl, box(472), box(1440));
+ avl = remove_int(avl, 847);
+ avl = remove_int(avl, 642);
+ avl = remove_int(avl, 1004);
+ avl = remove_int(avl, 795);
+ avl = remove_int(avl, 465);
+ avl = gpr_avl_add(avl, box(636), box(1446));
+ avl = remove_int(avl, 152);
+ avl = gpr_avl_add(avl, box(61), box(1448));
+ avl = remove_int(avl, 929);
+ avl = remove_int(avl, 9);
+ avl = gpr_avl_add(avl, box(251), box(1451));
+ avl = gpr_avl_add(avl, box(672), box(1452));
+ avl = gpr_avl_add(avl, box(66), box(1453));
+ avl = remove_int(avl, 693);
+ avl = remove_int(avl, 914);
+ avl = remove_int(avl, 116);
+ avl = remove_int(avl, 577);
+ avl = gpr_avl_add(avl, box(618), box(1458));
+ avl = gpr_avl_add(avl, box(495), box(1459));
+ avl = remove_int(avl, 450);
+ avl = gpr_avl_add(avl, box(533), box(1461));
+ avl = gpr_avl_add(avl, box(414), box(1462));
+ avl = remove_int(avl, 74);
+ avl = remove_int(avl, 236);
+ avl = gpr_avl_add(avl, box(707), box(1465));
+ avl = gpr_avl_add(avl, box(357), box(1466));
+ avl = gpr_avl_add(avl, box(1007), box(1467));
+ avl = gpr_avl_add(avl, box(811), box(1468));
+ avl = gpr_avl_add(avl, box(418), box(1469));
+ avl = gpr_avl_add(avl, box(164), box(1470));
+ avl = gpr_avl_add(avl, box(622), box(1471));
+ avl = remove_int(avl, 22);
+ avl = remove_int(avl, 14);
+ avl = remove_int(avl, 732);
+ avl = remove_int(avl, 7);
+ avl = remove_int(avl, 447);
+ avl = gpr_avl_add(avl, box(221), box(1477));
+ avl = gpr_avl_add(avl, box(202), box(1478));
+ avl = gpr_avl_add(avl, box(312), box(1479));
+ avl = remove_int(avl, 274);
+ avl = gpr_avl_add(avl, box(684), box(1481));
+ avl = gpr_avl_add(avl, box(954), box(1482));
+ avl = gpr_avl_add(avl, box(637), box(1483));
+ avl = remove_int(avl, 716);
+ avl = gpr_avl_add(avl, box(198), box(1485));
+ avl = remove_int(avl, 340);
+ avl = remove_int(avl, 137);
+ avl = remove_int(avl, 995);
+ avl = remove_int(avl, 1004);
+ avl = gpr_avl_add(avl, box(661), box(1490));
+ avl = gpr_avl_add(avl, box(862), box(1491));
+ avl = remove_int(avl, 527);
+ avl = gpr_avl_add(avl, box(945), box(1493));
+ avl = remove_int(avl, 355);
+ avl = remove_int(avl, 144);
+ avl = gpr_avl_add(avl, box(229), box(1496));
+ avl = gpr_avl_add(avl, box(237), box(1497));
+ avl = remove_int(avl, 471);
+ avl = remove_int(avl, 901);
+ avl = gpr_avl_add(avl, box(905), box(1500));
+ avl = remove_int(avl, 19);
+ avl = remove_int(avl, 896);
+ avl = remove_int(avl, 585);
+ avl = remove_int(avl, 308);
+ avl = gpr_avl_add(avl, box(547), box(1505));
+ avl = gpr_avl_add(avl, box(552), box(1506));
+ avl = gpr_avl_add(avl, box(30), box(1507));
+ avl = gpr_avl_add(avl, box(445), box(1508));
+ avl = remove_int(avl, 785);
+ avl = remove_int(avl, 185);
+ avl = gpr_avl_add(avl, box(405), box(1511));
+ avl = gpr_avl_add(avl, box(733), box(1512));
+ avl = gpr_avl_add(avl, box(573), box(1513));
+ avl = gpr_avl_add(avl, box(492), box(1514));
+ avl = gpr_avl_add(avl, box(343), box(1515));
+ avl = gpr_avl_add(avl, box(527), box(1516));
+ avl = gpr_avl_add(avl, box(596), box(1517));
+ avl = gpr_avl_add(avl, box(519), box(1518));
+ avl = remove_int(avl, 243);
+ avl = remove_int(avl, 722);
+ avl = gpr_avl_add(avl, box(772), box(1521));
+ avl = remove_int(avl, 152);
+ avl = remove_int(avl, 305);
+ avl = gpr_avl_add(avl, box(754), box(1524));
+ avl = gpr_avl_add(avl, box(373), box(1525));
+ avl = remove_int(avl, 995);
+ avl = gpr_avl_add(avl, box(329), box(1527));
+ avl = remove_int(avl, 397);
+ avl = gpr_avl_add(avl, box(884), box(1529));
+ avl = remove_int(avl, 329);
+ avl = remove_int(avl, 240);
+ avl = gpr_avl_add(avl, box(566), box(1532));
+ avl = gpr_avl_add(avl, box(232), box(1533));
+ avl = remove_int(avl, 993);
+ avl = gpr_avl_add(avl, box(888), box(1535));
+ avl = remove_int(avl, 242);
+ avl = gpr_avl_add(avl, box(941), box(1537));
+ avl = remove_int(avl, 415);
+ avl = gpr_avl_add(avl, box(992), box(1539));
+ avl = remove_int(avl, 289);
+ avl = gpr_avl_add(avl, box(60), box(1541));
+ avl = gpr_avl_add(avl, box(97), box(1542));
+ avl = remove_int(avl, 965);
+ avl = remove_int(avl, 267);
+ avl = remove_int(avl, 360);
+ avl = gpr_avl_add(avl, box(5), box(1546));
+ avl = remove_int(avl, 429);
+ avl = gpr_avl_add(avl, box(412), box(1548));
+ avl = remove_int(avl, 632);
+ avl = remove_int(avl, 113);
+ avl = gpr_avl_add(avl, box(48), box(1551));
+ avl = gpr_avl_add(avl, box(108), box(1552));
+ avl = gpr_avl_add(avl, box(750), box(1553));
+ avl = remove_int(avl, 188);
+ avl = gpr_avl_add(avl, box(668), box(1555));
+ avl = remove_int(avl, 37);
+ avl = remove_int(avl, 737);
+ avl = gpr_avl_add(avl, box(93), box(1558));
+ avl = gpr_avl_add(avl, box(628), box(1559));
+ avl = gpr_avl_add(avl, box(480), box(1560));
+ avl = remove_int(avl, 958);
+ avl = remove_int(avl, 565);
+ avl = remove_int(avl, 32);
+ avl = remove_int(avl, 1);
+ avl = remove_int(avl, 335);
+ avl = gpr_avl_add(avl, box(136), box(1566));
+ avl = gpr_avl_add(avl, box(469), box(1567));
+ avl = remove_int(avl, 349);
+ avl = gpr_avl_add(avl, box(768), box(1569));
+ avl = gpr_avl_add(avl, box(915), box(1570));
+ avl = remove_int(avl, 1014);
+ avl = gpr_avl_add(avl, box(117), box(1572));
+ avl = remove_int(avl, 62);
+ avl = gpr_avl_add(avl, box(382), box(1574));
+ avl = remove_int(avl, 571);
+ avl = gpr_avl_add(avl, box(655), box(1576));
+ avl = gpr_avl_add(avl, box(323), box(1577));
+ avl = remove_int(avl, 869);
+ avl = remove_int(avl, 151);
+ avl = gpr_avl_add(avl, box(1019), box(1580));
+ avl = gpr_avl_add(avl, box(984), box(1581));
+ avl = gpr_avl_add(avl, box(870), box(1582));
+ avl = gpr_avl_add(avl, box(376), box(1583));
+ avl = remove_int(avl, 625);
+ avl = gpr_avl_add(avl, box(733), box(1585));
+ avl = remove_int(avl, 532);
+ avl = remove_int(avl, 444);
+ avl = gpr_avl_add(avl, box(428), box(1588));
+ avl = gpr_avl_add(avl, box(860), box(1589));
+ avl = gpr_avl_add(avl, box(173), box(1590));
+ avl = remove_int(avl, 649);
+ avl = remove_int(avl, 913);
+ avl = remove_int(avl, 1);
+ avl = remove_int(avl, 304);
+ avl = gpr_avl_add(avl, box(604), box(1595));
+ avl = gpr_avl_add(avl, box(639), box(1596));
+ avl = remove_int(avl, 431);
+ avl = gpr_avl_add(avl, box(993), box(1598));
+ avl = remove_int(avl, 681);
+ avl = remove_int(avl, 927);
+ avl = gpr_avl_add(avl, box(87), box(1601));
+ avl = gpr_avl_add(avl, box(91), box(1602));
+ avl = remove_int(avl, 61);
+ avl = remove_int(avl, 14);
+ avl = remove_int(avl, 305);
+ avl = remove_int(avl, 304);
+ avl = remove_int(avl, 1016);
+ avl = gpr_avl_add(avl, box(903), box(1608));
+ avl = gpr_avl_add(avl, box(951), box(1609));
+ avl = gpr_avl_add(avl, box(146), box(1610));
+ avl = gpr_avl_add(avl, box(482), box(1611));
+ avl = gpr_avl_add(avl, box(71), box(1612));
+ avl = remove_int(avl, 246);
+ avl = remove_int(avl, 696);
+ avl = gpr_avl_add(avl, box(636), box(1615));
+ avl = gpr_avl_add(avl, box(295), box(1616));
+ avl = remove_int(avl, 11);
+ avl = remove_int(avl, 231);
+ avl = gpr_avl_add(avl, box(905), box(1619));
+ avl = gpr_avl_add(avl, box(993), box(1620));
+ avl = gpr_avl_add(avl, box(433), box(1621));
+ avl = gpr_avl_add(avl, box(117), box(1622));
+ avl = gpr_avl_add(avl, box(467), box(1623));
+ avl = remove_int(avl, 419);
+ avl = gpr_avl_add(avl, box(179), box(1625));
+ avl = remove_int(avl, 926);
+ avl = remove_int(avl, 326);
+ avl = gpr_avl_add(avl, box(551), box(1628));
+ avl = remove_int(avl, 14);
+ avl = remove_int(avl, 476);
+ avl = remove_int(avl, 823);
+ avl = gpr_avl_add(avl, box(350), box(1632));
+ avl = gpr_avl_add(avl, box(133), box(1633));
+ avl = remove_int(avl, 906);
+ avl = gpr_avl_add(avl, box(827), box(1635));
+ avl = gpr_avl_add(avl, box(201), box(1636));
+ avl = remove_int(avl, 124);
+ avl = remove_int(avl, 662);
+ avl = gpr_avl_add(avl, box(314), box(1639));
+ avl = gpr_avl_add(avl, box(986), box(1640));
+ avl = gpr_avl_add(avl, box(622), box(1641));
+ avl = remove_int(avl, 130);
+ avl = gpr_avl_add(avl, box(861), box(1643));
+ avl = remove_int(avl, 497);
+ avl = remove_int(avl, 905);
+ avl = gpr_avl_add(avl, box(502), box(1646));
+ avl = remove_int(avl, 721);
+ avl = gpr_avl_add(avl, box(514), box(1648));
+ avl = gpr_avl_add(avl, box(410), box(1649));
+ avl = remove_int(avl, 869);
+ avl = remove_int(avl, 247);
+ avl = gpr_avl_add(avl, box(450), box(1652));
+ avl = remove_int(avl, 364);
+ avl = gpr_avl_add(avl, box(963), box(1654));
+ avl = gpr_avl_add(avl, box(146), box(1655));
+ avl = remove_int(avl, 147);
+ avl = remove_int(avl, 789);
+ avl = gpr_avl_add(avl, box(693), box(1658));
+ avl = gpr_avl_add(avl, box(959), box(1659));
+ avl = remove_int(avl, 478);
+ avl = gpr_avl_add(avl, box(116), box(1661));
+ avl = gpr_avl_add(avl, box(520), box(1662));
+ avl = gpr_avl_add(avl, box(809), box(1663));
+ avl = gpr_avl_add(avl, box(667), box(1664));
+ avl = gpr_avl_add(avl, box(406), box(1665));
+ avl = remove_int(avl, 409);
+ avl = gpr_avl_add(avl, box(558), box(1667));
+ avl = gpr_avl_add(avl, box(0), box(1668));
+ avl = gpr_avl_add(avl, box(948), box(1669));
+ avl = gpr_avl_add(avl, box(576), box(1670));
+ avl = remove_int(avl, 864);
+ avl = remove_int(avl, 840);
+ avl = remove_int(avl, 1001);
+ avl = gpr_avl_add(avl, box(232), box(1674));
+ avl = remove_int(avl, 676);
+ avl = remove_int(avl, 752);
+ avl = remove_int(avl, 667);
+ avl = remove_int(avl, 605);
+ avl = gpr_avl_add(avl, box(258), box(1679));
+ avl = gpr_avl_add(avl, box(648), box(1680));
+ avl = gpr_avl_add(avl, box(761), box(1681));
+ avl = remove_int(avl, 293);
+ avl = remove_int(avl, 893);
+ avl = gpr_avl_add(avl, box(194), box(1684));
+ avl = remove_int(avl, 233);
+ avl = gpr_avl_add(avl, box(888), box(1686));
+ avl = remove_int(avl, 470);
+ avl = remove_int(avl, 703);
+ avl = remove_int(avl, 190);
+ avl = remove_int(avl, 359);
+ avl = gpr_avl_add(avl, box(621), box(1691));
+ avl = remove_int(avl, 634);
+ avl = remove_int(avl, 335);
+ avl = gpr_avl_add(avl, box(718), box(1694));
+ avl = gpr_avl_add(avl, box(463), box(1695));
+ avl = gpr_avl_add(avl, box(233), box(1696));
+ avl = remove_int(avl, 376);
+ avl = remove_int(avl, 496);
+ avl = remove_int(avl, 819);
+ avl = remove_int(avl, 38);
+ avl = remove_int(avl, 436);
+ avl = remove_int(avl, 102);
+ avl = gpr_avl_add(avl, box(607), box(1703));
+ avl = remove_int(avl, 329);
+ avl = gpr_avl_add(avl, box(716), box(1705));
+ avl = remove_int(avl, 639);
+ avl = remove_int(avl, 775);
+ avl = remove_int(avl, 578);
+ avl = remove_int(avl, 464);
+ avl = remove_int(avl, 679);
+ avl = remove_int(avl, 615);
+ avl = remove_int(avl, 104);
+ avl = gpr_avl_add(avl, box(414), box(1713));
+ avl = gpr_avl_add(avl, box(212), box(1714));
+ avl = gpr_avl_add(avl, box(266), box(1715));
+ avl = gpr_avl_add(avl, box(238), box(1716));
+ avl = remove_int(avl, 153);
+ avl = gpr_avl_add(avl, box(585), box(1718));
+ avl = remove_int(avl, 121);
+ avl = gpr_avl_add(avl, box(534), box(1720));
+ avl = remove_int(avl, 579);
+ avl = gpr_avl_add(avl, box(127), box(1722));
+ avl = gpr_avl_add(avl, box(399), box(1723));
+ avl = remove_int(avl, 417);
+ avl = gpr_avl_add(avl, box(978), box(1725));
+ avl = gpr_avl_add(avl, box(768), box(1726));
+ avl = remove_int(avl, 985);
+ avl = gpr_avl_add(avl, box(536), box(1728));
+ avl = gpr_avl_add(avl, box(449), box(1729));
+ avl = gpr_avl_add(avl, box(586), box(1730));
+ avl = remove_int(avl, 998);
+ avl = remove_int(avl, 394);
+ avl = remove_int(avl, 141);
+ avl = gpr_avl_add(avl, box(889), box(1734));
+ avl = gpr_avl_add(avl, box(871), box(1735));
+ avl = gpr_avl_add(avl, box(76), box(1736));
+ avl = gpr_avl_add(avl, box(549), box(1737));
+ avl = gpr_avl_add(avl, box(757), box(1738));
+ avl = remove_int(avl, 908);
+ avl = gpr_avl_add(avl, box(789), box(1740));
+ avl = remove_int(avl, 224);
+ avl = gpr_avl_add(avl, box(407), box(1742));
+ avl = gpr_avl_add(avl, box(381), box(1743));
+ avl = gpr_avl_add(avl, box(561), box(1744));
+ avl = gpr_avl_add(avl, box(667), box(1745));
+ avl = gpr_avl_add(avl, box(522), box(1746));
+ avl = gpr_avl_add(avl, box(948), box(1747));
+ avl = remove_int(avl, 770);
+ avl = gpr_avl_add(avl, box(872), box(1749));
+ avl = gpr_avl_add(avl, box(327), box(1750));
+ avl = remove_int(avl, 10);
+ avl = gpr_avl_add(avl, box(122), box(1752));
+ avl = remove_int(avl, 606);
+ avl = gpr_avl_add(avl, box(485), box(1754));
+ avl = remove_int(avl, 6);
+ avl = gpr_avl_add(avl, box(329), box(1756));
+ avl = gpr_avl_add(avl, box(783), box(1757));
+ avl = remove_int(avl, 416);
+ avl = gpr_avl_add(avl, box(656), box(1759));
+ avl = gpr_avl_add(avl, box(971), box(1760));
+ avl = gpr_avl_add(avl, box(77), box(1761));
+ avl = gpr_avl_add(avl, box(942), box(1762));
+ avl = remove_int(avl, 361);
+ avl = gpr_avl_add(avl, box(66), box(1764));
+ avl = gpr_avl_add(avl, box(299), box(1765));
+ avl = gpr_avl_add(avl, box(929), box(1766));
+ avl = gpr_avl_add(avl, box(797), box(1767));
+ avl = remove_int(avl, 869);
+ avl = remove_int(avl, 907);
+ avl = gpr_avl_add(avl, box(870), box(1770));
+ avl = remove_int(avl, 580);
+ avl = remove_int(avl, 120);
+ avl = gpr_avl_add(avl, box(913), box(1773));
+ avl = remove_int(avl, 480);
+ avl = gpr_avl_add(avl, box(489), box(1775));
+ avl = remove_int(avl, 845);
+ avl = gpr_avl_add(avl, box(896), box(1777));
+ avl = remove_int(avl, 567);
+ avl = remove_int(avl, 427);
+ avl = gpr_avl_add(avl, box(443), box(1780));
+ avl = gpr_avl_add(avl, box(3), box(1781));
+ avl = remove_int(avl, 12);
+ avl = gpr_avl_add(avl, box(376), box(1783));
+ avl = gpr_avl_add(avl, box(155), box(1784));
+ avl = gpr_avl_add(avl, box(188), box(1785));
+ avl = gpr_avl_add(avl, box(149), box(1786));
+ avl = gpr_avl_add(avl, box(178), box(1787));
+ avl = remove_int(avl, 84);
+ avl = gpr_avl_add(avl, box(805), box(1789));
+ avl = gpr_avl_add(avl, box(612), box(1790));
+ avl = remove_int(avl, 991);
+ avl = gpr_avl_add(avl, box(837), box(1792));
+ avl = remove_int(avl, 173);
+ avl = remove_int(avl, 72);
+ avl = gpr_avl_add(avl, box(1014), box(1795));
+ avl = remove_int(avl, 303);
+ avl = gpr_avl_add(avl, box(865), box(1797));
+ avl = gpr_avl_add(avl, box(793), box(1798));
+ avl = remove_int(avl, 173);
+ avl = remove_int(avl, 477);
+ avl = gpr_avl_add(avl, box(950), box(1801));
+ avl = gpr_avl_add(avl, box(105), box(1802));
+ avl = gpr_avl_add(avl, box(895), box(1803));
+ avl = gpr_avl_add(avl, box(171), box(1804));
+ avl = gpr_avl_add(avl, box(753), box(1805));
+ avl = gpr_avl_add(avl, box(946), box(1806));
+ avl = remove_int(avl, 194);
+ avl = remove_int(avl, 559);
+ avl = remove_int(avl, 116);
+ avl = gpr_avl_add(avl, box(968), box(1810));
+ avl = remove_int(avl, 124);
+ avl = remove_int(avl, 99);
+ avl = gpr_avl_add(avl, box(563), box(1813));
+ avl = remove_int(avl, 182);
+ avl = gpr_avl_add(avl, box(816), box(1815));
+ avl = remove_int(avl, 73);
+ avl = remove_int(avl, 261);
+ avl = gpr_avl_add(avl, box(847), box(1818));
+ avl = gpr_avl_add(avl, box(368), box(1819));
+ avl = gpr_avl_add(avl, box(808), box(1820));
+ avl = gpr_avl_add(avl, box(779), box(1821));
+ avl = remove_int(avl, 818);
+ avl = gpr_avl_add(avl, box(466), box(1823));
+ avl = remove_int(avl, 316);
+ avl = gpr_avl_add(avl, box(986), box(1825));
+ avl = gpr_avl_add(avl, box(688), box(1826));
+ avl = gpr_avl_add(avl, box(509), box(1827));
+ avl = gpr_avl_add(avl, box(51), box(1828));
+ avl = remove_int(avl, 655);
+ avl = remove_int(avl, 785);
+ avl = remove_int(avl, 893);
+ avl = gpr_avl_add(avl, box(167), box(1832));
+ avl = remove_int(avl, 13);
+ avl = remove_int(avl, 263);
+ avl = gpr_avl_add(avl, box(1009), box(1835));
+ avl = remove_int(avl, 480);
+ avl = remove_int(avl, 778);
+ avl = remove_int(avl, 713);
+ avl = remove_int(avl, 628);
+ avl = gpr_avl_add(avl, box(803), box(1840));
+ avl = remove_int(avl, 267);
+ avl = gpr_avl_add(avl, box(676), box(1842));
+ avl = gpr_avl_add(avl, box(231), box(1843));
+ avl = gpr_avl_add(avl, box(824), box(1844));
+ avl = remove_int(avl, 961);
+ avl = gpr_avl_add(avl, box(311), box(1846));
+ avl = gpr_avl_add(avl, box(420), box(1847));
+ avl = gpr_avl_add(avl, box(960), box(1848));
+ avl = gpr_avl_add(avl, box(468), box(1849));
+ avl = gpr_avl_add(avl, box(815), box(1850));
+ avl = remove_int(avl, 247);
+ avl = remove_int(avl, 194);
+ avl = gpr_avl_add(avl, box(546), box(1853));
+ avl = remove_int(avl, 222);
+ avl = remove_int(avl, 914);
+ avl = remove_int(avl, 741);
+ avl = gpr_avl_add(avl, box(470), box(1857));
+ avl = gpr_avl_add(avl, box(933), box(1858));
+ avl = gpr_avl_add(avl, box(97), box(1859));
+ avl = remove_int(avl, 564);
+ avl = remove_int(avl, 295);
+ avl = gpr_avl_add(avl, box(864), box(1862));
+ avl = remove_int(avl, 329);
+ avl = gpr_avl_add(avl, box(124), box(1864));
+ avl = gpr_avl_add(avl, box(1000), box(1865));
+ avl = gpr_avl_add(avl, box(228), box(1866));
+ avl = gpr_avl_add(avl, box(187), box(1867));
+ avl = remove_int(avl, 224);
+ avl = remove_int(avl, 306);
+ avl = remove_int(avl, 884);
+ avl = gpr_avl_add(avl, box(449), box(1871));
+ avl = gpr_avl_add(avl, box(353), box(1872));
+ avl = gpr_avl_add(avl, box(994), box(1873));
+ avl = gpr_avl_add(avl, box(596), box(1874));
+ avl = gpr_avl_add(avl, box(996), box(1875));
+ avl = gpr_avl_add(avl, box(101), box(1876));
+ avl = gpr_avl_add(avl, box(1012), box(1877));
+ avl = gpr_avl_add(avl, box(982), box(1878));
+ avl = gpr_avl_add(avl, box(742), box(1879));
+ avl = remove_int(avl, 92);
+ avl = remove_int(avl, 1022);
+ avl = gpr_avl_add(avl, box(941), box(1882));
+ avl = remove_int(avl, 742);
+ avl = remove_int(avl, 919);
+ avl = gpr_avl_add(avl, box(588), box(1885));
+ avl = remove_int(avl, 221);
+ avl = gpr_avl_add(avl, box(356), box(1887));
+ avl = gpr_avl_add(avl, box(932), box(1888));
+ avl = remove_int(avl, 837);
+ avl = gpr_avl_add(avl, box(394), box(1890));
+ avl = gpr_avl_add(avl, box(642), box(1891));
+ avl = gpr_avl_add(avl, box(52), box(1892));
+ avl = gpr_avl_add(avl, box(437), box(1893));
+ avl = gpr_avl_add(avl, box(948), box(1894));
+ avl = gpr_avl_add(avl, box(93), box(1895));
+ avl = remove_int(avl, 873);
+ avl = remove_int(avl, 336);
+ avl = remove_int(avl, 277);
+ avl = remove_int(avl, 932);
+ avl = gpr_avl_add(avl, box(80), box(1900));
+ avl = gpr_avl_add(avl, box(952), box(1901));
+ avl = gpr_avl_add(avl, box(510), box(1902));
+ avl = remove_int(avl, 876);
+ avl = remove_int(avl, 612);
+ avl = gpr_avl_add(avl, box(923), box(1905));
+ avl = gpr_avl_add(avl, box(475), box(1906));
+ avl = remove_int(avl, 478);
+ avl = remove_int(avl, 148);
+ avl = gpr_avl_add(avl, box(538), box(1909));
+ avl = remove_int(avl, 47);
+ avl = gpr_avl_add(avl, box(89), box(1911));
+ avl = remove_int(avl, 723);
+ avl = gpr_avl_add(avl, box(687), box(1913));
+ avl = gpr_avl_add(avl, box(480), box(1914));
+ avl = gpr_avl_add(avl, box(149), box(1915));
+ avl = remove_int(avl, 68);
+ avl = remove_int(avl, 862);
+ avl = remove_int(avl, 363);
+ avl = gpr_avl_add(avl, box(996), box(1919));
+ avl = remove_int(avl, 380);
+ avl = gpr_avl_add(avl, box(957), box(1921));
+ avl = remove_int(avl, 413);
+ avl = gpr_avl_add(avl, box(360), box(1923));
+ avl = gpr_avl_add(avl, box(304), box(1924));
+ avl = gpr_avl_add(avl, box(634), box(1925));
+ avl = gpr_avl_add(avl, box(506), box(1926));
+ avl = remove_int(avl, 248);
+ avl = gpr_avl_add(avl, box(124), box(1928));
+ avl = gpr_avl_add(avl, box(181), box(1929));
+ avl = remove_int(avl, 507);
+ avl = gpr_avl_add(avl, box(141), box(1931));
+ avl = remove_int(avl, 409);
+ avl = remove_int(avl, 129);
+ avl = remove_int(avl, 694);
+ avl = remove_int(avl, 723);
+ avl = gpr_avl_add(avl, box(998), box(1936));
+ avl = gpr_avl_add(avl, box(906), box(1937));
+ avl = gpr_avl_add(avl, box(44), box(1938));
+ avl = remove_int(avl, 949);
+ avl = remove_int(avl, 117);
+ avl = gpr_avl_add(avl, box(700), box(1941));
+ avl = gpr_avl_add(avl, box(258), box(1942));
+ avl = remove_int(avl, 828);
+ avl = gpr_avl_add(avl, box(860), box(1944));
+ avl = gpr_avl_add(avl, box(987), box(1945));
+ avl = gpr_avl_add(avl, box(316), box(1946));
+ avl = gpr_avl_add(avl, box(919), box(1947));
+ avl = remove_int(avl, 84);
+ avl = gpr_avl_add(avl, box(473), box(1949));
+ avl = remove_int(avl, 127);
+ avl = remove_int(avl, 829);
+ avl = remove_int(avl, 829);
+ avl = gpr_avl_add(avl, box(488), box(1953));
+ avl = gpr_avl_add(avl, box(954), box(1954));
+ avl = remove_int(avl, 198);
+ avl = remove_int(avl, 972);
+ avl = remove_int(avl, 670);
+ avl = gpr_avl_add(avl, box(822), box(1958));
+ avl = remove_int(avl, 589);
+ avl = remove_int(avl, 459);
+ avl = gpr_avl_add(avl, box(1003), box(1961));
+ avl = gpr_avl_add(avl, box(657), box(1962));
+ avl = gpr_avl_add(avl, box(477), box(1963));
+ avl = gpr_avl_add(avl, box(923), box(1964));
+ avl = remove_int(avl, 496);
+ avl = remove_int(avl, 99);
+ avl = gpr_avl_add(avl, box(127), box(1967));
+ avl = gpr_avl_add(avl, box(1013), box(1968));
+ avl = gpr_avl_add(avl, box(778), box(1969));
+ avl = remove_int(avl, 5);
+ avl = remove_int(avl, 990);
+ avl = remove_int(avl, 850);
+ avl = remove_int(avl, 160);
+ avl = remove_int(avl, 86);
+ avl = gpr_avl_add(avl, box(283), box(1975));
+ avl = remove_int(avl, 278);
+ avl = remove_int(avl, 297);
+ avl = remove_int(avl, 137);
+ avl = remove_int(avl, 653);
+ avl = gpr_avl_add(avl, box(702), box(1980));
+ avl = remove_int(avl, 63);
+ avl = remove_int(avl, 427);
+ avl = remove_int(avl, 706);
+ avl = remove_int(avl, 806);
+ avl = gpr_avl_add(avl, box(335), box(1985));
+ avl = gpr_avl_add(avl, box(412), box(1986));
+ avl = remove_int(avl, 766);
+ avl = remove_int(avl, 937);
+ avl = remove_int(avl, 886);
+ avl = remove_int(avl, 652);
+ avl = gpr_avl_add(avl, box(545), box(1991));
+ avl = gpr_avl_add(avl, box(408), box(1992));
+ avl = gpr_avl_add(avl, box(841), box(1993));
+ avl = remove_int(avl, 593);
+ avl = gpr_avl_add(avl, box(582), box(1995));
+ avl = gpr_avl_add(avl, box(597), box(1996));
+ avl = remove_int(avl, 49);
+ avl = remove_int(avl, 835);
+ avl = gpr_avl_add(avl, box(417), box(1999));
+ avl = gpr_avl_add(avl, box(191), box(2000));
+ avl = remove_int(avl, 406);
+ avl = gpr_avl_add(avl, box(30), box(2002));
+ avl = remove_int(avl, 841);
+ avl = remove_int(avl, 50);
+ avl = gpr_avl_add(avl, box(967), box(2005));
+ avl = gpr_avl_add(avl, box(849), box(2006));
+ avl = remove_int(avl, 608);
+ avl = gpr_avl_add(avl, box(306), box(2008));
+ avl = remove_int(avl, 779);
+ avl = gpr_avl_add(avl, box(897), box(2010));
+ avl = gpr_avl_add(avl, box(147), box(2011));
+ avl = remove_int(avl, 982);
+ avl = gpr_avl_add(avl, box(470), box(2013));
+ avl = remove_int(avl, 951);
+ avl = gpr_avl_add(avl, box(388), box(2015));
+ avl = remove_int(avl, 616);
+ avl = remove_int(avl, 721);
+ avl = remove_int(avl, 942);
+ avl = remove_int(avl, 589);
+ avl = gpr_avl_add(avl, box(218), box(2020));
+ avl = remove_int(avl, 671);
+ avl = gpr_avl_add(avl, box(1020), box(2022));
+ avl = remove_int(avl, 277);
+ avl = gpr_avl_add(avl, box(681), box(2024));
+ avl = gpr_avl_add(avl, box(179), box(2025));
+ avl = gpr_avl_add(avl, box(370), box(2026));
+ avl = gpr_avl_add(avl, box(0), box(2027));
+ avl = remove_int(avl, 523);
+ avl = gpr_avl_add(avl, box(99), box(2029));
+ avl = gpr_avl_add(avl, box(334), box(2030));
+ avl = gpr_avl_add(avl, box(569), box(2031));
+ avl = gpr_avl_add(avl, box(257), box(2032));
+ avl = remove_int(avl, 572);
+ avl = gpr_avl_add(avl, box(805), box(2034));
+ avl = gpr_avl_add(avl, box(143), box(2035));
+ avl = gpr_avl_add(avl, box(670), box(2036));
+ avl = remove_int(avl, 42);
+ avl = gpr_avl_add(avl, box(46), box(2038));
+ avl = remove_int(avl, 970);
+ avl = gpr_avl_add(avl, box(353), box(2040));
+ avl = remove_int(avl, 258);
+ avl = gpr_avl_add(avl, box(451), box(2042));
+ avl = gpr_avl_add(avl, box(28), box(2043));
+ avl = gpr_avl_add(avl, box(729), box(2044));
+ avl = gpr_avl_add(avl, box(401), box(2045));
+ avl = gpr_avl_add(avl, box(614), box(2046));
+ avl = remove_int(avl, 990);
+ avl = remove_int(avl, 212);
+ avl = remove_int(avl, 22);
+ avl = remove_int(avl, 677);
+ avl = gpr_avl_add(avl, box(1016), box(2051));
+ avl = gpr_avl_add(avl, box(980), box(2052));
+ avl = gpr_avl_add(avl, box(990), box(2053));
+ avl = gpr_avl_add(avl, box(355), box(2054));
+ avl = remove_int(avl, 730);
+ avl = remove_int(avl, 37);
+ avl = gpr_avl_add(avl, box(407), box(2057));
+ avl = gpr_avl_add(avl, box(222), box(2058));
+ avl = gpr_avl_add(avl, box(439), box(2059));
+ avl = gpr_avl_add(avl, box(563), box(2060));
+ avl = remove_int(avl, 992);
+ avl = remove_int(avl, 786);
+ avl = gpr_avl_add(avl, box(1), box(2063));
+ avl = gpr_avl_add(avl, box(473), box(2064));
+ avl = gpr_avl_add(avl, box(992), box(2065));
+ avl = remove_int(avl, 190);
+ avl = remove_int(avl, 450);
+ avl = remove_int(avl, 1020);
+ avl = remove_int(avl, 149);
+ avl = gpr_avl_add(avl, box(329), box(2070));
+ avl = gpr_avl_add(avl, box(35), box(2071));
+ avl = remove_int(avl, 843);
+ avl = gpr_avl_add(avl, box(855), box(2073));
+ avl = remove_int(avl, 878);
+ avl = gpr_avl_add(avl, box(993), box(2075));
+ avl = gpr_avl_add(avl, box(87), box(2076));
+ avl = gpr_avl_add(avl, box(572), box(2077));
+ avl = remove_int(avl, 896);
+ avl = gpr_avl_add(avl, box(849), box(2079));
+ avl = remove_int(avl, 597);
+ avl = gpr_avl_add(avl, box(472), box(2081));
+ avl = remove_int(avl, 778);
+ avl = remove_int(avl, 934);
+ avl = remove_int(avl, 314);
+ avl = gpr_avl_add(avl, box(101), box(2085));
+ avl = remove_int(avl, 938);
+ avl = remove_int(avl, 1010);
+ avl = gpr_avl_add(avl, box(579), box(2088));
+ avl = remove_int(avl, 798);
+ avl = remove_int(avl, 88);
+ avl = gpr_avl_add(avl, box(851), box(2091));
+ avl = remove_int(avl, 705);
+ avl = gpr_avl_add(avl, box(26), box(2093));
+ avl = remove_int(avl, 973);
+ avl = gpr_avl_add(avl, box(923), box(2095));
+ avl = remove_int(avl, 668);
+ avl = gpr_avl_add(avl, box(310), box(2097));
+ avl = gpr_avl_add(avl, box(269), box(2098));
+ avl = remove_int(avl, 173);
+ avl = gpr_avl_add(avl, box(279), box(2100));
+ avl = remove_int(avl, 203);
+ avl = gpr_avl_add(avl, box(411), box(2102));
+ avl = remove_int(avl, 950);
+ avl = gpr_avl_add(avl, box(6), box(2104));
+ avl = remove_int(avl, 400);
+ avl = remove_int(avl, 468);
+ avl = remove_int(avl, 271);
+ avl = gpr_avl_add(avl, box(627), box(2108));
+ avl = remove_int(avl, 727);
+ avl = remove_int(avl, 148);
+ avl = remove_int(avl, 98);
+ avl = remove_int(avl, 997);
+ avl = remove_int(avl, 215);
+ avl = remove_int(avl, 628);
+ avl = remove_int(avl, 826);
+ avl = remove_int(avl, 664);
+ avl = gpr_avl_add(avl, box(76), box(2117));
+ avl = remove_int(avl, 194);
+ avl = remove_int(avl, 18);
+ avl = gpr_avl_add(avl, box(727), box(2120));
+ avl = remove_int(avl, 295);
+ avl = gpr_avl_add(avl, box(645), box(2122));
+ avl = remove_int(avl, 321);
+ avl = remove_int(avl, 863);
+ avl = gpr_avl_add(avl, box(824), box(2125));
+ avl = gpr_avl_add(avl, box(651), box(2126));
+ avl = gpr_avl_add(avl, box(804), box(2127));
+ avl = remove_int(avl, 307);
+ avl = gpr_avl_add(avl, box(867), box(2129));
+ avl = remove_int(avl, 384);
+ avl = gpr_avl_add(avl, box(819), box(2131));
+ avl = remove_int(avl, 674);
+ avl = gpr_avl_add(avl, box(76), box(2133));
+ avl = remove_int(avl, 898);
+ avl = gpr_avl_add(avl, box(45), box(2135));
+ avl = gpr_avl_add(avl, box(512), box(2136));
+ avl = remove_int(avl, 773);
+ avl = remove_int(avl, 907);
+ avl = remove_int(avl, 382);
+ avl = remove_int(avl, 95);
+ avl = remove_int(avl, 734);
+ avl = remove_int(avl, 81);
+ avl = gpr_avl_add(avl, box(348), box(2143));
+ avl = remove_int(avl, 509);
+ avl = remove_int(avl, 301);
+ avl = gpr_avl_add(avl, box(861), box(2146));
+ avl = gpr_avl_add(avl, box(918), box(2147));
+ avl = remove_int(avl, 992);
+ avl = gpr_avl_add(avl, box(356), box(2149));
+ avl = remove_int(avl, 64);
+ avl = remove_int(avl, 444);
+ avl = remove_int(avl, 741);
+ avl = gpr_avl_add(avl, box(710), box(2153));
+ avl = gpr_avl_add(avl, box(264), box(2154));
+ avl = remove_int(avl, 347);
+ avl = remove_int(avl, 250);
+ avl = gpr_avl_add(avl, box(82), box(2157));
+ avl = gpr_avl_add(avl, box(571), box(2158));
+ avl = remove_int(avl, 721);
+ avl = remove_int(avl, 622);
+ avl = gpr_avl_add(avl, box(950), box(2161));
+ avl = gpr_avl_add(avl, box(94), box(2162));
+ avl = remove_int(avl, 970);
+ avl = gpr_avl_add(avl, box(815), box(2164));
+ avl = remove_int(avl, 930);
+ avl = remove_int(avl, 703);
+ avl = gpr_avl_add(avl, box(432), box(2167));
+ avl = remove_int(avl, 544);
+ avl = gpr_avl_add(avl, box(21), box(2169));
+ avl = gpr_avl_add(avl, box(186), box(2170));
+ avl = remove_int(avl, 143);
+ avl = gpr_avl_add(avl, box(425), box(2172));
+ avl = remove_int(avl, 769);
+ avl = gpr_avl_add(avl, box(656), box(2174));
+ avl = remove_int(avl, 29);
+ avl = gpr_avl_add(avl, box(464), box(2176));
+ avl = remove_int(avl, 713);
+ avl = gpr_avl_add(avl, box(800), box(2178));
+ avl = remove_int(avl, 621);
+ avl = gpr_avl_add(avl, box(962), box(2180));
+ avl = remove_int(avl, 448);
+ avl = gpr_avl_add(avl, box(878), box(2182));
+ avl = remove_int(avl, 39);
+ avl = remove_int(avl, 999);
+ avl = gpr_avl_add(avl, box(182), box(2185));
+ avl = gpr_avl_add(avl, box(429), box(2186));
+ avl = gpr_avl_add(avl, box(598), box(2187));
+ avl = remove_int(avl, 551);
+ avl = gpr_avl_add(avl, box(827), box(2189));
+ avl = gpr_avl_add(avl, box(809), box(2190));
+ avl = remove_int(avl, 438);
+ avl = remove_int(avl, 811);
+ avl = gpr_avl_add(avl, box(808), box(2193));
+ avl = gpr_avl_add(avl, box(788), box(2194));
+ avl = remove_int(avl, 156);
+ avl = gpr_avl_add(avl, box(933), box(2196));
+ avl = gpr_avl_add(avl, box(344), box(2197));
+ avl = remove_int(avl, 460);
+ avl = gpr_avl_add(avl, box(161), box(2199));
+ avl = gpr_avl_add(avl, box(444), box(2200));
+ avl = remove_int(avl, 597);
+ avl = remove_int(avl, 668);
+ avl = gpr_avl_add(avl, box(703), box(2203));
+ avl = remove_int(avl, 515);
+ avl = gpr_avl_add(avl, box(380), box(2205));
+ avl = gpr_avl_add(avl, box(338), box(2206));
+ avl = remove_int(avl, 550);
+ avl = remove_int(avl, 946);
+ avl = remove_int(avl, 714);
+ avl = remove_int(avl, 739);
+ avl = gpr_avl_add(avl, box(413), box(2211));
+ avl = remove_int(avl, 450);
+ avl = gpr_avl_add(avl, box(411), box(2213));
+ avl = gpr_avl_add(avl, box(117), box(2214));
+ avl = gpr_avl_add(avl, box(322), box(2215));
+ avl = gpr_avl_add(avl, box(915), box(2216));
+ avl = gpr_avl_add(avl, box(410), box(2217));
+ avl = gpr_avl_add(avl, box(66), box(2218));
+ avl = remove_int(avl, 756);
+ avl = remove_int(avl, 596);
+ avl = gpr_avl_add(avl, box(882), box(2221));
+ avl = gpr_avl_add(avl, box(930), box(2222));
+ avl = gpr_avl_add(avl, box(36), box(2223));
+ avl = remove_int(avl, 742);
+ avl = gpr_avl_add(avl, box(539), box(2225));
+ avl = gpr_avl_add(avl, box(596), box(2226));
+ avl = remove_int(avl, 82);
+ avl = remove_int(avl, 686);
+ avl = remove_int(avl, 933);
+ avl = remove_int(avl, 42);
+ avl = remove_int(avl, 340);
+ avl = gpr_avl_add(avl, box(126), box(2232));
+ avl = gpr_avl_add(avl, box(493), box(2233));
+ avl = gpr_avl_add(avl, box(839), box(2234));
+ avl = remove_int(avl, 774);
+ avl = gpr_avl_add(avl, box(337), box(2236));
+ avl = remove_int(avl, 322);
+ avl = gpr_avl_add(avl, box(16), box(2238));
+ avl = remove_int(avl, 73);
+ avl = remove_int(avl, 85);
+ avl = remove_int(avl, 191);
+ avl = remove_int(avl, 541);
+ avl = gpr_avl_add(avl, box(704), box(2243));
+ avl = remove_int(avl, 767);
+ avl = remove_int(avl, 1006);
+ avl = remove_int(avl, 844);
+ avl = remove_int(avl, 742);
+ avl = gpr_avl_add(avl, box(48), box(2248));
+ avl = gpr_avl_add(avl, box(138), box(2249));
+ avl = gpr_avl_add(avl, box(437), box(2250));
+ avl = gpr_avl_add(avl, box(275), box(2251));
+ avl = remove_int(avl, 520);
+ avl = gpr_avl_add(avl, box(1019), box(2253));
+ avl = remove_int(avl, 955);
+ avl = gpr_avl_add(avl, box(270), box(2255));
+ avl = remove_int(avl, 680);
+ avl = remove_int(avl, 698);
+ avl = gpr_avl_add(avl, box(735), box(2258));
+ avl = gpr_avl_add(avl, box(400), box(2259));
+ avl = remove_int(avl, 991);
+ avl = gpr_avl_add(avl, box(263), box(2261));
+ avl = remove_int(avl, 704);
+ avl = gpr_avl_add(avl, box(757), box(2263));
+ avl = remove_int(avl, 194);
+ avl = remove_int(avl, 616);
+ avl = remove_int(avl, 784);
+ avl = gpr_avl_add(avl, box(382), box(2267));
+ avl = gpr_avl_add(avl, box(464), box(2268));
+ avl = gpr_avl_add(avl, box(817), box(2269));
+ avl = remove_int(avl, 445);
+ avl = gpr_avl_add(avl, box(412), box(2271));
+ avl = remove_int(avl, 525);
+ avl = gpr_avl_add(avl, box(299), box(2273));
+ avl = gpr_avl_add(avl, box(464), box(2274));
+ avl = gpr_avl_add(avl, box(715), box(2275));
+ avl = remove_int(avl, 58);
+ avl = remove_int(avl, 218);
+ avl = gpr_avl_add(avl, box(961), box(2278));
+ avl = gpr_avl_add(avl, box(491), box(2279));
+ avl = remove_int(avl, 846);
+ avl = gpr_avl_add(avl, box(762), box(2281));
+ avl = remove_int(avl, 974);
+ avl = remove_int(avl, 887);
+ avl = gpr_avl_add(avl, box(498), box(2284));
+ avl = remove_int(avl, 810);
+ avl = remove_int(avl, 743);
+ avl = remove_int(avl, 22);
+ avl = remove_int(avl, 284);
+ avl = gpr_avl_add(avl, box(482), box(2289));
+ avl = gpr_avl_add(avl, box(1021), box(2290));
+ avl = remove_int(avl, 155);
+ avl = remove_int(avl, 128);
+ avl = gpr_avl_add(avl, box(819), box(2293));
+ avl = gpr_avl_add(avl, box(324), box(2294));
+ avl = remove_int(avl, 196);
+ avl = remove_int(avl, 370);
+ avl = remove_int(avl, 753);
+ avl = remove_int(avl, 56);
+ avl = remove_int(avl, 735);
+ avl = gpr_avl_add(avl, box(272), box(2300));
+ avl = gpr_avl_add(avl, box(474), box(2301));
+ avl = gpr_avl_add(avl, box(719), box(2302));
+ avl = gpr_avl_add(avl, box(236), box(2303));
+ avl = remove_int(avl, 818);
+ avl = gpr_avl_add(avl, box(727), box(2305));
+ avl = remove_int(avl, 892);
+ avl = remove_int(avl, 871);
+ avl = remove_int(avl, 231);
+ avl = gpr_avl_add(avl, box(62), box(2309));
+ avl = gpr_avl_add(avl, box(953), box(2310));
+ avl = remove_int(avl, 701);
+ avl = gpr_avl_add(avl, box(193), box(2312));
+ avl = remove_int(avl, 619);
+ avl = remove_int(avl, 22);
+ avl = remove_int(avl, 804);
+ avl = remove_int(avl, 851);
+ avl = gpr_avl_add(avl, box(286), box(2317));
+ avl = gpr_avl_add(avl, box(751), box(2318));
+ avl = remove_int(avl, 525);
+ avl = gpr_avl_add(avl, box(217), box(2320));
+ avl = remove_int(avl, 336);
+ avl = gpr_avl_add(avl, box(86), box(2322));
+ avl = gpr_avl_add(avl, box(81), box(2323));
+ avl = gpr_avl_add(avl, box(850), box(2324));
+ avl = remove_int(avl, 872);
+ avl = gpr_avl_add(avl, box(402), box(2326));
+ avl = gpr_avl_add(avl, box(54), box(2327));
+ avl = gpr_avl_add(avl, box(980), box(2328));
+ avl = gpr_avl_add(avl, box(845), box(2329));
+ avl = remove_int(avl, 1004);
+ avl = remove_int(avl, 273);
+ avl = remove_int(avl, 879);
+ avl = gpr_avl_add(avl, box(354), box(2333));
+ avl = gpr_avl_add(avl, box(58), box(2334));
+ avl = gpr_avl_add(avl, box(127), box(2335));
+ avl = remove_int(avl, 84);
+ avl = gpr_avl_add(avl, box(360), box(2337));
+ avl = remove_int(avl, 648);
+ avl = remove_int(avl, 488);
+ avl = remove_int(avl, 585);
+ avl = remove_int(avl, 230);
+ avl = gpr_avl_add(avl, box(887), box(2342));
+ avl = remove_int(avl, 558);
+ avl = remove_int(avl, 958);
+ avl = gpr_avl_add(avl, box(822), box(2345));
+ avl = remove_int(avl, 1004);
+ avl = remove_int(avl, 747);
+ avl = gpr_avl_add(avl, box(631), box(2348));
+ avl = gpr_avl_add(avl, box(442), box(2349));
+ avl = remove_int(avl, 957);
+ avl = remove_int(avl, 964);
+ avl = gpr_avl_add(avl, box(10), box(2352));
+ avl = remove_int(avl, 189);
+ avl = gpr_avl_add(avl, box(742), box(2354));
+ avl = remove_int(avl, 108);
+ avl = gpr_avl_add(avl, box(1014), box(2356));
+ avl = remove_int(avl, 266);
+ avl = remove_int(avl, 623);
+ avl = remove_int(avl, 697);
+ avl = gpr_avl_add(avl, box(180), box(2360));
+ avl = remove_int(avl, 472);
+ avl = gpr_avl_add(avl, box(567), box(2362));
+ avl = remove_int(avl, 1020);
+ avl = remove_int(avl, 273);
+ avl = gpr_avl_add(avl, box(864), box(2365));
+ avl = gpr_avl_add(avl, box(1009), box(2366));
+ avl = remove_int(avl, 224);
+ avl = remove_int(avl, 81);
+ avl = gpr_avl_add(avl, box(653), box(2369));
+ avl = remove_int(avl, 67);
+ avl = remove_int(avl, 102);
+ avl = remove_int(avl, 76);
+ avl = remove_int(avl, 935);
+ avl = remove_int(avl, 169);
+ avl = remove_int(avl, 232);
+ avl = remove_int(avl, 79);
+ avl = gpr_avl_add(avl, box(509), box(2377));
+ avl = remove_int(avl, 900);
+ avl = remove_int(avl, 822);
+ avl = remove_int(avl, 945);
+ avl = remove_int(avl, 356);
+ avl = gpr_avl_add(avl, box(443), box(2382));
+ avl = gpr_avl_add(avl, box(925), box(2383));
+ avl = remove_int(avl, 994);
+ avl = remove_int(avl, 324);
+ avl = gpr_avl_add(avl, box(291), box(2386));
+ avl = remove_int(avl, 94);
+ avl = remove_int(avl, 795);
+ avl = remove_int(avl, 42);
+ avl = gpr_avl_add(avl, box(613), box(2390));
+ avl = remove_int(avl, 289);
+ avl = gpr_avl_add(avl, box(980), box(2392));
+ avl = remove_int(avl, 316);
+ avl = gpr_avl_add(avl, box(281), box(2394));
+ avl = gpr_avl_add(avl, box(1006), box(2395));
+ avl = remove_int(avl, 776);
+ avl = gpr_avl_add(avl, box(108), box(2397));
+ avl = gpr_avl_add(avl, box(918), box(2398));
+ avl = remove_int(avl, 721);
+ avl = remove_int(avl, 563);
+ avl = gpr_avl_add(avl, box(925), box(2401));
+ avl = remove_int(avl, 448);
+ avl = remove_int(avl, 198);
+ avl = remove_int(avl, 1);
+ avl = gpr_avl_add(avl, box(160), box(2405));
+ avl = remove_int(avl, 515);
+ avl = gpr_avl_add(avl, box(284), box(2407));
+ avl = gpr_avl_add(avl, box(225), box(2408));
+ avl = remove_int(avl, 304);
+ avl = gpr_avl_add(avl, box(714), box(2410));
+ avl = gpr_avl_add(avl, box(708), box(2411));
+ avl = gpr_avl_add(avl, box(624), box(2412));
+ avl = remove_int(avl, 662);
+ avl = remove_int(avl, 825);
+ avl = remove_int(avl, 383);
+ avl = remove_int(avl, 381);
+ avl = gpr_avl_add(avl, box(194), box(2417));
+ avl = remove_int(avl, 280);
+ avl = remove_int(avl, 25);
+ avl = remove_int(avl, 633);
+ avl = gpr_avl_add(avl, box(897), box(2421));
+ avl = remove_int(avl, 636);
+ avl = remove_int(avl, 596);
+ avl = remove_int(avl, 757);
+ avl = remove_int(avl, 343);
+ avl = remove_int(avl, 162);
+ avl = remove_int(avl, 913);
+ avl = remove_int(avl, 843);
+ avl = remove_int(avl, 280);
+ avl = remove_int(avl, 911);
+ avl = gpr_avl_add(avl, box(1008), box(2431));
+ avl = remove_int(avl, 948);
+ avl = remove_int(avl, 74);
+ avl = remove_int(avl, 571);
+ avl = gpr_avl_add(avl, box(486), box(2435));
+ avl = gpr_avl_add(avl, box(285), box(2436));
+ avl = remove_int(avl, 304);
+ avl = remove_int(avl, 516);
+ avl = gpr_avl_add(avl, box(758), box(2439));
+ avl = gpr_avl_add(avl, box(776), box(2440));
+ avl = remove_int(avl, 696);
+ avl = gpr_avl_add(avl, box(104), box(2442));
+ avl = gpr_avl_add(avl, box(700), box(2443));
+ avl = gpr_avl_add(avl, box(114), box(2444));
+ avl = gpr_avl_add(avl, box(567), box(2445));
+ avl = remove_int(avl, 620);
+ avl = gpr_avl_add(avl, box(270), box(2447));
+ avl = remove_int(avl, 730);
+ avl = gpr_avl_add(avl, box(749), box(2449));
+ avl = gpr_avl_add(avl, box(443), box(2450));
+ avl = remove_int(avl, 457);
+ avl = gpr_avl_add(avl, box(571), box(2452));
+ avl = gpr_avl_add(avl, box(626), box(2453));
+ avl = remove_int(avl, 638);
+ avl = remove_int(avl, 313);
+
+ gpr_avl_unref(avl);
+}
+
+static void test_stress(void) {
+ int added[1024];
+ int i, j;
+ int deletions = 0;
+ gpr_avl avl;
+
+ gpr_log(GPR_DEBUG, "test_stress");
+
+ srand((unsigned)time(NULL));
+ avl = gpr_avl_create(&int_int_vtable);
+
+ memset(added, 0, sizeof(added));
+
+ for (i = 1; deletions < 1000; i++) {
+ int idx = rand() % (int)GPR_ARRAY_SIZE(added);
+ GPR_ASSERT(i);
+ if (rand() < RAND_MAX / 2) {
+ added[idx] = i;
+ fprintf(stderr, "avl = gpr_avl_add(avl, box(%d), box(%d)); /* d=%d */\n",
+ idx, i, deletions);
+ avl = gpr_avl_add(avl, box(idx), box(i));
+ } else {
+ deletions += (added[idx] != 0);
+ added[idx] = 0;
+ fprintf(stderr, "avl = remove_int(avl, %d); /* d=%d */\n", idx,
+ deletions);
+ avl = remove_int(avl, idx);
+ }
+ for (j = 0; j < (int)GPR_ARRAY_SIZE(added); j++) {
+ if (added[j] != 0) {
+ check_get(avl, j, added[j]);
+ } else {
+ check_negget(avl, j);
+ }
+ }
+ }
+
+ gpr_avl_unref(avl);
+}
+
+int main(int argc, char *argv[]) {
+ grpc_test_init(argc, argv);
+
+ test_get();
+ test_ll();
+ test_lr();
+ test_rr();
+ test_rl();
+ test_unbalanced();
+ test_replace();
+ test_remove();
+ test_badcase1();
+ test_badcase2();
+ test_badcase3();
+ test_stress();
+
+ return 0;
+}
diff --git a/test/core/util/reconnect_server.c b/test/core/util/reconnect_server.c
index c064fb32c6..28e521221b 100644
--- a/test/core/util/reconnect_server.c
+++ b/test/core/util/reconnect_server.c
@@ -44,6 +44,7 @@
#include "src/core/iomgr/sockaddr.h"
#include "src/core/iomgr/tcp_server.h"
#include "test/core/util/port.h"
+#include "test/core/util/test_tcp_server.h"
static void pretty_print_backoffs(reconnect_server *server) {
gpr_timespec diff;
@@ -102,49 +103,18 @@ static void on_connect(grpc_exec_ctx *exec_ctx, void *arg, grpc_endpoint *tcp) {
}
void reconnect_server_init(reconnect_server *server) {
- grpc_init();
- server->tcp_server = NULL;
- grpc_pollset_init(&server->pollset);
- server->pollsets[0] = &server->pollset;
+ test_tcp_server_init(&server->tcp_server, on_connect, server);
server->head = NULL;
server->tail = NULL;
server->peer = NULL;
}
void reconnect_server_start(reconnect_server *server, int port) {
- struct sockaddr_in addr;
- grpc_tcp_listener *listener;
- int port_added;
- grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
-
- addr.sin_family = AF_INET;
- addr.sin_port = htons((gpr_uint16)port);
- memset(&addr.sin_addr, 0, sizeof(addr.sin_addr));
-
- server->tcp_server = grpc_tcp_server_create();
- listener =
- grpc_tcp_server_add_port(server->tcp_server, &addr, sizeof(addr));
- port_added = grpc_tcp_listener_get_port(listener);
- GPR_ASSERT(port_added == port);
-
- grpc_tcp_server_start(&exec_ctx, server->tcp_server, server->pollsets, 1,
- on_connect, server);
- gpr_log(GPR_INFO, "reconnect tcp server listening on 0.0.0.0:%d", port);
-
- grpc_exec_ctx_finish(&exec_ctx);
+ test_tcp_server_start(&server->tcp_server, port);
}
void reconnect_server_poll(reconnect_server *server, int seconds) {
- grpc_pollset_worker worker;
- gpr_timespec deadline =
- gpr_time_add(gpr_now(GPR_CLOCK_MONOTONIC),
- gpr_time_from_seconds(seconds, GPR_TIMESPAN));
- grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
- gpr_mu_lock(GRPC_POLLSET_MU(&server->pollset));
- grpc_pollset_work(&exec_ctx, &server->pollset, &worker,
- gpr_now(GPR_CLOCK_MONOTONIC), deadline);
- gpr_mu_unlock(GRPC_POLLSET_MU(&server->pollset));
- grpc_exec_ctx_finish(&exec_ctx);
+ test_tcp_server_poll(&server->tcp_server, seconds);
}
void reconnect_server_clear_timestamps(reconnect_server *server) {
@@ -159,18 +129,7 @@ void reconnect_server_clear_timestamps(reconnect_server *server) {
server->peer = NULL;
}
-static void do_nothing(grpc_exec_ctx *exec_ctx, void *ignored, int success) {}
-
void reconnect_server_destroy(reconnect_server *server) {
- grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
- grpc_closure do_nothing_closure[2];
- grpc_closure_init(&do_nothing_closure[0], do_nothing, NULL);
- grpc_closure_init(&do_nothing_closure[1], do_nothing, NULL);
- grpc_tcp_server_destroy(&exec_ctx, server->tcp_server,
- &do_nothing_closure[0]);
reconnect_server_clear_timestamps(server);
- grpc_pollset_shutdown(&exec_ctx, &server->pollset, &do_nothing_closure[1]);
- grpc_exec_ctx_finish(&exec_ctx);
- grpc_pollset_destroy(&server->pollset);
- grpc_shutdown();
+ test_tcp_server_destroy(&server->tcp_server);
}
diff --git a/test/core/util/reconnect_server.h b/test/core/util/reconnect_server.h
index 8a278e0c7a..e2e6a02461 100644
--- a/test/core/util/reconnect_server.h
+++ b/test/core/util/reconnect_server.h
@@ -36,7 +36,7 @@
#include <grpc/support/sync.h>
#include <grpc/support/time.h>
-#include "src/core/iomgr/tcp_server.h"
+#include "test/core/util/test_tcp_server.h"
#ifdef __cplusplus
extern "C" {
@@ -48,9 +48,7 @@ typedef struct timestamp_list {
} timestamp_list;
typedef struct reconnect_server {
- grpc_tcp_server *tcp_server;
- grpc_pollset pollset;
- grpc_pollset *pollsets[1];
+ test_tcp_server tcp_server;
timestamp_list *head;
timestamp_list *tail;
char *peer;
diff --git a/test/core/util/test_tcp_server.c b/test/core/util/test_tcp_server.c
new file mode 100644
index 0000000000..c700d3637f
--- /dev/null
+++ b/test/core/util/test_tcp_server.c
@@ -0,0 +1,120 @@
+/*
+ *
+ * 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 "test/core/util/test_tcp_server.h"
+
+#include <grpc/grpc.h>
+#include <grpc/support/alloc.h>
+#include <grpc/support/host_port.h>
+#include <grpc/support/log.h>
+#include <grpc/support/sync.h>
+#include <grpc/support/time.h>
+#include <string.h>
+#include "src/core/iomgr/endpoint.h"
+#include "src/core/iomgr/sockaddr.h"
+#include "src/core/iomgr/tcp_server.h"
+#include "test/core/util/port.h"
+
+void test_tcp_server_init(test_tcp_server *server,
+ grpc_tcp_server_cb on_connect, void *user_data) {
+ grpc_init();
+ server->tcp_server = NULL;
+ server->shutdown = 0;
+ grpc_pollset_init(&server->pollset);
+ server->pollsets[0] = &server->pollset;
+ server->on_connect = on_connect;
+ server->cb_data = user_data;
+}
+
+void test_tcp_server_start(test_tcp_server *server, int port) {
+ struct sockaddr_in addr;
+ grpc_tcp_listener *listener;
+ int port_added;
+ grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
+
+ addr.sin_family = AF_INET;
+ addr.sin_port = htons((gpr_uint16)port);
+ memset(&addr.sin_addr, 0, sizeof(addr.sin_addr));
+
+ server->tcp_server = grpc_tcp_server_create();
+ listener = grpc_tcp_server_add_port(server->tcp_server, &addr, sizeof(addr));
+ port_added = grpc_tcp_listener_get_port(listener);
+ GPR_ASSERT(port_added == port);
+
+ grpc_tcp_server_start(&exec_ctx, server->tcp_server, server->pollsets, 1,
+ server->on_connect, server->cb_data);
+ gpr_log(GPR_INFO, "test tcp server listening on 0.0.0.0:%d", port);
+
+ grpc_exec_ctx_finish(&exec_ctx);
+}
+
+void test_tcp_server_poll(test_tcp_server *server, int seconds) {
+ grpc_pollset_worker worker;
+ gpr_timespec deadline =
+ gpr_time_add(gpr_now(GPR_CLOCK_MONOTONIC),
+ gpr_time_from_seconds(seconds, GPR_TIMESPAN));
+ grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
+ gpr_mu_lock(GRPC_POLLSET_MU(&server->pollset));
+ grpc_pollset_work(&exec_ctx, &server->pollset, &worker,
+ gpr_now(GPR_CLOCK_MONOTONIC), deadline);
+ gpr_mu_unlock(GRPC_POLLSET_MU(&server->pollset));
+ grpc_exec_ctx_finish(&exec_ctx);
+}
+
+static void on_server_destroyed(grpc_exec_ctx *exec_ctx, void *data,
+ int success) {
+ test_tcp_server *server = data;
+ server->shutdown = 1;
+}
+
+static void do_nothing(grpc_exec_ctx *exec_ctx, void *arg, int success) {}
+
+void test_tcp_server_destroy(test_tcp_server *server) {
+ grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
+ gpr_timespec shutdown_deadline;
+ grpc_closure server_shutdown_cb;
+ grpc_closure do_nothing_cb;
+ grpc_closure_init(&server_shutdown_cb, on_server_destroyed, server);
+ grpc_closure_init(&do_nothing_cb, do_nothing, NULL);
+ grpc_tcp_server_destroy(&exec_ctx, server->tcp_server, &server_shutdown_cb);
+ shutdown_deadline = gpr_time_add(gpr_now(GPR_CLOCK_MONOTONIC),
+ gpr_time_from_seconds(5, GPR_TIMESPAN));
+ while (!server->shutdown &&
+ gpr_time_cmp(gpr_now(GPR_CLOCK_MONOTONIC), shutdown_deadline) < 0) {
+ test_tcp_server_poll(server, 1);
+ }
+ grpc_pollset_shutdown(&exec_ctx, &server->pollset, &do_nothing_cb);
+ grpc_exec_ctx_finish(&exec_ctx);
+ grpc_pollset_destroy(&server->pollset);
+ grpc_shutdown();
+}
diff --git a/test/core/util/test_tcp_server.h b/test/core/util/test_tcp_server.h
new file mode 100644
index 0000000000..deb65eef11
--- /dev/null
+++ b/test/core/util/test_tcp_server.h
@@ -0,0 +1,55 @@
+/*
+ *
+ * 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_TEST_CORE_UTIL_TEST_TCP_SERVER_H
+#define GRPC_TEST_CORE_UTIL_TEST_TCP_SERVER_H
+
+#include <grpc/support/sync.h>
+#include "src/core/iomgr/tcp_server.h"
+
+typedef struct test_tcp_server {
+ grpc_tcp_server *tcp_server;
+ int shutdown;
+ grpc_pollset pollset;
+ grpc_pollset *pollsets[1];
+ grpc_tcp_server_cb on_connect;
+ void *cb_data;
+} test_tcp_server;
+
+void test_tcp_server_init(test_tcp_server *server,
+ grpc_tcp_server_cb on_connect, void *user_data);
+void test_tcp_server_start(test_tcp_server *server, int port);
+void test_tcp_server_poll(test_tcp_server *server, int seconds);
+void test_tcp_server_destroy(test_tcp_server *server);
+
+#endif /* GRPC_TEST_CORE_UTIL_TEST_TCP_SERVER_H */
diff --git a/test/cpp/interop/reconnect_interop_server.cc b/test/cpp/interop/reconnect_interop_server.cc
index f52417bae0..92b5bf4dfa 100644
--- a/test/cpp/interop/reconnect_interop_server.cc
+++ b/test/cpp/interop/reconnect_interop_server.cc
@@ -75,12 +75,15 @@ static bool got_sigint = false;
class ReconnectServiceImpl : public ReconnectService::Service {
public:
explicit ReconnectServiceImpl(int retry_port)
- : retry_port_(retry_port), serving_(false), shutdown_(false) {
+ : retry_port_(retry_port),
+ serving_(false),
+ server_started_(false),
+ shutdown_(false) {
reconnect_server_init(&tcp_server_);
}
~ReconnectServiceImpl() {
- if (tcp_server_.tcp_server) {
+ if (server_started_) {
reconnect_server_destroy(&tcp_server_);
}
}
@@ -88,6 +91,7 @@ class ReconnectServiceImpl : public ReconnectService::Service {
void Poll(int seconds) { reconnect_server_poll(&tcp_server_, seconds); }
Status Start(ServerContext* context, const Empty* request, Empty* response) {
+ bool start_server = true;
std::unique_lock<std::mutex> lock(mu_);
while (serving_ && !shutdown_) {
cv_.wait(lock);
@@ -96,9 +100,14 @@ class ReconnectServiceImpl : public ReconnectService::Service {
return Status(grpc::StatusCode::UNAVAILABLE, "shutting down");
}
serving_ = true;
+ if (server_started_) {
+ start_server = false;
+ } else {
+ server_started_ = true;
+ }
lock.unlock();
- if (!tcp_server_.tcp_server) {
+ if (start_server) {
reconnect_server_start(&tcp_server_, retry_port_);
} else {
reconnect_server_clear_timestamps(&tcp_server_);
@@ -152,6 +161,7 @@ class ReconnectServiceImpl : public ReconnectService::Service {
int retry_port_;
reconnect_server tcp_server_;
bool serving_;
+ bool server_started_;
bool shutdown_;
std::mutex mu_;
std::condition_variable cv_;
diff --git a/test/proto/benchmarks/stats.proto b/test/proto/benchmarks/stats.proto
index f9d116110b..7e02707dbb 100644
--- a/test/proto/benchmarks/stats.proto
+++ b/test/proto/benchmarks/stats.proto
@@ -45,8 +45,8 @@ message ServerStats {
// Histogram params based on grpc/support/histogram.c
message HistogramParams {
- double resolution = 1; // first bucket is [0, 1 + resolution)
- double max_possible = 2; // use enough buckets to allow this value
+ double resolution = 1; // first bucket is [0, 1 + resolution)
+ double max_possible = 2; // use enough buckets to allow this value
}
// Histogram data based on grpc/support/histogram.c
diff --git a/test/proto/metrics.proto b/test/proto/metrics.proto
index 4485d3a53b..f698620100 100644
--- a/test/proto/metrics.proto
+++ b/test/proto/metrics.proto
@@ -45,7 +45,8 @@ message GaugeResponse {
message GaugeRequest { string name = 1; }
-message EmptyMessage {}
+message EmptyMessage {
+}
service MetricsService {
rpc GetAllGauges(EmptyMessage) returns (stream GaugeResponse);
diff --git a/tools/doxygen/Doxyfile.core b/tools/doxygen/Doxyfile.core
index e411abf300..3a1d097fb9 100644
--- a/tools/doxygen/Doxyfile.core
+++ b/tools/doxygen/Doxyfile.core
@@ -772,6 +772,7 @@ include/grpc/support/atm.h \
include/grpc/support/atm_gcc_atomic.h \
include/grpc/support/atm_gcc_sync.h \
include/grpc/support/atm_win32.h \
+include/grpc/support/avl.h \
include/grpc/support/cmdline.h \
include/grpc/support/cpu.h \
include/grpc/support/histogram.h \
diff --git a/tools/doxygen/Doxyfile.core.internal b/tools/doxygen/Doxyfile.core.internal
index da65d0024e..8dcd8cd42c 100644
--- a/tools/doxygen/Doxyfile.core.internal
+++ b/tools/doxygen/Doxyfile.core.internal
@@ -794,6 +794,7 @@ src/core/channel/noop_filter.h \
src/core/channel/subchannel_call_holder.h \
src/core/client_config/client_config.h \
src/core/client_config/connector.h \
+src/core/client_config/initial_connect_string.h \
src/core/client_config/lb_policies/pick_first.h \
src/core/client_config/lb_policies/round_robin.h \
src/core/client_config/lb_policy.h \
@@ -933,6 +934,8 @@ src/core/channel/noop_filter.c \
src/core/channel/subchannel_call_holder.c \
src/core/client_config/client_config.c \
src/core/client_config/connector.c \
+src/core/client_config/default_initial_connect_string.c \
+src/core/client_config/initial_connect_string.c \
src/core/client_config/lb_policies/pick_first.c \
src/core/client_config/lb_policies/round_robin.c \
src/core/client_config/lb_policy.c \
@@ -1053,6 +1056,7 @@ include/grpc/support/atm.h \
include/grpc/support/atm_gcc_atomic.h \
include/grpc/support/atm_gcc_sync.h \
include/grpc/support/atm_win32.h \
+include/grpc/support/avl.h \
include/grpc/support/cmdline.h \
include/grpc/support/cpu.h \
include/grpc/support/histogram.h \
@@ -1088,6 +1092,7 @@ src/core/support/time_precise.h \
src/core/profiling/basic_timers.c \
src/core/profiling/stap_timers.c \
src/core/support/alloc.c \
+src/core/support/avl.c \
src/core/support/cmdline.c \
src/core/support/cpu_iphone.c \
src/core/support/cpu_linux.c \
diff --git a/tools/http2_interop/frameheader.go b/tools/http2_interop/frameheader.go
index 78fe4201f6..84f6fa5c55 100644
--- a/tools/http2_interop/frameheader.go
+++ b/tools/http2_interop/frameheader.go
@@ -58,7 +58,11 @@ func (fh *FrameHeader) MarshalBinary() ([]byte, error) {
buf[0], buf[1], buf[2] = byte(fh.Length>>16), byte(fh.Length>>8), byte(fh.Length)
buf[3] = byte(fh.Type)
buf[4] = fh.Flags
- binary.BigEndian.PutUint32(buf[5:], uint32(fh.StreamID))
+ var res uint32
+ if fh.Reserved {
+ res = 0x80000000
+ }
+ binary.BigEndian.PutUint32(buf[5:], uint32(fh.StreamID)|res)
return buf, nil
}
@@ -89,6 +93,8 @@ func (ft FrameType) String() string {
return "WINDOW_UPDATE"
case ContinuationFrameType:
return "CONTINUATION"
+ case HTTP1FrameType:
+ return "HTTP/1.? (Bad)"
default:
return fmt.Sprintf("UNKNOWN(%d)", byte(ft))
}
@@ -106,4 +112,9 @@ const (
GoAwayFrameType FrameType = 7
WindowUpdateFrameType FrameType = 8
ContinuationFrameType FrameType = 9
+
+ // HTTP1FrameType is not a real type, but rather a convenient way to check if the response
+ // is an http response. The type of a frame header is the 4th byte, which in an http1
+ // response will be "HTTP/1.1 200 OK" or something like that. The character for "P" is 80.
+ HTTP1FrameType FrameType = 80
)
diff --git a/tools/http2_interop/http1frame.go b/tools/http2_interop/http1frame.go
new file mode 100644
index 0000000000..68ab197b65
--- /dev/null
+++ b/tools/http2_interop/http1frame.go
@@ -0,0 +1,49 @@
+package http2interop
+
+import (
+ "bytes"
+ "io"
+ "strings"
+)
+
+// HTTP1Frame is not a real frame, but rather a way to represent an http1.x response.
+type HTTP1Frame struct {
+ Header FrameHeader
+ Data []byte
+}
+
+func (f *HTTP1Frame) GetHeader() *FrameHeader {
+ return &f.Header
+}
+
+func (f *HTTP1Frame) ParsePayload(r io.Reader) error {
+ var buf bytes.Buffer
+ if _, err := io.Copy(&buf, r); err != nil {
+ return err
+ }
+ f.Data = buf.Bytes()
+ return nil
+}
+
+func (f *HTTP1Frame) MarshalPayload() ([]byte, error) {
+ return []byte(string(f.Data)), nil
+}
+
+func (f *HTTP1Frame) MarshalBinary() ([]byte, error) {
+ buf, err := f.Header.MarshalBinary()
+ if err != nil {
+ return nil, err
+ }
+
+ buf = append(buf, f.Data...)
+
+ return buf, nil
+}
+
+func (f *HTTP1Frame) String() string {
+ s := string(f.Data)
+ parts := strings.SplitN(s, "\n", 2)
+ headerleft, _ := f.Header.MarshalBinary()
+
+ return strings.TrimSpace(string(headerleft) + parts[0])
+}
diff --git a/tools/http2_interop/http2interop.go b/tools/http2_interop/http2interop.go
index bef8b0b656..abd7d4cf7d 100644
--- a/tools/http2_interop/http2interop.go
+++ b/tools/http2_interop/http2interop.go
@@ -49,11 +49,16 @@ func parseFrame(r io.Reader) (Frame, error) {
f = &SettingsFrame{
Header: fh,
}
+ case HTTP1FrameType:
+ f = &HTTP1Frame{
+ Header: fh,
+ }
default:
f = &UnknownFrame{
Header: fh,
}
}
+
if err := f.ParsePayload(r); err != nil {
return nil, err
}
@@ -73,13 +78,14 @@ func streamFrame(w io.Writer, f Frame) error {
}
func testClientShortSettings(ctx *HTTP2InteropCtx, length int) error {
- c, err := connect(ctx)
+ conn, err := connect(ctx)
if err != nil {
return err
}
- defer c.Close()
+ defer conn.Close()
+ conn.SetDeadline(time.Now().Add(defaultTimeout))
- if _, err := c.Write([]byte(Preface)); err != nil {
+ if _, err := conn.Write([]byte(Preface)); err != nil {
return err
}
@@ -90,30 +96,28 @@ func testClientShortSettings(ctx *HTTP2InteropCtx, length int) error {
},
Data: make([]byte, length),
}
- if err := streamFrame(c, sf); err != nil {
+ if err := streamFrame(conn, sf); err != nil {
ctx.T.Log("Unable to stream frame", sf)
return err
}
- for {
- if _, err := parseFrame(c); err != nil {
- ctx.T.Log("Unable to parse frame")
- return err
- }
+ if _, err := expectGoAwaySoon(conn); err != nil {
+ return err
}
return nil
}
func testClientPrefaceWithStreamId(ctx *HTTP2InteropCtx) error {
- c, err := connect(ctx)
+ conn, err := connect(ctx)
if err != nil {
return err
}
- defer c.Close()
+ defer conn.Close()
+ conn.SetDeadline(time.Now().Add(defaultTimeout))
// Good so far
- if _, err := c.Write([]byte(Preface)); err != nil {
+ if _, err := conn.Write([]byte(Preface)); err != nil {
return err
}
@@ -123,34 +127,25 @@ func testClientPrefaceWithStreamId(ctx *HTTP2InteropCtx) error {
StreamID: 1,
},
}
- if err := streamFrame(c, sf); err != nil {
+ if err := streamFrame(conn, sf); err != nil {
return err
}
- for {
- if _, err := parseFrame(c); err != nil {
- return err
- }
+ if _, err := expectGoAwaySoon(conn); err != nil {
+ return err
}
-
return nil
}
func testUnknownFrameType(ctx *HTTP2InteropCtx) error {
- c, err := connect(ctx)
+ conn, err := connect(ctx)
if err != nil {
return err
}
- defer c.Close()
-
- if _, err := c.Write([]byte(Preface)); err != nil {
- return err
- }
+ defer conn.Close()
+ conn.SetDeadline(time.Now().Add(defaultTimeout))
- // Send some settings, which are part of the client preface
- sf := &SettingsFrame{}
- if err := streamFrame(c, sf); err != nil {
- ctx.T.Log("Unable to stream frame", sf)
+ if err := http2Connect(conn, nil); err != nil {
return err
}
@@ -161,7 +156,7 @@ func testUnknownFrameType(ctx *HTTP2InteropCtx) error {
Type: ft,
},
}
- if err := streamFrame(c, fh); err != nil {
+ if err := streamFrame(conn, fh); err != nil {
ctx.T.Log("Unable to stream frame", fh)
return err
}
@@ -170,18 +165,19 @@ func testUnknownFrameType(ctx *HTTP2InteropCtx) error {
pf := &PingFrame{
Data: []byte("01234567"),
}
- if err := streamFrame(c, pf); err != nil {
- ctx.T.Log("Unable to stream frame", sf)
+ if err := streamFrame(conn, pf); err != nil {
+ ctx.T.Log("Unable to stream frame", pf)
return err
}
for {
- frame, err := parseFrame(c)
+ frame, err := parseFrame(conn)
if err != nil {
- ctx.T.Log("Unable to parse frame")
+ ctx.T.Log("Unable to parse frame", err)
return err
}
if npf, ok := frame.(*PingFrame); !ok {
+ ctx.T.Log("Got frame", frame.GetHeader().Type)
continue
} else {
if string(npf.Data) != string(pf.Data) || npf.Header.Flags&PING_ACK == 0 {
@@ -195,21 +191,22 @@ func testUnknownFrameType(ctx *HTTP2InteropCtx) error {
}
func testShortPreface(ctx *HTTP2InteropCtx, prefacePrefix string) error {
- c, err := connect(ctx)
+ conn, err := connect(ctx)
if err != nil {
return err
}
- defer c.Close()
+ defer conn.Close()
+ conn.SetDeadline(time.Now().Add(defaultTimeout))
- if _, err := c.Write([]byte(prefacePrefix)); err != nil {
+ if _, err := conn.Write([]byte(prefacePrefix)); err != nil {
return err
}
- buf := make([]byte, 256)
- for ; err == nil; _, err = c.Read(buf) {
+ if _, err := expectGoAwaySoon(conn); err != nil {
+ return err
}
- // TODO: maybe check for a GOAWAY?
- return err
+
+ return nil
}
func testTLSMaxVersion(ctx *HTTP2InteropCtx, version uint16) error {
@@ -222,13 +219,18 @@ func testTLSMaxVersion(ctx *HTTP2InteropCtx, version uint16) error {
defer conn.Close()
conn.SetDeadline(time.Now().Add(defaultTimeout))
- buf := make([]byte, 256)
- if n, err := conn.Read(buf); err != nil {
- if n != 0 {
- return fmt.Errorf("Expected no bytes to be read, but was %d", n)
- }
+ if err := http2Connect(conn, nil); err != nil {
+ return err
+ }
+
+ gf, err := expectGoAway(conn)
+ if err != nil {
return err
}
+ // TODO: make an enum out of this
+ if gf.Code != 0xC {
+ return fmt.Errorf("Expected an Inadequate security code: %v", gf)
+ }
return nil
}
@@ -242,13 +244,18 @@ func testTLSApplicationProtocol(ctx *HTTP2InteropCtx) error {
defer conn.Close()
conn.SetDeadline(time.Now().Add(defaultTimeout))
- buf := make([]byte, 256)
- if n, err := conn.Read(buf); err != nil {
- if n != 0 {
- return fmt.Errorf("Expected no bytes to be read, but was %d", n)
- }
+ if err := http2Connect(conn, nil); err != nil {
+ return err
+ }
+
+ gf, err := expectGoAway(conn)
+ if err != nil {
return err
}
+ // TODO: make an enum out of this
+ if gf.Code != 0xC {
+ return fmt.Errorf("Expected an Inadequate security code: %v", gf)
+ }
return nil
}
@@ -279,16 +286,44 @@ func testTLSBadCipherSuites(ctx *HTTP2InteropCtx) error {
return err
}
+ gf, err := expectGoAway(conn)
+ if err != nil {
+ return err
+ }
+ // TODO: make an enum out of this
+ if gf.Code != 0xC {
+ return fmt.Errorf("Expected an Inadequate security code: %v", gf)
+ }
+ return nil
+}
+
+func expectGoAway(conn net.Conn) (*GoAwayFrame, error) {
+ f, err := parseFrame(conn)
+ if err != nil {
+ return nil, err
+ }
+ if gf, ok := f.(*GoAwayFrame); !ok {
+ return nil, fmt.Errorf("Expected GoAway Frame %+v", f)
+ } else {
+ return gf, nil
+ }
+}
+
+// expectGoAwaySoon checks that a GOAWAY frame eventually comes. Servers usually send
+// the initial settings frames before any data has actually arrived. This function
+// checks that a go away shows.
+func expectGoAwaySoon(conn net.Conn) (*GoAwayFrame, error) {
for {
f, err := parseFrame(conn)
if err != nil {
- return err
+ return nil, err
}
- if gf, ok := f.(*GoAwayFrame); ok {
- return fmt.Errorf("Got goaway frame %d", gf.Code)
+ if gf, ok := f.(*GoAwayFrame); !ok {
+ continue
+ } else {
+ return gf, nil
}
}
- return nil
}
func http2Connect(c net.Conn, sf *SettingsFrame) error {
@@ -304,8 +339,29 @@ func http2Connect(c net.Conn, sf *SettingsFrame) error {
return nil
}
-func connect(ctx *HTTP2InteropCtx) (net.Conn, error) {
- var conn net.Conn
+// CapConn captures connection traffic if Log is non-nil
+type CapConn struct {
+ net.Conn
+ Log func(args ...interface{})
+}
+
+func (c *CapConn) Write(data []byte) (int, error) {
+ if c.Log != nil {
+ c.Log(" SEND: ", data)
+ }
+ return c.Conn.Write(data)
+}
+
+func (c *CapConn) Read(data []byte) (int, error) {
+ n, err := c.Conn.Read(data)
+ if c.Log != nil {
+ c.Log(" RECV: ", data[:n], err)
+ }
+ return n, err
+}
+
+func connect(ctx *HTTP2InteropCtx) (*CapConn, error) {
+ var conn *CapConn
var err error
if !ctx.UseTLS {
conn, err = connectWithoutTls(ctx)
@@ -327,24 +383,22 @@ func buildTlsConfig(ctx *HTTP2InteropCtx) *tls.Config {
NextProtos: []string{"h2"},
ServerName: ctx.authority,
MinVersion: tls.VersionTLS12,
- // TODO(carl-mastrangelo): remove this once all test certificates have been updated.
- InsecureSkipVerify: true,
}
}
-func connectWithoutTls(ctx *HTTP2InteropCtx) (net.Conn, error) {
+func connectWithoutTls(ctx *HTTP2InteropCtx) (*CapConn, error) {
conn, err := net.DialTimeout("tcp", ctx.serverSpec, defaultTimeout)
if err != nil {
return nil, err
}
- return conn, nil
+ return &CapConn{Conn: conn}, nil
}
-func connectWithTls(ctx *HTTP2InteropCtx, config *tls.Config) (*tls.Conn, error) {
+func connectWithTls(ctx *HTTP2InteropCtx, config *tls.Config) (*CapConn, error) {
conn, err := connectWithoutTls(ctx)
if err != nil {
return nil, err
}
- return tls.Client(conn, config), nil
+ return &CapConn{Conn: tls.Client(conn, config)}, nil
}
diff --git a/tools/http2_interop/http2interop_test.go b/tools/http2_interop/http2interop_test.go
index e3d366f2f2..b35d085569 100644
--- a/tools/http2_interop/http2interop_test.go
+++ b/tools/http2_interop/http2interop_test.go
@@ -5,7 +5,6 @@ import (
"crypto/x509"
"flag"
"fmt"
- "io"
"io/ioutil"
"os"
"strconv"
@@ -68,15 +67,25 @@ func (ctx *HTTP2InteropCtx) Close() error {
return nil
}
+func TestClientShortSettings(t *testing.T) {
+ if *testCase != "framing" {
+ t.SkipNow()
+ }
+ ctx := InteropCtx(t)
+ for i := 1; i <= 5; i++ {
+ err := testClientShortSettings(ctx, i)
+ matchError(t, err, "EOF")
+ }
+}
+
func TestShortPreface(t *testing.T) {
if *testCase != "framing" {
t.SkipNow()
}
ctx := InteropCtx(t)
for i := 0; i < len(Preface)-1; i++ {
- if err := testShortPreface(ctx, Preface[:i]+"X"); err != io.EOF {
- t.Error("Expected an EOF but was", err)
- }
+ err := testShortPreface(ctx, Preface[:i]+"X")
+ matchError(t, err, "EOF")
}
}
@@ -90,13 +99,22 @@ func TestUnknownFrameType(t *testing.T) {
}
}
+func TestClientPrefaceWithStreamId(t *testing.T) {
+ if *testCase != "framing" {
+ t.SkipNow()
+ }
+ ctx := InteropCtx(t)
+ err := testClientPrefaceWithStreamId(ctx)
+ matchError(t, err, "EOF")
+}
+
func TestTLSApplicationProtocol(t *testing.T) {
if *testCase != "tls" {
t.SkipNow()
}
ctx := InteropCtx(t)
err := testTLSApplicationProtocol(ctx)
- matchError(t, err, "EOF")
+ matchError(t, err, "EOF", "broken pipe")
}
func TestTLSMaxVersion(t *testing.T) {
@@ -119,15 +137,6 @@ func TestTLSBadCipherSuites(t *testing.T) {
matchError(t, err, "EOF", "Got goaway frame")
}
-func TestClientPrefaceWithStreamId(t *testing.T) {
- if *testCase != "framing" {
- t.SkipNow()
- }
- ctx := InteropCtx(t)
- err := testClientPrefaceWithStreamId(ctx)
- matchError(t, err, "EOF")
-}
-
func matchError(t *testing.T, err error, matches ...string) {
if err == nil {
t.Fatal("Expected an error")
diff --git a/tools/profiling/latency_profile/profile_analyzer.py b/tools/profiling/latency_profile/profile_analyzer.py
index b12e1074e5..b2a38ea60a 100755
--- a/tools/profiling/latency_profile/profile_analyzer.py
+++ b/tools/profiling/latency_profile/profile_analyzer.py
@@ -49,7 +49,7 @@ class ScopeBuilder(object):
self.call_stack_builder.lines.append(line_item)
def finish(self, line):
- assert line['tag'] == self.top_line.tag, 'expected %s, got %s' % (self.top_line.tag, line['tag'])
+ assert line['tag'] == self.top_line.tag, 'expected %s, got %s; thread=%s; t0=%f t1=%f' % (self.top_line.tag, line['tag'], line['thd'], self.top_line.start_time, line['t'])
final_time_stamp = line['t']
assert self.top_line.end_time is None
self.top_line.end_time = final_time_stamp
@@ -84,6 +84,7 @@ class CallStackBuilder(object):
self.stk.append(ScopeBuilder(self, line))
return False
elif line_type == '}':
+ assert self.stk, 'expected non-empty stack for closing %s; thread=%s; t=%f' % (line['tag'], line['thd'], line['t'])
self.stk.pop().finish(line)
if not self.stk:
self.finish()
diff --git a/tools/run_tests/sources_and_headers.json b/tools/run_tests/sources_and_headers.json
index ffa50188a9..4ecffbe3ec 100644
--- a/tools/run_tests/sources_and_headers.json
+++ b/tools/run_tests/sources_and_headers.json
@@ -225,6 +225,18 @@
],
"headers": [],
"language": "c",
+ "name": "gpr_avl_test",
+ "src": [
+ "test/core/support/avl_test.c"
+ ]
+ },
+ {
+ "deps": [
+ "gpr",
+ "gpr_test_util"
+ ],
+ "headers": [],
+ "language": "c",
"name": "gpr_cmdline_test",
"src": [
"test/core/support/cmdline_test.c"
@@ -859,6 +871,21 @@
"gpr",
"gpr_test_util",
"grpc",
+ "grpc_test_util",
+ "test_tcp_server"
+ ],
+ "headers": [],
+ "language": "c",
+ "name": "set_initial_connect_string_test",
+ "src": [
+ "test/core/client_config/set_initial_connect_string_test.c"
+ ]
+ },
+ {
+ "deps": [
+ "gpr",
+ "gpr_test_util",
+ "grpc",
"grpc_test_util"
],
"headers": [],
@@ -1560,7 +1587,8 @@
"grpc++_test_config",
"grpc++_test_util",
"grpc_test_util",
- "reconnect_server"
+ "reconnect_server",
+ "test_tcp_server"
],
"headers": [
"test/proto/empty.grpc.pb.h",
@@ -14175,6 +14203,7 @@
"include/grpc/support/atm_gcc_atomic.h",
"include/grpc/support/atm_gcc_sync.h",
"include/grpc/support/atm_win32.h",
+ "include/grpc/support/avl.h",
"include/grpc/support/cmdline.h",
"include/grpc/support/cpu.h",
"include/grpc/support/histogram.h",
@@ -14216,6 +14245,7 @@
"include/grpc/support/atm_gcc_atomic.h",
"include/grpc/support/atm_gcc_sync.h",
"include/grpc/support/atm_win32.h",
+ "include/grpc/support/avl.h",
"include/grpc/support/cmdline.h",
"include/grpc/support/cpu.h",
"include/grpc/support/histogram.h",
@@ -14242,6 +14272,7 @@
"src/core/profiling/stap_timers.c",
"src/core/profiling/timers.h",
"src/core/support/alloc.c",
+ "src/core/support/avl.c",
"src/core/support/block_annotate.h",
"src/core/support/cmdline.c",
"src/core/support/cpu_iphone.c",
@@ -14333,6 +14364,7 @@
"src/core/channel/subchannel_call_holder.h",
"src/core/client_config/client_config.h",
"src/core/client_config/connector.h",
+ "src/core/client_config/initial_connect_string.h",
"src/core/client_config/lb_policies/pick_first.h",
"src/core/client_config/lb_policies/round_robin.h",
"src/core/client_config/lb_policy.h",
@@ -14493,6 +14525,9 @@
"src/core/client_config/client_config.h",
"src/core/client_config/connector.c",
"src/core/client_config/connector.h",
+ "src/core/client_config/default_initial_connect_string.c",
+ "src/core/client_config/initial_connect_string.c",
+ "src/core/client_config/initial_connect_string.h",
"src/core/client_config/lb_policies/pick_first.c",
"src/core/client_config/lb_policies/pick_first.h",
"src/core/client_config/lb_policies/round_robin.c",
@@ -14850,6 +14885,7 @@
"src/core/channel/subchannel_call_holder.h",
"src/core/client_config/client_config.h",
"src/core/client_config/connector.h",
+ "src/core/client_config/initial_connect_string.h",
"src/core/client_config/lb_policies/pick_first.h",
"src/core/client_config/lb_policies/round_robin.h",
"src/core/client_config/lb_policy.h",
@@ -14996,6 +15032,9 @@
"src/core/client_config/client_config.h",
"src/core/client_config/connector.c",
"src/core/client_config/connector.h",
+ "src/core/client_config/default_initial_connect_string.c",
+ "src/core/client_config/initial_connect_string.c",
+ "src/core/client_config/initial_connect_string.h",
"src/core/client_config/lb_policies/pick_first.c",
"src/core/client_config/lb_policies/pick_first.h",
"src/core/client_config/lb_policies/round_robin.c",
@@ -15233,7 +15272,8 @@
"gpr",
"gpr_test_util",
"grpc",
- "grpc_test_util"
+ "grpc_test_util",
+ "test_tcp_server"
],
"headers": [
"test/core/util/reconnect_server.h"
@@ -15248,6 +15288,23 @@
{
"deps": [
"gpr",
+ "gpr_test_util",
+ "grpc",
+ "grpc_test_util"
+ ],
+ "headers": [
+ "test/core/util/test_tcp_server.h"
+ ],
+ "language": "c",
+ "name": "test_tcp_server",
+ "src": [
+ "test/core/util/test_tcp_server.c",
+ "test/core/util/test_tcp_server.h"
+ ]
+ },
+ {
+ "deps": [
+ "gpr",
"grpc"
],
"headers": [
diff --git a/tools/run_tests/tests.json b/tools/run_tests/tests.json
index 029fc5ec71..179b078263 100644
--- a/tools/run_tests/tests.json
+++ b/tools/run_tests/tests.json
@@ -217,6 +217,24 @@
"exclude_configs": [],
"flaky": false,
"language": "c",
+ "name": "gpr_avl_test",
+ "platforms": [
+ "linux",
+ "mac",
+ "posix",
+ "windows"
+ ]
+ },
+ {
+ "ci_platforms": [
+ "linux",
+ "mac",
+ "posix",
+ "windows"
+ ],
+ "exclude_configs": [],
+ "flaky": false,
+ "language": "c",
"name": "gpr_cmdline_test",
"platforms": [
"linux",
@@ -969,6 +987,24 @@
"exclude_configs": [],
"flaky": false,
"language": "c",
+ "name": "set_initial_connect_string_test",
+ "platforms": [
+ "linux",
+ "mac",
+ "posix",
+ "windows"
+ ]
+ },
+ {
+ "ci_platforms": [
+ "linux",
+ "mac",
+ "posix",
+ "windows"
+ ],
+ "exclude_configs": [],
+ "flaky": false,
+ "language": "c",
"name": "sockaddr_utils_test",
"platforms": [
"linux",
diff --git a/vsprojects/buildtests_c.sln b/vsprojects/buildtests_c.sln
index d902ba8ff7..fc08b8bd1b 100644
--- a/vsprojects/buildtests_c.sln
+++ b/vsprojects/buildtests_c.sln
@@ -57,6 +57,18 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "reconnect_server", "vcxproj
lib = "True"
EndProjectSection
ProjectSection(ProjectDependencies) = postProject
+ {E3110C46-A148-FF65-08FD-3324829BE7FE} = {E3110C46-A148-FF65-08FD-3324829BE7FE}
+ {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}") = "test_tcp_server", "vcxproj\.\test_tcp_server\test_tcp_server.vcxproj", "{E3110C46-A148-FF65-08FD-3324829BE7FE}"
+ ProjectSection(myProperties) = preProject
+ lib = "True"
+ EndProjectSection
+ ProjectSection(ProjectDependencies) = postProject
{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}
@@ -732,6 +744,15 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gen_legal_metadata_characte
lib = "False"
EndProjectSection
EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gpr_avl_test", "vcxproj\test\gpr_avl_test\gpr_avl_test.vcxproj", "{144D8CFF-2737-A18A-DCFD-01603533D63F}"
+ ProjectSection(myProperties) = preProject
+ lib = "False"
+ EndProjectSection
+ ProjectSection(ProjectDependencies) = postProject
+ {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}") = "gpr_cmdline_test", "vcxproj\test\gpr_cmdline_test\gpr_cmdline_test.vcxproj", "{10668A5D-65CD-F530-22D0-747B395B4C26}"
ProjectSection(myProperties) = preProject
lib = "False"
@@ -1191,6 +1212,18 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "secure_endpoint_test", "vcx
{B23D3D1A-9438-4EDA-BEB6-9A0A03D17792} = {B23D3D1A-9438-4EDA-BEB6-9A0A03D17792}
EndProjectSection
EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "set_initial_connect_string_test", "vcxproj\test\set_initial_connect_string_test\set_initial_connect_string_test.vcxproj", "{4A48E5A5-2E69-ED6D-063C-C297180A54D0}"
+ ProjectSection(myProperties) = preProject
+ lib = "False"
+ EndProjectSection
+ ProjectSection(ProjectDependencies) = postProject
+ {E3110C46-A148-FF65-08FD-3324829BE7FE} = {E3110C46-A148-FF65-08FD-3324829BE7FE}
+ {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}") = "sockaddr_utils_test", "vcxproj\test\sockaddr_utils_test\sockaddr_utils_test.vcxproj", "{529771F0-10B0-9B1A-1E7E-8A8E01870348}"
ProjectSection(myProperties) = preProject
lib = "False"
@@ -9600,6 +9633,22 @@ Global
{929C90AE-483F-AC80-EF93-226199F9E428}.Release-DLL|Win32.Build.0 = Release|Win32
{929C90AE-483F-AC80-EF93-226199F9E428}.Release-DLL|x64.ActiveCfg = Release|x64
{929C90AE-483F-AC80-EF93-226199F9E428}.Release-DLL|x64.Build.0 = Release|x64
+ {E3110C46-A148-FF65-08FD-3324829BE7FE}.Debug|Win32.ActiveCfg = Debug|Win32
+ {E3110C46-A148-FF65-08FD-3324829BE7FE}.Debug|x64.ActiveCfg = Debug|x64
+ {E3110C46-A148-FF65-08FD-3324829BE7FE}.Release|Win32.ActiveCfg = Release|Win32
+ {E3110C46-A148-FF65-08FD-3324829BE7FE}.Release|x64.ActiveCfg = Release|x64
+ {E3110C46-A148-FF65-08FD-3324829BE7FE}.Debug|Win32.Build.0 = Debug|Win32
+ {E3110C46-A148-FF65-08FD-3324829BE7FE}.Debug|x64.Build.0 = Debug|x64
+ {E3110C46-A148-FF65-08FD-3324829BE7FE}.Release|Win32.Build.0 = Release|Win32
+ {E3110C46-A148-FF65-08FD-3324829BE7FE}.Release|x64.Build.0 = Release|x64
+ {E3110C46-A148-FF65-08FD-3324829BE7FE}.Debug-DLL|Win32.ActiveCfg = Debug|Win32
+ {E3110C46-A148-FF65-08FD-3324829BE7FE}.Debug-DLL|Win32.Build.0 = Debug|Win32
+ {E3110C46-A148-FF65-08FD-3324829BE7FE}.Debug-DLL|x64.ActiveCfg = Debug|x64
+ {E3110C46-A148-FF65-08FD-3324829BE7FE}.Debug-DLL|x64.Build.0 = Debug|x64
+ {E3110C46-A148-FF65-08FD-3324829BE7FE}.Release-DLL|Win32.ActiveCfg = Release|Win32
+ {E3110C46-A148-FF65-08FD-3324829BE7FE}.Release-DLL|Win32.Build.0 = Release|Win32
+ {E3110C46-A148-FF65-08FD-3324829BE7FE}.Release-DLL|x64.ActiveCfg = Release|x64
+ {E3110C46-A148-FF65-08FD-3324829BE7FE}.Release-DLL|x64.Build.0 = Release|x64
{C187A093-A0FE-489D-A40A-6E33DE0F9FEB}.Debug|Win32.ActiveCfg = Debug|Win32
{C187A093-A0FE-489D-A40A-6E33DE0F9FEB}.Debug|x64.ActiveCfg = Debug|x64
{C187A093-A0FE-489D-A40A-6E33DE0F9FEB}.Release|Win32.ActiveCfg = Release|Win32
@@ -10592,6 +10641,22 @@ Global
{A635DE99-B131-CA00-2D3B-8691D60B76C2}.Release-DLL|Win32.Build.0 = Release|Win32
{A635DE99-B131-CA00-2D3B-8691D60B76C2}.Release-DLL|x64.ActiveCfg = Release|x64
{A635DE99-B131-CA00-2D3B-8691D60B76C2}.Release-DLL|x64.Build.0 = Release|x64
+ {144D8CFF-2737-A18A-DCFD-01603533D63F}.Debug|Win32.ActiveCfg = Debug|Win32
+ {144D8CFF-2737-A18A-DCFD-01603533D63F}.Debug|x64.ActiveCfg = Debug|x64
+ {144D8CFF-2737-A18A-DCFD-01603533D63F}.Release|Win32.ActiveCfg = Release|Win32
+ {144D8CFF-2737-A18A-DCFD-01603533D63F}.Release|x64.ActiveCfg = Release|x64
+ {144D8CFF-2737-A18A-DCFD-01603533D63F}.Debug|Win32.Build.0 = Debug|Win32
+ {144D8CFF-2737-A18A-DCFD-01603533D63F}.Debug|x64.Build.0 = Debug|x64
+ {144D8CFF-2737-A18A-DCFD-01603533D63F}.Release|Win32.Build.0 = Release|Win32
+ {144D8CFF-2737-A18A-DCFD-01603533D63F}.Release|x64.Build.0 = Release|x64
+ {144D8CFF-2737-A18A-DCFD-01603533D63F}.Debug-DLL|Win32.ActiveCfg = Debug|Win32
+ {144D8CFF-2737-A18A-DCFD-01603533D63F}.Debug-DLL|Win32.Build.0 = Debug|Win32
+ {144D8CFF-2737-A18A-DCFD-01603533D63F}.Debug-DLL|x64.ActiveCfg = Debug|x64
+ {144D8CFF-2737-A18A-DCFD-01603533D63F}.Debug-DLL|x64.Build.0 = Debug|x64
+ {144D8CFF-2737-A18A-DCFD-01603533D63F}.Release-DLL|Win32.ActiveCfg = Release|Win32
+ {144D8CFF-2737-A18A-DCFD-01603533D63F}.Release-DLL|Win32.Build.0 = Release|Win32
+ {144D8CFF-2737-A18A-DCFD-01603533D63F}.Release-DLL|x64.ActiveCfg = Release|x64
+ {144D8CFF-2737-A18A-DCFD-01603533D63F}.Release-DLL|x64.Build.0 = Release|x64
{10668A5D-65CD-F530-22D0-747B395B4C26}.Debug|Win32.ActiveCfg = Debug|Win32
{10668A5D-65CD-F530-22D0-747B395B4C26}.Debug|x64.ActiveCfg = Debug|x64
{10668A5D-65CD-F530-22D0-747B395B4C26}.Release|Win32.ActiveCfg = Release|Win32
@@ -11312,6 +11377,22 @@ Global
{A7747106-A6BC-62D4-2A21-04A4F0CC2683}.Release-DLL|Win32.Build.0 = Release|Win32
{A7747106-A6BC-62D4-2A21-04A4F0CC2683}.Release-DLL|x64.ActiveCfg = Release|x64
{A7747106-A6BC-62D4-2A21-04A4F0CC2683}.Release-DLL|x64.Build.0 = Release|x64
+ {4A48E5A5-2E69-ED6D-063C-C297180A54D0}.Debug|Win32.ActiveCfg = Debug|Win32
+ {4A48E5A5-2E69-ED6D-063C-C297180A54D0}.Debug|x64.ActiveCfg = Debug|x64
+ {4A48E5A5-2E69-ED6D-063C-C297180A54D0}.Release|Win32.ActiveCfg = Release|Win32
+ {4A48E5A5-2E69-ED6D-063C-C297180A54D0}.Release|x64.ActiveCfg = Release|x64
+ {4A48E5A5-2E69-ED6D-063C-C297180A54D0}.Debug|Win32.Build.0 = Debug|Win32
+ {4A48E5A5-2E69-ED6D-063C-C297180A54D0}.Debug|x64.Build.0 = Debug|x64
+ {4A48E5A5-2E69-ED6D-063C-C297180A54D0}.Release|Win32.Build.0 = Release|Win32
+ {4A48E5A5-2E69-ED6D-063C-C297180A54D0}.Release|x64.Build.0 = Release|x64
+ {4A48E5A5-2E69-ED6D-063C-C297180A54D0}.Debug-DLL|Win32.ActiveCfg = Debug|Win32
+ {4A48E5A5-2E69-ED6D-063C-C297180A54D0}.Debug-DLL|Win32.Build.0 = Debug|Win32
+ {4A48E5A5-2E69-ED6D-063C-C297180A54D0}.Debug-DLL|x64.ActiveCfg = Debug|x64
+ {4A48E5A5-2E69-ED6D-063C-C297180A54D0}.Debug-DLL|x64.Build.0 = Debug|x64
+ {4A48E5A5-2E69-ED6D-063C-C297180A54D0}.Release-DLL|Win32.ActiveCfg = Release|Win32
+ {4A48E5A5-2E69-ED6D-063C-C297180A54D0}.Release-DLL|Win32.Build.0 = Release|Win32
+ {4A48E5A5-2E69-ED6D-063C-C297180A54D0}.Release-DLL|x64.ActiveCfg = Release|x64
+ {4A48E5A5-2E69-ED6D-063C-C297180A54D0}.Release-DLL|x64.Build.0 = Release|x64
{529771F0-10B0-9B1A-1E7E-8A8E01870348}.Debug|Win32.ActiveCfg = Debug|Win32
{529771F0-10B0-9B1A-1E7E-8A8E01870348}.Debug|x64.ActiveCfg = Debug|x64
{529771F0-10B0-9B1A-1E7E-8A8E01870348}.Release|Win32.ActiveCfg = Release|Win32
diff --git a/vsprojects/grpc.sln b/vsprojects/grpc.sln
index dce0295747..a5ef12185e 100644
--- a/vsprojects/grpc.sln
+++ b/vsprojects/grpc.sln
@@ -57,6 +57,18 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "reconnect_server", "vcxproj
lib = "True"
EndProjectSection
ProjectSection(ProjectDependencies) = postProject
+ {E3110C46-A148-FF65-08FD-3324829BE7FE} = {E3110C46-A148-FF65-08FD-3324829BE7FE}
+ {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}") = "test_tcp_server", "vcxproj\.\test_tcp_server\test_tcp_server.vcxproj", "{E3110C46-A148-FF65-08FD-3324829BE7FE}"
+ ProjectSection(myProperties) = preProject
+ lib = "True"
+ EndProjectSection
+ ProjectSection(ProjectDependencies) = postProject
{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}
@@ -263,6 +275,22 @@ Global
{929C90AE-483F-AC80-EF93-226199F9E428}.Release-DLL|Win32.Build.0 = Release|Win32
{929C90AE-483F-AC80-EF93-226199F9E428}.Release-DLL|x64.ActiveCfg = Release|x64
{929C90AE-483F-AC80-EF93-226199F9E428}.Release-DLL|x64.Build.0 = Release|x64
+ {E3110C46-A148-FF65-08FD-3324829BE7FE}.Debug|Win32.ActiveCfg = Debug|Win32
+ {E3110C46-A148-FF65-08FD-3324829BE7FE}.Debug|x64.ActiveCfg = Debug|x64
+ {E3110C46-A148-FF65-08FD-3324829BE7FE}.Release|Win32.ActiveCfg = Release|Win32
+ {E3110C46-A148-FF65-08FD-3324829BE7FE}.Release|x64.ActiveCfg = Release|x64
+ {E3110C46-A148-FF65-08FD-3324829BE7FE}.Debug|Win32.Build.0 = Debug|Win32
+ {E3110C46-A148-FF65-08FD-3324829BE7FE}.Debug|x64.Build.0 = Debug|x64
+ {E3110C46-A148-FF65-08FD-3324829BE7FE}.Release|Win32.Build.0 = Release|Win32
+ {E3110C46-A148-FF65-08FD-3324829BE7FE}.Release|x64.Build.0 = Release|x64
+ {E3110C46-A148-FF65-08FD-3324829BE7FE}.Debug-DLL|Win32.ActiveCfg = Debug|Win32
+ {E3110C46-A148-FF65-08FD-3324829BE7FE}.Debug-DLL|Win32.Build.0 = Debug|Win32
+ {E3110C46-A148-FF65-08FD-3324829BE7FE}.Debug-DLL|x64.ActiveCfg = Debug|x64
+ {E3110C46-A148-FF65-08FD-3324829BE7FE}.Debug-DLL|x64.Build.0 = Debug|x64
+ {E3110C46-A148-FF65-08FD-3324829BE7FE}.Release-DLL|Win32.ActiveCfg = Release|Win32
+ {E3110C46-A148-FF65-08FD-3324829BE7FE}.Release-DLL|Win32.Build.0 = Release|Win32
+ {E3110C46-A148-FF65-08FD-3324829BE7FE}.Release-DLL|x64.ActiveCfg = Release|x64
+ {E3110C46-A148-FF65-08FD-3324829BE7FE}.Release-DLL|x64.Build.0 = Release|x64
{C187A093-A0FE-489D-A40A-6E33DE0F9FEB}.Debug|Win32.ActiveCfg = Debug|Win32
{C187A093-A0FE-489D-A40A-6E33DE0F9FEB}.Debug|x64.ActiveCfg = Debug|x64
{C187A093-A0FE-489D-A40A-6E33DE0F9FEB}.Release|Win32.ActiveCfg = Release|Win32
diff --git a/vsprojects/vcxproj/gpr/gpr.vcxproj b/vsprojects/vcxproj/gpr/gpr.vcxproj
index fa495db07b..b20d61d9ba 100644
--- a/vsprojects/vcxproj/gpr/gpr.vcxproj
+++ b/vsprojects/vcxproj/gpr/gpr.vcxproj
@@ -139,6 +139,7 @@
<ClInclude Include="..\..\..\include\grpc\support\atm_gcc_atomic.h" />
<ClInclude Include="..\..\..\include\grpc\support\atm_gcc_sync.h" />
<ClInclude Include="..\..\..\include\grpc\support\atm_win32.h" />
+ <ClInclude Include="..\..\..\include\grpc\support\avl.h" />
<ClInclude Include="..\..\..\include\grpc\support\cmdline.h" />
<ClInclude Include="..\..\..\include\grpc\support\cpu.h" />
<ClInclude Include="..\..\..\include\grpc\support\histogram.h" />
@@ -181,6 +182,8 @@
</ClCompile>
<ClCompile Include="..\..\..\src\core\support\alloc.c">
</ClCompile>
+ <ClCompile Include="..\..\..\src\core\support\avl.c">
+ </ClCompile>
<ClCompile Include="..\..\..\src\core\support\cmdline.c">
</ClCompile>
<ClCompile Include="..\..\..\src\core\support\cpu_iphone.c">
diff --git a/vsprojects/vcxproj/gpr/gpr.vcxproj.filters b/vsprojects/vcxproj/gpr/gpr.vcxproj.filters
index ee03e45453..9ddb9c0119 100644
--- a/vsprojects/vcxproj/gpr/gpr.vcxproj.filters
+++ b/vsprojects/vcxproj/gpr/gpr.vcxproj.filters
@@ -10,6 +10,9 @@
<ClCompile Include="..\..\..\src\core\support\alloc.c">
<Filter>src\core\support</Filter>
</ClCompile>
+ <ClCompile Include="..\..\..\src\core\support\avl.c">
+ <Filter>src\core\support</Filter>
+ </ClCompile>
<ClCompile Include="..\..\..\src\core\support\cmdline.c">
<Filter>src\core\support</Filter>
</ClCompile>
@@ -138,6 +141,9 @@
<ClInclude Include="..\..\..\include\grpc\support\atm_win32.h">
<Filter>include\grpc\support</Filter>
</ClInclude>
+ <ClInclude Include="..\..\..\include\grpc\support\avl.h">
+ <Filter>include\grpc\support</Filter>
+ </ClInclude>
<ClInclude Include="..\..\..\include\grpc\support\cmdline.h">
<Filter>include\grpc\support</Filter>
</ClInclude>
diff --git a/vsprojects/vcxproj/grpc/grpc.vcxproj b/vsprojects/vcxproj/grpc/grpc.vcxproj
index 1311bfb6ca..89ab6eda47 100644
--- a/vsprojects/vcxproj/grpc/grpc.vcxproj
+++ b/vsprojects/vcxproj/grpc/grpc.vcxproj
@@ -280,6 +280,7 @@
<ClInclude Include="..\..\..\src\core\channel\subchannel_call_holder.h" />
<ClInclude Include="..\..\..\src\core\client_config\client_config.h" />
<ClInclude Include="..\..\..\src\core\client_config\connector.h" />
+ <ClInclude Include="..\..\..\src\core\client_config\initial_connect_string.h" />
<ClInclude Include="..\..\..\src\core\client_config\lb_policies\pick_first.h" />
<ClInclude Include="..\..\..\src\core\client_config\lb_policies\round_robin.h" />
<ClInclude Include="..\..\..\src\core\client_config\lb_policy.h" />
@@ -456,6 +457,10 @@
</ClCompile>
<ClCompile Include="..\..\..\src\core\client_config\connector.c">
</ClCompile>
+ <ClCompile Include="..\..\..\src\core\client_config\default_initial_connect_string.c">
+ </ClCompile>
+ <ClCompile Include="..\..\..\src\core\client_config\initial_connect_string.c">
+ </ClCompile>
<ClCompile Include="..\..\..\src\core\client_config\lb_policies\pick_first.c">
</ClCompile>
<ClCompile Include="..\..\..\src\core\client_config\lb_policies\round_robin.c">
diff --git a/vsprojects/vcxproj/grpc/grpc.vcxproj.filters b/vsprojects/vcxproj/grpc/grpc.vcxproj.filters
index b20bd91486..a44d6e95bf 100644
--- a/vsprojects/vcxproj/grpc/grpc.vcxproj.filters
+++ b/vsprojects/vcxproj/grpc/grpc.vcxproj.filters
@@ -106,6 +106,12 @@
<ClCompile Include="..\..\..\src\core\client_config\connector.c">
<Filter>src\core\client_config</Filter>
</ClCompile>
+ <ClCompile Include="..\..\..\src\core\client_config\default_initial_connect_string.c">
+ <Filter>src\core\client_config</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\src\core\client_config\initial_connect_string.c">
+ <Filter>src\core\client_config</Filter>
+ </ClCompile>
<ClCompile Include="..\..\..\src\core\client_config\lb_policies\pick_first.c">
<Filter>src\core\client_config\lb_policies</Filter>
</ClCompile>
@@ -557,6 +563,9 @@
<ClInclude Include="..\..\..\src\core\client_config\connector.h">
<Filter>src\core\client_config</Filter>
</ClInclude>
+ <ClInclude Include="..\..\..\src\core\client_config\initial_connect_string.h">
+ <Filter>src\core\client_config</Filter>
+ </ClInclude>
<ClInclude Include="..\..\..\src\core\client_config\lb_policies\pick_first.h">
<Filter>src\core\client_config\lb_policies</Filter>
</ClInclude>
diff --git a/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj b/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj
index dba01c85df..374220d952 100644
--- a/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj
+++ b/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj
@@ -259,6 +259,7 @@
<ClInclude Include="..\..\..\src\core\channel\subchannel_call_holder.h" />
<ClInclude Include="..\..\..\src\core\client_config\client_config.h" />
<ClInclude Include="..\..\..\src\core\client_config\connector.h" />
+ <ClInclude Include="..\..\..\src\core\client_config\initial_connect_string.h" />
<ClInclude Include="..\..\..\src\core\client_config\lb_policies\pick_first.h" />
<ClInclude Include="..\..\..\src\core\client_config\lb_policies\round_robin.h" />
<ClInclude Include="..\..\..\src\core\client_config\lb_policy.h" />
@@ -395,6 +396,10 @@
</ClCompile>
<ClCompile Include="..\..\..\src\core\client_config\connector.c">
</ClCompile>
+ <ClCompile Include="..\..\..\src\core\client_config\default_initial_connect_string.c">
+ </ClCompile>
+ <ClCompile Include="..\..\..\src\core\client_config\initial_connect_string.c">
+ </ClCompile>
<ClCompile Include="..\..\..\src\core\client_config\lb_policies\pick_first.c">
</ClCompile>
<ClCompile Include="..\..\..\src\core\client_config\lb_policies\round_robin.c">
diff --git a/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj.filters b/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj.filters
index cf12c96f13..faadd82c4b 100644
--- a/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj.filters
+++ b/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj.filters
@@ -46,6 +46,12 @@
<ClCompile Include="..\..\..\src\core\client_config\connector.c">
<Filter>src\core\client_config</Filter>
</ClCompile>
+ <ClCompile Include="..\..\..\src\core\client_config\default_initial_connect_string.c">
+ <Filter>src\core\client_config</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\src\core\client_config\initial_connect_string.c">
+ <Filter>src\core\client_config</Filter>
+ </ClCompile>
<ClCompile Include="..\..\..\src\core\client_config\lb_policies\pick_first.c">
<Filter>src\core\client_config\lb_policies</Filter>
</ClCompile>
@@ -455,6 +461,9 @@
<ClInclude Include="..\..\..\src\core\client_config\connector.h">
<Filter>src\core\client_config</Filter>
</ClInclude>
+ <ClInclude Include="..\..\..\src\core\client_config\initial_connect_string.h">
+ <Filter>src\core\client_config</Filter>
+ </ClInclude>
<ClInclude Include="..\..\..\src\core\client_config\lb_policies\pick_first.h">
<Filter>src\core\client_config\lb_policies</Filter>
</ClInclude>
diff --git a/vsprojects/vcxproj/reconnect_server/reconnect_server.vcxproj b/vsprojects/vcxproj/reconnect_server/reconnect_server.vcxproj
index 088910acd6..48df3434a0 100644
--- a/vsprojects/vcxproj/reconnect_server/reconnect_server.vcxproj
+++ b/vsprojects/vcxproj/reconnect_server/reconnect_server.vcxproj
@@ -141,6 +141,9 @@
</ClCompile>
</ItemGroup>
<ItemGroup>
+ <ProjectReference Include="..\..\..\vsprojects\vcxproj\.\test_tcp_server\test_tcp_server.vcxproj">
+ <Project>{E3110C46-A148-FF65-08FD-3324829BE7FE}</Project>
+ </ProjectReference>
<ProjectReference Include="..\..\..\vsprojects\vcxproj\.\grpc_test_util\grpc_test_util.vcxproj">
<Project>{17BCAFC0-5FDC-4C94-AEB9-95F3E220614B}</Project>
</ProjectReference>
diff --git a/vsprojects/vcxproj/test/gpr_avl_test/gpr_avl_test.vcxproj b/vsprojects/vcxproj/test/gpr_avl_test/gpr_avl_test.vcxproj
new file mode 100644
index 0000000000..9703733235
--- /dev/null
+++ b/vsprojects/vcxproj/test/gpr_avl_test/gpr_avl_test.vcxproj
@@ -0,0 +1,178 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="..\..\..\..\vsprojects\packages\grpc.dependencies.openssl.1.0.2.3\build\native\grpc.dependencies.openssl.props" Condition="Exists('..\..\..\..\vsprojects\packages\grpc.dependencies.openssl.1.0.2.3\build\native\1.0.2.3.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>{144D8CFF-2737-A18A-DCFD-01603533D63F}</ProjectGuid>
+ </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="'$(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="..\..\..\..\vsprojects\global.props" />
+ <Import Project="..\..\..\..\vsprojects\openssl.props" />
+ <Import Project="..\..\..\..\vsprojects\winsock.props" />
+ <Import Project="..\..\..\..\vsprojects\zlib.props" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup Condition="'$(Configuration)'=='Debug'">
+ <TargetName>gpr_avl_test</TargetName>
+ <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
+ <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+ <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)'=='Release'">
+ <TargetName>gpr_avl_test</TargetName>
+ <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
+ <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+ <Configuration-grpc_dependencies_openssl>Debug</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;_USE_32BIT_TIME_T;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <SDLCheck>true</SDLCheck>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <TreatWarningAsError>true</TreatWarningAsError>
+ <DebugInformationFormat Condition="$(Jenkins)">None</DebugInformationFormat>
+ </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>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation Condition="!$(Jenkins)">true</GenerateDebugInformation>
+ <GenerateDebugInformation Condition="$(Jenkins)">false</GenerateDebugInformation>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <PrecompiledHeader>NotUsing</PrecompiledHeader>
+ <Optimization>MaxSpeed</Optimization>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;_USE_32BIT_TIME_T;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <SDLCheck>true</SDLCheck>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <TreatWarningAsError>true</TreatWarningAsError>
+ <DebugInformationFormat Condition="$(Jenkins)">None</DebugInformationFormat>
+ </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>
+ <WarningLevel>Level3</WarningLevel>
+ <PrecompiledHeader>NotUsing</PrecompiledHeader>
+ <Optimization>MaxSpeed</Optimization>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <SDLCheck>true</SDLCheck>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <TreatWarningAsError>true</TreatWarningAsError>
+ <DebugInformationFormat Condition="$(Jenkins)">None</DebugInformationFormat>
+ </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="..\..\..\..\test\core\support\avl_test.c">
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\..\..\..\vsprojects\vcxproj\.\gpr_test_util\gpr_test_util.vcxproj">
+ <Project>{EAB0A629-17A9-44DB-B5FF-E91A721FE037}</Project>
+ </ProjectReference>
+ <ProjectReference Include="..\..\..\..\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="..\..\..\..\vsprojects\packages\grpc.dependencies.zlib.redist.1.2.8.9\build\native\grpc.dependencies.zlib.redist.targets" Condition="Exists('..\..\..\..\vsprojects\packages\grpc.dependencies.zlib.redist.1.2.8.9\build\native\grpc.dependencies\grpc.dependencies.zlib.targets')" />
+ <Import Project="..\..\..\..\vsprojects\packages\grpc.dependencies.zlib.1.2.8.9\build\native\grpc.dependencies.zlib.targets" Condition="Exists('..\..\..\..\vsprojects\packages\grpc.dependencies.zlib.1.2.8.9\build\native\grpc.dependencies\grpc.dependencies.zlib.targets')" />
+ <Import Project="..\..\..\..\vsprojects\packages\grpc.dependencies.openssl.redist.1.0.2.3\build\native\grpc.dependencies.openssl.redist.targets" Condition="Exists('..\..\..\..\vsprojects\packages\grpc.dependencies.openssl.redist.1.0.2.3\build\native\grpc.dependencies\grpc.dependencies.openssl.targets')" />
+ <Import Project="..\..\..\..\vsprojects\packages\grpc.dependencies.openssl.1.0.2.3\build\native\grpc.dependencies.openssl.targets" Condition="Exists('..\..\..\..\vsprojects\packages\grpc.dependencies.openssl.1.0.2.3\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('..\..\..\..\vsprojects\packages\grpc.dependencies.zlib.redist.1.2.8.9\build\native\grpc.dependencies.zlib.redist.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\vsprojects\packages\grpc.dependencies.zlib.redist.1.2.8.9\build\native\grpc.dependencies.zlib.redist.targets')" />
+ <Error Condition="!Exists('..\..\..\..\vsprojects\packages\grpc.dependencies.zlib.1.2.8.9\build\native\grpc.dependencies.zlib.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\vsprojects\packages\grpc.dependencies.zlib.1.2.8.9\build\native\grpc.dependencies.zlib.targets')" />
+ <Error Condition="!Exists('..\..\..\..\vsprojects\packages\grpc.dependencies.openssl.redist.1.0.2.3\build\native\grpc.dependencies.openssl.redist.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\vsprojects\packages\grpc.dependencies.openssl.redist.1.0.2.3\build\native\grpc.dependencies.openssl.redist.targets')" />
+ <Error Condition="!Exists('..\..\..\..\vsprojects\packages\grpc.dependencies.openssl.1.0.2.3\build\native\grpc.dependencies.openssl.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\vsprojects\packages\grpc.dependencies.openssl.1.0.2.3\build\native\grpc.dependencies.openssl.props')" />
+ <Error Condition="!Exists('..\..\..\..\vsprojects\packages\grpc.dependencies.openssl.1.0.2.3\build\native\grpc.dependencies.openssl.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\vsprojects\packages\grpc.dependencies.openssl.1.0.2.3\build\native\grpc.dependencies.openssl.targets')" />
+ </Target>
+</Project>
+
diff --git a/vsprojects/vcxproj/test/gpr_avl_test/gpr_avl_test.vcxproj.filters b/vsprojects/vcxproj/test/gpr_avl_test/gpr_avl_test.vcxproj.filters
new file mode 100644
index 0000000000..bccfdfdff1
--- /dev/null
+++ b/vsprojects/vcxproj/test/gpr_avl_test/gpr_avl_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="..\..\..\..\test\core\support\avl_test.c">
+ <Filter>test\core\support</Filter>
+ </ClCompile>
+ </ItemGroup>
+
+ <ItemGroup>
+ <Filter Include="test">
+ <UniqueIdentifier>{36d067be-341d-9b6e-8ebc-bc48318fa916}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="test\core">
+ <UniqueIdentifier>{4f3292f9-bb3f-e90c-324d-120ff96d394a}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="test\core\support">
+ <UniqueIdentifier>{d02b711f-14e2-086b-d3a5-48e2d82145ee}</UniqueIdentifier>
+ </Filter>
+ </ItemGroup>
+</Project>
+
diff --git a/vsprojects/vcxproj/test/reconnect_interop_server/reconnect_interop_server.vcxproj b/vsprojects/vcxproj/test/reconnect_interop_server/reconnect_interop_server.vcxproj
index 080c5b2797..5af127fdb3 100644
--- a/vsprojects/vcxproj/test/reconnect_interop_server/reconnect_interop_server.vcxproj
+++ b/vsprojects/vcxproj/test/reconnect_interop_server/reconnect_interop_server.vcxproj
@@ -176,6 +176,9 @@
<ProjectReference Include="..\..\..\..\vsprojects\vcxproj\.\reconnect_server\reconnect_server.vcxproj">
<Project>{929C90AE-483F-AC80-EF93-226199F9E428}</Project>
</ProjectReference>
+ <ProjectReference Include="..\..\..\..\vsprojects\vcxproj\.\test_tcp_server\test_tcp_server.vcxproj">
+ <Project>{E3110C46-A148-FF65-08FD-3324829BE7FE}</Project>
+ </ProjectReference>
<ProjectReference Include="..\..\..\..\vsprojects\vcxproj\.\grpc++_test_util\grpc++_test_util.vcxproj">
<Project>{0BE77741-552A-929B-A497-4EF7ECE17A64}</Project>
</ProjectReference>
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
new file mode 100644
index 0000000000..c5cd36c896
--- /dev/null
+++ b/vsprojects/vcxproj/test/set_initial_connect_string_test/set_initial_connect_string_test.vcxproj
@@ -0,0 +1,187 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="..\..\..\..\vsprojects\packages\grpc.dependencies.openssl.1.0.2.3\build\native\grpc.dependencies.openssl.props" Condition="Exists('..\..\..\..\vsprojects\packages\grpc.dependencies.openssl.1.0.2.3\build\native\1.0.2.3.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>{4A48E5A5-2E69-ED6D-063C-C297180A54D0}</ProjectGuid>
+ </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="'$(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="..\..\..\..\vsprojects\global.props" />
+ <Import Project="..\..\..\..\vsprojects\openssl.props" />
+ <Import Project="..\..\..\..\vsprojects\winsock.props" />
+ <Import Project="..\..\..\..\vsprojects\zlib.props" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup Condition="'$(Configuration)'=='Debug'">
+ <TargetName>set_initial_connect_string_test</TargetName>
+ <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
+ <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+ <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)'=='Release'">
+ <TargetName>set_initial_connect_string_test</TargetName>
+ <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
+ <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+ <Configuration-grpc_dependencies_openssl>Debug</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;_USE_32BIT_TIME_T;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <SDLCheck>true</SDLCheck>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <TreatWarningAsError>true</TreatWarningAsError>
+ <DebugInformationFormat Condition="$(Jenkins)">None</DebugInformationFormat>
+ </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>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation Condition="!$(Jenkins)">true</GenerateDebugInformation>
+ <GenerateDebugInformation Condition="$(Jenkins)">false</GenerateDebugInformation>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <PrecompiledHeader>NotUsing</PrecompiledHeader>
+ <Optimization>MaxSpeed</Optimization>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;_USE_32BIT_TIME_T;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <SDLCheck>true</SDLCheck>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <TreatWarningAsError>true</TreatWarningAsError>
+ <DebugInformationFormat Condition="$(Jenkins)">None</DebugInformationFormat>
+ </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>
+ <WarningLevel>Level3</WarningLevel>
+ <PrecompiledHeader>NotUsing</PrecompiledHeader>
+ <Optimization>MaxSpeed</Optimization>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <SDLCheck>true</SDLCheck>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <TreatWarningAsError>true</TreatWarningAsError>
+ <DebugInformationFormat Condition="$(Jenkins)">None</DebugInformationFormat>
+ </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="..\..\..\..\test\core\client_config\set_initial_connect_string_test.c">
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\..\..\..\vsprojects\vcxproj\.\test_tcp_server\test_tcp_server.vcxproj">
+ <Project>{E3110C46-A148-FF65-08FD-3324829BE7FE}</Project>
+ </ProjectReference>
+ <ProjectReference Include="..\..\..\..\vsprojects\vcxproj\.\grpc_test_util\grpc_test_util.vcxproj">
+ <Project>{17BCAFC0-5FDC-4C94-AEB9-95F3E220614B}</Project>
+ </ProjectReference>
+ <ProjectReference Include="..\..\..\..\vsprojects\vcxproj\.\grpc\grpc.vcxproj">
+ <Project>{29D16885-7228-4C31-81ED-5F9187C7F2A9}</Project>
+ </ProjectReference>
+ <ProjectReference Include="..\..\..\..\vsprojects\vcxproj\.\gpr_test_util\gpr_test_util.vcxproj">
+ <Project>{EAB0A629-17A9-44DB-B5FF-E91A721FE037}</Project>
+ </ProjectReference>
+ <ProjectReference Include="..\..\..\..\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="..\..\..\..\vsprojects\packages\grpc.dependencies.zlib.redist.1.2.8.9\build\native\grpc.dependencies.zlib.redist.targets" Condition="Exists('..\..\..\..\vsprojects\packages\grpc.dependencies.zlib.redist.1.2.8.9\build\native\grpc.dependencies\grpc.dependencies.zlib.targets')" />
+ <Import Project="..\..\..\..\vsprojects\packages\grpc.dependencies.zlib.1.2.8.9\build\native\grpc.dependencies.zlib.targets" Condition="Exists('..\..\..\..\vsprojects\packages\grpc.dependencies.zlib.1.2.8.9\build\native\grpc.dependencies\grpc.dependencies.zlib.targets')" />
+ <Import Project="..\..\..\..\vsprojects\packages\grpc.dependencies.openssl.redist.1.0.2.3\build\native\grpc.dependencies.openssl.redist.targets" Condition="Exists('..\..\..\..\vsprojects\packages\grpc.dependencies.openssl.redist.1.0.2.3\build\native\grpc.dependencies\grpc.dependencies.openssl.targets')" />
+ <Import Project="..\..\..\..\vsprojects\packages\grpc.dependencies.openssl.1.0.2.3\build\native\grpc.dependencies.openssl.targets" Condition="Exists('..\..\..\..\vsprojects\packages\grpc.dependencies.openssl.1.0.2.3\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('..\..\..\..\vsprojects\packages\grpc.dependencies.zlib.redist.1.2.8.9\build\native\grpc.dependencies.zlib.redist.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\vsprojects\packages\grpc.dependencies.zlib.redist.1.2.8.9\build\native\grpc.dependencies.zlib.redist.targets')" />
+ <Error Condition="!Exists('..\..\..\..\vsprojects\packages\grpc.dependencies.zlib.1.2.8.9\build\native\grpc.dependencies.zlib.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\vsprojects\packages\grpc.dependencies.zlib.1.2.8.9\build\native\grpc.dependencies.zlib.targets')" />
+ <Error Condition="!Exists('..\..\..\..\vsprojects\packages\grpc.dependencies.openssl.redist.1.0.2.3\build\native\grpc.dependencies.openssl.redist.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\vsprojects\packages\grpc.dependencies.openssl.redist.1.0.2.3\build\native\grpc.dependencies.openssl.redist.targets')" />
+ <Error Condition="!Exists('..\..\..\..\vsprojects\packages\grpc.dependencies.openssl.1.0.2.3\build\native\grpc.dependencies.openssl.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\vsprojects\packages\grpc.dependencies.openssl.1.0.2.3\build\native\grpc.dependencies.openssl.props')" />
+ <Error Condition="!Exists('..\..\..\..\vsprojects\packages\grpc.dependencies.openssl.1.0.2.3\build\native\grpc.dependencies.openssl.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\vsprojects\packages\grpc.dependencies.openssl.1.0.2.3\build\native\grpc.dependencies.openssl.targets')" />
+ </Target>
+</Project>
+
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
new file mode 100644
index 0000000000..c32a871d31
--- /dev/null
+++ b/vsprojects/vcxproj/test/set_initial_connect_string_test/set_initial_connect_string_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="..\..\..\..\test\core\client_config\set_initial_connect_string_test.c">
+ <Filter>test\core\client_config</Filter>
+ </ClCompile>
+ </ItemGroup>
+
+ <ItemGroup>
+ <Filter Include="test">
+ <UniqueIdentifier>{413358e4-3165-f09d-071c-ee4f2ca0b826}</UniqueIdentifier>
+ </Filter>
+ <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>
+ </ItemGroup>
+</Project>
+
diff --git a/vsprojects/vcxproj/test_tcp_server/test_tcp_server.vcxproj b/vsprojects/vcxproj/test_tcp_server/test_tcp_server.vcxproj
new file mode 100644
index 0000000000..7f57b837f5
--- /dev/null
+++ b/vsprojects/vcxproj/test_tcp_server/test_tcp_server.vcxproj
@@ -0,0 +1,166 @@
+<?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>{E3110C46-A148-FF65-08FD-3324829BE7FE}</ProjectGuid>
+ </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="'$(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="..\..\..\vsprojects\global.props" />
+ <Import Project="..\..\..\vsprojects\winsock.props" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup Condition="'$(Configuration)'=='Debug'">
+ <TargetName>test_tcp_server</TargetName>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)'=='Release'">
+ <TargetName>test_tcp_server</TargetName>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <PrecompiledHeader>NotUsing</PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;_USE_32BIT_TIME_T;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <SDLCheck>true</SDLCheck>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <TreatWarningAsError>true</TreatWarningAsError>
+ <DebugInformationFormat Condition="$(Jenkins)">None</DebugInformationFormat>
+ </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>
+ </ClCompile>
+ <Link>
+ <SubSystem>Windows</SubSystem>
+ <GenerateDebugInformation Condition="!$(Jenkins)">true</GenerateDebugInformation>
+ <GenerateDebugInformation Condition="$(Jenkins)">false</GenerateDebugInformation>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <PrecompiledHeader>NotUsing</PrecompiledHeader>
+ <Optimization>MaxSpeed</Optimization>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;_USE_32BIT_TIME_T;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <SDLCheck>true</SDLCheck>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <TreatWarningAsError>true</TreatWarningAsError>
+ <DebugInformationFormat Condition="$(Jenkins)">None</DebugInformationFormat>
+ </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>
+ <WarningLevel>Level3</WarningLevel>
+ <PrecompiledHeader>NotUsing</PrecompiledHeader>
+ <Optimization>MaxSpeed</Optimization>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <SDLCheck>true</SDLCheck>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <TreatWarningAsError>true</TreatWarningAsError>
+ <DebugInformationFormat Condition="$(Jenkins)">None</DebugInformationFormat>
+ </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="..\..\..\test\core\util\test_tcp_server.h" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\..\test\core\util\test_tcp_server.c">
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\..\..\vsprojects\vcxproj\.\grpc_test_util\grpc_test_util.vcxproj">
+ <Project>{17BCAFC0-5FDC-4C94-AEB9-95F3E220614B}</Project>
+ </ProjectReference>
+ <ProjectReference Include="..\..\..\vsprojects\vcxproj\.\grpc\grpc.vcxproj">
+ <Project>{29D16885-7228-4C31-81ED-5F9187C7F2A9}</Project>
+ </ProjectReference>
+ <ProjectReference Include="..\..\..\vsprojects\vcxproj\.\gpr_test_util\gpr_test_util.vcxproj">
+ <Project>{EAB0A629-17A9-44DB-B5FF-E91A721FE037}</Project>
+ </ProjectReference>
+ <ProjectReference Include="..\..\..\vsprojects\vcxproj\.\gpr\gpr.vcxproj">
+ <Project>{B23D3D1A-9438-4EDA-BEB6-9A0A03D17792}</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/test_tcp_server/test_tcp_server.vcxproj.filters b/vsprojects/vcxproj/test_tcp_server/test_tcp_server.vcxproj.filters
new file mode 100644
index 0000000000..28aa926021
--- /dev/null
+++ b/vsprojects/vcxproj/test_tcp_server/test_tcp_server.vcxproj.filters
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <ClCompile Include="..\..\..\test\core\util\test_tcp_server.c">
+ <Filter>test\core\util</Filter>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="..\..\..\test\core\util\test_tcp_server.h">
+ <Filter>test\core\util</Filter>
+ </ClInclude>
+ </ItemGroup>
+
+ <ItemGroup>
+ <Filter Include="test">
+ <UniqueIdentifier>{28134501-94bd-f7ba-b77b-c4863be94758}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="test\core">
+ <UniqueIdentifier>{6e538eb5-ce76-212d-d785-e8450b89f1ba}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="test\core\util">
+ <UniqueIdentifier>{f33a1bbf-69a0-d776-ab7c-2fd5c382b6d3}</UniqueIdentifier>
+ </Filter>
+ </ItemGroup>
+</Project>
+