private void init(boolean flag) {
	int i;
	int a, b, c, d, e, f, g, h;
	a = b = c = d = e = f = g = h = GOLDEN_RATIO;

	for (i = 0; i < 4; ++i) {
	    a ^= b << 11;
	    d += a;
	    b += c;
	    b ^= c >>> 2;
	    e += b;
	    c += d;
	    c ^= d << 8;
	    f += c;
	    d += e;
	    d ^= e >>> 16;
	    g += d;
	    e += f;
	    e ^= f << 10;
	    h += e;
	    f += g;
	    f ^= g >>> 4;
	    a += f;
	    g += h;
	    g ^= h << 8;
	    b += g;
	    h += a;
	    h ^= a >>> 9;
	    c += h;
	    a += b;
	}

	for (i = 0; i < SIZE; i += 8) { /* fill in mem[] with messy stuff */
	    if (flag) {
		a += rsl[i];
		b += rsl[i + 1];
		c += rsl[i + 2];
		d += rsl[i + 3];
		e += rsl[i + 4];
		f += rsl[i + 5];
		g += rsl[i + 6];
		h += rsl[i + 7];
	    }
	    a ^= b << 11;
	    d += a;
	    b += c;
	    b ^= c >>> 2;
	    e += b;
	    c += d;
	    c ^= d << 8;
	    f += c;
	    d += e;
	    d ^= e >>> 16;
	    g += d;
	    e += f;
	    e ^= f << 10;
	    h += e;
	    f += g;
	    f ^= g >>> 4;
	    a += f;
	    g += h;
	    g ^= h << 8;
	    b += g;
	    h += a;
	    h ^= a >>> 9;
	    c += h;
	    a += b;
	    mem[i] = a;
	    mem[i + 1] = b;
	    mem[i + 2] = c;
	    mem[i + 3] = d;
	    mem[i + 4] = e;
	    mem[i + 5] = f;
	    mem[i + 6] = g;
	    mem[i + 7] = h;
	}

	if (flag) { /* second pass makes all of seed affect all of mem */
	    for (i = 0; i < SIZE; i += 8) {
		a += mem[i];
		b += mem[i + 1];
		c += mem[i + 2];
		d += mem[i + 3];
		e += mem[i + 4];
		f += mem[i + 5];
		g += mem[i + 6];
		h += mem[i + 7];
		a ^= b << 11;
		d += a;
		b += c;
		b ^= c >>> 2;
		e += b;
		c += d;
		c ^= d << 8;
		f += c;
		d += e;
		d ^= e >>> 16;
		g += d;
		e += f;
		e ^= f << 10;
		h += e;
		f += g;
		f ^= g >>> 4;
		a += f;
		g += h;
		g ^= h << 8;
		b += g;
		h += a;
		h ^= a >>> 9;
		c += h;
		a += b;
		mem[i] = a;
		mem[i + 1] = b;
		mem[i + 2] = c;
		mem[i + 3] = d;
		mem[i + 4] = e;
		mem[i + 5] = f;
		mem[i + 6] = g;
		mem[i + 7] = h;
	    }
	}

	isaac();
	count = SIZE;
    }