code: func (d *decompressor) nextBlockAt(off int64, rs io.ReadSeeker) *decompressor {
  	d.err = nil
  	for {
  		exists, next := d.owner.cacheHasBlockFor(off)
  		if !exists {
  			break
  		}
  		off = next
  	}
  
  	d.lazyBlock()
  
  	d.acquireHead()
  	defer d.releaseHead()
  
  	if d.cr.offset() != off {
  		if rs == nil {
  			// It should not be possible for the expected next block base
  			// to be out of register with the count reader unless Seek
  			// has been called, so we know the base reader must be an
  			// io.ReadSeeker.
  			var ok bool
  			rs, ok = d.owner.r.(io.ReadSeeker)
  			if !ok {
  				panic("bgzf: unexpected offset without seek")
  			}
  		}
  		d.err = d.cr.seek(rs, off)
  		if d.err != nil {
  			d.wg.Done()
  			return d
  		}
  	}
  
  	d.blk.setBase(d.cr.offset())
  	d.err = d.readMember()
  	if d.err != nil {
  		d.wg.Done()
  		return d
  	}
  	d.blk.setHeader(d.gz.Header)
  	d.gz.Header = gzip.Header{} // Prevent retention of header field in next use.
  
  	// Decompress data into the decompressor's Block.
  	go func() {
  		d.err = d.blk.readFrom(&d.gz)
  		d.wg.Done()
  	}()
  
  	return d
  }
docs: // nextBlockAt makes the decompressor ready for reading decompressed data
  // from its Block. It checks if there is a cached Block for the nextBase,
  // otherwise it seeks to the correct location if decompressor is not
  // correctly positioned, and then reads the compressed data and fills
  // the decompressed Block.
  // After nextBlockAt returns without error, the decompressor's Block
  // holds a valid gzip.Header and base offset.