code: func (d *Demuxer) Read(b []byte) (n int, err error) {
  	var read, req int
  
  	req = len(b)
  	for read < req {
  		n, err := d.doRead(b[read:req])
  		read += n
  
  		if err != nil {
  			return read, err
  		}
  	}
  
  	return read, nil
  }
docs: // Read reads up to len(p) bytes from the PackData channel into p, an error can
  // be return if an error happens when reading or if a message is sent in the
  // ErrorMessage channel.
  //
  // When a ProgressMessage is read, is not copy to b, instead of this is written
  // to the Progress