###############################################################################
# Copyright (c) 2000, 2012 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
###############################################################################

ArrayReferenceImpl_Invalid_index_of_array_reference_given_1=Invalid index of array reference given
ArrayReferenceImpl_Invalid_ArrayReference_Value_tag_encountered___2=Invalid ArrayReference Value tag encountered:
ArrayReferenceImpl_Attempted_to_set_more_values_in_array_than_length_of_array_3=Attempted to set more values in array than length of array
ArrayReferenceImpl_Attempted_to_set_more_values_in_array_than_given_4=Attempted to set more values in array than given
ArrayReferenceImpl__Garbage_Collected__ArrayReference_5=(Garbage Collected) ArrayReference
ArrayTypeImpl_getValues_not_allowed_on_array_1=get values not allowed on array
ArrayTypeImpl_No_source_name_for_Arrays_1=No source name for Arrays
ClassTypeImpl_Class_does_not_contain_given_method_1=Class does not contain given method
ClassTypeImpl_Number_of_arguments_doesn__t_match_2=Number of arguments does not match
ClassTypeImpl_Method_is_constructor_or_intitializer_3=Method is constructor or initializer
ClassTypeImpl_Class_does_not_contain_given_method_4=Class does not contain given method
ClassTypeImpl_Number_of_arguments_doesn__t_match_5=Number of arguments does not match
ClassTypeImpl_Method_is_not_a_constructor_6=Method is not a constructor
FieldImpl_Can__t_compare_field_to_given_object_1=Cannot compare field to given object
FieldImpl_Got_FieldID_of_ReferenceType_that_is_not_a_member_of_the_ReferenceType_2=Got FieldID of ReferenceType that is not a member of the ReferenceType
LocalVariableImpl_Can__t_compare_local_variable_to_given_object_1=Cannot compare local variable to given object
LocalVariableImpl_Code_indexes_are_assumed_to_be_always_positive_2=Code indexes are assumed to be always positive
LocalVariableImpl_The_stack_frame__s_method_does_not_match_this_variable__s_method_3=The stack frame\'s method does not match this variable\'s method
LocalVariableImpl_Code_indexes_are_assumed_to_be_always_positive_4=Code indexes are assumed to be always positive
LocationImpl_Can__t_compare_location_to_given_object_1=Cannot compare location to given object
LocationImpl_Code_indexes_are_assumed_to_be_always_positive_2=Code indexes are assumed to be always positive
LocationImpl_sourcename___0___line___1__3=sourcename: {0}, line: {1}
MethodImpl_Got_empty_line_number_table_for_this_method_1=Got empty line number table for this method
MethodImpl_No_line_number_information_available_2=No line number information available
MethodImpl_Got_empty_line_number_table_for_this_method_3=Got empty line number table for this method
MethodImpl_Invalid_code_index_of_a_location_given_4=Invalid code index of a location given
MethodImpl_Can__t_compare_method_to_given_object_6=Cannot compare method to given object
MethodImpl_No_local_variable_information_available_9=No local variable information available
MethodImpl_Got_MethodID_of_ReferenceType_that_is_not_a_member_of_the_ReferenceType_10=Got MethodID of ReferenceType that is not a member of the ReferenceType
MethodImpl_No_valid_location_at_the_specified_code_index__0__2=No valid location at the specified code index {0}

MirrorImpl_Got_error_code_in_reply___1=Got error code in reply:
MirrorImpl_Got_invalid_data___2=Got invalid data:
ObjectReferenceImpl_Retrieved_a_different_number_of_values_from_the_VM_than_requested_1=Retrieved a different number of values from the VM than requested
ObjectReferenceImpl_Class_does_not_contain_given_method_2=Class does not contain given method
ObjectReferenceImpl_Number_of_arguments_doesn__t_match_3=Number of arguments does not match
ObjectReferenceImpl_Method_is_constructor_or_intitializer_4=Method is constructor or initializer
ObjectReferenceImpl_Method_is_abstract_and_can_therefore_not_be_invoked_nonvirtual_5=Method is abstract and can therefore not be invoked nonvirtual
ObjectReferenceImpl_One_of_the_arguments_of_ObjectReference_invokeMethod___6=One of the arguments of ObjectReference.invokeMethod()
ObjectReferenceImpl__Garbage_Collected__ObjectReference__8=(Garbage Collected) ObjectReference
ObjectReferenceImpl_Invalid_ObjectID_tag_encountered___9=Invalid ObjectID tag encountered:
PrimitiveTypeImpl_Invalid_primitive_signature____1=Invalid primitive signature: "
PrimitiveTypeImpl___2="
PrimitiveTypeImpl_A_PrimitiveType_does_not_have_modifiers_3=A PrimitiveType does not have modifiers
PrimitiveValueImpl_Invalid_Primitive_Value_tag_encountered___2=Invalid Primitive Value tag encountered:
ReferenceTypeImpl_Obsolete_method_1=Obsolete method
ReferenceTypeImpl_Retrieved_a_different_number_of_values_from_the_VM_than_requested_3=Retrieved a different number of values from the VM than requested
ReferenceTypeImpl_Can__t_compare_reference_type_to_given_object_4=Cannot compare reference type to given object
ReferenceTypeImpl_Source_name_is_not_known_7=Source name is not known
ReferenceTypeImpl_no_class_version_support24=VM does not support class file version information.
ReferenceTypeImpl_no_constant_pool_support=VM does not support constant pool information.
ReferenceTypeImpl_Invalid_ReferenceTypeID_tag_encountered___8=Invalid ReferenceTypeID tag encountered:
ReferenceTypeImpl_Type_has_not_been_loaded_10=Type has not been loaded
StackFrameImpl_Retrieved_a_different_number_of_values_from_the_VM_than_requested_1=Retrieved a different number of values from the VM than requested
StringReferenceImpl__Garbage_Collected__StringReference__3=(Garbage Collected) StringReference
ThreadReferenceImpl_Thread_was_not_suspended_1=Thread was not suspended
ThreadReferenceImpl_Invalid_index_of_stack_frames_given_4=Invalid index of stack frames given
ThreadReferenceImpl_Thread_was_not_suspended_5=Thread was not suspended
ThreadReferenceImpl_thread_not_suspended=Thread must be suspended to force early return.
ThreadReferenceImpl_thread_no_stackframes=Thread has no stack frames.
ThreadReferenceImpl_thread_object_invalid=The thread or object is invalid.
ThreadReferenceImpl_thread_or_value_unknown=The thread or value is an unknown ID.
ThreadReferenceImpl_incapatible_return_type=The specified return type is not compatible with the return type of the method.
ThreadReferenceImpl_Unknown_thread_status_received___6=Unknown thread status received:
ThreadReferenceImpl_no_force_early_return_on_threads=VM does not support forcing early return on threads.
ThreadReferenceImpl_thread_cannot_force_native_method=Cannot force return from a native method.
ThreadReferenceImpl_Stop_argument_not_an_instance_of_java_lang_Throwable_in_the_target_VM_7=Stop argument not an instance of java.lang.Throwable in the target VM
ThreadReferenceImpl_8={0} (name={1}, id={2})
ThreadReferenceImpl_vm_read_only=The VM is read-only and cannot be modified.
ThreadReferenceImpl__Garbage_Collected__ThreadReference__9=(Garbage Collected) ThreadReference
ThreadReferenceImpl_Unable_to_pop_the_requested_stack_frame_from_the_call_stack__Reasons_include__The_frame_id_was_invalid__The_thread_was_resumed__10=Unable to pop the requested stack frame from the call stack (Reasons include: The frame id was invalid; The thread was resumed)
ThreadReferenceImpl_Unable_to_pop_the_requested_stack_frame__The_requested_stack_frame_is_not_suspended_11=Unable to pop the requested stack frame. The requested stack frame is not suspended
ThreadReferenceImpl_Unable_to_pop_the_requested_stack_frame_from_the_call_stack__Reasons_include__The_requested_frame_was_the_last_frame_on_the_call_stack__The_requested_frame_was_the_last_frame_above_a_native_frame__12=Unable to pop the requested stack frame from the call stack (Reasons include: The requested frame was the last frame on the call stack; The requested frame was the last frame above a native frame)
TypeImpl__Unloaded_Type__1=(Unloaded Type)
TypeImpl_Can__t_covert_method_signature_to_tag___9=Cannot convert method signature to tag:
TypeImpl_Invalid_signature____10=Invalid signature: "
TypeImpl___11="
TypeImpl_Can__t_convert_method_signature_to_name_2=Cannot convert method signature to name
ValueImpl_Invalid_Value_tag_encountered___1=Invalid Value tag encountered:
VirtualMachineImpl_Target_VM__0__does_not_support_Hot_Code_Replacement_1=Target VM {0} does not support Hot Code Replacement
VirtualMachineImpl_Failed_to_get_ID_sizes_2=Failed to get ID sizes
VirtualMachineImpl_count_less_than_zero=The count of refTypes cannot be less than zero.
VirtualMachineImpl_Invalid_result_flag_in_Classes_Have_Changed_response___3=Invalid result flag in Classes Have Changed response:
VirtualMachineImpl__4=
VirtualMachineImpl_0=Packet Receive Manager
VirtualMachineImpl_1=Packet Send Manager
VirtualMachineImpl_2=Reference type list cannot be null.
VirtualMachineImpl_3=Improper instance counts between VM and client.
VirtualMachineManagerImpl_Could_not_open_verbose_file___1=Could not open verbose file "
VirtualMachineManagerImpl_____2=":
VoidTypeImpl_A_VoidType_does_not_have_modifiers_1=A VoidType does not have modifiers
VirtualMachineImpl_Add_method_not_implemented_1=Add method not implemented
VirtualMachineImpl_Scheme_change_not_implemented_2=Scheme change not implemented
VirtualMachineImpl_Hierarchy_change_not_implemented_3=Hierarchy change not implemented
VirtualMachineImpl_Delete_method_not_implemented_4=Delete method not implemented
VirtualMachineImpl_Class_modifiers_change_not_implemented_5=Class modifiers change not implemented
VirtualMachineImpl_Method_modifiers_change_not_implemented_6=Method modifiers change not implemented
VerboseWriter___unknown_value__1=\ <unknown value>
VerboseWriter__unknown_bit__2=<unknown bit>
VerboseWriter__none__4=<none>
ArrayReferenceImpl_Invalid_index_1=Invalid index
ArrayReferenceImpl_Invalid_srcIndex_2=Invalid srcIndex
ArrayReferenceImpl_Invalid_number_of_value_to_set_in_array_3=Invalid number of value to set in array
ValueImpl_Type_of_the_value_not_compatible_with_the_expected_type__1=Generated value ({0}) is not compatible with declared type ({1}).
ArrayReferenceImpl_Invalid_number_of_value_to_get_from_array_1=Invalid number of value to get from array
ArrayReferenceImpl_Attempted_to_get_more_values_from_array_than_length_of_array_2=Attempted to get more values from array than length of array
ReferenceTypeImpl_28=SMAP parsing: {0} already used as file id in {1}
ReferenceTypeImpl_29=SMAP parsing: {0} is not a valid lineFileId.
ReferenceTypeImpl_27=Heap walking is not supported by this VM.
ReferenceTypeImpl_26=The maximum value cannot be less than zero.
ReferenceTypeImpl_30=No source names for this stratum.
ReferenceTypeImpl_31=Source Debug Extension not defined
ReferenceTypeImpl_32=source debug extension
ReferenceTypeImpl_34=No information for the specified sourceName.
SourceDebugExtensionParser_0=SMAP parsing: Unexpected end of file
SourceDebugExtensionParser_2=SMAP parsing: The default stratum is not defined in a stratum section.
SourceDebugExtensionParser_3=SMAP parsing: Invalid ID.
SourceDebugExtensionParser_4=SMAP parsing: Carriage return expected.
SourceDebugExtensionParser_5=SMAP parsing: Invalid output file name.
SourceDebugExtensionParser_6=SMAP parsing: Invalid default stratum id.
SourceDebugExtensionParser_7=SMAP parsing: Stratum section expected.
SourceDebugExtensionParser_8=SMAP parsing: Invalid stratum id.
SourceDebugExtensionParser_9=SMAP parsing: Stratum ''{0}'' already defined.
SourceDebugExtensionParser_10=SMAP parsing: File section already defined for stratum ''{0}''.
SourceDebugExtensionParser_11=SMAP parsing: Line section already defined for stratum ''{0}''.
SourceDebugExtensionParser_12=SMAP parsing: Unexpected token ''{0}''.
SourceDebugExtensionParser_13=SMAP parsing: No file section defined for stratum ''{0}''.
SourceDebugExtensionParser_14=SMAP parsing: No line section defined for stratum ''{0}''.
SourceDebugExtensionParser_16=SMAP parsing: File name expected.
SourceDebugExtensionParser_17=SMAP parsing: File id expected.
SourceDebugExtensionParser_19=SMAP parsing: Absolute file name expected.
SourceDebugExtensionParser_22=SMAP parsing: Input start line expected.
SourceDebugExtensionParser_23=SMAP parsing: Line file id expected.
SourceDebugExtensionParser_24=SMAP parsing: Repeat count expected.
SourceDebugExtensionParser_25=SMAP parsing: \':\' expected.
SourceDebugExtensionParser_26=SMAP parsing: Output start line expected.
SourceDebugExtensionParser_27=SMAP parsing: Output line increment expected.
SourceDebugExtensionParser_28=SMAP parsing: Carriage return expected.
StackFrameImpl_no_argument_values_available=The selected stack frame is no longer able to get argument values.
ObjectReferenceImpl_object_not_known=Object is not a known ID.
class_or_object_not_known=The class or object is not known or incorrect.
vm_dead=VM is not responding or disconnected.
