(Z3解密, 数据长度, Z3表达式问题)

查壳

无壳, 为Linux上的程序

运行

Untitled

前面是一堆的数据组成了一个猫头鹰(?)和一只猫的形状, 其实到了后面, 这些数据就变成了两个加密用的box.

其实在记事本上看图案更清晰一点

Untitled

使用IDA进行分析

主函数

Untitled

跟进加密函数

Untitled

分析加密函数

Untitled

大概就是用data里的一些元素乘以每个输入的元素, 然后叠加, 最后变成新的input

用python复现一下就是

#准备data

data = [0]
midput = [0]
output = [0]

for i in range(64):
  for j in range(64):
    data[(64 * i) + j] = data[(i * 64) + j] / 10

#开始加密

for k in range(64):

    num = 0

    for m in range(64):
        num += midput[m] * data[(64 * m) + k]

    output[k] = num

for n in range(64):
    midput[n] = output[n]

解题步骤

  • 提取data1(owl) 和 data2(cat)中准备后的数据, 以及output的数据(以为是32位的, 所以要注意小端的问题)
  • 使用z3

提取数据

提取data1和data2都比较直接

而output的数据要反过来

output = [0xD4, 0x15, 0x5D, 0x02, 0xB4, 0x73, 0x4C, 0x02, 0x71, 0xCF,
  0x43, 0x02, 0x4C, 0x13, 0x30, 0x02, 0xFE, 0x2C, 0x13, 0x02,
  0xCA, 0x2F, 0xBE, 0x01, 0x26, 0xCA, 0x42, 0x01, 0x55, 0x19,
  0xD6, 0x00, 0xA8, 0x27, 0x94, 0x00, 0x74, 0x86, 0x9B, 0x00,
  0x32, 0xC8, 0x90, 0x00, 0xC7, 0x12, 0x88, 0x00, 0x58, 0xBA,
  0x80, 0x00, 0xE1, 0x81, 0x79, 0x00, 0x68, 0xAB, 0x72, 0x00,
  0x4B, 0xCB, 0x74, 0x00, 0x3F, 0x3F, 0x72, 0x00, 0x58, 0xC2,
  0x7C, 0x00, 0x5C, 0xCD, 0x89, 0x00, 0xA2, 0xE2, 0x88, 0x00,
  0x06, 0x89, 0x8E, 0x00, 0xA0, 0x88, 0x8B, 0x00, 0x8D, 0xEC,
  0x8E, 0x00, 0x73, 0x35, 0x8F, 0x00, 0x6F, 0x74, 0x8B, 0x00,
  0x82, 0x2C, 0x91, 0x00, 0xF2, 0x7C, 0x8D, 0x00, 0x99, 0x20,
  0x83, 0x00, 0xA5, 0x45, 0x7F, 0x00, 0xFF, 0x5A, 0x68, 0x00,
  0xD2, 0xA4, 0x50, 0x00, 0xE2, 0x6F, 0x52, 0x00, 0x3B, 0x92,
  0x58, 0x00, 0xC1, 0x9E, 0x52, 0x00, 0x1A, 0x6D, 0x51, 0x00,
  0x53, 0x74, 0x5B, 0x00, 0xE6, 0x28, 0x70, 0x00, 0xFA, 0xC6,
  0x89, 0x00, 0xAE, 0xD6, 0xA5, 0x00, 0x14, 0x7A, 0xD3, 0x00,
  0xAA, 0xCF, 0xB8, 0x00, 0x4B, 0xBB, 0xB0, 0x00, 0xA4, 0x69,
  0xAE, 0x00, 0x4B, 0x15, 0xA1, 0x00, 0xE7, 0xCB, 0x9D, 0x00,
  0x20, 0xDC, 0xA1, 0x00, 0xE3, 0x07, 0xAA, 0x00, 0xB1, 0x5C,
  0xB2, 0x00, 0x98, 0xFD, 0xB2, 0x00, 0x29, 0x2F, 0xB1, 0x00,
  0xA0, 0x28, 0xE4, 0x00, 0x84, 0x21, 0x1B, 0x01, 0x22, 0x57,
  0x61, 0x01, 0xF3, 0x02, 0xA5, 0x01, 0x9D, 0xAA, 0xC0, 0x01,
  0x9F, 0x16, 0xD4, 0x01, 0x76, 0x8B, 0xEF, 0x01, 0xBB, 0xE5,
  0x33, 0x02, 0xF0, 0xA6, 0x75, 0x02, 0x35, 0xCA, 0xA9, 0x02,
  0x4C, 0x90, 0xA8, 0x02, 0xEF, 0x94, 0xA1, 0x02, 0x39, 0x6F,
  0x92, 0x02, 0xC3, 0x92, 0x8E, 0x02]

for i in range(0, len(output), 4):
    print('0x', end = '')
    print('%02X' % output[i + 3], end = '')
    print('%02X' % output[i + 2], end='')
    print('%02X' % output[i + 1], end='')
    print('%02X' % output[i], end='')
    print(', ', end = '')

获得output = [0x025D15D4, 0x024C73B4, 0x0243CF71, 0x0230134C, 0x02132CFE, 0x01BE2FCA, 0x0142CA26, 0x00D61955, 0x009427A8, 0x009B8674, 0x0090C832, 0x008812C7, 0x0080BA58, 0x007981E1, 0x0072AB68, 0x0074CB4B, 0x00723F3F, 0x007CC258, 0x0089CD5C, 0x0088E2A2, 0x008E8906, 0x008B88A0, 0x008EEC8D, 0x008F3573, 0x008B746F, 0x00912C82, 0x008D7CF2, 0x00832099, 0x007F45A5, 0x00685AFF, 0x0050A4D2, 0x00526FE2, 0x0058923B, 0x00529EC1, 0x00516D1A, 0x005B7453, 0x007028E6, 0x0089C6FA, 0x00A5D6AE, 0x00D37A14, 0x00B8CFAA, 0x00B0BB4B, 0x00AE69A4, 0x00A1154B, 0x009DCBE7, 0x00A1DC20, 0x00AA07E3, 0x00B25CB1, 0x00B2FD98, 0x00B12F29, 0x00E428A0, 0x011B2184, 0x01615722, 0x01A502F3, 0x01C0AA9D, 0x01D4169F, 0x01EF8B76, 0x0233E5BB, 0x0275A6F0, 0x02A9CA35, 0x02A8904C, 0x02A194EF, 0x02926F39, 0x028E92C3]

z3解出答案

from z3 import *

data1 = [0x10, 0x10, 0x10, 0x10, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf,

0xf, 0xf, 0xf, 0xf, 0xf, 0x10, 0x12, 0x13, 0x11, 0x11,

0x11, 0x11, 0x10, 0xf, 0x12, 0x14, 0x14, 0x12, 0x10, 0x13,

0x13, 0x12, 0x14, 0x14, 0x13, 0x10, 0x10, 0x10, 0x10, 0x10,

0x10, 0x10, 0x10, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,

0x11, 0x11, 0x11, 0x11, 0x11, 0x12, 0x11, 0x11, 0x11, 0x11,

0x11, 0x11, 0x12, 0x10, 0x10, 0x10, 0x10, 0xf, 0xf, 0xf,

0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0x10, 0xf,

0xf, 0x10, 0xf, 0xe, 0xd, 0xb, 0xb, 0xd, 0xd, 0xf,

0x11, 0x12, 0xc, 0xc, 0xe, 0xc, 0x10, 0x11, 0xe, 0xe,

0x12, 0x11, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,

0x10, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,

0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x12, 0x10, 0x10, 0x10,

0x10, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf,

0x10, 0x10, 0x10, 0xe, 0xe, 0xd, 0x9, 0xa, 0xb, 0xa,

0xb, 0x11, 0x9, 0xb, 0xd, 0xf, 0xa, 0x9, 0x9, 0xa,

0xd, 0xf, 0xd, 0x11, 0x11, 0x13, 0x10, 0x10, 0x10, 0x10,

0x10, 0x10, 0x10, 0x10, 0x10, 0x11, 0x11, 0x11, 0x11, 0x11,

0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,

0x12, 0x10, 0x10, 0x10, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf,

0xf, 0xf, 0xf, 0x10, 0x10, 0xe, 0xe, 0xd, 0xe, 0xd,

0xf, 0x14, 0x10, 0xe, 0xe, 0x12, 0x10, 0x9, 0xe, 0xe,

0xb, 0xb, 0x7, 0x7, 0xa, 0xc, 0xf, 0x12, 0x14, 0x13,

0x12, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x11, 0x11,

0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,

0x11, 0x11, 0x11, 0x11, 0x12, 0x10, 0x10, 0xf, 0xf, 0xf,

0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0x10, 0x11, 0xf, 0xd,

0xd, 0xd, 0x10, 0xe, 0x11, 0x12, 0x10, 0xe, 0x11, 0xe,

0x11, 0xc, 0xa, 0xe, 0xe, 0xa, 0xb, 0x7, 0x8, 0xc,

0x11, 0x15, 0x14, 0x15, 0x15, 0x11, 0x10, 0x10, 0x10, 0x10,

0x10, 0x10, 0x10, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,

0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x10,

0x10, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf,

0x12, 0x11, 0xd, 0xc, 0x9, 0x9, 0x8, 0x7, 0xd, 0x11,

0x12, 0xf, 0xe, 0xf, 0x11, 0xf, 0xa, 0xd, 0xc, 0x9,

0xa, 0x9, 0xc, 0xe, 0x11, 0x14, 0x14, 0x15, 0x14, 0x11,

0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x11, 0x11,

0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,

0x11, 0x11, 0x11, 0x10, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf,

0xf, 0xf, 0x10, 0x13, 0x13, 0x11, 0xc, 0xb, 0xa, 0xb,

0x7, 0x7, 0x7, 0x9, 0xe, 0xf, 0xb, 0x9, 0xe, 0x11,

0xd, 0xa, 0xd, 0xc, 0xc, 0xf, 0x11, 0xf, 0x10, 0x11,

0x12, 0x12, 0x12, 0x12, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,

0x10, 0x10, 0x10, 0x10, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,

0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x10, 0xf, 0xf,

0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0x10, 0x13, 0x10, 0x10,

0xb, 0x7, 0xf, 0xd, 0xb, 0x9, 0x7, 0x7, 0x8, 0x8,

0x8, 0x9, 0xa, 0xd, 0x11, 0xf, 0xf, 0xd, 0x10, 0x13,

0x11, 0xe, 0xf, 0xf, 0x10, 0xe, 0x10, 0x11, 0x10, 0x10,

0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x11, 0x11,

0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,

0x11, 0x10, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf,

0x11, 0x13, 0x10, 0xe, 0x9, 0x8, 0x7, 0x6, 0xb, 0xb,

0xa, 0x6, 0x4, 0x1, 0x2, 0x2, 0x2, 0x7, 0xe, 0x11,

0x10, 0xf, 0x10, 0x13, 0x11, 0x9, 0x5, 0x9, 0xd, 0xd,

0x12, 0x14, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,

0x10, 0x10, 0x10, 0x10, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,

0x11, 0x11, 0x11, 0x11, 0x11, 0xf, 0xf, 0xf, 0xf, 0xf,

0xf, 0xf, 0xf, 0x10, 0x10, 0xe, 0xb, 0xb, 0x9, 0x7,

0x8, 0x8, 0x7, 0x9, 0xb, 0x6, 0x2, 0x5, 0x8, 0x9,

0x6, 0x1, 0x8, 0xe, 0x11, 0xf, 0xe, 0x12, 0x8, 0x8,

0xa, 0x5, 0xb, 0xe, 0x11, 0x14, 0x11, 0x10, 0x10, 0x10,

0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x11, 0x11,

0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0xf,

0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xe, 0x10,

0xc, 0xd, 0x8, 0xa, 0x9, 0x8, 0x9, 0xb, 0x9, 0x6,

0x6, 0x0, 0x3, 0x8, 0x5, 0x6, 0x4, 0xc, 0x11, 0x12,

0x11, 0xf, 0x7, 0x8, 0x7, 0xf, 0xe, 0x10, 0x12, 0x12,

0x12, 0x11, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,

0x10, 0x10, 0x10, 0x10, 0x11, 0x11, 0x11, 0x11, 0x10, 0x10,

0x11, 0x11, 0x11, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf,

0x10, 0x10, 0xc, 0xe, 0xe, 0xd, 0xa, 0x9, 0xa, 0xa,

0xb, 0xb, 0xa, 0x4, 0x6, 0x0, 0x0, 0x0, 0x0, 0x9,

0x4, 0xa, 0x10, 0x13, 0x12, 0xc, 0x4, 0x0, 0x0, 0x9,

0xf, 0x11, 0x11, 0x12, 0x12, 0x11, 0x10, 0x10, 0x10, 0x10,

0x10, 0x10, 0x10, 0x12, 0x15, 0x15, 0x17, 0x13, 0x11, 0x11,

0x11, 0x11, 0x11, 0x10, 0x11, 0x11, 0x11, 0xf, 0xf, 0xf,

0xf, 0xf, 0xf, 0xf, 0x10, 0xe, 0xf, 0x10, 0xb, 0x9,

0xa, 0xa, 0xa, 0xa, 0xa, 0xc, 0xc, 0x6, 0x7, 0x0,

0x0, 0x0, 0x2, 0xa, 0x4, 0xc, 0x10, 0x10, 0x12, 0x11,

0x7, 0x0, 0x0, 0xa, 0x10, 0x12, 0x12, 0x15, 0x14, 0x12,

0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x15, 0x14, 0x11, 0x10,

0x12, 0x13, 0x15, 0x11, 0x10, 0x10, 0x10, 0x10, 0x11, 0x10,

0x11, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xe, 0x10,

0x11, 0xf, 0xd, 0xb, 0xb, 0xb, 0x8, 0x9, 0xc, 0xe,

0xe, 0xc, 0x6, 0x7, 0x2, 0x4, 0xb, 0x6, 0x5, 0xd,

0xf, 0x11, 0x12, 0x12, 0xe, 0x6, 0x7, 0xd, 0x12, 0x11,

0xe, 0x10, 0x14, 0x10, 0x10, 0x10, 0xf, 0x10, 0x10, 0x12,

0x14, 0x10, 0x10, 0x10, 0x10, 0x10, 0x15, 0x10, 0x10, 0x10,

0x10, 0x10, 0x10, 0x10, 0x11, 0xf, 0xf, 0xf, 0xf, 0xf,

0xf, 0xf, 0xd, 0xf, 0xe, 0xd, 0xb, 0xa, 0xa, 0xa,

0xb, 0x9, 0xb, 0xd, 0xd, 0xf, 0xc, 0x6, 0xa, 0xa,

0x5, 0x9, 0xa, 0xd, 0xe, 0xc, 0x13, 0x11, 0xe, 0xc,

0xb, 0xe, 0x15, 0x12, 0x11, 0x12, 0x13, 0x12, 0x10, 0xf,

0xf, 0x10, 0x10, 0x14, 0x11, 0x10, 0x10, 0x10, 0x10, 0x10,

0x15, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x11, 0xf,

0xf, 0xf, 0xf, 0xf, 0xf, 0x10, 0xd, 0xc, 0xb, 0xa,

0x9, 0xa, 0x9, 0xa, 0x8, 0x7, 0x8, 0xb, 0xd, 0xf,

0x10, 0xe, 0xb, 0xb, 0xc, 0xa, 0xa, 0xc, 0xc, 0xa,

0x12, 0x10, 0x13, 0x10, 0x10, 0x11, 0x14, 0x11, 0x10, 0xe,

0x12, 0x12, 0x10, 0xf, 0xf, 0xf, 0x10, 0x16, 0x10, 0x10,

0x10, 0x10, 0x10, 0x10, 0x15, 0x10, 0x10, 0x10, 0x10, 0x10,

0x10, 0x10, 0x11, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0x10,

0xe, 0xa, 0x8, 0x8, 0x8, 0x8, 0x7, 0xa, 0x8, 0x5,

0x6, 0x7, 0xc, 0x10, 0xf, 0xf, 0xd, 0xb, 0xa, 0x5,

0x6, 0xa, 0xb, 0x7, 0xf, 0xf, 0xe, 0xb, 0x11, 0x11,

0x11, 0x11, 0x10, 0x10, 0xf, 0x10, 0xf, 0xf, 0xf, 0xf,

0x10, 0x15, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x15, 0x10,

0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x11, 0xf, 0xf, 0xf,

0xf, 0xf, 0xf, 0xf, 0xe, 0x9, 0x7, 0x7, 0xa, 0x9,

0x6, 0xa, 0xc, 0x6, 0x3, 0x7, 0xa, 0xd, 0x10, 0xa,

0x6, 0x6, 0x8, 0x6, 0x3, 0x2, 0x5, 0x3, 0x9, 0xf,

0xb, 0x7, 0x8, 0xd, 0x12, 0xe, 0xf, 0x10, 0x10, 0x10,

0xf, 0xf, 0xf, 0xf, 0x10, 0x15, 0x10, 0x10, 0x10, 0x10,

0x10, 0x11, 0x15, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,

0x11, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0x10, 0xd, 0x9,

0xa, 0xb, 0xa, 0x8, 0x4, 0x8, 0xc, 0x9, 0x7, 0x6,

0x6, 0xc, 0xd, 0x7, 0x7, 0x7, 0x9, 0x9, 0x6, 0x4,

0x1, 0x1, 0x4, 0xd, 0xc, 0x9, 0x5, 0x5, 0xa, 0xd,

0xd, 0x10, 0x12, 0x10, 0xf, 0xf, 0xf, 0xf, 0xf, 0x11,

0x16, 0x14, 0x13, 0x13, 0x14, 0x16, 0x11, 0x10, 0x10, 0x10,

0x10, 0x10, 0x10, 0x10, 0x11, 0xf, 0xf, 0xf, 0xf, 0xf,

0xf, 0x10, 0xc, 0xa, 0xf, 0xd, 0xa, 0xa, 0x6, 0x3,

0x7, 0xc, 0x9, 0x5, 0x5, 0xb, 0xb, 0x9, 0xb, 0xd,

0xd, 0xa, 0x7, 0x5, 0x1, 0x1, 0x2, 0xe, 0x12, 0x11,

0x9, 0x6, 0x8, 0xa, 0xe, 0xf, 0x12, 0x10, 0xf, 0xf,

0xf, 0xf, 0xf, 0xf, 0x10, 0x11, 0x12, 0x12, 0x12, 0x10,

0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0xf,

0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xc, 0xd, 0xd, 0xf,

0xa, 0xb, 0x9, 0x4, 0x7, 0xb, 0xa, 0x9, 0x5, 0xa,

0xb, 0xe, 0xd, 0xe, 0xd, 0xa, 0x9, 0x8, 0x7, 0x5,

0x3, 0x9, 0xf, 0x13, 0x14, 0xd, 0x9, 0x9, 0xa, 0xd,

0x13, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf,

0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,

0x10, 0x10, 0x10, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf,

0x11, 0x11, 0xb, 0xe, 0xa, 0xa, 0x7, 0x6, 0x3, 0x6,

0xa, 0xc, 0x6, 0x7, 0xe, 0xd, 0xe, 0xc, 0x10, 0xe,

0xc, 0x8, 0x6, 0x5, 0x4, 0x6, 0x9, 0x11, 0x14, 0x14,

0xb, 0x6, 0x9, 0xc, 0x15, 0x10, 0xf, 0xf, 0xf, 0xf,

0xf, 0xf, 0xf, 0xf, 0xf, 0x10, 0x10, 0x10, 0x10, 0x10,

0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0xf, 0xf, 0xf,

0xf, 0xf, 0xf, 0xf, 0x13, 0x11, 0x9, 0xb, 0x8, 0x6,

0x8, 0x9, 0x5, 0x5, 0x6, 0x8, 0x9, 0xb, 0xa, 0xd,

0xb, 0xc, 0xd, 0x11, 0xf, 0x9, 0x6, 0x3, 0x4, 0x6,

0x10, 0x12, 0x13, 0x14, 0xf, 0x7, 0x8, 0xd, 0x13, 0x11,

0x10, 0x10, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf,

0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,

0x10, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0x12, 0xd,

0xb, 0x9, 0x7, 0x6, 0x9, 0xa, 0xa, 0xb, 0xe, 0x9,

0x9, 0xe, 0xa, 0xc, 0x8, 0x8, 0xd, 0xc, 0xf, 0xb,

0x6, 0x9, 0x7, 0x8, 0x11, 0x15, 0x15, 0x15, 0x10, 0xc,

0xf, 0xf, 0x12, 0x13, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf,

0xf, 0xf, 0xf, 0xf, 0xf, 0x10, 0x10, 0x10, 0x10, 0x10,

0x10, 0x10, 0x10, 0x10, 0x10, 0xf, 0xf, 0xf, 0xf, 0xf,

0xf, 0xf, 0xe, 0xe, 0xe, 0x9, 0x6, 0x7, 0xa, 0xe,

0xc, 0x9, 0xb, 0xb, 0xd, 0xc, 0x8, 0x6, 0x7, 0x8,

0xc, 0xa, 0x9, 0xb, 0xe, 0xc, 0x8, 0x6, 0xa, 0xb,

0xb, 0x11, 0x13, 0xe, 0xe, 0x10, 0x12, 0x12, 0x12, 0xf,

0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf,

0xf, 0xf, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0xf,

0xf, 0xf, 0xf, 0xf, 0xf, 0xe, 0x11, 0xe, 0xf, 0xb,

0x7, 0x6, 0xb, 0xa, 0x7, 0x4, 0x7, 0xa, 0xe, 0xe,

0xc, 0x8, 0x6, 0x3, 0x4, 0x3, 0x2, 0x6, 0x8, 0x5,

0x5, 0x2, 0x6, 0x6, 0x7, 0xd, 0x11, 0xe, 0xa, 0xd,

0xf, 0xf, 0x11, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf,

0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0x10, 0x10, 0x10, 0x10,

0x10, 0x10, 0x10, 0xf, 0xe, 0xe, 0xe, 0xf, 0xf, 0xf,

0x10, 0xb, 0xe, 0xd, 0xa, 0x8, 0x5, 0x7, 0x5, 0x3,

0x4, 0x8, 0xe, 0x10, 0x9, 0x5, 0x7, 0x8, 0x8, 0x5,

0x2, 0x6, 0x8, 0x6, 0x5, 0x7, 0xa, 0x5, 0x5, 0xc,

0xc, 0x8, 0x8, 0x8, 0xd, 0x10, 0x11, 0xf, 0xf, 0xf,

0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf,

0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0xf, 0xe, 0xe,

0xe, 0xe, 0xe, 0xf, 0xa, 0x8, 0xc, 0xb, 0x10, 0x7,

0x5, 0x3, 0x4, 0x2, 0x2, 0x5, 0x9, 0xd, 0xa, 0x3,

0x4, 0xa, 0xd, 0xa, 0x5, 0x6, 0x9, 0x6, 0x5, 0xc,

0x8, 0x5, 0x6, 0xc, 0x9, 0x6, 0x6, 0x5, 0xa, 0xf,

0x10, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf,

0xf, 0xf, 0xf, 0xf, 0xf, 0x10, 0x10, 0x10, 0x10, 0x10,

0x10, 0xf, 0xe, 0xe, 0xe, 0xe, 0xe, 0xc, 0x8, 0x6,

0x8, 0xd, 0xf, 0x4, 0x4, 0x3, 0x2, 0x0, 0x1, 0x2,

0x4, 0x8, 0x8, 0x2, 0x3, 0x7, 0xd, 0xb, 0xa, 0x7,

0x9, 0x5, 0x9, 0xb, 0x6, 0x4, 0xa, 0xa, 0x8, 0x4,

0x7, 0x4, 0x9, 0xd, 0x10, 0xf, 0xf, 0xf, 0xf, 0xf,

0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf,

0xf, 0x10, 0x10, 0x10, 0x10, 0xe, 0xe, 0xe, 0xe, 0xf,

0xc, 0x9, 0x6, 0x5, 0x7, 0xd, 0xc, 0x2, 0x2, 0x4,

0x1, 0x0, 0x0, 0x1, 0x4, 0x8, 0x7, 0x2, 0x3, 0x5,

0x7, 0xc, 0xf, 0xa, 0x9, 0x6, 0xa, 0x8, 0x3, 0x3,

0xc, 0x8, 0x4, 0x5, 0x8, 0x4, 0x7, 0xd, 0xf, 0xf,

0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf,

0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0x10, 0x10, 0x10, 0xe,

0xe, 0xe, 0xe, 0xd, 0xa, 0x6, 0x5, 0x6, 0x7, 0xf,

0x8, 0x1, 0x2, 0x4, 0x2, 0x2, 0x1, 0x1, 0x4, 0x5,

0x5, 0x5, 0x8, 0x5, 0x5, 0xc, 0x10, 0xb, 0xc, 0xb,

0xa, 0x7, 0x5, 0x5, 0xb, 0x5, 0x5, 0x5, 0x9, 0x8,

0xb, 0xb, 0xf, 0xf, 0xe, 0xf, 0x10, 0x15, 0x10, 0xf,

0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0x14, 0xf, 0xf, 0xf,

0xf, 0xf, 0x10, 0xe, 0xe, 0xe, 0xf, 0xb, 0x8, 0x5,

0x6, 0x6, 0x9, 0xf, 0x4, 0x2, 0x5, 0x4, 0x1, 0x5,

0x3, 0x1, 0x5, 0x4, 0x4, 0x7, 0x8, 0x6, 0x7, 0xb,

0x10, 0xd, 0xf, 0xc, 0x9, 0x7, 0x8, 0xb, 0x8, 0x7,

0x7, 0x5, 0x9, 0xc, 0xc, 0xa, 0x12, 0xf, 0xe, 0xf,

0x15, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf,

0x15, 0xf, 0xf, 0xf, 0xf, 0xf, 0x10, 0xe, 0xe, 0xe,

0xd, 0x8, 0x7, 0x5, 0x5, 0x8, 0xe, 0xb, 0x5, 0xb,

0x9, 0x2, 0x4, 0x7, 0x3, 0x2, 0x4, 0x2, 0x3, 0x6,

0x8, 0x7, 0x8, 0xb, 0xc, 0x10, 0x10, 0xd, 0xb, 0x8,

0x9, 0xc, 0xa, 0x7, 0xc, 0x4, 0x9, 0x10, 0xa, 0x8,

0x12, 0xf, 0xe, 0x12, 0x12, 0xf, 0xf, 0xf, 0xf, 0xf,

0xf, 0xf, 0xf, 0xf, 0x15, 0x10, 0xf, 0xf, 0xf, 0xf,

0x10, 0xe, 0xe, 0xe, 0x9, 0x7, 0x5, 0x4, 0x7, 0xf,

0xf, 0x8, 0xc, 0xd, 0x3, 0x2, 0x5, 0x7, 0x2, 0x4,

0x6, 0x2, 0x2, 0x5, 0x9, 0xb, 0xb, 0xc, 0xd, 0xe,

0x11, 0x10, 0xc, 0xb, 0xc, 0xd, 0xa, 0x9, 0xf, 0x3,

0x7, 0x10, 0xd, 0x8, 0x11, 0x10, 0xf, 0x16, 0xe, 0xf,

0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0x15, 0x10,

0xf, 0xf, 0xf, 0xf, 0x10, 0xe, 0xe, 0xb, 0x9, 0x4,

0x3, 0x9, 0xe, 0xb, 0x8, 0x6, 0xe, 0x8, 0x2, 0x2,

0x6, 0x4, 0x2, 0x6, 0x7, 0x3, 0x4, 0x4, 0x9, 0xd,

0xd, 0xd, 0xc, 0xc, 0x10, 0x11, 0xb, 0xd, 0xe, 0xc,

0xb, 0x9, 0xf, 0x3, 0x4, 0xc, 0x11, 0x9, 0xf, 0x11,

0x11, 0x13, 0xe, 0xf, 0xf, 0xf, 0x13, 0xf, 0xf, 0xf,

0xf, 0xf, 0x15, 0x10, 0xf, 0xf, 0xf, 0xf, 0x10, 0xe,

0xe, 0xa, 0xb, 0x4, 0x2, 0xc, 0x7, 0xe, 0x4, 0x6,

0xe, 0xc, 0x4, 0x1, 0x4, 0x3, 0x4, 0x5, 0x7, 0x5,

0x6, 0x3, 0x6, 0xc, 0xc, 0xb, 0xa, 0xc, 0xc, 0x11,

0xb, 0xe, 0x10, 0x8, 0x9, 0xa, 0x11, 0x7, 0x5, 0x7,

0x11, 0xa, 0x10, 0x12, 0x12, 0x12, 0xe, 0xe, 0xf, 0xf,

0x18, 0x11, 0xf, 0xf, 0xf, 0xf, 0x15, 0xf, 0xf, 0xf,

0xf, 0xf, 0x10, 0xe, 0xd, 0xc, 0x7, 0x5, 0x5, 0x7,

0xa, 0xe, 0x5, 0x5, 0xa, 0xe, 0x3, 0x1, 0x4, 0x6,

0x4, 0x2, 0x8, 0x8, 0x7, 0x2, 0x5, 0x8, 0xa, 0xa,

0x9, 0xc, 0xa, 0x10, 0xb, 0xd, 0xd, 0x6, 0x7, 0xa,

0x11, 0xe, 0x7, 0x5, 0xd, 0x9, 0x10, 0x12, 0xf, 0x16,

0x12, 0x10, 0x11, 0x13, 0x15, 0x14, 0xf, 0xf, 0xf, 0xf,

0x16, 0xf, 0xf, 0xf, 0xf, 0xf, 0x10, 0xe, 0xd, 0xf,

0x5, 0x1, 0x7, 0x5, 0xa, 0x7, 0x6, 0x6, 0xd, 0xa,

0x1, 0x1, 0x6, 0x8, 0x3, 0x2, 0x8, 0x9, 0x8, 0x3,

0x3, 0x7, 0x9, 0x8, 0x8, 0xa, 0x9, 0xc, 0xc, 0xa,

0xa, 0x5, 0x5, 0x8, 0xf, 0x12, 0x5, 0x8, 0xb, 0xb,

0x11, 0x10, 0xe, 0xf, 0x12, 0x13, 0x13, 0x12, 0xf, 0x14,

0x15, 0x13, 0x14, 0x16, 0x12, 0xf, 0xf, 0xf, 0xf, 0xf,

0x10, 0xe, 0xd, 0xc, 0x4, 0x9, 0x2, 0x5, 0x9, 0x9,

0x6, 0x8, 0xa, 0x8, 0x2, 0x5, 0x7, 0x6, 0x1, 0x2,

0x6, 0x7, 0x9, 0x5, 0x1, 0x5, 0x9, 0x5, 0x4, 0x8,

0x9, 0xf, 0xa, 0x7, 0x5, 0x3, 0x4, 0x6, 0xd, 0x10,

0x9, 0xb, 0xf, 0xf, 0x13, 0x10, 0xe, 0xe, 0xe, 0xe,

0xe, 0xf, 0xf, 0xf, 0x10, 0x11, 0x11, 0xf, 0xf, 0xf,

0xf, 0xf, 0xf, 0xf, 0xf, 0xe, 0xd, 0xa, 0x5, 0x9,

0x3, 0x5, 0x8, 0xd, 0x9, 0xb, 0xb, 0xa, 0x6, 0x5,

0x6, 0x4, 0x2, 0x3, 0x4, 0x4, 0xa, 0x8, 0x1, 0x3,

0xa, 0x7, 0x3, 0x8, 0xa, 0xa, 0xa, 0x3, 0x3, 0x4,

0x3, 0x7, 0xb, 0xd, 0xa, 0xe, 0xf, 0x13, 0x12, 0x10,

0xe, 0xe, 0xe, 0xe, 0xe, 0xe, 0xf, 0xf, 0xf, 0xf,

0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0x10, 0xd,

0xd, 0xe, 0xc, 0xc, 0x5, 0x6, 0xd, 0xe, 0xb, 0xb,

0xa, 0x8, 0x4, 0x5, 0x4, 0x3, 0x2, 0x6, 0x3, 0x1,

0x8, 0xb, 0x3, 0x2, 0x7, 0x9, 0x6, 0x8, 0xc, 0x8,

0x9, 0x2, 0x5, 0x5, 0x3, 0x9, 0x9, 0xb, 0xc, 0x10,

0xf, 0x12, 0x10, 0xe, 0xe, 0xe, 0xe, 0xe, 0xe, 0xe,

0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf,

0xf, 0xf, 0xf, 0xd, 0xd, 0x10, 0x11, 0xb, 0x7, 0xa,

0xf, 0xd, 0xb, 0x8, 0x7, 0x9, 0x6, 0x4, 0x6, 0x3,

0x2, 0x7, 0x7, 0x1, 0x4, 0xb, 0x6, 0x1, 0x3, 0x8,

0x8, 0x8, 0xa, 0x8, 0x3, 0x2, 0x4, 0x7, 0x6, 0xa,

0x5, 0xa, 0x10, 0x15, 0x14, 0x11, 0xe, 0xe, 0xe, 0xe,

0xe, 0xe, 0xe, 0xe, 0xe, 0xf, 0xf, 0xf, 0xf, 0xf,

0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xd, 0xd, 0x11,

0x12, 0x10, 0xb, 0x12, 0x12, 0x10, 0xd, 0x9, 0x7, 0x7,

0x2, 0x5, 0x7, 0x4, 0x2, 0x5, 0xa, 0x7, 0x1, 0xa,

0x9, 0x2, 0x1, 0x5, 0x8, 0x8, 0xa, 0x7, 0x2, 0x2,

0x4, 0x9, 0x6, 0x9, 0x6, 0x9, 0x12, 0x17, 0x15, 0xe,

0xd, 0xd, 0xe, 0xe, 0xe, 0xe, 0xe, 0xe, 0xe, 0xe,

0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf,

0xf, 0xd, 0xd, 0x11, 0x12, 0x10, 0xe, 0x16, 0x13, 0x10,

0xa, 0x8, 0x8, 0x4, 0x2, 0x5, 0x7, 0x7, 0x4, 0x3,

0x9, 0xd, 0xa, 0x6, 0xb, 0x5, 0x0, 0x3, 0x8, 0xa,

0xa, 0x4, 0x1, 0x1, 0x6, 0x5, 0x6, 0x9, 0xb, 0xa,

0x11, 0x16, 0x11, 0xd, 0xd, 0xd, 0xd, 0xe, 0xe, 0xe,

0xe, 0x14, 0xe, 0xe, 0xe, 0xf, 0xf, 0xf, 0xf, 0xf,

0xf, 0xf, 0xf, 0xf, 0xf, 0xd, 0xd, 0x12, 0x13, 0x11,

0xe, 0x13, 0xc, 0xc, 0xa, 0xa, 0x6, 0x4, 0x4, 0x7,

0x8, 0x8, 0x5, 0x2, 0x8, 0xb, 0xb, 0x9, 0xc, 0x9,

0x3, 0x3, 0x8, 0xa, 0x6, 0x3, 0x1, 0x3, 0x5, 0x2,

0x8, 0xb, 0xa, 0xd, 0xe, 0x12, 0xf, 0xd, 0xd, 0xd,

0xd, 0xd, 0xe, 0xe, 0xe, 0x14, 0xe, 0xe, 0xe, 0xe,

0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xd,

0xd, 0x10, 0x13, 0x12, 0x10, 0x11, 0x9, 0xb, 0xb, 0x9,

0x6, 0x7, 0x7, 0x8, 0x8, 0x6, 0x5, 0x1, 0x5, 0xa,

0xa, 0x8, 0x6, 0x7, 0x5, 0x4, 0x8, 0x7, 0x2, 0x3,

0x3, 0x3, 0x3, 0x4, 0x7, 0xa, 0xa, 0xd, 0xd, 0xe,

0xd, 0xd, 0xd, 0xd, 0xd, 0xd, 0xd, 0xe, 0x11, 0x12,

0xe, 0xe, 0xe, 0xe, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf,

0xf, 0xf, 0xf, 0xd, 0xd, 0xf, 0x14, 0x13, 0xf, 0x12,

0xb, 0xc, 0xa, 0x9, 0x4, 0x7, 0x6, 0x7, 0x7, 0x6,

0x4, 0x2, 0x3, 0x7, 0xa, 0xa, 0x7, 0x7, 0x4, 0x7,

0x7, 0x3, 0x3, 0x3, 0x3, 0x3, 0x5, 0x6, 0x9, 0x9,

0xd, 0xd, 0xd, 0xd, 0xd, 0xd, 0xd, 0xd, 0xd, 0xd,

0xe, 0xe, 0x13, 0xf, 0xe, 0xe, 0xe, 0xe, 0xf, 0xe,

0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xd, 0xd, 0xd,

0x13, 0x14, 0xe, 0x11, 0xe, 0xd, 0xb, 0xa, 0x4, 0x7,

0x4, 0x6, 0x6, 0x7, 0x5, 0x3, 0x4, 0x5, 0x8, 0xa,

0xa, 0x5, 0x1, 0x5, 0x2, 0x1, 0x3, 0x4, 0x2, 0x4,

0x7, 0x9, 0x8, 0xd, 0xe, 0xd, 0xd, 0xd, 0xd, 0xd,

0xd, 0xd, 0xd, 0xd, 0xe, 0xd, 0x15, 0xe, 0xe, 0xe,

0xe, 0xe, 0xe, 0xe, 0xe, 0xf, 0xf, 0xf, 0xf, 0xf,

0xf, 0xd, 0xd, 0xd, 0xe, 0xf, 0xd, 0x11, 0x11, 0xd,

0xd, 0xa, 0x3, 0x6, 0x5, 0x7, 0x6, 0x5, 0x4, 0x4,

0x3, 0x5, 0x5, 0x7, 0xa, 0x9, 0x5, 0x4, 0x3, 0x4,

0x3, 0x1, 0x3, 0x8, 0xd, 0x9, 0x8, 0xf, 0xd, 0xd,

0xd, 0xd, 0xd, 0xd, 0xd, 0xd, 0xd, 0xd, 0xd, 0xf,

0x15, 0xe, 0xe, 0xe, 0xe, 0xe, 0xe, 0xe, 0xf, 0xf,

0xf, 0xe, 0xe, 0xe, 0xf, 0xd, 0xd, 0xd, 0xd, 0xd,

0xd, 0xe, 0x12, 0xc, 0x8, 0x9, 0x3, 0x6, 0x6, 0x8,

0x8, 0x5, 0x2, 0x3, 0x2, 0x2, 0x6, 0x8, 0x7, 0x6,

0x6, 0x5, 0x3, 0x1, 0x2, 0x3, 0x8, 0xd, 0xb, 0x7,

0x10, 0xe, 0xd, 0xd, 0xd, 0xd, 0xd, 0xd, 0xd, 0xd,

0xd, 0xd, 0xd, 0x11, 0x12, 0xe, 0xe, 0xe, 0xe, 0xe,

0xe, 0xe, 0xe, 0xe, 0xe, 0xe, 0xe, 0xe, 0xf, 0xd,

0xd, 0xd, 0xd, 0xd, 0xd, 0xd, 0x10, 0xb, 0x5, 0x7,

0x5, 0x6, 0x6, 0x7, 0x7, 0x8, 0x3, 0x1, 0x4, 0x4,

0x4, 0x6, 0x9, 0x8, 0x6, 0x6, 0x4, 0x1, 0x3, 0x8,

0xa, 0x7, 0x8, 0xe, 0xe, 0xd, 0xd, 0xd, 0xd, 0xd,

0xd, 0xd, 0xd, 0xd, 0xd, 0xd, 0xd, 0x13, 0x10, 0xe,

0xe, 0xe, 0xe, 0xe, 0xe, 0xe, 0xe, 0xe, 0xe, 0xe,

0xe, 0xf, 0x12, 0xd, 0xd, 0xc, 0xd, 0xd, 0xd, 0xd,

0xd, 0xc, 0x8, 0x7, 0x9, 0x6, 0x3, 0x4, 0x6, 0x8,

0x7, 0x2, 0x2, 0x7, 0x7, 0x7, 0x7, 0x7, 0x6, 0x5,

0x3, 0x0, 0x4, 0x6, 0x3, 0x6, 0xe, 0xe, 0xd, 0xd,

0xd, 0xd, 0xd, 0xd, 0xd, 0xd, 0xd, 0xd, 0xd, 0xd,

0xd, 0x15, 0xe, 0xe, 0xe, 0x10, 0xe, 0xe, 0xe, 0xe,

0xe, 0xe, 0xe, 0xe, 0xf, 0x13, 0x14, 0xd, 0xc, 0xd,

0xd, 0xd, 0xd, 0xd, 0xd, 0xc, 0xb, 0xa, 0x9, 0xa,

0x5, 0x1, 0x2, 0x3, 0x7, 0x5, 0x2, 0x3, 0x6, 0x6,

0x6, 0x6, 0x5, 0x3, 0x1, 0x2, 0x3, 0x3, 0x5, 0x9,

0xe, 0xd, 0xd, 0xd, 0xd, 0xd, 0xd, 0xd, 0xd, 0xd,

0xd, 0xd, 0xd, 0xd, 0xd, 0x15, 0xe, 0xe, 0xe, 0x15,

0xe, 0xe, 0xe, 0x10, 0x12, 0x14, 0x12, 0xf, 0x12, 0x15,

0x15, 0xd, 0xd, 0xd, 0xd, 0xd, 0xd, 0xd, 0xd, 0xd,

0xc, 0xe, 0xe, 0xc, 0xa, 0x2, 0x3, 0x2, 0x2, 0x3,

0x4, 0x4, 0x4, 0x5, 0x5, 0x4, 0x3, 0x2, 0x2, 0x1,

0x1, 0x2, 0x6, 0xa, 0xd, 0xd, 0xd, 0xd, 0xd, 0xd,

0xd, 0xd, 0xd, 0xd, 0xd, 0xd, 0xd, 0xd, 0xe, 0x15,

0xe, 0xe, 0x10, 0x14, 0x10, 0x16, 0x17, 0x16, 0x17, 0x17,

0x18, 0x17, 0x14, 0x18, 0x16, 0xd, 0xc, 0xd, 0xc, 0xd,

0xd, 0xd, 0xd, 0xd, 0xd, 0xe, 0xe, 0xe, 0xb, 0x9,

0x8, 0x5, 0x4, 0x2, 0x4, 0x5, 0x7, 0x8, 0x9, 0x8,

0x8, 0x5, 0x3, 0x2, 0x2, 0x6, 0x4, 0xb, 0xd, 0xd,

0xd, 0xd, 0xd, 0xd, 0xd, 0xd, 0xd, 0xd, 0xd, 0xd,

0xd, 0xd, 0xd, 0x14, 0xf, 0xd, 0x15, 0xf, 0xe, 0x13,

0x16, 0x17, 0x17, 0x18, 0x18, 0x18, 0x18, 0x18, 0x15, 0xd,

0xc, 0xc, 0xd, 0xd, 0xc, 0xd, 0xd, 0xd, 0xd, 0xd,

0xf, 0xf, 0xe, 0x9, 0x7, 0x6, 0x2, 0x3, 0x7, 0x9,

0xa, 0xb, 0xb, 0xa, 0xa, 0x8, 0x4, 0x3, 0x2, 0x4,

0x5, 0xc, 0xd, 0xd, 0xd, 0xd, 0xd, 0xd, 0xd, 0xd,

0xd, 0xd, 0xd, 0xd, 0xd, 0xd, 0xd, 0xf, 0x14, 0x11,

0x13, 0xd, 0xf, 0x14, 0x15, 0x16, 0x16, 0x16, 0x13, 0x17,

0x18, 0x18, 0x18, 0xd, 0xd, 0xc, 0xd, 0xd, 0xc, 0xd,

0xd, 0xd, 0xd, 0xd, 0xd, 0xd, 0xd, 0xa, 0x6, 0x3,

0x2, 0x7, 0x8, 0xa, 0xb, 0xc, 0xc, 0xc, 0xd, 0xd,

0x5, 0x3, 0x2, 0x3, 0x8, 0xc, 0xd, 0xd, 0xd, 0xd,

0xd, 0xd, 0xd, 0xd, 0xd, 0xd, 0xd, 0xd, 0xd, 0xd,

0xd, 0xd, 0x11, 0x14, 0xe, 0xd, 0xe, 0x12, 0x13, 0x14,

0x14, 0x15, 0x14, 0x14, 0x15, 0x16, 0x14, 0xd, 0xd, 0xc,

0xd, 0xd, 0xd, 0xd, 0xd, 0xd, 0xd, 0xd, 0xd, 0xd,

0xd, 0xa, 0x6, 0x6, 0x6, 0xa, 0xb, 0xb, 0xc, 0xd,

0xe, 0xf, 0x10, 0x10, 0x8, 0x6, 0x4, 0x5, 0x9, 0xb,

0xe, 0xd, 0xd, 0xd, 0xd, 0xd, 0xd, 0xd, 0xd, 0xd,

0xd, 0xd, 0xd, 0xf, 0xe, 0xd, 0xe, 0xf, 0xe, 0xf,

0xf, 0x11, 0x12, 0x13, 0x13, 0x13, 0x13, 0x13, 0x14, 0x14,

0x13, 0xd, 0xc, 0xd, 0xd, 0xd, 0xc, 0xc, 0xd, 0xd,

0xd, 0xd, 0xd, 0xd, 0xe, 0xc, 0x9, 0x8, 0xa, 0xa,

0xc, 0xe, 0xe, 0x10, 0x12, 0x13, 0x13, 0x12, 0xd, 0xa,

0xa, 0x7, 0x9, 0xf, 0x13, 0x11, 0xe, 0xe, 0xd, 0xd,

0xd, 0xd, 0xd, 0xd, 0xd, 0xd, 0xe, 0xe, 0x12, 0x11,

0x13, 0x13, 0x13, 0x13, 0xf, 0x10, 0xe, 0xd, 0x13, 0x12,

0x12, 0x12, 0xd, 0x10, 0x11, 0xd, 0xc, 0xd, 0xd, 0xd,

0xc, 0xd, 0xd, 0xd, 0xd, 0xd, 0xd, 0xd, 0xd, 0x12,

0x10, 0xc, 0xb, 0x10, 0x10, 0x11, 0x12, 0x14, 0x14, 0x16,

0x14, 0x12, 0x10, 0xd, 0xd, 0xc, 0x8, 0x9, 0xe, 0x13,

0x12, 0x11, 0x13, 0x12, 0xe, 0xd, 0xe, 0xf, 0xe, 0xe,

0x12, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x10, 0x10, 0xd,

0xd, 0xd, 0xc, 0xe, 0xf, 0x10, 0x11, 0x11, 0x12, 0xc,

0xc, 0xc, 0xd, 0xd, 0xd, 0xd, 0xd, 0xd, 0xd, 0xd,

0xd, 0xd, 0xd, 0x15, 0x12, 0xd, 0xb, 0x11, 0x13, 0x14,

0x15, 0x14, 0x12, 0x13, 0x12, 0xe, 0xe, 0xd, 0xd, 0xd,

0x9, 0x7, 0xc, 0x12, 0x12, 0x10, 0x10, 0x13, 0x14, 0x11,

0x10, 0x10, 0x12, 0x11, 0xf, 0xe, 0xd, 0xc, 0xd, 0xe,

0xd, 0xc, 0xa, 0xa, 0x9, 0xc, 0x10, 0x10, 0x12, 0x13,

0x12, 0x12, 0x13, 0xc, 0xc, 0xc, 0xc, 0xd, 0xc, 0xc,

0xd, 0xd, 0xd, 0xd, 0xd, 0xd, 0x11, 0x15, 0x14, 0x10,

0xd, 0xe, 0xe, 0x10, 0x10, 0x10, 0x10, 0xe, 0xf, 0xd,

0xd, 0xd, 0xd, 0xd, 0xc, 0x7, 0xa, 0xe, 0x14, 0xd,

0xe, 0x10, 0x14, 0x14, 0x11, 0x10, 0xc, 0xe, 0xb, 0xe,

0xf, 0xa, 0xb, 0xd, 0xa, 0x8, 0x9, 0x9, 0x8, 0xe,

0x13, 0x13, 0x12, 0x12, 0x12, 0x12, 0x13, 0xc, 0xc, 0xc,

0xd, 0xc, 0xd, 0xd, 0xd, 0xd, 0xd, 0xd, 0xd, 0xf,

0x16, 0x16, 0x14, 0xf, 0xd, 0xd, 0xa, 0x9, 0x9, 0xa,

0xb, 0xb, 0x9, 0xa, 0xd, 0xc, 0xb, 0xa, 0xa, 0x9,

0xa, 0x9, 0x13, 0x11, 0x8, 0x8, 0xf, 0x15, 0x10, 0xb,

0xa, 0xa, 0xc, 0xa, 0x9, 0x8, 0xb, 0x8, 0x8, 0x6,

0x9, 0xd, 0x9, 0x9, 0xc, 0x10, 0x12, 0x11, 0x10, 0x12,

0x14, 0xd, 0xd, 0xd, 0xd, 0xd, 0xd, 0xd, 0xd, 0xd,

0xe, 0xf, 0x14, 0x16, 0x16, 0x16, 0x16, 0x10, 0xc, 0x8,

0x8, 0x6, 0x6, 0x8, 0x7, 0x7, 0x6, 0x7, 0xa, 0x8,

0x9, 0x8, 0xb, 0x9, 0x8, 0x6, 0xc, 0x10, 0xa, 0x6,

0xb, 0xf, 0xe, 0xa, 0xc, 0xb, 0xb, 0xb, 0x9, 0x7,

0x9, 0x8, 0xb, 0xa, 0x8, 0x7, 0x8, 0x9, 0x12, 0x14,

0x14, 0x13, 0x13, 0x11, 0x13]

data2 = [0xf, 0xe, 0xe, 0xd, 0xd, 0xe, 0xe, 0xd, 0xc, 0xa, 0xd,

0x15, 0x11, 0xe, 0xb, 0xa, 0xb, 0x10, 0x11, 0x8, 0x8,

0x7, 0xa, 0xc, 0xd, 0xc, 0x10, 0x12, 0x9, 0x6, 0x7,

0x8, 0x7, 0x8, 0x9, 0x8, 0x9, 0xa, 0xc, 0xc, 0xe,

0x10, 0x10, 0xe, 0x9, 0x4, 0x3, 0x5, 0x6, 0x6, 0x6,

0x3, 0x4, 0x6, 0x6, 0x5, 0x5, 0x5, 0x5, 0x4, 0x5,

0x7, 0x5, 0x4, 0xf, 0xf, 0xe, 0xd, 0xd, 0xe, 0xe,

0xd, 0xc, 0xb, 0x15, 0xf, 0xf, 0xe, 0xb, 0xa, 0x8,

0x8, 0xa, 0x8, 0x8, 0x7, 0x9, 0xb, 0xb, 0xb, 0x13,

0xd, 0xc, 0x5, 0x6, 0x7, 0x7, 0x8, 0x9, 0x9, 0xa,

0xc, 0xf, 0x11, 0x11, 0x11, 0x10, 0xa, 0x4, 0x4, 0x5,

0x6, 0x7, 0x7, 0x6, 0x4, 0x5, 0x7, 0x6, 0x6, 0x5,

0x5, 0x4, 0x3, 0x5, 0x6, 0x4, 0x3, 0xf, 0xf, 0xe,

0xd, 0xd, 0xe, 0xe, 0xd, 0xc, 0x13, 0xf, 0xd, 0xf,

0xe, 0xc, 0xa, 0x8, 0x8, 0x9, 0x8, 0x8, 0x7, 0x9,

0xa, 0x9, 0x10, 0xe, 0x8, 0x11, 0x5, 0x6, 0x9, 0x10,

0x11, 0x11, 0x12, 0x12, 0x13, 0x15, 0x16, 0x16, 0x15, 0x13,

0xa, 0x4, 0x5, 0x6, 0x7, 0x9, 0x9, 0x6, 0x5, 0x8,

0x8, 0x6, 0x6, 0x5, 0x4, 0x4, 0x3, 0x3, 0x4, 0x3,

0x3, 0xf, 0xf, 0xe, 0xe, 0xd, 0xe, 0xe, 0xe, 0xe,

0x13, 0xc, 0xd, 0xe, 0xe, 0xd, 0xc, 0xa, 0x9, 0x9,

0x9, 0x8, 0x7, 0x9, 0xa, 0xc, 0x12, 0xa, 0x8, 0x12,

0x6, 0x6, 0x7, 0x7, 0x6, 0x7, 0x8, 0x9, 0xc, 0xf,

0x14, 0xe, 0xa, 0x5, 0x4, 0x5, 0x6, 0x7, 0x9, 0xa,

0xa, 0x7, 0x7, 0x9, 0x9, 0x7, 0x6, 0x6, 0x5, 0x6,

0x6, 0x6, 0x6, 0x5, 0x5, 0xf, 0xe, 0xe, 0xd, 0xd,

0xe, 0xe, 0xe, 0xf, 0x12, 0xb, 0xc, 0xd, 0xe, 0xe,

0xe, 0xc, 0xb, 0xb, 0xb, 0xa, 0xa, 0xb, 0xe, 0x17,

0x12, 0x12, 0x12, 0x14, 0xc, 0x7, 0x7, 0x7, 0x6, 0x6,

0x8, 0xa, 0xd, 0xe, 0x14, 0xb, 0x6, 0x4, 0x5, 0x6,

0x7, 0x9, 0xa, 0xb, 0xa, 0x7, 0x9, 0xb, 0x9, 0x7,

0x6, 0x6, 0x6, 0x7, 0x7, 0x7, 0x7, 0x7, 0x6, 0xf,

0xf, 0xe, 0xe, 0xd, 0xe, 0xf, 0xe, 0xc, 0x14, 0x8,

0x8, 0xb, 0xe, 0xe, 0xe, 0xd, 0x11, 0x16, 0xf, 0xc,

0xc, 0xe, 0x16, 0xe, 0xd, 0xc, 0x9, 0x8, 0x13, 0x7,

0x7, 0x7, 0x6, 0x6, 0x7, 0x9, 0xc, 0xd, 0x14, 0xa,

0x7, 0x6, 0x6, 0x8, 0x9, 0xa, 0xc, 0xc, 0xa, 0x9,

0xb, 0xb, 0xa, 0x8, 0x7, 0x7, 0x7, 0x7, 0x8, 0x7,

0x7, 0x7, 0x6, 0xf, 0xe, 0xe, 0xe, 0xd, 0xe, 0xf,

0xd, 0x7, 0xa, 0x10, 0x4, 0x5, 0xc, 0xf, 0x13, 0x16,

0x13, 0xd, 0xc, 0xc, 0xd, 0x16, 0xf, 0xd, 0xd, 0xc,

0x9, 0x7, 0x11, 0xb, 0x8, 0x7, 0x6, 0x5, 0x6, 0x9,

0xc, 0xd, 0x14, 0xb, 0xa, 0x8, 0x8, 0x9, 0xb, 0xb,

0xd, 0xc, 0xa, 0xb, 0xc, 0xb, 0xb, 0x9, 0x8, 0x7,

0x7, 0x8, 0x8, 0x8, 0x7, 0x7, 0x6, 0xe, 0xe, 0xe,

0xe, 0xd, 0xd, 0xe, 0xb, 0x3, 0x2, 0x9, 0x11, 0x12,

0x13, 0x13, 0x12, 0xd, 0xc, 0xc, 0xc, 0xc, 0x10, 0x12,

0xd, 0xd, 0xd, 0xb, 0x9, 0x8, 0xe, 0xd, 0x7, 0x8,

0x6, 0x5, 0x6, 0x9, 0xb, 0xc, 0x14, 0xc, 0xb, 0xa,

0xa, 0xb, 0xc, 0xc, 0xd, 0xc, 0xb, 0xc, 0xd, 0xc,

0xb, 0xa, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x7, 0x7,

0x6, 0xe, 0xe, 0xe, 0xe, 0xd, 0xd, 0xe, 0x7, 0x2,

0x4, 0x4, 0x4, 0x4, 0x3, 0x3, 0x9, 0xa, 0xa, 0xb,

0xb, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xb, 0x8, 0x7,

0x5, 0x4, 0x6, 0x7, 0x6, 0x5, 0x5, 0x8, 0xa, 0xb,

0x14, 0xd, 0xc, 0xb, 0xb, 0xc, 0xd, 0xd, 0xd, 0xd,

0xc, 0xd, 0xd, 0xd, 0xc, 0xa, 0x9, 0x8, 0x8, 0x8,

0x8, 0x8, 0x7, 0x7, 0x6, 0xf, 0xe, 0xe, 0xe, 0xd,

0xd, 0xd, 0x3, 0x4, 0x5, 0x5, 0x5, 0x4, 0x3, 0x3,

0x3, 0x7, 0x9, 0xb, 0xc, 0xd, 0xc, 0xd, 0xc, 0xc,

0xb, 0x9, 0x7, 0x5, 0x5, 0x5, 0x5, 0x4, 0x3, 0x3,

0x3, 0x3, 0x4, 0x7, 0xb, 0xb, 0xc, 0xc, 0xc, 0xd,

0xd, 0xe, 0xd, 0xd, 0xd, 0xd, 0xe, 0xd, 0xc, 0xb,

0x9, 0x8, 0x8, 0x8, 0x8, 0x8, 0x7, 0x6, 0x5, 0xf,

0xf, 0xe, 0xe, 0xd, 0xd, 0xb, 0x3, 0x5, 0x6, 0x6,

0x4, 0x4, 0x3, 0x3, 0x3, 0x3, 0x9, 0xd, 0xd, 0xd,

0xc, 0xa, 0xb, 0x9, 0x8, 0x7, 0x5, 0x4, 0x3, 0x3,

0x2, 0x2, 0x1, 0x1, 0x1, 0x1, 0x2, 0x2, 0x4, 0x7,

0xa, 0xb, 0xd, 0xe, 0xd, 0xe, 0xe, 0xd, 0xe, 0xe,

0xd, 0xd, 0xc, 0xb, 0xa, 0x9, 0x8, 0x8, 0x8, 0x8,

0x7, 0x6, 0x5, 0xf, 0xf, 0xe, 0xe, 0xd, 0xd, 0x9,

0x3, 0x5, 0x6, 0x5, 0x5, 0x4, 0x4, 0x3, 0x2, 0x2,

0x4, 0xb, 0xc, 0xa, 0x8, 0x7, 0x5, 0x4, 0x4, 0x4,

0x3, 0x3, 0x2, 0x2, 0x2, 0x1, 0x1, 0x1, 0x1, 0x1,

0x2, 0x2, 0x3, 0x4, 0x4, 0x5, 0x9, 0xd, 0xd, 0xe,

0xd, 0xe, 0xd, 0xd, 0xd, 0xd, 0xc, 0xb, 0x9, 0x9,

0x8, 0x8, 0x8, 0x8, 0x7, 0x5, 0x6, 0xf, 0xe, 0xe,

0xe, 0xd, 0xd, 0x7, 0x4, 0x6, 0x6, 0x5, 0x4, 0x4,

0x3, 0x3, 0x2, 0x2, 0x2, 0x4, 0x9, 0x9, 0x5, 0x3,

0x2, 0x2, 0x2, 0x2, 0x3, 0x3, 0x3, 0x2, 0x2, 0x1,

0x1, 0x1, 0x1, 0x1, 0x2, 0x2, 0x5, 0x5, 0x3, 0x2,

0x2, 0x6, 0xc, 0xd, 0xd, 0xd, 0xe, 0xe, 0xd, 0xc,

0xb, 0x9, 0x8, 0x7, 0x7, 0x7, 0x7, 0x8, 0x7, 0x5,

0x6, 0xf, 0xe, 0xe, 0xe, 0xd, 0xc, 0x4, 0x5, 0x7,

0x6, 0x5, 0x4, 0x4, 0x3, 0x3, 0x2, 0x2, 0x2, 0x3,

0x4, 0x4, 0x2, 0x2, 0x2, 0x2, 0x2, 0x1, 0x2, 0x3,

0x3, 0x3, 0x3, 0x2, 0x1, 0x1, 0x1, 0x2, 0x2, 0x4,

0x6, 0x6, 0x3, 0x2, 0x2, 0x2, 0x5, 0x9, 0xc, 0xe,

0xe, 0xc, 0x8, 0x6, 0x5, 0x5, 0x6, 0x7, 0x6, 0x6,

0x6, 0x7, 0x6, 0x5, 0x6, 0xf, 0xe, 0xe, 0xe, 0xd,

0xb, 0x4, 0x5, 0x7, 0x6, 0x5, 0x5, 0x4, 0x4, 0x3,

0x3, 0x3, 0x2, 0x2, 0x2, 0x2, 0x4, 0x7, 0x9, 0xa,

0x9, 0x7, 0x4, 0x2, 0x4, 0x4, 0x4, 0x4, 0x3, 0x2,

0x2, 0x2, 0x2, 0x4, 0x4, 0x4, 0x4, 0x4, 0x3, 0x3,

0x4, 0x5, 0x9, 0xc, 0xa, 0x4, 0x3, 0x4, 0x3, 0x3,

0x4, 0x6, 0x6, 0x7, 0x8, 0x7, 0x5, 0x4, 0x6, 0xf,

0xe, 0xe, 0xe, 0xd, 0xa, 0x3, 0x5, 0x7, 0x6, 0x5,

0x4, 0x4, 0x3, 0x3, 0x3, 0x3, 0x3, 0x2, 0x2, 0x7,

0xd, 0xd, 0xc, 0xd, 0x12, 0xe, 0xa, 0x5, 0x1, 0x4,

0x4, 0x4, 0x5, 0x5, 0x4, 0x3, 0x2, 0x4, 0x4, 0x3,

0x4, 0x5, 0x6, 0x5, 0x6, 0x6, 0x5, 0x6, 0x5, 0x4,

0x4, 0x5, 0x4, 0x4, 0x3, 0x5, 0x7, 0x8, 0x9, 0x6,

0x3, 0x2, 0x3, 0xe, 0xe, 0xe, 0xe, 0xd, 0x9, 0x4,

0x6, 0x7, 0x7, 0x5, 0x5, 0x4, 0x3, 0x3, 0x3, 0x3,

0x3, 0x2, 0x8, 0x10, 0x11, 0xf, 0xa, 0x7, 0x9, 0xf,

0xd, 0xb, 0x5, 0x2, 0x3, 0x6, 0x6, 0x7, 0x4, 0x2,

0x2, 0x3, 0x1, 0x0, 0x1, 0x4, 0x3, 0x5, 0x4, 0x5,

0x6, 0x4, 0x3, 0x4, 0x4, 0x4, 0x5, 0x4, 0x3, 0x5,

0x9, 0xa, 0xa, 0x6, 0x3, 0x2, 0x2, 0xe, 0xe, 0xe,

0xd, 0xd, 0x7, 0x4, 0x5, 0x7, 0x7, 0x6, 0x5, 0x4,

0x4, 0x4, 0x4, 0x3, 0x3, 0x6, 0x10, 0x12, 0x11, 0x6,

0x4, 0x2, 0x3, 0x3, 0xd, 0xe, 0x9, 0x3, 0x3, 0x3,

0x5, 0x4, 0x2, 0x2, 0x1, 0x1, 0x0, 0x0, 0x0, 0x3,

0x2, 0x4, 0x1, 0x1, 0x3, 0x2, 0x2, 0x4, 0x5, 0x6,

0x5, 0x5, 0x4, 0x4, 0x9, 0xa, 0x8, 0x5, 0x2, 0x2,

0x3, 0xe, 0xe, 0xe, 0xd, 0xd, 0x6, 0x6, 0x5, 0x7,

0x7, 0x7, 0x6, 0x5, 0x4, 0x4, 0x4, 0x4, 0x5, 0x9,

0x11, 0x13, 0x10, 0x5, 0x3, 0x2, 0x2, 0x2, 0xa, 0xd,

0xb, 0x4, 0x3, 0x3, 0x1, 0x2, 0x2, 0x1, 0x0, 0x0,

0x0, 0x0, 0x1, 0x3, 0x1, 0x3, 0x0, 0x1, 0x3, 0x6,

0x7, 0x5, 0x4, 0x4, 0x5, 0x5, 0x5, 0x4, 0xb, 0xa,

0x7, 0x4, 0x3, 0x3, 0x5, 0xe, 0xe, 0xd, 0xd, 0xd,

0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x5, 0x4, 0x3,

0x3, 0x3, 0x4, 0x6, 0x8, 0xc, 0xb, 0x6, 0x2, 0x2,

0x2, 0x2, 0x2, 0x4, 0x3, 0x1, 0x1, 0x2, 0x3, 0x2,

0x3, 0x2, 0x1, 0x1, 0x1, 0x2, 0x2, 0x2, 0x1, 0x2,

0x1, 0x0, 0x3, 0xc, 0x10, 0xf, 0xa, 0x6, 0x4, 0x5,

0x5, 0x4, 0xc, 0xc, 0xa, 0x8, 0x6, 0x6, 0x8, 0xe,

0xd, 0xd, 0xd, 0xc, 0x6, 0x6, 0x7, 0x6, 0x6, 0x6,

0x5, 0x4, 0x3, 0x3, 0x3, 0x3, 0x3, 0x4, 0x3, 0x2,

0x2, 0x2, 0x2, 0x2, 0x1, 0x1, 0x1, 0x1, 0x2, 0x2,

0x3, 0x3, 0x3, 0x2, 0x3, 0x2, 0x2, 0x2, 0x2, 0x3,

0x2, 0x2, 0x2, 0x2, 0x4, 0x1, 0x2, 0x6, 0xb, 0x11,

0x11, 0xb, 0x8, 0x5, 0x5, 0x4, 0xb, 0xd, 0xb, 0xb,

0x9, 0x8, 0x9, 0xe, 0xd, 0xd, 0xd, 0xc, 0x5, 0x4,

0x7, 0x6, 0x6, 0x5, 0x4, 0x2, 0x2, 0x2, 0x2, 0x2,

0x2, 0x2, 0x2, 0x2, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1,

0x1, 0x2, 0x2, 0x3, 0x3, 0x2, 0x3, 0x3, 0x3, 0x3,

0x2, 0x1, 0x1, 0x2, 0x3, 0x3, 0x2, 0x3, 0x3, 0x3,

0x4, 0x4, 0x4, 0x4, 0xb, 0x10, 0xe, 0x8, 0x5, 0x4,

0xa, 0xb, 0xb, 0xc, 0xb, 0x9, 0x8, 0xd, 0xd, 0xd,

0xd, 0xa, 0x2, 0x3, 0x5, 0x6, 0x6, 0x4, 0x3, 0x2,

0x2, 0x2, 0x1, 0x1, 0x1, 0x2, 0x1, 0x1, 0x1, 0x1,

0x2, 0x1, 0x1, 0x1, 0x2, 0x2, 0x3, 0x2, 0x3, 0x3,

0x3, 0x3, 0x2, 0x1, 0x1, 0x1, 0x1, 0x1, 0x3, 0x3,

0x2, 0x3, 0x2, 0x3, 0x4, 0x5, 0x5, 0x4, 0x2, 0xe,

0x11, 0xe, 0x5, 0x4, 0x9, 0xa, 0xa, 0xb, 0xb, 0x9,

0x9, 0xc, 0xc, 0xc, 0xc, 0xa, 0x4, 0x3, 0x3, 0x5,

0x5, 0x3, 0x2, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1,

0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x2, 0x3, 0x2,

0x2, 0x3, 0x5, 0x3, 0x2, 0x3, 0x2, 0x2, 0x2, 0x2,

0x2, 0x2, 0x3, 0x2, 0x2, 0x2, 0x1, 0x1, 0x2, 0x3,

0x5, 0x5, 0x5, 0xb, 0x13, 0x11, 0x6, 0x5, 0xb, 0xc,

0xb, 0xb, 0xb, 0xa, 0xa, 0xc, 0xc, 0xc, 0xc, 0x9,

0x5, 0x4, 0x2, 0x4, 0x4, 0x2, 0x1, 0x1, 0x1, 0x1,

0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x0,

0x1, 0x2, 0x2, 0x2, 0x4, 0x3, 0x2, 0x2, 0x3, 0x2,

0x2, 0x2, 0x2, 0x3, 0x2, 0x2, 0x3, 0x1, 0x1, 0x2,

0x3, 0x3, 0x2, 0x3, 0x4, 0x5, 0x6, 0x8, 0x11, 0x13,

0x7, 0x5, 0xc, 0xc, 0xc, 0xb, 0xb, 0xb, 0xb, 0xb,

0xb, 0xb, 0xb, 0x9, 0x3, 0x3, 0x4, 0x3, 0x2, 0x2,

0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1,

0x1, 0x1, 0x1, 0x1, 0x2, 0x1, 0x2, 0x2, 0x2, 0x2,

0x2, 0x2, 0x2, 0x2, 0x2, 0x3, 0x3, 0x2, 0x2, 0x2,

0x1, 0x0, 0x1, 0x2, 0x3, 0x4, 0x3, 0x3, 0x3, 0x4,

0x5, 0x5, 0x7, 0xc, 0x6, 0x5, 0xb, 0xb, 0xb, 0xb,

0xb, 0xb, 0xb, 0xc, 0xc, 0xd, 0xc, 0x9, 0x2, 0x2,

0x3, 0x3, 0x2, 0x2, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1,

0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x3, 0x2, 0x2,

0x2, 0x1, 0x1, 0x1, 0x1, 0x2, 0x2, 0x2, 0x3, 0x3,

0x2, 0x2, 0x1, 0x2, 0x2, 0x1, 0x1, 0x1, 0x2, 0x2,

0x3, 0x3, 0x3, 0x3, 0x4, 0x4, 0x4, 0x4, 0x3, 0x3,

0x5, 0xa, 0xb, 0xb, 0xb, 0xc, 0xc, 0xd, 0xd, 0xd,

0xe, 0xc, 0x3, 0x2, 0x2, 0x2, 0x1, 0x1, 0x1, 0x1,

0x1, 0x1, 0x0, 0x1, 0x1, 0x2, 0x2, 0x2, 0x2, 0x2,

0x2, 0x1, 0x2, 0x2, 0x2, 0x1, 0x1, 0x1, 0x1, 0x2,

0x2, 0x2, 0x2, 0x2, 0x4, 0x5, 0x8, 0xa, 0xb, 0xc,

0x8, 0x5, 0x3, 0x2, 0x2, 0x3, 0x2, 0x2, 0x3, 0x4,

0x4, 0x3, 0x2, 0x2, 0x2, 0x4, 0xb, 0xc, 0xc, 0xc,

0xd, 0xe, 0xe, 0xe, 0xe, 0xe, 0xd, 0x3, 0x2, 0x2,

0x1, 0x1, 0x1, 0x1, 0x2, 0x2, 0x2, 0x2, 0x1, 0x1,

0x0, 0x1, 0x1, 0x1, 0x2, 0x2, 0x2, 0x2, 0x1, 0x1,

0x1, 0x1, 0x1, 0x2, 0x2, 0x1, 0x3, 0xa, 0xd, 0xe,

0xe, 0xf, 0xf, 0x11, 0x10, 0xe, 0xc, 0xb, 0x8, 0x3,

0x2, 0x2, 0x2, 0x3, 0x3, 0x3, 0x2, 0x2, 0x2, 0x3,

0xa, 0xc, 0xc, 0xd, 0xd, 0xe, 0xe, 0xf, 0xf, 0xe,

0xd, 0x4, 0x2, 0x2, 0x2, 0x2, 0x2, 0x1, 0x1, 0x1,

0x1, 0x1, 0x2, 0x2, 0x1, 0x1, 0x1, 0x1, 0x2, 0x2,

0x1, 0x1, 0x1, 0x1, 0x0, 0x1, 0x1, 0x1, 0x1, 0x2,

0x9, 0xc, 0x11, 0x12, 0x11, 0x10, 0xf, 0x11, 0x11, 0x10,

0x10, 0xf, 0x10, 0xf, 0x4, 0x2, 0x2, 0x2, 0x3, 0x3,

0x3, 0x2, 0x2, 0x3, 0xa, 0xd, 0xd, 0xd, 0xe, 0xf,

0xf, 0xf, 0xf, 0xf, 0xd, 0x4, 0x2, 0x1, 0x1, 0x1,

0x1, 0x1, 0x1, 0x1, 0x2, 0x1, 0x1, 0x1, 0x1, 0x2,

0x1, 0x1, 0x1, 0x1, 0x0, 0x1, 0x1, 0x0, 0x1, 0x1,

0x1, 0x1, 0x1, 0x1, 0x2, 0x8, 0xc, 0x12, 0x13, 0x11,

0xf, 0x11, 0x12, 0x12, 0x12, 0x12, 0x11, 0xf, 0x4, 0x2,

0x2, 0x2, 0x2, 0x3, 0x2, 0x2, 0x2, 0x3, 0xa, 0xe,

0xe, 0xe, 0xe, 0x10, 0xf, 0xf, 0xf, 0xe, 0xb, 0x2,

0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x0, 0x1, 0x0, 0x0,

0x0, 0x1, 0x1, 0x0, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1,

0x1, 0x1, 0x0, 0x1, 0x1, 0x1, 0x1, 0x0, 0x1, 0x2,

0x9, 0xc, 0xe, 0x10, 0xe, 0x11, 0x10, 0x10, 0x11, 0xf,

0xd, 0xa, 0x1, 0x2, 0x1, 0x2, 0x2, 0x2, 0x3, 0x2,

0x1, 0x3, 0xb, 0xd, 0xd, 0xe, 0xf, 0x10, 0xf, 0xf,

0xf, 0xe, 0x7, 0x2, 0x2, 0x1, 0x1, 0x1, 0x1, 0x1,

0x0, 0x0, 0x0, 0x1, 0x2, 0x1, 0x1, 0x1, 0x1, 0x1,

0x1, 0x1, 0x1, 0x1, 0x1, 0x0, 0x0, 0x1, 0x1, 0x1,

0x1, 0x0, 0x0, 0x1, 0x3, 0x9, 0xb, 0xc, 0xd, 0xd,

0xc, 0xc, 0xc, 0xc, 0xa, 0x3, 0x2, 0x1, 0x1, 0x1,

0x1, 0x1, 0x2, 0x2, 0x2, 0x4, 0xd, 0xf, 0xe, 0xe,

0xf, 0x10, 0xf, 0xf, 0xf, 0xc, 0x4, 0x1, 0x1, 0x1,

0x1, 0x1, 0x1, 0x1, 0x0, 0x0, 0x0, 0x1, 0x1, 0x1,

0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x0, 0x0,

0x0, 0x0, 0x1, 0x1, 0x1, 0x0, 0x0, 0x1, 0x2, 0x2,

0x6, 0x9, 0xb, 0xa, 0xb, 0xb, 0xa, 0x9, 0x4, 0x1,

0x2, 0x1, 0x1, 0x1, 0x1, 0x1, 0x2, 0x1, 0x2, 0x4,

0xc, 0xe, 0xf, 0xf, 0x10, 0x11, 0x10, 0xf, 0x10, 0x10,

0x3, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x0, 0x0,

0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x2,

0x1, 0x0, 0x2, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,

0x1, 0x2, 0x1, 0x2, 0x1, 0x2, 0x4, 0x6, 0x6, 0x5,

0x3, 0x1, 0x0, 0x1, 0x2, 0x1, 0x1, 0x1, 0x1, 0x1,

0x2, 0x2, 0x1, 0x4, 0xd, 0xe, 0xd, 0xf, 0x10, 0x10,

0x12, 0x13, 0x13, 0x12, 0x6, 0x1, 0x1, 0x1, 0x1, 0x1,

0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x0,

0x1, 0x1, 0x1, 0x1, 0x0, 0x1, 0x2, 0x0, 0x0, 0x0,

0x0, 0x0, 0x0, 0x1, 0x2, 0x1, 0x2, 0x2, 0x2, 0x2,

0x2, 0x2, 0x2, 0x2, 0x1, 0x1, 0x0, 0x1, 0x1, 0x1,

0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x5, 0xe, 0xf,

0xf, 0xf, 0xf, 0x13, 0x13, 0x13, 0x13, 0x13, 0xc, 0x1,

0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x0, 0x1, 0x1, 0x1,

0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x0, 0x1, 0x2,

0x1, 0x0, 0x0, 0x0, 0x0, 0x1, 0x1, 0x2, 0x2, 0x1,

0x1, 0x1, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x1,

0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1,

0x1, 0x6, 0xc, 0x10, 0x10, 0x10, 0x10, 0x13, 0x13, 0x13,

0x13, 0x13, 0x10, 0x2, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1,

0x1, 0x2, 0x1, 0x1, 0x1, 0x1, 0x1, 0x2, 0x1, 0x0,

0x1, 0x1, 0x1, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0,

0x1, 0x2, 0x1, 0x1, 0x1, 0x1, 0x1, 0x2, 0x1, 0x2,

0x2, 0x1, 0x1, 0x2, 0x1, 0x0, 0x0, 0x1, 0x1, 0x1,

0x1, 0x1, 0x1, 0x1, 0x1, 0x8, 0x11, 0xf, 0x10, 0x12,

0x12, 0x13, 0x14, 0x14, 0x14, 0x14, 0x10, 0x3, 0x1, 0x1,

0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x0, 0x1, 0x1, 0x1,

0x2, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1,

0x1, 0x1, 0x0, 0x1, 0x1, 0x1, 0x1, 0x0, 0x0, 0x1,

0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x2, 0x0, 0x0,

0x0, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x2, 0xc,

0x12, 0x14, 0x12, 0x11, 0x14, 0x13, 0x14, 0x14, 0x14, 0x13,

0x11, 0x6, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1,

0x1, 0x1, 0x1, 0x2, 0x1, 0x0, 0x0, 0x1, 0x1, 0x1,

0x1, 0x1, 0x1, 0x1, 0x0, 0x0, 0x0, 0x1, 0x1, 0x0,

0x0, 0x0, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1,

0x1, 0x1, 0x1, 0x0, 0x0, 0x1, 0x1, 0x1, 0x1, 0x1,

0x1, 0x1, 0x2, 0xc, 0x14, 0x14, 0x14, 0x14, 0x12, 0x13,

0x13, 0x14, 0x13, 0x13, 0x12, 0xa, 0x1, 0x1, 0x1, 0x1,

0x1, 0x0, 0x0, 0x1, 0x0, 0x0, 0x2, 0x1, 0x0, 0x0,

0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x0,

0x1, 0x1, 0x0, 0x0, 0x0, 0x1, 0x1, 0x1, 0x1, 0x1,

0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x0, 0x0, 0x1,

0x1, 0x1, 0x1, 0x1, 0x1, 0x2, 0x5, 0x10, 0x11, 0x14,

0x14, 0x15, 0x15, 0x12, 0x12, 0x12, 0x13, 0x13, 0x12, 0xc,

0x2, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x0, 0x0, 0x1,

0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x1, 0x1, 0x1, 0x1,

0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x0, 0x0, 0x0, 0x1,

0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x0, 0x0, 0x1,

0x1, 0x1, 0x0, 0x0, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1,

0x9, 0x12, 0x13, 0x12, 0x15, 0x14, 0x15, 0xd, 0xe, 0xf,

0xf, 0x11, 0x12, 0xf, 0x4, 0x1, 0x1, 0x0, 0x1, 0x1,

0x0, 0x0, 0x1, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0,

0x0, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x0, 0x1, 0x1,

0x0, 0x0, 0x0, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1,

0x1, 0x0, 0x0, 0x1, 0x1, 0x1, 0x0, 0x1, 0x1, 0x1,

0x1, 0x1, 0x1, 0x2, 0xe, 0x14, 0x13, 0x14, 0x13, 0x15,

0x14, 0x9, 0xc, 0xc, 0x9, 0xb, 0x10, 0xe, 0x6, 0x1,

0x1, 0x1, 0x1, 0x1, 0x0, 0x1, 0x1, 0x1, 0x0, 0x0,

0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x1,

0x1, 0x0, 0x1, 0x1, 0x0, 0x0, 0x0, 0x1, 0x1, 0x1,

0x1, 0x0, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1,

0x1, 0x0, 0x1, 0x1, 0x1, 0x1, 0x1, 0x3, 0x10, 0x15,

0x15, 0x13, 0x14, 0x12, 0x15, 0xa, 0xa, 0xa, 0xa, 0xc,

0xd, 0xd, 0x7, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x0,

0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,

0x0, 0x0, 0x1, 0x1, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0,

0x0, 0x0, 0x0, 0x0, 0x1, 0x1, 0x1, 0x1, 0x1, 0x0,

0x0, 0x1, 0x1, 0x1, 0x0, 0x0, 0x1, 0x1, 0x1, 0x1,

0x1, 0xa, 0x11, 0x14, 0x15, 0x14, 0x13, 0x14, 0x13, 0xb,

0xc, 0xe, 0xe, 0x10, 0x11, 0xd, 0x8, 0x2, 0x1, 0x1,

0x1, 0x1, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0,

0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x1, 0x1, 0x1,

0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x1, 0x1, 0x1,

0x1, 0x1, 0x0, 0x0, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1,

0x1, 0x1, 0x1, 0x1, 0x2, 0xf, 0x14, 0x13, 0x14, 0x15,

0x14, 0x14, 0x14, 0x11, 0x12, 0x11, 0x13, 0x14, 0x13, 0x12,

0xc, 0x2, 0x1, 0x1, 0x1, 0x1, 0x1, 0x0, 0x0, 0x0,

0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x1, 0x1, 0x0,

0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,

0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x1, 0x1, 0x1,

0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x6, 0x13,

0x14, 0x13, 0x14, 0x14, 0x15, 0x14, 0x15, 0x13, 0x12, 0x14,

0x14, 0x14, 0x14, 0x13, 0xd, 0x3, 0x1, 0x2, 0x1, 0x1,

0x1, 0x0, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x1, 0x1,

0x1, 0x0, 0x0, 0x0, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0,

0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,

0x0, 0x0, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1,

0x1, 0x2, 0xf, 0x14, 0x15, 0x14, 0x13, 0x15, 0x15, 0x16,

0x14, 0x13, 0x13, 0x14, 0x14, 0x14, 0x13, 0x12, 0xe, 0x3,

0x2, 0x1, 0x1, 0x1, 0x1, 0x0, 0x1, 0x1, 0x1, 0x0,

0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x1, 0x0,

0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x1,

0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x1, 0x1,

0x1, 0x1, 0x1, 0x0, 0x1, 0x5, 0x14, 0x15, 0x15, 0x15,

0x13, 0x15, 0x16, 0x16, 0x15, 0x14, 0x14, 0x14, 0x14, 0x13,

0x13, 0x12, 0xd, 0x3, 0x1, 0x1, 0x1, 0x1, 0x0, 0x0,

0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,

0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,

0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0,

0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x9,

0x15, 0x15, 0x15, 0x15, 0x15, 0x13, 0x16, 0x16, 0x16, 0x14,

0x14, 0x14, 0x14, 0x13, 0x13, 0x11, 0x9, 0x2, 0x1, 0x1,

0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0,

0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,

0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x1, 0x1,

0x0, 0x0, 0x0, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1,

0x1, 0x1, 0x1, 0xe, 0x16, 0x16, 0x16, 0x16, 0x15, 0x14,

0x16, 0x16, 0x16, 0x13, 0x14, 0x14, 0x14, 0x14, 0x12, 0xd,

0x4, 0x1, 0x1, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x1,

0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,

0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,

0x0, 0x0, 0x1, 0x1, 0x0, 0x0, 0x1, 0x1, 0x1, 0x1,

0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x5, 0x12, 0x16, 0x16,

0x16, 0x15, 0x15, 0x15, 0x14, 0x16, 0x16, 0xf, 0x10, 0x11,

0x11, 0x11, 0xe, 0x7, 0x2, 0x1, 0x1, 0x1, 0x1, 0x0,

0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0,

0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,

0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,

0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1,

0xc, 0x16, 0x18, 0x17, 0x16, 0x17, 0x17, 0x15, 0x14, 0x16,

0x16, 0xd, 0xc, 0xc, 0xb, 0xb, 0x8, 0x3, 0x1, 0x1,

0x1, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,

0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,

0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,

0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x1,

0x1, 0x1, 0x1, 0x2, 0x15, 0x19, 0x19, 0x19, 0x19, 0x19,

0x19, 0x15, 0x14, 0x14, 0x15, 0xd, 0xc, 0xc, 0xa, 0x7,

0x3, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x0, 0x0, 0x0,

0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,

0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,

0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,

0x0, 0x0, 0x1, 0x0, 0x1, 0x1, 0x1, 0x5, 0x19, 0x19,

0x19, 0x19, 0x19, 0x19, 0x19, 0x15, 0x14, 0x11, 0x12, 0xc,

0xc, 0xb, 0x8, 0x5, 0x1, 0x1, 0x1, 0x1, 0x0, 0x0,

0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,

0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,

0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,

0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,

0x0, 0xb, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x18, 0x13,

0x14, 0xd, 0xc, 0xc, 0xb, 0x9, 0x5, 0x2, 0x1, 0x1,

0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,

0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,

0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,

0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,

0x0, 0x0, 0x0, 0x0, 0x2, 0x13, 0x19, 0x19, 0x19, 0x19,

0x19, 0x19, 0x17, 0x19, 0x19, 0x18, 0xf, 0xb, 0x9, 0x6,

0x2, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,

0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,

0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,

0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,

0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0x19,

0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19,

0x19, 0xa, 0x6, 0x3, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0,

0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,

0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,

0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,

0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,

0x0, 0x0, 0xc, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19,

0x19, 0x19, 0x19, 0x19, 0x19, 0x7, 0x3, 0x2, 0x1, 0x0,

0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,

0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,

0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,

0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,

0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x16, 0x19, 0x19, 0x19,

0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x5,

0x2, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,

0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,

0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,

0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,

0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xa,

0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19,

0x19, 0x19, 0x19, 0x3, 0x1, 0x1, 0x1, 0x0, 0x0, 0x0,

0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,

0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,

0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,

0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,

0x0, 0x0, 0x0, 0x15, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19,

0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x2, 0x2, 0x1,

0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,

0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,

0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,

0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,

0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0x19, 0x19, 0x19,

0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19,

0x19, 0x2, 0x1, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0,

0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,

0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,

0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,

0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0,

0xd, 0x19, 0x19, 0x18, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19,

0x19, 0x19, 0x19, 0x19, 0x19]

input = [Int('input%d' % i) for i in range(64)]
s = Solver()

iiput = [0] * 64

for i in range(64):
    iiput[i] = input[i]

output = [0x025D15D4, 0x024C73B4, 0x0243CF71, 0x0230134C, 0x02132CFE, 0x01BE2FCA,
          0x0142CA26, 0x00D61955, 0x009427A8, 0x009B8674, 0x0090C832, 0x008812C7,
          0x0080BA58, 0x007981E1, 0x0072AB68, 0x0074CB4B, 0x00723F3F, 0x007CC258,
          0x0089CD5C, 0x0088E2A2, 0x008E8906, 0x008B88A0, 0x008EEC8D, 0x008F3573,
          0x008B746F, 0x00912C82, 0x008D7CF2, 0x00832099, 0x007F45A5, 0x00685AFF,
          0x0050A4D2, 0x00526FE2, 0x0058923B, 0x00529EC1, 0x00516D1A, 0x005B7453,
          0x007028E6, 0x0089C6FA, 0x00A5D6AE, 0x00D37A14, 0x00B8CFAA, 0x00B0BB4B,
          0x00AE69A4, 0x00A1154B, 0x009DCBE7, 0x00A1DC20, 0x00AA07E3, 0x00B25CB1,
          0x00B2FD98, 0x00B12F29, 0x00E428A0, 0x011B2184, 0x01615722, 0x01A502F3,
          0x01C0AA9D, 0x01D4169F, 0x01EF8B76, 0x0233E5BB, 0x0275A6F0, 0x02A9CA35,
          0x02A8904C, 0x02A194EF, 0x02926F39, 0x028E92C3]

v9 = [0] * 64

for k in range(64):

    num = 0

    for m in range(64):
        num += iiput[m] * data1[(64 * m) + k]

    v9[k] = num

for n in range(64):
    iiput[n] = v9[n]

    #************************************************************************

for k in range(64):

    num = 0

    for m in range(64):
        num += iiput[m] * data2[(64 * m) + k]

    v9[k] = num

for n in range(64):
    iiput[n] = v9[n]

for n in range(64):
    s.add(iiput[n] == output[n])

if s.check() == sat:
    m = s.model()

    an = ''

    for i in range(64):
        an += chr(m[input[i]].as_long().real)

    for i in range(len(iiput)):
        print(an[i], end='')

    # for i in range(64):
    #     print(chr("%s" % (m[input[i]])),end='')
else:
    print("failed to solve")

得到flag

Untitled

Z3复合表达式问题

中间遇到了z3无法求解的问题, 其实之前也遇到过, 但是因为没做笔记所以忘了, 这里补一下

一开始我的代码时这样的

#前面的data1和data2太长了,  省略

input = [Int('input%d' % i) for i in range(64)]
s = Solver()

for i in range(64):

output = [0x025D15D4, 0x024C73B4, 0x0243CF71, 0x0230134C, 0x02132CFE, 0x01BE2FCA,
          0x0142CA26, 0x00D61955, 0x009427A8, 0x009B8674, 0x0090C832, 0x008812C7,
          0x0080BA58, 0x007981E1, 0x0072AB68, 0x0074CB4B, 0x00723F3F, 0x007CC258,
          0x0089CD5C, 0x0088E2A2, 0x008E8906, 0x008B88A0, 0x008EEC8D, 0x008F3573,
          0x008B746F, 0x00912C82, 0x008D7CF2, 0x00832099, 0x007F45A5, 0x00685AFF,
          0x0050A4D2, 0x00526FE2, 0x0058923B, 0x00529EC1, 0x00516D1A, 0x005B7453,
          0x007028E6, 0x0089C6FA, 0x00A5D6AE, 0x00D37A14, 0x00B8CFAA, 0x00B0BB4B,
          0x00AE69A4, 0x00A1154B, 0x009DCBE7, 0x00A1DC20, 0x00AA07E3, 0x00B25CB1,
          0x00B2FD98, 0x00B12F29, 0x00E428A0, 0x011B2184, 0x01615722, 0x01A502F3,
          0x01C0AA9D, 0x01D4169F, 0x01EF8B76, 0x0233E5BB, 0x0275A6F0, 0x02A9CA35,
          0x02A8904C, 0x02A194EF, 0x02926F39, 0x028E92C3]

v9 = [0] * 64

for k in range(64):

    num = 0

    for m in range(64):
        num += input[m] * data1[(64 * m) + k]

    v9[k] = num

for n in range(64):
    input[n] = v9[n]

    #************************************************************************

for k in range(64):

    num = 0

    for m in range(64):
        num += input[m] * data2[(64 * m) + k]

    v9[k] = num

for n in range(64):
    input[n] = v9[n]

for n in range(64):
    s.add(input[n] == output[n])

if s.check() == sat:
    m = s.model()
    for i in range(64):
        print(chr("%s" % (m[input[i]])),end='')
else:
    print("failed to solve")

发生了这样的错误提示
z3.z3types.Z3Exception: Integer, Z3 declaration, or Z3 constant expected

原因在于input在上面的语句中已经变成了符号表达式了

num += input[m] * data2[(64 * m) + k]

v9[k] = num

input[n] = v9[n]

s.add(input[n] == output[n])

也就是input[i] = input[XX] * data2[XXXXX] + input[XX] * data2[XXXXX] + .............

这样时无法求解的

所以要用一个中间的变量

也就是我们的脚本代码中的

iiput[i] = input[i]

用iiput代替input进行约束, 最后的得出结果的时候在用回input就行了

用一个GitHub上的例子非常直观

#修改前

#!/usr/bin/python
from z3 import *
eax=BitVec("eax", 32)
ecx=eax+0x1a
eax=eax+5
ecx=eax*ecx
edx=ecx
edx=edx >> 8
eax=edx ^ ecx
eax=eax >> 16
eax=eax ^ edx ^ ecx
s = Solver()
s.add(eax == 0x1c966f8d)
s.check()
m = s.model()
print (m)
print (m[eax].as_long()) # error

#修改后

from z3 import *
eax0=BitVec("eax", 32)
eax=eax0                         #使用了eax代替eax0
ecx=eax+0x1a
............
s.add(eax == 0x1c966f8d)
s.check()
m = s.model()
print (m)
print (m[eax0].as_long())        #最后用回eax0