anchor.diff:     * Throws [ArgumentError] if size is larger than optional buffer [limit].
      */
     Future<List<T>> read(int size) {
  +    if (limited && size > limit) {
  +      throw new ArgumentError("Cannot read $size with limit $limit");
  +    }
  +
       // If we have enough data to consume and there are no other readers, then
       // we can return immediately.
  -    if (limited && size > limit) {
  -      throw new ArgumentError("Cannot read $size with limit $limit");
  -    }
  -
       if (size <= buffered && _readers.isEmpty) {
         return new Future.value(_consume(size));
       }
  
positive.code:  */
  class StreamBuffer<T> implements StreamConsumer {
  
    List<T> _chunks = [];
    int _offset = 0;
    int _counter = 0; // sum(_chunks[*].length) - _offset
    List<_ReaderInWaiting<List<T>>> _readers = [];
    StreamSubscription<T> _sub;
    Completer _streamDone;
  
    final bool throwOnError;
  
    Stream currentStream;
  
    int _limit = 0;
  
  
negative.code:       follower += subsize;
        _offset += subsize;
        _counter -= subsize;
        leftToRead -= subsize;
        if (chunk is! List || _offset >= chunk.length) {
          _offset = 0;
          _chunks.removeAt(0);
  