###############################################################################
# Copyright (c) 2000, 2018 IBM Corporation and others.
# All rights reserved. This program and the accompanying materials
# are made available under the terms of the Eclipse Public License v1.0
# which accompanies this distribution, and is available at
# http://www.eclipse.org/legal/epl-v10.html
#
# Contributors:
#     IBM Corporation - initial API and implementation
#     Google Inc - add support for accepting multiple connections
###############################################################################

PacketReceiveManager_Got_IOException_from_Virtual_Machine_1=Got IOException from Virtual Machine
PacketReceiveManager_Got_IOException_from_Virtual_Machine_2=Got IOException from Virtual Machine
PacketSendManager_Got_IOException_from_Virtual_Machine_1=Got IOException from Virtual Machine
SocketAttachingConnectorImpl_Machine_name_to_which_to_attach_for_VM_connections_1=Machine name to which to attach for VM connections
#Separator for Remote Java application socket attach and listen arguments
SocketConnectionLabelSeparator=:
#For translation of separator ":" it should be consistent to the translated value of SocketConnectionLabelSeparator
SocketAttachingConnectorImpl_Host_2=&Host:
SocketAttachingConnectorImpl_Port_number_to_which_to_attach_for_VM_connections_3=Port number to which to attach for VM connections
#For translation of separator ":" it should be consistent to the translated value of SocketConnectionLabelSeparator
SocketAttachingConnectorImpl_Port_4=Po&rt:
SocketAttachingConnectorImpl_1=Connection Timeout
#For translation of separator ":" it should be consistent to the translated value of SocketConnectionLabelSeparator
SocketAttachingConnectorImpl_2=Connection Timeout:
SocketAttachingConnectorImpl_Attaches_by_socket_to_other_VMs_5=Attaches by socket to other VMs
SocketAttachingConnectorImpl_Connection_argument_is_not_of_the_right_type_6=Connection argument is not of the right type
SocketAttachingConnectorImpl_Necessary_connection_argument_is_null_7=Necessary connection argument is null
SocketAttachingConnectorImpl_Connection_argument_is_not_a_number_8=Connection argument is not a number
SocketLaunchingConnectorImpl_Home_directory_of_the_SDK_or_runtime_environment_used_to_launch_the_application_1=Home directory of the SDK or runtime environment used to launch the application
SocketLaunchingConnectorImpl_Home_2=Home:
SocketLaunchingConnectorImpl_Launched_VM_options_3=Launched VM options
SocketLaunchingConnectorImpl_Options_4=Options:
SocketLaunchingConnectorImpl_Main_class_and_arguments__or_if__jar_is_an_option__the_main_jar_file_and_arguments_5=Main class and arguments, or if -jar is an option, the main jar file and arguments
SocketLaunchingConnectorImpl_Main_6=Main:
SocketLaunchingConnectorImpl_All_threads_will_be_suspended_before_execution_of_main_7=All threads will be suspended before execution of main
SocketLaunchingConnectorImpl_Suspend_8=Suspend:
SocketLaunchingConnectorImpl_Character_used_to_combine_space_delimited_text_into_a_single_command_line_argument_9=Character used to combine space-delimited text into a single command line argument
SocketLaunchingConnectorImpl_Quote_10=Quote:
SocketLaunchingConnectorImpl_Name_of_the_Java_VM_launcher_11=Name of the Java VM launcher
SocketLaunchingConnectorImpl_Launcher_12=Launcher:
SocketLaunchingConnectorImpl_Launches_target_using_Sun_Java_VM_command_line_and_attaches_to_it_13=Launches target using Sun Java VM command line and attaches to it
SocketLaunchingConnectorImpl_Connection_argument_is_not_of_the_right_type_14=Connection argument is not of the right type
SocketLaunchingConnectorImpl_Necessary_connection_argument_is_null_15=Necessary connection argument is null
SocketLaunchingConnectorImpl_Connection_argument_is_not_a_number_16=Connection argument is not a number
SocketListeningConnectorImpl_Port_number_at_which_to_listen_for_VM_connections_1=Port number at which to listen for VM connections
#For translation of separator ":" it should be consistent to the translated value of SocketConnectionLabelSeparator
SocketListeningConnectorImpl_Port_2=Po&rt:
SocketListeningConnectorImpl_Timeout_before_accept_returns_3=Timeout before accept returns
#For translation of separator ":" it should be consistent to the translated value of SocketConnectionLabelSeparator
SocketListeningConnectorImpl_Timeout_4=Timeout:
SocketListeningConnectorImpl_Accepts_socket_connections_initiated_by_other_VMs_5=Accepts socket connections initiated by other VMs
SocketListeningConnectorImpl_Connection_argument_is_not_of_the_right_type_6=Connection argument is not of the right type
SocketListeningConnectorImpl_Necessary_connection_argument_is_null_7=Necessary connection argument is null
SocketListeningConnectorImpl_Connection_argument_is_not_a_number_8=Connection argument is not a number
#For translation of separator ":" it should be consistent to the translated value of SocketConnectionLabelSeparator
SocketListeningConnectorImpl_Limit=Connection &limit:
SocketListeningConnectorImpl_Limit_incoming_connections=Limit incoming connections (0 = no limit)
SocketListeningConnectorImpl_ListeningConnector_Socket_Port=ListeningConnector Socket Port=
SocketRawLaunchingConnectorImpl_Raw_command_to_start_the_debugged_application_VM_1=Raw command to start the debugged application VM
SocketRawLaunchingConnectorImpl_Command_2=Command:
SocketRawLaunchingConnectorImpl_Address_from_which_to_listen_for_a_connection_after_the_raw_command_is_run_3=Address from which to listen for a connection after the raw command is run
SocketRawLaunchingConnectorImpl_Address_4=Address:
SocketRawLaunchingConnectorImpl_Character_used_to_combine_space_delimited_text_into_a_single_command_line_argument_5=Character used to combine space-delimited text into a single command line argument
SocketRawLaunchingConnectorImpl_Quote_6=Quote:
SocketRawLaunchingConnectorImpl_Launches_target_using_user_specified_command_line_and_attaches_to_it_7=Launches target using user-specified command line and attaches to it
SocketRawLaunchingConnectorImpl_Connection_argument_is_not_of_the_right_type_8=Connection argument is not of the right type
SocketRawLaunchingConnectorImpl_Necessary_connection_argument_is_null_9=Necessary connection argument is null
SocketRawLaunchingConnectorImpl_Connection_argument_is_not_a_number_10=Connection argument is not a number
SocketLaunchingConnectorImpl_VM_did_not_connect_within_given_time___0__ms_1=VM did not connect within given time: {0} ms
PacketSendManager_Got__0__from_Virtual_Machine_1=Got {0} from Virtual Machine
PacketSendManager_Got__0__from_Virtual_Machine___1__1=Got {0} from Virtual Machine: {1}
PacketReceiveManager_Got__0__from_Virtual_Machine_1=Got {0} from Virtual Machine
PacketReceiveManager_Got__0__from_Virtual_Machine___1__1=Got {0} from Virtual Machine: {1}
PacketReceiveManager_0=Timeout occurred while waiting for packet {0}.
SocketTransportService_0=Attach Thread
SocketTransportService_1=Handshake Thread