code: func hashimotoLight(size uint64, cache []uint32, hash []byte, nonce uint64) ([]byte, []byte) {
  	keccak512 := makeHasher(sha3.NewLegacyKeccak512())
  
  	lookup := func(index uint32) []uint32 {
  		rawData := generateDatasetItem(cache, index, keccak512)
  
  		data := make([]uint32, len(rawData)/4)
  		for i := 0; i < len(data); i++ {
  			data[i] = binary.LittleEndian.Uint32(rawData[i*4:])
  		}
  		return data
  	}
  	return hashimoto(hash, nonce, size, lookup)
  }
docs: // hashimotoLight aggregates data from the full dataset (using only a small
  // in-memory cache) in order to produce our final value for a particular header
  // hash and nonce.