private void process(byte[] data, int cnt0, int cnt1)
	{
		int p0, p1, p2, p3, p4, p5, p6, p7;
		int u;

		for (u = 0; u < 16; u += 4) {
			rk[u + 0] = decodeLEInt(data, (u << 2) +  0);
			rk[u + 1] = decodeLEInt(data, (u << 2) +  4);
			rk[u + 2] = decodeLEInt(data, (u << 2) +  8);
			rk[u + 3] = decodeLEInt(data, (u << 2) + 12);
		}
		for (int r = 0; r < 4; r ++) {
			for (int s = 0; s < 2; s ++) {
				int x0, x1, x2, x3;
				int t0, t1, t2, t3;

				x0 = rk[u - 15];
				x1 = rk[u - 14];
				x2 = rk[u - 13];
				x3 = rk[u - 16];
				t0 = AES0[x0 & 0xFF]
					^ AES1[(x1 >>> 8) & 0xFF]
					^ AES2[(x2 >>> 16) & 0xFF]
					^ AES3[x3 >>> 24];
				t1 = AES0[x1 & 0xFF]
					^ AES1[(x2 >>> 8) & 0xFF]
					^ AES2[(x3 >>> 16) & 0xFF]
					^ AES3[x0 >>> 24];
				t2 = AES0[x2 & 0xFF]
					^ AES1[(x3 >>> 8) & 0xFF]
					^ AES2[(x0 >>> 16) & 0xFF]
					^ AES3[x1 >>> 24];
				t3 = AES0[x3 & 0xFF]
					^ AES1[(x0 >>> 8) & 0xFF]
					^ AES2[(x1 >>> 16) & 0xFF]
					^ AES3[x2 >>> 24];
				rk[u + 0] = t0 ^ rk[u - 4];
				rk[u + 1] = t1 ^ rk[u - 3];
				rk[u + 2] = t2 ^ rk[u - 2];
				rk[u + 3] = t3 ^ rk[u - 1];
				if (u == 16) {
					rk[ 16] ^= cnt0;
					rk[ 17] ^= ~cnt1;
				} else if (u == 56) {
					rk[ 57] ^= cnt1;
					rk[ 58] ^= ~cnt0;
				}
				u += 4;

				x0 = rk[u - 15];
				x1 = rk[u - 14];
				x2 = rk[u - 13];
				x3 = rk[u - 16];
				t0 = AES0[x0 & 0xFF]
					^ AES1[(x1 >>> 8) & 0xFF]
					^ AES2[(x2 >>> 16) & 0xFF]
					^ AES3[x3 >>> 24];
				t1 = AES0[x1 & 0xFF]
					^ AES1[(x2 >>> 8) & 0xFF]
					^ AES2[(x3 >>> 16) & 0xFF]
					^ AES3[x0 >>> 24];
				t2 = AES0[x2 & 0xFF]
					^ AES1[(x3 >>> 8) & 0xFF]
					^ AES2[(x0 >>> 16) & 0xFF]
					^ AES3[x1 >>> 24];
				t3 = AES0[x3 & 0xFF]
					^ AES1[(x0 >>> 8) & 0xFF]
					^ AES2[(x1 >>> 16) & 0xFF]
					^ AES3[x2 >>> 24];
				rk[u + 0] = t0 ^ rk[u - 4];
				rk[u + 1] = t1 ^ rk[u - 3];
				rk[u + 2] = t2 ^ rk[u - 2];
				rk[u + 3] = t3 ^ rk[u - 1];
				if (u == 84) {
					rk[ 86] ^= cnt1;
					rk[ 87] ^= ~cnt0;
				} else if (u == 124) {
					rk[124] ^= cnt0;
					rk[127] ^= ~cnt1;
				}
				u += 4;
			}
			for (int s = 0; s < 4; s ++) {
				rk[u + 0] = rk[u - 16] ^ rk[u - 3];
				rk[u + 1] = rk[u - 15] ^ rk[u - 2];
				rk[u + 2] = rk[u - 14] ^ rk[u - 1];
				rk[u + 3] = rk[u - 13] ^ rk[u - 0];
				u += 4;
			}
		}

		p0 = h[0x0];
		p1 = h[0x1];
		p2 = h[0x2];
		p3 = h[0x3];
		p4 = h[0x4];
		p5 = h[0x5];
		p6 = h[0x6];
		p7 = h[0x7];
		u = 0;
		for (int r = 0; r < 6; r ++) {
			int x0, x1, x2, x3;
			int t0, t1, t2, t3;

			x0 = p4 ^ rk[u ++];
			x1 = p5 ^ rk[u ++];
			x2 = p6 ^ rk[u ++];
			x3 = p7 ^ rk[u ++];
			t0 = AES0[x0 & 0xFF]
				^ AES1[(x1 >>> 8) & 0xFF]
				^ AES2[(x2 >>> 16) & 0xFF]
				^ AES3[x3 >>> 24];
			t1 = AES0[x1 & 0xFF]
				^ AES1[(x2 >>> 8) & 0xFF]
				^ AES2[(x3 >>> 16) & 0xFF]
				^ AES3[x0 >>> 24];
			t2 = AES0[x2 & 0xFF]
				^ AES1[(x3 >>> 8) & 0xFF]
				^ AES2[(x0 >>> 16) & 0xFF]
				^ AES3[x1 >>> 24];
			t3 = AES0[x3 & 0xFF]
				^ AES1[(x0 >>> 8) & 0xFF]
				^ AES2[(x1 >>> 16) & 0xFF]
				^ AES3[x2 >>> 24];
			x0 = t0 ^ rk[u ++];
			x1 = t1 ^ rk[u ++];
			x2 = t2 ^ rk[u ++];
			x3 = t3 ^ rk[u ++];
			t0 = AES0[x0 & 0xFF]
				^ AES1[(x1 >>> 8) & 0xFF]
				^ AES2[(x2 >>> 16) & 0xFF]
				^ AES3[x3 >>> 24];
			t1 = AES0[x1 & 0xFF]
				^ AES1[(x2 >>> 8) & 0xFF]
				^ AES2[(x3 >>> 16) & 0xFF]
				^ AES3[x0 >>> 24];
			t2 = AES0[x2 & 0xFF]
				^ AES1[(x3 >>> 8) & 0xFF]
				^ AES2[(x0 >>> 16) & 0xFF]
				^ AES3[x1 >>> 24];
			t3 = AES0[x3 & 0xFF]
				^ AES1[(x0 >>> 8) & 0xFF]
				^ AES2[(x1 >>> 16) & 0xFF]
				^ AES3[x2 >>> 24];
			x0 = t0 ^ rk[u ++];
			x1 = t1 ^ rk[u ++];
			x2 = t2 ^ rk[u ++];
			x3 = t3 ^ rk[u ++];
			t0 = AES0[x0 & 0xFF]
				^ AES1[(x1 >>> 8) & 0xFF]
				^ AES2[(x2 >>> 16) & 0xFF]
				^ AES3[x3 >>> 24];
			t1 = AES0[x1 & 0xFF]
				^ AES1[(x2 >>> 8) & 0xFF]
				^ AES2[(x3 >>> 16) & 0xFF]
				^ AES3[x0 >>> 24];
			t2 = AES0[x2 & 0xFF]
				^ AES1[(x3 >>> 8) & 0xFF]
				^ AES2[(x0 >>> 16) & 0xFF]
				^ AES3[x1 >>> 24];
			t3 = AES0[x3 & 0xFF]
				^ AES1[(x0 >>> 8) & 0xFF]
				^ AES2[(x1 >>> 16) & 0xFF]
				^ AES3[x2 >>> 24];
			p0 ^= t0;
			p1 ^= t1;
			p2 ^= t2;
			p3 ^= t3;

			x0 = p0 ^ rk[u ++];
			x1 = p1 ^ rk[u ++];
			x2 = p2 ^ rk[u ++];
			x3 = p3 ^ rk[u ++];
			t0 = AES0[x0 & 0xFF]
				^ AES1[(x1 >>> 8) & 0xFF]
				^ AES2[(x2 >>> 16) & 0xFF]
				^ AES3[x3 >>> 24];
			t1 = AES0[x1 & 0xFF]
				^ AES1[(x2 >>> 8) & 0xFF]
				^ AES2[(x3 >>> 16) & 0xFF]
				^ AES3[x0 >>> 24];
			t2 = AES0[x2 & 0xFF]
				^ AES1[(x3 >>> 8) & 0xFF]
				^ AES2[(x0 >>> 16) & 0xFF]
				^ AES3[x1 >>> 24];
			t3 = AES0[x3 & 0xFF]
				^ AES1[(x0 >>> 8) & 0xFF]
				^ AES2[(x1 >>> 16) & 0xFF]
				^ AES3[x2 >>> 24];
			x0 = t0 ^ rk[u ++];
			x1 = t1 ^ rk[u ++];
			x2 = t2 ^ rk[u ++];
			x3 = t3 ^ rk[u ++];
			t0 = AES0[x0 & 0xFF]
				^ AES1[(x1 >>> 8) & 0xFF]
				^ AES2[(x2 >>> 16) & 0xFF]
				^ AES3[x3 >>> 24];
			t1 = AES0[x1 & 0xFF]
				^ AES1[(x2 >>> 8) & 0xFF]
				^ AES2[(x3 >>> 16) & 0xFF]
				^ AES3[x0 >>> 24];
			t2 = AES0[x2 & 0xFF]
				^ AES1[(x3 >>> 8) & 0xFF]
				^ AES2[(x0 >>> 16) & 0xFF]
				^ AES3[x1 >>> 24];
			t3 = AES0[x3 & 0xFF]
				^ AES1[(x0 >>> 8) & 0xFF]
				^ AES2[(x1 >>> 16) & 0xFF]
				^ AES3[x2 >>> 24];
			x0 = t0 ^ rk[u ++];
			x1 = t1 ^ rk[u ++];
			x2 = t2 ^ rk[u ++];
			x3 = t3 ^ rk[u ++];
			t0 = AES0[x0 & 0xFF]
				^ AES1[(x1 >>> 8) & 0xFF]
				^ AES2[(x2 >>> 16) & 0xFF]
				^ AES3[x3 >>> 24];
			t1 = AES0[x1 & 0xFF]
				^ AES1[(x2 >>> 8) & 0xFF]
				^ AES2[(x3 >>> 16) & 0xFF]
				^ AES3[x0 >>> 24];
			t2 = AES0[x2 & 0xFF]
				^ AES1[(x3 >>> 8) & 0xFF]
				^ AES2[(x0 >>> 16) & 0xFF]
				^ AES3[x1 >>> 24];
			t3 = AES0[x3 & 0xFF]
				^ AES1[(x0 >>> 8) & 0xFF]
				^ AES2[(x1 >>> 16) & 0xFF]
				^ AES3[x2 >>> 24];
			p4 ^= t0;
			p5 ^= t1;
			p6 ^= t2;
			p7 ^= t3;
		}
		h[0x0] ^= p0;
		h[0x1] ^= p1;
		h[0x2] ^= p2;
		h[0x3] ^= p3;
		h[0x4] ^= p4;
		h[0x5] ^= p5;
		h[0x6] ^= p6;
		h[0x7] ^= p7;
	}