anchor.diff:    return file.openRead()
         .transform(new Utf8Decoder())
         .transform(new LineSplitter())
  -      .forEach((String block) {
  -        print('Line!');
  -        print(block.length);
  +      .forEach((ChromeLogRecord block) {
  +        //print('Line!');
  +        //print(block);
         });
   }
   
   //final _chromeLogRegexp = new RegExp('\[(\d+)\:(\d+)\:(\d+)/(\d+):(\w+):(.*)\]', multiLine: false);
   
  +class ChromeLogRecord {
  +  final int pid;
  +  final String rest;
   
  -class LineSplitter extends Converter<String, List<String>> {
  -  List<String> convert(String data) {
  -    var lines = new List<String>();
  +  ChromeLogRecord(this.pid, this.rest);
  +
  +  static ChromeLogRecord parse(String foo) {
  +
  +  }
  +}
  +
  +class LineSplitter extends Converter<String, List<ChromeLogRecord>> {
  +  List<ChromeLogRecord> convert(String data) {
  +    var lines = new List<ChromeLogRecord>();
   
       _LineSplitterSink._addSlice(data, 0, data.length, true, lines.add);
   
       return lines;
     }
   
  -  ChunkedConversionSink startChunkedConversion(ChunkedConversionSink<String> sink) {
  -    if (sink is! StringConversionSink) {
  -      sink = new StringConversionSink.from(sink);
  -    }
  +  ChunkedConversionSink startChunkedConversion(ChunkedConversionSink<ChromeLogRecord> sink) {
       return new _LineSplitterSink(sink);
     }
   }
  
positive.code:       carry = chunk.substring(startPos, pos);
      }
      if(isLast && carry != null) {
        adder(carry);
        return null;
      }
      return carry;
  
negative.code:         }
        }
        if (skip > 0) {
          var val = chunk.substring(startPos, pos);
  
          adder(ChromeLogRecord.parse(val));
          startPos = pos = pos + skip;
        } else {
          pos++;
  