Canged CodedInputStream.ReadTag to use boolean result with out params to
support reading a field name rather than a field tag.
diff --git a/src/ProtocolBuffersLite.Test/TestProtos/UnitTestProtoFile.cs b/src/ProtocolBuffersLite.Test/TestProtos/UnitTestProtoFile.cs
index a9a69f1..184fb68 100644
--- a/src/ProtocolBuffersLite.Test/TestProtos/UnitTestProtoFile.cs
+++ b/src/ProtocolBuffersLite.Test/TestProtos/UnitTestProtoFile.cs
@@ -1229,14 +1229,12 @@
           

           public override Builder MergeFrom(pb::CodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

             pb::UnknownFieldSet.Builder unknownFields = null;

-            while (true) {

-              uint tag = input.ReadTag();

+            uint tag;

+            string field_name;

+            while (input.ReadTag(out tag, out field_name)) {

               switch (tag) {

                 case 0: {

-                  if (unknownFields != null) {

-                    this.UnknownFields = unknownFields.Build();

-                  }

-                  return this;

+                  throw InvalidProtocolBufferException.InvalidTag();

                 }

                 default: {

                   if (pb::WireFormat.IsEndGroupTag(tag)) {

@@ -1257,6 +1255,11 @@
                 }

               }

             }

+            

+            if (unknownFields != null) {

+              this.UnknownFields = unknownFields.Build();

+            }

+            return this;

           }

           

           

@@ -1450,14 +1453,12 @@
           

           public override Builder MergeFrom(pb::CodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

             pb::UnknownFieldSet.Builder unknownFields = null;

-            while (true) {

-              uint tag = input.ReadTag();

+            uint tag;

+            string field_name;

+            while (input.ReadTag(out tag, out field_name)) {

               switch (tag) {

                 case 0: {

-                  if (unknownFields != null) {

-                    this.UnknownFields = unknownFields.Build();

-                  }

-                  return this;

+                  throw InvalidProtocolBufferException.InvalidTag();

                 }

                 default: {

                   if (pb::WireFormat.IsEndGroupTag(tag)) {

@@ -1478,6 +1479,11 @@
                 }

               }

             }

+            

+            if (unknownFields != null) {

+              this.UnknownFields = unknownFields.Build();

+            }

+            return this;

           }

           

           

@@ -1671,14 +1677,12 @@
           

           public override Builder MergeFrom(pb::CodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

             pb::UnknownFieldSet.Builder unknownFields = null;

-            while (true) {

-              uint tag = input.ReadTag();

+            uint tag;

+            string field_name;

+            while (input.ReadTag(out tag, out field_name)) {

               switch (tag) {

                 case 0: {

-                  if (unknownFields != null) {

-                    this.UnknownFields = unknownFields.Build();

-                  }

-                  return this;

+                  throw InvalidProtocolBufferException.InvalidTag();

                 }

                 default: {

                   if (pb::WireFormat.IsEndGroupTag(tag)) {

@@ -1699,6 +1703,11 @@
                 }

               }

             }

+            

+            if (unknownFields != null) {

+              this.UnknownFields = unknownFields.Build();

+            }

+            return this;

           }

           

           

@@ -3323,14 +3332,12 @@
       

       public override Builder MergeFrom(pb::CodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

         pb::UnknownFieldSet.Builder unknownFields = null;

-        while (true) {

-          uint tag = input.ReadTag();

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

           switch (tag) {

             case 0: {

-              if (unknownFields != null) {

-                this.UnknownFields = unknownFields.Build();

-              }

-              return this;

+              throw InvalidProtocolBufferException.InvalidTag();

             }

             default: {

               if (pb::WireFormat.IsEndGroupTag(tag)) {

@@ -3719,6 +3726,11 @@
             }

           }

         }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

       }

       

       

@@ -5482,14 +5494,12 @@
       

       public override Builder MergeFrom(pb::CodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

         pb::UnknownFieldSet.Builder unknownFields = null;

-        while (true) {

-          uint tag = input.ReadTag();

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

           switch (tag) {

             case 0: {

-              if (unknownFields != null) {

-                this.UnknownFields = unknownFields.Build();

-              }

-              return this;

+              throw InvalidProtocolBufferException.InvalidTag();

             }

             default: {

               if (pb::WireFormat.IsEndGroupTag(tag)) {

@@ -5510,6 +5520,11 @@
             }

           }

         }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

       }

       

       

@@ -5703,14 +5718,12 @@
       

       public override Builder MergeFrom(pb::CodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

         pb::UnknownFieldSet.Builder unknownFields = null;

-        while (true) {

-          uint tag = input.ReadTag();

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

           switch (tag) {

             case 0: {

-              if (unknownFields != null) {

-                this.UnknownFields = unknownFields.Build();

-              }

-              return this;

+              throw InvalidProtocolBufferException.InvalidTag();

             }

             default: {

               if (pb::WireFormat.IsEndGroupTag(tag)) {

@@ -5731,6 +5744,11 @@
             }

           }

         }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

       }

       

       

@@ -5910,14 +5928,12 @@
       

       public override Builder MergeFrom(pb::CodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

         pb::UnknownFieldSet.Builder unknownFields = null;

-        while (true) {

-          uint tag = input.ReadTag();

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

           switch (tag) {

             case 0: {

-              if (unknownFields != null) {

-                this.UnknownFields = unknownFields.Build();

-              }

-              return this;

+              throw InvalidProtocolBufferException.InvalidTag();

             }

             default: {

               if (pb::WireFormat.IsEndGroupTag(tag)) {

@@ -5934,6 +5950,11 @@
             }

           }

         }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

       }

       

     }

@@ -6109,14 +6130,12 @@
       

       public override Builder MergeFrom(pb::CodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

         pb::UnknownFieldSet.Builder unknownFields = null;

-        while (true) {

-          uint tag = input.ReadTag();

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

           switch (tag) {

             case 0: {

-              if (unknownFields != null) {

-                this.UnknownFields = unknownFields.Build();

-              }

-              return this;

+              throw InvalidProtocolBufferException.InvalidTag();

             }

             default: {

               if (pb::WireFormat.IsEndGroupTag(tag)) {

@@ -6137,6 +6156,11 @@
             }

           }

         }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

       }

       

       

@@ -6330,14 +6354,12 @@
       

       public override Builder MergeFrom(pb::CodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

         pb::UnknownFieldSet.Builder unknownFields = null;

-        while (true) {

-          uint tag = input.ReadTag();

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

           switch (tag) {

             case 0: {

-              if (unknownFields != null) {

-                this.UnknownFields = unknownFields.Build();

-              }

-              return this;

+              throw InvalidProtocolBufferException.InvalidTag();

             }

             default: {

               if (pb::WireFormat.IsEndGroupTag(tag)) {

@@ -6358,6 +6380,11 @@
             }

           }

         }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

       }

       

       

@@ -6534,14 +6561,12 @@
       

       public override Builder MergeFrom(pb::CodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

         pb::UnknownFieldSet.Builder unknownFields = null;

-        while (true) {

-          uint tag = input.ReadTag();

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

           switch (tag) {

             case 0: {

-              if (unknownFields != null) {

-                this.UnknownFields = unknownFields.Build();

-              }

-              return this;

+              throw InvalidProtocolBufferException.InvalidTag();

             }

             default: {

               if (pb::WireFormat.IsEndGroupTag(tag)) {

@@ -6558,6 +6583,11 @@
             }

           }

         }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

       }

       

     }

@@ -7348,14 +7378,12 @@
       

       public override Builder MergeFrom(pb::CodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

         pb::UnknownFieldSet.Builder unknownFields = null;

-        while (true) {

-          uint tag = input.ReadTag();

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

           switch (tag) {

             case 0: {

-              if (unknownFields != null) {

-                this.UnknownFields = unknownFields.Build();

-              }

-              return this;

+              throw InvalidProtocolBufferException.InvalidTag();

             }

             default: {

               if (pb::WireFormat.IsEndGroupTag(tag)) {

@@ -7504,6 +7532,11 @@
             }

           }

         }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

       }

       

       

@@ -8320,14 +8353,12 @@
       

       public override Builder MergeFrom(pb::CodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

         pb::UnknownFieldSet.Builder unknownFields = null;

-        while (true) {

-          uint tag = input.ReadTag();

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

           switch (tag) {

             case 0: {

-              if (unknownFields != null) {

-                this.UnknownFields = unknownFields.Build();

-              }

-              return this;

+              throw InvalidProtocolBufferException.InvalidTag();

             }

             default: {

               if (pb::WireFormat.IsEndGroupTag(tag)) {

@@ -8363,6 +8394,11 @@
             }

           }

         }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

       }

       

       

@@ -8630,14 +8666,12 @@
       

       public override Builder MergeFrom(pb::CodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

         pb::UnknownFieldSet.Builder unknownFields = null;

-        while (true) {

-          uint tag = input.ReadTag();

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

           switch (tag) {

             case 0: {

-              if (unknownFields != null) {

-                this.UnknownFields = unknownFields.Build();

-              }

-              return this;

+              throw InvalidProtocolBufferException.InvalidTag();

             }

             default: {

               if (pb::WireFormat.IsEndGroupTag(tag)) {

@@ -8663,6 +8697,11 @@
             }

           }

         }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

       }

       

       

@@ -8855,14 +8894,12 @@
       

       public override Builder MergeFrom(pb::CodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

         pb::UnknownFieldSet.Builder unknownFields = null;

-        while (true) {

-          uint tag = input.ReadTag();

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

           switch (tag) {

             case 0: {

-              if (unknownFields != null) {

-                this.UnknownFields = unknownFields.Build();

-              }

-              return this;

+              throw InvalidProtocolBufferException.InvalidTag();

             }

             default: {

               if (pb::WireFormat.IsEndGroupTag(tag)) {

@@ -8879,6 +8916,11 @@
             }

           }

         }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

       }

       

     }

@@ -9040,14 +9082,12 @@
       

       public override Builder MergeFrom(pb::CodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

         pb::UnknownFieldSet.Builder unknownFields = null;

-        while (true) {

-          uint tag = input.ReadTag();

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

           switch (tag) {

             case 0: {

-              if (unknownFields != null) {

-                this.UnknownFields = unknownFields.Build();

-              }

-              return this;

+              throw InvalidProtocolBufferException.InvalidTag();

             }

             default: {

               if (pb::WireFormat.IsEndGroupTag(tag)) {

@@ -9064,6 +9104,11 @@
             }

           }

         }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

       }

       

     }

@@ -9227,14 +9272,12 @@
       

       public override Builder MergeFrom(pb::CodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

         pb::UnknownFieldSet.Builder unknownFields = null;

-        while (true) {

-          uint tag = input.ReadTag();

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

           switch (tag) {

             case 0: {

-              if (unknownFields != null) {

-                this.UnknownFields = unknownFields.Build();

-              }

-              return this;

+              throw InvalidProtocolBufferException.InvalidTag();

             }

             default: {

               if (pb::WireFormat.IsEndGroupTag(tag)) {

@@ -9251,6 +9294,11 @@
             }

           }

         }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

       }

       

     }

@@ -9445,14 +9493,12 @@
       

       public override Builder MergeFrom(pb::CodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

         pb::UnknownFieldSet.Builder unknownFields = null;

-        while (true) {

-          uint tag = input.ReadTag();

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

           switch (tag) {

             case 0: {

-              if (unknownFields != null) {

-                this.UnknownFields = unknownFields.Build();

-              }

-              return this;

+              throw InvalidProtocolBufferException.InvalidTag();

             }

             default: {

               if (pb::WireFormat.IsEndGroupTag(tag)) {

@@ -9477,6 +9523,11 @@
             }

           }

         }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

       }

       

       

@@ -9707,14 +9758,12 @@
       

       public override Builder MergeFrom(pb::CodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

         pb::UnknownFieldSet.Builder unknownFields = null;

-        while (true) {

-          uint tag = input.ReadTag();

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

           switch (tag) {

             case 0: {

-              if (unknownFields != null) {

-                this.UnknownFields = unknownFields.Build();

-              }

-              return this;

+              throw InvalidProtocolBufferException.InvalidTag();

             }

             default: {

               if (pb::WireFormat.IsEndGroupTag(tag)) {

@@ -9744,6 +9793,11 @@
             }

           }

         }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

       }

       

       

@@ -9973,14 +10027,12 @@
       

       public override Builder MergeFrom(pb::CodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

         pb::UnknownFieldSet.Builder unknownFields = null;

-        while (true) {

-          uint tag = input.ReadTag();

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

           switch (tag) {

             case 0: {

-              if (unknownFields != null) {

-                this.UnknownFields = unknownFields.Build();

-              }

-              return this;

+              throw InvalidProtocolBufferException.InvalidTag();

             }

             default: {

               if (pb::WireFormat.IsEndGroupTag(tag)) {

@@ -10006,6 +10058,11 @@
             }

           }

         }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

       }

       

       

@@ -10236,14 +10293,12 @@
       

       public override Builder MergeFrom(pb::CodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

         pb::UnknownFieldSet.Builder unknownFields = null;

-        while (true) {

-          uint tag = input.ReadTag();

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

           switch (tag) {

             case 0: {

-              if (unknownFields != null) {

-                this.UnknownFields = unknownFields.Build();

-              }

-              return this;

+              throw InvalidProtocolBufferException.InvalidTag();

             }

             default: {

               if (pb::WireFormat.IsEndGroupTag(tag)) {

@@ -10273,6 +10328,11 @@
             }

           }

         }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

       }

       

       

@@ -10532,14 +10592,12 @@
           

           public override Builder MergeFrom(pb::CodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

             pb::UnknownFieldSet.Builder unknownFields = null;

-            while (true) {

-              uint tag = input.ReadTag();

+            uint tag;

+            string field_name;

+            while (input.ReadTag(out tag, out field_name)) {

               switch (tag) {

                 case 0: {

-                  if (unknownFields != null) {

-                    this.UnknownFields = unknownFields.Build();

-                  }

-                  return this;

+                  throw InvalidProtocolBufferException.InvalidTag();

                 }

                 default: {

                   if (pb::WireFormat.IsEndGroupTag(tag)) {

@@ -10560,6 +10618,11 @@
                 }

               }

             }

+            

+            if (unknownFields != null) {

+              this.UnknownFields = unknownFields.Build();

+            }

+            return this;

           }

           

           

@@ -10753,14 +10816,12 @@
           

           public override Builder MergeFrom(pb::CodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

             pb::UnknownFieldSet.Builder unknownFields = null;

-            while (true) {

-              uint tag = input.ReadTag();

+            uint tag;

+            string field_name;

+            while (input.ReadTag(out tag, out field_name)) {

               switch (tag) {

                 case 0: {

-                  if (unknownFields != null) {

-                    this.UnknownFields = unknownFields.Build();

-                  }

-                  return this;

+                  throw InvalidProtocolBufferException.InvalidTag();

                 }

                 default: {

                   if (pb::WireFormat.IsEndGroupTag(tag)) {

@@ -10781,6 +10842,11 @@
                 }

               }

             }

+            

+            if (unknownFields != null) {

+              this.UnknownFields = unknownFields.Build();

+            }

+            return this;

           }

           

           

@@ -10990,14 +11056,12 @@
       

       public override Builder MergeFrom(pb::CodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

         pb::UnknownFieldSet.Builder unknownFields = null;

-        while (true) {

-          uint tag = input.ReadTag();

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

           switch (tag) {

             case 0: {

-              if (unknownFields != null) {

-                this.UnknownFields = unknownFields.Build();

-              }

-              return this;

+              throw InvalidProtocolBufferException.InvalidTag();

             }

             default: {

               if (pb::WireFormat.IsEndGroupTag(tag)) {

@@ -11036,6 +11100,11 @@
             }

           }

         }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

       }

       

       

@@ -11361,14 +11430,12 @@
           

           public override Builder MergeFrom(pb::CodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

             pb::UnknownFieldSet.Builder unknownFields = null;

-            while (true) {

-              uint tag = input.ReadTag();

+            uint tag;

+            string field_name;

+            while (input.ReadTag(out tag, out field_name)) {

               switch (tag) {

                 case 0: {

-                  if (unknownFields != null) {

-                    this.UnknownFields = unknownFields.Build();

-                  }

-                  return this;

+                  throw InvalidProtocolBufferException.InvalidTag();

                 }

                 default: {

                   if (pb::WireFormat.IsEndGroupTag(tag)) {

@@ -11395,6 +11462,11 @@
                 }

               }

             }

+            

+            if (unknownFields != null) {

+              this.UnknownFields = unknownFields.Build();

+            }

+            return this;

           }

           

           

@@ -11612,14 +11684,12 @@
       

       public override Builder MergeFrom(pb::CodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

         pb::UnknownFieldSet.Builder unknownFields = null;

-        while (true) {

-          uint tag = input.ReadTag();

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

           switch (tag) {

             case 0: {

-              if (unknownFields != null) {

-                this.UnknownFields = unknownFields.Build();

-              }

-              return this;

+              throw InvalidProtocolBufferException.InvalidTag();

             }

             default: {

               if (pb::WireFormat.IsEndGroupTag(tag)) {

@@ -11645,6 +11715,11 @@
             }

           }

         }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

       }

       

       

@@ -12110,14 +12185,12 @@
       

       public override Builder MergeFrom(pb::CodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

         pb::UnknownFieldSet.Builder unknownFields = null;

-        while (true) {

-          uint tag = input.ReadTag();

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

           switch (tag) {

             case 0: {

-              if (unknownFields != null) {

-                this.UnknownFields = unknownFields.Build();

-              }

-              return this;

+              throw InvalidProtocolBufferException.InvalidTag();

             }

             default: {

               if (pb::WireFormat.IsEndGroupTag(tag)) {

@@ -12205,6 +12278,11 @@
             }

           }

         }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

       }

       

       

@@ -12727,14 +12805,12 @@
       

       public override Builder MergeFrom(pb::CodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

         pb::UnknownFieldSet.Builder unknownFields = null;

-        while (true) {

-          uint tag = input.ReadTag();

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

           switch (tag) {

             case 0: {

-              if (unknownFields != null) {

-                this.UnknownFields = unknownFields.Build();

-              }

-              return this;

+              throw InvalidProtocolBufferException.InvalidTag();

             }

             default: {

               if (pb::WireFormat.IsEndGroupTag(tag)) {

@@ -12763,6 +12839,11 @@
             }

           }

         }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

       }

       

       

@@ -13337,14 +13418,12 @@
       

       public override Builder MergeFrom(pb::CodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

         pb::UnknownFieldSet.Builder unknownFields = null;

-        while (true) {

-          uint tag = input.ReadTag();

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

           switch (tag) {

             case 0: {

-              if (unknownFields != null) {

-                this.UnknownFields = unknownFields.Build();

-              }

-              return this;

+              throw InvalidProtocolBufferException.InvalidTag();

             }

             default: {

               if (pb::WireFormat.IsEndGroupTag(tag)) {

@@ -13437,6 +13516,11 @@
             }

           }

         }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

       }

       

       

@@ -13960,14 +14044,12 @@
       

       public override Builder MergeFrom(pb::CodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

         pb::UnknownFieldSet.Builder unknownFields = null;

-        while (true) {

-          uint tag = input.ReadTag();

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

           switch (tag) {

             case 0: {

-              if (unknownFields != null) {

-                this.UnknownFields = unknownFields.Build();

-              }

-              return this;

+              throw InvalidProtocolBufferException.InvalidTag();

             }

             default: {

               if (pb::WireFormat.IsEndGroupTag(tag)) {

@@ -13988,6 +14070,11 @@
             }

           }

         }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

       }

       

       

@@ -14182,14 +14269,12 @@
       

       public override Builder MergeFrom(pb::CodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

         pb::UnknownFieldSet.Builder unknownFields = null;

-        while (true) {

-          uint tag = input.ReadTag();

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

           switch (tag) {

             case 0: {

-              if (unknownFields != null) {

-                this.UnknownFields = unknownFields.Build();

-              }

-              return this;

+              throw InvalidProtocolBufferException.InvalidTag();

             }

             default: {

               if (pb::WireFormat.IsEndGroupTag(tag)) {

@@ -14210,6 +14295,11 @@
             }

           }

         }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

       }

       

       

@@ -14814,14 +14904,12 @@
       

       public override Builder MergeFrom(pb::CodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

         pb::UnknownFieldSet.Builder unknownFields = null;

-        while (true) {

-          uint tag = input.ReadTag();

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

           switch (tag) {

             case 0: {

-              if (unknownFields != null) {

-                this.UnknownFields = unknownFields.Build();

-              }

-              return this;

+              throw InvalidProtocolBufferException.InvalidTag();

             }

             default: {

               if (pb::WireFormat.IsEndGroupTag(tag)) {

@@ -14972,6 +15060,11 @@
             }

           }

         }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

       }

       

       

@@ -15886,14 +15979,12 @@
       

       public override Builder MergeFrom(pb::CodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

         pb::UnknownFieldSet.Builder unknownFields = null;

-        while (true) {

-          uint tag = input.ReadTag();

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

           switch (tag) {

             case 0: {

-              if (unknownFields != null) {

-                this.UnknownFields = unknownFields.Build();

-              }

-              return this;

+              throw InvalidProtocolBufferException.InvalidTag();

             }

             default: {

               if (pb::WireFormat.IsEndGroupTag(tag)) {

@@ -15974,6 +16065,11 @@
             }

           }

         }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

       }

       

       

@@ -16519,14 +16615,12 @@
       

       public override Builder MergeFrom(pb::CodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

         pb::UnknownFieldSet.Builder unknownFields = null;

-        while (true) {

-          uint tag = input.ReadTag();

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

           switch (tag) {

             case 0: {

-              if (unknownFields != null) {

-                this.UnknownFields = unknownFields.Build();

-              }

-              return this;

+              throw InvalidProtocolBufferException.InvalidTag();

             }

             default: {

               if (pb::WireFormat.IsEndGroupTag(tag)) {

@@ -16543,6 +16637,11 @@
             }

           }

         }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

       }

       

     }

@@ -16756,14 +16855,12 @@
           

           public override Builder MergeFrom(pb::CodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

             pb::UnknownFieldSet.Builder unknownFields = null;

-            while (true) {

-              uint tag = input.ReadTag();

+            uint tag;

+            string field_name;

+            while (input.ReadTag(out tag, out field_name)) {

               switch (tag) {

                 case 0: {

-                  if (unknownFields != null) {

-                    this.UnknownFields = unknownFields.Build();

-                  }

-                  return this;

+                  throw InvalidProtocolBufferException.InvalidTag();

                 }

                 default: {

                   if (pb::WireFormat.IsEndGroupTag(tag)) {

@@ -16784,6 +16881,11 @@
                 }

               }

             }

+            

+            if (unknownFields != null) {

+              this.UnknownFields = unknownFields.Build();

+            }

+            return this;

           }

           

           

@@ -17090,14 +17192,12 @@
       

       public override Builder MergeFrom(pb::CodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

         pb::UnknownFieldSet.Builder unknownFields = null;

-        while (true) {

-          uint tag = input.ReadTag();

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

           switch (tag) {

             case 0: {

-              if (unknownFields != null) {

-                this.UnknownFields = unknownFields.Build();

-              }

-              return this;

+              throw InvalidProtocolBufferException.InvalidTag();

             }

             default: {

               if (pb::WireFormat.IsEndGroupTag(tag)) {

@@ -17173,6 +17273,11 @@
             }

           }

         }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

       }

       

       

@@ -17673,14 +17778,12 @@
       

       public override Builder MergeFrom(pb::CodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

         pb::UnknownFieldSet.Builder unknownFields = null;

-        while (true) {

-          uint tag = input.ReadTag();

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

           switch (tag) {

             case 0: {

-              if (unknownFields != null) {

-                this.UnknownFields = unknownFields.Build();

-              }

-              return this;

+              throw InvalidProtocolBufferException.InvalidTag();

             }

             default: {

               if (pb::WireFormat.IsEndGroupTag(tag)) {

@@ -17721,6 +17824,11 @@
             }

           }

         }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

       }

       

       

@@ -18048,14 +18156,12 @@
       

       public override Builder MergeFrom(pb::CodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

         pb::UnknownFieldSet.Builder unknownFields = null;

-        while (true) {

-          uint tag = input.ReadTag();

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

           switch (tag) {

             case 0: {

-              if (unknownFields != null) {

-                this.UnknownFields = unknownFields.Build();

-              }

-              return this;

+              throw InvalidProtocolBufferException.InvalidTag();

             }

             default: {

               if (pb::WireFormat.IsEndGroupTag(tag)) {

@@ -18072,6 +18178,11 @@
             }

           }

         }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

       }

       

     }

@@ -18228,14 +18339,12 @@
       

       public override Builder MergeFrom(pb::CodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

         pb::UnknownFieldSet.Builder unknownFields = null;

-        while (true) {

-          uint tag = input.ReadTag();

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

           switch (tag) {

             case 0: {

-              if (unknownFields != null) {

-                this.UnknownFields = unknownFields.Build();

-              }

-              return this;

+              throw InvalidProtocolBufferException.InvalidTag();

             }

             default: {

               if (pb::WireFormat.IsEndGroupTag(tag)) {

@@ -18252,6 +18361,11 @@
             }

           }

         }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

       }

       

     }

@@ -18408,14 +18522,12 @@
       

       public override Builder MergeFrom(pb::CodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

         pb::UnknownFieldSet.Builder unknownFields = null;

-        while (true) {

-          uint tag = input.ReadTag();

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

           switch (tag) {

             case 0: {

-              if (unknownFields != null) {

-                this.UnknownFields = unknownFields.Build();

-              }

-              return this;

+              throw InvalidProtocolBufferException.InvalidTag();

             }

             default: {

               if (pb::WireFormat.IsEndGroupTag(tag)) {

@@ -18432,6 +18544,11 @@
             }

           }

         }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

       }

       

     }

@@ -18588,14 +18705,12 @@
       

       public override Builder MergeFrom(pb::CodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

         pb::UnknownFieldSet.Builder unknownFields = null;

-        while (true) {

-          uint tag = input.ReadTag();

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

           switch (tag) {

             case 0: {

-              if (unknownFields != null) {

-                this.UnknownFields = unknownFields.Build();

-              }

-              return this;

+              throw InvalidProtocolBufferException.InvalidTag();

             }

             default: {

               if (pb::WireFormat.IsEndGroupTag(tag)) {

@@ -18612,6 +18727,11 @@
             }

           }

         }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

       }

       

     }