Close

Startup

A project log for Another Table-Based Stream Scrambler

Non-reversible, non-cryptographic scrambler for PRNG, 16 bits at a time.

yann-guidon-ygdesYann Guidon / YGDES 4 hours ago0 Comments

So far I have chosen the AES SBoxes to initialise the bi-LUT.

Remember : with the rotation trick the only thing that matters is to initialise the LUT with an equal amount of 0s and 1s. The AES SBox seemed like a quick way to get you there cheaply, you can immediately pump data through it.

Note : this is also a great way to make a biased generator (if the bias is not too strong), just initialise the required number of 0s and 1s in the LUT for the required ratio.

Now what's the "expensive way", the "worst case" ? Initialise the LUT with one half 0xFFFF and the other 0x0000. And no entropy at all in the inputs : keep them at 0. And FG=0 too. This forces the system to bootstraps into PRNG mode the hardest way... It was not easy and several shortcomings have been found.

I was not happy to add more internal bits, and even less happy to add a counter : this is the sign that "something wrong" happens and needs to be broken up. Well, in this case, it is... But then what is the minimum number of bits ?

First test estimate 10K iterations but it's hard to be sure, when can the LUT be considered "OK" ?

Have a look at scrambler_startup.tgz

(note: I use Braille Unicode to represent 8 bits in one glyph, displays OK with chrome)

The test starts at

LUT:
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿

Can it be worse ?

The trick is to start it up. Hence the 0xAA as a XOR in one input, though it would be better fed from a LFSR8 (which also feeds the rotation). But the fixed XOR is enough in this case as the rotation exchanges some bits between the empty and the full zone.

iteration: 1 LUT:
⢀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
iteration: 8 LUT:
⣿⣸⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣸⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣾⠇⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀⠿
iteration: 16 LUT:
⡿⣾⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡿⣠⠀⠀⣸⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⢏⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣾⠇⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣼⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀⣼
iteration: 32 LUT:
⣿⣾⠀⠀⠀⠀⠀⠏⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⣿⣀⠀⠟⠇⣿⣸⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣎⠇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠟⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⢏⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣃⣷⣿⣿⣿⣿⠀⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⠏⣿⣾⠇⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣸⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣼⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀⠿⣿⣿⣿⣿⢀⠀

So the 0xAA address, by chance, points to a place where there are set bits while the other address has no bit, they sort of serve as "swapping areas" in the beginning. That's why a LFSR8 would be good.

iteration: 128 LUT:
⣰⠝⠀⠀⠀⠀⣀⠃⣿⠀⠀⠀⠀⠀⢀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠁⣼⠁⣿
⢀⠛⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠏
⠀⠀⠀⠀⠀⠀⠀⠀⡿⡇⠃⣼⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣿⠁⣿⠏⢀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡏⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⠾⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠟⠀⠀⢁⣿⣿⣠⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣎⠇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⠿
⠀⣠⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣰⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀⠁⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣇⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣺⣼⠟⠃⣿⣿⣿⠟⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠇⣰⣿⣿⢀⠟⣿⣿⣿⣿⣽⣟⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⠟⡜⣿⣿⣿⣿⣠⡿⣿⣿⣿⣿⣿⣿⠝⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣃⣿⢀⢁⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⠀⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣼⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣠⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣾⠞⣿⣿⣿⣿⣿⣿⣾⠼⣿⣿⣳⣿⣸⠽
iteration: 256 LUT:
⠲⠇⠸⠜⠀⠀⠆⠾⣿⠀⠀⠀⠀⠀⣡⠀⠀⠀⣸⠀⠀⠀⠀⠀⠇⣿⠀⠀⠃⣸⠀⡿
⢀⠛⠏⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠏⣿
⠀⢀⠀⠀⠁⠏⠀⠀⡿⣡⠃⣼⠀⠀⠀⠀⠀⠀⠀⠀⣿⢠⣿⣿⠁⣿⣠⣸⡏⣰⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡏⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡸⠏
⠀⠀⠀⠀⠂⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠹⣸⡟⣾⠀⠀⣿⠾⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠄⣽⠟⣿⣿⡢⣿⠃⣿⣰⠀⠀⠏⣪⠰⠀⠀⠀⠀⠀⠀⠀⠇⡏⠀⠀
⠼⡰⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣽⠀⠙⠀⠀⠘⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⠟
⠀⠬⢃⣼⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠘⠠⣿⣿⣿⣿⣾⠀⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⢟⣿⣀⠃⠇⠇⣿⢏⣿⣿⣿⣿⡠⠇⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⢟⣿⣿⣿⣇⣿⡌⠀⣿⣿⣿⣿⣼⠇⠀⠟⣀⠇⣠⠀⣿⣿⣿⣿⣿⣿⣿⣿
⣸⢏⣿⣿⣿⣸⣿⣿⢀⠀⠿⢁⣿⣾⠇⣿⣿⣿⣿⣿⣽⣟⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⠠⠋⣿⣿⣿⣿⣀⡰⣿⣿⣿⣿⣿⣿⠝⣿⣣⣿⣿⣿⣿⣸⣿⣿⣿⣿⣿⣿⣱⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣃⣿⡀⣀⣿⣯⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣼⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣁⣿⣿⣿⠁⣿
⠟⣹⠀⡿⣿⣿⣿⣿⣿⣿⣿⣿⣸⠀⣿⣿⣼⠽⠟⣿⣿⣿⣿⣿⠀⠀⠿⣿⠟⠁⣰⣣
iteration: 512 LUT:
⣿⣲⠁⠃⠂⠀⠍⠼⢂⠇⠀⠀⠀⠀⣿⣿⣸⠀⡰⠀⠀⠀⠀⠀⣸⠿⣿⣿⠃⣸⣾⡐
⠀⠂⠏⣿⠁⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣼⠇⠀⠀⠀⠀⠇⣯⠝⣾⠀⠀⠀⠀⣠⠀
⣐⠀⠀⠀⠁⠏⠃⠼⣿⢁⡿⣬⠀⠀⠀⠀⠀⠀⠀⠀⣴⣑⣾⡀⠁⢀⣧⠇⡏⣰⠀⠀
⠀⠇⠀⠀⠀⠀⠀⠀⠀⠀⠁⠾⠌⠀⠀⠀⠀⠀⡀⠀⠀⠀⠰⠀⠟⣿⣀⠀⠀⡹⢀⣿
⣯⣠⠀⠃⢁⠁⣀⠀⠀⠀⠻⠀⠀⠀⠁⢳⠏⣽⣼⠀⣿⣀⣿⢾⡠⠀⣿⠾⠀⠀⣻⣀
⠀⠀⠟⣛⡸⢠⣽⡹⠌⠃⣿⣀⣻⣿⣣⢸⠀⠀⢹⣣⠀⠆⠀⠀⠀⠀⠟⣰⠀⠏⣿⣹
⣺⢧⠀⠀⠀⠁⠁⣿⠀⠀⠆⡸⠀⠀⠛⢀⠀⠀⠀⠀⠐⣿⠙⠈⡿⣡⠀⠀⠀⠀⠀⠀
⠀⠀⠑⢟⠀⠀⡈⠀⠀⠀⠀⠀⠀⠀⣿⣿⠇⢐⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠌⢠⠀
⣿⢃⠿⢀⣿⣳⣿⣿⣿⣀⣿⣿⣿⣿⠀⠀⠀⠀⣿⣿⣁⠀⠐⠏⣿⣿⣾⠀⣿⣿⣰⡿
⠣⣰⣿⣿⣿⣿⣿⣿⠎⠹⣸⡜⠎⠀⣱⢿⣿⣿⣿⣿⠑⢀⣿⣿⣿⣿⣿⣿⣿⣿⠃⣿
⣿⣿⣿⣿⢟⣿⢃⢧⡿⣰⢀⣣⣿⣿⣿⣿⢇⣹⠄⠀⢁⣁⡇⠂⣀⡿⢀⠀⠟⣿⣿⣿
⣸⢏⣿⣸⣿⣸⣿⣿⣿⢀⠀⠀⠀⠎⠇⣿⣿⣿⣿⣿⠇⠃⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⢟⢿⣰⠀⣿⣿⠇⣿⣿⣿⣼⠏⣿⣿⢎⡾⣣⣿⣿⣿⢏⣃⣿⣿⣿⣿⣿⣿⣱⣿⢀⠀
⣿⣿⣿⣿⣿⣿⣺⡃⢇⣾⠿⣼⣿⣿⣿⣿⣿⣿⣿⣿⣯⣡⢀⡿⣰⡿⣿⣿⠟⣿⣿⣿
⣡⠑⣿⣟⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡜⠀⣼⡿⣿⣾⣳⡼⣿⣿⣿⣿⣁⣿⣿⣿⣿⣑
⠀⠀⠀⡿⣲⠀⣿⣿⣿⣿⣿⣿⣸⠀⣿⣿⠀⠠⣹⢀⣿⣾⣿⣿⠠⠀⠣⣿⠃⠀⡵⣿
iteration: 1024 LUT:
⢀⣬⣯⠏⠿⣀⠡⢏⣿⣱⠀⠀⠼⡷⡾⣲⣇⢟⡿⢹⣿⠀⠠⠀⣿⠝⡰⡿⠯⠀⠻⡿
⠓⣃⠀⡿⣠⠀⣿⢀⣇⣽⡿⣿⣿⢀⠀⠀⠇⣠⠀⠬⠀⠿⢀⠏⣒⠻⠀⠀⠿⣻⣈⠀
⣸⠍⠃⣀⢏⣎⣏⣾⣼⠉⣟⡠⣶⢃⠀⠀⠀⠀⠃⠀⠧⠀⡄⣿⣼⠆⣷⣀⣃⣀⣿⣰
⠇⡢⠀⠀⠀⠁⠀⠀⠿⠐⣸⠟⠌⠀⠀⠀⠇⣀⡀⠀⣰⠜⢀⠇⠟⣄⣀⠀⠀⠇⠽⢇
⣯⣠⣼⠀⢁⠁⣅⡸⠀⠀⣠⡠⡿⣰⢄⠿⣿⡀⢸⢇⡡⣱⣰⡯⠽⢀⣠⠃⣿⣓⠀⣠
⣃⠫⠂⡿⣯⣸⣼⠿⣱⣼⡬⠫⠀⠷⣀⠯⣀⠀⠞⡸⠼⠏⣁⠇⣾⠇⠟⣰⣰⠀⣿⣹
⣼⠏⠂⡀⠏⣀⣿⣾⠰⠀⠃⣴⠀⠀⠛⢀⠀⠃⠀⡱⣄⠗⠙⠈⡿⣡⠀⣀⠀⠀⠀⠀
⣷⣠⡻⡿⠀⠀⡈⠀⠀⠀⠀⠼⣿⡠⣿⣿⡹⠀⠀⠠⠡⣿⡿⣿⠢⠰⠀⠀⠀⠌⠌⠿
⠀⠇⠣⣆⢀⠏⣿⣈⠜⡿⣿⣿⡿⣿⣠⠏⠇⠀⠿⣯⢐⠰⠋⠟⣿⣿⠟⣸⣿⢃⣿⢜
⠣⣰⠁⣿⣸⣿⠑⢟⣠⠕⣧⣃⡃⣾⣣⡿⠿⣿⣿⢏⠦⠜⣘⢏⣾⣿⣼⠌⠀⠠⠀⠀
⣿⢣⢾⣧⠅⢟⢀⠀⣼⡼⠎⡉⠁⣿⣾⠁⠌⠿⣪⡀⣸⢤⢏⣠⠀⣀⢿⣳⣅⣿⣄⡸
⠀⡯⣿⣸⣸⠟⣿⣿⠀⠇⠇⣸⣀⠁⣹⣐⡀⠌⣁⣇⠝⠀⣌⣷⣠⡿⣿⣿⣧⠀⠟⣿
⣿⣸⣩⢠⠃⣓⣜⠌⣿⣿⠟⠄⣿⣿⡄⡳⣣⣿⠇⣿⢀⡠⣿⣿⠇⣿⣿⣯⣿⣠⠀⠀
⣿⣿⣿⣿⠇⣻⣿⣩⠾⠀⠀⠁⠠⠯⣿⣿⣨⡿⣿⣿⣿⡿⢀⡿⣰⡿⣀⠜⠟⣿⣼⠿
⢈⣏⡿⣿⣡⡼⣻⣀⣿⣿⣿⣬⠣⣿⡼⢃⠯⣼⣿⣾⠆⢆⣿⣿⣿⣿⣾⠏⣎⠐⠾⠤
⣏⣿⠏⣯⡹⠀⣿⣼⠼⠀⣿⣿⣀⠇⣡⠣⠜⠡⣿⣺⣠⠀⡏⣾⠀⠀⣿⣧⡀⠁⣁⣣

At this point, data are fuzzy but still chunky:

iteration: 2048 LUT:
⣠⠏⢽⣠⡵⣀⠎⠘⠓⢽⡶⣟⠂⠁⣊⠠⡐⠼⡜⡾⡣⡭⡃⡿⡌⠮⡏⠠⠁⠜⣧⢟
⠸⡿⣣⣇⠉⡟⣘⠿⠻⠿⠙⣞⠂⠀⢁⣠⣿⣀⣿⣿⢾⡿⣰⠍⢶⡿⣾⠀⣿⠻⡧⠞
⠼⡲⠁⠇⠖⡻⣸⠈⠧⣨⣌⡸⠄⡿⣣⡀⡠⠀⢁⣳⠏⡻⠃⣀⠲⡀⠾⡸⠁⢸⣸⠅
⡰⣎⣀⢇⠀⠁⢏⣽⠿⣈⡞⣊⠁⢃⣿⡾⣿⣏⡀⠇⠌⠇⢀⢿⣿⠏⠇⡱⣾⠿⠇⣧
⣡⡼⠼⠀⣢⠒⣚⢰⣯⣻⠏⢺⠈⠠⣾⢀⠀⠟⠴⠉⢐⠶⣆⠄⢿⠺⣯⠃⢟⣸⣽⣮
⣦⣿⠏⣮⠿⣽⢩⣿⣘⢗⠇⣃⣸⠀⡰⡸⢽⣀⢉⠌⣡⢾⡋⢿⠏⣀⡾⣠⡏⢌⣁⣱
⡸⠃⠌⡢⢟⢃⠏⢜⠄⣡⣣⣩⣾⠀⢆⠐⠿⢙⠰⡈⠃⣤⢄⠴⣡⠏⣯⠟⠟⠆⢜⠀
⡼⠏⠂⣸⣸⠀⠒⠂⣾⡆⢇⡻⠏⣃⣯⣠⠜⡽⢈⣿⠆⠸⢋⣮⠃⣚⡡⣸⣲⠉⣆⠹
⠛⣎⠂⡿⡸⠀⡷⣰⠇⣁⣿⢉⣸⠿⠰⡭⠀⠸⢿⣿⣹⢀⠏⣼⣀⣼⠀⠍⣰⡿⠏⣀
⠄⣹⡠⠟⣬⠐⠇⢀⠇⠀⣀⡫⢡⠞⣣⡿⣠⡣⣿⢏⡶⠀⣘⢏⠕⡾⣑⣿⠷⠏⠩⣀
⣽⠘⣻⣮⡸⡿⣿⣿⠌⠀⠁⠷⡳⣳⣽⣾⠾⢼⡮⠏⠂⢼⡠⠟⠁⡈⢧⣿⣟⣿⣾⣞
⢊⠖⣀⣢⠡⡭⣘⡠⣣⡠⣰⣑⠿⠀⢲⡷⣾⠐⢝⣤⠍⠸⣟⢀⣼⠆⣏⣀⡎⠲⣹⣿
⠞⣛⣀⠇⣽⠝⠁⣡⠀⠻⣼⠀⠿⠸⣃⠼⣳⣨⣓⠕⠹⢝⡻⢝⠀⡾⣸⠀⣿⣿⣿⣸
⣿⢽⢟⣿⣦⡼⠧⡠⡀⠁⠁⠖⢠⡻⠦⡿⡠⠇⣜⣎⠼⠀⣡⣺⢁⣡⣸⠸⢼⠺⢰⢟
⠁⠍⢜⠟⣃⢸⡁⠍⠔⠱⡸⢁⣄⡟⡃⣞⠒⢲⣹⣿⣿⢀⠂⠜⣿⢀⠀⠢⠙⣿⠟⠁
⣸⠎⠧⣿⠁⣀⣹⡿⠃⡇⣘⢟⢇⣝⢄⠎⣀⡠⠜⠨⠀⠏⢞⠙⢔⠈⣹⣰⢹⣞⣠⠮
iteration: 4096 LUT:
⡮⠥⣁⣼⢵⣸⠃⣻⣵⣭⣰⠔⢸⠆⡙⢿⣸⡺⣠⡊⣀⣝⣶⠍⡡⠭⠘⡿⠻⠳⢙⡏
⢇⢌⣺⡉⣟⣦⡦⣴⡁⡄⡊⡄⠍⣄⠧⠠⡇⢺⡼⠱⠃⢓⢣⡃⣻⡭⣶⠠⠴⡚⠁⢋
⢃⣷⡝⡨⠴⠓⣇⣺⣿⢋⡹⠙⣂⡭⣘⠽⣞⢯⢟⢐⡃⠡⢿⣁⣷⢏⠁⣂⠉⣿⢂⣠
⢟⡛⠶⣮⣷⢷⢹⣃⠉⢱⠦⠽⡹⣋⣿⠘⢫⢟⠝⣡⣫⣆⢘⠅⠂⡆⡠⠋⣍⣿⡱⠉
⢴⣸⣾⠾⠋⡯⣝⢲⣞⡾⡧⢈⠈⠒⠐⠗⠸⠃⡲⠸⠻⣓⢑⣛⣽⠊⠊⠸⢞⡡⢟⠇
⡍⠛⢹⣺⠀⢆⠀⢷⠟⡿⠔⠍⠔⡓⡾⢜⣤⣲⣼⢇⣑⣣⣐⣖⢿⢜⢋⣋⣀⣈⢂⢠
⣃⡞⡞⠭⢾⢽⡁⡭⢇⣻⣰⠓⡟⠓⠧⢧⠷⣮⣷⠟⡀⣼⢞⣠⢣⠔⣙⡠⣏⠜⠀⠃
⢂⡍⣬⡰⢤⣧⣘⢬⠗⡖⠾⡇⠤⡪⢶⣃⠞⣷⢒⡕⠂⢓⡏⢑⠺⡐⡤⣜⣄⠍⡼⢚
⣳⠏⢞⠧⢅⣥⣴⠋⢼⣯⡂⢾⢕⣨⡻⢘⣔⠘⡆⡭⠱⣰⠡⣐⡷⢖⣈⣂⣋⢽⠤⢆
⣹⢦⠁⣰⠰⣳⠀⣹⡀⡾⣡⠁⠶⣝⣩⢮⢌⢡⢂⢞⡜⠿⠬⣵⡺⣯⢃⢯⠣⡡⣜⠇
⣱⡎⡾⠓⠰⠃⡅⠨⣦⣸⠖⣆⠷⡌⡶⡺⣐⠺⢐⠗⣿⢍⣦⠻⣵⠊⠙⣡⠫⡷⣯⢸
⣾⡥⣐⠢⢿⣅⣸⡯⣾⢯⢼⡂⠌⠈⢰⢺⡣⠱⡙⣺⣠⢀⢓⠬⠷⠢⡳⡭⠐⣲⠶⠒
⣀⣩⡾⡹⠑⠶⢆⡮⢄⢤⠽⡀⠑⡣⢋⠀⠼⡿⢃⢿⣀⢯⣆⢠⠕⠪⣢⠠⣆⠌⡙⠐
⠘⡰⠶⢍⠬⢂⣱⡳⠕⠥⡄⠰⡚⠽⡅⢫⡸⡓⣐⡵⡧⠌⢴⠉⣏⠫⢔⠹⢤⢆⣶⠰
⣧⣠⣜⠚⣝⣠⢎⡆⠑⣀⢝⢣⣷⡣⣀⡖⠭⠚⢷⢧⠀⡷⢠⣭⢏⡦⠊⡻⠿⢐⢚⠼
⢿⢨⣽⡇⣅⢑⡰⡧⡾⢀⣠⠸⠋⠡⢩⡹⡫⠖⡼⢿⣔⡺⣊⣲⢃⢤⠺⡧⠡⣳⡃⣱
iteration: 8192 LUT:
⠚⢴⢋⠱⡣⢵⣂⢊⢬⣴⡼⠸⢢⠵⣵⢊⣓⠸⣒⠊⠇⣭⢮⢐⡡⡔⡒⠌⠝⠜⠴⠧
⠒⢙⢀⡦⢻⡧⣿⢭⢚⢷⡦⣖⢧⡟⢾⢂⡢⢝⠆⡹⢔⠩⣯⠒⠱⣂⣃⣶⡵⢒⡾⣸
⡺⡏⢇⣓⣲⢤⣆⣧⣖⣧⠅⢗⠹⣌⣛⣬⢃⠙⣉⢎⡆⣝⠛⣪⢰⠌⢍⡉⠦⡢⢤⢜
⠛⣡⢋⠶⢳⠦⢐⠲⠴⡑⢖⣏⡢⣆⠟⡹⢞⠱⡶⣠⣌⢛⡐⢆⠱⢐⠅⡠⣠⢴⢬⣨
⣭⠦⡱⡯⠝⠍⡔⢩⢯⡊⢛⡜⣮⡧⡄⢣⣙⢚⢅⠋⣟⠧⠸⣛⣝⠿⠵⠐⡟⢌⢐⡆
⢙⠢⣏⡚⢬⠛⢪⣩⣷⡂⡝⠔⡸⠊⣏⠿⣾⣎⢧⣯⣵⡎⢳⢺⠕⢲⡞⠗⠑⢤⠛⠴
⡧⣌⡫⢙⡰⠈⣗⣭⡄⠟⠅⢪⠊⣅⡃⡄⢂⢔⢕⢉⠖⡣⡝⡢⡤⠓⡎⢣⠗⣈⠣⠎
⠖⣳⢿⠾⣵⢘⢝⣈⣭⣆⠻⠯⢺⢙⠣⠄⡱⢣⣥⠌⠇⢷⢲⠥⠚⣰⣴⡩⢙⠹⣆⡇
⣝⡨⣦⠴⢃⠵⡸⢾⣁⡎⢗⠱⢰⣚⢆⢸⣱⠲⡾⡂⣬⣟⡲⢟⡑⣒⠒⡥⡞⣧⢎⡻
⣃⣥⣯⠵⣅⡣⡲⠑⠰⢇⣩⠅⡇⣶⢎⢰⣒⣭⠵⠊⢳⡜⣈⣵⢣⢲⣜⡨⡽⣝⡣⡂
⣌⢗⢌⢔⢋⡹⠯⢵⡞⣪⣁⢡⣬⣁⡾⠋⡐⣛⡾⡃⠌⢾⣔⣌⡆⠫⣴⠴⠝⣴⠩⣇
⢤⢉⡮⣻⡻⣊⢼⡣⢺⠖⣓⠷⠤⠀⢊⢥⡾⡹⣠⡳⠸⡥⡇⣤⡏⣶⠓⡵⣒⡊⢉⢭
⡁⢶⠺⣷⢢⣢⣊⡘⣣⣎⠽⠍⡇⡞⡌⡴⡷⢮⢻⡕⠼⡃⠄⡚⢩⡶⠫⡭⠊⠸⢛⢼
⡆⣂⣈⣐⢇⢀⠡⢱⠅⡈⠄⠮⡳⡹⢟⢣⢜⡚⢨⢆⡼⡘⠈⠄⢥⡌⠠⠥⢈⣺⡨⢞
⣴⠢⣍⢾⠳⣀⣃⡡⠟⡑⠛⣜⡵⡩⣅⠢⢁⣋⠰⢫⢀⣏⣇⠅⣩⡃⢷⠚⢾⣑⡑⠓
⣣⡃⠮⣮⠷⠼⠨⡹⠊⠀⡢⣰⡿⣐⢵⠢⠜⠓⢶⠏⣲⣳⢑⢚⢸⢬⣶⢿⠻⢶⠟⡿

At this point the chunks start to disappear:

iteration: 16384 LUT:
⠕⠼⠶⣞⢓⢗⠐⡵⢌⠹⡈⡧⣝⣄⠢⣼⣬⣶⢶⡫⠣⣸⡻⢜⣃⠈⢲⠵⣠⡡⡢⠚
⢒⡊⠰⡢⠍⡅⠥⠄⡩⡠⣌⣾⣩⠼⡱⠵⢭⢕⣈⡣⢡⡏⡂⢛⡙⣔⡾⢄⢜⢌⠨⣑
⣊⢉⣎⣗⢸⡑⢆⡋⡠⣘⡷⣁⡣⠆⣻⡋⡯⢌⢸⣱⣮⣝⡑⠽⠎⢅⡭⡁⠧⣨⠊⣝
⣊⡇⣼⠶⣕⣇⢩⢯⠇⠱⣣⠽⢢⡫⢜⡘⡇⣳⣱⢤⠇⣹⢏⣾⡪⠴⠊⢫⡞⡊⢽⡑
⠆⣎⣠⣕⢭⣛⠨⡶⣧⣾⣾⡝⣓⡷⠰⢚⣣⢵⠇⢲⠣⠺⠒⠗⠈⣑⠱⢶⠡⢂⣝⢙
⠦⠪⡊⣇⢶⡘⡌⠍⢴⡆⠌⣜⡞⡎⡾⠣⡡⢯⣯⢴⠢⢫⢵⢮⡽⣅⢼⢐⡋⡯⡚⠞
⣅⢶⡝⡡⠔⠕⠺⠦⡗⡵⡂⡃⢰⢽⣧⡡⣵⡶⡂⠂⡈⡌⣼⢆⢟⣒⡄⠆⡾⡙⣴⢑
⢏⢔⢈⣴⡠⡴⡏⣇⡰⡾⡢⡅⡤⡨⣂⡴⡿⡥⣠⣭⡨⠘⡦⢏⢞⢋⢬⣓⡅⣑⣮⢈
⠨⣎⡎⠟⣸⣖⡆⡆⣚⣺⠵⢙⢘⢩⠄⣎⣉⢑⠳⢎⢇⡻⢮⢓⢼⡅⠸⣂⢱⠴⠜⣉
⣆⠏⠘⢼⡸⣥⠛⠷⢷⣢⠑⢼⢎⠱⣹⠚⠎⣑⢥⠼⣶⠷⣎⠠⡋⣪⡞⢭⡕⠫⠽⣑
⡫⡫⣭⣫⡨⣾⡚⣻⡾⠺⠥⣐⣄⡜⠞⡅⠲⡲⡐⣮⡡⣉⠬⠃⡩⣂⡀⣄⠪⡲⠷⢃
⡛⣘⠤⢌⠿⠙⠖⠘⢐⠿⢠⡞⡥⢨⢐⠲⣬⢤⡰⠯⠽⢧⣡⢀⣄⢨⡦⣅⢦⣶⠑⣯
⢕⢨⠦⣹⢉⠚⣄⣹⣐⢁⣇⣆⣰⠓⡵⢃⣺⢉⣓⢎⠹⠕⡰⢴⢵⢓⣕⡳⠩⠁⢋⣃
⣧⢸⣢⢌⠎⠞⢢⢷⢺⠗⣍⠿⠈⠓⠌⢫⡩⢓⠣⣒⡙⡦⣁⢝⠭⣨⡲⢳⢂⡑⣋⣪
⠣⢵⠻⣋⣱⣴⠃⣘⣨⣚⠞⠸⠅⣡⢍⢓⣂⠇⣼⣑⠶⢘⣭⡍⣫⠈⠵⣊⠟⣋⣁⣌
⣎⠺⡷⠪⡍⡫⣬⡱⢈⣓⢹⣹⡩⡺⠣⣟⡂⠶⡷⣱⡪⢉⢷⠶⢷⡨⡄⠬⡓⡉⣫⣶
iteration: 32768 LUT:
⢲⠈⠕⣀⡚⣪⢙⡗⣮⡽⢔⡡⢃⣶⢨⢔⢻⡶⢑⡯⣐⡪⣟⢺⢄⡡⣃⢜⡌⠙⡱⢬
⠓⢷⣙⢜⢕⡪⡹⠗⡊⢈⣙⢑⠧⠦⡘⢋⣇⢚⣋⠎⡕⠱⣂⡣⠵⣟⠡⡛⢝⢫⣪⡎
⠅⣩⠈⡘⢬⠆⡯⡶⢫⣆⣜⣚⡌⣳⣣⢳⡟⣷⠠⠲⣍⣪⡎⢄⠌⢳⣡⡬⠞⣼⣇⠲
⠗⢖⡆⡟⢡⣾⣍⣉⣙⠶⣫⣓⡑⢪⠋⢣⢻⡘⠝⠮⣇⡐⢽⣬⣚⠣⢸⡟⠿⣆⡩⣁
⣯⡢⣄⢨⣝⡙⠋⢌⠏⢖⣣⢨⣓⠦⡆⣙⣥⠭⠮⡂⢦⢇⠱⢅⢚⣗⣜⠀⠠⡗⢋⢞
⠊⡫⡶⢖⢡⡋⣢⣁⢲⣐⣛⡅⣊⢍⡪⠓⠝⣊⢤⣕⠆⢁⣭⣐⢑⡍⢕⠍⣯⣙⣒⣹
⠥⡑⡭⠹⢼⡌⠚⢓⡫⠐⠑⡡⠅⠀⣠⢻⢞⢄⠬⡐⣒⣱⢞⡰⢓⠹⡧⠾⢽⡵⢭⣛
⣍⢄⠻⠡⣫⠿⠱⣸⠊⠏⠰⣥⢘⠬⢬⡸⡷⣱⣕⡾⢂⢺⠾⣸⠇⢈⠒⢴⡚⡼⡡⢁
⡼⢄⠔⡺⣄⣽⡭⢹⡽⣈⢮⢧⠒⡣⣰⣣⣘⣵⠰⢩⠦⣖⢉⡘⢛⠦⢐⠴⢰⡆⠉⠀
⣯⢢⡙⠞⢖⡒⢮⢁⣡⣒⠈⣧⠞⡮⡄⡰⣐⠌⣛⠶⣼⢸⢿⣖⣼⠼⢨⡄⢊⡩⣅⣠
⡛⢇⠒⡱⢉⣸⡝⡍⢰⠶⣆⡷⠰⡴⣗⢎⢶⢈⢾⠒⢜⠓⢩⢿⢩⢹⣞⠫⢲⡡⣫⡜
⣯⠭⡞⢹⠵⣠⢶⢃⡰⣋⢵⢦⢘⣎⠋⢍⠮⣑⢸⣗⣷⣈⠆⢧⣎⢊⢘⡜⡝⢱⠘⣛
⢯⠶⣿⢞⢼⢙⢴⢮⠕⣂⢂⢍⢕⡜⢁⣉⣰⢧⡄⣉⡔⡡⢅⠡⡍⡟⣧⣺⣡⢜⡏⠋
⠪⢸⠟⣣⢍⢴⡘⢪⢸⢒⢱⡫⣏⢭⠋⡧⣬⣠⠜⡊⠉⢷⣎⣏⢿⢁⣕⢢⡌⢰⣣⣊
⡏⠞⣥⠖⠲⣦⢚⡶⡤⠀⡖⢅⣴⡢⢝⢘⠕⠞⣊⡡⠤⡔⣺⡷⣐⣲⠊⣒⢰⣠⠔⣃
⣙⢇⢥⢜⣞⢌⢓⡔⠃⢖⡺⡧⡔⢕⣜⠨⡖⣃⢘⢅⢅⢎⣱⣲⢤⡇⡝⣋⣵⠂⡿⢣

We can consider it "good" now...

My point so far is

A LFSR8 would help a lot here.

....

Indeed it effectively helps : the patterns start to "look good" around 5K iterations, no much difference at 10K, so the LFSR8 is clearly a good thing.

Discussions