private com.google.protobuf.SingleFieldBuilder<
          org.bwapi.proxy.messages.TerrainMessages.StaticTerrainInfo, org.bwapi.proxy.messages.TerrainMessages.StaticTerrainInfo.Builder, org.bwapi.proxy.messages.TerrainMessages.StaticTerrainInfoOrBuilder> 
          getTerrainInfoFieldBuilder() {
        if (terrainInfoBuilder_ == null) {
          terrainInfoBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              org.bwapi.proxy.messages.TerrainMessages.StaticTerrainInfo, org.bwapi.proxy.messages.TerrainMessages.StaticTerrainInfo.Builder, org.bwapi.proxy.messages.TerrainMessages.StaticTerrainInfoOrBuilder>(
                  terrainInfo_,
                  getParentForChildren(),
                  isClean());
          terrainInfo_ = null;
        }
        return terrainInfoBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:messages.FrameMessage)
    }

    static {
      defaultInstance = new FrameMessage(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:messages.FrameMessage)
  }

  public interface FrameCommandsOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // repeated .messages.Command commands = 1;
    /**
     * <code>repeated .messages.Command commands = 1;</code>
     */
    java.util.List<org.bwapi.proxy.messages.Commands.Command> 
        getCommandsList();
    /**
     * <code>repeated .messages.Command commands = 1;</code>
     */
    org.bwapi.proxy.messages.Commands.Command getCommands(int index);
    /**
     * <code>repeated .messages.Command commands = 1;</code>
     */
    int getCommandsCount();
    /**
     * <code>repeated .messages.Command commands = 1;</code>
     */
    java.util.List<? extends org.bwapi.proxy.messages.Commands.CommandOrBuilder> 
        getCommandsOrBuilderList();
    /**
     * <code>repeated .messages.Command commands = 1;</code>
     */
    org.bwapi.proxy.messages.Commands.CommandOrBuilder getCommandsOrBuilder(
        int index);

    // optional sint32 gameSpeed = 2;
    /**
     * <code>optional sint32 gameSpeed = 2;</code>
     */
    boolean hasGameSpeed();
    /**
     * <code>optional sint32 gameSpeed = 2;</code>
     */
    int getGameSpeed();

    // repeated string sendText = 3;
    /**
     * <code>repeated string sendText = 3;</code>
     */
    java.util.List<java.lang.String>
    getSendTextList();
    /**
     * <code>repeated string sendText = 3;</code>
     */
    int getSendTextCount();
    /**
     * <code>repeated string sendText = 3;</code>
     */
    java.lang.String getSendText(int index);
    /**
     * <code>repeated string sendText = 3;</code>
     */
    com.google.protobuf.ByteString
        getSendTextBytes(int index);

    // repeated string printf = 4;
    /**
     * <code>repeated string printf = 4;</code>
     */
    java.util.List<java.lang.String>
    getPrintfList();
    /**
     * <code>repeated string printf = 4;</code>
     */
    int getPrintfCount();
    /**
     * <code>repeated string printf = 4;</code>
     */
    java.lang.String getPrintf(int index);
    /**
     * <code>repeated string printf = 4;</code>
     */
    com.google.protobuf.ByteString
        getPrintfBytes(int index);

    // repeated .messages.Flag flags = 5;
    /**
     * <code>repeated .messages.Flag flags = 5;</code>
     */
    java.util.List<org.bwapi.proxy.messages.Messages.Flag> getFlagsList();
    /**
     * <code>repeated .messages.Flag flags = 5;</code>
     */
    int getFlagsCount();
    /**
     * <code>repeated .messages.Flag flags = 5;</code>
     */
    org.bwapi.proxy.messages.Messages.Flag getFlags(int index);

    // repeated .messages.DrawCommand drawCommands = 6;
    /**
     * <code>repeated .messages.DrawCommand drawCommands = 6;</code>
     */
    java.util.List<org.bwapi.proxy.messages.DrawCommands.DrawCommand> 
        getDrawCommandsList();
    /**
     * <code>repeated .messages.DrawCommand drawCommands = 6;</code>
     */
    org.bwapi.proxy.messages.DrawCommands.DrawCommand getDrawCommands(int index);
    /**
     * <code>repeated .messages.DrawCommand drawCommands = 6;</code>
     */
    int getDrawCommandsCount();
    /**
     * <code>repeated .messages.DrawCommand drawCommands = 6;</code>
     */
    java.util.List<? extends org.bwapi.proxy.messages.DrawCommands.DrawCommandOrBuilder> 
        getDrawCommandsOrBuilderList();
    /**
     * <code>repeated .messages.DrawCommand drawCommands = 6;</code>
     */
    org.bwapi.proxy.messages.DrawCommands.DrawCommandOrBuilder getDrawCommandsOrBuilder(
        int index);

    // optional .messages.Position screenPosition = 7;
    /**
     * <code>optional .messages.Position screenPosition = 7;</code>
     */
    boolean hasScreenPosition();
    /**
     * <code>optional .messages.Position screenPosition = 7;</code>
     */
    org.bwapi.proxy.messages.BasicTypes.Position getScreenPosition();
    /**
     * <code>optional .messages.Position screenPosition = 7;</code>
     */
    org.bwapi.proxy.messages.BasicTypes.PositionOrBuilder getScreenPositionOrBuilder();

    // optional string botName = 8;
    /**
     * <code>optional string botName = 8;</code>
     */
    boolean hasBotName();
    /**
     * <code>optional string botName = 8;</code>
     */
    java.lang.String getBotName();
    /**
     * <code>optional string botName = 8;</code>
     */
    com.google.protobuf.ByteString
        getBotNameBytes();

    // optional string botCode = 9;
    /**
     * <code>optional string botCode = 9;</code>
     */
    boolean hasBotCode();
    /**
     * <code>optional string botCode = 9;</code>
     */
    java.lang.String getBotCode();
    /**
     * <code>optional string botCode = 9;</code>
     */
    com.google.protobuf.ByteString
        getBotCodeBytes();
  }
  /**
   * Protobuf type {@code messages.FrameCommands}
   */
  public static final class FrameCommands extends
      com.google.protobuf.GeneratedMessage
      implements FrameCommandsOrBuilder {
    // Use FrameCommands.newBuilder() to construct.
    private FrameCommands(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private FrameCommands(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final FrameCommands defaultInstance;
    public static FrameCommands getDefaultInstance() {
      return defaultInstance;
    }

    public FrameCommands getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private FrameCommands(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
                commands_ = new java.util.ArrayList<org.bwapi.proxy.messages.Commands.Command>();
                mutable_bitField0_ |= 0x00000001;
              }
              commands_.add(input.readMessage(org.bwapi.proxy.messages.Commands.Command.PARSER, extensionRegistry));
              break;
            }
            case 16: {
              bitField0_ |= 0x00000001;
              gameSpeed_ = input.readSInt32();
              break;
            }
            case 26: {
              if (!((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
                sendText_ = new com.google.protobuf.LazyStringArrayList();
                mutable_bitField0_ |= 0x00000004;
              }
              sendText_.add(input.readBytes());
              break;
            }
            case 34: {
              if (!((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
                printf_ = new com.google.protobuf.LazyStringArrayList();
                mutable_bitField0_ |= 0x00000008;
              }
              printf_.add(input.readBytes());
              break;
            }
            case 40: {
              int rawValue = input.readEnum();
              org.bwapi.proxy.messages.Messages.Flag value = org.bwapi.proxy.messages.Messages.Flag.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(5, rawValue);
              } else {
                if (!((mutable_bitField0_ & 0x00000010) == 0x00000010)) {
                  flags_ = new java.util.ArrayList<org.bwapi.proxy.messages.Messages.Flag>();
                  mutable_bitField0_ |= 0x00000010;
                }
                flags_.add(value);
              }
              break;
            }
            case 42: {
              int length = input.readRawVarint32();
              int oldLimit = input.pushLimit(length);
              while(input.getBytesUntilLimit() > 0) {
                int rawValue = input.readEnum();
                org.bwapi.proxy.messages.Messages.Flag value = org.bwapi.proxy.messages.Messages.Flag.valueOf(rawValue);
                if (value == null) {
                  unknownFields.mergeVarintField(5, rawValue);
                } else {
                  if (!((mutable_bitField0_ & 0x00000010) == 0x00000010)) {
                    flags_ = new java.util.ArrayList<org.bwapi.proxy.messages.Messages.Flag>();
                    mutable_bitField0_ |= 0x00000010;
                  }
                  flags_.add(value);
                }
              }
              input.popLimit(oldLimit);
              break;
            }
            case 50: {
              if (!((mutable_bitField0_ & 0x00000020) == 0x00000020)) {
                drawCommands_ = new java.util.ArrayList<org.bwapi.proxy.messages.DrawCommands.DrawCommand>();
                mutable_bitField0_ |= 0x00000020;
              }
              drawCommands_.add(input.readMessage(org.bwapi.proxy.messages.DrawCommands.DrawCommand.PARSER, extensionRegistry));
              break;
            }
            case 58: {
              org.bwapi.proxy.messages.BasicTypes.Position.Builder subBuilder = null;
              if (((bitField0_ & 0x00000002) == 0x00000002)) {
                subBuilder = screenPosition_.toBuilder();
              }
              screenPosition_ = input.readMessage(org.bwapi.proxy.messages.BasicTypes.Position.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(screenPosition_);
                screenPosition_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000002;
              break;
            }
            case 66: {
              bitField0_ |= 0x00000004;
              botName_ = input.readBytes();
              break;
            }
            case 74: {
              bitField0_ |= 0x00000008;
              botCode_ = input.readBytes();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
          commands_ = java.util.Collections.unmodifiableList(commands_);
        }
        if (((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
          sendText_ = new com.google.protobuf.UnmodifiableLazyStringList(sendText_);
        }
        if (((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
          printf_ = new com.google.protobuf.UnmodifiableLazyStringList(printf_);
        }
        if (((mutable_bitField0_ & 0x00000010) == 0x00000010)) {
          flags_ = java.util.Collections.unmodifiableList(flags_);
        }
        if (((mutable_bitField0_ & 0x00000020) == 0x00000020)) {
          drawCommands_ = java.util.Collections.unmodifiableList(drawCommands_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return org.bwapi.proxy.messages.Messages.internal_static_messages_FrameCommands_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return org.bwapi.proxy.messages.Messages.internal_static_messages_FrameCommands_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              org.bwapi.proxy.messages.Messages.FrameCommands.class, org.bwapi.proxy.messages.Messages.FrameCommands.Builder.class);
    }

    public static com.google.protobuf.Parser<FrameCommands> PARSER =
        new com.google.protobuf.AbstractParser<FrameCommands>() {
      public FrameCommands parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new FrameCommands(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<FrameCommands> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // repeated .messages.Command commands = 1;
    public static final int COMMANDS_FIELD_NUMBER = 1;
    private java.util.List<org.bwapi.proxy.messages.Commands.Command> commands_;
    /**
     * <code>repeated .messages.Command commands = 1;</code>
     */
    public java.util.List<org.bwapi.proxy.messages.Commands.Command> getCommandsList() {
      return commands_;
    }
    /**
     * <code>repeated .messages.Command commands = 1;</code>
     */
    public java.util.List<? extends org.bwapi.proxy.messages.Commands.CommandOrBuilder> 
        getCommandsOrBuilderList() {
      return commands_;
    }
    /**
     * <code>repeated .messages.Command commands = 1;</code>
     */
    public int getCommandsCount() {
      return commands_.size();
    }
    /**
     * <code>repeated .messages.Command commands = 1;</code>
     */
    public org.bwapi.proxy.messages.Commands.Command getCommands(int index) {
      return commands_.get(index);
    }
    /**
     * <code>repeated .messages.Command commands = 1;</code>
     */
    public org.bwapi.proxy.messages.Commands.CommandOrBuilder getCommandsOrBuilder(
        int index) {
      return commands_.get(index);
    }

    // optional sint32 gameSpeed = 2;
    public static final int GAMESPEED_FIELD_NUMBER = 2;
    private int gameSpeed_;
    /**
     * <code>optional sint32 gameSpeed = 2;</code>
     */
    public boolean hasGameSpeed() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional sint32 gameSpeed = 2;</code>
     */
    public int getGameSpeed() {
      return gameSpeed_;
    }

    // repeated string sendText = 3;
    public static final int SENDTEXT_FIELD_NUMBER = 3;
    private com.google.protobuf.LazyStringList sendText_;
    /**
     * <code>repeated string sendText = 3;</code>
     */
    public java.util.List<java.lang.String>
        getSendTextList() {
      return sendText_;
    }
    /**
     * <code>repeated string sendText = 3;</code>
     */
    public int getSendTextCount() {
      return sendText_.size();
    }
    /**
     * <code>repeated string sendText = 3;</code>
     */
    public java.lang.String getSendText(int index) {
      return sendText_.get(index);
    }
    /**
     * <code>repeated string sendText = 3;</code>
     */
    public com.google.protobuf.ByteString
        getSendTextBytes(int index) {
      return sendText_.getByteString(index);
    }

    // repeated string printf = 4;
    public static final int PRINTF_FIELD_NUMBER = 4;
    private com.google.protobuf.LazyStringList printf_;
    /**
     * <code>repeated string printf = 4;</code>
     */
    public java.util.List<java.lang.String>
        getPrintfList() {
      return printf_;
    }
    /**
     * <code>repeated string printf = 4;</code>
     */
    public int getPrintfCount() {
      return printf_.size();
    }
    /**
     * <code>repeated string printf = 4;</code>
     */
    public java.lang.String getPrintf(int index) {
      return printf_.get(index);
    }
    /**
     * <code>repeated string printf = 4;</code>
     */
    public com.google.protobuf.ByteString
        getPrintfBytes(int index) {
      return printf_.getByteString(index);
    }

    // repeated .messages.Flag flags = 5;
    public static final int FLAGS_FIELD_NUMBER = 5;
    private java.util.List<org.bwapi.proxy.messages.Messages.Flag> flags_;
    /**
     * <code>repeated .messages.Flag flags = 5;</code>
     */
    public java.util.List<org.bwapi.proxy.messages.Messages.Flag> getFlagsList() {
      return flags_;
    }
    /**
     * <code>repeated .messages.Flag flags = 5;</code>
     */
    public int getFlagsCount() {
      return flags_.size();
    }
    /**
     * <code>repeated .messages.Flag flags = 5;</code>
     */
    public org.bwapi.proxy.messages.Messages.Flag getFlags(int index) {
      return flags_.get(index);
    }

    // repeated .messages.DrawCommand drawCommands = 6;
    public static final int DRAWCOMMANDS_FIELD_NUMBER = 6;
    private java.util.List<org.bwapi.proxy.messages.DrawCommands.DrawCommand> drawCommands_;
    /**
     * <code>repeated .messages.DrawCommand drawCommands = 6;</code>
     */
    public java.util.List<org.bwapi.proxy.messages.DrawCommands.DrawCommand> getDrawCommandsList() {
      return drawCommands_;
    }
    /**
     * <code>repeated .messages.DrawCommand drawCommands = 6;</code>
     */
    public java.util.List<? extends org.bwapi.proxy.messages.DrawCommands.DrawCommandOrBuilder> 
        getDrawCommandsOrBuilderList() {
      return drawCommands_;
    }
    /**
     * <code>repeated .messages.DrawCommand drawCommands = 6;</code>
     */
    public int getDrawCommandsCount() {
      return drawCommands_.size();
    }
    /**
     * <code>repeated .messages.DrawCommand drawCommands = 6;</code>
     */
    public org.bwapi.proxy.messages.DrawCommands.DrawCommand getDrawCommands(int index) {
      return drawCommands_.get(index);
    }
    /**
     * <code>repeated .messages.DrawCommand drawCommands = 6;</code>
     */
    public org.bwapi.proxy.messages.DrawCommands.DrawCommandOrBuilder getDrawCommandsOrBuilder(
        int index) {
      return drawCommands_.get(index);
    }

    // optional .messages.Position screenPosition = 7;
    public static final int SCREENPOSITION_FIELD_NUMBER = 7;
    private org.bwapi.proxy.messages.BasicTypes.Position screenPosition_;
    /**
     * <code>optional .messages.Position screenPosition = 7;</code>
     */
    public boolean hasScreenPosition() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional .messages.Position screenPosition = 7;</code>
     */
    public org.bwapi.proxy.messages.BasicTypes.Position getScreenPosition() {
      return screenPosition_;
    }
    /**
     * <code>optional .messages.Position screenPosition = 7;</code>
     */
    public org.bwapi.proxy.messages.BasicTypes.PositionOrBuilder getScreenPositionOrBuilder() {
      return screenPosition_;
    }

    // optional string botName = 8;
    public static final int BOTNAME_FIELD_NUMBER = 8;
    private java.lang.Object botName_;
    /**
     * <code>optional string botName = 8;</code>
     */
    public boolean hasBotName() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional string botName = 8;</code>
     */
    public java.lang.String getBotName() {
      java.lang.Object ref = botName_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          botName_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string botName = 8;</code>
     */
    public com.google.protobuf.ByteString
        getBotNameBytes() {
      java.lang.Object ref = botName_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        botName_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string botCode = 9;
    public static final int BOTCODE_FIELD_NUMBER = 9;
    private java.lang.Object botCode_;
    /**
     * <code>optional string botCode = 9;</code>
     */
    public boolean hasBotCode() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <code>optional string botCode = 9;</code>
     */
    public java.lang.String getBotCode() {
      java.lang.Object ref = botCode_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          botCode_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string botCode = 9;</code>
     */
    public com.google.protobuf.ByteString
        getBotCodeBytes() {
      java.lang.Object ref = botCode_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        botCode_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    private void initFields() {
      commands_ = java.util.Collections.emptyList();
      gameSpeed_ = 0;
      sendText_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      printf_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      flags_ = java.util.Collections.emptyList();
      drawCommands_ = java.util.Collections.emptyList();
      screenPosition_ = org.bwapi.proxy.messages.BasicTypes.Position.getDefaultInstance();
      botName_ = "";
      botCode_ = "";
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      for (int i = 0; i < getCommandsCount(); i++) {
        if (!getCommands(i).isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      for (int i = 0; i < getDrawCommandsCount(); i++) {
        if (!getDrawCommands(i).isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      if (hasScreenPosition()) {
        if (!getScreenPosition().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      for (int i = 0; i < commands_.size(); i++) {
        output.writeMessage(1, commands_.get(i));
      }
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeSInt32(2, gameSpeed_);
      }
      for (int i = 0; i < sendText_.size(); i++) {
        output.writeBytes(3, sendText_.getByteString(i));
      }
      for (int i = 0; i < printf_.size(); i++) {
        output.writeBytes(4, printf_.getByteString(i));
      }
      for (int i = 0; i < flags_.size(); i++) {
        output.writeEnum(5, flags_.get(i).getNumber());
      }
      for (int i = 0; i < drawCommands_.size(); i++) {
        output.writeMessage(6, drawCommands_.get(i));
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeMessage(7, screenPosition_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeBytes(8, getBotNameBytes());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeBytes(9, getBotCodeBytes());
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      for (int i = 0; i < commands_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, commands_.get(i));
      }
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeSInt32Size(2, gameSpeed_);
      }
      {
        int dataSize = 0;
        for (int i = 0; i < sendText_.size(); i++) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeBytesSizeNoTag(sendText_.getByteString(i));
        }
        size += dataSize;
        size += 1 * getSendTextList().size();
      }
      {
        int dataSize = 0;
        for (int i = 0; i < printf_.size(); i++) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeBytesSizeNoTag(printf_.getByteString(i));
        }
        size += dataSize;
        size += 1 * getPrintfList().size();
      }
      {
        int dataSize = 0;
        for (int i = 0; i < flags_.size(); i++) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeEnumSizeNoTag(flags_.get(i).getNumber());
        }
        size += dataSize;
        size += 1 * flags_.size();
      }
      for (int i = 0; i < drawCommands_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(6, drawCommands_.get(i));
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(7, screenPosition_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(8, getBotNameBytes());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(9, getBotCodeBytes());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static org.bwapi.proxy.messages.Messages.FrameCommands parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.bwapi.proxy.messages.Messages.FrameCommands parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.bwapi.proxy.messages.Messages.FrameCommands parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.bwapi.proxy.messages.Messages.FrameCommands parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.bwapi.proxy.messages.Messages.FrameCommands parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static org.bwapi.proxy.messages.Messages.FrameCommands parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static org.bwapi.proxy.messages.Messages.FrameCommands parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static org.bwapi.proxy.messages.Messages.FrameCommands parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static org.bwapi.proxy.messages.Messages.FrameCommands parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static org.bwapi.proxy.messages.Messages.FrameCommands parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(org.bwapi.proxy.messages.Messages.FrameCommands prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code messages.FrameCommands}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements org.bwapi.proxy.messages.Messages.FrameCommandsOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.bwapi.proxy.messages.Messages.internal_static_messages_FrameCommands_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.bwapi.proxy.messages.Messages.internal_static_messages_FrameCommands_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.bwapi.proxy.messages.Messages.FrameCommands.class, org.bwapi.proxy.messages.Messages.FrameCommands.Builder.class);
      }

      // Construct using org.bwapi.proxy.messages.Messages.FrameCommands.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getCommandsFieldBuilder();
          getDrawCommandsFieldBuilder();
          getScreenPositionFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        if (commandsBuilder_ == null) {
          commands_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
        } else {
          commandsBuilder_.clear();
        }
        gameSpeed_ = 0;
        bitField0_ = (bitField0_ & ~0x00000002);
        sendText_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000004);
        printf_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000008);
        flags_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000010);
        if (drawCommandsBuilder_ == null) {
          drawCommands_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000020);
        } else {
          drawCommandsBuilder_.clear();
        }
        if (screenPositionBuilder_ == null) {
          screenPosition_ = org.bwapi.proxy.messages.BasicTypes.Position.getDefaultInstance();
        } else {
          screenPositionBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000040);
        botName_ = "";
        bitField0_ = (bitField0_ & ~0x00000080);
        botCode_ = "";
        bitField0_ = (bitField0_ & ~0x00000100);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return org.bwapi.proxy.messages.Messages.internal_static_messages_FrameCommands_descriptor;
      }

      public org.bwapi.proxy.messages.Messages.FrameCommands getDefaultInstanceForType() {
        return org.bwapi.proxy.messages.Messages.FrameCommands.getDefaultInstance();
      }

      public org.bwapi.proxy.messages.Messages.FrameCommands build() {
        org.bwapi.proxy.messages.Messages.FrameCommands result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public org.bwapi.proxy.messages.Messages.FrameCommands buildPartial() {
        org.bwapi.proxy.messages.Messages.FrameCommands result = new org.bwapi.proxy.messages.Messages.FrameCommands(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (commandsBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001)) {
            commands_ = java.util.Collections.unmodifiableList(commands_);
            bitField0_ = (bitField0_ & ~0x00000001);
          }
          result.commands_ = commands_;
        } else {
          result.commands_ = commandsBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000001;
        }
        result.gameSpeed_ = gameSpeed_;
        if (((bitField0_ & 0x00000004) == 0x00000004)) {
          sendText_ = new com.google.protobuf.UnmodifiableLazyStringList(
              sendText_);
          bitField0_ = (bitField0_ & ~0x00000004);
        }
        result.sendText_ = sendText_;
        if (((bitField0_ & 0x00000008) == 0x00000008)) {
          printf_ = new com.google.protobuf.UnmodifiableLazyStringList(
              printf_);
          bitField0_ = (bitField0_ & ~0x00000008);
        }
        result.printf_ = printf_;
        if (((bitField0_ & 0x00000010) == 0x00000010)) {
          flags_ = java.util.Collections.unmodifiableList(flags_);
          bitField0_ = (bitField0_ & ~0x00000010);
        }
        result.flags_ = flags_;
        if (drawCommandsBuilder_ == null) {
          if (((bitField0_ & 0x00000020) == 0x00000020)) {
            drawCommands_ = java.util.Collections.unmodifiableList(drawCommands_);
            bitField0_ = (bitField0_ & ~0x00000020);
          }
          result.drawCommands_ = drawCommands_;
        } else {
          result.drawCommands_ = drawCommandsBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
          to_bitField0_ |= 0x00000002;
        }
        if (screenPositionBuilder_ == null) {
          result.screenPosition_ = screenPosition_;
        } else {
          result.screenPosition_ = screenPositionBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000080) == 0x00000080)) {
          to_bitField0_ |= 0x00000004;
        }
        result.botName_ = botName_;
        if (((from_bitField0_ & 0x00000100) == 0x00000100)) {
          to_bitField0_ |= 0x00000008;
        }
        result.botCode_ = botCode_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof org.bwapi.proxy.messages.Messages.FrameCommands) {
          return mergeFrom((org.bwapi.proxy.messages.Messages.FrameCommands)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(org.bwapi.proxy.messages.Messages.FrameCommands other) {
        if (other == org.bwapi.proxy.messages.Messages.FrameCommands.getDefaultInstance()) return this;
        if (commandsBuilder_ == null) {
          if (!other.commands_.isEmpty()) {
            if (commands_.isEmpty()) {
              commands_ = other.commands_;
              bitField0_ = (bitField0_ & ~0x00000001);
            } else {
              ensureCommandsIsMutable();
              commands_.addAll(other.commands_);
            }
            onChanged();
          }
        } else {
          if (!other.commands_.isEmpty()) {
            if (commandsBuilder_.isEmpty()) {
              commandsBuilder_.dispose();
              commandsBuilder_ = null;
              commands_ = other.commands_;
              bitField0_ = (bitField0_ & ~0x00000001);
              commandsBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getCommandsFieldBuilder() : null;
            } else {
              commandsBuilder_.addAllMessages(other.commands_);
            }
          }
        }
        if (other.hasGameSpeed()) {
          setGameSpeed(other.getGameSpeed());
        }
        if (!other.sendText_.isEmpty()) {
          if (sendText_.isEmpty()) {
            sendText_ = other.sendText_;
            bitField0_ = (bitField0_ & ~0x00000004);
          } else {
            ensureSendTextIsMutable();
            sendText_.addAll(other.sendText_);
          }
          onChanged();
        }
        if (!other.printf_.isEmpty()) {
          if (printf_.isEmpty()) {
            printf_ = other.printf_;
            bitField0_ = (bitField0_ & ~0x00000008);
          } else {
            ensurePrintfIsMutable();
            printf_.addAll(other.printf_);
          }
          onChanged();
        }
        if (!other.flags_.isEmpty()) {
          if (flags_.isEmpty()) {
            flags_ = other.flags_;
            bitField0_ = (bitField0_ & ~0x00000010);
          } else {
            ensureFlagsIsMutable();
            flags_.addAll(other.flags_);
          }
          onChanged();
        }
        if (drawCommandsBuilder_ == null) {
          if (!other.drawCommands_.isEmpty()) {
            if (drawCommands_.isEmpty()) {
              drawCommands_ = other.drawCommands_;
              bitField0_ = (bitField0_ & ~0x00000020);
            } else {
              ensureDrawCommandsIsMutable();
              drawCommands_.addAll(other.drawCommands_);
            }
            onChanged();
          }
        } else {
          if (!other.drawCommands_.isEmpty()) {
            if (drawCommandsBuilder_.isEmpty()) {
              drawCommandsBuilder_.dispose();
              drawCommandsBuilder_ = null;
              drawCommands_ = other.drawCommands_;
              bitField0_ = (bitField0_ & ~0x00000020);
              drawCommandsBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getDrawCommandsFieldBuilder() : null;
            } else {
              drawCommandsBuilder_.addAllMessages(other.drawCommands_);
            }
          }
        }
        if (other.hasScreenPosition()) {
          mergeScreenPosition(other.getScreenPosition());
        }
        if (other.hasBotName()) {
          bitField0_ |= 0x00000080;
          botName_ = other.botName_;
          onChanged();
        }
        if (other.hasBotCode()) {
          bitField0_ |= 0x00000100;
          botCode_ = other.botCode_;
          onChanged();
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        for (int i = 0; i < getCommandsCount(); i++) {
          if (!getCommands(i).isInitialized()) {
            
            return false;
          }
        }
        for (int i = 0; i < getDrawCommandsCount(); i++) {
          if (!getDrawCommands(i).isInitialized()) {
            
            return false;
          }
        }
        if (hasScreenPosition()) {
          if (!getScreenPosition().isInitialized()) {
            
            return false;
          }
        }
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        org.bwapi.proxy.messages.Messages.FrameCommands parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (org.bwapi.proxy.messages.Messages.FrameCommands) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // repeated .messages.Command commands = 1;
      private java.util.List<org.bwapi.proxy.messages.Commands.Command> commands_ =
        java.util.Collections.emptyList();
      private void ensureCommandsIsMutable() {
        if (!((bitField0_ & 0x00000001) == 0x00000001)) {
          commands_ = new java.util.ArrayList<org.bwapi.proxy.messages.Commands.Command>(commands_);
          bitField0_ |= 0x00000001;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          org.bwapi.proxy.messages.Commands.Command, org.bwapi.proxy.messages.Commands.Command.Builder, org.bwapi.proxy.messages.Commands.CommandOrBuilder> commandsBuilder_;

      /**
       * <code>repeated .messages.Command commands = 1;</code>
       */
      public java.util.List<org.bwapi.proxy.messages.Commands.Command> getCommandsList() {
        if (commandsBuilder_ == null) {
          return java.util.Collections.unmodifiableList(commands_);
        } else {
          return commandsBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .messages.Command commands = 1;</code>
       */
      public int getCommandsCount() {
        if (commandsBuilder_ == null) {
          return commands_.size();
        } else {
          return commandsBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .messages.Command commands = 1;</code>
       */
      public org.bwapi.proxy.messages.Commands.Command getCommands(int index) {
        if (commandsBuilder_ == null) {
          return commands_.get(index);
        } else {
          return commandsBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .messages.Command commands = 1;</code>
       */
      public Builder setCommands(
          int index, org.bwapi.proxy.messages.Commands.Command value) {
        if (commandsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureCommandsIsMutable();
          commands_.set(index, value);
          onChanged();
        } else {
          commandsBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .messages.Command commands = 1;</code>
       */
      public Builder setCommands(
          int index, org.bwapi.proxy.messages.Commands.Command.Builder builderForValue) {
        if (commandsBuilder_ == null) {
          ensureCommandsIsMutable();
          commands_.set(index, builderForValue.build());
          onChanged();
        } else {
          commandsBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .messages.Command commands = 1;</code>
       */
      public Builder addCommands(org.bwapi.proxy.messages.Commands.Command value) {
        if (commandsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureCommandsIsMutable();
          commands_.add(value);
          onChanged();
        } else {
          commandsBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .messages.Command commands = 1;</code>
       */
      public Builder addCommands(
          int index, org.bwapi.proxy.messages.Commands.Command value) {
        if (commandsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureCommandsIsMutable();
          commands_.add(index, value);
          onChanged();
        } else {
          commandsBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .messages.Command commands = 1;</code>
       */
      public Builder addCommands(
          org.bwapi.proxy.messages.Commands.Command.Builder builderForValue) {
        if (commandsBuilder_ == null) {
          ensureCommandsIsMutable();
          commands_.add(builderForValue.build());
          onChanged();
        } else {
          commandsBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .messages.Command commands = 1;</code>
       */
      public Builder addCommands(
          int index, org.bwapi.proxy.messages.Commands.Command.Builder builderForValue) {
        if (commandsBuilder_ == null) {
          ensureCommandsIsMutable();
          commands_.add(index, builderForValue.build());
          onChanged();
        } else {
          commandsBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .messages.Command commands = 1;</code>
       */
      public Builder addAllCommands(
          java.lang.Iterable<? extends org.bwapi.proxy.messages.Commands.Command> values) {
        if (commandsBuilder_ == null) {
          ensureCommandsIsMutable();
          super.addAll(values, commands_);
          onChanged();
        } else {
          commandsBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .messages.Command commands = 1;</code>
       */
      public Builder clearCommands() {
        if (commandsBuilder_ == null) {
          commands_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
          onChanged();
        } else {
          commandsBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .messages.Command commands = 1;</code>
       */
      public Builder removeCommands(int index) {
        if (commandsBuilder_ == null) {
          ensureCommandsIsMutable();
          commands_.remove(index);
          onChanged();
        } else {
          commandsBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .messages.Command commands = 1;</code>
       */
      public org.bwapi.proxy.messages.Commands.Command.Builder getCommandsBuilder(
          int index) {
        return getCommandsFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .messages.Command commands = 1;</code>
       */
      public org.bwapi.proxy.messages.Commands.CommandOrBuilder getCommandsOrBuilder(
          int index) {
        if (commandsBuilder_ == null) {
          return commands_.get(index);  } else {
          return commandsBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .messages.Command commands = 1;</code>
       */
      public java.util.List<? extends org.bwapi.proxy.messages.Commands.CommandOrBuilder> 
           getCommandsOrBuilderList() {
        if (commandsBuilder_ != null) {
          return commandsBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(commands_);
        }
      }
      /**
       * <code>repeated .messages.Command commands = 1;</code>
       */
      public org.bwapi.proxy.messages.Commands.Command.Builder addCommandsBuilder() {
        return getCommandsFieldBuilder().addBuilder(
            org.bwapi.proxy.messages.Commands.Command.getDefaultInstance());
      }
      /**
       * <code>repeated .messages.Command commands = 1;</code>
       */
      public org.bwapi.proxy.messages.Commands.Command.Builder addCommandsBuilder(
          int index) {
        return getCommandsFieldBuilder().addBuilder(
            index, org.bwapi.proxy.messages.Commands.Command.getDefaultInstance());
      }
      /**
       * <code>repeated .messages.Command commands = 1;</code>
       */
      public java.util.List<org.bwapi.proxy.messages.Commands.Command.Builder> 
           getCommandsBuilderList() {
        return getCommandsFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          org.bwapi.proxy.messages.Commands.Command, org.bwapi.proxy.messages.Commands.Command.Builder, org.bwapi.proxy.messages.Commands.CommandOrBuilder> 
          getCommandsFieldBuilder() {
        if (commandsBuilder_ == null) {
          commandsBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              org.bwapi.proxy.messages.Commands.Command, org.bwapi.proxy.messages.Commands.Command.Builder, org.bwapi.proxy.messages.Commands.CommandOrBuilder>(
                  commands_,
                  ((bitField0_ & 0x00000001) == 0x00000001),
                  getParentForChildren(),
                  isClean());
          commands_ = null;
        }
        return commandsBuilder_;
      }

      // optional sint32 gameSpeed = 2;
      private int gameSpeed_ ;
      /**
       * <code>optional sint32 gameSpeed = 2;</code>
       */
      public boolean hasGameSpeed() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional sint32 gameSpeed = 2;</code>
       */
      public int getGameSpeed() {
        return gameSpeed_;
      }
      /**
       * <code>optional sint32 gameSpeed = 2;</code>
       */
      public Builder setGameSpeed(int value) {
        bitField0_ |= 0x00000002;
        gameSpeed_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional sint32 gameSpeed = 2;</code>
       */
      public Builder clearGameSpeed() {
        bitField0_ = (bitField0_ & ~0x00000002);
        gameSpeed_ = 0;
        onChanged();
        return this;
      }

      // repeated string sendText = 3;
      private com.google.protobuf.LazyStringList sendText_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensureSendTextIsMutable() {
        if (!((bitField0_ & 0x00000004) == 0x00000004)) {
          sendText_ = new com.google.protobuf.LazyStringArrayList(sendText_);
          bitField0_ |= 0x00000004;
         }
      }
      /**
       * <code>repeated string sendText = 3;</code>
       */
      public java.util.List<java.lang.String>
          getSendTextList() {
        return java.util.Collections.unmodifiableList(sendText_);
      }
      /**
       * <code>repeated string sendText = 3;</code>
       */
      public int getSendTextCount() {
        return sendText_.size();
      }
      /**
       * <code>repeated string sendText = 3;</code>
       */
      public java.lang.String getSendText(int index) {
        return sendText_.get(index);
      }
      /**
       * <code>repeated string sendText = 3;</code>
       */
      public com.google.protobuf.ByteString
          getSendTextBytes(int index) {
        return sendText_.getByteString(index);
      }
      /**
       * <code>repeated string sendText = 3;</code>
       */
      public Builder setSendText(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureSendTextIsMutable();
        sendText_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string sendText = 3;</code>
       */
      public Builder addSendText(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureSendTextIsMutable();
        sendText_.add(value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string sendText = 3;</code>
       */
      public Builder addAllSendText(
          java.lang.Iterable<java.lang.String> values) {
        ensureSendTextIsMutable();
        super.addAll(values, sendText_);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string sendText = 3;</code>
       */
      public Builder clearSendText() {
        sendText_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000004);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string sendText = 3;</code>
       */
      public Builder addSendTextBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureSendTextIsMutable();
        sendText_.add(value);
        onChanged();
        return this;
      }

      // repeated string printf = 4;
      private com.google.protobuf.LazyStringList printf_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensurePrintfIsMutable() {
        if (!((bitField0_ & 0x00000008) == 0x00000008)) {
          printf_ = new com.google.protobuf.LazyStringArrayList(printf_);
          bitField0_ |= 0x00000008;
         }
      }
      /**
       * <code>repeated string printf = 4;</code>
       */
      public java.util.List<java.lang.String>
          getPrintfList() {
        return java.util.Collections.unmodifiableList(printf_);
      }
      /**
       * <code>repeated string printf = 4;</code>
       */
      public int getPrintfCount() {
        return printf_.size();
      }
      /**
       * <code>repeated string printf = 4;</code>
       */
      public java.lang.String getPrintf(int index) {
        return printf_.get(index);
      }
      /**
       * <code>repeated string printf = 4;</code>
       */
      public com.google.protobuf.ByteString
          getPrintfBytes(int index) {
        return printf_.getByteString(index);
      }
      /**
       * <code>repeated string printf = 4;</code>
       */
      public Builder setPrintf(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensurePrintfIsMutable();
        printf_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string printf = 4;</code>
       */
      public Builder addPrintf(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensurePrintfIsMutable();
        printf_.add(value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string printf = 4;</code>
       */
      public Builder addAllPrintf(
          java.lang.Iterable<java.lang.String> values) {
        ensurePrintfIsMutable();
        super.addAll(values, printf_);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string printf = 4;</code>
       */
      public Builder clearPrintf() {
        printf_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000008);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string printf = 4;</code>
       */
      public Builder addPrintfBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensurePrintfIsMutable();
        printf_.add(value);
        onChanged();
        return this;
      }

      // repeated .messages.Flag flags = 5;
      private java.util.List<org.bwapi.proxy.messages.Messages.Flag> flags_ =
        java.util.Collections.emptyList();
      private void ensureFlagsIsMutable() {
        if (!((bitField0_ & 0x00000010) == 0x00000010)) {
          flags_ = new java.util.ArrayList<org.bwapi.proxy.messages.Messages.Flag>(flags_);
          bitField0_ |= 0x00000010;
        }
      }
      /**
       * <code>repeated .messages.Flag flags = 5;</code>
       */
      public java.util.List<org.bwapi.proxy.messages.Messages.Flag> getFlagsList() {
        return java.util.Collections.unmodifiableList(flags_);
      }
      /**
       * <code>repeated .messages.Flag flags = 5;</code>
       */
      public int getFlagsCount() {
        return flags_.size();
      }
      /**
       * <code>repeated .messages.Flag flags = 5;</code>
       */
      public org.bwapi.proxy.messages.Messages.Flag getFlags(int index) {
        return flags_.get(index);
      }
      /**
       * <code>repeated .messages.Flag flags = 5;</code>
       */
      public Builder setFlags(
          int index, org.bwapi.proxy.messages.Messages.Flag value) {
        if (value == null) {
          throw new NullPointerException();
        }
        ensureFlagsIsMutable();
        flags_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated .messages.Flag flags = 5;</code>
       */
      public Builder addFlags(org.bwapi.proxy.messages.Messages.Flag value) {
        if (value == null) {
          throw new NullPointerException();
        }
        ensureFlagsIsMutable();
        flags_.add(value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated .messages.Flag flags = 5;</code>
       */
      public Builder addAllFlags(
          java.lang.Iterable<? extends org.bwapi.proxy.messages.Messages.Flag> values) {
        ensureFlagsIsMutable();
        super.addAll(values, flags_);
        onChanged();
        return this;
      }
      /**
       * <code>repeated .messages.Flag flags = 5;</code>
       */
      public Builder clearFlags() {
        flags_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000010);
        onChanged();
        return this;
      }

      // repeated .messages.DrawCommand drawCommands = 6;
      private java.util.List<org.bwapi.proxy.messages.DrawCommands.DrawCommand> drawCommands_ =
        java.util.Collections.emptyList();
      private void ensureDrawCommandsIsMutable() {
        if (!((bitField0_ & 0x00000020) == 0x00000020)) {
          drawCommands_ = new java.util.ArrayList<org.bwapi.proxy.messages.DrawCommands.DrawCommand>(drawCommands_);
          bitField0_ |= 0x00000020;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          org.bwapi.proxy.messages.DrawCommands.DrawCommand, org.bwapi.proxy.messages.DrawCommands.DrawCommand.Builder, org.bwapi.proxy.messages.DrawCommands.DrawCommandOrBuilder> drawCommandsBuilder_;

      /**
       * <code>repeated .messages.DrawCommand drawCommands = 6;</code>
       */
      public java.util.List<org.bwapi.proxy.messages.DrawCommands.DrawCommand> getDrawCommandsList() {
        if (drawCommandsBuilder_ == null) {
          return java.util.Collections.unmodifiableList(drawCommands_);
        } else {
          return drawCommandsBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .messages.DrawCommand drawCommands = 6;</code>
       */
      public int getDrawCommandsCount() {
        if (drawCommandsBuilder_ == null) {
          return drawCommands_.size();
        } else {
          return drawCommandsBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .messages.DrawCommand drawCommands = 6;</code>
       */
      public org.bwapi.proxy.messages.DrawCommands.DrawCommand getDrawCommands(int index) {
        if (drawCommandsBuilder_ == null) {
          return drawCommands_.get(index);
        } else {
          return drawCommandsBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .messages.DrawCommand drawCommands = 6;</code>
       */
      public Builder setDrawCommands(
          int index, org.bwapi.proxy.messages.DrawCommands.DrawCommand value) {
        if (drawCommandsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureDrawCommandsIsMutable();
          drawCommands_.set(index, value);
          onChanged();
        } else {
          drawCommandsBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .messages.DrawCommand drawCommands = 6;</code>
       */
      public Builder setDrawCommands(
          int index, org.bwapi.proxy.messages.DrawCommands.DrawCommand.Builder builderForValue) {
        if (drawCommandsBuilder_ == null) {
          ensureDrawCommandsIsMutable();
          drawCommands_.set(index, builderForValue.build());
          onChanged();
        } else {
          drawCommandsBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .messages.DrawCommand drawCommands = 6;</code>
       */
      public Builder addDrawCommands(org.bwapi.proxy.messages.DrawCommands.DrawCommand value) {
        if (drawCommandsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureDrawCommandsIsMutable();
          drawCommands_.add(value);
          onChanged();
        } else {
          drawCommandsBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .messages.DrawCommand drawCommands = 6;</code>
       */
      public Builder addDrawCommands(
          int index, org.bwapi.proxy.messages.DrawCommands.DrawCommand value) {
        if (drawCommandsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureDrawCommandsIsMutable();
          drawCommands_.add(index, value);
          onChanged();
        } else {
          drawCommandsBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .messages.DrawCommand drawCommands = 6;</code>
       */
      public Builder addDrawCommands(
          org.bwapi.proxy.messages.DrawCommands.DrawCommand.Builder builderForValue) {
        if (drawCommandsBuilder_ == null) {
          ensureDrawCommandsIsMutable();
          drawCommands_.add(builderForValue.build());
          onChanged();
        } else {
          drawCommandsBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .messages.DrawCommand drawCommands = 6;</code>
       */
      public Builder addDrawCommands(
          int index, org.bwapi.proxy.messages.DrawCommands.DrawCommand.Builder builderForValue) {
        if (drawCommandsBuilder_ == null) {
          ensureDrawCommandsIsMutable();
          drawCommands_.add(index, builderForValue.build());
          onChanged();
        } else {
          drawCommandsBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .messages.DrawCommand drawCommands = 6;</code>
       */
      public Builder addAllDrawCommands(
          java.lang.Iterable<? extends org.bwapi.proxy.messages.DrawCommands.DrawCommand> values) {
        if (drawCommandsBuilder_ == null) {
          ensureDrawCommandsIsMutable();
          super.addAll(values, drawCommands_);
          onChanged();
        } else {
          drawCommandsBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .messages.DrawCommand drawCommands = 6;</code>
       */
      public Builder clearDrawCommands() {
        if (drawCommandsBuilder_ == null) {
          drawCommands_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000020);
          onChanged();
        } else {
          drawCommandsBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .messages.DrawCommand drawCommands = 6;</code>
       */
      public Builder removeDrawCommands(int index) {
        if (drawCommandsBuilder_ == null) {
          ensureDrawCommandsIsMutable();
          drawCommands_.remove(index);
          onChanged();
        } else {
          drawCommandsBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .messages.DrawCommand drawCommands = 6;</code>
       */
      public org.bwapi.proxy.messages.DrawCommands.DrawCommand.Builder getDrawCommandsBuilder(
          int index) {
        return getDrawCommandsFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .messages.DrawCommand drawCommands = 6;</code>
       */
      public org.bwapi.proxy.messages.DrawCommands.DrawCommandOrBuilder getDrawCommandsOrBuilder(
          int index) {
        if (drawCommandsBuilder_ == null) {
          return drawCommands_.get(index);  } else {
          return drawCommandsBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .messages.DrawCommand drawCommands = 6;</code>
       */
      public java.util.List<? extends org.bwapi.proxy.messages.DrawCommands.DrawCommandOrBuilder> 
           getDrawCommandsOrBuilderList() {
        if (drawCommandsBuilder_ != null) {
          return drawCommandsBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(drawCommands_);
        }
      }
      /**
       * <code>repeated .messages.DrawCommand drawCommands = 6;</code>
       */
      public org.bwapi.proxy.messages.DrawCommands.DrawCommand.Builder addDrawCommandsBuilder() {
        return getDrawCommandsFieldBuilder().addBuilder(
            org.bwapi.proxy.messages.DrawCommands.DrawCommand.getDefaultInstance());
      }
      /**
       * <code>repeated .messages.DrawCommand drawCommands = 6;</code>
       */
      public org.bwapi.proxy.messages.DrawCommands.DrawCommand.Builder addDrawCommandsBuilder(
          int index) {
        return getDrawCommandsFieldBuilder().addBuilder(
            index, org.bwapi.proxy.messages.DrawCommands.DrawCommand.getDefaultInstance());
      }
      /**
       * <code>repeated .messages.DrawCommand drawCommands = 6;</code>
       */
      public java.util.List<org.bwapi.proxy.messages.DrawCommands.DrawCommand.Builder> 
           getDrawCommandsBuilderList() {
        return getDrawCommandsFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          org.bwapi.proxy.messages.DrawCommands.DrawCommand, org.bwapi.proxy.messages.DrawCommands.DrawCommand.Builder, org.bwapi.proxy.messages.DrawCommands.DrawCommandOrBuilder> 
          getDrawCommandsFieldBuilder() {
        if (drawCommandsBuilder_ == null) {
          drawCommandsBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              org.bwapi.proxy.messages.DrawCommands.DrawCommand, org.bwapi.proxy.messages.DrawCommands.DrawCommand.Builder, org.bwapi.proxy.messages.DrawCommands.DrawCommandOrBuilder>(
                  drawCommands_,
                  ((bitField0_ & 0x00000020) == 0x00000020),
                  getParentForChildren(),
                  isClean());
          drawCommands_ = null;
        }
        return drawCommandsBuilder_;
      }

      // optional .messages.Position screenPosition = 7;
      private org.bwapi.proxy.messages.BasicTypes.Position screenPosition_ = org.bwapi.proxy.messages.BasicTypes.Position.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          org.bwapi.proxy.messages.BasicTypes.Position, org.bwapi.proxy.messages.BasicTypes.Position.Builder, org.bwapi.proxy.messages.BasicTypes.PositionOrBuilder> screenPositionBuilder_;
      /**
       * <code>optional .messages.Position screenPosition = 7;</code>
       */
      public boolean hasScreenPosition() {
        return ((bitField0_ & 0x00000040) == 0x00000040);
      }
      /**
       * <code>optional .messages.Position screenPosition = 7;</code>
       */
      public org.bwapi.proxy.messages.BasicTypes.Position getScreenPosition() {
        if (screenPositionBuilder_ == null) {
          return screenPosition_;
        } else {
          return screenPositionBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .messages.Position screenPosition = 7;</code>
       */
      public Builder setScreenPosition(org.bwapi.proxy.messages.BasicTypes.Position value) {
        if (screenPositionBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          screenPosition_ = value;
          onChanged();
        } else {
          screenPositionBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000040;
        return this;
      }
      /**
       * <code>optional .messages.Position screenPosition = 7;</code>
       */
      public Builder setScreenPosition(
          org.bwapi.proxy.messages.BasicTypes.Position.Builder builderForValue) {
        if (screenPositionBuilder_ == null) {
          screenPosition_ = builderForValue.build();
          onChanged();
        } else {
          screenPositionBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000040;
        return this;
      }
      /**
       * <code>optional .messages.Position screenPosition = 7;</code>
       */
      public Builder mergeScreenPosition(org.bwapi.proxy.messages.BasicTypes.Position value) {
        if (screenPositionBuilder_ == null) {
          if (((bitField0_ & 0x00000040) == 0x00000040) &&
              screenPosition_ != org.bwapi.proxy.messages.BasicTypes.Position.getDefaultInstance()) {
            screenPosition_ =
              org.bwapi.proxy.messages.BasicTypes.Position.newBuilder(screenPosition_).mergeFrom(value).buildPartial();
          } else {
            screenPosition_ = value;
          }
          onChanged();
        } else {
          screenPositionBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000040;
        return this;
      }
      /**
       * <code>optional .messages.Position screenPosition = 7;</code>
       */
      public Builder clearScreenPosition() {
        if (screenPositionBuilder_ == null) {
          screenPosition_ = org.bwapi.proxy.messages.BasicTypes.Position.getDefaultInstance();
          onChanged();
        } else {
          screenPositionBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000040);
        return this;
      }
      /**
       * <code>optional .messages.Position screenPosition = 7;</code>
       */
      public org.bwapi.proxy.messages.BasicTypes.Position.Builder getScreenPositionBuilder() {
        bitField0_ |= 0x00000040;
        onChanged();
        return getScreenPositionFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .messages.Position screenPosition = 7;</code>
       */
      public org.bwapi.proxy.messages.BasicTypes.PositionOrBuilder getScreenPositionOrBuilder() {
        if (screenPositionBuilder_ != null) {
          return screenPositionBuilder_.getMessageOrBuilder();
        } else {
          return screenPosition_;
        }
      }
      /**
       * <code>optional .messages.Position screenPosition = 7;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          org.bwapi.proxy.messages.BasicTypes.Position, org.bwapi.proxy.messages.BasicTypes.Position.Builder, org.bwapi.proxy.messages.BasicTypes.PositionOrBuilder> 
          getScreenPositionFieldBuilder() {
        if (screenPositionBuilder_ == null) {
          screenPositionBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              org.bwapi.proxy.messages.BasicTypes.Position, org.bwapi.proxy.messages.BasicTypes.Position.Builder, org.bwapi.proxy.messages.BasicTypes.PositionOrBuilder>(
                  screenPosition_,
                  getParentForChildren(),
                  isClean());
          screenPosition_ = null;
        }
        return screenPositionBuilder_;
      }

      // optional string botName = 8;
      private java.lang.Object botName_ = "";
      /**
       * <code>optional string botName = 8;</code>
       */
      public boolean hasBotName() {
        return ((bitField0_ & 0x00000080) == 0x00000080);
      }
      /**
       * <code>optional string botName = 8;</code>
       */
      public java.lang.String getBotName() {
        java.lang.Object ref = botName_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          botName_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string botName = 8;</code>
       */
      public com.google.protobuf.ByteString
          getBotNameBytes() {
        java.lang.Object ref = botName_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          botName_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string botName = 8;</code>
       */
      public Builder setBotName(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000080;
        botName_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string botName = 8;</code>
       */
      public Builder clearBotName() {
        bitField0_ = (bitField0_ & ~0x00000080);
        botName_ = getDefaultInstance().getBotName();
        onChanged();
        return this;
      }
      /**
       * <code>optional string botName = 8;</code>
       */
      public Builder setBotNameBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000080;
        botName_ = value;
        onChanged();
        return this;
      }

      // optional string botCode = 9;
      private java.lang.Object botCode_ = "";
      /**
       * <code>optional string botCode = 9;</code>
       */
      public boolean hasBotCode() {
        return ((bitField0_ & 0x00000100) == 0x00000100);
      }
      /**
       * <code>optional string botCode = 9;</code>
       */
      public java.lang.String getBotCode() {
        java.lang.Object ref = botCode_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          botCode_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string botCode = 9;</code>
       */
      public com.google.protobuf.ByteString
          getBotCodeBytes() {
        java.lang.Object ref = botCode_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          botCode_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string botCode = 9;</code>
       */
      public Builder setBotCode(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000100;
        botCode_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string botCode = 9;</code>
       */
      public Builder clearBotCode() {
        bitField0_ = (bitField0_ & ~0x00000100);
        botCode_ = getDefaultInstance().getBotCode();
        onChanged();
        return this;
      }
      /**
       * <code>optional string botCode = 9;</code>
       */
      public Builder setBotCodeBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000100;
        botCode_ = value;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:messages.FrameCommands)
    }

    static {
      defaultInstance = new FrameCommands(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:messages.FrameCommands)
  }

  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_messages_PlayerText_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_messages_PlayerText_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_messages_FrameMessage_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_messages_FrameMessage_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_messages_FrameCommands_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_messages_FrameCommands_fieldAccessorTable;

  public static com.google.protobuf.Descriptors.FileDescriptor
      getDescriptor() {
    return descriptor;
  }
  private static com.google.protobuf.Descriptors.FileDescriptor
      descriptor;
  static {
    java.lang.String[] descriptorData = {
      "\n\016aimodule.proto\022\010messages\032\nunit.proto\032\013" +
      "types.proto\032\rterrain.proto\032\rcommand.prot" +
      "o\032\ndraw.proto\"*\n\nPlayerText\022\016\n\006player\030\001 " +
      "\002(\005\022\014\n\004text\030\002 \002(\t\"\341\006\n\014FrameMessage\022\022\n\nfr" +
      "ameCount\030\001 \002(\005\022\016\n\006mouseX\030\033 \002(\005\022\016\n\006mouseY" +
      "\030\034 \002(\005\022\017\n\007screenX\030\004 \002(\005\022\017\n\007screenY\030\005 \002(\005" +
      "\022\035\n\005units\030\006 \003(\0132\016.messages.Unit\022!\n\007bulle" +
      "ts\030\003 \003(\0132\020.messages.Bullet\022!\n\007players\030\024 " +
      "\003(\0132\020.messages.Player\022&\n\014createdUnits\030\007 " +
      "\003(\0132\020.messages.UnitId\022(\n\016destroyedUnits\030",
      "\010 \003(\0132\020.messages.UnitId\022&\n\014morphedUnits\030" +
      "\t \003(\0132\020.messages.UnitId\022$\n\nshownUnits\030\n " +
      "\003(\0132\020.messages.UnitId\022%\n\013hiddenUnits\030\013 \003" +
      "(\0132\020.messages.UnitId\022(\n\016renegadedUnits\030\014" +
      " \003(\0132\020.messages.UnitId\022\023\n\013leftplayers\030\025 " +
      "\003(\005\022+\n\rreceivedTexts\030\026 \003(\0132\024.messages.Pl" +
      "ayerText\022\'\n\rselectedUnits\030\030 \003(\0132\020.messag" +
      "es.UnitId\022\020\n\010sentText\030\r \003(\t\022&\n\nnukeDetec" +
      "t\030\016 \001(\0132\022.messages.Position\022\016\n\006paused\030\017 " +
      "\002(\010\022\016\n\006replay\030\020 \002(\010\022\023\n\013multiplayer\030\021 \002(\010",
      "\022\020\n\010gameover\030\027 \001(\010\022\020\n\010isWinner\030\031 \001(\010\022*\n\016" +
      "screenPosition\030\032 \002(\0132\022.messages.Position" +
      "\022\017\n\007latency\030\035 \002(\005\0228\n\022dynamicTerrainInfo\030" +
      "\022 \002(\0132\034.messages.DynamicTerrainInfo\0220\n\013t" +
      "errainInfo\030\023 \001(\0132\033.messages.StaticTerrai" +
      "nInfo\"\203\002\n\rFrameCommands\022#\n\010commands\030\001 \003(" +
      "\0132\021.messages.Command\022\021\n\tgameSpeed\030\002 \001(\021\022" +
      "\020\n\010sendText\030\003 \003(\t\022\016\n\006printf\030\004 \003(\t\022\035\n\005fla" +
      "gs\030\005 \003(\0162\016.messages.Flag\022+\n\014drawCommands" +
      "\030\006 \003(\0132\025.messages.DrawCommand\022*\n\016screenP",
      "osition\030\007 \001(\0132\022.messages.Position\022\017\n\007bot" +
      "Name\030\010 \001(\t\022\017\n\007botCode\030\t \001(\t*1\n\004Flag\022\032\n\026C" +
      "ompleteMapInformation\020\000\022\r\n\tUserInput\020\001B$" +
      "\n\030org.bwapi.proxy.messagesB\010Messages"
    };
    com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner =
      new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() {
        public com.google.protobuf.ExtensionRegistry assignDescriptors(
            com.google.protobuf.Descriptors.FileDescriptor root) {
          descriptor = root;
          internal_static_messages_PlayerText_descriptor =
            getDescriptor().getMessageTypes().get(0);
          internal_static_messages_PlayerText_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_messages_PlayerText_descriptor,
              new java.lang.String[] { "Player", "Text", });
          internal_static_messages_FrameMessage_descriptor =
            getDescriptor().getMessageTypes().get(1);
          internal_static_messages_FrameMessage_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_messages_FrameMessage_descriptor,
              new java.lang.String[] { "FrameCount", "MouseX", "MouseY", "ScreenX", "ScreenY", "Units", "Bullets", "Players", "CreatedUnits", "DestroyedUnits", "MorphedUnits", "ShownUnits", "HiddenUnits", "RenegadedUnits", "Leftplayers", "ReceivedTexts", "SelectedUnits", "SentText", "NukeDetect", "Paused", "Replay", "Multiplayer", "Gameover", "IsWinner", "ScreenPosition", "Latency", "DynamicTerrainInfo", "TerrainInfo", });
          internal_static_messages_FrameCommands_descriptor =
            getDescriptor().getMessageTypes().get(2);
          internal_static_messages_FrameCommands_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_messages_FrameCommands_descriptor,
              new java.lang.String[] { "Commands", "GameSpeed", "SendText", "Printf", "Flags", "DrawCommands", "ScreenPosition", "BotName", "BotCode", });
          return null;
        }
      }