protected void processBlock(byte[] data)
	{
		t0 += 512;
		if ((t0 & ~0x1FF) == 0)
			t1 ++;
		int v0 = h0;
		int v1 = h1;
		int v2 = h2;
		int v3 = h3;
		int v4 = h4;
		int v5 = h5;
		int v6 = h6;
		int v7 = h7;
		int v8 = s0 ^ (int)0x243F6A88;
		int v9 = s1 ^ (int)0x85A308D3;
		int vA = s2 ^ (int)0x13198A2E;
		int vB = s3 ^ (int)0x03707344;
		int vC = t0 ^ (int)0xA4093822;
		int vD = t0 ^ (int)0x299F31D0;
		int vE = t1 ^ (int)0x082EFA98;
		int vF = t1 ^ (int)0xEC4E6C89;
		int[] m = tmpM;
		for (int i = 0; i < 16; i ++)
			m[i] = decodeBEInt(data, 4 * i);
		for (int r = 0; r < 8; r ++) {
			int o0 = SIGMA[(r << 4) + 0x0];
			int o1 = SIGMA[(r << 4) + 0x1];
			v0 += v4 + (m[o0] ^ CS[o1]);
			vC = circularRight(vC ^ v0, 16);
			v8 += vC;
			v4 = circularRight(v4 ^ v8, 12);
			v0 += v4 + (m[o1] ^ CS[o0]);
			vC = circularRight(vC ^ v0, 8);
			v8 += vC;
			v4 = circularRight(v4 ^ v8, 7);
			o0 = SIGMA[(r << 4) + 0x2];
			o1 = SIGMA[(r << 4) + 0x3];
			v1 += v5 + (m[o0] ^ CS[o1]);
			vD = circularRight(vD ^ v1, 16);
			v9 += vD;
			v5 = circularRight(v5 ^ v9, 12);
			v1 += v5 + (m[o1] ^ CS[o0]);
			vD = circularRight(vD ^ v1, 8);
			v9 += vD;
			v5 = circularRight(v5 ^ v9, 7);
			o0 = SIGMA[(r << 4) + 0x4];
			o1 = SIGMA[(r << 4) + 0x5];
			v2 += v6 + (m[o0] ^ CS[o1]);
			vE = circularRight(vE ^ v2, 16);
			vA += vE;
			v6 = circularRight(v6 ^ vA, 12);
			v2 += v6 + (m[o1] ^ CS[o0]);
			vE = circularRight(vE ^ v2, 8);
			vA += vE;
			v6 = circularRight(v6 ^ vA, 7);
			o0 = SIGMA[(r << 4) + 0x6];
			o1 = SIGMA[(r << 4) + 0x7];
			v3 += v7 + (m[o0] ^ CS[o1]);
			vF = circularRight(vF ^ v3, 16);
			vB += vF;
			v7 = circularRight(v7 ^ vB, 12);
			v3 += v7 + (m[o1] ^ CS[o0]);
			vF = circularRight(vF ^ v3, 8);
			vB += vF;
			v7 = circularRight(v7 ^ vB, 7);
			o0 = SIGMA[(r << 4) + 0x8];
			o1 = SIGMA[(r << 4) + 0x9];
			v0 += v5 + (m[o0] ^ CS[o1]);
			vF = circularRight(vF ^ v0, 16);
			vA += vF;
			v5 = circularRight(v5 ^ vA, 12);
			v0 += v5 + (m[o1] ^ CS[o0]);
			vF = circularRight(vF ^ v0, 8);
			vA += vF;
			v5 = circularRight(v5 ^ vA, 7);
			o0 = SIGMA[(r << 4) + 0xA];
			o1 = SIGMA[(r << 4) + 0xB];
			v1 += v6 + (m[o0] ^ CS[o1]);
			vC = circularRight(vC ^ v1, 16);
			vB += vC;
			v6 = circularRight(v6 ^ vB, 12);
			v1 += v6 + (m[o1] ^ CS[o0]);
			vC = circularRight(vC ^ v1, 8);
			vB += vC;
			v6 = circularRight(v6 ^ vB, 7);
			o0 = SIGMA[(r << 4) + 0xC];
			o1 = SIGMA[(r << 4) + 0xD];
			v2 += v7 + (m[o0] ^ CS[o1]);
			vD = circularRight(vD ^ v2, 16);
			v8 += vD;
			v7 = circularRight(v7 ^ v8, 12);
			v2 += v7 + (m[o1] ^ CS[o0]);
			vD = circularRight(vD ^ v2, 8);
			v8 += vD;
			v7 = circularRight(v7 ^ v8, 7);
			o0 = SIGMA[(r << 4) + 0xE];
			o1 = SIGMA[(r << 4) + 0xF];
			v3 += v4 + (m[o0] ^ CS[o1]);
			vE = circularRight(vE ^ v3, 16);
			v9 += vE;
			v4 = circularRight(v4 ^ v9, 12);
			v3 += v4 + (m[o1] ^ CS[o0]);
			vE = circularRight(vE ^ v3, 8);
			v9 += vE;
			v4 = circularRight(v4 ^ v9, 7);
		}
		h0 ^= s0 ^ v0 ^ v8;
		h1 ^= s1 ^ v1 ^ v9;
		h2 ^= s2 ^ v2 ^ vA;
		h3 ^= s3 ^ v3 ^ vB;
		h4 ^= s0 ^ v4 ^ vC;
		h5 ^= s1 ^ v5 ^ vD;
		h6 ^= s2 ^ v6 ^ vE;
		h7 ^= s3 ^ v7 ^ vF;
	}