pcgrandom = {
const pcg32_t = Uint16Array.from([
Math.random() * (1<<16), Math.random() * (1<<16),
Math.random() * (1<<16), Math.random() * (1<<16)
]);
return function(){
const state0 = pcg32_t[0];
const state1 = pcg32_t[1];
const state2 = pcg32_t[2];
const state3 = pcg32_t[3];
const mult0 = 22609;
const mult1 = 62509;
const mult2 = 19605;
const mult3 = 32557;
const inc0 = 5125;
const inc1 = 31614;
const inc2 = 63335;
const inc3 = 33024;
const s0m3 = state0 * mult3;
const s1m2 = state1 * mult2;
const s1m3 = state1 * mult3;
const s2m1 = state2 * mult1;
const s2m2 = state2 * mult2;
const s2m3 = state2 * mult3;
const s3m0 = state3 * mult0;
const s3m1 = state3 * mult1;
const s3m2 = state3 * mult2;
const s3m3 = state3 * mult3;
const new_state3 = (s3m3 & 0xFFFF) + inc3;
const new_state2 =
(s3m3 >>> 16) + (s3m2 & 0xFFFF) +
(s2m3 & 0xFFFF) + inc2 +
(new_state3 >>> 16);
const new_state1 =
(s3m2 >>> 16) + (s3m1 & 0xFFFF) +
(s2m3 >>> 16) + (s2m2 & 0xFFFF) +
(s1m3 & 0xFFFF) + inc1 +
(new_state2 >>> 16);
const new_state0 =
(s3m1 >>> 16) + (s3m0 & 0xFFFF) +
(s2m2 >>> 16) + (s2m1 & 0xFFFF) +
(s1m3 >>> 16) + (s1m2 & 0xFFFF) +
(s0m3 & 0xFFFF) + inc0 +
(new_state1 >>> 16);
pcg32_t[0] = new_state0;
pcg32_t[1] = new_state1;
pcg32_t[2] = new_state2;
pcg32_t[3] = new_state3;
const xorshifted = ((state0 << 21) >>> 0) +
(((state0 >> 2) ^ state1) << 5) +
(((state1 >> 2) ^ state2) >> 11);
const rot = state0 >> 11;
return (((xorshifted >>> rot) | (xorshifted << ((-rot) & 31))) >>> 0) / 0x100000000;
}
}