code: func (pb *Block) CleanTombstones(dest string, c Compactor) (*ulid.ULID, error) {
  	numStones := 0
  
  	if err := pb.tombstones.Iter(func(id uint64, ivs Intervals) error {
  		numStones += len(ivs)
  		return nil
  	}); err != nil {
  		// This should never happen, as the iteration function only returns nil.
  		panic(err)
  	}
  	if numStones == 0 {
  		return nil, nil
  	}
  
  	meta := pb.Meta()
  	uid, err := c.Write(dest, pb, pb.meta.MinTime, pb.meta.MaxTime, &meta)
  	if err != nil {
  		return nil, err
  	}
  	return &uid, nil
  }
docs: // CleanTombstones will remove the tombstones and rewrite the block (only if there are any tombstones).
  // If there was a rewrite, then it returns the ULID of the new block written, else nil.