1491 lines
30 KiB
Plaintext
1491 lines
30 KiB
Plaintext
note
|
|
description: "A Mersenne twister RNG"
|
|
author: "Colin LeMahieu"
|
|
date: "$Date$"
|
|
revision: "$Revision$"
|
|
quote: "A censor is a man who knows more than he thinks you ought to. - Granville Hicks (1901-1982)"
|
|
|
|
class
|
|
MERSENNE_TWISTER_RNG
|
|
|
|
inherit
|
|
RANDOM_NUMBER_GENERATOR
|
|
INTEGER_X_ARITHMETIC
|
|
rename
|
|
cmp as cmp_special,
|
|
bit_xor_lshift as bit_xor_lshift_special,
|
|
bit_xor as bit_xor_special
|
|
end
|
|
INTEGER_X_DIVISION
|
|
rename
|
|
cmp as cmp_special,
|
|
mod as mod_integer_x,
|
|
bit_xor_lshift as bit_xor_lshift_special,
|
|
bit_xor as bit_xor_special
|
|
end
|
|
INTEGER_X_COMPARISON
|
|
INTEGER_X_LOGIC
|
|
rename
|
|
add as add_special,
|
|
sub as sub_special,
|
|
mul as mul_special
|
|
end
|
|
|
|
create
|
|
make
|
|
|
|
feature
|
|
make
|
|
do
|
|
create mt.make_filled (0, n)
|
|
randinit_mt_noseed
|
|
end
|
|
|
|
feature
|
|
|
|
randinit_mt_noseed
|
|
local
|
|
i: INTEGER
|
|
do
|
|
from
|
|
i := 0
|
|
until
|
|
i >= n
|
|
loop
|
|
mt [i] := default_state (i)
|
|
i := i + 1
|
|
end
|
|
mti := warm_up \\ n
|
|
end
|
|
|
|
mangle_seed (r: READABLE_INTEGER_X; b_orig: READABLE_INTEGER_X)
|
|
local
|
|
t: INTEGER_X
|
|
b: INTEGER_X
|
|
e: NATURAL_32
|
|
bit_l: NATURAL_32
|
|
sign: INTEGER
|
|
reduce: BOOLEAN
|
|
do
|
|
e := 0x40118124
|
|
bit_l := 0x20000000
|
|
create t
|
|
create b.make_set (b_orig)
|
|
r.copy (b)
|
|
from
|
|
until
|
|
bit_l = 0
|
|
loop
|
|
from
|
|
reduce := True
|
|
until
|
|
not reduce
|
|
loop
|
|
from
|
|
sign := 1
|
|
until
|
|
sign = 0
|
|
loop
|
|
tdiv_q_2exp (t, r, 0x19937)
|
|
sign := t.sign
|
|
if sign /= 0 then
|
|
tdiv_r_2exp (r, r, 0x19937)
|
|
addmul_ui (r, r, 0x20023)
|
|
end
|
|
end
|
|
if e.bit_and (bit_l) /= 0 then
|
|
e := e.bit_and (bit_l.bit_not)
|
|
mul (r, r, b)
|
|
else
|
|
reduce := False
|
|
end
|
|
end
|
|
bit_l := bit_l |>> 1
|
|
end
|
|
end
|
|
|
|
randseed (seed: READABLE_INTEGER_X)
|
|
local
|
|
i: INTEGER
|
|
count: INTEGER
|
|
mod: INTEGER_X
|
|
seed1: INTEGER_X
|
|
do
|
|
create mod.make_from_natural (0)
|
|
create seed1
|
|
bit_set (mod, 19937)
|
|
sub_ui (mod, mod, 20027)
|
|
mod_integer_x (seed1, seed, mod)
|
|
add_ui (seed1, seed1, 2)
|
|
mangle_seed (seed1, seed1)
|
|
if bit_test (seed1, 19936) then
|
|
mt [0] := 0x80000000
|
|
else
|
|
mt [0] := 0x0
|
|
end
|
|
bit_clear (seed1, 19936)
|
|
mt.copy_data (seed1.item, 0, 1, seed1.count)
|
|
count := count + 1
|
|
from
|
|
until
|
|
count >= n
|
|
loop
|
|
mt [count] := 0
|
|
count := count + 1
|
|
end
|
|
if warm_up /= 0 then
|
|
from
|
|
i := 0
|
|
until
|
|
i >= warm_up // n
|
|
loop
|
|
recalc_buffer
|
|
i := i + 1
|
|
end
|
|
end
|
|
mti := warm_up \\ n
|
|
end
|
|
|
|
recalc_buffer
|
|
local
|
|
y: NATURAL_32
|
|
kk: INTEGER
|
|
do
|
|
from
|
|
kk := 0
|
|
until
|
|
kk >= n - m
|
|
loop
|
|
y := mt [kk].bit_and (0x80000000).bit_or (mt [kk + 1].bit_and (0x7fffffff))
|
|
if y.bit_test (0) then
|
|
mt [kk] := mt [kk + m].bit_xor (y |>> 1).bit_xor (matrix_a)
|
|
else
|
|
mt [kk] := mt [kk + m].bit_xor (y |>> 1)
|
|
end
|
|
kk := kk + 1
|
|
end
|
|
from
|
|
until
|
|
kk >= n - 1
|
|
loop
|
|
y := mt [kk].bit_and (0x80000000).bit_or (mt [kk + 1].bit_and (0x7fffffff))
|
|
if y.bit_test (0) then
|
|
mt [kk] := mt [kk - (n - m)].bit_xor (y |>> 1).bit_xor (matrix_a)
|
|
else
|
|
mt [kk] := mt [kk - (n - m)].bit_xor (y |>> 1)
|
|
end
|
|
kk := kk + 1
|
|
end
|
|
y := mt [n - 1].bit_and (0x80000000).bit_or (mt [0].bit_and (0x7fffffff))
|
|
if y.bit_test (0) then
|
|
mt [n - 1] := mt [m - 1].bit_xor (y |>> 1).bit_xor (matrix_a)
|
|
else
|
|
mt [n - 1] := mt [m - 1].bit_xor (y |>> 1)
|
|
end
|
|
end
|
|
|
|
next_random (y: CELL [NATURAL_32])
|
|
do
|
|
if mti >= n then
|
|
recalc_buffer
|
|
mti := 0
|
|
end
|
|
y.put (mt [mti])
|
|
mti := mti + 1
|
|
y.put (y.item.bit_xor (y.item |>> 11))
|
|
y.put (y.item.bit_xor ((y.item |<< 7).bit_and (mask_1)))
|
|
y.put (y.item.bit_xor ((y.item |<< 15).bit_and (mask_2)))
|
|
y.put (y.item.bit_xor (y.item |>> 18))
|
|
end
|
|
|
|
randget (target: SPECIAL [NATURAL_32]; target_offset: INTEGER_32; count: INTEGER_32)
|
|
local
|
|
y: CELL [NATURAL_32]
|
|
rbits: INTEGER
|
|
i: INTEGER
|
|
nlimbs: INTEGER
|
|
do
|
|
create y.put (0)
|
|
nlimbs := count // 32
|
|
rbits := count \\ 32
|
|
from
|
|
i := 0
|
|
until
|
|
i >= nlimbs
|
|
loop
|
|
next_random (y)
|
|
target [target_offset + i] := y.item
|
|
i := i + 1
|
|
end
|
|
if rbits /= 0 then
|
|
next_random (y)
|
|
target [target_offset + nlimbs] := y.item.bit_and (((0xffffffff).to_natural_32 |<< rbits).bit_not)
|
|
end
|
|
end
|
|
|
|
mti: INTEGER
|
|
mt: SPECIAL [NATURAL_32]
|
|
n: INTEGER = 624
|
|
m: INTEGER = 397
|
|
matrix_a: NATURAL_32 = 0x9908b0df
|
|
warm_up: INTEGER = 2000
|
|
default_seed: INTEGER = 5489
|
|
mask_1: NATURAL_32 = 0x9d2c5680
|
|
mask_2: NATURAL_32 = 0xefc60000
|
|
|
|
default_state (i: INTEGER): NATURAL_32
|
|
do
|
|
inspect
|
|
i
|
|
when 0 then
|
|
Result := 0xD247B233
|
|
when 1 then
|
|
Result := 0x9E5AA8F1
|
|
when 2 then
|
|
Result := 0x0FFA981B
|
|
when 3 then
|
|
Result := 0x9DCB0980
|
|
when 4 then
|
|
Result := 0x74200F2B
|
|
when 5 then
|
|
Result := 0xA576D044
|
|
when 6 then
|
|
Result := 0xE9F05ADF
|
|
when 7 then
|
|
Result := 0x1538BFF5
|
|
when 8 then
|
|
Result := 0x59818BBF
|
|
when 9 then
|
|
Result := 0xCF9E58D8
|
|
when 10 then
|
|
Result := 0x09FCE032
|
|
when 11 then
|
|
Result := 0x6A1C663F
|
|
when 12 then
|
|
Result := 0x5116E78A
|
|
when 13 then
|
|
Result := 0x69B3E0FA
|
|
when 14 then
|
|
Result := 0x6D92D665
|
|
when 15 then
|
|
Result := 0xD0A8BE98
|
|
when 16 then
|
|
Result := 0xF669B734
|
|
when 17 then
|
|
Result := 0x41AC1B68
|
|
when 18 then
|
|
Result := 0x630423F1
|
|
when 19 then
|
|
Result := 0x4B8D6B8A
|
|
when 20 then
|
|
Result := 0xC2C46DD7
|
|
when 21 then
|
|
Result := 0x5680747D
|
|
when 22 then
|
|
Result := 0x43703E8F
|
|
when 23 then
|
|
Result := 0x3B6103D2
|
|
when 24 then
|
|
Result := 0x49E5EB3F
|
|
when 25 then
|
|
Result := 0xCBDAB4C1
|
|
when 26 then
|
|
Result := 0x9C988E23
|
|
when 27 then
|
|
Result := 0x747BEE0B
|
|
when 28 then
|
|
Result := 0x9111E329
|
|
when 29 then
|
|
Result := 0x9F031B5A
|
|
when 30 then
|
|
Result := 0xECCA71B9
|
|
when 31 then
|
|
Result := 0x2AFE4EF8
|
|
when 32 then
|
|
Result := 0x8421C7ED
|
|
when 33 then
|
|
Result := 0xAC89AFF1
|
|
when 34 then
|
|
Result := 0xAED90DF3
|
|
when 35 then
|
|
Result := 0x2DD74F01
|
|
when 36 then
|
|
Result := 0x14906A13
|
|
when 37 then
|
|
Result := 0x75873FA9
|
|
when 38 then
|
|
Result := 0xFF83F877
|
|
when 39 then
|
|
Result := 0x5028A0C9
|
|
when 40 then
|
|
Result := 0x11B4C41D
|
|
when 41 then
|
|
Result := 0x7CAEDBC4
|
|
when 42 then
|
|
Result := 0x8672D0A7
|
|
when 43 then
|
|
Result := 0x48A7C109
|
|
when 44 then
|
|
Result := 0x8320E59F
|
|
when 45 then
|
|
Result := 0xBC0B3D5F
|
|
when 46 then
|
|
Result := 0x75A30886
|
|
when 47 then
|
|
Result := 0xF9E0D128
|
|
when 48 then
|
|
Result := 0x41AF7580
|
|
when 49 then
|
|
Result := 0x239BB94D
|
|
when 50 then
|
|
Result := 0xC67A3C81
|
|
when 51 then
|
|
Result := 0x74EEBD6E
|
|
when 52 then
|
|
Result := 0xBC02B53C
|
|
when 53 then
|
|
Result := 0x727EA449
|
|
when 54 then
|
|
Result := 0x6B8A2806
|
|
when 55 then
|
|
Result := 0x5853B0DA
|
|
when 56 then
|
|
Result := 0xBDE032F4
|
|
when 57 then
|
|
Result := 0xCE234885
|
|
when 58 then
|
|
Result := 0x320D6145
|
|
when 59 then
|
|
Result := 0x48CC053F
|
|
when 60 then
|
|
Result := 0x00DBC4D2
|
|
when 61 then
|
|
Result := 0xD55A2397
|
|
when 62 then
|
|
Result := 0xE1059B6F
|
|
when 63 then
|
|
Result := 0x1C3E05D1
|
|
when 64 then
|
|
Result := 0x09657C64
|
|
when 65 then
|
|
Result := 0xD07CB661
|
|
when 66 then
|
|
Result := 0x6E982E34
|
|
when 67 then
|
|
Result := 0x6DD1D777
|
|
when 68 then
|
|
Result := 0xEDED1071
|
|
when 69 then
|
|
Result := 0xD79DFD65
|
|
when 70 then
|
|
Result := 0xF816DDCE
|
|
when 71 then
|
|
Result := 0xB6FAF1E4
|
|
when 72 then
|
|
Result := 0x1C771074
|
|
when 73 then
|
|
Result := 0x311835BD
|
|
when 74 then
|
|
Result := 0x18F952F7
|
|
when 75 then
|
|
Result := 0xF8F40350
|
|
when 76 then
|
|
Result := 0x4ECED354
|
|
when 77 then
|
|
Result := 0x7C8AC12B
|
|
when 78 then
|
|
Result := 0x31A9994D
|
|
when 79 then
|
|
Result := 0x4FD47747
|
|
when 80 then
|
|
Result := 0xDC227A23
|
|
when 81 then
|
|
Result := 0x6DFAFDDF
|
|
when 82 then
|
|
Result := 0x6796E748
|
|
when 83 then
|
|
Result := 0x0C6F634F
|
|
when 84 then
|
|
Result := 0xF992FA1D
|
|
when 85 then
|
|
Result := 0x4CF670C9
|
|
when 86 then
|
|
Result := 0x067DFD31
|
|
when 87 then
|
|
Result := 0xA7A3E1A5
|
|
when 88 then
|
|
Result := 0x8CD7D9DF
|
|
when 89 then
|
|
Result := 0x972CCB34
|
|
when 90 then
|
|
Result := 0x67C82156
|
|
when 91 then
|
|
Result := 0xD548F6A8
|
|
when 92 then
|
|
Result := 0x045CEC21
|
|
when 93 then
|
|
Result := 0xF3240BFB
|
|
when 94 then
|
|
Result := 0xDEF656A7
|
|
when 95 then
|
|
Result := 0x43DE08C5
|
|
when 96 then
|
|
Result := 0xDAD1F92F
|
|
when 97 then
|
|
Result := 0x3726C56B
|
|
when 98 then
|
|
Result := 0x1409F19A
|
|
when 99 then
|
|
Result := 0x942FD147
|
|
when 100 then
|
|
Result := 0xB926749C
|
|
when 101 then
|
|
Result := 0xADDC31B8
|
|
when 102 then
|
|
Result := 0x53D0D869
|
|
when 103 then
|
|
Result := 0xD1BA52FE
|
|
when 104 then
|
|
Result := 0x6722DF8C
|
|
when 105 then
|
|
Result := 0x22D95A74
|
|
when 106 then
|
|
Result := 0x7DC1B52A
|
|
when 107 then
|
|
Result := 0x1DEC6FD5
|
|
when 108 then
|
|
Result := 0x7262874D
|
|
when 109 then
|
|
Result := 0x0A725DC9
|
|
when 110 then
|
|
Result := 0xE6A8193D
|
|
when 111 then
|
|
Result := 0xA052835A
|
|
when 112 then
|
|
Result := 0xDC9AD928
|
|
when 113 then
|
|
Result := 0xE59EBB90
|
|
when 114 then
|
|
Result := 0x70DBA9FF
|
|
when 115 then
|
|
Result := 0xD612749D
|
|
when 116 then
|
|
Result := 0x5A5A638C
|
|
when 117 then
|
|
Result := 0x6086EC37
|
|
when 118 then
|
|
Result := 0x2A579709
|
|
when 119 then
|
|
Result := 0x1449EA3A
|
|
when 120 then
|
|
Result := 0xBC8E3C06
|
|
when 121 then
|
|
Result := 0x2F900666
|
|
when 122 then
|
|
Result := 0xFBE74FD1
|
|
when 123 then
|
|
Result := 0x6B35B911
|
|
when 124 then
|
|
Result := 0xF8335008
|
|
when 125 then
|
|
Result := 0xEF1E979D
|
|
when 126 then
|
|
Result := 0x738AB29D
|
|
when 127 then
|
|
Result := 0xA2DC0FDC
|
|
when 128 then
|
|
Result := 0x7696305D
|
|
when 129 then
|
|
Result := 0xF5429DAC
|
|
when 130 then
|
|
Result := 0x8C41813B
|
|
when 131 then
|
|
Result := 0x8073E02E
|
|
when 132 then
|
|
Result := 0xBEF83CCD
|
|
when 133 then
|
|
Result := 0x7B50A95A
|
|
when 134 then
|
|
Result := 0x05EE5862
|
|
when 135 then
|
|
Result := 0x00829ECE
|
|
when 136 then
|
|
Result := 0x8CA1958C
|
|
when 137 then
|
|
Result := 0xBE4EA2E2
|
|
when 138 then
|
|
Result := 0x4293BB73
|
|
when 139 then
|
|
Result := 0x656F7B23
|
|
when 140 then
|
|
Result := 0x417316D8
|
|
when 141 then
|
|
Result := 0x4467D7CF
|
|
when 142 then
|
|
Result := 0x2200E63B
|
|
when 143 then
|
|
Result := 0x109050C8
|
|
when 144 then
|
|
Result := 0x814CBE47
|
|
when 145 then
|
|
Result := 0x36B1D4A8
|
|
when 146 then
|
|
Result := 0x36AF9305
|
|
when 147 then
|
|
Result := 0x308327B3
|
|
when 148 then
|
|
Result := 0xEBCD7344
|
|
when 149 then
|
|
Result := 0xA738DE27
|
|
when 150 then
|
|
Result := 0x5A10C399
|
|
when 151 then
|
|
Result := 0x4142371D
|
|
when 152 then
|
|
Result := 0x64A18528
|
|
when 153 then
|
|
Result := 0x0B31E8B2
|
|
when 154 then
|
|
Result := 0x641057B9
|
|
when 155 then
|
|
Result := 0x6AFC363B
|
|
when 156 then
|
|
Result := 0x108AD953
|
|
when 157 then
|
|
Result := 0x9D4DA234
|
|
when 158 then
|
|
Result := 0x0C2D9159
|
|
when 159 then
|
|
Result := 0x1C8A1A1F
|
|
when 160 then
|
|
Result := 0x310C66BA
|
|
when 161 then
|
|
Result := 0x87AA1070
|
|
when 162 then
|
|
Result := 0xDAC832FF
|
|
when 163 then
|
|
Result := 0x0A433422
|
|
when 164 then
|
|
Result := 0x7AF15812
|
|
when 165 then
|
|
Result := 0x2D8D9BD0
|
|
when 166 then
|
|
Result := 0x995A25E9
|
|
when 167 then
|
|
Result := 0x25326CAC
|
|
when 168 then
|
|
Result := 0xA34384DB
|
|
when 169 then
|
|
Result := 0x4C8421CC
|
|
when 170 then
|
|
Result := 0x4F0315EC
|
|
when 171 then
|
|
Result := 0x29E8649E
|
|
when 172 then
|
|
Result := 0xA7732D6F
|
|
when 173 then
|
|
Result := 0x2E94D3E3
|
|
when 174 then
|
|
Result := 0x7D98A340
|
|
when 175 then
|
|
Result := 0x397C4D74
|
|
when 176 then
|
|
Result := 0x659DB4DE
|
|
when 177 then
|
|
Result := 0x747D4E9A
|
|
when 178 then
|
|
Result := 0xD9DB8435
|
|
when 179 then
|
|
Result := 0x4659DBE9
|
|
when 180 then
|
|
Result := 0x313E6DC5
|
|
when 181 then
|
|
Result := 0x29D104DC
|
|
when 182 then
|
|
Result := 0x9F226CBA
|
|
when 183 then
|
|
Result := 0x452F18B0
|
|
when 184 then
|
|
Result := 0xD0BC5068
|
|
when 185 then
|
|
Result := 0x844CA299
|
|
when 186 then
|
|
Result := 0x782B294E
|
|
when 187 then
|
|
Result := 0x4AE2EB7B
|
|
when 188 then
|
|
Result := 0xA4C475F8
|
|
when 189 then
|
|
Result := 0x70A81311
|
|
when 190 then
|
|
Result := 0x4B3E8BCC
|
|
when 191 then
|
|
Result := 0x7E20D4BA
|
|
when 192 then
|
|
Result := 0xABCA33C9
|
|
when 193 then
|
|
Result := 0x57BE2960
|
|
when 194 then
|
|
Result := 0x44F9B419
|
|
when 195 then
|
|
Result := 0x2E567746
|
|
when 196 then
|
|
Result := 0x72EB757A
|
|
when 197 then
|
|
Result := 0x102CC0E8
|
|
when 198 then
|
|
Result := 0xB07F32B9
|
|
when 199 then
|
|
Result := 0xD0DABD59
|
|
when 200 then
|
|
Result := 0xBA85AD6B
|
|
when 201 then
|
|
Result := 0xF3E20667
|
|
when 202 then
|
|
Result := 0x98D77D81
|
|
when 203 then
|
|
Result := 0x197AFA47
|
|
when 204 then
|
|
Result := 0x518EE9AC
|
|
when 205 then
|
|
Result := 0xE10CE5A2
|
|
when 206 then
|
|
Result := 0x01CF2C2A
|
|
when 207 then
|
|
Result := 0xD3A3AF3D
|
|
when 208 then
|
|
Result := 0x16DDFD65
|
|
when 209 then
|
|
Result := 0x669232F8
|
|
when 210 then
|
|
Result := 0x1C50A301
|
|
when 211 then
|
|
Result := 0xB93D9151
|
|
when 212 then
|
|
Result := 0x9354D3F4
|
|
when 213 then
|
|
Result := 0x847D79D0
|
|
when 214 then
|
|
Result := 0xD5FE2EC6
|
|
when 215 then
|
|
Result := 0x1F7B0610
|
|
when 216 then
|
|
Result := 0xFA6B90A5
|
|
when 217 then
|
|
Result := 0xC5879041
|
|
when 218 then
|
|
Result := 0x2E7DC05E
|
|
when 219 then
|
|
Result := 0x423F1F32
|
|
when 220 then
|
|
Result := 0xEF623DDB
|
|
when 221 then
|
|
Result := 0x49C13280
|
|
when 222 then
|
|
Result := 0x98714E92
|
|
when 223 then
|
|
Result := 0xC7B6E4AD
|
|
when 224 then
|
|
Result := 0xC4318466
|
|
when 225 then
|
|
Result := 0x0737F312
|
|
when 226 then
|
|
Result := 0x4D3C003F
|
|
when 227 then
|
|
Result := 0x9ACC1F1F
|
|
when 228 then
|
|
Result := 0x5F1C926D
|
|
when 229 then
|
|
Result := 0x085FA771
|
|
when 230 then
|
|
Result := 0x185A83A2
|
|
when 231 then
|
|
Result := 0xF9AA159D
|
|
when 232 then
|
|
Result := 0x0B0B0132
|
|
when 233 then
|
|
Result := 0xF98E7A43
|
|
when 234 then
|
|
Result := 0xCD9EBDBE
|
|
when 235 then
|
|
Result := 0x0190CB29
|
|
when 236 then
|
|
Result := 0x10D93FB6
|
|
when 237 then
|
|
Result := 0x3B8A4D97
|
|
when 238 then
|
|
Result := 0x66A65A41
|
|
when 239 then
|
|
Result := 0xE43E766F
|
|
when 240 then
|
|
Result := 0x77BE3C41
|
|
when 241 then
|
|
Result := 0xB9686364
|
|
when 242 then
|
|
Result := 0xCB36994D
|
|
when 243 then
|
|
Result := 0x6846A287
|
|
when 244 then
|
|
Result := 0x567E77F7
|
|
when 245 then
|
|
Result := 0x36178DD8
|
|
when 246 then
|
|
Result := 0xBDE6B1F2
|
|
when 247 then
|
|
Result := 0xB6EFDC64
|
|
when 248 then
|
|
Result := 0x82950324
|
|
when 249 then
|
|
Result := 0x42053F47
|
|
when 250 then
|
|
Result := 0xC09BE51C
|
|
when 251 then
|
|
Result := 0x0942D762
|
|
when 252 then
|
|
Result := 0x35F92C7F
|
|
when 253 then
|
|
Result := 0x367DEC61
|
|
when 254 then
|
|
Result := 0x6EE3D983
|
|
when 255 then
|
|
Result := 0xDBAAF78A
|
|
when 256 then
|
|
Result := 0x265D2C47
|
|
when 257 then
|
|
Result := 0x8EB4BF5C
|
|
when 258 then
|
|
Result := 0x33B232D7
|
|
when 259 then
|
|
Result := 0xB0137E77
|
|
when 260 then
|
|
Result := 0x373C39A7
|
|
when 261 then
|
|
Result := 0x8D2B2E76
|
|
when 262 then
|
|
Result := 0xC7510F01
|
|
when 263 then
|
|
Result := 0x50F9E032
|
|
when 264 then
|
|
Result := 0x7B1FDDDB
|
|
when 265 then
|
|
Result := 0x724C2AAE
|
|
when 266 then
|
|
Result := 0xB10ECB31
|
|
when 267 then
|
|
Result := 0xCCA3D1B8
|
|
when 268 then
|
|
Result := 0x7F0BCF10
|
|
when 269 then
|
|
Result := 0x4254BBBD
|
|
when 270 then
|
|
Result := 0xE3F93B97
|
|
when 271 then
|
|
Result := 0x2305039B
|
|
when 272 then
|
|
Result := 0x53120E22
|
|
when 273 then
|
|
Result := 0x1A2F3B9A
|
|
when 274 then
|
|
Result := 0x0FDDBD97
|
|
when 275 then
|
|
Result := 0x0118561E
|
|
when 276 then
|
|
Result := 0x0A798E13
|
|
when 277 then
|
|
Result := 0x9E0B3ACD
|
|
when 278 then
|
|
Result := 0xDB6C9F15
|
|
when 279 then
|
|
Result := 0xF512D0A2
|
|
when 280 then
|
|
Result := 0x9E8C3A28
|
|
when 281 then
|
|
Result := 0xEE2184AE
|
|
when 282 then
|
|
Result := 0x0051EC2F
|
|
when 283 then
|
|
Result := 0x2432F74F
|
|
when 284 then
|
|
Result := 0xB0AA66EA
|
|
when 285 then
|
|
Result := 0x55128D88
|
|
when 286 then
|
|
Result := 0xF7D83A38
|
|
when 287 then
|
|
Result := 0x4DAE8E82
|
|
when 288 then
|
|
Result := 0x3FDC98D6
|
|
when 289 then
|
|
Result := 0x5F0BD341
|
|
when 290 then
|
|
Result := 0x7244BE1D
|
|
when 291 then
|
|
Result := 0xC7B48E78
|
|
when 292 then
|
|
Result := 0x2D473053
|
|
when 293 then
|
|
Result := 0x43892E20
|
|
when 294 then
|
|
Result := 0xBA0F1F2A
|
|
when 295 then
|
|
Result := 0x524D4895
|
|
when 296 then
|
|
Result := 0x2E10BCB1
|
|
when 297 then
|
|
Result := 0x4C372D81
|
|
when 298 then
|
|
Result := 0x5C3E50CD
|
|
when 299 then
|
|
Result := 0xCF61CC2E
|
|
when 300 then
|
|
Result := 0x931709AB
|
|
when 301 then
|
|
Result := 0x81B3AEFC
|
|
when 302 then
|
|
Result := 0x39E9405E
|
|
when 303 then
|
|
Result := 0x7FFE108C
|
|
when 304 then
|
|
Result := 0x4FBB3FF8
|
|
when 305 then
|
|
Result := 0x06ABE450
|
|
when 306 then
|
|
Result := 0x7F5BF51E
|
|
when 307 then
|
|
Result := 0xA4E3CDFD
|
|
when 308 then
|
|
Result := 0xDB0F6C6F
|
|
when 309 then
|
|
Result := 0x159A1227
|
|
when 310 then
|
|
Result := 0x3B9FED55
|
|
when 311 then
|
|
Result := 0xD20B6F7F
|
|
when 312 then
|
|
Result := 0xFBE9CC83
|
|
when 313 then
|
|
Result := 0x64856619
|
|
when 314 then
|
|
Result := 0xBF52B8AF
|
|
when 315 then
|
|
Result := 0x9D7006B0
|
|
when 316 then
|
|
Result := 0x71165BC6
|
|
when 317 then
|
|
Result := 0xAE324AEE
|
|
when 318 then
|
|
Result := 0x29D27F2C
|
|
when 319 then
|
|
Result := 0x794C2086
|
|
when 320 then
|
|
Result := 0x74445CE2
|
|
when 321 then
|
|
Result := 0x782915CC
|
|
when 322 then
|
|
Result := 0xD4CE6886
|
|
when 323 then
|
|
Result := 0x3289AE7C
|
|
when 324 then
|
|
Result := 0x53DEF297
|
|
when 325 then
|
|
Result := 0x4185F7ED
|
|
when 326 then
|
|
Result := 0x88B72400
|
|
when 327 then
|
|
Result := 0x3C09DC11
|
|
when 328 then
|
|
Result := 0xBCE3AAB6
|
|
when 329 then
|
|
Result := 0x6A75934A
|
|
when 330 then
|
|
Result := 0xB267E399
|
|
when 331 then
|
|
Result := 0x000DF1BF
|
|
when 332 then
|
|
Result := 0x193BA5E2
|
|
when 333 then
|
|
Result := 0xFA3E1977
|
|
when 334 then
|
|
Result := 0x179E14F6
|
|
when 335 then
|
|
Result := 0x1EEDE298
|
|
when 336 then
|
|
Result := 0x691F0B06
|
|
when 337 then
|
|
Result := 0xB84F78AC
|
|
when 338 then
|
|
Result := 0xC1C15316
|
|
when 339 then
|
|
Result := 0xFFFF3AD6
|
|
when 340 then
|
|
Result := 0x0B457383
|
|
when 341 then
|
|
Result := 0x518CD612
|
|
when 342 then
|
|
Result := 0x05A00F3E
|
|
when 343 then
|
|
Result := 0xD5B7D275
|
|
when 344 then
|
|
Result := 0x4C5ECCD7
|
|
when 345 then
|
|
Result := 0xE02CD0BE
|
|
when 346 then
|
|
Result := 0x5558E9F2
|
|
when 347 then
|
|
Result := 0x0C89BBF0
|
|
when 348 then
|
|
Result := 0xA3D96227
|
|
when 349 then
|
|
Result := 0x2832D2B2
|
|
when 350 then
|
|
Result := 0xF667B897
|
|
when 351 then
|
|
Result := 0xD4556554
|
|
when 352 then
|
|
Result := 0xF9D2F01F
|
|
when 353 then
|
|
Result := 0xFA1E3FAE
|
|
when 354 then
|
|
Result := 0x52C2E1EE
|
|
when 355 then
|
|
Result := 0xE5451F31
|
|
when 356 then
|
|
Result := 0x7E849729
|
|
when 357 then
|
|
Result := 0xDABDB67A
|
|
when 358 then
|
|
Result := 0x54BF5E7E
|
|
when 359 then
|
|
Result := 0xF831C271
|
|
when 360 then
|
|
Result := 0x5F1A17E3
|
|
when 361 then
|
|
Result := 0x9D140AFE
|
|
when 362 then
|
|
Result := 0x92741C47
|
|
when 363 then
|
|
Result := 0x48CFABCE
|
|
when 364 then
|
|
Result := 0x9CBBE477
|
|
when 365 then
|
|
Result := 0x9C3EE57F
|
|
when 366 then
|
|
Result := 0xB07D4C39
|
|
when 367 then
|
|
Result := 0xCC21BCE2
|
|
when 368 then
|
|
Result := 0x697708B1
|
|
when 369 then
|
|
Result := 0x58DA2A6B
|
|
when 370 then
|
|
Result := 0x2370DB16
|
|
when 371 then
|
|
Result := 0x6E641948
|
|
when 372 then
|
|
Result := 0xACC5BD52
|
|
when 373 then
|
|
Result := 0x868F24CC
|
|
when 374 then
|
|
Result := 0xCA1DB0F5
|
|
when 375 then
|
|
Result := 0x4CADA492
|
|
when 376 then
|
|
Result := 0x3F443E54
|
|
when 377 then
|
|
Result := 0xC4A4D5E9
|
|
when 378 then
|
|
Result := 0xF00AD670
|
|
when 379 then
|
|
Result := 0xE93C86E0
|
|
when 380 then
|
|
Result := 0xFE90651A
|
|
when 381 then
|
|
Result := 0xDDE532A3
|
|
when 382 then
|
|
Result := 0xA66458DF
|
|
when 383 then
|
|
Result := 0xAB7D7151
|
|
when 384 then
|
|
Result := 0x0E2E775F
|
|
when 385 then
|
|
Result := 0xC9109F99
|
|
when 386 then
|
|
Result := 0x8D96D59F
|
|
when 387 then
|
|
Result := 0x73CEF14C
|
|
when 388 then
|
|
Result := 0xC74E88E9
|
|
when 389 then
|
|
Result := 0x02712DC0
|
|
when 390 then
|
|
Result := 0x04F41735
|
|
when 391 then
|
|
Result := 0x2E5914A2
|
|
when 392 then
|
|
Result := 0x59F4B2FB
|
|
when 393 then
|
|
Result := 0x0287FC83
|
|
when 394 then
|
|
Result := 0x80BC0343
|
|
when 395 then
|
|
Result := 0xF6B32559
|
|
when 396 then
|
|
Result := 0xC74178D4
|
|
when 397 then
|
|
Result := 0xF1D99123
|
|
when 398 then
|
|
Result := 0x383CCC07
|
|
when 399 then
|
|
Result := 0xACC0637D
|
|
when 400 then
|
|
Result := 0x0863A548
|
|
when 401 then
|
|
Result := 0xA6FCAC85
|
|
when 402 then
|
|
Result := 0x2A13EFF0
|
|
when 403 then
|
|
Result := 0xAF2EEDB1
|
|
when 404 then
|
|
Result := 0x41E72750
|
|
when 405 then
|
|
Result := 0xE0C6B342
|
|
when 406 then
|
|
Result := 0x5DA22B46
|
|
when 407 then
|
|
Result := 0x635559E0
|
|
when 408 then
|
|
Result := 0xD2EA40AC
|
|
when 409 then
|
|
Result := 0x10AA98C0
|
|
when 410 then
|
|
Result := 0x19096497
|
|
when 411 then
|
|
Result := 0x112C542B
|
|
when 412 then
|
|
Result := 0x2C85040C
|
|
when 413 then
|
|
Result := 0xA868E7D0
|
|
when 414 then
|
|
Result := 0x6E260188
|
|
when 415 then
|
|
Result := 0xF596D390
|
|
when 416 then
|
|
Result := 0xC3BB5D7A
|
|
when 417 then
|
|
Result := 0x7A2AA937
|
|
when 418 then
|
|
Result := 0xDFD15032
|
|
when 419 then
|
|
Result := 0x6780AE3B
|
|
when 420 then
|
|
Result := 0xDB5F9CD8
|
|
when 421 then
|
|
Result := 0x8BD266B0
|
|
when 422 then
|
|
Result := 0x7744AF12
|
|
when 423 then
|
|
Result := 0xB463B1B0
|
|
when 424 then
|
|
Result := 0x589629C9
|
|
when 425 then
|
|
Result := 0xE30DBC6E
|
|
when 426 then
|
|
Result := 0x880F5569
|
|
when 427 then
|
|
Result := 0x209E6E16
|
|
when 428 then
|
|
Result := 0x9DECA50C
|
|
when 429 then
|
|
Result := 0x02987A57
|
|
when 430 then
|
|
Result := 0xBED3EA57
|
|
when 431 then
|
|
Result := 0xD3A678AA
|
|
when 432 then
|
|
Result := 0x70DD030D
|
|
when 433 then
|
|
Result := 0x0CFD9C5D
|
|
when 434 then
|
|
Result := 0x92A18E99
|
|
when 435 then
|
|
Result := 0xF5740619
|
|
when 436 then
|
|
Result := 0x7F6F0A7D
|
|
when 437 then
|
|
Result := 0x134CAF9A
|
|
when 438 then
|
|
Result := 0x70F5BAE4
|
|
when 439 then
|
|
Result := 0x23DCA7B5
|
|
when 440 then
|
|
Result := 0x4D788FCD
|
|
when 441 then
|
|
Result := 0xC7F07847
|
|
when 442 then
|
|
Result := 0xBCF77DA1
|
|
when 443 then
|
|
Result := 0x9071D568
|
|
when 444 then
|
|
Result := 0xFC627EA1
|
|
when 445 then
|
|
Result := 0xAE004B77
|
|
when 446 then
|
|
Result := 0x66B54BCB
|
|
when 447 then
|
|
Result := 0x7EF2DAAC
|
|
when 448 then
|
|
Result := 0xDCD5AC30
|
|
when 449 then
|
|
Result := 0xB9BDF730
|
|
when 450 then
|
|
Result := 0x505A97A7
|
|
when 451 then
|
|
Result := 0x9D881FD3
|
|
when 452 then
|
|
Result := 0xADB796CC
|
|
when 453 then
|
|
Result := 0x94A1D202
|
|
when 454 then
|
|
Result := 0x97535D7F
|
|
when 455 then
|
|
Result := 0x31EC20C0
|
|
when 456 then
|
|
Result := 0xB1887A98
|
|
when 457 then
|
|
Result := 0xC1475069
|
|
when 458 then
|
|
Result := 0xA6F73AF3
|
|
when 459 then
|
|
Result := 0x71E4E067
|
|
when 460 then
|
|
Result := 0x46A569DE
|
|
when 461 then
|
|
Result := 0xD2ADE430
|
|
when 462 then
|
|
Result := 0x6F0762C7
|
|
when 463 then
|
|
Result := 0xF50876F4
|
|
when 464 then
|
|
Result := 0x53510542
|
|
when 465 then
|
|
Result := 0x03741C3E
|
|
when 466 then
|
|
Result := 0x53502224
|
|
when 467 then
|
|
Result := 0xD8E54D60
|
|
when 468 then
|
|
Result := 0x3C44AB1A
|
|
when 469 then
|
|
Result := 0x34972B46
|
|
when 470 then
|
|
Result := 0x74BFA89D
|
|
when 471 then
|
|
Result := 0xD7D768E0
|
|
when 472 then
|
|
Result := 0x37E605DC
|
|
when 473 then
|
|
Result := 0xE13D1BDF
|
|
when 474 then
|
|
Result := 0x5051C421
|
|
when 475 then
|
|
Result := 0xB9E057BE
|
|
when 476 then
|
|
Result := 0xB717A14C
|
|
when 477 then
|
|
Result := 0xA1730C43
|
|
when 478 then
|
|
Result := 0xB99638BE
|
|
when 479 then
|
|
Result := 0xB5D5F36D
|
|
when 480 then
|
|
Result := 0xE960D9EA
|
|
when 481 then
|
|
Result := 0x6B1388D3
|
|
when 482 then
|
|
Result := 0xECB6D3B6
|
|
when 483 then
|
|
Result := 0xBDBE8B83
|
|
when 484 then
|
|
Result := 0x2E29AFC5
|
|
when 485 then
|
|
Result := 0x764D71EC
|
|
when 486 then
|
|
Result := 0x4B8F4F43
|
|
when 487 then
|
|
Result := 0xC21DDC00
|
|
when 488 then
|
|
Result := 0xA63F657F
|
|
when 489 then
|
|
Result := 0x82678130
|
|
when 490 then
|
|
Result := 0xDBF535AC
|
|
when 491 then
|
|
Result := 0xA594FC58
|
|
when 492 then
|
|
Result := 0x942686BC
|
|
when 493 then
|
|
Result := 0xBD9B657B
|
|
when 494 then
|
|
Result := 0x4A0F9B61
|
|
when 495 then
|
|
Result := 0x44FF184F
|
|
when 496 then
|
|
Result := 0x38E10A2F
|
|
when 497 then
|
|
Result := 0x61910626
|
|
when 498 then
|
|
Result := 0x5E247636
|
|
when 499 then
|
|
Result := 0x7106D137
|
|
when 500 then
|
|
Result := 0xC62802F0
|
|
when 501 then
|
|
Result := 0xBD1D1F00
|
|
when 502 then
|
|
Result := 0x7CC0DCB2
|
|
when 503 then
|
|
Result := 0xED634909
|
|
when 504 then
|
|
Result := 0xDC13B24E
|
|
when 505 then
|
|
Result := 0x9799C499
|
|
when 506 then
|
|
Result := 0xD77E3D6A
|
|
when 507 then
|
|
Result := 0x14773B68
|
|
when 508 then
|
|
Result := 0x967A4FB7
|
|
when 509 then
|
|
Result := 0x35EECFB1
|
|
when 510 then
|
|
Result := 0x2A5110B8
|
|
when 511 then
|
|
Result := 0xE2F0AF94
|
|
when 512 then
|
|
Result := 0x9D09DEA5
|
|
when 513 then
|
|
Result := 0x20255D27
|
|
when 514 then
|
|
Result := 0x5771D34B
|
|
when 515 then
|
|
Result := 0xE1089EE4
|
|
when 516 then
|
|
Result := 0x246F330B
|
|
when 517 then
|
|
Result := 0x8F7CAEE5
|
|
when 518 then
|
|
Result := 0xD3064712
|
|
when 519 then
|
|
Result := 0x75CAFBEE
|
|
when 520 then
|
|
Result := 0xB94F7028
|
|
when 521 then
|
|
Result := 0xED953666
|
|
when 522 then
|
|
Result := 0x5D1975B4
|
|
when 523 then
|
|
Result := 0x5AF81271
|
|
when 524 then
|
|
Result := 0x13BE2025
|
|
when 525 then
|
|
Result := 0x85194659
|
|
when 526 then
|
|
Result := 0x30805331
|
|
when 527 then
|
|
Result := 0xEC9D46C0
|
|
when 528 then
|
|
Result := 0xBC027C36
|
|
when 529 then
|
|
Result := 0x2AF84188
|
|
when 530 then
|
|
Result := 0xC2141B80
|
|
when 531 then
|
|
Result := 0xC02B1E4A
|
|
when 532 then
|
|
Result := 0x04D36177
|
|
when 533 then
|
|
Result := 0xFC50E9D7
|
|
when 534 then
|
|
Result := 0x39CE79DA
|
|
when 535 then
|
|
Result := 0x917E0A00
|
|
when 536 then
|
|
Result := 0xEF7A0BF4
|
|
when 537 then
|
|
Result := 0xA98BD8D1
|
|
when 538 then
|
|
Result := 0x19424DD2
|
|
when 539 then
|
|
Result := 0x9439DF1F
|
|
when 540 then
|
|
Result := 0xC42AF746
|
|
when 541 then
|
|
Result := 0xADDBE83E
|
|
when 542 then
|
|
Result := 0x85221F0D
|
|
when 543 then
|
|
Result := 0x45563E90
|
|
when 544 then
|
|
Result := 0x9095EC52
|
|
when 545 then
|
|
Result := 0x77887B25
|
|
when 546 then
|
|
Result := 0x8AE46064
|
|
when 547 then
|
|
Result := 0xBD43B71A
|
|
when 548 then
|
|
Result := 0xBB541956
|
|
when 549 then
|
|
Result := 0x7366CF9D
|
|
when 550 then
|
|
Result := 0xEE8E1737
|
|
when 551 then
|
|
Result := 0xB5A727C9
|
|
when 552 then
|
|
Result := 0x5076B3E7
|
|
when 553 then
|
|
Result := 0xFC70BACA
|
|
when 554 then
|
|
Result := 0xCE135B75
|
|
when 555 then
|
|
Result := 0xC4E91AA3
|
|
when 556 then
|
|
Result := 0xF0341911
|
|
when 557 then
|
|
Result := 0x53430C3F
|
|
when 558 then
|
|
Result := 0x886B0824
|
|
when 559 then
|
|
Result := 0x6BB5B8B7
|
|
when 560 then
|
|
Result := 0x33E21254
|
|
when 561 then
|
|
Result := 0xF193B456
|
|
when 562 then
|
|
Result := 0x5B09617F
|
|
when 563 then
|
|
Result := 0x215FFF50
|
|
when 564 then
|
|
Result := 0x48D97EF1
|
|
when 565 then
|
|
Result := 0x356479AB
|
|
when 566 then
|
|
Result := 0x6EA9DDC4
|
|
when 567 then
|
|
Result := 0x0D352746
|
|
when 568 then
|
|
Result := 0xA2F5CE43
|
|
when 569 then
|
|
Result := 0xB226A1B3
|
|
when 570 then
|
|
Result := 0x1329EA3C
|
|
when 571 then
|
|
Result := 0x7A337CC2
|
|
when 572 then
|
|
Result := 0xB5CCE13D
|
|
when 573 then
|
|
Result := 0x563E3B5B
|
|
when 574 then
|
|
Result := 0x534E8E8F
|
|
when 575 then
|
|
Result := 0x561399C9
|
|
when 576 then
|
|
Result := 0xE1596392
|
|
when 577 then
|
|
Result := 0xB0F03125
|
|
when 578 then
|
|
Result := 0x4586645B
|
|
when 579 then
|
|
Result := 0x1F371847
|
|
when 580 then
|
|
Result := 0x94EAABD1
|
|
when 581 then
|
|
Result := 0x41F97EDD
|
|
when 582 then
|
|
Result := 0xE3E5A39B
|
|
when 583 then
|
|
Result := 0x71C774E2
|
|
when 584 then
|
|
Result := 0x507296F4
|
|
when 585 then
|
|
Result := 0x5960133B
|
|
when 586 then
|
|
Result := 0x7852C494
|
|
when 587 then
|
|
Result := 0x3F5B2691
|
|
when 588 then
|
|
Result := 0xA3F87774
|
|
when 589 then
|
|
Result := 0x5A7AF89E
|
|
when 590 then
|
|
Result := 0x17DA3F28
|
|
when 591 then
|
|
Result := 0xE9D9516D
|
|
when 592 then
|
|
Result := 0xFCC1C1D5
|
|
when 593 then
|
|
Result := 0xE4618628
|
|
when 594 then
|
|
Result := 0x04081047
|
|
when 595 then
|
|
Result := 0xD8E4DB5F
|
|
when 596 then
|
|
Result := 0xDC380416
|
|
when 597 then
|
|
Result := 0x8C4933E2
|
|
when 598 then
|
|
Result := 0x95074D53
|
|
when 599 then
|
|
Result := 0xB1B0032D
|
|
when 600 then
|
|
Result := 0xCC8102EA
|
|
when 601 then
|
|
Result := 0x71641243
|
|
when 602 then
|
|
Result := 0x98D6EB6A
|
|
when 603 then
|
|
Result := 0x90FEC945
|
|
when 604 then
|
|
Result := 0xA0914345
|
|
when 605 then
|
|
Result := 0x6FAB037D
|
|
when 606 then
|
|
Result := 0x70F49C4D
|
|
when 607 then
|
|
Result := 0x05BF5B0E
|
|
when 608 then
|
|
Result := 0x927AAF7F
|
|
when 609 then
|
|
Result := 0xA1940F61
|
|
when 610 then
|
|
Result := 0xFEE0756F
|
|
when 611 then
|
|
Result := 0xF815369F
|
|
when 612 then
|
|
Result := 0x5C00253B
|
|
when 613 then
|
|
Result := 0xF2B9762F
|
|
when 614 then
|
|
Result := 0x4AEB3CCC
|
|
when 615 then
|
|
Result := 0x1069F386
|
|
when 616 then
|
|
Result := 0xFBA4E7B9
|
|
when 617 then
|
|
Result := 0x70332665
|
|
when 618 then
|
|
Result := 0x6BCA810E
|
|
when 619 then
|
|
Result := 0x85AB8058
|
|
when 620 then
|
|
Result := 0xAE4B2B2F
|
|
when 621 then
|
|
Result := 0x9D120712
|
|
when 622 then
|
|
Result := 0xBEE8EACB
|
|
when 623 then
|
|
Result := 0x776A1112
|
|
end
|
|
end
|
|
end
|