content: // Generated by the protocol buffer compiler.  DO NOT EDIT!
  // source: lot/window.proto
  
  package apsara.odps.lot;
  
  public final class WindowProtos {
    private WindowProtos() {}
    public static void registerAllExtensions(
        com.google.protobuf.ExtensionRegistry registry) {
    }
    public interface WindowOrBuilder
        extends com.google.protobuf.MessageOrBuilder {
      
      // required string Id = 1;
      boolean hasId();
      String getId();
      
      // required string ParentId = 2;
      boolean hasParentId();
      String getParentId();
      
      // repeated group Functions = 3 {
      java.util.List<Window.Functions>
          getFunctionsList();
      Window.Functions getFunctions(int index);
      int getFunctionsCount();
      java.util.List<? extends Window.FunctionsOrBuilder>
          getFunctionsOrBuilderList();
      Window.FunctionsOrBuilder getFunctionsOrBuilder(
          int index);
    }
    public static final class Window extends
        com.google.protobuf.GeneratedMessage
        implements WindowOrBuilder {
      // Use Window.newBuilder() to construct.
      private Window(Builder builder) {
        super(builder);
      }
      private Window(boolean noInit) {}
      
      private static final Window defaultInstance;
      public static Window getDefaultInstance() {
        return defaultInstance;
      }
      
      public Window getDefaultInstanceForType() {
        return defaultInstance;
      }
      
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return WindowProtos.internal_static_apsara_odps_lot_Window_descriptor;
      }
      
      protected FieldAccessorTable
          internalGetFieldAccessorTable() {
        return WindowProtos.internal_static_apsara_odps_lot_Window_fieldAccessorTable;
      }
      
      public interface FunctionsOrBuilder
          extends com.google.protobuf.MessageOrBuilder {
        
        // required .apsara.odps.lot.WindowFunction Function = 1;
        boolean hasFunction();
        ExpressionProtos.WindowFunction getFunction();
        ExpressionProtos.WindowFunctionOrBuilder getFunctionOrBuilder();
        
        // required string Alias = 2;
        boolean hasAlias();
        String getAlias();
      }
      public static final class Functions extends
          com.google.protobuf.GeneratedMessage
          implements FunctionsOrBuilder {
        // Use Functions.newBuilder() to construct.
        private Functions(Builder builder) {
          super(builder);
        }
        private Functions(boolean noInit) {}
        
        private static final Functions defaultInstance;
        public static Functions getDefaultInstance() {
          return defaultInstance;
        }
        
        public Functions getDefaultInstanceForType() {
          return defaultInstance;
        }
        
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return WindowProtos.internal_static_apsara_odps_lot_Window_Functions_descriptor;
        }
        
        protected FieldAccessorTable
            internalGetFieldAccessorTable() {
          return WindowProtos.internal_static_apsara_odps_lot_Window_Functions_fieldAccessorTable;
        }
        
        private int bitField0_;
        // required .apsara.odps.lot.WindowFunction Function = 1;
        public static final int FUNCTION_FIELD_NUMBER = 1;
        private ExpressionProtos.WindowFunction function_;
        public boolean hasFunction() {
          return ((bitField0_ & 0x00000001) == 0x00000001);
        }
        public ExpressionProtos.WindowFunction getFunction() {
          return function_;
        }
        public ExpressionProtos.WindowFunctionOrBuilder getFunctionOrBuilder() {
          return function_;
        }
        
        // required string Alias = 2;
        public static final int ALIAS_FIELD_NUMBER = 2;
        private Object alias_;
        public boolean hasAlias() {
          return ((bitField0_ & 0x00000002) == 0x00000002);
        }
        public String getAlias() {
          Object ref = alias_;
          if (ref instanceof String) {
            return (String) ref;
          } else {
            com.google.protobuf.ByteString bs = 
                (com.google.protobuf.ByteString) ref;
            String s = bs.toStringUtf8();
            if (com.google.protobuf.Internal.isValidUtf8(bs)) {
              alias_ = s;
            }
            return s;
          }
        }
        private com.google.protobuf.ByteString getAliasBytes() {
          Object ref = alias_;
          if (ref instanceof String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8((String) ref);
            alias_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }
        
        private void initFields() {
          function_ = ExpressionProtos.WindowFunction.getDefaultInstance();
          alias_ = "";
        }
        private byte memoizedIsInitialized = -1;
        public final boolean isInitialized() {
          byte isInitialized = memoizedIsInitialized;
          if (isInitialized != -1) return isInitialized == 1;
          
          if (!hasFunction()) {
            memoizedIsInitialized = 0;
            return false;
          }
          if (!hasAlias()) {
            memoizedIsInitialized = 0;
            return false;
          }
          if (!getFunction().isInitialized()) {
            memoizedIsInitialized = 0;
            return false;
          }
          memoizedIsInitialized = 1;
          return true;
        }
        
        public void writeTo(com.google.protobuf.CodedOutputStream output)
                            throws java.io.IOException {
          getSerializedSize();
          if (((bitField0_ & 0x00000001) == 0x00000001)) {
            output.writeMessage(1, function_);
          }
          if (((bitField0_ & 0x00000002) == 0x00000002)) {
            output.writeBytes(2, getAliasBytes());
          }
          getUnknownFields().writeTo(output);
        }
        
        private int memoizedSerializedSize = -1;
        public int getSerializedSize() {
          int size = memoizedSerializedSize;
          if (size != -1) return size;
        
          size = 0;
          if (((bitField0_ & 0x00000001) == 0x00000001)) {
            size += com.google.protobuf.CodedOutputStream
              .computeMessageSize(1, function_);
          }
          if (((bitField0_ & 0x00000002) == 0x00000002)) {
            size += com.google.protobuf.CodedOutputStream
              .computeBytesSize(2, getAliasBytes());
          }
          size += getUnknownFields().getSerializedSize();
          memoizedSerializedSize = size;
          return size;
        }
        
        private static final long serialVersionUID = 0L;
        @Override
        protected Object writeReplace()
            throws java.io.ObjectStreamException {
          return super.writeReplace();
        }
        
        public static Functions parseFrom(
            com.google.protobuf.ByteString data)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return newBuilder().mergeFrom(data).buildParsed();
        }
        public static Functions parseFrom(
            com.google.protobuf.ByteString data,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return newBuilder().mergeFrom(data, extensionRegistry)
                   .buildParsed();
        }
        public static Functions parseFrom(byte[] data)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return newBuilder().mergeFrom(data).buildParsed();
        }
        public static Functions parseFrom(
            byte[] data,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return newBuilder().mergeFrom(data, extensionRegistry)
                   .buildParsed();
        }
        public static Functions parseFrom(java.io.InputStream input)
            throws java.io.IOException {
          return newBuilder().mergeFrom(input).buildParsed();
        }
        public static Functions parseFrom(
            java.io.InputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          return newBuilder().mergeFrom(input, extensionRegistry)
                   .buildParsed();
        }
        public static Functions parseDelimitedFrom(java.io.InputStream input)
            throws java.io.IOException {
          Builder builder = newBuilder();
          if (builder.mergeDelimitedFrom(input)) {
            return builder.buildParsed();
          } else {
            return null;
          }
        }
        public static Functions parseDelimitedFrom(
            java.io.InputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          Builder builder = newBuilder();
          if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
            return builder.buildParsed();
          } else {
            return null;
          }
        }
        public static Functions parseFrom(
            com.google.protobuf.CodedInputStream input)
            throws java.io.IOException {
          return newBuilder().mergeFrom(input).buildParsed();
        }
        public static Functions parseFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          return newBuilder().mergeFrom(input, extensionRegistry)
                   .buildParsed();
        }
        
        public static Builder newBuilder() { return Builder.create(); }
        public Builder newBuilderForType() { return newBuilder(); }
        public static Builder newBuilder(Functions prototype) {
          return newBuilder().mergeFrom(prototype);
        }
        public Builder toBuilder() { return newBuilder(this); }
        
        @Override
        protected Builder newBuilderForType(
            BuilderParent parent) {
          Builder builder = new Builder(parent);
          return builder;
        }
        public static final class Builder extends
            com.google.protobuf.GeneratedMessage.Builder<Builder>
           implements FunctionsOrBuilder {
          public static final com.google.protobuf.Descriptors.Descriptor
              getDescriptor() {
            return WindowProtos.internal_static_apsara_odps_lot_Window_Functions_descriptor;
          }
          
          protected FieldAccessorTable
              internalGetFieldAccessorTable() {
            return WindowProtos.internal_static_apsara_odps_lot_Window_Functions_fieldAccessorTable;
          }
          
          // Construct using apsara.odps.lot.WindowProtos.Window.Functions.newBuilder()
          private Builder() {
            maybeForceBuilderInitialization();
          }
          
          private Builder(BuilderParent parent) {
            super(parent);
            maybeForceBuilderInitialization();
          }
          private void maybeForceBuilderInitialization() {
            if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
              getFunctionFieldBuilder();
            }
          }
          private static Builder create() {
            return new Builder();
          }
          
          public Builder clear() {
            super.clear();
            if (functionBuilder_ == null) {
              function_ = ExpressionProtos.WindowFunction.getDefaultInstance();
            } else {
              functionBuilder_.clear();
            }
            bitField0_ = (bitField0_ & ~0x00000001);
            alias_ = "";
            bitField0_ = (bitField0_ & ~0x00000002);
            return this;
          }
          
          public Builder clone() {
            return create().mergeFrom(buildPartial());
          }
          
          public com.google.protobuf.Descriptors.Descriptor
              getDescriptorForType() {
            return Functions.getDescriptor();
          }
          
          public Functions getDefaultInstanceForType() {
            return Functions.getDefaultInstance();
          }
          
          public Functions build() {
            Functions result = buildPartial();
            if (!result.isInitialized()) {
              throw newUninitializedMessageException(result);
            }
            return result;
          }
          
          private Functions buildParsed()
              throws com.google.protobuf.InvalidProtocolBufferException {
            Functions result = buildPartial();
            if (!result.isInitialized()) {
              throw newUninitializedMessageException(
                result).asInvalidProtocolBufferException();
            }
            return result;
          }
          
          public Functions buildPartial() {
            Functions result = new Functions(this);
            int from_bitField0_ = bitField0_;
            int to_bitField0_ = 0;
            if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
              to_bitField0_ |= 0x00000001;
            }
            if (functionBuilder_ == null) {
              result.function_ = function_;
            } else {
              result.function_ = functionBuilder_.build();
            }
            if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
              to_bitField0_ |= 0x00000002;
            }
            result.alias_ = alias_;
            result.bitField0_ = to_bitField0_;
            onBuilt();
            return result;
          }
          
          public Builder mergeFrom(com.google.protobuf.Message other) {
            if (other instanceof Functions) {
              return mergeFrom((Functions)other);
            } else {
              super.mergeFrom(other);
              return this;
            }
          }
          
          public Builder mergeFrom(Functions other) {
            if (other == Functions.getDefaultInstance()) return this;
            if (other.hasFunction()) {
              mergeFunction(other.getFunction());
            }
            if (other.hasAlias()) {
              setAlias(other.getAlias());
            }
            this.mergeUnknownFields(other.getUnknownFields());
            return this;
          }
          
          public final boolean isInitialized() {
            if (!hasFunction()) {
              
              return false;
            }
            if (!hasAlias()) {
              
              return false;
            }
            if (!getFunction().isInitialized()) {
              
              return false;
            }
            return true;
          }
          
          public Builder mergeFrom(
              com.google.protobuf.CodedInputStream input,
              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
              throws java.io.IOException {
            com.google.protobuf.UnknownFieldSet.Builder unknownFields =
              com.google.protobuf.UnknownFieldSet.newBuilder(
                this.getUnknownFields());
            while (true) {
              int tag = input.readTag();
              switch (tag) {
                case 0:
                  this.setUnknownFields(unknownFields.build());
                  onChanged();
                  return this;
                default: {
                  if (!parseUnknownField(input, unknownFields,
                                         extensionRegistry, tag)) {
                    this.setUnknownFields(unknownFields.build());
                    onChanged();
                    return this;
                  }
                  break;
                }
                case 10: {
                  ExpressionProtos.WindowFunction.Builder subBuilder = ExpressionProtos.WindowFunction.newBuilder();
                  if (hasFunction()) {
                    subBuilder.mergeFrom(getFunction());
                  }
                  input.readMessage(subBuilder, extensionRegistry);
                  setFunction(subBuilder.buildPartial());
                  break;
                }
                case 18: {
                  bitField0_ |= 0x00000002;
                  alias_ = input.readBytes();
                  break;
                }
              }
            }
          }
          
          private int bitField0_;
          
          // required .apsara.odps.lot.WindowFunction Function = 1;
          private ExpressionProtos.WindowFunction function_ = ExpressionProtos.WindowFunction.getDefaultInstance();
          private com.google.protobuf.SingleFieldBuilder<
              ExpressionProtos.WindowFunction, ExpressionProtos.WindowFunction.Builder, ExpressionProtos.WindowFunctionOrBuilder> functionBuilder_;
          public boolean hasFunction() {
            return ((bitField0_ & 0x00000001) == 0x00000001);
          }
          public ExpressionProtos.WindowFunction getFunction() {
            if (functionBuilder_ == null) {
              return function_;
            } else {
              return functionBuilder_.getMessage();
            }
          }
          public Builder setFunction(ExpressionProtos.WindowFunction value) {
            if (functionBuilder_ == null) {
              if (value == null) {
                throw new NullPointerException();
              }
              function_ = value;
              onChanged();
            } else {
              functionBuilder_.setMessage(value);
            }
            bitField0_ |= 0x00000001;
            return this;
          }
          public Builder setFunction(
              ExpressionProtos.WindowFunction.Builder builderForValue) {
            if (functionBuilder_ == null) {
              function_ = builderForValue.build();
              onChanged();
            } else {
              functionBuilder_.setMessage(builderForValue.build());
            }
            bitField0_ |= 0x00000001;
            return this;
          }
          public Builder mergeFunction(ExpressionProtos.WindowFunction value) {
            if (functionBuilder_ == null) {
              if (((bitField0_ & 0x00000001) == 0x00000001) &&
                  function_ != ExpressionProtos.WindowFunction.getDefaultInstance()) {
                function_ =
                  ExpressionProtos.WindowFunction.newBuilder(function_).mergeFrom(value).buildPartial();
              } else {
                function_ = value;
              }
              onChanged();
            } else {
              functionBuilder_.mergeFrom(value);
            }
            bitField0_ |= 0x00000001;
            return this;
          }
          public Builder clearFunction() {
            if (functionBuilder_ == null) {
              function_ = ExpressionProtos.WindowFunction.getDefaultInstance();
              onChanged();
            } else {
              functionBuilder_.clear();
            }
            bitField0_ = (bitField0_ & ~0x00000001);
            return this;
          }
          public ExpressionProtos.WindowFunction.Builder getFunctionBuilder() {
            bitField0_ |= 0x00000001;
            onChanged();
            return getFunctionFieldBuilder().getBuilder();
          }
          public ExpressionProtos.WindowFunctionOrBuilder getFunctionOrBuilder() {
            if (functionBuilder_ != null) {
              return functionBuilder_.getMessageOrBuilder();
            } else {
              return function_;
            }
          }
          private com.google.protobuf.SingleFieldBuilder<
              ExpressionProtos.WindowFunction, ExpressionProtos.WindowFunction.Builder, ExpressionProtos.WindowFunctionOrBuilder>
              getFunctionFieldBuilder() {
            if (functionBuilder_ == null) {
              functionBuilder_ = new com.google.protobuf.SingleFieldBuilder<
                  ExpressionProtos.WindowFunction, ExpressionProtos.WindowFunction.Builder, ExpressionProtos.WindowFunctionOrBuilder>(
                      function_,
                      getParentForChildren(),
                      isClean());
              function_ = null;
            }
            return functionBuilder_;
          }
          
          // required string Alias = 2;
          private Object alias_ = "";
          public boolean hasAlias() {
            return ((bitField0_ & 0x00000002) == 0x00000002);
          }
          public String getAlias() {
            Object ref = alias_;
            if (!(ref instanceof String)) {
              String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
              alias_ = s;
              return s;
            } else {
              return (String) ref;
            }
          }
          public Builder setAlias(String value) {
            if (value == null) {
      throw new NullPointerException();
    }
    bitField0_ |= 0x00000002;
            alias_ = value;
            onChanged();
            return this;
          }
          public Builder clearAlias() {
            bitField0_ = (bitField0_ & ~0x00000002);
            alias_ = getDefaultInstance().getAlias();
            onChanged();
            return this;
          }
          void setAlias(com.google.protobuf.ByteString value) {
            bitField0_ |= 0x00000002;
            alias_ = value;
            onChanged();
          }
          
          // @@protoc_insertion_point(builder_scope:apsara.odps.lot.Window.Functions)
        }
        
        static {
          defaultInstance = new Functions(true);
          defaultInstance.initFields();
        }
        
        // @@protoc_insertion_point(class_scope:apsara.odps.lot.Window.Functions)
      }
      
      private int bitField0_;
      // required string Id = 1;
      public static final int ID_FIELD_NUMBER = 1;
      private Object id_;
      public boolean hasId() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      public String getId() {
        Object ref = id_;
        if (ref instanceof String) {
          return (String) ref;
        } else {
          com.google.protobuf.ByteString bs = 
              (com.google.protobuf.ByteString) ref;
          String s = bs.toStringUtf8();
          if (com.google.protobuf.Internal.isValidUtf8(bs)) {
            id_ = s;
          }
          return s;
        }
      }
      private com.google.protobuf.ByteString getIdBytes() {
        Object ref = id_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8((String) ref);
          id_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      
      // required string ParentId = 2;
      public static final int PARENTID_FIELD_NUMBER = 2;
      private Object parentId_;
      public boolean hasParentId() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      public String getParentId() {
        Object ref = parentId_;
        if (ref instanceof String) {
          return (String) ref;
        } else {
          com.google.protobuf.ByteString bs = 
              (com.google.protobuf.ByteString) ref;
          String s = bs.toStringUtf8();
          if (com.google.protobuf.Internal.isValidUtf8(bs)) {
            parentId_ = s;
          }
          return s;
        }
      }
      private com.google.protobuf.ByteString getParentIdBytes() {
        Object ref = parentId_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8((String) ref);
          parentId_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      
      // repeated group Functions = 3 {
      public static final int FUNCTIONS_FIELD_NUMBER = 3;
      private java.util.List<Functions> functions_;
      public java.util.List<Functions> getFunctionsList() {
        return functions_;
      }
      public java.util.List<? extends FunctionsOrBuilder>
          getFunctionsOrBuilderList() {
        return functions_;
      }
      public int getFunctionsCount() {
        return functions_.size();
      }
      public Functions getFunctions(int index) {
        return functions_.get(index);
      }
      public FunctionsOrBuilder getFunctionsOrBuilder(
          int index) {
        return functions_.get(index);
      }
      
      private void initFields() {
        id_ = "";
        parentId_ = "";
        functions_ = java.util.Collections.emptyList();
      }
      private byte memoizedIsInitialized = -1;
      public final boolean isInitialized() {
        byte isInitialized = memoizedIsInitialized;
        if (isInitialized != -1) return isInitialized == 1;
        
        if (!hasId()) {
          memoizedIsInitialized = 0;
          return false;
        }
        if (!hasParentId()) {
          memoizedIsInitialized = 0;
          return false;
        }
        for (int i = 0; i < getFunctionsCount(); i++) {
          if (!getFunctions(i).isInitialized()) {
            memoizedIsInitialized = 0;
            return false;
          }
        }
        memoizedIsInitialized = 1;
        return true;
      }
      
      public void writeTo(com.google.protobuf.CodedOutputStream output)
                          throws java.io.IOException {
        getSerializedSize();
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          output.writeBytes(1, getIdBytes());
        }
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          output.writeBytes(2, getParentIdBytes());
        }
        for (int i = 0; i < functions_.size(); i++) {
          output.writeGroup(3, functions_.get(i));
        }
        getUnknownFields().writeTo(output);
      }
      
      private int memoizedSerializedSize = -1;
      public int getSerializedSize() {
        int size = memoizedSerializedSize;
        if (size != -1) return size;
      
        size = 0;
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          size += com.google.protobuf.CodedOutputStream
            .computeBytesSize(1, getIdBytes());
        }
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          size += com.google.protobuf.CodedOutputStream
            .computeBytesSize(2, getParentIdBytes());
        }
        for (int i = 0; i < functions_.size(); i++) {
          size += com.google.protobuf.CodedOutputStream
            .computeGroupSize(3, functions_.get(i));
        }
        size += getUnknownFields().getSerializedSize();
        memoizedSerializedSize = size;
        return size;
      }
      
      private static final long serialVersionUID = 0L;
      @Override
      protected Object writeReplace()
          throws java.io.ObjectStreamException {
        return super.writeReplace();
      }
      
      public static Window parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return newBuilder().mergeFrom(data).buildParsed();
      }
      public static Window parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return newBuilder().mergeFrom(data, extensionRegistry)
                 .buildParsed();
      }
      public static Window parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return newBuilder().mergeFrom(data).buildParsed();
      }
      public static Window parseFrom(
          byte[] data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return newBuilder().mergeFrom(data, extensionRegistry)
                 .buildParsed();
      }
      public static Window parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return newBuilder().mergeFrom(input).buildParsed();
      }
      public static Window parseFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return newBuilder().mergeFrom(input, extensionRegistry)
                 .buildParsed();
      }
      public static Window parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        Builder builder = newBuilder();
        if (builder.mergeDelimitedFrom(input)) {
          return builder.buildParsed();
        } else {
          return null;
        }
      }
      public static Window parseDelimitedFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        Builder builder = newBuilder();
        if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
          return builder.buildParsed();
        } else {
          return null;
        }
      }
      public static Window parseFrom(
          com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return newBuilder().mergeFrom(input).buildParsed();
      }
      public static Window parseFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return newBuilder().mergeFrom(input, extensionRegistry)
                 .buildParsed();
      }
      
      public static Builder newBuilder() { return Builder.create(); }
      public Builder newBuilderForType() { return newBuilder(); }
      public static Builder newBuilder(Window prototype) {
        return newBuilder().mergeFrom(prototype);
      }
      public Builder toBuilder() { return newBuilder(this); }
      
      @Override
      protected Builder newBuilderForType(
          BuilderParent parent) {
        Builder builder = new Builder(parent);
        return builder;
      }
      public static final class Builder extends
          com.google.protobuf.GeneratedMessage.Builder<Builder>
         implements WindowOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return WindowProtos.internal_static_apsara_odps_lot_Window_descriptor;
        }
        
        protected FieldAccessorTable
            internalGetFieldAccessorTable() {
          return WindowProtos.internal_static_apsara_odps_lot_Window_fieldAccessorTable;
        }
        
        // Construct using apsara.odps.lot.WindowProtos.Window.newBuilder()
        private Builder() {
          maybeForceBuilderInitialization();
        }
        
        private Builder(BuilderParent parent) {
          super(parent);
          maybeForceBuilderInitialization();
        }
        private void maybeForceBuilderInitialization() {
          if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
            getFunctionsFieldBuilder();
          }
        }
        private static Builder create() {
          return new Builder();
        }
        
        public Builder clear() {
          super.clear();
          id_ = "";
          bitField0_ = (bitField0_ & ~0x00000001);
          parentId_ = "";
          bitField0_ = (bitField0_ & ~0x00000002);
          if (functionsBuilder_ == null) {
            functions_ = java.util.Collections.emptyList();
            bitField0_ = (bitField0_ & ~0x00000004);
          } else {
            functionsBuilder_.clear();
          }
          return this;
        }
        
        public Builder clone() {
          return create().mergeFrom(buildPartial());
        }
        
        public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
          return Window.getDescriptor();
        }
        
        public Window getDefaultInstanceForType() {
          return Window.getDefaultInstance();
        }
        
        public Window build() {
          Window result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }
        
        private Window buildParsed()
            throws com.google.protobuf.InvalidProtocolBufferException {
          Window result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(
              result).asInvalidProtocolBufferException();
          }
          return result;
        }
        
        public Window buildPartial() {
          Window result = new Window(this);
          int from_bitField0_ = bitField0_;
          int to_bitField0_ = 0;
          if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
            to_bitField0_ |= 0x00000001;
          }
          result.id_ = id_;
          if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
            to_bitField0_ |= 0x00000002;
          }
          result.parentId_ = parentId_;
          if (functionsBuilder_ == null) {
            if (((bitField0_ & 0x00000004) == 0x00000004)) {
              functions_ = java.util.Collections.unmodifiableList(functions_);
              bitField0_ = (bitField0_ & ~0x00000004);
            }
            result.functions_ = functions_;
          } else {
            result.functions_ = functionsBuilder_.build();
          }
          result.bitField0_ = to_bitField0_;
          onBuilt();
          return result;
        }
        
        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof Window) {
            return mergeFrom((Window)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }
        
        public Builder mergeFrom(Window other) {
          if (other == Window.getDefaultInstance()) return this;
          if (other.hasId()) {
            setId(other.getId());
          }
          if (other.hasParentId()) {
            setParentId(other.getParentId());
          }
          if (functionsBuilder_ == null) {
            if (!other.functions_.isEmpty()) {
              if (functions_.isEmpty()) {
                functions_ = other.functions_;
                bitField0_ = (bitField0_ & ~0x00000004);
              } else {
                ensureFunctionsIsMutable();
                functions_.addAll(other.functions_);
              }
              onChanged();
            }
          } else {
            if (!other.functions_.isEmpty()) {
              if (functionsBuilder_.isEmpty()) {
                functionsBuilder_.dispose();
                functionsBuilder_ = null;
                functions_ = other.functions_;
                bitField0_ = (bitField0_ & ~0x00000004);
                functionsBuilder_ = 
                  com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                     getFunctionsFieldBuilder() : null;
              } else {
                functionsBuilder_.addAllMessages(other.functions_);
              }
            }
          }
          this.mergeUnknownFields(other.getUnknownFields());
          return this;
        }
        
        public final boolean isInitialized() {
          if (!hasId()) {
            
            return false;
          }
          if (!hasParentId()) {
            
            return false;
          }
          for (int i = 0; i < getFunctionsCount(); i++) {
            if (!getFunctions(i).isInitialized()) {
              
              return false;
            }
          }
          return true;
        }
        
        public Builder mergeFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          com.google.protobuf.UnknownFieldSet.Builder unknownFields =
            com.google.protobuf.UnknownFieldSet.newBuilder(
              this.getUnknownFields());
          while (true) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                this.setUnknownFields(unknownFields.build());
                onChanged();
                return this;
              default: {
                if (!parseUnknownField(input, unknownFields,
                                       extensionRegistry, tag)) {
                  this.setUnknownFields(unknownFields.build());
                  onChanged();
                  return this;
                }
                break;
              }
              case 10: {
                bitField0_ |= 0x00000001;
                id_ = input.readBytes();
                break;
              }
              case 18: {
                bitField0_ |= 0x00000002;
                parentId_ = input.readBytes();
                break;
              }
              case 27: {
                Functions.Builder subBuilder = Functions.newBuilder();
                input.readGroup(3, subBuilder, extensionRegistry);
                addFunctions(subBuilder.buildPartial());
                break;
              }
            }
          }
        }
        
        private int bitField0_;
        
        // required string Id = 1;
        private Object id_ = "";
        public boolean hasId() {
          return ((bitField0_ & 0x00000001) == 0x00000001);
        }
        public String getId() {
          Object ref = id_;
          if (!(ref instanceof String)) {
            String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
            id_ = s;
            return s;
          } else {
            return (String) ref;
          }
        }
        public Builder setId(String value) {
          if (value == null) {
      throw new NullPointerException();
    }
    bitField0_ |= 0x00000001;
          id_ = value;
          onChanged();
          return this;
        }
        public Builder clearId() {
          bitField0_ = (bitField0_ & ~0x00000001);
          id_ = getDefaultInstance().getId();
          onChanged();
          return this;
        }
        void setId(com.google.protobuf.ByteString value) {
          bitField0_ |= 0x00000001;
          id_ = value;
          onChanged();
        }
        
        // required string ParentId = 2;
        private Object parentId_ = "";
        public boolean hasParentId() {
          return ((bitField0_ & 0x00000002) == 0x00000002);
        }
        public String getParentId() {
          Object ref = parentId_;
          if (!(ref instanceof String)) {
            String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
            parentId_ = s;
            return s;
          } else {
            return (String) ref;
          }
        }
        public Builder setParentId(String value) {
          if (value == null) {
      throw new NullPointerException();
    }
    bitField0_ |= 0x00000002;
          parentId_ = value;
          onChanged();
          return this;
        }
        public Builder clearParentId() {
          bitField0_ = (bitField0_ & ~0x00000002);
          parentId_ = getDefaultInstance().getParentId();
          onChanged();
          return this;
        }
        void setParentId(com.google.protobuf.ByteString value) {
          bitField0_ |= 0x00000002;
          parentId_ = value;
          onChanged();
        }
        
        // repeated group Functions = 3 {
        private java.util.List<Functions> functions_ =
          java.util.Collections.emptyList();
        private void ensureFunctionsIsMutable() {
          if (!((bitField0_ & 0x00000004) == 0x00000004)) {
            functions_ = new java.util.ArrayList<Functions>(functions_);
            bitField0_ |= 0x00000004;
           }
        }
        
        private com.google.protobuf.RepeatedFieldBuilder<
            Functions, Functions.Builder, FunctionsOrBuilder> functionsBuilder_;
        
        public java.util.List<Functions> getFunctionsList() {
          if (functionsBuilder_ == null) {
            return java.util.Collections.unmodifiableList(functions_);
          } else {
            return functionsBuilder_.getMessageList();
          }
        }
        public int getFunctionsCount() {
          if (functionsBuilder_ == null) {
            return functions_.size();
          } else {
            return functionsBuilder_.getCount();
          }
        }
        public Functions getFunctions(int index) {
          if (functionsBuilder_ == null) {
            return functions_.get(index);
          } else {
            return functionsBuilder_.getMessage(index);
          }
        }
        public Builder setFunctions(
            int index, Functions value) {
          if (functionsBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureFunctionsIsMutable();
            functions_.set(index, value);
            onChanged();
          } else {
            functionsBuilder_.setMessage(index, value);
          }
          return this;
        }
        public Builder setFunctions(
            int index, Functions.Builder builderForValue) {
          if (functionsBuilder_ == null) {
            ensureFunctionsIsMutable();
            functions_.set(index, builderForValue.build());
            onChanged();
          } else {
            functionsBuilder_.setMessage(index, builderForValue.build());
          }
          return this;
        }
        public Builder addFunctions(Functions value) {
          if (functionsBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureFunctionsIsMutable();
            functions_.add(value);
            onChanged();
          } else {
            functionsBuilder_.addMessage(value);
          }
          return this;
        }
        public Builder addFunctions(
            int index, Functions value) {
          if (functionsBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureFunctionsIsMutable();
            functions_.add(index, value);
            onChanged();
          } else {
            functionsBuilder_.addMessage(index, value);
          }
          return this;
        }
        public Builder addFunctions(
            Functions.Builder builderForValue) {
          if (functionsBuilder_ == null) {
            ensureFunctionsIsMutable();
            functions_.add(builderForValue.build());
            onChanged();
          } else {
            functionsBuilder_.addMessage(builderForValue.build());
          }
          return this;
        }
        public Builder addFunctions(
            int index, Functions.Builder builderForValue) {
          if (functionsBuilder_ == null) {
            ensureFunctionsIsMutable();
            functions_.add(index, builderForValue.build());
            onChanged();
          } else {
            functionsBuilder_.addMessage(index, builderForValue.build());
          }
          return this;
        }
        public Builder addAllFunctions(
            Iterable<? extends Functions> values) {
          if (functionsBuilder_ == null) {
            ensureFunctionsIsMutable();
            super.addAll(values, functions_);
            onChanged();
          } else {
            functionsBuilder_.addAllMessages(values);
          }
          return this;
        }
        public Builder clearFunctions() {
          if (functionsBuilder_ == null) {
            functions_ = java.util.Collections.emptyList();
            bitField0_ = (bitField0_ & ~0x00000004);
            onChanged();
          } else {
            functionsBuilder_.clear();
          }
          return this;
        }
        public Builder removeFunctions(int index) {
          if (functionsBuilder_ == null) {
            ensureFunctionsIsMutable();
            functions_.remove(index);
            onChanged();
          } else {
            functionsBuilder_.remove(index);
          }
          return this;
        }
        public Functions.Builder getFunctionsBuilder(
            int index) {
          return getFunctionsFieldBuilder().getBuilder(index);
        }
        public FunctionsOrBuilder getFunctionsOrBuilder(
            int index) {
          if (functionsBuilder_ == null) {
            return functions_.get(index);  } else {
            return functionsBuilder_.getMessageOrBuilder(index);
          }
        }
        public java.util.List<? extends FunctionsOrBuilder>
             getFunctionsOrBuilderList() {
          if (functionsBuilder_ != null) {
            return functionsBuilder_.getMessageOrBuilderList();
          } else {
            return java.util.Collections.unmodifiableList(functions_);
          }
        }
        public Functions.Builder addFunctionsBuilder() {
          return getFunctionsFieldBuilder().addBuilder(
              Functions.getDefaultInstance());
        }
        public Functions.Builder addFunctionsBuilder(
            int index) {
          return getFunctionsFieldBuilder().addBuilder(
              index, Functions.getDefaultInstance());
        }
        public java.util.List<Functions.Builder>
             getFunctionsBuilderList() {
          return getFunctionsFieldBuilder().getBuilderList();
        }
        private com.google.protobuf.RepeatedFieldBuilder<
            Functions, Functions.Builder, FunctionsOrBuilder>
            getFunctionsFieldBuilder() {
          if (functionsBuilder_ == null) {
            functionsBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
                Functions, Functions.Builder, FunctionsOrBuilder>(
                    functions_,
                    ((bitField0_ & 0x00000004) == 0x00000004),
                    getParentForChildren(),
                    isClean());
            functions_ = null;
          }
          return functionsBuilder_;
        }
        
        // @@protoc_insertion_point(builder_scope:apsara.odps.lot.Window)
      }
      
      static {
        defaultInstance = new Window(true);
        defaultInstance.initFields();
      }
      
      // @@protoc_insertion_point(class_scope:apsara.odps.lot.Window)
    }
    
    private static com.google.protobuf.Descriptors.Descriptor
      internal_static_apsara_odps_lot_Window_descriptor;
    private static
      com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internal_static_apsara_odps_lot_Window_fieldAccessorTable;
    private static com.google.protobuf.Descriptors.Descriptor
      internal_static_apsara_odps_lot_Window_Functions_descriptor;
    private static
      com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internal_static_apsara_odps_lot_Window_Functions_fieldAccessorTable;
    
    public static com.google.protobuf.Descriptors.FileDescriptor
        getDescriptor() {
      return descriptor;
    }
    private static com.google.protobuf.Descriptors.FileDescriptor
        descriptor;
    static {
      String[] descriptorData = {
        "\n\020lot/window.proto\022\017apsara.odps.lot\032\024lot" +
        "/expression.proto\"\253\001\n\006Window\022\n\n\002Id\030\001 \002(\t" +
        "\022\020\n\010ParentId\030\002 \002(\t\0224\n\tfunctions\030\003 \003(\n2!." +
        "apsara.odps.lot.Window.Functions\032M\n\tFunc" +
        "tions\0221\n\010Function\030\001 \002(\0132\037.apsara.odps.lo" +
        "t.WindowFunction\022\r\n\005Alias\030\002 \002(\tB\016B\014Windo" +
        "wProtos"
      };
      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_apsara_odps_lot_Window_descriptor =
              getDescriptor().getMessageTypes().get(0);
            internal_static_apsara_odps_lot_Window_fieldAccessorTable = new
              com.google.protobuf.GeneratedMessage.FieldAccessorTable(
                internal_static_apsara_odps_lot_Window_descriptor,
                new String[] { "Id", "ParentId", "Functions", },
                Window.class,
                Window.Builder.class);
            internal_static_apsara_odps_lot_Window_Functions_descriptor =
              internal_static_apsara_odps_lot_Window_descriptor.getNestedTypes().get(0);
            internal_static_apsara_odps_lot_Window_Functions_fieldAccessorTable = new
              com.google.protobuf.GeneratedMessage.FieldAccessorTable(
                internal_static_apsara_odps_lot_Window_Functions_descriptor,
                new String[] { "Function", "Alias", },
                Window.Functions.class,
                Window.Functions.Builder.class);
            return null;
          }
        };
      com.google.protobuf.Descriptors.FileDescriptor
        .internalBuildGeneratedFileFrom(descriptorData,
          new com.google.protobuf.Descriptors.FileDescriptor[] {
            ExpressionProtos.getDescriptor(),
          }, assigner);
    }
    
    // @@protoc_insertion_point(outer_class_scope)
  }
  