1#![no_implicit_prelude]
21
22extern crate core;
23
24use core::clone::Clone;
25use core::cmp::{Eq, PartialEq};
26use core::convert::From;
27use core::f32;
28use core::intrinsics::floorf32;
29use core::marker::Copy;
30
31static PATTERN: [u8; 0x10] = [
32 0x0, 0x8, 0x2, 0xA, 0xC, 0x4, 0xE, 0x6, 0x3, 0xB, 0x1, 0x9, 0xF, 0x7, 0xD, 0x5,
33];
34static MAP: [[u8; 16]; 0x200] = [
35 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
36 [3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
37 [3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
38 [3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0],
39 [3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0],
40 [3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0],
41 [3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0],
42 [3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3],
43 [2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
44 [2, 2, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
45 [2, 2, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0],
46 [2, 2, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0],
47 [2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0],
48 [2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0],
49 [2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3],
50 [7, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3],
51 [2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
52 [2, 2, 2, 2, 2, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0],
53 [7, 2, 2, 2, 2, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0],
54 [2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0],
55 [2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0],
56 [2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3],
57 [7, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3],
58 [1, 1, 7, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3],
59 [2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0],
60 [2, 2, 2, 2, 2, 2, 2, 3, 3, 0, 0, 0, 0, 0, 0, 0],
61 [2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 0, 0, 0, 0, 0],
62 [7, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 0, 0, 0],
63 [2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3],
64 [7, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3],
65 [1, 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3],
66 [1, 1, 1, 1, 7, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3],
67 [2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0],
68 [2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 0, 0, 0, 0, 0],
69 [2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 0, 0],
70 [2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3],
71 [1, 7, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3],
72 [1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3],
73 [1, 1, 1, 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3],
74 [1, 1, 1, 1, 1, 1, 5, 2, 4, 3, 3, 3, 3, 3, 3, 3],
75 [2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0],
76 [2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 0, 0, 0],
77 [2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3],
78 [7, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3],
79 [1, 1, 7, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3],
80 [1, 1, 1, 1, 7, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3],
81 [1, 1, 1, 1, 1, 7, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3],
82 [1, 1, 1, 1, 1, 1, 1, 7, 2, 2, 2, 3, 3, 3, 3, 3],
83 [2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0],
84 [2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3],
85 [7, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3],
86 [1, 1, 7, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3],
87 [1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3],
88 [1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 6, 4, 3, 3, 3],
89 [1, 1, 1, 1, 1, 1, 1, 7, 2, 2, 2, 3, 3, 3, 3, 0],
90 [1, 1, 1, 1, 1, 1, 1, 5, 5, 5, 7, 2, 2, 2, 3, 3],
91 [2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2],
92 [1, 7, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2],
93 [1, 1, 7, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3],
94 [1, 1, 1, 1, 7, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3],
95 [1, 1, 1, 1, 1, 7, 2, 2, 2, 2, 2, 2, 6, 4, 4, 3],
96 [1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 4, 4, 3, 3],
97 [1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 7, 2, 2, 3, 0, 0],
98 [1, 1, 1, 1, 1, 5, 5, 7, 7, 7, 2, 2, 6, 6, 6, 3],
99 [4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
100 [4, 4, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
101 [4, 4, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0],
102 [4, 4, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0],
103 [4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0],
104 [4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0],
105 [4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3],
106 [7, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3],
107 [2, 2, 6, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
108 [7, 7, 2, 4, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
109 [2, 2, 6, 4, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0],
110 [2, 2, 6, 4, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0],
111 [7, 7, 7, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0],
112 [7, 7, 7, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0],
113 [7, 7, 7, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0],
114 [7, 7, 7, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3],
115 [2, 2, 2, 2, 2, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0],
116 [2, 2, 2, 2, 2, 4, 4, 3, 3, 0, 0, 0, 0, 0, 0, 0],
117 [7, 7, 7, 2, 2, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0],
118 [7, 7, 2, 2, 2, 4, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0],
119 [2, 2, 2, 2, 2, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3],
120 [7, 7, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0],
121 [7, 7, 7, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3],
122 [1, 1, 7, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3],
123 [2, 2, 2, 2, 2, 2, 6, 4, 0, 0, 0, 0, 0, 0, 0, 0],
124 [7, 7, 2, 2, 2, 2, 2, 6, 3, 0, 0, 0, 0, 0, 0, 0],
125 [7, 7, 7, 2, 2, 2, 2, 2, 3, 3, 0, 0, 0, 0, 0, 0],
126 [7, 7, 7, 2, 2, 2, 2, 2, 3, 3, 3, 3, 0, 0, 0, 0],
127 [7, 7, 7, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 0, 0],
128 [7, 7, 7, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3],
129 [1, 1, 7, 7, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3],
130 [1, 1, 1, 7, 7, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3],
131 [5, 2, 2, 2, 2, 2, 2, 2, 2, 6, 0, 0, 0, 0, 0, 0],
132 [7, 7, 2, 2, 2, 2, 2, 2, 2, 6, 3, 0, 0, 0, 0, 0],
133 [7, 2, 2, 2, 2, 2, 2, 2, 2, 6, 3, 3, 3, 3, 0, 0],
134 [7, 7, 7, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 0],
135 [1, 1, 7, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 0],
136 [1, 1, 1, 7, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3],
137 [1, 1, 1, 1, 7, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3],
138 [1, 1, 1, 1, 1, 1, 1, 2, 3, 3, 3, 3, 3, 3, 3, 3],
139 [5, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0],
140 [5, 7, 7, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 0, 0, 0],
141 [7, 7, 7, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 0, 0],
142 [7, 7, 7, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3],
143 [1, 1, 1, 7, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3],
144 [1, 1, 1, 1, 7, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3],
145 [1, 1, 1, 1, 1, 1, 7, 2, 2, 2, 3, 3, 3, 3, 3, 3],
146 [1, 1, 1, 1, 1, 1, 1, 7, 7, 2, 3, 3, 3, 3, 3, 0],
147 [5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 6, 0, 0],
148 [7, 7, 7, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0],
149 [7, 7, 7, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3],
150 [1, 1, 1, 7, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3],
151 [1, 1, 1, 1, 7, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3],
152 [1, 1, 1, 1, 1, 1, 7, 2, 2, 2, 2, 2, 2, 3, 3, 3],
153 [1, 1, 1, 1, 1, 1, 1, 7, 7, 2, 2, 2, 6, 3, 3, 3],
154 [1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 2, 2, 2, 3, 3, 3],
155 [5, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2],
156 [1, 7, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2],
157 [1, 1, 1, 7, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2],
158 [1, 1, 1, 1, 7, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3],
159 [1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 3],
160 [1, 1, 1, 1, 1, 1, 1, 1, 5, 2, 2, 2, 2, 2, 4, 3],
161 [1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 2, 2, 6, 6, 4, 3],
162 [1, 1, 1, 1, 1, 1, 1, 5, 5, 5, 5, 5, 7, 2, 3, 3],
163 [4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
164 [4, 4, 4, 4, 4, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0],
165 [4, 4, 4, 4, 4, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0],
166 [4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0],
167 [4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0],
168 [4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3],
169 [7, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3],
170 [7, 7, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3],
171 [6, 6, 6, 6, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
172 [6, 6, 6, 6, 4, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0],
173 [7, 7, 6, 6, 4, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0],
174 [7, 7, 7, 4, 4, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0],
175 [6, 6, 6, 6, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0],
176 [6, 6, 6, 6, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3],
177 [7, 7, 7, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3],
178 [7, 7, 7, 7, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3],
179 [2, 2, 2, 2, 6, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0],
180 [7, 7, 7, 2, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
181 [7, 7, 7, 7, 2, 2, 4, 3, 0, 0, 0, 0, 0, 0, 0, 0],
182 [7, 7, 7, 7, 2, 6, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0],
183 [7, 7, 7, 2, 2, 6, 4, 3, 3, 3, 3, 3, 3, 3, 0, 0],
184 [7, 7, 7, 7, 7, 2, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0],
185 [7, 7, 7, 7, 7, 7, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0],
186 [1, 1, 7, 7, 7, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3],
187 [5, 2, 2, 2, 2, 6, 6, 6, 6, 0, 0, 0, 0, 0, 0, 0],
188 [5, 2, 2, 2, 2, 6, 6, 6, 6, 3, 3, 0, 0, 0, 0, 0],
189 [7, 7, 7, 7, 2, 2, 2, 2, 6, 3, 0, 0, 0, 0, 0, 0],
190 [7, 2, 2, 2, 2, 6, 6, 6, 6, 3, 3, 3, 3, 3, 3, 0],
191 [7, 7, 7, 7, 7, 2, 2, 2, 3, 3, 3, 3, 3, 0, 0, 0],
192 [7, 7, 7, 7, 7, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 0],
193 [1, 1, 7, 7, 7, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3],
194 [1, 1, 1, 1, 7, 7, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3],
195 [2, 2, 2, 2, 2, 2, 2, 6, 6, 6, 6, 4, 0, 0, 0, 0],
196 [2, 2, 2, 2, 2, 2, 2, 6, 6, 6, 6, 4, 3, 3, 0, 0],
197 [7, 7, 7, 7, 2, 2, 2, 2, 2, 2, 4, 3, 0, 0, 0, 0],
198 [5, 7, 7, 7, 7, 2, 2, 2, 2, 2, 3, 3, 3, 3, 0, 0],
199 [7, 7, 7, 7, 7, 7, 2, 2, 2, 2, 2, 3, 3, 3, 3, 0],
200 [1, 1, 7, 7, 7, 7, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3],
201 [1, 1, 1, 1, 1, 7, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3],
202 [1, 1, 1, 1, 1, 1, 7, 2, 3, 3, 3, 3, 3, 3, 3, 3],
203 [5, 5, 5, 5, 2, 2, 2, 2, 2, 2, 2, 6, 0, 0, 0, 0],
204 [5, 5, 5, 5, 2, 2, 2, 2, 2, 2, 2, 6, 3, 3, 0, 0],
205 [7, 7, 7, 7, 7, 7, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0],
206 [1, 7, 7, 7, 7, 7, 2, 2, 2, 2, 2, 2, 2, 3, 3, 0],
207 [1, 1, 7, 7, 7, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3],
208 [1, 1, 1, 1, 1, 7, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3],
209 [1, 1, 1, 1, 1, 1, 7, 2, 2, 2, 3, 3, 3, 3, 3, 3],
210 [1, 1, 1, 1, 1, 1, 1, 1, 7, 2, 3, 3, 3, 3, 3, 3],
211 [2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 6, 6, 6, 6, 6],
212 [7, 7, 7, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 6, 6],
213 [1, 7, 7, 7, 7, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0],
214 [1, 1, 7, 7, 7, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3],
215 [1, 1, 1, 1, 7, 7, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3],
216 [1, 1, 1, 1, 1, 1, 7, 7, 2, 2, 2, 2, 2, 3, 3, 3],
217 [1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 2, 2, 2, 3, 3, 3],
218 [1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 7, 2, 2, 3, 3, 3],
219 [5, 5, 5, 5, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2],
220 [1, 5, 5, 5, 7, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2],
221 [1, 1, 1, 1, 7, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2],
222 [1, 1, 1, 1, 1, 7, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2],
223 [1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 3],
224 [1, 1, 1, 1, 1, 1, 1, 1, 7, 2, 2, 2, 2, 2, 2, 3],
225 [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 2, 2, 2, 3, 0],
226 [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 7, 2, 2, 2, 3],
227 [4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0],
228 [4, 4, 4, 4, 4, 4, 4, 3, 3, 0, 0, 0, 0, 0, 0, 0],
229 [4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 0, 0, 0, 0, 0],
230 [4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 0, 0, 0],
231 [4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3],
232 [7, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3],
233 [7, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3],
234 [1, 7, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3],
235 [6, 6, 6, 6, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0],
236 [6, 6, 6, 6, 4, 4, 4, 3, 3, 0, 0, 0, 0, 0, 0, 0],
237 [7, 7, 7, 6, 4, 4, 4, 3, 3, 0, 0, 0, 0, 0, 0, 0],
238 [7, 7, 7, 6, 4, 4, 4, 3, 3, 3, 3, 0, 0, 0, 0, 0],
239 [7, 7, 7, 6, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 0, 0],
240 [7, 7, 7, 6, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3],
241 [7, 7, 7, 7, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3],
242 [7, 7, 7, 7, 7, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3],
243 [2, 2, 6, 6, 6, 6, 6, 4, 4, 0, 0, 0, 0, 0, 0, 0],
244 [7, 7, 2, 6, 6, 6, 6, 4, 3, 0, 0, 0, 0, 0, 0, 0],
245 [7, 7, 7, 6, 6, 6, 6, 3, 3, 0, 0, 0, 0, 0, 0, 0],
246 [7, 7, 7, 7, 7, 7, 6, 4, 3, 3, 0, 0, 0, 0, 0, 0],
247 [7, 7, 7, 6, 6, 6, 6, 3, 3, 3, 3, 3, 3, 3, 0, 0],
248 [7, 7, 7, 7, 7, 7, 7, 4, 3, 3, 3, 3, 3, 3, 0, 0],
249 [7, 7, 7, 7, 7, 7, 7, 4, 3, 3, 3, 3, 3, 3, 3, 3],
250 [7, 7, 7, 7, 7, 7, 7, 3, 3, 3, 3, 3, 3, 3, 3, 3],
251 [2, 2, 2, 2, 2, 6, 6, 6, 6, 4, 4, 4, 0, 0, 0, 0],
252 [5, 7, 7, 2, 2, 2, 6, 6, 4, 4, 3, 0, 0, 0, 0, 0],
253 [2, 2, 2, 2, 6, 6, 6, 6, 6, 4, 4, 3, 3, 3, 3, 3],
254 [5, 7, 7, 7, 7, 7, 7, 2, 6, 3, 3, 0, 0, 0, 0, 0],
255 [7, 7, 7, 7, 7, 7, 7, 2, 6, 3, 3, 3, 3, 0, 0, 0],
256 [7, 7, 7, 7, 7, 7, 7, 2, 6, 3, 3, 3, 3, 3, 3, 0],
257 [1, 7, 7, 7, 7, 7, 7, 7, 2, 3, 3, 3, 3, 3, 3, 3],
258 [1, 1, 1, 1, 7, 7, 7, 7, 3, 3, 3, 3, 3, 3, 3, 3],
259 [5, 5, 5, 2, 2, 2, 2, 6, 6, 6, 6, 0, 0, 0, 0, 0],
260 [7, 7, 7, 2, 2, 2, 2, 2, 2, 6, 6, 6, 4, 0, 0, 0],
261 [5, 7, 7, 7, 7, 7, 2, 2, 2, 2, 6, 4, 3, 0, 0, 0],
262 [5, 5, 7, 7, 7, 7, 7, 7, 2, 2, 2, 3, 3, 0, 0, 0],
263 [1, 1, 7, 7, 7, 7, 7, 2, 2, 2, 6, 3, 3, 3, 0, 0],
264 [1, 7, 7, 7, 7, 7, 7, 7, 2, 2, 2, 3, 3, 3, 3, 3],
265 [1, 1, 1, 1, 1, 7, 7, 7, 2, 2, 3, 3, 3, 3, 3, 3],
266 [1, 1, 1, 1, 1, 1, 1, 7, 2, 3, 3, 3, 3, 3, 3, 3],
267 [5, 5, 2, 2, 2, 2, 2, 2, 2, 6, 6, 6, 6, 6, 0, 0],
268 [5, 5, 7, 7, 7, 2, 2, 2, 2, 2, 2, 6, 6, 0, 0, 0],
269 [5, 7, 7, 7, 7, 2, 2, 2, 2, 2, 2, 2, 6, 4, 3, 0],
270 [1, 1, 1, 7, 7, 7, 7, 7, 2, 2, 2, 2, 2, 0, 0, 0],
271 [1, 5, 7, 7, 7, 7, 7, 7, 2, 2, 2, 2, 2, 3, 3, 3],
272 [1, 1, 1, 1, 7, 7, 7, 7, 2, 2, 2, 2, 3, 3, 3, 3],
273 [1, 1, 1, 1, 1, 1, 7, 7, 2, 2, 2, 3, 3, 3, 3, 3],
274 [1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 2, 3, 3, 3, 3, 3],
275 [5, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 6, 6, 6, 6, 6],
276 [5, 7, 7, 7, 2, 2, 2, 2, 2, 2, 2, 2, 2, 6, 6, 6],
277 [5, 7, 7, 7, 7, 7, 7, 2, 2, 2, 2, 2, 2, 2, 2, 6],
278 [7, 7, 7, 7, 7, 7, 7, 7, 2, 2, 2, 2, 2, 2, 2, 2],
279 [1, 1, 1, 1, 1, 7, 7, 2, 2, 2, 2, 2, 2, 2, 3, 3],
280 [1, 1, 1, 1, 1, 1, 1, 7, 2, 2, 2, 2, 2, 3, 3, 3],
281 [1, 1, 1, 1, 1, 1, 1, 1, 7, 7, 2, 2, 2, 3, 3, 3],
282 [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 2, 3, 3, 3],
283 [5, 5, 5, 5, 5, 5, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2],
284 [1, 5, 5, 5, 5, 5, 7, 2, 2, 2, 2, 2, 2, 2, 2, 2],
285 [1, 1, 1, 1, 5, 5, 7, 2, 2, 2, 2, 2, 2, 2, 2, 2],
286 [1, 1, 1, 1, 1, 1, 7, 2, 2, 2, 2, 2, 2, 2, 2, 2],
287 [1, 1, 1, 1, 1, 1, 1, 7, 2, 2, 2, 2, 2, 2, 2, 2],
288 [1, 1, 1, 1, 1, 1, 1, 1, 7, 2, 2, 2, 2, 2, 2, 3],
289 [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 2, 2, 2, 3],
290 [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 2, 2, 3],
291 [4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0],
292 [4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 0, 0, 0, 0, 0],
293 [4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 0, 0],
294 [4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3],
295 [7, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3],
296 [7, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3],
297 [1, 7, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3],
298 [1, 7, 7, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3],
299 [6, 6, 6, 6, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0],
300 [6, 6, 6, 6, 4, 4, 4, 4, 4, 3, 3, 0, 0, 0, 0, 0],
301 [7, 7, 7, 6, 4, 4, 4, 4, 4, 4, 3, 3, 0, 0, 0, 0],
302 [7, 6, 6, 6, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 0],
303 [7, 7, 7, 6, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3],
304 [7, 7, 7, 6, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3],
305 [7, 7, 7, 7, 7, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3],
306 [1, 7, 7, 7, 7, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3],
307 [6, 6, 6, 6, 6, 6, 6, 6, 6, 0, 0, 0, 0, 0, 0, 0],
308 [6, 6, 6, 6, 6, 6, 6, 6, 6, 3, 3, 0, 0, 0, 0, 0],
309 [6, 6, 6, 6, 6, 6, 6, 6, 6, 3, 3, 3, 3, 3, 0, 0],
310 [6, 6, 6, 6, 6, 6, 6, 6, 6, 3, 3, 3, 3, 3, 3, 3],
311 [7, 7, 7, 7, 7, 6, 6, 6, 4, 4, 3, 3, 3, 3, 3, 0],
312 [7, 7, 7, 7, 7, 7, 7, 4, 4, 4, 3, 3, 3, 3, 3, 3],
313 [7, 7, 7, 7, 7, 7, 7, 4, 4, 3, 3, 3, 3, 3, 3, 3],
314 [1, 7, 7, 7, 7, 7, 7, 4, 4, 3, 3, 3, 3, 3, 3, 3],
315 [5, 5, 5, 5, 6, 6, 6, 6, 6, 0, 0, 0, 0, 0, 0, 0],
316 [5, 5, 7, 7, 7, 6, 6, 6, 6, 6, 0, 0, 0, 0, 0, 0],
317 [5, 7, 7, 7, 7, 7, 2, 6, 6, 6, 4, 3, 0, 0, 0, 0],
318 [5, 7, 7, 7, 7, 7, 7, 6, 6, 6, 3, 3, 0, 0, 0, 0],
319 [7, 7, 7, 7, 7, 7, 7, 6, 6, 6, 3, 3, 3, 3, 0, 0],
320 [7, 7, 7, 7, 7, 7, 7, 6, 6, 6, 3, 3, 3, 3, 3, 3],
321 [7, 7, 7, 7, 7, 7, 7, 7, 7, 4, 3, 3, 3, 3, 3, 3],
322 [1, 1, 1, 7, 7, 7, 7, 7, 7, 3, 3, 3, 3, 3, 3, 3],
323 [2, 2, 2, 2, 2, 2, 2, 6, 6, 6, 6, 6, 4, 4, 4, 4],
324 [5, 5, 5, 7, 7, 7, 2, 2, 2, 6, 6, 4, 4, 0, 0, 0],
325 [5, 7, 7, 7, 7, 7, 2, 2, 2, 6, 6, 6, 4, 0, 0, 0],
326 [5, 5, 5, 7, 7, 7, 7, 7, 7, 2, 6, 3, 3, 0, 0, 0],
327 [1, 1, 1, 7, 7, 7, 7, 7, 7, 2, 6, 3, 0, 0, 0, 0],
328 [1, 1, 1, 5, 7, 7, 7, 7, 7, 7, 2, 3, 3, 3, 3, 0],
329 [1, 1, 1, 1, 7, 7, 7, 7, 7, 7, 2, 3, 3, 3, 3, 3],
330 [1, 1, 1, 1, 1, 1, 1, 7, 7, 7, 3, 3, 3, 3, 3, 3],
331 [2, 2, 2, 2, 2, 2, 2, 6, 6, 6, 6, 6, 6, 6, 6, 6],
332 [7, 7, 7, 2, 2, 2, 2, 2, 2, 6, 6, 6, 6, 6, 6, 6],
333 [1, 7, 7, 7, 7, 7, 2, 2, 2, 2, 2, 6, 6, 6, 6, 0],
334 [1, 7, 7, 7, 7, 7, 7, 7, 2, 2, 2, 2, 6, 6, 0, 0],
335 [1, 1, 5, 7, 7, 7, 7, 7, 7, 7, 2, 2, 2, 3, 3, 0],
336 [1, 1, 1, 7, 7, 7, 7, 7, 7, 7, 2, 2, 2, 3, 3, 3],
337 [1, 1, 1, 1, 1, 1, 1, 7, 7, 7, 2, 2, 3, 3, 3, 3],
338 [1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 7, 3, 3, 3, 3, 3],
339 [5, 5, 5, 5, 5, 2, 2, 2, 2, 2, 2, 2, 6, 6, 6, 6],
340 [5, 5, 5, 5, 7, 7, 7, 2, 2, 2, 2, 2, 2, 6, 6, 6],
341 [1, 5, 5, 7, 7, 7, 7, 7, 2, 2, 2, 2, 2, 2, 6, 6],
342 [1, 5, 5, 7, 7, 7, 7, 7, 7, 7, 2, 2, 2, 2, 2, 2],
343 [1, 1, 1, 7, 7, 7, 7, 7, 7, 7, 7, 2, 2, 2, 2, 2],
344 [1, 1, 1, 1, 1, 1, 7, 7, 7, 7, 2, 2, 2, 2, 3, 3],
345 [1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 7, 2, 2, 2, 3, 3],
346 [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 7, 2, 3, 3, 3],
347 [5, 5, 5, 5, 5, 5, 5, 5, 5, 2, 2, 2, 2, 2, 2, 2],
348 [1, 1, 5, 5, 5, 5, 5, 5, 5, 2, 2, 2, 2, 2, 2, 2],
349 [1, 1, 1, 1, 5, 5, 5, 5, 7, 2, 2, 2, 2, 2, 2, 2],
350 [1, 1, 1, 1, 1, 1, 5, 5, 7, 2, 2, 2, 2, 2, 2, 2],
351 [1, 1, 1, 1, 1, 1, 1, 1, 7, 2, 2, 2, 2, 2, 2, 2],
352 [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 2, 2, 2, 2, 2],
353 [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 3],
354 [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 2, 3],
355 [4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0],
356 [4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 0, 0, 0],
357 [4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3],
358 [7, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3],
359 [7, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3],
360 [7, 7, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3],
361 [1, 7, 7, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3],
362 [1, 1, 7, 2, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3],
363 [6, 6, 6, 6, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0],
364 [6, 6, 6, 6, 4, 4, 4, 4, 4, 4, 4, 3, 3, 0, 0, 0],
365 [6, 6, 6, 6, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3],
366 [7, 7, 6, 6, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3],
367 [7, 7, 7, 7, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3],
368 [7, 7, 7, 7, 7, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3],
369 [1, 1, 7, 7, 7, 6, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3],
370 [1, 1, 1, 7, 7, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3],
371 [6, 6, 6, 6, 6, 6, 6, 6, 6, 4, 4, 0, 0, 0, 0, 0],
372 [7, 7, 7, 6, 6, 6, 6, 6, 4, 4, 4, 4, 0, 0, 0, 0],
373 [7, 7, 7, 7, 6, 6, 6, 4, 4, 4, 4, 4, 3, 0, 0, 0],
374 [7, 7, 7, 7, 7, 6, 6, 6, 4, 4, 4, 4, 3, 3, 3, 0],
375 [7, 7, 7, 7, 7, 7, 6, 4, 4, 4, 4, 4, 3, 3, 3, 3],
376 [7, 7, 7, 7, 7, 7, 7, 6, 4, 4, 4, 4, 3, 3, 3, 3],
377 [1, 1, 1, 7, 7, 7, 7, 4, 4, 4, 4, 3, 3, 3, 3, 3],
378 [1, 1, 1, 7, 7, 7, 7, 4, 4, 4, 4, 3, 3, 3, 3, 3],
379 [5, 5, 2, 2, 6, 6, 6, 6, 6, 4, 4, 4, 4, 0, 0, 0],
380 [5, 5, 7, 7, 7, 6, 6, 6, 6, 6, 4, 4, 0, 0, 0, 0],
381 [5, 7, 7, 7, 7, 7, 7, 6, 6, 6, 4, 4, 0, 0, 0, 0],
382 [5, 7, 7, 7, 7, 7, 7, 7, 6, 4, 4, 4, 3, 0, 0, 0],
383 [7, 7, 7, 7, 7, 7, 7, 7, 6, 6, 4, 4, 3, 3, 3, 0],
384 [1, 7, 7, 7, 7, 7, 7, 7, 6, 6, 4, 4, 3, 3, 3, 3],
385 [1, 1, 1, 7, 7, 7, 7, 7, 7, 4, 4, 3, 3, 3, 3, 3],
386 [1, 1, 1, 1, 7, 7, 7, 7, 7, 7, 4, 3, 3, 3, 3, 3],
387 [5, 5, 5, 5, 2, 2, 2, 6, 6, 6, 6, 6, 4, 4, 0, 0],
388 [5, 7, 7, 7, 2, 2, 2, 6, 6, 6, 6, 6, 6, 4, 4, 0],
389 [5, 7, 7, 7, 7, 7, 7, 2, 2, 6, 6, 6, 4, 4, 0, 0],
390 [5, 5, 7, 7, 7, 7, 7, 7, 7, 7, 7, 6, 6, 0, 0, 0],
391 [1, 5, 5, 7, 7, 7, 7, 7, 7, 7, 6, 6, 3, 3, 3, 0],
392 [1, 5, 7, 7, 7, 7, 7, 7, 7, 7, 7, 6, 6, 3, 3, 3],
393 [1, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 3, 3, 3],
394 [1, 1, 1, 1, 7, 7, 7, 7, 7, 7, 7, 7, 3, 3, 3, 3],
395 [5, 5, 2, 2, 2, 2, 2, 6, 6, 6, 6, 6, 6, 6, 6, 6],
396 [5, 5, 7, 7, 7, 2, 2, 2, 2, 6, 6, 6, 6, 6, 6, 6],
397 [5, 7, 7, 7, 7, 7, 7, 2, 2, 2, 2, 6, 6, 6, 6, 6],
398 [7, 7, 7, 7, 7, 7, 7, 7, 7, 2, 2, 2, 6, 6, 6, 6],
399 [7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 2, 2, 2, 6, 6],
400 [1, 5, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 2, 3, 3],
401 [1, 1, 1, 1, 1, 7, 7, 7, 7, 7, 7, 7, 7, 2, 3, 3],
402 [1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 7, 7, 3, 3, 3, 3],
403 [5, 5, 5, 5, 5, 5, 5, 2, 2, 2, 2, 2, 6, 6, 6, 6],
404 [5, 5, 5, 5, 5, 5, 7, 7, 7, 2, 2, 2, 2, 6, 6, 6],
405 [1, 5, 5, 5, 5, 5, 7, 7, 7, 7, 2, 2, 2, 2, 6, 6],
406 [1, 5, 5, 5, 5, 7, 7, 7, 7, 7, 7, 7, 2, 2, 2, 2],
407 [1, 1, 1, 5, 5, 7, 7, 7, 7, 7, 7, 7, 7, 2, 2, 2],
408 [1, 1, 1, 1, 1, 7, 7, 7, 7, 7, 7, 7, 7, 2, 2, 2],
409 [1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 7, 7, 7, 2, 2, 3],
410 [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 7, 7, 3, 3],
411 [5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 2, 2, 2, 2, 2],
412 [1, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 7, 2, 2, 2, 2],
413 [1, 1, 1, 1, 5, 5, 5, 5, 5, 5, 5, 7, 2, 2, 2, 2],
414 [1, 1, 1, 1, 1, 1, 5, 5, 5, 5, 5, 7, 2, 2, 2, 2],
415 [1, 1, 1, 1, 1, 1, 1, 1, 5, 5, 5, 7, 2, 2, 2, 2],
416 [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 2, 2, 2, 2],
417 [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 2, 2, 2],
418 [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 2, 3],
419 [4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0],
420 [4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3],
421 [7, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3],
422 [7, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3],
423 [7, 7, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3],
424 [1, 7, 7, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3],
425 [1, 1, 7, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3],
426 [1, 1, 7, 2, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 0],
427 [6, 6, 6, 6, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0],
428 [6, 6, 6, 6, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3],
429 [7, 7, 7, 6, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3],
430 [7, 7, 7, 7, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3],
431 [7, 7, 7, 7, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3],
432 [1, 1, 7, 7, 7, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3],
433 [1, 1, 1, 7, 7, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3],
434 [1, 1, 1, 7, 7, 2, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3],
435 [6, 6, 6, 6, 6, 6, 6, 6, 6, 4, 4, 4, 4, 4, 0, 0],
436 [6, 6, 6, 6, 6, 6, 6, 6, 6, 4, 4, 4, 4, 4, 3, 3],
437 [7, 7, 7, 7, 6, 6, 6, 4, 4, 4, 4, 4, 4, 4, 3, 0],
438 [7, 7, 7, 7, 7, 6, 6, 6, 4, 4, 4, 4, 4, 4, 3, 3],
439 [7, 7, 7, 7, 7, 7, 7, 6, 4, 4, 4, 4, 4, 4, 3, 3],
440 [1, 7, 7, 7, 7, 7, 7, 7, 4, 4, 4, 4, 4, 4, 3, 3],
441 [1, 1, 1, 7, 7, 7, 7, 4, 4, 4, 4, 4, 4, 3, 3, 3],
442 [1, 1, 1, 1, 7, 7, 7, 7, 4, 4, 4, 4, 4, 3, 3, 3],
443 [6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 0, 0],
444 [6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 3, 3],
445 [7, 7, 7, 7, 7, 6, 6, 6, 6, 6, 6, 4, 4, 4, 3, 0],
446 [7, 7, 7, 7, 7, 7, 7, 7, 6, 6, 4, 4, 4, 4, 4, 0],
447 [7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 6, 4, 4, 4, 4, 3],
448 [1, 1, 7, 7, 7, 7, 7, 7, 7, 7, 4, 4, 4, 4, 3, 3],
449 [1, 1, 1, 1, 7, 7, 7, 7, 7, 7, 4, 4, 4, 4, 3, 3],
450 [1, 1, 1, 1, 7, 7, 7, 7, 7, 7, 4, 4, 4, 3, 3, 3],
451 [2, 2, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6],
452 [5, 5, 7, 7, 7, 2, 6, 6, 6, 6, 6, 6, 6, 6, 4, 0],
453 [5, 7, 7, 7, 7, 7, 7, 6, 6, 6, 6, 6, 6, 6, 6, 0],
454 [1, 7, 7, 7, 7, 7, 7, 7, 6, 6, 6, 6, 6, 6, 4, 0],
455 [1, 5, 7, 7, 7, 7, 7, 7, 7, 7, 7, 6, 6, 4, 4, 3],
456 [1, 1, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 6, 4, 4, 3],
457 [1, 1, 1, 7, 7, 7, 7, 7, 7, 7, 7, 7, 4, 4, 3, 3],
458 [1, 1, 1, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 4, 3, 3],
459 [5, 5, 5, 5, 5, 2, 2, 6, 6, 6, 6, 6, 6, 6, 6, 6],
460 [5, 5, 5, 5, 7, 7, 7, 2, 2, 6, 6, 6, 6, 6, 6, 6],
461 [5, 5, 5, 7, 7, 7, 7, 7, 7, 2, 6, 6, 6, 6, 6, 6],
462 [5, 5, 7, 7, 7, 7, 7, 7, 7, 7, 7, 2, 6, 6, 6, 6],
463 [5, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 2, 6, 6],
464 [5, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7],
465 [1, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7],
466 [1, 1, 1, 1, 1, 1, 7, 7, 7, 7, 7, 7, 7, 7, 3, 3],
467 [5, 5, 5, 5, 5, 5, 5, 5, 5, 2, 2, 6, 6, 6, 6, 6],
468 [1, 5, 5, 5, 5, 5, 5, 5, 5, 7, 7, 2, 2, 6, 6, 6],
469 [1, 5, 5, 5, 5, 5, 5, 5, 7, 7, 7, 7, 2, 2, 6, 6],
470 [1, 5, 5, 5, 5, 5, 5, 7, 7, 7, 7, 7, 7, 7, 7, 2],
471 [1, 1, 1, 5, 5, 5, 5, 7, 7, 7, 7, 7, 7, 7, 7, 2],
472 [1, 1, 1, 1, 1, 5, 5, 7, 7, 7, 7, 7, 7, 7, 7, 2],
473 [1, 1, 1, 1, 1, 1, 1, 1, 7, 7, 7, 7, 7, 7, 7, 2],
474 [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 7, 7, 3, 3],
475 [5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 2, 2],
476 [1, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 7, 2, 2],
477 [1, 1, 1, 1, 5, 5, 5, 5, 5, 5, 5, 5, 5, 7, 2, 2],
478 [1, 1, 1, 1, 1, 1, 5, 5, 5, 5, 5, 5, 5, 7, 2, 2],
479 [1, 1, 1, 1, 1, 1, 1, 1, 5, 5, 5, 5, 5, 7, 2, 2],
480 [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 5, 7, 2, 2],
481 [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 2, 2],
482 [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 2],
483 [4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4],
484 [7, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3],
485 [7, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3],
486 [1, 7, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3],
487 [1, 7, 7, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3],
488 [1, 7, 7, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3],
489 [1, 1, 1, 2, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3],
490 [1, 1, 7, 2, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 0],
491 [6, 6, 6, 6, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4],
492 [7, 7, 7, 6, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4],
493 [7, 7, 7, 6, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3],
494 [1, 7, 7, 7, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3],
495 [1, 1, 7, 7, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3],
496 [1, 1, 1, 7, 7, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3],
497 [1, 1, 1, 1, 7, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3],
498 [1, 1, 1, 7, 7, 2, 2, 4, 4, 4, 4, 4, 4, 4, 4, 3],
499 [6, 6, 6, 6, 6, 6, 6, 6, 6, 4, 4, 4, 4, 4, 4, 4],
500 [7, 7, 6, 6, 6, 6, 6, 6, 4, 4, 4, 4, 4, 4, 4, 4],
501 [7, 7, 7, 7, 7, 6, 6, 4, 4, 4, 4, 4, 4, 4, 4, 4],
502 [7, 7, 7, 7, 7, 7, 7, 6, 4, 4, 4, 4, 4, 4, 4, 4],
503 [1, 7, 7, 7, 7, 7, 7, 6, 4, 4, 4, 4, 4, 4, 4, 4],
504 [1, 1, 1, 7, 7, 7, 7, 4, 4, 4, 4, 4, 4, 4, 4, 3],
505 [1, 1, 1, 1, 1, 7, 7, 4, 4, 4, 4, 4, 4, 4, 4, 3],
506 [1, 1, 1, 1, 1, 7, 7, 2, 4, 4, 4, 4, 4, 4, 4, 3],
507 [6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 4, 4],
508 [7, 7, 7, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 4, 4, 4],
509 [1, 7, 7, 7, 7, 6, 6, 6, 6, 6, 6, 4, 4, 4, 4, 4],
510 [1, 1, 7, 7, 7, 7, 7, 7, 6, 6, 4, 4, 4, 4, 4, 4],
511 [1, 1, 7, 7, 7, 7, 7, 7, 7, 4, 4, 4, 4, 4, 4, 4],
512 [1, 1, 1, 1, 7, 7, 7, 7, 7, 7, 4, 4, 4, 4, 4, 4],
513 [1, 1, 1, 1, 1, 7, 7, 7, 7, 7, 4, 4, 4, 4, 4, 3],
514 [1, 1, 1, 1, 1, 1, 1, 7, 7, 7, 4, 4, 4, 4, 4, 3],
515 [5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6],
516 [5, 7, 7, 7, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6],
517 [1, 5, 7, 7, 7, 7, 6, 6, 6, 6, 6, 6, 6, 6, 6, 4],
518 [1, 7, 7, 7, 7, 7, 7, 7, 6, 6, 6, 6, 6, 6, 6, 4],
519 [1, 1, 1, 7, 7, 7, 7, 7, 7, 7, 6, 6, 4, 4, 4, 4],
520 [1, 1, 1, 7, 7, 7, 7, 7, 7, 7, 7, 7, 6, 4, 4, 4],
521 [1, 1, 1, 1, 1, 7, 7, 7, 7, 7, 7, 7, 4, 4, 4, 4],
522 [1, 1, 1, 1, 1, 7, 7, 7, 7, 7, 7, 7, 7, 4, 4, 4],
523 [5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6],
524 [5, 5, 5, 5, 5, 5, 7, 7, 7, 6, 6, 6, 6, 6, 6, 6],
525 [1, 1, 5, 5, 5, 5, 7, 7, 7, 6, 6, 6, 6, 6, 6, 6],
526 [1, 1, 1, 5, 5, 7, 7, 7, 7, 7, 6, 6, 6, 6, 6, 6],
527 [1, 1, 1, 1, 1, 1, 7, 7, 7, 7, 6, 6, 6, 6, 6, 6],
528 [1, 1, 1, 1, 7, 7, 7, 7, 7, 7, 7, 7, 7, 6, 6, 6],
529 [1, 1, 1, 1, 1, 7, 7, 7, 7, 7, 7, 7, 7, 7, 4, 4],
530 [1, 1, 1, 1, 1, 1, 1, 7, 7, 7, 7, 7, 7, 7, 7, 4],
531 [5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6],
532 [1, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 7, 6, 6, 6, 6],
533 [1, 1, 1, 5, 5, 5, 5, 5, 5, 5, 5, 7, 7, 6, 6, 6],
534 [1, 1, 1, 1, 5, 5, 5, 5, 5, 5, 7, 7, 7, 7, 6, 6],
535 [1, 1, 1, 1, 1, 1, 5, 5, 5, 5, 7, 7, 7, 7, 6, 6],
536 [1, 1, 1, 1, 1, 1, 1, 5, 5, 7, 7, 7, 7, 7, 6, 6],
537 [1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 7, 7, 7, 7, 7, 7],
538 [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 7, 7, 7, 7],
539 [5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5],
540 [1, 1, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5],
541 [1, 1, 1, 1, 1, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5],
542 [1, 1, 1, 1, 1, 1, 1, 5, 5, 5, 5, 5, 5, 5, 5, 5],
543 [1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 5, 5, 5, 5, 5, 5],
544 [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 5, 5, 5, 5],
545 [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 5],
546 [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
547];
548
549#[repr(u8)]
550pub enum Color {
551 Black = 0x0,
552 White = 0x1,
553 Green = 0x2,
554 Blue = 0x3,
555 Red = 0x4,
556 Yellow = 0x5,
557 Orange = 0x6,
558 Clean = 0x7,
559}
560
561pub struct RGB(u8, u8, u8);
562
563impl RGB {
564 #[inline(always)]
565 pub const fn empty() -> RGB {
566 RGB(0u8, 0u8, 0u8)
567 }
568 #[inline(always)]
569 pub const fn raw(c: u32) -> RGB {
570 RGB(
571 ((c >> 16) & 0xFF) as u8,
572 ((c >> 8) & 0xFF) as u8,
573 (c & 0xFF) as u8,
574 )
575 }
576 #[inline(always)]
577 pub const fn rgb(r: u8, b: u8, g: u8) -> RGB {
578 RGB(r, g, b)
579 }
580
581 pub fn hsv(h: f32, s: f32, v: f32) -> RGB {
582 let i = unsafe { floorf32(h * 6.0) };
583 let (f, y) = (h * 6.0 - i, v * 255.0);
584 let (p, q, t) = (
585 (y * (1.0 - s)) as u8,
586 (y * (1.0 - f * s)) as u8,
587 (y * (1.0 - (1.0 - f) * s)) as u8,
588 );
589 match i as u8 % 6 {
590 0 => RGB(y as u8, t, p),
591 1 => RGB(q, y as u8, p),
592 2 => RGB(p, y as u8, t),
593 3 => RGB(p, q, y as u8),
594 4 => RGB(t, p, y as u8),
595 5 => RGB(y as u8, p, q),
596 _ => RGB(0u8, 0u8, 0u8),
597 }
598 }
599
600 #[inline(always)]
601 pub fn red(&self) -> u8 {
602 self.0
603 }
604 #[inline(always)]
605 pub fn blue(&self) -> u8 {
606 self.2
607 }
608 #[inline(always)]
609 pub fn green(&self) -> u8 {
610 self.1
611 }
612 #[inline(always)]
613 pub fn uint(&self) -> u32 {
614 ((self.0 as u32) << 16) | ((self.1 as u32) << 8) | self.2 as u32
615 }
616}
617
618impl Eq for RGB {}
619impl Copy for RGB {}
620impl Clone for RGB {
621 #[inline(always)]
622 fn clone(&self) -> RGB {
623 RGB(self.0, self.1, self.2)
624 }
625}
626impl PartialEq for RGB {
627 #[inline(always)]
628 fn eq(&self, other: &RGB) -> bool {
629 self.0 == other.0 && self.1 == other.1 && self.2 == other.2
630 }
631}
632impl From<u32> for RGB {
633 #[inline(always)]
634 fn from(v: u32) -> RGB {
635 RGB::raw(v)
636 }
637}
638impl From<i32> for RGB {
639 #[inline(always)]
640 fn from(v: i32) -> RGB {
641 RGB::raw(v as u32)
642 }
643}
644impl From<(u8, u8, u8)> for RGB {
645 #[inline(always)]
646 fn from(v: (u8, u8, u8)) -> RGB {
647 RGB(v.0, v.1, v.2)
648 }
649}
650
651#[inline]
652pub(super) fn dither(x: u16, y: u16, c: u32) -> u8 {
653 let k = (((((c >> 16) & 0xFF) & 0xE0) << 1) | ((((c >> 8) & 0xFF) & 0xE0) >> 2) | (((c & 0xFF) & 0xE0) >> 5)) as usize;
654 let i = ((x & 0x3) | ((y & 0x3) << 2)) as usize;
655 MAP[k][PATTERN[i] as usize]
656}