{"id":3492,"date":"2026-06-08T11:26:10","date_gmt":"2026-06-08T09:26:10","guid":{"rendered":"https:\/\/moijari.com\/?p=3492"},"modified":"2026-07-09T21:35:05","modified_gmt":"2026-07-09T19:35:05","slug":"back-to-terttu-2-thoughts","status":"publish","type":"post","link":"https:\/\/moijari.com\/?p=3492","title":{"rendered":"Back to terttu 2: Thoughts, Finally server stays up 2: even better&#8230; Intermission there will be ressu3&#8230; last version of newressu.c published, winter sudokues published"},"content":{"rendered":"\n<p>Kaikki oikeudet pid\u00e4tet\u00e4\u00e4n \u00a9. Jos haluat tukea projektia (osallistua palvelinkustannuksiin, tarjota koodausvissyn tai tulevaisuudessa maksaa palkkaa), laita muutaman euron lahjoituksesi Danske Bank tilille FI15 8312 0710 7275 83 (SWIFT:DABAFIHH), maksun saaja Jari Kuivaniemi. Kirjoita viestikentt\u00e4\u00e4n nimesi ja asuinpaikkakuntasi. Kiitokset lahjoituksestasi.<\/p>\n\n\n\n<p>T\u00e4ss\u00e4 postissa uutena kuvat, seuraava on tietenkin kuninkaanportti, Suomenlinna. Kuvat ovat aina omiani. Muutkin kuvat t\u00e4ss\u00e4 postissa paitsi talvikuva ovat kuninkaanportin l\u00e4heisyydest\u00e4. Olen yritt\u00e4nyt valita kuvat niin, ettei niiss\u00e4 ole ket\u00e4\u00e4n, varsinkaan lapsia..<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" loading=\"lazy\" width=\"1024\" height=\"491\" src=\"https:\/\/moijari.com\/wp-content\/uploads\/2026\/07\/IMG_0641-1024x491.jpeg\" alt=\"\" class=\"wp-image-3912\" srcset=\"https:\/\/moijari.com\/wp-content\/uploads\/2026\/07\/IMG_0641-1024x491.jpeg 1024w, https:\/\/moijari.com\/wp-content\/uploads\/2026\/07\/IMG_0641-300x144.jpeg 300w, https:\/\/moijari.com\/wp-content\/uploads\/2026\/07\/IMG_0641-768x368.jpeg 768w, https:\/\/moijari.com\/wp-content\/uploads\/2026\/07\/IMG_0641.jpeg 1280w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Tuo edellisiss\u00e4 posteissa tehty palvelin (<a href=\"https:\/\/moijari.com:5008\/\">https:\/\/moijari.com:5008\/<\/a>) on pysynyt hyvin pystyss\u00e4.<\/p>\n\n\n\n<p>Jos etsit kes\u00e4sudokuja, artikkelissa (<a href=\"https:\/\/moijari.com\/?p=2930\">https:\/\/<\/a><a href=\"https:\/\/moijari.com\/?p=2930\" target=\"_blank\" rel=\"noreferrer noopener\">moijari<\/a><a href=\"https:\/\/moijari.com\/?p=2930\">.com\/?p=2930<\/a>) l\u00f6ytyy niit\u00e4. <\/p>\n\n\n\n<p>Lis\u00e4\u00e4 sudokuja: (<a href=\"https:\/\/moijari.com\/?p=3372\">https:\/\/moijari.com\/?p=3372<\/a>), Experimental: (<a href=\"https:\/\/moijari.com\/?p=3344\">https:\/\/moijari.com\/?p=3344<\/a>), Vol1: (<a href=\"https:\/\/moijari.com\/?p=3331\">https:\/\/moijari.com\/?p=3331<\/a>), Vol2, Vol3, Vol4: (<a href=\"https:\/\/moijari.com\/?p=3336\">https:\/\/moijari.com\/?p=3336<\/a>) ja Vol 5: (<a href=\"https:\/\/moijari.com\/?p=3372\">https:\/\/moijari.com\/?p=3372<\/a>).<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/moijari.com\/wp-content\/uploads\/2026\/07\/IMG_2841.jpeg\" alt=\"\" class=\"wp-image-3906\" width=\"277\" height=\"371\" srcset=\"https:\/\/moijari.com\/wp-content\/uploads\/2026\/07\/IMG_2841.jpeg 240w, https:\/\/moijari.com\/wp-content\/uploads\/2026\/07\/IMG_2841-225x300.jpeg 225w\" sizes=\"(max-width: 277px) 100vw, 277px\" \/><\/figure>\n\n\n\n<p>Jos haluat tehd\u00e4 ensimm\u00e4iset talvisudokut, ne ovat t\u00e4ss\u00e4. Ensimm\u00e4iset sudokut ovat helpompia, ja ne vaikeutuvat ment\u00e4ess\u00e4 eteenp\u00e4in (clues pienenee), samoin jos rounds (ro) on suurempi, sudokun pit\u00e4isi olla vaikeampi: (vaikeimmissa kannattaa kokeilla snyder merkint\u00f6j\u00e4. Noissa experimental sudokuissa on viel\u00e4 steps (st), joka kasvaa vaikeammissa sudokuissa)<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>    A   B   C   D   E   F   G   H   I  \n  +-----------+-----------+-----------+\nA |           | 4       9 | 5   6     |\nB |     7   6 | 5         | 9   1   4 |\nC | 5       4 | 6       2 | 3   8   7 |\n  +-----------+-----------+-----------+\nD | 1   5     |           | 4         |\nE |     3     |           | 1   2   6 |\nF |         9 |         3 |           |\n  +-----------+-----------+-----------+\nG | 9   8   2 | 7   5   4 |     3   1 |\nH |         5 | 3       1 | 2   4   9 |\nI |     4     |         6 | 8   7   5 |\n  +-----------+-----------+-----------+\n  s:0 gu:0 st:0 ro:2 clues:45\n    A   B   C   D   E   F   G   H   I  \n  +-----------+-----------+-----------+\nA | 9   2     |         7 | 4       6 |\nB | 7   5   4 | 3   6     | 2       8 |\nC | 1       8 |           |           |\n  +-----------+-----------+-----------+\nD | 2       6 |           |     4   9 |\nE | 3         | 7   2     | 1   8     |\nF | 5   7   1 | 4   9   8 |         2 |\n  +-----------+-----------+-----------+\nG | 8         |     5   4 | 9         |\nH | 4   9   7 | 2   8     |           |\nI | 6   1   5 |     7     |     2     |\n  +-----------+-----------+-----------+\n  s:0 gu:0 st:0 ro:2 clues:44\n    A   B   C   D   E   F   G   H   I  \n  +-----------+-----------+-----------+\nA | 6       5 | 9   1     |         4 |\nB |         2 |     7     |           |\nC | 9   8     |         3 | 7   6   1 |\n  +-----------+-----------+-----------+\nD | 4       7 | 8   2     | 1       3 |\nE | 3   1   6 | 5         |     4     |\nF | 2   9   8 |           |           |\n  +-----------+-----------+-----------+\nG | 7   4   3 |           | 8       2 |\nH | 8   2   9 | 7   3   5 | 4   1     |\nI | 5       1 |     8     |           |\n  +-----------+-----------+-----------+\n  s:0 gu:0 st:0 ro:2 clues:43\n    A   B   C   D   E   F   G   H   I  \n  +-----------+-----------+-----------+\nA | 6   9     |     2   5 | 7   8   1 |\nB | 2       4 |     8     |     6     |\nC | 8   1     |         7 |     2   3 |\n  +-----------+-----------+-----------+\nD | 1         |           | 2   3     |\nE | 5   6   7 | 2       9 | 1         |\nF | 3       2 |           |           |\n  +-----------+-----------+-----------+\nG |     5   6 | 7       3 |           |\nH | 4         |     9   8 | 3   7   6 |\nI | 7         |     1   2 | 5       4 |\n  +-----------+-----------+-----------+\n  s:0 gu:0 st:0 ro:2 clues:42\n    A   B   C   D   E   F   G   H   I  \n  +-----------+-----------+-----------+\nA | 5   3   7 | 8   1     | 4   6     |\nB |         2 | 5       4 |         7 |\nC | 4         |           | 1   5   9 |\n  +-----------+-----------+-----------+\nD |     2   9 | 6         |     4     |\nE | 6   7   4 | 9   2   1 | 8   3     |\nF |         5 | 4         |     2   6 |\n  +-----------+-----------+-----------+\nG |     6   8 |           |           |\nH | 9       3 | 2   7   8 |         4 |\nI |           | 3         |     7     |\n  +-----------+-----------+-----------+\n  s:0 gu:0 st:0 ro:2 clues:41\n    A   B   C   D   E   F   G   H   I  \n  +-----------+-----------+-----------+\nA |           |         9 | 8   1   4 |\nB |     1     |           | 5       3 |\nC | 9   5   4 | 1   8   3 |     6   2 |\n  +-----------+-----------+-----------+\nD | 3   7   8 |         4 | 6       1 |\nE | 4         |           | 3   2   7 |\nF | 1         |     3   7 | 9         |\n  +-----------+-----------+-----------+\nG |         3 | 6         | 2         |\nH | 7       9 | 3   2     |           |\nI |     2     |     7   8 | 4         |\n  +-----------+-----------+-----------+\n  s:0 gu:0 st:0 ro:3 clues:40\n    A   B   C   D   E   F   G   H   I  \n  +-----------+-----------+-----------+\nA |         2 | 5   3     |           |\nB |         8 |     1   7 | 3   2   9 |\nC |     6   7 |         4 |     1     |\n  +-----------+-----------+-----------+\nD |           |     2     | 5         |\nE |         4 |     6     |     3   1 |\nF | 8   9     | 7   5     | 4         |\n  +-----------+-----------+-----------+\nG | 1   7   5 | 9   8   6 | 2   4   3 |\nH | 6   2   3 |         5 |           |\nI | 4         |         2 |           |\n  +-----------+-----------+-----------+\n  s:0 gu:0 st:0 ro:2 clues:39\n    A   B   C   D   E   F   G   H   I  \n  +-----------+-----------+-----------+\nA |         1 |           | 5   7   4 |\nB | 8   4   7 | 1   5   9 | 6       3 |\nC |     2     | 7         | 8   9   1 |\n  +-----------+-----------+-----------+\nD | 3   7   9 | 6         |           |\nE |           | 3         |           |\nF |     5     |     7     |         6 |\n  +-----------+-----------+-----------+\nG |     9     | 4       6 |     5   2 |\nH | 2         | 5         | 7   3   8 |\nI | 1   8     |           |         9 |\n  +-----------+-----------+-----------+\n  s:0 gu:0 st:0 ro:3 clues:38\n    A   B   C   D   E   F   G   H   I  \n  +-----------+-----------+-----------+\nA | 3         | 5         |         4 |\nB | 4   5     |           | 6       1 |\nC |     8     |         9 |         5 |\n  +-----------+-----------+-----------+\nD | 7       1 | 4       8 |         3 |\nE | 5   2   8 |           |     4   7 |\nF |     4   3 |     5   7 | 2   1   8 |\n  +-----------+-----------+-----------+\nG |     6   4 |     1     |           |\nH |     1     |           | 4   3   2 |\nI | 9         |           | 1   8     |\n  +-----------+-----------+-----------+\n  s:0 gu:0 st:0 ro:3 clues:37\n    A   B   C   D   E   F   G   H   I  \n  +-----------+-----------+-----------+\nA | 9   1   6 |     4     |     5     |\nB |           |           |     8   6 |\nC |     7     | 2         |     4     |\n  +-----------+-----------+-----------+\nD |     9     |     8     |     7     |\nE | 3   4     |         2 |           |\nF |     5     |         7 | 2   6     |\n  +-----------+-----------+-----------+\nG | 7   6   5 |         8 | 1   3   4 |\nH | 2   3     | 7       4 | 8   9   5 |\nI |     8     |           |     2     |\n  +-----------+-----------+-----------+\n  s:0 gu:0 st:0 ro:3 clues:36\n    A   B   C   D   E   F   G   H   I  \n  +-----------+-----------+-----------+\nA | 8         |           |     1     |\nB |     9     |     3   1 | 7         |\nC |           | 5       6 |         3 |\n  +-----------+-----------+-----------+\nD | 1       2 | 4   8   3 |         6 |\nE |         6 |         9 |           |\nF | 5   8     |         7 | 2         |\n  +-----------+-----------+-----------+\nG |     2   8 | 9         | 3         |\nH |     6   1 |     7   2 |     8   5 |\nI | 3         |     6     | 9   2     |\n  +-----------+-----------+-----------+\n  s:0 gu:0 st:0 ro:2 clues:35\n    A   B   C   D   E   F   G   H   I  \n  +-----------+-----------+-----------+\nA | 5   3     |     9   2 |           |\nB | 1         | 8   7     |     5     |\nC |     2     |     1     |           |\n  +-----------+-----------+-----------+\nD |           |           | 4         |\nE |         5 | 7   4     | 6         |\nF |     7     |         9 |     2     |\n  +-----------+-----------+-----------+\nG | 4         | 2   8   1 |         6 |\nH |     6     | 4   3   5 |         2 |\nI |     8   2 | 9   6     | 5   4     |\n  +-----------+-----------+-----------+\n  s:0 gu:0 st:0 ro:3 clues:34\n    A   B   C   D   E   F   G   H   I  \n  +-----------+-----------+-----------+\nA | 5         |         4 |     2   7 |\nB |         6 | 9       7 | 4       1 |\nC |     4     |           | 5   8     |\n  +-----------+-----------+-----------+\nD |           |         1 |           |\nE | 1         | 4   8   2 |     6   5 |\nF | 9   2     |     3     | 7         |\n  +-----------+-----------+-----------+\nG | 4   7     | 2       9 |           |\nH |           | 3   7     | 8         |\nI |     5     |     4   8 |           |\n  +-----------+-----------+-----------+\n  s:0 gu:0 st:0 ro:3 clues:33\n    A   B   C   D   E   F   G   H   I  \n  +-----------+-----------+-----------+\nA | 6         |     3     |     1   2 |\nB |           |           |     3     |\nC |     5   1 | 8         | 7       4 |\n  +-----------+-----------+-----------+\nD | 2   9   3 |     8   4 |           |\nE | 5   8     |           |     2     |\nF |     7   6 | 3   9     | 4         |\n  +-----------+-----------+-----------+\nG | 4         |           |         9 |\nH | 9   3     | 2         |         1 |\nI |         5 |           | 2   8     |\n  +-----------+-----------+-----------+\n  s:0 gu:0 st:0 ro:3 clues:32\n    A   B   C   D   E   F   G   H   I  \n  +-----------+-----------+-----------+\nA | 5         |         6 |     1   7 |\nB |         3 | 8   5   1 |     4     |\nC |           |           |           |\n  +-----------+-----------+-----------+\nD | 9         |           |         8 |\nE |         8 |         3 |           |\nF | 1   5     |           | 2       4 |\n  +-----------+-----------+-----------+\nG |     8     | 1   4   9 | 3       6 |\nH | 3   7     |         8 |     2   1 |\nI | 6         |     7   2 |           |\n  +-----------+-----------+-----------+\n  s:0 gu:0 st:0 ro:3 clues:31\n    A   B   C   D   E   F   G   H   I  \n  +-----------+-----------+-----------+\nA |           | 6         |         4 |\nB | 7       9 |         4 | 8   2     |\nC | 4         |         2 | 5       7 |\n  +-----------+-----------+-----------+\nD |           |           | 6       5 |\nE |     3     | 8       7 |     9     |\nF |           |         6 |     7     |\n  +-----------+-----------+-----------+\nG | 6   1     |         5 | 3         |\nH | 2       8 | 4         | 7         |\nI | 3         |         1 |     4     |\n  +-----------+-----------+-----------+\n  s:0 gu:0 st:0 ro:4 clues:30\n    A   B   C   D   E   F   G   H   I  \n  +-----------+-----------+-----------+\nA |           |     8   9 |           |\nB |           | 4   2     |           |\nC |           | 5         |         3 |\n  +-----------+-----------+-----------+\nD |           | 3       4 | 1       8 |\nE | 5         | 6   9     |     2     |\nF | 7         |           |         9 |\n  +-----------+-----------+-----------+\nG | 2       1 |           |         5 |\nH | 3       7 |     5   6 | 4         |\nI | 4   9   5 | 8         |     7     |\n  +-----------+-----------+-----------+\n  s:0 gu:0 st:0 ro:4 clues:29\n    A   B   C   D   E   F   G   H   I  \n  +-----------+-----------+-----------+\nA | 7         | 1         | 9       5 |\nB |           |     4     |     8   1 |\nC |     4     |           |           |\n  +-----------+-----------+-----------+\nD |     1     | 3   7   9 |     6     |\nE | 8       9 | 4         |           |\nF |         6 | 5   8     | 2         |\n  +-----------+-----------+-----------+\nG |     3     |           |         6 |\nH |           | 2         |           |\nI | 4   8   5 |     9     | 3         |\n  +-----------+-----------+-----------+\n  s:0 gu:0 st:0 ro:3 clues:28\n    A   B   C   D   E   F   G   H   I  \n  +-----------+-----------+-----------+\nA | 5         |         6 | 1         |\nB | 8   4     |           |     6     |\nC |           | 4       2 | 8       3 |\n  +-----------+-----------+-----------+\nD | 3         |           |           |\nE | 7   2   8 |           |           |\nF | 6       1 | 2   5     |           |\n  +-----------+-----------+-----------+\nG |           | 9         | 3   7     |\nH |     7   9 |     4     |         8 |\nI |           |     1     |         4 |\n  +-----------+-----------+-----------+\n  s:0 gu:0 st:0 ro:4 clues:27\n    A   B   C   D   E   F   G   H   I  \n  +-----------+-----------+-----------+\nA |         6 |         5 |     9     |\nB |     9     |     1   4 | 7         |\nC |     8     |     7     | 1         |\n  +-----------+-----------+-----------+\nD | 3   2     |     6     |           |\nE | 7         |     2     |     4     |\nF |     6   8 |         1 |     2     |\n  +-----------+-----------+-----------+\nG |           |           |     3   4 |\nH |           |         7 | 5         |\nI |           | 3         |     6     |\n  +-----------+-----------+-----------+\n  s:0 gu:0 st:0 ro:6 clues:26\n    A   B   C   D   E   F   G   H   I  \n  +-----------+-----------+-----------+\nA |           |     4     | 5         |\nB | 2         |     1     |         8 |\nC |           |         8 |     6   3 |\n  +-----------+-----------+-----------+\nD | 7   6     |         5 | 9         |\nE | 4         |           |           |\nF |         2 |           |         4 |\n  +-----------+-----------+-----------+\nG | 8   4     |           |         7 |\nH |     2   5 | 9         |     3     |\nI |           | 3   6     | 8         |\n  +-----------+-----------+-----------+\n  s:0 gu:0 st:0 ro:7 clues:25\n    A   B   C   D   E   F   G   H   I  \n  +-----------+-----------+-----------+\nA |           | 8       1 |           |\nB |         5 |         3 |     6     |\nC |           |         9 | 7       5 |\n  +-----------+-----------+-----------+\nD |           |     1     | 2         |\nE |         1 |           |           |\nF | 9       3 | 4   7     |           |\n  +-----------+-----------+-----------+\nG | 2         |           | 5       6 |\nH |         4 | 6         |         3 |\nI |           | 3   8     |         4 |\n  +-----------+-----------+-----------+\n  s:0 gu:0 st:0 ro:4 clues:24\n    A   B   C   D   E   F   G   H   I  \n  +-----------+-----------+-----------+\nA |           | 5       4 | 9   8     |\nB |         7 |     2     |           |\nC |     6     |         1 |           |\n  +-----------+-----------+-----------+\nD |           | 3         | 6   4     |\nE |     2     |           |           |\nF | 7         |         9 |           |\n  +-----------+-----------+-----------+\nG |           | 8         | 2       9 |\nH |         3 |           |     6     |\nI | 8         | 1         | 7       5 |\n  +-----------+-----------+-----------+\n  s:0 gu:0 st:0 ro:7 clues:23\n    A   B   C   D   E   F   G   H   I  \n  +-----------+-----------+-----------+\nA |           |         9 |           |\nB |           | 8         | 5       3 |\nC |           |         6 |         7 |\n  +-----------+-----------+-----------+\nD | 7         |           | 8         |\nE |           |         5 |         6 |\nF | 1         | 4   9   3 |           |\n  +-----------+-----------+-----------+\nG |         3 | 5         |     6     |\nH |     8   4 |           | 2         |\nI | 9         | 3         |           |\n  +-----------+-----------+-----------+\n  s:0 gu:0 st:0 ro:5 clues:22\n    A   B   C   D   E   F   G   H   I  \n  +-----------+-----------+-----------+\nA |     2     |     3     | 5   4     |\nB |         9 |     2     |           |\nC | 6         |           | 7         |\n  +-----------+-----------+-----------+\nD | 5   3   1 |           |     6     |\nE |           | 8       7 |           |\nF |           |           | 1         |\n  +-----------+-----------+-----------+\nG |     7     |           | 6         |\nH | 8   1     |     4     |           |\nI |           |           |     9     |\n  +-----------+-----------+-----------+\n  s:0 gu:0 st:0 ro:6 clues:21\n    A   B   C   D   E   F   G   H   I  \n  +-----------+-----------+-----------+\nA | 9         |     8     |           |\nB |         7 |           |     3     |\nC | 2       6 | 1   9     |           |\n  +-----------+-----------+-----------+\nD |           |     5     |           |\nE |     3     |     6     |           |\nF | 8         |           | 4   2     |\n  +-----------+-----------+-----------+\nG |     7     |           |           |\nH |     6     |           |         9 |\nI |         4 |         5 | 1         |\n  +-----------+-----------+-----------+\n  s:0 gu:0 st:0 ro:6 clues:20<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/moijari.com\/wp-content\/uploads\/2026\/07\/IMG_2204.jpeg\" alt=\"\" class=\"wp-image-3943\" width=\"393\" height=\"222\" srcset=\"https:\/\/moijari.com\/wp-content\/uploads\/2026\/07\/IMG_2204.jpeg 320w, https:\/\/moijari.com\/wp-content\/uploads\/2026\/07\/IMG_2204-300x169.jpeg 300w\" sizes=\"(max-width: 393px) 100vw, 393px\" \/><\/figure>\n\n\n\n<p>T\u00e4\u00e4lt\u00e4 l\u00f6ytyv\u00e4t ensimm\u00e4iset joulusudokut (<a href=\"https:\/\/moijari.com\/?p=3277\">https:\/\/moijari.com\/?p=3277<\/a>).<\/p>\n\n\n\n<p>Sitten artikkelin varsinaiseen asiaan:<\/p>\n\n\n\n<p>Palvelin tulostaa seuraavankaltaisen sivun:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Hello world!\n\nT\u00e4m\u00e4 on artikkelin https:\/\/moijari.com?p=2990 testiohjelma.\n\nOhjelma l\u00f6ytyy t\u00e4st\u00e4 linkist\u00e4 https:\/\/moijari.com:5008. Muutin my\u00f6s html-versiota palvelimesta, se l\u00f6ytyy linkist\u00e4 https:\/\/moijari.com:5009. Tee minulle palvelus ja painele n\u00e4it\u00e4 hetki, niin saan tarkistettua ett\u00e4 ne toimivat oikein.\n\nSeuraava kappale sis\u00e4lt\u00e4\u00e4 ressun tekemi\u00e4 satunnaisbittej\u00e4. Ne ovat t\u00e4ss\u00e4 vain tilan t\u00e4ytteeksi.\n00000 815351217487910435669192172422951946696212529\n00001 920813973742415362649994596558010088465040675\n00002 240957540572627626019678885898823975217177955\n00003 588737120498722070263736259491307364795007018\n00004 099088516044714427477581177561019219994794028\n00005 671836924618350610422165035986981986642212559\n00006 903624466108326292581456051717969002015996523\n00007 174214962253101545608670175806344579522732446\n00008 582106588595739282558149472893211536930107155\n00009 065077579202041683237466269212366696651544942\n\nDBS3 version 0.15 \u00a9, sha256(fb51c52020f4658aea34fa92a464228702888f91f21a688b72e72b6b5a9db329)<\/code><\/pre>\n\n\n\n<p>ja tulostaa seuraavankaltaisen html:n:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;!doctype html&gt;\n&lt;html lang=\"fi\"&gt;\n\t&lt;head&gt;\n\t\t&lt;meta charset=\"utf-8\"&gt;\n\t\t&lt;title&gt;dbs3&lt;\/title&gt;\n\t\t&lt;meta name=\"author\" content=\"Jari Kuivaniemi\"&gt;\n\t\t&lt;meta name=\"copyright\" content=\"Jari Kuivaniemi\"&gt;\n\t\t&lt;meta name=\"format-detection\" content=\"telephone=no\"&gt;\n\t\t&lt;meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"&gt;\n\t&lt;\/head&gt;\n\t&lt;body&gt;\n\t\t&lt;h1&gt;Hello world!&lt;\/h1&gt;\n\t\t&lt;p&gt;T\u00e4m\u00e4 on artikkelin\n\t\t\t&lt;a href=\"https:\/\/moijari.com?p=2990\"&gt;https:\/\/moijari.com?p=2990&lt;\/a&gt;\n\t\t\ttestiohjelma.\n\t\t&lt;\/p&gt;\n\t\t&lt;p&gt;Ohjelma l\u00f6ytyy t\u00e4st\u00e4 linkist\u00e4\n\t\t\t&lt;a href=\"https:\/\/moijari.com:5008\"&gt;https:\/\/moijari.com:5008&lt;\/a&gt;. Muutin my\u00f6s\n\t\t\thtml-versiota palvelimesta, se l\u00f6ytyy linkist\u00e4\n\t\t\t&lt;a href=\"https:\/\/moijari.com:5009\"&gt;https:\/\/moijari.com:5009&lt;\/a&gt;. Tee minulle\n\t\t\tpalvelus ja painele n\u00e4it\u00e4 hetki, niin saan tarkistettua ett\u00e4 ne toimivat oikein.\n\t\t&lt;\/p&gt;\n\t\t&lt;p&gt;Seuraava kappale sis\u00e4lt\u00e4\u00e4 ressun tekemi\u00e4 satunnaisbittej\u00e4. Ne ovat t\u00e4ss\u00e4 vain tilan\n\t\tt\u00e4ytteeksi.&lt;\/p&gt;\n\t\t&lt;code&gt;00000 913172437725583125656813961989111569116651622&lt;br&gt;\n\t\t\t00001 668091985964193551241952738289133440806661184&lt;br&gt;\n\t\t\t00002 549190318300809959223119033099901889257655218&lt;br&gt;\n\t\t\t00003 216375827226876174409310032753849534437058619&lt;br&gt;\n\t\t\t00004 412828931075417056583548732955519735473364867&lt;br&gt;\n\t\t\t00005 778209799556888690223374723126772360482730235&lt;br&gt;\n\t\t\t00006 394862247871294866478215333972664754081371156&lt;br&gt;\n\t\t\t00007 437070499366697726219758787597618390377022999&lt;br&gt;\n\t\t\t00008 894827086752475366734695623137289506478059144&lt;br&gt;\n\t\t\t00009 611628644764270179833791103311275126306740678&lt;br&gt;\n\t\t&lt;\/code&gt;\n\t\t&lt;p&gt;DBS3 version 0.15 \u00a9,\n\t\tsha256(fb51c52020f4658aea34fa92a464228702888f91f21a688b72e72b6b5a9db329)&lt;\/p&gt;\n\t&lt;\/body&gt;\n&lt;\/html&gt;<\/code><\/pre>\n\n\n\n<p>Samoin ressusta on kehitin uuden version 2 &#8220;ressu2&#8221; eli t\u00e4ss\u00e4 taas kerrataan alkuper\u00e4ist\u00e4 tavoitetta: palvelimen pit\u00e4isi oppia ymm\u00e4rt\u00e4m\u00e4\u00e4n seuraavanlaisia rivej\u00e4:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>'memberid' = \"customerid\", 'memberapp' = \"customerid\"\n'memberid' = \"countryid\", 'memberapp' = \"countryid\"\n'memberid' = \"productid\", 'memberapp' = \"productid\"\n'memberid' = \"billid\", 'memberapp' = \"billid\"\n'appid' = \"country\", 'chapter' = \"header\", 'memberid' = \"countryid\"\n'appid' = \"country\", 'chapter' = \"header\", 'memberid' = \"countryname\"\n'countryid' = \"fi\", 'countryname' = \"Finland\"\n'appid' = \"company\", 'chapter' = \"header\", 'memberid' = \"companyid\"\n'appid' = \"company\", 'chapter' = \"header\", 'memberid' = \"companyname\"\n'appid' = \"company\", 'chapter' = \"header\", 'memberid' = \"companyaddress\"\n'appid' = \"company\", 'chapter' = \"header\", 'memberid' = \"companyzip\"\n'appid' = \"company\", 'chapter' = \"header\", 'memberid' = \"companycountry\"\n'appid' = \"company\", 'chapter' = \"header\", 'memberid' = \"fiscalyear\"\n'appid' = \"company\", 'chapter' = \"header\", 'memberid' = \"fiscalperiod\"\n'companyid' = \"1\", 'companyname' = \"Vene Oy\", 'companyaddress' = \"venekatu 1\", 'companyzip' = \"00500\", 'companycountry' = \"fi\", 'fiscalyear' = \"2025\", 'fiscalperiod' = \"1\"\n'appid' = \"customer\", 'chapter' = \"header\", 'memberid' = \"customerid\"\n'appid' = \"customer\", 'chapter' = \"header\", 'memberid' = \"customername\"\n'appid' = \"customer\", 'chapter' = \"header\", 'memberid' = \"customeraddress\"\n'appid' = \"customer\", 'chapter' = \"header\", 'memberid' = \"customerzip\"\n'appid' = \"customer\", 'chapter' = \"header\", 'memberid' = \"customercountry\"\n'customerid' = \"1\", 'customername' = \"Asiakas 1\", 'customeraddress' = \"asiakaskatu 1\", 'customerzip' = \"00500\", 'customercountry' = \"fi\"\n'customerid' = \"2\", 'customername' = \"Asiakas 2\", 'customeraddress' = \"asiakaskatu 2\", 'customerzip' = \"00500\", 'customercountry' = \"fi\"\n'customerid' = \"3\", 'customername' = \"Asiakas 3\", 'customeraddress' = \"asiakaskatu 3\", 'customerzip' = \"00500\", 'customercountry' = \"fi\"\n'appid' = \"product\", 'chapter' = \"header\", 'memberid' = \"productid\"\n'appid' = \"product\", 'chapter' = \"header\", 'memberid' = \"productname\"\n'appid' = \"product\", 'chapter' = \"header\", 'memberid' = \"productprice\"\n'productid' = \"1\", 'productname' = \"Vene\", 'productprice' = \"100\"\n'productid' = \"2\", 'productname' = \"Airot\", 'productprice' = \"10\"\n'productid' = \"3\", 'productname' = \"Tappi\", 'productprice' = \"5\"\n'appid' = \"bill\", 'chapter' = \"header\", 'memberid' = \"billid\"\n'appid' = \"bill\", 'chapter' = \"header\", 'memberid' = \"companyid\"\n'appid' = \"bill\", 'chapter' = \"header\", 'memberid' = \"customerid\"\n'appid' = \"bill\", 'chapter' = \"header\", 'memberid' = \"customername\"\n'appid' = \"bill\", 'chapter' = \"header\", 'memberid' = \"total\"\n'appid' = \"bill\", 'chapter' = \"lines\", 'memberid' = \"billid\"\n'appid' = \"bill\", 'chapter' = \"lines\", 'memberid' = \"billlineid\"\n'appid' = \"bill\", 'chapter' = \"lines\", 'memberid' = \"productid\"\n'appid' = \"bill\", 'chapter' = \"lines\", 'memberid' = \"productname\"\n'appid' = \"bill\", 'chapter' = \"lines\", 'memberid' = \"productprice\"\n'appid' = \"bill\", 'chapter' = \"lines\", 'memberid' = \"quantity\"\n'appid' = \"bill\", 'chapter' = \"lines\", 'memberid' = \"amount\"\n'billid' = \"1\", 'companyid' = \"1\", 'customerid' = \"1\", 'customername' = \"Asiakas 1\", 'total' = \"115\"\n'billid' = \"1\", 'billlineid' = \"1\", 'productid' = \"1\", 'productname' = \"Vene\", 'productprice' = \"100\", 'quantity' = \"1\", 'amount' = \"100\"\n'billid' = \"1\", 'billlineid' = \"2\", 'productid' = \"1\", 'productname' = \"Airot\", 'productprice' = \"10\", 'quantity' = \"1\", 'amount' = \"10\"\n'billid' = \"1\", 'billlineid' = \"3\", 'productid' = \"1\", 'productname' = \"Tappi\", 'productprice' = \"5\", 'quantity' = \"1\", 'amount' = \"5\"\n'appid' = \"transaction\", 'chapter' = \"header\", 'memberid' = \"transactionid\"\n'appid' = \"transaction\", 'chapter' = \"header\", 'memberid' = \"companyid\"\n'appid' = \"transaction\", 'chapter' = \"header\", 'memberid' = \"customerid\"\n'appid' = \"transaction\", 'chapter' = \"header\", 'memberid' = \"customername\"\n'appid' = \"transaction\", 'chapter' = \"header\", 'memberid' = \"billid\"\n'appid' = \"transaction\", 'chapter' = \"header\", 'memberid' = \"fiscalyear\"\n'appid' = \"transaction\", 'chapter' = \"header\", 'memberid' = \"fiscalperiod\"\n'appid' = \"transactionline\", 'chapter' = \"lines\", 'memberid' = \"transactionid\"\n'appid' = \"transactionline\", 'chapter' = \"lines\", 'memberid' = \"transactionlineid\"\n'appid' = \"transactionline\", 'chapter' = \"lines\", 'memberid' = \"productid\"\n'appid' = \"transactionline\", 'chapter' = \"lines\", 'memberid' = \"productprice\"\n'appid' = \"transactionline\", 'chapter' = \"lines\", 'memberid' = \"quantity\"\n'appid' = \"transactionline\", 'chapter' = \"lines\", 'memberid' = \"amount\"\n'transactionid' = \"1\", 'companyid' = \"1\", 'customerid' = \"1\", 'customername' = \"Asiakas 1\", 'billid' = \"1\", 'fiscalyear' = \"2025\", 'fiscalperiod' = \"1\"\n'transactionid' = \"1\", 'transactionlineid' = \"1\", 'productid' = \"1\", 'productprice' = \"100\", 'quantity' = \"1\", 'amount' = \"100\"\n'transactionid' = \"1\", 'transactionlineid' = \"2\", 'productid' = \"2\", 'productprice' = \"10\", 'quantity' = \"1\", 'amount' = \"10\"\n'transactionid' = \"1\", 'transactionlineid' = \"3\", 'productid' = \"3\", 'productprice' = \"5\", 'quantity' = \"1\", 'amount' = \"5\"<\/code><\/pre>\n\n\n\n<p>, palvelin kirjoittaa seuraavankaltaisen lokin:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>20250830175147UTC starting dbs3 \"DBS3 version 0.09 \u00a9\", port:5008, https\n20250830175147UTC cert       xx xx xx xx...\n20250830175147UTC private    xx xx xx xx...\n20250830175147UTC server_https_init()\n20250830175147UTC SSL_library_init()\n20250830175147UTC OpenSSL_add_ssl_algorithms()\n20250830175147UTC OpenSSL_add_ciphers()\n20250830175147UTC OpenSSL_load_error_strings()\n20250830175147UTC SSLv23_server_method()\n20250830175147UTC SSL_CTX_new()\n20250830175147UTC SSL_CTX_use_certificate_file()\n20250830175147UTC SSL_CTX_use_PrivateKey_file()\n20250830175147UTC cert       xx xx xx xx...\n20250830175147UTC private    xx xx xx xx...\n20250830175147UTC SSL_CTX_load_verify_locations()\n20250830175147UTC server_basic_socket()\n20250830175147UTC server_getaddrinfo()\n20250830175147UTC getaddrinfo()\n20250830175147UTC server_socket()\n20250830175147UTC socket()\n20250830175147UTC server_bind()\n20250830175147UTC bind()\n20250830175147UTC freeaddrinfo()\n20250830175147UTC server_listen()\n20250830175147UTC listen()\n20250830175147UTC accept()\n20250830175201UTC ========================================\n20250830175201UTC dbs_time_vars()\n20250830175201UTC fork start (parent) getpid:12334 getppid:1\n20250830175201UTC fork()\n20250830175201UTC fork end (parent) pid:12335 getpid:12334 getppid:1\n20250830175201UTC server_close()\n20250830175201UTC init_child()\n20250830175201UTC close()\n20250830175201UTC close(s)\n20250830175201UTC cert       xx xx xx xx...\n20250830175201UTC close(s)\n20250830175201UTC private    xx xx xx xx...\n20250830175201UTC https_client()\n20250830175201UTC accept()\n20250830175201UTC SSL_new()\n20250830175201UTC SSL_set_fd()\n20250830175201UTC SSL_accept()\n20250830175201UTC SSL_get_peer_certificate(), No peer certificate\n20250830175201UTC SSL_read()\n20250830175201UTC ========================================\n20250830175201UTC dbs_time_vars()\n20250830175201UTC fork start (parent) getpid:12334 getppid:1\n20250830175201UTC fork()\n20250830175201UTC fork end (parent) pid:12336 getpid:12334 getppid:1\n20250830175201UTC init_child()\n20250830175201UTC server_close()\n20250830175201UTC close(s)\n20250830175201UTC close()\n20250830175201UTC cert       xx xx xx xx...\n20250830175201UTC close(s)\n20250830175201UTC private    xx xx xx xx...\n20250830175201UTC https_client()\n20250830175201UTC accept()\n20250830175201UTC SSL_new()\n20250830175201UTC SSL_set_fd()\n20250830175201UTC SSL_accept()\n20250830175201UTC SSL_get_peer_certificate(), No peer certificate\n20250830175201UTC SSL_read()\n20250830175201UTC SSL_read(), retval 540, errno: 0, SSL_get_error(): 0, ERR_get_error(): 0\n20250830175201UTC (540 bytes)\n20250830175201UTC GET \/ HTTP\/1.1\nHost: moijari.com:5008\nSec-Fetch-Dest: document\nUser-Agent: Mozilla\/5.0 (iPhone; CPU iPhone OS 18_6_2 like Mac OS X) AppleWebKit\/605.1.15 (KHTML, like Gecko) Version\/18.6 Mobile\/15E148 Safari\/604.1\nAccept: text\/html,application\/xhtml+xml,application\/xml;q=0.9,*\/*;q=0.8\nReferer: https:\/\/moijari.com:5008\/\nSec-Fetch-Site: same-origin\nSec-Fetch-Mode: navigate\nAccept-Language: en-GB,en;q=0.9\nPriority: u=0, i\nAccept-Encoding: gzip, deflate, br\nCookie: PHPSESSID=xx xx xx xx...\nConnection: keep-alive\n\n_registerTMCloneTable\n20250830175201UTC 1 reads, received 540 chars, read 540 total bytes, input buffer size 2048 chars, data=\"\n20250830175201UTC \"\n20250830175201UTC htmlmethod: \"GET\"\n20250830175201UTC htmlpath: \"\/\"\n20250830175201UTC htmlversion: \"HTTP\/1.1\"\n20250830175201UTC htmlfilename: \"\"\n20250830175201UTC htmlfileextension: \"\"\n20250830175201UTC htmlhost: \"moijari.com:5008\"\n20250830175201UTC htmluseragent: \"Mozilla\/5.0 (iPhone; CPU iPhone OS 18_6_2 like Mac OS X) AppleWebKit\/605.1.15 (KHTML, like Gecko) Version\/18.6 Mobile\/15E148 Safari\/604.1\"\n20250830175201UTC htmlcookie: \"PHPSESSID=xx xx xx xx...\"\n20250830175201UTC enter dba_loop()\n20250830175201UTC entering dba_loop()\n20250830175201UTC fetching cookies\n20250830175201UTC htmlsessionid: \"\"\n20250830175201UTC htmlmode: \"\"\n20250830175201UTC htmllanguage: \"\"\n20250830175201UTC end fetching cookies\n20250830175201UTC html prettyprinter\n20250830175201UTC buffers1: 0:96 1:1423 2:0 3:0 4:116 5:0 6:0 7:0 8:0\n20250830175201UTC buffers2: 0:96 1:0 2:0 3:0 4:0 5:0 6:0 7:1539 8:0\n20250830175201UTC buffers3: 0:96 1:0 2:0 3:0 4:0 5:0 6:0 7:0 8:1624\n20250830175201UTC html prettyprinter done.\n20250830175201UTC exit dba_loop2()\n20250830175201UTC entering dba_loop2()\n20250830175201UTC exiting dba_loop2()\n20250830175201UTC buffers(ssl): 0:196SSL_write()\n20250830175201UTC  1:0 2:0 3:0 4:0 5:0 6:0 7:0 8:1624SSL_write()\n20250830175201UTC HTTP\/1.0 200 OK\nLocation: \nServer: DBS3 version 0.09 \u00a9\nDate: Sat, 30 Aug 2025 17:52:01 GMT\nContent-Length: 1624\nSHA256: 14f9261ba8b2d0955cdcd88ce63cf1414837042ceeb56e99cbcd8f8b362a9f92\n\n\n\n20250830175201UTC &lt;!doctype html&gt;\n&lt;html lang=\"fi\"&gt;\n\t&lt;head&gt;\n\t\t&lt;meta charset=\"utf-8\"&gt;\n\t\t&lt;title&gt;dbs3&lt;\/title&gt;\n\t\t&lt;meta name=\"author\" content=\"Jari Kuivaniemi\"&gt;\n\t\t&lt;meta name=\"copyright\" content=\"Jari Kuivaniemi\"&gt;\n\t\t&lt;meta name=\"format-detection\" content=\"telephone=no\"&gt;\n\t\t&lt;meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"&gt;\n\t&lt;\/head&gt;\n\t&lt;body&gt;\n\t\t&lt;h1&gt;Hello world!&lt;\/h1&gt;\n\t\t&lt;p&gt;T\u00e4m\u00e4 on artikkelin\n\t\t\t&lt;a href=\"https:\/\/moijari.com?p=2990\"&gt;https:\/\/moijari.com?p=2990&lt;\/a&gt;\n\t\t\ttestiohjelma. Ohjelma l\u00f6ytyy t\u00e4st\u00e4 linkist\u00e4\n\t\t\t&lt;a href=\"https:\/\/moijari.com:5008\"&gt;https:\/\/moijari.com:5008&lt;\/a&gt;.\n\t\t&lt;\/p&gt;\n\t\t&lt;p&gt;Seuraava kappale sis\u00e4lt\u00e4\u00e4 ressun tekemi\u00e4 satunnaisbittej\u00e4. Ne ovat t\u00e4ss\u00e4 vain tilan\n\t\tt\u00e4ytteeksi.&lt;\/p&gt;\n\t\t&lt;code&gt;00000 20616874070457590523126122132497421268944884802220810261826959568&lt;br&gt;\n\t\t\t00001 17192985807111595612468232713117700741936846802133961244101879900&lt;br&gt;\n\t\t\t00002 02407386257484414673907086023803598802701388309148448685736962425&lt;br&gt;\n\t\t\t00003 50279311953963128957788744672545836449370328271465324371081029118&lt;br&gt;\n\t\t\t00004 70458842796761884608024944157410778280148696721938596935963966256&lt;br&gt;\n\t\t\t00005 05578472692405139090352146280861261687819185840399999490749778727&lt;br&gt;\n\t\t\t00006 42059647448790835009224071147698545710269723898238144550191259729&lt;br&gt;\n\t\t\t00007 92523533467026772824174205506373861584249958499398660047182445533&lt;br&gt;\n\t\t\t00008 17388179513424995966929981520791349290757431604968432604126712314&lt;br&gt;\n\t\t\t00009 12602138335914743028665941174114691854493502124843486708760074618&lt;br&gt;\n\t\t&lt;\/code&gt;\n\t\t&lt;p&gt;DBS3 version 0.09 \u00a9,\n\t\tsha256(0ff070a4dda2dc67e499d2eb5b5ddf1efce64863ad517fdf2509bdfb4955cd5b)&lt;\/p&gt;\n\t&lt;\/body&gt;\n&lt;\/html&gt;\n20250830175201UTC SSL connection using TLS_AES_128_GCM_SHA256\n20250830175201UTC dbs_query_vars()\n20250830175201UTC SSL_free()\n20250830175201UTC critical_wait()\n20250830175201UTC critical_post()\n20250830175201UTC server_close(news)\n20250830175201UTC close()\n20250830175201UTC fork end (child) pid:0 getpid:12336 getppid:12334\n20250830175201UTC exit_child()\n20250830175201UTC unlink dbs3pid12336.log\n20250830175201UTC ========================================<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/moijari.com\/wp-content\/uploads\/2026\/07\/IMG_2253.jpeg\" alt=\"\" class=\"wp-image-3946\" width=\"316\" height=\"421\" srcset=\"https:\/\/moijari.com\/wp-content\/uploads\/2026\/07\/IMG_2253.jpeg 240w, https:\/\/moijari.com\/wp-content\/uploads\/2026\/07\/IMG_2253-225x300.jpeg 225w\" sizes=\"(max-width: 316px) 100vw, 316px\" \/><\/figure>\n\n\n\n<p>(ehdotin teille lukijani ett\u00e4 lis\u00e4isitte tarvittavia tietoja siihen). Ajatus t\u00e4ss\u00e4 ensimm\u00e4isess\u00e4 versiossa oli m\u00e4\u00e4ritell\u00e4 maat (country), yritys (company), asiakas (customer), tuote (product), lasku(bill) ja liiketapahtuma (transaction).<\/p>\n\n\n\n<p>T\u00e4m\u00e4 oli t\u00e4ll\u00e4inen yksinkertaistettu malli, jossa sy\u00f6tet\u00e4\u00e4n lasku, ker\u00e4ill\u00e4\u00e4n sen perusteella (ei tilausta, toimitusta, ker\u00e4ily\u00e4 jne.). Samoin liiketapahtumat perustuivat yksinkertaiseen kirjanpitoon. <\/p>\n\n\n\n<p>Ajatus on ett\u00e4 n\u00e4iden perusteella voin mietti\u00e4 mit\u00e4 toimintoja terttuun tarvitaan. (mietin my\u00f6s pit\u00e4isik\u00f6 t\u00e4m\u00e4 scripti (ja xml kirjoittaa ja luoda kannasta esimerkiksi seuraavilla m\u00e4\u00e4rityksill\u00e4, ja miksei my\u00f6s tuloste)). Kun aikoinaan aloin mietti\u00e4 t\u00e4t\u00e4, mietin voisiko taulut rakentaa t\u00e4h\u00e4n(noin 1997-1998).<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>'memberid' = \"customerid\", 'memberapp' = \"customerid\"\n'memberid' = \"countryid\", 'memberapp' = \"countryid\"\n'memberid' = \"productid\", 'memberapp' = \"productid\"\n'memberid' = \"billid\", 'memberapp' = \"billid\"\n'appid' = \"country\", 'chapter' = \"header\", 'memberid' = \"countryid\"\n'appid' = \"country\", 'chapter' = \"header\", 'memberid' = \"countryname\"\n'countryid' = \"fi\", 'countryname' = \"Finland\"\n'appid' = \"company\", 'chapter' = \"header\", 'memberid' = \"companyid\"\n'appid' = \"company\", 'chapter' = \"header\", 'memberid' = \"companyname\"\n'appid' = \"company\", 'chapter' = \"header\", 'memberid' = \"companyaddress\"\n'appid' = \"company\", 'chapter' = \"header\", 'memberid' = \"companyzip\"\n'appid' = \"company\", 'chapter' = \"header\", 'memberid' = \"companycountry\"\n'appid' = \"company\", 'chapter' = \"header\", 'memberid' = \"fiscalyear\"\n'appid' = \"company\", 'chapter' = \"header\", 'memberid' = \"fiscalperiod\"\n'companyid' = \"1\", 'companyname' = \"Vene Oy\", 'companyaddress' = \"venekatu 1\", 'companyzip' = \"00500\", 'companycountry' = \"fi\", 'fiscalyear' = \"2025\", 'fiscalperiod' = \"1\"\n'appid' = \"customer\", 'chapter' = \"header\", 'memberid' = \"customerid\"\n'appid' = \"customer\", 'chapter' = \"header\", 'memberid' = \"customername\"\n'appid' = \"customer\", 'chapter' = \"header\", 'memberid' = \"customeraddress\"\n'appid' = \"customer\", 'chapter' = \"header\", 'memberid' = \"customerzip\"\n'appid' = \"customer\", 'chapter' = \"header\", 'memberid' = \"customercountry\"\n'customerid' = \"1\", 'customername' = \"Asiakas 1\", 'customeraddress' = \"asiakaskatu 1\", 'customerzip' = \"00500\", 'customercountry' = \"fi\"\n'customerid' = \"2\", 'customername' = \"Asiakas 2\", 'customeraddress' = \"asiakaskatu 2\", 'customerzip' = \"00500\", 'customercountry' = \"fi\"\n'customerid' = \"3\", 'customername' = \"Asiakas 3\", 'customeraddress' = \"asiakaskatu 3\", 'customerzip' = \"00500\", 'customercountry' = \"fi\"\n'appid' = \"product\", 'chapter' = \"header\", 'memberid' = \"productid\"\n'appid' = \"product\", 'chapter' = \"header\", 'memberid' = \"productname\"\n'appid' = \"product\", 'chapter' = \"header\", 'memberid' = \"productprice\"\n'productid' = \"1\", 'productname' = \"Vene\", 'productprice' = \"100\"\n'productid' = \"2\", 'productname' = \"Airot\", 'productprice' = \"10\"\n'productid' = \"3\", 'productname' = \"Tappi\", 'productprice' = \"5\"\n'appid' = \"bill\", 'chapter' = \"header\", 'memberid' = \"billid\"\n'appid' = \"bill\", 'chapter' = \"header\", 'memberid' = \"companyid\"\n'appid' = \"bill\", 'chapter' = \"header\", 'memberid' = \"customerid\"\n'appid' = \"bill\", 'chapter' = \"header\", 'memberid' = \"customername\"\n'appid' = \"bill\", 'chapter' = \"header\", 'memberid' = \"total\"\n'appid' = \"bill\", 'chapter' = \"lines\", 'memberid' = \"billid\"\n'appid' = \"bill\", 'chapter' = \"lines\", 'memberid' = \"billlineid\"\n'appid' = \"bill\", 'chapter' = \"lines\", 'memberid' = \"productid\"\n'appid' = \"bill\", 'chapter' = \"lines\", 'memberid' = \"productname\"\n'appid' = \"bill\", 'chapter' = \"lines\", 'memberid' = \"productprice\"\n'appid' = \"bill\", 'chapter' = \"lines\", 'memberid' = \"quantity\"\n'appid' = \"bill\", 'chapter' = \"lines\", 'memberid' = \"amount\"\n'billid' = \"1\", 'companyid' = \"1\", 'customerid' = \"1\", 'customername' = \"Asiakas 1\", 'total' = \"115\"\n'billid' = \"1\", 'billlineid' = \"1\", 'productid' = \"1\", 'productname' = \"Vene\", 'productprice' = \"100\", 'quantity' = \"1\", 'amount' = \"100\"\n'billid' = \"1\", 'billlineid' = \"2\", 'productid' = \"1\", 'productname' = \"Airot\", 'productprice' = \"10\", 'quantity' = \"1\", 'amount' = \"10\"\n'billid' = \"1\", 'billlineid' = \"3\", 'productid' = \"1\", 'productname' = \"Tappi\", 'productprice' = \"5\", 'quantity' = \"1\", 'amount' = \"5\"\n'appid' = \"transaction\", 'chapter' = \"header\", 'memberid' = \"transactionid\"\n'appid' = \"transaction\", 'chapter' = \"header\", 'memberid' = \"companyid\"\n'appid' = \"transaction\", 'chapter' = \"header\", 'memberid' = \"customerid\"\n'appid' = \"transaction\", 'chapter' = \"header\", 'memberid' = \"customername\"\n'appid' = \"transaction\", 'chapter' = \"header\", 'memberid' = \"billid\"\n'appid' = \"transaction\", 'chapter' = \"header\", 'memberid' = \"fiscalyear\"\n'appid' = \"transaction\", 'chapter' = \"header\", 'memberid' = \"fiscalperiod\"\n'appid' = \"transactionline\", 'chapter' = \"lines\", 'memberid' = \"transactionid\"\n'appid' = \"transactionline\", 'chapter' = \"lines\", 'memberid' = \"transactionlineid\"\n'appid' = \"transactionline\", 'chapter' = \"lines\", 'memberid' = \"productid\"\n'appid' = \"transactionline\", 'chapter' = \"lines\", 'memberid' = \"productprice\"\n'appid' = \"transactionline\", 'chapter' = \"lines\", 'memberid' = \"quantity\"\n'appid' = \"transactionline\", 'chapter' = \"lines\", 'memberid' = \"amount\"\n'transactionid' = \"1\", 'companyid' = \"1\", 'customerid' = \"1\", 'customername' = \"Asiakas 1\", 'billid' = \"1\", 'fiscalyear' = \"2025\", 'fiscalperiod' = \"1\"\n'transactionid' = \"1\", 'transactionlineid' = \"1\", 'productid' = \"1\", 'productprice' = \"100\", 'quantity' = \"1\", 'amount' = \"100\"\n'transactionid' = \"1\", 'transactionlineid' = \"2\", 'productid' = \"2\", 'productprice' = \"10\", 'quantity' = \"1\", 'amount' = \"10\"\n'transactionid' = \"1\", 'transactionlineid' = \"3\", 'productid' = \"3\", 'productprice' = \"5\", 'quantity' = \"1\", 'amount' = \"5\"<\/code><\/pre>\n\n\n\n<p>Perustoimintoja varten tarvitsette ainakin salasanan<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>'uname' = \"testi\", 'password' = \"testaus\", 'language' = \"en\"<\/code><\/pre>\n\n\n\n<p>My\u00f6s edellisten postien MR8 tarvitsee logon:ia, vapaasti MR8 perustui v\u00e4limuisteihin ja per\u00e4kk\u00e4istiedostoon.<\/p>\n\n\n\n<p>(Kielist\u00e4: \u2019word\u2019 \u2019sijap\u00e4\u00e4te\u2019, \u2019sana\u2019, \u2019kieli\u2019 \u2019language\u2019, \u2019alphabet\u2019, \u2019aakkoset\u2019, \u2019compress\u2019, \u2019pakkaus\u2019. Muutamia \u2019integer\u2019 \u2019tyyppej\u00e4\u2019 \u2019long long\u2019 \u2019 long\u2019 \u2019int\u2019 \u2019char\u2019 \u2019merkki\u2019 \u2019character\u2019 \u2019\u00f6\u00f6kk\u00f6set\u00f6\u2019 \u2019\u00e4\u2019 \u2019\u00f6\u2019 \u2019\u00e5\u2019 \u2019finnish\u2019, \u2019swedish\u2019 \u2019euro\u2019 \u2019fim\u2019 \u2019suomi\u2019 (ja muita), n\u00e4m\u00e4 oikeaan j\u00e4rjestykseen\u2026 , tiivisteit\u00e4: \u2019number\u2019 \u2019sha\u2019 \u2019bits\u2019 \u2019number\u2019, \u2019des\u2019. \u201dArchitecture processor, arkkitehtuuri prosessori\u201d, interface. Digit, Digits, \u2019number\u2019, \u2019digits\u2019, \u2019numero\u2019, \u2019numerot\u2019, \u2018utf-8\u2019).<\/p>\n\n\n\n<p>Lis\u00e4\u00e4n seuraavaan valittuja rivej\u00e4 (vapaasti, toivottavasti menee edes l\u00e4helle oikeata\u2026)<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\u2019digits\u2019 = \u201d0123456789\" \\\n \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\" \\\n \"abcdefghijklmnopqrstuvwxyz\";\n\u2019digits\u2019 =\n \"!\\\"#$%&amp;'()*+,-.\/0123456789:;&lt;=&gt;?@\" \\\n \"ABCDEFGHIJKLMNOPQRSTUVWXYZ&#91;\\\\]^_`\" \\\n \"abcdefghijklmnopqrstuvwxyz{|}~\";\n\n\/\/ Finnish alphabet\n\/\/ Swedish alphabet\ndigits =\n \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\u00c5\u00c4\u00d6\" =\n \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\u00c5\u00c4\u00d6\" \\\n \"abcdefghijklmnopqrstuvwxyz\u00e5\u00e4\u00f6\";\n\n\/\/ Danish alphabet\n\/\/ Norwegian alphabet\ndigits =\n \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\u00c6\u00d8\u00c5\" \\\n \"abcdefghijklmnopqrstuvwxyz\u00e6\u00f8\u00e5\";\n\n\/\/ Norwegian alphabet\n\/\/ Danish alphabet\ndigits =\n \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\u00c6\u00d8\u00c5\" \\\n \"abcdefghijklmnopqrstuvwxyz\u00e6\u00f8\u00e5\";\n\n\/\/ Estonian alphabet\ndigits =\n \"ABCDEFGHIJKLMNOPQRS\u0160Z\u017dTUVW\u00d5\u00c4\u00d6\u00dcXY\" \\\n \"abcdefghijklmnopqrs\u0161z\u017etuvw\u00f5\u00e4\u00f6\u00fcxy\";\n\n\/\/ Lithuanian alphabet\ndigits =\n \"A\u0104BC\u010cDE\u0118\u0116FGHI\u012eYJKLMNOPRS\u0160TU\u0172\u016aVZ\u017d\" \\\n \"a\u0105bc\u010dde\u0119\u0117fghi\u012fyjklmnoprs\u0161tu\u0173\u016bvz\u017e\";\n\n\/\/Latvian alphabet\ndigits =\n \"A\u0100BC\u010cDE\u0112FG\u0122HI\u012aJK\u0136L\u013bMN\u0145OPRS\u0160TU\u016aVZ\u017d\" \\\n \"a\u0101bc\u010dde\u0113fg\u0123hi\u012bjk\u0137l\u013cmn\u0146oprs\u0161tu\u016bvz\u017e\";\n\n\/\/ French alphabet\n\/\/ Great Britain alphabet\n\/\/ United States alphabet\n\/\/ Italian alphabet\n\/\/ English alphabet\ndigits =\n \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\" \\\n \"abcdefghijklmnopqrstuvwxyz\";\n\n\/\/ Deutsch alphabet\ndigits =\n \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\u00c4\u00d6\u00dc\u1e9e\" \\\n \"abcdefghijklmnopqrstuvwxyz\u00e4\u00f6\u00fc\u00df\";\n\n\/\/ Greek alphabet\ndigits =\n \"\u0391\u0392\u0393\u0394\u0395\u0396\u0397\u0398\u0399\u039a\u039b\u039c\u039d\u039e\u039f\u03a0\u03a1\u03a3\u03a4\u03a5\u03a6\u03a7\u03a8\u03a9\" \\\n \"\u03b1\u03b2\u03b3\u03b4\u03b5\u03b6\u03b7\u03b8\u03b9\u03ba\u03bb\u03bc\u03bd\u03be\u03bf\u03c0\u03c1\u03c3\u03c4\u03c5\u03c6\u03c7\u03c8\u03c9\";\n\n\/\/ Japan alphabet\ndigits =\n \"\u3041\u3042\u3043\u3044\u3045\u3046\u3047\u3048\u3049\u304a\u304b\u304c\u304d\u304e\u304f\"\n \"\u3050\u3051\u3052\u3053\u3054\u3055\u3056\u3057\u3058\u3059\u305a\u305b\u305c\u305d\u305e\u305f\"\n \"\u3060\u3061\u3062\u3063\u3064\u3065\u3066\u3067\u3068\u3069\u306a\u306b\u306c\u306d\u306e\u306f\"\n \"\u3070\u3071\u3072\u3073\u3074\u3075\u3076\u3077\u3078\u3079\u307a\u307b\u307c\u307d\u307e\u307f\"\n \"\u3080\u3081\u3082\u3083\u3084\u3085\u3086\u3087\u3088\u3089\u308a\u308b\u308c\u308d\u308e\u308f\"\n \"\u3090\u3091\u3092\u3093\u3094\u3095\u3096\" +\n \u201d\u30a0\u30a1\u30a2\u30a3\u30a4\u30a5\u30a6\u30a7\u30a8\u30a9\u30aa\u30ab\u30ac\u30ad\u30ae\u30af\"\n \"\u30b0\u30b1\u30b2\u30b3\u30b4\u30b5\u30b6\u30b7\u30b8\u30b9\u30ba\u30bb\u30bc\u30bd\u30be\u30bf\"\n \"\u30c0\u30c1\u30c2\u30c3\u30c4\u30c5\u30c6\u30c7\u30c8\u30c9\u30ca\u30cb\u30cc\u30cd\u30ce\u30cf\"\n \"\u30d0\u30d1\u30d2\u30d3\u30d4\u30d5\u30d6\u30d7\u30d8\u30d9\u30da\u30db\u30dc\u30dd\u30de\u30df\"\n \"\u30e0\u30e1\u30e2\u30e3\u30e4\u30e5\u30e6\u30e7\u30e8\u30e9\u30ea\u30eb\u30ec\u30ed\u30ee\u30ef\"\n \"\u30f0\u30f1\u30f2\u30f3\u30f4\u30f5\u30f6\u30f7\u30f8\u30f9\u30fa\u30fb\u30fc\u30fd\u30fe\u30ff\";\n\n\/\/ Hiragana\n\/\/ Jp1\ndigits =\n   \"\u3041\u3042\u3043\u3044\u3045\u3046\u3047\u3048\u3049\u304a\u304b\u304c\u304d\u304e\u304f\"\n \"\u3050\u3051\u3052\u3053\u3054\u3055\u3056\u3057\u3058\u3059\u305a\u305b\u305c\u305d\u305e\u305f\"\n \"\u3060\u3061\u3062\u3063\u3064\u3065\u3066\u3067\u3068\u3069\u306a\u306b\u306c\u306d\u306e\u306f\"\n \"\u3070\u3071\u3072\u3073\u3074\u3075\u3076\u3077\u3078\u3079\u307a\u307b\u307c\u307d\u307e\u307f\"\n \"\u3080\u3081\u3082\u3083\u3084\u3085\u3086\u3087\u3088\u3089\u308a\u308b\u308c\u308d\u308e\u308f\"\n \"\u3090\u3091\u3092\u3093\u3094\u3095\u3096\";\n\n\/\/ Katakana\n\/\/ Jp2\ndigits =\n \"\u30a0\u30a1\u30a2\u30a3\u30a4\u30a5\u30a6\u30a7\u30a8\u30a9\u30aa\u30ab\u30ac\u30ad\u30ae\u30af\"\n \"\u30b0\u30b1\u30b2\u30b3\u30b4\u30b5\u30b6\u30b7\u30b8\u30b9\u30ba\u30bb\u30bc\u30bd\u30be\u30bf\"\n \"\u30c0\u30c1\u30c2\u30c3\u30c4\u30c5\u30c6\u30c7\u30c8\u30c9\u30ca\u30cb\u30cc\u30cd\u30ce\u30cf\"\n \"\u30d0\u30d1\u30d2\u30d3\u30d4\u30d5\u30d6\u30d7\u30d8\u30d9\u30da\u30db\u30dc\u30dd\u30de\u30df\"\n \"\u30e0\u30e1\u30e2\u30e3\u30e4\u30e5\u30e6\u30e7\u30e8\u30e9\u30ea\u30eb\u30ec\u30ed\u30ee\u30ef\"\n \"\u30f0\u30f1\u30f2\u30f3\u30f4\u30f5\u30f6\u30f7\u30f8\u30f9\u30fa\u30fb\u30fc\u30fd\u30fe\u30ff\";\n\n\/\/ Hindi alphabet\n\/\/unsigned char *signs = \"\u0900\u0901\u0902\u0903\u093a\u093b\u093c\u093d\u093e\u093f\u0940\u0949\u094a\u094b\u094c\u094d\u094e\ndigits =\n \"\u0904\u0905\u0906\u0907\u0908\u0909\u090a\u090b\u090c\u090d\u090e\u090f\u0910\u0911\u0912\u0913\u0914\u0915\u0916\u0917\u0918\u0919\u091a\u091b\u091c\u091d\u091e\u091f\u0920\u0921\u0922\u0923\"\n \"\u0924\u0925\u0926\u0927\u0928\u0929\u092a\u092b\u092c\u092d\u092e\u092f\u0930\u0931\u0932\u0933\u0934\u0935\u0936\u0937\u0938\u0939\u093d\u0950\u0915\u093c\u0916\u093c\u0917\u093c\u091c\u093c\u0921\u093c\"\n \"\u0922\u093c\u092b\u093c\u092f\u093c\u0960\u0961\u0964\u0965\u0966\u0967\u0968\u0969\u096a\u096b\u096c\u096d\u096e\u096f\u0970\u0971\u0972\u0973\u0974\u0975\u0976\u0977\u0978\u0979\u097a\u097b\u097c\u097d\u097e\"\n \"\u097f\"; \/\/ 97 characters\n\n\/\/ Hebrew alphabet\n\/\/ \u0590\u05be\u05bf\u05c0\u05c1\u05c2\u05c3\u05c5\u05c4\u05c6\u05c7\u05c8\u05c9\u05ca\u05cb\u05cc\u05cd\u05ce\u05cf\u05d0\u05d1\u05d2\u05d3\u05d4\u05d5\u05d6\u05d7\u05d8\u05d9\u05da\u05db\u05dc\u05dd\u05de\u05df\u05e0\u05e1\u05e2\u05e3\u05e4\u05e5\u05e6\u05e7\u05e8\u05e9\u05ea\u05eb\u05ec\u05ed\u05ee\u05ef\u05f0\u05f1\u05f2\u05f3\u05f4\u05f5\u05f6\u05f7\u05f8\u05f9\u05fa\u05fb\u05fc\u05fd\u05fe\u05ff\ndigits = \"\u05d0\u05d1\u05d2\u05d3\u05d4\u05d5\u05d6\u05d7\u05d8\u05d9\u05da\u05db\u05dc\u05dd\u05de\u05df\u05e0\u05e1\u05e2\u05e3\u05e4\u05e5\u05e6\u05e7\u05e8\u05e9\u05ea\";\n\n\/\/ phoenician alphabet\n\/\/ foinikialaiset aakkoset\n\/\/ phoenician: \ud802\udd00\ud802\udd01\ud802\udd02\ud802\udd03\ud802\udd04\ud802\udd05\ud802\udd06\ud802\udd07\ud802\udd08\ud802\udd09\ud802\udd0a\ud802\udd0b\ud802\udd0c\ud802\udd0d\ud802\udd0e\ud802\udd0f\ud802\udd10\ud802\udd11\ud802\udd12\ud802\udd13\ud802\udd14\ud802\udd15\ud802\udd16\ud802\udd17\ud802\udd18\ud802\udd19\ud802\udd1a\ud802\udd1b\ud802\udd1c\ud802\udd1d\ud802\udd1e\ud802\udd1f\u201d\ndigits = \"\ud802\udd00\ud802\udd01\ud802\udd02\ud802\udd03\ud802\udd04\ud802\udd05\ud802\udd06\ud802\udd07\ud802\udd08\ud802\udd09\ud802\udd0a\ud802\udd0b\ud802\udd0c\ud802\udd0d\ud802\udd0e\ud802\udd0f\ud802\udd10\ud802\udd11\ud802\udd12\ud802\udd13\ud802\udd14\ud802\udd15\ud802\udd16\ud802\udd17\ud802\udd18\ud802\udd19\ud802\udd1a\ud802\udd1b\";\n\n\/\/ Braille alphabet\ndigits = \/\/ 0x2800 - 0x2900\n \"\u2800\u2801\u2802\u2803\u2804\u2805\u2806\u2807\u2808\u2809\u280a\u280b\u280c\u280d\u280e\u280f\u2810\u2811\u2812\u2813\u2814\u2815\u2816\u2817\u2818\u2819\u281a\u281b\u281c\u281d\u281e\u281f\u2820\u2821\u2822\u2823\u2824\u2825\u2826\u2827\u2828\u2829\u282a\u282b\u282c\u282d\u282e\u282f\u2830\u2831\u2832\u2833\u2834\u2835\u2836\u2837\u2838\u2839\u283a\u283b\u283c\u283d\u283e\u283f\"\n \"\u2840\u2841\u2842\u2843\u2844\u2845\u2846\u2847\u2848\u2849\u284a\u284b\u284c\u284d\u284e\u284f\u2850\u2851\u2852\u2853\u2854\u2855\u2856\u2857\u2858\u2859\u285a\u285b\u285c\u285d\u285e\u285f\u2860\u2861\u2862\u2863\u2864\u2865\u2866\u2867\u2868\u2869\u286a\u286b\u286c\u286d\u286e\u286f\u2870\u2871\u2872\u2873\u2874\u2875\u2876\u2877\u2878\u2879\u287a\u287b\u287c\u287d\u287e\u287f\"\n \"\u2880\u2881\u2882\u2883\u2884\u2885\u2886\u2887\u2888\u2889\u288a\u288b\u288c\u288d\u288e\u288f\u2890\u2891\u2892\u2893\u2894\u2895\u2896\u2897\u2898\u2899\u289a\u289b\u289c\u289d\u289e\u289f\u28a0\u28a1\u28a2\u28a3\u28a4\u28a5\u28a6\u28a7\u28a8\u28a9\u28aa\u28ab\u28ac\u28ad\u28ae\u28af\u28b0\u28b1\u28b2\u28b3\u28b4\u28b5\u28b6\u28b7\u28b8\u28b9\u28ba\u28bb\u28bc\u28bd\u28be\u28bf\"\n \"\u28c0\u28c1\u28c2\u28c3\u28c4\u28c5\u28c6\u28c7\u28c8\u28c9\u28ca\u28cb\u28cc\u28cd\u28ce\u28cf\u28d0\u28d1\u28d2\u28d3\u28d4\u28d5\u28d6\u28d7\u28d8\u28d9\u28da\u28db\u28dc\u28dd\u28de\u28df\u28e0\u28e1\u28e2\u28e3\u28e4\u28e5\u28e6\u28e7\u28e8\u28e9\u28ea\u28eb\u28ec\u28ed\u28ee\u28ef\u28f0\u28f1\u28f2\u28f3\u28f4\u28f5\u28f6\u28f7\u28f8\u28f9\u28fa\u28fb\u28fc\u28fd\u28fe\u28ff\";\n\n\/\/ Gothic alphabet\ndigits =\n \"\ud800\udf30\ud800\udf31\ud800\udf32\ud800\udf33\ud800\udf34\ud800\udf35\ud800\udf36\ud800\udf37\ud800\udf38\ud800\udf39\ud800\udf3a\ud800\udf3b\ud800\udf3c\ud800\udf3d\ud800\udf3e\ud800\udf3f\"\n \"\ud800\udf40\ud800\udf41\ud800\udf42\ud800\udf43\ud800\udf44\ud800\udf45\ud800\udf46\ud800\udf47\ud800\udf48\ud800\udf49\ud800\udf4a\";\n\n\/\/ Cards\ndigits =\n \"\ud83c\udca1\ud83c\udca2\ud83c\udca3\ud83c\udca4\ud83c\udca5\ud83c\udca6\ud83c\udca7\ud83c\udca8\ud83c\udca9\ud83c\udcaa\ud83c\udcab\ud83c\udcad\ud83c\udcae\"\n \"\ud83c\udcb1\ud83c\udcb2\ud83c\udcb3\ud83c\udcb4\ud83c\udcb5\ud83c\udcb6\ud83c\udcb7\ud83c\udcb8\ud83c\udcb9\ud83c\udcba\ud83c\udcbb\ud83c\udcbd\ud83c\udcbe\"\n \"\ud83c\udcc1\ud83c\udcc2\ud83c\udcc3\ud83c\udcc4\ud83c\udcc5\ud83c\udcc6\ud83c\udcc7\ud83c\udcc8\ud83c\udcc9\ud83c\udcca\ud83c\udccb\ud83c\udccd\ud83c\udcce\"\n \"\ud83c\udcd1\ud83c\udcd2\ud83c\udcd3\ud83c\udcd4\ud83c\udcd5\ud83c\udcd6\ud83c\udcd7\ud83c\udcd8\ud83c\udcd9\ud83c\udcda\ud83c\udcdb\ud83c\udcdd\ud83c\udcde\";\n\n\/\/ Cardsuits\ndigits =\n \"\u2660\u2661\u2662\u2663\u2664\u2665\u2666\u2667\";\n\n\/\/ Chessmen\ndigits =\n \"\u2654\u2655\u2656\u2657\u2658\u2659\u265a\u265b\u265c\u265d\u265e\u265f\";\n\n\/\/ Dice\ndigits =\n \"\u2680\u2681\u2682\u2683\u2684\u2685\";\n\n\/\/ Mahjong\n\/\/ removed \ud83c\udc04 &amp; \ud83c\udc2b\n \"\ud83c\udc00\ud83c\udc01\ud83c\udc02\ud83c\udc03\ud83c\udc05\ud83c\udc06\" \\\n \"\ud83c\udc07\ud83c\udc08\ud83c\udc09\ud83c\udc0a\ud83c\udc0b\ud83c\udc0c\ud83c\udc0d\ud83c\udc0e\ud83c\udc0f\" \\\n \"\ud83c\udc10\ud83c\udc11\ud83c\udc12\ud83c\udc13\ud83c\udc14\ud83c\udc15\ud83c\udc16\ud83c\udc17\ud83c\udc18\" \\\n \"\ud83c\udc19\ud83c\udc1a\ud83c\udc1b\ud83c\udc1c\ud83c\udc1d\ud83c\udc1e\ud83c\udc1f\ud83c\udc20\ud83c\udc21\" \\\n \"\ud83c\udc22\ud83c\udc23\ud83c\udc24\ud83c\udc25\ud83c\udc26\ud83c\udc27\ud83c\udc28\ud83c\udc29\ud83c\udc2a\";\n\n\/\/ Dna\n digits = \u201dacgt\u201d\n\n\/\/ DNA\n  digits = \u201dACGT\u201d\n\n\/\/ Million random digits\n  digits =\n\n\/\/ Party\n  digits = \u201d\ud83c\udf7e\ud83e\udd42\u201d<\/code><\/pre>\n\n\n\n<p>Korean merkist\u00f6 on kerrottu koodilla (cee):<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>digits = NULL;\ndigits_add_limits(&amp;digits,0xac00,0xd7a3);   \/\/ Hangul Syllables (AC00\u2013D7A3)\n\/\/digits_add_limits(&amp;digits,0x1100,0x11ff); \/\/ Hangul Jamo (1100\u201311FF)\n\/\/digits_add_limits(&amp;digits,0x3130,0x318f); \/\/ Hangul Compatibility Jamo (3130\u2013318F)\n\/\/digits_add_limits(&amp;digits,0xa960,0xa97f); \/\/ Hangul Jamo Extended-A (A960\u2013A97F)\n\/\/digits_add_limits(&amp;digits,0xd7b0,0xd7ff); \/\/ Hangul Jamo Extended-B (D7B0\u2013D7FF)<\/code><\/pre>\n\n\n\n<p>Kiinalaisessa merkist\u00f6ss\u00e4 on niin paljon merkkej\u00e4, ett\u00e4 se on my\u00f6s seuraavassa kerrottu koodilla:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ Chinese alphabet\n\/\/ Jp3\n\/\/ Japanese kanji alphabet\ndigits = NULL;\ndigits_add_limits(&amp;digits, 0x4e00, 0x9fef);<\/code><\/pre>\n\n\n\n<p>Liput koostuvat merkeist\u00e4 \u2019aa\u2019, \u2019ab\u2019 &#8211; \u2019zy\u2019, \u2019zz\u2019 : (per\u00e4kk\u00e4isiss\u00e4 \u2019positioissa\u2019 olevat liput n\u00e4kyv\u00e4t oikean n\u00e4k\u00f6isin\u00e4. esimerkiksi liput \u2019cd\u2019, \u2019mn\u2019 ja \u2019gh\u2019 ovat varattuja):<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>digits = \"\ud83c\udde6\ud83c\udde7\ud83c\udde8\ud83c\udde9\ud83c\uddea\ud83c\uddeb\ud83c\uddec\ud83c\udded\ud83c\uddee\ud83c\uddef\ud83c\uddf0\ud83c\uddf1\ud83c\uddf2\ud83c\uddf3\ud83c\uddf4\ud83c\uddf5\ud83c\uddf6\ud83c\uddf7\ud83c\uddf8\ud83c\uddf9\ud83c\uddfa\ud83c\uddfb\ud83c\uddfc\ud83c\uddfd\ud83c\uddfe\ud83c\uddff\";\n\/\/digits = \"\ud83c\uddeb\ud83c\uddee\ud83c\uddf8\ud83c\uddea\ud83c\uddf3\ud83c\uddf4\ud83c\udde9\ud83c\uddf0\ud83c\uddea\ud83c\uddea\ud83c\uddf1\ud83c\uddfb\ud83c\uddf1\ud83c\uddf9\";<\/code><\/pre>\n\n\n\n<p>, liput jatkoa:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/*\n\ud83c\udde6\n\ud83c\udde7\n\ud83c\udde8\n\ud83c\udde9\n\ud83c\uddea\n\ud83c\uddeb\n\ud83c\uddec\n\ud83c\udded\n\ud83c\uddee\n\ud83c\uddef\n\ud83c\uddf0\n\ud83c\uddf1\n\ud83c\uddf2\n\ud83c\uddf3\n\ud83c\uddf4\n\ud83c\uddf5\n\ud83c\uddf6\n\ud83c\uddf7\n\ud83c\uddf8\n\ud83c\uddf9\n\ud83c\uddfa\n\ud83c\uddfb\n\ud83c\uddfc\n\ud83c\uddfd\n\ud83c\uddfe\n\ud83c\uddff\n*\/\n\/*\n  \ud83c\udde6\ud83c\udde7\ud83c\udde8\ud83c\udde9\ud83c\uddea\ud83c\uddeb\ud83c\uddec\ud83c\udded\ud83c\uddee\ud83c\uddef\ud83c\uddf0\ud83c\uddf1\ud83c\uddf2\ud83c\uddf3\ud83c\uddf4\ud83c\uddf5\ud83c\uddf6\ud83c\uddf7\ud83c\uddf8\ud83c\uddf9\ud83c\uddfa\ud83c\uddfb\ud83c\uddfc\ud83c\uddfd\ud83c\uddfe\ud83c\uddff\n*\/<\/code><\/pre>\n\n\n\n<p>Lippumerkit voivat olla vaikka seuraavassa rakenteessa (~tietueessa):<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>unsigned char *flagchars&#91;] =\n    { \"\ud83c\udde6\", \"\ud83c\udde7\", \"\ud83c\udde8\", \"\ud83c\udde9\", \"\ud83c\uddea\", \"\ud83c\uddeb\", \"\ud83c\uddec\", \"\ud83c\udded\", \"\ud83c\uddee\", \"\ud83c\uddef\",\n      \"\ud83c\uddf0\", \"\ud83c\uddf1\", \"\ud83c\uddf2\", \"\ud83c\uddf3\", \"\ud83c\uddf4\", \"\ud83c\uddf5\", \"\ud83c\uddf6\", \"\ud83c\uddf7\", \"\ud83c\uddf8\", \"\ud83c\uddf9\",\n      \"\ud83c\uddfa\", \"\ud83c\uddfb\", \"\ud83c\uddfc\", \"\ud83c\uddfd\", \"\ud83c\uddfe\", \"\ud83c\uddff\" };<\/code><\/pre>\n\n\n\n<p>rakenne lippuja varten:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>struct idflags { \/\/ 202307 JariK\n  unsigned char *id;\n  unsigned char *flags;\n} idsflags&#91;] = {\n};<\/code><\/pre>\n\n\n\n<p>, t\u00e4ytett\u00e4 lippurakenteeseen:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>  { \"\ud83c\uddeb\ud83c\uddee\", \"\ud83c\uddeb\ud83c\uddee: fi, fin, Finland, EU, NORTHERNEUROPE, EUROPE, EURASIA, NORDIC, FINLAND\" },\n  { \"\ud83c\udde6\ud83c\uddfd\", \"\ud83c\udde6\ud83c\uddfd: ax, ala, \u00c5land, aland, NORDIC, FINLAND\" },\n  { \"\ud83c\uddf8\ud83c\uddea\", \"\ud83c\uddf8\ud83c\uddea: se, swe, Sweden, EU, NORTHERNEUROPE, EUROPE, EURASIA, NORDIC\" },\n  { \"\ud83c\uddf3\ud83c\uddf4\", \"\ud83c\uddf3\ud83c\uddf4: no, nor, Norway, NORTHERNEUROPE, EUROPE, EURASIA, NORDIC\" },\n  { \"\ud83c\udde9\ud83c\uddf0\", \"\ud83c\udde9\ud83c\uddf0: dk, dnk, Denmark, EU, NORTHERNEUROPE, EUROPE, EURASIA, NORDIC, DENMARK\" },\n  { \"\ud83c\uddeb\ud83c\uddf4\", \"\ud83c\uddeb\ud83c\uddf4: fo, fro, FaroeIslands, NORDIC, DENMARK\" },\n  { \"\ud83c\uddee\ud83c\uddf8\", \"\ud83c\uddee\ud83c\uddf8: is, isl, Iceland, NORTHERNEUROPE, EUROPE, EURASIA, NORDIC\" },\n  { \"\ud83c\uddec\ud83c\uddf1\", \"\ud83c\uddec\ud83c\uddf1: gl, grl, Greenland, NORTHAMERICA, NORDIC, DENMARK\" },\n  { \"\ud83c\uddea\ud83c\uddea\", \"\ud83c\uddea\ud83c\uddea: ee, est, Estonia, EU, NORTHERNEUROPE, EUROPE, EURASIA, BALTIC\" },\n  { \"\ud83c\uddf1\ud83c\uddfb\", \"\ud83c\uddf1\ud83c\uddfb: lv, lva, Latvia, EU, NORTHERNEUROPE, EUROPE, EURASIA, BALTIC\" },\n  { \"\ud83c\uddf1\ud83c\uddf9\", \"\ud83c\uddf1\ud83c\uddf9: lt, ltu, Lithuania, EU, NORTHERNEUROPE, EUROPE, EURASIA, BALTIC\" },\n  { \"\ud83c\uddfa\ud83c\udde6\", \"\ud83c\uddfa\ud83c\udde6: ua, ukr, Ukraine, EASTERNEUROPE, EUROPE, EURASIA\" },\n  { \"\ud83c\udde6\ud83c\uddf1\", \"\ud83c\udde6\ud83c\uddf1: al, alb, Albania, EASTERNEUROPE, EUROPE, EURASIA\" },\n  { \"\ud83c\udde6\ud83c\udde9\", \"\ud83c\udde6\ud83c\udde9: ad, and, Andorra, WESTERNEUROPE, EUROPE, EURASIA\" },<\/code><\/pre>\n\n\n\n<p>aiempi p\u00e4tk\u00e4 newressusta: (idea on ett\u00e4 voi newressussa kirjoittaa komennon kuten &#8220;$ newressu \u2014 flags \u2014fi \u2014se&#8221;, jolloin fi ja se l\u00f6ydet\u00e4\u00e4n edellisest\u00e4 rakenteesta..) noita rivin lopussa olevia sanoja kuten Finland, Europe ja jne voi my\u00f6s k\u00e4ytt\u00e4\u00e4 \u2014all k\u00e4\u00e4nt\u00e4\u00e4 kaikki liput v\u00e4\u00e4rinp\u00e4in, eli \u2014fi \u2014all arpoo kaikkia muita lippuja paitsi Suomen lippuja: (suomea siin\u00e4 ei ole kielen\u00e4, eli ainakin n\u00e4iss\u00e4 tarvitaan k\u00e4\u00e4nt\u00e4j\u00e4\u00e4):<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>int newressu_toggleflag(unsigned char *flag)\n{\n  int c, ok;\n \n  if(!strcmp(flag, \"ALL\")) {\n    idsall = !idsall;\n    for(c = 0; c &lt; sizeof(idsflags) \/ sizeof(idsflags&#91;0]); c++) {\n      flagids&#91;c] = idsall;\n    }\n    flagidflags = 1; \/\/ display flags\n    ok = 1; \/\/ one flag toggled\n  } else {\n    ok = 0;\n    for(c = 0; c &lt; sizeof(idsflags) \/ sizeof(idsflags&#91;0]); c++) {\n      if(newressu_strstr(idsflags&#91;c].flags, flag)!=NULL) {\n        flagids&#91;c] = !flagids&#91;c];\n        flagidflags = 1; \/\/ display flags\n        ok = 1; \/\/ one flag toggled\n      }\n    }\n  }\n  return (ok)\n}<\/code><\/pre>\n\n\n\n<p>T\u00e4ss\u00e4 viel\u00e4 edellisen k\u00e4ytt\u00e4m\u00e4 newressu_strstr():<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>unsigned char *newressu_strstr(unsigned char *haystack, unsigned char *needle)\n{\n  int nlen = strlen(needle);\n  unsigned char *p = haystack;\n\n  while(*p != '\\0') {\n    if(!strncmp(p, needle, nlen) &amp;&amp;\n       ( isblank(*(p + nlen)) || ispunct(*(p + nlen)) || *(p + nlen) == '\\0' ) &amp;&amp; \/\/ character after string\n       ( (p == haystack) || isblank(*(p - 1)) || ispunct(*(p - 1)) ) ) \/\/ character before string\n      return(p);\n    p++;\n  }\n  return(NULL);\n}<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/moijari.com\/wp-content\/uploads\/2026\/07\/IMG_2246.jpeg\" alt=\"\" class=\"wp-image-3949\" width=\"354\" height=\"266\" srcset=\"https:\/\/moijari.com\/wp-content\/uploads\/2026\/07\/IMG_2246.jpeg 320w, https:\/\/moijari.com\/wp-content\/uploads\/2026\/07\/IMG_2246-300x225.jpeg 300w\" sizes=\"(max-width: 354px) 100vw, 354px\" \/><\/figure>\n\n\n\n<p>Seuraava debukki tulostaa kaikki utf-8 merkit:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>  if(utf8) {\n\n    int xlines;\n    printcolumns(6, 0x10, 0, 64, &amp;xlines);\n   \n    int utf8output = 0;\n    for(c = 0; c &lt; 65535 * 4; c++) {\n      \/\/for(c = 0x2800; c &lt; 0x2900; c++) { \/\/ braille\n      unsigned char buffer10&#91;10];\n      if(c % 64 == 0) {\n        if(c &gt; 0) {\n          fprintf(stdout,\"\\n\");\n          utf8output = 0;\n        }\n        fprintf(stdout,\"%5x \", c);\n        utf8output = 1;\n      }\n      if(c &gt;= 0 &amp;&amp; c &lt; 32) {\n        c += 31;\n        fprintf(stdout, \"%-32s\", \"--- control characters ---\");\n        utf8output = 1;\n      } else if(c &gt;= 128 &amp;&amp; c &lt; 256) {\n        c += 31;\n        fprintf(stdout, \"%-32s\", \"--- utf8 characters ---\");\n        utf8output = 1;\n      } else {\n        codetoutf8(buffer10, c);\n        fprintf(stdout,\"%s\", buffer10);\n        utf8output = 1;\n      }\n    }\n    if(utf8output)\n      fprintf(stdout,\"\\n\");\n    fflush(stdout);\n\n    return(0);\n  }<\/code><\/pre>\n\n\n\n<p>T\u00e4ss\u00e4 edellisen printcolumns():<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>static long long lines = 10, plines = 0, ptotallines = 0;\n\nvoid printcolumns(int offset, int base, int startwith, int columns, int *clines) \/\/ 2023 JariK\n{\n  \/\/---------11111111112222222222333333333344444444445555555555666666666677\n  \/\/12345678901234567890123456789012345678901234567890123456789012345678901\n  \/\/=======================================================================\n  \/\/00000 86747100388687087416829400778878989202760594993130062980826178851\n  \/\/00001 36862623069143814543525935285460059703805218323534266522497684582\n\n  int c, d, digit, nonzero;\n  unsigned char digits&#91;0x10] = \"0123456789abcdef\";\n\n  *clines = 0;\n\n  if(base == 2)\n    c = 1 &lt;&lt; 12;\n  else if(base == 8)\n    c = 01000000;\n  else if(base == 10)\n    c = 1000000;\n  else if(base == 16)\n    c = 0x1000000;\n  else {\n    fprintf(stdout,\"%s: printcolumns():\", procname);\n    fprintf(stdout,\" illegal base %d\", base);\n    fprintf(stdout,\"\\n\");\n    exit(1);\n  }\n\n  for(;c &gt;= 1; c \/= base) { \/\/ lines, 100000's, 10000's, 1000's ... 1's\n    if(c &gt;= columns)\n      continue;\n\n    for(d = 0; d &lt; offset; d++)\n      fprintf(stdout,\" \"); \/\/ spaces in beginning of row\n\n    nonzero = 0;\n   \n    for(d = startwith; d &lt; columns + startwith; d++) { \/\/ column numbers\n      digit = (d \/ c) % base;\n      if(digit != 0)\n        nonzero = 1;\n      if(nonzero || c == 1)\n        fprintf(stdout,\"%c\", digits&#91;digit]); \/\/ nonzero digits after first nonzero\n      else\n        fprintf(stdout,\"-\"); \/\/ zeroes in beginning of row\n    }\n    fprintf(stdout,\"\\n\");\n    (*clines)++;\n  }\n  if(pwords &gt; 0) {\n    if(slineno) {\n      for(c = 0; c &lt;= plinesdigits; c++) \/\/ +1\n        fprintf(stdout,\"-\");\n    }\n    for(cwords = 0; cwords &lt; pwords; cwords++) {\n      print_spaces('-');\n      fprintf(stdout,\"w\");\n      if(charwidth == 2)\n        fprintf(stdout,\"-\");\n      for(c = 0; c &lt; size - 1; c++) {\n        fprintf(stdout,\"-\");\n        if(charwidth == 2)\n          fprintf(stdout,\"-\");\n      }\n    }\n    fprintf(stdout,\"\\n\");\n    (*clines)++;\n  }\n  for(d = 0; d &lt; offset; d++)\n    fprintf(stdout,\" \"); \/\/ spaces in beginning of row\n  for(d = startwith; d &lt; columns + startwith; d++)\n    fprintf(stdout,\"=\");\n  fprintf(stdout,\"\\n\");\n  (*clines)++;\n}<\/code><\/pre>\n\n\n\n<p>T\u00e4ss\u00e4 edellisen codetoutf8() rutiini:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>static void codetoutf8(unsigned char *buf2, unsigned long long code)\n{\n  unsigned char *buf;\n\n  buf = buf2;\n  if(code &lt;= 0x7f) {\n    *buf++ = code;\n  } else if(code &lt;= 0x7ff) {            \/\/ 110xxxxx 10xxxxxx\n    *buf++ = (0xc0 | ((code &gt;&gt; 6) &amp; 0x1f));\n    *buf++ = (0x80 | (code &amp; 0x3f));\n  } else if(code &lt;= 0xffff) {           \/\/ 1110xxxx 10xxxxxx 10xxxxxx\n    *buf++ = (0xe0 | ((code &gt;&gt; 12) &amp; 0x0f));\n    *buf++ = (0x80 | ((code &gt;&gt; 6) &amp; 0x3f));\n    *buf++ = (0x80 | (code &amp; 0x3f));\n  } else if(code &lt;= 0x10ffff) {         \/\/ 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx\n    *buf++ = (0xf0 | ((code &gt;&gt; 18) &amp; 0x07));\n    *buf++ = (0x80 | ((code &gt;&gt; 12) &amp; 0x3f));      \n    *buf++ = (0x80 | ((code &gt;&gt; 6) &amp; 0x3f));      \n    *buf++ = (0x80 | ((code &amp; 0x3f)));      \n  } else if(code &lt;= 0x3ffffff) {        \/\/ 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx \/\/ these not yet needed\n    *buf++ = (0xf8 | ((code &gt;&gt; 24) &amp; 0x03));\n    *buf++ = (0x80 | ((code &gt;&gt; 18) &amp; 0x3f));      \n    *buf++ = (0x80 | ((code &gt;&gt; 12) &amp; 0x3f));      \n    *buf++ = (0x80 | ((code &gt;&gt; 6) &amp; 0x3f));      \n    *buf++ = (0x80 | ((code &amp; 0x3f)));      \n  } else if(code &lt;= 0x7fffffff) {       \/\/ 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx \/\/ these not yet needed\n    *buf++ = (0xfc | ((code &gt;&gt; 30) &amp; 0x01));\n    *buf++ = (0x80 | ((code &gt;&gt; 24) &amp; 0x3f));      \n    *buf++ = (0x80 | ((code &gt;&gt; 18) &amp; 0x3f));      \n    *buf++ = (0x80 | ((code &gt;&gt; 12) &amp; 0x3f));      \n    *buf++ = (0x80 | ((code &gt;&gt; 6) &amp; 0x3f));      \n    *buf++ = (0x80 | ((code &amp; 0x3f)));      \n  } else if(code &lt;= 0xfffffffff) {      \/\/ 11111110 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx \/\/ these not yet needed\n    *buf++ = (0xfe);\n    *buf++ = (0x80 | ((code &gt;&gt; 30) &amp; 0x3f));      \n    *buf++ = (0x80 | ((code &gt;&gt; 24) &amp; 0x3f));      \n    *buf++ = (0x80 | ((code &gt;&gt; 18) &amp; 0x3f));      \n    *buf++ = (0x80 | ((code &gt;&gt; 12) &amp; 0x3f));      \n    *buf++ = (0x80 | ((code &gt;&gt; 6) &amp; 0x3f));      \n    *buf++ = (0x80 | ((code &amp; 0x3f)));      \n  } else if(code &lt;= 0x3ffffffffff) {    \/\/ 11111111 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx \/\/ these not yet needed\n    *buf++ = (0xff);\n    *buf++ = (0x80 | ((code &gt;&gt; 36) &amp; 0x3f));      \n    *buf++ = (0x80 | ((code &gt;&gt; 30) &amp; 0x3f));      \n    *buf++ = (0x80 | ((code &gt;&gt; 24) &amp; 0x3f));      \n    *buf++ = (0x80 | ((code &gt;&gt; 18) &amp; 0x3f));      \n    *buf++ = (0x80 | ((code &gt;&gt; 12) &amp; 0x3f));      \n    *buf++ = (0x80 | ((code &gt;&gt; 6) &amp; 0x3f));      \n    *buf++ = (0x80 | ((code &amp; 0x3f)));      \n  }\n  *buf = '\\0';\n\n#ifdef DEBUG42\n  int c, print;\n\n  fprintf(stdout,\"codepoint: %lx\", code);\n\n  fprintf(stdout,\", bin:\");\n\n  print = 0;\n  for(c = (sizeof(code) * 8) - 1; c &gt;= 0; c--) {\n    int bit = (code &gt;&gt; c) &amp; 1;\n    if(bit != 0)\n      print = 1;\n    if(print) {\n      fprintf(stdout,\"%d\", bit);\n      if(c &gt; 0 &amp;&amp; c % 8 == 0)\n        fprintf(stdout,\"|\");\n    }\n  }\n\n  fprintf(stdout,\", oct:\");\n  print = 0;\n  fprintf(stdout,\"%lo\", code);\n\n  fprintf(stdout,\", utf8: \");\n  for(c = 0; c &lt; 8; c++) {\n    if(buf2&#91;c] == '\\0')\n      break;\n    fprintf(stdout,\"%02x\", buf2&#91;c]);\n  }\n\n  fprintf(stdout,\", bin: \");\n  for(c = 0; c &lt; 8; c++) {\n    if(buf2&#91;c] == '\\0')\n      break;\n    if(c &gt; 0)\n      fprintf(stdout,\"|\");\n    for(int d = 7; d &gt;= 0; d--) {\n      fprintf(stdout,\"%d\", buf2&#91;c] &gt;&gt; d &amp; 1);\n    }\n  }\n\n  fprintf(stdout,\", oct:\");\n  for(c = 0; c &lt; 8; c++) {\n    if(buf2&#91;c] == '\\0')\n      break;\n    fprintf(stdout,\" %3o\", buf2&#91;c]);\n  }\n \n  fprintf(stdout,\", character: %s\", buf2);\n  fprintf(stdout,\"\\n\");\n#endif\n}<\/code><\/pre>\n\n\n\n<p>(Edellinen takaperin) ristiintarkistusta varten:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#define aDEBUG43 2\n\nstatic void utf8tocode(unsigned long *code, unsigned char *buf2)\n{\n  unsigned char *buf;\n  \n  *code = 0;\n  buf = buf2;\n  \n  if(*buf &lt;= 0x7f) {                  \/\/ 0xxxxxxx\n    *code = *buf;\n  } else if(*buf &lt; 0xc0) {            \/\/ 110xxxxx 10xxxxxx\n    *code = 0;\n  } else if(*buf &lt; 0xe0) {            \/\/ 110xxxxx 10xxxxxx\n    *code = *buf++ &amp; 0x1f;\n    *code = (*code &lt;&lt; 6) + (*buf++ &amp; 0x3f);\n  } else if(*buf &lt; 0xf0) {            \/\/ 1110xxxx 10xxxxxx 10xxxxxx\n    *code = *buf++ &amp; 0x0f;\n    *code = (*code &lt;&lt; 6) + (*buf++ &amp; 0x3f);\n    *code = (*code &lt;&lt; 6) + (*buf++ &amp; 0x3f);\n  } else if(*buf&lt;0xf8) {            \/\/ 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx\n    *code = *buf++ &amp; 0x07;\n    *code = (*code &lt;&lt; 6) + (*buf++ &amp; 0x3f);\n    *code = (*code &lt;&lt; 6) + (*buf++ &amp; 0x3f);\n    *code = (*code &lt;&lt; 6) + (*buf++ &amp; 0x3f);\n  } else if(*buf &lt; 0xfc) {            \/\/ 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx\n    *code = *buf++ &amp; 0x03;\n    *code = (*code &lt;&lt; 6) + (*buf++ &amp; 0x3f);\n    *code = (*code &lt;&lt; 6) + (*buf++ &amp; 0x3f);\n    *code = (*code &lt;&lt; 6) + (*buf++ &amp; 0x3f);\n    *code = (*code &lt;&lt; 6) + (*buf++ &amp; 0x3f);\n  } else if(*buf &lt; 0xfe) {            \/\/ 1111110x 10xxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx\n    *code = *buf++ &amp; 0x01;\n    *code = (*code &lt;&lt; 6) + (*buf++ &amp; 0x3f);\n    *code = (*code &lt;&lt; 6) + (*buf++ &amp; 0x3f);\n    *code = (*code &lt;&lt; 6) + (*buf++ &amp; 0x3f);\n    *code = (*code &lt;&lt; 6) + (*buf++ &amp; 0x3f);\n    *code = (*code &lt;&lt; 6) + (*buf++ &amp; 0x3f);\n  } else if(*buf &lt; 0xff) {            \/\/ 11111110 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx\n    buf++;\n    *code = *buf++ &amp; 0x3f;\n    *code = (*code &lt;&lt; 6) + (*buf++ &amp; 0x3f);\n    *code = (*code &lt;&lt; 6) + (*buf++ &amp; 0x3f);\n    *code = (*code &lt;&lt; 6) + (*buf++ &amp; 0x3f);\n    *code = (*code &lt;&lt; 6) + (*buf++ &amp; 0x3f);\n    *code = (*code &lt;&lt; 6) + (*buf++ &amp; 0x3f);\n  } else if(*buf == 0xff) {            \/\/ 11111111 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx\n    buf++;\n    *code = *buf++ &amp; 0x3f;\n    *code = (*code &lt;&lt; 6) + (*buf++ &amp; 0x3f);\n    *code = (*code &lt;&lt; 6) + (*buf++ &amp; 0x3f);\n    *code = (*code &lt;&lt; 6) + (*buf++ &amp; 0x3f);\n    *code = (*code &lt;&lt; 6) + (*buf++ &amp; 0x3f);\n    *code = (*code &lt;&lt; 6) + (*buf++ &amp; 0x3f);\n    *code = (*code &lt;&lt; 6) + (*buf++ &amp; 0x3f);\n  }\n#ifdef DEBUG43\n  int c;\n\n  fprintf(stdout, \"character: %s\", buf2);\n\n  fprintf(stdout, \", utf8: \");\n  for(c = 0; c &lt; 8; c++) {\n    if(buf2&#91;c] == '\\0')\n      break;\n    fprintf(stdout,\"%02x\", buf2&#91;c]);\n  }\n\n  fprintf(stdout, \", bin: \");\n  for(c = 0; c &lt; 8; c++) {\n    if(buf2&#91;c] == '\\0')\n      break;\n    if(c &gt; 0)\n      fprintf(stdout, \"|\");\n    for(int d = 7; d &gt;= 0; d--)\n      fprintf(stdout, \"%d\", buf2&#91;c] &gt;&gt; d &amp; 1);\n  }\n\n  fprintf(stdout, \", oct:\");\n  for(c = 0; c &lt; 8; c++) {\n    if(buf2&#91;c] == '\\0')\n      break;\n    fprintf(stdout, \" %3o\", buf2&#91;c]);\n  }\n  \n  fprintf(stdout, \", codepoint: %lx\", *code);\n  fprintf(stdout, \", bin:\");\n  int print = 0;\n  for(c = (sizeof(code) * 8) - 1; c &gt;= 0; c--) {\n    int bit = (*code &gt;&gt; c) &amp; 1;\n    if(bit != 0)\n      print = 1;\n    if(print) {\n      fprintf(stdout, \"%d\", bit);\n      if(c &gt; 0 &amp;&amp; c % 8 == 0)\n\tfprintf(stdout, \"|\");\n    }\n  }\n\n  fprintf(stdout, \", oct:\");\n  fprintf(stdout, \"%lo\", *code);\n  \n  fprintf(stdout, \"\\n\");\n#endif\n}<\/code><\/pre>\n\n\n\n<p>Ristiintarkistava sorsa (ristiintarkistus viel\u00e4 hakusessa):<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><\/code><\/pre>\n\n\n\n<p>T\u00e4ss\u00e4 edellisen tuloste:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>      0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef\n      ================================================================\n    0 --- control characters ---       !\"#$%&amp;'()*+,-.\/0123456789:;&lt;=&gt;?\n   40 @ABCDEFGHIJKLMNOPQRSTUVWXYZ&#91;\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\n   80 --- utf8 characters ---         --- utf8 characters ---        \n   c0 --- utf8 characters ---         --- utf8 characters ---        \n  100 \u0100\u0101\u0102\u0103\u0104\u0105\u0106\u0107\u0108\u0109\u010a\u010b\u010c\u010d\u010e\u010f\u0110\u0111\u0112\u0113\u0114\u0115\u0116\u0117\u0118\u0119\u011a\u011b\u011c\u011d\u011e\u011f\u0120\u0121\u0122\u0123\u0124\u0125\u0126\u0127\u0128\u0129\u012a\u012b\u012c\u012d\u012e\u012f\u0130\u0131\u0132\u0133\u0134\u0135\u0136\u0137\u0138\u0139\u013a\u013b\u013c\u013d\u013e\u013f\n  140 \u0140\u0141\u0142\u0143\u0144\u0145\u0146\u0147\u0148\u0149\u014a\u014b\u014c\u014d\u014e\u014f\u0150\u0151\u0152\u0153\u0154\u0155\u0156\u0157\u0158\u0159\u015a\u015b\u015c\u015d\u015e\u015f\u0160\u0161\u0162\u0163\u0164\u0165\u0166\u0167\u0168\u0169\u016a\u016b\u016c\u016d\u016e\u016f\u0170\u0171\u0172\u0173\u0174\u0175\u0176\u0177\u0178\u0179\u017a\u017b\u017c\u017d\u017e\u017f\n  180 \u0180\u0181\u0182\u0183\u0184\u0185\u0186\u0187\u0188\u0189\u018a\u018b\u018c\u018d\u018e\u018f\u0190\u0191\u0192\u0193\u0194\u0195\u0196\u0197\u0198\u0199\u019a\u019b\u019c\u019d\u019e\u019f\u01a0\u01a1\u01a2\u01a3\u01a4\u01a5\u01a6\u01a7\u01a8\u01a9\u01aa\u01ab\u01ac\u01ad\u01ae\u01af\u01b0\u01b1\u01b2\u01b3\u01b4\u01b5\u01b6\u01b7\u01b8\u01b9\u01ba\u01bb\u01bc\u01bd\u01be\u01bf\n  1c0 \u01c0\u01c1\u01c2\u01c3\u01c4\u01c5\u01c6\u01c7\u01c8\u01c9\u01ca\u01cb\u01cc\u01cd\u01ce\u01cf\u01d0\u01d1\u01d2\u01d3\u01d4\u01d5\u01d6\u01d7\u01d8\u01d9\u01da\u01db\u01dc\u01dd\u01de\u01df\u01e0\u01e1\u01e2\u01e3\u01e4\u01e5\u01e6\u01e7\u01e8\u01e9\u01ea\u01eb\u01ec\u01ed\u01ee\u01ef\u01f0\u01f1\u01f2\u01f3\u01f4\u01f5\u01f6\u01f7\u01f8\u01f9\u01fa\u01fb\u01fc\u01fd\u01fe\u01ff\n  200 \u0200\u0201\u0202\u0203\u0204\u0205\u0206\u0207\u0208\u0209\u020a\u020b\u020c\u020d\u020e\u020f\u0210\u0211\u0212\u0213\u0214\u0215\u0216\u0217\u0218\u0219\u021a\u021b\u021c\u021d\u021e\u021f\u0220\u0221\u0222\u0223\u0224\u0225\u0226\u0227\u0228\u0229\u022a\u022b\u022c\u022d\u022e\u022f\u0230\u0231\u0232\u0233\u0234\u0235\u0236\u0237\u0238\u0239\u023a\u023b\u023c\u023d\u023e\u023f<\/code><\/pre>\n\n\n\n<p>T\u00e4ss\u00e4 joukko my\u00f6hempi\u00e4 emojeja:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\ud83c\udf3b\ud83c\udf3c\ud83c\udf3d\ud83c\udf3e\ud83c\udf3f\n1f340 \ud83c\udf40\ud83c\udf41\ud83c\udf42\ud83c\udf43\ud83c\udf44\ud83c\udf45\ud83c\udf46\ud83c\udf47\ud83c\udf48\ud83c\udf49\ud83c\udf4a\ud83c\udf4b\ud83c\udf4c\ud83c\udf4d\ud83c\udf4e\ud83c\udf4f\ud83c\udf50\ud83c\udf51\ud83c\udf52\ud83c\udf53\ud83c\udf54\ud83c\udf55\ud83c\udf56\ud83c\udf57\ud83c\udf58\ud83c\udf59\ud83c\udf5a\ud83c\udf5b\ud83c\udf5c\ud83c\udf5d\ud83c\udf5e\ud83c\udf5f\ud83c\udf60\ud83c\udf61\ud83c\udf62\ud83c\udf63\ud83c\udf64\ud83c\udf65\ud83c\udf66\ud83c\udf67\ud83c\udf68\ud83c\udf69\ud83c\udf6a\ud83c\udf6b\ud83c\udf6c\ud83c\udf6d\ud83c\udf6e\ud83c\udf6f\ud83c\udf70\ud83c\udf71\ud83c\udf72\ud83c\udf73\ud83c\udf74\ud83c\udf75\ud83c\udf76\ud83c\udf77\ud83c\udf78\ud83c\udf79\ud83c\udf7a\ud83c\udf7b\ud83c\udf7c\ud83c\udf7d\ud83c\udf7e\ud83c\udf7f\n1f380 \ud83c\udf80\ud83c\udf81\ud83c\udf82\ud83c\udf83\ud83c\udf84\ud83c\udf85\ud83c\udf86\ud83c\udf87\ud83c\udf88\ud83c\udf89\ud83c\udf8a\ud83c\udf8b\ud83c\udf8c\ud83c\udf8d\ud83c\udf8e\ud83c\udf8f\ud83c\udf90\ud83c\udf91\ud83c\udf92\ud83c\udf93\ud83c\udf94\ud83c\udf95\ud83c\udf96\ud83c\udf97\ud83c\udf98\ud83c\udf99\ud83c\udf9a\ud83c\udf9b\ud83c\udf9c\ud83c\udf9d\ud83c\udf9e\ud83c\udf9f\ud83c\udfa0\ud83c\udfa1\ud83c\udfa2\ud83c\udfa3\ud83c\udfa4\ud83c\udfa5\ud83c\udfa6\ud83c\udfa7\ud83c\udfa8\ud83c\udfa9\ud83c\udfaa\ud83c\udfab\ud83c\udfac\ud83c\udfad\ud83c\udfae\ud83c\udfaf\ud83c\udfb0\ud83c\udfb1\ud83c\udfb2\ud83c\udfb3\ud83c\udfb4\ud83c\udfb5\ud83c\udfb6\ud83c\udfb7\ud83c\udfb8\ud83c\udfb9\ud83c\udfba\ud83c\udfbb\ud83c\udfbc\ud83c\udfbd\ud83c\udfbe\ud83c\udfbf\n1f3c0 \ud83c\udfc0\ud83c\udfc1\ud83c\udfc2\ud83c\udfc3\ud83c\udfc4\ud83c\udfc5\ud83c\udfc6\ud83c\udfc7\ud83c\udfc8\ud83c\udfc9\ud83c\udfca\ud83c\udfcb\ud83c\udfcc\ud83c\udfcd\ud83c\udfce\ud83c\udfcf\ud83c\udfd0\ud83c\udfd1\ud83c\udfd2\ud83c\udfd3\ud83c\udfd4\ud83c\udfd5\ud83c\udfd6\ud83c\udfd7\ud83c\udfd8\ud83c\udfd9\ud83c\udfda\ud83c\udfdb\ud83c\udfdc\ud83c\udfdd\ud83c\udfde\ud83c\udfdf\ud83c\udfe0\ud83c\udfe1\ud83c\udfe2\ud83c\udfe3\ud83c\udfe4\ud83c\udfe5\ud83c\udfe6\ud83c\udfe7\ud83c\udfe8\ud83c\udfe9\ud83c\udfea\ud83c\udfeb\ud83c\udfec\ud83c\udfed\ud83c\udfee\ud83c\udfef\ud83c\udff0\ud83c\udff1\ud83c\udff2\ud83c\udff3\ud83c\udff4\ud83c\udff5\ud83c\udff6\ud83c\udff7\ud83c\udff8\ud83c\udff9\ud83c\udffa\ud83c\udffb\ud83c\udffc\ud83c\udffd\ud83c\udffe\ud83c\udfff\n1f400 \ud83d\udc00\ud83d\udc01\ud83d\udc02\ud83d\udc03\ud83d\udc04\ud83d\udc05\ud83d\udc06\ud83d\udc07\ud83d\udc08\ud83d\udc09\ud83d\udc0a\ud83d\udc0b\ud83d\udc0c\ud83d\udc0d\ud83d\udc0e\ud83d\udc0f\ud83d\udc10\ud83d\udc11\ud83d\udc12\ud83d\udc13\ud83d\udc14\ud83d\udc15\ud83d\udc16\ud83d\udc17\ud83d\udc18\ud83d\udc19\ud83d\udc1a\ud83d\udc1b\ud83d\udc1c\ud83d\udc1d\ud83d\udc1e\ud83d\udc1f\ud83d\udc20\ud83d\udc21\ud83d\udc22\ud83d\udc23\ud83d\udc24\ud83d\udc25\ud83d\udc26\ud83d\udc27\ud83d\udc28\ud83d\udc29\ud83d\udc2a\ud83d\udc2b\ud83d\udc2c\ud83d\udc2d\ud83d\udc2e\ud83d\udc2f\ud83d\udc30\ud83d\udc31\ud83d\udc32\ud83d\udc33\ud83d\udc34\ud83d\udc35\ud83d\udc36\ud83d\udc37\ud83d\udc38\ud83d\udc39\ud83d\udc3a\ud83d\udc3b\ud83d\udc3c\ud83d\udc3d\ud83d\udc3e\ud83d\udc3f\n1f440 \ud83d\udc40\ud83d\udc41\ud83d\udc42\ud83d\udc43\ud83d\udc44\ud83d\udc45\ud83d\udc46\ud83d\udc47\ud83d\udc48\ud83d\udc49\ud83d\udc4a\ud83d\udc4b\ud83d\udc4c\ud83d\udc4d\ud83d\udc4e\ud83d\udc4f\ud83d\udc50\ud83d\udc51\ud83d\udc52\ud83d\udc53\ud83d\udc54\ud83d\udc55\ud83d\udc56\ud83d\udc57\ud83d\udc58\ud83d\udc59\ud83d\udc5a\ud83d\udc5b\ud83d\udc5c\ud83d\udc5d\ud83d\udc5e\ud83d\udc5f\ud83d\udc60\ud83d\udc61\ud83d\udc62\ud83d\udc63\ud83d\udc64\ud83d\udc65\ud83d\udc66\ud83d\udc67\ud83d\udc68\ud83d\udc69\ud83d\udc6a\ud83d\udc6b\ud83d\udc6c\ud83d\udc6d\ud83d\udc6e\ud83d\udc6f\ud83d\udc70\ud83d\udc71\ud83d\udc72\ud83d\udc73\ud83d\udc74\ud83d\udc75\ud83d\udc76\ud83d\udc77\ud83d\udc78\ud83d\udc79\ud83d\udc7a\ud83d\udc7b\ud83d\udc7c\ud83d\udc7d\ud83d\udc7e\ud83d\udc7f\n1f480 \ud83d\udc80\ud83d\udc81\ud83d\udc82\ud83d\udc83\ud83d\udc84\ud83d\udc85\ud83d\udc86\ud83d\udc87\ud83d\udc88\ud83d\udc89\ud83d\udc8a\ud83d\udc8b\ud83d\udc8c\ud83d\udc8d\ud83d\udc8e\ud83d\udc8f\ud83d\udc90\ud83d\udc91\ud83d\udc92\ud83d\udc93\ud83d\udc94\ud83d\udc95\ud83d\udc96\ud83d\udc97\ud83d\udc98\ud83d\udc99\ud83d\udc9a\ud83d\udc9b\ud83d\udc9c\ud83d\udc9d\ud83d\udc9e\ud83d\udc9f\ud83d\udca0\ud83d\udca1\ud83d\udca2\ud83d\udca3\ud83d\udca4\ud83d\udca5\ud83d\udca6\ud83d\udca7\ud83d\udca8\ud83d\udca9\ud83d\udcaa\ud83d\udcab\ud83d\udcac\ud83d\udcad\ud83d\udcae\ud83d\udcaf\ud83d\udcb0\ud83d\udcb1\ud83d\udcb2\ud83d\udcb3\ud83d\udcb4\ud83d\udcb5\ud83d\udcb6\ud83d\udcb7\ud83d\udcb8\ud83d\udcb9\ud83d\udcba\ud83d\udcbb\ud83d\udcbc\ud83d\udcbd\ud83d\udcbe\ud83d\udcbf\n1f4c0 \ud83d\udcc0\ud83d\udcc1\ud83d\udcc2\ud83d\udcc3\ud83d\udcc4\ud83d\udcc5\ud83d\udcc6\ud83d\udcc7\ud83d\udcc8\ud83d\udcc9\ud83d\udcca\ud83d\udccb\ud83d\udccc\ud83d\udccd\ud83d\udcce\ud83d\udccf\ud83d\udcd0\ud83d\udcd1\ud83d\udcd2\ud83d\udcd3\ud83d\udcd4\ud83d\udcd5\ud83d\udcd6\ud83d\udcd7\ud83d\udcd8\ud83d\udcd9\ud83d\udcda\ud83d\udcdb\ud83d\udcdc\ud83d\udcdd\ud83d\udcde\ud83d\udcdf\ud83d\udce0\ud83d\udce1\ud83d\udce2\ud83d\udce3\ud83d\udce4\ud83d\udce5\ud83d\udce6\ud83d\udce7\ud83d\udce8\ud83d\udce9\ud83d\udcea\ud83d\udceb\ud83d\udcec\ud83d\udced\ud83d\udcee\ud83d\udcef\ud83d\udcf0\ud83d\udcf1\ud83d\udcf2\ud83d\udcf3\ud83d\udcf4\ud83d\udcf5\ud83d\udcf6\ud83d\udcf7\ud83d\udcf8\ud83d\udcf9\ud83d\udcfa\ud83d\udcfb\ud83d\udcfc\ud83d\udcfd\ud83d\udcfe\ud83d\udcff\n1f500 \ud83d\udd00\ud83d\udd01\ud83d\udd02\ud83d\udd03\ud83d\udd04\ud83d\udd05\ud83d\udd06\ud83d\udd07\ud83d\udd08\ud83d\udd09\ud83d\udd0a\ud83d\udd0b\ud83d\udd0c\ud83d\udd0d\ud83d\udd0e\ud83d\udd0f\ud83d\udd10\ud83d\udd11\ud83d\udd12\ud83d\udd13\ud83d\udd14\ud83d\udd15\ud83d\udd16\ud83d\udd17\ud83d\udd18\ud83d\udd19\ud83d\udd1a\ud83d\udd1b\ud83d\udd1c\ud83d\udd1d\ud83d\udd1e\ud83d\udd1f\ud83d\udd20\ud83d\udd21\ud83d\udd22\ud83d\udd23\ud83d\udd24\ud83d\udd25\ud83d\udd26\ud83d\udd27\ud83d\udd28\ud83d\udd29\ud83d\udd2a\ud83d\udd2b\ud83d\udd2c\ud83d\udd2d\ud83d\udd2e\ud83d\udd2f\ud83d\udd30\ud83d\udd31\ud83d\udd32\ud83d\udd33\ud83d\udd34\ud83d\udd35\ud83d\udd36\ud83d\udd37\ud83d\udd38\ud83d\udd39\ud83d\udd3a\ud83d\udd3b\ud83d\udd3c\ud83d\udd3d\ud83d\udd3e\ud83d\udd3f\n1f540 \ud83d\udd40\ud83d\udd41\ud83d\udd42\ud83d\udd43\ud83d\udd44\ud83d\udd45\ud83d\udd46\ud83d\udd47\ud83d\udd48\ud83d\udd49\ud83d\udd4a\ud83d\udd4b\ud83d\udd4c\ud83d\udd4d\ud83d\udd4e\ud83d\udd4f\ud83d\udd50\ud83d\udd51\ud83d\udd52\ud83d\udd53\ud83d\udd54\ud83d\udd55\ud83d\udd56\ud83d\udd57\ud83d\udd58\ud83d\udd59\ud83d\udd5a\ud83d\udd5b\ud83d\udd5c\ud83d\udd5d\ud83d\udd5e\ud83d\udd5f\ud83d\udd60\ud83d\udd61\ud83d\udd62\ud83d\udd63\ud83d\udd64\ud83d\udd65\ud83d\udd66\ud83d\udd67\ud83d\udd68\ud83d\udd69\ud83d\udd6a\ud83d\udd6b\ud83d\udd6c\ud83d\udd6d\ud83d\udd6e\ud83d\udd6f\ud83d\udd70\ud83d\udd71\ud83d\udd72\ud83d\udd73\ud83d\udd74\ud83d\udd75\ud83d\udd76\ud83d\udd77\ud83d\udd78\ud83d\udd79\ud83d\udd7a\ud83d\udd7b\ud83d\udd7c\ud83d\udd7d\ud83d\udd7e\ud83d\udd7f\n1f580 \ud83d\udd80\ud83d\udd81\ud83d\udd82\ud83d\udd83\ud83d\udd84\ud83d\udd85\ud83d\udd86\ud83d\udd87\ud83d\udd88\ud83d\udd89\ud83d\udd8a\ud83d\udd8b\ud83d\udd8c\ud83d\udd8d\ud83d\udd8e\ud83d\udd8f\ud83d\udd90\ud83d\udd91\ud83d\udd92\ud83d\udd93\ud83d\udd94\ud83d\udd95\ud83d\udd96\ud83d\udd97\ud83d\udd98\ud83d\udd99\ud83d\udd9a\ud83d\udd9b\ud83d\udd9c\ud83d\udd9d\ud83d\udd9e\ud83d\udd9f\ud83d\udda0\ud83d\udda1\ud83d\udda2\ud83d\udda3\ud83d\udda4\ud83d\udda5\ud83d\udda6\ud83d\udda7\ud83d\udda8\ud83d\udda9\ud83d\uddaa\ud83d\uddab\ud83d\uddac\ud83d\uddad\ud83d\uddae\ud83d\uddaf\ud83d\uddb0\ud83d\uddb1\ud83d\uddb2\ud83d\uddb3\ud83d\uddb4\ud83d\uddb5\ud83d\uddb6\ud83d\uddb7\ud83d\uddb8\ud83d\uddb9\ud83d\uddba\ud83d\uddbb\ud83d\uddbc\ud83d\uddbd\ud83d\uddbe\ud83d\uddbf\n1f5c0 \ud83d\uddc0\ud83d\uddc1\ud83d\uddc2\ud83d\uddc3\ud83d\uddc4\ud83d\uddc5\ud83d\uddc6\ud83d\uddc7\ud83d\uddc8\ud83d\uddc9\ud83d\uddca\ud83d\uddcb\ud83d\uddcc\ud83d\uddcd\ud83d\uddce\ud83d\uddcf\ud83d\uddd0\ud83d\uddd1\ud83d\uddd2\ud83d\uddd3\ud83d\uddd4\ud83d\uddd5\ud83d\uddd6\ud83d\uddd7\ud83d\uddd8\ud83d\uddd9\ud83d\uddda\ud83d\udddb\ud83d\udddc\ud83d\udddd\ud83d\uddde\ud83d\udddf\ud83d\udde0\ud83d\udde1\ud83d\udde2\ud83d\udde3\ud83d\udde4\ud83d\udde5\ud83d\udde6\ud83d\udde7\ud83d\udde8\ud83d\udde9\ud83d\uddea\ud83d\uddeb\ud83d\uddec\ud83d\udded\ud83d\uddee\ud83d\uddef\ud83d\uddf0\ud83d\uddf1\ud83d\uddf2\ud83d\uddf3\ud83d\uddf4\ud83d\uddf5\ud83d\uddf6\ud83d\uddf7\ud83d\uddf8\ud83d\uddf9\ud83d\uddfa\ud83d\uddfb\ud83d\uddfc\ud83d\uddfd\ud83d\uddfe\ud83d\uddff\n1f600 \ud83d\ude00\ud83d\ude01\ud83d\ude02\ud83d\ude03\ud83d\ude04\ud83d\ude05\ud83d\ude06\ud83d\ude07\ud83d\ude08\ud83d\ude09\ud83d\ude0a\ud83d\ude0b\ud83d\ude0c\ud83d\ude0d\ud83d\ude0e\ud83d\ude0f\ud83d\ude10\ud83d\ude11\ud83d\ude12\ud83d\ude13\ud83d\ude14\ud83d\ude15\ud83d\ude16\ud83d\ude17\ud83d\ude18\ud83d\ude19\ud83d\ude1a\ud83d\ude1b\ud83d\ude1c\ud83d\ude1d\ud83d\ude1e\ud83d\ude1f\ud83d\ude20\ud83d\ude21\ud83d\ude22\ud83d\ude23\ud83d\ude24\ud83d\ude25\ud83d\ude26\ud83d\ude27\ud83d\ude28\ud83d\ude29\ud83d\ude2a\ud83d\ude2b\ud83d\ude2c\ud83d\ude2d\ud83d\ude2e\ud83d\ude2f\ud83d\ude30\ud83d\ude31\ud83d\ude32\ud83d\ude33\ud83d\ude34\ud83d\ude35\ud83d\ude36\ud83d\ude37\ud83d\ude38\ud83d\ude39\ud83d\ude3a\ud83d\ude3b\ud83d\ude3c\ud83d\ude3d\ud83d\ude3e\ud83d\ude3f\n1f640 \ud83d\ude40\ud83d\ude41\ud83d\ude42\ud83d\ude43\ud83d\ude44\ud83d\ude45\ud83d\ude46\ud83d\ude47\ud83d\ude48\ud83d\ude49\ud83d\ude4a\ud83d\ude4b\ud83d\ude4c\ud83d\ude4d\ud83d\ude4e\ud83d\ude4f\ud83d\ude50\ud83d\ude51\ud83d\ude52\ud83d\ude53\ud83d\ude54\ud83d\ude55\ud83d\ude56\ud83d\ude57\ud83d\ude58\ud83d\ude59\ud83d\ude5a\ud83d\ude5b\ud83d\ude5c\ud83d\ude5d\ud83d\ude5e\ud83d\ude5f\ud83d\ude60\ud83d\ude61\ud83d\ude62\ud83d\ude63\ud83d\ude64\ud83d\ude65\ud83d\ude66\ud83d\ude67\ud83d\ude68\ud83d\ude69\ud83d\ude6a\ud83d\ude6b\ud83d\ude6c\ud83d\ude6d\ud83d\ude6e\ud83d\ude6f\ud83d\ude70\ud83d\ude71\ud83d\ude72\ud83d\ude73\ud83d\ude74\ud83d\ude75\ud83d\ude76\ud83d\ude77\ud83d\ude78\ud83d\ude79\ud83d\ude7a\ud83d\ude7b\ud83d\ude7c\ud83d\ude7d\ud83d\ude7e\ud83d\ude7f\n1f680 \ud83d\ude80\ud83d\ude81\ud83d\ude82\ud83d\ude83\ud83d\ude84\ud83d\ude85\ud83d\ude86\ud83d\ude87\ud83d\ude88\ud83d\ude89\ud83d\ude8a\ud83d\ude8b\ud83d\ude8c\ud83d\ude8d\ud83d\ude8e\ud83d\ude8f\ud83d\ude90\ud83d\ude91\ud83d\ude92\ud83d\ude93\ud83d\ude94\ud83d\ude95\ud83d\ude96\ud83d\ude97\ud83d\ude98\ud83d\ude99\ud83d\ude9a\ud83d\ude9b\ud83d\ude9c\ud83d\ude9d\ud83d\ude9e\ud83d\ude9f\ud83d\udea0\ud83d\udea1\ud83d\udea2\ud83d\udea3\ud83d\udea4\ud83d\udea5\ud83d\udea6\ud83d\udea7\ud83d\udea8\ud83d\udea9\ud83d\udeaa\ud83d\udeab\ud83d\udeac\ud83d\udead\ud83d\udeae\ud83d\udeaf\ud83d\udeb0\ud83d\udeb1\ud83d\udeb2\ud83d\udeb3\ud83d\udeb4\ud83d\udeb5\ud83d\udeb6\ud83d\udeb7\ud83d\udeb8\ud83d\udeb9\ud83d\udeba\ud83d\udebb\ud83d\udebc\ud83d\udebd\ud83d\udebe\ud83d\udebf<\/code><\/pre>\n\n\n\n<p>Muita emojeja (parilla ensimm\u00e4isell\u00e4 rivill\u00e4 voi olla sotkua\u2026 (Cyrillic), ne tulevat my\u00f6hemmin dumpissa uudelleen..):<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>  400 \u03c0\u03c1\u03c2\u03c3\u03c4\u03c5\u03c6\u03c7\u03c8\u03c9\u03ca\u03cb\u03cc\u03cd\u03ce\u03cf\u03d0\u03d1\u03d2\u03d3\u03d4\u03d5\u03d6\u03d7\u03d8\u03d9\u03da\u03db\u03dc\u03dd\u03de\u03df\u03e0\u03e1\u03e2\u03e3\u03e4\u03e5\u03e6\u03e7\u03e8\u03e9\u03ea\u03eb\u03ec\u03ed\u03ee\u03ef\u03f0\u03f1\u03f2\u03f3\u03f4\u03f5\n  440 \u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044a\u044b\u044c\u044d\u044e\u044f\u0450\u0451\u0452\u0453\u0454\u0455\u0456\u0457\u0458\u0459\u045a\u045b\u045c\u045d\u045e\u045f\u0460\u0461\u0462\u0463\u0464\u0465\u0466\u0467\u0468\u0469\u046a\u046b\u046c\u046d\u046e\u046f\u0470\u0471\u0472\u0473\u0474\u0475\u0476\u0477\u0478\u0479\u047a\u047b\u047c\u047d\u047e\u047f\n  480 \u0480\u0481\u0482\u048a\u048b\u048c\u048d\u048e\u048f\u0490\u0491\u0492\u0493\u0494\u0495\u0496\u0497\u0498\u0499\u049a\u049b\u049c\u049d\u049e\u049f\u04a0\u04a1\u04a2\u04a3\u04a4\u04a5\u04a6\u04a7\u04a8\u04a9\u04aa\u04ab\u04ac\u04ad\u04ae\u04af\u04b0\u04b1\u04b2\u04b3\u04b4\u04b5\u04b6\u04b7\u04b8\u04b9\u04ba\u04bb\u04bc\u04bd\u04be\u04bf\n  4c0 \u04c0\u04c1\u04c2\u04c3\u04c4\u04c5\u04c6\u04c7\u04c8\u04c9\u04ca\u04cb\u04cc\u04cd\u04ce\u04cf\u04d0\u04d1\u04d2\u04d3\u04d4\u04d5\u04d6\u04d7\u04d8\u04d9\u04da\u04db\u04dc\u04dd\u04de\u04df\u04e0\u04e1\u04e2\u04e3\u04e4\u04e5\u04e6\u04e7\u04e8\u04e9\u04ea\u04eb\u04ec\u04ed\u04ee\u04ef\u04f0\u04f1\u04f2\u04f3\u04f4\u04f5\u04f6\u04f7\u04f8\u04f9\u04fa\u04fb\u04fc\u04fd\u04fe\u04ff\n  500 \u0500\u0501\u0502\u0503\u0504\u0505\u0506\u0507\u0508\u0509\u050a\u050b\u050c\u050d\u050e\u050f\u0510\u0511\u0512\u0513\u0514\u0515\u0516\u0517\u0518\u0519\u051a\u051b\u051c\u051d\u051e\u051f\u0520\u0521\u0522\u0523\u0524\u0525\u0526\u0527\u0528\u0529\u052a\u052b\u052c\u052d\u052e\u052f\u0530\u0531\u0532\u0533\u0534\u0535\u0536\u0537\u0538\u0539\u053a\u053b\u053c\u053d\u053e\u053f\n  540 \u0540\u0541\u0542\u0543\u0544\u0545\u0546\u0547\u0548\u0549\u054a\u054b\u054c\u054d\u054e\u054f\u0550\u0551\u0552\u0553\u0554\u0555\u0556\u0557\u0558\u0559\u055a\u055b\u055c\u055d\u055e\u055f\u0560\u0561\u0562\u0563\u0564\u0565\u0566\u0567\u0568\u0569\u056a\u056b\u056c\u056d\u056e\u056f\u0570\u0571\u0572\u0573\u0574\u0575\u0576\u0577\u0578\u0579\u057a\u057b\u057c\u057d\u057e\u057f\n  580 \u0580\u0581\u0582\u0583\u0584\u0585\u0586\u0587\u0588\u0589\u058a\u058b\u058c\u058d\u058e\u058f\u0590\u05be\u05bf\n  5c0 \u05c0\u05c1\u05c2\u05c3\u05c5\u05c4\u05c6\u05c7\u05c8\u05c9\u05ca\u05cb\u05cc\u05cd\u05ce\u05cf\u05d0\u05d1\u05d2\u05d3\u05d4\u05d5\u05d6\u05d7\u05d8\u05d9\u05da\u05db\u05dc\u05dd\u05de\u05df\u05e0\u05e1\u05e2\u05e3\u05e4\u05e5\u05e6\u05e7\u05e8\u05e9\u05ea\u05eb\u05ec\u05ed\u05ee\u05ef\u05f0\u05f1\u05f2\u05f3\u05f4\u05f5\u05f6\u05f7\u05f8\u05f9\u05fa\u05fb\u05fc\u05fd\u05fe\u05ff\n  340 \u0370\u0371\u0372\u0373\u02b9\u0375\u0376\u0377\u0378\u0379\u037a\u037b\u037c\u037d;\u037f\n  380 \u0380\u0381\u0382\u0383\u0384\u0385\u0386\u00b7\u0388\u0389\u038a\u038b\u038c\u038d\u038e\u038f\u0390\u0391\u0392\u0393\u0394\u0395\u0396\u0397\u0398\u0399\u039a\u039b\u039c\u039d\u039e\u039f\u03a0\u03a1\u03a2\u03a3\u03a4\u03a5\u03a6\u03a7\u03a8\u03a9\u03aa\u03ab\u03ac\u03ad\u03ae\u03af\u03b0\u03b1\u03b2\u03b3\u03b4\u03b5\u03b6\u03b7\u03b8\u03b9\u03ba\u03bb\u03bc\u03bd\u03be\u03bf\n  3c0 \u03c0\u03c1\u03c2\u03c3\u03c4\u03c5\u03c6\u03c7\u03c8\u03c9\u03ca\u03cb\u03cc\u03cd\u03ce\u03cf\u03d0\u03d1\u03d2\u03d3\u03d4\u03d5\u03d6\u03d7\u03d8\u03d9\u03da\u03db\u03dc\u03dd\u03de\u03df\u03e0\u03e1\u03e2\u03e3\u03e4\u03e5\u03e6\u03e7\u03e8\u03e9\u03ea\u03eb\u03ec\u03ed\u03ee\u03ef\u03f0\u03f1\u03f2\u03f3\u03f4\u03f5\u03f6\u03f7\u03f8\u03f9\u03fa\u03fb\u03fc\u03fd\u03fe\u03ff\n  400 \u0400\u0401\u0402\u0403\u0404\u0405\u0406\u0407\u0408\u0409\u040a\u040b\u040c\u040d\u040e\u040f\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041a\u041b\u041c\u041d\u041e\u041f\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042a\u042b\u042c\u042d\u042e\u042f\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043a\u043b\u043c\u043d\u043e\u043f\n  440 \u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044a\u044b\u044c\u044d\u044e\u044f\u0450\u0451\u0452\u0453\u0454\u0455\u0456\u0457\u0458\u0459\u045a\u045b\u045c\u045d\u045e\u045f\u0460\u0461\u0462\u0463\u0464\u0465\u0466\u0467\u0468\u0469\u046a\u046b\u046c\u046d\u046e\u046f\u0470\u0471\u0472\u0473\u0474\u0475\u0476\u0477\u0478\u0479\u047a\u047b\u047c\u047d\u047e\u047f\n  480 \u0480\u0481\u0482\u048a\u048b\u048c\u048d\u048e\u048f\u0490\u0491\u0492\u0493\u0494\u0495\u0496\u0497\u0498\u0499\u049a\u049b\u049c\u049d\u049e\u049f\u04a0\u04a1\u04a2\u04a3\u04a4\u04a5\u04a6\u04a7\u04a8\u04a9\u04aa\u04ab\u04ac\u04ad\u04ae\u04af\u04b0\u04b1\u04b2\u04b3\u04b4\u04b5\u04b6\u04b7\u04b8\u04b9\u04ba\u04bb\u04bc\u04bd\u04be\u04bf\n  4c0 \u04c0\u04c1\u04c2\u04c3\u04c4\u04c5\u04c6\u04c7\u04c8\u04c9\u04ca\u04cb\u04cc\u04cd\u04ce\u04cf\u04d0\u04d1\u04d2\u04d3\u04d4\u04d5\u04d6\u04d7\u04d8\u04d9\u04da\u04db\u04dc\u04dd\u04de\u04df\u04e0\u04e1\u04e2\u04e3\u04e4\u04e5\u04e6\u04e7\u04e8\u04e9\u04ea\u04eb\u04ec\u04ed\u04ee\u04ef\u04f0\u04f1\u04f2\u04f3\u04f4\u04f5\u04f6\u04f7\u04f8\u04f9\u04fa\u04fb\u04fc\u04fd\u04fe\u04ff\n  600 \u0600\u0601\u0602\u0603\u0604\u0605\u0606\u0607\u0608\u0609\u060a\u060b\u060c\u060d\u060e\u060f\u061b\u061c\u061d\u061e\u061f\u0620\u0621\u0622\u0623\u0624\u0625\u0626\u0627\u0628\u0629\u062a\u062b\u062c\u062d\u062e\u062f\u0630\u0631\u0632\u0633\u0634\u0635\u0636\u0637\u0638\u0639\u063a\u063b\u063c\u063d\u063e\u063f<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>\ud809\udcb9\ud809\udcba\ud809\udcbb\ud809\udcbc\ud809\udcbd\ud809\udcbe\ud809\udcbf\n124c0 \ud809\udcc0\ud809\udcc1\ud809\udcc2\ud809\udcc3\ud809\udcc4\ud809\udcc5\ud809\udcc6\ud809\udcc7\ud809\udcc8\ud809\udcc9\ud809\udcca\ud809\udccb\ud809\udccc\ud809\udccd\ud809\udcce\ud809\udccf\ud809\udcd0\ud809\udcd1\ud809\udcd2\ud809\udcd3\ud809\udcd4\ud809\udcd5\ud809\udcd6\ud809\udcd7\ud809\udcd8\ud809\udcd9\ud809\udcda\ud809\udcdb\ud809\udcdc\ud809\udcdd\ud809\udcde\ud809\udcdf\ud809\udce0\ud809\udce1\ud809\udce2\ud809\udce3\ud809\udce4\ud809\udce5\ud809\udce6\ud809\udce7\ud809\udce8\ud809\udce9\ud809\udcea\ud809\udceb\ud809\udcec\ud809\udced\ud809\udcee\ud809\udcef\ud809\udcf0\ud809\udcf1\ud809\udcf2\ud809\udcf3\ud809\udcf4\ud809\udcf5\ud809\udcf6\ud809\udcf7\ud809\udcf8\ud809\udcf9\ud809\udcfa\ud809\udcfb\ud809\udcfc\ud809\udcfd\ud809\udcfe\ud809\udcff\n12500 \ud809\udd00\ud809\udd01\ud809\udd02\ud809\udd03\ud809\udd04\ud809\udd05\ud809\udd06\ud809\udd07\ud809\udd08\ud809\udd09\ud809\udd0a\ud809\udd0b\ud809\udd0c\ud809\udd0d\ud809\udd0e\ud809\udd0f\ud809\udd10\ud809\udd11\ud809\udd12\ud809\udd13\ud809\udd14\ud809\udd15\ud809\udd16\ud809\udd17\ud809\udd18\ud809\udd19\ud809\udd1a\ud809\udd1b\ud809\udd1c\ud809\udd1d\ud809\udd1e\ud809\udd1f\ud809\udd20\ud809\udd21\ud809\udd22\ud809\udd23\ud809\udd24\ud809\udd25\ud809\udd26\ud809\udd27\ud809\udd28\ud809\udd29\ud809\udd2a\ud809\udd2b\ud809\udd2c\ud809\udd2d\ud809\udd2e\ud809\udd2f\ud809\udd30\ud809\udd31\ud809\udd32\ud809\udd33\ud809\udd34\ud809\udd35\ud809\udd36\ud809\udd37\ud809\udd38\ud809\udd39\ud809\udd3a\ud809\udd3b\ud809\udd3c\ud809\udd3d\ud809\udd3e\ud809\udd3f\n12540 \ud809\udd40\ud809\udd41\ud809\udd42\ud809\udd43\ud809\udd44\ud809\udd45\ud809\udd46\ud809\udd47\ud809\udd48\ud809\udd49\ud809\udd4a\ud809\udd4b\ud809\udd4c\ud809\udd4d\ud809\udd4e\ud809\udd4f\ud809\udd50\ud809\udd51\ud809\udd52\ud809\udd53\ud809\udd54\ud809\udd55\ud809\udd56\ud809\udd57\ud809\udd58\ud809\udd59\ud809\udd5a\ud809\udd5b\ud809\udd5c\ud809\udd5d<\/code><\/pre>\n\n\n\n<p>, t\u00e4ss\u00e4 toinen:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\ud80c\udc00\ud80c\udc01\ud80c\udc02\ud80c\udc03\ud80c\udc04\ud80c\udc05\ud80c\udc06\ud80c\udc07\ud80c\udc08\ud80c\udc09\ud80c\udc0a\ud80c\udc0b\ud80c\udc0c\ud80c\udc0d\ud80c\udc0e\ud80c\udc0f\ud80c\udc10\ud80c\udc11\ud80c\udc12\ud80c\udc13\ud80c\udc14\ud80c\udc15\ud80c\udc16\ud80c\udc17\ud80c\udc18\ud80c\udc19\ud80c\udc1a\ud80c\udc1b\ud80c\udc1c\ud80c\udc1d\ud80c\udc1e\ud80c\udc1f\ud80c\udc20\ud80c\udc21\ud80c\udc22\ud80c\udc23\ud80c\udc24\ud80c\udc25\ud80c\udc26\ud80c\udc27\ud80c\udc28\ud80c\udc29\ud80c\udc2a\ud80c\udc2b\ud80c\udc2c\ud80c\udc2d\ud80c\udc2e\ud80c\udc2f\ud80c\udc30\ud80c\udc31\ud80c\udc32\ud80c\udc33\ud80c\udc34\ud80c\udc35\ud80c\udc36\ud80c\udc37\ud80c\udc38\ud80c\udc39\ud80c\udc3a\ud80c\udc3b\ud80c\udc3c\ud80c\udc3d\ud80c\udc3e\ud80c\udc3f\n13040 \ud80c\udc40\ud80c\udc41\ud80c\udc42\ud80c\udc43\ud80c\udc44\ud80c\udc45\ud80c\udc46\ud80c\udc47\ud80c\udc48\ud80c\udc49\ud80c\udc4a\ud80c\udc4b\ud80c\udc4c\ud80c\udc4d\ud80c\udc4e\ud80c\udc4f\ud80c\udc50\ud80c\udc51\ud80c\udc52\ud80c\udc53\ud80c\udc54\ud80c\udc55\ud80c\udc56\ud80c\udc57\ud80c\udc58\ud80c\udc59\ud80c\udc5a\ud80c\udc5b\ud80c\udc5c\ud80c\udc5d\ud80c\udc5e\ud80c\udc5f\ud80c\udc60\ud80c\udc61\ud80c\udc62\ud80c\udc63\ud80c\udc64\ud80c\udc65\ud80c\udc66\ud80c\udc67\ud80c\udc68\ud80c\udc69\ud80c\udc6a\ud80c\udc6b\ud80c\udc6c\ud80c\udc6d\ud80c\udc6e\ud80c\udc6f\ud80c\udc70\ud80c\udc71\ud80c\udc72\ud80c\udc73\ud80c\udc74\ud80c\udc75\ud80c\udc76\ud80c\udc77\ud80c\udc78\ud80c\udc79\ud80c\udc7a\ud80c\udc7b\ud80c\udc7c\ud80c\udc7d\ud80c\udc7e\ud80c\udc7f\n13080 \ud80c\udc80\ud80c\udc81\ud80c\udc82\ud80c\udc83\ud80c\udc84\ud80c\udc85\ud80c\udc86\ud80c\udc87\ud80c\udc88\ud80c\udc89\ud80c\udc8a\ud80c\udc8b\ud80c\udc8c\ud80c\udc8d\ud80c\udc8e\ud80c\udc8f\ud80c\udc90\ud80c\udc91\ud80c\udc92\ud80c\udc93\ud80c\udc94\ud80c\udc95\ud80c\udc96\ud80c\udc97\ud80c\udc98\ud80c\udc99\ud80c\udc9a\ud80c\udc9b\ud80c\udc9c\ud80c\udc9d\ud80c\udc9e\ud80c\udc9f\ud80c\udca0\ud80c\udca1\ud80c\udca2\ud80c\udca3\ud80c\udca4\ud80c\udca5\ud80c\udca6\ud80c\udca7\ud80c\udca8\ud80c\udca9\ud80c\udcaa\ud80c\udcab\ud80c\udcac\ud80c\udcad\ud80c\udcae\ud80c\udcaf\ud80c\udcb0\ud80c\udcb1\ud80c\udcb2\ud80c\udcb3\ud80c\udcb4\ud80c\udcb5\ud80c\udcb6\ud80c\udcb7\ud80c\udcb8\ud80c\udcb9\ud80c\udcba\ud80c\udcbb\ud80c\udcbc\ud80c\udcbd\ud80c\udcbe\ud80c\udcbf\n130c0 \ud80c\udcc0\ud80c\udcc1\ud80c\udcc2\ud80c\udcc3\ud80c\udcc4\ud80c\udcc5\ud80c\udcc6\ud80c\udcc7\ud80c\udcc8\ud80c\udcc9\ud80c\udcca\ud80c\udccb\ud80c\udccc\ud80c\udccd\ud80c\udcce\ud80c\udccf\ud80c\udcd0\ud80c\udcd1\ud80c\udcd2\ud80c\udcd3\ud80c\udcd4\ud80c\udcd5\ud80c\udcd6\ud80c\udcd7\ud80c\udcd8\ud80c\udcd9\ud80c\udcda\ud80c\udcdb\ud80c\udcdc\ud80c\udcdd\ud80c\udcde\ud80c\udcdf\ud80c\udce0\ud80c\udce1\ud80c\udce2\ud80c\udce3\ud80c\udce4\ud80c\udce5\ud80c\udce6\ud80c\udce7\ud80c\udce8\ud80c\udce9\ud80c\udcea\ud80c\udceb\ud80c\udcec\ud80c\udced\ud80c\udcee\ud80c\udcef\ud80c\udcf0\ud80c\udcf1\ud80c\udcf2\ud80c\udcf3\ud80c\udcf4\ud80c\udcf5\ud80c\udcf6\ud80c\udcf7\ud80c\udcf8\ud80c\udcf9\ud80c\udcfa\ud80c\udcfb\ud80c\udcfc\ud80c\udcfd\ud80c\udcfe\ud80c\udcff\n13100 \ud80c\udd00\ud80c\udd01\ud80c\udd02\ud80c\udd03\ud80c\udd04\ud80c\udd05\ud80c\udd06\ud80c\udd07\ud80c\udd08\ud80c\udd09\ud80c\udd0a\ud80c\udd0b\ud80c\udd0c\ud80c\udd0d\ud80c\udd0e\ud80c\udd0f\ud80c\udd10\ud80c\udd11\ud80c\udd12\ud80c\udd13\ud80c\udd14\ud80c\udd15\ud80c\udd16\ud80c\udd17\ud80c\udd18\ud80c\udd19\ud80c\udd1a\ud80c\udd1b\ud80c\udd1c\ud80c\udd1d\ud80c\udd1e\ud80c\udd1f\ud80c\udd20\ud80c\udd21\ud80c\udd22\ud80c\udd23\ud80c\udd24\ud80c\udd25\ud80c\udd26\ud80c\udd27\ud80c\udd28\ud80c\udd29\ud80c\udd2a\ud80c\udd2b\ud80c\udd2c\ud80c\udd2d\ud80c\udd2e\ud80c\udd2f\ud80c\udd30\ud80c\udd31\ud80c\udd32\ud80c\udd33\ud80c\udd34<\/code><\/pre>\n\n\n\n<p>, ja t\u00e4ss\u00e4:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code> 2000 \u2002\u2003\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u200c\u200d\u200e\u200f\u2010\u2011\u2012\u2013\u2014\u2015\u2016\u2017\u2018\u2019\u201a\u201b\u201c\u201d\u201e\u201f\u2020\u2021\u2022\u2023\u2024\u2025\u2026\u2027\u2029\u202a\u202b\u202c\u202d\u202e\u202f\u2030\u2031\u2032\u2033\u2034\u2035\u2036\u2037\u2038\u2039\u203a\u203b\u203c\u203d\u203e\u203f\n 2040 \u2040\u2041\u2042\u2043\u2044\u2045\u2046\u2047\u2048\u2049\u204a\u204b\u204c\u204d\u204e\u204f\u2050\u2051\u2052\u2053\u2054\u2055\u2056\u2057\u2058\u2059\u205a\u205b\u205c\u205d\u205e\u205f\u2060\u2061\u2062\u2063\u2064\u2065\u2066\u2067\u2068\u2069\u206a\u206b\u206c\u206d\u206e\u206f\u2070\u2071\u2072\u2073\u2074\u2075\u2076\u2077\u2078\u2079\u207a\u207b\u207c\u207d\u207e\u207f\n 2080 \u2080\u2081\u2082\u2083\u2084\u2085\u2086\u2087\u2088\u2089\u208a\u208b\u208c\u208d\u208e\u208f\u2090\u2091\u2092\u2093\u2094\u2095\u2096\u2097\u2098\u2099\u209a\u209b\u209c\u209d\u209e\u209f\u20a0\u20a1\u20a2\u20a3\u20a4\u20a5\u20a6\u20a7\u20a8\u20a9\u20aa\u20ab\u20ac\u20ad\u20ae\u20af\u20b0\u20b1\u20b2\u20b3\u20b4\u20b5\u20b6\u20b7\u20b8\u20b9\u20ba\u20bb\u20bc\u20bd\u20be\u20bf\n 20c0 \u20c0\u20c1\u20c2\u20c3\u20c4\u20c5\u20c6\u20c7\u20c8\u20c9\u20ca\u20cb\u20cc\u20cd\u20ce\u20cf\u20f1\u20f2\u20f3\u20f4\u20f5\u20f6\u20f7\u20f8\u20f9\u20fa\u20fb\u20fc\u20fd\u20fe\u20ff\n 2100 \u2100\u2101\u2102\u2103\u2104\u2105\u2106\u2107\u2108\u2109\u210a\u210b\u210c\u210d\u210e\u210f\u2110\u2111\u2112\u2113\u2114\u2115\u2116\u2117\u2118\u2119\u211a\u211b\u211c\u211d\u211e\u211f\u2120\u2121\u2122\u2123\u2124\u2125\u03a9\u2127\u2128\u2129K\u00c5\u212c\u212d\u212e\u212f\u2130\u2131\u2132\u2133\u2134\u2135\u2136\u2137\u2138\u2139\u213a\u213b\u213c\u213d\u213e\u213f\n 2140 \u2140\u2141\u2142\u2143\u2144\u2145\u2146\u2147\u2148\u2149\u214a\u214b\u214c\u214d\u214e\u214f\u2150\u2151\u2152\u2153\u2154\u2155\u2156\u2157\u2158\u2159\u215a\u215b\u215c\u215d\u215e\u215f\u2160\u2161\u2162\u2163\u2164\u2165\u2166\u2167\u2168\u2169\u216a\u216b\u216c\u216d\u216e\u216f\u2170\u2171\u2172\u2173\u2174\u2175\u2176\u2177\u2178\u2179\u217a\u217b\u217c\u217d\u217e\u217f\n 2180 \u2180\u2181\u2182\u2183\u2184\u2185\u2186\u2187\u2188\u2189\u218a\u218b\u218c\u218d\u218e\u218f\u2190\u2191\u2192\u2193\u2194\u2195\u2196\u2197\u2198\u2199\u219a\u219b\u219c\u219d\u219e\u219f\u21a0\u21a1\u21a2\u21a3\u21a4\u21a5\u21a6\u21a7\u21a8\u21a9\u21aa\u21ab\u21ac\u21ad\u21ae\u21af\u21b0\u21b1\u21b2\u21b3\u21b4\u21b5\u21b6\u21b7\u21b8\u21b9\u21ba\u21bb\u21bc\u21bd\u21be\u21bf\n 21c0 \u21c0\u21c1\u21c2\u21c3\u21c4\u21c5\u21c6\u21c7\u21c8\u21c9\u21ca\u21cb\u21cc\u21cd\u21ce\u21cf\u21d0\u21d1\u21d2\u21d3\u21d4\u21d5\u21d6\u21d7\u21d8\u21d9\u21da\u21db\u21dc\u21dd\u21de\u21df\u21e0\u21e1\u21e2\u21e3\u21e4\u21e5\u21e6\u21e7\u21e8\u21e9\u21ea\u21eb\u21ec\u21ed\u21ee\u21ef\u21f0\u21f1\u21f2\u21f3\u21f4\u21f5\u21f6\u21f7\u21f8\u21f9\u21fa<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>\u32a5\u32a6\u32a7\u32a8\u32a9\u32aa\u32ab\u32ac\u32ad\u32ae\u32af\u32b0\u32b1\u32b2\u32b3\u32b4\u32b5\u32b6\u32b7\u32b8\u32b9\u32ba\u32bb\u32bc\u32bd\u32be\u32bf\n 32c0 \u32c0\u32c1\u32c2\u32c3\u32c4\u32c5\u32c6\u32c7\u32c8\u32c9\u32ca\u32cb\u32cc\u32cd\u32ce\u32cf\u32d0\u32d1\u32d2\u32d3\u32d4\u32d5\u32d6\u32d7\u32d8\u32d9\u32da\u32db\u32dc\u32dd\u32de\u32df\u32e0\u32e1\u32e2\u32e3\u32e4\u32e5\u32e6\u32e7\u32e8\u32e9\u32ea\u32eb\u32ec\u32ed\u32ee\u32ef\u32f0\u32f1\u32f2\u32f3\u32f4\u32f5\u32f6\u32f7\u32f8\u32f9\u32fa\u32fb\u32fc\u32fd\u32fe\u32ff\n 3300 \u3300\u3301\u3302\u3303\u3304\u3305\u3306\u3307\u3308\u3309\u330a\u330b\u330c\u330d\u330e\u330f\u3310\u3311\u3312\u3313\u3314\u3315\u3316\u3317\u3318\u3319\u331a\u331b\u331c\u331d\u331e\u331f\u3320\u3321\u3322\u3323\u3324\u3325\u3326\u3327\u3328\u3329\u332a\u332b\u332c\u332d\u332e\u332f\u3330\u3331\u3332\u3333\u3334\u3335\u3336\u3337\u3338\u3339\u333a\u333b\u333c\u333d\u333e\u333f\n 3340 \u3340\u3341\u3342\u3343\u3344\u3345\u3346\u3347\u3348\u3349\u334a\u334b\u334c\u334d\u334e\u334f\u3350\u3351\u3352\u3353\u3354\u3355\u3356\u3357\u3358\u3359\u335a\u335b\u335c\u335d\u335e\u335f\u3360\u3361\u3362\u3363\u3364\u3365\u3366\u3367\u3368\u3369\u336a\u336b\u336c\u336d\u336e\u336f\u3370\u3371\u3372\u3373\u3374\u3375\u3376\u3377\u3378\u3379\u337a\u337b\u337c\u337d\u337e\u337f\n 3380 \u3380\u3381\u3382\u3383\u3384\u3385\u3386\u3387\u3388\u3389\u338a\u338b\u338c\u338d\u338e\u338f\u3390\u3391\u3392\u3393\u3394\u3395\u3396\u3397\u3398\u3399\u339a\u339b\u339c\u339d\u339e\u339f\u33a0\u33a1\u33a2\u33a3\u33a4\u33a5\u33a6\u33a7\u33a8\u33a9\u33aa\u33ab\u33ac\u33ad\u33ae\u33af\u33b0\u33b1\u33b2\u33b3\u33b4\u33b5\u33b6\u33b7\u33b8\u33b9\u33ba\u33bb\u33bc\u33bd\u33be\u33bf\n 33c0 \u33c0\u33c1\u33c2\u33c3\u33c4\u33c5\u33c6\u33c7\u33c8\u33c9\u33ca\u33cb\u33cc\u33cd\u33ce\u33cf\u33d0\u33d1\u33d2\u33d3\u33d4\u33d5\u33d6\u33d7\u33d8\u33d9\u33da\u33db\u33dc\u33dd\u33de\u33df\u33e0\u33e1\u33e2\u33e3\u33e4\u33e5\u33e6\u33e7\u33e8\u33e9\u33ea\u33eb\u33ec\u33ed\u33ee\u33ef\u33f0\u33f1\u33f2\u33f3\u33f4\u33f5\u33f6\u33f7\u33f8\u33f9\u33fa\u33fb\u33fc\u33fd\u33fe\u33ff<\/code><\/pre>\n\n\n\n<p>. Loput emojit:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>1bb80 \ud82e\udf80\ud82e\udf81\ud82e\udf82\ud82e\udf83\ud82e\udf84\ud82e\udf85\ud82e\udf86\ud82e\udf87\ud82e\udf88\ud82e\udf89\ud82e\udf8a\ud82e\udf8b\ud82e\udf8c\ud82e\udf8d\ud82e\udf8e\ud82e\udf8f\ud82e\udf90\ud82e\udf91\ud82e\udf92\ud82e\udf93\ud82e\udf94\ud82e\udf95\ud82e\udf96\ud82e\udf97\ud82e\udf98\ud82e\udf99\ud82e\udf9a\ud82e\udf9b\ud82e\udf9c\ud82e\udf9d\ud82e\udf9e\ud82e\udf9f\ud82e\udfa0\ud82e\udfa1\ud82e\udfa2\ud82e\udfa3\ud82e\udfa4\ud82e\udfa5\ud82e\udfa6\ud82e\udfa7\ud82e\udfa8\ud82e\udfa9\ud82e\udfaa\ud82e\udfab\ud82e\udfac\ud82e\udfad\ud82e\udfae\ud82e\udfaf\ud82e\udfb0\ud82e\udfb1\ud82e\udfb2\ud82e\udfb3\ud82e\udfb4\ud82e\udfb5\ud82e\udfb6\ud82e\udfb7\ud82e\udfb8\ud82e\udfb9\ud82e\udfba\ud82e\udfbb\ud82e\udfbc\ud82e\udfbd\ud82e\udfbe\ud82e\udfbf\n1bbc0 \ud82e\udfc0\ud82e\udfc1\ud82e\udfc2\ud82e\udfc3\ud82e\udfc4\ud82e\udfc5\ud82e\udfc6\ud82e\udfc7\ud82e\udfc8\ud82e\udfc9\ud82e\udfca\ud82e\udfcb\ud82e\udfcc\ud82e\udfcd\ud82e\udfce\ud82e\udfcf\ud82e\udfd0\ud82e\udfd1\ud82e\udfd2\ud82e\udfd3\ud82e\udfd4\ud82e\udfd5\ud82e\udfd6\ud82e\udfd7\ud82e\udfd8\ud82e\udfd9\ud82e\udfda\ud82e\udfdb\ud82e\udfdc\ud82e\udfdd\ud82e\udfde\ud82e\udfdf\ud82e\udfe0\ud82e\udfe1\ud82e\udfe2\ud82e\udfe3\ud82e\udfe4\ud82e\udfe5\ud82e\udfe6\ud82e\udfe7\ud82e\udfe8\ud82e\udfe9\ud82e\udfea\ud82e\udfeb\ud82e\udfec\ud82e\udfed\ud82e\udfee\ud82e\udfef\ud82e\udff0\ud82e\udff1\ud82e\udff2\ud82e\udff3\ud82e\udff4\ud82e\udff5\ud82e\udff6\ud82e\udff7\ud82e\udff8\ud82e\udff9\ud82e\udffa\ud82e\udffb\ud82e\udffc\ud82e\udffd\ud82e\udffe\ud82e\udfff\n1bc00 \ud82f\udc00\ud82f\udc01\ud82f\udc02\ud82f\udc03\ud82f\udc04\ud82f\udc05\ud82f\udc06\ud82f\udc07\ud82f\udc08\ud82f\udc09\ud82f\udc0a\ud82f\udc0b\ud82f\udc0c\ud82f\udc0d\ud82f\udc0e\ud82f\udc0f\ud82f\udc10\ud82f\udc11\ud82f\udc12\ud82f\udc13\ud82f\udc14\ud82f\udc15\ud82f\udc16\ud82f\udc17\ud82f\udc18\ud82f\udc19\ud82f\udc1a\ud82f\udc1b\ud82f\udc1c\ud82f\udc1d\ud82f\udc1e\ud82f\udc1f\ud82f\udc20\ud82f\udc21\ud82f\udc22\ud82f\udc23\ud82f\udc24\ud82f\udc25\ud82f\udc26\ud82f\udc27\ud82f\udc28\ud82f\udc29\ud82f\udc2a\ud82f\udc2b\ud82f\udc2c\ud82f\udc2d\ud82f\udc2e\ud82f\udc2f\ud82f\udc30\ud82f\udc31\ud82f\udc32\ud82f\udc33\ud82f\udc34\ud82f\udc35\ud82f\udc36\ud82f\udc37\ud82f\udc38\ud82f\udc39\ud82f\udc3a\ud82f\udc3b\ud82f\udc3c\ud82f\udc3d\ud82f\udc3e\ud82f\udc3f\n1bc40 \ud82f\udc40\ud82f\udc41\ud82f\udc42\ud82f\udc43\ud82f\udc44\ud82f\udc45\ud82f\udc46\ud82f\udc47\ud82f\udc48\ud82f\udc49\ud82f\udc4a\ud82f\udc4b\ud82f\udc4c\ud82f\udc4d\ud82f\udc4e\ud82f\udc4f\ud82f\udc50\ud82f\udc51\ud82f\udc52\ud82f\udc53\ud82f\udc54\ud82f\udc55\ud82f\udc56\ud82f\udc57\ud82f\udc58\ud82f\udc59\ud82f\udc5a\ud82f\udc5b\ud82f\udc5c\ud82f\udc5d\ud82f\udc5e\ud82f\udc5f\ud82f\udc60\ud82f\udc61\ud82f\udc62\ud82f\udc63\ud82f\udc64\ud82f\udc65\ud82f\udc66\ud82f\udc67\ud82f\udc68\ud82f\udc69\ud82f\udc6a\ud82f\udc6b\ud82f\udc6c\ud82f\udc6d\ud82f\udc6e\ud82f\udc6f\ud82f\udc70\ud82f\udc71\ud82f\udc72\ud82f\udc73\ud82f\udc74\ud82f\udc75\ud82f\udc76\ud82f\udc77\ud82f\udc78\ud82f\udc79\ud82f\udc7a\ud82f\udc7b\ud82f\udc7c\ud82f\udc7d\ud82f\udc7e\ud82f\udc7f\n1bc80 \ud82f\udc80\ud82f\udc81\ud82f\udc82\ud82f\udc83\ud82f\udc84\ud82f\udc85\ud82f\udc86\ud82f\udc87\ud82f\udc88\ud82f\udc89\ud82f\udc8a\ud82f\udc8b\ud82f\udc8c\ud82f\udc8d\ud82f\udc8e\ud82f\udc8f\ud82f\udc90\ud82f\udc91\ud82f\udc92\ud82f\udc93\ud82f\udc94\ud82f\udc95\ud82f\udc96\ud82f\udc97\ud82f\udc98\ud82f\udc99\ud82f\udc9a\ud82f\udc9b\ud82f\udc9c\ud82f\udc9d\ud82f\udc9e\ud82f\udc9f\ud82f\udca0\ud82f\udca1\ud82f\udca2\ud82f\udca3\ud82f\udca4\ud82f\udca5\ud82f\udca6\ud82f\udca7\ud82f\udca8\ud82f\udca9\ud82f\udcaa\ud82f\udcab\ud82f\udcac\ud82f\udcad\ud82f\udcae\ud82f\udcaf\ud82f\udcb0\ud82f\udcb1\ud82f\udcb2\ud82f\udcb3\ud82f\udcb4\ud82f\udcb5\ud82f\udcb6\ud82f\udcb7\ud82f\udcb8\ud82f\udcb9\ud82f\udcba\ud82f\udcbb\ud82f\udcbc\ud82f\udcbd\ud82f\udcbe\ud82f\udcbf\n1bcc0 \ud82f\udcc0\ud82f\udcc1\ud82f\udcc2\ud82f\udcc3\ud82f\udcc4\ud82f\udcc5\ud82f\udcc6\ud82f\udcc7\ud82f\udcc8\ud82f\udcc9\ud82f\udcca\ud82f\udccb\ud82f\udccc\ud82f\udccd\ud82f\udcce\ud82f\udccf\ud82f\udcd0\ud82f\udcd1\ud82f\udcd2\ud82f\udcd3\ud82f\udcd4\ud82f\udcd5\ud82f\udcd6\ud82f\udcd7\ud82f\udcd8\ud82f\udcd9\ud82f\udcda\ud82f\udcdb\ud82f\udcdc\ud82f\udcdd\ud82f\udcde\ud82f\udcdf\ud82f\udce0\ud82f\udce1\ud82f\udce2\ud82f\udce3\ud82f\udce4\ud82f\udce5\ud82f\udce6\ud82f\udce7\ud82f\udce8\ud82f\udce9\ud82f\udcea\ud82f\udceb\ud82f\udcec\ud82f\udced\ud82f\udcee\ud82f\udcef\ud82f\udcf0\ud82f\udcf1\ud82f\udcf2\ud82f\udcf3\ud82f\udcf4\ud82f\udcf5\ud82f\udcf6\ud82f\udcf7\ud82f\udcf8\ud82f\udcf9\ud82f\udcfa\ud82f\udcfb\ud82f\udcfc\ud82f\udcfd\ud82f\udcfe\ud82f\udcff\n1bd00 \ud82f\udd00\ud82f\udd01\ud82f\udd02\ud82f\udd03\ud82f\udd04\ud82f\udd05\ud82f\udd06\ud82f\udd07\ud82f\udd08\ud82f\udd09\ud82f\udd0a\ud82f\udd0b\ud82f\udd0c\ud82f\udd0d\ud82f\udd0e\ud82f\udd0f\ud82f\udd10\ud82f\udd11\ud82f\udd12\ud82f\udd13\ud82f\udd14\ud82f\udd15\ud82f\udd16\ud82f\udd17\ud82f\udd18\ud82f\udd19\ud82f\udd1a<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>\ud819\udfc0\ud819\udfc1\ud819\udfc2\ud819\udfc3\ud819\udfc4\ud819\udfc5\ud819\udfc6\ud819\udfc7\ud819\udfc8\ud819\udfc9\ud819\udfca\ud819\udfcb\ud819\udfcc\ud819\udfcd\ud819\udfce\ud819\udfcf\ud819\udfd0\ud819\udfd1\ud819\udfd2\ud819\udfd3\ud819\udfd4\ud819\udfd5\ud819\udfd6\ud819\udfd7\ud819\udfd8\ud819\udfd9\ud819\udfda\ud819\udfdb\ud819\udfdc\ud819\udfdd\ud819\udfde\ud819\udfdf\ud819\udfe0\ud819\udfe1\ud819\udfe2\ud819\udfe3\ud819\udfe4\ud819\udfe5\ud819\udfe6\ud819\udfe7\ud819\udfe8\ud819\udfe9\ud819\udfea\ud819\udfeb\ud819\udfec\ud819\udfed\ud819\udfee\ud819\udfef\ud819\udff0\ud819\udff1\ud819\udff2\ud819\udff3\ud819\udff4\ud819\udff5\ud819\udff6\ud819\udff7\ud819\udff8\ud819\udff9\ud819\udffa\ud819\udffb\ud819\udffc\ud819\udffd\ud819\udffe\ud819\udfff\n16800 \ud81a\udc00\ud81a\udc01\ud81a\udc02\ud81a\udc03\ud81a\udc04\ud81a\udc05\ud81a\udc06\ud81a\udc07\ud81a\udc08\ud81a\udc09\ud81a\udc0a\ud81a\udc0b\ud81a\udc0c\ud81a\udc0d\ud81a\udc0e\ud81a\udc0f\ud81a\udc10\ud81a\udc11\ud81a\udc12\ud81a\udc13\ud81a\udc14\ud81a\udc15\ud81a\udc16\ud81a\udc17\ud81a\udc18\ud81a\udc19\ud81a\udc1a\ud81a\udc1b\ud81a\udc1c\ud81a\udc1d\ud81a\udc1e\ud81a\udc1f\ud81a\udc20\ud81a\udc21\ud81a\udc22\ud81a\udc23\ud81a\udc24\ud81a\udc25\ud81a\udc26\ud81a\udc27\ud81a\udc28\ud81a\udc29\ud81a\udc2a\ud81a\udc2b\ud81a\udc2c\ud81a\udc2d\ud81a\udc2e\ud81a\udc2f\ud81a\udc30\ud81a\udc31\ud81a\udc32\ud81a\udc33\ud81a\udc34\ud81a\udc35\ud81a\udc36\ud81a\udc37\ud81a\udc38\ud81a\udc39\ud81a\udc3a\ud81a\udc3b\ud81a\udc3c\ud81a\udc3d\ud81a\udc3e\ud81a\udc3f\n16840 \ud81a\udc40\ud81a\udc41\ud81a\udc42\ud81a\udc43\ud81a\udc44\ud81a\udc45\ud81a\udc46\ud81a\udc47\ud81a\udc48\ud81a\udc49\ud81a\udc4a\ud81a\udc4b\ud81a\udc4c\ud81a\udc4d\ud81a\udc4e\ud81a\udc4f\ud81a\udc50\ud81a\udc51\ud81a\udc52\ud81a\udc53\ud81a\udc54\ud81a\udc55\ud81a\udc56\ud81a\udc57\ud81a\udc58\ud81a\udc59\ud81a\udc5a\ud81a\udc5b\ud81a\udc5c\ud81a\udc5d\ud81a\udc5e\ud81a\udc5f\ud81a\udc60\ud81a\udc61\ud81a\udc62\ud81a\udc63\ud81a\udc64\ud81a\udc65\ud81a\udc66\ud81a\udc67\ud81a\udc68\ud81a\udc69\ud81a\udc6a\ud81a\udc6b\ud81a\udc6c\ud81a\udc6d\ud81a\udc6e\ud81a\udc6f\ud81a\udc70\ud81a\udc71\ud81a\udc72\ud81a\udc73\ud81a\udc74\ud81a\udc75\ud81a\udc76\ud81a\udc77\ud81a\udc78\ud81a\udc79\ud81a\udc7a\ud81a\udc7b\ud81a\udc7c\ud81a\udc7d\ud81a\udc7e\ud81a\udc7f\n16880 \ud81a\udc80\ud81a\udc81\ud81a\udc82\ud81a\udc83\ud81a\udc84\ud81a\udc85\ud81a\udc86\ud81a\udc87\ud81a\udc88\ud81a\udc89\ud81a\udc8a\ud81a\udc8b\ud81a\udc8c\ud81a\udc8d\ud81a\udc8e\ud81a\udc8f\ud81a\udc90\ud81a\udc91\ud81a\udc92\ud81a\udc93\ud81a\udc94\ud81a\udc95\ud81a\udc96\ud81a\udc97\ud81a\udc98\ud81a\udc99\ud81a\udc9a\ud81a\udc9b\ud81a\udc9c\ud81a\udc9d\ud81a\udc9e\ud81a\udc9f\ud81a\udca0\ud81a\udca1\ud81a\udca2\ud81a\udca3\ud81a\udca4\ud81a\udca5\ud81a\udca6\ud81a\udca7\ud81a\udca8\ud81a\udca9\ud81a\udcaa\ud81a\udcab\ud81a\udcac\ud81a\udcad\ud81a\udcae\ud81a\udcaf\ud81a\udcb0\ud81a\udcb1\ud81a\udcb2\ud81a\udcb3\ud81a\udcb4\ud81a\udcb5\ud81a\udcb6\ud81a\udcb7\ud81a\udcb8\ud81a\udcb9\ud81a\udcba\ud81a\udcbb\ud81a\udcbc\ud81a\udcbd\ud81a\udcbe\ud81a\udcbf\n168c0 \ud81a\udcc0\ud81a\udcc1\ud81a\udcc2\ud81a\udcc3\ud81a\udcc4\ud81a\udcc5\ud81a\udcc6\ud81a\udcc7\ud81a\udcc8\ud81a\udcc9\ud81a\udcca\ud81a\udccb\ud81a\udccc\ud81a\udccd\ud81a\udcce\ud81a\udccf\ud81a\udcd0\ud81a\udcd1\ud81a\udcd2\ud81a\udcd3\ud81a\udcd4\ud81a\udcd5\ud81a\udcd6\ud81a\udcd7\ud81a\udcd8\ud81a\udcd9\ud81a\udcda\ud81a\udcdb\ud81a\udcdc\ud81a\udcdd\ud81a\udcde\ud81a\udcdf\ud81a\udce0\ud81a\udce1\ud81a\udce2\ud81a\udce3\ud81a\udce4\ud81a\udce5\ud81a\udce6\ud81a\udce7\ud81a\udce8\ud81a\udce9\ud81a\udcea\ud81a\udceb\ud81a\udcec\ud81a\udced\ud81a\udcee\ud81a\udcef\ud81a\udcf0\ud81a\udcf1\ud81a\udcf2\ud81a\udcf3\ud81a\udcf4\ud81a\udcf5\ud81a\udcf6\ud81a\udcf7\ud81a\udcf8\ud81a\udcf9\ud81a\udcfa\ud81a\udcfb\ud81a\udcfc\ud81a\udcfd\ud81a\udcfe\ud81a\udcff\n16900 \ud81a\udd00\ud81a\udd01\ud81a\udd02\ud81a\udd03\ud81a\udd04\ud81a\udd05\ud81a\udd06\ud81a\udd07\ud81a\udd08\ud81a\udd09\ud81a\udd0a\ud81a\udd0b\ud81a\udd0c\ud81a\udd0d\ud81a\udd0e\ud81a\udd0f\ud81a\udd10\ud81a\udd11\ud81a\udd12\ud81a\udd13\ud81a\udd14\ud81a\udd15\ud81a\udd16\ud81a\udd17\ud81a\udd18\ud81a\udd19\ud81a\udd1a\ud81a\udd1b\ud81a\udd1c\ud81a\udd1d\ud81a\udd1e\ud81a\udd1f\ud81a\udd20\ud81a\udd21\ud81a\udd22\ud81a\udd23\ud81a\udd24\ud81a\udd25\ud81a\udd26\ud81a\udd27\ud81a\udd28\ud81a\udd29\ud81a\udd2a\ud81a\udd2b\ud81a\udd2c\ud81a\udd2d\ud81a\udd2e\ud81a\udd2f\ud81a\udd30\ud81a\udd31\ud81a\udd32\ud81a\udd33\ud81a\udd34\ud81a\udd35\ud81a\udd36\ud81a\udd37\ud81a\udd38\ud81a\udd39\ud81a\udd3a\ud81a\udd3b\ud81a\udd3c\ud81a\udd3d\ud81a\udd3e\ud81a\udd3f\n16940 \ud81a\udd40\ud81a\udd41\ud81a\udd42\ud81a\udd43\ud81a\udd44\ud81a\udd45\ud81a\udd46\ud81a\udd47\ud81a\udd48\ud81a\udd49\ud81a\udd4a\ud81a\udd4b\ud81a\udd4c\ud81a\udd4d\ud81a\udd4e\ud81a\udd4f\ud81a\udd50\ud81a\udd51\ud81a\udd52\ud81a\udd53\ud81a\udd54\ud81a\udd55\ud81a\udd56\ud81a\udd57\ud81a\udd58\ud81a\udd59\ud81a\udd5a\ud81a\udd5b\ud81a\udd5c\ud81a\udd5d\ud81a\udd5e\ud81a\udd5f\ud81a\udd60\ud81a\udd61\ud81a\udd62\ud81a\udd63\ud81a\udd64\ud81a\udd65\ud81a\udd66\ud81a\udd67\ud81a\udd68\ud81a\udd69\ud81a\udd6a\ud81a\udd6b\ud81a\udd6c\ud81a\udd6d\ud81a\udd6e\ud81a\udd6f\ud81a\udd70\ud81a\udd71\ud81a\udd72\ud81a\udd73\ud81a\udd74\ud81a\udd75\ud81a\udd76\ud81a\udd77\ud81a\udd78\ud81a\udd79\ud81a\udd7a\ud81a\udd7b\ud81a\udd7c\ud81a\udd7d\ud81a\udd7e\ud81a\udd7f\n16980 \ud81a\udd80\ud81a\udd81\ud81a\udd82\ud81a\udd83\ud81a\udd84\ud81a\udd85\ud81a\udd86\ud81a\udd87\ud81a\udd88\ud81a\udd89\ud81a\udd8a\ud81a\udd8b\ud81a\udd8c\ud81a\udd8d\ud81a\udd8e\ud81a\udd8f\ud81a\udd90\ud81a\udd91\ud81a\udd92\ud81a\udd93\ud81a\udd94\ud81a\udd95\ud81a\udd96\ud81a\udd97\ud81a\udd98\ud81a\udd99\ud81a\udd9a\ud81a\udd9b\ud81a\udd9c\ud81a\udd9d\ud81a\udd9e\ud81a\udd9f\ud81a\udda0\ud81a\udda1\ud81a\udda2\ud81a\udda3\ud81a\udda4\ud81a\udda5\ud81a\udda6\ud81a\udda7\ud81a\udda8\ud81a\udda9\ud81a\uddaa\ud81a\uddab\ud81a\uddac\ud81a\uddad\ud81a\uddae\ud81a\uddaf\ud81a\uddb0\ud81a\uddb1\ud81a\uddb2\ud81a\uddb3\ud81a\uddb4\ud81a\uddb5\ud81a\uddb6\ud81a\uddb7\ud81a\uddb8\ud81a\uddb9\ud81a\uddba\ud81a\uddbb\ud81a\uddbc\ud81a\uddbd\ud81a\uddbe\ud81a\uddbf\n169c0 \ud81a\uddc0\ud81a\uddc1\ud81a\uddc2\ud81a\uddc3\ud81a\uddc4\ud81a\uddc5\ud81a\uddc6\ud81a\uddc7\ud81a\uddc8\ud81a\uddc9\ud81a\uddca\ud81a\uddcb\ud81a\uddcc\ud81a\uddcd\ud81a\uddce\ud81a\uddcf\ud81a\uddd0\ud81a\uddd1\ud81a\uddd2\ud81a\uddd3\ud81a\uddd4\ud81a\uddd5\ud81a\uddd6\ud81a\uddd7\ud81a\uddd8\ud81a\uddd9\ud81a\uddda\ud81a\udddb\ud81a\udddc\ud81a\udddd\ud81a\uddde\ud81a\udddf\ud81a\udde0\ud81a\udde1\ud81a\udde2\ud81a\udde3\ud81a\udde4\ud81a\udde5\ud81a\udde6\ud81a\udde7\ud81a\udde8\ud81a\udde9\ud81a\uddea\ud81a\uddeb\ud81a\uddec\ud81a\udded\ud81a\uddee\ud81a\uddef\ud81a\uddf0\ud81a\uddf1\ud81a\uddf2\ud81a\uddf3\ud81a\uddf4\ud81a\uddf5\ud81a\uddf6\ud81a\uddf7\ud81a\uddf8\ud81a\uddf9\ud81a\uddfa\ud81a\uddfb\ud81a\uddfc\ud81a\uddfd\ud81a\uddfe\ud81a\uddff\n16a00 \ud81a\ude00\ud81a\ude01\ud81a\ude02\ud81a\ude03\ud81a\ude04\ud81a\ude05\ud81a\ude06\ud81a\ude07\ud81a\ude08\ud81a\ude09\ud81a\ude0a\ud81a\ude0b\ud81a\ude0c\ud81a\ude0d\ud81a\ude0e\ud81a\ude0f\ud81a\ude10\ud81a\ude11\ud81a\ude12\ud81a\ude13\ud81a\ude14\ud81a\ude15\ud81a\ude16\ud81a\ude17\ud81a\ude18\ud81a\ude19\ud81a\ude1a\ud81a\ude1b\ud81a\ude1c\ud81a\ude1d\ud81a\ude1e\ud81a\ude1f\ud81a\ude20\ud81a\ude21\ud81a\ude22\ud81a\ude23\ud81a\ude24\ud81a\ude25\ud81a\ude26\ud81a\ude27\ud81a\ude28\ud81a\ude29\ud81a\ude2a\ud81a\ude2b\ud81a\ude2c\ud81a\ude2d\ud81a\ude2e\ud81a\ude2f\ud81a\ude30\ud81a\ude31\ud81a\ude32\ud81a\ude33\ud81a\ude34\ud81a\ude35\ud81a\ude36\ud81a\ude37\ud81a\ude38\ud81a\ude39\ud81a\ude3a\ud81a\ude3b\ud81a\ude3c\ud81a\ude3d\ud81a\ude3e\ud81a\ude3f\n16a40 \ud81a\ude40\ud81a\ude41\ud81a\ude42\ud81a\ude43\ud81a\ude44\ud81a\ude45\ud81a\ude46\ud81a\ude47\ud81a\ude48\ud81a\ude49\ud81a\ude4a\ud81a\ude4b\ud81a\ude4c\ud81a\ude4d\ud81a\ude4e\ud81a\ude4f\ud81a\ude50\ud81a\ude51\ud81a\ude52\ud81a\ude53\ud81a\ude54\ud81a\ude55\ud81a\ude56\ud81a\ude57\ud81a\ude58\ud81a\ude59\ud81a\ude5a\ud81a\ude5b\ud81a\ude5c\ud81a\ude5d\ud81a\ude5e\ud81a\ude5f\ud81a\ude60\ud81a\ude61\ud81a\ude62\ud81a\ude63\ud81a\ude64\ud81a\ude65\ud81a\ude66\ud81a\ude67\ud81a\ude68\ud81a\ude69\ud81a\ude6a\ud81a\ude6b\ud81a\ude6c\ud81a\ude6d\ud81a\ude6e\ud81a\ude6f\ud81a\ude70\ud81a\ude71\ud81a\ude72\ud81a\ude73\ud81a\ude74\ud81a\ude75\ud81a\ude76\ud81a\ude77\ud81a\ude78\ud81a\ude79\ud81a\ude7a\ud81a\ude7b\ud81a\ude7c\ud81a\ude7d\ud81a\ude7e\ud81a\ude7f\n16a80 \ud81a\ude80\ud81a\ude81\ud81a\ude82\ud81a\ude83\ud81a\ude84\ud81a\ude85\ud81a\ude86\ud81a\ude87\ud81a\ude88\ud81a\ude89\ud81a\ude8a\ud81a\ude8b\ud81a\ude8c\ud81a\ude8d\ud81a\ude8e\ud81a\ude8f\ud81a\ude90\ud81a\ude91\ud81a\ude92\ud81a\ude93\ud81a\ude94\ud81a\ude95\ud81a\ude96\ud81a\ude97\ud81a\ude98\ud81a\ude99\ud81a\ude9a\ud81a\ude9b\ud81a\ude9c\ud81a\ude9d\ud81a\ude9e\ud81a\ude9f\ud81a\udea0\ud81a\udea1\ud81a\udea2\ud81a\udea3\ud81a\udea4\ud81a\udea5\ud81a\udea6\ud81a\udea7\ud81a\udea8\ud81a\udea9\ud81a\udeaa\ud81a\udeab\ud81a\udeac\ud81a\udead\ud81a\udeae\ud81a\udeaf\ud81a\udeb0\ud81a\udeb1\ud81a\udeb2\ud81a\udeb3\ud81a\udeb4\ud81a\udeb5\ud81a\udeb6\ud81a\udeb7\ud81a\udeb8\ud81a\udeb9\ud81a\udeba\ud81a\udebb\ud81a\udebc\ud81a\udebd\ud81a\udebe\ud81a\udebf<\/code><\/pre>\n\n\n\n<p>. T\u00e4ss\u00e4 kaikki utf-8 merkit (utf-8 merkit, emojit): (ilmeisesti ei mahtunut, paste ei onnistunut&#8230;)<\/p>\n\n\n\n<p> Ei se mit\u00e4\u00e4n aina p\u00e4tee sano se koodilla: t\u00e4ss\u00e4 vaihteeksi (ceet\u00e4:)<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#include &lt;stdio.h>\n#include &lt;stdlib.h>\n#include &lt;string.h>\n\n#define ulonglong unsigned long long\n\nunsigned char *procname = \"utf-8\";\nstatic unsigned char *programname = \"Utf-8 version 0.04 \u00a9\";\nstatic unsigned char *copyright = \"Copyright (c) 1998-2026 Jari Kuivaniemi (moijari.com), Helsinki, Finland. Kaikki oikeudet pid\u00e4tet\u00e4\u00e4n!\";\n\n#define DEBUG42 2\n\n\/\/ crosscheck utf8 characters\n#define DEBUG43 2\n\n#ifdef DEBUG42\nint verbose1 = 0;\n#ifdef DEBUG43\nint verbose2 = 0;\n#endif\n#endif\n\nint size = -1, cwords = 0, sspace = 0;\nstatic int pwords = 0, slineno = 1, plinesdigits = 5, charwidth = 1;\n\n#ifdef DEBUG43\n\nstatic void utf8tocode(ulonglong *code, unsigned char *buf2)\n{\n  unsigned char *buf;\n  \n  *code = 0;\n  buf = buf2;\n  \n  if(*buf &lt;= 0x7f) {                  \/\/ 0xxxxxxx\n    *code = *buf;\n  } else if(*buf &lt; 0xc0) {            \/\/ 110xxxxx 10xxxxxx\n    *code = 0;\n  } else if(*buf &lt; 0xe0) {            \/\/ 110xxxxx 10xxxxxx\n    *code = *buf++ &amp; 0x1f;\n    *code = (*code &lt;&lt; 6) + (*buf++ &amp; 0x3f);\n  } else if(*buf &lt; 0xf0) {            \/\/ 1110xxxx 10xxxxxx 10xxxxxx\n    *code = *buf++ &amp; 0x0f;\n    *code = (*code &lt;&lt; 6) + (*buf++ &amp; 0x3f);\n    *code = (*code &lt;&lt; 6) + (*buf++ &amp; 0x3f);\n  } else if(*buf&lt;0xf8) {            \/\/ 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx\n    *code = *buf++ &amp; 0x07;\n    *code = (*code &lt;&lt; 6) + (*buf++ &amp; 0x3f);\n    *code = (*code &lt;&lt; 6) + (*buf++ &amp; 0x3f);\n    *code = (*code &lt;&lt; 6) + (*buf++ &amp; 0x3f);\n  } else if(*buf &lt; 0xfc) {            \/\/ 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx\n    *code = *buf++ &amp; 0x03;\n    *code = (*code &lt;&lt; 6) + (*buf++ &amp; 0x3f);\n    *code = (*code &lt;&lt; 6) + (*buf++ &amp; 0x3f);\n    *code = (*code &lt;&lt; 6) + (*buf++ &amp; 0x3f);\n    *code = (*code &lt;&lt; 6) + (*buf++ &amp; 0x3f);\n  } else if(*buf &lt; 0xfe) {            \/\/ 1111110x 10xxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx\n    *code = *buf++ &amp; 0x01;\n    *code = (*code &lt;&lt; 6) + (*buf++ &amp; 0x3f);\n    *code = (*code &lt;&lt; 6) + (*buf++ &amp; 0x3f);\n    *code = (*code &lt;&lt; 6) + (*buf++ &amp; 0x3f);\n    *code = (*code &lt;&lt; 6) + (*buf++ &amp; 0x3f);\n    *code = (*code &lt;&lt; 6) + (*buf++ &amp; 0x3f);\n  } else if(*buf &lt; 0xff) {            \/\/ 11111110 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx\n    buf++;\n    *code = *buf++ &amp; 0x3f;\n    *code = (*code &lt;&lt; 6) + (*buf++ &amp; 0x3f);\n    *code = (*code &lt;&lt; 6) + (*buf++ &amp; 0x3f);\n    *code = (*code &lt;&lt; 6) + (*buf++ &amp; 0x3f);\n    *code = (*code &lt;&lt; 6) + (*buf++ &amp; 0x3f);\n    *code = (*code &lt;&lt; 6) + (*buf++ &amp; 0x3f);\n  } else if(*buf == 0xff) {            \/\/ 11111111 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx\n    buf++;\n    *code = *buf++ &amp; 0x3f;\n    *code = (*code &lt;&lt; 6) + (*buf++ &amp; 0x3f);\n    *code = (*code &lt;&lt; 6) + (*buf++ &amp; 0x3f);\n    *code = (*code &lt;&lt; 6) + (*buf++ &amp; 0x3f);\n    *code = (*code &lt;&lt; 6) + (*buf++ &amp; 0x3f);\n    *code = (*code &lt;&lt; 6) + (*buf++ &amp; 0x3f);\n    *code = (*code &lt;&lt; 6) + (*buf++ &amp; 0x3f);\n  }\n#ifdef DEBUG43\n\n  if(verbose2) {\n    int c;\n    \n    fprintf(stdout, \"bin2: \");\n    for(c = 0; c &lt; 8; c++) {\n      if(buf2&#91;c] == '\\0')\n\tbreak;\n      if(c > 0)\n\tfprintf(stdout, \"|\");\n      for(int d = 7; d >= 0; d--)\n\tfprintf(stdout, \"%d\", buf2&#91;c] >> d &amp; 1);\n    }\n    \n    fprintf(stdout, \", oct2:\");\n    for(c = 0; c &lt; 8; c++) {\n      if(buf2&#91;c] == '\\0')\n\tbreak;\n      fprintf(stdout, \" %3o\", buf2&#91;c]);\n    }\n    \n    fprintf(stdout, \", utf8_2: \");\n    for(c = 0; c &lt; 8; c++) {\n      if(buf2&#91;c] == '\\0')\n\tbreak;\n      fprintf(stdout,\"%02x\", buf2&#91;c]);\n    }\n    \n    fprintf(stdout, \", char2: %s\", buf2);\n\n    fprintf(stdout,\", char2bin: \");\n    for(c = 0; c &lt; 8; c++) {\n      if(buf2&#91;c] == '\\0')\n\tbreak;\n      if(c > 0)\n\tfprintf(stdout,\"|\");\n      for(int d = 7; d >= 0; d--) {\n\tfprintf(stdout,\"%d\", buf2&#91;c] >> d &amp; 1);\n      }\n    }\n\n    fprintf(stdout, \", cp2: %llx\", *code);\n    fprintf(stdout, \", cp2bin:\");\n    int print = 0;\n    for(c = (sizeof(code) * 8) - 1; c >= 0; c--) {\n      int bit = (*code >> c) &amp; 1;\n      if(bit != 0)\n\tprint = 1;\n      if(print) {\n\tfprintf(stdout, \"%d\", bit);\n\tif(c > 0 &amp;&amp; c % 8 == 0)\n\t  fprintf(stdout, \"|\");\n      }\n    }\n\n    fprintf(stdout, \", cp2oct:\");\n    fprintf(stdout, \"%llo\", *code);\n\n    fprintf(stdout,\"\\n\");    \n  }\n\n#endif\n}\n\n#endif\n\nstatic void codetoutf8(unsigned char *buf2, ulonglong code)\n{\n  unsigned char *buf;\n\n  buf = buf2;\n  if(code &lt;= 0x7f) {\n    *buf++ = code;\n  } else if(code &lt;= 0x7ff) {            \/\/ 110xxxxx 10xxxxxx\n    *buf++ = (0xc0 | ((code >> 6) &amp; 0x1f));\n    *buf++ = (0x80 | (code &amp; 0x3f));\n  } else if(code &lt;= 0xffff) {           \/\/ 1110xxxx 10xxxxxx 10xxxxxx\n    *buf++ = (0xe0 | ((code >> 12) &amp; 0x0f));\n    *buf++ = (0x80 | ((code >> 6) &amp; 0x3f));\n    *buf++ = (0x80 | (code &amp; 0x3f));\n  } else if(code &lt;= 0x10ffff) {         \/\/ 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx\n    *buf++ = (0xf0 | ((code >> 18) &amp; 0x07));\n    *buf++ = (0x80 | ((code >> 12) &amp; 0x3f));      \n    *buf++ = (0x80 | ((code >> 6) &amp; 0x3f));      \n    *buf++ = (0x80 | ((code &amp; 0x3f)));      \n  } else if(code &lt;= 0x3ffffff) {        \/\/ 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx \/\/ these not yet needed\n    *buf++ = (0xf8 | ((code >> 24) &amp; 0x03));\n    *buf++ = (0x80 | ((code >> 18) &amp; 0x3f));      \n    *buf++ = (0x80 | ((code >> 12) &amp; 0x3f));      \n    *buf++ = (0x80 | ((code >> 6) &amp; 0x3f));      \n    *buf++ = (0x80 | ((code &amp; 0x3f)));      \n  } else if(code &lt;= 0x7fffffff) {       \/\/ 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx \/\/ these not yet needed\n    *buf++ = (0xfc | ((code >> 30) &amp; 0x01));\n    *buf++ = (0x80 | ((code >> 24) &amp; 0x3f));      \n    *buf++ = (0x80 | ((code >> 18) &amp; 0x3f));      \n    *buf++ = (0x80 | ((code >> 12) &amp; 0x3f));      \n    *buf++ = (0x80 | ((code >> 6) &amp; 0x3f));      \n    *buf++ = (0x80 | ((code &amp; 0x3f)));      \n  } else if(code &lt;= 0xfffffffff) {      \/\/ 11111110 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx \/\/ these not yet needed\n    *buf++ = (0xfe);\n    *buf++ = (0x80 | ((code >> 30) &amp; 0x3f));      \n    *buf++ = (0x80 | ((code >> 24) &amp; 0x3f));      \n    *buf++ = (0x80 | ((code >> 18) &amp; 0x3f));      \n    *buf++ = (0x80 | ((code >> 12) &amp; 0x3f));      \n    *buf++ = (0x80 | ((code >> 6) &amp; 0x3f));      \n    *buf++ = (0x80 | ((code &amp; 0x3f)));      \n  } else if(code &lt;= 0x3ffffffffff) {    \/\/ 11111111 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx \/\/ these not yet needed\n    *buf++ = (0xff);\n    *buf++ = (0x80 | ((code >> 36) &amp; 0x3f));      \n    *buf++ = (0x80 | ((code >> 30) &amp; 0x3f));      \n    *buf++ = (0x80 | ((code >> 24) &amp; 0x3f));      \n    *buf++ = (0x80 | ((code >> 18) &amp; 0x3f));      \n    *buf++ = (0x80 | ((code >> 12) &amp; 0x3f));      \n    *buf++ = (0x80 | ((code >> 6) &amp; 0x3f));      \n    *buf++ = (0x80 | ((code &amp; 0x3f)));      \n  }\n  *buf = '\\0';\n\n#ifdef DEBUG42\n\n  if(verbose1) {\n    int c, print;\n\n    fprintf(stdout,\"cp: %llx\", code);\n    \n    fprintf(stdout,\", cpbin:\");\n    \n    print = 0;\n    for(c = (sizeof(code) * 8) - 1; c >= 0; c--) {\n      int bit = (code >> c) &amp; 1;\n      if(bit != 0)\n\tprint = 1;\n      if(print) {\n\tfprintf(stdout,\"%d\", bit);\n\tif(c > 0 &amp;&amp; c % 8 == 0)\n\t  fprintf(stdout,\"|\");\n      }\n    }\n    \n    fprintf(stdout,\", cpoct:\");\n    print = 0;\n    fprintf(stdout,\"%llo\", code);\n    \n    fprintf(stdout,\", utf8: \");\n    for(c = 0; c &lt; 8; c++) {\n      if(buf2&#91;c] == '\\0')\n\tbreak;\n      fprintf(stdout,\"%02x\", buf2&#91;c]);\n    }\n    \n    fprintf(stdout, \", char: %s\", buf2);\n    \n    fprintf(stdout,\", charbin: \");\n    for(c = 0; c &lt; 8; c++) {\n      if(buf2&#91;c] == '\\0')\n\tbreak;\n      if(c > 0)\n\tfprintf(stdout,\"|\");\n      for(int d = 7; d >= 0; d--) {\n\tfprintf(stdout,\"%d\", buf2&#91;c] >> d &amp; 1);\n      }\n    }\n    \n    fprintf(stdout,\", oct:\");\n    for(c = 0; c &lt; 8; c++) {\n      if(buf2&#91;c] == '\\0')\n\tbreak;\n      fprintf(stdout,\" %3o\", buf2&#91;c]);\n    }\n    \n    fprintf(stdout, \", utf8: \");\n    for(c = 0; c &lt; 8; c++) {\n      if(buf2&#91;c] == '\\0')\n\tbreak;\n      fprintf(stdout,\"%02x\", buf2&#91;c]);\n    }\n    \n    fprintf(stdout,\", char: %s\", buf2);\n    \/\/fprintf(stdout,\"\\n\");\n\n    fprintf(stdout,\"\\n\");\n  }\n\n#ifdef DEBUG43\n  ulonglong code2;\n  \n  utf8tocode(&amp;code2, buf2);\n  if(code != code2)\n    fprintf(stdout,\"***** ERROR *****\");\n    \n#endif\n  \n#endif\n}\n\nstatic int calc_spaces()\n{\n  int spaces;\n\n  spaces = 0;\n  \n  if(sspace >= 2 &amp;&amp;\n     \/\/ space between word groups\n     ( (cwords > 0 &amp;&amp; cwords % sspace == 0) ||\n       \/\/ space after linenumber\n       \/\/ are not printed if\n       \/\/ not printing linenumber\n       (slineno &amp;&amp; cwords == 0) ) )\n    spaces++;\n    \n  if(sspace &amp;&amp;\n     \/\/ space between words\n     ( (cwords > 0) ||\n       \/\/ space after linenumber\n       (slineno &amp;&amp; cwords == 0) ) ) \n    spaces++;\n\n  return(spaces);\n}\n\nstatic void print_spaces(char spacechar)\n{\n  int sp;\n\n  for(sp = calc_spaces(); sp > 0; sp--)\n    fputc(spacechar, stdout);\n}\n\nstatic ulonglong lines = 10, plines = 0, ptotallines = 0;\nulonglong xlines = 0;\n\n\nvoid printcolumns(int offset, int base, int startwith, int columns, ulonglong *clines) \/\/ 2023 JariK\n{\n  \/\/---------11111111112222222222333333333344444444445555555555666666666677\n  \/\/12345678901234567890123456789012345678901234567890123456789012345678901\n  \/\/=======================================================================\n  \/\/00000 86747100388687087416829400778878989202760594993130062980826178851\n  \/\/00001 36862623069143814543525935285460059703805218323534266522497684582\n  \n  int c, d, digit, nonzero;\n  unsigned char digits&#91;0x10] = \"0123456789abcdef\";\n\n  *clines = 0;\n\n  if(base == 2)\n    c = 1 &lt;&lt; 12;\n  else if(base == 8)\n    c = 01000000;\n  else if(base == 10)\n    c = 1000000;\n  else if(base == 16)\n    c = 0x1000000;\n  else {\n    fprintf(stdout,\"%s: printcolumns():\", procname);\n    fprintf(stdout,\" illegal base %d\", base);\n    fprintf(stdout,\"\\n\");\n    exit(1);\n  }\n\n  for(;c >= 1; c \/= base) { \/\/ lines, 100000's, 10000's, 1000's ... 1's\n    if(c >= columns)\n      continue;\n\n    for(d = 0; d &lt; offset; d++)\n      fprintf(stdout,\" \"); \/\/ spaces in beginning of row\n\n    nonzero = 0;\n    \n    for(d = startwith; d &lt; columns + startwith; d++) { \/\/ column numbers\n      digit = (d \/ c) % base;\n      if(digit != 0)\n\tnonzero = 1;\n      if(nonzero || c == 1)\n\tfprintf(stdout,\"%c\", digits&#91;digit]); \/\/ nonzero digits after first nonzero\n      else\n\tfprintf(stdout,\"-\"); \/\/ zeroes in beginning of row\n    }\n    fprintf(stdout,\"\\n\");\n    (*clines)++;\n  }\n  if(pwords > 0) {\n    if(slineno) {\n      for(c = 0; c &lt;= plinesdigits; c++) \/\/ +1\n\tfprintf(stdout,\"-\");\n    }\n    for(cwords = 0; cwords &lt; pwords; cwords++) {\n      print_spaces('-');\n      fprintf(stdout,\"w\");\n      if(charwidth == 2)\n\tfprintf(stdout,\"-\");\n      for(c = 0; c &lt; size - 1; c++) {\n\tfprintf(stdout,\"-\");\n\tif(charwidth == 2)\n\t  fprintf(stdout,\"-\");\n      }\n    }\n    fprintf(stdout,\"\\n\");\n    (*clines)++;\n  }\n  for(d = 0; d &lt; offset; d++)\n    fprintf(stdout,\" \"); \/\/ spaces in beginning of row\n  for(d = startwith; d &lt; columns + startwith; d++)\n    fprintf(stdout,\"=\");\n  fprintf(stdout,\"\\n\");\n  (*clines)++;\n}\n\n\n#define KILO 1024\n\nvoid readablelonglong(FILE *fp1, ulonglong ll2) \/\/ 2023 JariK\n{\n  int c;\n  ulonglong multiplier, ll = ll2;\n  \n  \/\/ B = byte\n  \/\/ K = kilo   10^3   2^10\n  \/\/ M = mega   10^6   2^20\n  \/\/ G = giga   10^9   2^30\n  \/\/ T = tera   10^12  2^40\n  \/\/ P = peta   10^15  2^50\n  \/\/ E = exa    10^18  2^60\n  \/\/ Z = zetta  10^21  2^70\n  \/\/ Y = yotta  10^24  2^80\n\n  char units&#91;] = \"BKMGTPEZY\";\n\n  c = 0;\n  multiplier = 1;\n  while(ll >= KILO) {\n    ll \/= KILO;\n    multiplier *= KILO;\n    c++;\n  }\n\n  if(ll * multiplier != ll2)\n    fprintf(fp1,\"~\"); \/\/ approximately\n\n  fprintf(fp1,\"%llu%c\", ll, units&#91;c]);\n}\n\nvoid fprintfcharacter(FILE *fp1, unsigned char *p) \/\/ 2023 JariK\n{\n  fputc(*p, fp1); \/\/ print first char\n  if(*p > 0xbf) { \/\/ first char utf8\n    p++;\n    for(;;) { \/\/ print rest of the utf8 chars\n      if(*p > 0xbf || \/\/ new utf8 character\n\t *p &lt; 0x80 || \/\/ ascii character\n\t *p == '\\0') \/\/ end of string\n\tbreak;\n      fputc(*p, fp1);\n      p++;\n    }\n  }\n}\n\nint getdigit(unsigned char *p) \/\/ 2023 JariK\n{\n  int digit;\n  \n  if(*p >= '0' &amp;&amp; *p &lt;= '9')\n    digit = *p - '0';\n  else if(*p >= 'a' &amp;&amp; *p &lt;= 'z')\n    digit = (*p - 'a') + 10;\n  else if(*p >= 'A' &amp;&amp; *p &lt;= 'Z')\n    digit = (*p - 'A') + 10;\n  else\n    digit = -1; \/\/ not found, illegal\n\n  return(digit);\n}\n\n\/\/#define KILO 1000\n#define KILO 1024\n\nulonglong getlonglong(unsigned char *p2) \/\/ 2023 JariK\n{\n  int digit, base = 10;\n  unsigned char *p = p2;\n  ulonglong totll, ll, prevll, multiplier;\n  \n  totll = 0;\n\n  while(*p != '\\0') { \/\/ works also: 1g100m &amp; 1m20k and 1t1t etc...\n\n    unsigned char *prevp = p;\n    \n    if(!strncmp(\"0x\", p, 2)) {\n      base = 16;\n      p += 2;\n      \n    } else if(!strncmp(\"0d\", p, 2)) {\n      base = 10;\n      p += 2;\n      \n    } else if(!strncmp(\"0o\", p, 2)) {\n      base = 8;\n      p += 2;\n      \n    } else if(!strncmp(\"0b\", p, 2)) {\n      base = 2;\n      p += 2;\n      \n    }\n    \n    ll = 0;\n    while((digit = getdigit(p)) != -1 &amp;&amp; digit &lt; base) {\n      ll = ll * base + digit;\n      p++;\n    }\n    \n    multiplier = 1;\n    \n    if(*p == 'k' || *p == 'K') {\n      multiplier = KILO;\n      p++;\n      \n    } else if(*p == 'm' || *p == 'M') {\n      multiplier = (KILO * KILO);\n      p++;\n      \n    } else if(*p == 'g' || *p == 'G') {\n      multiplier = (KILO * KILO * KILO);\n      p++;\n      \n    } else if(*p == 't' || *p == 'T') {\n      multiplier = ((ulonglong)KILO * KILO * KILO * KILO);\n      p++;\n      \n    } else if(*p == 'p' || *p == 'P') {\n      multiplier = ((ulonglong)KILO * KILO * KILO * KILO * KILO);\n      p++;\n      \n    } else if(*p == 'e' || *p == 'E') {\n      multiplier = ((ulonglong)KILO * KILO * KILO * KILO * KILO * KILO);\n      p++;\n      \n    }\n    \n    prevll = ll;\n    ll *= multiplier;\n    if(ll \/ multiplier != prevll) {\n      fflush(stdout);\n      fprintf(stderr,\"%s: multiply overflow\", procname);\n      fprintf(stderr,\", string:'%s'\", p2);\n      fprintf(stderr,\", digit:'\");\n      fprintfcharacter(stderr, p);\n      fprintf(stderr,\"'\");\n      fprintf(stderr,\", value: %d\", digit);\n      fprintf(stderr,\", base: %d\", base);\n      fprintf(stderr,\", ll: %llu\", prevll);\n      fprintf(stderr,\", multiplier: %llu\", multiplier);\n      fprintf(stderr,\"\\n\");\n      fflush(stderr);\n    }\n  \n    if(*p == 'b' || *p == 'B') \/\/ remove last b (for bytes in 1tb, 1gb or 1mb)\n      p++;\n    \n    totll += ll;\n\n#ifdef DEBUG32\n    fprintf(stderr,\"string:'%s'\", p2);\n    fprintf(stderr,\", base:%d(\", base);\n    readablelonglong(stderr, base);\n    fprintf(stderr,\")\");\n    fprintf(stderr,\", multiplier:%llu(\", multiplier);\n    readablelonglong(stderr, multiplier);\n    fprintf(stderr,\")\");\n    fprintf(stderr,\", prevll:%llu(\", prevll);\n    readablelonglong(stderr, prevll);\n    fprintf(stderr,\")\");\n    fprintf(stderr,\", ll:%llu(\", ll);\n    readablelonglong(stderr, ll);\n    fprintf(stderr,\")\");\n    fprintf(stderr,\", totll:%llu(\", totll);\n    readablelonglong(stderr, totll);\n    fprintf(stderr,\")\");\n    fprintf(stderr,\"\\n\");\n#endif\n    \n    if(prevp == p) \/\/ no progress\n      break;\n  }\n  \n  if(*p != '\\0') {\n    fflush(stdout);\n    fprintf(stderr,\"%s: illegal digit\", procname);\n    fprintf(stderr,\", string:'%s'\", p2);\n    fprintf(stderr,\", digit:'\");\n    fprintfcharacter(stderr, p);\n    fprintf(stderr,\"'\");\n    fprintf(stderr,\", value: %d\", digit);\n    fprintf(stderr,\", base: %d(\", base);\n    readablelonglong(stderr, base);\n    fprintf(stderr,\")\");\n    fprintf(stderr,\"\\n\");\n    fflush(stderr);\n  }\n\n  return(totll);\n}\n\nulonglong startcp = 0;\nulonglong endcp = 65535 * 4;\n\nint iprintcolumns = 1;\n\nvoid utf8()\n{\n  ulonglong c;\n  int utf8output = 0;\n\n  if(iprintcolumns)\n    printcolumns(6, 0x10, 0, 64, &amp;xlines);\n\n  for(c = startcp; c &lt; endcp; c++) {\n    \/\/for(c = 0x2800; c &lt; 0x2900; c++) { \/\/ braille\n    unsigned char buffer10&#91;10];\n    if(c % 64 == 0) {\n      if(c > 0) {\n\tfprintf(stdout,\"\\n\");\n\tutf8output = 0;\n      }\n      fprintf(stdout,\"%5llx \", c);\n      utf8output = 1; \n    }\n    if(c >= 0 &amp;&amp; c &lt; 32) {\n      c += 31;\n      fprintf(stdout, \"%-32s\", \"--- control characters ---\");\n      utf8output = 1;\n    } else if(c >= 128 &amp;&amp; c &lt; 256) {\n      c += 31;\n      fprintf(stdout, \"%-32s\", \"--- utf8 characters ---\");\n      utf8output = 1;\n    } else {\n      codetoutf8(buffer10, c);\n      fprintf(stdout,\"%s\", buffer10);\n      utf8output = 1;\n    }\n  }\n  if(utf8output)\n    fprintf(stdout,\"\\n\");\n  fflush(stdout);\n}\n\nunsigned char *startcp_str = NULL;\nunsigned char *endcp_str = NULL;\n\nvoid main(int argc, char *argv&#91;])\n{\n  int c;\n  \n  \/\/\n  \/\/ look thru command line parameters\n  \/\/\n  int help = 0;\n\n  for(c = 1; c &lt; argc; c++) {\n    if(!strcmp(\"--copyright\", argv&#91;c]) ||\n       !strcmp(\"--version\", argv&#91;c])) {\n      fprintf(stdout,\"%s, \", programname);\n      fprintf(stdout,\"%s\", copyright);\n      fprintf(stdout,\"\\n\");\n#ifdef SHA256\n      fprintf(stdout,\"sha256(\");\n      for(int c = 0; c &lt; HashLen; c++) {\n\tfprintf(stdout, \"%02x\", programfiledigest&#91;c]);\n      }\n      fprintf(stdout, \"\\n\");\n#endif\n      help = 0;\n      exit(1);\n      \n    } else if(!strcmp(\"--help\", argv&#91;c])) {\n      fprintf(stdout,\"%s\", copyright);\n#ifdef SHA256\n      fprintf(stderr,\"\\nsha256(\");\n      for(int c = 0; c &lt; HashLen; c++) {\n\tfprintf(stderr, \"%02x\", programfiledigest&#91;c]);\n      }\n#endif\n      fprintf(stdout,\"\\n\\n\");\n\n#ifdef DEBUG42\n    } else if(!strcmp(\"--verbose1\", argv&#91;c])) {\n      verbose1 = 1;\n#ifdef DEBUG43\n    } else if(!strcmp(\"--verbose2\", argv&#91;c])) {\n      verbose2 = 1;\n#endif\n#endif\n    } else if(!strcmp(\"--printcolumns\", argv&#91;c])) {\n      iprintcolumns = !iprintcolumns;\n      fprintf(stdout,\"iprintcolumns=%d\\n\",\n\t      iprintcolumns);\n\n    } else if(!strncmp(\"--startcp\", argv&#91;c], 9)) {\n      if(*(argv&#91;c] + 9) != '\\0') {\n\tstartcp_str = argv&#91;c] + 9;\n\tstartcp = getlonglong(startcp_str);\n\n      } else if(c + 1 &lt; argc) {\n\tstartcp_str = argv&#91;c + 1];\n\tstartcp = getlonglong(startcp_str);\n\tc++;\n      }\n      fprintf(stdout,\"startcp=%llx(%s)\\n\",\n\t      startcp, startcp_str);\n    } else if(!strncmp(\"--endcp\", argv&#91;c], 7)) {\n      if(*(argv&#91;c] + 7) != '\\0') {\n\tendcp_str = argv&#91;c] + 7;\n\tendcp = getlonglong(endcp_str);\n\n      } else if(c + 1 &lt; argc) {\n\tendcp_str = argv&#91;c + 1];\n\tendcp = getlonglong(endcp_str);\n\tc++;\n      }\n      fprintf(stdout,\"endcp=%llx(%s)\\n\",\n\t      endcp, endcp_str);\n\n    } else {\n      fprintf(stderr,\"%s: invalid option %s\\n\", procname, argv&#91;c]);\n      exit(1);\n\n    }\n  }\n  utf8();\n}<\/code><\/pre>\n\n\n\n<p>(ja kuten aina ennen ajamista lukekaa koodi l\u00e4pi ettei siin\u00e4 ole haitallista materiaalia&#8230;).<\/p>\n\n\n\n<p>Edellisen debukkirivej\u00e4 DEBUG42 ja DEBUG43 p\u00e4\u00e4ll\u00e4:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>      ----------------111111111111111122222222222222223333333333333333\n      0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef\n      ================================================================\n    0 --- control characters ---      codepoint: 20, bin:100000, oct:40, utf8: 20, bin: 00100000, oct:  40, character:  , oct:40.ok\n codepoint: 21, bin:100001, oct:41, utf8: 21, bin: 00100001, oct:  41, character: !, oct:41.ok\n!codepoint: 22, bin:100010, oct:42, utf8: 22, bin: 00100010, oct:  42, character: \", oct:42.ok\n\"codepoint: 23, bin:100011, oct:43, utf8: 23, bin: 00100011, oct:  43, character: #, oct:43.ok\n#codepoint: 24, bin:100100, oct:44, utf8: 24, bin: 00100100, oct:  44, character: $, oct:44.ok\n$codepoint: 25, bin:100101, oct:45, utf8: 25, bin: 00100101, oct:  45, character: %, oct:45.ok\n%codepoint: 26, bin:100110, oct:46, utf8: 26, bin: 00100110, oct:  46, character: &amp;, oct:46.ok\n&amp;codepoint: 27, bin:100111, oct:47, utf8: 27, bin: 00100111, oct:  47, character: ', oct:47.ok\n'codepoint: 28, bin:101000, oct:50, utf8: 28, bin: 00101000, oct:  50, character: (, oct:50.ok\n(codepoint: 29, bin:101001, oct:51, utf8: 29, bin: 00101001, oct:  51, character: ), oct:51.ok\n)codepoint: 2a, bin:101010, oct:52, utf8: 2a, bin: 00101010, oct:  52, character: *, oct:52.ok\n*codepoint: 2b, bin:101011, oct:53, utf8: 2b, bin: 00101011, oct:  53, character: +, oct:53.ok\n+codepoint: 2c, bin:101100, oct:54, utf8: 2c, bin: 00101100, oct:  54, character: ,, oct:54.ok\n,codepoint: 2d, bin:101101, oct:55, utf8: 2d, bin: 00101101, oct:  55, character: -, oct:55.ok\n-codepoint: 2e, bin:101110, oct:56, utf8: 2e, bin: 00101110, oct:  56, character: ., oct:56.ok\n.codepoint: 2f, bin:101111, oct:57, utf8: 2f, bin: 00101111, oct:  57, character: \/, oct:57.ok\n\/codepoint: 30, bin:110000, oct:60, utf8: 30, bin: 00110000, oct:  60, character: 0, oct:60.ok\n0codepoint: 31, bin:110001, oct:61, utf8: 31, bin: 00110001, oct:  61, character: 1, oct:61.ok\n1codepoint: 32, bin:110010, oct:62, utf8: 32, bin: 00110010, oct:  62, character: 2, oct:62.ok\n2codepoint: 33, bin:110011, oct:63, utf8: 33, bin: 00110011, oct:  63, character: 3, oct:63.ok\n3codepoint: 34, bin:110100, oct:64, utf8: 34, bin: 00110100, oct:  64, character: 4, oct:64.ok\n4codepoint: 35, bin:110101, oct:65, utf8: 35, bin: 00110101, oct:  65, character: 5, oct:65.ok\n5codepoint: 36, bin:110110, oct:66, utf8: 36, bin: 00110110, oct:  66, character: 6, oct:66.ok\n6codepoint: 37, bin:110111, oct:67, utf8: 37, bin: 00110111, oct:  67, character: 7, oct:67.ok\n7codepoint: 38, bin:111000, oct:70, utf8: 38, bin: 00111000, oct:  70, character: 8, oct:70.ok\n8codepoint: 39, bin:111001, oct:71, utf8: 39, bin: 00111001, oct:  71, character: 9, oct:71.ok\n9codepoint: 3a, bin:111010, oct:72, utf8: 3a, bin: 00111010, oct:  72, character: :, oct:72.ok\n:codepoint: 3b, bin:111011, oct:73, utf8: 3b, bin: 00111011, oct:  73, character: ;, oct:73.ok\n;codepoint: 3c, bin:111100, oct:74, utf8: 3c, bin: 00111100, oct:  74, character: &lt;, oct:74.ok\n&lt;codepoint: 3d, bin:111101, oct:75, utf8: 3d, bin: 00111101, oct:  75, character: =, oct:75.ok\n=codepoint: 3e, bin:111110, oct:76, utf8: 3e, bin: 00111110, oct:  76, character: &gt;, oct:76.ok\n&gt;codepoint: 3f, bin:111111, oct:77, utf8: 3f, bin: 00111111, oct:  77, character: ?, oct:77.ok\n?\n   40 codepoint: 40, bin:1000000, oct:100, utf8: 40, bin: 01000000, oct: 100, character: @, oct:100.ok\n@codepoint: 41, bin:1000001, oct:101, utf8: 41, bin: 01000001, oct: 101, character: A, oct:101.ok\nAcodepoint: 42, bin:1000010, oct:102, utf8: 42, bin: 01000010, oct: 102, character: B, oct:102.ok\nBcodepoint: 43, bin:1000011, oct:103, utf8: 43, bin: 01000011, oct: 103, character: C, oct:103.ok\nCcodepoint: 44, bin:1000100, oct:104, utf8: 44, bin: 01000100, oct: 104, character: D, oct:104.ok\nDcodepoint: 45, bin:1000101, oct:105, utf8: 45, bin: 01000101, oct: 105, character: E, oct:105.ok\nEcodepoint: 46, bin:1000110, oct:106, utf8: 46, bin: 01000110, oct: 106, character: F, oct:106.ok\nFcodepoint: 47, bin:1000111, oct:107, utf8: 47, bin: 01000111, oct: 107, character: G, oct:107.ok\nGcodepoint: 48, bin:1001000, oct:110, utf8: 48, bin: 01001000, oct: 110, character: H, oct:110.ok\nHcodepoint: 49, bin:1001001, oct:111, utf8: 49, bin: 01001001, oct: 111, character: I, oct:111.ok\nIcodepoint: 4a, bin:1001010, oct:112, utf8: 4a, bin: 01001010, oct: 112, character: J, oct:112.ok\nJcodepoint: 4b, bin:1001011, oct:113, utf8: 4b, bin: 01001011, oct: 113, character: K, oct:113.ok\nKcodepoint: 4c, bin:1001100, oct:114, utf8: 4c, bin: 01001100, oct: 114, character: L, oct:114.ok\nLcodepoint: 4d, bin:1001101, oct:115, utf8: 4d, bin: 01001101, oct: 115, character: M, oct:115.ok\nMcodepoint: 4e, bin:1001110, oct:116, utf8: 4e, bin: 01001110, oct: 116, character: N, oct:116.ok\nNcodepoint: 4f, bin:1001111, oct:117, utf8: 4f, bin: 01001111, oct: 117, character: O, oct:117.ok\nOcodepoint: 50, bin:1010000, oct:120, utf8: 50, bin: 01010000, oct: 120, character: P, oct:120.ok\nPcodepoint: 51, bin:1010001, oct:121, utf8: 51, bin: 01010001, oct: 121, character: Q, oct:121.ok\nQcodepoint: 52, bin:1010010, oct:122, utf8: 52, bin: 01010010, oct: 122, character: R, oct:122.ok\nRcodepoint: 53, bin:1010011, oct:123, utf8: 53, bin: 01010011, oct: 123, character: S, oct:123.ok\nScodepoint: 54, bin:1010100, oct:124, utf8: 54, bin: 01010100, oct: 124, character: T, oct:124.ok\nTcodepoint: 55, bin:1010101, oct:125, utf8: 55, bin: 01010101, oct: 125, character: U, oct:125.ok\nUcodepoint: 56, bin:1010110, oct:126, utf8: 56, bin: 01010110, oct: 126, character: V, oct:126.ok\nVcodepoint: 57, bin:1010111, oct:127, utf8: 57, bin: 01010111, oct: 127, character: W, oct:127.ok\nWcodepoint: 58, bin:1011000, oct:130, utf8: 58, bin: 01011000, oct: 130, character: X, oct:130.ok\nXcodepoint: 59, bin:1011001, oct:131, utf8: 59, bin: 01011001, oct: 131, character: Y, oct:131.ok\nYcodepoint: 5a, bin:1011010, oct:132, utf8: 5a, bin: 01011010, oct: 132, character: Z, oct:132.ok\nZcodepoint: 5b, bin:1011011, oct:133, utf8: 5b, bin: 01011011, oct: 133, character: &#91;, oct:133.ok\n&#91;codepoint: 5c, bin:1011100, oct:134, utf8: 5c, bin: 01011100, oct: 134, character: \\, oct:134.ok\n\\codepoint: 5d, bin:1011101, oct:135, utf8: 5d, bin: 01011101, oct: 135, character: ], oct:135.ok\n]codepoint: 5e, bin:1011110, oct:136, utf8: 5e, bin: 01011110, oct: 136, character: ^, oct:136.ok\n^codepoint: 5f, bin:1011111, oct:137, utf8: 5f, bin: 01011111, oct: 137, character: _, oct:137.ok\n_codepoint: 60, bin:1100000, oct:140, utf8: 60, bin: 01100000, oct: 140, character: `, oct:140.ok\n`codepoint: 61, bin:1100001, oct:141, utf8: 61, bin: 01100001, oct: 141, character: a, oct:141.ok\nacodepoint: 62, bin:1100010, oct:142, utf8: 62, bin: 01100010, oct: 142, character: b, oct:142.ok\nbcodepoint: 63, bin:1100011, oct:143, utf8: 63, bin: 01100011, oct: 143, character: c, oct:143.ok\nccodepoint: 64, bin:1100100, oct:144, utf8: 64, bin: 01100100, oct: 144, character: d, oct:144.ok\ndcodepoint: 65, bin:1100101, oct:145, utf8: 65, bin: 01100101, oct: 145, character: e, oct:145.ok\necodepoint: 66, bin:1100110, oct:146, utf8: 66, bin: 01100110, oct: 146, character: f, oct:146.ok\nfcodepoint: 67, bin:1100111, oct:147, utf8: 67, bin: 01100111, oct: 147, character: g, oct:147.ok\ngcodepoint: 68, bin:1101000, oct:150, utf8: 68, bin: 01101000, oct: 150, character: h, oct:150.ok\nhcodepoint: 69, bin:1101001, oct:151, utf8: 69, bin: 01101001, oct: 151, character: i, oct:151.ok\nicodepoint: 6a, bin:1101010, oct:152, utf8: 6a, bin: 01101010, oct: 152, character: j, oct:152.ok\njcodepoint: 6b, bin:1101011, oct:153, utf8: 6b, bin: 01101011, oct: 153, character: k, oct:153.ok\nkcodepoint: 6c, bin:1101100, oct:154, utf8: 6c, bin: 01101100, oct: 154, character: l, oct:154.ok\nlcodepoint: 6d, bin:1101101, oct:155, utf8: 6d, bin: 01101101, oct: 155, character: m, oct:155.ok\nmcodepoint: 6e, bin:1101110, oct:156, utf8: 6e, bin: 01101110, oct: 156, character: n, oct:156.ok\nncodepoint: 6f, bin:1101111, oct:157, utf8: 6f, bin: 01101111, oct: 157, character: o, oct:157.ok\nocodepoint: 70, bin:1110000, oct:160, utf8: 70, bin: 01110000, oct: 160, character: p, oct:160.ok\npcodepoint: 71, bin:1110001, oct:161, utf8: 71, bin: 01110001, oct: 161, character: q, oct:161.ok\nqcodepoint: 72, bin:1110010, oct:162, utf8: 72, bin: 01110010, oct: 162, character: r, oct:162.ok\nrcodepoint: 73, bin:1110011, oct:163, utf8: 73, bin: 01110011, oct: 163, character: s, oct:163.ok\nscodepoint: 74, bin:1110100, oct:164, utf8: 74, bin: 01110100, oct: 164, character: t, oct:164.ok\ntcodepoint: 75, bin:1110101, oct:165, utf8: 75, bin: 01110101, oct: 165, character: u, oct:165.ok\nucodepoint: 76, bin:1110110, oct:166, utf8: 76, bin: 01110110, oct: 166, character: v, oct:166.ok\nvcodepoint: 77, bin:1110111, oct:167, utf8: 77, bin: 01110111, oct: 167, character: w, oct:167.ok\nwcodepoint: 78, bin:1111000, oct:170, utf8: 78, bin: 01111000, oct: 170, character: x, oct:170.ok\nxcodepoint: 79, bin:1111001, oct:171, utf8: 79, bin: 01111001, oct: 171, character: y, oct:171.ok\nycodepoint: 7a, bin:1111010, oct:172, utf8: 7a, bin: 01111010, oct: 172, character: z, oct:172.ok\nzcodepoint: 7b, bin:1111011, oct:173, utf8: 7b, bin: 01111011, oct: 173, character: {, oct:173.ok\n{codepoint: 7c, bin:1111100, oct:174, utf8: 7c, bin: 01111100, oct: 174, character: |, oct:174.ok\n|codepoint: 7d, bin:1111101, oct:175, utf8: 7d, bin: 01111101, oct: 175, character: }, oct:175.ok\n}codepoint: 7e, bin:1111110, oct:176, utf8: 7e, bin: 01111110, oct: 176, character: ~, oct:176.ok\n~codepoint: 7f, bin:1111111, oct:177, utf8: 7f, bin: 01111111, oct: 177, character: , oct:177.ok\n\n   80 --- utf8 characters ---         --- utf8 characters ---         \n   c0 --- utf8 characters ---         --- utf8 characters ---         \n  100 codepoint: 100, bin:1|00000000, oct:400, utf8: c480, bin: 11000100|10000000, oct: 304 200, character: \u0100, oct:400.ok\n\u0100codepoint: 101, bin:1|00000001, oct:401, utf8: c481, bin: 11000100|10000001, oct: 304 201, character: \u0101, oct:401.ok\n\u0101codepoint: 102, bin:1|00000010, oct:402, utf8: c482, bin: 11000100|10000010, oct: 304 202, character: \u0102, oct:402.ok\n\u0102codepoint: 103, bin:1|00000011, oct:403, utf8: c483, bin: 11000100|10000011, oct: 304 203, character: \u0103, oct:403.ok\n\u0103codepoint: 104, bin:1|00000100, oct:404, utf8: c484, bin: 11000100|10000100, oct: 304 204, character: \u0104, oct:404.ok\n\u0104codepoint: 105, bin:1|00000101, oct:405, utf8: c485, bin: 11000100|10000101, oct: 304 205, character: \u0105, oct:405.ok\n\u0105codepoint: 106, bin:1|00000110, oct:406, utf8: c486, bin: 11000100|10000110, oct: 304 206, character: \u0106, oct:406.ok\n\u0106codepoint: 107, bin:1|00000111, oct:407, utf8: c487, bin: 11000100|10000111, oct: 304 207, character: \u0107, oct:407.ok\n\u0107codepoint: 108, bin:1|00001000, oct:410, utf8: c488, bin: 11000100|10001000, oct: 304 210, character: \u0108, oct:410.ok\n\u0108codepoint: 109, bin:1|00001001, oct:411, utf8: c489, bin: 11000100|10001001, oct: 304 211, character: \u0109, oct:411.ok\n\u0109codepoint: 10a, bin:1|00001010, oct:412, utf8: c48a, bin: 11000100|10001010, oct: 304 212, character: \u010a, oct:412.ok\n\u010acodepoint: 10b, bin:1|00001011, oct:413, utf8: c48b, bin: 11000100|10001011, oct: 304 213, character: \u010b, oct:413.ok\n\u010bcodepoint: 10c, bin:1|00001100, oct:414, utf8: c48c, bin: 11000100|10001100, oct: 304 214, character: \u010c, oct:414.ok\n\u010ccodepoint: 10d, bin:1|00001101, oct:415, utf8: c48d, bin: 11000100|10001101, oct: 304 215, character: \u010d, oct:415.ok<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/moijari.com\/wp-content\/uploads\/2026\/07\/IMG_2275.jpeg\" alt=\"\" class=\"wp-image-3950\" width=\"349\" height=\"262\" srcset=\"https:\/\/moijari.com\/wp-content\/uploads\/2026\/07\/IMG_2275.jpeg 320w, https:\/\/moijari.com\/wp-content\/uploads\/2026\/07\/IMG_2275-300x225.jpeg 300w\" sizes=\"(max-width: 349px) 100vw, 349px\" \/><\/figure>\n\n\n\n<p>(rand listing, ressu way): &#8220;See: Million random digits, and with 100000 normal deviates&#8221;  <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ newressu --rand\n($ newressu \u2014rand \u2014lines 20000) uusi kirja (million random digits)\n00000   21740 74236  10030 96443  36759 04464  58747 37667  07922 66268\n00001   99862 71020  69433 55183  64025 97438  92129 73937  72822 33844\n00002   76545 21348  33063 29012  53876 76367  86413 86899  93812 53817\n00003   94712 80955  77486 27783  88612 68440  63783 97978  20988 89115\n00004   38264 81894  60156 78756  26009 33327  30337 76975  42970 08361\n\n00005   55134 53142  10337 87295  68364 34227  75590 28361  30064 35670\n00006   80126 82035  43299 80528  14674 15824  39695 19717  84323 12724\n00007   17076 32335  97429 45370  89619 39889  93682 71524  03591 24260\n00008   95552 98612  32952 97786  49656 59528  23493 82771  52655 01349\n00009   24498 14092  93957 02410  87710 91509  23687 77315  71790 16967<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>$ newressu --rand --cn\n00000   \u4e02\u890b \u4e02\u5ec9  \u4e01\u8811 \u4e03\u6d35  \u4e04\u6d5a \u4e01\u90f1  \u4e01\u8bd8 \u4e03\u66db  \u4e02\u6dd8 \u4e01\u8df1\n00001   \u4e02\u5776 \u4e01\u6e32  \u4e01\u885c \u4e04\u81a8  \u4e01\u7d24 \u4e04\u56de  \u4e03\u9d4d \u4e02\u66b9  \u4e02\u5aff \u4e00\u7c27\n00002   \u4e02\u5258 \u4e02\u5307  \u4e00\u9d31 \u4e02\u7e71  \u4e00\u5f39 \u4e04\u4fca  \u4e00\u8adf \u4e02\u57e0  \u4e00\u9fc7 \u4e03\u7382\n00003   \u4e02\u8c13 \u4e04\u7fd2  \u4e00\u9111 \u4e01\u97fc  \u4e03\u7ef7 \u4e04\u71c9  \u4e03\u6833 \u4e01\u6f0a  \u4e00\u64e6 \u4e04\u840a\n00004   \u4e03\u5d3a \u4e01\u6328  \u4e01\u6c06 \u4e01\u7ff8  \u4e03\u92d7 \u4e02\u738f  \u4e04\u7794 \u4e01\u6bcb  \u4e03\u7a57 \u4e00\u5109\n\n00005   \u4e00\u85b0 \u4e02\u6660  \u4e01\u8e94 \u4e02\u9ad1  \u4e02\u8bb2 \u4e03\u58a0  \u4e02\u8af5 \u4e01\u6f5c  \u4e03\u9dc3 \u4e03\u6f7f\n00006   \u4e02\u562e \u4e01\u65c0  \u4e02\u65b0 \u4e03\u9678  \u4e01\u908e \u4e04\u71dd  \u4e03\u68b6 \u4e04\u67fa  \u4e04\u5876 \u4e01\u6e4b\n00007   \u4e01\u9fed \u4e02\u999d  \u4e04\u8611 \u4e00\u8492  \u4e04\u5476 \u4e03\u76af  \u4e03\u8439 \u4e02\u85b4  \u4e01\u95f7 \u4e00\u532d\n00008   \u4e04\u8643 \u4e01\u5399  \u4e03\u5cc8 \u4e01\u8302  \u4e02\u6ef3 \u4e03\u8cab  \u4e02\u6091 \u4e02\u74f6  \u4e02\u56a7 \u4e00\u9b38\n00009   \u4e00\u5cda \u4e04\u4e3e  \u4e03\u62dd \u4e03\u99d0  \u4e02\u91b9 \u4e00\u9f17  \u4e00\u76b6 \u4e03\u8e84  \u4e01\u9cd3 \u4e00\u93ad<\/code><\/pre>\n\n\n\n<p>T\u00e4m\u00e4 tulostaa million random digits materiaalin ressulla<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#include &lt;stdio.h&gt;\n#include &lt;stdlib.h&gt;\n#include &lt;memory.h&gt;\n#include &lt;string.h&gt;\n#include &lt;time.h&gt;\n\n#include &lt;sys\/time.h&gt;\n\n#define DEBUG\n\ndouble limit = 9;\nunsigned char limits&#91;20];\n\nchar *procname;\n\nunsigned char ressu_clockbyte() \/* JariK 2013 *\/\n{\n  struct timeval tv;\n  gettimeofday(&amp;tv, NULL);\n  return(tv.tv_usec &amp; 0xff);\n}\n\nint periods&#91;1024];\n\nvoid ressu_genbytes(int size, unsigned char *buffer) \/* JariK 2013-2020 v 1.2 *\/\n{\n  int c, d, e, f, clockbytes = 0,\n    count = 0, rndbits = 0;\n  unsigned char byte, prevbyte;\n\n  for(c = 0;c &lt; 1024; c++) {\n    periods&#91;c] = 0;\n  }\n  \n  f = 0;\n  for(c = 0; c &lt; 8 || c % 8 != 0 || clockbytes &lt; 2000 || c &lt; 48 || c &lt; 80\n      \/\/ || rndbits &lt; 8*size || rndbits2 &lt; 8*size\n      ; c++) {\n    for(d = 0; d &lt; size; d++) { \/\/ rotate left + xor\n      byte = ressu_clockbyte();\n      if(d == 0)\n\tprevbyte = byte;\n      e = buffer&#91;d];\n      e = ((e &amp; 0x80) &gt;&gt; 7) | ((e &amp; 0x7f) &lt;&lt; 1);   \/\/ rotate left 1\n      \/\/e=((e&amp;0xe0)&gt;&gt;5) | ((e&amp;0x1f)&lt;&lt;3); \/\/ rotate left 3\n      \/\/e=((e&amp;0xfe)&gt;&gt;1) | ((e&amp;0x1)&lt;&lt;7);  \/\/ rotate right 1\n      buffer&#91;d] = e ^ byte;\n      if(prevbyte != byte) {\n\trndbits++;\n\tperiods&#91;count]++;\n\tcount = 0;\n\tprevbyte = byte;\n      }\n      count++;\n    }\n    for(d = 0; d &lt; size; d++) { \/\/ swap\n      f = (f + buffer&#91;d]) % size;\n      e = buffer&#91;d];\n      buffer&#91;d] = buffer&#91;f];\n      buffer&#91;f] = e;\n    }\n    clockbytes += size;\n  }\n#ifdef DEBUG5\n  fprintf(stderr,\"\\n\");\n  fprintf(stderr,\"ressu3_genbytes:\");\n  fprintf(stderr,\" c %d\", c);\n  fprintf(stderr,\", c%%8 %d\", c % 8);\n  fprintf(stderr,\", clockbytes %d\", clockbytes);\n  fprintf(stderr,\", 8*size %d\", 8 * size);\n  fprintf(stderr,\", rndbits %d\", rndbits);\n#endif\n}\n\n#define RESSUCNT 65536\n#define aRESSU_CLEAR 2\n\nstatic unsigned char ressu_bytes&#91;RESSUCNT];\nstatic int ressu_byte = 999999999;\nstatic int ressu_cnt = RESSUCNT;\n\nint ressu_genbyte()\n{\n  if(ressu_byte &gt;= ressu_cnt) {\n#ifdef RESSU_CLEAR\n    memset(ressu_bytes, 0, ressu_cnt);\n#else\n    if(ressu_byte == 999999999)\n      memset(ressu_bytes, 0, ressu_cnt);\n#endif\n    ressu_genbytes(ressu_cnt, ressu_bytes);\n    ressu_byte = 0;\n  }\n  return(ressu_bytes&#91;ressu_byte++]);\n}\n\nint ressu_genbyte_limit(int limit)\n{\n  int c;\n  \n  while((c = ressu_genbyte()) &gt;= (256 \/ limit) * limit);\n  return(c % limit);\n}\n\nint ressu_genshort()\n{\n  return(ressu_genbyte() | ressu_genbyte() &lt;&lt; 8);\n}\n\nint ressu_genshort_limit(int limit)\n{\n  int c;\n  \n  while((c = ressu_genshort()) &gt;= (65536 \/ limit) * limit);\n  return(c % limit);\n}\n\nunsigned int ressu_genint()\n{\n  return(ressu_genshort() | ressu_genshort() &lt;&lt; 16);\n}\n\nunsigned int ressu_genint_limit(unsigned long limit)\n{\n  unsigned int c;\n  \n  while((c = ressu_genint()) &gt;= (((unsigned int)65536 * 65536) \/ limit) * limit);\n  return(c % limit);\n}\n\nvoid count_10(int len, unsigned char *buf, int offs, int count, double limit, int *ok)\n{\n  int d, e, count10&#91;10];\n  unsigned char *p;\n\n  for(d = 0; d &lt; 10; d++)\n    count10&#91;d] = 0;\n\n  p = buf + offs;\n  for(d = 0; d &lt; len; d++) {\n    count10&#91;*p - '0']++;\n    p++;\n  }\n\n  for(d = 0;d &lt; 10; d++) {\n    if(count10&#91;d] &gt; count)\n      e = count10&#91;d] - count;\n    else\n      e = count - count10&#91;d];\n\n    if((double)e \/ count * 100 &gt; limit) {\n#ifdef DEBUG4\n      fprintf(stderr,\"\\n%d\", d);\n      fprintf(stderr,\", c=%d\", offs);\n      fprintf(stderr,\", count10=%d\", count10&#91;d]);\n      fprintf(stderr,\", d=%d\", e);\n      fprintf(stderr,\" diff%%=%f\",(double) e \/ count * 100);\n      fflush(stderr);\n#endif\n      *ok = 0;\n      break;\n    }\n  }\n}\n\nvoid count_100(int len, unsigned char *buf, int offs, int count, double limit, int *ok)\n{\n  int d, e, count100&#91;100];\n  unsigned char *p;\n\n  for(d = 0; d &lt; 100; d++)\n    count100&#91;d] = 0;\n\n  p = buf + offs;\n  for(d = 0; d &lt; len; d++) {\n    count100&#91;(*p - '0') * 10 + (*(p + 1) - '0')]++;\n    p += 2;\n  }\n\n  for(d = 0; d &lt; 10; d++) {\n    if(count100&#91;d] &gt; count)\n      e = count100&#91;d] - count;\n    else\n      e = count - count100&#91;d];\n\n    if((double)e \/ count * 100 &gt; limit) {\n      fprintf(stderr,\"\\n%d\", d);\n      fprintf(stderr,\", c=%d\", offs);\n      fprintf(stderr,\", count100=%d\", count100&#91;d]);\n      fprintf(stderr,\", e=%d\", e);\n      fprintf(stderr,\" diff%%=%f\",(double) e \/ count * 100);\n      fflush(stderr);\n      *ok = 0;\n    }\n  }\n}\n\n#include &lt;stdarg.h&gt;\n\n#define DEBUG58\n\nint stat_line_chars = 0;\nint stat_line_edchars = 0;\n\nvoid stat_line_begin()\n{\n#ifdef DEBUG58\n  fprintf(stderr,\"\\n\");\n#else\n  fprintf(stderr,\"\\r\");\n#endif  \n  stat_line_edchars = stat_line_chars;\n  stat_line_chars = 0;\n}\n\n\nvoid stat_line_printf(const unsigned char *format, ...)\n{\n  int count;\n  va_list args;\n  static unsigned char *stat_line_buf;\n  static size_t stat_line_buf_length;\n\n  va_start(args, format);\n  count = vsnprintf(stat_line_buf, stat_line_buf_length, format, args) + 1;\n  va_end(args);\n  if(stat_line_buf_length &lt; count) {\n    stat_line_buf_length = count;\n    stat_line_buf=realloc(stat_line_buf, stat_line_buf_length);\n    va_start(args, format);\n    count = vsnprintf(stat_line_buf, stat_line_buf_length, format, args) + 1;\n    va_end(args);\n  }\n  fprintf(stderr,\"%s\", stat_line_buf);\n  stat_line_chars += strlen(stat_line_buf);\n}\n\nvoid stat_line_end()\n{\n  int c, d;\n  \/\/ previous line longer than this one,\n  \/\/ overwrite with spaces\n  if(stat_line_edchars &gt; stat_line_chars) {\n    d = stat_line_edchars - stat_line_chars;\n    for(c = 0; c &lt; d; c++) {\n#ifdef DEBUG58\n      fprintf(stderr,\"*\");\n#else\n      fprintf(stderr,\" \");\n#endif\n    }\n    for(c = 0; c &lt; d; c++)\n      fprintf(stderr,\"\\b\");\n  }\n  fflush(stderr);\n}\n\n#define KALA\n#define aTRY 2\n\n#define HTMLTIMEFORMAT \"%a, %d %b %Y %H:%M:%S %Z\"\n#define TIMEFORMAT \"%H:%M:%S %Z\"\n#define TIMEFORMAT2 \"%a, %H:%M:%S %Z\"\n#define DATEFORMAT \"%a, %d %b %Y\"\n\nvoid main(int argc,char *argv&#91;])\n{\n  unsigned int c, d, e;\n  long int start, now;\n  unsigned char *digits, *p;\n  unsigned char filename&#91;128];\n  \n  FILE *fp1;\n  \n  procname = argv&#91;0];\n\n  limit = 9;\n  if(argc &gt; 1)\n    limit = atof(argv&#91;1]);\n  sprintf(limits,\"%f\", limit);\n  fprintf(stderr,\"Limit: %s\\n\", limits);\n  \n  if((digits = malloc(1000001)) == NULL) {\n    fprintf(stderr,\"%s: cannot allocate memory\", procname);\n  }\n\n#ifdef KALA\n  sprintf(filename,\"ressupdf%s.dat\", limits);\n  if((fp1 = fopen(filename, \"r\")) != NULL) {\n    fgets(digits, 1000001, fp1);\n    fclose(fp1);\n  } else {\n#endif\n    int ok = 0;\n    while(!ok) {\n      p = digits;\n      start = time(NULL);\n      for(c = 0; c &lt; 1000000; c += 2500) {\n\tnow = time(NULL);\n\tstat_line_begin();\n\tstat_line_printf(\"\\rblk: %d\", c\/2500);\n\tstat_line_printf(\", pos: %d\", c);\n\n\tif(c &gt; 0) {\n\t  int secondsleft = (int)((((double)now - start) \/ c) * (1000000 - c));\n\t  int temp, timeprinted = 0;\n\t  stat_line_printf(\", left\");\n\t  \n\t  temp = secondsleft \/ (24 * 3600);\n\t  if(temp &gt; 0) {\n\t    timeprinted = 1;\n\t    stat_line_printf(\" %d days\", temp);\n\t    secondsleft -= temp * (24 * 3600);\n\t  }\n\t  temp = secondsleft \/ 3600;\n\t  if(temp &gt; 0) {\n\t    timeprinted = 1;\n\t    stat_line_printf(\" %d hours\", temp);\n\t    secondsleft -= temp * 3600;\n\t  }\n\t  temp = secondsleft \/ 60;\n\t  if(temp &gt; 0) {\n\t    timeprinted = 1;\n\t    stat_line_printf(\" %d minutes\", temp);\n\t    secondsleft -= temp * 60;\n\t  }\n\t  temp = secondsleft;\n\t  if(!timeprinted) {\n\t    stat_line_printf(\" %d seconds\", temp);\n\t  }\n\t  long int secondsend = (int)start + ((((double)now - start) \/ c) * 1000000);\n\t  char timebuf&#91;128], timebuf2&#91;128];\n\t  stat_line_printf(\", ready at\");\n\t  strftime(timebuf, sizeof(timebuf), DATEFORMAT,\n\t\t   localtime((time_t *) &amp;secondsend));\n\t  strftime(timebuf2, sizeof(timebuf2), DATEFORMAT,\n\t\t   localtime((time_t *) &amp;now));\n\t  if(strcmp(timebuf, timebuf2)) {\n\t    stat_line_printf(\" %s\", timebuf);\n\t  }\n\t  strftime(timebuf, sizeof(timebuf), TIMEFORMAT,\n\t\t   localtime((time_t *) &amp;secondsend));\n\t  stat_line_printf(\" %s\", timebuf);\n\t  strftime(timebuf, sizeof(timebuf), TIMEFORMAT2,\n\t\t   localtime((time_t *) &amp;now));\n\t  stat_line_printf(\"(now %s)\", timebuf);\n\t}\n\tstat_line_end();\n\tok = 0;\n\twhile(!ok) {\n#ifdef TRY\n\t  p = digits + c;\n\t  for(d = 0; d &lt; 250; d++) {\n\t    *p++='0'; *p++='1'; *p++='2'; *p++='3';\n\t    *p++='4'; *p++='5'; *p++='6'; *p++='7';\n\t    *p++='8'; *p++='9';\n\t  }\n\t  \n\t  int f = 0;\n\t  p = digits + c;\n\t  for(d = 0; d &lt; 2500; d++) {\n\t    f = (f + ressu_genshort_limit(2500)) % 2500;\n\t    e = p&#91;d];\n\t    p&#91;d] = p&#91;f];\n\t    p&#91;f] = e;\n\t  }\n#else\n\t  p = digits + c;\n\t  for(d = 0; d &lt; 2500; d++) {\n\t    *p++ = ressu_genbyte_limit(10) + '0';\n\t  }\n#endif\n\t  ok = 1;\n\t  count_10(2500, digits, c, 250, limit, &amp;ok);\n\t  \/\/count_10(2500, digits, c, 250, 2.5, &amp;ok);\n\t} \/\/ while(!ok\n      } \/\/ for(c=0;\n      *p ='\\0';\n\n      ok = 1;\n      \/\/count_10(1000000, digits, 0, 100000, 3.5, &amp;ok);\n      \/\/ count_100(500000, digits, 0, 5000, 3.5, &amp;ok);\n      \/\/count_100(500000, digits, 0, 5000, 2.5, &amp;ok);\n\n      stat_line_begin();\n      stat_line_printf(\"\\rblk: %d\",c \/ 2500);\n      stat_line_printf(\", pos: %d, done.\", c);\n      stat_line_end();\n      fprintf(stderr,\"\\n\");\n    } \/\/ while(!ok)\n#ifdef KALA\n    sprintf(filename,\"ressupdf%s.dat\", limits);\n    if((fp1 = fopen(filename, \"w\")) != NULL) {\n      fputs(digits, fp1);\n      fclose(fp1);\n    }\n  }\n#endif\n\n  p = digits;\n  for(c = 0; c &lt; 20000; c++) {\n    if(c % 50 == 0) {\n      fprintf(stdout,\"%20s\", \"\");\n      fprintf(stdout,\"%-20s\", \"RESSU RANDOM BITS\");\n      fprintf(stdout,\"%20s\", \"\");\n      fprintf(stdout,\"%11d\", c \/ 50 + 1);\n      fprintf(stdout,\"\\n\\n\");\n    } else if(c % 5 == 0) {\n      fprintf(stdout,\"\\n\");\n    }\n    fprintf(stdout,\"%05d\", c);\n    fprintf(stdout,\" \");\n    for(d = 0; d &lt; 5; d++) {\n      fprintf(stdout,\"  \");\n      for(e=0;e&lt;5;e++)\n\tfprintf(stdout,\"%c\", *p++);\n      fprintf(stdout,\" \");\n      for(e = 0; e &lt; 5; e++)\n\tfprintf(stdout,\"%c\", *p++);\n    }\n    fprintf(stdout,\"\\n\");\n  }\n}<\/code><\/pre>\n\n\n\n<p>Printout:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>...\n                    RESSU RANDOM BITS                                 2\n\n00050   17742 90978  20327 99793  09894 83023  24240 04809  02397 57605\n00051   69731 00724  79328 16357  42844 64199  58819 42893  04156 30047\n00052   24572 77596  88519 44700  50806 16297  94987 10761  07043 80638\n00053   69962 81888  72976 01358  42459 68683  78899 39340  11999 13284\n00054   54542 84683  51941 09434  30594 35535  35814 43101  47387 78591\n\n00055   01750 72686  05907 24473  54501 94416  38862 90650  82982 60288\n00056   61300 71065  13214 47645  14431 55466  42331 76349  64840 76355\n00057   16065 02085  18175 94643  19271 73959  67609 13699  52113 87491\n00058   53317 49643  28677 63486  50574 83719  02169 71535  52186 94945\n00059   09805 93912  06726 48683  71397 26752  69332 97877  75471 12043\n\n00060   32509 79800  94963 98307  20909 55905  45092 16663  40666 71118\n00061   69566 50136  56766 14661  66668 18376  70231 88838  15166 98110\n00062   14306 75279  70432 18240  57800 84134  89759 93733  99649 67792\n00063   98841 27596  72336 68936  80330 58378  40111 29362  71717 97984\n00064   97438 00397  68367 14379  73854 66167  83473 57904  65723 89246\n\n00065   85757 80797  97117 31751  34814 73303  32275 10252  43687 99186\n00066   01301 91011  23578 98576  70204 72462  07013 75523  25481 82102\n00067   15434 82659  01554 99856  69543 62445  59721 71282  54068 79247\n00068   22366 89681  96308 83960  85382 86605  52183 60856  28081 89425\n00069   22548 46969  99594 98343  76579 53245  11516 29313  82536 12261\n\n00070   94099 33155  61371 40590  94751 95390  14484 42212  33870 54040\n00071   42073 36389  32803 81890  99328 05960  69418 40568  05591 37183\n00072   56946 95764  81191 75005  57238 22658  88628 60884  34721 89120\n00073   55423 71707  53515 64023  38182 98412  49163 72441  40175 94841\n00074   65736 76047  00426 33814  54279 53012  28756 30077  07304 98110\n\n00075   09975 26885  56587 79319  21111 45568  48821 71858  17419 81809\n00076   40989 23782  61300 05131  09654 70146  17527 89776  15083 25525\n00077   59502 62459  25865 64290  03791 00902  99654 11047  81028 88697\n00078   05911 04417  51850 72237  52924 16709  08528 59122  08090 74950\n00079   56707 69992  63538 51049  56414 19722  89973 20718  74092 99756\n\n00080   54761 78783  64511 08489  12059 86522  76650 18753  96548 63488\n00081   38502 77610  16498 75110  76846 77545  35529 80274  95536 51291\n00082   90171 42638  84352 04269  09133 61636  28115 15471  79874 11649\n00083   11396 17063  36477 85175  25267 22793  21376 44996  96616 89233\n00084   69149 11776  86056 67806  55529 61713  66028 67571  98188 41957\n\n00085   24620 39702  16363 91952  41532 50804  75205 90986  91060 60663\n00086   72905 04521  25448 42824  63464 84321  35445 44154  75242 64517\n00087   56282 64892  22474 62633  04941 31364  86882 69973  47361 99146\n00088   45349 43405  72289 36148  62758 78365  98873 00722  30598 08620\n00089   01388 94749  42439 12958  85192 84018  99461 61367  58575 34130\n\n00090   09402 98084  06255 33480  73435 96183  32346 98552  12425 61651\n00091   16196 52241  79554 05184  16176 26149  45204 84321  34076 01033\n00092   41376 62183  69497 26396  59490 67839  68194 69435  78057 75337\n00093   06816 97357  81606 83265  73652 54869  06504 83737  86270 07765\n00094   50336 28597  83445 25111  84782 13507  84907 17025  76320 91352\n\n00095   20878 07006  67793 45175  75975 44617  82764 89124  34061 79955\n00096   79920 60145  89200 09256  96383 91519  60603 68168  16011 38572\n00097   48244 92365  82713 12384  23602 80116  95662 88142  19606 84202\n00098   13455 21525  93409 51728  15764 63568  00612 90243  90778 99042\n00099   77433 99809  25327 34560  70120 78586  27165 29579  60124 14500\n                    RESSU RANDOM BITS                                 3\n\n00100   98225 94921  37093 56968  81200 60112  31201 67388  80992 72445\n00101   55681 22490  70683 07715  97102 38508  13787 10500  04785 57383\n00102   64624 57524  67608 90944  13863 58712  82638 55760  46560 77855\n00103   42276 34624  73319 60353  81043 80593  29831 01067  62128 71385\n00104   52641 48563  35066 13659  49948 69243  83099 86151  81455 25561\n\n00105   43407 53921  98946 54240  70753 08464  73282 01982  48276 03921\n00106   54577 09657  32778 47794  19627 58791  11679 09479  57297 11075\n00107   76619 43447  04417 11921  14858 32489  01024 26846  82457 39669\n00108   48399 62589  90681 76259  04405 32977  35462 35641  77427 47811\n00109   45223 67943  03521 12482  55595 21037  67109 62208  42512 13150\n\n00110   33620 25141  23653 09332  03284 09797  37987 45675  76920 33935\n00111   32306 56053  24435 59821  15476 69657  64606 57528  04364 35402\n00112   53100 91082  46382 88271  55521 52981  59009 46366  56773 03251\n00113   92113 18616  31236 45997  75651 26459  89519 54780  87788 12855\n00114   47788 83993  13664 19450  46126 81687  34224 26786  13330 36140\n\n00115   62958 16807  79203 26843  26604 66234  29717 70317  61712 46439\n00116   96909 22031  38002 64294  22698 33377  73011 32717  08886 00711\n00117   47356 07381  07805 42091  70442 75838  81204 33079  43998 06378\n00118   14028 43141  18516 85420  44282 49146  36400 14280  39400 07228\n00119   49580 47869  02330 32465  75317 06413  01007 06898  42200 95453\n\n00120   02985 67968  18045 03364  04061 23882  11353 63530  09178 39509\n00121   03273 96065  47529 34749  63066 38374  05455 62346  11741 94157\n00122   23385 92695  52738 25218  89620 76213  58440 91996  64772 12959\n00123   90823 27995  07090 88421  54961 37736  37467 58044  71799 64360\n00124   33887 85780  06317 78914  82704 18361  29095 27681  56330 34108\n\n00125   75056 67546  10567 77241  67072 91487  93011 55737  20964 94703\n00126   05489 80439  22228 23922  53525 46958  29892 10707  75548 49477\n00127   44613 65998  68249 47336  48552 31708  32719 87201  55409 10564\n00128   50068 95097  73236 41950  71834 33839  41452 24690  23847 75012\n00129   07507 12156  77054 46383  20390 83765  08003 26405  34018 52247\n\n00130   07870 76399  89979 71327  28740 37314  95754 59355  91496 88323\n00131   56394 06551  67546 59950  40968 98397  73401 98309  29766 18729\n00132   42481 08526  28716 68598  53228 71142  14448 59721  18361 44639\n00133   59275 01370  36775 89748  23930 39536  85232 74208  32793 62803\n00134   35616 27137  11079 94080  03589 13286  16881 16298  87820 83679\n\n00135   73497 73109  30111 34058  28022 89290  45635 88020  41070 40721\n00136   50527 34038  00823 99594  65641 48184  73083 96977  61989 82760\n00137   72261 19301  99253 64192  89296 35525  46338 20033  88519 18643\n00138   74078 30979  14259 71378  77923 50563  45619 09479  41882 60785\n00139   92291 56636  81071 75996  82077 49803  20786 97042  57848 27400\n\n00140   10657 61863  97054 29344  80492 63211  85994 01135  12742 95135\n00141   61544 11709  50756 98947  36027 50318  22992 62246  04572 05310\n00142   58304 90967  98064 13575  95892 36013  85527 76628  80363 65409\n00143   60626 87624  78003 10446  31401 15903  51764 23838  90002 24421\n00144   18686 07635  47573 18678  28796 22120  76601 16788  17529 40289\n\n00145   77639 58662  47179 24199  08996 95207  83586 64483  83746 82002\n00146   45361 55716  45661 11221  32186 36359  00273 47492  76060 84107\n00147   60461 94122  98441 98217  20483 51905  53098 62933  18505 27967\n00148   48343 23724  90306 68422  75352 48267  14368 52626  92610 23465\n00149   22905 85298  54833 10053  67728 19154  05224 87915  24816 20958\n                    RESSU RANDOM BITS                                 4\n...<\/code><\/pre>\n\n\n\n<p>Debug:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>...\nblk: 123, pos: 307500, left 0 seconds, ready at 00:20:48 EEST(now Mon, 00:20:48 EEST)\n\nblk: 124, pos: 310000, left 0 seconds, ready at 00:20:48 EEST(now Mon, 00:20:48 EEST)\n\nblk: 125, pos: 312500, left 0 seconds, ready at 00:20:48 EEST(now Mon, 00:20:48 EEST)\n\nblk: 126, pos: 315000, left 0 seconds, ready at 00:20:48 EEST(now Mon, 00:20:48 EEST)\n\nblk: 127, pos: 317500, left 0 seconds, ready at 00:20:48 EEST(now Mon, 00:20:48 EEST)\n\nblk: 128, pos: 320000, left 2 seconds, ready at 00:20:51 EEST(now Mon, 00:20:49 EEST)\n\nblk: 129, pos: 322500, left 2 seconds, ready at 00:20:51 EEST(now Mon, 00:20:49 EEST)\n\nblk: 130, pos: 325000, left 2 seconds, ready at 00:20:51 EEST(now Mon, 00:20:49 EEST)\n\nblk: 131, pos: 327500, left 2 seconds, ready at 00:20:51 EEST(now Mon, 00:20:49 EEST)\n\nblk: 132, pos: 330000, left 2 seconds, ready at 00:20:51 EEST(now Mon, 00:20:49 EEST)\n\nblk: 133, pos: 332500, left 2 seconds, ready at 00:20:51 EEST(now Mon, 00:20:49 EEST)\n\nblk: 134, pos: 335000, left 1 seconds, ready at 00:20:50 EEST(now Mon, 00:20:49 EEST)\n\nblk: 135, pos: 337500, left 1 seconds, ready at 00:20:50 EEST(now Mon, 00:20:49 EEST)\n\nblk: 136, pos: 340000, left 1 seconds, ready at 00:20:50 EEST(now Mon, 00:20:49 EEST)\n\nblk: 137, pos: 342500, left 1 seconds, ready at 00:20:50 EEST(now Mon, 00:20:49 EEST)\n\n...<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" width=\"320\" height=\"240\" src=\"https:\/\/moijari.com\/wp-content\/uploads\/2026\/07\/IMG_2276.jpeg\" alt=\"\" class=\"wp-image-3951\" srcset=\"https:\/\/moijari.com\/wp-content\/uploads\/2026\/07\/IMG_2276.jpeg 320w, https:\/\/moijari.com\/wp-content\/uploads\/2026\/07\/IMG_2276-300x225.jpeg 300w\" sizes=\"(max-width: 320px) 100vw, 320px\" \/><\/figure>\n\n\n\n<p>(just a plain old ressu): cn:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ newressu \u2014cn\n00000 \u72e5\u9d87\u8762\u64ea\u61d5\u591d\u4fbe\u6bee\u8ca3\u8ff6\u9916\u50c6\u7de3\u5d3e\u51f7\u687c\u6c81\u8d47\u5589\u6f63\u7d62\u9702\u71cc\u96f7\u98eb\u7224\u93d3\u8bce\u7fe6\u7fb7\u5643\u53c4\n00001 \u9dba\u9f02\u892f\u9a7b\u5d69\u540e\u4f64\u9f5a\u74e8\u540c\u9a97\u6d9d\u9414\u754a\u5fca\u911e\u7bd1\u626f\u5bcb\u5708\u855f\u6941\u961f\u6581\u7258\u543e\u8394\u78a6\u56d8\u9891\u67ad\u5432\n00002 \u93d1\u8c48\u585f\u9b0a\u71ec\u5f54\u9e97\u9bc2\u7d69\u897b\u911d\u4fa2\u50ae\u6566\u72e4\u6dc8\u5a89\u65e5\u9df2\u57e1\u7926\u5861\u7cb1\u8c97\u8e5a\u7ff2\u7fc2\u8021\u72e3\u8a00\u5a68\u6729\n00003 \u7acb\u81d5\u7c57\u94ca\u7b1d\u87cd\u6fd3\u9e57\u916b\u93df\u8bab\u4f4e\u700d\u95b4\u7f10\u7c01\u6352\u7d1c\u823c\u7424\u9744\u5601\u954d\u588a\u92c8\u9868\u93bc\u4eb8\u58e0\u6116\u6628\u7027\n00004 \u55de\u9e76\u8666\u6333\u64c4\u88d5\u7e4c\u535b\u5583\u5e7c\u7c21\u4ede\u748a\u51fa\u9c7d\u57b6\u649f\u630e\u9622\u7a52\u9981\u8a37\u5027\u5b36\u9b6e\u74d1\u542b\u5838\u9df5\u72bd\u6faf\u8064\n00005 \u72a9\u89e3\u73ce\u7d22\u6f4e\u8c49\u7320\u635c\u4f3b\u85ee\u9eae\u64ad\u99a6\u9552\u8d70\u7fd9\u5931\u6bba\u94b2\u58c5\u9bb9\u9ecc\u51e7\u8a1a\u636e\u7c22\u657d\u6ac0\u7ae5\u795e\u7b8e\u8eca\n00006 \u8ca9\u70a6\u9252\u87dd\u6538\u50fa\u8f7a\u9dcd\u971d\u5872\u7a41\u8172\u6808\u4e2f\u7249\u99dc\u90aa\u79dd\u7c84\u7333\u93a4\u8d0f\u604f\u9a23\u7d93\u9d69\u59f8\u82ce\u84d4\u86a2\u85f6\u79b8\n00007 \u6607\u9cbe\u92e4\u74a4\u652b\u7cbd\u81ea\u6696\u94d8\u9fd2\u8964\u5162\u87ed\u7cf8\u685a\u58db\u7884\u81a8\u834b\u5924\u7a9e\u7492\u7997\u77bb\u5be4\u8de7\u6a4e\u9ed8\u4e94\u888e\u8735\u7d97\n00008 \u57f5\u9fb1\u9dab\u95b8\u9739\u8b60\u613d\u99c6\u79d3\u8a83\u632a\u7b6f\u84c0\u83fb\u6f6e\u9843\u8be4\u5c6e\u8d6c\u63ae\u5a9a\u83cb\u851e\u7da8\u678f\u6af6\u7d5c\u8eef\u688a\u91b0\u8451\u7374\n00009 \u5cf5\u6fbe\u8e70\u9a2b\u6673\u59ab\u7fbe\u719f\u60c9\u517d\u840c\u60ae\u5f5b\u8dac\u6769\u5423\u9d41\u6b8d\u8dea\u7f08\u6d5f\u919b\u96f5\u6721\u5804\u873a\u511c\u81e6\u705b\u927f\u6a08\u7fc8<\/code><\/pre>\n\n\n\n<p>jp1<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ newressu \u2014jp1\n00000 \u307b\u3065\u307f\u3095\u306b\u3095\u307c\u304b\u3056\u304f\u304c\u3088\u3069\u3069\u3054\u3074\u3085\u308c\u306b\u3060\u3089\u305f\u3043\u3062\u305b\u3090\u3086\u3060\u306f\u3094\u3082\u3092\n00001 \u305d\u308d\u304d\u304a\u3079\u3046\u304b\u3078\u3045\u3088\u3053\u3042\u306d\u3085\u3065\u3050\u3051\u3074\u3046\u307c\u306d\u3072\u3052\u304e\u308e\u3087\u305e\u306c\u308a\u305d\u305c\u3083\n00002 \u3070\u304f\u308d\u3086\u3085\u3046\u3087\u3059\u3058\u3054\u3051\u3043\u3052\u3059\u3046\u3065\u307b\u304b\u305c\u3050\u3064\u3047\u3085\u3062\u307c\u3073\u306b\u3047\u3067\u3094\u304c\u3074\n00003 \u3090\u308c\u3070\u305c\u305a\u3056\u308c\u3081\u3055\u3080\u3081\u3057\u3054\u3070\u3090\u3076\u3093\u305d\u3094\u305d\u3067\u3073\u3070\u3088\u3053\u3067\u3091\u3079\u306a\u304e\u308a\u3093\n00004 \u3062\u308a\u3041\u3044\u3077\u3063\u3095\u308a\u3045\u3086\u306b\u306d\u3060\u3045\u306d\u3082\u3077\u3064\u3095\u308d\u3063\u306c\u3043\u3090\u307a\u3045\u3087\u306f\u3069\u3068\u3051\u308e\n00005 \u305a\u308e\u3079\u307b\u305a\u3065\u306a\u308f\u3085\u3055\u3091\u308f\u3062\u3068\u307e\u3056\u308e\u3092\u304e\u308e\u3050\u305d\u3063\u3074\u3084\u3074\u3057\u3061\u3095\u307c\u3047\u3077\n00006 \u307c\u3071\u3078\u307d\u3045\u3075\u3087\u307d\u3065\u308f\u307c\u3050\u305a\u3068\u3058\u304d\u307b\u3047\u307d\u3059\u3081\u3069\u308f\u3068\u305e\u304d\u305e\u3059\u3042\u3049\u3069\u308c\n00007 \u3047\u3092\u304d\u3077\u3046\u3055\u3046\u304d\u3046\u3072\u3087\u3045\u3046\u3065\u306c\u3080\u308a\u3046\u3057\u3060\u306f\u3086\u3043\u3043\u3090\u307b\u3049\u3074\u305e\u3064\u305a\u306e\n00008 \u305d\u308a\u304d\u3055\u3074\u306a\u308d\u3058\u306c\u3077\u3073\u305f\u308e\u3083\u304c\u306b\u3041\u308c\u3080\u3063\u3057\u307e\u3070\u305e\u3083\u3058\u3074\u3043\u3053\u3047\u3044\u3042\n00009 \u3071\u308b\u3077\u304c\u3055\u3075\u3054\u307f\u305e\u3091\u3046\u304f\u3051\u3070\u3063\u304a\u304b\u304f\u304d\u3079\u3060\u3072\u306c\u3048\u3073\u3078\u307e\u305d\u3073\u306b\u307e\u307b<\/code><\/pre>\n\n\n\n<p>jp2<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ newressu \u2014jp2\n00000 \u30a8\u30ff\u30ea\u30cb\u30f7\u30ef\u30c7\u30d6\u30e2\u30cd\u30c9\u30e3\u30e4\u30fe\u30e4\u30f9\u30f1\u30c4\u30f9\u30ab\u30b2\u30ae\u30ab\u30b6\u30b3\u30c7\u30dd\u30b2\u30c2\u30b9\u30c8\u30f9\n00001 \u30c8\u30d3\u30f6\u30d0\u30c4\u30c4\u30a2\u30d5\u30b3\u30db\u30e3\u30d7\u30b4\u30a1\u30b5\u30b9\u30d3\u30cd\u30da\u30db\u30e4\u30ad\u30d2\u30ff\u30ae\u30e2\u30f4\u30dc\u30f9\u30b5\u30ab\u30ba\n00002 \u30bc\u30a1\u30a5\u30e3\u30fa\u30e3\u30f5\u30ab\u30ab\u30fb\u30f6\u30dc\u30af\u30bc\u30f1\u30a2\u30c9\u30f9\u30df\u30e8\u30e8\u30e0\u30c2\u30a7\u30db\u30ac\u30ff\u30a4\u30be\u30fe\u30c2\u30b8\n00003 \u30c7\u30dc\u30ad\u30db\u30e7\u30e1\u30af\u30e9\u30c9\u30e0\u30a6\u30c9\u30bd\u30f8\u30e2\u30ec\u30b7\u30b8\u30f7\u30a5\u30e4\u30d5\u30a8\u30cf\u30a6\u30e5\u30b4\u30f4\u30f5\u30b4\u30fc\u30a7\n00004 \u30bb\u30dd\u30b3\u30b4\u30de\u30fb\u30e5\u30a2\u30e7\u30ad\u30d5\u30a6\u30e9\u30d2\u30d0\u30f0\u30ab\u30ae\u30a8\u30c0\u30e3\u30d6\u30b7\u30f3\u30e0\u30e1\u30f2\u30e8\u30fe\u30d4\u30d9\u30c5\n00005 \u30ac\u30f2\u30dd\u30ce\u30d5\u30ea\u30ee\u30c2\u30f1\u30e1\u30c2\u30de\u30f6\u30a2\u30c7\u30d7\u30a8\u30c8\u30a3\u30cc\u30cc\u30bf\u30b7\u30f4\u30e7\u30d1\u30f4\u30dc\u30b4\u30fc\u30c6\u30e2\n00006 \u30e8\u30a7\u30ab\u30d0\u30ba\u30ab\u30f8\u30d2\u30bd\u30b6\u30e3\u30ad\u30c1\u30d7\u30d0\u30ba\u30c1\u30d7\u30c1\u30c1\u30f4\u30d1\u30b9\u30e4\u30c8\u30d5\u30f6\u30c5\u30c1\u30bb\u30a8\u30a6\n00007 \u30f4\u30a5\u30ce\u30bf\u30b1\u30ad\u30bb\u30a0\u30c8\u30a0\u30a6\u30da\u30c8\u30ad\u30a3\u30a1\u30d9\u30cd\u30ca\u30c2\u30c1\u30d1\u30a3\u30be\u30ab\u30fe\u30c6\u30f2\u30da\u30ed\u30fe\u30e4\n00008 \u30d5\u30f2\u30cd\u30e6\u30de\u30b0\u30b5\u30ee\u30b7\u30fe\u30b1\u30d8\u30ef\u30f7\u30d3\u30e8\u30df\u30b4\u30bb\u30a0\u30aa\u30f8\u30ea\u30f9\u30ba\u30e2\u30d7\u30fe\u30c0\u30a6\u30ac\u30c2\n00009 \u30fb\u30ae\u30a7\u30f2\u30f4\u30dd\u30ae\u30dd\u30ef\u30be\u30bc\u30cf\u30ca\u30b0\u30ea\u30a0\u30ba\u30a2\u30da\u30c8\u30ec\u30b2\u30bf\u30ce\u30e3\u30c8\u30d0\u30c0\u30e6\u30df\u30d2\u30f8<\/code><\/pre>\n\n\n\n<p>jp3<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/moijari.com\/wp-content\/uploads\/2026\/07\/IMG_2264.jpeg\" alt=\"\" class=\"wp-image-3952\" width=\"353\" height=\"265\" srcset=\"https:\/\/moijari.com\/wp-content\/uploads\/2026\/07\/IMG_2264.jpeg 320w, https:\/\/moijari.com\/wp-content\/uploads\/2026\/07\/IMG_2264-300x225.jpeg 300w\" sizes=\"(max-width: 353px) 100vw, 353px\" \/><\/figure>\n\n\n\n<p>utf-8 ohjelman k\u00e4ytt\u00f6\u00e4:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ .\/utf-8 | head -n 20\n      ----------------111111111111111122222222222222223333333333333333\n      0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef\n      ================================================================\n    0 --- control characters ---       !\"#$%&amp;'()*+,-.\/0123456789:;&lt;=>?\n   40 @ABCDEFGHIJKLMNOPQRSTUVWXYZ&#91;\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\n   80 --- utf8 characters ---         --- utf8 characters ---         \n   c0 --- utf8 characters ---         --- utf8 characters ---         \n  100 \u0100\u0101\u0102\u0103\u0104\u0105\u0106\u0107\u0108\u0109\u010a\u010b\u010c\u010d\u010e\u010f\u0110\u0111\u0112\u0113\u0114\u0115\u0116\u0117\u0118\u0119\u011a\u011b\u011c\u011d\u011e\u011f\u0120\u0121\u0122\u0123\u0124\u0125\u0126\u0127\u0128\u0129\u012a\u012b\u012c\u012d\u012e\u012f\u0130\u0131\u0132\u0133\u0134\u0135\u0136\u0137\u0138\u0139\u013a\u013b\u013c\u013d\u013e\u013f\n  140 \u0140\u0141\u0142\u0143\u0144\u0145\u0146\u0147\u0148\u0149\u014a\u014b\u014c\u014d\u014e\u014f\u0150\u0151\u0152\u0153\u0154\u0155\u0156\u0157\u0158\u0159\u015a\u015b\u015c\u015d\u015e\u015f\u0160\u0161\u0162\u0163\u0164\u0165\u0166\u0167\u0168\u0169\u016a\u016b\u016c\u016d\u016e\u016f\u0170\u0171\u0172\u0173\u0174\u0175\u0176\u0177\u0178\u0179\u017a\u017b\u017c\u017d\u017e\u017f\n  180 \u0180\u0181\u0182\u0183\u0184\u0185\u0186\u0187\u0188\u0189\u018a\u018b\u018c\u018d\u018e\u018f\u0190\u0191\u0192\u0193\u0194\u0195\u0196\u0197\u0198\u0199\u019a\u019b\u019c\u019d\u019e\u019f\u01a0\u01a1\u01a2\u01a3\u01a4\u01a5\u01a6\u01a7\u01a8\u01a9\u01aa\u01ab\u01ac\u01ad\u01ae\u01af\u01b0\u01b1\u01b2\u01b3\u01b4\u01b5\u01b6\u01b7\u01b8\u01b9\u01ba\u01bb\u01bc\u01bd\u01be\u01bf\n  1c0 \u01c0\u01c1\u01c2\u01c3\u01c4\u01c5\u01c6\u01c7\u01c8\u01c9\u01ca\u01cb\u01cc\u01cd\u01ce\u01cf\u01d0\u01d1\u01d2\u01d3\u01d4\u01d5\u01d6\u01d7\u01d8\u01d9\u01da\u01db\u01dc\u01dd\u01de\u01df\u01e0\u01e1\u01e2\u01e3\u01e4\u01e5\u01e6\u01e7\u01e8\u01e9\u01ea\u01eb\u01ec\u01ed\u01ee\u01ef\u01f0\u01f1\u01f2\u01f3\u01f4\u01f5\u01f6\u01f7\u01f8\u01f9\u01fa\u01fb\u01fc\u01fd\u01fe\u01ff\n  200 \u0200\u0201\u0202\u0203\u0204\u0205\u0206\u0207\u0208\u0209\u020a\u020b\u020c\u020d\u020e\u020f\u0210\u0211\u0212\u0213\u0214\u0215\u0216\u0217\u0218\u0219\u021a\u021b\u021c\u021d\u021e\u021f\u0220\u0221\u0222\u0223\u0224\u0225\u0226\u0227\u0228\u0229\u022a\u022b\u022c\u022d\u022e\u022f\u0230\u0231\u0232\u0233\u0234\u0235\u0236\u0237\u0238\u0239\u023a\u023b\u023c\u023d\u023e\u023f\n  240 \u0240\u0241\u0242\u0243\u0244\u0245\u0246\u0247\u0248\u0249\u024a\u024b\u024c\u024d\u024e\u024f\u0250\u0251\u0252\u0253\u0254\u0255\u0256\u0257\u0258\u0259\u025a\u025b\u025c\u025d\u025e\u025f\u0260\u0261\u0262\u0263\u0264\u0265\u0266\u0267\u0268\u0269\u026a\u026b\u026c\u026d\u026e\u026f\u0270\u0271\u0272\u0273\u0274\u0275\u0276\u0277\u0278\u0279\u027a\u027b\u027c\u027d\u027e\u027f\n  280 \u0280\u0281\u0282\u0283\u0284\u0285\u0286\u0287\u0288\u0289\u028a\u028b\u028c\u028d\u028e\u028f\u0290\u0291\u0292\u0293\u0294\u0295\u0296\u0297\u0298\u0299\u029a\u029b\u029c\u029d\u029e\u029f\u02a0\u02a1\u02a2\u02a3\u02a4\u02a5\u02a6\u02a7\u02a8\u02a9\u02aa\u02ab\u02ac\u02ad\u02ae\u02af\u02b0\u02b1\u02b2\u02b3\u02b4\u02b5\u02b6\u02b7\u02b8\u02b9\u02ba\u02bb\u02bc\u02bd\u02be\u02bf\n  2c0 \u02c0\u02c1\u02c2\u02c3\u02c4\u02c5\u02c6\u02c7\u02c8\u02c9\u02ca\u02cb\u02cc\u02cd\u02ce\u02cf\u02d0\u02d1\u02d2\u02d3\u02d4\u02d5\u02d6\u02d7\u02d8\u02d9\u02da\u02db\u02dc\u02dd\u02de\u02df\u02e0\u02e1\u02e2\u02e3\u02e4\u02e5\u02e6\u02e7\u02e8\u02e9\u02ea\u02eb\u02ec\u02ed\u02ee\u02ef\u02f0\u02f1\u02f2\u02f3\u02f4\u02f5\u02f6\u02f7\u02f8\u02f9\u02fa\u02fb\u02fc\u02fd\u02fe\u02ff\n  300 \u0300\u0301\u0302\u0303\u0304\u0305\u0306\u0307\u0308\u0309\n  340 \u0340\u0341\u0342\u0343\u0344\u0345\u0346\u0347\u0348\u0349\u0370\u0371\u0372\u0373\u0374\u0375\u0376\u0377\u0378\u0379\u037a\u037b\u037c\u037d\u037e\u037f\n  380 \u0380\u0381\u0382\u0383\u0384\u0385\u0386\u0387\u0388\u0389\u038a\u038b\u038c\u038d\u038e\u038f\u0390\u0391\u0392\u0393\u0394\u0395\u0396\u0397\u0398\u0399\u039a\u039b\u039c\u039d\u039e\u039f\u03a0\u03a1\u03a2\u03a3\u03a4\u03a5\u03a6\u03a7\u03a8\u03a9\u03aa\u03ab\u03ac\u03ad\u03ae\u03af\u03b0\u03b1\u03b2\u03b3\u03b4\u03b5\u03b6\u03b7\u03b8\u03b9\u03ba\u03bb\u03bc\u03bd\u03be\u03bf\n  3c0 \u03c0\u03c1\u03c2\u03c3\u03c4\u03c5\u03c6\u03c7\u03c8\u03c9\u03ca\u03cb\u03cc\u03cd\u03ce\u03cf\u03d0\u03d1\u03d2\u03d3\u03d4\u03d5\u03d6\u03d7\u03d8\u03d9\u03da\u03db\u03dc\u03dd\u03de\u03df\u03e0\u03e1\u03e2\u03e3\u03e4\u03e5\u03e6\u03e7\u03e8\u03e9\u03ea\u03eb\u03ec\u03ed\u03ee\u03ef\u03f0\u03f1\u03f2\u03f3\u03f4\u03f5\u03f6\u03f7\u03f8\u03f9\u03fa\u03fb\u03fc\u03fd\u03fe\u03ff\n  400 \u0400\u0401\u0402\u0403\u0404\u0405\u0406\u0407\u0408\u0409\u040a\u040b\u040c\u040d\u040e\u040f\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041a\u041b\u041c\u041d\u041e\u041f\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042a\u042b\u042c\u042d\u042e\u042f\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043a\u043b\u043c\u043d\u043e\u043f\n$ utf-8 | grep 4000\n 4000 \u4000\u4001\u4002\u4003\u4004\u4005\u4006\u4007\u4008\u4009\u400a\u400b\u400c\u400d\u400e\u400f\u4010\u4011\u4012\u4013\u4014\u4015\u4016\u4017\u4018\u4019\u401a\u401b\u401c\u401d\u401e\u401f\u4020\u4021\u4022\u4023\u4024\u4025\u4026\u4027\u4028\u4029\u402a\u402b\u402c\u402d\u402e\u402f\u4030\u4031\u4032\u4033\u4034\u4035\u4036\u4037\u4038\u4039\u403a\u403b\u403c\u403d\u403e\u403f\n14000 \ud810\udc00\ud810\udc01\ud810\udc02\ud810\udc03\ud810\udc04\ud810\udc05\ud810\udc06\ud810\udc07\ud810\udc08\ud810\udc09\ud810\udc0a\ud810\udc0b\ud810\udc0c\ud810\udc0d\ud810\udc0e\ud810\udc0f\ud810\udc10\ud810\udc11\ud810\udc12\ud810\udc13\ud810\udc14\ud810\udc15\ud810\udc16\ud810\udc17\ud810\udc18\ud810\udc19\ud810\udc1a\ud810\udc1b\ud810\udc1c\ud810\udc1d\ud810\udc1e\ud810\udc1f\ud810\udc20\ud810\udc21\ud810\udc22\ud810\udc23\ud810\udc24\ud810\udc25\ud810\udc26\ud810\udc27\ud810\udc28\ud810\udc29\ud810\udc2a\ud810\udc2b\ud810\udc2c\ud810\udc2d\ud810\udc2e\ud810\udc2f\ud810\udc30\ud810\udc31\ud810\udc32\ud810\udc33\ud810\udc34\ud810\udc35\ud810\udc36\ud810\udc37\ud810\udc38\ud810\udc39\ud810\udc3a\ud810\udc3b\ud810\udc3c\ud810\udc3d\ud810\udc3e\ud810\udc3f\n24000 \ud850\udc00\ud850\udc01\ud850\udc02\ud850\udc03\ud850\udc04\ud850\udc05\ud850\udc06\ud850\udc07\ud850\udc08\ud850\udc09\ud850\udc0a\ud850\udc0b\ud850\udc0c\ud850\udc0d\ud850\udc0e\ud850\udc0f\ud850\udc10\ud850\udc11\ud850\udc12\ud850\udc13\ud850\udc14\ud850\udc15\ud850\udc16\ud850\udc17\ud850\udc18\ud850\udc19\ud850\udc1a\ud850\udc1b\ud850\udc1c\ud850\udc1d\ud850\udc1e\ud850\udc1f\ud850\udc20\ud850\udc21\ud850\udc22\ud850\udc23\ud850\udc24\ud850\udc25\ud850\udc26\ud850\udc27\ud850\udc28\ud850\udc29\ud850\udc2a\ud850\udc2b\ud850\udc2c\ud850\udc2d\ud850\udc2e\ud850\udc2f\ud850\udc30\ud850\udc31\ud850\udc32\ud850\udc33\ud850\udc34\ud850\udc35\ud850\udc36\ud850\udc37\ud850\udc38\ud850\udc39\ud850\udc3a\ud850\udc3b\ud850\udc3c\ud850\udc3d\ud850\udc3e\ud850\udc3f\n34000 \ud890\udc00\ud890\udc01\ud890\udc02\ud890\udc03\ud890\udc04\ud890\udc05\ud890\udc06\ud890\udc07\ud890\udc08\ud890\udc09\ud890\udc0a\ud890\udc0b\ud890\udc0c\ud890\udc0d\ud890\udc0e\ud890\udc0f\ud890\udc10\ud890\udc11\ud890\udc12\ud890\udc13\ud890\udc14\ud890\udc15\ud890\udc16\ud890\udc17\ud890\udc18\ud890\udc19\ud890\udc1a\ud890\udc1b\ud890\udc1c\ud890\udc1d\ud890\udc1e\ud890\udc1f\ud890\udc20\ud890\udc21\ud890\udc22\ud890\udc23\ud890\udc24\ud890\udc25\ud890\udc26\ud890\udc27\ud890\udc28\ud890\udc29\ud890\udc2a\ud890\udc2b\ud890\udc2c\ud890\udc2d\ud890\udc2e\ud890\udc2f\ud890\udc30\ud890\udc31\ud890\udc32\ud890\udc33\ud890\udc34\ud890\udc35\ud890\udc36\ud890\udc37\ud890\udc38\ud890\udc39\ud890\udc3a\ud890\udc3b\ud890\udc3c\ud890\udc3d\ud890\udc3e\ud890\udc3f\n$ utf-8 | grep  4000\n 4000 \u4000\u4001\u4002\u4003\u4004\u4005\u4006\u4007\u4008\u4009\u400a\u400b\u400c\u400d\u400e\u400f\u4010\u4011\u4012\u4013\u4014\u4015\u4016\u4017\u4018\u4019\u401a\u401b\u401c\u401d\u401e\u401f\u4020\u4021\u4022\u4023\u4024\u4025\u4026\u4027\u4028\u4029\u402a\u402b\u402c\u402d\u402e\u402f\u4030\u4031\u4032\u4033\u4034\u4035\u4036\u4037\u4038\u4039\u403a\u403b\u403c\u403d\u403e\u403f\n14000 \ud810\udc00\ud810\udc01\ud810\udc02\ud810\udc03\ud810\udc04\ud810\udc05\ud810\udc06\ud810\udc07\ud810\udc08\ud810\udc09\ud810\udc0a\ud810\udc0b\ud810\udc0c\ud810\udc0d\ud810\udc0e\ud810\udc0f\ud810\udc10\ud810\udc11\ud810\udc12\ud810\udc13\ud810\udc14\ud810\udc15\ud810\udc16\ud810\udc17\ud810\udc18\ud810\udc19\ud810\udc1a\ud810\udc1b\ud810\udc1c\ud810\udc1d\ud810\udc1e\ud810\udc1f\ud810\udc20\ud810\udc21\ud810\udc22\ud810\udc23\ud810\udc24\ud810\udc25\ud810\udc26\ud810\udc27\ud810\udc28\ud810\udc29\ud810\udc2a\ud810\udc2b\ud810\udc2c\ud810\udc2d\ud810\udc2e\ud810\udc2f\ud810\udc30\ud810\udc31\ud810\udc32\ud810\udc33\ud810\udc34\ud810\udc35\ud810\udc36\ud810\udc37\ud810\udc38\ud810\udc39\ud810\udc3a\ud810\udc3b\ud810\udc3c\ud810\udc3d\ud810\udc3e\ud810\udc3f\n24000 \ud850\udc00\ud850\udc01\ud850\udc02\ud850\udc03\ud850\udc04\ud850\udc05\ud850\udc06\ud850\udc07\ud850\udc08\ud850\udc09\ud850\udc0a\ud850\udc0b\ud850\udc0c\ud850\udc0d\ud850\udc0e\ud850\udc0f\ud850\udc10\ud850\udc11\ud850\udc12\ud850\udc13\ud850\udc14\ud850\udc15\ud850\udc16\ud850\udc17\ud850\udc18\ud850\udc19\ud850\udc1a\ud850\udc1b\ud850\udc1c\ud850\udc1d\ud850\udc1e\ud850\udc1f\ud850\udc20\ud850\udc21\ud850\udc22\ud850\udc23\ud850\udc24\ud850\udc25\ud850\udc26\ud850\udc27\ud850\udc28\ud850\udc29\ud850\udc2a\ud850\udc2b\ud850\udc2c\ud850\udc2d\ud850\udc2e\ud850\udc2f\ud850\udc30\ud850\udc31\ud850\udc32\ud850\udc33\ud850\udc34\ud850\udc35\ud850\udc36\ud850\udc37\ud850\udc38\ud850\udc39\ud850\udc3a\ud850\udc3b\ud850\udc3c\ud850\udc3d\ud850\udc3e\ud850\udc3f\n34000 \ud890\udc00\ud890\udc01\ud890\udc02\ud890\udc03\ud890\udc04\ud890\udc05\ud890\udc06\ud890\udc07\ud890\udc08\ud890\udc09\ud890\udc0a\ud890\udc0b\ud890\udc0c\ud890\udc0d\ud890\udc0e\ud890\udc0f\ud890\udc10\ud890\udc11\ud890\udc12\ud890\udc13\ud890\udc14\ud890\udc15\ud890\udc16\ud890\udc17\ud890\udc18\ud890\udc19\ud890\udc1a\ud890\udc1b\ud890\udc1c\ud890\udc1d\ud890\udc1e\ud890\udc1f\ud890\udc20\ud890\udc21\ud890\udc22\ud890\udc23\ud890\udc24\ud890\udc25\ud890\udc26\ud890\udc27\ud890\udc28\ud890\udc29\ud890\udc2a\ud890\udc2b\ud890\udc2c\ud890\udc2d\ud890\udc2e\ud890\udc2f\ud890\udc30\ud890\udc31\ud890\udc32\ud890\udc33\ud890\udc34\ud890\udc35\ud890\udc36\ud890\udc37\ud890\udc38\ud890\udc39\ud890\udc3a\ud890\udc3b\ud890\udc3c\ud890\udc3d\ud890\udc3e\ud890\udc3f\n$ utf-8 | grep \" 4000\"\n 4000 \u4000\u4001\u4002\u4003\u4004\u4005\u4006\u4007\u4008\u4009\u400a\u400b\u400c\u400d\u400e\u400f\u4010\u4011\u4012\u4013\u4014\u4015\u4016\u4017\u4018\u4019\u401a\u401b\u401c\u401d\u401e\u401f\u4020\u4021\u4022\u4023\u4024\u4025\u4026\u4027\u4028\u4029\u402a\u402b\u402c\u402d\u402e\u402f\u4030\u4031\u4032\u4033\u4034\u4035\u4036\u4037\u4038\u4039\u403a\u403b\u403c\u403d\u403e\u403f\n$ utf-8 | grep \"1f3\"\n1f300 \ud83c\udf00\ud83c\udf01\ud83c\udf02\ud83c\udf03\ud83c\udf04\ud83c\udf05\ud83c\udf06\ud83c\udf07\ud83c\udf08\ud83c\udf09\ud83c\udf0a\ud83c\udf0b\ud83c\udf0c\ud83c\udf0d\ud83c\udf0e\ud83c\udf0f\ud83c\udf10\ud83c\udf11\ud83c\udf12\ud83c\udf13\ud83c\udf14\ud83c\udf15\ud83c\udf16\ud83c\udf17\ud83c\udf18\ud83c\udf19\ud83c\udf1a\ud83c\udf1b\ud83c\udf1c\ud83c\udf1d\ud83c\udf1e\ud83c\udf1f\ud83c\udf20\ud83c\udf21\ud83c\udf22\ud83c\udf23\ud83c\udf24\ud83c\udf25\ud83c\udf26\ud83c\udf27\ud83c\udf28\ud83c\udf29\ud83c\udf2a\ud83c\udf2b\ud83c\udf2c\ud83c\udf2d\ud83c\udf2e\ud83c\udf2f\ud83c\udf30\ud83c\udf31\ud83c\udf32\ud83c\udf33\ud83c\udf34\ud83c\udf35\ud83c\udf36\ud83c\udf37\ud83c\udf38\ud83c\udf39\ud83c\udf3a\ud83c\udf3b\ud83c\udf3c\ud83c\udf3d\ud83c\udf3e\ud83c\udf3f\n1f340 \ud83c\udf40\ud83c\udf41\ud83c\udf42\ud83c\udf43\ud83c\udf44\ud83c\udf45\ud83c\udf46\ud83c\udf47\ud83c\udf48\ud83c\udf49\ud83c\udf4a\ud83c\udf4b\ud83c\udf4c\ud83c\udf4d\ud83c\udf4e\ud83c\udf4f\ud83c\udf50\ud83c\udf51\ud83c\udf52\ud83c\udf53\ud83c\udf54\ud83c\udf55\ud83c\udf56\ud83c\udf57\ud83c\udf58\ud83c\udf59\ud83c\udf5a\ud83c\udf5b\ud83c\udf5c\ud83c\udf5d\ud83c\udf5e\ud83c\udf5f\ud83c\udf60\ud83c\udf61\ud83c\udf62\ud83c\udf63\ud83c\udf64\ud83c\udf65\ud83c\udf66\ud83c\udf67\ud83c\udf68\ud83c\udf69\ud83c\udf6a\ud83c\udf6b\ud83c\udf6c\ud83c\udf6d\ud83c\udf6e\ud83c\udf6f\ud83c\udf70\ud83c\udf71\ud83c\udf72\ud83c\udf73\ud83c\udf74\ud83c\udf75\ud83c\udf76\ud83c\udf77\ud83c\udf78\ud83c\udf79\ud83c\udf7a\ud83c\udf7b\ud83c\udf7c\ud83c\udf7d\ud83c\udf7e\ud83c\udf7f\n1f380 \ud83c\udf80\ud83c\udf81\ud83c\udf82\ud83c\udf83\ud83c\udf84\ud83c\udf85\ud83c\udf86\ud83c\udf87\ud83c\udf88\ud83c\udf89\ud83c\udf8a\ud83c\udf8b\ud83c\udf8c\ud83c\udf8d\ud83c\udf8e\ud83c\udf8f\ud83c\udf90\ud83c\udf91\ud83c\udf92\ud83c\udf93\ud83c\udf94\ud83c\udf95\ud83c\udf96\ud83c\udf97\ud83c\udf98\ud83c\udf99\ud83c\udf9a\ud83c\udf9b\ud83c\udf9c\ud83c\udf9d\ud83c\udf9e\ud83c\udf9f\ud83c\udfa0\ud83c\udfa1\ud83c\udfa2\ud83c\udfa3\ud83c\udfa4\ud83c\udfa5\ud83c\udfa6\ud83c\udfa7\ud83c\udfa8\ud83c\udfa9\ud83c\udfaa\ud83c\udfab\ud83c\udfac\ud83c\udfad\ud83c\udfae\ud83c\udfaf\ud83c\udfb0\ud83c\udfb1\ud83c\udfb2\ud83c\udfb3\ud83c\udfb4\ud83c\udfb5\ud83c\udfb6\ud83c\udfb7\ud83c\udfb8\ud83c\udfb9\ud83c\udfba\ud83c\udfbb\ud83c\udfbc\ud83c\udfbd\ud83c\udfbe\ud83c\udfbf\n1f3c0 \ud83c\udfc0\ud83c\udfc1\ud83c\udfc2\ud83c\udfc3\ud83c\udfc4\ud83c\udfc5\ud83c\udfc6\ud83c\udfc7\ud83c\udfc8\ud83c\udfc9\ud83c\udfca\ud83c\udfcb\ud83c\udfcc\ud83c\udfcd\ud83c\udfce\ud83c\udfcf\ud83c\udfd0\ud83c\udfd1\ud83c\udfd2\ud83c\udfd3\ud83c\udfd4\ud83c\udfd5\ud83c\udfd6\ud83c\udfd7\ud83c\udfd8\ud83c\udfd9\ud83c\udfda\ud83c\udfdb\ud83c\udfdc\ud83c\udfdd\ud83c\udfde\ud83c\udfdf\ud83c\udfe0\ud83c\udfe1\ud83c\udfe2\ud83c\udfe3\ud83c\udfe4\ud83c\udfe5\ud83c\udfe6\ud83c\udfe7\ud83c\udfe8\ud83c\udfe9\ud83c\udfea\ud83c\udfeb\ud83c\udfec\ud83c\udfed\ud83c\udfee\ud83c\udfef\ud83c\udff0\ud83c\udff1\ud83c\udff2\ud83c\udff3\ud83c\udff4\ud83c\udff5\ud83c\udff6\ud83c\udff7\ud83c\udff8\ud83c\udff9\ud83c\udffa\ud83c\udffb\ud83c\udffc\ud83c\udffd\ud83c\udffe\ud83c\udfff\n$ utf-8 | grep \"1f4\"\n 1f40 \u1f40\u1f41\u1f42\u1f43\u1f44\u1f45\u1f46\u1f47\u1f48\u1f49\u1f4a\u1f4b\u1f4c\u1f4d\u1f4e\u1f4f\u1f50\u1f51\u1f52\u1f53\u1f54\u1f55\u1f56\u1f57\u1f58\u1f59\u1f5a\u1f5b\u1f5c\u1f5d\u1f5e\u1f5f\u1f60\u1f61\u1f62\u1f63\u1f64\u1f65\u1f66\u1f67\u1f68\u1f69\u1f6a\u1f6b\u1f6c\u1f6d\u1f6e\u1f6f\u1f70\u1f71\u1f72\u1f73\u1f74\u1f75\u1f76\u1f77\u1f78\u1f79\u1f7a\u1f7b\u1f7c\u1f7d\u1f7e\u1f7f\n11f40 \ud807\udf40\ud807\udf41\ud807\udf42\ud807\udf43\ud807\udf44\ud807\udf45\ud807\udf46\ud807\udf47\ud807\udf48\ud807\udf49\ud807\udf4a\ud807\udf4b\ud807\udf4c\ud807\udf4d\ud807\udf4e\ud807\udf4f\ud807\udf50\ud807\udf51\ud807\udf52\ud807\udf53\ud807\udf54\ud807\udf55\ud807\udf56\ud807\udf57\ud807\udf58\ud807\udf59\ud807\udf5a\ud807\udf5b\ud807\udf5c\ud807\udf5d\ud807\udf5e\ud807\udf5f\ud807\udf60\ud807\udf61\ud807\udf62\ud807\udf63\ud807\udf64\ud807\udf65\ud807\udf66\ud807\udf67\ud807\udf68\ud807\udf69\ud807\udf6a\ud807\udf6b\ud807\udf6c\ud807\udf6d\ud807\udf6e\ud807\udf6f\ud807\udf70\ud807\udf71\ud807\udf72\ud807\udf73\ud807\udf74\ud807\udf75\ud807\udf76\ud807\udf77\ud807\udf78\ud807\udf79\ud807\udf7a\ud807\udf7b\ud807\udf7c\ud807\udf7d\ud807\udf7e\ud807\udf7f\n1f400 \ud83d\udc00\ud83d\udc01\ud83d\udc02\ud83d\udc03\ud83d\udc04\ud83d\udc05\ud83d\udc06\ud83d\udc07\ud83d\udc08\ud83d\udc09\ud83d\udc0a\ud83d\udc0b\ud83d\udc0c\ud83d\udc0d\ud83d\udc0e\ud83d\udc0f\ud83d\udc10\ud83d\udc11\ud83d\udc12\ud83d\udc13\ud83d\udc14\ud83d\udc15\ud83d\udc16\ud83d\udc17\ud83d\udc18\ud83d\udc19\ud83d\udc1a\ud83d\udc1b\ud83d\udc1c\ud83d\udc1d\ud83d\udc1e\ud83d\udc1f\ud83d\udc20\ud83d\udc21\ud83d\udc22\ud83d\udc23\ud83d\udc24\ud83d\udc25\ud83d\udc26\ud83d\udc27\ud83d\udc28\ud83d\udc29\ud83d\udc2a\ud83d\udc2b\ud83d\udc2c\ud83d\udc2d\ud83d\udc2e\ud83d\udc2f\ud83d\udc30\ud83d\udc31\ud83d\udc32\ud83d\udc33\ud83d\udc34\ud83d\udc35\ud83d\udc36\ud83d\udc37\ud83d\udc38\ud83d\udc39\ud83d\udc3a\ud83d\udc3b\ud83d\udc3c\ud83d\udc3d\ud83d\udc3e\ud83d\udc3f\n1f440 \ud83d\udc40\ud83d\udc41\ud83d\udc42\ud83d\udc43\ud83d\udc44\ud83d\udc45\ud83d\udc46\ud83d\udc47\ud83d\udc48\ud83d\udc49\ud83d\udc4a\ud83d\udc4b\ud83d\udc4c\ud83d\udc4d\ud83d\udc4e\ud83d\udc4f\ud83d\udc50\ud83d\udc51\ud83d\udc52\ud83d\udc53\ud83d\udc54\ud83d\udc55\ud83d\udc56\ud83d\udc57\ud83d\udc58\ud83d\udc59\ud83d\udc5a\ud83d\udc5b\ud83d\udc5c\ud83d\udc5d\ud83d\udc5e\ud83d\udc5f\ud83d\udc60\ud83d\udc61\ud83d\udc62\ud83d\udc63\ud83d\udc64\ud83d\udc65\ud83d\udc66\ud83d\udc67\ud83d\udc68\ud83d\udc69\ud83d\udc6a\ud83d\udc6b\ud83d\udc6c\ud83d\udc6d\ud83d\udc6e\ud83d\udc6f\ud83d\udc70\ud83d\udc71\ud83d\udc72\ud83d\udc73\ud83d\udc74\ud83d\udc75\ud83d\udc76\ud83d\udc77\ud83d\udc78\ud83d\udc79\ud83d\udc7a\ud83d\udc7b\ud83d\udc7c\ud83d\udc7d\ud83d\udc7e\ud83d\udc7f\n1f480 \ud83d\udc80\ud83d\udc81\ud83d\udc82\ud83d\udc83\ud83d\udc84\ud83d\udc85\ud83d\udc86\ud83d\udc87\ud83d\udc88\ud83d\udc89\ud83d\udc8a\ud83d\udc8b\ud83d\udc8c\ud83d\udc8d\ud83d\udc8e\ud83d\udc8f\ud83d\udc90\ud83d\udc91\ud83d\udc92\ud83d\udc93\ud83d\udc94\ud83d\udc95\ud83d\udc96\ud83d\udc97\ud83d\udc98\ud83d\udc99\ud83d\udc9a\ud83d\udc9b\ud83d\udc9c\ud83d\udc9d\ud83d\udc9e\ud83d\udc9f\ud83d\udca0\ud83d\udca1\ud83d\udca2\ud83d\udca3\ud83d\udca4\ud83d\udca5\ud83d\udca6\ud83d\udca7\ud83d\udca8\ud83d\udca9\ud83d\udcaa\ud83d\udcab\ud83d\udcac\ud83d\udcad\ud83d\udcae\ud83d\udcaf\ud83d\udcb0\ud83d\udcb1\ud83d\udcb2\ud83d\udcb3\ud83d\udcb4\ud83d\udcb5\ud83d\udcb6\ud83d\udcb7\ud83d\udcb8\ud83d\udcb9\ud83d\udcba\ud83d\udcbb\ud83d\udcbc\ud83d\udcbd\ud83d\udcbe\ud83d\udcbf\n1f4c0 \ud83d\udcc0\ud83d\udcc1\ud83d\udcc2\ud83d\udcc3\ud83d\udcc4\ud83d\udcc5\ud83d\udcc6\ud83d\udcc7\ud83d\udcc8\ud83d\udcc9\ud83d\udcca\ud83d\udccb\ud83d\udccc\ud83d\udccd\ud83d\udcce\ud83d\udccf\ud83d\udcd0\ud83d\udcd1\ud83d\udcd2\ud83d\udcd3\ud83d\udcd4\ud83d\udcd5\ud83d\udcd6\ud83d\udcd7\ud83d\udcd8\ud83d\udcd9\ud83d\udcda\ud83d\udcdb\ud83d\udcdc\ud83d\udcdd\ud83d\udcde\ud83d\udcdf\ud83d\udce0\ud83d\udce1\ud83d\udce2\ud83d\udce3\ud83d\udce4\ud83d\udce5\ud83d\udce6\ud83d\udce7\ud83d\udce8\ud83d\udce9\ud83d\udcea\ud83d\udceb\ud83d\udcec\ud83d\udced\ud83d\udcee\ud83d\udcef\ud83d\udcf0\ud83d\udcf1\ud83d\udcf2\ud83d\udcf3\ud83d\udcf4\ud83d\udcf5\ud83d\udcf6\ud83d\udcf7\ud83d\udcf8\ud83d\udcf9\ud83d\udcfa\ud83d\udcfb\ud83d\udcfc\ud83d\udcfd\ud83d\udcfe\ud83d\udcff\n21f40 \ud847\udf40\ud847\udf41\ud847\udf42\ud847\udf43\ud847\udf44\ud847\udf45\ud847\udf46\ud847\udf47\ud847\udf48\ud847\udf49\ud847\udf4a\ud847\udf4b\ud847\udf4c\ud847\udf4d\ud847\udf4e\ud847\udf4f\ud847\udf50\ud847\udf51\ud847\udf52\ud847\udf53\ud847\udf54\ud847\udf55\ud847\udf56\ud847\udf57\ud847\udf58\ud847\udf59\ud847\udf5a\ud847\udf5b\ud847\udf5c\ud847\udf5d\ud847\udf5e\ud847\udf5f\ud847\udf60\ud847\udf61\ud847\udf62\ud847\udf63\ud847\udf64\ud847\udf65\ud847\udf66\ud847\udf67\ud847\udf68\ud847\udf69\ud847\udf6a\ud847\udf6b\ud847\udf6c\ud847\udf6d\ud847\udf6e\ud847\udf6f\ud847\udf70\ud847\udf71\ud847\udf72\ud847\udf73\ud847\udf74\ud847\udf75\ud847\udf76\ud847\udf77\ud847\udf78\ud847\udf79\ud847\udf7a\ud847\udf7b\ud847\udf7c\ud847\udf7d\ud847\udf7e\ud847\udf7f\n31f40 \ud887\udf40\ud887\udf41\ud887\udf42\ud887\udf43\ud887\udf44\ud887\udf45\ud887\udf46\ud887\udf47\ud887\udf48\ud887\udf49\ud887\udf4a\ud887\udf4b\ud887\udf4c\ud887\udf4d\ud887\udf4e\ud887\udf4f\ud887\udf50\ud887\udf51\ud887\udf52\ud887\udf53\ud887\udf54\ud887\udf55\ud887\udf56\ud887\udf57\ud887\udf58\ud887\udf59\ud887\udf5a\ud887\udf5b\ud887\udf5c\ud887\udf5d\ud887\udf5e\ud887\udf5f\ud887\udf60\ud887\udf61\ud887\udf62\ud887\udf63\ud887\udf64\ud887\udf65\ud887\udf66\ud887\udf67\ud887\udf68\ud887\udf69\ud887\udf6a\ud887\udf6b\ud887\udf6c\ud887\udf6d\ud887\udf6e\ud887\udf6f\ud887\udf70\ud887\udf71\ud887\udf72\ud887\udf73\ud887\udf74\ud887\udf75\ud887\udf76\ud887\udf77\ud887\udf78\ud887\udf79\ud887\udf7a\ud887\udf7b\ud887\udf7c\ud887\udf7d\ud887\udf7e\ud887\udf7f\n\n$ .\/utf-8 --startcp 0x2800 --endcp0x2900\nstartcp=2800(0x2800)\nendcp=2900(0x2900)\n      ----------------111111111111111122222222222222223333333333333333\n      0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef\n      ================================================================\n\n 2800 \u2800\u2801\u2802\u2803\u2804\u2805\u2806\u2807\u2808\u2809\u280a\u280b\u280c\u280d\u280e\u280f\u2810\u2811\u2812\u2813\u2814\u2815\u2816\u2817\u2818\u2819\u281a\u281b\u281c\u281d\u281e\u281f\u2820\u2821\u2822\u2823\u2824\u2825\u2826\u2827\u2828\u2829\u282a\u282b\u282c\u282d\u282e\u282f\u2830\u2831\u2832\u2833\u2834\u2835\u2836\u2837\u2838\u2839\u283a\u283b\u283c\u283d\u283e\u283f\n 2840 \u2840\u2841\u2842\u2843\u2844\u2845\u2846\u2847\u2848\u2849\u284a\u284b\u284c\u284d\u284e\u284f\u2850\u2851\u2852\u2853\u2854\u2855\u2856\u2857\u2858\u2859\u285a\u285b\u285c\u285d\u285e\u285f\u2860\u2861\u2862\u2863\u2864\u2865\u2866\u2867\u2868\u2869\u286a\u286b\u286c\u286d\u286e\u286f\u2870\u2871\u2872\u2873\u2874\u2875\u2876\u2877\u2878\u2879\u287a\u287b\u287c\u287d\u287e\u287f\n 2880 \u2880\u2881\u2882\u2883\u2884\u2885\u2886\u2887\u2888\u2889\u288a\u288b\u288c\u288d\u288e\u288f\u2890\u2891\u2892\u2893\u2894\u2895\u2896\u2897\u2898\u2899\u289a\u289b\u289c\u289d\u289e\u289f\u28a0\u28a1\u28a2\u28a3\u28a4\u28a5\u28a6\u28a7\u28a8\u28a9\u28aa\u28ab\u28ac\u28ad\u28ae\u28af\u28b0\u28b1\u28b2\u28b3\u28b4\u28b5\u28b6\u28b7\u28b8\u28b9\u28ba\u28bb\u28bc\u28bd\u28be\u28bf\n 28c0 \u28c0\u28c1\u28c2\u28c3\u28c4\u28c5\u28c6\u28c7\u28c8\u28c9\u28ca\u28cb\u28cc\u28cd\u28ce\u28cf\u28d0\u28d1\u28d2\u28d3\u28d4\u28d5\u28d6\u28d7\u28d8\u28d9\u28da\u28db\u28dc\u28dd\u28de\u28df\u28e0\u28e1\u28e2\u28e3\u28e4\u28e5\u28e6\u28e7\u28e8\u28e9\u28ea\u28eb\u28ec\u28ed\u28ee\u28ef\u28f0\u28f1\u28f2\u28f3\u28f4\u28f5\u28f6\u28f7\u28f8\u28f9\u28fa\u28fb\u28fc\u28fd\u28fe\u28ff\n$ .\/utf-8 --startcp 0xac00 --endcp 0xd7a3\nstartcp=ac00(0xac00)\nendcp=d7a3(0xd7a3)\n      ----------------111111111111111122222222222222223333333333333333\n      0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef\n      ================================================================\n\n ac00 \uac00\uac01\uac02\uac03\uac04\uac05\uac06\uac07\uac08\uac09\uac0a\uac0b\uac0c\uac0d\uac0e\uac0f\uac10\uac11\uac12\uac13\uac14\uac15\uac16\uac17\uac18\uac19\uac1a\uac1b\uac1c\uac1d\uac1e\uac1f\uac20\uac21\uac22\uac23\uac24\uac25\uac26\uac27\uac28\uac29\uac2a\uac2b\uac2c\uac2d\uac2e\uac2f\uac30\uac31\uac32\uac33\uac34\uac35\uac36\uac37\uac38\uac39\uac3a\uac3b\uac3c\uac3d\uac3e\uac3f\n ac40 \uac40\uac41\uac42\uac43\uac44\uac45\uac46\uac47\uac48\uac49\uac4a\uac4b\uac4c\uac4d\uac4e\uac4f\uac50\uac51\uac52\uac53\uac54\uac55\uac56\uac57\uac58\uac59\uac5a\uac5b\uac5c\uac5d\uac5e\uac5f\uac60\uac61\uac62\uac63\uac64\uac65\uac66\uac67\uac68\uac69\uac6a\uac6b\uac6c\uac6d\uac6e\uac6f\uac70\uac71\uac72\uac73\uac74\uac75\uac76\uac77\uac78\uac79\uac7a\uac7b\uac7c\uac7d\uac7e\uac7f\n ac80 \uac80\uac81\uac82\uac83\uac84\uac85\uac86\uac87\uac88\uac89\uac8a\uac8b\uac8c\uac8d\uac8e\uac8f\uac90\uac91\uac92\uac93\uac94\uac95\uac96\uac97\uac98\uac99\uac9a\uac9b\uac9c\uac9d\uac9e\uac9f\uaca0\uaca1\uaca2\uaca3\uaca4\uaca5\uaca6\uaca7\uaca8\uaca9\uacaa\uacab\uacac\uacad\uacae\uacaf\uacb0\uacb1\uacb2\uacb3\uacb4\uacb5\uacb6\uacb7\uacb8\uacb9\uacba\uacbb\uacbc\uacbd\uacbe\uacbf\n acc0 \uacc0\uacc1\uacc2\uacc3\uacc4\uacc5\uacc6\uacc7\uacc8\uacc9\uacca\uaccb\uaccc\uaccd\uacce\uaccf\uacd0\uacd1\uacd2\uacd3\uacd4\uacd5\uacd6\uacd7\uacd8\uacd9\uacda\uacdb\uacdc\uacdd\uacde\uacdf\uace0\uace1\uace2\uace3\uace4\uace5\uace6\uace7\uace8\uace9\uacea\uaceb\uacec\uaced\uacee\uacef\uacf0\uacf1\uacf2\uacf3\uacf4\uacf5\uacf6\uacf7\uacf8\uacf9\uacfa\uacfb\uacfc\uacfd\uacfe\uacff\n ad00 \uad00\uad01\uad02\uad03\uad04\uad05\uad06\uad07\uad08\uad09\uad0a\uad0b\uad0c\uad0d\uad0e\uad0f\uad10\uad11\uad12\uad13\uad14\uad15\uad16\uad17\uad18\uad19\uad1a\uad1b\uad1c\uad1d\uad1e\uad1f\uad20\uad21\uad22\uad23\uad24\uad25\uad26\uad27\uad28\uad29\uad2a\uad2b\uad2c\uad2d\uad2e\uad2f\uad30\uad31\uad32\uad33\uad34\uad35\uad36\uad37\uad38\uad39\uad3a\uad3b\uad3c\uad3d\uad3e\uad3f\n ad40 \uad40\uad41\uad42\uad43\uad44\uad45\uad46\uad47\uad48\uad49\uad4a\uad4b\uad4c\uad4d\uad4e\uad4f\uad50\uad51\uad52\uad53\uad54\uad55\uad56\uad57\uad58\uad59\uad5a\uad5b\uad5c\uad5d\uad5e\uad5f\uad60\uad61\uad62\uad63\uad64\uad65\uad66\uad67\uad68\uad69\uad6a\uad6b\uad6c\uad6d\uad6e\uad6f\uad70\uad71\uad72\uad73\uad74\uad75\uad76\uad77\uad78\uad79\uad7a\uad7b\uad7c\uad7d\uad7e\uad7f\n ad80 \uad80\uad81\uad82\uad83\uad84\uad85\uad86\uad87\uad88\uad89\uad8a\uad8b\uad8c\uad8d\uad8e\uad8f\uad90\uad91\uad92\uad93\uad94\uad95\uad96\uad97\uad98\uad99\uad9a\uad9b\uad9c\uad9d\uad9e\uad9f\uada0\uada1\uada2\uada3\uada4\uada5\uada6\uada7\uada8\uada9\uadaa\uadab\uadac\uadad\uadae\uadaf\uadb0\uadb1\uadb2\uadb3\uadb4\uadb5\uadb6\uadb7\uadb8\uadb9\uadba\uadbb\uadbc\uadbd\uadbe\uadbf\n adc0 \uadc0\uadc1\uadc2\uadc3\uadc4\uadc5\uadc6\uadc7\uadc8\uadc9\uadca\uadcb\uadcc\uadcd\uadce\uadcf\uadd0\uadd1\uadd2\uadd3\uadd4\uadd5\uadd6\uadd7\uadd8\uadd9\uadda\uaddb\uaddc\uaddd\uadde\uaddf\uade0\uade1\uade2\uade3\uade4\uade5\uade6\uade7\uade8\uade9\uadea\uadeb\uadec\uaded\uadee\uadef\uadf0\uadf1\uadf2\uadf3\uadf4\uadf5\uadf6\uadf7\uadf8\uadf9\uadfa\uadfb\uadfc\uadfd\uadfe\uadff\n ae00 \uae00\uae01\uae02\uae03\uae04\uae05\uae06\uae07\uae08\uae09\uae0a\uae0b\uae0c\uae0d\uae0e\uae0f\uae10\uae11\uae12\uae13\uae14\uae15\uae16\uae17\uae18\uae19\uae1a\uae1b\uae1c\uae1d\uae1e\uae1f\uae20\uae21\uae22\uae23\uae24\uae25\uae26\uae27\uae28\uae29\uae2a\uae2b\uae2c\uae2d\uae2e\uae2f\uae30\uae31\uae32\uae33\uae34\uae35\uae36\uae37\uae38\uae39\uae3a\uae3b\uae3c\uae3d\uae3e\uae3f\n ...\n d580 \ud580\ud581\ud582\ud583\ud584\ud585\ud586\ud587\ud588\ud589\ud58a\ud58b\ud58c\ud58d\ud58e\ud58f\ud590\ud591\ud592\ud593\ud594\ud595\ud596\ud597\ud598\ud599\ud59a\ud59b\ud59c\ud59d\ud59e\ud59f\ud5a0\ud5a1\ud5a2\ud5a3\ud5a4\ud5a5\ud5a6\ud5a7\ud5a8\ud5a9\ud5aa\ud5ab\ud5ac\ud5ad\ud5ae\ud5af\ud5b0\ud5b1\ud5b2\ud5b3\ud5b4\ud5b5\ud5b6\ud5b7\ud5b8\ud5b9\ud5ba\ud5bb\ud5bc\ud5bd\ud5be\ud5bf\n d5c0 \ud5c0\ud5c1\ud5c2\ud5c3\ud5c4\ud5c5\ud5c6\ud5c7\ud5c8\ud5c9\ud5ca\ud5cb\ud5cc\ud5cd\ud5ce\ud5cf\ud5d0\ud5d1\ud5d2\ud5d3\ud5d4\ud5d5\ud5d6\ud5d7\ud5d8\ud5d9\ud5da\ud5db\ud5dc\ud5dd\ud5de\ud5df\ud5e0\ud5e1\ud5e2\ud5e3\ud5e4\ud5e5\ud5e6\ud5e7\ud5e8\ud5e9\ud5ea\ud5eb\ud5ec\ud5ed\ud5ee\ud5ef\ud5f0\ud5f1\ud5f2\ud5f3\ud5f4\ud5f5\ud5f6\ud5f7\ud5f8\ud5f9\ud5fa\ud5fb\ud5fc\ud5fd\ud5fe\ud5ff\n d600 \ud600\ud601\ud602\ud603\ud604\ud605\ud606\ud607\ud608\ud609\ud60a\ud60b\ud60c\ud60d\ud60e\ud60f\ud610\ud611\ud612\ud613\ud614\ud615\ud616\ud617\ud618\ud619\ud61a\ud61b\ud61c\ud61d\ud61e\ud61f\ud620\ud621\ud622\ud623\ud624\ud625\ud626\ud627\ud628\ud629\ud62a\ud62b\ud62c\ud62d\ud62e\ud62f\ud630\ud631\ud632\ud633\ud634\ud635\ud636\ud637\ud638\ud639\ud63a\ud63b\ud63c\ud63d\ud63e\ud63f\n d640 \ud640\ud641\ud642\ud643\ud644\ud645\ud646\ud647\ud648\ud649\ud64a\ud64b\ud64c\ud64d\ud64e\ud64f\ud650\ud651\ud652\ud653\ud654\ud655\ud656\ud657\ud658\ud659\ud65a\ud65b\ud65c\ud65d\ud65e\ud65f\ud660\ud661\ud662\ud663\ud664\ud665\ud666\ud667\ud668\ud669\ud66a\ud66b\ud66c\ud66d\ud66e\ud66f\ud670\ud671\ud672\ud673\ud674\ud675\ud676\ud677\ud678\ud679\ud67a\ud67b\ud67c\ud67d\ud67e\ud67f\n d680 \ud680\ud681\ud682\ud683\ud684\ud685\ud686\ud687\ud688\ud689\ud68a\ud68b\ud68c\ud68d\ud68e\ud68f\ud690\ud691\ud692\ud693\ud694\ud695\ud696\ud697\ud698\ud699\ud69a\ud69b\ud69c\ud69d\ud69e\ud69f\ud6a0\ud6a1\ud6a2\ud6a3\ud6a4\ud6a5\ud6a6\ud6a7\ud6a8\ud6a9\ud6aa\ud6ab\ud6ac\ud6ad\ud6ae\ud6af\ud6b0\ud6b1\ud6b2\ud6b3\ud6b4\ud6b5\ud6b6\ud6b7\ud6b8\ud6b9\ud6ba\ud6bb\ud6bc\ud6bd\ud6be\ud6bf\n d6c0 \ud6c0\ud6c1\ud6c2\ud6c3\ud6c4\ud6c5\ud6c6\ud6c7\ud6c8\ud6c9\ud6ca\ud6cb\ud6cc\ud6cd\ud6ce\ud6cf\ud6d0\ud6d1\ud6d2\ud6d3\ud6d4\ud6d5\ud6d6\ud6d7\ud6d8\ud6d9\ud6da\ud6db\ud6dc\ud6dd\ud6de\ud6df\ud6e0\ud6e1\ud6e2\ud6e3\ud6e4\ud6e5\ud6e6\ud6e7\ud6e8\ud6e9\ud6ea\ud6eb\ud6ec\ud6ed\ud6ee\ud6ef\ud6f0\ud6f1\ud6f2\ud6f3\ud6f4\ud6f5\ud6f6\ud6f7\ud6f8\ud6f9\ud6fa\ud6fb\ud6fc\ud6fd\ud6fe\ud6ff\n d700 \ud700\ud701\ud702\ud703\ud704\ud705\ud706\ud707\ud708\ud709\ud70a\ud70b\ud70c\ud70d\ud70e\ud70f\ud710\ud711\ud712\ud713\ud714\ud715\ud716\ud717\ud718\ud719\ud71a\ud71b\ud71c\ud71d\ud71e\ud71f\ud720\ud721\ud722\ud723\ud724\ud725\ud726\ud727\ud728\ud729\ud72a\ud72b\ud72c\ud72d\ud72e\ud72f\ud730\ud731\ud732\ud733\ud734\ud735\ud736\ud737\ud738\ud739\ud73a\ud73b\ud73c\ud73d\ud73e\ud73f\n d740 \ud740\ud741\ud742\ud743\ud744\ud745\ud746\ud747\ud748\ud749\ud74a\ud74b\ud74c\ud74d\ud74e\ud74f\ud750\ud751\ud752\ud753\ud754\ud755\ud756\ud757\ud758\ud759\ud75a\ud75b\ud75c\ud75d\ud75e\ud75f\ud760\ud761\ud762\ud763\ud764\ud765\ud766\ud767\ud768\ud769\ud76a\ud76b\ud76c\ud76d\ud76e\ud76f\ud770\ud771\ud772\ud773\ud774\ud775\ud776\ud777\ud778\ud779\ud77a\ud77b\ud77c\ud77d\ud77e\ud77f\n d780 \ud780\ud781\ud782\ud783\ud784\ud785\ud786\ud787\ud788\ud789\ud78a\ud78b\ud78c\ud78d\ud78e\ud78f\ud790\ud791\ud792\ud793\ud794\ud795\ud796\ud797\ud798\ud799\ud79a\ud79b\ud79c\ud79d\ud79e\ud79f\ud7a0\ud7a1\ud7a2\n$ .\/utf-8 --startcp 0x1100 --endcp 0x11ff\nstartcp=1100(0x1100)\nendcp=11ff(0x11ff)\n      ----------------111111111111111122222222222222223333333333333333\n      0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef\n      ================================================================\n\n 1100 \u1100\u1101\u1102\u1103\u1104\u1105\u1106\u1107\u1108\u1109\u110a\u110b\u110c\u110d\u110e\u110f\u1110\u1111\u1112\u1113\u1114\u1115\u1116\u1117\u1118\u1119\u111a\u111b\u111c\u111d\u111e\u111f\u1120\u1121\u1122\u1123\u1124\u1125\u1126\u1127\u1128\u1129\u112a\u112b\u112c\u112d\u112e\u112f\u1130\u1131\u1132\u1133\u1134\u1135\u1136\u1137\u1138\u1139\u113a\u113b\u113c\u113d\u113e\u113f\n 1140 \u1140\u1141\u1142\u1143\u1144\u1145\u1146\u1147\u1148\u1149\u114a\u114b\u114c\u114d\u114e\u114f\u1150\u1151\u1152\u1153\u1154\u1155\u1156\u1157\u1158\u1159\u115a\u115b\u115c\u115d\u115e\u115f\u1160\u1161\u1162\u1163\u1164\u1165\u1166\u1167\u1168\u1169\n 1180 \u1180\u1181\u1182\u1183\u1184\u1185\u1186\u1187\u1188\u1189\n 11c0 \u11c0\u11c1\u11c2\u11c3\u11c4\u11c5\u11c6\u11c7\u11c8\u11c9\n$ .\/utf-8 --startcp 0x3130 --endcp 0x318f\nstartcp=3130(0x3130)\nendcp=318f(0x318f)\n      ----------------111111111111111122222222222222223333333333333333\n      0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef\n      ================================================================\n\u3130\u3131\u3132\u3133\u3134\u3135\u3136\u3137\u3138\u3139\u313a\u313b\u313c\u313d\u313e\u313f\n 3140 \u3140\u3141\u3142\u3143\u3144\u3145\u3146\u3147\u3148\u3149\u314a\u314b\u314c\u314d\u314e\u314f\u3150\u3151\u3152\u3153\u3154\u3155\u3156\u3157\u3158\u3159\u315a\u315b\u315c\u315d\u315e\u315f\u3160\u3161\u3162\u3163\u3164\u3165\u3166\u3167\u3168\u3169\u316a\u316b\u316c\u316d\u316e\u316f\u3170\u3171\u3172\u3173\u3174\u3175\u3176\u3177\u3178\u3179\u317a\u317b\u317c\u317d\u317e\u317f\n 3180 \u3180\u3181\u3182\u3183\u3184\u3185\u3186\u3187\u3188\u3189\u318a\u318b\u318c\u318d\u318e\n$ .\/utf-8 --startcp 0xa960 --endcp 0xa97f\nstartcp=a960(0xa960)\nendcp=a97f(0xa97f)\n      ----------------111111111111111122222222222222223333333333333333\n      0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef\n      ================================================================\n\ua960\ua961\ua962\ua963\ua964\ua965\ua966\ua967\ua968\ua969\ua96a\ua96b\ua96c\ua96d\ua96e\ua96f\ua970\ua971\ua972\ua973\ua974\ua975\ua976\ua977\ua978\ua979\ua97a\ua97b\ua97c\ua97d\ua97e\n$ .\/utf-8 --startcp 0xd7b0 --endcp 0xd7ff\nstartcp=d7b0(0xd7b0)\nendcp=d7ff(0xd7ff)\n      ----------------111111111111111122222222222222223333333333333333\n      0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef\n      ================================================================\n\ud7b0\ud7b1\ud7b2\ud7b3\ud7b4\ud7b5\ud7b6\ud7b7\ud7b8\ud7b9\ud7ba\ud7bb\ud7bc\ud7bd\ud7be\ud7bf\n d7c0 \ud7c0\ud7c1\ud7c2\ud7c3\ud7c4\ud7c5\ud7c6\ud7c7\ud7c8\ud7c9\ud7ca\ud7cb\ud7cc\ud7cd\ud7ce\ud7cf\ud7d0\ud7d1\ud7d2\ud7d3\ud7d4\ud7d5\ud7d6\ud7d7\ud7d8\ud7d9\ud7da\ud7db\ud7dc\ud7dd\ud7de\ud7df\ud7e0\ud7e1\ud7e2\ud7e3\ud7e4\ud7e5\ud7e6\ud7e7\ud7e8\ud7e9\ud7ea\ud7eb\ud7ec\ud7ed\ud7ee\ud7ef\ud7f0\ud7f1\ud7f2\ud7f3\ud7f4\ud7f5\ud7f6\ud7f7\ud7f8\ud7f9\ud7fa\ud7fb\ud7fc\ud7fd\ud7fe\n$ newressu\n00000 10955298622891139823978767469624270540320096250741050939155614833\n00001 15916015913277331722288937064771768189593252684835170356246721839\n00002 04039886350269819407135540091804515858430144820156936494057205603\n00003 18471675307909851264083215017712660955498036699392294272957557298\n00004 06629485130407066753882336886060902236769148397379408587433572338\n00005 16968002406020534187490573765931119767553380391702394192871126932\n00006 47486009968836713625873692500144966286246131846408332996524644757\n00007 69338314951327162482945049158337976439471586020240534838578299151\n00008 03912437379993151193634064497583817477809648893543558696267418176\n00009 78142005792926824171979859871962451083815458844846170277633350868\n$ newressu --ressu2\n00000 37285017510609779869514940575475960020361480252238348227134059461\n00001 12355232258882613760414797306554386597921126243112752334776680463\n00002 02212118805502737321492467469657589057174849292270087270763283100\n00003 29849511622306813093573265760907401757348104541563727310760589113\n00004 15732018999953753080362222484264754467047657752953736770071877466\n00005 51131335497163185790740553290169721590428044535088887662173176262\n00006 11465438565611283088861668876938277182421391053985899811340713471\n00007 72574285385631733457443358245283218440509028894018469417039942907\n00008 75155718271160332421602701525554116085357479264288152761928514391\n00009 69687786046783408891868012618107234151009548573863827848828920546\n$ ressu2\n00000 6e 2d 6e cf 89 6b c4 c4 c7 46 b8 55 d2 e6 23 3e f1 d4 cd d8 fd 3a 4b 23 e1 b1 6e 46 4f 4f c0 4e\n00001 99 d5 0b 24 b9 0e 19 ec 2e 4c a4 f4 52 3b 54 08 89 6c d6 18 04 08 01 56 8d 37 2d ec 36 73 48 44\n00002 b9 13 0d 4e 0f 22 43 b0 21 30 7a c2 2d c2 f3 76 48 be 7b a7 df 26 42 5a c1 d0 af 9b 6f a6 cd 59\n00003 30 69 15 05 84 e4 52 2b 9a 09 04 07 ea d5 d3 76 d3 3f bd 03 f6 3a b3 10 60 99 38 b5 79 63 69 53\n00004 d1 2e 08 63 ce f0 d1 1c b7 40 f0 c8 81 04 81 35 3d f0 5c 93 c4 67 7a 2b 52 98 ee d1 8a e8 25 7d\n00005 75 cc 57 9f bc 31 9f fa e5 34 35 cc 56 00 27 f2 0b fb fc f4 bb fe 86 e7 3c 32 12 30 bc a8 d2 ff\n00006 d8 4a a1 b6 5e 00 a5 6b 61 e5 d0 9d 3c 34 8d 56 d9 2a 66 25 4f 03 b3 79 5f 66 66 f3 5e 0d 1d 3b\n00007 fc 2d 4d 7b ee ed 23 7d e6 56 4b 72 25 cc 16 4c 27 af 30 da e0 da 55 16 ae 05 56 4d f7 95 33 d2\n00008 79 8c af be 74 21 1b 9c 15 e8 40 6d ae ae 70 0b cc 4a da a5 88 e6 f5 6a 6f ef 4c ae 57 ad 71 87\n00009 e4 3a 85 32 a9 99 08 b5 4e c2 4d c2 d3 d2 9a 4c 2a 74 7a 50 49 4e d2 00 95 2b 73 ca 4d 91 69 c0\n$ newressu --help\nthis help page                                    newressu --help\/-?       \nprint random decimal digits (default)             newressu -d\/--dec        \noctal digits                                      newressu -o\/--oct        \nhexadecimal digits                                newressu -x\/--hex        \nbinary digits                                     newressu -b\/--bin        \ndecimal digits, with spaces between \"words\"       newressu -d --space      \nbinary digits, with spaces between \"words\"        newressu -b --space      \ndecimal digits, 30 lines                          newressu -d -l30         \ndecimal digits, 30 lines, no linenumbers          newressu -d -l30 --lineno\nbase 2 digits = decimal (0-1)                      newressu --base2         \nbase 8 digits = octal (0-7)                        newressu --base8         \nbase 10 digits = decimal (0-9)                     newressu --base10        \nbase 16 digits = hexadecimal (0-F)                 newressu --base16        \nbase 62 digits (0-9, A-Z, a-z)                    newressu --base62        \nnumbers in rand style listing                     newressu --rand          \nnumbers in 2 number groups                        newressu --space 2       \nprint numbers in 5 line groups                    newressu --newline 5     \nfill all screen lines                             newressu -l*             \nfill all screen columns                           newressu -c*             \nfill screen columns and lines                     newressu --screen        \nprint decimal digits, 128 characters per line     newressu -d -c128        \nprint decimal numbers between 0-9                 newressu -d --lim10      \nprint hexadecimal numbers with decimal limit      newressu -d --lim10 -x   \nprint five letter uppercase words                 newressu --isupper --limBAAAAA\nprint decimal numbers with spaces and wordsize 10 newressu -d -s10 --space \nprint rollings of dice (1-6)                      newressu -d --space --zero --lim7\nprint throws of coin (0,1)                        newressu -b -s1 --space  \nprint lotto numbers for finnish lotto 7x(1-40)    newressu -d --lim41 -w7 --zero --lotto\nprint 16 sorted decimal numbers from 0 to 99999   newressu -d -s5 --sort -w16\nalphanumeric characters                           newressu --alnum         \nalphabetic characters                             newressu --alpha         \nprintables excluding space                        newressu --graph         \nlowercase characters                              newressu --lower         \npunctuation characters                            newressu --punct         \nuppercase characters                              newressu --upper         \nmaterial for passwords                            newressu -1              \ndanish\/norwegian alphabet                         newressu --dnk\/--nor     \nfinnish\/norwegian alphabet                        newressu --fin\/--swe     \nrussian alphabet                                  newressu --rus           \nestonian alphabet                                 newressu --est           \nlithuanian alphabet                               newressu --ltu           \nlatvian alphabet                                  newressu --lva           \nfrench\/gb\/us\/italian alphabet                     newressu --fra\/--gbr\/--usa\/--ita\ndeutsch alphabet                                  newressu --deu           \ngreek alphabet                                    newressu --grc           \njapan alphabet (hiragana, katakana, kanji)        newressu --jp            \njapan alphabet (hiragana)                         newressu --jp1\/--hir     \njapan alphabet (katakana)                         newressu --jp2\/--kat     \njapan alphabet (kanji)                            newressu --jp3\/--kan     \nchinese alphabet                                  newressu --cn            \nhebrew alphabet                                   newressu --heb           \nhindi alphabet                                    newressu --hin\/--ind     \nkorean alphabet                                   newressu --kor           \ngothic alphabet                                   newressu --got           \n\"one time pad\" (otp) with 5 numeric characters    newressu --otp5n\/--otp1  \notp with 5 uppercase letters                      newressu --otp5a\/--otp2  \notp with 4 uppercase letters                      newressu --otp4a\/--otp3  \nplaying cards                                     newressu --cards         \nplaying card suits                                newressu --cardsuits     \nchess men                                         newressu --chessmen      \nprint dice                                        newressu --dice          \nprint mahjong pieces                              newressu --mahjong       \nprint pattern1                                    newressu -i\u258c\u2599\u2584 \/ --pattern1\nprint pattern2                                    newressu -i\u25dc\u25dd\u25de\u25df \/ --pattern2\nprint pattern2                                    newressu -i\\\\\/ \/ --pattern3\nprint pattern2                                    newressu -i\u25a7\u25a8 \/ --pattern5\nuse randomness from ressu (default)               newressu --ressu         \nuse randomness from pseudo random ressu           newressu --pseudoressu   \nuse randomness from fast ressu                    newressu --fast\/--fastressu\nuse randomness from single round of ressu         newressu --single\/--singleressu\nuse randomness from fort                          newressu --fort          \nuse randomness from intel rdrand                  newressu --rdrand        \nuse randomness from intel rdseed                  newressu --rdseed        \nuse randomness from \/dev\/urandom                  newressu --urandom       \nuse randomness from \/dev\/random                   newressu --random        \narea:FINLAND, Finland(fi), \u00c5land(ax), count:2\narea:DENMARK, Denmark(dk), FaroeIslands(fo), Greenland(gl), Greenland(gl), count:4\narea:NORDIC, Finland(fi), \u00c5land(ax), Sweden(se), Norway(no), Denmark(dk), FaroeIslands(fo), Iceland(is), Greenland(gl), count:8\narea:BALTIC, Estonia(ee), Latvia(lv), Lithuania(lt), count:3\narea:FRANCE, ClippertonIsland(fr), Guadeloupe(gp), Martinique(mq), FrenchGuiana(gf), Mayotte(yt), R\u00e9union(re), NewCaledonia(nc), FrenchPolynesia(pf), WallisandFutuna(wf), Jersey(je), count:10\narea:UK, Ireland(ie), UnitedKingdom(gb), England(gb), Scotland(gb), Wales(gb), Gibraltar(gi), Anguilla(ai), Bermuda(bm), BritishVirginIslands(vg), CaymanIslands(ky), Montserrat(ms), TurksandCaicos(tc), FalklandIslands(fk), TristandaCunha(sh), ManIsle(im), Pitcairn(pn), count:16\narea:SPAIN, WesternSahara(eh), count:1\narea:EU, Finland(fi), Sweden(se), Denmark(dk), Estonia(ee), Latvia(lv), Lithuania(lt), Austria(at), Belgium(be), Bulgaria(bg), Croatia(hr), Cyprus(cy), CzechRepublic(cz), France(fr), Germany(de), Greece(gr), Hungary(hu), Ireland(ie), Italy(it), Luxembourg(lu), Malta(mt), Netherlands(nl), Poland(pl), Portugal(pt), Romania(ro), Slovakia(sk), Slovenia(si), Spain(es), Switzerland(ch), count:28\narea:NORTHERNEUROPE, Finland(fi), Sweden(se), Norway(no), Denmark(dk), Iceland(is), Estonia(ee), Latvia(lv), Lithuania(lt), count:8\narea:EASTERNEUROPE, Ukraine(ua), Albania(al), Armenia(am), Azerbaijan(az), Belarus(by), BosniaandHerzegovina(ba), Bulgaria(bg), Croatia(hr), CzechRepublic(cz), Georgia(ge), Hungary(hu), Moldova(md), Montenegro(me), Northmacedonia(mk), Poland(pl), Romania(ro), Russia(ru), Serbia(rs), Slovakia(sk), Slovenia(si), count:20\narea:SOUTHERNEUROPE, Cyprus(cy), Greece(gr), Italy(it), Vatican(va), Malta(mt), Portugal(pt), SanMarino(sm), Spain(es), Turkey(tr), count:9\narea:WESTERNEUROPE, Andorra(ad), Austria(at), Belgium(be), France(fr), Germany(de), Ireland(ie), Liechtenstein(li), Luxembourg(lu), Monaco(mc), Netherlands(nl), Switzerland(ch), UnitedKingdom(gb), count:12\narea:EUROPE, Finland(fi), Sweden(se), Norway(no), Denmark(dk), Iceland(is), Estonia(ee), Latvia(lv), Lithuania(lt), Ukraine(ua), Albania(al), Andorra(ad), Armenia(am), Austria(at), Azerbaijan(az), Belarus(by), Belgium(be), BosniaandHerzegovina(ba), Bulgaria(bg), Croatia(hr), Cyprus(cy), CzechRepublic(cz), France(fr), Georgia(ge), Germany(de), Greece(gr), Hungary(hu), Ireland(ie), Italy(it), Vatican(va), Kazakhstan(kz), Liechtenstein(li), Luxembourg(lu), Malta(mt), Moldova(md), Montenegro(me), Monaco(mc), Montenegro(me), Netherlands(nl), Northmacedonia(mk), Poland(pl), Portugal(pt), Romania(ro), Russia(ru), SanMarino(sm), Serbia(rs), Slovakia(sk), Slovenia(si), Spain(es), Switzerland(ch), Turkey(tr), UnitedKingdom(gb), count:51\narea:EURASIA, Finland(fi), Sweden(se), Norway(no), Denmark(dk), Iceland(is), Estonia(ee), Latvia(lv), Lithuania(lt), Ukraine(ua), Albania(al), Andorra(ad), Armenia(am), Austria(at), Azerbaijan(az), Belarus(by), Belgium(be), Bulgaria(bg), Croatia(hr), Cyprus(cy), CzechRepublic(cz), France(fr), Georgia(ge), Germany(de), Greece(gr), Hungary(hu), Ireland(ie), Italy(it), Vatican(va), Kazakhstan(kz), Liechtenstein(li), Luxembourg(lu), Malta(mt), Moldova(md), Montenegro(me), Monaco(mc), Montenegro(me), Netherlands(nl), Northmacedonia(mk), Poland(pl), Portugal(pt), Romania(ro), Russia(ru), SanMarino(sm), Serbia(rs), Slovakia(sk), Slovenia(si), Spain(es), Switzerland(ch), Turkey(tr), UnitedKingdom(gb), UnitedArabEmirates(ae), Afghanistan(af), Bangladesh(bd), Bahrain(bh), Brunei(bn), Bhutan(bt), China(cn), HongKong(hk), Indonesia(id), Israel(il), India(in), Iraq(iq), Iran(ir), Jordan(jo), Japan(jp), Kyrgyzstan(kg), Cambodia(kh), SouthKorea(kr), Kuwait(kw), Laos(la), Lebanon(lb), SriLanka(lk), Mongolia(mn), Macao(mo), Maldives(mv), Myanmar(mm), Malaysia(my), NorthKorea(kp), Nepal(np), Oman(om), Philippines(ph), Pakistan(pk), Palestine(ps), Qatar(qa), SaudiArabia(sa), Singapore(sg), Syria(sy), Thailand(th), Tajikistan(tj), EastTimor(tl), Turkmenistan(tm), Taiwan(tw), Uzbekistan(uz), Vietnam(vn), Yemen(ye), Egypt(eg), count:96\narea:NORTHASIA, Russia(ru), count:1\narea:EASTASIA, Bahrain(bh), China(cn), HongKong(hk), Japan(jp), SouthKorea(kr), Mongolia(mn), Macao(mo), NorthKorea(kp), Taiwan(tw), count:9\narea:CENTRALASIA, Kazakhstan(kz), Kyrgyzstan(kg), Tajikistan(tj), Turkmenistan(tm), Uzbekistan(uz), count:5\narea:SOUTHASIA, Afghanistan(af), Bangladesh(bd), Bhutan(bt), India(in), SriLanka(lk), Maldives(mv), Nepal(np), Pakistan(pk), count:8\narea:WESTASIA, Armenia(am), Azerbaijan(az), Cyprus(cy), Georgia(ge), Turkey(tr), UnitedArabEmirates(ae), Israel(il), Iraq(iq), Iran(ir), Jordan(jo), Kuwait(kw), Lebanon(lb), Oman(om), Palestine(ps), Qatar(qa), SaudiArabia(sa), Syria(sy), Yemen(ye), Egypt(eg), count:19\narea:ASIA, Armenia(am), Azerbaijan(az), Cyprus(cy), Georgia(ge), Kazakhstan(kz), Russia(ru), Turkey(tr), UnitedArabEmirates(ae), Afghanistan(af), Bangladesh(bd), Bahrain(bh), Brunei(bn), Bhutan(bt), China(cn), HongKong(hk), Indonesia(id), Israel(il), India(in), Iraq(iq), Iran(ir), Jordan(jo), Japan(jp), Kyrgyzstan(kg), Cambodia(kh), SouthKorea(kr), Kuwait(kw), Laos(la), Lebanon(lb), SriLanka(lk), Mongolia(mn), Macao(mo), Maldives(mv), Myanmar(mm), Malaysia(my), NorthKorea(kp), Nepal(np), Oman(om), Philippines(ph), Pakistan(pk), Palestine(ps), Qatar(qa), SaudiArabia(sa), Singapore(sg), Syria(sy), Thailand(th), Tajikistan(tj), EastTimor(tl), Turkmenistan(tm), Taiwan(tw), Uzbekistan(uz), Vietnam(vn), Yemen(ye), Egypt(eg), count:53\narea:NORTHAFRICA, Algeria(dz), Egypt(eg), Libya(ly), Madeira(ly), Morocco(ma), Tunisia(tn), WesternSahara(eh), count:7\narea:EASTAFRICA, Ethiopia(et), Eritrea(er), Tanzania(tz), Kenya(ke), Uganda(ug), SouthSudan(ss), Sudan(sd), Madagascar(mg), Mayotte(yt), Malawi(mw), Zambia(zm), Somalia(so), Zimbabwe(zw), R\u00e9union(re), Rwanda(rw), Burundi(bi), Eritrea(er), Mauritius(mu), Mozambique(mz), Djibouti(dj), Seychelles(sc), count:21\narea:CENTRALAFRICA, Congo(cg), DemocraticCongo(cd), Angola(ao), Cameroon(cm), Chad(td), Congo(cd), CentralAfrican(cf), Gabon(ga), EquatorialGuinea(gq), S\u00e3oTom\u00e9andPr\u00edncipe(st), count:10\narea:SOUTHAFRICA, SouthAfrica(za), Botswana(bw), Namibia(na), Lesotho(ls), Eswatini(sz), count:5\narea:WESTAFRICA, Nigeria(ne), Ghana(gh), IvoryCoast(ci), Niger(ne), BurkinaFaso(bf), Mali(ml), Senegal(sn), Guinea(gn), Benin(bj), Togo(tg), SierraLeone(sl), Liberia(lr), Mauritania(mr), Gambia(gm), GuineaBissau(gw), CapeVerde(cv), count:16\narea:AFRICA, Nigeria(ne), Ethiopia(et), Eritrea(er), Congo(cg), DemocraticCongo(cd), Tanzania(tz), SouthAfrica(za), Kenya(ke), Uganda(ug), SouthSudan(ss), Sudan(sd), Algeria(dz), Egypt(eg), Libya(ly), Madeira(ly), Morocco(ma), Angola(ao), Ghana(gh), Mozambique(mz), Madagascar(mg), Mayotte(yt), IvoryCoast(ci), Cameroon(cm), Niger(ne), BurkinaFaso(bf), Mali(ml), Malawi(mw), Zambia(zm), Chad(td), Somalia(so), Senegal(sn), Zimbabwe(zw), Guinea(gn), R\u00e9union(re), Rwanda(rw), Benin(bj), Burundi(bi), Tunisia(tn), Togo(tg), SierraLeone(sl), Congo(cd), Liberia(lr), Mauritania(mr), Eritrea(er), Gambia(gm), Botswana(bw), Namibia(na), Gabon(ga), Lesotho(ls), GuineaBissau(gw), Mauritius(mu), Mozambique(mz), Eswatini(sz), Djibouti(dj), Comoros(km), CapeVerde(cv), WesternSahara(eh), Seychelles(sc), count:58\narea:NORTHAMERICA, Greenland(gl), Anguilla(ai), AntiguaAndBarbuda(ag), Aruba(aw), Bahamas(bs), Barbados(bb), Belize(bz), Bermuda(bm), Bonaire(bq), BritishVirginIslands(vg), Canada(ca), CaymanIslands(ky), ClippertonIsland(fr), CostaRica(cr), Cuba(cu), Cura\u00e7ao(cw), Dominica(dm), DominicanRepublic(do), ElSalvador(sv), Greenland(gl), Grenada(gd), Guadeloupe(gp), Guatemala(gt), Haiti(ht), Honduras(hn), Jamaica(jm), Martinique(mq), Mexico(mx), Montserrat(ms), Nicaragua(ni), Panama(pa), PuertoRico(pr), Saba(bq), SaintBarth\u00e9lemy(bl), SaintKitts(kn), SaintLucia(lc), SaintMartin(mf), SintMaarten(sx), TrinidadandTobago(tt), TurksandCaicos(tc), SaintPierre(pm), SaintVincent(vc), UnitedStatesofAmerica(us), VirginIslands(vi), count:44\narea:SOUTHAMERICA, Argentina(ar), Bolivia(bo), Brazil(br), Chile(cl), Colombia(co), Ecuador(ec), FalklandIslands(fk), FrenchGuiana(gf), Guyana(gy), Paraguay(py), Peru(pe), SouthGeorgia(gs), Suriname(sr), Uruguay(uy), Venezuela(ve), count:15\narea:USA, UnitedStatesofAmerica(us), VirginIslands(vi), Guam(gu), Americansamoa(as), count:4\narea:OCEANIA, Australia(au), Kiribati(ki), Nauru(nr), NewCaledonia(nc), Fiji(fj), Micronesia(fm), PapuanewGuinea(pg), Vanuatu(vu), SolomonIslands(sb), Guam(gu), MarshallIslands(mh), NorthernMariana(mp), FrenchPolynesia(pf), Samoa(ws), WallisandFutuna(wf), Tuvalu(tv), Americansamoa(as), Pitcairn(pn), Palau(pw), NorFolkIsland(nf), Cookisland(ck), NewZealand(nz), Niue(nu), Tokelau(tk), Tonga(to), count:25\narea:AUSTRALASIA, Australia(au), NorFolkIsland(nf), NewZealand(nz), count:3\narea:MELANESIA, Fiji(fj), PapuanewGuinea(pg), Vanuatu(vu), SolomonIslands(sb), count:4\narea:MICRONESIA, Kiribati(ki), Nauru(nr), Micronesia(fm), Guam(gu), MarshallIslands(mh), NorthernMariana(mp), Palau(pw), count:7\narea:POLYNESIA, FrenchPolynesia(pf), Samoa(ws), Americansamoa(as), Pitcairn(pn), NorFolkIsland(nf), Cookisland(ck), Niue(nu), Tokelau(tk), Tonga(to), count:9\narea:BRICS, Russia(ru), Brazil(br), China(cn), India(in), SouthAfrica(za), count:5\narea:ALL, Finland(fi), \u00c5land(ax), Sweden(se), Norway(no), Denmark(dk), FaroeIslands(fo), Iceland(is), Greenland(gl), Estonia(ee), Latvia(lv), Lithuania(lt), Ukraine(ua), Albania(al), Andorra(ad), Armenia(am), Austria(at), Azerbaijan(az), Belarus(by), Belgium(be), BosniaandHerzegovina(ba), Bulgaria(bg), Croatia(hr), Cyprus(cy), CzechRepublic(cz), France(fr), Georgia(ge), Germany(de), Greece(gr), Hungary(hu), Ireland(ie), Italy(it), Vatican(va), Kazakhstan(kz), Liechtenstein(li), Luxembourg(lu), Malta(mt), Moldova(md), Montenegro(me), Monaco(mc), Montenegro(me), Netherlands(nl), Northmacedonia(mk), Poland(pl), Portugal(pt), Romania(ro), Russia(ru), SanMarino(sm), Serbia(rs), Slovakia(sk), Slovenia(si), Spain(es), Switzerland(ch), Turkey(tr), UnitedKingdom(gb), England(gb), Scotland(gb), Wales(gb), Gibraltar(gi), JanMayen(sj), Anguilla(ai), AntiguaAndBarbuda(ag), Aruba(aw), Bahamas(bs), Barbados(bb), Belize(bz), Bermuda(bm), Bonaire(bq), BritishVirginIslands(vg), Canada(ca), CaymanIslands(ky), ClippertonIsland(fr), CostaRica(cr), Cuba(cu), Cura\u00e7ao(cw), Dominica(dm), DominicanRepublic(do), ElSalvador(sv), Greenland(gl), Grenada(gd), Guadeloupe(gp), Guatemala(gt), Haiti(ht), Honduras(hn), Jamaica(jm), Martinique(mq), Mexico(mx), Montserrat(ms), Nicaragua(ni), Panama(pa), PuertoRico(pr), Saba(bq), SaintBarth\u00e9lemy(bl), SaintKitts(kn), SaintLucia(lc), SaintMartin(mf), SintMaarten(sx), TrinidadandTobago(tt), TurksandCaicos(tc), SaintPierre(pm), SaintVincent(vc), UnitedStatesofAmerica(us), VirginIslands(vi), BouvetIsland(bv), Navassa(um), SaintHelena(sh), Argentina(ar), Bolivia(bo), Brazil(br), Chile(cl), Colombia(co), Ecuador(ec), FalklandIslands(fk), FrenchGuiana(gf), Guyana(gy), Paraguay(py), Peru(pe), SouthGeorgia(gs), Suriname(sr), Uruguay(uy), Venezuela(ve), UnitedArabEmirates(ae), Afghanistan(af), Bangladesh(bd), Bahrain(bh), Brunei(bn), Bhutan(bt), China(cn), HongKong(hk), Indonesia(id), Israel(il), India(in), Iraq(iq), Iran(ir), Jordan(jo), Japan(jp), Kyrgyzstan(kg), Cambodia(kh), SouthKorea(kr), Kuwait(kw), Laos(la), Lebanon(lb), SriLanka(lk), Mongolia(mn), Macao(mo), Maldives(mv), Myanmar(mm), Malaysia(my), NorthKorea(kp), Nepal(np), Oman(om), Philippines(ph), Pakistan(pk), Palestine(ps), Qatar(qa), SaudiArabia(sa), Singapore(sg), Syria(sy), Thailand(th), Tajikistan(tj), EastTimor(tl), Turkmenistan(tm), Taiwan(tw), Uzbekistan(uz), Vietnam(vn), Yemen(ye), Nigeria(ne), Ethiopia(et), Eritrea(er), Congo(cg), DemocraticCongo(cd), Tanzania(tz), SouthAfrica(za), Kenya(ke), Uganda(ug), SouthSudan(ss), Sudan(sd), Algeria(dz), Egypt(eg), Libya(ly), Madeira(ly), Morocco(ma), Angola(ao), Ghana(gh), Mozambique(mz), Madagascar(mg), Mayotte(yt), IvoryCoast(ci), Cameroon(cm), Niger(ne), BurkinaFaso(bf), Mali(ml), Malawi(mw), Zambia(zm), Chad(td), Somalia(so), Senegal(sn), Zimbabwe(zw), Guinea(gn), R\u00e9union(re), Rwanda(rw), Benin(bj), Burundi(bi), Tunisia(tn), Togo(tg), SierraLeone(sl), Congo(cd), CentralAfrican(cf), Liberia(lr), Mauritania(mr), Eritrea(er), Gambia(gm), Botswana(bw), Namibia(na), Gabon(ga), Lesotho(ls), GuineaBissau(gw), EquatorialGuinea(gq), Mauritius(mu), Mozambique(mz), Eswatini(sz), Djibouti(dj), Comoros(km), CapeVerde(cv), WesternSahara(eh), S\u00e3oTom\u00e9andPr\u00edncipe(st), Seychelles(sc), TristandaCunha(sh), Australia(au), Christmasisland(cx), CocosIslands(cc), ManIsle(im), Kiribati(ki), Nauru(nr), NewCaledonia(nc), Fiji(fj), Micronesia(fm), PapuanewGuinea(pg), Vanuatu(vu), SolomonIslands(sb), Guam(gu), MarshallIslands(mh), NorthernMariana(mp), FrenchPolynesia(pf), Samoa(ws), WallisandFutuna(wf), Tuvalu(tv), Americansamoa(as), Pitcairn(pn), Palau(pw), Jersey(je), Antarctica(aq), NorFolkIsland(nf), Cookisland(ck), NewZealand(nz), Niue(nu), Tokelau(tk), Tonga(to), BritishIndianOcean(io), FrenchSouthernandaAtarctic(tf), Guernsey(gg), HeardandMacDonaldsIslands(hm), UsMinorOutlyingIslands(um), count:262\n************************************************************************\n00000 63711265569033709750929554591985173713238988280649712433820070348\n<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/moijari.com\/wp-content\/uploads\/2026\/07\/IMG_2255.jpeg\" alt=\"\" class=\"wp-image-3953\" width=\"284\" height=\"378\" srcset=\"https:\/\/moijari.com\/wp-content\/uploads\/2026\/07\/IMG_2255.jpeg 240w, https:\/\/moijari.com\/wp-content\/uploads\/2026\/07\/IMG_2255-225x300.jpeg 225w\" sizes=\"(max-width: 284px) 100vw, 284px\" \/><\/figure>\n\n\n\n<p>T\u00e4ss\u00e4 ressu2:n sorsa:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#include &lt;stdio.h&gt;\n#include &lt;stdlib.h&gt;\n#include &lt;memory.h&gt;\n#include &lt;ctype.h&gt;\n\n#include &lt;sys\/time.h&gt;\n#include &lt;time.h&gt;\n\n#define MAIN 2\n\nunsigned char *procname;\nstatic unsigned char *programname = \"Ressu2 version 1.00 \u00a9\";\nstatic unsigned char *copyright = \"Copyright (c) 2013-2026 Jari Kuivaniemi (moijari.com), Helsinki, Finland. Kaikki oikeudet pid\u00e4tet\u00e4\u00e4n!\";\nint my_output = 0;\n\nvoid my_dump(unsigned char *header, int len, unsigned char *buf, int linelen)\n{\n  int c;\n\n  if(my_output) {\n    fprintf(stdout,\"\\n\");\n    my_output = 0;\n  }\n  for(c = 0; c &lt; len; c++) {\n    if(c % linelen == 0) {\n      if(c &gt; 0)\n\tfprintf(stdout,\"\\n\");\n      fprintf(stdout,\"%-10s\", header);\n    }\n    fprintf(stdout,\" %02x\", buf&#91;c]);\n  }\n  fprintf(stdout,\"\\n\");\n  fflush(stdout);\n}\n\n#define aDEBUG8 2\n\n#define aUSE_URANDOM 2\n#define USE_RESSU2 2\n#define USE_PSEUDORESSU2 2\n#define USE_RESSU2TWIST 2\n\n#if defined USE_RESSU2 || defined USE_PSEUDORESSU2 || defined USE_RESSU2TWIST\n\nstatic unsigned long long my_ressu_useconds()\n{\n  struct timeval tv;\n  gettimeofday(&amp;tv, NULL);\n  return((unsigned long long) tv.tv_usec + 1000000ULL * (unsigned long long) tv.tv_sec);\n}\n\nstatic unsigned char my_ressu_lowusec() \/* JariK 2013 *\/\n{\n  struct timeval tv;\n  gettimeofday(&amp;tv, NULL);\n  return(tv.tv_usec &amp; 0xff);\n}\n\nstatic int randomness = 0;\n\n#define RESSU_ROTATELEFT8(byte, bits) ( ((byte) &gt;&gt; (8 - (bits))) | ((byte) &lt;&lt; (bits)) )\n\nstatic void my_ressu2_round(int size, unsigned char *buffer) \/\/ ressu JariK 2013, 2025\n{\n  int c, d, byte;\n  unsigned char e;\n  static int f = 0, prevbyte = -1;\n  unsigned long long usec;\n  \n  for(c = 0; c &lt; 8; c++) { \/\/ eight bits per byte\n    for(d = 0; d &lt; size; d++) { \/\/ rotate + xor\n      e = buffer&#91;d];\n      e = RESSU_ROTATELEFT8(e, 1);  \/\/ rotate byte left 1 bits\n      byte = my_ressu_lowusec();\n      buffer&#91;d] = e ^ byte;\n      if(prevbyte != byte) {\n\tprevbyte = byte;\n\trandomness++;\n      }\n    }\n    for(d = 0; d &lt; size; d++) { \/\/ swap\n      f = (f + 16 + buffer&#91;d] + 2) % size;\n      e = buffer&#91;d];\n      buffer&#91;d] = buffer&#91;f];\n      buffer&#91;f] = e;\n    }\n    \n    \/\/ more randomness from clocks\n    usec = clock();\n    while(usec &gt; 0) {\n      f = (f + usec) % size;\n      usec \/= size;\n    }\n    usec = my_ressu_useconds();\n    while(usec &gt; 0) {\n      f = (f + usec) % size;\n      usec \/= size;\n    }\n  } \/\/ end of for(c = 0; c &lt; 8; c++\n}\n\n#include \"newressu.h\"\n\n#define RESSU2_BYTES 2048 \/\/ now 2048\n#define RESSU2_RANDOMNESS_NEEDED 2048 \/\/ now 2048 \n#define RESSU2_CLOCKS_NEEDED 20480 \/\/ now 20480\n#define RESSU2_MINIMUM_ROUNDS 5 \/\/ now 5\n\nvoid my_ressu2_bytes(int size, unsigned char *buffer) \/\/ Ressu2 v1.1 JariK 2013, 2025, 2026\n{\n  int c, d, clocksused;\n  static int ressu_pos = 0, initneeded = 1;\n  static unsigned char ressu&#91;RESSU2_BYTES];\n  \n  for(c = 0; c &lt; size; c++) {\n    if(ressu_pos == 0) {\n      if(initneeded) {\n\tmemset(&amp;ressu, 0, sizeof(ressu));\n\tinitneeded = 0;\n      }\n      randomness = 0;\n      clocksused = 0;\n      \/\/memset(&amp;ressu, 0, sizeof(ressu));\n      \n      for(d = 0; d &lt; RESSU2_MINIMUM_ROUNDS ||\n\t    randomness &lt; RESSU2_RANDOMNESS_NEEDED ||\n\t    clocksused &lt; RESSU2_CLOCKS_NEEDED\n\t    ; d++) {\n\tmy_ressu2_round(sizeof(ressu), ressu);\n\tclocksused += (sizeof(ressu) * 8);\n      }\n      \n#ifdef DEBUG8\n      my_dump(\"myressu2g\", sizeof(ressu), ressu, 32);      \n#endif\n    } \/\/ end of if(ressu_pos == 0\n    buffer&#91;c] ^= ressu&#91;ressu_pos];\n    ressu_pos = (ressu_pos + 1) % sizeof(ressu);\n  } \/\/ end of for(c = 0; c &lt; size; c++\n#ifdef DEBUG8\n  my_dump(\"myressu2\", size, buffer, 32);\n#endif\n}\n\n#endif \/\/ end of #if defined USE_RESSU2 || defined USE_PSEUDORESSU2 || defined USE_RESSU2TWIST\n\n#if defined USE_PSEUDORESSU2 || defined USE_RESSU2TWIST\n\nunsigned char cvar&#91;16];\nint cvarsize = 0;\n\nvoid inccvar()\n{\n  int c;\n\n  \/* 16 bytes, LSB first *\/\n  for(c = 0; ++cvar&#91;c] == 0 &amp;&amp; c &lt; sizeof(cvar) - 1; c++);\n\n  if(cvarsize &lt; c)\n    cvarsize = c;\n\n#ifdef DEBUG20\n  ressu_dump(\"cvar\", cvarsize + 1, cvar, 32);\n#endif\n}\n\nvoid clearcvar()\n{\n  int c;\n\n  cvarsize = 0;\n  \n  for(c = 0; c &lt; sizeof(cvar); c++)\n    cvar&#91;c] = 0;\n\n  for(c = 0; c &lt; sizeof(cvar); c++)\n    if(cvar&#91;c] != 0)\n      cvarsize = c;\n}\n\n#include \"sha256.h\"\n\n#define PSEUDORESSU2_BYTES 32*1024 \/\/ bytes between topups\n#define PSEUDORESSU2_TOPUP_BYTES 32*1024 \/\/ bytes between topups\n#define PSEUDORESSU2_TOPUP_SIZE 32 \/\/ topup size in bytes (32 bytes, 256 bits)\n#define PSEUDORESSU2_TOPUP_TWICE 2 \/\/ off by default\n\nstatic unsigned char pseudoressu2_key&#91;HashLen]; \/\/ 32 bytes, 256 bits\n\nstatic void my_pseudoressu2_internalbytes(unsigned char *digest)\n{\n  HashCtx hash;\n\n  HashInit(&amp;hash);\n  HashUpdate(&amp;hash, pseudoressu2_key, sizeof(pseudoressu2_key)); \/\/ add old randomness to hash\n  HashUpdate(&amp;hash, (unsigned char *) &amp;cvar, cvarsize + 1);\n  inccvar();\n  HashFinal(digest, &amp;hash);\n  memset(&amp;hash, 0, sizeof(hash)); \/\/ forget hash\n}\n\nstatic void my_pseudoressu2_addrandomness(int size, unsigned char *buffer)\n{\n  unsigned long long usec;\n  HashCtx hash;\n\n  HashInit(&amp;hash);\n  HashUpdate(&amp;hash, pseudoressu2_key, sizeof(pseudoressu2_key)); \/\/ add old randomness to hash\n  HashUpdate(&amp;hash, (unsigned char *) &amp;cvar, cvarsize + 1);\n  inccvar();\n  usec = my_ressu_useconds(); \/\/ add timestamp to hash\n  HashUpdate(&amp;hash, (unsigned char *)&amp;usec, sizeof(usec));\n  usec = clock(); \/\/ add processor time to hash (for randomness)\n  HashUpdate(&amp;hash, (unsigned char *)&amp;usec, sizeof(usec));\n  HashUpdate(&amp;hash, buffer, size); \/\/ add given randomness to hash\n  HashFinal(pseudoressu2_key, &amp;hash); \/\/ save as new key\n  memset(&amp;hash, 0, sizeof(hash)); \/\/ forget hash\n}\n\nstatic void my_pseudoressu2_topup()\n{\n  unsigned char topup&#91;PSEUDORESSU2_TOPUP_SIZE]; \/\/ 32 bytes, 256 bits\n\n  memset(&amp;topup, 0, sizeof(topup)); \/\/ forget topup\n  my_ressu2_bytes(sizeof(topup), topup);\n#ifdef DEBUG8\n  my_dump(\"topup\", sizeof(topup), topup, 32);\n#endif\n  my_pseudoressu2_addrandomness(sizeof(topup), topup);\n\n  memset(&amp;topup, 0, sizeof(topup)); \/\/ forget topup\n}\n\nvoid my_pseudoressu2_bytes(int size, unsigned char *buffer) \/\/ JariK 2022, 2025\n{\n  int c;\n  static int pseudoressu_pos = 0, topup_counter = 0, initneeded = 1;\n  static unsigned char pseudoressu&#91;HashLen]; \/\/ 32 bytes, 256 bits\n\n  for(c = 0; c &lt; size; c++) {\n    if(pseudoressu_pos == 0) {\n      if(topup_counter == 0) {\n\tif(initneeded) {\n\t  my_ressu2_bytes(sizeof(pseudoressu2_key), pseudoressu2_key); \/\/ get first key\n#ifdef DEBUG8\n\t  my_dump(\"first key\", sizeof(pseudoressu2_key), pseudoressu2_key, 32);\n#endif\n\t  initneeded = 0;\n\t} \/\/ end of if(initneeded\n\t\n\tmy_pseudoressu2_topup(); \/\/ add randomness to key, first block also\n#ifdef PSEUDORESSU2_TOPUP_TWICE\n\tmy_pseudoressu2_topup(); \/\/ add randomness to key, first block also\n#endif\n\ttopup_counter = PSEUDORESSU2_TOPUP_BYTES;\n      } \/\/ end of if(topup_counter == 0\n      \n      my_pseudoressu2_internalbytes(pseudoressu); \/\/ get random bits using the key\n#ifdef DEBUG8\n      my_dump(\"next data\", sizeof(pseudoressu), pseudoressu, 32);\n#endif\n      topup_counter -= sizeof(pseudoressu);\n    } \/\/ end of if(pseudoressu_pos == 0\n\n    buffer&#91;c] ^= pseudoressu&#91;pseudoressu_pos];\n    pseudoressu_pos = (pseudoressu_pos + 1) % sizeof(pseudoressu);\n  } \/\/ end of for(c = 0; c &lt; size; c++\n  \n  my_pseudoressu2_internalbytes(pseudoressu2_key); \/\/ replace key with new random one\n#ifdef DEBUG8\n  my_dump(\"new key\", sizeof(pseudoressu2_key), pseudoressu2_key, 32);\n#endif\n#ifdef DEBUG8\n  my_dump(\"pseudoressu\", size, buffer, 32);\n#endif\n}\n\n#endif \/\/ end of #if defined USE_PSEUDORESSU2 || defined USE_RESSU2TWIST\n\n#ifdef USE_RESSU2TWIST\n\nvoid my_ressu2twist_bytes(int size, unsigned char *buffer) \/\/ JariK 2023, 2025\n{\n  \/\/urandom_bytes(size, buffer);\n  my_ressu2_bytes(size, buffer);\n  my_pseudoressu2_bytes(size, buffer);\n#ifdef DEBUG8\n  my_dump(\"ressu2twist\", size, buffer, 32);\n#endif\n}\n\n#endif \/\/ end of #ifdef USE_RESSU2TWIST\n\n#ifdef USE_URANDOM\n\nvoid my_readfile_xor(int size, unsigned char *buffer, unsigned char *filename)\n{\n  int c, n, filebuffer_pos = 0;\n  unsigned char filebuffer&#91;64];\n  FILE *fp1;\n\n  if((fp1 = fopen(filename, \"rb\")) == NULL) {\n    fprintf(stderr,\"%s: fopen(): cannot open file %s\\n\",\n\t    procname, filename);\n    exit(1);\n  }\n\n  for(c = 0; c &lt; size; c++) {\n    if(filebuffer_pos == 0) {\n      n = (size - c &lt; sizeof(filebuffer)) ? size - c : sizeof(filebuffer);\n      if(fread(filebuffer, 1, n, fp1) &lt; n) {\n\tfprintf(stderr,\"%s: fread(): cannot read file %s\\n\",\n\t\tprocname, filename);\n\texit(1);\n      }\n#ifdef DEBUG8\n      my_dump(\"file\", n, filebuffer, 32);\n#endif\n    } \/\/ end of if(file_pos == 0\n    buffer&#91;c] ^= filebuffer&#91;filebuffer_pos];\n    filebuffer_pos = (filebuffer_pos + 1) % sizeof(filebuffer);\n  } \/\/ end of for(c = 0; c &lt; size; c++\n\n  fclose(fp1);\n\n  memset(filebuffer, 0, sizeof(filebuffer)); \/\/ forget file\n}\n\nstatic unsigned char urandomfilename&#91;128] = \"\/dev\/urandom\";\n\nvoid my_urandom_bytes(int size, unsigned char *buffer)\n{\n  my_readfile_xor(size, buffer, urandomfilename);\n#ifdef DEBUG8\n  my_dump(\"urandom\", size, buffer, 32);\n#endif\n}\n\n#endif \/\/ end of #ifdef USE_URANDOM\n\nvoid my_random_bytes(int size, unsigned char *buffer)\n{\n#ifdef USE_URANDOM\n  my_urandom_bytes(size, buffer);\n#endif\n  \/\/ressu_round(size, buffer);\n  \/\/ressu_genbytes(size, buffer);\n  \/\/pseudoressu_bytes(size, buffer);\n  \/\/ressutwist_bytes(size, buffer);\n  \/\/my_ressu2_round(size, buffer);\n#ifdef USE_PSEUDORESSU2\n  my_pseudoressu2_bytes(size, buffer);\n#endif\n#ifdef USE_RESSU2TWIST\n  my_ressu2twist_bytes(size, buffer);\n#endif\n#ifdef USE_RESSU2\n  my_ressu2_bytes(size, buffer);\n#endif\n}\n\n#define GENT_SIZE 128\n\nstatic unsigned char gent&#91;GENT_SIZE];\nstatic unsigned int gent_pos = 0;\n\nint my_random_byte()\n{\n  unsigned char ch;\n  static int initneeded = 1;\n\n  if(gent_pos == 0) {\n    if(initneeded) {\n      memset(&amp;gent, 0, sizeof(gent));\n      initneeded = 0;\n    }\n    my_random_bytes(sizeof(gent), gent);\n  }\n  ch = gent&#91;gent_pos];\n  gent_pos = (gent_pos + 1) % sizeof(gent);\n\n  return(ch);\n}\n\nunsigned long my_random_genlimit(unsigned long limit)\n{\n  int c;\n  unsigned long word;\n  static unsigned long lastlimit = 0, highlimit;\n  static int bytes;\n  \n  if(lastlimit != limit) { \/\/ if limit changes, calculate new highlimit and bytes\n    lastlimit = limit;\n    if(limit &lt;= 0x100) {\n      \/\/ highest multiplier of limit that fits to needed bytes\n      highlimit = (0x100 \/ limit) * limit;\n      \/\/ number of bytes needed\n      bytes = 1;\n    } else if(limit &lt;= 0x10000) {\n      highlimit = (0x10000 \/ limit) * limit;\n      bytes = 2;\n    } else if(limit &lt;= 0x1000000) {\n      highlimit = (0x1000000 \/ limit) * limit;\n      bytes = 3;\n    } else if(limit &lt;= 0x100000000) {\n      highlimit = (0x100000000 \/ limit) * limit;\n      bytes = 4;\n    } else if(limit &lt;= 0x10000000000) {\n      highlimit = (0x10000000000 \/ limit) * limit;\n      bytes = 5;\n    } else if(limit &lt;= 0x1000000000000) {\n      highlimit = (0x1000000000000 \/ limit) * limit;\n      bytes = 6;\n    } else if(limit &lt;= 0x100000000000000) {\n      highlimit = (0x100000000000000 \/ limit) * limit;\n      bytes = 7;\n    } else { \/\/ if(limit &lt;= 0xffffffffffffffff) {\n      highlimit = (0xffffffffffffffff \/ limit) * limit;      \n      bytes = 8;\n    }\n  } \/\/ if(lastlimit != limit)\n\n  for(;;) {\n    word = 0;\n    for(c = 0; c &lt; bytes; c++)\n      word = word &lt;&lt; 8 | my_random_byte();\n    if(word &lt; highlimit)\n      break;\n  }\n\n  word %= limit;\n  \n  return(word);\n}\n\nvoid ressu2_version()\n{\n  fprintf(stderr, \"%s\", programname); \/\/ touch these outside #ifdef MAIN\n  fprintf(stderr, \", %s\", copyright);\n}\n\n#include &lt;sys\/ioctl.h&gt; \/\/ for TIOCGWINSZ\n\n#ifdef MAIN\n\nint main(int argc, char *argv&#91;])\n{\n  int c, d;\n\n  procname = argv&#91;0];\n\n  \/\/\n  \/\/ look thru command line parameters\n  \/\/\n\n  for(c = 1; c &lt; argc; c++) {\n    if(!strcmp(\"--copyright\", argv&#91;c]) ||\n       !strcmp(\"--version\", argv&#91;c])) {\n      ressu2_version();\n#ifdef SHA256\n      fprintf(stderr,\"\\nsha256(\");\n      for(int c = 0; c &lt; HashLen; c++) {\n\tfprintf(stderr, \"%02x\", programfiledigest&#91;c]);\n      }\n#endif \/\/ end of #ifdef SHA256\n\n    }\n  }\n\n  for(c = 0; c &lt; 10; c++) {\n    fprintf(stdout, \"%05x\", c);\n    my_output = 1;\n    for(d = 0; d &lt; 32; d++) {\n      fprintf(stdout, \" \");\n      fprintf(stdout, \"%02llx\", (unsigned long long) my_random_genlimit(0x100));\n    }\n    fprintf(stdout,\"\\n\");\n  }\n}\n#endif \/\/ end of #ifdef MAIN<\/code><\/pre>\n\n\n\n<p>T\u00e4ss\u00e4 lis\u00e4ttyj\u00e4 lippuja:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>grep FRANCE newressu.c\nNORTHAMERICA\" },\n  { \"\ud83c\uddec\ud83c\uddeb\", \"\ud83c\uddec\ud83c\uddeb: gf, guf, FrenchGuiana, SOUTHAMERICA, FRANCE\" }, \/\/ French Guiana\n  { \"\ud83c\uddfe\ud83c\uddf9\", \"\ud83c\uddfe\ud83c\uddf9: yt, myt, Mayotte, FRANCE, AFRICA, EASTAFRICA\" },\n  { \"\ud83c\uddf7\ud83c\uddea\", \"\ud83c\uddf7\ud83c\uddea: re, reu, R\u00e9union, reunion, FRANCE, AFRICA, EASTAFRICA\" }, \/\/ R\u00e9union\n  { \"\ud83c\uddf3\ud83c\udde8\", \"\ud83c\uddf3\ud83c\udde8: nc, ncl, NewCaledonia, FRANCE, OCEANIA\" }, \/\/ New Caledonia\n  { \"\ud83c\uddf5\ud83c\uddeb\", \"\ud83c\uddf5\ud83c\uddeb: pf, pyf, FrenchPolynesia, FRANCE, POLYNESIA, OCEANIA\" }, \/\/ French Polynesia\n  { \"\ud83c\uddfc\ud83c\uddeb\", \"\ud83c\uddfc\ud83c\uddeb: wf, wlf, WallisandFutuna, FRANCE, OCEANIA\" }, \/\/ Wallis and Futuna\n  { \"\ud83c\uddef\ud83c\uddea\", \"\ud83c\uddef\ud83c\uddea: je, jey, Jersey, FRANCE\" },\ngrep EU newressu.c\nEUROPE, EURASIA, NORDIC\" },\n  { \"\ud83c\uddf3\ud83c\uddf4\", \"\ud83c\uddf3\ud83c\uddf4: no, nor, Norway, NORTHERNEUROPE, EUROPE, EURASIA, NORDIC\" },\n  { \"\ud83c\udde9\ud83c\uddf0\", \"\ud83c\udde9\ud83c\uddf0: dk, dnk, Denmark, EU, NORTHERNEUROPE, EUROPE, EURASIA, NORDIC, DENMARK\" },\n  { \"\ud83c\uddee\ud83c\uddf8\", \"\ud83c\uddee\ud83c\uddf8: is, isl, Iceland, NORTHERNEUROPE, EUROPE,<\/code><\/pre>\n\n\n\n<p>, edellinen pulpauttaa mukaan my\u00f6s seuraavat rivit:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>    unsigned char *areaflags = \"FINLAND, DENMARK, NORDIC, BALTIC, FRANCE, UK, SPAIN, EU, NORTHERNEUROPE, EASTERNEUROPE, SOUTHERNEUROPE, WESTERNEUROPE, EUROPE, EURASIA, NORTHASIA, EASTASIA, CENTRALASIA, SOUTHASIA, WESTASIA, ASIA, NORTHAFRICA, EASTAFRICA, CENTRALAFRICA, SOUTHAFRICA, WESTAFRICA, AFRICA, NORTHAMERICA, SOUTHAMERICA, USA, OCEANIA, AUSTRALASIA, MELANESIA, MICRONESIA, POLYNESIA, BRICS, ALL\", *a;\n#define PSEUDORESSU_LIMIT 1048576 \/\/ limit between rekeys\n    unsigned char *areaflags = \"FINLAND, DENMARK, NORDIC, BALTIC, FRANCE, UK, SPAIN, EU, NORTHERNEUROPE, EASTERNEUROPE, SOUTHERNEUROPE, WESTERNEUROPE, EUROPE, EURASIA, NORTHASIA, EASTASIA, CENTRALASIA, SOUTHASIA, WESTASIA, ASIA, NORTHAFRICA, EASTAFRICA, CENTRALAFRICA, SOUTHAFRICA, WESTAFRICA, AFRICA, NORTHAMERICA, SOUTHAMERICA, USA, OCEANIA, AUSTRALASIA, MELANESIA, MICRONESIA, POLYNESIA, BRICS, ALL\", *a;<\/code><\/pre>\n\n\n\n<p>, grep EU, koko materiaalistani tuo seuraavat rivit: (ylim\u00e4\u00e4r\u00e4iset koodirivit poistettuna; ja t\u00e4ss\u00e4kin kaikki ylim\u00e4\u00e4r\u00e4iset ja puuttuvat ovat minun virheit\u00e4ni)<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>  { \"\ud83c\uddeb\ud83c\uddee\", \"\ud83c\uddeb\ud83c\uddee: fi, fin, Finland, EU, NORTHERNEUROPE, EUROPE, EURASIA, NORDIC, FINLAND\" },\n  { \"\ud83c\uddf8\ud83c\uddea\", \"\ud83c\uddf8\ud83c\uddea: se, swe, Sweden, EU, NORTHERNEUROPE, EUROPE, EURASIA, NORDIC\" },\n  { \"\ud83c\udde9\ud83c\uddf0\", \"\ud83c\udde9\ud83c\uddf0: dk, dnk, Denmark, EU, NORTHERNEUROPE, EUROPE, EURASIA, NORDIC, DENMARK\" },\n  { \"\ud83c\uddea\ud83c\uddea\", \"\ud83c\uddea\ud83c\uddea: ee, est, Estonia, EU, NORTHERNEUROPE, EUROPE, EURASIA, BALTIC\" },\n  { \"\ud83c\uddf1\ud83c\uddfb\", \"\ud83c\uddf1\ud83c\uddfb: lv, lva, Latvia, EU, NORTHERNEUROPE, EUROPE, EURASIA, BALTIC\" },\n  { \"\ud83c\uddf1\ud83c\uddf9\", \"\ud83c\uddf1\ud83c\uddf9: lt, ltu, Lithuania, EU, NORTHERNEUROPE, EUROPE, EURASIA, BALTIC\" },\n  { \"\ud83c\udde6\ud83c\uddf9\", \"\ud83c\udde6\ud83c\uddf9: at, aut, Austria, EU, WESTERNEUROPE, EUROPE, EURASIA\" },\n  { \"\ud83c\udde7\ud83c\uddea\", \"\ud83c\udde7\ud83c\uddea: be, bel, Belgium, EU, WESTERNEUROPE, EUROPE, EURASIA\" },\n  { \"\ud83c\udde7\ud83c\uddec\", \"\ud83c\udde7\ud83c\uddec: bg, bgr, Bulgaria, EU, EASTERNEUROPE, EUROPE, EURASIA\" },\n  { \"\ud83c\udded\ud83c\uddf7\", \"\ud83c\udded\ud83c\uddf7: hr, hrv, Croatia, EU, EASTERNEUROPE, EUROPE, EURASIA\" },\n  { \"\ud83c\udde8\ud83c\uddfe\", \"\ud83c\udde8\ud83c\uddfe: cy, cyp, Cyprus, EU, SOUTHERNEUROPE, EUROPE, EURASIA, WESTASIA, ASIA\" },\n  { \"\ud83c\udde8\ud83c\uddff\", \"\ud83c\udde8\ud83c\uddff: cz, cze, CzechRepublic, EU, EASTERNEUROPE, EUROPE, EURASIA\" },  \/\/ Czech Republic Czechia\n  { \"\ud83c\uddeb\ud83c\uddf7\", \"\ud83c\uddeb\ud83c\uddf7: fr, fra, France, EU, WESTERNEUROPE, EUROPE, EURASIA\" },\n  { \"\ud83c\udde9\ud83c\uddea\", \"\ud83c\udde9\ud83c\uddea: de, deu, Germany, EU, WESTERNEUROPE, EUROPE, EURASIA\" },\n  { \"\ud83c\uddec\ud83c\uddf7\", \"\ud83c\uddec\ud83c\uddf7: gr, grc, Greece, EU, SOUTHERNEUROPE, EUROPE, EURASIA\" },\n  { \"\ud83c\udded\ud83c\uddfa\", \"\ud83c\udded\ud83c\uddfa: hu, hun, Hungary, EU, EASTERNEUROPE, EUROPE, EURASIA\" },\n  { \"\ud83c\uddee\ud83c\uddea\", \"\ud83c\uddee\ud83c\uddea: ie, irl, Ireland, UK, EU, WESTERNEUROPE, EUROPE, EURASIA\" },\n  { \"\ud83c\uddee\ud83c\uddf9\", \"\ud83c\uddee\ud83c\uddf9: it, ita, Italy, EU, SOUTHERNEUROPE, EUROPE, EURASIA\" },\n  { \"\ud83c\uddf1\ud83c\uddfa\", \"\ud83c\uddf1\ud83c\uddfa: lu, lux, Luxembourg, EU, WESTERNEUROPE, EUROPE, EURASIA\" },\n  { \"\ud83c\uddf2\ud83c\uddf9\", \"\ud83c\uddf2\ud83c\uddf9: mt, mlt, Malta, EU, SOUTHERNEUROPE, EUROPE, EURASIA\" },\n  { \"\ud83c\uddf3\ud83c\uddf1\", \"\ud83c\uddf3\ud83c\uddf1: nl, nld, Netherlands, EU, WESTERNEUROPE, EUROPE, EURASIA\" },\n  { \"\ud83c\uddf5\ud83c\uddf1\", \"\ud83c\uddf5\ud83c\uddf1: pl, pol, Poland, EU, EASTERNEUROPE, EUROPE, EURASIA\" },\n  { \"\ud83c\uddf5\ud83c\uddf9\", \"\ud83c\uddf5\ud83c\uddf9: pt, prt, Portugal, EU, SOUTHERNEUROPE, EUROPE, EURASIA\" },\n  { \"\ud83c\uddf7\ud83c\uddf4\", \"\ud83c\uddf7\ud83c\uddf4: ro, rou, Romania, EU, EASTERNEUROPE, EUROPE, EURASIA\" },\n  { \"\ud83c\uddf8\ud83c\uddf0\", \"\ud83c\uddf8\ud83c\uddf0: sk, svk, Slovakia, EU, EASTERNEUROPE, EUROPE, EURASIA\" },\n  { \"\ud83c\uddf8\ud83c\uddee\", \"\ud83c\uddf8\ud83c\uddee: si, svn, Slovenia, EU, EASTERNEUROPE, EUROPE, EURASIA\" },\n  { \"\ud83c\uddea\ud83c\uddf8\", \"\ud83c\uddea\ud83c\uddf8: es, esp, Spain, EU, SOUTHERNEUROPE, EUROPE, EURASIA\" },\n  { \"\ud83c\udde8\ud83c\udded\", \"\ud83c\udde8\ud83c\udded: ch, che, Switzerland, EU, WESTERNEUROPE, EUROPE, EURASIA\" },\n    unsigned char *areaflags = \"FINLAND, DENMARK, NORDIC, BALTIC, FRANCE, UK, SPAIN, EU, NORTHERNEUROPE, EASTERNEUROPE, SOUTHERNEUROPE, WESTERNEUROPE, EUROPE, EURASIA, NORTHASIA, EASTASIA, CENTRALASIA, SOUTHASIA, WESTASIA, ASIA, NORTHAFRICA, EASTAFRICA, CENTRALAFRICA, SOUTHAFRICA, WESTAFRICA, AFRICA, NORTHAMERICA, SOUTHAMERICA, USA, OCEANIA, AUSTRALASIA, MELANESIA, MICRONESIA, POLYNESIA, BRICS, ALL\", *a;<\/code><\/pre>\n\n\n\n<p>grep NORTHERNEUROPE<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>  { \"\ud83c\uddeb\ud83c\uddee\", \"\ud83c\uddeb\ud83c\uddee: fi, fin, Finland, EU, NORTHERNEUROPE, EUROPE, EURASIA, NORDIC, FINLAND\" },\n  { \"\ud83c\uddf8\ud83c\uddea\", \"\ud83c\uddf8\ud83c\uddea: se, swe, Sweden, EU, NORTHERNEUROPE, EUROPE, EURASIA, NORDIC\" },\n  { \"\ud83c\uddf3\ud83c\uddf4\", \"\ud83c\uddf3\ud83c\uddf4: no, nor, Norway, NORTHERNEUROPE, EUROPE, EURASIA, NORDIC\" },\n  { \"\ud83c\udde9\ud83c\uddf0\", \"\ud83c\udde9\ud83c\uddf0: dk, dnk, Denmark, EU, NORTHERNEUROPE, EUROPE, EURASIA, NORDIC, DENMARK\" },\n  { \"\ud83c\uddee\ud83c\uddf8\", \"\ud83c\uddee\ud83c\uddf8: is, isl, Iceland, NORTHERNEUROPE, EUROPE, EURASIA, NORDIC\" },\n  { \"\ud83c\uddea\ud83c\uddea\", \"\ud83c\uddea\ud83c\uddea: ee, est, Estonia, EU, NORTHERNEUROPE, EUROPE, EURASIA, BALTIC\" },\n  { \"\ud83c\uddf1\ud83c\uddfb\", \"\ud83c\uddf1\ud83c\uddfb: lv, lva, Latvia, EU, NORTHERNEUROPE, EUROPE, EURASIA, BALTIC\" },\n  { \"\ud83c\uddf1\ud83c\uddf9\", \"\ud83c\uddf1\ud83c\uddf9: lt, ltu, Lithuania, EU, NORTHERNEUROPE, EUROPE, EURASIA, BALTIC\" },\n    unsigned char *areaflags = \"FINLAND, DENMARK, NORDIC, BALTIC, FRANCE, UK, SPAIN, EU, NORTHERNEUROPE, EASTERNEUROPE, SOUTHERNEUROPE, WESTERNEUROPE, EUROPE, EURASIA, NORTHASIA, EASTASIA, CENTRALASIA, SOUTHASIA, WESTASIA, ASIA, NORTHAFRICA, EASTAFRICA, CENTRALAFRICA, SOUTHAFRICA, WESTAFRICA, AFRICA, NORTHAMERICA, SOUTHAMERICA, USA, OCEANIA, AUSTRALASIA, MELANESIA, MICRONESIA, POLYNESIA, BRICS, ALL\", *a;<\/code><\/pre>\n\n\n\n<p>grep EASTERNEUROPE:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>  { \"\ud83c\uddfa\ud83c\udde6\", \"\ud83c\uddfa\ud83c\udde6: ua, ukr, Ukraine, EASTERNEUROPE, EUROPE, EURASIA\" },\n  { \"\ud83c\udde6\ud83c\uddf1\", \"\ud83c\udde6\ud83c\uddf1: al, alb, Albania, EASTERNEUROPE, EUROPE, EURASIA\" },\n  { \"\ud83c\udde6\ud83c\uddf2\", \"\ud83c\udde6\ud83c\uddf2: am, arm, Armenia, EASTERNEUROPE, EUROPE, EURASIA, WESTASIA, ASIA\" },\n  { \"\ud83c\udde6\ud83c\uddff\", \"\ud83c\udde6\ud83c\uddff: az, aze, Azerbaijan, EASTERNEUROPE, EUROPE, WESTASIA, ASIA, EURASIA\" },\n  { \"\ud83c\udde7\ud83c\uddfe\", \"\ud83c\udde7\ud83c\uddfe: by, blr, Belarus, EASTERNEUROPE, EUROPE, EURASIA\" },\n  { \"\ud83c\udde7\ud83c\udde6\", \"\ud83c\udde7\ud83c\udde6: ba, bih, BosniaandHerzegovina, EASTERNEUROPE, EUROPE\" }, \/\/ Bosnia and Herzegovina\n  { \"\ud83c\udde7\ud83c\uddec\", \"\ud83c\udde7\ud83c\uddec: bg, bgr, Bulgaria, EU, EASTERNEUROPE, EUROPE, EURASIA\" },\n  { \"\ud83c\udded\ud83c\uddf7\", \"\ud83c\udded\ud83c\uddf7: hr, hrv, Croatia, EU, EASTERNEUROPE, EUROPE, EURASIA\" },\n  { \"\ud83c\udde8\ud83c\uddff\", \"\ud83c\udde8\ud83c\uddff: cz, cze, CzechRepublic, EU, EASTERNEUROPE, EUROPE, EURASIA\" },  \/\/ Czech Republic Czechia\n  { \"\ud83c\uddec\ud83c\uddea\", \"\ud83c\uddec\ud83c\uddea: ge, geo, Georgia, EASTERNEUROPE, EUROPE, EURASIA, WESTASIA, ASIA\" },\n  { \"\ud83c\udded\ud83c\uddfa\", \"\ud83c\udded\ud83c\uddfa: hu, hun, Hungary, EU, EASTERNEUROPE, EUROPE, EURASIA\" },\n  { \"\ud83c\uddf2\ud83c\udde9\", \"\ud83c\uddf2\ud83c\udde9: md, mda, Moldova, EASTERNEUROPE, EUROPE, EURASIA\" },\n  { \"\ud83c\uddf2\ud83c\uddea\", \"\ud83c\uddf2\ud83c\uddea: me, mne, Montenegro, EASTERNEUROPE, EUROPE, EURASIA\" },\n  { \"\ud83c\uddf2\ud83c\uddf0\", \"\ud83c\uddf2\ud83c\uddf0: mk, mkd, Northmacedonia, EASTERNEUROPE, EUROPE, EURASIA\" }, \/\/ North Macedonia\n  { \"\ud83c\uddf5\ud83c\uddf1\", \"\ud83c\uddf5\ud83c\uddf1: pl, pol, Poland, EU, EASTERNEUROPE, EUROPE, EURASIA\" },\n  { \"\ud83c\uddf7\ud83c\uddf4\", \"\ud83c\uddf7\ud83c\uddf4: ro, rou, Romania, EU, EASTERNEUROPE, EUROPE, EURASIA\" },\n  { \"\ud83c\uddf7\ud83c\uddfa\", \"\ud83c\uddf7\ud83c\uddfa: ru, rus, Russia, EASTERNEUROPE, EUROPE, EURASIA, NORTHASIA, ASIA, BRICS\" },\n  { \"\ud83c\uddf7\ud83c\uddf8\", \"\ud83c\uddf7\ud83c\uddf8: rs, srb, Serbia, EASTERNEUROPE, EUROPE, EURASIA\" },\n  { \"\ud83c\uddf8\ud83c\uddf0\", \"\ud83c\uddf8\ud83c\uddf0: sk, svk, Slovakia, EU, EASTERNEUROPE, EUROPE, EURASIA\" },\n  { \"\ud83c\uddf8\ud83c\uddee\", \"\ud83c\uddf8\ud83c\uddee: si, svn, Slovenia, EU, EASTERNEUROPE, EUROPE, EURASIA\" },\n    unsigned char *areaflags = \"FINLAND, DENMARK, NORDIC, BALTIC, FRANCE, UK, SPAIN, EU, NORTHERNEUROPE, EASTERNEUROPE, SOUTHERNEUROPE, WESTERNEUROPE, EUROPE, EURASIA, NORTHASIA, EASTASIA, CENTRALASIA, SOUTHASIA, WESTASIA, ASIA, NORTHAFRICA, EASTAFRICA, CENTRALAFRICA, SOUTHAFRICA, WESTAFRICA, AFRICA, NORTHAMERICA, SOUTHAMERICA, USA, OCEANIA, AUSTRALASIA, MELANESIA, MICRONESIA, POLYNESIA, BRICS, ALL\", *a;<\/code><\/pre>\n\n\n\n<p>grep SOUTHERNEUROPE:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>  { \"\ud83c\udde8\ud83c\uddfe\", \"\ud83c\udde8\ud83c\uddfe: cy, cyp, Cyprus, EU, SOUTHERNEUROPE, EUROPE, EURASIA, WESTASIA, ASIA\" },\n  { \"\ud83c\uddec\ud83c\uddf7\", \"\ud83c\uddec\ud83c\uddf7: gr, grc, Greece, EU, SOUTHERNEUROPE, EUROPE, EURASIA\" },\n  { \"\ud83c\uddee\ud83c\uddf9\", \"\ud83c\uddee\ud83c\uddf9: it, ita, Italy, EU, SOUTHERNEUROPE, EUROPE, EURASIA\" },\n  { \"\ud83c\uddfb\ud83c\udde6\", \"\ud83c\uddfb\ud83c\udde6: va, vat, Vatican, SOUTHERNEUROPE, EUROPE, EURASIA\" },\n  { \"\ud83c\uddf2\ud83c\uddf9\", \"\ud83c\uddf2\ud83c\uddf9: mt, mlt, Malta, EU, SOUTHERNEUROPE, EUROPE, EURASIA\" },\n  { \"\ud83c\uddf5\ud83c\uddf9\", \"\ud83c\uddf5\ud83c\uddf9: pt, prt, Portugal, EU, SOUTHERNEUROPE, EUROPE, EURASIA\" },\n  { \"\ud83c\uddf8\ud83c\uddf2\", \"\ud83c\uddf8\ud83c\uddf2: sm, smr, SanMarino, SOUTHERNEUROPE, EUROPE, EURASIA\" }, \/\/ San Marino\n  { \"\ud83c\uddea\ud83c\uddf8\", \"\ud83c\uddea\ud83c\uddf8: es, esp, Spain, EU, SOUTHERNEUROPE, EUROPE, EURASIA\" },\n  { \"\ud83c\uddf9\ud83c\uddf7\", \"\ud83c\uddf9\ud83c\uddf7: tr, tur, Turkey, SOUTHERNEUROPE, EUROPE, EURASIA, WESTASIA, ASIA\" },\n    unsigned char *areaflags = \"FINLAND, DENMARK, NORDIC, BALTIC, FRANCE, UK, SPAIN, EU, NORTHERNEUROPE, EASTERNEUROPE, SOUTHERNEUROPE, WESTERNEUROPE, EUROPE, EURASIA, NORTHASIA, EASTASIA, CENTRALASIA, SOUTHASIA, WESTASIA, ASIA, NORTHAFRICA, EASTAFRICA, CENTRALAFRICA, SOUTHAFRICA, WESTAFRICA, AFRICA, NORTHAMERICA, SOUTHAMERICA, USA, OCEANIA, AUSTRALASIA, MELANESIA, MICRONESIA, POLYNESIA, BRICS, ALL\", *a;<\/code><\/pre>\n\n\n\n<p>grep WESTERNEUROPE<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>  { \"\ud83c\udde6\ud83c\udde9\", \"\ud83c\udde6\ud83c\udde9: ad, and, Andorra, WESTERNEUROPE, EUROPE, EURASIA\" },\n  { \"\ud83c\udde6\ud83c\uddf9\", \"\ud83c\udde6\ud83c\uddf9: at, aut, Austria, EU, WESTERNEUROPE, EUROPE, EURASIA\" },\n  { \"\ud83c\udde7\ud83c\uddea\", \"\ud83c\udde7\ud83c\uddea: be, bel, Belgium, EU, WESTERNEUROPE, EUROPE, EURASIA\" },\n  { \"\ud83c\uddeb\ud83c\uddf7\", \"\ud83c\uddeb\ud83c\uddf7: fr, fra, France, EU, WESTERNEUROPE, EUROPE, EURASIA\" },\n  { \"\ud83c\udde9\ud83c\uddea\", \"\ud83c\udde9\ud83c\uddea: de, deu, Germany, EU, WESTERNEUROPE, EUROPE, EURASIA\" },\n  { \"\ud83c\uddee\ud83c\uddea\", \"\ud83c\uddee\ud83c\uddea: ie, irl, Ireland, UK, EU, WESTERNEUROPE, EUROPE, EURASIA\" },\n  { \"\ud83c\uddf1\ud83c\uddee\", \"\ud83c\uddf1\ud83c\uddee: li, lie, Liechtenstein, WESTERNEUROPE, EUROPE, EURASIA\" },\n  { \"\ud83c\uddf1\ud83c\uddfa\", \"\ud83c\uddf1\ud83c\uddfa: lu, lux, Luxembourg, EU, WESTERNEUROPE, EUROPE, EURASIA\" },\n  { \"\ud83c\uddf2\ud83c\udde8\", \"\ud83c\uddf2\ud83c\udde8: mc, mco, Monaco, WESTERNEUROPE, EUROPE, EURASIA\" },\n  { \"\ud83c\uddf3\ud83c\uddf1\", \"\ud83c\uddf3\ud83c\uddf1: nl, nld, Netherlands, EU, WESTERNEUROPE, EUROPE, EURASIA\" },\n  { \"\ud83c\udde8\ud83c\udded\", \"\ud83c\udde8\ud83c\udded: ch, che, Switzerland, EU, WESTERNEUROPE, EUROPE, EURASIA\" },\n  { \"\ud83c\uddec\ud83c\udde7\", \"\ud83c\uddec\ud83c\udde7: gb, gbr, UnitedKingdom, UK, WESTERNEUROPE, EUROPE, EURASIA\" },\n    unsigned char *areaflags = \"FINLAND, DENMARK, NORDIC, BALTIC, FRANCE, UK, SPAIN, EU, NORTHERNEUROPE, EASTERNEUROPE, SOUTHERNEUROPE, WESTERNEUROPE, EUROPE, EURASIA, NORTHASIA, EASTASIA, CENTRALASIA, SOUTHASIA, WESTASIA, ASIA, NORTHAFRICA, EASTAFRICA, CENTRALAFRICA, SOUTHAFRICA, WESTAFRICA, AFRICA, NORTHAMERICA, SOUTHAMERICA, USA, OCEANIA, AUSTRALASIA, MELANESIA, MICRONESIA, POLYNESIA, BRICS, ALL\", *a;<\/code><\/pre>\n\n\n\n<p>grep ALL tuo seuraavat rivit: (n\u00e4iss\u00e4 voi muuten olla virheit\u00e4, aika kauan yritin aikanaan tehd\u00e4 ja tarkistaa niit\u00e4\u2026)<\/p>\n\n\n\n<p>T\u00e4ss\u00e4 kaikki arkistoni liput:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>  { \"\ud83c\uddeb\ud83c\uddee\", \"\ud83c\uddeb\ud83c\uddee: fi, fin, Finland, EU, NORTHERNEUROPE, EUROPE, EURASIA, NORDIC, FINLAND\" },\n  { \"\ud83c\udde6\ud83c\uddfd\", \"\ud83c\udde6\ud83c\uddfd: ax, ala, \u00c5land, aland, NORDIC, FINLAND\" },\n  { \"\ud83c\uddf8\ud83c\uddea\", \"\ud83c\uddf8\ud83c\uddea: se, swe, Sweden, EU, NORTHERNEUROPE, EUROPE, EURASIA, NORDIC\" },\n  { \"\ud83c\uddf3\ud83c\uddf4\", \"\ud83c\uddf3\ud83c\uddf4: no, nor, Norway, NORTHERNEUROPE, EUROPE, EURASIA, NORDIC\" },\n  { \"\ud83c\udde9\ud83c\uddf0\", \"\ud83c\udde9\ud83c\uddf0: dk, dnk, Denmark, EU, NORTHERNEUROPE, EUROPE, EURASIA, NORDIC, DENMARK\" },\n  { \"\ud83c\uddeb\ud83c\uddf4\", \"\ud83c\uddeb\ud83c\uddf4: fo, fro, FaroeIslands, NORDIC, DENMARK\" },\n  { \"\ud83c\uddee\ud83c\uddf8\", \"\ud83c\uddee\ud83c\uddf8: is, isl, Iceland, NORTHERNEUROPE, EUROPE, EURASIA, NORDIC\" },\n  { \"\ud83c\uddec\ud83c\uddf1\", \"\ud83c\uddec\ud83c\uddf1: gl, grl, Greenland, NORTHAMERICA, NORDIC, DENMARK\" },\n  { \"\ud83c\uddea\ud83c\uddea\", \"\ud83c\uddea\ud83c\uddea: ee, est, Estonia, EU, NORTHERNEUROPE, EUROPE, EURASIA, BALTIC\" },\n  { \"\ud83c\uddf1\ud83c\uddfb\", \"\ud83c\uddf1\ud83c\uddfb: lv, lva, Latvia, EU, NORTHERNEUROPE, EUROPE, EURASIA, BALTIC\" },\n  { \"\ud83c\uddf1\ud83c\uddf9\", \"\ud83c\uddf1\ud83c\uddf9: lt, ltu, Lithuania, EU, NORTHERNEUROPE, EUROPE, EURASIA, BALTIC\" },\n  { \"\ud83c\uddfa\ud83c\udde6\", \"\ud83c\uddfa\ud83c\udde6: ua, ukr, Ukraine, EASTERNEUROPE, EUROPE, EURASIA\" },\n  { \"\ud83c\udde6\ud83c\uddf1\", \"\ud83c\udde6\ud83c\uddf1: al, alb, Albania, EASTERNEUROPE, EUROPE, EURASIA\" },\n  { \"\ud83c\udde6\ud83c\udde9\", \"\ud83c\udde6\ud83c\udde9: ad, and, Andorra, WESTERNEUROPE, EUROPE, EURASIA\" },\n  { \"\ud83c\udde6\ud83c\uddf2\", \"\ud83c\udde6\ud83c\uddf2: am, arm, Armenia, EASTERNEUROPE, EUROPE, EURASIA, WESTASIA, ASIA\" },\n  { \"\ud83c\udde6\ud83c\uddf9\", \"\ud83c\udde6\ud83c\uddf9: at, aut, Austria, EU, WESTERNEUROPE, EUROPE, EURASIA\" },\n  { \"\ud83c\udde6\ud83c\uddff\", \"\ud83c\udde6\ud83c\uddff: az, aze, Azerbaijan, EASTERNEUROPE, EUROPE, WESTASIA, ASIA, EURASIA\" },\n  { \"\ud83c\udde7\ud83c\uddfe\", \"\ud83c\udde7\ud83c\uddfe: by, blr, Belarus, EASTERNEUROPE, EUROPE, EURASIA\" },\n  { \"\ud83c\udde7\ud83c\uddea\", \"\ud83c\udde7\ud83c\uddea: be, bel, Belgium, EU, WESTERNEUROPE, EUROPE, EURASIA\" },\n  { \"\ud83c\udde7\ud83c\udde6\", \"\ud83c\udde7\ud83c\udde6: ba, bih, BosniaandHerzegovina, EASTERNEUROPE, EUROPE\" }, \/\/ Bosnia and Herzegovina\n  { \"\ud83c\udde7\ud83c\uddec\", \"\ud83c\udde7\ud83c\uddec: bg, bgr, Bulgaria, EU, EASTERNEUROPE, EUROPE, EURASIA\" },\n  { \"\ud83c\udded\ud83c\uddf7\", \"\ud83c\udded\ud83c\uddf7: hr, hrv, Croatia, EU, EASTERNEUROPE, EUROPE, EURASIA\" },\n  { \"\ud83c\udde8\ud83c\uddfe\", \"\ud83c\udde8\ud83c\uddfe: cy, cyp, Cyprus, EU, SOUTHERNEUROPE, EUROPE, EURASIA, WESTASIA, ASIA\" },\n  { \"\ud83c\udde8\ud83c\uddff\", \"\ud83c\udde8\ud83c\uddff: cz, cze, CzechRepublic, EU, EASTERNEUROPE, EUROPE, EURASIA\" },  \/\/ Czech Republic Czechia\n  { \"\ud83c\uddeb\ud83c\uddf7\", \"\ud83c\uddeb\ud83c\uddf7: fr, fra, France, EU, WESTERNEUROPE, EUROPE, EURASIA\" },\n  { \"\ud83c\uddec\ud83c\uddea\", \"\ud83c\uddec\ud83c\uddea: ge, geo, Georgia, EASTERNEUROPE, EUROPE, EURASIA, WESTASIA, ASIA\" },\n  { \"\ud83c\udde9\ud83c\uddea\", \"\ud83c\udde9\ud83c\uddea: de, deu, Germany, EU, WESTERNEUROPE, EUROPE, EURASIA\" },\n  { \"\ud83c\uddec\ud83c\uddf7\", \"\ud83c\uddec\ud83c\uddf7: gr, grc, Greece, EU, SOUTHERNEUROPE, EUROPE, EURASIA\" },\n  { \"\ud83c\udded\ud83c\uddfa\", \"\ud83c\udded\ud83c\uddfa: hu, hun, Hungary, EU, EASTERNEUROPE, EUROPE, EURASIA\" },\n  { \"\ud83c\uddee\ud83c\uddea\", \"\ud83c\uddee\ud83c\uddea: ie, irl, Ireland, UK, EU, WESTERNEUROPE, EUROPE, EURASIA\" },\n  { \"\ud83c\uddee\ud83c\uddf9\", \"\ud83c\uddee\ud83c\uddf9: it, ita, Italy, EU, SOUTHERNEUROPE, EUROPE, EURASIA\" },\n  { \"\ud83c\uddfb\ud83c\udde6\", \"\ud83c\uddfb\ud83c\udde6: va, vat, Vatican, SOUTHERNEUROPE, EUROPE, EURASIA\" },\n  { \"\ud83c\uddf0\ud83c\uddff\", \"\ud83c\uddf0\ud83c\uddff: kz, kaz, Kazakhstan, EUROPE, EURASIA, CENTRALASIA, ASIA\" },\n  { \"\ud83c\uddf1\ud83c\uddee\", \"\ud83c\uddf1\ud83c\uddee: li, lie, Liechtenstein, WESTERNEUROPE, EUROPE, EURASIA\" },\n  { \"\ud83c\uddf1\ud83c\uddfa\", \"\ud83c\uddf1\ud83c\uddfa: lu, lux, Luxembourg, EU, WESTERNEUROPE, EUROPE, EURASIA\" },\n  { \"\ud83c\uddf2\ud83c\uddf9\", \"\ud83c\uddf2\ud83c\uddf9: mt, mlt, Malta, EU, SOUTHERNEUROPE, EUROPE, EURASIA\" },\n  { \"\ud83c\uddf2\ud83c\udde9\", \"\ud83c\uddf2\ud83c\udde9: md, mda, Moldova, EASTERNEUROPE, EUROPE, EURASIA\" },\n  { \"\ud83c\uddf2\ud83c\uddea\", \"\ud83c\uddf2\ud83c\uddea: me, mne, Montenegro, EASTERNEUROPE, EUROPE, EURASIA\" },\n  { \"\ud83c\uddf2\ud83c\udde8\", \"\ud83c\uddf2\ud83c\udde8: mc, mco, Monaco, WESTERNEUROPE, EUROPE, EURASIA\" },\n  { \"\ud83c\uddf2\ud83c\uddea\", \"\ud83c\uddf2\ud83c\uddea: me, mne, Montenegro, EUROPE, EURASIA\" },\n  { \"\ud83c\uddf3\ud83c\uddf1\", \"\ud83c\uddf3\ud83c\uddf1: nl, nld, Netherlands, EU, WESTERNEUROPE, EUROPE, EURASIA\" },\n  { \"\ud83c\uddf2\ud83c\uddf0\", \"\ud83c\uddf2\ud83c\uddf0: mk, mkd, Northmacedonia, EASTERNEUROPE, EUROPE, EURASIA\" }, \/\/ North Macedonia\n  { \"\ud83c\uddf5\ud83c\uddf1\", \"\ud83c\uddf5\ud83c\uddf1: pl, pol, Poland, EU, EASTERNEUROPE, EUROPE, EURASIA\" },\n  { \"\ud83c\uddf5\ud83c\uddf9\", \"\ud83c\uddf5\ud83c\uddf9: pt, prt, Portugal, EU, SOUTHERNEUROPE, EUROPE, EURASIA\" },\n  { \"\ud83c\uddf7\ud83c\uddf4\", \"\ud83c\uddf7\ud83c\uddf4: ro, rou, Romania, EU, EASTERNEUROPE, EUROPE, EURASIA\" },\n  { \"\ud83c\uddf7\ud83c\uddfa\", \"\ud83c\uddf7\ud83c\uddfa: ru, rus, Russia, EASTERNEUROPE, EUROPE, EURASIA, NORTHASIA, ASIA, BRICS\" },\n  { \"\ud83c\uddf8\ud83c\uddf2\", \"\ud83c\uddf8\ud83c\uddf2: sm, smr, SanMarino, SOUTHERNEUROPE, EUROPE, EURASIA\" }, \/\/ San Marino\n  { \"\ud83c\uddf7\ud83c\uddf8\", \"\ud83c\uddf7\ud83c\uddf8: rs, srb, Serbia, EASTERNEUROPE, EUROPE, EURASIA\" },\n  { \"\ud83c\uddf8\ud83c\uddf0\", \"\ud83c\uddf8\ud83c\uddf0: sk, svk, Slovakia, EU, EASTERNEUROPE, EUROPE, EURASIA\" },\n  { \"\ud83c\uddf8\ud83c\uddee\", \"\ud83c\uddf8\ud83c\uddee: si, svn, Slovenia, EU, EASTERNEUROPE, EUROPE, EURASIA\" },\n  { \"\ud83c\uddea\ud83c\uddf8\", \"\ud83c\uddea\ud83c\uddf8: es, esp, Spain, EU, SOUTHERNEUROPE, EUROPE, EURASIA\" },\n  { \"\ud83c\udde8\ud83c\udded\", \"\ud83c\udde8\ud83c\udded: ch, che, Switzerland, EU, WESTERNEUROPE, EUROPE, EURASIA\" },\n  { \"\ud83c\uddf9\ud83c\uddf7\", \"\ud83c\uddf9\ud83c\uddf7: tr, tur, Turkey, SOUTHERNEUROPE, EUROPE, EURASIA, WESTASIA, ASIA\" },\n  { \"\ud83c\uddec\ud83c\udde7\", \"\ud83c\uddec\ud83c\udde7: gb, gbr, UnitedKingdom, UK, WESTERNEUROPE, EUROPE, EURASIA\" },\n  { \"\ud83c\uddee\ud83c\uddea\", \"\ud83c\uddee\ud83c\uddea: gb, gbr, England, UK\" },\n  { \"\ud83c\uddee\ud83c\uddea\", \"\ud83c\uddee\ud83c\uddea: gb, gbr, Scotland, UK\" },\n  { \"\ud83c\uddee\ud83c\uddea\", \"\ud83c\uddee\ud83c\uddea: gb, gbr, Wales, UK\" },\n  { \"\ud83c\uddec\ud83c\uddee\", \"\ud83c\uddec\ud83c\uddee: gi, gib, Gibraltar, UK\" },\n  { \"\ud83c\uddf8\ud83c\uddef\", \"\ud83c\uddf8\ud83c\uddef: sj, sjm, JanMayen, NORWAY\" }, \/\/ Jan Mayen\n  { \"\ud83c\udde6\ud83c\uddee\", \"\ud83c\udde6\ud83c\uddee: ai, aia, Anguilla, NORTHAMERICA, UK\" },\n  { \"\ud83c\udde6\ud83c\uddec\", \"\ud83c\udde6\ud83c\uddec: ag, atg, AntiguaAndBarbuda, NORTHAMERICA\" }, \/\/ Antigua and Barbuda \n  { \"\ud83c\udde6\ud83c\uddfc\", \"\ud83c\udde6\ud83c\uddfc: aw, sbw, Aruba, NORTHAMERICA\" }, \n  { \"\ud83c\udde7\ud83c\uddf8\", \"\ud83c\udde7\ud83c\uddf8: bs, bhs, Bahamas, NORTHAMERICA\" },\n  { \"\ud83c\udde7\ud83c\udde7\", \"\ud83c\udde7\ud83c\udde7: bb, brb, Barbados, NORTHAMERICA\" },\n  { \"\ud83c\udde7\ud83c\uddff\", \"\ud83c\udde7\ud83c\uddff: bz, blz, Belize, NORTHAMERICA\" },\n  { \"\ud83c\udde7\ud83c\uddf2\", \"\ud83c\udde7\ud83c\uddf2: bm, bmu, Bermuda, UK, NORTHAMERICA\" },\n  { \"\ud83c\udde7\ud83c\uddf6\", \"\ud83c\udde7\ud83c\uddf6: bq, bes, Bonaire, NETHERLANDS, NORTHAMERICA\" },\n  { \"\ud83c\uddfb\ud83c\uddec\", \"\ud83c\uddfb\ud83c\uddec: vg, vgb, BritishVirginIslands, UK, NORTHAMERICA\" }, \/\/ British Virgin Islands\n  { \"\ud83c\udde8\ud83c\udde6\", \"\ud83c\udde8\ud83c\udde6: ca, can, Canada, NORTHAMERICA\" },\n  { \"\ud83c\uddf0\ud83c\uddfe\", \"\ud83c\uddf0\ud83c\uddfe: ky, cym, CaymanIslands, UK, NORTHAMERICA\" },\n  { \"\ud83c\uddeb\ud83c\uddf7\", \"\ud83c\uddeb\ud83c\uddf7: fr, fra, ClippertonIsland, FRANCE, NORTHAMERICA\" },\n  { \"\ud83c\udde8\ud83c\uddf7\", \"\ud83c\udde8\ud83c\uddf7: cr, cri, CostaRica, NORTHAMERICA\" },\n  { \"\ud83c\udde8\ud83c\uddfa\", \"\ud83c\udde8\ud83c\uddfa: cu, cub, Cuba, NORTHAMERICA\" },\n  { \"\ud83c\udde8\ud83c\uddfc\", \"\ud83c\udde8\ud83c\uddfc: cw, cuw, Cura\u00e7ao, curacao, NORTHAMERICA\" },\n  { \"\ud83c\udde9\ud83c\uddf2\", \"\ud83c\udde9\ud83c\uddf2: dm, dma, Dominica, NORTHAMERICA\" },\n  { \"\ud83c\udde9\ud83c\uddf4\", \"\ud83c\udde9\ud83c\uddf4: do, dom, DominicanRepublic, NORTHAMERICA\" }, \/\/ Dominican Republic\n  { \"\ud83c\uddf8\ud83c\uddfb\", \"\ud83c\uddf8\ud83c\uddfb: sv, slv, ElSalvador, NORTHAMERICA\" },\n  { \"\ud83c\uddec\ud83c\uddf1\", \"\ud83c\uddec\ud83c\uddf1: gl, grl, Greenland, DENMARK, NORTHAMERICA\" },\n  { \"\ud83c\uddec\ud83c\udde9\", \"\ud83c\uddec\ud83c\udde9: gd, grd, Grenada, NORTHAMERICA\" },\n  { \"\ud83c\uddec\ud83c\uddf5\", \"\ud83c\uddec\ud83c\uddf5: gp, glp, Guadeloupe, FRANCE, NORTHAMERICA\" },\n  { \"\ud83c\uddec\ud83c\uddf9\", \"\ud83c\uddec\ud83c\uddf9: gt, gtm, Guatemala, NORTHAMERICA\" },\n  { \"\ud83c\udded\ud83c\uddf9\", \"\ud83c\udded\ud83c\uddf9: ht, hti, Haiti, NORTHAMERICA\" },\n  { \"\ud83c\udded\ud83c\uddf3\", \"\ud83c\udded\ud83c\uddf3: hn, hnd, Honduras, NORTHAMERICA\" },\n  { \"\ud83c\uddef\ud83c\uddf2\", \"\ud83c\uddef\ud83c\uddf2: jm, jam, Jamaica, NORTHAMERICA\" },\n  { \"\ud83c\uddf2\ud83c\uddf6\", \"\ud83c\uddf2\ud83c\uddf6: mq, mtq, Martinique, FRANCE, NORTHAMERICA\" },\n  { \"\ud83c\uddf2\ud83c\uddfd\", \"\ud83c\uddf2\ud83c\uddfd: mx, mex, Mexico, NORTHAMERICA\" },\n  { \"\ud83c\uddf2\ud83c\uddf8\", \"\ud83c\uddf2\ud83c\uddf8: ms, msr, Montserrat, UK, NORTHAMERICA\" },\n  { \"\ud83c\uddf3\ud83c\uddee\", \"\ud83c\uddf3\ud83c\uddee: ni, nic, Nicaragua, NORTHAMERICA\" },\n  { \"\ud83c\uddf5\ud83c\udde6\", \"\ud83c\uddf5\ud83c\udde6: pa, pan, Panama, NORTHAMERICA\" },\n  { \"\ud83c\uddf5\ud83c\uddf7\", \"\ud83c\uddf5\ud83c\uddf7: pr, pri, PuertoRico, NORTHAMERICA\" },\n  { \"\ud83c\udde7\ud83c\uddf6\", \"\ud83c\udde7\ud83c\uddf6: bq, bes, Saba, NORTHAMERICA\" },\n  { \"\ud83c\udde7\ud83c\uddf1\", \"\ud83c\udde7\ud83c\uddf1: bl, blm, SaintBarth\u00e9lemy, saintbarthelemy, NORTHAMERICA\" }, \/\/ Saint Barth\u00e9lemy\n  { \"\ud83c\uddf0\ud83c\uddf3\", \"\ud83c\uddf0\ud83c\uddf3: kn, kna, SaintKitts, NORTHAMERICA\" }, \/\/ Saint Kitts and Nevis\n  { \"\ud83c\uddf1\ud83c\udde8\", \"\ud83c\uddf1\ud83c\udde8: lc, lca, SaintLucia, NORTHAMERICA\" }, \/\/ Saint Lucia\n  { \"\ud83c\uddf2\ud83c\uddeb\", \"\ud83c\uddf2\ud83c\uddeb: mf, maf, SaintMartin, NORTHAMERICA\" }, \/\/ Collectivity of Saint Martin\n  { \"\ud83c\uddf8\ud83c\uddfd\", \"\ud83c\uddf8\ud83c\uddfd: sx, sxm, SintMaarten, NORTHAMERICA\" }, \/\/ Sint Maarten\n  { \"\ud83c\uddf9\ud83c\uddf9\", \"\ud83c\uddf9\ud83c\uddf9: tt, tto, TrinidadandTobago, NORTHAMERICA\" }, \/\/ Trinidad and Tobago\n  { \"\ud83c\uddf9\ud83c\udde8\", \"\ud83c\uddf9\ud83c\udde8: tc, tca, TurksandCaicos, UK, NORTHAMERICA\" }, \/\/ Turks and Caicos Islands\n  { \"\ud83c\uddf5\ud83c\uddf2\", \"\ud83c\uddf5\ud83c\uddf2: pm, spm, SaintPierre, NORTHAMERICA\" }, \/\/ Saint Pierre and Miquelon\n  { \"\ud83c\uddfb\ud83c\udde8\", \"\ud83c\uddfb\ud83c\udde8: vc, vct, SaintVincent, NORTHAMERICA\" }, \/\/ Saint Vincent and the Grenadines\n  { \"\ud83c\uddfa\ud83c\uddf8\", \"\ud83c\uddfa\ud83c\uddf8: us, usa, UnitedStatesofAmerica, USA, NORTHAMERICA\" }, \/\/ United States of America\n  { \"\ud83c\uddfb\ud83c\uddee\", \"\ud83c\uddfb\ud83c\uddee: vi, vir, VirginIslands, USA, NORTHAMERICA\" }, \/\/ United States Virgin Islands\n  { \"\ud83c\udde7\ud83c\uddfb\", \"\ud83c\udde7\ud83c\uddfb: bv, bvt, BouvetIsland\" }, \/\/ Bouvet Island\n  { \"\ud83c\uddfa\ud83c\uddf2\", \"\ud83c\uddfa\ud83c\uddf2: um, umi, Navassa\" },\n  { \"\ud83c\uddf8\ud83c\udded\", \"\ud83c\uddf8\ud83c\udded: sh, shn, SaintHelena\" }, \/\/ Saint Helena\n  { \"\ud83c\udde6\ud83c\uddf7\", \"\ud83c\udde6\ud83c\uddf7: ar, arg, Argentina, SOUTHAMERICA\" },\n  { \"\ud83c\udde7\ud83c\uddf4\", \"\ud83c\udde7\ud83c\uddf4: bo, bol, Bolivia, SOUTHAMERICA\" },\n  { \"\ud83c\udde7\ud83c\uddf7\", \"\ud83c\udde7\ud83c\uddf7: br, bra, Brazil, SOUTHAMERICA, BRICS\" },\n  { \"\ud83c\udde8\ud83c\uddf1\", \"\ud83c\udde8\ud83c\uddf1: cl, chl, Chile, SOUTHAMERICA\" },\n  { \"\ud83c\udde8\ud83c\uddf4\", \"\ud83c\udde8\ud83c\uddf4: co, col, Colombia, SOUTHAMERICA\" },\n  { \"\ud83c\uddea\ud83c\udde8\", \"\ud83c\uddea\ud83c\udde8: ec, ecu, Ecuador, SOUTHAMERICA\" },\n  { \"\ud83c\uddeb\ud83c\uddf0\", \"\ud83c\uddeb\ud83c\uddf0: fk, flk, FalklandIslands, UK, SOUTHAMERICA\" }, \/\/ Falkland Islands\n  { \"\ud83c\uddec\ud83c\uddeb\", \"\ud83c\uddec\ud83c\uddeb: gf, guf, FrenchGuiana, SOUTHAMERICA, FRANCE\" }, \/\/ French Guiana\n  { \"\ud83c\uddec\ud83c\uddfe\", \"\ud83c\uddec\ud83c\uddfe: gy, guy, Guyana, SOUTHAMERICA\" },\n  { \"\ud83c\uddf5\ud83c\uddfe\", \"\ud83c\uddf5\ud83c\uddfe: py, pry, Paraguay, SOUTHAMERICA\" },\n  { \"\ud83c\uddf5\ud83c\uddea\", \"\ud83c\uddf5\ud83c\uddea: pe, per, Peru, SOUTHAMERICA\" },\n  { \"\ud83c\uddec\ud83c\uddf8\", \"\ud83c\uddec\ud83c\uddf8: gs, sgs, SouthGeorgia, SOUTHAMERICA\" }, \/\/ South Georgia and the South Sandwich Islands\n  { \"\ud83c\uddf8\ud83c\uddf7\", \"\ud83c\uddf8\ud83c\uddf7: sr, sur, Suriname, SOUTHAMERICA\" },\n  { \"\ud83c\uddfa\ud83c\uddfe\", \"\ud83c\uddfa\ud83c\uddfe: uy, ury, Uruguay, SOUTHAMERICA\" },\n  { \"\ud83c\uddfb\ud83c\uddea\", \"\ud83c\uddfb\ud83c\uddea: ve, ven, Venezuela, SOUTHAMERICA\" },\n  { \"\ud83c\udde6\ud83c\uddea\", \"\ud83c\udde6\ud83c\uddea: ae, are, UnitedArabEmirates, WESTASIA, ASIA, EURASIA\" }, \/\/ United Arab Emirates\n  { \"\ud83c\udde6\ud83c\uddeb\", \"\ud83c\udde6\ud83c\uddeb: af, afg, Afghanistan, SOUTHASIA, ASIA, EURASIA\" },\n  { \"\ud83c\udde7\ud83c\udde9\", \"\ud83c\udde7\ud83c\udde9: bd, bgd, Bangladesh, SOUTHASIA, ASIA, EURASIA\" },\n  { \"\ud83c\udde7\ud83c\udded\", \"\ud83c\udde7\ud83c\udded: bh, bhr, Bahrain, EASTASIA, ASIA, EURASIA\" },\n  { \"\ud83c\udde7\ud83c\uddf3\", \"\ud83c\udde7\ud83c\uddf3: bn, brn, Brunei, ASIA, EURASIA\" },\n  { \"\ud83c\udde7\ud83c\uddf9\", \"\ud83c\udde7\ud83c\uddf9: bt, btn, Bhutan, SOUTHASIA, ASIA, EURASIA\" },\n  { \"\ud83c\udde8\ud83c\uddf3\", \"\ud83c\udde8\ud83c\uddf3: cn, chn, China, EASTASIA, ASIA, EURASIA, BRICS\" },\n  { \"\ud83c\udded\ud83c\uddf0\", \"\ud83c\udded\ud83c\uddf0: hk, hkg, HongKong, EASTASIA, ASIA, EURASIA\" },\n  { \"\ud83c\uddee\ud83c\udde9\", \"\ud83c\uddee\ud83c\udde9: id, idn, Indonesia, ASIA, EURASIA\" },\n  { \"\ud83c\uddee\ud83c\uddf1\", \"\ud83c\uddee\ud83c\uddf1: il, isr, Israel, WESTASIA, ASIA, EURASIA\" },\n  { \"\ud83c\uddee\ud83c\uddf3\", \"\ud83c\uddee\ud83c\uddf3: in, ind, India, SOUTHASIA, ASIA, EURASIA, BRICS\" },\n  { \"\ud83c\uddee\ud83c\uddf6\", \"\ud83c\uddee\ud83c\uddf6: iq, irq, Iraq, WESTASIA, ASIA, EURASIA\" },\n  { \"\ud83c\uddee\ud83c\uddf7\", \"\ud83c\uddee\ud83c\uddf7: ir, irn, Iran, WESTASIA, ASIA, EURASIA\" },\n  { \"\ud83c\uddef\ud83c\uddf4\", \"\ud83c\uddef\ud83c\uddf4: jo, jor, Jordan, WESTASIA, ASIA, EURASIA\" },\n  { \"\ud83c\uddef\ud83c\uddf5\", \"\ud83c\uddef\ud83c\uddf5: jp, jpn, Japan, EASTASIA, ASIA, EURASIA\" },\n  { \"\ud83c\uddf0\ud83c\uddec\", \"\ud83c\uddf0\ud83c\uddec: kg, kgz, Kyrgyzstan, CENTRALASIA, ASIA, EURASIA\" },\n  { \"\ud83c\uddf0\ud83c\udded\", \"\ud83c\uddf0\ud83c\udded: kh, khm, Cambodia, ASIA, EURASIA\" },\n  { \"\ud83c\uddf0\ud83c\uddf7\", \"\ud83c\uddf0\ud83c\uddf7: kr, kor, SouthKorea, EASTASIA, ASIA, EURASIA\" },\n  { \"\ud83c\uddf0\ud83c\uddfc\", \"\ud83c\uddf0\ud83c\uddfc: kw, kwt, Kuwait, WESTASIA, ASIA, EURASIA\" },\n  { \"\ud83c\uddf1\ud83c\udde6\", \"\ud83c\uddf1\ud83c\udde6: la, lao, Laos, ASIA, EURASIA\" },\n  { \"\ud83c\uddf1\ud83c\udde7\", \"\ud83c\uddf1\ud83c\udde7: lb, lbn, Lebanon, WESTASIA, ASIA, EURASIA\" },\n  { \"\ud83c\uddf1\ud83c\uddf0\", \"\ud83c\uddf1\ud83c\uddf0: lk, lka, SriLanka, SOUTHASIA, ASIA, EURASIA\" },\n  { \"\ud83c\uddf2\ud83c\uddf3\", \"\ud83c\uddf2\ud83c\uddf3: mn, mng, Mongolia, EASTASIA, ASIA, EURASIA\" },\n  { \"\ud83c\uddf2\ud83c\uddf4\", \"\ud83c\uddf2\ud83c\uddf4: mo, mac, Macao, EASTASIA, ASIA, EURASIA\" },\n  { \"\ud83c\uddf2\ud83c\uddfb\", \"\ud83c\uddf2\ud83c\uddfb: mv, mdv, Maldives, SOUTHASIA, ASIA, EURASIA\" },\n  { \"\ud83c\uddf2\ud83c\uddf2\", \"\ud83c\uddf2\ud83c\uddf2: mm, mmr, Myanmar, ASIA, EURASIA\" },\n  { \"\ud83c\uddf2\ud83c\uddfe\", \"\ud83c\uddf2\ud83c\uddfe: my, mys, Malaysia, ASIA, EURASIA\" },\n  { \"\ud83c\uddf0\ud83c\uddf5\", \"\ud83c\uddf0\ud83c\uddf5: kp, prk, NorthKorea, EASTASIA, ASIA, EURASIA\" },\n  { \"\ud83c\uddf3\ud83c\uddf5\", \"\ud83c\uddf3\ud83c\uddf5: np, npl, Nepal, SOUTHASIA, ASIA, EURASIA\" },\n  { \"\ud83c\uddf4\ud83c\uddf2\", \"\ud83c\uddf4\ud83c\uddf2: om, omn, Oman, WESTASIA, ASIA, EURASIA\" },\n  { \"\ud83c\uddf5\ud83c\udded\", \"\ud83c\uddf5\ud83c\udded: ph, phl, Philippines, ASIA, EURASIA\" },\n  { \"\ud83c\uddf5\ud83c\uddf0\", \"\ud83c\uddf5\ud83c\uddf0: pk, pak, Pakistan, SOUTHASIA, ASIA, EURASIA\" },\n  { \"\ud83c\uddf5\ud83c\uddf8\", \"\ud83c\uddf5\ud83c\uddf8: ps, pse, Palestine, WESTASIA, ASIA, EURASIA\" },\n  { \"\ud83c\uddf6\ud83c\udde6\", \"\ud83c\uddf6\ud83c\udde6: qa, qat, Qatar, WESTASIA, ASIA, EURASIA\" },\n  { \"\ud83c\uddf8\ud83c\udde6\", \"\ud83c\uddf8\ud83c\udde6: sa, sau, SaudiArabia, WESTASIA, ASIA, EURASIA\" },\n  { \"\ud83c\uddf8\ud83c\uddec\", \"\ud83c\uddf8\ud83c\uddec: sg, sgb, Singapore, ASIA, EURASIA\" },\n  { \"\ud83c\uddf8\ud83c\uddfe\", \"\ud83c\uddf8\ud83c\uddfe: sy, syr, Syria, WESTASIA, ASIA, EURASIA\" },\n  { \"\ud83c\uddf9\ud83c\udded\", \"\ud83c\uddf9\ud83c\udded: th, tha, Thailand, ASIA, EURASIA\" },\n  { \"\ud83c\uddf9\ud83c\uddef\", \"\ud83c\uddf9\ud83c\uddef: tj, tjk, Tajikistan, CENTRALASIA, ASIA, EURASIA\" },\n  { \"\ud83c\uddf9\ud83c\uddf1\", \"\ud83c\uddf9\ud83c\uddf1: tl, tls, EastTimor, ASIA, EURASIA\" },\n  { \"\ud83c\uddf9\ud83c\uddf2\", \"\ud83c\uddf9\ud83c\uddf2: tm, tkm, Turkmenistan, CENTRALASIA, ASIA, EURASIA\" },\n  { \"\ud83c\uddf9\ud83c\uddfc\", \"\ud83c\uddf9\ud83c\uddfc: tw, twn, Taiwan, EASTASIA, ASIA, EURASIA\" },\n  { \"\ud83c\uddfa\ud83c\uddff\", \"\ud83c\uddfa\ud83c\uddff: uz, uzb, Uzbekistan, CENTRALASIA, ASIA, EURASIA\" },\n  { \"\ud83c\uddfb\ud83c\uddf3\", \"\ud83c\uddfb\ud83c\uddf3: vn, vnm, Vietnam, ASIA, EURASIA\" },\n  { \"\ud83c\uddfe\ud83c\uddea\", \"\ud83c\uddfe\ud83c\uddea: ye, yem, Yemen, WESTASIA, ASIA, EURASIA\" },\n  { \"\ud83c\uddf3\ud83c\uddea\", \"\ud83c\uddf3\ud83c\uddea: ne, ner, Nigeria, AFRICA, WESTAFRICA\" },\n  { \"\ud83c\uddea\ud83c\uddf9\", \"\ud83c\uddea\ud83c\uddf9: et, eth, Ethiopia, AFRICA, AFRICA, EASTAFRICA\" },\n  { \"\ud83c\uddea\ud83c\uddf7\", \"\ud83c\uddea\ud83c\uddf7: er, eri, Eritrea, AFRICA, EASTAFRICA\" },\n  { \"\ud83c\udde8\ud83c\uddec\", \"\ud83c\udde8\ud83c\uddec: cg, cog, Congo, AFRICA, CENTRALAFRICA\" }, \/\/ Rebublic of the Congo\n  { \"\ud83c\udde8\ud83c\udde9\", \"\ud83c\udde8\ud83c\udde9: cd, cod, DemocraticCongo, AFRICA, CENTRALAFRICA\" }, \/\/ Democratic Rebublic of the Congo\n  { \"\ud83c\uddf9\ud83c\uddff\", \"\ud83c\uddf9\ud83c\uddff: tz, tza, Tanzania, AFRICA, EASTAFRICA\" },\n  { \"\ud83c\uddff\ud83c\udde6\", \"\ud83c\uddff\ud83c\udde6: za, zaf, SouthAfrica, AFRICA, SOUTHAFRICA, BRICS\" },\n  { \"\ud83c\uddf0\ud83c\uddea\", \"\ud83c\uddf0\ud83c\uddea: ke, ken, Kenya, AFRICA, EASTAFRICA\" },\n  { \"\ud83c\uddfa\ud83c\uddec\", \"\ud83c\uddfa\ud83c\uddec: ug, uga, Uganda, AFRICA, EASTAFRICA\" },\n  { \"\ud83c\uddf8\ud83c\uddf8\", \"\ud83c\uddf8\ud83c\uddf8: ss, ssd, SouthSudan, AFRICA, EASTAFRICA\" },\n  { \"\ud83c\uddf8\ud83c\udde9\", \"\ud83c\uddf8\ud83c\udde9: sd, sdn, Sudan, AFRICA, EASTAFRICA\" },\n  { \"\ud83c\udde9\ud83c\uddff\", \"\ud83c\udde9\ud83c\uddff: dz, dza, Algeria, AFRICA, NORTHAFRICA\" },\n  { \"\ud83c\uddea\ud83c\uddec\", \"\ud83c\uddea\ud83c\uddec: eg, egy, Egypt, AFRICA, NORTHAFRICA, WESTASIA, ASIA, EURASIA\" },\n  { \"\ud83c\uddf1\ud83c\uddfe\", \"\ud83c\uddf1\ud83c\uddfe: ly, lby, Libya, AFRICA, NORTHAFRICA\" },\n  { \"\ud83c\uddf1\ud83c\uddfe\", \"\ud83c\uddf1\ud83c\uddfe: ly, lby, Madeira, AFRICA, NORTHAFRICA\" },\n  { \"\ud83c\uddf2\ud83c\udde6\", \"\ud83c\uddf2\ud83c\udde6: ma, mar, Morocco, AFRICA, NORTHAFRICA\" },\n  { \"\ud83c\udde6\ud83c\uddf4\", \"\ud83c\udde6\ud83c\uddf4: ao, ago, Angola, AFRICA, CENTRALAFRICA\" },\n  { \"\ud83c\uddec\ud83c\udded\", \"\ud83c\uddec\ud83c\udded: gh, gha, Ghana, AFRICA, WESTAFRICA\" },\n  { \"\ud83c\uddf2\ud83c\uddff\", \"\ud83c\uddf2\ud83c\uddff: mz, moz, Mozambique, AFRICA\" },\n  { \"\ud83c\uddf2\ud83c\uddec\", \"\ud83c\uddf2\ud83c\uddec: mg, mdg, Madagascar, AFRICA, EASTAFRICA\" },\n  { \"\ud83c\uddfe\ud83c\uddf9\", \"\ud83c\uddfe\ud83c\uddf9: yt, myt, Mayotte, FRANCE, AFRICA, EASTAFRICA\" },\n  { \"\ud83c\udde8\ud83c\uddee\", \"\ud83c\udde8\ud83c\uddee: ci, civ, IvoryCoast, AFRICA, WESTAFRICA\" },\n  { \"\ud83c\udde8\ud83c\uddf2\", \"\ud83c\udde8\ud83c\uddf2: cm, cmr, Cameroon, AFRICA, CENTRALAFRICA\" },\n  { \"\ud83c\uddf3\ud83c\uddea\", \"\ud83c\uddf3\ud83c\uddea: ne, ner, Niger, AFRICA, WESTAFRICA\" },\n  { \"\ud83c\udde7\ud83c\uddeb\", \"\ud83c\udde7\ud83c\uddeb: bf, bfa, BurkinaFaso, AFRICA, WESTAFRICA\" }, \/\/ Burkina Faso\n  { \"\ud83c\uddf2\ud83c\uddf1\", \"\ud83c\uddf2\ud83c\uddf1: ml, mli, Mali, AFRICA, WESTAFRICA\" },\n  { \"\ud83c\uddf2\ud83c\uddfc\", \"\ud83c\uddf2\ud83c\uddfc: mw, mwi, Malawi, AFRICA, EASTAFRICA\" },\n  { \"\ud83c\uddff\ud83c\uddf2\", \"\ud83c\uddff\ud83c\uddf2: zm, zmb, Zambia, AFRICA, EASTAFRICA\" },\n  { \"\ud83c\uddf9\ud83c\udde9\", \"\ud83c\uddf9\ud83c\udde9: td, tcd, Chad, AFRICA, CENTRALAFRICA\" },\n  { \"\ud83c\uddf8\ud83c\uddf4\", \"\ud83c\uddf8\ud83c\uddf4: so, som, Somalia, AFRICA, EASTAFRICA\" },\n  { \"\ud83c\uddf8\ud83c\uddf3\", \"\ud83c\uddf8\ud83c\uddf3: sn, sen, Senegal, AFRICA, WESTAFRICA\" },\n  { \"\ud83c\uddff\ud83c\uddfc\", \"\ud83c\uddff\ud83c\uddfc: zw, zwe, Zimbabwe, AFRICA, EASTAFRICA\" },\n  { \"\ud83c\uddec\ud83c\uddf3\", \"\ud83c\uddec\ud83c\uddf3: gn, gin, Guinea, AFRICA, WESTAFRICA\" },\n  { \"\ud83c\uddf7\ud83c\uddea\", \"\ud83c\uddf7\ud83c\uddea: re, reu, R\u00e9union, reunion, FRANCE, AFRICA, EASTAFRICA\" }, \/\/ R\u00e9union\n  { \"\ud83c\uddf7\ud83c\uddfc\", \"\ud83c\uddf7\ud83c\uddfc: rw, rwa, Rwanda, AFRICA, EASTAFRICA\" },\n  { \"\ud83c\udde7\ud83c\uddef\", \"\ud83c\udde7\ud83c\uddef: bj, ben, Benin, AFRICA, WESTAFRICA\" },\n  { \"\ud83c\udde7\ud83c\uddee\", \"\ud83c\udde7\ud83c\uddee: bi, bdi, Burundi, AFRICA, EASTAFRICA\" },\n  { \"\ud83c\uddf9\ud83c\uddf3\", \"\ud83c\uddf9\ud83c\uddf3: tn, tun, Tunisia, AFRICA, NORTHAFRICA\" },\n  { \"\ud83c\uddf9\ud83c\uddec\", \"\ud83c\uddf9\ud83c\uddec: tg, tgo, Togo, AFRICA, WESTAFRICA\" },\n  { \"\ud83c\uddf8\ud83c\uddf1\", \"\ud83c\uddf8\ud83c\uddf1: sl, sle, SierraLeone, AFRICA, WESTAFRICA\" }, \/\/ Sierra Leone\n  { \"\ud83c\udde8\ud83c\udde9\", \"\ud83c\udde8\ud83c\udde9: cd, cod, Congo, AFRICA, CENTRALAFRICA\" },\n  { \"\ud83c\udde8\ud83c\uddeb\", \"\ud83c\udde8\ud83c\uddeb: cf, caf, CentralAfrican, CENTRALAFRICA\" }, \/\/ Central African Republic\n  { \"\ud83c\uddf1\ud83c\uddf7\", \"\ud83c\uddf1\ud83c\uddf7: lr, lbr, Liberia, AFRICA, WESTAFRICA\" },\n  { \"\ud83c\uddf2\ud83c\uddf7\", \"\ud83c\uddf2\ud83c\uddf7: mr, mrt, Mauritania, AFRICA, WESTAFRICA\" },\n  { \"\ud83c\uddea\ud83c\uddf7\", \"\ud83c\uddea\ud83c\uddf7: er, eri, Eritrea, AFRICA, EASTAFRICA\" },\n  { \"\ud83c\uddec\ud83c\uddf2\", \"\ud83c\uddec\ud83c\uddf2: gm, gmb, Gambia, AFRICA, WESTAFRICA\" },\n  { \"\ud83c\udde7\ud83c\uddfc\", \"\ud83c\udde7\ud83c\uddfc: bw, bwa, Botswana, AFRICA, SOUTHAFRICA\" },\n  { \"\ud83c\uddf3\ud83c\udde6\", \"\ud83c\uddf3\ud83c\udde6: na, nam, Namibia, AFRICA, SOUTHAFRICA\" },\n  { \"\ud83c\uddec\ud83c\udde6\", \"\ud83c\uddec\ud83c\udde6: ga, gab, Gabon, AFRICA, CENTRALAFRICA\" },\n  { \"\ud83c\uddf1\ud83c\uddf8\", \"\ud83c\uddf1\ud83c\uddf8: ls, lso, Lesotho, AFRICA, SOUTHAFRICA\" },\n  { \"\ud83c\uddec\ud83c\uddfc\", \"\ud83c\uddec\ud83c\uddfc: gw, gnb, GuineaBissau, AFRICA, WESTAFRICA\" }, \/\/ Guinea-Bissau\n  { \"\ud83c\uddec\ud83c\uddf6\", \"\ud83c\uddec\ud83c\uddf6: gq, gnq, EquatorialGuinea, CENTRALAFRICA\" }, \/\/ Equatorial Guinea\n  { \"\ud83c\uddf2\ud83c\uddfa\", \"\ud83c\uddf2\ud83c\uddfa: mu, mus, Mauritius, AFRICA, EASTAFRICA\" },\n  { \"\ud83c\uddf2\ud83c\uddfa\", \"\ud83c\uddf2\ud83c\uddfa: mz, moz, Mozambique, AFRICA, EASTAFRICA\" },\n  { \"\ud83c\uddf8\ud83c\uddff\", \"\ud83c\uddf8\ud83c\uddff: sz, swz, Eswatini, AFRICA, SOUTHAFRICA\" },\n  { \"\ud83c\udde9\ud83c\uddef\", \"\ud83c\udde9\ud83c\uddef: dj, dji, Djibouti, AFRICA, EASTAFRICA\" },\n  { \"\ud83c\uddf0\ud83c\uddf2\", \"\ud83c\uddf0\ud83c\uddf2: km, com, Comoros, AFRICA\" },\n  { \"\ud83c\udde8\ud83c\uddfb\", \"\ud83c\udde8\ud83c\uddfb: cv, cpv, CapeVerde, AFRICA, WESTAFRICA\" },\n  { \"\ud83c\uddea\ud83c\udded\", \"\ud83c\uddea\ud83c\udded: eh, esh, WesternSahara, SPAIN, AFRICA, NORTHAFRICA\" }, \/\/ Western Sahara\n  { \"\ud83c\uddf8\ud83c\uddf9\", \"\ud83c\uddf8\ud83c\uddf9: st, stp, S\u00e3oTom\u00e9andPr\u00edncipe, saotomeandprincipe, CENTRALAFRICA\" }, \/\/ S\u00e3o Tom\u00e9 and Pr\u00edncipe\n  { \"\ud83c\uddf8\ud83c\udde8\", \"\ud83c\uddf8\ud83c\udde8: sc, syc, Seychelles, AFRICA, EASTAFRICA\" },\n  { \"\ud83c\uddf8\ud83c\udded\", \"\ud83c\uddf8\ud83c\udded: sh, shn, TristandaCunha, UK\" }, \/\/ Tristan cunha\n  { \"\ud83c\udde6\ud83c\uddfa\", \"\ud83c\udde6\ud83c\uddfa: au, aus, Australia, AUSTRALASIA, OCEANIA\" },\n  { \"\ud83c\udde8\ud83c\uddfd\", \"\ud83c\udde8\ud83c\uddfd: cx, cxr, Christmasisland, AUSTRALIA\" }, \/\/ Christmas Island\n  { \"\ud83c\udde8\ud83c\udde8\", \"\ud83c\udde8\ud83c\udde8: cc, cck, CocosIslands, AUSTRALIA\" }, \/\/ Cocos (Keeling) Islands\n  { \"\ud83c\uddee\ud83c\uddf2\", \"\ud83c\uddee\ud83c\uddf2: im, imn, ManIsle, UK\" }, \/\/ Isle of Man\n  { \"\ud83c\uddf0\ud83c\uddee\", \"\ud83c\uddf0\ud83c\uddee: ki, kir, Kiribati, MICRONESIA, OCEANIA\" },\n  { \"\ud83c\uddf3\ud83c\uddf7\", \"\ud83c\uddf3\ud83c\uddf7: nr, nru, Nauru, MICRONESIA, OCEANIA\" },\n  { \"\ud83c\uddf3\ud83c\udde8\", \"\ud83c\uddf3\ud83c\udde8: nc, ncl, NewCaledonia, FRANCE, OCEANIA\" }, \/\/ New Caledonia\n  { \"\ud83c\uddeb\ud83c\uddef\", \"\ud83c\uddeb\ud83c\uddef: fj, fji, Fiji, MELANESIA, OCEANIA\" },\n  { \"\ud83c\uddeb\ud83c\uddf2\", \"\ud83c\uddeb\ud83c\uddf2: fm, fsm, Micronesia, MICRONESIA, OCEANIA\" },\n  { \"\ud83c\uddf5\ud83c\uddec\", \"\ud83c\uddf5\ud83c\uddec: pg, png, PapuanewGuinea, MELANESIA, OCEANIA\" }, \/\/ Papua New Guinea\n  { \"\ud83c\uddfb\ud83c\uddfa\", \"\ud83c\uddfb\ud83c\uddfa: vu, vut, Vanuatu, MELANESIA, OCEANIA\" },\n  { \"\ud83c\uddf8\ud83c\udde7\", \"\ud83c\uddf8\ud83c\udde7: sb, slb, SolomonIslands, MELANESIA, OCEANIA\" }, \/\/ Solomon Islands\n  { \"\ud83c\uddec\ud83c\uddfa\", \"\ud83c\uddec\ud83c\uddfa: gu, gum, Guam, USA, MICRONESIA, OCEANIA\" },\n  { \"\ud83c\uddf2\ud83c\udded\", \"\ud83c\uddf2\ud83c\udded: mh, mhl, MarshallIslands, MICRONESIA, OCEANIA\" }, \/\/ Marshall Islands\n  { \"\ud83c\uddf2\ud83c\uddf5\", \"\ud83c\uddf2\ud83c\uddf5: mp, mnp, NorthernMariana, MICRONESIA, OCEANIA\" }, \/\/ Northern Mariana Islands\n  { \"\ud83c\uddf5\ud83c\uddeb\", \"\ud83c\uddf5\ud83c\uddeb: pf, pyf, FrenchPolynesia, FRANCE, POLYNESIA, OCEANIA\" }, \/\/ French Polynesia\n  { \"\ud83c\uddfc\ud83c\uddf8\", \"\ud83c\uddfc\ud83c\uddf8: ws, wsm, Samoa, POLYNESIA, OCEANIA\" },\n  { \"\ud83c\uddfc\ud83c\uddeb\", \"\ud83c\uddfc\ud83c\uddeb: wf, wlf, WallisandFutuna, FRANCE, OCEANIA\" }, \/\/ Wallis and Futuna\n  { \"\ud83c\uddf9\ud83c\uddfb\", \"\ud83c\uddf9\ud83c\uddfb: tv, tuv, Tuvalu, OCEANIA\" },\n  { \"\ud83c\udde6\ud83c\uddf8\", \"\ud83c\udde6\ud83c\uddf8: as, asm, Americansamoa, USA, POLYNESIA, OCEANIA\" }, \/\/ American Samoa\n  { \"\ud83c\uddf5\ud83c\uddf3\", \"\ud83c\uddf5\ud83c\uddf3: pn, pcn, Pitcairn, UK, POLYNESIA, OCEANIA\" }, \/\/ Pitcairn Islands\n  { \"\ud83c\uddf5\ud83c\uddfc\", \"\ud83c\uddf5\ud83c\uddfc: pw, plw, Palau, MICRONESIA, OCEANIA\" },\n  { \"\ud83c\uddef\ud83c\uddea\", \"\ud83c\uddef\ud83c\uddea: je, jey, Jersey, FRANCE\" },\n  { \"\ud83c\udde6\ud83c\uddf6\", \"\ud83c\udde6\ud83c\uddf6: aq, ata, Antarctica, ANTARCTICA\" },\n  { \"\ud83c\uddf3\ud83c\uddeb\", \"\ud83c\uddf3\ud83c\uddeb: nf, nfk, NorFolkIsland, AUSTRALASIA, POLYNESIA, OCEANIA\" }, \/\/ Norfolk Island\n  { \"\ud83c\udde8\ud83c\uddf0\", \"\ud83c\udde8\ud83c\uddf0: ck, cok, Cookisland, NEWZEALAND, POLYNESIA, OCEANIA\" }, \/\/ Cook Islands\n  { \"\ud83c\uddf3\ud83c\uddff\", \"\ud83c\uddf3\ud83c\uddff: nz, nzl, NewZealand, NEWZEALAND, AUSTRALASIA, OCEANIA\" }, \/\/ New Zealand\n  { \"\ud83c\uddf3\ud83c\uddfa\", \"\ud83c\uddf3\ud83c\uddfa: nu, niu, Niue, NEWZEALAND, POLYNESIA, OCEANIA\" },\n  { \"\ud83c\uddf9\ud83c\uddf0\", \"\ud83c\uddf9\ud83c\uddf0: tk, tkl, Tokelau, NEWZEALAND, POLYNESIA, OCEANIA\" },\n  { \"\ud83c\uddf9\ud83c\uddf4\", \"\ud83c\uddf9\ud83c\uddf4: to, ton, Tonga, POLYNESIA, OCEANIA\" },\n  \n  \/\/ still missing\n  \n  { \"\ud83c\uddee\ud83c\uddf4\", \"\ud83c\uddee\ud83c\uddf4: io, iot, BritishIndianOcean\" }, \/\/ British Indian Ocean Territory\n  { \"\ud83c\uddf9\ud83c\uddeb\", \"\ud83c\uddf9\ud83c\uddeb: tf, atf, FrenchSouthernandaAtarctic\" }, \/\/ French Southern and Antarctic Lands\n  { \"\ud83c\uddec\ud83c\uddec\", \"\ud83c\uddec\ud83c\uddec: gg, ggy, Guernsey, GUERNSEY\" },\n  { \"\ud83c\udded\ud83c\uddf2\", \"\ud83c\udded\ud83c\uddf2: hm, hmd, HeardandMacDonaldsIslands\" }, \/\/ Heard Island and McDonald Islands\n  { \"\ud83c\uddfa\ud83c\uddf2\", \"\ud83c\uddfa\ud83c\uddf2: um, umi, UsMinorOutlyingIslands, US\" }, \/\/ United States Minor Outlying Islands\n};<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/moijari.com\/wp-content\/uploads\/2026\/07\/IMG_2259.jpeg\" alt=\"\" class=\"wp-image-3956\" width=\"281\" height=\"374\" srcset=\"https:\/\/moijari.com\/wp-content\/uploads\/2026\/07\/IMG_2259.jpeg 240w, https:\/\/moijari.com\/wp-content\/uploads\/2026\/07\/IMG_2259-225x300.jpeg 225w\" sizes=\"(max-width: 281px) 100vw, 281px\" \/><\/figure>\n\n\n\n<p>T\u00e4ss\u00e4 on kasaan koottu mallikeskustelu mr8:n kanssa vapaasti<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>'xmldoctype'= \"html\"<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/moijari.com\/wp-content\/uploads\/2026\/07\/IMG_2241.jpeg\" alt=\"\" class=\"wp-image-3957\" width=\"348\" height=\"261\" srcset=\"https:\/\/moijari.com\/wp-content\/uploads\/2026\/07\/IMG_2241.jpeg 320w, https:\/\/moijari.com\/wp-content\/uploads\/2026\/07\/IMG_2241-300x225.jpeg 300w\" sizes=\"(max-width: 348px) 100vw, 348px\" \/><\/figure>\n\n\n\n<p>V\u00e4liaika, lis\u00e4t\u00e4\u00e4n lokit ressu2:n, t\u00e4m\u00e4nhetkinen sorsa:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#include &lt;stdio.h&gt;\n#include &lt;stdlib.h&gt;\n#include &lt;memory.h&gt;\n#include &lt;ctype.h&gt;\n\n#include &lt;sys\/time.h&gt;\n#include &lt;time.h&gt;\n\n#define MAIN 2\n\nunsigned char *procname;\nstatic unsigned char *programname = \"Ressu3 version 1.00 \u00a9\";\nstatic unsigned char *copyright = \"Copyright (c)1998-2026 Jari Kuivaniemi (moijari.com), Helsinki, Finland. Kaikki oikeudet pid\u00e4tet\u00e4\u00e4n!\";\n\/\/static unsigned char *copyright = \"Copyright (c)2013-2026 Jari Kuivaniemi (moijari.com), Helsinki, Finland. Kaikki oikeudet pid\u00e4tet\u00e4\u00e4n!\";\nint my_output = 0;\n\nvoid my_dump(unsigned char *header, int len, unsigned char *buf, int linelen)\n{\n  int c;\n\n  if(my_output) {\n    fprintf(stdout,\"\\n\");\n    my_output = 0;\n  }\n  for(c = 0; c &lt; len; c++) {\n    if(c % linelen == 0) {\n      if(c &gt; 0)\n\tfprintf(stdout,\"\\n\");\n      fprintf(stdout,\"%-10s\", header);\n    }\n    fprintf(stdout,\" %02x\", buf&#91;c]);\n  }\n  fprintf(stdout,\"\\n\");\n  fflush(stdout);\n}\n\n#define DEBUG8 2\n\n#define USE_URANDOM 2\n#define USE_RESSU3 2\n#define USE_PSEUDORESSU3 2\n#define USE_RESSU3TWIST 2\n#define aUSE_RESSU3LOGS 2\n#define USE_RESSU3COMMANDS 2\n\n\n#if defined USE_RESSU3 || defined USE_PSEUDORESSU3 || defined USE_RESSU3TWIST\n\nstatic unsigned long long my_ressu_useconds()\n{\n  struct timeval tv;\n  gettimeofday(&amp;tv, NULL);\n  return((unsigned long long) tv.tv_usec + 1000000ULL * (unsigned long long) tv.tv_sec);\n}\n\nstatic unsigned char my_ressu_lowusec() \/* JariK 2013 *\/\n{\n  struct timeval tv;\n  gettimeofday(&amp;tv, NULL);\n  return(tv.tv_usec &amp; 0xff);\n}\n\nstatic int randomness = 0;\n\n#define RESSU_ROTATELEFT8(byte, bits) ( ((byte) &gt;&gt; (8 - (bits))) | ((byte) &lt;&lt; (bits)) )\n\nstatic void my_ressu3_round(int size, unsigned char *buffer) \/\/ ressu JariK 2013, 2025\n{\n  int c, d, byte;\n  unsigned char e;\n  static int f = 0, prevbyte = -1;\n  unsigned long long usec;\n  \n  for(c = 0; c &lt; 8; c++) { \/\/ eight bits per byte\n    for(d = 0; d &lt; size; d++) { \/\/ rotate + xor\n      e = buffer&#91;d];\n      e = RESSU_ROTATELEFT8(e, 1);  \/\/ rotate byte left 1 bits\n      byte = my_ressu_lowusec();\n      buffer&#91;d] = e ^ byte;\n      if(prevbyte != byte) {\n\tprevbyte = byte;\n\trandomness++;\n      }\n    }\n    for(d = 0; d &lt; size; d++) { \/\/ swap\n      f = (f + 16 + buffer&#91;d] + 2) % size;\n      e = buffer&#91;d];\n      buffer&#91;d] = buffer&#91;f];\n      buffer&#91;f] = e;\n    }\n    \n    \/\/ more randomness from clocks\n    usec = clock();\n    while(usec &gt; 0) {\n      f = (f + usec) % size;\n      usec \/= size;\n    }\n    usec = my_ressu_useconds();\n    while(usec &gt; 0) {\n      f = (f + usec) % size;\n      usec \/= size;\n    }\n  } \/\/ end of for(c = 0; c &lt; 8; c++\n}\n\n#include \"newressu.h\"\n\n#define RESSU3_BYTES 2048 \/\/ now 2048\n#define RESSU3_RANDOMNESS_NEEDED 2048 \/\/ now 2048 \n#define RESSU3_CLOCKS_NEEDED 20480 \/\/ now 20480\n#define RESSU3_MINIMUM_ROUNDS 5 \/\/ now 5\n\nvoid my_ressu3_bytes(int size, unsigned char *buffer) \/\/ Ressu3 v1.1 JariK 2013, 2025, 2026\n{\n  int c, d, clocksused;\n  static int ressu_pos = 0, initneeded = 1;\n  static unsigned char ressu&#91;RESSU3_BYTES];\n  \n  for(c = 0; c &lt; size; c++) {\n    if(ressu_pos == 0) {\n      if(initneeded) {\n\tmemset(&amp;ressu, 0, sizeof(ressu));\n\tinitneeded = 0;\n      }\n      randomness = 0;\n      clocksused = 0;\n      \/\/memset(&amp;ressu, 0, sizeof(ressu));\n      \n      for(d = 0; d &lt; RESSU3_MINIMUM_ROUNDS ||\n\t    randomness &lt; RESSU3_RANDOMNESS_NEEDED ||\n\t    clocksused &lt; RESSU3_CLOCKS_NEEDED\n\t    ; d++) {\n\tmy_ressu3_round(sizeof(ressu), ressu);\n\tclocksused += (sizeof(ressu) * 8);\n      }\n      \n#ifdef DEBUG8\n      my_dump(\"myressu3g\", sizeof(ressu), ressu, 32);      \n#endif\n    } \/\/ end of if(ressu_pos == 0\n    buffer&#91;c] ^= ressu&#91;ressu_pos];\n    ressu_pos = (ressu_pos + 1) % sizeof(ressu);\n  } \/\/ end of for(c = 0; c &lt; size; c++\n#ifdef DEBUG8\n  my_dump(\"myressu3\", size, buffer, 32);\n#endif\n}\n\n#endif \/\/ end of #if defined USE_RESSU3 || defined USE_PSEUDORESSU3 || defined USE_RESSU3TWIST\n\n#if defined USE_PSEUDORESSU3 || defined USE_RESSU3TWIST\n\nunsigned char cvar&#91;16];\nint cvarsize = 0;\n\nvoid inccvar()\n{\n  int c;\n\n  \/* 16 bytes, LSB first *\/\n  for(c = 0; ++cvar&#91;c] == 0 &amp;&amp; c &lt; sizeof(cvar) - 1; c++);\n\n  if(cvarsize &lt; c)\n    cvarsize = c;\n\n#ifdef DEBUG20\n  ressu_dump(\"cvar\", cvarsize + 1, cvar, 32);\n#endif\n}\n\nvoid clearcvar()\n{\n  int c;\n\n  cvarsize = 0;\n  \n  for(c = 0; c &lt; sizeof(cvar); c++)\n    cvar&#91;c] = 0;\n\n  for(c = 0; c &lt; sizeof(cvar); c++)\n    if(cvar&#91;c] != 0)\n      cvarsize = c;\n}\n\n#include \"sha256.h\"\n\n#define PSEUDORESSU3_BYTES 32*1024 \/\/ bytes between topups\n#define PSEUDORESSU3_TOPUP_BYTES 32*1024 \/\/ bytes between topups\n#define PSEUDORESSU3_TOPUP_SIZE 32 \/\/ topup size in bytes (32 bytes, 256 bits)\n#define PSEUDORESSU3_TOPUP_TWICE 2 \/\/ off by default\n\nstatic unsigned char pseudoressu3_key&#91;HashLen]; \/\/ 32 bytes, 256 bits\n\nstatic void my_pseudoressu3_internalbytes(unsigned char *digest)\n{\n  HashCtx hash;\n\n  HashInit(&amp;hash);\n  HashUpdate(&amp;hash, pseudoressu3_key, sizeof(pseudoressu3_key)); \/\/ add old randomness to hash\n  HashUpdate(&amp;hash, (unsigned char *) &amp;cvar, cvarsize + 1);\n  inccvar();\n  HashFinal(digest, &amp;hash);\n  memset(&amp;hash, 0, sizeof(hash)); \/\/ forget hash\n}\n\nstatic void my_pseudoressu3_addrandomness(int size, unsigned char *buffer)\n{\n  unsigned long long usec;\n  HashCtx hash;\n\n  HashInit(&amp;hash);\n  HashUpdate(&amp;hash, pseudoressu3_key, sizeof(pseudoressu3_key)); \/\/ add old randomness to hash\n  HashUpdate(&amp;hash, (unsigned char *) &amp;cvar, cvarsize + 1);\n  inccvar();\n  usec = my_ressu_useconds(); \/\/ add timestamp to hash\n  HashUpdate(&amp;hash, (unsigned char *)&amp;usec, sizeof(usec));\n  usec = clock(); \/\/ add processor time to hash (for randomness)\n  HashUpdate(&amp;hash, (unsigned char *)&amp;usec, sizeof(usec));\n  HashUpdate(&amp;hash, buffer, size); \/\/ add given randomness to hash\n  HashFinal(pseudoressu3_key, &amp;hash); \/\/ save as new key\n  memset(&amp;hash, 0, sizeof(hash)); \/\/ forget hash\n}\n\nstatic void my_pseudoressu3_topup()\n{\n  unsigned char topup&#91;PSEUDORESSU3_TOPUP_SIZE]; \/\/ 32 bytes, 256 bits\n\n  memset(&amp;topup, 0, sizeof(topup)); \/\/ forget topup\n  my_ressu3_bytes(sizeof(topup), topup);\n#ifdef DEBUG8\n  my_dump(\"topup\", sizeof(topup), topup, 32);\n#endif\n  my_pseudoressu3_addrandomness(sizeof(topup), topup);\n\n  memset(&amp;topup, 0, sizeof(topup)); \/\/ forget topup\n}\n\nvoid my_pseudoressu3_bytes(int size, unsigned char *buffer) \/\/ JariK 2022, 2025\n{\n  int c;\n  static int pseudoressu_pos = 0, topup_counter = 0, initneeded = 1;\n  static unsigned char pseudoressu&#91;HashLen]; \/\/ 32 bytes, 256 bits\n\n  for(c = 0; c &lt; size; c++) {\n    if(pseudoressu_pos == 0) {\n      if(topup_counter == 0) {\n\tif(initneeded) {\n\t  my_ressu3_bytes(sizeof(pseudoressu3_key), pseudoressu3_key); \/\/ get first key\n#ifdef DEBUG8\n\t  my_dump(\"first key\", sizeof(pseudoressu3_key), pseudoressu3_key, 32);\n#endif\n\t  initneeded = 0;\n\t} \/\/ end of if(initneeded\n\t\n\tmy_pseudoressu3_topup(); \/\/ add randomness to key, first block also\n#ifdef PSEUDORESSU3_TOPUP_TWICE\n\tmy_pseudoressu3_topup(); \/\/ add randomness to key, first block also\n#endif\n\ttopup_counter = PSEUDORESSU3_TOPUP_BYTES;\n      } \/\/ end of if(topup_counter == 0\n      \n      my_pseudoressu3_internalbytes(pseudoressu); \/\/ get random bits using the key\n#ifdef DEBUG8\n      my_dump(\"next data\", sizeof(pseudoressu), pseudoressu, 32);\n#endif\n      topup_counter -= sizeof(pseudoressu);\n    } \/\/ end of if(pseudoressu_pos == 0\n\n    buffer&#91;c] ^= pseudoressu&#91;pseudoressu_pos];\n    pseudoressu_pos = (pseudoressu_pos + 1) % sizeof(pseudoressu);\n  } \/\/ end of for(c = 0; c &lt; size; c++\n  \n  my_pseudoressu3_internalbytes(pseudoressu3_key); \/\/ replace key with new random one\n#ifdef DEBUG8\n  my_dump(\"new key\", sizeof(pseudoressu3_key), pseudoressu3_key, 32);\n#endif\n#ifdef DEBUG8\n  my_dump(\"pseudoressu\", size, buffer, 32);\n#endif\n}\n\n#endif \/\/ end of #if defined USE_PSEUDORESSU3 || defined USE_RESSU3TWIST\n\n#ifdef USE_RESSU3TWIST\n\nvoid my_ressu3twist_bytes(int size, unsigned char *buffer) \/\/ JariK 2023, 2025\n{\n  \/\/urandom_bytes(size, buffer);\n  my_ressu3_bytes(size, buffer);\n  my_pseudoressu3_bytes(size, buffer);\n#ifdef DEBUG8\n  my_dump(\"ressu3twist\", size, buffer, 32);\n#endif\n}\n\n#endif \/\/ end of #ifdef USE_RESSU3TWIST\n\n#ifdef USE_URANDOM\n\nvoid my_readfile_xor(int size, unsigned char *buffer, unsigned char *filename)\n{\n  int c, n, filebuffer_pos = 0;\n  unsigned char filebuffer&#91;64];\n  FILE *fp1;\n\n  if((fp1 = fopen(filename, \"rb\")) == NULL) {\n    fprintf(stderr,\"%s: fopen(): cannot open file %s\\n\",\n\t    procname, filename);\n    exit(1);\n  }\n\n  for(c = 0; c &lt; size; c++) {\n    if(filebuffer_pos == 0) {\n      n = (size - c &lt; sizeof(filebuffer)) ? size - c : sizeof(filebuffer);\n      if(fread(filebuffer, 1, n, fp1) &lt; n) {\n\tfprintf(stderr,\"%s: fread(): cannot read file %s\\n\",\n\t\tprocname, filename);\n\texit(1);\n      }\n#ifdef DEBUG8\n      my_dump(\"file\", n, filebuffer, 32);\n#endif\n    } \/\/ end of if(file_pos == 0\n    buffer&#91;c] ^= filebuffer&#91;filebuffer_pos];\n    filebuffer_pos = (filebuffer_pos + 1) % sizeof(filebuffer);\n  } \/\/ end of for(c = 0; c &lt; size; c++\n\n  fclose(fp1);\n\n  memset(filebuffer, 0, sizeof(filebuffer)); \/\/ forget file\n}\n\nstatic unsigned char urandomfilename&#91;128] = \"\/dev\/urandom\";\n\nvoid my_urandom_bytes(int size, unsigned char *buffer)\n{\n  \/\/static my_readfile_xor(int size, unsigned char *buffer, unsigned char *urandom_filename);\n#ifdef DEBUG8\n  my_dump(\"urandom\", size, buffer, 32);\n#endif\n}\n\n#endif \/\/ end of #ifdef USE_URANDOM\n\n#ifdef USE_RESSU3LOGS\n#endif\n\n#ifdef USE_RESSU3COMMANDS\n\nvoid my_readcommand_xor(int size, unsigned char *buffer, unsigned char *commandname)\n{\n  int c, n, commandbuffer_pos = 0;\n  unsigned char commandbuffer&#91;64];\n  FILE *fp1;\n\n  if((fp1 = fopen(commandname, \"rb\")) == NULL) {\n    fprintf(stderr,\"%s: fopen(): cannot open command %s\\n\",\n\t    procname, commandname);\n    exit(1);\n  }\n\n  for(c = 0; c &lt; size; c++) {\n    if(commandbuffer_pos == 0) {\n      n = (size - c &lt; sizeof(commandbuffer)) ? size - c : sizeof(commandbuffer);\n      if(fread(commandbuffer, 1, n, fp1) &lt; n) {\n\tfprintf(stderr,\"%s: fread(): cannot read command %s\\n\",\n\t\tprocname, commandname);\n\texit(1);\n      }\n#ifdef DEBUG8\n      my_dump(\"command\", n, commandbuffer, 32);\n#endif\n    } \/\/ end of if(command_pos == 0\n    buffer&#91;c] ^= commandbuffer&#91;commandbuffer_pos];\n    commandbuffer_pos = (commandbuffer_pos + 1) % sizeof(commandbuffer);\n  } \/\/ end of for(c = 0; c &lt; size; c++\n\n  fclose(fp1);\n\n  memset(commandbuffer, 0, sizeof(commandbuffer)); \/\/ forget command\n}\n\nstatic unsigned char command&#91;128] = \"echo abcd\";\n\nvoid my_command_bytes(int size, unsigned char *buffer)\n{\n  my_readcommand_xor(int size, unsigned char *buffer, unsigned char *commandname);\n#ifdef DEBUG8\n  my_dump(\"command\", size, buffer, 32);\n#endif\n}\n\n#endif \/\/ USE_RESSU3COMMANDS\n\n\nvoid my_random_bytes(int size, unsigned char *buffer)\n{\n#ifdef USE_URANDOM\n  my_urandom_bytes(size, buffer);\n#endif\n\n#ifdef USE_RESSU3COMMANDS\n  my_command_bytes(size, buffer);\n#endif\n\n  \/\/#ifdef USE_RESSU3LOGS\n  \/\/void my_ressu3logs(int size, unsigned char *buffer, \"echo abcd\");\n  \/\/void my_ressu3logs(int size, unsigned char *buffer, \"tail *.lo | grep \"thisday\"));\n  \/\/void my_ressu3logs(int size, unsigned char *buffer, \"newressusudoku\"));\n  \/\/void my_ressu3logs(int size, unsigned char *buffer, \"newressu\"));\n  \/\/#endif \/\/ USE_RESSU3LOGS\n\n  \/\/ressu_round(size, buffer);\n  \/\/ressu_genbytes(size, buffer);\n  \/\/pseudoressu_bytes(size, buffer);\n  \/\/ressutwist_bytes(size, buffer);\n  \/\/my_ressu3_round(size, buffer);\n#ifdef USE_PSEUDORESSU3\n  my_pseudoressu3_bytes(size, buffer);\n#endif\n#ifdef USE_RESSU3TWIST\n  my_ressu3twist_bytes(size, buffer);\n#endif\n#ifdef USE_RESSU3\n  my_ressu3_bytes(size, buffer);\n#endif\n}\n\n#define GENT_SIZE 128\n\nstatic unsigned char gent&#91;GENT_SIZE];\nstatic unsigned int gent_pos = 0;\n\nint my_random_byte()\n{\n  unsigned char ch;\n  static int initneeded = 1;\n\n  if(gent_pos == 0) {\n    if(initneeded) {\n      memset(&amp;gent, 0, sizeof(gent));\n      initneeded = 0;\n    }\n    my_random_bytes(sizeof(gent), gent);\n  }\n  ch = gent&#91;gent_pos];\n  gent_pos = (gent_pos + 1) % sizeof(gent);\n\n  return(ch);\n}\n\nunsigned long my_random_genlimit(unsigned long limit)\n{\n  int c;\n  unsigned long word;\n  static unsigned long lastlimit = 0, highlimit;\n  static int bytes;\n  \n  if(lastlimit != limit) { \/\/ if limit changes, calculate new highlimit and bytes\n    lastlimit = limit;\n    if(limit &lt;= 0x100) {\n      \/\/ highest multiplier of limit that fits to needed bytes\n      highlimit = (0x100 \/ limit) * limit;\n      \/\/ number of bytes needed\n      bytes = 1;\n    } else if(limit &lt;= 0x10000) {\n      highlimit = (0x10000 \/ limit) * limit;\n      bytes = 2;\n    } else if(limit &lt;= 0x1000000) {\n      highlimit = (0x1000000 \/ limit) * limit;\n      bytes = 3;\n    } else if(limit &lt;= 0x100000000) {\n      highlimit = (0x100000000 \/ limit) * limit;\n      bytes = 4;\n    } else if(limit &lt;= 0x10000000000) {\n      highlimit = (0x10000000000 \/ limit) * limit;\n      bytes = 5;\n    } else if(limit &lt;= 0x1000000000000) {\n      highlimit = (0x1000000000000 \/ limit) * limit;\n      bytes = 6;\n    } else if(limit &lt;= 0x100000000000000) {\n      highlimit = (0x100000000000000 \/ limit) * limit;\n      bytes = 7;\n    } else { \/\/ if(limit &lt;= 0xffffffffffffffff) {\n      highlimit = (0xffffffffffffffff \/ limit) * limit;      \n      bytes = 8;\n    }\n  } \/\/ if(lastlimit != limit)\n\n  for(;;) {\n    word = 0;\n    for(c = 0; c &lt; bytes; c++)\n      word = word &lt;&lt; 8 | my_random_byte();\n    if(word &lt; highlimit)\n      break;\n  }\n\n  word %= limit;\n  \n  return(word);\n}\n\nvoid ressu3_version()\n{\n  fprintf(stderr, \"%s\", programname); \/\/ touch these outside #ifdef MAIN\n  fprintf(stderr, \", %s, Finland, Ei johdannaisia\", copyright);\n}\n\n#include &lt;sys\/ioctl.h&gt; \/\/ for TIOCGWINSZ\n\n#ifdef MAIN\n\nint main(int argc, char *argv&#91;])\n{\n  int c, d;\n\n  procname = argv&#91;0];\n\n  \/\/\n  \/\/ look thru command line parameters\n  \/\/\n\n  for(c = 1; c &lt; argc; c++) {\n    if(!strcmp(\"--copyright\", argv&#91;c]) ||\n       !strcmp(\"--version\", argv&#91;c])) {\n      ressu3_version();\n#ifdef SHA256\n      fprintf(stderr,\"\\nsha256(\");\n      for(int c = 0; c &lt; HashLen; c++) {\n\tfprintf(stderr, \"%02x\", programfiledigest&#91;c]);\n      }\n#endif \/\/ end of #ifdef SHA256\n\n    }\n  }\n\n  for(c = 0; c &lt; 10; c++) {\n    fprintf(stdout, \"%05x\", c);\n    my_output = 1;\n    for(d = 0; d &lt; 32; d++) {\n      fprintf(stdout, \" \");\n      fprintf(stdout, \"%02llx\", (unsigned long long) my_random_genlimit(0x100));\n    }\n    fprintf(stdout,\"\\n\");\n  }\n}\n#endif \/\/ end of #ifdef MAIN<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>#include &lt;stdio.h&gt;\n#include &lt;stdlib.h&gt;\n#include &lt;string.h&gt;\n#include &lt;time.h&gt;\n#include &lt;ctype.h&gt;\n#include &lt;sys\/time.h&gt;\n#include &lt;math.h&gt;\n#include &lt;sys\/types.h&gt;\n\n\/\/#define SHA256 2 \/\/ in Makefile\n\n#include \"sha256.h\"\n#include \"cvar.h\"\n\n\/\/#define MAIN 2 \/\/ in Makefile\n\nextern unsigned char *procname;\nstatic unsigned char *programname = \"Newressu version 4.11 \u00a9\";\nstatic unsigned char *copyright = \"Copyright (c) 1998-2026 Jari Kuivaniemi (moijari.com), Helsinki, Finland. Kaikki oikeudet pid\u00e4tet\u00e4\u00e4n!\";\n\nint newressu_output = 0;\n\nvoid ressu_dump(unsigned char *header, int len, unsigned char *buf, int linelen)\n{\n  int c;\n\n  if(newressu_output) {\n    fprintf(stdout,\"\\n\");\n    newressu_output = 0;\n  }\n  for(c = 0; c &lt; len; c++) {\n    if(c % linelen == 0) {\n      if(c &gt; 0)\n\tfprintf(stdout,\"\\n\");\n      fprintf(stdout,\"%-10s\", header);\n    }\n    fprintf(stdout,\" %02x\", buf&#91;c]);\n  }\n  fprintf(stdout,\"\\n\");\n  fflush(stdout);\n}\n\nstatic unsigned long periods&#91;1024];\nstatic unsigned long genbytes = 0;\nstatic unsigned long clockbytes = 0;\n\nint verbose = 0;\nint size = -1, type = 10;\n\n#define USE_RANDOM 2\n\n#define ALL_SLICE 16 \/\/ 16 \/\/ orig 64\n#define RESSUT_SLICES 128 \/\/ 128 \/\/ orig 32\n#define RESSUT_BYTES (RESSUT_SLICES * ALL_SLICE) \/\/ 2048 16 * 128 \/\/ (32 * 64)\n\n#define RESSU_MIN_ROUNDS 2\n#define RESSU_MIN_CLOCKBYTES 16 * 1024\n\n#define GENT_SLICES 128 \/\/ 32 \/\/ orig 16\n#define GENT_SIZE (GENT_SLICES * ALL_SLICE) \/\/ 1024 (16 * 64)\n\nstatic int ressut_bytes = (RESSUT_SLICES * ALL_SLICE); \/\/ orig 2048\nstatic int ressut_bits1_needed = RESSUT_SLICES * 2; \/\/ orig 256\nstatic int ressut_bits2_needed = RESSUT_SLICES * 8; \/\/ orig 1024\nstatic int ressut_bits3_needed = RESSUT_SLICES * 16; \/\/ orig 2048\nstatic int ressut_bits4_needed = RESSUT_SLICES * 16; \/\/ orig 2048\nstatic int ressut_bits5_needed = RESSUT_SLICES * 16; \/\/ orig 2048\nstatic int ressut_bits6_needed = RESSUT_SLICES * 32; \/\/ orig 2048 * 2\nstatic int ressut_bits7_needed = RESSUT_SLICES * 128; \/\/ orig 2048 * 8\nstatic int ressut_bits20_needed = RESSUT_SLICES * 32; \/\/ orig 2048 * 2\nstatic int ressut_bits21_needed = RESSUT_SLICES * 16; \/\/ orig 2048\nstatic int ressut_bits30_needed = RESSUT_SLICES * 32; \/\/ orig 2048 * 2\n\nint rndbits1 = 0,\n  rndbits2 = 0,\n  rndbits3 = 0,\n  rndbits4 = 0,\n  rndbits5 = 0,\n  rndbits6 = 0,\n  rndbits7 = 0,\n  rndbits20 = 0,\n  rndbits21 = 0,\n  rndbits22 = 0,\n  rndbits30 = 0;\n\nstatic int stats = 0;\n\n#define DEBUG_SORTED 2\n\nunsigned long long ressu_useconds2()\n{\n  struct timeval tv;\n  gettimeofday(&amp;tv, NULL);\n  return((unsigned long long)tv.tv_usec + 1000000ULL * (unsigned long long)tv.tv_sec);\n}\n\nstatic unsigned char ressu_lowusec2() \/* JariK 2013 *\/\n{\n  struct timeval tv;\n  gettimeofday(&amp;tv, NULL);\n  return(tv.tv_usec &amp; 0xff);\n}\n\n#define FIXEDCLOCKCHAINLENGTH 50 \/\/ orig 50\nunsigned int fixedclockchainlength = FIXEDCLOCKCHAINLENGTH;\n\nint fixedclock = 0; \/\/ 0 = normal, 1 = fixed\n\nstatic unsigned char ressu_clock()\n{\n  static unsigned int clockbyte = 0, counter = 0;\n\n  if(!fixedclock)\n    return ressu_lowusec2();\n  else {\n    if(counter == 0) {\n      clockbyte++;\n      counter += fixedclockchainlength;\n    }\n    counter--;\n    return(clockbyte &amp; 0xff);\n  }\n}\n\n#include &lt;sys\/types.h&gt;\n#include &lt;unistd.h&gt;\n\n#define aDEBUG2A 2\n#define aDEBUG2B 2\n#define aDEBUG2C 2\n#define aDEBUG2D 2\n#define aDEBUG2E 2\n#define aDEBUG2F 2\n#define aDEBUG2G 2\n#define aDEBUG2H 2\n\nstatic unsigned char *ressuct; \/\/ ressu random buffer lookup\nstatic unsigned int ressuct_bytes;\nstatic unsigned char ch;\n\n#ifdef DEBUG2H\n\nunsigned long count&#91;RESSUT_BYTES];\n\n#endif\n\nstatic unsigned int ressu_nonrandom() \/\/ not really random\n{\n  static unsigned int rando = 0;\n  struct timeval tv;\n\n  int pid = getpid();\n  int clock2 = clock();\n  gettimeofday(&amp;tv, NULL);\n\n#ifdef DEBUG2G\n\n  static int rowid = 0;\n\n  if(rowid == 0) {\n    fprintf(stdout,\"%6s\",\"rowid\");\n    fprintf(stdout,\"%6s\",\"rando\");\n    fprintf(stdout,\"%6s\",\"pid\");\n    fprintf(stdout,\"%6s\",\"clk\");\n    fprintf(stdout,\"%6s\",\"dtime\");\n    fprintf(stdout,\"%6s\",\"+usec\");\n    fprintf(stdout,\"%6s\",\"ptime\");\n    fprintf(stdout,\"%6s\",\"+usec\");\n    fprintf(stdout,\"%6s\",\"ch*ch\");\n    fprintf(stdout,\"%6s\",\"newra\");\n    fprintf(stdout,\"\\n\");\n  }\n  fprintf(stdout,\"%6d\", rowid++);\n  fprintf(stdout,\"%6d\", rando % RESSUT_BYTES);\n\n#endif\n  \n  rando = rando +\n    \/\/genbytes +\n    \/\/time(NULL) +\n    \/\/ressu_useconds2() +\n    \/\/ressu_clock() +\n    \/\/buf.tms_utime + \n    \/\/buf.tms_stime +\n    pid +\n    clockbytes +\n    tv.tv_sec +\n    tv.tv_usec +\n    clock2 \/ CLOCKS_PER_SEC +\n    clock2 % CLOCKS_PER_SEC +\n    ch * ch;\n\n#ifdef DEBUG2G\n  \n  fprintf(stdout,\"%6d\", pid % RESSUT_BYTES);\n  fprintf(stdout,\"%6d\", (int) clockbytes %RESSUT_BYTES);\n  fprintf(stdout,\"%6d\", (int) tv.tv_sec % RESSUT_BYTES);\n  fprintf(stdout,\"%6d\", (int) tv.tv_usec % RESSUT_BYTES);\n  fprintf(stdout,\"%6d\", (int) (clock2 \/ CLOCKS_PER_SEC) % RESSUT_BYTES); \n  fprintf(stdout,\"%6d\", (int) (clock2 % CLOCKS_PER_SEC) % RESSUT_BYTES);\n  fprintf(stdout,\"%6d\", (int) (ch * ch) % RESSUT_BYTES);\n  fprintf(stdout,\"%6d\", rando % RESSUT_BYTES);\n  fprintf(stdout,\"\\n\");\n\n#endif\n  \n#ifdef DEBUG2H\n  count&#91;rando % ressuct_bytes]++;\n#endif\n  \n#if defined DEBUG2C &amp;&amp; !defined DEBUG2G\n  static unsigned int itemnum = 0;\n  \n  if(itemnum % 16 == 0) {\n    if(itemnum &gt; 0)\n      fprintf(stdout,\"\\n\");\n    fprintf(stdout,\"%05d \", itemnum);\n  }\n  fprintf(stdout,\" %4u\", rando % ressuct_bytes);\n  itemnum++;\n  newressu_output = 1;\n#endif\n\n  return(rando);\n}\n\n#define MAX_DEPTH 4 \/\/ now 4\n\nint depth = 4; \/\/ now 4\n\nunsigned int copyreverse = 1;\nunsigned long cblocks = 0;\nunsigned char lens = 4;\n\nstatic unsigned char ressu_copyreverse(int pdepth) \/\/ 2024 JariK\n{\n  static int reverse&#91;MAX_DEPTH] = {0}; \/\/ 0 = copy, 1 = reverse, 28.10.2022 JariK\n  static unsigned int len&#91;MAX_DEPTH] = {0};\n  static unsigned int count&#91;MAX_DEPTH] = {0};\n  static unsigned int low&#91;MAX_DEPTH] = {0};\n  static unsigned int high&#91;MAX_DEPTH] = {0};\n  static unsigned char bytes&#91;MAX_DEPTH]&#91;257] = {0};\n  \n  if(pdepth == 0) {\n#ifdef DEBUG2D\n    int c = ressu_clock();\n    \/\/fprintf(stdout,\", ch2:%02x\",c);\n    return(c);\n#else\n    return(ressu_clock());\n#endif\n  }\n\n  pdepth--;\n\n  \/\/ dividing clock stream into blocks\n  \/\/ and reversing every other block\n\n  \/\/ copy next block to bytes\n  \n  if(count&#91;pdepth] == 0) { \/\/ previous block ended\n    reverse&#91;pdepth] = !reverse&#91;pdepth];\n    len&#91;pdepth] = ressuct&#91;ressu_nonrandom() % ressuct_bytes] + 2; \/\/ block size\n    \/\/len&#91;pdepth] = (ressuct&#91;ressu_nonrandom() % ressuct_bytes] &amp; 3 ) + 2; \/\/ block size\n    \/\/len&#91;pdepth] = --lens + 2; \/\/ block size\n    \/\/len&#91;pdepth] = lens++ + 2; \/\/ block size\n    count&#91;pdepth] = len&#91;pdepth];\n    low&#91;pdepth] = 0;\n    high&#91;pdepth] = len&#91;pdepth];\n    rndbits2 += 2;\n#ifdef DEBUG2A\n    fprintf(stdout,\"\\nblk:\");\n    fprintf(stdout,\" depth:%d\", pdepth);\n    fprintf(stdout,\", reverse:%d\", reverse&#91;pdepth]);\n    fprintf(stdout,\", len:%d\", len&#91;pdepth]);\n    fprintf(stdout,\", count:%d\", count&#91;pdepth]);\n    fprintf(stdout,\", low:%d\", low&#91;pdepth]);\n    fprintf(stdout,\", high:%d\", high&#91;pdepth]);\n    fflush(stdout);\n#endif\n    for(int c = 0; c &lt; len&#91;pdepth]; c++) {\n      bytes&#91;pdepth]&#91;c] = ressu_copyreverse(pdepth); \/\/ block bytes\n#ifdef DEBUG2A\n      fprintf(stdout,\", b%d:%02x\", pdepth, bytes&#91;pdepth]&#91;c]);\n      newressu_output = 1;\n#endif\n    }\n  }\n  if(reverse&#91;pdepth]) { \/\/ reverse\n    \n    \/\/ get reversed byte to return\n    ch = bytes&#91;pdepth]&#91;--high&#91;pdepth]]; \/\/ reverse\n#ifdef DEBUG2E\n    fprintf(stdout,\", rev%d:%02x\", pdepth, ch);\n    fflush(stdout);\n#endif\n    --count&#91;pdepth];\n\n  } else { \/\/ copy\n    \n    \/\/ get copied byte to return\n    ch = bytes&#91;pdepth]&#91;low&#91;pdepth]++]; \/\/ copy\n#ifdef DEBUG2E\n    fprintf(stdout,\", copy%d:%02x\", pdepth, ch);\n    fflush(stdout);\n#endif\n    --count&#91;pdepth];\n  }\n\n  return(ch);\n}\n\nstatic unsigned char ressu_clockbyte() \/* JariK 2013 *\/\n{\n  if(copyreverse) {\n    ch = ressu_copyreverse(depth);\n  } else {\n    ch = ressu_clock();\n  } \/\/ end of if(copyreverse)\n\n#ifdef DEBUG2F\n  static unsigned int cols = 0;\n  if(cols % 32 == 0) {\n    if(cols &gt; 0)\n      fprintf(stdout,\"\\n\");\n    fprintf(stdout,\"%05u \",cols);\n    newressu_output = 1;\n  }\n  if(cols % 4 == 0)\n    fprintf(stdout,\" \");\n  fprintf(stdout,\"%02x\",ch);\n  newressu_output = 1;\n  cols++;\n#endif\n  \n  \/\/ statistics for theoretical\n  \/\/ random bits calculation (rndbits?)\n  \n  static int prevbyte = -1, clockcount = 0;\n  static int prevclockcount = -1;\n  \n  if(prevbyte == -1)\n    prevbyte = ch;\n  if(prevbyte != ch) {\n    periods&#91;clockcount]++;\n    clockbytes += clockcount;\n#ifdef DEBUG2B\n    fprintf(stdout,\" %d\", clockcount);\n    newressu_output = 1;\n#endif\n    if((ch &amp; 1) != (prevbyte &amp; 1))\n      rndbits20++;\n    if((ch &amp; 2) != (prevbyte &amp; 2))\n      rndbits21++;\n    if((ch &amp; 4) != (prevbyte &amp; 4))\n      rndbits22++;\n\n    if(prevclockcount == -1)\n      prevclockcount = clockcount;\n    \n    if(((ch &amp; 1) != (prevbyte &amp; 1)) &amp;&amp; prevclockcount != clockcount)\n      rndbits30++;\n    \n    prevclockcount = clockcount;\n\n    clockcount = 0;\n\n    prevbyte = ch;\n  }\n  clockcount++;\n  \n  return(ch);\n}\n\n#define RR8(byte, bits) ( ((byte) &gt;&gt; (bits)) | ((byte) &lt;&lt; (8 - (bits))) )\n#define RL8(byte, bits) ( ((byte) &gt;&gt; (8 - (bits))) | ((byte) &lt;&lt; (bits)) )\n\n#define aDEBUG5A 2\n#define aDEBUG5B 2\n#define aDEBUG5C 2\n#define aLOWCLOCKBITONLY 2 \/\/ off by default\n\nvoid ressu_genbytes_single_do(int size, unsigned char *buffer) \/\/ JariK 2013\n{\n  int c, d;\n  unsigned char e;\n  static int f = 0;\n  \n  for(c = 0; c &lt; 8; c++) {\n    for(d = 0; d &lt; size; d++) { \/\/ shift and xor\n      e = buffer&#91;d];\n      e = RL8(e, 1); \/\/ rotate byte left 1 bits\n      \/\/e = RL8(e, 3); \/\/ rotate byte left 3 bits\n      \/\/e = RR8(e, 1); \/\/ rotate byte right 1 bits\n\n#ifdef LOWCLOCKBITONLY\n      buffer&#91;d] = e ^ (ressu_clockbyte() &amp; 1);\n#else\n      buffer&#91;d] = e ^ ressu_clockbyte();\n#endif\n    }\n    for(d = 0; d &lt; size; d++) { \/\/ swap\n#ifdef DEBUG5B\n      fprintf(stdout,\"d:%d\", d);\n      fprintf(stdout,\", f:%d\", f);\n      fprintf(stdout,\", bufferd:%d\", buffer&#91;d]);\n      fprintf(stdout,\", bufferf:%d\", buffer&#91;f]);\n      fprintf(stdout,\"\\n\");\n#endif\n      f = (f + buffer&#91;d] + 2) % size; \/\/ + 2 JariK 2022\n      e = buffer&#91;d];\n      buffer&#91;d] = buffer&#91;f];\n      buffer&#91;f] = e;\n    }\n\n    \/\/ more randomness from clocks. JariK 2025\n\n    unsigned long long usec;\n    usec = clock();\n    while(usec &gt; 0) {\n      f = (f + usec) % size;\n      usec \/= size;\n    }\n    usec = ressu_useconds2();\n    while(usec &gt; 0) {\n      f = (f + usec) % size;\n      usec \/= size;\n    }\n  }\n}\n\nvoid ressu_genbytes_single(int size, unsigned char *buffer)\n{\n  ressuct = buffer;  \/\/ ressu random buffer lookup\n  ressuct_bytes = size;\n\n  rndbits2 = 0;\n  clockbytes = 0;\n\n  cblocks = 0;\n\n  ressu_genbytes_single_do(size, buffer);\n\n  \/\/\n  \/\/  display statistics\n  \/\/\n\n  if(stats) {\n\n    if(newressu_output == 1)\n      fprintf(stdout, \"\\n\");\n    newressu_output = 0;\n\n    fprintf(stderr, \"rounds:1\");\n\n    long chains = 0;\n    \n    for(int e = 0; e &lt; 1024; e++) {\n      if(periods&#91;e] &gt; 0) {\n\tfprintf(stderr, \" %d:%lu\", e, periods&#91;e]);\n\tchains += periods&#91;e];\n      }\n    }\n    \n    fprintf(stderr, \", chains:%ld\", chains);\n    fprintf(stderr, \", blocks:%ld\", cblocks);\n    fprintf(stderr, \", clockbytes:%ld\", clockbytes);\n    fprintf(stderr, \", rndbits2:%d\", rndbits2);\n    fprintf(stderr, \"\\n\");\n    fflush(stderr);\n  }\n#ifdef DEBUG7\n\n  ressu_dump(\"single\", size, buffer, 32);\n\n#endif\n  \n  genbytes += size;\n}\n\nvoid ressu_genbytes_fast(int size, unsigned char *buffer)\n{\n  int d, e, f;\n\n  ressuct = buffer; \/\/ ressu random buffer lookup\n  ressuct_bytes = size;\n\n  rndbits2 = 0;\n  clockbytes = 0;\n\n  cblocks = 0;\n  \n  for(d = 0; d &lt; RESSU_MIN_ROUNDS ||\n\t(copyreverse == 1 &amp;&amp; depth &gt; 0 &amp;&amp; rndbits2 &lt; ressut_bits2_needed) ||\n\tclockbytes &lt; RESSU_MIN_CLOCKBYTES; d++) {\n    ressu_genbytes_single_do(size, buffer);\n  }\n\n  \/\/\n  \/\/  display statistics\n  \/\/\n  \n  if(stats) {\n\n    if(newressu_output == 1)\n      fprintf(stdout, \"\\n\");\n    newressu_output = 0;\n\n    fprintf(stderr, \"rounds:%d\", d);\n\n    long chains = 0;\n    \n    for(e = 0; e &lt; 1024; e++) {\n      if(periods&#91;e] &gt; 0) {\n\tfprintf(stderr, \" %d:%lu\", e, periods&#91;e]);\n\tchains += periods&#91;e];\n      }\n    }\n\n    fprintf(stderr, \", chains:%ld\", chains);\n    fprintf(stderr, \", blocks:%ld\", cblocks);\n    \n#ifdef DEBUG_SORTED\n    \n    fprintf(stderr, \", sorted:\");\n\n    int g = 0;\n\n    for(;;) {\n      f = -1;\n      for(e = 0; e &lt; 1024; e++) {\n\tif( (f == -1 &amp;&amp; periods&#91;e] &gt; g) ||\n\t    (periods&#91;e] &gt; g &amp;&amp; f &gt; periods&#91;e]) )\n\t  f = periods&#91;e];\n      }\n      if(f == -1)\n\tbreak;\n      \n      g = f;\n      fprintf(stderr,\" %d\", g);\n    }\n    \n#endif\n    \n    fprintf(stderr, \", clockbytes:%ld\", clockbytes);\n    fprintf(stderr, \", rndbits2:%d\", rndbits2);\n    fprintf(stderr, \"\\n\");\n    fflush(stderr);\n  }\n\n#ifdef DEBUG7\n\n  ressu_dump(\"fast\", size, buffer, 32);\n\n#endif\n  \n  genbytes += size;\n}\n\n#define aDEBUG3B 2\n#define aDEBUG8 2\n\nvoid ressu_genbytes(int size, unsigned char *buffer) \/\/ 6.5.2021 JariK\n{\n  int c, d, e, f;\n  static unsigned char ressut&#91;RESSUT_BYTES];\n  static int ressut_first = 1,\n    ressut_pos = 0;\n\n  unsigned long prevperiods&#91;1024];\n\n  ressuct = ressut;  \/\/ ressu random buffer lookup\n  ressuct_bytes = ressut_bytes; \/\/ table used in ressu_genbytes_single_do\n\n  for(c = 0; c &lt; size; c++) {\n    if(ressut_pos == 0) {\n      if(ressut_first) {\n\tmemset(ressut, 0, ressut_bytes);\n\tressut_first = 0;\n      }\n\n      clockbytes = 0;\n      for(d = 0; d &lt; 1024; d++) {\n\tperiods&#91;d] = 0;\n      }\n\n      rndbits1 = 0;\n      rndbits2 = 0;\n      rndbits3 = 0;\n      rndbits4 = 0;\n      rndbits5 = 0;\n      rndbits6 = 0;\n      rndbits7 = 0;\n      rndbits20 = 0;\n      rndbits21 = 0;\n      rndbits22 = 0;\n      rndbits30 = 0;\n\n      cblocks = 0;\n      \n      int lim, lim1 = 0, lim2 = 0;\n      int lim1a, lim1b;\n      int high1, high2;\n\n      int rndbits3high;\n      int rndbits4highdigits;\n      int rndbits6high;\n      int rndbits6pos;\n      int rndbits7high;\n      \n      for(d = 0;\n\t  rndbits1 &lt; ressut_bits1_needed ||\n\t    (copyreverse == 1 &amp;&amp; depth &gt; 0 &amp;&amp; rndbits2 &lt; ressut_bits2_needed) ||\n\t  rndbits3 &lt; ressut_bits3_needed ||\n\t  rndbits4 &lt; ressut_bits4_needed ||\n\t  rndbits5 &lt; ressut_bits5_needed ||\n\t  rndbits6 &lt; ressut_bits6_needed ||\n\t  rndbits7 &lt; ressut_bits7_needed ||\n\t  rndbits20 &lt; ressut_bits20_needed ||\n\t  rndbits21 &lt; ressut_bits21_needed ||\n\t  rndbits30 &lt; ressut_bits30_needed ||\n\t  d &lt; RESSU_MIN_ROUNDS ||\n\t  clockbytes &lt; RESSU_MIN_CLOCKBYTES; d++) {\n\n#define aDEBUG6 2\n\t\n\t\/\/\n\t\/\/  calculate rndbits1\n\t\/\/\n\t\n\t\/\/ save previous round\n\n        for(e = 0; e &lt; 1024; e++) {\n\t  prevperiods&#91;e] = periods&#91;e];\n\t}\n\n\tressu_genbytes_single_do(ressut_bytes, ressut);\n\n\t\/\/ find new lim1\n\t\n\tlim = lim1;\n\tf = -1;\n\tfor(e = 0; e &lt; 1024; e++) {\n\t  if(prevperiods&#91;e] &gt; 0 &amp;&amp; prevperiods&#91;e] == lim) {\n\t    if(f == -1 || (periods&#91;e]&gt;0 &amp;&amp; f&lt;periods&#91;e])) {\n\t      f  = periods&#91;e];\n\t    }\n\t  }\n\t}\n\n\tif(f != -1)\n\t  lim = f;\n\n\tlim1a = lim;\n\t\n\t\/\/ find highest amount of chains\n\t\n\thigh1 = -1;\n\tfor(e = 0; e &lt; 1024; e++) {\n\t  if(high1 == -1 || high1 &lt; periods&#91;e]) {\n\t    high1 = periods&#91;e];\n\t  }\n\t}\n\n\t\/\/ and second highest\n\t\n\thigh2 = -1;\n\tfor(e = 0; e &lt; 1024; e++) {\n\t  if( (high2 == -1 &amp;&amp; periods&#91;e] &lt; high1) ||\n\t      (high2 &lt; periods&#91;e] &amp;&amp; periods&#91;e] &lt; high1) ) {\n\t    high2 = periods&#91;e];\n\t  }\n\t}\n\n\t\/\/ and average\n\n\tint psum = 0;\n\tint pcnt = 0;\n\tfor(e = 0; e &lt; 1024; e++) {\n\t  if(periods&#91;e] &gt; 0) {\n\t    psum += periods&#91;e];\n\t    pcnt++;\n\t  }\n\t}\n\n\tlim1b = (int)((double)psum \/ pcnt);\n\t\n\t\/\/ find next smaller than average\n\n\tf = -1;\n\tfor(e = 0; e &lt; 1024; e++) {\n\t  if( (f == -1 &amp;&amp; periods&#91;e] &lt; lim1b) ||\n\t      (f &lt; periods&#91;e] &amp;&amp; periods&#91;e] &lt; lim1b) ) {\n\t    f = periods&#91;e];\n\t  }\n\t}\n\n\tif(f != -1)\n\t  lim1b = f;\n\n\tif(lim == 0 || lim &gt; lim1b)\n\t  lim = lim1b;\n\n\t\/\/ if lim greater that second highest,\n\t\/\/ set to second highest\n\n\tif(lim &gt; high2) {\n\t  lim = high2;\n\t}\n\t\t\n\tlim1 = lim;\n\n\t\/\/ find next greater than lim\n\t\n\tf = -1;\n\tfor(e = 0; e &lt; 1024; e++) {\n\t  if(periods&#91;e] &gt; lim &amp;&amp;\n\t     (f == -1 || periods&#91;e] &lt; f))\n\t    f = periods&#91;e];\n\t}\n\tif(f != -1)\n\t  lim = f;\n\n\tlim2 = lim;\n\n\t\/\/ calculate rndbits1\n\n#define aDEBUG14A 2\n\t\n\trndbits1 = 0;\n\tfor(e = 0; e &lt; 1024; e++) {\n\t  if(periods&#91;e] &gt; 0 &amp;&amp; periods&#91;e] &lt; lim) {\n\t    rndbits1 += periods&#91;e];\n\t  }\n\t}\n\t\n\t\/\/\n\t\/\/  calculate rndbits3\n\t\/\/\n\n#define aDEBUG14C 2\n\t\n\trndbits3high = 0;\n\tfor(e = 0; e &lt; 1024; e++) {\n\t  if(rndbits3high &lt; periods&#91;e])\n\t    rndbits3high = periods&#91;e];\n\t}\n\n\trndbits3 = 0;\n\tfor(e = 0; e &lt; 1024; e++) {\n\t  if(rndbits3high &gt; periods&#91;e]) {\n\t    rndbits3 += periods&#91;e];\n\t  }\n\t}\n\n\t\/\/\n\t\/\/  calculate rndbits4\n\t\/\/\n\n#define aDEBUG14D 2\n\t\n\trndbits4highdigits = 0;\n\tfor(e = 0; e &lt; 1024; e++) {\n\t  if(rndbits4highdigits &lt; (int)log10((double)periods&#91;e]) + 1) {\n\t    rndbits4highdigits = (int)log10((double)periods&#91;e]) + 1;\n\t  }\n\t}\n\n\trndbits4 = 0;\n\tfor(e = 0; e &lt; 1024; e++) {\n\t  if(rndbits4highdigits &gt; (int)log10((double)periods&#91;e]) + 1) {\n\t    rndbits4 += periods&#91;e];\n\t  }\n\t}\n\n\t\/\/\n\t\/\/  calculate rndbits5\n\t\/\/\n\n#define aDEBUG14E 2\n\t\n\trndbits5 = 0;\n\n\tfor(e = 0; e &lt; 1024; e++) {\n\t  rndbits5 += periods&#91;e];\n\t}\n\n\t\/\/\n\t\/\/  calculate rndbits6\n\t\/\/\n\n#define aDEBUG14F 2\n\t\n\trndbits6high = 0;\n\trndbits6pos = 0;\n\trndbits6 = 0;\n\tfor(e = 0; e &lt; 1024; e++) {\n\t  if(rndbits6high &lt; periods&#91;e]) {\n\t    rndbits6high = periods&#91;e];\n\t    rndbits6pos = e;\n\t  }\n\t}\n\n\tfor(e = 0; e &lt; 1024; e++) {\n\t  if(rndbits6high &gt; periods&#91;e] &amp;&amp; periods&#91;e] &gt; 0) {\n\t    if(rndbits6pos &gt; e)\n\t      rndbits6 += log2((double)rndbits6pos - e) * periods&#91;e];\n\t    else\n\t      rndbits6 += log2((double)e - rndbits6pos) * periods&#91;e];\n\t  }\n\t}\n\n\t\/\/\n\t\/\/  calculate rndbits7\n\t\/\/\n\n#define aDEBUG14G 2\n\t\n\trndbits7high = 0;\n\trndbits7 = 0;\n\tfor(e = 0; e &lt; 1024; e++) {\n\t  if(rndbits7high &lt; periods&#91;e])\n\t    rndbits7high = periods&#91;e];\n\t}\n\n\tfor(e = 0; e &lt; 1024; e++) {\n\t  if(rndbits7high &gt; periods&#91;e] &amp;&amp; periods&#91;e] &gt; 0) {\n\t    rndbits7 += log2((double)rndbits7high - periods&#91;e]) * periods&#91;e];\n\t  }\n\t}\n\t\n#define aDEBUG14W 2\n\n#ifdef DEBUG14W\n\n\tfprintf(stderr,\"rndbits1:%d\",rndbits1);\n\tfprintf(stderr,\", 2:%d\",rndbits2);\n\tfprintf(stderr,\", 3:%d\",rndbits3);\n\tfprintf(stderr,\", 4:%d\",rndbits4);\n\tfprintf(stderr,\", 5:%d\",rndbits5);\n\tfprintf(stderr,\", 6:%d\",rndbits6);\n\tfprintf(stderr,\", 7:%d\",rndbits7);\n\tfprintf(stderr,\", 20:%d\",rndbits20);\n\tfprintf(stderr,\", 21:%d\",rndbits21);\n\tfprintf(stderr,\", 22:%d\",rndbits22);\n\tfprintf(stderr,\", 30:%d\",rndbits30);\n\tfprintf(stderr,\"\\n\");\n\n#endif\n      } \/\/ for(d = 0;\n      \n      \/\/\n      \/\/ debug display for rndbits1\n      \/\/\n\n#ifdef DEBUG14A\n\t\n      rndbits1 = 0;\n      for(e = 0; e &lt; 1024; e++) {\n\tif(periods&#91;e] &gt; 0 &amp;&amp; periods&#91;e] &lt; lim) {\n\t  rndbits1 += periods&#91;e];\n\t  fprintf(stderr,\"e:%d\", e);\n\t  fprintf(stderr,\", periods:%ld\", periods&#91;e]);\n\t  fprintf(stderr,\", rndbits1+prev:%d\", rndbits1);\n\t  fprintf(stderr,\"\\n\");\n\t}\n      }\n\n#endif\n      \n      \/\/\n      \/\/  debug display for rndbits3\n      \/\/\n\n#ifdef DEBUG14C\n\t\n      rndbits3 = 0;\n      for(e = 0; e &lt; 1024; e++) {\n\tif(rndbits3high &gt; periods&#91;e] &amp;&amp;\n\t   periods&#91;e] &gt; 0) {\n\t  rndbits3 += periods&#91;e];\n\t  fprintf(stderr,\"e:%d\", e);\n\t  fprintf(stderr,\", periods:%ld\", periods&#91;e]);\n\t  fprintf(stderr,\", rndbits3+prev:%d\", rndbits3);\n\t  fprintf(stderr,\"\\n\");\n\t}\n      }\n\n#endif\n      \n      \/\/\n      \/\/  debug display for rndbits4\n      \/\/\n\n#ifdef DEBUG14D\n      \n      rndbits4 = 0;\n      for(e = 0; e &lt; 1024; e++) {\n\tif(rndbits4highdigits &gt; (int)log10((double)periods&#91;e]) + 1 &amp;&amp;\n\t   periods&#91;e] &gt; 0) {\n\t  rndbits4 += periods&#91;e];\n\t  fprintf(stderr,\"e:%d\", e);\n\t  fprintf(stderr,\", periods:%ld\", periods&#91;e]);\n\t  fprintf(stderr,\", rndbits4+prev:%d\", rndbits4);\n\t  fprintf(stderr,\"\\n\");\n\t}\n      }\n\n#endif\n      \n      \/\/\n      \/\/  debug display for rndbits5\n      \/\/\n\n#ifdef DEBUG14E\n\n      rndbits5 = 0;\n\n      for(e = 0; e &lt; 1024; e++) {\n\tif(periods&#91;e] &gt; 0) {\n\t  fprintf(stderr,\"e:%d\", e);\n\t  fprintf(stderr,\", periods:%ld\", periods&#91;e]);\n\t  rndbits5 += periods&#91;e];\n\t  fprintf(stderr,\", rndbits5+prev:%d\", rndbits5);\n\t  fprintf(stderr,\"\\n\");\n\t}\n      }\n\n#endif\n      \n      \/\/\n      \/\/  debug diplay for rndbits6\n      \/\/\n\n#ifdef DEBUG14F\n\t\n      rndbits6 = 0;\n      for(e = 0; e &lt; 1024; e++) {\n\tif(rndbits6high &gt; periods&#91;e] &amp;&amp;\n\t   periods&#91;e] &gt; 0) {\n\t  fprintf(stderr,\"e:%d\", e);\n\t  fprintf(stderr,\", periods:%lu\", periods&#91;e]);\n\n\t  double l2;\n\n\t  if(rndbits6pos &gt; e) {\n\t    fprintf(stderr,\", pos-e:%d\", rndbits6pos - e);\n\t    l2 = log2((double)rndbits6pos - e);\n\t  } else {\n\t    fprintf(stderr,\", e-pos:%d\", e - rndbits6pos);\n\t    l2 = log2((double)e - rndbits6pos);\n\t  }\n\t  fprintf(stderr,\", log2(prev):%f\", l2);\n\t  fprintf(stderr,\", periods*prev:%ld\", (long int) ((double)periods&#91;e] * l2));\n\t  rndbits6 += l2 * periods&#91;e];\n\t  fprintf(stderr,\", rndbits6+prev:%d\", rndbits6);\n\t  fprintf(stderr,\"\\n\");\n\t}\n      }\n\n#endif\n      \n      \/\/\n      \/\/  debug diplay for rndbits7\n      \/\/\n\n#ifdef DEBUG14G\n\n      rndbits7 = 0;\n      for(e = 0; e &lt; 1024; e++) {\n\tif(rndbits7high &gt; periods&#91;e] &amp;&amp;\n\t   periods&#91;e] &gt; 0) {\n\t  rndbits7 += log2((double)rndbits7high - periods&#91;e]) * periods&#91;e];\n\t  fprintf(stderr,\"e:%d\", e);\n\t  fprintf(stderr,\", periods:%ld\", periods&#91;e]);\n\t  fprintf(stderr,\", high-prev:%ld\", rndbits7high-periods&#91;e]);\n\t  double l2=log2((double)rndbits7high-periods&#91;e]);\n\t  fprintf(stderr,\", log2(prev):%f\", l2);\n\t  fprintf(stderr,\", periods*prev:%ld\", (long int) ((double)periods&#91;e] * l2));\n\t  fprintf(stderr,\", rndbits7+prev:%d\", rndbits7);\n\t  fprintf(stderr,\"\\n\");\n\t}\n      }\n\n#endif\n      \n      if(stats) {\n\n\tif(newressu_output == 1)\n\t  fprintf(stderr,\"\\n\");\n\tnewressu_output = 0;\n\t\n\t\/\/\n\t\/\/  display statistics\n\t\/\/\n\tfprintf(stderr, \"rounds:%d\", d);\n\tlong chains = 0;\n    \n\tfor(e = 0; e &lt; 1024; e++) {\n\t  if(periods&#91;e] &gt; 0) {\n\t    fprintf(stderr, \" %d:%lu\", e, periods&#91;e]);\n\t    chains += periods&#91;e];\n\t  }\n\t}\n\n\tfprintf(stderr, \", chains:%ld\", chains);\n\tfprintf(stderr, \", blocks:%ld\", cblocks);\n\t\n#ifdef DEBUG_SORTED\n\t\n\tfprintf(stderr, \", sorted:\");\n\tint g = 0;\n\tfor(;;) {\n\t  f = -1;\n\t  for(e = 0; e &lt; 1024; e++) {\n\t    if( (f == -1 &amp;&amp; periods&#91;e] &gt; g) ||\n\t\t(periods&#91;e] &gt; g &amp;&amp; f &gt; periods&#91;e]) )\n\t      f = periods&#91;e];\n\t  }\n\t  if(f == -1)\n\t    break;\n\n\t  g = f;\n\t  fprintf(stderr,\" %d\", g);\n\t}\n\t\n#endif\n\tfprintf(stderr, \", ressut size:%d\", ressut_bytes);\n\tfprintf(stderr, \", high1:%d\", high1);\n\tfprintf(stderr, \", high2:%d\", high2);\n\tfprintf(stderr, \", lim1a:%d\", lim1a);\n\tfprintf(stderr, \", lim1b:%d\", lim1b);\n\tfprintf(stderr, \", lim1:%d\", lim1);\n\tfprintf(stderr, \", lim2:%d\", lim2);\n\tfprintf(stderr, \", div:%f\", (double)lim2 \/ lim1);\n\tfprintf(stderr, \", clockbytes:%ld\", clockbytes);\n\tfprintf(stderr, \", rndbits1:%d\", rndbits1);\n\tfprintf(stderr, \", rndbits2:%d\", rndbits2);\n\tfprintf(stderr, \", rndbits3high:%d\", rndbits3high);\n\tfprintf(stderr, \", rndbits3:%d\", rndbits3);\n\tfprintf(stderr, \", rndbits4highdigits:%d\", rndbits4highdigits);\n\tfprintf(stderr, \", rndbits4:%d\", rndbits4);\n\tfprintf(stderr, \", rndbits5:%d\", rndbits5);\n\tfprintf(stderr, \", rndbits6high:%d\", rndbits6high);\n\tfprintf(stderr, \", rndbits6:%d\", rndbits6);\n\tfprintf(stderr, \", rndbits7high:%d\", rndbits7high);\n\tfprintf(stderr, \", rndbits7:%d\", rndbits7);\n\tfprintf(stderr, \", rndbits20:%d\", rndbits20);\n\tfprintf(stderr, \", rndbits21:%d\", rndbits21);\n\tfprintf(stderr, \", rndbits22:%d\", rndbits22);\n\tfprintf(stderr, \", 20-21:%d\", rndbits20 - rndbits21);\n\tfprintf(stderr, \", 21-22:%d\", rndbits21 - rndbits22);\n\tfprintf(stderr, \"\\n\");\n\tfflush(stderr);\n      } \/\/ if(stats\n#ifdef DEBUG8\n      ressu_dump(\"ressug\", sizeof(ressut), ressut, 32);      \n#endif\n    } \/\/ if(ressut_pos == 0)\n    buffer&#91;c] ^= ressut&#91;ressut_pos];\n    ressut_pos = (ressut_pos + 1) % ressut_bytes;\n#ifdef OLD1\n    ressut_f = (ressut_f + ressut&#91;ressut_pos] + 2) % ressut_bytes; \/\/ bad for randomness... JariK 2023\n    buffer&#91;c] ^= ressut&#91;ressut_f];\n    ressut_pos = (ressut_pos + 1) % ressut_bytes;\n#endif\n    \n  } \/\/ for(c = 0; c &lt; size; c++)\n\n  if(verbose) {\n    fprintf(stdout,\"ressu\");\n    for(c = 0; c &lt; size; c++) {\n      if(c &gt; 0 &amp;&amp; c % 32 == 0)\n\tfprintf(stdout,\" \");\n      fprintf(stdout,\"%02x\", buffer&#91;c]);\n      newressu_output = 1;\n    }\n    fprintf(stdout,\"\\n\");\n  }\n  \n#ifdef DEBUG8\n\n  ressu_dump(\"ressu\", size, buffer, 32);\n\n#endif\n  \n  genbytes += size;\n}\n\nvoid readfile_xor(int size, unsigned char *buffer, unsigned char *filename)\n{\n  int c, n, filebuffer_pos = 0;\n  unsigned char filebuffer&#91;64];\n  FILE *fp1;\n\n  if((fp1 = fopen(filename, \"rb\")) == NULL) {\n    fprintf(stderr,\"%s: fopen(): cannot open file %s\\n\",\n\t    procname, filename);\n    exit(1);\n  }\n\n  for(c = 0; c &lt; size; c++) {\n    if(filebuffer_pos == 0) {\n      n = (size - c &lt; sizeof(filebuffer)) ? size - c : sizeof(filebuffer);\n      if(fread(filebuffer, 1, n, fp1) &lt; n) {\n\tfprintf(stderr,\"%s: fread(): cannot read file %s\\n\",\n\t\tprocname, filename);\n\texit(1);\n      }\n#ifdef DEBUG8\n      ressu_dump(\"file\", n, filebuffer, 32);\n#endif\n    } \/\/ end of if(file_pos == 0\n    buffer&#91;c] ^= filebuffer&#91;filebuffer_pos];\n    filebuffer_pos = (filebuffer_pos + 1) % sizeof(filebuffer);\n  } \/\/ end of for(c = 0; c &lt; size; c++\n\n  fclose(fp1);\n\n#ifdef DEBUG8\n  ressu_dump(\"return\", size, buffer, 32);\n#endif\n  \n  memset(filebuffer, 0, sizeof(filebuffer)); \/\/ forget file\n}\n\nstatic unsigned char urandomfilename&#91;128] = \"\/dev\/urandom\";\n\nvoid urandom_bytes(int size, unsigned char *buffer)\n{\n  readfile_xor(size, buffer, urandomfilename);\n#ifdef DEBUG8\n  ressu_dump(\"urandom\", size, buffer, 32);\n#endif\n}\n\n#ifdef USE_RANDOM\n\nstatic unsigned char randomfilename&#91;128] = \"\/dev\/random\";\n\nvoid random_bytes(int size, unsigned char *buffer)\n{\n  readfile_xor(size, buffer, randomfilename);\n#ifdef DEBUG8\n  ressu_dump(\"random\", size, buffer, 32);\n#endif\n}\n\n#endif\n\n#ifdef SHA256\n\n#define PSEUDORESSU_LIMIT 1048576 \/\/ limit between rekeys\n#define TOPUP_BYTES 32*1024 \/\/ bytes between topups\n#define TOPUP_SIZE 32 \/\/ topup size in bytes (32 bytes, 256 bits)\n#define aTOPUP_TWICE 2 \/\/ off by default\n\nunsigned long topup_bytes = TOPUP_BYTES;\n\nstatic unsigned char pseudoressu_key&#91;HashLen]; \/\/ 32 bytes, 256 bits\n\nstatic void pseudoressu_internalbytes(unsigned char *digest)\n{\n  HashCtx hash;\n\n  HashInit(&amp;hash);\n  HashUpdate(&amp;hash, pseudoressu_key, sizeof(pseudoressu_key));\n  HashUpdate(&amp;hash, (unsigned char *) &amp;cvar, cvarsize + 1);\n  inccvar();\n  HashFinal(digest, &amp;hash);\n  memset(&amp;hash, 0, sizeof(hash)); \/\/ forget hash\n}\n\nstatic void pseudoressu_addrandomness(int size, unsigned char *buffer)\n{\n  HashCtx hash;\n\n  HashInit(&amp;hash);\n  HashUpdate(&amp;hash, pseudoressu_key, sizeof(pseudoressu_key));\n  HashUpdate(&amp;hash, (unsigned char *) &amp;cvar, cvarsize + 1);\n  inccvar();\n  HashUpdate(&amp;hash, buffer, size);\n  HashFinal(pseudoressu_key, &amp;hash);\n  memset(&amp;hash, 0, sizeof(hash)); \/\/ forget hash\n}\n\nstatic void pseudoressu_topup()\n{\n  unsigned char topup&#91;TOPUP_SIZE]; \/\/ 32 bytes, 256 bits\n\n  ressu_genbytes(sizeof(topup), topup);\n\n  pseudoressu_addrandomness(sizeof(topup), topup);\n\n  memset(&amp;topup, 0, sizeof(topup)); \/\/ forget topup\n}\n\nvoid pseudoressu_bytes(int size, unsigned char *buffer) \/\/ JariK 2022\n{\n  int c;\n  static int pseudoressu_pos = 0, topup_counter = 0, initneeded = 1;\n  static unsigned char pseudoressu&#91;HashLen]; \/\/ 32 bytes, 256 bits\n\n  for(c = 0; c &lt; size; c++) {\n    if(pseudoressu_pos == 0) {\n      if(topup_counter == 0) {\n\tif(initneeded) {\n\t  ressu_genbytes(sizeof(pseudoressu_key), pseudoressu_key); \/\/ set first key\n#ifdef DEBUG8\n\t  ressu_dump(\"first key\", sizeof(pseudoressu_key), pseudoressu_key, 32);\n#endif\n\t  initneeded = 0;\n\t} \/\/ end of if(initneeded\n\t\n\tpseudoressu_topup(); \/\/ add randomness to key, first block also\n#ifdef TOPUP_TWICE\n\tpseudoressu_topup(); \/\/ add randomness to key, first block also\n#endif\n\ttopup_counter = topup_bytes;\n      } \/\/ end of if(topup_counter == 0\n      \n      pseudoressu_internalbytes(pseudoressu); \/\/ get random bits using the key\n#ifdef DEBUG8\n      ressu_dump(\"next data\", sizeof(pseudoressu), pseudoressu, 32);\n#endif\n      topup_counter -= sizeof(pseudoressu);\n    } \/\/ end of if(pseudoressu_pos == 0\n\n    buffer&#91;c] ^= pseudoressu&#91;pseudoressu_pos];\n    pseudoressu_pos = (pseudoressu_pos + 1) % sizeof(pseudoressu);\n  } \/\/ end of for(c = 0; c &lt; size; c++\n  \n  pseudoressu_internalbytes(pseudoressu_key); \/\/ replace key with new random one\n#ifdef DEBUG8\n  ressu_dump(\"new key\", sizeof(pseudoressu_key), pseudoressu_key, 32);\n#endif\n#ifdef DEBUG8\n  ressu_dump(\"pseudoressu2\", size, buffer, 32);\n#endif\n}\n\nvoid ressutwist_bytes(int size, unsigned char *buffer) \/\/ JariK 2023\n{\n  \/\/urandom_bytes(size, buffer);\n  ressu_genbytes(size, buffer);\n  pseudoressu_bytes(size, buffer);\n}\n\n#define aDEBUG15 2\n\nstatic unsigned long long ressu_useconds()\n{\n  struct timeval tv;\n  gettimeofday(&amp;tv, NULL);\n  return((unsigned long long) tv.tv_usec + 1000000ULL * (unsigned long long) tv.tv_sec);\n}\n\nstatic unsigned char ressu_lowusec() \/* JariK 2013 *\/\n{\n  struct timeval tv;\n  gettimeofday(&amp;tv, NULL);\n  return(tv.tv_usec &amp; 0xff);\n}\n\nstatic int randomness = 0;\n\n#define RESSU_ROTATELEFT8(byte, bits) ( ((byte) &gt;&gt; (8 - (bits))) | ((byte) &lt;&lt; (bits)) )\n\nvoid ressu_round(int size, unsigned char *buffer) \/\/ ressu JariK 2013\n{\n  int c, d, byte;\n  unsigned char e;\n  static int f = 0, prevbyte = -1;\n  \n  for(c = 0; c &lt; 8; c++) { \/\/ eight bits per byte\n    for(d = 0; d &lt; size; d++) { \/\/ rotate + xor\n      e = buffer&#91;d];\n      e = RESSU_ROTATELEFT8(e, 1);  \/\/ rotate byte left 1 bits\n      byte = ressu_lowusec();\n      buffer&#91;d] = e ^ byte;\n      if(prevbyte != byte) {\n\tprevbyte = byte;\n\trandomness++;\n      }\n    }\n    for(d = 0; d &lt; size; d++) { \/\/ swap\n      f = (f + buffer&#91;d] + 2) % size;\n      e = buffer&#91;d];\n      buffer&#91;d] = buffer&#91;f];\n      buffer&#91;f] = e;\n    }\n  }\n}\n\nstatic void ressu2_round(int size, unsigned char *buffer) \/\/ ressu2 JariK 2013, 2025\n{\n  int c, d, byte;\n  unsigned char e;\n  static int f = 0, prevbyte = -1;\n  unsigned long long usec;\n  \n  for(c = 0; c &lt; 8; c++) { \/\/ eight bits per byte\n    for(d = 0; d &lt; size; d++) { \/\/ rotate + xor\n      e = buffer&#91;d];\n      e = RESSU_ROTATELEFT8(e, 1);  \/\/ rotate byte left 1 bits\n      byte = ressu_lowusec();\n      buffer&#91;d] = e ^ byte;\n      if(prevbyte != byte) {\n\tprevbyte = byte;\n\trandomness++;\n      }\n    }\n    for(d = 0; d &lt; size; d++) { \/\/ swap\n      f = (f + 16 + buffer&#91;d] + 2) % size;\n      e = buffer&#91;d];\n      buffer&#91;d] = buffer&#91;f];\n      buffer&#91;f] = e;\n    }\n    \n    \/\/ more randomness from clocks\n    usec = clock();\n    while(usec &gt; 0) {\n      f = (f + usec) % size;\n      usec \/= size;\n    }\n    usec = ressu_useconds();\n    while(usec &gt; 0) {\n      f = (f + usec) % size;\n      usec \/= size;\n    }\n  } \/\/ end of for(c = 0; c &lt; 8; c++\n}\n\nstatic void ressu2_1_round(int size, unsigned char *buffer) \/\/ ressu2 JariK 2013\n{\n  int c, d, byte;\n  unsigned char e;\n  static int f = 0, prevbyte = -1, index = 0;\n  unsigned long long usec;\n  \n  for(c = 0; c &lt; 8; c++) { \/\/ eight bits per byte\n    for(d = 0; d &lt; size; d++) { \/\/ rotate + xor\n      e = buffer&#91;d];\n      e = RESSU_ROTATELEFT8(e, 1);  \/\/ rotate byte left 1 bits\n      byte = ressu_lowusec();\n      buffer&#91;d] = e ^ (byte + index);\n      if(prevbyte != byte) {\n\tprevbyte = byte;\n\tindex = 0;\n\trandomness++;\n      }\n      index+=2;\n    }\n    for(d = 0; d &lt; size; d++) { \/\/ swap\n      f = (f + buffer&#91;d] + 2 + 16) % size;\n      e = buffer&#91;d];\n      buffer&#91;d] = buffer&#91;f];\n      buffer&#91;f] = e;\n    }\n    \n    \/\/ more randomness from clocks\n    usec = clock();\n    while(usec &gt; 0) {\n      f = (f + usec) % size;\n      usec \/= size;\n    }\n    usec = ressu_useconds();\n    while(usec &gt; 0) {\n      f = (f + usec) % size;\n      usec \/= size;\n    }\n  } \/\/ end of for(c = 0; c &lt; 8; c++\n}\n\n#define aDEBUG16A 2\n\n#define RESSU2_BYTES 2048\n#define RESSU2_RANDOMNESS_NEEDED 2048\n#define RESSU2_CLOCKS_NEEDED 20480 \/\/ now 20480\n#define RESSU2_MINIMUM_ROUNDS 5\n\nvoid ressu2_bytes(int size, unsigned char *buffer) \/\/ JariK 2013, 2026\n{\n  int c, d, clocksused;\n  static int ressu_pos = 0;\n  static unsigned char ressu&#91;RESSU2_BYTES];\n\n  for(c = 0; c &lt; size; c++) {\n    if(ressu_pos == 0) {\n      randomness = 0;\n      clocksused = 0;\n      \/\/memset(&amp;ressu, 0, sizeof(ressu)); \/\/ forget buffer\n      for(d = 0; d &lt; RESSU2_MINIMUM_ROUNDS ||\n\t    randomness &lt; RESSU2_RANDOMNESS_NEEDED ||\n\t    clocksused &lt; RESSU2_CLOCKS_NEEDED\n\t    ; d++) {\n\tressu2_round(sizeof(ressu), ressu);\n\tclocksused += (sizeof(ressu) * 8);\n      }\n#ifdef DEBUG8\n      ressu_dump(\"ressu2g\", sizeof(ressu), ressu, 32);      \n#endif\n      if(stats) {\n\tfprintf(stdout,\"rounds:%d\", d);\n\tfprintf(stdout,\", randomness:%d\", randomness);\n\tfprintf(stdout,\", clocksused:%d\", clocksused);\n\tfprintf(stdout,\"\\n\");\n      }\n    } \/\/ end of if(ressu_pos == 0\n    buffer&#91;c] ^= ressu&#91;ressu_pos];\n    ressu_pos = (ressu_pos + 1) % sizeof(ressu);\n  } \/\/ end of for(c = 0; c &lt; size; c++\n#ifdef DEBUG8\n  ressu_dump(\"ressu2\", size, buffer, 32);\n#endif\n}\n\n#define PSEUDORESSU2_TOPUP_BYTES 32*1024 \/\/ bytes between topups\n#define PSEUDORESSU2_TOPUP_SIZE 32 \/\/ topup size in bytes (32 bytes, 256 bits)\n#define aPSEUDORESSU2_TOPUP_TWICE 2 \/\/ off by default\n\nunsigned long pseudoressu2_topup_bytes = PSEUDORESSU2_TOPUP_BYTES;\n\nstatic unsigned char pseudoressu2_key&#91;HashLen]; \/\/ 32 bytes, 256 bits\n\nstatic void pseudoressu2_internalbytes(unsigned char *digest)\n{\n  HashCtx hash;\n\n  HashInit(&amp;hash);\n  HashUpdate(&amp;hash, pseudoressu2_key, sizeof(pseudoressu2_key)); \/\/ add old randomness to hash\n  HashUpdate(&amp;hash, (unsigned char *) &amp;cvar, cvarsize + 1);\n  inccvar();\n  HashFinal(digest, &amp;hash);\n  memset(&amp;hash, 0, sizeof(hash)); \/\/ forget hash\n}\n\nstatic void pseudoressu2_addrandomness(int size, unsigned char *buffer)\n{\n  unsigned long long usec;\n  HashCtx hash;\n\n  HashInit(&amp;hash);\n  HashUpdate(&amp;hash, pseudoressu2_key, sizeof(pseudoressu2_key)); \/\/ add old randomness to hash\n  HashUpdate(&amp;hash, (unsigned char *) &amp;cvar, cvarsize + 1);\n  inccvar();\n  usec = ressu_useconds(); \/\/ add timestamp to hash\n  HashUpdate(&amp;hash, (unsigned char *)&amp;usec, sizeof(usec));\n  usec = clock(); \/\/ add processor time to hash (for randomness)\n  HashUpdate(&amp;hash, (unsigned char *)&amp;usec, sizeof(usec));\n  HashUpdate(&amp;hash, buffer, size); \/\/ add given randomness to hash\n  HashFinal(pseudoressu2_key, &amp;hash); \/\/ save as new key\n  memset(&amp;hash, 0, sizeof(hash)); \/\/ forget hash\n}\n\nstatic void pseudoressu2_topup()\n{\n  unsigned char topup&#91;TOPUP_SIZE]; \/\/ 32 bytes, 256 bits\n\n  memset(&amp;topup, 0, sizeof(topup)); \/\/ forget topup\n  ressu2_bytes(sizeof(topup), topup);\n#ifdef DEBUG8\n  ressu_dump(\"topup\", sizeof(topup), topup, 32);\n#endif\n  pseudoressu2_addrandomness(sizeof(topup), topup);\n\n  memset(&amp;topup, 0, sizeof(topup)); \/\/ forget topup\n}\n\nvoid pseudoressu2_bytes(int size, unsigned char *buffer) \/\/ JariK 2022, 2025\n{\n  int c;\n  static int pseudoressu_pos = 0, topup_counter = 0, initneeded = 1;\n  static unsigned char pseudoressu&#91;HashLen]; \/\/ 32 bytes, 256 bits\n\n  for(c = 0; c &lt; size; c++) {\n    if(pseudoressu_pos == 0) {\n      if(topup_counter == 0) {\n\tif(initneeded) {\n\t  ressu2_bytes(sizeof(pseudoressu2_key), pseudoressu2_key); \/\/ get first key\n#ifdef DEBUG8\n\t  ressu_dump(\"first key\", sizeof(pseudoressu2_key), pseudoressu2_key, 32);\n#endif\n\t  initneeded = 0;\n\t} \/\/ end of if(initneeded\n\t\n\tpseudoressu2_topup(); \/\/ add randomness to key, first block also\n#ifdef PSEUDORESSU2_TOPUP_TWICE\n\tpseudoressu2_topup(); \/\/ add randomness to key, first block also\n#endif\n\ttopup_counter = pseudoressu2_topup_bytes;\n      } \/\/ end of if(topup_counter == 0\n      \n      pseudoressu2_internalbytes(pseudoressu); \/\/ get random bits using the key\n#ifdef DEBUG8\n      ressu_dump(\"next data\", sizeof(pseudoressu), pseudoressu, 32);\n#endif\n      topup_counter -= sizeof(pseudoressu);\n    } \/\/ end of if(pseudoressu_pos == 0\n\n    buffer&#91;c] ^= pseudoressu&#91;pseudoressu_pos];\n    pseudoressu_pos = (pseudoressu_pos + 1) % sizeof(pseudoressu);\n  } \/\/ end of for(c = 0; c &lt; size; c++\n  \n  pseudoressu2_internalbytes(pseudoressu2_key); \/\/ replace key with new random one\n#ifdef DEBUG8\n  ressu_dump(\"new key\", sizeof(pseudoressu2_key), pseudoressu2_key, 32);\n#endif\n#ifdef DEBUG8\n  ressu_dump(\"pseudoressu\", size, buffer, 32);\n#endif\n}\n\nvoid ressu2twist_bytes(int size, unsigned char *buffer) \/\/ JariK 2023, 2025\n{\n  \/\/urandom_bytes(size, buffer);\n  ressu2_bytes(size, buffer);\n  pseudoressu2_bytes(size, buffer);\n}\n\nstatic void ressu3_round(int size, unsigned char *buffer) \/\/ ressu2 JariK 2013\n{\n  int c, d, byte, length = 0;\n  unsigned char e;\n  static int f = 0, prevbyte = -1, prevlength = -1;\n  unsigned long long usec;\n  \n  for(c = 0; c &lt; 8; c++) { \/\/ eight bits per byte\n    for(d = 0; d &lt; size; d++) { \/\/ rotate + xor\n      e = buffer&#91;d];\n      e = RESSU_ROTATELEFT8(e, 1);  \/\/ rotate byte left 1 bits\n      byte = ressu_lowusec();\n      buffer&#91;d] = e ^ byte;\n      if(prevbyte != byte) {\n\tprevbyte = byte;\n\tif(prevlength != length) {\n\t  prevlength = length;\n\t  randomness++;\n\t}\n\tlength = 0;\n      }\n      length++;\n    }\n    for(d = 0; d &lt; size; d++) { \/\/ swap\n      f = (f + buffer&#91;d] + 2 + 16) % size;\n      e = buffer&#91;d];\n      buffer&#91;d] = buffer&#91;f];\n      buffer&#91;f] = e;\n    }\n    \n    \/\/ more randomness from clocks\n    usec = clock();\n    while(usec &gt; 0) {\n      f = (f + usec) % size;\n      usec \/= size;\n    }\n    usec = ressu_useconds();\n    while(usec &gt; 0) {\n      f = (f + usec) % size;\n      usec \/= size;\n    }\n  } \/\/ end of for(c = 0; c &lt; 8; c++\n}\n\n#define aDEBUG16A 2\n\n#define RESSU3_BYTES 2048\n#define RESSU3_RANDOMNESS_NEEDED 2048\n#define RESSU3_CLOCKS_NEEDED 20480 \/\/ now 20480\n#define RESSU3_MINIMUM_ROUNDS 5\n\nvoid ressu3_bytes(int size, unsigned char *buffer) \/\/ JariK 2013\n{\n  int c, d, clocksused;\n  static int ressu_pos = 0;\n  static unsigned char ressu&#91;RESSU3_BYTES];\n\n  for(c = 0; c &lt; size; c++) {\n    if(ressu_pos == 0) {\n      randomness = 0;\n      clocksused = 0;\n      \/\/memset(&amp;ressu, 0, sizeof(ressu)); \/\/ forget buffer\n      for(d = 0; d &lt; RESSU3_MINIMUM_ROUNDS ||\n\t    randomness &lt; RESSU3_RANDOMNESS_NEEDED ||\n\t    clocksused &lt; RESSU3_CLOCKS_NEEDED\n\t    ; d++) {\n\tressu3_round(sizeof(ressu), ressu);\n\tclocksused += (sizeof(ressu) * 8);\n      }\n#ifdef DEBUG8\n      ressu_dump(\"ressu3g\", sizeof(ressu), ressu, 32);      \n#endif\n      if(stats) {\n\tfprintf(stdout,\"rounds:%d\", d);\n\tfprintf(stdout,\", randomness:%d\", randomness);\n\tfprintf(stdout,\", clocksused:%d\", clocksused);\n\tfprintf(stdout,\"\\n\");\n      }\n    } \/\/ end of if(ressu_pos == 0\n    buffer&#91;c] ^= ressu&#91;ressu_pos];\n    ressu_pos = (ressu_pos + 1) % sizeof(ressu);\n  } \/\/ end of for(c = 0; c &lt; size; c++\n#ifdef DEBUG8\n  ressu_dump(\"ressu3\", size, buffer, 32);\n#endif\n}\n\n#define SINGLE_BYTES 2048\n\nvoid single_bytes(int size, unsigned char *buffer) \/\/ JariK 2013\n{\n  int c, clocksused;\n  static int ressu_pos = 0;\n  static unsigned char ressu&#91;SINGLE_BYTES];\n\n  for(c = 0; c &lt; size; c++) {\n    if(ressu_pos == 0) {\n      randomness = 0;\n      clocksused = 0;\n      memset(&amp;ressu, 0, sizeof(ressu)); \/\/ forget buffer\n      ressu2_round(sizeof(ressu), ressu);\n#ifdef DEBUG8\n      ressu_dump(\"singleg\", sizeof(ressu), ressu, 32);      \n#endif\n      if(stats) {\n\tfprintf(stdout,\"rounds:1\");\n\tfprintf(stdout,\", randomness:%d\", randomness);\n\tfprintf(stdout,\", clocksused:%d\", clocksused);\n\tfprintf(stdout,\"\\n\");\n      }\n    } \/\/ end of if(ressu_pos == 0\n    buffer&#91;c] ^= ressu&#91;ressu_pos];\n    ressu_pos = (ressu_pos + 1) % sizeof(ressu);\n  } \/\/ end of for(c = 0; c &lt; size; c++\n#ifdef DEBUG8\n  ressu_dump(\"single\", size, buffer, 32);\n#endif\n}\n\nstatic unsigned long long pseudorandom_useconds()\n{\n  struct timeval tv;\n  gettimeofday(&amp;tv, NULL);\n#ifdef DEBUG15\n  fprintf(stdout,\"usec:%ld(%ld)\", tv.tv_usec, (unsigned long)sizeof(tv.tv_usec));\n  fprintf(stdout,\", sec:%ld(%ld)\", tv.tv_sec, (unsigned long)sizeof(tv.tv_sec));\n  fprintf(stdout,\", total:%ld\", tv.tv_usec + 1000000 * tv.tv_sec);\n  fprintf(stdout,\", total1(ll):%lld\", (unsigned long long)tv.tv_usec + 1000000 * tv.tv_sec);\n  fprintf(stdout,\", total2(ll):%lld\", (unsigned long long)tv.tv_usec + 1000000ULL * (unsigned long long)tv.tv_sec);\n  fprintf(stdout,\", sizeof(ull):%ld\", (unsigned long)sizeof(unsigned long long));\n  fprintf(stdout,\"\\n\");\n#endif\n  return((unsigned long long) tv.tv_usec + 1000000ULL * (unsigned long long) tv.tv_sec);\n}\n\nstatic unsigned char pseudorandom_key&#91;HashLen]; \/\/ 32 bytes, 256 bits\n\nstatic void pseudorandom_internalbytes(unsigned char *digest)\n{\n  HashCtx hash;\n\n  HashInit(&amp;hash);\n  HashUpdate(&amp;hash, pseudorandom_key, sizeof(pseudorandom_key)); \/\/ add old randomness to hash\n  HashUpdate(&amp;hash, (unsigned char *) &amp;cvar, cvarsize + 1);\n  inccvar();\n  HashFinal(digest, &amp;hash);\n  memset(&amp;hash, 0, sizeof(hash)); \/\/ forget hash\n}\n\n#define PSEUDORANDOM_RANDOMNESS_NEEDED 256 \/\/ now 256, bits in hash\n#define PSEUDORANDOM_MINIMUM_ROUNDS 16 \/\/ now 16\n#define PSEUDORANDOM_BUFFER_SIZE 128 \/\/ now 128\n#define PSEUDORANDOM_CLOCKS_NEEDED 20480 \/\/ now 20480\n\nstatic void pseudorandom_topup()\n{\n  int c, clocksused;\n  static int initneeded = 1;\n  unsigned long long usec;\n  static unsigned char buffer&#91;PSEUDORANDOM_BUFFER_SIZE];\n  HashCtx hash;\n\n  HashInit(&amp;hash);\n  HashUpdate(&amp;hash, pseudorandom_key, sizeof(pseudorandom_key)); \/\/ add old randomness to hash\n  HashUpdate(&amp;hash, (unsigned char *) &amp;cvar, cvarsize + 1);\n  inccvar();\n\n  if(initneeded) { \/\/ clear buffer once in the beginning\n    memset(&amp;buffer, 0, sizeof(buffer));\n    initneeded = 0;\n  }\n\n  clocksused = 0;\n  randomness = 0;\n\n  for(c = 0; c &lt; PSEUDORANDOM_MINIMUM_ROUNDS ||\n\trandomness &lt; PSEUDORANDOM_RANDOMNESS_NEEDED ||\n\tclocksused &lt; PSEUDORANDOM_CLOCKS_NEEDED\n\t; c++) {\n    usec = pseudorandom_useconds(); \/\/ add timestamp to hash\n#ifdef DEBUG16A\n    if(stats)\n      fprintf(stdout,\"%02d %llx \", c, usec);\n#endif\n    HashUpdate(&amp;hash, (unsigned char *)&amp;usec, sizeof(usec));\n    randomness++; \/\/ calculate bit for full time\n\n    ressu_round(sizeof(buffer), buffer); \/\/ one round, eight bits of ressu\n    clocksused += (sizeof(buffer) * 8);\n\n#ifdef DEBUG16A\n    if(stats) {\n      for(int d = 0; d &lt; sizeof(buffer); d++)\n\tfprintf(stdout,\"%02x\", buffer&#91;d]);\n      fprintf(stdout,\"\\n\");\n      fflush(stdout);\n    }\n#endif\n    HashUpdate(&amp;hash, (unsigned char *)&amp;buffer, sizeof(buffer));\n  }\n  \/\/HashUpdate(&amp;hash, (unsigned char *)&amp;buffer, sizeof(buffer));\n\n  HashFinal(pseudorandom_key, &amp;hash); \/\/ save as new key\n#ifdef DEBUG8\n  ressu_dump(\"topup key\", sizeof(pseudorandom_key), pseudorandom_key, 32);\n#endif\n\n#ifdef DEBUG16A\n  if(stats) {\n    fprintf(stdout,\"randomness:%d\", randomness);\n    fprintf(stdout,\", clocksused:%d\\n\", clocksused);\n  }\n#endif\n  memset(&amp;hash, 0, sizeof(hash)); \/\/ forget hash\n}\n\n#define PSEUDORANDOM_TOPUP_BYTES 32*1024 \/\/ bytes between topups\n#define aPSEUDORANDOM_TOPUP_TWICE 2\n\nvoid pseudorandom_bytes(int size, unsigned char *buffer) \/\/ JariK 2025\n{\n  int c;\n  static int pseudorandom_pos = 0, topup_counter = 0;\n  static unsigned char pseudorandom&#91;HashLen]; \/\/ 32 bytes, 256 bits\n\n  for(c = 0; c &lt; size; c++) {\n    if(pseudorandom_pos == 0) {\n      if(topup_counter == 0) {\n\tpseudorandom_topup(); \/\/ add randomness to key, first block also\n#ifdef PSEUDORANDOM_TOPUP_TWICE\n\tpseudorandom_topup(); \/\/ add randomness to key, first block also\n#endif\n\ttopup_counter = PSEUDORANDOM_TOPUP_BYTES;\n      } \/\/ end of if(topup_counter == 0\n      pseudorandom_internalbytes(pseudorandom); \/\/ get random bits using the key\n#ifdef DEBUG8\n      ressu_dump(\"next data\", sizeof(pseudorandom), pseudorandom, 32);\n#endif\n      topup_counter -= sizeof(pseudorandom);\n    } \/\/ end of if(pseudorandom_pos == 0\n    buffer&#91;c] ^= pseudorandom&#91;pseudorandom_pos]; \n    pseudorandom_pos = (pseudorandom_pos + 1) % sizeof(pseudorandom);\n  } \/\/ end of for(c = 0; c &lt; size; c++\n  pseudorandom_internalbytes(pseudorandom_key); \/\/ replace key with new random one\n#ifdef DEBUG8\n  ressu_dump(\"new key\", sizeof(pseudorandom_key), pseudorandom_key, 32);\n#endif\n#ifdef DEBUG8\n  ressu_dump(\"pseudorandom\", size, buffer, 32);\n#endif\n}\n\n#endif \/\/ end of #ifdef SHA256\n\n#ifdef SHA256\n\nvoid dumpbin(FILE *fp1, int len, unsigned char *buf)\n{\n  int c;\n\n  for(c = 0; c &lt; len; c++)\n    if(isprint(buf&#91;c]) &amp;&amp; buf&#91;c] != ' ')\n      fputc(buf&#91;c], stderr);\n    else\n      fprintf(stderr,\"\\\\%02x\", buf&#91;c]);\n}\n\nvoid dumpline(FILE *fp1, int len, unsigned char *buf)\n{\n  int c;\n\n  for(c = 0; c &lt; len; c++)\n    fprintf(fp1,\"%02x\", buf&#91;c]);\n}\n\nstatic unsigned char stream_key&#91;HashLen]; \/\/ 32 bytes, 256 bits\n\nstatic void stream_internalbytes(unsigned char *digest)\n{\n  HashCtx hash;\n\n  HashInit(&amp;hash);\n  HashUpdate(&amp;hash, stream_key, sizeof(stream_key));\n  HashUpdate(&amp;hash, (unsigned char *) &amp;cvar, cvarsize + 1);\n  inccvar();\n  HashFinal(digest, &amp;hash);\n\n  memset(&amp;hash, 0, sizeof(hash)); \/\/ forget hash\n}\n\nstatic int stream_pos = 0;\nstatic unsigned long stream_input_bytes = 0;\n\n#define STREAM_REKEY 2048 \/\/ rekey blocksize now 2048\n\nvoid stream_bytes(int size, unsigned char *buffer) \/\/ JariK 2023\n{\n  int c;\n  static unsigned char stream&#91;HashLen]; \/\/ 32 bytes, 256 bits\n  \n  for(c = 0; c &lt; size; c++) {\n\n    if(stream_pos == 0) {\n\n      if(stream_input_bytes % STREAM_REKEY == 0) {\n\tstream_internalbytes(stream_key); \/\/ change key, first block also\n#ifdef DEBUG8\n\tressu_dump(\"rekey\", sizeof(stream_key), stream_key, 32);\n#endif\n      }\n\n      stream_internalbytes(stream); \/\/ read next \"random\" bytes\n#ifdef DEBUG8\n      ressu_dump(\"nextdata\", sizeof(stream), stream, 32);\n#endif\n      \n      stream_input_bytes += sizeof(stream);\n    } \/\/ end of if(stream_pos == 0\n\n    buffer&#91;c] = stream&#91;stream_pos];\n    stream_pos = (stream_pos + 1) % sizeof(stream);\n  } \/\/ end of for(c = 0; c &lt; size; c++\n\n#ifdef DEBUG8\n  ressu_dump(\"stream\", size, buffer, 32);\n#endif\n  \n}\n\n#define STREAM_KEY_ROUNDS 4096 \/\/ should be fast enough and slow enough, now 4096\n\nvoid stream_open(int size, unsigned char *key) \/\/ size = 0 --&gt; zero terminated string\n{\n  int c;\n  HashCtx hash;\n\n  clearcvar();\n  stream_pos = 0;\n  stream_input_bytes = 0;\n\n  if(size == 0)\n    size = strlen(key);\n  \n  HashInit(&amp;hash);\n  HashUpdate(&amp;hash, key, size);\n  HashUpdate(&amp;hash, (unsigned char *) &amp;cvar, cvarsize + 1);\n  inccvar();\n\n  for(c = 0; c &lt; STREAM_KEY_ROUNDS; c++) {\n    HashFinal(stream_key, &amp;hash);\n\n    HashInit(&amp;hash);\n    HashUpdate(&amp;hash, stream_key, sizeof(stream_key));\n    HashUpdate(&amp;hash, (unsigned char *) &amp;cvar, cvarsize + 1);\n    inccvar();\n  }\n\n  HashFinal(stream_key, &amp;hash);\n\n#define DEBUG21 2\n\n#ifdef DEBUG21\n  fflush(stdout);\n  fprintf(stderr,\"%s: stream_open():\", procname);\n  fprintf(stderr,\" randomness from key, key=\");\n  dumpbin(stderr, size, key);\n  fprintf(stderr,\"\\n\");\n  fflush(stderr);\n#endif\n\n#ifdef DEBUG8\n  ressu_dump(\"first key\", sizeof(stream_key), stream_key, 32);\n#endif\n\n  memset(&amp;hash, 0, sizeof(hash)); \/\/ forget hash\n}\n\n#endif \/\/ end of #ifdef SHA256\n\nvoid test_bytes(int size, unsigned char *buffer) \/\/ JariK 2023\n{\n  \/\/ insert your generator here, run it with\n  \/\/ --test command line parameter (source for\n  \/\/ randomness)\n\n  urandom_bytes(size, buffer);\n  ressutwist_bytes(size, buffer);\n  ressu2twist_bytes(size, buffer);\n  \n  \/\/memset(buffer, 0, size);\n\n  \/\/for(int c = 0; c &lt; size; c++)\n  \/\/  buffer&#91;c] = c &amp; 0xff;\n}\n\nvoid newressu_version()\n{\n  fprintf(stderr, \"%s\", programname); \/\/ touch these outside #ifdef MAIN\n  fprintf(stderr, \", %s\", copyright);\n}\n\n#ifdef MAIN\n\n#include &lt;unistd.h&gt;\n#include &lt;ctype.h&gt;\n#include &lt;malloc.h&gt;\n\n#include \"newressu.h\"\n\n#define SAMPLE_WRITE 2 \/\/ on by default\n#define SAMPLE_HASH 2 \/\/ on by default (for now)\n#define SAMPLE_SYNC 2 \/\/ on by default (for now (exfat))\n#define USE_TIMER 2\n#define aUSE_DUMMY 2\n\nvoid command_readline(unsigned char *command, int linelen, unsigned char *line)\n{\n  FILE *fp1;\n\n  line&#91;0] = '\\0';\n  \n  if((fp1 = popen(command, \"r\")) == NULL) {\n    fprintf(stdout,\"%s: popen(): cannot open process '%s'\\n\",\n\t    procname, command);\n  } else  {\n    fgets(line, linelen, fp1);\n    if(line&#91;strlen(line)-1] == '\\n')\n      line&#91;strlen(line)-1] = '\\0';\n  }\n}\n\nlong long command_countlines(unsigned char *command)\n{\n  unsigned char buffer&#91;1024];\n  long long ll = 0;\n  FILE *fp1;\n\n  if((fp1 = popen(command, \"r\")) == NULL) {\n    fprintf(stdout,\"%s: popen(): cannot open process '%s'\\n\",\n\t    procname, command);\n  } else  {\n    while(fgets(buffer, sizeof(buffer), fp1) != NULL)\n      ll++;\n  }\n  return(ll);\n}\n\n#define aDEBUG25 \/\/ off by default\n#define aDEBUG19 \/\/ off by default\n\n#ifdef DEBUG19\n\nvoid save_path(int path_length, unsigned char *path)\n{\n  if((getcwd(path, path_length)) == NULL) {\n    fprintf(stdout,\"%s: save_path(): cannot get working directory (getcwd())\\n\",\n\t    procname);\n  }\n#ifdef DEBUG25\n  fprintf(stderr,\"%s: save_path(): saved current path (getcwd()), path = %s\\n\",\n\t  procname, path);\n#endif\n}\n\nint exists_path(unsigned char *path)\n{\n  FILE *fp1;\n  \n  if((fp1 = fopen(path, \"r\")) != NULL) {\n    fclose(fp1);\n    \/\/fprintf(stderr,\"path %s ok\\n\", path);\n    return(1);\n  } else\n    return(0);\n}\n\nvoid set_path(unsigned char *path)\n{\n  if(chdir(path) != 0) {\n    fprintf(stdout,\"%s: set_path(): cannot change directory (chdir())\\n\",\n\t    procname);\n  }\n#ifdef DEBUG25\n  fprintf(stderr,\"%s: set_path(): set path (chdir()), path = %s\\n\",\n\t  procname, path);\n#endif\n}\n\n#endif \/\/ end of #ifdef DEBUG19\n\nunsigned char *newressu_strstr(unsigned char *haystack, unsigned char *needle)\n{\n  int nlen = strlen(needle);;\n  unsigned char *p = haystack;\n\n  while(*p != '\\0') {\n    if(!strncmp(p, needle, nlen) &amp;&amp;\n       ( isblank(*(p + nlen)) || ispunct(*(p + nlen)) || *(p + nlen) == '\\0' ) &amp;&amp; \/\/ character after string\n       ( (p == haystack) || isblank(*(p - 1)) || ispunct(*(p - 1)) ) ) \/\/ character before string\n      return(p);\n    p++;\n  }\n  return(NULL);\n}\n\n#ifdef OLD1\n\nunsigned char *newressu_strstr(unsigned char *haystack, unsigned char *needle)\n{\n  int fl;\n  unsigned char *p = haystack;\n\n  while(*p != '\\0') {\n    fl = strlen(needle);\n    if(!strncmp(p, needle, strlen(needle)) &amp;&amp;\n       ( isblank(*(p + fl)) || ispunct(*(p + fl)) || *(p + fl) == '\\0' ) &amp;&amp; \/\/ character after string\n       ( (p == haystack) || isblank(*(p - 1)) || ispunct(*(p - 1)) ) ) { \/\/ character before string\n      return(p);\n    }\n    p++;\n  }\n  return(NULL);\n}\n\n#endif\n\n\/*\n *  code for flags functions\n *\/\n\/*\n\ud83c\udde6\n\ud83c\udde7\n\ud83c\udde8\n\ud83c\udde9\n\ud83c\uddea\n\ud83c\uddeb\n\ud83c\uddec\n\ud83c\udded\n\ud83c\uddee\n\ud83c\uddef\n\ud83c\uddf0\n\ud83c\uddf1\n\ud83c\uddf2\n\ud83c\uddf3\n\ud83c\uddf4\n\ud83c\uddf5\n\ud83c\uddf6\n\ud83c\uddf7\n\ud83c\uddf8\n\ud83c\uddf9\n\ud83c\uddfa\n\ud83c\uddfb\n\ud83c\uddfc\n\ud83c\uddfd\n\ud83c\uddfe\n\ud83c\uddff\n*\/\n\/*\n  \ud83c\udde6\ud83c\udde7\ud83c\udde8\ud83c\udde9\ud83c\uddea\ud83c\uddeb\ud83c\uddec\ud83c\udded\ud83c\uddee\ud83c\uddef\ud83c\uddf0\ud83c\uddf1\ud83c\uddf2\ud83c\uddf3\ud83c\uddf4\ud83c\uddf5\ud83c\uddf6\ud83c\uddf7\ud83c\uddf8\ud83c\uddf9\ud83c\uddfa\ud83c\uddfb\ud83c\uddfc\ud83c\uddfd\ud83c\uddfe\ud83c\uddff\n*\/\n\nstruct idflags { \/\/ 202307 JariK\n  unsigned char *id;\n  unsigned char *flags;\n} idsflags&#91;] = {\n  { \"\ud83c\uddeb\ud83c\uddee\", \"\ud83c\uddeb\ud83c\uddee: fi, fin, Finland, EU, NORTHERNEUROPE, EUROPE, EURASIA, NORDIC, FINLAND\" },\n  { \"\ud83c\udde6\ud83c\uddfd\", \"\ud83c\udde6\ud83c\uddfd: ax, ala, \u00c5land, aland, NORDIC, FINLAND\" },\n  { \"\ud83c\uddf8\ud83c\uddea\", \"\ud83c\uddf8\ud83c\uddea: se, swe, Sweden, EU, NORTHERNEUROPE, EUROPE, EURASIA, NORDIC\" },\n  { \"\ud83c\uddf3\ud83c\uddf4\", \"\ud83c\uddf3\ud83c\uddf4: no, nor, Norway, NORTHERNEUROPE, EUROPE, EURASIA, NORDIC\" },\n  { \"\ud83c\udde9\ud83c\uddf0\", \"\ud83c\udde9\ud83c\uddf0: dk, dnk, Denmark, EU, NORTHERNEUROPE, EUROPE, EURASIA, NORDIC, DENMARK\" },\n  { \"\ud83c\uddeb\ud83c\uddf4\", \"\ud83c\uddeb\ud83c\uddf4: fo, fro, FaroeIslands, NORDIC, DENMARK\" },\n  { \"\ud83c\uddee\ud83c\uddf8\", \"\ud83c\uddee\ud83c\uddf8: is, isl, Iceland, NORTHERNEUROPE, EUROPE, EURASIA, NORDIC\" },\n  { \"\ud83c\uddec\ud83c\uddf1\", \"\ud83c\uddec\ud83c\uddf1: gl, grl, Greenland, NORTHAMERICA, NORDIC, DENMARK\" },\n  \n  { \"\ud83c\uddea\ud83c\uddea\", \"\ud83c\uddea\ud83c\uddea: ee, est, Estonia, EU, NORTHERNEUROPE, EUROPE, EURASIA, BALTIC\" },\n  { \"\ud83c\uddf1\ud83c\uddfb\", \"\ud83c\uddf1\ud83c\uddfb: lv, lva, Latvia, EU, NORTHERNEUROPE, EUROPE, EURASIA, BALTIC\" },\n  { \"\ud83c\uddf1\ud83c\uddf9\", \"\ud83c\uddf1\ud83c\uddf9: lt, ltu, Lithuania, EU, NORTHERNEUROPE, EUROPE, EURASIA, BALTIC\" },\n  \n  { \"\ud83c\uddfa\ud83c\udde6\", \"\ud83c\uddfa\ud83c\udde6: ua, ukr, Ukraine, EASTERNEUROPE, EUROPE, EURASIA\" },\n  { \"\ud83c\udde6\ud83c\uddf1\", \"\ud83c\udde6\ud83c\uddf1: al, alb, Albania, EASTERNEUROPE, EUROPE, EURASIA\" },\n  { \"\ud83c\udde6\ud83c\udde9\", \"\ud83c\udde6\ud83c\udde9: ad, and, Andorra, WESTERNEUROPE, EUROPE, EURASIA\" },\n  { \"\ud83c\udde6\ud83c\uddf2\", \"\ud83c\udde6\ud83c\uddf2: am, arm, Armenia, EASTERNEUROPE, EUROPE, EURASIA, WESTASIA, ASIA\" },\n  { \"\ud83c\udde6\ud83c\uddf9\", \"\ud83c\udde6\ud83c\uddf9: at, aut, Austria, EU, WESTERNEUROPE, EUROPE, EURASIA\" },\n  { \"\ud83c\udde6\ud83c\uddff\", \"\ud83c\udde6\ud83c\uddff: az, aze, Azerbaijan, EASTERNEUROPE, EUROPE, WESTASIA, ASIA, EURASIA\" },\n  { \"\ud83c\udde7\ud83c\uddfe\", \"\ud83c\udde7\ud83c\uddfe: by, blr, Belarus, EASTERNEUROPE, EUROPE, EURASIA\" },\n  { \"\ud83c\udde7\ud83c\uddea\", \"\ud83c\udde7\ud83c\uddea: be, bel, Belgium, EU, WESTERNEUROPE, EUROPE, EURASIA\" },\n  { \"\ud83c\udde7\ud83c\udde6\", \"\ud83c\udde7\ud83c\udde6: ba, bih, BosniaandHerzegovina, EASTERNEUROPE, EUROPE\" }, \/\/ Bosnia and Herzegovina\n  { \"\ud83c\udde7\ud83c\uddec\", \"\ud83c\udde7\ud83c\uddec: bg, bgr, Bulgaria, EU, EASTERNEUROPE, EUROPE, EURASIA\" },\n  { \"\ud83c\udded\ud83c\uddf7\", \"\ud83c\udded\ud83c\uddf7: hr, hrv, Croatia, EU, EASTERNEUROPE, EUROPE, EURASIA\" },\n  { \"\ud83c\udde8\ud83c\uddfe\", \"\ud83c\udde8\ud83c\uddfe: cy, cyp, Cyprus, EU, SOUTHERNEUROPE, EUROPE, EURASIA, WESTASIA, ASIA\" },\n  { \"\ud83c\udde8\ud83c\uddff\", \"\ud83c\udde8\ud83c\uddff: cz, cze, CzechRepublic, EU, EASTERNEUROPE, EUROPE, EURASIA\" },  \/\/ Czech Republic Czechia\n  { \"\ud83c\uddeb\ud83c\uddf7\", \"\ud83c\uddeb\ud83c\uddf7: fr, fra, France, EU, WESTERNEUROPE, EUROPE, EURASIA\" },\n  { \"\ud83c\uddec\ud83c\uddea\", \"\ud83c\uddec\ud83c\uddea: ge, geo, Georgia, EASTERNEUROPE, EUROPE, EURASIA, WESTASIA, ASIA\" },\n  { \"\ud83c\udde9\ud83c\uddea\", \"\ud83c\udde9\ud83c\uddea: de, deu, Germany, EU, WESTERNEUROPE, EUROPE, EURASIA\" },\n  { \"\ud83c\uddec\ud83c\uddf7\", \"\ud83c\uddec\ud83c\uddf7: gr, grc, Greece, EU, SOUTHERNEUROPE, EUROPE, EURASIA\" },\n  { \"\ud83c\udded\ud83c\uddfa\", \"\ud83c\udded\ud83c\uddfa: hu, hun, Hungary, EU, EASTERNEUROPE, EUROPE, EURASIA\" },\n  { \"\ud83c\uddee\ud83c\uddea\", \"\ud83c\uddee\ud83c\uddea: ie, irl, Ireland, UK, EU, WESTERNEUROPE, EUROPE, EURASIA\" },\n  { \"\ud83c\uddee\ud83c\uddf9\", \"\ud83c\uddee\ud83c\uddf9: it, ita, Italy, EU, SOUTHERNEUROPE, EUROPE, EURASIA\" },\n  { \"\ud83c\uddfb\ud83c\udde6\", \"\ud83c\uddfb\ud83c\udde6: va, vat, Vatican, SOUTHERNEUROPE, EUROPE, EURASIA\" },\n  { \"\ud83c\uddf0\ud83c\uddff\", \"\ud83c\uddf0\ud83c\uddff: kz, kaz, Kazakhstan, EUROPE, EURASIA, CENTRALASIA, ASIA\" },\n  { \"\ud83c\uddf1\ud83c\uddee\", \"\ud83c\uddf1\ud83c\uddee: li, lie, Liechtenstein, WESTERNEUROPE, EUROPE, EURASIA\" },\n  { \"\ud83c\uddf1\ud83c\uddfa\", \"\ud83c\uddf1\ud83c\uddfa: lu, lux, Luxembourg, EU, WESTERNEUROPE, EUROPE, EURASIA\" },\n  { \"\ud83c\uddf2\ud83c\uddf9\", \"\ud83c\uddf2\ud83c\uddf9: mt, mlt, Malta, EU, SOUTHERNEUROPE, EUROPE, EURASIA\" },\n  { \"\ud83c\uddf2\ud83c\udde9\", \"\ud83c\uddf2\ud83c\udde9: md, mda, Moldova, EASTERNEUROPE, EUROPE, EURASIA\" },\n  { \"\ud83c\uddf2\ud83c\uddea\", \"\ud83c\uddf2\ud83c\uddea: me, mne, Montenegro, EASTERNEUROPE, EUROPE, EURASIA\" },\n  { \"\ud83c\uddf2\ud83c\udde8\", \"\ud83c\uddf2\ud83c\udde8: mc, mco, Monaco, WESTERNEUROPE, EUROPE, EURASIA\" },\n  { \"\ud83c\uddf2\ud83c\uddea\", \"\ud83c\uddf2\ud83c\uddea: me, mne, Montenegro, EUROPE, EURASIA\" },\n  { \"\ud83c\uddf3\ud83c\uddf1\", \"\ud83c\uddf3\ud83c\uddf1: nl, nld, Netherlands, EU, WESTERNEUROPE, EUROPE, EURASIA\" },\n  { \"\ud83c\uddf2\ud83c\uddf0\", \"\ud83c\uddf2\ud83c\uddf0: mk, mkd, Northmacedonia, EASTERNEUROPE, EUROPE, EURASIA\" }, \/\/ North Macedonia\n  { \"\ud83c\uddf5\ud83c\uddf1\", \"\ud83c\uddf5\ud83c\uddf1: pl, pol, Poland, EU, EASTERNEUROPE, EUROPE, EURASIA\" },\n  { \"\ud83c\uddf5\ud83c\uddf9\", \"\ud83c\uddf5\ud83c\uddf9: pt, prt, Portugal, EU, SOUTHERNEUROPE, EUROPE, EURASIA\" },\n  { \"\ud83c\uddf7\ud83c\uddf4\", \"\ud83c\uddf7\ud83c\uddf4: ro, rou, Romania, EU, EASTERNEUROPE, EUROPE, EURASIA\" },\n  { \"\ud83c\uddf7\ud83c\uddfa\", \"\ud83c\uddf7\ud83c\uddfa: ru, rus, Russia, EASTERNEUROPE, EUROPE, EURASIA, NORTHASIA, ASIA, BRICS\" },\n  { \"\ud83c\uddf8\ud83c\uddf2\", \"\ud83c\uddf8\ud83c\uddf2: sm, smr, SanMarino, SOUTHERNEUROPE, EUROPE, EURASIA\" }, \/\/ San Marino\n  { \"\ud83c\uddf7\ud83c\uddf8\", \"\ud83c\uddf7\ud83c\uddf8: rs, srb, Serbia, EASTERNEUROPE, EUROPE, EURASIA\" },\n  { \"\ud83c\uddf8\ud83c\uddf0\", \"\ud83c\uddf8\ud83c\uddf0: sk, svk, Slovakia, EU, EASTERNEUROPE, EUROPE, EURASIA\" },\n  { \"\ud83c\uddf8\ud83c\uddee\", \"\ud83c\uddf8\ud83c\uddee: si, svn, Slovenia, EU, EASTERNEUROPE, EUROPE, EURASIA\" },\n  { \"\ud83c\uddea\ud83c\uddf8\", \"\ud83c\uddea\ud83c\uddf8: es, esp, Spain, EU, SOUTHERNEUROPE, EUROPE, EURASIA\" },\n  { \"\ud83c\udde8\ud83c\udded\", \"\ud83c\udde8\ud83c\udded: ch, che, Switzerland, EU, WESTERNEUROPE, EUROPE, EURASIA\" },\n  { \"\ud83c\uddf9\ud83c\uddf7\", \"\ud83c\uddf9\ud83c\uddf7: tr, tur, Turkey, SOUTHERNEUROPE, EUROPE, EURASIA, WESTASIA, ASIA\" },\n  \n  { \"\ud83c\uddec\ud83c\udde7\", \"\ud83c\uddec\ud83c\udde7: gb, gbr, UnitedKingdom, UK, WESTERNEUROPE, EUROPE, EURASIA\" },\n  { \"\ud83c\uddee\ud83c\uddea\", \"\ud83c\uddee\ud83c\uddea: gb, gbr, England, UK\" },\n  { \"\ud83c\uddee\ud83c\uddea\", \"\ud83c\uddee\ud83c\uddea: gb, gbr, Scotland, UK\" },\n  { \"\ud83c\uddee\ud83c\uddea\", \"\ud83c\uddee\ud83c\uddea: gb, gbr, Wales, UK\" },\n\n  { \"\ud83c\uddec\ud83c\uddee\", \"\ud83c\uddec\ud83c\uddee: gi, gib, Gibraltar, UK\" },\n\n  { \"\ud83c\uddf8\ud83c\uddef\", \"\ud83c\uddf8\ud83c\uddef: sj, sjm, JanMayen, NORWAY\" }, \/\/ Jan Mayen\n  \n  { \"\ud83c\udde6\ud83c\uddee\", \"\ud83c\udde6\ud83c\uddee: ai, aia, Anguilla, NORTHAMERICA, UK\" },\n  { \"\ud83c\udde6\ud83c\uddec\", \"\ud83c\udde6\ud83c\uddec: ag, atg, AntiguaAndBarbuda, NORTHAMERICA\" }, \/\/ Antigua and Barbuda \n  { \"\ud83c\udde6\ud83c\uddfc\", \"\ud83c\udde6\ud83c\uddfc: aw, sbw, Aruba, NORTHAMERICA\" }, \n  { \"\ud83c\udde7\ud83c\uddf8\", \"\ud83c\udde7\ud83c\uddf8: bs, bhs, Bahamas, NORTHAMERICA\" },\n  { \"\ud83c\udde7\ud83c\udde7\", \"\ud83c\udde7\ud83c\udde7: bb, brb, Barbados, NORTHAMERICA\" },\n  { \"\ud83c\udde7\ud83c\uddff\", \"\ud83c\udde7\ud83c\uddff: bz, blz, Belize, NORTHAMERICA\" },\n  { \"\ud83c\udde7\ud83c\uddf2\", \"\ud83c\udde7\ud83c\uddf2: bm, bmu, Bermuda, UK, NORTHAMERICA\" },\n  { \"\ud83c\udde7\ud83c\uddf6\", \"\ud83c\udde7\ud83c\uddf6: bq, bes, Bonaire, NETHERLANDS, NORTHAMERICA\" },\n  { \"\ud83c\uddfb\ud83c\uddec\", \"\ud83c\uddfb\ud83c\uddec: vg, vgb, BritishVirginIslands, UK, NORTHAMERICA\" }, \/\/ British Virgin Islands\n  { \"\ud83c\udde8\ud83c\udde6\", \"\ud83c\udde8\ud83c\udde6: ca, can, Canada, NORTHAMERICA\" },\n  { \"\ud83c\uddf0\ud83c\uddfe\", \"\ud83c\uddf0\ud83c\uddfe: ky, cym, CaymanIslands, UK, NORTHAMERICA\" },\n  { \"\ud83c\uddeb\ud83c\uddf7\", \"\ud83c\uddeb\ud83c\uddf7: fr, fra, ClippertonIsland, FRANCE, NORTHAMERICA\" },\n  { \"\ud83c\udde8\ud83c\uddf7\", \"\ud83c\udde8\ud83c\uddf7: cr, cri, CostaRica, NORTHAMERICA\" },\n  { \"\ud83c\udde8\ud83c\uddfa\", \"\ud83c\udde8\ud83c\uddfa: cu, cub, Cuba, NORTHAMERICA\" },\n  { \"\ud83c\udde8\ud83c\uddfc\", \"\ud83c\udde8\ud83c\uddfc: cw, cuw, Cura\u00e7ao, curacao, NORTHAMERICA\" },\n  { \"\ud83c\udde9\ud83c\uddf2\", \"\ud83c\udde9\ud83c\uddf2: dm, dma, Dominica, NORTHAMERICA\" },\n  { \"\ud83c\udde9\ud83c\uddf4\", \"\ud83c\udde9\ud83c\uddf4: do, dom, DominicanRepublic, NORTHAMERICA\" }, \/\/ Dominican Republic\n  { \"\ud83c\uddf8\ud83c\uddfb\", \"\ud83c\uddf8\ud83c\uddfb: sv, slv, ElSalvador, NORTHAMERICA\" },\n  { \"\ud83c\uddec\ud83c\uddf1\", \"\ud83c\uddec\ud83c\uddf1: gl, grl, Greenland, DENMARK, NORTHAMERICA\" },\n  { \"\ud83c\uddec\ud83c\udde9\", \"\ud83c\uddec\ud83c\udde9: gd, grd, Grenada, NORTHAMERICA\" },\n  { \"\ud83c\uddec\ud83c\uddf5\", \"\ud83c\uddec\ud83c\uddf5: gp, glp, Guadeloupe, FRANCE, NORTHAMERICA\" },\n  { \"\ud83c\uddec\ud83c\uddf9\", \"\ud83c\uddec\ud83c\uddf9: gt, gtm, Guatemala, NORTHAMERICA\" },\n  { \"\ud83c\udded\ud83c\uddf9\", \"\ud83c\udded\ud83c\uddf9: ht, hti, Haiti, NORTHAMERICA\" },\n  { \"\ud83c\udded\ud83c\uddf3\", \"\ud83c\udded\ud83c\uddf3: hn, hnd, Honduras, NORTHAMERICA\" },\n  { \"\ud83c\uddef\ud83c\uddf2\", \"\ud83c\uddef\ud83c\uddf2: jm, jam, Jamaica, NORTHAMERICA\" },\n  { \"\ud83c\uddf2\ud83c\uddf6\", \"\ud83c\uddf2\ud83c\uddf6: mq, mtq, Martinique, FRANCE, NORTHAMERICA\" },\n  { \"\ud83c\uddf2\ud83c\uddfd\", \"\ud83c\uddf2\ud83c\uddfd: mx, mex, Mexico, NORTHAMERICA\" },\n  { \"\ud83c\uddf2\ud83c\uddf8\", \"\ud83c\uddf2\ud83c\uddf8: ms, msr, Montserrat, UK, NORTHAMERICA\" },\n  { \"\ud83c\uddf3\ud83c\uddee\", \"\ud83c\uddf3\ud83c\uddee: ni, nic, Nicaragua, NORTHAMERICA\" },\n  { \"\ud83c\uddf5\ud83c\udde6\", \"\ud83c\uddf5\ud83c\udde6: pa, pan, Panama, NORTHAMERICA\" },\n  { \"\ud83c\uddf5\ud83c\uddf7\", \"\ud83c\uddf5\ud83c\uddf7: pr, pri, PuertoRico, NORTHAMERICA\" },\n  { \"\ud83c\udde7\ud83c\uddf6\", \"\ud83c\udde7\ud83c\uddf6: bq, bes, Saba, NORTHAMERICA\" },\n  { \"\ud83c\udde7\ud83c\uddf1\", \"\ud83c\udde7\ud83c\uddf1: bl, blm, SaintBarth\u00e9lemy, saintbarthelemy, NORTHAMERICA\" }, \/\/ Saint Barth\u00e9lemy\n  { \"\ud83c\uddf0\ud83c\uddf3\", \"\ud83c\uddf0\ud83c\uddf3: kn, kna, SaintKitts, NORTHAMERICA\" }, \/\/ Saint Kitts and Nevis\n  { \"\ud83c\uddf1\ud83c\udde8\", \"\ud83c\uddf1\ud83c\udde8: lc, lca, SaintLucia, NORTHAMERICA\" }, \/\/ Saint Lucia\n  { \"\ud83c\uddf2\ud83c\uddeb\", \"\ud83c\uddf2\ud83c\uddeb: mf, maf, SaintMartin, NORTHAMERICA\" }, \/\/ Collectivity of Saint Martin\n  { \"\ud83c\uddf8\ud83c\uddfd\", \"\ud83c\uddf8\ud83c\uddfd: sx, sxm, SintMaarten, NORTHAMERICA\" }, \/\/ Sint Maarten\n  { \"\ud83c\uddf9\ud83c\uddf9\", \"\ud83c\uddf9\ud83c\uddf9: tt, tto, TrinidadandTobago, NORTHAMERICA\" }, \/\/ Trinidad and Tobago\n  { \"\ud83c\uddf9\ud83c\udde8\", \"\ud83c\uddf9\ud83c\udde8: tc, tca, TurksandCaicos, UK, NORTHAMERICA\" }, \/\/ Turks and Caicos Islands\n  { \"\ud83c\uddf5\ud83c\uddf2\", \"\ud83c\uddf5\ud83c\uddf2: pm, spm, SaintPierre, NORTHAMERICA\" }, \/\/ Saint Pierre and Miquelon\n  { \"\ud83c\uddfb\ud83c\udde8\", \"\ud83c\uddfb\ud83c\udde8: vc, vct, SaintVincent, NORTHAMERICA\" }, \/\/ Saint Vincent and the Grenadines\n  { \"\ud83c\uddfa\ud83c\uddf8\", \"\ud83c\uddfa\ud83c\uddf8: us, usa, UnitedStatesofAmerica, USA, NORTHAMERICA\" }, \/\/ United States of America\n  { \"\ud83c\uddfb\ud83c\uddee\", \"\ud83c\uddfb\ud83c\uddee: vi, vir, VirginIslands, USA, NORTHAMERICA\" }, \/\/ United States Virgin Islands\n\n  { \"\ud83c\udde7\ud83c\uddfb\", \"\ud83c\udde7\ud83c\uddfb: bv, bvt, BouvetIsland\" }, \/\/ Bouvet Island\n  { \"\ud83c\uddfa\ud83c\uddf2\", \"\ud83c\uddfa\ud83c\uddf2: um, umi, Navassa\" },\n  { \"\ud83c\uddf8\ud83c\udded\", \"\ud83c\uddf8\ud83c\udded: sh, shn, SaintHelena\" }, \/\/ Saint Helena\n  \n  { \"\ud83c\udde6\ud83c\uddf7\", \"\ud83c\udde6\ud83c\uddf7: ar, arg, Argentina, SOUTHAMERICA\" },\n  { \"\ud83c\udde7\ud83c\uddf4\", \"\ud83c\udde7\ud83c\uddf4: bo, bol, Bolivia, SOUTHAMERICA\" },\n  { \"\ud83c\udde7\ud83c\uddf7\", \"\ud83c\udde7\ud83c\uddf7: br, bra, Brazil, SOUTHAMERICA, BRICS\" },\n  { \"\ud83c\udde8\ud83c\uddf1\", \"\ud83c\udde8\ud83c\uddf1: cl, chl, Chile, SOUTHAMERICA\" },\n  { \"\ud83c\udde8\ud83c\uddf4\", \"\ud83c\udde8\ud83c\uddf4: co, col, Colombia, SOUTHAMERICA\" },\n  { \"\ud83c\uddea\ud83c\udde8\", \"\ud83c\uddea\ud83c\udde8: ec, ecu, Ecuador, SOUTHAMERICA\" },\n  { \"\ud83c\uddeb\ud83c\uddf0\", \"\ud83c\uddeb\ud83c\uddf0: fk, flk, FalklandIslands, UK, SOUTHAMERICA\" }, \/\/ Falkland Islands\n  { \"\ud83c\uddec\ud83c\uddeb\", \"\ud83c\uddec\ud83c\uddeb: gf, guf, FrenchGuiana, SOUTHAMERICA, FRANCE\" }, \/\/ French Guiana\n  { \"\ud83c\uddec\ud83c\uddfe\", \"\ud83c\uddec\ud83c\uddfe: gy, guy, Guyana, SOUTHAMERICA\" },\n  { \"\ud83c\uddf5\ud83c\uddfe\", \"\ud83c\uddf5\ud83c\uddfe: py, pry, Paraguay, SOUTHAMERICA\" },\n  { \"\ud83c\uddf5\ud83c\uddea\", \"\ud83c\uddf5\ud83c\uddea: pe, per, Peru, SOUTHAMERICA\" },\n  { \"\ud83c\uddec\ud83c\uddf8\", \"\ud83c\uddec\ud83c\uddf8: gs, sgs, SouthGeorgia, SOUTHAMERICA\" }, \/\/ South Georgia and the South Sandwich Islands\n  { \"\ud83c\uddf8\ud83c\uddf7\", \"\ud83c\uddf8\ud83c\uddf7: sr, sur, Suriname, SOUTHAMERICA\" },\n  { \"\ud83c\uddfa\ud83c\uddfe\", \"\ud83c\uddfa\ud83c\uddfe: uy, ury, Uruguay, SOUTHAMERICA\" },\n  { \"\ud83c\uddfb\ud83c\uddea\", \"\ud83c\uddfb\ud83c\uddea: ve, ven, Venezuela, SOUTHAMERICA\" },\n\n  { \"\ud83c\udde6\ud83c\uddea\", \"\ud83c\udde6\ud83c\uddea: ae, are, UnitedArabEmirates, WESTASIA, ASIA, EURASIA\" }, \/\/ United Arab Emirates\n  { \"\ud83c\udde6\ud83c\uddeb\", \"\ud83c\udde6\ud83c\uddeb: af, afg, Afghanistan, SOUTHASIA, ASIA, EURASIA\" },\n  { \"\ud83c\udde7\ud83c\udde9\", \"\ud83c\udde7\ud83c\udde9: bd, bgd, Bangladesh, SOUTHASIA, ASIA, EURASIA\" },\n  { \"\ud83c\udde7\ud83c\udded\", \"\ud83c\udde7\ud83c\udded: bh, bhr, Bahrain, EASTASIA, ASIA, EURASIA\" },\n  { \"\ud83c\udde7\ud83c\uddf3\", \"\ud83c\udde7\ud83c\uddf3: bn, brn, Brunei, ASIA, EURASIA\" },\n  { \"\ud83c\udde7\ud83c\uddf9\", \"\ud83c\udde7\ud83c\uddf9: bt, btn, Bhutan, SOUTHASIA, ASIA, EURASIA\" },\n  { \"\ud83c\udde8\ud83c\uddf3\", \"\ud83c\udde8\ud83c\uddf3: cn, chn, China, EASTASIA, ASIA, EURASIA, BRICS\" },\n  { \"\ud83c\udded\ud83c\uddf0\", \"\ud83c\udded\ud83c\uddf0: hk, hkg, HongKong, EASTASIA, ASIA, EURASIA\" },\n  { \"\ud83c\uddee\ud83c\udde9\", \"\ud83c\uddee\ud83c\udde9: id, idn, Indonesia, ASIA, EURASIA\" },\n  { \"\ud83c\uddee\ud83c\uddf1\", \"\ud83c\uddee\ud83c\uddf1: il, isr, Israel, WESTASIA, ASIA, EURASIA\" },\n  { \"\ud83c\uddee\ud83c\uddf3\", \"\ud83c\uddee\ud83c\uddf3: in, ind, India, SOUTHASIA, ASIA, EURASIA, BRICS\" },\n  { \"\ud83c\uddee\ud83c\uddf6\", \"\ud83c\uddee\ud83c\uddf6: iq, irq, Iraq, WESTASIA, ASIA, EURASIA\" },\n  { \"\ud83c\uddee\ud83c\uddf7\", \"\ud83c\uddee\ud83c\uddf7: ir, irn, Iran, WESTASIA, ASIA, EURASIA\" },\n  { \"\ud83c\uddef\ud83c\uddf4\", \"\ud83c\uddef\ud83c\uddf4: jo, jor, Jordan, WESTASIA, ASIA, EURASIA\" },\n  { \"\ud83c\uddef\ud83c\uddf5\", \"\ud83c\uddef\ud83c\uddf5: jp, jpn, Japan, EASTASIA, ASIA, EURASIA\" },\n  { \"\ud83c\uddf0\ud83c\uddec\", \"\ud83c\uddf0\ud83c\uddec: kg, kgz, Kyrgyzstan, CENTRALASIA, ASIA, EURASIA\" },\n  { \"\ud83c\uddf0\ud83c\udded\", \"\ud83c\uddf0\ud83c\udded: kh, khm, Cambodia, ASIA, EURASIA\" },\n  { \"\ud83c\uddf0\ud83c\uddf7\", \"\ud83c\uddf0\ud83c\uddf7: kr, kor, SouthKorea, EASTASIA, ASIA, EURASIA\" },\n  { \"\ud83c\uddf0\ud83c\uddfc\", \"\ud83c\uddf0\ud83c\uddfc: kw, kwt, Kuwait, WESTASIA, ASIA, EURASIA\" },\n  { \"\ud83c\uddf1\ud83c\udde6\", \"\ud83c\uddf1\ud83c\udde6: la, lao, Laos, ASIA, EURASIA\" },\n  { \"\ud83c\uddf1\ud83c\udde7\", \"\ud83c\uddf1\ud83c\udde7: lb, lbn, Lebanon, WESTASIA, ASIA, EURASIA\" },\n  { \"\ud83c\uddf1\ud83c\uddf0\", \"\ud83c\uddf1\ud83c\uddf0: lk, lka, SriLanka, SOUTHASIA, ASIA, EURASIA\" },\n  { \"\ud83c\uddf2\ud83c\uddf3\", \"\ud83c\uddf2\ud83c\uddf3: mn, mng, Mongolia, EASTASIA, ASIA, EURASIA\" },\n  { \"\ud83c\uddf2\ud83c\uddf4\", \"\ud83c\uddf2\ud83c\uddf4: mo, mac, Macao, EASTASIA, ASIA, EURASIA\" },\n  { \"\ud83c\uddf2\ud83c\uddfb\", \"\ud83c\uddf2\ud83c\uddfb: mv, mdv, Maldives, SOUTHASIA, ASIA, EURASIA\" },\n  { \"\ud83c\uddf2\ud83c\uddf2\", \"\ud83c\uddf2\ud83c\uddf2: mm, mmr, Myanmar, ASIA, EURASIA\" },\n  { \"\ud83c\uddf2\ud83c\uddfe\", \"\ud83c\uddf2\ud83c\uddfe: my, mys, Malaysia, ASIA, EURASIA\" },\n  { \"\ud83c\uddf0\ud83c\uddf5\", \"\ud83c\uddf0\ud83c\uddf5: kp, prk, NorthKorea, EASTASIA, ASIA, EURASIA\" },\n  { \"\ud83c\uddf3\ud83c\uddf5\", \"\ud83c\uddf3\ud83c\uddf5: np, npl, Nepal, SOUTHASIA, ASIA, EURASIA\" },\n  { \"\ud83c\uddf4\ud83c\uddf2\", \"\ud83c\uddf4\ud83c\uddf2: om, omn, Oman, WESTASIA, ASIA, EURASIA\" },\n  { \"\ud83c\uddf5\ud83c\udded\", \"\ud83c\uddf5\ud83c\udded: ph, phl, Philippines, ASIA, EURASIA\" },\n  { \"\ud83c\uddf5\ud83c\uddf0\", \"\ud83c\uddf5\ud83c\uddf0: pk, pak, Pakistan, SOUTHASIA, ASIA, EURASIA\" },\n  { \"\ud83c\uddf5\ud83c\uddf8\", \"\ud83c\uddf5\ud83c\uddf8: ps, pse, Palestine, WESTASIA, ASIA, EURASIA\" },\n  { \"\ud83c\uddf6\ud83c\udde6\", \"\ud83c\uddf6\ud83c\udde6: qa, qat, Qatar, WESTASIA, ASIA, EURASIA\" },\n  { \"\ud83c\uddf8\ud83c\udde6\", \"\ud83c\uddf8\ud83c\udde6: sa, sau, SaudiArabia, WESTASIA, ASIA, EURASIA\" },\n  { \"\ud83c\uddf8\ud83c\uddec\", \"\ud83c\uddf8\ud83c\uddec: sg, sgb, Singapore, ASIA, EURASIA\" },\n  { \"\ud83c\uddf8\ud83c\uddfe\", \"\ud83c\uddf8\ud83c\uddfe: sy, syr, Syria, WESTASIA, ASIA, EURASIA\" },\n  { \"\ud83c\uddf9\ud83c\udded\", \"\ud83c\uddf9\ud83c\udded: th, tha, Thailand, ASIA, EURASIA\" },\n  { \"\ud83c\uddf9\ud83c\uddef\", \"\ud83c\uddf9\ud83c\uddef: tj, tjk, Tajikistan, CENTRALASIA, ASIA, EURASIA\" },\n  { \"\ud83c\uddf9\ud83c\uddf1\", \"\ud83c\uddf9\ud83c\uddf1: tl, tls, EastTimor, ASIA, EURASIA\" },\n  { \"\ud83c\uddf9\ud83c\uddf2\", \"\ud83c\uddf9\ud83c\uddf2: tm, tkm, Turkmenistan, CENTRALASIA, ASIA, EURASIA\" },\n  { \"\ud83c\uddf9\ud83c\uddfc\", \"\ud83c\uddf9\ud83c\uddfc: tw, twn, Taiwan, EASTASIA, ASIA, EURASIA\" },\n  { \"\ud83c\uddfa\ud83c\uddff\", \"\ud83c\uddfa\ud83c\uddff: uz, uzb, Uzbekistan, CENTRALASIA, ASIA, EURASIA\" },\n  { \"\ud83c\uddfb\ud83c\uddf3\", \"\ud83c\uddfb\ud83c\uddf3: vn, vnm, Vietnam, ASIA, EURASIA\" },\n  { \"\ud83c\uddfe\ud83c\uddea\", \"\ud83c\uddfe\ud83c\uddea: ye, yem, Yemen, WESTASIA, ASIA, EURASIA\" },\n\n  { \"\ud83c\uddf3\ud83c\uddea\", \"\ud83c\uddf3\ud83c\uddea: ne, ner, Nigeria, AFRICA, WESTAFRICA\" },\n  { \"\ud83c\uddea\ud83c\uddf9\", \"\ud83c\uddea\ud83c\uddf9: et, eth, Ethiopia, AFRICA, AFRICA, EASTAFRICA\" },\n  { \"\ud83c\uddea\ud83c\uddf7\", \"\ud83c\uddea\ud83c\uddf7: er, eri, Eritrea, AFRICA, EASTAFRICA\" },\n  { \"\ud83c\udde8\ud83c\uddec\", \"\ud83c\udde8\ud83c\uddec: cg, cog, Congo, AFRICA, CENTRALAFRICA\" }, \/\/ Rebublic of the Congo\n  { \"\ud83c\udde8\ud83c\udde9\", \"\ud83c\udde8\ud83c\udde9: cd, cod, DemocraticCongo, AFRICA, CENTRALAFRICA\" }, \/\/ Democratic Rebublic of the Congo\n  { \"\ud83c\uddf9\ud83c\uddff\", \"\ud83c\uddf9\ud83c\uddff: tz, tza, Tanzania, AFRICA, EASTAFRICA\" },\n  { \"\ud83c\uddff\ud83c\udde6\", \"\ud83c\uddff\ud83c\udde6: za, zaf, SouthAfrica, AFRICA, SOUTHAFRICA, BRICS\" },\n  { \"\ud83c\uddf0\ud83c\uddea\", \"\ud83c\uddf0\ud83c\uddea: ke, ken, Kenya, AFRICA, EASTAFRICA\" },\n  { \"\ud83c\uddfa\ud83c\uddec\", \"\ud83c\uddfa\ud83c\uddec: ug, uga, Uganda, AFRICA, EASTAFRICA\" },\n  { \"\ud83c\uddf8\ud83c\uddf8\", \"\ud83c\uddf8\ud83c\uddf8: ss, ssd, SouthSudan, AFRICA, EASTAFRICA\" },\n  { \"\ud83c\uddf8\ud83c\udde9\", \"\ud83c\uddf8\ud83c\udde9: sd, sdn, Sudan, AFRICA, EASTAFRICA\" },\n  { \"\ud83c\udde9\ud83c\uddff\", \"\ud83c\udde9\ud83c\uddff: dz, dza, Algeria, AFRICA, NORTHAFRICA\" },\n  { \"\ud83c\uddea\ud83c\uddec\", \"\ud83c\uddea\ud83c\uddec: eg, egy, Egypt, AFRICA, NORTHAFRICA, WESTASIA, ASIA, EURASIA\" },\n  { \"\ud83c\uddf1\ud83c\uddfe\", \"\ud83c\uddf1\ud83c\uddfe: ly, lby, Libya, AFRICA, NORTHAFRICA\" },\n  { \"\ud83c\uddf1\ud83c\uddfe\", \"\ud83c\uddf1\ud83c\uddfe: ly, lby, Madeira, AFRICA, NORTHAFRICA\" },\n  { \"\ud83c\uddf2\ud83c\udde6\", \"\ud83c\uddf2\ud83c\udde6: ma, mar, Morocco, AFRICA, NORTHAFRICA\" },\n  { \"\ud83c\udde6\ud83c\uddf4\", \"\ud83c\udde6\ud83c\uddf4: ao, ago, Angola, AFRICA, CENTRALAFRICA\" },\n  { \"\ud83c\uddec\ud83c\udded\", \"\ud83c\uddec\ud83c\udded: gh, gha, Ghana, AFRICA, WESTAFRICA\" },\n  { \"\ud83c\uddf2\ud83c\uddff\", \"\ud83c\uddf2\ud83c\uddff: mz, moz, Mozambique, AFRICA\" },\n  { \"\ud83c\uddf2\ud83c\uddec\", \"\ud83c\uddf2\ud83c\uddec: mg, mdg, Madagascar, AFRICA, EASTAFRICA\" },\n  { \"\ud83c\uddfe\ud83c\uddf9\", \"\ud83c\uddfe\ud83c\uddf9: yt, myt, Mayotte, FRANCE, AFRICA, EASTAFRICA\" },\n  { \"\ud83c\udde8\ud83c\uddee\", \"\ud83c\udde8\ud83c\uddee: ci, civ, IvoryCoast, AFRICA, WESTAFRICA\" },\n  { \"\ud83c\udde8\ud83c\uddf2\", \"\ud83c\udde8\ud83c\uddf2: cm, cmr, Cameroon, AFRICA, CENTRALAFRICA\" },\n  { \"\ud83c\uddf3\ud83c\uddea\", \"\ud83c\uddf3\ud83c\uddea: ne, ner, Niger, AFRICA, WESTAFRICA\" },\n  { \"\ud83c\udde7\ud83c\uddeb\", \"\ud83c\udde7\ud83c\uddeb: bf, bfa, BurkinaFaso, AFRICA, WESTAFRICA\" }, \/\/ Burkina Faso\n  { \"\ud83c\uddf2\ud83c\uddf1\", \"\ud83c\uddf2\ud83c\uddf1: ml, mli, Mali, AFRICA, WESTAFRICA\" },\n  { \"\ud83c\uddf2\ud83c\uddfc\", \"\ud83c\uddf2\ud83c\uddfc: mw, mwi, Malawi, AFRICA, EASTAFRICA\" },\n  { \"\ud83c\uddff\ud83c\uddf2\", \"\ud83c\uddff\ud83c\uddf2: zm, zmb, Zambia, AFRICA, EASTAFRICA\" },\n  { \"\ud83c\uddf9\ud83c\udde9\", \"\ud83c\uddf9\ud83c\udde9: td, tcd, Chad, AFRICA, CENTRALAFRICA\" },\n  { \"\ud83c\uddf8\ud83c\uddf4\", \"\ud83c\uddf8\ud83c\uddf4: so, som, Somalia, AFRICA, EASTAFRICA\" },\n  { \"\ud83c\uddf8\ud83c\uddf3\", \"\ud83c\uddf8\ud83c\uddf3: sn, sen, Senegal, AFRICA, WESTAFRICA\" },\n  { \"\ud83c\uddff\ud83c\uddfc\", \"\ud83c\uddff\ud83c\uddfc: zw, zwe, Zimbabwe, AFRICA, EASTAFRICA\" },\n  { \"\ud83c\uddec\ud83c\uddf3\", \"\ud83c\uddec\ud83c\uddf3: gn, gin, Guinea, AFRICA, WESTAFRICA\" },\n  { \"\ud83c\uddf7\ud83c\uddea\", \"\ud83c\uddf7\ud83c\uddea: re, reu, R\u00e9union, reunion, FRANCE, AFRICA, EASTAFRICA\" }, \/\/ R\u00e9union\n  { \"\ud83c\uddf7\ud83c\uddfc\", \"\ud83c\uddf7\ud83c\uddfc: rw, rwa, Rwanda, AFRICA, EASTAFRICA\" },\n  { \"\ud83c\udde7\ud83c\uddef\", \"\ud83c\udde7\ud83c\uddef: bj, ben, Benin, AFRICA, WESTAFRICA\" },\n  { \"\ud83c\udde7\ud83c\uddee\", \"\ud83c\udde7\ud83c\uddee: bi, bdi, Burundi, AFRICA, EASTAFRICA\" },\n  { \"\ud83c\uddf9\ud83c\uddf3\", \"\ud83c\uddf9\ud83c\uddf3: tn, tun, Tunisia, AFRICA, NORTHAFRICA\" },\n  { \"\ud83c\uddf9\ud83c\uddec\", \"\ud83c\uddf9\ud83c\uddec: tg, tgo, Togo, AFRICA, WESTAFRICA\" },\n  { \"\ud83c\uddf8\ud83c\uddf1\", \"\ud83c\uddf8\ud83c\uddf1: sl, sle, SierraLeone, AFRICA, WESTAFRICA\" }, \/\/ Sierra Leone\n  { \"\ud83c\udde8\ud83c\udde9\", \"\ud83c\udde8\ud83c\udde9: cd, cod, Congo, AFRICA, CENTRALAFRICA\" },\n  { \"\ud83c\udde8\ud83c\uddeb\", \"\ud83c\udde8\ud83c\uddeb: cf, caf, CentralAfrican, CENTRALAFRICA\" }, \/\/ Central African Republic\n  { \"\ud83c\uddf1\ud83c\uddf7\", \"\ud83c\uddf1\ud83c\uddf7: lr, lbr, Liberia, AFRICA, WESTAFRICA\" },\n  { \"\ud83c\uddf2\ud83c\uddf7\", \"\ud83c\uddf2\ud83c\uddf7: mr, mrt, Mauritania, AFRICA, WESTAFRICA\" },\n  { \"\ud83c\uddea\ud83c\uddf7\", \"\ud83c\uddea\ud83c\uddf7: er, eri, Eritrea, AFRICA, EASTAFRICA\" },\n  { \"\ud83c\uddec\ud83c\uddf2\", \"\ud83c\uddec\ud83c\uddf2: gm, gmb, Gambia, AFRICA, WESTAFRICA\" },\n  { \"\ud83c\udde7\ud83c\uddfc\", \"\ud83c\udde7\ud83c\uddfc: bw, bwa, Botswana, AFRICA, SOUTHAFRICA\" },\n  { \"\ud83c\uddf3\ud83c\udde6\", \"\ud83c\uddf3\ud83c\udde6: na, nam, Namibia, AFRICA, SOUTHAFRICA\" },\n  { \"\ud83c\uddec\ud83c\udde6\", \"\ud83c\uddec\ud83c\udde6: ga, gab, Gabon, AFRICA, CENTRALAFRICA\" },\n  { \"\ud83c\uddf1\ud83c\uddf8\", \"\ud83c\uddf1\ud83c\uddf8: ls, lso, Lesotho, AFRICA, SOUTHAFRICA\" },\n  { \"\ud83c\uddec\ud83c\uddfc\", \"\ud83c\uddec\ud83c\uddfc: gw, gnb, GuineaBissau, AFRICA, WESTAFRICA\" }, \/\/ Guinea-Bissau\n  { \"\ud83c\uddec\ud83c\uddf6\", \"\ud83c\uddec\ud83c\uddf6: gq, gnq, EquatorialGuinea, CENTRALAFRICA\" }, \/\/ Equatorial Guinea\n  { \"\ud83c\uddf2\ud83c\uddfa\", \"\ud83c\uddf2\ud83c\uddfa: mu, mus, Mauritius, AFRICA, EASTAFRICA\" },\n  { \"\ud83c\uddf2\ud83c\uddfa\", \"\ud83c\uddf2\ud83c\uddfa: mz, moz, Mozambique, AFRICA, EASTAFRICA\" },\n  { \"\ud83c\uddf8\ud83c\uddff\", \"\ud83c\uddf8\ud83c\uddff: sz, swz, Eswatini, AFRICA, SOUTHAFRICA\" },\n  { \"\ud83c\udde9\ud83c\uddef\", \"\ud83c\udde9\ud83c\uddef: dj, dji, Djibouti, AFRICA, EASTAFRICA\" },\n  { \"\ud83c\uddf0\ud83c\uddf2\", \"\ud83c\uddf0\ud83c\uddf2: km, com, Comoros, AFRICA\" },\n  { \"\ud83c\udde8\ud83c\uddfb\", \"\ud83c\udde8\ud83c\uddfb: cv, cpv, CapeVerde, AFRICA, WESTAFRICA\" },\n  { \"\ud83c\uddea\ud83c\udded\", \"\ud83c\uddea\ud83c\udded: eh, esh, WesternSahara, SPAIN, AFRICA, NORTHAFRICA\" }, \/\/ Western Sahara\n  { \"\ud83c\uddf8\ud83c\uddf9\", \"\ud83c\uddf8\ud83c\uddf9: st, stp, S\u00e3oTom\u00e9andPr\u00edncipe, saotomeandprincipe, CENTRALAFRICA\" }, \/\/ S\u00e3o Tom\u00e9 and Pr\u00edncipe\n  { \"\ud83c\uddf8\ud83c\udde8\", \"\ud83c\uddf8\ud83c\udde8: sc, syc, Seychelles, AFRICA, EASTAFRICA\" },\n\n  { \"\ud83c\uddf8\ud83c\udded\", \"\ud83c\uddf8\ud83c\udded: sh, shn, TristandaCunha, UK\" }, \/\/ Tristan da Cunha\n  \n  { \"\ud83c\udde6\ud83c\uddfa\", \"\ud83c\udde6\ud83c\uddfa: au, aus, Australia, AUSTRALASIA, OCEANIA\" },\n  { \"\ud83c\udde8\ud83c\uddfd\", \"\ud83c\udde8\ud83c\uddfd: cx, cxr, Christmasisland, AUSTRALIA\" }, \/\/ Christmas Island\n\n  { \"\ud83c\udde8\ud83c\udde8\", \"\ud83c\udde8\ud83c\udde8: cc, cck, CocosIslands, AUSTRALIA\" }, \/\/ Cocos (Keeling) Islands\n  \n  { \"\ud83c\uddee\ud83c\uddf2\", \"\ud83c\uddee\ud83c\uddf2: im, imn, ManIsle, UK\" }, \/\/ Isle of Man\n  \n  { \"\ud83c\uddf0\ud83c\uddee\", \"\ud83c\uddf0\ud83c\uddee: ki, kir, Kiribati, MICRONESIA, OCEANIA\" },\n  { \"\ud83c\uddf3\ud83c\uddf7\", \"\ud83c\uddf3\ud83c\uddf7: nr, nru, Nauru, MICRONESIA, OCEANIA\" },\n  { \"\ud83c\uddf3\ud83c\udde8\", \"\ud83c\uddf3\ud83c\udde8: nc, ncl, NewCaledonia, FRANCE, OCEANIA\" }, \/\/ New Caledonia\n  { \"\ud83c\uddeb\ud83c\uddef\", \"\ud83c\uddeb\ud83c\uddef: fj, fji, Fiji, MELANESIA, OCEANIA\" },\n  { \"\ud83c\uddeb\ud83c\uddf2\", \"\ud83c\uddeb\ud83c\uddf2: fm, fsm, Micronesia, MICRONESIA, OCEANIA\" },\n  { \"\ud83c\uddf5\ud83c\uddec\", \"\ud83c\uddf5\ud83c\uddec: pg, png, PapuanewGuinea, MELANESIA, OCEANIA\" }, \/\/ Papua New Guinea\n  { \"\ud83c\uddfb\ud83c\uddfa\", \"\ud83c\uddfb\ud83c\uddfa: vu, vut, Vanuatu, MELANESIA, OCEANIA\" },\n  { \"\ud83c\uddf8\ud83c\udde7\", \"\ud83c\uddf8\ud83c\udde7: sb, slb, SolomonIslands, MELANESIA, OCEANIA\" }, \/\/ Solomon Islands\n  { \"\ud83c\uddec\ud83c\uddfa\", \"\ud83c\uddec\ud83c\uddfa: gu, gum, Guam, USA, MICRONESIA, OCEANIA\" },\n  { \"\ud83c\uddf2\ud83c\udded\", \"\ud83c\uddf2\ud83c\udded: mh, mhl, MarshallIslands, MICRONESIA, OCEANIA\" }, \/\/ Marshall Islands\n  { \"\ud83c\uddf2\ud83c\uddf5\", \"\ud83c\uddf2\ud83c\uddf5: mp, mnp, NorthernMariana, MICRONESIA, OCEANIA\" }, \/\/ Northern Mariana Islands\n  { \"\ud83c\uddf5\ud83c\uddeb\", \"\ud83c\uddf5\ud83c\uddeb: pf, pyf, FrenchPolynesia, FRANCE, POLYNESIA, OCEANIA\" }, \/\/ French Polynesia\n  { \"\ud83c\uddfc\ud83c\uddf8\", \"\ud83c\uddfc\ud83c\uddf8: ws, wsm, Samoa, POLYNESIA, OCEANIA\" },\n  { \"\ud83c\uddfc\ud83c\uddeb\", \"\ud83c\uddfc\ud83c\uddeb: wf, wlf, WallisandFutuna, FRANCE, OCEANIA\" }, \/\/ Wallis and Futuna\n  { \"\ud83c\uddf9\ud83c\uddfb\", \"\ud83c\uddf9\ud83c\uddfb: tv, tuv, Tuvalu, OCEANIA\" },\n  { \"\ud83c\udde6\ud83c\uddf8\", \"\ud83c\udde6\ud83c\uddf8: as, asm, Americansamoa, USA, POLYNESIA, OCEANIA\" }, \/\/ American Samoa\n  { \"\ud83c\uddf5\ud83c\uddf3\", \"\ud83c\uddf5\ud83c\uddf3: pn, pcn, Pitcairn, UK, POLYNESIA, OCEANIA\" }, \/\/ Pitcairn Islands\n  { \"\ud83c\uddf5\ud83c\uddfc\", \"\ud83c\uddf5\ud83c\uddfc: pw, plw, Palau, MICRONESIA, OCEANIA\" },\n\n  { \"\ud83c\uddef\ud83c\uddea\", \"\ud83c\uddef\ud83c\uddea: je, jey, Jersey, FRANCE\" },\n  \n  { \"\ud83c\udde6\ud83c\uddf6\", \"\ud83c\udde6\ud83c\uddf6: aq, ata, Antarctica, ANTARCTICA\" },\n\n  { \"\ud83c\uddf3\ud83c\uddeb\", \"\ud83c\uddf3\ud83c\uddeb: nf, nfk, NorFolkIsland, AUSTRALASIA, POLYNESIA, OCEANIA\" }, \/\/ Norfolk Island\n  { \"\ud83c\udde8\ud83c\uddf0\", \"\ud83c\udde8\ud83c\uddf0: ck, cok, Cookisland, NEWZEALAND, POLYNESIA, OCEANIA\" }, \/\/ Cook Islands\n  { \"\ud83c\uddf3\ud83c\uddff\", \"\ud83c\uddf3\ud83c\uddff: nz, nzl, NewZealand, NEWZEALAND, AUSTRALASIA, OCEANIA\" }, \/\/ New Zealand\n  { \"\ud83c\uddf3\ud83c\uddfa\", \"\ud83c\uddf3\ud83c\uddfa: nu, niu, Niue, NEWZEALAND, POLYNESIA, OCEANIA\" },\n  { \"\ud83c\uddf9\ud83c\uddf0\", \"\ud83c\uddf9\ud83c\uddf0: tk, tkl, Tokelau, NEWZEALAND, POLYNESIA, OCEANIA\" },\n  { \"\ud83c\uddf9\ud83c\uddf4\", \"\ud83c\uddf9\ud83c\uddf4: to, ton, Tonga, POLYNESIA, OCEANIA\" },\n  \n  \/\/ still missing\n  \n  { \"\ud83c\uddee\ud83c\uddf4\", \"\ud83c\uddee\ud83c\uddf4: io, iot, BritishIndianOcean\" }, \/\/ British Indian Ocean Territory\n  { \"\ud83c\uddf9\ud83c\uddeb\", \"\ud83c\uddf9\ud83c\uddeb: tf, atf, FrenchSouthernandaAtarctic\" }, \/\/ French Southern and Antarctic Lands\n  { \"\ud83c\uddec\ud83c\uddec\", \"\ud83c\uddec\ud83c\uddec: gg, ggy, Guernsey, GUERNSEY\" },\n  { \"\ud83c\udded\ud83c\uddf2\", \"\ud83c\udded\ud83c\uddf2: hm, hmd, HeardandMacDonaldsIslands\" }, \/\/ Heard Island and McDonald Islands\n  { \"\ud83c\uddfa\ud83c\uddf2\", \"\ud83c\uddfa\ud83c\uddf2: um, umi, UsMinorOutlyingIslands, US\" }, \/\/ United States Minor Outlying Islands\n};\n\n\/*\n *  flags changed\n *\/\nstatic int flagidflags = 0; \/\/ dont display ids\n\nstatic int idsall = 1;\n\n\/*\n *  flag for each id\n *\/\nstatic char flagids&#91;sizeof(idsflags) \/ sizeof(idsflags&#91;0])];\n\nint newressu_toggleflag(unsigned char *flag)\n{\n  int c, ok;\n  \n  if(!strcmp(flag, \"ALL\")) {\n    idsall = !idsall;\n    for(c = 0; c &lt; sizeof(idsflags) \/ sizeof(idsflags&#91;0]); c++) {\n      flagids&#91;c] = idsall;\n    }\n    flagidflags = 1; \/\/ display flags\n    ok = 1; \/\/ one flag toggled\n  } else {\n    ok = 0;\n    for(c = 0; c &lt; sizeof(idsflags) \/ sizeof(idsflags&#91;0]); c++) {\n      if(newressu_strstr(idsflags&#91;c].flags, flag)!=NULL) {\n\tflagids&#91;c] = !flagids&#91;c];\n\tflagidflags = 1; \/\/ display flags\n\tok = 1; \/\/ one flag toggled\n      }\n    }\n    \/\/if(ok)\n    \/\/  fprintf(stdout,\"\\n\");\n  }\n  return(ok);\n}\n\n#ifdef FORT\n#include \"fort.h\"\n#endif\n\nvoid clock_bytes(int size, unsigned char *buffer) \/\/ JariK 2024\n{\n  int c;\n  \n  for(c = 0; c &lt; size; c++)\n    buffer&#91;c] = ressu_clock();\n}\n\nstatic unsigned char samplefilename&#91;128] = \"newressusample%d.rnd\";\n\nint input = INPUT_RESSU;\nunsigned char *input_str = \"ressu\";\n\nint base = -1;\n\nstatic unsigned char newressutab&#91;GENT_SIZE]; \/\/ orig 1024 \nstatic unsigned int newressutab_pos = 0;\n\nvoid newressu_clear()\n{\n  memset(newressutab, 0, sizeof(newressutab)); \/\/ forget newressutab\n}\n\n#define aDEBUG22 2\n#define aDEBUG18 2\n\nint newressu_genbyte()\n{\n  unsigned char ch;\n\n  if(newressutab_pos == 0) {\n#ifdef DEBUG22\n    ressu_dump(\"oldgent\", 32, newressutab, 32); \/\/ first 32 bytes\n#endif\n\n    newressu_clear();\n    \n    if(input == INPUT_RESSU) \/\/ ressu prod\n      ressu_genbytes(sizeof(newressutab), newressutab);\n\n#ifdef SHA256\n    else if(input == INPUT_PSEUDORESSU) \/\/ pseudoressu\n      pseudoressu_bytes(sizeof(newressutab), newressutab);\n    \n#endif\n#ifdef SHA256\n    else if(input == INPUT_RESSUTWIST) \/\/ ressu w twist\n      ressutwist_bytes(sizeof(newressutab), newressutab);\n\n#endif\n#ifdef SHA256\n    else if(input == INPUT_PSEUDORANDOM) \/\/ pseudoressu\n      pseudorandom_bytes(sizeof(newressutab), newressutab);\n    \n#endif\n    else if(input == INPUT_RESSU2) \/\/ ressu2\n      ressu2_bytes(sizeof(newressutab), newressutab);\n    \n    else if(input == INPUT_PSEUDORESSU2) \/\/ ressu2\n      pseudoressu2_bytes(sizeof(newressutab), newressutab);\n#ifdef SHA256\n    else if(input == INPUT_RESSU2TWIST) \/\/ ressu w twist\n      ressu2twist_bytes(sizeof(newressutab), newressutab);\n\n#endif\n    else if(input == INPUT_SINGLE) \/\/ ressu2\n      single_bytes(sizeof(newressutab), newressutab);\n    \n    else if(input == INPUT_RESSU3) \/\/ ressu2\n      ressu3_bytes(sizeof(newressutab), newressutab);\n    \n    else if(input == INPUT_FASTRESSU) \/\/ ressu_fast\n      ressu_genbytes_fast(sizeof(newressutab), newressutab);\n\n    else if(input == INPUT_SINGLERESSU) \/\/ ressu single\n      ressu_genbytes_single(sizeof(newressutab), newressutab);\n\n    else if(input == INPUT_STREAM) \/\/ stream\n      stream_bytes(sizeof(newressutab), newressutab);\n\n    else if(input == INPUT_TEST) \/\/ test generator\n      test_bytes(sizeof(newressutab), newressutab);\n\n#ifdef FORT\n    else if(input == INPUT_FORT) \/\/ ressu fort\n      fort_random_data(sizeof(newressutab), newressutab);\n\n    else if(input == INPUT_FORTXOR) \/\/ ressu fort\n      fort_random_data_xor(sizeof(newressutab), newressutab);\n\n#endif\n#ifdef USE_RDRAND\n    else if(input == INPUT_RDRAND) \/\/ intel rdrand\n      rdrand_bytes(sizeof(newressutab), newressutab);\n\n#endif\n#ifdef USE_RDSEED\n    else if(input == INPUT_RDSEED) \/\/ intel rdseed\n      rdseed_bytes(sizeof(newressutab), newressutab);\n\n#endif\n    else if(input == INPUT_URANDOM) \/\/ urandom\n      urandom_bytes(sizeof(newressutab), newressutab);\n\n#ifdef USE_RANDOM\n    else if(input == INPUT_RANDOM) \/\/ random\n      random_bytes(sizeof(newressutab), newressutab);\n\n#endif\n    else if(input == INPUT_CLOCK) \/\/ clockstream\n      clock_bytes(sizeof(newressutab), newressutab);\n\n    else {\n      fprintf(stdout,\"%s: mode '%d'(%s) not available\\n\",\n\t      procname, input, input_str);\n      exit(2);\n    }\n#ifdef DEBUG22\n    ressu_dump(\"newgent\", 32, newressutab, 32); \/\/ first 32 bytes\n#endif\n  } \/\/ if(newressutab_pos==0\n  ch = newressutab&#91;newressutab_pos];\n  newressutab_pos = (newressutab_pos + 1) % sizeof(newressutab);\n\n#ifdef DEBUG18\n  fprintf(stdout, \"{%02x}\", ch);\n#endif\n  return(ch);\n}\n\nstatic unsigned char *basedigits = \"0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_-\"; \/\/ 64 chars\n\nvoid fprintfbase(FILE *fp1, unsigned long long ll2, int base) \/\/ JariK 2023\n{\n  int count;\n  unsigned long long ll, divider;\n\n  if(base == 2)\n    fprintf(fp1,\"0b\");\n  else if(base == 8)\n    fprintf(fp1,\"0o\");\n  else if(base == 10)\n    fprintf(fp1,\"0d\");\n  else if(base == 16)\n    fprintf(fp1,\"0x\");\n  \n  ll = ll2;\n  divider = 1;\n  count = 0;\n\n  for(;;) { \/\/ count digits\n    ll \/= base;\n    count++;\n    if(ll == 0)\n      break;\n    divider *= base; \/\/ do not count last digit\n  }\n\n  while(count &gt; 0) { \/\/ print digits\n    fprintf(fp1,\"%c\", basedigits&#91;(ll2 \/ divider) % base]);\n    divider \/= base;\n    count--;\n  }\n}\n\n#define aDEBUG24 2\n  \nunsigned long newressu_gen_limit(unsigned long limit) \/\/ JariK 2022\n{\n  int c;\n  unsigned long word;\n  static unsigned long lastlimit = 0, highlimit;\n  static int bytes;\n\n  if(lastlimit != limit) { \/\/ if limit changes, calculate new highlimit and bytes\n    lastlimit = limit;\n    if(limit &lt;= 0x100) { \/\/ one byte\n      \/\/ highest multiplier of limit that fits to needed bytes\n      highlimit = (0x100 \/ limit) * limit;\n      \/\/ number of bytes needed\n      bytes = 1;\n\n    } else if(limit &lt;= 0x10000) { \/\/ two bytes\n      highlimit = (0x10000 \/ limit) * limit;\n      bytes = 2;\n\n    } else if(limit &lt;= 0x1000000) { \/\/ three bytes\n      highlimit = (0x1000000 \/ limit) * limit;\n      bytes = 3;\n\n    } else if(limit &lt;= 0x100000000) { \/\/ four bytes\n      highlimit = (0x100000000 \/ limit) * limit;\n      bytes = 4;\n\n    } else if(limit &lt;= 0x10000000000) { \/\/ five bytes\n      highlimit = (0x10000000000 \/ limit) * limit;\n      bytes = 5;\n\n    } else if(limit &lt;= 0x1000000000000) { \/\/ six bytes\n      highlimit = (0x1000000000000 \/ limit) * limit;\n      bytes = 6;\n\n    } else if(limit &lt;= 0x100000000000000) { \/\/ seven bytes\n      highlimit = (0x100000000000000 \/ limit) * limit;      \n      bytes = 7;\n\n    } else { \/\/ if(limit &lt;= 0xffffffffffffffff) {\n      highlimit = (0xffffffffffffffff \/ limit) * limit;      \n      bytes = 8;\n\n    }\n  } \/\/ if(lastlimit != limit\n\n  for(;;) {\n    word = 0;\n    for(c = 0; c &lt; bytes; c++)\n      word = word &lt;&lt; 8 | newressu_genbyte();\n    if(word &lt; highlimit)\n      break;\n  }\n\n#define aDEBUG34\n\n#ifdef DEBUG34\n  fprintf(stdout,\"limit:%lu\", limit);\n  fprintf(stdout,\", highlimit:%lu\", highlimit);\n  fprintf(stdout,\", bytes:%d\", bytes);\n  fprintf(stdout,\", word:%lu\", word);\n  fprintf(stdout,\", word%%limit:%lu\", (unsigned long) word % limit);\n  fprintf(stdout,\", base:\");\n  if(base == -1)\n    fprintfbase(stdout, word % limit, 16);\n  else\n    fprintfbase(stdout, word % limit, base);\n  fprintf(stdout,\", base:0o%lo\", word % limit);\n  fprintf(stdout,\", base:0d%lu\", word % limit);\n  fprintf(stdout,\", base:0x%lx\", word % limit);\n  fprintf(stdout,\"\\n\");\n#endif\n  \n  word %= limit;\n  \n#ifdef DEBUG24\n  fprintf(stdout,\"\/\");\n  fprintf(stdout,\"%d bytes: \", bytes);\n  fprintf(stdout,\"&#91;\");\n  if(base == -1)\n    fprintfbase(stdout, word, 16);\n  else\n    fprintfbase(stdout, word, base);\n  fprintf(stdout,\"]\");\n  fprintf(stdout,\"\/\");\n  fflush(stdout);\n#endif\n\n  return(word);\n}\n\nstatic int cursor_on = 0;\nunsigned char cursor&#91;4] = { '|', '\/', '-', '\\\\' };\nlong int prev_secs = -1;\nint crs = 0;\n\nvoid stat_line_cursor_start()\n{\n  fprintf(stderr,\"%c\", cursor&#91;crs]);\n  fflush(stderr);\n  \/\/prev_secs = -1;\n  cursor_on = 1;\n}\n\nvoid stat_line_cursor()\n{\n  long int secs;\n\n  secs = time(NULL) % sizeof(cursor);\n  if(prev_secs != secs) {\n    if(prev_secs != -1) \n      crs = (crs + 1) % sizeof(cursor);\n    fprintf(stderr,\"\\b%c\", cursor&#91;crs]);\n    fflush(stderr);\n    prev_secs = secs;\n  }\n}\n\nvoid stat_line_cursor_remove()\n{\n  if(cursor_on) {\n    fprintf(stderr, \"\\b \\b\");\n    fflush(stderr);\n    \/\/prev_secs = -1;\n  }\n  cursor_on = 0;\n}\n\n#include &lt;stdarg.h&gt;\n\n#define aDEBUG31 2\n\nunsigned char *procname = NULL;\n\nstatic unsigned char *prev_stat_line = NULL;\nstatic unsigned char *stat_line = NULL;\nstatic size_t stat_line_length = 0;\n\nstatic void stat_line_begin()\n{\n  if(stat_line != NULL)\n    stat_line&#91;0] = '\\0';\n}\n\nstatic void stat_line_printf(const unsigned char *format, ...)\n{\n  int count;\n  va_list args;\n  static unsigned char *buffer = NULL;\n  static size_t buffer_length = 0;\n\n  va_start(args, format);\n  count = vsnprintf(buffer, buffer_length, format, args) + 1;\n  va_end(args);\n\n  if(buffer_length &lt; count) {\n    buffer_length = count;\n    buffer = realloc(buffer, buffer_length);\n    va_start(args, format);\n    count = vsnprintf(buffer, buffer_length, format, args) + 1;\n    va_end(args);\n  }\n\n  count = 0;\n  if(stat_line != NULL)\n    count += strlen(stat_line);\n  count += strlen(buffer);\n  count++;\n  \n  if(stat_line_length &lt; count) {\n    unsigned char *stat_line2 = stat_line;\n    stat_line_length = count;\n    stat_line = realloc(stat_line, stat_line_length);\n    prev_stat_line = realloc(prev_stat_line, stat_line_length);\n    if(stat_line2 == NULL) {\n      stat_line&#91;0] = '\\0';\n      prev_stat_line&#91;0] = '\\0';\n    }\n  }\n  strcat(stat_line, buffer);\n}\n\n#define READABLE_NUMBER_BIN 2\n\n#ifdef READABLE_NUMBER_BIN\n#define READABLE_NUMBER_HIGH 1023\n#define READABLE_NUMBER_DIVIDER 1024\n#else\n#define READABLE_NUMBER_HIGH 999\n#define READABLE_NUMBER_DIVIDER 1000\n#endif\n\n#define READABLE_NUMBER_WIDTH 32\n\nstatic void stat_line_get_readable(unsigned char buf10&#91;10], unsigned long long length)\n{\n  int c, low;\n  double length2;\n\n  \/\/ B = byte\n  \/\/ K = kilo   10^3   2^10\n  \/\/ M = mega   10^6   2^20\n  \/\/ G = giga   10^9   2^30\n  \/\/ T = tera   10^12  2^40\n  \/\/ P = peta   10^15  2^50\n  \/\/ E = exa    10^18  2^60\n  \/\/ Z = zetta  10^21  2^70\n  \/\/ Y = yotta  10^24  2^80\n\n  char units&#91;] = \"BKMGTPEZY\";\n\n  strcpy(buf10, \"***\");\n  low = 0;\n\n  for(c = 0; length &gt;= low &amp;&amp;\n      c &lt; sizeof(units) - 1; c++) {\n    if(length &gt;= low &amp;&amp;\n       length &lt;= READABLE_NUMBER_HIGH) {\n      if(units&#91;c] == 'B')\n        sprintf(buf10, \"%lld\", length);\n      else if(units&#91;c] == 'K' ||\n\t      units&#91;c] == 'M' ||\n\t      units&#91;c] == 'G' ||\n\t      units&#91;c] == 'T')\n\tsprintf(buf10, \"%.3f\", length2);\n      else if(length == length2)\n\tsprintf(buf10, \"%lld\", length);\n      else\n\tsprintf(buf10, \"%.1f\", length2);\n\n      if(strchr(buf10, '.') != NULL) {\n\tint d;\n\td = strlen(buf10) - 1;\n\twhile(d &gt; 3 &amp;&amp; isdigit(buf10&#91;d])) {\n\t  buf10&#91;d] = '\\0';\n\t  d--;\n\t}\n\tif(buf10&#91;strlen(buf10)-1] == '.')\n\t  buf10&#91;strlen(buf10)-1] = '\\0';\n      }\n\n      if(units&#91;c] != 'B') {\n\tchar unit&#91;10];\n\tsprintf(unit,\"%cB\",units&#91;c]);\n\tstrcat(buf10, unit);\n      }\n      break;\n    }\n    length2 = (double)length \/ READABLE_NUMBER_DIVIDER;\n    length \/= READABLE_NUMBER_DIVIDER;\n    low = 1;\n  }\n}\n\nstatic void stat_line_readable(unsigned long long length)\n{\n  unsigned char buf10&#91;10];\n  stat_line_get_readable(buf10, length);\n  stat_line_printf(\"%s\", buf10);\n}\n\nstatic void stat_line_dhms(unsigned long long printleft)\n{\n  unsigned long int left2;\n  unsigned long int temp;\n  int timeprinted = 0;\n  \n  left2 = printleft;\n  temp = left2 \/ (24 * 3600); \/\/ days\n  if(temp &gt; 0) {\n    timeprinted = 1;\n    stat_line_printf(\" %dd\", temp);\n    left2 -= temp * (24 * 3600);\n  }\n  \n  temp = left2 \/ 3600; \/\/ hours\n  if(temp &gt; 0 || timeprinted) {\n    timeprinted = 1;\n    \/\/hoursprinted = 1;\n    stat_line_printf(\" %02dh\", temp);\n    left2 -= temp * 3600;\n  }\n  \n  temp = left2 \/ 60; \/\/ minutes\n  if(temp &gt; 0 || timeprinted) {\n    timeprinted = 1;\n    stat_line_printf(\" %02dm\", temp);\n    left2 -= temp * 60;\n  }\n  \n  temp = left2; \/\/ seconds\n  if(!timeprinted) {\n    stat_line_printf(\" %d seconds\", temp);\n  }\n}\n\nvoid stat_line_end()\n{\n  int c, d;\n\n  if(stat_line != NULL &amp;&amp; strcmp(prev_stat_line, stat_line)) { \/\/ status line changed\n    stat_line_cursor_remove();\n#ifdef DEBUG31\n    fprintf(stderr, \"\\n\");\n#else\n    fprintf(stderr, \"\\r\");\n#endif  \n\n    fprintf(stderr,\"%s\", stat_line);\n    fflush(stderr);\n\n    \/\/ previous line longer than this one,\n    \/\/ overwrite with spaces and backspace to\n    \/\/ end\n    \n    d = strlen(prev_stat_line) - strlen(stat_line) + 1; \/\/ cursor too\n\n    if(d &gt; 0) { \/\/ previous line longer\n      for(c = 0; c &lt; d; c++) {\n#ifdef DEBUG31\n\tfprintf(stderr, \"*\");\n#else\n\tfprintf(stderr, \" \"); \/\/ print spaces\n#endif\n      }\n#ifndef DEBUG31\n      for(c = 0; c &lt; d; c++)\n\tfprintf(stderr, \"\\b\"); \/\/ and backspaces\n#endif\n    }\n    strcpy(prev_stat_line, stat_line);\n    \/\/if(strlen(stat_line) &gt; 0)\n    \/\/stat_line_cursor_start();\n    \/\/stat_line_cursor();\n  }\n}\n\n#define KILO 1024\n\nvoid readablelonglong(FILE *fp1, unsigned long long ll2) \/\/ 2023 JariK\n{\n  int c;\n  unsigned long long multiplier, ll = ll2;\n  \n  \/\/ B = byte\n  \/\/ K = kilo   10^3   2^10\n  \/\/ M = mega   10^6   2^20\n  \/\/ G = giga   10^9   2^30\n  \/\/ T = tera   10^12  2^40\n  \/\/ P = peta   10^15  2^50\n  \/\/ E = exa    10^18  2^60\n  \/\/ Z = zetta  10^21  2^70\n  \/\/ Y = yotta  10^24  2^80\n\n  char units&#91;] = \"BKMGTPEZY\";\n\n  c = 0;\n  multiplier = 1;\n  while(ll &gt;= KILO) {\n    ll \/= KILO;\n    multiplier *= KILO;\n    c++;\n  }\n\n  if(ll * multiplier != ll2)\n    fprintf(fp1,\"~\"); \/\/ approximately\n\n  fprintf(fp1,\"%llu%c\", ll, units&#91;c]);\n}\n\nvoid fprintfcharacter(FILE *fp1, unsigned char *p) \/\/ 2023 JariK\n{\n  fputc(*p, fp1); \/\/ print first char\n  if(*p &gt; 0xbf) { \/\/ first char utf8\n    p++;\n    for(;;) { \/\/ print rest of the utf8 chars\n      if(*p &gt; 0xbf || \/\/ new utf8 character\n\t *p &lt; 0x80 || \/\/ ascii character\n\t *p == '\\0') \/\/ end of string\n\tbreak;\n      fputc(*p, fp1);\n      p++;\n    }\n  }\n}\n\nint getdigit(unsigned char *p) \/\/ 2023 JariK\n{\n  int digit;\n  \n  if(*p &gt;= '0' &amp;&amp; *p &lt;= '9')\n    digit = *p - '0';\n  else if(*p &gt;= 'a' &amp;&amp; *p &lt;= 'z')\n    digit = (*p - 'a') + 10;\n  else if(*p &gt;= 'A' &amp;&amp; *p &lt;= 'Z')\n    digit = (*p - 'A') + 10;\n  else\n    digit = -1; \/\/ not found, illegal\n\n  return(digit);\n}\n\n#define DEBUG32\n\n\/\/#define KILO 1000\n#define KILO 1024\n\nunsigned long long getlonglong(unsigned char *p2) \/\/ 2023 JariK\n{\n  int digit, base = 10;\n  unsigned char *p = p2;\n  unsigned long long totll, ll, prevll, multiplier;\n  \n  totll = 0;\n\n  while(*p != '\\0') { \/\/ works also: 1g100m &amp; 1m20k and 1t1t etc...\n\n    unsigned char *prevp = p;\n    \n    if(!strncmp(\"0x\", p, 2)) {\n      base = 16;\n      p += 2;\n      \n    } else if(!strncmp(\"0d\", p, 2)) {\n      base = 10;\n      p += 2;\n      \n    } else if(!strncmp(\"0o\", p, 2)) {\n      base = 8;\n      p += 2;\n      \n    } else if(!strncmp(\"0b\", p, 2)) {\n      base = 2;\n      p += 2;\n      \n    }\n    \n    ll = 0;\n    while((digit = getdigit(p)) != -1 &amp;&amp; digit &lt; base) {\n      ll = ll * base + digit;\n      p++;\n    }\n    \n    multiplier = 1;\n    \n    if(*p == 'k' || *p == 'K') {\n      multiplier = KILO;\n      p++;\n      \n    } else if(*p == 'm' || *p == 'M') {\n      multiplier = (KILO * KILO);\n      p++;\n      \n    } else if(*p == 'g' || *p == 'G') {\n      multiplier = (KILO * KILO * KILO);\n      p++;\n      \n    } else if(*p == 't' || *p == 'T') {\n      multiplier = ((unsigned long long)KILO * KILO * KILO * KILO);\n      p++;\n      \n    } else if(*p == 'p' || *p == 'P') {\n      multiplier = ((unsigned long long)KILO * KILO * KILO * KILO * KILO);\n      p++;\n      \n    } else if(*p == 'e' || *p == 'E') {\n      multiplier = ((unsigned long long)KILO * KILO * KILO * KILO * KILO * KILO);\n      p++;\n      \n    }\n    \n    prevll = ll;\n    ll *= multiplier;\n    if(ll \/ multiplier != prevll) {\n      fflush(stdout);\n      fprintf(stderr,\"%s: multiply overflow\", procname);\n      fprintf(stderr,\", string:'%s'\", p2);\n      fprintf(stderr,\", digit:'\");\n      fprintfcharacter(stderr, p);\n      fprintf(stderr,\"'\");\n      fprintf(stderr,\", value: %d\", digit);\n      fprintf(stderr,\", base: %d\", base);\n      fprintf(stderr,\", ll: %llu\", prevll);\n      fprintf(stderr,\", multiplier: %llu\", multiplier);\n      fprintf(stderr,\"\\n\");\n      fflush(stderr);\n    }\n  \n    if(*p == 'b' || *p == 'B') \/\/ remove last b (for bytes in 1tb, 1gb or 1mb)\n      p++;\n    \n    totll += ll;\n\n#ifdef DEBUG32\n    fprintf(stderr,\"string:'%s'\", p2);\n    fprintf(stderr,\", base:%d(\", base);\n    readablelonglong(stderr, base);\n    fprintf(stderr,\")\");\n    fprintf(stderr,\", multiplier:%llu(\", multiplier);\n    readablelonglong(stderr, multiplier);\n    fprintf(stderr,\")\");\n    fprintf(stderr,\", prevll:%llu(\", prevll);\n    readablelonglong(stderr, prevll);\n    fprintf(stderr,\")\");\n    fprintf(stderr,\", ll:%llu(\", ll);\n    readablelonglong(stderr, ll);\n    fprintf(stderr,\")\");\n    fprintf(stderr,\", totll:%llu(\", totll);\n    readablelonglong(stderr, totll);\n    fprintf(stderr,\")\");\n    fprintf(stderr,\"\\n\");\n#endif\n    \n    if(prevp == p) \/\/ no progress\n      break;\n  }\n  \n  if(*p != '\\0') {\n    fflush(stdout);\n    fprintf(stderr,\"%s: illegal digit\", procname);\n    fprintf(stderr,\", string:'%s'\", p2);\n    fprintf(stderr,\", digit:'\");\n    fprintfcharacter(stderr, p);\n    fprintf(stderr,\"'\");\n    fprintf(stderr,\", value: %d\", digit);\n    fprintf(stderr,\", base: %d(\", base);\n    readablelonglong(stderr, base);\n    fprintf(stderr,\")\");\n    fprintf(stderr,\"\\n\");\n    fflush(stderr);\n  }\n\n  return(totll);\n}\n\nstatic int zero = 1, sspace = 0, snewline = 0,\n  scrlf = 1, chars = 72, pchars = 0, charwidth = 1,\n  charspaces = 0, words = 0, pwords = 0, cwords = 0,\n  plinesdigits = 5, slineno = 1, screen = 0,\n  quiet = 0, sort = 0, unique = 0,\n  flagprintdigits = 0;\n\nstatic int calc_spaces()\n{\n  int spaces;\n\n  spaces = 0;\n  \n  if(sspace &gt;= 2 &amp;&amp;\n     \/\/ space between word groups\n     ( (cwords &gt; 0 &amp;&amp; cwords % sspace == 0) ||\n       \/\/ space after linenumber\n       \/\/ are not printed if\n       \/\/ not printing linenumber\n       (slineno &amp;&amp; cwords == 0) ) )\n    spaces++;\n    \n  if(sspace &amp;&amp;\n     \/\/ space between words\n     ( (cwords &gt; 0) ||\n       \/\/ space after linenumber\n       (slineno &amp;&amp; cwords == 0) ) ) \n    spaces++;\n\n  return(spaces);\n}\n\nstatic void print_spaces(char spacechar)\n{\n  int sp;\n\n  for(sp = calc_spaces(); sp &gt; 0; sp--)\n    fputc(spacechar, stdout);\n}\n\nstatic long long lines = 10, plines = 0, ptotallines = 0;\n\nvoid printcolumns(int offset, int base, int startwith, int columns, int *clines) \/\/ 2023 JariK\n{\n  \/\/---------11111111112222222222333333333344444444445555555555666666666677\n  \/\/12345678901234567890123456789012345678901234567890123456789012345678901\n  \/\/=======================================================================\n  \/\/00000 86747100388687087416829400778878989202760594993130062980826178851\n  \/\/00001 36862623069143814543525935285460059703805218323534266522497684582\n  \n  int c, d, digit, nonzero;\n  unsigned char digits&#91;0x10] = \"0123456789abcdef\";\n\n  *clines = 0;\n\n  if(base == 2)\n    c = 1 &lt;&lt; 12;\n  else if(base == 8)\n    c = 01000000;\n  else if(base == 10)\n    c = 1000000;\n  else if(base == 16)\n    c = 0x1000000;\n  else {\n    fprintf(stdout,\"%s: printcolumns():\", procname);\n    fprintf(stdout,\" illegal base %d\", base);\n    fprintf(stdout,\"\\n\");\n    exit(1);\n  }\n\n  for(;c &gt;= 1; c \/= base) { \/\/ lines, 100000's, 10000's, 1000's ... 1's\n    if(c &gt;= columns)\n      continue;\n\n    for(d = 0; d &lt; offset; d++)\n      fprintf(stdout,\" \"); \/\/ spaces in beginning of row\n\n    nonzero = 0;\n    \n    for(d = startwith; d &lt; columns + startwith; d++) { \/\/ column numbers\n      digit = (d \/ c) % base;\n      if(digit != 0)\n\tnonzero = 1;\n      if(nonzero || c == 1)\n\tfprintf(stdout,\"%c\", digits&#91;digit]); \/\/ nonzero digits after first nonzero\n      else\n\tfprintf(stdout,\"-\"); \/\/ zeroes in beginning of row\n    }\n    fprintf(stdout,\"\\n\");\n    (*clines)++;\n  }\n  if(pwords &gt; 0) {\n    if(slineno) {\n      for(c = 0; c &lt;= plinesdigits; c++) \/\/ +1\n\tfprintf(stdout,\"-\");\n    }\n    for(cwords = 0; cwords &lt; pwords; cwords++) {\n      print_spaces('-');\n      fprintf(stdout,\"w\");\n      if(charwidth == 2)\n\tfprintf(stdout,\"-\");\n      for(c = 0; c &lt; size - 1; c++) {\n\tfprintf(stdout,\"-\");\n\tif(charwidth == 2)\n\t  fprintf(stdout,\"-\");\n      }\n    }\n    fprintf(stdout,\"\\n\");\n    (*clines)++;\n  }\n  for(d = 0; d &lt; offset; d++)\n    fprintf(stdout,\" \"); \/\/ spaces in beginning of row\n  for(d = startwith; d &lt; columns + startwith; d++)\n    fprintf(stdout,\"=\");\n  fprintf(stdout,\"\\n\");\n  (*clines)++;\n}\n\n#ifdef SAMPLE_HASH\n\nvoid hashfinal2string(unsigned char *hashstring, unsigned char *final)\n{\n  for(int c = 0; c &lt; HashLen; c++) {\n    sprintf(hashstring + 2 * c, \"%02x\",final&#91;c]);\n  }\n}\n\n#endif\n\nstatic int sample = 0, dieharder = 0; \/\/ randomness analysis\n\n\/\/ try randomness analysis with: $ dieharder -a -g 201 -f newressusample1.rnd &gt; newressusample1.rnd.dieharder\n\n#include &lt;signal.h&gt;\n\ntypedef void (*sighandler_t)(int);\n\nvoid sample_handler()\n{\n  static int times = 0;\n\n  times++;\n\n  fprintf(stderr,\"Ctrl-c pressed %d times\\n\", times);\n  if(times &gt;= 10) {\n    signal(SIGINT, SIG_DFL);\n    exit(2);\n  }\n}\n\n#define DEBUG39\n\n#define FILESIZE 3 * 1024 * 1024 * 1024\n#define BLOCKSIZE 384 * 1024\n#define BLOCKS 8192\n\nunsigned long long filesize = (long long)FILESIZE, blocks = BLOCKS;\nunsigned int blocksize = BLOCKSIZE;\nint filesize_set = 0, blocks_set = 0, blocksize_set = 0;\nint purge = 1;\nint purge_set = 0;\nunsigned char *filesize_str = NULL, *blocks_str = NULL, *blocksize_str = NULL;\n\n\nvoid dump_sample() \/\/ &amp; dieharder analysis\n{\n#define STAT_LINE_SHOW_BLOCK 2 \/\/ on by default\n#define STAT_LINE_SHOW_WRITTEN 2 \/\/ on by default\n#define STAT_LINE_SHOW_SPEED 2 \/\/ on by default\n#define STAT_LINE_SHOW_NOW 2 \/\/ on by default\n#define STAT_LINE_SHOW_LEFT 2 \/\/ on by default\n#define STAT_LINE_SHOW_READY 2 \/\/ on by default\n\n#define STAT_LINE_LESS_WOBBLE 2 \/\/ on by default\n\n#define TIMEFORMAT \"%H:%M %Z\"\n#define TIMEFORMAT2 \"%a %H:%M %Z\"\n#define DATEFORMAT \"%a %d %b %Y\"\n    \n  unsigned long long c;\n  unsigned char *buffer, filename&#91;128], command&#91;1024];\n  \n  FILE *fp1;\n  \n  \/\/ find first available filename,\n  \/\/ or empty \"fileslot\"\n  \n  for(c = 1; c &lt;= 999999; c++) {\n\n    sprintf(filename, samplefilename, c);\n    \n    if((fp1 = fopen(filename, \"r\")) != NULL) {\n      fclose(fp1);\n      continue;\n    }\n\n    unsigned char filename2&#91;138];\n\n    sprintf(filename2,\"%s.dieharder\",filename);\n    if((fp1 = fopen(filename2, \"r\")) != NULL) {\n      fclose(fp1);\n      continue;\n    }\n#ifdef SAMPLE_HASH\n    sprintf(filename2,\"%s.sha256\",filename);\n    if((fp1 = fopen(filename2, \"r\")) != NULL) {\n      fclose(fp1);\n      continue;\n    }\n#endif\n\n    break;\n  }\n\n  \n  \/\/ calculate missing file size parameters\n  \n  if(!filesize_set)\n    filesize = blocks * blocksize;\n  else if(!blocksize_set) {\n    blocksize = (filesize + blocks - 1) \/ blocks; \/\/ round up\n    filesize = blocks * blocksize;\n  } else if(!blocks_set) {\n    blocks = (filesize + blocksize - 1)\/ blocksize; \/\/ round up\n    filesize = blocks * blocksize;\n  }\n\n#define EXFAT_FIX 2 \/\/ on for now\n  \n#ifdef EXFAT_FIX\n\n  if(blocksize &gt; KILO * KILO) { \/\/ max \"blocksize\" 1m (exfat)\n    blocksize = KILO * KILO;\n    blocks = (filesize + blocksize - 1) \/ blocksize;\n    filesize = blocks * blocksize;\n  }\n\n#endif\n  \n  if(filesize != blocks * blocksize ||\n     blocks &lt; 1 || blocksize &lt; 1) {\n    fflush(stdout);\n    fprintf(stderr,\"%s: sample(): mismatched parameters\", procname);\n    fprintf(stderr,\", blocks:%llu(\", blocks);\n    readablelonglong(stderr, blocks);\n    fprintf(stderr,\")\");\n    fprintf(stderr,\", blocksize:%u(\", blocksize);\n    readablelonglong(stderr, blocksize);\n    fprintf(stderr,\")\");\n    fprintf(stderr,\", filesize:%llu(\", filesize);\n    readablelonglong(stderr, filesize);\n    fprintf(stderr,\")\");\n    fprintf(stderr,\"\\n\");\n    fflush(stderr);\n    exit(1);\n  }\n  \n  if(filesize \/ blocks != blocksize) {\n    fflush(stdout);\n    fprintf(stderr,\"%s: sample(): parameter overflow\", procname);\n    fprintf(stderr,\", blocks:%llu(\", blocks);\n    readablelonglong(stderr, blocks);\n    fprintf(stderr,\")\");\n    fprintf(stderr,\", blocksize:%u(\", blocksize);\n    readablelonglong(stderr, blocksize);\n    fprintf(stderr,\")\");\n    fprintf(stderr,\", filesize:%llu(\", filesize);\n    readablelonglong(stderr, filesize);\n    fprintf(stderr,\")\");\n    fprintf(stderr,\"\\n\");\n    fflush(stderr);\n    exit(1);\n  }\n\n#ifdef DEBUG39\n  fprintf(stderr,\"blocksize:%u(\", blocksize);\n  readablelonglong(stderr, blocksize);\n  fprintf(stderr,\")\");\n  fprintf(stderr,\", blocks:%llu(\", blocks);\n  readablelonglong(stderr, blocks);\n  fprintf(stderr,\")\");\n  fprintf(stderr,\", filesize:%llu(\", filesize);\n  readablelonglong(stderr, filesize);\n  fprintf(stderr,\")\\n\");\n  fflush(stderr);\n#endif\n\n  if((buffer = malloc(blocksize)) == NULL) {\n    fprintf(stderr,\"%s: sample(): cannot allocate memory (buffer)\\n\", procname);\n    exit(1);\n  }\n  \n#define DEBUG40 2 \/\/ default on (for now)\n    \n#ifdef DEBUG40\n  fprintf(stderr,\"%s: sample(): writing file\", procname);\n  fprintf(stderr,\", filename:%s\", filename);\n#ifndef SAMPLE_WRITE\n  fprintf(stderr,\", no write\");\n#endif\n  fprintf(stderr,\"\\n\");\n#endif\n  \n#ifdef SAMPLE_HASH\n  unsigned char digest&#91;HashLen];\n  HashCtx hash;\n\n  unlink(\"sample.deb\");\n  HashInit(&amp;hash); \/\/ calculate hash\n#endif\n\n  \/\/ variables for stat line fields\n\n  time_t start, now, left, end, took;\n  unsigned char speed&#91;10], printspeed&#91;10] = \"\";\n\n#ifdef STAT_LINE_LESS_WOBBLE\n\n  time_t prevend = -1;\n  int countspeed = 0, countend = 0;\n  unsigned char prevspeed&#91;10] = \"\";\n  unsigned int calculateleft;\n\n#endif\n\n  time_t printleft = -1, printend = -1;\n  int leftprinted = 0;\n\n  unsigned long long clim = 0;\n  \n  if((fp1 = fopen(filename, \"a\")) != NULL) {\n\n    \/\/ starting time\n    \n    start = time(NULL);\n    \n    clim = (unsigned long long) filesize \/ blocksize;\n\n#ifdef EXFAT_FIX\n    int mbinblocks = (1 * KILO * KILO) \/ blocksize;\n    if(mbinblocks == 0)\n      mbinblocks = 1;\n    fprintf(stderr,\"mbinblocks:%d\\n\", mbinblocks);\n#endif\n    \n    \/\/ you have to press ctrl-c 10 times\n\n    signal(SIGINT, sample_handler);\n    \n    for(c = 0; c &lt; clim; c++) {\n\n      \/\/ current time\n      \n      now = time(NULL);\n\n      \/\/ estimate for ending time\n      \n      end = (time_t)start + ((((double)now - start) \/ c) * clim);\n\n#ifdef STAT_LINE_LESS_WOBBLE\n\n      calculateleft = 0; \n      if(prevend \/ 60 == end \/ 60 &amp;&amp;\n\t ++countend &gt;= 30) { \/\/ 30 times same minutes --&gt; minutes are real\n\n\tprintend = end;\n\tcalculateleft = 1;\n      } else if(prevend \/ 60 != end \/ 60) { \/\/ minutes different\n\tprevend = end;\n\tcountend = 0;\n      }\n\n#else\n      printend = end;\n#endif\n\n      \/\/ estimate for time left\n\n      left = printend - now;\n\n#ifdef STAT_LINE_LESS_WOBBLE\n      \n      static int onlyseconds = 0;\n      static long long cstart, cleft, cseconds;\n      \n      if(onlyseconds || (left &gt; 0 &amp;&amp; left &lt; 60)) {\n\tif(!onlyseconds) {\n\t  cstart = c;\n\t  cleft = clim - c;\n\t  cseconds = left;\n\t  onlyseconds = 1;\n\t}\n\n\tleft = (double) cseconds - ((((double) c - cstart) \/ cleft) * cseconds);\n      }\n\n      if(calculateleft)\n\tprintleft = left;\n      \n#else\n      printleft = left;\n#endif\n\n      \/\/ speed\n      \n      if(now - start &gt; 1.0)\n\tstat_line_get_readable(speed, (unsigned long long)((double)c * blocksize \/ (now - start)) );\n      else\n\tstat_line_get_readable(speed, (unsigned long long)((double)c * blocksize));\n\n#ifdef STAT_LINE_LESS_WOBBLE\n\n      if(!strcmp(prevspeed, speed) &amp;&amp;\n\t ++countspeed &gt;= 3) { \/\/ three times same speed --&gt; speed is real\n\tstrcpy(printspeed, speed);\n      } else if(strcmp(prevspeed, speed)) {\n\tstrcpy(prevspeed, speed);\n\tcountspeed = 0;\n      }\n\n#else\n      strcpy(printspeed, speed);\n#endif\n      \n      \/\/ print status line:\n      \/\/ blk 10, written 10MB, 269KB\/sec, left 8 h 38 m, ready at Sat 17 Jul 2021 01:57:43 EEST, now Fri 17:19:32 EEST\n      \n      stat_line_begin();\n      \n      int print = 0;\n#ifdef STAT_LINE_SHOW_BLOCK\n      \n      stat_line_printf(\"%s\", input_str);\n      \n      \/\/ print block from 0 to 8192\n      \n      stat_line_printf(\"block %lld\", c);\n      print = 1;\n#endif\n      \n#ifdef STAT_LINE_SHOW_WRITTEN\n      \n      \/\/ print written\n      \n      if(print)\n\tstat_line_printf(\", \");\n      \n      stat_line_printf(\"written \");\n      stat_line_readable((unsigned long)c * blocksize);\n      print = 1;\n#endif\t  \n      if(c &gt; 0) {\n\t\n#ifdef STAT_LINE_SHOW_SPEED\n\t\n\t\/\/ print speed\n\t\n\tif(printspeed&#91;0] != '\\0') {\n\t  if(print)\n\t    stat_line_printf(\", \");\n\n\t  stat_line_printf(\"%s\/sec\", printspeed);\n\t  print = 1;\n\t}\n#endif\n\t\n#if defined STAT_LINE_SHOW_NOW ||\t\t\t\\\n  defined STAT_LINE_SHOW_READY\n\tchar timebuf&#91;128];\n#endif\n\t\n#ifdef STAT_LINE_SHOW_READY\n\tchar timebuf2&#91;128];\n#endif\n\t\n#ifdef STAT_LINE_SHOW_NOW\n\t\n\t\/\/ print now\n\t\n\tif(print)\n\t  stat_line_printf(\", \");\n\t\n\tstat_line_printf(\"now\");\n\tstrftime(timebuf, sizeof(timebuf), TIMEFORMAT2,\n\t\t localtime((time_t *)&amp;now));\n\tstat_line_printf(\" %s\", timebuf);\n\tprint = 1;\n#endif\n\t\n#ifdef STAT_LINE_SHOW_LEFT\n\t\n\t\/\/ print left\n\t\n\tif(printleft &gt; 0) {\n\n\t  if(print)\n\t    stat_line_printf(\", \");\n\n\t  stat_line_printf(\"left\");\n\t  stat_line_dhms(printleft);\n\n\t  leftprinted = 1;\n\t  print = 1;\n\t}\n#endif\n\t\n#ifdef STAT_LINE_SHOW_READY\n\t\n\t\/\/unsigned long int end = (int)start + ((((double)now - start) \/ c) * clim);\n\n\tif(printend &gt; 0 &amp;&amp; leftprinted) {\n\t  if(print)\n\t    stat_line_printf(\", \");\n\t  \n\t  stat_line_printf(\"ready at\");\n\t  strftime(timebuf, sizeof(timebuf), DATEFORMAT,\n\t\t   localtime((time_t *) &amp; end));\n\t  strftime(timebuf2, sizeof(timebuf2), DATEFORMAT,\n\t\t   localtime((time_t *) &amp; now));\n\t  if(strcmp(timebuf, timebuf2)) {\n\t    stat_line_printf(\" %s\", timebuf);\n\t  }\n\t  \n\t  \/\/ print end time\n\t  \n\t  strftime(timebuf, sizeof(timebuf), TIMEFORMAT,\n\t\t   localtime((time_t *) &amp; printend));\n\t  stat_line_printf(\" %s\", timebuf);\n\t  \n\t  print = 1;\n\t}\n#endif\n      }\n      stat_line_end();\n      stat_line_cursor_start();\n      \n      \/\/ do the work\n      \n      stat_line_cursor();\n\n      memset(buffer, 0, blocksize);\n            \n      if(input == INPUT_RESSU) \/\/ ressu prod\n\tressu_genbytes(blocksize, buffer);\n      \n      else if(input == INPUT_PSEUDORESSU) \/\/ pseudoressu\n\tpseudoressu_bytes(blocksize, buffer);\n      \n      else if(input == INPUT_RESSUTWIST) \/\/ ressu w twist\n\tressutwist_bytes(blocksize, buffer);\n\t\n      else if(input == INPUT_PSEUDORANDOM) \/\/ pseudoressu\n\tpseudorandom_bytes(blocksize, buffer);\n\n      else if(input == INPUT_PSEUDORESSU2) \/\/ pseudoressu\n\tpseudoressu2_bytes(blocksize, buffer);\n\n      else if(input == INPUT_RESSU2TWIST) \/\/ ressu w twist\n\tressu2twist_bytes(blocksize, buffer);\n\t\n      else if(input == INPUT_RESSU3) \/\/ pseudoressu\n\tressu3_bytes(blocksize, buffer);\n\n      else if(input == INPUT_SINGLE) \/\/ pseudoressu\n\tsingle_bytes(blocksize, buffer);\n\n      else if(input == INPUT_FASTRESSU) \/\/ ressu fast\n\tressu_genbytes_fast(blocksize, buffer);\n      \n      else if(input == INPUT_SINGLERESSU) \/\/ ressu single\n\tressu_genbytes_single(blocksize, buffer);\n      \n      else if(input == INPUT_STREAM) \/\/ ressu stream\n\tstream_bytes(blocksize, buffer);\n      \n      else if(input == INPUT_TEST) \/\/ test generator\n\ttest_bytes(blocksize, buffer);\n      \n#ifdef FORT\n      else if(input == INPUT_FORT) \/\/ ressu fort\n\tfort_random_data(blocksize, buffer);\n      \n      else if(input == INPUT_FORTXOR) \/\/ ressu fort\n\tfort_random_data_xor(blocksize, buffer);\n      \n#endif\n#ifdef USE_RDRAND\n      else if(input == INPUT_RDRAND) \/\/ intel rdrand\n\trdrand_bytes(blocksize, buffer);\n      \n#endif\n#ifdef USE_RDSEED\n      else if(input == INPUT_RDSEED) \/\/ intel rdseed\n\trdseed_bytes(blocksize, buffer);\n      \n#endif\n      else if(input == INPUT_URANDOM) \/\/ urandom\n\turandom_bytes(blocksize, buffer);\n      \n#ifdef USE_RANDOM\n      else if(input == INPUT_RANDOM) \/\/ random\n\trandom_bytes(blocksize, buffer);\n      \n#endif\n#ifdef USE_DUMMY\n      else if(input == INPUT_DUMMY) {\n\t\/\/ no generator\n      }\n#endif\n      else {\n\tfprintf(stdout,\"\\n%s: mode '%d'(%s) not available\\n\",\n\t\tprocname, input, input_str);\n\texit(2);\n      }\n#ifdef SAMPLE_HASH\n      HashUpdate(&amp;hash, buffer, blocksize); \/\/ calculate hash\n      FILE *fp4;\n      if((fp4 = fopen(\"sample.deb\", \"a\")) != NULL) {\n\tfwrite(buffer, blocksize, 1, fp4);\n\tfclose(fp4);\n      }\n#endif\n#ifdef SAMPLE_WRITE\n      if(input != INPUT_DUMMY) {\n\tfwrite(buffer, 1, blocksize, fp1);\n\t\n#ifdef SAMPLE_SYNC\n\n#ifdef EXFAT_FIX\n\tif(c % mbinblocks == 0) { \/\/ fflush and sync (EXFAT)\n\t  fflush(fp1);\n\t  \/\/sync();\n\t  fsync(fileno(fp1));\n\t}\n#endif\n\n#endif\n      } \/\/ end of if(input != INPUT_DUMMY\n#endif\n    } \/\/ end of for(c = 0; c &lt; clim; c++\n#ifdef SAMPLE_HASH\n    HashFinal(digest, &amp;hash); \/\/ calculate hash\n#endif\n\n    fflush(fp1); \/\/ fflush and sync (EXFAT)\n    \/\/sync();\n    fsync(fileno(fp1));\n    \n    fclose(fp1);\n    \n  } else { \/\/ if((fp1=fopen\n    fprintf(stderr,\"%s:\", procname);\n    fprintf(stderr,\" sample(): cannot open file\");\n    fprintf(stderr,\", filename: %s\", filename);\n    fprintf(stderr,\"\\n\");\n    exit(2);\n  }\n  \n  \/\/ remove last status line\n\n  \/\/stat_line_cursor_remove();\n  \n  stat_line_begin();\n  \n  stat_line_printf(\"\\rwrote \");\n  stat_line_readable((unsigned long)c * blocksize);\n  \n  stat_line_printf(\", \");\n  if(now - start &gt;= 1.0)\n    stat_line_readable((unsigned long)((double)c * blocksize \/ (now - start)) );\n  else\n    stat_line_readable((unsigned long)c * blocksize);\n  stat_line_printf(\"\/sec\");\n\n  end = time(NULL);\n  took = end - start;\n  stat_line_printf(\", took\");\n  stat_line_dhms(took);\n  \n  \/\/stat_line_printf(\", done!\");\n  stat_line_end();\n  stat_line_cursor_remove();\n  fprintf(stderr,\"\\n\");\n  fflush(stderr);\n\n#ifdef SAMPLE_HASH\n  unsigned char filename2&#91;138];\n  unsigned char hashstring&#91;2 * HashLen + 1];\n  \n  hashfinal2string(hashstring, digest);\n\n  sprintf(filename2,\"%s.sha256\", filename);\n  \n  fprintf(stderr,\"%s: sample(): hashing file\", procname);\n  fprintf(stderr,\", filename:%s\", filename);\n  fprintf(stderr,\", hashfilename:%s\", filename2);\n  fprintf(stderr,\", sha256:%s\\n\", hashstring);\n  \n  if((fp1 = fopen(filename2, \"a\")) != NULL) {\n    fprintf(fp1,\"%s\\n\",hashstring);\n    fclose(fp1);\n  }\n  sprintf(command,\"sha256sum %s\", filename);\n  fprintf(stderr,\"%s: sample(): checking sha256\", procname);\n  fprintf(stderr,\", filename:%s\", filename);\n  fprintf(stderr,\", command:'%s'\\n\", command);\n  system(command);\n#endif\n\n  signal(SIGINT, SIG_DFL);\n\n  memset(buffer, 0, blocksize); \/\/ forget buffer\n\n  free(buffer);\n  \n  if(dieharder) { \/\/ randomness analysis\n    \n    sprintf(command,\"dieharder -a -g 201 -f %s &gt; %s.dieharder 2&gt;&amp;1\",\n\t    filename, filename);\n    \/\/sprintf(command,\"dieharder -a -g 201 -f %s &gt; %s.dieharder\", filename, filename);\n    fprintf(stderr,\"%s: sample(): running dieharder \\\"%s\\\"\\n\",\n\t    procname, command);\n    system(command);\n    sprintf(command,\"grep \\\"WEAK\\\\|FAILED\\\" %s.dieharder\",\n\t    filename);\n    fprintf(stderr,\"%s: sample(): grepping dieharder problems \\\"%s\\\"\\n\"\n\t    , procname, command);\n    system(command);\n\n    long long weak;\n    sprintf(command,\"grep WEAK %s.dieharder\", filename);\n    weak = command_countlines(command);\n    fprintf(stderr,\"%s: sample(): calculating WEAK lines\", procname);\n    fprintf(stderr, \", lines = %lld\", weak);\n    fprintf(stderr,\", \\\"%s\\\"\\n\", command);\n\n    long long failed;\n    sprintf(command,\"grep FAILED %s.dieharder\", filename);\n    failed = command_countlines(command);\n    fprintf(stderr,\"%s: sample(): calculating FAILED lines\", procname);\n    fprintf(stderr, \", lines = %lld\", failed);\n    fprintf(stderr,\", \\\"%s\\\"\\n\", command);\n\n    sprintf(command,\"grep rewound %s.dieharder | tail -n1\",\n\t    filename);\n    fprintf(stderr,\"%s: sample(): grepping last rewound count \\\"%s\\\"\\n\",\n\t    procname, command);\n    system(command);\n\n    FILE *fp2;\n    if((fp2 = fopen(\"newressudieharder.skk\", \"a\")) != NULL) { \/\/\n      fprintf(fp2,\"'input' = \\\"%s\\\"\", input_str);\n      if(filesize_str != NULL)\n\tfprintf(fp2,\", 'filesize' = \\\"%s\\\"\", filesize_str);\n      if(blocksize_str != NULL)\n\tfprintf(fp2,\", 'blocksize' = \\\"%s\\\"\", blocksize_str);\n      if(blocks_str != NULL)\n\tfprintf(fp2,\"'blocks' = \\\"%s\\\"\", blocks_str);\n      fprintf(fp2,\", 'filename' = \\\"%s\\\"\", filename);\n      fprintf(fp2,\", 'weak' = \\\"%lld\\\"\", weak);\n      fprintf(fp2,\", 'failed' = \\\"%lld\\\"\", failed);\n      fprintf(fp2,\"\\n\");\n      fclose(fp2);\n    }\n    \n    if(purge) {\n      fprintf(stderr,\"%s: sample(): removing file\", procname);\n      fprintf(stderr,\" %s\\n\", filename);\n      unlink(filename);\n    }\n    exit(0);\n  }\n}\n\nstatic unsigned long limit, word, uppercase = 0;\nstatic unsigned char *digits = \"0123456789\", character&#91;32];\nstatic unsigned char digitstemp&#91;256], *digitsext = NULL;\nstatic unsigned char linenobuf&#91;1024];\nstatic unsigned char *stream_default_key  = \"kalakala\";\nstatic unsigned char *key = NULL;\nstatic int print_statline = 0, columns = 0, flagdigits = 0;\n\nint help = 0;\n\n\/\/\n\/\/  utf8 functions\n\/\/\n\nstatic int utf8characters(unsigned char *buf)\n{\n  int characters;\n  unsigned char *p;\n  \n  p = buf;\n  characters = 0;\n  while(*p != '\\0') {\n    if(*p &lt; 0x80 || \/\/ ascii char\n       *p &gt; 0xbf) \/\/ first utf8 byte\n      characters++;\n    p++;\n  }\n\n  if(flagdigits == 1) \/\/ semicolon separated (flags)\n    return(characters \/ 2);\n  else\n    return(characters);\n}\n\nint utf8strings(unsigned char *buf)\n{\n  int strings = 0;\n\n  unsigned char *p = buf;\n  while(*p != '\\0') {\n    if(*p == ';')\n      strings++;\n    p++;\n  }\n\n  return(strings);\n}\n\n#define aDEBUG47 2\n\nint utf8lengths(unsigned char *buf)\n{\n  int lengths, len, first = 1;\n  unsigned char *p;\n\n#ifdef DEBUG47 \n  fprintf(stdout,\"digits    %s\", buf);\n  fprintf(stdout,\"\\nlengths   \");\n#endif\n  \n  p = buf;\n  len = 0;\n  lengths = -1;\n  first = 1;\n\n  while(*p != '\\0') {\n    if(!first &amp;&amp;\n       (*p &lt; 0x80 || \/\/ ascii char\n\t*p &gt; 0xbf)) { \/\/ first utf8 byte\n#ifdef DEBUG47\n      fprintf(stdout,\"%d\", len);\n#endif\n      if(lengths == -1)\n\tlengths = len;\n      else if(lengths != len)\n\tlengths = 0;\n      len = 0;\n    }\n    p++;\n    len++;\n    first = 0;\n  }\n\n#ifdef DEBUG47\n  fprintf(stdout,\"%d\", len);\n#endif\n  if(lengths == -1)\n    lengths = len;\n  else if(lengths != len)\n    lengths = 0;\n\n#ifdef DEBUG47\n  fprintf(stdout,\"\\nlengths   %d\\n\\n\", lengths);\n#endif\n  return(lengths);\n}\n\nint utf8stringlengths(unsigned char *buf)\n{\n  int lengths = -1, len;\n  unsigned char *p = buf;\n\n  \/\/ return(0);\n  \n  len = 0;\n  while(*p != '\\0') {\n    if(*p == ';') {\n      p++;\n      if(lengths == -1)\n\tlengths = len;\n      else if(lengths != len)\n\tlengths = 0;\n      len = 0;\n    }\n    p++;\n    len++;\n  }\n\n  if(lengths == -1)\n    lengths = 0;\n  else\n    lengths++; \/\/ count semicolon also\n\n  return(lengths);\n}\n\n#define aDEBUG42 2\n\nstatic void codetoutf8(unsigned char *buf2, unsigned long long code)\n{\n  unsigned char *buf;\n\n  buf = buf2;\n  if(code &lt;= 0x7f) {\n    *buf++ = code;\n  } else if(code &lt;= 0x7ff) {            \/\/ 110xxxxx 10xxxxxx\n    *buf++ = (0xc0 | ((code &gt;&gt; 6) &amp; 0x1f));\n    *buf++ = (0x80 | (code &amp; 0x3f));\n  } else if(code &lt;= 0xffff) {           \/\/ 1110xxxx 10xxxxxx 10xxxxxx\n    *buf++ = (0xe0 | ((code &gt;&gt; 12) &amp; 0x0f));\n    *buf++ = (0x80 | ((code &gt;&gt; 6) &amp; 0x3f));\n    *buf++ = (0x80 | (code &amp; 0x3f));\n  } else if(code &lt;= 0x10ffff) {         \/\/ 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx\n    *buf++ = (0xf0 | ((code &gt;&gt; 18) &amp; 0x07));\n    *buf++ = (0x80 | ((code &gt;&gt; 12) &amp; 0x3f));      \n    *buf++ = (0x80 | ((code &gt;&gt; 6) &amp; 0x3f));      \n    *buf++ = (0x80 | ((code &amp; 0x3f)));      \n  } else if(code &lt;= 0x3ffffff) {        \/\/ 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx \/\/ these not yet needed\n    *buf++ = (0xf8 | ((code &gt;&gt; 24) &amp; 0x03));\n    *buf++ = (0x80 | ((code &gt;&gt; 18) &amp; 0x3f));      \n    *buf++ = (0x80 | ((code &gt;&gt; 12) &amp; 0x3f));      \n    *buf++ = (0x80 | ((code &gt;&gt; 6) &amp; 0x3f));      \n    *buf++ = (0x80 | ((code &amp; 0x3f)));      \n  } else if(code &lt;= 0x7fffffff) {       \/\/ 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx \/\/ these not yet needed\n    *buf++ = (0xfc | ((code &gt;&gt; 30) &amp; 0x01));\n    *buf++ = (0x80 | ((code &gt;&gt; 24) &amp; 0x3f));      \n    *buf++ = (0x80 | ((code &gt;&gt; 18) &amp; 0x3f));      \n    *buf++ = (0x80 | ((code &gt;&gt; 12) &amp; 0x3f));      \n    *buf++ = (0x80 | ((code &gt;&gt; 6) &amp; 0x3f));      \n    *buf++ = (0x80 | ((code &amp; 0x3f)));      \n  } else if(code &lt;= 0xfffffffff) {      \/\/ 11111110 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx \/\/ these not yet needed\n    *buf++ = (0xfe);\n    *buf++ = (0x80 | ((code &gt;&gt; 30) &amp; 0x3f));      \n    *buf++ = (0x80 | ((code &gt;&gt; 24) &amp; 0x3f));      \n    *buf++ = (0x80 | ((code &gt;&gt; 18) &amp; 0x3f));      \n    *buf++ = (0x80 | ((code &gt;&gt; 12) &amp; 0x3f));      \n    *buf++ = (0x80 | ((code &gt;&gt; 6) &amp; 0x3f));      \n    *buf++ = (0x80 | ((code &amp; 0x3f)));      \n  } else if(code &lt;= 0x3ffffffffff) {    \/\/ 11111111 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx \/\/ these not yet needed\n    *buf++ = (0xff);\n    *buf++ = (0x80 | ((code &gt;&gt; 36) &amp; 0x3f));      \n    *buf++ = (0x80 | ((code &gt;&gt; 30) &amp; 0x3f));      \n    *buf++ = (0x80 | ((code &gt;&gt; 24) &amp; 0x3f));      \n    *buf++ = (0x80 | ((code &gt;&gt; 18) &amp; 0x3f));      \n    *buf++ = (0x80 | ((code &gt;&gt; 12) &amp; 0x3f));      \n    *buf++ = (0x80 | ((code &gt;&gt; 6) &amp; 0x3f));      \n    *buf++ = (0x80 | ((code &amp; 0x3f)));      \n  }\n  *buf = '\\0';\n\n#ifdef DEBUG42\n  int c, print;\n\n  fprintf(stdout,\"codepoint: %lx\", code);\n\n  fprintf(stdout,\", bin:\");\n\n  print = 0;\n  for(c = (sizeof(code) * 8) - 1; c &gt;= 0; c--) {\n    int bit = (code &gt;&gt; c) &amp; 1;\n    if(bit != 0)\n      print = 1;\n    if(print) {\n      fprintf(stdout,\"%d\", bit);\n      if(c &gt; 0 &amp;&amp; c % 8 == 0)\n\tfprintf(stdout,\"|\");\n    }\n  }\n\n  fprintf(stdout,\", oct:\");\n  print = 0;\n  fprintf(stdout,\"%lo\", code);\n\n  fprintf(stdout,\", utf8: \");\n  for(c = 0; c &lt; 8; c++) {\n    if(buf2&#91;c] == '\\0')\n      break;\n    fprintf(stdout,\"%02x\", buf2&#91;c]);\n  }\n\n  fprintf(stdout,\", bin: \");\n  for(c = 0; c &lt; 8; c++) {\n    if(buf2&#91;c] == '\\0')\n      break;\n    if(c &gt; 0)\n      fprintf(stdout,\"|\");\n    for(int d = 7; d &gt;= 0; d--) {\n      fprintf(stdout,\"%d\", buf2&#91;c] &gt;&gt; d &amp; 1);\n    }\n  }\n\n  fprintf(stdout,\", oct:\");\n  for(c = 0; c &lt; 8; c++) {\n    if(buf2&#91;c] == '\\0')\n      break;\n    fprintf(stdout,\" %3o\", buf2&#91;c]);\n  }\n  \n  fprintf(stdout,\", character: %s\", buf2);\n  fprintf(stdout,\"\\n\");\n#endif\n}\n\n#ifdef NOTUSED\n\n#define aDEBUG43 2\n\nstatic void utf8tocode(unsigned long *code, unsigned char *buf2)\n{\n  unsigned char *buf;\n  \n  *code = 0;\n  buf = buf2;\n  \n  if(*buf &lt;= 0x7f) {                  \/\/ 0xxxxxxx\n    *code = *buf;\n  } else if(*buf &lt; 0xc0) {            \/\/ 110xxxxx 10xxxxxx\n    *code = 0;\n  } else if(*buf &lt; 0xe0) {            \/\/ 110xxxxx 10xxxxxx\n    *code = *buf++ &amp; 0x1f;\n    *code = (*code &lt;&lt; 6) + (*buf++ &amp; 0x3f);\n  } else if(*buf &lt; 0xf0) {            \/\/ 1110xxxx 10xxxxxx 10xxxxxx\n    *code = *buf++ &amp; 0x0f;\n    *code = (*code &lt;&lt; 6) + (*buf++ &amp; 0x3f);\n    *code = (*code &lt;&lt; 6) + (*buf++ &amp; 0x3f);\n  } else if(*buf&lt;0xf8) {            \/\/ 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx\n    *code = *buf++ &amp; 0x07;\n    *code = (*code &lt;&lt; 6) + (*buf++ &amp; 0x3f);\n    *code = (*code &lt;&lt; 6) + (*buf++ &amp; 0x3f);\n    *code = (*code &lt;&lt; 6) + (*buf++ &amp; 0x3f);\n  } else if(*buf &lt; 0xfc) {            \/\/ 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx\n    *code = *buf++ &amp; 0x03;\n    *code = (*code &lt;&lt; 6) + (*buf++ &amp; 0x3f);\n    *code = (*code &lt;&lt; 6) + (*buf++ &amp; 0x3f);\n    *code = (*code &lt;&lt; 6) + (*buf++ &amp; 0x3f);\n    *code = (*code &lt;&lt; 6) + (*buf++ &amp; 0x3f);\n  } else if(*buf &lt; 0xfe) {            \/\/ 1111110x 10xxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx\n    *code = *buf++ &amp; 0x01;\n    *code = (*code &lt;&lt; 6) + (*buf++ &amp; 0x3f);\n    *code = (*code &lt;&lt; 6) + (*buf++ &amp; 0x3f);\n    *code = (*code &lt;&lt; 6) + (*buf++ &amp; 0x3f);\n    *code = (*code &lt;&lt; 6) + (*buf++ &amp; 0x3f);\n    *code = (*code &lt;&lt; 6) + (*buf++ &amp; 0x3f);\n  } else if(*buf &lt; 0xff) {            \/\/ 11111110 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx\n    buf++;\n    *code = *buf++ &amp; 0x3f;\n    *code = (*code &lt;&lt; 6) + (*buf++ &amp; 0x3f);\n    *code = (*code &lt;&lt; 6) + (*buf++ &amp; 0x3f);\n    *code = (*code &lt;&lt; 6) + (*buf++ &amp; 0x3f);\n    *code = (*code &lt;&lt; 6) + (*buf++ &amp; 0x3f);\n    *code = (*code &lt;&lt; 6) + (*buf++ &amp; 0x3f);\n  } else if(*buf == 0xff) {            \/\/ 11111111 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx\n    buf++;\n    *code = *buf++ &amp; 0x3f;\n    *code = (*code &lt;&lt; 6) + (*buf++ &amp; 0x3f);\n    *code = (*code &lt;&lt; 6) + (*buf++ &amp; 0x3f);\n    *code = (*code &lt;&lt; 6) + (*buf++ &amp; 0x3f);\n    *code = (*code &lt;&lt; 6) + (*buf++ &amp; 0x3f);\n    *code = (*code &lt;&lt; 6) + (*buf++ &amp; 0x3f);\n    *code = (*code &lt;&lt; 6) + (*buf++ &amp; 0x3f);\n  }\n#ifdef DEBUG43\n  int c;\n\n  fprintf(stdout, \"character: %s\", buf2);\n\n  fprintf(stdout, \", utf8: \");\n  for(c = 0; c &lt; 8; c++) {\n    if(buf2&#91;c] == '\\0')\n      break;\n    fprintf(stdout,\"%02x\", buf2&#91;c]);\n  }\n\n  fprintf(stdout, \", bin: \");\n  for(c = 0; c &lt; 8; c++) {\n    if(buf2&#91;c] == '\\0')\n      break;\n    if(c &gt; 0)\n      fprintf(stdout, \"|\");\n    for(int d = 7; d &gt;= 0; d--)\n      fprintf(stdout, \"%d\", buf2&#91;c] &gt;&gt; d &amp; 1);\n  }\n\n  fprintf(stdout, \", oct:\");\n  for(c = 0; c &lt; 8; c++) {\n    if(buf2&#91;c] == '\\0')\n      break;\n    fprintf(stdout, \" %3o\", buf2&#91;c]);\n  }\n  \n  fprintf(stdout, \", codepoint: %lx\", *code);\n  fprintf(stdout, \", bin:\");\n  int print = 0;\n  for(c = (sizeof(code) * 8) - 1; c &gt;= 0; c--) {\n    int bit = (*code &gt;&gt; c) &amp; 1;\n    if(bit != 0)\n      print = 1;\n    if(print) {\n      fprintf(stdout, \"%d\", bit);\n      if(c &gt; 0 &amp;&amp; c % 8 == 0)\n\tfprintf(stdout, \"|\");\n    }\n  }\n\n  fprintf(stdout, \", oct:\");\n  fprintf(stdout, \"%lo\", *code);\n  \n  fprintf(stdout, \"\\n\");\n#endif\n}\n\n#endif \n\nint characterlengths = 0; \/\/ 0 multiple lengths, x lengths are same\n\n#define aDEBUG55 2\n\nstatic void utf8getcharactersemi(int size, unsigned char *buf, int n, unsigned char *string)\n{\n  int d;\n  unsigned char *p, *q;\n  \n  d = 0;\n  p = string;\n  q = buf;\n\n  \/\/ find first byte of character\n\n  if(characterlengths != 0)\n    p += characterlengths * n;\n  else {\n    if(flagdigits) { \/\/ semicolon separated (flags)\n      while(*p != '\\0') {\n\tif(d == n)\n\t  break;\n\tif(*p == ';') {\n\t  d++;\n\t}\n\tp++;\n      }\n    } else { \/\/ else if(flagdigits)\n      while(*p != '\\0') {\n\tif(*p &lt; 0x80 || \/\/ ascii char\n\t   *p &gt; 0xbf) { \/\/ first utf8 char\n\t  if(d == n)\n\t    break;\n\t  d++;\n\t}\n\tp++;\n      }\n    }\n  }\n  \/\/fprintf(stdout,\"%d***%s\\n\",d,p);\n\n  \/\/ copy first byte and rest\n  \/\/ of character\n\n  if(flagdigits) { \/\/ semicolon separated (flags)\n    while(*p != '\\0') {\n      if(*p == ';')\n\tbreak;\n      *q++ = *p++; \/\/ copy first byte\n    }\n  } else {\n    if(*p != '\\0') {\n      *q++ = *p; \/\/ copy first byte\n      if(*p &gt; 0xbf) { \/\/ if first is utf8 char\n\tp++;\n\tfor(;;) {\n\t  if(*p &gt; 0xbf || \/\/ first utf8 char\n\t     *p &lt; 0x80 || \/\/ ascii char\n\t     *p == '\\0')  \/\/ end of file\n\t    break;\n\t  *q++ = *p++; \/\/ copy rest of the bytes\n\t}\n      }\n    }\n  }\n\n  *q = '\\0';\n  \/\/fprintf(stdout,\"character: `%s`\\n\", buf);\n\n#ifdef DEBUG56\n  fprintf(stdout,\"%s: utf8getcharacter:\", procname);\n  fprintf(stdout,\" string: %s\", string);\n  fprintf(stdout,\", n: %d\", n);\n  fprintf(stdout,\", character: %s\", buf);\n  fprintf(stdout,\", characterlengths: %d\", characterlengths);\n  fprintf(stdout,\"\\n\");\n#endif\n}\n\nstatic void utf8getcharacter(int size, unsigned char *buf, int n, unsigned char *string)\n{\n  int d;\n  unsigned char *p, *q;\n  \n  d = 0;\n  p = string;\n  q = buf;\n\n  \/\/ find first byte of character\n\n  if(characterlengths != 0)\n    p += characterlengths * n;\n  else {\n    while(*p != '\\0') {\n      if(*p &lt; 0x80 || \/\/ ascii char\n\t *p &gt; 0xbf) { \/\/ first utf8 char\n\tif(d == n)\n\t  break;\n\td++;\n      }\n      p++;\n    }\n  }\n  \/\/fprintf(stdout,\"%d***%s\\n\",d,p);\n\n  \/\/ copy first byte and rest\n  \/\/ of character\n\n  if(*p != '\\0') {\n    *q++ = *p; \/\/ copy first byte\n    if(*p &gt; 0xbf) { \/\/ if first is utf8 char\n      p++;\n      for(;;) {\n\tif(*p &gt; 0xbf || \/\/ first utf8 char\n\t   *p &lt; 0x80 || \/\/ ascii char\n\t   *p == '\\0')  \/\/ end of file\n\t  break;\n\t*q++ = *p++; \/\/ copy rest of the bytes\n      }\n    }\n  }\n\n  *q = '\\0';\n\n#ifdef DEBUG56\n  fprintf(stdout,\"%s: utf8getcharacter:\", procname);\n  fprintf(stdout,\" string: %s\", string);\n  fprintf(stdout,\", n: %d\", n);\n  fprintf(stdout,\", character: %s\", buf);\n  fprintf(stdout,\", characterlengths: %d\", characterlengths);\n  fprintf(stdout,\"\\n\");\n#endif\n}\n\n#define aDEBUG56 2\n\nstatic void utf8getcharacter1(int size, unsigned char *buf, int n, unsigned char *string)\n{\n  unsigned char *p, *q;\n  \n  p = string;\n  q = buf;\n\n  \/\/ find first byte of character\n\n  p += n;\n\n  \/\/ copy first byte and rest\n  \/\/ of character\n  \n  if(*p != '\\0') {\n    *q++ = *p; \/\/ copy first byte\n    if(*p &gt; 0xbf) { \/\/ if first is utf8 char\n      p++;\n      for(;;) {\n\tif(*p &gt; 0xbf || \/\/ first utf8 char\n\t   *p &lt; 0x80 || \/\/ ascii char\n\t   *p == '\\0')  \/\/ end of file\n\t  break;\n\t*q++ = *p++; \/\/ copy rest of the bytes\n      }\n    }\n  }\n  *q = '\\0';\n  \n#ifdef DEBUG56\n  fprintf(stdout,\"%s: utf8getcharacter:\", procname);\n  fprintf(stdout,\" string: %s\", string);\n  fprintf(stdout,\", n: %d\", n);\n  fprintf(stdout,\", character: %s\", buf);\n  fprintf(stdout,\", characterlengths: %d\", characterlengths);\n  fprintf(stdout,\"\\n\");\n#endif\n}\n\n#define aDEBUG45 2\n\nint digitscount = 10;\n\n\/\/ display word in \"digits\" base (random data)\n\nstatic void out_word(int size, unsigned char *buf, unsigned char *digits, unsigned long word2) \/\/ 8.5.2021 JariK\n{\n  int c, d, len;\n  unsigned long word;\n  unsigned char string&#91;1024], character&#91;128];\n\n  \/\/digitscount = utf8characters(digits);\n  word = word2;\n  len = 0;\n  string&#91;0] = '\\0';\n\n  if(word == 0 || digitscount &lt; 2) {\n    \/\/ zero\n    utf8getcharactersemi(sizeof(character), character, 0, digits);\n    if(len + strlen(character) &lt; sizeof(string)) {\n      strcat(string, character);\n      len += strlen(character);\n    }\n  } else {\n    \/\/ non zero\n    while(word &gt; 0) {\n      utf8getcharactersemi(sizeof(character), character, word%digitscount, digits);\n      if(len + strlen(character) &lt; sizeof(string)) {\n\tstrcat(string, character);\n\tlen += strlen(character);\n      }\n      word \/= digitscount;\n    }\n  }\n\n#ifdef DEBUG45\n  fprintf(stdout,\"]\\n%s: out_word a:\", procname);\n  fprintf(stdout,\" orig string: %s\", string);\n#endif\n  \n  \/\/ reverse string\n\n  if(flagdigits) \/\/ semicolon separated (flags)\n    strcpy(buf, string);\n  else {\n    *buf = '\\0';\n    len = 0;\n    d = utf8characters(string);\n    for(c = d - 1; c &gt;= 0; c--) {\n      utf8getcharacter(sizeof(character), character, c, string);\n      if(len + strlen(character) &lt; size) {\n\tstrcat(buf, character);\n\tlen += strlen(character);\n      }\n    }\n  }\n\n#ifdef DEBUG45\n  fprintf(stdout,\" reverse string: %s\", string);\n  \/\/fprintf(stdout,\", digits: %s\", digits);\n  fprintf(stdout,\", int: %lu\", word2);\n  fprintf(stdout,\"\\n&#91;\");\n#endif\n}\n\n\/\/ display word in decimal (10-base) (line number)\n\nstatic void out_word_10(int size, unsigned char *buf, unsigned long word2) \/\/ 8.5.2021 JariK\n{\n  int c, d, len;\n  unsigned long word;\n  unsigned char string&#91;128], character&#91;32];\n  unsigned char *digits10 = \"0123456789\";\n  int digitscount = 10;\n  \n  \/\/digitscount = utf8characters(digits);\n  word = word2;\n  len = 0;\n  string&#91;0] = '\\0';\n\n  if(word == 0 || digitscount &lt; 2) {\n    \/\/ zero\n    utf8getcharacter1(sizeof(character), character, 0, digits10);\n    if(len+strlen(character) &lt; sizeof(string)) {\n      strcat(string, character);\n      len += strlen(character);\n    }\n  } else {\n    \/\/ non zero\n    while(word &gt; 0) {\n      utf8getcharacter1(sizeof(character), character, word % digitscount, digits10);\n      if(len + strlen(character) &lt; sizeof(string)) {\n\tstrcat(string, character);\n\tlen += strlen(character);\n      }\n      word \/= digitscount;\n    }\n  }\n\n  \/\/ reverse string\n  \n  *buf = '\\0';\n  len = 0;\n  d = utf8characters(string);\n  for(c = d - 1;c &gt;= 0; c--) {\n    utf8getcharacter1(sizeof(character), character, c, string);\n    if(len + strlen(character) &lt; size) {\n      strcat(buf, character);\n      len += strlen(character);\n    }\n  }\n\n#ifdef DEBUG45\n  fprintf(stdout,\"]\\n%s: out_word b:\", procname);\n  fprintf(stdout,\" reverse string: %s\", string);\n  \/\/fprintf(stdout,\", digits: %s\", digits);\n  fprintf(stdout,\", int: %lu\", word2);\n  fprintf(stdout,\"\\n&#91;\");\n#endif\n}\n\nstatic void in_word(unsigned long *word, unsigned char *digits, unsigned char *buf)\n{\n  int c, d, e, f, ok;\n  unsigned char character&#91;32], character2&#91;32];\n\n  *word = 0;\n  d = utf8characters(buf);\n  if(flagdigits) \/\/ semicolon separated (flags)\n    f = utf8strings(digits);\n  else \/\/ not\n    f = utf8characters(digits);\n    \n  for(c = 0; c &lt; d; c++) {\n    utf8getcharacter(sizeof(character2), character2, c, buf);\n    ok = 0;\n    for(e = 0; e &lt; f; e++) {\n      utf8getcharactersemi(sizeof(character), character, e, digits); \/\/ semi added\n      if(!strcmp(character, character2)) {\n\tok = 1;\n\tbreak;\n      }\n    }\n    if(ok) {\n      *word = ((*word) * f) + e;\n    } else {\n      fprintf(stdout,\"%s: in_word:\", procname);\n      fprintf(stdout,\" illegal digit '%s'\\n\", character2);\n    }\n  }\n\n#ifdef DEBUG45\n  fprintf(stdout,\"%s: in_word:\", procname);\n  fprintf(stdout,\" word: %lu\", *word);\n  \/\/fprintf(stdout,\", digits: %s\", digits);\n  fprintf(stdout,\", string: %s\", buf);\n  fprintf(stdout,\"\\n\");\n#endif\n\n}\n\n\/\/\n\/\/ lotto functions\n\/\/\n\nstatic void line_clear(int *len, unsigned char **buf)\n{\n  if(*len &lt; 1) {\n    *len = 129;\n    *buf = realloc(*buf, *len);\n  }\n  **buf = '\\0';\n}\n\nstatic int line_add_string_sort(int *len, unsigned char **buf, unsigned char *string)\n{\n  int cmp, count, add;\n  unsigned char *p;\n\n  p = *buf;\n  add = 1;\n  while(*p != '\\0') {\n    cmp = strncmp(string, p, strlen(string));\n    if(cmp &gt; 0) {\n      while(*p != ' ' &amp;&amp; *p != '\\0') \/\/ find next space\n\tp++;\n      while(*p == ' ' &amp;&amp; *p != '\\0') \/\/ find next non space\n\tp++;\n    } else if(cmp == 0) {\n      add = 0;\n      break;\n    } else {\n      break;\n    }\n  }\n\n  if(add) {\n    count = strlen(*buf) + strlen(string) +1 +1;\n    if(*buf == NULL || count &gt; *len) {\n      int diff = p - *buf;\n      *len = *len + 128;\n      *buf = realloc(*buf, *len);\n      p = *buf + diff;\n    }\n    memmove(p + strlen(string) + 1, p, strlen(p) + 1);\n    memmove(p, string, strlen(string));\n    p += strlen(string);\n    *p = ' ';\n  }\n\n  return(add);\n}\n\nstatic void line_get_string(int len, unsigned char *buf,\n\t\t\t    int n, unsigned char *string)\n{\n  int e, ok, count;\n  unsigned char *p, *q;\n\n  ok = 0;\n  p = string;\n  e = 0;\n\n  while(*p != '\\0') {\n    if(e == n) {\n      ok = 1;\n      break;\n    }\n    while(*p != ' ' &amp;&amp; *p != '\\0') \/\/ find next space\n      p++;\n    while(*p == ' ' &amp;&amp; *p != '\\0') \/\/ find next non space\n      p++;\n    e++;\n  }\n  if(ok) {\n    q = buf;\n    count = 0;\n    while(*q != ' ' &amp;&amp; *q != '\\0') {\n      if(++count &lt; len)\n\t*q++ = *p;\n      p++;\n    }\n    *q = '\\0';\n  } else {\n    buf&#91;0] = '\\0';\n  }\n}\n\n#define DEBUG59 2 \/\/ default is on for now\n\n#ifdef DEBUG59\nstatic int utf8 = 0;\n#endif\n\n#ifdef DEBUG51\nstatic int limitsize = 0;\n#endif\n\n#define aDEBUG51 2\n\nstatic void readword(unsigned char *buf)\n{\n  int d,e;\n  unsigned char temp1024&#91;1024];\n  \n  if(limit != 0) {\n    word = 0;\n    \n    if(zero) {\n      word = newressu_gen_limit(limit); \/\/ include zeroes\n    } else if(limit &gt;= 1) {\n      while((word = newressu_gen_limit(limit)) == 0); \/\/ skip zeroes\n    }\n#ifdef DEBUG51\n    if(type == 2)\n      fprintf(stdout, \"(%0*lx)\", limitsize, word);\n    else if(type == 8)\n      fprintf(stdout, \"(%0*lo)\", limitsize, word);\n    else if(type == 10)\n      fprintf(stdout, \"(%0*lu)\", limitsize, word);\n    else if(type == 16)\n      fprintf(stdout, \"(%0*lx)\", limitsize, word);\n    else {\n      fprintf(stdout, \"(%02lu)\", word);\n    }\n#endif\n\t  \n    out_word(sizeof(temp1024), temp1024, digits, word);\n\t  \n    \/\/ fill leading zeroes\n    \n    buf&#91;0] = '\\0';\n    utf8getcharactersemi(sizeof(character), character, 0, digits);\n    for(d = size - utf8characters(temp1024); d &gt; 0; d--) {\n      strcat(buf, character);\n    }\n\t  \n    \/\/ rest of the number\n\t  \n    strcat(buf, temp1024);\n\t  \n  } else if(digits != NULL) {\n\t  \n    buf&#91;0] = '\\0';\n\t  \n#ifdef DEBUG51\n    fprintf(stdout, \"(\");\n#endif\n    \/\/ fill whole word digit by digit\n    for(d = 0; d &lt; size; d++) {\n      if(digits&#91;0] == '0' &amp;&amp; !zero)\n\te = newressu_gen_limit(digitscount - 1) + 1;\n      else\n\te = newressu_gen_limit(digitscount);\n      utf8getcharacter(sizeof(temp1024), temp1024, e, digits);\n#ifdef DEBUG51\n      fprintf(stdout,\"%s\", temp1024);\n      if(charspaces == 1)\n\tfputc(' ', stdout);\n#endif\n      strcat(buf, temp1024);\n    }\n#ifdef DEBUG51\n    fprintf(stdout, \")\");\n#endif\n  }\n}\n\n\/\/\n\/\/ stdout printing routines\n\/\/\n\nstatic int line_number_length()\n{\n  int c;\n  out_word_10(sizeof(linenobuf), linenobuf, lines-1);\n  c = strlen(linenobuf);\n  if(c &lt; 5)\n    c = 5;\n  return(c);\n}\n\nstatic void print_line_number()\n{\n  unsigned char linenobuf&#91;32];\n  \n  if(cwords == 0 &amp;&amp; slineno) {\n    if(newressu_output) {\n      fprintf(stdout,\"\\n\");\n      newressu_output = 0;\n    }\n    sprintf(linenobuf,\"%0*llu\", plinesdigits, plines);\n    fprintf(stdout,\"%s\", linenobuf);\n    fprintf(stdout,\" \");\n  }\n}\n\nstatic void print_word(unsigned char *buf)\n{\n  int e;\n  \n  if(size != 0) {\n    if(charspaces == 0) {\n      fprintf(stdout, \"%s\", buf);\n    } else {\n      for(e = 0; e &lt; size; e++) {\n\tunsigned char temp1024&#91;1024];\n\tutf8getcharacter(sizeof(temp1024), temp1024, e, buf);\n\tfprintf(stdout, \"%s\", temp1024);\n\tfputc(' ', stdout);\n      }\n    }\n  } else {\n    fprintf(stdout, \"%s\", buf);\n    if(charspaces == 1) {\n      fputc(' ', stdout);\n    }\n  }\n}\n\n#ifdef SHA256\n\nstatic void newressu_file_digest(char *filename,unsigned char *hash)\n{\n  int c;\n  unsigned char buffer&#91;1024];\n  FILE *fp1;\n  HashCtx ctx;\n  \n  HashInit(&amp;ctx);\n  if((fp1 = fopen(filename, \"rb\")) != NULL) {\n    while((c = fread(buffer, 1, sizeof(buffer), fp1)) &gt; 0) {\n      \/\/ressu_dump(\"buffer\", c, buffer, 32); \/\/ first 32 bytes\n      HashUpdate(&amp;ctx, buffer, c);\n    }\n    fclose(fp1);\n  }\n  HashFinal(hash, &amp;ctx);  \n}\n\n#endif\n\n#define aDEBUG55 2\n#define aDEBUG57 2\n\nvoid digits_add_string(unsigned char **digits, char *str)\n{\n  int digitssize;\n\n#ifdef DEBUG55\n  fprintf(stdout,\"\\nolddigits %s\", *digits);\n  fprintf(stdout,\"\\nadddigits %s\", str);\n#endif\n  digitssize = 0;\n  if(*digits != NULL)\n    digitssize += strlen(*digits);\n  digitssize += strlen(str);\n\n#ifdef DEBUG57\n  fprintf(stdout,\"digitssize:%d\\n\", digitssize);\n  fflush(stdout);\n#endif\n\n  unsigned char *prevdigits = *digits;\n  *digits = realloc(*digits, digitssize + 1);\n  if(prevdigits == NULL)\n    **digits = '\\0';\n\n  strcat(*digits, str);\n#ifdef DEBUG55\n  fprintf(stdout,\"\\nnewdigits %s\", *digits);\n  fprintf(stdout,\"\\n\");\n#endif\n}\n\nvoid digits_add_limits(unsigned char **digits, int start, int end)\n{\n  int digitssize;\n  unsigned char buffer&#91;32];\n  long long ll;\n  \n#ifdef DEBUG55\n  fprintf(stdout,\"\\nolddigits %s\", *digits);\n  fprintf(stdout,\"\\nadddigits start:%d, end:%d\", start, end);\n#endif\n  digitssize = 0;\n  if(*digits != NULL)\n    digitssize += strlen(*digits);\n  \n  for(ll = start; ll &lt;= end; ll++) {\n    codetoutf8(buffer, ll);\n    digitssize += strlen(buffer);\n  }\n\n#ifdef DEBUG57\n  fprintf(stdout,\"digitssize:%d\\n\", digitssize);\n  fflush(stdout);\n#endif\n  \n  unsigned char *prevdigits = *digits;\n  *digits = realloc(*digits, digitssize + 1);\n  if(prevdigits == NULL)\n    **digits = '\\0';\n\n  for(ll = start; ll &lt;= end; ll++) {\n    codetoutf8(buffer, ll);\n    strcat(*digits, buffer);\n  }\n#ifdef DEBUG55\n  fprintf(stdout,\"\\nnewdigits %s\", *digits);\n  fprintf(stdout,\"\\n\");\n#endif\n}\n\nvoid strtolower(unsigned char *buf)\n{\n  while(*buf != '\\0') {\n    *buf = tolower(*buf);\n    buf++;\n  }\n}\n\nvoid strtoupper(unsigned char *buf)\n{\n  while(*buf != '\\0') {\n    *buf = toupper(*buf);\n    buf++;\n  }\n}\n\ndouble getseconds()\n{\n  struct timeval tv;\n  gettimeofday(&amp;tv, NULL);\n  return((double)tv.tv_sec + (double)tv.tv_usec \/ 1000000);\n}\n\nint newressu_getname(int length, unsigned char *name, unsigned char **p2)\n{\n  int len, ok = 0;\n  unsigned char *n, *p;\n\n  p = *p2;\n  n = name;\n  len = 0;\n  \n  while(ispunct(*p) || isblank(*p)) {\n    p++;\n  }\n\n  while(*p != '\\0' &amp;&amp; !ispunct(*p) &amp;&amp; !isblank(*p)) {\n    if(len &lt; length) {\n      *n++ = *p;\n      ok = 1;\n    }\n    p++;\n    len++;\n  }\n  *n = '\\0';\n  \n  *p2 = p;\n\n  return(ok);\n}\n\nvoid newressu_base(int base2)\n{\n  base = base2;\n  \n  digits = malloc(base + 1);\n  strncpy(digits, basedigits, base);\n  if(uppercase == 1 &amp;&amp; base &lt;= 36) { \/\/ if lowercase only (&#91;0-9] + &#91;a-z], 10 + 26\n    for(int c = 0; c &lt; base; c++) { \/\/ to uppercase\n      if(digits&#91;c] &gt;= 'a' &amp;&amp; digits&#91;c] &lt;= 'z')\n\tdigits&#91;c] = digits&#91;c] - 'a' + 'A';\n      else if(digits&#91;c] &gt;= 'A' &amp;&amp; digits&#91;c] &lt;= 'Z')\n\tdigits&#91;c] = digits&#91;c] - 'A' + 'a';\n    }\n  }\n  if(digitsext != NULL)\n    free(digitsext);\n  digitsext = digits;\n  \n  digits&#91;base] = '\\0';\n}\n\n#include &lt;sys\/ioctl.h&gt; \/\/ for TIOCGWINSZ\n\n#define aDEBUG50 2\n#define aDEBUG71 2\n\nvoid call_main(char *);\n\n#define aCALL_MAIN 2\n\n#ifdef CALL_MAIN\n\n#define DEBUG99 2\n\nint main2(int argc, char *argv&#91;]);\n\nvoid call_main(char *cmd)\n{\n  int size, round, count, chars;\n  unsigned char *p, *q, *argmem,*params;\n  char **argv;\n\n  size = 0;\n\n  for(round = 0; round &lt; 2; round++) {\n    count = 0;\n    p = cmd;\n    while(*p != '\\0') {\n      while(*p == ' ' || *p == '\\t')\n\tp++;\n      q = p;\n      chars = 0;\n      while(*p != ' ' &amp;&amp;  *p != '\\t' &amp;&amp; *p != '\\0') {\n\tp++;\n\tchars++;\n      }\n      if(round == 0) \/\/ calculate size &amp; alloc\n\tsize += chars + 1 + sizeof(char *);\n      else { \/\/ move parameters to arg area\n\tstrncpy(params, q, chars);\n\t*(argv+count) = params;\n\tparams += (chars+1);\n      }\n      count++;\n    }\n    if(round == 0) { \/\/ allocate\n      size += sizeof(char *); \/\/ ending NULL\n      argmem = malloc(size);\n      argv = (char **)argmem;\n      params = argmem + sizeof(char *) * (count+1);\n    }\n  }\n\n  *(argv+count) = NULL; \/\/ ending NULL\n\n#ifdef DEBUG99\n  \n  fprintf(stdout, \"size:%d,\", size);\n  fprintf(stdout, \" argmem:\");\n  for(int c = 0; c &lt; size; c++) {\n    if(c &gt; 0 &amp;&amp; c % 8 == 0)\n      fprintf(stdout, \"|\");\n    if(*(argmem+c) == '\\\\')\n      fprintf(stdout, \"\\\\\\\\\");\n    if(isprint(*(argmem + c)))\n      fprintf(stdout, \"%c\", *(argmem + c));\n    else\n      fprintf(stdout, \"\\\\%02x\", *(argmem + c));\n  }\n  fprintf(stdout, \"\\n\");\n\n#endif \/\/ #ifdef DEBUG99\n\n  main2(count, argv);\n}\n\nint main(int argc, char *argv&#91;])\n{\n  int first;\n  char buffer&#91;1024];\n\n  first = 1;\n  buffer&#91;0] = '\\0';\n  for(int c = 0; c &lt; argc; c++) {\n    if(!first)\n      strcat(buffer, \" \");\n    strcat(buffer, argv&#91;c]);\n    first = 0;\n  }\n#ifdef DEBUG99\n  fprintf(stdout,\"main: cmd \\\"%s\\\"\\n\",buffer);\n#endif\n  \n  call_main(buffer);\n}\n\n#endif \/\/ #ifdef CALL_MAIN\n\n#ifdef CALL_MAIN\n\nint main2(int argc, char *argv&#91;])\n{\n#ifdef DEBUG99\n  fprintf(stdout, \"main2args:\");  \n  for(int c = 0; c &lt; argc; c++) {\n    fprintf(stdout, \" %d:\\\"%s\\\"\", c, argv&#91;c]);\n  }\n  fprintf(stdout, \"\\n\");\n#endif \/\/ #ifdef DEBUG99\n\n#else \/\/ #ifdef CALL_MAIN\n\nstatic unsigned char programfiledigest&#91;HashLen];\n\nint main(int argc, char *argv&#91;])\n{\n#endif \/\/ #ifdef CALL_MAIN\n  \n  int c, d, status = 0;\n\n#define aDEBUG73 2\n\n#ifdef DEBUG73\n  \n  int f;\n  \n  f = (ressu_useconds() \/ MILLION) % size;\n  fprintf(stdout,\"f1:%d\\n\",f);\n  f = (ressu_useconds() \/ MILLION \/ 1024) % size;\n  fprintf(stdout,\"f2:%d\\n\",f);\n  f = (ressu_useconds() \/ MILLION \/ 1024 \/ 1024) % size;\n  fprintf(stdout,\"f3:%d\\n\",f);\n  f = (ressu_useconds() \/ MILLION \/ 1024 \/ 1024 \/ 1024) % size;\n  fprintf(stdout,\"f4:%d\\n\",f);\n  f = (ressu_useconds() \/ MILLION \/ 1024 \/ 1024 \/ 1024 \/ 1024) % size;\n  fprintf(stdout,\"f5:%d\\n\",f);\n\n#endif\n\n#define aDEBUG2I 2\n  \n#ifdef DEBUG2I\n  unsigned char urandom&#91;1024];\n  for(c = 0; c &lt; 1024; c++) {\n    fprintf(stdout,\"%d\", c);\n    urandom_bytes(c, urandom);\n    fprintf(stdout,\"\\n\");\n  }\n#endif\n\n#ifdef DEBUG2H\n\n  for(int c = 0; c &lt; RESSUT_BYTES; c++)\n    count&#91;c] = 0;\n\n#endif\n\n  procname = argv&#91;0];\n\n#define aDEBUG67A 2\n\n#ifdef DEBUG67A\n  unsigned long long big = 0xffffffffffffffff;\n  fprintf(stdout,\"0x%llx\\n\", big);\n  fprintf(stdout,\"0o%llo\\n\", big);\n  fprintf(stdout,\"0d%llu\\n\", big);\n  fprintf(stdout,\"0x%llx\\n\", big);\n  for(int base = 2; base &lt;= 64; base++) {\n    fprintf(stdout,\"base:%d, \", base);\n    fprintfbase(stdout, big, base);\n    fprintf(stdout,\"\\n\");\n  }\n  fprintf(stdout,\"number\");\n  for(int base = 2; base &lt;= 64; base++) {\n    fprintf(stdout,\" %d\",base);\n  }\n  fprintf(stdout,\"\\n\");\n  for(unsigned long long ll = 0; ll &lt; 1048576; ll++) {\n  \/\/for(unsigned long long ll = 4096; ll &gt; 0; ll+=4096) {\n  \/\/for(unsigned long long ll = 1; ll != 0; ll *= 2) {\n    fprintf(stdout,\"%llu:\", ll);\n    for(int base = 2; base &lt;= 64; base++) {\n      fprintf(stdout,\" \");\n      fprintfbase(stdout, ll, base);\n    }\n    fprintf(stdout,\"\\n\");\n  }\n  fflush(stdout);\n#endif\n\n#define aDEBUG67B 2\n  \n#ifdef DEBUG67B\n\n  unsigned char buffer4096&#91;4096];\n  unsigned char buffer&#91;128];\n  \n  stream_open(0, stream_default_key);\n\n  \/\/ fprintf(stderr,\"read\\n\");\n  stream_bytes(sizeof(buffer4096), buffer4096);\n  \/\/buffer4096&#91;2048] = 1;\n\n  \/\/ fprintf(stderr,\"second read\\n\");\n  \n  for(int c = 1; c &lt; sizeof(buffer); c++) {\n    \/\/ fprintf(stdout,\"%d\", c);\n    stream_open(0, stream_default_key);\n    for(int d = 0; d &lt; sizeof(buffer4096) - c + 1; d += c) {\n      \/\/ fprintf(stdout,\" %d\", d);\n      stream_bytes(c, buffer);\n      if(memcmp(buffer, buffer4096 + d, c)) {\n\tfprintf(stderr,\"%s: compare mismatch (stream), c=%d, d=%d\\n\", procname, c, d);\n\t\/\/ exit(1);\n      }\n    }\n    \/\/ fprintf(stdout,\"\\n\");\n  }\n#endif\n\n#define aDEBUG69\n  \n#ifdef DEBUG69\n  stream_open(0, \"\u2680\u2681\u2682\u2683\u2684\u2685\"); \/\/ utf8  \n  stream_open(0, \"Hasta la vista, baby (Arnold Schwarzenegger, T2)\"); \/\/ pass phrase\n  stream_open(0, \"abcdefghijklmnopqrstuvwxyz\" \/\/ long password (key)\n\t      \"abcdefghijklmnopqrstuvwxyz\"\n\t      \"abcdefghijklmnopqrstuvwxyz\"\n\t      \"abcdefghijklmnopqrstuvwxyz\"\n\t      \"abcdefghijklmnopqrstuvwxyz\"); \n  stream_open(5, \"\\x00\\x01\\x02\\x03\\x04\"); \/\/ binary string with length\n#endif\n  \n#define aDEBUG74\n\n#ifdef DEBUG74\n\n  char *ds&#91;] = { \"A\", \"B\", \"T\", \"J\", \"X\", \"KH\", \"D\", \"R\", \"S\", \"SH\",\n\t\t \"DH\", \"C\", \"G\", \"F\", \"Q\", \"K\", \"L\", \"M\", \"N\", \"W\",\n\t\t \"H\", \"Y\", \"E\", \"O\" }; \/\/ --som\n  for(c= 0; c &lt; sizeof(ds) \/ sizeof(ds&#91;0]); c++)\n    fprintf(stdout,\" `%s`\",ds&#91;c]);\n  fprintf(stdout,\"\\n\");\n\n#endif\n\n  unsigned char *flagchars&#91;] =\n    { \"\ud83c\udde6\", \"\ud83c\udde7\", \"\ud83c\udde8\", \"\ud83c\udde9\", \"\ud83c\uddea\", \"\ud83c\uddeb\", \"\ud83c\uddec\", \"\ud83c\udded\", \"\ud83c\uddee\", \"\ud83c\uddef\",\n      \"\ud83c\uddf0\", \"\ud83c\uddf1\", \"\ud83c\uddf2\", \"\ud83c\uddf3\", \"\ud83c\uddf4\", \"\ud83c\uddf5\", \"\ud83c\uddf6\", \"\ud83c\uddf7\", \"\ud83c\uddf8\", \"\ud83c\uddf9\",\n      \"\ud83c\uddfa\", \"\ud83c\uddfb\", \"\ud83c\uddfc\", \"\ud83c\uddfd\", \"\ud83c\uddfe\", \"\ud83c\uddff\" };\n  \n#define DEBUG70\n\n#ifdef DEBUG70\n\n  for(c = 0; c &lt; sizeof(idsflags) \/ sizeof(idsflags&#91;0]); c++) {\n    unsigned char buffer20&#91;20];\n    unsigned char buffer128&#91;128];\n    sprintf(buffer128,\" %s\", idsflags&#91;c].flags);\n    unsigned char *p = buffer128;\n    if(idsflags&#91;c].id&#91;0] !=  '\\0')\n      continue;\n    buffer20&#91;0] = '\\0';\n    for(d = 0; *p != '\\0'; d++) {\n      if(isalpha(*p) == 0 &amp;&amp;\n\t islower(*(p + 1)) != 0 &amp;&amp;\n\t islower(*(p + 2)) != 0 &amp;&amp;\n\t isalpha(*(p + 3)) == 0) {\n\tstrcat(buffer20, flagchars&#91;toupper(*(p + 1)) - 'A']);\n\tstrcat(buffer20, flagchars&#91;toupper(*(p + 2)) - 'A']);\n      }\n      p++;\n    }\n    fprintf(stdout,\"  { \\\"%s\\\"\", buffer20);\n    fprintf(stdout,\", \\\"%s: %s\\\" },\\n\", buffer20, idsflags&#91;c].flags);\n    fflush(stdout);\n  }\n  \n#endif\n\n#define aDEBUG68A \/\/ default is off\n\n#ifdef DEBUG68A\n\n  unsigned char *hindi = malloc(8192);\n  digits_add_limits(&amp;hindi,0x900,0x97f);   \/\/ Hindi (0900-097f)\n  unsigned char *h;\n  int first;\n\n  \/\/fprintf(stdout,\"hindi1: %s\\n\", hindi);\n  h = hindi;\n  first = 1;\n  while(*h != '\\0') {\n    if(!first)\n      fprintf(stdout, \" \");\n    fputc(*h, stdout); \/\/ print first char\n    if(*h &gt; 0xbf) { \/\/ first char utf8\n      h++;\n      for(;;) { \/\/ print rest of the utf8 chars\n\tif(*h &gt; 0xbf || \/\/ new utf8 character\n\t   *h &lt; 0x80 || \/\/ ascii character\n\t   *h == '\\0') \/\/ end of string\n\t  break;\n\tfputc(*h, stdout);\n\th++;\n      }\n    }\n    first = 0;\n  }\n  fprintf(stdout,\"\\n\");\n  free(hindi);\n  \n#endif\n\n#define aDEBUG68B\n#ifdef DEBUG68B\n  fprintf(stdout,\"hebrew: \");\n  unsigned char *hebrew = malloc(8192);\n  digits_add_limits(&amp;hebrew, 0x590, 0x5ff);   \/\/  (0590-05ff)\n  \/\/ \u0590\u0591\u0592\u0593\u0594\u0595\u0596\u0597\u0598\u0599\u059a\u05be\u05bf\u05c0\u05c1\u05c2\u05c3\u05c4\u05c5\u05c6\u05c7\u05c8\u05c9\u05ca\u05cb\u05cc\u05cd\u05ce\u05cf\u05d0\u05d1\u05d2\u05d3\u05d4\u05d5\u05d6\u05d7\u05d8\u05d9\u05da\u05db\u05dc\u05dd\u05de\u05df\u05e0\u05e1\u05e2\u05e3\u05e4\u05e5\u05e6\u05e7\u05e8\u05e9\u05ea\u05eb\u05ec\u05ed\u05ee\u05ef\u05f0\u05f1\u05f2\u05f3\u05f4\u05f5\u05f6\u05f7\u05f8\u05f9\u05fa\u05fb\u05fc\u05fd\u05fe\u05ff\n  fprintf(stdout,\"%s\\n\", hebrew);\n#endif\n\n#define aDEBUG68C\n#ifdef DEBUG68C\n  fprintf(stdout,\"phoenician: \");\n  unsigned char *phoenician = malloc(8192);\n  digits_add_limits(&amp;phoenician, 0x10900, 0x1091f);   \/\/  (10900-1091f)\n  \/\/phoenician: \ud802\udd00\ud802\udd01\ud802\udd02\ud802\udd03\ud802\udd04\ud802\udd05\ud802\udd06\ud802\udd07\ud802\udd08\ud802\udd09\ud802\udd0a\ud802\udd0b\ud802\udd0c\ud802\udd0d\ud802\udd0e\ud802\udd0f\ud802\udd10\ud802\udd11\ud802\udd12\ud802\udd13\ud802\udd14\ud802\udd15\ud802\udd16\ud802\udd17\ud802\udd18\ud802\udd19\ud802\udd1a\ud802\udd1b\ud802\udd1c\ud802\udd1d\ud802\udd1e\ud802\udd1f\n  fprintf(stdout,\"%s\\n\", phoenician);\n#endif\n  \n  limit = 0;\n\n#ifdef SHA256\n  newressu_file_digest(\"\/proc\/self\/exe\", programfiledigest);\n#endif\n  \n  newressu_clear();\n\n  clockbytes = 0;\n  for(d = 0; d &lt; 1024; d++)\n    periods&#91;d] = 0;\n\n#ifdef USE_TIMER\n  int timer = 0;\n  double timerstart;\n#endif  \n\n#define aDEBUG72 \/\/ default is on\n\t\t     \n#ifdef DEBUG19\t\n  int flagint = 1;\n#endif\n\n  idsall = 1;\n  newressu_toggleflag(\"ALL\");\n  int flagsinit = 0;\n\t\t     \n  \/\/\n  \/\/ look thru command line parameters\n  \/\/ for flags option\n  \/\/\n\n  int flagflags = 0;\n  for(c = 1; c &lt; argc; c++) {\n    if(!strcmp(\"--flags\", argv&#91;c])) { \/\/ not ready\n      flagflags = 1;\n    }\n  }\n\n  \/\/\n  \/\/ look thru command line parameters\n  \/\/\n\n  for(c = 1; c &lt; argc; c++) {\n\n    int ok = 1;\n\n    if(!strncmp(\"-\", argv&#91;c], 1)) {\n\n      if(!strcmp(\"--help\", argv&#91;c]) ||\n\t !strcmp(\"-?\", argv&#91;c])) {\n\thelp = 1;\n\t\n      } else if(!strcmp(\"--quiet\", argv&#91;c])) {\n\tquiet = !quiet;\n\n      } else if(!strcmp(\"--stats\", argv&#91;c]) ||\n\t!strcmp(\"--stat\", argv&#91;c])) {\n\tstats = !stats;\n\n      } else if(!strcmp(\"--digits\", argv&#91;c])) {\n\tflagprintdigits = !flagprintdigits;\n\n      } else if(!strcmp(\"--columns\", argv&#91;c])) {\n\tcolumns = !columns; \/\/ print column numbers\n\t\n      } else if(!strncmp(\"--space\", argv&#91;c], 7)) {\n\tif(isdigit(*(argv&#91;c] + 7))) {\n\t  sspace = atoi(argv&#91;c] + 7);\n\t} else if(c + 1 &lt; argc &amp;&amp; isdigit(*(argv&#91;c + 1]))) {\n\t  sspace = atoi(argv&#91;c + 1]);\n\t  c++;\n\t} else {\n\t  sspace = !sspace;\n\t}\n\n      } else if(!strncmp(\"--newline\", argv&#91;c], 9)) {\n\tif(*(argv&#91;c] + 9) != '\\0' &amp;&amp; atoi(argv&#91;c] + 9) &gt; 0) {\n\t  snewline = atoi(argv&#91;c] + 9);\n\t} else if(c + 1 &lt; argc &amp;&amp; atoi(argv&#91;c + 1]) &gt; 0) {\n\t  snewline = atoi(argv&#91;c + 1]);\n\t  c++;\n\t}\n\n      } else if(!strcmp(\"--sample\", argv&#91;c])) {\n\tsample = !sample;\n\t\n      } else if(!strcmp(\"--dieharder\", argv&#91;c])) {\n\tdieharder = !dieharder;\n\t\n      } else if(!strcmp(\"--purge\", argv&#91;c])) {\n\tpurge = !purge;\n\tpurge_set = 1;\n\t\n      } else if(!strcmp(\"--save\", argv&#91;c])) {\n\tpurge = 1;\n\tpurge_set = 1;\n\t\n#ifdef DEBUG59\n      } else if(!strcmp(\"--utf8\", argv&#91;c])) {\n\tutf8 = !utf8;\n\t\n#endif\n      } else if(!strncmp(\"--filesize\", argv&#91;c], 10)) {\n\tif(*(argv&#91;c] + 10) != '\\0') {\n\t  filesize_str = argv&#91;c] + 10;\n\t  filesize = getlonglong(filesize_str);\n\t} else if(c + 1 &lt; argc) {\n\t  filesize_str = argv&#91;c + 1];\n\t  filesize = getlonglong(filesize_str);\n\t  c++;\n\t}\n\tfilesize_set = 1;\n\n      } else if(!strncmp(\"--blocksize\", argv&#91;c], 11)) {\n\tif(*(argv&#91;c] + 11) != '\\0') {\n\t  blocksize_str = argv&#91;c] + 10;\n\t  blocksize = getlonglong(blocksize_str);\n\t} else if(c + 1 &lt; argc) {\n\t  blocksize_str = argv&#91;c + 1];\n\t  blocksize = getlonglong(blocksize_str);\n\t  c++;\n\t}\n\tblocksize_set = 1;\n\t\n      } else if(!strncmp(\"--blocks\", argv&#91;c], 8)) {\n\tif(*(argv&#91;c] + 8) != '\\0') {\n\t  blocks_str = argv&#91;c] + 10;\n\t  blocks = getlonglong(blocks_str);\n\t} else if(c + 1 &lt; argc) {\n\t  blocks_str = argv&#91;c + 1];\n\t  blocks = getlonglong(blocks_str);\n\t  c++;\n\t}\n\tblocks_set = 1;\n\n      } else if(!strcmp(\"--copyright\", argv&#91;c]) ||\n\t !strcmp(\"--version\", argv&#91;c])) {\n\tnewressu_version();\n#ifdef SHA256\n\tfprintf(stderr,\"\\nsha256(\");\n\tfor(int c = 0; c &lt; HashLen; c++) {\n\t  fprintf(stderr, \"%02x\", programfiledigest&#91;c]);\n\t}\n#endif\n\tfprintf(stderr, \")\\n\\n\");\n\thelp = 0;\n\texit(1);\n\t\n      } else if(!strcmp(\"--webversion\", argv&#91;c])) {\n\tfprintf(stderr, \"%s\", programname); \/\/ touch these outside MAIN\n\tfprintf(stderr,\", sha256(\");\n\tfor(int c = 0; c &lt; HashLen; c++) {\n\t  fprintf(stderr, \"%02x\", programfiledigest&#91;c]);\n\t}\n\tfprintf(stderr,\")\\n\");\n\texit(0);\n\n      } else if(!strcmp(\"--lineno\", argv&#91;c])) {\n\tslineno = !slineno; \/\/ print line number\n\t\n      } else if(!strcmp(\"--crlf\", argv&#91;c])) {\n\tscrlf = !scrlf;\n\tslineno = 0;\n\n#ifdef DEBUG19\t\n      } else if(!strcmp(\"--int\", argv&#91;c])) {\n\tflagint = !flagint;\n\n#endif\n      } else if(!strcmp(\"--rand\", argv&#91;c])) {\n\tdigits = \"0123456789\";\n\tsspace = 2;\n\tsnewline = 5;\n\tslineno = 1; \/\/ print line number\n\twords = 10;\n\tchars = 0;\n\tlimit = 100000;\n\t\/\/size = 5;\n\t\/\/lines = 20000;\n\t\n      } else if(!strcmp(\"--zero\", argv&#91;c])) {\n\tzero = !zero;\n\n      } else if(!strcmp(\"--sort\", argv&#91;c])) {\n\tsort = !sort;\n\tif(sspace == 0)\n\t  sspace = 1;\n\t\t\n      } else if(!strcmp(\"--unique\", argv&#91;c])) {\n\tunique =! unique;\n\tif(sspace == 0)\n\t  sspace = 1;\n\t\t\n      } else if(!strcmp(\"--lotto\", argv&#91;c])) {\n\tsort = !sort;\n\tif(sspace == 0)\n\t  sspace = 1;\n\t\/\/sort = 1;\n\t\/\/unique = 1;\n\n      } else if(!strncmp(\"--lim\", argv&#91;c], 5)) { \/\/ limit of word\n\tif(*(argv&#91;c] + 5) != '\\0') {\n\t  in_word(&amp;limit, digits, argv&#91;c] + 5);\n\t} else if(c+1 &lt; argc) {\n\t  in_word(&amp;limit, digits, argv&#91;c + 1]);\n\t  c++;\n\t}\n\t\/\/fprintf(stdout,\"limit:%lu, %ld bytes\\n\", limit, sizeof(limit));\n\tif(sspace &lt; 1 ) \/\/ 23.6.2021\n\t  sspace = 1;\n\n      } else if(!strncmp(\"--size\", argv&#91;c], 6)) { \/\/ size of word\n\tif(isdigit(*(argv&#91;c] + 6))) {\n\t  size = atoi(argv&#91;c] + 6);\n\t} else if(c + 1 &lt; argc) {\n\t  size = atoi(argv&#91;c + 1]);\n\t  c++;\n\t}\n\tlimit = 0; \/\/ 23.6.2021\n\n      } else if(!strncmp(\"-s\", argv&#91;c], 2)) { \/\/ size of word\n\tif(isdigit(*(argv&#91;c] + 2))) {\n\t  size = atoi(argv&#91;c] + 2);\n\t} else if(c + 1 &lt; argc) {\n\t  size = atoi(argv&#91;c + 1]);\n\t  c++;\n\t}\n\tlimit = 0; \/\/ 23.6.2021\n\n      } else if(!strncmp(\"--bits\", argv&#91;c], 6)) {\n\tif(isdigit(*(argv&#91;c] + 6))) {\n\t  ressut_bits1_needed = atoi(argv&#91;c] + 6);\n\t} else if(c + 1 &lt; argc) {\n\t  ressut_bits1_needed = atoi(argv&#91;c + 1]);\n\t  c++;\n\t}\t\n\n      } else if(!strncmp(\"--bytes\", argv&#91;c], 7)) {\n\tif(isdigit(*(argv&#91;c] + 7))) {\n\t  ressut_bytes = atoi(argv&#91;c] + 7);\n\t} else if(c + 1 &lt; argc) {\n\t  ressut_bytes = atoi(argv&#91;c + 1]);\n\t  c++;\n\t}\t\n\n      } else if(!strncmp(\"--words\", argv&#91;c], 7)) { \/\/ words per line\n\tif(isdigit(*(argv&#91;c] + 7))) {\n\t  words = atoi(argv&#91;c] + 7);\n\t} else if(c + 1 &lt; argc) {\n\t  words = atoi(argv&#91;c + 1]);\n\t  c++;\n\t}\n\tif(words &lt; 1)\n\t  words = 1;\n\tchars = 0;\n\tscreen = 0;\n\t\n      } else if(!strncmp(\"-w\", argv&#91;c], 2)) { \/\/ words per line\n\tif(isdigit(*(argv&#91;c] + 2))) {\n\t  words = atoi(argv&#91;c] + 2);\n\t} else if(c + 1 &lt; argc) {\n\t  words = atoi(argv&#91;c + 1]);\n\t  c++;\n\t}\n\tif(words &lt; 1)\n\t  words = 1;\n\tchars = 0;\n\tscreen = 0;\n\t\n      } else if(!strcmp(\"-c*\", argv&#91;c])) {\n\tstruct winsize w;\n\tioctl(0, TIOCGWINSZ, &amp;w);\n\tchars = w.ws_col;\n\twords = 0;\n\n      } else if(!strcmp(\"-l*\", argv&#91;c])) {\n\tstruct winsize w;\n\tioctl(0, TIOCGWINSZ, &amp;w);\n\tlines = w.ws_row-1;\n\n      } else if(!strcmp(\"--chars*\", argv&#91;c])) {\n\tstruct winsize w;\n\tioctl(0, TIOCGWINSZ, &amp;w);\n\tchars = w.ws_col;\n\twords = 0;\n\n      } else if(!strcmp(\"--lines*\", argv&#91;c])) {\n\tstruct winsize w;\n\tioctl(0, TIOCGWINSZ, &amp;w);\n\tlines = w.ws_row-1;\n\n      } else if(!strncmp(\"--screen\", argv&#91;c],8)) { \/\/ screenful\n\tstruct winsize w;\n\tioctl(0, TIOCGWINSZ, &amp;w);\n\tchars = w.ws_col;\n\tlines = w.ws_row-1;\n\twords = 0;\n\tscreen = 1;\n\t\n      } else if(!strncmp(\"--chars\", argv&#91;c], 7)) {  \/\/ characters per line\n\tif(isdigit(*(argv&#91;c] + 7))) {\n\t  chars = atoi(argv&#91;c] + 7);\n\t} else if(c + 1 &lt; argc) {\n\t  chars = atoi(argv&#91;c + 1]);\n\t  c++;\n\t}\n\tif(chars &lt; 1)\n\t  chars = 72;\n\twords = 0;\n\tscreen = 0;\n\t\n      } else if(!strncmp(\"-c\", argv&#91;c], 2)) {  \/\/ characters per line\n\tif(isdigit(*(argv&#91;c] + 2))) {\n\t  chars = atoi(argv&#91;c] + 2);\n\t} else if(c + 1 &lt; argc) {\n\t  chars = atoi(argv&#91;c + 1]);\n\t  c++;\n\t}\n\tif(chars &lt; 1)\n\t  chars = 72;\n\twords = 0;\n\tscreen = 0;\n\t\n      } else if(!strncmp(\"--lines\",argv&#91;c], 7)) { \/\/ lines\n\tif(isdigit(*(argv&#91;c] + 7))) {\n\t  lines = atoll(argv&#91;c] + 7);\n\t} else if(c + 1 &lt; argc) {\n\t  lines = atoll(argv&#91;c + 1]);\n\t  c++;\n\t}\n\tscreen = 0;\n\t\n      } else if(!strncmp(\"-l\",argv&#91;c], 2)) { \/\/ lines\n\tif(isdigit(*(argv&#91;c] + 2))) {\n\t  lines = atoll(argv&#91;c] + 2);\n\t} else if(c + 1 &lt; argc) {\n\t  lines = atoll(argv&#91;c + 1]);\n\t  c++;\n\t}\n\tscreen = 0;\n\t\n      } else if(!strcmp(\"--otp1\", argv&#91;c]) || \/\/ see: one time pad\n\t\t!strcmp(\"--otp5n\", argv&#91;c]) || \/\/ digits length 5\n\t\t!strcmp(\"--onetimepad1\", argv&#91;c])) {\t\t\n\tdigits = \"0123456789\";\n\tsspace = 1;\n\tcharspaces = 0;\n\tcharwidth = 1;\n\tsize = 5;\n\ttype = 0;\n\t\n      } else if(!strcmp(\"--otp2\", argv&#91;c]) || \/\/ uppercase alpha length 5\n\t\t!strcmp(\"--otp5a\", argv&#91;c]) ||\t\t\n\t\t!strcmp(\"--onetimepad2\", argv&#91;c]) ||\n\t\t!strcmp(\"--diana\", argv&#91;c]) ) { \/\/ see: diana cipher, diana table\n\tdigits = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\";\n\tsspace = 1;\n\tcharspaces = 0;\n\tcharwidth = 1;\n\tsize = 5;\n\ttype = 0;\n\t\n      } else if(!strcmp(\"--otp3\", argv&#91;c]) || \/\/ uppercase alpha length 4\n\t\t!strcmp(\"--otp4a\", argv&#91;c]) ||\t\t\n\t\t!strcmp(\"--onetimepad3\", argv&#91;c])) {\n\tdigits = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\";\n\tsspace = 1;\n\tcharspaces = 0;\n\tcharwidth = 1;\n\tsize = 4;\n\ttype = 0;\n\n      } else if(!strncmp(\"--base\", argv&#91;c], 6)) {\n\n\tif(isdigit(*(argv&#91;c] + 6))) {\n\t  newressu_base(atoi(argv&#91;c] + 6));\n\t} else if(c + 1 &lt; argc) {\n\t  newressu_base(atoi(argv&#91;c + 1]));\n\t  c++;\n\t}\n\tif(base &lt; 2 || base &gt; 64) {\n\t  fprintf(stderr,\"%s: base must be from 2 to 64 (%s)\\n\", procname, argv&#91;c]);\n\t  exit(2);\n\t}\n      } else if(!strncmp(\"--BASE\", argv&#91;c], 6)) {\n\n\tif(isdigit(*(argv&#91;c] + 6))) {\n\t  uppercase = 1;\n\t  newressu_base(atoi(argv&#91;c] + 6));\n\t} else if(c + 1 &lt; argc) {\n\t  uppercase = 1;\n\t  newressu_base(atoi(argv&#91;c + 1]));\n\t  c++;\n\t}\n\tif(base &lt; 2 || base &gt; 64) {\n\t  fprintf(stderr,\"%s: base must be from 2 to 64 (%s)\\n\", procname, argv&#91;c]);\n\t  exit(2);\n\t}\n\t\n      } else if(!strcmp(\"-b\", argv&#91;c]) ||\n\t\t!strcmp(\"--bin\", argv&#91;c]) ||\n\t\t!strcmp(\"--1bit\", argv&#91;c]) ||\n\t\t!strcmp(\"--1bits\", argv&#91;c])) {\n\n\tnewressu_base(2);\n\t\n      } else if(!strcmp(\"--2bits\", argv&#91;c])) {\n\n\tnewressu_base(4);\n\n      } else if(!strcmp(\"-o\", argv&#91;c]) ||\n\t\t!strcmp(\"--oct\", argv&#91;c]) ||\n\t\t!strcmp(\"--3bits\", argv&#91;c]) ) {\n\n\tnewressu_base(8);\n\n      } else if(!strcmp(\"-d\", argv&#91;c]) ||\n\t\t!strcmp(\"--dec\", argv&#91;c])) {\n\n\tnewressu_base(10);\n\n      } else if(!strcmp(\"-x\", argv&#91;c]) ||\n\t\t!strcmp(\"--hex\", argv&#91;c]) ||\n\t\t!strcmp(\"--4bits\", argv&#91;c])) {\n\n\tnewressu_base(16);\n\n      } else if(!strcmp(\"-X\", argv&#91;c]) ||\n\t\t!strcmp(\"--HEX\", argv&#91;c]) ||\n\t\t!strcmp(\"--4BITS\", argv&#91;c])) {\n\n\tnewressu_base(16);\n\tuppercase = 1;\n\n      } else if(!strcmp(\"-5\", argv&#91;c]) ||\n\t\t!strcmp(\"--5bits\", argv&#91;c])) {\n\n\tnewressu_base(32);\n\tbase = 32;\n\t\n      } else if(!strcmp(\"--5BITS\", argv&#91;c])) {\n\n\tnewressu_base(32);\n\tuppercase = 1;\n\t\n      } else if(!strcmp(\"-2\", argv&#91;c]) ||\n\t\t!strcmp(\"--6bits\", argv&#91;c])) {\n\n\tnewressu_base(64);\n\t\n      } else if(!strcmp(\"-1\", argv&#91;c])) {\n\tdigits =\n\t  \"0123456789\" \\\n\t  \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\" \\\n\t  \"abcdefghijklmnopqrstuvwxyz\";\n\n\tcharspaces = 0;\n\tcharwidth = 1;\n\tsize = 5;\n\ttype = 0;\n\n      } else if(!strcmp(\"--numeric\", argv&#91;c]) ||\n\t\t!strcmp(\"-11\", argv&#91;c])) {\n\tdigits =\n\t  \"0123456789\";\n\n\tcharspaces = 0;\n\tcharwidth = 1;\n\tsize = 5;\n\ttype = 10;\n\n      } else if(\/\/ !strcmp(\"--ALPHA\", argv&#91;c]) ||\n\t\t!strcmp(\"--LATIN\", argv&#91;c]) ||\n\t\t!strcmp(\"-12\", argv&#91;c]) ) {\n\tdigits =\n\t  \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\";\n\n\tcharspaces = 0;\n\tcharwidth = 1;\n\tsize = 5;\n\n      } else if( \/\/!strcmp(\"--alpha\", argv&#91;c]) ||\n\t\t!strcmp(\"--latin\", argv&#91;c]) ||\n\t\t!strcmp(\"-13\", argv&#91;c])) {\n\tdigits =\n\t  \"abcdefghijklmnopqrstuvwxyz\";\n\n\tcharspaces = 0;\n\tcharwidth = 1;\n\tsize = 5;\n\ttype = 0;\n\n      } else if(!strcmp(\"-13v1\", argv&#91;c])) {\n\tdigits =\n\t  \"abcdefghijklmnopqrstuvwxyz\" \\\n\t  \"aeiouy\"; \/\/ extra vowels\n\n\tcharspaces = 0;\n\tcharwidth = 1;\n\tsize = 5;\n\ttype = 0;\n\n      } else if(!strcmp(\"-13v2\", argv&#91;c])) {\n\tdigits =\n\t  \"abcdefghijklmnopqrstuvwxyz\"\n\t  \"aeiouy\" \/\/ extra vowels\n\t  \"aeiouy\"; \/\/ extra vowels\n\n\tcharspaces = 0;\n\tcharwidth = 1;\n\tsize = 5;\n\ttype = 0;\n\n      } else if(!strcmp(\"-13v3\", argv&#91;c])) {\n\tdigits =\n\t  \"abcdefghijklmnopqrstuvwxyz\"\n\t  \"aeiouy\" \/\/ extra vowels\n\t  \"aeiouy\" \/\/ extra vowels\n\t  \"aeiouy\"; \/\/ extra vowels\n\n\tcharspaces = 0;\n\tcharwidth = 1;\n\tsize = 5;\n\ttype = 0;\n\n      } else if(!strcmp(\"-13v4\", argv&#91;c])) {\n\tdigits =\n\t  \"abcdefghijklmnopqrstuvwxyz\"\n\t  \"aeiouy\" \/\/ extra vowels\n\t  \"aeiouy\" \/\/ extra vowels\n\t  \"aeiouy\" \/\/ extra vowels\n\t  \"aeiouy\"; \/\/ extra vowels\n\n\tcharspaces = 0;\n\tcharwidth = 1;\n\tsize = 5;\n\ttype = 0;\n \n      } else if(!strcmp(\"-3\", argv&#91;c])) { \/\/ 9.5.2021 JariK\n\tdigits =\n\t  \"!\\\"#$%&amp;'()*+,-.\/0123456789:;&lt;=&gt;?@\" \\\n\t  \"ABCDEFGHIJKLMNOPQRSTUVWXYZ&#91;\\\\]^_`\" \\\n\t  \"abcdefghijklmnopqrstuvwxyz{|}~\";\n\n\tcharspaces = 0;\n\tcharwidth = 1;\n\tsize = 8;\n\ttype = 0;\n\n      } else if(!strcmp(\"-9\", argv&#91;c])) {\n\tdigits =\n\t  \"0123456789\" \\\n\t  \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\" \\\n\t  \"abcdefghijklmnopqrstuvwxyz\";\n\tcharspaces = 0;\n\tcharwidth = 1;\n\tsize = 8;\n\ttype = 0;\n\n      } else if(!strcmp(\"--dnk\", argv&#91;c]) || \/\/ Danish alphabet\n\t\t!strcmp(\"--nor\", argv&#91;c])) { \/\/ Norwegian alphabet\n\tdigits =\n\t  \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\u00c6\u00d8\u00c5\" \\\n\t  \"abcdefghijklmnopqrstuvwxyz\u00e6\u00f8\u00e5\";\n\tcharspaces = 0;\n\tcharwidth = 1;\n\tsize = 8;\n\ttype = 0;\n\n      } else if(!strcmp(\"--fin\", argv&#91;c]) || \/\/ Finnish alphabet\n\t\t!strcmp(\"--swe\", argv&#91;c])) { \/\/ Swedish alphabet\n\tdigits =\n\t  \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\u00c5\u00c4\u00d6\" \\\n\t  \"abcdefghijklmnopqrstuvwxyz\u00e5\u00e4\u00f6\";\n\tcharspaces = 0;\n\tcharwidth = 1;\n\tsize = 8;\n\ttype = 0;\n\n      } else if(!strcmp(\"--rus\", argv&#91;c])) { \/\/ Russian alphabet\n\tdigits =\n\t  \"\u0410\u0411\u0412\u0413\u0414\u0415\u0401\u0416\u0417\u0418\u0419\u041a\u041b\u041c\u041d\u041e\u041f\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042a\u042b\u042c\u042d\u042e\u042f\" \\\n\t  \"\u0430\u0431\u0432\u0433\u0434\u0435\u0451\u0436\u0437\u0438\u0439\u043a\u043b\u043c\u043d\u043e\u043f\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044a\u044b\u044c\u044d\u044e\u044f\";\n\tcharspaces = 0;\n\tcharwidth = 1;\n\tsize = 8;\n\ttype = 0;\n\n      } else if(!strcmp(\"--est\", argv&#91;c])) { \/\/ Estonian alphabet\n\n\tdigits =\n\t  \"ABCDEFGHIJKLMNOPQRS\u0160Z\u017dTUVW\u00d5\u00c4\u00d6\u00dcXY\" \\\n\t  \"abcdefghijklmnopqrs\u0161z\u017etuvw\u00f5\u00e4\u00f6\u00fcxy\";\n\tcharspaces = 0;\n\tcharwidth = 1;\n\tsize = 8;\n\ttype = 0;\n  \n      } else if(!strcmp(\"--ltu\", argv&#91;c])) { \/\/ Lithuanian alphabet\n\tdigits =\n\t  \"A\u0104BC\u010cDE\u0118\u0116FGHI\u012eYJKLMNOPRS\u0160TU\u0172\u016aVZ\u017d\" \\\n\t  \"a\u0105bc\u010dde\u0119\u0117fghi\u012fyjklmnoprs\u0161tu\u0173\u016bvz\u017e\";\n\tcharspaces = 0;\n\tcharwidth = 1;\n\tsize = 8;\n\ttype = 0;\n\n      } else if(!strcmp(\"--lva\", argv&#91;c])) { \/\/ Latvian alphabet\n\tdigits =\n\t  \"A\u0100BC\u010cDE\u0112FG\u0122HI\u012aJK\u0136L\u013bMN\u0145OPRS\u0160TU\u016aVZ\u017d\" \\\n\t  \"a\u0101bc\u010dde\u0113fg\u0123hi\u012bjk\u0137l\u013cmn\u0146oprs\u0161tu\u016bvz\u017e\";\n\tcharspaces = 0;\n\tcharwidth = 1;\n\tsize = 8;\n\ttype = 0;\n\n      } else if(!strcmp(\"--fra\", argv&#91;c]) \/\/ French alphabet\n\t\t||!strcmp(\"--gbr\", argv&#91;c]) \/\/ Great Britain alphabet\n\t\t||!strcmp(\"--usa\", argv&#91;c]) \/\/ United States alphabet\n\t\t||!strcmp(\"--ita\", argv&#91;c]) \/\/ Italian alphabet\n\t\t||!strcmp(\"--eng\", argv&#91;c]) \/\/ English alphabet\n\t\t) {\n\tdigits =\n\t  \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\" \\\n\t  \"abcdefghijklmnopqrstuvwxyz\";\n\tcharspaces = 0;\n\tcharwidth = 1;\n\tsize = 8;\n\ttype = 0;\n\n      } else if(!strcmp(\"--deu\", argv&#91;c])) { \/\/ Deutsch alphabet\n\tdigits =\n\t  \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\u00c4\u00d6\u00dc\u1e9e\" \\\n\t  \"abcdefghijklmnopqrstuvwxyz\u00e4\u00f6\u00fc\u00df\";\n\tcharspaces = 0;\n\tcharwidth = 1;\n\tsize = 8;\n\ttype = 0;\n\n      } else if(!strcmp(\"--grc\", argv&#91;c])) { \/\/ Greek alphabet\n\tdigits =\n\t  \"\u0391\u0392\u0393\u0394\u0395\u0396\u0397\u0398\u0399\u039a\u039b\u039c\u039d\u039e\u039f\u03a0\u03a1\u03a3\u03a4\u03a5\u03a6\u03a7\u03a8\u03a9\" \\\n\t  \"\u03b1\u03b2\u03b3\u03b4\u03b5\u03b6\u03b7\u03b8\u03b9\u03ba\u03bb\u03bc\u03bd\u03be\u03bf\u03c0\u03c1\u03c3\u03c4\u03c5\u03c6\u03c7\u03c8\u03c9\";\n\tcharspaces = 0;\n\tcharwidth = 1;\n\tsize = 8;\n\ttype = 0;\n\t\n      } else if(!strcmp(\"--jp\", argv&#91;c])) { \/\/ all Japanese alphabets\n\n\tdigits = NULL;\n\tdigits_add_string(&amp;digits,\n\t    \"\u3041\u3042\u3043\u3044\u3045\u3046\u3047\u3048\u3049\u304a\u304b\u304c\u304d\u304e\u304f\"\n\t  \"\u3050\u3051\u3052\u3053\u3054\u3055\u3056\u3057\u3058\u3059\u305a\u305b\u305c\u305d\u305e\u305f\"\n\t  \"\u3060\u3061\u3062\u3063\u3064\u3065\u3066\u3067\u3068\u3069\u306a\u306b\u306c\u306d\u306e\u306f\"\n\t  \"\u3070\u3071\u3072\u3073\u3074\u3075\u3076\u3077\u3078\u3079\u307a\u307b\u307c\u307d\u307e\u307f\"\n\t  \"\u3080\u3081\u3082\u3083\u3084\u3085\u3086\u3087\u3088\u3089\u308a\u308b\u308c\u308d\u308e\u308f\"\n\t  \"\u3090\u3091\u3092\u3093\u3094\u3095\u3096\");\n\tdigits_add_string(&amp;digits,\n\t  \"\u30a0\u30a1\u30a2\u30a3\u30a4\u30a5\u30a6\u30a7\u30a8\u30a9\u30aa\u30ab\u30ac\u30ad\u30ae\u30af\"\n\t  \"\u30b0\u30b1\u30b2\u30b3\u30b4\u30b5\u30b6\u30b7\u30b8\u30b9\u30ba\u30bb\u30bc\u30bd\u30be\u30bf\"\n\t  \"\u30c0\u30c1\u30c2\u30c3\u30c4\u30c5\u30c6\u30c7\u30c8\u30c9\u30ca\u30cb\u30cc\u30cd\u30ce\u30cf\"\n\t  \"\u30d0\u30d1\u30d2\u30d3\u30d4\u30d5\u30d6\u30d7\u30d8\u30d9\u30da\u30db\u30dc\u30dd\u30de\u30df\"\n\t  \"\u30e0\u30e1\u30e2\u30e3\u30e4\u30e5\u30e6\u30e7\u30e8\u30e9\u30ea\u30eb\u30ec\u30ed\u30ee\u30ef\"\n\t  \"\u30f0\u30f1\u30f2\u30f3\u30f4\u30f5\u30f6\u30f7\u30f8\u30f9\u30fa\u30fb\u30fc\u30fd\u30fe\u30ff\");\n\tdigits_add_limits(&amp;digits, 0x4e00, 0x9fef);\n\n\tdigitsext = digits;\n\tcharspaces = 0;\n\tcharwidth = 2;\n\tsize = 8;\n\ttype = 0;\n\n      } else if(!strcmp(\"--jp1\", argv&#91;c]) \/\/ Japanese hiragana alphabet\n\t     || !strcmp(\"--hir\", argv&#91;c])) {\n\tdigits =\n\t    \"\u3041\u3042\u3043\u3044\u3045\u3046\u3047\u3048\u3049\u304a\u304b\u304c\u304d\u304e\u304f\"\n\t  \"\u3050\u3051\u3052\u3053\u3054\u3055\u3056\u3057\u3058\u3059\u305a\u305b\u305c\u305d\u305e\u305f\"\n\t  \"\u3060\u3061\u3062\u3063\u3064\u3065\u3066\u3067\u3068\u3069\u306a\u306b\u306c\u306d\u306e\u306f\"\n\t  \"\u3070\u3071\u3072\u3073\u3074\u3075\u3076\u3077\u3078\u3079\u307a\u307b\u307c\u307d\u307e\u307f\"\n\t  \"\u3080\u3081\u3082\u3083\u3084\u3085\u3086\u3087\u3088\u3089\u308a\u308b\u308c\u308d\u308e\u308f\"\n\t  \"\u3090\u3091\u3092\u3093\u3094\u3095\u3096\";\n\n\tcharspaces = 0;\n\tcharwidth = 2;\n\tsize = 8;\n\ttype = 0;\n\n      } else if(!strcmp(\"--jp2\", argv&#91;c]) \/\/ Japanese katakana alphabet\n\t     || !strcmp(\"--kat\", argv&#91;c])) {\n\tdigits =\n\t  \"\u30a0\u30a1\u30a2\u30a3\u30a4\u30a5\u30a6\u30a7\u30a8\u30a9\u30aa\u30ab\u30ac\u30ad\u30ae\u30af\"\n\t  \"\u30b0\u30b1\u30b2\u30b3\u30b4\u30b5\u30b6\u30b7\u30b8\u30b9\u30ba\u30bb\u30bc\u30bd\u30be\u30bf\"\n\t  \"\u30c0\u30c1\u30c2\u30c3\u30c4\u30c5\u30c6\u30c7\u30c8\u30c9\u30ca\u30cb\u30cc\u30cd\u30ce\u30cf\"\n\t  \"\u30d0\u30d1\u30d2\u30d3\u30d4\u30d5\u30d6\u30d7\u30d8\u30d9\u30da\u30db\u30dc\u30dd\u30de\u30df\"\n\t  \"\u30e0\u30e1\u30e2\u30e3\u30e4\u30e5\u30e6\u30e7\u30e8\u30e9\u30ea\u30eb\u30ec\u30ed\u30ee\u30ef\"\n\t  \"\u30f0\u30f1\u30f2\u30f3\u30f4\u30f5\u30f6\u30f7\u30f8\u30f9\u30fa\u30fb\u30fc\u30fd\u30fe\u30ff\";\n\n\tcharspaces = 0;\n\tcharwidth = 2;\n\tsize = 8;\n\ttype = 0;\n\n      } else if(!strcmp(\"--cn\", argv&#91;c]) \/\/ Chinese alphabet \n\t     || !strcmp(\"--jp3\", argv&#91;c]) \/\/ Japanese kanji alphabet\n\t     || !strcmp(\"--kan\", argv&#91;c])) { \/\/ Japanese kanji alphabet\n\n\tdigits = NULL;\n\tdigits_add_limits(&amp;digits, 0x4e00, 0x9fef);\n\n\tdigitsext = digits;\n\tcharspaces = 0;\n\tcharwidth = 2;\n\tsize = 8;\n\ttype = 0;\n\t\n      } else if(!strcmp(\"--kor\", argv&#91;c])) { \/\/ Korean alphabet \n\n\tdigits = NULL;\n\tdigits_add_limits(&amp;digits,0xac00,0xd7a3);   \/\/ Hangul Syllables (AC00\u2013D7A3)\n\t\/\/digits_add_limits(&amp;digits,0x1100,0x11ff); \/\/ Hangul Jamo (1100\u201311FF)\n\t\/\/digits_add_limits(&amp;digits,0x3130,0x318f); \/\/ Hangul Compatibility Jamo (3130\u2013318F)\n\t\/\/digits_add_limits(&amp;digits,0xa960,0xa97f); \/\/ Hangul Jamo Extended-A (A960\u2013A97F)\n\t\/\/digits_add_limits(&amp;digits,0xd7b0,0xd7ff); \/\/Hangul Jamo Extended-B (D7B0\u2013D7FF)\n\n\tdigitsext = digits;\n\tcharspaces = 0;\n\tcharwidth = 2;\n\tsize = 8;\n\ttype = 0;\n\n      } else if(!strcmp(\"--ind\", argv&#91;c]) \/\/ not ready\n\t     || !strcmp(\"--hin\", argv&#91;c])) { \/\/ Hindi alphabet\n\t\/\/unsigned char *signs = \"\u0900\u0901\u0902\u0903\u093a\u093b\u093c\u093d\u093e\u093f\u0940\u0941\u0942\u0943\u0944\u0945\u0946\u0947\u0948\u0949\u094a\u094b\u094c\u094d\u094e\u094f\u0955\u0956\u0957\u0962\u0963\u0951\u0952\u0953\u0954\";\n\tdigits =\n\t  \"\u0904\u0905\u0906\u0907\u0908\u0909\u090a\u090b\u090c\u090d\u090e\u090f\u0910\u0911\u0912\u0913\u0914\u0915\u0916\u0917\u0918\u0919\u091a\u091b\u091c\u091d\u091e\u091f\u0920\u0921\u0922\u0923\"\n\t  \"\u0924\u0925\u0926\u0927\u0928\u0929\u092a\u092b\u092c\u092d\u092e\u092f\u0930\u0931\u0932\u0933\u0934\u0935\u0936\u0937\u0938\u0939\u093d\u0950\u0958\u0959\u095a\u095b\u095c\"\n\t  \"\u095d\u095e\u095f\u0960\u0961\u0964\u0965\u0966\u0967\u0968\u0969\u096a\u096b\u096c\u096d\u096e\u096f\u0970\u0971\u0972\u0973\u0974\u0975\u0976\u0977\u0978\u0979\u097a\u097b\u097c\u097d\u097e\"\n\t  \"\u097f\"; \/\/ 97 characters\n\n\t\/\/digits_add_limits(&amp;digits,0x900,0x97f);   \/\/ Hindi (0900-097f)\n\n\tcharspaces = 0;\n\tcharwidth = 1;\n\tsize = 8;\n\ttype = 0;\n\n      } else if(!strcmp(\"--heb\", argv&#91;c])) { \/\/ hebrew\n\n\t\/\/ \u0590\u0591\u0592\u0593\u0594\u0595\u0596\u0597\u0598\u0599\u059a\u05be\u05bf\u05c0\u05c1\u05c2\u05c3\u05c4\u05c5\u05c6\u05c7\u05c8\u05c9\u05ca\u05cb\u05cc\u05cd\u05ce\u05cf\u05d0\u05d1\u05d2\u05d3\u05d4\u05d5\u05d6\u05d7\u05d8\u05d9\u05da\u05db\u05dc\u05dd\u05de\u05df\u05e0\u05e1\u05e2\u05e3\u05e4\u05e5\u05e6\u05e7\u05e8\u05e9\u05ea\u05eb\u05ec\u05ed\u05ee\u05ef\u05f0\u05f1\u05f2\u05f3\u05f4\u05f5\u05f6\u05f7\u05f8\u05f9\u05fa\u05fb\u05fc\u05fd\u05fe\u05ff\n\t\n\tdigits = \"\u05d0\u05d1\u05d2\u05d3\u05d4\u05d5\u05d6\u05d7\u05d8\u05d9\u05da\u05db\u05dc\u05dd\u05de\u05df\u05e0\u05e1\u05e2\u05e3\u05e4\u05e5\u05e6\u05e7\u05e8\u05e9\u05ea\";\n\n\tcharspaces = 0;\n\tcharwidth = 1;\n\tsize = 8;\n\ttype = 0;\n\n      } else if(!strcmp(\"--pho\", argv&#91;c])) { \/\/ phoenician alphabet, (fi \"foinikialaiset aakkoset\")\n\n\t\/\/phoenician: \ud802\udd00\ud802\udd01\ud802\udd02\ud802\udd03\ud802\udd04\ud802\udd05\ud802\udd06\ud802\udd07\ud802\udd08\ud802\udd09\ud802\udd0a\ud802\udd0b\ud802\udd0c\ud802\udd0d\ud802\udd0e\ud802\udd0f\ud802\udd10\ud802\udd11\ud802\udd12\ud802\udd13\ud802\udd14\ud802\udd15\ud802\udd16\ud802\udd17\ud802\udd18\ud802\udd19\ud802\udd1a\ud802\udd1b\ud802\udd1c\ud802\udd1d\ud802\udd1e\ud802\udd1f\n\tdigits = \"\ud802\udd00\ud802\udd01\ud802\udd02\ud802\udd03\ud802\udd04\ud802\udd05\ud802\udd06\ud802\udd07\ud802\udd08\ud802\udd09\ud802\udd0a\ud802\udd0b\ud802\udd0c\ud802\udd0d\ud802\udd0e\ud802\udd0f\ud802\udd10\ud802\udd11\ud802\udd12\ud802\udd13\ud802\udd14\ud802\udd15\ud802\udd16\ud802\udd17\ud802\udd18\ud802\udd19\ud802\udd1a\ud802\udd1b\";\n\n\tcharspaces = 0;\n\tcharwidth = 1;\n\tsize = 8;\n\ttype = 0;\n\n      } else if(!strcmp(\"--som\", argv&#91;c]) ||\n\t\t!strcmp(\"--SOM\", argv&#91;c]) ||\n\t\t!strcmp(\"--SO\", argv&#91;c])) { \/\/ Somalia alphabet\n\n#define aNEWSOM 2\n\t\n#ifdef NEWSOM\n\tdigits = NULL;\n\t\/\/ A, B, T, J, X, KH, D, R, S, SH, DH, C, G, F, Q, K, L, M, N, W, H, Y, E, and O\n\tdigits_add_string(&amp;digits, \"A;\");\n\tdigits_add_string(&amp;digits, \"B;\");\n\tdigits_add_string(&amp;digits, \"T;\");\n\tdigits_add_string(&amp;digits, \"J;\");\n\tdigits_add_string(&amp;digits, \"X;\");\n\tdigits_add_string(&amp;digits, \"KH;\");\n\tdigits_add_string(&amp;digits, \"D;\");\n\tdigits_add_string(&amp;digits, \"R;\");\n\tdigits_add_string(&amp;digits, \"S;\");\n\tdigits_add_string(&amp;digits, \"SH;\");\n\tdigits_add_string(&amp;digits, \"DH;\");\n\tdigits_add_string(&amp;digits, \"C;\");\n\tdigits_add_string(&amp;digits, \"G;\");\n\tdigits_add_string(&amp;digits, \"F;\");\n\tdigits_add_string(&amp;digits, \"Q;\");\n\tdigits_add_string(&amp;digits, \"K;\");\n\tdigits_add_string(&amp;digits, \"L;\");\n\tdigits_add_string(&amp;digits, \"M;\");\n\tdigits_add_string(&amp;digits, \"N;\");\n\tdigits_add_string(&amp;digits, \"W;\");\n\tdigits_add_string(&amp;digits, \"H;\");\n\tdigits_add_string(&amp;digits, \"Y;\");\n\tdigits_add_string(&amp;digits, \"E;\");\n\tdigits_add_string(&amp;digits, \"O;\");\n\n\tflagdigits = 2; \/\/ semicolon separated (flags)\n\t\n#else\n\t\/\/ missing KH SH DH\n\tdigits = \"ABTJXDRSCGFQKLMNWHYEO\";\n#endif\n\tcharspaces = 0;\n\tcharwidth = 1;\n\tsize = 8;\n\ttype = 0;\n\n      } else if(!strcmp(\"--braille\", argv&#91;c])) { \/\/ Braille alphabet\n\tdigits = \/\/ 0x2800 - 0x2900\n\t  \"\u2800\u2801\u2802\u2803\u2804\u2805\u2806\u2807\u2808\u2809\u280a\u280b\u280c\u280d\u280e\u280f\u2810\u2811\u2812\u2813\u2814\u2815\u2816\u2817\u2818\u2819\u281a\u281b\u281c\u281d\u281e\u281f\u2820\u2821\u2822\u2823\u2824\u2825\u2826\u2827\u2828\u2829\u282a\u282b\u282c\u282d\u282e\u282f\u2830\u2831\u2832\u2833\u2834\u2835\u2836\u2837\u2838\u2839\u283a\u283b\u283c\u283d\u283e\u283f\"\n\t  \"\u2840\u2841\u2842\u2843\u2844\u2845\u2846\u2847\u2848\u2849\u284a\u284b\u284c\u284d\u284e\u284f\u2850\u2851\u2852\u2853\u2854\u2855\u2856\u2857\u2858\u2859\u285a\u285b\u285c\u285d\u285e\u285f\u2860\u2861\u2862\u2863\u2864\u2865\u2866\u2867\u2868\u2869\u286a\u286b\u286c\u286d\u286e\u286f\u2870\u2871\u2872\u2873\u2874\u2875\u2876\u2877\u2878\u2879\u287a\u287b\u287c\u287d\u287e\u287f\"\n\t  \"\u2880\u2881\u2882\u2883\u2884\u2885\u2886\u2887\u2888\u2889\u288a\u288b\u288c\u288d\u288e\u288f\u2890\u2891\u2892\u2893\u2894\u2895\u2896\u2897\u2898\u2899\u289a\u289b\u289c\u289d\u289e\u289f\u28a0\u28a1\u28a2\u28a3\u28a4\u28a5\u28a6\u28a7\u28a8\u28a9\u28aa\u28ab\u28ac\u28ad\u28ae\u28af\u28b0\u28b1\u28b2\u28b3\u28b4\u28b5\u28b6\u28b7\u28b8\u28b9\u28ba\u28bb\u28bc\u28bd\u28be\u28bf\"\n\t  \"\u28c0\u28c1\u28c2\u28c3\u28c4\u28c5\u28c6\u28c7\u28c8\u28c9\u28ca\u28cb\u28cc\u28cd\u28ce\u28cf\u28d0\u28d1\u28d2\u28d3\u28d4\u28d5\u28d6\u28d7\u28d8\u28d9\u28da\u28db\u28dc\u28dd\u28de\u28df\u28e0\u28e1\u28e2\u28e3\u28e4\u28e5\u28e6\u28e7\u28e8\u28e9\u28ea\u28eb\u28ec\u28ed\u28ee\u28ef\u28f0\u28f1\u28f2\u28f3\u28f4\u28f5\u28f6\u28f7\u28f8\u28f9\u28fa\u28fb\u28fc\u28fd\u28fe\u28ff\";\n\tcharspaces = 0;\n\tcharwidth = 1;\n\tsize = 8;\n\ttype = 0;\n\n      } else if(!strcmp(\"--got\", argv&#91;c])) { \/\/ Gothic alphabet\n        digits=\n          \"\ud800\udf30\ud800\udf31\ud800\udf32\ud800\udf33\ud800\udf34\ud800\udf35\ud800\udf36\ud800\udf37\ud800\udf38\ud800\udf39\ud800\udf3a\ud800\udf3b\ud800\udf3c\ud800\udf3d\ud800\udf3e\ud800\udf3f\"\n          \"\ud800\udf40\ud800\udf41\ud800\udf42\ud800\udf43\ud800\udf44\ud800\udf45\ud800\udf46\ud800\udf47\ud800\udf48\ud800\udf49\ud800\udf4a\";\n\n      } else if(!strcmp(\"---champagne\", argv&#91;c])) { \/\/ Party\n        digits = \"\ud83c\udf7e\ud83e\udd42\ud83e\udd42\ud83e\udd42\ud83e\udd42\"; \/\/ \ud83e\udd64\ud83e\udd64\ud83e\udd64\ud83e\udd64\ud83e\udd64\ud83e\udd64\ud83e\udd64\ud83e\udd64\"; \/\/ \n\tcharspaces = 0;\n\tcharwidth = 2;\n        size = 8;\n\ttype = 0;\n\n      } else if(!strcmp(\"--cards\", argv&#91;c])) {\n\tdigits=\n\t  \"\ud83c\udca1\ud83c\udca2\ud83c\udca3\ud83c\udca4\ud83c\udca5\ud83c\udca6\ud83c\udca7\ud83c\udca8\ud83c\udca9\ud83c\udcaa\ud83c\udcab\ud83c\udcad\ud83c\udcae\"\n\t  \"\ud83c\udcb1\ud83c\udcb2\ud83c\udcb3\ud83c\udcb4\ud83c\udcb5\ud83c\udcb6\ud83c\udcb7\ud83c\udcb8\ud83c\udcb9\ud83c\udcba\ud83c\udcbb\ud83c\udcbd\ud83c\udcbe\"\n\t  \"\ud83c\udcc1\ud83c\udcc2\ud83c\udcc3\ud83c\udcc4\ud83c\udcc5\ud83c\udcc6\ud83c\udcc7\ud83c\udcc8\ud83c\udcc9\ud83c\udcca\ud83c\udccb\ud83c\udccd\ud83c\udcce\"\n\t  \"\ud83c\udcd1\ud83c\udcd2\ud83c\udcd3\ud83c\udcd4\ud83c\udcd5\ud83c\udcd6\ud83c\udcd7\ud83c\udcd8\ud83c\udcd9\ud83c\udcda\ud83c\udcdb\ud83c\udcdd\ud83c\udcde\";\n\n\tcharspaces = 1;\n\tcharwidth = 2;\n\tsize = 5;\n\ttype = 0;\n\n      } else if(!strcmp(\"--cardsuits\", argv&#91;c])) {\n\tdigits=\n\t  \"\u2660\u2661\u2662\u2663\u2664\u2665\u2666\u2667\";\n\n\tcharspaces = 1;\n\tcharwidth = 2;\n\tsize = 5;\n\ttype = 0;\n\n      } else if(!strcmp(\"--chessmen\", argv&#91;c])) {\n\tdigits=\n\t  \"\u2654\u2655\u2656\u2657\u2658\u2659\u265a\u265b\u265c\u265d\u265e\u265f\";\n\n\tcharspaces = 1;\n\tcharwidth = 2;\n\tsize = 5;\n\ttype = 0;\n\n      } else if(!strcmp(\"--dice\", argv&#91;c])) {\n\tdigits=\n\t  \"\u2680\u2681\u2682\u2683\u2684\u2685\";\n\n\tcharspaces = 1;\n\tcharwidth = 2;\n\tsize = 5;\n\ttype = 0;\n\n      } else if(!strcmp(\"--mahjong\", argv&#91;c])) {\n\tdigits= \/\/ removed \ud83c\udc04 &amp; \ud83c\udc2b\n\t  \"\ud83c\udc00\ud83c\udc01\ud83c\udc02\ud83c\udc03\ud83c\udc05\ud83c\udc06\" \\\n\t  \"\ud83c\udc07\ud83c\udc08\ud83c\udc09\ud83c\udc0a\ud83c\udc0b\ud83c\udc0c\ud83c\udc0d\ud83c\udc0e\ud83c\udc0f\" \\\n\t  \"\ud83c\udc10\ud83c\udc11\ud83c\udc12\ud83c\udc13\ud83c\udc14\ud83c\udc15\ud83c\udc16\ud83c\udc17\ud83c\udc18\" \\\n\t  \"\ud83c\udc19\ud83c\udc1a\ud83c\udc1b\ud83c\udc1c\ud83c\udc1d\ud83c\udc1e\ud83c\udc1f\ud83c\udc20\ud83c\udc21\" \\\n\t  \"\ud83c\udc22\ud83c\udc23\ud83c\udc24\ud83c\udc25\ud83c\udc26\ud83c\udc27\ud83c\udc28\ud83c\udc29\ud83c\udc2a\";\n\n\tcharspaces = 1;\n\tcharwidth = 2;\n\tsize = 5;\n\ttype = 0;\n\n      } else if(!strcmp(\"--dna\", argv&#91;c])) {\n\tdigits=\n\t  \"acgt\";\n\tcharspaces = 0;\n\tcharwidth = 1;\n\tsize = 4;\n\ttype = 0;\n\t\n      } else if(!strcmp(\"--DNA\", argv&#91;c])) {\n\tdigits=\n\t  \"ACGT\";\n\n\tcharspaces = 0;\n\tcharwidth = 1;\n\tsize = 4;\n\ttype = 0;\n\t\n      } else if(!strcmp(\"--pattern1\", argv&#91;c])) {\n\tdigits=\n\t  \"\u258c\u2599\u2584\";\n\n\tcharspaces = 0;\n\tcharwidth = 1;\n\tsize = 1;\n\ttype = 0;\n\n      } else if(!strcmp(\"--pattern2\", argv&#91;c])) {\n\tdigits=\n\t  \"\u25dc\u25dd\u25de\u25df\";\n\n\tcharspaces = 0;\n\tcharwidth = 1;\n\tsize = 1;\n\ttype = 0;\n\n      } else if(!strcmp(\"--pattern3\", argv&#91;c])) {\n\tdigits=\n\t  \"\\\\\/\";\n\n\tcharspaces = 0;\n\tcharwidth = 1;\n\tsize = 1;\n\ttype = 0;\n\n      } else if(!strcmp(\"--pattern4\", argv&#91;c])) {\n\tdigits=\n\t  \"\u25f8\u25f9\u25fa\u25ff\";\n\n\tcharspaces = 1;\n\tcharwidth = 2;\n\tsize = 1;\n\ttype = 0;\n\n      } else if(!strcmp(\"--pattern5\", argv&#91;c])) {\n\tdigits=\n\t  \"\u25a7\u25a8\";\n\n\tcharspaces = 1;\n\tcharwidth = 2;\n\tsize = 1;\n\ttype = 0;\n\n      } else if(!strcmp(\"--alnum\", argv&#91;c]) || \/\/ 9.5.2021 JariK\n\t        !strcmp(\"--alpha\", argv&#91;c]) ||\n\t        !strcmp(\"--digit\", argv&#91;c]) ||\n\t        !strcmp(\"--graph\", argv&#91;c]) ||\n\t        !strcmp(\"--lower\", argv&#91;c]) ||\n\t        !strcmp(\"--print\", argv&#91;c]) ||\n\t        !strcmp(\"--punct\", argv&#91;c]) ||\n\t        !strcmp(\"--upper\", argv&#91;c]) ||\n\t\t!strcmp(\"--xdigit\", argv&#91;c])) {\n\tunsigned char *p = digitstemp;\n\tfor(d = 0; d &lt; 256; d++) {\n\t  if((!strcmp(\"--alnum\", argv&#91;c]) &amp;&amp; isalnum(d)) ||\n\t     (!strcmp(\"--alpha\", argv&#91;c]) &amp;&amp; isalpha(d)) ||\n\t     (!strcmp(\"--digit\", argv&#91;c]) &amp;&amp; isdigit(d)) ||\n\t     (!strcmp(\"--graph\", argv&#91;c]) &amp;&amp; isgraph(d)) ||\n\t     (!strcmp(\"--lower\", argv&#91;c]) &amp;&amp; islower(d)) ||\n\t     (!strcmp(\"--print\", argv&#91;c]) &amp;&amp; isprint(d)) ||\n\t     (!strcmp(\"--punct\", argv&#91;c]) &amp;&amp; ispunct(d)) ||\n\t     (!strcmp(\"--upper\", argv&#91;c]) &amp;&amp; isupper(d)) ||\n\t     (!strcmp(\"--xdigit\", argv&#91;c]) &amp;&amp; isxdigit(d))) {\n\t    *p++ = d;\n\t  }\n\t}\n\t*p = '\\0';\n\tdigits = digitstemp;\n\tsize = 5;\n\ttype = 0;\n\n      } else if(!strncmp(\"-i\", argv&#91;c], 2)) {\n\tdigits = NULL;\n\tif(*(argv&#91;c] + 2) != '\\0') {\n\t  digits = argv&#91;c] + 2;\n\t} else if(c + 1 &lt; argc) {\n\t  digits = argv&#91;c + 1];\n\t  c++;\n\t}\n\tif(digits == NULL || utf8characters(digits) &lt; 2) {\n\t  fprintf(stderr,\"%s: not enough digits \\\"%s\\\"\\n\", procname, argv&#91;c]);\n\t}\n\tsize = 1;\n\n#ifdef USE_TIMER\n      } else if(!strcmp(\"--timer\", argv&#91;c])) {\n\ttimer = 1;\n\n#endif\n      } else if(!strcmp(\"--clockstream\", argv&#91;c])) { \/\/ clockstream\n\tinput = INPUT_CLOCK;\n\tinput_str = argv&#91;c] + 2;\n\t\n      } else if(!strcmp(\"--test\", argv&#91;c])) { \/\/ test generator\n\tinput = INPUT_TEST;\n\tinput_str = argv&#91;c] + 2;\n\t\n      } else if(!strcmp(\"--ressu\", argv&#91;c])) {\n\tinput = INPUT_RESSU;\n\tinput_str = argv&#91;c] + 2;\n\t\n      } else if(!strcmp(\"--pseudoressu\", argv&#91;c])) {\n\tinput = INPUT_PSEUDORESSU;\n\tinput_str = argv&#91;c] + 2;\n\n      } else if(!strcmp(\"--ressutwist\", argv&#91;c]) \/\/ JariK 2023\n\t\t|| !strcmp(\"--ressuwtwist\", argv&#91;c])\n\t        || !strcmp(\"--twist\", argv&#91;c]) ) {\n\tinput = INPUT_RESSUTWIST;\n\tinput_str = argv&#91;c] + 2;\n\n      } else if(!strcmp(\"--pseudorandom\", argv&#91;c])) {\n\tinput = INPUT_PSEUDORANDOM;\n\tinput_str = argv&#91;c] + 2;\n\n      } else if(!strcmp(\"--ressu2\", argv&#91;c])) {\n\tinput = INPUT_RESSU2;\n\tinput_str = argv&#91;c] + 2;\n\n      } else if(!strcmp(\"--pseudoressu2\", argv&#91;c])) {\n\tinput = INPUT_PSEUDORESSU2;\n\tinput_str = argv&#91;c] + 2;\n\n      } else if(!strcmp(\"--ressu2twist\", argv&#91;c]) \/\/ JariK 2023\n\t\t|| !strcmp(\"--ressu2wtwist\", argv&#91;c])) {\n\tinput = INPUT_RESSU2TWIST;\n\tinput_str = argv&#91;c] + 2;\n\n      } else if(!strcmp(\"--ressu3\", argv&#91;c])) {\n\tinput = INPUT_RESSU3;\n\tinput_str = argv&#91;c] + 2;\n\n      } else if(!strcmp(\"--fast\", argv&#91;c])\n\t\t|| !strcmp(\"--fastressu\", argv&#91;c]) ) {\n\tinput = INPUT_FASTRESSU;\n\tinput_str = argv&#91;c] + 2;\n\n      } else if(!strcmp(\"--single\", argv&#91;c])\n\t\t|| !strcmp(\"--singleressu\", argv&#91;c]) ) {\n\tinput = INPUT_SINGLERESSU;\n\tinput_str = argv&#91;c] + 2;\n\n      } else if(!strcmp(\"--stream\", argv&#91;c])) {\n\tinput = INPUT_STREAM;\n\tinput_str = argv&#91;c] + 2;\n\t\n      } else if(!strncmp(\"--name\", argv&#91;c], 6)) {\n\tif(*(argv&#91;c] + 6) != '\\0') {\n\t  input_str = argv&#91;c] + 6;\n\t} else if(c + 1 &lt; argc) {\n\t  input_str = argv&#91;c + 1];\n\t}\t\n\n      } else if(!strncmp(\"--key\", argv&#91;c], 5)) {\n\tkey = NULL;\n\tif(*(argv&#91;c] + 5) != '\\0') {\n\t  key = argv&#91;c] + 5;\n\t} else if(c + 1 &lt; argc) {\n\t  key = argv&#91;c + 1];\n\t  c++;\n\t}\n\tif(key == NULL || utf8characters(key) &lt; 1) {\n\t  fprintf(stderr,\"%s: not enough key characters \\\"%s\\\"\\n\", procname, argv&#91;c]);\n\t  exit(1);\n\t}\n\t\/\/size = 1;\n\n      } else if(!strncmp(\"--fixedclock\", argv&#91;c], 12)) {\n\tif(*(argv&#91;c] + 12) != '\\0' &amp;&amp; atoi(argv&#91;c] + 12) &gt; 1) {\n\t  fixedclockchainlength = atoi(argv&#91;c] + 12);\n\t  fixedclock = 1;\n\t} else if(c + 1 &lt; argc &amp;&amp; atoi(argv&#91;c + 1]) &gt; 1) {\n\t  fixedclockchainlength = atoi(argv&#91;c + 1]);\n\t  fixedclock = 1;\n\t  c++;\n\t} else {\n\t  fixedclock = !fixedclock;\n\t}\n\n\tif(fixedclockchainlength &lt; 5 ||\n\t   fixedclockchainlength &gt; 255)\n\t  fixedclockchainlength = FIXEDCLOCKCHAINLENGTH;\n\n      } else if(!strncmp(\"--depth\", argv&#91;c], 7)) {\n\tif(isdigit(*(argv&#91;c] + 7))) {\n\t  depth = atoi(argv&#91;c] + 7);\n\n\t} else if(c + 1 &lt; argc &amp;&amp; isdigit(*(argv&#91;c + 1]))) {\n\t  depth = atoi(argv&#91;c + 1]);\n\t  c++;\n\t  \n\t} else {\n\t  depth = MAX_DEPTH;\n\t}\n\n\tif(depth &lt; 0 || depth &gt; MAX_DEPTH) {\n\t  fprintf(stderr,\"%s: --depth must be between 0 and %d(MAX_DEPTH)\\n\",\n\t\t  procname, MAX_DEPTH);\n\t  exit(2);\n\t}\n\n\tfprintf(stderr,\"depth:%d\\n\", depth);\n\n      } else if(!strcmp(\"--copyreverse\", argv&#91;c])) {\n\tcopyreverse = !copyreverse;\n\t\n      } else if(!strcmp(\"--verbose\", argv&#91;c])) {\n\tverbose = !verbose;\n\t\n      } else if(!strcmp(\"--statline\", argv&#91;c])) {\n\tprint_statline = !print_statline;\n\n#ifdef FORT\n      } else if(!strcmp(\"--fort\", argv&#91;c])) {\n\tinput = INPUT_FORT;\n\tinput_str = argv&#91;c] + 2;\n\n      } else if(!strcmp(\"--fortxor\", argv&#91;c])) {\n\tinput = INPUT_FORTXOR;\n\tinput_str = argv&#91;c] + 2;\n\n      } else if(!strcmp(\"--fortverbose\", argv&#91;c])) {\n\tverbose = !verbose;\n\n      } else if(!strcmp(\"--fortuseweb\", argv&#91;c])) {\n\tfort_use_web = !fort_use_web;\n\t\n#endif\n#ifdef USE_RDRAND\n      } else if(!strcmp(\"--rdrand\", argv&#91;c])) {\n\tinput = INPUT_RDRAND;\n\tinput_str = argv&#91;c] + 2;\n\n#endif\n#ifdef USE_RDSEED\n      } else if(!strcmp(\"--rdseed\", argv&#91;c])) {\n\tinput = INPUT_RDSEED;\n\tinput_str = argv&#91;c] + 2;\n\n#endif\n      } else if(!strcmp(\"--urandom\", argv&#91;c])) {\n\tinput = INPUT_URANDOM;\n\tinput_str = argv&#91;c] + 2;\n\n#ifdef USE_RANDOM\n      } else if(!strcmp(\"--random\", argv&#91;c])) {\n\tinput = INPUT_RANDOM;\n\tinput_str = argv&#91;c] + 2;\n\n#endif\n      } else if(!strcmp(\"--dummy\", argv&#91;c])) {\n\tinput = INPUT_DUMMY;\n\tinput_str = argv&#91;c] + 2;\n\n      } else if(!strcmp(\"--flags\", argv&#91;c])) { \/\/ not ready\n\n\tcharspaces = 0;\n\tcharwidth = 2;\n\tsize = 8;\n\ttype = 0;\n\tflagdigits = 1; \/\/ semicolon separated (flags)\n\t\n\t\/\/ code after command line parameter loop\n\t\n      } else if(!strcmp(\"--all\", argv&#91;c])) { \/\/ not ready\n\tif(flagsinit) {\n\t  idsall = 1;\n\t  newressu_toggleflag(\"ALL\");\n\t  flagsinit = 0;\n\t}\n\tflagdigits = 1; \/\/ semicolon separated (flags)\n\t\n      } else {\n\tok = 0;\n      }\n\n      unsigned char buffer&#91;32];\n\n      int ok2 = 0;\n      \n      \/\/ command line parameters for flags\n      \n      if(!strncmp(argv&#91;c], \"--\", 2)) {\n\tif(flagsinit) {\n\t  idsall = 0;\n\t  newressu_toggleflag(buffer);\n\t  flagsinit = 0;\n\t}\n\tstrcpy(buffer, argv&#91;c] + 2); \/\/ as is, skip dashes\n\tif(newressu_toggleflag(buffer) == 1)\n\t  ok2 = 1;\n\telse {\n\t  strtolower(buffer); \/\/ all letters lowercase\n\t  if(newressu_toggleflag(buffer) == 1)\n\t    ok2 = 1;\n\t  else {\n\t    buffer&#91;0] = toupper(buffer&#91;0]); \/\/ first letter uppercase\n\t    if(newressu_toggleflag(buffer) == 1)\n\t      ok2 = 1;\n\t    else {\n\t      strtoupper(buffer); \/\/ all letters uppercase\n\t      if(newressu_toggleflag(buffer) == 1)\n\t\tok2 = 1;\n\t    }\n\t  }\n\t}\n      }\n      if(flagflags &amp;&amp; ok == 0 &amp;&amp; ok2 == 0) {\n\tfprintf(stderr,\"%s: invalid option %s\\n\", procname, argv&#91;c]);\n\texit(1);\n      }\n      if(!flagflags &amp;&amp; ok == 0 &amp;&amp; ok2 == 0) {\n\tfprintf(stderr,\"%s: invalid option %s\\n\", procname, argv&#91;c]);\n\texit(1);\n      }\n      if(!flagflags &amp;&amp; ok == 0 &amp;&amp; ok2 == 1) {\n\tfprintf(stderr,\"%s: invalid option '%s' without --flags\\n\", procname, argv&#91;c]);\n\texit(1);\n      }\n    } \/\/ if(!strncmp\n  } \/\/ for(c = 0\n\n  clearcvar();\n  \n  if(size == -1 &amp;&amp; base != -1) {\n    if(base == 2)\n      size = 8;\n    else if(base == 8)\n      size = 3;\n    else if(base == 10)\n      size = 5;\n    else if(base == 16)\n      size = 4;\n    else\n      size = 8;\n  }\n\n  if(size == -1 &amp;&amp; base == -1)\n    size = 5;\n  \n  if(base != -1) {\n    digitsext = digits;\n    charspaces = 0;\n    charwidth = 1;\n  }\n  \n  if(flagflags) {\n\n    digits = NULL;\n    flagdigits = 1; \/\/ semicolon separated (flags)\n\n    for(d = 0; d &lt; sizeof(idsflags) \/ sizeof(idsflags&#91;0]); d++) {\n      unsigned char buffer&#91;32];\n      if(flagids&#91;d] == 1) {\n\tstrcpy(buffer,idsflags&#91;d].id);\n\tstrcat(buffer,\";\");\n\tdigits_add_string(&amp;digits, buffer);\n      }\n    }\n\n    if(digits == NULL)\n      digits = \"\ud83c\uddeb\ud83c\uddee;\";\n    else\n      digitsext = digits;\n\n    \/\/digits = \"\ud83c\udde6\ud83c\udde7\ud83c\udde8\ud83c\udde9\ud83c\uddea\ud83c\uddeb\ud83c\uddec\ud83c\udded\ud83c\uddee\ud83c\uddef\ud83c\uddf0\ud83c\uddf1\ud83c\uddf2\ud83c\uddf3\ud83c\uddf4\ud83c\uddf5\ud83c\uddf6\ud83c\uddf7\ud83c\uddf8\ud83c\uddf9\ud83c\uddfa\ud83c\uddfb\ud83c\uddfc\ud83c\uddfd\ud83c\uddfe\ud83c\uddff\";\n    \/\/digits = \"\ud83c\uddeb\ud83c\uddee\ud83c\uddf8\ud83c\uddea\ud83c\uddf3\ud83c\uddf4\ud83c\udde9\ud83c\uddf0\ud83c\uddea\ud83c\uddea\ud83c\uddf1\ud83c\uddfb\ud83c\uddf1\ud83c\uddf9\";\n    \n  }\t\t       \n\n#define aDEBUG76\n#ifdef DEBUG76\n\n  if(flagidflags) {\n    int first = 1;\n    for(c = 0; c &lt; sizeof(idsflags) \/ sizeof(idsflags&#91;0]); c++) {\n      if(flagids&#91;c] == 1) {\n\tif(first) {\n\t  fprintf(stdout,\"flags: \");\n\t  first = 0;\n\t}\n\tfprintf(stdout,\" %s\",idsflags&#91;c].id);\n      }\n    }\n    if(!first)\n      fprintf(stdout,\"\\n\");\n  }\n\n#endif\n\n#ifdef DEBUG59\n\n  if(utf8) {\n\n    int xlines;\n    printcolumns(6, 0x10, 0, 64, &amp;xlines);\n    \n    int utf8output = 0;\n    for(c = 0; c &lt; 65535 * 4; c++) {\n      \/\/for(c = 0x2800; c &lt; 0x2900; c++) { \/\/ braille\n      unsigned char buffer10&#91;10];\n      if(c % 64 == 0) {\n\tif(c &gt; 0) {\n\t  fprintf(stdout,\"\\n\");\n\t  utf8output = 0;\n\t}\n\tfprintf(stdout,\"%5x \", c);\n\tutf8output = 1; \n      }\n      if(c &gt;= 0 &amp;&amp; c &lt; 32) {\n\tc += 31;\n\tfprintf(stdout, \"%-32s\", \"--- control characters ---\");\n\tutf8output = 1;\n      } else if(c &gt;= 128 &amp;&amp; c &lt; 256) {\n\tc += 31;\n\tfprintf(stdout, \"%-32s\", \"--- utf8 characters ---\");\n\tutf8output = 1;\n      } else {\n\tcodetoutf8(buffer10, c);\n\tfprintf(stdout,\"%s\", buffer10);\n\tutf8output = 1;\n      }\n    }\n    if(utf8output)\n      fprintf(stdout,\"\\n\");\n    fflush(stdout);\n\n    return(0);\n  }\n\n#endif\n  \n#define aDEBUG60 2\n\n#ifdef DEBUG60\n    int xlines;\n    printcolumns(0, 2, 0, 64, &amp;xlines);\n    printcolumns(0, 8, 0, 64, &amp;xlines);\n    for(c=1;;c*=10) {\n      fprintf(stdout,\"c:%d\\n\",c);\n      printcolumns(0, 10, 0, c, &amp;xlines);\n    }\n    printcolumns(0, 16, 0, 64, &amp;xlines);\n#endif\n\n  if(size == 0)\n    size = 1;\n  else if(size &gt; 1024)\n    size = 1024;\n  if(lines &lt; 1)\n    lines = 1;\n\n#ifdef USE_TIMER\n  timerstart = getseconds();\n#endif\n\n  if(flagdigits) \/\/ semicolon separated (flags)\n    digitscount = utf8strings(digits);\n  else \/\/ not\n    digitscount = utf8characters(digits);\n\n  \/\/digitscount = utf8characters(digits);\n  \n  if(flagdigits) \/\/ semicolon separated (flags)\n    characterlengths = utf8stringlengths(digits);\n  else\n    characterlengths = utf8lengths(digits);\n\n  \/\/characterlengths = utf8lengths(digits);\n\n#ifdef FORT\n  if(input == INPUT_FORT ||\n     input == INPUT_FORTXOR ) {\n    strcpy(fort_random_file, \"newressufort.rnd\");\n    strcpy(fort_secret_file, \"newressufortsecret.rnd\");\n    \/\/fort_verbose = 0;\n    fort_init();\n  }\n#endif\n\n  if(input == INPUT_STREAM) {\n    if(key == NULL)\n      key = stream_default_key;\n\n    stream_open(0, key);\n\n  } else if(key != NULL) {\n    fprintf(stderr,\"%s: cannot --key without --stream\\n\", procname);\n    exit(2);\n\n  }\n\n  if(fixedclock &amp;&amp; !copyreverse) {\n    fprintf(stderr,\"%s: cannot --fixedclock without --copyreverse\\n\", procname);\n    exit(2);\n\n  }\n  if(dieharder &amp;&amp; !sample) {\n    fprintf(stderr,\"%s: cannot --dieharder without --sample\\n\", procname);\n    exit(2);\n  }\n\n  if(purge_set &amp;&amp; (!dieharder || !sample)) {\n    fprintf(stderr,\"%s: cannot --purge or --save without --sample and --dieharder\\n\", procname);\n    exit(2);\n  }\n\n  if((filesize_set || blocksize_set || blocks_set) &amp;&amp; !sample) {\n    fprintf(stderr,\"%s: cannot --filesize, --blocks or --blocksize without --sample\\n\", procname);\n    exit(2);\n  }\n\n  if(input == INPUT_TEST) {\n    fprintf(stderr,\"%s: randomness from your generator (test_bytes)\\n\", procname);\n  }\n\n  if(sample) { \/\/ &amp; dieharder\n    dump_sample();\n    exit(status);\n  } \/\/ if(sample)\n\n#ifdef DEBUG19\n\n  if(flagint) {\n    unsigned char savepath&#91;128];\n\n    save_path(sizeof(savepath), savepath);\n\n    if(!strncmp(procname, \"\/bin\/newressu\", 13) &amp;&amp; exists_path(\"\/var\/ressu\"))\n      set_path(\"\/var\/ressu\");\n    else if(!strncmp(procname, \".\/newressu\", 10) &amp;&amp; exists_path(\".ressu\"))\n      set_path(\".ressu\");\n    else if(exists_path(\"\/var\/ressu\"))\n      set_path(\"\/var\/ressu\");\n    else if(exists_path(\"\/var\/newressu\"))\n      set_path(\"\/var\/newressu\");\n    else if(exists_path(\".ressu\"))\n      set_path(\".ressu\");\n    else\n      set_path(\".\/\");\n\n    unsigned char command&#91;160], date&#91;16], filename&#91;64];\n    command_readline(\"date +%Y%m%d%H\", sizeof(date), date);\n    \/\/command_readline(\"date +%Y%m%d%H%M\", sizeof(date), date);\n\n    sprintf(filename,\"newressutest14.rnd.%s\", date);\n    sprintf(command,\".\/newressutest14.sh &gt;%s\",filename);\n    \/\/fprintf(stdout,\"date:%s, filename:%s\\n\", date, filename);\n\n    if(!exists_path(filename)) {\n      int error;\n      if((error = system(command)) != 0) {\n\tfprintf(stderr,\"%s: system(): cannot execute command '%s'\\n\", procname, command);\n      }\n    }\n    \/\/fprintf(stderr,\" done.\\n\");\n    fflush(stderr);\n\n    set_path(savepath);\n  } \/\/ if(flagint\n\n#endif\n  \n  \/\/ print used digits\n  \n  if(flagprintdigits) {\n    int count = 0;\n    unsigned char *p;\n\n    fprintf(stdout,\"digits:\");\n    \n    p = digits;\n    while(*p != '\\0') {\n      if(*p &lt; 0x80 || \/\/ ascii char\n\t *p &gt; 0xbf) { \/\/ first utf8 byte\n\tcount++;\n#ifdef KOK\n\tif((charwidth == 2 &amp;&amp; count &gt;= 32) ||\n\t   (charwidth == 1 &amp;&amp; count &gt;= 72) )\n\t  break;\n#endif\n      }\n      fprintf(stdout,\"%c\", *p);\n      p++;\n    }\n    if(*p != '\\0')\n      fprintf(stdout,\"...\");\n    fprintf(stdout,\"\\n\");\n  }\n\n  \/\/ get linenumber length in digits\n\n  plinesdigits = line_number_length();\n\n  \/\/ get data length in digits\n\n  if(limit != 0) {\n    unsigned char wordbuf&#91;128];\n    out_word(sizeof(wordbuf), wordbuf, digits, limit-1);\n    size = utf8characters(wordbuf);\n  }\n\n  pchars = 0;\n  pwords = 0;\n\n  \/\/ in beginning of line, count printed line number\n      \n  if(!quiet &amp;&amp; slineno) {\n    sprintf(linenobuf,\"%0*llu\", plinesdigits, plines);\n    pchars += strlen(linenobuf);\n    pchars++;\n  }\n\n  \/\/ count words\n\n  cwords = 0;\n  \n  while((chars &gt; 0 &amp;&amp; pchars + size * charwidth + calc_spaces(pwords) &lt;= chars) ||\n\t(words &gt; 0 &amp;&amp; pwords &lt; words)) {\n    \n    pchars += calc_spaces();\n    pchars += (size * charwidth);\n    pwords++;\n    cwords++;\n  }\n\n  \/\/ there has to be atleast one data word\n  \n  if(pwords &lt; 1) {\n    pchars += calc_spaces();\n    pchars += (size * charwidth);\n    pwords = 1;\n  }\n\n  unsigned long wordvalues = 1, wordvaluesold;\n\n  for(c = 0; c &lt; size; c++) {\n    wordvaluesold = wordvalues;\n    wordvalues *= digitscount;\n    if(wordvalues \/ digitscount != wordvaluesold) {\n      wordvalues = 0;\n      break;\n    }\n  }\n\n  if(limit &gt; 0) {\n    if(sort == 1 &amp;&amp; limit - !zero &lt; words) {\n      fprintf(stderr, \"%s: limit is less than words (zero)\", procname);\n      fprintf(stderr, \", limit:%lu\", limit);\n      fprintf(stderr, \", words:%d\", words);\n      fprintf(stderr, \", zero:%d\", zero);\n      fprintf(stderr, \"\\n\");\n      \n      exit(2);\n    }\n  } else {\n    if(sort == 1 &amp;&amp; size &gt; 0 &amp;&amp; wordvalues &gt; 0 &amp;&amp; wordvalues &lt; pwords) {\n      fprintf(stderr, \"%s:\", procname);\n      fprintf(stderr, \" digits is less than calculated words\");\n      fprintf(stderr, \", digits:%d(%lu)\", digitscount, wordvalues);\n      fprintf(stderr, \", words:%d\\n\", pwords);\n\n      exit(2);\n    }\n  }\n\n  \/\/ \"small\" words as single newressu_gen_limit() call\n  \n  if(limit == 0 &amp;&amp; wordvalues &gt; 0)\n    limit = wordvalues;\n\n  if(columns) {\n    int xlines;\n    printcolumns(0, 10, 0, pchars, &amp;xlines);\n    lines -= xlines;\n    if(lines &lt; 1)\n      lines = 1;\n  }\n  \n#ifdef TEST\n  if(flagint &amp;&amp; base != -1) {\n    fprintf(stderr,\"Last word: \");\n    fprintfbase(stderr, limit - 1, base);\n    fprintf(stderr,\"\\n\");\n  }\n#endif\n\n  if(help) {\n    struct helpline {\n      char *command;\n      char *text;\n    } helplines&#91;] = {\n      { \"newressu --help\/-?\", \"this help page\" },\n      { \"newressu -d\/--dec\", \"print random decimal digits (default)\" },\n      { \"newressu -o\/--oct\", \"octal digits\" },\n      { \"newressu -x\/--hex\", \"hexadecimal digits\" },\n      { \"newressu -b\/--bin\", \"binary digits\" },\n      { \"newressu -d --space\", \"decimal digits, with spaces between \\\"words\\\"\" },\n      { \"newressu -b --space\", \"binary digits, with spaces between \\\"words\\\"\" },\n      { \"newressu -d -l30\", \"decimal digits, 30 lines\" },\n      { \"newressu -d -l30 --lineno\", \"decimal digits, 30 lines, no linenumbers\"  },\n      { \"newressu --base2\", \"base 2 digits =decimal (0-1)\" },\n      { \"newressu --base8\", \"base 8 digits =octal (0-7)\" },\n      { \"newressu --base10\", \"base 10 digits =decimal (0-9)\" },\n      { \"newressu --base16\", \"base 16 digits =hexadecimal (0-F)\" },\n      { \"newressu --base62\", \"base 62 digits (0-9, A-Z, a-z)\" },\n      { \"newressu --rand\", \"numbers in rand style listing\"  },\n      { \"newressu --space 2\", \"numbers in 2 number groups\"  },\n      { \"newressu --newline 5\", \"print numbers in 5 line groups\"  },\n      { \"newressu -l*\", \"fill all screen lines\"  },\n      { \"newressu -c*\", \"fill all screen columns\"  },\n      { \"newressu --screen\", \"fill screen columns and lines\"  },\n      { \"newressu -d -c128\", \"print decimal digits, 128 characters per line\"  },\n      { \"newressu -d --lim10\", \"print decimal numbers between 0-9\" },\n      { \"newressu -d --lim10 -x\",\"print hexadecimal numbers with decimal limit\" },\n      { \"newressu --isupper --limBAAAAA\",\"print five letter uppercase words\" },\n      { \"newressu -d -s10 --space\",\"print decimal numbers with spaces and wordsize 10\" },\n      { \"newressu -d --space --zero --lim7\",\"print rollings of dice (1-6)\" },\n      { \"newressu -b -s1 --space\",\"print throws of coin (0,1)\" },\n      { \"newressu -d --lim41 -w7 --zero --lotto\",\"print lotto numbers for finnish lotto 7x(1-40)\" },\n      { \"newressu -d -s5 --sort -w16\",\"print 16 sorted decimal numbers from 0 to 99999\" },\n      { \"newressu --alnum\", \"alphanumeric characters\" },\n      { \"newressu --alpha\", \"alphabetic characters\" },\n      { \"newressu --graph\", \"printables excluding space\" },\n      { \"newressu --lower\", \"lowercase characters\" },\n      { \"newressu --punct\", \"punctuation characters\" },\n      { \"newressu --upper\", \"uppercase characters\" },\n      { \"newressu -1\", \"material for passwords\" },\n      { \"newressu --dnk\/--nor\", \"danish\/norwegian alphabet\" },\n      { \"newressu --fin\/--swe\", \"finnish\/norwegian alphabet\" },\n      { \"newressu --rus\", \"russian alphabet\" },\n      { \"newressu --est\", \"estonian alphabet\" },\n      { \"newressu --ltu\", \"lithuanian alphabet\" },\n      { \"newressu --lva\", \"latvian alphabet\" },\n      { \"newressu --fra\/--gbr\/--usa\/--ita\", \"french\/gb\/us\/italian alphabet\" },\n      { \"newressu --deu\", \"deutsch alphabet\" }, \n      { \"newressu --grc\", \"greek alphabet\" }, \n      { \"newressu --jp\", \"japan alphabet (hiragana, katakana, kanji) \" }, \n      { \"newressu --jp1\/--hir\", \"japan alphabet (hiragana) \" }, \n      { \"newressu --jp2\/--kat\", \"japan alphabet (katakana) \" }, \n      { \"newressu --jp3\/--kan\", \"japan alphabet (kanji) \" }, \n      { \"newressu --cn\", \"chinese alphabet\" }, \n      { \"newressu --heb\", \"hebrew alphabet\" }, \n      { \"newressu --hin\/--ind\", \"hindi alphabet\" }, \n      { \"newressu --kor\", \"korean alphabet\" }, \n      { \"newressu --got\", \"gothic alphabet\" }, \n      { \"newressu --otp5n\/--otp1\", \"\\\"one time pad\\\" (otp) with 5 numeric characters\" }, \n      { \"newressu --otp5a\/--otp2\", \"otp with 5 uppercase letters\" }, \n      { \"newressu --otp4a\/--otp3\", \"otp with 4 uppercase letters\" }, \n      { \"newressu --cards\", \"playing cards\" }, \n      { \"newressu --cardsuits\", \"playing card suits\" }, \n      { \"newressu --chessmen\", \"chess men\" }, \n      { \"newressu --dice\", \"print dice\" },\n      { \"newressu --mahjong\", \"print mahjong pieces\" },\n      { \"newressu -i\u258c\u2599\u2584 \/ --pattern1\", \"print pattern1\" },\n      { \"newressu -i\u25dc\u25dd\u25de\u25df \/ --pattern2\", \"print pattern2\" },\n      { \"newressu -i\\\\\\\\\/ \/ --pattern3\", \"print pattern2\" },\n      { \"newressu -i\u25a7\u25a8 \/ --pattern5\", \"print pattern2\" },\n      { \"newressu --ressu\", \"use randomness from ressu (default)\" },\n      { \"newressu --ressu\", \"use randomness from ressu (default)\" },\n      { \"newressu --pseudoressu\", \"use randomness from pseudo random ressu\" },\n      { \"newressu --fast\/--fastressu\", \"use randomness from fast ressu\" },\n      { \"newressu --single\/--singleressu\", \"use randomness from single round of ressu\" },\n#ifdef FORT\n      { \"newressu --fort\", \"use randomness from fort\" },\n#endif\n#ifdef USE_RDRAND\n      { \"newressu --rdrand\", \"use randomness from intel rdrand\" },\n#endif\n#ifdef USE_RDSEED\n      { \"newressu --rdseed\", \"use randomness from intel rdseed\" },\n#endif\n      { \"newressu --urandom\", \"use randomness from \/dev\/urandom\" },\n#ifdef USE_RANDOM\n      { \"newressu --random\", \"use randomness from \/dev\/random\" },\n#endif\n    };\n    \n    for(c = 0; c &lt; sizeof(helplines) \/ sizeof(helplines&#91;0]); c++) {\n      fprintf(stdout, \"%-50s\", helplines&#91;c].text);\n      fprintf(stdout, \"%-25s\", helplines&#91;c].command);\n      fprintf(stdout, \"\\n\");\n    }\n\n#define DEBUG77 2\n\n#ifdef DEBUG77\n\n    unsigned char *areaflags = \"FINLAND, DENMARK, NORDIC, BALTIC, FRANCE, UK, SPAIN, EU, NORTHERNEUROPE, EASTERNEUROPE, SOUTHERNEUROPE, WESTERNEUROPE, EUROPE, EURASIA, NORTHASIA, EASTASIA, CENTRALASIA, SOUTHASIA, WESTASIA, ASIA, NORTHAFRICA, EASTAFRICA, CENTRALAFRICA, SOUTHAFRICA, WESTAFRICA, AFRICA, NORTHAMERICA, SOUTHAMERICA, USA, OCEANIA, AUSTRALASIA, MELANESIA, MICRONESIA, POLYNESIA, BRICS, ALL\", *a;\n    unsigned char name&#91;128];\n    \n    a = areaflags;\n    while(*a != '\\0' &amp;&amp; newressu_getname(sizeof(name), name, &amp;a)) {\n      fprintf(stdout,\"area:%s\",name);\n      int count = 0;\n      for(c = 0; c &lt; sizeof(idsflags) \/ sizeof(idsflags&#91;0]); c++) {\n\tif(!strcmp(name, \"ALL\")) {\n\t  count++;\n\t  unsigned char *q = idsflags&#91;c].flags;\n\t  unsigned char name2&#91;128], name3&#91;128];\n\t  newressu_getname(sizeof(name2), name2, &amp;q); \/\/ flag\n\t  newressu_getname(sizeof(name2), name2, &amp;q); \/\/ 2 char isocode\n\t  newressu_getname(sizeof(name3), name3, &amp;q); \/\/ 3 char isocode\n\t  newressu_getname(sizeof(name3), name3, &amp;q); \/\/ name\n\t  fprintf(stdout,\", %s(%s)\",name3, name2); \/\/ name and isocode2 needed\n\t} else {\t\n\t  \n\t  if(newressu_strstr(idsflags&#91;c].flags, name) != NULL) {\n\t    count++;\n\t    unsigned char *q = idsflags&#91;c].flags;\n\t    unsigned char name2&#91;128], name3&#91;128];\n\t    newressu_getname(sizeof(name2), name2, &amp;q); \/\/ flag\n\t    newressu_getname(sizeof(name2), name2, &amp;q); \/\/ 2 char isocode\n\t    newressu_getname(sizeof(name3), name3, &amp;q); \/\/ 3 char isocode\n\t    newressu_getname(sizeof(name3), name3, &amp;q); \/\/ name\n\t    fprintf(stdout,\", %s(%s)\", name3, name2); \/\/ name and isocode2 needed\n\t  }\n\t}\n      }\n      fprintf(stdout,\", count:%d\",count);\n      fprintf(stdout,\"\\n\");\n    }\n#endif\n\n    for(c = 0; c &lt; chars; c++)\n      fprintf(stdout, \"*\");\n    fprintf(stdout, \"\\n\");\n    \n    if(lines &gt; 1)\n      lines = 1; \/\/ print one line below help as a sample\n  }\n\n  if(lines == 0)\n    exit(status);\n\n#define aDEBUG78 2\n    \n#ifdef DEBUG78\n\n    for(c = 0; c &lt; sizeof(flagchars) \/ sizeof(flagchars&#91;0]); c++) {\n      int first = 1;\n      for(d = 0; d &lt; sizeof(flagchars) \/ sizeof(flagchars&#91;0]); d++) {\n\tchar buffer&#91;32];\n\tbuffer&#91;0] = '\\0';\n\tif(!first)\n\t  strcat(buffer,\" \");\n\tstrcat(buffer, flagchars&#91;c]);\n\tstrcat(buffer, flagchars&#91;d]);\n\tfprintf(stdout,\"%s\",buffer);\n\tfirst = 0;\n      }\n      fprintf(stdout,\"\\n\");\n    }\n#endif\n  \n  int linecnt = 0;\n  unsigned char *line = NULL;\n  unsigned char wordbuf&#91;1025];\n  \n  for(;;) {\n\n    if(!sort) { \/\/ no sort, no lotto\n\n      for(cwords = 0; cwords &lt; pwords; cwords++) {\n\treadword(wordbuf);\n\n\tif(!quiet) {\n\n\t  \/\/ in beginning of line, print line number\n\n\t  print_line_number();\n\t\n\t  \/\/ want to print spaces between \"words\"?\n\n\t  print_spaces(' ');\n\t\n\t  \/\/ print word\n\n\t  print_word(wordbuf);\n\n\t  newressu_output = 1;\n\t}\n\n      } \/\/ for(cwords = 0; cwords &lt; pwords; cwords++) {\n    } else { \/\/ if(!sort)\n\n      line_clear(&amp;linecnt, &amp;line);\n\n      \/\/ fetch and save words on this row\n\n      for(cwords = 0; cwords &lt; pwords; \/*!*\/) {\n\treadword(wordbuf);\n\n\tif(line_add_string_sort(&amp;linecnt, &amp;line, wordbuf)) {\n\t  cwords++; \/\/ added if unique\n\t}\n      } \/\/ while(cwords &lt; pwords) {\n\n      \/\/ print words on this row\n\n      for(cwords = 0; cwords &lt; pwords; cwords++) {\n\n\tline_get_string(sizeof(wordbuf), wordbuf, cwords, line);\n\n\tif(!quiet) {\n\n\t  \/\/ in beginning of line, print line number\n\n\t  print_line_number();\n\t\n\t  \/\/ want to print spaces between \"words\"?\n\t\n\t  print_spaces(' ');\n\n\t  \/\/ print word\n\t\n\t  print_word(wordbuf);\n\n\t  newressu_output = 1;\n\t}\n      } \/\/ end of for(cwords = 0; cwords &lt; pwords; cwords++\n    } \/\/ if(!sort)\n\n    if(!quiet) {\n      fprintf(stdout, \"\\n\");\n    }\n\n    plines++;\n    ptotallines++;\n\n    \/\/ print empty line\n\n    if(!quiet &amp;&amp;\n       snewline &gt; 0 &amp;&amp;\n       plines%snewline == 0) {\n      \/\/ if screenfull printed, use\n      \/\/ total lines (contains also\n      \/\/ empty lines), if not\n      \/\/ screenfull use printed\n      \/\/ lines (without empty lines)\n      if((screen &amp;&amp; ptotallines &lt; lines) ||\n\t (!screen &amp;&amp; plines &lt; lines)) {\n\tfprintf(stdout, \"\\n\");\n\tptotallines++;\n      }\n    }\n\n    \/\/fflush(stdout);\n    \n    newressu_output = 0;\n    \n    \/\/ all needed lines printed?\n\n    if(screen &amp;&amp; snewline &gt; 0 &amp;&amp;\n       ptotallines &gt;= lines)\n      break;\n    if(plines &gt;= lines)\n      break;\n\n#define STATDIV (1024 * 1024 * 100)\n    \n    if(print_statline) {\n      if(isatty(STDOUT_FILENO)) { \/\/ 0=stdin, 1=stdout, 2=stderr\n\tprint_statline = 0;\n      } else {\n\tif(lines % 1000 == 0) {\n\t  unsigned char buf10&#91;10];\n\t  unsigned long long bytes;\n\t  int pros = (int)(((double)plines \/ lines) * 100);\n\n\t  bytes = (((unsigned long long)size * pwords * plines) \/ STATDIV) * STATDIV;\n\t  stat_line_get_readable(buf10, bytes);\n\t  \n#ifdef DEBUG97\n\t  fprintf(stderr, \"%lld\", (unsigned long long)size * pwords * plines);\n\t  fprintf(stderr, \", %lld\", bytes);\n\t  fprintf(stderr, \", %s\", buf10);\n\t  fprintf(stderr, \"\\n\");\n#endif\n\t  stat_line_begin();\n\t  stat_line_printf(\"%s characters written:\", input_str);\n\t  stat_line_readable((unsigned long) size * pwords * plines);\n\t  stat_line_printf(\", %d%%\", pros);\n\t  \/\/stat_line_printf(\", lines:%lld\",lines);\n\t  \/\/stat_line_printf(\", plines:%lld\",plines);\n\t  stat_line_end();\n\t}\n\tstat_line_cursor();\n      }\n    } \/\/ if(print_statline)\n  } \/\/ for(;;)\n\n  if(print_statline) { \/\/ 0=stdin, 1=stdout, 2=stderr\n    stat_line_begin();\n    stat_line_end();\n    stat_line_cursor_remove();\n  }\n\n#ifdef DEBUG2H\n\n  int itemlen = 0;\n  for(int c = 0; c &lt; ressuct_bytes; c++) {\n    unsigned char buffer&#91;16];\n    sprintf(buffer, \"%lu\", count&#91;c]);\n    if(itemlen &lt; strlen(buffer))\n      itemlen = strlen(buffer);\n  }\n  for(int c = 0; c &lt; ressuct_bytes; c++) {\n    if(c % 16 == 0) {\n      if(c &gt; 0)\n\tfprintf(stdout,\"\\n\");\n      fprintf(stdout,\"%05u \", c);\n    }\n    fprintf(stdout,\"%*lu\", itemlen + 1, count&#91;c]);\n  }\n  fprintf(stdout,\"\\n\");\n\n#endif\n  \n#ifdef USE_TIMER\n\n  if(timer) {\n    double timertook = getseconds() - timerstart;\n    fprintf(stderr, \"%s run time %f seconds\", input_str, timertook);\n    fprintf(stderr, \", %lld lines\", plines);\n    fprintf(stderr, \", %f useconds\/line\", timertook * 1000000 \/ plines);\n    fprintf(stderr, \", %d characters\/line\", pwords * size);\n    fprintf(stderr, \", %f useconds\/character\",\n\t    (timertook * 1000000 \/ plines) \/ (pwords * size) );\n    fprintf(stderr, \"\\n\");\n  }\n\n#endif\n\n  fflush(stdout);\n\n  if(digitsext != NULL)\n    free(digitsext);\n  \n#ifdef FORT\n\n  if(input == INPUT_FORT ||\n    input == INPUT_FORTXOR) {\n    fort_save();\n  }\n\n#endif\n  newressu_clear();\n  \n  exit(status);\n}\n\n#endif \/\/ MAIN<\/code><\/pre>\n\n\n\n<p>Lis\u00e4sin loppuun viel\u00e4 newressun viel\u00e4 julkistamattoman version (en saanut lippuja toimimaan oikein.. Katso taaksep\u00e4in:<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Kaikki oikeudet pid\u00e4tet\u00e4\u00e4n \u00a9. Jos haluat tukea projektia (osallistua palvelinkustannuksiin, tarjota koodausvissyn tai tulevaisuudessa maksaa palkkaa), laita muutaman euron lahjoituksesi Danske Bank tilille FI15 8312 0710 7275 83 (SWIFT:DABAFIHH), maksun saaja Jari Kuivaniemi. Kirjoita viestikentt\u00e4\u00e4n nimesi ja asuinpaikkakuntasi. Kiitokset lahjoituksestasi. T\u00e4ss\u00e4 postissa uutena kuvat, seuraava on tietenkin kuninkaanportti, Suomenlinna. Kuvat ovat aina omiani. Muutkin kuvat&hellip; <a class=\"more-link\" href=\"https:\/\/moijari.com\/?p=3492\">Continue reading <span class=\"screen-reader-text\">Back to terttu 2: Thoughts, Finally server stays up 2: even better&#8230; Intermission there will be ressu3&#8230; last version of newressu.c published, winter sudokues published<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[1],"tags":[],"_links":{"self":[{"href":"https:\/\/moijari.com\/index.php?rest_route=\/wp\/v2\/posts\/3492"}],"collection":[{"href":"https:\/\/moijari.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/moijari.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/moijari.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/moijari.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=3492"}],"version-history":[{"count":267,"href":"https:\/\/moijari.com\/index.php?rest_route=\/wp\/v2\/posts\/3492\/revisions"}],"predecessor-version":[{"id":4001,"href":"https:\/\/moijari.com\/index.php?rest_route=\/wp\/v2\/posts\/3492\/revisions\/4001"}],"wp:attachment":[{"href":"https:\/\/moijari.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=3492"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/moijari.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=3492"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/moijari.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=3492"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}