// 
// Decompiled by Procyon v0.6.0
// 

package com.google.protobuf;

import java.util.Iterator;
import java.util.ArrayList;
import java.util.Collection;
import java.io.InputStream;
import java.nio.ByteBuffer;
import java.io.IOException;
import java.util.Collections;
import java.util.List;

public final class DescriptorProtos extends GeneratedFile
{
    private static final Descriptors.Descriptor internal_static_google_protobuf_FileDescriptorSet_descriptor;
    private static final GeneratedMessage.FieldAccessorTable internal_static_google_protobuf_FileDescriptorSet_fieldAccessorTable;
    private static final Descriptors.Descriptor internal_static_google_protobuf_FileDescriptorProto_descriptor;
    private static final GeneratedMessage.FieldAccessorTable internal_static_google_protobuf_FileDescriptorProto_fieldAccessorTable;
    private static final Descriptors.Descriptor internal_static_google_protobuf_DescriptorProto_descriptor;
    private static final GeneratedMessage.FieldAccessorTable internal_static_google_protobuf_DescriptorProto_fieldAccessorTable;
    private static final Descriptors.Descriptor internal_static_google_protobuf_DescriptorProto_ExtensionRange_descriptor;
    private static final GeneratedMessage.FieldAccessorTable internal_static_google_protobuf_DescriptorProto_ExtensionRange_fieldAccessorTable;
    private static final Descriptors.Descriptor internal_static_google_protobuf_DescriptorProto_ReservedRange_descriptor;
    private static final GeneratedMessage.FieldAccessorTable internal_static_google_protobuf_DescriptorProto_ReservedRange_fieldAccessorTable;
    private static final Descriptors.Descriptor internal_static_google_protobuf_ExtensionRangeOptions_descriptor;
    private static final GeneratedMessage.FieldAccessorTable internal_static_google_protobuf_ExtensionRangeOptions_fieldAccessorTable;
    private static final Descriptors.Descriptor internal_static_google_protobuf_ExtensionRangeOptions_Declaration_descriptor;
    private static final GeneratedMessage.FieldAccessorTable internal_static_google_protobuf_ExtensionRangeOptions_Declaration_fieldAccessorTable;
    private static final Descriptors.Descriptor internal_static_google_protobuf_FieldDescriptorProto_descriptor;
    private static final GeneratedMessage.FieldAccessorTable internal_static_google_protobuf_FieldDescriptorProto_fieldAccessorTable;
    private static final Descriptors.Descriptor internal_static_google_protobuf_OneofDescriptorProto_descriptor;
    private static final GeneratedMessage.FieldAccessorTable internal_static_google_protobuf_OneofDescriptorProto_fieldAccessorTable;
    private static final Descriptors.Descriptor internal_static_google_protobuf_EnumDescriptorProto_descriptor;
    private static final GeneratedMessage.FieldAccessorTable internal_static_google_protobuf_EnumDescriptorProto_fieldAccessorTable;
    private static final Descriptors.Descriptor internal_static_google_protobuf_EnumDescriptorProto_EnumReservedRange_descriptor;
    private static final GeneratedMessage.FieldAccessorTable internal_static_google_protobuf_EnumDescriptorProto_EnumReservedRange_fieldAccessorTable;
    private static final Descriptors.Descriptor internal_static_google_protobuf_EnumValueDescriptorProto_descriptor;
    private static final GeneratedMessage.FieldAccessorTable internal_static_google_protobuf_EnumValueDescriptorProto_fieldAccessorTable;
    private static final Descriptors.Descriptor internal_static_google_protobuf_ServiceDescriptorProto_descriptor;
    private static final GeneratedMessage.FieldAccessorTable internal_static_google_protobuf_ServiceDescriptorProto_fieldAccessorTable;
    private static final Descriptors.Descriptor internal_static_google_protobuf_MethodDescriptorProto_descriptor;
    private static final GeneratedMessage.FieldAccessorTable internal_static_google_protobuf_MethodDescriptorProto_fieldAccessorTable;
    private static final Descriptors.Descriptor internal_static_google_protobuf_FileOptions_descriptor;
    private static final GeneratedMessage.FieldAccessorTable internal_static_google_protobuf_FileOptions_fieldAccessorTable;
    private static final Descriptors.Descriptor internal_static_google_protobuf_MessageOptions_descriptor;
    private static final GeneratedMessage.FieldAccessorTable internal_static_google_protobuf_MessageOptions_fieldAccessorTable;
    private static final Descriptors.Descriptor internal_static_google_protobuf_FieldOptions_descriptor;
    private static final GeneratedMessage.FieldAccessorTable internal_static_google_protobuf_FieldOptions_fieldAccessorTable;
    private static final Descriptors.Descriptor internal_static_google_protobuf_FieldOptions_EditionDefault_descriptor;
    private static final GeneratedMessage.FieldAccessorTable internal_static_google_protobuf_FieldOptions_EditionDefault_fieldAccessorTable;
    private static final Descriptors.Descriptor internal_static_google_protobuf_FieldOptions_FeatureSupport_descriptor;
    private static final GeneratedMessage.FieldAccessorTable internal_static_google_protobuf_FieldOptions_FeatureSupport_fieldAccessorTable;
    private static final Descriptors.Descriptor internal_static_google_protobuf_OneofOptions_descriptor;
    private static final GeneratedMessage.FieldAccessorTable internal_static_google_protobuf_OneofOptions_fieldAccessorTable;
    private static final Descriptors.Descriptor internal_static_google_protobuf_EnumOptions_descriptor;
    private static final GeneratedMessage.FieldAccessorTable internal_static_google_protobuf_EnumOptions_fieldAccessorTable;
    private static final Descriptors.Descriptor internal_static_google_protobuf_EnumValueOptions_descriptor;
    private static final GeneratedMessage.FieldAccessorTable internal_static_google_protobuf_EnumValueOptions_fieldAccessorTable;
    private static final Descriptors.Descriptor internal_static_google_protobuf_ServiceOptions_descriptor;
    private static final GeneratedMessage.FieldAccessorTable internal_static_google_protobuf_ServiceOptions_fieldAccessorTable;
    private static final Descriptors.Descriptor internal_static_google_protobuf_MethodOptions_descriptor;
    private static final GeneratedMessage.FieldAccessorTable internal_static_google_protobuf_MethodOptions_fieldAccessorTable;
    private static final Descriptors.Descriptor internal_static_google_protobuf_UninterpretedOption_descriptor;
    private static final GeneratedMessage.FieldAccessorTable internal_static_google_protobuf_UninterpretedOption_fieldAccessorTable;
    private static final Descriptors.Descriptor internal_static_google_protobuf_UninterpretedOption_NamePart_descriptor;
    private static final GeneratedMessage.FieldAccessorTable internal_static_google_protobuf_UninterpretedOption_NamePart_fieldAccessorTable;
    private static final Descriptors.Descriptor internal_static_google_protobuf_FeatureSet_descriptor;
    private static final GeneratedMessage.FieldAccessorTable internal_static_google_protobuf_FeatureSet_fieldAccessorTable;
    private static final Descriptors.Descriptor internal_static_google_protobuf_FeatureSet_VisibilityFeature_descriptor;
    private static final GeneratedMessage.FieldAccessorTable internal_static_google_protobuf_FeatureSet_VisibilityFeature_fieldAccessorTable;
    private static final Descriptors.Descriptor internal_static_google_protobuf_FeatureSetDefaults_descriptor;
    private static final GeneratedMessage.FieldAccessorTable internal_static_google_protobuf_FeatureSetDefaults_fieldAccessorTable;
    private static final Descriptors.Descriptor internal_static_google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault_descriptor;
    private static final GeneratedMessage.FieldAccessorTable internal_static_google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault_fieldAccessorTable;
    private static final Descriptors.Descriptor internal_static_google_protobuf_SourceCodeInfo_descriptor;
    private static final GeneratedMessage.FieldAccessorTable internal_static_google_protobuf_SourceCodeInfo_fieldAccessorTable;
    private static final Descriptors.Descriptor internal_static_google_protobuf_SourceCodeInfo_Location_descriptor;
    private static final GeneratedMessage.FieldAccessorTable internal_static_google_protobuf_SourceCodeInfo_Location_fieldAccessorTable;
    private static final Descriptors.Descriptor internal_static_google_protobuf_GeneratedCodeInfo_descriptor;
    private static final GeneratedMessage.FieldAccessorTable internal_static_google_protobuf_GeneratedCodeInfo_fieldAccessorTable;
    private static final Descriptors.Descriptor internal_static_google_protobuf_GeneratedCodeInfo_Annotation_descriptor;
    private static final GeneratedMessage.FieldAccessorTable internal_static_google_protobuf_GeneratedCodeInfo_Annotation_fieldAccessorTable;
    private static Descriptors.FileDescriptor descriptor;
    
    private DescriptorProtos() {
    }
    
    public static void registerAllExtensions(final ExtensionRegistryLite registry) {
    }
    
    public static void registerAllExtensions(final ExtensionRegistry registry) {
        registerAllExtensions((ExtensionRegistryLite)registry);
    }
    
    public static Descriptors.FileDescriptor getDescriptor() {
        return DescriptorProtos.descriptor;
    }
    
    static {
        RuntimeVersion.validateProtobufGencodeVersion(RuntimeVersion.RuntimeDomain.PUBLIC, 4, 33, 0, "", "DescriptorProtos");
        final String[] descriptorData = { "\n google/protobuf/descriptor.proto\u0012\u000fgoogle.protobuf\"[\n\u0011FileDescriptorSet\u00128\n\u0004file\u0018\u0001 \u0003(\u000b2$.google.protobuf.FileDescriptorProtoR\u0004file*\f\b\u0080\u00ec\u00ca\u00ff\u0001\u0010\u0081\u00ec\u00ca\u00ff\u0001\"\u00c5\u0005\n\u0013FileDescriptorProto\u0012\u0012\n\u0004name\u0018\u0001 \u0001(\tR\u0004name\u0012\u0018\n\u0007package\u0018\u0002 \u0001(\tR\u0007package\u0012\u001e\n\ndependency\u0018\u0003 \u0003(\tR\ndependency\u0012+\n\u0011public_dependency\u0018\n \u0003(\u0005R\u0010publicDependency\u0012'\n\u000fweak_dependency\u0018\u000b \u0003(\u0005R\u000eweakDependency\u0012+\n\u0011option_dependency\u0018\u000f \u0003(\tR\u0010optionDependency\u0012C\n\fmessage_type\u0018\u0004 \u0003(\u000b2 .google.protobuf.DescriptorProtoR\u000bmessageType\u0012A\n\tenum_type\u0018\u0005 \u0003(\u000b2$.google.protobuf.EnumDescriptorProtoR\benumType\u0012A\n\u0007service\u0018\u0006 \u0003(\u000b2'.google.protobuf.ServiceDescriptorProtoR\u0007service\u0012C\n\textension\u0018\u0007 \u0003(\u000b2%.google.protobuf.FieldDescriptorProtoR\textension\u00126\n\u0007options\u0018\b \u0001(\u000b2\u001c.google.protobuf.FileOptionsR\u0007options\u0012I\n\u0010source_code_info\u0018\t \u0001(\u000b2\u001f.google.protobuf.SourceCodeInfoR\u000esourceCodeInfo\u0012\u0016\n\u0006syntax\u0018\f \u0001(\tR\u0006syntax\u00122\n\u0007edition\u0018\u000e \u0001(\u000e2\u0018.google.protobuf.EditionR\u0007edition\"\u00fc\u0006\n\u000fDescriptorProto\u0012\u0012\n\u0004name\u0018\u0001 \u0001(\tR\u0004name\u0012;\n\u0005field\u0018\u0002 \u0003(\u000b2%.google.protobuf.FieldDescriptorProtoR\u0005field\u0012C\n\textension\u0018\u0006 \u0003(\u000b2%.google.protobuf.FieldDescriptorProtoR\textension\u0012A\n\u000bnested_type\u0018\u0003 \u0003(\u000b2 .google.protobuf.DescriptorProtoR\nnestedType\u0012A\n\tenum_type\u0018\u0004 \u0003(\u000b2$.google.protobuf.EnumDescriptorProtoR\benumType\u0012X\n\u000fextension_range\u0018\u0005 \u0003(\u000b2/.google.protobuf.DescriptorProto.ExtensionRangeR\u000eextensionRange\u0012D\n\noneof_decl\u0018\b \u0003(\u000b2%.google.protobuf.OneofDescriptorProtoR\toneofDecl\u00129\n\u0007options\u0018\u0007 \u0001(\u000b2\u001f.google.protobuf.MessageOptionsR\u0007options\u0012U\n\u000ereserved_range\u0018\t \u0003(\u000b2..google.protobuf.DescriptorProto.ReservedRangeR\rreservedRange\u0012#\n\rreserved_name\u0018\n \u0003(\tR\freservedName\u0012A\n\nvisibility\u0018\u000b \u0001(\u000e2!.google.protobuf.SymbolVisibilityR\nvisibility\u001az\n\u000eExtensionRange\u0012\u0014\n\u0005start\u0018\u0001 \u0001(\u0005R\u0005start\u0012\u0010\n\u0003end\u0018\u0002 \u0001(\u0005R\u0003end\u0012@\n\u0007options\u0018\u0003 \u0001(\u000b2&.google.protobuf.ExtensionRangeOptionsR\u0007options\u001a7\n\rReservedRange\u0012\u0014\n\u0005start\u0018\u0001 \u0001(\u0005R\u0005start\u0012\u0010\n\u0003end\u0018\u0002 \u0001(\u0005R\u0003end\"\u00cc\u0004\n\u0015ExtensionRangeOptions\u0012X\n\u0014uninterpreted_option\u0018\u00e7\u0007 \u0003(\u000b2$.google.protobuf.UninterpretedOptionR\u0013uninterpretedOption\u0012Y\n\u000bdeclaration\u0018\u0002 \u0003(\u000b22.google.protobuf.ExtensionRangeOptions.DeclarationB\u0003\u0088\u0001\u0002R\u000bdeclaration\u00127\n\bfeatures\u00182 \u0001(\u000b2\u001b.google.protobuf.FeatureSetR\bfeatures\u0012m\n\fverification\u0018\u0003 \u0001(\u000e28.google.protobuf.ExtensionRangeOptions.VerificationState:\nUNVERIFIEDB\u0003\u0088\u0001\u0002R\fverification\u001a\u0094\u0001\n\u000bDeclaration\u0012\u0016\n\u0006number\u0018\u0001 \u0001(\u0005R\u0006number\u0012\u001b\n\tfull_name\u0018\u0002 \u0001(\tR\bfullName\u0012\u0012\n\u0004type\u0018\u0003 \u0001(\tR\u0004type\u0012\u001a\n\breserved\u0018\u0005 \u0001(\bR\breserved\u0012\u001a\n\brepeated\u0018\u0006 \u0001(\bR\brepeatedJ\u0004\b\u0004\u0010\u0005\"4\n\u0011VerificationState\u0012\u000f\n\u000bDECLARATION\u0010\u0000\u0012\u000e\n\nUNVERIFIED\u0010\u0001*\t\b\u00e8\u0007\u0010\u0080\u0080\u0080\u0080\u0002\"\u00c1\u0006\n\u0014FieldDescriptorProto\u0012\u0012\n\u0004name\u0018\u0001 \u0001(\tR\u0004name\u0012\u0016\n\u0006number\u0018\u0003 \u0001(\u0005R\u0006number\u0012A\n\u0005label\u0018\u0004 \u0001(\u000e2+.google.protobuf.FieldDescriptorProto.LabelR\u0005label\u0012>\n\u0004type\u0018\u0005 \u0001(\u000e2*.google.protobuf.FieldDescriptorProto.TypeR\u0004type\u0012\u001b\n\ttype_name\u0018\u0006 \u0001(\tR\btypeName\u0012\u001a\n\bextendee\u0018\u0002 \u0001(\tR\bextendee\u0012#\n\rdefault_value\u0018\u0007 \u0001(\tR\fdefaultValue\u0012\u001f\n\u000boneof_index\u0018\t \u0001(\u0005R\noneofIndex\u0012\u001b\n\tjson_name\u0018\n \u0001(\tR\bjsonName\u00127\n\u0007options\u0018\b \u0001(\u000b2\u001d.google.protobuf.FieldOptionsR\u0007options\u0012'\n\u000fproto3_optional\u0018\u0011 \u0001(\bR\u000eproto3Optional\"¶\u0002\n\u0004Type\u0012\u000f\n\u000bTYPE_DOUBLE\u0010\u0001\u0012\u000e\n\nTYPE_FLOAT\u0010\u0002\u0012\u000e\n\nTYPE_INT64\u0010\u0003\u0012\u000f\n\u000bTYPE_UINT64\u0010\u0004\u0012\u000e\n\nTYPE_INT32\u0010\u0005\u0012\u0010\n\fTYPE_FIXED64\u0010\u0006\u0012\u0010\n\fTYPE_FIXED32\u0010\u0007\u0012\r\n\tTYPE_BOOL\u0010\b\u0012\u000f\n\u000bTYPE_STRING\u0010\t\u0012\u000e\n\nTYPE_GROUP\u0010\n\u0012\u0010\n\fTYPE_MESSAGE\u0010\u000b\u0012\u000e\n\nTYPE_BYTES\u0010\f\u0012\u000f\n\u000bTYPE_UINT32\u0010\r\u0012\r\n\tTYPE_ENUM\u0010\u000e\u0012\u0011\n\rTYPE_SFIXED32\u0010\u000f\u0012\u0011\n\rTYPE_SFIXED64\u0010\u0010\u0012\u000f\n\u000bTYPE_SINT32\u0010\u0011\u0012\u000f\n\u000bTYPE_SINT64\u0010\u0012\"C\n\u0005Label\u0012\u0012\n\u000eLABEL_OPTIONAL\u0010\u0001\u0012\u0012\n\u000eLABEL_REPEATED\u0010\u0003\u0012\u0012\n\u000eLABEL_REQUIRED\u0010\u0002\"c\n\u0014OneofDescriptorProto\u0012\u0012\n\u0004name\u0018\u0001 \u0001(\tR\u0004name\u00127\n\u0007options\u0018\u0002 \u0001(\u000b2\u001d.google.protobuf.OneofOptionsR\u0007options\"¦\u0003\n\u0013EnumDescriptorProto\u0012\u0012\n\u0004name\u0018\u0001 \u0001(\tR\u0004name\u0012?\n\u0005value\u0018\u0002 \u0003(\u000b2).google.protobuf.EnumValueDescriptorProtoR\u0005value\u00126\n\u0007options\u0018\u0003 \u0001(\u000b2\u001c.google.protobuf.EnumOptionsR\u0007options\u0012]\n\u000ereserved_range\u0018\u0004 \u0003(\u000b26.google.protobuf.EnumDescriptorProto.EnumReservedRangeR\rreservedRange\u0012#\n\rreserved_name\u0018\u0005 \u0003(\tR\freservedName\u0012A\n\nvisibility\u0018\u0006 \u0001(\u000e2!.google.protobuf.SymbolVisibilityR\nvisibility\u001a;\n\u0011EnumReservedRange\u0012\u0014\n\u0005start\u0018\u0001 \u0001(\u0005R\u0005start\u0012\u0010\n\u0003end\u0018\u0002 \u0001(\u0005R\u0003end\"\u0083\u0001\n\u0018EnumValueDescriptorProto\u0012\u0012\n\u0004name\u0018\u0001 \u0001(\tR\u0004name\u0012\u0016\n\u0006number\u0018\u0002 \u0001(\u0005R\u0006number\u0012;\n\u0007options\u0018\u0003 \u0001(\u000b2!.google.protobuf.EnumValueOptionsR\u0007options\"µ\u0001\n\u0016ServiceDescriptorProto\u0012\u0012\n\u0004name\u0018\u0001 \u0001(\tR\u0004name\u0012>\n\u0006method\u0018\u0002 \u0003(\u000b2&.google.protobuf.MethodDescriptorProtoR\u0006method\u00129\n\u0007options\u0018\u0003 \u0001(\u000b2\u001f.google.protobuf.ServiceOptionsR\u0007optionsJ\u0004\b\u0004\u0010\u0005R\u0006stream\"\u0089\u0002\n\u0015MethodDescriptorProto\u0012\u0012\n\u0004name\u0018\u0001 \u0001(\tR\u0004name\u0012\u001d\n\ninput_type\u0018\u0002 \u0001(\tR\tinputType\u0012\u001f\n\u000boutput_type\u0018\u0003 \u0001(\tR\noutputType\u00128\n\u0007options\u0018\u0004 \u0001(\u000b2\u001e.google.protobuf.MethodOptionsR\u0007options\u00120\n\u0010client_streaming\u0018\u0005 \u0001(\b:\u0005falseR\u000fclientStreaming\u00120\n\u0010server_streaming\u0018\u0006 \u0001(\b:\u0005falseR\u000fserverStreaming\"\u00ad\t\n\u000bFileOptions\u0012!\n\fjava_package\u0018\u0001 \u0001(\tR\u000bjavaPackage\u00120\n\u0014java_outer_classname\u0018\b \u0001(\tR\u0012javaOuterClassname\u00125\n\u0013java_multiple_files\u0018\n \u0001(\b:\u0005falseR\u0011javaMultipleFiles\u0012D\n\u001djava_generate_equals_and_hash\u0018\u0014 \u0001(\bB\u0002\u0018\u0001R\u0019javaGenerateEqualsAndHash\u0012:\n\u0016java_string_check_utf8\u0018\u001b \u0001(\b:\u0005falseR\u0013javaStringCheckUtf8\u0012S\n\foptimize_for\u0018\t \u0001(\u000e2).google.protobuf.FileOptions.OptimizeMode:\u0005SPEEDR\u000boptimizeFor\u0012\u001d\n\ngo_package\u0018\u000b \u0001(\tR\tgoPackage\u00125\n\u0013cc_generic_services\u0018\u0010 \u0001(\b:\u0005falseR\u0011ccGenericServices\u00129\n\u0015java_generic_services\u0018\u0011 \u0001(\b:\u0005falseR\u0013javaGenericServices\u00125\n\u0013py_generic_services\u0018\u0012 \u0001(\b:\u0005falseR\u0011pyGenericServices\u0012%\n\ndeprecated\u0018\u0017 \u0001(\b:\u0005falseR\ndeprecated\u0012.\n\u0010cc_enable_arenas\u0018\u001f \u0001(\b:\u0004trueR\u000eccEnableArenas\u0012*\n\u0011objc_class_prefix\u0018$ \u0001(\tR\u000fobjcClassPrefix\u0012)\n\u0010csharp_namespace\u0018% \u0001(\tR\u000fcsharpNamespace\u0012!\n\fswift_prefix\u0018' \u0001(\tR\u000bswiftPrefix\u0012(\n\u0010php_class_prefix\u0018( \u0001(\tR\u000ephpClassPrefix\u0012#\n\rphp_namespace\u0018) \u0001(\tR\fphpNamespace\u00124\n\u0016php_metadata_namespace\u0018, \u0001(\tR\u0014phpMetadataNamespace\u0012!\n\fruby_package\u0018- \u0001(\tR\u000brubyPackage\u00127\n\bfeatures\u00182 \u0001(\u000b2\u001b.google.protobuf.FeatureSetR\bfeatures\u0012X\n\u0014uninterpreted_option\u0018\u00e7\u0007 \u0003(\u000b2$.google.protobuf.UninterpretedOptionR\u0013uninterpretedOption\":\n\fOptimizeMode\u0012\t\n\u0005SPEED\u0010\u0001\u0012\r\n\tCODE_SIZE\u0010\u0002\u0012\u0010\n\fLITE_RUNTIME\u0010\u0003*\t\b\u00e8\u0007\u0010\u0080\u0080\u0080\u0080\u0002J\u0004\b*\u0010+J\u0004\b&\u0010'R\u0014php_generic_services\"\u00f4\u0003\n\u000eMessageOptions\u0012<\n\u0017message_set_wire_format\u0018\u0001 \u0001(\b:\u0005falseR\u0014messageSetWireFormat\u0012L\n\u001fno_standard_descriptor_accessor\u0018\u0002 \u0001(\b:\u0005falseR\u001cnoStandardDescriptorAccessor\u0012%\n\ndeprecated\u0018\u0003 \u0001(\b:\u0005falseR\ndeprecated\u0012\u001b\n\tmap_entry\u0018\u0007 \u0001(\bR\bmapEntry\u0012V\n&deprecated_legacy_json_field_conflicts\u0018\u000b \u0001(\bB\u0002\u0018\u0001R\"deprecatedLegacyJsonFieldConflicts\u00127\n\bfeatures\u0018\f \u0001(\u000b2\u001b.google.protobuf.FeatureSetR\bfeatures\u0012X\n\u0014uninterpreted_option\u0018\u00e7\u0007 \u0003(\u000b2$.google.protobuf.UninterpretedOptionR\u0013uninterpretedOption*\t\b\u00e8\u0007\u0010\u0080\u0080\u0080\u0080\u0002J\u0004\b\u0004\u0010\u0005J\u0004\b\u0005\u0010\u0006J\u0004\b\u0006\u0010\u0007J\u0004\b\b\u0010\tJ\u0004\b\t\u0010\n\"¡\r\n\fFieldOptions\u0012A\n\u0005ctype\u0018\u0001 \u0001(\u000e2#.google.protobuf.FieldOptions.CType:\u0006STRINGR\u0005ctype\u0012\u0016\n\u0006packed\u0018\u0002 \u0001(\bR\u0006packed\u0012G\n\u0006jstype\u0018\u0006 \u0001(\u000e2$.google.protobuf.FieldOptions.JSType:\tJS_NORMALR\u0006jstype\u0012\u0019\n\u0004lazy\u0018\u0005 \u0001(\b:\u0005falseR\u0004lazy\u0012.\n\u000funverified_lazy\u0018\u000f \u0001(\b:\u0005falseR\u000eunverifiedLazy\u0012%\n\ndeprecated\u0018\u0003 \u0001(\b:\u0005falseR\ndeprecated\u0012\u001d\n\u0004weak\u0018\n \u0001(\b:\u0005falseB\u0002\u0018\u0001R\u0004weak\u0012(\n\fdebug_redact\u0018\u0010 \u0001(\b:\u0005falseR\u000bdebugRedact\u0012K\n\tretention\u0018\u0011 \u0001(\u000e2-.google.protobuf.FieldOptions.OptionRetentionR\tretention\u0012H\n\u0007targets\u0018\u0013 \u0003(\u000e2..google.protobuf.FieldOptions.OptionTargetTypeR\u0007targets\u0012W\n\u0010edition_defaults\u0018\u0014 \u0003(\u000b2,.google.protobuf.FieldOptions.EditionDefaultR\u000feditionDefaults\u00127\n\bfeatures\u0018\u0015 \u0001(\u000b2\u001b.google.protobuf.FeatureSetR\bfeatures\u0012U\n\u000ffeature_support\u0018\u0016 \u0001(\u000b2,.google.protobuf.FieldOptions.FeatureSupportR\u000efeatureSupport\u0012X\n\u0014uninterpreted_option\u0018\u00e7\u0007 \u0003(\u000b2$.google.protobuf.UninterpretedOptionR\u0013uninterpretedOption\u001aZ\n\u000eEditionDefault\u00122\n\u0007edition\u0018\u0003 \u0001(\u000e2\u0018.google.protobuf.EditionR\u0007edition\u0012\u0014\n\u0005value\u0018\u0002 \u0001(\tR\u0005value\u001a\u0096\u0002\n\u000eFeatureSupport\u0012G\n\u0012edition_introduced\u0018\u0001 \u0001(\u000e2\u0018.google.protobuf.EditionR\u0011editionIntroduced\u0012G\n\u0012edition_deprecated\u0018\u0002 \u0001(\u000e2\u0018.google.protobuf.EditionR\u0011editionDeprecated\u0012/\n\u0013deprecation_warning\u0018\u0003 \u0001(\tR\u0012deprecationWarning\u0012A\n\u000fedition_removed\u0018\u0004 \u0001(\u000e2\u0018.google.protobuf.EditionR\u000eeditionRemoved\"/\n\u0005CType\u0012\n\n\u0006STRING\u0010\u0000\u0012\b\n\u0004CORD\u0010\u0001\u0012\u0010\n\fSTRING_PIECE\u0010\u0002\"5\n\u0006JSType\u0012\r\n\tJS_NORMAL\u0010\u0000\u0012\r\n\tJS_STRING\u0010\u0001\u0012\r\n\tJS_NUMBER\u0010\u0002\"U\n\u000fOptionRetention\u0012\u0015\n\u0011RETENTION_UNKNOWN\u0010\u0000\u0012\u0015\n\u0011RETENTION_RUNTIME\u0010\u0001\u0012\u0014\n\u0010RETENTION_SOURCE\u0010\u0002\"\u008c\u0002\n\u0010OptionTargetType\u0012\u0017\n\u0013TARGET_TYPE_UNKNOWN\u0010\u0000\u0012\u0014\n\u0010TARGET_TYPE_FILE\u0010\u0001\u0012\u001f\n\u001bTARGET_TYPE_EXTENSION_RANGE\u0010\u0002\u0012\u0017\n\u0013TARGET_TYPE_MESSAGE\u0010\u0003\u0012\u0015\n\u0011TARGET_TYPE_FIELD\u0010\u0004\u0012\u0015\n\u0011TARGET_TYPE_ONEOF\u0010\u0005\u0012\u0014\n\u0010TARGET_TYPE_ENUM\u0010\u0006\u0012\u001a\n\u0016TARGET_TYPE_ENUM_ENTRY\u0010\u0007\u0012\u0017\n\u0013TARGET_TYPE_SERVICE\u0010\b\u0012\u0016\n\u0012TARGET_TYPE_METHOD\u0010\t*\t\b\u00e8\u0007\u0010\u0080\u0080\u0080\u0080\u0002J\u0004\b\u0004\u0010\u0005J\u0004\b\u0012\u0010\u0013\"¬\u0001\n\fOneofOptions\u00127\n\bfeatures\u0018\u0001 \u0001(\u000b2\u001b.google.protobuf.FeatureSetR\bfeatures\u0012X\n\u0014uninterpreted_option\u0018\u00e7\u0007 \u0003(\u000b2$.google.protobuf.UninterpretedOptionR\u0013uninterpretedOption*\t\b\u00e8\u0007\u0010\u0080\u0080\u0080\u0080\u0002\"\u00d1\u0002\n\u000bEnumOptions\u0012\u001f\n\u000ballow_alias\u0018\u0002 \u0001(\bR\nallowAlias\u0012%\n\ndeprecated\u0018\u0003 \u0001(\b:\u0005falseR\ndeprecated\u0012V\n&deprecated_legacy_json_field_conflicts\u0018\u0006 \u0001(\bB\u0002\u0018\u0001R\"deprecatedLegacyJsonFieldConflicts\u00127\n\bfeatures\u0018\u0007 \u0001(\u000b2\u001b.google.protobuf.FeatureSetR\bfeatures\u0012X\n\u0014uninterpreted_option\u0018\u00e7\u0007 \u0003(\u000b2$.google.protobuf.UninterpretedOptionR\u0013uninterpretedOption*\t\b\u00e8\u0007\u0010\u0080\u0080\u0080\u0080\u0002J\u0004\b\u0005\u0010\u0006\"\u00d8\u0002\n\u0010EnumValueOptions\u0012%\n\ndeprecated\u0018\u0001 \u0001(\b:\u0005falseR\ndeprecated\u00127\n\bfeatures\u0018\u0002 \u0001(\u000b2\u001b.google.protobuf.FeatureSetR\bfeatures\u0012(\n\fdebug_redact\u0018\u0003 \u0001(\b:\u0005falseR\u000bdebugRedact\u0012U\n\u000ffeature_support\u0018\u0004 \u0001(\u000b2,.google.protobuf.FieldOptions.FeatureSupportR\u000efeatureSupport\u0012X\n\u0014uninterpreted_option\u0018\u00e7\u0007 \u0003(\u000b2$.google.protobuf.UninterpretedOptionR\u0013uninterpretedOption*\t\b\u00e8\u0007\u0010\u0080\u0080\u0080\u0080\u0002\"\u00d5\u0001\n\u000eServiceOptions\u00127\n\bfeatures\u0018\" \u0001(\u000b2\u001b.google.protobuf.FeatureSetR\bfeatures\u0012%\n\ndeprecated\u0018! \u0001(\b:\u0005falseR\ndeprecated\u0012X\n\u0014uninterpreted_option\u0018\u00e7\u0007 \u0003(\u000b2$.google.protobuf.UninterpretedOptionR\u0013uninterpretedOption*\t\b\u00e8\u0007\u0010\u0080\u0080\u0080\u0080\u0002\"\u0099\u0003\n\rMethodOptions\u0012%\n\ndeprecated\u0018! \u0001(\b:\u0005falseR\ndeprecated\u0012q\n\u0011idempotency_level\u0018\" \u0001(\u000e2/.google.protobuf.MethodOptions.IdempotencyLevel:\u0013IDEMPOTENCY_UNKNOWNR\u0010idempotencyLevel\u00127\n\bfeatures\u0018# \u0001(\u000b2\u001b.google.protobuf.FeatureSetR\bfeatures\u0012X\n\u0014uninterpreted_option\u0018\u00e7\u0007 \u0003(\u000b2$.google.protobuf.UninterpretedOptionR\u0013uninterpretedOption\"P\n\u0010IdempotencyLevel\u0012\u0017\n\u0013IDEMPOTENCY_UNKNOWN\u0010\u0000\u0012\u0013\n\u000fNO_SIDE_EFFECTS\u0010\u0001\u0012\u000e\n\nIDEMPOTENT\u0010\u0002*\t\b\u00e8\u0007\u0010\u0080\u0080\u0080\u0080\u0002\"\u009a\u0003\n\u0013UninterpretedOption\u0012A\n\u0004name\u0018\u0002 \u0003(\u000b2-.google.protobuf.UninterpretedOption.NamePartR\u0004name\u0012)\n\u0010identifier_value\u0018\u0003 \u0001(\tR\u000fidentifierValue\u0012,\n\u0012positive_int_value\u0018\u0004 \u0001(\u0004R\u0010positiveIntValue\u0012,\n\u0012negative_int_value\u0018\u0005 \u0001(\u0003R\u0010negativeIntValue\u0012!\n\fdouble_value\u0018\u0006 \u0001(\u0001R\u000bdoubleValue\u0012!\n\fstring_value\u0018\u0007 \u0001(\fR\u000bstringValue\u0012'\n\u000faggregate_value\u0018\b \u0001(\tR\u000eaggregateValue\u001aJ\n\bNamePart\u0012\u001b\n\tname_part\u0018\u0001 \u0002(\tR\bnamePart\u0012!\n\fis_extension\u0018\u0002 \u0002(\bR\u000bisExtension\"\u008e\u000f\n\nFeatureSet\u0012\u0091\u0001\n\u000efield_presence\u0018\u0001 \u0001(\u000e2).google.protobuf.FeatureSet.FieldPresenceB?\u0088\u0001\u0001\u0098\u0001\u0004\u0098\u0001\u0001¢\u0001\r\u0012\bEXPLICIT\u0018\u0084\u0007¢\u0001\r\u0012\bIMPLICIT\u0018\u00e7\u0007¢\u0001\r\u0012\bEXPLICIT\u0018\u00e8\u0007²\u0001\u0003\b\u00e8\u0007R\rfieldPresence\u0012l\n\tenum_type\u0018\u0002 \u0001(\u000e2$.google.protobuf.FeatureSet.EnumTypeB)\u0088\u0001\u0001\u0098\u0001\u0006\u0098\u0001\u0001¢\u0001\u000b\u0012\u0006CLOSED\u0018\u0084\u0007¢\u0001\t\u0012\u0004OPEN\u0018\u00e7\u0007²\u0001\u0003\b\u00e8\u0007R\benumType\u0012\u0098\u0001\n\u0017repeated_field_encoding\u0018\u0003 \u0001(\u000e21.google.protobuf.FeatureSet.RepeatedFieldEncodingB-\u0088\u0001\u0001\u0098\u0001\u0004\u0098\u0001\u0001¢\u0001\r\u0012\bEXPANDED\u0018\u0084\u0007¢\u0001\u000b\u0012\u0006PACKED\u0018\u00e7\u0007²\u0001\u0003\b\u00e8\u0007R\u0015repeatedFieldEncoding\u0012~\n\u000futf8_validation\u0018\u0004 \u0001(\u000e2*.google.protobuf.FeatureSet.Utf8ValidationB)\u0088\u0001\u0001\u0098\u0001\u0004\u0098\u0001\u0001¢\u0001\t\u0012\u0004NONE\u0018\u0084\u0007¢\u0001\u000b\u0012\u0006VERIFY\u0018\u00e7\u0007²\u0001\u0003\b\u00e8\u0007R\u000eutf8Validation\u0012~\n\u0010message_encoding\u0018\u0005 \u0001(\u000e2+.google.protobuf.FeatureSet.MessageEncodingB&\u0088\u0001\u0001\u0098\u0001\u0004\u0098\u0001\u0001¢\u0001\u0014\u0012\u000fLENGTH_PREFIXED\u0018\u0084\u0007²\u0001\u0003\b\u00e8\u0007R\u000fmessageEncoding\u0012\u0082\u0001\n\u000bjson_format\u0018\u0006 \u0001(\u000e2&.google.protobuf.FeatureSet.JsonFormatB9\u0088\u0001\u0001\u0098\u0001\u0003\u0098\u0001\u0006\u0098\u0001\u0001¢\u0001\u0017\u0012\u0012LEGACY_BEST_EFFORT\u0018\u0084\u0007¢\u0001\n\u0012\u0005ALLOW\u0018\u00e7\u0007²\u0001\u0003\b\u00e8\u0007R\njsonFormat\u0012«\u0001\n\u0014enforce_naming_style\u0018\u0007 \u0001(\u000e2..google.protobuf.FeatureSet.EnforceNamingStyleBI\u0088\u0001\u0002\u0098\u0001\u0001\u0098\u0001\u0002\u0098\u0001\u0003\u0098\u0001\u0004\u0098\u0001\u0005\u0098\u0001\u0006\u0098\u0001\u0007\u0098\u0001\b\u0098\u0001\t¢\u0001\u0011\u0012\fSTYLE_LEGACY\u0018\u0084\u0007¢\u0001\u000e\u0012\tSTYLE2024\u0018\u00e9\u0007²\u0001\u0003\b\u00e9\u0007R\u0012enforceNamingStyle\u0012¹\u0001\n\u0019default_symbol_visibility\u0018\b \u0001(\u000e2E.google.protobuf.FeatureSet.VisibilityFeature.DefaultSymbolVisibilityB6\u0088\u0001\u0002\u0098\u0001\u0001¢\u0001\u000f\u0012\nEXPORT_ALL\u0018\u0084\u0007¢\u0001\u0015\u0012\u0010EXPORT_TOP_LEVEL\u0018\u00e9\u0007²\u0001\u0003\b\u00e9\u0007R\u0017defaultSymbolVisibility\u001a¡\u0001\n\u0011VisibilityFeature\"\u0081\u0001\n\u0017DefaultSymbolVisibility\u0012%\n!DEFAULT_SYMBOL_VISIBILITY_UNKNOWN\u0010\u0000\u0012\u000e\n\nEXPORT_ALL\u0010\u0001\u0012\u0014\n\u0010EXPORT_TOP_LEVEL\u0010\u0002\u0012\r\n\tLOCAL_ALL\u0010\u0003\u0012\n\n\u0006STRICT\u0010\u0004J\b\b\u0001\u0010\u0080\u0080\u0080\u0080\u0002\"\\\n\rFieldPresence\u0012\u001a\n\u0016FIELD_PRESENCE_UNKNOWN\u0010\u0000\u0012\f\n\bEXPLICIT\u0010\u0001\u0012\f\n\bIMPLICIT\u0010\u0002\u0012\u0013\n\u000fLEGACY_REQUIRED\u0010\u0003\"7\n\bEnumType\u0012\u0015\n\u0011ENUM_TYPE_UNKNOWN\u0010\u0000\u0012\b\n\u0004OPEN\u0010\u0001\u0012\n\n\u0006CLOSED\u0010\u0002\"V\n\u0015RepeatedFieldEncoding\u0012#\n\u001fREPEATED_FIELD_ENCODING_UNKNOWN\u0010\u0000\u0012\n\n\u0006PACKED\u0010\u0001\u0012\f\n\bEXPANDED\u0010\u0002\"I\n\u000eUtf8Validation\u0012\u001b\n\u0017UTF8_VALIDATION_UNKNOWN\u0010\u0000\u0012\n\n\u0006VERIFY\u0010\u0002\u0012\b\n\u0004NONE\u0010\u0003\"\u0004\b\u0001\u0010\u0001\"S\n\u000fMessageEncoding\u0012\u001c\n\u0018MESSAGE_ENCODING_UNKNOWN\u0010\u0000\u0012\u0013\n\u000fLENGTH_PREFIXED\u0010\u0001\u0012\r\n\tDELIMITED\u0010\u0002\"H\n\nJsonFormat\u0012\u0017\n\u0013JSON_FORMAT_UNKNOWN\u0010\u0000\u0012\t\n\u0005ALLOW\u0010\u0001\u0012\u0016\n\u0012LEGACY_BEST_EFFORT\u0010\u0002\"W\n\u0012EnforceNamingStyle\u0012 \n\u001cENFORCE_NAMING_STYLE_UNKNOWN\u0010\u0000\u0012\r\n\tSTYLE2024\u0010\u0001\u0012\u0010\n\fSTYLE_LEGACY\u0010\u0002*\u0006\b\u00e8\u0007\u0010\u008bN*\u0006\b\u008bN\u0010\u0090N*\u0006\b\u0090N\u0010\u0091NJ\u0006\b\u00e7\u0007\u0010\u00e8\u0007\"\u00ef\u0003\n\u0012FeatureSetDefaults\u0012X\n\bdefaults\u0018\u0001 \u0003(\u000b2<.google.protobuf.FeatureSetDefaults.FeatureSetEditionDefaultR\bdefaults\u0012A\n\u000fminimum_edition\u0018\u0004 \u0001(\u000e2\u0018.google.protobuf.EditionR\u000eminimumEdition\u0012A\n\u000fmaximum_edition\u0018\u0005 \u0001(\u000e2\u0018.google.protobuf.EditionR\u000emaximumEdition\u001a\u00f8\u0001\n\u0018FeatureSetEditionDefault\u00122\n\u0007edition\u0018\u0003 \u0001(\u000e2\u0018.google.protobuf.EditionR\u0007edition\u0012N\n\u0014overridable_features\u0018\u0004 \u0001(\u000b2\u001b.google.protobuf.FeatureSetR\u0013overridableFeatures\u0012B\n\u000efixed_features\u0018\u0005 \u0001(\u000b2\u001b.google.protobuf.FeatureSetR\rfixedFeaturesJ\u0004\b\u0001\u0010\u0002J\u0004\b\u0002\u0010\u0003R\bfeatures\"µ\u0002\n\u000eSourceCodeInfo\u0012D\n\blocation\u0018\u0001 \u0003(\u000b2(.google.protobuf.SourceCodeInfo.LocationR\blocation\u001a\u00ce\u0001\n\bLocation\u0012\u0016\n\u0004path\u0018\u0001 \u0003(\u0005B\u0002\u0010\u0001R\u0004path\u0012\u0016\n\u0004span\u0018\u0002 \u0003(\u0005B\u0002\u0010\u0001R\u0004span\u0012)\n\u0010leading_comments\u0018\u0003 \u0001(\tR\u000fleadingComments\u0012+\n\u0011trailing_comments\u0018\u0004 \u0001(\tR\u0010trailingComments\u0012:\n\u0019leading_detached_comments\u0018\u0006 \u0003(\tR\u0017leadingDetachedComments*\f\b\u0080\u00ec\u00ca\u00ff\u0001\u0010\u0081\u00ec\u00ca\u00ff\u0001\"\u00d0\u0002\n\u0011GeneratedCodeInfo\u0012M\n\nannotation\u0018\u0001 \u0003(\u000b2-.google.protobuf.GeneratedCodeInfo.AnnotationR\nannotation\u001a\u00eb\u0001\n\nAnnotation\u0012\u0016\n\u0004path\u0018\u0001 \u0003(\u0005B\u0002\u0010\u0001R\u0004path\u0012\u001f\n\u000bsource_file\u0018\u0002 \u0001(\tR\nsourceFile\u0012\u0014\n\u0005begin\u0018\u0003 \u0001(\u0005R\u0005begin\u0012\u0010\n\u0003end\u0018\u0004 \u0001(\u0005R\u0003end\u0012R\n\bsemantic\u0018\u0005 \u0001(\u000e26.google.protobuf.GeneratedCodeInfo.Annotation.SemanticR\bsemantic\"(\n\bSemantic\u0012\b\n\u0004NONE\u0010\u0000\u0012\u0007\n\u0003SET\u0010\u0001\u0012\t\n\u0005ALIAS\u0010\u0002*§\u0002\n\u0007Edition\u0012\u0013\n\u000fEDITION_UNKNOWN\u0010\u0000\u0012\u0013\n\u000eEDITION_LEGACY\u0010\u0084\u0007\u0012\u0013\n\u000eEDITION_PROTO2\u0010\u00e6\u0007\u0012\u0013\n\u000eEDITION_PROTO3\u0010\u00e7\u0007\u0012\u0011\n\fEDITION_2023\u0010\u00e8\u0007\u0012\u0011\n\fEDITION_2024\u0010\u00e9\u0007\u0012\u0017\n\u0013EDITION_1_TEST_ONLY\u0010\u0001\u0012\u0017\n\u0013EDITION_2_TEST_ONLY\u0010\u0002\u0012\u001d\n\u0017EDITION_99997_TEST_ONLY\u0010\u009d\u008d\u0006\u0012\u001d\n\u0017EDITION_99998_TEST_ONLY\u0010\u009e\u008d\u0006\u0012\u001d\n\u0017EDITION_99999_TEST_ONLY\u0010\u009f\u008d\u0006\u0012\u0013\n\u000bEDITION_MAX\u0010\u00ff\u00ff\u00ff\u00ff\u0007*U\n\u0010SymbolVisibility\u0012\u0014\n\u0010VISIBILITY_UNSET\u0010\u0000\u0012\u0014\n\u0010VISIBILITY_LOCAL\u0010\u0001\u0012\u0015\n\u0011VISIBILITY_EXPORT\u0010\u0002B~\n\u0013com.google.protobufB\u0010DescriptorProtosH\u0001Z-google.golang.org/protobuf/types/descriptorpb\u00f8\u0001\u0001¢\u0002\u0003GPBª\u0002\u001aGoogle.Protobuf.Reflection" };
        DescriptorProtos.descriptor = Descriptors.FileDescriptor.internalBuildGeneratedFileFrom(descriptorData, new Descriptors.FileDescriptor[0]);
        internal_static_google_protobuf_FileDescriptorSet_descriptor = getDescriptor().getMessageType(0);
        internal_static_google_protobuf_FileDescriptorSet_fieldAccessorTable = new GeneratedMessage.FieldAccessorTable(DescriptorProtos.internal_static_google_protobuf_FileDescriptorSet_descriptor, new String[] { "File" });
        internal_static_google_protobuf_FileDescriptorProto_descriptor = getDescriptor().getMessageType(1);
        internal_static_google_protobuf_FileDescriptorProto_fieldAccessorTable = new GeneratedMessage.FieldAccessorTable(DescriptorProtos.internal_static_google_protobuf_FileDescriptorProto_descriptor, new String[] { "Name", "Package", "Dependency", "PublicDependency", "WeakDependency", "OptionDependency", "MessageType", "EnumType", "Service", "Extension", "Options", "SourceCodeInfo", "Syntax", "Edition" });
        internal_static_google_protobuf_DescriptorProto_descriptor = getDescriptor().getMessageType(2);
        internal_static_google_protobuf_DescriptorProto_fieldAccessorTable = new GeneratedMessage.FieldAccessorTable(DescriptorProtos.internal_static_google_protobuf_DescriptorProto_descriptor, new String[] { "Name", "Field", "Extension", "NestedType", "EnumType", "ExtensionRange", "OneofDecl", "Options", "ReservedRange", "ReservedName", "Visibility" });
        internal_static_google_protobuf_DescriptorProto_ExtensionRange_descriptor = DescriptorProtos.internal_static_google_protobuf_DescriptorProto_descriptor.getNestedType(0);
        internal_static_google_protobuf_DescriptorProto_ExtensionRange_fieldAccessorTable = new GeneratedMessage.FieldAccessorTable(DescriptorProtos.internal_static_google_protobuf_DescriptorProto_ExtensionRange_descriptor, new String[] { "Start", "End", "Options" });
        internal_static_google_protobuf_DescriptorProto_ReservedRange_descriptor = DescriptorProtos.internal_static_google_protobuf_DescriptorProto_descriptor.getNestedType(1);
        internal_static_google_protobuf_DescriptorProto_ReservedRange_fieldAccessorTable = new GeneratedMessage.FieldAccessorTable(DescriptorProtos.internal_static_google_protobuf_DescriptorProto_ReservedRange_descriptor, new String[] { "Start", "End" });
        internal_static_google_protobuf_ExtensionRangeOptions_descriptor = getDescriptor().getMessageType(3);
        internal_static_google_protobuf_ExtensionRangeOptions_fieldAccessorTable = new GeneratedMessage.FieldAccessorTable(DescriptorProtos.internal_static_google_protobuf_ExtensionRangeOptions_descriptor, new String[] { "UninterpretedOption", "Declaration", "Features", "Verification" });
        internal_static_google_protobuf_ExtensionRangeOptions_Declaration_descriptor = DescriptorProtos.internal_static_google_protobuf_ExtensionRangeOptions_descriptor.getNestedType(0);
        internal_static_google_protobuf_ExtensionRangeOptions_Declaration_fieldAccessorTable = new GeneratedMessage.FieldAccessorTable(DescriptorProtos.internal_static_google_protobuf_ExtensionRangeOptions_Declaration_descriptor, new String[] { "Number", "FullName", "Type", "Reserved", "Repeated" });
        internal_static_google_protobuf_FieldDescriptorProto_descriptor = getDescriptor().getMessageType(4);
        internal_static_google_protobuf_FieldDescriptorProto_fieldAccessorTable = new GeneratedMessage.FieldAccessorTable(DescriptorProtos.internal_static_google_protobuf_FieldDescriptorProto_descriptor, new String[] { "Name", "Number", "Label", "Type", "TypeName", "Extendee", "DefaultValue", "OneofIndex", "JsonName", "Options", "Proto3Optional" });
        internal_static_google_protobuf_OneofDescriptorProto_descriptor = getDescriptor().getMessageType(5);
        internal_static_google_protobuf_OneofDescriptorProto_fieldAccessorTable = new GeneratedMessage.FieldAccessorTable(DescriptorProtos.internal_static_google_protobuf_OneofDescriptorProto_descriptor, new String[] { "Name", "Options" });
        internal_static_google_protobuf_EnumDescriptorProto_descriptor = getDescriptor().getMessageType(6);
        internal_static_google_protobuf_EnumDescriptorProto_fieldAccessorTable = new GeneratedMessage.FieldAccessorTable(DescriptorProtos.internal_static_google_protobuf_EnumDescriptorProto_descriptor, new String[] { "Name", "Value", "Options", "ReservedRange", "ReservedName", "Visibility" });
        internal_static_google_protobuf_EnumDescriptorProto_EnumReservedRange_descriptor = DescriptorProtos.internal_static_google_protobuf_EnumDescriptorProto_descriptor.getNestedType(0);
        internal_static_google_protobuf_EnumDescriptorProto_EnumReservedRange_fieldAccessorTable = new GeneratedMessage.FieldAccessorTable(DescriptorProtos.internal_static_google_protobuf_EnumDescriptorProto_EnumReservedRange_descriptor, new String[] { "Start", "End" });
        internal_static_google_protobuf_EnumValueDescriptorProto_descriptor = getDescriptor().getMessageType(7);
        internal_static_google_protobuf_EnumValueDescriptorProto_fieldAccessorTable = new GeneratedMessage.FieldAccessorTable(DescriptorProtos.internal_static_google_protobuf_EnumValueDescriptorProto_descriptor, new String[] { "Name", "Number", "Options" });
        internal_static_google_protobuf_ServiceDescriptorProto_descriptor = getDescriptor().getMessageType(8);
        internal_static_google_protobuf_ServiceDescriptorProto_fieldAccessorTable = new GeneratedMessage.FieldAccessorTable(DescriptorProtos.internal_static_google_protobuf_ServiceDescriptorProto_descriptor, new String[] { "Name", "Method", "Options" });
        internal_static_google_protobuf_MethodDescriptorProto_descriptor = getDescriptor().getMessageType(9);
        internal_static_google_protobuf_MethodDescriptorProto_fieldAccessorTable = new GeneratedMessage.FieldAccessorTable(DescriptorProtos.internal_static_google_protobuf_MethodDescriptorProto_descriptor, new String[] { "Name", "InputType", "OutputType", "Options", "ClientStreaming", "ServerStreaming" });
        internal_static_google_protobuf_FileOptions_descriptor = getDescriptor().getMessageType(10);
        internal_static_google_protobuf_FileOptions_fieldAccessorTable = new GeneratedMessage.FieldAccessorTable(DescriptorProtos.internal_static_google_protobuf_FileOptions_descriptor, new String[] { "JavaPackage", "JavaOuterClassname", "JavaMultipleFiles", "JavaGenerateEqualsAndHash", "JavaStringCheckUtf8", "OptimizeFor", "GoPackage", "CcGenericServices", "JavaGenericServices", "PyGenericServices", "Deprecated", "CcEnableArenas", "ObjcClassPrefix", "CsharpNamespace", "SwiftPrefix", "PhpClassPrefix", "PhpNamespace", "PhpMetadataNamespace", "RubyPackage", "Features", "UninterpretedOption" });
        internal_static_google_protobuf_MessageOptions_descriptor = getDescriptor().getMessageType(11);
        internal_static_google_protobuf_MessageOptions_fieldAccessorTable = new GeneratedMessage.FieldAccessorTable(DescriptorProtos.internal_static_google_protobuf_MessageOptions_descriptor, new String[] { "MessageSetWireFormat", "NoStandardDescriptorAccessor", "Deprecated", "MapEntry", "DeprecatedLegacyJsonFieldConflicts", "Features", "UninterpretedOption" });
        internal_static_google_protobuf_FieldOptions_descriptor = getDescriptor().getMessageType(12);
        internal_static_google_protobuf_FieldOptions_fieldAccessorTable = new GeneratedMessage.FieldAccessorTable(DescriptorProtos.internal_static_google_protobuf_FieldOptions_descriptor, new String[] { "Ctype", "Packed", "Jstype", "Lazy", "UnverifiedLazy", "Deprecated", "Weak", "DebugRedact", "Retention", "Targets", "EditionDefaults", "Features", "FeatureSupport", "UninterpretedOption" });
        internal_static_google_protobuf_FieldOptions_EditionDefault_descriptor = DescriptorProtos.internal_static_google_protobuf_FieldOptions_descriptor.getNestedType(0);
        internal_static_google_protobuf_FieldOptions_EditionDefault_fieldAccessorTable = new GeneratedMessage.FieldAccessorTable(DescriptorProtos.internal_static_google_protobuf_FieldOptions_EditionDefault_descriptor, new String[] { "Edition", "Value" });
        internal_static_google_protobuf_FieldOptions_FeatureSupport_descriptor = DescriptorProtos.internal_static_google_protobuf_FieldOptions_descriptor.getNestedType(1);
        internal_static_google_protobuf_FieldOptions_FeatureSupport_fieldAccessorTable = new GeneratedMessage.FieldAccessorTable(DescriptorProtos.internal_static_google_protobuf_FieldOptions_FeatureSupport_descriptor, new String[] { "EditionIntroduced", "EditionDeprecated", "DeprecationWarning", "EditionRemoved" });
        internal_static_google_protobuf_OneofOptions_descriptor = getDescriptor().getMessageType(13);
        internal_static_google_protobuf_OneofOptions_fieldAccessorTable = new GeneratedMessage.FieldAccessorTable(DescriptorProtos.internal_static_google_protobuf_OneofOptions_descriptor, new String[] { "Features", "UninterpretedOption" });
        internal_static_google_protobuf_EnumOptions_descriptor = getDescriptor().getMessageType(14);
        internal_static_google_protobuf_EnumOptions_fieldAccessorTable = new GeneratedMessage.FieldAccessorTable(DescriptorProtos.internal_static_google_protobuf_EnumOptions_descriptor, new String[] { "AllowAlias", "Deprecated", "DeprecatedLegacyJsonFieldConflicts", "Features", "UninterpretedOption" });
        internal_static_google_protobuf_EnumValueOptions_descriptor = getDescriptor().getMessageType(15);
        internal_static_google_protobuf_EnumValueOptions_fieldAccessorTable = new GeneratedMessage.FieldAccessorTable(DescriptorProtos.internal_static_google_protobuf_EnumValueOptions_descriptor, new String[] { "Deprecated", "Features", "DebugRedact", "FeatureSupport", "UninterpretedOption" });
        internal_static_google_protobuf_ServiceOptions_descriptor = getDescriptor().getMessageType(16);
        internal_static_google_protobuf_ServiceOptions_fieldAccessorTable = new GeneratedMessage.FieldAccessorTable(DescriptorProtos.internal_static_google_protobuf_ServiceOptions_descriptor, new String[] { "Features", "Deprecated", "UninterpretedOption" });
        internal_static_google_protobuf_MethodOptions_descriptor = getDescriptor().getMessageType(17);
        internal_static_google_protobuf_MethodOptions_fieldAccessorTable = new GeneratedMessage.FieldAccessorTable(DescriptorProtos.internal_static_google_protobuf_MethodOptions_descriptor, new String[] { "Deprecated", "IdempotencyLevel", "Features", "UninterpretedOption" });
        internal_static_google_protobuf_UninterpretedOption_descriptor = getDescriptor().getMessageType(18);
        internal_static_google_protobuf_UninterpretedOption_fieldAccessorTable = new GeneratedMessage.FieldAccessorTable(DescriptorProtos.internal_static_google_protobuf_UninterpretedOption_descriptor, new String[] { "Name", "IdentifierValue", "PositiveIntValue", "NegativeIntValue", "DoubleValue", "StringValue", "AggregateValue" });
        internal_static_google_protobuf_UninterpretedOption_NamePart_descriptor = DescriptorProtos.internal_static_google_protobuf_UninterpretedOption_descriptor.getNestedType(0);
        internal_static_google_protobuf_UninterpretedOption_NamePart_fieldAccessorTable = new GeneratedMessage.FieldAccessorTable(DescriptorProtos.internal_static_google_protobuf_UninterpretedOption_NamePart_descriptor, new String[] { "NamePart", "IsExtension" });
        internal_static_google_protobuf_FeatureSet_descriptor = getDescriptor().getMessageType(19);
        internal_static_google_protobuf_FeatureSet_fieldAccessorTable = new GeneratedMessage.FieldAccessorTable(DescriptorProtos.internal_static_google_protobuf_FeatureSet_descriptor, new String[] { "FieldPresence", "EnumType", "RepeatedFieldEncoding", "Utf8Validation", "MessageEncoding", "JsonFormat", "EnforceNamingStyle", "DefaultSymbolVisibility" });
        internal_static_google_protobuf_FeatureSet_VisibilityFeature_descriptor = DescriptorProtos.internal_static_google_protobuf_FeatureSet_descriptor.getNestedType(0);
        internal_static_google_protobuf_FeatureSet_VisibilityFeature_fieldAccessorTable = new GeneratedMessage.FieldAccessorTable(DescriptorProtos.internal_static_google_protobuf_FeatureSet_VisibilityFeature_descriptor, new String[0]);
        internal_static_google_protobuf_FeatureSetDefaults_descriptor = getDescriptor().getMessageType(20);
        internal_static_google_protobuf_FeatureSetDefaults_fieldAccessorTable = new GeneratedMessage.FieldAccessorTable(DescriptorProtos.internal_static_google_protobuf_FeatureSetDefaults_descriptor, new String[] { "Defaults", "MinimumEdition", "MaximumEdition" });
        internal_static_google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault_descriptor = DescriptorProtos.internal_static_google_protobuf_FeatureSetDefaults_descriptor.getNestedType(0);
        internal_static_google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault_fieldAccessorTable = new GeneratedMessage.FieldAccessorTable(DescriptorProtos.internal_static_google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault_descriptor, new String[] { "Edition", "OverridableFeatures", "FixedFeatures" });
        internal_static_google_protobuf_SourceCodeInfo_descriptor = getDescriptor().getMessageType(21);
        internal_static_google_protobuf_SourceCodeInfo_fieldAccessorTable = new GeneratedMessage.FieldAccessorTable(DescriptorProtos.internal_static_google_protobuf_SourceCodeInfo_descriptor, new String[] { "Location" });
        internal_static_google_protobuf_SourceCodeInfo_Location_descriptor = DescriptorProtos.internal_static_google_protobuf_SourceCodeInfo_descriptor.getNestedType(0);
        internal_static_google_protobuf_SourceCodeInfo_Location_fieldAccessorTable = new GeneratedMessage.FieldAccessorTable(DescriptorProtos.internal_static_google_protobuf_SourceCodeInfo_Location_descriptor, new String[] { "Path", "Span", "LeadingComments", "TrailingComments", "LeadingDetachedComments" });
        internal_static_google_protobuf_GeneratedCodeInfo_descriptor = getDescriptor().getMessageType(22);
        internal_static_google_protobuf_GeneratedCodeInfo_fieldAccessorTable = new GeneratedMessage.FieldAccessorTable(DescriptorProtos.internal_static_google_protobuf_GeneratedCodeInfo_descriptor, new String[] { "Annotation" });
        internal_static_google_protobuf_GeneratedCodeInfo_Annotation_descriptor = DescriptorProtos.internal_static_google_protobuf_GeneratedCodeInfo_descriptor.getNestedType(0);
        internal_static_google_protobuf_GeneratedCodeInfo_Annotation_fieldAccessorTable = new GeneratedMessage.FieldAccessorTable(DescriptorProtos.internal_static_google_protobuf_GeneratedCodeInfo_Annotation_descriptor, new String[] { "Path", "SourceFile", "Begin", "End", "Semantic" });
        DescriptorProtos.descriptor.resolveAllFeaturesImmutable();
    }
    
    public enum Edition implements ProtocolMessageEnum
    {
        EDITION_UNKNOWN(0), 
        EDITION_LEGACY(900), 
        EDITION_PROTO2(998), 
        EDITION_PROTO3(999), 
        EDITION_2023(1000), 
        EDITION_2024(1001), 
        EDITION_1_TEST_ONLY(1), 
        EDITION_2_TEST_ONLY(2), 
        EDITION_99997_TEST_ONLY(99997), 
        EDITION_99998_TEST_ONLY(99998), 
        EDITION_99999_TEST_ONLY(99999), 
        EDITION_MAX(Integer.MAX_VALUE);
        
        public static final int EDITION_UNKNOWN_VALUE = 0;
        public static final int EDITION_LEGACY_VALUE = 900;
        public static final int EDITION_PROTO2_VALUE = 998;
        public static final int EDITION_PROTO3_VALUE = 999;
        public static final int EDITION_2023_VALUE = 1000;
        public static final int EDITION_2024_VALUE = 1001;
        public static final int EDITION_1_TEST_ONLY_VALUE = 1;
        public static final int EDITION_2_TEST_ONLY_VALUE = 2;
        public static final int EDITION_99997_TEST_ONLY_VALUE = 99997;
        public static final int EDITION_99998_TEST_ONLY_VALUE = 99998;
        public static final int EDITION_99999_TEST_ONLY_VALUE = 99999;
        public static final int EDITION_MAX_VALUE = Integer.MAX_VALUE;
        private static final Internal.EnumLiteMap<Edition> internalValueMap;
        private static final Edition[] VALUES;
        private final int value;
        
        @Override
        public final int getNumber() {
            return this.value;
        }
        
        @Deprecated
        public static Edition valueOf(final int value) {
            return forNumber(value);
        }
        
        public static Edition forNumber(final int value) {
            switch (value) {
                case 0: {
                    return Edition.EDITION_UNKNOWN;
                }
                case 900: {
                    return Edition.EDITION_LEGACY;
                }
                case 998: {
                    return Edition.EDITION_PROTO2;
                }
                case 999: {
                    return Edition.EDITION_PROTO3;
                }
                case 1000: {
                    return Edition.EDITION_2023;
                }
                case 1001: {
                    return Edition.EDITION_2024;
                }
                case 1: {
                    return Edition.EDITION_1_TEST_ONLY;
                }
                case 2: {
                    return Edition.EDITION_2_TEST_ONLY;
                }
                case 99997: {
                    return Edition.EDITION_99997_TEST_ONLY;
                }
                case 99998: {
                    return Edition.EDITION_99998_TEST_ONLY;
                }
                case 99999: {
                    return Edition.EDITION_99999_TEST_ONLY;
                }
                case Integer.MAX_VALUE: {
                    return Edition.EDITION_MAX;
                }
                default: {
                    return null;
                }
            }
        }
        
        public static Internal.EnumLiteMap<Edition> internalGetValueMap() {
            return Edition.internalValueMap;
        }
        
        @Override
        public final Descriptors.EnumValueDescriptor getValueDescriptor() {
            return getDescriptor().getValues().get(this.ordinal());
        }
        
        @Override
        public final Descriptors.EnumDescriptor getDescriptorForType() {
            return getDescriptor();
        }
        
        public static Descriptors.EnumDescriptor getDescriptor() {
            return DescriptorProtos.getDescriptor().getEnumTypes().get(0);
        }
        
        public static Edition valueOf(final Descriptors.EnumValueDescriptor desc) {
            if (desc.getType() != getDescriptor()) {
                throw new IllegalArgumentException("EnumValueDescriptor is not for this type.");
            }
            return Edition.VALUES[desc.getIndex()];
        }
        
        private Edition(final int value) {
            this.value = value;
        }
        
        static {
            RuntimeVersion.validateProtobufGencodeVersion(RuntimeVersion.RuntimeDomain.PUBLIC, 4, 33, 0, "", "Edition");
            internalValueMap = new Internal.EnumLiteMap<Edition>() {
                @Override
                public Edition findValueByNumber(final int number) {
                    return Edition.forNumber(number);
                }
            };
            VALUES = values();
        }
    }
    
    public enum SymbolVisibility implements ProtocolMessageEnum
    {
        VISIBILITY_UNSET(0), 
        VISIBILITY_LOCAL(1), 
        VISIBILITY_EXPORT(2);
        
        public static final int VISIBILITY_UNSET_VALUE = 0;
        public static final int VISIBILITY_LOCAL_VALUE = 1;
        public static final int VISIBILITY_EXPORT_VALUE = 2;
        private static final Internal.EnumLiteMap<SymbolVisibility> internalValueMap;
        private static final SymbolVisibility[] VALUES;
        private final int value;
        
        @Override
        public final int getNumber() {
            return this.value;
        }
        
        @Deprecated
        public static SymbolVisibility valueOf(final int value) {
            return forNumber(value);
        }
        
        public static SymbolVisibility forNumber(final int value) {
            switch (value) {
                case 0: {
                    return SymbolVisibility.VISIBILITY_UNSET;
                }
                case 1: {
                    return SymbolVisibility.VISIBILITY_LOCAL;
                }
                case 2: {
                    return SymbolVisibility.VISIBILITY_EXPORT;
                }
                default: {
                    return null;
                }
            }
        }
        
        public static Internal.EnumLiteMap<SymbolVisibility> internalGetValueMap() {
            return SymbolVisibility.internalValueMap;
        }
        
        @Override
        public final Descriptors.EnumValueDescriptor getValueDescriptor() {
            return getDescriptor().getValues().get(this.ordinal());
        }
        
        @Override
        public final Descriptors.EnumDescriptor getDescriptorForType() {
            return getDescriptor();
        }
        
        public static Descriptors.EnumDescriptor getDescriptor() {
            return DescriptorProtos.getDescriptor().getEnumTypes().get(1);
        }
        
        public static SymbolVisibility valueOf(final Descriptors.EnumValueDescriptor desc) {
            if (desc.getType() != getDescriptor()) {
                throw new IllegalArgumentException("EnumValueDescriptor is not for this type.");
            }
            return SymbolVisibility.VALUES[desc.getIndex()];
        }
        
        private SymbolVisibility(final int value) {
            this.value = value;
        }
        
        static {
            RuntimeVersion.validateProtobufGencodeVersion(RuntimeVersion.RuntimeDomain.PUBLIC, 4, 33, 0, "", "SymbolVisibility");
            internalValueMap = new Internal.EnumLiteMap<SymbolVisibility>() {
                @Override
                public SymbolVisibility findValueByNumber(final int number) {
                    return SymbolVisibility.forNumber(number);
                }
            };
            VALUES = values();
        }
    }
    
    public static final class FileDescriptorSet extends ExtendableMessage<FileDescriptorSet> implements FileDescriptorSetOrBuilder
    {
        private static final long serialVersionUID = 0L;
        public static final int FILE_FIELD_NUMBER = 1;
        private List<FileDescriptorProto> file_;
        private byte memoizedIsInitialized;
        private static final FileDescriptorSet DEFAULT_INSTANCE;
        private static final Parser<FileDescriptorSet> PARSER;
        
        private FileDescriptorSet(final ExtendableBuilder<FileDescriptorSet, ?> builder) {
            super(builder);
            this.memoizedIsInitialized = -1;
        }
        
        private FileDescriptorSet() {
            this.memoizedIsInitialized = -1;
            this.file_ = Collections.emptyList();
        }
        
        public static final Descriptors.Descriptor getDescriptor() {
            return DescriptorProtos.internal_static_google_protobuf_FileDescriptorSet_descriptor;
        }
        
        @Override
        protected FieldAccessorTable internalGetFieldAccessorTable() {
            return DescriptorProtos.internal_static_google_protobuf_FileDescriptorSet_fieldAccessorTable.ensureFieldAccessorsInitialized(FileDescriptorSet.class, Builder.class);
        }
        
        @Override
        public List<FileDescriptorProto> getFileList() {
            return this.file_;
        }
        
        @Override
        public List<? extends FileDescriptorProtoOrBuilder> getFileOrBuilderList() {
            return this.file_;
        }
        
        @Override
        public int getFileCount() {
            return this.file_.size();
        }
        
        @Override
        public FileDescriptorProto getFile(final int index) {
            return this.file_.get(index);
        }
        
        @Override
        public FileDescriptorProtoOrBuilder getFileOrBuilder(final int index) {
            return this.file_.get(index);
        }
        
        @Override
        public final boolean isInitialized() {
            final byte isInitialized = this.memoizedIsInitialized;
            if (isInitialized == 1) {
                return true;
            }
            if (isInitialized == 0) {
                return false;
            }
            for (int i = 0; i < this.getFileCount(); ++i) {
                if (!this.getFile(i).isInitialized()) {
                    this.memoizedIsInitialized = 0;
                    return false;
                }
            }
            if (!this.extensionsAreInitialized()) {
                this.memoizedIsInitialized = 0;
                return false;
            }
            this.memoizedIsInitialized = 1;
            return true;
        }
        
        @Override
        public void writeTo(final CodedOutputStream output) throws IOException {
            final ExtensionSerializer extensionWriter = this.newExtensionSerializer();
            for (int i = 0; i < this.file_.size(); ++i) {
                output.writeMessage(1, this.file_.get(i));
            }
            extensionWriter.writeUntil(536000001, output);
            this.getUnknownFields().writeTo(output);
        }
        
        @Override
        public int getSerializedSize() {
            int size = this.memoizedSize;
            if (size != -1) {
                return size;
            }
            size = 0;
            for (int i = 0; i < this.file_.size(); ++i) {
                size += CodedOutputStream.computeMessageSize(1, this.file_.get(i));
            }
            size += this.extensionsSerializedSize();
            size += this.getUnknownFields().getSerializedSize();
            return this.memoizedSize = size;
        }
        
        @Override
        public boolean equals(final Object obj) {
            if (obj == this) {
                return true;
            }
            if (!(obj instanceof FileDescriptorSet)) {
                return super.equals(obj);
            }
            final FileDescriptorSet other = (FileDescriptorSet)obj;
            return this.getFileList().equals(other.getFileList()) && this.getUnknownFields().equals(other.getUnknownFields()) && this.getExtensionFields().equals(other.getExtensionFields());
        }
        
        @Override
        public int hashCode() {
            if (this.memoizedHashCode != 0) {
                return this.memoizedHashCode;
            }
            int hash = 41;
            hash = 19 * hash + getDescriptor().hashCode();
            if (this.getFileCount() > 0) {
                hash = 37 * hash + 1;
                hash = 53 * hash + this.getFileList().hashCode();
            }
            hash = AbstractMessage.hashFields(hash, this.getExtensionFields());
            hash = 29 * hash + this.getUnknownFields().hashCode();
            return this.memoizedHashCode = hash;
        }
        
        public static FileDescriptorSet parseFrom(final ByteBuffer data) throws InvalidProtocolBufferException {
            return FileDescriptorSet.PARSER.parseFrom(data);
        }
        
        public static FileDescriptorSet parseFrom(final ByteBuffer data, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
            return FileDescriptorSet.PARSER.parseFrom(data, extensionRegistry);
        }
        
        public static FileDescriptorSet parseFrom(final ByteString data) throws InvalidProtocolBufferException {
            return FileDescriptorSet.PARSER.parseFrom(data);
        }
        
        public static FileDescriptorSet parseFrom(final ByteString data, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
            return FileDescriptorSet.PARSER.parseFrom(data, extensionRegistry);
        }
        
        public static FileDescriptorSet parseFrom(final byte[] data) throws InvalidProtocolBufferException {
            return FileDescriptorSet.PARSER.parseFrom(data);
        }
        
        public static FileDescriptorSet parseFrom(final byte[] data, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
            return FileDescriptorSet.PARSER.parseFrom(data, extensionRegistry);
        }
        
        public static FileDescriptorSet parseFrom(final InputStream input) throws IOException {
            return GeneratedMessage.parseWithIOException(FileDescriptorSet.PARSER, input);
        }
        
        public static FileDescriptorSet parseFrom(final InputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
            return GeneratedMessage.parseWithIOException(FileDescriptorSet.PARSER, input, extensionRegistry);
        }
        
        public static FileDescriptorSet parseDelimitedFrom(final InputStream input) throws IOException {
            return GeneratedMessage.parseDelimitedWithIOException(FileDescriptorSet.PARSER, input);
        }
        
        public static FileDescriptorSet parseDelimitedFrom(final InputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
            return GeneratedMessage.parseDelimitedWithIOException(FileDescriptorSet.PARSER, input, extensionRegistry);
        }
        
        public static FileDescriptorSet parseFrom(final CodedInputStream input) throws IOException {
            return GeneratedMessage.parseWithIOException(FileDescriptorSet.PARSER, input);
        }
        
        public static FileDescriptorSet parseFrom(final CodedInputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
            return GeneratedMessage.parseWithIOException(FileDescriptorSet.PARSER, input, extensionRegistry);
        }
        
        @Override
        public Builder newBuilderForType() {
            return newBuilder();
        }
        
        public static Builder newBuilder() {
            return FileDescriptorSet.DEFAULT_INSTANCE.toBuilder();
        }
        
        public static Builder newBuilder(final FileDescriptorSet prototype) {
            return FileDescriptorSet.DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
        }
        
        @Override
        public Builder toBuilder() {
            return (this == FileDescriptorSet.DEFAULT_INSTANCE) ? new Builder() : new Builder().mergeFrom(this);
        }
        
        @Override
        protected Builder newBuilderForType(final BuilderParent parent) {
            final Builder builder = new Builder(parent);
            return builder;
        }
        
        public static FileDescriptorSet getDefaultInstance() {
            return FileDescriptorSet.DEFAULT_INSTANCE;
        }
        
        public static Parser<FileDescriptorSet> parser() {
            return FileDescriptorSet.PARSER;
        }
        
        @Override
        public Parser<FileDescriptorSet> getParserForType() {
            return FileDescriptorSet.PARSER;
        }
        
        @Override
        public FileDescriptorSet getDefaultInstanceForType() {
            return FileDescriptorSet.DEFAULT_INSTANCE;
        }
        
        static {
            RuntimeVersion.validateProtobufGencodeVersion(RuntimeVersion.RuntimeDomain.PUBLIC, 4, 33, 0, "", "FileDescriptorSet");
            DEFAULT_INSTANCE = new FileDescriptorSet();
            PARSER = new AbstractParser<FileDescriptorSet>() {
                @Override
                public FileDescriptorSet parsePartialFrom(final CodedInputStream input, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
                    final Builder builder = FileDescriptorSet.newBuilder();
                    try {
                        builder.mergeFrom(input, extensionRegistry);
                    }
                    catch (final InvalidProtocolBufferException e) {
                        throw e.setUnfinishedMessage(builder.buildPartial());
                    }
                    catch (final UninitializedMessageException e2) {
                        throw e2.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
                    }
                    catch (final IOException e3) {
                        throw new InvalidProtocolBufferException(e3).setUnfinishedMessage(builder.buildPartial());
                    }
                    return builder.buildPartial();
                }
            };
        }
        
        public static final class Builder extends ExtendableBuilder<FileDescriptorSet, Builder> implements FileDescriptorSetOrBuilder
        {
            private int bitField0_;
            private List<FileDescriptorProto> file_;
            private RepeatedFieldBuilder<FileDescriptorProto, FileDescriptorProto.Builder, FileDescriptorProtoOrBuilder> fileBuilder_;
            
            public static final Descriptors.Descriptor getDescriptor() {
                return DescriptorProtos.internal_static_google_protobuf_FileDescriptorSet_descriptor;
            }
            
            @Override
            protected FieldAccessorTable internalGetFieldAccessorTable() {
                return DescriptorProtos.internal_static_google_protobuf_FileDescriptorSet_fieldAccessorTable.ensureFieldAccessorsInitialized(FileDescriptorSet.class, Builder.class);
            }
            
            private Builder() {
                this.file_ = Collections.emptyList();
            }
            
            private Builder(final BuilderParent parent) {
                super(parent);
                this.file_ = Collections.emptyList();
            }
            
            @Override
            public Builder clear() {
                super.clear();
                this.bitField0_ = 0;
                if (this.fileBuilder_ == null) {
                    this.file_ = Collections.emptyList();
                }
                else {
                    this.file_ = null;
                    this.fileBuilder_.clear();
                }
                this.bitField0_ &= 0xFFFFFFFE;
                return this;
            }
            
            @Override
            public Descriptors.Descriptor getDescriptorForType() {
                return DescriptorProtos.internal_static_google_protobuf_FileDescriptorSet_descriptor;
            }
            
            @Override
            public FileDescriptorSet getDefaultInstanceForType() {
                return FileDescriptorSet.getDefaultInstance();
            }
            
            @Override
            public FileDescriptorSet build() {
                final FileDescriptorSet result = this.buildPartial();
                if (!result.isInitialized()) {
                    throw AbstractMessage.Builder.newUninitializedMessageException(result);
                }
                return result;
            }
            
            @Override
            public FileDescriptorSet buildPartial() {
                final FileDescriptorSet result = new FileDescriptorSet((ExtendableBuilder)this);
                this.buildPartialRepeatedFields(result);
                if (this.bitField0_ != 0) {
                    this.buildPartial0(result);
                }
                this.onBuilt();
                return result;
            }
            
            private void buildPartialRepeatedFields(final FileDescriptorSet result) {
                if (this.fileBuilder_ == null) {
                    if ((this.bitField0_ & 0x1) != 0x0) {
                        this.file_ = Collections.unmodifiableList((List<? extends FileDescriptorProto>)this.file_);
                        this.bitField0_ &= 0xFFFFFFFE;
                    }
                    result.file_ = this.file_;
                }
                else {
                    result.file_ = this.fileBuilder_.build();
                }
            }
            
            private void buildPartial0(final FileDescriptorSet result) {
                final int from_bitField0_ = this.bitField0_;
            }
            
            public <Type> Builder setExtension(final GeneratedExtension<FileDescriptorSet, Type> extension, final Type value) {
                return super.setExtension(extension, value);
            }
            
            public <Type> Builder setExtension(final GeneratedExtension<FileDescriptorSet, List<Type>> extension, final int index, final Type value) {
                return super.setExtension(extension, index, value);
            }
            
            public <Type> Builder addExtension(final GeneratedExtension<FileDescriptorSet, List<Type>> extension, final Type value) {
                return super.addExtension(extension, value);
            }
            
            public <Type> Builder clearExtension(final GeneratedExtension<FileDescriptorSet, Type> extension) {
                return super.clearExtension(extension);
            }
            
            @Override
            public Builder mergeFrom(final Message other) {
                if (other instanceof FileDescriptorSet) {
                    return this.mergeFrom((FileDescriptorSet)other);
                }
                super.mergeFrom(other);
                return this;
            }
            
            public Builder mergeFrom(final FileDescriptorSet other) {
                if (other == FileDescriptorSet.getDefaultInstance()) {
                    return this;
                }
                if (this.fileBuilder_ == null) {
                    if (!other.file_.isEmpty()) {
                        if (this.file_.isEmpty()) {
                            this.file_ = other.file_;
                            this.bitField0_ &= 0xFFFFFFFE;
                        }
                        else {
                            this.ensureFileIsMutable();
                            this.file_.addAll(other.file_);
                        }
                        this.onChanged();
                    }
                }
                else if (!other.file_.isEmpty()) {
                    if (this.fileBuilder_.isEmpty()) {
                        this.fileBuilder_.dispose();
                        this.fileBuilder_ = null;
                        this.file_ = other.file_;
                        this.bitField0_ &= 0xFFFFFFFE;
                        this.fileBuilder_ = (GeneratedMessage.alwaysUseFieldBuilders ? this.internalGetFileFieldBuilder() : null);
                    }
                    else {
                        this.fileBuilder_.addAllMessages(other.file_);
                    }
                }
                this.mergeExtensionFields(other);
                this.mergeUnknownFields(other.getUnknownFields());
                this.onChanged();
                return this;
            }
            
            @Override
            public final boolean isInitialized() {
                for (int i = 0; i < this.getFileCount(); ++i) {
                    if (!this.getFile(i).isInitialized()) {
                        return false;
                    }
                }
                return this.extensionsAreInitialized();
            }
            
            @Override
            public Builder mergeFrom(final CodedInputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
                if (extensionRegistry == null) {
                    throw new NullPointerException();
                }
                try {
                    boolean done = false;
                    while (!done) {
                        final int tag = input.readTag();
                        switch (tag) {
                            case 0: {
                                done = true;
                                continue;
                            }
                            case 10: {
                                final FileDescriptorProto m = input.readMessage(FileDescriptorProto.parser(), extensionRegistry);
                                if (this.fileBuilder_ == null) {
                                    this.ensureFileIsMutable();
                                    this.file_.add(m);
                                    continue;
                                }
                                this.fileBuilder_.addMessage(m);
                                continue;
                            }
                            default: {
                                if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                                    done = true;
                                    continue;
                                }
                                continue;
                            }
                        }
                    }
                }
                catch (final InvalidProtocolBufferException e) {
                    throw e.unwrapIOException();
                }
                finally {
                    this.onChanged();
                }
                return this;
            }
            
            private void ensureFileIsMutable() {
                if ((this.bitField0_ & 0x1) == 0x0) {
                    this.file_ = new ArrayList<FileDescriptorProto>(this.file_);
                    this.bitField0_ |= 0x1;
                }
            }
            
            @Override
            public List<FileDescriptorProto> getFileList() {
                if (this.fileBuilder_ == null) {
                    return Collections.unmodifiableList((List<? extends FileDescriptorProto>)this.file_);
                }
                return this.fileBuilder_.getMessageList();
            }
            
            @Override
            public int getFileCount() {
                if (this.fileBuilder_ == null) {
                    return this.file_.size();
                }
                return this.fileBuilder_.getCount();
            }
            
            @Override
            public FileDescriptorProto getFile(final int index) {
                if (this.fileBuilder_ == null) {
                    return this.file_.get(index);
                }
                return this.fileBuilder_.getMessage(index);
            }
            
            public Builder setFile(final int index, final FileDescriptorProto value) {
                if (this.fileBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.ensureFileIsMutable();
                    this.file_.set(index, value);
                    this.onChanged();
                }
                else {
                    this.fileBuilder_.setMessage(index, value);
                }
                return this;
            }
            
            public Builder setFile(final int index, final FileDescriptorProto.Builder builderForValue) {
                if (this.fileBuilder_ == null) {
                    this.ensureFileIsMutable();
                    this.file_.set(index, builderForValue.build());
                    this.onChanged();
                }
                else {
                    this.fileBuilder_.setMessage(index, builderForValue.build());
                }
                return this;
            }
            
            public Builder addFile(final FileDescriptorProto value) {
                if (this.fileBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.ensureFileIsMutable();
                    this.file_.add(value);
                    this.onChanged();
                }
                else {
                    this.fileBuilder_.addMessage(value);
                }
                return this;
            }
            
            public Builder addFile(final int index, final FileDescriptorProto value) {
                if (this.fileBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.ensureFileIsMutable();
                    this.file_.add(index, value);
                    this.onChanged();
                }
                else {
                    this.fileBuilder_.addMessage(index, value);
                }
                return this;
            }
            
            public Builder addFile(final FileDescriptorProto.Builder builderForValue) {
                if (this.fileBuilder_ == null) {
                    this.ensureFileIsMutable();
                    this.file_.add(builderForValue.build());
                    this.onChanged();
                }
                else {
                    this.fileBuilder_.addMessage(builderForValue.build());
                }
                return this;
            }
            
            public Builder addFile(final int index, final FileDescriptorProto.Builder builderForValue) {
                if (this.fileBuilder_ == null) {
                    this.ensureFileIsMutable();
                    this.file_.add(index, builderForValue.build());
                    this.onChanged();
                }
                else {
                    this.fileBuilder_.addMessage(index, builderForValue.build());
                }
                return this;
            }
            
            public Builder addAllFile(final Iterable<? extends FileDescriptorProto> values) {
                if (this.fileBuilder_ == null) {
                    this.ensureFileIsMutable();
                    AbstractMessageLite.Builder.addAll(values, this.file_);
                    this.onChanged();
                }
                else {
                    this.fileBuilder_.addAllMessages(values);
                }
                return this;
            }
            
            public Builder clearFile() {
                if (this.fileBuilder_ == null) {
                    this.file_ = Collections.emptyList();
                    this.bitField0_ &= 0xFFFFFFFE;
                    this.onChanged();
                }
                else {
                    this.fileBuilder_.clear();
                }
                return this;
            }
            
            public Builder removeFile(final int index) {
                if (this.fileBuilder_ == null) {
                    this.ensureFileIsMutable();
                    this.file_.remove(index);
                    this.onChanged();
                }
                else {
                    this.fileBuilder_.remove(index);
                }
                return this;
            }
            
            public FileDescriptorProto.Builder getFileBuilder(final int index) {
                return this.internalGetFileFieldBuilder().getBuilder(index);
            }
            
            @Override
            public FileDescriptorProtoOrBuilder getFileOrBuilder(final int index) {
                if (this.fileBuilder_ == null) {
                    return this.file_.get(index);
                }
                return this.fileBuilder_.getMessageOrBuilder(index);
            }
            
            @Override
            public List<? extends FileDescriptorProtoOrBuilder> getFileOrBuilderList() {
                if (this.fileBuilder_ != null) {
                    return this.fileBuilder_.getMessageOrBuilderList();
                }
                return Collections.unmodifiableList((List<? extends FileDescriptorProtoOrBuilder>)this.file_);
            }
            
            public FileDescriptorProto.Builder addFileBuilder() {
                return this.internalGetFileFieldBuilder().addBuilder(FileDescriptorProto.getDefaultInstance());
            }
            
            public FileDescriptorProto.Builder addFileBuilder(final int index) {
                return this.internalGetFileFieldBuilder().addBuilder(index, FileDescriptorProto.getDefaultInstance());
            }
            
            public List<FileDescriptorProto.Builder> getFileBuilderList() {
                return this.internalGetFileFieldBuilder().getBuilderList();
            }
            
            private RepeatedFieldBuilder<FileDescriptorProto, FileDescriptorProto.Builder, FileDescriptorProtoOrBuilder> internalGetFileFieldBuilder() {
                if (this.fileBuilder_ == null) {
                    this.fileBuilder_ = new RepeatedFieldBuilder<FileDescriptorProto, FileDescriptorProto.Builder, FileDescriptorProtoOrBuilder>(this.file_, (this.bitField0_ & 0x1) != 0x0, this.getParentForChildren(), this.isClean());
                    this.file_ = null;
                }
                return this.fileBuilder_;
            }
        }
    }
    
    public static final class FileDescriptorProto extends GeneratedMessage implements FileDescriptorProtoOrBuilder
    {
        private static final long serialVersionUID = 0L;
        private int bitField0_;
        public static final int NAME_FIELD_NUMBER = 1;
        private volatile Object name_;
        public static final int PACKAGE_FIELD_NUMBER = 2;
        private volatile Object package_;
        public static final int DEPENDENCY_FIELD_NUMBER = 3;
        private LazyStringArrayList dependency_;
        public static final int PUBLIC_DEPENDENCY_FIELD_NUMBER = 10;
        private Internal.IntList publicDependency_;
        public static final int WEAK_DEPENDENCY_FIELD_NUMBER = 11;
        private Internal.IntList weakDependency_;
        public static final int OPTION_DEPENDENCY_FIELD_NUMBER = 15;
        private LazyStringArrayList optionDependency_;
        public static final int MESSAGE_TYPE_FIELD_NUMBER = 4;
        private List<DescriptorProto> messageType_;
        public static final int ENUM_TYPE_FIELD_NUMBER = 5;
        private List<EnumDescriptorProto> enumType_;
        public static final int SERVICE_FIELD_NUMBER = 6;
        private List<ServiceDescriptorProto> service_;
        public static final int EXTENSION_FIELD_NUMBER = 7;
        private List<FieldDescriptorProto> extension_;
        public static final int OPTIONS_FIELD_NUMBER = 8;
        private FileOptions options_;
        public static final int SOURCE_CODE_INFO_FIELD_NUMBER = 9;
        private SourceCodeInfo sourceCodeInfo_;
        public static final int SYNTAX_FIELD_NUMBER = 12;
        private volatile Object syntax_;
        public static final int EDITION_FIELD_NUMBER = 14;
        private int edition_;
        private byte memoizedIsInitialized;
        private static final FileDescriptorProto DEFAULT_INSTANCE;
        private static final Parser<FileDescriptorProto> PARSER;
        
        private FileDescriptorProto(final GeneratedMessage.Builder<?> builder) {
            super(builder);
            this.name_ = "";
            this.package_ = "";
            this.dependency_ = LazyStringArrayList.emptyList();
            this.publicDependency_ = GeneratedMessage.emptyIntList();
            this.weakDependency_ = GeneratedMessage.emptyIntList();
            this.optionDependency_ = LazyStringArrayList.emptyList();
            this.syntax_ = "";
            this.edition_ = 0;
            this.memoizedIsInitialized = -1;
        }
        
        private FileDescriptorProto() {
            this.name_ = "";
            this.package_ = "";
            this.dependency_ = LazyStringArrayList.emptyList();
            this.publicDependency_ = GeneratedMessage.emptyIntList();
            this.weakDependency_ = GeneratedMessage.emptyIntList();
            this.optionDependency_ = LazyStringArrayList.emptyList();
            this.syntax_ = "";
            this.edition_ = 0;
            this.memoizedIsInitialized = -1;
            this.name_ = "";
            this.package_ = "";
            this.dependency_ = LazyStringArrayList.emptyList();
            this.publicDependency_ = GeneratedMessage.emptyIntList();
            this.weakDependency_ = GeneratedMessage.emptyIntList();
            this.optionDependency_ = LazyStringArrayList.emptyList();
            this.messageType_ = Collections.emptyList();
            this.enumType_ = Collections.emptyList();
            this.service_ = Collections.emptyList();
            this.extension_ = Collections.emptyList();
            this.syntax_ = "";
            this.edition_ = 0;
        }
        
        public static final Descriptors.Descriptor getDescriptor() {
            return DescriptorProtos.internal_static_google_protobuf_FileDescriptorProto_descriptor;
        }
        
        @Override
        protected FieldAccessorTable internalGetFieldAccessorTable() {
            return DescriptorProtos.internal_static_google_protobuf_FileDescriptorProto_fieldAccessorTable.ensureFieldAccessorsInitialized(FileDescriptorProto.class, Builder.class);
        }
        
        @Override
        public boolean hasName() {
            return (this.bitField0_ & 0x1) != 0x0;
        }
        
        @Override
        public String getName() {
            final Object ref = this.name_;
            if (ref instanceof String) {
                return (String)ref;
            }
            final ByteString bs = (ByteString)ref;
            final String s = bs.toStringUtf8();
            if (bs.isValidUtf8()) {
                this.name_ = s;
            }
            return s;
        }
        
        @Override
        public ByteString getNameBytes() {
            final Object ref = this.name_;
            if (ref instanceof String) {
                final ByteString b = ByteString.copyFromUtf8((String)ref);
                return (ByteString)(this.name_ = b);
            }
            return (ByteString)ref;
        }
        
        @Override
        public boolean hasPackage() {
            return (this.bitField0_ & 0x2) != 0x0;
        }
        
        @Override
        public String getPackage() {
            final Object ref = this.package_;
            if (ref instanceof String) {
                return (String)ref;
            }
            final ByteString bs = (ByteString)ref;
            final String s = bs.toStringUtf8();
            if (bs.isValidUtf8()) {
                this.package_ = s;
            }
            return s;
        }
        
        @Override
        public ByteString getPackageBytes() {
            final Object ref = this.package_;
            if (ref instanceof String) {
                final ByteString b = ByteString.copyFromUtf8((String)ref);
                return (ByteString)(this.package_ = b);
            }
            return (ByteString)ref;
        }
        
        @Override
        public ProtocolStringList getDependencyList() {
            return this.dependency_;
        }
        
        @Override
        public int getDependencyCount() {
            return this.dependency_.size();
        }
        
        @Override
        public String getDependency(final int index) {
            return this.dependency_.get(index);
        }
        
        @Override
        public ByteString getDependencyBytes(final int index) {
            return this.dependency_.getByteString(index);
        }
        
        @Override
        public List<Integer> getPublicDependencyList() {
            return this.publicDependency_;
        }
        
        @Override
        public int getPublicDependencyCount() {
            return this.publicDependency_.size();
        }
        
        @Override
        public int getPublicDependency(final int index) {
            return this.publicDependency_.getInt(index);
        }
        
        @Override
        public List<Integer> getWeakDependencyList() {
            return this.weakDependency_;
        }
        
        @Override
        public int getWeakDependencyCount() {
            return this.weakDependency_.size();
        }
        
        @Override
        public int getWeakDependency(final int index) {
            return this.weakDependency_.getInt(index);
        }
        
        @Override
        public ProtocolStringList getOptionDependencyList() {
            return this.optionDependency_;
        }
        
        @Override
        public int getOptionDependencyCount() {
            return this.optionDependency_.size();
        }
        
        @Override
        public String getOptionDependency(final int index) {
            return this.optionDependency_.get(index);
        }
        
        @Override
        public ByteString getOptionDependencyBytes(final int index) {
            return this.optionDependency_.getByteString(index);
        }
        
        @Override
        public List<DescriptorProto> getMessageTypeList() {
            return this.messageType_;
        }
        
        @Override
        public List<? extends DescriptorProtoOrBuilder> getMessageTypeOrBuilderList() {
            return this.messageType_;
        }
        
        @Override
        public int getMessageTypeCount() {
            return this.messageType_.size();
        }
        
        @Override
        public DescriptorProto getMessageType(final int index) {
            return this.messageType_.get(index);
        }
        
        @Override
        public DescriptorProtoOrBuilder getMessageTypeOrBuilder(final int index) {
            return this.messageType_.get(index);
        }
        
        @Override
        public List<EnumDescriptorProto> getEnumTypeList() {
            return this.enumType_;
        }
        
        @Override
        public List<? extends EnumDescriptorProtoOrBuilder> getEnumTypeOrBuilderList() {
            return this.enumType_;
        }
        
        @Override
        public int getEnumTypeCount() {
            return this.enumType_.size();
        }
        
        @Override
        public EnumDescriptorProto getEnumType(final int index) {
            return this.enumType_.get(index);
        }
        
        @Override
        public EnumDescriptorProtoOrBuilder getEnumTypeOrBuilder(final int index) {
            return this.enumType_.get(index);
        }
        
        @Override
        public List<ServiceDescriptorProto> getServiceList() {
            return this.service_;
        }
        
        @Override
        public List<? extends ServiceDescriptorProtoOrBuilder> getServiceOrBuilderList() {
            return this.service_;
        }
        
        @Override
        public int getServiceCount() {
            return this.service_.size();
        }
        
        @Override
        public ServiceDescriptorProto getService(final int index) {
            return this.service_.get(index);
        }
        
        @Override
        public ServiceDescriptorProtoOrBuilder getServiceOrBuilder(final int index) {
            return this.service_.get(index);
        }
        
        @Override
        public List<FieldDescriptorProto> getExtensionList() {
            return this.extension_;
        }
        
        @Override
        public List<? extends FieldDescriptorProtoOrBuilder> getExtensionOrBuilderList() {
            return this.extension_;
        }
        
        @Override
        public int getExtensionCount() {
            return this.extension_.size();
        }
        
        @Override
        public FieldDescriptorProto getExtension(final int index) {
            return this.extension_.get(index);
        }
        
        @Override
        public FieldDescriptorProtoOrBuilder getExtensionOrBuilder(final int index) {
            return this.extension_.get(index);
        }
        
        @Override
        public boolean hasOptions() {
            return (this.bitField0_ & 0x4) != 0x0;
        }
        
        @Override
        public FileOptions getOptions() {
            return (this.options_ == null) ? FileOptions.getDefaultInstance() : this.options_;
        }
        
        @Override
        public FileOptionsOrBuilder getOptionsOrBuilder() {
            return (this.options_ == null) ? FileOptions.getDefaultInstance() : this.options_;
        }
        
        @Override
        public boolean hasSourceCodeInfo() {
            return (this.bitField0_ & 0x8) != 0x0;
        }
        
        @Override
        public SourceCodeInfo getSourceCodeInfo() {
            return (this.sourceCodeInfo_ == null) ? SourceCodeInfo.getDefaultInstance() : this.sourceCodeInfo_;
        }
        
        @Override
        public SourceCodeInfoOrBuilder getSourceCodeInfoOrBuilder() {
            return (this.sourceCodeInfo_ == null) ? SourceCodeInfo.getDefaultInstance() : this.sourceCodeInfo_;
        }
        
        @Override
        public boolean hasSyntax() {
            return (this.bitField0_ & 0x10) != 0x0;
        }
        
        @Override
        public String getSyntax() {
            final Object ref = this.syntax_;
            if (ref instanceof String) {
                return (String)ref;
            }
            final ByteString bs = (ByteString)ref;
            final String s = bs.toStringUtf8();
            if (bs.isValidUtf8()) {
                this.syntax_ = s;
            }
            return s;
        }
        
        @Override
        public ByteString getSyntaxBytes() {
            final Object ref = this.syntax_;
            if (ref instanceof String) {
                final ByteString b = ByteString.copyFromUtf8((String)ref);
                return (ByteString)(this.syntax_ = b);
            }
            return (ByteString)ref;
        }
        
        @Override
        public boolean hasEdition() {
            return (this.bitField0_ & 0x20) != 0x0;
        }
        
        @Override
        public Edition getEdition() {
            final Edition result = Edition.forNumber(this.edition_);
            return (result == null) ? Edition.EDITION_UNKNOWN : result;
        }
        
        @Override
        public final boolean isInitialized() {
            final byte isInitialized = this.memoizedIsInitialized;
            if (isInitialized == 1) {
                return true;
            }
            if (isInitialized == 0) {
                return false;
            }
            for (int i = 0; i < this.getMessageTypeCount(); ++i) {
                if (!this.getMessageType(i).isInitialized()) {
                    this.memoizedIsInitialized = 0;
                    return false;
                }
            }
            for (int i = 0; i < this.getEnumTypeCount(); ++i) {
                if (!this.getEnumType(i).isInitialized()) {
                    this.memoizedIsInitialized = 0;
                    return false;
                }
            }
            for (int i = 0; i < this.getServiceCount(); ++i) {
                if (!this.getService(i).isInitialized()) {
                    this.memoizedIsInitialized = 0;
                    return false;
                }
            }
            for (int i = 0; i < this.getExtensionCount(); ++i) {
                if (!this.getExtension(i).isInitialized()) {
                    this.memoizedIsInitialized = 0;
                    return false;
                }
            }
            if (this.hasOptions() && !this.getOptions().isInitialized()) {
                this.memoizedIsInitialized = 0;
                return false;
            }
            if (this.hasSourceCodeInfo() && !this.getSourceCodeInfo().isInitialized()) {
                this.memoizedIsInitialized = 0;
                return false;
            }
            this.memoizedIsInitialized = 1;
            return true;
        }
        
        @Override
        public void writeTo(final CodedOutputStream output) throws IOException {
            if ((this.bitField0_ & 0x1) != 0x0) {
                GeneratedMessage.writeString(output, 1, this.name_);
            }
            if ((this.bitField0_ & 0x2) != 0x0) {
                GeneratedMessage.writeString(output, 2, this.package_);
            }
            for (int i = 0; i < this.dependency_.size(); ++i) {
                GeneratedMessage.writeString(output, 3, this.dependency_.getRaw(i));
            }
            for (int i = 0; i < this.messageType_.size(); ++i) {
                output.writeMessage(4, this.messageType_.get(i));
            }
            for (int i = 0; i < this.enumType_.size(); ++i) {
                output.writeMessage(5, this.enumType_.get(i));
            }
            for (int i = 0; i < this.service_.size(); ++i) {
                output.writeMessage(6, this.service_.get(i));
            }
            for (int i = 0; i < this.extension_.size(); ++i) {
                output.writeMessage(7, this.extension_.get(i));
            }
            if ((this.bitField0_ & 0x4) != 0x0) {
                output.writeMessage(8, this.getOptions());
            }
            if ((this.bitField0_ & 0x8) != 0x0) {
                output.writeMessage(9, this.getSourceCodeInfo());
            }
            for (int i = 0; i < this.publicDependency_.size(); ++i) {
                output.writeInt32(10, this.publicDependency_.getInt(i));
            }
            for (int i = 0; i < this.weakDependency_.size(); ++i) {
                output.writeInt32(11, this.weakDependency_.getInt(i));
            }
            if ((this.bitField0_ & 0x10) != 0x0) {
                GeneratedMessage.writeString(output, 12, this.syntax_);
            }
            if ((this.bitField0_ & 0x20) != 0x0) {
                output.writeEnum(14, this.edition_);
            }
            for (int i = 0; i < this.optionDependency_.size(); ++i) {
                GeneratedMessage.writeString(output, 15, this.optionDependency_.getRaw(i));
            }
            this.getUnknownFields().writeTo(output);
        }
        
        @Override
        public int getSerializedSize() {
            int size = this.memoizedSize;
            if (size != -1) {
                return size;
            }
            size = 0;
            if ((this.bitField0_ & 0x1) != 0x0) {
                size += GeneratedMessage.computeStringSize(1, this.name_);
            }
            if ((this.bitField0_ & 0x2) != 0x0) {
                size += GeneratedMessage.computeStringSize(2, this.package_);
            }
            int dataSize = 0;
            for (int i = 0; i < this.dependency_.size(); ++i) {
                dataSize += GeneratedMessage.computeStringSizeNoTag(this.dependency_.getRaw(i));
            }
            size += dataSize;
            size += 1 * this.getDependencyList().size();
            for (int j = 0; j < this.messageType_.size(); ++j) {
                size += CodedOutputStream.computeMessageSize(4, this.messageType_.get(j));
            }
            for (int j = 0; j < this.enumType_.size(); ++j) {
                size += CodedOutputStream.computeMessageSize(5, this.enumType_.get(j));
            }
            for (int j = 0; j < this.service_.size(); ++j) {
                size += CodedOutputStream.computeMessageSize(6, this.service_.get(j));
            }
            for (int j = 0; j < this.extension_.size(); ++j) {
                size += CodedOutputStream.computeMessageSize(7, this.extension_.get(j));
            }
            if ((this.bitField0_ & 0x4) != 0x0) {
                size += CodedOutputStream.computeMessageSize(8, this.getOptions());
            }
            if ((this.bitField0_ & 0x8) != 0x0) {
                size += CodedOutputStream.computeMessageSize(9, this.getSourceCodeInfo());
            }
            dataSize = 0;
            for (int i = 0; i < this.publicDependency_.size(); ++i) {
                dataSize += CodedOutputStream.computeInt32SizeNoTag(this.publicDependency_.getInt(i));
            }
            size += dataSize;
            size += 1 * this.getPublicDependencyList().size();
            dataSize = 0;
            for (int i = 0; i < this.weakDependency_.size(); ++i) {
                dataSize += CodedOutputStream.computeInt32SizeNoTag(this.weakDependency_.getInt(i));
            }
            size += dataSize;
            size += 1 * this.getWeakDependencyList().size();
            if ((this.bitField0_ & 0x10) != 0x0) {
                size += GeneratedMessage.computeStringSize(12, this.syntax_);
            }
            if ((this.bitField0_ & 0x20) != 0x0) {
                size += CodedOutputStream.computeEnumSize(14, this.edition_);
            }
            dataSize = 0;
            for (int i = 0; i < this.optionDependency_.size(); ++i) {
                dataSize += GeneratedMessage.computeStringSizeNoTag(this.optionDependency_.getRaw(i));
            }
            size += dataSize;
            size += 1 * this.getOptionDependencyList().size();
            size += this.getUnknownFields().getSerializedSize();
            return this.memoizedSize = size;
        }
        
        @Override
        public boolean equals(final Object obj) {
            if (obj == this) {
                return true;
            }
            if (!(obj instanceof FileDescriptorProto)) {
                return super.equals(obj);
            }
            final FileDescriptorProto other = (FileDescriptorProto)obj;
            return this.hasName() == other.hasName() && (!this.hasName() || this.getName().equals(other.getName())) && this.hasPackage() == other.hasPackage() && (!this.hasPackage() || this.getPackage().equals(other.getPackage())) && this.getDependencyList().equals(other.getDependencyList()) && this.getPublicDependencyList().equals(other.getPublicDependencyList()) && this.getWeakDependencyList().equals(other.getWeakDependencyList()) && this.getOptionDependencyList().equals(other.getOptionDependencyList()) && this.getMessageTypeList().equals(other.getMessageTypeList()) && this.getEnumTypeList().equals(other.getEnumTypeList()) && this.getServiceList().equals(other.getServiceList()) && this.getExtensionList().equals(other.getExtensionList()) && this.hasOptions() == other.hasOptions() && (!this.hasOptions() || this.getOptions().equals(other.getOptions())) && this.hasSourceCodeInfo() == other.hasSourceCodeInfo() && (!this.hasSourceCodeInfo() || this.getSourceCodeInfo().equals(other.getSourceCodeInfo())) && this.hasSyntax() == other.hasSyntax() && (!this.hasSyntax() || this.getSyntax().equals(other.getSyntax())) && this.hasEdition() == other.hasEdition() && (!this.hasEdition() || this.edition_ == other.edition_) && this.getUnknownFields().equals(other.getUnknownFields());
        }
        
        @Override
        public int hashCode() {
            if (this.memoizedHashCode != 0) {
                return this.memoizedHashCode;
            }
            int hash = 41;
            hash = 19 * hash + getDescriptor().hashCode();
            if (this.hasName()) {
                hash = 37 * hash + 1;
                hash = 53 * hash + this.getName().hashCode();
            }
            if (this.hasPackage()) {
                hash = 37 * hash + 2;
                hash = 53 * hash + this.getPackage().hashCode();
            }
            if (this.getDependencyCount() > 0) {
                hash = 37 * hash + 3;
                hash = 53 * hash + this.getDependencyList().hashCode();
            }
            if (this.getPublicDependencyCount() > 0) {
                hash = 37 * hash + 10;
                hash = 53 * hash + this.getPublicDependencyList().hashCode();
            }
            if (this.getWeakDependencyCount() > 0) {
                hash = 37 * hash + 11;
                hash = 53 * hash + this.getWeakDependencyList().hashCode();
            }
            if (this.getOptionDependencyCount() > 0) {
                hash = 37 * hash + 15;
                hash = 53 * hash + this.getOptionDependencyList().hashCode();
            }
            if (this.getMessageTypeCount() > 0) {
                hash = 37 * hash + 4;
                hash = 53 * hash + this.getMessageTypeList().hashCode();
            }
            if (this.getEnumTypeCount() > 0) {
                hash = 37 * hash + 5;
                hash = 53 * hash + this.getEnumTypeList().hashCode();
            }
            if (this.getServiceCount() > 0) {
                hash = 37 * hash + 6;
                hash = 53 * hash + this.getServiceList().hashCode();
            }
            if (this.getExtensionCount() > 0) {
                hash = 37 * hash + 7;
                hash = 53 * hash + this.getExtensionList().hashCode();
            }
            if (this.hasOptions()) {
                hash = 37 * hash + 8;
                hash = 53 * hash + this.getOptions().hashCode();
            }
            if (this.hasSourceCodeInfo()) {
                hash = 37 * hash + 9;
                hash = 53 * hash + this.getSourceCodeInfo().hashCode();
            }
            if (this.hasSyntax()) {
                hash = 37 * hash + 12;
                hash = 53 * hash + this.getSyntax().hashCode();
            }
            if (this.hasEdition()) {
                hash = 37 * hash + 14;
                hash = 53 * hash + this.edition_;
            }
            hash = 29 * hash + this.getUnknownFields().hashCode();
            return this.memoizedHashCode = hash;
        }
        
        public static FileDescriptorProto parseFrom(final ByteBuffer data) throws InvalidProtocolBufferException {
            return FileDescriptorProto.PARSER.parseFrom(data);
        }
        
        public static FileDescriptorProto parseFrom(final ByteBuffer data, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
            return FileDescriptorProto.PARSER.parseFrom(data, extensionRegistry);
        }
        
        public static FileDescriptorProto parseFrom(final ByteString data) throws InvalidProtocolBufferException {
            return FileDescriptorProto.PARSER.parseFrom(data);
        }
        
        public static FileDescriptorProto parseFrom(final ByteString data, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
            return FileDescriptorProto.PARSER.parseFrom(data, extensionRegistry);
        }
        
        public static FileDescriptorProto parseFrom(final byte[] data) throws InvalidProtocolBufferException {
            return FileDescriptorProto.PARSER.parseFrom(data);
        }
        
        public static FileDescriptorProto parseFrom(final byte[] data, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
            return FileDescriptorProto.PARSER.parseFrom(data, extensionRegistry);
        }
        
        public static FileDescriptorProto parseFrom(final InputStream input) throws IOException {
            return GeneratedMessage.parseWithIOException(FileDescriptorProto.PARSER, input);
        }
        
        public static FileDescriptorProto parseFrom(final InputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
            return GeneratedMessage.parseWithIOException(FileDescriptorProto.PARSER, input, extensionRegistry);
        }
        
        public static FileDescriptorProto parseDelimitedFrom(final InputStream input) throws IOException {
            return GeneratedMessage.parseDelimitedWithIOException(FileDescriptorProto.PARSER, input);
        }
        
        public static FileDescriptorProto parseDelimitedFrom(final InputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
            return GeneratedMessage.parseDelimitedWithIOException(FileDescriptorProto.PARSER, input, extensionRegistry);
        }
        
        public static FileDescriptorProto parseFrom(final CodedInputStream input) throws IOException {
            return GeneratedMessage.parseWithIOException(FileDescriptorProto.PARSER, input);
        }
        
        public static FileDescriptorProto parseFrom(final CodedInputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
            return GeneratedMessage.parseWithIOException(FileDescriptorProto.PARSER, input, extensionRegistry);
        }
        
        @Override
        public Builder newBuilderForType() {
            return newBuilder();
        }
        
        public static Builder newBuilder() {
            return FileDescriptorProto.DEFAULT_INSTANCE.toBuilder();
        }
        
        public static Builder newBuilder(final FileDescriptorProto prototype) {
            return FileDescriptorProto.DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
        }
        
        @Override
        public Builder toBuilder() {
            return (this == FileDescriptorProto.DEFAULT_INSTANCE) ? new Builder() : new Builder().mergeFrom(this);
        }
        
        @Override
        protected Builder newBuilderForType(final BuilderParent parent) {
            final Builder builder = new Builder(parent);
            return builder;
        }
        
        public static FileDescriptorProto getDefaultInstance() {
            return FileDescriptorProto.DEFAULT_INSTANCE;
        }
        
        public static Parser<FileDescriptorProto> parser() {
            return FileDescriptorProto.PARSER;
        }
        
        @Override
        public Parser<FileDescriptorProto> getParserForType() {
            return FileDescriptorProto.PARSER;
        }
        
        @Override
        public FileDescriptorProto getDefaultInstanceForType() {
            return FileDescriptorProto.DEFAULT_INSTANCE;
        }
        
        static {
            RuntimeVersion.validateProtobufGencodeVersion(RuntimeVersion.RuntimeDomain.PUBLIC, 4, 33, 0, "", "FileDescriptorProto");
            DEFAULT_INSTANCE = new FileDescriptorProto();
            PARSER = new AbstractParser<FileDescriptorProto>() {
                @Override
                public FileDescriptorProto parsePartialFrom(final CodedInputStream input, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
                    final Builder builder = FileDescriptorProto.newBuilder();
                    try {
                        builder.mergeFrom(input, extensionRegistry);
                    }
                    catch (final InvalidProtocolBufferException e) {
                        throw e.setUnfinishedMessage(builder.buildPartial());
                    }
                    catch (final UninitializedMessageException e2) {
                        throw e2.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
                    }
                    catch (final IOException e3) {
                        throw new InvalidProtocolBufferException(e3).setUnfinishedMessage(builder.buildPartial());
                    }
                    return builder.buildPartial();
                }
            };
        }
        
        public static final class Builder extends GeneratedMessage.Builder<Builder> implements FileDescriptorProtoOrBuilder
        {
            private int bitField0_;
            private Object name_;
            private Object package_;
            private LazyStringArrayList dependency_;
            private Internal.IntList publicDependency_;
            private Internal.IntList weakDependency_;
            private LazyStringArrayList optionDependency_;
            private List<DescriptorProto> messageType_;
            private RepeatedFieldBuilder<DescriptorProto, DescriptorProto.Builder, DescriptorProtoOrBuilder> messageTypeBuilder_;
            private List<EnumDescriptorProto> enumType_;
            private RepeatedFieldBuilder<EnumDescriptorProto, EnumDescriptorProto.Builder, EnumDescriptorProtoOrBuilder> enumTypeBuilder_;
            private List<ServiceDescriptorProto> service_;
            private RepeatedFieldBuilder<ServiceDescriptorProto, ServiceDescriptorProto.Builder, ServiceDescriptorProtoOrBuilder> serviceBuilder_;
            private List<FieldDescriptorProto> extension_;
            private RepeatedFieldBuilder<FieldDescriptorProto, FieldDescriptorProto.Builder, FieldDescriptorProtoOrBuilder> extensionBuilder_;
            private FileOptions options_;
            private SingleFieldBuilder<FileOptions, FileOptions.Builder, FileOptionsOrBuilder> optionsBuilder_;
            private SourceCodeInfo sourceCodeInfo_;
            private SingleFieldBuilder<SourceCodeInfo, SourceCodeInfo.Builder, SourceCodeInfoOrBuilder> sourceCodeInfoBuilder_;
            private Object syntax_;
            private int edition_;
            
            public static final Descriptors.Descriptor getDescriptor() {
                return DescriptorProtos.internal_static_google_protobuf_FileDescriptorProto_descriptor;
            }
            
            @Override
            protected FieldAccessorTable internalGetFieldAccessorTable() {
                return DescriptorProtos.internal_static_google_protobuf_FileDescriptorProto_fieldAccessorTable.ensureFieldAccessorsInitialized(FileDescriptorProto.class, Builder.class);
            }
            
            private Builder() {
                this.name_ = "";
                this.package_ = "";
                this.dependency_ = LazyStringArrayList.emptyList();
                this.publicDependency_ = GeneratedMessage.emptyIntList();
                this.weakDependency_ = GeneratedMessage.emptyIntList();
                this.optionDependency_ = LazyStringArrayList.emptyList();
                this.messageType_ = Collections.emptyList();
                this.enumType_ = Collections.emptyList();
                this.service_ = Collections.emptyList();
                this.extension_ = Collections.emptyList();
                this.syntax_ = "";
                this.edition_ = 0;
                this.maybeForceBuilderInitialization();
            }
            
            private Builder(final BuilderParent parent) {
                super(parent);
                this.name_ = "";
                this.package_ = "";
                this.dependency_ = LazyStringArrayList.emptyList();
                this.publicDependency_ = GeneratedMessage.emptyIntList();
                this.weakDependency_ = GeneratedMessage.emptyIntList();
                this.optionDependency_ = LazyStringArrayList.emptyList();
                this.messageType_ = Collections.emptyList();
                this.enumType_ = Collections.emptyList();
                this.service_ = Collections.emptyList();
                this.extension_ = Collections.emptyList();
                this.syntax_ = "";
                this.edition_ = 0;
                this.maybeForceBuilderInitialization();
            }
            
            private void maybeForceBuilderInitialization() {
                if (GeneratedMessage.alwaysUseFieldBuilders) {
                    this.internalGetMessageTypeFieldBuilder();
                    this.internalGetEnumTypeFieldBuilder();
                    this.internalGetServiceFieldBuilder();
                    this.internalGetExtensionFieldBuilder();
                    this.internalGetOptionsFieldBuilder();
                    this.internalGetSourceCodeInfoFieldBuilder();
                }
            }
            
            @Override
            public Builder clear() {
                super.clear();
                this.bitField0_ = 0;
                this.name_ = "";
                this.package_ = "";
                this.dependency_ = LazyStringArrayList.emptyList();
                this.publicDependency_ = GeneratedMessage.emptyIntList();
                this.weakDependency_ = GeneratedMessage.emptyIntList();
                this.optionDependency_ = LazyStringArrayList.emptyList();
                if (this.messageTypeBuilder_ == null) {
                    this.messageType_ = Collections.emptyList();
                }
                else {
                    this.messageType_ = null;
                    this.messageTypeBuilder_.clear();
                }
                this.bitField0_ &= 0xFFFFFFBF;
                if (this.enumTypeBuilder_ == null) {
                    this.enumType_ = Collections.emptyList();
                }
                else {
                    this.enumType_ = null;
                    this.enumTypeBuilder_.clear();
                }
                this.bitField0_ &= 0xFFFFFF7F;
                if (this.serviceBuilder_ == null) {
                    this.service_ = Collections.emptyList();
                }
                else {
                    this.service_ = null;
                    this.serviceBuilder_.clear();
                }
                this.bitField0_ &= 0xFFFFFEFF;
                if (this.extensionBuilder_ == null) {
                    this.extension_ = Collections.emptyList();
                }
                else {
                    this.extension_ = null;
                    this.extensionBuilder_.clear();
                }
                this.bitField0_ &= 0xFFFFFDFF;
                this.options_ = null;
                if (this.optionsBuilder_ != null) {
                    this.optionsBuilder_.dispose();
                    this.optionsBuilder_ = null;
                }
                this.sourceCodeInfo_ = null;
                if (this.sourceCodeInfoBuilder_ != null) {
                    this.sourceCodeInfoBuilder_.dispose();
                    this.sourceCodeInfoBuilder_ = null;
                }
                this.syntax_ = "";
                this.edition_ = 0;
                return this;
            }
            
            @Override
            public Descriptors.Descriptor getDescriptorForType() {
                return DescriptorProtos.internal_static_google_protobuf_FileDescriptorProto_descriptor;
            }
            
            @Override
            public FileDescriptorProto getDefaultInstanceForType() {
                return FileDescriptorProto.getDefaultInstance();
            }
            
            @Override
            public FileDescriptorProto build() {
                final FileDescriptorProto result = this.buildPartial();
                if (!result.isInitialized()) {
                    throw AbstractMessage.Builder.newUninitializedMessageException(result);
                }
                return result;
            }
            
            @Override
            public FileDescriptorProto buildPartial() {
                final FileDescriptorProto result = new FileDescriptorProto((GeneratedMessage.Builder)this);
                this.buildPartialRepeatedFields(result);
                if (this.bitField0_ != 0) {
                    this.buildPartial0(result);
                }
                this.onBuilt();
                return result;
            }
            
            private void buildPartialRepeatedFields(final FileDescriptorProto result) {
                if (this.messageTypeBuilder_ == null) {
                    if ((this.bitField0_ & 0x40) != 0x0) {
                        this.messageType_ = Collections.unmodifiableList((List<? extends DescriptorProto>)this.messageType_);
                        this.bitField0_ &= 0xFFFFFFBF;
                    }
                    result.messageType_ = this.messageType_;
                }
                else {
                    result.messageType_ = this.messageTypeBuilder_.build();
                }
                if (this.enumTypeBuilder_ == null) {
                    if ((this.bitField0_ & 0x80) != 0x0) {
                        this.enumType_ = Collections.unmodifiableList((List<? extends EnumDescriptorProto>)this.enumType_);
                        this.bitField0_ &= 0xFFFFFF7F;
                    }
                    result.enumType_ = this.enumType_;
                }
                else {
                    result.enumType_ = this.enumTypeBuilder_.build();
                }
                if (this.serviceBuilder_ == null) {
                    if ((this.bitField0_ & 0x100) != 0x0) {
                        this.service_ = Collections.unmodifiableList((List<? extends ServiceDescriptorProto>)this.service_);
                        this.bitField0_ &= 0xFFFFFEFF;
                    }
                    result.service_ = this.service_;
                }
                else {
                    result.service_ = this.serviceBuilder_.build();
                }
                if (this.extensionBuilder_ == null) {
                    if ((this.bitField0_ & 0x200) != 0x0) {
                        this.extension_ = Collections.unmodifiableList((List<? extends FieldDescriptorProto>)this.extension_);
                        this.bitField0_ &= 0xFFFFFDFF;
                    }
                    result.extension_ = this.extension_;
                }
                else {
                    result.extension_ = this.extensionBuilder_.build();
                }
            }
            
            private void buildPartial0(final FileDescriptorProto result) {
                final int from_bitField0_ = this.bitField0_;
                int to_bitField0_ = 0;
                if ((from_bitField0_ & 0x1) != 0x0) {
                    result.name_ = this.name_;
                    to_bitField0_ |= 0x1;
                }
                if ((from_bitField0_ & 0x2) != 0x0) {
                    result.package_ = this.package_;
                    to_bitField0_ |= 0x2;
                }
                if ((from_bitField0_ & 0x4) != 0x0) {
                    this.dependency_.makeImmutable();
                    result.dependency_ = this.dependency_;
                }
                if ((from_bitField0_ & 0x8) != 0x0) {
                    this.publicDependency_.makeImmutable();
                    result.publicDependency_ = this.publicDependency_;
                }
                if ((from_bitField0_ & 0x10) != 0x0) {
                    this.weakDependency_.makeImmutable();
                    result.weakDependency_ = this.weakDependency_;
                }
                if ((from_bitField0_ & 0x20) != 0x0) {
                    this.optionDependency_.makeImmutable();
                    result.optionDependency_ = this.optionDependency_;
                }
                if ((from_bitField0_ & 0x400) != 0x0) {
                    result.options_ = ((this.optionsBuilder_ == null) ? this.options_ : this.optionsBuilder_.build());
                    to_bitField0_ |= 0x4;
                }
                if ((from_bitField0_ & 0x800) != 0x0) {
                    result.sourceCodeInfo_ = ((this.sourceCodeInfoBuilder_ == null) ? this.sourceCodeInfo_ : this.sourceCodeInfoBuilder_.build());
                    to_bitField0_ |= 0x8;
                }
                if ((from_bitField0_ & 0x1000) != 0x0) {
                    result.syntax_ = this.syntax_;
                    to_bitField0_ |= 0x10;
                }
                if ((from_bitField0_ & 0x2000) != 0x0) {
                    result.edition_ = this.edition_;
                    to_bitField0_ |= 0x20;
                }
                result.bitField0_ |= to_bitField0_;
            }
            
            @Override
            public Builder mergeFrom(final Message other) {
                if (other instanceof FileDescriptorProto) {
                    return this.mergeFrom((FileDescriptorProto)other);
                }
                super.mergeFrom(other);
                return this;
            }
            
            public Builder mergeFrom(final FileDescriptorProto other) {
                if (other == FileDescriptorProto.getDefaultInstance()) {
                    return this;
                }
                if (other.hasName()) {
                    this.name_ = other.name_;
                    this.bitField0_ |= 0x1;
                    this.onChanged();
                }
                if (other.hasPackage()) {
                    this.package_ = other.package_;
                    this.bitField0_ |= 0x2;
                    this.onChanged();
                }
                if (!other.dependency_.isEmpty()) {
                    if (this.dependency_.isEmpty()) {
                        this.dependency_ = other.dependency_;
                        this.bitField0_ |= 0x4;
                    }
                    else {
                        this.ensureDependencyIsMutable();
                        this.dependency_.addAll(other.dependency_);
                    }
                    this.onChanged();
                }
                if (!other.publicDependency_.isEmpty()) {
                    if (this.publicDependency_.isEmpty()) {
                        (this.publicDependency_ = other.publicDependency_).makeImmutable();
                        this.bitField0_ |= 0x8;
                    }
                    else {
                        this.ensurePublicDependencyIsMutable();
                        this.publicDependency_.addAll(other.publicDependency_);
                    }
                    this.onChanged();
                }
                if (!other.weakDependency_.isEmpty()) {
                    if (this.weakDependency_.isEmpty()) {
                        (this.weakDependency_ = other.weakDependency_).makeImmutable();
                        this.bitField0_ |= 0x10;
                    }
                    else {
                        this.ensureWeakDependencyIsMutable();
                        this.weakDependency_.addAll(other.weakDependency_);
                    }
                    this.onChanged();
                }
                if (!other.optionDependency_.isEmpty()) {
                    if (this.optionDependency_.isEmpty()) {
                        this.optionDependency_ = other.optionDependency_;
                        this.bitField0_ |= 0x20;
                    }
                    else {
                        this.ensureOptionDependencyIsMutable();
                        this.optionDependency_.addAll(other.optionDependency_);
                    }
                    this.onChanged();
                }
                if (this.messageTypeBuilder_ == null) {
                    if (!other.messageType_.isEmpty()) {
                        if (this.messageType_.isEmpty()) {
                            this.messageType_ = other.messageType_;
                            this.bitField0_ &= 0xFFFFFFBF;
                        }
                        else {
                            this.ensureMessageTypeIsMutable();
                            this.messageType_.addAll(other.messageType_);
                        }
                        this.onChanged();
                    }
                }
                else if (!other.messageType_.isEmpty()) {
                    if (this.messageTypeBuilder_.isEmpty()) {
                        this.messageTypeBuilder_.dispose();
                        this.messageTypeBuilder_ = null;
                        this.messageType_ = other.messageType_;
                        this.bitField0_ &= 0xFFFFFFBF;
                        this.messageTypeBuilder_ = (GeneratedMessage.alwaysUseFieldBuilders ? this.internalGetMessageTypeFieldBuilder() : null);
                    }
                    else {
                        this.messageTypeBuilder_.addAllMessages(other.messageType_);
                    }
                }
                if (this.enumTypeBuilder_ == null) {
                    if (!other.enumType_.isEmpty()) {
                        if (this.enumType_.isEmpty()) {
                            this.enumType_ = other.enumType_;
                            this.bitField0_ &= 0xFFFFFF7F;
                        }
                        else {
                            this.ensureEnumTypeIsMutable();
                            this.enumType_.addAll(other.enumType_);
                        }
                        this.onChanged();
                    }
                }
                else if (!other.enumType_.isEmpty()) {
                    if (this.enumTypeBuilder_.isEmpty()) {
                        this.enumTypeBuilder_.dispose();
                        this.enumTypeBuilder_ = null;
                        this.enumType_ = other.enumType_;
                        this.bitField0_ &= 0xFFFFFF7F;
                        this.enumTypeBuilder_ = (GeneratedMessage.alwaysUseFieldBuilders ? this.internalGetEnumTypeFieldBuilder() : null);
                    }
                    else {
                        this.enumTypeBuilder_.addAllMessages(other.enumType_);
                    }
                }
                if (this.serviceBuilder_ == null) {
                    if (!other.service_.isEmpty()) {
                        if (this.service_.isEmpty()) {
                            this.service_ = other.service_;
                            this.bitField0_ &= 0xFFFFFEFF;
                        }
                        else {
                            this.ensureServiceIsMutable();
                            this.service_.addAll(other.service_);
                        }
                        this.onChanged();
                    }
                }
                else if (!other.service_.isEmpty()) {
                    if (this.serviceBuilder_.isEmpty()) {
                        this.serviceBuilder_.dispose();
                        this.serviceBuilder_ = null;
                        this.service_ = other.service_;
                        this.bitField0_ &= 0xFFFFFEFF;
                        this.serviceBuilder_ = (GeneratedMessage.alwaysUseFieldBuilders ? this.internalGetServiceFieldBuilder() : null);
                    }
                    else {
                        this.serviceBuilder_.addAllMessages(other.service_);
                    }
                }
                if (this.extensionBuilder_ == null) {
                    if (!other.extension_.isEmpty()) {
                        if (this.extension_.isEmpty()) {
                            this.extension_ = other.extension_;
                            this.bitField0_ &= 0xFFFFFDFF;
                        }
                        else {
                            this.ensureExtensionIsMutable();
                            this.extension_.addAll(other.extension_);
                        }
                        this.onChanged();
                    }
                }
                else if (!other.extension_.isEmpty()) {
                    if (this.extensionBuilder_.isEmpty()) {
                        this.extensionBuilder_.dispose();
                        this.extensionBuilder_ = null;
                        this.extension_ = other.extension_;
                        this.bitField0_ &= 0xFFFFFDFF;
                        this.extensionBuilder_ = (GeneratedMessage.alwaysUseFieldBuilders ? this.internalGetExtensionFieldBuilder() : null);
                    }
                    else {
                        this.extensionBuilder_.addAllMessages(other.extension_);
                    }
                }
                if (other.hasOptions()) {
                    this.mergeOptions(other.getOptions());
                }
                if (other.hasSourceCodeInfo()) {
                    this.mergeSourceCodeInfo(other.getSourceCodeInfo());
                }
                if (other.hasSyntax()) {
                    this.syntax_ = other.syntax_;
                    this.bitField0_ |= 0x1000;
                    this.onChanged();
                }
                if (other.hasEdition()) {
                    this.setEdition(other.getEdition());
                }
                this.mergeUnknownFields(other.getUnknownFields());
                this.onChanged();
                return this;
            }
            
            @Override
            public final boolean isInitialized() {
                for (int i = 0; i < this.getMessageTypeCount(); ++i) {
                    if (!this.getMessageType(i).isInitialized()) {
                        return false;
                    }
                }
                for (int i = 0; i < this.getEnumTypeCount(); ++i) {
                    if (!this.getEnumType(i).isInitialized()) {
                        return false;
                    }
                }
                for (int i = 0; i < this.getServiceCount(); ++i) {
                    if (!this.getService(i).isInitialized()) {
                        return false;
                    }
                }
                for (int i = 0; i < this.getExtensionCount(); ++i) {
                    if (!this.getExtension(i).isInitialized()) {
                        return false;
                    }
                }
                return (!this.hasOptions() || this.getOptions().isInitialized()) && (!this.hasSourceCodeInfo() || this.getSourceCodeInfo().isInitialized());
            }
            
            @Override
            public Builder mergeFrom(final CodedInputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
                if (extensionRegistry == null) {
                    throw new NullPointerException();
                }
                try {
                    boolean done = false;
                    while (!done) {
                        final int tag = input.readTag();
                        switch (tag) {
                            case 0: {
                                done = true;
                                continue;
                            }
                            case 10: {
                                this.name_ = input.readBytes();
                                this.bitField0_ |= 0x1;
                                continue;
                            }
                            case 18: {
                                this.package_ = input.readBytes();
                                this.bitField0_ |= 0x2;
                                continue;
                            }
                            case 26: {
                                final ByteString bs = input.readBytes();
                                this.ensureDependencyIsMutable();
                                this.dependency_.add(bs);
                                continue;
                            }
                            case 34: {
                                final DescriptorProto m = input.readMessage(DescriptorProto.parser(), extensionRegistry);
                                if (this.messageTypeBuilder_ == null) {
                                    this.ensureMessageTypeIsMutable();
                                    this.messageType_.add(m);
                                    continue;
                                }
                                this.messageTypeBuilder_.addMessage(m);
                                continue;
                            }
                            case 42: {
                                final EnumDescriptorProto i = input.readMessage(EnumDescriptorProto.parser(), extensionRegistry);
                                if (this.enumTypeBuilder_ == null) {
                                    this.ensureEnumTypeIsMutable();
                                    this.enumType_.add(i);
                                    continue;
                                }
                                this.enumTypeBuilder_.addMessage(i);
                                continue;
                            }
                            case 50: {
                                final ServiceDescriptorProto j = input.readMessage(ServiceDescriptorProto.parser(), extensionRegistry);
                                if (this.serviceBuilder_ == null) {
                                    this.ensureServiceIsMutable();
                                    this.service_.add(j);
                                    continue;
                                }
                                this.serviceBuilder_.addMessage(j);
                                continue;
                            }
                            case 58: {
                                final FieldDescriptorProto k = input.readMessage(FieldDescriptorProto.parser(), extensionRegistry);
                                if (this.extensionBuilder_ == null) {
                                    this.ensureExtensionIsMutable();
                                    this.extension_.add(k);
                                    continue;
                                }
                                this.extensionBuilder_.addMessage(k);
                                continue;
                            }
                            case 66: {
                                input.readMessage(this.internalGetOptionsFieldBuilder().getBuilder(), extensionRegistry);
                                this.bitField0_ |= 0x400;
                                continue;
                            }
                            case 74: {
                                input.readMessage(this.internalGetSourceCodeInfoFieldBuilder().getBuilder(), extensionRegistry);
                                this.bitField0_ |= 0x800;
                                continue;
                            }
                            case 80: {
                                final int v = input.readInt32();
                                this.ensurePublicDependencyIsMutable();
                                this.publicDependency_.addInt(v);
                                continue;
                            }
                            case 82: {
                                final int length = input.readRawVarint32();
                                final int limit = input.pushLimit(length);
                                this.ensurePublicDependencyIsMutable();
                                while (input.getBytesUntilLimit() > 0) {
                                    this.publicDependency_.addInt(input.readInt32());
                                }
                                input.popLimit(limit);
                                continue;
                            }
                            case 88: {
                                final int v = input.readInt32();
                                this.ensureWeakDependencyIsMutable();
                                this.weakDependency_.addInt(v);
                                continue;
                            }
                            case 90: {
                                final int length = input.readRawVarint32();
                                final int limit = input.pushLimit(length);
                                this.ensureWeakDependencyIsMutable();
                                while (input.getBytesUntilLimit() > 0) {
                                    this.weakDependency_.addInt(input.readInt32());
                                }
                                input.popLimit(limit);
                                continue;
                            }
                            case 98: {
                                this.syntax_ = input.readBytes();
                                this.bitField0_ |= 0x1000;
                                continue;
                            }
                            case 112: {
                                final int tmpRaw = input.readEnum();
                                final Edition tmpValue = Edition.forNumber(tmpRaw);
                                if (tmpValue == null) {
                                    this.mergeUnknownVarintField(14, tmpRaw);
                                    continue;
                                }
                                this.edition_ = tmpRaw;
                                this.bitField0_ |= 0x2000;
                                continue;
                            }
                            case 122: {
                                final ByteString bs = input.readBytes();
                                this.ensureOptionDependencyIsMutable();
                                this.optionDependency_.add(bs);
                                continue;
                            }
                            default: {
                                if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                                    done = true;
                                    continue;
                                }
                                continue;
                            }
                        }
                    }
                }
                catch (final InvalidProtocolBufferException e) {
                    throw e.unwrapIOException();
                }
                finally {
                    this.onChanged();
                }
                return this;
            }
            
            @Override
            public boolean hasName() {
                return (this.bitField0_ & 0x1) != 0x0;
            }
            
            @Override
            public String getName() {
                final Object ref = this.name_;
                if (!(ref instanceof String)) {
                    final ByteString bs = (ByteString)ref;
                    final String s = bs.toStringUtf8();
                    if (bs.isValidUtf8()) {
                        this.name_ = s;
                    }
                    return s;
                }
                return (String)ref;
            }
            
            @Override
            public ByteString getNameBytes() {
                final Object ref = this.name_;
                if (ref instanceof String) {
                    final ByteString b = ByteString.copyFromUtf8((String)ref);
                    return (ByteString)(this.name_ = b);
                }
                return (ByteString)ref;
            }
            
            public Builder setName(final String value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                this.name_ = value;
                this.bitField0_ |= 0x1;
                this.onChanged();
                return this;
            }
            
            public Builder clearName() {
                this.name_ = FileDescriptorProto.getDefaultInstance().getName();
                this.bitField0_ &= 0xFFFFFFFE;
                this.onChanged();
                return this;
            }
            
            public Builder setNameBytes(final ByteString value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                this.name_ = value;
                this.bitField0_ |= 0x1;
                this.onChanged();
                return this;
            }
            
            @Override
            public boolean hasPackage() {
                return (this.bitField0_ & 0x2) != 0x0;
            }
            
            @Override
            public String getPackage() {
                final Object ref = this.package_;
                if (!(ref instanceof String)) {
                    final ByteString bs = (ByteString)ref;
                    final String s = bs.toStringUtf8();
                    if (bs.isValidUtf8()) {
                        this.package_ = s;
                    }
                    return s;
                }
                return (String)ref;
            }
            
            @Override
            public ByteString getPackageBytes() {
                final Object ref = this.package_;
                if (ref instanceof String) {
                    final ByteString b = ByteString.copyFromUtf8((String)ref);
                    return (ByteString)(this.package_ = b);
                }
                return (ByteString)ref;
            }
            
            public Builder setPackage(final String value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                this.package_ = value;
                this.bitField0_ |= 0x2;
                this.onChanged();
                return this;
            }
            
            public Builder clearPackage() {
                this.package_ = FileDescriptorProto.getDefaultInstance().getPackage();
                this.bitField0_ &= 0xFFFFFFFD;
                this.onChanged();
                return this;
            }
            
            public Builder setPackageBytes(final ByteString value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                this.package_ = value;
                this.bitField0_ |= 0x2;
                this.onChanged();
                return this;
            }
            
            private void ensureDependencyIsMutable() {
                if (!this.dependency_.isModifiable()) {
                    this.dependency_ = new LazyStringArrayList(this.dependency_);
                }
                this.bitField0_ |= 0x4;
            }
            
            @Override
            public ProtocolStringList getDependencyList() {
                this.dependency_.makeImmutable();
                return this.dependency_;
            }
            
            @Override
            public int getDependencyCount() {
                return this.dependency_.size();
            }
            
            @Override
            public String getDependency(final int index) {
                return this.dependency_.get(index);
            }
            
            @Override
            public ByteString getDependencyBytes(final int index) {
                return this.dependency_.getByteString(index);
            }
            
            public Builder setDependency(final int index, final String value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                this.ensureDependencyIsMutable();
                this.dependency_.set(index, value);
                this.bitField0_ |= 0x4;
                this.onChanged();
                return this;
            }
            
            public Builder addDependency(final String value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                this.ensureDependencyIsMutable();
                this.dependency_.add(value);
                this.bitField0_ |= 0x4;
                this.onChanged();
                return this;
            }
            
            public Builder addAllDependency(final Iterable<String> values) {
                this.ensureDependencyIsMutable();
                AbstractMessageLite.Builder.addAll(values, this.dependency_);
                this.bitField0_ |= 0x4;
                this.onChanged();
                return this;
            }
            
            public Builder clearDependency() {
                this.dependency_ = LazyStringArrayList.emptyList();
                this.bitField0_ &= 0xFFFFFFFB;
                this.onChanged();
                return this;
            }
            
            public Builder addDependencyBytes(final ByteString value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                this.ensureDependencyIsMutable();
                this.dependency_.add(value);
                this.bitField0_ |= 0x4;
                this.onChanged();
                return this;
            }
            
            private void ensurePublicDependencyIsMutable() {
                if (!this.publicDependency_.isModifiable()) {
                    this.publicDependency_ = GeneratedMessage.makeMutableCopy(this.publicDependency_);
                }
                this.bitField0_ |= 0x8;
            }
            
            @Override
            public List<Integer> getPublicDependencyList() {
                this.publicDependency_.makeImmutable();
                return this.publicDependency_;
            }
            
            @Override
            public int getPublicDependencyCount() {
                return this.publicDependency_.size();
            }
            
            @Override
            public int getPublicDependency(final int index) {
                return this.publicDependency_.getInt(index);
            }
            
            public Builder setPublicDependency(final int index, final int value) {
                this.ensurePublicDependencyIsMutable();
                this.publicDependency_.setInt(index, value);
                this.bitField0_ |= 0x8;
                this.onChanged();
                return this;
            }
            
            public Builder addPublicDependency(final int value) {
                this.ensurePublicDependencyIsMutable();
                this.publicDependency_.addInt(value);
                this.bitField0_ |= 0x8;
                this.onChanged();
                return this;
            }
            
            public Builder addAllPublicDependency(final Iterable<? extends Integer> values) {
                this.ensurePublicDependencyIsMutable();
                AbstractMessageLite.Builder.addAll(values, this.publicDependency_);
                this.bitField0_ |= 0x8;
                this.onChanged();
                return this;
            }
            
            public Builder clearPublicDependency() {
                this.publicDependency_ = GeneratedMessage.emptyIntList();
                this.bitField0_ &= 0xFFFFFFF7;
                this.onChanged();
                return this;
            }
            
            private void ensureWeakDependencyIsMutable() {
                if (!this.weakDependency_.isModifiable()) {
                    this.weakDependency_ = GeneratedMessage.makeMutableCopy(this.weakDependency_);
                }
                this.bitField0_ |= 0x10;
            }
            
            @Override
            public List<Integer> getWeakDependencyList() {
                this.weakDependency_.makeImmutable();
                return this.weakDependency_;
            }
            
            @Override
            public int getWeakDependencyCount() {
                return this.weakDependency_.size();
            }
            
            @Override
            public int getWeakDependency(final int index) {
                return this.weakDependency_.getInt(index);
            }
            
            public Builder setWeakDependency(final int index, final int value) {
                this.ensureWeakDependencyIsMutable();
                this.weakDependency_.setInt(index, value);
                this.bitField0_ |= 0x10;
                this.onChanged();
                return this;
            }
            
            public Builder addWeakDependency(final int value) {
                this.ensureWeakDependencyIsMutable();
                this.weakDependency_.addInt(value);
                this.bitField0_ |= 0x10;
                this.onChanged();
                return this;
            }
            
            public Builder addAllWeakDependency(final Iterable<? extends Integer> values) {
                this.ensureWeakDependencyIsMutable();
                AbstractMessageLite.Builder.addAll(values, this.weakDependency_);
                this.bitField0_ |= 0x10;
                this.onChanged();
                return this;
            }
            
            public Builder clearWeakDependency() {
                this.weakDependency_ = GeneratedMessage.emptyIntList();
                this.bitField0_ &= 0xFFFFFFEF;
                this.onChanged();
                return this;
            }
            
            private void ensureOptionDependencyIsMutable() {
                if (!this.optionDependency_.isModifiable()) {
                    this.optionDependency_ = new LazyStringArrayList(this.optionDependency_);
                }
                this.bitField0_ |= 0x20;
            }
            
            @Override
            public ProtocolStringList getOptionDependencyList() {
                this.optionDependency_.makeImmutable();
                return this.optionDependency_;
            }
            
            @Override
            public int getOptionDependencyCount() {
                return this.optionDependency_.size();
            }
            
            @Override
            public String getOptionDependency(final int index) {
                return this.optionDependency_.get(index);
            }
            
            @Override
            public ByteString getOptionDependencyBytes(final int index) {
                return this.optionDependency_.getByteString(index);
            }
            
            public Builder setOptionDependency(final int index, final String value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                this.ensureOptionDependencyIsMutable();
                this.optionDependency_.set(index, value);
                this.bitField0_ |= 0x20;
                this.onChanged();
                return this;
            }
            
            public Builder addOptionDependency(final String value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                this.ensureOptionDependencyIsMutable();
                this.optionDependency_.add(value);
                this.bitField0_ |= 0x20;
                this.onChanged();
                return this;
            }
            
            public Builder addAllOptionDependency(final Iterable<String> values) {
                this.ensureOptionDependencyIsMutable();
                AbstractMessageLite.Builder.addAll(values, this.optionDependency_);
                this.bitField0_ |= 0x20;
                this.onChanged();
                return this;
            }
            
            public Builder clearOptionDependency() {
                this.optionDependency_ = LazyStringArrayList.emptyList();
                this.bitField0_ &= 0xFFFFFFDF;
                this.onChanged();
                return this;
            }
            
            public Builder addOptionDependencyBytes(final ByteString value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                this.ensureOptionDependencyIsMutable();
                this.optionDependency_.add(value);
                this.bitField0_ |= 0x20;
                this.onChanged();
                return this;
            }
            
            private void ensureMessageTypeIsMutable() {
                if ((this.bitField0_ & 0x40) == 0x0) {
                    this.messageType_ = new ArrayList<DescriptorProto>(this.messageType_);
                    this.bitField0_ |= 0x40;
                }
            }
            
            @Override
            public List<DescriptorProto> getMessageTypeList() {
                if (this.messageTypeBuilder_ == null) {
                    return Collections.unmodifiableList((List<? extends DescriptorProto>)this.messageType_);
                }
                return this.messageTypeBuilder_.getMessageList();
            }
            
            @Override
            public int getMessageTypeCount() {
                if (this.messageTypeBuilder_ == null) {
                    return this.messageType_.size();
                }
                return this.messageTypeBuilder_.getCount();
            }
            
            @Override
            public DescriptorProto getMessageType(final int index) {
                if (this.messageTypeBuilder_ == null) {
                    return this.messageType_.get(index);
                }
                return this.messageTypeBuilder_.getMessage(index);
            }
            
            public Builder setMessageType(final int index, final DescriptorProto value) {
                if (this.messageTypeBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.ensureMessageTypeIsMutable();
                    this.messageType_.set(index, value);
                    this.onChanged();
                }
                else {
                    this.messageTypeBuilder_.setMessage(index, value);
                }
                return this;
            }
            
            public Builder setMessageType(final int index, final DescriptorProto.Builder builderForValue) {
                if (this.messageTypeBuilder_ == null) {
                    this.ensureMessageTypeIsMutable();
                    this.messageType_.set(index, builderForValue.build());
                    this.onChanged();
                }
                else {
                    this.messageTypeBuilder_.setMessage(index, builderForValue.build());
                }
                return this;
            }
            
            public Builder addMessageType(final DescriptorProto value) {
                if (this.messageTypeBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.ensureMessageTypeIsMutable();
                    this.messageType_.add(value);
                    this.onChanged();
                }
                else {
                    this.messageTypeBuilder_.addMessage(value);
                }
                return this;
            }
            
            public Builder addMessageType(final int index, final DescriptorProto value) {
                if (this.messageTypeBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.ensureMessageTypeIsMutable();
                    this.messageType_.add(index, value);
                    this.onChanged();
                }
                else {
                    this.messageTypeBuilder_.addMessage(index, value);
                }
                return this;
            }
            
            public Builder addMessageType(final DescriptorProto.Builder builderForValue) {
                if (this.messageTypeBuilder_ == null) {
                    this.ensureMessageTypeIsMutable();
                    this.messageType_.add(builderForValue.build());
                    this.onChanged();
                }
                else {
                    this.messageTypeBuilder_.addMessage(builderForValue.build());
                }
                return this;
            }
            
            public Builder addMessageType(final int index, final DescriptorProto.Builder builderForValue) {
                if (this.messageTypeBuilder_ == null) {
                    this.ensureMessageTypeIsMutable();
                    this.messageType_.add(index, builderForValue.build());
                    this.onChanged();
                }
                else {
                    this.messageTypeBuilder_.addMessage(index, builderForValue.build());
                }
                return this;
            }
            
            public Builder addAllMessageType(final Iterable<? extends DescriptorProto> values) {
                if (this.messageTypeBuilder_ == null) {
                    this.ensureMessageTypeIsMutable();
                    AbstractMessageLite.Builder.addAll(values, this.messageType_);
                    this.onChanged();
                }
                else {
                    this.messageTypeBuilder_.addAllMessages(values);
                }
                return this;
            }
            
            public Builder clearMessageType() {
                if (this.messageTypeBuilder_ == null) {
                    this.messageType_ = Collections.emptyList();
                    this.bitField0_ &= 0xFFFFFFBF;
                    this.onChanged();
                }
                else {
                    this.messageTypeBuilder_.clear();
                }
                return this;
            }
            
            public Builder removeMessageType(final int index) {
                if (this.messageTypeBuilder_ == null) {
                    this.ensureMessageTypeIsMutable();
                    this.messageType_.remove(index);
                    this.onChanged();
                }
                else {
                    this.messageTypeBuilder_.remove(index);
                }
                return this;
            }
            
            public DescriptorProto.Builder getMessageTypeBuilder(final int index) {
                return this.internalGetMessageTypeFieldBuilder().getBuilder(index);
            }
            
            @Override
            public DescriptorProtoOrBuilder getMessageTypeOrBuilder(final int index) {
                if (this.messageTypeBuilder_ == null) {
                    return this.messageType_.get(index);
                }
                return this.messageTypeBuilder_.getMessageOrBuilder(index);
            }
            
            @Override
            public List<? extends DescriptorProtoOrBuilder> getMessageTypeOrBuilderList() {
                if (this.messageTypeBuilder_ != null) {
                    return this.messageTypeBuilder_.getMessageOrBuilderList();
                }
                return Collections.unmodifiableList((List<? extends DescriptorProtoOrBuilder>)this.messageType_);
            }
            
            public DescriptorProto.Builder addMessageTypeBuilder() {
                return this.internalGetMessageTypeFieldBuilder().addBuilder(DescriptorProto.getDefaultInstance());
            }
            
            public DescriptorProto.Builder addMessageTypeBuilder(final int index) {
                return this.internalGetMessageTypeFieldBuilder().addBuilder(index, DescriptorProto.getDefaultInstance());
            }
            
            public List<DescriptorProto.Builder> getMessageTypeBuilderList() {
                return this.internalGetMessageTypeFieldBuilder().getBuilderList();
            }
            
            private RepeatedFieldBuilder<DescriptorProto, DescriptorProto.Builder, DescriptorProtoOrBuilder> internalGetMessageTypeFieldBuilder() {
                if (this.messageTypeBuilder_ == null) {
                    this.messageTypeBuilder_ = new RepeatedFieldBuilder<DescriptorProto, DescriptorProto.Builder, DescriptorProtoOrBuilder>(this.messageType_, (this.bitField0_ & 0x40) != 0x0, this.getParentForChildren(), this.isClean());
                    this.messageType_ = null;
                }
                return this.messageTypeBuilder_;
            }
            
            private void ensureEnumTypeIsMutable() {
                if ((this.bitField0_ & 0x80) == 0x0) {
                    this.enumType_ = new ArrayList<EnumDescriptorProto>(this.enumType_);
                    this.bitField0_ |= 0x80;
                }
            }
            
            @Override
            public List<EnumDescriptorProto> getEnumTypeList() {
                if (this.enumTypeBuilder_ == null) {
                    return Collections.unmodifiableList((List<? extends EnumDescriptorProto>)this.enumType_);
                }
                return this.enumTypeBuilder_.getMessageList();
            }
            
            @Override
            public int getEnumTypeCount() {
                if (this.enumTypeBuilder_ == null) {
                    return this.enumType_.size();
                }
                return this.enumTypeBuilder_.getCount();
            }
            
            @Override
            public EnumDescriptorProto getEnumType(final int index) {
                if (this.enumTypeBuilder_ == null) {
                    return this.enumType_.get(index);
                }
                return this.enumTypeBuilder_.getMessage(index);
            }
            
            public Builder setEnumType(final int index, final EnumDescriptorProto value) {
                if (this.enumTypeBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.ensureEnumTypeIsMutable();
                    this.enumType_.set(index, value);
                    this.onChanged();
                }
                else {
                    this.enumTypeBuilder_.setMessage(index, value);
                }
                return this;
            }
            
            public Builder setEnumType(final int index, final EnumDescriptorProto.Builder builderForValue) {
                if (this.enumTypeBuilder_ == null) {
                    this.ensureEnumTypeIsMutable();
                    this.enumType_.set(index, builderForValue.build());
                    this.onChanged();
                }
                else {
                    this.enumTypeBuilder_.setMessage(index, builderForValue.build());
                }
                return this;
            }
            
            public Builder addEnumType(final EnumDescriptorProto value) {
                if (this.enumTypeBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.ensureEnumTypeIsMutable();
                    this.enumType_.add(value);
                    this.onChanged();
                }
                else {
                    this.enumTypeBuilder_.addMessage(value);
                }
                return this;
            }
            
            public Builder addEnumType(final int index, final EnumDescriptorProto value) {
                if (this.enumTypeBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.ensureEnumTypeIsMutable();
                    this.enumType_.add(index, value);
                    this.onChanged();
                }
                else {
                    this.enumTypeBuilder_.addMessage(index, value);
                }
                return this;
            }
            
            public Builder addEnumType(final EnumDescriptorProto.Builder builderForValue) {
                if (this.enumTypeBuilder_ == null) {
                    this.ensureEnumTypeIsMutable();
                    this.enumType_.add(builderForValue.build());
                    this.onChanged();
                }
                else {
                    this.enumTypeBuilder_.addMessage(builderForValue.build());
                }
                return this;
            }
            
            public Builder addEnumType(final int index, final EnumDescriptorProto.Builder builderForValue) {
                if (this.enumTypeBuilder_ == null) {
                    this.ensureEnumTypeIsMutable();
                    this.enumType_.add(index, builderForValue.build());
                    this.onChanged();
                }
                else {
                    this.enumTypeBuilder_.addMessage(index, builderForValue.build());
                }
                return this;
            }
            
            public Builder addAllEnumType(final Iterable<? extends EnumDescriptorProto> values) {
                if (this.enumTypeBuilder_ == null) {
                    this.ensureEnumTypeIsMutable();
                    AbstractMessageLite.Builder.addAll(values, this.enumType_);
                    this.onChanged();
                }
                else {
                    this.enumTypeBuilder_.addAllMessages(values);
                }
                return this;
            }
            
            public Builder clearEnumType() {
                if (this.enumTypeBuilder_ == null) {
                    this.enumType_ = Collections.emptyList();
                    this.bitField0_ &= 0xFFFFFF7F;
                    this.onChanged();
                }
                else {
                    this.enumTypeBuilder_.clear();
                }
                return this;
            }
            
            public Builder removeEnumType(final int index) {
                if (this.enumTypeBuilder_ == null) {
                    this.ensureEnumTypeIsMutable();
                    this.enumType_.remove(index);
                    this.onChanged();
                }
                else {
                    this.enumTypeBuilder_.remove(index);
                }
                return this;
            }
            
            public EnumDescriptorProto.Builder getEnumTypeBuilder(final int index) {
                return this.internalGetEnumTypeFieldBuilder().getBuilder(index);
            }
            
            @Override
            public EnumDescriptorProtoOrBuilder getEnumTypeOrBuilder(final int index) {
                if (this.enumTypeBuilder_ == null) {
                    return this.enumType_.get(index);
                }
                return this.enumTypeBuilder_.getMessageOrBuilder(index);
            }
            
            @Override
            public List<? extends EnumDescriptorProtoOrBuilder> getEnumTypeOrBuilderList() {
                if (this.enumTypeBuilder_ != null) {
                    return this.enumTypeBuilder_.getMessageOrBuilderList();
                }
                return Collections.unmodifiableList((List<? extends EnumDescriptorProtoOrBuilder>)this.enumType_);
            }
            
            public EnumDescriptorProto.Builder addEnumTypeBuilder() {
                return this.internalGetEnumTypeFieldBuilder().addBuilder(EnumDescriptorProto.getDefaultInstance());
            }
            
            public EnumDescriptorProto.Builder addEnumTypeBuilder(final int index) {
                return this.internalGetEnumTypeFieldBuilder().addBuilder(index, EnumDescriptorProto.getDefaultInstance());
            }
            
            public List<EnumDescriptorProto.Builder> getEnumTypeBuilderList() {
                return this.internalGetEnumTypeFieldBuilder().getBuilderList();
            }
            
            private RepeatedFieldBuilder<EnumDescriptorProto, EnumDescriptorProto.Builder, EnumDescriptorProtoOrBuilder> internalGetEnumTypeFieldBuilder() {
                if (this.enumTypeBuilder_ == null) {
                    this.enumTypeBuilder_ = new RepeatedFieldBuilder<EnumDescriptorProto, EnumDescriptorProto.Builder, EnumDescriptorProtoOrBuilder>(this.enumType_, (this.bitField0_ & 0x80) != 0x0, this.getParentForChildren(), this.isClean());
                    this.enumType_ = null;
                }
                return this.enumTypeBuilder_;
            }
            
            private void ensureServiceIsMutable() {
                if ((this.bitField0_ & 0x100) == 0x0) {
                    this.service_ = new ArrayList<ServiceDescriptorProto>(this.service_);
                    this.bitField0_ |= 0x100;
                }
            }
            
            @Override
            public List<ServiceDescriptorProto> getServiceList() {
                if (this.serviceBuilder_ == null) {
                    return Collections.unmodifiableList((List<? extends ServiceDescriptorProto>)this.service_);
                }
                return this.serviceBuilder_.getMessageList();
            }
            
            @Override
            public int getServiceCount() {
                if (this.serviceBuilder_ == null) {
                    return this.service_.size();
                }
                return this.serviceBuilder_.getCount();
            }
            
            @Override
            public ServiceDescriptorProto getService(final int index) {
                if (this.serviceBuilder_ == null) {
                    return this.service_.get(index);
                }
                return this.serviceBuilder_.getMessage(index);
            }
            
            public Builder setService(final int index, final ServiceDescriptorProto value) {
                if (this.serviceBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.ensureServiceIsMutable();
                    this.service_.set(index, value);
                    this.onChanged();
                }
                else {
                    this.serviceBuilder_.setMessage(index, value);
                }
                return this;
            }
            
            public Builder setService(final int index, final ServiceDescriptorProto.Builder builderForValue) {
                if (this.serviceBuilder_ == null) {
                    this.ensureServiceIsMutable();
                    this.service_.set(index, builderForValue.build());
                    this.onChanged();
                }
                else {
                    this.serviceBuilder_.setMessage(index, builderForValue.build());
                }
                return this;
            }
            
            public Builder addService(final ServiceDescriptorProto value) {
                if (this.serviceBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.ensureServiceIsMutable();
                    this.service_.add(value);
                    this.onChanged();
                }
                else {
                    this.serviceBuilder_.addMessage(value);
                }
                return this;
            }
            
            public Builder addService(final int index, final ServiceDescriptorProto value) {
                if (this.serviceBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.ensureServiceIsMutable();
                    this.service_.add(index, value);
                    this.onChanged();
                }
                else {
                    this.serviceBuilder_.addMessage(index, value);
                }
                return this;
            }
            
            public Builder addService(final ServiceDescriptorProto.Builder builderForValue) {
                if (this.serviceBuilder_ == null) {
                    this.ensureServiceIsMutable();
                    this.service_.add(builderForValue.build());
                    this.onChanged();
                }
                else {
                    this.serviceBuilder_.addMessage(builderForValue.build());
                }
                return this;
            }
            
            public Builder addService(final int index, final ServiceDescriptorProto.Builder builderForValue) {
                if (this.serviceBuilder_ == null) {
                    this.ensureServiceIsMutable();
                    this.service_.add(index, builderForValue.build());
                    this.onChanged();
                }
                else {
                    this.serviceBuilder_.addMessage(index, builderForValue.build());
                }
                return this;
            }
            
            public Builder addAllService(final Iterable<? extends ServiceDescriptorProto> values) {
                if (this.serviceBuilder_ == null) {
                    this.ensureServiceIsMutable();
                    AbstractMessageLite.Builder.addAll(values, this.service_);
                    this.onChanged();
                }
                else {
                    this.serviceBuilder_.addAllMessages(values);
                }
                return this;
            }
            
            public Builder clearService() {
                if (this.serviceBuilder_ == null) {
                    this.service_ = Collections.emptyList();
                    this.bitField0_ &= 0xFFFFFEFF;
                    this.onChanged();
                }
                else {
                    this.serviceBuilder_.clear();
                }
                return this;
            }
            
            public Builder removeService(final int index) {
                if (this.serviceBuilder_ == null) {
                    this.ensureServiceIsMutable();
                    this.service_.remove(index);
                    this.onChanged();
                }
                else {
                    this.serviceBuilder_.remove(index);
                }
                return this;
            }
            
            public ServiceDescriptorProto.Builder getServiceBuilder(final int index) {
                return this.internalGetServiceFieldBuilder().getBuilder(index);
            }
            
            @Override
            public ServiceDescriptorProtoOrBuilder getServiceOrBuilder(final int index) {
                if (this.serviceBuilder_ == null) {
                    return this.service_.get(index);
                }
                return this.serviceBuilder_.getMessageOrBuilder(index);
            }
            
            @Override
            public List<? extends ServiceDescriptorProtoOrBuilder> getServiceOrBuilderList() {
                if (this.serviceBuilder_ != null) {
                    return this.serviceBuilder_.getMessageOrBuilderList();
                }
                return Collections.unmodifiableList((List<? extends ServiceDescriptorProtoOrBuilder>)this.service_);
            }
            
            public ServiceDescriptorProto.Builder addServiceBuilder() {
                return this.internalGetServiceFieldBuilder().addBuilder(ServiceDescriptorProto.getDefaultInstance());
            }
            
            public ServiceDescriptorProto.Builder addServiceBuilder(final int index) {
                return this.internalGetServiceFieldBuilder().addBuilder(index, ServiceDescriptorProto.getDefaultInstance());
            }
            
            public List<ServiceDescriptorProto.Builder> getServiceBuilderList() {
                return this.internalGetServiceFieldBuilder().getBuilderList();
            }
            
            private RepeatedFieldBuilder<ServiceDescriptorProto, ServiceDescriptorProto.Builder, ServiceDescriptorProtoOrBuilder> internalGetServiceFieldBuilder() {
                if (this.serviceBuilder_ == null) {
                    this.serviceBuilder_ = new RepeatedFieldBuilder<ServiceDescriptorProto, ServiceDescriptorProto.Builder, ServiceDescriptorProtoOrBuilder>(this.service_, (this.bitField0_ & 0x100) != 0x0, this.getParentForChildren(), this.isClean());
                    this.service_ = null;
                }
                return this.serviceBuilder_;
            }
            
            private void ensureExtensionIsMutable() {
                if ((this.bitField0_ & 0x200) == 0x0) {
                    this.extension_ = new ArrayList<FieldDescriptorProto>(this.extension_);
                    this.bitField0_ |= 0x200;
                }
            }
            
            @Override
            public List<FieldDescriptorProto> getExtensionList() {
                if (this.extensionBuilder_ == null) {
                    return Collections.unmodifiableList((List<? extends FieldDescriptorProto>)this.extension_);
                }
                return this.extensionBuilder_.getMessageList();
            }
            
            @Override
            public int getExtensionCount() {
                if (this.extensionBuilder_ == null) {
                    return this.extension_.size();
                }
                return this.extensionBuilder_.getCount();
            }
            
            @Override
            public FieldDescriptorProto getExtension(final int index) {
                if (this.extensionBuilder_ == null) {
                    return this.extension_.get(index);
                }
                return this.extensionBuilder_.getMessage(index);
            }
            
            public Builder setExtension(final int index, final FieldDescriptorProto value) {
                if (this.extensionBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.ensureExtensionIsMutable();
                    this.extension_.set(index, value);
                    this.onChanged();
                }
                else {
                    this.extensionBuilder_.setMessage(index, value);
                }
                return this;
            }
            
            public Builder setExtension(final int index, final FieldDescriptorProto.Builder builderForValue) {
                if (this.extensionBuilder_ == null) {
                    this.ensureExtensionIsMutable();
                    this.extension_.set(index, builderForValue.build());
                    this.onChanged();
                }
                else {
                    this.extensionBuilder_.setMessage(index, builderForValue.build());
                }
                return this;
            }
            
            public Builder addExtension(final FieldDescriptorProto value) {
                if (this.extensionBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.ensureExtensionIsMutable();
                    this.extension_.add(value);
                    this.onChanged();
                }
                else {
                    this.extensionBuilder_.addMessage(value);
                }
                return this;
            }
            
            public Builder addExtension(final int index, final FieldDescriptorProto value) {
                if (this.extensionBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.ensureExtensionIsMutable();
                    this.extension_.add(index, value);
                    this.onChanged();
                }
                else {
                    this.extensionBuilder_.addMessage(index, value);
                }
                return this;
            }
            
            public Builder addExtension(final FieldDescriptorProto.Builder builderForValue) {
                if (this.extensionBuilder_ == null) {
                    this.ensureExtensionIsMutable();
                    this.extension_.add(builderForValue.build());
                    this.onChanged();
                }
                else {
                    this.extensionBuilder_.addMessage(builderForValue.build());
                }
                return this;
            }
            
            public Builder addExtension(final int index, final FieldDescriptorProto.Builder builderForValue) {
                if (this.extensionBuilder_ == null) {
                    this.ensureExtensionIsMutable();
                    this.extension_.add(index, builderForValue.build());
                    this.onChanged();
                }
                else {
                    this.extensionBuilder_.addMessage(index, builderForValue.build());
                }
                return this;
            }
            
            public Builder addAllExtension(final Iterable<? extends FieldDescriptorProto> values) {
                if (this.extensionBuilder_ == null) {
                    this.ensureExtensionIsMutable();
                    AbstractMessageLite.Builder.addAll(values, this.extension_);
                    this.onChanged();
                }
                else {
                    this.extensionBuilder_.addAllMessages(values);
                }
                return this;
            }
            
            public Builder clearExtension() {
                if (this.extensionBuilder_ == null) {
                    this.extension_ = Collections.emptyList();
                    this.bitField0_ &= 0xFFFFFDFF;
                    this.onChanged();
                }
                else {
                    this.extensionBuilder_.clear();
                }
                return this;
            }
            
            public Builder removeExtension(final int index) {
                if (this.extensionBuilder_ == null) {
                    this.ensureExtensionIsMutable();
                    this.extension_.remove(index);
                    this.onChanged();
                }
                else {
                    this.extensionBuilder_.remove(index);
                }
                return this;
            }
            
            public FieldDescriptorProto.Builder getExtensionBuilder(final int index) {
                return this.internalGetExtensionFieldBuilder().getBuilder(index);
            }
            
            @Override
            public FieldDescriptorProtoOrBuilder getExtensionOrBuilder(final int index) {
                if (this.extensionBuilder_ == null) {
                    return this.extension_.get(index);
                }
                return this.extensionBuilder_.getMessageOrBuilder(index);
            }
            
            @Override
            public List<? extends FieldDescriptorProtoOrBuilder> getExtensionOrBuilderList() {
                if (this.extensionBuilder_ != null) {
                    return this.extensionBuilder_.getMessageOrBuilderList();
                }
                return Collections.unmodifiableList((List<? extends FieldDescriptorProtoOrBuilder>)this.extension_);
            }
            
            public FieldDescriptorProto.Builder addExtensionBuilder() {
                return this.internalGetExtensionFieldBuilder().addBuilder(FieldDescriptorProto.getDefaultInstance());
            }
            
            public FieldDescriptorProto.Builder addExtensionBuilder(final int index) {
                return this.internalGetExtensionFieldBuilder().addBuilder(index, FieldDescriptorProto.getDefaultInstance());
            }
            
            public List<FieldDescriptorProto.Builder> getExtensionBuilderList() {
                return this.internalGetExtensionFieldBuilder().getBuilderList();
            }
            
            private RepeatedFieldBuilder<FieldDescriptorProto, FieldDescriptorProto.Builder, FieldDescriptorProtoOrBuilder> internalGetExtensionFieldBuilder() {
                if (this.extensionBuilder_ == null) {
                    this.extensionBuilder_ = new RepeatedFieldBuilder<FieldDescriptorProto, FieldDescriptorProto.Builder, FieldDescriptorProtoOrBuilder>(this.extension_, (this.bitField0_ & 0x200) != 0x0, this.getParentForChildren(), this.isClean());
                    this.extension_ = null;
                }
                return this.extensionBuilder_;
            }
            
            @Override
            public boolean hasOptions() {
                return (this.bitField0_ & 0x400) != 0x0;
            }
            
            @Override
            public FileOptions getOptions() {
                if (this.optionsBuilder_ == null) {
                    return (this.options_ == null) ? FileOptions.getDefaultInstance() : this.options_;
                }
                return this.optionsBuilder_.getMessage();
            }
            
            public Builder setOptions(final FileOptions value) {
                if (this.optionsBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.options_ = value;
                }
                else {
                    this.optionsBuilder_.setMessage(value);
                }
                this.bitField0_ |= 0x400;
                this.onChanged();
                return this;
            }
            
            public Builder setOptions(final FileOptions.Builder builderForValue) {
                if (this.optionsBuilder_ == null) {
                    this.options_ = builderForValue.build();
                }
                else {
                    this.optionsBuilder_.setMessage(builderForValue.build());
                }
                this.bitField0_ |= 0x400;
                this.onChanged();
                return this;
            }
            
            public Builder mergeOptions(final FileOptions value) {
                if (this.optionsBuilder_ == null) {
                    if ((this.bitField0_ & 0x400) != 0x0 && this.options_ != null && this.options_ != FileOptions.getDefaultInstance()) {
                        this.getOptionsBuilder().mergeFrom(value);
                    }
                    else {
                        this.options_ = value;
                    }
                }
                else {
                    this.optionsBuilder_.mergeFrom(value);
                }
                if (this.options_ != null) {
                    this.bitField0_ |= 0x400;
                    this.onChanged();
                }
                return this;
            }
            
            public Builder clearOptions() {
                this.bitField0_ &= 0xFFFFFBFF;
                this.options_ = null;
                if (this.optionsBuilder_ != null) {
                    this.optionsBuilder_.dispose();
                    this.optionsBuilder_ = null;
                }
                this.onChanged();
                return this;
            }
            
            public FileOptions.Builder getOptionsBuilder() {
                this.bitField0_ |= 0x400;
                this.onChanged();
                return this.internalGetOptionsFieldBuilder().getBuilder();
            }
            
            @Override
            public FileOptionsOrBuilder getOptionsOrBuilder() {
                if (this.optionsBuilder_ != null) {
                    return this.optionsBuilder_.getMessageOrBuilder();
                }
                return (this.options_ == null) ? FileOptions.getDefaultInstance() : this.options_;
            }
            
            private SingleFieldBuilder<FileOptions, FileOptions.Builder, FileOptionsOrBuilder> internalGetOptionsFieldBuilder() {
                if (this.optionsBuilder_ == null) {
                    this.optionsBuilder_ = new SingleFieldBuilder<FileOptions, FileOptions.Builder, FileOptionsOrBuilder>(this.getOptions(), this.getParentForChildren(), this.isClean());
                    this.options_ = null;
                }
                return this.optionsBuilder_;
            }
            
            @Override
            public boolean hasSourceCodeInfo() {
                return (this.bitField0_ & 0x800) != 0x0;
            }
            
            @Override
            public SourceCodeInfo getSourceCodeInfo() {
                if (this.sourceCodeInfoBuilder_ == null) {
                    return (this.sourceCodeInfo_ == null) ? SourceCodeInfo.getDefaultInstance() : this.sourceCodeInfo_;
                }
                return this.sourceCodeInfoBuilder_.getMessage();
            }
            
            public Builder setSourceCodeInfo(final SourceCodeInfo value) {
                if (this.sourceCodeInfoBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.sourceCodeInfo_ = value;
                }
                else {
                    this.sourceCodeInfoBuilder_.setMessage(value);
                }
                this.bitField0_ |= 0x800;
                this.onChanged();
                return this;
            }
            
            public Builder setSourceCodeInfo(final SourceCodeInfo.Builder builderForValue) {
                if (this.sourceCodeInfoBuilder_ == null) {
                    this.sourceCodeInfo_ = builderForValue.build();
                }
                else {
                    this.sourceCodeInfoBuilder_.setMessage(builderForValue.build());
                }
                this.bitField0_ |= 0x800;
                this.onChanged();
                return this;
            }
            
            public Builder mergeSourceCodeInfo(final SourceCodeInfo value) {
                if (this.sourceCodeInfoBuilder_ == null) {
                    if ((this.bitField0_ & 0x800) != 0x0 && this.sourceCodeInfo_ != null && this.sourceCodeInfo_ != SourceCodeInfo.getDefaultInstance()) {
                        this.getSourceCodeInfoBuilder().mergeFrom(value);
                    }
                    else {
                        this.sourceCodeInfo_ = value;
                    }
                }
                else {
                    this.sourceCodeInfoBuilder_.mergeFrom(value);
                }
                if (this.sourceCodeInfo_ != null) {
                    this.bitField0_ |= 0x800;
                    this.onChanged();
                }
                return this;
            }
            
            public Builder clearSourceCodeInfo() {
                this.bitField0_ &= 0xFFFFF7FF;
                this.sourceCodeInfo_ = null;
                if (this.sourceCodeInfoBuilder_ != null) {
                    this.sourceCodeInfoBuilder_.dispose();
                    this.sourceCodeInfoBuilder_ = null;
                }
                this.onChanged();
                return this;
            }
            
            public SourceCodeInfo.Builder getSourceCodeInfoBuilder() {
                this.bitField0_ |= 0x800;
                this.onChanged();
                return this.internalGetSourceCodeInfoFieldBuilder().getBuilder();
            }
            
            @Override
            public SourceCodeInfoOrBuilder getSourceCodeInfoOrBuilder() {
                if (this.sourceCodeInfoBuilder_ != null) {
                    return this.sourceCodeInfoBuilder_.getMessageOrBuilder();
                }
                return (this.sourceCodeInfo_ == null) ? SourceCodeInfo.getDefaultInstance() : this.sourceCodeInfo_;
            }
            
            private SingleFieldBuilder<SourceCodeInfo, SourceCodeInfo.Builder, SourceCodeInfoOrBuilder> internalGetSourceCodeInfoFieldBuilder() {
                if (this.sourceCodeInfoBuilder_ == null) {
                    this.sourceCodeInfoBuilder_ = new SingleFieldBuilder<SourceCodeInfo, SourceCodeInfo.Builder, SourceCodeInfoOrBuilder>(this.getSourceCodeInfo(), this.getParentForChildren(), this.isClean());
                    this.sourceCodeInfo_ = null;
                }
                return this.sourceCodeInfoBuilder_;
            }
            
            @Override
            public boolean hasSyntax() {
                return (this.bitField0_ & 0x1000) != 0x0;
            }
            
            @Override
            public String getSyntax() {
                final Object ref = this.syntax_;
                if (!(ref instanceof String)) {
                    final ByteString bs = (ByteString)ref;
                    final String s = bs.toStringUtf8();
                    if (bs.isValidUtf8()) {
                        this.syntax_ = s;
                    }
                    return s;
                }
                return (String)ref;
            }
            
            @Override
            public ByteString getSyntaxBytes() {
                final Object ref = this.syntax_;
                if (ref instanceof String) {
                    final ByteString b = ByteString.copyFromUtf8((String)ref);
                    return (ByteString)(this.syntax_ = b);
                }
                return (ByteString)ref;
            }
            
            public Builder setSyntax(final String value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                this.syntax_ = value;
                this.bitField0_ |= 0x1000;
                this.onChanged();
                return this;
            }
            
            public Builder clearSyntax() {
                this.syntax_ = FileDescriptorProto.getDefaultInstance().getSyntax();
                this.bitField0_ &= 0xFFFFEFFF;
                this.onChanged();
                return this;
            }
            
            public Builder setSyntaxBytes(final ByteString value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                this.syntax_ = value;
                this.bitField0_ |= 0x1000;
                this.onChanged();
                return this;
            }
            
            @Override
            public boolean hasEdition() {
                return (this.bitField0_ & 0x2000) != 0x0;
            }
            
            @Override
            public Edition getEdition() {
                final Edition result = Edition.forNumber(this.edition_);
                return (result == null) ? Edition.EDITION_UNKNOWN : result;
            }
            
            public Builder setEdition(final Edition value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                this.bitField0_ |= 0x2000;
                this.edition_ = value.getNumber();
                this.onChanged();
                return this;
            }
            
            public Builder clearEdition() {
                this.bitField0_ &= 0xFFFFDFFF;
                this.edition_ = 0;
                this.onChanged();
                return this;
            }
        }
    }
    
    public static final class DescriptorProto extends GeneratedMessage implements DescriptorProtoOrBuilder
    {
        private static final long serialVersionUID = 0L;
        private int bitField0_;
        public static final int NAME_FIELD_NUMBER = 1;
        private volatile Object name_;
        public static final int FIELD_FIELD_NUMBER = 2;
        private List<FieldDescriptorProto> field_;
        public static final int EXTENSION_FIELD_NUMBER = 6;
        private List<FieldDescriptorProto> extension_;
        public static final int NESTED_TYPE_FIELD_NUMBER = 3;
        private List<DescriptorProto> nestedType_;
        public static final int ENUM_TYPE_FIELD_NUMBER = 4;
        private List<EnumDescriptorProto> enumType_;
        public static final int EXTENSION_RANGE_FIELD_NUMBER = 5;
        private List<ExtensionRange> extensionRange_;
        public static final int ONEOF_DECL_FIELD_NUMBER = 8;
        private List<OneofDescriptorProto> oneofDecl_;
        public static final int OPTIONS_FIELD_NUMBER = 7;
        private MessageOptions options_;
        public static final int RESERVED_RANGE_FIELD_NUMBER = 9;
        private List<ReservedRange> reservedRange_;
        public static final int RESERVED_NAME_FIELD_NUMBER = 10;
        private LazyStringArrayList reservedName_;
        public static final int VISIBILITY_FIELD_NUMBER = 11;
        private int visibility_;
        private byte memoizedIsInitialized;
        private static final DescriptorProto DEFAULT_INSTANCE;
        private static final Parser<DescriptorProto> PARSER;
        
        private DescriptorProto(final GeneratedMessage.Builder<?> builder) {
            super(builder);
            this.name_ = "";
            this.reservedName_ = LazyStringArrayList.emptyList();
            this.visibility_ = 0;
            this.memoizedIsInitialized = -1;
        }
        
        private DescriptorProto() {
            this.name_ = "";
            this.reservedName_ = LazyStringArrayList.emptyList();
            this.visibility_ = 0;
            this.memoizedIsInitialized = -1;
            this.name_ = "";
            this.field_ = Collections.emptyList();
            this.extension_ = Collections.emptyList();
            this.nestedType_ = Collections.emptyList();
            this.enumType_ = Collections.emptyList();
            this.extensionRange_ = Collections.emptyList();
            this.oneofDecl_ = Collections.emptyList();
            this.reservedRange_ = Collections.emptyList();
            this.reservedName_ = LazyStringArrayList.emptyList();
            this.visibility_ = 0;
        }
        
        public static final Descriptors.Descriptor getDescriptor() {
            return DescriptorProtos.internal_static_google_protobuf_DescriptorProto_descriptor;
        }
        
        @Override
        protected FieldAccessorTable internalGetFieldAccessorTable() {
            return DescriptorProtos.internal_static_google_protobuf_DescriptorProto_fieldAccessorTable.ensureFieldAccessorsInitialized(DescriptorProto.class, Builder.class);
        }
        
        @Override
        public boolean hasName() {
            return (this.bitField0_ & 0x1) != 0x0;
        }
        
        @Override
        public String getName() {
            final Object ref = this.name_;
            if (ref instanceof String) {
                return (String)ref;
            }
            final ByteString bs = (ByteString)ref;
            final String s = bs.toStringUtf8();
            if (bs.isValidUtf8()) {
                this.name_ = s;
            }
            return s;
        }
        
        @Override
        public ByteString getNameBytes() {
            final Object ref = this.name_;
            if (ref instanceof String) {
                final ByteString b = ByteString.copyFromUtf8((String)ref);
                return (ByteString)(this.name_ = b);
            }
            return (ByteString)ref;
        }
        
        @Override
        public List<FieldDescriptorProto> getFieldList() {
            return this.field_;
        }
        
        @Override
        public List<? extends FieldDescriptorProtoOrBuilder> getFieldOrBuilderList() {
            return this.field_;
        }
        
        @Override
        public int getFieldCount() {
            return this.field_.size();
        }
        
        @Override
        public FieldDescriptorProto getField(final int index) {
            return this.field_.get(index);
        }
        
        @Override
        public FieldDescriptorProtoOrBuilder getFieldOrBuilder(final int index) {
            return this.field_.get(index);
        }
        
        @Override
        public List<FieldDescriptorProto> getExtensionList() {
            return this.extension_;
        }
        
        @Override
        public List<? extends FieldDescriptorProtoOrBuilder> getExtensionOrBuilderList() {
            return this.extension_;
        }
        
        @Override
        public int getExtensionCount() {
            return this.extension_.size();
        }
        
        @Override
        public FieldDescriptorProto getExtension(final int index) {
            return this.extension_.get(index);
        }
        
        @Override
        public FieldDescriptorProtoOrBuilder getExtensionOrBuilder(final int index) {
            return this.extension_.get(index);
        }
        
        @Override
        public List<DescriptorProto> getNestedTypeList() {
            return this.nestedType_;
        }
        
        @Override
        public List<? extends DescriptorProtoOrBuilder> getNestedTypeOrBuilderList() {
            return this.nestedType_;
        }
        
        @Override
        public int getNestedTypeCount() {
            return this.nestedType_.size();
        }
        
        @Override
        public DescriptorProto getNestedType(final int index) {
            return this.nestedType_.get(index);
        }
        
        @Override
        public DescriptorProtoOrBuilder getNestedTypeOrBuilder(final int index) {
            return this.nestedType_.get(index);
        }
        
        @Override
        public List<EnumDescriptorProto> getEnumTypeList() {
            return this.enumType_;
        }
        
        @Override
        public List<? extends EnumDescriptorProtoOrBuilder> getEnumTypeOrBuilderList() {
            return this.enumType_;
        }
        
        @Override
        public int getEnumTypeCount() {
            return this.enumType_.size();
        }
        
        @Override
        public EnumDescriptorProto getEnumType(final int index) {
            return this.enumType_.get(index);
        }
        
        @Override
        public EnumDescriptorProtoOrBuilder getEnumTypeOrBuilder(final int index) {
            return this.enumType_.get(index);
        }
        
        @Override
        public List<ExtensionRange> getExtensionRangeList() {
            return this.extensionRange_;
        }
        
        @Override
        public List<? extends ExtensionRangeOrBuilder> getExtensionRangeOrBuilderList() {
            return this.extensionRange_;
        }
        
        @Override
        public int getExtensionRangeCount() {
            return this.extensionRange_.size();
        }
        
        @Override
        public ExtensionRange getExtensionRange(final int index) {
            return this.extensionRange_.get(index);
        }
        
        @Override
        public ExtensionRangeOrBuilder getExtensionRangeOrBuilder(final int index) {
            return this.extensionRange_.get(index);
        }
        
        @Override
        public List<OneofDescriptorProto> getOneofDeclList() {
            return this.oneofDecl_;
        }
        
        @Override
        public List<? extends OneofDescriptorProtoOrBuilder> getOneofDeclOrBuilderList() {
            return this.oneofDecl_;
        }
        
        @Override
        public int getOneofDeclCount() {
            return this.oneofDecl_.size();
        }
        
        @Override
        public OneofDescriptorProto getOneofDecl(final int index) {
            return this.oneofDecl_.get(index);
        }
        
        @Override
        public OneofDescriptorProtoOrBuilder getOneofDeclOrBuilder(final int index) {
            return this.oneofDecl_.get(index);
        }
        
        @Override
        public boolean hasOptions() {
            return (this.bitField0_ & 0x2) != 0x0;
        }
        
        @Override
        public MessageOptions getOptions() {
            return (this.options_ == null) ? MessageOptions.getDefaultInstance() : this.options_;
        }
        
        @Override
        public MessageOptionsOrBuilder getOptionsOrBuilder() {
            return (this.options_ == null) ? MessageOptions.getDefaultInstance() : this.options_;
        }
        
        @Override
        public List<ReservedRange> getReservedRangeList() {
            return this.reservedRange_;
        }
        
        @Override
        public List<? extends ReservedRangeOrBuilder> getReservedRangeOrBuilderList() {
            return this.reservedRange_;
        }
        
        @Override
        public int getReservedRangeCount() {
            return this.reservedRange_.size();
        }
        
        @Override
        public ReservedRange getReservedRange(final int index) {
            return this.reservedRange_.get(index);
        }
        
        @Override
        public ReservedRangeOrBuilder getReservedRangeOrBuilder(final int index) {
            return this.reservedRange_.get(index);
        }
        
        @Override
        public ProtocolStringList getReservedNameList() {
            return this.reservedName_;
        }
        
        @Override
        public int getReservedNameCount() {
            return this.reservedName_.size();
        }
        
        @Override
        public String getReservedName(final int index) {
            return this.reservedName_.get(index);
        }
        
        @Override
        public ByteString getReservedNameBytes(final int index) {
            return this.reservedName_.getByteString(index);
        }
        
        @Override
        public boolean hasVisibility() {
            return (this.bitField0_ & 0x4) != 0x0;
        }
        
        @Override
        public SymbolVisibility getVisibility() {
            final SymbolVisibility result = SymbolVisibility.forNumber(this.visibility_);
            return (result == null) ? SymbolVisibility.VISIBILITY_UNSET : result;
        }
        
        @Override
        public final boolean isInitialized() {
            final byte isInitialized = this.memoizedIsInitialized;
            if (isInitialized == 1) {
                return true;
            }
            if (isInitialized == 0) {
                return false;
            }
            for (int i = 0; i < this.getFieldCount(); ++i) {
                if (!this.getField(i).isInitialized()) {
                    this.memoizedIsInitialized = 0;
                    return false;
                }
            }
            for (int i = 0; i < this.getExtensionCount(); ++i) {
                if (!this.getExtension(i).isInitialized()) {
                    this.memoizedIsInitialized = 0;
                    return false;
                }
            }
            for (int i = 0; i < this.getNestedTypeCount(); ++i) {
                if (!this.getNestedType(i).isInitialized()) {
                    this.memoizedIsInitialized = 0;
                    return false;
                }
            }
            for (int i = 0; i < this.getEnumTypeCount(); ++i) {
                if (!this.getEnumType(i).isInitialized()) {
                    this.memoizedIsInitialized = 0;
                    return false;
                }
            }
            for (int i = 0; i < this.getExtensionRangeCount(); ++i) {
                if (!this.getExtensionRange(i).isInitialized()) {
                    this.memoizedIsInitialized = 0;
                    return false;
                }
            }
            for (int i = 0; i < this.getOneofDeclCount(); ++i) {
                if (!this.getOneofDecl(i).isInitialized()) {
                    this.memoizedIsInitialized = 0;
                    return false;
                }
            }
            if (this.hasOptions() && !this.getOptions().isInitialized()) {
                this.memoizedIsInitialized = 0;
                return false;
            }
            this.memoizedIsInitialized = 1;
            return true;
        }
        
        @Override
        public void writeTo(final CodedOutputStream output) throws IOException {
            if ((this.bitField0_ & 0x1) != 0x0) {
                GeneratedMessage.writeString(output, 1, this.name_);
            }
            for (int i = 0; i < this.field_.size(); ++i) {
                output.writeMessage(2, this.field_.get(i));
            }
            for (int i = 0; i < this.nestedType_.size(); ++i) {
                output.writeMessage(3, this.nestedType_.get(i));
            }
            for (int i = 0; i < this.enumType_.size(); ++i) {
                output.writeMessage(4, this.enumType_.get(i));
            }
            for (int i = 0; i < this.extensionRange_.size(); ++i) {
                output.writeMessage(5, this.extensionRange_.get(i));
            }
            for (int i = 0; i < this.extension_.size(); ++i) {
                output.writeMessage(6, this.extension_.get(i));
            }
            if ((this.bitField0_ & 0x2) != 0x0) {
                output.writeMessage(7, this.getOptions());
            }
            for (int i = 0; i < this.oneofDecl_.size(); ++i) {
                output.writeMessage(8, this.oneofDecl_.get(i));
            }
            for (int i = 0; i < this.reservedRange_.size(); ++i) {
                output.writeMessage(9, this.reservedRange_.get(i));
            }
            for (int i = 0; i < this.reservedName_.size(); ++i) {
                GeneratedMessage.writeString(output, 10, this.reservedName_.getRaw(i));
            }
            if ((this.bitField0_ & 0x4) != 0x0) {
                output.writeEnum(11, this.visibility_);
            }
            this.getUnknownFields().writeTo(output);
        }
        
        @Override
        public int getSerializedSize() {
            int size = this.memoizedSize;
            if (size != -1) {
                return size;
            }
            size = 0;
            if ((this.bitField0_ & 0x1) != 0x0) {
                size += GeneratedMessage.computeStringSize(1, this.name_);
            }
            for (int i = 0; i < this.field_.size(); ++i) {
                size += CodedOutputStream.computeMessageSize(2, this.field_.get(i));
            }
            for (int i = 0; i < this.nestedType_.size(); ++i) {
                size += CodedOutputStream.computeMessageSize(3, this.nestedType_.get(i));
            }
            for (int i = 0; i < this.enumType_.size(); ++i) {
                size += CodedOutputStream.computeMessageSize(4, this.enumType_.get(i));
            }
            for (int i = 0; i < this.extensionRange_.size(); ++i) {
                size += CodedOutputStream.computeMessageSize(5, this.extensionRange_.get(i));
            }
            for (int i = 0; i < this.extension_.size(); ++i) {
                size += CodedOutputStream.computeMessageSize(6, this.extension_.get(i));
            }
            if ((this.bitField0_ & 0x2) != 0x0) {
                size += CodedOutputStream.computeMessageSize(7, this.getOptions());
            }
            for (int i = 0; i < this.oneofDecl_.size(); ++i) {
                size += CodedOutputStream.computeMessageSize(8, this.oneofDecl_.get(i));
            }
            for (int i = 0; i < this.reservedRange_.size(); ++i) {
                size += CodedOutputStream.computeMessageSize(9, this.reservedRange_.get(i));
            }
            int dataSize = 0;
            for (int j = 0; j < this.reservedName_.size(); ++j) {
                dataSize += GeneratedMessage.computeStringSizeNoTag(this.reservedName_.getRaw(j));
            }
            size += dataSize;
            size += 1 * this.getReservedNameList().size();
            if ((this.bitField0_ & 0x4) != 0x0) {
                size += CodedOutputStream.computeEnumSize(11, this.visibility_);
            }
            size += this.getUnknownFields().getSerializedSize();
            return this.memoizedSize = size;
        }
        
        @Override
        public boolean equals(final Object obj) {
            if (obj == this) {
                return true;
            }
            if (!(obj instanceof DescriptorProto)) {
                return super.equals(obj);
            }
            final DescriptorProto other = (DescriptorProto)obj;
            return this.hasName() == other.hasName() && (!this.hasName() || this.getName().equals(other.getName())) && this.getFieldList().equals(other.getFieldList()) && this.getExtensionList().equals(other.getExtensionList()) && this.getNestedTypeList().equals(other.getNestedTypeList()) && this.getEnumTypeList().equals(other.getEnumTypeList()) && this.getExtensionRangeList().equals(other.getExtensionRangeList()) && this.getOneofDeclList().equals(other.getOneofDeclList()) && this.hasOptions() == other.hasOptions() && (!this.hasOptions() || this.getOptions().equals(other.getOptions())) && this.getReservedRangeList().equals(other.getReservedRangeList()) && this.getReservedNameList().equals(other.getReservedNameList()) && this.hasVisibility() == other.hasVisibility() && (!this.hasVisibility() || this.visibility_ == other.visibility_) && this.getUnknownFields().equals(other.getUnknownFields());
        }
        
        @Override
        public int hashCode() {
            if (this.memoizedHashCode != 0) {
                return this.memoizedHashCode;
            }
            int hash = 41;
            hash = 19 * hash + getDescriptor().hashCode();
            if (this.hasName()) {
                hash = 37 * hash + 1;
                hash = 53 * hash + this.getName().hashCode();
            }
            if (this.getFieldCount() > 0) {
                hash = 37 * hash + 2;
                hash = 53 * hash + this.getFieldList().hashCode();
            }
            if (this.getExtensionCount() > 0) {
                hash = 37 * hash + 6;
                hash = 53 * hash + this.getExtensionList().hashCode();
            }
            if (this.getNestedTypeCount() > 0) {
                hash = 37 * hash + 3;
                hash = 53 * hash + this.getNestedTypeList().hashCode();
            }
            if (this.getEnumTypeCount() > 0) {
                hash = 37 * hash + 4;
                hash = 53 * hash + this.getEnumTypeList().hashCode();
            }
            if (this.getExtensionRangeCount() > 0) {
                hash = 37 * hash + 5;
                hash = 53 * hash + this.getExtensionRangeList().hashCode();
            }
            if (this.getOneofDeclCount() > 0) {
                hash = 37 * hash + 8;
                hash = 53 * hash + this.getOneofDeclList().hashCode();
            }
            if (this.hasOptions()) {
                hash = 37 * hash + 7;
                hash = 53 * hash + this.getOptions().hashCode();
            }
            if (this.getReservedRangeCount() > 0) {
                hash = 37 * hash + 9;
                hash = 53 * hash + this.getReservedRangeList().hashCode();
            }
            if (this.getReservedNameCount() > 0) {
                hash = 37 * hash + 10;
                hash = 53 * hash + this.getReservedNameList().hashCode();
            }
            if (this.hasVisibility()) {
                hash = 37 * hash + 11;
                hash = 53 * hash + this.visibility_;
            }
            hash = 29 * hash + this.getUnknownFields().hashCode();
            return this.memoizedHashCode = hash;
        }
        
        public static DescriptorProto parseFrom(final ByteBuffer data) throws InvalidProtocolBufferException {
            return DescriptorProto.PARSER.parseFrom(data);
        }
        
        public static DescriptorProto parseFrom(final ByteBuffer data, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
            return DescriptorProto.PARSER.parseFrom(data, extensionRegistry);
        }
        
        public static DescriptorProto parseFrom(final ByteString data) throws InvalidProtocolBufferException {
            return DescriptorProto.PARSER.parseFrom(data);
        }
        
        public static DescriptorProto parseFrom(final ByteString data, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
            return DescriptorProto.PARSER.parseFrom(data, extensionRegistry);
        }
        
        public static DescriptorProto parseFrom(final byte[] data) throws InvalidProtocolBufferException {
            return DescriptorProto.PARSER.parseFrom(data);
        }
        
        public static DescriptorProto parseFrom(final byte[] data, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
            return DescriptorProto.PARSER.parseFrom(data, extensionRegistry);
        }
        
        public static DescriptorProto parseFrom(final InputStream input) throws IOException {
            return GeneratedMessage.parseWithIOException(DescriptorProto.PARSER, input);
        }
        
        public static DescriptorProto parseFrom(final InputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
            return GeneratedMessage.parseWithIOException(DescriptorProto.PARSER, input, extensionRegistry);
        }
        
        public static DescriptorProto parseDelimitedFrom(final InputStream input) throws IOException {
            return GeneratedMessage.parseDelimitedWithIOException(DescriptorProto.PARSER, input);
        }
        
        public static DescriptorProto parseDelimitedFrom(final InputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
            return GeneratedMessage.parseDelimitedWithIOException(DescriptorProto.PARSER, input, extensionRegistry);
        }
        
        public static DescriptorProto parseFrom(final CodedInputStream input) throws IOException {
            return GeneratedMessage.parseWithIOException(DescriptorProto.PARSER, input);
        }
        
        public static DescriptorProto parseFrom(final CodedInputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
            return GeneratedMessage.parseWithIOException(DescriptorProto.PARSER, input, extensionRegistry);
        }
        
        @Override
        public Builder newBuilderForType() {
            return newBuilder();
        }
        
        public static Builder newBuilder() {
            return DescriptorProto.DEFAULT_INSTANCE.toBuilder();
        }
        
        public static Builder newBuilder(final DescriptorProto prototype) {
            return DescriptorProto.DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
        }
        
        @Override
        public Builder toBuilder() {
            return (this == DescriptorProto.DEFAULT_INSTANCE) ? new Builder() : new Builder().mergeFrom(this);
        }
        
        @Override
        protected Builder newBuilderForType(final BuilderParent parent) {
            final Builder builder = new Builder(parent);
            return builder;
        }
        
        public static DescriptorProto getDefaultInstance() {
            return DescriptorProto.DEFAULT_INSTANCE;
        }
        
        public static Parser<DescriptorProto> parser() {
            return DescriptorProto.PARSER;
        }
        
        @Override
        public Parser<DescriptorProto> getParserForType() {
            return DescriptorProto.PARSER;
        }
        
        @Override
        public DescriptorProto getDefaultInstanceForType() {
            return DescriptorProto.DEFAULT_INSTANCE;
        }
        
        static {
            RuntimeVersion.validateProtobufGencodeVersion(RuntimeVersion.RuntimeDomain.PUBLIC, 4, 33, 0, "", "DescriptorProto");
            DEFAULT_INSTANCE = new DescriptorProto();
            PARSER = new AbstractParser<DescriptorProto>() {
                @Override
                public DescriptorProto parsePartialFrom(final CodedInputStream input, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
                    final Builder builder = DescriptorProto.newBuilder();
                    try {
                        builder.mergeFrom(input, extensionRegistry);
                    }
                    catch (final InvalidProtocolBufferException e) {
                        throw e.setUnfinishedMessage(builder.buildPartial());
                    }
                    catch (final UninitializedMessageException e2) {
                        throw e2.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
                    }
                    catch (final IOException e3) {
                        throw new InvalidProtocolBufferException(e3).setUnfinishedMessage(builder.buildPartial());
                    }
                    return builder.buildPartial();
                }
            };
        }
        
        public static final class ExtensionRange extends GeneratedMessage implements ExtensionRangeOrBuilder
        {
            private static final long serialVersionUID = 0L;
            private int bitField0_;
            public static final int START_FIELD_NUMBER = 1;
            private int start_;
            public static final int END_FIELD_NUMBER = 2;
            private int end_;
            public static final int OPTIONS_FIELD_NUMBER = 3;
            private ExtensionRangeOptions options_;
            private byte memoizedIsInitialized;
            private static final ExtensionRange DEFAULT_INSTANCE;
            private static final Parser<ExtensionRange> PARSER;
            
            private ExtensionRange(final GeneratedMessage.Builder<?> builder) {
                super(builder);
                this.start_ = 0;
                this.end_ = 0;
                this.memoizedIsInitialized = -1;
            }
            
            private ExtensionRange() {
                this.start_ = 0;
                this.end_ = 0;
                this.memoizedIsInitialized = -1;
            }
            
            public static final Descriptors.Descriptor getDescriptor() {
                return DescriptorProtos.internal_static_google_protobuf_DescriptorProto_ExtensionRange_descriptor;
            }
            
            @Override
            protected FieldAccessorTable internalGetFieldAccessorTable() {
                return DescriptorProtos.internal_static_google_protobuf_DescriptorProto_ExtensionRange_fieldAccessorTable.ensureFieldAccessorsInitialized(ExtensionRange.class, Builder.class);
            }
            
            @Override
            public boolean hasStart() {
                return (this.bitField0_ & 0x1) != 0x0;
            }
            
            @Override
            public int getStart() {
                return this.start_;
            }
            
            @Override
            public boolean hasEnd() {
                return (this.bitField0_ & 0x2) != 0x0;
            }
            
            @Override
            public int getEnd() {
                return this.end_;
            }
            
            @Override
            public boolean hasOptions() {
                return (this.bitField0_ & 0x4) != 0x0;
            }
            
            @Override
            public ExtensionRangeOptions getOptions() {
                return (this.options_ == null) ? ExtensionRangeOptions.getDefaultInstance() : this.options_;
            }
            
            @Override
            public ExtensionRangeOptionsOrBuilder getOptionsOrBuilder() {
                return (this.options_ == null) ? ExtensionRangeOptions.getDefaultInstance() : this.options_;
            }
            
            @Override
            public final boolean isInitialized() {
                final byte isInitialized = this.memoizedIsInitialized;
                if (isInitialized == 1) {
                    return true;
                }
                if (isInitialized == 0) {
                    return false;
                }
                if (this.hasOptions() && !this.getOptions().isInitialized()) {
                    this.memoizedIsInitialized = 0;
                    return false;
                }
                this.memoizedIsInitialized = 1;
                return true;
            }
            
            @Override
            public void writeTo(final CodedOutputStream output) throws IOException {
                if ((this.bitField0_ & 0x1) != 0x0) {
                    output.writeInt32(1, this.start_);
                }
                if ((this.bitField0_ & 0x2) != 0x0) {
                    output.writeInt32(2, this.end_);
                }
                if ((this.bitField0_ & 0x4) != 0x0) {
                    output.writeMessage(3, this.getOptions());
                }
                this.getUnknownFields().writeTo(output);
            }
            
            @Override
            public int getSerializedSize() {
                int size = this.memoizedSize;
                if (size != -1) {
                    return size;
                }
                size = 0;
                if ((this.bitField0_ & 0x1) != 0x0) {
                    size += CodedOutputStream.computeInt32Size(1, this.start_);
                }
                if ((this.bitField0_ & 0x2) != 0x0) {
                    size += CodedOutputStream.computeInt32Size(2, this.end_);
                }
                if ((this.bitField0_ & 0x4) != 0x0) {
                    size += CodedOutputStream.computeMessageSize(3, this.getOptions());
                }
                size += this.getUnknownFields().getSerializedSize();
                return this.memoizedSize = size;
            }
            
            @Override
            public boolean equals(final Object obj) {
                if (obj == this) {
                    return true;
                }
                if (!(obj instanceof ExtensionRange)) {
                    return super.equals(obj);
                }
                final ExtensionRange other = (ExtensionRange)obj;
                return this.hasStart() == other.hasStart() && (!this.hasStart() || this.getStart() == other.getStart()) && this.hasEnd() == other.hasEnd() && (!this.hasEnd() || this.getEnd() == other.getEnd()) && this.hasOptions() == other.hasOptions() && (!this.hasOptions() || this.getOptions().equals(other.getOptions())) && this.getUnknownFields().equals(other.getUnknownFields());
            }
            
            @Override
            public int hashCode() {
                if (this.memoizedHashCode != 0) {
                    return this.memoizedHashCode;
                }
                int hash = 41;
                hash = 19 * hash + getDescriptor().hashCode();
                if (this.hasStart()) {
                    hash = 37 * hash + 1;
                    hash = 53 * hash + this.getStart();
                }
                if (this.hasEnd()) {
                    hash = 37 * hash + 2;
                    hash = 53 * hash + this.getEnd();
                }
                if (this.hasOptions()) {
                    hash = 37 * hash + 3;
                    hash = 53 * hash + this.getOptions().hashCode();
                }
                hash = 29 * hash + this.getUnknownFields().hashCode();
                return this.memoizedHashCode = hash;
            }
            
            public static ExtensionRange parseFrom(final ByteBuffer data) throws InvalidProtocolBufferException {
                return ExtensionRange.PARSER.parseFrom(data);
            }
            
            public static ExtensionRange parseFrom(final ByteBuffer data, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
                return ExtensionRange.PARSER.parseFrom(data, extensionRegistry);
            }
            
            public static ExtensionRange parseFrom(final ByteString data) throws InvalidProtocolBufferException {
                return ExtensionRange.PARSER.parseFrom(data);
            }
            
            public static ExtensionRange parseFrom(final ByteString data, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
                return ExtensionRange.PARSER.parseFrom(data, extensionRegistry);
            }
            
            public static ExtensionRange parseFrom(final byte[] data) throws InvalidProtocolBufferException {
                return ExtensionRange.PARSER.parseFrom(data);
            }
            
            public static ExtensionRange parseFrom(final byte[] data, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
                return ExtensionRange.PARSER.parseFrom(data, extensionRegistry);
            }
            
            public static ExtensionRange parseFrom(final InputStream input) throws IOException {
                return GeneratedMessage.parseWithIOException(ExtensionRange.PARSER, input);
            }
            
            public static ExtensionRange parseFrom(final InputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
                return GeneratedMessage.parseWithIOException(ExtensionRange.PARSER, input, extensionRegistry);
            }
            
            public static ExtensionRange parseDelimitedFrom(final InputStream input) throws IOException {
                return GeneratedMessage.parseDelimitedWithIOException(ExtensionRange.PARSER, input);
            }
            
            public static ExtensionRange parseDelimitedFrom(final InputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
                return GeneratedMessage.parseDelimitedWithIOException(ExtensionRange.PARSER, input, extensionRegistry);
            }
            
            public static ExtensionRange parseFrom(final CodedInputStream input) throws IOException {
                return GeneratedMessage.parseWithIOException(ExtensionRange.PARSER, input);
            }
            
            public static ExtensionRange parseFrom(final CodedInputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
                return GeneratedMessage.parseWithIOException(ExtensionRange.PARSER, input, extensionRegistry);
            }
            
            @Override
            public Builder newBuilderForType() {
                return newBuilder();
            }
            
            public static Builder newBuilder() {
                return ExtensionRange.DEFAULT_INSTANCE.toBuilder();
            }
            
            public static Builder newBuilder(final ExtensionRange prototype) {
                return ExtensionRange.DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
            }
            
            @Override
            public Builder toBuilder() {
                return (this == ExtensionRange.DEFAULT_INSTANCE) ? new Builder() : new Builder().mergeFrom(this);
            }
            
            @Override
            protected Builder newBuilderForType(final BuilderParent parent) {
                final Builder builder = new Builder(parent);
                return builder;
            }
            
            public static ExtensionRange getDefaultInstance() {
                return ExtensionRange.DEFAULT_INSTANCE;
            }
            
            public static Parser<ExtensionRange> parser() {
                return ExtensionRange.PARSER;
            }
            
            @Override
            public Parser<ExtensionRange> getParserForType() {
                return ExtensionRange.PARSER;
            }
            
            @Override
            public ExtensionRange getDefaultInstanceForType() {
                return ExtensionRange.DEFAULT_INSTANCE;
            }
            
            static {
                RuntimeVersion.validateProtobufGencodeVersion(RuntimeVersion.RuntimeDomain.PUBLIC, 4, 33, 0, "", "ExtensionRange");
                DEFAULT_INSTANCE = new ExtensionRange();
                PARSER = new AbstractParser<ExtensionRange>() {
                    @Override
                    public ExtensionRange parsePartialFrom(final CodedInputStream input, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
                        final Builder builder = ExtensionRange.newBuilder();
                        try {
                            builder.mergeFrom(input, extensionRegistry);
                        }
                        catch (final InvalidProtocolBufferException e) {
                            throw e.setUnfinishedMessage(builder.buildPartial());
                        }
                        catch (final UninitializedMessageException e2) {
                            throw e2.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
                        }
                        catch (final IOException e3) {
                            throw new InvalidProtocolBufferException(e3).setUnfinishedMessage(builder.buildPartial());
                        }
                        return builder.buildPartial();
                    }
                };
            }
            
            public static final class Builder extends GeneratedMessage.Builder<Builder> implements ExtensionRangeOrBuilder
            {
                private int bitField0_;
                private int start_;
                private int end_;
                private ExtensionRangeOptions options_;
                private SingleFieldBuilder<ExtensionRangeOptions, ExtensionRangeOptions.Builder, ExtensionRangeOptionsOrBuilder> optionsBuilder_;
                
                public static final Descriptors.Descriptor getDescriptor() {
                    return DescriptorProtos.internal_static_google_protobuf_DescriptorProto_ExtensionRange_descriptor;
                }
                
                @Override
                protected FieldAccessorTable internalGetFieldAccessorTable() {
                    return DescriptorProtos.internal_static_google_protobuf_DescriptorProto_ExtensionRange_fieldAccessorTable.ensureFieldAccessorsInitialized(ExtensionRange.class, Builder.class);
                }
                
                private Builder() {
                    this.maybeForceBuilderInitialization();
                }
                
                private Builder(final BuilderParent parent) {
                    super(parent);
                    this.maybeForceBuilderInitialization();
                }
                
                private void maybeForceBuilderInitialization() {
                    if (GeneratedMessage.alwaysUseFieldBuilders) {
                        this.internalGetOptionsFieldBuilder();
                    }
                }
                
                @Override
                public Builder clear() {
                    super.clear();
                    this.bitField0_ = 0;
                    this.start_ = 0;
                    this.end_ = 0;
                    this.options_ = null;
                    if (this.optionsBuilder_ != null) {
                        this.optionsBuilder_.dispose();
                        this.optionsBuilder_ = null;
                    }
                    return this;
                }
                
                @Override
                public Descriptors.Descriptor getDescriptorForType() {
                    return DescriptorProtos.internal_static_google_protobuf_DescriptorProto_ExtensionRange_descriptor;
                }
                
                @Override
                public ExtensionRange getDefaultInstanceForType() {
                    return ExtensionRange.getDefaultInstance();
                }
                
                @Override
                public ExtensionRange build() {
                    final ExtensionRange result = this.buildPartial();
                    if (!result.isInitialized()) {
                        throw AbstractMessage.Builder.newUninitializedMessageException(result);
                    }
                    return result;
                }
                
                @Override
                public ExtensionRange buildPartial() {
                    final ExtensionRange result = new ExtensionRange((GeneratedMessage.Builder)this);
                    if (this.bitField0_ != 0) {
                        this.buildPartial0(result);
                    }
                    this.onBuilt();
                    return result;
                }
                
                private void buildPartial0(final ExtensionRange result) {
                    final int from_bitField0_ = this.bitField0_;
                    int to_bitField0_ = 0;
                    if ((from_bitField0_ & 0x1) != 0x0) {
                        result.start_ = this.start_;
                        to_bitField0_ |= 0x1;
                    }
                    if ((from_bitField0_ & 0x2) != 0x0) {
                        result.end_ = this.end_;
                        to_bitField0_ |= 0x2;
                    }
                    if ((from_bitField0_ & 0x4) != 0x0) {
                        result.options_ = ((this.optionsBuilder_ == null) ? this.options_ : this.optionsBuilder_.build());
                        to_bitField0_ |= 0x4;
                    }
                    result.bitField0_ |= to_bitField0_;
                }
                
                @Override
                public Builder mergeFrom(final Message other) {
                    if (other instanceof ExtensionRange) {
                        return this.mergeFrom((ExtensionRange)other);
                    }
                    super.mergeFrom(other);
                    return this;
                }
                
                public Builder mergeFrom(final ExtensionRange other) {
                    if (other == ExtensionRange.getDefaultInstance()) {
                        return this;
                    }
                    if (other.hasStart()) {
                        this.setStart(other.getStart());
                    }
                    if (other.hasEnd()) {
                        this.setEnd(other.getEnd());
                    }
                    if (other.hasOptions()) {
                        this.mergeOptions(other.getOptions());
                    }
                    this.mergeUnknownFields(other.getUnknownFields());
                    this.onChanged();
                    return this;
                }
                
                @Override
                public final boolean isInitialized() {
                    return !this.hasOptions() || this.getOptions().isInitialized();
                }
                
                @Override
                public Builder mergeFrom(final CodedInputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
                    if (extensionRegistry == null) {
                        throw new NullPointerException();
                    }
                    try {
                        boolean done = false;
                        while (!done) {
                            final int tag = input.readTag();
                            switch (tag) {
                                case 0: {
                                    done = true;
                                    continue;
                                }
                                case 8: {
                                    this.start_ = input.readInt32();
                                    this.bitField0_ |= 0x1;
                                    continue;
                                }
                                case 16: {
                                    this.end_ = input.readInt32();
                                    this.bitField0_ |= 0x2;
                                    continue;
                                }
                                case 26: {
                                    input.readMessage(this.internalGetOptionsFieldBuilder().getBuilder(), extensionRegistry);
                                    this.bitField0_ |= 0x4;
                                    continue;
                                }
                                default: {
                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                                        done = true;
                                        continue;
                                    }
                                    continue;
                                }
                            }
                        }
                    }
                    catch (final InvalidProtocolBufferException e) {
                        throw e.unwrapIOException();
                    }
                    finally {
                        this.onChanged();
                    }
                    return this;
                }
                
                @Override
                public boolean hasStart() {
                    return (this.bitField0_ & 0x1) != 0x0;
                }
                
                @Override
                public int getStart() {
                    return this.start_;
                }
                
                public Builder setStart(final int value) {
                    this.start_ = value;
                    this.bitField0_ |= 0x1;
                    this.onChanged();
                    return this;
                }
                
                public Builder clearStart() {
                    this.bitField0_ &= 0xFFFFFFFE;
                    this.start_ = 0;
                    this.onChanged();
                    return this;
                }
                
                @Override
                public boolean hasEnd() {
                    return (this.bitField0_ & 0x2) != 0x0;
                }
                
                @Override
                public int getEnd() {
                    return this.end_;
                }
                
                public Builder setEnd(final int value) {
                    this.end_ = value;
                    this.bitField0_ |= 0x2;
                    this.onChanged();
                    return this;
                }
                
                public Builder clearEnd() {
                    this.bitField0_ &= 0xFFFFFFFD;
                    this.end_ = 0;
                    this.onChanged();
                    return this;
                }
                
                @Override
                public boolean hasOptions() {
                    return (this.bitField0_ & 0x4) != 0x0;
                }
                
                @Override
                public ExtensionRangeOptions getOptions() {
                    if (this.optionsBuilder_ == null) {
                        return (this.options_ == null) ? ExtensionRangeOptions.getDefaultInstance() : this.options_;
                    }
                    return this.optionsBuilder_.getMessage();
                }
                
                public Builder setOptions(final ExtensionRangeOptions value) {
                    if (this.optionsBuilder_ == null) {
                        if (value == null) {
                            throw new NullPointerException();
                        }
                        this.options_ = value;
                    }
                    else {
                        this.optionsBuilder_.setMessage(value);
                    }
                    this.bitField0_ |= 0x4;
                    this.onChanged();
                    return this;
                }
                
                public Builder setOptions(final ExtensionRangeOptions.Builder builderForValue) {
                    if (this.optionsBuilder_ == null) {
                        this.options_ = builderForValue.build();
                    }
                    else {
                        this.optionsBuilder_.setMessage(builderForValue.build());
                    }
                    this.bitField0_ |= 0x4;
                    this.onChanged();
                    return this;
                }
                
                public Builder mergeOptions(final ExtensionRangeOptions value) {
                    if (this.optionsBuilder_ == null) {
                        if ((this.bitField0_ & 0x4) != 0x0 && this.options_ != null && this.options_ != ExtensionRangeOptions.getDefaultInstance()) {
                            this.getOptionsBuilder().mergeFrom(value);
                        }
                        else {
                            this.options_ = value;
                        }
                    }
                    else {
                        this.optionsBuilder_.mergeFrom(value);
                    }
                    if (this.options_ != null) {
                        this.bitField0_ |= 0x4;
                        this.onChanged();
                    }
                    return this;
                }
                
                public Builder clearOptions() {
                    this.bitField0_ &= 0xFFFFFFFB;
                    this.options_ = null;
                    if (this.optionsBuilder_ != null) {
                        this.optionsBuilder_.dispose();
                        this.optionsBuilder_ = null;
                    }
                    this.onChanged();
                    return this;
                }
                
                public ExtensionRangeOptions.Builder getOptionsBuilder() {
                    this.bitField0_ |= 0x4;
                    this.onChanged();
                    return this.internalGetOptionsFieldBuilder().getBuilder();
                }
                
                @Override
                public ExtensionRangeOptionsOrBuilder getOptionsOrBuilder() {
                    if (this.optionsBuilder_ != null) {
                        return this.optionsBuilder_.getMessageOrBuilder();
                    }
                    return (this.options_ == null) ? ExtensionRangeOptions.getDefaultInstance() : this.options_;
                }
                
                private SingleFieldBuilder<ExtensionRangeOptions, ExtensionRangeOptions.Builder, ExtensionRangeOptionsOrBuilder> internalGetOptionsFieldBuilder() {
                    if (this.optionsBuilder_ == null) {
                        this.optionsBuilder_ = new SingleFieldBuilder<ExtensionRangeOptions, ExtensionRangeOptions.Builder, ExtensionRangeOptionsOrBuilder>(this.getOptions(), this.getParentForChildren(), this.isClean());
                        this.options_ = null;
                    }
                    return this.optionsBuilder_;
                }
            }
        }
        
        public static final class ReservedRange extends GeneratedMessage implements ReservedRangeOrBuilder
        {
            private static final long serialVersionUID = 0L;
            private int bitField0_;
            public static final int START_FIELD_NUMBER = 1;
            private int start_;
            public static final int END_FIELD_NUMBER = 2;
            private int end_;
            private byte memoizedIsInitialized;
            private static final ReservedRange DEFAULT_INSTANCE;
            private static final Parser<ReservedRange> PARSER;
            
            private ReservedRange(final GeneratedMessage.Builder<?> builder) {
                super(builder);
                this.start_ = 0;
                this.end_ = 0;
                this.memoizedIsInitialized = -1;
            }
            
            private ReservedRange() {
                this.start_ = 0;
                this.end_ = 0;
                this.memoizedIsInitialized = -1;
            }
            
            public static final Descriptors.Descriptor getDescriptor() {
                return DescriptorProtos.internal_static_google_protobuf_DescriptorProto_ReservedRange_descriptor;
            }
            
            @Override
            protected FieldAccessorTable internalGetFieldAccessorTable() {
                return DescriptorProtos.internal_static_google_protobuf_DescriptorProto_ReservedRange_fieldAccessorTable.ensureFieldAccessorsInitialized(ReservedRange.class, Builder.class);
            }
            
            @Override
            public boolean hasStart() {
                return (this.bitField0_ & 0x1) != 0x0;
            }
            
            @Override
            public int getStart() {
                return this.start_;
            }
            
            @Override
            public boolean hasEnd() {
                return (this.bitField0_ & 0x2) != 0x0;
            }
            
            @Override
            public int getEnd() {
                return this.end_;
            }
            
            @Override
            public final boolean isInitialized() {
                final byte isInitialized = this.memoizedIsInitialized;
                if (isInitialized == 1) {
                    return true;
                }
                if (isInitialized == 0) {
                    return false;
                }
                this.memoizedIsInitialized = 1;
                return true;
            }
            
            @Override
            public void writeTo(final CodedOutputStream output) throws IOException {
                if ((this.bitField0_ & 0x1) != 0x0) {
                    output.writeInt32(1, this.start_);
                }
                if ((this.bitField0_ & 0x2) != 0x0) {
                    output.writeInt32(2, this.end_);
                }
                this.getUnknownFields().writeTo(output);
            }
            
            @Override
            public int getSerializedSize() {
                int size = this.memoizedSize;
                if (size != -1) {
                    return size;
                }
                size = 0;
                if ((this.bitField0_ & 0x1) != 0x0) {
                    size += CodedOutputStream.computeInt32Size(1, this.start_);
                }
                if ((this.bitField0_ & 0x2) != 0x0) {
                    size += CodedOutputStream.computeInt32Size(2, this.end_);
                }
                size += this.getUnknownFields().getSerializedSize();
                return this.memoizedSize = size;
            }
            
            @Override
            public boolean equals(final Object obj) {
                if (obj == this) {
                    return true;
                }
                if (!(obj instanceof ReservedRange)) {
                    return super.equals(obj);
                }
                final ReservedRange other = (ReservedRange)obj;
                return this.hasStart() == other.hasStart() && (!this.hasStart() || this.getStart() == other.getStart()) && this.hasEnd() == other.hasEnd() && (!this.hasEnd() || this.getEnd() == other.getEnd()) && this.getUnknownFields().equals(other.getUnknownFields());
            }
            
            @Override
            public int hashCode() {
                if (this.memoizedHashCode != 0) {
                    return this.memoizedHashCode;
                }
                int hash = 41;
                hash = 19 * hash + getDescriptor().hashCode();
                if (this.hasStart()) {
                    hash = 37 * hash + 1;
                    hash = 53 * hash + this.getStart();
                }
                if (this.hasEnd()) {
                    hash = 37 * hash + 2;
                    hash = 53 * hash + this.getEnd();
                }
                hash = 29 * hash + this.getUnknownFields().hashCode();
                return this.memoizedHashCode = hash;
            }
            
            public static ReservedRange parseFrom(final ByteBuffer data) throws InvalidProtocolBufferException {
                return ReservedRange.PARSER.parseFrom(data);
            }
            
            public static ReservedRange parseFrom(final ByteBuffer data, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
                return ReservedRange.PARSER.parseFrom(data, extensionRegistry);
            }
            
            public static ReservedRange parseFrom(final ByteString data) throws InvalidProtocolBufferException {
                return ReservedRange.PARSER.parseFrom(data);
            }
            
            public static ReservedRange parseFrom(final ByteString data, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
                return ReservedRange.PARSER.parseFrom(data, extensionRegistry);
            }
            
            public static ReservedRange parseFrom(final byte[] data) throws InvalidProtocolBufferException {
                return ReservedRange.PARSER.parseFrom(data);
            }
            
            public static ReservedRange parseFrom(final byte[] data, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
                return ReservedRange.PARSER.parseFrom(data, extensionRegistry);
            }
            
            public static ReservedRange parseFrom(final InputStream input) throws IOException {
                return GeneratedMessage.parseWithIOException(ReservedRange.PARSER, input);
            }
            
            public static ReservedRange parseFrom(final InputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
                return GeneratedMessage.parseWithIOException(ReservedRange.PARSER, input, extensionRegistry);
            }
            
            public static ReservedRange parseDelimitedFrom(final InputStream input) throws IOException {
                return GeneratedMessage.parseDelimitedWithIOException(ReservedRange.PARSER, input);
            }
            
            public static ReservedRange parseDelimitedFrom(final InputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
                return GeneratedMessage.parseDelimitedWithIOException(ReservedRange.PARSER, input, extensionRegistry);
            }
            
            public static ReservedRange parseFrom(final CodedInputStream input) throws IOException {
                return GeneratedMessage.parseWithIOException(ReservedRange.PARSER, input);
            }
            
            public static ReservedRange parseFrom(final CodedInputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
                return GeneratedMessage.parseWithIOException(ReservedRange.PARSER, input, extensionRegistry);
            }
            
            @Override
            public Builder newBuilderForType() {
                return newBuilder();
            }
            
            public static Builder newBuilder() {
                return ReservedRange.DEFAULT_INSTANCE.toBuilder();
            }
            
            public static Builder newBuilder(final ReservedRange prototype) {
                return ReservedRange.DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
            }
            
            @Override
            public Builder toBuilder() {
                return (this == ReservedRange.DEFAULT_INSTANCE) ? new Builder() : new Builder().mergeFrom(this);
            }
            
            @Override
            protected Builder newBuilderForType(final BuilderParent parent) {
                final Builder builder = new Builder(parent);
                return builder;
            }
            
            public static ReservedRange getDefaultInstance() {
                return ReservedRange.DEFAULT_INSTANCE;
            }
            
            public static Parser<ReservedRange> parser() {
                return ReservedRange.PARSER;
            }
            
            @Override
            public Parser<ReservedRange> getParserForType() {
                return ReservedRange.PARSER;
            }
            
            @Override
            public ReservedRange getDefaultInstanceForType() {
                return ReservedRange.DEFAULT_INSTANCE;
            }
            
            static {
                RuntimeVersion.validateProtobufGencodeVersion(RuntimeVersion.RuntimeDomain.PUBLIC, 4, 33, 0, "", "ReservedRange");
                DEFAULT_INSTANCE = new ReservedRange();
                PARSER = new AbstractParser<ReservedRange>() {
                    @Override
                    public ReservedRange parsePartialFrom(final CodedInputStream input, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
                        final Builder builder = ReservedRange.newBuilder();
                        try {
                            builder.mergeFrom(input, extensionRegistry);
                        }
                        catch (final InvalidProtocolBufferException e) {
                            throw e.setUnfinishedMessage(builder.buildPartial());
                        }
                        catch (final UninitializedMessageException e2) {
                            throw e2.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
                        }
                        catch (final IOException e3) {
                            throw new InvalidProtocolBufferException(e3).setUnfinishedMessage(builder.buildPartial());
                        }
                        return builder.buildPartial();
                    }
                };
            }
            
            public static final class Builder extends GeneratedMessage.Builder<Builder> implements ReservedRangeOrBuilder
            {
                private int bitField0_;
                private int start_;
                private int end_;
                
                public static final Descriptors.Descriptor getDescriptor() {
                    return DescriptorProtos.internal_static_google_protobuf_DescriptorProto_ReservedRange_descriptor;
                }
                
                @Override
                protected FieldAccessorTable internalGetFieldAccessorTable() {
                    return DescriptorProtos.internal_static_google_protobuf_DescriptorProto_ReservedRange_fieldAccessorTable.ensureFieldAccessorsInitialized(ReservedRange.class, Builder.class);
                }
                
                private Builder() {
                }
                
                private Builder(final BuilderParent parent) {
                    super(parent);
                }
                
                @Override
                public Builder clear() {
                    super.clear();
                    this.bitField0_ = 0;
                    this.start_ = 0;
                    this.end_ = 0;
                    return this;
                }
                
                @Override
                public Descriptors.Descriptor getDescriptorForType() {
                    return DescriptorProtos.internal_static_google_protobuf_DescriptorProto_ReservedRange_descriptor;
                }
                
                @Override
                public ReservedRange getDefaultInstanceForType() {
                    return ReservedRange.getDefaultInstance();
                }
                
                @Override
                public ReservedRange build() {
                    final ReservedRange result = this.buildPartial();
                    if (!result.isInitialized()) {
                        throw AbstractMessage.Builder.newUninitializedMessageException(result);
                    }
                    return result;
                }
                
                @Override
                public ReservedRange buildPartial() {
                    final ReservedRange result = new ReservedRange((GeneratedMessage.Builder)this);
                    if (this.bitField0_ != 0) {
                        this.buildPartial0(result);
                    }
                    this.onBuilt();
                    return result;
                }
                
                private void buildPartial0(final ReservedRange result) {
                    final int from_bitField0_ = this.bitField0_;
                    int to_bitField0_ = 0;
                    if ((from_bitField0_ & 0x1) != 0x0) {
                        result.start_ = this.start_;
                        to_bitField0_ |= 0x1;
                    }
                    if ((from_bitField0_ & 0x2) != 0x0) {
                        result.end_ = this.end_;
                        to_bitField0_ |= 0x2;
                    }
                    result.bitField0_ |= to_bitField0_;
                }
                
                @Override
                public Builder mergeFrom(final Message other) {
                    if (other instanceof ReservedRange) {
                        return this.mergeFrom((ReservedRange)other);
                    }
                    super.mergeFrom(other);
                    return this;
                }
                
                public Builder mergeFrom(final ReservedRange other) {
                    if (other == ReservedRange.getDefaultInstance()) {
                        return this;
                    }
                    if (other.hasStart()) {
                        this.setStart(other.getStart());
                    }
                    if (other.hasEnd()) {
                        this.setEnd(other.getEnd());
                    }
                    this.mergeUnknownFields(other.getUnknownFields());
                    this.onChanged();
                    return this;
                }
                
                @Override
                public final boolean isInitialized() {
                    return true;
                }
                
                @Override
                public Builder mergeFrom(final CodedInputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
                    if (extensionRegistry == null) {
                        throw new NullPointerException();
                    }
                    try {
                        boolean done = false;
                        while (!done) {
                            final int tag = input.readTag();
                            switch (tag) {
                                case 0: {
                                    done = true;
                                    continue;
                                }
                                case 8: {
                                    this.start_ = input.readInt32();
                                    this.bitField0_ |= 0x1;
                                    continue;
                                }
                                case 16: {
                                    this.end_ = input.readInt32();
                                    this.bitField0_ |= 0x2;
                                    continue;
                                }
                                default: {
                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                                        done = true;
                                        continue;
                                    }
                                    continue;
                                }
                            }
                        }
                    }
                    catch (final InvalidProtocolBufferException e) {
                        throw e.unwrapIOException();
                    }
                    finally {
                        this.onChanged();
                    }
                    return this;
                }
                
                @Override
                public boolean hasStart() {
                    return (this.bitField0_ & 0x1) != 0x0;
                }
                
                @Override
                public int getStart() {
                    return this.start_;
                }
                
                public Builder setStart(final int value) {
                    this.start_ = value;
                    this.bitField0_ |= 0x1;
                    this.onChanged();
                    return this;
                }
                
                public Builder clearStart() {
                    this.bitField0_ &= 0xFFFFFFFE;
                    this.start_ = 0;
                    this.onChanged();
                    return this;
                }
                
                @Override
                public boolean hasEnd() {
                    return (this.bitField0_ & 0x2) != 0x0;
                }
                
                @Override
                public int getEnd() {
                    return this.end_;
                }
                
                public Builder setEnd(final int value) {
                    this.end_ = value;
                    this.bitField0_ |= 0x2;
                    this.onChanged();
                    return this;
                }
                
                public Builder clearEnd() {
                    this.bitField0_ &= 0xFFFFFFFD;
                    this.end_ = 0;
                    this.onChanged();
                    return this;
                }
            }
        }
        
        public static final class Builder extends GeneratedMessage.Builder<Builder> implements DescriptorProtoOrBuilder
        {
            private int bitField0_;
            private Object name_;
            private List<FieldDescriptorProto> field_;
            private RepeatedFieldBuilder<FieldDescriptorProto, FieldDescriptorProto.Builder, FieldDescriptorProtoOrBuilder> fieldBuilder_;
            private List<FieldDescriptorProto> extension_;
            private RepeatedFieldBuilder<FieldDescriptorProto, FieldDescriptorProto.Builder, FieldDescriptorProtoOrBuilder> extensionBuilder_;
            private List<DescriptorProto> nestedType_;
            private RepeatedFieldBuilder<DescriptorProto, Builder, DescriptorProtoOrBuilder> nestedTypeBuilder_;
            private List<EnumDescriptorProto> enumType_;
            private RepeatedFieldBuilder<EnumDescriptorProto, EnumDescriptorProto.Builder, EnumDescriptorProtoOrBuilder> enumTypeBuilder_;
            private List<ExtensionRange> extensionRange_;
            private RepeatedFieldBuilder<ExtensionRange, ExtensionRange.Builder, ExtensionRangeOrBuilder> extensionRangeBuilder_;
            private List<OneofDescriptorProto> oneofDecl_;
            private RepeatedFieldBuilder<OneofDescriptorProto, OneofDescriptorProto.Builder, OneofDescriptorProtoOrBuilder> oneofDeclBuilder_;
            private MessageOptions options_;
            private SingleFieldBuilder<MessageOptions, MessageOptions.Builder, MessageOptionsOrBuilder> optionsBuilder_;
            private List<ReservedRange> reservedRange_;
            private RepeatedFieldBuilder<ReservedRange, ReservedRange.Builder, ReservedRangeOrBuilder> reservedRangeBuilder_;
            private LazyStringArrayList reservedName_;
            private int visibility_;
            
            public static final Descriptors.Descriptor getDescriptor() {
                return DescriptorProtos.internal_static_google_protobuf_DescriptorProto_descriptor;
            }
            
            @Override
            protected FieldAccessorTable internalGetFieldAccessorTable() {
                return DescriptorProtos.internal_static_google_protobuf_DescriptorProto_fieldAccessorTable.ensureFieldAccessorsInitialized(DescriptorProto.class, Builder.class);
            }
            
            private Builder() {
                this.name_ = "";
                this.field_ = Collections.emptyList();
                this.extension_ = Collections.emptyList();
                this.nestedType_ = Collections.emptyList();
                this.enumType_ = Collections.emptyList();
                this.extensionRange_ = Collections.emptyList();
                this.oneofDecl_ = Collections.emptyList();
                this.reservedRange_ = Collections.emptyList();
                this.reservedName_ = LazyStringArrayList.emptyList();
                this.visibility_ = 0;
                this.maybeForceBuilderInitialization();
            }
            
            private Builder(final BuilderParent parent) {
                super(parent);
                this.name_ = "";
                this.field_ = Collections.emptyList();
                this.extension_ = Collections.emptyList();
                this.nestedType_ = Collections.emptyList();
                this.enumType_ = Collections.emptyList();
                this.extensionRange_ = Collections.emptyList();
                this.oneofDecl_ = Collections.emptyList();
                this.reservedRange_ = Collections.emptyList();
                this.reservedName_ = LazyStringArrayList.emptyList();
                this.visibility_ = 0;
                this.maybeForceBuilderInitialization();
            }
            
            private void maybeForceBuilderInitialization() {
                if (GeneratedMessage.alwaysUseFieldBuilders) {
                    this.internalGetFieldFieldBuilder();
                    this.internalGetExtensionFieldBuilder();
                    this.internalGetNestedTypeFieldBuilder();
                    this.internalGetEnumTypeFieldBuilder();
                    this.internalGetExtensionRangeFieldBuilder();
                    this.internalGetOneofDeclFieldBuilder();
                    this.internalGetOptionsFieldBuilder();
                    this.internalGetReservedRangeFieldBuilder();
                }
            }
            
            @Override
            public Builder clear() {
                super.clear();
                this.bitField0_ = 0;
                this.name_ = "";
                if (this.fieldBuilder_ == null) {
                    this.field_ = Collections.emptyList();
                }
                else {
                    this.field_ = null;
                    this.fieldBuilder_.clear();
                }
                this.bitField0_ &= 0xFFFFFFFD;
                if (this.extensionBuilder_ == null) {
                    this.extension_ = Collections.emptyList();
                }
                else {
                    this.extension_ = null;
                    this.extensionBuilder_.clear();
                }
                this.bitField0_ &= 0xFFFFFFFB;
                if (this.nestedTypeBuilder_ == null) {
                    this.nestedType_ = Collections.emptyList();
                }
                else {
                    this.nestedType_ = null;
                    this.nestedTypeBuilder_.clear();
                }
                this.bitField0_ &= 0xFFFFFFF7;
                if (this.enumTypeBuilder_ == null) {
                    this.enumType_ = Collections.emptyList();
                }
                else {
                    this.enumType_ = null;
                    this.enumTypeBuilder_.clear();
                }
                this.bitField0_ &= 0xFFFFFFEF;
                if (this.extensionRangeBuilder_ == null) {
                    this.extensionRange_ = Collections.emptyList();
                }
                else {
                    this.extensionRange_ = null;
                    this.extensionRangeBuilder_.clear();
                }
                this.bitField0_ &= 0xFFFFFFDF;
                if (this.oneofDeclBuilder_ == null) {
                    this.oneofDecl_ = Collections.emptyList();
                }
                else {
                    this.oneofDecl_ = null;
                    this.oneofDeclBuilder_.clear();
                }
                this.bitField0_ &= 0xFFFFFFBF;
                this.options_ = null;
                if (this.optionsBuilder_ != null) {
                    this.optionsBuilder_.dispose();
                    this.optionsBuilder_ = null;
                }
                if (this.reservedRangeBuilder_ == null) {
                    this.reservedRange_ = Collections.emptyList();
                }
                else {
                    this.reservedRange_ = null;
                    this.reservedRangeBuilder_.clear();
                }
                this.bitField0_ &= 0xFFFFFEFF;
                this.reservedName_ = LazyStringArrayList.emptyList();
                this.visibility_ = 0;
                return this;
            }
            
            @Override
            public Descriptors.Descriptor getDescriptorForType() {
                return DescriptorProtos.internal_static_google_protobuf_DescriptorProto_descriptor;
            }
            
            @Override
            public DescriptorProto getDefaultInstanceForType() {
                return DescriptorProto.getDefaultInstance();
            }
            
            @Override
            public DescriptorProto build() {
                final DescriptorProto result = this.buildPartial();
                if (!result.isInitialized()) {
                    throw AbstractMessage.Builder.newUninitializedMessageException(result);
                }
                return result;
            }
            
            @Override
            public DescriptorProto buildPartial() {
                final DescriptorProto result = new DescriptorProto((GeneratedMessage.Builder)this);
                this.buildPartialRepeatedFields(result);
                if (this.bitField0_ != 0) {
                    this.buildPartial0(result);
                }
                this.onBuilt();
                return result;
            }
            
            private void buildPartialRepeatedFields(final DescriptorProto result) {
                if (this.fieldBuilder_ == null) {
                    if ((this.bitField0_ & 0x2) != 0x0) {
                        this.field_ = Collections.unmodifiableList((List<? extends FieldDescriptorProto>)this.field_);
                        this.bitField0_ &= 0xFFFFFFFD;
                    }
                    result.field_ = this.field_;
                }
                else {
                    result.field_ = this.fieldBuilder_.build();
                }
                if (this.extensionBuilder_ == null) {
                    if ((this.bitField0_ & 0x4) != 0x0) {
                        this.extension_ = Collections.unmodifiableList((List<? extends FieldDescriptorProto>)this.extension_);
                        this.bitField0_ &= 0xFFFFFFFB;
                    }
                    result.extension_ = this.extension_;
                }
                else {
                    result.extension_ = this.extensionBuilder_.build();
                }
                if (this.nestedTypeBuilder_ == null) {
                    if ((this.bitField0_ & 0x8) != 0x0) {
                        this.nestedType_ = Collections.unmodifiableList((List<? extends DescriptorProto>)this.nestedType_);
                        this.bitField0_ &= 0xFFFFFFF7;
                    }
                    result.nestedType_ = this.nestedType_;
                }
                else {
                    result.nestedType_ = this.nestedTypeBuilder_.build();
                }
                if (this.enumTypeBuilder_ == null) {
                    if ((this.bitField0_ & 0x10) != 0x0) {
                        this.enumType_ = Collections.unmodifiableList((List<? extends EnumDescriptorProto>)this.enumType_);
                        this.bitField0_ &= 0xFFFFFFEF;
                    }
                    result.enumType_ = this.enumType_;
                }
                else {
                    result.enumType_ = this.enumTypeBuilder_.build();
                }
                if (this.extensionRangeBuilder_ == null) {
                    if ((this.bitField0_ & 0x20) != 0x0) {
                        this.extensionRange_ = Collections.unmodifiableList((List<? extends ExtensionRange>)this.extensionRange_);
                        this.bitField0_ &= 0xFFFFFFDF;
                    }
                    result.extensionRange_ = this.extensionRange_;
                }
                else {
                    result.extensionRange_ = this.extensionRangeBuilder_.build();
                }
                if (this.oneofDeclBuilder_ == null) {
                    if ((this.bitField0_ & 0x40) != 0x0) {
                        this.oneofDecl_ = Collections.unmodifiableList((List<? extends OneofDescriptorProto>)this.oneofDecl_);
                        this.bitField0_ &= 0xFFFFFFBF;
                    }
                    result.oneofDecl_ = this.oneofDecl_;
                }
                else {
                    result.oneofDecl_ = this.oneofDeclBuilder_.build();
                }
                if (this.reservedRangeBuilder_ == null) {
                    if ((this.bitField0_ & 0x100) != 0x0) {
                        this.reservedRange_ = Collections.unmodifiableList((List<? extends ReservedRange>)this.reservedRange_);
                        this.bitField0_ &= 0xFFFFFEFF;
                    }
                    result.reservedRange_ = this.reservedRange_;
                }
                else {
                    result.reservedRange_ = this.reservedRangeBuilder_.build();
                }
            }
            
            private void buildPartial0(final DescriptorProto result) {
                final int from_bitField0_ = this.bitField0_;
                int to_bitField0_ = 0;
                if ((from_bitField0_ & 0x1) != 0x0) {
                    result.name_ = this.name_;
                    to_bitField0_ |= 0x1;
                }
                if ((from_bitField0_ & 0x80) != 0x0) {
                    result.options_ = ((this.optionsBuilder_ == null) ? this.options_ : this.optionsBuilder_.build());
                    to_bitField0_ |= 0x2;
                }
                if ((from_bitField0_ & 0x200) != 0x0) {
                    this.reservedName_.makeImmutable();
                    result.reservedName_ = this.reservedName_;
                }
                if ((from_bitField0_ & 0x400) != 0x0) {
                    result.visibility_ = this.visibility_;
                    to_bitField0_ |= 0x4;
                }
                result.bitField0_ |= to_bitField0_;
            }
            
            @Override
            public Builder mergeFrom(final Message other) {
                if (other instanceof DescriptorProto) {
                    return this.mergeFrom((DescriptorProto)other);
                }
                super.mergeFrom(other);
                return this;
            }
            
            public Builder mergeFrom(final DescriptorProto other) {
                if (other == DescriptorProto.getDefaultInstance()) {
                    return this;
                }
                if (other.hasName()) {
                    this.name_ = other.name_;
                    this.bitField0_ |= 0x1;
                    this.onChanged();
                }
                if (this.fieldBuilder_ == null) {
                    if (!other.field_.isEmpty()) {
                        if (this.field_.isEmpty()) {
                            this.field_ = other.field_;
                            this.bitField0_ &= 0xFFFFFFFD;
                        }
                        else {
                            this.ensureFieldIsMutable();
                            this.field_.addAll(other.field_);
                        }
                        this.onChanged();
                    }
                }
                else if (!other.field_.isEmpty()) {
                    if (this.fieldBuilder_.isEmpty()) {
                        this.fieldBuilder_.dispose();
                        this.fieldBuilder_ = null;
                        this.field_ = other.field_;
                        this.bitField0_ &= 0xFFFFFFFD;
                        this.fieldBuilder_ = (GeneratedMessage.alwaysUseFieldBuilders ? this.internalGetFieldFieldBuilder() : null);
                    }
                    else {
                        this.fieldBuilder_.addAllMessages(other.field_);
                    }
                }
                if (this.extensionBuilder_ == null) {
                    if (!other.extension_.isEmpty()) {
                        if (this.extension_.isEmpty()) {
                            this.extension_ = other.extension_;
                            this.bitField0_ &= 0xFFFFFFFB;
                        }
                        else {
                            this.ensureExtensionIsMutable();
                            this.extension_.addAll(other.extension_);
                        }
                        this.onChanged();
                    }
                }
                else if (!other.extension_.isEmpty()) {
                    if (this.extensionBuilder_.isEmpty()) {
                        this.extensionBuilder_.dispose();
                        this.extensionBuilder_ = null;
                        this.extension_ = other.extension_;
                        this.bitField0_ &= 0xFFFFFFFB;
                        this.extensionBuilder_ = (GeneratedMessage.alwaysUseFieldBuilders ? this.internalGetExtensionFieldBuilder() : null);
                    }
                    else {
                        this.extensionBuilder_.addAllMessages(other.extension_);
                    }
                }
                if (this.nestedTypeBuilder_ == null) {
                    if (!other.nestedType_.isEmpty()) {
                        if (this.nestedType_.isEmpty()) {
                            this.nestedType_ = other.nestedType_;
                            this.bitField0_ &= 0xFFFFFFF7;
                        }
                        else {
                            this.ensureNestedTypeIsMutable();
                            this.nestedType_.addAll(other.nestedType_);
                        }
                        this.onChanged();
                    }
                }
                else if (!other.nestedType_.isEmpty()) {
                    if (this.nestedTypeBuilder_.isEmpty()) {
                        this.nestedTypeBuilder_.dispose();
                        this.nestedTypeBuilder_ = null;
                        this.nestedType_ = other.nestedType_;
                        this.bitField0_ &= 0xFFFFFFF7;
                        this.nestedTypeBuilder_ = (GeneratedMessage.alwaysUseFieldBuilders ? this.internalGetNestedTypeFieldBuilder() : null);
                    }
                    else {
                        this.nestedTypeBuilder_.addAllMessages(other.nestedType_);
                    }
                }
                if (this.enumTypeBuilder_ == null) {
                    if (!other.enumType_.isEmpty()) {
                        if (this.enumType_.isEmpty()) {
                            this.enumType_ = other.enumType_;
                            this.bitField0_ &= 0xFFFFFFEF;
                        }
                        else {
                            this.ensureEnumTypeIsMutable();
                            this.enumType_.addAll(other.enumType_);
                        }
                        this.onChanged();
                    }
                }
                else if (!other.enumType_.isEmpty()) {
                    if (this.enumTypeBuilder_.isEmpty()) {
                        this.enumTypeBuilder_.dispose();
                        this.enumTypeBuilder_ = null;
                        this.enumType_ = other.enumType_;
                        this.bitField0_ &= 0xFFFFFFEF;
                        this.enumTypeBuilder_ = (GeneratedMessage.alwaysUseFieldBuilders ? this.internalGetEnumTypeFieldBuilder() : null);
                    }
                    else {
                        this.enumTypeBuilder_.addAllMessages(other.enumType_);
                    }
                }
                if (this.extensionRangeBuilder_ == null) {
                    if (!other.extensionRange_.isEmpty()) {
                        if (this.extensionRange_.isEmpty()) {
                            this.extensionRange_ = other.extensionRange_;
                            this.bitField0_ &= 0xFFFFFFDF;
                        }
                        else {
                            this.ensureExtensionRangeIsMutable();
                            this.extensionRange_.addAll(other.extensionRange_);
                        }
                        this.onChanged();
                    }
                }
                else if (!other.extensionRange_.isEmpty()) {
                    if (this.extensionRangeBuilder_.isEmpty()) {
                        this.extensionRangeBuilder_.dispose();
                        this.extensionRangeBuilder_ = null;
                        this.extensionRange_ = other.extensionRange_;
                        this.bitField0_ &= 0xFFFFFFDF;
                        this.extensionRangeBuilder_ = (GeneratedMessage.alwaysUseFieldBuilders ? this.internalGetExtensionRangeFieldBuilder() : null);
                    }
                    else {
                        this.extensionRangeBuilder_.addAllMessages(other.extensionRange_);
                    }
                }
                if (this.oneofDeclBuilder_ == null) {
                    if (!other.oneofDecl_.isEmpty()) {
                        if (this.oneofDecl_.isEmpty()) {
                            this.oneofDecl_ = other.oneofDecl_;
                            this.bitField0_ &= 0xFFFFFFBF;
                        }
                        else {
                            this.ensureOneofDeclIsMutable();
                            this.oneofDecl_.addAll(other.oneofDecl_);
                        }
                        this.onChanged();
                    }
                }
                else if (!other.oneofDecl_.isEmpty()) {
                    if (this.oneofDeclBuilder_.isEmpty()) {
                        this.oneofDeclBuilder_.dispose();
                        this.oneofDeclBuilder_ = null;
                        this.oneofDecl_ = other.oneofDecl_;
                        this.bitField0_ &= 0xFFFFFFBF;
                        this.oneofDeclBuilder_ = (GeneratedMessage.alwaysUseFieldBuilders ? this.internalGetOneofDeclFieldBuilder() : null);
                    }
                    else {
                        this.oneofDeclBuilder_.addAllMessages(other.oneofDecl_);
                    }
                }
                if (other.hasOptions()) {
                    this.mergeOptions(other.getOptions());
                }
                if (this.reservedRangeBuilder_ == null) {
                    if (!other.reservedRange_.isEmpty()) {
                        if (this.reservedRange_.isEmpty()) {
                            this.reservedRange_ = other.reservedRange_;
                            this.bitField0_ &= 0xFFFFFEFF;
                        }
                        else {
                            this.ensureReservedRangeIsMutable();
                            this.reservedRange_.addAll(other.reservedRange_);
                        }
                        this.onChanged();
                    }
                }
                else if (!other.reservedRange_.isEmpty()) {
                    if (this.reservedRangeBuilder_.isEmpty()) {
                        this.reservedRangeBuilder_.dispose();
                        this.reservedRangeBuilder_ = null;
                        this.reservedRange_ = other.reservedRange_;
                        this.bitField0_ &= 0xFFFFFEFF;
                        this.reservedRangeBuilder_ = (GeneratedMessage.alwaysUseFieldBuilders ? this.internalGetReservedRangeFieldBuilder() : null);
                    }
                    else {
                        this.reservedRangeBuilder_.addAllMessages(other.reservedRange_);
                    }
                }
                if (!other.reservedName_.isEmpty()) {
                    if (this.reservedName_.isEmpty()) {
                        this.reservedName_ = other.reservedName_;
                        this.bitField0_ |= 0x200;
                    }
                    else {
                        this.ensureReservedNameIsMutable();
                        this.reservedName_.addAll(other.reservedName_);
                    }
                    this.onChanged();
                }
                if (other.hasVisibility()) {
                    this.setVisibility(other.getVisibility());
                }
                this.mergeUnknownFields(other.getUnknownFields());
                this.onChanged();
                return this;
            }
            
            @Override
            public final boolean isInitialized() {
                for (int i = 0; i < this.getFieldCount(); ++i) {
                    if (!this.getField(i).isInitialized()) {
                        return false;
                    }
                }
                for (int i = 0; i < this.getExtensionCount(); ++i) {
                    if (!this.getExtension(i).isInitialized()) {
                        return false;
                    }
                }
                for (int i = 0; i < this.getNestedTypeCount(); ++i) {
                    if (!this.getNestedType(i).isInitialized()) {
                        return false;
                    }
                }
                for (int i = 0; i < this.getEnumTypeCount(); ++i) {
                    if (!this.getEnumType(i).isInitialized()) {
                        return false;
                    }
                }
                for (int i = 0; i < this.getExtensionRangeCount(); ++i) {
                    if (!this.getExtensionRange(i).isInitialized()) {
                        return false;
                    }
                }
                for (int i = 0; i < this.getOneofDeclCount(); ++i) {
                    if (!this.getOneofDecl(i).isInitialized()) {
                        return false;
                    }
                }
                return !this.hasOptions() || this.getOptions().isInitialized();
            }
            
            @Override
            public Builder mergeFrom(final CodedInputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
                if (extensionRegistry == null) {
                    throw new NullPointerException();
                }
                try {
                    boolean done = false;
                    while (!done) {
                        final int tag = input.readTag();
                        switch (tag) {
                            case 0: {
                                done = true;
                                continue;
                            }
                            case 10: {
                                this.name_ = input.readBytes();
                                this.bitField0_ |= 0x1;
                                continue;
                            }
                            case 18: {
                                final FieldDescriptorProto m = input.readMessage(FieldDescriptorProto.parser(), extensionRegistry);
                                if (this.fieldBuilder_ == null) {
                                    this.ensureFieldIsMutable();
                                    this.field_.add(m);
                                    continue;
                                }
                                this.fieldBuilder_.addMessage(m);
                                continue;
                            }
                            case 26: {
                                final DescriptorProto i = input.readMessage(DescriptorProto.parser(), extensionRegistry);
                                if (this.nestedTypeBuilder_ == null) {
                                    this.ensureNestedTypeIsMutable();
                                    this.nestedType_.add(i);
                                    continue;
                                }
                                this.nestedTypeBuilder_.addMessage(i);
                                continue;
                            }
                            case 34: {
                                final EnumDescriptorProto j = input.readMessage(EnumDescriptorProto.parser(), extensionRegistry);
                                if (this.enumTypeBuilder_ == null) {
                                    this.ensureEnumTypeIsMutable();
                                    this.enumType_.add(j);
                                    continue;
                                }
                                this.enumTypeBuilder_.addMessage(j);
                                continue;
                            }
                            case 42: {
                                final ExtensionRange k = input.readMessage(ExtensionRange.parser(), extensionRegistry);
                                if (this.extensionRangeBuilder_ == null) {
                                    this.ensureExtensionRangeIsMutable();
                                    this.extensionRange_.add(k);
                                    continue;
                                }
                                this.extensionRangeBuilder_.addMessage(k);
                                continue;
                            }
                            case 50: {
                                final FieldDescriptorProto m = input.readMessage(FieldDescriptorProto.parser(), extensionRegistry);
                                if (this.extensionBuilder_ == null) {
                                    this.ensureExtensionIsMutable();
                                    this.extension_.add(m);
                                    continue;
                                }
                                this.extensionBuilder_.addMessage(m);
                                continue;
                            }
                            case 58: {
                                input.readMessage(this.internalGetOptionsFieldBuilder().getBuilder(), extensionRegistry);
                                this.bitField0_ |= 0x80;
                                continue;
                            }
                            case 66: {
                                final OneofDescriptorProto l = input.readMessage(OneofDescriptorProto.parser(), extensionRegistry);
                                if (this.oneofDeclBuilder_ == null) {
                                    this.ensureOneofDeclIsMutable();
                                    this.oneofDecl_.add(l);
                                    continue;
                                }
                                this.oneofDeclBuilder_.addMessage(l);
                                continue;
                            }
                            case 74: {
                                final ReservedRange m2 = input.readMessage(ReservedRange.parser(), extensionRegistry);
                                if (this.reservedRangeBuilder_ == null) {
                                    this.ensureReservedRangeIsMutable();
                                    this.reservedRange_.add(m2);
                                    continue;
                                }
                                this.reservedRangeBuilder_.addMessage(m2);
                                continue;
                            }
                            case 82: {
                                final ByteString bs = input.readBytes();
                                this.ensureReservedNameIsMutable();
                                this.reservedName_.add(bs);
                                continue;
                            }
                            case 88: {
                                final int tmpRaw = input.readEnum();
                                final SymbolVisibility tmpValue = SymbolVisibility.forNumber(tmpRaw);
                                if (tmpValue == null) {
                                    this.mergeUnknownVarintField(11, tmpRaw);
                                    continue;
                                }
                                this.visibility_ = tmpRaw;
                                this.bitField0_ |= 0x400;
                                continue;
                            }
                            default: {
                                if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                                    done = true;
                                    continue;
                                }
                                continue;
                            }
                        }
                    }
                }
                catch (final InvalidProtocolBufferException e) {
                    throw e.unwrapIOException();
                }
                finally {
                    this.onChanged();
                }
                return this;
            }
            
            @Override
            public boolean hasName() {
                return (this.bitField0_ & 0x1) != 0x0;
            }
            
            @Override
            public String getName() {
                final Object ref = this.name_;
                if (!(ref instanceof String)) {
                    final ByteString bs = (ByteString)ref;
                    final String s = bs.toStringUtf8();
                    if (bs.isValidUtf8()) {
                        this.name_ = s;
                    }
                    return s;
                }
                return (String)ref;
            }
            
            @Override
            public ByteString getNameBytes() {
                final Object ref = this.name_;
                if (ref instanceof String) {
                    final ByteString b = ByteString.copyFromUtf8((String)ref);
                    return (ByteString)(this.name_ = b);
                }
                return (ByteString)ref;
            }
            
            public Builder setName(final String value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                this.name_ = value;
                this.bitField0_ |= 0x1;
                this.onChanged();
                return this;
            }
            
            public Builder clearName() {
                this.name_ = DescriptorProto.getDefaultInstance().getName();
                this.bitField0_ &= 0xFFFFFFFE;
                this.onChanged();
                return this;
            }
            
            public Builder setNameBytes(final ByteString value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                this.name_ = value;
                this.bitField0_ |= 0x1;
                this.onChanged();
                return this;
            }
            
            private void ensureFieldIsMutable() {
                if ((this.bitField0_ & 0x2) == 0x0) {
                    this.field_ = new ArrayList<FieldDescriptorProto>(this.field_);
                    this.bitField0_ |= 0x2;
                }
            }
            
            @Override
            public List<FieldDescriptorProto> getFieldList() {
                if (this.fieldBuilder_ == null) {
                    return Collections.unmodifiableList((List<? extends FieldDescriptorProto>)this.field_);
                }
                return this.fieldBuilder_.getMessageList();
            }
            
            @Override
            public int getFieldCount() {
                if (this.fieldBuilder_ == null) {
                    return this.field_.size();
                }
                return this.fieldBuilder_.getCount();
            }
            
            @Override
            public FieldDescriptorProto getField(final int index) {
                if (this.fieldBuilder_ == null) {
                    return this.field_.get(index);
                }
                return this.fieldBuilder_.getMessage(index);
            }
            
            public Builder setField(final int index, final FieldDescriptorProto value) {
                if (this.fieldBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.ensureFieldIsMutable();
                    this.field_.set(index, value);
                    this.onChanged();
                }
                else {
                    this.fieldBuilder_.setMessage(index, value);
                }
                return this;
            }
            
            public Builder setField(final int index, final FieldDescriptorProto.Builder builderForValue) {
                if (this.fieldBuilder_ == null) {
                    this.ensureFieldIsMutable();
                    this.field_.set(index, builderForValue.build());
                    this.onChanged();
                }
                else {
                    this.fieldBuilder_.setMessage(index, builderForValue.build());
                }
                return this;
            }
            
            public Builder addField(final FieldDescriptorProto value) {
                if (this.fieldBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.ensureFieldIsMutable();
                    this.field_.add(value);
                    this.onChanged();
                }
                else {
                    this.fieldBuilder_.addMessage(value);
                }
                return this;
            }
            
            public Builder addField(final int index, final FieldDescriptorProto value) {
                if (this.fieldBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.ensureFieldIsMutable();
                    this.field_.add(index, value);
                    this.onChanged();
                }
                else {
                    this.fieldBuilder_.addMessage(index, value);
                }
                return this;
            }
            
            public Builder addField(final FieldDescriptorProto.Builder builderForValue) {
                if (this.fieldBuilder_ == null) {
                    this.ensureFieldIsMutable();
                    this.field_.add(builderForValue.build());
                    this.onChanged();
                }
                else {
                    this.fieldBuilder_.addMessage(builderForValue.build());
                }
                return this;
            }
            
            public Builder addField(final int index, final FieldDescriptorProto.Builder builderForValue) {
                if (this.fieldBuilder_ == null) {
                    this.ensureFieldIsMutable();
                    this.field_.add(index, builderForValue.build());
                    this.onChanged();
                }
                else {
                    this.fieldBuilder_.addMessage(index, builderForValue.build());
                }
                return this;
            }
            
            public Builder addAllField(final Iterable<? extends FieldDescriptorProto> values) {
                if (this.fieldBuilder_ == null) {
                    this.ensureFieldIsMutable();
                    AbstractMessageLite.Builder.addAll(values, this.field_);
                    this.onChanged();
                }
                else {
                    this.fieldBuilder_.addAllMessages(values);
                }
                return this;
            }
            
            public Builder clearField() {
                if (this.fieldBuilder_ == null) {
                    this.field_ = Collections.emptyList();
                    this.bitField0_ &= 0xFFFFFFFD;
                    this.onChanged();
                }
                else {
                    this.fieldBuilder_.clear();
                }
                return this;
            }
            
            public Builder removeField(final int index) {
                if (this.fieldBuilder_ == null) {
                    this.ensureFieldIsMutable();
                    this.field_.remove(index);
                    this.onChanged();
                }
                else {
                    this.fieldBuilder_.remove(index);
                }
                return this;
            }
            
            public FieldDescriptorProto.Builder getFieldBuilder(final int index) {
                return this.internalGetFieldFieldBuilder().getBuilder(index);
            }
            
            @Override
            public FieldDescriptorProtoOrBuilder getFieldOrBuilder(final int index) {
                if (this.fieldBuilder_ == null) {
                    return this.field_.get(index);
                }
                return this.fieldBuilder_.getMessageOrBuilder(index);
            }
            
            @Override
            public List<? extends FieldDescriptorProtoOrBuilder> getFieldOrBuilderList() {
                if (this.fieldBuilder_ != null) {
                    return this.fieldBuilder_.getMessageOrBuilderList();
                }
                return Collections.unmodifiableList((List<? extends FieldDescriptorProtoOrBuilder>)this.field_);
            }
            
            public FieldDescriptorProto.Builder addFieldBuilder() {
                return this.internalGetFieldFieldBuilder().addBuilder(FieldDescriptorProto.getDefaultInstance());
            }
            
            public FieldDescriptorProto.Builder addFieldBuilder(final int index) {
                return this.internalGetFieldFieldBuilder().addBuilder(index, FieldDescriptorProto.getDefaultInstance());
            }
            
            public List<FieldDescriptorProto.Builder> getFieldBuilderList() {
                return this.internalGetFieldFieldBuilder().getBuilderList();
            }
            
            private RepeatedFieldBuilder<FieldDescriptorProto, FieldDescriptorProto.Builder, FieldDescriptorProtoOrBuilder> internalGetFieldFieldBuilder() {
                if (this.fieldBuilder_ == null) {
                    this.fieldBuilder_ = new RepeatedFieldBuilder<FieldDescriptorProto, FieldDescriptorProto.Builder, FieldDescriptorProtoOrBuilder>(this.field_, (this.bitField0_ & 0x2) != 0x0, this.getParentForChildren(), this.isClean());
                    this.field_ = null;
                }
                return this.fieldBuilder_;
            }
            
            private void ensureExtensionIsMutable() {
                if ((this.bitField0_ & 0x4) == 0x0) {
                    this.extension_ = new ArrayList<FieldDescriptorProto>(this.extension_);
                    this.bitField0_ |= 0x4;
                }
            }
            
            @Override
            public List<FieldDescriptorProto> getExtensionList() {
                if (this.extensionBuilder_ == null) {
                    return Collections.unmodifiableList((List<? extends FieldDescriptorProto>)this.extension_);
                }
                return this.extensionBuilder_.getMessageList();
            }
            
            @Override
            public int getExtensionCount() {
                if (this.extensionBuilder_ == null) {
                    return this.extension_.size();
                }
                return this.extensionBuilder_.getCount();
            }
            
            @Override
            public FieldDescriptorProto getExtension(final int index) {
                if (this.extensionBuilder_ == null) {
                    return this.extension_.get(index);
                }
                return this.extensionBuilder_.getMessage(index);
            }
            
            public Builder setExtension(final int index, final FieldDescriptorProto value) {
                if (this.extensionBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.ensureExtensionIsMutable();
                    this.extension_.set(index, value);
                    this.onChanged();
                }
                else {
                    this.extensionBuilder_.setMessage(index, value);
                }
                return this;
            }
            
            public Builder setExtension(final int index, final FieldDescriptorProto.Builder builderForValue) {
                if (this.extensionBuilder_ == null) {
                    this.ensureExtensionIsMutable();
                    this.extension_.set(index, builderForValue.build());
                    this.onChanged();
                }
                else {
                    this.extensionBuilder_.setMessage(index, builderForValue.build());
                }
                return this;
            }
            
            public Builder addExtension(final FieldDescriptorProto value) {
                if (this.extensionBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.ensureExtensionIsMutable();
                    this.extension_.add(value);
                    this.onChanged();
                }
                else {
                    this.extensionBuilder_.addMessage(value);
                }
                return this;
            }
            
            public Builder addExtension(final int index, final FieldDescriptorProto value) {
                if (this.extensionBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.ensureExtensionIsMutable();
                    this.extension_.add(index, value);
                    this.onChanged();
                }
                else {
                    this.extensionBuilder_.addMessage(index, value);
                }
                return this;
            }
            
            public Builder addExtension(final FieldDescriptorProto.Builder builderForValue) {
                if (this.extensionBuilder_ == null) {
                    this.ensureExtensionIsMutable();
                    this.extension_.add(builderForValue.build());
                    this.onChanged();
                }
                else {
                    this.extensionBuilder_.addMessage(builderForValue.build());
                }
                return this;
            }
            
            public Builder addExtension(final int index, final FieldDescriptorProto.Builder builderForValue) {
                if (this.extensionBuilder_ == null) {
                    this.ensureExtensionIsMutable();
                    this.extension_.add(index, builderForValue.build());
                    this.onChanged();
                }
                else {
                    this.extensionBuilder_.addMessage(index, builderForValue.build());
                }
                return this;
            }
            
            public Builder addAllExtension(final Iterable<? extends FieldDescriptorProto> values) {
                if (this.extensionBuilder_ == null) {
                    this.ensureExtensionIsMutable();
                    AbstractMessageLite.Builder.addAll(values, this.extension_);
                    this.onChanged();
                }
                else {
                    this.extensionBuilder_.addAllMessages(values);
                }
                return this;
            }
            
            public Builder clearExtension() {
                if (this.extensionBuilder_ == null) {
                    this.extension_ = Collections.emptyList();
                    this.bitField0_ &= 0xFFFFFFFB;
                    this.onChanged();
                }
                else {
                    this.extensionBuilder_.clear();
                }
                return this;
            }
            
            public Builder removeExtension(final int index) {
                if (this.extensionBuilder_ == null) {
                    this.ensureExtensionIsMutable();
                    this.extension_.remove(index);
                    this.onChanged();
                }
                else {
                    this.extensionBuilder_.remove(index);
                }
                return this;
            }
            
            public FieldDescriptorProto.Builder getExtensionBuilder(final int index) {
                return this.internalGetExtensionFieldBuilder().getBuilder(index);
            }
            
            @Override
            public FieldDescriptorProtoOrBuilder getExtensionOrBuilder(final int index) {
                if (this.extensionBuilder_ == null) {
                    return this.extension_.get(index);
                }
                return this.extensionBuilder_.getMessageOrBuilder(index);
            }
            
            @Override
            public List<? extends FieldDescriptorProtoOrBuilder> getExtensionOrBuilderList() {
                if (this.extensionBuilder_ != null) {
                    return this.extensionBuilder_.getMessageOrBuilderList();
                }
                return Collections.unmodifiableList((List<? extends FieldDescriptorProtoOrBuilder>)this.extension_);
            }
            
            public FieldDescriptorProto.Builder addExtensionBuilder() {
                return this.internalGetExtensionFieldBuilder().addBuilder(FieldDescriptorProto.getDefaultInstance());
            }
            
            public FieldDescriptorProto.Builder addExtensionBuilder(final int index) {
                return this.internalGetExtensionFieldBuilder().addBuilder(index, FieldDescriptorProto.getDefaultInstance());
            }
            
            public List<FieldDescriptorProto.Builder> getExtensionBuilderList() {
                return this.internalGetExtensionFieldBuilder().getBuilderList();
            }
            
            private RepeatedFieldBuilder<FieldDescriptorProto, FieldDescriptorProto.Builder, FieldDescriptorProtoOrBuilder> internalGetExtensionFieldBuilder() {
                if (this.extensionBuilder_ == null) {
                    this.extensionBuilder_ = new RepeatedFieldBuilder<FieldDescriptorProto, FieldDescriptorProto.Builder, FieldDescriptorProtoOrBuilder>(this.extension_, (this.bitField0_ & 0x4) != 0x0, this.getParentForChildren(), this.isClean());
                    this.extension_ = null;
                }
                return this.extensionBuilder_;
            }
            
            private void ensureNestedTypeIsMutable() {
                if ((this.bitField0_ & 0x8) == 0x0) {
                    this.nestedType_ = new ArrayList<DescriptorProto>(this.nestedType_);
                    this.bitField0_ |= 0x8;
                }
            }
            
            @Override
            public List<DescriptorProto> getNestedTypeList() {
                if (this.nestedTypeBuilder_ == null) {
                    return Collections.unmodifiableList((List<? extends DescriptorProto>)this.nestedType_);
                }
                return this.nestedTypeBuilder_.getMessageList();
            }
            
            @Override
            public int getNestedTypeCount() {
                if (this.nestedTypeBuilder_ == null) {
                    return this.nestedType_.size();
                }
                return this.nestedTypeBuilder_.getCount();
            }
            
            @Override
            public DescriptorProto getNestedType(final int index) {
                if (this.nestedTypeBuilder_ == null) {
                    return this.nestedType_.get(index);
                }
                return this.nestedTypeBuilder_.getMessage(index);
            }
            
            public Builder setNestedType(final int index, final DescriptorProto value) {
                if (this.nestedTypeBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.ensureNestedTypeIsMutable();
                    this.nestedType_.set(index, value);
                    this.onChanged();
                }
                else {
                    this.nestedTypeBuilder_.setMessage(index, value);
                }
                return this;
            }
            
            public Builder setNestedType(final int index, final Builder builderForValue) {
                if (this.nestedTypeBuilder_ == null) {
                    this.ensureNestedTypeIsMutable();
                    this.nestedType_.set(index, builderForValue.build());
                    this.onChanged();
                }
                else {
                    this.nestedTypeBuilder_.setMessage(index, builderForValue.build());
                }
                return this;
            }
            
            public Builder addNestedType(final DescriptorProto value) {
                if (this.nestedTypeBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.ensureNestedTypeIsMutable();
                    this.nestedType_.add(value);
                    this.onChanged();
                }
                else {
                    this.nestedTypeBuilder_.addMessage(value);
                }
                return this;
            }
            
            public Builder addNestedType(final int index, final DescriptorProto value) {
                if (this.nestedTypeBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.ensureNestedTypeIsMutable();
                    this.nestedType_.add(index, value);
                    this.onChanged();
                }
                else {
                    this.nestedTypeBuilder_.addMessage(index, value);
                }
                return this;
            }
            
            public Builder addNestedType(final Builder builderForValue) {
                if (this.nestedTypeBuilder_ == null) {
                    this.ensureNestedTypeIsMutable();
                    this.nestedType_.add(builderForValue.build());
                    this.onChanged();
                }
                else {
                    this.nestedTypeBuilder_.addMessage(builderForValue.build());
                }
                return this;
            }
            
            public Builder addNestedType(final int index, final Builder builderForValue) {
                if (this.nestedTypeBuilder_ == null) {
                    this.ensureNestedTypeIsMutable();
                    this.nestedType_.add(index, builderForValue.build());
                    this.onChanged();
                }
                else {
                    this.nestedTypeBuilder_.addMessage(index, builderForValue.build());
                }
                return this;
            }
            
            public Builder addAllNestedType(final Iterable<? extends DescriptorProto> values) {
                if (this.nestedTypeBuilder_ == null) {
                    this.ensureNestedTypeIsMutable();
                    AbstractMessageLite.Builder.addAll(values, this.nestedType_);
                    this.onChanged();
                }
                else {
                    this.nestedTypeBuilder_.addAllMessages(values);
                }
                return this;
            }
            
            public Builder clearNestedType() {
                if (this.nestedTypeBuilder_ == null) {
                    this.nestedType_ = Collections.emptyList();
                    this.bitField0_ &= 0xFFFFFFF7;
                    this.onChanged();
                }
                else {
                    this.nestedTypeBuilder_.clear();
                }
                return this;
            }
            
            public Builder removeNestedType(final int index) {
                if (this.nestedTypeBuilder_ == null) {
                    this.ensureNestedTypeIsMutable();
                    this.nestedType_.remove(index);
                    this.onChanged();
                }
                else {
                    this.nestedTypeBuilder_.remove(index);
                }
                return this;
            }
            
            public Builder getNestedTypeBuilder(final int index) {
                return this.internalGetNestedTypeFieldBuilder().getBuilder(index);
            }
            
            @Override
            public DescriptorProtoOrBuilder getNestedTypeOrBuilder(final int index) {
                if (this.nestedTypeBuilder_ == null) {
                    return this.nestedType_.get(index);
                }
                return this.nestedTypeBuilder_.getMessageOrBuilder(index);
            }
            
            @Override
            public List<? extends DescriptorProtoOrBuilder> getNestedTypeOrBuilderList() {
                if (this.nestedTypeBuilder_ != null) {
                    return this.nestedTypeBuilder_.getMessageOrBuilderList();
                }
                return Collections.unmodifiableList((List<? extends DescriptorProtoOrBuilder>)this.nestedType_);
            }
            
            public Builder addNestedTypeBuilder() {
                return this.internalGetNestedTypeFieldBuilder().addBuilder(DescriptorProto.getDefaultInstance());
            }
            
            public Builder addNestedTypeBuilder(final int index) {
                return this.internalGetNestedTypeFieldBuilder().addBuilder(index, DescriptorProto.getDefaultInstance());
            }
            
            public List<Builder> getNestedTypeBuilderList() {
                return this.internalGetNestedTypeFieldBuilder().getBuilderList();
            }
            
            private RepeatedFieldBuilder<DescriptorProto, Builder, DescriptorProtoOrBuilder> internalGetNestedTypeFieldBuilder() {
                if (this.nestedTypeBuilder_ == null) {
                    this.nestedTypeBuilder_ = new RepeatedFieldBuilder<DescriptorProto, Builder, DescriptorProtoOrBuilder>(this.nestedType_, (this.bitField0_ & 0x8) != 0x0, this.getParentForChildren(), this.isClean());
                    this.nestedType_ = null;
                }
                return this.nestedTypeBuilder_;
            }
            
            private void ensureEnumTypeIsMutable() {
                if ((this.bitField0_ & 0x10) == 0x0) {
                    this.enumType_ = new ArrayList<EnumDescriptorProto>(this.enumType_);
                    this.bitField0_ |= 0x10;
                }
            }
            
            @Override
            public List<EnumDescriptorProto> getEnumTypeList() {
                if (this.enumTypeBuilder_ == null) {
                    return Collections.unmodifiableList((List<? extends EnumDescriptorProto>)this.enumType_);
                }
                return this.enumTypeBuilder_.getMessageList();
            }
            
            @Override
            public int getEnumTypeCount() {
                if (this.enumTypeBuilder_ == null) {
                    return this.enumType_.size();
                }
                return this.enumTypeBuilder_.getCount();
            }
            
            @Override
            public EnumDescriptorProto getEnumType(final int index) {
                if (this.enumTypeBuilder_ == null) {
                    return this.enumType_.get(index);
                }
                return this.enumTypeBuilder_.getMessage(index);
            }
            
            public Builder setEnumType(final int index, final EnumDescriptorProto value) {
                if (this.enumTypeBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.ensureEnumTypeIsMutable();
                    this.enumType_.set(index, value);
                    this.onChanged();
                }
                else {
                    this.enumTypeBuilder_.setMessage(index, value);
                }
                return this;
            }
            
            public Builder setEnumType(final int index, final EnumDescriptorProto.Builder builderForValue) {
                if (this.enumTypeBuilder_ == null) {
                    this.ensureEnumTypeIsMutable();
                    this.enumType_.set(index, builderForValue.build());
                    this.onChanged();
                }
                else {
                    this.enumTypeBuilder_.setMessage(index, builderForValue.build());
                }
                return this;
            }
            
            public Builder addEnumType(final EnumDescriptorProto value) {
                if (this.enumTypeBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.ensureEnumTypeIsMutable();
                    this.enumType_.add(value);
                    this.onChanged();
                }
                else {
                    this.enumTypeBuilder_.addMessage(value);
                }
                return this;
            }
            
            public Builder addEnumType(final int index, final EnumDescriptorProto value) {
                if (this.enumTypeBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.ensureEnumTypeIsMutable();
                    this.enumType_.add(index, value);
                    this.onChanged();
                }
                else {
                    this.enumTypeBuilder_.addMessage(index, value);
                }
                return this;
            }
            
            public Builder addEnumType(final EnumDescriptorProto.Builder builderForValue) {
                if (this.enumTypeBuilder_ == null) {
                    this.ensureEnumTypeIsMutable();
                    this.enumType_.add(builderForValue.build());
                    this.onChanged();
                }
                else {
                    this.enumTypeBuilder_.addMessage(builderForValue.build());
                }
                return this;
            }
            
            public Builder addEnumType(final int index, final EnumDescriptorProto.Builder builderForValue) {
                if (this.enumTypeBuilder_ == null) {
                    this.ensureEnumTypeIsMutable();
                    this.enumType_.add(index, builderForValue.build());
                    this.onChanged();
                }
                else {
                    this.enumTypeBuilder_.addMessage(index, builderForValue.build());
                }
                return this;
            }
            
            public Builder addAllEnumType(final Iterable<? extends EnumDescriptorProto> values) {
                if (this.enumTypeBuilder_ == null) {
                    this.ensureEnumTypeIsMutable();
                    AbstractMessageLite.Builder.addAll(values, this.enumType_);
                    this.onChanged();
                }
                else {
                    this.enumTypeBuilder_.addAllMessages(values);
                }
                return this;
            }
            
            public Builder clearEnumType() {
                if (this.enumTypeBuilder_ == null) {
                    this.enumType_ = Collections.emptyList();
                    this.bitField0_ &= 0xFFFFFFEF;
                    this.onChanged();
                }
                else {
                    this.enumTypeBuilder_.clear();
                }
                return this;
            }
            
            public Builder removeEnumType(final int index) {
                if (this.enumTypeBuilder_ == null) {
                    this.ensureEnumTypeIsMutable();
                    this.enumType_.remove(index);
                    this.onChanged();
                }
                else {
                    this.enumTypeBuilder_.remove(index);
                }
                return this;
            }
            
            public EnumDescriptorProto.Builder getEnumTypeBuilder(final int index) {
                return this.internalGetEnumTypeFieldBuilder().getBuilder(index);
            }
            
            @Override
            public EnumDescriptorProtoOrBuilder getEnumTypeOrBuilder(final int index) {
                if (this.enumTypeBuilder_ == null) {
                    return this.enumType_.get(index);
                }
                return this.enumTypeBuilder_.getMessageOrBuilder(index);
            }
            
            @Override
            public List<? extends EnumDescriptorProtoOrBuilder> getEnumTypeOrBuilderList() {
                if (this.enumTypeBuilder_ != null) {
                    return this.enumTypeBuilder_.getMessageOrBuilderList();
                }
                return Collections.unmodifiableList((List<? extends EnumDescriptorProtoOrBuilder>)this.enumType_);
            }
            
            public EnumDescriptorProto.Builder addEnumTypeBuilder() {
                return this.internalGetEnumTypeFieldBuilder().addBuilder(EnumDescriptorProto.getDefaultInstance());
            }
            
            public EnumDescriptorProto.Builder addEnumTypeBuilder(final int index) {
                return this.internalGetEnumTypeFieldBuilder().addBuilder(index, EnumDescriptorProto.getDefaultInstance());
            }
            
            public List<EnumDescriptorProto.Builder> getEnumTypeBuilderList() {
                return this.internalGetEnumTypeFieldBuilder().getBuilderList();
            }
            
            private RepeatedFieldBuilder<EnumDescriptorProto, EnumDescriptorProto.Builder, EnumDescriptorProtoOrBuilder> internalGetEnumTypeFieldBuilder() {
                if (this.enumTypeBuilder_ == null) {
                    this.enumTypeBuilder_ = new RepeatedFieldBuilder<EnumDescriptorProto, EnumDescriptorProto.Builder, EnumDescriptorProtoOrBuilder>(this.enumType_, (this.bitField0_ & 0x10) != 0x0, this.getParentForChildren(), this.isClean());
                    this.enumType_ = null;
                }
                return this.enumTypeBuilder_;
            }
            
            private void ensureExtensionRangeIsMutable() {
                if ((this.bitField0_ & 0x20) == 0x0) {
                    this.extensionRange_ = new ArrayList<ExtensionRange>(this.extensionRange_);
                    this.bitField0_ |= 0x20;
                }
            }
            
            @Override
            public List<ExtensionRange> getExtensionRangeList() {
                if (this.extensionRangeBuilder_ == null) {
                    return Collections.unmodifiableList((List<? extends ExtensionRange>)this.extensionRange_);
                }
                return this.extensionRangeBuilder_.getMessageList();
            }
            
            @Override
            public int getExtensionRangeCount() {
                if (this.extensionRangeBuilder_ == null) {
                    return this.extensionRange_.size();
                }
                return this.extensionRangeBuilder_.getCount();
            }
            
            @Override
            public ExtensionRange getExtensionRange(final int index) {
                if (this.extensionRangeBuilder_ == null) {
                    return this.extensionRange_.get(index);
                }
                return this.extensionRangeBuilder_.getMessage(index);
            }
            
            public Builder setExtensionRange(final int index, final ExtensionRange value) {
                if (this.extensionRangeBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.ensureExtensionRangeIsMutable();
                    this.extensionRange_.set(index, value);
                    this.onChanged();
                }
                else {
                    this.extensionRangeBuilder_.setMessage(index, value);
                }
                return this;
            }
            
            public Builder setExtensionRange(final int index, final ExtensionRange.Builder builderForValue) {
                if (this.extensionRangeBuilder_ == null) {
                    this.ensureExtensionRangeIsMutable();
                    this.extensionRange_.set(index, builderForValue.build());
                    this.onChanged();
                }
                else {
                    this.extensionRangeBuilder_.setMessage(index, builderForValue.build());
                }
                return this;
            }
            
            public Builder addExtensionRange(final ExtensionRange value) {
                if (this.extensionRangeBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.ensureExtensionRangeIsMutable();
                    this.extensionRange_.add(value);
                    this.onChanged();
                }
                else {
                    this.extensionRangeBuilder_.addMessage(value);
                }
                return this;
            }
            
            public Builder addExtensionRange(final int index, final ExtensionRange value) {
                if (this.extensionRangeBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.ensureExtensionRangeIsMutable();
                    this.extensionRange_.add(index, value);
                    this.onChanged();
                }
                else {
                    this.extensionRangeBuilder_.addMessage(index, value);
                }
                return this;
            }
            
            public Builder addExtensionRange(final ExtensionRange.Builder builderForValue) {
                if (this.extensionRangeBuilder_ == null) {
                    this.ensureExtensionRangeIsMutable();
                    this.extensionRange_.add(builderForValue.build());
                    this.onChanged();
                }
                else {
                    this.extensionRangeBuilder_.addMessage(builderForValue.build());
                }
                return this;
            }
            
            public Builder addExtensionRange(final int index, final ExtensionRange.Builder builderForValue) {
                if (this.extensionRangeBuilder_ == null) {
                    this.ensureExtensionRangeIsMutable();
                    this.extensionRange_.add(index, builderForValue.build());
                    this.onChanged();
                }
                else {
                    this.extensionRangeBuilder_.addMessage(index, builderForValue.build());
                }
                return this;
            }
            
            public Builder addAllExtensionRange(final Iterable<? extends ExtensionRange> values) {
                if (this.extensionRangeBuilder_ == null) {
                    this.ensureExtensionRangeIsMutable();
                    AbstractMessageLite.Builder.addAll(values, this.extensionRange_);
                    this.onChanged();
                }
                else {
                    this.extensionRangeBuilder_.addAllMessages(values);
                }
                return this;
            }
            
            public Builder clearExtensionRange() {
                if (this.extensionRangeBuilder_ == null) {
                    this.extensionRange_ = Collections.emptyList();
                    this.bitField0_ &= 0xFFFFFFDF;
                    this.onChanged();
                }
                else {
                    this.extensionRangeBuilder_.clear();
                }
                return this;
            }
            
            public Builder removeExtensionRange(final int index) {
                if (this.extensionRangeBuilder_ == null) {
                    this.ensureExtensionRangeIsMutable();
                    this.extensionRange_.remove(index);
                    this.onChanged();
                }
                else {
                    this.extensionRangeBuilder_.remove(index);
                }
                return this;
            }
            
            public ExtensionRange.Builder getExtensionRangeBuilder(final int index) {
                return this.internalGetExtensionRangeFieldBuilder().getBuilder(index);
            }
            
            @Override
            public ExtensionRangeOrBuilder getExtensionRangeOrBuilder(final int index) {
                if (this.extensionRangeBuilder_ == null) {
                    return this.extensionRange_.get(index);
                }
                return this.extensionRangeBuilder_.getMessageOrBuilder(index);
            }
            
            @Override
            public List<? extends ExtensionRangeOrBuilder> getExtensionRangeOrBuilderList() {
                if (this.extensionRangeBuilder_ != null) {
                    return this.extensionRangeBuilder_.getMessageOrBuilderList();
                }
                return Collections.unmodifiableList((List<? extends ExtensionRangeOrBuilder>)this.extensionRange_);
            }
            
            public ExtensionRange.Builder addExtensionRangeBuilder() {
                return this.internalGetExtensionRangeFieldBuilder().addBuilder(ExtensionRange.getDefaultInstance());
            }
            
            public ExtensionRange.Builder addExtensionRangeBuilder(final int index) {
                return this.internalGetExtensionRangeFieldBuilder().addBuilder(index, ExtensionRange.getDefaultInstance());
            }
            
            public List<ExtensionRange.Builder> getExtensionRangeBuilderList() {
                return this.internalGetExtensionRangeFieldBuilder().getBuilderList();
            }
            
            private RepeatedFieldBuilder<ExtensionRange, ExtensionRange.Builder, ExtensionRangeOrBuilder> internalGetExtensionRangeFieldBuilder() {
                if (this.extensionRangeBuilder_ == null) {
                    this.extensionRangeBuilder_ = new RepeatedFieldBuilder<ExtensionRange, ExtensionRange.Builder, ExtensionRangeOrBuilder>(this.extensionRange_, (this.bitField0_ & 0x20) != 0x0, this.getParentForChildren(), this.isClean());
                    this.extensionRange_ = null;
                }
                return this.extensionRangeBuilder_;
            }
            
            private void ensureOneofDeclIsMutable() {
                if ((this.bitField0_ & 0x40) == 0x0) {
                    this.oneofDecl_ = new ArrayList<OneofDescriptorProto>(this.oneofDecl_);
                    this.bitField0_ |= 0x40;
                }
            }
            
            @Override
            public List<OneofDescriptorProto> getOneofDeclList() {
                if (this.oneofDeclBuilder_ == null) {
                    return Collections.unmodifiableList((List<? extends OneofDescriptorProto>)this.oneofDecl_);
                }
                return this.oneofDeclBuilder_.getMessageList();
            }
            
            @Override
            public int getOneofDeclCount() {
                if (this.oneofDeclBuilder_ == null) {
                    return this.oneofDecl_.size();
                }
                return this.oneofDeclBuilder_.getCount();
            }
            
            @Override
            public OneofDescriptorProto getOneofDecl(final int index) {
                if (this.oneofDeclBuilder_ == null) {
                    return this.oneofDecl_.get(index);
                }
                return this.oneofDeclBuilder_.getMessage(index);
            }
            
            public Builder setOneofDecl(final int index, final OneofDescriptorProto value) {
                if (this.oneofDeclBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.ensureOneofDeclIsMutable();
                    this.oneofDecl_.set(index, value);
                    this.onChanged();
                }
                else {
                    this.oneofDeclBuilder_.setMessage(index, value);
                }
                return this;
            }
            
            public Builder setOneofDecl(final int index, final OneofDescriptorProto.Builder builderForValue) {
                if (this.oneofDeclBuilder_ == null) {
                    this.ensureOneofDeclIsMutable();
                    this.oneofDecl_.set(index, builderForValue.build());
                    this.onChanged();
                }
                else {
                    this.oneofDeclBuilder_.setMessage(index, builderForValue.build());
                }
                return this;
            }
            
            public Builder addOneofDecl(final OneofDescriptorProto value) {
                if (this.oneofDeclBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.ensureOneofDeclIsMutable();
                    this.oneofDecl_.add(value);
                    this.onChanged();
                }
                else {
                    this.oneofDeclBuilder_.addMessage(value);
                }
                return this;
            }
            
            public Builder addOneofDecl(final int index, final OneofDescriptorProto value) {
                if (this.oneofDeclBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.ensureOneofDeclIsMutable();
                    this.oneofDecl_.add(index, value);
                    this.onChanged();
                }
                else {
                    this.oneofDeclBuilder_.addMessage(index, value);
                }
                return this;
            }
            
            public Builder addOneofDecl(final OneofDescriptorProto.Builder builderForValue) {
                if (this.oneofDeclBuilder_ == null) {
                    this.ensureOneofDeclIsMutable();
                    this.oneofDecl_.add(builderForValue.build());
                    this.onChanged();
                }
                else {
                    this.oneofDeclBuilder_.addMessage(builderForValue.build());
                }
                return this;
            }
            
            public Builder addOneofDecl(final int index, final OneofDescriptorProto.Builder builderForValue) {
                if (this.oneofDeclBuilder_ == null) {
                    this.ensureOneofDeclIsMutable();
                    this.oneofDecl_.add(index, builderForValue.build());
                    this.onChanged();
                }
                else {
                    this.oneofDeclBuilder_.addMessage(index, builderForValue.build());
                }
                return this;
            }
            
            public Builder addAllOneofDecl(final Iterable<? extends OneofDescriptorProto> values) {
                if (this.oneofDeclBuilder_ == null) {
                    this.ensureOneofDeclIsMutable();
                    AbstractMessageLite.Builder.addAll(values, this.oneofDecl_);
                    this.onChanged();
                }
                else {
                    this.oneofDeclBuilder_.addAllMessages(values);
                }
                return this;
            }
            
            public Builder clearOneofDecl() {
                if (this.oneofDeclBuilder_ == null) {
                    this.oneofDecl_ = Collections.emptyList();
                    this.bitField0_ &= 0xFFFFFFBF;
                    this.onChanged();
                }
                else {
                    this.oneofDeclBuilder_.clear();
                }
                return this;
            }
            
            public Builder removeOneofDecl(final int index) {
                if (this.oneofDeclBuilder_ == null) {
                    this.ensureOneofDeclIsMutable();
                    this.oneofDecl_.remove(index);
                    this.onChanged();
                }
                else {
                    this.oneofDeclBuilder_.remove(index);
                }
                return this;
            }
            
            public OneofDescriptorProto.Builder getOneofDeclBuilder(final int index) {
                return this.internalGetOneofDeclFieldBuilder().getBuilder(index);
            }
            
            @Override
            public OneofDescriptorProtoOrBuilder getOneofDeclOrBuilder(final int index) {
                if (this.oneofDeclBuilder_ == null) {
                    return this.oneofDecl_.get(index);
                }
                return this.oneofDeclBuilder_.getMessageOrBuilder(index);
            }
            
            @Override
            public List<? extends OneofDescriptorProtoOrBuilder> getOneofDeclOrBuilderList() {
                if (this.oneofDeclBuilder_ != null) {
                    return this.oneofDeclBuilder_.getMessageOrBuilderList();
                }
                return Collections.unmodifiableList((List<? extends OneofDescriptorProtoOrBuilder>)this.oneofDecl_);
            }
            
            public OneofDescriptorProto.Builder addOneofDeclBuilder() {
                return this.internalGetOneofDeclFieldBuilder().addBuilder(OneofDescriptorProto.getDefaultInstance());
            }
            
            public OneofDescriptorProto.Builder addOneofDeclBuilder(final int index) {
                return this.internalGetOneofDeclFieldBuilder().addBuilder(index, OneofDescriptorProto.getDefaultInstance());
            }
            
            public List<OneofDescriptorProto.Builder> getOneofDeclBuilderList() {
                return this.internalGetOneofDeclFieldBuilder().getBuilderList();
            }
            
            private RepeatedFieldBuilder<OneofDescriptorProto, OneofDescriptorProto.Builder, OneofDescriptorProtoOrBuilder> internalGetOneofDeclFieldBuilder() {
                if (this.oneofDeclBuilder_ == null) {
                    this.oneofDeclBuilder_ = new RepeatedFieldBuilder<OneofDescriptorProto, OneofDescriptorProto.Builder, OneofDescriptorProtoOrBuilder>(this.oneofDecl_, (this.bitField0_ & 0x40) != 0x0, this.getParentForChildren(), this.isClean());
                    this.oneofDecl_ = null;
                }
                return this.oneofDeclBuilder_;
            }
            
            @Override
            public boolean hasOptions() {
                return (this.bitField0_ & 0x80) != 0x0;
            }
            
            @Override
            public MessageOptions getOptions() {
                if (this.optionsBuilder_ == null) {
                    return (this.options_ == null) ? MessageOptions.getDefaultInstance() : this.options_;
                }
                return this.optionsBuilder_.getMessage();
            }
            
            public Builder setOptions(final MessageOptions value) {
                if (this.optionsBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.options_ = value;
                }
                else {
                    this.optionsBuilder_.setMessage(value);
                }
                this.bitField0_ |= 0x80;
                this.onChanged();
                return this;
            }
            
            public Builder setOptions(final MessageOptions.Builder builderForValue) {
                if (this.optionsBuilder_ == null) {
                    this.options_ = builderForValue.build();
                }
                else {
                    this.optionsBuilder_.setMessage(builderForValue.build());
                }
                this.bitField0_ |= 0x80;
                this.onChanged();
                return this;
            }
            
            public Builder mergeOptions(final MessageOptions value) {
                if (this.optionsBuilder_ == null) {
                    if ((this.bitField0_ & 0x80) != 0x0 && this.options_ != null && this.options_ != MessageOptions.getDefaultInstance()) {
                        this.getOptionsBuilder().mergeFrom(value);
                    }
                    else {
                        this.options_ = value;
                    }
                }
                else {
                    this.optionsBuilder_.mergeFrom(value);
                }
                if (this.options_ != null) {
                    this.bitField0_ |= 0x80;
                    this.onChanged();
                }
                return this;
            }
            
            public Builder clearOptions() {
                this.bitField0_ &= 0xFFFFFF7F;
                this.options_ = null;
                if (this.optionsBuilder_ != null) {
                    this.optionsBuilder_.dispose();
                    this.optionsBuilder_ = null;
                }
                this.onChanged();
                return this;
            }
            
            public MessageOptions.Builder getOptionsBuilder() {
                this.bitField0_ |= 0x80;
                this.onChanged();
                return this.internalGetOptionsFieldBuilder().getBuilder();
            }
            
            @Override
            public MessageOptionsOrBuilder getOptionsOrBuilder() {
                if (this.optionsBuilder_ != null) {
                    return this.optionsBuilder_.getMessageOrBuilder();
                }
                return (this.options_ == null) ? MessageOptions.getDefaultInstance() : this.options_;
            }
            
            private SingleFieldBuilder<MessageOptions, MessageOptions.Builder, MessageOptionsOrBuilder> internalGetOptionsFieldBuilder() {
                if (this.optionsBuilder_ == null) {
                    this.optionsBuilder_ = new SingleFieldBuilder<MessageOptions, MessageOptions.Builder, MessageOptionsOrBuilder>(this.getOptions(), this.getParentForChildren(), this.isClean());
                    this.options_ = null;
                }
                return this.optionsBuilder_;
            }
            
            private void ensureReservedRangeIsMutable() {
                if ((this.bitField0_ & 0x100) == 0x0) {
                    this.reservedRange_ = new ArrayList<ReservedRange>(this.reservedRange_);
                    this.bitField0_ |= 0x100;
                }
            }
            
            @Override
            public List<ReservedRange> getReservedRangeList() {
                if (this.reservedRangeBuilder_ == null) {
                    return Collections.unmodifiableList((List<? extends ReservedRange>)this.reservedRange_);
                }
                return this.reservedRangeBuilder_.getMessageList();
            }
            
            @Override
            public int getReservedRangeCount() {
                if (this.reservedRangeBuilder_ == null) {
                    return this.reservedRange_.size();
                }
                return this.reservedRangeBuilder_.getCount();
            }
            
            @Override
            public ReservedRange getReservedRange(final int index) {
                if (this.reservedRangeBuilder_ == null) {
                    return this.reservedRange_.get(index);
                }
                return this.reservedRangeBuilder_.getMessage(index);
            }
            
            public Builder setReservedRange(final int index, final ReservedRange value) {
                if (this.reservedRangeBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.ensureReservedRangeIsMutable();
                    this.reservedRange_.set(index, value);
                    this.onChanged();
                }
                else {
                    this.reservedRangeBuilder_.setMessage(index, value);
                }
                return this;
            }
            
            public Builder setReservedRange(final int index, final ReservedRange.Builder builderForValue) {
                if (this.reservedRangeBuilder_ == null) {
                    this.ensureReservedRangeIsMutable();
                    this.reservedRange_.set(index, builderForValue.build());
                    this.onChanged();
                }
                else {
                    this.reservedRangeBuilder_.setMessage(index, builderForValue.build());
                }
                return this;
            }
            
            public Builder addReservedRange(final ReservedRange value) {
                if (this.reservedRangeBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.ensureReservedRangeIsMutable();
                    this.reservedRange_.add(value);
                    this.onChanged();
                }
                else {
                    this.reservedRangeBuilder_.addMessage(value);
                }
                return this;
            }
            
            public Builder addReservedRange(final int index, final ReservedRange value) {
                if (this.reservedRangeBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.ensureReservedRangeIsMutable();
                    this.reservedRange_.add(index, value);
                    this.onChanged();
                }
                else {
                    this.reservedRangeBuilder_.addMessage(index, value);
                }
                return this;
            }
            
            public Builder addReservedRange(final ReservedRange.Builder builderForValue) {
                if (this.reservedRangeBuilder_ == null) {
                    this.ensureReservedRangeIsMutable();
                    this.reservedRange_.add(builderForValue.build());
                    this.onChanged();
                }
                else {
                    this.reservedRangeBuilder_.addMessage(builderForValue.build());
                }
                return this;
            }
            
            public Builder addReservedRange(final int index, final ReservedRange.Builder builderForValue) {
                if (this.reservedRangeBuilder_ == null) {
                    this.ensureReservedRangeIsMutable();
                    this.reservedRange_.add(index, builderForValue.build());
                    this.onChanged();
                }
                else {
                    this.reservedRangeBuilder_.addMessage(index, builderForValue.build());
                }
                return this;
            }
            
            public Builder addAllReservedRange(final Iterable<? extends ReservedRange> values) {
                if (this.reservedRangeBuilder_ == null) {
                    this.ensureReservedRangeIsMutable();
                    AbstractMessageLite.Builder.addAll(values, this.reservedRange_);
                    this.onChanged();
                }
                else {
                    this.reservedRangeBuilder_.addAllMessages(values);
                }
                return this;
            }
            
            public Builder clearReservedRange() {
                if (this.reservedRangeBuilder_ == null) {
                    this.reservedRange_ = Collections.emptyList();
                    this.bitField0_ &= 0xFFFFFEFF;
                    this.onChanged();
                }
                else {
                    this.reservedRangeBuilder_.clear();
                }
                return this;
            }
            
            public Builder removeReservedRange(final int index) {
                if (this.reservedRangeBuilder_ == null) {
                    this.ensureReservedRangeIsMutable();
                    this.reservedRange_.remove(index);
                    this.onChanged();
                }
                else {
                    this.reservedRangeBuilder_.remove(index);
                }
                return this;
            }
            
            public ReservedRange.Builder getReservedRangeBuilder(final int index) {
                return this.internalGetReservedRangeFieldBuilder().getBuilder(index);
            }
            
            @Override
            public ReservedRangeOrBuilder getReservedRangeOrBuilder(final int index) {
                if (this.reservedRangeBuilder_ == null) {
                    return this.reservedRange_.get(index);
                }
                return this.reservedRangeBuilder_.getMessageOrBuilder(index);
            }
            
            @Override
            public List<? extends ReservedRangeOrBuilder> getReservedRangeOrBuilderList() {
                if (this.reservedRangeBuilder_ != null) {
                    return this.reservedRangeBuilder_.getMessageOrBuilderList();
                }
                return Collections.unmodifiableList((List<? extends ReservedRangeOrBuilder>)this.reservedRange_);
            }
            
            public ReservedRange.Builder addReservedRangeBuilder() {
                return this.internalGetReservedRangeFieldBuilder().addBuilder(ReservedRange.getDefaultInstance());
            }
            
            public ReservedRange.Builder addReservedRangeBuilder(final int index) {
                return this.internalGetReservedRangeFieldBuilder().addBuilder(index, ReservedRange.getDefaultInstance());
            }
            
            public List<ReservedRange.Builder> getReservedRangeBuilderList() {
                return this.internalGetReservedRangeFieldBuilder().getBuilderList();
            }
            
            private RepeatedFieldBuilder<ReservedRange, ReservedRange.Builder, ReservedRangeOrBuilder> internalGetReservedRangeFieldBuilder() {
                if (this.reservedRangeBuilder_ == null) {
                    this.reservedRangeBuilder_ = new RepeatedFieldBuilder<ReservedRange, ReservedRange.Builder, ReservedRangeOrBuilder>(this.reservedRange_, (this.bitField0_ & 0x100) != 0x0, this.getParentForChildren(), this.isClean());
                    this.reservedRange_ = null;
                }
                return this.reservedRangeBuilder_;
            }
            
            private void ensureReservedNameIsMutable() {
                if (!this.reservedName_.isModifiable()) {
                    this.reservedName_ = new LazyStringArrayList(this.reservedName_);
                }
                this.bitField0_ |= 0x200;
            }
            
            @Override
            public ProtocolStringList getReservedNameList() {
                this.reservedName_.makeImmutable();
                return this.reservedName_;
            }
            
            @Override
            public int getReservedNameCount() {
                return this.reservedName_.size();
            }
            
            @Override
            public String getReservedName(final int index) {
                return this.reservedName_.get(index);
            }
            
            @Override
            public ByteString getReservedNameBytes(final int index) {
                return this.reservedName_.getByteString(index);
            }
            
            public Builder setReservedName(final int index, final String value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                this.ensureReservedNameIsMutable();
                this.reservedName_.set(index, value);
                this.bitField0_ |= 0x200;
                this.onChanged();
                return this;
            }
            
            public Builder addReservedName(final String value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                this.ensureReservedNameIsMutable();
                this.reservedName_.add(value);
                this.bitField0_ |= 0x200;
                this.onChanged();
                return this;
            }
            
            public Builder addAllReservedName(final Iterable<String> values) {
                this.ensureReservedNameIsMutable();
                AbstractMessageLite.Builder.addAll(values, this.reservedName_);
                this.bitField0_ |= 0x200;
                this.onChanged();
                return this;
            }
            
            public Builder clearReservedName() {
                this.reservedName_ = LazyStringArrayList.emptyList();
                this.bitField0_ &= 0xFFFFFDFF;
                this.onChanged();
                return this;
            }
            
            public Builder addReservedNameBytes(final ByteString value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                this.ensureReservedNameIsMutable();
                this.reservedName_.add(value);
                this.bitField0_ |= 0x200;
                this.onChanged();
                return this;
            }
            
            @Override
            public boolean hasVisibility() {
                return (this.bitField0_ & 0x400) != 0x0;
            }
            
            @Override
            public SymbolVisibility getVisibility() {
                final SymbolVisibility result = SymbolVisibility.forNumber(this.visibility_);
                return (result == null) ? SymbolVisibility.VISIBILITY_UNSET : result;
            }
            
            public Builder setVisibility(final SymbolVisibility value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                this.bitField0_ |= 0x400;
                this.visibility_ = value.getNumber();
                this.onChanged();
                return this;
            }
            
            public Builder clearVisibility() {
                this.bitField0_ &= 0xFFFFFBFF;
                this.visibility_ = 0;
                this.onChanged();
                return this;
            }
        }
        
        public interface ExtensionRangeOrBuilder extends MessageOrBuilder
        {
            boolean hasStart();
            
            int getStart();
            
            boolean hasEnd();
            
            int getEnd();
            
            boolean hasOptions();
            
            ExtensionRangeOptions getOptions();
            
            ExtensionRangeOptionsOrBuilder getOptionsOrBuilder();
        }
        
        public interface ReservedRangeOrBuilder extends MessageOrBuilder
        {
            boolean hasStart();
            
            int getStart();
            
            boolean hasEnd();
            
            int getEnd();
        }
    }
    
    public static final class ExtensionRangeOptions extends ExtendableMessage<ExtensionRangeOptions> implements ExtensionRangeOptionsOrBuilder
    {
        private static final long serialVersionUID = 0L;
        private int bitField0_;
        public static final int UNINTERPRETED_OPTION_FIELD_NUMBER = 999;
        private List<UninterpretedOption> uninterpretedOption_;
        public static final int DECLARATION_FIELD_NUMBER = 2;
        private List<Declaration> declaration_;
        public static final int FEATURES_FIELD_NUMBER = 50;
        private FeatureSet features_;
        public static final int VERIFICATION_FIELD_NUMBER = 3;
        private int verification_;
        private byte memoizedIsInitialized;
        private static final ExtensionRangeOptions DEFAULT_INSTANCE;
        private static final Parser<ExtensionRangeOptions> PARSER;
        
        private ExtensionRangeOptions(final ExtendableBuilder<ExtensionRangeOptions, ?> builder) {
            super(builder);
            this.verification_ = 1;
            this.memoizedIsInitialized = -1;
        }
        
        private ExtensionRangeOptions() {
            this.verification_ = 1;
            this.memoizedIsInitialized = -1;
            this.uninterpretedOption_ = Collections.emptyList();
            this.declaration_ = Collections.emptyList();
            this.verification_ = 1;
        }
        
        public static final Descriptors.Descriptor getDescriptor() {
            return DescriptorProtos.internal_static_google_protobuf_ExtensionRangeOptions_descriptor;
        }
        
        @Override
        protected FieldAccessorTable internalGetFieldAccessorTable() {
            return DescriptorProtos.internal_static_google_protobuf_ExtensionRangeOptions_fieldAccessorTable.ensureFieldAccessorsInitialized(ExtensionRangeOptions.class, Builder.class);
        }
        
        @Override
        public List<UninterpretedOption> getUninterpretedOptionList() {
            return this.uninterpretedOption_;
        }
        
        @Override
        public List<? extends UninterpretedOptionOrBuilder> getUninterpretedOptionOrBuilderList() {
            return this.uninterpretedOption_;
        }
        
        @Override
        public int getUninterpretedOptionCount() {
            return this.uninterpretedOption_.size();
        }
        
        @Override
        public UninterpretedOption getUninterpretedOption(final int index) {
            return this.uninterpretedOption_.get(index);
        }
        
        @Override
        public UninterpretedOptionOrBuilder getUninterpretedOptionOrBuilder(final int index) {
            return this.uninterpretedOption_.get(index);
        }
        
        @Override
        public List<Declaration> getDeclarationList() {
            return this.declaration_;
        }
        
        @Override
        public List<? extends DeclarationOrBuilder> getDeclarationOrBuilderList() {
            return this.declaration_;
        }
        
        @Override
        public int getDeclarationCount() {
            return this.declaration_.size();
        }
        
        @Override
        public Declaration getDeclaration(final int index) {
            return this.declaration_.get(index);
        }
        
        @Override
        public DeclarationOrBuilder getDeclarationOrBuilder(final int index) {
            return this.declaration_.get(index);
        }
        
        @Override
        public boolean hasFeatures() {
            return (this.bitField0_ & 0x1) != 0x0;
        }
        
        @Override
        public FeatureSet getFeatures() {
            return (this.features_ == null) ? FeatureSet.getDefaultInstance() : this.features_;
        }
        
        @Override
        public FeatureSetOrBuilder getFeaturesOrBuilder() {
            return (this.features_ == null) ? FeatureSet.getDefaultInstance() : this.features_;
        }
        
        @Override
        public boolean hasVerification() {
            return (this.bitField0_ & 0x2) != 0x0;
        }
        
        @Override
        public VerificationState getVerification() {
            final VerificationState result = VerificationState.forNumber(this.verification_);
            return (result == null) ? VerificationState.UNVERIFIED : result;
        }
        
        @Override
        public final boolean isInitialized() {
            final byte isInitialized = this.memoizedIsInitialized;
            if (isInitialized == 1) {
                return true;
            }
            if (isInitialized == 0) {
                return false;
            }
            for (int i = 0; i < this.getUninterpretedOptionCount(); ++i) {
                if (!this.getUninterpretedOption(i).isInitialized()) {
                    this.memoizedIsInitialized = 0;
                    return false;
                }
            }
            if (this.hasFeatures() && !this.getFeatures().isInitialized()) {
                this.memoizedIsInitialized = 0;
                return false;
            }
            if (!this.extensionsAreInitialized()) {
                this.memoizedIsInitialized = 0;
                return false;
            }
            this.memoizedIsInitialized = 1;
            return true;
        }
        
        @Override
        public void writeTo(final CodedOutputStream output) throws IOException {
            final ExtensionSerializer extensionWriter = this.newExtensionSerializer();
            for (int i = 0; i < this.declaration_.size(); ++i) {
                output.writeMessage(2, this.declaration_.get(i));
            }
            if ((this.bitField0_ & 0x2) != 0x0) {
                output.writeEnum(3, this.verification_);
            }
            if ((this.bitField0_ & 0x1) != 0x0) {
                output.writeMessage(50, this.getFeatures());
            }
            for (int i = 0; i < this.uninterpretedOption_.size(); ++i) {
                output.writeMessage(999, this.uninterpretedOption_.get(i));
            }
            extensionWriter.writeUntil(536870912, output);
            this.getUnknownFields().writeTo(output);
        }
        
        @Override
        public int getSerializedSize() {
            int size = this.memoizedSize;
            if (size != -1) {
                return size;
            }
            size = 0;
            for (int i = 0; i < this.declaration_.size(); ++i) {
                size += CodedOutputStream.computeMessageSize(2, this.declaration_.get(i));
            }
            if ((this.bitField0_ & 0x2) != 0x0) {
                size += CodedOutputStream.computeEnumSize(3, this.verification_);
            }
            if ((this.bitField0_ & 0x1) != 0x0) {
                size += CodedOutputStream.computeMessageSize(50, this.getFeatures());
            }
            for (int i = 0; i < this.uninterpretedOption_.size(); ++i) {
                size += CodedOutputStream.computeMessageSize(999, this.uninterpretedOption_.get(i));
            }
            size += this.extensionsSerializedSize();
            size += this.getUnknownFields().getSerializedSize();
            return this.memoizedSize = size;
        }
        
        @Override
        public boolean equals(final Object obj) {
            if (obj == this) {
                return true;
            }
            if (!(obj instanceof ExtensionRangeOptions)) {
                return super.equals(obj);
            }
            final ExtensionRangeOptions other = (ExtensionRangeOptions)obj;
            return this.getUninterpretedOptionList().equals(other.getUninterpretedOptionList()) && this.getDeclarationList().equals(other.getDeclarationList()) && this.hasFeatures() == other.hasFeatures() && (!this.hasFeatures() || this.getFeatures().equals(other.getFeatures())) && this.hasVerification() == other.hasVerification() && (!this.hasVerification() || this.verification_ == other.verification_) && this.getUnknownFields().equals(other.getUnknownFields()) && this.getExtensionFields().equals(other.getExtensionFields());
        }
        
        @Override
        public int hashCode() {
            if (this.memoizedHashCode != 0) {
                return this.memoizedHashCode;
            }
            int hash = 41;
            hash = 19 * hash + getDescriptor().hashCode();
            if (this.getUninterpretedOptionCount() > 0) {
                hash = 37 * hash + 999;
                hash = 53 * hash + this.getUninterpretedOptionList().hashCode();
            }
            if (this.getDeclarationCount() > 0) {
                hash = 37 * hash + 2;
                hash = 53 * hash + this.getDeclarationList().hashCode();
            }
            if (this.hasFeatures()) {
                hash = 37 * hash + 50;
                hash = 53 * hash + this.getFeatures().hashCode();
            }
            if (this.hasVerification()) {
                hash = 37 * hash + 3;
                hash = 53 * hash + this.verification_;
            }
            hash = AbstractMessage.hashFields(hash, this.getExtensionFields());
            hash = 29 * hash + this.getUnknownFields().hashCode();
            return this.memoizedHashCode = hash;
        }
        
        public static ExtensionRangeOptions parseFrom(final ByteBuffer data) throws InvalidProtocolBufferException {
            return ExtensionRangeOptions.PARSER.parseFrom(data);
        }
        
        public static ExtensionRangeOptions parseFrom(final ByteBuffer data, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
            return ExtensionRangeOptions.PARSER.parseFrom(data, extensionRegistry);
        }
        
        public static ExtensionRangeOptions parseFrom(final ByteString data) throws InvalidProtocolBufferException {
            return ExtensionRangeOptions.PARSER.parseFrom(data);
        }
        
        public static ExtensionRangeOptions parseFrom(final ByteString data, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
            return ExtensionRangeOptions.PARSER.parseFrom(data, extensionRegistry);
        }
        
        public static ExtensionRangeOptions parseFrom(final byte[] data) throws InvalidProtocolBufferException {
            return ExtensionRangeOptions.PARSER.parseFrom(data);
        }
        
        public static ExtensionRangeOptions parseFrom(final byte[] data, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
            return ExtensionRangeOptions.PARSER.parseFrom(data, extensionRegistry);
        }
        
        public static ExtensionRangeOptions parseFrom(final InputStream input) throws IOException {
            return GeneratedMessage.parseWithIOException(ExtensionRangeOptions.PARSER, input);
        }
        
        public static ExtensionRangeOptions parseFrom(final InputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
            return GeneratedMessage.parseWithIOException(ExtensionRangeOptions.PARSER, input, extensionRegistry);
        }
        
        public static ExtensionRangeOptions parseDelimitedFrom(final InputStream input) throws IOException {
            return GeneratedMessage.parseDelimitedWithIOException(ExtensionRangeOptions.PARSER, input);
        }
        
        public static ExtensionRangeOptions parseDelimitedFrom(final InputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
            return GeneratedMessage.parseDelimitedWithIOException(ExtensionRangeOptions.PARSER, input, extensionRegistry);
        }
        
        public static ExtensionRangeOptions parseFrom(final CodedInputStream input) throws IOException {
            return GeneratedMessage.parseWithIOException(ExtensionRangeOptions.PARSER, input);
        }
        
        public static ExtensionRangeOptions parseFrom(final CodedInputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
            return GeneratedMessage.parseWithIOException(ExtensionRangeOptions.PARSER, input, extensionRegistry);
        }
        
        @Override
        public Builder newBuilderForType() {
            return newBuilder();
        }
        
        public static Builder newBuilder() {
            return ExtensionRangeOptions.DEFAULT_INSTANCE.toBuilder();
        }
        
        public static Builder newBuilder(final ExtensionRangeOptions prototype) {
            return ExtensionRangeOptions.DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
        }
        
        @Override
        public Builder toBuilder() {
            return (this == ExtensionRangeOptions.DEFAULT_INSTANCE) ? new Builder() : new Builder().mergeFrom(this);
        }
        
        @Override
        protected Builder newBuilderForType(final BuilderParent parent) {
            final Builder builder = new Builder(parent);
            return builder;
        }
        
        public static ExtensionRangeOptions getDefaultInstance() {
            return ExtensionRangeOptions.DEFAULT_INSTANCE;
        }
        
        public static Parser<ExtensionRangeOptions> parser() {
            return ExtensionRangeOptions.PARSER;
        }
        
        @Override
        public Parser<ExtensionRangeOptions> getParserForType() {
            return ExtensionRangeOptions.PARSER;
        }
        
        @Override
        public ExtensionRangeOptions getDefaultInstanceForType() {
            return ExtensionRangeOptions.DEFAULT_INSTANCE;
        }
        
        static {
            RuntimeVersion.validateProtobufGencodeVersion(RuntimeVersion.RuntimeDomain.PUBLIC, 4, 33, 0, "", "ExtensionRangeOptions");
            DEFAULT_INSTANCE = new ExtensionRangeOptions();
            PARSER = new AbstractParser<ExtensionRangeOptions>() {
                @Override
                public ExtensionRangeOptions parsePartialFrom(final CodedInputStream input, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
                    final Builder builder = ExtensionRangeOptions.newBuilder();
                    try {
                        builder.mergeFrom(input, extensionRegistry);
                    }
                    catch (final InvalidProtocolBufferException e) {
                        throw e.setUnfinishedMessage(builder.buildPartial());
                    }
                    catch (final UninitializedMessageException e2) {
                        throw e2.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
                    }
                    catch (final IOException e3) {
                        throw new InvalidProtocolBufferException(e3).setUnfinishedMessage(builder.buildPartial());
                    }
                    return builder.buildPartial();
                }
            };
        }
        
        public enum VerificationState implements ProtocolMessageEnum
        {
            DECLARATION(0), 
            UNVERIFIED(1);
            
            public static final int DECLARATION_VALUE = 0;
            public static final int UNVERIFIED_VALUE = 1;
            private static final Internal.EnumLiteMap<VerificationState> internalValueMap;
            private static final VerificationState[] VALUES;
            private final int value;
            
            @Override
            public final int getNumber() {
                return this.value;
            }
            
            @Deprecated
            public static VerificationState valueOf(final int value) {
                return forNumber(value);
            }
            
            public static VerificationState forNumber(final int value) {
                switch (value) {
                    case 0: {
                        return VerificationState.DECLARATION;
                    }
                    case 1: {
                        return VerificationState.UNVERIFIED;
                    }
                    default: {
                        return null;
                    }
                }
            }
            
            public static Internal.EnumLiteMap<VerificationState> internalGetValueMap() {
                return VerificationState.internalValueMap;
            }
            
            @Override
            public final Descriptors.EnumValueDescriptor getValueDescriptor() {
                return getDescriptor().getValues().get(this.ordinal());
            }
            
            @Override
            public final Descriptors.EnumDescriptor getDescriptorForType() {
                return getDescriptor();
            }
            
            public static Descriptors.EnumDescriptor getDescriptor() {
                return ExtensionRangeOptions.getDescriptor().getEnumTypes().get(0);
            }
            
            public static VerificationState valueOf(final Descriptors.EnumValueDescriptor desc) {
                if (desc.getType() != getDescriptor()) {
                    throw new IllegalArgumentException("EnumValueDescriptor is not for this type.");
                }
                return VerificationState.VALUES[desc.getIndex()];
            }
            
            private VerificationState(final int value) {
                this.value = value;
            }
            
            static {
                RuntimeVersion.validateProtobufGencodeVersion(RuntimeVersion.RuntimeDomain.PUBLIC, 4, 33, 0, "", "VerificationState");
                internalValueMap = new Internal.EnumLiteMap<VerificationState>() {
                    @Override
                    public VerificationState findValueByNumber(final int number) {
                        return VerificationState.forNumber(number);
                    }
                };
                VALUES = values();
            }
        }
        
        public static final class Declaration extends GeneratedMessage implements DeclarationOrBuilder
        {
            private static final long serialVersionUID = 0L;
            private int bitField0_;
            public static final int NUMBER_FIELD_NUMBER = 1;
            private int number_;
            public static final int FULL_NAME_FIELD_NUMBER = 2;
            private volatile Object fullName_;
            public static final int TYPE_FIELD_NUMBER = 3;
            private volatile Object type_;
            public static final int RESERVED_FIELD_NUMBER = 5;
            private boolean reserved_;
            public static final int REPEATED_FIELD_NUMBER = 6;
            private boolean repeated_;
            private byte memoizedIsInitialized;
            private static final Declaration DEFAULT_INSTANCE;
            private static final Parser<Declaration> PARSER;
            
            private Declaration(final GeneratedMessage.Builder<?> builder) {
                super(builder);
                this.number_ = 0;
                this.fullName_ = "";
                this.type_ = "";
                this.reserved_ = false;
                this.repeated_ = false;
                this.memoizedIsInitialized = -1;
            }
            
            private Declaration() {
                this.number_ = 0;
                this.fullName_ = "";
                this.type_ = "";
                this.reserved_ = false;
                this.repeated_ = false;
                this.memoizedIsInitialized = -1;
                this.fullName_ = "";
                this.type_ = "";
            }
            
            public static final Descriptors.Descriptor getDescriptor() {
                return DescriptorProtos.internal_static_google_protobuf_ExtensionRangeOptions_Declaration_descriptor;
            }
            
            @Override
            protected FieldAccessorTable internalGetFieldAccessorTable() {
                return DescriptorProtos.internal_static_google_protobuf_ExtensionRangeOptions_Declaration_fieldAccessorTable.ensureFieldAccessorsInitialized(Declaration.class, Builder.class);
            }
            
            @Override
            public boolean hasNumber() {
                return (this.bitField0_ & 0x1) != 0x0;
            }
            
            @Override
            public int getNumber() {
                return this.number_;
            }
            
            @Override
            public boolean hasFullName() {
                return (this.bitField0_ & 0x2) != 0x0;
            }
            
            @Override
            public String getFullName() {
                final Object ref = this.fullName_;
                if (ref instanceof String) {
                    return (String)ref;
                }
                final ByteString bs = (ByteString)ref;
                final String s = bs.toStringUtf8();
                if (bs.isValidUtf8()) {
                    this.fullName_ = s;
                }
                return s;
            }
            
            @Override
            public ByteString getFullNameBytes() {
                final Object ref = this.fullName_;
                if (ref instanceof String) {
                    final ByteString b = ByteString.copyFromUtf8((String)ref);
                    return (ByteString)(this.fullName_ = b);
                }
                return (ByteString)ref;
            }
            
            @Override
            public boolean hasType() {
                return (this.bitField0_ & 0x4) != 0x0;
            }
            
            @Override
            public String getType() {
                final Object ref = this.type_;
                if (ref instanceof String) {
                    return (String)ref;
                }
                final ByteString bs = (ByteString)ref;
                final String s = bs.toStringUtf8();
                if (bs.isValidUtf8()) {
                    this.type_ = s;
                }
                return s;
            }
            
            @Override
            public ByteString getTypeBytes() {
                final Object ref = this.type_;
                if (ref instanceof String) {
                    final ByteString b = ByteString.copyFromUtf8((String)ref);
                    return (ByteString)(this.type_ = b);
                }
                return (ByteString)ref;
            }
            
            @Override
            public boolean hasReserved() {
                return (this.bitField0_ & 0x8) != 0x0;
            }
            
            @Override
            public boolean getReserved() {
                return this.reserved_;
            }
            
            @Override
            public boolean hasRepeated() {
                return (this.bitField0_ & 0x10) != 0x0;
            }
            
            @Override
            public boolean getRepeated() {
                return this.repeated_;
            }
            
            @Override
            public final boolean isInitialized() {
                final byte isInitialized = this.memoizedIsInitialized;
                if (isInitialized == 1) {
                    return true;
                }
                if (isInitialized == 0) {
                    return false;
                }
                this.memoizedIsInitialized = 1;
                return true;
            }
            
            @Override
            public void writeTo(final CodedOutputStream output) throws IOException {
                if ((this.bitField0_ & 0x1) != 0x0) {
                    output.writeInt32(1, this.number_);
                }
                if ((this.bitField0_ & 0x2) != 0x0) {
                    GeneratedMessage.writeString(output, 2, this.fullName_);
                }
                if ((this.bitField0_ & 0x4) != 0x0) {
                    GeneratedMessage.writeString(output, 3, this.type_);
                }
                if ((this.bitField0_ & 0x8) != 0x0) {
                    output.writeBool(5, this.reserved_);
                }
                if ((this.bitField0_ & 0x10) != 0x0) {
                    output.writeBool(6, this.repeated_);
                }
                this.getUnknownFields().writeTo(output);
            }
            
            @Override
            public int getSerializedSize() {
                int size = this.memoizedSize;
                if (size != -1) {
                    return size;
                }
                size = 0;
                if ((this.bitField0_ & 0x1) != 0x0) {
                    size += CodedOutputStream.computeInt32Size(1, this.number_);
                }
                if ((this.bitField0_ & 0x2) != 0x0) {
                    size += GeneratedMessage.computeStringSize(2, this.fullName_);
                }
                if ((this.bitField0_ & 0x4) != 0x0) {
                    size += GeneratedMessage.computeStringSize(3, this.type_);
                }
                if ((this.bitField0_ & 0x8) != 0x0) {
                    size += CodedOutputStream.computeBoolSize(5, this.reserved_);
                }
                if ((this.bitField0_ & 0x10) != 0x0) {
                    size += CodedOutputStream.computeBoolSize(6, this.repeated_);
                }
                size += this.getUnknownFields().getSerializedSize();
                return this.memoizedSize = size;
            }
            
            @Override
            public boolean equals(final Object obj) {
                if (obj == this) {
                    return true;
                }
                if (!(obj instanceof Declaration)) {
                    return super.equals(obj);
                }
                final Declaration other = (Declaration)obj;
                return this.hasNumber() == other.hasNumber() && (!this.hasNumber() || this.getNumber() == other.getNumber()) && this.hasFullName() == other.hasFullName() && (!this.hasFullName() || this.getFullName().equals(other.getFullName())) && this.hasType() == other.hasType() && (!this.hasType() || this.getType().equals(other.getType())) && this.hasReserved() == other.hasReserved() && (!this.hasReserved() || this.getReserved() == other.getReserved()) && this.hasRepeated() == other.hasRepeated() && (!this.hasRepeated() || this.getRepeated() == other.getRepeated()) && this.getUnknownFields().equals(other.getUnknownFields());
            }
            
            @Override
            public int hashCode() {
                if (this.memoizedHashCode != 0) {
                    return this.memoizedHashCode;
                }
                int hash = 41;
                hash = 19 * hash + getDescriptor().hashCode();
                if (this.hasNumber()) {
                    hash = 37 * hash + 1;
                    hash = 53 * hash + this.getNumber();
                }
                if (this.hasFullName()) {
                    hash = 37 * hash + 2;
                    hash = 53 * hash + this.getFullName().hashCode();
                }
                if (this.hasType()) {
                    hash = 37 * hash + 3;
                    hash = 53 * hash + this.getType().hashCode();
                }
                if (this.hasReserved()) {
                    hash = 37 * hash + 5;
                    hash = 53 * hash + Internal.hashBoolean(this.getReserved());
                }
                if (this.hasRepeated()) {
                    hash = 37 * hash + 6;
                    hash = 53 * hash + Internal.hashBoolean(this.getRepeated());
                }
                hash = 29 * hash + this.getUnknownFields().hashCode();
                return this.memoizedHashCode = hash;
            }
            
            public static Declaration parseFrom(final ByteBuffer data) throws InvalidProtocolBufferException {
                return Declaration.PARSER.parseFrom(data);
            }
            
            public static Declaration parseFrom(final ByteBuffer data, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
                return Declaration.PARSER.parseFrom(data, extensionRegistry);
            }
            
            public static Declaration parseFrom(final ByteString data) throws InvalidProtocolBufferException {
                return Declaration.PARSER.parseFrom(data);
            }
            
            public static Declaration parseFrom(final ByteString data, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
                return Declaration.PARSER.parseFrom(data, extensionRegistry);
            }
            
            public static Declaration parseFrom(final byte[] data) throws InvalidProtocolBufferException {
                return Declaration.PARSER.parseFrom(data);
            }
            
            public static Declaration parseFrom(final byte[] data, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
                return Declaration.PARSER.parseFrom(data, extensionRegistry);
            }
            
            public static Declaration parseFrom(final InputStream input) throws IOException {
                return GeneratedMessage.parseWithIOException(Declaration.PARSER, input);
            }
            
            public static Declaration parseFrom(final InputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
                return GeneratedMessage.parseWithIOException(Declaration.PARSER, input, extensionRegistry);
            }
            
            public static Declaration parseDelimitedFrom(final InputStream input) throws IOException {
                return GeneratedMessage.parseDelimitedWithIOException(Declaration.PARSER, input);
            }
            
            public static Declaration parseDelimitedFrom(final InputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
                return GeneratedMessage.parseDelimitedWithIOException(Declaration.PARSER, input, extensionRegistry);
            }
            
            public static Declaration parseFrom(final CodedInputStream input) throws IOException {
                return GeneratedMessage.parseWithIOException(Declaration.PARSER, input);
            }
            
            public static Declaration parseFrom(final CodedInputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
                return GeneratedMessage.parseWithIOException(Declaration.PARSER, input, extensionRegistry);
            }
            
            @Override
            public Builder newBuilderForType() {
                return newBuilder();
            }
            
            public static Builder newBuilder() {
                return Declaration.DEFAULT_INSTANCE.toBuilder();
            }
            
            public static Builder newBuilder(final Declaration prototype) {
                return Declaration.DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
            }
            
            @Override
            public Builder toBuilder() {
                return (this == Declaration.DEFAULT_INSTANCE) ? new Builder() : new Builder().mergeFrom(this);
            }
            
            @Override
            protected Builder newBuilderForType(final BuilderParent parent) {
                final Builder builder = new Builder(parent);
                return builder;
            }
            
            public static Declaration getDefaultInstance() {
                return Declaration.DEFAULT_INSTANCE;
            }
            
            public static Parser<Declaration> parser() {
                return Declaration.PARSER;
            }
            
            @Override
            public Parser<Declaration> getParserForType() {
                return Declaration.PARSER;
            }
            
            @Override
            public Declaration getDefaultInstanceForType() {
                return Declaration.DEFAULT_INSTANCE;
            }
            
            static {
                RuntimeVersion.validateProtobufGencodeVersion(RuntimeVersion.RuntimeDomain.PUBLIC, 4, 33, 0, "", "Declaration");
                DEFAULT_INSTANCE = new Declaration();
                PARSER = new AbstractParser<Declaration>() {
                    @Override
                    public Declaration parsePartialFrom(final CodedInputStream input, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
                        final Builder builder = Declaration.newBuilder();
                        try {
                            builder.mergeFrom(input, extensionRegistry);
                        }
                        catch (final InvalidProtocolBufferException e) {
                            throw e.setUnfinishedMessage(builder.buildPartial());
                        }
                        catch (final UninitializedMessageException e2) {
                            throw e2.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
                        }
                        catch (final IOException e3) {
                            throw new InvalidProtocolBufferException(e3).setUnfinishedMessage(builder.buildPartial());
                        }
                        return builder.buildPartial();
                    }
                };
            }
            
            public static final class Builder extends GeneratedMessage.Builder<Builder> implements DeclarationOrBuilder
            {
                private int bitField0_;
                private int number_;
                private Object fullName_;
                private Object type_;
                private boolean reserved_;
                private boolean repeated_;
                
                public static final Descriptors.Descriptor getDescriptor() {
                    return DescriptorProtos.internal_static_google_protobuf_ExtensionRangeOptions_Declaration_descriptor;
                }
                
                @Override
                protected FieldAccessorTable internalGetFieldAccessorTable() {
                    return DescriptorProtos.internal_static_google_protobuf_ExtensionRangeOptions_Declaration_fieldAccessorTable.ensureFieldAccessorsInitialized(Declaration.class, Builder.class);
                }
                
                private Builder() {
                    this.fullName_ = "";
                    this.type_ = "";
                }
                
                private Builder(final BuilderParent parent) {
                    super(parent);
                    this.fullName_ = "";
                    this.type_ = "";
                }
                
                @Override
                public Builder clear() {
                    super.clear();
                    this.bitField0_ = 0;
                    this.number_ = 0;
                    this.fullName_ = "";
                    this.type_ = "";
                    this.reserved_ = false;
                    this.repeated_ = false;
                    return this;
                }
                
                @Override
                public Descriptors.Descriptor getDescriptorForType() {
                    return DescriptorProtos.internal_static_google_protobuf_ExtensionRangeOptions_Declaration_descriptor;
                }
                
                @Override
                public Declaration getDefaultInstanceForType() {
                    return Declaration.getDefaultInstance();
                }
                
                @Override
                public Declaration build() {
                    final Declaration result = this.buildPartial();
                    if (!result.isInitialized()) {
                        throw AbstractMessage.Builder.newUninitializedMessageException(result);
                    }
                    return result;
                }
                
                @Override
                public Declaration buildPartial() {
                    final Declaration result = new Declaration((GeneratedMessage.Builder)this);
                    if (this.bitField0_ != 0) {
                        this.buildPartial0(result);
                    }
                    this.onBuilt();
                    return result;
                }
                
                private void buildPartial0(final Declaration result) {
                    final int from_bitField0_ = this.bitField0_;
                    int to_bitField0_ = 0;
                    if ((from_bitField0_ & 0x1) != 0x0) {
                        result.number_ = this.number_;
                        to_bitField0_ |= 0x1;
                    }
                    if ((from_bitField0_ & 0x2) != 0x0) {
                        result.fullName_ = this.fullName_;
                        to_bitField0_ |= 0x2;
                    }
                    if ((from_bitField0_ & 0x4) != 0x0) {
                        result.type_ = this.type_;
                        to_bitField0_ |= 0x4;
                    }
                    if ((from_bitField0_ & 0x8) != 0x0) {
                        result.reserved_ = this.reserved_;
                        to_bitField0_ |= 0x8;
                    }
                    if ((from_bitField0_ & 0x10) != 0x0) {
                        result.repeated_ = this.repeated_;
                        to_bitField0_ |= 0x10;
                    }
                    result.bitField0_ |= to_bitField0_;
                }
                
                @Override
                public Builder mergeFrom(final Message other) {
                    if (other instanceof Declaration) {
                        return this.mergeFrom((Declaration)other);
                    }
                    super.mergeFrom(other);
                    return this;
                }
                
                public Builder mergeFrom(final Declaration other) {
                    if (other == Declaration.getDefaultInstance()) {
                        return this;
                    }
                    if (other.hasNumber()) {
                        this.setNumber(other.getNumber());
                    }
                    if (other.hasFullName()) {
                        this.fullName_ = other.fullName_;
                        this.bitField0_ |= 0x2;
                        this.onChanged();
                    }
                    if (other.hasType()) {
                        this.type_ = other.type_;
                        this.bitField0_ |= 0x4;
                        this.onChanged();
                    }
                    if (other.hasReserved()) {
                        this.setReserved(other.getReserved());
                    }
                    if (other.hasRepeated()) {
                        this.setRepeated(other.getRepeated());
                    }
                    this.mergeUnknownFields(other.getUnknownFields());
                    this.onChanged();
                    return this;
                }
                
                @Override
                public final boolean isInitialized() {
                    return true;
                }
                
                @Override
                public Builder mergeFrom(final CodedInputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
                    if (extensionRegistry == null) {
                        throw new NullPointerException();
                    }
                    try {
                        boolean done = false;
                        while (!done) {
                            final int tag = input.readTag();
                            switch (tag) {
                                case 0: {
                                    done = true;
                                    continue;
                                }
                                case 8: {
                                    this.number_ = input.readInt32();
                                    this.bitField0_ |= 0x1;
                                    continue;
                                }
                                case 18: {
                                    this.fullName_ = input.readBytes();
                                    this.bitField0_ |= 0x2;
                                    continue;
                                }
                                case 26: {
                                    this.type_ = input.readBytes();
                                    this.bitField0_ |= 0x4;
                                    continue;
                                }
                                case 40: {
                                    this.reserved_ = input.readBool();
                                    this.bitField0_ |= 0x8;
                                    continue;
                                }
                                case 48: {
                                    this.repeated_ = input.readBool();
                                    this.bitField0_ |= 0x10;
                                    continue;
                                }
                                default: {
                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                                        done = true;
                                        continue;
                                    }
                                    continue;
                                }
                            }
                        }
                    }
                    catch (final InvalidProtocolBufferException e) {
                        throw e.unwrapIOException();
                    }
                    finally {
                        this.onChanged();
                    }
                    return this;
                }
                
                @Override
                public boolean hasNumber() {
                    return (this.bitField0_ & 0x1) != 0x0;
                }
                
                @Override
                public int getNumber() {
                    return this.number_;
                }
                
                public Builder setNumber(final int value) {
                    this.number_ = value;
                    this.bitField0_ |= 0x1;
                    this.onChanged();
                    return this;
                }
                
                public Builder clearNumber() {
                    this.bitField0_ &= 0xFFFFFFFE;
                    this.number_ = 0;
                    this.onChanged();
                    return this;
                }
                
                @Override
                public boolean hasFullName() {
                    return (this.bitField0_ & 0x2) != 0x0;
                }
                
                @Override
                public String getFullName() {
                    final Object ref = this.fullName_;
                    if (!(ref instanceof String)) {
                        final ByteString bs = (ByteString)ref;
                        final String s = bs.toStringUtf8();
                        if (bs.isValidUtf8()) {
                            this.fullName_ = s;
                        }
                        return s;
                    }
                    return (String)ref;
                }
                
                @Override
                public ByteString getFullNameBytes() {
                    final Object ref = this.fullName_;
                    if (ref instanceof String) {
                        final ByteString b = ByteString.copyFromUtf8((String)ref);
                        return (ByteString)(this.fullName_ = b);
                    }
                    return (ByteString)ref;
                }
                
                public Builder setFullName(final String value) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.fullName_ = value;
                    this.bitField0_ |= 0x2;
                    this.onChanged();
                    return this;
                }
                
                public Builder clearFullName() {
                    this.fullName_ = Declaration.getDefaultInstance().getFullName();
                    this.bitField0_ &= 0xFFFFFFFD;
                    this.onChanged();
                    return this;
                }
                
                public Builder setFullNameBytes(final ByteString value) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.fullName_ = value;
                    this.bitField0_ |= 0x2;
                    this.onChanged();
                    return this;
                }
                
                @Override
                public boolean hasType() {
                    return (this.bitField0_ & 0x4) != 0x0;
                }
                
                @Override
                public String getType() {
                    final Object ref = this.type_;
                    if (!(ref instanceof String)) {
                        final ByteString bs = (ByteString)ref;
                        final String s = bs.toStringUtf8();
                        if (bs.isValidUtf8()) {
                            this.type_ = s;
                        }
                        return s;
                    }
                    return (String)ref;
                }
                
                @Override
                public ByteString getTypeBytes() {
                    final Object ref = this.type_;
                    if (ref instanceof String) {
                        final ByteString b = ByteString.copyFromUtf8((String)ref);
                        return (ByteString)(this.type_ = b);
                    }
                    return (ByteString)ref;
                }
                
                public Builder setType(final String value) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.type_ = value;
                    this.bitField0_ |= 0x4;
                    this.onChanged();
                    return this;
                }
                
                public Builder clearType() {
                    this.type_ = Declaration.getDefaultInstance().getType();
                    this.bitField0_ &= 0xFFFFFFFB;
                    this.onChanged();
                    return this;
                }
                
                public Builder setTypeBytes(final ByteString value) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.type_ = value;
                    this.bitField0_ |= 0x4;
                    this.onChanged();
                    return this;
                }
                
                @Override
                public boolean hasReserved() {
                    return (this.bitField0_ & 0x8) != 0x0;
                }
                
                @Override
                public boolean getReserved() {
                    return this.reserved_;
                }
                
                public Builder setReserved(final boolean value) {
                    this.reserved_ = value;
                    this.bitField0_ |= 0x8;
                    this.onChanged();
                    return this;
                }
                
                public Builder clearReserved() {
                    this.bitField0_ &= 0xFFFFFFF7;
                    this.reserved_ = false;
                    this.onChanged();
                    return this;
                }
                
                @Override
                public boolean hasRepeated() {
                    return (this.bitField0_ & 0x10) != 0x0;
                }
                
                @Override
                public boolean getRepeated() {
                    return this.repeated_;
                }
                
                public Builder setRepeated(final boolean value) {
                    this.repeated_ = value;
                    this.bitField0_ |= 0x10;
                    this.onChanged();
                    return this;
                }
                
                public Builder clearRepeated() {
                    this.bitField0_ &= 0xFFFFFFEF;
                    this.repeated_ = false;
                    this.onChanged();
                    return this;
                }
            }
        }
        
        public static final class Builder extends ExtendableBuilder<ExtensionRangeOptions, Builder> implements ExtensionRangeOptionsOrBuilder
        {
            private int bitField0_;
            private List<UninterpretedOption> uninterpretedOption_;
            private RepeatedFieldBuilder<UninterpretedOption, UninterpretedOption.Builder, UninterpretedOptionOrBuilder> uninterpretedOptionBuilder_;
            private List<Declaration> declaration_;
            private RepeatedFieldBuilder<Declaration, Declaration.Builder, DeclarationOrBuilder> declarationBuilder_;
            private FeatureSet features_;
            private SingleFieldBuilder<FeatureSet, FeatureSet.Builder, FeatureSetOrBuilder> featuresBuilder_;
            private int verification_;
            
            public static final Descriptors.Descriptor getDescriptor() {
                return DescriptorProtos.internal_static_google_protobuf_ExtensionRangeOptions_descriptor;
            }
            
            @Override
            protected FieldAccessorTable internalGetFieldAccessorTable() {
                return DescriptorProtos.internal_static_google_protobuf_ExtensionRangeOptions_fieldAccessorTable.ensureFieldAccessorsInitialized(ExtensionRangeOptions.class, Builder.class);
            }
            
            private Builder() {
                this.uninterpretedOption_ = Collections.emptyList();
                this.declaration_ = Collections.emptyList();
                this.verification_ = 1;
                this.maybeForceBuilderInitialization();
            }
            
            private Builder(final BuilderParent parent) {
                super(parent);
                this.uninterpretedOption_ = Collections.emptyList();
                this.declaration_ = Collections.emptyList();
                this.verification_ = 1;
                this.maybeForceBuilderInitialization();
            }
            
            private void maybeForceBuilderInitialization() {
                if (GeneratedMessage.alwaysUseFieldBuilders) {
                    this.internalGetUninterpretedOptionFieldBuilder();
                    this.internalGetDeclarationFieldBuilder();
                    this.internalGetFeaturesFieldBuilder();
                }
            }
            
            @Override
            public Builder clear() {
                super.clear();
                this.bitField0_ = 0;
                if (this.uninterpretedOptionBuilder_ == null) {
                    this.uninterpretedOption_ = Collections.emptyList();
                }
                else {
                    this.uninterpretedOption_ = null;
                    this.uninterpretedOptionBuilder_.clear();
                }
                this.bitField0_ &= 0xFFFFFFFE;
                if (this.declarationBuilder_ == null) {
                    this.declaration_ = Collections.emptyList();
                }
                else {
                    this.declaration_ = null;
                    this.declarationBuilder_.clear();
                }
                this.bitField0_ &= 0xFFFFFFFD;
                this.features_ = null;
                if (this.featuresBuilder_ != null) {
                    this.featuresBuilder_.dispose();
                    this.featuresBuilder_ = null;
                }
                this.verification_ = 1;
                return this;
            }
            
            @Override
            public Descriptors.Descriptor getDescriptorForType() {
                return DescriptorProtos.internal_static_google_protobuf_ExtensionRangeOptions_descriptor;
            }
            
            @Override
            public ExtensionRangeOptions getDefaultInstanceForType() {
                return ExtensionRangeOptions.getDefaultInstance();
            }
            
            @Override
            public ExtensionRangeOptions build() {
                final ExtensionRangeOptions result = this.buildPartial();
                if (!result.isInitialized()) {
                    throw AbstractMessage.Builder.newUninitializedMessageException(result);
                }
                return result;
            }
            
            @Override
            public ExtensionRangeOptions buildPartial() {
                final ExtensionRangeOptions result = new ExtensionRangeOptions((ExtendableBuilder)this);
                this.buildPartialRepeatedFields(result);
                if (this.bitField0_ != 0) {
                    this.buildPartial0(result);
                }
                this.onBuilt();
                return result;
            }
            
            private void buildPartialRepeatedFields(final ExtensionRangeOptions result) {
                if (this.uninterpretedOptionBuilder_ == null) {
                    if ((this.bitField0_ & 0x1) != 0x0) {
                        this.uninterpretedOption_ = Collections.unmodifiableList((List<? extends UninterpretedOption>)this.uninterpretedOption_);
                        this.bitField0_ &= 0xFFFFFFFE;
                    }
                    result.uninterpretedOption_ = this.uninterpretedOption_;
                }
                else {
                    result.uninterpretedOption_ = this.uninterpretedOptionBuilder_.build();
                }
                if (this.declarationBuilder_ == null) {
                    if ((this.bitField0_ & 0x2) != 0x0) {
                        this.declaration_ = Collections.unmodifiableList((List<? extends Declaration>)this.declaration_);
                        this.bitField0_ &= 0xFFFFFFFD;
                    }
                    result.declaration_ = this.declaration_;
                }
                else {
                    result.declaration_ = this.declarationBuilder_.build();
                }
            }
            
            private void buildPartial0(final ExtensionRangeOptions result) {
                final int from_bitField0_ = this.bitField0_;
                int to_bitField0_ = 0;
                if ((from_bitField0_ & 0x4) != 0x0) {
                    result.features_ = ((this.featuresBuilder_ == null) ? this.features_ : this.featuresBuilder_.build());
                    to_bitField0_ |= 0x1;
                }
                if ((from_bitField0_ & 0x8) != 0x0) {
                    result.verification_ = this.verification_;
                    to_bitField0_ |= 0x2;
                }
                result.bitField0_ |= to_bitField0_;
            }
            
            public <Type> Builder setExtension(final GeneratedExtension<ExtensionRangeOptions, Type> extension, final Type value) {
                return super.setExtension(extension, value);
            }
            
            public <Type> Builder setExtension(final GeneratedExtension<ExtensionRangeOptions, List<Type>> extension, final int index, final Type value) {
                return super.setExtension(extension, index, value);
            }
            
            public <Type> Builder addExtension(final GeneratedExtension<ExtensionRangeOptions, List<Type>> extension, final Type value) {
                return super.addExtension(extension, value);
            }
            
            public <Type> Builder clearExtension(final GeneratedExtension<ExtensionRangeOptions, Type> extension) {
                return super.clearExtension(extension);
            }
            
            @Override
            public Builder mergeFrom(final Message other) {
                if (other instanceof ExtensionRangeOptions) {
                    return this.mergeFrom((ExtensionRangeOptions)other);
                }
                super.mergeFrom(other);
                return this;
            }
            
            public Builder mergeFrom(final ExtensionRangeOptions other) {
                if (other == ExtensionRangeOptions.getDefaultInstance()) {
                    return this;
                }
                if (this.uninterpretedOptionBuilder_ == null) {
                    if (!other.uninterpretedOption_.isEmpty()) {
                        if (this.uninterpretedOption_.isEmpty()) {
                            this.uninterpretedOption_ = other.uninterpretedOption_;
                            this.bitField0_ &= 0xFFFFFFFE;
                        }
                        else {
                            this.ensureUninterpretedOptionIsMutable();
                            this.uninterpretedOption_.addAll(other.uninterpretedOption_);
                        }
                        this.onChanged();
                    }
                }
                else if (!other.uninterpretedOption_.isEmpty()) {
                    if (this.uninterpretedOptionBuilder_.isEmpty()) {
                        this.uninterpretedOptionBuilder_.dispose();
                        this.uninterpretedOptionBuilder_ = null;
                        this.uninterpretedOption_ = other.uninterpretedOption_;
                        this.bitField0_ &= 0xFFFFFFFE;
                        this.uninterpretedOptionBuilder_ = (GeneratedMessage.alwaysUseFieldBuilders ? this.internalGetUninterpretedOptionFieldBuilder() : null);
                    }
                    else {
                        this.uninterpretedOptionBuilder_.addAllMessages(other.uninterpretedOption_);
                    }
                }
                if (this.declarationBuilder_ == null) {
                    if (!other.declaration_.isEmpty()) {
                        if (this.declaration_.isEmpty()) {
                            this.declaration_ = other.declaration_;
                            this.bitField0_ &= 0xFFFFFFFD;
                        }
                        else {
                            this.ensureDeclarationIsMutable();
                            this.declaration_.addAll(other.declaration_);
                        }
                        this.onChanged();
                    }
                }
                else if (!other.declaration_.isEmpty()) {
                    if (this.declarationBuilder_.isEmpty()) {
                        this.declarationBuilder_.dispose();
                        this.declarationBuilder_ = null;
                        this.declaration_ = other.declaration_;
                        this.bitField0_ &= 0xFFFFFFFD;
                        this.declarationBuilder_ = (GeneratedMessage.alwaysUseFieldBuilders ? this.internalGetDeclarationFieldBuilder() : null);
                    }
                    else {
                        this.declarationBuilder_.addAllMessages(other.declaration_);
                    }
                }
                if (other.hasFeatures()) {
                    this.mergeFeatures(other.getFeatures());
                }
                if (other.hasVerification()) {
                    this.setVerification(other.getVerification());
                }
                this.mergeExtensionFields(other);
                this.mergeUnknownFields(other.getUnknownFields());
                this.onChanged();
                return this;
            }
            
            @Override
            public final boolean isInitialized() {
                for (int i = 0; i < this.getUninterpretedOptionCount(); ++i) {
                    if (!this.getUninterpretedOption(i).isInitialized()) {
                        return false;
                    }
                }
                return (!this.hasFeatures() || this.getFeatures().isInitialized()) && this.extensionsAreInitialized();
            }
            
            @Override
            public Builder mergeFrom(final CodedInputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
                if (extensionRegistry == null) {
                    throw new NullPointerException();
                }
                try {
                    boolean done = false;
                    while (!done) {
                        final int tag = input.readTag();
                        switch (tag) {
                            case 0: {
                                done = true;
                                continue;
                            }
                            case 18: {
                                final Declaration m = input.readMessage(Declaration.parser(), extensionRegistry);
                                if (this.declarationBuilder_ == null) {
                                    this.ensureDeclarationIsMutable();
                                    this.declaration_.add(m);
                                    continue;
                                }
                                this.declarationBuilder_.addMessage(m);
                                continue;
                            }
                            case 24: {
                                final int tmpRaw = input.readEnum();
                                final VerificationState tmpValue = VerificationState.forNumber(tmpRaw);
                                if (tmpValue == null) {
                                    this.mergeUnknownVarintField(3, tmpRaw);
                                    continue;
                                }
                                this.verification_ = tmpRaw;
                                this.bitField0_ |= 0x8;
                                continue;
                            }
                            case 402: {
                                input.readMessage(this.internalGetFeaturesFieldBuilder().getBuilder(), extensionRegistry);
                                this.bitField0_ |= 0x4;
                                continue;
                            }
                            case 7994: {
                                final UninterpretedOption i = input.readMessage(UninterpretedOption.parser(), extensionRegistry);
                                if (this.uninterpretedOptionBuilder_ == null) {
                                    this.ensureUninterpretedOptionIsMutable();
                                    this.uninterpretedOption_.add(i);
                                    continue;
                                }
                                this.uninterpretedOptionBuilder_.addMessage(i);
                                continue;
                            }
                            default: {
                                if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                                    done = true;
                                    continue;
                                }
                                continue;
                            }
                        }
                    }
                }
                catch (final InvalidProtocolBufferException e) {
                    throw e.unwrapIOException();
                }
                finally {
                    this.onChanged();
                }
                return this;
            }
            
            private void ensureUninterpretedOptionIsMutable() {
                if ((this.bitField0_ & 0x1) == 0x0) {
                    this.uninterpretedOption_ = new ArrayList<UninterpretedOption>(this.uninterpretedOption_);
                    this.bitField0_ |= 0x1;
                }
            }
            
            @Override
            public List<UninterpretedOption> getUninterpretedOptionList() {
                if (this.uninterpretedOptionBuilder_ == null) {
                    return Collections.unmodifiableList((List<? extends UninterpretedOption>)this.uninterpretedOption_);
                }
                return this.uninterpretedOptionBuilder_.getMessageList();
            }
            
            @Override
            public int getUninterpretedOptionCount() {
                if (this.uninterpretedOptionBuilder_ == null) {
                    return this.uninterpretedOption_.size();
                }
                return this.uninterpretedOptionBuilder_.getCount();
            }
            
            @Override
            public UninterpretedOption getUninterpretedOption(final int index) {
                if (this.uninterpretedOptionBuilder_ == null) {
                    return this.uninterpretedOption_.get(index);
                }
                return this.uninterpretedOptionBuilder_.getMessage(index);
            }
            
            public Builder setUninterpretedOption(final int index, final UninterpretedOption value) {
                if (this.uninterpretedOptionBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.ensureUninterpretedOptionIsMutable();
                    this.uninterpretedOption_.set(index, value);
                    this.onChanged();
                }
                else {
                    this.uninterpretedOptionBuilder_.setMessage(index, value);
                }
                return this;
            }
            
            public Builder setUninterpretedOption(final int index, final UninterpretedOption.Builder builderForValue) {
                if (this.uninterpretedOptionBuilder_ == null) {
                    this.ensureUninterpretedOptionIsMutable();
                    this.uninterpretedOption_.set(index, builderForValue.build());
                    this.onChanged();
                }
                else {
                    this.uninterpretedOptionBuilder_.setMessage(index, builderForValue.build());
                }
                return this;
            }
            
            public Builder addUninterpretedOption(final UninterpretedOption value) {
                if (this.uninterpretedOptionBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.ensureUninterpretedOptionIsMutable();
                    this.uninterpretedOption_.add(value);
                    this.onChanged();
                }
                else {
                    this.uninterpretedOptionBuilder_.addMessage(value);
                }
                return this;
            }
            
            public Builder addUninterpretedOption(final int index, final UninterpretedOption value) {
                if (this.uninterpretedOptionBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.ensureUninterpretedOptionIsMutable();
                    this.uninterpretedOption_.add(index, value);
                    this.onChanged();
                }
                else {
                    this.uninterpretedOptionBuilder_.addMessage(index, value);
                }
                return this;
            }
            
            public Builder addUninterpretedOption(final UninterpretedOption.Builder builderForValue) {
                if (this.uninterpretedOptionBuilder_ == null) {
                    this.ensureUninterpretedOptionIsMutable();
                    this.uninterpretedOption_.add(builderForValue.build());
                    this.onChanged();
                }
                else {
                    this.uninterpretedOptionBuilder_.addMessage(builderForValue.build());
                }
                return this;
            }
            
            public Builder addUninterpretedOption(final int index, final UninterpretedOption.Builder builderForValue) {
                if (this.uninterpretedOptionBuilder_ == null) {
                    this.ensureUninterpretedOptionIsMutable();
                    this.uninterpretedOption_.add(index, builderForValue.build());
                    this.onChanged();
                }
                else {
                    this.uninterpretedOptionBuilder_.addMessage(index, builderForValue.build());
                }
                return this;
            }
            
            public Builder addAllUninterpretedOption(final Iterable<? extends UninterpretedOption> values) {
                if (this.uninterpretedOptionBuilder_ == null) {
                    this.ensureUninterpretedOptionIsMutable();
                    AbstractMessageLite.Builder.addAll(values, this.uninterpretedOption_);
                    this.onChanged();
                }
                else {
                    this.uninterpretedOptionBuilder_.addAllMessages(values);
                }
                return this;
            }
            
            public Builder clearUninterpretedOption() {
                if (this.uninterpretedOptionBuilder_ == null) {
                    this.uninterpretedOption_ = Collections.emptyList();
                    this.bitField0_ &= 0xFFFFFFFE;
                    this.onChanged();
                }
                else {
                    this.uninterpretedOptionBuilder_.clear();
                }
                return this;
            }
            
            public Builder removeUninterpretedOption(final int index) {
                if (this.uninterpretedOptionBuilder_ == null) {
                    this.ensureUninterpretedOptionIsMutable();
                    this.uninterpretedOption_.remove(index);
                    this.onChanged();
                }
                else {
                    this.uninterpretedOptionBuilder_.remove(index);
                }
                return this;
            }
            
            public UninterpretedOption.Builder getUninterpretedOptionBuilder(final int index) {
                return this.internalGetUninterpretedOptionFieldBuilder().getBuilder(index);
            }
            
            @Override
            public UninterpretedOptionOrBuilder getUninterpretedOptionOrBuilder(final int index) {
                if (this.uninterpretedOptionBuilder_ == null) {
                    return this.uninterpretedOption_.get(index);
                }
                return this.uninterpretedOptionBuilder_.getMessageOrBuilder(index);
            }
            
            @Override
            public List<? extends UninterpretedOptionOrBuilder> getUninterpretedOptionOrBuilderList() {
                if (this.uninterpretedOptionBuilder_ != null) {
                    return this.uninterpretedOptionBuilder_.getMessageOrBuilderList();
                }
                return Collections.unmodifiableList((List<? extends UninterpretedOptionOrBuilder>)this.uninterpretedOption_);
            }
            
            public UninterpretedOption.Builder addUninterpretedOptionBuilder() {
                return this.internalGetUninterpretedOptionFieldBuilder().addBuilder(UninterpretedOption.getDefaultInstance());
            }
            
            public UninterpretedOption.Builder addUninterpretedOptionBuilder(final int index) {
                return this.internalGetUninterpretedOptionFieldBuilder().addBuilder(index, UninterpretedOption.getDefaultInstance());
            }
            
            public List<UninterpretedOption.Builder> getUninterpretedOptionBuilderList() {
                return this.internalGetUninterpretedOptionFieldBuilder().getBuilderList();
            }
            
            private RepeatedFieldBuilder<UninterpretedOption, UninterpretedOption.Builder, UninterpretedOptionOrBuilder> internalGetUninterpretedOptionFieldBuilder() {
                if (this.uninterpretedOptionBuilder_ == null) {
                    this.uninterpretedOptionBuilder_ = new RepeatedFieldBuilder<UninterpretedOption, UninterpretedOption.Builder, UninterpretedOptionOrBuilder>(this.uninterpretedOption_, (this.bitField0_ & 0x1) != 0x0, this.getParentForChildren(), this.isClean());
                    this.uninterpretedOption_ = null;
                }
                return this.uninterpretedOptionBuilder_;
            }
            
            private void ensureDeclarationIsMutable() {
                if ((this.bitField0_ & 0x2) == 0x0) {
                    this.declaration_ = new ArrayList<Declaration>(this.declaration_);
                    this.bitField0_ |= 0x2;
                }
            }
            
            @Override
            public List<Declaration> getDeclarationList() {
                if (this.declarationBuilder_ == null) {
                    return Collections.unmodifiableList((List<? extends Declaration>)this.declaration_);
                }
                return this.declarationBuilder_.getMessageList();
            }
            
            @Override
            public int getDeclarationCount() {
                if (this.declarationBuilder_ == null) {
                    return this.declaration_.size();
                }
                return this.declarationBuilder_.getCount();
            }
            
            @Override
            public Declaration getDeclaration(final int index) {
                if (this.declarationBuilder_ == null) {
                    return this.declaration_.get(index);
                }
                return this.declarationBuilder_.getMessage(index);
            }
            
            public Builder setDeclaration(final int index, final Declaration value) {
                if (this.declarationBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.ensureDeclarationIsMutable();
                    this.declaration_.set(index, value);
                    this.onChanged();
                }
                else {
                    this.declarationBuilder_.setMessage(index, value);
                }
                return this;
            }
            
            public Builder setDeclaration(final int index, final Declaration.Builder builderForValue) {
                if (this.declarationBuilder_ == null) {
                    this.ensureDeclarationIsMutable();
                    this.declaration_.set(index, builderForValue.build());
                    this.onChanged();
                }
                else {
                    this.declarationBuilder_.setMessage(index, builderForValue.build());
                }
                return this;
            }
            
            public Builder addDeclaration(final Declaration value) {
                if (this.declarationBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.ensureDeclarationIsMutable();
                    this.declaration_.add(value);
                    this.onChanged();
                }
                else {
                    this.declarationBuilder_.addMessage(value);
                }
                return this;
            }
            
            public Builder addDeclaration(final int index, final Declaration value) {
                if (this.declarationBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.ensureDeclarationIsMutable();
                    this.declaration_.add(index, value);
                    this.onChanged();
                }
                else {
                    this.declarationBuilder_.addMessage(index, value);
                }
                return this;
            }
            
            public Builder addDeclaration(final Declaration.Builder builderForValue) {
                if (this.declarationBuilder_ == null) {
                    this.ensureDeclarationIsMutable();
                    this.declaration_.add(builderForValue.build());
                    this.onChanged();
                }
                else {
                    this.declarationBuilder_.addMessage(builderForValue.build());
                }
                return this;
            }
            
            public Builder addDeclaration(final int index, final Declaration.Builder builderForValue) {
                if (this.declarationBuilder_ == null) {
                    this.ensureDeclarationIsMutable();
                    this.declaration_.add(index, builderForValue.build());
                    this.onChanged();
                }
                else {
                    this.declarationBuilder_.addMessage(index, builderForValue.build());
                }
                return this;
            }
            
            public Builder addAllDeclaration(final Iterable<? extends Declaration> values) {
                if (this.declarationBuilder_ == null) {
                    this.ensureDeclarationIsMutable();
                    AbstractMessageLite.Builder.addAll(values, this.declaration_);
                    this.onChanged();
                }
                else {
                    this.declarationBuilder_.addAllMessages(values);
                }
                return this;
            }
            
            public Builder clearDeclaration() {
                if (this.declarationBuilder_ == null) {
                    this.declaration_ = Collections.emptyList();
                    this.bitField0_ &= 0xFFFFFFFD;
                    this.onChanged();
                }
                else {
                    this.declarationBuilder_.clear();
                }
                return this;
            }
            
            public Builder removeDeclaration(final int index) {
                if (this.declarationBuilder_ == null) {
                    this.ensureDeclarationIsMutable();
                    this.declaration_.remove(index);
                    this.onChanged();
                }
                else {
                    this.declarationBuilder_.remove(index);
                }
                return this;
            }
            
            public Declaration.Builder getDeclarationBuilder(final int index) {
                return this.internalGetDeclarationFieldBuilder().getBuilder(index);
            }
            
            @Override
            public DeclarationOrBuilder getDeclarationOrBuilder(final int index) {
                if (this.declarationBuilder_ == null) {
                    return this.declaration_.get(index);
                }
                return this.declarationBuilder_.getMessageOrBuilder(index);
            }
            
            @Override
            public List<? extends DeclarationOrBuilder> getDeclarationOrBuilderList() {
                if (this.declarationBuilder_ != null) {
                    return this.declarationBuilder_.getMessageOrBuilderList();
                }
                return Collections.unmodifiableList((List<? extends DeclarationOrBuilder>)this.declaration_);
            }
            
            public Declaration.Builder addDeclarationBuilder() {
                return this.internalGetDeclarationFieldBuilder().addBuilder(Declaration.getDefaultInstance());
            }
            
            public Declaration.Builder addDeclarationBuilder(final int index) {
                return this.internalGetDeclarationFieldBuilder().addBuilder(index, Declaration.getDefaultInstance());
            }
            
            public List<Declaration.Builder> getDeclarationBuilderList() {
                return this.internalGetDeclarationFieldBuilder().getBuilderList();
            }
            
            private RepeatedFieldBuilder<Declaration, Declaration.Builder, DeclarationOrBuilder> internalGetDeclarationFieldBuilder() {
                if (this.declarationBuilder_ == null) {
                    this.declarationBuilder_ = new RepeatedFieldBuilder<Declaration, Declaration.Builder, DeclarationOrBuilder>(this.declaration_, (this.bitField0_ & 0x2) != 0x0, this.getParentForChildren(), this.isClean());
                    this.declaration_ = null;
                }
                return this.declarationBuilder_;
            }
            
            @Override
            public boolean hasFeatures() {
                return (this.bitField0_ & 0x4) != 0x0;
            }
            
            @Override
            public FeatureSet getFeatures() {
                if (this.featuresBuilder_ == null) {
                    return (this.features_ == null) ? FeatureSet.getDefaultInstance() : this.features_;
                }
                return this.featuresBuilder_.getMessage();
            }
            
            public Builder setFeatures(final FeatureSet value) {
                if (this.featuresBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.features_ = value;
                }
                else {
                    this.featuresBuilder_.setMessage(value);
                }
                this.bitField0_ |= 0x4;
                this.onChanged();
                return this;
            }
            
            public Builder setFeatures(final FeatureSet.Builder builderForValue) {
                if (this.featuresBuilder_ == null) {
                    this.features_ = builderForValue.build();
                }
                else {
                    this.featuresBuilder_.setMessage(builderForValue.build());
                }
                this.bitField0_ |= 0x4;
                this.onChanged();
                return this;
            }
            
            public Builder mergeFeatures(final FeatureSet value) {
                if (this.featuresBuilder_ == null) {
                    if ((this.bitField0_ & 0x4) != 0x0 && this.features_ != null && this.features_ != FeatureSet.getDefaultInstance()) {
                        this.getFeaturesBuilder().mergeFrom(value);
                    }
                    else {
                        this.features_ = value;
                    }
                }
                else {
                    this.featuresBuilder_.mergeFrom(value);
                }
                if (this.features_ != null) {
                    this.bitField0_ |= 0x4;
                    this.onChanged();
                }
                return this;
            }
            
            public Builder clearFeatures() {
                this.bitField0_ &= 0xFFFFFFFB;
                this.features_ = null;
                if (this.featuresBuilder_ != null) {
                    this.featuresBuilder_.dispose();
                    this.featuresBuilder_ = null;
                }
                this.onChanged();
                return this;
            }
            
            public FeatureSet.Builder getFeaturesBuilder() {
                this.bitField0_ |= 0x4;
                this.onChanged();
                return this.internalGetFeaturesFieldBuilder().getBuilder();
            }
            
            @Override
            public FeatureSetOrBuilder getFeaturesOrBuilder() {
                if (this.featuresBuilder_ != null) {
                    return this.featuresBuilder_.getMessageOrBuilder();
                }
                return (this.features_ == null) ? FeatureSet.getDefaultInstance() : this.features_;
            }
            
            private SingleFieldBuilder<FeatureSet, FeatureSet.Builder, FeatureSetOrBuilder> internalGetFeaturesFieldBuilder() {
                if (this.featuresBuilder_ == null) {
                    this.featuresBuilder_ = new SingleFieldBuilder<FeatureSet, FeatureSet.Builder, FeatureSetOrBuilder>(this.getFeatures(), this.getParentForChildren(), this.isClean());
                    this.features_ = null;
                }
                return this.featuresBuilder_;
            }
            
            @Override
            public boolean hasVerification() {
                return (this.bitField0_ & 0x8) != 0x0;
            }
            
            @Override
            public VerificationState getVerification() {
                final VerificationState result = VerificationState.forNumber(this.verification_);
                return (result == null) ? VerificationState.UNVERIFIED : result;
            }
            
            public Builder setVerification(final VerificationState value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                this.bitField0_ |= 0x8;
                this.verification_ = value.getNumber();
                this.onChanged();
                return this;
            }
            
            public Builder clearVerification() {
                this.bitField0_ &= 0xFFFFFFF7;
                this.verification_ = 1;
                this.onChanged();
                return this;
            }
        }
        
        public interface DeclarationOrBuilder extends MessageOrBuilder
        {
            boolean hasNumber();
            
            int getNumber();
            
            boolean hasFullName();
            
            String getFullName();
            
            ByteString getFullNameBytes();
            
            boolean hasType();
            
            String getType();
            
            ByteString getTypeBytes();
            
            boolean hasReserved();
            
            boolean getReserved();
            
            boolean hasRepeated();
            
            boolean getRepeated();
        }
    }
    
    public static final class FieldDescriptorProto extends GeneratedMessage implements FieldDescriptorProtoOrBuilder
    {
        private static final long serialVersionUID = 0L;
        private int bitField0_;
        public static final int NAME_FIELD_NUMBER = 1;
        private volatile Object name_;
        public static final int NUMBER_FIELD_NUMBER = 3;
        private int number_;
        public static final int LABEL_FIELD_NUMBER = 4;
        private int label_;
        public static final int TYPE_FIELD_NUMBER = 5;
        private int type_;
        public static final int TYPE_NAME_FIELD_NUMBER = 6;
        private volatile Object typeName_;
        public static final int EXTENDEE_FIELD_NUMBER = 2;
        private volatile Object extendee_;
        public static final int DEFAULT_VALUE_FIELD_NUMBER = 7;
        private volatile Object defaultValue_;
        public static final int ONEOF_INDEX_FIELD_NUMBER = 9;
        private int oneofIndex_;
        public static final int JSON_NAME_FIELD_NUMBER = 10;
        private volatile Object jsonName_;
        public static final int OPTIONS_FIELD_NUMBER = 8;
        private FieldOptions options_;
        public static final int PROTO3_OPTIONAL_FIELD_NUMBER = 17;
        private boolean proto3Optional_;
        private byte memoizedIsInitialized;
        private static final FieldDescriptorProto DEFAULT_INSTANCE;
        private static final Parser<FieldDescriptorProto> PARSER;
        
        private FieldDescriptorProto(final GeneratedMessage.Builder<?> builder) {
            super(builder);
            this.name_ = "";
            this.number_ = 0;
            this.label_ = 1;
            this.type_ = 1;
            this.typeName_ = "";
            this.extendee_ = "";
            this.defaultValue_ = "";
            this.oneofIndex_ = 0;
            this.jsonName_ = "";
            this.proto3Optional_ = false;
            this.memoizedIsInitialized = -1;
        }
        
        private FieldDescriptorProto() {
            this.name_ = "";
            this.number_ = 0;
            this.label_ = 1;
            this.type_ = 1;
            this.typeName_ = "";
            this.extendee_ = "";
            this.defaultValue_ = "";
            this.oneofIndex_ = 0;
            this.jsonName_ = "";
            this.proto3Optional_ = false;
            this.memoizedIsInitialized = -1;
            this.name_ = "";
            this.label_ = 1;
            this.type_ = 1;
            this.typeName_ = "";
            this.extendee_ = "";
            this.defaultValue_ = "";
            this.jsonName_ = "";
        }
        
        public static final Descriptors.Descriptor getDescriptor() {
            return DescriptorProtos.internal_static_google_protobuf_FieldDescriptorProto_descriptor;
        }
        
        @Override
        protected FieldAccessorTable internalGetFieldAccessorTable() {
            return DescriptorProtos.internal_static_google_protobuf_FieldDescriptorProto_fieldAccessorTable.ensureFieldAccessorsInitialized(FieldDescriptorProto.class, Builder.class);
        }
        
        @Override
        public boolean hasName() {
            return (this.bitField0_ & 0x1) != 0x0;
        }
        
        @Override
        public String getName() {
            final Object ref = this.name_;
            if (ref instanceof String) {
                return (String)ref;
            }
            final ByteString bs = (ByteString)ref;
            final String s = bs.toStringUtf8();
            if (bs.isValidUtf8()) {
                this.name_ = s;
            }
            return s;
        }
        
        @Override
        public ByteString getNameBytes() {
            final Object ref = this.name_;
            if (ref instanceof String) {
                final ByteString b = ByteString.copyFromUtf8((String)ref);
                return (ByteString)(this.name_ = b);
            }
            return (ByteString)ref;
        }
        
        @Override
        public boolean hasNumber() {
            return (this.bitField0_ & 0x2) != 0x0;
        }
        
        @Override
        public int getNumber() {
            return this.number_;
        }
        
        @Override
        public boolean hasLabel() {
            return (this.bitField0_ & 0x4) != 0x0;
        }
        
        @Override
        public Label getLabel() {
            final Label result = Label.forNumber(this.label_);
            return (result == null) ? Label.LABEL_OPTIONAL : result;
        }
        
        @Override
        public boolean hasType() {
            return (this.bitField0_ & 0x8) != 0x0;
        }
        
        @Override
        public Type getType() {
            final Type result = Type.forNumber(this.type_);
            return (result == null) ? Type.TYPE_DOUBLE : result;
        }
        
        @Override
        public boolean hasTypeName() {
            return (this.bitField0_ & 0x10) != 0x0;
        }
        
        @Override
        public String getTypeName() {
            final Object ref = this.typeName_;
            if (ref instanceof String) {
                return (String)ref;
            }
            final ByteString bs = (ByteString)ref;
            final String s = bs.toStringUtf8();
            if (bs.isValidUtf8()) {
                this.typeName_ = s;
            }
            return s;
        }
        
        @Override
        public ByteString getTypeNameBytes() {
            final Object ref = this.typeName_;
            if (ref instanceof String) {
                final ByteString b = ByteString.copyFromUtf8((String)ref);
                return (ByteString)(this.typeName_ = b);
            }
            return (ByteString)ref;
        }
        
        @Override
        public boolean hasExtendee() {
            return (this.bitField0_ & 0x20) != 0x0;
        }
        
        @Override
        public String getExtendee() {
            final Object ref = this.extendee_;
            if (ref instanceof String) {
                return (String)ref;
            }
            final ByteString bs = (ByteString)ref;
            final String s = bs.toStringUtf8();
            if (bs.isValidUtf8()) {
                this.extendee_ = s;
            }
            return s;
        }
        
        @Override
        public ByteString getExtendeeBytes() {
            final Object ref = this.extendee_;
            if (ref instanceof String) {
                final ByteString b = ByteString.copyFromUtf8((String)ref);
                return (ByteString)(this.extendee_ = b);
            }
            return (ByteString)ref;
        }
        
        @Override
        public boolean hasDefaultValue() {
            return (this.bitField0_ & 0x40) != 0x0;
        }
        
        @Override
        public String getDefaultValue() {
            final Object ref = this.defaultValue_;
            if (ref instanceof String) {
                return (String)ref;
            }
            final ByteString bs = (ByteString)ref;
            final String s = bs.toStringUtf8();
            if (bs.isValidUtf8()) {
                this.defaultValue_ = s;
            }
            return s;
        }
        
        @Override
        public ByteString getDefaultValueBytes() {
            final Object ref = this.defaultValue_;
            if (ref instanceof String) {
                final ByteString b = ByteString.copyFromUtf8((String)ref);
                return (ByteString)(this.defaultValue_ = b);
            }
            return (ByteString)ref;
        }
        
        @Override
        public boolean hasOneofIndex() {
            return (this.bitField0_ & 0x80) != 0x0;
        }
        
        @Override
        public int getOneofIndex() {
            return this.oneofIndex_;
        }
        
        @Override
        public boolean hasJsonName() {
            return (this.bitField0_ & 0x100) != 0x0;
        }
        
        @Override
        public String getJsonName() {
            final Object ref = this.jsonName_;
            if (ref instanceof String) {
                return (String)ref;
            }
            final ByteString bs = (ByteString)ref;
            final String s = bs.toStringUtf8();
            if (bs.isValidUtf8()) {
                this.jsonName_ = s;
            }
            return s;
        }
        
        @Override
        public ByteString getJsonNameBytes() {
            final Object ref = this.jsonName_;
            if (ref instanceof String) {
                final ByteString b = ByteString.copyFromUtf8((String)ref);
                return (ByteString)(this.jsonName_ = b);
            }
            return (ByteString)ref;
        }
        
        @Override
        public boolean hasOptions() {
            return (this.bitField0_ & 0x200) != 0x0;
        }
        
        @Override
        public FieldOptions getOptions() {
            return (this.options_ == null) ? FieldOptions.getDefaultInstance() : this.options_;
        }
        
        @Override
        public FieldOptionsOrBuilder getOptionsOrBuilder() {
            return (this.options_ == null) ? FieldOptions.getDefaultInstance() : this.options_;
        }
        
        @Override
        public boolean hasProto3Optional() {
            return (this.bitField0_ & 0x400) != 0x0;
        }
        
        @Override
        public boolean getProto3Optional() {
            return this.proto3Optional_;
        }
        
        @Override
        public final boolean isInitialized() {
            final byte isInitialized = this.memoizedIsInitialized;
            if (isInitialized == 1) {
                return true;
            }
            if (isInitialized == 0) {
                return false;
            }
            if (this.hasOptions() && !this.getOptions().isInitialized()) {
                this.memoizedIsInitialized = 0;
                return false;
            }
            this.memoizedIsInitialized = 1;
            return true;
        }
        
        @Override
        public void writeTo(final CodedOutputStream output) throws IOException {
            if ((this.bitField0_ & 0x1) != 0x0) {
                GeneratedMessage.writeString(output, 1, this.name_);
            }
            if ((this.bitField0_ & 0x20) != 0x0) {
                GeneratedMessage.writeString(output, 2, this.extendee_);
            }
            if ((this.bitField0_ & 0x2) != 0x0) {
                output.writeInt32(3, this.number_);
            }
            if ((this.bitField0_ & 0x4) != 0x0) {
                output.writeEnum(4, this.label_);
            }
            if ((this.bitField0_ & 0x8) != 0x0) {
                output.writeEnum(5, this.type_);
            }
            if ((this.bitField0_ & 0x10) != 0x0) {
                GeneratedMessage.writeString(output, 6, this.typeName_);
            }
            if ((this.bitField0_ & 0x40) != 0x0) {
                GeneratedMessage.writeString(output, 7, this.defaultValue_);
            }
            if ((this.bitField0_ & 0x200) != 0x0) {
                output.writeMessage(8, this.getOptions());
            }
            if ((this.bitField0_ & 0x80) != 0x0) {
                output.writeInt32(9, this.oneofIndex_);
            }
            if ((this.bitField0_ & 0x100) != 0x0) {
                GeneratedMessage.writeString(output, 10, this.jsonName_);
            }
            if ((this.bitField0_ & 0x400) != 0x0) {
                output.writeBool(17, this.proto3Optional_);
            }
            this.getUnknownFields().writeTo(output);
        }
        
        @Override
        public int getSerializedSize() {
            int size = this.memoizedSize;
            if (size != -1) {
                return size;
            }
            size = 0;
            if ((this.bitField0_ & 0x1) != 0x0) {
                size += GeneratedMessage.computeStringSize(1, this.name_);
            }
            if ((this.bitField0_ & 0x20) != 0x0) {
                size += GeneratedMessage.computeStringSize(2, this.extendee_);
            }
            if ((this.bitField0_ & 0x2) != 0x0) {
                size += CodedOutputStream.computeInt32Size(3, this.number_);
            }
            if ((this.bitField0_ & 0x4) != 0x0) {
                size += CodedOutputStream.computeEnumSize(4, this.label_);
            }
            if ((this.bitField0_ & 0x8) != 0x0) {
                size += CodedOutputStream.computeEnumSize(5, this.type_);
            }
            if ((this.bitField0_ & 0x10) != 0x0) {
                size += GeneratedMessage.computeStringSize(6, this.typeName_);
            }
            if ((this.bitField0_ & 0x40) != 0x0) {
                size += GeneratedMessage.computeStringSize(7, this.defaultValue_);
            }
            if ((this.bitField0_ & 0x200) != 0x0) {
                size += CodedOutputStream.computeMessageSize(8, this.getOptions());
            }
            if ((this.bitField0_ & 0x80) != 0x0) {
                size += CodedOutputStream.computeInt32Size(9, this.oneofIndex_);
            }
            if ((this.bitField0_ & 0x100) != 0x0) {
                size += GeneratedMessage.computeStringSize(10, this.jsonName_);
            }
            if ((this.bitField0_ & 0x400) != 0x0) {
                size += CodedOutputStream.computeBoolSize(17, this.proto3Optional_);
            }
            size += this.getUnknownFields().getSerializedSize();
            return this.memoizedSize = size;
        }
        
        @Override
        public boolean equals(final Object obj) {
            if (obj == this) {
                return true;
            }
            if (!(obj instanceof FieldDescriptorProto)) {
                return super.equals(obj);
            }
            final FieldDescriptorProto other = (FieldDescriptorProto)obj;
            return this.hasName() == other.hasName() && (!this.hasName() || this.getName().equals(other.getName())) && this.hasNumber() == other.hasNumber() && (!this.hasNumber() || this.getNumber() == other.getNumber()) && this.hasLabel() == other.hasLabel() && (!this.hasLabel() || this.label_ == other.label_) && this.hasType() == other.hasType() && (!this.hasType() || this.type_ == other.type_) && this.hasTypeName() == other.hasTypeName() && (!this.hasTypeName() || this.getTypeName().equals(other.getTypeName())) && this.hasExtendee() == other.hasExtendee() && (!this.hasExtendee() || this.getExtendee().equals(other.getExtendee())) && this.hasDefaultValue() == other.hasDefaultValue() && (!this.hasDefaultValue() || this.getDefaultValue().equals(other.getDefaultValue())) && this.hasOneofIndex() == other.hasOneofIndex() && (!this.hasOneofIndex() || this.getOneofIndex() == other.getOneofIndex()) && this.hasJsonName() == other.hasJsonName() && (!this.hasJsonName() || this.getJsonName().equals(other.getJsonName())) && this.hasOptions() == other.hasOptions() && (!this.hasOptions() || this.getOptions().equals(other.getOptions())) && this.hasProto3Optional() == other.hasProto3Optional() && (!this.hasProto3Optional() || this.getProto3Optional() == other.getProto3Optional()) && this.getUnknownFields().equals(other.getUnknownFields());
        }
        
        @Override
        public int hashCode() {
            if (this.memoizedHashCode != 0) {
                return this.memoizedHashCode;
            }
            int hash = 41;
            hash = 19 * hash + getDescriptor().hashCode();
            if (this.hasName()) {
                hash = 37 * hash + 1;
                hash = 53 * hash + this.getName().hashCode();
            }
            if (this.hasNumber()) {
                hash = 37 * hash + 3;
                hash = 53 * hash + this.getNumber();
            }
            if (this.hasLabel()) {
                hash = 37 * hash + 4;
                hash = 53 * hash + this.label_;
            }
            if (this.hasType()) {
                hash = 37 * hash + 5;
                hash = 53 * hash + this.type_;
            }
            if (this.hasTypeName()) {
                hash = 37 * hash + 6;
                hash = 53 * hash + this.getTypeName().hashCode();
            }
            if (this.hasExtendee()) {
                hash = 37 * hash + 2;
                hash = 53 * hash + this.getExtendee().hashCode();
            }
            if (this.hasDefaultValue()) {
                hash = 37 * hash + 7;
                hash = 53 * hash + this.getDefaultValue().hashCode();
            }
            if (this.hasOneofIndex()) {
                hash = 37 * hash + 9;
                hash = 53 * hash + this.getOneofIndex();
            }
            if (this.hasJsonName()) {
                hash = 37 * hash + 10;
                hash = 53 * hash + this.getJsonName().hashCode();
            }
            if (this.hasOptions()) {
                hash = 37 * hash + 8;
                hash = 53 * hash + this.getOptions().hashCode();
            }
            if (this.hasProto3Optional()) {
                hash = 37 * hash + 17;
                hash = 53 * hash + Internal.hashBoolean(this.getProto3Optional());
            }
            hash = 29 * hash + this.getUnknownFields().hashCode();
            return this.memoizedHashCode = hash;
        }
        
        public static FieldDescriptorProto parseFrom(final ByteBuffer data) throws InvalidProtocolBufferException {
            return FieldDescriptorProto.PARSER.parseFrom(data);
        }
        
        public static FieldDescriptorProto parseFrom(final ByteBuffer data, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
            return FieldDescriptorProto.PARSER.parseFrom(data, extensionRegistry);
        }
        
        public static FieldDescriptorProto parseFrom(final ByteString data) throws InvalidProtocolBufferException {
            return FieldDescriptorProto.PARSER.parseFrom(data);
        }
        
        public static FieldDescriptorProto parseFrom(final ByteString data, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
            return FieldDescriptorProto.PARSER.parseFrom(data, extensionRegistry);
        }
        
        public static FieldDescriptorProto parseFrom(final byte[] data) throws InvalidProtocolBufferException {
            return FieldDescriptorProto.PARSER.parseFrom(data);
        }
        
        public static FieldDescriptorProto parseFrom(final byte[] data, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
            return FieldDescriptorProto.PARSER.parseFrom(data, extensionRegistry);
        }
        
        public static FieldDescriptorProto parseFrom(final InputStream input) throws IOException {
            return GeneratedMessage.parseWithIOException(FieldDescriptorProto.PARSER, input);
        }
        
        public static FieldDescriptorProto parseFrom(final InputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
            return GeneratedMessage.parseWithIOException(FieldDescriptorProto.PARSER, input, extensionRegistry);
        }
        
        public static FieldDescriptorProto parseDelimitedFrom(final InputStream input) throws IOException {
            return GeneratedMessage.parseDelimitedWithIOException(FieldDescriptorProto.PARSER, input);
        }
        
        public static FieldDescriptorProto parseDelimitedFrom(final InputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
            return GeneratedMessage.parseDelimitedWithIOException(FieldDescriptorProto.PARSER, input, extensionRegistry);
        }
        
        public static FieldDescriptorProto parseFrom(final CodedInputStream input) throws IOException {
            return GeneratedMessage.parseWithIOException(FieldDescriptorProto.PARSER, input);
        }
        
        public static FieldDescriptorProto parseFrom(final CodedInputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
            return GeneratedMessage.parseWithIOException(FieldDescriptorProto.PARSER, input, extensionRegistry);
        }
        
        @Override
        public Builder newBuilderForType() {
            return newBuilder();
        }
        
        public static Builder newBuilder() {
            return FieldDescriptorProto.DEFAULT_INSTANCE.toBuilder();
        }
        
        public static Builder newBuilder(final FieldDescriptorProto prototype) {
            return FieldDescriptorProto.DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
        }
        
        @Override
        public Builder toBuilder() {
            return (this == FieldDescriptorProto.DEFAULT_INSTANCE) ? new Builder() : new Builder().mergeFrom(this);
        }
        
        @Override
        protected Builder newBuilderForType(final BuilderParent parent) {
            final Builder builder = new Builder(parent);
            return builder;
        }
        
        public static FieldDescriptorProto getDefaultInstance() {
            return FieldDescriptorProto.DEFAULT_INSTANCE;
        }
        
        public static Parser<FieldDescriptorProto> parser() {
            return FieldDescriptorProto.PARSER;
        }
        
        @Override
        public Parser<FieldDescriptorProto> getParserForType() {
            return FieldDescriptorProto.PARSER;
        }
        
        @Override
        public FieldDescriptorProto getDefaultInstanceForType() {
            return FieldDescriptorProto.DEFAULT_INSTANCE;
        }
        
        static {
            RuntimeVersion.validateProtobufGencodeVersion(RuntimeVersion.RuntimeDomain.PUBLIC, 4, 33, 0, "", "FieldDescriptorProto");
            DEFAULT_INSTANCE = new FieldDescriptorProto();
            PARSER = new AbstractParser<FieldDescriptorProto>() {
                @Override
                public FieldDescriptorProto parsePartialFrom(final CodedInputStream input, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
                    final Builder builder = FieldDescriptorProto.newBuilder();
                    try {
                        builder.mergeFrom(input, extensionRegistry);
                    }
                    catch (final InvalidProtocolBufferException e) {
                        throw e.setUnfinishedMessage(builder.buildPartial());
                    }
                    catch (final UninitializedMessageException e2) {
                        throw e2.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
                    }
                    catch (final IOException e3) {
                        throw new InvalidProtocolBufferException(e3).setUnfinishedMessage(builder.buildPartial());
                    }
                    return builder.buildPartial();
                }
            };
        }
        
        public enum Type implements ProtocolMessageEnum
        {
            TYPE_DOUBLE(1), 
            TYPE_FLOAT(2), 
            TYPE_INT64(3), 
            TYPE_UINT64(4), 
            TYPE_INT32(5), 
            TYPE_FIXED64(6), 
            TYPE_FIXED32(7), 
            TYPE_BOOL(8), 
            TYPE_STRING(9), 
            TYPE_GROUP(10), 
            TYPE_MESSAGE(11), 
            TYPE_BYTES(12), 
            TYPE_UINT32(13), 
            TYPE_ENUM(14), 
            TYPE_SFIXED32(15), 
            TYPE_SFIXED64(16), 
            TYPE_SINT32(17), 
            TYPE_SINT64(18);
            
            public static final int TYPE_DOUBLE_VALUE = 1;
            public static final int TYPE_FLOAT_VALUE = 2;
            public static final int TYPE_INT64_VALUE = 3;
            public static final int TYPE_UINT64_VALUE = 4;
            public static final int TYPE_INT32_VALUE = 5;
            public static final int TYPE_FIXED64_VALUE = 6;
            public static final int TYPE_FIXED32_VALUE = 7;
            public static final int TYPE_BOOL_VALUE = 8;
            public static final int TYPE_STRING_VALUE = 9;
            public static final int TYPE_GROUP_VALUE = 10;
            public static final int TYPE_MESSAGE_VALUE = 11;
            public static final int TYPE_BYTES_VALUE = 12;
            public static final int TYPE_UINT32_VALUE = 13;
            public static final int TYPE_ENUM_VALUE = 14;
            public static final int TYPE_SFIXED32_VALUE = 15;
            public static final int TYPE_SFIXED64_VALUE = 16;
            public static final int TYPE_SINT32_VALUE = 17;
            public static final int TYPE_SINT64_VALUE = 18;
            private static final Internal.EnumLiteMap<Type> internalValueMap;
            private static final Type[] VALUES;
            private final int value;
            
            @Override
            public final int getNumber() {
                return this.value;
            }
            
            @Deprecated
            public static Type valueOf(final int value) {
                return forNumber(value);
            }
            
            public static Type forNumber(final int value) {
                switch (value) {
                    case 1: {
                        return Type.TYPE_DOUBLE;
                    }
                    case 2: {
                        return Type.TYPE_FLOAT;
                    }
                    case 3: {
                        return Type.TYPE_INT64;
                    }
                    case 4: {
                        return Type.TYPE_UINT64;
                    }
                    case 5: {
                        return Type.TYPE_INT32;
                    }
                    case 6: {
                        return Type.TYPE_FIXED64;
                    }
                    case 7: {
                        return Type.TYPE_FIXED32;
                    }
                    case 8: {
                        return Type.TYPE_BOOL;
                    }
                    case 9: {
                        return Type.TYPE_STRING;
                    }
                    case 10: {
                        return Type.TYPE_GROUP;
                    }
                    case 11: {
                        return Type.TYPE_MESSAGE;
                    }
                    case 12: {
                        return Type.TYPE_BYTES;
                    }
                    case 13: {
                        return Type.TYPE_UINT32;
                    }
                    case 14: {
                        return Type.TYPE_ENUM;
                    }
                    case 15: {
                        return Type.TYPE_SFIXED32;
                    }
                    case 16: {
                        return Type.TYPE_SFIXED64;
                    }
                    case 17: {
                        return Type.TYPE_SINT32;
                    }
                    case 18: {
                        return Type.TYPE_SINT64;
                    }
                    default: {
                        return null;
                    }
                }
            }
            
            public static Internal.EnumLiteMap<Type> internalGetValueMap() {
                return Type.internalValueMap;
            }
            
            @Override
            public final Descriptors.EnumValueDescriptor getValueDescriptor() {
                return getDescriptor().getValues().get(this.ordinal());
            }
            
            @Override
            public final Descriptors.EnumDescriptor getDescriptorForType() {
                return getDescriptor();
            }
            
            public static Descriptors.EnumDescriptor getDescriptor() {
                return FieldDescriptorProto.getDescriptor().getEnumTypes().get(0);
            }
            
            public static Type valueOf(final Descriptors.EnumValueDescriptor desc) {
                if (desc.getType() != getDescriptor()) {
                    throw new IllegalArgumentException("EnumValueDescriptor is not for this type.");
                }
                return Type.VALUES[desc.getIndex()];
            }
            
            private Type(final int value) {
                this.value = value;
            }
            
            static {
                RuntimeVersion.validateProtobufGencodeVersion(RuntimeVersion.RuntimeDomain.PUBLIC, 4, 33, 0, "", "Type");
                internalValueMap = new Internal.EnumLiteMap<Type>() {
                    @Override
                    public Type findValueByNumber(final int number) {
                        return Type.forNumber(number);
                    }
                };
                VALUES = values();
            }
        }
        
        public enum Label implements ProtocolMessageEnum
        {
            LABEL_OPTIONAL(1), 
            LABEL_REPEATED(3), 
            LABEL_REQUIRED(2);
            
            public static final int LABEL_OPTIONAL_VALUE = 1;
            public static final int LABEL_REPEATED_VALUE = 3;
            public static final int LABEL_REQUIRED_VALUE = 2;
            private static final Internal.EnumLiteMap<Label> internalValueMap;
            private static final Label[] VALUES;
            private final int value;
            
            @Override
            public final int getNumber() {
                return this.value;
            }
            
            @Deprecated
            public static Label valueOf(final int value) {
                return forNumber(value);
            }
            
            public static Label forNumber(final int value) {
                switch (value) {
                    case 1: {
                        return Label.LABEL_OPTIONAL;
                    }
                    case 3: {
                        return Label.LABEL_REPEATED;
                    }
                    case 2: {
                        return Label.LABEL_REQUIRED;
                    }
                    default: {
                        return null;
                    }
                }
            }
            
            public static Internal.EnumLiteMap<Label> internalGetValueMap() {
                return Label.internalValueMap;
            }
            
            @Override
            public final Descriptors.EnumValueDescriptor getValueDescriptor() {
                return getDescriptor().getValues().get(this.ordinal());
            }
            
            @Override
            public final Descriptors.EnumDescriptor getDescriptorForType() {
                return getDescriptor();
            }
            
            public static Descriptors.EnumDescriptor getDescriptor() {
                return FieldDescriptorProto.getDescriptor().getEnumTypes().get(1);
            }
            
            public static Label valueOf(final Descriptors.EnumValueDescriptor desc) {
                if (desc.getType() != getDescriptor()) {
                    throw new IllegalArgumentException("EnumValueDescriptor is not for this type.");
                }
                return Label.VALUES[desc.getIndex()];
            }
            
            private Label(final int value) {
                this.value = value;
            }
            
            static {
                RuntimeVersion.validateProtobufGencodeVersion(RuntimeVersion.RuntimeDomain.PUBLIC, 4, 33, 0, "", "Label");
                internalValueMap = new Internal.EnumLiteMap<Label>() {
                    @Override
                    public Label findValueByNumber(final int number) {
                        return Label.forNumber(number);
                    }
                };
                VALUES = values();
            }
        }
        
        public static final class Builder extends GeneratedMessage.Builder<Builder> implements FieldDescriptorProtoOrBuilder
        {
            private int bitField0_;
            private Object name_;
            private int number_;
            private int label_;
            private int type_;
            private Object typeName_;
            private Object extendee_;
            private Object defaultValue_;
            private int oneofIndex_;
            private Object jsonName_;
            private FieldOptions options_;
            private SingleFieldBuilder<FieldOptions, FieldOptions.Builder, FieldOptionsOrBuilder> optionsBuilder_;
            private boolean proto3Optional_;
            
            public static final Descriptors.Descriptor getDescriptor() {
                return DescriptorProtos.internal_static_google_protobuf_FieldDescriptorProto_descriptor;
            }
            
            @Override
            protected FieldAccessorTable internalGetFieldAccessorTable() {
                return DescriptorProtos.internal_static_google_protobuf_FieldDescriptorProto_fieldAccessorTable.ensureFieldAccessorsInitialized(FieldDescriptorProto.class, Builder.class);
            }
            
            private Builder() {
                this.name_ = "";
                this.label_ = 1;
                this.type_ = 1;
                this.typeName_ = "";
                this.extendee_ = "";
                this.defaultValue_ = "";
                this.jsonName_ = "";
                this.maybeForceBuilderInitialization();
            }
            
            private Builder(final BuilderParent parent) {
                super(parent);
                this.name_ = "";
                this.label_ = 1;
                this.type_ = 1;
                this.typeName_ = "";
                this.extendee_ = "";
                this.defaultValue_ = "";
                this.jsonName_ = "";
                this.maybeForceBuilderInitialization();
            }
            
            private void maybeForceBuilderInitialization() {
                if (GeneratedMessage.alwaysUseFieldBuilders) {
                    this.internalGetOptionsFieldBuilder();
                }
            }
            
            @Override
            public Builder clear() {
                super.clear();
                this.bitField0_ = 0;
                this.name_ = "";
                this.number_ = 0;
                this.label_ = 1;
                this.type_ = 1;
                this.typeName_ = "";
                this.extendee_ = "";
                this.defaultValue_ = "";
                this.oneofIndex_ = 0;
                this.jsonName_ = "";
                this.options_ = null;
                if (this.optionsBuilder_ != null) {
                    this.optionsBuilder_.dispose();
                    this.optionsBuilder_ = null;
                }
                this.proto3Optional_ = false;
                return this;
            }
            
            @Override
            public Descriptors.Descriptor getDescriptorForType() {
                return DescriptorProtos.internal_static_google_protobuf_FieldDescriptorProto_descriptor;
            }
            
            @Override
            public FieldDescriptorProto getDefaultInstanceForType() {
                return FieldDescriptorProto.getDefaultInstance();
            }
            
            @Override
            public FieldDescriptorProto build() {
                final FieldDescriptorProto result = this.buildPartial();
                if (!result.isInitialized()) {
                    throw AbstractMessage.Builder.newUninitializedMessageException(result);
                }
                return result;
            }
            
            @Override
            public FieldDescriptorProto buildPartial() {
                final FieldDescriptorProto result = new FieldDescriptorProto((GeneratedMessage.Builder)this);
                if (this.bitField0_ != 0) {
                    this.buildPartial0(result);
                }
                this.onBuilt();
                return result;
            }
            
            private void buildPartial0(final FieldDescriptorProto result) {
                final int from_bitField0_ = this.bitField0_;
                int to_bitField0_ = 0;
                if ((from_bitField0_ & 0x1) != 0x0) {
                    result.name_ = this.name_;
                    to_bitField0_ |= 0x1;
                }
                if ((from_bitField0_ & 0x2) != 0x0) {
                    result.number_ = this.number_;
                    to_bitField0_ |= 0x2;
                }
                if ((from_bitField0_ & 0x4) != 0x0) {
                    result.label_ = this.label_;
                    to_bitField0_ |= 0x4;
                }
                if ((from_bitField0_ & 0x8) != 0x0) {
                    result.type_ = this.type_;
                    to_bitField0_ |= 0x8;
                }
                if ((from_bitField0_ & 0x10) != 0x0) {
                    result.typeName_ = this.typeName_;
                    to_bitField0_ |= 0x10;
                }
                if ((from_bitField0_ & 0x20) != 0x0) {
                    result.extendee_ = this.extendee_;
                    to_bitField0_ |= 0x20;
                }
                if ((from_bitField0_ & 0x40) != 0x0) {
                    result.defaultValue_ = this.defaultValue_;
                    to_bitField0_ |= 0x40;
                }
                if ((from_bitField0_ & 0x80) != 0x0) {
                    result.oneofIndex_ = this.oneofIndex_;
                    to_bitField0_ |= 0x80;
                }
                if ((from_bitField0_ & 0x100) != 0x0) {
                    result.jsonName_ = this.jsonName_;
                    to_bitField0_ |= 0x100;
                }
                if ((from_bitField0_ & 0x200) != 0x0) {
                    result.options_ = ((this.optionsBuilder_ == null) ? this.options_ : this.optionsBuilder_.build());
                    to_bitField0_ |= 0x200;
                }
                if ((from_bitField0_ & 0x400) != 0x0) {
                    result.proto3Optional_ = this.proto3Optional_;
                    to_bitField0_ |= 0x400;
                }
                result.bitField0_ |= to_bitField0_;
            }
            
            @Override
            public Builder mergeFrom(final Message other) {
                if (other instanceof FieldDescriptorProto) {
                    return this.mergeFrom((FieldDescriptorProto)other);
                }
                super.mergeFrom(other);
                return this;
            }
            
            public Builder mergeFrom(final FieldDescriptorProto other) {
                if (other == FieldDescriptorProto.getDefaultInstance()) {
                    return this;
                }
                if (other.hasName()) {
                    this.name_ = other.name_;
                    this.bitField0_ |= 0x1;
                    this.onChanged();
                }
                if (other.hasNumber()) {
                    this.setNumber(other.getNumber());
                }
                if (other.hasLabel()) {
                    this.setLabel(other.getLabel());
                }
                if (other.hasType()) {
                    this.setType(other.getType());
                }
                if (other.hasTypeName()) {
                    this.typeName_ = other.typeName_;
                    this.bitField0_ |= 0x10;
                    this.onChanged();
                }
                if (other.hasExtendee()) {
                    this.extendee_ = other.extendee_;
                    this.bitField0_ |= 0x20;
                    this.onChanged();
                }
                if (other.hasDefaultValue()) {
                    this.defaultValue_ = other.defaultValue_;
                    this.bitField0_ |= 0x40;
                    this.onChanged();
                }
                if (other.hasOneofIndex()) {
                    this.setOneofIndex(other.getOneofIndex());
                }
                if (other.hasJsonName()) {
                    this.jsonName_ = other.jsonName_;
                    this.bitField0_ |= 0x100;
                    this.onChanged();
                }
                if (other.hasOptions()) {
                    this.mergeOptions(other.getOptions());
                }
                if (other.hasProto3Optional()) {
                    this.setProto3Optional(other.getProto3Optional());
                }
                this.mergeUnknownFields(other.getUnknownFields());
                this.onChanged();
                return this;
            }
            
            @Override
            public final boolean isInitialized() {
                return !this.hasOptions() || this.getOptions().isInitialized();
            }
            
            @Override
            public Builder mergeFrom(final CodedInputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
                if (extensionRegistry == null) {
                    throw new NullPointerException();
                }
                try {
                    boolean done = false;
                    while (!done) {
                        final int tag = input.readTag();
                        switch (tag) {
                            case 0: {
                                done = true;
                                continue;
                            }
                            case 10: {
                                this.name_ = input.readBytes();
                                this.bitField0_ |= 0x1;
                                continue;
                            }
                            case 18: {
                                this.extendee_ = input.readBytes();
                                this.bitField0_ |= 0x20;
                                continue;
                            }
                            case 24: {
                                this.number_ = input.readInt32();
                                this.bitField0_ |= 0x2;
                                continue;
                            }
                            case 32: {
                                final int tmpRaw = input.readEnum();
                                final Label tmpValue = Label.forNumber(tmpRaw);
                                if (tmpValue == null) {
                                    this.mergeUnknownVarintField(4, tmpRaw);
                                    continue;
                                }
                                this.label_ = tmpRaw;
                                this.bitField0_ |= 0x4;
                                continue;
                            }
                            case 40: {
                                final int tmpRaw = input.readEnum();
                                final Type tmpValue2 = Type.forNumber(tmpRaw);
                                if (tmpValue2 == null) {
                                    this.mergeUnknownVarintField(5, tmpRaw);
                                    continue;
                                }
                                this.type_ = tmpRaw;
                                this.bitField0_ |= 0x8;
                                continue;
                            }
                            case 50: {
                                this.typeName_ = input.readBytes();
                                this.bitField0_ |= 0x10;
                                continue;
                            }
                            case 58: {
                                this.defaultValue_ = input.readBytes();
                                this.bitField0_ |= 0x40;
                                continue;
                            }
                            case 66: {
                                input.readMessage(this.internalGetOptionsFieldBuilder().getBuilder(), extensionRegistry);
                                this.bitField0_ |= 0x200;
                                continue;
                            }
                            case 72: {
                                this.oneofIndex_ = input.readInt32();
                                this.bitField0_ |= 0x80;
                                continue;
                            }
                            case 82: {
                                this.jsonName_ = input.readBytes();
                                this.bitField0_ |= 0x100;
                                continue;
                            }
                            case 136: {
                                this.proto3Optional_ = input.readBool();
                                this.bitField0_ |= 0x400;
                                continue;
                            }
                            default: {
                                if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                                    done = true;
                                    continue;
                                }
                                continue;
                            }
                        }
                    }
                }
                catch (final InvalidProtocolBufferException e) {
                    throw e.unwrapIOException();
                }
                finally {
                    this.onChanged();
                }
                return this;
            }
            
            @Override
            public boolean hasName() {
                return (this.bitField0_ & 0x1) != 0x0;
            }
            
            @Override
            public String getName() {
                final Object ref = this.name_;
                if (!(ref instanceof String)) {
                    final ByteString bs = (ByteString)ref;
                    final String s = bs.toStringUtf8();
                    if (bs.isValidUtf8()) {
                        this.name_ = s;
                    }
                    return s;
                }
                return (String)ref;
            }
            
            @Override
            public ByteString getNameBytes() {
                final Object ref = this.name_;
                if (ref instanceof String) {
                    final ByteString b = ByteString.copyFromUtf8((String)ref);
                    return (ByteString)(this.name_ = b);
                }
                return (ByteString)ref;
            }
            
            public Builder setName(final String value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                this.name_ = value;
                this.bitField0_ |= 0x1;
                this.onChanged();
                return this;
            }
            
            public Builder clearName() {
                this.name_ = FieldDescriptorProto.getDefaultInstance().getName();
                this.bitField0_ &= 0xFFFFFFFE;
                this.onChanged();
                return this;
            }
            
            public Builder setNameBytes(final ByteString value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                this.name_ = value;
                this.bitField0_ |= 0x1;
                this.onChanged();
                return this;
            }
            
            @Override
            public boolean hasNumber() {
                return (this.bitField0_ & 0x2) != 0x0;
            }
            
            @Override
            public int getNumber() {
                return this.number_;
            }
            
            public Builder setNumber(final int value) {
                this.number_ = value;
                this.bitField0_ |= 0x2;
                this.onChanged();
                return this;
            }
            
            public Builder clearNumber() {
                this.bitField0_ &= 0xFFFFFFFD;
                this.number_ = 0;
                this.onChanged();
                return this;
            }
            
            @Override
            public boolean hasLabel() {
                return (this.bitField0_ & 0x4) != 0x0;
            }
            
            @Override
            public Label getLabel() {
                final Label result = Label.forNumber(this.label_);
                return (result == null) ? Label.LABEL_OPTIONAL : result;
            }
            
            public Builder setLabel(final Label value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                this.bitField0_ |= 0x4;
                this.label_ = value.getNumber();
                this.onChanged();
                return this;
            }
            
            public Builder clearLabel() {
                this.bitField0_ &= 0xFFFFFFFB;
                this.label_ = 1;
                this.onChanged();
                return this;
            }
            
            @Override
            public boolean hasType() {
                return (this.bitField0_ & 0x8) != 0x0;
            }
            
            @Override
            public Type getType() {
                final Type result = Type.forNumber(this.type_);
                return (result == null) ? Type.TYPE_DOUBLE : result;
            }
            
            public Builder setType(final Type value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                this.bitField0_ |= 0x8;
                this.type_ = value.getNumber();
                this.onChanged();
                return this;
            }
            
            public Builder clearType() {
                this.bitField0_ &= 0xFFFFFFF7;
                this.type_ = 1;
                this.onChanged();
                return this;
            }
            
            @Override
            public boolean hasTypeName() {
                return (this.bitField0_ & 0x10) != 0x0;
            }
            
            @Override
            public String getTypeName() {
                final Object ref = this.typeName_;
                if (!(ref instanceof String)) {
                    final ByteString bs = (ByteString)ref;
                    final String s = bs.toStringUtf8();
                    if (bs.isValidUtf8()) {
                        this.typeName_ = s;
                    }
                    return s;
                }
                return (String)ref;
            }
            
            @Override
            public ByteString getTypeNameBytes() {
                final Object ref = this.typeName_;
                if (ref instanceof String) {
                    final ByteString b = ByteString.copyFromUtf8((String)ref);
                    return (ByteString)(this.typeName_ = b);
                }
                return (ByteString)ref;
            }
            
            public Builder setTypeName(final String value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                this.typeName_ = value;
                this.bitField0_ |= 0x10;
                this.onChanged();
                return this;
            }
            
            public Builder clearTypeName() {
                this.typeName_ = FieldDescriptorProto.getDefaultInstance().getTypeName();
                this.bitField0_ &= 0xFFFFFFEF;
                this.onChanged();
                return this;
            }
            
            public Builder setTypeNameBytes(final ByteString value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                this.typeName_ = value;
                this.bitField0_ |= 0x10;
                this.onChanged();
                return this;
            }
            
            @Override
            public boolean hasExtendee() {
                return (this.bitField0_ & 0x20) != 0x0;
            }
            
            @Override
            public String getExtendee() {
                final Object ref = this.extendee_;
                if (!(ref instanceof String)) {
                    final ByteString bs = (ByteString)ref;
                    final String s = bs.toStringUtf8();
                    if (bs.isValidUtf8()) {
                        this.extendee_ = s;
                    }
                    return s;
                }
                return (String)ref;
            }
            
            @Override
            public ByteString getExtendeeBytes() {
                final Object ref = this.extendee_;
                if (ref instanceof String) {
                    final ByteString b = ByteString.copyFromUtf8((String)ref);
                    return (ByteString)(this.extendee_ = b);
                }
                return (ByteString)ref;
            }
            
            public Builder setExtendee(final String value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                this.extendee_ = value;
                this.bitField0_ |= 0x20;
                this.onChanged();
                return this;
            }
            
            public Builder clearExtendee() {
                this.extendee_ = FieldDescriptorProto.getDefaultInstance().getExtendee();
                this.bitField0_ &= 0xFFFFFFDF;
                this.onChanged();
                return this;
            }
            
            public Builder setExtendeeBytes(final ByteString value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                this.extendee_ = value;
                this.bitField0_ |= 0x20;
                this.onChanged();
                return this;
            }
            
            @Override
            public boolean hasDefaultValue() {
                return (this.bitField0_ & 0x40) != 0x0;
            }
            
            @Override
            public String getDefaultValue() {
                final Object ref = this.defaultValue_;
                if (!(ref instanceof String)) {
                    final ByteString bs = (ByteString)ref;
                    final String s = bs.toStringUtf8();
                    if (bs.isValidUtf8()) {
                        this.defaultValue_ = s;
                    }
                    return s;
                }
                return (String)ref;
            }
            
            @Override
            public ByteString getDefaultValueBytes() {
                final Object ref = this.defaultValue_;
                if (ref instanceof String) {
                    final ByteString b = ByteString.copyFromUtf8((String)ref);
                    return (ByteString)(this.defaultValue_ = b);
                }
                return (ByteString)ref;
            }
            
            public Builder setDefaultValue(final String value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                this.defaultValue_ = value;
                this.bitField0_ |= 0x40;
                this.onChanged();
                return this;
            }
            
            public Builder clearDefaultValue() {
                this.defaultValue_ = FieldDescriptorProto.getDefaultInstance().getDefaultValue();
                this.bitField0_ &= 0xFFFFFFBF;
                this.onChanged();
                return this;
            }
            
            public Builder setDefaultValueBytes(final ByteString value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                this.defaultValue_ = value;
                this.bitField0_ |= 0x40;
                this.onChanged();
                return this;
            }
            
            @Override
            public boolean hasOneofIndex() {
                return (this.bitField0_ & 0x80) != 0x0;
            }
            
            @Override
            public int getOneofIndex() {
                return this.oneofIndex_;
            }
            
            public Builder setOneofIndex(final int value) {
                this.oneofIndex_ = value;
                this.bitField0_ |= 0x80;
                this.onChanged();
                return this;
            }
            
            public Builder clearOneofIndex() {
                this.bitField0_ &= 0xFFFFFF7F;
                this.oneofIndex_ = 0;
                this.onChanged();
                return this;
            }
            
            @Override
            public boolean hasJsonName() {
                return (this.bitField0_ & 0x100) != 0x0;
            }
            
            @Override
            public String getJsonName() {
                final Object ref = this.jsonName_;
                if (!(ref instanceof String)) {
                    final ByteString bs = (ByteString)ref;
                    final String s = bs.toStringUtf8();
                    if (bs.isValidUtf8()) {
                        this.jsonName_ = s;
                    }
                    return s;
                }
                return (String)ref;
            }
            
            @Override
            public ByteString getJsonNameBytes() {
                final Object ref = this.jsonName_;
                if (ref instanceof String) {
                    final ByteString b = ByteString.copyFromUtf8((String)ref);
                    return (ByteString)(this.jsonName_ = b);
                }
                return (ByteString)ref;
            }
            
            public Builder setJsonName(final String value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                this.jsonName_ = value;
                this.bitField0_ |= 0x100;
                this.onChanged();
                return this;
            }
            
            public Builder clearJsonName() {
                this.jsonName_ = FieldDescriptorProto.getDefaultInstance().getJsonName();
                this.bitField0_ &= 0xFFFFFEFF;
                this.onChanged();
                return this;
            }
            
            public Builder setJsonNameBytes(final ByteString value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                this.jsonName_ = value;
                this.bitField0_ |= 0x100;
                this.onChanged();
                return this;
            }
            
            @Override
            public boolean hasOptions() {
                return (this.bitField0_ & 0x200) != 0x0;
            }
            
            @Override
            public FieldOptions getOptions() {
                if (this.optionsBuilder_ == null) {
                    return (this.options_ == null) ? FieldOptions.getDefaultInstance() : this.options_;
                }
                return this.optionsBuilder_.getMessage();
            }
            
            public Builder setOptions(final FieldOptions value) {
                if (this.optionsBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.options_ = value;
                }
                else {
                    this.optionsBuilder_.setMessage(value);
                }
                this.bitField0_ |= 0x200;
                this.onChanged();
                return this;
            }
            
            public Builder setOptions(final FieldOptions.Builder builderForValue) {
                if (this.optionsBuilder_ == null) {
                    this.options_ = builderForValue.build();
                }
                else {
                    this.optionsBuilder_.setMessage(builderForValue.build());
                }
                this.bitField0_ |= 0x200;
                this.onChanged();
                return this;
            }
            
            public Builder mergeOptions(final FieldOptions value) {
                if (this.optionsBuilder_ == null) {
                    if ((this.bitField0_ & 0x200) != 0x0 && this.options_ != null && this.options_ != FieldOptions.getDefaultInstance()) {
                        this.getOptionsBuilder().mergeFrom(value);
                    }
                    else {
                        this.options_ = value;
                    }
                }
                else {
                    this.optionsBuilder_.mergeFrom(value);
                }
                if (this.options_ != null) {
                    this.bitField0_ |= 0x200;
                    this.onChanged();
                }
                return this;
            }
            
            public Builder clearOptions() {
                this.bitField0_ &= 0xFFFFFDFF;
                this.options_ = null;
                if (this.optionsBuilder_ != null) {
                    this.optionsBuilder_.dispose();
                    this.optionsBuilder_ = null;
                }
                this.onChanged();
                return this;
            }
            
            public FieldOptions.Builder getOptionsBuilder() {
                this.bitField0_ |= 0x200;
                this.onChanged();
                return this.internalGetOptionsFieldBuilder().getBuilder();
            }
            
            @Override
            public FieldOptionsOrBuilder getOptionsOrBuilder() {
                if (this.optionsBuilder_ != null) {
                    return this.optionsBuilder_.getMessageOrBuilder();
                }
                return (this.options_ == null) ? FieldOptions.getDefaultInstance() : this.options_;
            }
            
            private SingleFieldBuilder<FieldOptions, FieldOptions.Builder, FieldOptionsOrBuilder> internalGetOptionsFieldBuilder() {
                if (this.optionsBuilder_ == null) {
                    this.optionsBuilder_ = new SingleFieldBuilder<FieldOptions, FieldOptions.Builder, FieldOptionsOrBuilder>(this.getOptions(), this.getParentForChildren(), this.isClean());
                    this.options_ = null;
                }
                return this.optionsBuilder_;
            }
            
            @Override
            public boolean hasProto3Optional() {
                return (this.bitField0_ & 0x400) != 0x0;
            }
            
            @Override
            public boolean getProto3Optional() {
                return this.proto3Optional_;
            }
            
            public Builder setProto3Optional(final boolean value) {
                this.proto3Optional_ = value;
                this.bitField0_ |= 0x400;
                this.onChanged();
                return this;
            }
            
            public Builder clearProto3Optional() {
                this.bitField0_ &= 0xFFFFFBFF;
                this.proto3Optional_ = false;
                this.onChanged();
                return this;
            }
        }
    }
    
    public static final class OneofDescriptorProto extends GeneratedMessage implements OneofDescriptorProtoOrBuilder
    {
        private static final long serialVersionUID = 0L;
        private int bitField0_;
        public static final int NAME_FIELD_NUMBER = 1;
        private volatile Object name_;
        public static final int OPTIONS_FIELD_NUMBER = 2;
        private OneofOptions options_;
        private byte memoizedIsInitialized;
        private static final OneofDescriptorProto DEFAULT_INSTANCE;
        private static final Parser<OneofDescriptorProto> PARSER;
        
        private OneofDescriptorProto(final GeneratedMessage.Builder<?> builder) {
            super(builder);
            this.name_ = "";
            this.memoizedIsInitialized = -1;
        }
        
        private OneofDescriptorProto() {
            this.name_ = "";
            this.memoizedIsInitialized = -1;
            this.name_ = "";
        }
        
        public static final Descriptors.Descriptor getDescriptor() {
            return DescriptorProtos.internal_static_google_protobuf_OneofDescriptorProto_descriptor;
        }
        
        @Override
        protected FieldAccessorTable internalGetFieldAccessorTable() {
            return DescriptorProtos.internal_static_google_protobuf_OneofDescriptorProto_fieldAccessorTable.ensureFieldAccessorsInitialized(OneofDescriptorProto.class, Builder.class);
        }
        
        @Override
        public boolean hasName() {
            return (this.bitField0_ & 0x1) != 0x0;
        }
        
        @Override
        public String getName() {
            final Object ref = this.name_;
            if (ref instanceof String) {
                return (String)ref;
            }
            final ByteString bs = (ByteString)ref;
            final String s = bs.toStringUtf8();
            if (bs.isValidUtf8()) {
                this.name_ = s;
            }
            return s;
        }
        
        @Override
        public ByteString getNameBytes() {
            final Object ref = this.name_;
            if (ref instanceof String) {
                final ByteString b = ByteString.copyFromUtf8((String)ref);
                return (ByteString)(this.name_ = b);
            }
            return (ByteString)ref;
        }
        
        @Override
        public boolean hasOptions() {
            return (this.bitField0_ & 0x2) != 0x0;
        }
        
        @Override
        public OneofOptions getOptions() {
            return (this.options_ == null) ? OneofOptions.getDefaultInstance() : this.options_;
        }
        
        @Override
        public OneofOptionsOrBuilder getOptionsOrBuilder() {
            return (this.options_ == null) ? OneofOptions.getDefaultInstance() : this.options_;
        }
        
        @Override
        public final boolean isInitialized() {
            final byte isInitialized = this.memoizedIsInitialized;
            if (isInitialized == 1) {
                return true;
            }
            if (isInitialized == 0) {
                return false;
            }
            if (this.hasOptions() && !this.getOptions().isInitialized()) {
                this.memoizedIsInitialized = 0;
                return false;
            }
            this.memoizedIsInitialized = 1;
            return true;
        }
        
        @Override
        public void writeTo(final CodedOutputStream output) throws IOException {
            if ((this.bitField0_ & 0x1) != 0x0) {
                GeneratedMessage.writeString(output, 1, this.name_);
            }
            if ((this.bitField0_ & 0x2) != 0x0) {
                output.writeMessage(2, this.getOptions());
            }
            this.getUnknownFields().writeTo(output);
        }
        
        @Override
        public int getSerializedSize() {
            int size = this.memoizedSize;
            if (size != -1) {
                return size;
            }
            size = 0;
            if ((this.bitField0_ & 0x1) != 0x0) {
                size += GeneratedMessage.computeStringSize(1, this.name_);
            }
            if ((this.bitField0_ & 0x2) != 0x0) {
                size += CodedOutputStream.computeMessageSize(2, this.getOptions());
            }
            size += this.getUnknownFields().getSerializedSize();
            return this.memoizedSize = size;
        }
        
        @Override
        public boolean equals(final Object obj) {
            if (obj == this) {
                return true;
            }
            if (!(obj instanceof OneofDescriptorProto)) {
                return super.equals(obj);
            }
            final OneofDescriptorProto other = (OneofDescriptorProto)obj;
            return this.hasName() == other.hasName() && (!this.hasName() || this.getName().equals(other.getName())) && this.hasOptions() == other.hasOptions() && (!this.hasOptions() || this.getOptions().equals(other.getOptions())) && this.getUnknownFields().equals(other.getUnknownFields());
        }
        
        @Override
        public int hashCode() {
            if (this.memoizedHashCode != 0) {
                return this.memoizedHashCode;
            }
            int hash = 41;
            hash = 19 * hash + getDescriptor().hashCode();
            if (this.hasName()) {
                hash = 37 * hash + 1;
                hash = 53 * hash + this.getName().hashCode();
            }
            if (this.hasOptions()) {
                hash = 37 * hash + 2;
                hash = 53 * hash + this.getOptions().hashCode();
            }
            hash = 29 * hash + this.getUnknownFields().hashCode();
            return this.memoizedHashCode = hash;
        }
        
        public static OneofDescriptorProto parseFrom(final ByteBuffer data) throws InvalidProtocolBufferException {
            return OneofDescriptorProto.PARSER.parseFrom(data);
        }
        
        public static OneofDescriptorProto parseFrom(final ByteBuffer data, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
            return OneofDescriptorProto.PARSER.parseFrom(data, extensionRegistry);
        }
        
        public static OneofDescriptorProto parseFrom(final ByteString data) throws InvalidProtocolBufferException {
            return OneofDescriptorProto.PARSER.parseFrom(data);
        }
        
        public static OneofDescriptorProto parseFrom(final ByteString data, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
            return OneofDescriptorProto.PARSER.parseFrom(data, extensionRegistry);
        }
        
        public static OneofDescriptorProto parseFrom(final byte[] data) throws InvalidProtocolBufferException {
            return OneofDescriptorProto.PARSER.parseFrom(data);
        }
        
        public static OneofDescriptorProto parseFrom(final byte[] data, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
            return OneofDescriptorProto.PARSER.parseFrom(data, extensionRegistry);
        }
        
        public static OneofDescriptorProto parseFrom(final InputStream input) throws IOException {
            return GeneratedMessage.parseWithIOException(OneofDescriptorProto.PARSER, input);
        }
        
        public static OneofDescriptorProto parseFrom(final InputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
            return GeneratedMessage.parseWithIOException(OneofDescriptorProto.PARSER, input, extensionRegistry);
        }
        
        public static OneofDescriptorProto parseDelimitedFrom(final InputStream input) throws IOException {
            return GeneratedMessage.parseDelimitedWithIOException(OneofDescriptorProto.PARSER, input);
        }
        
        public static OneofDescriptorProto parseDelimitedFrom(final InputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
            return GeneratedMessage.parseDelimitedWithIOException(OneofDescriptorProto.PARSER, input, extensionRegistry);
        }
        
        public static OneofDescriptorProto parseFrom(final CodedInputStream input) throws IOException {
            return GeneratedMessage.parseWithIOException(OneofDescriptorProto.PARSER, input);
        }
        
        public static OneofDescriptorProto parseFrom(final CodedInputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
            return GeneratedMessage.parseWithIOException(OneofDescriptorProto.PARSER, input, extensionRegistry);
        }
        
        @Override
        public Builder newBuilderForType() {
            return newBuilder();
        }
        
        public static Builder newBuilder() {
            return OneofDescriptorProto.DEFAULT_INSTANCE.toBuilder();
        }
        
        public static Builder newBuilder(final OneofDescriptorProto prototype) {
            return OneofDescriptorProto.DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
        }
        
        @Override
        public Builder toBuilder() {
            return (this == OneofDescriptorProto.DEFAULT_INSTANCE) ? new Builder() : new Builder().mergeFrom(this);
        }
        
        @Override
        protected Builder newBuilderForType(final BuilderParent parent) {
            final Builder builder = new Builder(parent);
            return builder;
        }
        
        public static OneofDescriptorProto getDefaultInstance() {
            return OneofDescriptorProto.DEFAULT_INSTANCE;
        }
        
        public static Parser<OneofDescriptorProto> parser() {
            return OneofDescriptorProto.PARSER;
        }
        
        @Override
        public Parser<OneofDescriptorProto> getParserForType() {
            return OneofDescriptorProto.PARSER;
        }
        
        @Override
        public OneofDescriptorProto getDefaultInstanceForType() {
            return OneofDescriptorProto.DEFAULT_INSTANCE;
        }
        
        static {
            RuntimeVersion.validateProtobufGencodeVersion(RuntimeVersion.RuntimeDomain.PUBLIC, 4, 33, 0, "", "OneofDescriptorProto");
            DEFAULT_INSTANCE = new OneofDescriptorProto();
            PARSER = new AbstractParser<OneofDescriptorProto>() {
                @Override
                public OneofDescriptorProto parsePartialFrom(final CodedInputStream input, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
                    final Builder builder = OneofDescriptorProto.newBuilder();
                    try {
                        builder.mergeFrom(input, extensionRegistry);
                    }
                    catch (final InvalidProtocolBufferException e) {
                        throw e.setUnfinishedMessage(builder.buildPartial());
                    }
                    catch (final UninitializedMessageException e2) {
                        throw e2.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
                    }
                    catch (final IOException e3) {
                        throw new InvalidProtocolBufferException(e3).setUnfinishedMessage(builder.buildPartial());
                    }
                    return builder.buildPartial();
                }
            };
        }
        
        public static final class Builder extends GeneratedMessage.Builder<Builder> implements OneofDescriptorProtoOrBuilder
        {
            private int bitField0_;
            private Object name_;
            private OneofOptions options_;
            private SingleFieldBuilder<OneofOptions, OneofOptions.Builder, OneofOptionsOrBuilder> optionsBuilder_;
            
            public static final Descriptors.Descriptor getDescriptor() {
                return DescriptorProtos.internal_static_google_protobuf_OneofDescriptorProto_descriptor;
            }
            
            @Override
            protected FieldAccessorTable internalGetFieldAccessorTable() {
                return DescriptorProtos.internal_static_google_protobuf_OneofDescriptorProto_fieldAccessorTable.ensureFieldAccessorsInitialized(OneofDescriptorProto.class, Builder.class);
            }
            
            private Builder() {
                this.name_ = "";
                this.maybeForceBuilderInitialization();
            }
            
            private Builder(final BuilderParent parent) {
                super(parent);
                this.name_ = "";
                this.maybeForceBuilderInitialization();
            }
            
            private void maybeForceBuilderInitialization() {
                if (GeneratedMessage.alwaysUseFieldBuilders) {
                    this.internalGetOptionsFieldBuilder();
                }
            }
            
            @Override
            public Builder clear() {
                super.clear();
                this.bitField0_ = 0;
                this.name_ = "";
                this.options_ = null;
                if (this.optionsBuilder_ != null) {
                    this.optionsBuilder_.dispose();
                    this.optionsBuilder_ = null;
                }
                return this;
            }
            
            @Override
            public Descriptors.Descriptor getDescriptorForType() {
                return DescriptorProtos.internal_static_google_protobuf_OneofDescriptorProto_descriptor;
            }
            
            @Override
            public OneofDescriptorProto getDefaultInstanceForType() {
                return OneofDescriptorProto.getDefaultInstance();
            }
            
            @Override
            public OneofDescriptorProto build() {
                final OneofDescriptorProto result = this.buildPartial();
                if (!result.isInitialized()) {
                    throw AbstractMessage.Builder.newUninitializedMessageException(result);
                }
                return result;
            }
            
            @Override
            public OneofDescriptorProto buildPartial() {
                final OneofDescriptorProto result = new OneofDescriptorProto((GeneratedMessage.Builder)this);
                if (this.bitField0_ != 0) {
                    this.buildPartial0(result);
                }
                this.onBuilt();
                return result;
            }
            
            private void buildPartial0(final OneofDescriptorProto result) {
                final int from_bitField0_ = this.bitField0_;
                int to_bitField0_ = 0;
                if ((from_bitField0_ & 0x1) != 0x0) {
                    result.name_ = this.name_;
                    to_bitField0_ |= 0x1;
                }
                if ((from_bitField0_ & 0x2) != 0x0) {
                    result.options_ = ((this.optionsBuilder_ == null) ? this.options_ : this.optionsBuilder_.build());
                    to_bitField0_ |= 0x2;
                }
                result.bitField0_ |= to_bitField0_;
            }
            
            @Override
            public Builder mergeFrom(final Message other) {
                if (other instanceof OneofDescriptorProto) {
                    return this.mergeFrom((OneofDescriptorProto)other);
                }
                super.mergeFrom(other);
                return this;
            }
            
            public Builder mergeFrom(final OneofDescriptorProto other) {
                if (other == OneofDescriptorProto.getDefaultInstance()) {
                    return this;
                }
                if (other.hasName()) {
                    this.name_ = other.name_;
                    this.bitField0_ |= 0x1;
                    this.onChanged();
                }
                if (other.hasOptions()) {
                    this.mergeOptions(other.getOptions());
                }
                this.mergeUnknownFields(other.getUnknownFields());
                this.onChanged();
                return this;
            }
            
            @Override
            public final boolean isInitialized() {
                return !this.hasOptions() || this.getOptions().isInitialized();
            }
            
            @Override
            public Builder mergeFrom(final CodedInputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
                if (extensionRegistry == null) {
                    throw new NullPointerException();
                }
                try {
                    boolean done = false;
                    while (!done) {
                        final int tag = input.readTag();
                        switch (tag) {
                            case 0: {
                                done = true;
                                continue;
                            }
                            case 10: {
                                this.name_ = input.readBytes();
                                this.bitField0_ |= 0x1;
                                continue;
                            }
                            case 18: {
                                input.readMessage(this.internalGetOptionsFieldBuilder().getBuilder(), extensionRegistry);
                                this.bitField0_ |= 0x2;
                                continue;
                            }
                            default: {
                                if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                                    done = true;
                                    continue;
                                }
                                continue;
                            }
                        }
                    }
                }
                catch (final InvalidProtocolBufferException e) {
                    throw e.unwrapIOException();
                }
                finally {
                    this.onChanged();
                }
                return this;
            }
            
            @Override
            public boolean hasName() {
                return (this.bitField0_ & 0x1) != 0x0;
            }
            
            @Override
            public String getName() {
                final Object ref = this.name_;
                if (!(ref instanceof String)) {
                    final ByteString bs = (ByteString)ref;
                    final String s = bs.toStringUtf8();
                    if (bs.isValidUtf8()) {
                        this.name_ = s;
                    }
                    return s;
                }
                return (String)ref;
            }
            
            @Override
            public ByteString getNameBytes() {
                final Object ref = this.name_;
                if (ref instanceof String) {
                    final ByteString b = ByteString.copyFromUtf8((String)ref);
                    return (ByteString)(this.name_ = b);
                }
                return (ByteString)ref;
            }
            
            public Builder setName(final String value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                this.name_ = value;
                this.bitField0_ |= 0x1;
                this.onChanged();
                return this;
            }
            
            public Builder clearName() {
                this.name_ = OneofDescriptorProto.getDefaultInstance().getName();
                this.bitField0_ &= 0xFFFFFFFE;
                this.onChanged();
                return this;
            }
            
            public Builder setNameBytes(final ByteString value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                this.name_ = value;
                this.bitField0_ |= 0x1;
                this.onChanged();
                return this;
            }
            
            @Override
            public boolean hasOptions() {
                return (this.bitField0_ & 0x2) != 0x0;
            }
            
            @Override
            public OneofOptions getOptions() {
                if (this.optionsBuilder_ == null) {
                    return (this.options_ == null) ? OneofOptions.getDefaultInstance() : this.options_;
                }
                return this.optionsBuilder_.getMessage();
            }
            
            public Builder setOptions(final OneofOptions value) {
                if (this.optionsBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.options_ = value;
                }
                else {
                    this.optionsBuilder_.setMessage(value);
                }
                this.bitField0_ |= 0x2;
                this.onChanged();
                return this;
            }
            
            public Builder setOptions(final OneofOptions.Builder builderForValue) {
                if (this.optionsBuilder_ == null) {
                    this.options_ = builderForValue.build();
                }
                else {
                    this.optionsBuilder_.setMessage(builderForValue.build());
                }
                this.bitField0_ |= 0x2;
                this.onChanged();
                return this;
            }
            
            public Builder mergeOptions(final OneofOptions value) {
                if (this.optionsBuilder_ == null) {
                    if ((this.bitField0_ & 0x2) != 0x0 && this.options_ != null && this.options_ != OneofOptions.getDefaultInstance()) {
                        this.getOptionsBuilder().mergeFrom(value);
                    }
                    else {
                        this.options_ = value;
                    }
                }
                else {
                    this.optionsBuilder_.mergeFrom(value);
                }
                if (this.options_ != null) {
                    this.bitField0_ |= 0x2;
                    this.onChanged();
                }
                return this;
            }
            
            public Builder clearOptions() {
                this.bitField0_ &= 0xFFFFFFFD;
                this.options_ = null;
                if (this.optionsBuilder_ != null) {
                    this.optionsBuilder_.dispose();
                    this.optionsBuilder_ = null;
                }
                this.onChanged();
                return this;
            }
            
            public OneofOptions.Builder getOptionsBuilder() {
                this.bitField0_ |= 0x2;
                this.onChanged();
                return this.internalGetOptionsFieldBuilder().getBuilder();
            }
            
            @Override
            public OneofOptionsOrBuilder getOptionsOrBuilder() {
                if (this.optionsBuilder_ != null) {
                    return this.optionsBuilder_.getMessageOrBuilder();
                }
                return (this.options_ == null) ? OneofOptions.getDefaultInstance() : this.options_;
            }
            
            private SingleFieldBuilder<OneofOptions, OneofOptions.Builder, OneofOptionsOrBuilder> internalGetOptionsFieldBuilder() {
                if (this.optionsBuilder_ == null) {
                    this.optionsBuilder_ = new SingleFieldBuilder<OneofOptions, OneofOptions.Builder, OneofOptionsOrBuilder>(this.getOptions(), this.getParentForChildren(), this.isClean());
                    this.options_ = null;
                }
                return this.optionsBuilder_;
            }
        }
    }
    
    public static final class EnumDescriptorProto extends GeneratedMessage implements EnumDescriptorProtoOrBuilder
    {
        private static final long serialVersionUID = 0L;
        private int bitField0_;
        public static final int NAME_FIELD_NUMBER = 1;
        private volatile Object name_;
        public static final int VALUE_FIELD_NUMBER = 2;
        private List<EnumValueDescriptorProto> value_;
        public static final int OPTIONS_FIELD_NUMBER = 3;
        private EnumOptions options_;
        public static final int RESERVED_RANGE_FIELD_NUMBER = 4;
        private List<EnumReservedRange> reservedRange_;
        public static final int RESERVED_NAME_FIELD_NUMBER = 5;
        private LazyStringArrayList reservedName_;
        public static final int VISIBILITY_FIELD_NUMBER = 6;
        private int visibility_;
        private byte memoizedIsInitialized;
        private static final EnumDescriptorProto DEFAULT_INSTANCE;
        private static final Parser<EnumDescriptorProto> PARSER;
        
        private EnumDescriptorProto(final GeneratedMessage.Builder<?> builder) {
            super(builder);
            this.name_ = "";
            this.reservedName_ = LazyStringArrayList.emptyList();
            this.visibility_ = 0;
            this.memoizedIsInitialized = -1;
        }
        
        private EnumDescriptorProto() {
            this.name_ = "";
            this.reservedName_ = LazyStringArrayList.emptyList();
            this.visibility_ = 0;
            this.memoizedIsInitialized = -1;
            this.name_ = "";
            this.value_ = Collections.emptyList();
            this.reservedRange_ = Collections.emptyList();
            this.reservedName_ = LazyStringArrayList.emptyList();
            this.visibility_ = 0;
        }
        
        public static final Descriptors.Descriptor getDescriptor() {
            return DescriptorProtos.internal_static_google_protobuf_EnumDescriptorProto_descriptor;
        }
        
        @Override
        protected FieldAccessorTable internalGetFieldAccessorTable() {
            return DescriptorProtos.internal_static_google_protobuf_EnumDescriptorProto_fieldAccessorTable.ensureFieldAccessorsInitialized(EnumDescriptorProto.class, Builder.class);
        }
        
        @Override
        public boolean hasName() {
            return (this.bitField0_ & 0x1) != 0x0;
        }
        
        @Override
        public String getName() {
            final Object ref = this.name_;
            if (ref instanceof String) {
                return (String)ref;
            }
            final ByteString bs = (ByteString)ref;
            final String s = bs.toStringUtf8();
            if (bs.isValidUtf8()) {
                this.name_ = s;
            }
            return s;
        }
        
        @Override
        public ByteString getNameBytes() {
            final Object ref = this.name_;
            if (ref instanceof String) {
                final ByteString b = ByteString.copyFromUtf8((String)ref);
                return (ByteString)(this.name_ = b);
            }
            return (ByteString)ref;
        }
        
        @Override
        public List<EnumValueDescriptorProto> getValueList() {
            return this.value_;
        }
        
        @Override
        public List<? extends EnumValueDescriptorProtoOrBuilder> getValueOrBuilderList() {
            return this.value_;
        }
        
        @Override
        public int getValueCount() {
            return this.value_.size();
        }
        
        @Override
        public EnumValueDescriptorProto getValue(final int index) {
            return this.value_.get(index);
        }
        
        @Override
        public EnumValueDescriptorProtoOrBuilder getValueOrBuilder(final int index) {
            return this.value_.get(index);
        }
        
        @Override
        public boolean hasOptions() {
            return (this.bitField0_ & 0x2) != 0x0;
        }
        
        @Override
        public EnumOptions getOptions() {
            return (this.options_ == null) ? EnumOptions.getDefaultInstance() : this.options_;
        }
        
        @Override
        public EnumOptionsOrBuilder getOptionsOrBuilder() {
            return (this.options_ == null) ? EnumOptions.getDefaultInstance() : this.options_;
        }
        
        @Override
        public List<EnumReservedRange> getReservedRangeList() {
            return this.reservedRange_;
        }
        
        @Override
        public List<? extends EnumReservedRangeOrBuilder> getReservedRangeOrBuilderList() {
            return this.reservedRange_;
        }
        
        @Override
        public int getReservedRangeCount() {
            return this.reservedRange_.size();
        }
        
        @Override
        public EnumReservedRange getReservedRange(final int index) {
            return this.reservedRange_.get(index);
        }
        
        @Override
        public EnumReservedRangeOrBuilder getReservedRangeOrBuilder(final int index) {
            return this.reservedRange_.get(index);
        }
        
        @Override
        public ProtocolStringList getReservedNameList() {
            return this.reservedName_;
        }
        
        @Override
        public int getReservedNameCount() {
            return this.reservedName_.size();
        }
        
        @Override
        public String getReservedName(final int index) {
            return this.reservedName_.get(index);
        }
        
        @Override
        public ByteString getReservedNameBytes(final int index) {
            return this.reservedName_.getByteString(index);
        }
        
        @Override
        public boolean hasVisibility() {
            return (this.bitField0_ & 0x4) != 0x0;
        }
        
        @Override
        public SymbolVisibility getVisibility() {
            final SymbolVisibility result = SymbolVisibility.forNumber(this.visibility_);
            return (result == null) ? SymbolVisibility.VISIBILITY_UNSET : result;
        }
        
        @Override
        public final boolean isInitialized() {
            final byte isInitialized = this.memoizedIsInitialized;
            if (isInitialized == 1) {
                return true;
            }
            if (isInitialized == 0) {
                return false;
            }
            for (int i = 0; i < this.getValueCount(); ++i) {
                if (!this.getValue(i).isInitialized()) {
                    this.memoizedIsInitialized = 0;
                    return false;
                }
            }
            if (this.hasOptions() && !this.getOptions().isInitialized()) {
                this.memoizedIsInitialized = 0;
                return false;
            }
            this.memoizedIsInitialized = 1;
            return true;
        }
        
        @Override
        public void writeTo(final CodedOutputStream output) throws IOException {
            if ((this.bitField0_ & 0x1) != 0x0) {
                GeneratedMessage.writeString(output, 1, this.name_);
            }
            for (int i = 0; i < this.value_.size(); ++i) {
                output.writeMessage(2, this.value_.get(i));
            }
            if ((this.bitField0_ & 0x2) != 0x0) {
                output.writeMessage(3, this.getOptions());
            }
            for (int i = 0; i < this.reservedRange_.size(); ++i) {
                output.writeMessage(4, this.reservedRange_.get(i));
            }
            for (int i = 0; i < this.reservedName_.size(); ++i) {
                GeneratedMessage.writeString(output, 5, this.reservedName_.getRaw(i));
            }
            if ((this.bitField0_ & 0x4) != 0x0) {
                output.writeEnum(6, this.visibility_);
            }
            this.getUnknownFields().writeTo(output);
        }
        
        @Override
        public int getSerializedSize() {
            int size = this.memoizedSize;
            if (size != -1) {
                return size;
            }
            size = 0;
            if ((this.bitField0_ & 0x1) != 0x0) {
                size += GeneratedMessage.computeStringSize(1, this.name_);
            }
            for (int i = 0; i < this.value_.size(); ++i) {
                size += CodedOutputStream.computeMessageSize(2, this.value_.get(i));
            }
            if ((this.bitField0_ & 0x2) != 0x0) {
                size += CodedOutputStream.computeMessageSize(3, this.getOptions());
            }
            for (int i = 0; i < this.reservedRange_.size(); ++i) {
                size += CodedOutputStream.computeMessageSize(4, this.reservedRange_.get(i));
            }
            int dataSize = 0;
            for (int j = 0; j < this.reservedName_.size(); ++j) {
                dataSize += GeneratedMessage.computeStringSizeNoTag(this.reservedName_.getRaw(j));
            }
            size += dataSize;
            size += 1 * this.getReservedNameList().size();
            if ((this.bitField0_ & 0x4) != 0x0) {
                size += CodedOutputStream.computeEnumSize(6, this.visibility_);
            }
            size += this.getUnknownFields().getSerializedSize();
            return this.memoizedSize = size;
        }
        
        @Override
        public boolean equals(final Object obj) {
            if (obj == this) {
                return true;
            }
            if (!(obj instanceof EnumDescriptorProto)) {
                return super.equals(obj);
            }
            final EnumDescriptorProto other = (EnumDescriptorProto)obj;
            return this.hasName() == other.hasName() && (!this.hasName() || this.getName().equals(other.getName())) && this.getValueList().equals(other.getValueList()) && this.hasOptions() == other.hasOptions() && (!this.hasOptions() || this.getOptions().equals(other.getOptions())) && this.getReservedRangeList().equals(other.getReservedRangeList()) && this.getReservedNameList().equals(other.getReservedNameList()) && this.hasVisibility() == other.hasVisibility() && (!this.hasVisibility() || this.visibility_ == other.visibility_) && this.getUnknownFields().equals(other.getUnknownFields());
        }
        
        @Override
        public int hashCode() {
            if (this.memoizedHashCode != 0) {
                return this.memoizedHashCode;
            }
            int hash = 41;
            hash = 19 * hash + getDescriptor().hashCode();
            if (this.hasName()) {
                hash = 37 * hash + 1;
                hash = 53 * hash + this.getName().hashCode();
            }
            if (this.getValueCount() > 0) {
                hash = 37 * hash + 2;
                hash = 53 * hash + this.getValueList().hashCode();
            }
            if (this.hasOptions()) {
                hash = 37 * hash + 3;
                hash = 53 * hash + this.getOptions().hashCode();
            }
            if (this.getReservedRangeCount() > 0) {
                hash = 37 * hash + 4;
                hash = 53 * hash + this.getReservedRangeList().hashCode();
            }
            if (this.getReservedNameCount() > 0) {
                hash = 37 * hash + 5;
                hash = 53 * hash + this.getReservedNameList().hashCode();
            }
            if (this.hasVisibility()) {
                hash = 37 * hash + 6;
                hash = 53 * hash + this.visibility_;
            }
            hash = 29 * hash + this.getUnknownFields().hashCode();
            return this.memoizedHashCode = hash;
        }
        
        public static EnumDescriptorProto parseFrom(final ByteBuffer data) throws InvalidProtocolBufferException {
            return EnumDescriptorProto.PARSER.parseFrom(data);
        }
        
        public static EnumDescriptorProto parseFrom(final ByteBuffer data, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
            return EnumDescriptorProto.PARSER.parseFrom(data, extensionRegistry);
        }
        
        public static EnumDescriptorProto parseFrom(final ByteString data) throws InvalidProtocolBufferException {
            return EnumDescriptorProto.PARSER.parseFrom(data);
        }
        
        public static EnumDescriptorProto parseFrom(final ByteString data, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
            return EnumDescriptorProto.PARSER.parseFrom(data, extensionRegistry);
        }
        
        public static EnumDescriptorProto parseFrom(final byte[] data) throws InvalidProtocolBufferException {
            return EnumDescriptorProto.PARSER.parseFrom(data);
        }
        
        public static EnumDescriptorProto parseFrom(final byte[] data, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
            return EnumDescriptorProto.PARSER.parseFrom(data, extensionRegistry);
        }
        
        public static EnumDescriptorProto parseFrom(final InputStream input) throws IOException {
            return GeneratedMessage.parseWithIOException(EnumDescriptorProto.PARSER, input);
        }
        
        public static EnumDescriptorProto parseFrom(final InputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
            return GeneratedMessage.parseWithIOException(EnumDescriptorProto.PARSER, input, extensionRegistry);
        }
        
        public static EnumDescriptorProto parseDelimitedFrom(final InputStream input) throws IOException {
            return GeneratedMessage.parseDelimitedWithIOException(EnumDescriptorProto.PARSER, input);
        }
        
        public static EnumDescriptorProto parseDelimitedFrom(final InputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
            return GeneratedMessage.parseDelimitedWithIOException(EnumDescriptorProto.PARSER, input, extensionRegistry);
        }
        
        public static EnumDescriptorProto parseFrom(final CodedInputStream input) throws IOException {
            return GeneratedMessage.parseWithIOException(EnumDescriptorProto.PARSER, input);
        }
        
        public static EnumDescriptorProto parseFrom(final CodedInputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
            return GeneratedMessage.parseWithIOException(EnumDescriptorProto.PARSER, input, extensionRegistry);
        }
        
        @Override
        public Builder newBuilderForType() {
            return newBuilder();
        }
        
        public static Builder newBuilder() {
            return EnumDescriptorProto.DEFAULT_INSTANCE.toBuilder();
        }
        
        public static Builder newBuilder(final EnumDescriptorProto prototype) {
            return EnumDescriptorProto.DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
        }
        
        @Override
        public Builder toBuilder() {
            return (this == EnumDescriptorProto.DEFAULT_INSTANCE) ? new Builder() : new Builder().mergeFrom(this);
        }
        
        @Override
        protected Builder newBuilderForType(final BuilderParent parent) {
            final Builder builder = new Builder(parent);
            return builder;
        }
        
        public static EnumDescriptorProto getDefaultInstance() {
            return EnumDescriptorProto.DEFAULT_INSTANCE;
        }
        
        public static Parser<EnumDescriptorProto> parser() {
            return EnumDescriptorProto.PARSER;
        }
        
        @Override
        public Parser<EnumDescriptorProto> getParserForType() {
            return EnumDescriptorProto.PARSER;
        }
        
        @Override
        public EnumDescriptorProto getDefaultInstanceForType() {
            return EnumDescriptorProto.DEFAULT_INSTANCE;
        }
        
        static {
            RuntimeVersion.validateProtobufGencodeVersion(RuntimeVersion.RuntimeDomain.PUBLIC, 4, 33, 0, "", "EnumDescriptorProto");
            DEFAULT_INSTANCE = new EnumDescriptorProto();
            PARSER = new AbstractParser<EnumDescriptorProto>() {
                @Override
                public EnumDescriptorProto parsePartialFrom(final CodedInputStream input, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
                    final Builder builder = EnumDescriptorProto.newBuilder();
                    try {
                        builder.mergeFrom(input, extensionRegistry);
                    }
                    catch (final InvalidProtocolBufferException e) {
                        throw e.setUnfinishedMessage(builder.buildPartial());
                    }
                    catch (final UninitializedMessageException e2) {
                        throw e2.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
                    }
                    catch (final IOException e3) {
                        throw new InvalidProtocolBufferException(e3).setUnfinishedMessage(builder.buildPartial());
                    }
                    return builder.buildPartial();
                }
            };
        }
        
        public static final class EnumReservedRange extends GeneratedMessage implements EnumReservedRangeOrBuilder
        {
            private static final long serialVersionUID = 0L;
            private int bitField0_;
            public static final int START_FIELD_NUMBER = 1;
            private int start_;
            public static final int END_FIELD_NUMBER = 2;
            private int end_;
            private byte memoizedIsInitialized;
            private static final EnumReservedRange DEFAULT_INSTANCE;
            private static final Parser<EnumReservedRange> PARSER;
            
            private EnumReservedRange(final GeneratedMessage.Builder<?> builder) {
                super(builder);
                this.start_ = 0;
                this.end_ = 0;
                this.memoizedIsInitialized = -1;
            }
            
            private EnumReservedRange() {
                this.start_ = 0;
                this.end_ = 0;
                this.memoizedIsInitialized = -1;
            }
            
            public static final Descriptors.Descriptor getDescriptor() {
                return DescriptorProtos.internal_static_google_protobuf_EnumDescriptorProto_EnumReservedRange_descriptor;
            }
            
            @Override
            protected FieldAccessorTable internalGetFieldAccessorTable() {
                return DescriptorProtos.internal_static_google_protobuf_EnumDescriptorProto_EnumReservedRange_fieldAccessorTable.ensureFieldAccessorsInitialized(EnumReservedRange.class, Builder.class);
            }
            
            @Override
            public boolean hasStart() {
                return (this.bitField0_ & 0x1) != 0x0;
            }
            
            @Override
            public int getStart() {
                return this.start_;
            }
            
            @Override
            public boolean hasEnd() {
                return (this.bitField0_ & 0x2) != 0x0;
            }
            
            @Override
            public int getEnd() {
                return this.end_;
            }
            
            @Override
            public final boolean isInitialized() {
                final byte isInitialized = this.memoizedIsInitialized;
                if (isInitialized == 1) {
                    return true;
                }
                if (isInitialized == 0) {
                    return false;
                }
                this.memoizedIsInitialized = 1;
                return true;
            }
            
            @Override
            public void writeTo(final CodedOutputStream output) throws IOException {
                if ((this.bitField0_ & 0x1) != 0x0) {
                    output.writeInt32(1, this.start_);
                }
                if ((this.bitField0_ & 0x2) != 0x0) {
                    output.writeInt32(2, this.end_);
                }
                this.getUnknownFields().writeTo(output);
            }
            
            @Override
            public int getSerializedSize() {
                int size = this.memoizedSize;
                if (size != -1) {
                    return size;
                }
                size = 0;
                if ((this.bitField0_ & 0x1) != 0x0) {
                    size += CodedOutputStream.computeInt32Size(1, this.start_);
                }
                if ((this.bitField0_ & 0x2) != 0x0) {
                    size += CodedOutputStream.computeInt32Size(2, this.end_);
                }
                size += this.getUnknownFields().getSerializedSize();
                return this.memoizedSize = size;
            }
            
            @Override
            public boolean equals(final Object obj) {
                if (obj == this) {
                    return true;
                }
                if (!(obj instanceof EnumReservedRange)) {
                    return super.equals(obj);
                }
                final EnumReservedRange other = (EnumReservedRange)obj;
                return this.hasStart() == other.hasStart() && (!this.hasStart() || this.getStart() == other.getStart()) && this.hasEnd() == other.hasEnd() && (!this.hasEnd() || this.getEnd() == other.getEnd()) && this.getUnknownFields().equals(other.getUnknownFields());
            }
            
            @Override
            public int hashCode() {
                if (this.memoizedHashCode != 0) {
                    return this.memoizedHashCode;
                }
                int hash = 41;
                hash = 19 * hash + getDescriptor().hashCode();
                if (this.hasStart()) {
                    hash = 37 * hash + 1;
                    hash = 53 * hash + this.getStart();
                }
                if (this.hasEnd()) {
                    hash = 37 * hash + 2;
                    hash = 53 * hash + this.getEnd();
                }
                hash = 29 * hash + this.getUnknownFields().hashCode();
                return this.memoizedHashCode = hash;
            }
            
            public static EnumReservedRange parseFrom(final ByteBuffer data) throws InvalidProtocolBufferException {
                return EnumReservedRange.PARSER.parseFrom(data);
            }
            
            public static EnumReservedRange parseFrom(final ByteBuffer data, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
                return EnumReservedRange.PARSER.parseFrom(data, extensionRegistry);
            }
            
            public static EnumReservedRange parseFrom(final ByteString data) throws InvalidProtocolBufferException {
                return EnumReservedRange.PARSER.parseFrom(data);
            }
            
            public static EnumReservedRange parseFrom(final ByteString data, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
                return EnumReservedRange.PARSER.parseFrom(data, extensionRegistry);
            }
            
            public static EnumReservedRange parseFrom(final byte[] data) throws InvalidProtocolBufferException {
                return EnumReservedRange.PARSER.parseFrom(data);
            }
            
            public static EnumReservedRange parseFrom(final byte[] data, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
                return EnumReservedRange.PARSER.parseFrom(data, extensionRegistry);
            }
            
            public static EnumReservedRange parseFrom(final InputStream input) throws IOException {
                return GeneratedMessage.parseWithIOException(EnumReservedRange.PARSER, input);
            }
            
            public static EnumReservedRange parseFrom(final InputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
                return GeneratedMessage.parseWithIOException(EnumReservedRange.PARSER, input, extensionRegistry);
            }
            
            public static EnumReservedRange parseDelimitedFrom(final InputStream input) throws IOException {
                return GeneratedMessage.parseDelimitedWithIOException(EnumReservedRange.PARSER, input);
            }
            
            public static EnumReservedRange parseDelimitedFrom(final InputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
                return GeneratedMessage.parseDelimitedWithIOException(EnumReservedRange.PARSER, input, extensionRegistry);
            }
            
            public static EnumReservedRange parseFrom(final CodedInputStream input) throws IOException {
                return GeneratedMessage.parseWithIOException(EnumReservedRange.PARSER, input);
            }
            
            public static EnumReservedRange parseFrom(final CodedInputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
                return GeneratedMessage.parseWithIOException(EnumReservedRange.PARSER, input, extensionRegistry);
            }
            
            @Override
            public Builder newBuilderForType() {
                return newBuilder();
            }
            
            public static Builder newBuilder() {
                return EnumReservedRange.DEFAULT_INSTANCE.toBuilder();
            }
            
            public static Builder newBuilder(final EnumReservedRange prototype) {
                return EnumReservedRange.DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
            }
            
            @Override
            public Builder toBuilder() {
                return (this == EnumReservedRange.DEFAULT_INSTANCE) ? new Builder() : new Builder().mergeFrom(this);
            }
            
            @Override
            protected Builder newBuilderForType(final BuilderParent parent) {
                final Builder builder = new Builder(parent);
                return builder;
            }
            
            public static EnumReservedRange getDefaultInstance() {
                return EnumReservedRange.DEFAULT_INSTANCE;
            }
            
            public static Parser<EnumReservedRange> parser() {
                return EnumReservedRange.PARSER;
            }
            
            @Override
            public Parser<EnumReservedRange> getParserForType() {
                return EnumReservedRange.PARSER;
            }
            
            @Override
            public EnumReservedRange getDefaultInstanceForType() {
                return EnumReservedRange.DEFAULT_INSTANCE;
            }
            
            static {
                RuntimeVersion.validateProtobufGencodeVersion(RuntimeVersion.RuntimeDomain.PUBLIC, 4, 33, 0, "", "EnumReservedRange");
                DEFAULT_INSTANCE = new EnumReservedRange();
                PARSER = new AbstractParser<EnumReservedRange>() {
                    @Override
                    public EnumReservedRange parsePartialFrom(final CodedInputStream input, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
                        final Builder builder = EnumReservedRange.newBuilder();
                        try {
                            builder.mergeFrom(input, extensionRegistry);
                        }
                        catch (final InvalidProtocolBufferException e) {
                            throw e.setUnfinishedMessage(builder.buildPartial());
                        }
                        catch (final UninitializedMessageException e2) {
                            throw e2.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
                        }
                        catch (final IOException e3) {
                            throw new InvalidProtocolBufferException(e3).setUnfinishedMessage(builder.buildPartial());
                        }
                        return builder.buildPartial();
                    }
                };
            }
            
            public static final class Builder extends GeneratedMessage.Builder<Builder> implements EnumReservedRangeOrBuilder
            {
                private int bitField0_;
                private int start_;
                private int end_;
                
                public static final Descriptors.Descriptor getDescriptor() {
                    return DescriptorProtos.internal_static_google_protobuf_EnumDescriptorProto_EnumReservedRange_descriptor;
                }
                
                @Override
                protected FieldAccessorTable internalGetFieldAccessorTable() {
                    return DescriptorProtos.internal_static_google_protobuf_EnumDescriptorProto_EnumReservedRange_fieldAccessorTable.ensureFieldAccessorsInitialized(EnumReservedRange.class, Builder.class);
                }
                
                private Builder() {
                }
                
                private Builder(final BuilderParent parent) {
                    super(parent);
                }
                
                @Override
                public Builder clear() {
                    super.clear();
                    this.bitField0_ = 0;
                    this.start_ = 0;
                    this.end_ = 0;
                    return this;
                }
                
                @Override
                public Descriptors.Descriptor getDescriptorForType() {
                    return DescriptorProtos.internal_static_google_protobuf_EnumDescriptorProto_EnumReservedRange_descriptor;
                }
                
                @Override
                public EnumReservedRange getDefaultInstanceForType() {
                    return EnumReservedRange.getDefaultInstance();
                }
                
                @Override
                public EnumReservedRange build() {
                    final EnumReservedRange result = this.buildPartial();
                    if (!result.isInitialized()) {
                        throw AbstractMessage.Builder.newUninitializedMessageException(result);
                    }
                    return result;
                }
                
                @Override
                public EnumReservedRange buildPartial() {
                    final EnumReservedRange result = new EnumReservedRange((GeneratedMessage.Builder)this);
                    if (this.bitField0_ != 0) {
                        this.buildPartial0(result);
                    }
                    this.onBuilt();
                    return result;
                }
                
                private void buildPartial0(final EnumReservedRange result) {
                    final int from_bitField0_ = this.bitField0_;
                    int to_bitField0_ = 0;
                    if ((from_bitField0_ & 0x1) != 0x0) {
                        result.start_ = this.start_;
                        to_bitField0_ |= 0x1;
                    }
                    if ((from_bitField0_ & 0x2) != 0x0) {
                        result.end_ = this.end_;
                        to_bitField0_ |= 0x2;
                    }
                    result.bitField0_ |= to_bitField0_;
                }
                
                @Override
                public Builder mergeFrom(final Message other) {
                    if (other instanceof EnumReservedRange) {
                        return this.mergeFrom((EnumReservedRange)other);
                    }
                    super.mergeFrom(other);
                    return this;
                }
                
                public Builder mergeFrom(final EnumReservedRange other) {
                    if (other == EnumReservedRange.getDefaultInstance()) {
                        return this;
                    }
                    if (other.hasStart()) {
                        this.setStart(other.getStart());
                    }
                    if (other.hasEnd()) {
                        this.setEnd(other.getEnd());
                    }
                    this.mergeUnknownFields(other.getUnknownFields());
                    this.onChanged();
                    return this;
                }
                
                @Override
                public final boolean isInitialized() {
                    return true;
                }
                
                @Override
                public Builder mergeFrom(final CodedInputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
                    if (extensionRegistry == null) {
                        throw new NullPointerException();
                    }
                    try {
                        boolean done = false;
                        while (!done) {
                            final int tag = input.readTag();
                            switch (tag) {
                                case 0: {
                                    done = true;
                                    continue;
                                }
                                case 8: {
                                    this.start_ = input.readInt32();
                                    this.bitField0_ |= 0x1;
                                    continue;
                                }
                                case 16: {
                                    this.end_ = input.readInt32();
                                    this.bitField0_ |= 0x2;
                                    continue;
                                }
                                default: {
                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                                        done = true;
                                        continue;
                                    }
                                    continue;
                                }
                            }
                        }
                    }
                    catch (final InvalidProtocolBufferException e) {
                        throw e.unwrapIOException();
                    }
                    finally {
                        this.onChanged();
                    }
                    return this;
                }
                
                @Override
                public boolean hasStart() {
                    return (this.bitField0_ & 0x1) != 0x0;
                }
                
                @Override
                public int getStart() {
                    return this.start_;
                }
                
                public Builder setStart(final int value) {
                    this.start_ = value;
                    this.bitField0_ |= 0x1;
                    this.onChanged();
                    return this;
                }
                
                public Builder clearStart() {
                    this.bitField0_ &= 0xFFFFFFFE;
                    this.start_ = 0;
                    this.onChanged();
                    return this;
                }
                
                @Override
                public boolean hasEnd() {
                    return (this.bitField0_ & 0x2) != 0x0;
                }
                
                @Override
                public int getEnd() {
                    return this.end_;
                }
                
                public Builder setEnd(final int value) {
                    this.end_ = value;
                    this.bitField0_ |= 0x2;
                    this.onChanged();
                    return this;
                }
                
                public Builder clearEnd() {
                    this.bitField0_ &= 0xFFFFFFFD;
                    this.end_ = 0;
                    this.onChanged();
                    return this;
                }
            }
        }
        
        public static final class Builder extends GeneratedMessage.Builder<Builder> implements EnumDescriptorProtoOrBuilder
        {
            private int bitField0_;
            private Object name_;
            private List<EnumValueDescriptorProto> value_;
            private RepeatedFieldBuilder<EnumValueDescriptorProto, EnumValueDescriptorProto.Builder, EnumValueDescriptorProtoOrBuilder> valueBuilder_;
            private EnumOptions options_;
            private SingleFieldBuilder<EnumOptions, EnumOptions.Builder, EnumOptionsOrBuilder> optionsBuilder_;
            private List<EnumReservedRange> reservedRange_;
            private RepeatedFieldBuilder<EnumReservedRange, EnumReservedRange.Builder, EnumReservedRangeOrBuilder> reservedRangeBuilder_;
            private LazyStringArrayList reservedName_;
            private int visibility_;
            
            public static final Descriptors.Descriptor getDescriptor() {
                return DescriptorProtos.internal_static_google_protobuf_EnumDescriptorProto_descriptor;
            }
            
            @Override
            protected FieldAccessorTable internalGetFieldAccessorTable() {
                return DescriptorProtos.internal_static_google_protobuf_EnumDescriptorProto_fieldAccessorTable.ensureFieldAccessorsInitialized(EnumDescriptorProto.class, Builder.class);
            }
            
            private Builder() {
                this.name_ = "";
                this.value_ = Collections.emptyList();
                this.reservedRange_ = Collections.emptyList();
                this.reservedName_ = LazyStringArrayList.emptyList();
                this.visibility_ = 0;
                this.maybeForceBuilderInitialization();
            }
            
            private Builder(final BuilderParent parent) {
                super(parent);
                this.name_ = "";
                this.value_ = Collections.emptyList();
                this.reservedRange_ = Collections.emptyList();
                this.reservedName_ = LazyStringArrayList.emptyList();
                this.visibility_ = 0;
                this.maybeForceBuilderInitialization();
            }
            
            private void maybeForceBuilderInitialization() {
                if (GeneratedMessage.alwaysUseFieldBuilders) {
                    this.internalGetValueFieldBuilder();
                    this.internalGetOptionsFieldBuilder();
                    this.internalGetReservedRangeFieldBuilder();
                }
            }
            
            @Override
            public Builder clear() {
                super.clear();
                this.bitField0_ = 0;
                this.name_ = "";
                if (this.valueBuilder_ == null) {
                    this.value_ = Collections.emptyList();
                }
                else {
                    this.value_ = null;
                    this.valueBuilder_.clear();
                }
                this.bitField0_ &= 0xFFFFFFFD;
                this.options_ = null;
                if (this.optionsBuilder_ != null) {
                    this.optionsBuilder_.dispose();
                    this.optionsBuilder_ = null;
                }
                if (this.reservedRangeBuilder_ == null) {
                    this.reservedRange_ = Collections.emptyList();
                }
                else {
                    this.reservedRange_ = null;
                    this.reservedRangeBuilder_.clear();
                }
                this.bitField0_ &= 0xFFFFFFF7;
                this.reservedName_ = LazyStringArrayList.emptyList();
                this.visibility_ = 0;
                return this;
            }
            
            @Override
            public Descriptors.Descriptor getDescriptorForType() {
                return DescriptorProtos.internal_static_google_protobuf_EnumDescriptorProto_descriptor;
            }
            
            @Override
            public EnumDescriptorProto getDefaultInstanceForType() {
                return EnumDescriptorProto.getDefaultInstance();
            }
            
            @Override
            public EnumDescriptorProto build() {
                final EnumDescriptorProto result = this.buildPartial();
                if (!result.isInitialized()) {
                    throw AbstractMessage.Builder.newUninitializedMessageException(result);
                }
                return result;
            }
            
            @Override
            public EnumDescriptorProto buildPartial() {
                final EnumDescriptorProto result = new EnumDescriptorProto((GeneratedMessage.Builder)this);
                this.buildPartialRepeatedFields(result);
                if (this.bitField0_ != 0) {
                    this.buildPartial0(result);
                }
                this.onBuilt();
                return result;
            }
            
            private void buildPartialRepeatedFields(final EnumDescriptorProto result) {
                if (this.valueBuilder_ == null) {
                    if ((this.bitField0_ & 0x2) != 0x0) {
                        this.value_ = Collections.unmodifiableList((List<? extends EnumValueDescriptorProto>)this.value_);
                        this.bitField0_ &= 0xFFFFFFFD;
                    }
                    result.value_ = this.value_;
                }
                else {
                    result.value_ = this.valueBuilder_.build();
                }
                if (this.reservedRangeBuilder_ == null) {
                    if ((this.bitField0_ & 0x8) != 0x0) {
                        this.reservedRange_ = Collections.unmodifiableList((List<? extends EnumReservedRange>)this.reservedRange_);
                        this.bitField0_ &= 0xFFFFFFF7;
                    }
                    result.reservedRange_ = this.reservedRange_;
                }
                else {
                    result.reservedRange_ = this.reservedRangeBuilder_.build();
                }
            }
            
            private void buildPartial0(final EnumDescriptorProto result) {
                final int from_bitField0_ = this.bitField0_;
                int to_bitField0_ = 0;
                if ((from_bitField0_ & 0x1) != 0x0) {
                    result.name_ = this.name_;
                    to_bitField0_ |= 0x1;
                }
                if ((from_bitField0_ & 0x4) != 0x0) {
                    result.options_ = ((this.optionsBuilder_ == null) ? this.options_ : this.optionsBuilder_.build());
                    to_bitField0_ |= 0x2;
                }
                if ((from_bitField0_ & 0x10) != 0x0) {
                    this.reservedName_.makeImmutable();
                    result.reservedName_ = this.reservedName_;
                }
                if ((from_bitField0_ & 0x20) != 0x0) {
                    result.visibility_ = this.visibility_;
                    to_bitField0_ |= 0x4;
                }
                result.bitField0_ |= to_bitField0_;
            }
            
            @Override
            public Builder mergeFrom(final Message other) {
                if (other instanceof EnumDescriptorProto) {
                    return this.mergeFrom((EnumDescriptorProto)other);
                }
                super.mergeFrom(other);
                return this;
            }
            
            public Builder mergeFrom(final EnumDescriptorProto other) {
                if (other == EnumDescriptorProto.getDefaultInstance()) {
                    return this;
                }
                if (other.hasName()) {
                    this.name_ = other.name_;
                    this.bitField0_ |= 0x1;
                    this.onChanged();
                }
                if (this.valueBuilder_ == null) {
                    if (!other.value_.isEmpty()) {
                        if (this.value_.isEmpty()) {
                            this.value_ = other.value_;
                            this.bitField0_ &= 0xFFFFFFFD;
                        }
                        else {
                            this.ensureValueIsMutable();
                            this.value_.addAll(other.value_);
                        }
                        this.onChanged();
                    }
                }
                else if (!other.value_.isEmpty()) {
                    if (this.valueBuilder_.isEmpty()) {
                        this.valueBuilder_.dispose();
                        this.valueBuilder_ = null;
                        this.value_ = other.value_;
                        this.bitField0_ &= 0xFFFFFFFD;
                        this.valueBuilder_ = (GeneratedMessage.alwaysUseFieldBuilders ? this.internalGetValueFieldBuilder() : null);
                    }
                    else {
                        this.valueBuilder_.addAllMessages(other.value_);
                    }
                }
                if (other.hasOptions()) {
                    this.mergeOptions(other.getOptions());
                }
                if (this.reservedRangeBuilder_ == null) {
                    if (!other.reservedRange_.isEmpty()) {
                        if (this.reservedRange_.isEmpty()) {
                            this.reservedRange_ = other.reservedRange_;
                            this.bitField0_ &= 0xFFFFFFF7;
                        }
                        else {
                            this.ensureReservedRangeIsMutable();
                            this.reservedRange_.addAll(other.reservedRange_);
                        }
                        this.onChanged();
                    }
                }
                else if (!other.reservedRange_.isEmpty()) {
                    if (this.reservedRangeBuilder_.isEmpty()) {
                        this.reservedRangeBuilder_.dispose();
                        this.reservedRangeBuilder_ = null;
                        this.reservedRange_ = other.reservedRange_;
                        this.bitField0_ &= 0xFFFFFFF7;
                        this.reservedRangeBuilder_ = (GeneratedMessage.alwaysUseFieldBuilders ? this.internalGetReservedRangeFieldBuilder() : null);
                    }
                    else {
                        this.reservedRangeBuilder_.addAllMessages(other.reservedRange_);
                    }
                }
                if (!other.reservedName_.isEmpty()) {
                    if (this.reservedName_.isEmpty()) {
                        this.reservedName_ = other.reservedName_;
                        this.bitField0_ |= 0x10;
                    }
                    else {
                        this.ensureReservedNameIsMutable();
                        this.reservedName_.addAll(other.reservedName_);
                    }
                    this.onChanged();
                }
                if (other.hasVisibility()) {
                    this.setVisibility(other.getVisibility());
                }
                this.mergeUnknownFields(other.getUnknownFields());
                this.onChanged();
                return this;
            }
            
            @Override
            public final boolean isInitialized() {
                for (int i = 0; i < this.getValueCount(); ++i) {
                    if (!this.getValue(i).isInitialized()) {
                        return false;
                    }
                }
                return !this.hasOptions() || this.getOptions().isInitialized();
            }
            
            @Override
            public Builder mergeFrom(final CodedInputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
                if (extensionRegistry == null) {
                    throw new NullPointerException();
                }
                try {
                    boolean done = false;
                    while (!done) {
                        final int tag = input.readTag();
                        switch (tag) {
                            case 0: {
                                done = true;
                                continue;
                            }
                            case 10: {
                                this.name_ = input.readBytes();
                                this.bitField0_ |= 0x1;
                                continue;
                            }
                            case 18: {
                                final EnumValueDescriptorProto m = input.readMessage(EnumValueDescriptorProto.parser(), extensionRegistry);
                                if (this.valueBuilder_ == null) {
                                    this.ensureValueIsMutable();
                                    this.value_.add(m);
                                    continue;
                                }
                                this.valueBuilder_.addMessage(m);
                                continue;
                            }
                            case 26: {
                                input.readMessage(this.internalGetOptionsFieldBuilder().getBuilder(), extensionRegistry);
                                this.bitField0_ |= 0x4;
                                continue;
                            }
                            case 34: {
                                final EnumReservedRange i = input.readMessage(EnumReservedRange.parser(), extensionRegistry);
                                if (this.reservedRangeBuilder_ == null) {
                                    this.ensureReservedRangeIsMutable();
                                    this.reservedRange_.add(i);
                                    continue;
                                }
                                this.reservedRangeBuilder_.addMessage(i);
                                continue;
                            }
                            case 42: {
                                final ByteString bs = input.readBytes();
                                this.ensureReservedNameIsMutable();
                                this.reservedName_.add(bs);
                                continue;
                            }
                            case 48: {
                                final int tmpRaw = input.readEnum();
                                final SymbolVisibility tmpValue = SymbolVisibility.forNumber(tmpRaw);
                                if (tmpValue == null) {
                                    this.mergeUnknownVarintField(6, tmpRaw);
                                    continue;
                                }
                                this.visibility_ = tmpRaw;
                                this.bitField0_ |= 0x20;
                                continue;
                            }
                            default: {
                                if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                                    done = true;
                                    continue;
                                }
                                continue;
                            }
                        }
                    }
                }
                catch (final InvalidProtocolBufferException e) {
                    throw e.unwrapIOException();
                }
                finally {
                    this.onChanged();
                }
                return this;
            }
            
            @Override
            public boolean hasName() {
                return (this.bitField0_ & 0x1) != 0x0;
            }
            
            @Override
            public String getName() {
                final Object ref = this.name_;
                if (!(ref instanceof String)) {
                    final ByteString bs = (ByteString)ref;
                    final String s = bs.toStringUtf8();
                    if (bs.isValidUtf8()) {
                        this.name_ = s;
                    }
                    return s;
                }
                return (String)ref;
            }
            
            @Override
            public ByteString getNameBytes() {
                final Object ref = this.name_;
                if (ref instanceof String) {
                    final ByteString b = ByteString.copyFromUtf8((String)ref);
                    return (ByteString)(this.name_ = b);
                }
                return (ByteString)ref;
            }
            
            public Builder setName(final String value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                this.name_ = value;
                this.bitField0_ |= 0x1;
                this.onChanged();
                return this;
            }
            
            public Builder clearName() {
                this.name_ = EnumDescriptorProto.getDefaultInstance().getName();
                this.bitField0_ &= 0xFFFFFFFE;
                this.onChanged();
                return this;
            }
            
            public Builder setNameBytes(final ByteString value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                this.name_ = value;
                this.bitField0_ |= 0x1;
                this.onChanged();
                return this;
            }
            
            private void ensureValueIsMutable() {
                if ((this.bitField0_ & 0x2) == 0x0) {
                    this.value_ = new ArrayList<EnumValueDescriptorProto>(this.value_);
                    this.bitField0_ |= 0x2;
                }
            }
            
            @Override
            public List<EnumValueDescriptorProto> getValueList() {
                if (this.valueBuilder_ == null) {
                    return Collections.unmodifiableList((List<? extends EnumValueDescriptorProto>)this.value_);
                }
                return this.valueBuilder_.getMessageList();
            }
            
            @Override
            public int getValueCount() {
                if (this.valueBuilder_ == null) {
                    return this.value_.size();
                }
                return this.valueBuilder_.getCount();
            }
            
            @Override
            public EnumValueDescriptorProto getValue(final int index) {
                if (this.valueBuilder_ == null) {
                    return this.value_.get(index);
                }
                return this.valueBuilder_.getMessage(index);
            }
            
            public Builder setValue(final int index, final EnumValueDescriptorProto value) {
                if (this.valueBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.ensureValueIsMutable();
                    this.value_.set(index, value);
                    this.onChanged();
                }
                else {
                    this.valueBuilder_.setMessage(index, value);
                }
                return this;
            }
            
            public Builder setValue(final int index, final EnumValueDescriptorProto.Builder builderForValue) {
                if (this.valueBuilder_ == null) {
                    this.ensureValueIsMutable();
                    this.value_.set(index, builderForValue.build());
                    this.onChanged();
                }
                else {
                    this.valueBuilder_.setMessage(index, builderForValue.build());
                }
                return this;
            }
            
            public Builder addValue(final EnumValueDescriptorProto value) {
                if (this.valueBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.ensureValueIsMutable();
                    this.value_.add(value);
                    this.onChanged();
                }
                else {
                    this.valueBuilder_.addMessage(value);
                }
                return this;
            }
            
            public Builder addValue(final int index, final EnumValueDescriptorProto value) {
                if (this.valueBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.ensureValueIsMutable();
                    this.value_.add(index, value);
                    this.onChanged();
                }
                else {
                    this.valueBuilder_.addMessage(index, value);
                }
                return this;
            }
            
            public Builder addValue(final EnumValueDescriptorProto.Builder builderForValue) {
                if (this.valueBuilder_ == null) {
                    this.ensureValueIsMutable();
                    this.value_.add(builderForValue.build());
                    this.onChanged();
                }
                else {
                    this.valueBuilder_.addMessage(builderForValue.build());
                }
                return this;
            }
            
            public Builder addValue(final int index, final EnumValueDescriptorProto.Builder builderForValue) {
                if (this.valueBuilder_ == null) {
                    this.ensureValueIsMutable();
                    this.value_.add(index, builderForValue.build());
                    this.onChanged();
                }
                else {
                    this.valueBuilder_.addMessage(index, builderForValue.build());
                }
                return this;
            }
            
            public Builder addAllValue(final Iterable<? extends EnumValueDescriptorProto> values) {
                if (this.valueBuilder_ == null) {
                    this.ensureValueIsMutable();
                    AbstractMessageLite.Builder.addAll(values, this.value_);
                    this.onChanged();
                }
                else {
                    this.valueBuilder_.addAllMessages(values);
                }
                return this;
            }
            
            public Builder clearValue() {
                if (this.valueBuilder_ == null) {
                    this.value_ = Collections.emptyList();
                    this.bitField0_ &= 0xFFFFFFFD;
                    this.onChanged();
                }
                else {
                    this.valueBuilder_.clear();
                }
                return this;
            }
            
            public Builder removeValue(final int index) {
                if (this.valueBuilder_ == null) {
                    this.ensureValueIsMutable();
                    this.value_.remove(index);
                    this.onChanged();
                }
                else {
                    this.valueBuilder_.remove(index);
                }
                return this;
            }
            
            public EnumValueDescriptorProto.Builder getValueBuilder(final int index) {
                return this.internalGetValueFieldBuilder().getBuilder(index);
            }
            
            @Override
            public EnumValueDescriptorProtoOrBuilder getValueOrBuilder(final int index) {
                if (this.valueBuilder_ == null) {
                    return this.value_.get(index);
                }
                return this.valueBuilder_.getMessageOrBuilder(index);
            }
            
            @Override
            public List<? extends EnumValueDescriptorProtoOrBuilder> getValueOrBuilderList() {
                if (this.valueBuilder_ != null) {
                    return this.valueBuilder_.getMessageOrBuilderList();
                }
                return Collections.unmodifiableList((List<? extends EnumValueDescriptorProtoOrBuilder>)this.value_);
            }
            
            public EnumValueDescriptorProto.Builder addValueBuilder() {
                return this.internalGetValueFieldBuilder().addBuilder(EnumValueDescriptorProto.getDefaultInstance());
            }
            
            public EnumValueDescriptorProto.Builder addValueBuilder(final int index) {
                return this.internalGetValueFieldBuilder().addBuilder(index, EnumValueDescriptorProto.getDefaultInstance());
            }
            
            public List<EnumValueDescriptorProto.Builder> getValueBuilderList() {
                return this.internalGetValueFieldBuilder().getBuilderList();
            }
            
            private RepeatedFieldBuilder<EnumValueDescriptorProto, EnumValueDescriptorProto.Builder, EnumValueDescriptorProtoOrBuilder> internalGetValueFieldBuilder() {
                if (this.valueBuilder_ == null) {
                    this.valueBuilder_ = new RepeatedFieldBuilder<EnumValueDescriptorProto, EnumValueDescriptorProto.Builder, EnumValueDescriptorProtoOrBuilder>(this.value_, (this.bitField0_ & 0x2) != 0x0, this.getParentForChildren(), this.isClean());
                    this.value_ = null;
                }
                return this.valueBuilder_;
            }
            
            @Override
            public boolean hasOptions() {
                return (this.bitField0_ & 0x4) != 0x0;
            }
            
            @Override
            public EnumOptions getOptions() {
                if (this.optionsBuilder_ == null) {
                    return (this.options_ == null) ? EnumOptions.getDefaultInstance() : this.options_;
                }
                return this.optionsBuilder_.getMessage();
            }
            
            public Builder setOptions(final EnumOptions value) {
                if (this.optionsBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.options_ = value;
                }
                else {
                    this.optionsBuilder_.setMessage(value);
                }
                this.bitField0_ |= 0x4;
                this.onChanged();
                return this;
            }
            
            public Builder setOptions(final EnumOptions.Builder builderForValue) {
                if (this.optionsBuilder_ == null) {
                    this.options_ = builderForValue.build();
                }
                else {
                    this.optionsBuilder_.setMessage(builderForValue.build());
                }
                this.bitField0_ |= 0x4;
                this.onChanged();
                return this;
            }
            
            public Builder mergeOptions(final EnumOptions value) {
                if (this.optionsBuilder_ == null) {
                    if ((this.bitField0_ & 0x4) != 0x0 && this.options_ != null && this.options_ != EnumOptions.getDefaultInstance()) {
                        this.getOptionsBuilder().mergeFrom(value);
                    }
                    else {
                        this.options_ = value;
                    }
                }
                else {
                    this.optionsBuilder_.mergeFrom(value);
                }
                if (this.options_ != null) {
                    this.bitField0_ |= 0x4;
                    this.onChanged();
                }
                return this;
            }
            
            public Builder clearOptions() {
                this.bitField0_ &= 0xFFFFFFFB;
                this.options_ = null;
                if (this.optionsBuilder_ != null) {
                    this.optionsBuilder_.dispose();
                    this.optionsBuilder_ = null;
                }
                this.onChanged();
                return this;
            }
            
            public EnumOptions.Builder getOptionsBuilder() {
                this.bitField0_ |= 0x4;
                this.onChanged();
                return this.internalGetOptionsFieldBuilder().getBuilder();
            }
            
            @Override
            public EnumOptionsOrBuilder getOptionsOrBuilder() {
                if (this.optionsBuilder_ != null) {
                    return this.optionsBuilder_.getMessageOrBuilder();
                }
                return (this.options_ == null) ? EnumOptions.getDefaultInstance() : this.options_;
            }
            
            private SingleFieldBuilder<EnumOptions, EnumOptions.Builder, EnumOptionsOrBuilder> internalGetOptionsFieldBuilder() {
                if (this.optionsBuilder_ == null) {
                    this.optionsBuilder_ = new SingleFieldBuilder<EnumOptions, EnumOptions.Builder, EnumOptionsOrBuilder>(this.getOptions(), this.getParentForChildren(), this.isClean());
                    this.options_ = null;
                }
                return this.optionsBuilder_;
            }
            
            private void ensureReservedRangeIsMutable() {
                if ((this.bitField0_ & 0x8) == 0x0) {
                    this.reservedRange_ = new ArrayList<EnumReservedRange>(this.reservedRange_);
                    this.bitField0_ |= 0x8;
                }
            }
            
            @Override
            public List<EnumReservedRange> getReservedRangeList() {
                if (this.reservedRangeBuilder_ == null) {
                    return Collections.unmodifiableList((List<? extends EnumReservedRange>)this.reservedRange_);
                }
                return this.reservedRangeBuilder_.getMessageList();
            }
            
            @Override
            public int getReservedRangeCount() {
                if (this.reservedRangeBuilder_ == null) {
                    return this.reservedRange_.size();
                }
                return this.reservedRangeBuilder_.getCount();
            }
            
            @Override
            public EnumReservedRange getReservedRange(final int index) {
                if (this.reservedRangeBuilder_ == null) {
                    return this.reservedRange_.get(index);
                }
                return this.reservedRangeBuilder_.getMessage(index);
            }
            
            public Builder setReservedRange(final int index, final EnumReservedRange value) {
                if (this.reservedRangeBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.ensureReservedRangeIsMutable();
                    this.reservedRange_.set(index, value);
                    this.onChanged();
                }
                else {
                    this.reservedRangeBuilder_.setMessage(index, value);
                }
                return this;
            }
            
            public Builder setReservedRange(final int index, final EnumReservedRange.Builder builderForValue) {
                if (this.reservedRangeBuilder_ == null) {
                    this.ensureReservedRangeIsMutable();
                    this.reservedRange_.set(index, builderForValue.build());
                    this.onChanged();
                }
                else {
                    this.reservedRangeBuilder_.setMessage(index, builderForValue.build());
                }
                return this;
            }
            
            public Builder addReservedRange(final EnumReservedRange value) {
                if (this.reservedRangeBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.ensureReservedRangeIsMutable();
                    this.reservedRange_.add(value);
                    this.onChanged();
                }
                else {
                    this.reservedRangeBuilder_.addMessage(value);
                }
                return this;
            }
            
            public Builder addReservedRange(final int index, final EnumReservedRange value) {
                if (this.reservedRangeBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.ensureReservedRangeIsMutable();
                    this.reservedRange_.add(index, value);
                    this.onChanged();
                }
                else {
                    this.reservedRangeBuilder_.addMessage(index, value);
                }
                return this;
            }
            
            public Builder addReservedRange(final EnumReservedRange.Builder builderForValue) {
                if (this.reservedRangeBuilder_ == null) {
                    this.ensureReservedRangeIsMutable();
                    this.reservedRange_.add(builderForValue.build());
                    this.onChanged();
                }
                else {
                    this.reservedRangeBuilder_.addMessage(builderForValue.build());
                }
                return this;
            }
            
            public Builder addReservedRange(final int index, final EnumReservedRange.Builder builderForValue) {
                if (this.reservedRangeBuilder_ == null) {
                    this.ensureReservedRangeIsMutable();
                    this.reservedRange_.add(index, builderForValue.build());
                    this.onChanged();
                }
                else {
                    this.reservedRangeBuilder_.addMessage(index, builderForValue.build());
                }
                return this;
            }
            
            public Builder addAllReservedRange(final Iterable<? extends EnumReservedRange> values) {
                if (this.reservedRangeBuilder_ == null) {
                    this.ensureReservedRangeIsMutable();
                    AbstractMessageLite.Builder.addAll(values, this.reservedRange_);
                    this.onChanged();
                }
                else {
                    this.reservedRangeBuilder_.addAllMessages(values);
                }
                return this;
            }
            
            public Builder clearReservedRange() {
                if (this.reservedRangeBuilder_ == null) {
                    this.reservedRange_ = Collections.emptyList();
                    this.bitField0_ &= 0xFFFFFFF7;
                    this.onChanged();
                }
                else {
                    this.reservedRangeBuilder_.clear();
                }
                return this;
            }
            
            public Builder removeReservedRange(final int index) {
                if (this.reservedRangeBuilder_ == null) {
                    this.ensureReservedRangeIsMutable();
                    this.reservedRange_.remove(index);
                    this.onChanged();
                }
                else {
                    this.reservedRangeBuilder_.remove(index);
                }
                return this;
            }
            
            public EnumReservedRange.Builder getReservedRangeBuilder(final int index) {
                return this.internalGetReservedRangeFieldBuilder().getBuilder(index);
            }
            
            @Override
            public EnumReservedRangeOrBuilder getReservedRangeOrBuilder(final int index) {
                if (this.reservedRangeBuilder_ == null) {
                    return this.reservedRange_.get(index);
                }
                return this.reservedRangeBuilder_.getMessageOrBuilder(index);
            }
            
            @Override
            public List<? extends EnumReservedRangeOrBuilder> getReservedRangeOrBuilderList() {
                if (this.reservedRangeBuilder_ != null) {
                    return this.reservedRangeBuilder_.getMessageOrBuilderList();
                }
                return Collections.unmodifiableList((List<? extends EnumReservedRangeOrBuilder>)this.reservedRange_);
            }
            
            public EnumReservedRange.Builder addReservedRangeBuilder() {
                return this.internalGetReservedRangeFieldBuilder().addBuilder(EnumReservedRange.getDefaultInstance());
            }
            
            public EnumReservedRange.Builder addReservedRangeBuilder(final int index) {
                return this.internalGetReservedRangeFieldBuilder().addBuilder(index, EnumReservedRange.getDefaultInstance());
            }
            
            public List<EnumReservedRange.Builder> getReservedRangeBuilderList() {
                return this.internalGetReservedRangeFieldBuilder().getBuilderList();
            }
            
            private RepeatedFieldBuilder<EnumReservedRange, EnumReservedRange.Builder, EnumReservedRangeOrBuilder> internalGetReservedRangeFieldBuilder() {
                if (this.reservedRangeBuilder_ == null) {
                    this.reservedRangeBuilder_ = new RepeatedFieldBuilder<EnumReservedRange, EnumReservedRange.Builder, EnumReservedRangeOrBuilder>(this.reservedRange_, (this.bitField0_ & 0x8) != 0x0, this.getParentForChildren(), this.isClean());
                    this.reservedRange_ = null;
                }
                return this.reservedRangeBuilder_;
            }
            
            private void ensureReservedNameIsMutable() {
                if (!this.reservedName_.isModifiable()) {
                    this.reservedName_ = new LazyStringArrayList(this.reservedName_);
                }
                this.bitField0_ |= 0x10;
            }
            
            @Override
            public ProtocolStringList getReservedNameList() {
                this.reservedName_.makeImmutable();
                return this.reservedName_;
            }
            
            @Override
            public int getReservedNameCount() {
                return this.reservedName_.size();
            }
            
            @Override
            public String getReservedName(final int index) {
                return this.reservedName_.get(index);
            }
            
            @Override
            public ByteString getReservedNameBytes(final int index) {
                return this.reservedName_.getByteString(index);
            }
            
            public Builder setReservedName(final int index, final String value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                this.ensureReservedNameIsMutable();
                this.reservedName_.set(index, value);
                this.bitField0_ |= 0x10;
                this.onChanged();
                return this;
            }
            
            public Builder addReservedName(final String value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                this.ensureReservedNameIsMutable();
                this.reservedName_.add(value);
                this.bitField0_ |= 0x10;
                this.onChanged();
                return this;
            }
            
            public Builder addAllReservedName(final Iterable<String> values) {
                this.ensureReservedNameIsMutable();
                AbstractMessageLite.Builder.addAll(values, this.reservedName_);
                this.bitField0_ |= 0x10;
                this.onChanged();
                return this;
            }
            
            public Builder clearReservedName() {
                this.reservedName_ = LazyStringArrayList.emptyList();
                this.bitField0_ &= 0xFFFFFFEF;
                this.onChanged();
                return this;
            }
            
            public Builder addReservedNameBytes(final ByteString value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                this.ensureReservedNameIsMutable();
                this.reservedName_.add(value);
                this.bitField0_ |= 0x10;
                this.onChanged();
                return this;
            }
            
            @Override
            public boolean hasVisibility() {
                return (this.bitField0_ & 0x20) != 0x0;
            }
            
            @Override
            public SymbolVisibility getVisibility() {
                final SymbolVisibility result = SymbolVisibility.forNumber(this.visibility_);
                return (result == null) ? SymbolVisibility.VISIBILITY_UNSET : result;
            }
            
            public Builder setVisibility(final SymbolVisibility value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                this.bitField0_ |= 0x20;
                this.visibility_ = value.getNumber();
                this.onChanged();
                return this;
            }
            
            public Builder clearVisibility() {
                this.bitField0_ &= 0xFFFFFFDF;
                this.visibility_ = 0;
                this.onChanged();
                return this;
            }
        }
        
        public interface EnumReservedRangeOrBuilder extends MessageOrBuilder
        {
            boolean hasStart();
            
            int getStart();
            
            boolean hasEnd();
            
            int getEnd();
        }
    }
    
    public static final class EnumValueDescriptorProto extends GeneratedMessage implements EnumValueDescriptorProtoOrBuilder
    {
        private static final long serialVersionUID = 0L;
        private int bitField0_;
        public static final int NAME_FIELD_NUMBER = 1;
        private volatile Object name_;
        public static final int NUMBER_FIELD_NUMBER = 2;
        private int number_;
        public static final int OPTIONS_FIELD_NUMBER = 3;
        private EnumValueOptions options_;
        private byte memoizedIsInitialized;
        private static final EnumValueDescriptorProto DEFAULT_INSTANCE;
        private static final Parser<EnumValueDescriptorProto> PARSER;
        
        private EnumValueDescriptorProto(final GeneratedMessage.Builder<?> builder) {
            super(builder);
            this.name_ = "";
            this.number_ = 0;
            this.memoizedIsInitialized = -1;
        }
        
        private EnumValueDescriptorProto() {
            this.name_ = "";
            this.number_ = 0;
            this.memoizedIsInitialized = -1;
            this.name_ = "";
        }
        
        public static final Descriptors.Descriptor getDescriptor() {
            return DescriptorProtos.internal_static_google_protobuf_EnumValueDescriptorProto_descriptor;
        }
        
        @Override
        protected FieldAccessorTable internalGetFieldAccessorTable() {
            return DescriptorProtos.internal_static_google_protobuf_EnumValueDescriptorProto_fieldAccessorTable.ensureFieldAccessorsInitialized(EnumValueDescriptorProto.class, Builder.class);
        }
        
        @Override
        public boolean hasName() {
            return (this.bitField0_ & 0x1) != 0x0;
        }
        
        @Override
        public String getName() {
            final Object ref = this.name_;
            if (ref instanceof String) {
                return (String)ref;
            }
            final ByteString bs = (ByteString)ref;
            final String s = bs.toStringUtf8();
            if (bs.isValidUtf8()) {
                this.name_ = s;
            }
            return s;
        }
        
        @Override
        public ByteString getNameBytes() {
            final Object ref = this.name_;
            if (ref instanceof String) {
                final ByteString b = ByteString.copyFromUtf8((String)ref);
                return (ByteString)(this.name_ = b);
            }
            return (ByteString)ref;
        }
        
        @Override
        public boolean hasNumber() {
            return (this.bitField0_ & 0x2) != 0x0;
        }
        
        @Override
        public int getNumber() {
            return this.number_;
        }
        
        @Override
        public boolean hasOptions() {
            return (this.bitField0_ & 0x4) != 0x0;
        }
        
        @Override
        public EnumValueOptions getOptions() {
            return (this.options_ == null) ? EnumValueOptions.getDefaultInstance() : this.options_;
        }
        
        @Override
        public EnumValueOptionsOrBuilder getOptionsOrBuilder() {
            return (this.options_ == null) ? EnumValueOptions.getDefaultInstance() : this.options_;
        }
        
        @Override
        public final boolean isInitialized() {
            final byte isInitialized = this.memoizedIsInitialized;
            if (isInitialized == 1) {
                return true;
            }
            if (isInitialized == 0) {
                return false;
            }
            if (this.hasOptions() && !this.getOptions().isInitialized()) {
                this.memoizedIsInitialized = 0;
                return false;
            }
            this.memoizedIsInitialized = 1;
            return true;
        }
        
        @Override
        public void writeTo(final CodedOutputStream output) throws IOException {
            if ((this.bitField0_ & 0x1) != 0x0) {
                GeneratedMessage.writeString(output, 1, this.name_);
            }
            if ((this.bitField0_ & 0x2) != 0x0) {
                output.writeInt32(2, this.number_);
            }
            if ((this.bitField0_ & 0x4) != 0x0) {
                output.writeMessage(3, this.getOptions());
            }
            this.getUnknownFields().writeTo(output);
        }
        
        @Override
        public int getSerializedSize() {
            int size = this.memoizedSize;
            if (size != -1) {
                return size;
            }
            size = 0;
            if ((this.bitField0_ & 0x1) != 0x0) {
                size += GeneratedMessage.computeStringSize(1, this.name_);
            }
            if ((this.bitField0_ & 0x2) != 0x0) {
                size += CodedOutputStream.computeInt32Size(2, this.number_);
            }
            if ((this.bitField0_ & 0x4) != 0x0) {
                size += CodedOutputStream.computeMessageSize(3, this.getOptions());
            }
            size += this.getUnknownFields().getSerializedSize();
            return this.memoizedSize = size;
        }
        
        @Override
        public boolean equals(final Object obj) {
            if (obj == this) {
                return true;
            }
            if (!(obj instanceof EnumValueDescriptorProto)) {
                return super.equals(obj);
            }
            final EnumValueDescriptorProto other = (EnumValueDescriptorProto)obj;
            return this.hasName() == other.hasName() && (!this.hasName() || this.getName().equals(other.getName())) && this.hasNumber() == other.hasNumber() && (!this.hasNumber() || this.getNumber() == other.getNumber()) && this.hasOptions() == other.hasOptions() && (!this.hasOptions() || this.getOptions().equals(other.getOptions())) && this.getUnknownFields().equals(other.getUnknownFields());
        }
        
        @Override
        public int hashCode() {
            if (this.memoizedHashCode != 0) {
                return this.memoizedHashCode;
            }
            int hash = 41;
            hash = 19 * hash + getDescriptor().hashCode();
            if (this.hasName()) {
                hash = 37 * hash + 1;
                hash = 53 * hash + this.getName().hashCode();
            }
            if (this.hasNumber()) {
                hash = 37 * hash + 2;
                hash = 53 * hash + this.getNumber();
            }
            if (this.hasOptions()) {
                hash = 37 * hash + 3;
                hash = 53 * hash + this.getOptions().hashCode();
            }
            hash = 29 * hash + this.getUnknownFields().hashCode();
            return this.memoizedHashCode = hash;
        }
        
        public static EnumValueDescriptorProto parseFrom(final ByteBuffer data) throws InvalidProtocolBufferException {
            return EnumValueDescriptorProto.PARSER.parseFrom(data);
        }
        
        public static EnumValueDescriptorProto parseFrom(final ByteBuffer data, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
            return EnumValueDescriptorProto.PARSER.parseFrom(data, extensionRegistry);
        }
        
        public static EnumValueDescriptorProto parseFrom(final ByteString data) throws InvalidProtocolBufferException {
            return EnumValueDescriptorProto.PARSER.parseFrom(data);
        }
        
        public static EnumValueDescriptorProto parseFrom(final ByteString data, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
            return EnumValueDescriptorProto.PARSER.parseFrom(data, extensionRegistry);
        }
        
        public static EnumValueDescriptorProto parseFrom(final byte[] data) throws InvalidProtocolBufferException {
            return EnumValueDescriptorProto.PARSER.parseFrom(data);
        }
        
        public static EnumValueDescriptorProto parseFrom(final byte[] data, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
            return EnumValueDescriptorProto.PARSER.parseFrom(data, extensionRegistry);
        }
        
        public static EnumValueDescriptorProto parseFrom(final InputStream input) throws IOException {
            return GeneratedMessage.parseWithIOException(EnumValueDescriptorProto.PARSER, input);
        }
        
        public static EnumValueDescriptorProto parseFrom(final InputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
            return GeneratedMessage.parseWithIOException(EnumValueDescriptorProto.PARSER, input, extensionRegistry);
        }
        
        public static EnumValueDescriptorProto parseDelimitedFrom(final InputStream input) throws IOException {
            return GeneratedMessage.parseDelimitedWithIOException(EnumValueDescriptorProto.PARSER, input);
        }
        
        public static EnumValueDescriptorProto parseDelimitedFrom(final InputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
            return GeneratedMessage.parseDelimitedWithIOException(EnumValueDescriptorProto.PARSER, input, extensionRegistry);
        }
        
        public static EnumValueDescriptorProto parseFrom(final CodedInputStream input) throws IOException {
            return GeneratedMessage.parseWithIOException(EnumValueDescriptorProto.PARSER, input);
        }
        
        public static EnumValueDescriptorProto parseFrom(final CodedInputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
            return GeneratedMessage.parseWithIOException(EnumValueDescriptorProto.PARSER, input, extensionRegistry);
        }
        
        @Override
        public Builder newBuilderForType() {
            return newBuilder();
        }
        
        public static Builder newBuilder() {
            return EnumValueDescriptorProto.DEFAULT_INSTANCE.toBuilder();
        }
        
        public static Builder newBuilder(final EnumValueDescriptorProto prototype) {
            return EnumValueDescriptorProto.DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
        }
        
        @Override
        public Builder toBuilder() {
            return (this == EnumValueDescriptorProto.DEFAULT_INSTANCE) ? new Builder() : new Builder().mergeFrom(this);
        }
        
        @Override
        protected Builder newBuilderForType(final BuilderParent parent) {
            final Builder builder = new Builder(parent);
            return builder;
        }
        
        public static EnumValueDescriptorProto getDefaultInstance() {
            return EnumValueDescriptorProto.DEFAULT_INSTANCE;
        }
        
        public static Parser<EnumValueDescriptorProto> parser() {
            return EnumValueDescriptorProto.PARSER;
        }
        
        @Override
        public Parser<EnumValueDescriptorProto> getParserForType() {
            return EnumValueDescriptorProto.PARSER;
        }
        
        @Override
        public EnumValueDescriptorProto getDefaultInstanceForType() {
            return EnumValueDescriptorProto.DEFAULT_INSTANCE;
        }
        
        static {
            RuntimeVersion.validateProtobufGencodeVersion(RuntimeVersion.RuntimeDomain.PUBLIC, 4, 33, 0, "", "EnumValueDescriptorProto");
            DEFAULT_INSTANCE = new EnumValueDescriptorProto();
            PARSER = new AbstractParser<EnumValueDescriptorProto>() {
                @Override
                public EnumValueDescriptorProto parsePartialFrom(final CodedInputStream input, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
                    final Builder builder = EnumValueDescriptorProto.newBuilder();
                    try {
                        builder.mergeFrom(input, extensionRegistry);
                    }
                    catch (final InvalidProtocolBufferException e) {
                        throw e.setUnfinishedMessage(builder.buildPartial());
                    }
                    catch (final UninitializedMessageException e2) {
                        throw e2.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
                    }
                    catch (final IOException e3) {
                        throw new InvalidProtocolBufferException(e3).setUnfinishedMessage(builder.buildPartial());
                    }
                    return builder.buildPartial();
                }
            };
        }
        
        public static final class Builder extends GeneratedMessage.Builder<Builder> implements EnumValueDescriptorProtoOrBuilder
        {
            private int bitField0_;
            private Object name_;
            private int number_;
            private EnumValueOptions options_;
            private SingleFieldBuilder<EnumValueOptions, EnumValueOptions.Builder, EnumValueOptionsOrBuilder> optionsBuilder_;
            
            public static final Descriptors.Descriptor getDescriptor() {
                return DescriptorProtos.internal_static_google_protobuf_EnumValueDescriptorProto_descriptor;
            }
            
            @Override
            protected FieldAccessorTable internalGetFieldAccessorTable() {
                return DescriptorProtos.internal_static_google_protobuf_EnumValueDescriptorProto_fieldAccessorTable.ensureFieldAccessorsInitialized(EnumValueDescriptorProto.class, Builder.class);
            }
            
            private Builder() {
                this.name_ = "";
                this.maybeForceBuilderInitialization();
            }
            
            private Builder(final BuilderParent parent) {
                super(parent);
                this.name_ = "";
                this.maybeForceBuilderInitialization();
            }
            
            private void maybeForceBuilderInitialization() {
                if (GeneratedMessage.alwaysUseFieldBuilders) {
                    this.internalGetOptionsFieldBuilder();
                }
            }
            
            @Override
            public Builder clear() {
                super.clear();
                this.bitField0_ = 0;
                this.name_ = "";
                this.number_ = 0;
                this.options_ = null;
                if (this.optionsBuilder_ != null) {
                    this.optionsBuilder_.dispose();
                    this.optionsBuilder_ = null;
                }
                return this;
            }
            
            @Override
            public Descriptors.Descriptor getDescriptorForType() {
                return DescriptorProtos.internal_static_google_protobuf_EnumValueDescriptorProto_descriptor;
            }
            
            @Override
            public EnumValueDescriptorProto getDefaultInstanceForType() {
                return EnumValueDescriptorProto.getDefaultInstance();
            }
            
            @Override
            public EnumValueDescriptorProto build() {
                final EnumValueDescriptorProto result = this.buildPartial();
                if (!result.isInitialized()) {
                    throw AbstractMessage.Builder.newUninitializedMessageException(result);
                }
                return result;
            }
            
            @Override
            public EnumValueDescriptorProto buildPartial() {
                final EnumValueDescriptorProto result = new EnumValueDescriptorProto((GeneratedMessage.Builder)this);
                if (this.bitField0_ != 0) {
                    this.buildPartial0(result);
                }
                this.onBuilt();
                return result;
            }
            
            private void buildPartial0(final EnumValueDescriptorProto result) {
                final int from_bitField0_ = this.bitField0_;
                int to_bitField0_ = 0;
                if ((from_bitField0_ & 0x1) != 0x0) {
                    result.name_ = this.name_;
                    to_bitField0_ |= 0x1;
                }
                if ((from_bitField0_ & 0x2) != 0x0) {
                    result.number_ = this.number_;
                    to_bitField0_ |= 0x2;
                }
                if ((from_bitField0_ & 0x4) != 0x0) {
                    result.options_ = ((this.optionsBuilder_ == null) ? this.options_ : this.optionsBuilder_.build());
                    to_bitField0_ |= 0x4;
                }
                result.bitField0_ |= to_bitField0_;
            }
            
            @Override
            public Builder mergeFrom(final Message other) {
                if (other instanceof EnumValueDescriptorProto) {
                    return this.mergeFrom((EnumValueDescriptorProto)other);
                }
                super.mergeFrom(other);
                return this;
            }
            
            public Builder mergeFrom(final EnumValueDescriptorProto other) {
                if (other == EnumValueDescriptorProto.getDefaultInstance()) {
                    return this;
                }
                if (other.hasName()) {
                    this.name_ = other.name_;
                    this.bitField0_ |= 0x1;
                    this.onChanged();
                }
                if (other.hasNumber()) {
                    this.setNumber(other.getNumber());
                }
                if (other.hasOptions()) {
                    this.mergeOptions(other.getOptions());
                }
                this.mergeUnknownFields(other.getUnknownFields());
                this.onChanged();
                return this;
            }
            
            @Override
            public final boolean isInitialized() {
                return !this.hasOptions() || this.getOptions().isInitialized();
            }
            
            @Override
            public Builder mergeFrom(final CodedInputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
                if (extensionRegistry == null) {
                    throw new NullPointerException();
                }
                try {
                    boolean done = false;
                    while (!done) {
                        final int tag = input.readTag();
                        switch (tag) {
                            case 0: {
                                done = true;
                                continue;
                            }
                            case 10: {
                                this.name_ = input.readBytes();
                                this.bitField0_ |= 0x1;
                                continue;
                            }
                            case 16: {
                                this.number_ = input.readInt32();
                                this.bitField0_ |= 0x2;
                                continue;
                            }
                            case 26: {
                                input.readMessage(this.internalGetOptionsFieldBuilder().getBuilder(), extensionRegistry);
                                this.bitField0_ |= 0x4;
                                continue;
                            }
                            default: {
                                if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                                    done = true;
                                    continue;
                                }
                                continue;
                            }
                        }
                    }
                }
                catch (final InvalidProtocolBufferException e) {
                    throw e.unwrapIOException();
                }
                finally {
                    this.onChanged();
                }
                return this;
            }
            
            @Override
            public boolean hasName() {
                return (this.bitField0_ & 0x1) != 0x0;
            }
            
            @Override
            public String getName() {
                final Object ref = this.name_;
                if (!(ref instanceof String)) {
                    final ByteString bs = (ByteString)ref;
                    final String s = bs.toStringUtf8();
                    if (bs.isValidUtf8()) {
                        this.name_ = s;
                    }
                    return s;
                }
                return (String)ref;
            }
            
            @Override
            public ByteString getNameBytes() {
                final Object ref = this.name_;
                if (ref instanceof String) {
                    final ByteString b = ByteString.copyFromUtf8((String)ref);
                    return (ByteString)(this.name_ = b);
                }
                return (ByteString)ref;
            }
            
            public Builder setName(final String value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                this.name_ = value;
                this.bitField0_ |= 0x1;
                this.onChanged();
                return this;
            }
            
            public Builder clearName() {
                this.name_ = EnumValueDescriptorProto.getDefaultInstance().getName();
                this.bitField0_ &= 0xFFFFFFFE;
                this.onChanged();
                return this;
            }
            
            public Builder setNameBytes(final ByteString value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                this.name_ = value;
                this.bitField0_ |= 0x1;
                this.onChanged();
                return this;
            }
            
            @Override
            public boolean hasNumber() {
                return (this.bitField0_ & 0x2) != 0x0;
            }
            
            @Override
            public int getNumber() {
                return this.number_;
            }
            
            public Builder setNumber(final int value) {
                this.number_ = value;
                this.bitField0_ |= 0x2;
                this.onChanged();
                return this;
            }
            
            public Builder clearNumber() {
                this.bitField0_ &= 0xFFFFFFFD;
                this.number_ = 0;
                this.onChanged();
                return this;
            }
            
            @Override
            public boolean hasOptions() {
                return (this.bitField0_ & 0x4) != 0x0;
            }
            
            @Override
            public EnumValueOptions getOptions() {
                if (this.optionsBuilder_ == null) {
                    return (this.options_ == null) ? EnumValueOptions.getDefaultInstance() : this.options_;
                }
                return this.optionsBuilder_.getMessage();
            }
            
            public Builder setOptions(final EnumValueOptions value) {
                if (this.optionsBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.options_ = value;
                }
                else {
                    this.optionsBuilder_.setMessage(value);
                }
                this.bitField0_ |= 0x4;
                this.onChanged();
                return this;
            }
            
            public Builder setOptions(final EnumValueOptions.Builder builderForValue) {
                if (this.optionsBuilder_ == null) {
                    this.options_ = builderForValue.build();
                }
                else {
                    this.optionsBuilder_.setMessage(builderForValue.build());
                }
                this.bitField0_ |= 0x4;
                this.onChanged();
                return this;
            }
            
            public Builder mergeOptions(final EnumValueOptions value) {
                if (this.optionsBuilder_ == null) {
                    if ((this.bitField0_ & 0x4) != 0x0 && this.options_ != null && this.options_ != EnumValueOptions.getDefaultInstance()) {
                        this.getOptionsBuilder().mergeFrom(value);
                    }
                    else {
                        this.options_ = value;
                    }
                }
                else {
                    this.optionsBuilder_.mergeFrom(value);
                }
                if (this.options_ != null) {
                    this.bitField0_ |= 0x4;
                    this.onChanged();
                }
                return this;
            }
            
            public Builder clearOptions() {
                this.bitField0_ &= 0xFFFFFFFB;
                this.options_ = null;
                if (this.optionsBuilder_ != null) {
                    this.optionsBuilder_.dispose();
                    this.optionsBuilder_ = null;
                }
                this.onChanged();
                return this;
            }
            
            public EnumValueOptions.Builder getOptionsBuilder() {
                this.bitField0_ |= 0x4;
                this.onChanged();
                return this.internalGetOptionsFieldBuilder().getBuilder();
            }
            
            @Override
            public EnumValueOptionsOrBuilder getOptionsOrBuilder() {
                if (this.optionsBuilder_ != null) {
                    return this.optionsBuilder_.getMessageOrBuilder();
                }
                return (this.options_ == null) ? EnumValueOptions.getDefaultInstance() : this.options_;
            }
            
            private SingleFieldBuilder<EnumValueOptions, EnumValueOptions.Builder, EnumValueOptionsOrBuilder> internalGetOptionsFieldBuilder() {
                if (this.optionsBuilder_ == null) {
                    this.optionsBuilder_ = new SingleFieldBuilder<EnumValueOptions, EnumValueOptions.Builder, EnumValueOptionsOrBuilder>(this.getOptions(), this.getParentForChildren(), this.isClean());
                    this.options_ = null;
                }
                return this.optionsBuilder_;
            }
        }
    }
    
    public static final class ServiceDescriptorProto extends GeneratedMessage implements ServiceDescriptorProtoOrBuilder
    {
        private static final long serialVersionUID = 0L;
        private int bitField0_;
        public static final int NAME_FIELD_NUMBER = 1;
        private volatile Object name_;
        public static final int METHOD_FIELD_NUMBER = 2;
        private List<MethodDescriptorProto> method_;
        public static final int OPTIONS_FIELD_NUMBER = 3;
        private ServiceOptions options_;
        private byte memoizedIsInitialized;
        private static final ServiceDescriptorProto DEFAULT_INSTANCE;
        private static final Parser<ServiceDescriptorProto> PARSER;
        
        private ServiceDescriptorProto(final GeneratedMessage.Builder<?> builder) {
            super(builder);
            this.name_ = "";
            this.memoizedIsInitialized = -1;
        }
        
        private ServiceDescriptorProto() {
            this.name_ = "";
            this.memoizedIsInitialized = -1;
            this.name_ = "";
            this.method_ = Collections.emptyList();
        }
        
        public static final Descriptors.Descriptor getDescriptor() {
            return DescriptorProtos.internal_static_google_protobuf_ServiceDescriptorProto_descriptor;
        }
        
        @Override
        protected FieldAccessorTable internalGetFieldAccessorTable() {
            return DescriptorProtos.internal_static_google_protobuf_ServiceDescriptorProto_fieldAccessorTable.ensureFieldAccessorsInitialized(ServiceDescriptorProto.class, Builder.class);
        }
        
        @Override
        public boolean hasName() {
            return (this.bitField0_ & 0x1) != 0x0;
        }
        
        @Override
        public String getName() {
            final Object ref = this.name_;
            if (ref instanceof String) {
                return (String)ref;
            }
            final ByteString bs = (ByteString)ref;
            final String s = bs.toStringUtf8();
            if (bs.isValidUtf8()) {
                this.name_ = s;
            }
            return s;
        }
        
        @Override
        public ByteString getNameBytes() {
            final Object ref = this.name_;
            if (ref instanceof String) {
                final ByteString b = ByteString.copyFromUtf8((String)ref);
                return (ByteString)(this.name_ = b);
            }
            return (ByteString)ref;
        }
        
        @Override
        public List<MethodDescriptorProto> getMethodList() {
            return this.method_;
        }
        
        @Override
        public List<? extends MethodDescriptorProtoOrBuilder> getMethodOrBuilderList() {
            return this.method_;
        }
        
        @Override
        public int getMethodCount() {
            return this.method_.size();
        }
        
        @Override
        public MethodDescriptorProto getMethod(final int index) {
            return this.method_.get(index);
        }
        
        @Override
        public MethodDescriptorProtoOrBuilder getMethodOrBuilder(final int index) {
            return this.method_.get(index);
        }
        
        @Override
        public boolean hasOptions() {
            return (this.bitField0_ & 0x2) != 0x0;
        }
        
        @Override
        public ServiceOptions getOptions() {
            return (this.options_ == null) ? ServiceOptions.getDefaultInstance() : this.options_;
        }
        
        @Override
        public ServiceOptionsOrBuilder getOptionsOrBuilder() {
            return (this.options_ == null) ? ServiceOptions.getDefaultInstance() : this.options_;
        }
        
        @Override
        public final boolean isInitialized() {
            final byte isInitialized = this.memoizedIsInitialized;
            if (isInitialized == 1) {
                return true;
            }
            if (isInitialized == 0) {
                return false;
            }
            for (int i = 0; i < this.getMethodCount(); ++i) {
                if (!this.getMethod(i).isInitialized()) {
                    this.memoizedIsInitialized = 0;
                    return false;
                }
            }
            if (this.hasOptions() && !this.getOptions().isInitialized()) {
                this.memoizedIsInitialized = 0;
                return false;
            }
            this.memoizedIsInitialized = 1;
            return true;
        }
        
        @Override
        public void writeTo(final CodedOutputStream output) throws IOException {
            if ((this.bitField0_ & 0x1) != 0x0) {
                GeneratedMessage.writeString(output, 1, this.name_);
            }
            for (int i = 0; i < this.method_.size(); ++i) {
                output.writeMessage(2, this.method_.get(i));
            }
            if ((this.bitField0_ & 0x2) != 0x0) {
                output.writeMessage(3, this.getOptions());
            }
            this.getUnknownFields().writeTo(output);
        }
        
        @Override
        public int getSerializedSize() {
            int size = this.memoizedSize;
            if (size != -1) {
                return size;
            }
            size = 0;
            if ((this.bitField0_ & 0x1) != 0x0) {
                size += GeneratedMessage.computeStringSize(1, this.name_);
            }
            for (int i = 0; i < this.method_.size(); ++i) {
                size += CodedOutputStream.computeMessageSize(2, this.method_.get(i));
            }
            if ((this.bitField0_ & 0x2) != 0x0) {
                size += CodedOutputStream.computeMessageSize(3, this.getOptions());
            }
            size += this.getUnknownFields().getSerializedSize();
            return this.memoizedSize = size;
        }
        
        @Override
        public boolean equals(final Object obj) {
            if (obj == this) {
                return true;
            }
            if (!(obj instanceof ServiceDescriptorProto)) {
                return super.equals(obj);
            }
            final ServiceDescriptorProto other = (ServiceDescriptorProto)obj;
            return this.hasName() == other.hasName() && (!this.hasName() || this.getName().equals(other.getName())) && this.getMethodList().equals(other.getMethodList()) && this.hasOptions() == other.hasOptions() && (!this.hasOptions() || this.getOptions().equals(other.getOptions())) && this.getUnknownFields().equals(other.getUnknownFields());
        }
        
        @Override
        public int hashCode() {
            if (this.memoizedHashCode != 0) {
                return this.memoizedHashCode;
            }
            int hash = 41;
            hash = 19 * hash + getDescriptor().hashCode();
            if (this.hasName()) {
                hash = 37 * hash + 1;
                hash = 53 * hash + this.getName().hashCode();
            }
            if (this.getMethodCount() > 0) {
                hash = 37 * hash + 2;
                hash = 53 * hash + this.getMethodList().hashCode();
            }
            if (this.hasOptions()) {
                hash = 37 * hash + 3;
                hash = 53 * hash + this.getOptions().hashCode();
            }
            hash = 29 * hash + this.getUnknownFields().hashCode();
            return this.memoizedHashCode = hash;
        }
        
        public static ServiceDescriptorProto parseFrom(final ByteBuffer data) throws InvalidProtocolBufferException {
            return ServiceDescriptorProto.PARSER.parseFrom(data);
        }
        
        public static ServiceDescriptorProto parseFrom(final ByteBuffer data, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
            return ServiceDescriptorProto.PARSER.parseFrom(data, extensionRegistry);
        }
        
        public static ServiceDescriptorProto parseFrom(final ByteString data) throws InvalidProtocolBufferException {
            return ServiceDescriptorProto.PARSER.parseFrom(data);
        }
        
        public static ServiceDescriptorProto parseFrom(final ByteString data, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
            return ServiceDescriptorProto.PARSER.parseFrom(data, extensionRegistry);
        }
        
        public static ServiceDescriptorProto parseFrom(final byte[] data) throws InvalidProtocolBufferException {
            return ServiceDescriptorProto.PARSER.parseFrom(data);
        }
        
        public static ServiceDescriptorProto parseFrom(final byte[] data, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
            return ServiceDescriptorProto.PARSER.parseFrom(data, extensionRegistry);
        }
        
        public static ServiceDescriptorProto parseFrom(final InputStream input) throws IOException {
            return GeneratedMessage.parseWithIOException(ServiceDescriptorProto.PARSER, input);
        }
        
        public static ServiceDescriptorProto parseFrom(final InputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
            return GeneratedMessage.parseWithIOException(ServiceDescriptorProto.PARSER, input, extensionRegistry);
        }
        
        public static ServiceDescriptorProto parseDelimitedFrom(final InputStream input) throws IOException {
            return GeneratedMessage.parseDelimitedWithIOException(ServiceDescriptorProto.PARSER, input);
        }
        
        public static ServiceDescriptorProto parseDelimitedFrom(final InputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
            return GeneratedMessage.parseDelimitedWithIOException(ServiceDescriptorProto.PARSER, input, extensionRegistry);
        }
        
        public static ServiceDescriptorProto parseFrom(final CodedInputStream input) throws IOException {
            return GeneratedMessage.parseWithIOException(ServiceDescriptorProto.PARSER, input);
        }
        
        public static ServiceDescriptorProto parseFrom(final CodedInputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
            return GeneratedMessage.parseWithIOException(ServiceDescriptorProto.PARSER, input, extensionRegistry);
        }
        
        @Override
        public Builder newBuilderForType() {
            return newBuilder();
        }
        
        public static Builder newBuilder() {
            return ServiceDescriptorProto.DEFAULT_INSTANCE.toBuilder();
        }
        
        public static Builder newBuilder(final ServiceDescriptorProto prototype) {
            return ServiceDescriptorProto.DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
        }
        
        @Override
        public Builder toBuilder() {
            return (this == ServiceDescriptorProto.DEFAULT_INSTANCE) ? new Builder() : new Builder().mergeFrom(this);
        }
        
        @Override
        protected Builder newBuilderForType(final BuilderParent parent) {
            final Builder builder = new Builder(parent);
            return builder;
        }
        
        public static ServiceDescriptorProto getDefaultInstance() {
            return ServiceDescriptorProto.DEFAULT_INSTANCE;
        }
        
        public static Parser<ServiceDescriptorProto> parser() {
            return ServiceDescriptorProto.PARSER;
        }
        
        @Override
        public Parser<ServiceDescriptorProto> getParserForType() {
            return ServiceDescriptorProto.PARSER;
        }
        
        @Override
        public ServiceDescriptorProto getDefaultInstanceForType() {
            return ServiceDescriptorProto.DEFAULT_INSTANCE;
        }
        
        static {
            RuntimeVersion.validateProtobufGencodeVersion(RuntimeVersion.RuntimeDomain.PUBLIC, 4, 33, 0, "", "ServiceDescriptorProto");
            DEFAULT_INSTANCE = new ServiceDescriptorProto();
            PARSER = new AbstractParser<ServiceDescriptorProto>() {
                @Override
                public ServiceDescriptorProto parsePartialFrom(final CodedInputStream input, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
                    final Builder builder = ServiceDescriptorProto.newBuilder();
                    try {
                        builder.mergeFrom(input, extensionRegistry);
                    }
                    catch (final InvalidProtocolBufferException e) {
                        throw e.setUnfinishedMessage(builder.buildPartial());
                    }
                    catch (final UninitializedMessageException e2) {
                        throw e2.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
                    }
                    catch (final IOException e3) {
                        throw new InvalidProtocolBufferException(e3).setUnfinishedMessage(builder.buildPartial());
                    }
                    return builder.buildPartial();
                }
            };
        }
        
        public static final class Builder extends GeneratedMessage.Builder<Builder> implements ServiceDescriptorProtoOrBuilder
        {
            private int bitField0_;
            private Object name_;
            private List<MethodDescriptorProto> method_;
            private RepeatedFieldBuilder<MethodDescriptorProto, MethodDescriptorProto.Builder, MethodDescriptorProtoOrBuilder> methodBuilder_;
            private ServiceOptions options_;
            private SingleFieldBuilder<ServiceOptions, ServiceOptions.Builder, ServiceOptionsOrBuilder> optionsBuilder_;
            
            public static final Descriptors.Descriptor getDescriptor() {
                return DescriptorProtos.internal_static_google_protobuf_ServiceDescriptorProto_descriptor;
            }
            
            @Override
            protected FieldAccessorTable internalGetFieldAccessorTable() {
                return DescriptorProtos.internal_static_google_protobuf_ServiceDescriptorProto_fieldAccessorTable.ensureFieldAccessorsInitialized(ServiceDescriptorProto.class, Builder.class);
            }
            
            private Builder() {
                this.name_ = "";
                this.method_ = Collections.emptyList();
                this.maybeForceBuilderInitialization();
            }
            
            private Builder(final BuilderParent parent) {
                super(parent);
                this.name_ = "";
                this.method_ = Collections.emptyList();
                this.maybeForceBuilderInitialization();
            }
            
            private void maybeForceBuilderInitialization() {
                if (GeneratedMessage.alwaysUseFieldBuilders) {
                    this.internalGetMethodFieldBuilder();
                    this.internalGetOptionsFieldBuilder();
                }
            }
            
            @Override
            public Builder clear() {
                super.clear();
                this.bitField0_ = 0;
                this.name_ = "";
                if (this.methodBuilder_ == null) {
                    this.method_ = Collections.emptyList();
                }
                else {
                    this.method_ = null;
                    this.methodBuilder_.clear();
                }
                this.bitField0_ &= 0xFFFFFFFD;
                this.options_ = null;
                if (this.optionsBuilder_ != null) {
                    this.optionsBuilder_.dispose();
                    this.optionsBuilder_ = null;
                }
                return this;
            }
            
            @Override
            public Descriptors.Descriptor getDescriptorForType() {
                return DescriptorProtos.internal_static_google_protobuf_ServiceDescriptorProto_descriptor;
            }
            
            @Override
            public ServiceDescriptorProto getDefaultInstanceForType() {
                return ServiceDescriptorProto.getDefaultInstance();
            }
            
            @Override
            public ServiceDescriptorProto build() {
                final ServiceDescriptorProto result = this.buildPartial();
                if (!result.isInitialized()) {
                    throw AbstractMessage.Builder.newUninitializedMessageException(result);
                }
                return result;
            }
            
            @Override
            public ServiceDescriptorProto buildPartial() {
                final ServiceDescriptorProto result = new ServiceDescriptorProto((GeneratedMessage.Builder)this);
                this.buildPartialRepeatedFields(result);
                if (this.bitField0_ != 0) {
                    this.buildPartial0(result);
                }
                this.onBuilt();
                return result;
            }
            
            private void buildPartialRepeatedFields(final ServiceDescriptorProto result) {
                if (this.methodBuilder_ == null) {
                    if ((this.bitField0_ & 0x2) != 0x0) {
                        this.method_ = Collections.unmodifiableList((List<? extends MethodDescriptorProto>)this.method_);
                        this.bitField0_ &= 0xFFFFFFFD;
                    }
                    result.method_ = this.method_;
                }
                else {
                    result.method_ = this.methodBuilder_.build();
                }
            }
            
            private void buildPartial0(final ServiceDescriptorProto result) {
                final int from_bitField0_ = this.bitField0_;
                int to_bitField0_ = 0;
                if ((from_bitField0_ & 0x1) != 0x0) {
                    result.name_ = this.name_;
                    to_bitField0_ |= 0x1;
                }
                if ((from_bitField0_ & 0x4) != 0x0) {
                    result.options_ = ((this.optionsBuilder_ == null) ? this.options_ : this.optionsBuilder_.build());
                    to_bitField0_ |= 0x2;
                }
                result.bitField0_ |= to_bitField0_;
            }
            
            @Override
            public Builder mergeFrom(final Message other) {
                if (other instanceof ServiceDescriptorProto) {
                    return this.mergeFrom((ServiceDescriptorProto)other);
                }
                super.mergeFrom(other);
                return this;
            }
            
            public Builder mergeFrom(final ServiceDescriptorProto other) {
                if (other == ServiceDescriptorProto.getDefaultInstance()) {
                    return this;
                }
                if (other.hasName()) {
                    this.name_ = other.name_;
                    this.bitField0_ |= 0x1;
                    this.onChanged();
                }
                if (this.methodBuilder_ == null) {
                    if (!other.method_.isEmpty()) {
                        if (this.method_.isEmpty()) {
                            this.method_ = other.method_;
                            this.bitField0_ &= 0xFFFFFFFD;
                        }
                        else {
                            this.ensureMethodIsMutable();
                            this.method_.addAll(other.method_);
                        }
                        this.onChanged();
                    }
                }
                else if (!other.method_.isEmpty()) {
                    if (this.methodBuilder_.isEmpty()) {
                        this.methodBuilder_.dispose();
                        this.methodBuilder_ = null;
                        this.method_ = other.method_;
                        this.bitField0_ &= 0xFFFFFFFD;
                        this.methodBuilder_ = (GeneratedMessage.alwaysUseFieldBuilders ? this.internalGetMethodFieldBuilder() : null);
                    }
                    else {
                        this.methodBuilder_.addAllMessages(other.method_);
                    }
                }
                if (other.hasOptions()) {
                    this.mergeOptions(other.getOptions());
                }
                this.mergeUnknownFields(other.getUnknownFields());
                this.onChanged();
                return this;
            }
            
            @Override
            public final boolean isInitialized() {
                for (int i = 0; i < this.getMethodCount(); ++i) {
                    if (!this.getMethod(i).isInitialized()) {
                        return false;
                    }
                }
                return !this.hasOptions() || this.getOptions().isInitialized();
            }
            
            @Override
            public Builder mergeFrom(final CodedInputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
                if (extensionRegistry == null) {
                    throw new NullPointerException();
                }
                try {
                    boolean done = false;
                    while (!done) {
                        final int tag = input.readTag();
                        switch (tag) {
                            case 0: {
                                done = true;
                                continue;
                            }
                            case 10: {
                                this.name_ = input.readBytes();
                                this.bitField0_ |= 0x1;
                                continue;
                            }
                            case 18: {
                                final MethodDescriptorProto m = input.readMessage(MethodDescriptorProto.parser(), extensionRegistry);
                                if (this.methodBuilder_ == null) {
                                    this.ensureMethodIsMutable();
                                    this.method_.add(m);
                                    continue;
                                }
                                this.methodBuilder_.addMessage(m);
                                continue;
                            }
                            case 26: {
                                input.readMessage(this.internalGetOptionsFieldBuilder().getBuilder(), extensionRegistry);
                                this.bitField0_ |= 0x4;
                                continue;
                            }
                            default: {
                                if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                                    done = true;
                                    continue;
                                }
                                continue;
                            }
                        }
                    }
                }
                catch (final InvalidProtocolBufferException e) {
                    throw e.unwrapIOException();
                }
                finally {
                    this.onChanged();
                }
                return this;
            }
            
            @Override
            public boolean hasName() {
                return (this.bitField0_ & 0x1) != 0x0;
            }
            
            @Override
            public String getName() {
                final Object ref = this.name_;
                if (!(ref instanceof String)) {
                    final ByteString bs = (ByteString)ref;
                    final String s = bs.toStringUtf8();
                    if (bs.isValidUtf8()) {
                        this.name_ = s;
                    }
                    return s;
                }
                return (String)ref;
            }
            
            @Override
            public ByteString getNameBytes() {
                final Object ref = this.name_;
                if (ref instanceof String) {
                    final ByteString b = ByteString.copyFromUtf8((String)ref);
                    return (ByteString)(this.name_ = b);
                }
                return (ByteString)ref;
            }
            
            public Builder setName(final String value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                this.name_ = value;
                this.bitField0_ |= 0x1;
                this.onChanged();
                return this;
            }
            
            public Builder clearName() {
                this.name_ = ServiceDescriptorProto.getDefaultInstance().getName();
                this.bitField0_ &= 0xFFFFFFFE;
                this.onChanged();
                return this;
            }
            
            public Builder setNameBytes(final ByteString value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                this.name_ = value;
                this.bitField0_ |= 0x1;
                this.onChanged();
                return this;
            }
            
            private void ensureMethodIsMutable() {
                if ((this.bitField0_ & 0x2) == 0x0) {
                    this.method_ = new ArrayList<MethodDescriptorProto>(this.method_);
                    this.bitField0_ |= 0x2;
                }
            }
            
            @Override
            public List<MethodDescriptorProto> getMethodList() {
                if (this.methodBuilder_ == null) {
                    return Collections.unmodifiableList((List<? extends MethodDescriptorProto>)this.method_);
                }
                return this.methodBuilder_.getMessageList();
            }
            
            @Override
            public int getMethodCount() {
                if (this.methodBuilder_ == null) {
                    return this.method_.size();
                }
                return this.methodBuilder_.getCount();
            }
            
            @Override
            public MethodDescriptorProto getMethod(final int index) {
                if (this.methodBuilder_ == null) {
                    return this.method_.get(index);
                }
                return this.methodBuilder_.getMessage(index);
            }
            
            public Builder setMethod(final int index, final MethodDescriptorProto value) {
                if (this.methodBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.ensureMethodIsMutable();
                    this.method_.set(index, value);
                    this.onChanged();
                }
                else {
                    this.methodBuilder_.setMessage(index, value);
                }
                return this;
            }
            
            public Builder setMethod(final int index, final MethodDescriptorProto.Builder builderForValue) {
                if (this.methodBuilder_ == null) {
                    this.ensureMethodIsMutable();
                    this.method_.set(index, builderForValue.build());
                    this.onChanged();
                }
                else {
                    this.methodBuilder_.setMessage(index, builderForValue.build());
                }
                return this;
            }
            
            public Builder addMethod(final MethodDescriptorProto value) {
                if (this.methodBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.ensureMethodIsMutable();
                    this.method_.add(value);
                    this.onChanged();
                }
                else {
                    this.methodBuilder_.addMessage(value);
                }
                return this;
            }
            
            public Builder addMethod(final int index, final MethodDescriptorProto value) {
                if (this.methodBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.ensureMethodIsMutable();
                    this.method_.add(index, value);
                    this.onChanged();
                }
                else {
                    this.methodBuilder_.addMessage(index, value);
                }
                return this;
            }
            
            public Builder addMethod(final MethodDescriptorProto.Builder builderForValue) {
                if (this.methodBuilder_ == null) {
                    this.ensureMethodIsMutable();
                    this.method_.add(builderForValue.build());
                    this.onChanged();
                }
                else {
                    this.methodBuilder_.addMessage(builderForValue.build());
                }
                return this;
            }
            
            public Builder addMethod(final int index, final MethodDescriptorProto.Builder builderForValue) {
                if (this.methodBuilder_ == null) {
                    this.ensureMethodIsMutable();
                    this.method_.add(index, builderForValue.build());
                    this.onChanged();
                }
                else {
                    this.methodBuilder_.addMessage(index, builderForValue.build());
                }
                return this;
            }
            
            public Builder addAllMethod(final Iterable<? extends MethodDescriptorProto> values) {
                if (this.methodBuilder_ == null) {
                    this.ensureMethodIsMutable();
                    AbstractMessageLite.Builder.addAll(values, this.method_);
                    this.onChanged();
                }
                else {
                    this.methodBuilder_.addAllMessages(values);
                }
                return this;
            }
            
            public Builder clearMethod() {
                if (this.methodBuilder_ == null) {
                    this.method_ = Collections.emptyList();
                    this.bitField0_ &= 0xFFFFFFFD;
                    this.onChanged();
                }
                else {
                    this.methodBuilder_.clear();
                }
                return this;
            }
            
            public Builder removeMethod(final int index) {
                if (this.methodBuilder_ == null) {
                    this.ensureMethodIsMutable();
                    this.method_.remove(index);
                    this.onChanged();
                }
                else {
                    this.methodBuilder_.remove(index);
                }
                return this;
            }
            
            public MethodDescriptorProto.Builder getMethodBuilder(final int index) {
                return this.internalGetMethodFieldBuilder().getBuilder(index);
            }
            
            @Override
            public MethodDescriptorProtoOrBuilder getMethodOrBuilder(final int index) {
                if (this.methodBuilder_ == null) {
                    return this.method_.get(index);
                }
                return this.methodBuilder_.getMessageOrBuilder(index);
            }
            
            @Override
            public List<? extends MethodDescriptorProtoOrBuilder> getMethodOrBuilderList() {
                if (this.methodBuilder_ != null) {
                    return this.methodBuilder_.getMessageOrBuilderList();
                }
                return Collections.unmodifiableList((List<? extends MethodDescriptorProtoOrBuilder>)this.method_);
            }
            
            public MethodDescriptorProto.Builder addMethodBuilder() {
                return this.internalGetMethodFieldBuilder().addBuilder(MethodDescriptorProto.getDefaultInstance());
            }
            
            public MethodDescriptorProto.Builder addMethodBuilder(final int index) {
                return this.internalGetMethodFieldBuilder().addBuilder(index, MethodDescriptorProto.getDefaultInstance());
            }
            
            public List<MethodDescriptorProto.Builder> getMethodBuilderList() {
                return this.internalGetMethodFieldBuilder().getBuilderList();
            }
            
            private RepeatedFieldBuilder<MethodDescriptorProto, MethodDescriptorProto.Builder, MethodDescriptorProtoOrBuilder> internalGetMethodFieldBuilder() {
                if (this.methodBuilder_ == null) {
                    this.methodBuilder_ = new RepeatedFieldBuilder<MethodDescriptorProto, MethodDescriptorProto.Builder, MethodDescriptorProtoOrBuilder>(this.method_, (this.bitField0_ & 0x2) != 0x0, this.getParentForChildren(), this.isClean());
                    this.method_ = null;
                }
                return this.methodBuilder_;
            }
            
            @Override
            public boolean hasOptions() {
                return (this.bitField0_ & 0x4) != 0x0;
            }
            
            @Override
            public ServiceOptions getOptions() {
                if (this.optionsBuilder_ == null) {
                    return (this.options_ == null) ? ServiceOptions.getDefaultInstance() : this.options_;
                }
                return this.optionsBuilder_.getMessage();
            }
            
            public Builder setOptions(final ServiceOptions value) {
                if (this.optionsBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.options_ = value;
                }
                else {
                    this.optionsBuilder_.setMessage(value);
                }
                this.bitField0_ |= 0x4;
                this.onChanged();
                return this;
            }
            
            public Builder setOptions(final ServiceOptions.Builder builderForValue) {
                if (this.optionsBuilder_ == null) {
                    this.options_ = builderForValue.build();
                }
                else {
                    this.optionsBuilder_.setMessage(builderForValue.build());
                }
                this.bitField0_ |= 0x4;
                this.onChanged();
                return this;
            }
            
            public Builder mergeOptions(final ServiceOptions value) {
                if (this.optionsBuilder_ == null) {
                    if ((this.bitField0_ & 0x4) != 0x0 && this.options_ != null && this.options_ != ServiceOptions.getDefaultInstance()) {
                        this.getOptionsBuilder().mergeFrom(value);
                    }
                    else {
                        this.options_ = value;
                    }
                }
                else {
                    this.optionsBuilder_.mergeFrom(value);
                }
                if (this.options_ != null) {
                    this.bitField0_ |= 0x4;
                    this.onChanged();
                }
                return this;
            }
            
            public Builder clearOptions() {
                this.bitField0_ &= 0xFFFFFFFB;
                this.options_ = null;
                if (this.optionsBuilder_ != null) {
                    this.optionsBuilder_.dispose();
                    this.optionsBuilder_ = null;
                }
                this.onChanged();
                return this;
            }
            
            public ServiceOptions.Builder getOptionsBuilder() {
                this.bitField0_ |= 0x4;
                this.onChanged();
                return this.internalGetOptionsFieldBuilder().getBuilder();
            }
            
            @Override
            public ServiceOptionsOrBuilder getOptionsOrBuilder() {
                if (this.optionsBuilder_ != null) {
                    return this.optionsBuilder_.getMessageOrBuilder();
                }
                return (this.options_ == null) ? ServiceOptions.getDefaultInstance() : this.options_;
            }
            
            private SingleFieldBuilder<ServiceOptions, ServiceOptions.Builder, ServiceOptionsOrBuilder> internalGetOptionsFieldBuilder() {
                if (this.optionsBuilder_ == null) {
                    this.optionsBuilder_ = new SingleFieldBuilder<ServiceOptions, ServiceOptions.Builder, ServiceOptionsOrBuilder>(this.getOptions(), this.getParentForChildren(), this.isClean());
                    this.options_ = null;
                }
                return this.optionsBuilder_;
            }
        }
    }
    
    public static final class MethodDescriptorProto extends GeneratedMessage implements MethodDescriptorProtoOrBuilder
    {
        private static final long serialVersionUID = 0L;
        private int bitField0_;
        public static final int NAME_FIELD_NUMBER = 1;
        private volatile Object name_;
        public static final int INPUT_TYPE_FIELD_NUMBER = 2;
        private volatile Object inputType_;
        public static final int OUTPUT_TYPE_FIELD_NUMBER = 3;
        private volatile Object outputType_;
        public static final int OPTIONS_FIELD_NUMBER = 4;
        private MethodOptions options_;
        public static final int CLIENT_STREAMING_FIELD_NUMBER = 5;
        private boolean clientStreaming_;
        public static final int SERVER_STREAMING_FIELD_NUMBER = 6;
        private boolean serverStreaming_;
        private byte memoizedIsInitialized;
        private static final MethodDescriptorProto DEFAULT_INSTANCE;
        private static final Parser<MethodDescriptorProto> PARSER;
        
        private MethodDescriptorProto(final GeneratedMessage.Builder<?> builder) {
            super(builder);
            this.name_ = "";
            this.inputType_ = "";
            this.outputType_ = "";
            this.clientStreaming_ = false;
            this.serverStreaming_ = false;
            this.memoizedIsInitialized = -1;
        }
        
        private MethodDescriptorProto() {
            this.name_ = "";
            this.inputType_ = "";
            this.outputType_ = "";
            this.clientStreaming_ = false;
            this.serverStreaming_ = false;
            this.memoizedIsInitialized = -1;
            this.name_ = "";
            this.inputType_ = "";
            this.outputType_ = "";
        }
        
        public static final Descriptors.Descriptor getDescriptor() {
            return DescriptorProtos.internal_static_google_protobuf_MethodDescriptorProto_descriptor;
        }
        
        @Override
        protected FieldAccessorTable internalGetFieldAccessorTable() {
            return DescriptorProtos.internal_static_google_protobuf_MethodDescriptorProto_fieldAccessorTable.ensureFieldAccessorsInitialized(MethodDescriptorProto.class, Builder.class);
        }
        
        @Override
        public boolean hasName() {
            return (this.bitField0_ & 0x1) != 0x0;
        }
        
        @Override
        public String getName() {
            final Object ref = this.name_;
            if (ref instanceof String) {
                return (String)ref;
            }
            final ByteString bs = (ByteString)ref;
            final String s = bs.toStringUtf8();
            if (bs.isValidUtf8()) {
                this.name_ = s;
            }
            return s;
        }
        
        @Override
        public ByteString getNameBytes() {
            final Object ref = this.name_;
            if (ref instanceof String) {
                final ByteString b = ByteString.copyFromUtf8((String)ref);
                return (ByteString)(this.name_ = b);
            }
            return (ByteString)ref;
        }
        
        @Override
        public boolean hasInputType() {
            return (this.bitField0_ & 0x2) != 0x0;
        }
        
        @Override
        public String getInputType() {
            final Object ref = this.inputType_;
            if (ref instanceof String) {
                return (String)ref;
            }
            final ByteString bs = (ByteString)ref;
            final String s = bs.toStringUtf8();
            if (bs.isValidUtf8()) {
                this.inputType_ = s;
            }
            return s;
        }
        
        @Override
        public ByteString getInputTypeBytes() {
            final Object ref = this.inputType_;
            if (ref instanceof String) {
                final ByteString b = ByteString.copyFromUtf8((String)ref);
                return (ByteString)(this.inputType_ = b);
            }
            return (ByteString)ref;
        }
        
        @Override
        public boolean hasOutputType() {
            return (this.bitField0_ & 0x4) != 0x0;
        }
        
        @Override
        public String getOutputType() {
            final Object ref = this.outputType_;
            if (ref instanceof String) {
                return (String)ref;
            }
            final ByteString bs = (ByteString)ref;
            final String s = bs.toStringUtf8();
            if (bs.isValidUtf8()) {
                this.outputType_ = s;
            }
            return s;
        }
        
        @Override
        public ByteString getOutputTypeBytes() {
            final Object ref = this.outputType_;
            if (ref instanceof String) {
                final ByteString b = ByteString.copyFromUtf8((String)ref);
                return (ByteString)(this.outputType_ = b);
            }
            return (ByteString)ref;
        }
        
        @Override
        public boolean hasOptions() {
            return (this.bitField0_ & 0x8) != 0x0;
        }
        
        @Override
        public MethodOptions getOptions() {
            return (this.options_ == null) ? MethodOptions.getDefaultInstance() : this.options_;
        }
        
        @Override
        public MethodOptionsOrBuilder getOptionsOrBuilder() {
            return (this.options_ == null) ? MethodOptions.getDefaultInstance() : this.options_;
        }
        
        @Override
        public boolean hasClientStreaming() {
            return (this.bitField0_ & 0x10) != 0x0;
        }
        
        @Override
        public boolean getClientStreaming() {
            return this.clientStreaming_;
        }
        
        @Override
        public boolean hasServerStreaming() {
            return (this.bitField0_ & 0x20) != 0x0;
        }
        
        @Override
        public boolean getServerStreaming() {
            return this.serverStreaming_;
        }
        
        @Override
        public final boolean isInitialized() {
            final byte isInitialized = this.memoizedIsInitialized;
            if (isInitialized == 1) {
                return true;
            }
            if (isInitialized == 0) {
                return false;
            }
            if (this.hasOptions() && !this.getOptions().isInitialized()) {
                this.memoizedIsInitialized = 0;
                return false;
            }
            this.memoizedIsInitialized = 1;
            return true;
        }
        
        @Override
        public void writeTo(final CodedOutputStream output) throws IOException {
            if ((this.bitField0_ & 0x1) != 0x0) {
                GeneratedMessage.writeString(output, 1, this.name_);
            }
            if ((this.bitField0_ & 0x2) != 0x0) {
                GeneratedMessage.writeString(output, 2, this.inputType_);
            }
            if ((this.bitField0_ & 0x4) != 0x0) {
                GeneratedMessage.writeString(output, 3, this.outputType_);
            }
            if ((this.bitField0_ & 0x8) != 0x0) {
                output.writeMessage(4, this.getOptions());
            }
            if ((this.bitField0_ & 0x10) != 0x0) {
                output.writeBool(5, this.clientStreaming_);
            }
            if ((this.bitField0_ & 0x20) != 0x0) {
                output.writeBool(6, this.serverStreaming_);
            }
            this.getUnknownFields().writeTo(output);
        }
        
        @Override
        public int getSerializedSize() {
            int size = this.memoizedSize;
            if (size != -1) {
                return size;
            }
            size = 0;
            if ((this.bitField0_ & 0x1) != 0x0) {
                size += GeneratedMessage.computeStringSize(1, this.name_);
            }
            if ((this.bitField0_ & 0x2) != 0x0) {
                size += GeneratedMessage.computeStringSize(2, this.inputType_);
            }
            if ((this.bitField0_ & 0x4) != 0x0) {
                size += GeneratedMessage.computeStringSize(3, this.outputType_);
            }
            if ((this.bitField0_ & 0x8) != 0x0) {
                size += CodedOutputStream.computeMessageSize(4, this.getOptions());
            }
            if ((this.bitField0_ & 0x10) != 0x0) {
                size += CodedOutputStream.computeBoolSize(5, this.clientStreaming_);
            }
            if ((this.bitField0_ & 0x20) != 0x0) {
                size += CodedOutputStream.computeBoolSize(6, this.serverStreaming_);
            }
            size += this.getUnknownFields().getSerializedSize();
            return this.memoizedSize = size;
        }
        
        @Override
        public boolean equals(final Object obj) {
            if (obj == this) {
                return true;
            }
            if (!(obj instanceof MethodDescriptorProto)) {
                return super.equals(obj);
            }
            final MethodDescriptorProto other = (MethodDescriptorProto)obj;
            return this.hasName() == other.hasName() && (!this.hasName() || this.getName().equals(other.getName())) && this.hasInputType() == other.hasInputType() && (!this.hasInputType() || this.getInputType().equals(other.getInputType())) && this.hasOutputType() == other.hasOutputType() && (!this.hasOutputType() || this.getOutputType().equals(other.getOutputType())) && this.hasOptions() == other.hasOptions() && (!this.hasOptions() || this.getOptions().equals(other.getOptions())) && this.hasClientStreaming() == other.hasClientStreaming() && (!this.hasClientStreaming() || this.getClientStreaming() == other.getClientStreaming()) && this.hasServerStreaming() == other.hasServerStreaming() && (!this.hasServerStreaming() || this.getServerStreaming() == other.getServerStreaming()) && this.getUnknownFields().equals(other.getUnknownFields());
        }
        
        @Override
        public int hashCode() {
            if (this.memoizedHashCode != 0) {
                return this.memoizedHashCode;
            }
            int hash = 41;
            hash = 19 * hash + getDescriptor().hashCode();
            if (this.hasName()) {
                hash = 37 * hash + 1;
                hash = 53 * hash + this.getName().hashCode();
            }
            if (this.hasInputType()) {
                hash = 37 * hash + 2;
                hash = 53 * hash + this.getInputType().hashCode();
            }
            if (this.hasOutputType()) {
                hash = 37 * hash + 3;
                hash = 53 * hash + this.getOutputType().hashCode();
            }
            if (this.hasOptions()) {
                hash = 37 * hash + 4;
                hash = 53 * hash + this.getOptions().hashCode();
            }
            if (this.hasClientStreaming()) {
                hash = 37 * hash + 5;
                hash = 53 * hash + Internal.hashBoolean(this.getClientStreaming());
            }
            if (this.hasServerStreaming()) {
                hash = 37 * hash + 6;
                hash = 53 * hash + Internal.hashBoolean(this.getServerStreaming());
            }
            hash = 29 * hash + this.getUnknownFields().hashCode();
            return this.memoizedHashCode = hash;
        }
        
        public static MethodDescriptorProto parseFrom(final ByteBuffer data) throws InvalidProtocolBufferException {
            return MethodDescriptorProto.PARSER.parseFrom(data);
        }
        
        public static MethodDescriptorProto parseFrom(final ByteBuffer data, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
            return MethodDescriptorProto.PARSER.parseFrom(data, extensionRegistry);
        }
        
        public static MethodDescriptorProto parseFrom(final ByteString data) throws InvalidProtocolBufferException {
            return MethodDescriptorProto.PARSER.parseFrom(data);
        }
        
        public static MethodDescriptorProto parseFrom(final ByteString data, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
            return MethodDescriptorProto.PARSER.parseFrom(data, extensionRegistry);
        }
        
        public static MethodDescriptorProto parseFrom(final byte[] data) throws InvalidProtocolBufferException {
            return MethodDescriptorProto.PARSER.parseFrom(data);
        }
        
        public static MethodDescriptorProto parseFrom(final byte[] data, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
            return MethodDescriptorProto.PARSER.parseFrom(data, extensionRegistry);
        }
        
        public static MethodDescriptorProto parseFrom(final InputStream input) throws IOException {
            return GeneratedMessage.parseWithIOException(MethodDescriptorProto.PARSER, input);
        }
        
        public static MethodDescriptorProto parseFrom(final InputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
            return GeneratedMessage.parseWithIOException(MethodDescriptorProto.PARSER, input, extensionRegistry);
        }
        
        public static MethodDescriptorProto parseDelimitedFrom(final InputStream input) throws IOException {
            return GeneratedMessage.parseDelimitedWithIOException(MethodDescriptorProto.PARSER, input);
        }
        
        public static MethodDescriptorProto parseDelimitedFrom(final InputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
            return GeneratedMessage.parseDelimitedWithIOException(MethodDescriptorProto.PARSER, input, extensionRegistry);
        }
        
        public static MethodDescriptorProto parseFrom(final CodedInputStream input) throws IOException {
            return GeneratedMessage.parseWithIOException(MethodDescriptorProto.PARSER, input);
        }
        
        public static MethodDescriptorProto parseFrom(final CodedInputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
            return GeneratedMessage.parseWithIOException(MethodDescriptorProto.PARSER, input, extensionRegistry);
        }
        
        @Override
        public Builder newBuilderForType() {
            return newBuilder();
        }
        
        public static Builder newBuilder() {
            return MethodDescriptorProto.DEFAULT_INSTANCE.toBuilder();
        }
        
        public static Builder newBuilder(final MethodDescriptorProto prototype) {
            return MethodDescriptorProto.DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
        }
        
        @Override
        public Builder toBuilder() {
            return (this == MethodDescriptorProto.DEFAULT_INSTANCE) ? new Builder() : new Builder().mergeFrom(this);
        }
        
        @Override
        protected Builder newBuilderForType(final BuilderParent parent) {
            final Builder builder = new Builder(parent);
            return builder;
        }
        
        public static MethodDescriptorProto getDefaultInstance() {
            return MethodDescriptorProto.DEFAULT_INSTANCE;
        }
        
        public static Parser<MethodDescriptorProto> parser() {
            return MethodDescriptorProto.PARSER;
        }
        
        @Override
        public Parser<MethodDescriptorProto> getParserForType() {
            return MethodDescriptorProto.PARSER;
        }
        
        @Override
        public MethodDescriptorProto getDefaultInstanceForType() {
            return MethodDescriptorProto.DEFAULT_INSTANCE;
        }
        
        static {
            RuntimeVersion.validateProtobufGencodeVersion(RuntimeVersion.RuntimeDomain.PUBLIC, 4, 33, 0, "", "MethodDescriptorProto");
            DEFAULT_INSTANCE = new MethodDescriptorProto();
            PARSER = new AbstractParser<MethodDescriptorProto>() {
                @Override
                public MethodDescriptorProto parsePartialFrom(final CodedInputStream input, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
                    final Builder builder = MethodDescriptorProto.newBuilder();
                    try {
                        builder.mergeFrom(input, extensionRegistry);
                    }
                    catch (final InvalidProtocolBufferException e) {
                        throw e.setUnfinishedMessage(builder.buildPartial());
                    }
                    catch (final UninitializedMessageException e2) {
                        throw e2.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
                    }
                    catch (final IOException e3) {
                        throw new InvalidProtocolBufferException(e3).setUnfinishedMessage(builder.buildPartial());
                    }
                    return builder.buildPartial();
                }
            };
        }
        
        public static final class Builder extends GeneratedMessage.Builder<Builder> implements MethodDescriptorProtoOrBuilder
        {
            private int bitField0_;
            private Object name_;
            private Object inputType_;
            private Object outputType_;
            private MethodOptions options_;
            private SingleFieldBuilder<MethodOptions, MethodOptions.Builder, MethodOptionsOrBuilder> optionsBuilder_;
            private boolean clientStreaming_;
            private boolean serverStreaming_;
            
            public static final Descriptors.Descriptor getDescriptor() {
                return DescriptorProtos.internal_static_google_protobuf_MethodDescriptorProto_descriptor;
            }
            
            @Override
            protected FieldAccessorTable internalGetFieldAccessorTable() {
                return DescriptorProtos.internal_static_google_protobuf_MethodDescriptorProto_fieldAccessorTable.ensureFieldAccessorsInitialized(MethodDescriptorProto.class, Builder.class);
            }
            
            private Builder() {
                this.name_ = "";
                this.inputType_ = "";
                this.outputType_ = "";
                this.maybeForceBuilderInitialization();
            }
            
            private Builder(final BuilderParent parent) {
                super(parent);
                this.name_ = "";
                this.inputType_ = "";
                this.outputType_ = "";
                this.maybeForceBuilderInitialization();
            }
            
            private void maybeForceBuilderInitialization() {
                if (GeneratedMessage.alwaysUseFieldBuilders) {
                    this.internalGetOptionsFieldBuilder();
                }
            }
            
            @Override
            public Builder clear() {
                super.clear();
                this.bitField0_ = 0;
                this.name_ = "";
                this.inputType_ = "";
                this.outputType_ = "";
                this.options_ = null;
                if (this.optionsBuilder_ != null) {
                    this.optionsBuilder_.dispose();
                    this.optionsBuilder_ = null;
                }
                this.clientStreaming_ = false;
                this.serverStreaming_ = false;
                return this;
            }
            
            @Override
            public Descriptors.Descriptor getDescriptorForType() {
                return DescriptorProtos.internal_static_google_protobuf_MethodDescriptorProto_descriptor;
            }
            
            @Override
            public MethodDescriptorProto getDefaultInstanceForType() {
                return MethodDescriptorProto.getDefaultInstance();
            }
            
            @Override
            public MethodDescriptorProto build() {
                final MethodDescriptorProto result = this.buildPartial();
                if (!result.isInitialized()) {
                    throw AbstractMessage.Builder.newUninitializedMessageException(result);
                }
                return result;
            }
            
            @Override
            public MethodDescriptorProto buildPartial() {
                final MethodDescriptorProto result = new MethodDescriptorProto((GeneratedMessage.Builder)this);
                if (this.bitField0_ != 0) {
                    this.buildPartial0(result);
                }
                this.onBuilt();
                return result;
            }
            
            private void buildPartial0(final MethodDescriptorProto result) {
                final int from_bitField0_ = this.bitField0_;
                int to_bitField0_ = 0;
                if ((from_bitField0_ & 0x1) != 0x0) {
                    result.name_ = this.name_;
                    to_bitField0_ |= 0x1;
                }
                if ((from_bitField0_ & 0x2) != 0x0) {
                    result.inputType_ = this.inputType_;
                    to_bitField0_ |= 0x2;
                }
                if ((from_bitField0_ & 0x4) != 0x0) {
                    result.outputType_ = this.outputType_;
                    to_bitField0_ |= 0x4;
                }
                if ((from_bitField0_ & 0x8) != 0x0) {
                    result.options_ = ((this.optionsBuilder_ == null) ? this.options_ : this.optionsBuilder_.build());
                    to_bitField0_ |= 0x8;
                }
                if ((from_bitField0_ & 0x10) != 0x0) {
                    result.clientStreaming_ = this.clientStreaming_;
                    to_bitField0_ |= 0x10;
                }
                if ((from_bitField0_ & 0x20) != 0x0) {
                    result.serverStreaming_ = this.serverStreaming_;
                    to_bitField0_ |= 0x20;
                }
                result.bitField0_ |= to_bitField0_;
            }
            
            @Override
            public Builder mergeFrom(final Message other) {
                if (other instanceof MethodDescriptorProto) {
                    return this.mergeFrom((MethodDescriptorProto)other);
                }
                super.mergeFrom(other);
                return this;
            }
            
            public Builder mergeFrom(final MethodDescriptorProto other) {
                if (other == MethodDescriptorProto.getDefaultInstance()) {
                    return this;
                }
                if (other.hasName()) {
                    this.name_ = other.name_;
                    this.bitField0_ |= 0x1;
                    this.onChanged();
                }
                if (other.hasInputType()) {
                    this.inputType_ = other.inputType_;
                    this.bitField0_ |= 0x2;
                    this.onChanged();
                }
                if (other.hasOutputType()) {
                    this.outputType_ = other.outputType_;
                    this.bitField0_ |= 0x4;
                    this.onChanged();
                }
                if (other.hasOptions()) {
                    this.mergeOptions(other.getOptions());
                }
                if (other.hasClientStreaming()) {
                    this.setClientStreaming(other.getClientStreaming());
                }
                if (other.hasServerStreaming()) {
                    this.setServerStreaming(other.getServerStreaming());
                }
                this.mergeUnknownFields(other.getUnknownFields());
                this.onChanged();
                return this;
            }
            
            @Override
            public final boolean isInitialized() {
                return !this.hasOptions() || this.getOptions().isInitialized();
            }
            
            @Override
            public Builder mergeFrom(final CodedInputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
                if (extensionRegistry == null) {
                    throw new NullPointerException();
                }
                try {
                    boolean done = false;
                    while (!done) {
                        final int tag = input.readTag();
                        switch (tag) {
                            case 0: {
                                done = true;
                                continue;
                            }
                            case 10: {
                                this.name_ = input.readBytes();
                                this.bitField0_ |= 0x1;
                                continue;
                            }
                            case 18: {
                                this.inputType_ = input.readBytes();
                                this.bitField0_ |= 0x2;
                                continue;
                            }
                            case 26: {
                                this.outputType_ = input.readBytes();
                                this.bitField0_ |= 0x4;
                                continue;
                            }
                            case 34: {
                                input.readMessage(this.internalGetOptionsFieldBuilder().getBuilder(), extensionRegistry);
                                this.bitField0_ |= 0x8;
                                continue;
                            }
                            case 40: {
                                this.clientStreaming_ = input.readBool();
                                this.bitField0_ |= 0x10;
                                continue;
                            }
                            case 48: {
                                this.serverStreaming_ = input.readBool();
                                this.bitField0_ |= 0x20;
                                continue;
                            }
                            default: {
                                if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                                    done = true;
                                    continue;
                                }
                                continue;
                            }
                        }
                    }
                }
                catch (final InvalidProtocolBufferException e) {
                    throw e.unwrapIOException();
                }
                finally {
                    this.onChanged();
                }
                return this;
            }
            
            @Override
            public boolean hasName() {
                return (this.bitField0_ & 0x1) != 0x0;
            }
            
            @Override
            public String getName() {
                final Object ref = this.name_;
                if (!(ref instanceof String)) {
                    final ByteString bs = (ByteString)ref;
                    final String s = bs.toStringUtf8();
                    if (bs.isValidUtf8()) {
                        this.name_ = s;
                    }
                    return s;
                }
                return (String)ref;
            }
            
            @Override
            public ByteString getNameBytes() {
                final Object ref = this.name_;
                if (ref instanceof String) {
                    final ByteString b = ByteString.copyFromUtf8((String)ref);
                    return (ByteString)(this.name_ = b);
                }
                return (ByteString)ref;
            }
            
            public Builder setName(final String value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                this.name_ = value;
                this.bitField0_ |= 0x1;
                this.onChanged();
                return this;
            }
            
            public Builder clearName() {
                this.name_ = MethodDescriptorProto.getDefaultInstance().getName();
                this.bitField0_ &= 0xFFFFFFFE;
                this.onChanged();
                return this;
            }
            
            public Builder setNameBytes(final ByteString value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                this.name_ = value;
                this.bitField0_ |= 0x1;
                this.onChanged();
                return this;
            }
            
            @Override
            public boolean hasInputType() {
                return (this.bitField0_ & 0x2) != 0x0;
            }
            
            @Override
            public String getInputType() {
                final Object ref = this.inputType_;
                if (!(ref instanceof String)) {
                    final ByteString bs = (ByteString)ref;
                    final String s = bs.toStringUtf8();
                    if (bs.isValidUtf8()) {
                        this.inputType_ = s;
                    }
                    return s;
                }
                return (String)ref;
            }
            
            @Override
            public ByteString getInputTypeBytes() {
                final Object ref = this.inputType_;
                if (ref instanceof String) {
                    final ByteString b = ByteString.copyFromUtf8((String)ref);
                    return (ByteString)(this.inputType_ = b);
                }
                return (ByteString)ref;
            }
            
            public Builder setInputType(final String value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                this.inputType_ = value;
                this.bitField0_ |= 0x2;
                this.onChanged();
                return this;
            }
            
            public Builder clearInputType() {
                this.inputType_ = MethodDescriptorProto.getDefaultInstance().getInputType();
                this.bitField0_ &= 0xFFFFFFFD;
                this.onChanged();
                return this;
            }
            
            public Builder setInputTypeBytes(final ByteString value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                this.inputType_ = value;
                this.bitField0_ |= 0x2;
                this.onChanged();
                return this;
            }
            
            @Override
            public boolean hasOutputType() {
                return (this.bitField0_ & 0x4) != 0x0;
            }
            
            @Override
            public String getOutputType() {
                final Object ref = this.outputType_;
                if (!(ref instanceof String)) {
                    final ByteString bs = (ByteString)ref;
                    final String s = bs.toStringUtf8();
                    if (bs.isValidUtf8()) {
                        this.outputType_ = s;
                    }
                    return s;
                }
                return (String)ref;
            }
            
            @Override
            public ByteString getOutputTypeBytes() {
                final Object ref = this.outputType_;
                if (ref instanceof String) {
                    final ByteString b = ByteString.copyFromUtf8((String)ref);
                    return (ByteString)(this.outputType_ = b);
                }
                return (ByteString)ref;
            }
            
            public Builder setOutputType(final String value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                this.outputType_ = value;
                this.bitField0_ |= 0x4;
                this.onChanged();
                return this;
            }
            
            public Builder clearOutputType() {
                this.outputType_ = MethodDescriptorProto.getDefaultInstance().getOutputType();
                this.bitField0_ &= 0xFFFFFFFB;
                this.onChanged();
                return this;
            }
            
            public Builder setOutputTypeBytes(final ByteString value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                this.outputType_ = value;
                this.bitField0_ |= 0x4;
                this.onChanged();
                return this;
            }
            
            @Override
            public boolean hasOptions() {
                return (this.bitField0_ & 0x8) != 0x0;
            }
            
            @Override
            public MethodOptions getOptions() {
                if (this.optionsBuilder_ == null) {
                    return (this.options_ == null) ? MethodOptions.getDefaultInstance() : this.options_;
                }
                return this.optionsBuilder_.getMessage();
            }
            
            public Builder setOptions(final MethodOptions value) {
                if (this.optionsBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.options_ = value;
                }
                else {
                    this.optionsBuilder_.setMessage(value);
                }
                this.bitField0_ |= 0x8;
                this.onChanged();
                return this;
            }
            
            public Builder setOptions(final MethodOptions.Builder builderForValue) {
                if (this.optionsBuilder_ == null) {
                    this.options_ = builderForValue.build();
                }
                else {
                    this.optionsBuilder_.setMessage(builderForValue.build());
                }
                this.bitField0_ |= 0x8;
                this.onChanged();
                return this;
            }
            
            public Builder mergeOptions(final MethodOptions value) {
                if (this.optionsBuilder_ == null) {
                    if ((this.bitField0_ & 0x8) != 0x0 && this.options_ != null && this.options_ != MethodOptions.getDefaultInstance()) {
                        this.getOptionsBuilder().mergeFrom(value);
                    }
                    else {
                        this.options_ = value;
                    }
                }
                else {
                    this.optionsBuilder_.mergeFrom(value);
                }
                if (this.options_ != null) {
                    this.bitField0_ |= 0x8;
                    this.onChanged();
                }
                return this;
            }
            
            public Builder clearOptions() {
                this.bitField0_ &= 0xFFFFFFF7;
                this.options_ = null;
                if (this.optionsBuilder_ != null) {
                    this.optionsBuilder_.dispose();
                    this.optionsBuilder_ = null;
                }
                this.onChanged();
                return this;
            }
            
            public MethodOptions.Builder getOptionsBuilder() {
                this.bitField0_ |= 0x8;
                this.onChanged();
                return this.internalGetOptionsFieldBuilder().getBuilder();
            }
            
            @Override
            public MethodOptionsOrBuilder getOptionsOrBuilder() {
                if (this.optionsBuilder_ != null) {
                    return this.optionsBuilder_.getMessageOrBuilder();
                }
                return (this.options_ == null) ? MethodOptions.getDefaultInstance() : this.options_;
            }
            
            private SingleFieldBuilder<MethodOptions, MethodOptions.Builder, MethodOptionsOrBuilder> internalGetOptionsFieldBuilder() {
                if (this.optionsBuilder_ == null) {
                    this.optionsBuilder_ = new SingleFieldBuilder<MethodOptions, MethodOptions.Builder, MethodOptionsOrBuilder>(this.getOptions(), this.getParentForChildren(), this.isClean());
                    this.options_ = null;
                }
                return this.optionsBuilder_;
            }
            
            @Override
            public boolean hasClientStreaming() {
                return (this.bitField0_ & 0x10) != 0x0;
            }
            
            @Override
            public boolean getClientStreaming() {
                return this.clientStreaming_;
            }
            
            public Builder setClientStreaming(final boolean value) {
                this.clientStreaming_ = value;
                this.bitField0_ |= 0x10;
                this.onChanged();
                return this;
            }
            
            public Builder clearClientStreaming() {
                this.bitField0_ &= 0xFFFFFFEF;
                this.clientStreaming_ = false;
                this.onChanged();
                return this;
            }
            
            @Override
            public boolean hasServerStreaming() {
                return (this.bitField0_ & 0x20) != 0x0;
            }
            
            @Override
            public boolean getServerStreaming() {
                return this.serverStreaming_;
            }
            
            public Builder setServerStreaming(final boolean value) {
                this.serverStreaming_ = value;
                this.bitField0_ |= 0x20;
                this.onChanged();
                return this;
            }
            
            public Builder clearServerStreaming() {
                this.bitField0_ &= 0xFFFFFFDF;
                this.serverStreaming_ = false;
                this.onChanged();
                return this;
            }
        }
    }
    
    public static final class FileOptions extends ExtendableMessage<FileOptions> implements FileOptionsOrBuilder
    {
        private static final long serialVersionUID = 0L;
        private int bitField0_;
        public static final int JAVA_PACKAGE_FIELD_NUMBER = 1;
        private volatile Object javaPackage_;
        public static final int JAVA_OUTER_CLASSNAME_FIELD_NUMBER = 8;
        private volatile Object javaOuterClassname_;
        public static final int JAVA_MULTIPLE_FILES_FIELD_NUMBER = 10;
        private boolean javaMultipleFiles_;
        public static final int JAVA_GENERATE_EQUALS_AND_HASH_FIELD_NUMBER = 20;
        private boolean javaGenerateEqualsAndHash_;
        public static final int JAVA_STRING_CHECK_UTF8_FIELD_NUMBER = 27;
        private boolean javaStringCheckUtf8_;
        public static final int OPTIMIZE_FOR_FIELD_NUMBER = 9;
        private int optimizeFor_;
        public static final int GO_PACKAGE_FIELD_NUMBER = 11;
        private volatile Object goPackage_;
        public static final int CC_GENERIC_SERVICES_FIELD_NUMBER = 16;
        private boolean ccGenericServices_;
        public static final int JAVA_GENERIC_SERVICES_FIELD_NUMBER = 17;
        private boolean javaGenericServices_;
        public static final int PY_GENERIC_SERVICES_FIELD_NUMBER = 18;
        private boolean pyGenericServices_;
        public static final int DEPRECATED_FIELD_NUMBER = 23;
        private boolean deprecated_;
        public static final int CC_ENABLE_ARENAS_FIELD_NUMBER = 31;
        private boolean ccEnableArenas_;
        public static final int OBJC_CLASS_PREFIX_FIELD_NUMBER = 36;
        private volatile Object objcClassPrefix_;
        public static final int CSHARP_NAMESPACE_FIELD_NUMBER = 37;
        private volatile Object csharpNamespace_;
        public static final int SWIFT_PREFIX_FIELD_NUMBER = 39;
        private volatile Object swiftPrefix_;
        public static final int PHP_CLASS_PREFIX_FIELD_NUMBER = 40;
        private volatile Object phpClassPrefix_;
        public static final int PHP_NAMESPACE_FIELD_NUMBER = 41;
        private volatile Object phpNamespace_;
        public static final int PHP_METADATA_NAMESPACE_FIELD_NUMBER = 44;
        private volatile Object phpMetadataNamespace_;
        public static final int RUBY_PACKAGE_FIELD_NUMBER = 45;
        private volatile Object rubyPackage_;
        public static final int FEATURES_FIELD_NUMBER = 50;
        private FeatureSet features_;
        public static final int UNINTERPRETED_OPTION_FIELD_NUMBER = 999;
        private List<UninterpretedOption> uninterpretedOption_;
        private byte memoizedIsInitialized;
        private static final FileOptions DEFAULT_INSTANCE;
        private static final Parser<FileOptions> PARSER;
        
        private FileOptions(final ExtendableBuilder<FileOptions, ?> builder) {
            super(builder);
            this.javaPackage_ = "";
            this.javaOuterClassname_ = "";
            this.javaMultipleFiles_ = false;
            this.javaGenerateEqualsAndHash_ = false;
            this.javaStringCheckUtf8_ = false;
            this.optimizeFor_ = 1;
            this.goPackage_ = "";
            this.ccGenericServices_ = false;
            this.javaGenericServices_ = false;
            this.pyGenericServices_ = false;
            this.deprecated_ = false;
            this.ccEnableArenas_ = true;
            this.objcClassPrefix_ = "";
            this.csharpNamespace_ = "";
            this.swiftPrefix_ = "";
            this.phpClassPrefix_ = "";
            this.phpNamespace_ = "";
            this.phpMetadataNamespace_ = "";
            this.rubyPackage_ = "";
            this.memoizedIsInitialized = -1;
        }
        
        private FileOptions() {
            this.javaPackage_ = "";
            this.javaOuterClassname_ = "";
            this.javaMultipleFiles_ = false;
            this.javaGenerateEqualsAndHash_ = false;
            this.javaStringCheckUtf8_ = false;
            this.optimizeFor_ = 1;
            this.goPackage_ = "";
            this.ccGenericServices_ = false;
            this.javaGenericServices_ = false;
            this.pyGenericServices_ = false;
            this.deprecated_ = false;
            this.ccEnableArenas_ = true;
            this.objcClassPrefix_ = "";
            this.csharpNamespace_ = "";
            this.swiftPrefix_ = "";
            this.phpClassPrefix_ = "";
            this.phpNamespace_ = "";
            this.phpMetadataNamespace_ = "";
            this.rubyPackage_ = "";
            this.memoizedIsInitialized = -1;
            this.javaPackage_ = "";
            this.javaOuterClassname_ = "";
            this.optimizeFor_ = 1;
            this.goPackage_ = "";
            this.ccEnableArenas_ = true;
            this.objcClassPrefix_ = "";
            this.csharpNamespace_ = "";
            this.swiftPrefix_ = "";
            this.phpClassPrefix_ = "";
            this.phpNamespace_ = "";
            this.phpMetadataNamespace_ = "";
            this.rubyPackage_ = "";
            this.uninterpretedOption_ = Collections.emptyList();
        }
        
        public static final Descriptors.Descriptor getDescriptor() {
            return DescriptorProtos.internal_static_google_protobuf_FileOptions_descriptor;
        }
        
        @Override
        protected FieldAccessorTable internalGetFieldAccessorTable() {
            return DescriptorProtos.internal_static_google_protobuf_FileOptions_fieldAccessorTable.ensureFieldAccessorsInitialized(FileOptions.class, Builder.class);
        }
        
        @Override
        public boolean hasJavaPackage() {
            return (this.bitField0_ & 0x1) != 0x0;
        }
        
        @Override
        public String getJavaPackage() {
            final Object ref = this.javaPackage_;
            if (ref instanceof String) {
                return (String)ref;
            }
            final ByteString bs = (ByteString)ref;
            final String s = bs.toStringUtf8();
            if (bs.isValidUtf8()) {
                this.javaPackage_ = s;
            }
            return s;
        }
        
        @Override
        public ByteString getJavaPackageBytes() {
            final Object ref = this.javaPackage_;
            if (ref instanceof String) {
                final ByteString b = ByteString.copyFromUtf8((String)ref);
                return (ByteString)(this.javaPackage_ = b);
            }
            return (ByteString)ref;
        }
        
        @Override
        public boolean hasJavaOuterClassname() {
            return (this.bitField0_ & 0x2) != 0x0;
        }
        
        @Override
        public String getJavaOuterClassname() {
            final Object ref = this.javaOuterClassname_;
            if (ref instanceof String) {
                return (String)ref;
            }
            final ByteString bs = (ByteString)ref;
            final String s = bs.toStringUtf8();
            if (bs.isValidUtf8()) {
                this.javaOuterClassname_ = s;
            }
            return s;
        }
        
        @Override
        public ByteString getJavaOuterClassnameBytes() {
            final Object ref = this.javaOuterClassname_;
            if (ref instanceof String) {
                final ByteString b = ByteString.copyFromUtf8((String)ref);
                return (ByteString)(this.javaOuterClassname_ = b);
            }
            return (ByteString)ref;
        }
        
        @Override
        public boolean hasJavaMultipleFiles() {
            return (this.bitField0_ & 0x4) != 0x0;
        }
        
        @Override
        public boolean getJavaMultipleFiles() {
            return this.javaMultipleFiles_;
        }
        
        @Deprecated
        @Override
        public boolean hasJavaGenerateEqualsAndHash() {
            return (this.bitField0_ & 0x8) != 0x0;
        }
        
        @Deprecated
        @Override
        public boolean getJavaGenerateEqualsAndHash() {
            return this.javaGenerateEqualsAndHash_;
        }
        
        @Override
        public boolean hasJavaStringCheckUtf8() {
            return (this.bitField0_ & 0x10) != 0x0;
        }
        
        @Override
        public boolean getJavaStringCheckUtf8() {
            return this.javaStringCheckUtf8_;
        }
        
        @Override
        public boolean hasOptimizeFor() {
            return (this.bitField0_ & 0x20) != 0x0;
        }
        
        @Override
        public OptimizeMode getOptimizeFor() {
            final OptimizeMode result = OptimizeMode.forNumber(this.optimizeFor_);
            return (result == null) ? OptimizeMode.SPEED : result;
        }
        
        @Override
        public boolean hasGoPackage() {
            return (this.bitField0_ & 0x40) != 0x0;
        }
        
        @Override
        public String getGoPackage() {
            final Object ref = this.goPackage_;
            if (ref instanceof String) {
                return (String)ref;
            }
            final ByteString bs = (ByteString)ref;
            final String s = bs.toStringUtf8();
            if (bs.isValidUtf8()) {
                this.goPackage_ = s;
            }
            return s;
        }
        
        @Override
        public ByteString getGoPackageBytes() {
            final Object ref = this.goPackage_;
            if (ref instanceof String) {
                final ByteString b = ByteString.copyFromUtf8((String)ref);
                return (ByteString)(this.goPackage_ = b);
            }
            return (ByteString)ref;
        }
        
        @Override
        public boolean hasCcGenericServices() {
            return (this.bitField0_ & 0x80) != 0x0;
        }
        
        @Override
        public boolean getCcGenericServices() {
            return this.ccGenericServices_;
        }
        
        @Override
        public boolean hasJavaGenericServices() {
            return (this.bitField0_ & 0x100) != 0x0;
        }
        
        @Override
        public boolean getJavaGenericServices() {
            return this.javaGenericServices_;
        }
        
        @Override
        public boolean hasPyGenericServices() {
            return (this.bitField0_ & 0x200) != 0x0;
        }
        
        @Override
        public boolean getPyGenericServices() {
            return this.pyGenericServices_;
        }
        
        @Override
        public boolean hasDeprecated() {
            return (this.bitField0_ & 0x400) != 0x0;
        }
        
        @Override
        public boolean getDeprecated() {
            return this.deprecated_;
        }
        
        @Override
        public boolean hasCcEnableArenas() {
            return (this.bitField0_ & 0x800) != 0x0;
        }
        
        @Override
        public boolean getCcEnableArenas() {
            return this.ccEnableArenas_;
        }
        
        @Override
        public boolean hasObjcClassPrefix() {
            return (this.bitField0_ & 0x1000) != 0x0;
        }
        
        @Override
        public String getObjcClassPrefix() {
            final Object ref = this.objcClassPrefix_;
            if (ref instanceof String) {
                return (String)ref;
            }
            final ByteString bs = (ByteString)ref;
            final String s = bs.toStringUtf8();
            if (bs.isValidUtf8()) {
                this.objcClassPrefix_ = s;
            }
            return s;
        }
        
        @Override
        public ByteString getObjcClassPrefixBytes() {
            final Object ref = this.objcClassPrefix_;
            if (ref instanceof String) {
                final ByteString b = ByteString.copyFromUtf8((String)ref);
                return (ByteString)(this.objcClassPrefix_ = b);
            }
            return (ByteString)ref;
        }
        
        @Override
        public boolean hasCsharpNamespace() {
            return (this.bitField0_ & 0x2000) != 0x0;
        }
        
        @Override
        public String getCsharpNamespace() {
            final Object ref = this.csharpNamespace_;
            if (ref instanceof String) {
                return (String)ref;
            }
            final ByteString bs = (ByteString)ref;
            final String s = bs.toStringUtf8();
            if (bs.isValidUtf8()) {
                this.csharpNamespace_ = s;
            }
            return s;
        }
        
        @Override
        public ByteString getCsharpNamespaceBytes() {
            final Object ref = this.csharpNamespace_;
            if (ref instanceof String) {
                final ByteString b = ByteString.copyFromUtf8((String)ref);
                return (ByteString)(this.csharpNamespace_ = b);
            }
            return (ByteString)ref;
        }
        
        @Override
        public boolean hasSwiftPrefix() {
            return (this.bitField0_ & 0x4000) != 0x0;
        }
        
        @Override
        public String getSwiftPrefix() {
            final Object ref = this.swiftPrefix_;
            if (ref instanceof String) {
                return (String)ref;
            }
            final ByteString bs = (ByteString)ref;
            final String s = bs.toStringUtf8();
            if (bs.isValidUtf8()) {
                this.swiftPrefix_ = s;
            }
            return s;
        }
        
        @Override
        public ByteString getSwiftPrefixBytes() {
            final Object ref = this.swiftPrefix_;
            if (ref instanceof String) {
                final ByteString b = ByteString.copyFromUtf8((String)ref);
                return (ByteString)(this.swiftPrefix_ = b);
            }
            return (ByteString)ref;
        }
        
        @Override
        public boolean hasPhpClassPrefix() {
            return (this.bitField0_ & 0x8000) != 0x0;
        }
        
        @Override
        public String getPhpClassPrefix() {
            final Object ref = this.phpClassPrefix_;
            if (ref instanceof String) {
                return (String)ref;
            }
            final ByteString bs = (ByteString)ref;
            final String s = bs.toStringUtf8();
            if (bs.isValidUtf8()) {
                this.phpClassPrefix_ = s;
            }
            return s;
        }
        
        @Override
        public ByteString getPhpClassPrefixBytes() {
            final Object ref = this.phpClassPrefix_;
            if (ref instanceof String) {
                final ByteString b = ByteString.copyFromUtf8((String)ref);
                return (ByteString)(this.phpClassPrefix_ = b);
            }
            return (ByteString)ref;
        }
        
        @Override
        public boolean hasPhpNamespace() {
            return (this.bitField0_ & 0x10000) != 0x0;
        }
        
        @Override
        public String getPhpNamespace() {
            final Object ref = this.phpNamespace_;
            if (ref instanceof String) {
                return (String)ref;
            }
            final ByteString bs = (ByteString)ref;
            final String s = bs.toStringUtf8();
            if (bs.isValidUtf8()) {
                this.phpNamespace_ = s;
            }
            return s;
        }
        
        @Override
        public ByteString getPhpNamespaceBytes() {
            final Object ref = this.phpNamespace_;
            if (ref instanceof String) {
                final ByteString b = ByteString.copyFromUtf8((String)ref);
                return (ByteString)(this.phpNamespace_ = b);
            }
            return (ByteString)ref;
        }
        
        @Override
        public boolean hasPhpMetadataNamespace() {
            return (this.bitField0_ & 0x20000) != 0x0;
        }
        
        @Override
        public String getPhpMetadataNamespace() {
            final Object ref = this.phpMetadataNamespace_;
            if (ref instanceof String) {
                return (String)ref;
            }
            final ByteString bs = (ByteString)ref;
            final String s = bs.toStringUtf8();
            if (bs.isValidUtf8()) {
                this.phpMetadataNamespace_ = s;
            }
            return s;
        }
        
        @Override
        public ByteString getPhpMetadataNamespaceBytes() {
            final Object ref = this.phpMetadataNamespace_;
            if (ref instanceof String) {
                final ByteString b = ByteString.copyFromUtf8((String)ref);
                return (ByteString)(this.phpMetadataNamespace_ = b);
            }
            return (ByteString)ref;
        }
        
        @Override
        public boolean hasRubyPackage() {
            return (this.bitField0_ & 0x40000) != 0x0;
        }
        
        @Override
        public String getRubyPackage() {
            final Object ref = this.rubyPackage_;
            if (ref instanceof String) {
                return (String)ref;
            }
            final ByteString bs = (ByteString)ref;
            final String s = bs.toStringUtf8();
            if (bs.isValidUtf8()) {
                this.rubyPackage_ = s;
            }
            return s;
        }
        
        @Override
        public ByteString getRubyPackageBytes() {
            final Object ref = this.rubyPackage_;
            if (ref instanceof String) {
                final ByteString b = ByteString.copyFromUtf8((String)ref);
                return (ByteString)(this.rubyPackage_ = b);
            }
            return (ByteString)ref;
        }
        
        @Override
        public boolean hasFeatures() {
            return (this.bitField0_ & 0x80000) != 0x0;
        }
        
        @Override
        public FeatureSet getFeatures() {
            return (this.features_ == null) ? FeatureSet.getDefaultInstance() : this.features_;
        }
        
        @Override
        public FeatureSetOrBuilder getFeaturesOrBuilder() {
            return (this.features_ == null) ? FeatureSet.getDefaultInstance() : this.features_;
        }
        
        @Override
        public List<UninterpretedOption> getUninterpretedOptionList() {
            return this.uninterpretedOption_;
        }
        
        @Override
        public List<? extends UninterpretedOptionOrBuilder> getUninterpretedOptionOrBuilderList() {
            return this.uninterpretedOption_;
        }
        
        @Override
        public int getUninterpretedOptionCount() {
            return this.uninterpretedOption_.size();
        }
        
        @Override
        public UninterpretedOption getUninterpretedOption(final int index) {
            return this.uninterpretedOption_.get(index);
        }
        
        @Override
        public UninterpretedOptionOrBuilder getUninterpretedOptionOrBuilder(final int index) {
            return this.uninterpretedOption_.get(index);
        }
        
        @Override
        public final boolean isInitialized() {
            final byte isInitialized = this.memoizedIsInitialized;
            if (isInitialized == 1) {
                return true;
            }
            if (isInitialized == 0) {
                return false;
            }
            if (this.hasFeatures() && !this.getFeatures().isInitialized()) {
                this.memoizedIsInitialized = 0;
                return false;
            }
            for (int i = 0; i < this.getUninterpretedOptionCount(); ++i) {
                if (!this.getUninterpretedOption(i).isInitialized()) {
                    this.memoizedIsInitialized = 0;
                    return false;
                }
            }
            if (!this.extensionsAreInitialized()) {
                this.memoizedIsInitialized = 0;
                return false;
            }
            this.memoizedIsInitialized = 1;
            return true;
        }
        
        @Override
        public void writeTo(final CodedOutputStream output) throws IOException {
            final ExtensionSerializer extensionWriter = this.newExtensionSerializer();
            if ((this.bitField0_ & 0x1) != 0x0) {
                GeneratedMessage.writeString(output, 1, this.javaPackage_);
            }
            if ((this.bitField0_ & 0x2) != 0x0) {
                GeneratedMessage.writeString(output, 8, this.javaOuterClassname_);
            }
            if ((this.bitField0_ & 0x20) != 0x0) {
                output.writeEnum(9, this.optimizeFor_);
            }
            if ((this.bitField0_ & 0x4) != 0x0) {
                output.writeBool(10, this.javaMultipleFiles_);
            }
            if ((this.bitField0_ & 0x40) != 0x0) {
                GeneratedMessage.writeString(output, 11, this.goPackage_);
            }
            if ((this.bitField0_ & 0x80) != 0x0) {
                output.writeBool(16, this.ccGenericServices_);
            }
            if ((this.bitField0_ & 0x100) != 0x0) {
                output.writeBool(17, this.javaGenericServices_);
            }
            if ((this.bitField0_ & 0x200) != 0x0) {
                output.writeBool(18, this.pyGenericServices_);
            }
            if ((this.bitField0_ & 0x8) != 0x0) {
                output.writeBool(20, this.javaGenerateEqualsAndHash_);
            }
            if ((this.bitField0_ & 0x400) != 0x0) {
                output.writeBool(23, this.deprecated_);
            }
            if ((this.bitField0_ & 0x10) != 0x0) {
                output.writeBool(27, this.javaStringCheckUtf8_);
            }
            if ((this.bitField0_ & 0x800) != 0x0) {
                output.writeBool(31, this.ccEnableArenas_);
            }
            if ((this.bitField0_ & 0x1000) != 0x0) {
                GeneratedMessage.writeString(output, 36, this.objcClassPrefix_);
            }
            if ((this.bitField0_ & 0x2000) != 0x0) {
                GeneratedMessage.writeString(output, 37, this.csharpNamespace_);
            }
            if ((this.bitField0_ & 0x4000) != 0x0) {
                GeneratedMessage.writeString(output, 39, this.swiftPrefix_);
            }
            if ((this.bitField0_ & 0x8000) != 0x0) {
                GeneratedMessage.writeString(output, 40, this.phpClassPrefix_);
            }
            if ((this.bitField0_ & 0x10000) != 0x0) {
                GeneratedMessage.writeString(output, 41, this.phpNamespace_);
            }
            if ((this.bitField0_ & 0x20000) != 0x0) {
                GeneratedMessage.writeString(output, 44, this.phpMetadataNamespace_);
            }
            if ((this.bitField0_ & 0x40000) != 0x0) {
                GeneratedMessage.writeString(output, 45, this.rubyPackage_);
            }
            if ((this.bitField0_ & 0x80000) != 0x0) {
                output.writeMessage(50, this.getFeatures());
            }
            for (int i = 0; i < this.uninterpretedOption_.size(); ++i) {
                output.writeMessage(999, this.uninterpretedOption_.get(i));
            }
            extensionWriter.writeUntil(536870912, output);
            this.getUnknownFields().writeTo(output);
        }
        
        @Override
        public int getSerializedSize() {
            int size = this.memoizedSize;
            if (size != -1) {
                return size;
            }
            size = 0;
            if ((this.bitField0_ & 0x1) != 0x0) {
                size += GeneratedMessage.computeStringSize(1, this.javaPackage_);
            }
            if ((this.bitField0_ & 0x2) != 0x0) {
                size += GeneratedMessage.computeStringSize(8, this.javaOuterClassname_);
            }
            if ((this.bitField0_ & 0x20) != 0x0) {
                size += CodedOutputStream.computeEnumSize(9, this.optimizeFor_);
            }
            if ((this.bitField0_ & 0x4) != 0x0) {
                size += CodedOutputStream.computeBoolSize(10, this.javaMultipleFiles_);
            }
            if ((this.bitField0_ & 0x40) != 0x0) {
                size += GeneratedMessage.computeStringSize(11, this.goPackage_);
            }
            if ((this.bitField0_ & 0x80) != 0x0) {
                size += CodedOutputStream.computeBoolSize(16, this.ccGenericServices_);
            }
            if ((this.bitField0_ & 0x100) != 0x0) {
                size += CodedOutputStream.computeBoolSize(17, this.javaGenericServices_);
            }
            if ((this.bitField0_ & 0x200) != 0x0) {
                size += CodedOutputStream.computeBoolSize(18, this.pyGenericServices_);
            }
            if ((this.bitField0_ & 0x8) != 0x0) {
                size += CodedOutputStream.computeBoolSize(20, this.javaGenerateEqualsAndHash_);
            }
            if ((this.bitField0_ & 0x400) != 0x0) {
                size += CodedOutputStream.computeBoolSize(23, this.deprecated_);
            }
            if ((this.bitField0_ & 0x10) != 0x0) {
                size += CodedOutputStream.computeBoolSize(27, this.javaStringCheckUtf8_);
            }
            if ((this.bitField0_ & 0x800) != 0x0) {
                size += CodedOutputStream.computeBoolSize(31, this.ccEnableArenas_);
            }
            if ((this.bitField0_ & 0x1000) != 0x0) {
                size += GeneratedMessage.computeStringSize(36, this.objcClassPrefix_);
            }
            if ((this.bitField0_ & 0x2000) != 0x0) {
                size += GeneratedMessage.computeStringSize(37, this.csharpNamespace_);
            }
            if ((this.bitField0_ & 0x4000) != 0x0) {
                size += GeneratedMessage.computeStringSize(39, this.swiftPrefix_);
            }
            if ((this.bitField0_ & 0x8000) != 0x0) {
                size += GeneratedMessage.computeStringSize(40, this.phpClassPrefix_);
            }
            if ((this.bitField0_ & 0x10000) != 0x0) {
                size += GeneratedMessage.computeStringSize(41, this.phpNamespace_);
            }
            if ((this.bitField0_ & 0x20000) != 0x0) {
                size += GeneratedMessage.computeStringSize(44, this.phpMetadataNamespace_);
            }
            if ((this.bitField0_ & 0x40000) != 0x0) {
                size += GeneratedMessage.computeStringSize(45, this.rubyPackage_);
            }
            if ((this.bitField0_ & 0x80000) != 0x0) {
                size += CodedOutputStream.computeMessageSize(50, this.getFeatures());
            }
            for (int i = 0; i < this.uninterpretedOption_.size(); ++i) {
                size += CodedOutputStream.computeMessageSize(999, this.uninterpretedOption_.get(i));
            }
            size += this.extensionsSerializedSize();
            size += this.getUnknownFields().getSerializedSize();
            return this.memoizedSize = size;
        }
        
        @Override
        public boolean equals(final Object obj) {
            if (obj == this) {
                return true;
            }
            if (!(obj instanceof FileOptions)) {
                return super.equals(obj);
            }
            final FileOptions other = (FileOptions)obj;
            return this.hasJavaPackage() == other.hasJavaPackage() && (!this.hasJavaPackage() || this.getJavaPackage().equals(other.getJavaPackage())) && this.hasJavaOuterClassname() == other.hasJavaOuterClassname() && (!this.hasJavaOuterClassname() || this.getJavaOuterClassname().equals(other.getJavaOuterClassname())) && this.hasJavaMultipleFiles() == other.hasJavaMultipleFiles() && (!this.hasJavaMultipleFiles() || this.getJavaMultipleFiles() == other.getJavaMultipleFiles()) && this.hasJavaGenerateEqualsAndHash() == other.hasJavaGenerateEqualsAndHash() && (!this.hasJavaGenerateEqualsAndHash() || this.getJavaGenerateEqualsAndHash() == other.getJavaGenerateEqualsAndHash()) && this.hasJavaStringCheckUtf8() == other.hasJavaStringCheckUtf8() && (!this.hasJavaStringCheckUtf8() || this.getJavaStringCheckUtf8() == other.getJavaStringCheckUtf8()) && this.hasOptimizeFor() == other.hasOptimizeFor() && (!this.hasOptimizeFor() || this.optimizeFor_ == other.optimizeFor_) && this.hasGoPackage() == other.hasGoPackage() && (!this.hasGoPackage() || this.getGoPackage().equals(other.getGoPackage())) && this.hasCcGenericServices() == other.hasCcGenericServices() && (!this.hasCcGenericServices() || this.getCcGenericServices() == other.getCcGenericServices()) && this.hasJavaGenericServices() == other.hasJavaGenericServices() && (!this.hasJavaGenericServices() || this.getJavaGenericServices() == other.getJavaGenericServices()) && this.hasPyGenericServices() == other.hasPyGenericServices() && (!this.hasPyGenericServices() || this.getPyGenericServices() == other.getPyGenericServices()) && this.hasDeprecated() == other.hasDeprecated() && (!this.hasDeprecated() || this.getDeprecated() == other.getDeprecated()) && this.hasCcEnableArenas() == other.hasCcEnableArenas() && (!this.hasCcEnableArenas() || this.getCcEnableArenas() == other.getCcEnableArenas()) && this.hasObjcClassPrefix() == other.hasObjcClassPrefix() && (!this.hasObjcClassPrefix() || this.getObjcClassPrefix().equals(other.getObjcClassPrefix())) && this.hasCsharpNamespace() == other.hasCsharpNamespace() && (!this.hasCsharpNamespace() || this.getCsharpNamespace().equals(other.getCsharpNamespace())) && this.hasSwiftPrefix() == other.hasSwiftPrefix() && (!this.hasSwiftPrefix() || this.getSwiftPrefix().equals(other.getSwiftPrefix())) && this.hasPhpClassPrefix() == other.hasPhpClassPrefix() && (!this.hasPhpClassPrefix() || this.getPhpClassPrefix().equals(other.getPhpClassPrefix())) && this.hasPhpNamespace() == other.hasPhpNamespace() && (!this.hasPhpNamespace() || this.getPhpNamespace().equals(other.getPhpNamespace())) && this.hasPhpMetadataNamespace() == other.hasPhpMetadataNamespace() && (!this.hasPhpMetadataNamespace() || this.getPhpMetadataNamespace().equals(other.getPhpMetadataNamespace())) && this.hasRubyPackage() == other.hasRubyPackage() && (!this.hasRubyPackage() || this.getRubyPackage().equals(other.getRubyPackage())) && this.hasFeatures() == other.hasFeatures() && (!this.hasFeatures() || this.getFeatures().equals(other.getFeatures())) && this.getUninterpretedOptionList().equals(other.getUninterpretedOptionList()) && this.getUnknownFields().equals(other.getUnknownFields()) && this.getExtensionFields().equals(other.getExtensionFields());
        }
        
        @Override
        public int hashCode() {
            if (this.memoizedHashCode != 0) {
                return this.memoizedHashCode;
            }
            int hash = 41;
            hash = 19 * hash + getDescriptor().hashCode();
            if (this.hasJavaPackage()) {
                hash = 37 * hash + 1;
                hash = 53 * hash + this.getJavaPackage().hashCode();
            }
            if (this.hasJavaOuterClassname()) {
                hash = 37 * hash + 8;
                hash = 53 * hash + this.getJavaOuterClassname().hashCode();
            }
            if (this.hasJavaMultipleFiles()) {
                hash = 37 * hash + 10;
                hash = 53 * hash + Internal.hashBoolean(this.getJavaMultipleFiles());
            }
            if (this.hasJavaGenerateEqualsAndHash()) {
                hash = 37 * hash + 20;
                hash = 53 * hash + Internal.hashBoolean(this.getJavaGenerateEqualsAndHash());
            }
            if (this.hasJavaStringCheckUtf8()) {
                hash = 37 * hash + 27;
                hash = 53 * hash + Internal.hashBoolean(this.getJavaStringCheckUtf8());
            }
            if (this.hasOptimizeFor()) {
                hash = 37 * hash + 9;
                hash = 53 * hash + this.optimizeFor_;
            }
            if (this.hasGoPackage()) {
                hash = 37 * hash + 11;
                hash = 53 * hash + this.getGoPackage().hashCode();
            }
            if (this.hasCcGenericServices()) {
                hash = 37 * hash + 16;
                hash = 53 * hash + Internal.hashBoolean(this.getCcGenericServices());
            }
            if (this.hasJavaGenericServices()) {
                hash = 37 * hash + 17;
                hash = 53 * hash + Internal.hashBoolean(this.getJavaGenericServices());
            }
            if (this.hasPyGenericServices()) {
                hash = 37 * hash + 18;
                hash = 53 * hash + Internal.hashBoolean(this.getPyGenericServices());
            }
            if (this.hasDeprecated()) {
                hash = 37 * hash + 23;
                hash = 53 * hash + Internal.hashBoolean(this.getDeprecated());
            }
            if (this.hasCcEnableArenas()) {
                hash = 37 * hash + 31;
                hash = 53 * hash + Internal.hashBoolean(this.getCcEnableArenas());
            }
            if (this.hasObjcClassPrefix()) {
                hash = 37 * hash + 36;
                hash = 53 * hash + this.getObjcClassPrefix().hashCode();
            }
            if (this.hasCsharpNamespace()) {
                hash = 37 * hash + 37;
                hash = 53 * hash + this.getCsharpNamespace().hashCode();
            }
            if (this.hasSwiftPrefix()) {
                hash = 37 * hash + 39;
                hash = 53 * hash + this.getSwiftPrefix().hashCode();
            }
            if (this.hasPhpClassPrefix()) {
                hash = 37 * hash + 40;
                hash = 53 * hash + this.getPhpClassPrefix().hashCode();
            }
            if (this.hasPhpNamespace()) {
                hash = 37 * hash + 41;
                hash = 53 * hash + this.getPhpNamespace().hashCode();
            }
            if (this.hasPhpMetadataNamespace()) {
                hash = 37 * hash + 44;
                hash = 53 * hash + this.getPhpMetadataNamespace().hashCode();
            }
            if (this.hasRubyPackage()) {
                hash = 37 * hash + 45;
                hash = 53 * hash + this.getRubyPackage().hashCode();
            }
            if (this.hasFeatures()) {
                hash = 37 * hash + 50;
                hash = 53 * hash + this.getFeatures().hashCode();
            }
            if (this.getUninterpretedOptionCount() > 0) {
                hash = 37 * hash + 999;
                hash = 53 * hash + this.getUninterpretedOptionList().hashCode();
            }
            hash = AbstractMessage.hashFields(hash, this.getExtensionFields());
            hash = 29 * hash + this.getUnknownFields().hashCode();
            return this.memoizedHashCode = hash;
        }
        
        public static FileOptions parseFrom(final ByteBuffer data) throws InvalidProtocolBufferException {
            return FileOptions.PARSER.parseFrom(data);
        }
        
        public static FileOptions parseFrom(final ByteBuffer data, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
            return FileOptions.PARSER.parseFrom(data, extensionRegistry);
        }
        
        public static FileOptions parseFrom(final ByteString data) throws InvalidProtocolBufferException {
            return FileOptions.PARSER.parseFrom(data);
        }
        
        public static FileOptions parseFrom(final ByteString data, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
            return FileOptions.PARSER.parseFrom(data, extensionRegistry);
        }
        
        public static FileOptions parseFrom(final byte[] data) throws InvalidProtocolBufferException {
            return FileOptions.PARSER.parseFrom(data);
        }
        
        public static FileOptions parseFrom(final byte[] data, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
            return FileOptions.PARSER.parseFrom(data, extensionRegistry);
        }
        
        public static FileOptions parseFrom(final InputStream input) throws IOException {
            return GeneratedMessage.parseWithIOException(FileOptions.PARSER, input);
        }
        
        public static FileOptions parseFrom(final InputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
            return GeneratedMessage.parseWithIOException(FileOptions.PARSER, input, extensionRegistry);
        }
        
        public static FileOptions parseDelimitedFrom(final InputStream input) throws IOException {
            return GeneratedMessage.parseDelimitedWithIOException(FileOptions.PARSER, input);
        }
        
        public static FileOptions parseDelimitedFrom(final InputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
            return GeneratedMessage.parseDelimitedWithIOException(FileOptions.PARSER, input, extensionRegistry);
        }
        
        public static FileOptions parseFrom(final CodedInputStream input) throws IOException {
            return GeneratedMessage.parseWithIOException(FileOptions.PARSER, input);
        }
        
        public static FileOptions parseFrom(final CodedInputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
            return GeneratedMessage.parseWithIOException(FileOptions.PARSER, input, extensionRegistry);
        }
        
        @Override
        public Builder newBuilderForType() {
            return newBuilder();
        }
        
        public static Builder newBuilder() {
            return FileOptions.DEFAULT_INSTANCE.toBuilder();
        }
        
        public static Builder newBuilder(final FileOptions prototype) {
            return FileOptions.DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
        }
        
        @Override
        public Builder toBuilder() {
            return (this == FileOptions.DEFAULT_INSTANCE) ? new Builder() : new Builder().mergeFrom(this);
        }
        
        @Override
        protected Builder newBuilderForType(final BuilderParent parent) {
            final Builder builder = new Builder(parent);
            return builder;
        }
        
        public static FileOptions getDefaultInstance() {
            return FileOptions.DEFAULT_INSTANCE;
        }
        
        public static Parser<FileOptions> parser() {
            return FileOptions.PARSER;
        }
        
        @Override
        public Parser<FileOptions> getParserForType() {
            return FileOptions.PARSER;
        }
        
        @Override
        public FileOptions getDefaultInstanceForType() {
            return FileOptions.DEFAULT_INSTANCE;
        }
        
        static {
            RuntimeVersion.validateProtobufGencodeVersion(RuntimeVersion.RuntimeDomain.PUBLIC, 4, 33, 0, "", "FileOptions");
            DEFAULT_INSTANCE = new FileOptions();
            PARSER = new AbstractParser<FileOptions>() {
                @Override
                public FileOptions parsePartialFrom(final CodedInputStream input, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
                    final Builder builder = FileOptions.newBuilder();
                    try {
                        builder.mergeFrom(input, extensionRegistry);
                    }
                    catch (final InvalidProtocolBufferException e) {
                        throw e.setUnfinishedMessage(builder.buildPartial());
                    }
                    catch (final UninitializedMessageException e2) {
                        throw e2.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
                    }
                    catch (final IOException e3) {
                        throw new InvalidProtocolBufferException(e3).setUnfinishedMessage(builder.buildPartial());
                    }
                    return builder.buildPartial();
                }
            };
        }
        
        public enum OptimizeMode implements ProtocolMessageEnum
        {
            SPEED(1), 
            CODE_SIZE(2), 
            LITE_RUNTIME(3);
            
            public static final int SPEED_VALUE = 1;
            public static final int CODE_SIZE_VALUE = 2;
            public static final int LITE_RUNTIME_VALUE = 3;
            private static final Internal.EnumLiteMap<OptimizeMode> internalValueMap;
            private static final OptimizeMode[] VALUES;
            private final int value;
            
            @Override
            public final int getNumber() {
                return this.value;
            }
            
            @Deprecated
            public static OptimizeMode valueOf(final int value) {
                return forNumber(value);
            }
            
            public static OptimizeMode forNumber(final int value) {
                switch (value) {
                    case 1: {
                        return OptimizeMode.SPEED;
                    }
                    case 2: {
                        return OptimizeMode.CODE_SIZE;
                    }
                    case 3: {
                        return OptimizeMode.LITE_RUNTIME;
                    }
                    default: {
                        return null;
                    }
                }
            }
            
            public static Internal.EnumLiteMap<OptimizeMode> internalGetValueMap() {
                return OptimizeMode.internalValueMap;
            }
            
            @Override
            public final Descriptors.EnumValueDescriptor getValueDescriptor() {
                return getDescriptor().getValues().get(this.ordinal());
            }
            
            @Override
            public final Descriptors.EnumDescriptor getDescriptorForType() {
                return getDescriptor();
            }
            
            public static Descriptors.EnumDescriptor getDescriptor() {
                return FileOptions.getDescriptor().getEnumTypes().get(0);
            }
            
            public static OptimizeMode valueOf(final Descriptors.EnumValueDescriptor desc) {
                if (desc.getType() != getDescriptor()) {
                    throw new IllegalArgumentException("EnumValueDescriptor is not for this type.");
                }
                return OptimizeMode.VALUES[desc.getIndex()];
            }
            
            private OptimizeMode(final int value) {
                this.value = value;
            }
            
            static {
                RuntimeVersion.validateProtobufGencodeVersion(RuntimeVersion.RuntimeDomain.PUBLIC, 4, 33, 0, "", "OptimizeMode");
                internalValueMap = new Internal.EnumLiteMap<OptimizeMode>() {
                    @Override
                    public OptimizeMode findValueByNumber(final int number) {
                        return OptimizeMode.forNumber(number);
                    }
                };
                VALUES = values();
            }
        }
        
        public static final class Builder extends ExtendableBuilder<FileOptions, Builder> implements FileOptionsOrBuilder
        {
            private int bitField0_;
            private Object javaPackage_;
            private Object javaOuterClassname_;
            private boolean javaMultipleFiles_;
            private boolean javaGenerateEqualsAndHash_;
            private boolean javaStringCheckUtf8_;
            private int optimizeFor_;
            private Object goPackage_;
            private boolean ccGenericServices_;
            private boolean javaGenericServices_;
            private boolean pyGenericServices_;
            private boolean deprecated_;
            private boolean ccEnableArenas_;
            private Object objcClassPrefix_;
            private Object csharpNamespace_;
            private Object swiftPrefix_;
            private Object phpClassPrefix_;
            private Object phpNamespace_;
            private Object phpMetadataNamespace_;
            private Object rubyPackage_;
            private FeatureSet features_;
            private SingleFieldBuilder<FeatureSet, FeatureSet.Builder, FeatureSetOrBuilder> featuresBuilder_;
            private List<UninterpretedOption> uninterpretedOption_;
            private RepeatedFieldBuilder<UninterpretedOption, UninterpretedOption.Builder, UninterpretedOptionOrBuilder> uninterpretedOptionBuilder_;
            
            public static final Descriptors.Descriptor getDescriptor() {
                return DescriptorProtos.internal_static_google_protobuf_FileOptions_descriptor;
            }
            
            @Override
            protected FieldAccessorTable internalGetFieldAccessorTable() {
                return DescriptorProtos.internal_static_google_protobuf_FileOptions_fieldAccessorTable.ensureFieldAccessorsInitialized(FileOptions.class, Builder.class);
            }
            
            private Builder() {
                this.javaPackage_ = "";
                this.javaOuterClassname_ = "";
                this.optimizeFor_ = 1;
                this.goPackage_ = "";
                this.ccEnableArenas_ = true;
                this.objcClassPrefix_ = "";
                this.csharpNamespace_ = "";
                this.swiftPrefix_ = "";
                this.phpClassPrefix_ = "";
                this.phpNamespace_ = "";
                this.phpMetadataNamespace_ = "";
                this.rubyPackage_ = "";
                this.uninterpretedOption_ = Collections.emptyList();
                this.maybeForceBuilderInitialization();
            }
            
            private Builder(final BuilderParent parent) {
                super(parent);
                this.javaPackage_ = "";
                this.javaOuterClassname_ = "";
                this.optimizeFor_ = 1;
                this.goPackage_ = "";
                this.ccEnableArenas_ = true;
                this.objcClassPrefix_ = "";
                this.csharpNamespace_ = "";
                this.swiftPrefix_ = "";
                this.phpClassPrefix_ = "";
                this.phpNamespace_ = "";
                this.phpMetadataNamespace_ = "";
                this.rubyPackage_ = "";
                this.uninterpretedOption_ = Collections.emptyList();
                this.maybeForceBuilderInitialization();
            }
            
            private void maybeForceBuilderInitialization() {
                if (GeneratedMessage.alwaysUseFieldBuilders) {
                    this.internalGetFeaturesFieldBuilder();
                    this.internalGetUninterpretedOptionFieldBuilder();
                }
            }
            
            @Override
            public Builder clear() {
                super.clear();
                this.bitField0_ = 0;
                this.javaPackage_ = "";
                this.javaOuterClassname_ = "";
                this.javaMultipleFiles_ = false;
                this.javaGenerateEqualsAndHash_ = false;
                this.javaStringCheckUtf8_ = false;
                this.optimizeFor_ = 1;
                this.goPackage_ = "";
                this.ccGenericServices_ = false;
                this.javaGenericServices_ = false;
                this.pyGenericServices_ = false;
                this.deprecated_ = false;
                this.ccEnableArenas_ = true;
                this.objcClassPrefix_ = "";
                this.csharpNamespace_ = "";
                this.swiftPrefix_ = "";
                this.phpClassPrefix_ = "";
                this.phpNamespace_ = "";
                this.phpMetadataNamespace_ = "";
                this.rubyPackage_ = "";
                this.features_ = null;
                if (this.featuresBuilder_ != null) {
                    this.featuresBuilder_.dispose();
                    this.featuresBuilder_ = null;
                }
                if (this.uninterpretedOptionBuilder_ == null) {
                    this.uninterpretedOption_ = Collections.emptyList();
                }
                else {
                    this.uninterpretedOption_ = null;
                    this.uninterpretedOptionBuilder_.clear();
                }
                this.bitField0_ &= 0xFFEFFFFF;
                return this;
            }
            
            @Override
            public Descriptors.Descriptor getDescriptorForType() {
                return DescriptorProtos.internal_static_google_protobuf_FileOptions_descriptor;
            }
            
            @Override
            public FileOptions getDefaultInstanceForType() {
                return FileOptions.getDefaultInstance();
            }
            
            @Override
            public FileOptions build() {
                final FileOptions result = this.buildPartial();
                if (!result.isInitialized()) {
                    throw AbstractMessage.Builder.newUninitializedMessageException(result);
                }
                return result;
            }
            
            @Override
            public FileOptions buildPartial() {
                final FileOptions result = new FileOptions((ExtendableBuilder)this);
                this.buildPartialRepeatedFields(result);
                if (this.bitField0_ != 0) {
                    this.buildPartial0(result);
                }
                this.onBuilt();
                return result;
            }
            
            private void buildPartialRepeatedFields(final FileOptions result) {
                if (this.uninterpretedOptionBuilder_ == null) {
                    if ((this.bitField0_ & 0x100000) != 0x0) {
                        this.uninterpretedOption_ = Collections.unmodifiableList((List<? extends UninterpretedOption>)this.uninterpretedOption_);
                        this.bitField0_ &= 0xFFEFFFFF;
                    }
                    result.uninterpretedOption_ = this.uninterpretedOption_;
                }
                else {
                    result.uninterpretedOption_ = this.uninterpretedOptionBuilder_.build();
                }
            }
            
            private void buildPartial0(final FileOptions result) {
                final int from_bitField0_ = this.bitField0_;
                int to_bitField0_ = 0;
                if ((from_bitField0_ & 0x1) != 0x0) {
                    result.javaPackage_ = this.javaPackage_;
                    to_bitField0_ |= 0x1;
                }
                if ((from_bitField0_ & 0x2) != 0x0) {
                    result.javaOuterClassname_ = this.javaOuterClassname_;
                    to_bitField0_ |= 0x2;
                }
                if ((from_bitField0_ & 0x4) != 0x0) {
                    result.javaMultipleFiles_ = this.javaMultipleFiles_;
                    to_bitField0_ |= 0x4;
                }
                if ((from_bitField0_ & 0x8) != 0x0) {
                    result.javaGenerateEqualsAndHash_ = this.javaGenerateEqualsAndHash_;
                    to_bitField0_ |= 0x8;
                }
                if ((from_bitField0_ & 0x10) != 0x0) {
                    result.javaStringCheckUtf8_ = this.javaStringCheckUtf8_;
                    to_bitField0_ |= 0x10;
                }
                if ((from_bitField0_ & 0x20) != 0x0) {
                    result.optimizeFor_ = this.optimizeFor_;
                    to_bitField0_ |= 0x20;
                }
                if ((from_bitField0_ & 0x40) != 0x0) {
                    result.goPackage_ = this.goPackage_;
                    to_bitField0_ |= 0x40;
                }
                if ((from_bitField0_ & 0x80) != 0x0) {
                    result.ccGenericServices_ = this.ccGenericServices_;
                    to_bitField0_ |= 0x80;
                }
                if ((from_bitField0_ & 0x100) != 0x0) {
                    result.javaGenericServices_ = this.javaGenericServices_;
                    to_bitField0_ |= 0x100;
                }
                if ((from_bitField0_ & 0x200) != 0x0) {
                    result.pyGenericServices_ = this.pyGenericServices_;
                    to_bitField0_ |= 0x200;
                }
                if ((from_bitField0_ & 0x400) != 0x0) {
                    result.deprecated_ = this.deprecated_;
                    to_bitField0_ |= 0x400;
                }
                if ((from_bitField0_ & 0x800) != 0x0) {
                    result.ccEnableArenas_ = this.ccEnableArenas_;
                    to_bitField0_ |= 0x800;
                }
                if ((from_bitField0_ & 0x1000) != 0x0) {
                    result.objcClassPrefix_ = this.objcClassPrefix_;
                    to_bitField0_ |= 0x1000;
                }
                if ((from_bitField0_ & 0x2000) != 0x0) {
                    result.csharpNamespace_ = this.csharpNamespace_;
                    to_bitField0_ |= 0x2000;
                }
                if ((from_bitField0_ & 0x4000) != 0x0) {
                    result.swiftPrefix_ = this.swiftPrefix_;
                    to_bitField0_ |= 0x4000;
                }
                if ((from_bitField0_ & 0x8000) != 0x0) {
                    result.phpClassPrefix_ = this.phpClassPrefix_;
                    to_bitField0_ |= 0x8000;
                }
                if ((from_bitField0_ & 0x10000) != 0x0) {
                    result.phpNamespace_ = this.phpNamespace_;
                    to_bitField0_ |= 0x10000;
                }
                if ((from_bitField0_ & 0x20000) != 0x0) {
                    result.phpMetadataNamespace_ = this.phpMetadataNamespace_;
                    to_bitField0_ |= 0x20000;
                }
                if ((from_bitField0_ & 0x40000) != 0x0) {
                    result.rubyPackage_ = this.rubyPackage_;
                    to_bitField0_ |= 0x40000;
                }
                if ((from_bitField0_ & 0x80000) != 0x0) {
                    result.features_ = ((this.featuresBuilder_ == null) ? this.features_ : this.featuresBuilder_.build());
                    to_bitField0_ |= 0x80000;
                }
                result.bitField0_ |= to_bitField0_;
            }
            
            public <Type> Builder setExtension(final GeneratedExtension<FileOptions, Type> extension, final Type value) {
                return super.setExtension(extension, value);
            }
            
            public <Type> Builder setExtension(final GeneratedExtension<FileOptions, List<Type>> extension, final int index, final Type value) {
                return super.setExtension(extension, index, value);
            }
            
            public <Type> Builder addExtension(final GeneratedExtension<FileOptions, List<Type>> extension, final Type value) {
                return super.addExtension(extension, value);
            }
            
            public <Type> Builder clearExtension(final GeneratedExtension<FileOptions, Type> extension) {
                return super.clearExtension(extension);
            }
            
            @Override
            public Builder mergeFrom(final Message other) {
                if (other instanceof FileOptions) {
                    return this.mergeFrom((FileOptions)other);
                }
                super.mergeFrom(other);
                return this;
            }
            
            public Builder mergeFrom(final FileOptions other) {
                if (other == FileOptions.getDefaultInstance()) {
                    return this;
                }
                if (other.hasJavaPackage()) {
                    this.javaPackage_ = other.javaPackage_;
                    this.bitField0_ |= 0x1;
                    this.onChanged();
                }
                if (other.hasJavaOuterClassname()) {
                    this.javaOuterClassname_ = other.javaOuterClassname_;
                    this.bitField0_ |= 0x2;
                    this.onChanged();
                }
                if (other.hasJavaMultipleFiles()) {
                    this.setJavaMultipleFiles(other.getJavaMultipleFiles());
                }
                if (other.hasJavaGenerateEqualsAndHash()) {
                    this.setJavaGenerateEqualsAndHash(other.getJavaGenerateEqualsAndHash());
                }
                if (other.hasJavaStringCheckUtf8()) {
                    this.setJavaStringCheckUtf8(other.getJavaStringCheckUtf8());
                }
                if (other.hasOptimizeFor()) {
                    this.setOptimizeFor(other.getOptimizeFor());
                }
                if (other.hasGoPackage()) {
                    this.goPackage_ = other.goPackage_;
                    this.bitField0_ |= 0x40;
                    this.onChanged();
                }
                if (other.hasCcGenericServices()) {
                    this.setCcGenericServices(other.getCcGenericServices());
                }
                if (other.hasJavaGenericServices()) {
                    this.setJavaGenericServices(other.getJavaGenericServices());
                }
                if (other.hasPyGenericServices()) {
                    this.setPyGenericServices(other.getPyGenericServices());
                }
                if (other.hasDeprecated()) {
                    this.setDeprecated(other.getDeprecated());
                }
                if (other.hasCcEnableArenas()) {
                    this.setCcEnableArenas(other.getCcEnableArenas());
                }
                if (other.hasObjcClassPrefix()) {
                    this.objcClassPrefix_ = other.objcClassPrefix_;
                    this.bitField0_ |= 0x1000;
                    this.onChanged();
                }
                if (other.hasCsharpNamespace()) {
                    this.csharpNamespace_ = other.csharpNamespace_;
                    this.bitField0_ |= 0x2000;
                    this.onChanged();
                }
                if (other.hasSwiftPrefix()) {
                    this.swiftPrefix_ = other.swiftPrefix_;
                    this.bitField0_ |= 0x4000;
                    this.onChanged();
                }
                if (other.hasPhpClassPrefix()) {
                    this.phpClassPrefix_ = other.phpClassPrefix_;
                    this.bitField0_ |= 0x8000;
                    this.onChanged();
                }
                if (other.hasPhpNamespace()) {
                    this.phpNamespace_ = other.phpNamespace_;
                    this.bitField0_ |= 0x10000;
                    this.onChanged();
                }
                if (other.hasPhpMetadataNamespace()) {
                    this.phpMetadataNamespace_ = other.phpMetadataNamespace_;
                    this.bitField0_ |= 0x20000;
                    this.onChanged();
                }
                if (other.hasRubyPackage()) {
                    this.rubyPackage_ = other.rubyPackage_;
                    this.bitField0_ |= 0x40000;
                    this.onChanged();
                }
                if (other.hasFeatures()) {
                    this.mergeFeatures(other.getFeatures());
                }
                if (this.uninterpretedOptionBuilder_ == null) {
                    if (!other.uninterpretedOption_.isEmpty()) {
                        if (this.uninterpretedOption_.isEmpty()) {
                            this.uninterpretedOption_ = other.uninterpretedOption_;
                            this.bitField0_ &= 0xFFEFFFFF;
                        }
                        else {
                            this.ensureUninterpretedOptionIsMutable();
                            this.uninterpretedOption_.addAll(other.uninterpretedOption_);
                        }
                        this.onChanged();
                    }
                }
                else if (!other.uninterpretedOption_.isEmpty()) {
                    if (this.uninterpretedOptionBuilder_.isEmpty()) {
                        this.uninterpretedOptionBuilder_.dispose();
                        this.uninterpretedOptionBuilder_ = null;
                        this.uninterpretedOption_ = other.uninterpretedOption_;
                        this.bitField0_ &= 0xFFEFFFFF;
                        this.uninterpretedOptionBuilder_ = (GeneratedMessage.alwaysUseFieldBuilders ? this.internalGetUninterpretedOptionFieldBuilder() : null);
                    }
                    else {
                        this.uninterpretedOptionBuilder_.addAllMessages(other.uninterpretedOption_);
                    }
                }
                this.mergeExtensionFields(other);
                this.mergeUnknownFields(other.getUnknownFields());
                this.onChanged();
                return this;
            }
            
            @Override
            public final boolean isInitialized() {
                if (this.hasFeatures() && !this.getFeatures().isInitialized()) {
                    return false;
                }
                for (int i = 0; i < this.getUninterpretedOptionCount(); ++i) {
                    if (!this.getUninterpretedOption(i).isInitialized()) {
                        return false;
                    }
                }
                return this.extensionsAreInitialized();
            }
            
            @Override
            public Builder mergeFrom(final CodedInputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
                if (extensionRegistry == null) {
                    throw new NullPointerException();
                }
                try {
                    boolean done = false;
                    while (!done) {
                        final int tag = input.readTag();
                        switch (tag) {
                            case 0: {
                                done = true;
                                continue;
                            }
                            case 10: {
                                this.javaPackage_ = input.readBytes();
                                this.bitField0_ |= 0x1;
                                continue;
                            }
                            case 66: {
                                this.javaOuterClassname_ = input.readBytes();
                                this.bitField0_ |= 0x2;
                                continue;
                            }
                            case 72: {
                                final int tmpRaw = input.readEnum();
                                final OptimizeMode tmpValue = OptimizeMode.forNumber(tmpRaw);
                                if (tmpValue == null) {
                                    this.mergeUnknownVarintField(9, tmpRaw);
                                    continue;
                                }
                                this.optimizeFor_ = tmpRaw;
                                this.bitField0_ |= 0x20;
                                continue;
                            }
                            case 80: {
                                this.javaMultipleFiles_ = input.readBool();
                                this.bitField0_ |= 0x4;
                                continue;
                            }
                            case 90: {
                                this.goPackage_ = input.readBytes();
                                this.bitField0_ |= 0x40;
                                continue;
                            }
                            case 128: {
                                this.ccGenericServices_ = input.readBool();
                                this.bitField0_ |= 0x80;
                                continue;
                            }
                            case 136: {
                                this.javaGenericServices_ = input.readBool();
                                this.bitField0_ |= 0x100;
                                continue;
                            }
                            case 144: {
                                this.pyGenericServices_ = input.readBool();
                                this.bitField0_ |= 0x200;
                                continue;
                            }
                            case 160: {
                                this.javaGenerateEqualsAndHash_ = input.readBool();
                                this.bitField0_ |= 0x8;
                                continue;
                            }
                            case 184: {
                                this.deprecated_ = input.readBool();
                                this.bitField0_ |= 0x400;
                                continue;
                            }
                            case 216: {
                                this.javaStringCheckUtf8_ = input.readBool();
                                this.bitField0_ |= 0x10;
                                continue;
                            }
                            case 248: {
                                this.ccEnableArenas_ = input.readBool();
                                this.bitField0_ |= 0x800;
                                continue;
                            }
                            case 290: {
                                this.objcClassPrefix_ = input.readBytes();
                                this.bitField0_ |= 0x1000;
                                continue;
                            }
                            case 298: {
                                this.csharpNamespace_ = input.readBytes();
                                this.bitField0_ |= 0x2000;
                                continue;
                            }
                            case 314: {
                                this.swiftPrefix_ = input.readBytes();
                                this.bitField0_ |= 0x4000;
                                continue;
                            }
                            case 322: {
                                this.phpClassPrefix_ = input.readBytes();
                                this.bitField0_ |= 0x8000;
                                continue;
                            }
                            case 330: {
                                this.phpNamespace_ = input.readBytes();
                                this.bitField0_ |= 0x10000;
                                continue;
                            }
                            case 354: {
                                this.phpMetadataNamespace_ = input.readBytes();
                                this.bitField0_ |= 0x20000;
                                continue;
                            }
                            case 362: {
                                this.rubyPackage_ = input.readBytes();
                                this.bitField0_ |= 0x40000;
                                continue;
                            }
                            case 402: {
                                input.readMessage(this.internalGetFeaturesFieldBuilder().getBuilder(), extensionRegistry);
                                this.bitField0_ |= 0x80000;
                                continue;
                            }
                            case 7994: {
                                final UninterpretedOption m = input.readMessage(UninterpretedOption.parser(), extensionRegistry);
                                if (this.uninterpretedOptionBuilder_ == null) {
                                    this.ensureUninterpretedOptionIsMutable();
                                    this.uninterpretedOption_.add(m);
                                    continue;
                                }
                                this.uninterpretedOptionBuilder_.addMessage(m);
                                continue;
                            }
                            default: {
                                if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                                    done = true;
                                    continue;
                                }
                                continue;
                            }
                        }
                    }
                }
                catch (final InvalidProtocolBufferException e) {
                    throw e.unwrapIOException();
                }
                finally {
                    this.onChanged();
                }
                return this;
            }
            
            @Override
            public boolean hasJavaPackage() {
                return (this.bitField0_ & 0x1) != 0x0;
            }
            
            @Override
            public String getJavaPackage() {
                final Object ref = this.javaPackage_;
                if (!(ref instanceof String)) {
                    final ByteString bs = (ByteString)ref;
                    final String s = bs.toStringUtf8();
                    if (bs.isValidUtf8()) {
                        this.javaPackage_ = s;
                    }
                    return s;
                }
                return (String)ref;
            }
            
            @Override
            public ByteString getJavaPackageBytes() {
                final Object ref = this.javaPackage_;
                if (ref instanceof String) {
                    final ByteString b = ByteString.copyFromUtf8((String)ref);
                    return (ByteString)(this.javaPackage_ = b);
                }
                return (ByteString)ref;
            }
            
            public Builder setJavaPackage(final String value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                this.javaPackage_ = value;
                this.bitField0_ |= 0x1;
                this.onChanged();
                return this;
            }
            
            public Builder clearJavaPackage() {
                this.javaPackage_ = FileOptions.getDefaultInstance().getJavaPackage();
                this.bitField0_ &= 0xFFFFFFFE;
                this.onChanged();
                return this;
            }
            
            public Builder setJavaPackageBytes(final ByteString value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                this.javaPackage_ = value;
                this.bitField0_ |= 0x1;
                this.onChanged();
                return this;
            }
            
            @Override
            public boolean hasJavaOuterClassname() {
                return (this.bitField0_ & 0x2) != 0x0;
            }
            
            @Override
            public String getJavaOuterClassname() {
                final Object ref = this.javaOuterClassname_;
                if (!(ref instanceof String)) {
                    final ByteString bs = (ByteString)ref;
                    final String s = bs.toStringUtf8();
                    if (bs.isValidUtf8()) {
                        this.javaOuterClassname_ = s;
                    }
                    return s;
                }
                return (String)ref;
            }
            
            @Override
            public ByteString getJavaOuterClassnameBytes() {
                final Object ref = this.javaOuterClassname_;
                if (ref instanceof String) {
                    final ByteString b = ByteString.copyFromUtf8((String)ref);
                    return (ByteString)(this.javaOuterClassname_ = b);
                }
                return (ByteString)ref;
            }
            
            public Builder setJavaOuterClassname(final String value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                this.javaOuterClassname_ = value;
                this.bitField0_ |= 0x2;
                this.onChanged();
                return this;
            }
            
            public Builder clearJavaOuterClassname() {
                this.javaOuterClassname_ = FileOptions.getDefaultInstance().getJavaOuterClassname();
                this.bitField0_ &= 0xFFFFFFFD;
                this.onChanged();
                return this;
            }
            
            public Builder setJavaOuterClassnameBytes(final ByteString value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                this.javaOuterClassname_ = value;
                this.bitField0_ |= 0x2;
                this.onChanged();
                return this;
            }
            
            @Override
            public boolean hasJavaMultipleFiles() {
                return (this.bitField0_ & 0x4) != 0x0;
            }
            
            @Override
            public boolean getJavaMultipleFiles() {
                return this.javaMultipleFiles_;
            }
            
            public Builder setJavaMultipleFiles(final boolean value) {
                this.javaMultipleFiles_ = value;
                this.bitField0_ |= 0x4;
                this.onChanged();
                return this;
            }
            
            public Builder clearJavaMultipleFiles() {
                this.bitField0_ &= 0xFFFFFFFB;
                this.javaMultipleFiles_ = false;
                this.onChanged();
                return this;
            }
            
            @Deprecated
            @Override
            public boolean hasJavaGenerateEqualsAndHash() {
                return (this.bitField0_ & 0x8) != 0x0;
            }
            
            @Deprecated
            @Override
            public boolean getJavaGenerateEqualsAndHash() {
                return this.javaGenerateEqualsAndHash_;
            }
            
            @Deprecated
            public Builder setJavaGenerateEqualsAndHash(final boolean value) {
                this.javaGenerateEqualsAndHash_ = value;
                this.bitField0_ |= 0x8;
                this.onChanged();
                return this;
            }
            
            @Deprecated
            public Builder clearJavaGenerateEqualsAndHash() {
                this.bitField0_ &= 0xFFFFFFF7;
                this.javaGenerateEqualsAndHash_ = false;
                this.onChanged();
                return this;
            }
            
            @Override
            public boolean hasJavaStringCheckUtf8() {
                return (this.bitField0_ & 0x10) != 0x0;
            }
            
            @Override
            public boolean getJavaStringCheckUtf8() {
                return this.javaStringCheckUtf8_;
            }
            
            public Builder setJavaStringCheckUtf8(final boolean value) {
                this.javaStringCheckUtf8_ = value;
                this.bitField0_ |= 0x10;
                this.onChanged();
                return this;
            }
            
            public Builder clearJavaStringCheckUtf8() {
                this.bitField0_ &= 0xFFFFFFEF;
                this.javaStringCheckUtf8_ = false;
                this.onChanged();
                return this;
            }
            
            @Override
            public boolean hasOptimizeFor() {
                return (this.bitField0_ & 0x20) != 0x0;
            }
            
            @Override
            public OptimizeMode getOptimizeFor() {
                final OptimizeMode result = OptimizeMode.forNumber(this.optimizeFor_);
                return (result == null) ? OptimizeMode.SPEED : result;
            }
            
            public Builder setOptimizeFor(final OptimizeMode value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                this.bitField0_ |= 0x20;
                this.optimizeFor_ = value.getNumber();
                this.onChanged();
                return this;
            }
            
            public Builder clearOptimizeFor() {
                this.bitField0_ &= 0xFFFFFFDF;
                this.optimizeFor_ = 1;
                this.onChanged();
                return this;
            }
            
            @Override
            public boolean hasGoPackage() {
                return (this.bitField0_ & 0x40) != 0x0;
            }
            
            @Override
            public String getGoPackage() {
                final Object ref = this.goPackage_;
                if (!(ref instanceof String)) {
                    final ByteString bs = (ByteString)ref;
                    final String s = bs.toStringUtf8();
                    if (bs.isValidUtf8()) {
                        this.goPackage_ = s;
                    }
                    return s;
                }
                return (String)ref;
            }
            
            @Override
            public ByteString getGoPackageBytes() {
                final Object ref = this.goPackage_;
                if (ref instanceof String) {
                    final ByteString b = ByteString.copyFromUtf8((String)ref);
                    return (ByteString)(this.goPackage_ = b);
                }
                return (ByteString)ref;
            }
            
            public Builder setGoPackage(final String value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                this.goPackage_ = value;
                this.bitField0_ |= 0x40;
                this.onChanged();
                return this;
            }
            
            public Builder clearGoPackage() {
                this.goPackage_ = FileOptions.getDefaultInstance().getGoPackage();
                this.bitField0_ &= 0xFFFFFFBF;
                this.onChanged();
                return this;
            }
            
            public Builder setGoPackageBytes(final ByteString value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                this.goPackage_ = value;
                this.bitField0_ |= 0x40;
                this.onChanged();
                return this;
            }
            
            @Override
            public boolean hasCcGenericServices() {
                return (this.bitField0_ & 0x80) != 0x0;
            }
            
            @Override
            public boolean getCcGenericServices() {
                return this.ccGenericServices_;
            }
            
            public Builder setCcGenericServices(final boolean value) {
                this.ccGenericServices_ = value;
                this.bitField0_ |= 0x80;
                this.onChanged();
                return this;
            }
            
            public Builder clearCcGenericServices() {
                this.bitField0_ &= 0xFFFFFF7F;
                this.ccGenericServices_ = false;
                this.onChanged();
                return this;
            }
            
            @Override
            public boolean hasJavaGenericServices() {
                return (this.bitField0_ & 0x100) != 0x0;
            }
            
            @Override
            public boolean getJavaGenericServices() {
                return this.javaGenericServices_;
            }
            
            public Builder setJavaGenericServices(final boolean value) {
                this.javaGenericServices_ = value;
                this.bitField0_ |= 0x100;
                this.onChanged();
                return this;
            }
            
            public Builder clearJavaGenericServices() {
                this.bitField0_ &= 0xFFFFFEFF;
                this.javaGenericServices_ = false;
                this.onChanged();
                return this;
            }
            
            @Override
            public boolean hasPyGenericServices() {
                return (this.bitField0_ & 0x200) != 0x0;
            }
            
            @Override
            public boolean getPyGenericServices() {
                return this.pyGenericServices_;
            }
            
            public Builder setPyGenericServices(final boolean value) {
                this.pyGenericServices_ = value;
                this.bitField0_ |= 0x200;
                this.onChanged();
                return this;
            }
            
            public Builder clearPyGenericServices() {
                this.bitField0_ &= 0xFFFFFDFF;
                this.pyGenericServices_ = false;
                this.onChanged();
                return this;
            }
            
            @Override
            public boolean hasDeprecated() {
                return (this.bitField0_ & 0x400) != 0x0;
            }
            
            @Override
            public boolean getDeprecated() {
                return this.deprecated_;
            }
            
            public Builder setDeprecated(final boolean value) {
                this.deprecated_ = value;
                this.bitField0_ |= 0x400;
                this.onChanged();
                return this;
            }
            
            public Builder clearDeprecated() {
                this.bitField0_ &= 0xFFFFFBFF;
                this.deprecated_ = false;
                this.onChanged();
                return this;
            }
            
            @Override
            public boolean hasCcEnableArenas() {
                return (this.bitField0_ & 0x800) != 0x0;
            }
            
            @Override
            public boolean getCcEnableArenas() {
                return this.ccEnableArenas_;
            }
            
            public Builder setCcEnableArenas(final boolean value) {
                this.ccEnableArenas_ = value;
                this.bitField0_ |= 0x800;
                this.onChanged();
                return this;
            }
            
            public Builder clearCcEnableArenas() {
                this.bitField0_ &= 0xFFFFF7FF;
                this.ccEnableArenas_ = true;
                this.onChanged();
                return this;
            }
            
            @Override
            public boolean hasObjcClassPrefix() {
                return (this.bitField0_ & 0x1000) != 0x0;
            }
            
            @Override
            public String getObjcClassPrefix() {
                final Object ref = this.objcClassPrefix_;
                if (!(ref instanceof String)) {
                    final ByteString bs = (ByteString)ref;
                    final String s = bs.toStringUtf8();
                    if (bs.isValidUtf8()) {
                        this.objcClassPrefix_ = s;
                    }
                    return s;
                }
                return (String)ref;
            }
            
            @Override
            public ByteString getObjcClassPrefixBytes() {
                final Object ref = this.objcClassPrefix_;
                if (ref instanceof String) {
                    final ByteString b = ByteString.copyFromUtf8((String)ref);
                    return (ByteString)(this.objcClassPrefix_ = b);
                }
                return (ByteString)ref;
            }
            
            public Builder setObjcClassPrefix(final String value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                this.objcClassPrefix_ = value;
                this.bitField0_ |= 0x1000;
                this.onChanged();
                return this;
            }
            
            public Builder clearObjcClassPrefix() {
                this.objcClassPrefix_ = FileOptions.getDefaultInstance().getObjcClassPrefix();
                this.bitField0_ &= 0xFFFFEFFF;
                this.onChanged();
                return this;
            }
            
            public Builder setObjcClassPrefixBytes(final ByteString value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                this.objcClassPrefix_ = value;
                this.bitField0_ |= 0x1000;
                this.onChanged();
                return this;
            }
            
            @Override
            public boolean hasCsharpNamespace() {
                return (this.bitField0_ & 0x2000) != 0x0;
            }
            
            @Override
            public String getCsharpNamespace() {
                final Object ref = this.csharpNamespace_;
                if (!(ref instanceof String)) {
                    final ByteString bs = (ByteString)ref;
                    final String s = bs.toStringUtf8();
                    if (bs.isValidUtf8()) {
                        this.csharpNamespace_ = s;
                    }
                    return s;
                }
                return (String)ref;
            }
            
            @Override
            public ByteString getCsharpNamespaceBytes() {
                final Object ref = this.csharpNamespace_;
                if (ref instanceof String) {
                    final ByteString b = ByteString.copyFromUtf8((String)ref);
                    return (ByteString)(this.csharpNamespace_ = b);
                }
                return (ByteString)ref;
            }
            
            public Builder setCsharpNamespace(final String value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                this.csharpNamespace_ = value;
                this.bitField0_ |= 0x2000;
                this.onChanged();
                return this;
            }
            
            public Builder clearCsharpNamespace() {
                this.csharpNamespace_ = FileOptions.getDefaultInstance().getCsharpNamespace();
                this.bitField0_ &= 0xFFFFDFFF;
                this.onChanged();
                return this;
            }
            
            public Builder setCsharpNamespaceBytes(final ByteString value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                this.csharpNamespace_ = value;
                this.bitField0_ |= 0x2000;
                this.onChanged();
                return this;
            }
            
            @Override
            public boolean hasSwiftPrefix() {
                return (this.bitField0_ & 0x4000) != 0x0;
            }
            
            @Override
            public String getSwiftPrefix() {
                final Object ref = this.swiftPrefix_;
                if (!(ref instanceof String)) {
                    final ByteString bs = (ByteString)ref;
                    final String s = bs.toStringUtf8();
                    if (bs.isValidUtf8()) {
                        this.swiftPrefix_ = s;
                    }
                    return s;
                }
                return (String)ref;
            }
            
            @Override
            public ByteString getSwiftPrefixBytes() {
                final Object ref = this.swiftPrefix_;
                if (ref instanceof String) {
                    final ByteString b = ByteString.copyFromUtf8((String)ref);
                    return (ByteString)(this.swiftPrefix_ = b);
                }
                return (ByteString)ref;
            }
            
            public Builder setSwiftPrefix(final String value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                this.swiftPrefix_ = value;
                this.bitField0_ |= 0x4000;
                this.onChanged();
                return this;
            }
            
            public Builder clearSwiftPrefix() {
                this.swiftPrefix_ = FileOptions.getDefaultInstance().getSwiftPrefix();
                this.bitField0_ &= 0xFFFFBFFF;
                this.onChanged();
                return this;
            }
            
            public Builder setSwiftPrefixBytes(final ByteString value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                this.swiftPrefix_ = value;
                this.bitField0_ |= 0x4000;
                this.onChanged();
                return this;
            }
            
            @Override
            public boolean hasPhpClassPrefix() {
                return (this.bitField0_ & 0x8000) != 0x0;
            }
            
            @Override
            public String getPhpClassPrefix() {
                final Object ref = this.phpClassPrefix_;
                if (!(ref instanceof String)) {
                    final ByteString bs = (ByteString)ref;
                    final String s = bs.toStringUtf8();
                    if (bs.isValidUtf8()) {
                        this.phpClassPrefix_ = s;
                    }
                    return s;
                }
                return (String)ref;
            }
            
            @Override
            public ByteString getPhpClassPrefixBytes() {
                final Object ref = this.phpClassPrefix_;
                if (ref instanceof String) {
                    final ByteString b = ByteString.copyFromUtf8((String)ref);
                    return (ByteString)(this.phpClassPrefix_ = b);
                }
                return (ByteString)ref;
            }
            
            public Builder setPhpClassPrefix(final String value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                this.phpClassPrefix_ = value;
                this.bitField0_ |= 0x8000;
                this.onChanged();
                return this;
            }
            
            public Builder clearPhpClassPrefix() {
                this.phpClassPrefix_ = FileOptions.getDefaultInstance().getPhpClassPrefix();
                this.bitField0_ &= 0xFFFF7FFF;
                this.onChanged();
                return this;
            }
            
            public Builder setPhpClassPrefixBytes(final ByteString value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                this.phpClassPrefix_ = value;
                this.bitField0_ |= 0x8000;
                this.onChanged();
                return this;
            }
            
            @Override
            public boolean hasPhpNamespace() {
                return (this.bitField0_ & 0x10000) != 0x0;
            }
            
            @Override
            public String getPhpNamespace() {
                final Object ref = this.phpNamespace_;
                if (!(ref instanceof String)) {
                    final ByteString bs = (ByteString)ref;
                    final String s = bs.toStringUtf8();
                    if (bs.isValidUtf8()) {
                        this.phpNamespace_ = s;
                    }
                    return s;
                }
                return (String)ref;
            }
            
            @Override
            public ByteString getPhpNamespaceBytes() {
                final Object ref = this.phpNamespace_;
                if (ref instanceof String) {
                    final ByteString b = ByteString.copyFromUtf8((String)ref);
                    return (ByteString)(this.phpNamespace_ = b);
                }
                return (ByteString)ref;
            }
            
            public Builder setPhpNamespace(final String value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                this.phpNamespace_ = value;
                this.bitField0_ |= 0x10000;
                this.onChanged();
                return this;
            }
            
            public Builder clearPhpNamespace() {
                this.phpNamespace_ = FileOptions.getDefaultInstance().getPhpNamespace();
                this.bitField0_ &= 0xFFFEFFFF;
                this.onChanged();
                return this;
            }
            
            public Builder setPhpNamespaceBytes(final ByteString value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                this.phpNamespace_ = value;
                this.bitField0_ |= 0x10000;
                this.onChanged();
                return this;
            }
            
            @Override
            public boolean hasPhpMetadataNamespace() {
                return (this.bitField0_ & 0x20000) != 0x0;
            }
            
            @Override
            public String getPhpMetadataNamespace() {
                final Object ref = this.phpMetadataNamespace_;
                if (!(ref instanceof String)) {
                    final ByteString bs = (ByteString)ref;
                    final String s = bs.toStringUtf8();
                    if (bs.isValidUtf8()) {
                        this.phpMetadataNamespace_ = s;
                    }
                    return s;
                }
                return (String)ref;
            }
            
            @Override
            public ByteString getPhpMetadataNamespaceBytes() {
                final Object ref = this.phpMetadataNamespace_;
                if (ref instanceof String) {
                    final ByteString b = ByteString.copyFromUtf8((String)ref);
                    return (ByteString)(this.phpMetadataNamespace_ = b);
                }
                return (ByteString)ref;
            }
            
            public Builder setPhpMetadataNamespace(final String value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                this.phpMetadataNamespace_ = value;
                this.bitField0_ |= 0x20000;
                this.onChanged();
                return this;
            }
            
            public Builder clearPhpMetadataNamespace() {
                this.phpMetadataNamespace_ = FileOptions.getDefaultInstance().getPhpMetadataNamespace();
                this.bitField0_ &= 0xFFFDFFFF;
                this.onChanged();
                return this;
            }
            
            public Builder setPhpMetadataNamespaceBytes(final ByteString value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                this.phpMetadataNamespace_ = value;
                this.bitField0_ |= 0x20000;
                this.onChanged();
                return this;
            }
            
            @Override
            public boolean hasRubyPackage() {
                return (this.bitField0_ & 0x40000) != 0x0;
            }
            
            @Override
            public String getRubyPackage() {
                final Object ref = this.rubyPackage_;
                if (!(ref instanceof String)) {
                    final ByteString bs = (ByteString)ref;
                    final String s = bs.toStringUtf8();
                    if (bs.isValidUtf8()) {
                        this.rubyPackage_ = s;
                    }
                    return s;
                }
                return (String)ref;
            }
            
            @Override
            public ByteString getRubyPackageBytes() {
                final Object ref = this.rubyPackage_;
                if (ref instanceof String) {
                    final ByteString b = ByteString.copyFromUtf8((String)ref);
                    return (ByteString)(this.rubyPackage_ = b);
                }
                return (ByteString)ref;
            }
            
            public Builder setRubyPackage(final String value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                this.rubyPackage_ = value;
                this.bitField0_ |= 0x40000;
                this.onChanged();
                return this;
            }
            
            public Builder clearRubyPackage() {
                this.rubyPackage_ = FileOptions.getDefaultInstance().getRubyPackage();
                this.bitField0_ &= 0xFFFBFFFF;
                this.onChanged();
                return this;
            }
            
            public Builder setRubyPackageBytes(final ByteString value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                this.rubyPackage_ = value;
                this.bitField0_ |= 0x40000;
                this.onChanged();
                return this;
            }
            
            @Override
            public boolean hasFeatures() {
                return (this.bitField0_ & 0x80000) != 0x0;
            }
            
            @Override
            public FeatureSet getFeatures() {
                if (this.featuresBuilder_ == null) {
                    return (this.features_ == null) ? FeatureSet.getDefaultInstance() : this.features_;
                }
                return this.featuresBuilder_.getMessage();
            }
            
            public Builder setFeatures(final FeatureSet value) {
                if (this.featuresBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.features_ = value;
                }
                else {
                    this.featuresBuilder_.setMessage(value);
                }
                this.bitField0_ |= 0x80000;
                this.onChanged();
                return this;
            }
            
            public Builder setFeatures(final FeatureSet.Builder builderForValue) {
                if (this.featuresBuilder_ == null) {
                    this.features_ = builderForValue.build();
                }
                else {
                    this.featuresBuilder_.setMessage(builderForValue.build());
                }
                this.bitField0_ |= 0x80000;
                this.onChanged();
                return this;
            }
            
            public Builder mergeFeatures(final FeatureSet value) {
                if (this.featuresBuilder_ == null) {
                    if ((this.bitField0_ & 0x80000) != 0x0 && this.features_ != null && this.features_ != FeatureSet.getDefaultInstance()) {
                        this.getFeaturesBuilder().mergeFrom(value);
                    }
                    else {
                        this.features_ = value;
                    }
                }
                else {
                    this.featuresBuilder_.mergeFrom(value);
                }
                if (this.features_ != null) {
                    this.bitField0_ |= 0x80000;
                    this.onChanged();
                }
                return this;
            }
            
            public Builder clearFeatures() {
                this.bitField0_ &= 0xFFF7FFFF;
                this.features_ = null;
                if (this.featuresBuilder_ != null) {
                    this.featuresBuilder_.dispose();
                    this.featuresBuilder_ = null;
                }
                this.onChanged();
                return this;
            }
            
            public FeatureSet.Builder getFeaturesBuilder() {
                this.bitField0_ |= 0x80000;
                this.onChanged();
                return this.internalGetFeaturesFieldBuilder().getBuilder();
            }
            
            @Override
            public FeatureSetOrBuilder getFeaturesOrBuilder() {
                if (this.featuresBuilder_ != null) {
                    return this.featuresBuilder_.getMessageOrBuilder();
                }
                return (this.features_ == null) ? FeatureSet.getDefaultInstance() : this.features_;
            }
            
            private SingleFieldBuilder<FeatureSet, FeatureSet.Builder, FeatureSetOrBuilder> internalGetFeaturesFieldBuilder() {
                if (this.featuresBuilder_ == null) {
                    this.featuresBuilder_ = new SingleFieldBuilder<FeatureSet, FeatureSet.Builder, FeatureSetOrBuilder>(this.getFeatures(), this.getParentForChildren(), this.isClean());
                    this.features_ = null;
                }
                return this.featuresBuilder_;
            }
            
            private void ensureUninterpretedOptionIsMutable() {
                if ((this.bitField0_ & 0x100000) == 0x0) {
                    this.uninterpretedOption_ = new ArrayList<UninterpretedOption>(this.uninterpretedOption_);
                    this.bitField0_ |= 0x100000;
                }
            }
            
            @Override
            public List<UninterpretedOption> getUninterpretedOptionList() {
                if (this.uninterpretedOptionBuilder_ == null) {
                    return Collections.unmodifiableList((List<? extends UninterpretedOption>)this.uninterpretedOption_);
                }
                return this.uninterpretedOptionBuilder_.getMessageList();
            }
            
            @Override
            public int getUninterpretedOptionCount() {
                if (this.uninterpretedOptionBuilder_ == null) {
                    return this.uninterpretedOption_.size();
                }
                return this.uninterpretedOptionBuilder_.getCount();
            }
            
            @Override
            public UninterpretedOption getUninterpretedOption(final int index) {
                if (this.uninterpretedOptionBuilder_ == null) {
                    return this.uninterpretedOption_.get(index);
                }
                return this.uninterpretedOptionBuilder_.getMessage(index);
            }
            
            public Builder setUninterpretedOption(final int index, final UninterpretedOption value) {
                if (this.uninterpretedOptionBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.ensureUninterpretedOptionIsMutable();
                    this.uninterpretedOption_.set(index, value);
                    this.onChanged();
                }
                else {
                    this.uninterpretedOptionBuilder_.setMessage(index, value);
                }
                return this;
            }
            
            public Builder setUninterpretedOption(final int index, final UninterpretedOption.Builder builderForValue) {
                if (this.uninterpretedOptionBuilder_ == null) {
                    this.ensureUninterpretedOptionIsMutable();
                    this.uninterpretedOption_.set(index, builderForValue.build());
                    this.onChanged();
                }
                else {
                    this.uninterpretedOptionBuilder_.setMessage(index, builderForValue.build());
                }
                return this;
            }
            
            public Builder addUninterpretedOption(final UninterpretedOption value) {
                if (this.uninterpretedOptionBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.ensureUninterpretedOptionIsMutable();
                    this.uninterpretedOption_.add(value);
                    this.onChanged();
                }
                else {
                    this.uninterpretedOptionBuilder_.addMessage(value);
                }
                return this;
            }
            
            public Builder addUninterpretedOption(final int index, final UninterpretedOption value) {
                if (this.uninterpretedOptionBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.ensureUninterpretedOptionIsMutable();
                    this.uninterpretedOption_.add(index, value);
                    this.onChanged();
                }
                else {
                    this.uninterpretedOptionBuilder_.addMessage(index, value);
                }
                return this;
            }
            
            public Builder addUninterpretedOption(final UninterpretedOption.Builder builderForValue) {
                if (this.uninterpretedOptionBuilder_ == null) {
                    this.ensureUninterpretedOptionIsMutable();
                    this.uninterpretedOption_.add(builderForValue.build());
                    this.onChanged();
                }
                else {
                    this.uninterpretedOptionBuilder_.addMessage(builderForValue.build());
                }
                return this;
            }
            
            public Builder addUninterpretedOption(final int index, final UninterpretedOption.Builder builderForValue) {
                if (this.uninterpretedOptionBuilder_ == null) {
                    this.ensureUninterpretedOptionIsMutable();
                    this.uninterpretedOption_.add(index, builderForValue.build());
                    this.onChanged();
                }
                else {
                    this.uninterpretedOptionBuilder_.addMessage(index, builderForValue.build());
                }
                return this;
            }
            
            public Builder addAllUninterpretedOption(final Iterable<? extends UninterpretedOption> values) {
                if (this.uninterpretedOptionBuilder_ == null) {
                    this.ensureUninterpretedOptionIsMutable();
                    AbstractMessageLite.Builder.addAll(values, this.uninterpretedOption_);
                    this.onChanged();
                }
                else {
                    this.uninterpretedOptionBuilder_.addAllMessages(values);
                }
                return this;
            }
            
            public Builder clearUninterpretedOption() {
                if (this.uninterpretedOptionBuilder_ == null) {
                    this.uninterpretedOption_ = Collections.emptyList();
                    this.bitField0_ &= 0xFFEFFFFF;
                    this.onChanged();
                }
                else {
                    this.uninterpretedOptionBuilder_.clear();
                }
                return this;
            }
            
            public Builder removeUninterpretedOption(final int index) {
                if (this.uninterpretedOptionBuilder_ == null) {
                    this.ensureUninterpretedOptionIsMutable();
                    this.uninterpretedOption_.remove(index);
                    this.onChanged();
                }
                else {
                    this.uninterpretedOptionBuilder_.remove(index);
                }
                return this;
            }
            
            public UninterpretedOption.Builder getUninterpretedOptionBuilder(final int index) {
                return this.internalGetUninterpretedOptionFieldBuilder().getBuilder(index);
            }
            
            @Override
            public UninterpretedOptionOrBuilder getUninterpretedOptionOrBuilder(final int index) {
                if (this.uninterpretedOptionBuilder_ == null) {
                    return this.uninterpretedOption_.get(index);
                }
                return this.uninterpretedOptionBuilder_.getMessageOrBuilder(index);
            }
            
            @Override
            public List<? extends UninterpretedOptionOrBuilder> getUninterpretedOptionOrBuilderList() {
                if (this.uninterpretedOptionBuilder_ != null) {
                    return this.uninterpretedOptionBuilder_.getMessageOrBuilderList();
                }
                return Collections.unmodifiableList((List<? extends UninterpretedOptionOrBuilder>)this.uninterpretedOption_);
            }
            
            public UninterpretedOption.Builder addUninterpretedOptionBuilder() {
                return this.internalGetUninterpretedOptionFieldBuilder().addBuilder(UninterpretedOption.getDefaultInstance());
            }
            
            public UninterpretedOption.Builder addUninterpretedOptionBuilder(final int index) {
                return this.internalGetUninterpretedOptionFieldBuilder().addBuilder(index, UninterpretedOption.getDefaultInstance());
            }
            
            public List<UninterpretedOption.Builder> getUninterpretedOptionBuilderList() {
                return this.internalGetUninterpretedOptionFieldBuilder().getBuilderList();
            }
            
            private RepeatedFieldBuilder<UninterpretedOption, UninterpretedOption.Builder, UninterpretedOptionOrBuilder> internalGetUninterpretedOptionFieldBuilder() {
                if (this.uninterpretedOptionBuilder_ == null) {
                    this.uninterpretedOptionBuilder_ = new RepeatedFieldBuilder<UninterpretedOption, UninterpretedOption.Builder, UninterpretedOptionOrBuilder>(this.uninterpretedOption_, (this.bitField0_ & 0x100000) != 0x0, this.getParentForChildren(), this.isClean());
                    this.uninterpretedOption_ = null;
                }
                return this.uninterpretedOptionBuilder_;
            }
        }
    }
    
    public static final class MessageOptions extends ExtendableMessage<MessageOptions> implements MessageOptionsOrBuilder
    {
        private static final long serialVersionUID = 0L;
        private int bitField0_;
        public static final int MESSAGE_SET_WIRE_FORMAT_FIELD_NUMBER = 1;
        private boolean messageSetWireFormat_;
        public static final int NO_STANDARD_DESCRIPTOR_ACCESSOR_FIELD_NUMBER = 2;
        private boolean noStandardDescriptorAccessor_;
        public static final int DEPRECATED_FIELD_NUMBER = 3;
        private boolean deprecated_;
        public static final int MAP_ENTRY_FIELD_NUMBER = 7;
        private boolean mapEntry_;
        public static final int DEPRECATED_LEGACY_JSON_FIELD_CONFLICTS_FIELD_NUMBER = 11;
        private boolean deprecatedLegacyJsonFieldConflicts_;
        public static final int FEATURES_FIELD_NUMBER = 12;
        private FeatureSet features_;
        public static final int UNINTERPRETED_OPTION_FIELD_NUMBER = 999;
        private List<UninterpretedOption> uninterpretedOption_;
        private byte memoizedIsInitialized;
        private static final MessageOptions DEFAULT_INSTANCE;
        private static final Parser<MessageOptions> PARSER;
        
        private MessageOptions(final ExtendableBuilder<MessageOptions, ?> builder) {
            super(builder);
            this.messageSetWireFormat_ = false;
            this.noStandardDescriptorAccessor_ = false;
            this.deprecated_ = false;
            this.mapEntry_ = false;
            this.deprecatedLegacyJsonFieldConflicts_ = false;
            this.memoizedIsInitialized = -1;
        }
        
        private MessageOptions() {
            this.messageSetWireFormat_ = false;
            this.noStandardDescriptorAccessor_ = false;
            this.deprecated_ = false;
            this.mapEntry_ = false;
            this.deprecatedLegacyJsonFieldConflicts_ = false;
            this.memoizedIsInitialized = -1;
            this.uninterpretedOption_ = Collections.emptyList();
        }
        
        public static final Descriptors.Descriptor getDescriptor() {
            return DescriptorProtos.internal_static_google_protobuf_MessageOptions_descriptor;
        }
        
        @Override
        protected FieldAccessorTable internalGetFieldAccessorTable() {
            return DescriptorProtos.internal_static_google_protobuf_MessageOptions_fieldAccessorTable.ensureFieldAccessorsInitialized(MessageOptions.class, Builder.class);
        }
        
        @Override
        public boolean hasMessageSetWireFormat() {
            return (this.bitField0_ & 0x1) != 0x0;
        }
        
        @Override
        public boolean getMessageSetWireFormat() {
            return this.messageSetWireFormat_;
        }
        
        @Override
        public boolean hasNoStandardDescriptorAccessor() {
            return (this.bitField0_ & 0x2) != 0x0;
        }
        
        @Override
        public boolean getNoStandardDescriptorAccessor() {
            return this.noStandardDescriptorAccessor_;
        }
        
        @Override
        public boolean hasDeprecated() {
            return (this.bitField0_ & 0x4) != 0x0;
        }
        
        @Override
        public boolean getDeprecated() {
            return this.deprecated_;
        }
        
        @Override
        public boolean hasMapEntry() {
            return (this.bitField0_ & 0x8) != 0x0;
        }
        
        @Override
        public boolean getMapEntry() {
            return this.mapEntry_;
        }
        
        @Deprecated
        @Override
        public boolean hasDeprecatedLegacyJsonFieldConflicts() {
            return (this.bitField0_ & 0x10) != 0x0;
        }
        
        @Deprecated
        @Override
        public boolean getDeprecatedLegacyJsonFieldConflicts() {
            return this.deprecatedLegacyJsonFieldConflicts_;
        }
        
        @Override
        public boolean hasFeatures() {
            return (this.bitField0_ & 0x20) != 0x0;
        }
        
        @Override
        public FeatureSet getFeatures() {
            return (this.features_ == null) ? FeatureSet.getDefaultInstance() : this.features_;
        }
        
        @Override
        public FeatureSetOrBuilder getFeaturesOrBuilder() {
            return (this.features_ == null) ? FeatureSet.getDefaultInstance() : this.features_;
        }
        
        @Override
        public List<UninterpretedOption> getUninterpretedOptionList() {
            return this.uninterpretedOption_;
        }
        
        @Override
        public List<? extends UninterpretedOptionOrBuilder> getUninterpretedOptionOrBuilderList() {
            return this.uninterpretedOption_;
        }
        
        @Override
        public int getUninterpretedOptionCount() {
            return this.uninterpretedOption_.size();
        }
        
        @Override
        public UninterpretedOption getUninterpretedOption(final int index) {
            return this.uninterpretedOption_.get(index);
        }
        
        @Override
        public UninterpretedOptionOrBuilder getUninterpretedOptionOrBuilder(final int index) {
            return this.uninterpretedOption_.get(index);
        }
        
        @Override
        public final boolean isInitialized() {
            final byte isInitialized = this.memoizedIsInitialized;
            if (isInitialized == 1) {
                return true;
            }
            if (isInitialized == 0) {
                return false;
            }
            if (this.hasFeatures() && !this.getFeatures().isInitialized()) {
                this.memoizedIsInitialized = 0;
                return false;
            }
            for (int i = 0; i < this.getUninterpretedOptionCount(); ++i) {
                if (!this.getUninterpretedOption(i).isInitialized()) {
                    this.memoizedIsInitialized = 0;
                    return false;
                }
            }
            if (!this.extensionsAreInitialized()) {
                this.memoizedIsInitialized = 0;
                return false;
            }
            this.memoizedIsInitialized = 1;
            return true;
        }
        
        @Override
        public void writeTo(final CodedOutputStream output) throws IOException {
            final ExtensionSerializer extensionWriter = this.newExtensionSerializer();
            if ((this.bitField0_ & 0x1) != 0x0) {
                output.writeBool(1, this.messageSetWireFormat_);
            }
            if ((this.bitField0_ & 0x2) != 0x0) {
                output.writeBool(2, this.noStandardDescriptorAccessor_);
            }
            if ((this.bitField0_ & 0x4) != 0x0) {
                output.writeBool(3, this.deprecated_);
            }
            if ((this.bitField0_ & 0x8) != 0x0) {
                output.writeBool(7, this.mapEntry_);
            }
            if ((this.bitField0_ & 0x10) != 0x0) {
                output.writeBool(11, this.deprecatedLegacyJsonFieldConflicts_);
            }
            if ((this.bitField0_ & 0x20) != 0x0) {
                output.writeMessage(12, this.getFeatures());
            }
            for (int i = 0; i < this.uninterpretedOption_.size(); ++i) {
                output.writeMessage(999, this.uninterpretedOption_.get(i));
            }
            extensionWriter.writeUntil(536870912, output);
            this.getUnknownFields().writeTo(output);
        }
        
        @Override
        public int getSerializedSize() {
            int size = this.memoizedSize;
            if (size != -1) {
                return size;
            }
            size = 0;
            if ((this.bitField0_ & 0x1) != 0x0) {
                size += CodedOutputStream.computeBoolSize(1, this.messageSetWireFormat_);
            }
            if ((this.bitField0_ & 0x2) != 0x0) {
                size += CodedOutputStream.computeBoolSize(2, this.noStandardDescriptorAccessor_);
            }
            if ((this.bitField0_ & 0x4) != 0x0) {
                size += CodedOutputStream.computeBoolSize(3, this.deprecated_);
            }
            if ((this.bitField0_ & 0x8) != 0x0) {
                size += CodedOutputStream.computeBoolSize(7, this.mapEntry_);
            }
            if ((this.bitField0_ & 0x10) != 0x0) {
                size += CodedOutputStream.computeBoolSize(11, this.deprecatedLegacyJsonFieldConflicts_);
            }
            if ((this.bitField0_ & 0x20) != 0x0) {
                size += CodedOutputStream.computeMessageSize(12, this.getFeatures());
            }
            for (int i = 0; i < this.uninterpretedOption_.size(); ++i) {
                size += CodedOutputStream.computeMessageSize(999, this.uninterpretedOption_.get(i));
            }
            size += this.extensionsSerializedSize();
            size += this.getUnknownFields().getSerializedSize();
            return this.memoizedSize = size;
        }
        
        @Override
        public boolean equals(final Object obj) {
            if (obj == this) {
                return true;
            }
            if (!(obj instanceof MessageOptions)) {
                return super.equals(obj);
            }
            final MessageOptions other = (MessageOptions)obj;
            return this.hasMessageSetWireFormat() == other.hasMessageSetWireFormat() && (!this.hasMessageSetWireFormat() || this.getMessageSetWireFormat() == other.getMessageSetWireFormat()) && this.hasNoStandardDescriptorAccessor() == other.hasNoStandardDescriptorAccessor() && (!this.hasNoStandardDescriptorAccessor() || this.getNoStandardDescriptorAccessor() == other.getNoStandardDescriptorAccessor()) && this.hasDeprecated() == other.hasDeprecated() && (!this.hasDeprecated() || this.getDeprecated() == other.getDeprecated()) && this.hasMapEntry() == other.hasMapEntry() && (!this.hasMapEntry() || this.getMapEntry() == other.getMapEntry()) && this.hasDeprecatedLegacyJsonFieldConflicts() == other.hasDeprecatedLegacyJsonFieldConflicts() && (!this.hasDeprecatedLegacyJsonFieldConflicts() || this.getDeprecatedLegacyJsonFieldConflicts() == other.getDeprecatedLegacyJsonFieldConflicts()) && this.hasFeatures() == other.hasFeatures() && (!this.hasFeatures() || this.getFeatures().equals(other.getFeatures())) && this.getUninterpretedOptionList().equals(other.getUninterpretedOptionList()) && this.getUnknownFields().equals(other.getUnknownFields()) && this.getExtensionFields().equals(other.getExtensionFields());
        }
        
        @Override
        public int hashCode() {
            if (this.memoizedHashCode != 0) {
                return this.memoizedHashCode;
            }
            int hash = 41;
            hash = 19 * hash + getDescriptor().hashCode();
            if (this.hasMessageSetWireFormat()) {
                hash = 37 * hash + 1;
                hash = 53 * hash + Internal.hashBoolean(this.getMessageSetWireFormat());
            }
            if (this.hasNoStandardDescriptorAccessor()) {
                hash = 37 * hash + 2;
                hash = 53 * hash + Internal.hashBoolean(this.getNoStandardDescriptorAccessor());
            }
            if (this.hasDeprecated()) {
                hash = 37 * hash + 3;
                hash = 53 * hash + Internal.hashBoolean(this.getDeprecated());
            }
            if (this.hasMapEntry()) {
                hash = 37 * hash + 7;
                hash = 53 * hash + Internal.hashBoolean(this.getMapEntry());
            }
            if (this.hasDeprecatedLegacyJsonFieldConflicts()) {
                hash = 37 * hash + 11;
                hash = 53 * hash + Internal.hashBoolean(this.getDeprecatedLegacyJsonFieldConflicts());
            }
            if (this.hasFeatures()) {
                hash = 37 * hash + 12;
                hash = 53 * hash + this.getFeatures().hashCode();
            }
            if (this.getUninterpretedOptionCount() > 0) {
                hash = 37 * hash + 999;
                hash = 53 * hash + this.getUninterpretedOptionList().hashCode();
            }
            hash = AbstractMessage.hashFields(hash, this.getExtensionFields());
            hash = 29 * hash + this.getUnknownFields().hashCode();
            return this.memoizedHashCode = hash;
        }
        
        public static MessageOptions parseFrom(final ByteBuffer data) throws InvalidProtocolBufferException {
            return MessageOptions.PARSER.parseFrom(data);
        }
        
        public static MessageOptions parseFrom(final ByteBuffer data, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
            return MessageOptions.PARSER.parseFrom(data, extensionRegistry);
        }
        
        public static MessageOptions parseFrom(final ByteString data) throws InvalidProtocolBufferException {
            return MessageOptions.PARSER.parseFrom(data);
        }
        
        public static MessageOptions parseFrom(final ByteString data, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
            return MessageOptions.PARSER.parseFrom(data, extensionRegistry);
        }
        
        public static MessageOptions parseFrom(final byte[] data) throws InvalidProtocolBufferException {
            return MessageOptions.PARSER.parseFrom(data);
        }
        
        public static MessageOptions parseFrom(final byte[] data, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
            return MessageOptions.PARSER.parseFrom(data, extensionRegistry);
        }
        
        public static MessageOptions parseFrom(final InputStream input) throws IOException {
            return GeneratedMessage.parseWithIOException(MessageOptions.PARSER, input);
        }
        
        public static MessageOptions parseFrom(final InputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
            return GeneratedMessage.parseWithIOException(MessageOptions.PARSER, input, extensionRegistry);
        }
        
        public static MessageOptions parseDelimitedFrom(final InputStream input) throws IOException {
            return GeneratedMessage.parseDelimitedWithIOException(MessageOptions.PARSER, input);
        }
        
        public static MessageOptions parseDelimitedFrom(final InputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
            return GeneratedMessage.parseDelimitedWithIOException(MessageOptions.PARSER, input, extensionRegistry);
        }
        
        public static MessageOptions parseFrom(final CodedInputStream input) throws IOException {
            return GeneratedMessage.parseWithIOException(MessageOptions.PARSER, input);
        }
        
        public static MessageOptions parseFrom(final CodedInputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
            return GeneratedMessage.parseWithIOException(MessageOptions.PARSER, input, extensionRegistry);
        }
        
        @Override
        public Builder newBuilderForType() {
            return newBuilder();
        }
        
        public static Builder newBuilder() {
            return MessageOptions.DEFAULT_INSTANCE.toBuilder();
        }
        
        public static Builder newBuilder(final MessageOptions prototype) {
            return MessageOptions.DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
        }
        
        @Override
        public Builder toBuilder() {
            return (this == MessageOptions.DEFAULT_INSTANCE) ? new Builder() : new Builder().mergeFrom(this);
        }
        
        @Override
        protected Builder newBuilderForType(final BuilderParent parent) {
            final Builder builder = new Builder(parent);
            return builder;
        }
        
        public static MessageOptions getDefaultInstance() {
            return MessageOptions.DEFAULT_INSTANCE;
        }
        
        public static Parser<MessageOptions> parser() {
            return MessageOptions.PARSER;
        }
        
        @Override
        public Parser<MessageOptions> getParserForType() {
            return MessageOptions.PARSER;
        }
        
        @Override
        public MessageOptions getDefaultInstanceForType() {
            return MessageOptions.DEFAULT_INSTANCE;
        }
        
        static {
            RuntimeVersion.validateProtobufGencodeVersion(RuntimeVersion.RuntimeDomain.PUBLIC, 4, 33, 0, "", "MessageOptions");
            DEFAULT_INSTANCE = new MessageOptions();
            PARSER = new AbstractParser<MessageOptions>() {
                @Override
                public MessageOptions parsePartialFrom(final CodedInputStream input, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
                    final Builder builder = MessageOptions.newBuilder();
                    try {
                        builder.mergeFrom(input, extensionRegistry);
                    }
                    catch (final InvalidProtocolBufferException e) {
                        throw e.setUnfinishedMessage(builder.buildPartial());
                    }
                    catch (final UninitializedMessageException e2) {
                        throw e2.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
                    }
                    catch (final IOException e3) {
                        throw new InvalidProtocolBufferException(e3).setUnfinishedMessage(builder.buildPartial());
                    }
                    return builder.buildPartial();
                }
            };
        }
        
        public static final class Builder extends ExtendableBuilder<MessageOptions, Builder> implements MessageOptionsOrBuilder
        {
            private int bitField0_;
            private boolean messageSetWireFormat_;
            private boolean noStandardDescriptorAccessor_;
            private boolean deprecated_;
            private boolean mapEntry_;
            private boolean deprecatedLegacyJsonFieldConflicts_;
            private FeatureSet features_;
            private SingleFieldBuilder<FeatureSet, FeatureSet.Builder, FeatureSetOrBuilder> featuresBuilder_;
            private List<UninterpretedOption> uninterpretedOption_;
            private RepeatedFieldBuilder<UninterpretedOption, UninterpretedOption.Builder, UninterpretedOptionOrBuilder> uninterpretedOptionBuilder_;
            
            public static final Descriptors.Descriptor getDescriptor() {
                return DescriptorProtos.internal_static_google_protobuf_MessageOptions_descriptor;
            }
            
            @Override
            protected FieldAccessorTable internalGetFieldAccessorTable() {
                return DescriptorProtos.internal_static_google_protobuf_MessageOptions_fieldAccessorTable.ensureFieldAccessorsInitialized(MessageOptions.class, Builder.class);
            }
            
            private Builder() {
                this.uninterpretedOption_ = Collections.emptyList();
                this.maybeForceBuilderInitialization();
            }
            
            private Builder(final BuilderParent parent) {
                super(parent);
                this.uninterpretedOption_ = Collections.emptyList();
                this.maybeForceBuilderInitialization();
            }
            
            private void maybeForceBuilderInitialization() {
                if (GeneratedMessage.alwaysUseFieldBuilders) {
                    this.internalGetFeaturesFieldBuilder();
                    this.internalGetUninterpretedOptionFieldBuilder();
                }
            }
            
            @Override
            public Builder clear() {
                super.clear();
                this.bitField0_ = 0;
                this.messageSetWireFormat_ = false;
                this.noStandardDescriptorAccessor_ = false;
                this.deprecated_ = false;
                this.mapEntry_ = false;
                this.deprecatedLegacyJsonFieldConflicts_ = false;
                this.features_ = null;
                if (this.featuresBuilder_ != null) {
                    this.featuresBuilder_.dispose();
                    this.featuresBuilder_ = null;
                }
                if (this.uninterpretedOptionBuilder_ == null) {
                    this.uninterpretedOption_ = Collections.emptyList();
                }
                else {
                    this.uninterpretedOption_ = null;
                    this.uninterpretedOptionBuilder_.clear();
                }
                this.bitField0_ &= 0xFFFFFFBF;
                return this;
            }
            
            @Override
            public Descriptors.Descriptor getDescriptorForType() {
                return DescriptorProtos.internal_static_google_protobuf_MessageOptions_descriptor;
            }
            
            @Override
            public MessageOptions getDefaultInstanceForType() {
                return MessageOptions.getDefaultInstance();
            }
            
            @Override
            public MessageOptions build() {
                final MessageOptions result = this.buildPartial();
                if (!result.isInitialized()) {
                    throw AbstractMessage.Builder.newUninitializedMessageException(result);
                }
                return result;
            }
            
            @Override
            public MessageOptions buildPartial() {
                final MessageOptions result = new MessageOptions((ExtendableBuilder)this);
                this.buildPartialRepeatedFields(result);
                if (this.bitField0_ != 0) {
                    this.buildPartial0(result);
                }
                this.onBuilt();
                return result;
            }
            
            private void buildPartialRepeatedFields(final MessageOptions result) {
                if (this.uninterpretedOptionBuilder_ == null) {
                    if ((this.bitField0_ & 0x40) != 0x0) {
                        this.uninterpretedOption_ = Collections.unmodifiableList((List<? extends UninterpretedOption>)this.uninterpretedOption_);
                        this.bitField0_ &= 0xFFFFFFBF;
                    }
                    result.uninterpretedOption_ = this.uninterpretedOption_;
                }
                else {
                    result.uninterpretedOption_ = this.uninterpretedOptionBuilder_.build();
                }
            }
            
            private void buildPartial0(final MessageOptions result) {
                final int from_bitField0_ = this.bitField0_;
                int to_bitField0_ = 0;
                if ((from_bitField0_ & 0x1) != 0x0) {
                    result.messageSetWireFormat_ = this.messageSetWireFormat_;
                    to_bitField0_ |= 0x1;
                }
                if ((from_bitField0_ & 0x2) != 0x0) {
                    result.noStandardDescriptorAccessor_ = this.noStandardDescriptorAccessor_;
                    to_bitField0_ |= 0x2;
                }
                if ((from_bitField0_ & 0x4) != 0x0) {
                    result.deprecated_ = this.deprecated_;
                    to_bitField0_ |= 0x4;
                }
                if ((from_bitField0_ & 0x8) != 0x0) {
                    result.mapEntry_ = this.mapEntry_;
                    to_bitField0_ |= 0x8;
                }
                if ((from_bitField0_ & 0x10) != 0x0) {
                    result.deprecatedLegacyJsonFieldConflicts_ = this.deprecatedLegacyJsonFieldConflicts_;
                    to_bitField0_ |= 0x10;
                }
                if ((from_bitField0_ & 0x20) != 0x0) {
                    result.features_ = ((this.featuresBuilder_ == null) ? this.features_ : this.featuresBuilder_.build());
                    to_bitField0_ |= 0x20;
                }
                result.bitField0_ |= to_bitField0_;
            }
            
            public <Type> Builder setExtension(final GeneratedExtension<MessageOptions, Type> extension, final Type value) {
                return super.setExtension(extension, value);
            }
            
            public <Type> Builder setExtension(final GeneratedExtension<MessageOptions, List<Type>> extension, final int index, final Type value) {
                return super.setExtension(extension, index, value);
            }
            
            public <Type> Builder addExtension(final GeneratedExtension<MessageOptions, List<Type>> extension, final Type value) {
                return super.addExtension(extension, value);
            }
            
            public <Type> Builder clearExtension(final GeneratedExtension<MessageOptions, Type> extension) {
                return super.clearExtension(extension);
            }
            
            @Override
            public Builder mergeFrom(final Message other) {
                if (other instanceof MessageOptions) {
                    return this.mergeFrom((MessageOptions)other);
                }
                super.mergeFrom(other);
                return this;
            }
            
            public Builder mergeFrom(final MessageOptions other) {
                if (other == MessageOptions.getDefaultInstance()) {
                    return this;
                }
                if (other.hasMessageSetWireFormat()) {
                    this.setMessageSetWireFormat(other.getMessageSetWireFormat());
                }
                if (other.hasNoStandardDescriptorAccessor()) {
                    this.setNoStandardDescriptorAccessor(other.getNoStandardDescriptorAccessor());
                }
                if (other.hasDeprecated()) {
                    this.setDeprecated(other.getDeprecated());
                }
                if (other.hasMapEntry()) {
                    this.setMapEntry(other.getMapEntry());
                }
                if (other.hasDeprecatedLegacyJsonFieldConflicts()) {
                    this.setDeprecatedLegacyJsonFieldConflicts(other.getDeprecatedLegacyJsonFieldConflicts());
                }
                if (other.hasFeatures()) {
                    this.mergeFeatures(other.getFeatures());
                }
                if (this.uninterpretedOptionBuilder_ == null) {
                    if (!other.uninterpretedOption_.isEmpty()) {
                        if (this.uninterpretedOption_.isEmpty()) {
                            this.uninterpretedOption_ = other.uninterpretedOption_;
                            this.bitField0_ &= 0xFFFFFFBF;
                        }
                        else {
                            this.ensureUninterpretedOptionIsMutable();
                            this.uninterpretedOption_.addAll(other.uninterpretedOption_);
                        }
                        this.onChanged();
                    }
                }
                else if (!other.uninterpretedOption_.isEmpty()) {
                    if (this.uninterpretedOptionBuilder_.isEmpty()) {
                        this.uninterpretedOptionBuilder_.dispose();
                        this.uninterpretedOptionBuilder_ = null;
                        this.uninterpretedOption_ = other.uninterpretedOption_;
                        this.bitField0_ &= 0xFFFFFFBF;
                        this.uninterpretedOptionBuilder_ = (GeneratedMessage.alwaysUseFieldBuilders ? this.internalGetUninterpretedOptionFieldBuilder() : null);
                    }
                    else {
                        this.uninterpretedOptionBuilder_.addAllMessages(other.uninterpretedOption_);
                    }
                }
                this.mergeExtensionFields(other);
                this.mergeUnknownFields(other.getUnknownFields());
                this.onChanged();
                return this;
            }
            
            @Override
            public final boolean isInitialized() {
                if (this.hasFeatures() && !this.getFeatures().isInitialized()) {
                    return false;
                }
                for (int i = 0; i < this.getUninterpretedOptionCount(); ++i) {
                    if (!this.getUninterpretedOption(i).isInitialized()) {
                        return false;
                    }
                }
                return this.extensionsAreInitialized();
            }
            
            @Override
            public Builder mergeFrom(final CodedInputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
                if (extensionRegistry == null) {
                    throw new NullPointerException();
                }
                try {
                    boolean done = false;
                    while (!done) {
                        final int tag = input.readTag();
                        switch (tag) {
                            case 0: {
                                done = true;
                                continue;
                            }
                            case 8: {
                                this.messageSetWireFormat_ = input.readBool();
                                this.bitField0_ |= 0x1;
                                continue;
                            }
                            case 16: {
                                this.noStandardDescriptorAccessor_ = input.readBool();
                                this.bitField0_ |= 0x2;
                                continue;
                            }
                            case 24: {
                                this.deprecated_ = input.readBool();
                                this.bitField0_ |= 0x4;
                                continue;
                            }
                            case 56: {
                                this.mapEntry_ = input.readBool();
                                this.bitField0_ |= 0x8;
                                continue;
                            }
                            case 88: {
                                this.deprecatedLegacyJsonFieldConflicts_ = input.readBool();
                                this.bitField0_ |= 0x10;
                                continue;
                            }
                            case 98: {
                                input.readMessage(this.internalGetFeaturesFieldBuilder().getBuilder(), extensionRegistry);
                                this.bitField0_ |= 0x20;
                                continue;
                            }
                            case 7994: {
                                final UninterpretedOption m = input.readMessage(UninterpretedOption.parser(), extensionRegistry);
                                if (this.uninterpretedOptionBuilder_ == null) {
                                    this.ensureUninterpretedOptionIsMutable();
                                    this.uninterpretedOption_.add(m);
                                    continue;
                                }
                                this.uninterpretedOptionBuilder_.addMessage(m);
                                continue;
                            }
                            default: {
                                if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                                    done = true;
                                    continue;
                                }
                                continue;
                            }
                        }
                    }
                }
                catch (final InvalidProtocolBufferException e) {
                    throw e.unwrapIOException();
                }
                finally {
                    this.onChanged();
                }
                return this;
            }
            
            @Override
            public boolean hasMessageSetWireFormat() {
                return (this.bitField0_ & 0x1) != 0x0;
            }
            
            @Override
            public boolean getMessageSetWireFormat() {
                return this.messageSetWireFormat_;
            }
            
            public Builder setMessageSetWireFormat(final boolean value) {
                this.messageSetWireFormat_ = value;
                this.bitField0_ |= 0x1;
                this.onChanged();
                return this;
            }
            
            public Builder clearMessageSetWireFormat() {
                this.bitField0_ &= 0xFFFFFFFE;
                this.messageSetWireFormat_ = false;
                this.onChanged();
                return this;
            }
            
            @Override
            public boolean hasNoStandardDescriptorAccessor() {
                return (this.bitField0_ & 0x2) != 0x0;
            }
            
            @Override
            public boolean getNoStandardDescriptorAccessor() {
                return this.noStandardDescriptorAccessor_;
            }
            
            public Builder setNoStandardDescriptorAccessor(final boolean value) {
                this.noStandardDescriptorAccessor_ = value;
                this.bitField0_ |= 0x2;
                this.onChanged();
                return this;
            }
            
            public Builder clearNoStandardDescriptorAccessor() {
                this.bitField0_ &= 0xFFFFFFFD;
                this.noStandardDescriptorAccessor_ = false;
                this.onChanged();
                return this;
            }
            
            @Override
            public boolean hasDeprecated() {
                return (this.bitField0_ & 0x4) != 0x0;
            }
            
            @Override
            public boolean getDeprecated() {
                return this.deprecated_;
            }
            
            public Builder setDeprecated(final boolean value) {
                this.deprecated_ = value;
                this.bitField0_ |= 0x4;
                this.onChanged();
                return this;
            }
            
            public Builder clearDeprecated() {
                this.bitField0_ &= 0xFFFFFFFB;
                this.deprecated_ = false;
                this.onChanged();
                return this;
            }
            
            @Override
            public boolean hasMapEntry() {
                return (this.bitField0_ & 0x8) != 0x0;
            }
            
            @Override
            public boolean getMapEntry() {
                return this.mapEntry_;
            }
            
            public Builder setMapEntry(final boolean value) {
                this.mapEntry_ = value;
                this.bitField0_ |= 0x8;
                this.onChanged();
                return this;
            }
            
            public Builder clearMapEntry() {
                this.bitField0_ &= 0xFFFFFFF7;
                this.mapEntry_ = false;
                this.onChanged();
                return this;
            }
            
            @Deprecated
            @Override
            public boolean hasDeprecatedLegacyJsonFieldConflicts() {
                return (this.bitField0_ & 0x10) != 0x0;
            }
            
            @Deprecated
            @Override
            public boolean getDeprecatedLegacyJsonFieldConflicts() {
                return this.deprecatedLegacyJsonFieldConflicts_;
            }
            
            @Deprecated
            public Builder setDeprecatedLegacyJsonFieldConflicts(final boolean value) {
                this.deprecatedLegacyJsonFieldConflicts_ = value;
                this.bitField0_ |= 0x10;
                this.onChanged();
                return this;
            }
            
            @Deprecated
            public Builder clearDeprecatedLegacyJsonFieldConflicts() {
                this.bitField0_ &= 0xFFFFFFEF;
                this.deprecatedLegacyJsonFieldConflicts_ = false;
                this.onChanged();
                return this;
            }
            
            @Override
            public boolean hasFeatures() {
                return (this.bitField0_ & 0x20) != 0x0;
            }
            
            @Override
            public FeatureSet getFeatures() {
                if (this.featuresBuilder_ == null) {
                    return (this.features_ == null) ? FeatureSet.getDefaultInstance() : this.features_;
                }
                return this.featuresBuilder_.getMessage();
            }
            
            public Builder setFeatures(final FeatureSet value) {
                if (this.featuresBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.features_ = value;
                }
                else {
                    this.featuresBuilder_.setMessage(value);
                }
                this.bitField0_ |= 0x20;
                this.onChanged();
                return this;
            }
            
            public Builder setFeatures(final FeatureSet.Builder builderForValue) {
                if (this.featuresBuilder_ == null) {
                    this.features_ = builderForValue.build();
                }
                else {
                    this.featuresBuilder_.setMessage(builderForValue.build());
                }
                this.bitField0_ |= 0x20;
                this.onChanged();
                return this;
            }
            
            public Builder mergeFeatures(final FeatureSet value) {
                if (this.featuresBuilder_ == null) {
                    if ((this.bitField0_ & 0x20) != 0x0 && this.features_ != null && this.features_ != FeatureSet.getDefaultInstance()) {
                        this.getFeaturesBuilder().mergeFrom(value);
                    }
                    else {
                        this.features_ = value;
                    }
                }
                else {
                    this.featuresBuilder_.mergeFrom(value);
                }
                if (this.features_ != null) {
                    this.bitField0_ |= 0x20;
                    this.onChanged();
                }
                return this;
            }
            
            public Builder clearFeatures() {
                this.bitField0_ &= 0xFFFFFFDF;
                this.features_ = null;
                if (this.featuresBuilder_ != null) {
                    this.featuresBuilder_.dispose();
                    this.featuresBuilder_ = null;
                }
                this.onChanged();
                return this;
            }
            
            public FeatureSet.Builder getFeaturesBuilder() {
                this.bitField0_ |= 0x20;
                this.onChanged();
                return this.internalGetFeaturesFieldBuilder().getBuilder();
            }
            
            @Override
            public FeatureSetOrBuilder getFeaturesOrBuilder() {
                if (this.featuresBuilder_ != null) {
                    return this.featuresBuilder_.getMessageOrBuilder();
                }
                return (this.features_ == null) ? FeatureSet.getDefaultInstance() : this.features_;
            }
            
            private SingleFieldBuilder<FeatureSet, FeatureSet.Builder, FeatureSetOrBuilder> internalGetFeaturesFieldBuilder() {
                if (this.featuresBuilder_ == null) {
                    this.featuresBuilder_ = new SingleFieldBuilder<FeatureSet, FeatureSet.Builder, FeatureSetOrBuilder>(this.getFeatures(), this.getParentForChildren(), this.isClean());
                    this.features_ = null;
                }
                return this.featuresBuilder_;
            }
            
            private void ensureUninterpretedOptionIsMutable() {
                if ((this.bitField0_ & 0x40) == 0x0) {
                    this.uninterpretedOption_ = new ArrayList<UninterpretedOption>(this.uninterpretedOption_);
                    this.bitField0_ |= 0x40;
                }
            }
            
            @Override
            public List<UninterpretedOption> getUninterpretedOptionList() {
                if (this.uninterpretedOptionBuilder_ == null) {
                    return Collections.unmodifiableList((List<? extends UninterpretedOption>)this.uninterpretedOption_);
                }
                return this.uninterpretedOptionBuilder_.getMessageList();
            }
            
            @Override
            public int getUninterpretedOptionCount() {
                if (this.uninterpretedOptionBuilder_ == null) {
                    return this.uninterpretedOption_.size();
                }
                return this.uninterpretedOptionBuilder_.getCount();
            }
            
            @Override
            public UninterpretedOption getUninterpretedOption(final int index) {
                if (this.uninterpretedOptionBuilder_ == null) {
                    return this.uninterpretedOption_.get(index);
                }
                return this.uninterpretedOptionBuilder_.getMessage(index);
            }
            
            public Builder setUninterpretedOption(final int index, final UninterpretedOption value) {
                if (this.uninterpretedOptionBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.ensureUninterpretedOptionIsMutable();
                    this.uninterpretedOption_.set(index, value);
                    this.onChanged();
                }
                else {
                    this.uninterpretedOptionBuilder_.setMessage(index, value);
                }
                return this;
            }
            
            public Builder setUninterpretedOption(final int index, final UninterpretedOption.Builder builderForValue) {
                if (this.uninterpretedOptionBuilder_ == null) {
                    this.ensureUninterpretedOptionIsMutable();
                    this.uninterpretedOption_.set(index, builderForValue.build());
                    this.onChanged();
                }
                else {
                    this.uninterpretedOptionBuilder_.setMessage(index, builderForValue.build());
                }
                return this;
            }
            
            public Builder addUninterpretedOption(final UninterpretedOption value) {
                if (this.uninterpretedOptionBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.ensureUninterpretedOptionIsMutable();
                    this.uninterpretedOption_.add(value);
                    this.onChanged();
                }
                else {
                    this.uninterpretedOptionBuilder_.addMessage(value);
                }
                return this;
            }
            
            public Builder addUninterpretedOption(final int index, final UninterpretedOption value) {
                if (this.uninterpretedOptionBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.ensureUninterpretedOptionIsMutable();
                    this.uninterpretedOption_.add(index, value);
                    this.onChanged();
                }
                else {
                    this.uninterpretedOptionBuilder_.addMessage(index, value);
                }
                return this;
            }
            
            public Builder addUninterpretedOption(final UninterpretedOption.Builder builderForValue) {
                if (this.uninterpretedOptionBuilder_ == null) {
                    this.ensureUninterpretedOptionIsMutable();
                    this.uninterpretedOption_.add(builderForValue.build());
                    this.onChanged();
                }
                else {
                    this.uninterpretedOptionBuilder_.addMessage(builderForValue.build());
                }
                return this;
            }
            
            public Builder addUninterpretedOption(final int index, final UninterpretedOption.Builder builderForValue) {
                if (this.uninterpretedOptionBuilder_ == null) {
                    this.ensureUninterpretedOptionIsMutable();
                    this.uninterpretedOption_.add(index, builderForValue.build());
                    this.onChanged();
                }
                else {
                    this.uninterpretedOptionBuilder_.addMessage(index, builderForValue.build());
                }
                return this;
            }
            
            public Builder addAllUninterpretedOption(final Iterable<? extends UninterpretedOption> values) {
                if (this.uninterpretedOptionBuilder_ == null) {
                    this.ensureUninterpretedOptionIsMutable();
                    AbstractMessageLite.Builder.addAll(values, this.uninterpretedOption_);
                    this.onChanged();
                }
                else {
                    this.uninterpretedOptionBuilder_.addAllMessages(values);
                }
                return this;
            }
            
            public Builder clearUninterpretedOption() {
                if (this.uninterpretedOptionBuilder_ == null) {
                    this.uninterpretedOption_ = Collections.emptyList();
                    this.bitField0_ &= 0xFFFFFFBF;
                    this.onChanged();
                }
                else {
                    this.uninterpretedOptionBuilder_.clear();
                }
                return this;
            }
            
            public Builder removeUninterpretedOption(final int index) {
                if (this.uninterpretedOptionBuilder_ == null) {
                    this.ensureUninterpretedOptionIsMutable();
                    this.uninterpretedOption_.remove(index);
                    this.onChanged();
                }
                else {
                    this.uninterpretedOptionBuilder_.remove(index);
                }
                return this;
            }
            
            public UninterpretedOption.Builder getUninterpretedOptionBuilder(final int index) {
                return this.internalGetUninterpretedOptionFieldBuilder().getBuilder(index);
            }
            
            @Override
            public UninterpretedOptionOrBuilder getUninterpretedOptionOrBuilder(final int index) {
                if (this.uninterpretedOptionBuilder_ == null) {
                    return this.uninterpretedOption_.get(index);
                }
                return this.uninterpretedOptionBuilder_.getMessageOrBuilder(index);
            }
            
            @Override
            public List<? extends UninterpretedOptionOrBuilder> getUninterpretedOptionOrBuilderList() {
                if (this.uninterpretedOptionBuilder_ != null) {
                    return this.uninterpretedOptionBuilder_.getMessageOrBuilderList();
                }
                return Collections.unmodifiableList((List<? extends UninterpretedOptionOrBuilder>)this.uninterpretedOption_);
            }
            
            public UninterpretedOption.Builder addUninterpretedOptionBuilder() {
                return this.internalGetUninterpretedOptionFieldBuilder().addBuilder(UninterpretedOption.getDefaultInstance());
            }
            
            public UninterpretedOption.Builder addUninterpretedOptionBuilder(final int index) {
                return this.internalGetUninterpretedOptionFieldBuilder().addBuilder(index, UninterpretedOption.getDefaultInstance());
            }
            
            public List<UninterpretedOption.Builder> getUninterpretedOptionBuilderList() {
                return this.internalGetUninterpretedOptionFieldBuilder().getBuilderList();
            }
            
            private RepeatedFieldBuilder<UninterpretedOption, UninterpretedOption.Builder, UninterpretedOptionOrBuilder> internalGetUninterpretedOptionFieldBuilder() {
                if (this.uninterpretedOptionBuilder_ == null) {
                    this.uninterpretedOptionBuilder_ = new RepeatedFieldBuilder<UninterpretedOption, UninterpretedOption.Builder, UninterpretedOptionOrBuilder>(this.uninterpretedOption_, (this.bitField0_ & 0x40) != 0x0, this.getParentForChildren(), this.isClean());
                    this.uninterpretedOption_ = null;
                }
                return this.uninterpretedOptionBuilder_;
            }
        }
    }
    
    public static final class FieldOptions extends ExtendableMessage<FieldOptions> implements FieldOptionsOrBuilder
    {
        private static final long serialVersionUID = 0L;
        private int bitField0_;
        public static final int CTYPE_FIELD_NUMBER = 1;
        private int ctype_;
        public static final int PACKED_FIELD_NUMBER = 2;
        private boolean packed_;
        public static final int JSTYPE_FIELD_NUMBER = 6;
        private int jstype_;
        public static final int LAZY_FIELD_NUMBER = 5;
        private boolean lazy_;
        public static final int UNVERIFIED_LAZY_FIELD_NUMBER = 15;
        private boolean unverifiedLazy_;
        public static final int DEPRECATED_FIELD_NUMBER = 3;
        private boolean deprecated_;
        public static final int WEAK_FIELD_NUMBER = 10;
        private boolean weak_;
        public static final int DEBUG_REDACT_FIELD_NUMBER = 16;
        private boolean debugRedact_;
        public static final int RETENTION_FIELD_NUMBER = 17;
        private int retention_;
        public static final int TARGETS_FIELD_NUMBER = 19;
        private Internal.IntList targets_;
        private static final Internal.IntListAdapter.IntConverter<OptionTargetType> targets_converter_;
        public static final int EDITION_DEFAULTS_FIELD_NUMBER = 20;
        private List<EditionDefault> editionDefaults_;
        public static final int FEATURES_FIELD_NUMBER = 21;
        private FeatureSet features_;
        public static final int FEATURE_SUPPORT_FIELD_NUMBER = 22;
        private FeatureSupport featureSupport_;
        public static final int UNINTERPRETED_OPTION_FIELD_NUMBER = 999;
        private List<UninterpretedOption> uninterpretedOption_;
        private byte memoizedIsInitialized;
        private static final FieldOptions DEFAULT_INSTANCE;
        private static final Parser<FieldOptions> PARSER;
        
        private FieldOptions(final ExtendableBuilder<FieldOptions, ?> builder) {
            super(builder);
            this.ctype_ = 0;
            this.packed_ = false;
            this.jstype_ = 0;
            this.lazy_ = false;
            this.unverifiedLazy_ = false;
            this.deprecated_ = false;
            this.weak_ = false;
            this.debugRedact_ = false;
            this.retention_ = 0;
            this.targets_ = GeneratedMessage.emptyIntList();
            this.memoizedIsInitialized = -1;
        }
        
        private FieldOptions() {
            this.ctype_ = 0;
            this.packed_ = false;
            this.jstype_ = 0;
            this.lazy_ = false;
            this.unverifiedLazy_ = false;
            this.deprecated_ = false;
            this.weak_ = false;
            this.debugRedact_ = false;
            this.retention_ = 0;
            this.targets_ = GeneratedMessage.emptyIntList();
            this.memoizedIsInitialized = -1;
            this.ctype_ = 0;
            this.jstype_ = 0;
            this.retention_ = 0;
            this.targets_ = GeneratedMessage.emptyIntList();
            this.editionDefaults_ = Collections.emptyList();
            this.uninterpretedOption_ = Collections.emptyList();
        }
        
        public static final Descriptors.Descriptor getDescriptor() {
            return DescriptorProtos.internal_static_google_protobuf_FieldOptions_descriptor;
        }
        
        @Override
        protected FieldAccessorTable internalGetFieldAccessorTable() {
            return DescriptorProtos.internal_static_google_protobuf_FieldOptions_fieldAccessorTable.ensureFieldAccessorsInitialized(FieldOptions.class, Builder.class);
        }
        
        @Override
        public boolean hasCtype() {
            return (this.bitField0_ & 0x1) != 0x0;
        }
        
        @Override
        public CType getCtype() {
            final CType result = CType.forNumber(this.ctype_);
            return (result == null) ? CType.STRING : result;
        }
        
        @Override
        public boolean hasPacked() {
            return (this.bitField0_ & 0x2) != 0x0;
        }
        
        @Override
        public boolean getPacked() {
            return this.packed_;
        }
        
        @Override
        public boolean hasJstype() {
            return (this.bitField0_ & 0x4) != 0x0;
        }
        
        @Override
        public JSType getJstype() {
            final JSType result = JSType.forNumber(this.jstype_);
            return (result == null) ? JSType.JS_NORMAL : result;
        }
        
        @Override
        public boolean hasLazy() {
            return (this.bitField0_ & 0x8) != 0x0;
        }
        
        @Override
        public boolean getLazy() {
            return this.lazy_;
        }
        
        @Override
        public boolean hasUnverifiedLazy() {
            return (this.bitField0_ & 0x10) != 0x0;
        }
        
        @Override
        public boolean getUnverifiedLazy() {
            return this.unverifiedLazy_;
        }
        
        @Override
        public boolean hasDeprecated() {
            return (this.bitField0_ & 0x20) != 0x0;
        }
        
        @Override
        public boolean getDeprecated() {
            return this.deprecated_;
        }
        
        @Deprecated
        @Override
        public boolean hasWeak() {
            return (this.bitField0_ & 0x40) != 0x0;
        }
        
        @Deprecated
        @Override
        public boolean getWeak() {
            return this.weak_;
        }
        
        @Override
        public boolean hasDebugRedact() {
            return (this.bitField0_ & 0x80) != 0x0;
        }
        
        @Override
        public boolean getDebugRedact() {
            return this.debugRedact_;
        }
        
        @Override
        public boolean hasRetention() {
            return (this.bitField0_ & 0x100) != 0x0;
        }
        
        @Override
        public OptionRetention getRetention() {
            final OptionRetention result = OptionRetention.forNumber(this.retention_);
            return (result == null) ? OptionRetention.RETENTION_UNKNOWN : result;
        }
        
        @Override
        public List<OptionTargetType> getTargetsList() {
            return new Internal.IntListAdapter<OptionTargetType>(this.targets_, FieldOptions.targets_converter_);
        }
        
        @Override
        public int getTargetsCount() {
            return this.targets_.size();
        }
        
        @Override
        public OptionTargetType getTargets(final int index) {
            return FieldOptions.targets_converter_.convert(this.targets_.getInt(index));
        }
        
        @Override
        public List<EditionDefault> getEditionDefaultsList() {
            return this.editionDefaults_;
        }
        
        @Override
        public List<? extends EditionDefaultOrBuilder> getEditionDefaultsOrBuilderList() {
            return this.editionDefaults_;
        }
        
        @Override
        public int getEditionDefaultsCount() {
            return this.editionDefaults_.size();
        }
        
        @Override
        public EditionDefault getEditionDefaults(final int index) {
            return this.editionDefaults_.get(index);
        }
        
        @Override
        public EditionDefaultOrBuilder getEditionDefaultsOrBuilder(final int index) {
            return this.editionDefaults_.get(index);
        }
        
        @Override
        public boolean hasFeatures() {
            return (this.bitField0_ & 0x200) != 0x0;
        }
        
        @Override
        public FeatureSet getFeatures() {
            return (this.features_ == null) ? FeatureSet.getDefaultInstance() : this.features_;
        }
        
        @Override
        public FeatureSetOrBuilder getFeaturesOrBuilder() {
            return (this.features_ == null) ? FeatureSet.getDefaultInstance() : this.features_;
        }
        
        @Override
        public boolean hasFeatureSupport() {
            return (this.bitField0_ & 0x400) != 0x0;
        }
        
        @Override
        public FeatureSupport getFeatureSupport() {
            return (this.featureSupport_ == null) ? FeatureSupport.getDefaultInstance() : this.featureSupport_;
        }
        
        @Override
        public FeatureSupportOrBuilder getFeatureSupportOrBuilder() {
            return (this.featureSupport_ == null) ? FeatureSupport.getDefaultInstance() : this.featureSupport_;
        }
        
        @Override
        public List<UninterpretedOption> getUninterpretedOptionList() {
            return this.uninterpretedOption_;
        }
        
        @Override
        public List<? extends UninterpretedOptionOrBuilder> getUninterpretedOptionOrBuilderList() {
            return this.uninterpretedOption_;
        }
        
        @Override
        public int getUninterpretedOptionCount() {
            return this.uninterpretedOption_.size();
        }
        
        @Override
        public UninterpretedOption getUninterpretedOption(final int index) {
            return this.uninterpretedOption_.get(index);
        }
        
        @Override
        public UninterpretedOptionOrBuilder getUninterpretedOptionOrBuilder(final int index) {
            return this.uninterpretedOption_.get(index);
        }
        
        @Override
        public final boolean isInitialized() {
            final byte isInitialized = this.memoizedIsInitialized;
            if (isInitialized == 1) {
                return true;
            }
            if (isInitialized == 0) {
                return false;
            }
            if (this.hasFeatures() && !this.getFeatures().isInitialized()) {
                this.memoizedIsInitialized = 0;
                return false;
            }
            for (int i = 0; i < this.getUninterpretedOptionCount(); ++i) {
                if (!this.getUninterpretedOption(i).isInitialized()) {
                    this.memoizedIsInitialized = 0;
                    return false;
                }
            }
            if (!this.extensionsAreInitialized()) {
                this.memoizedIsInitialized = 0;
                return false;
            }
            this.memoizedIsInitialized = 1;
            return true;
        }
        
        @Override
        public void writeTo(final CodedOutputStream output) throws IOException {
            final ExtensionSerializer extensionWriter = this.newExtensionSerializer();
            if ((this.bitField0_ & 0x1) != 0x0) {
                output.writeEnum(1, this.ctype_);
            }
            if ((this.bitField0_ & 0x2) != 0x0) {
                output.writeBool(2, this.packed_);
            }
            if ((this.bitField0_ & 0x20) != 0x0) {
                output.writeBool(3, this.deprecated_);
            }
            if ((this.bitField0_ & 0x8) != 0x0) {
                output.writeBool(5, this.lazy_);
            }
            if ((this.bitField0_ & 0x4) != 0x0) {
                output.writeEnum(6, this.jstype_);
            }
            if ((this.bitField0_ & 0x40) != 0x0) {
                output.writeBool(10, this.weak_);
            }
            if ((this.bitField0_ & 0x10) != 0x0) {
                output.writeBool(15, this.unverifiedLazy_);
            }
            if ((this.bitField0_ & 0x80) != 0x0) {
                output.writeBool(16, this.debugRedact_);
            }
            if ((this.bitField0_ & 0x100) != 0x0) {
                output.writeEnum(17, this.retention_);
            }
            for (int i = 0; i < this.targets_.size(); ++i) {
                output.writeEnum(19, this.targets_.getInt(i));
            }
            for (int i = 0; i < this.editionDefaults_.size(); ++i) {
                output.writeMessage(20, this.editionDefaults_.get(i));
            }
            if ((this.bitField0_ & 0x200) != 0x0) {
                output.writeMessage(21, this.getFeatures());
            }
            if ((this.bitField0_ & 0x400) != 0x0) {
                output.writeMessage(22, this.getFeatureSupport());
            }
            for (int i = 0; i < this.uninterpretedOption_.size(); ++i) {
                output.writeMessage(999, this.uninterpretedOption_.get(i));
            }
            extensionWriter.writeUntil(536870912, output);
            this.getUnknownFields().writeTo(output);
        }
        
        @Override
        public int getSerializedSize() {
            int size = this.memoizedSize;
            if (size != -1) {
                return size;
            }
            size = 0;
            if ((this.bitField0_ & 0x1) != 0x0) {
                size += CodedOutputStream.computeEnumSize(1, this.ctype_);
            }
            if ((this.bitField0_ & 0x2) != 0x0) {
                size += CodedOutputStream.computeBoolSize(2, this.packed_);
            }
            if ((this.bitField0_ & 0x20) != 0x0) {
                size += CodedOutputStream.computeBoolSize(3, this.deprecated_);
            }
            if ((this.bitField0_ & 0x8) != 0x0) {
                size += CodedOutputStream.computeBoolSize(5, this.lazy_);
            }
            if ((this.bitField0_ & 0x4) != 0x0) {
                size += CodedOutputStream.computeEnumSize(6, this.jstype_);
            }
            if ((this.bitField0_ & 0x40) != 0x0) {
                size += CodedOutputStream.computeBoolSize(10, this.weak_);
            }
            if ((this.bitField0_ & 0x10) != 0x0) {
                size += CodedOutputStream.computeBoolSize(15, this.unverifiedLazy_);
            }
            if ((this.bitField0_ & 0x80) != 0x0) {
                size += CodedOutputStream.computeBoolSize(16, this.debugRedact_);
            }
            if ((this.bitField0_ & 0x100) != 0x0) {
                size += CodedOutputStream.computeEnumSize(17, this.retention_);
            }
            int dataSize = 0;
            for (int i = 0; i < this.targets_.size(); ++i) {
                dataSize += CodedOutputStream.computeEnumSizeNoTag(this.targets_.getInt(i));
            }
            size += dataSize;
            size += 2 * this.targets_.size();
            for (int j = 0; j < this.editionDefaults_.size(); ++j) {
                size += CodedOutputStream.computeMessageSize(20, this.editionDefaults_.get(j));
            }
            if ((this.bitField0_ & 0x200) != 0x0) {
                size += CodedOutputStream.computeMessageSize(21, this.getFeatures());
            }
            if ((this.bitField0_ & 0x400) != 0x0) {
                size += CodedOutputStream.computeMessageSize(22, this.getFeatureSupport());
            }
            for (int j = 0; j < this.uninterpretedOption_.size(); ++j) {
                size += CodedOutputStream.computeMessageSize(999, this.uninterpretedOption_.get(j));
            }
            size += this.extensionsSerializedSize();
            size += this.getUnknownFields().getSerializedSize();
            return this.memoizedSize = size;
        }
        
        @Override
        public boolean equals(final Object obj) {
            if (obj == this) {
                return true;
            }
            if (!(obj instanceof FieldOptions)) {
                return super.equals(obj);
            }
            final FieldOptions other = (FieldOptions)obj;
            return this.hasCtype() == other.hasCtype() && (!this.hasCtype() || this.ctype_ == other.ctype_) && this.hasPacked() == other.hasPacked() && (!this.hasPacked() || this.getPacked() == other.getPacked()) && this.hasJstype() == other.hasJstype() && (!this.hasJstype() || this.jstype_ == other.jstype_) && this.hasLazy() == other.hasLazy() && (!this.hasLazy() || this.getLazy() == other.getLazy()) && this.hasUnverifiedLazy() == other.hasUnverifiedLazy() && (!this.hasUnverifiedLazy() || this.getUnverifiedLazy() == other.getUnverifiedLazy()) && this.hasDeprecated() == other.hasDeprecated() && (!this.hasDeprecated() || this.getDeprecated() == other.getDeprecated()) && this.hasWeak() == other.hasWeak() && (!this.hasWeak() || this.getWeak() == other.getWeak()) && this.hasDebugRedact() == other.hasDebugRedact() && (!this.hasDebugRedact() || this.getDebugRedact() == other.getDebugRedact()) && this.hasRetention() == other.hasRetention() && (!this.hasRetention() || this.retention_ == other.retention_) && this.targets_.equals(other.targets_) && this.getEditionDefaultsList().equals(other.getEditionDefaultsList()) && this.hasFeatures() == other.hasFeatures() && (!this.hasFeatures() || this.getFeatures().equals(other.getFeatures())) && this.hasFeatureSupport() == other.hasFeatureSupport() && (!this.hasFeatureSupport() || this.getFeatureSupport().equals(other.getFeatureSupport())) && this.getUninterpretedOptionList().equals(other.getUninterpretedOptionList()) && this.getUnknownFields().equals(other.getUnknownFields()) && this.getExtensionFields().equals(other.getExtensionFields());
        }
        
        @Override
        public int hashCode() {
            if (this.memoizedHashCode != 0) {
                return this.memoizedHashCode;
            }
            int hash = 41;
            hash = 19 * hash + getDescriptor().hashCode();
            if (this.hasCtype()) {
                hash = 37 * hash + 1;
                hash = 53 * hash + this.ctype_;
            }
            if (this.hasPacked()) {
                hash = 37 * hash + 2;
                hash = 53 * hash + Internal.hashBoolean(this.getPacked());
            }
            if (this.hasJstype()) {
                hash = 37 * hash + 6;
                hash = 53 * hash + this.jstype_;
            }
            if (this.hasLazy()) {
                hash = 37 * hash + 5;
                hash = 53 * hash + Internal.hashBoolean(this.getLazy());
            }
            if (this.hasUnverifiedLazy()) {
                hash = 37 * hash + 15;
                hash = 53 * hash + Internal.hashBoolean(this.getUnverifiedLazy());
            }
            if (this.hasDeprecated()) {
                hash = 37 * hash + 3;
                hash = 53 * hash + Internal.hashBoolean(this.getDeprecated());
            }
            if (this.hasWeak()) {
                hash = 37 * hash + 10;
                hash = 53 * hash + Internal.hashBoolean(this.getWeak());
            }
            if (this.hasDebugRedact()) {
                hash = 37 * hash + 16;
                hash = 53 * hash + Internal.hashBoolean(this.getDebugRedact());
            }
            if (this.hasRetention()) {
                hash = 37 * hash + 17;
                hash = 53 * hash + this.retention_;
            }
            if (this.getTargetsCount() > 0) {
                hash = 37 * hash + 19;
                hash = 53 * hash + this.targets_.hashCode();
            }
            if (this.getEditionDefaultsCount() > 0) {
                hash = 37 * hash + 20;
                hash = 53 * hash + this.getEditionDefaultsList().hashCode();
            }
            if (this.hasFeatures()) {
                hash = 37 * hash + 21;
                hash = 53 * hash + this.getFeatures().hashCode();
            }
            if (this.hasFeatureSupport()) {
                hash = 37 * hash + 22;
                hash = 53 * hash + this.getFeatureSupport().hashCode();
            }
            if (this.getUninterpretedOptionCount() > 0) {
                hash = 37 * hash + 999;
                hash = 53 * hash + this.getUninterpretedOptionList().hashCode();
            }
            hash = AbstractMessage.hashFields(hash, this.getExtensionFields());
            hash = 29 * hash + this.getUnknownFields().hashCode();
            return this.memoizedHashCode = hash;
        }
        
        public static FieldOptions parseFrom(final ByteBuffer data) throws InvalidProtocolBufferException {
            return FieldOptions.PARSER.parseFrom(data);
        }
        
        public static FieldOptions parseFrom(final ByteBuffer data, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
            return FieldOptions.PARSER.parseFrom(data, extensionRegistry);
        }
        
        public static FieldOptions parseFrom(final ByteString data) throws InvalidProtocolBufferException {
            return FieldOptions.PARSER.parseFrom(data);
        }
        
        public static FieldOptions parseFrom(final ByteString data, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
            return FieldOptions.PARSER.parseFrom(data, extensionRegistry);
        }
        
        public static FieldOptions parseFrom(final byte[] data) throws InvalidProtocolBufferException {
            return FieldOptions.PARSER.parseFrom(data);
        }
        
        public static FieldOptions parseFrom(final byte[] data, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
            return FieldOptions.PARSER.parseFrom(data, extensionRegistry);
        }
        
        public static FieldOptions parseFrom(final InputStream input) throws IOException {
            return GeneratedMessage.parseWithIOException(FieldOptions.PARSER, input);
        }
        
        public static FieldOptions parseFrom(final InputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
            return GeneratedMessage.parseWithIOException(FieldOptions.PARSER, input, extensionRegistry);
        }
        
        public static FieldOptions parseDelimitedFrom(final InputStream input) throws IOException {
            return GeneratedMessage.parseDelimitedWithIOException(FieldOptions.PARSER, input);
        }
        
        public static FieldOptions parseDelimitedFrom(final InputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
            return GeneratedMessage.parseDelimitedWithIOException(FieldOptions.PARSER, input, extensionRegistry);
        }
        
        public static FieldOptions parseFrom(final CodedInputStream input) throws IOException {
            return GeneratedMessage.parseWithIOException(FieldOptions.PARSER, input);
        }
        
        public static FieldOptions parseFrom(final CodedInputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
            return GeneratedMessage.parseWithIOException(FieldOptions.PARSER, input, extensionRegistry);
        }
        
        @Override
        public Builder newBuilderForType() {
            return newBuilder();
        }
        
        public static Builder newBuilder() {
            return FieldOptions.DEFAULT_INSTANCE.toBuilder();
        }
        
        public static Builder newBuilder(final FieldOptions prototype) {
            return FieldOptions.DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
        }
        
        @Override
        public Builder toBuilder() {
            return (this == FieldOptions.DEFAULT_INSTANCE) ? new Builder() : new Builder().mergeFrom(this);
        }
        
        @Override
        protected Builder newBuilderForType(final BuilderParent parent) {
            final Builder builder = new Builder(parent);
            return builder;
        }
        
        public static FieldOptions getDefaultInstance() {
            return FieldOptions.DEFAULT_INSTANCE;
        }
        
        public static Parser<FieldOptions> parser() {
            return FieldOptions.PARSER;
        }
        
        @Override
        public Parser<FieldOptions> getParserForType() {
            return FieldOptions.PARSER;
        }
        
        @Override
        public FieldOptions getDefaultInstanceForType() {
            return FieldOptions.DEFAULT_INSTANCE;
        }
        
        static {
            RuntimeVersion.validateProtobufGencodeVersion(RuntimeVersion.RuntimeDomain.PUBLIC, 4, 33, 0, "", "FieldOptions");
            targets_converter_ = new Internal.IntListAdapter.IntConverter<OptionTargetType>() {
                @Override
                public OptionTargetType convert(final int from) {
                    final OptionTargetType result = OptionTargetType.forNumber(from);
                    return (result == null) ? OptionTargetType.TARGET_TYPE_UNKNOWN : result;
                }
            };
            DEFAULT_INSTANCE = new FieldOptions();
            PARSER = new AbstractParser<FieldOptions>() {
                @Override
                public FieldOptions parsePartialFrom(final CodedInputStream input, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
                    final Builder builder = FieldOptions.newBuilder();
                    try {
                        builder.mergeFrom(input, extensionRegistry);
                    }
                    catch (final InvalidProtocolBufferException e) {
                        throw e.setUnfinishedMessage(builder.buildPartial());
                    }
                    catch (final UninitializedMessageException e2) {
                        throw e2.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
                    }
                    catch (final IOException e3) {
                        throw new InvalidProtocolBufferException(e3).setUnfinishedMessage(builder.buildPartial());
                    }
                    return builder.buildPartial();
                }
            };
        }
        
        public enum CType implements ProtocolMessageEnum
        {
            STRING(0), 
            CORD(1), 
            STRING_PIECE(2);
            
            public static final int STRING_VALUE = 0;
            public static final int CORD_VALUE = 1;
            public static final int STRING_PIECE_VALUE = 2;
            private static final Internal.EnumLiteMap<CType> internalValueMap;
            private static final CType[] VALUES;
            private final int value;
            
            @Override
            public final int getNumber() {
                return this.value;
            }
            
            @Deprecated
            public static CType valueOf(final int value) {
                return forNumber(value);
            }
            
            public static CType forNumber(final int value) {
                switch (value) {
                    case 0: {
                        return CType.STRING;
                    }
                    case 1: {
                        return CType.CORD;
                    }
                    case 2: {
                        return CType.STRING_PIECE;
                    }
                    default: {
                        return null;
                    }
                }
            }
            
            public static Internal.EnumLiteMap<CType> internalGetValueMap() {
                return CType.internalValueMap;
            }
            
            @Override
            public final Descriptors.EnumValueDescriptor getValueDescriptor() {
                return getDescriptor().getValues().get(this.ordinal());
            }
            
            @Override
            public final Descriptors.EnumDescriptor getDescriptorForType() {
                return getDescriptor();
            }
            
            public static Descriptors.EnumDescriptor getDescriptor() {
                return FieldOptions.getDescriptor().getEnumTypes().get(0);
            }
            
            public static CType valueOf(final Descriptors.EnumValueDescriptor desc) {
                if (desc.getType() != getDescriptor()) {
                    throw new IllegalArgumentException("EnumValueDescriptor is not for this type.");
                }
                return CType.VALUES[desc.getIndex()];
            }
            
            private CType(final int value) {
                this.value = value;
            }
            
            static {
                RuntimeVersion.validateProtobufGencodeVersion(RuntimeVersion.RuntimeDomain.PUBLIC, 4, 33, 0, "", "CType");
                internalValueMap = new Internal.EnumLiteMap<CType>() {
                    @Override
                    public CType findValueByNumber(final int number) {
                        return CType.forNumber(number);
                    }
                };
                VALUES = values();
            }
        }
        
        public enum JSType implements ProtocolMessageEnum
        {
            JS_NORMAL(0), 
            JS_STRING(1), 
            JS_NUMBER(2);
            
            public static final int JS_NORMAL_VALUE = 0;
            public static final int JS_STRING_VALUE = 1;
            public static final int JS_NUMBER_VALUE = 2;
            private static final Internal.EnumLiteMap<JSType> internalValueMap;
            private static final JSType[] VALUES;
            private final int value;
            
            @Override
            public final int getNumber() {
                return this.value;
            }
            
            @Deprecated
            public static JSType valueOf(final int value) {
                return forNumber(value);
            }
            
            public static JSType forNumber(final int value) {
                switch (value) {
                    case 0: {
                        return JSType.JS_NORMAL;
                    }
                    case 1: {
                        return JSType.JS_STRING;
                    }
                    case 2: {
                        return JSType.JS_NUMBER;
                    }
                    default: {
                        return null;
                    }
                }
            }
            
            public static Internal.EnumLiteMap<JSType> internalGetValueMap() {
                return JSType.internalValueMap;
            }
            
            @Override
            public final Descriptors.EnumValueDescriptor getValueDescriptor() {
                return getDescriptor().getValues().get(this.ordinal());
            }
            
            @Override
            public final Descriptors.EnumDescriptor getDescriptorForType() {
                return getDescriptor();
            }
            
            public static Descriptors.EnumDescriptor getDescriptor() {
                return FieldOptions.getDescriptor().getEnumTypes().get(1);
            }
            
            public static JSType valueOf(final Descriptors.EnumValueDescriptor desc) {
                if (desc.getType() != getDescriptor()) {
                    throw new IllegalArgumentException("EnumValueDescriptor is not for this type.");
                }
                return JSType.VALUES[desc.getIndex()];
            }
            
            private JSType(final int value) {
                this.value = value;
            }
            
            static {
                RuntimeVersion.validateProtobufGencodeVersion(RuntimeVersion.RuntimeDomain.PUBLIC, 4, 33, 0, "", "JSType");
                internalValueMap = new Internal.EnumLiteMap<JSType>() {
                    @Override
                    public JSType findValueByNumber(final int number) {
                        return JSType.forNumber(number);
                    }
                };
                VALUES = values();
            }
        }
        
        public enum OptionRetention implements ProtocolMessageEnum
        {
            RETENTION_UNKNOWN(0), 
            RETENTION_RUNTIME(1), 
            RETENTION_SOURCE(2);
            
            public static final int RETENTION_UNKNOWN_VALUE = 0;
            public static final int RETENTION_RUNTIME_VALUE = 1;
            public static final int RETENTION_SOURCE_VALUE = 2;
            private static final Internal.EnumLiteMap<OptionRetention> internalValueMap;
            private static final OptionRetention[] VALUES;
            private final int value;
            
            @Override
            public final int getNumber() {
                return this.value;
            }
            
            @Deprecated
            public static OptionRetention valueOf(final int value) {
                return forNumber(value);
            }
            
            public static OptionRetention forNumber(final int value) {
                switch (value) {
                    case 0: {
                        return OptionRetention.RETENTION_UNKNOWN;
                    }
                    case 1: {
                        return OptionRetention.RETENTION_RUNTIME;
                    }
                    case 2: {
                        return OptionRetention.RETENTION_SOURCE;
                    }
                    default: {
                        return null;
                    }
                }
            }
            
            public static Internal.EnumLiteMap<OptionRetention> internalGetValueMap() {
                return OptionRetention.internalValueMap;
            }
            
            @Override
            public final Descriptors.EnumValueDescriptor getValueDescriptor() {
                return getDescriptor().getValues().get(this.ordinal());
            }
            
            @Override
            public final Descriptors.EnumDescriptor getDescriptorForType() {
                return getDescriptor();
            }
            
            public static Descriptors.EnumDescriptor getDescriptor() {
                return FieldOptions.getDescriptor().getEnumTypes().get(2);
            }
            
            public static OptionRetention valueOf(final Descriptors.EnumValueDescriptor desc) {
                if (desc.getType() != getDescriptor()) {
                    throw new IllegalArgumentException("EnumValueDescriptor is not for this type.");
                }
                return OptionRetention.VALUES[desc.getIndex()];
            }
            
            private OptionRetention(final int value) {
                this.value = value;
            }
            
            static {
                RuntimeVersion.validateProtobufGencodeVersion(RuntimeVersion.RuntimeDomain.PUBLIC, 4, 33, 0, "", "OptionRetention");
                internalValueMap = new Internal.EnumLiteMap<OptionRetention>() {
                    @Override
                    public OptionRetention findValueByNumber(final int number) {
                        return OptionRetention.forNumber(number);
                    }
                };
                VALUES = values();
            }
        }
        
        public enum OptionTargetType implements ProtocolMessageEnum
        {
            TARGET_TYPE_UNKNOWN(0), 
            TARGET_TYPE_FILE(1), 
            TARGET_TYPE_EXTENSION_RANGE(2), 
            TARGET_TYPE_MESSAGE(3), 
            TARGET_TYPE_FIELD(4), 
            TARGET_TYPE_ONEOF(5), 
            TARGET_TYPE_ENUM(6), 
            TARGET_TYPE_ENUM_ENTRY(7), 
            TARGET_TYPE_SERVICE(8), 
            TARGET_TYPE_METHOD(9);
            
            public static final int TARGET_TYPE_UNKNOWN_VALUE = 0;
            public static final int TARGET_TYPE_FILE_VALUE = 1;
            public static final int TARGET_TYPE_EXTENSION_RANGE_VALUE = 2;
            public static final int TARGET_TYPE_MESSAGE_VALUE = 3;
            public static final int TARGET_TYPE_FIELD_VALUE = 4;
            public static final int TARGET_TYPE_ONEOF_VALUE = 5;
            public static final int TARGET_TYPE_ENUM_VALUE = 6;
            public static final int TARGET_TYPE_ENUM_ENTRY_VALUE = 7;
            public static final int TARGET_TYPE_SERVICE_VALUE = 8;
            public static final int TARGET_TYPE_METHOD_VALUE = 9;
            private static final Internal.EnumLiteMap<OptionTargetType> internalValueMap;
            private static final OptionTargetType[] VALUES;
            private final int value;
            
            @Override
            public final int getNumber() {
                return this.value;
            }
            
            @Deprecated
            public static OptionTargetType valueOf(final int value) {
                return forNumber(value);
            }
            
            public static OptionTargetType forNumber(final int value) {
                switch (value) {
                    case 0: {
                        return OptionTargetType.TARGET_TYPE_UNKNOWN;
                    }
                    case 1: {
                        return OptionTargetType.TARGET_TYPE_FILE;
                    }
                    case 2: {
                        return OptionTargetType.TARGET_TYPE_EXTENSION_RANGE;
                    }
                    case 3: {
                        return OptionTargetType.TARGET_TYPE_MESSAGE;
                    }
                    case 4: {
                        return OptionTargetType.TARGET_TYPE_FIELD;
                    }
                    case 5: {
                        return OptionTargetType.TARGET_TYPE_ONEOF;
                    }
                    case 6: {
                        return OptionTargetType.TARGET_TYPE_ENUM;
                    }
                    case 7: {
                        return OptionTargetType.TARGET_TYPE_ENUM_ENTRY;
                    }
                    case 8: {
                        return OptionTargetType.TARGET_TYPE_SERVICE;
                    }
                    case 9: {
                        return OptionTargetType.TARGET_TYPE_METHOD;
                    }
                    default: {
                        return null;
                    }
                }
            }
            
            public static Internal.EnumLiteMap<OptionTargetType> internalGetValueMap() {
                return OptionTargetType.internalValueMap;
            }
            
            @Override
            public final Descriptors.EnumValueDescriptor getValueDescriptor() {
                return getDescriptor().getValues().get(this.ordinal());
            }
            
            @Override
            public final Descriptors.EnumDescriptor getDescriptorForType() {
                return getDescriptor();
            }
            
            public static Descriptors.EnumDescriptor getDescriptor() {
                return FieldOptions.getDescriptor().getEnumTypes().get(3);
            }
            
            public static OptionTargetType valueOf(final Descriptors.EnumValueDescriptor desc) {
                if (desc.getType() != getDescriptor()) {
                    throw new IllegalArgumentException("EnumValueDescriptor is not for this type.");
                }
                return OptionTargetType.VALUES[desc.getIndex()];
            }
            
            private OptionTargetType(final int value) {
                this.value = value;
            }
            
            static {
                RuntimeVersion.validateProtobufGencodeVersion(RuntimeVersion.RuntimeDomain.PUBLIC, 4, 33, 0, "", "OptionTargetType");
                internalValueMap = new Internal.EnumLiteMap<OptionTargetType>() {
                    @Override
                    public OptionTargetType findValueByNumber(final int number) {
                        return OptionTargetType.forNumber(number);
                    }
                };
                VALUES = values();
            }
        }
        
        public static final class EditionDefault extends GeneratedMessage implements EditionDefaultOrBuilder
        {
            private static final long serialVersionUID = 0L;
            private int bitField0_;
            public static final int EDITION_FIELD_NUMBER = 3;
            private int edition_;
            public static final int VALUE_FIELD_NUMBER = 2;
            private volatile Object value_;
            private byte memoizedIsInitialized;
            private static final EditionDefault DEFAULT_INSTANCE;
            private static final Parser<EditionDefault> PARSER;
            
            private EditionDefault(final GeneratedMessage.Builder<?> builder) {
                super(builder);
                this.edition_ = 0;
                this.value_ = "";
                this.memoizedIsInitialized = -1;
            }
            
            private EditionDefault() {
                this.edition_ = 0;
                this.value_ = "";
                this.memoizedIsInitialized = -1;
                this.edition_ = 0;
                this.value_ = "";
            }
            
            public static final Descriptors.Descriptor getDescriptor() {
                return DescriptorProtos.internal_static_google_protobuf_FieldOptions_EditionDefault_descriptor;
            }
            
            @Override
            protected FieldAccessorTable internalGetFieldAccessorTable() {
                return DescriptorProtos.internal_static_google_protobuf_FieldOptions_EditionDefault_fieldAccessorTable.ensureFieldAccessorsInitialized(EditionDefault.class, Builder.class);
            }
            
            @Override
            public boolean hasEdition() {
                return (this.bitField0_ & 0x1) != 0x0;
            }
            
            @Override
            public Edition getEdition() {
                final Edition result = Edition.forNumber(this.edition_);
                return (result == null) ? Edition.EDITION_UNKNOWN : result;
            }
            
            @Override
            public boolean hasValue() {
                return (this.bitField0_ & 0x2) != 0x0;
            }
            
            @Override
            public String getValue() {
                final Object ref = this.value_;
                if (ref instanceof String) {
                    return (String)ref;
                }
                final ByteString bs = (ByteString)ref;
                final String s = bs.toStringUtf8();
                if (bs.isValidUtf8()) {
                    this.value_ = s;
                }
                return s;
            }
            
            @Override
            public ByteString getValueBytes() {
                final Object ref = this.value_;
                if (ref instanceof String) {
                    final ByteString b = ByteString.copyFromUtf8((String)ref);
                    return (ByteString)(this.value_ = b);
                }
                return (ByteString)ref;
            }
            
            @Override
            public final boolean isInitialized() {
                final byte isInitialized = this.memoizedIsInitialized;
                if (isInitialized == 1) {
                    return true;
                }
                if (isInitialized == 0) {
                    return false;
                }
                this.memoizedIsInitialized = 1;
                return true;
            }
            
            @Override
            public void writeTo(final CodedOutputStream output) throws IOException {
                if ((this.bitField0_ & 0x2) != 0x0) {
                    GeneratedMessage.writeString(output, 2, this.value_);
                }
                if ((this.bitField0_ & 0x1) != 0x0) {
                    output.writeEnum(3, this.edition_);
                }
                this.getUnknownFields().writeTo(output);
            }
            
            @Override
            public int getSerializedSize() {
                int size = this.memoizedSize;
                if (size != -1) {
                    return size;
                }
                size = 0;
                if ((this.bitField0_ & 0x2) != 0x0) {
                    size += GeneratedMessage.computeStringSize(2, this.value_);
                }
                if ((this.bitField0_ & 0x1) != 0x0) {
                    size += CodedOutputStream.computeEnumSize(3, this.edition_);
                }
                size += this.getUnknownFields().getSerializedSize();
                return this.memoizedSize = size;
            }
            
            @Override
            public boolean equals(final Object obj) {
                if (obj == this) {
                    return true;
                }
                if (!(obj instanceof EditionDefault)) {
                    return super.equals(obj);
                }
                final EditionDefault other = (EditionDefault)obj;
                return this.hasEdition() == other.hasEdition() && (!this.hasEdition() || this.edition_ == other.edition_) && this.hasValue() == other.hasValue() && (!this.hasValue() || this.getValue().equals(other.getValue())) && this.getUnknownFields().equals(other.getUnknownFields());
            }
            
            @Override
            public int hashCode() {
                if (this.memoizedHashCode != 0) {
                    return this.memoizedHashCode;
                }
                int hash = 41;
                hash = 19 * hash + getDescriptor().hashCode();
                if (this.hasEdition()) {
                    hash = 37 * hash + 3;
                    hash = 53 * hash + this.edition_;
                }
                if (this.hasValue()) {
                    hash = 37 * hash + 2;
                    hash = 53 * hash + this.getValue().hashCode();
                }
                hash = 29 * hash + this.getUnknownFields().hashCode();
                return this.memoizedHashCode = hash;
            }
            
            public static EditionDefault parseFrom(final ByteBuffer data) throws InvalidProtocolBufferException {
                return EditionDefault.PARSER.parseFrom(data);
            }
            
            public static EditionDefault parseFrom(final ByteBuffer data, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
                return EditionDefault.PARSER.parseFrom(data, extensionRegistry);
            }
            
            public static EditionDefault parseFrom(final ByteString data) throws InvalidProtocolBufferException {
                return EditionDefault.PARSER.parseFrom(data);
            }
            
            public static EditionDefault parseFrom(final ByteString data, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
                return EditionDefault.PARSER.parseFrom(data, extensionRegistry);
            }
            
            public static EditionDefault parseFrom(final byte[] data) throws InvalidProtocolBufferException {
                return EditionDefault.PARSER.parseFrom(data);
            }
            
            public static EditionDefault parseFrom(final byte[] data, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
                return EditionDefault.PARSER.parseFrom(data, extensionRegistry);
            }
            
            public static EditionDefault parseFrom(final InputStream input) throws IOException {
                return GeneratedMessage.parseWithIOException(EditionDefault.PARSER, input);
            }
            
            public static EditionDefault parseFrom(final InputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
                return GeneratedMessage.parseWithIOException(EditionDefault.PARSER, input, extensionRegistry);
            }
            
            public static EditionDefault parseDelimitedFrom(final InputStream input) throws IOException {
                return GeneratedMessage.parseDelimitedWithIOException(EditionDefault.PARSER, input);
            }
            
            public static EditionDefault parseDelimitedFrom(final InputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
                return GeneratedMessage.parseDelimitedWithIOException(EditionDefault.PARSER, input, extensionRegistry);
            }
            
            public static EditionDefault parseFrom(final CodedInputStream input) throws IOException {
                return GeneratedMessage.parseWithIOException(EditionDefault.PARSER, input);
            }
            
            public static EditionDefault parseFrom(final CodedInputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
                return GeneratedMessage.parseWithIOException(EditionDefault.PARSER, input, extensionRegistry);
            }
            
            @Override
            public Builder newBuilderForType() {
                return newBuilder();
            }
            
            public static Builder newBuilder() {
                return EditionDefault.DEFAULT_INSTANCE.toBuilder();
            }
            
            public static Builder newBuilder(final EditionDefault prototype) {
                return EditionDefault.DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
            }
            
            @Override
            public Builder toBuilder() {
                return (this == EditionDefault.DEFAULT_INSTANCE) ? new Builder() : new Builder().mergeFrom(this);
            }
            
            @Override
            protected Builder newBuilderForType(final BuilderParent parent) {
                final Builder builder = new Builder(parent);
                return builder;
            }
            
            public static EditionDefault getDefaultInstance() {
                return EditionDefault.DEFAULT_INSTANCE;
            }
            
            public static Parser<EditionDefault> parser() {
                return EditionDefault.PARSER;
            }
            
            @Override
            public Parser<EditionDefault> getParserForType() {
                return EditionDefault.PARSER;
            }
            
            @Override
            public EditionDefault getDefaultInstanceForType() {
                return EditionDefault.DEFAULT_INSTANCE;
            }
            
            static {
                RuntimeVersion.validateProtobufGencodeVersion(RuntimeVersion.RuntimeDomain.PUBLIC, 4, 33, 0, "", "EditionDefault");
                DEFAULT_INSTANCE = new EditionDefault();
                PARSER = new AbstractParser<EditionDefault>() {
                    @Override
                    public EditionDefault parsePartialFrom(final CodedInputStream input, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
                        final Builder builder = EditionDefault.newBuilder();
                        try {
                            builder.mergeFrom(input, extensionRegistry);
                        }
                        catch (final InvalidProtocolBufferException e) {
                            throw e.setUnfinishedMessage(builder.buildPartial());
                        }
                        catch (final UninitializedMessageException e2) {
                            throw e2.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
                        }
                        catch (final IOException e3) {
                            throw new InvalidProtocolBufferException(e3).setUnfinishedMessage(builder.buildPartial());
                        }
                        return builder.buildPartial();
                    }
                };
            }
            
            public static final class Builder extends GeneratedMessage.Builder<Builder> implements EditionDefaultOrBuilder
            {
                private int bitField0_;
                private int edition_;
                private Object value_;
                
                public static final Descriptors.Descriptor getDescriptor() {
                    return DescriptorProtos.internal_static_google_protobuf_FieldOptions_EditionDefault_descriptor;
                }
                
                @Override
                protected FieldAccessorTable internalGetFieldAccessorTable() {
                    return DescriptorProtos.internal_static_google_protobuf_FieldOptions_EditionDefault_fieldAccessorTable.ensureFieldAccessorsInitialized(EditionDefault.class, Builder.class);
                }
                
                private Builder() {
                    this.edition_ = 0;
                    this.value_ = "";
                }
                
                private Builder(final BuilderParent parent) {
                    super(parent);
                    this.edition_ = 0;
                    this.value_ = "";
                }
                
                @Override
                public Builder clear() {
                    super.clear();
                    this.bitField0_ = 0;
                    this.edition_ = 0;
                    this.value_ = "";
                    return this;
                }
                
                @Override
                public Descriptors.Descriptor getDescriptorForType() {
                    return DescriptorProtos.internal_static_google_protobuf_FieldOptions_EditionDefault_descriptor;
                }
                
                @Override
                public EditionDefault getDefaultInstanceForType() {
                    return EditionDefault.getDefaultInstance();
                }
                
                @Override
                public EditionDefault build() {
                    final EditionDefault result = this.buildPartial();
                    if (!result.isInitialized()) {
                        throw AbstractMessage.Builder.newUninitializedMessageException(result);
                    }
                    return result;
                }
                
                @Override
                public EditionDefault buildPartial() {
                    final EditionDefault result = new EditionDefault((GeneratedMessage.Builder)this);
                    if (this.bitField0_ != 0) {
                        this.buildPartial0(result);
                    }
                    this.onBuilt();
                    return result;
                }
                
                private void buildPartial0(final EditionDefault result) {
                    final int from_bitField0_ = this.bitField0_;
                    int to_bitField0_ = 0;
                    if ((from_bitField0_ & 0x1) != 0x0) {
                        result.edition_ = this.edition_;
                        to_bitField0_ |= 0x1;
                    }
                    if ((from_bitField0_ & 0x2) != 0x0) {
                        result.value_ = this.value_;
                        to_bitField0_ |= 0x2;
                    }
                    result.bitField0_ |= to_bitField0_;
                }
                
                @Override
                public Builder mergeFrom(final Message other) {
                    if (other instanceof EditionDefault) {
                        return this.mergeFrom((EditionDefault)other);
                    }
                    super.mergeFrom(other);
                    return this;
                }
                
                public Builder mergeFrom(final EditionDefault other) {
                    if (other == EditionDefault.getDefaultInstance()) {
                        return this;
                    }
                    if (other.hasEdition()) {
                        this.setEdition(other.getEdition());
                    }
                    if (other.hasValue()) {
                        this.value_ = other.value_;
                        this.bitField0_ |= 0x2;
                        this.onChanged();
                    }
                    this.mergeUnknownFields(other.getUnknownFields());
                    this.onChanged();
                    return this;
                }
                
                @Override
                public final boolean isInitialized() {
                    return true;
                }
                
                @Override
                public Builder mergeFrom(final CodedInputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
                    if (extensionRegistry == null) {
                        throw new NullPointerException();
                    }
                    try {
                        boolean done = false;
                        while (!done) {
                            final int tag = input.readTag();
                            switch (tag) {
                                case 0: {
                                    done = true;
                                    continue;
                                }
                                case 18: {
                                    this.value_ = input.readBytes();
                                    this.bitField0_ |= 0x2;
                                    continue;
                                }
                                case 24: {
                                    final int tmpRaw = input.readEnum();
                                    final Edition tmpValue = Edition.forNumber(tmpRaw);
                                    if (tmpValue == null) {
                                        this.mergeUnknownVarintField(3, tmpRaw);
                                        continue;
                                    }
                                    this.edition_ = tmpRaw;
                                    this.bitField0_ |= 0x1;
                                    continue;
                                }
                                default: {
                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                                        done = true;
                                        continue;
                                    }
                                    continue;
                                }
                            }
                        }
                    }
                    catch (final InvalidProtocolBufferException e) {
                        throw e.unwrapIOException();
                    }
                    finally {
                        this.onChanged();
                    }
                    return this;
                }
                
                @Override
                public boolean hasEdition() {
                    return (this.bitField0_ & 0x1) != 0x0;
                }
                
                @Override
                public Edition getEdition() {
                    final Edition result = Edition.forNumber(this.edition_);
                    return (result == null) ? Edition.EDITION_UNKNOWN : result;
                }
                
                public Builder setEdition(final Edition value) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.bitField0_ |= 0x1;
                    this.edition_ = value.getNumber();
                    this.onChanged();
                    return this;
                }
                
                public Builder clearEdition() {
                    this.bitField0_ &= 0xFFFFFFFE;
                    this.edition_ = 0;
                    this.onChanged();
                    return this;
                }
                
                @Override
                public boolean hasValue() {
                    return (this.bitField0_ & 0x2) != 0x0;
                }
                
                @Override
                public String getValue() {
                    final Object ref = this.value_;
                    if (!(ref instanceof String)) {
                        final ByteString bs = (ByteString)ref;
                        final String s = bs.toStringUtf8();
                        if (bs.isValidUtf8()) {
                            this.value_ = s;
                        }
                        return s;
                    }
                    return (String)ref;
                }
                
                @Override
                public ByteString getValueBytes() {
                    final Object ref = this.value_;
                    if (ref instanceof String) {
                        final ByteString b = ByteString.copyFromUtf8((String)ref);
                        return (ByteString)(this.value_ = b);
                    }
                    return (ByteString)ref;
                }
                
                public Builder setValue(final String value) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.value_ = value;
                    this.bitField0_ |= 0x2;
                    this.onChanged();
                    return this;
                }
                
                public Builder clearValue() {
                    this.value_ = EditionDefault.getDefaultInstance().getValue();
                    this.bitField0_ &= 0xFFFFFFFD;
                    this.onChanged();
                    return this;
                }
                
                public Builder setValueBytes(final ByteString value) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.value_ = value;
                    this.bitField0_ |= 0x2;
                    this.onChanged();
                    return this;
                }
            }
        }
        
        public static final class FeatureSupport extends GeneratedMessage implements FeatureSupportOrBuilder
        {
            private static final long serialVersionUID = 0L;
            private int bitField0_;
            public static final int EDITION_INTRODUCED_FIELD_NUMBER = 1;
            private int editionIntroduced_;
            public static final int EDITION_DEPRECATED_FIELD_NUMBER = 2;
            private int editionDeprecated_;
            public static final int DEPRECATION_WARNING_FIELD_NUMBER = 3;
            private volatile Object deprecationWarning_;
            public static final int EDITION_REMOVED_FIELD_NUMBER = 4;
            private int editionRemoved_;
            private byte memoizedIsInitialized;
            private static final FeatureSupport DEFAULT_INSTANCE;
            private static final Parser<FeatureSupport> PARSER;
            
            private FeatureSupport(final GeneratedMessage.Builder<?> builder) {
                super(builder);
                this.editionIntroduced_ = 0;
                this.editionDeprecated_ = 0;
                this.deprecationWarning_ = "";
                this.editionRemoved_ = 0;
                this.memoizedIsInitialized = -1;
            }
            
            private FeatureSupport() {
                this.editionIntroduced_ = 0;
                this.editionDeprecated_ = 0;
                this.deprecationWarning_ = "";
                this.editionRemoved_ = 0;
                this.memoizedIsInitialized = -1;
                this.editionIntroduced_ = 0;
                this.editionDeprecated_ = 0;
                this.deprecationWarning_ = "";
                this.editionRemoved_ = 0;
            }
            
            public static final Descriptors.Descriptor getDescriptor() {
                return DescriptorProtos.internal_static_google_protobuf_FieldOptions_FeatureSupport_descriptor;
            }
            
            @Override
            protected FieldAccessorTable internalGetFieldAccessorTable() {
                return DescriptorProtos.internal_static_google_protobuf_FieldOptions_FeatureSupport_fieldAccessorTable.ensureFieldAccessorsInitialized(FeatureSupport.class, Builder.class);
            }
            
            @Override
            public boolean hasEditionIntroduced() {
                return (this.bitField0_ & 0x1) != 0x0;
            }
            
            @Override
            public Edition getEditionIntroduced() {
                final Edition result = Edition.forNumber(this.editionIntroduced_);
                return (result == null) ? Edition.EDITION_UNKNOWN : result;
            }
            
            @Override
            public boolean hasEditionDeprecated() {
                return (this.bitField0_ & 0x2) != 0x0;
            }
            
            @Override
            public Edition getEditionDeprecated() {
                final Edition result = Edition.forNumber(this.editionDeprecated_);
                return (result == null) ? Edition.EDITION_UNKNOWN : result;
            }
            
            @Override
            public boolean hasDeprecationWarning() {
                return (this.bitField0_ & 0x4) != 0x0;
            }
            
            @Override
            public String getDeprecationWarning() {
                final Object ref = this.deprecationWarning_;
                if (ref instanceof String) {
                    return (String)ref;
                }
                final ByteString bs = (ByteString)ref;
                final String s = bs.toStringUtf8();
                if (bs.isValidUtf8()) {
                    this.deprecationWarning_ = s;
                }
                return s;
            }
            
            @Override
            public ByteString getDeprecationWarningBytes() {
                final Object ref = this.deprecationWarning_;
                if (ref instanceof String) {
                    final ByteString b = ByteString.copyFromUtf8((String)ref);
                    return (ByteString)(this.deprecationWarning_ = b);
                }
                return (ByteString)ref;
            }
            
            @Override
            public boolean hasEditionRemoved() {
                return (this.bitField0_ & 0x8) != 0x0;
            }
            
            @Override
            public Edition getEditionRemoved() {
                final Edition result = Edition.forNumber(this.editionRemoved_);
                return (result == null) ? Edition.EDITION_UNKNOWN : result;
            }
            
            @Override
            public final boolean isInitialized() {
                final byte isInitialized = this.memoizedIsInitialized;
                if (isInitialized == 1) {
                    return true;
                }
                if (isInitialized == 0) {
                    return false;
                }
                this.memoizedIsInitialized = 1;
                return true;
            }
            
            @Override
            public void writeTo(final CodedOutputStream output) throws IOException {
                if ((this.bitField0_ & 0x1) != 0x0) {
                    output.writeEnum(1, this.editionIntroduced_);
                }
                if ((this.bitField0_ & 0x2) != 0x0) {
                    output.writeEnum(2, this.editionDeprecated_);
                }
                if ((this.bitField0_ & 0x4) != 0x0) {
                    GeneratedMessage.writeString(output, 3, this.deprecationWarning_);
                }
                if ((this.bitField0_ & 0x8) != 0x0) {
                    output.writeEnum(4, this.editionRemoved_);
                }
                this.getUnknownFields().writeTo(output);
            }
            
            @Override
            public int getSerializedSize() {
                int size = this.memoizedSize;
                if (size != -1) {
                    return size;
                }
                size = 0;
                if ((this.bitField0_ & 0x1) != 0x0) {
                    size += CodedOutputStream.computeEnumSize(1, this.editionIntroduced_);
                }
                if ((this.bitField0_ & 0x2) != 0x0) {
                    size += CodedOutputStream.computeEnumSize(2, this.editionDeprecated_);
                }
                if ((this.bitField0_ & 0x4) != 0x0) {
                    size += GeneratedMessage.computeStringSize(3, this.deprecationWarning_);
                }
                if ((this.bitField0_ & 0x8) != 0x0) {
                    size += CodedOutputStream.computeEnumSize(4, this.editionRemoved_);
                }
                size += this.getUnknownFields().getSerializedSize();
                return this.memoizedSize = size;
            }
            
            @Override
            public boolean equals(final Object obj) {
                if (obj == this) {
                    return true;
                }
                if (!(obj instanceof FeatureSupport)) {
                    return super.equals(obj);
                }
                final FeatureSupport other = (FeatureSupport)obj;
                return this.hasEditionIntroduced() == other.hasEditionIntroduced() && (!this.hasEditionIntroduced() || this.editionIntroduced_ == other.editionIntroduced_) && this.hasEditionDeprecated() == other.hasEditionDeprecated() && (!this.hasEditionDeprecated() || this.editionDeprecated_ == other.editionDeprecated_) && this.hasDeprecationWarning() == other.hasDeprecationWarning() && (!this.hasDeprecationWarning() || this.getDeprecationWarning().equals(other.getDeprecationWarning())) && this.hasEditionRemoved() == other.hasEditionRemoved() && (!this.hasEditionRemoved() || this.editionRemoved_ == other.editionRemoved_) && this.getUnknownFields().equals(other.getUnknownFields());
            }
            
            @Override
            public int hashCode() {
                if (this.memoizedHashCode != 0) {
                    return this.memoizedHashCode;
                }
                int hash = 41;
                hash = 19 * hash + getDescriptor().hashCode();
                if (this.hasEditionIntroduced()) {
                    hash = 37 * hash + 1;
                    hash = 53 * hash + this.editionIntroduced_;
                }
                if (this.hasEditionDeprecated()) {
                    hash = 37 * hash + 2;
                    hash = 53 * hash + this.editionDeprecated_;
                }
                if (this.hasDeprecationWarning()) {
                    hash = 37 * hash + 3;
                    hash = 53 * hash + this.getDeprecationWarning().hashCode();
                }
                if (this.hasEditionRemoved()) {
                    hash = 37 * hash + 4;
                    hash = 53 * hash + this.editionRemoved_;
                }
                hash = 29 * hash + this.getUnknownFields().hashCode();
                return this.memoizedHashCode = hash;
            }
            
            public static FeatureSupport parseFrom(final ByteBuffer data) throws InvalidProtocolBufferException {
                return FeatureSupport.PARSER.parseFrom(data);
            }
            
            public static FeatureSupport parseFrom(final ByteBuffer data, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
                return FeatureSupport.PARSER.parseFrom(data, extensionRegistry);
            }
            
            public static FeatureSupport parseFrom(final ByteString data) throws InvalidProtocolBufferException {
                return FeatureSupport.PARSER.parseFrom(data);
            }
            
            public static FeatureSupport parseFrom(final ByteString data, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
                return FeatureSupport.PARSER.parseFrom(data, extensionRegistry);
            }
            
            public static FeatureSupport parseFrom(final byte[] data) throws InvalidProtocolBufferException {
                return FeatureSupport.PARSER.parseFrom(data);
            }
            
            public static FeatureSupport parseFrom(final byte[] data, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
                return FeatureSupport.PARSER.parseFrom(data, extensionRegistry);
            }
            
            public static FeatureSupport parseFrom(final InputStream input) throws IOException {
                return GeneratedMessage.parseWithIOException(FeatureSupport.PARSER, input);
            }
            
            public static FeatureSupport parseFrom(final InputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
                return GeneratedMessage.parseWithIOException(FeatureSupport.PARSER, input, extensionRegistry);
            }
            
            public static FeatureSupport parseDelimitedFrom(final InputStream input) throws IOException {
                return GeneratedMessage.parseDelimitedWithIOException(FeatureSupport.PARSER, input);
            }
            
            public static FeatureSupport parseDelimitedFrom(final InputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
                return GeneratedMessage.parseDelimitedWithIOException(FeatureSupport.PARSER, input, extensionRegistry);
            }
            
            public static FeatureSupport parseFrom(final CodedInputStream input) throws IOException {
                return GeneratedMessage.parseWithIOException(FeatureSupport.PARSER, input);
            }
            
            public static FeatureSupport parseFrom(final CodedInputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
                return GeneratedMessage.parseWithIOException(FeatureSupport.PARSER, input, extensionRegistry);
            }
            
            @Override
            public Builder newBuilderForType() {
                return newBuilder();
            }
            
            public static Builder newBuilder() {
                return FeatureSupport.DEFAULT_INSTANCE.toBuilder();
            }
            
            public static Builder newBuilder(final FeatureSupport prototype) {
                return FeatureSupport.DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
            }
            
            @Override
            public Builder toBuilder() {
                return (this == FeatureSupport.DEFAULT_INSTANCE) ? new Builder() : new Builder().mergeFrom(this);
            }
            
            @Override
            protected Builder newBuilderForType(final BuilderParent parent) {
                final Builder builder = new Builder(parent);
                return builder;
            }
            
            public static FeatureSupport getDefaultInstance() {
                return FeatureSupport.DEFAULT_INSTANCE;
            }
            
            public static Parser<FeatureSupport> parser() {
                return FeatureSupport.PARSER;
            }
            
            @Override
            public Parser<FeatureSupport> getParserForType() {
                return FeatureSupport.PARSER;
            }
            
            @Override
            public FeatureSupport getDefaultInstanceForType() {
                return FeatureSupport.DEFAULT_INSTANCE;
            }
            
            static {
                RuntimeVersion.validateProtobufGencodeVersion(RuntimeVersion.RuntimeDomain.PUBLIC, 4, 33, 0, "", "FeatureSupport");
                DEFAULT_INSTANCE = new FeatureSupport();
                PARSER = new AbstractParser<FeatureSupport>() {
                    @Override
                    public FeatureSupport parsePartialFrom(final CodedInputStream input, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
                        final Builder builder = FeatureSupport.newBuilder();
                        try {
                            builder.mergeFrom(input, extensionRegistry);
                        }
                        catch (final InvalidProtocolBufferException e) {
                            throw e.setUnfinishedMessage(builder.buildPartial());
                        }
                        catch (final UninitializedMessageException e2) {
                            throw e2.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
                        }
                        catch (final IOException e3) {
                            throw new InvalidProtocolBufferException(e3).setUnfinishedMessage(builder.buildPartial());
                        }
                        return builder.buildPartial();
                    }
                };
            }
            
            public static final class Builder extends GeneratedMessage.Builder<Builder> implements FeatureSupportOrBuilder
            {
                private int bitField0_;
                private int editionIntroduced_;
                private int editionDeprecated_;
                private Object deprecationWarning_;
                private int editionRemoved_;
                
                public static final Descriptors.Descriptor getDescriptor() {
                    return DescriptorProtos.internal_static_google_protobuf_FieldOptions_FeatureSupport_descriptor;
                }
                
                @Override
                protected FieldAccessorTable internalGetFieldAccessorTable() {
                    return DescriptorProtos.internal_static_google_protobuf_FieldOptions_FeatureSupport_fieldAccessorTable.ensureFieldAccessorsInitialized(FeatureSupport.class, Builder.class);
                }
                
                private Builder() {
                    this.editionIntroduced_ = 0;
                    this.editionDeprecated_ = 0;
                    this.deprecationWarning_ = "";
                    this.editionRemoved_ = 0;
                }
                
                private Builder(final BuilderParent parent) {
                    super(parent);
                    this.editionIntroduced_ = 0;
                    this.editionDeprecated_ = 0;
                    this.deprecationWarning_ = "";
                    this.editionRemoved_ = 0;
                }
                
                @Override
                public Builder clear() {
                    super.clear();
                    this.bitField0_ = 0;
                    this.editionIntroduced_ = 0;
                    this.editionDeprecated_ = 0;
                    this.deprecationWarning_ = "";
                    this.editionRemoved_ = 0;
                    return this;
                }
                
                @Override
                public Descriptors.Descriptor getDescriptorForType() {
                    return DescriptorProtos.internal_static_google_protobuf_FieldOptions_FeatureSupport_descriptor;
                }
                
                @Override
                public FeatureSupport getDefaultInstanceForType() {
                    return FeatureSupport.getDefaultInstance();
                }
                
                @Override
                public FeatureSupport build() {
                    final FeatureSupport result = this.buildPartial();
                    if (!result.isInitialized()) {
                        throw AbstractMessage.Builder.newUninitializedMessageException(result);
                    }
                    return result;
                }
                
                @Override
                public FeatureSupport buildPartial() {
                    final FeatureSupport result = new FeatureSupport((GeneratedMessage.Builder)this);
                    if (this.bitField0_ != 0) {
                        this.buildPartial0(result);
                    }
                    this.onBuilt();
                    return result;
                }
                
                private void buildPartial0(final FeatureSupport result) {
                    final int from_bitField0_ = this.bitField0_;
                    int to_bitField0_ = 0;
                    if ((from_bitField0_ & 0x1) != 0x0) {
                        result.editionIntroduced_ = this.editionIntroduced_;
                        to_bitField0_ |= 0x1;
                    }
                    if ((from_bitField0_ & 0x2) != 0x0) {
                        result.editionDeprecated_ = this.editionDeprecated_;
                        to_bitField0_ |= 0x2;
                    }
                    if ((from_bitField0_ & 0x4) != 0x0) {
                        result.deprecationWarning_ = this.deprecationWarning_;
                        to_bitField0_ |= 0x4;
                    }
                    if ((from_bitField0_ & 0x8) != 0x0) {
                        result.editionRemoved_ = this.editionRemoved_;
                        to_bitField0_ |= 0x8;
                    }
                    result.bitField0_ |= to_bitField0_;
                }
                
                @Override
                public Builder mergeFrom(final Message other) {
                    if (other instanceof FeatureSupport) {
                        return this.mergeFrom((FeatureSupport)other);
                    }
                    super.mergeFrom(other);
                    return this;
                }
                
                public Builder mergeFrom(final FeatureSupport other) {
                    if (other == FeatureSupport.getDefaultInstance()) {
                        return this;
                    }
                    if (other.hasEditionIntroduced()) {
                        this.setEditionIntroduced(other.getEditionIntroduced());
                    }
                    if (other.hasEditionDeprecated()) {
                        this.setEditionDeprecated(other.getEditionDeprecated());
                    }
                    if (other.hasDeprecationWarning()) {
                        this.deprecationWarning_ = other.deprecationWarning_;
                        this.bitField0_ |= 0x4;
                        this.onChanged();
                    }
                    if (other.hasEditionRemoved()) {
                        this.setEditionRemoved(other.getEditionRemoved());
                    }
                    this.mergeUnknownFields(other.getUnknownFields());
                    this.onChanged();
                    return this;
                }
                
                @Override
                public final boolean isInitialized() {
                    return true;
                }
                
                @Override
                public Builder mergeFrom(final CodedInputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
                    if (extensionRegistry == null) {
                        throw new NullPointerException();
                    }
                    try {
                        boolean done = false;
                        while (!done) {
                            final int tag = input.readTag();
                            switch (tag) {
                                case 0: {
                                    done = true;
                                    continue;
                                }
                                case 8: {
                                    final int tmpRaw = input.readEnum();
                                    final Edition tmpValue = Edition.forNumber(tmpRaw);
                                    if (tmpValue == null) {
                                        this.mergeUnknownVarintField(1, tmpRaw);
                                        continue;
                                    }
                                    this.editionIntroduced_ = tmpRaw;
                                    this.bitField0_ |= 0x1;
                                    continue;
                                }
                                case 16: {
                                    final int tmpRaw = input.readEnum();
                                    final Edition tmpValue = Edition.forNumber(tmpRaw);
                                    if (tmpValue == null) {
                                        this.mergeUnknownVarintField(2, tmpRaw);
                                        continue;
                                    }
                                    this.editionDeprecated_ = tmpRaw;
                                    this.bitField0_ |= 0x2;
                                    continue;
                                }
                                case 26: {
                                    this.deprecationWarning_ = input.readBytes();
                                    this.bitField0_ |= 0x4;
                                    continue;
                                }
                                case 32: {
                                    final int tmpRaw = input.readEnum();
                                    final Edition tmpValue = Edition.forNumber(tmpRaw);
                                    if (tmpValue == null) {
                                        this.mergeUnknownVarintField(4, tmpRaw);
                                        continue;
                                    }
                                    this.editionRemoved_ = tmpRaw;
                                    this.bitField0_ |= 0x8;
                                    continue;
                                }
                                default: {
                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                                        done = true;
                                        continue;
                                    }
                                    continue;
                                }
                            }
                        }
                    }
                    catch (final InvalidProtocolBufferException e) {
                        throw e.unwrapIOException();
                    }
                    finally {
                        this.onChanged();
                    }
                    return this;
                }
                
                @Override
                public boolean hasEditionIntroduced() {
                    return (this.bitField0_ & 0x1) != 0x0;
                }
                
                @Override
                public Edition getEditionIntroduced() {
                    final Edition result = Edition.forNumber(this.editionIntroduced_);
                    return (result == null) ? Edition.EDITION_UNKNOWN : result;
                }
                
                public Builder setEditionIntroduced(final Edition value) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.bitField0_ |= 0x1;
                    this.editionIntroduced_ = value.getNumber();
                    this.onChanged();
                    return this;
                }
                
                public Builder clearEditionIntroduced() {
                    this.bitField0_ &= 0xFFFFFFFE;
                    this.editionIntroduced_ = 0;
                    this.onChanged();
                    return this;
                }
                
                @Override
                public boolean hasEditionDeprecated() {
                    return (this.bitField0_ & 0x2) != 0x0;
                }
                
                @Override
                public Edition getEditionDeprecated() {
                    final Edition result = Edition.forNumber(this.editionDeprecated_);
                    return (result == null) ? Edition.EDITION_UNKNOWN : result;
                }
                
                public Builder setEditionDeprecated(final Edition value) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.bitField0_ |= 0x2;
                    this.editionDeprecated_ = value.getNumber();
                    this.onChanged();
                    return this;
                }
                
                public Builder clearEditionDeprecated() {
                    this.bitField0_ &= 0xFFFFFFFD;
                    this.editionDeprecated_ = 0;
                    this.onChanged();
                    return this;
                }
                
                @Override
                public boolean hasDeprecationWarning() {
                    return (this.bitField0_ & 0x4) != 0x0;
                }
                
                @Override
                public String getDeprecationWarning() {
                    final Object ref = this.deprecationWarning_;
                    if (!(ref instanceof String)) {
                        final ByteString bs = (ByteString)ref;
                        final String s = bs.toStringUtf8();
                        if (bs.isValidUtf8()) {
                            this.deprecationWarning_ = s;
                        }
                        return s;
                    }
                    return (String)ref;
                }
                
                @Override
                public ByteString getDeprecationWarningBytes() {
                    final Object ref = this.deprecationWarning_;
                    if (ref instanceof String) {
                        final ByteString b = ByteString.copyFromUtf8((String)ref);
                        return (ByteString)(this.deprecationWarning_ = b);
                    }
                    return (ByteString)ref;
                }
                
                public Builder setDeprecationWarning(final String value) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.deprecationWarning_ = value;
                    this.bitField0_ |= 0x4;
                    this.onChanged();
                    return this;
                }
                
                public Builder clearDeprecationWarning() {
                    this.deprecationWarning_ = FeatureSupport.getDefaultInstance().getDeprecationWarning();
                    this.bitField0_ &= 0xFFFFFFFB;
                    this.onChanged();
                    return this;
                }
                
                public Builder setDeprecationWarningBytes(final ByteString value) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.deprecationWarning_ = value;
                    this.bitField0_ |= 0x4;
                    this.onChanged();
                    return this;
                }
                
                @Override
                public boolean hasEditionRemoved() {
                    return (this.bitField0_ & 0x8) != 0x0;
                }
                
                @Override
                public Edition getEditionRemoved() {
                    final Edition result = Edition.forNumber(this.editionRemoved_);
                    return (result == null) ? Edition.EDITION_UNKNOWN : result;
                }
                
                public Builder setEditionRemoved(final Edition value) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.bitField0_ |= 0x8;
                    this.editionRemoved_ = value.getNumber();
                    this.onChanged();
                    return this;
                }
                
                public Builder clearEditionRemoved() {
                    this.bitField0_ &= 0xFFFFFFF7;
                    this.editionRemoved_ = 0;
                    this.onChanged();
                    return this;
                }
            }
        }
        
        public static final class Builder extends ExtendableBuilder<FieldOptions, Builder> implements FieldOptionsOrBuilder
        {
            private int bitField0_;
            private int ctype_;
            private boolean packed_;
            private int jstype_;
            private boolean lazy_;
            private boolean unverifiedLazy_;
            private boolean deprecated_;
            private boolean weak_;
            private boolean debugRedact_;
            private int retention_;
            private Internal.IntList targets_;
            private List<EditionDefault> editionDefaults_;
            private RepeatedFieldBuilder<EditionDefault, EditionDefault.Builder, EditionDefaultOrBuilder> editionDefaultsBuilder_;
            private FeatureSet features_;
            private SingleFieldBuilder<FeatureSet, FeatureSet.Builder, FeatureSetOrBuilder> featuresBuilder_;
            private FeatureSupport featureSupport_;
            private SingleFieldBuilder<FeatureSupport, FeatureSupport.Builder, FeatureSupportOrBuilder> featureSupportBuilder_;
            private List<UninterpretedOption> uninterpretedOption_;
            private RepeatedFieldBuilder<UninterpretedOption, UninterpretedOption.Builder, UninterpretedOptionOrBuilder> uninterpretedOptionBuilder_;
            
            public static final Descriptors.Descriptor getDescriptor() {
                return DescriptorProtos.internal_static_google_protobuf_FieldOptions_descriptor;
            }
            
            @Override
            protected FieldAccessorTable internalGetFieldAccessorTable() {
                return DescriptorProtos.internal_static_google_protobuf_FieldOptions_fieldAccessorTable.ensureFieldAccessorsInitialized(FieldOptions.class, Builder.class);
            }
            
            private Builder() {
                this.ctype_ = 0;
                this.jstype_ = 0;
                this.retention_ = 0;
                this.targets_ = GeneratedMessage.emptyIntList();
                this.editionDefaults_ = Collections.emptyList();
                this.uninterpretedOption_ = Collections.emptyList();
                this.maybeForceBuilderInitialization();
            }
            
            private Builder(final BuilderParent parent) {
                super(parent);
                this.ctype_ = 0;
                this.jstype_ = 0;
                this.retention_ = 0;
                this.targets_ = GeneratedMessage.emptyIntList();
                this.editionDefaults_ = Collections.emptyList();
                this.uninterpretedOption_ = Collections.emptyList();
                this.maybeForceBuilderInitialization();
            }
            
            private void maybeForceBuilderInitialization() {
                if (GeneratedMessage.alwaysUseFieldBuilders) {
                    this.internalGetEditionDefaultsFieldBuilder();
                    this.internalGetFeaturesFieldBuilder();
                    this.internalGetFeatureSupportFieldBuilder();
                    this.internalGetUninterpretedOptionFieldBuilder();
                }
            }
            
            @Override
            public Builder clear() {
                super.clear();
                this.bitField0_ = 0;
                this.ctype_ = 0;
                this.packed_ = false;
                this.jstype_ = 0;
                this.lazy_ = false;
                this.unverifiedLazy_ = false;
                this.deprecated_ = false;
                this.weak_ = false;
                this.debugRedact_ = false;
                this.retention_ = 0;
                this.targets_ = GeneratedMessage.emptyIntList();
                if (this.editionDefaultsBuilder_ == null) {
                    this.editionDefaults_ = Collections.emptyList();
                }
                else {
                    this.editionDefaults_ = null;
                    this.editionDefaultsBuilder_.clear();
                }
                this.bitField0_ &= 0xFFFFFBFF;
                this.features_ = null;
                if (this.featuresBuilder_ != null) {
                    this.featuresBuilder_.dispose();
                    this.featuresBuilder_ = null;
                }
                this.featureSupport_ = null;
                if (this.featureSupportBuilder_ != null) {
                    this.featureSupportBuilder_.dispose();
                    this.featureSupportBuilder_ = null;
                }
                if (this.uninterpretedOptionBuilder_ == null) {
                    this.uninterpretedOption_ = Collections.emptyList();
                }
                else {
                    this.uninterpretedOption_ = null;
                    this.uninterpretedOptionBuilder_.clear();
                }
                this.bitField0_ &= 0xFFFFDFFF;
                return this;
            }
            
            @Override
            public Descriptors.Descriptor getDescriptorForType() {
                return DescriptorProtos.internal_static_google_protobuf_FieldOptions_descriptor;
            }
            
            @Override
            public FieldOptions getDefaultInstanceForType() {
                return FieldOptions.getDefaultInstance();
            }
            
            @Override
            public FieldOptions build() {
                final FieldOptions result = this.buildPartial();
                if (!result.isInitialized()) {
                    throw AbstractMessage.Builder.newUninitializedMessageException(result);
                }
                return result;
            }
            
            @Override
            public FieldOptions buildPartial() {
                final FieldOptions result = new FieldOptions((ExtendableBuilder)this);
                this.buildPartialRepeatedFields(result);
                if (this.bitField0_ != 0) {
                    this.buildPartial0(result);
                }
                this.onBuilt();
                return result;
            }
            
            private void buildPartialRepeatedFields(final FieldOptions result) {
                if (this.editionDefaultsBuilder_ == null) {
                    if ((this.bitField0_ & 0x400) != 0x0) {
                        this.editionDefaults_ = Collections.unmodifiableList((List<? extends EditionDefault>)this.editionDefaults_);
                        this.bitField0_ &= 0xFFFFFBFF;
                    }
                    result.editionDefaults_ = this.editionDefaults_;
                }
                else {
                    result.editionDefaults_ = this.editionDefaultsBuilder_.build();
                }
                if (this.uninterpretedOptionBuilder_ == null) {
                    if ((this.bitField0_ & 0x2000) != 0x0) {
                        this.uninterpretedOption_ = Collections.unmodifiableList((List<? extends UninterpretedOption>)this.uninterpretedOption_);
                        this.bitField0_ &= 0xFFFFDFFF;
                    }
                    result.uninterpretedOption_ = this.uninterpretedOption_;
                }
                else {
                    result.uninterpretedOption_ = this.uninterpretedOptionBuilder_.build();
                }
            }
            
            private void buildPartial0(final FieldOptions result) {
                final int from_bitField0_ = this.bitField0_;
                int to_bitField0_ = 0;
                if ((from_bitField0_ & 0x1) != 0x0) {
                    result.ctype_ = this.ctype_;
                    to_bitField0_ |= 0x1;
                }
                if ((from_bitField0_ & 0x2) != 0x0) {
                    result.packed_ = this.packed_;
                    to_bitField0_ |= 0x2;
                }
                if ((from_bitField0_ & 0x4) != 0x0) {
                    result.jstype_ = this.jstype_;
                    to_bitField0_ |= 0x4;
                }
                if ((from_bitField0_ & 0x8) != 0x0) {
                    result.lazy_ = this.lazy_;
                    to_bitField0_ |= 0x8;
                }
                if ((from_bitField0_ & 0x10) != 0x0) {
                    result.unverifiedLazy_ = this.unverifiedLazy_;
                    to_bitField0_ |= 0x10;
                }
                if ((from_bitField0_ & 0x20) != 0x0) {
                    result.deprecated_ = this.deprecated_;
                    to_bitField0_ |= 0x20;
                }
                if ((from_bitField0_ & 0x40) != 0x0) {
                    result.weak_ = this.weak_;
                    to_bitField0_ |= 0x40;
                }
                if ((from_bitField0_ & 0x80) != 0x0) {
                    result.debugRedact_ = this.debugRedact_;
                    to_bitField0_ |= 0x80;
                }
                if ((from_bitField0_ & 0x100) != 0x0) {
                    result.retention_ = this.retention_;
                    to_bitField0_ |= 0x100;
                }
                if ((from_bitField0_ & 0x200) != 0x0) {
                    this.targets_.makeImmutable();
                    result.targets_ = this.targets_;
                }
                if ((from_bitField0_ & 0x800) != 0x0) {
                    result.features_ = ((this.featuresBuilder_ == null) ? this.features_ : this.featuresBuilder_.build());
                    to_bitField0_ |= 0x200;
                }
                if ((from_bitField0_ & 0x1000) != 0x0) {
                    result.featureSupport_ = ((this.featureSupportBuilder_ == null) ? this.featureSupport_ : this.featureSupportBuilder_.build());
                    to_bitField0_ |= 0x400;
                }
                result.bitField0_ |= to_bitField0_;
            }
            
            public <Type> Builder setExtension(final GeneratedExtension<FieldOptions, Type> extension, final Type value) {
                return super.setExtension(extension, value);
            }
            
            public <Type> Builder setExtension(final GeneratedExtension<FieldOptions, List<Type>> extension, final int index, final Type value) {
                return super.setExtension(extension, index, value);
            }
            
            public <Type> Builder addExtension(final GeneratedExtension<FieldOptions, List<Type>> extension, final Type value) {
                return super.addExtension(extension, value);
            }
            
            public <Type> Builder clearExtension(final GeneratedExtension<FieldOptions, Type> extension) {
                return super.clearExtension(extension);
            }
            
            @Override
            public Builder mergeFrom(final Message other) {
                if (other instanceof FieldOptions) {
                    return this.mergeFrom((FieldOptions)other);
                }
                super.mergeFrom(other);
                return this;
            }
            
            public Builder mergeFrom(final FieldOptions other) {
                if (other == FieldOptions.getDefaultInstance()) {
                    return this;
                }
                if (other.hasCtype()) {
                    this.setCtype(other.getCtype());
                }
                if (other.hasPacked()) {
                    this.setPacked(other.getPacked());
                }
                if (other.hasJstype()) {
                    this.setJstype(other.getJstype());
                }
                if (other.hasLazy()) {
                    this.setLazy(other.getLazy());
                }
                if (other.hasUnverifiedLazy()) {
                    this.setUnverifiedLazy(other.getUnverifiedLazy());
                }
                if (other.hasDeprecated()) {
                    this.setDeprecated(other.getDeprecated());
                }
                if (other.hasWeak()) {
                    this.setWeak(other.getWeak());
                }
                if (other.hasDebugRedact()) {
                    this.setDebugRedact(other.getDebugRedact());
                }
                if (other.hasRetention()) {
                    this.setRetention(other.getRetention());
                }
                if (!other.targets_.isEmpty()) {
                    if (this.targets_.isEmpty()) {
                        (this.targets_ = other.targets_).makeImmutable();
                        this.bitField0_ |= 0x200;
                    }
                    else {
                        this.ensureTargetsIsMutable();
                        this.targets_.addAll(other.targets_);
                    }
                    this.onChanged();
                }
                if (this.editionDefaultsBuilder_ == null) {
                    if (!other.editionDefaults_.isEmpty()) {
                        if (this.editionDefaults_.isEmpty()) {
                            this.editionDefaults_ = other.editionDefaults_;
                            this.bitField0_ &= 0xFFFFFBFF;
                        }
                        else {
                            this.ensureEditionDefaultsIsMutable();
                            this.editionDefaults_.addAll(other.editionDefaults_);
                        }
                        this.onChanged();
                    }
                }
                else if (!other.editionDefaults_.isEmpty()) {
                    if (this.editionDefaultsBuilder_.isEmpty()) {
                        this.editionDefaultsBuilder_.dispose();
                        this.editionDefaultsBuilder_ = null;
                        this.editionDefaults_ = other.editionDefaults_;
                        this.bitField0_ &= 0xFFFFFBFF;
                        this.editionDefaultsBuilder_ = (GeneratedMessage.alwaysUseFieldBuilders ? this.internalGetEditionDefaultsFieldBuilder() : null);
                    }
                    else {
                        this.editionDefaultsBuilder_.addAllMessages(other.editionDefaults_);
                    }
                }
                if (other.hasFeatures()) {
                    this.mergeFeatures(other.getFeatures());
                }
                if (other.hasFeatureSupport()) {
                    this.mergeFeatureSupport(other.getFeatureSupport());
                }
                if (this.uninterpretedOptionBuilder_ == null) {
                    if (!other.uninterpretedOption_.isEmpty()) {
                        if (this.uninterpretedOption_.isEmpty()) {
                            this.uninterpretedOption_ = other.uninterpretedOption_;
                            this.bitField0_ &= 0xFFFFDFFF;
                        }
                        else {
                            this.ensureUninterpretedOptionIsMutable();
                            this.uninterpretedOption_.addAll(other.uninterpretedOption_);
                        }
                        this.onChanged();
                    }
                }
                else if (!other.uninterpretedOption_.isEmpty()) {
                    if (this.uninterpretedOptionBuilder_.isEmpty()) {
                        this.uninterpretedOptionBuilder_.dispose();
                        this.uninterpretedOptionBuilder_ = null;
                        this.uninterpretedOption_ = other.uninterpretedOption_;
                        this.bitField0_ &= 0xFFFFDFFF;
                        this.uninterpretedOptionBuilder_ = (GeneratedMessage.alwaysUseFieldBuilders ? this.internalGetUninterpretedOptionFieldBuilder() : null);
                    }
                    else {
                        this.uninterpretedOptionBuilder_.addAllMessages(other.uninterpretedOption_);
                    }
                }
                this.mergeExtensionFields(other);
                this.mergeUnknownFields(other.getUnknownFields());
                this.onChanged();
                return this;
            }
            
            @Override
            public final boolean isInitialized() {
                if (this.hasFeatures() && !this.getFeatures().isInitialized()) {
                    return false;
                }
                for (int i = 0; i < this.getUninterpretedOptionCount(); ++i) {
                    if (!this.getUninterpretedOption(i).isInitialized()) {
                        return false;
                    }
                }
                return this.extensionsAreInitialized();
            }
            
            @Override
            public Builder mergeFrom(final CodedInputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
                if (extensionRegistry == null) {
                    throw new NullPointerException();
                }
                try {
                    boolean done = false;
                    while (!done) {
                        final int tag = input.readTag();
                        switch (tag) {
                            case 0: {
                                done = true;
                                continue;
                            }
                            case 8: {
                                final int tmpRaw = input.readEnum();
                                final CType tmpValue = CType.forNumber(tmpRaw);
                                if (tmpValue == null) {
                                    this.mergeUnknownVarintField(1, tmpRaw);
                                    continue;
                                }
                                this.ctype_ = tmpRaw;
                                this.bitField0_ |= 0x1;
                                continue;
                            }
                            case 16: {
                                this.packed_ = input.readBool();
                                this.bitField0_ |= 0x2;
                                continue;
                            }
                            case 24: {
                                this.deprecated_ = input.readBool();
                                this.bitField0_ |= 0x20;
                                continue;
                            }
                            case 40: {
                                this.lazy_ = input.readBool();
                                this.bitField0_ |= 0x8;
                                continue;
                            }
                            case 48: {
                                final int tmpRaw = input.readEnum();
                                final JSType tmpValue2 = JSType.forNumber(tmpRaw);
                                if (tmpValue2 == null) {
                                    this.mergeUnknownVarintField(6, tmpRaw);
                                    continue;
                                }
                                this.jstype_ = tmpRaw;
                                this.bitField0_ |= 0x4;
                                continue;
                            }
                            case 80: {
                                this.weak_ = input.readBool();
                                this.bitField0_ |= 0x40;
                                continue;
                            }
                            case 120: {
                                this.unverifiedLazy_ = input.readBool();
                                this.bitField0_ |= 0x10;
                                continue;
                            }
                            case 128: {
                                this.debugRedact_ = input.readBool();
                                this.bitField0_ |= 0x80;
                                continue;
                            }
                            case 136: {
                                final int tmpRaw = input.readEnum();
                                final OptionRetention tmpValue3 = OptionRetention.forNumber(tmpRaw);
                                if (tmpValue3 == null) {
                                    this.mergeUnknownVarintField(17, tmpRaw);
                                    continue;
                                }
                                this.retention_ = tmpRaw;
                                this.bitField0_ |= 0x100;
                                continue;
                            }
                            case 152: {
                                final int tmpRaw = input.readEnum();
                                final OptionTargetType tmpValue4 = OptionTargetType.forNumber(tmpRaw);
                                if (tmpValue4 == null) {
                                    this.mergeUnknownVarintField(19, tmpRaw);
                                    continue;
                                }
                                this.ensureTargetsIsMutable();
                                this.targets_.addInt(tmpRaw);
                                continue;
                            }
                            case 154: {
                                final int length = input.readRawVarint32();
                                final int limit = input.pushLimit(length);
                                this.ensureTargetsIsMutable();
                                while (input.getBytesUntilLimit() > 0) {
                                    final int tmpRaw2 = input.readEnum();
                                    final OptionTargetType tmpValue5 = OptionTargetType.forNumber(tmpRaw2);
                                    if (tmpValue5 == null) {
                                        this.mergeUnknownVarintField(19, tmpRaw2);
                                    }
                                    else {
                                        this.targets_.addInt(tmpRaw2);
                                    }
                                }
                                input.popLimit(limit);
                                continue;
                            }
                            case 162: {
                                final EditionDefault m = input.readMessage(EditionDefault.parser(), extensionRegistry);
                                if (this.editionDefaultsBuilder_ == null) {
                                    this.ensureEditionDefaultsIsMutable();
                                    this.editionDefaults_.add(m);
                                    continue;
                                }
                                this.editionDefaultsBuilder_.addMessage(m);
                                continue;
                            }
                            case 170: {
                                input.readMessage(this.internalGetFeaturesFieldBuilder().getBuilder(), extensionRegistry);
                                this.bitField0_ |= 0x800;
                                continue;
                            }
                            case 178: {
                                input.readMessage(this.internalGetFeatureSupportFieldBuilder().getBuilder(), extensionRegistry);
                                this.bitField0_ |= 0x1000;
                                continue;
                            }
                            case 7994: {
                                final UninterpretedOption i = input.readMessage(UninterpretedOption.parser(), extensionRegistry);
                                if (this.uninterpretedOptionBuilder_ == null) {
                                    this.ensureUninterpretedOptionIsMutable();
                                    this.uninterpretedOption_.add(i);
                                    continue;
                                }
                                this.uninterpretedOptionBuilder_.addMessage(i);
                                continue;
                            }
                            default: {
                                if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                                    done = true;
                                    continue;
                                }
                                continue;
                            }
                        }
                    }
                }
                catch (final InvalidProtocolBufferException e) {
                    throw e.unwrapIOException();
                }
                finally {
                    this.onChanged();
                }
                return this;
            }
            
            @Override
            public boolean hasCtype() {
                return (this.bitField0_ & 0x1) != 0x0;
            }
            
            @Override
            public CType getCtype() {
                final CType result = CType.forNumber(this.ctype_);
                return (result == null) ? CType.STRING : result;
            }
            
            public Builder setCtype(final CType value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                this.bitField0_ |= 0x1;
                this.ctype_ = value.getNumber();
                this.onChanged();
                return this;
            }
            
            public Builder clearCtype() {
                this.bitField0_ &= 0xFFFFFFFE;
                this.ctype_ = 0;
                this.onChanged();
                return this;
            }
            
            @Override
            public boolean hasPacked() {
                return (this.bitField0_ & 0x2) != 0x0;
            }
            
            @Override
            public boolean getPacked() {
                return this.packed_;
            }
            
            public Builder setPacked(final boolean value) {
                this.packed_ = value;
                this.bitField0_ |= 0x2;
                this.onChanged();
                return this;
            }
            
            public Builder clearPacked() {
                this.bitField0_ &= 0xFFFFFFFD;
                this.packed_ = false;
                this.onChanged();
                return this;
            }
            
            @Override
            public boolean hasJstype() {
                return (this.bitField0_ & 0x4) != 0x0;
            }
            
            @Override
            public JSType getJstype() {
                final JSType result = JSType.forNumber(this.jstype_);
                return (result == null) ? JSType.JS_NORMAL : result;
            }
            
            public Builder setJstype(final JSType value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                this.bitField0_ |= 0x4;
                this.jstype_ = value.getNumber();
                this.onChanged();
                return this;
            }
            
            public Builder clearJstype() {
                this.bitField0_ &= 0xFFFFFFFB;
                this.jstype_ = 0;
                this.onChanged();
                return this;
            }
            
            @Override
            public boolean hasLazy() {
                return (this.bitField0_ & 0x8) != 0x0;
            }
            
            @Override
            public boolean getLazy() {
                return this.lazy_;
            }
            
            public Builder setLazy(final boolean value) {
                this.lazy_ = value;
                this.bitField0_ |= 0x8;
                this.onChanged();
                return this;
            }
            
            public Builder clearLazy() {
                this.bitField0_ &= 0xFFFFFFF7;
                this.lazy_ = false;
                this.onChanged();
                return this;
            }
            
            @Override
            public boolean hasUnverifiedLazy() {
                return (this.bitField0_ & 0x10) != 0x0;
            }
            
            @Override
            public boolean getUnverifiedLazy() {
                return this.unverifiedLazy_;
            }
            
            public Builder setUnverifiedLazy(final boolean value) {
                this.unverifiedLazy_ = value;
                this.bitField0_ |= 0x10;
                this.onChanged();
                return this;
            }
            
            public Builder clearUnverifiedLazy() {
                this.bitField0_ &= 0xFFFFFFEF;
                this.unverifiedLazy_ = false;
                this.onChanged();
                return this;
            }
            
            @Override
            public boolean hasDeprecated() {
                return (this.bitField0_ & 0x20) != 0x0;
            }
            
            @Override
            public boolean getDeprecated() {
                return this.deprecated_;
            }
            
            public Builder setDeprecated(final boolean value) {
                this.deprecated_ = value;
                this.bitField0_ |= 0x20;
                this.onChanged();
                return this;
            }
            
            public Builder clearDeprecated() {
                this.bitField0_ &= 0xFFFFFFDF;
                this.deprecated_ = false;
                this.onChanged();
                return this;
            }
            
            @Deprecated
            @Override
            public boolean hasWeak() {
                return (this.bitField0_ & 0x40) != 0x0;
            }
            
            @Deprecated
            @Override
            public boolean getWeak() {
                return this.weak_;
            }
            
            @Deprecated
            public Builder setWeak(final boolean value) {
                this.weak_ = value;
                this.bitField0_ |= 0x40;
                this.onChanged();
                return this;
            }
            
            @Deprecated
            public Builder clearWeak() {
                this.bitField0_ &= 0xFFFFFFBF;
                this.weak_ = false;
                this.onChanged();
                return this;
            }
            
            @Override
            public boolean hasDebugRedact() {
                return (this.bitField0_ & 0x80) != 0x0;
            }
            
            @Override
            public boolean getDebugRedact() {
                return this.debugRedact_;
            }
            
            public Builder setDebugRedact(final boolean value) {
                this.debugRedact_ = value;
                this.bitField0_ |= 0x80;
                this.onChanged();
                return this;
            }
            
            public Builder clearDebugRedact() {
                this.bitField0_ &= 0xFFFFFF7F;
                this.debugRedact_ = false;
                this.onChanged();
                return this;
            }
            
            @Override
            public boolean hasRetention() {
                return (this.bitField0_ & 0x100) != 0x0;
            }
            
            @Override
            public OptionRetention getRetention() {
                final OptionRetention result = OptionRetention.forNumber(this.retention_);
                return (result == null) ? OptionRetention.RETENTION_UNKNOWN : result;
            }
            
            public Builder setRetention(final OptionRetention value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                this.bitField0_ |= 0x100;
                this.retention_ = value.getNumber();
                this.onChanged();
                return this;
            }
            
            public Builder clearRetention() {
                this.bitField0_ &= 0xFFFFFEFF;
                this.retention_ = 0;
                this.onChanged();
                return this;
            }
            
            private void ensureTargetsIsMutable() {
                if (!this.targets_.isModifiable()) {
                    this.targets_ = GeneratedMessage.makeMutableCopy(this.targets_);
                }
                this.bitField0_ |= 0x200;
            }
            
            @Override
            public List<OptionTargetType> getTargetsList() {
                return new Internal.IntListAdapter<OptionTargetType>(this.targets_, FieldOptions.targets_converter_);
            }
            
            @Override
            public int getTargetsCount() {
                return this.targets_.size();
            }
            
            @Override
            public OptionTargetType getTargets(final int index) {
                return FieldOptions.targets_converter_.convert(this.targets_.getInt(index));
            }
            
            public Builder setTargets(final int index, final OptionTargetType value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                this.ensureTargetsIsMutable();
                this.targets_.setInt(index, value.getNumber());
                this.onChanged();
                return this;
            }
            
            public Builder addTargets(final OptionTargetType value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                this.ensureTargetsIsMutable();
                this.targets_.addInt(value.getNumber());
                this.onChanged();
                return this;
            }
            
            public Builder addAllTargets(final Iterable<? extends OptionTargetType> values) {
                this.ensureTargetsIsMutable();
                for (final OptionTargetType value : values) {
                    this.targets_.addInt(value.getNumber());
                }
                this.onChanged();
                return this;
            }
            
            public Builder clearTargets() {
                this.targets_ = GeneratedMessage.emptyIntList();
                this.bitField0_ &= 0xFFFFFDFF;
                this.onChanged();
                return this;
            }
            
            private void ensureEditionDefaultsIsMutable() {
                if ((this.bitField0_ & 0x400) == 0x0) {
                    this.editionDefaults_ = new ArrayList<EditionDefault>(this.editionDefaults_);
                    this.bitField0_ |= 0x400;
                }
            }
            
            @Override
            public List<EditionDefault> getEditionDefaultsList() {
                if (this.editionDefaultsBuilder_ == null) {
                    return Collections.unmodifiableList((List<? extends EditionDefault>)this.editionDefaults_);
                }
                return this.editionDefaultsBuilder_.getMessageList();
            }
            
            @Override
            public int getEditionDefaultsCount() {
                if (this.editionDefaultsBuilder_ == null) {
                    return this.editionDefaults_.size();
                }
                return this.editionDefaultsBuilder_.getCount();
            }
            
            @Override
            public EditionDefault getEditionDefaults(final int index) {
                if (this.editionDefaultsBuilder_ == null) {
                    return this.editionDefaults_.get(index);
                }
                return this.editionDefaultsBuilder_.getMessage(index);
            }
            
            public Builder setEditionDefaults(final int index, final EditionDefault value) {
                if (this.editionDefaultsBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.ensureEditionDefaultsIsMutable();
                    this.editionDefaults_.set(index, value);
                    this.onChanged();
                }
                else {
                    this.editionDefaultsBuilder_.setMessage(index, value);
                }
                return this;
            }
            
            public Builder setEditionDefaults(final int index, final EditionDefault.Builder builderForValue) {
                if (this.editionDefaultsBuilder_ == null) {
                    this.ensureEditionDefaultsIsMutable();
                    this.editionDefaults_.set(index, builderForValue.build());
                    this.onChanged();
                }
                else {
                    this.editionDefaultsBuilder_.setMessage(index, builderForValue.build());
                }
                return this;
            }
            
            public Builder addEditionDefaults(final EditionDefault value) {
                if (this.editionDefaultsBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.ensureEditionDefaultsIsMutable();
                    this.editionDefaults_.add(value);
                    this.onChanged();
                }
                else {
                    this.editionDefaultsBuilder_.addMessage(value);
                }
                return this;
            }
            
            public Builder addEditionDefaults(final int index, final EditionDefault value) {
                if (this.editionDefaultsBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.ensureEditionDefaultsIsMutable();
                    this.editionDefaults_.add(index, value);
                    this.onChanged();
                }
                else {
                    this.editionDefaultsBuilder_.addMessage(index, value);
                }
                return this;
            }
            
            public Builder addEditionDefaults(final EditionDefault.Builder builderForValue) {
                if (this.editionDefaultsBuilder_ == null) {
                    this.ensureEditionDefaultsIsMutable();
                    this.editionDefaults_.add(builderForValue.build());
                    this.onChanged();
                }
                else {
                    this.editionDefaultsBuilder_.addMessage(builderForValue.build());
                }
                return this;
            }
            
            public Builder addEditionDefaults(final int index, final EditionDefault.Builder builderForValue) {
                if (this.editionDefaultsBuilder_ == null) {
                    this.ensureEditionDefaultsIsMutable();
                    this.editionDefaults_.add(index, builderForValue.build());
                    this.onChanged();
                }
                else {
                    this.editionDefaultsBuilder_.addMessage(index, builderForValue.build());
                }
                return this;
            }
            
            public Builder addAllEditionDefaults(final Iterable<? extends EditionDefault> values) {
                if (this.editionDefaultsBuilder_ == null) {
                    this.ensureEditionDefaultsIsMutable();
                    AbstractMessageLite.Builder.addAll(values, this.editionDefaults_);
                    this.onChanged();
                }
                else {
                    this.editionDefaultsBuilder_.addAllMessages(values);
                }
                return this;
            }
            
            public Builder clearEditionDefaults() {
                if (this.editionDefaultsBuilder_ == null) {
                    this.editionDefaults_ = Collections.emptyList();
                    this.bitField0_ &= 0xFFFFFBFF;
                    this.onChanged();
                }
                else {
                    this.editionDefaultsBuilder_.clear();
                }
                return this;
            }
            
            public Builder removeEditionDefaults(final int index) {
                if (this.editionDefaultsBuilder_ == null) {
                    this.ensureEditionDefaultsIsMutable();
                    this.editionDefaults_.remove(index);
                    this.onChanged();
                }
                else {
                    this.editionDefaultsBuilder_.remove(index);
                }
                return this;
            }
            
            public EditionDefault.Builder getEditionDefaultsBuilder(final int index) {
                return this.internalGetEditionDefaultsFieldBuilder().getBuilder(index);
            }
            
            @Override
            public EditionDefaultOrBuilder getEditionDefaultsOrBuilder(final int index) {
                if (this.editionDefaultsBuilder_ == null) {
                    return this.editionDefaults_.get(index);
                }
                return this.editionDefaultsBuilder_.getMessageOrBuilder(index);
            }
            
            @Override
            public List<? extends EditionDefaultOrBuilder> getEditionDefaultsOrBuilderList() {
                if (this.editionDefaultsBuilder_ != null) {
                    return this.editionDefaultsBuilder_.getMessageOrBuilderList();
                }
                return Collections.unmodifiableList((List<? extends EditionDefaultOrBuilder>)this.editionDefaults_);
            }
            
            public EditionDefault.Builder addEditionDefaultsBuilder() {
                return this.internalGetEditionDefaultsFieldBuilder().addBuilder(EditionDefault.getDefaultInstance());
            }
            
            public EditionDefault.Builder addEditionDefaultsBuilder(final int index) {
                return this.internalGetEditionDefaultsFieldBuilder().addBuilder(index, EditionDefault.getDefaultInstance());
            }
            
            public List<EditionDefault.Builder> getEditionDefaultsBuilderList() {
                return this.internalGetEditionDefaultsFieldBuilder().getBuilderList();
            }
            
            private RepeatedFieldBuilder<EditionDefault, EditionDefault.Builder, EditionDefaultOrBuilder> internalGetEditionDefaultsFieldBuilder() {
                if (this.editionDefaultsBuilder_ == null) {
                    this.editionDefaultsBuilder_ = new RepeatedFieldBuilder<EditionDefault, EditionDefault.Builder, EditionDefaultOrBuilder>(this.editionDefaults_, (this.bitField0_ & 0x400) != 0x0, this.getParentForChildren(), this.isClean());
                    this.editionDefaults_ = null;
                }
                return this.editionDefaultsBuilder_;
            }
            
            @Override
            public boolean hasFeatures() {
                return (this.bitField0_ & 0x800) != 0x0;
            }
            
            @Override
            public FeatureSet getFeatures() {
                if (this.featuresBuilder_ == null) {
                    return (this.features_ == null) ? FeatureSet.getDefaultInstance() : this.features_;
                }
                return this.featuresBuilder_.getMessage();
            }
            
            public Builder setFeatures(final FeatureSet value) {
                if (this.featuresBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.features_ = value;
                }
                else {
                    this.featuresBuilder_.setMessage(value);
                }
                this.bitField0_ |= 0x800;
                this.onChanged();
                return this;
            }
            
            public Builder setFeatures(final FeatureSet.Builder builderForValue) {
                if (this.featuresBuilder_ == null) {
                    this.features_ = builderForValue.build();
                }
                else {
                    this.featuresBuilder_.setMessage(builderForValue.build());
                }
                this.bitField0_ |= 0x800;
                this.onChanged();
                return this;
            }
            
            public Builder mergeFeatures(final FeatureSet value) {
                if (this.featuresBuilder_ == null) {
                    if ((this.bitField0_ & 0x800) != 0x0 && this.features_ != null && this.features_ != FeatureSet.getDefaultInstance()) {
                        this.getFeaturesBuilder().mergeFrom(value);
                    }
                    else {
                        this.features_ = value;
                    }
                }
                else {
                    this.featuresBuilder_.mergeFrom(value);
                }
                if (this.features_ != null) {
                    this.bitField0_ |= 0x800;
                    this.onChanged();
                }
                return this;
            }
            
            public Builder clearFeatures() {
                this.bitField0_ &= 0xFFFFF7FF;
                this.features_ = null;
                if (this.featuresBuilder_ != null) {
                    this.featuresBuilder_.dispose();
                    this.featuresBuilder_ = null;
                }
                this.onChanged();
                return this;
            }
            
            public FeatureSet.Builder getFeaturesBuilder() {
                this.bitField0_ |= 0x800;
                this.onChanged();
                return this.internalGetFeaturesFieldBuilder().getBuilder();
            }
            
            @Override
            public FeatureSetOrBuilder getFeaturesOrBuilder() {
                if (this.featuresBuilder_ != null) {
                    return this.featuresBuilder_.getMessageOrBuilder();
                }
                return (this.features_ == null) ? FeatureSet.getDefaultInstance() : this.features_;
            }
            
            private SingleFieldBuilder<FeatureSet, FeatureSet.Builder, FeatureSetOrBuilder> internalGetFeaturesFieldBuilder() {
                if (this.featuresBuilder_ == null) {
                    this.featuresBuilder_ = new SingleFieldBuilder<FeatureSet, FeatureSet.Builder, FeatureSetOrBuilder>(this.getFeatures(), this.getParentForChildren(), this.isClean());
                    this.features_ = null;
                }
                return this.featuresBuilder_;
            }
            
            @Override
            public boolean hasFeatureSupport() {
                return (this.bitField0_ & 0x1000) != 0x0;
            }
            
            @Override
            public FeatureSupport getFeatureSupport() {
                if (this.featureSupportBuilder_ == null) {
                    return (this.featureSupport_ == null) ? FeatureSupport.getDefaultInstance() : this.featureSupport_;
                }
                return this.featureSupportBuilder_.getMessage();
            }
            
            public Builder setFeatureSupport(final FeatureSupport value) {
                if (this.featureSupportBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.featureSupport_ = value;
                }
                else {
                    this.featureSupportBuilder_.setMessage(value);
                }
                this.bitField0_ |= 0x1000;
                this.onChanged();
                return this;
            }
            
            public Builder setFeatureSupport(final FeatureSupport.Builder builderForValue) {
                if (this.featureSupportBuilder_ == null) {
                    this.featureSupport_ = builderForValue.build();
                }
                else {
                    this.featureSupportBuilder_.setMessage(builderForValue.build());
                }
                this.bitField0_ |= 0x1000;
                this.onChanged();
                return this;
            }
            
            public Builder mergeFeatureSupport(final FeatureSupport value) {
                if (this.featureSupportBuilder_ == null) {
                    if ((this.bitField0_ & 0x1000) != 0x0 && this.featureSupport_ != null && this.featureSupport_ != FeatureSupport.getDefaultInstance()) {
                        this.getFeatureSupportBuilder().mergeFrom(value);
                    }
                    else {
                        this.featureSupport_ = value;
                    }
                }
                else {
                    this.featureSupportBuilder_.mergeFrom(value);
                }
                if (this.featureSupport_ != null) {
                    this.bitField0_ |= 0x1000;
                    this.onChanged();
                }
                return this;
            }
            
            public Builder clearFeatureSupport() {
                this.bitField0_ &= 0xFFFFEFFF;
                this.featureSupport_ = null;
                if (this.featureSupportBuilder_ != null) {
                    this.featureSupportBuilder_.dispose();
                    this.featureSupportBuilder_ = null;
                }
                this.onChanged();
                return this;
            }
            
            public FeatureSupport.Builder getFeatureSupportBuilder() {
                this.bitField0_ |= 0x1000;
                this.onChanged();
                return this.internalGetFeatureSupportFieldBuilder().getBuilder();
            }
            
            @Override
            public FeatureSupportOrBuilder getFeatureSupportOrBuilder() {
                if (this.featureSupportBuilder_ != null) {
                    return this.featureSupportBuilder_.getMessageOrBuilder();
                }
                return (this.featureSupport_ == null) ? FeatureSupport.getDefaultInstance() : this.featureSupport_;
            }
            
            private SingleFieldBuilder<FeatureSupport, FeatureSupport.Builder, FeatureSupportOrBuilder> internalGetFeatureSupportFieldBuilder() {
                if (this.featureSupportBuilder_ == null) {
                    this.featureSupportBuilder_ = new SingleFieldBuilder<FeatureSupport, FeatureSupport.Builder, FeatureSupportOrBuilder>(this.getFeatureSupport(), this.getParentForChildren(), this.isClean());
                    this.featureSupport_ = null;
                }
                return this.featureSupportBuilder_;
            }
            
            private void ensureUninterpretedOptionIsMutable() {
                if ((this.bitField0_ & 0x2000) == 0x0) {
                    this.uninterpretedOption_ = new ArrayList<UninterpretedOption>(this.uninterpretedOption_);
                    this.bitField0_ |= 0x2000;
                }
            }
            
            @Override
            public List<UninterpretedOption> getUninterpretedOptionList() {
                if (this.uninterpretedOptionBuilder_ == null) {
                    return Collections.unmodifiableList((List<? extends UninterpretedOption>)this.uninterpretedOption_);
                }
                return this.uninterpretedOptionBuilder_.getMessageList();
            }
            
            @Override
            public int getUninterpretedOptionCount() {
                if (this.uninterpretedOptionBuilder_ == null) {
                    return this.uninterpretedOption_.size();
                }
                return this.uninterpretedOptionBuilder_.getCount();
            }
            
            @Override
            public UninterpretedOption getUninterpretedOption(final int index) {
                if (this.uninterpretedOptionBuilder_ == null) {
                    return this.uninterpretedOption_.get(index);
                }
                return this.uninterpretedOptionBuilder_.getMessage(index);
            }
            
            public Builder setUninterpretedOption(final int index, final UninterpretedOption value) {
                if (this.uninterpretedOptionBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.ensureUninterpretedOptionIsMutable();
                    this.uninterpretedOption_.set(index, value);
                    this.onChanged();
                }
                else {
                    this.uninterpretedOptionBuilder_.setMessage(index, value);
                }
                return this;
            }
            
            public Builder setUninterpretedOption(final int index, final UninterpretedOption.Builder builderForValue) {
                if (this.uninterpretedOptionBuilder_ == null) {
                    this.ensureUninterpretedOptionIsMutable();
                    this.uninterpretedOption_.set(index, builderForValue.build());
                    this.onChanged();
                }
                else {
                    this.uninterpretedOptionBuilder_.setMessage(index, builderForValue.build());
                }
                return this;
            }
            
            public Builder addUninterpretedOption(final UninterpretedOption value) {
                if (this.uninterpretedOptionBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.ensureUninterpretedOptionIsMutable();
                    this.uninterpretedOption_.add(value);
                    this.onChanged();
                }
                else {
                    this.uninterpretedOptionBuilder_.addMessage(value);
                }
                return this;
            }
            
            public Builder addUninterpretedOption(final int index, final UninterpretedOption value) {
                if (this.uninterpretedOptionBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.ensureUninterpretedOptionIsMutable();
                    this.uninterpretedOption_.add(index, value);
                    this.onChanged();
                }
                else {
                    this.uninterpretedOptionBuilder_.addMessage(index, value);
                }
                return this;
            }
            
            public Builder addUninterpretedOption(final UninterpretedOption.Builder builderForValue) {
                if (this.uninterpretedOptionBuilder_ == null) {
                    this.ensureUninterpretedOptionIsMutable();
                    this.uninterpretedOption_.add(builderForValue.build());
                    this.onChanged();
                }
                else {
                    this.uninterpretedOptionBuilder_.addMessage(builderForValue.build());
                }
                return this;
            }
            
            public Builder addUninterpretedOption(final int index, final UninterpretedOption.Builder builderForValue) {
                if (this.uninterpretedOptionBuilder_ == null) {
                    this.ensureUninterpretedOptionIsMutable();
                    this.uninterpretedOption_.add(index, builderForValue.build());
                    this.onChanged();
                }
                else {
                    this.uninterpretedOptionBuilder_.addMessage(index, builderForValue.build());
                }
                return this;
            }
            
            public Builder addAllUninterpretedOption(final Iterable<? extends UninterpretedOption> values) {
                if (this.uninterpretedOptionBuilder_ == null) {
                    this.ensureUninterpretedOptionIsMutable();
                    AbstractMessageLite.Builder.addAll(values, this.uninterpretedOption_);
                    this.onChanged();
                }
                else {
                    this.uninterpretedOptionBuilder_.addAllMessages(values);
                }
                return this;
            }
            
            public Builder clearUninterpretedOption() {
                if (this.uninterpretedOptionBuilder_ == null) {
                    this.uninterpretedOption_ = Collections.emptyList();
                    this.bitField0_ &= 0xFFFFDFFF;
                    this.onChanged();
                }
                else {
                    this.uninterpretedOptionBuilder_.clear();
                }
                return this;
            }
            
            public Builder removeUninterpretedOption(final int index) {
                if (this.uninterpretedOptionBuilder_ == null) {
                    this.ensureUninterpretedOptionIsMutable();
                    this.uninterpretedOption_.remove(index);
                    this.onChanged();
                }
                else {
                    this.uninterpretedOptionBuilder_.remove(index);
                }
                return this;
            }
            
            public UninterpretedOption.Builder getUninterpretedOptionBuilder(final int index) {
                return this.internalGetUninterpretedOptionFieldBuilder().getBuilder(index);
            }
            
            @Override
            public UninterpretedOptionOrBuilder getUninterpretedOptionOrBuilder(final int index) {
                if (this.uninterpretedOptionBuilder_ == null) {
                    return this.uninterpretedOption_.get(index);
                }
                return this.uninterpretedOptionBuilder_.getMessageOrBuilder(index);
            }
            
            @Override
            public List<? extends UninterpretedOptionOrBuilder> getUninterpretedOptionOrBuilderList() {
                if (this.uninterpretedOptionBuilder_ != null) {
                    return this.uninterpretedOptionBuilder_.getMessageOrBuilderList();
                }
                return Collections.unmodifiableList((List<? extends UninterpretedOptionOrBuilder>)this.uninterpretedOption_);
            }
            
            public UninterpretedOption.Builder addUninterpretedOptionBuilder() {
                return this.internalGetUninterpretedOptionFieldBuilder().addBuilder(UninterpretedOption.getDefaultInstance());
            }
            
            public UninterpretedOption.Builder addUninterpretedOptionBuilder(final int index) {
                return this.internalGetUninterpretedOptionFieldBuilder().addBuilder(index, UninterpretedOption.getDefaultInstance());
            }
            
            public List<UninterpretedOption.Builder> getUninterpretedOptionBuilderList() {
                return this.internalGetUninterpretedOptionFieldBuilder().getBuilderList();
            }
            
            private RepeatedFieldBuilder<UninterpretedOption, UninterpretedOption.Builder, UninterpretedOptionOrBuilder> internalGetUninterpretedOptionFieldBuilder() {
                if (this.uninterpretedOptionBuilder_ == null) {
                    this.uninterpretedOptionBuilder_ = new RepeatedFieldBuilder<UninterpretedOption, UninterpretedOption.Builder, UninterpretedOptionOrBuilder>(this.uninterpretedOption_, (this.bitField0_ & 0x2000) != 0x0, this.getParentForChildren(), this.isClean());
                    this.uninterpretedOption_ = null;
                }
                return this.uninterpretedOptionBuilder_;
            }
        }
        
        public interface EditionDefaultOrBuilder extends MessageOrBuilder
        {
            boolean hasEdition();
            
            Edition getEdition();
            
            boolean hasValue();
            
            String getValue();
            
            ByteString getValueBytes();
        }
        
        public interface FeatureSupportOrBuilder extends MessageOrBuilder
        {
            boolean hasEditionIntroduced();
            
            Edition getEditionIntroduced();
            
            boolean hasEditionDeprecated();
            
            Edition getEditionDeprecated();
            
            boolean hasDeprecationWarning();
            
            String getDeprecationWarning();
            
            ByteString getDeprecationWarningBytes();
            
            boolean hasEditionRemoved();
            
            Edition getEditionRemoved();
        }
    }
    
    public static final class OneofOptions extends ExtendableMessage<OneofOptions> implements OneofOptionsOrBuilder
    {
        private static final long serialVersionUID = 0L;
        private int bitField0_;
        public static final int FEATURES_FIELD_NUMBER = 1;
        private FeatureSet features_;
        public static final int UNINTERPRETED_OPTION_FIELD_NUMBER = 999;
        private List<UninterpretedOption> uninterpretedOption_;
        private byte memoizedIsInitialized;
        private static final OneofOptions DEFAULT_INSTANCE;
        private static final Parser<OneofOptions> PARSER;
        
        private OneofOptions(final ExtendableBuilder<OneofOptions, ?> builder) {
            super(builder);
            this.memoizedIsInitialized = -1;
        }
        
        private OneofOptions() {
            this.memoizedIsInitialized = -1;
            this.uninterpretedOption_ = Collections.emptyList();
        }
        
        public static final Descriptors.Descriptor getDescriptor() {
            return DescriptorProtos.internal_static_google_protobuf_OneofOptions_descriptor;
        }
        
        @Override
        protected FieldAccessorTable internalGetFieldAccessorTable() {
            return DescriptorProtos.internal_static_google_protobuf_OneofOptions_fieldAccessorTable.ensureFieldAccessorsInitialized(OneofOptions.class, Builder.class);
        }
        
        @Override
        public boolean hasFeatures() {
            return (this.bitField0_ & 0x1) != 0x0;
        }
        
        @Override
        public FeatureSet getFeatures() {
            return (this.features_ == null) ? FeatureSet.getDefaultInstance() : this.features_;
        }
        
        @Override
        public FeatureSetOrBuilder getFeaturesOrBuilder() {
            return (this.features_ == null) ? FeatureSet.getDefaultInstance() : this.features_;
        }
        
        @Override
        public List<UninterpretedOption> getUninterpretedOptionList() {
            return this.uninterpretedOption_;
        }
        
        @Override
        public List<? extends UninterpretedOptionOrBuilder> getUninterpretedOptionOrBuilderList() {
            return this.uninterpretedOption_;
        }
        
        @Override
        public int getUninterpretedOptionCount() {
            return this.uninterpretedOption_.size();
        }
        
        @Override
        public UninterpretedOption getUninterpretedOption(final int index) {
            return this.uninterpretedOption_.get(index);
        }
        
        @Override
        public UninterpretedOptionOrBuilder getUninterpretedOptionOrBuilder(final int index) {
            return this.uninterpretedOption_.get(index);
        }
        
        @Override
        public final boolean isInitialized() {
            final byte isInitialized = this.memoizedIsInitialized;
            if (isInitialized == 1) {
                return true;
            }
            if (isInitialized == 0) {
                return false;
            }
            if (this.hasFeatures() && !this.getFeatures().isInitialized()) {
                this.memoizedIsInitialized = 0;
                return false;
            }
            for (int i = 0; i < this.getUninterpretedOptionCount(); ++i) {
                if (!this.getUninterpretedOption(i).isInitialized()) {
                    this.memoizedIsInitialized = 0;
                    return false;
                }
            }
            if (!this.extensionsAreInitialized()) {
                this.memoizedIsInitialized = 0;
                return false;
            }
            this.memoizedIsInitialized = 1;
            return true;
        }
        
        @Override
        public void writeTo(final CodedOutputStream output) throws IOException {
            final ExtensionSerializer extensionWriter = this.newExtensionSerializer();
            if ((this.bitField0_ & 0x1) != 0x0) {
                output.writeMessage(1, this.getFeatures());
            }
            for (int i = 0; i < this.uninterpretedOption_.size(); ++i) {
                output.writeMessage(999, this.uninterpretedOption_.get(i));
            }
            extensionWriter.writeUntil(536870912, output);
            this.getUnknownFields().writeTo(output);
        }
        
        @Override
        public int getSerializedSize() {
            int size = this.memoizedSize;
            if (size != -1) {
                return size;
            }
            size = 0;
            if ((this.bitField0_ & 0x1) != 0x0) {
                size += CodedOutputStream.computeMessageSize(1, this.getFeatures());
            }
            for (int i = 0; i < this.uninterpretedOption_.size(); ++i) {
                size += CodedOutputStream.computeMessageSize(999, this.uninterpretedOption_.get(i));
            }
            size += this.extensionsSerializedSize();
            size += this.getUnknownFields().getSerializedSize();
            return this.memoizedSize = size;
        }
        
        @Override
        public boolean equals(final Object obj) {
            if (obj == this) {
                return true;
            }
            if (!(obj instanceof OneofOptions)) {
                return super.equals(obj);
            }
            final OneofOptions other = (OneofOptions)obj;
            return this.hasFeatures() == other.hasFeatures() && (!this.hasFeatures() || this.getFeatures().equals(other.getFeatures())) && this.getUninterpretedOptionList().equals(other.getUninterpretedOptionList()) && this.getUnknownFields().equals(other.getUnknownFields()) && this.getExtensionFields().equals(other.getExtensionFields());
        }
        
        @Override
        public int hashCode() {
            if (this.memoizedHashCode != 0) {
                return this.memoizedHashCode;
            }
            int hash = 41;
            hash = 19 * hash + getDescriptor().hashCode();
            if (this.hasFeatures()) {
                hash = 37 * hash + 1;
                hash = 53 * hash + this.getFeatures().hashCode();
            }
            if (this.getUninterpretedOptionCount() > 0) {
                hash = 37 * hash + 999;
                hash = 53 * hash + this.getUninterpretedOptionList().hashCode();
            }
            hash = AbstractMessage.hashFields(hash, this.getExtensionFields());
            hash = 29 * hash + this.getUnknownFields().hashCode();
            return this.memoizedHashCode = hash;
        }
        
        public static OneofOptions parseFrom(final ByteBuffer data) throws InvalidProtocolBufferException {
            return OneofOptions.PARSER.parseFrom(data);
        }
        
        public static OneofOptions parseFrom(final ByteBuffer data, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
            return OneofOptions.PARSER.parseFrom(data, extensionRegistry);
        }
        
        public static OneofOptions parseFrom(final ByteString data) throws InvalidProtocolBufferException {
            return OneofOptions.PARSER.parseFrom(data);
        }
        
        public static OneofOptions parseFrom(final ByteString data, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
            return OneofOptions.PARSER.parseFrom(data, extensionRegistry);
        }
        
        public static OneofOptions parseFrom(final byte[] data) throws InvalidProtocolBufferException {
            return OneofOptions.PARSER.parseFrom(data);
        }
        
        public static OneofOptions parseFrom(final byte[] data, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
            return OneofOptions.PARSER.parseFrom(data, extensionRegistry);
        }
        
        public static OneofOptions parseFrom(final InputStream input) throws IOException {
            return GeneratedMessage.parseWithIOException(OneofOptions.PARSER, input);
        }
        
        public static OneofOptions parseFrom(final InputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
            return GeneratedMessage.parseWithIOException(OneofOptions.PARSER, input, extensionRegistry);
        }
        
        public static OneofOptions parseDelimitedFrom(final InputStream input) throws IOException {
            return GeneratedMessage.parseDelimitedWithIOException(OneofOptions.PARSER, input);
        }
        
        public static OneofOptions parseDelimitedFrom(final InputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
            return GeneratedMessage.parseDelimitedWithIOException(OneofOptions.PARSER, input, extensionRegistry);
        }
        
        public static OneofOptions parseFrom(final CodedInputStream input) throws IOException {
            return GeneratedMessage.parseWithIOException(OneofOptions.PARSER, input);
        }
        
        public static OneofOptions parseFrom(final CodedInputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
            return GeneratedMessage.parseWithIOException(OneofOptions.PARSER, input, extensionRegistry);
        }
        
        @Override
        public Builder newBuilderForType() {
            return newBuilder();
        }
        
        public static Builder newBuilder() {
            return OneofOptions.DEFAULT_INSTANCE.toBuilder();
        }
        
        public static Builder newBuilder(final OneofOptions prototype) {
            return OneofOptions.DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
        }
        
        @Override
        public Builder toBuilder() {
            return (this == OneofOptions.DEFAULT_INSTANCE) ? new Builder() : new Builder().mergeFrom(this);
        }
        
        @Override
        protected Builder newBuilderForType(final BuilderParent parent) {
            final Builder builder = new Builder(parent);
            return builder;
        }
        
        public static OneofOptions getDefaultInstance() {
            return OneofOptions.DEFAULT_INSTANCE;
        }
        
        public static Parser<OneofOptions> parser() {
            return OneofOptions.PARSER;
        }
        
        @Override
        public Parser<OneofOptions> getParserForType() {
            return OneofOptions.PARSER;
        }
        
        @Override
        public OneofOptions getDefaultInstanceForType() {
            return OneofOptions.DEFAULT_INSTANCE;
        }
        
        static {
            RuntimeVersion.validateProtobufGencodeVersion(RuntimeVersion.RuntimeDomain.PUBLIC, 4, 33, 0, "", "OneofOptions");
            DEFAULT_INSTANCE = new OneofOptions();
            PARSER = new AbstractParser<OneofOptions>() {
                @Override
                public OneofOptions parsePartialFrom(final CodedInputStream input, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
                    final Builder builder = OneofOptions.newBuilder();
                    try {
                        builder.mergeFrom(input, extensionRegistry);
                    }
                    catch (final InvalidProtocolBufferException e) {
                        throw e.setUnfinishedMessage(builder.buildPartial());
                    }
                    catch (final UninitializedMessageException e2) {
                        throw e2.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
                    }
                    catch (final IOException e3) {
                        throw new InvalidProtocolBufferException(e3).setUnfinishedMessage(builder.buildPartial());
                    }
                    return builder.buildPartial();
                }
            };
        }
        
        public static final class Builder extends ExtendableBuilder<OneofOptions, Builder> implements OneofOptionsOrBuilder
        {
            private int bitField0_;
            private FeatureSet features_;
            private SingleFieldBuilder<FeatureSet, FeatureSet.Builder, FeatureSetOrBuilder> featuresBuilder_;
            private List<UninterpretedOption> uninterpretedOption_;
            private RepeatedFieldBuilder<UninterpretedOption, UninterpretedOption.Builder, UninterpretedOptionOrBuilder> uninterpretedOptionBuilder_;
            
            public static final Descriptors.Descriptor getDescriptor() {
                return DescriptorProtos.internal_static_google_protobuf_OneofOptions_descriptor;
            }
            
            @Override
            protected FieldAccessorTable internalGetFieldAccessorTable() {
                return DescriptorProtos.internal_static_google_protobuf_OneofOptions_fieldAccessorTable.ensureFieldAccessorsInitialized(OneofOptions.class, Builder.class);
            }
            
            private Builder() {
                this.uninterpretedOption_ = Collections.emptyList();
                this.maybeForceBuilderInitialization();
            }
            
            private Builder(final BuilderParent parent) {
                super(parent);
                this.uninterpretedOption_ = Collections.emptyList();
                this.maybeForceBuilderInitialization();
            }
            
            private void maybeForceBuilderInitialization() {
                if (GeneratedMessage.alwaysUseFieldBuilders) {
                    this.internalGetFeaturesFieldBuilder();
                    this.internalGetUninterpretedOptionFieldBuilder();
                }
            }
            
            @Override
            public Builder clear() {
                super.clear();
                this.bitField0_ = 0;
                this.features_ = null;
                if (this.featuresBuilder_ != null) {
                    this.featuresBuilder_.dispose();
                    this.featuresBuilder_ = null;
                }
                if (this.uninterpretedOptionBuilder_ == null) {
                    this.uninterpretedOption_ = Collections.emptyList();
                }
                else {
                    this.uninterpretedOption_ = null;
                    this.uninterpretedOptionBuilder_.clear();
                }
                this.bitField0_ &= 0xFFFFFFFD;
                return this;
            }
            
            @Override
            public Descriptors.Descriptor getDescriptorForType() {
                return DescriptorProtos.internal_static_google_protobuf_OneofOptions_descriptor;
            }
            
            @Override
            public OneofOptions getDefaultInstanceForType() {
                return OneofOptions.getDefaultInstance();
            }
            
            @Override
            public OneofOptions build() {
                final OneofOptions result = this.buildPartial();
                if (!result.isInitialized()) {
                    throw AbstractMessage.Builder.newUninitializedMessageException(result);
                }
                return result;
            }
            
            @Override
            public OneofOptions buildPartial() {
                final OneofOptions result = new OneofOptions((ExtendableBuilder)this);
                this.buildPartialRepeatedFields(result);
                if (this.bitField0_ != 0) {
                    this.buildPartial0(result);
                }
                this.onBuilt();
                return result;
            }
            
            private void buildPartialRepeatedFields(final OneofOptions result) {
                if (this.uninterpretedOptionBuilder_ == null) {
                    if ((this.bitField0_ & 0x2) != 0x0) {
                        this.uninterpretedOption_ = Collections.unmodifiableList((List<? extends UninterpretedOption>)this.uninterpretedOption_);
                        this.bitField0_ &= 0xFFFFFFFD;
                    }
                    result.uninterpretedOption_ = this.uninterpretedOption_;
                }
                else {
                    result.uninterpretedOption_ = this.uninterpretedOptionBuilder_.build();
                }
            }
            
            private void buildPartial0(final OneofOptions result) {
                final int from_bitField0_ = this.bitField0_;
                int to_bitField0_ = 0;
                if ((from_bitField0_ & 0x1) != 0x0) {
                    result.features_ = ((this.featuresBuilder_ == null) ? this.features_ : this.featuresBuilder_.build());
                    to_bitField0_ |= 0x1;
                }
                result.bitField0_ |= to_bitField0_;
            }
            
            public <Type> Builder setExtension(final GeneratedExtension<OneofOptions, Type> extension, final Type value) {
                return super.setExtension(extension, value);
            }
            
            public <Type> Builder setExtension(final GeneratedExtension<OneofOptions, List<Type>> extension, final int index, final Type value) {
                return super.setExtension(extension, index, value);
            }
            
            public <Type> Builder addExtension(final GeneratedExtension<OneofOptions, List<Type>> extension, final Type value) {
                return super.addExtension(extension, value);
            }
            
            public <Type> Builder clearExtension(final GeneratedExtension<OneofOptions, Type> extension) {
                return super.clearExtension(extension);
            }
            
            @Override
            public Builder mergeFrom(final Message other) {
                if (other instanceof OneofOptions) {
                    return this.mergeFrom((OneofOptions)other);
                }
                super.mergeFrom(other);
                return this;
            }
            
            public Builder mergeFrom(final OneofOptions other) {
                if (other == OneofOptions.getDefaultInstance()) {
                    return this;
                }
                if (other.hasFeatures()) {
                    this.mergeFeatures(other.getFeatures());
                }
                if (this.uninterpretedOptionBuilder_ == null) {
                    if (!other.uninterpretedOption_.isEmpty()) {
                        if (this.uninterpretedOption_.isEmpty()) {
                            this.uninterpretedOption_ = other.uninterpretedOption_;
                            this.bitField0_ &= 0xFFFFFFFD;
                        }
                        else {
                            this.ensureUninterpretedOptionIsMutable();
                            this.uninterpretedOption_.addAll(other.uninterpretedOption_);
                        }
                        this.onChanged();
                    }
                }
                else if (!other.uninterpretedOption_.isEmpty()) {
                    if (this.uninterpretedOptionBuilder_.isEmpty()) {
                        this.uninterpretedOptionBuilder_.dispose();
                        this.uninterpretedOptionBuilder_ = null;
                        this.uninterpretedOption_ = other.uninterpretedOption_;
                        this.bitField0_ &= 0xFFFFFFFD;
                        this.uninterpretedOptionBuilder_ = (GeneratedMessage.alwaysUseFieldBuilders ? this.internalGetUninterpretedOptionFieldBuilder() : null);
                    }
                    else {
                        this.uninterpretedOptionBuilder_.addAllMessages(other.uninterpretedOption_);
                    }
                }
                this.mergeExtensionFields(other);
                this.mergeUnknownFields(other.getUnknownFields());
                this.onChanged();
                return this;
            }
            
            @Override
            public final boolean isInitialized() {
                if (this.hasFeatures() && !this.getFeatures().isInitialized()) {
                    return false;
                }
                for (int i = 0; i < this.getUninterpretedOptionCount(); ++i) {
                    if (!this.getUninterpretedOption(i).isInitialized()) {
                        return false;
                    }
                }
                return this.extensionsAreInitialized();
            }
            
            @Override
            public Builder mergeFrom(final CodedInputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
                if (extensionRegistry == null) {
                    throw new NullPointerException();
                }
                try {
                    boolean done = false;
                    while (!done) {
                        final int tag = input.readTag();
                        switch (tag) {
                            case 0: {
                                done = true;
                                continue;
                            }
                            case 10: {
                                input.readMessage(this.internalGetFeaturesFieldBuilder().getBuilder(), extensionRegistry);
                                this.bitField0_ |= 0x1;
                                continue;
                            }
                            case 7994: {
                                final UninterpretedOption m = input.readMessage(UninterpretedOption.parser(), extensionRegistry);
                                if (this.uninterpretedOptionBuilder_ == null) {
                                    this.ensureUninterpretedOptionIsMutable();
                                    this.uninterpretedOption_.add(m);
                                    continue;
                                }
                                this.uninterpretedOptionBuilder_.addMessage(m);
                                continue;
                            }
                            default: {
                                if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                                    done = true;
                                    continue;
                                }
                                continue;
                            }
                        }
                    }
                }
                catch (final InvalidProtocolBufferException e) {
                    throw e.unwrapIOException();
                }
                finally {
                    this.onChanged();
                }
                return this;
            }
            
            @Override
            public boolean hasFeatures() {
                return (this.bitField0_ & 0x1) != 0x0;
            }
            
            @Override
            public FeatureSet getFeatures() {
                if (this.featuresBuilder_ == null) {
                    return (this.features_ == null) ? FeatureSet.getDefaultInstance() : this.features_;
                }
                return this.featuresBuilder_.getMessage();
            }
            
            public Builder setFeatures(final FeatureSet value) {
                if (this.featuresBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.features_ = value;
                }
                else {
                    this.featuresBuilder_.setMessage(value);
                }
                this.bitField0_ |= 0x1;
                this.onChanged();
                return this;
            }
            
            public Builder setFeatures(final FeatureSet.Builder builderForValue) {
                if (this.featuresBuilder_ == null) {
                    this.features_ = builderForValue.build();
                }
                else {
                    this.featuresBuilder_.setMessage(builderForValue.build());
                }
                this.bitField0_ |= 0x1;
                this.onChanged();
                return this;
            }
            
            public Builder mergeFeatures(final FeatureSet value) {
                if (this.featuresBuilder_ == null) {
                    if ((this.bitField0_ & 0x1) != 0x0 && this.features_ != null && this.features_ != FeatureSet.getDefaultInstance()) {
                        this.getFeaturesBuilder().mergeFrom(value);
                    }
                    else {
                        this.features_ = value;
                    }
                }
                else {
                    this.featuresBuilder_.mergeFrom(value);
                }
                if (this.features_ != null) {
                    this.bitField0_ |= 0x1;
                    this.onChanged();
                }
                return this;
            }
            
            public Builder clearFeatures() {
                this.bitField0_ &= 0xFFFFFFFE;
                this.features_ = null;
                if (this.featuresBuilder_ != null) {
                    this.featuresBuilder_.dispose();
                    this.featuresBuilder_ = null;
                }
                this.onChanged();
                return this;
            }
            
            public FeatureSet.Builder getFeaturesBuilder() {
                this.bitField0_ |= 0x1;
                this.onChanged();
                return this.internalGetFeaturesFieldBuilder().getBuilder();
            }
            
            @Override
            public FeatureSetOrBuilder getFeaturesOrBuilder() {
                if (this.featuresBuilder_ != null) {
                    return this.featuresBuilder_.getMessageOrBuilder();
                }
                return (this.features_ == null) ? FeatureSet.getDefaultInstance() : this.features_;
            }
            
            private SingleFieldBuilder<FeatureSet, FeatureSet.Builder, FeatureSetOrBuilder> internalGetFeaturesFieldBuilder() {
                if (this.featuresBuilder_ == null) {
                    this.featuresBuilder_ = new SingleFieldBuilder<FeatureSet, FeatureSet.Builder, FeatureSetOrBuilder>(this.getFeatures(), this.getParentForChildren(), this.isClean());
                    this.features_ = null;
                }
                return this.featuresBuilder_;
            }
            
            private void ensureUninterpretedOptionIsMutable() {
                if ((this.bitField0_ & 0x2) == 0x0) {
                    this.uninterpretedOption_ = new ArrayList<UninterpretedOption>(this.uninterpretedOption_);
                    this.bitField0_ |= 0x2;
                }
            }
            
            @Override
            public List<UninterpretedOption> getUninterpretedOptionList() {
                if (this.uninterpretedOptionBuilder_ == null) {
                    return Collections.unmodifiableList((List<? extends UninterpretedOption>)this.uninterpretedOption_);
                }
                return this.uninterpretedOptionBuilder_.getMessageList();
            }
            
            @Override
            public int getUninterpretedOptionCount() {
                if (this.uninterpretedOptionBuilder_ == null) {
                    return this.uninterpretedOption_.size();
                }
                return this.uninterpretedOptionBuilder_.getCount();
            }
            
            @Override
            public UninterpretedOption getUninterpretedOption(final int index) {
                if (this.uninterpretedOptionBuilder_ == null) {
                    return this.uninterpretedOption_.get(index);
                }
                return this.uninterpretedOptionBuilder_.getMessage(index);
            }
            
            public Builder setUninterpretedOption(final int index, final UninterpretedOption value) {
                if (this.uninterpretedOptionBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.ensureUninterpretedOptionIsMutable();
                    this.uninterpretedOption_.set(index, value);
                    this.onChanged();
                }
                else {
                    this.uninterpretedOptionBuilder_.setMessage(index, value);
                }
                return this;
            }
            
            public Builder setUninterpretedOption(final int index, final UninterpretedOption.Builder builderForValue) {
                if (this.uninterpretedOptionBuilder_ == null) {
                    this.ensureUninterpretedOptionIsMutable();
                    this.uninterpretedOption_.set(index, builderForValue.build());
                    this.onChanged();
                }
                else {
                    this.uninterpretedOptionBuilder_.setMessage(index, builderForValue.build());
                }
                return this;
            }
            
            public Builder addUninterpretedOption(final UninterpretedOption value) {
                if (this.uninterpretedOptionBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.ensureUninterpretedOptionIsMutable();
                    this.uninterpretedOption_.add(value);
                    this.onChanged();
                }
                else {
                    this.uninterpretedOptionBuilder_.addMessage(value);
                }
                return this;
            }
            
            public Builder addUninterpretedOption(final int index, final UninterpretedOption value) {
                if (this.uninterpretedOptionBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.ensureUninterpretedOptionIsMutable();
                    this.uninterpretedOption_.add(index, value);
                    this.onChanged();
                }
                else {
                    this.uninterpretedOptionBuilder_.addMessage(index, value);
                }
                return this;
            }
            
            public Builder addUninterpretedOption(final UninterpretedOption.Builder builderForValue) {
                if (this.uninterpretedOptionBuilder_ == null) {
                    this.ensureUninterpretedOptionIsMutable();
                    this.uninterpretedOption_.add(builderForValue.build());
                    this.onChanged();
                }
                else {
                    this.uninterpretedOptionBuilder_.addMessage(builderForValue.build());
                }
                return this;
            }
            
            public Builder addUninterpretedOption(final int index, final UninterpretedOption.Builder builderForValue) {
                if (this.uninterpretedOptionBuilder_ == null) {
                    this.ensureUninterpretedOptionIsMutable();
                    this.uninterpretedOption_.add(index, builderForValue.build());
                    this.onChanged();
                }
                else {
                    this.uninterpretedOptionBuilder_.addMessage(index, builderForValue.build());
                }
                return this;
            }
            
            public Builder addAllUninterpretedOption(final Iterable<? extends UninterpretedOption> values) {
                if (this.uninterpretedOptionBuilder_ == null) {
                    this.ensureUninterpretedOptionIsMutable();
                    AbstractMessageLite.Builder.addAll(values, this.uninterpretedOption_);
                    this.onChanged();
                }
                else {
                    this.uninterpretedOptionBuilder_.addAllMessages(values);
                }
                return this;
            }
            
            public Builder clearUninterpretedOption() {
                if (this.uninterpretedOptionBuilder_ == null) {
                    this.uninterpretedOption_ = Collections.emptyList();
                    this.bitField0_ &= 0xFFFFFFFD;
                    this.onChanged();
                }
                else {
                    this.uninterpretedOptionBuilder_.clear();
                }
                return this;
            }
            
            public Builder removeUninterpretedOption(final int index) {
                if (this.uninterpretedOptionBuilder_ == null) {
                    this.ensureUninterpretedOptionIsMutable();
                    this.uninterpretedOption_.remove(index);
                    this.onChanged();
                }
                else {
                    this.uninterpretedOptionBuilder_.remove(index);
                }
                return this;
            }
            
            public UninterpretedOption.Builder getUninterpretedOptionBuilder(final int index) {
                return this.internalGetUninterpretedOptionFieldBuilder().getBuilder(index);
            }
            
            @Override
            public UninterpretedOptionOrBuilder getUninterpretedOptionOrBuilder(final int index) {
                if (this.uninterpretedOptionBuilder_ == null) {
                    return this.uninterpretedOption_.get(index);
                }
                return this.uninterpretedOptionBuilder_.getMessageOrBuilder(index);
            }
            
            @Override
            public List<? extends UninterpretedOptionOrBuilder> getUninterpretedOptionOrBuilderList() {
                if (this.uninterpretedOptionBuilder_ != null) {
                    return this.uninterpretedOptionBuilder_.getMessageOrBuilderList();
                }
                return Collections.unmodifiableList((List<? extends UninterpretedOptionOrBuilder>)this.uninterpretedOption_);
            }
            
            public UninterpretedOption.Builder addUninterpretedOptionBuilder() {
                return this.internalGetUninterpretedOptionFieldBuilder().addBuilder(UninterpretedOption.getDefaultInstance());
            }
            
            public UninterpretedOption.Builder addUninterpretedOptionBuilder(final int index) {
                return this.internalGetUninterpretedOptionFieldBuilder().addBuilder(index, UninterpretedOption.getDefaultInstance());
            }
            
            public List<UninterpretedOption.Builder> getUninterpretedOptionBuilderList() {
                return this.internalGetUninterpretedOptionFieldBuilder().getBuilderList();
            }
            
            private RepeatedFieldBuilder<UninterpretedOption, UninterpretedOption.Builder, UninterpretedOptionOrBuilder> internalGetUninterpretedOptionFieldBuilder() {
                if (this.uninterpretedOptionBuilder_ == null) {
                    this.uninterpretedOptionBuilder_ = new RepeatedFieldBuilder<UninterpretedOption, UninterpretedOption.Builder, UninterpretedOptionOrBuilder>(this.uninterpretedOption_, (this.bitField0_ & 0x2) != 0x0, this.getParentForChildren(), this.isClean());
                    this.uninterpretedOption_ = null;
                }
                return this.uninterpretedOptionBuilder_;
            }
        }
    }
    
    public static final class EnumOptions extends ExtendableMessage<EnumOptions> implements EnumOptionsOrBuilder
    {
        private static final long serialVersionUID = 0L;
        private int bitField0_;
        public static final int ALLOW_ALIAS_FIELD_NUMBER = 2;
        private boolean allowAlias_;
        public static final int DEPRECATED_FIELD_NUMBER = 3;
        private boolean deprecated_;
        public static final int DEPRECATED_LEGACY_JSON_FIELD_CONFLICTS_FIELD_NUMBER = 6;
        private boolean deprecatedLegacyJsonFieldConflicts_;
        public static final int FEATURES_FIELD_NUMBER = 7;
        private FeatureSet features_;
        public static final int UNINTERPRETED_OPTION_FIELD_NUMBER = 999;
        private List<UninterpretedOption> uninterpretedOption_;
        private byte memoizedIsInitialized;
        private static final EnumOptions DEFAULT_INSTANCE;
        private static final Parser<EnumOptions> PARSER;
        
        private EnumOptions(final ExtendableBuilder<EnumOptions, ?> builder) {
            super(builder);
            this.allowAlias_ = false;
            this.deprecated_ = false;
            this.deprecatedLegacyJsonFieldConflicts_ = false;
            this.memoizedIsInitialized = -1;
        }
        
        private EnumOptions() {
            this.allowAlias_ = false;
            this.deprecated_ = false;
            this.deprecatedLegacyJsonFieldConflicts_ = false;
            this.memoizedIsInitialized = -1;
            this.uninterpretedOption_ = Collections.emptyList();
        }
        
        public static final Descriptors.Descriptor getDescriptor() {
            return DescriptorProtos.internal_static_google_protobuf_EnumOptions_descriptor;
        }
        
        @Override
        protected FieldAccessorTable internalGetFieldAccessorTable() {
            return DescriptorProtos.internal_static_google_protobuf_EnumOptions_fieldAccessorTable.ensureFieldAccessorsInitialized(EnumOptions.class, Builder.class);
        }
        
        @Override
        public boolean hasAllowAlias() {
            return (this.bitField0_ & 0x1) != 0x0;
        }
        
        @Override
        public boolean getAllowAlias() {
            return this.allowAlias_;
        }
        
        @Override
        public boolean hasDeprecated() {
            return (this.bitField0_ & 0x2) != 0x0;
        }
        
        @Override
        public boolean getDeprecated() {
            return this.deprecated_;
        }
        
        @Deprecated
        @Override
        public boolean hasDeprecatedLegacyJsonFieldConflicts() {
            return (this.bitField0_ & 0x4) != 0x0;
        }
        
        @Deprecated
        @Override
        public boolean getDeprecatedLegacyJsonFieldConflicts() {
            return this.deprecatedLegacyJsonFieldConflicts_;
        }
        
        @Override
        public boolean hasFeatures() {
            return (this.bitField0_ & 0x8) != 0x0;
        }
        
        @Override
        public FeatureSet getFeatures() {
            return (this.features_ == null) ? FeatureSet.getDefaultInstance() : this.features_;
        }
        
        @Override
        public FeatureSetOrBuilder getFeaturesOrBuilder() {
            return (this.features_ == null) ? FeatureSet.getDefaultInstance() : this.features_;
        }
        
        @Override
        public List<UninterpretedOption> getUninterpretedOptionList() {
            return this.uninterpretedOption_;
        }
        
        @Override
        public List<? extends UninterpretedOptionOrBuilder> getUninterpretedOptionOrBuilderList() {
            return this.uninterpretedOption_;
        }
        
        @Override
        public int getUninterpretedOptionCount() {
            return this.uninterpretedOption_.size();
        }
        
        @Override
        public UninterpretedOption getUninterpretedOption(final int index) {
            return this.uninterpretedOption_.get(index);
        }
        
        @Override
        public UninterpretedOptionOrBuilder getUninterpretedOptionOrBuilder(final int index) {
            return this.uninterpretedOption_.get(index);
        }
        
        @Override
        public final boolean isInitialized() {
            final byte isInitialized = this.memoizedIsInitialized;
            if (isInitialized == 1) {
                return true;
            }
            if (isInitialized == 0) {
                return false;
            }
            if (this.hasFeatures() && !this.getFeatures().isInitialized()) {
                this.memoizedIsInitialized = 0;
                return false;
            }
            for (int i = 0; i < this.getUninterpretedOptionCount(); ++i) {
                if (!this.getUninterpretedOption(i).isInitialized()) {
                    this.memoizedIsInitialized = 0;
                    return false;
                }
            }
            if (!this.extensionsAreInitialized()) {
                this.memoizedIsInitialized = 0;
                return false;
            }
            this.memoizedIsInitialized = 1;
            return true;
        }
        
        @Override
        public void writeTo(final CodedOutputStream output) throws IOException {
            final ExtensionSerializer extensionWriter = this.newExtensionSerializer();
            if ((this.bitField0_ & 0x1) != 0x0) {
                output.writeBool(2, this.allowAlias_);
            }
            if ((this.bitField0_ & 0x2) != 0x0) {
                output.writeBool(3, this.deprecated_);
            }
            if ((this.bitField0_ & 0x4) != 0x0) {
                output.writeBool(6, this.deprecatedLegacyJsonFieldConflicts_);
            }
            if ((this.bitField0_ & 0x8) != 0x0) {
                output.writeMessage(7, this.getFeatures());
            }
            for (int i = 0; i < this.uninterpretedOption_.size(); ++i) {
                output.writeMessage(999, this.uninterpretedOption_.get(i));
            }
            extensionWriter.writeUntil(536870912, output);
            this.getUnknownFields().writeTo(output);
        }
        
        @Override
        public int getSerializedSize() {
            int size = this.memoizedSize;
            if (size != -1) {
                return size;
            }
            size = 0;
            if ((this.bitField0_ & 0x1) != 0x0) {
                size += CodedOutputStream.computeBoolSize(2, this.allowAlias_);
            }
            if ((this.bitField0_ & 0x2) != 0x0) {
                size += CodedOutputStream.computeBoolSize(3, this.deprecated_);
            }
            if ((this.bitField0_ & 0x4) != 0x0) {
                size += CodedOutputStream.computeBoolSize(6, this.deprecatedLegacyJsonFieldConflicts_);
            }
            if ((this.bitField0_ & 0x8) != 0x0) {
                size += CodedOutputStream.computeMessageSize(7, this.getFeatures());
            }
            for (int i = 0; i < this.uninterpretedOption_.size(); ++i) {
                size += CodedOutputStream.computeMessageSize(999, this.uninterpretedOption_.get(i));
            }
            size += this.extensionsSerializedSize();
            size += this.getUnknownFields().getSerializedSize();
            return this.memoizedSize = size;
        }
        
        @Override
        public boolean equals(final Object obj) {
            if (obj == this) {
                return true;
            }
            if (!(obj instanceof EnumOptions)) {
                return super.equals(obj);
            }
            final EnumOptions other = (EnumOptions)obj;
            return this.hasAllowAlias() == other.hasAllowAlias() && (!this.hasAllowAlias() || this.getAllowAlias() == other.getAllowAlias()) && this.hasDeprecated() == other.hasDeprecated() && (!this.hasDeprecated() || this.getDeprecated() == other.getDeprecated()) && this.hasDeprecatedLegacyJsonFieldConflicts() == other.hasDeprecatedLegacyJsonFieldConflicts() && (!this.hasDeprecatedLegacyJsonFieldConflicts() || this.getDeprecatedLegacyJsonFieldConflicts() == other.getDeprecatedLegacyJsonFieldConflicts()) && this.hasFeatures() == other.hasFeatures() && (!this.hasFeatures() || this.getFeatures().equals(other.getFeatures())) && this.getUninterpretedOptionList().equals(other.getUninterpretedOptionList()) && this.getUnknownFields().equals(other.getUnknownFields()) && this.getExtensionFields().equals(other.getExtensionFields());
        }
        
        @Override
        public int hashCode() {
            if (this.memoizedHashCode != 0) {
                return this.memoizedHashCode;
            }
            int hash = 41;
            hash = 19 * hash + getDescriptor().hashCode();
            if (this.hasAllowAlias()) {
                hash = 37 * hash + 2;
                hash = 53 * hash + Internal.hashBoolean(this.getAllowAlias());
            }
            if (this.hasDeprecated()) {
                hash = 37 * hash + 3;
                hash = 53 * hash + Internal.hashBoolean(this.getDeprecated());
            }
            if (this.hasDeprecatedLegacyJsonFieldConflicts()) {
                hash = 37 * hash + 6;
                hash = 53 * hash + Internal.hashBoolean(this.getDeprecatedLegacyJsonFieldConflicts());
            }
            if (this.hasFeatures()) {
                hash = 37 * hash + 7;
                hash = 53 * hash + this.getFeatures().hashCode();
            }
            if (this.getUninterpretedOptionCount() > 0) {
                hash = 37 * hash + 999;
                hash = 53 * hash + this.getUninterpretedOptionList().hashCode();
            }
            hash = AbstractMessage.hashFields(hash, this.getExtensionFields());
            hash = 29 * hash + this.getUnknownFields().hashCode();
            return this.memoizedHashCode = hash;
        }
        
        public static EnumOptions parseFrom(final ByteBuffer data) throws InvalidProtocolBufferException {
            return EnumOptions.PARSER.parseFrom(data);
        }
        
        public static EnumOptions parseFrom(final ByteBuffer data, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
            return EnumOptions.PARSER.parseFrom(data, extensionRegistry);
        }
        
        public static EnumOptions parseFrom(final ByteString data) throws InvalidProtocolBufferException {
            return EnumOptions.PARSER.parseFrom(data);
        }
        
        public static EnumOptions parseFrom(final ByteString data, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
            return EnumOptions.PARSER.parseFrom(data, extensionRegistry);
        }
        
        public static EnumOptions parseFrom(final byte[] data) throws InvalidProtocolBufferException {
            return EnumOptions.PARSER.parseFrom(data);
        }
        
        public static EnumOptions parseFrom(final byte[] data, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
            return EnumOptions.PARSER.parseFrom(data, extensionRegistry);
        }
        
        public static EnumOptions parseFrom(final InputStream input) throws IOException {
            return GeneratedMessage.parseWithIOException(EnumOptions.PARSER, input);
        }
        
        public static EnumOptions parseFrom(final InputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
            return GeneratedMessage.parseWithIOException(EnumOptions.PARSER, input, extensionRegistry);
        }
        
        public static EnumOptions parseDelimitedFrom(final InputStream input) throws IOException {
            return GeneratedMessage.parseDelimitedWithIOException(EnumOptions.PARSER, input);
        }
        
        public static EnumOptions parseDelimitedFrom(final InputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
            return GeneratedMessage.parseDelimitedWithIOException(EnumOptions.PARSER, input, extensionRegistry);
        }
        
        public static EnumOptions parseFrom(final CodedInputStream input) throws IOException {
            return GeneratedMessage.parseWithIOException(EnumOptions.PARSER, input);
        }
        
        public static EnumOptions parseFrom(final CodedInputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
            return GeneratedMessage.parseWithIOException(EnumOptions.PARSER, input, extensionRegistry);
        }
        
        @Override
        public Builder newBuilderForType() {
            return newBuilder();
        }
        
        public static Builder newBuilder() {
            return EnumOptions.DEFAULT_INSTANCE.toBuilder();
        }
        
        public static Builder newBuilder(final EnumOptions prototype) {
            return EnumOptions.DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
        }
        
        @Override
        public Builder toBuilder() {
            return (this == EnumOptions.DEFAULT_INSTANCE) ? new Builder() : new Builder().mergeFrom(this);
        }
        
        @Override
        protected Builder newBuilderForType(final BuilderParent parent) {
            final Builder builder = new Builder(parent);
            return builder;
        }
        
        public static EnumOptions getDefaultInstance() {
            return EnumOptions.DEFAULT_INSTANCE;
        }
        
        public static Parser<EnumOptions> parser() {
            return EnumOptions.PARSER;
        }
        
        @Override
        public Parser<EnumOptions> getParserForType() {
            return EnumOptions.PARSER;
        }
        
        @Override
        public EnumOptions getDefaultInstanceForType() {
            return EnumOptions.DEFAULT_INSTANCE;
        }
        
        static {
            RuntimeVersion.validateProtobufGencodeVersion(RuntimeVersion.RuntimeDomain.PUBLIC, 4, 33, 0, "", "EnumOptions");
            DEFAULT_INSTANCE = new EnumOptions();
            PARSER = new AbstractParser<EnumOptions>() {
                @Override
                public EnumOptions parsePartialFrom(final CodedInputStream input, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
                    final Builder builder = EnumOptions.newBuilder();
                    try {
                        builder.mergeFrom(input, extensionRegistry);
                    }
                    catch (final InvalidProtocolBufferException e) {
                        throw e.setUnfinishedMessage(builder.buildPartial());
                    }
                    catch (final UninitializedMessageException e2) {
                        throw e2.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
                    }
                    catch (final IOException e3) {
                        throw new InvalidProtocolBufferException(e3).setUnfinishedMessage(builder.buildPartial());
                    }
                    return builder.buildPartial();
                }
            };
        }
        
        public static final class Builder extends ExtendableBuilder<EnumOptions, Builder> implements EnumOptionsOrBuilder
        {
            private int bitField0_;
            private boolean allowAlias_;
            private boolean deprecated_;
            private boolean deprecatedLegacyJsonFieldConflicts_;
            private FeatureSet features_;
            private SingleFieldBuilder<FeatureSet, FeatureSet.Builder, FeatureSetOrBuilder> featuresBuilder_;
            private List<UninterpretedOption> uninterpretedOption_;
            private RepeatedFieldBuilder<UninterpretedOption, UninterpretedOption.Builder, UninterpretedOptionOrBuilder> uninterpretedOptionBuilder_;
            
            public static final Descriptors.Descriptor getDescriptor() {
                return DescriptorProtos.internal_static_google_protobuf_EnumOptions_descriptor;
            }
            
            @Override
            protected FieldAccessorTable internalGetFieldAccessorTable() {
                return DescriptorProtos.internal_static_google_protobuf_EnumOptions_fieldAccessorTable.ensureFieldAccessorsInitialized(EnumOptions.class, Builder.class);
            }
            
            private Builder() {
                this.uninterpretedOption_ = Collections.emptyList();
                this.maybeForceBuilderInitialization();
            }
            
            private Builder(final BuilderParent parent) {
                super(parent);
                this.uninterpretedOption_ = Collections.emptyList();
                this.maybeForceBuilderInitialization();
            }
            
            private void maybeForceBuilderInitialization() {
                if (GeneratedMessage.alwaysUseFieldBuilders) {
                    this.internalGetFeaturesFieldBuilder();
                    this.internalGetUninterpretedOptionFieldBuilder();
                }
            }
            
            @Override
            public Builder clear() {
                super.clear();
                this.bitField0_ = 0;
                this.allowAlias_ = false;
                this.deprecated_ = false;
                this.deprecatedLegacyJsonFieldConflicts_ = false;
                this.features_ = null;
                if (this.featuresBuilder_ != null) {
                    this.featuresBuilder_.dispose();
                    this.featuresBuilder_ = null;
                }
                if (this.uninterpretedOptionBuilder_ == null) {
                    this.uninterpretedOption_ = Collections.emptyList();
                }
                else {
                    this.uninterpretedOption_ = null;
                    this.uninterpretedOptionBuilder_.clear();
                }
                this.bitField0_ &= 0xFFFFFFEF;
                return this;
            }
            
            @Override
            public Descriptors.Descriptor getDescriptorForType() {
                return DescriptorProtos.internal_static_google_protobuf_EnumOptions_descriptor;
            }
            
            @Override
            public EnumOptions getDefaultInstanceForType() {
                return EnumOptions.getDefaultInstance();
            }
            
            @Override
            public EnumOptions build() {
                final EnumOptions result = this.buildPartial();
                if (!result.isInitialized()) {
                    throw AbstractMessage.Builder.newUninitializedMessageException(result);
                }
                return result;
            }
            
            @Override
            public EnumOptions buildPartial() {
                final EnumOptions result = new EnumOptions((ExtendableBuilder)this);
                this.buildPartialRepeatedFields(result);
                if (this.bitField0_ != 0) {
                    this.buildPartial0(result);
                }
                this.onBuilt();
                return result;
            }
            
            private void buildPartialRepeatedFields(final EnumOptions result) {
                if (this.uninterpretedOptionBuilder_ == null) {
                    if ((this.bitField0_ & 0x10) != 0x0) {
                        this.uninterpretedOption_ = Collections.unmodifiableList((List<? extends UninterpretedOption>)this.uninterpretedOption_);
                        this.bitField0_ &= 0xFFFFFFEF;
                    }
                    result.uninterpretedOption_ = this.uninterpretedOption_;
                }
                else {
                    result.uninterpretedOption_ = this.uninterpretedOptionBuilder_.build();
                }
            }
            
            private void buildPartial0(final EnumOptions result) {
                final int from_bitField0_ = this.bitField0_;
                int to_bitField0_ = 0;
                if ((from_bitField0_ & 0x1) != 0x0) {
                    result.allowAlias_ = this.allowAlias_;
                    to_bitField0_ |= 0x1;
                }
                if ((from_bitField0_ & 0x2) != 0x0) {
                    result.deprecated_ = this.deprecated_;
                    to_bitField0_ |= 0x2;
                }
                if ((from_bitField0_ & 0x4) != 0x0) {
                    result.deprecatedLegacyJsonFieldConflicts_ = this.deprecatedLegacyJsonFieldConflicts_;
                    to_bitField0_ |= 0x4;
                }
                if ((from_bitField0_ & 0x8) != 0x0) {
                    result.features_ = ((this.featuresBuilder_ == null) ? this.features_ : this.featuresBuilder_.build());
                    to_bitField0_ |= 0x8;
                }
                result.bitField0_ |= to_bitField0_;
            }
            
            public <Type> Builder setExtension(final GeneratedExtension<EnumOptions, Type> extension, final Type value) {
                return super.setExtension(extension, value);
            }
            
            public <Type> Builder setExtension(final GeneratedExtension<EnumOptions, List<Type>> extension, final int index, final Type value) {
                return super.setExtension(extension, index, value);
            }
            
            public <Type> Builder addExtension(final GeneratedExtension<EnumOptions, List<Type>> extension, final Type value) {
                return super.addExtension(extension, value);
            }
            
            public <Type> Builder clearExtension(final GeneratedExtension<EnumOptions, Type> extension) {
                return super.clearExtension(extension);
            }
            
            @Override
            public Builder mergeFrom(final Message other) {
                if (other instanceof EnumOptions) {
                    return this.mergeFrom((EnumOptions)other);
                }
                super.mergeFrom(other);
                return this;
            }
            
            public Builder mergeFrom(final EnumOptions other) {
                if (other == EnumOptions.getDefaultInstance()) {
                    return this;
                }
                if (other.hasAllowAlias()) {
                    this.setAllowAlias(other.getAllowAlias());
                }
                if (other.hasDeprecated()) {
                    this.setDeprecated(other.getDeprecated());
                }
                if (other.hasDeprecatedLegacyJsonFieldConflicts()) {
                    this.setDeprecatedLegacyJsonFieldConflicts(other.getDeprecatedLegacyJsonFieldConflicts());
                }
                if (other.hasFeatures()) {
                    this.mergeFeatures(other.getFeatures());
                }
                if (this.uninterpretedOptionBuilder_ == null) {
                    if (!other.uninterpretedOption_.isEmpty()) {
                        if (this.uninterpretedOption_.isEmpty()) {
                            this.uninterpretedOption_ = other.uninterpretedOption_;
                            this.bitField0_ &= 0xFFFFFFEF;
                        }
                        else {
                            this.ensureUninterpretedOptionIsMutable();
                            this.uninterpretedOption_.addAll(other.uninterpretedOption_);
                        }
                        this.onChanged();
                    }
                }
                else if (!other.uninterpretedOption_.isEmpty()) {
                    if (this.uninterpretedOptionBuilder_.isEmpty()) {
                        this.uninterpretedOptionBuilder_.dispose();
                        this.uninterpretedOptionBuilder_ = null;
                        this.uninterpretedOption_ = other.uninterpretedOption_;
                        this.bitField0_ &= 0xFFFFFFEF;
                        this.uninterpretedOptionBuilder_ = (GeneratedMessage.alwaysUseFieldBuilders ? this.internalGetUninterpretedOptionFieldBuilder() : null);
                    }
                    else {
                        this.uninterpretedOptionBuilder_.addAllMessages(other.uninterpretedOption_);
                    }
                }
                this.mergeExtensionFields(other);
                this.mergeUnknownFields(other.getUnknownFields());
                this.onChanged();
                return this;
            }
            
            @Override
            public final boolean isInitialized() {
                if (this.hasFeatures() && !this.getFeatures().isInitialized()) {
                    return false;
                }
                for (int i = 0; i < this.getUninterpretedOptionCount(); ++i) {
                    if (!this.getUninterpretedOption(i).isInitialized()) {
                        return false;
                    }
                }
                return this.extensionsAreInitialized();
            }
            
            @Override
            public Builder mergeFrom(final CodedInputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
                if (extensionRegistry == null) {
                    throw new NullPointerException();
                }
                try {
                    boolean done = false;
                    while (!done) {
                        final int tag = input.readTag();
                        switch (tag) {
                            case 0: {
                                done = true;
                                continue;
                            }
                            case 16: {
                                this.allowAlias_ = input.readBool();
                                this.bitField0_ |= 0x1;
                                continue;
                            }
                            case 24: {
                                this.deprecated_ = input.readBool();
                                this.bitField0_ |= 0x2;
                                continue;
                            }
                            case 48: {
                                this.deprecatedLegacyJsonFieldConflicts_ = input.readBool();
                                this.bitField0_ |= 0x4;
                                continue;
                            }
                            case 58: {
                                input.readMessage(this.internalGetFeaturesFieldBuilder().getBuilder(), extensionRegistry);
                                this.bitField0_ |= 0x8;
                                continue;
                            }
                            case 7994: {
                                final UninterpretedOption m = input.readMessage(UninterpretedOption.parser(), extensionRegistry);
                                if (this.uninterpretedOptionBuilder_ == null) {
                                    this.ensureUninterpretedOptionIsMutable();
                                    this.uninterpretedOption_.add(m);
                                    continue;
                                }
                                this.uninterpretedOptionBuilder_.addMessage(m);
                                continue;
                            }
                            default: {
                                if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                                    done = true;
                                    continue;
                                }
                                continue;
                            }
                        }
                    }
                }
                catch (final InvalidProtocolBufferException e) {
                    throw e.unwrapIOException();
                }
                finally {
                    this.onChanged();
                }
                return this;
            }
            
            @Override
            public boolean hasAllowAlias() {
                return (this.bitField0_ & 0x1) != 0x0;
            }
            
            @Override
            public boolean getAllowAlias() {
                return this.allowAlias_;
            }
            
            public Builder setAllowAlias(final boolean value) {
                this.allowAlias_ = value;
                this.bitField0_ |= 0x1;
                this.onChanged();
                return this;
            }
            
            public Builder clearAllowAlias() {
                this.bitField0_ &= 0xFFFFFFFE;
                this.allowAlias_ = false;
                this.onChanged();
                return this;
            }
            
            @Override
            public boolean hasDeprecated() {
                return (this.bitField0_ & 0x2) != 0x0;
            }
            
            @Override
            public boolean getDeprecated() {
                return this.deprecated_;
            }
            
            public Builder setDeprecated(final boolean value) {
                this.deprecated_ = value;
                this.bitField0_ |= 0x2;
                this.onChanged();
                return this;
            }
            
            public Builder clearDeprecated() {
                this.bitField0_ &= 0xFFFFFFFD;
                this.deprecated_ = false;
                this.onChanged();
                return this;
            }
            
            @Deprecated
            @Override
            public boolean hasDeprecatedLegacyJsonFieldConflicts() {
                return (this.bitField0_ & 0x4) != 0x0;
            }
            
            @Deprecated
            @Override
            public boolean getDeprecatedLegacyJsonFieldConflicts() {
                return this.deprecatedLegacyJsonFieldConflicts_;
            }
            
            @Deprecated
            public Builder setDeprecatedLegacyJsonFieldConflicts(final boolean value) {
                this.deprecatedLegacyJsonFieldConflicts_ = value;
                this.bitField0_ |= 0x4;
                this.onChanged();
                return this;
            }
            
            @Deprecated
            public Builder clearDeprecatedLegacyJsonFieldConflicts() {
                this.bitField0_ &= 0xFFFFFFFB;
                this.deprecatedLegacyJsonFieldConflicts_ = false;
                this.onChanged();
                return this;
            }
            
            @Override
            public boolean hasFeatures() {
                return (this.bitField0_ & 0x8) != 0x0;
            }
            
            @Override
            public FeatureSet getFeatures() {
                if (this.featuresBuilder_ == null) {
                    return (this.features_ == null) ? FeatureSet.getDefaultInstance() : this.features_;
                }
                return this.featuresBuilder_.getMessage();
            }
            
            public Builder setFeatures(final FeatureSet value) {
                if (this.featuresBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.features_ = value;
                }
                else {
                    this.featuresBuilder_.setMessage(value);
                }
                this.bitField0_ |= 0x8;
                this.onChanged();
                return this;
            }
            
            public Builder setFeatures(final FeatureSet.Builder builderForValue) {
                if (this.featuresBuilder_ == null) {
                    this.features_ = builderForValue.build();
                }
                else {
                    this.featuresBuilder_.setMessage(builderForValue.build());
                }
                this.bitField0_ |= 0x8;
                this.onChanged();
                return this;
            }
            
            public Builder mergeFeatures(final FeatureSet value) {
                if (this.featuresBuilder_ == null) {
                    if ((this.bitField0_ & 0x8) != 0x0 && this.features_ != null && this.features_ != FeatureSet.getDefaultInstance()) {
                        this.getFeaturesBuilder().mergeFrom(value);
                    }
                    else {
                        this.features_ = value;
                    }
                }
                else {
                    this.featuresBuilder_.mergeFrom(value);
                }
                if (this.features_ != null) {
                    this.bitField0_ |= 0x8;
                    this.onChanged();
                }
                return this;
            }
            
            public Builder clearFeatures() {
                this.bitField0_ &= 0xFFFFFFF7;
                this.features_ = null;
                if (this.featuresBuilder_ != null) {
                    this.featuresBuilder_.dispose();
                    this.featuresBuilder_ = null;
                }
                this.onChanged();
                return this;
            }
            
            public FeatureSet.Builder getFeaturesBuilder() {
                this.bitField0_ |= 0x8;
                this.onChanged();
                return this.internalGetFeaturesFieldBuilder().getBuilder();
            }
            
            @Override
            public FeatureSetOrBuilder getFeaturesOrBuilder() {
                if (this.featuresBuilder_ != null) {
                    return this.featuresBuilder_.getMessageOrBuilder();
                }
                return (this.features_ == null) ? FeatureSet.getDefaultInstance() : this.features_;
            }
            
            private SingleFieldBuilder<FeatureSet, FeatureSet.Builder, FeatureSetOrBuilder> internalGetFeaturesFieldBuilder() {
                if (this.featuresBuilder_ == null) {
                    this.featuresBuilder_ = new SingleFieldBuilder<FeatureSet, FeatureSet.Builder, FeatureSetOrBuilder>(this.getFeatures(), this.getParentForChildren(), this.isClean());
                    this.features_ = null;
                }
                return this.featuresBuilder_;
            }
            
            private void ensureUninterpretedOptionIsMutable() {
                if ((this.bitField0_ & 0x10) == 0x0) {
                    this.uninterpretedOption_ = new ArrayList<UninterpretedOption>(this.uninterpretedOption_);
                    this.bitField0_ |= 0x10;
                }
            }
            
            @Override
            public List<UninterpretedOption> getUninterpretedOptionList() {
                if (this.uninterpretedOptionBuilder_ == null) {
                    return Collections.unmodifiableList((List<? extends UninterpretedOption>)this.uninterpretedOption_);
                }
                return this.uninterpretedOptionBuilder_.getMessageList();
            }
            
            @Override
            public int getUninterpretedOptionCount() {
                if (this.uninterpretedOptionBuilder_ == null) {
                    return this.uninterpretedOption_.size();
                }
                return this.uninterpretedOptionBuilder_.getCount();
            }
            
            @Override
            public UninterpretedOption getUninterpretedOption(final int index) {
                if (this.uninterpretedOptionBuilder_ == null) {
                    return this.uninterpretedOption_.get(index);
                }
                return this.uninterpretedOptionBuilder_.getMessage(index);
            }
            
            public Builder setUninterpretedOption(final int index, final UninterpretedOption value) {
                if (this.uninterpretedOptionBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.ensureUninterpretedOptionIsMutable();
                    this.uninterpretedOption_.set(index, value);
                    this.onChanged();
                }
                else {
                    this.uninterpretedOptionBuilder_.setMessage(index, value);
                }
                return this;
            }
            
            public Builder setUninterpretedOption(final int index, final UninterpretedOption.Builder builderForValue) {
                if (this.uninterpretedOptionBuilder_ == null) {
                    this.ensureUninterpretedOptionIsMutable();
                    this.uninterpretedOption_.set(index, builderForValue.build());
                    this.onChanged();
                }
                else {
                    this.uninterpretedOptionBuilder_.setMessage(index, builderForValue.build());
                }
                return this;
            }
            
            public Builder addUninterpretedOption(final UninterpretedOption value) {
                if (this.uninterpretedOptionBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.ensureUninterpretedOptionIsMutable();
                    this.uninterpretedOption_.add(value);
                    this.onChanged();
                }
                else {
                    this.uninterpretedOptionBuilder_.addMessage(value);
                }
                return this;
            }
            
            public Builder addUninterpretedOption(final int index, final UninterpretedOption value) {
                if (this.uninterpretedOptionBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.ensureUninterpretedOptionIsMutable();
                    this.uninterpretedOption_.add(index, value);
                    this.onChanged();
                }
                else {
                    this.uninterpretedOptionBuilder_.addMessage(index, value);
                }
                return this;
            }
            
            public Builder addUninterpretedOption(final UninterpretedOption.Builder builderForValue) {
                if (this.uninterpretedOptionBuilder_ == null) {
                    this.ensureUninterpretedOptionIsMutable();
                    this.uninterpretedOption_.add(builderForValue.build());
                    this.onChanged();
                }
                else {
                    this.uninterpretedOptionBuilder_.addMessage(builderForValue.build());
                }
                return this;
            }
            
            public Builder addUninterpretedOption(final int index, final UninterpretedOption.Builder builderForValue) {
                if (this.uninterpretedOptionBuilder_ == null) {
                    this.ensureUninterpretedOptionIsMutable();
                    this.uninterpretedOption_.add(index, builderForValue.build());
                    this.onChanged();
                }
                else {
                    this.uninterpretedOptionBuilder_.addMessage(index, builderForValue.build());
                }
                return this;
            }
            
            public Builder addAllUninterpretedOption(final Iterable<? extends UninterpretedOption> values) {
                if (this.uninterpretedOptionBuilder_ == null) {
                    this.ensureUninterpretedOptionIsMutable();
                    AbstractMessageLite.Builder.addAll(values, this.uninterpretedOption_);
                    this.onChanged();
                }
                else {
                    this.uninterpretedOptionBuilder_.addAllMessages(values);
                }
                return this;
            }
            
            public Builder clearUninterpretedOption() {
                if (this.uninterpretedOptionBuilder_ == null) {
                    this.uninterpretedOption_ = Collections.emptyList();
                    this.bitField0_ &= 0xFFFFFFEF;
                    this.onChanged();
                }
                else {
                    this.uninterpretedOptionBuilder_.clear();
                }
                return this;
            }
            
            public Builder removeUninterpretedOption(final int index) {
                if (this.uninterpretedOptionBuilder_ == null) {
                    this.ensureUninterpretedOptionIsMutable();
                    this.uninterpretedOption_.remove(index);
                    this.onChanged();
                }
                else {
                    this.uninterpretedOptionBuilder_.remove(index);
                }
                return this;
            }
            
            public UninterpretedOption.Builder getUninterpretedOptionBuilder(final int index) {
                return this.internalGetUninterpretedOptionFieldBuilder().getBuilder(index);
            }
            
            @Override
            public UninterpretedOptionOrBuilder getUninterpretedOptionOrBuilder(final int index) {
                if (this.uninterpretedOptionBuilder_ == null) {
                    return this.uninterpretedOption_.get(index);
                }
                return this.uninterpretedOptionBuilder_.getMessageOrBuilder(index);
            }
            
            @Override
            public List<? extends UninterpretedOptionOrBuilder> getUninterpretedOptionOrBuilderList() {
                if (this.uninterpretedOptionBuilder_ != null) {
                    return this.uninterpretedOptionBuilder_.getMessageOrBuilderList();
                }
                return Collections.unmodifiableList((List<? extends UninterpretedOptionOrBuilder>)this.uninterpretedOption_);
            }
            
            public UninterpretedOption.Builder addUninterpretedOptionBuilder() {
                return this.internalGetUninterpretedOptionFieldBuilder().addBuilder(UninterpretedOption.getDefaultInstance());
            }
            
            public UninterpretedOption.Builder addUninterpretedOptionBuilder(final int index) {
                return this.internalGetUninterpretedOptionFieldBuilder().addBuilder(index, UninterpretedOption.getDefaultInstance());
            }
            
            public List<UninterpretedOption.Builder> getUninterpretedOptionBuilderList() {
                return this.internalGetUninterpretedOptionFieldBuilder().getBuilderList();
            }
            
            private RepeatedFieldBuilder<UninterpretedOption, UninterpretedOption.Builder, UninterpretedOptionOrBuilder> internalGetUninterpretedOptionFieldBuilder() {
                if (this.uninterpretedOptionBuilder_ == null) {
                    this.uninterpretedOptionBuilder_ = new RepeatedFieldBuilder<UninterpretedOption, UninterpretedOption.Builder, UninterpretedOptionOrBuilder>(this.uninterpretedOption_, (this.bitField0_ & 0x10) != 0x0, this.getParentForChildren(), this.isClean());
                    this.uninterpretedOption_ = null;
                }
                return this.uninterpretedOptionBuilder_;
            }
        }
    }
    
    public static final class EnumValueOptions extends ExtendableMessage<EnumValueOptions> implements EnumValueOptionsOrBuilder
    {
        private static final long serialVersionUID = 0L;
        private int bitField0_;
        public static final int DEPRECATED_FIELD_NUMBER = 1;
        private boolean deprecated_;
        public static final int FEATURES_FIELD_NUMBER = 2;
        private FeatureSet features_;
        public static final int DEBUG_REDACT_FIELD_NUMBER = 3;
        private boolean debugRedact_;
        public static final int FEATURE_SUPPORT_FIELD_NUMBER = 4;
        private FieldOptions.FeatureSupport featureSupport_;
        public static final int UNINTERPRETED_OPTION_FIELD_NUMBER = 999;
        private List<UninterpretedOption> uninterpretedOption_;
        private byte memoizedIsInitialized;
        private static final EnumValueOptions DEFAULT_INSTANCE;
        private static final Parser<EnumValueOptions> PARSER;
        
        private EnumValueOptions(final ExtendableBuilder<EnumValueOptions, ?> builder) {
            super(builder);
            this.deprecated_ = false;
            this.debugRedact_ = false;
            this.memoizedIsInitialized = -1;
        }
        
        private EnumValueOptions() {
            this.deprecated_ = false;
            this.debugRedact_ = false;
            this.memoizedIsInitialized = -1;
            this.uninterpretedOption_ = Collections.emptyList();
        }
        
        public static final Descriptors.Descriptor getDescriptor() {
            return DescriptorProtos.internal_static_google_protobuf_EnumValueOptions_descriptor;
        }
        
        @Override
        protected FieldAccessorTable internalGetFieldAccessorTable() {
            return DescriptorProtos.internal_static_google_protobuf_EnumValueOptions_fieldAccessorTable.ensureFieldAccessorsInitialized(EnumValueOptions.class, Builder.class);
        }
        
        @Override
        public boolean hasDeprecated() {
            return (this.bitField0_ & 0x1) != 0x0;
        }
        
        @Override
        public boolean getDeprecated() {
            return this.deprecated_;
        }
        
        @Override
        public boolean hasFeatures() {
            return (this.bitField0_ & 0x2) != 0x0;
        }
        
        @Override
        public FeatureSet getFeatures() {
            return (this.features_ == null) ? FeatureSet.getDefaultInstance() : this.features_;
        }
        
        @Override
        public FeatureSetOrBuilder getFeaturesOrBuilder() {
            return (this.features_ == null) ? FeatureSet.getDefaultInstance() : this.features_;
        }
        
        @Override
        public boolean hasDebugRedact() {
            return (this.bitField0_ & 0x4) != 0x0;
        }
        
        @Override
        public boolean getDebugRedact() {
            return this.debugRedact_;
        }
        
        @Override
        public boolean hasFeatureSupport() {
            return (this.bitField0_ & 0x8) != 0x0;
        }
        
        @Override
        public FieldOptions.FeatureSupport getFeatureSupport() {
            return (this.featureSupport_ == null) ? FieldOptions.FeatureSupport.getDefaultInstance() : this.featureSupport_;
        }
        
        @Override
        public FieldOptions.FeatureSupportOrBuilder getFeatureSupportOrBuilder() {
            return (this.featureSupport_ == null) ? FieldOptions.FeatureSupport.getDefaultInstance() : this.featureSupport_;
        }
        
        @Override
        public List<UninterpretedOption> getUninterpretedOptionList() {
            return this.uninterpretedOption_;
        }
        
        @Override
        public List<? extends UninterpretedOptionOrBuilder> getUninterpretedOptionOrBuilderList() {
            return this.uninterpretedOption_;
        }
        
        @Override
        public int getUninterpretedOptionCount() {
            return this.uninterpretedOption_.size();
        }
        
        @Override
        public UninterpretedOption getUninterpretedOption(final int index) {
            return this.uninterpretedOption_.get(index);
        }
        
        @Override
        public UninterpretedOptionOrBuilder getUninterpretedOptionOrBuilder(final int index) {
            return this.uninterpretedOption_.get(index);
        }
        
        @Override
        public final boolean isInitialized() {
            final byte isInitialized = this.memoizedIsInitialized;
            if (isInitialized == 1) {
                return true;
            }
            if (isInitialized == 0) {
                return false;
            }
            if (this.hasFeatures() && !this.getFeatures().isInitialized()) {
                this.memoizedIsInitialized = 0;
                return false;
            }
            for (int i = 0; i < this.getUninterpretedOptionCount(); ++i) {
                if (!this.getUninterpretedOption(i).isInitialized()) {
                    this.memoizedIsInitialized = 0;
                    return false;
                }
            }
            if (!this.extensionsAreInitialized()) {
                this.memoizedIsInitialized = 0;
                return false;
            }
            this.memoizedIsInitialized = 1;
            return true;
        }
        
        @Override
        public void writeTo(final CodedOutputStream output) throws IOException {
            final ExtensionSerializer extensionWriter = this.newExtensionSerializer();
            if ((this.bitField0_ & 0x1) != 0x0) {
                output.writeBool(1, this.deprecated_);
            }
            if ((this.bitField0_ & 0x2) != 0x0) {
                output.writeMessage(2, this.getFeatures());
            }
            if ((this.bitField0_ & 0x4) != 0x0) {
                output.writeBool(3, this.debugRedact_);
            }
            if ((this.bitField0_ & 0x8) != 0x0) {
                output.writeMessage(4, this.getFeatureSupport());
            }
            for (int i = 0; i < this.uninterpretedOption_.size(); ++i) {
                output.writeMessage(999, this.uninterpretedOption_.get(i));
            }
            extensionWriter.writeUntil(536870912, output);
            this.getUnknownFields().writeTo(output);
        }
        
        @Override
        public int getSerializedSize() {
            int size = this.memoizedSize;
            if (size != -1) {
                return size;
            }
            size = 0;
            if ((this.bitField0_ & 0x1) != 0x0) {
                size += CodedOutputStream.computeBoolSize(1, this.deprecated_);
            }
            if ((this.bitField0_ & 0x2) != 0x0) {
                size += CodedOutputStream.computeMessageSize(2, this.getFeatures());
            }
            if ((this.bitField0_ & 0x4) != 0x0) {
                size += CodedOutputStream.computeBoolSize(3, this.debugRedact_);
            }
            if ((this.bitField0_ & 0x8) != 0x0) {
                size += CodedOutputStream.computeMessageSize(4, this.getFeatureSupport());
            }
            for (int i = 0; i < this.uninterpretedOption_.size(); ++i) {
                size += CodedOutputStream.computeMessageSize(999, this.uninterpretedOption_.get(i));
            }
            size += this.extensionsSerializedSize();
            size += this.getUnknownFields().getSerializedSize();
            return this.memoizedSize = size;
        }
        
        @Override
        public boolean equals(final Object obj) {
            if (obj == this) {
                return true;
            }
            if (!(obj instanceof EnumValueOptions)) {
                return super.equals(obj);
            }
            final EnumValueOptions other = (EnumValueOptions)obj;
            return this.hasDeprecated() == other.hasDeprecated() && (!this.hasDeprecated() || this.getDeprecated() == other.getDeprecated()) && this.hasFeatures() == other.hasFeatures() && (!this.hasFeatures() || this.getFeatures().equals(other.getFeatures())) && this.hasDebugRedact() == other.hasDebugRedact() && (!this.hasDebugRedact() || this.getDebugRedact() == other.getDebugRedact()) && this.hasFeatureSupport() == other.hasFeatureSupport() && (!this.hasFeatureSupport() || this.getFeatureSupport().equals(other.getFeatureSupport())) && this.getUninterpretedOptionList().equals(other.getUninterpretedOptionList()) && this.getUnknownFields().equals(other.getUnknownFields()) && this.getExtensionFields().equals(other.getExtensionFields());
        }
        
        @Override
        public int hashCode() {
            if (this.memoizedHashCode != 0) {
                return this.memoizedHashCode;
            }
            int hash = 41;
            hash = 19 * hash + getDescriptor().hashCode();
            if (this.hasDeprecated()) {
                hash = 37 * hash + 1;
                hash = 53 * hash + Internal.hashBoolean(this.getDeprecated());
            }
            if (this.hasFeatures()) {
                hash = 37 * hash + 2;
                hash = 53 * hash + this.getFeatures().hashCode();
            }
            if (this.hasDebugRedact()) {
                hash = 37 * hash + 3;
                hash = 53 * hash + Internal.hashBoolean(this.getDebugRedact());
            }
            if (this.hasFeatureSupport()) {
                hash = 37 * hash + 4;
                hash = 53 * hash + this.getFeatureSupport().hashCode();
            }
            if (this.getUninterpretedOptionCount() > 0) {
                hash = 37 * hash + 999;
                hash = 53 * hash + this.getUninterpretedOptionList().hashCode();
            }
            hash = AbstractMessage.hashFields(hash, this.getExtensionFields());
            hash = 29 * hash + this.getUnknownFields().hashCode();
            return this.memoizedHashCode = hash;
        }
        
        public static EnumValueOptions parseFrom(final ByteBuffer data) throws InvalidProtocolBufferException {
            return EnumValueOptions.PARSER.parseFrom(data);
        }
        
        public static EnumValueOptions parseFrom(final ByteBuffer data, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
            return EnumValueOptions.PARSER.parseFrom(data, extensionRegistry);
        }
        
        public static EnumValueOptions parseFrom(final ByteString data) throws InvalidProtocolBufferException {
            return EnumValueOptions.PARSER.parseFrom(data);
        }
        
        public static EnumValueOptions parseFrom(final ByteString data, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
            return EnumValueOptions.PARSER.parseFrom(data, extensionRegistry);
        }
        
        public static EnumValueOptions parseFrom(final byte[] data) throws InvalidProtocolBufferException {
            return EnumValueOptions.PARSER.parseFrom(data);
        }
        
        public static EnumValueOptions parseFrom(final byte[] data, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
            return EnumValueOptions.PARSER.parseFrom(data, extensionRegistry);
        }
        
        public static EnumValueOptions parseFrom(final InputStream input) throws IOException {
            return GeneratedMessage.parseWithIOException(EnumValueOptions.PARSER, input);
        }
        
        public static EnumValueOptions parseFrom(final InputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
            return GeneratedMessage.parseWithIOException(EnumValueOptions.PARSER, input, extensionRegistry);
        }
        
        public static EnumValueOptions parseDelimitedFrom(final InputStream input) throws IOException {
            return GeneratedMessage.parseDelimitedWithIOException(EnumValueOptions.PARSER, input);
        }
        
        public static EnumValueOptions parseDelimitedFrom(final InputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
            return GeneratedMessage.parseDelimitedWithIOException(EnumValueOptions.PARSER, input, extensionRegistry);
        }
        
        public static EnumValueOptions parseFrom(final CodedInputStream input) throws IOException {
            return GeneratedMessage.parseWithIOException(EnumValueOptions.PARSER, input);
        }
        
        public static EnumValueOptions parseFrom(final CodedInputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
            return GeneratedMessage.parseWithIOException(EnumValueOptions.PARSER, input, extensionRegistry);
        }
        
        @Override
        public Builder newBuilderForType() {
            return newBuilder();
        }
        
        public static Builder newBuilder() {
            return EnumValueOptions.DEFAULT_INSTANCE.toBuilder();
        }
        
        public static Builder newBuilder(final EnumValueOptions prototype) {
            return EnumValueOptions.DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
        }
        
        @Override
        public Builder toBuilder() {
            return (this == EnumValueOptions.DEFAULT_INSTANCE) ? new Builder() : new Builder().mergeFrom(this);
        }
        
        @Override
        protected Builder newBuilderForType(final BuilderParent parent) {
            final Builder builder = new Builder(parent);
            return builder;
        }
        
        public static EnumValueOptions getDefaultInstance() {
            return EnumValueOptions.DEFAULT_INSTANCE;
        }
        
        public static Parser<EnumValueOptions> parser() {
            return EnumValueOptions.PARSER;
        }
        
        @Override
        public Parser<EnumValueOptions> getParserForType() {
            return EnumValueOptions.PARSER;
        }
        
        @Override
        public EnumValueOptions getDefaultInstanceForType() {
            return EnumValueOptions.DEFAULT_INSTANCE;
        }
        
        static {
            RuntimeVersion.validateProtobufGencodeVersion(RuntimeVersion.RuntimeDomain.PUBLIC, 4, 33, 0, "", "EnumValueOptions");
            DEFAULT_INSTANCE = new EnumValueOptions();
            PARSER = new AbstractParser<EnumValueOptions>() {
                @Override
                public EnumValueOptions parsePartialFrom(final CodedInputStream input, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
                    final Builder builder = EnumValueOptions.newBuilder();
                    try {
                        builder.mergeFrom(input, extensionRegistry);
                    }
                    catch (final InvalidProtocolBufferException e) {
                        throw e.setUnfinishedMessage(builder.buildPartial());
                    }
                    catch (final UninitializedMessageException e2) {
                        throw e2.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
                    }
                    catch (final IOException e3) {
                        throw new InvalidProtocolBufferException(e3).setUnfinishedMessage(builder.buildPartial());
                    }
                    return builder.buildPartial();
                }
            };
        }
        
        public static final class Builder extends ExtendableBuilder<EnumValueOptions, Builder> implements EnumValueOptionsOrBuilder
        {
            private int bitField0_;
            private boolean deprecated_;
            private FeatureSet features_;
            private SingleFieldBuilder<FeatureSet, FeatureSet.Builder, FeatureSetOrBuilder> featuresBuilder_;
            private boolean debugRedact_;
            private FieldOptions.FeatureSupport featureSupport_;
            private SingleFieldBuilder<FieldOptions.FeatureSupport, FieldOptions.FeatureSupport.Builder, FieldOptions.FeatureSupportOrBuilder> featureSupportBuilder_;
            private List<UninterpretedOption> uninterpretedOption_;
            private RepeatedFieldBuilder<UninterpretedOption, UninterpretedOption.Builder, UninterpretedOptionOrBuilder> uninterpretedOptionBuilder_;
            
            public static final Descriptors.Descriptor getDescriptor() {
                return DescriptorProtos.internal_static_google_protobuf_EnumValueOptions_descriptor;
            }
            
            @Override
            protected FieldAccessorTable internalGetFieldAccessorTable() {
                return DescriptorProtos.internal_static_google_protobuf_EnumValueOptions_fieldAccessorTable.ensureFieldAccessorsInitialized(EnumValueOptions.class, Builder.class);
            }
            
            private Builder() {
                this.uninterpretedOption_ = Collections.emptyList();
                this.maybeForceBuilderInitialization();
            }
            
            private Builder(final BuilderParent parent) {
                super(parent);
                this.uninterpretedOption_ = Collections.emptyList();
                this.maybeForceBuilderInitialization();
            }
            
            private void maybeForceBuilderInitialization() {
                if (GeneratedMessage.alwaysUseFieldBuilders) {
                    this.internalGetFeaturesFieldBuilder();
                    this.internalGetFeatureSupportFieldBuilder();
                    this.internalGetUninterpretedOptionFieldBuilder();
                }
            }
            
            @Override
            public Builder clear() {
                super.clear();
                this.bitField0_ = 0;
                this.deprecated_ = false;
                this.features_ = null;
                if (this.featuresBuilder_ != null) {
                    this.featuresBuilder_.dispose();
                    this.featuresBuilder_ = null;
                }
                this.debugRedact_ = false;
                this.featureSupport_ = null;
                if (this.featureSupportBuilder_ != null) {
                    this.featureSupportBuilder_.dispose();
                    this.featureSupportBuilder_ = null;
                }
                if (this.uninterpretedOptionBuilder_ == null) {
                    this.uninterpretedOption_ = Collections.emptyList();
                }
                else {
                    this.uninterpretedOption_ = null;
                    this.uninterpretedOptionBuilder_.clear();
                }
                this.bitField0_ &= 0xFFFFFFEF;
                return this;
            }
            
            @Override
            public Descriptors.Descriptor getDescriptorForType() {
                return DescriptorProtos.internal_static_google_protobuf_EnumValueOptions_descriptor;
            }
            
            @Override
            public EnumValueOptions getDefaultInstanceForType() {
                return EnumValueOptions.getDefaultInstance();
            }
            
            @Override
            public EnumValueOptions build() {
                final EnumValueOptions result = this.buildPartial();
                if (!result.isInitialized()) {
                    throw AbstractMessage.Builder.newUninitializedMessageException(result);
                }
                return result;
            }
            
            @Override
            public EnumValueOptions buildPartial() {
                final EnumValueOptions result = new EnumValueOptions((ExtendableBuilder)this);
                this.buildPartialRepeatedFields(result);
                if (this.bitField0_ != 0) {
                    this.buildPartial0(result);
                }
                this.onBuilt();
                return result;
            }
            
            private void buildPartialRepeatedFields(final EnumValueOptions result) {
                if (this.uninterpretedOptionBuilder_ == null) {
                    if ((this.bitField0_ & 0x10) != 0x0) {
                        this.uninterpretedOption_ = Collections.unmodifiableList((List<? extends UninterpretedOption>)this.uninterpretedOption_);
                        this.bitField0_ &= 0xFFFFFFEF;
                    }
                    result.uninterpretedOption_ = this.uninterpretedOption_;
                }
                else {
                    result.uninterpretedOption_ = this.uninterpretedOptionBuilder_.build();
                }
            }
            
            private void buildPartial0(final EnumValueOptions result) {
                final int from_bitField0_ = this.bitField0_;
                int to_bitField0_ = 0;
                if ((from_bitField0_ & 0x1) != 0x0) {
                    result.deprecated_ = this.deprecated_;
                    to_bitField0_ |= 0x1;
                }
                if ((from_bitField0_ & 0x2) != 0x0) {
                    result.features_ = ((this.featuresBuilder_ == null) ? this.features_ : this.featuresBuilder_.build());
                    to_bitField0_ |= 0x2;
                }
                if ((from_bitField0_ & 0x4) != 0x0) {
                    result.debugRedact_ = this.debugRedact_;
                    to_bitField0_ |= 0x4;
                }
                if ((from_bitField0_ & 0x8) != 0x0) {
                    result.featureSupport_ = ((this.featureSupportBuilder_ == null) ? this.featureSupport_ : this.featureSupportBuilder_.build());
                    to_bitField0_ |= 0x8;
                }
                result.bitField0_ |= to_bitField0_;
            }
            
            public <Type> Builder setExtension(final GeneratedExtension<EnumValueOptions, Type> extension, final Type value) {
                return super.setExtension(extension, value);
            }
            
            public <Type> Builder setExtension(final GeneratedExtension<EnumValueOptions, List<Type>> extension, final int index, final Type value) {
                return super.setExtension(extension, index, value);
            }
            
            public <Type> Builder addExtension(final GeneratedExtension<EnumValueOptions, List<Type>> extension, final Type value) {
                return super.addExtension(extension, value);
            }
            
            public <Type> Builder clearExtension(final GeneratedExtension<EnumValueOptions, Type> extension) {
                return super.clearExtension(extension);
            }
            
            @Override
            public Builder mergeFrom(final Message other) {
                if (other instanceof EnumValueOptions) {
                    return this.mergeFrom((EnumValueOptions)other);
                }
                super.mergeFrom(other);
                return this;
            }
            
            public Builder mergeFrom(final EnumValueOptions other) {
                if (other == EnumValueOptions.getDefaultInstance()) {
                    return this;
                }
                if (other.hasDeprecated()) {
                    this.setDeprecated(other.getDeprecated());
                }
                if (other.hasFeatures()) {
                    this.mergeFeatures(other.getFeatures());
                }
                if (other.hasDebugRedact()) {
                    this.setDebugRedact(other.getDebugRedact());
                }
                if (other.hasFeatureSupport()) {
                    this.mergeFeatureSupport(other.getFeatureSupport());
                }
                if (this.uninterpretedOptionBuilder_ == null) {
                    if (!other.uninterpretedOption_.isEmpty()) {
                        if (this.uninterpretedOption_.isEmpty()) {
                            this.uninterpretedOption_ = other.uninterpretedOption_;
                            this.bitField0_ &= 0xFFFFFFEF;
                        }
                        else {
                            this.ensureUninterpretedOptionIsMutable();
                            this.uninterpretedOption_.addAll(other.uninterpretedOption_);
                        }
                        this.onChanged();
                    }
                }
                else if (!other.uninterpretedOption_.isEmpty()) {
                    if (this.uninterpretedOptionBuilder_.isEmpty()) {
                        this.uninterpretedOptionBuilder_.dispose();
                        this.uninterpretedOptionBuilder_ = null;
                        this.uninterpretedOption_ = other.uninterpretedOption_;
                        this.bitField0_ &= 0xFFFFFFEF;
                        this.uninterpretedOptionBuilder_ = (GeneratedMessage.alwaysUseFieldBuilders ? this.internalGetUninterpretedOptionFieldBuilder() : null);
                    }
                    else {
                        this.uninterpretedOptionBuilder_.addAllMessages(other.uninterpretedOption_);
                    }
                }
                this.mergeExtensionFields(other);
                this.mergeUnknownFields(other.getUnknownFields());
                this.onChanged();
                return this;
            }
            
            @Override
            public final boolean isInitialized() {
                if (this.hasFeatures() && !this.getFeatures().isInitialized()) {
                    return false;
                }
                for (int i = 0; i < this.getUninterpretedOptionCount(); ++i) {
                    if (!this.getUninterpretedOption(i).isInitialized()) {
                        return false;
                    }
                }
                return this.extensionsAreInitialized();
            }
            
            @Override
            public Builder mergeFrom(final CodedInputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
                if (extensionRegistry == null) {
                    throw new NullPointerException();
                }
                try {
                    boolean done = false;
                    while (!done) {
                        final int tag = input.readTag();
                        switch (tag) {
                            case 0: {
                                done = true;
                                continue;
                            }
                            case 8: {
                                this.deprecated_ = input.readBool();
                                this.bitField0_ |= 0x1;
                                continue;
                            }
                            case 18: {
                                input.readMessage(this.internalGetFeaturesFieldBuilder().getBuilder(), extensionRegistry);
                                this.bitField0_ |= 0x2;
                                continue;
                            }
                            case 24: {
                                this.debugRedact_ = input.readBool();
                                this.bitField0_ |= 0x4;
                                continue;
                            }
                            case 34: {
                                input.readMessage(this.internalGetFeatureSupportFieldBuilder().getBuilder(), extensionRegistry);
                                this.bitField0_ |= 0x8;
                                continue;
                            }
                            case 7994: {
                                final UninterpretedOption m = input.readMessage(UninterpretedOption.parser(), extensionRegistry);
                                if (this.uninterpretedOptionBuilder_ == null) {
                                    this.ensureUninterpretedOptionIsMutable();
                                    this.uninterpretedOption_.add(m);
                                    continue;
                                }
                                this.uninterpretedOptionBuilder_.addMessage(m);
                                continue;
                            }
                            default: {
                                if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                                    done = true;
                                    continue;
                                }
                                continue;
                            }
                        }
                    }
                }
                catch (final InvalidProtocolBufferException e) {
                    throw e.unwrapIOException();
                }
                finally {
                    this.onChanged();
                }
                return this;
            }
            
            @Override
            public boolean hasDeprecated() {
                return (this.bitField0_ & 0x1) != 0x0;
            }
            
            @Override
            public boolean getDeprecated() {
                return this.deprecated_;
            }
            
            public Builder setDeprecated(final boolean value) {
                this.deprecated_ = value;
                this.bitField0_ |= 0x1;
                this.onChanged();
                return this;
            }
            
            public Builder clearDeprecated() {
                this.bitField0_ &= 0xFFFFFFFE;
                this.deprecated_ = false;
                this.onChanged();
                return this;
            }
            
            @Override
            public boolean hasFeatures() {
                return (this.bitField0_ & 0x2) != 0x0;
            }
            
            @Override
            public FeatureSet getFeatures() {
                if (this.featuresBuilder_ == null) {
                    return (this.features_ == null) ? FeatureSet.getDefaultInstance() : this.features_;
                }
                return this.featuresBuilder_.getMessage();
            }
            
            public Builder setFeatures(final FeatureSet value) {
                if (this.featuresBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.features_ = value;
                }
                else {
                    this.featuresBuilder_.setMessage(value);
                }
                this.bitField0_ |= 0x2;
                this.onChanged();
                return this;
            }
            
            public Builder setFeatures(final FeatureSet.Builder builderForValue) {
                if (this.featuresBuilder_ == null) {
                    this.features_ = builderForValue.build();
                }
                else {
                    this.featuresBuilder_.setMessage(builderForValue.build());
                }
                this.bitField0_ |= 0x2;
                this.onChanged();
                return this;
            }
            
            public Builder mergeFeatures(final FeatureSet value) {
                if (this.featuresBuilder_ == null) {
                    if ((this.bitField0_ & 0x2) != 0x0 && this.features_ != null && this.features_ != FeatureSet.getDefaultInstance()) {
                        this.getFeaturesBuilder().mergeFrom(value);
                    }
                    else {
                        this.features_ = value;
                    }
                }
                else {
                    this.featuresBuilder_.mergeFrom(value);
                }
                if (this.features_ != null) {
                    this.bitField0_ |= 0x2;
                    this.onChanged();
                }
                return this;
            }
            
            public Builder clearFeatures() {
                this.bitField0_ &= 0xFFFFFFFD;
                this.features_ = null;
                if (this.featuresBuilder_ != null) {
                    this.featuresBuilder_.dispose();
                    this.featuresBuilder_ = null;
                }
                this.onChanged();
                return this;
            }
            
            public FeatureSet.Builder getFeaturesBuilder() {
                this.bitField0_ |= 0x2;
                this.onChanged();
                return this.internalGetFeaturesFieldBuilder().getBuilder();
            }
            
            @Override
            public FeatureSetOrBuilder getFeaturesOrBuilder() {
                if (this.featuresBuilder_ != null) {
                    return this.featuresBuilder_.getMessageOrBuilder();
                }
                return (this.features_ == null) ? FeatureSet.getDefaultInstance() : this.features_;
            }
            
            private SingleFieldBuilder<FeatureSet, FeatureSet.Builder, FeatureSetOrBuilder> internalGetFeaturesFieldBuilder() {
                if (this.featuresBuilder_ == null) {
                    this.featuresBuilder_ = new SingleFieldBuilder<FeatureSet, FeatureSet.Builder, FeatureSetOrBuilder>(this.getFeatures(), this.getParentForChildren(), this.isClean());
                    this.features_ = null;
                }
                return this.featuresBuilder_;
            }
            
            @Override
            public boolean hasDebugRedact() {
                return (this.bitField0_ & 0x4) != 0x0;
            }
            
            @Override
            public boolean getDebugRedact() {
                return this.debugRedact_;
            }
            
            public Builder setDebugRedact(final boolean value) {
                this.debugRedact_ = value;
                this.bitField0_ |= 0x4;
                this.onChanged();
                return this;
            }
            
            public Builder clearDebugRedact() {
                this.bitField0_ &= 0xFFFFFFFB;
                this.debugRedact_ = false;
                this.onChanged();
                return this;
            }
            
            @Override
            public boolean hasFeatureSupport() {
                return (this.bitField0_ & 0x8) != 0x0;
            }
            
            @Override
            public FieldOptions.FeatureSupport getFeatureSupport() {
                if (this.featureSupportBuilder_ == null) {
                    return (this.featureSupport_ == null) ? FieldOptions.FeatureSupport.getDefaultInstance() : this.featureSupport_;
                }
                return this.featureSupportBuilder_.getMessage();
            }
            
            public Builder setFeatureSupport(final FieldOptions.FeatureSupport value) {
                if (this.featureSupportBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.featureSupport_ = value;
                }
                else {
                    this.featureSupportBuilder_.setMessage(value);
                }
                this.bitField0_ |= 0x8;
                this.onChanged();
                return this;
            }
            
            public Builder setFeatureSupport(final FieldOptions.FeatureSupport.Builder builderForValue) {
                if (this.featureSupportBuilder_ == null) {
                    this.featureSupport_ = builderForValue.build();
                }
                else {
                    this.featureSupportBuilder_.setMessage(builderForValue.build());
                }
                this.bitField0_ |= 0x8;
                this.onChanged();
                return this;
            }
            
            public Builder mergeFeatureSupport(final FieldOptions.FeatureSupport value) {
                if (this.featureSupportBuilder_ == null) {
                    if ((this.bitField0_ & 0x8) != 0x0 && this.featureSupport_ != null && this.featureSupport_ != FieldOptions.FeatureSupport.getDefaultInstance()) {
                        this.getFeatureSupportBuilder().mergeFrom(value);
                    }
                    else {
                        this.featureSupport_ = value;
                    }
                }
                else {
                    this.featureSupportBuilder_.mergeFrom(value);
                }
                if (this.featureSupport_ != null) {
                    this.bitField0_ |= 0x8;
                    this.onChanged();
                }
                return this;
            }
            
            public Builder clearFeatureSupport() {
                this.bitField0_ &= 0xFFFFFFF7;
                this.featureSupport_ = null;
                if (this.featureSupportBuilder_ != null) {
                    this.featureSupportBuilder_.dispose();
                    this.featureSupportBuilder_ = null;
                }
                this.onChanged();
                return this;
            }
            
            public FieldOptions.FeatureSupport.Builder getFeatureSupportBuilder() {
                this.bitField0_ |= 0x8;
                this.onChanged();
                return this.internalGetFeatureSupportFieldBuilder().getBuilder();
            }
            
            @Override
            public FieldOptions.FeatureSupportOrBuilder getFeatureSupportOrBuilder() {
                if (this.featureSupportBuilder_ != null) {
                    return this.featureSupportBuilder_.getMessageOrBuilder();
                }
                return (this.featureSupport_ == null) ? FieldOptions.FeatureSupport.getDefaultInstance() : this.featureSupport_;
            }
            
            private SingleFieldBuilder<FieldOptions.FeatureSupport, FieldOptions.FeatureSupport.Builder, FieldOptions.FeatureSupportOrBuilder> internalGetFeatureSupportFieldBuilder() {
                if (this.featureSupportBuilder_ == null) {
                    this.featureSupportBuilder_ = new SingleFieldBuilder<FieldOptions.FeatureSupport, FieldOptions.FeatureSupport.Builder, FieldOptions.FeatureSupportOrBuilder>(this.getFeatureSupport(), this.getParentForChildren(), this.isClean());
                    this.featureSupport_ = null;
                }
                return this.featureSupportBuilder_;
            }
            
            private void ensureUninterpretedOptionIsMutable() {
                if ((this.bitField0_ & 0x10) == 0x0) {
                    this.uninterpretedOption_ = new ArrayList<UninterpretedOption>(this.uninterpretedOption_);
                    this.bitField0_ |= 0x10;
                }
            }
            
            @Override
            public List<UninterpretedOption> getUninterpretedOptionList() {
                if (this.uninterpretedOptionBuilder_ == null) {
                    return Collections.unmodifiableList((List<? extends UninterpretedOption>)this.uninterpretedOption_);
                }
                return this.uninterpretedOptionBuilder_.getMessageList();
            }
            
            @Override
            public int getUninterpretedOptionCount() {
                if (this.uninterpretedOptionBuilder_ == null) {
                    return this.uninterpretedOption_.size();
                }
                return this.uninterpretedOptionBuilder_.getCount();
            }
            
            @Override
            public UninterpretedOption getUninterpretedOption(final int index) {
                if (this.uninterpretedOptionBuilder_ == null) {
                    return this.uninterpretedOption_.get(index);
                }
                return this.uninterpretedOptionBuilder_.getMessage(index);
            }
            
            public Builder setUninterpretedOption(final int index, final UninterpretedOption value) {
                if (this.uninterpretedOptionBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.ensureUninterpretedOptionIsMutable();
                    this.uninterpretedOption_.set(index, value);
                    this.onChanged();
                }
                else {
                    this.uninterpretedOptionBuilder_.setMessage(index, value);
                }
                return this;
            }
            
            public Builder setUninterpretedOption(final int index, final UninterpretedOption.Builder builderForValue) {
                if (this.uninterpretedOptionBuilder_ == null) {
                    this.ensureUninterpretedOptionIsMutable();
                    this.uninterpretedOption_.set(index, builderForValue.build());
                    this.onChanged();
                }
                else {
                    this.uninterpretedOptionBuilder_.setMessage(index, builderForValue.build());
                }
                return this;
            }
            
            public Builder addUninterpretedOption(final UninterpretedOption value) {
                if (this.uninterpretedOptionBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.ensureUninterpretedOptionIsMutable();
                    this.uninterpretedOption_.add(value);
                    this.onChanged();
                }
                else {
                    this.uninterpretedOptionBuilder_.addMessage(value);
                }
                return this;
            }
            
            public Builder addUninterpretedOption(final int index, final UninterpretedOption value) {
                if (this.uninterpretedOptionBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.ensureUninterpretedOptionIsMutable();
                    this.uninterpretedOption_.add(index, value);
                    this.onChanged();
                }
                else {
                    this.uninterpretedOptionBuilder_.addMessage(index, value);
                }
                return this;
            }
            
            public Builder addUninterpretedOption(final UninterpretedOption.Builder builderForValue) {
                if (this.uninterpretedOptionBuilder_ == null) {
                    this.ensureUninterpretedOptionIsMutable();
                    this.uninterpretedOption_.add(builderForValue.build());
                    this.onChanged();
                }
                else {
                    this.uninterpretedOptionBuilder_.addMessage(builderForValue.build());
                }
                return this;
            }
            
            public Builder addUninterpretedOption(final int index, final UninterpretedOption.Builder builderForValue) {
                if (this.uninterpretedOptionBuilder_ == null) {
                    this.ensureUninterpretedOptionIsMutable();
                    this.uninterpretedOption_.add(index, builderForValue.build());
                    this.onChanged();
                }
                else {
                    this.uninterpretedOptionBuilder_.addMessage(index, builderForValue.build());
                }
                return this;
            }
            
            public Builder addAllUninterpretedOption(final Iterable<? extends UninterpretedOption> values) {
                if (this.uninterpretedOptionBuilder_ == null) {
                    this.ensureUninterpretedOptionIsMutable();
                    AbstractMessageLite.Builder.addAll(values, this.uninterpretedOption_);
                    this.onChanged();
                }
                else {
                    this.uninterpretedOptionBuilder_.addAllMessages(values);
                }
                return this;
            }
            
            public Builder clearUninterpretedOption() {
                if (this.uninterpretedOptionBuilder_ == null) {
                    this.uninterpretedOption_ = Collections.emptyList();
                    this.bitField0_ &= 0xFFFFFFEF;
                    this.onChanged();
                }
                else {
                    this.uninterpretedOptionBuilder_.clear();
                }
                return this;
            }
            
            public Builder removeUninterpretedOption(final int index) {
                if (this.uninterpretedOptionBuilder_ == null) {
                    this.ensureUninterpretedOptionIsMutable();
                    this.uninterpretedOption_.remove(index);
                    this.onChanged();
                }
                else {
                    this.uninterpretedOptionBuilder_.remove(index);
                }
                return this;
            }
            
            public UninterpretedOption.Builder getUninterpretedOptionBuilder(final int index) {
                return this.internalGetUninterpretedOptionFieldBuilder().getBuilder(index);
            }
            
            @Override
            public UninterpretedOptionOrBuilder getUninterpretedOptionOrBuilder(final int index) {
                if (this.uninterpretedOptionBuilder_ == null) {
                    return this.uninterpretedOption_.get(index);
                }
                return this.uninterpretedOptionBuilder_.getMessageOrBuilder(index);
            }
            
            @Override
            public List<? extends UninterpretedOptionOrBuilder> getUninterpretedOptionOrBuilderList() {
                if (this.uninterpretedOptionBuilder_ != null) {
                    return this.uninterpretedOptionBuilder_.getMessageOrBuilderList();
                }
                return Collections.unmodifiableList((List<? extends UninterpretedOptionOrBuilder>)this.uninterpretedOption_);
            }
            
            public UninterpretedOption.Builder addUninterpretedOptionBuilder() {
                return this.internalGetUninterpretedOptionFieldBuilder().addBuilder(UninterpretedOption.getDefaultInstance());
            }
            
            public UninterpretedOption.Builder addUninterpretedOptionBuilder(final int index) {
                return this.internalGetUninterpretedOptionFieldBuilder().addBuilder(index, UninterpretedOption.getDefaultInstance());
            }
            
            public List<UninterpretedOption.Builder> getUninterpretedOptionBuilderList() {
                return this.internalGetUninterpretedOptionFieldBuilder().getBuilderList();
            }
            
            private RepeatedFieldBuilder<UninterpretedOption, UninterpretedOption.Builder, UninterpretedOptionOrBuilder> internalGetUninterpretedOptionFieldBuilder() {
                if (this.uninterpretedOptionBuilder_ == null) {
                    this.uninterpretedOptionBuilder_ = new RepeatedFieldBuilder<UninterpretedOption, UninterpretedOption.Builder, UninterpretedOptionOrBuilder>(this.uninterpretedOption_, (this.bitField0_ & 0x10) != 0x0, this.getParentForChildren(), this.isClean());
                    this.uninterpretedOption_ = null;
                }
                return this.uninterpretedOptionBuilder_;
            }
        }
    }
    
    public static final class ServiceOptions extends ExtendableMessage<ServiceOptions> implements ServiceOptionsOrBuilder
    {
        private static final long serialVersionUID = 0L;
        private int bitField0_;
        public static final int FEATURES_FIELD_NUMBER = 34;
        private FeatureSet features_;
        public static final int DEPRECATED_FIELD_NUMBER = 33;
        private boolean deprecated_;
        public static final int UNINTERPRETED_OPTION_FIELD_NUMBER = 999;
        private List<UninterpretedOption> uninterpretedOption_;
        private byte memoizedIsInitialized;
        private static final ServiceOptions DEFAULT_INSTANCE;
        private static final Parser<ServiceOptions> PARSER;
        
        private ServiceOptions(final ExtendableBuilder<ServiceOptions, ?> builder) {
            super(builder);
            this.deprecated_ = false;
            this.memoizedIsInitialized = -1;
        }
        
        private ServiceOptions() {
            this.deprecated_ = false;
            this.memoizedIsInitialized = -1;
            this.uninterpretedOption_ = Collections.emptyList();
        }
        
        public static final Descriptors.Descriptor getDescriptor() {
            return DescriptorProtos.internal_static_google_protobuf_ServiceOptions_descriptor;
        }
        
        @Override
        protected FieldAccessorTable internalGetFieldAccessorTable() {
            return DescriptorProtos.internal_static_google_protobuf_ServiceOptions_fieldAccessorTable.ensureFieldAccessorsInitialized(ServiceOptions.class, Builder.class);
        }
        
        @Override
        public boolean hasFeatures() {
            return (this.bitField0_ & 0x1) != 0x0;
        }
        
        @Override
        public FeatureSet getFeatures() {
            return (this.features_ == null) ? FeatureSet.getDefaultInstance() : this.features_;
        }
        
        @Override
        public FeatureSetOrBuilder getFeaturesOrBuilder() {
            return (this.features_ == null) ? FeatureSet.getDefaultInstance() : this.features_;
        }
        
        @Override
        public boolean hasDeprecated() {
            return (this.bitField0_ & 0x2) != 0x0;
        }
        
        @Override
        public boolean getDeprecated() {
            return this.deprecated_;
        }
        
        @Override
        public List<UninterpretedOption> getUninterpretedOptionList() {
            return this.uninterpretedOption_;
        }
        
        @Override
        public List<? extends UninterpretedOptionOrBuilder> getUninterpretedOptionOrBuilderList() {
            return this.uninterpretedOption_;
        }
        
        @Override
        public int getUninterpretedOptionCount() {
            return this.uninterpretedOption_.size();
        }
        
        @Override
        public UninterpretedOption getUninterpretedOption(final int index) {
            return this.uninterpretedOption_.get(index);
        }
        
        @Override
        public UninterpretedOptionOrBuilder getUninterpretedOptionOrBuilder(final int index) {
            return this.uninterpretedOption_.get(index);
        }
        
        @Override
        public final boolean isInitialized() {
            final byte isInitialized = this.memoizedIsInitialized;
            if (isInitialized == 1) {
                return true;
            }
            if (isInitialized == 0) {
                return false;
            }
            if (this.hasFeatures() && !this.getFeatures().isInitialized()) {
                this.memoizedIsInitialized = 0;
                return false;
            }
            for (int i = 0; i < this.getUninterpretedOptionCount(); ++i) {
                if (!this.getUninterpretedOption(i).isInitialized()) {
                    this.memoizedIsInitialized = 0;
                    return false;
                }
            }
            if (!this.extensionsAreInitialized()) {
                this.memoizedIsInitialized = 0;
                return false;
            }
            this.memoizedIsInitialized = 1;
            return true;
        }
        
        @Override
        public void writeTo(final CodedOutputStream output) throws IOException {
            final ExtensionSerializer extensionWriter = this.newExtensionSerializer();
            if ((this.bitField0_ & 0x2) != 0x0) {
                output.writeBool(33, this.deprecated_);
            }
            if ((this.bitField0_ & 0x1) != 0x0) {
                output.writeMessage(34, this.getFeatures());
            }
            for (int i = 0; i < this.uninterpretedOption_.size(); ++i) {
                output.writeMessage(999, this.uninterpretedOption_.get(i));
            }
            extensionWriter.writeUntil(536870912, output);
            this.getUnknownFields().writeTo(output);
        }
        
        @Override
        public int getSerializedSize() {
            int size = this.memoizedSize;
            if (size != -1) {
                return size;
            }
            size = 0;
            if ((this.bitField0_ & 0x2) != 0x0) {
                size += CodedOutputStream.computeBoolSize(33, this.deprecated_);
            }
            if ((this.bitField0_ & 0x1) != 0x0) {
                size += CodedOutputStream.computeMessageSize(34, this.getFeatures());
            }
            for (int i = 0; i < this.uninterpretedOption_.size(); ++i) {
                size += CodedOutputStream.computeMessageSize(999, this.uninterpretedOption_.get(i));
            }
            size += this.extensionsSerializedSize();
            size += this.getUnknownFields().getSerializedSize();
            return this.memoizedSize = size;
        }
        
        @Override
        public boolean equals(final Object obj) {
            if (obj == this) {
                return true;
            }
            if (!(obj instanceof ServiceOptions)) {
                return super.equals(obj);
            }
            final ServiceOptions other = (ServiceOptions)obj;
            return this.hasFeatures() == other.hasFeatures() && (!this.hasFeatures() || this.getFeatures().equals(other.getFeatures())) && this.hasDeprecated() == other.hasDeprecated() && (!this.hasDeprecated() || this.getDeprecated() == other.getDeprecated()) && this.getUninterpretedOptionList().equals(other.getUninterpretedOptionList()) && this.getUnknownFields().equals(other.getUnknownFields()) && this.getExtensionFields().equals(other.getExtensionFields());
        }
        
        @Override
        public int hashCode() {
            if (this.memoizedHashCode != 0) {
                return this.memoizedHashCode;
            }
            int hash = 41;
            hash = 19 * hash + getDescriptor().hashCode();
            if (this.hasFeatures()) {
                hash = 37 * hash + 34;
                hash = 53 * hash + this.getFeatures().hashCode();
            }
            if (this.hasDeprecated()) {
                hash = 37 * hash + 33;
                hash = 53 * hash + Internal.hashBoolean(this.getDeprecated());
            }
            if (this.getUninterpretedOptionCount() > 0) {
                hash = 37 * hash + 999;
                hash = 53 * hash + this.getUninterpretedOptionList().hashCode();
            }
            hash = AbstractMessage.hashFields(hash, this.getExtensionFields());
            hash = 29 * hash + this.getUnknownFields().hashCode();
            return this.memoizedHashCode = hash;
        }
        
        public static ServiceOptions parseFrom(final ByteBuffer data) throws InvalidProtocolBufferException {
            return ServiceOptions.PARSER.parseFrom(data);
        }
        
        public static ServiceOptions parseFrom(final ByteBuffer data, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
            return ServiceOptions.PARSER.parseFrom(data, extensionRegistry);
        }
        
        public static ServiceOptions parseFrom(final ByteString data) throws InvalidProtocolBufferException {
            return ServiceOptions.PARSER.parseFrom(data);
        }
        
        public static ServiceOptions parseFrom(final ByteString data, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
            return ServiceOptions.PARSER.parseFrom(data, extensionRegistry);
        }
        
        public static ServiceOptions parseFrom(final byte[] data) throws InvalidProtocolBufferException {
            return ServiceOptions.PARSER.parseFrom(data);
        }
        
        public static ServiceOptions parseFrom(final byte[] data, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
            return ServiceOptions.PARSER.parseFrom(data, extensionRegistry);
        }
        
        public static ServiceOptions parseFrom(final InputStream input) throws IOException {
            return GeneratedMessage.parseWithIOException(ServiceOptions.PARSER, input);
        }
        
        public static ServiceOptions parseFrom(final InputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
            return GeneratedMessage.parseWithIOException(ServiceOptions.PARSER, input, extensionRegistry);
        }
        
        public static ServiceOptions parseDelimitedFrom(final InputStream input) throws IOException {
            return GeneratedMessage.parseDelimitedWithIOException(ServiceOptions.PARSER, input);
        }
        
        public static ServiceOptions parseDelimitedFrom(final InputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
            return GeneratedMessage.parseDelimitedWithIOException(ServiceOptions.PARSER, input, extensionRegistry);
        }
        
        public static ServiceOptions parseFrom(final CodedInputStream input) throws IOException {
            return GeneratedMessage.parseWithIOException(ServiceOptions.PARSER, input);
        }
        
        public static ServiceOptions parseFrom(final CodedInputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
            return GeneratedMessage.parseWithIOException(ServiceOptions.PARSER, input, extensionRegistry);
        }
        
        @Override
        public Builder newBuilderForType() {
            return newBuilder();
        }
        
        public static Builder newBuilder() {
            return ServiceOptions.DEFAULT_INSTANCE.toBuilder();
        }
        
        public static Builder newBuilder(final ServiceOptions prototype) {
            return ServiceOptions.DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
        }
        
        @Override
        public Builder toBuilder() {
            return (this == ServiceOptions.DEFAULT_INSTANCE) ? new Builder() : new Builder().mergeFrom(this);
        }
        
        @Override
        protected Builder newBuilderForType(final BuilderParent parent) {
            final Builder builder = new Builder(parent);
            return builder;
        }
        
        public static ServiceOptions getDefaultInstance() {
            return ServiceOptions.DEFAULT_INSTANCE;
        }
        
        public static Parser<ServiceOptions> parser() {
            return ServiceOptions.PARSER;
        }
        
        @Override
        public Parser<ServiceOptions> getParserForType() {
            return ServiceOptions.PARSER;
        }
        
        @Override
        public ServiceOptions getDefaultInstanceForType() {
            return ServiceOptions.DEFAULT_INSTANCE;
        }
        
        static {
            RuntimeVersion.validateProtobufGencodeVersion(RuntimeVersion.RuntimeDomain.PUBLIC, 4, 33, 0, "", "ServiceOptions");
            DEFAULT_INSTANCE = new ServiceOptions();
            PARSER = new AbstractParser<ServiceOptions>() {
                @Override
                public ServiceOptions parsePartialFrom(final CodedInputStream input, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
                    final Builder builder = ServiceOptions.newBuilder();
                    try {
                        builder.mergeFrom(input, extensionRegistry);
                    }
                    catch (final InvalidProtocolBufferException e) {
                        throw e.setUnfinishedMessage(builder.buildPartial());
                    }
                    catch (final UninitializedMessageException e2) {
                        throw e2.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
                    }
                    catch (final IOException e3) {
                        throw new InvalidProtocolBufferException(e3).setUnfinishedMessage(builder.buildPartial());
                    }
                    return builder.buildPartial();
                }
            };
        }
        
        public static final class Builder extends ExtendableBuilder<ServiceOptions, Builder> implements ServiceOptionsOrBuilder
        {
            private int bitField0_;
            private FeatureSet features_;
            private SingleFieldBuilder<FeatureSet, FeatureSet.Builder, FeatureSetOrBuilder> featuresBuilder_;
            private boolean deprecated_;
            private List<UninterpretedOption> uninterpretedOption_;
            private RepeatedFieldBuilder<UninterpretedOption, UninterpretedOption.Builder, UninterpretedOptionOrBuilder> uninterpretedOptionBuilder_;
            
            public static final Descriptors.Descriptor getDescriptor() {
                return DescriptorProtos.internal_static_google_protobuf_ServiceOptions_descriptor;
            }
            
            @Override
            protected FieldAccessorTable internalGetFieldAccessorTable() {
                return DescriptorProtos.internal_static_google_protobuf_ServiceOptions_fieldAccessorTable.ensureFieldAccessorsInitialized(ServiceOptions.class, Builder.class);
            }
            
            private Builder() {
                this.uninterpretedOption_ = Collections.emptyList();
                this.maybeForceBuilderInitialization();
            }
            
            private Builder(final BuilderParent parent) {
                super(parent);
                this.uninterpretedOption_ = Collections.emptyList();
                this.maybeForceBuilderInitialization();
            }
            
            private void maybeForceBuilderInitialization() {
                if (GeneratedMessage.alwaysUseFieldBuilders) {
                    this.internalGetFeaturesFieldBuilder();
                    this.internalGetUninterpretedOptionFieldBuilder();
                }
            }
            
            @Override
            public Builder clear() {
                super.clear();
                this.bitField0_ = 0;
                this.features_ = null;
                if (this.featuresBuilder_ != null) {
                    this.featuresBuilder_.dispose();
                    this.featuresBuilder_ = null;
                }
                this.deprecated_ = false;
                if (this.uninterpretedOptionBuilder_ == null) {
                    this.uninterpretedOption_ = Collections.emptyList();
                }
                else {
                    this.uninterpretedOption_ = null;
                    this.uninterpretedOptionBuilder_.clear();
                }
                this.bitField0_ &= 0xFFFFFFFB;
                return this;
            }
            
            @Override
            public Descriptors.Descriptor getDescriptorForType() {
                return DescriptorProtos.internal_static_google_protobuf_ServiceOptions_descriptor;
            }
            
            @Override
            public ServiceOptions getDefaultInstanceForType() {
                return ServiceOptions.getDefaultInstance();
            }
            
            @Override
            public ServiceOptions build() {
                final ServiceOptions result = this.buildPartial();
                if (!result.isInitialized()) {
                    throw AbstractMessage.Builder.newUninitializedMessageException(result);
                }
                return result;
            }
            
            @Override
            public ServiceOptions buildPartial() {
                final ServiceOptions result = new ServiceOptions((ExtendableBuilder)this);
                this.buildPartialRepeatedFields(result);
                if (this.bitField0_ != 0) {
                    this.buildPartial0(result);
                }
                this.onBuilt();
                return result;
            }
            
            private void buildPartialRepeatedFields(final ServiceOptions result) {
                if (this.uninterpretedOptionBuilder_ == null) {
                    if ((this.bitField0_ & 0x4) != 0x0) {
                        this.uninterpretedOption_ = Collections.unmodifiableList((List<? extends UninterpretedOption>)this.uninterpretedOption_);
                        this.bitField0_ &= 0xFFFFFFFB;
                    }
                    result.uninterpretedOption_ = this.uninterpretedOption_;
                }
                else {
                    result.uninterpretedOption_ = this.uninterpretedOptionBuilder_.build();
                }
            }
            
            private void buildPartial0(final ServiceOptions result) {
                final int from_bitField0_ = this.bitField0_;
                int to_bitField0_ = 0;
                if ((from_bitField0_ & 0x1) != 0x0) {
                    result.features_ = ((this.featuresBuilder_ == null) ? this.features_ : this.featuresBuilder_.build());
                    to_bitField0_ |= 0x1;
                }
                if ((from_bitField0_ & 0x2) != 0x0) {
                    result.deprecated_ = this.deprecated_;
                    to_bitField0_ |= 0x2;
                }
                result.bitField0_ |= to_bitField0_;
            }
            
            public <Type> Builder setExtension(final GeneratedExtension<ServiceOptions, Type> extension, final Type value) {
                return super.setExtension(extension, value);
            }
            
            public <Type> Builder setExtension(final GeneratedExtension<ServiceOptions, List<Type>> extension, final int index, final Type value) {
                return super.setExtension(extension, index, value);
            }
            
            public <Type> Builder addExtension(final GeneratedExtension<ServiceOptions, List<Type>> extension, final Type value) {
                return super.addExtension(extension, value);
            }
            
            public <Type> Builder clearExtension(final GeneratedExtension<ServiceOptions, Type> extension) {
                return super.clearExtension(extension);
            }
            
            @Override
            public Builder mergeFrom(final Message other) {
                if (other instanceof ServiceOptions) {
                    return this.mergeFrom((ServiceOptions)other);
                }
                super.mergeFrom(other);
                return this;
            }
            
            public Builder mergeFrom(final ServiceOptions other) {
                if (other == ServiceOptions.getDefaultInstance()) {
                    return this;
                }
                if (other.hasFeatures()) {
                    this.mergeFeatures(other.getFeatures());
                }
                if (other.hasDeprecated()) {
                    this.setDeprecated(other.getDeprecated());
                }
                if (this.uninterpretedOptionBuilder_ == null) {
                    if (!other.uninterpretedOption_.isEmpty()) {
                        if (this.uninterpretedOption_.isEmpty()) {
                            this.uninterpretedOption_ = other.uninterpretedOption_;
                            this.bitField0_ &= 0xFFFFFFFB;
                        }
                        else {
                            this.ensureUninterpretedOptionIsMutable();
                            this.uninterpretedOption_.addAll(other.uninterpretedOption_);
                        }
                        this.onChanged();
                    }
                }
                else if (!other.uninterpretedOption_.isEmpty()) {
                    if (this.uninterpretedOptionBuilder_.isEmpty()) {
                        this.uninterpretedOptionBuilder_.dispose();
                        this.uninterpretedOptionBuilder_ = null;
                        this.uninterpretedOption_ = other.uninterpretedOption_;
                        this.bitField0_ &= 0xFFFFFFFB;
                        this.uninterpretedOptionBuilder_ = (GeneratedMessage.alwaysUseFieldBuilders ? this.internalGetUninterpretedOptionFieldBuilder() : null);
                    }
                    else {
                        this.uninterpretedOptionBuilder_.addAllMessages(other.uninterpretedOption_);
                    }
                }
                this.mergeExtensionFields(other);
                this.mergeUnknownFields(other.getUnknownFields());
                this.onChanged();
                return this;
            }
            
            @Override
            public final boolean isInitialized() {
                if (this.hasFeatures() && !this.getFeatures().isInitialized()) {
                    return false;
                }
                for (int i = 0; i < this.getUninterpretedOptionCount(); ++i) {
                    if (!this.getUninterpretedOption(i).isInitialized()) {
                        return false;
                    }
                }
                return this.extensionsAreInitialized();
            }
            
            @Override
            public Builder mergeFrom(final CodedInputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
                if (extensionRegistry == null) {
                    throw new NullPointerException();
                }
                try {
                    boolean done = false;
                    while (!done) {
                        final int tag = input.readTag();
                        switch (tag) {
                            case 0: {
                                done = true;
                                continue;
                            }
                            case 264: {
                                this.deprecated_ = input.readBool();
                                this.bitField0_ |= 0x2;
                                continue;
                            }
                            case 274: {
                                input.readMessage(this.internalGetFeaturesFieldBuilder().getBuilder(), extensionRegistry);
                                this.bitField0_ |= 0x1;
                                continue;
                            }
                            case 7994: {
                                final UninterpretedOption m = input.readMessage(UninterpretedOption.parser(), extensionRegistry);
                                if (this.uninterpretedOptionBuilder_ == null) {
                                    this.ensureUninterpretedOptionIsMutable();
                                    this.uninterpretedOption_.add(m);
                                    continue;
                                }
                                this.uninterpretedOptionBuilder_.addMessage(m);
                                continue;
                            }
                            default: {
                                if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                                    done = true;
                                    continue;
                                }
                                continue;
                            }
                        }
                    }
                }
                catch (final InvalidProtocolBufferException e) {
                    throw e.unwrapIOException();
                }
                finally {
                    this.onChanged();
                }
                return this;
            }
            
            @Override
            public boolean hasFeatures() {
                return (this.bitField0_ & 0x1) != 0x0;
            }
            
            @Override
            public FeatureSet getFeatures() {
                if (this.featuresBuilder_ == null) {
                    return (this.features_ == null) ? FeatureSet.getDefaultInstance() : this.features_;
                }
                return this.featuresBuilder_.getMessage();
            }
            
            public Builder setFeatures(final FeatureSet value) {
                if (this.featuresBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.features_ = value;
                }
                else {
                    this.featuresBuilder_.setMessage(value);
                }
                this.bitField0_ |= 0x1;
                this.onChanged();
                return this;
            }
            
            public Builder setFeatures(final FeatureSet.Builder builderForValue) {
                if (this.featuresBuilder_ == null) {
                    this.features_ = builderForValue.build();
                }
                else {
                    this.featuresBuilder_.setMessage(builderForValue.build());
                }
                this.bitField0_ |= 0x1;
                this.onChanged();
                return this;
            }
            
            public Builder mergeFeatures(final FeatureSet value) {
                if (this.featuresBuilder_ == null) {
                    if ((this.bitField0_ & 0x1) != 0x0 && this.features_ != null && this.features_ != FeatureSet.getDefaultInstance()) {
                        this.getFeaturesBuilder().mergeFrom(value);
                    }
                    else {
                        this.features_ = value;
                    }
                }
                else {
                    this.featuresBuilder_.mergeFrom(value);
                }
                if (this.features_ != null) {
                    this.bitField0_ |= 0x1;
                    this.onChanged();
                }
                return this;
            }
            
            public Builder clearFeatures() {
                this.bitField0_ &= 0xFFFFFFFE;
                this.features_ = null;
                if (this.featuresBuilder_ != null) {
                    this.featuresBuilder_.dispose();
                    this.featuresBuilder_ = null;
                }
                this.onChanged();
                return this;
            }
            
            public FeatureSet.Builder getFeaturesBuilder() {
                this.bitField0_ |= 0x1;
                this.onChanged();
                return this.internalGetFeaturesFieldBuilder().getBuilder();
            }
            
            @Override
            public FeatureSetOrBuilder getFeaturesOrBuilder() {
                if (this.featuresBuilder_ != null) {
                    return this.featuresBuilder_.getMessageOrBuilder();
                }
                return (this.features_ == null) ? FeatureSet.getDefaultInstance() : this.features_;
            }
            
            private SingleFieldBuilder<FeatureSet, FeatureSet.Builder, FeatureSetOrBuilder> internalGetFeaturesFieldBuilder() {
                if (this.featuresBuilder_ == null) {
                    this.featuresBuilder_ = new SingleFieldBuilder<FeatureSet, FeatureSet.Builder, FeatureSetOrBuilder>(this.getFeatures(), this.getParentForChildren(), this.isClean());
                    this.features_ = null;
                }
                return this.featuresBuilder_;
            }
            
            @Override
            public boolean hasDeprecated() {
                return (this.bitField0_ & 0x2) != 0x0;
            }
            
            @Override
            public boolean getDeprecated() {
                return this.deprecated_;
            }
            
            public Builder setDeprecated(final boolean value) {
                this.deprecated_ = value;
                this.bitField0_ |= 0x2;
                this.onChanged();
                return this;
            }
            
            public Builder clearDeprecated() {
                this.bitField0_ &= 0xFFFFFFFD;
                this.deprecated_ = false;
                this.onChanged();
                return this;
            }
            
            private void ensureUninterpretedOptionIsMutable() {
                if ((this.bitField0_ & 0x4) == 0x0) {
                    this.uninterpretedOption_ = new ArrayList<UninterpretedOption>(this.uninterpretedOption_);
                    this.bitField0_ |= 0x4;
                }
            }
            
            @Override
            public List<UninterpretedOption> getUninterpretedOptionList() {
                if (this.uninterpretedOptionBuilder_ == null) {
                    return Collections.unmodifiableList((List<? extends UninterpretedOption>)this.uninterpretedOption_);
                }
                return this.uninterpretedOptionBuilder_.getMessageList();
            }
            
            @Override
            public int getUninterpretedOptionCount() {
                if (this.uninterpretedOptionBuilder_ == null) {
                    return this.uninterpretedOption_.size();
                }
                return this.uninterpretedOptionBuilder_.getCount();
            }
            
            @Override
            public UninterpretedOption getUninterpretedOption(final int index) {
                if (this.uninterpretedOptionBuilder_ == null) {
                    return this.uninterpretedOption_.get(index);
                }
                return this.uninterpretedOptionBuilder_.getMessage(index);
            }
            
            public Builder setUninterpretedOption(final int index, final UninterpretedOption value) {
                if (this.uninterpretedOptionBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.ensureUninterpretedOptionIsMutable();
                    this.uninterpretedOption_.set(index, value);
                    this.onChanged();
                }
                else {
                    this.uninterpretedOptionBuilder_.setMessage(index, value);
                }
                return this;
            }
            
            public Builder setUninterpretedOption(final int index, final UninterpretedOption.Builder builderForValue) {
                if (this.uninterpretedOptionBuilder_ == null) {
                    this.ensureUninterpretedOptionIsMutable();
                    this.uninterpretedOption_.set(index, builderForValue.build());
                    this.onChanged();
                }
                else {
                    this.uninterpretedOptionBuilder_.setMessage(index, builderForValue.build());
                }
                return this;
            }
            
            public Builder addUninterpretedOption(final UninterpretedOption value) {
                if (this.uninterpretedOptionBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.ensureUninterpretedOptionIsMutable();
                    this.uninterpretedOption_.add(value);
                    this.onChanged();
                }
                else {
                    this.uninterpretedOptionBuilder_.addMessage(value);
                }
                return this;
            }
            
            public Builder addUninterpretedOption(final int index, final UninterpretedOption value) {
                if (this.uninterpretedOptionBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.ensureUninterpretedOptionIsMutable();
                    this.uninterpretedOption_.add(index, value);
                    this.onChanged();
                }
                else {
                    this.uninterpretedOptionBuilder_.addMessage(index, value);
                }
                return this;
            }
            
            public Builder addUninterpretedOption(final UninterpretedOption.Builder builderForValue) {
                if (this.uninterpretedOptionBuilder_ == null) {
                    this.ensureUninterpretedOptionIsMutable();
                    this.uninterpretedOption_.add(builderForValue.build());
                    this.onChanged();
                }
                else {
                    this.uninterpretedOptionBuilder_.addMessage(builderForValue.build());
                }
                return this;
            }
            
            public Builder addUninterpretedOption(final int index, final UninterpretedOption.Builder builderForValue) {
                if (this.uninterpretedOptionBuilder_ == null) {
                    this.ensureUninterpretedOptionIsMutable();
                    this.uninterpretedOption_.add(index, builderForValue.build());
                    this.onChanged();
                }
                else {
                    this.uninterpretedOptionBuilder_.addMessage(index, builderForValue.build());
                }
                return this;
            }
            
            public Builder addAllUninterpretedOption(final Iterable<? extends UninterpretedOption> values) {
                if (this.uninterpretedOptionBuilder_ == null) {
                    this.ensureUninterpretedOptionIsMutable();
                    AbstractMessageLite.Builder.addAll(values, this.uninterpretedOption_);
                    this.onChanged();
                }
                else {
                    this.uninterpretedOptionBuilder_.addAllMessages(values);
                }
                return this;
            }
            
            public Builder clearUninterpretedOption() {
                if (this.uninterpretedOptionBuilder_ == null) {
                    this.uninterpretedOption_ = Collections.emptyList();
                    this.bitField0_ &= 0xFFFFFFFB;
                    this.onChanged();
                }
                else {
                    this.uninterpretedOptionBuilder_.clear();
                }
                return this;
            }
            
            public Builder removeUninterpretedOption(final int index) {
                if (this.uninterpretedOptionBuilder_ == null) {
                    this.ensureUninterpretedOptionIsMutable();
                    this.uninterpretedOption_.remove(index);
                    this.onChanged();
                }
                else {
                    this.uninterpretedOptionBuilder_.remove(index);
                }
                return this;
            }
            
            public UninterpretedOption.Builder getUninterpretedOptionBuilder(final int index) {
                return this.internalGetUninterpretedOptionFieldBuilder().getBuilder(index);
            }
            
            @Override
            public UninterpretedOptionOrBuilder getUninterpretedOptionOrBuilder(final int index) {
                if (this.uninterpretedOptionBuilder_ == null) {
                    return this.uninterpretedOption_.get(index);
                }
                return this.uninterpretedOptionBuilder_.getMessageOrBuilder(index);
            }
            
            @Override
            public List<? extends UninterpretedOptionOrBuilder> getUninterpretedOptionOrBuilderList() {
                if (this.uninterpretedOptionBuilder_ != null) {
                    return this.uninterpretedOptionBuilder_.getMessageOrBuilderList();
                }
                return Collections.unmodifiableList((List<? extends UninterpretedOptionOrBuilder>)this.uninterpretedOption_);
            }
            
            public UninterpretedOption.Builder addUninterpretedOptionBuilder() {
                return this.internalGetUninterpretedOptionFieldBuilder().addBuilder(UninterpretedOption.getDefaultInstance());
            }
            
            public UninterpretedOption.Builder addUninterpretedOptionBuilder(final int index) {
                return this.internalGetUninterpretedOptionFieldBuilder().addBuilder(index, UninterpretedOption.getDefaultInstance());
            }
            
            public List<UninterpretedOption.Builder> getUninterpretedOptionBuilderList() {
                return this.internalGetUninterpretedOptionFieldBuilder().getBuilderList();
            }
            
            private RepeatedFieldBuilder<UninterpretedOption, UninterpretedOption.Builder, UninterpretedOptionOrBuilder> internalGetUninterpretedOptionFieldBuilder() {
                if (this.uninterpretedOptionBuilder_ == null) {
                    this.uninterpretedOptionBuilder_ = new RepeatedFieldBuilder<UninterpretedOption, UninterpretedOption.Builder, UninterpretedOptionOrBuilder>(this.uninterpretedOption_, (this.bitField0_ & 0x4) != 0x0, this.getParentForChildren(), this.isClean());
                    this.uninterpretedOption_ = null;
                }
                return this.uninterpretedOptionBuilder_;
            }
        }
    }
    
    public static final class MethodOptions extends ExtendableMessage<MethodOptions> implements MethodOptionsOrBuilder
    {
        private static final long serialVersionUID = 0L;
        private int bitField0_;
        public static final int DEPRECATED_FIELD_NUMBER = 33;
        private boolean deprecated_;
        public static final int IDEMPOTENCY_LEVEL_FIELD_NUMBER = 34;
        private int idempotencyLevel_;
        public static final int FEATURES_FIELD_NUMBER = 35;
        private FeatureSet features_;
        public static final int UNINTERPRETED_OPTION_FIELD_NUMBER = 999;
        private List<UninterpretedOption> uninterpretedOption_;
        private byte memoizedIsInitialized;
        private static final MethodOptions DEFAULT_INSTANCE;
        private static final Parser<MethodOptions> PARSER;
        
        private MethodOptions(final ExtendableBuilder<MethodOptions, ?> builder) {
            super(builder);
            this.deprecated_ = false;
            this.idempotencyLevel_ = 0;
            this.memoizedIsInitialized = -1;
        }
        
        private MethodOptions() {
            this.deprecated_ = false;
            this.idempotencyLevel_ = 0;
            this.memoizedIsInitialized = -1;
            this.idempotencyLevel_ = 0;
            this.uninterpretedOption_ = Collections.emptyList();
        }
        
        public static final Descriptors.Descriptor getDescriptor() {
            return DescriptorProtos.internal_static_google_protobuf_MethodOptions_descriptor;
        }
        
        @Override
        protected FieldAccessorTable internalGetFieldAccessorTable() {
            return DescriptorProtos.internal_static_google_protobuf_MethodOptions_fieldAccessorTable.ensureFieldAccessorsInitialized(MethodOptions.class, Builder.class);
        }
        
        @Override
        public boolean hasDeprecated() {
            return (this.bitField0_ & 0x1) != 0x0;
        }
        
        @Override
        public boolean getDeprecated() {
            return this.deprecated_;
        }
        
        @Override
        public boolean hasIdempotencyLevel() {
            return (this.bitField0_ & 0x2) != 0x0;
        }
        
        @Override
        public IdempotencyLevel getIdempotencyLevel() {
            final IdempotencyLevel result = IdempotencyLevel.forNumber(this.idempotencyLevel_);
            return (result == null) ? IdempotencyLevel.IDEMPOTENCY_UNKNOWN : result;
        }
        
        @Override
        public boolean hasFeatures() {
            return (this.bitField0_ & 0x4) != 0x0;
        }
        
        @Override
        public FeatureSet getFeatures() {
            return (this.features_ == null) ? FeatureSet.getDefaultInstance() : this.features_;
        }
        
        @Override
        public FeatureSetOrBuilder getFeaturesOrBuilder() {
            return (this.features_ == null) ? FeatureSet.getDefaultInstance() : this.features_;
        }
        
        @Override
        public List<UninterpretedOption> getUninterpretedOptionList() {
            return this.uninterpretedOption_;
        }
        
        @Override
        public List<? extends UninterpretedOptionOrBuilder> getUninterpretedOptionOrBuilderList() {
            return this.uninterpretedOption_;
        }
        
        @Override
        public int getUninterpretedOptionCount() {
            return this.uninterpretedOption_.size();
        }
        
        @Override
        public UninterpretedOption getUninterpretedOption(final int index) {
            return this.uninterpretedOption_.get(index);
        }
        
        @Override
        public UninterpretedOptionOrBuilder getUninterpretedOptionOrBuilder(final int index) {
            return this.uninterpretedOption_.get(index);
        }
        
        @Override
        public final boolean isInitialized() {
            final byte isInitialized = this.memoizedIsInitialized;
            if (isInitialized == 1) {
                return true;
            }
            if (isInitialized == 0) {
                return false;
            }
            if (this.hasFeatures() && !this.getFeatures().isInitialized()) {
                this.memoizedIsInitialized = 0;
                return false;
            }
            for (int i = 0; i < this.getUninterpretedOptionCount(); ++i) {
                if (!this.getUninterpretedOption(i).isInitialized()) {
                    this.memoizedIsInitialized = 0;
                    return false;
                }
            }
            if (!this.extensionsAreInitialized()) {
                this.memoizedIsInitialized = 0;
                return false;
            }
            this.memoizedIsInitialized = 1;
            return true;
        }
        
        @Override
        public void writeTo(final CodedOutputStream output) throws IOException {
            final ExtensionSerializer extensionWriter = this.newExtensionSerializer();
            if ((this.bitField0_ & 0x1) != 0x0) {
                output.writeBool(33, this.deprecated_);
            }
            if ((this.bitField0_ & 0x2) != 0x0) {
                output.writeEnum(34, this.idempotencyLevel_);
            }
            if ((this.bitField0_ & 0x4) != 0x0) {
                output.writeMessage(35, this.getFeatures());
            }
            for (int i = 0; i < this.uninterpretedOption_.size(); ++i) {
                output.writeMessage(999, this.uninterpretedOption_.get(i));
            }
            extensionWriter.writeUntil(536870912, output);
            this.getUnknownFields().writeTo(output);
        }
        
        @Override
        public int getSerializedSize() {
            int size = this.memoizedSize;
            if (size != -1) {
                return size;
            }
            size = 0;
            if ((this.bitField0_ & 0x1) != 0x0) {
                size += CodedOutputStream.computeBoolSize(33, this.deprecated_);
            }
            if ((this.bitField0_ & 0x2) != 0x0) {
                size += CodedOutputStream.computeEnumSize(34, this.idempotencyLevel_);
            }
            if ((this.bitField0_ & 0x4) != 0x0) {
                size += CodedOutputStream.computeMessageSize(35, this.getFeatures());
            }
            for (int i = 0; i < this.uninterpretedOption_.size(); ++i) {
                size += CodedOutputStream.computeMessageSize(999, this.uninterpretedOption_.get(i));
            }
            size += this.extensionsSerializedSize();
            size += this.getUnknownFields().getSerializedSize();
            return this.memoizedSize = size;
        }
        
        @Override
        public boolean equals(final Object obj) {
            if (obj == this) {
                return true;
            }
            if (!(obj instanceof MethodOptions)) {
                return super.equals(obj);
            }
            final MethodOptions other = (MethodOptions)obj;
            return this.hasDeprecated() == other.hasDeprecated() && (!this.hasDeprecated() || this.getDeprecated() == other.getDeprecated()) && this.hasIdempotencyLevel() == other.hasIdempotencyLevel() && (!this.hasIdempotencyLevel() || this.idempotencyLevel_ == other.idempotencyLevel_) && this.hasFeatures() == other.hasFeatures() && (!this.hasFeatures() || this.getFeatures().equals(other.getFeatures())) && this.getUninterpretedOptionList().equals(other.getUninterpretedOptionList()) && this.getUnknownFields().equals(other.getUnknownFields()) && this.getExtensionFields().equals(other.getExtensionFields());
        }
        
        @Override
        public int hashCode() {
            if (this.memoizedHashCode != 0) {
                return this.memoizedHashCode;
            }
            int hash = 41;
            hash = 19 * hash + getDescriptor().hashCode();
            if (this.hasDeprecated()) {
                hash = 37 * hash + 33;
                hash = 53 * hash + Internal.hashBoolean(this.getDeprecated());
            }
            if (this.hasIdempotencyLevel()) {
                hash = 37 * hash + 34;
                hash = 53 * hash + this.idempotencyLevel_;
            }
            if (this.hasFeatures()) {
                hash = 37 * hash + 35;
                hash = 53 * hash + this.getFeatures().hashCode();
            }
            if (this.getUninterpretedOptionCount() > 0) {
                hash = 37 * hash + 999;
                hash = 53 * hash + this.getUninterpretedOptionList().hashCode();
            }
            hash = AbstractMessage.hashFields(hash, this.getExtensionFields());
            hash = 29 * hash + this.getUnknownFields().hashCode();
            return this.memoizedHashCode = hash;
        }
        
        public static MethodOptions parseFrom(final ByteBuffer data) throws InvalidProtocolBufferException {
            return MethodOptions.PARSER.parseFrom(data);
        }
        
        public static MethodOptions parseFrom(final ByteBuffer data, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
            return MethodOptions.PARSER.parseFrom(data, extensionRegistry);
        }
        
        public static MethodOptions parseFrom(final ByteString data) throws InvalidProtocolBufferException {
            return MethodOptions.PARSER.parseFrom(data);
        }
        
        public static MethodOptions parseFrom(final ByteString data, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
            return MethodOptions.PARSER.parseFrom(data, extensionRegistry);
        }
        
        public static MethodOptions parseFrom(final byte[] data) throws InvalidProtocolBufferException {
            return MethodOptions.PARSER.parseFrom(data);
        }
        
        public static MethodOptions parseFrom(final byte[] data, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
            return MethodOptions.PARSER.parseFrom(data, extensionRegistry);
        }
        
        public static MethodOptions parseFrom(final InputStream input) throws IOException {
            return GeneratedMessage.parseWithIOException(MethodOptions.PARSER, input);
        }
        
        public static MethodOptions parseFrom(final InputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
            return GeneratedMessage.parseWithIOException(MethodOptions.PARSER, input, extensionRegistry);
        }
        
        public static MethodOptions parseDelimitedFrom(final InputStream input) throws IOException {
            return GeneratedMessage.parseDelimitedWithIOException(MethodOptions.PARSER, input);
        }
        
        public static MethodOptions parseDelimitedFrom(final InputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
            return GeneratedMessage.parseDelimitedWithIOException(MethodOptions.PARSER, input, extensionRegistry);
        }
        
        public static MethodOptions parseFrom(final CodedInputStream input) throws IOException {
            return GeneratedMessage.parseWithIOException(MethodOptions.PARSER, input);
        }
        
        public static MethodOptions parseFrom(final CodedInputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
            return GeneratedMessage.parseWithIOException(MethodOptions.PARSER, input, extensionRegistry);
        }
        
        @Override
        public Builder newBuilderForType() {
            return newBuilder();
        }
        
        public static Builder newBuilder() {
            return MethodOptions.DEFAULT_INSTANCE.toBuilder();
        }
        
        public static Builder newBuilder(final MethodOptions prototype) {
            return MethodOptions.DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
        }
        
        @Override
        public Builder toBuilder() {
            return (this == MethodOptions.DEFAULT_INSTANCE) ? new Builder() : new Builder().mergeFrom(this);
        }
        
        @Override
        protected Builder newBuilderForType(final BuilderParent parent) {
            final Builder builder = new Builder(parent);
            return builder;
        }
        
        public static MethodOptions getDefaultInstance() {
            return MethodOptions.DEFAULT_INSTANCE;
        }
        
        public static Parser<MethodOptions> parser() {
            return MethodOptions.PARSER;
        }
        
        @Override
        public Parser<MethodOptions> getParserForType() {
            return MethodOptions.PARSER;
        }
        
        @Override
        public MethodOptions getDefaultInstanceForType() {
            return MethodOptions.DEFAULT_INSTANCE;
        }
        
        static {
            RuntimeVersion.validateProtobufGencodeVersion(RuntimeVersion.RuntimeDomain.PUBLIC, 4, 33, 0, "", "MethodOptions");
            DEFAULT_INSTANCE = new MethodOptions();
            PARSER = new AbstractParser<MethodOptions>() {
                @Override
                public MethodOptions parsePartialFrom(final CodedInputStream input, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
                    final Builder builder = MethodOptions.newBuilder();
                    try {
                        builder.mergeFrom(input, extensionRegistry);
                    }
                    catch (final InvalidProtocolBufferException e) {
                        throw e.setUnfinishedMessage(builder.buildPartial());
                    }
                    catch (final UninitializedMessageException e2) {
                        throw e2.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
                    }
                    catch (final IOException e3) {
                        throw new InvalidProtocolBufferException(e3).setUnfinishedMessage(builder.buildPartial());
                    }
                    return builder.buildPartial();
                }
            };
        }
        
        public enum IdempotencyLevel implements ProtocolMessageEnum
        {
            IDEMPOTENCY_UNKNOWN(0), 
            NO_SIDE_EFFECTS(1), 
            IDEMPOTENT(2);
            
            public static final int IDEMPOTENCY_UNKNOWN_VALUE = 0;
            public static final int NO_SIDE_EFFECTS_VALUE = 1;
            public static final int IDEMPOTENT_VALUE = 2;
            private static final Internal.EnumLiteMap<IdempotencyLevel> internalValueMap;
            private static final IdempotencyLevel[] VALUES;
            private final int value;
            
            @Override
            public final int getNumber() {
                return this.value;
            }
            
            @Deprecated
            public static IdempotencyLevel valueOf(final int value) {
                return forNumber(value);
            }
            
            public static IdempotencyLevel forNumber(final int value) {
                switch (value) {
                    case 0: {
                        return IdempotencyLevel.IDEMPOTENCY_UNKNOWN;
                    }
                    case 1: {
                        return IdempotencyLevel.NO_SIDE_EFFECTS;
                    }
                    case 2: {
                        return IdempotencyLevel.IDEMPOTENT;
                    }
                    default: {
                        return null;
                    }
                }
            }
            
            public static Internal.EnumLiteMap<IdempotencyLevel> internalGetValueMap() {
                return IdempotencyLevel.internalValueMap;
            }
            
            @Override
            public final Descriptors.EnumValueDescriptor getValueDescriptor() {
                return getDescriptor().getValues().get(this.ordinal());
            }
            
            @Override
            public final Descriptors.EnumDescriptor getDescriptorForType() {
                return getDescriptor();
            }
            
            public static Descriptors.EnumDescriptor getDescriptor() {
                return MethodOptions.getDescriptor().getEnumTypes().get(0);
            }
            
            public static IdempotencyLevel valueOf(final Descriptors.EnumValueDescriptor desc) {
                if (desc.getType() != getDescriptor()) {
                    throw new IllegalArgumentException("EnumValueDescriptor is not for this type.");
                }
                return IdempotencyLevel.VALUES[desc.getIndex()];
            }
            
            private IdempotencyLevel(final int value) {
                this.value = value;
            }
            
            static {
                RuntimeVersion.validateProtobufGencodeVersion(RuntimeVersion.RuntimeDomain.PUBLIC, 4, 33, 0, "", "IdempotencyLevel");
                internalValueMap = new Internal.EnumLiteMap<IdempotencyLevel>() {
                    @Override
                    public IdempotencyLevel findValueByNumber(final int number) {
                        return IdempotencyLevel.forNumber(number);
                    }
                };
                VALUES = values();
            }
        }
        
        public static final class Builder extends ExtendableBuilder<MethodOptions, Builder> implements MethodOptionsOrBuilder
        {
            private int bitField0_;
            private boolean deprecated_;
            private int idempotencyLevel_;
            private FeatureSet features_;
            private SingleFieldBuilder<FeatureSet, FeatureSet.Builder, FeatureSetOrBuilder> featuresBuilder_;
            private List<UninterpretedOption> uninterpretedOption_;
            private RepeatedFieldBuilder<UninterpretedOption, UninterpretedOption.Builder, UninterpretedOptionOrBuilder> uninterpretedOptionBuilder_;
            
            public static final Descriptors.Descriptor getDescriptor() {
                return DescriptorProtos.internal_static_google_protobuf_MethodOptions_descriptor;
            }
            
            @Override
            protected FieldAccessorTable internalGetFieldAccessorTable() {
                return DescriptorProtos.internal_static_google_protobuf_MethodOptions_fieldAccessorTable.ensureFieldAccessorsInitialized(MethodOptions.class, Builder.class);
            }
            
            private Builder() {
                this.idempotencyLevel_ = 0;
                this.uninterpretedOption_ = Collections.emptyList();
                this.maybeForceBuilderInitialization();
            }
            
            private Builder(final BuilderParent parent) {
                super(parent);
                this.idempotencyLevel_ = 0;
                this.uninterpretedOption_ = Collections.emptyList();
                this.maybeForceBuilderInitialization();
            }
            
            private void maybeForceBuilderInitialization() {
                if (GeneratedMessage.alwaysUseFieldBuilders) {
                    this.internalGetFeaturesFieldBuilder();
                    this.internalGetUninterpretedOptionFieldBuilder();
                }
            }
            
            @Override
            public Builder clear() {
                super.clear();
                this.bitField0_ = 0;
                this.deprecated_ = false;
                this.idempotencyLevel_ = 0;
                this.features_ = null;
                if (this.featuresBuilder_ != null) {
                    this.featuresBuilder_.dispose();
                    this.featuresBuilder_ = null;
                }
                if (this.uninterpretedOptionBuilder_ == null) {
                    this.uninterpretedOption_ = Collections.emptyList();
                }
                else {
                    this.uninterpretedOption_ = null;
                    this.uninterpretedOptionBuilder_.clear();
                }
                this.bitField0_ &= 0xFFFFFFF7;
                return this;
            }
            
            @Override
            public Descriptors.Descriptor getDescriptorForType() {
                return DescriptorProtos.internal_static_google_protobuf_MethodOptions_descriptor;
            }
            
            @Override
            public MethodOptions getDefaultInstanceForType() {
                return MethodOptions.getDefaultInstance();
            }
            
            @Override
            public MethodOptions build() {
                final MethodOptions result = this.buildPartial();
                if (!result.isInitialized()) {
                    throw AbstractMessage.Builder.newUninitializedMessageException(result);
                }
                return result;
            }
            
            @Override
            public MethodOptions buildPartial() {
                final MethodOptions result = new MethodOptions((ExtendableBuilder)this);
                this.buildPartialRepeatedFields(result);
                if (this.bitField0_ != 0) {
                    this.buildPartial0(result);
                }
                this.onBuilt();
                return result;
            }
            
            private void buildPartialRepeatedFields(final MethodOptions result) {
                if (this.uninterpretedOptionBuilder_ == null) {
                    if ((this.bitField0_ & 0x8) != 0x0) {
                        this.uninterpretedOption_ = Collections.unmodifiableList((List<? extends UninterpretedOption>)this.uninterpretedOption_);
                        this.bitField0_ &= 0xFFFFFFF7;
                    }
                    result.uninterpretedOption_ = this.uninterpretedOption_;
                }
                else {
                    result.uninterpretedOption_ = this.uninterpretedOptionBuilder_.build();
                }
            }
            
            private void buildPartial0(final MethodOptions result) {
                final int from_bitField0_ = this.bitField0_;
                int to_bitField0_ = 0;
                if ((from_bitField0_ & 0x1) != 0x0) {
                    result.deprecated_ = this.deprecated_;
                    to_bitField0_ |= 0x1;
                }
                if ((from_bitField0_ & 0x2) != 0x0) {
                    result.idempotencyLevel_ = this.idempotencyLevel_;
                    to_bitField0_ |= 0x2;
                }
                if ((from_bitField0_ & 0x4) != 0x0) {
                    result.features_ = ((this.featuresBuilder_ == null) ? this.features_ : this.featuresBuilder_.build());
                    to_bitField0_ |= 0x4;
                }
                result.bitField0_ |= to_bitField0_;
            }
            
            public <Type> Builder setExtension(final GeneratedExtension<MethodOptions, Type> extension, final Type value) {
                return super.setExtension(extension, value);
            }
            
            public <Type> Builder setExtension(final GeneratedExtension<MethodOptions, List<Type>> extension, final int index, final Type value) {
                return super.setExtension(extension, index, value);
            }
            
            public <Type> Builder addExtension(final GeneratedExtension<MethodOptions, List<Type>> extension, final Type value) {
                return super.addExtension(extension, value);
            }
            
            public <Type> Builder clearExtension(final GeneratedExtension<MethodOptions, Type> extension) {
                return super.clearExtension(extension);
            }
            
            @Override
            public Builder mergeFrom(final Message other) {
                if (other instanceof MethodOptions) {
                    return this.mergeFrom((MethodOptions)other);
                }
                super.mergeFrom(other);
                return this;
            }
            
            public Builder mergeFrom(final MethodOptions other) {
                if (other == MethodOptions.getDefaultInstance()) {
                    return this;
                }
                if (other.hasDeprecated()) {
                    this.setDeprecated(other.getDeprecated());
                }
                if (other.hasIdempotencyLevel()) {
                    this.setIdempotencyLevel(other.getIdempotencyLevel());
                }
                if (other.hasFeatures()) {
                    this.mergeFeatures(other.getFeatures());
                }
                if (this.uninterpretedOptionBuilder_ == null) {
                    if (!other.uninterpretedOption_.isEmpty()) {
                        if (this.uninterpretedOption_.isEmpty()) {
                            this.uninterpretedOption_ = other.uninterpretedOption_;
                            this.bitField0_ &= 0xFFFFFFF7;
                        }
                        else {
                            this.ensureUninterpretedOptionIsMutable();
                            this.uninterpretedOption_.addAll(other.uninterpretedOption_);
                        }
                        this.onChanged();
                    }
                }
                else if (!other.uninterpretedOption_.isEmpty()) {
                    if (this.uninterpretedOptionBuilder_.isEmpty()) {
                        this.uninterpretedOptionBuilder_.dispose();
                        this.uninterpretedOptionBuilder_ = null;
                        this.uninterpretedOption_ = other.uninterpretedOption_;
                        this.bitField0_ &= 0xFFFFFFF7;
                        this.uninterpretedOptionBuilder_ = (GeneratedMessage.alwaysUseFieldBuilders ? this.internalGetUninterpretedOptionFieldBuilder() : null);
                    }
                    else {
                        this.uninterpretedOptionBuilder_.addAllMessages(other.uninterpretedOption_);
                    }
                }
                this.mergeExtensionFields(other);
                this.mergeUnknownFields(other.getUnknownFields());
                this.onChanged();
                return this;
            }
            
            @Override
            public final boolean isInitialized() {
                if (this.hasFeatures() && !this.getFeatures().isInitialized()) {
                    return false;
                }
                for (int i = 0; i < this.getUninterpretedOptionCount(); ++i) {
                    if (!this.getUninterpretedOption(i).isInitialized()) {
                        return false;
                    }
                }
                return this.extensionsAreInitialized();
            }
            
            @Override
            public Builder mergeFrom(final CodedInputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
                if (extensionRegistry == null) {
                    throw new NullPointerException();
                }
                try {
                    boolean done = false;
                    while (!done) {
                        final int tag = input.readTag();
                        switch (tag) {
                            case 0: {
                                done = true;
                                continue;
                            }
                            case 264: {
                                this.deprecated_ = input.readBool();
                                this.bitField0_ |= 0x1;
                                continue;
                            }
                            case 272: {
                                final int tmpRaw = input.readEnum();
                                final IdempotencyLevel tmpValue = IdempotencyLevel.forNumber(tmpRaw);
                                if (tmpValue == null) {
                                    this.mergeUnknownVarintField(34, tmpRaw);
                                    continue;
                                }
                                this.idempotencyLevel_ = tmpRaw;
                                this.bitField0_ |= 0x2;
                                continue;
                            }
                            case 282: {
                                input.readMessage(this.internalGetFeaturesFieldBuilder().getBuilder(), extensionRegistry);
                                this.bitField0_ |= 0x4;
                                continue;
                            }
                            case 7994: {
                                final UninterpretedOption m = input.readMessage(UninterpretedOption.parser(), extensionRegistry);
                                if (this.uninterpretedOptionBuilder_ == null) {
                                    this.ensureUninterpretedOptionIsMutable();
                                    this.uninterpretedOption_.add(m);
                                    continue;
                                }
                                this.uninterpretedOptionBuilder_.addMessage(m);
                                continue;
                            }
                            default: {
                                if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                                    done = true;
                                    continue;
                                }
                                continue;
                            }
                        }
                    }
                }
                catch (final InvalidProtocolBufferException e) {
                    throw e.unwrapIOException();
                }
                finally {
                    this.onChanged();
                }
                return this;
            }
            
            @Override
            public boolean hasDeprecated() {
                return (this.bitField0_ & 0x1) != 0x0;
            }
            
            @Override
            public boolean getDeprecated() {
                return this.deprecated_;
            }
            
            public Builder setDeprecated(final boolean value) {
                this.deprecated_ = value;
                this.bitField0_ |= 0x1;
                this.onChanged();
                return this;
            }
            
            public Builder clearDeprecated() {
                this.bitField0_ &= 0xFFFFFFFE;
                this.deprecated_ = false;
                this.onChanged();
                return this;
            }
            
            @Override
            public boolean hasIdempotencyLevel() {
                return (this.bitField0_ & 0x2) != 0x0;
            }
            
            @Override
            public IdempotencyLevel getIdempotencyLevel() {
                final IdempotencyLevel result = IdempotencyLevel.forNumber(this.idempotencyLevel_);
                return (result == null) ? IdempotencyLevel.IDEMPOTENCY_UNKNOWN : result;
            }
            
            public Builder setIdempotencyLevel(final IdempotencyLevel value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                this.bitField0_ |= 0x2;
                this.idempotencyLevel_ = value.getNumber();
                this.onChanged();
                return this;
            }
            
            public Builder clearIdempotencyLevel() {
                this.bitField0_ &= 0xFFFFFFFD;
                this.idempotencyLevel_ = 0;
                this.onChanged();
                return this;
            }
            
            @Override
            public boolean hasFeatures() {
                return (this.bitField0_ & 0x4) != 0x0;
            }
            
            @Override
            public FeatureSet getFeatures() {
                if (this.featuresBuilder_ == null) {
                    return (this.features_ == null) ? FeatureSet.getDefaultInstance() : this.features_;
                }
                return this.featuresBuilder_.getMessage();
            }
            
            public Builder setFeatures(final FeatureSet value) {
                if (this.featuresBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.features_ = value;
                }
                else {
                    this.featuresBuilder_.setMessage(value);
                }
                this.bitField0_ |= 0x4;
                this.onChanged();
                return this;
            }
            
            public Builder setFeatures(final FeatureSet.Builder builderForValue) {
                if (this.featuresBuilder_ == null) {
                    this.features_ = builderForValue.build();
                }
                else {
                    this.featuresBuilder_.setMessage(builderForValue.build());
                }
                this.bitField0_ |= 0x4;
                this.onChanged();
                return this;
            }
            
            public Builder mergeFeatures(final FeatureSet value) {
                if (this.featuresBuilder_ == null) {
                    if ((this.bitField0_ & 0x4) != 0x0 && this.features_ != null && this.features_ != FeatureSet.getDefaultInstance()) {
                        this.getFeaturesBuilder().mergeFrom(value);
                    }
                    else {
                        this.features_ = value;
                    }
                }
                else {
                    this.featuresBuilder_.mergeFrom(value);
                }
                if (this.features_ != null) {
                    this.bitField0_ |= 0x4;
                    this.onChanged();
                }
                return this;
            }
            
            public Builder clearFeatures() {
                this.bitField0_ &= 0xFFFFFFFB;
                this.features_ = null;
                if (this.featuresBuilder_ != null) {
                    this.featuresBuilder_.dispose();
                    this.featuresBuilder_ = null;
                }
                this.onChanged();
                return this;
            }
            
            public FeatureSet.Builder getFeaturesBuilder() {
                this.bitField0_ |= 0x4;
                this.onChanged();
                return this.internalGetFeaturesFieldBuilder().getBuilder();
            }
            
            @Override
            public FeatureSetOrBuilder getFeaturesOrBuilder() {
                if (this.featuresBuilder_ != null) {
                    return this.featuresBuilder_.getMessageOrBuilder();
                }
                return (this.features_ == null) ? FeatureSet.getDefaultInstance() : this.features_;
            }
            
            private SingleFieldBuilder<FeatureSet, FeatureSet.Builder, FeatureSetOrBuilder> internalGetFeaturesFieldBuilder() {
                if (this.featuresBuilder_ == null) {
                    this.featuresBuilder_ = new SingleFieldBuilder<FeatureSet, FeatureSet.Builder, FeatureSetOrBuilder>(this.getFeatures(), this.getParentForChildren(), this.isClean());
                    this.features_ = null;
                }
                return this.featuresBuilder_;
            }
            
            private void ensureUninterpretedOptionIsMutable() {
                if ((this.bitField0_ & 0x8) == 0x0) {
                    this.uninterpretedOption_ = new ArrayList<UninterpretedOption>(this.uninterpretedOption_);
                    this.bitField0_ |= 0x8;
                }
            }
            
            @Override
            public List<UninterpretedOption> getUninterpretedOptionList() {
                if (this.uninterpretedOptionBuilder_ == null) {
                    return Collections.unmodifiableList((List<? extends UninterpretedOption>)this.uninterpretedOption_);
                }
                return this.uninterpretedOptionBuilder_.getMessageList();
            }
            
            @Override
            public int getUninterpretedOptionCount() {
                if (this.uninterpretedOptionBuilder_ == null) {
                    return this.uninterpretedOption_.size();
                }
                return this.uninterpretedOptionBuilder_.getCount();
            }
            
            @Override
            public UninterpretedOption getUninterpretedOption(final int index) {
                if (this.uninterpretedOptionBuilder_ == null) {
                    return this.uninterpretedOption_.get(index);
                }
                return this.uninterpretedOptionBuilder_.getMessage(index);
            }
            
            public Builder setUninterpretedOption(final int index, final UninterpretedOption value) {
                if (this.uninterpretedOptionBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.ensureUninterpretedOptionIsMutable();
                    this.uninterpretedOption_.set(index, value);
                    this.onChanged();
                }
                else {
                    this.uninterpretedOptionBuilder_.setMessage(index, value);
                }
                return this;
            }
            
            public Builder setUninterpretedOption(final int index, final UninterpretedOption.Builder builderForValue) {
                if (this.uninterpretedOptionBuilder_ == null) {
                    this.ensureUninterpretedOptionIsMutable();
                    this.uninterpretedOption_.set(index, builderForValue.build());
                    this.onChanged();
                }
                else {
                    this.uninterpretedOptionBuilder_.setMessage(index, builderForValue.build());
                }
                return this;
            }
            
            public Builder addUninterpretedOption(final UninterpretedOption value) {
                if (this.uninterpretedOptionBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.ensureUninterpretedOptionIsMutable();
                    this.uninterpretedOption_.add(value);
                    this.onChanged();
                }
                else {
                    this.uninterpretedOptionBuilder_.addMessage(value);
                }
                return this;
            }
            
            public Builder addUninterpretedOption(final int index, final UninterpretedOption value) {
                if (this.uninterpretedOptionBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.ensureUninterpretedOptionIsMutable();
                    this.uninterpretedOption_.add(index, value);
                    this.onChanged();
                }
                else {
                    this.uninterpretedOptionBuilder_.addMessage(index, value);
                }
                return this;
            }
            
            public Builder addUninterpretedOption(final UninterpretedOption.Builder builderForValue) {
                if (this.uninterpretedOptionBuilder_ == null) {
                    this.ensureUninterpretedOptionIsMutable();
                    this.uninterpretedOption_.add(builderForValue.build());
                    this.onChanged();
                }
                else {
                    this.uninterpretedOptionBuilder_.addMessage(builderForValue.build());
                }
                return this;
            }
            
            public Builder addUninterpretedOption(final int index, final UninterpretedOption.Builder builderForValue) {
                if (this.uninterpretedOptionBuilder_ == null) {
                    this.ensureUninterpretedOptionIsMutable();
                    this.uninterpretedOption_.add(index, builderForValue.build());
                    this.onChanged();
                }
                else {
                    this.uninterpretedOptionBuilder_.addMessage(index, builderForValue.build());
                }
                return this;
            }
            
            public Builder addAllUninterpretedOption(final Iterable<? extends UninterpretedOption> values) {
                if (this.uninterpretedOptionBuilder_ == null) {
                    this.ensureUninterpretedOptionIsMutable();
                    AbstractMessageLite.Builder.addAll(values, this.uninterpretedOption_);
                    this.onChanged();
                }
                else {
                    this.uninterpretedOptionBuilder_.addAllMessages(values);
                }
                return this;
            }
            
            public Builder clearUninterpretedOption() {
                if (this.uninterpretedOptionBuilder_ == null) {
                    this.uninterpretedOption_ = Collections.emptyList();
                    this.bitField0_ &= 0xFFFFFFF7;
                    this.onChanged();
                }
                else {
                    this.uninterpretedOptionBuilder_.clear();
                }
                return this;
            }
            
            public Builder removeUninterpretedOption(final int index) {
                if (this.uninterpretedOptionBuilder_ == null) {
                    this.ensureUninterpretedOptionIsMutable();
                    this.uninterpretedOption_.remove(index);
                    this.onChanged();
                }
                else {
                    this.uninterpretedOptionBuilder_.remove(index);
                }
                return this;
            }
            
            public UninterpretedOption.Builder getUninterpretedOptionBuilder(final int index) {
                return this.internalGetUninterpretedOptionFieldBuilder().getBuilder(index);
            }
            
            @Override
            public UninterpretedOptionOrBuilder getUninterpretedOptionOrBuilder(final int index) {
                if (this.uninterpretedOptionBuilder_ == null) {
                    return this.uninterpretedOption_.get(index);
                }
                return this.uninterpretedOptionBuilder_.getMessageOrBuilder(index);
            }
            
            @Override
            public List<? extends UninterpretedOptionOrBuilder> getUninterpretedOptionOrBuilderList() {
                if (this.uninterpretedOptionBuilder_ != null) {
                    return this.uninterpretedOptionBuilder_.getMessageOrBuilderList();
                }
                return Collections.unmodifiableList((List<? extends UninterpretedOptionOrBuilder>)this.uninterpretedOption_);
            }
            
            public UninterpretedOption.Builder addUninterpretedOptionBuilder() {
                return this.internalGetUninterpretedOptionFieldBuilder().addBuilder(UninterpretedOption.getDefaultInstance());
            }
            
            public UninterpretedOption.Builder addUninterpretedOptionBuilder(final int index) {
                return this.internalGetUninterpretedOptionFieldBuilder().addBuilder(index, UninterpretedOption.getDefaultInstance());
            }
            
            public List<UninterpretedOption.Builder> getUninterpretedOptionBuilderList() {
                return this.internalGetUninterpretedOptionFieldBuilder().getBuilderList();
            }
            
            private RepeatedFieldBuilder<UninterpretedOption, UninterpretedOption.Builder, UninterpretedOptionOrBuilder> internalGetUninterpretedOptionFieldBuilder() {
                if (this.uninterpretedOptionBuilder_ == null) {
                    this.uninterpretedOptionBuilder_ = new RepeatedFieldBuilder<UninterpretedOption, UninterpretedOption.Builder, UninterpretedOptionOrBuilder>(this.uninterpretedOption_, (this.bitField0_ & 0x8) != 0x0, this.getParentForChildren(), this.isClean());
                    this.uninterpretedOption_ = null;
                }
                return this.uninterpretedOptionBuilder_;
            }
        }
    }
    
    public static final class UninterpretedOption extends GeneratedMessage implements UninterpretedOptionOrBuilder
    {
        private static final long serialVersionUID = 0L;
        private int bitField0_;
        public static final int NAME_FIELD_NUMBER = 2;
        private List<NamePart> name_;
        public static final int IDENTIFIER_VALUE_FIELD_NUMBER = 3;
        private volatile Object identifierValue_;
        public static final int POSITIVE_INT_VALUE_FIELD_NUMBER = 4;
        private long positiveIntValue_;
        public static final int NEGATIVE_INT_VALUE_FIELD_NUMBER = 5;
        private long negativeIntValue_;
        public static final int DOUBLE_VALUE_FIELD_NUMBER = 6;
        private double doubleValue_;
        public static final int STRING_VALUE_FIELD_NUMBER = 7;
        private ByteString stringValue_;
        public static final int AGGREGATE_VALUE_FIELD_NUMBER = 8;
        private volatile Object aggregateValue_;
        private byte memoizedIsInitialized;
        private static final UninterpretedOption DEFAULT_INSTANCE;
        private static final Parser<UninterpretedOption> PARSER;
        
        private UninterpretedOption(final GeneratedMessage.Builder<?> builder) {
            super(builder);
            this.identifierValue_ = "";
            this.positiveIntValue_ = 0L;
            this.negativeIntValue_ = 0L;
            this.doubleValue_ = 0.0;
            this.stringValue_ = ByteString.EMPTY;
            this.aggregateValue_ = "";
            this.memoizedIsInitialized = -1;
        }
        
        private UninterpretedOption() {
            this.identifierValue_ = "";
            this.positiveIntValue_ = 0L;
            this.negativeIntValue_ = 0L;
            this.doubleValue_ = 0.0;
            this.stringValue_ = ByteString.EMPTY;
            this.aggregateValue_ = "";
            this.memoizedIsInitialized = -1;
            this.name_ = Collections.emptyList();
            this.identifierValue_ = "";
            this.stringValue_ = ByteString.EMPTY;
            this.aggregateValue_ = "";
        }
        
        public static final Descriptors.Descriptor getDescriptor() {
            return DescriptorProtos.internal_static_google_protobuf_UninterpretedOption_descriptor;
        }
        
        @Override
        protected FieldAccessorTable internalGetFieldAccessorTable() {
            return DescriptorProtos.internal_static_google_protobuf_UninterpretedOption_fieldAccessorTable.ensureFieldAccessorsInitialized(UninterpretedOption.class, Builder.class);
        }
        
        @Override
        public List<NamePart> getNameList() {
            return this.name_;
        }
        
        @Override
        public List<? extends NamePartOrBuilder> getNameOrBuilderList() {
            return this.name_;
        }
        
        @Override
        public int getNameCount() {
            return this.name_.size();
        }
        
        @Override
        public NamePart getName(final int index) {
            return this.name_.get(index);
        }
        
        @Override
        public NamePartOrBuilder getNameOrBuilder(final int index) {
            return this.name_.get(index);
        }
        
        @Override
        public boolean hasIdentifierValue() {
            return (this.bitField0_ & 0x1) != 0x0;
        }
        
        @Override
        public String getIdentifierValue() {
            final Object ref = this.identifierValue_;
            if (ref instanceof String) {
                return (String)ref;
            }
            final ByteString bs = (ByteString)ref;
            final String s = bs.toStringUtf8();
            if (bs.isValidUtf8()) {
                this.identifierValue_ = s;
            }
            return s;
        }
        
        @Override
        public ByteString getIdentifierValueBytes() {
            final Object ref = this.identifierValue_;
            if (ref instanceof String) {
                final ByteString b = ByteString.copyFromUtf8((String)ref);
                return (ByteString)(this.identifierValue_ = b);
            }
            return (ByteString)ref;
        }
        
        @Override
        public boolean hasPositiveIntValue() {
            return (this.bitField0_ & 0x2) != 0x0;
        }
        
        @Override
        public long getPositiveIntValue() {
            return this.positiveIntValue_;
        }
        
        @Override
        public boolean hasNegativeIntValue() {
            return (this.bitField0_ & 0x4) != 0x0;
        }
        
        @Override
        public long getNegativeIntValue() {
            return this.negativeIntValue_;
        }
        
        @Override
        public boolean hasDoubleValue() {
            return (this.bitField0_ & 0x8) != 0x0;
        }
        
        @Override
        public double getDoubleValue() {
            return this.doubleValue_;
        }
        
        @Override
        public boolean hasStringValue() {
            return (this.bitField0_ & 0x10) != 0x0;
        }
        
        @Override
        public ByteString getStringValue() {
            return this.stringValue_;
        }
        
        @Override
        public boolean hasAggregateValue() {
            return (this.bitField0_ & 0x20) != 0x0;
        }
        
        @Override
        public String getAggregateValue() {
            final Object ref = this.aggregateValue_;
            if (ref instanceof String) {
                return (String)ref;
            }
            final ByteString bs = (ByteString)ref;
            final String s = bs.toStringUtf8();
            if (bs.isValidUtf8()) {
                this.aggregateValue_ = s;
            }
            return s;
        }
        
        @Override
        public ByteString getAggregateValueBytes() {
            final Object ref = this.aggregateValue_;
            if (ref instanceof String) {
                final ByteString b = ByteString.copyFromUtf8((String)ref);
                return (ByteString)(this.aggregateValue_ = b);
            }
            return (ByteString)ref;
        }
        
        @Override
        public final boolean isInitialized() {
            final byte isInitialized = this.memoizedIsInitialized;
            if (isInitialized == 1) {
                return true;
            }
            if (isInitialized == 0) {
                return false;
            }
            for (int i = 0; i < this.getNameCount(); ++i) {
                if (!this.getName(i).isInitialized()) {
                    this.memoizedIsInitialized = 0;
                    return false;
                }
            }
            this.memoizedIsInitialized = 1;
            return true;
        }
        
        @Override
        public void writeTo(final CodedOutputStream output) throws IOException {
            for (int i = 0; i < this.name_.size(); ++i) {
                output.writeMessage(2, this.name_.get(i));
            }
            if ((this.bitField0_ & 0x1) != 0x0) {
                GeneratedMessage.writeString(output, 3, this.identifierValue_);
            }
            if ((this.bitField0_ & 0x2) != 0x0) {
                output.writeUInt64(4, this.positiveIntValue_);
            }
            if ((this.bitField0_ & 0x4) != 0x0) {
                output.writeInt64(5, this.negativeIntValue_);
            }
            if ((this.bitField0_ & 0x8) != 0x0) {
                output.writeDouble(6, this.doubleValue_);
            }
            if ((this.bitField0_ & 0x10) != 0x0) {
                output.writeBytes(7, this.stringValue_);
            }
            if ((this.bitField0_ & 0x20) != 0x0) {
                GeneratedMessage.writeString(output, 8, this.aggregateValue_);
            }
            this.getUnknownFields().writeTo(output);
        }
        
        @Override
        public int getSerializedSize() {
            int size = this.memoizedSize;
            if (size != -1) {
                return size;
            }
            size = 0;
            for (int i = 0; i < this.name_.size(); ++i) {
                size += CodedOutputStream.computeMessageSize(2, this.name_.get(i));
            }
            if ((this.bitField0_ & 0x1) != 0x0) {
                size += GeneratedMessage.computeStringSize(3, this.identifierValue_);
            }
            if ((this.bitField0_ & 0x2) != 0x0) {
                size += CodedOutputStream.computeUInt64Size(4, this.positiveIntValue_);
            }
            if ((this.bitField0_ & 0x4) != 0x0) {
                size += CodedOutputStream.computeInt64Size(5, this.negativeIntValue_);
            }
            if ((this.bitField0_ & 0x8) != 0x0) {
                size += CodedOutputStream.computeDoubleSize(6, this.doubleValue_);
            }
            if ((this.bitField0_ & 0x10) != 0x0) {
                size += CodedOutputStream.computeBytesSize(7, this.stringValue_);
            }
            if ((this.bitField0_ & 0x20) != 0x0) {
                size += GeneratedMessage.computeStringSize(8, this.aggregateValue_);
            }
            size += this.getUnknownFields().getSerializedSize();
            return this.memoizedSize = size;
        }
        
        @Override
        public boolean equals(final Object obj) {
            if (obj == this) {
                return true;
            }
            if (!(obj instanceof UninterpretedOption)) {
                return super.equals(obj);
            }
            final UninterpretedOption other = (UninterpretedOption)obj;
            return this.getNameList().equals(other.getNameList()) && this.hasIdentifierValue() == other.hasIdentifierValue() && (!this.hasIdentifierValue() || this.getIdentifierValue().equals(other.getIdentifierValue())) && this.hasPositiveIntValue() == other.hasPositiveIntValue() && (!this.hasPositiveIntValue() || this.getPositiveIntValue() == other.getPositiveIntValue()) && this.hasNegativeIntValue() == other.hasNegativeIntValue() && (!this.hasNegativeIntValue() || this.getNegativeIntValue() == other.getNegativeIntValue()) && this.hasDoubleValue() == other.hasDoubleValue() && (!this.hasDoubleValue() || Double.doubleToLongBits(this.getDoubleValue()) == Double.doubleToLongBits(other.getDoubleValue())) && this.hasStringValue() == other.hasStringValue() && (!this.hasStringValue() || this.getStringValue().equals(other.getStringValue())) && this.hasAggregateValue() == other.hasAggregateValue() && (!this.hasAggregateValue() || this.getAggregateValue().equals(other.getAggregateValue())) && this.getUnknownFields().equals(other.getUnknownFields());
        }
        
        @Override
        public int hashCode() {
            if (this.memoizedHashCode != 0) {
                return this.memoizedHashCode;
            }
            int hash = 41;
            hash = 19 * hash + getDescriptor().hashCode();
            if (this.getNameCount() > 0) {
                hash = 37 * hash + 2;
                hash = 53 * hash + this.getNameList().hashCode();
            }
            if (this.hasIdentifierValue()) {
                hash = 37 * hash + 3;
                hash = 53 * hash + this.getIdentifierValue().hashCode();
            }
            if (this.hasPositiveIntValue()) {
                hash = 37 * hash + 4;
                hash = 53 * hash + Internal.hashLong(this.getPositiveIntValue());
            }
            if (this.hasNegativeIntValue()) {
                hash = 37 * hash + 5;
                hash = 53 * hash + Internal.hashLong(this.getNegativeIntValue());
            }
            if (this.hasDoubleValue()) {
                hash = 37 * hash + 6;
                hash = 53 * hash + Internal.hashLong(Double.doubleToLongBits(this.getDoubleValue()));
            }
            if (this.hasStringValue()) {
                hash = 37 * hash + 7;
                hash = 53 * hash + this.getStringValue().hashCode();
            }
            if (this.hasAggregateValue()) {
                hash = 37 * hash + 8;
                hash = 53 * hash + this.getAggregateValue().hashCode();
            }
            hash = 29 * hash + this.getUnknownFields().hashCode();
            return this.memoizedHashCode = hash;
        }
        
        public static UninterpretedOption parseFrom(final ByteBuffer data) throws InvalidProtocolBufferException {
            return UninterpretedOption.PARSER.parseFrom(data);
        }
        
        public static UninterpretedOption parseFrom(final ByteBuffer data, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
            return UninterpretedOption.PARSER.parseFrom(data, extensionRegistry);
        }
        
        public static UninterpretedOption parseFrom(final ByteString data) throws InvalidProtocolBufferException {
            return UninterpretedOption.PARSER.parseFrom(data);
        }
        
        public static UninterpretedOption parseFrom(final ByteString data, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
            return UninterpretedOption.PARSER.parseFrom(data, extensionRegistry);
        }
        
        public static UninterpretedOption parseFrom(final byte[] data) throws InvalidProtocolBufferException {
            return UninterpretedOption.PARSER.parseFrom(data);
        }
        
        public static UninterpretedOption parseFrom(final byte[] data, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
            return UninterpretedOption.PARSER.parseFrom(data, extensionRegistry);
        }
        
        public static UninterpretedOption parseFrom(final InputStream input) throws IOException {
            return GeneratedMessage.parseWithIOException(UninterpretedOption.PARSER, input);
        }
        
        public static UninterpretedOption parseFrom(final InputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
            return GeneratedMessage.parseWithIOException(UninterpretedOption.PARSER, input, extensionRegistry);
        }
        
        public static UninterpretedOption parseDelimitedFrom(final InputStream input) throws IOException {
            return GeneratedMessage.parseDelimitedWithIOException(UninterpretedOption.PARSER, input);
        }
        
        public static UninterpretedOption parseDelimitedFrom(final InputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
            return GeneratedMessage.parseDelimitedWithIOException(UninterpretedOption.PARSER, input, extensionRegistry);
        }
        
        public static UninterpretedOption parseFrom(final CodedInputStream input) throws IOException {
            return GeneratedMessage.parseWithIOException(UninterpretedOption.PARSER, input);
        }
        
        public static UninterpretedOption parseFrom(final CodedInputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
            return GeneratedMessage.parseWithIOException(UninterpretedOption.PARSER, input, extensionRegistry);
        }
        
        @Override
        public Builder newBuilderForType() {
            return newBuilder();
        }
        
        public static Builder newBuilder() {
            return UninterpretedOption.DEFAULT_INSTANCE.toBuilder();
        }
        
        public static Builder newBuilder(final UninterpretedOption prototype) {
            return UninterpretedOption.DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
        }
        
        @Override
        public Builder toBuilder() {
            return (this == UninterpretedOption.DEFAULT_INSTANCE) ? new Builder() : new Builder().mergeFrom(this);
        }
        
        @Override
        protected Builder newBuilderForType(final BuilderParent parent) {
            final Builder builder = new Builder(parent);
            return builder;
        }
        
        public static UninterpretedOption getDefaultInstance() {
            return UninterpretedOption.DEFAULT_INSTANCE;
        }
        
        public static Parser<UninterpretedOption> parser() {
            return UninterpretedOption.PARSER;
        }
        
        @Override
        public Parser<UninterpretedOption> getParserForType() {
            return UninterpretedOption.PARSER;
        }
        
        @Override
        public UninterpretedOption getDefaultInstanceForType() {
            return UninterpretedOption.DEFAULT_INSTANCE;
        }
        
        static {
            RuntimeVersion.validateProtobufGencodeVersion(RuntimeVersion.RuntimeDomain.PUBLIC, 4, 33, 0, "", "UninterpretedOption");
            DEFAULT_INSTANCE = new UninterpretedOption();
            PARSER = new AbstractParser<UninterpretedOption>() {
                @Override
                public UninterpretedOption parsePartialFrom(final CodedInputStream input, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
                    final Builder builder = UninterpretedOption.newBuilder();
                    try {
                        builder.mergeFrom(input, extensionRegistry);
                    }
                    catch (final InvalidProtocolBufferException e) {
                        throw e.setUnfinishedMessage(builder.buildPartial());
                    }
                    catch (final UninitializedMessageException e2) {
                        throw e2.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
                    }
                    catch (final IOException e3) {
                        throw new InvalidProtocolBufferException(e3).setUnfinishedMessage(builder.buildPartial());
                    }
                    return builder.buildPartial();
                }
            };
        }
        
        public static final class NamePart extends GeneratedMessage implements NamePartOrBuilder
        {
            private static final long serialVersionUID = 0L;
            private int bitField0_;
            public static final int NAME_PART_FIELD_NUMBER = 1;
            private volatile Object namePart_;
            public static final int IS_EXTENSION_FIELD_NUMBER = 2;
            private boolean isExtension_;
            private byte memoizedIsInitialized;
            private static final NamePart DEFAULT_INSTANCE;
            private static final Parser<NamePart> PARSER;
            
            private NamePart(final GeneratedMessage.Builder<?> builder) {
                super(builder);
                this.namePart_ = "";
                this.isExtension_ = false;
                this.memoizedIsInitialized = -1;
            }
            
            private NamePart() {
                this.namePart_ = "";
                this.isExtension_ = false;
                this.memoizedIsInitialized = -1;
                this.namePart_ = "";
            }
            
            public static final Descriptors.Descriptor getDescriptor() {
                return DescriptorProtos.internal_static_google_protobuf_UninterpretedOption_NamePart_descriptor;
            }
            
            @Override
            protected FieldAccessorTable internalGetFieldAccessorTable() {
                return DescriptorProtos.internal_static_google_protobuf_UninterpretedOption_NamePart_fieldAccessorTable.ensureFieldAccessorsInitialized(NamePart.class, Builder.class);
            }
            
            @Override
            public boolean hasNamePart() {
                return (this.bitField0_ & 0x1) != 0x0;
            }
            
            @Override
            public String getNamePart() {
                final Object ref = this.namePart_;
                if (ref instanceof String) {
                    return (String)ref;
                }
                final ByteString bs = (ByteString)ref;
                final String s = bs.toStringUtf8();
                if (bs.isValidUtf8()) {
                    this.namePart_ = s;
                }
                return s;
            }
            
            @Override
            public ByteString getNamePartBytes() {
                final Object ref = this.namePart_;
                if (ref instanceof String) {
                    final ByteString b = ByteString.copyFromUtf8((String)ref);
                    return (ByteString)(this.namePart_ = b);
                }
                return (ByteString)ref;
            }
            
            @Override
            public boolean hasIsExtension() {
                return (this.bitField0_ & 0x2) != 0x0;
            }
            
            @Override
            public boolean getIsExtension() {
                return this.isExtension_;
            }
            
            @Override
            public final boolean isInitialized() {
                final byte isInitialized = this.memoizedIsInitialized;
                if (isInitialized == 1) {
                    return true;
                }
                if (isInitialized == 0) {
                    return false;
                }
                if (!this.hasNamePart()) {
                    this.memoizedIsInitialized = 0;
                    return false;
                }
                if (!this.hasIsExtension()) {
                    this.memoizedIsInitialized = 0;
                    return false;
                }
                this.memoizedIsInitialized = 1;
                return true;
            }
            
            @Override
            public void writeTo(final CodedOutputStream output) throws IOException {
                if ((this.bitField0_ & 0x1) != 0x0) {
                    GeneratedMessage.writeString(output, 1, this.namePart_);
                }
                if ((this.bitField0_ & 0x2) != 0x0) {
                    output.writeBool(2, this.isExtension_);
                }
                this.getUnknownFields().writeTo(output);
            }
            
            @Override
            public int getSerializedSize() {
                int size = this.memoizedSize;
                if (size != -1) {
                    return size;
                }
                size = 0;
                if ((this.bitField0_ & 0x1) != 0x0) {
                    size += GeneratedMessage.computeStringSize(1, this.namePart_);
                }
                if ((this.bitField0_ & 0x2) != 0x0) {
                    size += CodedOutputStream.computeBoolSize(2, this.isExtension_);
                }
                size += this.getUnknownFields().getSerializedSize();
                return this.memoizedSize = size;
            }
            
            @Override
            public boolean equals(final Object obj) {
                if (obj == this) {
                    return true;
                }
                if (!(obj instanceof NamePart)) {
                    return super.equals(obj);
                }
                final NamePart other = (NamePart)obj;
                return this.hasNamePart() == other.hasNamePart() && (!this.hasNamePart() || this.getNamePart().equals(other.getNamePart())) && this.hasIsExtension() == other.hasIsExtension() && (!this.hasIsExtension() || this.getIsExtension() == other.getIsExtension()) && this.getUnknownFields().equals(other.getUnknownFields());
            }
            
            @Override
            public int hashCode() {
                if (this.memoizedHashCode != 0) {
                    return this.memoizedHashCode;
                }
                int hash = 41;
                hash = 19 * hash + getDescriptor().hashCode();
                if (this.hasNamePart()) {
                    hash = 37 * hash + 1;
                    hash = 53 * hash + this.getNamePart().hashCode();
                }
                if (this.hasIsExtension()) {
                    hash = 37 * hash + 2;
                    hash = 53 * hash + Internal.hashBoolean(this.getIsExtension());
                }
                hash = 29 * hash + this.getUnknownFields().hashCode();
                return this.memoizedHashCode = hash;
            }
            
            public static NamePart parseFrom(final ByteBuffer data) throws InvalidProtocolBufferException {
                return NamePart.PARSER.parseFrom(data);
            }
            
            public static NamePart parseFrom(final ByteBuffer data, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
                return NamePart.PARSER.parseFrom(data, extensionRegistry);
            }
            
            public static NamePart parseFrom(final ByteString data) throws InvalidProtocolBufferException {
                return NamePart.PARSER.parseFrom(data);
            }
            
            public static NamePart parseFrom(final ByteString data, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
                return NamePart.PARSER.parseFrom(data, extensionRegistry);
            }
            
            public static NamePart parseFrom(final byte[] data) throws InvalidProtocolBufferException {
                return NamePart.PARSER.parseFrom(data);
            }
            
            public static NamePart parseFrom(final byte[] data, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
                return NamePart.PARSER.parseFrom(data, extensionRegistry);
            }
            
            public static NamePart parseFrom(final InputStream input) throws IOException {
                return GeneratedMessage.parseWithIOException(NamePart.PARSER, input);
            }
            
            public static NamePart parseFrom(final InputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
                return GeneratedMessage.parseWithIOException(NamePart.PARSER, input, extensionRegistry);
            }
            
            public static NamePart parseDelimitedFrom(final InputStream input) throws IOException {
                return GeneratedMessage.parseDelimitedWithIOException(NamePart.PARSER, input);
            }
            
            public static NamePart parseDelimitedFrom(final InputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
                return GeneratedMessage.parseDelimitedWithIOException(NamePart.PARSER, input, extensionRegistry);
            }
            
            public static NamePart parseFrom(final CodedInputStream input) throws IOException {
                return GeneratedMessage.parseWithIOException(NamePart.PARSER, input);
            }
            
            public static NamePart parseFrom(final CodedInputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
                return GeneratedMessage.parseWithIOException(NamePart.PARSER, input, extensionRegistry);
            }
            
            @Override
            public Builder newBuilderForType() {
                return newBuilder();
            }
            
            public static Builder newBuilder() {
                return NamePart.DEFAULT_INSTANCE.toBuilder();
            }
            
            public static Builder newBuilder(final NamePart prototype) {
                return NamePart.DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
            }
            
            @Override
            public Builder toBuilder() {
                return (this == NamePart.DEFAULT_INSTANCE) ? new Builder() : new Builder().mergeFrom(this);
            }
            
            @Override
            protected Builder newBuilderForType(final BuilderParent parent) {
                final Builder builder = new Builder(parent);
                return builder;
            }
            
            public static NamePart getDefaultInstance() {
                return NamePart.DEFAULT_INSTANCE;
            }
            
            public static Parser<NamePart> parser() {
                return NamePart.PARSER;
            }
            
            @Override
            public Parser<NamePart> getParserForType() {
                return NamePart.PARSER;
            }
            
            @Override
            public NamePart getDefaultInstanceForType() {
                return NamePart.DEFAULT_INSTANCE;
            }
            
            static {
                RuntimeVersion.validateProtobufGencodeVersion(RuntimeVersion.RuntimeDomain.PUBLIC, 4, 33, 0, "", "NamePart");
                DEFAULT_INSTANCE = new NamePart();
                PARSER = new AbstractParser<NamePart>() {
                    @Override
                    public NamePart parsePartialFrom(final CodedInputStream input, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
                        final Builder builder = NamePart.newBuilder();
                        try {
                            builder.mergeFrom(input, extensionRegistry);
                        }
                        catch (final InvalidProtocolBufferException e) {
                            throw e.setUnfinishedMessage(builder.buildPartial());
                        }
                        catch (final UninitializedMessageException e2) {
                            throw e2.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
                        }
                        catch (final IOException e3) {
                            throw new InvalidProtocolBufferException(e3).setUnfinishedMessage(builder.buildPartial());
                        }
                        return builder.buildPartial();
                    }
                };
            }
            
            public static final class Builder extends GeneratedMessage.Builder<Builder> implements NamePartOrBuilder
            {
                private int bitField0_;
                private Object namePart_;
                private boolean isExtension_;
                
                public static final Descriptors.Descriptor getDescriptor() {
                    return DescriptorProtos.internal_static_google_protobuf_UninterpretedOption_NamePart_descriptor;
                }
                
                @Override
                protected FieldAccessorTable internalGetFieldAccessorTable() {
                    return DescriptorProtos.internal_static_google_protobuf_UninterpretedOption_NamePart_fieldAccessorTable.ensureFieldAccessorsInitialized(NamePart.class, Builder.class);
                }
                
                private Builder() {
                    this.namePart_ = "";
                }
                
                private Builder(final BuilderParent parent) {
                    super(parent);
                    this.namePart_ = "";
                }
                
                @Override
                public Builder clear() {
                    super.clear();
                    this.bitField0_ = 0;
                    this.namePart_ = "";
                    this.isExtension_ = false;
                    return this;
                }
                
                @Override
                public Descriptors.Descriptor getDescriptorForType() {
                    return DescriptorProtos.internal_static_google_protobuf_UninterpretedOption_NamePart_descriptor;
                }
                
                @Override
                public NamePart getDefaultInstanceForType() {
                    return NamePart.getDefaultInstance();
                }
                
                @Override
                public NamePart build() {
                    final NamePart result = this.buildPartial();
                    if (!result.isInitialized()) {
                        throw AbstractMessage.Builder.newUninitializedMessageException(result);
                    }
                    return result;
                }
                
                @Override
                public NamePart buildPartial() {
                    final NamePart result = new NamePart((GeneratedMessage.Builder)this);
                    if (this.bitField0_ != 0) {
                        this.buildPartial0(result);
                    }
                    this.onBuilt();
                    return result;
                }
                
                private void buildPartial0(final NamePart result) {
                    final int from_bitField0_ = this.bitField0_;
                    int to_bitField0_ = 0;
                    if ((from_bitField0_ & 0x1) != 0x0) {
                        result.namePart_ = this.namePart_;
                        to_bitField0_ |= 0x1;
                    }
                    if ((from_bitField0_ & 0x2) != 0x0) {
                        result.isExtension_ = this.isExtension_;
                        to_bitField0_ |= 0x2;
                    }
                    result.bitField0_ |= to_bitField0_;
                }
                
                @Override
                public Builder mergeFrom(final Message other) {
                    if (other instanceof NamePart) {
                        return this.mergeFrom((NamePart)other);
                    }
                    super.mergeFrom(other);
                    return this;
                }
                
                public Builder mergeFrom(final NamePart other) {
                    if (other == NamePart.getDefaultInstance()) {
                        return this;
                    }
                    if (other.hasNamePart()) {
                        this.namePart_ = other.namePart_;
                        this.bitField0_ |= 0x1;
                        this.onChanged();
                    }
                    if (other.hasIsExtension()) {
                        this.setIsExtension(other.getIsExtension());
                    }
                    this.mergeUnknownFields(other.getUnknownFields());
                    this.onChanged();
                    return this;
                }
                
                @Override
                public final boolean isInitialized() {
                    return this.hasNamePart() && this.hasIsExtension();
                }
                
                @Override
                public Builder mergeFrom(final CodedInputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
                    if (extensionRegistry == null) {
                        throw new NullPointerException();
                    }
                    try {
                        boolean done = false;
                        while (!done) {
                            final int tag = input.readTag();
                            switch (tag) {
                                case 0: {
                                    done = true;
                                    continue;
                                }
                                case 10: {
                                    this.namePart_ = input.readBytes();
                                    this.bitField0_ |= 0x1;
                                    continue;
                                }
                                case 16: {
                                    this.isExtension_ = input.readBool();
                                    this.bitField0_ |= 0x2;
                                    continue;
                                }
                                default: {
                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                                        done = true;
                                        continue;
                                    }
                                    continue;
                                }
                            }
                        }
                    }
                    catch (final InvalidProtocolBufferException e) {
                        throw e.unwrapIOException();
                    }
                    finally {
                        this.onChanged();
                    }
                    return this;
                }
                
                @Override
                public boolean hasNamePart() {
                    return (this.bitField0_ & 0x1) != 0x0;
                }
                
                @Override
                public String getNamePart() {
                    final Object ref = this.namePart_;
                    if (!(ref instanceof String)) {
                        final ByteString bs = (ByteString)ref;
                        final String s = bs.toStringUtf8();
                        if (bs.isValidUtf8()) {
                            this.namePart_ = s;
                        }
                        return s;
                    }
                    return (String)ref;
                }
                
                @Override
                public ByteString getNamePartBytes() {
                    final Object ref = this.namePart_;
                    if (ref instanceof String) {
                        final ByteString b = ByteString.copyFromUtf8((String)ref);
                        return (ByteString)(this.namePart_ = b);
                    }
                    return (ByteString)ref;
                }
                
                public Builder setNamePart(final String value) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.namePart_ = value;
                    this.bitField0_ |= 0x1;
                    this.onChanged();
                    return this;
                }
                
                public Builder clearNamePart() {
                    this.namePart_ = NamePart.getDefaultInstance().getNamePart();
                    this.bitField0_ &= 0xFFFFFFFE;
                    this.onChanged();
                    return this;
                }
                
                public Builder setNamePartBytes(final ByteString value) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.namePart_ = value;
                    this.bitField0_ |= 0x1;
                    this.onChanged();
                    return this;
                }
                
                @Override
                public boolean hasIsExtension() {
                    return (this.bitField0_ & 0x2) != 0x0;
                }
                
                @Override
                public boolean getIsExtension() {
                    return this.isExtension_;
                }
                
                public Builder setIsExtension(final boolean value) {
                    this.isExtension_ = value;
                    this.bitField0_ |= 0x2;
                    this.onChanged();
                    return this;
                }
                
                public Builder clearIsExtension() {
                    this.bitField0_ &= 0xFFFFFFFD;
                    this.isExtension_ = false;
                    this.onChanged();
                    return this;
                }
            }
        }
        
        public static final class Builder extends GeneratedMessage.Builder<Builder> implements UninterpretedOptionOrBuilder
        {
            private int bitField0_;
            private List<NamePart> name_;
            private RepeatedFieldBuilder<NamePart, NamePart.Builder, NamePartOrBuilder> nameBuilder_;
            private Object identifierValue_;
            private long positiveIntValue_;
            private long negativeIntValue_;
            private double doubleValue_;
            private ByteString stringValue_;
            private Object aggregateValue_;
            
            public static final Descriptors.Descriptor getDescriptor() {
                return DescriptorProtos.internal_static_google_protobuf_UninterpretedOption_descriptor;
            }
            
            @Override
            protected FieldAccessorTable internalGetFieldAccessorTable() {
                return DescriptorProtos.internal_static_google_protobuf_UninterpretedOption_fieldAccessorTable.ensureFieldAccessorsInitialized(UninterpretedOption.class, Builder.class);
            }
            
            private Builder() {
                this.name_ = Collections.emptyList();
                this.identifierValue_ = "";
                this.stringValue_ = ByteString.EMPTY;
                this.aggregateValue_ = "";
            }
            
            private Builder(final BuilderParent parent) {
                super(parent);
                this.name_ = Collections.emptyList();
                this.identifierValue_ = "";
                this.stringValue_ = ByteString.EMPTY;
                this.aggregateValue_ = "";
            }
            
            @Override
            public Builder clear() {
                super.clear();
                this.bitField0_ = 0;
                if (this.nameBuilder_ == null) {
                    this.name_ = Collections.emptyList();
                }
                else {
                    this.name_ = null;
                    this.nameBuilder_.clear();
                }
                this.bitField0_ &= 0xFFFFFFFE;
                this.identifierValue_ = "";
                this.positiveIntValue_ = 0L;
                this.negativeIntValue_ = 0L;
                this.doubleValue_ = 0.0;
                this.stringValue_ = ByteString.EMPTY;
                this.aggregateValue_ = "";
                return this;
            }
            
            @Override
            public Descriptors.Descriptor getDescriptorForType() {
                return DescriptorProtos.internal_static_google_protobuf_UninterpretedOption_descriptor;
            }
            
            @Override
            public UninterpretedOption getDefaultInstanceForType() {
                return UninterpretedOption.getDefaultInstance();
            }
            
            @Override
            public UninterpretedOption build() {
                final UninterpretedOption result = this.buildPartial();
                if (!result.isInitialized()) {
                    throw AbstractMessage.Builder.newUninitializedMessageException(result);
                }
                return result;
            }
            
            @Override
            public UninterpretedOption buildPartial() {
                final UninterpretedOption result = new UninterpretedOption((GeneratedMessage.Builder)this);
                this.buildPartialRepeatedFields(result);
                if (this.bitField0_ != 0) {
                    this.buildPartial0(result);
                }
                this.onBuilt();
                return result;
            }
            
            private void buildPartialRepeatedFields(final UninterpretedOption result) {
                if (this.nameBuilder_ == null) {
                    if ((this.bitField0_ & 0x1) != 0x0) {
                        this.name_ = Collections.unmodifiableList((List<? extends NamePart>)this.name_);
                        this.bitField0_ &= 0xFFFFFFFE;
                    }
                    result.name_ = this.name_;
                }
                else {
                    result.name_ = this.nameBuilder_.build();
                }
            }
            
            private void buildPartial0(final UninterpretedOption result) {
                final int from_bitField0_ = this.bitField0_;
                int to_bitField0_ = 0;
                if ((from_bitField0_ & 0x2) != 0x0) {
                    result.identifierValue_ = this.identifierValue_;
                    to_bitField0_ |= 0x1;
                }
                if ((from_bitField0_ & 0x4) != 0x0) {
                    result.positiveIntValue_ = this.positiveIntValue_;
                    to_bitField0_ |= 0x2;
                }
                if ((from_bitField0_ & 0x8) != 0x0) {
                    result.negativeIntValue_ = this.negativeIntValue_;
                    to_bitField0_ |= 0x4;
                }
                if ((from_bitField0_ & 0x10) != 0x0) {
                    result.doubleValue_ = this.doubleValue_;
                    to_bitField0_ |= 0x8;
                }
                if ((from_bitField0_ & 0x20) != 0x0) {
                    result.stringValue_ = this.stringValue_;
                    to_bitField0_ |= 0x10;
                }
                if ((from_bitField0_ & 0x40) != 0x0) {
                    result.aggregateValue_ = this.aggregateValue_;
                    to_bitField0_ |= 0x20;
                }
                result.bitField0_ |= to_bitField0_;
            }
            
            @Override
            public Builder mergeFrom(final Message other) {
                if (other instanceof UninterpretedOption) {
                    return this.mergeFrom((UninterpretedOption)other);
                }
                super.mergeFrom(other);
                return this;
            }
            
            public Builder mergeFrom(final UninterpretedOption other) {
                if (other == UninterpretedOption.getDefaultInstance()) {
                    return this;
                }
                if (this.nameBuilder_ == null) {
                    if (!other.name_.isEmpty()) {
                        if (this.name_.isEmpty()) {
                            this.name_ = other.name_;
                            this.bitField0_ &= 0xFFFFFFFE;
                        }
                        else {
                            this.ensureNameIsMutable();
                            this.name_.addAll(other.name_);
                        }
                        this.onChanged();
                    }
                }
                else if (!other.name_.isEmpty()) {
                    if (this.nameBuilder_.isEmpty()) {
                        this.nameBuilder_.dispose();
                        this.nameBuilder_ = null;
                        this.name_ = other.name_;
                        this.bitField0_ &= 0xFFFFFFFE;
                        this.nameBuilder_ = (GeneratedMessage.alwaysUseFieldBuilders ? this.internalGetNameFieldBuilder() : null);
                    }
                    else {
                        this.nameBuilder_.addAllMessages(other.name_);
                    }
                }
                if (other.hasIdentifierValue()) {
                    this.identifierValue_ = other.identifierValue_;
                    this.bitField0_ |= 0x2;
                    this.onChanged();
                }
                if (other.hasPositiveIntValue()) {
                    this.setPositiveIntValue(other.getPositiveIntValue());
                }
                if (other.hasNegativeIntValue()) {
                    this.setNegativeIntValue(other.getNegativeIntValue());
                }
                if (other.hasDoubleValue()) {
                    this.setDoubleValue(other.getDoubleValue());
                }
                if (other.hasStringValue()) {
                    this.setStringValue(other.getStringValue());
                }
                if (other.hasAggregateValue()) {
                    this.aggregateValue_ = other.aggregateValue_;
                    this.bitField0_ |= 0x40;
                    this.onChanged();
                }
                this.mergeUnknownFields(other.getUnknownFields());
                this.onChanged();
                return this;
            }
            
            @Override
            public final boolean isInitialized() {
                for (int i = 0; i < this.getNameCount(); ++i) {
                    if (!this.getName(i).isInitialized()) {
                        return false;
                    }
                }
                return true;
            }
            
            @Override
            public Builder mergeFrom(final CodedInputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
                if (extensionRegistry == null) {
                    throw new NullPointerException();
                }
                try {
                    boolean done = false;
                    while (!done) {
                        final int tag = input.readTag();
                        switch (tag) {
                            case 0: {
                                done = true;
                                continue;
                            }
                            case 18: {
                                final NamePart m = input.readMessage(NamePart.parser(), extensionRegistry);
                                if (this.nameBuilder_ == null) {
                                    this.ensureNameIsMutable();
                                    this.name_.add(m);
                                    continue;
                                }
                                this.nameBuilder_.addMessage(m);
                                continue;
                            }
                            case 26: {
                                this.identifierValue_ = input.readBytes();
                                this.bitField0_ |= 0x2;
                                continue;
                            }
                            case 32: {
                                this.positiveIntValue_ = input.readUInt64();
                                this.bitField0_ |= 0x4;
                                continue;
                            }
                            case 40: {
                                this.negativeIntValue_ = input.readInt64();
                                this.bitField0_ |= 0x8;
                                continue;
                            }
                            case 49: {
                                this.doubleValue_ = input.readDouble();
                                this.bitField0_ |= 0x10;
                                continue;
                            }
                            case 58: {
                                this.stringValue_ = input.readBytes();
                                this.bitField0_ |= 0x20;
                                continue;
                            }
                            case 66: {
                                this.aggregateValue_ = input.readBytes();
                                this.bitField0_ |= 0x40;
                                continue;
                            }
                            default: {
                                if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                                    done = true;
                                    continue;
                                }
                                continue;
                            }
                        }
                    }
                }
                catch (final InvalidProtocolBufferException e) {
                    throw e.unwrapIOException();
                }
                finally {
                    this.onChanged();
                }
                return this;
            }
            
            private void ensureNameIsMutable() {
                if ((this.bitField0_ & 0x1) == 0x0) {
                    this.name_ = new ArrayList<NamePart>(this.name_);
                    this.bitField0_ |= 0x1;
                }
            }
            
            @Override
            public List<NamePart> getNameList() {
                if (this.nameBuilder_ == null) {
                    return Collections.unmodifiableList((List<? extends NamePart>)this.name_);
                }
                return this.nameBuilder_.getMessageList();
            }
            
            @Override
            public int getNameCount() {
                if (this.nameBuilder_ == null) {
                    return this.name_.size();
                }
                return this.nameBuilder_.getCount();
            }
            
            @Override
            public NamePart getName(final int index) {
                if (this.nameBuilder_ == null) {
                    return this.name_.get(index);
                }
                return this.nameBuilder_.getMessage(index);
            }
            
            public Builder setName(final int index, final NamePart value) {
                if (this.nameBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.ensureNameIsMutable();
                    this.name_.set(index, value);
                    this.onChanged();
                }
                else {
                    this.nameBuilder_.setMessage(index, value);
                }
                return this;
            }
            
            public Builder setName(final int index, final NamePart.Builder builderForValue) {
                if (this.nameBuilder_ == null) {
                    this.ensureNameIsMutable();
                    this.name_.set(index, builderForValue.build());
                    this.onChanged();
                }
                else {
                    this.nameBuilder_.setMessage(index, builderForValue.build());
                }
                return this;
            }
            
            public Builder addName(final NamePart value) {
                if (this.nameBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.ensureNameIsMutable();
                    this.name_.add(value);
                    this.onChanged();
                }
                else {
                    this.nameBuilder_.addMessage(value);
                }
                return this;
            }
            
            public Builder addName(final int index, final NamePart value) {
                if (this.nameBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.ensureNameIsMutable();
                    this.name_.add(index, value);
                    this.onChanged();
                }
                else {
                    this.nameBuilder_.addMessage(index, value);
                }
                return this;
            }
            
            public Builder addName(final NamePart.Builder builderForValue) {
                if (this.nameBuilder_ == null) {
                    this.ensureNameIsMutable();
                    this.name_.add(builderForValue.build());
                    this.onChanged();
                }
                else {
                    this.nameBuilder_.addMessage(builderForValue.build());
                }
                return this;
            }
            
            public Builder addName(final int index, final NamePart.Builder builderForValue) {
                if (this.nameBuilder_ == null) {
                    this.ensureNameIsMutable();
                    this.name_.add(index, builderForValue.build());
                    this.onChanged();
                }
                else {
                    this.nameBuilder_.addMessage(index, builderForValue.build());
                }
                return this;
            }
            
            public Builder addAllName(final Iterable<? extends NamePart> values) {
                if (this.nameBuilder_ == null) {
                    this.ensureNameIsMutable();
                    AbstractMessageLite.Builder.addAll(values, this.name_);
                    this.onChanged();
                }
                else {
                    this.nameBuilder_.addAllMessages(values);
                }
                return this;
            }
            
            public Builder clearName() {
                if (this.nameBuilder_ == null) {
                    this.name_ = Collections.emptyList();
                    this.bitField0_ &= 0xFFFFFFFE;
                    this.onChanged();
                }
                else {
                    this.nameBuilder_.clear();
                }
                return this;
            }
            
            public Builder removeName(final int index) {
                if (this.nameBuilder_ == null) {
                    this.ensureNameIsMutable();
                    this.name_.remove(index);
                    this.onChanged();
                }
                else {
                    this.nameBuilder_.remove(index);
                }
                return this;
            }
            
            public NamePart.Builder getNameBuilder(final int index) {
                return this.internalGetNameFieldBuilder().getBuilder(index);
            }
            
            @Override
            public NamePartOrBuilder getNameOrBuilder(final int index) {
                if (this.nameBuilder_ == null) {
                    return this.name_.get(index);
                }
                return this.nameBuilder_.getMessageOrBuilder(index);
            }
            
            @Override
            public List<? extends NamePartOrBuilder> getNameOrBuilderList() {
                if (this.nameBuilder_ != null) {
                    return this.nameBuilder_.getMessageOrBuilderList();
                }
                return Collections.unmodifiableList((List<? extends NamePartOrBuilder>)this.name_);
            }
            
            public NamePart.Builder addNameBuilder() {
                return this.internalGetNameFieldBuilder().addBuilder(NamePart.getDefaultInstance());
            }
            
            public NamePart.Builder addNameBuilder(final int index) {
                return this.internalGetNameFieldBuilder().addBuilder(index, NamePart.getDefaultInstance());
            }
            
            public List<NamePart.Builder> getNameBuilderList() {
                return this.internalGetNameFieldBuilder().getBuilderList();
            }
            
            private RepeatedFieldBuilder<NamePart, NamePart.Builder, NamePartOrBuilder> internalGetNameFieldBuilder() {
                if (this.nameBuilder_ == null) {
                    this.nameBuilder_ = new RepeatedFieldBuilder<NamePart, NamePart.Builder, NamePartOrBuilder>(this.name_, (this.bitField0_ & 0x1) != 0x0, this.getParentForChildren(), this.isClean());
                    this.name_ = null;
                }
                return this.nameBuilder_;
            }
            
            @Override
            public boolean hasIdentifierValue() {
                return (this.bitField0_ & 0x2) != 0x0;
            }
            
            @Override
            public String getIdentifierValue() {
                final Object ref = this.identifierValue_;
                if (!(ref instanceof String)) {
                    final ByteString bs = (ByteString)ref;
                    final String s = bs.toStringUtf8();
                    if (bs.isValidUtf8()) {
                        this.identifierValue_ = s;
                    }
                    return s;
                }
                return (String)ref;
            }
            
            @Override
            public ByteString getIdentifierValueBytes() {
                final Object ref = this.identifierValue_;
                if (ref instanceof String) {
                    final ByteString b = ByteString.copyFromUtf8((String)ref);
                    return (ByteString)(this.identifierValue_ = b);
                }
                return (ByteString)ref;
            }
            
            public Builder setIdentifierValue(final String value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                this.identifierValue_ = value;
                this.bitField0_ |= 0x2;
                this.onChanged();
                return this;
            }
            
            public Builder clearIdentifierValue() {
                this.identifierValue_ = UninterpretedOption.getDefaultInstance().getIdentifierValue();
                this.bitField0_ &= 0xFFFFFFFD;
                this.onChanged();
                return this;
            }
            
            public Builder setIdentifierValueBytes(final ByteString value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                this.identifierValue_ = value;
                this.bitField0_ |= 0x2;
                this.onChanged();
                return this;
            }
            
            @Override
            public boolean hasPositiveIntValue() {
                return (this.bitField0_ & 0x4) != 0x0;
            }
            
            @Override
            public long getPositiveIntValue() {
                return this.positiveIntValue_;
            }
            
            public Builder setPositiveIntValue(final long value) {
                this.positiveIntValue_ = value;
                this.bitField0_ |= 0x4;
                this.onChanged();
                return this;
            }
            
            public Builder clearPositiveIntValue() {
                this.bitField0_ &= 0xFFFFFFFB;
                this.positiveIntValue_ = 0L;
                this.onChanged();
                return this;
            }
            
            @Override
            public boolean hasNegativeIntValue() {
                return (this.bitField0_ & 0x8) != 0x0;
            }
            
            @Override
            public long getNegativeIntValue() {
                return this.negativeIntValue_;
            }
            
            public Builder setNegativeIntValue(final long value) {
                this.negativeIntValue_ = value;
                this.bitField0_ |= 0x8;
                this.onChanged();
                return this;
            }
            
            public Builder clearNegativeIntValue() {
                this.bitField0_ &= 0xFFFFFFF7;
                this.negativeIntValue_ = 0L;
                this.onChanged();
                return this;
            }
            
            @Override
            public boolean hasDoubleValue() {
                return (this.bitField0_ & 0x10) != 0x0;
            }
            
            @Override
            public double getDoubleValue() {
                return this.doubleValue_;
            }
            
            public Builder setDoubleValue(final double value) {
                this.doubleValue_ = value;
                this.bitField0_ |= 0x10;
                this.onChanged();
                return this;
            }
            
            public Builder clearDoubleValue() {
                this.bitField0_ &= 0xFFFFFFEF;
                this.doubleValue_ = 0.0;
                this.onChanged();
                return this;
            }
            
            @Override
            public boolean hasStringValue() {
                return (this.bitField0_ & 0x20) != 0x0;
            }
            
            @Override
            public ByteString getStringValue() {
                return this.stringValue_;
            }
            
            public Builder setStringValue(final ByteString value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                this.stringValue_ = value;
                this.bitField0_ |= 0x20;
                this.onChanged();
                return this;
            }
            
            public Builder clearStringValue() {
                this.bitField0_ &= 0xFFFFFFDF;
                this.stringValue_ = UninterpretedOption.getDefaultInstance().getStringValue();
                this.onChanged();
                return this;
            }
            
            @Override
            public boolean hasAggregateValue() {
                return (this.bitField0_ & 0x40) != 0x0;
            }
            
            @Override
            public String getAggregateValue() {
                final Object ref = this.aggregateValue_;
                if (!(ref instanceof String)) {
                    final ByteString bs = (ByteString)ref;
                    final String s = bs.toStringUtf8();
                    if (bs.isValidUtf8()) {
                        this.aggregateValue_ = s;
                    }
                    return s;
                }
                return (String)ref;
            }
            
            @Override
            public ByteString getAggregateValueBytes() {
                final Object ref = this.aggregateValue_;
                if (ref instanceof String) {
                    final ByteString b = ByteString.copyFromUtf8((String)ref);
                    return (ByteString)(this.aggregateValue_ = b);
                }
                return (ByteString)ref;
            }
            
            public Builder setAggregateValue(final String value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                this.aggregateValue_ = value;
                this.bitField0_ |= 0x40;
                this.onChanged();
                return this;
            }
            
            public Builder clearAggregateValue() {
                this.aggregateValue_ = UninterpretedOption.getDefaultInstance().getAggregateValue();
                this.bitField0_ &= 0xFFFFFFBF;
                this.onChanged();
                return this;
            }
            
            public Builder setAggregateValueBytes(final ByteString value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                this.aggregateValue_ = value;
                this.bitField0_ |= 0x40;
                this.onChanged();
                return this;
            }
        }
        
        public interface NamePartOrBuilder extends MessageOrBuilder
        {
            boolean hasNamePart();
            
            String getNamePart();
            
            ByteString getNamePartBytes();
            
            boolean hasIsExtension();
            
            boolean getIsExtension();
        }
    }
    
    public static final class FeatureSet extends ExtendableMessage<FeatureSet> implements FeatureSetOrBuilder
    {
        private static final long serialVersionUID = 0L;
        private int bitField0_;
        public static final int FIELD_PRESENCE_FIELD_NUMBER = 1;
        private int fieldPresence_;
        public static final int ENUM_TYPE_FIELD_NUMBER = 2;
        private int enumType_;
        public static final int REPEATED_FIELD_ENCODING_FIELD_NUMBER = 3;
        private int repeatedFieldEncoding_;
        public static final int UTF8_VALIDATION_FIELD_NUMBER = 4;
        private int utf8Validation_;
        public static final int MESSAGE_ENCODING_FIELD_NUMBER = 5;
        private int messageEncoding_;
        public static final int JSON_FORMAT_FIELD_NUMBER = 6;
        private int jsonFormat_;
        public static final int ENFORCE_NAMING_STYLE_FIELD_NUMBER = 7;
        private int enforceNamingStyle_;
        public static final int DEFAULT_SYMBOL_VISIBILITY_FIELD_NUMBER = 8;
        private int defaultSymbolVisibility_;
        private byte memoizedIsInitialized;
        private static final FeatureSet DEFAULT_INSTANCE;
        private static final Parser<FeatureSet> PARSER;
        
        private FeatureSet(final ExtendableBuilder<FeatureSet, ?> builder) {
            super(builder);
            this.fieldPresence_ = 0;
            this.enumType_ = 0;
            this.repeatedFieldEncoding_ = 0;
            this.utf8Validation_ = 0;
            this.messageEncoding_ = 0;
            this.jsonFormat_ = 0;
            this.enforceNamingStyle_ = 0;
            this.defaultSymbolVisibility_ = 0;
            this.memoizedIsInitialized = -1;
        }
        
        private FeatureSet() {
            this.fieldPresence_ = 0;
            this.enumType_ = 0;
            this.repeatedFieldEncoding_ = 0;
            this.utf8Validation_ = 0;
            this.messageEncoding_ = 0;
            this.jsonFormat_ = 0;
            this.enforceNamingStyle_ = 0;
            this.defaultSymbolVisibility_ = 0;
            this.memoizedIsInitialized = -1;
            this.fieldPresence_ = 0;
            this.enumType_ = 0;
            this.repeatedFieldEncoding_ = 0;
            this.utf8Validation_ = 0;
            this.messageEncoding_ = 0;
            this.jsonFormat_ = 0;
            this.enforceNamingStyle_ = 0;
            this.defaultSymbolVisibility_ = 0;
        }
        
        public static final Descriptors.Descriptor getDescriptor() {
            return DescriptorProtos.internal_static_google_protobuf_FeatureSet_descriptor;
        }
        
        @Override
        protected FieldAccessorTable internalGetFieldAccessorTable() {
            return DescriptorProtos.internal_static_google_protobuf_FeatureSet_fieldAccessorTable.ensureFieldAccessorsInitialized(FeatureSet.class, Builder.class);
        }
        
        @Override
        public boolean hasFieldPresence() {
            return (this.bitField0_ & 0x1) != 0x0;
        }
        
        @Override
        public FieldPresence getFieldPresence() {
            final FieldPresence result = FieldPresence.forNumber(this.fieldPresence_);
            return (result == null) ? FieldPresence.FIELD_PRESENCE_UNKNOWN : result;
        }
        
        @Override
        public boolean hasEnumType() {
            return (this.bitField0_ & 0x2) != 0x0;
        }
        
        @Override
        public EnumType getEnumType() {
            final EnumType result = EnumType.forNumber(this.enumType_);
            return (result == null) ? EnumType.ENUM_TYPE_UNKNOWN : result;
        }
        
        @Override
        public boolean hasRepeatedFieldEncoding() {
            return (this.bitField0_ & 0x4) != 0x0;
        }
        
        @Override
        public RepeatedFieldEncoding getRepeatedFieldEncoding() {
            final RepeatedFieldEncoding result = RepeatedFieldEncoding.forNumber(this.repeatedFieldEncoding_);
            return (result == null) ? RepeatedFieldEncoding.REPEATED_FIELD_ENCODING_UNKNOWN : result;
        }
        
        @Override
        public boolean hasUtf8Validation() {
            return (this.bitField0_ & 0x8) != 0x0;
        }
        
        @Override
        public Utf8Validation getUtf8Validation() {
            final Utf8Validation result = Utf8Validation.forNumber(this.utf8Validation_);
            return (result == null) ? Utf8Validation.UTF8_VALIDATION_UNKNOWN : result;
        }
        
        @Override
        public boolean hasMessageEncoding() {
            return (this.bitField0_ & 0x10) != 0x0;
        }
        
        @Override
        public MessageEncoding getMessageEncoding() {
            final MessageEncoding result = MessageEncoding.forNumber(this.messageEncoding_);
            return (result == null) ? MessageEncoding.MESSAGE_ENCODING_UNKNOWN : result;
        }
        
        @Override
        public boolean hasJsonFormat() {
            return (this.bitField0_ & 0x20) != 0x0;
        }
        
        @Override
        public JsonFormat getJsonFormat() {
            final JsonFormat result = JsonFormat.forNumber(this.jsonFormat_);
            return (result == null) ? JsonFormat.JSON_FORMAT_UNKNOWN : result;
        }
        
        @Override
        public boolean hasEnforceNamingStyle() {
            return (this.bitField0_ & 0x40) != 0x0;
        }
        
        @Override
        public EnforceNamingStyle getEnforceNamingStyle() {
            final EnforceNamingStyle result = EnforceNamingStyle.forNumber(this.enforceNamingStyle_);
            return (result == null) ? EnforceNamingStyle.ENFORCE_NAMING_STYLE_UNKNOWN : result;
        }
        
        @Override
        public boolean hasDefaultSymbolVisibility() {
            return (this.bitField0_ & 0x80) != 0x0;
        }
        
        @Override
        public VisibilityFeature.DefaultSymbolVisibility getDefaultSymbolVisibility() {
            final VisibilityFeature.DefaultSymbolVisibility result = VisibilityFeature.DefaultSymbolVisibility.forNumber(this.defaultSymbolVisibility_);
            return (result == null) ? VisibilityFeature.DefaultSymbolVisibility.DEFAULT_SYMBOL_VISIBILITY_UNKNOWN : result;
        }
        
        @Override
        public final boolean isInitialized() {
            final byte isInitialized = this.memoizedIsInitialized;
            if (isInitialized == 1) {
                return true;
            }
            if (isInitialized == 0) {
                return false;
            }
            if (!this.extensionsAreInitialized()) {
                this.memoizedIsInitialized = 0;
                return false;
            }
            this.memoizedIsInitialized = 1;
            return true;
        }
        
        @Override
        public void writeTo(final CodedOutputStream output) throws IOException {
            final ExtensionSerializer extensionWriter = this.newExtensionSerializer();
            if ((this.bitField0_ & 0x1) != 0x0) {
                output.writeEnum(1, this.fieldPresence_);
            }
            if ((this.bitField0_ & 0x2) != 0x0) {
                output.writeEnum(2, this.enumType_);
            }
            if ((this.bitField0_ & 0x4) != 0x0) {
                output.writeEnum(3, this.repeatedFieldEncoding_);
            }
            if ((this.bitField0_ & 0x8) != 0x0) {
                output.writeEnum(4, this.utf8Validation_);
            }
            if ((this.bitField0_ & 0x10) != 0x0) {
                output.writeEnum(5, this.messageEncoding_);
            }
            if ((this.bitField0_ & 0x20) != 0x0) {
                output.writeEnum(6, this.jsonFormat_);
            }
            if ((this.bitField0_ & 0x40) != 0x0) {
                output.writeEnum(7, this.enforceNamingStyle_);
            }
            if ((this.bitField0_ & 0x80) != 0x0) {
                output.writeEnum(8, this.defaultSymbolVisibility_);
            }
            extensionWriter.writeUntil(10001, output);
            this.getUnknownFields().writeTo(output);
        }
        
        @Override
        public int getSerializedSize() {
            int size = this.memoizedSize;
            if (size != -1) {
                return size;
            }
            size = 0;
            if ((this.bitField0_ & 0x1) != 0x0) {
                size += CodedOutputStream.computeEnumSize(1, this.fieldPresence_);
            }
            if ((this.bitField0_ & 0x2) != 0x0) {
                size += CodedOutputStream.computeEnumSize(2, this.enumType_);
            }
            if ((this.bitField0_ & 0x4) != 0x0) {
                size += CodedOutputStream.computeEnumSize(3, this.repeatedFieldEncoding_);
            }
            if ((this.bitField0_ & 0x8) != 0x0) {
                size += CodedOutputStream.computeEnumSize(4, this.utf8Validation_);
            }
            if ((this.bitField0_ & 0x10) != 0x0) {
                size += CodedOutputStream.computeEnumSize(5, this.messageEncoding_);
            }
            if ((this.bitField0_ & 0x20) != 0x0) {
                size += CodedOutputStream.computeEnumSize(6, this.jsonFormat_);
            }
            if ((this.bitField0_ & 0x40) != 0x0) {
                size += CodedOutputStream.computeEnumSize(7, this.enforceNamingStyle_);
            }
            if ((this.bitField0_ & 0x80) != 0x0) {
                size += CodedOutputStream.computeEnumSize(8, this.defaultSymbolVisibility_);
            }
            size += this.extensionsSerializedSize();
            size += this.getUnknownFields().getSerializedSize();
            return this.memoizedSize = size;
        }
        
        @Override
        public boolean equals(final Object obj) {
            if (obj == this) {
                return true;
            }
            if (!(obj instanceof FeatureSet)) {
                return super.equals(obj);
            }
            final FeatureSet other = (FeatureSet)obj;
            return this.hasFieldPresence() == other.hasFieldPresence() && (!this.hasFieldPresence() || this.fieldPresence_ == other.fieldPresence_) && this.hasEnumType() == other.hasEnumType() && (!this.hasEnumType() || this.enumType_ == other.enumType_) && this.hasRepeatedFieldEncoding() == other.hasRepeatedFieldEncoding() && (!this.hasRepeatedFieldEncoding() || this.repeatedFieldEncoding_ == other.repeatedFieldEncoding_) && this.hasUtf8Validation() == other.hasUtf8Validation() && (!this.hasUtf8Validation() || this.utf8Validation_ == other.utf8Validation_) && this.hasMessageEncoding() == other.hasMessageEncoding() && (!this.hasMessageEncoding() || this.messageEncoding_ == other.messageEncoding_) && this.hasJsonFormat() == other.hasJsonFormat() && (!this.hasJsonFormat() || this.jsonFormat_ == other.jsonFormat_) && this.hasEnforceNamingStyle() == other.hasEnforceNamingStyle() && (!this.hasEnforceNamingStyle() || this.enforceNamingStyle_ == other.enforceNamingStyle_) && this.hasDefaultSymbolVisibility() == other.hasDefaultSymbolVisibility() && (!this.hasDefaultSymbolVisibility() || this.defaultSymbolVisibility_ == other.defaultSymbolVisibility_) && this.getUnknownFields().equals(other.getUnknownFields()) && this.getExtensionFields().equals(other.getExtensionFields());
        }
        
        @Override
        public int hashCode() {
            if (this.memoizedHashCode != 0) {
                return this.memoizedHashCode;
            }
            int hash = 41;
            hash = 19 * hash + getDescriptor().hashCode();
            if (this.hasFieldPresence()) {
                hash = 37 * hash + 1;
                hash = 53 * hash + this.fieldPresence_;
            }
            if (this.hasEnumType()) {
                hash = 37 * hash + 2;
                hash = 53 * hash + this.enumType_;
            }
            if (this.hasRepeatedFieldEncoding()) {
                hash = 37 * hash + 3;
                hash = 53 * hash + this.repeatedFieldEncoding_;
            }
            if (this.hasUtf8Validation()) {
                hash = 37 * hash + 4;
                hash = 53 * hash + this.utf8Validation_;
            }
            if (this.hasMessageEncoding()) {
                hash = 37 * hash + 5;
                hash = 53 * hash + this.messageEncoding_;
            }
            if (this.hasJsonFormat()) {
                hash = 37 * hash + 6;
                hash = 53 * hash + this.jsonFormat_;
            }
            if (this.hasEnforceNamingStyle()) {
                hash = 37 * hash + 7;
                hash = 53 * hash + this.enforceNamingStyle_;
            }
            if (this.hasDefaultSymbolVisibility()) {
                hash = 37 * hash + 8;
                hash = 53 * hash + this.defaultSymbolVisibility_;
            }
            hash = AbstractMessage.hashFields(hash, this.getExtensionFields());
            hash = 29 * hash + this.getUnknownFields().hashCode();
            return this.memoizedHashCode = hash;
        }
        
        public static FeatureSet parseFrom(final ByteBuffer data) throws InvalidProtocolBufferException {
            return FeatureSet.PARSER.parseFrom(data);
        }
        
        public static FeatureSet parseFrom(final ByteBuffer data, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
            return FeatureSet.PARSER.parseFrom(data, extensionRegistry);
        }
        
        public static FeatureSet parseFrom(final ByteString data) throws InvalidProtocolBufferException {
            return FeatureSet.PARSER.parseFrom(data);
        }
        
        public static FeatureSet parseFrom(final ByteString data, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
            return FeatureSet.PARSER.parseFrom(data, extensionRegistry);
        }
        
        public static FeatureSet parseFrom(final byte[] data) throws InvalidProtocolBufferException {
            return FeatureSet.PARSER.parseFrom(data);
        }
        
        public static FeatureSet parseFrom(final byte[] data, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
            return FeatureSet.PARSER.parseFrom(data, extensionRegistry);
        }
        
        public static FeatureSet parseFrom(final InputStream input) throws IOException {
            return GeneratedMessage.parseWithIOException(FeatureSet.PARSER, input);
        }
        
        public static FeatureSet parseFrom(final InputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
            return GeneratedMessage.parseWithIOException(FeatureSet.PARSER, input, extensionRegistry);
        }
        
        public static FeatureSet parseDelimitedFrom(final InputStream input) throws IOException {
            return GeneratedMessage.parseDelimitedWithIOException(FeatureSet.PARSER, input);
        }
        
        public static FeatureSet parseDelimitedFrom(final InputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
            return GeneratedMessage.parseDelimitedWithIOException(FeatureSet.PARSER, input, extensionRegistry);
        }
        
        public static FeatureSet parseFrom(final CodedInputStream input) throws IOException {
            return GeneratedMessage.parseWithIOException(FeatureSet.PARSER, input);
        }
        
        public static FeatureSet parseFrom(final CodedInputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
            return GeneratedMessage.parseWithIOException(FeatureSet.PARSER, input, extensionRegistry);
        }
        
        @Override
        public Builder newBuilderForType() {
            return newBuilder();
        }
        
        public static Builder newBuilder() {
            return FeatureSet.DEFAULT_INSTANCE.toBuilder();
        }
        
        public static Builder newBuilder(final FeatureSet prototype) {
            return FeatureSet.DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
        }
        
        @Override
        public Builder toBuilder() {
            return (this == FeatureSet.DEFAULT_INSTANCE) ? new Builder() : new Builder().mergeFrom(this);
        }
        
        @Override
        protected Builder newBuilderForType(final BuilderParent parent) {
            final Builder builder = new Builder(parent);
            return builder;
        }
        
        public static FeatureSet getDefaultInstance() {
            return FeatureSet.DEFAULT_INSTANCE;
        }
        
        public static Parser<FeatureSet> parser() {
            return FeatureSet.PARSER;
        }
        
        @Override
        public Parser<FeatureSet> getParserForType() {
            return FeatureSet.PARSER;
        }
        
        @Override
        public FeatureSet getDefaultInstanceForType() {
            return FeatureSet.DEFAULT_INSTANCE;
        }
        
        static {
            RuntimeVersion.validateProtobufGencodeVersion(RuntimeVersion.RuntimeDomain.PUBLIC, 4, 33, 0, "", "FeatureSet");
            DEFAULT_INSTANCE = new FeatureSet();
            PARSER = new AbstractParser<FeatureSet>() {
                @Override
                public FeatureSet parsePartialFrom(final CodedInputStream input, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
                    final Builder builder = FeatureSet.newBuilder();
                    try {
                        builder.mergeFrom(input, extensionRegistry);
                    }
                    catch (final InvalidProtocolBufferException e) {
                        throw e.setUnfinishedMessage(builder.buildPartial());
                    }
                    catch (final UninitializedMessageException e2) {
                        throw e2.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
                    }
                    catch (final IOException e3) {
                        throw new InvalidProtocolBufferException(e3).setUnfinishedMessage(builder.buildPartial());
                    }
                    return builder.buildPartial();
                }
            };
        }
        
        public enum FieldPresence implements ProtocolMessageEnum
        {
            FIELD_PRESENCE_UNKNOWN(0), 
            EXPLICIT(1), 
            IMPLICIT(2), 
            LEGACY_REQUIRED(3);
            
            public static final int FIELD_PRESENCE_UNKNOWN_VALUE = 0;
            public static final int EXPLICIT_VALUE = 1;
            public static final int IMPLICIT_VALUE = 2;
            public static final int LEGACY_REQUIRED_VALUE = 3;
            private static final Internal.EnumLiteMap<FieldPresence> internalValueMap;
            private static final FieldPresence[] VALUES;
            private final int value;
            
            @Override
            public final int getNumber() {
                return this.value;
            }
            
            @Deprecated
            public static FieldPresence valueOf(final int value) {
                return forNumber(value);
            }
            
            public static FieldPresence forNumber(final int value) {
                switch (value) {
                    case 0: {
                        return FieldPresence.FIELD_PRESENCE_UNKNOWN;
                    }
                    case 1: {
                        return FieldPresence.EXPLICIT;
                    }
                    case 2: {
                        return FieldPresence.IMPLICIT;
                    }
                    case 3: {
                        return FieldPresence.LEGACY_REQUIRED;
                    }
                    default: {
                        return null;
                    }
                }
            }
            
            public static Internal.EnumLiteMap<FieldPresence> internalGetValueMap() {
                return FieldPresence.internalValueMap;
            }
            
            @Override
            public final Descriptors.EnumValueDescriptor getValueDescriptor() {
                return getDescriptor().getValues().get(this.ordinal());
            }
            
            @Override
            public final Descriptors.EnumDescriptor getDescriptorForType() {
                return getDescriptor();
            }
            
            public static Descriptors.EnumDescriptor getDescriptor() {
                return FeatureSet.getDescriptor().getEnumTypes().get(0);
            }
            
            public static FieldPresence valueOf(final Descriptors.EnumValueDescriptor desc) {
                if (desc.getType() != getDescriptor()) {
                    throw new IllegalArgumentException("EnumValueDescriptor is not for this type.");
                }
                return FieldPresence.VALUES[desc.getIndex()];
            }
            
            private FieldPresence(final int value) {
                this.value = value;
            }
            
            static {
                RuntimeVersion.validateProtobufGencodeVersion(RuntimeVersion.RuntimeDomain.PUBLIC, 4, 33, 0, "", "FieldPresence");
                internalValueMap = new Internal.EnumLiteMap<FieldPresence>() {
                    @Override
                    public FieldPresence findValueByNumber(final int number) {
                        return FieldPresence.forNumber(number);
                    }
                };
                VALUES = values();
            }
        }
        
        public enum EnumType implements ProtocolMessageEnum
        {
            ENUM_TYPE_UNKNOWN(0), 
            OPEN(1), 
            CLOSED(2);
            
            public static final int ENUM_TYPE_UNKNOWN_VALUE = 0;
            public static final int OPEN_VALUE = 1;
            public static final int CLOSED_VALUE = 2;
            private static final Internal.EnumLiteMap<EnumType> internalValueMap;
            private static final EnumType[] VALUES;
            private final int value;
            
            @Override
            public final int getNumber() {
                return this.value;
            }
            
            @Deprecated
            public static EnumType valueOf(final int value) {
                return forNumber(value);
            }
            
            public static EnumType forNumber(final int value) {
                switch (value) {
                    case 0: {
                        return EnumType.ENUM_TYPE_UNKNOWN;
                    }
                    case 1: {
                        return EnumType.OPEN;
                    }
                    case 2: {
                        return EnumType.CLOSED;
                    }
                    default: {
                        return null;
                    }
                }
            }
            
            public static Internal.EnumLiteMap<EnumType> internalGetValueMap() {
                return EnumType.internalValueMap;
            }
            
            @Override
            public final Descriptors.EnumValueDescriptor getValueDescriptor() {
                return getDescriptor().getValues().get(this.ordinal());
            }
            
            @Override
            public final Descriptors.EnumDescriptor getDescriptorForType() {
                return getDescriptor();
            }
            
            public static Descriptors.EnumDescriptor getDescriptor() {
                return FeatureSet.getDescriptor().getEnumTypes().get(1);
            }
            
            public static EnumType valueOf(final Descriptors.EnumValueDescriptor desc) {
                if (desc.getType() != getDescriptor()) {
                    throw new IllegalArgumentException("EnumValueDescriptor is not for this type.");
                }
                return EnumType.VALUES[desc.getIndex()];
            }
            
            private EnumType(final int value) {
                this.value = value;
            }
            
            static {
                RuntimeVersion.validateProtobufGencodeVersion(RuntimeVersion.RuntimeDomain.PUBLIC, 4, 33, 0, "", "EnumType");
                internalValueMap = new Internal.EnumLiteMap<EnumType>() {
                    @Override
                    public EnumType findValueByNumber(final int number) {
                        return EnumType.forNumber(number);
                    }
                };
                VALUES = values();
            }
        }
        
        public enum RepeatedFieldEncoding implements ProtocolMessageEnum
        {
            REPEATED_FIELD_ENCODING_UNKNOWN(0), 
            PACKED(1), 
            EXPANDED(2);
            
            public static final int REPEATED_FIELD_ENCODING_UNKNOWN_VALUE = 0;
            public static final int PACKED_VALUE = 1;
            public static final int EXPANDED_VALUE = 2;
            private static final Internal.EnumLiteMap<RepeatedFieldEncoding> internalValueMap;
            private static final RepeatedFieldEncoding[] VALUES;
            private final int value;
            
            @Override
            public final int getNumber() {
                return this.value;
            }
            
            @Deprecated
            public static RepeatedFieldEncoding valueOf(final int value) {
                return forNumber(value);
            }
            
            public static RepeatedFieldEncoding forNumber(final int value) {
                switch (value) {
                    case 0: {
                        return RepeatedFieldEncoding.REPEATED_FIELD_ENCODING_UNKNOWN;
                    }
                    case 1: {
                        return RepeatedFieldEncoding.PACKED;
                    }
                    case 2: {
                        return RepeatedFieldEncoding.EXPANDED;
                    }
                    default: {
                        return null;
                    }
                }
            }
            
            public static Internal.EnumLiteMap<RepeatedFieldEncoding> internalGetValueMap() {
                return RepeatedFieldEncoding.internalValueMap;
            }
            
            @Override
            public final Descriptors.EnumValueDescriptor getValueDescriptor() {
                return getDescriptor().getValues().get(this.ordinal());
            }
            
            @Override
            public final Descriptors.EnumDescriptor getDescriptorForType() {
                return getDescriptor();
            }
            
            public static Descriptors.EnumDescriptor getDescriptor() {
                return FeatureSet.getDescriptor().getEnumTypes().get(2);
            }
            
            public static RepeatedFieldEncoding valueOf(final Descriptors.EnumValueDescriptor desc) {
                if (desc.getType() != getDescriptor()) {
                    throw new IllegalArgumentException("EnumValueDescriptor is not for this type.");
                }
                return RepeatedFieldEncoding.VALUES[desc.getIndex()];
            }
            
            private RepeatedFieldEncoding(final int value) {
                this.value = value;
            }
            
            static {
                RuntimeVersion.validateProtobufGencodeVersion(RuntimeVersion.RuntimeDomain.PUBLIC, 4, 33, 0, "", "RepeatedFieldEncoding");
                internalValueMap = new Internal.EnumLiteMap<RepeatedFieldEncoding>() {
                    @Override
                    public RepeatedFieldEncoding findValueByNumber(final int number) {
                        return RepeatedFieldEncoding.forNumber(number);
                    }
                };
                VALUES = values();
            }
        }
        
        public enum Utf8Validation implements ProtocolMessageEnum
        {
            UTF8_VALIDATION_UNKNOWN(0), 
            VERIFY(2), 
            NONE(3);
            
            public static final int UTF8_VALIDATION_UNKNOWN_VALUE = 0;
            public static final int VERIFY_VALUE = 2;
            public static final int NONE_VALUE = 3;
            private static final Internal.EnumLiteMap<Utf8Validation> internalValueMap;
            private static final Utf8Validation[] VALUES;
            private final int value;
            
            @Override
            public final int getNumber() {
                return this.value;
            }
            
            @Deprecated
            public static Utf8Validation valueOf(final int value) {
                return forNumber(value);
            }
            
            public static Utf8Validation forNumber(final int value) {
                switch (value) {
                    case 0: {
                        return Utf8Validation.UTF8_VALIDATION_UNKNOWN;
                    }
                    case 2: {
                        return Utf8Validation.VERIFY;
                    }
                    case 3: {
                        return Utf8Validation.NONE;
                    }
                    default: {
                        return null;
                    }
                }
            }
            
            public static Internal.EnumLiteMap<Utf8Validation> internalGetValueMap() {
                return Utf8Validation.internalValueMap;
            }
            
            @Override
            public final Descriptors.EnumValueDescriptor getValueDescriptor() {
                return getDescriptor().getValues().get(this.ordinal());
            }
            
            @Override
            public final Descriptors.EnumDescriptor getDescriptorForType() {
                return getDescriptor();
            }
            
            public static Descriptors.EnumDescriptor getDescriptor() {
                return FeatureSet.getDescriptor().getEnumTypes().get(3);
            }
            
            public static Utf8Validation valueOf(final Descriptors.EnumValueDescriptor desc) {
                if (desc.getType() != getDescriptor()) {
                    throw new IllegalArgumentException("EnumValueDescriptor is not for this type.");
                }
                return Utf8Validation.VALUES[desc.getIndex()];
            }
            
            private Utf8Validation(final int value) {
                this.value = value;
            }
            
            static {
                RuntimeVersion.validateProtobufGencodeVersion(RuntimeVersion.RuntimeDomain.PUBLIC, 4, 33, 0, "", "Utf8Validation");
                internalValueMap = new Internal.EnumLiteMap<Utf8Validation>() {
                    @Override
                    public Utf8Validation findValueByNumber(final int number) {
                        return Utf8Validation.forNumber(number);
                    }
                };
                VALUES = values();
            }
        }
        
        public enum MessageEncoding implements ProtocolMessageEnum
        {
            MESSAGE_ENCODING_UNKNOWN(0), 
            LENGTH_PREFIXED(1), 
            DELIMITED(2);
            
            public static final int MESSAGE_ENCODING_UNKNOWN_VALUE = 0;
            public static final int LENGTH_PREFIXED_VALUE = 1;
            public static final int DELIMITED_VALUE = 2;
            private static final Internal.EnumLiteMap<MessageEncoding> internalValueMap;
            private static final MessageEncoding[] VALUES;
            private final int value;
            
            @Override
            public final int getNumber() {
                return this.value;
            }
            
            @Deprecated
            public static MessageEncoding valueOf(final int value) {
                return forNumber(value);
            }
            
            public static MessageEncoding forNumber(final int value) {
                switch (value) {
                    case 0: {
                        return MessageEncoding.MESSAGE_ENCODING_UNKNOWN;
                    }
                    case 1: {
                        return MessageEncoding.LENGTH_PREFIXED;
                    }
                    case 2: {
                        return MessageEncoding.DELIMITED;
                    }
                    default: {
                        return null;
                    }
                }
            }
            
            public static Internal.EnumLiteMap<MessageEncoding> internalGetValueMap() {
                return MessageEncoding.internalValueMap;
            }
            
            @Override
            public final Descriptors.EnumValueDescriptor getValueDescriptor() {
                return getDescriptor().getValues().get(this.ordinal());
            }
            
            @Override
            public final Descriptors.EnumDescriptor getDescriptorForType() {
                return getDescriptor();
            }
            
            public static Descriptors.EnumDescriptor getDescriptor() {
                return FeatureSet.getDescriptor().getEnumTypes().get(4);
            }
            
            public static MessageEncoding valueOf(final Descriptors.EnumValueDescriptor desc) {
                if (desc.getType() != getDescriptor()) {
                    throw new IllegalArgumentException("EnumValueDescriptor is not for this type.");
                }
                return MessageEncoding.VALUES[desc.getIndex()];
            }
            
            private MessageEncoding(final int value) {
                this.value = value;
            }
            
            static {
                RuntimeVersion.validateProtobufGencodeVersion(RuntimeVersion.RuntimeDomain.PUBLIC, 4, 33, 0, "", "MessageEncoding");
                internalValueMap = new Internal.EnumLiteMap<MessageEncoding>() {
                    @Override
                    public MessageEncoding findValueByNumber(final int number) {
                        return MessageEncoding.forNumber(number);
                    }
                };
                VALUES = values();
            }
        }
        
        public enum JsonFormat implements ProtocolMessageEnum
        {
            JSON_FORMAT_UNKNOWN(0), 
            ALLOW(1), 
            LEGACY_BEST_EFFORT(2);
            
            public static final int JSON_FORMAT_UNKNOWN_VALUE = 0;
            public static final int ALLOW_VALUE = 1;
            public static final int LEGACY_BEST_EFFORT_VALUE = 2;
            private static final Internal.EnumLiteMap<JsonFormat> internalValueMap;
            private static final JsonFormat[] VALUES;
            private final int value;
            
            @Override
            public final int getNumber() {
                return this.value;
            }
            
            @Deprecated
            public static JsonFormat valueOf(final int value) {
                return forNumber(value);
            }
            
            public static JsonFormat forNumber(final int value) {
                switch (value) {
                    case 0: {
                        return JsonFormat.JSON_FORMAT_UNKNOWN;
                    }
                    case 1: {
                        return JsonFormat.ALLOW;
                    }
                    case 2: {
                        return JsonFormat.LEGACY_BEST_EFFORT;
                    }
                    default: {
                        return null;
                    }
                }
            }
            
            public static Internal.EnumLiteMap<JsonFormat> internalGetValueMap() {
                return JsonFormat.internalValueMap;
            }
            
            @Override
            public final Descriptors.EnumValueDescriptor getValueDescriptor() {
                return getDescriptor().getValues().get(this.ordinal());
            }
            
            @Override
            public final Descriptors.EnumDescriptor getDescriptorForType() {
                return getDescriptor();
            }
            
            public static Descriptors.EnumDescriptor getDescriptor() {
                return FeatureSet.getDescriptor().getEnumTypes().get(5);
            }
            
            public static JsonFormat valueOf(final Descriptors.EnumValueDescriptor desc) {
                if (desc.getType() != getDescriptor()) {
                    throw new IllegalArgumentException("EnumValueDescriptor is not for this type.");
                }
                return JsonFormat.VALUES[desc.getIndex()];
            }
            
            private JsonFormat(final int value) {
                this.value = value;
            }
            
            static {
                RuntimeVersion.validateProtobufGencodeVersion(RuntimeVersion.RuntimeDomain.PUBLIC, 4, 33, 0, "", "JsonFormat");
                internalValueMap = new Internal.EnumLiteMap<JsonFormat>() {
                    @Override
                    public JsonFormat findValueByNumber(final int number) {
                        return JsonFormat.forNumber(number);
                    }
                };
                VALUES = values();
            }
        }
        
        public enum EnforceNamingStyle implements ProtocolMessageEnum
        {
            ENFORCE_NAMING_STYLE_UNKNOWN(0), 
            STYLE2024(1), 
            STYLE_LEGACY(2);
            
            public static final int ENFORCE_NAMING_STYLE_UNKNOWN_VALUE = 0;
            public static final int STYLE2024_VALUE = 1;
            public static final int STYLE_LEGACY_VALUE = 2;
            private static final Internal.EnumLiteMap<EnforceNamingStyle> internalValueMap;
            private static final EnforceNamingStyle[] VALUES;
            private final int value;
            
            @Override
            public final int getNumber() {
                return this.value;
            }
            
            @Deprecated
            public static EnforceNamingStyle valueOf(final int value) {
                return forNumber(value);
            }
            
            public static EnforceNamingStyle forNumber(final int value) {
                switch (value) {
                    case 0: {
                        return EnforceNamingStyle.ENFORCE_NAMING_STYLE_UNKNOWN;
                    }
                    case 1: {
                        return EnforceNamingStyle.STYLE2024;
                    }
                    case 2: {
                        return EnforceNamingStyle.STYLE_LEGACY;
                    }
                    default: {
                        return null;
                    }
                }
            }
            
            public static Internal.EnumLiteMap<EnforceNamingStyle> internalGetValueMap() {
                return EnforceNamingStyle.internalValueMap;
            }
            
            @Override
            public final Descriptors.EnumValueDescriptor getValueDescriptor() {
                return getDescriptor().getValues().get(this.ordinal());
            }
            
            @Override
            public final Descriptors.EnumDescriptor getDescriptorForType() {
                return getDescriptor();
            }
            
            public static Descriptors.EnumDescriptor getDescriptor() {
                return FeatureSet.getDescriptor().getEnumTypes().get(6);
            }
            
            public static EnforceNamingStyle valueOf(final Descriptors.EnumValueDescriptor desc) {
                if (desc.getType() != getDescriptor()) {
                    throw new IllegalArgumentException("EnumValueDescriptor is not for this type.");
                }
                return EnforceNamingStyle.VALUES[desc.getIndex()];
            }
            
            private EnforceNamingStyle(final int value) {
                this.value = value;
            }
            
            static {
                RuntimeVersion.validateProtobufGencodeVersion(RuntimeVersion.RuntimeDomain.PUBLIC, 4, 33, 0, "", "EnforceNamingStyle");
                internalValueMap = new Internal.EnumLiteMap<EnforceNamingStyle>() {
                    @Override
                    public EnforceNamingStyle findValueByNumber(final int number) {
                        return EnforceNamingStyle.forNumber(number);
                    }
                };
                VALUES = values();
            }
        }
        
        public static final class VisibilityFeature extends GeneratedMessage implements VisibilityFeatureOrBuilder
        {
            private static final long serialVersionUID = 0L;
            private byte memoizedIsInitialized;
            private static final VisibilityFeature DEFAULT_INSTANCE;
            private static final Parser<VisibilityFeature> PARSER;
            
            private VisibilityFeature(final GeneratedMessage.Builder<?> builder) {
                super(builder);
                this.memoizedIsInitialized = -1;
            }
            
            private VisibilityFeature() {
                this.memoizedIsInitialized = -1;
            }
            
            public static final Descriptors.Descriptor getDescriptor() {
                return DescriptorProtos.internal_static_google_protobuf_FeatureSet_VisibilityFeature_descriptor;
            }
            
            @Override
            protected FieldAccessorTable internalGetFieldAccessorTable() {
                return DescriptorProtos.internal_static_google_protobuf_FeatureSet_VisibilityFeature_fieldAccessorTable.ensureFieldAccessorsInitialized(VisibilityFeature.class, Builder.class);
            }
            
            @Override
            public final boolean isInitialized() {
                final byte isInitialized = this.memoizedIsInitialized;
                if (isInitialized == 1) {
                    return true;
                }
                if (isInitialized == 0) {
                    return false;
                }
                this.memoizedIsInitialized = 1;
                return true;
            }
            
            @Override
            public void writeTo(final CodedOutputStream output) throws IOException {
                this.getUnknownFields().writeTo(output);
            }
            
            @Override
            public int getSerializedSize() {
                int size = this.memoizedSize;
                if (size != -1) {
                    return size;
                }
                size = 0;
                size += this.getUnknownFields().getSerializedSize();
                return this.memoizedSize = size;
            }
            
            @Override
            public boolean equals(final Object obj) {
                if (obj == this) {
                    return true;
                }
                if (!(obj instanceof VisibilityFeature)) {
                    return super.equals(obj);
                }
                final VisibilityFeature other = (VisibilityFeature)obj;
                return this.getUnknownFields().equals(other.getUnknownFields());
            }
            
            @Override
            public int hashCode() {
                if (this.memoizedHashCode != 0) {
                    return this.memoizedHashCode;
                }
                int hash = 41;
                hash = 19 * hash + getDescriptor().hashCode();
                hash = 29 * hash + this.getUnknownFields().hashCode();
                return this.memoizedHashCode = hash;
            }
            
            public static VisibilityFeature parseFrom(final ByteBuffer data) throws InvalidProtocolBufferException {
                return VisibilityFeature.PARSER.parseFrom(data);
            }
            
            public static VisibilityFeature parseFrom(final ByteBuffer data, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
                return VisibilityFeature.PARSER.parseFrom(data, extensionRegistry);
            }
            
            public static VisibilityFeature parseFrom(final ByteString data) throws InvalidProtocolBufferException {
                return VisibilityFeature.PARSER.parseFrom(data);
            }
            
            public static VisibilityFeature parseFrom(final ByteString data, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
                return VisibilityFeature.PARSER.parseFrom(data, extensionRegistry);
            }
            
            public static VisibilityFeature parseFrom(final byte[] data) throws InvalidProtocolBufferException {
                return VisibilityFeature.PARSER.parseFrom(data);
            }
            
            public static VisibilityFeature parseFrom(final byte[] data, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
                return VisibilityFeature.PARSER.parseFrom(data, extensionRegistry);
            }
            
            public static VisibilityFeature parseFrom(final InputStream input) throws IOException {
                return GeneratedMessage.parseWithIOException(VisibilityFeature.PARSER, input);
            }
            
            public static VisibilityFeature parseFrom(final InputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
                return GeneratedMessage.parseWithIOException(VisibilityFeature.PARSER, input, extensionRegistry);
            }
            
            public static VisibilityFeature parseDelimitedFrom(final InputStream input) throws IOException {
                return GeneratedMessage.parseDelimitedWithIOException(VisibilityFeature.PARSER, input);
            }
            
            public static VisibilityFeature parseDelimitedFrom(final InputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
                return GeneratedMessage.parseDelimitedWithIOException(VisibilityFeature.PARSER, input, extensionRegistry);
            }
            
            public static VisibilityFeature parseFrom(final CodedInputStream input) throws IOException {
                return GeneratedMessage.parseWithIOException(VisibilityFeature.PARSER, input);
            }
            
            public static VisibilityFeature parseFrom(final CodedInputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
                return GeneratedMessage.parseWithIOException(VisibilityFeature.PARSER, input, extensionRegistry);
            }
            
            @Override
            public Builder newBuilderForType() {
                return newBuilder();
            }
            
            public static Builder newBuilder() {
                return VisibilityFeature.DEFAULT_INSTANCE.toBuilder();
            }
            
            public static Builder newBuilder(final VisibilityFeature prototype) {
                return VisibilityFeature.DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
            }
            
            @Override
            public Builder toBuilder() {
                return (this == VisibilityFeature.DEFAULT_INSTANCE) ? new Builder() : new Builder().mergeFrom(this);
            }
            
            @Override
            protected Builder newBuilderForType(final BuilderParent parent) {
                final Builder builder = new Builder(parent);
                return builder;
            }
            
            public static VisibilityFeature getDefaultInstance() {
                return VisibilityFeature.DEFAULT_INSTANCE;
            }
            
            public static Parser<VisibilityFeature> parser() {
                return VisibilityFeature.PARSER;
            }
            
            @Override
            public Parser<VisibilityFeature> getParserForType() {
                return VisibilityFeature.PARSER;
            }
            
            @Override
            public VisibilityFeature getDefaultInstanceForType() {
                return VisibilityFeature.DEFAULT_INSTANCE;
            }
            
            static {
                RuntimeVersion.validateProtobufGencodeVersion(RuntimeVersion.RuntimeDomain.PUBLIC, 4, 33, 0, "", "VisibilityFeature");
                DEFAULT_INSTANCE = new VisibilityFeature();
                PARSER = new AbstractParser<VisibilityFeature>() {
                    @Override
                    public VisibilityFeature parsePartialFrom(final CodedInputStream input, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
                        final Builder builder = VisibilityFeature.newBuilder();
                        try {
                            builder.mergeFrom(input, extensionRegistry);
                        }
                        catch (final InvalidProtocolBufferException e) {
                            throw e.setUnfinishedMessage(builder.buildPartial());
                        }
                        catch (final UninitializedMessageException e2) {
                            throw e2.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
                        }
                        catch (final IOException e3) {
                            throw new InvalidProtocolBufferException(e3).setUnfinishedMessage(builder.buildPartial());
                        }
                        return builder.buildPartial();
                    }
                };
            }
            
            public enum DefaultSymbolVisibility implements ProtocolMessageEnum
            {
                DEFAULT_SYMBOL_VISIBILITY_UNKNOWN(0), 
                EXPORT_ALL(1), 
                EXPORT_TOP_LEVEL(2), 
                LOCAL_ALL(3), 
                STRICT(4);
                
                public static final int DEFAULT_SYMBOL_VISIBILITY_UNKNOWN_VALUE = 0;
                public static final int EXPORT_ALL_VALUE = 1;
                public static final int EXPORT_TOP_LEVEL_VALUE = 2;
                public static final int LOCAL_ALL_VALUE = 3;
                public static final int STRICT_VALUE = 4;
                private static final Internal.EnumLiteMap<DefaultSymbolVisibility> internalValueMap;
                private static final DefaultSymbolVisibility[] VALUES;
                private final int value;
                
                @Override
                public final int getNumber() {
                    return this.value;
                }
                
                @Deprecated
                public static DefaultSymbolVisibility valueOf(final int value) {
                    return forNumber(value);
                }
                
                public static DefaultSymbolVisibility forNumber(final int value) {
                    switch (value) {
                        case 0: {
                            return DefaultSymbolVisibility.DEFAULT_SYMBOL_VISIBILITY_UNKNOWN;
                        }
                        case 1: {
                            return DefaultSymbolVisibility.EXPORT_ALL;
                        }
                        case 2: {
                            return DefaultSymbolVisibility.EXPORT_TOP_LEVEL;
                        }
                        case 3: {
                            return DefaultSymbolVisibility.LOCAL_ALL;
                        }
                        case 4: {
                            return DefaultSymbolVisibility.STRICT;
                        }
                        default: {
                            return null;
                        }
                    }
                }
                
                public static Internal.EnumLiteMap<DefaultSymbolVisibility> internalGetValueMap() {
                    return DefaultSymbolVisibility.internalValueMap;
                }
                
                @Override
                public final Descriptors.EnumValueDescriptor getValueDescriptor() {
                    return getDescriptor().getValues().get(this.ordinal());
                }
                
                @Override
                public final Descriptors.EnumDescriptor getDescriptorForType() {
                    return getDescriptor();
                }
                
                public static Descriptors.EnumDescriptor getDescriptor() {
                    return VisibilityFeature.getDescriptor().getEnumTypes().get(0);
                }
                
                public static DefaultSymbolVisibility valueOf(final Descriptors.EnumValueDescriptor desc) {
                    if (desc.getType() != getDescriptor()) {
                        throw new IllegalArgumentException("EnumValueDescriptor is not for this type.");
                    }
                    return DefaultSymbolVisibility.VALUES[desc.getIndex()];
                }
                
                private DefaultSymbolVisibility(final int value) {
                    this.value = value;
                }
                
                static {
                    RuntimeVersion.validateProtobufGencodeVersion(RuntimeVersion.RuntimeDomain.PUBLIC, 4, 33, 0, "", "DefaultSymbolVisibility");
                    internalValueMap = new Internal.EnumLiteMap<DefaultSymbolVisibility>() {
                        @Override
                        public DefaultSymbolVisibility findValueByNumber(final int number) {
                            return DefaultSymbolVisibility.forNumber(number);
                        }
                    };
                    VALUES = values();
                }
            }
            
            public static final class Builder extends GeneratedMessage.Builder<Builder> implements VisibilityFeatureOrBuilder
            {
                public static final Descriptors.Descriptor getDescriptor() {
                    return DescriptorProtos.internal_static_google_protobuf_FeatureSet_VisibilityFeature_descriptor;
                }
                
                @Override
                protected FieldAccessorTable internalGetFieldAccessorTable() {
                    return DescriptorProtos.internal_static_google_protobuf_FeatureSet_VisibilityFeature_fieldAccessorTable.ensureFieldAccessorsInitialized(VisibilityFeature.class, Builder.class);
                }
                
                private Builder() {
                }
                
                private Builder(final BuilderParent parent) {
                    super(parent);
                }
                
                @Override
                public Builder clear() {
                    super.clear();
                    return this;
                }
                
                @Override
                public Descriptors.Descriptor getDescriptorForType() {
                    return DescriptorProtos.internal_static_google_protobuf_FeatureSet_VisibilityFeature_descriptor;
                }
                
                @Override
                public VisibilityFeature getDefaultInstanceForType() {
                    return VisibilityFeature.getDefaultInstance();
                }
                
                @Override
                public VisibilityFeature build() {
                    final VisibilityFeature result = this.buildPartial();
                    if (!result.isInitialized()) {
                        throw AbstractMessage.Builder.newUninitializedMessageException(result);
                    }
                    return result;
                }
                
                @Override
                public VisibilityFeature buildPartial() {
                    final VisibilityFeature result = new VisibilityFeature((GeneratedMessage.Builder)this);
                    this.onBuilt();
                    return result;
                }
                
                @Override
                public Builder mergeFrom(final Message other) {
                    if (other instanceof VisibilityFeature) {
                        return this.mergeFrom((VisibilityFeature)other);
                    }
                    super.mergeFrom(other);
                    return this;
                }
                
                public Builder mergeFrom(final VisibilityFeature other) {
                    if (other == VisibilityFeature.getDefaultInstance()) {
                        return this;
                    }
                    this.mergeUnknownFields(other.getUnknownFields());
                    this.onChanged();
                    return this;
                }
                
                @Override
                public final boolean isInitialized() {
                    return true;
                }
                
                @Override
                public Builder mergeFrom(final CodedInputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
                    if (extensionRegistry == null) {
                        throw new NullPointerException();
                    }
                    try {
                        boolean done = false;
                        while (!done) {
                            final int tag = input.readTag();
                            switch (tag) {
                                case 0: {
                                    done = true;
                                    continue;
                                }
                                default: {
                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                                        done = true;
                                        continue;
                                    }
                                    continue;
                                }
                            }
                        }
                    }
                    catch (final InvalidProtocolBufferException e) {
                        throw e.unwrapIOException();
                    }
                    finally {
                        this.onChanged();
                    }
                    return this;
                }
            }
        }
        
        public static final class Builder extends ExtendableBuilder<FeatureSet, Builder> implements FeatureSetOrBuilder
        {
            private int bitField0_;
            private int fieldPresence_;
            private int enumType_;
            private int repeatedFieldEncoding_;
            private int utf8Validation_;
            private int messageEncoding_;
            private int jsonFormat_;
            private int enforceNamingStyle_;
            private int defaultSymbolVisibility_;
            
            public static final Descriptors.Descriptor getDescriptor() {
                return DescriptorProtos.internal_static_google_protobuf_FeatureSet_descriptor;
            }
            
            @Override
            protected FieldAccessorTable internalGetFieldAccessorTable() {
                return DescriptorProtos.internal_static_google_protobuf_FeatureSet_fieldAccessorTable.ensureFieldAccessorsInitialized(FeatureSet.class, Builder.class);
            }
            
            private Builder() {
                this.fieldPresence_ = 0;
                this.enumType_ = 0;
                this.repeatedFieldEncoding_ = 0;
                this.utf8Validation_ = 0;
                this.messageEncoding_ = 0;
                this.jsonFormat_ = 0;
                this.enforceNamingStyle_ = 0;
                this.defaultSymbolVisibility_ = 0;
            }
            
            private Builder(final BuilderParent parent) {
                super(parent);
                this.fieldPresence_ = 0;
                this.enumType_ = 0;
                this.repeatedFieldEncoding_ = 0;
                this.utf8Validation_ = 0;
                this.messageEncoding_ = 0;
                this.jsonFormat_ = 0;
                this.enforceNamingStyle_ = 0;
                this.defaultSymbolVisibility_ = 0;
            }
            
            @Override
            public Builder clear() {
                super.clear();
                this.bitField0_ = 0;
                this.fieldPresence_ = 0;
                this.enumType_ = 0;
                this.repeatedFieldEncoding_ = 0;
                this.utf8Validation_ = 0;
                this.messageEncoding_ = 0;
                this.jsonFormat_ = 0;
                this.enforceNamingStyle_ = 0;
                this.defaultSymbolVisibility_ = 0;
                return this;
            }
            
            @Override
            public Descriptors.Descriptor getDescriptorForType() {
                return DescriptorProtos.internal_static_google_protobuf_FeatureSet_descriptor;
            }
            
            @Override
            public FeatureSet getDefaultInstanceForType() {
                return FeatureSet.getDefaultInstance();
            }
            
            @Override
            public FeatureSet build() {
                final FeatureSet result = this.buildPartial();
                if (!result.isInitialized()) {
                    throw AbstractMessage.Builder.newUninitializedMessageException(result);
                }
                return result;
            }
            
            @Override
            public FeatureSet buildPartial() {
                final FeatureSet result = new FeatureSet((ExtendableBuilder)this);
                if (this.bitField0_ != 0) {
                    this.buildPartial0(result);
                }
                this.onBuilt();
                return result;
            }
            
            private void buildPartial0(final FeatureSet result) {
                final int from_bitField0_ = this.bitField0_;
                int to_bitField0_ = 0;
                if ((from_bitField0_ & 0x1) != 0x0) {
                    result.fieldPresence_ = this.fieldPresence_;
                    to_bitField0_ |= 0x1;
                }
                if ((from_bitField0_ & 0x2) != 0x0) {
                    result.enumType_ = this.enumType_;
                    to_bitField0_ |= 0x2;
                }
                if ((from_bitField0_ & 0x4) != 0x0) {
                    result.repeatedFieldEncoding_ = this.repeatedFieldEncoding_;
                    to_bitField0_ |= 0x4;
                }
                if ((from_bitField0_ & 0x8) != 0x0) {
                    result.utf8Validation_ = this.utf8Validation_;
                    to_bitField0_ |= 0x8;
                }
                if ((from_bitField0_ & 0x10) != 0x0) {
                    result.messageEncoding_ = this.messageEncoding_;
                    to_bitField0_ |= 0x10;
                }
                if ((from_bitField0_ & 0x20) != 0x0) {
                    result.jsonFormat_ = this.jsonFormat_;
                    to_bitField0_ |= 0x20;
                }
                if ((from_bitField0_ & 0x40) != 0x0) {
                    result.enforceNamingStyle_ = this.enforceNamingStyle_;
                    to_bitField0_ |= 0x40;
                }
                if ((from_bitField0_ & 0x80) != 0x0) {
                    result.defaultSymbolVisibility_ = this.defaultSymbolVisibility_;
                    to_bitField0_ |= 0x80;
                }
                result.bitField0_ |= to_bitField0_;
            }
            
            public <Type> Builder setExtension(final GeneratedExtension<FeatureSet, Type> extension, final Type value) {
                return super.setExtension(extension, value);
            }
            
            public <Type> Builder setExtension(final GeneratedExtension<FeatureSet, List<Type>> extension, final int index, final Type value) {
                return super.setExtension(extension, index, value);
            }
            
            public <Type> Builder addExtension(final GeneratedExtension<FeatureSet, List<Type>> extension, final Type value) {
                return super.addExtension(extension, value);
            }
            
            public <Type> Builder clearExtension(final GeneratedExtension<FeatureSet, Type> extension) {
                return super.clearExtension(extension);
            }
            
            @Override
            public Builder mergeFrom(final Message other) {
                if (other instanceof FeatureSet) {
                    return this.mergeFrom((FeatureSet)other);
                }
                super.mergeFrom(other);
                return this;
            }
            
            public Builder mergeFrom(final FeatureSet other) {
                if (other == FeatureSet.getDefaultInstance()) {
                    return this;
                }
                if (other.hasFieldPresence()) {
                    this.setFieldPresence(other.getFieldPresence());
                }
                if (other.hasEnumType()) {
                    this.setEnumType(other.getEnumType());
                }
                if (other.hasRepeatedFieldEncoding()) {
                    this.setRepeatedFieldEncoding(other.getRepeatedFieldEncoding());
                }
                if (other.hasUtf8Validation()) {
                    this.setUtf8Validation(other.getUtf8Validation());
                }
                if (other.hasMessageEncoding()) {
                    this.setMessageEncoding(other.getMessageEncoding());
                }
                if (other.hasJsonFormat()) {
                    this.setJsonFormat(other.getJsonFormat());
                }
                if (other.hasEnforceNamingStyle()) {
                    this.setEnforceNamingStyle(other.getEnforceNamingStyle());
                }
                if (other.hasDefaultSymbolVisibility()) {
                    this.setDefaultSymbolVisibility(other.getDefaultSymbolVisibility());
                }
                this.mergeExtensionFields(other);
                this.mergeUnknownFields(other.getUnknownFields());
                this.onChanged();
                return this;
            }
            
            @Override
            public final boolean isInitialized() {
                return this.extensionsAreInitialized();
            }
            
            @Override
            public Builder mergeFrom(final CodedInputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
                if (extensionRegistry == null) {
                    throw new NullPointerException();
                }
                try {
                    boolean done = false;
                    while (!done) {
                        final int tag = input.readTag();
                        switch (tag) {
                            case 0: {
                                done = true;
                                continue;
                            }
                            case 8: {
                                final int tmpRaw = input.readEnum();
                                final FieldPresence tmpValue = FieldPresence.forNumber(tmpRaw);
                                if (tmpValue == null) {
                                    this.mergeUnknownVarintField(1, tmpRaw);
                                    continue;
                                }
                                this.fieldPresence_ = tmpRaw;
                                this.bitField0_ |= 0x1;
                                continue;
                            }
                            case 16: {
                                final int tmpRaw = input.readEnum();
                                final EnumType tmpValue2 = EnumType.forNumber(tmpRaw);
                                if (tmpValue2 == null) {
                                    this.mergeUnknownVarintField(2, tmpRaw);
                                    continue;
                                }
                                this.enumType_ = tmpRaw;
                                this.bitField0_ |= 0x2;
                                continue;
                            }
                            case 24: {
                                final int tmpRaw = input.readEnum();
                                final RepeatedFieldEncoding tmpValue3 = RepeatedFieldEncoding.forNumber(tmpRaw);
                                if (tmpValue3 == null) {
                                    this.mergeUnknownVarintField(3, tmpRaw);
                                    continue;
                                }
                                this.repeatedFieldEncoding_ = tmpRaw;
                                this.bitField0_ |= 0x4;
                                continue;
                            }
                            case 32: {
                                final int tmpRaw = input.readEnum();
                                final Utf8Validation tmpValue4 = Utf8Validation.forNumber(tmpRaw);
                                if (tmpValue4 == null) {
                                    this.mergeUnknownVarintField(4, tmpRaw);
                                    continue;
                                }
                                this.utf8Validation_ = tmpRaw;
                                this.bitField0_ |= 0x8;
                                continue;
                            }
                            case 40: {
                                final int tmpRaw = input.readEnum();
                                final MessageEncoding tmpValue5 = MessageEncoding.forNumber(tmpRaw);
                                if (tmpValue5 == null) {
                                    this.mergeUnknownVarintField(5, tmpRaw);
                                    continue;
                                }
                                this.messageEncoding_ = tmpRaw;
                                this.bitField0_ |= 0x10;
                                continue;
                            }
                            case 48: {
                                final int tmpRaw = input.readEnum();
                                final JsonFormat tmpValue6 = JsonFormat.forNumber(tmpRaw);
                                if (tmpValue6 == null) {
                                    this.mergeUnknownVarintField(6, tmpRaw);
                                    continue;
                                }
                                this.jsonFormat_ = tmpRaw;
                                this.bitField0_ |= 0x20;
                                continue;
                            }
                            case 56: {
                                final int tmpRaw = input.readEnum();
                                final EnforceNamingStyle tmpValue7 = EnforceNamingStyle.forNumber(tmpRaw);
                                if (tmpValue7 == null) {
                                    this.mergeUnknownVarintField(7, tmpRaw);
                                    continue;
                                }
                                this.enforceNamingStyle_ = tmpRaw;
                                this.bitField0_ |= 0x40;
                                continue;
                            }
                            case 64: {
                                final int tmpRaw = input.readEnum();
                                final VisibilityFeature.DefaultSymbolVisibility tmpValue8 = VisibilityFeature.DefaultSymbolVisibility.forNumber(tmpRaw);
                                if (tmpValue8 == null) {
                                    this.mergeUnknownVarintField(8, tmpRaw);
                                    continue;
                                }
                                this.defaultSymbolVisibility_ = tmpRaw;
                                this.bitField0_ |= 0x80;
                                continue;
                            }
                            default: {
                                if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                                    done = true;
                                    continue;
                                }
                                continue;
                            }
                        }
                    }
                }
                catch (final InvalidProtocolBufferException e) {
                    throw e.unwrapIOException();
                }
                finally {
                    this.onChanged();
                }
                return this;
            }
            
            @Override
            public boolean hasFieldPresence() {
                return (this.bitField0_ & 0x1) != 0x0;
            }
            
            @Override
            public FieldPresence getFieldPresence() {
                final FieldPresence result = FieldPresence.forNumber(this.fieldPresence_);
                return (result == null) ? FieldPresence.FIELD_PRESENCE_UNKNOWN : result;
            }
            
            public Builder setFieldPresence(final FieldPresence value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                this.bitField0_ |= 0x1;
                this.fieldPresence_ = value.getNumber();
                this.onChanged();
                return this;
            }
            
            public Builder clearFieldPresence() {
                this.bitField0_ &= 0xFFFFFFFE;
                this.fieldPresence_ = 0;
                this.onChanged();
                return this;
            }
            
            @Override
            public boolean hasEnumType() {
                return (this.bitField0_ & 0x2) != 0x0;
            }
            
            @Override
            public EnumType getEnumType() {
                final EnumType result = EnumType.forNumber(this.enumType_);
                return (result == null) ? EnumType.ENUM_TYPE_UNKNOWN : result;
            }
            
            public Builder setEnumType(final EnumType value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                this.bitField0_ |= 0x2;
                this.enumType_ = value.getNumber();
                this.onChanged();
                return this;
            }
            
            public Builder clearEnumType() {
                this.bitField0_ &= 0xFFFFFFFD;
                this.enumType_ = 0;
                this.onChanged();
                return this;
            }
            
            @Override
            public boolean hasRepeatedFieldEncoding() {
                return (this.bitField0_ & 0x4) != 0x0;
            }
            
            @Override
            public RepeatedFieldEncoding getRepeatedFieldEncoding() {
                final RepeatedFieldEncoding result = RepeatedFieldEncoding.forNumber(this.repeatedFieldEncoding_);
                return (result == null) ? RepeatedFieldEncoding.REPEATED_FIELD_ENCODING_UNKNOWN : result;
            }
            
            public Builder setRepeatedFieldEncoding(final RepeatedFieldEncoding value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                this.bitField0_ |= 0x4;
                this.repeatedFieldEncoding_ = value.getNumber();
                this.onChanged();
                return this;
            }
            
            public Builder clearRepeatedFieldEncoding() {
                this.bitField0_ &= 0xFFFFFFFB;
                this.repeatedFieldEncoding_ = 0;
                this.onChanged();
                return this;
            }
            
            @Override
            public boolean hasUtf8Validation() {
                return (this.bitField0_ & 0x8) != 0x0;
            }
            
            @Override
            public Utf8Validation getUtf8Validation() {
                final Utf8Validation result = Utf8Validation.forNumber(this.utf8Validation_);
                return (result == null) ? Utf8Validation.UTF8_VALIDATION_UNKNOWN : result;
            }
            
            public Builder setUtf8Validation(final Utf8Validation value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                this.bitField0_ |= 0x8;
                this.utf8Validation_ = value.getNumber();
                this.onChanged();
                return this;
            }
            
            public Builder clearUtf8Validation() {
                this.bitField0_ &= 0xFFFFFFF7;
                this.utf8Validation_ = 0;
                this.onChanged();
                return this;
            }
            
            @Override
            public boolean hasMessageEncoding() {
                return (this.bitField0_ & 0x10) != 0x0;
            }
            
            @Override
            public MessageEncoding getMessageEncoding() {
                final MessageEncoding result = MessageEncoding.forNumber(this.messageEncoding_);
                return (result == null) ? MessageEncoding.MESSAGE_ENCODING_UNKNOWN : result;
            }
            
            public Builder setMessageEncoding(final MessageEncoding value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                this.bitField0_ |= 0x10;
                this.messageEncoding_ = value.getNumber();
                this.onChanged();
                return this;
            }
            
            public Builder clearMessageEncoding() {
                this.bitField0_ &= 0xFFFFFFEF;
                this.messageEncoding_ = 0;
                this.onChanged();
                return this;
            }
            
            @Override
            public boolean hasJsonFormat() {
                return (this.bitField0_ & 0x20) != 0x0;
            }
            
            @Override
            public JsonFormat getJsonFormat() {
                final JsonFormat result = JsonFormat.forNumber(this.jsonFormat_);
                return (result == null) ? JsonFormat.JSON_FORMAT_UNKNOWN : result;
            }
            
            public Builder setJsonFormat(final JsonFormat value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                this.bitField0_ |= 0x20;
                this.jsonFormat_ = value.getNumber();
                this.onChanged();
                return this;
            }
            
            public Builder clearJsonFormat() {
                this.bitField0_ &= 0xFFFFFFDF;
                this.jsonFormat_ = 0;
                this.onChanged();
                return this;
            }
            
            @Override
            public boolean hasEnforceNamingStyle() {
                return (this.bitField0_ & 0x40) != 0x0;
            }
            
            @Override
            public EnforceNamingStyle getEnforceNamingStyle() {
                final EnforceNamingStyle result = EnforceNamingStyle.forNumber(this.enforceNamingStyle_);
                return (result == null) ? EnforceNamingStyle.ENFORCE_NAMING_STYLE_UNKNOWN : result;
            }
            
            public Builder setEnforceNamingStyle(final EnforceNamingStyle value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                this.bitField0_ |= 0x40;
                this.enforceNamingStyle_ = value.getNumber();
                this.onChanged();
                return this;
            }
            
            public Builder clearEnforceNamingStyle() {
                this.bitField0_ &= 0xFFFFFFBF;
                this.enforceNamingStyle_ = 0;
                this.onChanged();
                return this;
            }
            
            @Override
            public boolean hasDefaultSymbolVisibility() {
                return (this.bitField0_ & 0x80) != 0x0;
            }
            
            @Override
            public VisibilityFeature.DefaultSymbolVisibility getDefaultSymbolVisibility() {
                final VisibilityFeature.DefaultSymbolVisibility result = VisibilityFeature.DefaultSymbolVisibility.forNumber(this.defaultSymbolVisibility_);
                return (result == null) ? VisibilityFeature.DefaultSymbolVisibility.DEFAULT_SYMBOL_VISIBILITY_UNKNOWN : result;
            }
            
            public Builder setDefaultSymbolVisibility(final VisibilityFeature.DefaultSymbolVisibility value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                this.bitField0_ |= 0x80;
                this.defaultSymbolVisibility_ = value.getNumber();
                this.onChanged();
                return this;
            }
            
            public Builder clearDefaultSymbolVisibility() {
                this.bitField0_ &= 0xFFFFFF7F;
                this.defaultSymbolVisibility_ = 0;
                this.onChanged();
                return this;
            }
        }
        
        public interface VisibilityFeatureOrBuilder extends MessageOrBuilder
        {
        }
    }
    
    public static final class FeatureSetDefaults extends GeneratedMessage implements FeatureSetDefaultsOrBuilder
    {
        private static final long serialVersionUID = 0L;
        private int bitField0_;
        public static final int DEFAULTS_FIELD_NUMBER = 1;
        private List<FeatureSetEditionDefault> defaults_;
        public static final int MINIMUM_EDITION_FIELD_NUMBER = 4;
        private int minimumEdition_;
        public static final int MAXIMUM_EDITION_FIELD_NUMBER = 5;
        private int maximumEdition_;
        private byte memoizedIsInitialized;
        private static final FeatureSetDefaults DEFAULT_INSTANCE;
        private static final Parser<FeatureSetDefaults> PARSER;
        
        private FeatureSetDefaults(final GeneratedMessage.Builder<?> builder) {
            super(builder);
            this.minimumEdition_ = 0;
            this.maximumEdition_ = 0;
            this.memoizedIsInitialized = -1;
        }
        
        private FeatureSetDefaults() {
            this.minimumEdition_ = 0;
            this.maximumEdition_ = 0;
            this.memoizedIsInitialized = -1;
            this.defaults_ = Collections.emptyList();
            this.minimumEdition_ = 0;
            this.maximumEdition_ = 0;
        }
        
        public static final Descriptors.Descriptor getDescriptor() {
            return DescriptorProtos.internal_static_google_protobuf_FeatureSetDefaults_descriptor;
        }
        
        @Override
        protected FieldAccessorTable internalGetFieldAccessorTable() {
            return DescriptorProtos.internal_static_google_protobuf_FeatureSetDefaults_fieldAccessorTable.ensureFieldAccessorsInitialized(FeatureSetDefaults.class, Builder.class);
        }
        
        @Override
        public List<FeatureSetEditionDefault> getDefaultsList() {
            return this.defaults_;
        }
        
        @Override
        public List<? extends FeatureSetEditionDefaultOrBuilder> getDefaultsOrBuilderList() {
            return this.defaults_;
        }
        
        @Override
        public int getDefaultsCount() {
            return this.defaults_.size();
        }
        
        @Override
        public FeatureSetEditionDefault getDefaults(final int index) {
            return this.defaults_.get(index);
        }
        
        @Override
        public FeatureSetEditionDefaultOrBuilder getDefaultsOrBuilder(final int index) {
            return this.defaults_.get(index);
        }
        
        @Override
        public boolean hasMinimumEdition() {
            return (this.bitField0_ & 0x1) != 0x0;
        }
        
        @Override
        public Edition getMinimumEdition() {
            final Edition result = Edition.forNumber(this.minimumEdition_);
            return (result == null) ? Edition.EDITION_UNKNOWN : result;
        }
        
        @Override
        public boolean hasMaximumEdition() {
            return (this.bitField0_ & 0x2) != 0x0;
        }
        
        @Override
        public Edition getMaximumEdition() {
            final Edition result = Edition.forNumber(this.maximumEdition_);
            return (result == null) ? Edition.EDITION_UNKNOWN : result;
        }
        
        @Override
        public final boolean isInitialized() {
            final byte isInitialized = this.memoizedIsInitialized;
            if (isInitialized == 1) {
                return true;
            }
            if (isInitialized == 0) {
                return false;
            }
            for (int i = 0; i < this.getDefaultsCount(); ++i) {
                if (!this.getDefaults(i).isInitialized()) {
                    this.memoizedIsInitialized = 0;
                    return false;
                }
            }
            this.memoizedIsInitialized = 1;
            return true;
        }
        
        @Override
        public void writeTo(final CodedOutputStream output) throws IOException {
            for (int i = 0; i < this.defaults_.size(); ++i) {
                output.writeMessage(1, this.defaults_.get(i));
            }
            if ((this.bitField0_ & 0x1) != 0x0) {
                output.writeEnum(4, this.minimumEdition_);
            }
            if ((this.bitField0_ & 0x2) != 0x0) {
                output.writeEnum(5, this.maximumEdition_);
            }
            this.getUnknownFields().writeTo(output);
        }
        
        @Override
        public int getSerializedSize() {
            int size = this.memoizedSize;
            if (size != -1) {
                return size;
            }
            size = 0;
            for (int i = 0; i < this.defaults_.size(); ++i) {
                size += CodedOutputStream.computeMessageSize(1, this.defaults_.get(i));
            }
            if ((this.bitField0_ & 0x1) != 0x0) {
                size += CodedOutputStream.computeEnumSize(4, this.minimumEdition_);
            }
            if ((this.bitField0_ & 0x2) != 0x0) {
                size += CodedOutputStream.computeEnumSize(5, this.maximumEdition_);
            }
            size += this.getUnknownFields().getSerializedSize();
            return this.memoizedSize = size;
        }
        
        @Override
        public boolean equals(final Object obj) {
            if (obj == this) {
                return true;
            }
            if (!(obj instanceof FeatureSetDefaults)) {
                return super.equals(obj);
            }
            final FeatureSetDefaults other = (FeatureSetDefaults)obj;
            return this.getDefaultsList().equals(other.getDefaultsList()) && this.hasMinimumEdition() == other.hasMinimumEdition() && (!this.hasMinimumEdition() || this.minimumEdition_ == other.minimumEdition_) && this.hasMaximumEdition() == other.hasMaximumEdition() && (!this.hasMaximumEdition() || this.maximumEdition_ == other.maximumEdition_) && this.getUnknownFields().equals(other.getUnknownFields());
        }
        
        @Override
        public int hashCode() {
            if (this.memoizedHashCode != 0) {
                return this.memoizedHashCode;
            }
            int hash = 41;
            hash = 19 * hash + getDescriptor().hashCode();
            if (this.getDefaultsCount() > 0) {
                hash = 37 * hash + 1;
                hash = 53 * hash + this.getDefaultsList().hashCode();
            }
            if (this.hasMinimumEdition()) {
                hash = 37 * hash + 4;
                hash = 53 * hash + this.minimumEdition_;
            }
            if (this.hasMaximumEdition()) {
                hash = 37 * hash + 5;
                hash = 53 * hash + this.maximumEdition_;
            }
            hash = 29 * hash + this.getUnknownFields().hashCode();
            return this.memoizedHashCode = hash;
        }
        
        public static FeatureSetDefaults parseFrom(final ByteBuffer data) throws InvalidProtocolBufferException {
            return FeatureSetDefaults.PARSER.parseFrom(data);
        }
        
        public static FeatureSetDefaults parseFrom(final ByteBuffer data, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
            return FeatureSetDefaults.PARSER.parseFrom(data, extensionRegistry);
        }
        
        public static FeatureSetDefaults parseFrom(final ByteString data) throws InvalidProtocolBufferException {
            return FeatureSetDefaults.PARSER.parseFrom(data);
        }
        
        public static FeatureSetDefaults parseFrom(final ByteString data, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
            return FeatureSetDefaults.PARSER.parseFrom(data, extensionRegistry);
        }
        
        public static FeatureSetDefaults parseFrom(final byte[] data) throws InvalidProtocolBufferException {
            return FeatureSetDefaults.PARSER.parseFrom(data);
        }
        
        public static FeatureSetDefaults parseFrom(final byte[] data, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
            return FeatureSetDefaults.PARSER.parseFrom(data, extensionRegistry);
        }
        
        public static FeatureSetDefaults parseFrom(final InputStream input) throws IOException {
            return GeneratedMessage.parseWithIOException(FeatureSetDefaults.PARSER, input);
        }
        
        public static FeatureSetDefaults parseFrom(final InputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
            return GeneratedMessage.parseWithIOException(FeatureSetDefaults.PARSER, input, extensionRegistry);
        }
        
        public static FeatureSetDefaults parseDelimitedFrom(final InputStream input) throws IOException {
            return GeneratedMessage.parseDelimitedWithIOException(FeatureSetDefaults.PARSER, input);
        }
        
        public static FeatureSetDefaults parseDelimitedFrom(final InputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
            return GeneratedMessage.parseDelimitedWithIOException(FeatureSetDefaults.PARSER, input, extensionRegistry);
        }
        
        public static FeatureSetDefaults parseFrom(final CodedInputStream input) throws IOException {
            return GeneratedMessage.parseWithIOException(FeatureSetDefaults.PARSER, input);
        }
        
        public static FeatureSetDefaults parseFrom(final CodedInputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
            return GeneratedMessage.parseWithIOException(FeatureSetDefaults.PARSER, input, extensionRegistry);
        }
        
        @Override
        public Builder newBuilderForType() {
            return newBuilder();
        }
        
        public static Builder newBuilder() {
            return FeatureSetDefaults.DEFAULT_INSTANCE.toBuilder();
        }
        
        public static Builder newBuilder(final FeatureSetDefaults prototype) {
            return FeatureSetDefaults.DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
        }
        
        @Override
        public Builder toBuilder() {
            return (this == FeatureSetDefaults.DEFAULT_INSTANCE) ? new Builder() : new Builder().mergeFrom(this);
        }
        
        @Override
        protected Builder newBuilderForType(final BuilderParent parent) {
            final Builder builder = new Builder(parent);
            return builder;
        }
        
        public static FeatureSetDefaults getDefaultInstance() {
            return FeatureSetDefaults.DEFAULT_INSTANCE;
        }
        
        public static Parser<FeatureSetDefaults> parser() {
            return FeatureSetDefaults.PARSER;
        }
        
        @Override
        public Parser<FeatureSetDefaults> getParserForType() {
            return FeatureSetDefaults.PARSER;
        }
        
        @Override
        public FeatureSetDefaults getDefaultInstanceForType() {
            return FeatureSetDefaults.DEFAULT_INSTANCE;
        }
        
        static {
            RuntimeVersion.validateProtobufGencodeVersion(RuntimeVersion.RuntimeDomain.PUBLIC, 4, 33, 0, "", "FeatureSetDefaults");
            DEFAULT_INSTANCE = new FeatureSetDefaults();
            PARSER = new AbstractParser<FeatureSetDefaults>() {
                @Override
                public FeatureSetDefaults parsePartialFrom(final CodedInputStream input, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
                    final Builder builder = FeatureSetDefaults.newBuilder();
                    try {
                        builder.mergeFrom(input, extensionRegistry);
                    }
                    catch (final InvalidProtocolBufferException e) {
                        throw e.setUnfinishedMessage(builder.buildPartial());
                    }
                    catch (final UninitializedMessageException e2) {
                        throw e2.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
                    }
                    catch (final IOException e3) {
                        throw new InvalidProtocolBufferException(e3).setUnfinishedMessage(builder.buildPartial());
                    }
                    return builder.buildPartial();
                }
            };
        }
        
        public static final class FeatureSetEditionDefault extends GeneratedMessage implements FeatureSetEditionDefaultOrBuilder
        {
            private static final long serialVersionUID = 0L;
            private int bitField0_;
            public static final int EDITION_FIELD_NUMBER = 3;
            private int edition_;
            public static final int OVERRIDABLE_FEATURES_FIELD_NUMBER = 4;
            private FeatureSet overridableFeatures_;
            public static final int FIXED_FEATURES_FIELD_NUMBER = 5;
            private FeatureSet fixedFeatures_;
            private byte memoizedIsInitialized;
            private static final FeatureSetEditionDefault DEFAULT_INSTANCE;
            private static final Parser<FeatureSetEditionDefault> PARSER;
            
            private FeatureSetEditionDefault(final GeneratedMessage.Builder<?> builder) {
                super(builder);
                this.edition_ = 0;
                this.memoizedIsInitialized = -1;
            }
            
            private FeatureSetEditionDefault() {
                this.edition_ = 0;
                this.memoizedIsInitialized = -1;
                this.edition_ = 0;
            }
            
            public static final Descriptors.Descriptor getDescriptor() {
                return DescriptorProtos.internal_static_google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault_descriptor;
            }
            
            @Override
            protected FieldAccessorTable internalGetFieldAccessorTable() {
                return DescriptorProtos.internal_static_google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault_fieldAccessorTable.ensureFieldAccessorsInitialized(FeatureSetEditionDefault.class, Builder.class);
            }
            
            @Override
            public boolean hasEdition() {
                return (this.bitField0_ & 0x1) != 0x0;
            }
            
            @Override
            public Edition getEdition() {
                final Edition result = Edition.forNumber(this.edition_);
                return (result == null) ? Edition.EDITION_UNKNOWN : result;
            }
            
            @Override
            public boolean hasOverridableFeatures() {
                return (this.bitField0_ & 0x2) != 0x0;
            }
            
            @Override
            public FeatureSet getOverridableFeatures() {
                return (this.overridableFeatures_ == null) ? FeatureSet.getDefaultInstance() : this.overridableFeatures_;
            }
            
            @Override
            public FeatureSetOrBuilder getOverridableFeaturesOrBuilder() {
                return (this.overridableFeatures_ == null) ? FeatureSet.getDefaultInstance() : this.overridableFeatures_;
            }
            
            @Override
            public boolean hasFixedFeatures() {
                return (this.bitField0_ & 0x4) != 0x0;
            }
            
            @Override
            public FeatureSet getFixedFeatures() {
                return (this.fixedFeatures_ == null) ? FeatureSet.getDefaultInstance() : this.fixedFeatures_;
            }
            
            @Override
            public FeatureSetOrBuilder getFixedFeaturesOrBuilder() {
                return (this.fixedFeatures_ == null) ? FeatureSet.getDefaultInstance() : this.fixedFeatures_;
            }
            
            @Override
            public final boolean isInitialized() {
                final byte isInitialized = this.memoizedIsInitialized;
                if (isInitialized == 1) {
                    return true;
                }
                if (isInitialized == 0) {
                    return false;
                }
                if (this.hasOverridableFeatures() && !this.getOverridableFeatures().isInitialized()) {
                    this.memoizedIsInitialized = 0;
                    return false;
                }
                if (this.hasFixedFeatures() && !this.getFixedFeatures().isInitialized()) {
                    this.memoizedIsInitialized = 0;
                    return false;
                }
                this.memoizedIsInitialized = 1;
                return true;
            }
            
            @Override
            public void writeTo(final CodedOutputStream output) throws IOException {
                if ((this.bitField0_ & 0x1) != 0x0) {
                    output.writeEnum(3, this.edition_);
                }
                if ((this.bitField0_ & 0x2) != 0x0) {
                    output.writeMessage(4, this.getOverridableFeatures());
                }
                if ((this.bitField0_ & 0x4) != 0x0) {
                    output.writeMessage(5, this.getFixedFeatures());
                }
                this.getUnknownFields().writeTo(output);
            }
            
            @Override
            public int getSerializedSize() {
                int size = this.memoizedSize;
                if (size != -1) {
                    return size;
                }
                size = 0;
                if ((this.bitField0_ & 0x1) != 0x0) {
                    size += CodedOutputStream.computeEnumSize(3, this.edition_);
                }
                if ((this.bitField0_ & 0x2) != 0x0) {
                    size += CodedOutputStream.computeMessageSize(4, this.getOverridableFeatures());
                }
                if ((this.bitField0_ & 0x4) != 0x0) {
                    size += CodedOutputStream.computeMessageSize(5, this.getFixedFeatures());
                }
                size += this.getUnknownFields().getSerializedSize();
                return this.memoizedSize = size;
            }
            
            @Override
            public boolean equals(final Object obj) {
                if (obj == this) {
                    return true;
                }
                if (!(obj instanceof FeatureSetEditionDefault)) {
                    return super.equals(obj);
                }
                final FeatureSetEditionDefault other = (FeatureSetEditionDefault)obj;
                return this.hasEdition() == other.hasEdition() && (!this.hasEdition() || this.edition_ == other.edition_) && this.hasOverridableFeatures() == other.hasOverridableFeatures() && (!this.hasOverridableFeatures() || this.getOverridableFeatures().equals(other.getOverridableFeatures())) && this.hasFixedFeatures() == other.hasFixedFeatures() && (!this.hasFixedFeatures() || this.getFixedFeatures().equals(other.getFixedFeatures())) && this.getUnknownFields().equals(other.getUnknownFields());
            }
            
            @Override
            public int hashCode() {
                if (this.memoizedHashCode != 0) {
                    return this.memoizedHashCode;
                }
                int hash = 41;
                hash = 19 * hash + getDescriptor().hashCode();
                if (this.hasEdition()) {
                    hash = 37 * hash + 3;
                    hash = 53 * hash + this.edition_;
                }
                if (this.hasOverridableFeatures()) {
                    hash = 37 * hash + 4;
                    hash = 53 * hash + this.getOverridableFeatures().hashCode();
                }
                if (this.hasFixedFeatures()) {
                    hash = 37 * hash + 5;
                    hash = 53 * hash + this.getFixedFeatures().hashCode();
                }
                hash = 29 * hash + this.getUnknownFields().hashCode();
                return this.memoizedHashCode = hash;
            }
            
            public static FeatureSetEditionDefault parseFrom(final ByteBuffer data) throws InvalidProtocolBufferException {
                return FeatureSetEditionDefault.PARSER.parseFrom(data);
            }
            
            public static FeatureSetEditionDefault parseFrom(final ByteBuffer data, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
                return FeatureSetEditionDefault.PARSER.parseFrom(data, extensionRegistry);
            }
            
            public static FeatureSetEditionDefault parseFrom(final ByteString data) throws InvalidProtocolBufferException {
                return FeatureSetEditionDefault.PARSER.parseFrom(data);
            }
            
            public static FeatureSetEditionDefault parseFrom(final ByteString data, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
                return FeatureSetEditionDefault.PARSER.parseFrom(data, extensionRegistry);
            }
            
            public static FeatureSetEditionDefault parseFrom(final byte[] data) throws InvalidProtocolBufferException {
                return FeatureSetEditionDefault.PARSER.parseFrom(data);
            }
            
            public static FeatureSetEditionDefault parseFrom(final byte[] data, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
                return FeatureSetEditionDefault.PARSER.parseFrom(data, extensionRegistry);
            }
            
            public static FeatureSetEditionDefault parseFrom(final InputStream input) throws IOException {
                return GeneratedMessage.parseWithIOException(FeatureSetEditionDefault.PARSER, input);
            }
            
            public static FeatureSetEditionDefault parseFrom(final InputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
                return GeneratedMessage.parseWithIOException(FeatureSetEditionDefault.PARSER, input, extensionRegistry);
            }
            
            public static FeatureSetEditionDefault parseDelimitedFrom(final InputStream input) throws IOException {
                return GeneratedMessage.parseDelimitedWithIOException(FeatureSetEditionDefault.PARSER, input);
            }
            
            public static FeatureSetEditionDefault parseDelimitedFrom(final InputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
                return GeneratedMessage.parseDelimitedWithIOException(FeatureSetEditionDefault.PARSER, input, extensionRegistry);
            }
            
            public static FeatureSetEditionDefault parseFrom(final CodedInputStream input) throws IOException {
                return GeneratedMessage.parseWithIOException(FeatureSetEditionDefault.PARSER, input);
            }
            
            public static FeatureSetEditionDefault parseFrom(final CodedInputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
                return GeneratedMessage.parseWithIOException(FeatureSetEditionDefault.PARSER, input, extensionRegistry);
            }
            
            @Override
            public Builder newBuilderForType() {
                return newBuilder();
            }
            
            public static Builder newBuilder() {
                return FeatureSetEditionDefault.DEFAULT_INSTANCE.toBuilder();
            }
            
            public static Builder newBuilder(final FeatureSetEditionDefault prototype) {
                return FeatureSetEditionDefault.DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
            }
            
            @Override
            public Builder toBuilder() {
                return (this == FeatureSetEditionDefault.DEFAULT_INSTANCE) ? new Builder() : new Builder().mergeFrom(this);
            }
            
            @Override
            protected Builder newBuilderForType(final BuilderParent parent) {
                final Builder builder = new Builder(parent);
                return builder;
            }
            
            public static FeatureSetEditionDefault getDefaultInstance() {
                return FeatureSetEditionDefault.DEFAULT_INSTANCE;
            }
            
            public static Parser<FeatureSetEditionDefault> parser() {
                return FeatureSetEditionDefault.PARSER;
            }
            
            @Override
            public Parser<FeatureSetEditionDefault> getParserForType() {
                return FeatureSetEditionDefault.PARSER;
            }
            
            @Override
            public FeatureSetEditionDefault getDefaultInstanceForType() {
                return FeatureSetEditionDefault.DEFAULT_INSTANCE;
            }
            
            static {
                RuntimeVersion.validateProtobufGencodeVersion(RuntimeVersion.RuntimeDomain.PUBLIC, 4, 33, 0, "", "FeatureSetEditionDefault");
                DEFAULT_INSTANCE = new FeatureSetEditionDefault();
                PARSER = new AbstractParser<FeatureSetEditionDefault>() {
                    @Override
                    public FeatureSetEditionDefault parsePartialFrom(final CodedInputStream input, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
                        final Builder builder = FeatureSetEditionDefault.newBuilder();
                        try {
                            builder.mergeFrom(input, extensionRegistry);
                        }
                        catch (final InvalidProtocolBufferException e) {
                            throw e.setUnfinishedMessage(builder.buildPartial());
                        }
                        catch (final UninitializedMessageException e2) {
                            throw e2.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
                        }
                        catch (final IOException e3) {
                            throw new InvalidProtocolBufferException(e3).setUnfinishedMessage(builder.buildPartial());
                        }
                        return builder.buildPartial();
                    }
                };
            }
            
            public static final class Builder extends GeneratedMessage.Builder<Builder> implements FeatureSetEditionDefaultOrBuilder
            {
                private int bitField0_;
                private int edition_;
                private FeatureSet overridableFeatures_;
                private SingleFieldBuilder<FeatureSet, FeatureSet.Builder, FeatureSetOrBuilder> overridableFeaturesBuilder_;
                private FeatureSet fixedFeatures_;
                private SingleFieldBuilder<FeatureSet, FeatureSet.Builder, FeatureSetOrBuilder> fixedFeaturesBuilder_;
                
                public static final Descriptors.Descriptor getDescriptor() {
                    return DescriptorProtos.internal_static_google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault_descriptor;
                }
                
                @Override
                protected FieldAccessorTable internalGetFieldAccessorTable() {
                    return DescriptorProtos.internal_static_google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault_fieldAccessorTable.ensureFieldAccessorsInitialized(FeatureSetEditionDefault.class, Builder.class);
                }
                
                private Builder() {
                    this.edition_ = 0;
                    this.maybeForceBuilderInitialization();
                }
                
                private Builder(final BuilderParent parent) {
                    super(parent);
                    this.edition_ = 0;
                    this.maybeForceBuilderInitialization();
                }
                
                private void maybeForceBuilderInitialization() {
                    if (GeneratedMessage.alwaysUseFieldBuilders) {
                        this.internalGetOverridableFeaturesFieldBuilder();
                        this.internalGetFixedFeaturesFieldBuilder();
                    }
                }
                
                @Override
                public Builder clear() {
                    super.clear();
                    this.bitField0_ = 0;
                    this.edition_ = 0;
                    this.overridableFeatures_ = null;
                    if (this.overridableFeaturesBuilder_ != null) {
                        this.overridableFeaturesBuilder_.dispose();
                        this.overridableFeaturesBuilder_ = null;
                    }
                    this.fixedFeatures_ = null;
                    if (this.fixedFeaturesBuilder_ != null) {
                        this.fixedFeaturesBuilder_.dispose();
                        this.fixedFeaturesBuilder_ = null;
                    }
                    return this;
                }
                
                @Override
                public Descriptors.Descriptor getDescriptorForType() {
                    return DescriptorProtos.internal_static_google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault_descriptor;
                }
                
                @Override
                public FeatureSetEditionDefault getDefaultInstanceForType() {
                    return FeatureSetEditionDefault.getDefaultInstance();
                }
                
                @Override
                public FeatureSetEditionDefault build() {
                    final FeatureSetEditionDefault result = this.buildPartial();
                    if (!result.isInitialized()) {
                        throw AbstractMessage.Builder.newUninitializedMessageException(result);
                    }
                    return result;
                }
                
                @Override
                public FeatureSetEditionDefault buildPartial() {
                    final FeatureSetEditionDefault result = new FeatureSetEditionDefault((GeneratedMessage.Builder)this);
                    if (this.bitField0_ != 0) {
                        this.buildPartial0(result);
                    }
                    this.onBuilt();
                    return result;
                }
                
                private void buildPartial0(final FeatureSetEditionDefault result) {
                    final int from_bitField0_ = this.bitField0_;
                    int to_bitField0_ = 0;
                    if ((from_bitField0_ & 0x1) != 0x0) {
                        result.edition_ = this.edition_;
                        to_bitField0_ |= 0x1;
                    }
                    if ((from_bitField0_ & 0x2) != 0x0) {
                        result.overridableFeatures_ = ((this.overridableFeaturesBuilder_ == null) ? this.overridableFeatures_ : this.overridableFeaturesBuilder_.build());
                        to_bitField0_ |= 0x2;
                    }
                    if ((from_bitField0_ & 0x4) != 0x0) {
                        result.fixedFeatures_ = ((this.fixedFeaturesBuilder_ == null) ? this.fixedFeatures_ : this.fixedFeaturesBuilder_.build());
                        to_bitField0_ |= 0x4;
                    }
                    result.bitField0_ |= to_bitField0_;
                }
                
                @Override
                public Builder mergeFrom(final Message other) {
                    if (other instanceof FeatureSetEditionDefault) {
                        return this.mergeFrom((FeatureSetEditionDefault)other);
                    }
                    super.mergeFrom(other);
                    return this;
                }
                
                public Builder mergeFrom(final FeatureSetEditionDefault other) {
                    if (other == FeatureSetEditionDefault.getDefaultInstance()) {
                        return this;
                    }
                    if (other.hasEdition()) {
                        this.setEdition(other.getEdition());
                    }
                    if (other.hasOverridableFeatures()) {
                        this.mergeOverridableFeatures(other.getOverridableFeatures());
                    }
                    if (other.hasFixedFeatures()) {
                        this.mergeFixedFeatures(other.getFixedFeatures());
                    }
                    this.mergeUnknownFields(other.getUnknownFields());
                    this.onChanged();
                    return this;
                }
                
                @Override
                public final boolean isInitialized() {
                    return (!this.hasOverridableFeatures() || this.getOverridableFeatures().isInitialized()) && (!this.hasFixedFeatures() || this.getFixedFeatures().isInitialized());
                }
                
                @Override
                public Builder mergeFrom(final CodedInputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
                    if (extensionRegistry == null) {
                        throw new NullPointerException();
                    }
                    try {
                        boolean done = false;
                        while (!done) {
                            final int tag = input.readTag();
                            switch (tag) {
                                case 0: {
                                    done = true;
                                    continue;
                                }
                                case 24: {
                                    final int tmpRaw = input.readEnum();
                                    final Edition tmpValue = Edition.forNumber(tmpRaw);
                                    if (tmpValue == null) {
                                        this.mergeUnknownVarintField(3, tmpRaw);
                                        continue;
                                    }
                                    this.edition_ = tmpRaw;
                                    this.bitField0_ |= 0x1;
                                    continue;
                                }
                                case 34: {
                                    input.readMessage(this.internalGetOverridableFeaturesFieldBuilder().getBuilder(), extensionRegistry);
                                    this.bitField0_ |= 0x2;
                                    continue;
                                }
                                case 42: {
                                    input.readMessage(this.internalGetFixedFeaturesFieldBuilder().getBuilder(), extensionRegistry);
                                    this.bitField0_ |= 0x4;
                                    continue;
                                }
                                default: {
                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                                        done = true;
                                        continue;
                                    }
                                    continue;
                                }
                            }
                        }
                    }
                    catch (final InvalidProtocolBufferException e) {
                        throw e.unwrapIOException();
                    }
                    finally {
                        this.onChanged();
                    }
                    return this;
                }
                
                @Override
                public boolean hasEdition() {
                    return (this.bitField0_ & 0x1) != 0x0;
                }
                
                @Override
                public Edition getEdition() {
                    final Edition result = Edition.forNumber(this.edition_);
                    return (result == null) ? Edition.EDITION_UNKNOWN : result;
                }
                
                public Builder setEdition(final Edition value) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.bitField0_ |= 0x1;
                    this.edition_ = value.getNumber();
                    this.onChanged();
                    return this;
                }
                
                public Builder clearEdition() {
                    this.bitField0_ &= 0xFFFFFFFE;
                    this.edition_ = 0;
                    this.onChanged();
                    return this;
                }
                
                @Override
                public boolean hasOverridableFeatures() {
                    return (this.bitField0_ & 0x2) != 0x0;
                }
                
                @Override
                public FeatureSet getOverridableFeatures() {
                    if (this.overridableFeaturesBuilder_ == null) {
                        return (this.overridableFeatures_ == null) ? FeatureSet.getDefaultInstance() : this.overridableFeatures_;
                    }
                    return this.overridableFeaturesBuilder_.getMessage();
                }
                
                public Builder setOverridableFeatures(final FeatureSet value) {
                    if (this.overridableFeaturesBuilder_ == null) {
                        if (value == null) {
                            throw new NullPointerException();
                        }
                        this.overridableFeatures_ = value;
                    }
                    else {
                        this.overridableFeaturesBuilder_.setMessage(value);
                    }
                    this.bitField0_ |= 0x2;
                    this.onChanged();
                    return this;
                }
                
                public Builder setOverridableFeatures(final FeatureSet.Builder builderForValue) {
                    if (this.overridableFeaturesBuilder_ == null) {
                        this.overridableFeatures_ = builderForValue.build();
                    }
                    else {
                        this.overridableFeaturesBuilder_.setMessage(builderForValue.build());
                    }
                    this.bitField0_ |= 0x2;
                    this.onChanged();
                    return this;
                }
                
                public Builder mergeOverridableFeatures(final FeatureSet value) {
                    if (this.overridableFeaturesBuilder_ == null) {
                        if ((this.bitField0_ & 0x2) != 0x0 && this.overridableFeatures_ != null && this.overridableFeatures_ != FeatureSet.getDefaultInstance()) {
                            this.getOverridableFeaturesBuilder().mergeFrom(value);
                        }
                        else {
                            this.overridableFeatures_ = value;
                        }
                    }
                    else {
                        this.overridableFeaturesBuilder_.mergeFrom(value);
                    }
                    if (this.overridableFeatures_ != null) {
                        this.bitField0_ |= 0x2;
                        this.onChanged();
                    }
                    return this;
                }
                
                public Builder clearOverridableFeatures() {
                    this.bitField0_ &= 0xFFFFFFFD;
                    this.overridableFeatures_ = null;
                    if (this.overridableFeaturesBuilder_ != null) {
                        this.overridableFeaturesBuilder_.dispose();
                        this.overridableFeaturesBuilder_ = null;
                    }
                    this.onChanged();
                    return this;
                }
                
                public FeatureSet.Builder getOverridableFeaturesBuilder() {
                    this.bitField0_ |= 0x2;
                    this.onChanged();
                    return this.internalGetOverridableFeaturesFieldBuilder().getBuilder();
                }
                
                @Override
                public FeatureSetOrBuilder getOverridableFeaturesOrBuilder() {
                    if (this.overridableFeaturesBuilder_ != null) {
                        return this.overridableFeaturesBuilder_.getMessageOrBuilder();
                    }
                    return (this.overridableFeatures_ == null) ? FeatureSet.getDefaultInstance() : this.overridableFeatures_;
                }
                
                private SingleFieldBuilder<FeatureSet, FeatureSet.Builder, FeatureSetOrBuilder> internalGetOverridableFeaturesFieldBuilder() {
                    if (this.overridableFeaturesBuilder_ == null) {
                        this.overridableFeaturesBuilder_ = new SingleFieldBuilder<FeatureSet, FeatureSet.Builder, FeatureSetOrBuilder>(this.getOverridableFeatures(), this.getParentForChildren(), this.isClean());
                        this.overridableFeatures_ = null;
                    }
                    return this.overridableFeaturesBuilder_;
                }
                
                @Override
                public boolean hasFixedFeatures() {
                    return (this.bitField0_ & 0x4) != 0x0;
                }
                
                @Override
                public FeatureSet getFixedFeatures() {
                    if (this.fixedFeaturesBuilder_ == null) {
                        return (this.fixedFeatures_ == null) ? FeatureSet.getDefaultInstance() : this.fixedFeatures_;
                    }
                    return this.fixedFeaturesBuilder_.getMessage();
                }
                
                public Builder setFixedFeatures(final FeatureSet value) {
                    if (this.fixedFeaturesBuilder_ == null) {
                        if (value == null) {
                            throw new NullPointerException();
                        }
                        this.fixedFeatures_ = value;
                    }
                    else {
                        this.fixedFeaturesBuilder_.setMessage(value);
                    }
                    this.bitField0_ |= 0x4;
                    this.onChanged();
                    return this;
                }
                
                public Builder setFixedFeatures(final FeatureSet.Builder builderForValue) {
                    if (this.fixedFeaturesBuilder_ == null) {
                        this.fixedFeatures_ = builderForValue.build();
                    }
                    else {
                        this.fixedFeaturesBuilder_.setMessage(builderForValue.build());
                    }
                    this.bitField0_ |= 0x4;
                    this.onChanged();
                    return this;
                }
                
                public Builder mergeFixedFeatures(final FeatureSet value) {
                    if (this.fixedFeaturesBuilder_ == null) {
                        if ((this.bitField0_ & 0x4) != 0x0 && this.fixedFeatures_ != null && this.fixedFeatures_ != FeatureSet.getDefaultInstance()) {
                            this.getFixedFeaturesBuilder().mergeFrom(value);
                        }
                        else {
                            this.fixedFeatures_ = value;
                        }
                    }
                    else {
                        this.fixedFeaturesBuilder_.mergeFrom(value);
                    }
                    if (this.fixedFeatures_ != null) {
                        this.bitField0_ |= 0x4;
                        this.onChanged();
                    }
                    return this;
                }
                
                public Builder clearFixedFeatures() {
                    this.bitField0_ &= 0xFFFFFFFB;
                    this.fixedFeatures_ = null;
                    if (this.fixedFeaturesBuilder_ != null) {
                        this.fixedFeaturesBuilder_.dispose();
                        this.fixedFeaturesBuilder_ = null;
                    }
                    this.onChanged();
                    return this;
                }
                
                public FeatureSet.Builder getFixedFeaturesBuilder() {
                    this.bitField0_ |= 0x4;
                    this.onChanged();
                    return this.internalGetFixedFeaturesFieldBuilder().getBuilder();
                }
                
                @Override
                public FeatureSetOrBuilder getFixedFeaturesOrBuilder() {
                    if (this.fixedFeaturesBuilder_ != null) {
                        return this.fixedFeaturesBuilder_.getMessageOrBuilder();
                    }
                    return (this.fixedFeatures_ == null) ? FeatureSet.getDefaultInstance() : this.fixedFeatures_;
                }
                
                private SingleFieldBuilder<FeatureSet, FeatureSet.Builder, FeatureSetOrBuilder> internalGetFixedFeaturesFieldBuilder() {
                    if (this.fixedFeaturesBuilder_ == null) {
                        this.fixedFeaturesBuilder_ = new SingleFieldBuilder<FeatureSet, FeatureSet.Builder, FeatureSetOrBuilder>(this.getFixedFeatures(), this.getParentForChildren(), this.isClean());
                        this.fixedFeatures_ = null;
                    }
                    return this.fixedFeaturesBuilder_;
                }
            }
        }
        
        public static final class Builder extends GeneratedMessage.Builder<Builder> implements FeatureSetDefaultsOrBuilder
        {
            private int bitField0_;
            private List<FeatureSetEditionDefault> defaults_;
            private RepeatedFieldBuilder<FeatureSetEditionDefault, FeatureSetEditionDefault.Builder, FeatureSetEditionDefaultOrBuilder> defaultsBuilder_;
            private int minimumEdition_;
            private int maximumEdition_;
            
            public static final Descriptors.Descriptor getDescriptor() {
                return DescriptorProtos.internal_static_google_protobuf_FeatureSetDefaults_descriptor;
            }
            
            @Override
            protected FieldAccessorTable internalGetFieldAccessorTable() {
                return DescriptorProtos.internal_static_google_protobuf_FeatureSetDefaults_fieldAccessorTable.ensureFieldAccessorsInitialized(FeatureSetDefaults.class, Builder.class);
            }
            
            private Builder() {
                this.defaults_ = Collections.emptyList();
                this.minimumEdition_ = 0;
                this.maximumEdition_ = 0;
            }
            
            private Builder(final BuilderParent parent) {
                super(parent);
                this.defaults_ = Collections.emptyList();
                this.minimumEdition_ = 0;
                this.maximumEdition_ = 0;
            }
            
            @Override
            public Builder clear() {
                super.clear();
                this.bitField0_ = 0;
                if (this.defaultsBuilder_ == null) {
                    this.defaults_ = Collections.emptyList();
                }
                else {
                    this.defaults_ = null;
                    this.defaultsBuilder_.clear();
                }
                this.bitField0_ &= 0xFFFFFFFE;
                this.minimumEdition_ = 0;
                this.maximumEdition_ = 0;
                return this;
            }
            
            @Override
            public Descriptors.Descriptor getDescriptorForType() {
                return DescriptorProtos.internal_static_google_protobuf_FeatureSetDefaults_descriptor;
            }
            
            @Override
            public FeatureSetDefaults getDefaultInstanceForType() {
                return FeatureSetDefaults.getDefaultInstance();
            }
            
            @Override
            public FeatureSetDefaults build() {
                final FeatureSetDefaults result = this.buildPartial();
                if (!result.isInitialized()) {
                    throw AbstractMessage.Builder.newUninitializedMessageException(result);
                }
                return result;
            }
            
            @Override
            public FeatureSetDefaults buildPartial() {
                final FeatureSetDefaults result = new FeatureSetDefaults((GeneratedMessage.Builder)this);
                this.buildPartialRepeatedFields(result);
                if (this.bitField0_ != 0) {
                    this.buildPartial0(result);
                }
                this.onBuilt();
                return result;
            }
            
            private void buildPartialRepeatedFields(final FeatureSetDefaults result) {
                if (this.defaultsBuilder_ == null) {
                    if ((this.bitField0_ & 0x1) != 0x0) {
                        this.defaults_ = Collections.unmodifiableList((List<? extends FeatureSetEditionDefault>)this.defaults_);
                        this.bitField0_ &= 0xFFFFFFFE;
                    }
                    result.defaults_ = this.defaults_;
                }
                else {
                    result.defaults_ = this.defaultsBuilder_.build();
                }
            }
            
            private void buildPartial0(final FeatureSetDefaults result) {
                final int from_bitField0_ = this.bitField0_;
                int to_bitField0_ = 0;
                if ((from_bitField0_ & 0x2) != 0x0) {
                    result.minimumEdition_ = this.minimumEdition_;
                    to_bitField0_ |= 0x1;
                }
                if ((from_bitField0_ & 0x4) != 0x0) {
                    result.maximumEdition_ = this.maximumEdition_;
                    to_bitField0_ |= 0x2;
                }
                result.bitField0_ |= to_bitField0_;
            }
            
            @Override
            public Builder mergeFrom(final Message other) {
                if (other instanceof FeatureSetDefaults) {
                    return this.mergeFrom((FeatureSetDefaults)other);
                }
                super.mergeFrom(other);
                return this;
            }
            
            public Builder mergeFrom(final FeatureSetDefaults other) {
                if (other == FeatureSetDefaults.getDefaultInstance()) {
                    return this;
                }
                if (this.defaultsBuilder_ == null) {
                    if (!other.defaults_.isEmpty()) {
                        if (this.defaults_.isEmpty()) {
                            this.defaults_ = other.defaults_;
                            this.bitField0_ &= 0xFFFFFFFE;
                        }
                        else {
                            this.ensureDefaultsIsMutable();
                            this.defaults_.addAll(other.defaults_);
                        }
                        this.onChanged();
                    }
                }
                else if (!other.defaults_.isEmpty()) {
                    if (this.defaultsBuilder_.isEmpty()) {
                        this.defaultsBuilder_.dispose();
                        this.defaultsBuilder_ = null;
                        this.defaults_ = other.defaults_;
                        this.bitField0_ &= 0xFFFFFFFE;
                        this.defaultsBuilder_ = (GeneratedMessage.alwaysUseFieldBuilders ? this.internalGetDefaultsFieldBuilder() : null);
                    }
                    else {
                        this.defaultsBuilder_.addAllMessages(other.defaults_);
                    }
                }
                if (other.hasMinimumEdition()) {
                    this.setMinimumEdition(other.getMinimumEdition());
                }
                if (other.hasMaximumEdition()) {
                    this.setMaximumEdition(other.getMaximumEdition());
                }
                this.mergeUnknownFields(other.getUnknownFields());
                this.onChanged();
                return this;
            }
            
            @Override
            public final boolean isInitialized() {
                for (int i = 0; i < this.getDefaultsCount(); ++i) {
                    if (!this.getDefaults(i).isInitialized()) {
                        return false;
                    }
                }
                return true;
            }
            
            @Override
            public Builder mergeFrom(final CodedInputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
                if (extensionRegistry == null) {
                    throw new NullPointerException();
                }
                try {
                    boolean done = false;
                    while (!done) {
                        final int tag = input.readTag();
                        switch (tag) {
                            case 0: {
                                done = true;
                                continue;
                            }
                            case 10: {
                                final FeatureSetEditionDefault m = input.readMessage(FeatureSetEditionDefault.parser(), extensionRegistry);
                                if (this.defaultsBuilder_ == null) {
                                    this.ensureDefaultsIsMutable();
                                    this.defaults_.add(m);
                                    continue;
                                }
                                this.defaultsBuilder_.addMessage(m);
                                continue;
                            }
                            case 32: {
                                final int tmpRaw = input.readEnum();
                                final Edition tmpValue = Edition.forNumber(tmpRaw);
                                if (tmpValue == null) {
                                    this.mergeUnknownVarintField(4, tmpRaw);
                                    continue;
                                }
                                this.minimumEdition_ = tmpRaw;
                                this.bitField0_ |= 0x2;
                                continue;
                            }
                            case 40: {
                                final int tmpRaw = input.readEnum();
                                final Edition tmpValue = Edition.forNumber(tmpRaw);
                                if (tmpValue == null) {
                                    this.mergeUnknownVarintField(5, tmpRaw);
                                    continue;
                                }
                                this.maximumEdition_ = tmpRaw;
                                this.bitField0_ |= 0x4;
                                continue;
                            }
                            default: {
                                if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                                    done = true;
                                    continue;
                                }
                                continue;
                            }
                        }
                    }
                }
                catch (final InvalidProtocolBufferException e) {
                    throw e.unwrapIOException();
                }
                finally {
                    this.onChanged();
                }
                return this;
            }
            
            private void ensureDefaultsIsMutable() {
                if ((this.bitField0_ & 0x1) == 0x0) {
                    this.defaults_ = new ArrayList<FeatureSetEditionDefault>(this.defaults_);
                    this.bitField0_ |= 0x1;
                }
            }
            
            @Override
            public List<FeatureSetEditionDefault> getDefaultsList() {
                if (this.defaultsBuilder_ == null) {
                    return Collections.unmodifiableList((List<? extends FeatureSetEditionDefault>)this.defaults_);
                }
                return this.defaultsBuilder_.getMessageList();
            }
            
            @Override
            public int getDefaultsCount() {
                if (this.defaultsBuilder_ == null) {
                    return this.defaults_.size();
                }
                return this.defaultsBuilder_.getCount();
            }
            
            @Override
            public FeatureSetEditionDefault getDefaults(final int index) {
                if (this.defaultsBuilder_ == null) {
                    return this.defaults_.get(index);
                }
                return this.defaultsBuilder_.getMessage(index);
            }
            
            public Builder setDefaults(final int index, final FeatureSetEditionDefault value) {
                if (this.defaultsBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.ensureDefaultsIsMutable();
                    this.defaults_.set(index, value);
                    this.onChanged();
                }
                else {
                    this.defaultsBuilder_.setMessage(index, value);
                }
                return this;
            }
            
            public Builder setDefaults(final int index, final FeatureSetEditionDefault.Builder builderForValue) {
                if (this.defaultsBuilder_ == null) {
                    this.ensureDefaultsIsMutable();
                    this.defaults_.set(index, builderForValue.build());
                    this.onChanged();
                }
                else {
                    this.defaultsBuilder_.setMessage(index, builderForValue.build());
                }
                return this;
            }
            
            public Builder addDefaults(final FeatureSetEditionDefault value) {
                if (this.defaultsBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.ensureDefaultsIsMutable();
                    this.defaults_.add(value);
                    this.onChanged();
                }
                else {
                    this.defaultsBuilder_.addMessage(value);
                }
                return this;
            }
            
            public Builder addDefaults(final int index, final FeatureSetEditionDefault value) {
                if (this.defaultsBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.ensureDefaultsIsMutable();
                    this.defaults_.add(index, value);
                    this.onChanged();
                }
                else {
                    this.defaultsBuilder_.addMessage(index, value);
                }
                return this;
            }
            
            public Builder addDefaults(final FeatureSetEditionDefault.Builder builderForValue) {
                if (this.defaultsBuilder_ == null) {
                    this.ensureDefaultsIsMutable();
                    this.defaults_.add(builderForValue.build());
                    this.onChanged();
                }
                else {
                    this.defaultsBuilder_.addMessage(builderForValue.build());
                }
                return this;
            }
            
            public Builder addDefaults(final int index, final FeatureSetEditionDefault.Builder builderForValue) {
                if (this.defaultsBuilder_ == null) {
                    this.ensureDefaultsIsMutable();
                    this.defaults_.add(index, builderForValue.build());
                    this.onChanged();
                }
                else {
                    this.defaultsBuilder_.addMessage(index, builderForValue.build());
                }
                return this;
            }
            
            public Builder addAllDefaults(final Iterable<? extends FeatureSetEditionDefault> values) {
                if (this.defaultsBuilder_ == null) {
                    this.ensureDefaultsIsMutable();
                    AbstractMessageLite.Builder.addAll(values, this.defaults_);
                    this.onChanged();
                }
                else {
                    this.defaultsBuilder_.addAllMessages(values);
                }
                return this;
            }
            
            public Builder clearDefaults() {
                if (this.defaultsBuilder_ == null) {
                    this.defaults_ = Collections.emptyList();
                    this.bitField0_ &= 0xFFFFFFFE;
                    this.onChanged();
                }
                else {
                    this.defaultsBuilder_.clear();
                }
                return this;
            }
            
            public Builder removeDefaults(final int index) {
                if (this.defaultsBuilder_ == null) {
                    this.ensureDefaultsIsMutable();
                    this.defaults_.remove(index);
                    this.onChanged();
                }
                else {
                    this.defaultsBuilder_.remove(index);
                }
                return this;
            }
            
            public FeatureSetEditionDefault.Builder getDefaultsBuilder(final int index) {
                return this.internalGetDefaultsFieldBuilder().getBuilder(index);
            }
            
            @Override
            public FeatureSetEditionDefaultOrBuilder getDefaultsOrBuilder(final int index) {
                if (this.defaultsBuilder_ == null) {
                    return this.defaults_.get(index);
                }
                return this.defaultsBuilder_.getMessageOrBuilder(index);
            }
            
            @Override
            public List<? extends FeatureSetEditionDefaultOrBuilder> getDefaultsOrBuilderList() {
                if (this.defaultsBuilder_ != null) {
                    return this.defaultsBuilder_.getMessageOrBuilderList();
                }
                return Collections.unmodifiableList((List<? extends FeatureSetEditionDefaultOrBuilder>)this.defaults_);
            }
            
            public FeatureSetEditionDefault.Builder addDefaultsBuilder() {
                return this.internalGetDefaultsFieldBuilder().addBuilder(FeatureSetEditionDefault.getDefaultInstance());
            }
            
            public FeatureSetEditionDefault.Builder addDefaultsBuilder(final int index) {
                return this.internalGetDefaultsFieldBuilder().addBuilder(index, FeatureSetEditionDefault.getDefaultInstance());
            }
            
            public List<FeatureSetEditionDefault.Builder> getDefaultsBuilderList() {
                return this.internalGetDefaultsFieldBuilder().getBuilderList();
            }
            
            private RepeatedFieldBuilder<FeatureSetEditionDefault, FeatureSetEditionDefault.Builder, FeatureSetEditionDefaultOrBuilder> internalGetDefaultsFieldBuilder() {
                if (this.defaultsBuilder_ == null) {
                    this.defaultsBuilder_ = new RepeatedFieldBuilder<FeatureSetEditionDefault, FeatureSetEditionDefault.Builder, FeatureSetEditionDefaultOrBuilder>(this.defaults_, (this.bitField0_ & 0x1) != 0x0, this.getParentForChildren(), this.isClean());
                    this.defaults_ = null;
                }
                return this.defaultsBuilder_;
            }
            
            @Override
            public boolean hasMinimumEdition() {
                return (this.bitField0_ & 0x2) != 0x0;
            }
            
            @Override
            public Edition getMinimumEdition() {
                final Edition result = Edition.forNumber(this.minimumEdition_);
                return (result == null) ? Edition.EDITION_UNKNOWN : result;
            }
            
            public Builder setMinimumEdition(final Edition value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                this.bitField0_ |= 0x2;
                this.minimumEdition_ = value.getNumber();
                this.onChanged();
                return this;
            }
            
            public Builder clearMinimumEdition() {
                this.bitField0_ &= 0xFFFFFFFD;
                this.minimumEdition_ = 0;
                this.onChanged();
                return this;
            }
            
            @Override
            public boolean hasMaximumEdition() {
                return (this.bitField0_ & 0x4) != 0x0;
            }
            
            @Override
            public Edition getMaximumEdition() {
                final Edition result = Edition.forNumber(this.maximumEdition_);
                return (result == null) ? Edition.EDITION_UNKNOWN : result;
            }
            
            public Builder setMaximumEdition(final Edition value) {
                if (value == null) {
                    throw new NullPointerException();
                }
                this.bitField0_ |= 0x4;
                this.maximumEdition_ = value.getNumber();
                this.onChanged();
                return this;
            }
            
            public Builder clearMaximumEdition() {
                this.bitField0_ &= 0xFFFFFFFB;
                this.maximumEdition_ = 0;
                this.onChanged();
                return this;
            }
        }
        
        public interface FeatureSetEditionDefaultOrBuilder extends MessageOrBuilder
        {
            boolean hasEdition();
            
            Edition getEdition();
            
            boolean hasOverridableFeatures();
            
            FeatureSet getOverridableFeatures();
            
            FeatureSetOrBuilder getOverridableFeaturesOrBuilder();
            
            boolean hasFixedFeatures();
            
            FeatureSet getFixedFeatures();
            
            FeatureSetOrBuilder getFixedFeaturesOrBuilder();
        }
    }
    
    public static final class SourceCodeInfo extends ExtendableMessage<SourceCodeInfo> implements SourceCodeInfoOrBuilder
    {
        private static final long serialVersionUID = 0L;
        public static final int LOCATION_FIELD_NUMBER = 1;
        private List<Location> location_;
        private byte memoizedIsInitialized;
        private static final SourceCodeInfo DEFAULT_INSTANCE;
        private static final Parser<SourceCodeInfo> PARSER;
        
        private SourceCodeInfo(final ExtendableBuilder<SourceCodeInfo, ?> builder) {
            super(builder);
            this.memoizedIsInitialized = -1;
        }
        
        private SourceCodeInfo() {
            this.memoizedIsInitialized = -1;
            this.location_ = Collections.emptyList();
        }
        
        public static final Descriptors.Descriptor getDescriptor() {
            return DescriptorProtos.internal_static_google_protobuf_SourceCodeInfo_descriptor;
        }
        
        @Override
        protected FieldAccessorTable internalGetFieldAccessorTable() {
            return DescriptorProtos.internal_static_google_protobuf_SourceCodeInfo_fieldAccessorTable.ensureFieldAccessorsInitialized(SourceCodeInfo.class, Builder.class);
        }
        
        @Override
        public List<Location> getLocationList() {
            return this.location_;
        }
        
        @Override
        public List<? extends LocationOrBuilder> getLocationOrBuilderList() {
            return this.location_;
        }
        
        @Override
        public int getLocationCount() {
            return this.location_.size();
        }
        
        @Override
        public Location getLocation(final int index) {
            return this.location_.get(index);
        }
        
        @Override
        public LocationOrBuilder getLocationOrBuilder(final int index) {
            return this.location_.get(index);
        }
        
        @Override
        public final boolean isInitialized() {
            final byte isInitialized = this.memoizedIsInitialized;
            if (isInitialized == 1) {
                return true;
            }
            if (isInitialized == 0) {
                return false;
            }
            if (!this.extensionsAreInitialized()) {
                this.memoizedIsInitialized = 0;
                return false;
            }
            this.memoizedIsInitialized = 1;
            return true;
        }
        
        @Override
        public void writeTo(final CodedOutputStream output) throws IOException {
            final ExtensionSerializer extensionWriter = this.newExtensionSerializer();
            for (int i = 0; i < this.location_.size(); ++i) {
                output.writeMessage(1, this.location_.get(i));
            }
            extensionWriter.writeUntil(536000001, output);
            this.getUnknownFields().writeTo(output);
        }
        
        @Override
        public int getSerializedSize() {
            int size = this.memoizedSize;
            if (size != -1) {
                return size;
            }
            size = 0;
            for (int i = 0; i < this.location_.size(); ++i) {
                size += CodedOutputStream.computeMessageSize(1, this.location_.get(i));
            }
            size += this.extensionsSerializedSize();
            size += this.getUnknownFields().getSerializedSize();
            return this.memoizedSize = size;
        }
        
        @Override
        public boolean equals(final Object obj) {
            if (obj == this) {
                return true;
            }
            if (!(obj instanceof SourceCodeInfo)) {
                return super.equals(obj);
            }
            final SourceCodeInfo other = (SourceCodeInfo)obj;
            return this.getLocationList().equals(other.getLocationList()) && this.getUnknownFields().equals(other.getUnknownFields()) && this.getExtensionFields().equals(other.getExtensionFields());
        }
        
        @Override
        public int hashCode() {
            if (this.memoizedHashCode != 0) {
                return this.memoizedHashCode;
            }
            int hash = 41;
            hash = 19 * hash + getDescriptor().hashCode();
            if (this.getLocationCount() > 0) {
                hash = 37 * hash + 1;
                hash = 53 * hash + this.getLocationList().hashCode();
            }
            hash = AbstractMessage.hashFields(hash, this.getExtensionFields());
            hash = 29 * hash + this.getUnknownFields().hashCode();
            return this.memoizedHashCode = hash;
        }
        
        public static SourceCodeInfo parseFrom(final ByteBuffer data) throws InvalidProtocolBufferException {
            return SourceCodeInfo.PARSER.parseFrom(data);
        }
        
        public static SourceCodeInfo parseFrom(final ByteBuffer data, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
            return SourceCodeInfo.PARSER.parseFrom(data, extensionRegistry);
        }
        
        public static SourceCodeInfo parseFrom(final ByteString data) throws InvalidProtocolBufferException {
            return SourceCodeInfo.PARSER.parseFrom(data);
        }
        
        public static SourceCodeInfo parseFrom(final ByteString data, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
            return SourceCodeInfo.PARSER.parseFrom(data, extensionRegistry);
        }
        
        public static SourceCodeInfo parseFrom(final byte[] data) throws InvalidProtocolBufferException {
            return SourceCodeInfo.PARSER.parseFrom(data);
        }
        
        public static SourceCodeInfo parseFrom(final byte[] data, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
            return SourceCodeInfo.PARSER.parseFrom(data, extensionRegistry);
        }
        
        public static SourceCodeInfo parseFrom(final InputStream input) throws IOException {
            return GeneratedMessage.parseWithIOException(SourceCodeInfo.PARSER, input);
        }
        
        public static SourceCodeInfo parseFrom(final InputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
            return GeneratedMessage.parseWithIOException(SourceCodeInfo.PARSER, input, extensionRegistry);
        }
        
        public static SourceCodeInfo parseDelimitedFrom(final InputStream input) throws IOException {
            return GeneratedMessage.parseDelimitedWithIOException(SourceCodeInfo.PARSER, input);
        }
        
        public static SourceCodeInfo parseDelimitedFrom(final InputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
            return GeneratedMessage.parseDelimitedWithIOException(SourceCodeInfo.PARSER, input, extensionRegistry);
        }
        
        public static SourceCodeInfo parseFrom(final CodedInputStream input) throws IOException {
            return GeneratedMessage.parseWithIOException(SourceCodeInfo.PARSER, input);
        }
        
        public static SourceCodeInfo parseFrom(final CodedInputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
            return GeneratedMessage.parseWithIOException(SourceCodeInfo.PARSER, input, extensionRegistry);
        }
        
        @Override
        public Builder newBuilderForType() {
            return newBuilder();
        }
        
        public static Builder newBuilder() {
            return SourceCodeInfo.DEFAULT_INSTANCE.toBuilder();
        }
        
        public static Builder newBuilder(final SourceCodeInfo prototype) {
            return SourceCodeInfo.DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
        }
        
        @Override
        public Builder toBuilder() {
            return (this == SourceCodeInfo.DEFAULT_INSTANCE) ? new Builder() : new Builder().mergeFrom(this);
        }
        
        @Override
        protected Builder newBuilderForType(final BuilderParent parent) {
            final Builder builder = new Builder(parent);
            return builder;
        }
        
        public static SourceCodeInfo getDefaultInstance() {
            return SourceCodeInfo.DEFAULT_INSTANCE;
        }
        
        public static Parser<SourceCodeInfo> parser() {
            return SourceCodeInfo.PARSER;
        }
        
        @Override
        public Parser<SourceCodeInfo> getParserForType() {
            return SourceCodeInfo.PARSER;
        }
        
        @Override
        public SourceCodeInfo getDefaultInstanceForType() {
            return SourceCodeInfo.DEFAULT_INSTANCE;
        }
        
        static {
            RuntimeVersion.validateProtobufGencodeVersion(RuntimeVersion.RuntimeDomain.PUBLIC, 4, 33, 0, "", "SourceCodeInfo");
            DEFAULT_INSTANCE = new SourceCodeInfo();
            PARSER = new AbstractParser<SourceCodeInfo>() {
                @Override
                public SourceCodeInfo parsePartialFrom(final CodedInputStream input, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
                    final Builder builder = SourceCodeInfo.newBuilder();
                    try {
                        builder.mergeFrom(input, extensionRegistry);
                    }
                    catch (final InvalidProtocolBufferException e) {
                        throw e.setUnfinishedMessage(builder.buildPartial());
                    }
                    catch (final UninitializedMessageException e2) {
                        throw e2.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
                    }
                    catch (final IOException e3) {
                        throw new InvalidProtocolBufferException(e3).setUnfinishedMessage(builder.buildPartial());
                    }
                    return builder.buildPartial();
                }
            };
        }
        
        public static final class Location extends GeneratedMessage implements LocationOrBuilder
        {
            private static final long serialVersionUID = 0L;
            private int bitField0_;
            public static final int PATH_FIELD_NUMBER = 1;
            private Internal.IntList path_;
            private int pathMemoizedSerializedSize;
            public static final int SPAN_FIELD_NUMBER = 2;
            private Internal.IntList span_;
            private int spanMemoizedSerializedSize;
            public static final int LEADING_COMMENTS_FIELD_NUMBER = 3;
            private volatile Object leadingComments_;
            public static final int TRAILING_COMMENTS_FIELD_NUMBER = 4;
            private volatile Object trailingComments_;
            public static final int LEADING_DETACHED_COMMENTS_FIELD_NUMBER = 6;
            private LazyStringArrayList leadingDetachedComments_;
            private byte memoizedIsInitialized;
            private static final Location DEFAULT_INSTANCE;
            private static final Parser<Location> PARSER;
            
            private Location(final GeneratedMessage.Builder<?> builder) {
                super(builder);
                this.path_ = GeneratedMessage.emptyIntList();
                this.pathMemoizedSerializedSize = -1;
                this.span_ = GeneratedMessage.emptyIntList();
                this.spanMemoizedSerializedSize = -1;
                this.leadingComments_ = "";
                this.trailingComments_ = "";
                this.leadingDetachedComments_ = LazyStringArrayList.emptyList();
                this.memoizedIsInitialized = -1;
            }
            
            private Location() {
                this.path_ = GeneratedMessage.emptyIntList();
                this.pathMemoizedSerializedSize = -1;
                this.span_ = GeneratedMessage.emptyIntList();
                this.spanMemoizedSerializedSize = -1;
                this.leadingComments_ = "";
                this.trailingComments_ = "";
                this.leadingDetachedComments_ = LazyStringArrayList.emptyList();
                this.memoizedIsInitialized = -1;
                this.path_ = GeneratedMessage.emptyIntList();
                this.span_ = GeneratedMessage.emptyIntList();
                this.leadingComments_ = "";
                this.trailingComments_ = "";
                this.leadingDetachedComments_ = LazyStringArrayList.emptyList();
            }
            
            public static final Descriptors.Descriptor getDescriptor() {
                return DescriptorProtos.internal_static_google_protobuf_SourceCodeInfo_Location_descriptor;
            }
            
            @Override
            protected FieldAccessorTable internalGetFieldAccessorTable() {
                return DescriptorProtos.internal_static_google_protobuf_SourceCodeInfo_Location_fieldAccessorTable.ensureFieldAccessorsInitialized(Location.class, Builder.class);
            }
            
            @Override
            public List<Integer> getPathList() {
                return this.path_;
            }
            
            @Override
            public int getPathCount() {
                return this.path_.size();
            }
            
            @Override
            public int getPath(final int index) {
                return this.path_.getInt(index);
            }
            
            @Override
            public List<Integer> getSpanList() {
                return this.span_;
            }
            
            @Override
            public int getSpanCount() {
                return this.span_.size();
            }
            
            @Override
            public int getSpan(final int index) {
                return this.span_.getInt(index);
            }
            
            @Override
            public boolean hasLeadingComments() {
                return (this.bitField0_ & 0x1) != 0x0;
            }
            
            @Override
            public String getLeadingComments() {
                final Object ref = this.leadingComments_;
                if (ref instanceof String) {
                    return (String)ref;
                }
                final ByteString bs = (ByteString)ref;
                final String s = bs.toStringUtf8();
                if (bs.isValidUtf8()) {
                    this.leadingComments_ = s;
                }
                return s;
            }
            
            @Override
            public ByteString getLeadingCommentsBytes() {
                final Object ref = this.leadingComments_;
                if (ref instanceof String) {
                    final ByteString b = ByteString.copyFromUtf8((String)ref);
                    return (ByteString)(this.leadingComments_ = b);
                }
                return (ByteString)ref;
            }
            
            @Override
            public boolean hasTrailingComments() {
                return (this.bitField0_ & 0x2) != 0x0;
            }
            
            @Override
            public String getTrailingComments() {
                final Object ref = this.trailingComments_;
                if (ref instanceof String) {
                    return (String)ref;
                }
                final ByteString bs = (ByteString)ref;
                final String s = bs.toStringUtf8();
                if (bs.isValidUtf8()) {
                    this.trailingComments_ = s;
                }
                return s;
            }
            
            @Override
            public ByteString getTrailingCommentsBytes() {
                final Object ref = this.trailingComments_;
                if (ref instanceof String) {
                    final ByteString b = ByteString.copyFromUtf8((String)ref);
                    return (ByteString)(this.trailingComments_ = b);
                }
                return (ByteString)ref;
            }
            
            @Override
            public ProtocolStringList getLeadingDetachedCommentsList() {
                return this.leadingDetachedComments_;
            }
            
            @Override
            public int getLeadingDetachedCommentsCount() {
                return this.leadingDetachedComments_.size();
            }
            
            @Override
            public String getLeadingDetachedComments(final int index) {
                return this.leadingDetachedComments_.get(index);
            }
            
            @Override
            public ByteString getLeadingDetachedCommentsBytes(final int index) {
                return this.leadingDetachedComments_.getByteString(index);
            }
            
            @Override
            public final boolean isInitialized() {
                final byte isInitialized = this.memoizedIsInitialized;
                if (isInitialized == 1) {
                    return true;
                }
                if (isInitialized == 0) {
                    return false;
                }
                this.memoizedIsInitialized = 1;
                return true;
            }
            
            @Override
            public void writeTo(final CodedOutputStream output) throws IOException {
                this.getSerializedSize();
                if (this.getPathList().size() > 0) {
                    output.writeUInt32NoTag(10);
                    output.writeUInt32NoTag(this.pathMemoizedSerializedSize);
                }
                for (int i = 0; i < this.path_.size(); ++i) {
                    output.writeInt32NoTag(this.path_.getInt(i));
                }
                if (this.getSpanList().size() > 0) {
                    output.writeUInt32NoTag(18);
                    output.writeUInt32NoTag(this.spanMemoizedSerializedSize);
                }
                for (int i = 0; i < this.span_.size(); ++i) {
                    output.writeInt32NoTag(this.span_.getInt(i));
                }
                if ((this.bitField0_ & 0x1) != 0x0) {
                    GeneratedMessage.writeString(output, 3, this.leadingComments_);
                }
                if ((this.bitField0_ & 0x2) != 0x0) {
                    GeneratedMessage.writeString(output, 4, this.trailingComments_);
                }
                for (int i = 0; i < this.leadingDetachedComments_.size(); ++i) {
                    GeneratedMessage.writeString(output, 6, this.leadingDetachedComments_.getRaw(i));
                }
                this.getUnknownFields().writeTo(output);
            }
            
            @Override
            public int getSerializedSize() {
                int size = this.memoizedSize;
                if (size != -1) {
                    return size;
                }
                size = 0;
                int dataSize = 0;
                for (int i = 0; i < this.path_.size(); ++i) {
                    dataSize += CodedOutputStream.computeInt32SizeNoTag(this.path_.getInt(i));
                }
                size += dataSize;
                if (!this.getPathList().isEmpty()) {
                    size = ++size + CodedOutputStream.computeInt32SizeNoTag(dataSize);
                }
                this.pathMemoizedSerializedSize = dataSize;
                dataSize = 0;
                for (int i = 0; i < this.span_.size(); ++i) {
                    dataSize += CodedOutputStream.computeInt32SizeNoTag(this.span_.getInt(i));
                }
                size += dataSize;
                if (!this.getSpanList().isEmpty()) {
                    size = ++size + CodedOutputStream.computeInt32SizeNoTag(dataSize);
                }
                this.spanMemoizedSerializedSize = dataSize;
                if ((this.bitField0_ & 0x1) != 0x0) {
                    size += GeneratedMessage.computeStringSize(3, this.leadingComments_);
                }
                if ((this.bitField0_ & 0x2) != 0x0) {
                    size += GeneratedMessage.computeStringSize(4, this.trailingComments_);
                }
                dataSize = 0;
                for (int i = 0; i < this.leadingDetachedComments_.size(); ++i) {
                    dataSize += GeneratedMessage.computeStringSizeNoTag(this.leadingDetachedComments_.getRaw(i));
                }
                size += dataSize;
                size += 1 * this.getLeadingDetachedCommentsList().size();
                size += this.getUnknownFields().getSerializedSize();
                return this.memoizedSize = size;
            }
            
            @Override
            public boolean equals(final Object obj) {
                if (obj == this) {
                    return true;
                }
                if (!(obj instanceof Location)) {
                    return super.equals(obj);
                }
                final Location other = (Location)obj;
                return this.getPathList().equals(other.getPathList()) && this.getSpanList().equals(other.getSpanList()) && this.hasLeadingComments() == other.hasLeadingComments() && (!this.hasLeadingComments() || this.getLeadingComments().equals(other.getLeadingComments())) && this.hasTrailingComments() == other.hasTrailingComments() && (!this.hasTrailingComments() || this.getTrailingComments().equals(other.getTrailingComments())) && this.getLeadingDetachedCommentsList().equals(other.getLeadingDetachedCommentsList()) && this.getUnknownFields().equals(other.getUnknownFields());
            }
            
            @Override
            public int hashCode() {
                if (this.memoizedHashCode != 0) {
                    return this.memoizedHashCode;
                }
                int hash = 41;
                hash = 19 * hash + getDescriptor().hashCode();
                if (this.getPathCount() > 0) {
                    hash = 37 * hash + 1;
                    hash = 53 * hash + this.getPathList().hashCode();
                }
                if (this.getSpanCount() > 0) {
                    hash = 37 * hash + 2;
                    hash = 53 * hash + this.getSpanList().hashCode();
                }
                if (this.hasLeadingComments()) {
                    hash = 37 * hash + 3;
                    hash = 53 * hash + this.getLeadingComments().hashCode();
                }
                if (this.hasTrailingComments()) {
                    hash = 37 * hash + 4;
                    hash = 53 * hash + this.getTrailingComments().hashCode();
                }
                if (this.getLeadingDetachedCommentsCount() > 0) {
                    hash = 37 * hash + 6;
                    hash = 53 * hash + this.getLeadingDetachedCommentsList().hashCode();
                }
                hash = 29 * hash + this.getUnknownFields().hashCode();
                return this.memoizedHashCode = hash;
            }
            
            public static Location parseFrom(final ByteBuffer data) throws InvalidProtocolBufferException {
                return Location.PARSER.parseFrom(data);
            }
            
            public static Location parseFrom(final ByteBuffer data, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
                return Location.PARSER.parseFrom(data, extensionRegistry);
            }
            
            public static Location parseFrom(final ByteString data) throws InvalidProtocolBufferException {
                return Location.PARSER.parseFrom(data);
            }
            
            public static Location parseFrom(final ByteString data, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
                return Location.PARSER.parseFrom(data, extensionRegistry);
            }
            
            public static Location parseFrom(final byte[] data) throws InvalidProtocolBufferException {
                return Location.PARSER.parseFrom(data);
            }
            
            public static Location parseFrom(final byte[] data, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
                return Location.PARSER.parseFrom(data, extensionRegistry);
            }
            
            public static Location parseFrom(final InputStream input) throws IOException {
                return GeneratedMessage.parseWithIOException(Location.PARSER, input);
            }
            
            public static Location parseFrom(final InputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
                return GeneratedMessage.parseWithIOException(Location.PARSER, input, extensionRegistry);
            }
            
            public static Location parseDelimitedFrom(final InputStream input) throws IOException {
                return GeneratedMessage.parseDelimitedWithIOException(Location.PARSER, input);
            }
            
            public static Location parseDelimitedFrom(final InputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
                return GeneratedMessage.parseDelimitedWithIOException(Location.PARSER, input, extensionRegistry);
            }
            
            public static Location parseFrom(final CodedInputStream input) throws IOException {
                return GeneratedMessage.parseWithIOException(Location.PARSER, input);
            }
            
            public static Location parseFrom(final CodedInputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
                return GeneratedMessage.parseWithIOException(Location.PARSER, input, extensionRegistry);
            }
            
            @Override
            public Builder newBuilderForType() {
                return newBuilder();
            }
            
            public static Builder newBuilder() {
                return Location.DEFAULT_INSTANCE.toBuilder();
            }
            
            public static Builder newBuilder(final Location prototype) {
                return Location.DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
            }
            
            @Override
            public Builder toBuilder() {
                return (this == Location.DEFAULT_INSTANCE) ? new Builder() : new Builder().mergeFrom(this);
            }
            
            @Override
            protected Builder newBuilderForType(final BuilderParent parent) {
                final Builder builder = new Builder(parent);
                return builder;
            }
            
            public static Location getDefaultInstance() {
                return Location.DEFAULT_INSTANCE;
            }
            
            public static Parser<Location> parser() {
                return Location.PARSER;
            }
            
            @Override
            public Parser<Location> getParserForType() {
                return Location.PARSER;
            }
            
            @Override
            public Location getDefaultInstanceForType() {
                return Location.DEFAULT_INSTANCE;
            }
            
            static {
                RuntimeVersion.validateProtobufGencodeVersion(RuntimeVersion.RuntimeDomain.PUBLIC, 4, 33, 0, "", "Location");
                DEFAULT_INSTANCE = new Location();
                PARSER = new AbstractParser<Location>() {
                    @Override
                    public Location parsePartialFrom(final CodedInputStream input, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
                        final Builder builder = Location.newBuilder();
                        try {
                            builder.mergeFrom(input, extensionRegistry);
                        }
                        catch (final InvalidProtocolBufferException e) {
                            throw e.setUnfinishedMessage(builder.buildPartial());
                        }
                        catch (final UninitializedMessageException e2) {
                            throw e2.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
                        }
                        catch (final IOException e3) {
                            throw new InvalidProtocolBufferException(e3).setUnfinishedMessage(builder.buildPartial());
                        }
                        return builder.buildPartial();
                    }
                };
            }
            
            public static final class Builder extends GeneratedMessage.Builder<Builder> implements LocationOrBuilder
            {
                private int bitField0_;
                private Internal.IntList path_;
                private Internal.IntList span_;
                private Object leadingComments_;
                private Object trailingComments_;
                private LazyStringArrayList leadingDetachedComments_;
                
                public static final Descriptors.Descriptor getDescriptor() {
                    return DescriptorProtos.internal_static_google_protobuf_SourceCodeInfo_Location_descriptor;
                }
                
                @Override
                protected FieldAccessorTable internalGetFieldAccessorTable() {
                    return DescriptorProtos.internal_static_google_protobuf_SourceCodeInfo_Location_fieldAccessorTable.ensureFieldAccessorsInitialized(Location.class, Builder.class);
                }
                
                private Builder() {
                    this.path_ = GeneratedMessage.emptyIntList();
                    this.span_ = GeneratedMessage.emptyIntList();
                    this.leadingComments_ = "";
                    this.trailingComments_ = "";
                    this.leadingDetachedComments_ = LazyStringArrayList.emptyList();
                }
                
                private Builder(final BuilderParent parent) {
                    super(parent);
                    this.path_ = GeneratedMessage.emptyIntList();
                    this.span_ = GeneratedMessage.emptyIntList();
                    this.leadingComments_ = "";
                    this.trailingComments_ = "";
                    this.leadingDetachedComments_ = LazyStringArrayList.emptyList();
                }
                
                @Override
                public Builder clear() {
                    super.clear();
                    this.bitField0_ = 0;
                    this.path_ = GeneratedMessage.emptyIntList();
                    this.span_ = GeneratedMessage.emptyIntList();
                    this.leadingComments_ = "";
                    this.trailingComments_ = "";
                    this.leadingDetachedComments_ = LazyStringArrayList.emptyList();
                    return this;
                }
                
                @Override
                public Descriptors.Descriptor getDescriptorForType() {
                    return DescriptorProtos.internal_static_google_protobuf_SourceCodeInfo_Location_descriptor;
                }
                
                @Override
                public Location getDefaultInstanceForType() {
                    return Location.getDefaultInstance();
                }
                
                @Override
                public Location build() {
                    final Location result = this.buildPartial();
                    if (!result.isInitialized()) {
                        throw AbstractMessage.Builder.newUninitializedMessageException(result);
                    }
                    return result;
                }
                
                @Override
                public Location buildPartial() {
                    final Location result = new Location((GeneratedMessage.Builder)this);
                    if (this.bitField0_ != 0) {
                        this.buildPartial0(result);
                    }
                    this.onBuilt();
                    return result;
                }
                
                private void buildPartial0(final Location result) {
                    final int from_bitField0_ = this.bitField0_;
                    if ((from_bitField0_ & 0x1) != 0x0) {
                        this.path_.makeImmutable();
                        result.path_ = this.path_;
                    }
                    if ((from_bitField0_ & 0x2) != 0x0) {
                        this.span_.makeImmutable();
                        result.span_ = this.span_;
                    }
                    int to_bitField0_ = 0;
                    if ((from_bitField0_ & 0x4) != 0x0) {
                        result.leadingComments_ = this.leadingComments_;
                        to_bitField0_ |= 0x1;
                    }
                    if ((from_bitField0_ & 0x8) != 0x0) {
                        result.trailingComments_ = this.trailingComments_;
                        to_bitField0_ |= 0x2;
                    }
                    if ((from_bitField0_ & 0x10) != 0x0) {
                        this.leadingDetachedComments_.makeImmutable();
                        result.leadingDetachedComments_ = this.leadingDetachedComments_;
                    }
                    result.bitField0_ |= to_bitField0_;
                }
                
                @Override
                public Builder mergeFrom(final Message other) {
                    if (other instanceof Location) {
                        return this.mergeFrom((Location)other);
                    }
                    super.mergeFrom(other);
                    return this;
                }
                
                public Builder mergeFrom(final Location other) {
                    if (other == Location.getDefaultInstance()) {
                        return this;
                    }
                    if (!other.path_.isEmpty()) {
                        if (this.path_.isEmpty()) {
                            (this.path_ = other.path_).makeImmutable();
                            this.bitField0_ |= 0x1;
                        }
                        else {
                            this.ensurePathIsMutable();
                            this.path_.addAll(other.path_);
                        }
                        this.onChanged();
                    }
                    if (!other.span_.isEmpty()) {
                        if (this.span_.isEmpty()) {
                            (this.span_ = other.span_).makeImmutable();
                            this.bitField0_ |= 0x2;
                        }
                        else {
                            this.ensureSpanIsMutable();
                            this.span_.addAll(other.span_);
                        }
                        this.onChanged();
                    }
                    if (other.hasLeadingComments()) {
                        this.leadingComments_ = other.leadingComments_;
                        this.bitField0_ |= 0x4;
                        this.onChanged();
                    }
                    if (other.hasTrailingComments()) {
                        this.trailingComments_ = other.trailingComments_;
                        this.bitField0_ |= 0x8;
                        this.onChanged();
                    }
                    if (!other.leadingDetachedComments_.isEmpty()) {
                        if (this.leadingDetachedComments_.isEmpty()) {
                            this.leadingDetachedComments_ = other.leadingDetachedComments_;
                            this.bitField0_ |= 0x10;
                        }
                        else {
                            this.ensureLeadingDetachedCommentsIsMutable();
                            this.leadingDetachedComments_.addAll(other.leadingDetachedComments_);
                        }
                        this.onChanged();
                    }
                    this.mergeUnknownFields(other.getUnknownFields());
                    this.onChanged();
                    return this;
                }
                
                @Override
                public final boolean isInitialized() {
                    return true;
                }
                
                @Override
                public Builder mergeFrom(final CodedInputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
                    if (extensionRegistry == null) {
                        throw new NullPointerException();
                    }
                    try {
                        boolean done = false;
                        while (!done) {
                            final int tag = input.readTag();
                            switch (tag) {
                                case 0: {
                                    done = true;
                                    continue;
                                }
                                case 8: {
                                    final int v = input.readInt32();
                                    this.ensurePathIsMutable();
                                    this.path_.addInt(v);
                                    continue;
                                }
                                case 10: {
                                    final int length = input.readRawVarint32();
                                    final int limit = input.pushLimit(length);
                                    this.ensurePathIsMutable();
                                    while (input.getBytesUntilLimit() > 0) {
                                        this.path_.addInt(input.readInt32());
                                    }
                                    input.popLimit(limit);
                                    continue;
                                }
                                case 16: {
                                    final int v = input.readInt32();
                                    this.ensureSpanIsMutable();
                                    this.span_.addInt(v);
                                    continue;
                                }
                                case 18: {
                                    final int length = input.readRawVarint32();
                                    final int limit = input.pushLimit(length);
                                    this.ensureSpanIsMutable();
                                    while (input.getBytesUntilLimit() > 0) {
                                        this.span_.addInt(input.readInt32());
                                    }
                                    input.popLimit(limit);
                                    continue;
                                }
                                case 26: {
                                    this.leadingComments_ = input.readBytes();
                                    this.bitField0_ |= 0x4;
                                    continue;
                                }
                                case 34: {
                                    this.trailingComments_ = input.readBytes();
                                    this.bitField0_ |= 0x8;
                                    continue;
                                }
                                case 50: {
                                    final ByteString bs = input.readBytes();
                                    this.ensureLeadingDetachedCommentsIsMutable();
                                    this.leadingDetachedComments_.add(bs);
                                    continue;
                                }
                                default: {
                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                                        done = true;
                                        continue;
                                    }
                                    continue;
                                }
                            }
                        }
                    }
                    catch (final InvalidProtocolBufferException e) {
                        throw e.unwrapIOException();
                    }
                    finally {
                        this.onChanged();
                    }
                    return this;
                }
                
                private void ensurePathIsMutable() {
                    if (!this.path_.isModifiable()) {
                        this.path_ = GeneratedMessage.makeMutableCopy(this.path_);
                    }
                    this.bitField0_ |= 0x1;
                }
                
                @Override
                public List<Integer> getPathList() {
                    this.path_.makeImmutable();
                    return this.path_;
                }
                
                @Override
                public int getPathCount() {
                    return this.path_.size();
                }
                
                @Override
                public int getPath(final int index) {
                    return this.path_.getInt(index);
                }
                
                public Builder setPath(final int index, final int value) {
                    this.ensurePathIsMutable();
                    this.path_.setInt(index, value);
                    this.bitField0_ |= 0x1;
                    this.onChanged();
                    return this;
                }
                
                public Builder addPath(final int value) {
                    this.ensurePathIsMutable();
                    this.path_.addInt(value);
                    this.bitField0_ |= 0x1;
                    this.onChanged();
                    return this;
                }
                
                public Builder addAllPath(final Iterable<? extends Integer> values) {
                    this.ensurePathIsMutable();
                    AbstractMessageLite.Builder.addAll(values, this.path_);
                    this.bitField0_ |= 0x1;
                    this.onChanged();
                    return this;
                }
                
                public Builder clearPath() {
                    this.path_ = GeneratedMessage.emptyIntList();
                    this.bitField0_ &= 0xFFFFFFFE;
                    this.onChanged();
                    return this;
                }
                
                private void ensureSpanIsMutable() {
                    if (!this.span_.isModifiable()) {
                        this.span_ = GeneratedMessage.makeMutableCopy(this.span_);
                    }
                    this.bitField0_ |= 0x2;
                }
                
                @Override
                public List<Integer> getSpanList() {
                    this.span_.makeImmutable();
                    return this.span_;
                }
                
                @Override
                public int getSpanCount() {
                    return this.span_.size();
                }
                
                @Override
                public int getSpan(final int index) {
                    return this.span_.getInt(index);
                }
                
                public Builder setSpan(final int index, final int value) {
                    this.ensureSpanIsMutable();
                    this.span_.setInt(index, value);
                    this.bitField0_ |= 0x2;
                    this.onChanged();
                    return this;
                }
                
                public Builder addSpan(final int value) {
                    this.ensureSpanIsMutable();
                    this.span_.addInt(value);
                    this.bitField0_ |= 0x2;
                    this.onChanged();
                    return this;
                }
                
                public Builder addAllSpan(final Iterable<? extends Integer> values) {
                    this.ensureSpanIsMutable();
                    AbstractMessageLite.Builder.addAll(values, this.span_);
                    this.bitField0_ |= 0x2;
                    this.onChanged();
                    return this;
                }
                
                public Builder clearSpan() {
                    this.span_ = GeneratedMessage.emptyIntList();
                    this.bitField0_ &= 0xFFFFFFFD;
                    this.onChanged();
                    return this;
                }
                
                @Override
                public boolean hasLeadingComments() {
                    return (this.bitField0_ & 0x4) != 0x0;
                }
                
                @Override
                public String getLeadingComments() {
                    final Object ref = this.leadingComments_;
                    if (!(ref instanceof String)) {
                        final ByteString bs = (ByteString)ref;
                        final String s = bs.toStringUtf8();
                        if (bs.isValidUtf8()) {
                            this.leadingComments_ = s;
                        }
                        return s;
                    }
                    return (String)ref;
                }
                
                @Override
                public ByteString getLeadingCommentsBytes() {
                    final Object ref = this.leadingComments_;
                    if (ref instanceof String) {
                        final ByteString b = ByteString.copyFromUtf8((String)ref);
                        return (ByteString)(this.leadingComments_ = b);
                    }
                    return (ByteString)ref;
                }
                
                public Builder setLeadingComments(final String value) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.leadingComments_ = value;
                    this.bitField0_ |= 0x4;
                    this.onChanged();
                    return this;
                }
                
                public Builder clearLeadingComments() {
                    this.leadingComments_ = Location.getDefaultInstance().getLeadingComments();
                    this.bitField0_ &= 0xFFFFFFFB;
                    this.onChanged();
                    return this;
                }
                
                public Builder setLeadingCommentsBytes(final ByteString value) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.leadingComments_ = value;
                    this.bitField0_ |= 0x4;
                    this.onChanged();
                    return this;
                }
                
                @Override
                public boolean hasTrailingComments() {
                    return (this.bitField0_ & 0x8) != 0x0;
                }
                
                @Override
                public String getTrailingComments() {
                    final Object ref = this.trailingComments_;
                    if (!(ref instanceof String)) {
                        final ByteString bs = (ByteString)ref;
                        final String s = bs.toStringUtf8();
                        if (bs.isValidUtf8()) {
                            this.trailingComments_ = s;
                        }
                        return s;
                    }
                    return (String)ref;
                }
                
                @Override
                public ByteString getTrailingCommentsBytes() {
                    final Object ref = this.trailingComments_;
                    if (ref instanceof String) {
                        final ByteString b = ByteString.copyFromUtf8((String)ref);
                        return (ByteString)(this.trailingComments_ = b);
                    }
                    return (ByteString)ref;
                }
                
                public Builder setTrailingComments(final String value) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.trailingComments_ = value;
                    this.bitField0_ |= 0x8;
                    this.onChanged();
                    return this;
                }
                
                public Builder clearTrailingComments() {
                    this.trailingComments_ = Location.getDefaultInstance().getTrailingComments();
                    this.bitField0_ &= 0xFFFFFFF7;
                    this.onChanged();
                    return this;
                }
                
                public Builder setTrailingCommentsBytes(final ByteString value) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.trailingComments_ = value;
                    this.bitField0_ |= 0x8;
                    this.onChanged();
                    return this;
                }
                
                private void ensureLeadingDetachedCommentsIsMutable() {
                    if (!this.leadingDetachedComments_.isModifiable()) {
                        this.leadingDetachedComments_ = new LazyStringArrayList(this.leadingDetachedComments_);
                    }
                    this.bitField0_ |= 0x10;
                }
                
                @Override
                public ProtocolStringList getLeadingDetachedCommentsList() {
                    this.leadingDetachedComments_.makeImmutable();
                    return this.leadingDetachedComments_;
                }
                
                @Override
                public int getLeadingDetachedCommentsCount() {
                    return this.leadingDetachedComments_.size();
                }
                
                @Override
                public String getLeadingDetachedComments(final int index) {
                    return this.leadingDetachedComments_.get(index);
                }
                
                @Override
                public ByteString getLeadingDetachedCommentsBytes(final int index) {
                    return this.leadingDetachedComments_.getByteString(index);
                }
                
                public Builder setLeadingDetachedComments(final int index, final String value) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.ensureLeadingDetachedCommentsIsMutable();
                    this.leadingDetachedComments_.set(index, value);
                    this.bitField0_ |= 0x10;
                    this.onChanged();
                    return this;
                }
                
                public Builder addLeadingDetachedComments(final String value) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.ensureLeadingDetachedCommentsIsMutable();
                    this.leadingDetachedComments_.add(value);
                    this.bitField0_ |= 0x10;
                    this.onChanged();
                    return this;
                }
                
                public Builder addAllLeadingDetachedComments(final Iterable<String> values) {
                    this.ensureLeadingDetachedCommentsIsMutable();
                    AbstractMessageLite.Builder.addAll(values, this.leadingDetachedComments_);
                    this.bitField0_ |= 0x10;
                    this.onChanged();
                    return this;
                }
                
                public Builder clearLeadingDetachedComments() {
                    this.leadingDetachedComments_ = LazyStringArrayList.emptyList();
                    this.bitField0_ &= 0xFFFFFFEF;
                    this.onChanged();
                    return this;
                }
                
                public Builder addLeadingDetachedCommentsBytes(final ByteString value) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.ensureLeadingDetachedCommentsIsMutable();
                    this.leadingDetachedComments_.add(value);
                    this.bitField0_ |= 0x10;
                    this.onChanged();
                    return this;
                }
            }
        }
        
        public static final class Builder extends ExtendableBuilder<SourceCodeInfo, Builder> implements SourceCodeInfoOrBuilder
        {
            private int bitField0_;
            private List<Location> location_;
            private RepeatedFieldBuilder<Location, Location.Builder, LocationOrBuilder> locationBuilder_;
            
            public static final Descriptors.Descriptor getDescriptor() {
                return DescriptorProtos.internal_static_google_protobuf_SourceCodeInfo_descriptor;
            }
            
            @Override
            protected FieldAccessorTable internalGetFieldAccessorTable() {
                return DescriptorProtos.internal_static_google_protobuf_SourceCodeInfo_fieldAccessorTable.ensureFieldAccessorsInitialized(SourceCodeInfo.class, Builder.class);
            }
            
            private Builder() {
                this.location_ = Collections.emptyList();
            }
            
            private Builder(final BuilderParent parent) {
                super(parent);
                this.location_ = Collections.emptyList();
            }
            
            @Override
            public Builder clear() {
                super.clear();
                this.bitField0_ = 0;
                if (this.locationBuilder_ == null) {
                    this.location_ = Collections.emptyList();
                }
                else {
                    this.location_ = null;
                    this.locationBuilder_.clear();
                }
                this.bitField0_ &= 0xFFFFFFFE;
                return this;
            }
            
            @Override
            public Descriptors.Descriptor getDescriptorForType() {
                return DescriptorProtos.internal_static_google_protobuf_SourceCodeInfo_descriptor;
            }
            
            @Override
            public SourceCodeInfo getDefaultInstanceForType() {
                return SourceCodeInfo.getDefaultInstance();
            }
            
            @Override
            public SourceCodeInfo build() {
                final SourceCodeInfo result = this.buildPartial();
                if (!result.isInitialized()) {
                    throw AbstractMessage.Builder.newUninitializedMessageException(result);
                }
                return result;
            }
            
            @Override
            public SourceCodeInfo buildPartial() {
                final SourceCodeInfo result = new SourceCodeInfo((ExtendableBuilder)this);
                this.buildPartialRepeatedFields(result);
                if (this.bitField0_ != 0) {
                    this.buildPartial0(result);
                }
                this.onBuilt();
                return result;
            }
            
            private void buildPartialRepeatedFields(final SourceCodeInfo result) {
                if (this.locationBuilder_ == null) {
                    if ((this.bitField0_ & 0x1) != 0x0) {
                        this.location_ = Collections.unmodifiableList((List<? extends Location>)this.location_);
                        this.bitField0_ &= 0xFFFFFFFE;
                    }
                    result.location_ = this.location_;
                }
                else {
                    result.location_ = this.locationBuilder_.build();
                }
            }
            
            private void buildPartial0(final SourceCodeInfo result) {
                final int from_bitField0_ = this.bitField0_;
            }
            
            public <Type> Builder setExtension(final GeneratedExtension<SourceCodeInfo, Type> extension, final Type value) {
                return super.setExtension(extension, value);
            }
            
            public <Type> Builder setExtension(final GeneratedExtension<SourceCodeInfo, List<Type>> extension, final int index, final Type value) {
                return super.setExtension(extension, index, value);
            }
            
            public <Type> Builder addExtension(final GeneratedExtension<SourceCodeInfo, List<Type>> extension, final Type value) {
                return super.addExtension(extension, value);
            }
            
            public <Type> Builder clearExtension(final GeneratedExtension<SourceCodeInfo, Type> extension) {
                return super.clearExtension(extension);
            }
            
            @Override
            public Builder mergeFrom(final Message other) {
                if (other instanceof SourceCodeInfo) {
                    return this.mergeFrom((SourceCodeInfo)other);
                }
                super.mergeFrom(other);
                return this;
            }
            
            public Builder mergeFrom(final SourceCodeInfo other) {
                if (other == SourceCodeInfo.getDefaultInstance()) {
                    return this;
                }
                if (this.locationBuilder_ == null) {
                    if (!other.location_.isEmpty()) {
                        if (this.location_.isEmpty()) {
                            this.location_ = other.location_;
                            this.bitField0_ &= 0xFFFFFFFE;
                        }
                        else {
                            this.ensureLocationIsMutable();
                            this.location_.addAll(other.location_);
                        }
                        this.onChanged();
                    }
                }
                else if (!other.location_.isEmpty()) {
                    if (this.locationBuilder_.isEmpty()) {
                        this.locationBuilder_.dispose();
                        this.locationBuilder_ = null;
                        this.location_ = other.location_;
                        this.bitField0_ &= 0xFFFFFFFE;
                        this.locationBuilder_ = (GeneratedMessage.alwaysUseFieldBuilders ? this.internalGetLocationFieldBuilder() : null);
                    }
                    else {
                        this.locationBuilder_.addAllMessages(other.location_);
                    }
                }
                this.mergeExtensionFields(other);
                this.mergeUnknownFields(other.getUnknownFields());
                this.onChanged();
                return this;
            }
            
            @Override
            public final boolean isInitialized() {
                return this.extensionsAreInitialized();
            }
            
            @Override
            public Builder mergeFrom(final CodedInputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
                if (extensionRegistry == null) {
                    throw new NullPointerException();
                }
                try {
                    boolean done = false;
                    while (!done) {
                        final int tag = input.readTag();
                        switch (tag) {
                            case 0: {
                                done = true;
                                continue;
                            }
                            case 10: {
                                final Location m = input.readMessage(Location.parser(), extensionRegistry);
                                if (this.locationBuilder_ == null) {
                                    this.ensureLocationIsMutable();
                                    this.location_.add(m);
                                    continue;
                                }
                                this.locationBuilder_.addMessage(m);
                                continue;
                            }
                            default: {
                                if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                                    done = true;
                                    continue;
                                }
                                continue;
                            }
                        }
                    }
                }
                catch (final InvalidProtocolBufferException e) {
                    throw e.unwrapIOException();
                }
                finally {
                    this.onChanged();
                }
                return this;
            }
            
            private void ensureLocationIsMutable() {
                if ((this.bitField0_ & 0x1) == 0x0) {
                    this.location_ = new ArrayList<Location>(this.location_);
                    this.bitField0_ |= 0x1;
                }
            }
            
            @Override
            public List<Location> getLocationList() {
                if (this.locationBuilder_ == null) {
                    return Collections.unmodifiableList((List<? extends Location>)this.location_);
                }
                return this.locationBuilder_.getMessageList();
            }
            
            @Override
            public int getLocationCount() {
                if (this.locationBuilder_ == null) {
                    return this.location_.size();
                }
                return this.locationBuilder_.getCount();
            }
            
            @Override
            public Location getLocation(final int index) {
                if (this.locationBuilder_ == null) {
                    return this.location_.get(index);
                }
                return this.locationBuilder_.getMessage(index);
            }
            
            public Builder setLocation(final int index, final Location value) {
                if (this.locationBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.ensureLocationIsMutable();
                    this.location_.set(index, value);
                    this.onChanged();
                }
                else {
                    this.locationBuilder_.setMessage(index, value);
                }
                return this;
            }
            
            public Builder setLocation(final int index, final Location.Builder builderForValue) {
                if (this.locationBuilder_ == null) {
                    this.ensureLocationIsMutable();
                    this.location_.set(index, builderForValue.build());
                    this.onChanged();
                }
                else {
                    this.locationBuilder_.setMessage(index, builderForValue.build());
                }
                return this;
            }
            
            public Builder addLocation(final Location value) {
                if (this.locationBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.ensureLocationIsMutable();
                    this.location_.add(value);
                    this.onChanged();
                }
                else {
                    this.locationBuilder_.addMessage(value);
                }
                return this;
            }
            
            public Builder addLocation(final int index, final Location value) {
                if (this.locationBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.ensureLocationIsMutable();
                    this.location_.add(index, value);
                    this.onChanged();
                }
                else {
                    this.locationBuilder_.addMessage(index, value);
                }
                return this;
            }
            
            public Builder addLocation(final Location.Builder builderForValue) {
                if (this.locationBuilder_ == null) {
                    this.ensureLocationIsMutable();
                    this.location_.add(builderForValue.build());
                    this.onChanged();
                }
                else {
                    this.locationBuilder_.addMessage(builderForValue.build());
                }
                return this;
            }
            
            public Builder addLocation(final int index, final Location.Builder builderForValue) {
                if (this.locationBuilder_ == null) {
                    this.ensureLocationIsMutable();
                    this.location_.add(index, builderForValue.build());
                    this.onChanged();
                }
                else {
                    this.locationBuilder_.addMessage(index, builderForValue.build());
                }
                return this;
            }
            
            public Builder addAllLocation(final Iterable<? extends Location> values) {
                if (this.locationBuilder_ == null) {
                    this.ensureLocationIsMutable();
                    AbstractMessageLite.Builder.addAll(values, this.location_);
                    this.onChanged();
                }
                else {
                    this.locationBuilder_.addAllMessages(values);
                }
                return this;
            }
            
            public Builder clearLocation() {
                if (this.locationBuilder_ == null) {
                    this.location_ = Collections.emptyList();
                    this.bitField0_ &= 0xFFFFFFFE;
                    this.onChanged();
                }
                else {
                    this.locationBuilder_.clear();
                }
                return this;
            }
            
            public Builder removeLocation(final int index) {
                if (this.locationBuilder_ == null) {
                    this.ensureLocationIsMutable();
                    this.location_.remove(index);
                    this.onChanged();
                }
                else {
                    this.locationBuilder_.remove(index);
                }
                return this;
            }
            
            public Location.Builder getLocationBuilder(final int index) {
                return this.internalGetLocationFieldBuilder().getBuilder(index);
            }
            
            @Override
            public LocationOrBuilder getLocationOrBuilder(final int index) {
                if (this.locationBuilder_ == null) {
                    return this.location_.get(index);
                }
                return this.locationBuilder_.getMessageOrBuilder(index);
            }
            
            @Override
            public List<? extends LocationOrBuilder> getLocationOrBuilderList() {
                if (this.locationBuilder_ != null) {
                    return this.locationBuilder_.getMessageOrBuilderList();
                }
                return Collections.unmodifiableList((List<? extends LocationOrBuilder>)this.location_);
            }
            
            public Location.Builder addLocationBuilder() {
                return this.internalGetLocationFieldBuilder().addBuilder(Location.getDefaultInstance());
            }
            
            public Location.Builder addLocationBuilder(final int index) {
                return this.internalGetLocationFieldBuilder().addBuilder(index, Location.getDefaultInstance());
            }
            
            public List<Location.Builder> getLocationBuilderList() {
                return this.internalGetLocationFieldBuilder().getBuilderList();
            }
            
            private RepeatedFieldBuilder<Location, Location.Builder, LocationOrBuilder> internalGetLocationFieldBuilder() {
                if (this.locationBuilder_ == null) {
                    this.locationBuilder_ = new RepeatedFieldBuilder<Location, Location.Builder, LocationOrBuilder>(this.location_, (this.bitField0_ & 0x1) != 0x0, this.getParentForChildren(), this.isClean());
                    this.location_ = null;
                }
                return this.locationBuilder_;
            }
        }
        
        public interface LocationOrBuilder extends MessageOrBuilder
        {
            List<Integer> getPathList();
            
            int getPathCount();
            
            int getPath(final int index);
            
            List<Integer> getSpanList();
            
            int getSpanCount();
            
            int getSpan(final int index);
            
            boolean hasLeadingComments();
            
            String getLeadingComments();
            
            ByteString getLeadingCommentsBytes();
            
            boolean hasTrailingComments();
            
            String getTrailingComments();
            
            ByteString getTrailingCommentsBytes();
            
            List<String> getLeadingDetachedCommentsList();
            
            int getLeadingDetachedCommentsCount();
            
            String getLeadingDetachedComments(final int index);
            
            ByteString getLeadingDetachedCommentsBytes(final int index);
        }
    }
    
    public static final class GeneratedCodeInfo extends GeneratedMessage implements GeneratedCodeInfoOrBuilder
    {
        private static final long serialVersionUID = 0L;
        public static final int ANNOTATION_FIELD_NUMBER = 1;
        private List<Annotation> annotation_;
        private byte memoizedIsInitialized;
        private static final GeneratedCodeInfo DEFAULT_INSTANCE;
        private static final Parser<GeneratedCodeInfo> PARSER;
        
        private GeneratedCodeInfo(final GeneratedMessage.Builder<?> builder) {
            super(builder);
            this.memoizedIsInitialized = -1;
        }
        
        private GeneratedCodeInfo() {
            this.memoizedIsInitialized = -1;
            this.annotation_ = Collections.emptyList();
        }
        
        public static final Descriptors.Descriptor getDescriptor() {
            return DescriptorProtos.internal_static_google_protobuf_GeneratedCodeInfo_descriptor;
        }
        
        @Override
        protected FieldAccessorTable internalGetFieldAccessorTable() {
            return DescriptorProtos.internal_static_google_protobuf_GeneratedCodeInfo_fieldAccessorTable.ensureFieldAccessorsInitialized(GeneratedCodeInfo.class, Builder.class);
        }
        
        @Override
        public List<Annotation> getAnnotationList() {
            return this.annotation_;
        }
        
        @Override
        public List<? extends AnnotationOrBuilder> getAnnotationOrBuilderList() {
            return this.annotation_;
        }
        
        @Override
        public int getAnnotationCount() {
            return this.annotation_.size();
        }
        
        @Override
        public Annotation getAnnotation(final int index) {
            return this.annotation_.get(index);
        }
        
        @Override
        public AnnotationOrBuilder getAnnotationOrBuilder(final int index) {
            return this.annotation_.get(index);
        }
        
        @Override
        public final boolean isInitialized() {
            final byte isInitialized = this.memoizedIsInitialized;
            if (isInitialized == 1) {
                return true;
            }
            if (isInitialized == 0) {
                return false;
            }
            this.memoizedIsInitialized = 1;
            return true;
        }
        
        @Override
        public void writeTo(final CodedOutputStream output) throws IOException {
            for (int i = 0; i < this.annotation_.size(); ++i) {
                output.writeMessage(1, this.annotation_.get(i));
            }
            this.getUnknownFields().writeTo(output);
        }
        
        @Override
        public int getSerializedSize() {
            int size = this.memoizedSize;
            if (size != -1) {
                return size;
            }
            size = 0;
            for (int i = 0; i < this.annotation_.size(); ++i) {
                size += CodedOutputStream.computeMessageSize(1, this.annotation_.get(i));
            }
            size += this.getUnknownFields().getSerializedSize();
            return this.memoizedSize = size;
        }
        
        @Override
        public boolean equals(final Object obj) {
            if (obj == this) {
                return true;
            }
            if (!(obj instanceof GeneratedCodeInfo)) {
                return super.equals(obj);
            }
            final GeneratedCodeInfo other = (GeneratedCodeInfo)obj;
            return this.getAnnotationList().equals(other.getAnnotationList()) && this.getUnknownFields().equals(other.getUnknownFields());
        }
        
        @Override
        public int hashCode() {
            if (this.memoizedHashCode != 0) {
                return this.memoizedHashCode;
            }
            int hash = 41;
            hash = 19 * hash + getDescriptor().hashCode();
            if (this.getAnnotationCount() > 0) {
                hash = 37 * hash + 1;
                hash = 53 * hash + this.getAnnotationList().hashCode();
            }
            hash = 29 * hash + this.getUnknownFields().hashCode();
            return this.memoizedHashCode = hash;
        }
        
        public static GeneratedCodeInfo parseFrom(final ByteBuffer data) throws InvalidProtocolBufferException {
            return GeneratedCodeInfo.PARSER.parseFrom(data);
        }
        
        public static GeneratedCodeInfo parseFrom(final ByteBuffer data, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
            return GeneratedCodeInfo.PARSER.parseFrom(data, extensionRegistry);
        }
        
        public static GeneratedCodeInfo parseFrom(final ByteString data) throws InvalidProtocolBufferException {
            return GeneratedCodeInfo.PARSER.parseFrom(data);
        }
        
        public static GeneratedCodeInfo parseFrom(final ByteString data, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
            return GeneratedCodeInfo.PARSER.parseFrom(data, extensionRegistry);
        }
        
        public static GeneratedCodeInfo parseFrom(final byte[] data) throws InvalidProtocolBufferException {
            return GeneratedCodeInfo.PARSER.parseFrom(data);
        }
        
        public static GeneratedCodeInfo parseFrom(final byte[] data, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
            return GeneratedCodeInfo.PARSER.parseFrom(data, extensionRegistry);
        }
        
        public static GeneratedCodeInfo parseFrom(final InputStream input) throws IOException {
            return GeneratedMessage.parseWithIOException(GeneratedCodeInfo.PARSER, input);
        }
        
        public static GeneratedCodeInfo parseFrom(final InputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
            return GeneratedMessage.parseWithIOException(GeneratedCodeInfo.PARSER, input, extensionRegistry);
        }
        
        public static GeneratedCodeInfo parseDelimitedFrom(final InputStream input) throws IOException {
            return GeneratedMessage.parseDelimitedWithIOException(GeneratedCodeInfo.PARSER, input);
        }
        
        public static GeneratedCodeInfo parseDelimitedFrom(final InputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
            return GeneratedMessage.parseDelimitedWithIOException(GeneratedCodeInfo.PARSER, input, extensionRegistry);
        }
        
        public static GeneratedCodeInfo parseFrom(final CodedInputStream input) throws IOException {
            return GeneratedMessage.parseWithIOException(GeneratedCodeInfo.PARSER, input);
        }
        
        public static GeneratedCodeInfo parseFrom(final CodedInputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
            return GeneratedMessage.parseWithIOException(GeneratedCodeInfo.PARSER, input, extensionRegistry);
        }
        
        @Override
        public Builder newBuilderForType() {
            return newBuilder();
        }
        
        public static Builder newBuilder() {
            return GeneratedCodeInfo.DEFAULT_INSTANCE.toBuilder();
        }
        
        public static Builder newBuilder(final GeneratedCodeInfo prototype) {
            return GeneratedCodeInfo.DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
        }
        
        @Override
        public Builder toBuilder() {
            return (this == GeneratedCodeInfo.DEFAULT_INSTANCE) ? new Builder() : new Builder().mergeFrom(this);
        }
        
        @Override
        protected Builder newBuilderForType(final BuilderParent parent) {
            final Builder builder = new Builder(parent);
            return builder;
        }
        
        public static GeneratedCodeInfo getDefaultInstance() {
            return GeneratedCodeInfo.DEFAULT_INSTANCE;
        }
        
        public static Parser<GeneratedCodeInfo> parser() {
            return GeneratedCodeInfo.PARSER;
        }
        
        @Override
        public Parser<GeneratedCodeInfo> getParserForType() {
            return GeneratedCodeInfo.PARSER;
        }
        
        @Override
        public GeneratedCodeInfo getDefaultInstanceForType() {
            return GeneratedCodeInfo.DEFAULT_INSTANCE;
        }
        
        static {
            RuntimeVersion.validateProtobufGencodeVersion(RuntimeVersion.RuntimeDomain.PUBLIC, 4, 33, 0, "", "GeneratedCodeInfo");
            DEFAULT_INSTANCE = new GeneratedCodeInfo();
            PARSER = new AbstractParser<GeneratedCodeInfo>() {
                @Override
                public GeneratedCodeInfo parsePartialFrom(final CodedInputStream input, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
                    final Builder builder = GeneratedCodeInfo.newBuilder();
                    try {
                        builder.mergeFrom(input, extensionRegistry);
                    }
                    catch (final InvalidProtocolBufferException e) {
                        throw e.setUnfinishedMessage(builder.buildPartial());
                    }
                    catch (final UninitializedMessageException e2) {
                        throw e2.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
                    }
                    catch (final IOException e3) {
                        throw new InvalidProtocolBufferException(e3).setUnfinishedMessage(builder.buildPartial());
                    }
                    return builder.buildPartial();
                }
            };
        }
        
        public static final class Annotation extends GeneratedMessage implements AnnotationOrBuilder
        {
            private static final long serialVersionUID = 0L;
            private int bitField0_;
            public static final int PATH_FIELD_NUMBER = 1;
            private Internal.IntList path_;
            private int pathMemoizedSerializedSize;
            public static final int SOURCE_FILE_FIELD_NUMBER = 2;
            private volatile Object sourceFile_;
            public static final int BEGIN_FIELD_NUMBER = 3;
            private int begin_;
            public static final int END_FIELD_NUMBER = 4;
            private int end_;
            public static final int SEMANTIC_FIELD_NUMBER = 5;
            private int semantic_;
            private byte memoizedIsInitialized;
            private static final Annotation DEFAULT_INSTANCE;
            private static final Parser<Annotation> PARSER;
            
            private Annotation(final GeneratedMessage.Builder<?> builder) {
                super(builder);
                this.path_ = GeneratedMessage.emptyIntList();
                this.pathMemoizedSerializedSize = -1;
                this.sourceFile_ = "";
                this.begin_ = 0;
                this.end_ = 0;
                this.semantic_ = 0;
                this.memoizedIsInitialized = -1;
            }
            
            private Annotation() {
                this.path_ = GeneratedMessage.emptyIntList();
                this.pathMemoizedSerializedSize = -1;
                this.sourceFile_ = "";
                this.begin_ = 0;
                this.end_ = 0;
                this.semantic_ = 0;
                this.memoizedIsInitialized = -1;
                this.path_ = GeneratedMessage.emptyIntList();
                this.sourceFile_ = "";
                this.semantic_ = 0;
            }
            
            public static final Descriptors.Descriptor getDescriptor() {
                return DescriptorProtos.internal_static_google_protobuf_GeneratedCodeInfo_Annotation_descriptor;
            }
            
            @Override
            protected FieldAccessorTable internalGetFieldAccessorTable() {
                return DescriptorProtos.internal_static_google_protobuf_GeneratedCodeInfo_Annotation_fieldAccessorTable.ensureFieldAccessorsInitialized(Annotation.class, Builder.class);
            }
            
            @Override
            public List<Integer> getPathList() {
                return this.path_;
            }
            
            @Override
            public int getPathCount() {
                return this.path_.size();
            }
            
            @Override
            public int getPath(final int index) {
                return this.path_.getInt(index);
            }
            
            @Override
            public boolean hasSourceFile() {
                return (this.bitField0_ & 0x1) != 0x0;
            }
            
            @Override
            public String getSourceFile() {
                final Object ref = this.sourceFile_;
                if (ref instanceof String) {
                    return (String)ref;
                }
                final ByteString bs = (ByteString)ref;
                final String s = bs.toStringUtf8();
                if (bs.isValidUtf8()) {
                    this.sourceFile_ = s;
                }
                return s;
            }
            
            @Override
            public ByteString getSourceFileBytes() {
                final Object ref = this.sourceFile_;
                if (ref instanceof String) {
                    final ByteString b = ByteString.copyFromUtf8((String)ref);
                    return (ByteString)(this.sourceFile_ = b);
                }
                return (ByteString)ref;
            }
            
            @Override
            public boolean hasBegin() {
                return (this.bitField0_ & 0x2) != 0x0;
            }
            
            @Override
            public int getBegin() {
                return this.begin_;
            }
            
            @Override
            public boolean hasEnd() {
                return (this.bitField0_ & 0x4) != 0x0;
            }
            
            @Override
            public int getEnd() {
                return this.end_;
            }
            
            @Override
            public boolean hasSemantic() {
                return (this.bitField0_ & 0x8) != 0x0;
            }
            
            @Override
            public Semantic getSemantic() {
                final Semantic result = Semantic.forNumber(this.semantic_);
                return (result == null) ? Semantic.NONE : result;
            }
            
            @Override
            public final boolean isInitialized() {
                final byte isInitialized = this.memoizedIsInitialized;
                if (isInitialized == 1) {
                    return true;
                }
                if (isInitialized == 0) {
                    return false;
                }
                this.memoizedIsInitialized = 1;
                return true;
            }
            
            @Override
            public void writeTo(final CodedOutputStream output) throws IOException {
                this.getSerializedSize();
                if (this.getPathList().size() > 0) {
                    output.writeUInt32NoTag(10);
                    output.writeUInt32NoTag(this.pathMemoizedSerializedSize);
                }
                for (int i = 0; i < this.path_.size(); ++i) {
                    output.writeInt32NoTag(this.path_.getInt(i));
                }
                if ((this.bitField0_ & 0x1) != 0x0) {
                    GeneratedMessage.writeString(output, 2, this.sourceFile_);
                }
                if ((this.bitField0_ & 0x2) != 0x0) {
                    output.writeInt32(3, this.begin_);
                }
                if ((this.bitField0_ & 0x4) != 0x0) {
                    output.writeInt32(4, this.end_);
                }
                if ((this.bitField0_ & 0x8) != 0x0) {
                    output.writeEnum(5, this.semantic_);
                }
                this.getUnknownFields().writeTo(output);
            }
            
            @Override
            public int getSerializedSize() {
                int size = this.memoizedSize;
                if (size != -1) {
                    return size;
                }
                size = 0;
                int dataSize = 0;
                for (int i = 0; i < this.path_.size(); ++i) {
                    dataSize += CodedOutputStream.computeInt32SizeNoTag(this.path_.getInt(i));
                }
                size += dataSize;
                if (!this.getPathList().isEmpty()) {
                    size = ++size + CodedOutputStream.computeInt32SizeNoTag(dataSize);
                }
                this.pathMemoizedSerializedSize = dataSize;
                if ((this.bitField0_ & 0x1) != 0x0) {
                    size += GeneratedMessage.computeStringSize(2, this.sourceFile_);
                }
                if ((this.bitField0_ & 0x2) != 0x0) {
                    size += CodedOutputStream.computeInt32Size(3, this.begin_);
                }
                if ((this.bitField0_ & 0x4) != 0x0) {
                    size += CodedOutputStream.computeInt32Size(4, this.end_);
                }
                if ((this.bitField0_ & 0x8) != 0x0) {
                    size += CodedOutputStream.computeEnumSize(5, this.semantic_);
                }
                size += this.getUnknownFields().getSerializedSize();
                return this.memoizedSize = size;
            }
            
            @Override
            public boolean equals(final Object obj) {
                if (obj == this) {
                    return true;
                }
                if (!(obj instanceof Annotation)) {
                    return super.equals(obj);
                }
                final Annotation other = (Annotation)obj;
                return this.getPathList().equals(other.getPathList()) && this.hasSourceFile() == other.hasSourceFile() && (!this.hasSourceFile() || this.getSourceFile().equals(other.getSourceFile())) && this.hasBegin() == other.hasBegin() && (!this.hasBegin() || this.getBegin() == other.getBegin()) && this.hasEnd() == other.hasEnd() && (!this.hasEnd() || this.getEnd() == other.getEnd()) && this.hasSemantic() == other.hasSemantic() && (!this.hasSemantic() || this.semantic_ == other.semantic_) && this.getUnknownFields().equals(other.getUnknownFields());
            }
            
            @Override
            public int hashCode() {
                if (this.memoizedHashCode != 0) {
                    return this.memoizedHashCode;
                }
                int hash = 41;
                hash = 19 * hash + getDescriptor().hashCode();
                if (this.getPathCount() > 0) {
                    hash = 37 * hash + 1;
                    hash = 53 * hash + this.getPathList().hashCode();
                }
                if (this.hasSourceFile()) {
                    hash = 37 * hash + 2;
                    hash = 53 * hash + this.getSourceFile().hashCode();
                }
                if (this.hasBegin()) {
                    hash = 37 * hash + 3;
                    hash = 53 * hash + this.getBegin();
                }
                if (this.hasEnd()) {
                    hash = 37 * hash + 4;
                    hash = 53 * hash + this.getEnd();
                }
                if (this.hasSemantic()) {
                    hash = 37 * hash + 5;
                    hash = 53 * hash + this.semantic_;
                }
                hash = 29 * hash + this.getUnknownFields().hashCode();
                return this.memoizedHashCode = hash;
            }
            
            public static Annotation parseFrom(final ByteBuffer data) throws InvalidProtocolBufferException {
                return Annotation.PARSER.parseFrom(data);
            }
            
            public static Annotation parseFrom(final ByteBuffer data, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
                return Annotation.PARSER.parseFrom(data, extensionRegistry);
            }
            
            public static Annotation parseFrom(final ByteString data) throws InvalidProtocolBufferException {
                return Annotation.PARSER.parseFrom(data);
            }
            
            public static Annotation parseFrom(final ByteString data, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
                return Annotation.PARSER.parseFrom(data, extensionRegistry);
            }
            
            public static Annotation parseFrom(final byte[] data) throws InvalidProtocolBufferException {
                return Annotation.PARSER.parseFrom(data);
            }
            
            public static Annotation parseFrom(final byte[] data, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
                return Annotation.PARSER.parseFrom(data, extensionRegistry);
            }
            
            public static Annotation parseFrom(final InputStream input) throws IOException {
                return GeneratedMessage.parseWithIOException(Annotation.PARSER, input);
            }
            
            public static Annotation parseFrom(final InputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
                return GeneratedMessage.parseWithIOException(Annotation.PARSER, input, extensionRegistry);
            }
            
            public static Annotation parseDelimitedFrom(final InputStream input) throws IOException {
                return GeneratedMessage.parseDelimitedWithIOException(Annotation.PARSER, input);
            }
            
            public static Annotation parseDelimitedFrom(final InputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
                return GeneratedMessage.parseDelimitedWithIOException(Annotation.PARSER, input, extensionRegistry);
            }
            
            public static Annotation parseFrom(final CodedInputStream input) throws IOException {
                return GeneratedMessage.parseWithIOException(Annotation.PARSER, input);
            }
            
            public static Annotation parseFrom(final CodedInputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
                return GeneratedMessage.parseWithIOException(Annotation.PARSER, input, extensionRegistry);
            }
            
            @Override
            public Builder newBuilderForType() {
                return newBuilder();
            }
            
            public static Builder newBuilder() {
                return Annotation.DEFAULT_INSTANCE.toBuilder();
            }
            
            public static Builder newBuilder(final Annotation prototype) {
                return Annotation.DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
            }
            
            @Override
            public Builder toBuilder() {
                return (this == Annotation.DEFAULT_INSTANCE) ? new Builder() : new Builder().mergeFrom(this);
            }
            
            @Override
            protected Builder newBuilderForType(final BuilderParent parent) {
                final Builder builder = new Builder(parent);
                return builder;
            }
            
            public static Annotation getDefaultInstance() {
                return Annotation.DEFAULT_INSTANCE;
            }
            
            public static Parser<Annotation> parser() {
                return Annotation.PARSER;
            }
            
            @Override
            public Parser<Annotation> getParserForType() {
                return Annotation.PARSER;
            }
            
            @Override
            public Annotation getDefaultInstanceForType() {
                return Annotation.DEFAULT_INSTANCE;
            }
            
            static {
                RuntimeVersion.validateProtobufGencodeVersion(RuntimeVersion.RuntimeDomain.PUBLIC, 4, 33, 0, "", "Annotation");
                DEFAULT_INSTANCE = new Annotation();
                PARSER = new AbstractParser<Annotation>() {
                    @Override
                    public Annotation parsePartialFrom(final CodedInputStream input, final ExtensionRegistryLite extensionRegistry) throws InvalidProtocolBufferException {
                        final Builder builder = Annotation.newBuilder();
                        try {
                            builder.mergeFrom(input, extensionRegistry);
                        }
                        catch (final InvalidProtocolBufferException e) {
                            throw e.setUnfinishedMessage(builder.buildPartial());
                        }
                        catch (final UninitializedMessageException e2) {
                            throw e2.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
                        }
                        catch (final IOException e3) {
                            throw new InvalidProtocolBufferException(e3).setUnfinishedMessage(builder.buildPartial());
                        }
                        return builder.buildPartial();
                    }
                };
            }
            
            public enum Semantic implements ProtocolMessageEnum
            {
                NONE(0), 
                SET(1), 
                ALIAS(2);
                
                public static final int NONE_VALUE = 0;
                public static final int SET_VALUE = 1;
                public static final int ALIAS_VALUE = 2;
                private static final Internal.EnumLiteMap<Semantic> internalValueMap;
                private static final Semantic[] VALUES;
                private final int value;
                
                @Override
                public final int getNumber() {
                    return this.value;
                }
                
                @Deprecated
                public static Semantic valueOf(final int value) {
                    return forNumber(value);
                }
                
                public static Semantic forNumber(final int value) {
                    switch (value) {
                        case 0: {
                            return Semantic.NONE;
                        }
                        case 1: {
                            return Semantic.SET;
                        }
                        case 2: {
                            return Semantic.ALIAS;
                        }
                        default: {
                            return null;
                        }
                    }
                }
                
                public static Internal.EnumLiteMap<Semantic> internalGetValueMap() {
                    return Semantic.internalValueMap;
                }
                
                @Override
                public final Descriptors.EnumValueDescriptor getValueDescriptor() {
                    return getDescriptor().getValues().get(this.ordinal());
                }
                
                @Override
                public final Descriptors.EnumDescriptor getDescriptorForType() {
                    return getDescriptor();
                }
                
                public static Descriptors.EnumDescriptor getDescriptor() {
                    return Annotation.getDescriptor().getEnumTypes().get(0);
                }
                
                public static Semantic valueOf(final Descriptors.EnumValueDescriptor desc) {
                    if (desc.getType() != getDescriptor()) {
                        throw new IllegalArgumentException("EnumValueDescriptor is not for this type.");
                    }
                    return Semantic.VALUES[desc.getIndex()];
                }
                
                private Semantic(final int value) {
                    this.value = value;
                }
                
                static {
                    RuntimeVersion.validateProtobufGencodeVersion(RuntimeVersion.RuntimeDomain.PUBLIC, 4, 33, 0, "", "Semantic");
                    internalValueMap = new Internal.EnumLiteMap<Semantic>() {
                        @Override
                        public Semantic findValueByNumber(final int number) {
                            return Semantic.forNumber(number);
                        }
                    };
                    VALUES = values();
                }
            }
            
            public static final class Builder extends GeneratedMessage.Builder<Builder> implements AnnotationOrBuilder
            {
                private int bitField0_;
                private Internal.IntList path_;
                private Object sourceFile_;
                private int begin_;
                private int end_;
                private int semantic_;
                
                public static final Descriptors.Descriptor getDescriptor() {
                    return DescriptorProtos.internal_static_google_protobuf_GeneratedCodeInfo_Annotation_descriptor;
                }
                
                @Override
                protected FieldAccessorTable internalGetFieldAccessorTable() {
                    return DescriptorProtos.internal_static_google_protobuf_GeneratedCodeInfo_Annotation_fieldAccessorTable.ensureFieldAccessorsInitialized(Annotation.class, Builder.class);
                }
                
                private Builder() {
                    this.path_ = GeneratedMessage.emptyIntList();
                    this.sourceFile_ = "";
                    this.semantic_ = 0;
                }
                
                private Builder(final BuilderParent parent) {
                    super(parent);
                    this.path_ = GeneratedMessage.emptyIntList();
                    this.sourceFile_ = "";
                    this.semantic_ = 0;
                }
                
                @Override
                public Builder clear() {
                    super.clear();
                    this.bitField0_ = 0;
                    this.path_ = GeneratedMessage.emptyIntList();
                    this.sourceFile_ = "";
                    this.begin_ = 0;
                    this.end_ = 0;
                    this.semantic_ = 0;
                    return this;
                }
                
                @Override
                public Descriptors.Descriptor getDescriptorForType() {
                    return DescriptorProtos.internal_static_google_protobuf_GeneratedCodeInfo_Annotation_descriptor;
                }
                
                @Override
                public Annotation getDefaultInstanceForType() {
                    return Annotation.getDefaultInstance();
                }
                
                @Override
                public Annotation build() {
                    final Annotation result = this.buildPartial();
                    if (!result.isInitialized()) {
                        throw AbstractMessage.Builder.newUninitializedMessageException(result);
                    }
                    return result;
                }
                
                @Override
                public Annotation buildPartial() {
                    final Annotation result = new Annotation((GeneratedMessage.Builder)this);
                    if (this.bitField0_ != 0) {
                        this.buildPartial0(result);
                    }
                    this.onBuilt();
                    return result;
                }
                
                private void buildPartial0(final Annotation result) {
                    final int from_bitField0_ = this.bitField0_;
                    if ((from_bitField0_ & 0x1) != 0x0) {
                        this.path_.makeImmutable();
                        result.path_ = this.path_;
                    }
                    int to_bitField0_ = 0;
                    if ((from_bitField0_ & 0x2) != 0x0) {
                        result.sourceFile_ = this.sourceFile_;
                        to_bitField0_ |= 0x1;
                    }
                    if ((from_bitField0_ & 0x4) != 0x0) {
                        result.begin_ = this.begin_;
                        to_bitField0_ |= 0x2;
                    }
                    if ((from_bitField0_ & 0x8) != 0x0) {
                        result.end_ = this.end_;
                        to_bitField0_ |= 0x4;
                    }
                    if ((from_bitField0_ & 0x10) != 0x0) {
                        result.semantic_ = this.semantic_;
                        to_bitField0_ |= 0x8;
                    }
                    result.bitField0_ |= to_bitField0_;
                }
                
                @Override
                public Builder mergeFrom(final Message other) {
                    if (other instanceof Annotation) {
                        return this.mergeFrom((Annotation)other);
                    }
                    super.mergeFrom(other);
                    return this;
                }
                
                public Builder mergeFrom(final Annotation other) {
                    if (other == Annotation.getDefaultInstance()) {
                        return this;
                    }
                    if (!other.path_.isEmpty()) {
                        if (this.path_.isEmpty()) {
                            (this.path_ = other.path_).makeImmutable();
                            this.bitField0_ |= 0x1;
                        }
                        else {
                            this.ensurePathIsMutable();
                            this.path_.addAll(other.path_);
                        }
                        this.onChanged();
                    }
                    if (other.hasSourceFile()) {
                        this.sourceFile_ = other.sourceFile_;
                        this.bitField0_ |= 0x2;
                        this.onChanged();
                    }
                    if (other.hasBegin()) {
                        this.setBegin(other.getBegin());
                    }
                    if (other.hasEnd()) {
                        this.setEnd(other.getEnd());
                    }
                    if (other.hasSemantic()) {
                        this.setSemantic(other.getSemantic());
                    }
                    this.mergeUnknownFields(other.getUnknownFields());
                    this.onChanged();
                    return this;
                }
                
                @Override
                public final boolean isInitialized() {
                    return true;
                }
                
                @Override
                public Builder mergeFrom(final CodedInputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
                    if (extensionRegistry == null) {
                        throw new NullPointerException();
                    }
                    try {
                        boolean done = false;
                        while (!done) {
                            final int tag = input.readTag();
                            switch (tag) {
                                case 0: {
                                    done = true;
                                    continue;
                                }
                                case 8: {
                                    final int v = input.readInt32();
                                    this.ensurePathIsMutable();
                                    this.path_.addInt(v);
                                    continue;
                                }
                                case 10: {
                                    final int length = input.readRawVarint32();
                                    final int limit = input.pushLimit(length);
                                    this.ensurePathIsMutable();
                                    while (input.getBytesUntilLimit() > 0) {
                                        this.path_.addInt(input.readInt32());
                                    }
                                    input.popLimit(limit);
                                    continue;
                                }
                                case 18: {
                                    this.sourceFile_ = input.readBytes();
                                    this.bitField0_ |= 0x2;
                                    continue;
                                }
                                case 24: {
                                    this.begin_ = input.readInt32();
                                    this.bitField0_ |= 0x4;
                                    continue;
                                }
                                case 32: {
                                    this.end_ = input.readInt32();
                                    this.bitField0_ |= 0x8;
                                    continue;
                                }
                                case 40: {
                                    final int tmpRaw = input.readEnum();
                                    final Semantic tmpValue = Semantic.forNumber(tmpRaw);
                                    if (tmpValue == null) {
                                        this.mergeUnknownVarintField(5, tmpRaw);
                                        continue;
                                    }
                                    this.semantic_ = tmpRaw;
                                    this.bitField0_ |= 0x10;
                                    continue;
                                }
                                default: {
                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                                        done = true;
                                        continue;
                                    }
                                    continue;
                                }
                            }
                        }
                    }
                    catch (final InvalidProtocolBufferException e) {
                        throw e.unwrapIOException();
                    }
                    finally {
                        this.onChanged();
                    }
                    return this;
                }
                
                private void ensurePathIsMutable() {
                    if (!this.path_.isModifiable()) {
                        this.path_ = GeneratedMessage.makeMutableCopy(this.path_);
                    }
                    this.bitField0_ |= 0x1;
                }
                
                @Override
                public List<Integer> getPathList() {
                    this.path_.makeImmutable();
                    return this.path_;
                }
                
                @Override
                public int getPathCount() {
                    return this.path_.size();
                }
                
                @Override
                public int getPath(final int index) {
                    return this.path_.getInt(index);
                }
                
                public Builder setPath(final int index, final int value) {
                    this.ensurePathIsMutable();
                    this.path_.setInt(index, value);
                    this.bitField0_ |= 0x1;
                    this.onChanged();
                    return this;
                }
                
                public Builder addPath(final int value) {
                    this.ensurePathIsMutable();
                    this.path_.addInt(value);
                    this.bitField0_ |= 0x1;
                    this.onChanged();
                    return this;
                }
                
                public Builder addAllPath(final Iterable<? extends Integer> values) {
                    this.ensurePathIsMutable();
                    AbstractMessageLite.Builder.addAll(values, this.path_);
                    this.bitField0_ |= 0x1;
                    this.onChanged();
                    return this;
                }
                
                public Builder clearPath() {
                    this.path_ = GeneratedMessage.emptyIntList();
                    this.bitField0_ &= 0xFFFFFFFE;
                    this.onChanged();
                    return this;
                }
                
                @Override
                public boolean hasSourceFile() {
                    return (this.bitField0_ & 0x2) != 0x0;
                }
                
                @Override
                public String getSourceFile() {
                    final Object ref = this.sourceFile_;
                    if (!(ref instanceof String)) {
                        final ByteString bs = (ByteString)ref;
                        final String s = bs.toStringUtf8();
                        if (bs.isValidUtf8()) {
                            this.sourceFile_ = s;
                        }
                        return s;
                    }
                    return (String)ref;
                }
                
                @Override
                public ByteString getSourceFileBytes() {
                    final Object ref = this.sourceFile_;
                    if (ref instanceof String) {
                        final ByteString b = ByteString.copyFromUtf8((String)ref);
                        return (ByteString)(this.sourceFile_ = b);
                    }
                    return (ByteString)ref;
                }
                
                public Builder setSourceFile(final String value) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.sourceFile_ = value;
                    this.bitField0_ |= 0x2;
                    this.onChanged();
                    return this;
                }
                
                public Builder clearSourceFile() {
                    this.sourceFile_ = Annotation.getDefaultInstance().getSourceFile();
                    this.bitField0_ &= 0xFFFFFFFD;
                    this.onChanged();
                    return this;
                }
                
                public Builder setSourceFileBytes(final ByteString value) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.sourceFile_ = value;
                    this.bitField0_ |= 0x2;
                    this.onChanged();
                    return this;
                }
                
                @Override
                public boolean hasBegin() {
                    return (this.bitField0_ & 0x4) != 0x0;
                }
                
                @Override
                public int getBegin() {
                    return this.begin_;
                }
                
                public Builder setBegin(final int value) {
                    this.begin_ = value;
                    this.bitField0_ |= 0x4;
                    this.onChanged();
                    return this;
                }
                
                public Builder clearBegin() {
                    this.bitField0_ &= 0xFFFFFFFB;
                    this.begin_ = 0;
                    this.onChanged();
                    return this;
                }
                
                @Override
                public boolean hasEnd() {
                    return (this.bitField0_ & 0x8) != 0x0;
                }
                
                @Override
                public int getEnd() {
                    return this.end_;
                }
                
                public Builder setEnd(final int value) {
                    this.end_ = value;
                    this.bitField0_ |= 0x8;
                    this.onChanged();
                    return this;
                }
                
                public Builder clearEnd() {
                    this.bitField0_ &= 0xFFFFFFF7;
                    this.end_ = 0;
                    this.onChanged();
                    return this;
                }
                
                @Override
                public boolean hasSemantic() {
                    return (this.bitField0_ & 0x10) != 0x0;
                }
                
                @Override
                public Semantic getSemantic() {
                    final Semantic result = Semantic.forNumber(this.semantic_);
                    return (result == null) ? Semantic.NONE : result;
                }
                
                public Builder setSemantic(final Semantic value) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.bitField0_ |= 0x10;
                    this.semantic_ = value.getNumber();
                    this.onChanged();
                    return this;
                }
                
                public Builder clearSemantic() {
                    this.bitField0_ &= 0xFFFFFFEF;
                    this.semantic_ = 0;
                    this.onChanged();
                    return this;
                }
            }
        }
        
        public static final class Builder extends GeneratedMessage.Builder<Builder> implements GeneratedCodeInfoOrBuilder
        {
            private int bitField0_;
            private List<Annotation> annotation_;
            private RepeatedFieldBuilder<Annotation, Annotation.Builder, AnnotationOrBuilder> annotationBuilder_;
            
            public static final Descriptors.Descriptor getDescriptor() {
                return DescriptorProtos.internal_static_google_protobuf_GeneratedCodeInfo_descriptor;
            }
            
            @Override
            protected FieldAccessorTable internalGetFieldAccessorTable() {
                return DescriptorProtos.internal_static_google_protobuf_GeneratedCodeInfo_fieldAccessorTable.ensureFieldAccessorsInitialized(GeneratedCodeInfo.class, Builder.class);
            }
            
            private Builder() {
                this.annotation_ = Collections.emptyList();
            }
            
            private Builder(final BuilderParent parent) {
                super(parent);
                this.annotation_ = Collections.emptyList();
            }
            
            @Override
            public Builder clear() {
                super.clear();
                this.bitField0_ = 0;
                if (this.annotationBuilder_ == null) {
                    this.annotation_ = Collections.emptyList();
                }
                else {
                    this.annotation_ = null;
                    this.annotationBuilder_.clear();
                }
                this.bitField0_ &= 0xFFFFFFFE;
                return this;
            }
            
            @Override
            public Descriptors.Descriptor getDescriptorForType() {
                return DescriptorProtos.internal_static_google_protobuf_GeneratedCodeInfo_descriptor;
            }
            
            @Override
            public GeneratedCodeInfo getDefaultInstanceForType() {
                return GeneratedCodeInfo.getDefaultInstance();
            }
            
            @Override
            public GeneratedCodeInfo build() {
                final GeneratedCodeInfo result = this.buildPartial();
                if (!result.isInitialized()) {
                    throw AbstractMessage.Builder.newUninitializedMessageException(result);
                }
                return result;
            }
            
            @Override
            public GeneratedCodeInfo buildPartial() {
                final GeneratedCodeInfo result = new GeneratedCodeInfo((GeneratedMessage.Builder)this);
                this.buildPartialRepeatedFields(result);
                if (this.bitField0_ != 0) {
                    this.buildPartial0(result);
                }
                this.onBuilt();
                return result;
            }
            
            private void buildPartialRepeatedFields(final GeneratedCodeInfo result) {
                if (this.annotationBuilder_ == null) {
                    if ((this.bitField0_ & 0x1) != 0x0) {
                        this.annotation_ = Collections.unmodifiableList((List<? extends Annotation>)this.annotation_);
                        this.bitField0_ &= 0xFFFFFFFE;
                    }
                    result.annotation_ = this.annotation_;
                }
                else {
                    result.annotation_ = this.annotationBuilder_.build();
                }
            }
            
            private void buildPartial0(final GeneratedCodeInfo result) {
                final int from_bitField0_ = this.bitField0_;
            }
            
            @Override
            public Builder mergeFrom(final Message other) {
                if (other instanceof GeneratedCodeInfo) {
                    return this.mergeFrom((GeneratedCodeInfo)other);
                }
                super.mergeFrom(other);
                return this;
            }
            
            public Builder mergeFrom(final GeneratedCodeInfo other) {
                if (other == GeneratedCodeInfo.getDefaultInstance()) {
                    return this;
                }
                if (this.annotationBuilder_ == null) {
                    if (!other.annotation_.isEmpty()) {
                        if (this.annotation_.isEmpty()) {
                            this.annotation_ = other.annotation_;
                            this.bitField0_ &= 0xFFFFFFFE;
                        }
                        else {
                            this.ensureAnnotationIsMutable();
                            this.annotation_.addAll(other.annotation_);
                        }
                        this.onChanged();
                    }
                }
                else if (!other.annotation_.isEmpty()) {
                    if (this.annotationBuilder_.isEmpty()) {
                        this.annotationBuilder_.dispose();
                        this.annotationBuilder_ = null;
                        this.annotation_ = other.annotation_;
                        this.bitField0_ &= 0xFFFFFFFE;
                        this.annotationBuilder_ = (GeneratedMessage.alwaysUseFieldBuilders ? this.internalGetAnnotationFieldBuilder() : null);
                    }
                    else {
                        this.annotationBuilder_.addAllMessages(other.annotation_);
                    }
                }
                this.mergeUnknownFields(other.getUnknownFields());
                this.onChanged();
                return this;
            }
            
            @Override
            public final boolean isInitialized() {
                return true;
            }
            
            @Override
            public Builder mergeFrom(final CodedInputStream input, final ExtensionRegistryLite extensionRegistry) throws IOException {
                if (extensionRegistry == null) {
                    throw new NullPointerException();
                }
                try {
                    boolean done = false;
                    while (!done) {
                        final int tag = input.readTag();
                        switch (tag) {
                            case 0: {
                                done = true;
                                continue;
                            }
                            case 10: {
                                final Annotation m = input.readMessage(Annotation.parser(), extensionRegistry);
                                if (this.annotationBuilder_ == null) {
                                    this.ensureAnnotationIsMutable();
                                    this.annotation_.add(m);
                                    continue;
                                }
                                this.annotationBuilder_.addMessage(m);
                                continue;
                            }
                            default: {
                                if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                                    done = true;
                                    continue;
                                }
                                continue;
                            }
                        }
                    }
                }
                catch (final InvalidProtocolBufferException e) {
                    throw e.unwrapIOException();
                }
                finally {
                    this.onChanged();
                }
                return this;
            }
            
            private void ensureAnnotationIsMutable() {
                if ((this.bitField0_ & 0x1) == 0x0) {
                    this.annotation_ = new ArrayList<Annotation>(this.annotation_);
                    this.bitField0_ |= 0x1;
                }
            }
            
            @Override
            public List<Annotation> getAnnotationList() {
                if (this.annotationBuilder_ == null) {
                    return Collections.unmodifiableList((List<? extends Annotation>)this.annotation_);
                }
                return this.annotationBuilder_.getMessageList();
            }
            
            @Override
            public int getAnnotationCount() {
                if (this.annotationBuilder_ == null) {
                    return this.annotation_.size();
                }
                return this.annotationBuilder_.getCount();
            }
            
            @Override
            public Annotation getAnnotation(final int index) {
                if (this.annotationBuilder_ == null) {
                    return this.annotation_.get(index);
                }
                return this.annotationBuilder_.getMessage(index);
            }
            
            public Builder setAnnotation(final int index, final Annotation value) {
                if (this.annotationBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.ensureAnnotationIsMutable();
                    this.annotation_.set(index, value);
                    this.onChanged();
                }
                else {
                    this.annotationBuilder_.setMessage(index, value);
                }
                return this;
            }
            
            public Builder setAnnotation(final int index, final Annotation.Builder builderForValue) {
                if (this.annotationBuilder_ == null) {
                    this.ensureAnnotationIsMutable();
                    this.annotation_.set(index, builderForValue.build());
                    this.onChanged();
                }
                else {
                    this.annotationBuilder_.setMessage(index, builderForValue.build());
                }
                return this;
            }
            
            public Builder addAnnotation(final Annotation value) {
                if (this.annotationBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.ensureAnnotationIsMutable();
                    this.annotation_.add(value);
                    this.onChanged();
                }
                else {
                    this.annotationBuilder_.addMessage(value);
                }
                return this;
            }
            
            public Builder addAnnotation(final int index, final Annotation value) {
                if (this.annotationBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    this.ensureAnnotationIsMutable();
                    this.annotation_.add(index, value);
                    this.onChanged();
                }
                else {
                    this.annotationBuilder_.addMessage(index, value);
                }
                return this;
            }
            
            public Builder addAnnotation(final Annotation.Builder builderForValue) {
                if (this.annotationBuilder_ == null) {
                    this.ensureAnnotationIsMutable();
                    this.annotation_.add(builderForValue.build());
                    this.onChanged();
                }
                else {
                    this.annotationBuilder_.addMessage(builderForValue.build());
                }
                return this;
            }
            
            public Builder addAnnotation(final int index, final Annotation.Builder builderForValue) {
                if (this.annotationBuilder_ == null) {
                    this.ensureAnnotationIsMutable();
                    this.annotation_.add(index, builderForValue.build());
                    this.onChanged();
                }
                else {
                    this.annotationBuilder_.addMessage(index, builderForValue.build());
                }
                return this;
            }
            
            public Builder addAllAnnotation(final Iterable<? extends Annotation> values) {
                if (this.annotationBuilder_ == null) {
                    this.ensureAnnotationIsMutable();
                    AbstractMessageLite.Builder.addAll(values, this.annotation_);
                    this.onChanged();
                }
                else {
                    this.annotationBuilder_.addAllMessages(values);
                }
                return this;
            }
            
            public Builder clearAnnotation() {
                if (this.annotationBuilder_ == null) {
                    this.annotation_ = Collections.emptyList();
                    this.bitField0_ &= 0xFFFFFFFE;
                    this.onChanged();
                }
                else {
                    this.annotationBuilder_.clear();
                }
                return this;
            }
            
            public Builder removeAnnotation(final int index) {
                if (this.annotationBuilder_ == null) {
                    this.ensureAnnotationIsMutable();
                    this.annotation_.remove(index);
                    this.onChanged();
                }
                else {
                    this.annotationBuilder_.remove(index);
                }
                return this;
            }
            
            public Annotation.Builder getAnnotationBuilder(final int index) {
                return this.internalGetAnnotationFieldBuilder().getBuilder(index);
            }
            
            @Override
            public AnnotationOrBuilder getAnnotationOrBuilder(final int index) {
                if (this.annotationBuilder_ == null) {
                    return this.annotation_.get(index);
                }
                return this.annotationBuilder_.getMessageOrBuilder(index);
            }
            
            @Override
            public List<? extends AnnotationOrBuilder> getAnnotationOrBuilderList() {
                if (this.annotationBuilder_ != null) {
                    return this.annotationBuilder_.getMessageOrBuilderList();
                }
                return Collections.unmodifiableList((List<? extends AnnotationOrBuilder>)this.annotation_);
            }
            
            public Annotation.Builder addAnnotationBuilder() {
                return this.internalGetAnnotationFieldBuilder().addBuilder(Annotation.getDefaultInstance());
            }
            
            public Annotation.Builder addAnnotationBuilder(final int index) {
                return this.internalGetAnnotationFieldBuilder().addBuilder(index, Annotation.getDefaultInstance());
            }
            
            public List<Annotation.Builder> getAnnotationBuilderList() {
                return this.internalGetAnnotationFieldBuilder().getBuilderList();
            }
            
            private RepeatedFieldBuilder<Annotation, Annotation.Builder, AnnotationOrBuilder> internalGetAnnotationFieldBuilder() {
                if (this.annotationBuilder_ == null) {
                    this.annotationBuilder_ = new RepeatedFieldBuilder<Annotation, Annotation.Builder, AnnotationOrBuilder>(this.annotation_, (this.bitField0_ & 0x1) != 0x0, this.getParentForChildren(), this.isClean());
                    this.annotation_ = null;
                }
                return this.annotationBuilder_;
            }
        }
        
        public interface AnnotationOrBuilder extends MessageOrBuilder
        {
            List<Integer> getPathList();
            
            int getPathCount();
            
            int getPath(final int index);
            
            boolean hasSourceFile();
            
            String getSourceFile();
            
            ByteString getSourceFileBytes();
            
            boolean hasBegin();
            
            int getBegin();
            
            boolean hasEnd();
            
            int getEnd();
            
            boolean hasSemantic();
            
            Annotation.Semantic getSemantic();
        }
    }
    
    public interface UninterpretedOptionOrBuilder extends MessageOrBuilder
    {
        List<UninterpretedOption.NamePart> getNameList();
        
        UninterpretedOption.NamePart getName(final int index);
        
        int getNameCount();
        
        List<? extends UninterpretedOption.NamePartOrBuilder> getNameOrBuilderList();
        
        UninterpretedOption.NamePartOrBuilder getNameOrBuilder(final int index);
        
        boolean hasIdentifierValue();
        
        String getIdentifierValue();
        
        ByteString getIdentifierValueBytes();
        
        boolean hasPositiveIntValue();
        
        long getPositiveIntValue();
        
        boolean hasNegativeIntValue();
        
        long getNegativeIntValue();
        
        boolean hasDoubleValue();
        
        double getDoubleValue();
        
        boolean hasStringValue();
        
        ByteString getStringValue();
        
        boolean hasAggregateValue();
        
        String getAggregateValue();
        
        ByteString getAggregateValueBytes();
    }
    
    public interface FeatureSetOrBuilder extends GeneratedMessage.ExtendableMessageOrBuilder<FeatureSet>
    {
        boolean hasFieldPresence();
        
        FeatureSet.FieldPresence getFieldPresence();
        
        boolean hasEnumType();
        
        FeatureSet.EnumType getEnumType();
        
        boolean hasRepeatedFieldEncoding();
        
        FeatureSet.RepeatedFieldEncoding getRepeatedFieldEncoding();
        
        boolean hasUtf8Validation();
        
        FeatureSet.Utf8Validation getUtf8Validation();
        
        boolean hasMessageEncoding();
        
        FeatureSet.MessageEncoding getMessageEncoding();
        
        boolean hasJsonFormat();
        
        FeatureSet.JsonFormat getJsonFormat();
        
        boolean hasEnforceNamingStyle();
        
        FeatureSet.EnforceNamingStyle getEnforceNamingStyle();
        
        boolean hasDefaultSymbolVisibility();
        
        FeatureSet.VisibilityFeature.DefaultSymbolVisibility getDefaultSymbolVisibility();
    }
    
    public interface SourceCodeInfoOrBuilder extends GeneratedMessage.ExtendableMessageOrBuilder<SourceCodeInfo>
    {
        List<SourceCodeInfo.Location> getLocationList();
        
        SourceCodeInfo.Location getLocation(final int index);
        
        int getLocationCount();
        
        List<? extends SourceCodeInfo.LocationOrBuilder> getLocationOrBuilderList();
        
        SourceCodeInfo.LocationOrBuilder getLocationOrBuilder(final int index);
    }
    
    public interface FileOptionsOrBuilder extends GeneratedMessage.ExtendableMessageOrBuilder<FileOptions>
    {
        boolean hasJavaPackage();
        
        String getJavaPackage();
        
        ByteString getJavaPackageBytes();
        
        boolean hasJavaOuterClassname();
        
        String getJavaOuterClassname();
        
        ByteString getJavaOuterClassnameBytes();
        
        boolean hasJavaMultipleFiles();
        
        boolean getJavaMultipleFiles();
        
        @Deprecated
        boolean hasJavaGenerateEqualsAndHash();
        
        @Deprecated
        boolean getJavaGenerateEqualsAndHash();
        
        boolean hasJavaStringCheckUtf8();
        
        boolean getJavaStringCheckUtf8();
        
        boolean hasOptimizeFor();
        
        FileOptions.OptimizeMode getOptimizeFor();
        
        boolean hasGoPackage();
        
        String getGoPackage();
        
        ByteString getGoPackageBytes();
        
        boolean hasCcGenericServices();
        
        boolean getCcGenericServices();
        
        boolean hasJavaGenericServices();
        
        boolean getJavaGenericServices();
        
        boolean hasPyGenericServices();
        
        boolean getPyGenericServices();
        
        boolean hasDeprecated();
        
        boolean getDeprecated();
        
        boolean hasCcEnableArenas();
        
        boolean getCcEnableArenas();
        
        boolean hasObjcClassPrefix();
        
        String getObjcClassPrefix();
        
        ByteString getObjcClassPrefixBytes();
        
        boolean hasCsharpNamespace();
        
        String getCsharpNamespace();
        
        ByteString getCsharpNamespaceBytes();
        
        boolean hasSwiftPrefix();
        
        String getSwiftPrefix();
        
        ByteString getSwiftPrefixBytes();
        
        boolean hasPhpClassPrefix();
        
        String getPhpClassPrefix();
        
        ByteString getPhpClassPrefixBytes();
        
        boolean hasPhpNamespace();
        
        String getPhpNamespace();
        
        ByteString getPhpNamespaceBytes();
        
        boolean hasPhpMetadataNamespace();
        
        String getPhpMetadataNamespace();
        
        ByteString getPhpMetadataNamespaceBytes();
        
        boolean hasRubyPackage();
        
        String getRubyPackage();
        
        ByteString getRubyPackageBytes();
        
        boolean hasFeatures();
        
        FeatureSet getFeatures();
        
        FeatureSetOrBuilder getFeaturesOrBuilder();
        
        List<UninterpretedOption> getUninterpretedOptionList();
        
        UninterpretedOption getUninterpretedOption(final int index);
        
        int getUninterpretedOptionCount();
        
        List<? extends UninterpretedOptionOrBuilder> getUninterpretedOptionOrBuilderList();
        
        UninterpretedOptionOrBuilder getUninterpretedOptionOrBuilder(final int index);
    }
    
    public interface ServiceOptionsOrBuilder extends GeneratedMessage.ExtendableMessageOrBuilder<ServiceOptions>
    {
        boolean hasFeatures();
        
        FeatureSet getFeatures();
        
        FeatureSetOrBuilder getFeaturesOrBuilder();
        
        boolean hasDeprecated();
        
        boolean getDeprecated();
        
        List<UninterpretedOption> getUninterpretedOptionList();
        
        UninterpretedOption getUninterpretedOption(final int index);
        
        int getUninterpretedOptionCount();
        
        List<? extends UninterpretedOptionOrBuilder> getUninterpretedOptionOrBuilderList();
        
        UninterpretedOptionOrBuilder getUninterpretedOptionOrBuilder(final int index);
    }
    
    public interface MethodOptionsOrBuilder extends GeneratedMessage.ExtendableMessageOrBuilder<MethodOptions>
    {
        boolean hasDeprecated();
        
        boolean getDeprecated();
        
        boolean hasIdempotencyLevel();
        
        MethodOptions.IdempotencyLevel getIdempotencyLevel();
        
        boolean hasFeatures();
        
        FeatureSet getFeatures();
        
        FeatureSetOrBuilder getFeaturesOrBuilder();
        
        List<UninterpretedOption> getUninterpretedOptionList();
        
        UninterpretedOption getUninterpretedOption(final int index);
        
        int getUninterpretedOptionCount();
        
        List<? extends UninterpretedOptionOrBuilder> getUninterpretedOptionOrBuilderList();
        
        UninterpretedOptionOrBuilder getUninterpretedOptionOrBuilder(final int index);
    }
    
    public interface MethodDescriptorProtoOrBuilder extends MessageOrBuilder
    {
        boolean hasName();
        
        String getName();
        
        ByteString getNameBytes();
        
        boolean hasInputType();
        
        String getInputType();
        
        ByteString getInputTypeBytes();
        
        boolean hasOutputType();
        
        String getOutputType();
        
        ByteString getOutputTypeBytes();
        
        boolean hasOptions();
        
        MethodOptions getOptions();
        
        MethodOptionsOrBuilder getOptionsOrBuilder();
        
        boolean hasClientStreaming();
        
        boolean getClientStreaming();
        
        boolean hasServerStreaming();
        
        boolean getServerStreaming();
    }
    
    public interface ServiceDescriptorProtoOrBuilder extends MessageOrBuilder
    {
        boolean hasName();
        
        String getName();
        
        ByteString getNameBytes();
        
        List<MethodDescriptorProto> getMethodList();
        
        MethodDescriptorProto getMethod(final int index);
        
        int getMethodCount();
        
        List<? extends MethodDescriptorProtoOrBuilder> getMethodOrBuilderList();
        
        MethodDescriptorProtoOrBuilder getMethodOrBuilder(final int index);
        
        boolean hasOptions();
        
        ServiceOptions getOptions();
        
        ServiceOptionsOrBuilder getOptionsOrBuilder();
    }
    
    public interface ExtensionRangeOptionsOrBuilder extends GeneratedMessage.ExtendableMessageOrBuilder<ExtensionRangeOptions>
    {
        List<UninterpretedOption> getUninterpretedOptionList();
        
        UninterpretedOption getUninterpretedOption(final int index);
        
        int getUninterpretedOptionCount();
        
        List<? extends UninterpretedOptionOrBuilder> getUninterpretedOptionOrBuilderList();
        
        UninterpretedOptionOrBuilder getUninterpretedOptionOrBuilder(final int index);
        
        List<ExtensionRangeOptions.Declaration> getDeclarationList();
        
        ExtensionRangeOptions.Declaration getDeclaration(final int index);
        
        int getDeclarationCount();
        
        List<? extends ExtensionRangeOptions.DeclarationOrBuilder> getDeclarationOrBuilderList();
        
        ExtensionRangeOptions.DeclarationOrBuilder getDeclarationOrBuilder(final int index);
        
        boolean hasFeatures();
        
        FeatureSet getFeatures();
        
        FeatureSetOrBuilder getFeaturesOrBuilder();
        
        boolean hasVerification();
        
        ExtensionRangeOptions.VerificationState getVerification();
    }
    
    public interface FieldOptionsOrBuilder extends GeneratedMessage.ExtendableMessageOrBuilder<FieldOptions>
    {
        boolean hasCtype();
        
        FieldOptions.CType getCtype();
        
        boolean hasPacked();
        
        boolean getPacked();
        
        boolean hasJstype();
        
        FieldOptions.JSType getJstype();
        
        boolean hasLazy();
        
        boolean getLazy();
        
        boolean hasUnverifiedLazy();
        
        boolean getUnverifiedLazy();
        
        boolean hasDeprecated();
        
        boolean getDeprecated();
        
        @Deprecated
        boolean hasWeak();
        
        @Deprecated
        boolean getWeak();
        
        boolean hasDebugRedact();
        
        boolean getDebugRedact();
        
        boolean hasRetention();
        
        FieldOptions.OptionRetention getRetention();
        
        List<FieldOptions.OptionTargetType> getTargetsList();
        
        int getTargetsCount();
        
        FieldOptions.OptionTargetType getTargets(final int index);
        
        List<FieldOptions.EditionDefault> getEditionDefaultsList();
        
        FieldOptions.EditionDefault getEditionDefaults(final int index);
        
        int getEditionDefaultsCount();
        
        List<? extends FieldOptions.EditionDefaultOrBuilder> getEditionDefaultsOrBuilderList();
        
        FieldOptions.EditionDefaultOrBuilder getEditionDefaultsOrBuilder(final int index);
        
        boolean hasFeatures();
        
        FeatureSet getFeatures();
        
        FeatureSetOrBuilder getFeaturesOrBuilder();
        
        boolean hasFeatureSupport();
        
        FieldOptions.FeatureSupport getFeatureSupport();
        
        FieldOptions.FeatureSupportOrBuilder getFeatureSupportOrBuilder();
        
        List<UninterpretedOption> getUninterpretedOptionList();
        
        UninterpretedOption getUninterpretedOption(final int index);
        
        int getUninterpretedOptionCount();
        
        List<? extends UninterpretedOptionOrBuilder> getUninterpretedOptionOrBuilderList();
        
        UninterpretedOptionOrBuilder getUninterpretedOptionOrBuilder(final int index);
    }
    
    public interface FieldDescriptorProtoOrBuilder extends MessageOrBuilder
    {
        boolean hasName();
        
        String getName();
        
        ByteString getNameBytes();
        
        boolean hasNumber();
        
        int getNumber();
        
        boolean hasLabel();
        
        FieldDescriptorProto.Label getLabel();
        
        boolean hasType();
        
        FieldDescriptorProto.Type getType();
        
        boolean hasTypeName();
        
        String getTypeName();
        
        ByteString getTypeNameBytes();
        
        boolean hasExtendee();
        
        String getExtendee();
        
        ByteString getExtendeeBytes();
        
        boolean hasDefaultValue();
        
        String getDefaultValue();
        
        ByteString getDefaultValueBytes();
        
        boolean hasOneofIndex();
        
        int getOneofIndex();
        
        boolean hasJsonName();
        
        String getJsonName();
        
        ByteString getJsonNameBytes();
        
        boolean hasOptions();
        
        FieldOptions getOptions();
        
        FieldOptionsOrBuilder getOptionsOrBuilder();
        
        boolean hasProto3Optional();
        
        boolean getProto3Optional();
    }
    
    public interface DescriptorProtoOrBuilder extends MessageOrBuilder
    {
        boolean hasName();
        
        String getName();
        
        ByteString getNameBytes();
        
        List<FieldDescriptorProto> getFieldList();
        
        FieldDescriptorProto getField(final int index);
        
        int getFieldCount();
        
        List<? extends FieldDescriptorProtoOrBuilder> getFieldOrBuilderList();
        
        FieldDescriptorProtoOrBuilder getFieldOrBuilder(final int index);
        
        List<FieldDescriptorProto> getExtensionList();
        
        FieldDescriptorProto getExtension(final int index);
        
        int getExtensionCount();
        
        List<? extends FieldDescriptorProtoOrBuilder> getExtensionOrBuilderList();
        
        FieldDescriptorProtoOrBuilder getExtensionOrBuilder(final int index);
        
        List<DescriptorProto> getNestedTypeList();
        
        DescriptorProto getNestedType(final int index);
        
        int getNestedTypeCount();
        
        List<? extends DescriptorProtoOrBuilder> getNestedTypeOrBuilderList();
        
        DescriptorProtoOrBuilder getNestedTypeOrBuilder(final int index);
        
        List<EnumDescriptorProto> getEnumTypeList();
        
        EnumDescriptorProto getEnumType(final int index);
        
        int getEnumTypeCount();
        
        List<? extends EnumDescriptorProtoOrBuilder> getEnumTypeOrBuilderList();
        
        EnumDescriptorProtoOrBuilder getEnumTypeOrBuilder(final int index);
        
        List<DescriptorProto.ExtensionRange> getExtensionRangeList();
        
        DescriptorProto.ExtensionRange getExtensionRange(final int index);
        
        int getExtensionRangeCount();
        
        List<? extends DescriptorProto.ExtensionRangeOrBuilder> getExtensionRangeOrBuilderList();
        
        DescriptorProto.ExtensionRangeOrBuilder getExtensionRangeOrBuilder(final int index);
        
        List<OneofDescriptorProto> getOneofDeclList();
        
        OneofDescriptorProto getOneofDecl(final int index);
        
        int getOneofDeclCount();
        
        List<? extends OneofDescriptorProtoOrBuilder> getOneofDeclOrBuilderList();
        
        OneofDescriptorProtoOrBuilder getOneofDeclOrBuilder(final int index);
        
        boolean hasOptions();
        
        MessageOptions getOptions();
        
        MessageOptionsOrBuilder getOptionsOrBuilder();
        
        List<DescriptorProto.ReservedRange> getReservedRangeList();
        
        DescriptorProto.ReservedRange getReservedRange(final int index);
        
        int getReservedRangeCount();
        
        List<? extends DescriptorProto.ReservedRangeOrBuilder> getReservedRangeOrBuilderList();
        
        DescriptorProto.ReservedRangeOrBuilder getReservedRangeOrBuilder(final int index);
        
        List<String> getReservedNameList();
        
        int getReservedNameCount();
        
        String getReservedName(final int index);
        
        ByteString getReservedNameBytes(final int index);
        
        boolean hasVisibility();
        
        SymbolVisibility getVisibility();
    }
    
    public interface EnumDescriptorProtoOrBuilder extends MessageOrBuilder
    {
        boolean hasName();
        
        String getName();
        
        ByteString getNameBytes();
        
        List<EnumValueDescriptorProto> getValueList();
        
        EnumValueDescriptorProto getValue(final int index);
        
        int getValueCount();
        
        List<? extends EnumValueDescriptorProtoOrBuilder> getValueOrBuilderList();
        
        EnumValueDescriptorProtoOrBuilder getValueOrBuilder(final int index);
        
        boolean hasOptions();
        
        EnumOptions getOptions();
        
        EnumOptionsOrBuilder getOptionsOrBuilder();
        
        List<EnumDescriptorProto.EnumReservedRange> getReservedRangeList();
        
        EnumDescriptorProto.EnumReservedRange getReservedRange(final int index);
        
        int getReservedRangeCount();
        
        List<? extends EnumDescriptorProto.EnumReservedRangeOrBuilder> getReservedRangeOrBuilderList();
        
        EnumDescriptorProto.EnumReservedRangeOrBuilder getReservedRangeOrBuilder(final int index);
        
        List<String> getReservedNameList();
        
        int getReservedNameCount();
        
        String getReservedName(final int index);
        
        ByteString getReservedNameBytes(final int index);
        
        boolean hasVisibility();
        
        SymbolVisibility getVisibility();
    }
    
    public interface EnumValueDescriptorProtoOrBuilder extends MessageOrBuilder
    {
        boolean hasName();
        
        String getName();
        
        ByteString getNameBytes();
        
        boolean hasNumber();
        
        int getNumber();
        
        boolean hasOptions();
        
        EnumValueOptions getOptions();
        
        EnumValueOptionsOrBuilder getOptionsOrBuilder();
    }
    
    public interface EnumValueOptionsOrBuilder extends GeneratedMessage.ExtendableMessageOrBuilder<EnumValueOptions>
    {
        boolean hasDeprecated();
        
        boolean getDeprecated();
        
        boolean hasFeatures();
        
        FeatureSet getFeatures();
        
        FeatureSetOrBuilder getFeaturesOrBuilder();
        
        boolean hasDebugRedact();
        
        boolean getDebugRedact();
        
        boolean hasFeatureSupport();
        
        FieldOptions.FeatureSupport getFeatureSupport();
        
        FieldOptions.FeatureSupportOrBuilder getFeatureSupportOrBuilder();
        
        List<UninterpretedOption> getUninterpretedOptionList();
        
        UninterpretedOption getUninterpretedOption(final int index);
        
        int getUninterpretedOptionCount();
        
        List<? extends UninterpretedOptionOrBuilder> getUninterpretedOptionOrBuilderList();
        
        UninterpretedOptionOrBuilder getUninterpretedOptionOrBuilder(final int index);
    }
    
    public interface EnumOptionsOrBuilder extends GeneratedMessage.ExtendableMessageOrBuilder<EnumOptions>
    {
        boolean hasAllowAlias();
        
        boolean getAllowAlias();
        
        boolean hasDeprecated();
        
        boolean getDeprecated();
        
        @Deprecated
        boolean hasDeprecatedLegacyJsonFieldConflicts();
        
        @Deprecated
        boolean getDeprecatedLegacyJsonFieldConflicts();
        
        boolean hasFeatures();
        
        FeatureSet getFeatures();
        
        FeatureSetOrBuilder getFeaturesOrBuilder();
        
        List<UninterpretedOption> getUninterpretedOptionList();
        
        UninterpretedOption getUninterpretedOption(final int index);
        
        int getUninterpretedOptionCount();
        
        List<? extends UninterpretedOptionOrBuilder> getUninterpretedOptionOrBuilderList();
        
        UninterpretedOptionOrBuilder getUninterpretedOptionOrBuilder(final int index);
    }
    
    public interface OneofDescriptorProtoOrBuilder extends MessageOrBuilder
    {
        boolean hasName();
        
        String getName();
        
        ByteString getNameBytes();
        
        boolean hasOptions();
        
        OneofOptions getOptions();
        
        OneofOptionsOrBuilder getOptionsOrBuilder();
    }
    
    public interface OneofOptionsOrBuilder extends GeneratedMessage.ExtendableMessageOrBuilder<OneofOptions>
    {
        boolean hasFeatures();
        
        FeatureSet getFeatures();
        
        FeatureSetOrBuilder getFeaturesOrBuilder();
        
        List<UninterpretedOption> getUninterpretedOptionList();
        
        UninterpretedOption getUninterpretedOption(final int index);
        
        int getUninterpretedOptionCount();
        
        List<? extends UninterpretedOptionOrBuilder> getUninterpretedOptionOrBuilderList();
        
        UninterpretedOptionOrBuilder getUninterpretedOptionOrBuilder(final int index);
    }
    
    public interface MessageOptionsOrBuilder extends GeneratedMessage.ExtendableMessageOrBuilder<MessageOptions>
    {
        boolean hasMessageSetWireFormat();
        
        boolean getMessageSetWireFormat();
        
        boolean hasNoStandardDescriptorAccessor();
        
        boolean getNoStandardDescriptorAccessor();
        
        boolean hasDeprecated();
        
        boolean getDeprecated();
        
        boolean hasMapEntry();
        
        boolean getMapEntry();
        
        @Deprecated
        boolean hasDeprecatedLegacyJsonFieldConflicts();
        
        @Deprecated
        boolean getDeprecatedLegacyJsonFieldConflicts();
        
        boolean hasFeatures();
        
        FeatureSet getFeatures();
        
        FeatureSetOrBuilder getFeaturesOrBuilder();
        
        List<UninterpretedOption> getUninterpretedOptionList();
        
        UninterpretedOption getUninterpretedOption(final int index);
        
        int getUninterpretedOptionCount();
        
        List<? extends UninterpretedOptionOrBuilder> getUninterpretedOptionOrBuilderList();
        
        UninterpretedOptionOrBuilder getUninterpretedOptionOrBuilder(final int index);
    }
    
    public interface FileDescriptorProtoOrBuilder extends MessageOrBuilder
    {
        boolean hasName();
        
        String getName();
        
        ByteString getNameBytes();
        
        boolean hasPackage();
        
        String getPackage();
        
        ByteString getPackageBytes();
        
        List<String> getDependencyList();
        
        int getDependencyCount();
        
        String getDependency(final int index);
        
        ByteString getDependencyBytes(final int index);
        
        List<Integer> getPublicDependencyList();
        
        int getPublicDependencyCount();
        
        int getPublicDependency(final int index);
        
        List<Integer> getWeakDependencyList();
        
        int getWeakDependencyCount();
        
        int getWeakDependency(final int index);
        
        List<String> getOptionDependencyList();
        
        int getOptionDependencyCount();
        
        String getOptionDependency(final int index);
        
        ByteString getOptionDependencyBytes(final int index);
        
        List<DescriptorProto> getMessageTypeList();
        
        DescriptorProto getMessageType(final int index);
        
        int getMessageTypeCount();
        
        List<? extends DescriptorProtoOrBuilder> getMessageTypeOrBuilderList();
        
        DescriptorProtoOrBuilder getMessageTypeOrBuilder(final int index);
        
        List<EnumDescriptorProto> getEnumTypeList();
        
        EnumDescriptorProto getEnumType(final int index);
        
        int getEnumTypeCount();
        
        List<? extends EnumDescriptorProtoOrBuilder> getEnumTypeOrBuilderList();
        
        EnumDescriptorProtoOrBuilder getEnumTypeOrBuilder(final int index);
        
        List<ServiceDescriptorProto> getServiceList();
        
        ServiceDescriptorProto getService(final int index);
        
        int getServiceCount();
        
        List<? extends ServiceDescriptorProtoOrBuilder> getServiceOrBuilderList();
        
        ServiceDescriptorProtoOrBuilder getServiceOrBuilder(final int index);
        
        List<FieldDescriptorProto> getExtensionList();
        
        FieldDescriptorProto getExtension(final int index);
        
        int getExtensionCount();
        
        List<? extends FieldDescriptorProtoOrBuilder> getExtensionOrBuilderList();
        
        FieldDescriptorProtoOrBuilder getExtensionOrBuilder(final int index);
        
        boolean hasOptions();
        
        FileOptions getOptions();
        
        FileOptionsOrBuilder getOptionsOrBuilder();
        
        boolean hasSourceCodeInfo();
        
        SourceCodeInfo getSourceCodeInfo();
        
        SourceCodeInfoOrBuilder getSourceCodeInfoOrBuilder();
        
        boolean hasSyntax();
        
        String getSyntax();
        
        ByteString getSyntaxBytes();
        
        boolean hasEdition();
        
        Edition getEdition();
    }
    
    public interface FeatureSetDefaultsOrBuilder extends MessageOrBuilder
    {
        List<FeatureSetDefaults.FeatureSetEditionDefault> getDefaultsList();
        
        FeatureSetDefaults.FeatureSetEditionDefault getDefaults(final int index);
        
        int getDefaultsCount();
        
        List<? extends FeatureSetDefaults.FeatureSetEditionDefaultOrBuilder> getDefaultsOrBuilderList();
        
        FeatureSetDefaults.FeatureSetEditionDefaultOrBuilder getDefaultsOrBuilder(final int index);
        
        boolean hasMinimumEdition();
        
        Edition getMinimumEdition();
        
        boolean hasMaximumEdition();
        
        Edition getMaximumEdition();
    }
    
    public interface GeneratedCodeInfoOrBuilder extends MessageOrBuilder
    {
        List<GeneratedCodeInfo.Annotation> getAnnotationList();
        
        GeneratedCodeInfo.Annotation getAnnotation(final int index);
        
        int getAnnotationCount();
        
        List<? extends GeneratedCodeInfo.AnnotationOrBuilder> getAnnotationOrBuilderList();
        
        GeneratedCodeInfo.AnnotationOrBuilder getAnnotationOrBuilder(final int index);
    }
    
    public interface FileDescriptorSetOrBuilder extends GeneratedMessage.ExtendableMessageOrBuilder<FileDescriptorSet>
    {
        List<FileDescriptorProto> getFileList();
        
        FileDescriptorProto getFile(final int index);
        
        int getFileCount();
        
        List<? extends FileDescriptorProtoOrBuilder> getFileOrBuilderList();
        
        FileDescriptorProtoOrBuilder getFileOrBuilder(final int index);
    }
}
