func fnv32a(s string) uint32 {
	const (
		initial = 2166136261
		prime   = 16777619
	)

	hash := uint32(initial)
	for i := 0; i < len(s); i++ {
		hash ^= uint32(s[i])
		hash *= prime
	}
	return hash
}
func fnv32a(s string) uint32 {
	const (
		initial = 2166136261
		prime   = 16777619
	)

	hash := uint32(initial)
	for i := 0; i < len(s); i++ {
		hash ^= uint32(s[i])
		hash *= prime
	}
	return hash
}
// This is based on the standard library's fnv32a implementation.
// We copy it for a couple of reasons:
// 1. Avoid allocations to create a hash.Hash32
// 2. Avoid converting the []byte to a string (another allocation) since
//    the Hash32 interface only supports writing bytes.