code: func computeHashFromAunts(index int, total int, leafHash []byte, innerHashes [][]byte) []byte {
  	if index >= total || index < 0 || total <= 0 {
  		return nil
  	}
  	switch total {
  	case 0:
  		panic("Cannot call computeHashFromAunts() with 0 total")
  	case 1:
  		if len(innerHashes) != 0 {
  			return nil
  		}
  		return leafHash
  	default:
  		if len(innerHashes) == 0 {
  			return nil
  		}
  		numLeft := (total + 1) / 2
  		if index < numLeft {
  			leftHash := computeHashFromAunts(index, numLeft, leafHash, innerHashes[:len(innerHashes)-1])
  			if leftHash == nil {
  				return nil
  			}
  			return SimpleHashFromTwoHashes(leftHash, innerHashes[len(innerHashes)-1])
  		}
  		rightHash := computeHashFromAunts(index-numLeft, total-numLeft, leafHash, innerHashes[:len(innerHashes)-1])
  		if rightHash == nil {
  			return nil
  		}
  		return SimpleHashFromTwoHashes(innerHashes[len(innerHashes)-1], rightHash)
  	}
  }
docs: // Use the leafHash and innerHashes to get the root merkle hash.
  // If the length of the innerHashes slice isn't exactly correct, the result is nil.
  // Recursive impl.