IsValidModel(modelid)
{
// Created by ******.
static modeldat[] =
{
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -128,
-515899393, -134217729, -1, -1, 33554431, -1, -1, -1, -14337, -1, -33,
127, 0, 0, 0, 0, 0, -8388608, -1, -1, -1, -16385, -1, -1, -1, -1, -1,
-1, -1, -33, -1, -771751937, -1, -9, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, 33554431, -25, -1, -1, -1, -1, -1, -1,
-1073676289, -2147483648, 34079999, 2113536, -4825600, -5, -1, -3145729,
-1, -16777217, -63, -1, -1, -1, -1, -201326593, -1, -1, -1, -1, -1,
-257, -1, 1073741823, -133122, -1, -1, -65, -1, -1, -1, -1, -1, -1,
-2146435073, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1073741823, -64, -1,
-1, -1, -1, -2635777, 134086663, 0, -64, -1, -1, -1, -1, -1, -1, -1,
-536870927, -131069, -1, -1, -1, -1, -1, -1, -1, -1, -16384, -1,
-33554433, -1, -1, -1, -1, -1, -1610612737, 524285, -128, -1,
2080309247, -1, -1, -1114113, -1, -1, -1, 66977343, -524288, -1, -1, -1,
-1, -2031617, -1, 114687, -256, -1, -4097, -1, -4097, -1, -1,
1010827263, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -32768, -1, -1, -1, -1, -1,
2147483647, -33554434, -1, -1, -49153, -1148191169, 2147483647,
-100781080, -262145, -57, 134217727, -8388608, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1048577, -1, -449, -1017, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1835009, -2049, -1, -1, -1, -1, -1, -1,
-8193, -1, -536870913, -1, -1, -1, -1, -1, -87041, -1, -1, -1, -1, -1,
-1, -209860, -1023, -8388609, -2096897, -1, -1048577, -1, -1, -1, -1,
-1, -1, -897, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1610612737,
-3073, -28673, -1, -1, -1, -1537, -1, -1, -13, -1, -1, -1, -1, -1985,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1056964609, -1, -1, -1,
-1, -1, -1, -1, -2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-236716037, -1, -1, -1, -1, -1, -1, -1, -536870913, 3, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -2097153, -2109441, -1, 201326591, -4194304, -1, -1,
-241, -1, -1, -1, -1, -1, -1, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, -32768, -1, -1, -1, -2, -671096835, -1, -8388609, -66323585, -13,
-1793, -32257, -247809, -1, -1, -513, 16252911, 0, 0, 0, -131072,
33554383, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 8356095, 0, 0, 0, 0, 0,
0, -256, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-268435449, -1, -1, -2049, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
92274627, -65536, -2097153, -268435457, 591191935, 1, 0, -16777216, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 127
};
if ((modelid >= 0) && ((modelid / 32) < sizeof (modeldat)) && (modeldat[modelid / 32] & (1 << (modelid % 32))))
{
return 1;
}
return 0;
}
Actually, it is apparently missing a few of the lower objects too - IIRC the nodding chicken isn't in that set, and maybe a few other script controlled objects not in IDE files. I'll try and set something up to generate the array, until then you could do "if old object use that, else check another way".
|
What are 321-614? Aren't those vehicles and weapons? If all the IDs 18631-19515 are valid it does make the update slightly easier. However, I made that function a LONG time ago and it was automatically generated by code I no longer have. However I would say that actually splitting it up like that is probably the simplest way in terms of development. Technically integrating the lower objects in shouldn't mean too much work as they are in the range covered by all those leading zeros at the start of the array.
Each cell holds 32 1s or 0s, each for one single object. That's how this compresses 18,000 objects in to "only" ~560 cells. It would also have been vastly more obvious had I used hex or even boolean numbers instead of decimal, but meh (both would have made it FAR easier to tweak which objects are valid). |
#!/usr/bin/env php
<?php
if (is_dir('/Volumes/C/Program Files (x86)/Rockstar Games/GTA San Andreas'))
define('GTA_DIR', '/Volumes/C/Program Files (x86)/Rockstar Games/GTA San Andreas');
else
define('GTA_DIR', '/Volumes/BOOTCAMP/Program Files (x86)/Rockstar Games/GTA San Andreas');
$scanner = new HoldStudioScanner();
BuildBitArray($scanner);
//BuildModelNameArray($scanner);
function BuildBitArray(HoldStudioScanner $scanner = null) {
if ($scanner === null)
$scanner = new HoldStudioScanner();
if (empty($scanner->models))
$scanner->scan(GTA_DIR);
for ($i = 0; $i < 20000 / 32; $i++) {
if ($i % 2)
echo ", ";
else if ($i)
echo ",\n";
printf("0b%032b", @$scanner->valid[$i]);
}
}
class HoldStudioScanner
{
var $models = array();
var $valid;
function scan($directory) {
$directory = realpath($directory);
if ($directory === false)
throw new InvalidArgumentException("Invalid directory given: \"$directory\".");
$iterator = new RecursiveIteratorIterator(
new HoldStudioRecursiveFilterIterator(
new RecursiveDirectoryIterator($directory)
)
);
$valid = array();
foreach ($iterator as $path) {
$contents = file_get_contents($path);
if (preg_match_all('/^\s*(objs|anim|weap|tobj)\s*$(.*?)^\s*end\s*$/ism', $contents, $object_matches, PREG_SET_ORDER)) {
foreach ($object_matches as $match) {
switch (strtolower($match[1])) {
case 'inst':
$pat = <<<EOD
/^
\s*(?<id>\d+)\s*,
\s*(?<model>[\\(\\)a-z0-9_+-]+)\s*,
\s*(?<interior>-?\d+)\s*,
\s*(?<pos_x>-?(?:0|[1-9][0-9]*)(?:\.[0-9]+)?(?:e[+-]?[0-9]+)?)\s*,
\s*(?<pos_y>-?(?:0|[1-9][0-9]*)(?:\.[0-9]+)?(?:e[+-]?[0-9]+)?)\s*,
\s*(?<pos_z>-?(?:0|[1-9][0-9]*)(?:\.[0-9]+)?(?:e[+-]?[0-9]+)?)\s*,
\s*(?<rot_x>-?(?:0|[1-9][0-9]*)(?:\.[0-9]+)?(?:e[+-]?[0-9]+)?)\s*,
\s*(?<rot_y>-?(?:0|[1-9][0-9]*)(?:\.[0-9]+)?(?:e[+-]?[0-9]+)?)\s*,
\s*(?<rot_z>-?(?:0|[1-9][0-9]*)(?:\.[0-9]+)?(?:e[+-]?[0-9]+)?)\s*,
\s*(?<rot_w>-?(?:0|[1-9][0-9]*)(?:\.[0-9]+)?(?:e[+-]?[0-9]+)?)\s*,
\s*(?<lod>-?\d+)\s*
$/ismx
EOD;
break;
case 'objs':
case 'anim':
case 'weap':
$pat = <<<EOD
/^
\s*(?<id>\d+)\s*,
\s*(?<model>[\\(\\)a-z0-9_+-]+)\s*,
\s*(?<texture>[\\(\\)a-z0-9_+-]+)\s*,
(\s*(?<clumps>\d+)\s*,)?
(\s*(?<animation>[\\(\\)a-z0-9_+-]*)\s*,)?
(\s*(?<count>\d+)\s*,)?
\s*(?<draw_distance>-?(?:0|[1-9][0-9]*)(?:\.[0-9]+)?(?:e[+-]?[0-9]+)?)\s*,
\s*(?<flags>-?\d+)\s*
$/ismx
EOD;
break;
case 'tobj':
// ID, ModelName, TextureName, ObjectCount, DrawDistance, [DrawDistance2, ...], Flags, TimeOn, TimeOff
$pat = <<<EOD
/^
\s*(?<id>\d+)\s*,
\s*(?<model>[\\(\\)a-z0-9_+-]+)\s*,
\s*(?<texture>[\\(\\)a-z0-9_+-]+)\s*,
\s*(?<clumps>\d+)\s*,
/ismx
EOD;
break;
default:
throw new UnexpectedValueException("Unsupported section: \"{$match[1]}\".");
}
if (preg_match_all($pat, $match[2], $matches, PREG_SET_ORDER)) {
foreach ($matches as $m) {
$this->models[$m['id']] = (object) array(
'id' => $m['id'],
'name' => $m['model'],
'texture' => $m['texture'],
'clumps' => $m['clumps'],
'count' => @$m['count'],
'draw_distance' => @$m['draw_distance'],
'flags' => @$m['flags'],
'valid' => false,
'file' => basename($path)
);
if (preg_match('/^lod|lod$|\blod\b|lod_|_lod|lodbit|^laeLOD|lod\d+$/i', $m['model']))
continue;
if (@$m['draw_distance'] > 299.0)
continue;
$id = (int) $m['id'];
$slot = (int) floor($id / 32);
if (!isset($valid[$slot]))
$valid[$slot] = 0;
$valid[$slot] |= 1 << ($id & 31);
$this->models[$m['id']]->valid = true;
}
}
}
}
}
$this->valid = $valid;
}
public function isValid($id) {
$slot = (int) floor($id / 32);
if (!isset($this->valid[$slot]))
return false;
else
return !!($this->valid[$slot] & (1 << ($id & 31)));
}
}
class HoldStudioRecursiveFilterIterator extends RecursiveFilterIterator
{
function __construct(RecursiveDirectoryIterator $iterator) {
parent::__construct($iterator);
}
public function accept() {
$current = $this->current();
if ($current->isDir())
return true;
$ext = strtolower($current->getExtension());
return in_array($ext, array('ide', 'ipl'), true);
}
}
?>
0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b11111111111011111110110111111110, 0b00000000001111111111111111111111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b11111111111111111111111110000000, 0b11100001001111111111111111111111, 0b11110111111111111111111111111111, 0b11111111111111111111111111111111, 0b11111111111111111111111111111111, 0b00000001111000000111111111111111, 0b11111111111111111111111111111111, 0b11111111111111111111111111111111, 0b11111111111111111111111111111111, 0b11111111111111111100011111111111, 0b11111111111111111111111111111111, 0b11111111111111111111111111011111, 0b11111111111111111111111101111111, 0b11111111111111111111111111111111, 0b11111111111111111111111111111111, 0b11111111111111111111111111111111, 0b11111111111111111111111111111111, 0b11111111111111111111111111111111, 0b11111111100000000000001111111111, 0b11111111111111111111111111111111, 0b11111111111010111101111111111111, 0b11111111111111111111111111111111, 0b11111111111111111001111111111111, 0b11111111111111111111111111111111, 0b10000000000011111111111111111111, 0b11111111111111111111111111111111, 0b11111111111111111111111111111111, 0b11111111111111111111111111111111, 0b11111111111111111111111111111111, 0b11111111111111111111111111111111, 0b11111111111111111111111111011111, 0b11111111111111111111111111111111, 0b11111111111111111111111111111111, 0b11111111111111101011101111111111, 0b11111111111111111111111111110111, 0b11111111111111111111111111111111, 0b11111111111111111111111111111111, 0b11111111111111111111111111111111, 0b11111111111111111111111111111111, 0b11111111111111111111111111111111, 0b11111111111111111111111111111111, 0b11111111111111111111111111111111, 0b11111111111111111111111111111111, 0b11111111111111111111111111111111, 0b11111111111111111111111111111111, 0b11111111111111111111111111111111, 0b11111111111111111111111111111111, 0b11111111111111111111111111111111, 0b11111111111111111111111111111111, 0b11111111111111111111111111111111, 0b11111111111111111111111111111111, 0b11111111111111111111111111111111, 0b11111111111111111111111111111111, 0b11111111111111111111111111111111, 0b11111111111111111111111111111111, 0b11111111111111111111111111111111, 0b11111111111111111111111111111111, 0b11111111111111111111111111111111, 0b11111111111111111111111111111111, 0b11111111111111111111111111111111, 0b11111111111111111111111111111111, 0b11111111111111111111111111111111, 0b11111111111111111111111111111111, 0b11111111111111111111111111111111, 0b11111111111111111111111111111111, 0b11111111111111111111111111111111, 0b11111111111111111111111111111111, 0b11111111111111111111111111111111, 0b11111111111111111111111111110011, 0b11111111111111111111111111111111, 0b11111111111111111111111111111111, 0b11111111111111111111111111100111, 0b11111111111111111111111111111111, 0b11111111111111111111111111111111, 0b11111111111111111111111111111111, 0b11111111111111111111111111111111, 0b11111111111111111111111111111111, 0b11111111111111111111111111111111, 0b11111111111111111011110111101111, 0b10000000000000000000000000000000, 0b00000010000010000000010011111111, 0b00000000001000000100000000000000, 0b11111111101101100101111000000000, 0b01110000111111111111111111111011, 0b00000000001111111111111111000000, 0b10011111110000000000001111001100, 0b11111111101111001100000000011110, 0b00001110110111111100111111111111, 0b11111111111111111111111111001110, 0b11111000000011111111111111111111, 0b11111111111111111110111101101011, 0b01000000000000000111111101110111, 0b11010111111111111111000001111100, 0b11110011111111111111111001111111, 0b01011111111111111111111111111111, 0b01111110100001111011111010101011, 0b10001001010101100100001000010000, 0b10100000000000000001010000101010, 0b00001000001111101010111100100000, 0b11111111111111111111111010100001, 0b00000000011111111111110101111111, 0b00001111111111111111110000111100, 0b11011110111111001111011011111011, 0b11111111111001111111110011001110, 0b11111111111111111111111111111111, 0b01111111111111111111111110111111, 0b01111000111111111111110111111111, 0b00011100000000010000000000000111, 0b00001111111100001000000000000000, 0b10101111001001110111110011111000, 0b01010101010101010110100000101011, 0b01110111110101011111110100101001, 0b01111111111100101110111011111011, 0b11111111111111111100101111001000, 0b11111111111111111111111111111111, 0b11111111111111111111111111111111, 0b11111111111111111111111111111111, 0b00000000011111111111111111111111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b11111111000000000000000000000000, 0b00010100101000001111111111111111, 0b11111111101111011111111111000000, 0b00111111111111111111111100000001, 0b11110000000000000000000000000000, 0b00000101010101010111111111111111, 0b11110010110111000011111010000000, 0b11111110111110000111110111010000, 0b00000000000000011111111111111111, 0b00000000000000000000000000000000, 0b11111111111111111111111111000000, 0b11111111111111111111111111111111, 0b11011111111111111111111111111111, 0b00000000000000000000000000000111, 0b00000000000000000000000000000000, 0b11010111111000000000000000000000, 0b10110011001000101111111111111111, 0b00011000010111010101011111010111, 0b11011111111111111111010101111111, 0b11111111111111100000000000000011, 0b11111111111111111111111111111111, 0b11111111111111111100000101111111, 0b00000000000000000000000111111111, 0b00011000000001111000000000000000, 0b11111111111111100111100000000100, 0b11110100011011111111110000000000, 0b11111110001001111111110000000111, 0b11111111110110000100101010101000, 0b11111111111111111100000000000000, 0b11111111111111111111111111111111, 0b11101011111011110011111111111111, 0b11111111111111111111111111111111, 0b00010001000001111100001111111111, 0b00100000000000000000000000000000, 0b00000000000000000000000000000000, 0b11111101000000000000000000000000, 0b11110001110101000001111111111111, 0b00000000000001101111010000010010, 0b11111111111111111111111110000000, 0b11111111111111111111111111111111, 0b11111111111111111111111111111111, 0b11111111111111111111111111111111, 0b11100001111100000111100000000000, 0b11100110011111111101011111111011, 0b00000000000000000000000100111001, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000100110000101100111111001100, 0b11111111111110000000000000000000, 0b00000000000001111111111111111111, 0b11000001111111011100000110000000, 0b00000111111101111111111111111111, 0b00000000001000011110000111010010, 0b00111000100111110011110000000000, 0b00111111111110101000001001111110, 0b00000000000000100001111100000000, 0b11111111111111111111111100000000, 0b01111111111111111111111111111111, 0b01011100001111111110101111110111, 0b11100010111111100000000000111111, 0b11011000011000110011100011111001, 0b01100110000011110001100000010000, 0b00000111100000000000000000000100, 0b00010111111101100011100001101010, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b11111111101111111000000000000000, 0b01111000000111100000000111111111, 0b00000000011111110111111110111111, 0b11111111111111111111111111111111, 0b00000000101001101111111111111111, 0b11111111111111111111111111111110, 0b10100001000000111111111111111111, 0b11111111111111111111111111111011, 0b00000000000000000000000000000011, 0b00000000000000100000000000000000, 0b01110001111111010000000000010000, 0b11111101111101100011011111111111, 0b10000000011111111111110101010111, 0b11011111100000010011001010110111, 0b11010011101011111111111111111111, 0b10101010000010010000001111111000, 0b11111000101111100000111110010110, 0b11111111100000000000000000000001, 0b11111111111111111111111111111111, 0b01111111111111111111111111111111, 0b11111111111111111111111111111111, 0b11111111111111111111111111111111, 0b11111111111111111111111111111111, 0b11111111111111111111101111111111, 0b11111111111111111111111111111111, 0b00000000000001111111111111111111, 0b00111000000000010001000000000010, 0b00000000000011100000000000000000, 0b00000000000000000000100000000000, 0b00000000000000000000000000000000, 0b11110101000000000000000000000000, 0b00011111111000000101001000000111, 0b11110000011110100011011101000000, 0b01111110111111111111111111111111, 0b10101000000111110100101111011100, 0b11111111111111111111110000111010, 0b00000000000000000000011111111111, 0b11111111111111111111111111111110, 0b00001000111111111111111111111111, 0b00000000000000000000000000000000, 0b00001111111110000000001111111101, 0b00111110000001111111101110100000, 0b00001111111101111100011111000100, 0b11101010111101010011000111110000, 0b11101010000000000000000111010001, 0b10001110110101100101000001110101, 0b11000011111010101011111111111111, 0b11010110101111110000000000111111, 0b00011111111111111111111111010100, 0b11111111111111111111111111111111, 0b00111111111111111111111111111111, 0b11111111111111111111111111111111, 0b11111111111111111111111111111111, 0b11111111111111111111111111111111, 0b10000000001111111111111111111111, 0b11111111111111111111111111111111, 0b11111111111111111111111111111111, 0b00000000000000111111111111111111, 0b00000000000000000000000001000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00011111000000000000000000000000, 0b00011111111111100111111111111111, 0b00000011111111111111111111111110, 0b00000000000000000000000000000000, 0b00101100000110000000000000010000, 0b11100000111110000000001000000000, 0b11111000000000011111111100000000, 0b11010000111111101011111111111111, 0b11001101010100011100011101000011, 0b11111111111101010011110011100111, 0b01000000000111111001101111111111, 0b00000000111010111111110010000111, 0b11111111111000000000001111111111, 0b11111111111111111111111111111111, 0b11111111111011110111111111111111, 0b11111111111111111111111111111111, 0b11111111111111111111111111111111, 0b00000000000001100000001111111111, 0b00000000000000000000000000000000, 0b11100000000000000000000000000000, 0b00000000000000000000000000000001, 0b11111111111111111111110000010000, 0b00000111111111111111111111111111, 0b11111111111111111110100000000000, 0b11111111111111111111111110111111, 0b00000011100001111111111111111111, 0b00000000001100000000000000000000, 0b01100110001011010000000000000000, 0b11111111111111111111111111111111, 0b00000111111111111111111111111111, 0b00000000000000000000000011111110, 0b11111111110100000000000000000000, 0b00000000000000000111111111101011, 0b01100000000000000000000110011100, 0b11111111111111111111111111101010, 0b11111100000000000111111111111111, 0b00000000000000000000000001111111, 0b11101111000000000000000000000000, 0b11111110111111111111111111111111, 0b11111111111111111111011111111111, 0b11000000001000000000000011011001, 0b11011111111111111111111111111111, 0b11100000011000000000011111111110, 0b00000000001111100011111111111111, 0b00011110111111000000000000000000, 0b11001111111100001001011111110100, 0b00110001110001111000011101011110, 0b00000000000000000000000001110110, 0b11111111111111111100000000000000, 0b11111111111111111111111111111111, 0b11111111111111111111111111111111, 0b11111111111111111111111111111111, 0b00111111111111111111111111111111, 0b00000000000000000000000000000000, 0b11000000000000000000000000000000, 0b00000000000000011111111111111111, 0b11101111111111110100001000000000, 0b00001010000000001111111111111111, 0b00001100000110011000000000000000, 0b01010011111111111111111111000000, 0b11000001111111111100000000000100, 0b11111111111111111111111111111111, 0b11001111110000000000111111111111, 0b11111111111111111111111111111111, 0b00001111111111111111111111011111, 0b00000011100000000000111000100000, 0b11111111111111111110000000100000, 0b11111111111001111111111111111111, 0b11111111111111111111111111111111, 0b00000000000000000000000011111111, 0b10000000000000000000000000000000, 0b11111111111111111111111111111111, 0b11111111111111111111111111001111, 0b00000000000000000111111000001111, 0b00000000000000000000000000000000, 0b11110111100000000000000000000000, 0b00111111111100001011111111111111, 0b10110111101010010000000000000000, 0b11010000111111110001011011101010, 0b10000011100000101101001011010000, 0b11111111111110000100000010111101, 0b11110011011111110100001100011111, 0b11111111111111111111111111111111, 0b11111111111111111111111111111111, 0b11111111111111111111111111111111, 0b11111111111111111111111111111111, 0b00000000000110011111111111111111, 0b00001111100000000000000000000000, 0b10000000000000001011111010000000, 0b11100100000001111000000000000000, 0b00000000000000000000000000000011, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b11111111111111111111111111111111, 0b11111111111111111111111111111011, 0b11111111111111111111111111111111, 0b11111111111111111111111111111111, 0b11111111111111111111111111111111, 0b11111111111111111111111111111111, 0b11111111111111111111111111111111, 0b00001110001111111101111001011011, 0b00011110011000011100011000111100, 0b11000000001011111111111110010001, 0b01111111111111111101101111111111, 0b00111111111111111010100001110010, 0b01111111111000000100000001011000, 0b00000000001110000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000111000000000000000, 0b01000001000100000011101000000001, 0b11001111100110110000000000111010, 0b00000000000000000000000000000000, 0b11111000000000000100000000000000, 0b01000000001000000001111110111111, 0b11111111111011100111000000000000, 0b11111111111111111111111111111111, 0b00001111111111111111111111111111, 0b11111111110000000000000000000000, 0b11111111111111111111111111111111, 0b11111111111111111111111111111111, 0b11111111111111111111111100001111, 0b11111111111111111111111111111111, 0b01111111101111011111111111111111, 0b00100001000000000000000000000010, 0b10110111011001100111011000001000, 0b00000000001000000000000010000111, 0b10000100000000011000001111100000, 0b00000000000000000000000000000100, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b11111111111111111000000000000000, 0b11111111111111111111111111111111, 0b11111111111111111111111111111111, 0b11111111111111111111111111111111, 0b11111111111111111111111111111111, 0b11010111111111111111111111111101, 0b11111111111111111111111111111111, 0b11111111111111111111111111111111, 0b11111100000011111111111111111111, 0b11111111111111111111111111110011, 0b11111111111111111111100011111111, 0b11111111111111111000000111111111, 0b11111111111111000011111111111111, 0b11111111111111111111111111111111, 0b11111111111111111111111111111111, 0b11111111111111111111110111111111, 0b00000000111101111111111111101111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b11111111111111100000000000000000, 0b00000001111111111111111111111111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b11111111111111111111111111111111, 0b11111111111111111111111111111111, 0b11111111111111111111111111111111, 0b11111111111111111111111111111111, 0b11111111111111111111111111111111, 0b11111111111111111111111111111111, 0b11111111111111111111111111111111, 0b11111111111111111111111111111111, 0b11111111000000011111110111111111, 0b11111111111111111111111111111111, 0b11111111111111101111111111111111, 0b00000111111111111111111111111111, 0b00001111111111111111111111111111, 0b01110100111101000100000111110000, 0b10101000000000000000000000000001, 0b00000000111101000000000000000011, 0b00000000111111000000000000000000, 0b00001001000111000000000000000000, 0b00100010100000100000000000000000, 0b11111111111110001100000000100100, 0b11111111111111111111111111111111, 0b01110000011101100011111001111010, 0b11111000000000000000000000011110, 0b11000001111101100000111111111111, 0b00000000011111111111111111101110, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b11111111111111111111111100000000, 0b11111110001111111111111111111111, 0b11111111111111111111111111111111, 0b11111111111111111111111111111111, 0b01010111111111111111111111111111, 0b01010101010101010101010101010101, 0b01010101000101010101010101010101, 0b01010101010101010101010101010101, 0b10101010101010000101010101010101, 0b01111010111111111111111111111010, 0b00000000111010101101100000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b10000000000000111100000000000000, 0b11110000000000000000000000000101, 0b11111111111111111111111011111111, 0b11111111111111111111111111111111, 0b11111101101101101100111111100001, 0b11111111111111111111111111111111, 0b11111111111111111111111111111111, 0b11111111111111111111111111111111, 0b00000000000000000000000000011111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000101011000000000000, 0b01111011000000100000000000100000, 0b11000011111111010000111111011000, 0b11111011100011110110111001111001, 0b11001101111111110110000111100111, 0b00000101011110110000000001111110, 0b11111111111111110000000000000000, 0b11111111110111111111111111111111, 0b11111111111111111111111111111111, 0b00100011011111111111111111111111, 0b00000000000000000000000000000001, 0b00000000000000000000000000000000, 0b11111111000000000000000000000000, 0b11111111111111111111111111111111, 0b11111111111111111111111111111111, 0b11111111111111111111111111111111, 0b11111111111111111111111111111111, 0b11111111111111111111111111111111, 0b00000111111111111111111111111111, 0b00000000000000000000000000000000, 0b11111111111111111111111111111111, 0b00000000001111111111111111111111, 0b00000000010000000000000000000001, 0b00000011100000000000000000000000, 0b00000000000000000000001111101010, 0b11111111111111110000000000000000, 0b11111111111111111111111111111111, 0b11111111111111111111111111111111, 0b11111111111111111111111111111111, 0b11111111111111111111111111111111, 0b11111111111111111111111111111111, 0b11111111111111111111111111111111, 0b10111111111111111111111111111111, 0b11111111111111111100111111111111, 0b11111111111111111111111111111111, 0b11111111111111111111111111111111, 0b11111111111111111111111111111111, 0b11111111111111111111111111111111, 0b11111111111111111111111111111111, 0b11111111111111111111111111111111, 0b11111111111111111111111111111111, 0b11111111111111111111111111111111, 0b11111111111111111111111111111111, 0b01111111111111111111111111111111, 0b11111111111111111111111111111111, 0b11111111111111111111111111111111, 0b11111111111111111110011111111111, 0b11101111111111111111000111111111, 0b11111111111111111111111111111111, 0b11111111111111111111111111111111, 0b11111111111111111111111111111111, 0b11111111111111111111111111111111, 0b11110000000001111111111111111111, 0b00001111111111111111111111111111, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00100000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000, 0b00000000000000000000000000000000