aboutsummaryrefslogblamecommitdiff
path: root/csharp/src/ProtocolBuffers.Test/TestProtos/UnittestProto3.cs
blob: 4c4dabab96dbdc6aa360775fa0717ef5c14fcecb (plain) (tree)
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890





















































































































































































































































































































































































                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              
                           





                            
                                    







                                             
                              


















































































































































































































































































































































































































































































































                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  
                                                       
                             
                                          

                              
                                          

                              
                                            

                                
                                            

                              
                                            

                               
                                            

                               
                                              

                                 
                                              

                                
                                                

                                 
                                                 

                              
                                           

                               
                                             

                                
                                         

                               
                                             

                                                
                                           

                                         
                                                     

                                          
                                                      

                                         
                                                     

                                                                                                                         
                                                     

                                                                                                    
                                                      

                                                                                                      
                                                     

                                               























                                                                 
                                                               
                                             

                                                                      
                                                     

                                                               
                                             

                                                              
                                           



























































                                                                                                                         
                                                                                  

                                                                                                    
                                                                                   

                                                                                                      
                                                                                  




















































































































































                                                                                                                       
                                                                                  









                                                                                                    
                                                                                  









                                                                                                  
                                                                                  















































































































































                                                                                                                               
                                                       
               
                                      








                                                                  
                                             


                    
                                             


                    
                                               


                    
                                               


                    
                                               


                    
                                               


                    
                                                 


                    
                                                 


                    
                                                   


                    
                                                   


                    
                                             


                    
                                               


                     
                                           


                     
                                               


                     
                                             























                                                                                                               

                                                                                                                    

                     

                                                                                                   

                     

                                                                                                 









                                                                                                        
                                                      



                     
                                                      



                     
                                                        



                     
                                                        



                     
                                                        



                     
                                                        



                     
                                                          



                     
                                                          



                     
                                                            



                     
                                                            



                     
                                                      



                     
                                                        



                     
                                                    


                     
                                                        


                     
                                                      


                     
                                                                                                                                            


                     
                                                                                                                           


                     
                                                                                                                         



                     
                                                                                                                            



                     
                                                                                                           



                     
                                                                                                         


                     
                                                                                                                                     


                     

                                                               











                                                                                                                                                                       

                                                               


                     

                                                              








                                                               
                              






















































                                                                                                                                                             
                                                           
                        
                                     


















                                                                  
                                                           
                   
                                          








                                                                      
                                        










































































                                                                                                                                                                                                
                                                       
                           
                                      

                             
                                        
       
                                                  

































                                                                                                 
                                                       
               
                                      






















                                                                                   
                                                                                                                      
























































                                                                                                                                                            
                                                       
                                 
                                              


















                                                                           
                                                       
               
                                      








                                                                  
                                                 























































                                                                                                                                             
                                                       
                   
                                


















                                                             
                                                       
               
                                      








                                                                  
                                   













































                                                                                                                                                      
                                                       











                                                     
                                                       
               
                                      



























































                                                                                                                                                   
                                                       
                                   
                                              





















                                                                                                     
                                                       
               
                                      














































































                                                                                                                                                                        
                                                       
                   
                                

                    
                                         
























                                                                      
                                                       
               
                                      








                                                                  
                                   


                            
                                    































































                                                                                                                                                            
                                                       
                       
                                  

                   
                                



























                                                                             
                                                       
               
                                      















                                                                                 
                                   





















































                                                                                                                                                            
                                                       
                        
                                   





















                                                                              
                                                       
               
                                      












































































                                                                                                                                                            
                                                       
                       
                                  

                               
                                            



























                                                                             
                                                       
               
                                      















                                                                                 
                                               



















































































































                                                                                                                                                                                                                               
                                                       
                                
                                             

                              
                                           

                                                                                            
                                             

                                  
                                             
       



                                                               










                                                                                            
                                                                          

























                                                                                                  
                                                                                  



































                                                                                                    
                                                       
               
                                      








                                                                  
                                                


                    
                                              


                    

                                                                                           









                                                                                      
                                                               


                    
                                                             



                    
                                                                                                         


                    
                                                                                                                         



















































































                                                                                                                                                      
                                                       
                        
                                    

                           
                                         

                          
                                        

                                         
                                                      







































                                                                                                                 
                                                       
               
                                      








                                                                  
                                       


                    
                                           


                     
                                         









































































                                                                                                                                                                   
                                                           
                        
                                     

                         
                                     
























                                                                  
                                                           
                   
                                          








                                                                      
                                        


                        
                                        




























































                                                                                                                                                           
                                                       
                                                                                                         
                                              





                                                                                                         
                                                                           











                                                                                                               
                                                       
               
                                      








                                                                  

                                                                                               






















































                                                                                                                                        
                                                       
                       
                                    


















                                                                 
                                                       
               
                                      








                                                                  
                                       





















































                                                                                                                                         

                                                       




















                                                                            
                                                       
               
                                      








                                                                  
                                              























































                                                                                                                                       
                                                       
                                         
                                   


















                                                                
                                                       
               
                                      








                                                                  
                                      























































                                                                                                                                        
                                                       
                                         
                                   


















                                                                
                                                       
               
                                      








                                                                  
                                      























































                                                                                                                                           
                                                       
                      
                                   


















                                                                
                                                       
               
                                      








                                                                  
                                      























































                                                                                                                                            
                                                       
                      
                                    


















                                                                 
                                                       
               
                                      








                                                                  
                                       























































                                                                                                                                           
                                                       
                       
                                   


















                                                                
                                                       
               
                                      








                                                                  
                                      























































                                                                                                                                            
                                                       
                        
                                    


















                                                                 
                                                       
               
                                      








                                                                  
                                       























































                                                                                                                                          
                                                       
                          
                                  


















                                                               
                                                       
               
                                      








                                                                  
                                     






























































































                                                                                                                                        
                                                       
                                            
                                     

                                               
                                         

                                                
                                           

































                                                                        
                                                       
               
                                      








                                                                  

                                            


                    

                                               






































































































































































                                                                                                                                                                                                                                                                                                                














                                                           



























































































































                                                                                           
                                                                                  



























                                                                                
                                                       
               
                                      









                                                                  
                                                    



                     
                                                    



                     
                                                      



                     
                                                      



                     
                                                      



                     
                                                      



                     
                                                        



                     
                                                        



                     
                                                          



                     
                                                          



                     
                                                    



                     
                                                      



                     
                                                  



                     
                                                                                                  





























































































































































                                                                                                                                                                                                                                                                                                                                            














                                                       

































































































                                                                                             
                                                                                  


























                                                     
                                                       
               
                                      









                                                                  
                                                      



                     
                                                      



                     
                                                        



                     
                                                        



                     
                                                        



                     
                                                        



                     
                                                          



                     
                                                          



                     
                                                            



                     
                                                            



                     
                                                      



                     
                                                        



                     
                                                    



                     
                                                                                                    





























































































                                                                                                                                                                                                         






                                                             







































































                                                                            
                                                       
               
                                      









                                                                  
                                                          



                     
                                                      



                       
                                                          



                       
                                                      



                         
                                                      



                         
                                                        























































                                                                                                                                                                                 
                                                       
                    
                                 


















                                                              
                                                       
               
                                      








                                                                  
                                    













































                                                                                                                                         
                                                       











                                             
                                                       
               
                                      



















































                                                                                                                                          
                                                       











                                              
                                                       
               
                                      



















































                                                                                                                                                
                                                       











                                                   
                                                       
               
                                      



















































                                                                                                                                                
                                                       











                                                   
                                                       
               
                                      



















































                                                                                                                                         
                                                       











                                             
                                                       
               
                                      



















































                                                                                                                                          
                                                       











                                              
                                                       
               
                                      


















                                                                  
// Generated by the protocol buffer compiler.  DO NOT EDIT!
// source: google/protobuf/unittest_proto3.proto
#pragma warning disable 1591, 0612, 3021
#region Designer generated code

using pb = global::Google.Protobuf;
using pbc = global::Google.Protobuf.Collections;
using pbd = global::Google.Protobuf.Descriptors;
using scg = global::System.Collections.Generic;
namespace Google.Protobuf.TestProtos {

  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
  public static partial class UnittestProto3 {

    #region Static variables
    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestAllTypes__Descriptor;
    internal static pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.TestAllTypes> internal__static_protobuf_unittest_TestAllTypes__FieldAccessorTable;
    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestAllTypes_NestedMessage__Descriptor;
    internal static pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.TestAllTypes.Types.NestedMessage> internal__static_protobuf_unittest_TestAllTypes_NestedMessage__FieldAccessorTable;
    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_NestedTestAllTypes__Descriptor;
    internal static pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.NestedTestAllTypes> internal__static_protobuf_unittest_NestedTestAllTypes__FieldAccessorTable;
    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestDeprecatedFields__Descriptor;
    internal static pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.TestDeprecatedFields> internal__static_protobuf_unittest_TestDeprecatedFields__FieldAccessorTable;
    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_ForeignMessage__Descriptor;
    internal static pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.ForeignMessage> internal__static_protobuf_unittest_ForeignMessage__FieldAccessorTable;
    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestReservedFields__Descriptor;
    internal static pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.TestReservedFields> internal__static_protobuf_unittest_TestReservedFields__FieldAccessorTable;
    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestForeignNested__Descriptor;
    internal static pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.TestForeignNested> internal__static_protobuf_unittest_TestForeignNested__FieldAccessorTable;
    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestReallyLargeTagNumber__Descriptor;
    internal static pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.TestReallyLargeTagNumber> internal__static_protobuf_unittest_TestReallyLargeTagNumber__FieldAccessorTable;
    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestRecursiveMessage__Descriptor;
    internal static pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.TestRecursiveMessage> internal__static_protobuf_unittest_TestRecursiveMessage__FieldAccessorTable;
    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestMutualRecursionA__Descriptor;
    internal static pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.TestMutualRecursionA> internal__static_protobuf_unittest_TestMutualRecursionA__FieldAccessorTable;
    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestMutualRecursionB__Descriptor;
    internal static pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.TestMutualRecursionB> internal__static_protobuf_unittest_TestMutualRecursionB__FieldAccessorTable;
    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestCamelCaseFieldNames__Descriptor;
    internal static pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.TestCamelCaseFieldNames> internal__static_protobuf_unittest_TestCamelCaseFieldNames__FieldAccessorTable;
    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestFieldOrderings__Descriptor;
    internal static pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.TestFieldOrderings> internal__static_protobuf_unittest_TestFieldOrderings__FieldAccessorTable;
    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestFieldOrderings_NestedMessage__Descriptor;
    internal static pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.TestFieldOrderings.Types.NestedMessage> internal__static_protobuf_unittest_TestFieldOrderings_NestedMessage__FieldAccessorTable;
    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_SparseEnumMessage__Descriptor;
    internal static pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.SparseEnumMessage> internal__static_protobuf_unittest_SparseEnumMessage__FieldAccessorTable;
    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_OneString__Descriptor;
    internal static pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.OneString> internal__static_protobuf_unittest_OneString__FieldAccessorTable;
    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_MoreString__Descriptor;
    internal static pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.MoreString> internal__static_protobuf_unittest_MoreString__FieldAccessorTable;
    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_OneBytes__Descriptor;
    internal static pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.OneBytes> internal__static_protobuf_unittest_OneBytes__FieldAccessorTable;
    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_MoreBytes__Descriptor;
    internal static pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.MoreBytes> internal__static_protobuf_unittest_MoreBytes__FieldAccessorTable;
    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_Int32Message__Descriptor;
    internal static pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.Int32Message> internal__static_protobuf_unittest_Int32Message__FieldAccessorTable;
    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_Uint32Message__Descriptor;
    internal static pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.Uint32Message> internal__static_protobuf_unittest_Uint32Message__FieldAccessorTable;
    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_Int64Message__Descriptor;
    internal static pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.Int64Message> internal__static_protobuf_unittest_Int64Message__FieldAccessorTable;
    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_Uint64Message__Descriptor;
    internal static pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.Uint64Message> internal__static_protobuf_unittest_Uint64Message__FieldAccessorTable;
    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_BoolMessage__Descriptor;
    internal static pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.BoolMessage> internal__static_protobuf_unittest_BoolMessage__FieldAccessorTable;
    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestOneof__Descriptor;
    internal static pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.TestOneof> internal__static_protobuf_unittest_TestOneof__FieldAccessorTable;
    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestPackedTypes__Descriptor;
    internal static pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.TestPackedTypes> internal__static_protobuf_unittest_TestPackedTypes__FieldAccessorTable;
    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestUnpackedTypes__Descriptor;
    internal static pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.TestUnpackedTypes> internal__static_protobuf_unittest_TestUnpackedTypes__FieldAccessorTable;
    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestRepeatedScalarDifferentTagSizes__Descriptor;
    internal static pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.TestRepeatedScalarDifferentTagSizes> internal__static_protobuf_unittest_TestRepeatedScalarDifferentTagSizes__FieldAccessorTable;
    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestCommentInjectionMessage__Descriptor;
    internal static pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.TestCommentInjectionMessage> internal__static_protobuf_unittest_TestCommentInjectionMessage__FieldAccessorTable;
    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_FooRequest__Descriptor;
    internal static pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.FooRequest> internal__static_protobuf_unittest_FooRequest__FieldAccessorTable;
    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_FooResponse__Descriptor;
    internal static pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.FooResponse> internal__static_protobuf_unittest_FooResponse__FieldAccessorTable;
    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_FooClientMessage__Descriptor;
    internal static pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.FooClientMessage> internal__static_protobuf_unittest_FooClientMessage__FieldAccessorTable;
    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_FooServerMessage__Descriptor;
    internal static pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.FooServerMessage> internal__static_protobuf_unittest_FooServerMessage__FieldAccessorTable;
    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_BarRequest__Descriptor;
    internal static pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.BarRequest> internal__static_protobuf_unittest_BarRequest__FieldAccessorTable;
    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_BarResponse__Descriptor;
    internal static pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.BarResponse> internal__static_protobuf_unittest_BarResponse__FieldAccessorTable;
    #endregion
    #region Descriptor
    public static pbd::FileDescriptor Descriptor {
      get { return descriptor; }
    }
    private static pbd::FileDescriptor descriptor;

    static UnittestProto3() {
      byte[] descriptorData = global::System.Convert.FromBase64String(
          string.Concat(
            "CiVnb29nbGUvcHJvdG9idWYvdW5pdHRlc3RfcHJvdG8zLnByb3RvEhFwcm90", 
            "b2J1Zl91bml0dGVzdBosZ29vZ2xlL3Byb3RvYnVmL3VuaXR0ZXN0X2ltcG9y", 
            "dF9wcm90bzMucHJvdG8i8A8KDFRlc3RBbGxUeXBlcxIUCgxzaW5nbGVfaW50", 
            "MzIYASABKAUSFAoMc2luZ2xlX2ludDY0GAIgASgDEhUKDXNpbmdsZV91aW50", 
            "MzIYAyABKA0SFQoNc2luZ2xlX3VpbnQ2NBgEIAEoBBIVCg1zaW5nbGVfc2lu", 
            "dDMyGAUgASgREhUKDXNpbmdsZV9zaW50NjQYBiABKBISFgoOc2luZ2xlX2Zp", 
            "eGVkMzIYByABKAcSFgoOc2luZ2xlX2ZpeGVkNjQYCCABKAYSFwoPc2luZ2xl", 
            "X3NmaXhlZDMyGAkgASgPEhcKD3NpbmdsZV9zZml4ZWQ2NBgKIAEoEBIUCgxz", 
            "aW5nbGVfZmxvYXQYCyABKAISFQoNc2luZ2xlX2RvdWJsZRgMIAEoARITCgtz", 
            "aW5nbGVfYm9vbBgNIAEoCBIVCg1zaW5nbGVfc3RyaW5nGA4gASgJEhQKDHNp", 
            "bmdsZV9ieXRlcxgPIAEoDBJMChVzaW5nbGVfbmVzdGVkX21lc3NhZ2UYEiAB", 
            "KAsyLS5wcm90b2J1Zl91bml0dGVzdC5UZXN0QWxsVHlwZXMuTmVzdGVkTWVz", 
            "c2FnZRJBChZzaW5nbGVfZm9yZWlnbl9tZXNzYWdlGBMgASgLMiEucHJvdG9i", 
            "dWZfdW5pdHRlc3QuRm9yZWlnbk1lc3NhZ2USRgoVc2luZ2xlX2ltcG9ydF9t", 
            "ZXNzYWdlGBQgASgLMicucHJvdG9idWZfdW5pdHRlc3RfaW1wb3J0LkltcG9y", 
            "dE1lc3NhZ2USRgoSc2luZ2xlX25lc3RlZF9lbnVtGBUgASgOMioucHJvdG9i", 
            "dWZfdW5pdHRlc3QuVGVzdEFsbFR5cGVzLk5lc3RlZEVudW0SOwoTc2luZ2xl", 
            "X2ZvcmVpZ25fZW51bRgWIAEoDjIeLnByb3RvYnVmX3VuaXR0ZXN0LkZvcmVp", 
            "Z25FbnVtEkAKEnNpbmdsZV9pbXBvcnRfZW51bRgXIAEoDjIkLnByb3RvYnVm", 
            "X3VuaXR0ZXN0X2ltcG9ydC5JbXBvcnRFbnVtElMKHHNpbmdsZV9wdWJsaWNf", 
            "aW1wb3J0X21lc3NhZ2UYGiABKAsyLS5wcm90b2J1Zl91bml0dGVzdF9pbXBv", 
            "cnQuUHVibGljSW1wb3J0TWVzc2FnZRIWCg5yZXBlYXRlZF9pbnQzMhgfIAMo", 
            "BRIWCg5yZXBlYXRlZF9pbnQ2NBggIAMoAxIXCg9yZXBlYXRlZF91aW50MzIY", 
            "ISADKA0SFwoPcmVwZWF0ZWRfdWludDY0GCIgAygEEhcKD3JlcGVhdGVkX3Np", 
            "bnQzMhgjIAMoERIXCg9yZXBlYXRlZF9zaW50NjQYJCADKBISGAoQcmVwZWF0", 
            "ZWRfZml4ZWQzMhglIAMoBxIYChByZXBlYXRlZF9maXhlZDY0GCYgAygGEhkK", 
            "EXJlcGVhdGVkX3NmaXhlZDMyGCcgAygPEhkKEXJlcGVhdGVkX3NmaXhlZDY0", 
            "GCggAygQEhYKDnJlcGVhdGVkX2Zsb2F0GCkgAygCEhcKD3JlcGVhdGVkX2Rv", 
            "dWJsZRgqIAMoARIVCg1yZXBlYXRlZF9ib29sGCsgAygIEhcKD3JlcGVhdGVk", 
            "X3N0cmluZxgsIAMoCRIWCg5yZXBlYXRlZF9ieXRlcxgtIAMoDBJOChdyZXBl", 
            "YXRlZF9uZXN0ZWRfbWVzc2FnZRgwIAMoCzItLnByb3RvYnVmX3VuaXR0ZXN0", 
            "LlRlc3RBbGxUeXBlcy5OZXN0ZWRNZXNzYWdlEkMKGHJlcGVhdGVkX2ZvcmVp", 
            "Z25fbWVzc2FnZRgxIAMoCzIhLnByb3RvYnVmX3VuaXR0ZXN0LkZvcmVpZ25N", 
            "ZXNzYWdlEkgKF3JlcGVhdGVkX2ltcG9ydF9tZXNzYWdlGDIgAygLMicucHJv", 
            "dG9idWZfdW5pdHRlc3RfaW1wb3J0LkltcG9ydE1lc3NhZ2USSAoUcmVwZWF0", 
            "ZWRfbmVzdGVkX2VudW0YMyADKA4yKi5wcm90b2J1Zl91bml0dGVzdC5UZXN0", 
            "QWxsVHlwZXMuTmVzdGVkRW51bRI9ChVyZXBlYXRlZF9mb3JlaWduX2VudW0Y", 
            "NCADKA4yHi5wcm90b2J1Zl91bml0dGVzdC5Gb3JlaWduRW51bRJCChRyZXBl", 
            "YXRlZF9pbXBvcnRfZW51bRg1IAMoDjIkLnByb3RvYnVmX3VuaXR0ZXN0X2lt", 
            "cG9ydC5JbXBvcnRFbnVtElUKHnJlcGVhdGVkX3B1YmxpY19pbXBvcnRfbWVz", 
            "c2FnZRg2IAMoCzItLnByb3RvYnVmX3VuaXR0ZXN0X2ltcG9ydC5QdWJsaWNJ", 
            "bXBvcnRNZXNzYWdlEhYKDG9uZW9mX3VpbnQzMhhvIAEoDUgAEk0KFG9uZW9m", 
            "X25lc3RlZF9tZXNzYWdlGHAgASgLMi0ucHJvdG9idWZfdW5pdHRlc3QuVGVz", 
            "dEFsbFR5cGVzLk5lc3RlZE1lc3NhZ2VIABIWCgxvbmVvZl9zdHJpbmcYcSAB", 
            "KAlIABIVCgtvbmVvZl9ieXRlcxhyIAEoDEgAGhsKDU5lc3RlZE1lc3NhZ2US", 
            "CgoCYmIYASABKAUiVgoKTmVzdGVkRW51bRIbChdORVNURURfRU5VTV9VTlNQ", 
            "RUNJRklFRBAAEgcKA0ZPTxABEgcKA0JBUhACEgcKA0JBWhADEhAKA05FRxD/", 
            "//////////8BQg0KC29uZW9mX2ZpZWxkIrsBChJOZXN0ZWRUZXN0QWxsVHlw", 
            "ZXMSNAoFY2hpbGQYASABKAsyJS5wcm90b2J1Zl91bml0dGVzdC5OZXN0ZWRU", 
            "ZXN0QWxsVHlwZXMSMAoHcGF5bG9hZBgCIAEoCzIfLnByb3RvYnVmX3VuaXR0", 
            "ZXN0LlRlc3RBbGxUeXBlcxI9Cg5yZXBlYXRlZF9jaGlsZBgDIAMoCzIlLnBy", 
            "b3RvYnVmX3VuaXR0ZXN0Lk5lc3RlZFRlc3RBbGxUeXBlcyI0ChRUZXN0RGVw", 
            "cmVjYXRlZEZpZWxkcxIcChBkZXByZWNhdGVkX2ludDMyGAEgASgFQgIYASIb", 
            "Cg5Gb3JlaWduTWVzc2FnZRIJCgFjGAEgASgFIjAKElRlc3RSZXNlcnZlZEZp", 
            "ZWxkc0oECAIQA0oECA8QEEoECAkQDFIDYmFyUgNiYXoiWgoRVGVzdEZvcmVp", 
            "Z25OZXN0ZWQSRQoOZm9yZWlnbl9uZXN0ZWQYASABKAsyLS5wcm90b2J1Zl91", 
            "bml0dGVzdC5UZXN0QWxsVHlwZXMuTmVzdGVkTWVzc2FnZSI0ChhUZXN0UmVh", 
            "bGx5TGFyZ2VUYWdOdW1iZXISCQoBYRgBIAEoBRINCgJiYhj///9/IAEoBSJV", 
            "ChRUZXN0UmVjdXJzaXZlTWVzc2FnZRIyCgFhGAEgASgLMicucHJvdG9idWZf", 
            "dW5pdHRlc3QuVGVzdFJlY3Vyc2l2ZU1lc3NhZ2USCQoBaRgCIAEoBSJLChRU", 
            "ZXN0TXV0dWFsUmVjdXJzaW9uQRIzCgJiYhgBIAEoCzInLnByb3RvYnVmX3Vu", 
            "aXR0ZXN0LlRlc3RNdXR1YWxSZWN1cnNpb25CImIKFFRlc3RNdXR1YWxSZWN1", 
            "cnNpb25CEjIKAWEYASABKAsyJy5wcm90b2J1Zl91bml0dGVzdC5UZXN0TXV0", 
            "dWFsUmVjdXJzaW9uQRIWCg5vcHRpb25hbF9pbnQzMhgCIAEoBSLrAgoXVGVz", 
            "dENhbWVsQ2FzZUZpZWxkTmFtZXMSFgoOUHJpbWl0aXZlRmllbGQYASABKAUS", 
            "EwoLU3RyaW5nRmllbGQYAiABKAkSMQoJRW51bUZpZWxkGAMgASgOMh4ucHJv", 
            "dG9idWZfdW5pdHRlc3QuRm9yZWlnbkVudW0SNwoMTWVzc2FnZUZpZWxkGAQg", 
            "ASgLMiEucHJvdG9idWZfdW5pdHRlc3QuRm9yZWlnbk1lc3NhZ2USHgoWUmVw", 
            "ZWF0ZWRQcmltaXRpdmVGaWVsZBgHIAMoBRIbChNSZXBlYXRlZFN0cmluZ0Zp", 
            "ZWxkGAggAygJEjkKEVJlcGVhdGVkRW51bUZpZWxkGAkgAygOMh4ucHJvdG9i", 
            "dWZfdW5pdHRlc3QuRm9yZWlnbkVudW0SPwoUUmVwZWF0ZWRNZXNzYWdlRmll", 
            "bGQYCiADKAsyIS5wcm90b2J1Zl91bml0dGVzdC5Gb3JlaWduTWVzc2FnZSLH", 
            "AQoSVGVzdEZpZWxkT3JkZXJpbmdzEhEKCW15X3N0cmluZxgLIAEoCRIOCgZt", 
            "eV9pbnQYASABKAMSEAoIbXlfZmxvYXQYZSABKAISUwoVc2luZ2xlX25lc3Rl", 
            "ZF9tZXNzYWdlGMgBIAEoCzIzLnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RGaWVs", 
            "ZE9yZGVyaW5ncy5OZXN0ZWRNZXNzYWdlGicKDU5lc3RlZE1lc3NhZ2USCgoC", 
            "b28YAiABKAMSCgoCYmIYASABKAUiSwoRU3BhcnNlRW51bU1lc3NhZ2USNgoL", 
            "c3BhcnNlX2VudW0YASABKA4yIS5wcm90b2J1Zl91bml0dGVzdC5UZXN0U3Bh", 
            "cnNlRW51bSIZCglPbmVTdHJpbmcSDAoEZGF0YRgBIAEoCSIaCgpNb3JlU3Ry", 
            "aW5nEgwKBGRhdGEYASADKAkiGAoIT25lQnl0ZXMSDAoEZGF0YRgBIAEoDCIZ", 
            "CglNb3JlQnl0ZXMSDAoEZGF0YRgBIAEoDCIcCgxJbnQzMk1lc3NhZ2USDAoE", 
            "ZGF0YRgBIAEoBSIdCg1VaW50MzJNZXNzYWdlEgwKBGRhdGEYASABKA0iHAoM", 
            "SW50NjRNZXNzYWdlEgwKBGRhdGEYASABKAMiHQoNVWludDY0TWVzc2FnZRIM", 
            "CgRkYXRhGAEgASgEIhsKC0Jvb2xNZXNzYWdlEgwKBGRhdGEYASABKAgicwoJ", 
            "VGVzdE9uZW9mEhEKB2Zvb19pbnQYASABKAVIABIUCgpmb29fc3RyaW5nGAIg", 
            "ASgJSAASNgoLZm9vX21lc3NhZ2UYAyABKAsyHy5wcm90b2J1Zl91bml0dGVz", 
            "dC5UZXN0QWxsVHlwZXNIAEIFCgNmb28iqgMKD1Rlc3RQYWNrZWRUeXBlcxIY", 
            "CgxwYWNrZWRfaW50MzIYWiADKAVCAhABEhgKDHBhY2tlZF9pbnQ2NBhbIAMo", 
            "A0ICEAESGQoNcGFja2VkX3VpbnQzMhhcIAMoDUICEAESGQoNcGFja2VkX3Vp", 
            "bnQ2NBhdIAMoBEICEAESGQoNcGFja2VkX3NpbnQzMhheIAMoEUICEAESGQoN", 
            "cGFja2VkX3NpbnQ2NBhfIAMoEkICEAESGgoOcGFja2VkX2ZpeGVkMzIYYCAD", 
            "KAdCAhABEhoKDnBhY2tlZF9maXhlZDY0GGEgAygGQgIQARIbCg9wYWNrZWRf", 
            "c2ZpeGVkMzIYYiADKA9CAhABEhsKD3BhY2tlZF9zZml4ZWQ2NBhjIAMoEEIC", 
            "EAESGAoMcGFja2VkX2Zsb2F0GGQgAygCQgIQARIZCg1wYWNrZWRfZG91Ymxl", 
            "GGUgAygBQgIQARIXCgtwYWNrZWRfYm9vbBhmIAMoCEICEAESNwoLcGFja2Vk", 
            "X2VudW0YZyADKA4yHi5wcm90b2J1Zl91bml0dGVzdC5Gb3JlaWduRW51bUIC", 
            "EAEiyAMKEVRlc3RVbnBhY2tlZFR5cGVzEhoKDnVucGFja2VkX2ludDMyGFog", 
            "AygFQgIQABIaCg51bnBhY2tlZF9pbnQ2NBhbIAMoA0ICEAASGwoPdW5wYWNr", 
            "ZWRfdWludDMyGFwgAygNQgIQABIbCg91bnBhY2tlZF91aW50NjQYXSADKARC", 
            "AhAAEhsKD3VucGFja2VkX3NpbnQzMhheIAMoEUICEAASGwoPdW5wYWNrZWRf", 
            "c2ludDY0GF8gAygSQgIQABIcChB1bnBhY2tlZF9maXhlZDMyGGAgAygHQgIQ", 
            "ABIcChB1bnBhY2tlZF9maXhlZDY0GGEgAygGQgIQABIdChF1bnBhY2tlZF9z", 
            "Zml4ZWQzMhhiIAMoD0ICEAASHQoRdW5wYWNrZWRfc2ZpeGVkNjQYYyADKBBC", 
            "AhAAEhoKDnVucGFja2VkX2Zsb2F0GGQgAygCQgIQABIbCg91bnBhY2tlZF9k", 
            "b3VibGUYZSADKAFCAhAAEhkKDXVucGFja2VkX2Jvb2wYZiADKAhCAhAAEjkK", 
            "DXVucGFja2VkX2VudW0YZyADKA4yHi5wcm90b2J1Zl91bml0dGVzdC5Gb3Jl", 
            "aWduRW51bUICEAAiwAEKI1Rlc3RSZXBlYXRlZFNjYWxhckRpZmZlcmVudFRh", 
            "Z1NpemVzEhgKEHJlcGVhdGVkX2ZpeGVkMzIYDCADKAcSFgoOcmVwZWF0ZWRf", 
            "aW50MzIYDSADKAUSGQoQcmVwZWF0ZWRfZml4ZWQ2NBj+DyADKAYSFwoOcmVw", 
            "ZWF0ZWRfaW50NjQY/w8gAygDEhgKDnJlcGVhdGVkX2Zsb2F0GP7/DyADKAIS", 
            "GQoPcmVwZWF0ZWRfdWludDY0GP//DyADKAQiKAobVGVzdENvbW1lbnRJbmpl", 
            "Y3Rpb25NZXNzYWdlEgkKAWEYASABKAkiDAoKRm9vUmVxdWVzdCINCgtGb29S", 
            "ZXNwb25zZSISChBGb29DbGllbnRNZXNzYWdlIhIKEEZvb1NlcnZlck1lc3Nh", 
            "Z2UiDAoKQmFyUmVxdWVzdCINCgtCYXJSZXNwb25zZSpZCgtGb3JlaWduRW51", 
            "bRIXChNGT1JFSUdOX1VOU1BFQ0lGSUVEEAASDwoLRk9SRUlHTl9GT08QBBIP", 
            "CgtGT1JFSUdOX0JBUhAFEg8KC0ZPUkVJR05fQkFaEAYqdQoUVGVzdEVudW1X", 
            "aXRoRHVwVmFsdWUSKAokVEVTVF9FTlVNX1dJVEhfRFVQX1ZBTFVFX1VOU1BF", 
            "Q0lGSUVEEAASCAoERk9PMRABEggKBEJBUjEQAhIHCgNCQVoQAxIICgRGT08y", 
            "EAESCAoEQkFSMhACGgIQASqdAQoOVGVzdFNwYXJzZUVudW0SIAocVEVTVF9T", 
            "UEFSU0VfRU5VTV9VTlNQRUNJRklFRBAAEgwKCFNQQVJTRV9BEHsSDgoIU1BB", 
            "UlNFX0IQpucDEg8KCFNQQVJTRV9DELKxgAYSFQoIU1BBUlNFX0QQ8f//////", 
            "////ARIVCghTUEFSU0VfRRC03vz///////8BEgwKCFNQQVJTRV9HEAIymQEK", 
            "C1Rlc3RTZXJ2aWNlEkQKA0ZvbxIdLnByb3RvYnVmX3VuaXR0ZXN0LkZvb1Jl", 
            "cXVlc3QaHi5wcm90b2J1Zl91bml0dGVzdC5Gb29SZXNwb25zZRJECgNCYXIS", 
            "HS5wcm90b2J1Zl91bml0dGVzdC5CYXJSZXF1ZXN0Gh4ucHJvdG9idWZfdW5p", 
            "dHRlc3QuQmFyUmVzcG9uc2VCOkINVW5pdHRlc3RQcm90b0gBgAEBiAEBkAEB", 
          "+AEBqgIaR29vZ2xlLlByb3RvYnVmLlRlc3RQcm90b3NiBnByb3RvMw=="));
      pbd::FileDescriptor.InternalDescriptorAssigner assigner = delegate(pbd::FileDescriptor root) {
        descriptor = root;
        internal__static_protobuf_unittest_TestAllTypes__Descriptor = Descriptor.MessageTypes[0];
        internal__static_protobuf_unittest_TestAllTypes__FieldAccessorTable = 
            new pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.TestAllTypes>(internal__static_protobuf_unittest_TestAllTypes__Descriptor,
                new string[] { "SingleInt32", "SingleInt64", "SingleUint32", "SingleUint64", "SingleSint32", "SingleSint64", "SingleFixed32", "SingleFixed64", "SingleSfixed32", "SingleSfixed64", "SingleFloat", "SingleDouble", "SingleBool", "SingleString", "SingleBytes", "SingleNestedMessage", "SingleForeignMessage", "SingleImportMessage", "SingleNestedEnum", "SingleForeignEnum", "SingleImportEnum", "SinglePublicImportMessage", "RepeatedInt32", "RepeatedInt64", "RepeatedUint32", "RepeatedUint64", "RepeatedSint32", "RepeatedSint64", "RepeatedFixed32", "RepeatedFixed64", "RepeatedSfixed32", "RepeatedSfixed64", "RepeatedFloat", "RepeatedDouble", "RepeatedBool", "RepeatedString", "RepeatedBytes", "RepeatedNestedMessage", "RepeatedForeignMessage", "RepeatedImportMessage", "RepeatedNestedEnum", "RepeatedForeignEnum", "RepeatedImportEnum", "RepeatedPublicImportMessage", "OneofUint32", "OneofNestedMessage", "OneofString", "OneofBytes", "OneofField", });
        internal__static_protobuf_unittest_TestAllTypes_NestedMessage__Descriptor = internal__static_protobuf_unittest_TestAllTypes__Descriptor.NestedTypes[0];
        internal__static_protobuf_unittest_TestAllTypes_NestedMessage__FieldAccessorTable = 
            new pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.TestAllTypes.Types.NestedMessage>(internal__static_protobuf_unittest_TestAllTypes_NestedMessage__Descriptor,
                new string[] { "Bb", });
        internal__static_protobuf_unittest_NestedTestAllTypes__Descriptor = Descriptor.MessageTypes[1];
        internal__static_protobuf_unittest_NestedTestAllTypes__FieldAccessorTable = 
            new pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.NestedTestAllTypes>(internal__static_protobuf_unittest_NestedTestAllTypes__Descriptor,
                new string[] { "Child", "Payload", "RepeatedChild", });
        internal__static_protobuf_unittest_TestDeprecatedFields__Descriptor = Descriptor.MessageTypes[2];
        internal__static_protobuf_unittest_TestDeprecatedFields__FieldAccessorTable = 
            new pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.TestDeprecatedFields>(internal__static_protobuf_unittest_TestDeprecatedFields__Descriptor,
                new string[] { "DeprecatedInt32", });
        internal__static_protobuf_unittest_ForeignMessage__Descriptor = Descriptor.MessageTypes[3];
        internal__static_protobuf_unittest_ForeignMessage__FieldAccessorTable = 
            new pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.ForeignMessage>(internal__static_protobuf_unittest_ForeignMessage__Descriptor,
                new string[] { "C", });
        internal__static_protobuf_unittest_TestReservedFields__Descriptor = Descriptor.MessageTypes[4];
        internal__static_protobuf_unittest_TestReservedFields__FieldAccessorTable = 
            new pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.TestReservedFields>(internal__static_protobuf_unittest_TestReservedFields__Descriptor,
                new string[] { });
        internal__static_protobuf_unittest_TestForeignNested__Descriptor = Descriptor.MessageTypes[5];
        internal__static_protobuf_unittest_TestForeignNested__FieldAccessorTable = 
            new pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.TestForeignNested>(internal__static_protobuf_unittest_TestForeignNested__Descriptor,
                new string[] { "ForeignNested", });
        internal__static_protobuf_unittest_TestReallyLargeTagNumber__Descriptor = Descriptor.MessageTypes[6];
        internal__static_protobuf_unittest_TestReallyLargeTagNumber__FieldAccessorTable = 
            new pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.TestReallyLargeTagNumber>(internal__static_protobuf_unittest_TestReallyLargeTagNumber__Descriptor,
                new string[] { "A", "Bb", });
        internal__static_protobuf_unittest_TestRecursiveMessage__Descriptor = Descriptor.MessageTypes[7];
        internal__static_protobuf_unittest_TestRecursiveMessage__FieldAccessorTable = 
            new pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.TestRecursiveMessage>(internal__static_protobuf_unittest_TestRecursiveMessage__Descriptor,
                new string[] { "A", "I", });
        internal__static_protobuf_unittest_TestMutualRecursionA__Descriptor = Descriptor.MessageTypes[8];
        internal__static_protobuf_unittest_TestMutualRecursionA__FieldAccessorTable = 
            new pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.TestMutualRecursionA>(internal__static_protobuf_unittest_TestMutualRecursionA__Descriptor,
                new string[] { "Bb", });
        internal__static_protobuf_unittest_TestMutualRecursionB__Descriptor = Descriptor.MessageTypes[9];
        internal__static_protobuf_unittest_TestMutualRecursionB__FieldAccessorTable = 
            new pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.TestMutualRecursionB>(internal__static_protobuf_unittest_TestMutualRecursionB__Descriptor,
                new string[] { "A", "OptionalInt32", });
        internal__static_protobuf_unittest_TestCamelCaseFieldNames__Descriptor = Descriptor.MessageTypes[10];
        internal__static_protobuf_unittest_TestCamelCaseFieldNames__FieldAccessorTable = 
            new pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.TestCamelCaseFieldNames>(internal__static_protobuf_unittest_TestCamelCaseFieldNames__Descriptor,
                new string[] { "PrimitiveField", "StringField", "EnumField", "MessageField", "RepeatedPrimitiveField", "RepeatedStringField", "RepeatedEnumField", "RepeatedMessageField", });
        internal__static_protobuf_unittest_TestFieldOrderings__Descriptor = Descriptor.MessageTypes[11];
        internal__static_protobuf_unittest_TestFieldOrderings__FieldAccessorTable = 
            new pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.TestFieldOrderings>(internal__static_protobuf_unittest_TestFieldOrderings__Descriptor,
                new string[] { "MyString", "MyInt", "MyFloat", "SingleNestedMessage", });
        internal__static_protobuf_unittest_TestFieldOrderings_NestedMessage__Descriptor = internal__static_protobuf_unittest_TestFieldOrderings__Descriptor.NestedTypes[0];
        internal__static_protobuf_unittest_TestFieldOrderings_NestedMessage__FieldAccessorTable = 
            new pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.TestFieldOrderings.Types.NestedMessage>(internal__static_protobuf_unittest_TestFieldOrderings_NestedMessage__Descriptor,
                new string[] { "Oo", "Bb", });
        internal__static_protobuf_unittest_SparseEnumMessage__Descriptor = Descriptor.MessageTypes[12];
        internal__static_protobuf_unittest_SparseEnumMessage__FieldAccessorTable = 
            new pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.SparseEnumMessage>(internal__static_protobuf_unittest_SparseEnumMessage__Descriptor,
                new string[] { "SparseEnum", });
        internal__static_protobuf_unittest_OneString__Descriptor = Descriptor.MessageTypes[13];
        internal__static_protobuf_unittest_OneString__FieldAccessorTable = 
            new pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.OneString>(internal__static_protobuf_unittest_OneString__Descriptor,
                new string[] { "Data", });
        internal__static_protobuf_unittest_MoreString__Descriptor = Descriptor.MessageTypes[14];
        internal__static_protobuf_unittest_MoreString__FieldAccessorTable = 
            new pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.MoreString>(internal__static_protobuf_unittest_MoreString__Descriptor,
                new string[] { "Data", });
        internal__static_protobuf_unittest_OneBytes__Descriptor = Descriptor.MessageTypes[15];
        internal__static_protobuf_unittest_OneBytes__FieldAccessorTable = 
            new pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.OneBytes>(internal__static_protobuf_unittest_OneBytes__Descriptor,
                new string[] { "Data", });
        internal__static_protobuf_unittest_MoreBytes__Descriptor = Descriptor.MessageTypes[16];
        internal__static_protobuf_unittest_MoreBytes__FieldAccessorTable = 
            new pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.MoreBytes>(internal__static_protobuf_unittest_MoreBytes__Descriptor,
                new string[] { "Data", });
        internal__static_protobuf_unittest_Int32Message__Descriptor = Descriptor.MessageTypes[17];
        internal__static_protobuf_unittest_Int32Message__FieldAccessorTable = 
            new pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.Int32Message>(internal__static_protobuf_unittest_Int32Message__Descriptor,
                new string[] { "Data", });
        internal__static_protobuf_unittest_Uint32Message__Descriptor = Descriptor.MessageTypes[18];
        internal__static_protobuf_unittest_Uint32Message__FieldAccessorTable = 
            new pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.Uint32Message>(internal__static_protobuf_unittest_Uint32Message__Descriptor,
                new string[] { "Data", });
        internal__static_protobuf_unittest_Int64Message__Descriptor = Descriptor.MessageTypes[19];
        internal__static_protobuf_unittest_Int64Message__FieldAccessorTable = 
            new pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.Int64Message>(internal__static_protobuf_unittest_Int64Message__Descriptor,
                new string[] { "Data", });
        internal__static_protobuf_unittest_Uint64Message__Descriptor = Descriptor.MessageTypes[20];
        internal__static_protobuf_unittest_Uint64Message__FieldAccessorTable = 
            new pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.Uint64Message>(internal__static_protobuf_unittest_Uint64Message__Descriptor,
                new string[] { "Data", });
        internal__static_protobuf_unittest_BoolMessage__Descriptor = Descriptor.MessageTypes[21];
        internal__static_protobuf_unittest_BoolMessage__FieldAccessorTable = 
            new pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.BoolMessage>(internal__static_protobuf_unittest_BoolMessage__Descriptor,
                new string[] { "Data", });
        internal__static_protobuf_unittest_TestOneof__Descriptor = Descriptor.MessageTypes[22];
        internal__static_protobuf_unittest_TestOneof__FieldAccessorTable = 
            new pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.TestOneof>(internal__static_protobuf_unittest_TestOneof__Descriptor,
                new string[] { "FooInt", "FooString", "FooMessage", "Foo", });
        internal__static_protobuf_unittest_TestPackedTypes__Descriptor = Descriptor.MessageTypes[23];
        internal__static_protobuf_unittest_TestPackedTypes__FieldAccessorTable = 
            new pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.TestPackedTypes>(internal__static_protobuf_unittest_TestPackedTypes__Descriptor,
                new string[] { "PackedInt32", "PackedInt64", "PackedUint32", "PackedUint64", "PackedSint32", "PackedSint64", "PackedFixed32", "PackedFixed64", "PackedSfixed32", "PackedSfixed64", "PackedFloat", "PackedDouble", "PackedBool", "PackedEnum", });
        internal__static_protobuf_unittest_TestUnpackedTypes__Descriptor = Descriptor.MessageTypes[24];
        internal__static_protobuf_unittest_TestUnpackedTypes__FieldAccessorTable = 
            new pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.TestUnpackedTypes>(internal__static_protobuf_unittest_TestUnpackedTypes__Descriptor,
                new string[] { "UnpackedInt32", "UnpackedInt64", "UnpackedUint32", "UnpackedUint64", "UnpackedSint32", "UnpackedSint64", "UnpackedFixed32", "UnpackedFixed64", "UnpackedSfixed32", "UnpackedSfixed64", "UnpackedFloat", "UnpackedDouble", "UnpackedBool", "UnpackedEnum", });
        internal__static_protobuf_unittest_TestRepeatedScalarDifferentTagSizes__Descriptor = Descriptor.MessageTypes[25];
        internal__static_protobuf_unittest_TestRepeatedScalarDifferentTagSizes__FieldAccessorTable = 
            new pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.TestRepeatedScalarDifferentTagSizes>(internal__static_protobuf_unittest_TestRepeatedScalarDifferentTagSizes__Descriptor,
                new string[] { "RepeatedFixed32", "RepeatedInt32", "RepeatedFixed64", "RepeatedInt64", "RepeatedFloat", "RepeatedUint64", });
        internal__static_protobuf_unittest_TestCommentInjectionMessage__Descriptor = Descriptor.MessageTypes[26];
        internal__static_protobuf_unittest_TestCommentInjectionMessage__FieldAccessorTable = 
            new pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.TestCommentInjectionMessage>(internal__static_protobuf_unittest_TestCommentInjectionMessage__Descriptor,
                new string[] { "A", });
        internal__static_protobuf_unittest_FooRequest__Descriptor = Descriptor.MessageTypes[27];
        internal__static_protobuf_unittest_FooRequest__FieldAccessorTable = 
            new pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.FooRequest>(internal__static_protobuf_unittest_FooRequest__Descriptor,
                new string[] { });
        internal__static_protobuf_unittest_FooResponse__Descriptor = Descriptor.MessageTypes[28];
        internal__static_protobuf_unittest_FooResponse__FieldAccessorTable = 
            new pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.FooResponse>(internal__static_protobuf_unittest_FooResponse__Descriptor,
                new string[] { });
        internal__static_protobuf_unittest_FooClientMessage__Descriptor = Descriptor.MessageTypes[29];
        internal__static_protobuf_unittest_FooClientMessage__FieldAccessorTable = 
            new pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.FooClientMessage>(internal__static_protobuf_unittest_FooClientMessage__Descriptor,
                new string[] { });
        internal__static_protobuf_unittest_FooServerMessage__Descriptor = Descriptor.MessageTypes[30];
        internal__static_protobuf_unittest_FooServerMessage__FieldAccessorTable = 
            new pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.FooServerMessage>(internal__static_protobuf_unittest_FooServerMessage__Descriptor,
                new string[] { });
        internal__static_protobuf_unittest_BarRequest__Descriptor = Descriptor.MessageTypes[31];
        internal__static_protobuf_unittest_BarRequest__FieldAccessorTable = 
            new pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.BarRequest>(internal__static_protobuf_unittest_BarRequest__Descriptor,
                new string[] { });
        internal__static_protobuf_unittest_BarResponse__Descriptor = Descriptor.MessageTypes[32];
        internal__static_protobuf_unittest_BarResponse__FieldAccessorTable = 
            new pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.BarResponse>(internal__static_protobuf_unittest_BarResponse__Descriptor,
                new string[] { });
      };
      pbd::FileDescriptor.InternalBuildGeneratedFileFrom(descriptorData,
          new pbd::FileDescriptor[] {
          global::Google.Protobuf.TestProtos.UnittestImportProto3.Descriptor, 
          }, assigner);
    }
    #endregion

  }
  #region Enums
  public enum ForeignEnum {
    FOREIGN_UNSPECIFIED = 0,
    FOREIGN_FOO = 4,
    FOREIGN_BAR = 5,
    FOREIGN_BAZ = 6,
  }

  public enum TestEnumWithDupValue {
    TEST_ENUM_WITH_DUP_VALUE_UNSPECIFIED = 0,
    FOO1 = 1,
    BAR1 = 2,
    BAZ = 3,
    FOO2 = 1,
    BAR2 = 2,
  }

  public enum TestSparseEnum {
    TEST_SPARSE_ENUM_UNSPECIFIED = 0,
    SPARSE_A = 123,
    SPARSE_B = 62374,
    SPARSE_C = 12589234,
    SPARSE_D = -15,
    SPARSE_E = -53452,
    SPARSE_G = 2,
  }

  #endregion

  #region Messages
  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
  public sealed partial class TestAllTypes : pb::IMessage<TestAllTypes>, global::System.IEquatable<TestAllTypes> {
    private static readonly pb::MessageParser<TestAllTypes> _parser = new pb::MessageParser<TestAllTypes>(() => new TestAllTypes());
    public static pb::MessageParser<TestAllTypes> Parser { get { return _parser; } }

    private static readonly string[] _fieldNames = new string[] { "oneof_bytes", "oneof_nested_message", "oneof_string", "oneof_uint32", "repeated_bool", "repeated_bytes", "repeated_double", "repeated_fixed32", "repeated_fixed64", "repeated_float", "repeated_foreign_enum", "repeated_foreign_message", "repeated_import_enum", "repeated_import_message", "repeated_int32", "repeated_int64", "repeated_nested_enum", "repeated_nested_message", "repeated_public_import_message", "repeated_sfixed32", "repeated_sfixed64", "repeated_sint32", "repeated_sint64", "repeated_string", "repeated_uint32", "repeated_uint64", "single_bool", "single_bytes", "single_double", "single_fixed32", "single_fixed64", "single_float", "single_foreign_enum", "single_foreign_message", "single_import_enum", "single_import_message", "single_int32", "single_int64", "single_nested_enum", "single_nested_message", "single_public_import_message", "single_sfixed32", "single_sfixed64", "single_sint32", "single_sint64", "single_string", "single_uint32", "single_uint64" };
    private static readonly uint[] _fieldTags = new uint[] { 914, 898, 906, 888, 344, 362, 337, 301, 305, 333, 416, 394, 424, 402, 248, 256, 408, 386, 434, 317, 321, 280, 288, 354, 264, 272, 104, 122, 97, 61, 65, 93, 176, 154, 184, 162, 8, 16, 168, 146, 210, 77, 81, 40, 48, 114, 24, 32 };
    public static pbd::MessageDescriptor Descriptor {
      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_TestAllTypes__Descriptor; }
    }

    public pb::FieldAccess.FieldAccessorTable<TestAllTypes> Fields {
      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_TestAllTypes__FieldAccessorTable; }
    }

    public TestAllTypes() { }
    public TestAllTypes(TestAllTypes other) {
      MergeFrom(other);
    }
    public const int SingleInt32FieldNumber = 1;
    private int singleInt32_;
    public int SingleInt32 {
      get { return singleInt32_; }
      set { singleInt32_ = value; }
    }


    public const int SingleInt64FieldNumber = 2;
    private long singleInt64_;
    public long SingleInt64 {
      get { return singleInt64_; }
      set { singleInt64_ = value; }
    }


    public const int SingleUint32FieldNumber = 3;
    private uint singleUint32_;
    public uint SingleUint32 {
      get { return singleUint32_; }
      set { singleUint32_ = value; }
    }


    public const int SingleUint64FieldNumber = 4;
    private ulong singleUint64_;
    public ulong SingleUint64 {
      get { return singleUint64_; }
      set { singleUint64_ = value; }
    }


    public const int SingleSint32FieldNumber = 5;
    private int singleSint32_;
    public int SingleSint32 {
      get { return singleSint32_; }
      set { singleSint32_ = value; }
    }


    public const int SingleSint64FieldNumber = 6;
    private long singleSint64_;
    public long SingleSint64 {
      get { return singleSint64_; }
      set { singleSint64_ = value; }
    }


    public const int SingleFixed32FieldNumber = 7;
    private uint singleFixed32_;
    public uint SingleFixed32 {
      get { return singleFixed32_; }
      set { singleFixed32_ = value; }
    }


    public const int SingleFixed64FieldNumber = 8;
    private ulong singleFixed64_;
    public ulong SingleFixed64 {
      get { return singleFixed64_; }
      set { singleFixed64_ = value; }
    }


    public const int SingleSfixed32FieldNumber = 9;
    private int singleSfixed32_;
    public int SingleSfixed32 {
      get { return singleSfixed32_; }
      set { singleSfixed32_ = value; }
    }


    public const int SingleSfixed64FieldNumber = 10;
    private long singleSfixed64_;
    public long SingleSfixed64 {
      get { return singleSfixed64_; }
      set { singleSfixed64_ = value; }
    }


    public const int SingleFloatFieldNumber = 11;
    private float singleFloat_;
    public float SingleFloat {
      get { return singleFloat_; }
      set { singleFloat_ = value; }
    }


    public const int SingleDoubleFieldNumber = 12;
    private double singleDouble_;
    public double SingleDouble {
      get { return singleDouble_; }
      set { singleDouble_ = value; }
    }


    public const int SingleBoolFieldNumber = 13;
    private bool singleBool_;
    public bool SingleBool {
      get { return singleBool_; }
      set { singleBool_ = value; }
    }


    public const int SingleStringFieldNumber = 14;
    private string singleString_ = "";
    public string SingleString {
      get { return singleString_; }
      set { singleString_ = value ?? ""; }
    }


    public const int SingleBytesFieldNumber = 15;
    private pb::ByteString singleBytes_ = pb::ByteString.Empty;
    public pb::ByteString SingleBytes {
      get { return singleBytes_; }
      set { singleBytes_ = value ?? pb::ByteString.Empty; }
    }


    public const int SingleNestedMessageFieldNumber = 18;
    private global::Google.Protobuf.TestProtos.TestAllTypes.Types.NestedMessage singleNestedMessage_;
    public global::Google.Protobuf.TestProtos.TestAllTypes.Types.NestedMessage SingleNestedMessage {
      get { return singleNestedMessage_; }
      set { singleNestedMessage_ = value; }
    }

    public const int SingleForeignMessageFieldNumber = 19;
    private global::Google.Protobuf.TestProtos.ForeignMessage singleForeignMessage_;
    public global::Google.Protobuf.TestProtos.ForeignMessage SingleForeignMessage {
      get { return singleForeignMessage_; }
      set { singleForeignMessage_ = value; }
    }

    public const int SingleImportMessageFieldNumber = 20;
    private global::Google.Protobuf.TestProtos.ImportMessage singleImportMessage_;
    public global::Google.Protobuf.TestProtos.ImportMessage SingleImportMessage {
      get { return singleImportMessage_; }
      set { singleImportMessage_ = value; }
    }

    public const int SingleNestedEnumFieldNumber = 21;
    private global::Google.Protobuf.TestProtos.TestAllTypes.Types.NestedEnum singleNestedEnum_ = global::Google.Protobuf.TestProtos.TestAllTypes.Types.NestedEnum.NESTED_ENUM_UNSPECIFIED;
    public global::Google.Protobuf.TestProtos.TestAllTypes.Types.NestedEnum SingleNestedEnum {
      get { return singleNestedEnum_; }
      set { singleNestedEnum_ = value; }
    }


    public const int SingleForeignEnumFieldNumber = 22;
    private global::Google.Protobuf.TestProtos.ForeignEnum singleForeignEnum_ = global::Google.Protobuf.TestProtos.ForeignEnum.FOREIGN_UNSPECIFIED;
    public global::Google.Protobuf.TestProtos.ForeignEnum SingleForeignEnum {
      get { return singleForeignEnum_; }
      set { singleForeignEnum_ = value; }
    }


    public const int SingleImportEnumFieldNumber = 23;
    private global::Google.Protobuf.TestProtos.ImportEnum singleImportEnum_ = global::Google.Protobuf.TestProtos.ImportEnum.IMPORT_ENUM_UNSPECIFIED;
    public global::Google.Protobuf.TestProtos.ImportEnum SingleImportEnum {
      get { return singleImportEnum_; }
      set { singleImportEnum_ = value; }
    }


    public const int SinglePublicImportMessageFieldNumber = 26;
    private global::Google.Protobuf.TestProtos.PublicImportMessage singlePublicImportMessage_;
    public global::Google.Protobuf.TestProtos.PublicImportMessage SinglePublicImportMessage {
      get { return singlePublicImportMessage_; }
      set { singlePublicImportMessage_ = value; }
    }

    public const int RepeatedInt32FieldNumber = 31;
    private readonly pbc::RepeatedField<int> repeatedInt32_ = new pbc::RepeatedField<int>();
    public pbc::RepeatedField<int> RepeatedInt32 {
      get { return repeatedInt32_; }
    }

    public const int RepeatedInt64FieldNumber = 32;
    private readonly pbc::RepeatedField<long> repeatedInt64_ = new pbc::RepeatedField<long>();
    public pbc::RepeatedField<long> RepeatedInt64 {
      get { return repeatedInt64_; }
    }

    public const int RepeatedUint32FieldNumber = 33;
    private readonly pbc::RepeatedField<uint> repeatedUint32_ = new pbc::RepeatedField<uint>();
    public pbc::RepeatedField<uint> RepeatedUint32 {
      get { return repeatedUint32_; }
    }

    public const int RepeatedUint64FieldNumber = 34;
    private readonly pbc::RepeatedField<ulong> repeatedUint64_ = new pbc::RepeatedField<ulong>();
    public pbc::RepeatedField<ulong> RepeatedUint64 {
      get { return repeatedUint64_; }
    }

    public const int RepeatedSint32FieldNumber = 35;
    private readonly pbc::RepeatedField<int> repeatedSint32_ = new pbc::RepeatedField<int>();
    public pbc::RepeatedField<int> RepeatedSint32 {
      get { return repeatedSint32_; }
    }

    public const int RepeatedSint64FieldNumber = 36;
    private readonly pbc::RepeatedField<long> repeatedSint64_ = new pbc::RepeatedField<long>();
    public pbc::RepeatedField<long> RepeatedSint64 {
      get { return repeatedSint64_; }
    }

    public const int RepeatedFixed32FieldNumber = 37;
    private readonly pbc::RepeatedField<uint> repeatedFixed32_ = new pbc::RepeatedField<uint>();
    public pbc::RepeatedField<uint> RepeatedFixed32 {
      get { return repeatedFixed32_; }
    }

    public const int RepeatedFixed64FieldNumber = 38;
    private readonly pbc::RepeatedField<ulong> repeatedFixed64_ = new pbc::RepeatedField<ulong>();
    public pbc::RepeatedField<ulong> RepeatedFixed64 {
      get { return repeatedFixed64_; }
    }

    public const int RepeatedSfixed32FieldNumber = 39;
    private readonly pbc::RepeatedField<int> repeatedSfixed32_ = new pbc::RepeatedField<int>();
    public pbc::RepeatedField<int> RepeatedSfixed32 {
      get { return repeatedSfixed32_; }
    }

    public const int RepeatedSfixed64FieldNumber = 40;
    private readonly pbc::RepeatedField<long> repeatedSfixed64_ = new pbc::RepeatedField<long>();
    public pbc::RepeatedField<long> RepeatedSfixed64 {
      get { return repeatedSfixed64_; }
    }

    public const int RepeatedFloatFieldNumber = 41;
    private readonly pbc::RepeatedField<float> repeatedFloat_ = new pbc::RepeatedField<float>();
    public pbc::RepeatedField<float> RepeatedFloat {
      get { return repeatedFloat_; }
    }

    public const int RepeatedDoubleFieldNumber = 42;
    private readonly pbc::RepeatedField<double> repeatedDouble_ = new pbc::RepeatedField<double>();
    public pbc::RepeatedField<double> RepeatedDouble {
      get { return repeatedDouble_; }
    }

    public const int RepeatedBoolFieldNumber = 43;
    private readonly pbc::RepeatedField<bool> repeatedBool_ = new pbc::RepeatedField<bool>();
    public pbc::RepeatedField<bool> RepeatedBool {
      get { return repeatedBool_; }
    }

    public const int RepeatedStringFieldNumber = 44;
    private readonly pbc::RepeatedField<string> repeatedString_ = new pbc::RepeatedField<string>();
    public pbc::RepeatedField<string> RepeatedString {
      get { return repeatedString_; }
    }

    public const int RepeatedBytesFieldNumber = 45;
    private readonly pbc::RepeatedField<pb::ByteString> repeatedBytes_ = new pbc::RepeatedField<pb::ByteString>();
    public pbc::RepeatedField<pb::ByteString> RepeatedBytes {
      get { return repeatedBytes_; }
    }

    public const int RepeatedNestedMessageFieldNumber = 48;
    private readonly pbc::RepeatedField<global::Google.Protobuf.TestProtos.TestAllTypes.Types.NestedMessage> repeatedNestedMessage_ = new pbc::RepeatedField<global::Google.Protobuf.TestProtos.TestAllTypes.Types.NestedMessage>();
    public pbc::RepeatedField<global::Google.Protobuf.TestProtos.TestAllTypes.Types.NestedMessage> RepeatedNestedMessage {
      get { return repeatedNestedMessage_; }
    }

    public const int RepeatedForeignMessageFieldNumber = 49;
    private readonly pbc::RepeatedField<global::Google.Protobuf.TestProtos.ForeignMessage> repeatedForeignMessage_ = new pbc::RepeatedField<global::Google.Protobuf.TestProtos.ForeignMessage>();
    public pbc::RepeatedField<global::Google.Protobuf.TestProtos.ForeignMessage> RepeatedForeignMessage {
      get { return repeatedForeignMessage_; }
    }

    public const int RepeatedImportMessageFieldNumber = 50;
    private readonly pbc::RepeatedField<global::Google.Protobuf.TestProtos.ImportMessage> repeatedImportMessage_ = new pbc::RepeatedField<global::Google.Protobuf.TestProtos.ImportMessage>();
    public pbc::RepeatedField<global::Google.Protobuf.TestProtos.ImportMessage> RepeatedImportMessage {
      get { return repeatedImportMessage_; }
    }

    public const int RepeatedNestedEnumFieldNumber = 51;
    private readonly pbc::RepeatedField<global::Google.Protobuf.TestProtos.TestAllTypes.Types.NestedEnum> repeatedNestedEnum_ = new pbc::RepeatedField<global::Google.Protobuf.TestProtos.TestAllTypes.Types.NestedEnum>();
    public pbc::RepeatedField<global::Google.Protobuf.TestProtos.TestAllTypes.Types.NestedEnum> RepeatedNestedEnum {
      get { return repeatedNestedEnum_; }
    }

    public const int RepeatedForeignEnumFieldNumber = 52;
    private readonly pbc::RepeatedField<global::Google.Protobuf.TestProtos.ForeignEnum> repeatedForeignEnum_ = new pbc::RepeatedField<global::Google.Protobuf.TestProtos.ForeignEnum>();
    public pbc::RepeatedField<global::Google.Protobuf.TestProtos.ForeignEnum> RepeatedForeignEnum {
      get { return repeatedForeignEnum_; }
    }

    public const int RepeatedImportEnumFieldNumber = 53;
    private readonly pbc::RepeatedField<global::Google.Protobuf.TestProtos.ImportEnum> repeatedImportEnum_ = new pbc::RepeatedField<global::Google.Protobuf.TestProtos.ImportEnum>();
    public pbc::RepeatedField<global::Google.Protobuf.TestProtos.ImportEnum> RepeatedImportEnum {
      get { return repeatedImportEnum_; }
    }

    public const int RepeatedPublicImportMessageFieldNumber = 54;
    private readonly pbc::RepeatedField<global::Google.Protobuf.TestProtos.PublicImportMessage> repeatedPublicImportMessage_ = new pbc::RepeatedField<global::Google.Protobuf.TestProtos.PublicImportMessage>();
    public pbc::RepeatedField<global::Google.Protobuf.TestProtos.PublicImportMessage> RepeatedPublicImportMessage {
      get { return repeatedPublicImportMessage_; }
    }

    public const int OneofUint32FieldNumber = 111;
    public uint OneofUint32 {
      get { return oneofFieldCase_ == OneofFieldOneofCase.OneofUint32 ? (uint) oneofField_ : 0; }
      set {
        oneofField_ = value;
        oneofFieldCase_ = OneofFieldOneofCase.OneofUint32;
      }
    }

    public const int OneofNestedMessageFieldNumber = 112;
    public global::Google.Protobuf.TestProtos.TestAllTypes.Types.NestedMessage OneofNestedMessage {
      get { return oneofFieldCase_ == OneofFieldOneofCase.OneofNestedMessage ? (global::Google.Protobuf.TestProtos.TestAllTypes.Types.NestedMessage) oneofField_ : null; }
      set {
        oneofField_ = value;
        oneofFieldCase_ = value == null ? OneofFieldOneofCase.None : OneofFieldOneofCase.OneofNestedMessage;
      }
    }

    public const int OneofStringFieldNumber = 113;
    public string OneofString {
      get { return oneofFieldCase_ == OneofFieldOneofCase.OneofString ? (string) oneofField_ : ""; }
      set {
        oneofField_ = value ?? "";
        oneofFieldCase_ = value == null ? OneofFieldOneofCase.None : OneofFieldOneofCase.OneofString;
      }
    }

    public const int OneofBytesFieldNumber = 114;
    public pb::ByteString OneofBytes {
      get { return oneofFieldCase_ == OneofFieldOneofCase.OneofBytes ? (pb::ByteString) oneofField_ : pb::ByteString.Empty; }
      set {
        oneofField_ = value ?? pb::ByteString.Empty;
        oneofFieldCase_ = value == null ? OneofFieldOneofCase.None : OneofFieldOneofCase.OneofBytes;
      }
    }

    private object oneofField_;
    public enum OneofFieldOneofCase {
      None = 0,
      OneofUint32 = 111,
      OneofNestedMessage = 112,
      OneofString = 113,
      OneofBytes = 114,
    }
    private OneofFieldOneofCase oneofFieldCase_ = OneofFieldOneofCase.None;
    public OneofFieldOneofCase OneofFieldCase {
      get { return oneofFieldCase_; }
    }

    public void ClearOneofField() {
      oneofFieldCase_ = OneofFieldOneofCase.None;
      oneofField_ = null;
    }

    public override bool Equals(object other) {
      return Equals(other as TestAllTypes);
    }

    public bool Equals(TestAllTypes other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (SingleInt32 != other.SingleInt32) return false;
      if (SingleInt64 != other.SingleInt64) return false;
      if (SingleUint32 != other.SingleUint32) return false;
      if (SingleUint64 != other.SingleUint64) return false;
      if (SingleSint32 != other.SingleSint32) return false;
      if (SingleSint64 != other.SingleSint64) return false;
      if (SingleFixed32 != other.SingleFixed32) return false;
      if (SingleFixed64 != other.SingleFixed64) return false;
      if (SingleSfixed32 != other.SingleSfixed32) return false;
      if (SingleSfixed64 != other.SingleSfixed64) return false;
      if (SingleFloat != other.SingleFloat) return false;
      if (SingleDouble != other.SingleDouble) return false;
      if (SingleBool != other.SingleBool) return false;
      if (SingleString != other.SingleString) return false;
      if (SingleBytes != other.SingleBytes) return false;
      if (!object.Equals(SingleNestedMessage, other.SingleNestedMessage)) return false;if (!object.Equals(SingleForeignMessage, other.SingleForeignMessage)) return false;if (!object.Equals(SingleImportMessage, other.SingleImportMessage)) return false;if (SingleNestedEnum != other.SingleNestedEnum) return false;
      if (SingleForeignEnum != other.SingleForeignEnum) return false;
      if (SingleImportEnum != other.SingleImportEnum) return false;
      if (!object.Equals(SinglePublicImportMessage, other.SinglePublicImportMessage)) return false;if(!repeatedInt32_.Equals(other.repeatedInt32_)) return false;
      if(!repeatedInt64_.Equals(other.repeatedInt64_)) return false;
      if(!repeatedUint32_.Equals(other.repeatedUint32_)) return false;
      if(!repeatedUint64_.Equals(other.repeatedUint64_)) return false;
      if(!repeatedSint32_.Equals(other.repeatedSint32_)) return false;
      if(!repeatedSint64_.Equals(other.repeatedSint64_)) return false;
      if(!repeatedFixed32_.Equals(other.repeatedFixed32_)) return false;
      if(!repeatedFixed64_.Equals(other.repeatedFixed64_)) return false;
      if(!repeatedSfixed32_.Equals(other.repeatedSfixed32_)) return false;
      if(!repeatedSfixed64_.Equals(other.repeatedSfixed64_)) return false;
      if(!repeatedFloat_.Equals(other.repeatedFloat_)) return false;
      if(!repeatedDouble_.Equals(other.repeatedDouble_)) return false;
      if(!repeatedBool_.Equals(other.repeatedBool_)) return false;
      if(!repeatedString_.Equals(other.repeatedString_)) return false;
      if(!repeatedBytes_.Equals(other.repeatedBytes_)) return false;
      if(!repeatedNestedMessage_.Equals(other.repeatedNestedMessage_)) return false;
      if(!repeatedForeignMessage_.Equals(other.repeatedForeignMessage_)) return false;
      if(!repeatedImportMessage_.Equals(other.repeatedImportMessage_)) return false;
      if(!repeatedNestedEnum_.Equals(other.repeatedNestedEnum_)) return false;
      if(!repeatedForeignEnum_.Equals(other.repeatedForeignEnum_)) return false;
      if(!repeatedImportEnum_.Equals(other.repeatedImportEnum_)) return false;
      if(!repeatedPublicImportMessage_.Equals(other.repeatedPublicImportMessage_)) return false;
      if (OneofUint32 != other.OneofUint32) return false;
      if (!object.Equals(OneofNestedMessage, other.OneofNestedMessage)) return false;if (OneofString != other.OneofString) return false;
      if (OneofBytes != other.OneofBytes) return false;
      return true;
    }

    public override int GetHashCode() {
      int hash = 0;
      if (SingleInt32 != 0) hash ^= SingleInt32.GetHashCode();
      if (SingleInt64 != 0L) hash ^= SingleInt64.GetHashCode();
      if (SingleUint32 != 0) hash ^= SingleUint32.GetHashCode();
      if (SingleUint64 != 0UL) hash ^= SingleUint64.GetHashCode();
      if (SingleSint32 != 0) hash ^= SingleSint32.GetHashCode();
      if (SingleSint64 != 0L) hash ^= SingleSint64.GetHashCode();
      if (SingleFixed32 != 0) hash ^= SingleFixed32.GetHashCode();
      if (SingleFixed64 != 0UL) hash ^= SingleFixed64.GetHashCode();
      if (SingleSfixed32 != 0) hash ^= SingleSfixed32.GetHashCode();
      if (SingleSfixed64 != 0L) hash ^= SingleSfixed64.GetHashCode();
      if (SingleFloat != 0F) hash ^= SingleFloat.GetHashCode();
      if (SingleDouble != 0D) hash ^= SingleDouble.GetHashCode();
      if (SingleBool != false) hash ^= SingleBool.GetHashCode();
      if (SingleString != "") hash ^= SingleString.GetHashCode();
      if (SingleBytes != pb::ByteString.Empty) hash ^= SingleBytes.GetHashCode();
      if (singleNestedMessage_ != null) hash ^= SingleNestedMessage.GetHashCode();
      if (singleForeignMessage_ != null) hash ^= SingleForeignMessage.GetHashCode();
      if (singleImportMessage_ != null) hash ^= SingleImportMessage.GetHashCode();
      if (SingleNestedEnum != global::Google.Protobuf.TestProtos.TestAllTypes.Types.NestedEnum.NESTED_ENUM_UNSPECIFIED) hash ^= SingleNestedEnum.GetHashCode();
      if (SingleForeignEnum != global::Google.Protobuf.TestProtos.ForeignEnum.FOREIGN_UNSPECIFIED) hash ^= SingleForeignEnum.GetHashCode();
      if (SingleImportEnum != global::Google.Protobuf.TestProtos.ImportEnum.IMPORT_ENUM_UNSPECIFIED) hash ^= SingleImportEnum.GetHashCode();
      if (singlePublicImportMessage_ != null) hash ^= SinglePublicImportMessage.GetHashCode();
      hash ^= repeatedInt32_.GetHashCode();
      hash ^= repeatedInt64_.GetHashCode();
      hash ^= repeatedUint32_.GetHashCode();
      hash ^= repeatedUint64_.GetHashCode();
      hash ^= repeatedSint32_.GetHashCode();
      hash ^= repeatedSint64_.GetHashCode();
      hash ^= repeatedFixed32_.GetHashCode();
      hash ^= repeatedFixed64_.GetHashCode();
      hash ^= repeatedSfixed32_.GetHashCode();
      hash ^= repeatedSfixed64_.GetHashCode();
      hash ^= repeatedFloat_.GetHashCode();
      hash ^= repeatedDouble_.GetHashCode();
      hash ^= repeatedBool_.GetHashCode();
      hash ^= repeatedString_.GetHashCode();
      hash ^= repeatedBytes_.GetHashCode();
      hash ^= repeatedNestedMessage_.GetHashCode();
      hash ^= repeatedForeignMessage_.GetHashCode();
      hash ^= repeatedImportMessage_.GetHashCode();
      hash ^= repeatedNestedEnum_.GetHashCode();
      hash ^= repeatedForeignEnum_.GetHashCode();
      hash ^= repeatedImportEnum_.GetHashCode();
      hash ^= repeatedPublicImportMessage_.GetHashCode();
      if (oneofFieldCase_ == OneofFieldOneofCase.OneofUint32) hash ^= OneofUint32.GetHashCode();
      if (oneofFieldCase_ == OneofFieldOneofCase.OneofNestedMessage) hash ^= OneofNestedMessage.GetHashCode();
      if (oneofFieldCase_ == OneofFieldOneofCase.OneofString) hash ^= OneofString.GetHashCode();
      if (oneofFieldCase_ == OneofFieldOneofCase.OneofBytes) hash ^= OneofBytes.GetHashCode();
      return hash;
    }

    public void WriteTo(pb::CodedOutputStream output) {
      if (SingleInt32 != 0) {
        output.WriteInt32(1, SingleInt32);
      }
      if (SingleInt64 != 0L) {
        output.WriteInt64(2, SingleInt64);
      }
      if (SingleUint32 != 0) {
        output.WriteUInt32(3, SingleUint32);
      }
      if (SingleUint64 != 0UL) {
        output.WriteUInt64(4, SingleUint64);
      }
      if (SingleSint32 != 0) {
        output.WriteSInt32(5, SingleSint32);
      }
      if (SingleSint64 != 0L) {
        output.WriteSInt64(6, SingleSint64);
      }
      if (SingleFixed32 != 0) {
        output.WriteFixed32(7, SingleFixed32);
      }
      if (SingleFixed64 != 0UL) {
        output.WriteFixed64(8, SingleFixed64);
      }
      if (SingleSfixed32 != 0) {
        output.WriteSFixed32(9, SingleSfixed32);
      }
      if (SingleSfixed64 != 0L) {
        output.WriteSFixed64(10, SingleSfixed64);
      }
      if (SingleFloat != 0F) {
        output.WriteFloat(11, SingleFloat);
      }
      if (SingleDouble != 0D) {
        output.WriteDouble(12, SingleDouble);
      }
      if (SingleBool != false) {
        output.WriteBool(13, SingleBool);
      }
      if (SingleString != "") {
        output.WriteString(14, SingleString);
      }
      if (SingleBytes != pb::ByteString.Empty) {
        output.WriteBytes(15, SingleBytes);
      }
      if (singleNestedMessage_ != null) {
        output.WriteMessage(18, SingleNestedMessage);
      }
      if (singleForeignMessage_ != null) {
        output.WriteMessage(19, SingleForeignMessage);
      }
      if (singleImportMessage_ != null) {
        output.WriteMessage(20, SingleImportMessage);
      }
      if (SingleNestedEnum != global::Google.Protobuf.TestProtos.TestAllTypes.Types.NestedEnum.NESTED_ENUM_UNSPECIFIED) {
        output.WriteEnum(21, (int) SingleNestedEnum);
      }
      if (SingleForeignEnum != global::Google.Protobuf.TestProtos.ForeignEnum.FOREIGN_UNSPECIFIED) {
        output.WriteEnum(22, (int) SingleForeignEnum);
      }
      if (SingleImportEnum != global::Google.Protobuf.TestProtos.ImportEnum.IMPORT_ENUM_UNSPECIFIED) {
        output.WriteEnum(23, (int) SingleImportEnum);
      }
      if (singlePublicImportMessage_ != null) {
        output.WriteMessage(26, SinglePublicImportMessage);
      }
      output.WritePackedInt32Array(31, repeatedInt32_);
      output.WritePackedInt64Array(32, repeatedInt64_);
      output.WritePackedUInt32Array(33, repeatedUint32_);
      output.WritePackedUInt64Array(34, repeatedUint64_);
      output.WritePackedSInt32Array(35, repeatedSint32_);
      output.WritePackedSInt64Array(36, repeatedSint64_);
      output.WritePackedFixed32Array(37, repeatedFixed32_);
      output.WritePackedFixed64Array(38, repeatedFixed64_);
      output.WritePackedSFixed32Array(39, repeatedSfixed32_);
      output.WritePackedSFixed64Array(40, repeatedSfixed64_);
      output.WritePackedFloatArray(41, repeatedFloat_);
      output.WritePackedDoubleArray(42, repeatedDouble_);
      output.WritePackedBoolArray(43, repeatedBool_);
      output.WriteStringArray(44, repeatedString_);
      output.WriteBytesArray(45, repeatedBytes_);
      output.WriteMessageArray(48, repeatedNestedMessage_);
      output.WriteMessageArray(49, repeatedForeignMessage_);
      output.WriteMessageArray(50, repeatedImportMessage_);
      output.WritePackedEnumArray(51, repeatedNestedEnum_);
      output.WritePackedEnumArray(52, repeatedForeignEnum_);
      output.WritePackedEnumArray(53, repeatedImportEnum_);
      output.WriteMessageArray(54, repeatedPublicImportMessage_);
      if (oneofFieldCase_ == OneofFieldOneofCase.OneofUint32) {
        output.WriteUInt32(111, OneofUint32);
      }
      if (oneofFieldCase_ == OneofFieldOneofCase.OneofNestedMessage) {
        output.WriteMessage(112, OneofNestedMessage);
      }
      if (oneofFieldCase_ == OneofFieldOneofCase.OneofString) {
        output.WriteString(113, OneofString);
      }
      if (oneofFieldCase_ == OneofFieldOneofCase.OneofBytes) {
        output.WriteBytes(114, OneofBytes);
      }
    }

    public int CalculateSize() {
      int size = 0;
      if (SingleInt32 != 0) {
        size += pb::CodedOutputStream.ComputeInt32Size(1, SingleInt32);
      }
      if (SingleInt64 != 0L) {
        size += pb::CodedOutputStream.ComputeInt64Size(2, SingleInt64);
      }
      if (SingleUint32 != 0) {
        size += pb::CodedOutputStream.ComputeUInt32Size(3, SingleUint32);
      }
      if (SingleUint64 != 0UL) {
        size += pb::CodedOutputStream.ComputeUInt64Size(4, SingleUint64);
      }
      if (SingleSint32 != 0) {
        size += pb::CodedOutputStream.ComputeSInt32Size(5, SingleSint32);
      }
      if (SingleSint64 != 0L) {
        size += pb::CodedOutputStream.ComputeSInt64Size(6, SingleSint64);
      }
      if (SingleFixed32 != 0) {
        size += pb::CodedOutputStream.ComputeFixed32Size(7, SingleFixed32);
      }
      if (SingleFixed64 != 0UL) {
        size += pb::CodedOutputStream.ComputeFixed64Size(8, SingleFixed64);
      }
      if (SingleSfixed32 != 0) {
        size += pb::CodedOutputStream.ComputeSFixed32Size(9, SingleSfixed32);
      }
      if (SingleSfixed64 != 0L) {
        size += pb::CodedOutputStream.ComputeSFixed64Size(10, SingleSfixed64);
      }
      if (SingleFloat != 0F) {
        size += pb::CodedOutputStream.ComputeFloatSize(11, SingleFloat);
      }
      if (SingleDouble != 0D) {
        size += pb::CodedOutputStream.ComputeDoubleSize(12, SingleDouble);
      }
      if (SingleBool != false) {
        size += pb::CodedOutputStream.ComputeBoolSize(13, SingleBool);
      }
      if (SingleString != "") {
        size += pb::CodedOutputStream.ComputeStringSize(14, SingleString);
      }
      if (SingleBytes != pb::ByteString.Empty) {
        size += pb::CodedOutputStream.ComputeBytesSize(15, SingleBytes);
      }
      if (singleNestedMessage_ != null) {
        size += pb::CodedOutputStream.ComputeMessageSize(18, SingleNestedMessage);
      }
      if (singleForeignMessage_ != null) {
        size += pb::CodedOutputStream.ComputeMessageSize(19, SingleForeignMessage);
      }
      if (singleImportMessage_ != null) {
        size += pb::CodedOutputStream.ComputeMessageSize(20, SingleImportMessage);
      }
      if (SingleNestedEnum != global::Google.Protobuf.TestProtos.TestAllTypes.Types.NestedEnum.NESTED_ENUM_UNSPECIFIED) {
        size += pb::CodedOutputStream.ComputeEnumSize(21, (int) SingleNestedEnum);
      }
      if (SingleForeignEnum != global::Google.Protobuf.TestProtos.ForeignEnum.FOREIGN_UNSPECIFIED) {
        size += pb::CodedOutputStream.ComputeEnumSize(22, (int) SingleForeignEnum);
      }
      if (SingleImportEnum != global::Google.Protobuf.TestProtos.ImportEnum.IMPORT_ENUM_UNSPECIFIED) {
        size += pb::CodedOutputStream.ComputeEnumSize(23, (int) SingleImportEnum);
      }
      if (singlePublicImportMessage_ != null) {
        size += pb::CodedOutputStream.ComputeMessageSize(26, SinglePublicImportMessage);
      }
      {
        int dataSize = 0;
        foreach (int element in repeatedInt32_) {
          dataSize += pb::CodedOutputStream.ComputeInt32SizeNoTag(element);
        }
        size += dataSize;
        if (repeatedInt32_.Count != 0) {
          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
        }
      }
      {
        int dataSize = 0;
        foreach (long element in repeatedInt64_) {
          dataSize += pb::CodedOutputStream.ComputeInt64SizeNoTag(element);
        }
        size += dataSize;
        if (repeatedInt64_.Count != 0) {
          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
        }
      }
      {
        int dataSize = 0;
        foreach (uint element in repeatedUint32_) {
          dataSize += pb::CodedOutputStream.ComputeUInt32SizeNoTag(element);
        }
        size += dataSize;
        if (repeatedUint32_.Count != 0) {
          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
        }
      }
      {
        int dataSize = 0;
        foreach (ulong element in repeatedUint64_) {
          dataSize += pb::CodedOutputStream.ComputeUInt64SizeNoTag(element);
        }
        size += dataSize;
        if (repeatedUint64_.Count != 0) {
          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
        }
      }
      {
        int dataSize = 0;
        foreach (int element in repeatedSint32_) {
          dataSize += pb::CodedOutputStream.ComputeSInt32SizeNoTag(element);
        }
        size += dataSize;
        if (repeatedSint32_.Count != 0) {
          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
        }
      }
      {
        int dataSize = 0;
        foreach (long element in repeatedSint64_) {
          dataSize += pb::CodedOutputStream.ComputeSInt64SizeNoTag(element);
        }
        size += dataSize;
        if (repeatedSint64_.Count != 0) {
          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
        }
      }
      {
        int dataSize = 0;
        dataSize = 4 * repeatedFixed32_.Count;
        size += dataSize;
        if (repeatedFixed32_.Count != 0) {
          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
        }
      }
      {
        int dataSize = 0;
        dataSize = 8 * repeatedFixed64_.Count;
        size += dataSize;
        if (repeatedFixed64_.Count != 0) {
          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
        }
      }
      {
        int dataSize = 0;
        dataSize = 4 * repeatedSfixed32_.Count;
        size += dataSize;
        if (repeatedSfixed32_.Count != 0) {
          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
        }
      }
      {
        int dataSize = 0;
        dataSize = 8 * repeatedSfixed64_.Count;
        size += dataSize;
        if (repeatedSfixed64_.Count != 0) {
          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
        }
      }
      {
        int dataSize = 0;
        dataSize = 4 * repeatedFloat_.Count;
        size += dataSize;
        if (repeatedFloat_.Count != 0) {
          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
        }
      }
      {
        int dataSize = 0;
        dataSize = 8 * repeatedDouble_.Count;
        size += dataSize;
        if (repeatedDouble_.Count != 0) {
          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
        }
      }
      {
        int dataSize = 0;
        dataSize = 1 * repeatedBool_.Count;
        size += dataSize;
        if (repeatedBool_.Count != 0) {
          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
        }
      }
      {
        int dataSize = 0;
        foreach (string element in repeatedString_) {
          dataSize += pb::CodedOutputStream.ComputeStringSizeNoTag(element);
        }
        size += dataSize;
        size += 2 * repeatedString_.Count;
      }
      {
        int dataSize = 0;
        foreach (pb::ByteString element in repeatedBytes_) {
          dataSize += pb::CodedOutputStream.ComputeBytesSizeNoTag(element);
        }
        size += dataSize;
        size += 2 * repeatedBytes_.Count;
      }
      foreach (global::Google.Protobuf.TestProtos.TestAllTypes.Types.NestedMessage element in repeatedNestedMessage_) {
        size += pb::CodedOutputStream.ComputeMessageSize(48, element);
      }
      foreach (global::Google.Protobuf.TestProtos.ForeignMessage element in repeatedForeignMessage_) {
        size += pb::CodedOutputStream.ComputeMessageSize(49, element);
      }
      foreach (global::Google.Protobuf.TestProtos.ImportMessage element in repeatedImportMessage_) {
        size += pb::CodedOutputStream.ComputeMessageSize(50, element);
      }
      {
        int dataSize = 0;
        if (repeatedNestedEnum_.Count > 0) {
          foreach (global::Google.Protobuf.TestProtos.TestAllTypes.Types.NestedEnum element in repeatedNestedEnum_) {
            dataSize += pb::CodedOutputStream.ComputeEnumSizeNoTag((int) element);
          }
          size += dataSize;
          size += 2;
          size += pb::CodedOutputStream.ComputeRawVarint32Size((uint) dataSize);
        }
      }
      {
        int dataSize = 0;
        if (repeatedForeignEnum_.Count > 0) {
          foreach (global::Google.Protobuf.TestProtos.ForeignEnum element in repeatedForeignEnum_) {
            dataSize += pb::CodedOutputStream.ComputeEnumSizeNoTag((int) element);
          }
          size += dataSize;
          size += 2;
          size += pb::CodedOutputStream.ComputeRawVarint32Size((uint) dataSize);
        }
      }
      {
        int dataSize = 0;
        if (repeatedImportEnum_.Count > 0) {
          foreach (global::Google.Protobuf.TestProtos.ImportEnum element in repeatedImportEnum_) {
            dataSize += pb::CodedOutputStream.ComputeEnumSizeNoTag((int) element);
          }
          size += dataSize;
          size += 2;
          size += pb::CodedOutputStream.ComputeRawVarint32Size((uint) dataSize);
        }
      }
      foreach (global::Google.Protobuf.TestProtos.PublicImportMessage element in repeatedPublicImportMessage_) {
        size += pb::CodedOutputStream.ComputeMessageSize(54, element);
      }
      if (oneofFieldCase_ == OneofFieldOneofCase.OneofUint32) {
        size += pb::CodedOutputStream.ComputeUInt32Size(111, OneofUint32);
      }
      if (oneofFieldCase_ == OneofFieldOneofCase.OneofNestedMessage) {
        size += pb::CodedOutputStream.ComputeMessageSize(112, OneofNestedMessage);
      }
      if (oneofFieldCase_ == OneofFieldOneofCase.OneofString) {
        size += pb::CodedOutputStream.ComputeStringSize(113, OneofString);
      }
      if (oneofFieldCase_ == OneofFieldOneofCase.OneofBytes) {
        size += pb::CodedOutputStream.ComputeBytesSize(114, OneofBytes);
      }
      return size;
    }
    public void MergeFrom(TestAllTypes other) {
      if (other == null) {
        return;
      }
      if (other.SingleInt32 != 0) {
        SingleInt32 = other.SingleInt32;
      }
      if (other.SingleInt64 != 0L) {
        SingleInt64 = other.SingleInt64;
      }
      if (other.SingleUint32 != 0) {
        SingleUint32 = other.SingleUint32;
      }
      if (other.SingleUint64 != 0UL) {
        SingleUint64 = other.SingleUint64;
      }
      if (other.SingleSint32 != 0) {
        SingleSint32 = other.SingleSint32;
      }
      if (other.SingleSint64 != 0L) {
        SingleSint64 = other.SingleSint64;
      }
      if (other.SingleFixed32 != 0) {
        SingleFixed32 = other.SingleFixed32;
      }
      if (other.SingleFixed64 != 0UL) {
        SingleFixed64 = other.SingleFixed64;
      }
      if (other.SingleSfixed32 != 0) {
        SingleSfixed32 = other.SingleSfixed32;
      }
      if (other.SingleSfixed64 != 0L) {
        SingleSfixed64 = other.SingleSfixed64;
      }
      if (other.SingleFloat != 0F) {
        SingleFloat = other.SingleFloat;
      }
      if (other.SingleDouble != 0D) {
        SingleDouble = other.SingleDouble;
      }
      if (other.SingleBool != false) {
        SingleBool = other.SingleBool;
      }
      if (other.SingleString != "") {
        SingleString = other.SingleString;
      }
      if (other.SingleBytes != pb::ByteString.Empty) {
        SingleBytes = other.SingleBytes;
      }
      if (other.singleNestedMessage_ != null) {
        if (singleNestedMessage_ == null) {
          singleNestedMessage_ = new global::Google.Protobuf.TestProtos.TestAllTypes.Types.NestedMessage();
        }
        SingleNestedMessage.MergeFrom(other.SingleNestedMessage);
      }
      if (other.singleForeignMessage_ != null) {
        if (singleForeignMessage_ == null) {
          singleForeignMessage_ = new global::Google.Protobuf.TestProtos.ForeignMessage();
        }
        SingleForeignMessage.MergeFrom(other.SingleForeignMessage);
      }
      if (other.singleImportMessage_ != null) {
        if (singleImportMessage_ == null) {
          singleImportMessage_ = new global::Google.Protobuf.TestProtos.ImportMessage();
        }
        SingleImportMessage.MergeFrom(other.SingleImportMessage);
      }
      if (other.SingleNestedEnum != global::Google.Protobuf.TestProtos.TestAllTypes.Types.NestedEnum.NESTED_ENUM_UNSPECIFIED) {
        SingleNestedEnum = other.SingleNestedEnum;
      }
      if (other.SingleForeignEnum != global::Google.Protobuf.TestProtos.ForeignEnum.FOREIGN_UNSPECIFIED) {
        SingleForeignEnum = other.SingleForeignEnum;
      }
      if (other.SingleImportEnum != global::Google.Protobuf.TestProtos.ImportEnum.IMPORT_ENUM_UNSPECIFIED) {
        SingleImportEnum = other.SingleImportEnum;
      }
      if (other.singlePublicImportMessage_ != null) {
        if (singlePublicImportMessage_ == null) {
          singlePublicImportMessage_ = new global::Google.Protobuf.TestProtos.PublicImportMessage();
        }
        SinglePublicImportMessage.MergeFrom(other.SinglePublicImportMessage);
      }
      repeatedInt32_.Add(other.repeatedInt32_);
      repeatedInt64_.Add(other.repeatedInt64_);
      repeatedUint32_.Add(other.repeatedUint32_);
      repeatedUint64_.Add(other.repeatedUint64_);
      repeatedSint32_.Add(other.repeatedSint32_);
      repeatedSint64_.Add(other.repeatedSint64_);
      repeatedFixed32_.Add(other.repeatedFixed32_);
      repeatedFixed64_.Add(other.repeatedFixed64_);
      repeatedSfixed32_.Add(other.repeatedSfixed32_);
      repeatedSfixed64_.Add(other.repeatedSfixed64_);
      repeatedFloat_.Add(other.repeatedFloat_);
      repeatedDouble_.Add(other.repeatedDouble_);
      repeatedBool_.Add(other.repeatedBool_);
      repeatedString_.Add(other.repeatedString_);
      repeatedBytes_.Add(other.repeatedBytes_);
      repeatedNestedMessage_.Add(other.repeatedNestedMessage_);
      repeatedForeignMessage_.Add(other.repeatedForeignMessage_);
      repeatedImportMessage_.Add(other.repeatedImportMessage_);
      repeatedNestedEnum_.Add(other.repeatedNestedEnum_);
      repeatedForeignEnum_.Add(other.repeatedForeignEnum_);
      repeatedImportEnum_.Add(other.repeatedImportEnum_);
      repeatedPublicImportMessage_.Add(other.repeatedPublicImportMessage_);
      switch (other.OneofFieldCase) {
        case OneofFieldOneofCase.OneofUint32:
          OneofUint32 = other.OneofUint32;
          break;
        case OneofFieldOneofCase.OneofNestedMessage:
          OneofNestedMessage = other.OneofNestedMessage;
          break;
        case OneofFieldOneofCase.OneofString:
          OneofString = other.OneofString;
          break;
        case OneofFieldOneofCase.OneofBytes:
          OneofBytes = other.OneofBytes;
          break;
      }

    }

    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while (input.ReadTag(out tag)) {
        switch(tag) {
          case 0:
            throw pb::InvalidProtocolBufferException.InvalidTag();
          default:
            if (pb::WireFormat.IsEndGroupTag(tag)) {
              return;
            }
            break;
          case 8: {
            singleInt32_ = input.ReadInt32();
            break;
          }
          case 16: {
            singleInt64_ = input.ReadInt64();
            break;
          }
          case 24: {
            singleUint32_ = input.ReadUInt32();
            break;
          }
          case 32: {
            singleUint64_ = input.ReadUInt64();
            break;
          }
          case 40: {
            singleSint32_ = input.ReadSInt32();
            break;
          }
          case 48: {
            singleSint64_ = input.ReadSInt64();
            break;
          }
          case 61: {
            singleFixed32_ = input.ReadFixed32();
            break;
          }
          case 65: {
            singleFixed64_ = input.ReadFixed64();
            break;
          }
          case 77: {
            singleSfixed32_ = input.ReadSFixed32();
            break;
          }
          case 81: {
            singleSfixed64_ = input.ReadSFixed64();
            break;
          }
          case 93: {
            singleFloat_ = input.ReadFloat();
            break;
          }
          case 97: {
            singleDouble_ = input.ReadDouble();
            break;
          }
          case 104: {
            singleBool_ = input.ReadBool();
            break;
          }
          case 114: {
            singleString_ = input.ReadString();
            break;
          }
          case 122: {
            singleBytes_ = input.ReadBytes();
            break;
          }
          case 146: {
            if (singleNestedMessage_ == null) {
              singleNestedMessage_ = new global::Google.Protobuf.TestProtos.TestAllTypes.Types.NestedMessage();
            }
            input.ReadMessage(singleNestedMessage_);
            break;
          }
          case 154: {
            if (singleForeignMessage_ == null) {
              singleForeignMessage_ = new global::Google.Protobuf.TestProtos.ForeignMessage();
            }
            input.ReadMessage(singleForeignMessage_);
            break;
          }
          case 162: {
            if (singleImportMessage_ == null) {
              singleImportMessage_ = new global::Google.Protobuf.TestProtos.ImportMessage();
            }
            input.ReadMessage(singleImportMessage_);
            break;
          }
          case 168: {
            singleNestedEnum_ = (global::Google.Protobuf.TestProtos.TestAllTypes.Types.NestedEnum) input.ReadEnum();
            break;
          }
          case 176: {
            singleForeignEnum_ = (global::Google.Protobuf.TestProtos.ForeignEnum) input.ReadEnum();
            break;
          }
          case 184: {
            singleImportEnum_ = (global::Google.Protobuf.TestProtos.ImportEnum) input.ReadEnum();
            break;
          }
          case 210: {
            if (singlePublicImportMessage_ == null) {
              singlePublicImportMessage_ = new global::Google.Protobuf.TestProtos.PublicImportMessage();
            }
            input.ReadMessage(singlePublicImportMessage_);
            break;
          }
          case 250:
          case 248: {
            input.ReadInt32Array(tag, repeatedInt32_);
            break;
          }
          case 258:
          case 256: {
            input.ReadInt64Array(tag, repeatedInt64_);
            break;
          }
          case 266:
          case 264: {
            input.ReadUInt32Array(tag, repeatedUint32_);
            break;
          }
          case 274:
          case 272: {
            input.ReadUInt64Array(tag, repeatedUint64_);
            break;
          }
          case 282:
          case 280: {
            input.ReadSInt32Array(tag, repeatedSint32_);
            break;
          }
          case 290:
          case 288: {
            input.ReadSInt64Array(tag, repeatedSint64_);
            break;
          }
          case 298:
          case 301: {
            input.ReadFixed32Array(tag, repeatedFixed32_);
            break;
          }
          case 306:
          case 305: {
            input.ReadFixed64Array(tag, repeatedFixed64_);
            break;
          }
          case 314:
          case 317: {
            input.ReadSFixed32Array(tag, repeatedSfixed32_);
            break;
          }
          case 322:
          case 321: {
            input.ReadSFixed64Array(tag, repeatedSfixed64_);
            break;
          }
          case 330:
          case 333: {
            input.ReadFloatArray(tag, repeatedFloat_);
            break;
          }
          case 338:
          case 337: {
            input.ReadDoubleArray(tag, repeatedDouble_);
            break;
          }
          case 346:
          case 344: {
            input.ReadBoolArray(tag, repeatedBool_);
            break;
          }
          case 354: {
            input.ReadStringArray(tag, repeatedString_);
            break;
          }
          case 362: {
            input.ReadBytesArray(tag, repeatedBytes_);
            break;
          }
          case 386: {
            input.ReadMessageArray(tag, repeatedNestedMessage_, global::Google.Protobuf.TestProtos.TestAllTypes.Types.NestedMessage.Parser);
            break;
          }
          case 394: {
            input.ReadMessageArray(tag, repeatedForeignMessage_, global::Google.Protobuf.TestProtos.ForeignMessage.Parser);
            break;
          }
          case 402: {
            input.ReadMessageArray(tag, repeatedImportMessage_, global::Google.Protobuf.TestProtos.ImportMessage.Parser);
            break;
          }
          case 410:
          case 408: {
            input.ReadEnumArray<global::Google.Protobuf.TestProtos.TestAllTypes.Types.NestedEnum>(tag, repeatedNestedEnum_);
            break;
          }
          case 418:
          case 416: {
            input.ReadEnumArray<global::Google.Protobuf.TestProtos.ForeignEnum>(tag, repeatedForeignEnum_);
            break;
          }
          case 426:
          case 424: {
            input.ReadEnumArray<global::Google.Protobuf.TestProtos.ImportEnum>(tag, repeatedImportEnum_);
            break;
          }
          case 434: {
            input.ReadMessageArray(tag, repeatedPublicImportMessage_, global::Google.Protobuf.TestProtos.PublicImportMessage.Parser);
            break;
          }
          case 888: {
            oneofField_ = input.ReadUInt32()
            ;oneofFieldCase_ = OneofFieldOneofCase.OneofUint32;
            break;
          }
          case 898: {
            global::Google.Protobuf.TestProtos.TestAllTypes.Types.NestedMessage subBuilder = new global::Google.Protobuf.TestProtos.TestAllTypes.Types.NestedMessage();
            if (oneofFieldCase_ == OneofFieldOneofCase.OneofNestedMessage) {
              subBuilder.MergeFrom(OneofNestedMessage);
            }
            input.ReadMessage(subBuilder);
            OneofNestedMessage = subBuilder;
            break;
          }
          case 906: {
            oneofField_ = input.ReadString()
            ;oneofFieldCase_ = OneofFieldOneofCase.OneofString;
            break;
          }
          case 914: {
            oneofField_ = input.ReadBytes()
            ;oneofFieldCase_ = OneofFieldOneofCase.OneofBytes;
            break;
          }
        }
      }
    }

    #region Nested types
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
    public static partial class Types {
      public enum NestedEnum {
        NESTED_ENUM_UNSPECIFIED = 0,
        FOO = 1,
        BAR = 2,
        BAZ = 3,
        NEG = -1,
      }

      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
      public sealed partial class NestedMessage : pb::IMessage<NestedMessage>, global::System.IEquatable<NestedMessage> {
        private static readonly pb::MessageParser<NestedMessage> _parser = new pb::MessageParser<NestedMessage>(() => new NestedMessage());
        public static pb::MessageParser<NestedMessage> Parser { get { return _parser; } }

        private static readonly string[] _fieldNames = new string[] { "bb" };
        private static readonly uint[] _fieldTags = new uint[] { 8 };
        public static pbd::MessageDescriptor Descriptor {
          get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_TestAllTypes_NestedMessage__Descriptor; }
        }

        public pb::FieldAccess.FieldAccessorTable<NestedMessage> Fields {
          get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_TestAllTypes_NestedMessage__FieldAccessorTable; }
        }

        public NestedMessage() { }
        public NestedMessage(NestedMessage other) {
          MergeFrom(other);
        }
        public const int BbFieldNumber = 1;
        private int bb_;
        public int Bb {
          get { return bb_; }
          set { bb_ = value; }
        }


        public override bool Equals(object other) {
          return Equals(other as NestedMessage);
        }

        public bool Equals(NestedMessage other) {
          if (ReferenceEquals(other, null)) {
            return false;
          }
          if (ReferenceEquals(other, this)) {
            return true;
          }
          if (Bb != other.Bb) return false;
          return true;
        }

        public override int GetHashCode() {
          int hash = 0;
          if (Bb != 0) hash ^= Bb.GetHashCode();
          return hash;
        }

        public void WriteTo(pb::CodedOutputStream output) {
          if (Bb != 0) {
            output.WriteInt32(1, Bb);
          }
        }

        public int CalculateSize() {
          int size = 0;
          if (Bb != 0) {
            size += pb::CodedOutputStream.ComputeInt32Size(1, Bb);
          }
          return size;
        }
        public void MergeFrom(NestedMessage other) {
          if (other == null) {
            return;
          }
          if (other.Bb != 0) {
            Bb = other.Bb;
          }
        }

        public void MergeFrom(pb::CodedInputStream input) {
          uint tag;
          while (input.ReadTag(out tag)) {
            switch(tag) {
              case 0:
                throw pb::InvalidProtocolBufferException.InvalidTag();
              default:
                if (pb::WireFormat.IsEndGroupTag(tag)) {
                  return;
                }
                break;
              case 8: {
                bb_ = input.ReadInt32();
                break;
              }
            }
          }
        }

      }

    }
    #endregion

  }

  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
  public sealed partial class NestedTestAllTypes : pb::IMessage<NestedTestAllTypes>, global::System.IEquatable<NestedTestAllTypes> {
    private static readonly pb::MessageParser<NestedTestAllTypes> _parser = new pb::MessageParser<NestedTestAllTypes>(() => new NestedTestAllTypes());
    public static pb::MessageParser<NestedTestAllTypes> Parser { get { return _parser; } }

    private static readonly string[] _fieldNames = new string[] { "child", "payload", "repeated_child" };
    private static readonly uint[] _fieldTags = new uint[] { 10, 18, 26 };
    public static pbd::MessageDescriptor Descriptor {
      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_NestedTestAllTypes__Descriptor; }
    }

    public pb::FieldAccess.FieldAccessorTable<NestedTestAllTypes> Fields {
      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_NestedTestAllTypes__FieldAccessorTable; }
    }

    public NestedTestAllTypes() { }
    public NestedTestAllTypes(NestedTestAllTypes other) {
      MergeFrom(other);
    }
    public const int ChildFieldNumber = 1;
    private global::Google.Protobuf.TestProtos.NestedTestAllTypes child_;
    public global::Google.Protobuf.TestProtos.NestedTestAllTypes Child {
      get { return child_; }
      set { child_ = value; }
    }

    public const int PayloadFieldNumber = 2;
    private global::Google.Protobuf.TestProtos.TestAllTypes payload_;
    public global::Google.Protobuf.TestProtos.TestAllTypes Payload {
      get { return payload_; }
      set { payload_ = value; }
    }

    public const int RepeatedChildFieldNumber = 3;
    private readonly pbc::RepeatedField<global::Google.Protobuf.TestProtos.NestedTestAllTypes> repeatedChild_ = new pbc::RepeatedField<global::Google.Protobuf.TestProtos.NestedTestAllTypes>();
    public pbc::RepeatedField<global::Google.Protobuf.TestProtos.NestedTestAllTypes> RepeatedChild {
      get { return repeatedChild_; }
    }

    public override bool Equals(object other) {
      return Equals(other as NestedTestAllTypes);
    }

    public bool Equals(NestedTestAllTypes other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (!object.Equals(Child, other.Child)) return false;if (!object.Equals(Payload, other.Payload)) return false;if(!repeatedChild_.Equals(other.repeatedChild_)) return false;
      return true;
    }

    public override int GetHashCode() {
      int hash = 0;
      if (child_ != null) hash ^= Child.GetHashCode();
      if (payload_ != null) hash ^= Payload.GetHashCode();
      hash ^= repeatedChild_.GetHashCode();
      return hash;
    }

    public void WriteTo(pb::CodedOutputStream output) {
      if (child_ != null) {
        output.WriteMessage(1, Child);
      }
      if (payload_ != null) {
        output.WriteMessage(2, Payload);
      }
      output.WriteMessageArray(3, repeatedChild_);
    }

    public int CalculateSize() {
      int size = 0;
      if (child_ != null) {
        size += pb::CodedOutputStream.ComputeMessageSize(1, Child);
      }
      if (payload_ != null) {
        size += pb::CodedOutputStream.ComputeMessageSize(2, Payload);
      }
      foreach (global::Google.Protobuf.TestProtos.NestedTestAllTypes element in repeatedChild_) {
        size += pb::CodedOutputStream.ComputeMessageSize(3, element);
      }
      return size;
    }
    public void MergeFrom(NestedTestAllTypes other) {
      if (other == null) {
        return;
      }
      if (other.child_ != null) {
        if (child_ == null) {
          child_ = new global::Google.Protobuf.TestProtos.NestedTestAllTypes();
        }
        Child.MergeFrom(other.Child);
      }
      if (other.payload_ != null) {
        if (payload_ == null) {
          payload_ = new global::Google.Protobuf.TestProtos.TestAllTypes();
        }
        Payload.MergeFrom(other.Payload);
      }
      repeatedChild_.Add(other.repeatedChild_);
    }

    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while (input.ReadTag(out tag)) {
        switch(tag) {
          case 0:
            throw pb::InvalidProtocolBufferException.InvalidTag();
          default:
            if (pb::WireFormat.IsEndGroupTag(tag)) {
              return;
            }
            break;
          case 10: {
            if (child_ == null) {
              child_ = new global::Google.Protobuf.TestProtos.NestedTestAllTypes();
            }
            input.ReadMessage(child_);
            break;
          }
          case 18: {
            if (payload_ == null) {
              payload_ = new global::Google.Protobuf.TestProtos.TestAllTypes();
            }
            input.ReadMessage(payload_);
            break;
          }
          case 26: {
            input.ReadMessageArray(tag, repeatedChild_, global::Google.Protobuf.TestProtos.NestedTestAllTypes.Parser);
            break;
          }
        }
      }
    }

  }

  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
  public sealed partial class TestDeprecatedFields : pb::IMessage<TestDeprecatedFields>, global::System.IEquatable<TestDeprecatedFields> {
    private static readonly pb::MessageParser<TestDeprecatedFields> _parser = new pb::MessageParser<TestDeprecatedFields>(() => new TestDeprecatedFields());
    public static pb::MessageParser<TestDeprecatedFields> Parser { get { return _parser; } }

    private static readonly string[] _fieldNames = new string[] { "deprecated_int32" };
    private static readonly uint[] _fieldTags = new uint[] { 8 };
    public static pbd::MessageDescriptor Descriptor {
      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_TestDeprecatedFields__Descriptor; }
    }

    public pb::FieldAccess.FieldAccessorTable<TestDeprecatedFields> Fields {
      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_TestDeprecatedFields__FieldAccessorTable; }
    }

    public TestDeprecatedFields() { }
    public TestDeprecatedFields(TestDeprecatedFields other) {
      MergeFrom(other);
    }
    public const int DeprecatedInt32FieldNumber = 1;
    private int deprecatedInt32_;
    [global::System.ObsoleteAttribute()]
    public int DeprecatedInt32 {
      get { return deprecatedInt32_; }
      set { deprecatedInt32_ = value; }
    }


    public override bool Equals(object other) {
      return Equals(other as TestDeprecatedFields);
    }

    public bool Equals(TestDeprecatedFields other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (DeprecatedInt32 != other.DeprecatedInt32) return false;
      return true;
    }

    public override int GetHashCode() {
      int hash = 0;
      if (DeprecatedInt32 != 0) hash ^= DeprecatedInt32.GetHashCode();
      return hash;
    }

    public void WriteTo(pb::CodedOutputStream output) {
      if (DeprecatedInt32 != 0) {
        output.WriteInt32(1, DeprecatedInt32);
      }
    }

    public int CalculateSize() {
      int size = 0;
      if (DeprecatedInt32 != 0) {
        size += pb::CodedOutputStream.ComputeInt32Size(1, DeprecatedInt32);
      }
      return size;
    }
    public void MergeFrom(TestDeprecatedFields other) {
      if (other == null) {
        return;
      }
      if (other.DeprecatedInt32 != 0) {
        DeprecatedInt32 = other.DeprecatedInt32;
      }
    }

    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while (input.ReadTag(out tag)) {
        switch(tag) {
          case 0:
            throw pb::InvalidProtocolBufferException.InvalidTag();
          default:
            if (pb::WireFormat.IsEndGroupTag(tag)) {
              return;
            }
            break;
          case 8: {
            deprecatedInt32_ = input.ReadInt32();
            break;
          }
        }
      }
    }

  }

  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
  public sealed partial class ForeignMessage : pb::IMessage<ForeignMessage>, global::System.IEquatable<ForeignMessage> {
    private static readonly pb::MessageParser<ForeignMessage> _parser = new pb::MessageParser<ForeignMessage>(() => new ForeignMessage());
    public static pb::MessageParser<ForeignMessage> Parser { get { return _parser; } }

    private static readonly string[] _fieldNames = new string[] { "c" };
    private static readonly uint[] _fieldTags = new uint[] { 8 };
    public static pbd::MessageDescriptor Descriptor {
      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_ForeignMessage__Descriptor; }
    }

    public pb::FieldAccess.FieldAccessorTable<ForeignMessage> Fields {
      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_ForeignMessage__FieldAccessorTable; }
    }

    public ForeignMessage() { }
    public ForeignMessage(ForeignMessage other) {
      MergeFrom(other);
    }
    public const int CFieldNumber = 1;
    private int c_;
    public int C {
      get { return c_; }
      set { c_ = value; }
    }


    public override bool Equals(object other) {
      return Equals(other as ForeignMessage);
    }

    public bool Equals(ForeignMessage other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (C != other.C) return false;
      return true;
    }

    public override int GetHashCode() {
      int hash = 0;
      if (C != 0) hash ^= C.GetHashCode();
      return hash;
    }

    public void WriteTo(pb::CodedOutputStream output) {
      if (C != 0) {
        output.WriteInt32(1, C);
      }
    }

    public int CalculateSize() {
      int size = 0;
      if (C != 0) {
        size += pb::CodedOutputStream.ComputeInt32Size(1, C);
      }
      return size;
    }
    public void MergeFrom(ForeignMessage other) {
      if (other == null) {
        return;
      }
      if (other.C != 0) {
        C = other.C;
      }
    }

    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while (input.ReadTag(out tag)) {
        switch(tag) {
          case 0:
            throw pb::InvalidProtocolBufferException.InvalidTag();
          default:
            if (pb::WireFormat.IsEndGroupTag(tag)) {
              return;
            }
            break;
          case 8: {
            c_ = input.ReadInt32();
            break;
          }
        }
      }
    }

  }

  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
  public sealed partial class TestReservedFields : pb::IMessage<TestReservedFields>, global::System.IEquatable<TestReservedFields> {
    private static readonly pb::MessageParser<TestReservedFields> _parser = new pb::MessageParser<TestReservedFields>(() => new TestReservedFields());
    public static pb::MessageParser<TestReservedFields> Parser { get { return _parser; } }

    private static readonly string[] _fieldNames = new string[] {  };
    private static readonly uint[] _fieldTags = new uint[] {  };
    public static pbd::MessageDescriptor Descriptor {
      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_TestReservedFields__Descriptor; }
    }

    public pb::FieldAccess.FieldAccessorTable<TestReservedFields> Fields {
      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_TestReservedFields__FieldAccessorTable; }
    }

    public TestReservedFields() { }
    public TestReservedFields(TestReservedFields other) {
      MergeFrom(other);
    }
    public override bool Equals(object other) {
      return Equals(other as TestReservedFields);
    }

    public bool Equals(TestReservedFields other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      return true;
    }

    public override int GetHashCode() {
      int hash = 0;
      return hash;
    }

    public void WriteTo(pb::CodedOutputStream output) {
    }

    public int CalculateSize() {
      int size = 0;
      return size;
    }
    public void MergeFrom(TestReservedFields other) {
      if (other == null) {
        return;
      }
    }

    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while (input.ReadTag(out tag)) {
        switch(tag) {
          case 0:
            throw pb::InvalidProtocolBufferException.InvalidTag();
          default:
            if (pb::WireFormat.IsEndGroupTag(tag)) {
              return;
            }
            break;
        }
      }
    }

  }

  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
  public sealed partial class TestForeignNested : pb::IMessage<TestForeignNested>, global::System.IEquatable<TestForeignNested> {
    private static readonly pb::MessageParser<TestForeignNested> _parser = new pb::MessageParser<TestForeignNested>(() => new TestForeignNested());
    public static pb::MessageParser<TestForeignNested> Parser { get { return _parser; } }

    private static readonly string[] _fieldNames = new string[] { "foreign_nested" };
    private static readonly uint[] _fieldTags = new uint[] { 10 };
    public static pbd::MessageDescriptor Descriptor {
      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_TestForeignNested__Descriptor; }
    }

    public pb::FieldAccess.FieldAccessorTable<TestForeignNested> Fields {
      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_TestForeignNested__FieldAccessorTable; }
    }

    public TestForeignNested() { }
    public TestForeignNested(TestForeignNested other) {
      MergeFrom(other);
    }
    public const int ForeignNestedFieldNumber = 1;
    private global::Google.Protobuf.TestProtos.TestAllTypes.Types.NestedMessage foreignNested_;
    public global::Google.Protobuf.TestProtos.TestAllTypes.Types.NestedMessage ForeignNested {
      get { return foreignNested_; }
      set { foreignNested_ = value; }
    }

    public override bool Equals(object other) {
      return Equals(other as TestForeignNested);
    }

    public bool Equals(TestForeignNested other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (!object.Equals(ForeignNested, other.ForeignNested)) return false;  return true;
    }

    public override int GetHashCode() {
      int hash = 0;
      if (foreignNested_ != null) hash ^= ForeignNested.GetHashCode();
      return hash;
    }

    public void WriteTo(pb::CodedOutputStream output) {
      if (foreignNested_ != null) {
        output.WriteMessage(1, ForeignNested);
      }
    }

    public int CalculateSize() {
      int size = 0;
      if (foreignNested_ != null) {
        size += pb::CodedOutputStream.ComputeMessageSize(1, ForeignNested);
      }
      return size;
    }
    public void MergeFrom(TestForeignNested other) {
      if (other == null) {
        return;
      }
      if (other.foreignNested_ != null) {
        if (foreignNested_ == null) {
          foreignNested_ = new global::Google.Protobuf.TestProtos.TestAllTypes.Types.NestedMessage();
        }
        ForeignNested.MergeFrom(other.ForeignNested);
      }
    }

    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while (input.ReadTag(out tag)) {
        switch(tag) {
          case 0:
            throw pb::InvalidProtocolBufferException.InvalidTag();
          default:
            if (pb::WireFormat.IsEndGroupTag(tag)) {
              return;
            }
            break;
          case 10: {
            if (foreignNested_ == null) {
              foreignNested_ = new global::Google.Protobuf.TestProtos.TestAllTypes.Types.NestedMessage();
            }
            input.ReadMessage(foreignNested_);
            break;
          }
        }
      }
    }

  }

  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
  public sealed partial class TestReallyLargeTagNumber : pb::IMessage<TestReallyLargeTagNumber>, global::System.IEquatable<TestReallyLargeTagNumber> {
    private static readonly pb::MessageParser<TestReallyLargeTagNumber> _parser = new pb::MessageParser<TestReallyLargeTagNumber>(() => new TestReallyLargeTagNumber());
    public static pb::MessageParser<TestReallyLargeTagNumber> Parser { get { return _parser; } }

    private static readonly string[] _fieldNames = new string[] { "a", "bb" };
    private static readonly uint[] _fieldTags = new uint[] { 8, 2147483640 };
    public static pbd::MessageDescriptor Descriptor {
      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_TestReallyLargeTagNumber__Descriptor; }
    }

    public pb::FieldAccess.FieldAccessorTable<TestReallyLargeTagNumber> Fields {
      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_TestReallyLargeTagNumber__FieldAccessorTable; }
    }

    public TestReallyLargeTagNumber() { }
    public TestReallyLargeTagNumber(TestReallyLargeTagNumber other) {
      MergeFrom(other);
    }
    public const int AFieldNumber = 1;
    private int a_;
    public int A {
      get { return a_; }
      set { a_ = value; }
    }


    public const int BbFieldNumber = 268435455;
    private int bb_;
    public int Bb {
      get { return bb_; }
      set { bb_ = value; }
    }


    public override bool Equals(object other) {
      return Equals(other as TestReallyLargeTagNumber);
    }

    public bool Equals(TestReallyLargeTagNumber other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (A != other.A) return false;
      if (Bb != other.Bb) return false;
      return true;
    }

    public override int GetHashCode() {
      int hash = 0;
      if (A != 0) hash ^= A.GetHashCode();
      if (Bb != 0) hash ^= Bb.GetHashCode();
      return hash;
    }

    public void WriteTo(pb::CodedOutputStream output) {
      if (A != 0) {
        output.WriteInt32(1, A);
      }
      if (Bb != 0) {
        output.WriteInt32(268435455, Bb);
      }
    }

    public int CalculateSize() {
      int size = 0;
      if (A != 0) {
        size += pb::CodedOutputStream.ComputeInt32Size(1, A);
      }
      if (Bb != 0) {
        size += pb::CodedOutputStream.ComputeInt32Size(268435455, Bb);
      }
      return size;
    }
    public void MergeFrom(TestReallyLargeTagNumber other) {
      if (other == null) {
        return;
      }
      if (other.A != 0) {
        A = other.A;
      }
      if (other.Bb != 0) {
        Bb = other.Bb;
      }
    }

    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while (input.ReadTag(out tag)) {
        switch(tag) {
          case 0:
            throw pb::InvalidProtocolBufferException.InvalidTag();
          default:
            if (pb::WireFormat.IsEndGroupTag(tag)) {
              return;
            }
            break;
          case 8: {
            a_ = input.ReadInt32();
            break;
          }
          case 2147483640: {
            bb_ = input.ReadInt32();
            break;
          }
        }
      }
    }

  }

  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
  public sealed partial class TestRecursiveMessage : pb::IMessage<TestRecursiveMessage>, global::System.IEquatable<TestRecursiveMessage> {
    private static readonly pb::MessageParser<TestRecursiveMessage> _parser = new pb::MessageParser<TestRecursiveMessage>(() => new TestRecursiveMessage());
    public static pb::MessageParser<TestRecursiveMessage> Parser { get { return _parser; } }

    private static readonly string[] _fieldNames = new string[] { "a", "i" };
    private static readonly uint[] _fieldTags = new uint[] { 10, 16 };
    public static pbd::MessageDescriptor Descriptor {
      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_TestRecursiveMessage__Descriptor; }
    }

    public pb::FieldAccess.FieldAccessorTable<TestRecursiveMessage> Fields {
      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_TestRecursiveMessage__FieldAccessorTable; }
    }

    public TestRecursiveMessage() { }
    public TestRecursiveMessage(TestRecursiveMessage other) {
      MergeFrom(other);
    }
    public const int AFieldNumber = 1;
    private global::Google.Protobuf.TestProtos.TestRecursiveMessage a_;
    public global::Google.Protobuf.TestProtos.TestRecursiveMessage A {
      get { return a_; }
      set { a_ = value; }
    }

    public const int IFieldNumber = 2;
    private int i_;
    public int I {
      get { return i_; }
      set { i_ = value; }
    }


    public override bool Equals(object other) {
      return Equals(other as TestRecursiveMessage);
    }

    public bool Equals(TestRecursiveMessage other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (!object.Equals(A, other.A)) return false;if (I != other.I) return false;
      return true;
    }

    public override int GetHashCode() {
      int hash = 0;
      if (a_ != null) hash ^= A.GetHashCode();
      if (I != 0) hash ^= I.GetHashCode();
      return hash;
    }

    public void WriteTo(pb::CodedOutputStream output) {
      if (a_ != null) {
        output.WriteMessage(1, A);
      }
      if (I != 0) {
        output.WriteInt32(2, I);
      }
    }

    public int CalculateSize() {
      int size = 0;
      if (a_ != null) {
        size += pb::CodedOutputStream.ComputeMessageSize(1, A);
      }
      if (I != 0) {
        size += pb::CodedOutputStream.ComputeInt32Size(2, I);
      }
      return size;
    }
    public void MergeFrom(TestRecursiveMessage other) {
      if (other == null) {
        return;
      }
      if (other.a_ != null) {
        if (a_ == null) {
          a_ = new global::Google.Protobuf.TestProtos.TestRecursiveMessage();
        }
        A.MergeFrom(other.A);
      }
      if (other.I != 0) {
        I = other.I;
      }
    }

    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while (input.ReadTag(out tag)) {
        switch(tag) {
          case 0:
            throw pb::InvalidProtocolBufferException.InvalidTag();
          default:
            if (pb::WireFormat.IsEndGroupTag(tag)) {
              return;
            }
            break;
          case 10: {
            if (a_ == null) {
              a_ = new global::Google.Protobuf.TestProtos.TestRecursiveMessage();
            }
            input.ReadMessage(a_);
            break;
          }
          case 16: {
            i_ = input.ReadInt32();
            break;
          }
        }
      }
    }

  }

  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
  public sealed partial class TestMutualRecursionA : pb::IMessage<TestMutualRecursionA>, global::System.IEquatable<TestMutualRecursionA> {
    private static readonly pb::MessageParser<TestMutualRecursionA> _parser = new pb::MessageParser<TestMutualRecursionA>(() => new TestMutualRecursionA());
    public static pb::MessageParser<TestMutualRecursionA> Parser { get { return _parser; } }

    private static readonly string[] _fieldNames = new string[] { "bb" };
    private static readonly uint[] _fieldTags = new uint[] { 10 };
    public static pbd::MessageDescriptor Descriptor {
      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_TestMutualRecursionA__Descriptor; }
    }

    public pb::FieldAccess.FieldAccessorTable<TestMutualRecursionA> Fields {
      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_TestMutualRecursionA__FieldAccessorTable; }
    }

    public TestMutualRecursionA() { }
    public TestMutualRecursionA(TestMutualRecursionA other) {
      MergeFrom(other);
    }
    public const int BbFieldNumber = 1;
    private global::Google.Protobuf.TestProtos.TestMutualRecursionB bb_;
    public global::Google.Protobuf.TestProtos.TestMutualRecursionB Bb {
      get { return bb_; }
      set { bb_ = value; }
    }

    public override bool Equals(object other) {
      return Equals(other as TestMutualRecursionA);
    }

    public bool Equals(TestMutualRecursionA other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (!object.Equals(Bb, other.Bb)) return false;  return true;
    }

    public override int GetHashCode() {
      int hash = 0;
      if (bb_ != null) hash ^= Bb.GetHashCode();
      return hash;
    }

    public void WriteTo(pb::CodedOutputStream output) {
      if (bb_ != null) {
        output.WriteMessage(1, Bb);
      }
    }

    public int CalculateSize() {
      int size = 0;
      if (bb_ != null) {
        size += pb::CodedOutputStream.ComputeMessageSize(1, Bb);
      }
      return size;
    }
    public void MergeFrom(TestMutualRecursionA other) {
      if (other == null) {
        return;
      }
      if (other.bb_ != null) {
        if (bb_ == null) {
          bb_ = new global::Google.Protobuf.TestProtos.TestMutualRecursionB();
        }
        Bb.MergeFrom(other.Bb);
      }
    }

    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while (input.ReadTag(out tag)) {
        switch(tag) {
          case 0:
            throw pb::InvalidProtocolBufferException.InvalidTag();
          default:
            if (pb::WireFormat.IsEndGroupTag(tag)) {
              return;
            }
            break;
          case 10: {
            if (bb_ == null) {
              bb_ = new global::Google.Protobuf.TestProtos.TestMutualRecursionB();
            }
            input.ReadMessage(bb_);
            break;
          }
        }
      }
    }

  }

  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
  public sealed partial class TestMutualRecursionB : pb::IMessage<TestMutualRecursionB>, global::System.IEquatable<TestMutualRecursionB> {
    private static readonly pb::MessageParser<TestMutualRecursionB> _parser = new pb::MessageParser<TestMutualRecursionB>(() => new TestMutualRecursionB());
    public static pb::MessageParser<TestMutualRecursionB> Parser { get { return _parser; } }

    private static readonly string[] _fieldNames = new string[] { "a", "optional_int32" };
    private static readonly uint[] _fieldTags = new uint[] { 10, 16 };
    public static pbd::MessageDescriptor Descriptor {
      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_TestMutualRecursionB__Descriptor; }
    }

    public pb::FieldAccess.FieldAccessorTable<TestMutualRecursionB> Fields {
      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_TestMutualRecursionB__FieldAccessorTable; }
    }

    public TestMutualRecursionB() { }
    public TestMutualRecursionB(TestMutualRecursionB other) {
      MergeFrom(other);
    }
    public const int AFieldNumber = 1;
    private global::Google.Protobuf.TestProtos.TestMutualRecursionA a_;
    public global::Google.Protobuf.TestProtos.TestMutualRecursionA A {
      get { return a_; }
      set { a_ = value; }
    }

    public const int OptionalInt32FieldNumber = 2;
    private int optionalInt32_;
    public int OptionalInt32 {
      get { return optionalInt32_; }
      set { optionalInt32_ = value; }
    }


    public override bool Equals(object other) {
      return Equals(other as TestMutualRecursionB);
    }

    public bool Equals(TestMutualRecursionB other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (!object.Equals(A, other.A)) return false;if (OptionalInt32 != other.OptionalInt32) return false;
      return true;
    }

    public override int GetHashCode() {
      int hash = 0;
      if (a_ != null) hash ^= A.GetHashCode();
      if (OptionalInt32 != 0) hash ^= OptionalInt32.GetHashCode();
      return hash;
    }

    public void WriteTo(pb::CodedOutputStream output) {
      if (a_ != null) {
        output.WriteMessage(1, A);
      }
      if (OptionalInt32 != 0) {
        output.WriteInt32(2, OptionalInt32);
      }
    }

    public int CalculateSize() {
      int size = 0;
      if (a_ != null) {
        size += pb::CodedOutputStream.ComputeMessageSize(1, A);
      }
      if (OptionalInt32 != 0) {
        size += pb::CodedOutputStream.ComputeInt32Size(2, OptionalInt32);
      }
      return size;
    }
    public void MergeFrom(TestMutualRecursionB other) {
      if (other == null) {
        return;
      }
      if (other.a_ != null) {
        if (a_ == null) {
          a_ = new global::Google.Protobuf.TestProtos.TestMutualRecursionA();
        }
        A.MergeFrom(other.A);
      }
      if (other.OptionalInt32 != 0) {
        OptionalInt32 = other.OptionalInt32;
      }
    }

    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while (input.ReadTag(out tag)) {
        switch(tag) {
          case 0:
            throw pb::InvalidProtocolBufferException.InvalidTag();
          default:
            if (pb::WireFormat.IsEndGroupTag(tag)) {
              return;
            }
            break;
          case 10: {
            if (a_ == null) {
              a_ = new global::Google.Protobuf.TestProtos.TestMutualRecursionA();
            }
            input.ReadMessage(a_);
            break;
          }
          case 16: {
            optionalInt32_ = input.ReadInt32();
            break;
          }
        }
      }
    }

  }

  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
  public sealed partial class TestCamelCaseFieldNames : pb::IMessage<TestCamelCaseFieldNames>, global::System.IEquatable<TestCamelCaseFieldNames> {
    private static readonly pb::MessageParser<TestCamelCaseFieldNames> _parser = new pb::MessageParser<TestCamelCaseFieldNames>(() => new TestCamelCaseFieldNames());
    public static pb::MessageParser<TestCamelCaseFieldNames> Parser { get { return _parser; } }

    private static readonly string[] _fieldNames = new string[] { "EnumField", "MessageField", "PrimitiveField", "RepeatedEnumField", "RepeatedMessageField", "RepeatedPrimitiveField", "RepeatedStringField", "StringField" };
    private static readonly uint[] _fieldTags = new uint[] { 24, 34, 8, 72, 82, 56, 66, 18 };
    public static pbd::MessageDescriptor Descriptor {
      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_TestCamelCaseFieldNames__Descriptor; }
    }

    public pb::FieldAccess.FieldAccessorTable<TestCamelCaseFieldNames> Fields {
      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_TestCamelCaseFieldNames__FieldAccessorTable; }
    }

    public TestCamelCaseFieldNames() { }
    public TestCamelCaseFieldNames(TestCamelCaseFieldNames other) {
      MergeFrom(other);
    }
    public const int PrimitiveFieldFieldNumber = 1;
    private int primitiveField_;
    public int PrimitiveField {
      get { return primitiveField_; }
      set { primitiveField_ = value; }
    }


    public const int StringFieldFieldNumber = 2;
    private string stringField_ = "";
    public string StringField {
      get { return stringField_; }
      set { stringField_ = value ?? ""; }
    }


    public const int EnumFieldFieldNumber = 3;
    private global::Google.Protobuf.TestProtos.ForeignEnum enumField_ = global::Google.Protobuf.TestProtos.ForeignEnum.FOREIGN_UNSPECIFIED;
    public global::Google.Protobuf.TestProtos.ForeignEnum EnumField {
      get { return enumField_; }
      set { enumField_ = value; }
    }


    public const int MessageFieldFieldNumber = 4;
    private global::Google.Protobuf.TestProtos.ForeignMessage messageField_;
    public global::Google.Protobuf.TestProtos.ForeignMessage MessageField {
      get { return messageField_; }
      set { messageField_ = value; }
    }

    public const int RepeatedPrimitiveFieldFieldNumber = 7;
    private readonly pbc::RepeatedField<int> repeatedPrimitiveField_ = new pbc::RepeatedField<int>();
    public pbc::RepeatedField<int> RepeatedPrimitiveField {
      get { return repeatedPrimitiveField_; }
    }

    public const int RepeatedStringFieldFieldNumber = 8;
    private readonly pbc::RepeatedField<string> repeatedStringField_ = new pbc::RepeatedField<string>();
    public pbc::RepeatedField<string> RepeatedStringField {
      get { return repeatedStringField_; }
    }

    public const int RepeatedEnumFieldFieldNumber = 9;
    private readonly pbc::RepeatedField<global::Google.Protobuf.TestProtos.ForeignEnum> repeatedEnumField_ = new pbc::RepeatedField<global::Google.Protobuf.TestProtos.ForeignEnum>();
    public pbc::RepeatedField<global::Google.Protobuf.TestProtos.ForeignEnum> RepeatedEnumField {
      get { return repeatedEnumField_; }
    }

    public const int RepeatedMessageFieldFieldNumber = 10;
    private readonly pbc::RepeatedField<global::Google.Protobuf.TestProtos.ForeignMessage> repeatedMessageField_ = new pbc::RepeatedField<global::Google.Protobuf.TestProtos.ForeignMessage>();
    public pbc::RepeatedField<global::Google.Protobuf.TestProtos.ForeignMessage> RepeatedMessageField {
      get { return repeatedMessageField_; }
    }

    public override bool Equals(object other) {
      return Equals(other as TestCamelCaseFieldNames);
    }

    public bool Equals(TestCamelCaseFieldNames other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (PrimitiveField != other.PrimitiveField) return false;
      if (StringField != other.StringField) return false;
      if (EnumField != other.EnumField) return false;
      if (!object.Equals(MessageField, other.MessageField)) return false;if(!repeatedPrimitiveField_.Equals(other.repeatedPrimitiveField_)) return false;
      if(!repeatedStringField_.Equals(other.repeatedStringField_)) return false;
      if(!repeatedEnumField_.Equals(other.repeatedEnumField_)) return false;
      if(!repeatedMessageField_.Equals(other.repeatedMessageField_)) return false;
      return true;
    }

    public override int GetHashCode() {
      int hash = 0;
      if (PrimitiveField != 0) hash ^= PrimitiveField.GetHashCode();
      if (StringField != "") hash ^= StringField.GetHashCode();
      if (EnumField != global::Google.Protobuf.TestProtos.ForeignEnum.FOREIGN_UNSPECIFIED) hash ^= EnumField.GetHashCode();
      if (messageField_ != null) hash ^= MessageField.GetHashCode();
      hash ^= repeatedPrimitiveField_.GetHashCode();
      hash ^= repeatedStringField_.GetHashCode();
      hash ^= repeatedEnumField_.GetHashCode();
      hash ^= repeatedMessageField_.GetHashCode();
      return hash;
    }

    public void WriteTo(pb::CodedOutputStream output) {
      if (PrimitiveField != 0) {
        output.WriteInt32(1, PrimitiveField);
      }
      if (StringField != "") {
        output.WriteString(2, StringField);
      }
      if (EnumField != global::Google.Protobuf.TestProtos.ForeignEnum.FOREIGN_UNSPECIFIED) {
        output.WriteEnum(3, (int) EnumField);
      }
      if (messageField_ != null) {
        output.WriteMessage(4, MessageField);
      }
      output.WritePackedInt32Array(7, repeatedPrimitiveField_);
      output.WriteStringArray(8, repeatedStringField_);
      output.WritePackedEnumArray(9, repeatedEnumField_);
      output.WriteMessageArray(10, repeatedMessageField_);
    }

    public int CalculateSize() {
      int size = 0;
      if (PrimitiveField != 0) {
        size += pb::CodedOutputStream.ComputeInt32Size(1, PrimitiveField);
      }
      if (StringField != "") {
        size += pb::CodedOutputStream.ComputeStringSize(2, StringField);
      }
      if (EnumField != global::Google.Protobuf.TestProtos.ForeignEnum.FOREIGN_UNSPECIFIED) {
        size += pb::CodedOutputStream.ComputeEnumSize(3, (int) EnumField);
      }
      if (messageField_ != null) {
        size += pb::CodedOutputStream.ComputeMessageSize(4, MessageField);
      }
      {
        int dataSize = 0;
        foreach (int element in repeatedPrimitiveField_) {
          dataSize += pb::CodedOutputStream.ComputeInt32SizeNoTag(element);
        }
        size += dataSize;
        if (repeatedPrimitiveField_.Count != 0) {
          size += 1 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
        }
      }
      {
        int dataSize = 0;
        foreach (string element in repeatedStringField_) {
          dataSize += pb::CodedOutputStream.ComputeStringSizeNoTag(element);
        }
        size += dataSize;
        size += 1 * repeatedStringField_.Count;
      }
      {
        int dataSize = 0;
        if (repeatedEnumField_.Count > 0) {
          foreach (global::Google.Protobuf.TestProtos.ForeignEnum element in repeatedEnumField_) {
            dataSize += pb::CodedOutputStream.ComputeEnumSizeNoTag((int) element);
          }
          size += dataSize;
          size += 1;
          size += pb::CodedOutputStream.ComputeRawVarint32Size((uint) dataSize);
        }
      }
      foreach (global::Google.Protobuf.TestProtos.ForeignMessage element in repeatedMessageField_) {
        size += pb::CodedOutputStream.ComputeMessageSize(10, element);
      }
      return size;
    }
    public void MergeFrom(TestCamelCaseFieldNames other) {
      if (other == null) {
        return;
      }
      if (other.PrimitiveField != 0) {
        PrimitiveField = other.PrimitiveField;
      }
      if (other.StringField != "") {
        StringField = other.StringField;
      }
      if (other.EnumField != global::Google.Protobuf.TestProtos.ForeignEnum.FOREIGN_UNSPECIFIED) {
        EnumField = other.EnumField;
      }
      if (other.messageField_ != null) {
        if (messageField_ == null) {
          messageField_ = new global::Google.Protobuf.TestProtos.ForeignMessage();
        }
        MessageField.MergeFrom(other.MessageField);
      }
      repeatedPrimitiveField_.Add(other.repeatedPrimitiveField_);
      repeatedStringField_.Add(other.repeatedStringField_);
      repeatedEnumField_.Add(other.repeatedEnumField_);
      repeatedMessageField_.Add(other.repeatedMessageField_);
    }

    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while (input.ReadTag(out tag)) {
        switch(tag) {
          case 0:
            throw pb::InvalidProtocolBufferException.InvalidTag();
          default:
            if (pb::WireFormat.IsEndGroupTag(tag)) {
              return;
            }
            break;
          case 8: {
            primitiveField_ = input.ReadInt32();
            break;
          }
          case 18: {
            stringField_ = input.ReadString();
            break;
          }
          case 24: {
            enumField_ = (global::Google.Protobuf.TestProtos.ForeignEnum) input.ReadEnum();
            break;
          }
          case 34: {
            if (messageField_ == null) {
              messageField_ = new global::Google.Protobuf.TestProtos.ForeignMessage();
            }
            input.ReadMessage(messageField_);
            break;
          }
          case 58:
          case 56: {
            input.ReadInt32Array(tag, repeatedPrimitiveField_);
            break;
          }
          case 66: {
            input.ReadStringArray(tag, repeatedStringField_);
            break;
          }
          case 74:
          case 72: {
            input.ReadEnumArray<global::Google.Protobuf.TestProtos.ForeignEnum>(tag, repeatedEnumField_);
            break;
          }
          case 82: {
            input.ReadMessageArray(tag, repeatedMessageField_, global::Google.Protobuf.TestProtos.ForeignMessage.Parser);
            break;
          }
        }
      }
    }

  }

  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
  public sealed partial class TestFieldOrderings : pb::IMessage<TestFieldOrderings>, global::System.IEquatable<TestFieldOrderings> {
    private static readonly pb::MessageParser<TestFieldOrderings> _parser = new pb::MessageParser<TestFieldOrderings>(() => new TestFieldOrderings());
    public static pb::MessageParser<TestFieldOrderings> Parser { get { return _parser; } }

    private static readonly string[] _fieldNames = new string[] { "my_float", "my_int", "my_string", "single_nested_message" };
    private static readonly uint[] _fieldTags = new uint[] { 813, 8, 90, 1602 };
    public static pbd::MessageDescriptor Descriptor {
      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_TestFieldOrderings__Descriptor; }
    }

    public pb::FieldAccess.FieldAccessorTable<TestFieldOrderings> Fields {
      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_TestFieldOrderings__FieldAccessorTable; }
    }

    public TestFieldOrderings() { }
    public TestFieldOrderings(TestFieldOrderings other) {
      MergeFrom(other);
    }
    public const int MyStringFieldNumber = 11;
    private string myString_ = "";
    public string MyString {
      get { return myString_; }
      set { myString_ = value ?? ""; }
    }


    public const int MyIntFieldNumber = 1;
    private long myInt_;
    public long MyInt {
      get { return myInt_; }
      set { myInt_ = value; }
    }


    public const int MyFloatFieldNumber = 101;
    private float myFloat_;
    public float MyFloat {
      get { return myFloat_; }
      set { myFloat_ = value; }
    }


    public const int SingleNestedMessageFieldNumber = 200;
    private global::Google.Protobuf.TestProtos.TestFieldOrderings.Types.NestedMessage singleNestedMessage_;
    public global::Google.Protobuf.TestProtos.TestFieldOrderings.Types.NestedMessage SingleNestedMessage {
      get { return singleNestedMessage_; }
      set { singleNestedMessage_ = value; }
    }

    public override bool Equals(object other) {
      return Equals(other as TestFieldOrderings);
    }

    public bool Equals(TestFieldOrderings other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (MyString != other.MyString) return false;
      if (MyInt != other.MyInt) return false;
      if (MyFloat != other.MyFloat) return false;
      if (!object.Equals(SingleNestedMessage, other.SingleNestedMessage)) return false;  return true;
    }

    public override int GetHashCode() {
      int hash = 0;
      if (MyString != "") hash ^= MyString.GetHashCode();
      if (MyInt != 0L) hash ^= MyInt.GetHashCode();
      if (MyFloat != 0F) hash ^= MyFloat.GetHashCode();
      if (singleNestedMessage_ != null) hash ^= SingleNestedMessage.GetHashCode();
      return hash;
    }

    public void WriteTo(pb::CodedOutputStream output) {
      if (MyInt != 0L) {
        output.WriteInt64(1, MyInt);
      }
      if (MyString != "") {
        output.WriteString(11, MyString);
      }
      if (MyFloat != 0F) {
        output.WriteFloat(101, MyFloat);
      }
      if (singleNestedMessage_ != null) {
        output.WriteMessage(200, SingleNestedMessage);
      }
    }

    public int CalculateSize() {
      int size = 0;
      if (MyString != "") {
        size += pb::CodedOutputStream.ComputeStringSize(11, MyString);
      }
      if (MyInt != 0L) {
        size += pb::CodedOutputStream.ComputeInt64Size(1, MyInt);
      }
      if (MyFloat != 0F) {
        size += pb::CodedOutputStream.ComputeFloatSize(101, MyFloat);
      }
      if (singleNestedMessage_ != null) {
        size += pb::CodedOutputStream.ComputeMessageSize(200, SingleNestedMessage);
      }
      return size;
    }
    public void MergeFrom(TestFieldOrderings other) {
      if (other == null) {
        return;
      }
      if (other.MyString != "") {
        MyString = other.MyString;
      }
      if (other.MyInt != 0L) {
        MyInt = other.MyInt;
      }
      if (other.MyFloat != 0F) {
        MyFloat = other.MyFloat;
      }
      if (other.singleNestedMessage_ != null) {
        if (singleNestedMessage_ == null) {
          singleNestedMessage_ = new global::Google.Protobuf.TestProtos.TestFieldOrderings.Types.NestedMessage();
        }
        SingleNestedMessage.MergeFrom(other.SingleNestedMessage);
      }
    }

    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while (input.ReadTag(out tag)) {
        switch(tag) {
          case 0:
            throw pb::InvalidProtocolBufferException.InvalidTag();
          default:
            if (pb::WireFormat.IsEndGroupTag(tag)) {
              return;
            }
            break;
          case 8: {
            myInt_ = input.ReadInt64();
            break;
          }
          case 90: {
            myString_ = input.ReadString();
            break;
          }
          case 813: {
            myFloat_ = input.ReadFloat();
            break;
          }
          case 1602: {
            if (singleNestedMessage_ == null) {
              singleNestedMessage_ = new global::Google.Protobuf.TestProtos.TestFieldOrderings.Types.NestedMessage();
            }
            input.ReadMessage(singleNestedMessage_);
            break;
          }
        }
      }
    }

    #region Nested types
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
    public static partial class Types {
      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
      public sealed partial class NestedMessage : pb::IMessage<NestedMessage>, global::System.IEquatable<NestedMessage> {
        private static readonly pb::MessageParser<NestedMessage> _parser = new pb::MessageParser<NestedMessage>(() => new NestedMessage());
        public static pb::MessageParser<NestedMessage> Parser { get { return _parser; } }

        private static readonly string[] _fieldNames = new string[] { "bb", "oo" };
        private static readonly uint[] _fieldTags = new uint[] { 8, 16 };
        public static pbd::MessageDescriptor Descriptor {
          get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_TestFieldOrderings_NestedMessage__Descriptor; }
        }

        public pb::FieldAccess.FieldAccessorTable<NestedMessage> Fields {
          get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_TestFieldOrderings_NestedMessage__FieldAccessorTable; }
        }

        public NestedMessage() { }
        public NestedMessage(NestedMessage other) {
          MergeFrom(other);
        }
        public const int OoFieldNumber = 2;
        private long oo_;
        public long Oo {
          get { return oo_; }
          set { oo_ = value; }
        }


        public const int BbFieldNumber = 1;
        private int bb_;
        public int Bb {
          get { return bb_; }
          set { bb_ = value; }
        }


        public override bool Equals(object other) {
          return Equals(other as NestedMessage);
        }

        public bool Equals(NestedMessage other) {
          if (ReferenceEquals(other, null)) {
            return false;
          }
          if (ReferenceEquals(other, this)) {
            return true;
          }
          if (Oo != other.Oo) return false;
          if (Bb != other.Bb) return false;
          return true;
        }

        public override int GetHashCode() {
          int hash = 0;
          if (Oo != 0L) hash ^= Oo.GetHashCode();
          if (Bb != 0) hash ^= Bb.GetHashCode();
          return hash;
        }

        public void WriteTo(pb::CodedOutputStream output) {
          if (Bb != 0) {
            output.WriteInt32(1, Bb);
          }
          if (Oo != 0L) {
            output.WriteInt64(2, Oo);
          }
        }

        public int CalculateSize() {
          int size = 0;
          if (Oo != 0L) {
            size += pb::CodedOutputStream.ComputeInt64Size(2, Oo);
          }
          if (Bb != 0) {
            size += pb::CodedOutputStream.ComputeInt32Size(1, Bb);
          }
          return size;
        }
        public void MergeFrom(NestedMessage other) {
          if (other == null) {
            return;
          }
          if (other.Oo != 0L) {
            Oo = other.Oo;
          }
          if (other.Bb != 0) {
            Bb = other.Bb;
          }
        }

        public void MergeFrom(pb::CodedInputStream input) {
          uint tag;
          while (input.ReadTag(out tag)) {
            switch(tag) {
              case 0:
                throw pb::InvalidProtocolBufferException.InvalidTag();
              default:
                if (pb::WireFormat.IsEndGroupTag(tag)) {
                  return;
                }
                break;
              case 8: {
                bb_ = input.ReadInt32();
                break;
              }
              case 16: {
                oo_ = input.ReadInt64();
                break;
              }
            }
          }
        }

      }

    }
    #endregion

  }

  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
  public sealed partial class SparseEnumMessage : pb::IMessage<SparseEnumMessage>, global::System.IEquatable<SparseEnumMessage> {
    private static readonly pb::MessageParser<SparseEnumMessage> _parser = new pb::MessageParser<SparseEnumMessage>(() => new SparseEnumMessage());
    public static pb::MessageParser<SparseEnumMessage> Parser { get { return _parser; } }

    private static readonly string[] _fieldNames = new string[] { "sparse_enum" };
    private static readonly uint[] _fieldTags = new uint[] { 8 };
    public static pbd::MessageDescriptor Descriptor {
      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_SparseEnumMessage__Descriptor; }
    }

    public pb::FieldAccess.FieldAccessorTable<SparseEnumMessage> Fields {
      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_SparseEnumMessage__FieldAccessorTable; }
    }

    public SparseEnumMessage() { }
    public SparseEnumMessage(SparseEnumMessage other) {
      MergeFrom(other);
    }
    public const int SparseEnumFieldNumber = 1;
    private global::Google.Protobuf.TestProtos.TestSparseEnum sparseEnum_ = global::Google.Protobuf.TestProtos.TestSparseEnum.TEST_SPARSE_ENUM_UNSPECIFIED;
    public global::Google.Protobuf.TestProtos.TestSparseEnum SparseEnum {
      get { return sparseEnum_; }
      set { sparseEnum_ = value; }
    }


    public override bool Equals(object other) {
      return Equals(other as SparseEnumMessage);
    }

    public bool Equals(SparseEnumMessage other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (SparseEnum != other.SparseEnum) return false;
      return true;
    }

    public override int GetHashCode() {
      int hash = 0;
      if (SparseEnum != global::Google.Protobuf.TestProtos.TestSparseEnum.TEST_SPARSE_ENUM_UNSPECIFIED) hash ^= SparseEnum.GetHashCode();
      return hash;
    }

    public void WriteTo(pb::CodedOutputStream output) {
      if (SparseEnum != global::Google.Protobuf.TestProtos.TestSparseEnum.TEST_SPARSE_ENUM_UNSPECIFIED) {
        output.WriteEnum(1, (int) SparseEnum);
      }
    }

    public int CalculateSize() {
      int size = 0;
      if (SparseEnum != global::Google.Protobuf.TestProtos.TestSparseEnum.TEST_SPARSE_ENUM_UNSPECIFIED) {
        size += pb::CodedOutputStream.ComputeEnumSize(1, (int) SparseEnum);
      }
      return size;
    }
    public void MergeFrom(SparseEnumMessage other) {
      if (other == null) {
        return;
      }
      if (other.SparseEnum != global::Google.Protobuf.TestProtos.TestSparseEnum.TEST_SPARSE_ENUM_UNSPECIFIED) {
        SparseEnum = other.SparseEnum;
      }
    }

    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while (input.ReadTag(out tag)) {
        switch(tag) {
          case 0:
            throw pb::InvalidProtocolBufferException.InvalidTag();
          default:
            if (pb::WireFormat.IsEndGroupTag(tag)) {
              return;
            }
            break;
          case 8: {
            sparseEnum_ = (global::Google.Protobuf.TestProtos.TestSparseEnum) input.ReadEnum();
            break;
          }
        }
      }
    }

  }

  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
  public sealed partial class OneString : pb::IMessage<OneString>, global::System.IEquatable<OneString> {
    private static readonly pb::MessageParser<OneString> _parser = new pb::MessageParser<OneString>(() => new OneString());
    public static pb::MessageParser<OneString> Parser { get { return _parser; } }

    private static readonly string[] _fieldNames = new string[] { "data" };
    private static readonly uint[] _fieldTags = new uint[] { 10 };
    public static pbd::MessageDescriptor Descriptor {
      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_OneString__Descriptor; }
    }

    public pb::FieldAccess.FieldAccessorTable<OneString> Fields {
      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_OneString__FieldAccessorTable; }
    }

    public OneString() { }
    public OneString(OneString other) {
      MergeFrom(other);
    }
    public const int DataFieldNumber = 1;
    private string data_ = "";
    public string Data {
      get { return data_; }
      set { data_ = value ?? ""; }
    }


    public override bool Equals(object other) {
      return Equals(other as OneString);
    }

    public bool Equals(OneString other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (Data != other.Data) return false;
      return true;
    }

    public override int GetHashCode() {
      int hash = 0;
      if (Data != "") hash ^= Data.GetHashCode();
      return hash;
    }

    public void WriteTo(pb::CodedOutputStream output) {
      if (Data != "") {
        output.WriteString(1, Data);
      }
    }

    public int CalculateSize() {
      int size = 0;
      if (Data != "") {
        size += pb::CodedOutputStream.ComputeStringSize(1, Data);
      }
      return size;
    }
    public void MergeFrom(OneString other) {
      if (other == null) {
        return;
      }
      if (other.Data != "") {
        Data = other.Data;
      }
    }

    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while (input.ReadTag(out tag)) {
        switch(tag) {
          case 0:
            throw pb::InvalidProtocolBufferException.InvalidTag();
          default:
            if (pb::WireFormat.IsEndGroupTag(tag)) {
              return;
            }
            break;
          case 10: {
            data_ = input.ReadString();
            break;
          }
        }
      }
    }

  }

  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
  public sealed partial class MoreString : pb::IMessage<MoreString>, global::System.IEquatable<MoreString> {
    private static readonly pb::MessageParser<MoreString> _parser = new pb::MessageParser<MoreString>(() => new MoreString());
    public static pb::MessageParser<MoreString> Parser { get { return _parser; } }

    private static readonly string[] _fieldNames = new string[] { "data" };
    private static readonly uint[] _fieldTags = new uint[] { 10 };
    public static pbd::MessageDescriptor Descriptor {
      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_MoreString__Descriptor; }
    }

    public pb::FieldAccess.FieldAccessorTable<MoreString> Fields {
      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_MoreString__FieldAccessorTable; }
    }

    public MoreString() { }
    public MoreString(MoreString other) {
      MergeFrom(other);
    }
    public const int DataFieldNumber = 1;
    private readonly pbc::RepeatedField<string> data_ = new pbc::RepeatedField<string>();
    public pbc::RepeatedField<string> Data {
      get { return data_; }
    }

    public override bool Equals(object other) {
      return Equals(other as MoreString);
    }

    public bool Equals(MoreString other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if(!data_.Equals(other.data_)) return false;
      return true;
    }

    public override int GetHashCode() {
      int hash = 0;
      hash ^= data_.GetHashCode();
      return hash;
    }

    public void WriteTo(pb::CodedOutputStream output) {
      output.WriteStringArray(1, data_);
    }

    public int CalculateSize() {
      int size = 0;
      {
        int dataSize = 0;
        foreach (string element in data_) {
          dataSize += pb::CodedOutputStream.ComputeStringSizeNoTag(element);
        }
        size += dataSize;
        size += 1 * data_.Count;
      }
      return size;
    }
    public void MergeFrom(MoreString other) {
      if (other == null) {
        return;
      }
      data_.Add(other.data_);
    }

    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while (input.ReadTag(out tag)) {
        switch(tag) {
          case 0:
            throw pb::InvalidProtocolBufferException.InvalidTag();
          default:
            if (pb::WireFormat.IsEndGroupTag(tag)) {
              return;
            }
            break;
          case 10: {
            input.ReadStringArray(tag, data_);
            break;
          }
        }
      }
    }

  }

  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
  public sealed partial class OneBytes : pb::IMessage<OneBytes>, global::System.IEquatable<OneBytes> {
    private static readonly pb::MessageParser<OneBytes> _parser = new pb::MessageParser<OneBytes>(() => new OneBytes());
    public static pb::MessageParser<OneBytes> Parser { get { return _parser; } }

    private static readonly string[] _fieldNames = new string[] { "data" };
    private static readonly uint[] _fieldTags = new uint[] { 10 };
    public static pbd::MessageDescriptor Descriptor {
      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_OneBytes__Descriptor; }
    }

    public pb::FieldAccess.FieldAccessorTable<OneBytes> Fields {
      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_OneBytes__FieldAccessorTable; }
    }

    public OneBytes() { }
    public OneBytes(OneBytes other) {
      MergeFrom(other);
    }
    public const int DataFieldNumber = 1;
    private pb::ByteString data_ = pb::ByteString.Empty;
    public pb::ByteString Data {
      get { return data_; }
      set { data_ = value ?? pb::ByteString.Empty; }
    }


    public override bool Equals(object other) {
      return Equals(other as OneBytes);
    }

    public bool Equals(OneBytes other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (Data != other.Data) return false;
      return true;
    }

    public override int GetHashCode() {
      int hash = 0;
      if (Data != pb::ByteString.Empty) hash ^= Data.GetHashCode();
      return hash;
    }

    public void WriteTo(pb::CodedOutputStream output) {
      if (Data != pb::ByteString.Empty) {
        output.WriteBytes(1, Data);
      }
    }

    public int CalculateSize() {
      int size = 0;
      if (Data != pb::ByteString.Empty) {
        size += pb::CodedOutputStream.ComputeBytesSize(1, Data);
      }
      return size;
    }
    public void MergeFrom(OneBytes other) {
      if (other == null) {
        return;
      }
      if (other.Data != pb::ByteString.Empty) {
        Data = other.Data;
      }
    }

    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while (input.ReadTag(out tag)) {
        switch(tag) {
          case 0:
            throw pb::InvalidProtocolBufferException.InvalidTag();
          default:
            if (pb::WireFormat.IsEndGroupTag(tag)) {
              return;
            }
            break;
          case 10: {
            data_ = input.ReadBytes();
            break;
          }
        }
      }
    }

  }

  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
  public sealed partial class MoreBytes : pb::IMessage<MoreBytes>, global::System.IEquatable<MoreBytes> {
    private static readonly pb::MessageParser<MoreBytes> _parser = new pb::MessageParser<MoreBytes>(() => new MoreBytes());
    public static pb::MessageParser<MoreBytes> Parser { get { return _parser; } }

    private static readonly string[] _fieldNames = new string[] { "data" };
    private static readonly uint[] _fieldTags = new uint[] { 10 };
    public static pbd::MessageDescriptor Descriptor {
      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_MoreBytes__Descriptor; }
    }

    public pb::FieldAccess.FieldAccessorTable<MoreBytes> Fields {
      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_MoreBytes__FieldAccessorTable; }
    }

    public MoreBytes() { }
    public MoreBytes(MoreBytes other) {
      MergeFrom(other);
    }
    public const int DataFieldNumber = 1;
    private pb::ByteString data_ = pb::ByteString.Empty;
    public pb::ByteString Data {
      get { return data_; }
      set { data_ = value ?? pb::ByteString.Empty; }
    }


    public override bool Equals(object other) {
      return Equals(other as MoreBytes);
    }

    public bool Equals(MoreBytes other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (Data != other.Data) return false;
      return true;
    }

    public override int GetHashCode() {
      int hash = 0;
      if (Data != pb::ByteString.Empty) hash ^= Data.GetHashCode();
      return hash;
    }

    public void WriteTo(pb::CodedOutputStream output) {
      if (Data != pb::ByteString.Empty) {
        output.WriteBytes(1, Data);
      }
    }

    public int CalculateSize() {
      int size = 0;
      if (Data != pb::ByteString.Empty) {
        size += pb::CodedOutputStream.ComputeBytesSize(1, Data);
      }
      return size;
    }
    public void MergeFrom(MoreBytes other) {
      if (other == null) {
        return;
      }
      if (other.Data != pb::ByteString.Empty) {
        Data = other.Data;
      }
    }

    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while (input.ReadTag(out tag)) {
        switch(tag) {
          case 0:
            throw pb::InvalidProtocolBufferException.InvalidTag();
          default:
            if (pb::WireFormat.IsEndGroupTag(tag)) {
              return;
            }
            break;
          case 10: {
            data_ = input.ReadBytes();
            break;
          }
        }
      }
    }

  }

  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
  public sealed partial class Int32Message : pb::IMessage<Int32Message>, global::System.IEquatable<Int32Message> {
    private static readonly pb::MessageParser<Int32Message> _parser = new pb::MessageParser<Int32Message>(() => new Int32Message());
    public static pb::MessageParser<Int32Message> Parser { get { return _parser; } }

    private static readonly string[] _fieldNames = new string[] { "data" };
    private static readonly uint[] _fieldTags = new uint[] { 8 };
    public static pbd::MessageDescriptor Descriptor {
      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_Int32Message__Descriptor; }
    }

    public pb::FieldAccess.FieldAccessorTable<Int32Message> Fields {
      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_Int32Message__FieldAccessorTable; }
    }

    public Int32Message() { }
    public Int32Message(Int32Message other) {
      MergeFrom(other);
    }
    public const int DataFieldNumber = 1;
    private int data_;
    public int Data {
      get { return data_; }
      set { data_ = value; }
    }


    public override bool Equals(object other) {
      return Equals(other as Int32Message);
    }

    public bool Equals(Int32Message other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (Data != other.Data) return false;
      return true;
    }

    public override int GetHashCode() {
      int hash = 0;
      if (Data != 0) hash ^= Data.GetHashCode();
      return hash;
    }

    public void WriteTo(pb::CodedOutputStream output) {
      if (Data != 0) {
        output.WriteInt32(1, Data);
      }
    }

    public int CalculateSize() {
      int size = 0;
      if (Data != 0) {
        size += pb::CodedOutputStream.ComputeInt32Size(1, Data);
      }
      return size;
    }
    public void MergeFrom(Int32Message other) {
      if (other == null) {
        return;
      }
      if (other.Data != 0) {
        Data = other.Data;
      }
    }

    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while (input.ReadTag(out tag)) {
        switch(tag) {
          case 0:
            throw pb::InvalidProtocolBufferException.InvalidTag();
          default:
            if (pb::WireFormat.IsEndGroupTag(tag)) {
              return;
            }
            break;
          case 8: {
            data_ = input.ReadInt32();
            break;
          }
        }
      }
    }

  }

  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
  public sealed partial class Uint32Message : pb::IMessage<Uint32Message>, global::System.IEquatable<Uint32Message> {
    private static readonly pb::MessageParser<Uint32Message> _parser = new pb::MessageParser<Uint32Message>(() => new Uint32Message());
    public static pb::MessageParser<Uint32Message> Parser { get { return _parser; } }

    private static readonly string[] _fieldNames = new string[] { "data" };
    private static readonly uint[] _fieldTags = new uint[] { 8 };
    public static pbd::MessageDescriptor Descriptor {
      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_Uint32Message__Descriptor; }
    }

    public pb::FieldAccess.FieldAccessorTable<Uint32Message> Fields {
      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_Uint32Message__FieldAccessorTable; }
    }

    public Uint32Message() { }
    public Uint32Message(Uint32Message other) {
      MergeFrom(other);
    }
    public const int DataFieldNumber = 1;
    private uint data_;
    public uint Data {
      get { return data_; }
      set { data_ = value; }
    }


    public override bool Equals(object other) {
      return Equals(other as Uint32Message);
    }

    public bool Equals(Uint32Message other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (Data != other.Data) return false;
      return true;
    }

    public override int GetHashCode() {
      int hash = 0;
      if (Data != 0) hash ^= Data.GetHashCode();
      return hash;
    }

    public void WriteTo(pb::CodedOutputStream output) {
      if (Data != 0) {
        output.WriteUInt32(1, Data);
      }
    }

    public int CalculateSize() {
      int size = 0;
      if (Data != 0) {
        size += pb::CodedOutputStream.ComputeUInt32Size(1, Data);
      }
      return size;
    }
    public void MergeFrom(Uint32Message other) {
      if (other == null) {
        return;
      }
      if (other.Data != 0) {
        Data = other.Data;
      }
    }

    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while (input.ReadTag(out tag)) {
        switch(tag) {
          case 0:
            throw pb::InvalidProtocolBufferException.InvalidTag();
          default:
            if (pb::WireFormat.IsEndGroupTag(tag)) {
              return;
            }
            break;
          case 8: {
            data_ = input.ReadUInt32();
            break;
          }
        }
      }
    }

  }

  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
  public sealed partial class Int64Message : pb::IMessage<Int64Message>, global::System.IEquatable<Int64Message> {
    private static readonly pb::MessageParser<Int64Message> _parser = new pb::MessageParser<Int64Message>(() => new Int64Message());
    public static pb::MessageParser<Int64Message> Parser { get { return _parser; } }

    private static readonly string[] _fieldNames = new string[] { "data" };
    private static readonly uint[] _fieldTags = new uint[] { 8 };
    public static pbd::MessageDescriptor Descriptor {
      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_Int64Message__Descriptor; }
    }

    public pb::FieldAccess.FieldAccessorTable<Int64Message> Fields {
      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_Int64Message__FieldAccessorTable; }
    }

    public Int64Message() { }
    public Int64Message(Int64Message other) {
      MergeFrom(other);
    }
    public const int DataFieldNumber = 1;
    private long data_;
    public long Data {
      get { return data_; }
      set { data_ = value; }
    }


    public override bool Equals(object other) {
      return Equals(other as Int64Message);
    }

    public bool Equals(Int64Message other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (Data != other.Data) return false;
      return true;
    }

    public override int GetHashCode() {
      int hash = 0;
      if (Data != 0L) hash ^= Data.GetHashCode();
      return hash;
    }

    public void WriteTo(pb::CodedOutputStream output) {
      if (Data != 0L) {
        output.WriteInt64(1, Data);
      }
    }

    public int CalculateSize() {
      int size = 0;
      if (Data != 0L) {
        size += pb::CodedOutputStream.ComputeInt64Size(1, Data);
      }
      return size;
    }
    public void MergeFrom(Int64Message other) {
      if (other == null) {
        return;
      }
      if (other.Data != 0L) {
        Data = other.Data;
      }
    }

    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while (input.ReadTag(out tag)) {
        switch(tag) {
          case 0:
            throw pb::InvalidProtocolBufferException.InvalidTag();
          default:
            if (pb::WireFormat.IsEndGroupTag(tag)) {
              return;
            }
            break;
          case 8: {
            data_ = input.ReadInt64();
            break;
          }
        }
      }
    }

  }

  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
  public sealed partial class Uint64Message : pb::IMessage<Uint64Message>, global::System.IEquatable<Uint64Message> {
    private static readonly pb::MessageParser<Uint64Message> _parser = new pb::MessageParser<Uint64Message>(() => new Uint64Message());
    public static pb::MessageParser<Uint64Message> Parser { get { return _parser; } }

    private static readonly string[] _fieldNames = new string[] { "data" };
    private static readonly uint[] _fieldTags = new uint[] { 8 };
    public static pbd::MessageDescriptor Descriptor {
      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_Uint64Message__Descriptor; }
    }

    public pb::FieldAccess.FieldAccessorTable<Uint64Message> Fields {
      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_Uint64Message__FieldAccessorTable; }
    }

    public Uint64Message() { }
    public Uint64Message(Uint64Message other) {
      MergeFrom(other);
    }
    public const int DataFieldNumber = 1;
    private ulong data_;
    public ulong Data {
      get { return data_; }
      set { data_ = value; }
    }


    public override bool Equals(object other) {
      return Equals(other as Uint64Message);
    }

    public bool Equals(Uint64Message other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (Data != other.Data) return false;
      return true;
    }

    public override int GetHashCode() {
      int hash = 0;
      if (Data != 0UL) hash ^= Data.GetHashCode();
      return hash;
    }

    public void WriteTo(pb::CodedOutputStream output) {
      if (Data != 0UL) {
        output.WriteUInt64(1, Data);
      }
    }

    public int CalculateSize() {
      int size = 0;
      if (Data != 0UL) {
        size += pb::CodedOutputStream.ComputeUInt64Size(1, Data);
      }
      return size;
    }
    public void MergeFrom(Uint64Message other) {
      if (other == null) {
        return;
      }
      if (other.Data != 0UL) {
        Data = other.Data;
      }
    }

    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while (input.ReadTag(out tag)) {
        switch(tag) {
          case 0:
            throw pb::InvalidProtocolBufferException.InvalidTag();
          default:
            if (pb::WireFormat.IsEndGroupTag(tag)) {
              return;
            }
            break;
          case 8: {
            data_ = input.ReadUInt64();
            break;
          }
        }
      }
    }

  }

  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
  public sealed partial class BoolMessage : pb::IMessage<BoolMessage>, global::System.IEquatable<BoolMessage> {
    private static readonly pb::MessageParser<BoolMessage> _parser = new pb::MessageParser<BoolMessage>(() => new BoolMessage());
    public static pb::MessageParser<BoolMessage> Parser { get { return _parser; } }

    private static readonly string[] _fieldNames = new string[] { "data" };
    private static readonly uint[] _fieldTags = new uint[] { 8 };
    public static pbd::MessageDescriptor Descriptor {
      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_BoolMessage__Descriptor; }
    }

    public pb::FieldAccess.FieldAccessorTable<BoolMessage> Fields {
      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_BoolMessage__FieldAccessorTable; }
    }

    public BoolMessage() { }
    public BoolMessage(BoolMessage other) {
      MergeFrom(other);
    }
    public const int DataFieldNumber = 1;
    private bool data_;
    public bool Data {
      get { return data_; }
      set { data_ = value; }
    }


    public override bool Equals(object other) {
      return Equals(other as BoolMessage);
    }

    public bool Equals(BoolMessage other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (Data != other.Data) return false;
      return true;
    }

    public override int GetHashCode() {
      int hash = 0;
      if (Data != false) hash ^= Data.GetHashCode();
      return hash;
    }

    public void WriteTo(pb::CodedOutputStream output) {
      if (Data != false) {
        output.WriteBool(1, Data);
      }
    }

    public int CalculateSize() {
      int size = 0;
      if (Data != false) {
        size += pb::CodedOutputStream.ComputeBoolSize(1, Data);
      }
      return size;
    }
    public void MergeFrom(BoolMessage other) {
      if (other == null) {
        return;
      }
      if (other.Data != false) {
        Data = other.Data;
      }
    }

    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while (input.ReadTag(out tag)) {
        switch(tag) {
          case 0:
            throw pb::InvalidProtocolBufferException.InvalidTag();
          default:
            if (pb::WireFormat.IsEndGroupTag(tag)) {
              return;
            }
            break;
          case 8: {
            data_ = input.ReadBool();
            break;
          }
        }
      }
    }

  }

  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
  public sealed partial class TestOneof : pb::IMessage<TestOneof>, global::System.IEquatable<TestOneof> {
    private static readonly pb::MessageParser<TestOneof> _parser = new pb::MessageParser<TestOneof>(() => new TestOneof());
    public static pb::MessageParser<TestOneof> Parser { get { return _parser; } }

    private static readonly string[] _fieldNames = new string[] { "foo_int", "foo_message", "foo_string" };
    private static readonly uint[] _fieldTags = new uint[] { 8, 26, 18 };
    public static pbd::MessageDescriptor Descriptor {
      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_TestOneof__Descriptor; }
    }

    public pb::FieldAccess.FieldAccessorTable<TestOneof> Fields {
      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_TestOneof__FieldAccessorTable; }
    }

    public TestOneof() { }
    public TestOneof(TestOneof other) {
      MergeFrom(other);
    }
    public const int FooIntFieldNumber = 1;
    public int FooInt {
      get { return fooCase_ == FooOneofCase.FooInt ? (int) foo_ : 0; }
      set {
        foo_ = value;
        fooCase_ = FooOneofCase.FooInt;
      }
    }

    public const int FooStringFieldNumber = 2;
    public string FooString {
      get { return fooCase_ == FooOneofCase.FooString ? (string) foo_ : ""; }
      set {
        foo_ = value ?? "";
        fooCase_ = value == null ? FooOneofCase.None : FooOneofCase.FooString;
      }
    }

    public const int FooMessageFieldNumber = 3;
    public global::Google.Protobuf.TestProtos.TestAllTypes FooMessage {
      get { return fooCase_ == FooOneofCase.FooMessage ? (global::Google.Protobuf.TestProtos.TestAllTypes) foo_ : null; }
      set {
        foo_ = value;
        fooCase_ = value == null ? FooOneofCase.None : FooOneofCase.FooMessage;
      }
    }

    private object foo_;
    public enum FooOneofCase {
      None = 0,
      FooInt = 1,
      FooString = 2,
      FooMessage = 3,
    }
    private FooOneofCase fooCase_ = FooOneofCase.None;
    public FooOneofCase FooCase {
      get { return fooCase_; }
    }

    public void ClearFoo() {
      fooCase_ = FooOneofCase.None;
      foo_ = null;
    }

    public override bool Equals(object other) {
      return Equals(other as TestOneof);
    }

    public bool Equals(TestOneof other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (FooInt != other.FooInt) return false;
      if (FooString != other.FooString) return false;
      if (!object.Equals(FooMessage, other.FooMessage)) return false;  return true;
    }

    public override int GetHashCode() {
      int hash = 0;
      if (fooCase_ == FooOneofCase.FooInt) hash ^= FooInt.GetHashCode();
      if (fooCase_ == FooOneofCase.FooString) hash ^= FooString.GetHashCode();
      if (fooCase_ == FooOneofCase.FooMessage) hash ^= FooMessage.GetHashCode();
      return hash;
    }

    public void WriteTo(pb::CodedOutputStream output) {
      if (fooCase_ == FooOneofCase.FooInt) {
        output.WriteInt32(1, FooInt);
      }
      if (fooCase_ == FooOneofCase.FooString) {
        output.WriteString(2, FooString);
      }
      if (fooCase_ == FooOneofCase.FooMessage) {
        output.WriteMessage(3, FooMessage);
      }
    }

    public int CalculateSize() {
      int size = 0;
      if (fooCase_ == FooOneofCase.FooInt) {
        size += pb::CodedOutputStream.ComputeInt32Size(1, FooInt);
      }
      if (fooCase_ == FooOneofCase.FooString) {
        size += pb::CodedOutputStream.ComputeStringSize(2, FooString);
      }
      if (fooCase_ == FooOneofCase.FooMessage) {
        size += pb::CodedOutputStream.ComputeMessageSize(3, FooMessage);
      }
      return size;
    }
    public void MergeFrom(TestOneof other) {
      if (other == null) {
        return;
      }
      switch (other.FooCase) {
        case FooOneofCase.FooInt:
          FooInt = other.FooInt;
          break;
        case FooOneofCase.FooString:
          FooString = other.FooString;
          break;
        case FooOneofCase.FooMessage:
          FooMessage = other.FooMessage;
          break;
      }

    }

    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while (input.ReadTag(out tag)) {
        switch(tag) {
          case 0:
            throw pb::InvalidProtocolBufferException.InvalidTag();
          default:
            if (pb::WireFormat.IsEndGroupTag(tag)) {
              return;
            }
            break;
          case 8: {
            foo_ = input.ReadInt32()
            ;fooCase_ = FooOneofCase.FooInt;
            break;
          }
          case 18: {
            foo_ = input.ReadString()
            ;fooCase_ = FooOneofCase.FooString;
            break;
          }
          case 26: {
            global::Google.Protobuf.TestProtos.TestAllTypes subBuilder = new global::Google.Protobuf.TestProtos.TestAllTypes();
            if (fooCase_ == FooOneofCase.FooMessage) {
              subBuilder.MergeFrom(FooMessage);
            }
            input.ReadMessage(subBuilder);
            FooMessage = subBuilder;
            break;
          }
        }
      }
    }

  }

  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
  public sealed partial class TestPackedTypes : pb::IMessage<TestPackedTypes>, global::System.IEquatable<TestPackedTypes> {
    private static readonly pb::MessageParser<TestPackedTypes> _parser = new pb::MessageParser<TestPackedTypes>(() => new TestPackedTypes());
    public static pb::MessageParser<TestPackedTypes> Parser { get { return _parser; } }

    private static readonly string[] _fieldNames = new string[] { "packed_bool", "packed_double", "packed_enum", "packed_fixed32", "packed_fixed64", "packed_float", "packed_int32", "packed_int64", "packed_sfixed32", "packed_sfixed64", "packed_sint32", "packed_sint64", "packed_uint32", "packed_uint64" };
    private static readonly uint[] _fieldTags = new uint[] { 818, 810, 826, 770, 778, 802, 722, 730, 786, 794, 754, 762, 738, 746 };
    public static pbd::MessageDescriptor Descriptor {
      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_TestPackedTypes__Descriptor; }
    }

    public pb::FieldAccess.FieldAccessorTable<TestPackedTypes> Fields {
      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_TestPackedTypes__FieldAccessorTable; }
    }

    public TestPackedTypes() { }
    public TestPackedTypes(TestPackedTypes other) {
      MergeFrom(other);
    }
    public const int PackedInt32FieldNumber = 90;
    private readonly pbc::RepeatedField<int> packedInt32_ = new pbc::RepeatedField<int>();
    public pbc::RepeatedField<int> PackedInt32 {
      get { return packedInt32_; }
    }

    public const int PackedInt64FieldNumber = 91;
    private readonly pbc::RepeatedField<long> packedInt64_ = new pbc::RepeatedField<long>();
    public pbc::RepeatedField<long> PackedInt64 {
      get { return packedInt64_; }
    }

    public const int PackedUint32FieldNumber = 92;
    private readonly pbc::RepeatedField<uint> packedUint32_ = new pbc::RepeatedField<uint>();
    public pbc::RepeatedField<uint> PackedUint32 {
      get { return packedUint32_; }
    }

    public const int PackedUint64FieldNumber = 93;
    private readonly pbc::RepeatedField<ulong> packedUint64_ = new pbc::RepeatedField<ulong>();
    public pbc::RepeatedField<ulong> PackedUint64 {
      get { return packedUint64_; }
    }

    public const int PackedSint32FieldNumber = 94;
    private readonly pbc::RepeatedField<int> packedSint32_ = new pbc::RepeatedField<int>();
    public pbc::RepeatedField<int> PackedSint32 {
      get { return packedSint32_; }
    }

    public const int PackedSint64FieldNumber = 95;
    private readonly pbc::RepeatedField<long> packedSint64_ = new pbc::RepeatedField<long>();
    public pbc::RepeatedField<long> PackedSint64 {
      get { return packedSint64_; }
    }

    public const int PackedFixed32FieldNumber = 96;
    private readonly pbc::RepeatedField<uint> packedFixed32_ = new pbc::RepeatedField<uint>();
    public pbc::RepeatedField<uint> PackedFixed32 {
      get { return packedFixed32_; }
    }

    public const int PackedFixed64FieldNumber = 97;
    private readonly pbc::RepeatedField<ulong> packedFixed64_ = new pbc::RepeatedField<ulong>();
    public pbc::RepeatedField<ulong> PackedFixed64 {
      get { return packedFixed64_; }
    }

    public const int PackedSfixed32FieldNumber = 98;
    private readonly pbc::RepeatedField<int> packedSfixed32_ = new pbc::RepeatedField<int>();
    public pbc::RepeatedField<int> PackedSfixed32 {
      get { return packedSfixed32_; }
    }

    public const int PackedSfixed64FieldNumber = 99;
    private readonly pbc::RepeatedField<long> packedSfixed64_ = new pbc::RepeatedField<long>();
    public pbc::RepeatedField<long> PackedSfixed64 {
      get { return packedSfixed64_; }
    }

    public const int PackedFloatFieldNumber = 100;
    private readonly pbc::RepeatedField<float> packedFloat_ = new pbc::RepeatedField<float>();
    public pbc::RepeatedField<float> PackedFloat {
      get { return packedFloat_; }
    }

    public const int PackedDoubleFieldNumber = 101;
    private readonly pbc::RepeatedField<double> packedDouble_ = new pbc::RepeatedField<double>();
    public pbc::RepeatedField<double> PackedDouble {
      get { return packedDouble_; }
    }

    public const int PackedBoolFieldNumber = 102;
    private readonly pbc::RepeatedField<bool> packedBool_ = new pbc::RepeatedField<bool>();
    public pbc::RepeatedField<bool> PackedBool {
      get { return packedBool_; }
    }

    public const int PackedEnumFieldNumber = 103;
    private readonly pbc::RepeatedField<global::Google.Protobuf.TestProtos.ForeignEnum> packedEnum_ = new pbc::RepeatedField<global::Google.Protobuf.TestProtos.ForeignEnum>();
    public pbc::RepeatedField<global::Google.Protobuf.TestProtos.ForeignEnum> PackedEnum {
      get { return packedEnum_; }
    }

    public override bool Equals(object other) {
      return Equals(other as TestPackedTypes);
    }

    public bool Equals(TestPackedTypes other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if(!packedInt32_.Equals(other.packedInt32_)) return false;
      if(!packedInt64_.Equals(other.packedInt64_)) return false;
      if(!packedUint32_.Equals(other.packedUint32_)) return false;
      if(!packedUint64_.Equals(other.packedUint64_)) return false;
      if(!packedSint32_.Equals(other.packedSint32_)) return false;
      if(!packedSint64_.Equals(other.packedSint64_)) return false;
      if(!packedFixed32_.Equals(other.packedFixed32_)) return false;
      if(!packedFixed64_.Equals(other.packedFixed64_)) return false;
      if(!packedSfixed32_.Equals(other.packedSfixed32_)) return false;
      if(!packedSfixed64_.Equals(other.packedSfixed64_)) return false;
      if(!packedFloat_.Equals(other.packedFloat_)) return false;
      if(!packedDouble_.Equals(other.packedDouble_)) return false;
      if(!packedBool_.Equals(other.packedBool_)) return false;
      if(!packedEnum_.Equals(other.packedEnum_)) return false;
      return true;
    }

    public override int GetHashCode() {
      int hash = 0;
      hash ^= packedInt32_.GetHashCode();
      hash ^= packedInt64_.GetHashCode();
      hash ^= packedUint32_.GetHashCode();
      hash ^= packedUint64_.GetHashCode();
      hash ^= packedSint32_.GetHashCode();
      hash ^= packedSint64_.GetHashCode();
      hash ^= packedFixed32_.GetHashCode();
      hash ^= packedFixed64_.GetHashCode();
      hash ^= packedSfixed32_.GetHashCode();
      hash ^= packedSfixed64_.GetHashCode();
      hash ^= packedFloat_.GetHashCode();
      hash ^= packedDouble_.GetHashCode();
      hash ^= packedBool_.GetHashCode();
      hash ^= packedEnum_.GetHashCode();
      return hash;
    }

    public void WriteTo(pb::CodedOutputStream output) {
      output.WritePackedInt32Array(90, packedInt32_);
      output.WritePackedInt64Array(91, packedInt64_);
      output.WritePackedUInt32Array(92, packedUint32_);
      output.WritePackedUInt64Array(93, packedUint64_);
      output.WritePackedSInt32Array(94, packedSint32_);
      output.WritePackedSInt64Array(95, packedSint64_);
      output.WritePackedFixed32Array(96, packedFixed32_);
      output.WritePackedFixed64Array(97, packedFixed64_);
      output.WritePackedSFixed32Array(98, packedSfixed32_);
      output.WritePackedSFixed64Array(99, packedSfixed64_);
      output.WritePackedFloatArray(100, packedFloat_);
      output.WritePackedDoubleArray(101, packedDouble_);
      output.WritePackedBoolArray(102, packedBool_);
      output.WritePackedEnumArray(103, packedEnum_);
    }

    public int CalculateSize() {
      int size = 0;
      {
        int dataSize = 0;
        foreach (int element in packedInt32_) {
          dataSize += pb::CodedOutputStream.ComputeInt32SizeNoTag(element);
        }
        size += dataSize;
        if (packedInt32_.Count != 0) {
          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
        }
      }
      {
        int dataSize = 0;
        foreach (long element in packedInt64_) {
          dataSize += pb::CodedOutputStream.ComputeInt64SizeNoTag(element);
        }
        size += dataSize;
        if (packedInt64_.Count != 0) {
          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
        }
      }
      {
        int dataSize = 0;
        foreach (uint element in packedUint32_) {
          dataSize += pb::CodedOutputStream.ComputeUInt32SizeNoTag(element);
        }
        size += dataSize;
        if (packedUint32_.Count != 0) {
          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
        }
      }
      {
        int dataSize = 0;
        foreach (ulong element in packedUint64_) {
          dataSize += pb::CodedOutputStream.ComputeUInt64SizeNoTag(element);
        }
        size += dataSize;
        if (packedUint64_.Count != 0) {
          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
        }
      }
      {
        int dataSize = 0;
        foreach (int element in packedSint32_) {
          dataSize += pb::CodedOutputStream.ComputeSInt32SizeNoTag(element);
        }
        size += dataSize;
        if (packedSint32_.Count != 0) {
          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
        }
      }
      {
        int dataSize = 0;
        foreach (long element in packedSint64_) {
          dataSize += pb::CodedOutputStream.ComputeSInt64SizeNoTag(element);
        }
        size += dataSize;
        if (packedSint64_.Count != 0) {
          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
        }
      }
      {
        int dataSize = 0;
        dataSize = 4 * packedFixed32_.Count;
        size += dataSize;
        if (packedFixed32_.Count != 0) {
          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
        }
      }
      {
        int dataSize = 0;
        dataSize = 8 * packedFixed64_.Count;
        size += dataSize;
        if (packedFixed64_.Count != 0) {
          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
        }
      }
      {
        int dataSize = 0;
        dataSize = 4 * packedSfixed32_.Count;
        size += dataSize;
        if (packedSfixed32_.Count != 0) {
          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
        }
      }
      {
        int dataSize = 0;
        dataSize = 8 * packedSfixed64_.Count;
        size += dataSize;
        if (packedSfixed64_.Count != 0) {
          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
        }
      }
      {
        int dataSize = 0;
        dataSize = 4 * packedFloat_.Count;
        size += dataSize;
        if (packedFloat_.Count != 0) {
          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
        }
      }
      {
        int dataSize = 0;
        dataSize = 8 * packedDouble_.Count;
        size += dataSize;
        if (packedDouble_.Count != 0) {
          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
        }
      }
      {
        int dataSize = 0;
        dataSize = 1 * packedBool_.Count;
        size += dataSize;
        if (packedBool_.Count != 0) {
          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
        }
      }
      {
        int dataSize = 0;
        if (packedEnum_.Count > 0) {
          foreach (global::Google.Protobuf.TestProtos.ForeignEnum element in packedEnum_) {
            dataSize += pb::CodedOutputStream.ComputeEnumSizeNoTag((int) element);
          }
          size += dataSize;
          size += 2;
          size += pb::CodedOutputStream.ComputeRawVarint32Size((uint) dataSize);
        }
      }
      return size;
    }
    public void MergeFrom(TestPackedTypes other) {
      if (other == null) {
        return;
      }
      packedInt32_.Add(other.packedInt32_);
      packedInt64_.Add(other.packedInt64_);
      packedUint32_.Add(other.packedUint32_);
      packedUint64_.Add(other.packedUint64_);
      packedSint32_.Add(other.packedSint32_);
      packedSint64_.Add(other.packedSint64_);
      packedFixed32_.Add(other.packedFixed32_);
      packedFixed64_.Add(other.packedFixed64_);
      packedSfixed32_.Add(other.packedSfixed32_);
      packedSfixed64_.Add(other.packedSfixed64_);
      packedFloat_.Add(other.packedFloat_);
      packedDouble_.Add(other.packedDouble_);
      packedBool_.Add(other.packedBool_);
      packedEnum_.Add(other.packedEnum_);
    }

    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while (input.ReadTag(out tag)) {
        switch(tag) {
          case 0:
            throw pb::InvalidProtocolBufferException.InvalidTag();
          default:
            if (pb::WireFormat.IsEndGroupTag(tag)) {
              return;
            }
            break;
          case 722:
          case 720: {
            input.ReadInt32Array(tag, packedInt32_);
            break;
          }
          case 730:
          case 728: {
            input.ReadInt64Array(tag, packedInt64_);
            break;
          }
          case 738:
          case 736: {
            input.ReadUInt32Array(tag, packedUint32_);
            break;
          }
          case 746:
          case 744: {
            input.ReadUInt64Array(tag, packedUint64_);
            break;
          }
          case 754:
          case 752: {
            input.ReadSInt32Array(tag, packedSint32_);
            break;
          }
          case 762:
          case 760: {
            input.ReadSInt64Array(tag, packedSint64_);
            break;
          }
          case 770:
          case 773: {
            input.ReadFixed32Array(tag, packedFixed32_);
            break;
          }
          case 778:
          case 777: {
            input.ReadFixed64Array(tag, packedFixed64_);
            break;
          }
          case 786:
          case 789: {
            input.ReadSFixed32Array(tag, packedSfixed32_);
            break;
          }
          case 794:
          case 793: {
            input.ReadSFixed64Array(tag, packedSfixed64_);
            break;
          }
          case 802:
          case 805: {
            input.ReadFloatArray(tag, packedFloat_);
            break;
          }
          case 810:
          case 809: {
            input.ReadDoubleArray(tag, packedDouble_);
            break;
          }
          case 818:
          case 816: {
            input.ReadBoolArray(tag, packedBool_);
            break;
          }
          case 826:
          case 824: {
            input.ReadEnumArray<global::Google.Protobuf.TestProtos.ForeignEnum>(tag, packedEnum_);
            break;
          }
        }
      }
    }

  }

  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
  public sealed partial class TestUnpackedTypes : pb::IMessage<TestUnpackedTypes>, global::System.IEquatable<TestUnpackedTypes> {
    private static readonly pb::MessageParser<TestUnpackedTypes> _parser = new pb::MessageParser<TestUnpackedTypes>(() => new TestUnpackedTypes());
    public static pb::MessageParser<TestUnpackedTypes> Parser { get { return _parser; } }

    private static readonly string[] _fieldNames = new string[] { "unpacked_bool", "unpacked_double", "unpacked_enum", "unpacked_fixed32", "unpacked_fixed64", "unpacked_float", "unpacked_int32", "unpacked_int64", "unpacked_sfixed32", "unpacked_sfixed64", "unpacked_sint32", "unpacked_sint64", "unpacked_uint32", "unpacked_uint64" };
    private static readonly uint[] _fieldTags = new uint[] { 816, 809, 824, 773, 777, 805, 720, 728, 789, 793, 752, 760, 736, 744 };
    public static pbd::MessageDescriptor Descriptor {
      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_TestUnpackedTypes__Descriptor; }
    }

    public pb::FieldAccess.FieldAccessorTable<TestUnpackedTypes> Fields {
      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_TestUnpackedTypes__FieldAccessorTable; }
    }

    public TestUnpackedTypes() { }
    public TestUnpackedTypes(TestUnpackedTypes other) {
      MergeFrom(other);
    }
    public const int UnpackedInt32FieldNumber = 90;
    private readonly pbc::RepeatedField<int> unpackedInt32_ = new pbc::RepeatedField<int>();
    public pbc::RepeatedField<int> UnpackedInt32 {
      get { return unpackedInt32_; }
    }

    public const int UnpackedInt64FieldNumber = 91;
    private readonly pbc::RepeatedField<long> unpackedInt64_ = new pbc::RepeatedField<long>();
    public pbc::RepeatedField<long> UnpackedInt64 {
      get { return unpackedInt64_; }
    }

    public const int UnpackedUint32FieldNumber = 92;
    private readonly pbc::RepeatedField<uint> unpackedUint32_ = new pbc::RepeatedField<uint>();
    public pbc::RepeatedField<uint> UnpackedUint32 {
      get { return unpackedUint32_; }
    }

    public const int UnpackedUint64FieldNumber = 93;
    private readonly pbc::RepeatedField<ulong> unpackedUint64_ = new pbc::RepeatedField<ulong>();
    public pbc::RepeatedField<ulong> UnpackedUint64 {
      get { return unpackedUint64_; }
    }

    public const int UnpackedSint32FieldNumber = 94;
    private readonly pbc::RepeatedField<int> unpackedSint32_ = new pbc::RepeatedField<int>();
    public pbc::RepeatedField<int> UnpackedSint32 {
      get { return unpackedSint32_; }
    }

    public const int UnpackedSint64FieldNumber = 95;
    private readonly pbc::RepeatedField<long> unpackedSint64_ = new pbc::RepeatedField<long>();
    public pbc::RepeatedField<long> UnpackedSint64 {
      get { return unpackedSint64_; }
    }

    public const int UnpackedFixed32FieldNumber = 96;
    private readonly pbc::RepeatedField<uint> unpackedFixed32_ = new pbc::RepeatedField<uint>();
    public pbc::RepeatedField<uint> UnpackedFixed32 {
      get { return unpackedFixed32_; }
    }

    public const int UnpackedFixed64FieldNumber = 97;
    private readonly pbc::RepeatedField<ulong> unpackedFixed64_ = new pbc::RepeatedField<ulong>();
    public pbc::RepeatedField<ulong> UnpackedFixed64 {
      get { return unpackedFixed64_; }
    }

    public const int UnpackedSfixed32FieldNumber = 98;
    private readonly pbc::RepeatedField<int> unpackedSfixed32_ = new pbc::RepeatedField<int>();
    public pbc::RepeatedField<int> UnpackedSfixed32 {
      get { return unpackedSfixed32_; }
    }

    public const int UnpackedSfixed64FieldNumber = 99;
    private readonly pbc::RepeatedField<long> unpackedSfixed64_ = new pbc::RepeatedField<long>();
    public pbc::RepeatedField<long> UnpackedSfixed64 {
      get { return unpackedSfixed64_; }
    }

    public const int UnpackedFloatFieldNumber = 100;
    private readonly pbc::RepeatedField<float> unpackedFloat_ = new pbc::RepeatedField<float>();
    public pbc::RepeatedField<float> UnpackedFloat {
      get { return unpackedFloat_; }
    }

    public const int UnpackedDoubleFieldNumber = 101;
    private readonly pbc::RepeatedField<double> unpackedDouble_ = new pbc::RepeatedField<double>();
    public pbc::RepeatedField<double> UnpackedDouble {
      get { return unpackedDouble_; }
    }

    public const int UnpackedBoolFieldNumber = 102;
    private readonly pbc::RepeatedField<bool> unpackedBool_ = new pbc::RepeatedField<bool>();
    public pbc::RepeatedField<bool> UnpackedBool {
      get { return unpackedBool_; }
    }

    public const int UnpackedEnumFieldNumber = 103;
    private readonly pbc::RepeatedField<global::Google.Protobuf.TestProtos.ForeignEnum> unpackedEnum_ = new pbc::RepeatedField<global::Google.Protobuf.TestProtos.ForeignEnum>();
    public pbc::RepeatedField<global::Google.Protobuf.TestProtos.ForeignEnum> UnpackedEnum {
      get { return unpackedEnum_; }
    }

    public override bool Equals(object other) {
      return Equals(other as TestUnpackedTypes);
    }

    public bool Equals(TestUnpackedTypes other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if(!unpackedInt32_.Equals(other.unpackedInt32_)) return false;
      if(!unpackedInt64_.Equals(other.unpackedInt64_)) return false;
      if(!unpackedUint32_.Equals(other.unpackedUint32_)) return false;
      if(!unpackedUint64_.Equals(other.unpackedUint64_)) return false;
      if(!unpackedSint32_.Equals(other.unpackedSint32_)) return false;
      if(!unpackedSint64_.Equals(other.unpackedSint64_)) return false;
      if(!unpackedFixed32_.Equals(other.unpackedFixed32_)) return false;
      if(!unpackedFixed64_.Equals(other.unpackedFixed64_)) return false;
      if(!unpackedSfixed32_.Equals(other.unpackedSfixed32_)) return false;
      if(!unpackedSfixed64_.Equals(other.unpackedSfixed64_)) return false;
      if(!unpackedFloat_.Equals(other.unpackedFloat_)) return false;
      if(!unpackedDouble_.Equals(other.unpackedDouble_)) return false;
      if(!unpackedBool_.Equals(other.unpackedBool_)) return false;
      if(!unpackedEnum_.Equals(other.unpackedEnum_)) return false;
      return true;
    }

    public override int GetHashCode() {
      int hash = 0;
      hash ^= unpackedInt32_.GetHashCode();
      hash ^= unpackedInt64_.GetHashCode();
      hash ^= unpackedUint32_.GetHashCode();
      hash ^= unpackedUint64_.GetHashCode();
      hash ^= unpackedSint32_.GetHashCode();
      hash ^= unpackedSint64_.GetHashCode();
      hash ^= unpackedFixed32_.GetHashCode();
      hash ^= unpackedFixed64_.GetHashCode();
      hash ^= unpackedSfixed32_.GetHashCode();
      hash ^= unpackedSfixed64_.GetHashCode();
      hash ^= unpackedFloat_.GetHashCode();
      hash ^= unpackedDouble_.GetHashCode();
      hash ^= unpackedBool_.GetHashCode();
      hash ^= unpackedEnum_.GetHashCode();
      return hash;
    }

    public void WriteTo(pb::CodedOutputStream output) {
      output.WriteInt32Array(90, unpackedInt32_);
      output.WriteInt64Array(91, unpackedInt64_);
      output.WriteUInt32Array(92, unpackedUint32_);
      output.WriteUInt64Array(93, unpackedUint64_);
      output.WriteSInt32Array(94, unpackedSint32_);
      output.WriteSInt64Array(95, unpackedSint64_);
      output.WriteFixed32Array(96, unpackedFixed32_);
      output.WriteFixed64Array(97, unpackedFixed64_);
      output.WriteSFixed32Array(98, unpackedSfixed32_);
      output.WriteSFixed64Array(99, unpackedSfixed64_);
      output.WriteFloatArray(100, unpackedFloat_);
      output.WriteDoubleArray(101, unpackedDouble_);
      output.WriteBoolArray(102, unpackedBool_);
      output.WriteEnumArray(103, unpackedEnum_);
    }

    public int CalculateSize() {
      int size = 0;
      {
        int dataSize = 0;
        foreach (int element in unpackedInt32_) {
          dataSize += pb::CodedOutputStream.ComputeInt32SizeNoTag(element);
        }
        size += dataSize;
        size += 2 * unpackedInt32_.Count;
      }
      {
        int dataSize = 0;
        foreach (long element in unpackedInt64_) {
          dataSize += pb::CodedOutputStream.ComputeInt64SizeNoTag(element);
        }
        size += dataSize;
        size += 2 * unpackedInt64_.Count;
      }
      {
        int dataSize = 0;
        foreach (uint element in unpackedUint32_) {
          dataSize += pb::CodedOutputStream.ComputeUInt32SizeNoTag(element);
        }
        size += dataSize;
        size += 2 * unpackedUint32_.Count;
      }
      {
        int dataSize = 0;
        foreach (ulong element in unpackedUint64_) {
          dataSize += pb::CodedOutputStream.ComputeUInt64SizeNoTag(element);
        }
        size += dataSize;
        size += 2 * unpackedUint64_.Count;
      }
      {
        int dataSize = 0;
        foreach (int element in unpackedSint32_) {
          dataSize += pb::CodedOutputStream.ComputeSInt32SizeNoTag(element);
        }
        size += dataSize;
        size += 2 * unpackedSint32_.Count;
      }
      {
        int dataSize = 0;
        foreach (long element in unpackedSint64_) {
          dataSize += pb::CodedOutputStream.ComputeSInt64SizeNoTag(element);
        }
        size += dataSize;
        size += 2 * unpackedSint64_.Count;
      }
      {
        int dataSize = 0;
        dataSize = 4 * unpackedFixed32_.Count;
        size += dataSize;
        size += 2 * unpackedFixed32_.Count;
      }
      {
        int dataSize = 0;
        dataSize = 8 * unpackedFixed64_.Count;
        size += dataSize;
        size += 2 * unpackedFixed64_.Count;
      }
      {
        int dataSize = 0;
        dataSize = 4 * unpackedSfixed32_.Count;
        size += dataSize;
        size += 2 * unpackedSfixed32_.Count;
      }
      {
        int dataSize = 0;
        dataSize = 8 * unpackedSfixed64_.Count;
        size += dataSize;
        size += 2 * unpackedSfixed64_.Count;
      }
      {
        int dataSize = 0;
        dataSize = 4 * unpackedFloat_.Count;
        size += dataSize;
        size += 2 * unpackedFloat_.Count;
      }
      {
        int dataSize = 0;
        dataSize = 8 * unpackedDouble_.Count;
        size += dataSize;
        size += 2 * unpackedDouble_.Count;
      }
      {
        int dataSize = 0;
        dataSize = 1 * unpackedBool_.Count;
        size += dataSize;
        size += 2 * unpackedBool_.Count;
      }
      {
        int dataSize = 0;
        if (unpackedEnum_.Count > 0) {
          foreach (global::Google.Protobuf.TestProtos.ForeignEnum element in unpackedEnum_) {
            dataSize += pb::CodedOutputStream.ComputeEnumSizeNoTag((int) element);
          }
          size += dataSize;
          size += 2 * unpackedEnum_.Count;
        }
      }
      return size;
    }
    public void MergeFrom(TestUnpackedTypes other) {
      if (other == null) {
        return;
      }
      unpackedInt32_.Add(other.unpackedInt32_);
      unpackedInt64_.Add(other.unpackedInt64_);
      unpackedUint32_.Add(other.unpackedUint32_);
      unpackedUint64_.Add(other.unpackedUint64_);
      unpackedSint32_.Add(other.unpackedSint32_);
      unpackedSint64_.Add(other.unpackedSint64_);
      unpackedFixed32_.Add(other.unpackedFixed32_);
      unpackedFixed64_.Add(other.unpackedFixed64_);
      unpackedSfixed32_.Add(other.unpackedSfixed32_);
      unpackedSfixed64_.Add(other.unpackedSfixed64_);
      unpackedFloat_.Add(other.unpackedFloat_);
      unpackedDouble_.Add(other.unpackedDouble_);
      unpackedBool_.Add(other.unpackedBool_);
      unpackedEnum_.Add(other.unpackedEnum_);
    }

    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while (input.ReadTag(out tag)) {
        switch(tag) {
          case 0:
            throw pb::InvalidProtocolBufferException.InvalidTag();
          default:
            if (pb::WireFormat.IsEndGroupTag(tag)) {
              return;
            }
            break;
          case 722:
          case 720: {
            input.ReadInt32Array(tag, unpackedInt32_);
            break;
          }
          case 730:
          case 728: {
            input.ReadInt64Array(tag, unpackedInt64_);
            break;
          }
          case 738:
          case 736: {
            input.ReadUInt32Array(tag, unpackedUint32_);
            break;
          }
          case 746:
          case 744: {
            input.ReadUInt64Array(tag, unpackedUint64_);
            break;
          }
          case 754:
          case 752: {
            input.ReadSInt32Array(tag, unpackedSint32_);
            break;
          }
          case 762:
          case 760: {
            input.ReadSInt64Array(tag, unpackedSint64_);
            break;
          }
          case 770:
          case 773: {
            input.ReadFixed32Array(tag, unpackedFixed32_);
            break;
          }
          case 778:
          case 777: {
            input.ReadFixed64Array(tag, unpackedFixed64_);
            break;
          }
          case 786:
          case 789: {
            input.ReadSFixed32Array(tag, unpackedSfixed32_);
            break;
          }
          case 794:
          case 793: {
            input.ReadSFixed64Array(tag, unpackedSfixed64_);
            break;
          }
          case 802:
          case 805: {
            input.ReadFloatArray(tag, unpackedFloat_);
            break;
          }
          case 810:
          case 809: {
            input.ReadDoubleArray(tag, unpackedDouble_);
            break;
          }
          case 818:
          case 816: {
            input.ReadBoolArray(tag, unpackedBool_);
            break;
          }
          case 826:
          case 824: {
            input.ReadEnumArray<global::Google.Protobuf.TestProtos.ForeignEnum>(tag, unpackedEnum_);
            break;
          }
        }
      }
    }

  }

  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
  public sealed partial class TestRepeatedScalarDifferentTagSizes : pb::IMessage<TestRepeatedScalarDifferentTagSizes>, global::System.IEquatable<TestRepeatedScalarDifferentTagSizes> {
    private static readonly pb::MessageParser<TestRepeatedScalarDifferentTagSizes> _parser = new pb::MessageParser<TestRepeatedScalarDifferentTagSizes>(() => new TestRepeatedScalarDifferentTagSizes());
    public static pb::MessageParser<TestRepeatedScalarDifferentTagSizes> Parser { get { return _parser; } }

    private static readonly string[] _fieldNames = new string[] { "repeated_fixed32", "repeated_fixed64", "repeated_float", "repeated_int32", "repeated_int64", "repeated_uint64" };
    private static readonly uint[] _fieldTags = new uint[] { 101, 16369, 2097141, 104, 16376, 2097144 };
    public static pbd::MessageDescriptor Descriptor {
      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_TestRepeatedScalarDifferentTagSizes__Descriptor; }
    }

    public pb::FieldAccess.FieldAccessorTable<TestRepeatedScalarDifferentTagSizes> Fields {
      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_TestRepeatedScalarDifferentTagSizes__FieldAccessorTable; }
    }

    public TestRepeatedScalarDifferentTagSizes() { }
    public TestRepeatedScalarDifferentTagSizes(TestRepeatedScalarDifferentTagSizes other) {
      MergeFrom(other);
    }
    public const int RepeatedFixed32FieldNumber = 12;
    private readonly pbc::RepeatedField<uint> repeatedFixed32_ = new pbc::RepeatedField<uint>();
    public pbc::RepeatedField<uint> RepeatedFixed32 {
      get { return repeatedFixed32_; }
    }

    public const int RepeatedInt32FieldNumber = 13;
    private readonly pbc::RepeatedField<int> repeatedInt32_ = new pbc::RepeatedField<int>();
    public pbc::RepeatedField<int> RepeatedInt32 {
      get { return repeatedInt32_; }
    }

    public const int RepeatedFixed64FieldNumber = 2046;
    private readonly pbc::RepeatedField<ulong> repeatedFixed64_ = new pbc::RepeatedField<ulong>();
    public pbc::RepeatedField<ulong> RepeatedFixed64 {
      get { return repeatedFixed64_; }
    }

    public const int RepeatedInt64FieldNumber = 2047;
    private readonly pbc::RepeatedField<long> repeatedInt64_ = new pbc::RepeatedField<long>();
    public pbc::RepeatedField<long> RepeatedInt64 {
      get { return repeatedInt64_; }
    }

    public const int RepeatedFloatFieldNumber = 262142;
    private readonly pbc::RepeatedField<float> repeatedFloat_ = new pbc::RepeatedField<float>();
    public pbc::RepeatedField<float> RepeatedFloat {
      get { return repeatedFloat_; }
    }

    public const int RepeatedUint64FieldNumber = 262143;
    private readonly pbc::RepeatedField<ulong> repeatedUint64_ = new pbc::RepeatedField<ulong>();
    public pbc::RepeatedField<ulong> RepeatedUint64 {
      get { return repeatedUint64_; }
    }

    public override bool Equals(object other) {
      return Equals(other as TestRepeatedScalarDifferentTagSizes);
    }

    public bool Equals(TestRepeatedScalarDifferentTagSizes other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if(!repeatedFixed32_.Equals(other.repeatedFixed32_)) return false;
      if(!repeatedInt32_.Equals(other.repeatedInt32_)) return false;
      if(!repeatedFixed64_.Equals(other.repeatedFixed64_)) return false;
      if(!repeatedInt64_.Equals(other.repeatedInt64_)) return false;
      if(!repeatedFloat_.Equals(other.repeatedFloat_)) return false;
      if(!repeatedUint64_.Equals(other.repeatedUint64_)) return false;
      return true;
    }

    public override int GetHashCode() {
      int hash = 0;
      hash ^= repeatedFixed32_.GetHashCode();
      hash ^= repeatedInt32_.GetHashCode();
      hash ^= repeatedFixed64_.GetHashCode();
      hash ^= repeatedInt64_.GetHashCode();
      hash ^= repeatedFloat_.GetHashCode();
      hash ^= repeatedUint64_.GetHashCode();
      return hash;
    }

    public void WriteTo(pb::CodedOutputStream output) {
      output.WritePackedFixed32Array(12, repeatedFixed32_);
      output.WritePackedInt32Array(13, repeatedInt32_);
      output.WritePackedFixed64Array(2046, repeatedFixed64_);
      output.WritePackedInt64Array(2047, repeatedInt64_);
      output.WritePackedFloatArray(262142, repeatedFloat_);
      output.WritePackedUInt64Array(262143, repeatedUint64_);
    }

    public int CalculateSize() {
      int size = 0;
      {
        int dataSize = 0;
        dataSize = 4 * repeatedFixed32_.Count;
        size += dataSize;
        if (repeatedFixed32_.Count != 0) {
          size += 1 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
        }
      }
      {
        int dataSize = 0;
        foreach (int element in repeatedInt32_) {
          dataSize += pb::CodedOutputStream.ComputeInt32SizeNoTag(element);
        }
        size += dataSize;
        if (repeatedInt32_.Count != 0) {
          size += 1 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
        }
      }
      {
        int dataSize = 0;
        dataSize = 8 * repeatedFixed64_.Count;
        size += dataSize;
        if (repeatedFixed64_.Count != 0) {
          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
        }
      }
      {
        int dataSize = 0;
        foreach (long element in repeatedInt64_) {
          dataSize += pb::CodedOutputStream.ComputeInt64SizeNoTag(element);
        }
        size += dataSize;
        if (repeatedInt64_.Count != 0) {
          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
        }
      }
      {
        int dataSize = 0;
        dataSize = 4 * repeatedFloat_.Count;
        size += dataSize;
        if (repeatedFloat_.Count != 0) {
          size += 3 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
        }
      }
      {
        int dataSize = 0;
        foreach (ulong element in repeatedUint64_) {
          dataSize += pb::CodedOutputStream.ComputeUInt64SizeNoTag(element);
        }
        size += dataSize;
        if (repeatedUint64_.Count != 0) {
          size += 3 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
        }
      }
      return size;
    }
    public void MergeFrom(TestRepeatedScalarDifferentTagSizes other) {
      if (other == null) {
        return;
      }
      repeatedFixed32_.Add(other.repeatedFixed32_);
      repeatedInt32_.Add(other.repeatedInt32_);
      repeatedFixed64_.Add(other.repeatedFixed64_);
      repeatedInt64_.Add(other.repeatedInt64_);
      repeatedFloat_.Add(other.repeatedFloat_);
      repeatedUint64_.Add(other.repeatedUint64_);
    }

    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while (input.ReadTag(out tag)) {
        switch(tag) {
          case 0:
            throw pb::InvalidProtocolBufferException.InvalidTag();
          default:
            if (pb::WireFormat.IsEndGroupTag(tag)) {
              return;
            }
            break;
          case 98:
          case 101: {
            input.ReadFixed32Array(tag, repeatedFixed32_);
            break;
          }
          case 106:
          case 104: {
            input.ReadInt32Array(tag, repeatedInt32_);
            break;
          }
          case 16370:
          case 16369: {
            input.ReadFixed64Array(tag, repeatedFixed64_);
            break;
          }
          case 16378:
          case 16376: {
            input.ReadInt64Array(tag, repeatedInt64_);
            break;
          }
          case 2097138:
          case 2097141: {
            input.ReadFloatArray(tag, repeatedFloat_);
            break;
          }
          case 2097146:
          case 2097144: {
            input.ReadUInt64Array(tag, repeatedUint64_);
            break;
          }
        }
      }
    }

  }

  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
  public sealed partial class TestCommentInjectionMessage : pb::IMessage<TestCommentInjectionMessage>, global::System.IEquatable<TestCommentInjectionMessage> {
    private static readonly pb::MessageParser<TestCommentInjectionMessage> _parser = new pb::MessageParser<TestCommentInjectionMessage>(() => new TestCommentInjectionMessage());
    public static pb::MessageParser<TestCommentInjectionMessage> Parser { get { return _parser; } }

    private static readonly string[] _fieldNames = new string[] { "a" };
    private static readonly uint[] _fieldTags = new uint[] { 10 };
    public static pbd::MessageDescriptor Descriptor {
      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_TestCommentInjectionMessage__Descriptor; }
    }

    public pb::FieldAccess.FieldAccessorTable<TestCommentInjectionMessage> Fields {
      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_TestCommentInjectionMessage__FieldAccessorTable; }
    }

    public TestCommentInjectionMessage() { }
    public TestCommentInjectionMessage(TestCommentInjectionMessage other) {
      MergeFrom(other);
    }
    public const int AFieldNumber = 1;
    private string a_ = "";
    public string A {
      get { return a_; }
      set { a_ = value ?? ""; }
    }


    public override bool Equals(object other) {
      return Equals(other as TestCommentInjectionMessage);
    }

    public bool Equals(TestCommentInjectionMessage other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (A != other.A) return false;
      return true;
    }

    public override int GetHashCode() {
      int hash = 0;
      if (A != "") hash ^= A.GetHashCode();
      return hash;
    }

    public void WriteTo(pb::CodedOutputStream output) {
      if (A != "") {
        output.WriteString(1, A);
      }
    }

    public int CalculateSize() {
      int size = 0;
      if (A != "") {
        size += pb::CodedOutputStream.ComputeStringSize(1, A);
      }
      return size;
    }
    public void MergeFrom(TestCommentInjectionMessage other) {
      if (other == null) {
        return;
      }
      if (other.A != "") {
        A = other.A;
      }
    }

    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while (input.ReadTag(out tag)) {
        switch(tag) {
          case 0:
            throw pb::InvalidProtocolBufferException.InvalidTag();
          default:
            if (pb::WireFormat.IsEndGroupTag(tag)) {
              return;
            }
            break;
          case 10: {
            a_ = input.ReadString();
            break;
          }
        }
      }
    }

  }

  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
  public sealed partial class FooRequest : pb::IMessage<FooRequest>, global::System.IEquatable<FooRequest> {
    private static readonly pb::MessageParser<FooRequest> _parser = new pb::MessageParser<FooRequest>(() => new FooRequest());
    public static pb::MessageParser<FooRequest> Parser { get { return _parser; } }

    private static readonly string[] _fieldNames = new string[] {  };
    private static readonly uint[] _fieldTags = new uint[] {  };
    public static pbd::MessageDescriptor Descriptor {
      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_FooRequest__Descriptor; }
    }

    public pb::FieldAccess.FieldAccessorTable<FooRequest> Fields {
      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_FooRequest__FieldAccessorTable; }
    }

    public FooRequest() { }
    public FooRequest(FooRequest other) {
      MergeFrom(other);
    }
    public override bool Equals(object other) {
      return Equals(other as FooRequest);
    }

    public bool Equals(FooRequest other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      return true;
    }

    public override int GetHashCode() {
      int hash = 0;
      return hash;
    }

    public void WriteTo(pb::CodedOutputStream output) {
    }

    public int CalculateSize() {
      int size = 0;
      return size;
    }
    public void MergeFrom(FooRequest other) {
      if (other == null) {
        return;
      }
    }

    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while (input.ReadTag(out tag)) {
        switch(tag) {
          case 0:
            throw pb::InvalidProtocolBufferException.InvalidTag();
          default:
            if (pb::WireFormat.IsEndGroupTag(tag)) {
              return;
            }
            break;
        }
      }
    }

  }

  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
  public sealed partial class FooResponse : pb::IMessage<FooResponse>, global::System.IEquatable<FooResponse> {
    private static readonly pb::MessageParser<FooResponse> _parser = new pb::MessageParser<FooResponse>(() => new FooResponse());
    public static pb::MessageParser<FooResponse> Parser { get { return _parser; } }

    private static readonly string[] _fieldNames = new string[] {  };
    private static readonly uint[] _fieldTags = new uint[] {  };
    public static pbd::MessageDescriptor Descriptor {
      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_FooResponse__Descriptor; }
    }

    public pb::FieldAccess.FieldAccessorTable<FooResponse> Fields {
      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_FooResponse__FieldAccessorTable; }
    }

    public FooResponse() { }
    public FooResponse(FooResponse other) {
      MergeFrom(other);
    }
    public override bool Equals(object other) {
      return Equals(other as FooResponse);
    }

    public bool Equals(FooResponse other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      return true;
    }

    public override int GetHashCode() {
      int hash = 0;
      return hash;
    }

    public void WriteTo(pb::CodedOutputStream output) {
    }

    public int CalculateSize() {
      int size = 0;
      return size;
    }
    public void MergeFrom(FooResponse other) {
      if (other == null) {
        return;
      }
    }

    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while (input.ReadTag(out tag)) {
        switch(tag) {
          case 0:
            throw pb::InvalidProtocolBufferException.InvalidTag();
          default:
            if (pb::WireFormat.IsEndGroupTag(tag)) {
              return;
            }
            break;
        }
      }
    }

  }

  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
  public sealed partial class FooClientMessage : pb::IMessage<FooClientMessage>, global::System.IEquatable<FooClientMessage> {
    private static readonly pb::MessageParser<FooClientMessage> _parser = new pb::MessageParser<FooClientMessage>(() => new FooClientMessage());
    public static pb::MessageParser<FooClientMessage> Parser { get { return _parser; } }

    private static readonly string[] _fieldNames = new string[] {  };
    private static readonly uint[] _fieldTags = new uint[] {  };
    public static pbd::MessageDescriptor Descriptor {
      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_FooClientMessage__Descriptor; }
    }

    public pb::FieldAccess.FieldAccessorTable<FooClientMessage> Fields {
      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_FooClientMessage__FieldAccessorTable; }
    }

    public FooClientMessage() { }
    public FooClientMessage(FooClientMessage other) {
      MergeFrom(other);
    }
    public override bool Equals(object other) {
      return Equals(other as FooClientMessage);
    }

    public bool Equals(FooClientMessage other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      return true;
    }

    public override int GetHashCode() {
      int hash = 0;
      return hash;
    }

    public void WriteTo(pb::CodedOutputStream output) {
    }

    public int CalculateSize() {
      int size = 0;
      return size;
    }
    public void MergeFrom(FooClientMessage other) {
      if (other == null) {
        return;
      }
    }

    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while (input.ReadTag(out tag)) {
        switch(tag) {
          case 0:
            throw pb::InvalidProtocolBufferException.InvalidTag();
          default:
            if (pb::WireFormat.IsEndGroupTag(tag)) {
              return;
            }
            break;
        }
      }
    }

  }

  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
  public sealed partial class FooServerMessage : pb::IMessage<FooServerMessage>, global::System.IEquatable<FooServerMessage> {
    private static readonly pb::MessageParser<FooServerMessage> _parser = new pb::MessageParser<FooServerMessage>(() => new FooServerMessage());
    public static pb::MessageParser<FooServerMessage> Parser { get { return _parser; } }

    private static readonly string[] _fieldNames = new string[] {  };
    private static readonly uint[] _fieldTags = new uint[] {  };
    public static pbd::MessageDescriptor Descriptor {
      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_FooServerMessage__Descriptor; }
    }

    public pb::FieldAccess.FieldAccessorTable<FooServerMessage> Fields {
      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_FooServerMessage__FieldAccessorTable; }
    }

    public FooServerMessage() { }
    public FooServerMessage(FooServerMessage other) {
      MergeFrom(other);
    }
    public override bool Equals(object other) {
      return Equals(other as FooServerMessage);
    }

    public bool Equals(FooServerMessage other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      return true;
    }

    public override int GetHashCode() {
      int hash = 0;
      return hash;
    }

    public void WriteTo(pb::CodedOutputStream output) {
    }

    public int CalculateSize() {
      int size = 0;
      return size;
    }
    public void MergeFrom(FooServerMessage other) {
      if (other == null) {
        return;
      }
    }

    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while (input.ReadTag(out tag)) {
        switch(tag) {
          case 0:
            throw pb::InvalidProtocolBufferException.InvalidTag();
          default:
            if (pb::WireFormat.IsEndGroupTag(tag)) {
              return;
            }
            break;
        }
      }
    }

  }

  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
  public sealed partial class BarRequest : pb::IMessage<BarRequest>, global::System.IEquatable<BarRequest> {
    private static readonly pb::MessageParser<BarRequest> _parser = new pb::MessageParser<BarRequest>(() => new BarRequest());
    public static pb::MessageParser<BarRequest> Parser { get { return _parser; } }

    private static readonly string[] _fieldNames = new string[] {  };
    private static readonly uint[] _fieldTags = new uint[] {  };
    public static pbd::MessageDescriptor Descriptor {
      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_BarRequest__Descriptor; }
    }

    public pb::FieldAccess.FieldAccessorTable<BarRequest> Fields {
      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_BarRequest__FieldAccessorTable; }
    }

    public BarRequest() { }
    public BarRequest(BarRequest other) {
      MergeFrom(other);
    }
    public override bool Equals(object other) {
      return Equals(other as BarRequest);
    }

    public bool Equals(BarRequest other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      return true;
    }

    public override int GetHashCode() {
      int hash = 0;
      return hash;
    }

    public void WriteTo(pb::CodedOutputStream output) {
    }

    public int CalculateSize() {
      int size = 0;
      return size;
    }
    public void MergeFrom(BarRequest other) {
      if (other == null) {
        return;
      }
    }

    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while (input.ReadTag(out tag)) {
        switch(tag) {
          case 0:
            throw pb::InvalidProtocolBufferException.InvalidTag();
          default:
            if (pb::WireFormat.IsEndGroupTag(tag)) {
              return;
            }
            break;
        }
      }
    }

  }

  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
  public sealed partial class BarResponse : pb::IMessage<BarResponse>, global::System.IEquatable<BarResponse> {
    private static readonly pb::MessageParser<BarResponse> _parser = new pb::MessageParser<BarResponse>(() => new BarResponse());
    public static pb::MessageParser<BarResponse> Parser { get { return _parser; } }

    private static readonly string[] _fieldNames = new string[] {  };
    private static readonly uint[] _fieldTags = new uint[] {  };
    public static pbd::MessageDescriptor Descriptor {
      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_BarResponse__Descriptor; }
    }

    public pb::FieldAccess.FieldAccessorTable<BarResponse> Fields {
      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_BarResponse__FieldAccessorTable; }
    }

    public BarResponse() { }
    public BarResponse(BarResponse other) {
      MergeFrom(other);
    }
    public override bool Equals(object other) {
      return Equals(other as BarResponse);
    }

    public bool Equals(BarResponse other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      return true;
    }

    public override int GetHashCode() {
      int hash = 0;
      return hash;
    }

    public void WriteTo(pb::CodedOutputStream output) {
    }

    public int CalculateSize() {
      int size = 0;
      return size;
    }
    public void MergeFrom(BarResponse other) {
      if (other == null) {
        return;
      }
    }

    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while (input.ReadTag(out tag)) {
        switch(tag) {
          case 0:
            throw pb::InvalidProtocolBufferException.InvalidTag();
          default:
            if (pb::WireFormat.IsEndGroupTag(tag)) {
              return;
            }
            break;
        }
      }
    }

  }

  #endregion

}

#endregion Designer generated code