code: func (f *Fetcher) FilterBodies(peer string, transactions [][]*types.Transaction, uncles [][]*types.Header, time time.Time) ([][]*types.Transaction, [][]*types.Header) {
  	log.Trace("Filtering bodies", "peer", peer, "txs", len(transactions), "uncles", len(uncles))
  
  	// Send the filter channel to the fetcher
  	filter := make(chan *bodyFilterTask)
  
  	select {
  	case f.bodyFilter <- filter:
  	case <-f.quit:
  		return nil, nil
  	}
  	// Request the filtering of the body list
  	select {
  	case filter <- &bodyFilterTask{peer: peer, transactions: transactions, uncles: uncles, time: time}:
  	case <-f.quit:
  		return nil, nil
  	}
  	// Retrieve the bodies remaining after filtering
  	select {
  	case task := <-filter:
  		return task.transactions, task.uncles
  	case <-f.quit:
  		return nil, nil
  	}
  }
docs: // FilterBodies extracts all the block bodies that were explicitly requested by
  // the fetcher, returning those that should be handled differently.