boolean (long key) { long hash = hash64(key, seed); int f = fingerprint(hash); int r0 = (int)hash; int r1 = (int)Long.rotateLeft(hash, 21); int r2 = (int)Long.rotateLeft(hash, 42); int h0 = reduce(r0, blockLength); int h1 = reduce(r1, blockLength) + blockLength; int h2 = reduce(r2, blockLength) + 2 * blockLength; f ^= fingerprints[h0] ^ fingerprints[h1] ^ fingerprints[h2]; return (f & 0xffff) == 0; }