docs: public int readRawVarint32() throws IOException
      {
          byte tmp = readRawByte();
          if (tmp >= 0)
          {
              return tmp;
          }
          int result = tmp & 0x7f;
          if ((tmp = readRawByte()) >= 0)
          {
              result |= tmp << 7;
          }
          else
          {
              result |= (tmp & 0x7f) << 7;
              if ((tmp = readRawByte()) >= 0)
              {
                  result |= tmp << 14;
              }
              else
              {
                  result |= (tmp & 0x7f) << 14;
                  if ((tmp = readRawByte()) >= 0)
                  {
                      result |= tmp << 21;
                  }
                  else
                  {
                      result |= (tmp & 0x7f) << 21;
                      result |= (tmp = readRawByte()) << 28;
                      if (tmp < 0)
                      {
                          // Discard upper 32 bits.
                          for (int i = 0; i < 5; i++)
                          {
                              if (readRawByte() >= 0)
                              {
                                  return result;
                              }
                          }
                          throw ProtobufException.malformedVarint();
                      }
                  }
              }
          }
          return result;
      }