code: func (s *sharedPullerState) Progress() *pullerProgress {
  	s.mut.RLock()
  	defer s.mut.RUnlock()
  	total := s.reused + s.copyTotal + s.pullTotal
  	done := total - s.copyNeeded - s.pullNeeded
  	return &pullerProgress{
  		Total:               total,
  		Reused:              s.reused,
  		CopiedFromOrigin:    s.copyOrigin,
  		CopiedFromElsewhere: s.copyTotal - s.copyNeeded - s.copyOrigin,
  		Pulled:              s.pullTotal - s.pullNeeded,
  		Pulling:             s.pullNeeded,
  		BytesTotal:          blocksToSize(s.file.BlockSize(), total),
  		BytesDone:           blocksToSize(s.file.BlockSize(), done),
  	}
  }
docs: // Progress returns the momentarily progress for the puller