anchor.diff:        _eventSink.addError(error, stackTrace);
   
     void close() => _eventSink.close();
  +
  +  Uint8List _takePayload() {
  +    if (_payloads.length == 0) return new Uint8List(0);
  +    if (_payloads.length == 1) {
  +      Uint8List result = _payloads.single;
  +      _payloads.clear();
  +      return result;
  +    }
  +    int length = 0;
  +    for (Uint8List payload in _payloads) {
  +      length += payload.length;
  +    }
  +    Uint8List result = new Uint8List(length);
  +    int offset = 0;
  +    for (Uint8List payload in _payloads) {
  +      result.setRange(offset, offset + payload.length, payload);
  +      offset += payload.length;
  +    }
  +    _payloads.clear();
  +    return result;
  +  }
   
     /**
      * Process data received from the underlying communication channel.
  
positive.code:           if (_masked) {
              _unmask(index, payloadLength, buffer);
            }
            // Control frame and data frame share _payload builder.
            _payload.add(new Uint8List.view(buffer.buffer, index, payloadLength));
            index += payloadLength;
            if (_isControlFrame()) {
              if (_remainingPayloadBytes == 0) _controlFrameEnd();
  
negative.code: 
    final bool _serverSide;
    final List _maskingBytes = new List(4);
    final List<Uint8List> _payloads = new List<Uint8List>();
  
    _WebSocketProtocolTransformer([this._serverSide = false]);
  
  