1 /***************************************************************************
2 * Copyright (c) 2024 Microsoft Corporation
3 *
4 * This program and the accompanying materials are made available under the
5 * terms of the MIT License which is available at
6 * https://opensource.org/licenses/MIT.
7 *
8 * SPDX-License-Identifier: MIT
9 **************************************************************************/
10
11
12 /**************************************************************************/
13 /**************************************************************************/
14 /** */
15 /** NetX Utility */
16 /** */
17 /** NetX Duo IPerf Test Program */
18 /** */
19 /**************************************************************************/
20 /**************************************************************************/
21
22 #include "tx_api.h"
23 #include "nx_api.h"
24 #include "nx_iperf.h"
25 #ifndef NX_WEB_HTTP_NO_FILEX
26 #include "fx_api.h"
27 #else
28 #include "filex_stub.h"
29 #endif
30
31 #include "nx_web_http_server.h"
32
33 #if defined(TX_ENABLE_EXECUTION_CHANGE_NOTIFY) || defined(TX_EXECUTION_PROFILE_ENABLE)
34 #include "tx_execution_profile.h"
35 #endif /* TX_EXECUTION_PROFILE_ENABLE */
36
37 /* Define the counters used in the demo application... */
38
39 NX_WEB_HTTP_SERVER nx_iperf_web_server;
40 FX_MEDIA nx_iperf_ram_disk;
41 NX_IP *nx_iperf_test_ip;
42 NX_PACKET_POOL *nx_iperf_test_pool;
43 UCHAR *nx_iperf_stack_area;
44 ULONG nx_iperf_stack_area_size;
45 ULONG nx_iperf_test_error_counter;
46 ctrl_info nx_iperf_ctrl_info;
47
48 static NXD_ADDRESS udp_tx_ip_address;
49 static NXD_ADDRESS tcp_tx_ip_address;
50
51 static ULONG udp_tx_port = NX_IPERF_DESTINATION_PORT;
52 static ULONG tcp_tx_port = NX_IPERF_DESTINATION_PORT;
53
54 static UINT udp_tx_packet_size = 1470;
55 static UINT udp_tx_test_time = 10;
56 static UINT udp_rx_test_time = 10;
57 static UINT tcp_tx_test_time = 10;
58 static UINT tcp_rx_test_time = 10;
59
60 static ULONG error_counter;
61
62 NX_TCP_SOCKET tcp_server_socket;
63 NX_TCP_SOCKET tcp_client_socket;
64 NX_UDP_SOCKET udp_server_socket;
65 NX_UDP_SOCKET udp_client_socket;
66 ULONG thread_tcp_rx_counter;
67 ULONG thread_tcp_tx_counter;
68 ULONG thread_udp_rx_counter;
69 ULONG thread_udp_tx_counter;
70 static TX_THREAD thread_tcp_rx_iperf;
71 static TX_THREAD thread_tcp_tx_iperf;
72 static TX_THREAD thread_udp_rx_iperf;
73 static TX_THREAD thread_udp_tx_iperf;
74
75 extern ULONG _tx_timer_system_clock;
76 #if defined(TX_ENABLE_EXECUTION_CHANGE_NOTIFY) || defined(TX_EXECUTION_PROFILE_ENABLE)
77 EXECUTION_TIME thread_time = 0;
78 EXECUTION_TIME isr_time = 0;
79 EXECUTION_TIME idle_time = 0;
80 extern TX_THREAD *_tx_thread_created_ptr;
81 #endif
82
83 UCHAR udp_client_socket_vlan_priority = NX_VLAN_PRIORITY_INVALID;
84 UCHAR tcp_client_socket_vlan_priority = NX_VLAN_PRIORITY_INVALID;
85
86 /* Define the constants. */
87 const unsigned char mslogo_jpg[] = {
88 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a,
89 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
90 0x00, 0x00, 0x01, 0xd7, 0x00, 0x00, 0x00, 0x9c,
91 0x08, 0x06, 0x00, 0x00, 0x00, 0x2d, 0x6c, 0xe1,
92 0xda, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47,
93 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00,
94 0x00, 0x04, 0x67, 0x41, 0x4d, 0x41, 0x00, 0x00,
95 0xb1, 0x8f, 0x0b, 0xfc, 0x61, 0x05, 0x00, 0x00,
96 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00,
97 0x2e, 0x22, 0x00, 0x00, 0x2e, 0x22, 0x01, 0xaa,
98 0xe2, 0xdd, 0x92, 0x00, 0x00, 0x19, 0xc7, 0x49,
99 0x44, 0x41, 0x54, 0x78, 0x5e, 0xed, 0xdd, 0x07,
100 0xb8, 0x2c, 0x67, 0x5d, 0xc7, 0xf1, 0x7b, 0x91,
101 0x2a, 0x10, 0x08, 0x08, 0xa1, 0xb7, 0x18, 0x20,
102 0x14, 0xe9, 0x01, 0x44, 0x40, 0x5a, 0x00, 0x43,
103 0x53, 0x8c, 0x08, 0x04, 0x43, 0x4d, 0x10, 0x94,
104 0x26, 0x20, 0xc2, 0x23, 0x21, 0x54, 0x45, 0x10,
105 0x69, 0x81, 0x50, 0x05, 0x42, 0x53, 0xe0, 0x41,
106 0x50, 0x90, 0xa0, 0x14, 0x41, 0x41, 0x88, 0x0a,
107 0xc6, 0x12, 0x5a, 0x10, 0x41, 0xa2, 0xb4, 0x20,
108 0xd2, 0x04, 0x21, 0xfe, 0xbe, 0xb3, 0xb3, 0xcb,
109 0xec, 0xbb, 0xef, 0xec, 0xee, 0xec, 0xd9, 0xbd,
110 0xf7, 0x9c, 0x73, 0xbf, 0x9f, 0xe7, 0xf9, 0x9f,
111 0x99, 0xdd, 0x9d, 0x99, 0xdd, 0xb3, 0x3b, 0x33,
112 0xef, 0xbc, 0x75, 0xf6, 0x48, 0x92, 0x24, 0x49,
113 0x92, 0x24, 0x49, 0x92, 0x24, 0x49, 0x92, 0x24,
114 0x49, 0x92, 0x24, 0x49, 0x92, 0x24, 0x49, 0x92,
115 0x24, 0x49, 0x92, 0x24, 0x49, 0x92, 0x24, 0x49,
116 0x92, 0x24, 0x49, 0x92, 0x24, 0x49, 0x92, 0x24,
117 0x49, 0x92, 0x24, 0x49, 0x92, 0x24, 0x49, 0x92,
118 0x24, 0x49, 0x92, 0x24, 0x49, 0x92, 0x24, 0x49,
119 0x92, 0x24, 0x49, 0x92, 0x24, 0x49, 0x92, 0x24,
120 0x49, 0x92, 0x24, 0x49, 0x92, 0x24, 0x49, 0x92,
121 0x24, 0x49, 0x92, 0x24, 0x49, 0x92, 0x24, 0x49,
122 0x92, 0x24, 0x49, 0x92, 0x24, 0x49, 0x92, 0x24,
123 0x49, 0x92, 0x24, 0x49, 0x92, 0x24, 0x49, 0x92,
124 0x24, 0x49, 0x92, 0x24, 0x49, 0x92, 0x24, 0x49,
125 0x92, 0x24, 0x49, 0x92, 0x24, 0x49, 0x92, 0x24,
126 0x49, 0x92, 0x24, 0x49, 0x92, 0x24, 0x49, 0x92,
127 0x24, 0x49, 0x92, 0x24, 0x49, 0x92, 0x24, 0x49,
128 0x92, 0x24, 0x49, 0x92, 0x24, 0x49, 0x92, 0x24,
129 0x49, 0x92, 0x24, 0x49, 0x92, 0x24, 0x49, 0x92,
130 0x24, 0x49, 0x3a, 0xa0, 0xec, 0x6d, 0xa7, 0xbb,
131 0xc2, 0x37, 0xee, 0x76, 0x15, 0xfe, 0x9f, 0x7f,
132 0x4d, 0x5c, 0xa2, 0x79, 0x62, 0x33, 0xce, 0x3a,
133 0xe8, 0xad, 0x67, 0x5e, 0x8b, 0x99, 0x13, 0x4e,
134 0xdd, 0x73, 0x52, 0x26, 0xf7, 0x60, 0x7e, 0x83,
135 0x8e, 0x38, 0xf1, 0xc8, 0x3d, 0x9f, 0x69, 0xe7,
136 0x25, 0x49, 0x3b, 0xc0, 0xb9, 0xda, 0xe9, 0x6e,
137 0x72, 0xd1, 0xc4, 0xc5, 0x36, 0x18, 0x07, 0x27,
138 0xc6, 0x2e, 0x94, 0xa8, 0x2d, 0xb3, 0xce, 0xd8,
139 0x8d, 0xbf, 0x91, 0x24, 0xed, 0x6a, 0x9e, 0xb8,
140 0x25, 0x49, 0x5a, 0x33, 0x13, 0x57, 0x49, 0x92,
141 0xd6, 0xcc, 0xc4, 0x55, 0x92, 0xa4, 0x35, 0x33,
142 0x71, 0x95, 0x24, 0x69, 0xcd, 0x4c, 0x5c, 0x25,
143 0x49, 0x5a, 0x33, 0x13, 0x57, 0x49, 0x92, 0xd6,
144 0xcc, 0xc4, 0x55, 0xd2, 0xda, 0x9c, 0x73, 0xce,
145 0x39, 0x17, 0x49, 0x1c, 0x9b, 0x78, 0x45, 0xe2,
146 0xbd, 0x89, 0x0f, 0x27, 0xde, 0x9d, 0x38, 0x39,
147 0x71, 0x58, 0xbb, 0x98, 0xb4, 0xeb, 0x99, 0xb8,
148 0x6a, 0xbf, 0xc9, 0xc9, 0x76, 0x6f, 0xe2, 0xd2,
149 0x89, 0xab, 0x25, 0xce, 0xdb, 0x3e, 0xad, 0x1d,
150 0xa8, 0xfd, 0x2d, 0x7f, 0x35, 0xb3, 0x9f, 0x4e,
151 0xfc, 0x61, 0xe2, 0x7e, 0x89, 0x9f, 0x4d, 0xdc,
152 0x38, 0x71, 0xdb, 0xc4, 0x71, 0x89, 0xeb, 0x24,
153 0xa4, 0x03, 0xc2, 0x6e, 0x1c, 0xa1, 0xe9, 0xac,
154 0xc4, 0x21, 0xcd, 0x13, 0x9b, 0xf1, 0xc5, 0x83,
155 0xde, 0x7a, 0xe6, 0x65, 0x99, 0x39, 0xe1, 0xd4,
156 0x3d, 0xaf, 0xce, 0xe4, 0x3e, 0xcc, 0x6f, 0xd0,
157 0x55, 0x4f, 0x3c, 0x72, 0xcf, 0xa7, 0xda, 0xf9,
158 0x41, 0x72, 0xb2, 0x23, 0xa7, 0x30, 0x6f, 0x04,
159 0xa9, 0xd3, 0xf6, 0xee, 0xdd, 0xfb, 0xe7, 0xed,
160 0xfc, 0xca, 0xf2, 0x3e, 0x0c, 0xa6, 0xf1, 0xf0,
161 0x44, 0xdf, 0xfe, 0xf4, 0xfe, 0xbc, 0xcf, 0x07,
162 0xda, 0xf9, 0x46, 0xd6, 0x61, 0x80, 0x0c, 0x4e,
163 0xc2, 0x47, 0x25, 0xb8, 0xc8, 0xfb, 0x8f, 0xc4,
164 0x71, 0x59, 0xee, 0x1d, 0x99, 0x6a, 0x07, 0xc9,
165 0x6f, 0xc9, 0xef, 0xf7, 0xc2, 0xc4, 0x83, 0x9b,
166 0x27, 0xfa, 0x1d, 0x9d, 0xdf, 0xf7, 0x4d, 0xed,
167 0xfc, 0x7e, 0x91, 0xcf, 0xca, 0xe4, 0x81, 0x89,
168 0x4b, 0x31, 0x53, 0xf8, 0x40, 0x3e, 0xdf, 0xfb,
169 0xdb, 0x79, 0x69, 0x4b, 0x4c, 0x5c, 0x87, 0xdb,
170 0x49, 0x89, 0xeb, 0x9d, 0x33, 0x79, 0xdb, 0xe8,
171 0x51, 0x15, 0xb9, 0x8c, 0xc3, 0x73, 0x42, 0xf9,
172 0xbf, 0xd1, 0xc3, 0xd5, 0xe4, 0x7d, 0x38, 0x59,
173 0xbd, 0x74, 0xf4, 0xa8, 0xea, 0x89, 0x79, 0x8f,
174 0xa7, 0xb4, 0xf3, 0x8d, 0xac, 0xf3, 0xc7, 0x99,
175 0xfc, 0xe2, 0xe8, 0xd1, 0xc4, 0xb7, 0x12, 0xd7,
176 0xcc, 0xb2, 0x9f, 0x1b, 0x3d, 0xd4, 0x4e, 0x90,
177 0xdf, 0xf2, 0x31, 0x99, 0x3c, 0x73, 0xf4, 0x68,
178 0xae, 0xed, 0x90, 0xb8, 0x5e, 0x26, 0x93, 0xcf,
179 0x26, 0x6a, 0x25, 0x25, 0x7f, 0x9b, 0xb8, 0x69,
180 0x3e, 0x63, 0x93, 0x02, 0x4b, 0x5b, 0x61, 0xb1,
181 0xf0, 0x81, 0xed, 0x27, 0x13, 0xb7, 0x18, 0xcd,
182 0xae, 0x26, 0x27, 0x2b, 0x2e, 0x68, 0x8e, 0x1f,
183 0x3d, 0x5a, 0x4e, 0xd6, 0x39, 0x4f, 0x26, 0x77,
184 0x1c, 0x3d, 0x9a, 0x72, 0xc1, 0xc4, 0xed, 0x47,
185 0xb3, 0xda, 0x09, 0xf2, 0x5b, 0x72, 0xa1, 0xf9,
186 0xc4, 0xd1, 0xa3, 0x19, 0x67, 0x26, 0xde, 0x90,
187 0xe0, 0x42, 0x8a, 0xf9, 0xaa, 0x6c, 0xe3, 0x7c,
188 0x89, 0xcb, 0xb7, 0x0f, 0x37, 0xed, 0xde, 0x89,
189 0xbe, 0x2a, 0x88, 0x1b, 0x25, 0xae, 0x31, 0x9a,
190 0x95, 0xb6, 0xc6, 0xc4, 0x55, 0x0f, 0x68, 0xa7,
191 0xab, 0xe2, 0x84, 0x74, 0x83, 0xd1, 0xec, 0xd2,
192 0xc8, 0x19, 0xf4, 0xe5, 0x96, 0xff, 0xb7, 0x9d,
193 0x6a, 0x67, 0x20, 0xb1, 0xa2, 0x5a, 0xa0, 0xf4,
194 0x07, 0x89, 0xab, 0x27, 0x17, 0x78, 0xcf, 0xc4,
195 0x2f, 0x65, 0xfe, 0x6a, 0x89, 0x49, 0x15, 0x44,
196 0x12, 0xd3, 0x8b, 0x26, 0x8e, 0x4e, 0xbc, 0x26,
197 0x0f, 0x3f, 0x9f, 0xf8, 0xed, 0xe6, 0x85, 0x0d,
198 0xca, 0x7b, 0x71, 0xbe, 0x9b, 0x57, 0xd2, 0xc4,
199 0xeb, 0xbf, 0x32, 0x9a, 0x95, 0xb6, 0xc6, 0xc4,
200 0x55, 0x77, 0xcd, 0x49, 0xe7, 0xe2, 0xed, 0xfc,
201 0x2a, 0xc8, 0xb5, 0x0e, 0xaa, 0x5e, 0xc8, 0xc9,
202 0x96, 0x84, 0x95, 0xfa, 0xd6, 0x12, 0x45, 0xfa,
203 0x7f, 0x36, 0x9a, 0xd5, 0x0e, 0x71, 0xab, 0x76,
204 0xda, 0xc5, 0x5d, 0x9c, 0x1e, 0x9b, 0xdf, 0xf9,
205 0xfb, 0xa3, 0x87, 0xa3, 0xdf, 0x3c, 0xf1, 0x4d,
206 0xe6, 0xb3, 0xbf, 0x3d, 0x3b, 0x93, 0x2f, 0x26,
207 0xfe, 0x28, 0x71, 0x4c, 0x82, 0xbb, 0x58, 0xed,
208 0x8b, 0x2a, 0xaa, 0x1b, 0x26, 0x9a, 0x3b, 0x5a,
209 0xcd, 0x71, 0xaf, 0x7c, 0x3e, 0x1b, 0xd7, 0x69,
210 0xcb, 0x4c, 0x5c, 0x45, 0x51, 0xec, 0x2f, 0x8f,
211 0x66, 0x87, 0xc9, 0x49, 0x88, 0x3b, 0x10, 0xad,
212 0xb4, 0x6e, 0x3c, 0x36, 0xf1, 0x8c, 0x04, 0x0d,
213 0x99, 0xfe, 0x3b, 0xf1, 0xae, 0xc4, 0x6d, 0x72,
214 0x02, 0xfe, 0x4a, 0xa6, 0xda, 0x39, 0xae, 0xd2,
215 0x4e, 0xbb, 0xde, 0xdd, 0x4d, 0x58, 0x2b, 0xae,
216 0x99, 0xb8, 0xc0, 0x68, 0x76, 0x9f, 0x3a, 0x36,
217 0xb1, 0x28, 0x11, 0xbf, 0x5c, 0x82, 0xd6, 0xcd,
218 0xd2, 0x96, 0x98, 0xb8, 0x0a, 0xf7, 0x4f, 0x42,
219 0xd9, 0xce, 0x0e, 0xc2, 0xc9, 0xea, 0xc7, 0x47,
220 0xb3, 0xc3, 0xe4, 0xe4, 0xfb, 0xbd, 0xc4, 0xe3,
221 0x33, 0x7b, 0x85, 0xc4, 0x4f, 0x24, 0xee, 0x90,
222 0xc7, 0xdc, 0x8b, 0x57, 0x3b, 0x0b, 0x17, 0x67,
223 0x25, 0x72, 0xa5, 0xdb, 0x4a, 0xf6, 0x6f, 0xf6,
224 0x53, 0x8a, 0xa7, 0xbb, 0x7e, 0x98, 0x38, 0x6d,
225 0x34, 0x3b, 0xe5, 0xbe, 0xed, 0x54, 0x5a, 0x99,
226 0x89, 0xeb, 0x81, 0xe7, 0x0b, 0x09, 0x4e, 0x2a,
227 0x5d, 0xd7, 0x4b, 0x0c, 0xaa, 0x37, 0xcd, 0xc9,
228 0xea, 0xc7, 0x32, 0x79, 0xd0, 0xe8, 0xd1, 0xc4,
229 0x7f, 0x26, 0x06, 0xd5, 0x99, 0x26, 0x41, 0xfd,
230 0x61, 0x82, 0x22, 0xc3, 0xf6, 0x19, 0xed, 0x02,
231 0x3f, 0x68, 0xa7, 0xdb, 0x09, 0x5d, 0xbe, 0xb8,
232 0x88, 0xeb, 0xfa, 0x87, 0xc4, 0x93, 0x47, 0xb3,
233 0x53, 0xee, 0x94, 0xfd, 0x9b, 0xa2, 0x6a, 0x69,
234 0x65, 0x26, 0xae, 0x07, 0x1e, 0x72, 0x87, 0x1f,
235 0x1a, 0xcd, 0x4e, 0x90, 0xb2, 0xd1, 0xe9, 0x7f,
236 0x88, 0x9b, 0x27, 0x28, 0xde, 0xeb, 0xa2, 0x1e,
237 0x75, 0x9f, 0x9e, 0x58, 0x49, 0xe4, 0x13, 0x17,
238 0x4b, 0x1c, 0x9e, 0xb8, 0x41, 0x82, 0x01, 0x29,
239 0x2e, 0x9c, 0xd8, 0x52, 0x6a, 0xcd, 0xfa, 0x89,
240 0xf3, 0xb4, 0xb1, 0x70, 0x5b, 0x59, 0x86, 0x38,
241 0x77, 0xe2, 0x12, 0x89, 0xc3, 0x12, 0x57, 0x4d,
242 0x5c, 0x92, 0xe7, 0xda, 0x45, 0x56, 0x96, 0x6d,
243 0x9c, 0x2b, 0x71, 0xf1, 0xc4, 0xb5, 0x12, 0xd7,
244 0x4f, 0x5c, 0x25, 0x71, 0xfe, 0xc4, 0x4a, 0xff,
245 0x23, 0xeb, 0x25, 0x2e, 0x90, 0xb8, 0x6c, 0xe2,
246 0xea, 0x09, 0xb6, 0x77, 0x50, 0x62, 0x37, 0x9f,
247 0x0f, 0x6a, 0xb9, 0x51, 0x5a, 0x32, 0xbf, 0x3b,
248 0xf1, 0xa5, 0xe6, 0xd1, 0x8f, 0x50, 0x64, 0x5d,
249 0xe6, 0x72, 0x0f, 0x48, 0xd9, 0x27, 0x86, 0x1e,
250 0x07, 0x2c, 0x4f, 0xeb, 0x6f, 0x8e, 0xc9, 0x83,
251 0x13, 0xe7, 0xe5, 0xb9, 0xf6, 0xe5, 0x03, 0xca,
252 0xae, 0xfa, 0xa7, 0xed, 0xe7, 0x3a, 0x2d, 0x3b,
253 0x75, 0xad, 0x9f, 0xeb, 0xa9, 0x89, 0x53, 0x12,
254 0x7c, 0xf6, 0xae, 0xb3, 0x13, 0x97, 0x4d, 0x0e,
255 0xf2, 0x3b, 0xa3, 0x87, 0xf3, 0x65, 0xdb, 0x9c,
256 0x98, 0xba, 0x03, 0x54, 0x90, 0xa8, 0x92, 0xd8,
257 0xfe, 0x7d, 0xa2, 0x2c, 0x2a, 0xae, 0xf5, 0x73,
258 0xbd, 0x6b, 0x26, 0x65, 0x3f, 0xd7, 0x2f, 0x66,
259 0xb9, 0xdf, 0x6c, 0xe7, 0x7b, 0x71, 0xc0, 0x66,
260 0xf2, 0x0b, 0x09, 0xd6, 0xff, 0xe9, 0xc4, 0xa5,
261 0x13, 0x5d, 0x34, 0x98, 0xfa, 0x44, 0xe2, 0x9d,
262 0x89, 0x57, 0x67, 0x9b, 0xa7, 0xf3, 0x24, 0xb2,
263 0x2e, 0x8d, 0xb7, 0x68, 0xc9, 0x5a, 0x7a, 0x52,
264 0x96, 0xfb, 0x4c, 0x5e, 0xbf, 0x64, 0xe6, 0x1f,
265 0x9d, 0xe0, 0xbb, 0xa3, 0x7b, 0x08, 0xe5, 0xe5,
266 0xac, 0x7f, 0xcb, 0xbc, 0x3e, 0x53, 0x8f, 0x98,
267 0xe5, 0xaf, 0x98, 0x09, 0x8d, 0x72, 0xee, 0x90,
268 0xb8, 0x76, 0xe2, 0x22, 0x89, 0xae, 0x6f, 0x24,
269 0xc8, 0x21, 0xfd, 0x69, 0xe2, 0x55, 0xd9, 0xc6,
270 0x97, 0x79, 0x72, 0x19, 0xd9, 0x36, 0xdb, 0x63,
271 0xd4, 0x23, 0xba, 0x2d, 0xf1, 0x3e, 0xdd, 0xe3,
272 0xf5, 0x7b, 0x89, 0x4f, 0x26, 0xde, 0x9b, 0x78,
273 0x7e, 0xb6, 0x3b, 0x77, 0x1f, 0xc9, 0xb6, 0x58,
274 0x97, 0x6e, 0x57, 0xd4, 0x91, 0xdf, 0x32, 0x41,
275 0x37, 0x2c, 0xba, 0x44, 0x8d, 0xf1, 0x7f, 0x52,
276 0xff, 0xfd, 0x37, 0x09, 0x1a, 0x1a, 0xbd, 0xad,
277 0xe7, 0xff, 0xa5, 0xb4, 0xa2, 0xdb, 0x7d, 0x8b,
278 0xdf, 0xa1, 0xfc, 0xbd, 0x3f, 0x96, 0xf8, 0xa7,
279 0xd1, 0x6c, 0xd5, 0xad, 0x13, 0xf4, 0x37, 0xed,
280 0xa2, 0xcf, 0xf5, 0x87, 0x47, 0xb3, 0x13, 0xdf,
281 0xca, 0x67, 0x58, 0x34, 0x30, 0xc5, 0x42, 0xf9,
282 0xcc, 0xbc, 0xd7, 0xbf, 0x27, 0x28, 0x6d, 0x19,
283 0x63, 0x7f, 0xbd, 0x72, 0xb6, 0xff, 0xf9, 0xbc,
284 0xfe, 0xe2, 0xcc, 0x97, 0xdd, 0xc9, 0x3e, 0x9a,
285 0xd7, 0x8e, 0x68, 0xe7, 0xe7, 0xca, 0xfa, 0x74,
286 0xdf, 0xf9, 0xad, 0xd1, 0xa3, 0x2d, 0xe1, 0x3d,
287 0x9f, 0xc7, 0x4c, 0xb6, 0xc9, 0x85, 0x6a, 0xf7,
288 0xf3, 0xe2, 0x65, 0x79, 0x7d, 0xee, 0x20, 0x17,
289 0x59, 0x8f, 0x3a, 0xf0, 0x13, 0x47, 0x8f, 0xa6,
290 0x3c, 0x22, 0xeb, 0x7e, 0xb5, 0x9d, 0x67, 0x39,
291 0x5a, 0x78, 0xbf, 0x68, 0xf4, 0x68, 0xca, 0x09,
292 0x59, 0xee, 0xcc, 0xbc, 0xce, 0x39, 0xf4, 0x37,
293 0x12, 0x77, 0x49, 0x50, 0x0f, 0xcd, 0xfe, 0x71,
294 0x46, 0x5e, 0xa3, 0x77, 0xc0, 0x8c, 0x2c, 0x7f,
295 0xdd, 0x4c, 0xb8, 0x40, 0xa7, 0xbe, 0x9a, 0x7d,
296 0x6b, 0xdc, 0x28, 0xec, 0xbb, 0x09, 0x7e, 0xdb,
297 0xbf, 0x4c, 0xbc, 0x32, 0xeb, 0x7f, 0x9c, 0x27,
298 0x0f, 0x04, 0x26, 0xae, 0xc3, 0xed, 0x86, 0xc4,
299 0xf5, 0xe7, 0x13, 0x0c, 0xd4, 0x50, 0x16, 0x93,
300 0x1d, 0x93, 0x9d, 0xff, 0xb5, 0xed, 0x7c, 0xaf,
301 0x6c, 0x97, 0x93, 0x15, 0x2d, 0x42, 0xcf, 0xdf,
302 0x3c, 0x31, 0x42, 0x0e, 0x80, 0x04, 0xe6, 0x7f,
303 0x12, 0xcb, 0x24, 0xae, 0x4f, 0xc8, 0xe4, 0xa9,
304 0xa3, 0x47, 0x13, 0x9f, 0xc8, 0x72, 0x57, 0x6f,
305 0xe7, 0x67, 0x64, 0x1d, 0x7e, 0x5f, 0x4e, 0xe6,
306 0xbf, 0x97, 0xb8, 0x32, 0xcf, 0x2d, 0x81, 0xc4,
307 0xed, 0x52, 0xd9, 0x6e, 0x73, 0xd1, 0x90, 0x6d,
308 0x90, 0x60, 0x72, 0xa2, 0x2d, 0xdd, 0x24, 0x41,
309 0xa2, 0x4c, 0x6b, 0xe5, 0x72, 0xff, 0xa1, 0xc1,
310 0xd5, 0x21, 0xd9, 0xc6, 0xa4, 0xc8, 0x3b, 0xdb,
311 0x61, 0x84, 0xa9, 0xa7, 0x25, 0xee, 0x9f, 0x58,
312 0xb6, 0x75, 0x29, 0xad, 0x65, 0x7f, 0x27, 0xf1,
313 0xcc, 0x6c, 0xab, 0xb7, 0xc1, 0x4f, 0xb6, 0xcd,
314 0xf6, 0x58, 0xee, 0x61, 0x89, 0xf2, 0x04, 0x5b,
315 0xc3, 0x89, 0xf3, 0xb9, 0xed, 0xfc, 0x8c, 0x6c,
316 0x8f, 0x13, 0xe2, 0xf3, 0x13, 0x0c, 0x45, 0xb8,
317 0x2c, 0x2e, 0x4e, 0x1e, 0x9a, 0xed, 0x72, 0x52,
318 0x9c, 0xc8, 0xb6, 0x5e, 0x91, 0xc9, 0xd0, 0x52,
319 0x8e, 0x55, 0x9d, 0x9d, 0xf7, 0xe7, 0x7b, 0xde,
320 0x92, 0x7c, 0x66, 0x2e, 0xd8, 0xf8, 0x3e, 0xbb,
321 0xde, 0x97, 0xb8, 0x55, 0xb6, 0xcf, 0xeb, 0x5c,
322 0x6c, 0xf0, 0xb8, 0x74, 0xed, 0xbc, 0x3e, 0xef,
323 0x22, 0xa1, 0x91, 0xf5, 0xb9, 0x58, 0x98, 0xfa,
324 0x9e, 0x56, 0xf4, 0xe6, 0xbc, 0x5f, 0x73, 0xc1,
325 0x99, 0x6d, 0xb2, 0x7f, 0x94, 0xa5, 0x1e, 0x0f,
326 0xcc, 0xeb, 0x2f, 0x6f, 0xe7, 0xab, 0xb2, 0x1e,
327 0x17, 0x04, 0x0c, 0x86, 0x51, 0xba, 0x62, 0xd6,
328 0x9d, 0xec, 0xf7, 0x59, 0x8e, 0x8b, 0xcc, 0x5a,
329 0xe3, 0x41, 0xf6, 0x11, 0xaa, 0x8d, 0xde, 0x9e,
330 0x28, 0x47, 0xb1, 0xfa, 0x4e, 0xb6, 0x31, 0x75,
331 0x6c, 0x67, 0x3b, 0x9c, 0x43, 0xd8, 0xf7, 0xee,
332 0x99, 0x58, 0x94, 0x9e, 0xb0, 0x5d, 0xce, 0x99,
333 0x0f, 0xcf, 0x76, 0x38, 0x2e, 0x77, 0x35, 0x8b,
334 0x85, 0x0f, 0x40, 0xd9, 0xb1, 0xbf, 0x9d, 0x49,
335 0x99, 0x73, 0xc5, 0xb2, 0x0d, 0x9b, 0x28, 0x62,
336 0xeb, 0x26, 0xac, 0x78, 0x59, 0x3b, 0xdd, 0x88,
337 0x7c, 0x2e, 0x12, 0x19, 0xba, 0x70, 0x90, 0xab,
338 0x5a, 0x36, 0x61, 0xc5, 0xb2, 0x17, 0x90, 0x24,
339 0xa8, 0x9c, 0x50, 0x16, 0x5e, 0x98, 0xe5, 0xb3,
340 0x90, 0x53, 0xf9, 0x48, 0x82, 0x5c, 0xd5, 0x90,
341 0x6e, 0x1b, 0xe4, 0x16, 0xb8, 0xa0, 0x78, 0x7b,
342 0xb6, 0x71, 0xe1, 0xe6, 0x99, 0x42, 0x9e, 0x27,
343 0x37, 0xf9, 0xc6, 0xc4, 0x23, 0x13, 0xcb, 0x24,
344 0xac, 0xbd, 0xf8, 0x2d, 0x13, 0xe4, 0x34, 0x19,
345 0x7a, 0x72, 0x48, 0xc2, 0x8a, 0xa6, 0x5f, 0x6a,
346 0xd6, 0x7f, 0x18, 0xdb, 0xd9, 0xa9, 0xf2, 0xd9,
347 0x39, 0xc7, 0xd5, 0x2e, 0x80, 0x5f, 0x9f, 0xe3,
348 0xa0, 0x9d, 0xdd, 0xf3, 0xd7, 0x09, 0xfa, 0xda,
349 0x96, 0xf6, 0x75, 0xc3, 0xa6, 0xb2, 0x78, 0x7a,
350 0x7f, 0xa0, 0xe4, 0xa6, 0x96, 0xb0, 0xce, 0xc8,
351 0x77, 0xcb, 0x3e, 0x42, 0x42, 0x7e, 0xaf, 0xc4,
352 0x32, 0xc7, 0x19, 0xbf, 0x05, 0xdf, 0xe9, 0xfb,
353 0xb2, 0xee, 0x56, 0xba, 0xff, 0xed, 0x08, 0x26,
354 0xae, 0x07, 0x2e, 0x86, 0x2b, 0x2c, 0x1b, 0x36,
355 0x8d, 0x8b, 0x0b, 0x7b, 0xe5, 0xa0, 0xe0, 0xe4,
356 0x5f, 0x0e, 0x3c, 0x41, 0x43, 0x26, 0x0e, 0xc8,
357 0x8d, 0x68, 0x4f, 0xee, 0x0c, 0xaf, 0x47, 0x82,
358 0xb3, 0xa9, 0x7d, 0x96, 0x62, 0xbd, 0xb2, 0x78,
359 0x79, 0x46, 0x3e, 0xcb, 0x95, 0x32, 0xf9, 0x8b,
360 0xc4, 0xa1, 0xcd, 0x13, 0xab, 0x61, 0x14, 0xaa,
361 0xd7, 0x65, 0x5b, 0xb5, 0xc4, 0xf3, 0x11, 0x89,
362 0xbb, 0x8d, 0x66, 0x67, 0xf0, 0x45, 0x94, 0xbf,
363 0xd9, 0x3c, 0xe4, 0xaa, 0x29, 0xf2, 0x3c, 0x5f,
364 0xf3, 0x68, 0x38, 0x72, 0x4e, 0xcf, 0x49, 0xec,
365 0xe4, 0xd6, 0xb3, 0xe4, 0xda, 0xcb, 0xb6, 0x01,
366 0x14, 0xa9, 0xbf, 0x65, 0x34, 0xdb, 0x5c, 0x6c,
367 0x52, 0x62, 0xc1, 0x45, 0x5b, 0xe9, 0x9e, 0xf9,
368 0x8d, 0x86, 0x5c, 0x3c, 0x6d, 0x05, 0x25, 0x49,
369 0x7d, 0x23, 0x5d, 0xed, 0x4b, 0xb4, 0xe0, 0x5f,
370 0x26, 0x61, 0xa5, 0xa8, 0x98, 0x52, 0xb0, 0x5a,
371 0x57, 0x2c, 0xf0, 0x1d, 0x13, 0x35, 0x34, 0xa0,
372 0x3c, 0x25, 0xdb, 0xd8, 0xd5, 0xe9, 0x8f, 0x89,
373 0xeb, 0x01, 0x2a, 0x27, 0x94, 0x33, 0x32, 0x29,
374 0xeb, 0x6f, 0x38, 0xd9, 0xd3, 0xbd, 0x66, 0x9e,
375 0x23, 0x13, 0xe5, 0x01, 0xf5, 0xda, 0x6c, 0x6f,
376 0xa9, 0xba, 0xda, 0x15, 0xdd, 0x3d, 0xf1, 0xa8,
377 0xd1, 0xec, 0x0c, 0xea, 0x74, 0xc8, 0xe9, 0x3d,
378 0x24, 0x41, 0x71, 0xf7, 0xd1, 0x89, 0x13, 0x12,
379 0xd4, 0xfd, 0x0e, 0x41, 0xb1, 0xf0, 0x18, 0x27,
380 0x5b, 0x8a, 0xe2, 0x19, 0x83, 0x76, 0xd2, 0x40,
381 0x2b, 0x27, 0x03, 0x12, 0x9b, 0xd7, 0x27, 0x6a,
382 0x89, 0x30, 0x89, 0x1e, 0x27, 0x1b, 0xc6, 0xd9,
383 0xa5, 0x0e, 0x96, 0xa2, 0x53, 0x72, 0xda, 0xb5,
384 0x1c, 0x11, 0xee, 0x94, 0xf8, 0xb5, 0xd1, 0xec,
385 0x48, 0xb6, 0x4f, 0x69, 0x00, 0xf5, 0xbd, 0x25,
386 0xba, 0xb6, 0x90, 0x50, 0x92, 0x53, 0x20, 0x71,
387 0xbf, 0x69, 0x82, 0x7e, 0xc2, 0xbd, 0xf5, 0x57,
388 0xd9, 0x16, 0xf5, 0xb5, 0x2f, 0x48, 0xd4, 0x8e,
389 0x71, 0x8a, 0xe4, 0x28, 0x5e, 0x24, 0xe7, 0xcd,
390 0x08, 0x4b, 0x0f, 0x4d, 0xf0, 0x7f, 0xf1, 0x5d,
391 0x96, 0x58, 0xff, 0x05, 0xd9, 0xde, 0xf8, 0x37,
392 0xa7, 0x41, 0x1c, 0xf5, 0xbc, 0xe3, 0xa8, 0xb5,
393 0x0e, 0x67, 0xa8, 0xc3, 0xee, 0x32, 0x65, 0x7c,
394 0x2d, 0x51, 0xe2, 0x7f, 0x2c, 0x97, 0xfb, 0x60,
395 0x62, 0xab, 0x6a, 0x17, 0x06, 0xa7, 0x66, 0x7f,
396 0x2d, 0x8b, 0x44, 0x69, 0x43, 0x50, 0xa2, 0xfa,
397 0x83, 0xfd, 0x7d, 0x11, 0xaa, 0xa2, 0x28, 0x2e,
398 0x5f, 0x26, 0x6a, 0xfb, 0x03, 0xfb, 0xdb, 0xb1,
399 0x95, 0xcf, 0xb4, 0x3f, 0xb0, 0x6f, 0x8d, 0x75,
400 0x8f, 0x03, 0xe6, 0x1b, 0xd9, 0x17, 0x38, 0x4f,
401 0x30, 0xb2, 0x16, 0xdd, 0xe8, 0xba, 0xb8, 0xf8,
402 0x63, 0x3f, 0xa2, 0x94, 0x84, 0xe2, 0x7c, 0x8a,
403 0x8c, 0x6f, 0x96, 0xa8, 0x8d, 0x6f, 0x4e, 0x15,
404 0x12, 0x45, 0xc9, 0xbb, 0xd6, 0xb2, 0x45, 0x66,
405 0x3b, 0x42, 0x5b, 0xe7, 0xfa, 0x2f, 0x09, 0x8a,
406 0x36, 0x36, 0xe5, 0xac, 0x83, 0xde, 0x7a, 0x66,
407 0x33, 0xca, 0xcb, 0x09, 0xa7, 0xee, 0x39, 0x29,
408 0x93, 0x79, 0x77, 0x9d, 0x59, 0x87, 0x23, 0x4e,
409 0x3c, 0xb2, 0xa9, 0xdf, 0x1c, 0x2c, 0x07, 0x41,
410 0xb5, 0xce, 0x35, 0x07, 0x71, 0x33, 0x7e, 0x6f,
411 0x5e, 0xa7, 0x45, 0x24, 0x09, 0x53, 0x17, 0xf5,
412 0x32, 0x87, 0x65, 0x99, 0xea, 0x55, 0x67, 0xd6,
413 0x21, 0x87, 0x4a, 0xc2, 0x30, 0x46, 0xa2, 0xc2,
414 0x60, 0xfb, 0x67, 0xe4, 0x35, 0x4e, 0xc4, 0x6b,
415 0xad, 0x73, 0xcd, 0x72, 0x14, 0x9f, 0x72, 0x21,
416 0x50, 0x36, 0x80, 0x01, 0xf5, 0xbc, 0xe4, 0xa2,
417 0x3f, 0x9f, 0xf5, 0x9a, 0x27, 0xc6, 0xb2, 0x1e,
418 0x93, 0xdb, 0x24, 0x78, 0x5f, 0x06, 0xa7, 0x58,
419 0x54, 0xe7, 0x0a, 0x56, 0x22, 0xa7, 0x47, 0xe2,
420 0x3c, 0x6e, 0x78, 0xc4, 0x49, 0x82, 0xdf, 0x98,
421 0x62, 0x6f, 0x2e, 0x3c, 0x6a, 0x37, 0x28, 0x20,
422 0xe7, 0x4e, 0xa2, 0xfe, 0xc1, 0xca, 0xe7, 0x20,
423 0xc1, 0xa4, 0xbe, 0x8f, 0xbb, 0x06, 0x95, 0x68,
424 0x44, 0x76, 0x68, 0xd6, 0x61, 0xca, 0xb2, 0x9c,
425 0x94, 0xca, 0x46, 0x3d, 0xb8, 0x59, 0x96, 0xa1,
426 0xa1, 0xd1, 0x94, 0xf6, 0x7f, 0xa4, 0xb1, 0xd3,
427 0xb9, 0xf3, 0xfa, 0xa4, 0xe4, 0x20, 0xcf, 0xf3,
428 0x21, 0xf8, 0x6e, 0xf8, 0xff, 0x4b, 0xd4, 0x29,
429 0xdf, 0x37, 0xcb, 0x4f, 0x9d, 0xc8, 0xdb, 0x6d,
430 0x91, 0x80, 0x92, 0x83, 0xab, 0x75, 0xcb, 0xe2,
431 0xa4, 0x79, 0xaf, 0xca, 0xff, 0x47, 0xd7, 0xae,
432 0xa6, 0x0d, 0x42, 0xc7, 0x13, 0xb2, 0xdc, 0xd3,
433 0xdb, 0xf9, 0x19, 0x59, 0x87, 0x61, 0x10, 0xcb,
434 0x31, 0xa4, 0x69, 0xac, 0x53, 0x76, 0xed, 0xda,
435 0x92, 0xbc, 0x0f, 0x7d, 0x70, 0xc9, 0x11, 0x96,
436 0x45, 0x90, 0xfc, 0x1f, 0xfc, 0x3f, 0x13, 0xed,
437 0x77, 0xc6, 0x7e, 0x76, 0xd5, 0xe6, 0x89, 0x1f,
438 0x79, 0x4b, 0x96, 0xe5, 0xe2, 0x6e, 0xcb, 0xf2,
439 0x1e, 0x24, 0x34, 0x5c, 0x34, 0x74, 0x1b, 0x92,
440 0xe1, 0x49, 0x89, 0x13, 0xbb, 0xdf, 0x6d, 0x96,
441 0xdd, 0x5f, 0x75, 0xae, 0x60, 0x67, 0x38, 0x39,
442 0x41, 0x4e, 0xba, 0x7b, 0x1c, 0xf0, 0xbd, 0x71,
443 0xa1, 0xc5, 0x10, 0x91, 0xaf, 0x6a, 0x9e, 0xfd,
444 0x11, 0xce, 0x03, 0x34, 0xbe, 0x7b, 0x49, 0xf7,
445 0xff, 0x40, 0x96, 0xe7, 0x09, 0x8e, 0x1f, 0x2e,
446 0x10, 0xbb, 0xfe, 0x31, 0x71, 0xbd, 0x2c, 0x3f,
447 0xa4, 0x34, 0x66, 0xc7, 0xd8, 0x6d, 0x39, 0x57,
448 0x76, 0x8a, 0x9f, 0x4a, 0x50, 0xac, 0xb1, 0xa9,
449 0xa0, 0x55, 0xdc, 0xd8, 0xaf, 0x27, 0x6a, 0xcb,
450 0xac, 0x33, 0x7a, 0x07, 0x3c, 0x5f, 0x03, 0x12,
451 0x5e, 0xae, 0xba, 0xbb, 0xb8, 0x1a, 0xad, 0x8e,
452 0x50, 0x93, 0x83, 0x84, 0x5c, 0x13, 0x57, 0x9c,
453 0x5d, 0xd4, 0xe7, 0xd1, 0xf8, 0x65, 0x53, 0xb8,
454 0xe3, 0x4e, 0x2d, 0x61, 0x25, 0x91, 0x38, 0x2a,
455 0x07, 0xe6, 0x4c, 0xc2, 0x0a, 0x9e, 0x4b, 0xd0,
456 0xc8, 0x84, 0x7b, 0x8a, 0xd6, 0x72, 0x64, 0x35,
457 0xe4, 0x34, 0x1f, 0x92, 0xf5, 0xbe, 0xdc, 0xae,
458 0x4f, 0x7c, 0x2d, 0x41, 0xab, 0x4a, 0x4e, 0x00,
459 0xb4, 0x9e, 0x2c, 0x91, 0x68, 0xdf, 0x31, 0xcb,
460 0xcc, 0x24, 0xac, 0xc8, 0x73, 0xbc, 0x37, 0xc5,
461 0xd9, 0xb5, 0x3a, 0xee, 0x83, 0x13, 0xdd, 0xab,
462 0x77, 0x8a, 0xda, 0x4a, 0xe4, 0x9c, 0xab, 0xdf,
463 0x2f, 0xef, 0x97, 0x78, 0x67, 0xa2, 0x2c, 0x92,
464 0x67, 0x98, 0xbf, 0xda, 0xb0, 0x84, 0x24, 0xdc,
465 0x77, 0xcf, 0xf2, 0x33, 0x27, 0xd5, 0x76, 0x5b,
466 0xec, 0x6b, 0x3f, 0x97, 0xa0, 0xd5, 0x70, 0x89,
467 0x04, 0x66, 0x61, 0xb1, 0xf9, 0x36, 0xc3, 0x45,
468 0x60, 0x99, 0xb0, 0x92, 0x6b, 0x9f, 0x19, 0x62,
469 0x33, 0xff, 0x3b, 0xe7, 0x8e, 0xa9, 0x04, 0xb7,
470 0x75, 0xc7, 0xec, 0xf7, 0x5b, 0xbe, 0x58, 0x6f,
471 0x13, 0x33, 0x72, 0x7b, 0x65, 0xc2, 0x4a, 0xe9,
472 0xd1, 0xd3, 0xf8, 0xfe, 0xb7, 0x91, 0xdf, 0x4f,
473 0xd4, 0x8e, 0x03, 0x12, 0x56, 0x3e, 0x68, 0xad,
474 0x65, 0x34, 0x89, 0xf1, 0x4c, 0xc2, 0x8a, 0x3c,
475 0xc7, 0x77, 0x4b, 0x89, 0x4e, 0xd9, 0x88, 0x89,
476 0xd2, 0x95, 0xb2, 0xc8, 0x5e, 0xda, 0xfe, 0x72,
477 0x20, 0xdc, 0x39, 0x51, 0x62, 0x98, 0xc1, 0x89,
478 0x3c, 0x7e, 0xc6, 0xe8, 0xe9, 0x29, 0x6f, 0x6e,
479 0x5f, 0x9e, 0x92, 0xe7, 0x9f, 0x3a, 0x7a, 0x79,
480 0x0a, 0xc5, 0x8a, 0x8d, 0xcc, 0xd3, 0x1f, 0xf3,
481 0x5b, 0xcd, 0xb3, 0xd3, 0x66, 0x06, 0x65, 0xcf,
482 0x73, 0x4f, 0x18, 0xbd, 0x34, 0x85, 0x9c, 0xc3,
483 0x44, 0x1e, 0xd3, 0x67, 0xee, 0x63, 0xcd, 0x2b,
484 0xd3, 0xbe, 0x92, 0x28, 0x5b, 0x3a, 0x2f, 0x25,
485 0xeb, 0x5d, 0xbe, 0xd9, 0xc2, 0xac, 0x2f, 0x24,
486 0x7a, 0x87, 0xe4, 0xcb, 0x6b, 0x37, 0x6c, 0x96,
487 0x9a, 0xf5, 0xac, 0x76, 0x91, 0xb9, 0xb2, 0xdc,
488 0xa5, 0x12, 0xdf, 0x6e, 0xd6, 0x98, 0x46, 0x0e,
489 0xb3, 0x91, 0xf9, 0xa3, 0x46, 0x4f, 0xcd, 0x18,
490 0x34, 0x98, 0x7c, 0x96, 0x7f, 0xf6, 0x68, 0xb5,
491 0x29, 0x3f, 0x48, 0x2c, 0xdb, 0xb5, 0xe4, 0xb8,
492 0x66, 0x8d, 0x59, 0x33, 0x37, 0x79, 0xc8, 0x73,
493 0x7c, 0x6f, 0x25, 0xea, 0xed, 0x7a, 0xe5, 0x75,
494 0x1a, 0x4a, 0x95, 0xe6, 0xdd, 0xb2, 0x70, 0x25,
495 0xd9, 0x66, 0xed, 0x7d, 0x5e, 0xd7, 0xbe, 0x3c,
496 0x23, 0xaf, 0x5d, 0x23, 0xc1, 0xf7, 0x54, 0xe2,
497 0x22, 0x7a, 0x65, 0x59, 0x9f, 0xe3, 0xe2, 0x4d,
498 0xcd, 0x96, 0xa6, 0xb1, 0x1f, 0xd3, 0xc5, 0x6a,
499 0x46, 0x9e, 0xff, 0x7e, 0xb3, 0xc4, 0xb4, 0x85,
500 0x37, 0xd9, 0xc8, 0x32, 0x47, 0x8c, 0x16, 0x9d,
501 0x31, 0x55, 0x84, 0x9b, 0xc7, 0xf4, 0x9b, 0xae,
502 0x59, 0x74, 0x1c, 0xd4, 0xb6, 0xff, 0xdd, 0x44,
503 0xed, 0x02, 0x78, 0x4a, 0x96, 0x79, 0x5b, 0xb3,
504 0xf4, 0xb4, 0xa9, 0xaa, 0x91, 0xdd, 0x64, 0x5b,
505 0x5d, 0x2e, 0x6d, 0xd9, 0x29, 0x67, 0xf3, 0xff,
506 0xd0, 0xf0, 0xe5, 0xa0, 0xe6, 0xf1, 0x66, 0x7c,
507 0x7d, 0xcf, 0x31, 0x07, 0x37, 0x7d, 0x31, 0x93,
508 0x4c, 0x51, 0xaf, 0xd6, 0xad, 0xab, 0xdb, 0x84,
509 0x27, 0xee, 0xbd, 0xfd, 0x9e, 0xff, 0x6a, 0xe7,
510 0x07, 0xc9, 0x8e, 0x3b, 0xb7, 0x58, 0x18, 0x59,
511 0x86, 0x06, 0x4c, 0xd4, 0xa3, 0x75, 0x8b, 0xa0,
512 0xc8, 0x6d, 0xd1, 0x07, 0x90, 0xe2, 0xce, 0x46,
513 0x96, 0xa3, 0x61, 0xc7, 0xbf, 0x25, 0xba, 0xb9,
514 0x17, 0xea, 0xce, 0xe8, 0x1b, 0xdb, 0xe4, 0x0c,
515 0xb3, 0xcc, 0x5a, 0x8b, 0x85, 0xb3, 0x0c, 0x39,
516 0x65, 0x8a, 0xc4, 0xcb, 0x12, 0x96, 0xa7, 0x67,
517 0x39, 0xd6, 0x1f, 0x2c, 0xdb, 0xec, 0x2b, 0x16,
518 0x7e, 0x6e, 0xb6, 0x49, 0x63, 0xa2, 0xaa, 0xac,
519 0x47, 0x1d, 0xe7, 0xef, 0x8e, 0x1e, 0x4d, 0x70,
520 0x45, 0x7e, 0xad, 0xac, 0x47, 0x55, 0xc4, 0x42,
521 0xd9, 0x06, 0xbf, 0x05, 0xbf, 0x49, 0x17, 0x45,
522 0xc2, 0x74, 0x15, 0xfa, 0x5e, 0x5e, 0xe7, 0xe6,
523 0xf6, 0x5c, 0x60, 0x94, 0xff, 0x2f, 0xb9, 0x63,
524 0xbe, 0xbf, 0xe7, 0x65, 0x39, 0xee, 0x79, 0x3b,
525 0x57, 0xb6, 0xf3, 0x77, 0x99, 0x5c, 0x7f, 0xf4,
526 0x68, 0x82, 0xbe, 0xa7, 0xd7, 0xcf, 0xfa, 0x7c,
527 0xe6, 0xb9, 0xb2, 0x3e, 0x63, 0x46, 0xd3, 0x72,
528 0xb5, 0xcc, 0x65, 0xbd, 0x3c, 0xeb, 0x53, 0x92,
529 0x30, 0x91, 0x65, 0xb7, 0x65, 0xb1, 0x70, 0xde,
530 0x83, 0xc4, 0x84, 0xfe, 0x95, 0xe5, 0xff, 0x70,
531 0xe7, 0xbc, 0x0f, 0x7d, 0x8e, 0x67, 0x64, 0x1d,
532 0xce, 0x1f, 0x7c, 0x77, 0x34, 0xb8, 0xe9, 0xe2,
533 0xb9, 0x1b, 0x2d, 0xf3, 0xdd, 0xd5, 0x64, 0xbb,
534 0xb4, 0x07, 0xe0, 0x66, 0xf2, 0x5d, 0x94, 0x84,
535 0x70, 0x7f, 0xdb, 0x49, 0xc3, 0xaa, 0xae, 0xac,
536 0xb3, 0xbf, 0x8a, 0x85, 0xe9, 0x33, 0x4d, 0x17,
537 0xb0, 0xaa, 0xac, 0x57, 0x3b, 0x6e, 0xb9, 0x40,
538 0x3c, 0x32, 0xeb, 0x8d, 0x1e, 0xf5, 0xc8, 0xba,
539 0x5c, 0x88, 0x96, 0xa5, 0x3f, 0x27, 0x65, 0x3d,
540 0xea, 0xfc, 0x77, 0x9d, 0xdd, 0x98, 0xb8, 0x6e,
541 0xbc, 0x9f, 0x6b, 0x12, 0xd7, 0xe6, 0x64, 0x92,
542 0xc4, 0x75, 0x9f, 0xf4, 0x73, 0x4d, 0x52, 0xb8,
543 0xd6, 0x7e, 0xae, 0xd9, 0x99, 0xa7, 0x4e, 0x6c,
544 0x59, 0xee, 0x1d, 0x99, 0x94, 0xf7, 0x57, 0x7d,
545 0x4c, 0x96, 0x9b, 0xe4, 0xca, 0xb2, 0x4c, 0xad,
546 0x7e, 0x96, 0x93, 0xfd, 0xa4, 0x2e, 0x31, 0xcb,
547 0xac, 0x3b, 0x71, 0xa5, 0x4f, 0x6b, 0x2d, 0x17,
548 0x7d, 0xe3, 0x2c, 0x47, 0x57, 0x98, 0xc1, 0xb2,
549 0xcd, 0xbe, 0xc4, 0x75, 0x6e, 0x1f, 0xdf, 0xac,
550 0x47, 0x91, 0x1e, 0x0d, 0x95, 0xba, 0xb8, 0xe8,
551 0xb9, 0x4c, 0xd6, 0x5b, 0xaa, 0xce, 0x28, 0xdb,
552 0x20, 0x47, 0x47, 0xdf, 0xd8, 0x2e, 0x4e, 0xd8,
553 0x57, 0xc8, 0x36, 0xc8, 0x31, 0xb0, 0xff, 0x72,
554 0x62, 0xac, 0x76, 0xd4, 0x0f, 0x4e, 0x86, 0xe4,
555 0xf0, 0x48, 0x88, 0xaa, 0xd5, 0x05, 0xd9, 0x06,
556 0x17, 0x41, 0x5f, 0x4f, 0x94, 0xb9, 0x8f, 0xa9,
557 0xdf, 0x6a, 0x91, 0x6c, 0x87, 0xfa, 0x30, 0x8a,
558 0xed, 0xba, 0x3e, 0x90, 0x6d, 0x4c, 0xdd, 0xff,
559 0x37, 0xcb, 0x6d, 0xd7, 0xc4, 0xf5, 0x71, 0x99,
560 0x70, 0x63, 0x88, 0x2e, 0xea, 0x0f, 0xf9, 0xae,
561 0x7b, 0xab, 0x09, 0xb2, 0x1e, 0x0d, 0xca, 0xe8,
562 0x47, 0xdd, 0xc5, 0xef, 0x7b, 0x83, 0xac, 0xc7,
563 0x05, 0xca, 0x20, 0xd9, 0x1e, 0xd5, 0x48, 0xd4,
564 0x97, 0x97, 0xbf, 0x07, 0x55, 0x0d, 0x14, 0xbd,
565 0x8e, 0x1e, 0x15, 0xb2, 0xde, 0xfe, 0x4a, 0x5c,
566 0x17, 0x1d, 0x07, 0xdc, 0xec, 0xbe, 0xac, 0x83,
567 0xa6, 0xc1, 0xd3, 0x3f, 0x8f, 0x66, 0xe7, 0xe2,
568 0xd8, 0x2e, 0x7b, 0x23, 0xac, 0xad, 0x4e, 0x7b,
569 0xbb, 0xd9, 0x6d, 0x75, 0xae, 0x5a, 0xcd, 0x4b,
570 0xda, 0x69, 0xd7, 0xfd, 0x72, 0x20, 0x35, 0x47,
571 0x7e, 0x3b, 0x2d, 0x47, 0xca, 0xe1, 0x84, 0xb3,
572 0xd1, 0xbe, 0xad, 0x51, 0x6b, 0xe6, 0x4f, 0x43,
573 0xab, 0x95, 0x2e, 0x36, 0x16, 0x20, 0x91, 0x98,
574 0xa7, 0x56, 0x1f, 0xfa, 0xd9, 0x9c, 0x18, 0x96,
575 0x4a, 0x58, 0x5b, 0xb5, 0x44, 0x9d, 0xef, 0xb6,
576 0xa9, 0x17, 0xcc, 0xb6, 0x48, 0x68, 0xb9, 0xb2,
577 0xef, 0x1b, 0x9f, 0x99, 0xa2, 0x70, 0xea, 0xbb,
578 0x68, 0x3c, 0xf6, 0x9a, 0x44, 0xad, 0xbf, 0x2f,
579 0xdb, 0xaa, 0x75, 0xbd, 0x19, 0x5a, 0x77, 0x4f,
580 0x43, 0xa0, 0xd2, 0x8e, 0x18, 0x6f, 0xb7, 0xdd,
581 0x5f, 0x6b, 0xad, 0xde, 0xb9, 0xe8, 0x38, 0x21,
582 0xaf, 0x53, 0x15, 0x52, 0x8d, 0xbc, 0x5e, 0xab,
583 0x03, 0xe4, 0x3c, 0x39, 0xf8, 0x3e, 0xaf, 0xd9,
584 0x1e, 0xfd, 0x9a, 0x29, 0x86, 0x2e, 0x13, 0x56,
585 0x5a, 0x79, 0x3f, 0x3a, 0xbf, 0xf7, 0xe8, 0xd1,
586 0xf6, 0x52, 0xab, 0x6f, 0xef, 0xe2, 0xe2, 0xb4,
587 0xc4, 0x7e, 0x48, 0xfd, 0xf6, 0xa2, 0xa8, 0x75,
588 0xf3, 0x2b, 0x2f, 0xc4, 0x77, 0x0d, 0x13, 0x57,
589 0x81, 0x06, 0x1e, 0x65, 0x17, 0x01, 0x06, 0x4a,
590 0x18, 0x37, 0xcb, 0x3f, 0x3c, 0x31, 0x95, 0x63,
591 0x09, 0xae, 0x8e, 0x27, 0xc3, 0x0a, 0x6e, 0x08,
592 0x0d, 0x7e, 0x4a, 0x24, 0xae, 0xe4, 0x8e, 0xd7,
593 0x6d, 0x51, 0xa3, 0xa7, 0xda, 0xa0, 0x0f, 0x43,
594 0x3f, 0x47, 0x73, 0x3f, 0xd3, 0x8a, 0x49, 0x62,
595 0x98, 0x13, 0x2e, 0x0d, 0xc4, 0x68, 0x9d, 0xcc,
596 0xa8, 0x50, 0x7d, 0x28, 0xea, 0x24, 0x17, 0xfd,
597 0xf1, 0x9c, 0xc0, 0xef, 0x93, 0x68, 0x9e, 0x6c,
598 0xd1, 0x42, 0xb6, 0x76, 0x5c, 0x0f, 0x1d, 0x11,
599 0xa7, 0x56, 0xfc, 0x5c, 0x16, 0xb1, 0x6e, 0x57,
600 0xec, 0xb7, 0xb5, 0x91, 0xbe, 0x28, 0x76, 0x27,
601 0x47, 0x3b, 0x2f, 0xfa, 0xfa, 0xf4, 0x0e, 0xea,
602 0xf3, 0x9a, 0x65, 0x49, 0x39, 0x19, 0xca, 0x90,
603 0x63, 0xa7, 0x8b, 0x01, 0x5c, 0xc8, 0x1d, 0x32,
604 0xdd, 0x8e, 0x16, 0x7d, 0xae, 0xea, 0xe0, 0x27,
605 0x9a, 0x65, 0xe2, 0x2a, 0x4e, 0xe8, 0x14, 0x41,
606 0xd1, 0x07, 0xaf, 0x34, 0x6e, 0x3a, 0x7f, 0x5c,
607 0xa2, 0x1c, 0xf0, 0xe0, 0xa5, 0xfb, 0xe0, 0xca,
608 0xbb, 0x76, 0x32, 0x67, 0x9f, 0xdd, 0x1f, 0x27,
609 0xf9, 0x5a, 0x0e, 0xb5, 0x2c, 0xb6, 0x5b, 0xa4,
610 0xef, 0xe4, 0x3c, 0xd5, 0x47, 0x38, 0xdf, 0xeb,
611 0x9f, 0x64, 0x42, 0xbd, 0x1f, 0x45, 0xe2, 0xf3,
612 0x72, 0xc6, 0x9c, 0xe8, 0x18, 0x83, 0x76, 0xd2,
613 0xa8, 0x2c, 0xfa, 0xea, 0x05, 0x87, 0x0e, 0x24,
614 0x51, 0x8e, 0xc0, 0x85, 0x41, 0x77, 0x3c, 0xda,
615 0x8f, 0x16, 0xf5, 0xd5, 0x5e, 0x05, 0x2d, 0xf7,
616 0xcb, 0xaa, 0x93, 0x79, 0xf8, 0x4d, 0x6a, 0x09,
617 0xf5, 0xa3, 0xf2, 0xfb, 0x2e, 0x1c, 0x52, 0x71,
618 0x1b, 0x1b, 0x52, 0x52, 0x73, 0x40, 0x33, 0x71,
619 0xd5, 0x18, 0x75, 0x39, 0x93, 0x8e, 0xe2, 0xad,
620 0xa3, 0x73, 0x05, 0x4e, 0x2b, 0xc0, 0xb2, 0xae,
621 0x91, 0x46, 0x38, 0xd5, 0x16, 0xc5, 0x6b, 0x56,
622 0xcb, 0x6d, 0x71, 0xd2, 0xdf, 0x1f, 0xc5, 0x93,
623 0x14, 0x29, 0x96, 0x86, 0x76, 0x4d, 0xe9, 0x1b,
624 0x7c, 0xa2, 0xd6, 0x35, 0x86, 0x22, 0x67, 0xc6,
625 0x99, 0xa5, 0xce, 0x8e, 0x6e, 0x0e, 0x7d, 0xb9,
626 0x5e, 0x8e, 0xe1, 0xe7, 0xe5, 0x77, 0x1a, 0x8f,
627 0xc1, 0x4b, 0x6e, 0xba, 0x76, 0x67, 0xa2, 0xa1,
628 0xed, 0x10, 0x48, 0x4c, 0x4a, 0x2b, 0x35, 0xac,
629 0xdb, 0x97, 0xf2, 0x3d, 0x90, 0x73, 0xa7, 0xcf,
630 0xf1, 0x26, 0x1c, 0x9b, 0xed, 0xb7, 0xb3, 0xfd,
631 0xb2, 0x0c, 0x7d, 0x65, 0x19, 0xc0, 0xa3, 0xbc,
632 0xfa, 0xa4, 0xbe, 0xb2, 0x56, 0x05, 0xb3, 0x4e,
633 0x9b, 0x3e, 0xa7, 0xd7, 0x8e, 0x49, 0x72, 0xe8,
634 0xb4, 0x13, 0x58, 0x25, 0x7a, 0x1b, 0x4f, 0xed,
635 0x74, 0x26, 0xae, 0x6a, 0xe4, 0x44, 0x4e, 0xb1,
636 0x70, 0xd9, 0xff, 0x8f, 0x56, 0xd7, 0xd4, 0x19,
637 0x35, 0x75, 0x82, 0x1d, 0x6f, 0xc8, 0xf2, 0x43,
638 0x8b, 0x19, 0x57, 0x41, 0x43, 0x89, 0x12, 0xfb,
639 0x2c, 0x77, 0xc2, 0xd9, 0xd7, 0x6a, 0x75, 0x96,
640 0x57, 0xce, 0x89, 0xb4, 0x56, 0x74, 0xdd, 0xe7,
641 0x3a, 0xed, 0xb4, 0x8b, 0x3b, 0x95, 0xf4, 0xde,
642 0x29, 0x27, 0xdf, 0xf3, 0xe9, 0x09, 0xea, 0xbb,
643 0xa9, 0x7f, 0xa6, 0xff, 0x21, 0xa5, 0x0c, 0x25,
644 0x12, 0x56, 0x46, 0xa7, 0x02, 0x09, 0x75, 0xad,
645 0xb8, 0xba, 0x6c, 0x3d, 0xdc, 0x2b, 0xff, 0x13,
646 0x25, 0x03, 0x54, 0x0b, 0x94, 0xa6, 0xba, 0x4a,
647 0x6d, 0x53, 0xdc, 0x6d, 0x69, 0xc8, 0x6f, 0x32,
648 0x04, 0x7d, 0x80, 0xe7, 0xf6, 0x79, 0xcd, 0x77,
649 0xc7, 0xc5, 0x1f, 0xc7, 0x4c, 0x79, 0x77, 0x24,
650 0xf6, 0xe5, 0xe3, 0xf3, 0x5b, 0x2e, 0x4e, 0x9d,
651 0xfb, 0x2d, 0x53, 0x24, 0xbb, 0xc9, 0x01, 0x74,
652 0x50, 0xab, 0x8b, 0xbf, 0x50, 0xfe, 0xaf, 0xd3,
653 0x56, 0x8c, 0x4d, 0xb4, 0x9f, 0xd8, 0x16, 0x4c,
654 0x5c, 0xd5, 0x45, 0x0e, 0xa9, 0xc4, 0x78, 0xc3,
655 0x5d, 0x9c, 0x1c, 0xe6, 0xb6, 0x58, 0x5c, 0x23,
656 0x5a, 0x04, 0xd7, 0x8a, 0xa1, 0x1e, 0xb0, 0x4c,
657 0x0e, 0x62, 0xcd, 0x3e, 0xda, 0x4e, 0xbb, 0x28,
658 0x6a, 0x2d, 0xbb, 0xd6, 0x54, 0xe5, 0xf3, 0xb2,
659 0x6c, 0x39, 0x00, 0x07, 0x3e, 0x94, 0x13, 0x4c,
660 0x59, 0x62, 0x30, 0x23, 0xcb, 0xd0, 0xa1, 0x9f,
661 0xc6, 0x4e, 0x0c, 0x3a, 0x51, 0xfb, 0x4e, 0x9a,
662 0xee, 0x23, 0x59, 0x86, 0xd7, 0xe8, 0x3a, 0x52,
663 0xba, 0x55, 0x3e, 0x43, 0x79, 0x91, 0xd4, 0x87,
664 0xbb, 0xbc, 0xd4, 0x4e, 0xe4, 0xd4, 0x07, 0x6f,
665 0xca, 0x96, 0x6e, 0x52, 0x80, 0x76, 0x9f, 0xa8,
666 0x15, 0xc5, 0x92, 0xeb, 0xa7, 0x45, 0x33, 0xff,
667 0xff, 0xb2, 0x41, 0xfd, 0x6b, 0x89, 0xdf, 0xb0,
668 0x77, 0xc8, 0xbe, 0xf6, 0xfd, 0x19, 0x8d, 0xab,
669 0x1c, 0xe1, 0x8a, 0x76, 0x02, 0x0c, 0x6f, 0x58,
670 0x1b, 0xf6, 0xb1, 0x4f, 0xed, 0x02, 0xa9, 0x1c,
671 0x3d, 0xaa, 0x66, 0xe8, 0x0d, 0x1a, 0x86, 0xaa,
672 0xb5, 0x98, 0xbe, 0x5d, 0xfe, 0xf7, 0x9d, 0x52,
673 0x1f, 0xbf, 0xcf, 0x98, 0xb8, 0xaa, 0x8b, 0xfe,
674 0x6a, 0x8b, 0x5a, 0x95, 0x9e, 0x96, 0x18, 0x3a,
675 0x6e, 0xef, 0xaa, 0xe8, 0xe3, 0x5a, 0xab, 0x9f,
676 0x62, 0x58, 0xbf, 0x7b, 0xb7, 0x27, 0xb3, 0xb9,
677 0xb2, 0x0c, 0x03, 0x51, 0xb4, 0x8f, 0xb6, 0x84,
678 0x71, 0x83, 0x6b, 0xb9, 0x46, 0x06, 0xc3, 0xa0,
679 0x28, 0xb2, 0x57, 0xfb, 0xfe, 0x74, 0x33, 0xa9,
680 0x15, 0x0b, 0x4f, 0x8a, 0xd7, 0xb3, 0x1c, 0x83,
681 0x0d, 0xb4, 0x8f, 0x7a, 0xb1, 0x7c, 0xad, 0xdb,
682 0x43, 0xb7, 0x6f, 0x77, 0xad, 0x1f, 0x27, 0x89,
683 0xe5, 0xe3, 0x16, 0x6d, 0x3f, 0xaf, 0x93, 0xc8,
684 0xd5, 0x46, 0xe0, 0xa1, 0x81, 0x13, 0x5d, 0x68,
685 0xd6, 0xa1, 0xf6, 0x21, 0x16, 0x0e, 0x42, 0xb0,
686 0x04, 0x06, 0x64, 0x60, 0x44, 0xae, 0xd2, 0x3b,
687 0x92, 0xb0, 0x71, 0xaf, 0x60, 0x46, 0x19, 0x5a,
688 0x2a, 0xb2, 0x0e, 0xdd, 0xec, 0x6a, 0xc5, 0xeb,
689 0x14, 0x0d, 0xf7, 0x35, 0x36, 0xe0, 0xde, 0xa7,
690 0xb5, 0x62, 0xce, 0xa7, 0x66, 0x9b, 0x43, 0x2f,
691 0x4c, 0x6a, 0xad, 0xd7, 0xef, 0x90, 0xf7, 0xee,
692 0x4d, 0xc4, 0xf2, 0x1a, 0xfb, 0xe1, 0xe0, 0x56,
693 0xcd, 0x03, 0x71, 0xd3, 0x8a, 0x12, 0x2d, 0x88,
694 0xb9, 0x33, 0xce, 0xd2, 0xd8, 0x0f, 0x89, 0xdd,
695 0xcc, 0xc4, 0x55, 0x13, 0x39, 0x01, 0x90, 0x83,
696 0x5a, 0x94, 0x2b, 0x7d, 0x45, 0x96, 0xdb, 0x27,
697 0x47, 0x45, 0xde, 0x87, 0x5c, 0x58, 0xd9, 0xf9,
698 0x1e, 0x9c, 0xdc, 0xe8, 0x06, 0x44, 0x4b, 0xd9,
699 0xde, 0x56, 0x55, 0x79, 0x8d, 0xa2, 0x4d, 0x12,
700 0xa3, 0xde, 0x11, 0x67, 0x96, 0x95, 0xcf, 0x42,
701 0xb1, 0x39, 0xfd, 0x81, 0x4b, 0xe4, 0x26, 0xb8,
702 0xc3, 0x0d, 0xdd, 0x2e, 0xfa, 0x70, 0x31, 0x50,
703 0x0e, 0x40, 0x01, 0x4e, 0xa0, 0xd4, 0xc3, 0x8d,
704 0x51, 0xb4, 0xfb, 0xdc, 0x6c, 0x6b, 0x5e, 0xd1,
705 0x1e, 0xff, 0x6f, 0xad, 0x21, 0xd5, 0x64, 0xc0,
706 0x8f, 0xa0, 0x58, 0xb2, 0x96, 0xf3, 0xe1, 0xe6,
707 0x07, 0x0f, 0xee, 0x3b, 0xa9, 0xe5, 0x79, 0x12,
708 0x56, 0xfa, 0x78, 0x96, 0xa5, 0x15, 0xe0, 0x46,
709 0xef, 0xcd, 0x18, 0xc8, 0x6b, 0x50, 0xdb, 0xce,
710 0x4d, 0xf3, 0xfe, 0xe4, 0x18, 0xb7, 0x82, 0xb6,
711 0x01, 0xb5, 0xc4, 0xa7, 0x36, 0xac, 0xe1, 0x22,
712 0xf4, 0x97, 0x7f, 0xcf, 0x68, 0x76, 0x0a, 0x75,
713 0xe0, 0xdd, 0x21, 0x50, 0x1b, 0xf9, 0xec, 0x24,
714 0x30, 0xec, 0x93, 0xe5, 0xfe, 0xc8, 0x58, 0xc2,
715 0xbd, 0x7d, 0x7e, 0xe7, 0xe0, 0x06, 0xfb, 0x25,
716 0xba, 0xbc, 0x54, 0x07, 0x5c, 0xc8, 0xfb, 0x73,
717 0x2e, 0xa7, 0xee, 0xb3, 0xd6, 0x65, 0x6c, 0x9d,
718 0x28, 0x15, 0xa1, 0x0f, 0x74, 0xe9, 0x39, 0xf9,
719 0x0c, 0xdd, 0x41, 0xff, 0x7b, 0x65, 0x39, 0x2e,
720 0xa4, 0xc8, 0xe1, 0xef, 0xea, 0xf4, 0xc7, 0xc4,
721 0x55, 0x25, 0x5a, 0x9f, 0xf6, 0x75, 0x4b, 0xe1,
722 0x84, 0xbd, 0xca, 0x89, 0x6a, 0x2b, 0xf8, 0x3c,
723 0xb5, 0x13, 0x0d, 0x75, 0x5b, 0x0c, 0x1e, 0xfe,
724 0x9e, 0x1c, 0xac, 0xe4, 0x26, 0x0e, 0x4f, 0x1c,
725 0x92, 0xa0, 0x1e, 0xf4, 0x1e, 0x09, 0x46, 0xbe,
726 0xe1, 0x24, 0x50, 0x1d, 0x27, 0x79, 0x45, 0x0c,
727 0x64, 0x5e, 0x6b, 0x31, 0x4b, 0x8e, 0xe5, 0xf4,
728 0xbc, 0xe7, 0x23, 0x13, 0xd7, 0x49, 0xf0, 0x39,
729 0x2e, 0x97, 0xb8, 0x6d, 0x82, 0x8b, 0x15, 0x72,
730 0x7c, 0xb5, 0xfe, 0x7c, 0x8f, 0x4f, 0x82, 0xd5,
731 0xed, 0xfa, 0x40, 0xa2, 0x49, 0xce, 0xe7, 0xd3,
732 0x59, 0xef, 0xe4, 0xc4, 0x6d, 0x12, 0x4d, 0x8e,
733 0x34, 0x53, 0x82, 0x44, 0xf7, 0xc9, 0x89, 0x5a,
734 0x37, 0x93, 0x49, 0xce, 0x28, 0xdb, 0x64, 0x74,
735 0x25, 0xc6, 0x49, 0x2e, 0x71, 0xbc, 0x33, 0x78,
736 0x01, 0xc3, 0x02, 0xd2, 0x58, 0xed, 0x50, 0xb6,
737 0x99, 0x38, 0x2c, 0x41, 0xc2, 0xc4, 0x5d, 0x68,
738 0x18, 0x07, 0xb9, 0x44, 0xbd, 0xf0, 0xd4, 0x20,
739 0x20, 0x5b, 0x54, 0xab, 0x67, 0xe3, 0xff, 0x64,
740 0x78, 0xbc, 0x5b, 0x24, 0x18, 0x2a, 0xf2, 0x46,
741 0x09, 0x46, 0x5b, 0x5b, 0x4a, 0x96, 0xe5, 0xc2,
742 0xa0, 0x36, 0xa0, 0x0b, 0x09, 0x39, 0xa5, 0x0e,
743 0x83, 0xe4, 0x3b, 0x64, 0x72, 0x4a, 0xf3, 0x60,
744 0x1a, 0x2f, 0x4c, 0xe5, 0x0e, 0xf3, 0xde, 0x24,
745 0xe8, 0x0c, 0x32, 0x52, 0x36, 0xb4, 0xe3, 0x2a,
746 0x86, 0x2e, 0x6b, 0xc7, 0x67, 0x99, 0x87, 0x2c,
747 0x11, 0xdd, 0x2a, 0x86, 0xda, 0x85, 0x1c, 0x9e,
748 0x95, 0xe5, 0x9e, 0x99, 0xe0, 0xb7, 0x3b, 0x5f,
749 0xe2, 0x82, 0x09, 0x6e, 0x08, 0x40, 0x7b, 0x89,
750 0x72, 0x60, 0xfc, 0xb5, 0x6b, 0xbf, 0x17, 0x06,
751 0x7f, 0x29, 0xaf, 0xd0, 0xa8, 0xe7, 0x7e, 0x6f,
752 0x3e, 0x0b, 0x8d, 0xeb, 0xae, 0x9d, 0x98, 0x2a,
753 0xe6, 0xcf, 0xe3, 0x0b, 0x25, 0xc6, 0xc7, 0x03,
754 0xbf, 0x7f, 0xb7, 0x85, 0xfb, 0xae, 0x54, 0x5e,
755 0x65, 0xed, 0x6c, 0x8e, 0xd0, 0x34, 0x25, 0x3b,
756 0xf2, 0x52, 0x23, 0x34, 0x95, 0xb2, 0x1e, 0x77,
757 0x46, 0xa9, 0xb5, 0xb8, 0x24, 0xd7, 0xda, 0x3b,
758 0xbe, 0x69, 0xd6, 0xe3, 0xe4, 0x4d, 0x02, 0xbc,
759 0xb6, 0xbb, 0xe2, 0x20, 0xcb, 0x92, 0x03, 0xe5,
760 0x86, 0xd6, 0x0c, 0xcb, 0x37, 0x0f, 0xc5, 0x78,
761 0x7c, 0x86, 0xee, 0x7e, 0xcd, 0xe7, 0x39, 0x24,
762 0xdb, 0x5d, 0x74, 0x57, 0x9c, 0x9b, 0x64, 0x99,
763 0xda, 0xc8, 0x36, 0x13, 0x59, 0x97, 0x09, 0xb9,
764 0xbf, 0x5a, 0xc2, 0xd5, 0xc5, 0xe7, 0xe0, 0x33,
765 0xcc, 0xbb, 0x78, 0x65, 0xdf, 0xe1, 0xee, 0x34,
766 0x93, 0x93, 0x54, 0xb6, 0x4f, 0xff, 0xd6, 0xf2,
767 0xd6, 0x67, 0x5c, 0xe8, 0xd0, 0x52, 0x99, 0x93,
768 0x15, 0xff, 0x7f, 0x2d, 0x67, 0x46, 0x43, 0xa3,
769 0xeb, 0x66, 0x5b, 0x93, 0x84, 0x3f, 0xdb, 0xa2,
770 0x7e, 0x90, 0x62, 0xfe, 0x9b, 0x37, 0x4f, 0xd4,
771 0xf1, 0xde, 0x7c, 0xd6, 0x79, 0x5d, 0x8a, 0x28,
772 0xcd, 0x60, 0xb0, 0xff, 0x72, 0x3f, 0x6a, 0xe4,
773 0x7d, 0x56, 0x19, 0xa1, 0x89, 0x3e, 0xd3, 0xe5,
774 0xed, 0x0e, 0xbb, 0xf8, 0x4c, 0xfc, 0xbf, 0x67,
775 0x67, 0x3b, 0xe3, 0x56, 0xd0, 0x73, 0x65, 0x9b,
776 0x3f, 0x93, 0xc9, 0x5f, 0x25, 0xca, 0x73, 0xda,
777 0x6b, 0xb2, 0x8d, 0x95, 0x8a, 0x4a, 0xb3, 0x4d,
778 0x1a, 0x25, 0xf1, 0xff, 0x95, 0xa5, 0x12, 0xb4,
779 0x9a, 0xbe, 0x52, 0xb6, 0x3b, 0x1e, 0xf6, 0xf3,
780 0xc4, 0x4c, 0xd6, 0x71, 0x2f, 0xd6, 0x77, 0x65,
781 0x9b, 0x4d, 0xbd, 0x7c, 0xb6, 0x49, 0x69, 0x0b,
782 0xc3, 0x92, 0x56, 0xc7, 0x1e, 0x0e, 0x4a, 0x75,
783 0xb8, 0x30, 0xe3, 0x7b, 0xea, 0x96, 0xcc, 0xf0,
784 0x7b, 0xd5, 0x7e, 0xcf, 0x65, 0x47, 0x68, 0x5a,
785 0x38, 0xfa, 0x59, 0xd6, 0xe5, 0x3b, 0xa6, 0xc4,
786 0x85, 0x11, 0xd4, 0x6a, 0xd8, 0xaf, 0xd8, 0x36,
787 0xe7, 0x62, 0xea, 0x9b, 0xd9, 0x6f, 0xd9, 0x47,
788 0xba, 0x9f, 0x93, 0xef, 0x95, 0xcf, 0x54, 0x6b,
789 0x3f, 0xb0, 0x2b, 0x98, 0x73, 0x55, 0x4d, 0xad,
790 0x61, 0x13, 0x07, 0xcc, 0xda, 0x07, 0x57, 0x5f,
791 0x46, 0x0e, 0x40, 0xc6, 0xee, 0xe5, 0x42, 0x61,
792 0x51, 0x83, 0x10, 0x4e, 0x34, 0xe5, 0xc9, 0x75,
793 0x6d, 0xf2, 0x39, 0x98, 0x70, 0xf3, 0x70, 0x46,
794 0xf2, 0x99, 0x24, 0x8a, 0x15, 0x7c, 0x8e, 0x79,
795 0xc7, 0x16, 0xc3, 0x48, 0x3e, 0x28, 0xdb, 0x9b,
796 0xb7, 0x8d, 0x31, 0x72, 0xe8, 0x74, 0x8b, 0x21,
797 0x57, 0x54, 0x4b, 0x58, 0xa9, 0x0b, 0xbd, 0x5f,
798 0xb6, 0x35, 0x95, 0xa3, 0x6e, 0x1f, 0x73, 0xd3,
799 0xf5, 0x79, 0x17, 0x0c, 0xfc, 0x43, 0xf3, 0x12,
800 0x56, 0xb6, 0xc1, 0x90, 0x7b, 0xd5, 0x84, 0x75,
801 0x0b, 0xb8, 0x50, 0xaa, 0x35, 0xba, 0x1a, 0xe3,
802 0xfb, 0x1b, 0x8a, 0xbe, 0xad, 0xb5, 0xdf, 0xbe,
803 0x76, 0x9f, 0xd6, 0xa5, 0xe4, 0xff, 0x66, 0x20,
804 0x8f, 0xb2, 0x05, 0x3d, 0xb8, 0x78, 0x1f, 0x27,
805 0x82, 0x24, 0x52, 0xcd, 0x58, 0xe3, 0xeb, 0x94,
806 0xf7, 0xe6, 0x62, 0x90, 0x41, 0xed, 0xfb, 0x1a,
807 0xbb, 0xb1, 0x7f, 0x91, 0xe8, 0x77, 0x13, 0x2c,
808 0x7e, 0x2f, 0x6e, 0x97, 0xb8, 0x51, 0xf9, 0x6c,
809 0xec, 0xb7, 0x8c, 0xab, 0x3e, 0x73, 0x1b, 0xc4,
810 0x16, 0xbf, 0x03, 0xfb, 0x2b, 0x77, 0x28, 0xe3,
811 0x0e, 0x4d, 0x8c, 0xcc, 0xb4, 0xe5, 0xaa, 0x99,
812 0x9d, 0xc6, 0xc4, 0x55, 0x35, 0xef, 0x4b, 0x94,
813 0xdd, 0x2e, 0x68, 0x58, 0x34, 0x37, 0x67, 0xb7,
814 0x49, 0x39, 0xa0, 0x29, 0xb2, 0xe4, 0x26, 0x09,
815 0x43, 0x6f, 0xa0, 0xbd, 0xd6, 0x2b, 0x63, 0x4e,
816 0x2c, 0x09, 0xc6, 0x08, 0xa6, 0x01, 0x07, 0xc5,
817 0xaf, 0x43, 0x90, 0x8b, 0xa6, 0xc5, 0x2f, 0xf7,
818 0xc5, 0xac, 0xde, 0x2f, 0x77, 0x20, 0xba, 0x45,
819 0xdc, 0x2e, 0xdb, 0xaa, 0xdd, 0x03, 0x96, 0xcf,
820 0xca, 0xc5, 0x08, 0x2d, 0x7f, 0xa9, 0xb7, 0x5e,
821 0xd8, 0x22, 0xb9, 0xc0, 0x05, 0xcd, 0xad, 0xb3,
822 0x8d, 0xf2, 0xbe, 0x9d, 0x5b, 0x96, 0x6d, 0x92,
823 0x33, 0xe5, 0xe4, 0x3c, 0xa4, 0xf5, 0x6c, 0xaf,
824 0x24, 0x70, 0x24, 0x32, 0xb5, 0x92, 0x16, 0xba,
825 0x38, 0xd5, 0xea, 0x4d, 0x87, 0xe8, 0x1b, 0x67,
826 0x77, 0xdc, 0x2a, 0x99, 0x0b, 0x9e, 0x79, 0x17,
827 0x28, 0x2b, 0xcb, 0xf7, 0x44, 0xc3, 0x34, 0x4a,
828 0xc6, 0x6a, 0xf5, 0xe7, 0x25, 0x86, 0x2d, 0x64,
829 0x90, 0x8b, 0x5a, 0x83, 0xa3, 0xb5, 0xcb, 0x67,
830 0xa3, 0x2b, 0x1e, 0x37, 0x92, 0xa7, 0xdf, 0xee,
831 0x2a, 0xc7, 0x18, 0xad, 0xef, 0x97, 0xb9, 0xb8,
832 0xdc, 0xb1, 0x36, 0x76, 0x95, 0xbf, 0x5f, 0x58,
833 0x2c, 0x3c, 0x25, 0x27, 0x1d, 0x8a, 0x04, 0xcb,
834 0x22, 0xcc, 0x0f, 0xe7, 0xc0, 0x58, 0xd8, 0x71,
835 0x3b, 0xeb, 0x72, 0xf7, 0x13, 0x46, 0x66, 0x1a,
836 0x7b, 0xe1, 0xa2, 0x13, 0x6d, 0xd6, 0xe1, 0x62,
837 0x8d, 0x84, 0xb9, 0x1c, 0xdd, 0xe7, 0xe4, 0xac,
838 0x3b, 0xd5, 0x50, 0x2a, 0xcb, 0x52, 0x3f, 0x54,
839 0x8e, 0x57, 0xfc, 0xb9, 0x2c, 0x37, 0x77, 0x00,
840 0x80, 0xf6, 0x3d, 0x18, 0xa7, 0xf4, 0xf8, 0x04,
841 0x2d, 0x43, 0x6b, 0x75, 0x99, 0x1c, 0xb4, 0x24,
842 0x3c, 0x9c, 0x9c, 0x48, 0x58, 0xce, 0xc8, 0x76,
843 0x33, 0x69, 0xd6, 0x67, 0xdf, 0x28, 0xef, 0x7f,
844 0x0a, 0x72, 0x7f, 0xcb, 0x0c, 0x3e, 0x3e, 0x91,
845 0x6d, 0x51, 0x4f, 0xc8, 0xf7, 0x44, 0x42, 0x4b,
846 0x1f, 0xd6, 0xda, 0x49, 0x96, 0x84, 0x84, 0x0b,
847 0x15, 0x8a, 0xda, 0x5f, 0x9c, 0xf7, 0xe8, 0x4d,
848 0x90, 0xb3, 0x3d, 0xc6, 0x0e, 0xa6, 0x55, 0x31,
849 0xff, 0x1f, 0x5d, 0x6b, 0x6a, 0x57, 0xfb, 0x6c,
850 0x8f, 0xcf, 0xc9, 0xbe, 0xc7, 0xf7, 0xda, 0x37,
851 0xb8, 0xc4, 0x44, 0xb6, 0xcb, 0x84, 0x61, 0xf8,
852 0x68, 0x0c, 0x43, 0xfd, 0x70, 0x6d, 0x7c, 0x58,
853 0x50, 0xcc, 0x48, 0xae, 0x92, 0xdf, 0xf9, 0x8d,
854 0xd9, 0xf6, 0xc2, 0x04, 0x39, 0xdb, 0xe6, 0x3b,
855 0x2e, 0x1b, 0x60, 0xbd, 0x28, 0xeb, 0xbe, 0xb2,
856 0x9d, 0xef, 0x95, 0x75, 0xe9, 0xbb, 0xcb, 0xcd,
857 0x21, 0x8e, 0x4a, 0x94, 0xa3, 0x57, 0xf1, 0xde,
858 0xef, 0xcf, 0x76, 0x16, 0xd6, 0x99, 0x67, 0x3b,
859 0xdc, 0xbb, 0xb6, 0xd6, 0x60, 0x8c, 0x7b, 0xdd,
860 0x6e, 0x29, 0x27, 0x97, 0x6d, 0xb3, 0x2f, 0x53,
861 0xff, 0x59, 0x16, 0x0d, 0x93, 0x4b, 0x24, 0x31,
862 0xa3, 0xf8, 0x9d, 0xef, 0x60, 0x95, 0xdc, 0x76,
863 0x89, 0x6e, 0x59, 0x33, 0x37, 0x57, 0xc8, 0x67,
864 0xa0, 0x91, 0x12, 0xb7, 0xbd, 0xa3, 0xf4, 0xe6,
865 0xd0, 0xc4, 0xf8, 0xbb, 0x22, 0x77, 0xcb, 0x45,
866 0x2f, 0xed, 0x20, 0x18, 0x31, 0xed, 0x9b, 0x59,
867 0x96, 0xb1, 0x91, 0x6b, 0xdf, 0xfd, 0x5d, 0xf2,
868 0x7a, 0xf7, 0x2e, 0x57, 0x14, 0x79, 0x4f, 0x6e,
869 0x77, 0xd8, 0x31, 0xe8, 0x38, 0xc8, 0x76, 0x98,
870 0xd0, 0xf5, 0x88, 0xcf, 0x47, 0x3f, 0xe0, 0xbe,
871 0x01, 0x5e, 0xf8, 0x3d, 0xb9, 0x2f, 0x31, 0x89,
872 0x3f, 0x17, 0x2c, 0x1f, 0xcd, 0xfb, 0x64, 0xb2,
873 0x7b, 0x99, 0xb8, 0x0e, 0xb7, 0x63, 0x12, 0xd7,
874 0xdd, 0x2e, 0x07, 0x36, 0x5d, 0x0f, 0xa8, 0xa3,
875 0xe5, 0xe4, 0xc3, 0xc9, 0x8f, 0xdc, 0x20, 0xb9,
876 0x15, 0x6e, 0x35, 0x76, 0x56, 0x0e, 0x5e, 0x12,
877 0xa2, 0x8d, 0xcb, 0xe7, 0x60, 0xbf, 0xa3, 0x6e,
878 0x90, 0x96, 0xc3, 0x74, 0xb7, 0x21, 0x51, 0xa4,
879 0x3e, 0x8e, 0xba, 0xb9, 0x4f, 0x26, 0xe8, 0xa3,
880 0xba, 0xf4, 0x55, 0x7a, 0x7b, 0xc2, 0xe2, 0x7f,
881 0xe3, 0x44, 0xca, 0xad, 0xd3, 0x48, 0xc4, 0xe9,
882 0x06, 0xc4, 0xf6, 0x38, 0x41, 0x7d, 0x69, 0xc8,
883 0xf6, 0xba, 0xb2, 0x6d, 0x12, 0x01, 0x12, 0x57,
884 0x8a, 0xea, 0x28, 0xd2, 0xe4, 0x82, 0x80, 0xe2,
885 0x4f, 0xea, 0xc0, 0x3e, 0x95, 0xed, 0x2e, 0xbc,
886 0xa5, 0xdd, 0x3a, 0xb5, 0xff, 0x2b, 0x9f, 0x83,
887 0x22, 0x44, 0x8e, 0x5b, 0x9e, 0xe0, 0x18, 0x26,
888 0xe7, 0xfc, 0xd5, 0x55, 0xff, 0xcf, 0xdd, 0xa8,
889 0xdd, 0xcf, 0xb8, 0x98, 0xa4, 0x5b, 0x15, 0xdf,
890 0x0b, 0xb9, 0xc7, 0xef, 0xe4, 0x3b, 0xca, 0x64,
891 0xff, 0xcb, 0xe7, 0x23, 0xd1, 0xa7, 0x45, 0x33,
892 0x31, 0x1e, 0xc8, 0x83, 0xcf, 0x48, 0xa2, 0x4e,
893 0x17, 0xbf, 0xaf, 0x1f, 0x48, 0xbf, 0xa7, 0x89,
894 0xeb, 0x70, 0x26, 0xae, 0x92, 0xa4, 0xb9, 0xac,
895 0x73, 0x95, 0x24, 0x69, 0xcd, 0x4c, 0x5c, 0x25,
896 0x49, 0x5a, 0x33, 0x13, 0x57, 0x49, 0x92, 0xd6,
897 0xcc, 0xc4, 0x55, 0x92, 0xa4, 0x35, 0x33, 0x71,
898 0x95, 0x24, 0x69, 0xcd, 0x4c, 0x5c, 0x25, 0x49,
899 0x5a, 0x33, 0x13, 0x57, 0x49, 0x92, 0xd6, 0xcc,
900 0xc4, 0x55, 0x92, 0xa4, 0x35, 0xdb, 0x6d, 0x83,
901 0x48, 0xf0, 0x97, 0x7b, 0x0a, 0x96, 0x43, 0xa9,
902 0xad, 0xd3, 0x77, 0xf7, 0x1c, 0x73, 0x70, 0x33,
903 0xc6, 0xee, 0x39, 0xef, 0x6a, 0x46, 0x07, 0xda,
904 0xe4, 0x80, 0x15, 0xf8, 0xc8, 0xde, 0xdb, 0x37,
905 0xc3, 0x9c, 0x49, 0x92, 0x24, 0x49, 0x92, 0x24,
906 0x49, 0x92, 0x24, 0x49, 0x92, 0x24, 0x49, 0x92,
907 0x24, 0x49, 0x92, 0x24, 0x49, 0x92, 0x24, 0x49,
908 0x92, 0x24, 0x49, 0x92, 0x24, 0x49, 0x92, 0x24,
909 0x49, 0x92, 0x24, 0x49, 0x92, 0x24, 0x49, 0x92,
910 0x24, 0x49, 0x92, 0x24, 0x49, 0x92, 0x24, 0x49,
911 0x92, 0x24, 0x49, 0x92, 0x24, 0x49, 0x92, 0x24,
912 0x49, 0x92, 0x24, 0x49, 0x92, 0x24, 0x49, 0x92,
913 0x24, 0x49, 0x92, 0x24, 0x49, 0x92, 0x24, 0x49,
914 0x92, 0x24, 0x49, 0x92, 0x24, 0x49, 0x92, 0x24,
915 0x49, 0x92, 0x24, 0x49, 0x92, 0x24, 0x49, 0x92,
916 0x24, 0x49, 0x92, 0x24, 0x49, 0x92, 0x24, 0x49,
917 0x92, 0x24, 0x49, 0x92, 0x24, 0x49, 0x92, 0x24,
918 0x49, 0x92, 0x24, 0x49, 0x92, 0x24, 0x49, 0x92,
919 0x24, 0x49, 0x92, 0x24, 0x49, 0x92, 0x24, 0x49,
920 0x92, 0x24, 0x49, 0x92, 0x24, 0x49, 0x92, 0x24,
921 0x49, 0x92, 0x24, 0x49, 0x92, 0x24, 0x49, 0x92,
922 0x24, 0x49, 0x92, 0x24, 0x49, 0x92, 0x24, 0x49,
923 0x5b, 0xb7, 0x67, 0xcf, 0xff, 0x03, 0x27, 0xa6,
924 0xaa, 0x9c, 0x80, 0xec, 0x5b, 0x07, 0x00, 0x00,
925 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42,
926 0x60, 0x82,
927 };
928
929 unsigned int mslogo_jpg_size = sizeof(mslogo_jpg);
930
931 const unsigned char nxlogo_png[] = {
932 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00,
933 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x01, 0x34, 0x00, 0x00,
934 0x00, 0x55, 0x08, 0x06, 0x00, 0x00, 0x00, 0xc7, 0x5e, 0x18, 0xd4,
935 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x2e,
936 0x23, 0x00, 0x00, 0x2e, 0x23, 0x01, 0x78, 0xa5, 0x3f, 0x76, 0x00,
937 0x00, 0x0a, 0x4f, 0x69, 0x43, 0x43, 0x50, 0x50, 0x68, 0x6f, 0x74,
938 0x6f, 0x73, 0x68, 0x6f, 0x70, 0x20, 0x49, 0x43, 0x43, 0x20, 0x70,
939 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x00, 0x00, 0x78, 0xda, 0x9d,
940 0x53, 0x67, 0x54, 0x53, 0xe9, 0x16, 0x3d, 0xf7, 0xde, 0xf4, 0x42,
941 0x4b, 0x88, 0x80, 0x94, 0x4b, 0x6f, 0x52, 0x15, 0x08, 0x20, 0x52,
942 0x42, 0x8b, 0x80, 0x14, 0x91, 0x26, 0x2a, 0x21, 0x09, 0x10, 0x4a,
943 0x88, 0x21, 0xa1, 0xd9, 0x15, 0x51, 0xc1, 0x11, 0x45, 0x45, 0x04,
944 0x1b, 0xc8, 0xa0, 0x88, 0x03, 0x8e, 0x8e, 0x80, 0x8c, 0x15, 0x51,
945 0x2c, 0x0c, 0x8a, 0x0a, 0xd8, 0x07, 0xe4, 0x21, 0xa2, 0x8e, 0x83,
946 0xa3, 0x88, 0x8a, 0xca, 0xfb, 0xe1, 0x7b, 0xa3, 0x6b, 0xd6, 0xbc,
947 0xf7, 0xe6, 0xcd, 0xfe, 0xb5, 0xd7, 0x3e, 0xe7, 0xac, 0xf3, 0x9d,
948 0xb3, 0xcf, 0x07, 0xc0, 0x08, 0x0c, 0x96, 0x48, 0x33, 0x51, 0x35,
949 0x80, 0x0c, 0xa9, 0x42, 0x1e, 0x11, 0xe0, 0x83, 0xc7, 0xc4, 0xc6,
950 0xe1, 0xe4, 0x2e, 0x40, 0x81, 0x0a, 0x24, 0x70, 0x00, 0x10, 0x08,
951 0xb3, 0x64, 0x21, 0x73, 0xfd, 0x23, 0x01, 0x00, 0xf8, 0x7e, 0x3c,
952 0x3c, 0x2b, 0x22, 0xc0, 0x07, 0xbe, 0x00, 0x01, 0x78, 0xd3, 0x0b,
953 0x08, 0x00, 0xc0, 0x4d, 0x9b, 0xc0, 0x30, 0x1c, 0x87, 0xff, 0x0f,
954 0xea, 0x42, 0x99, 0x5c, 0x01, 0x80, 0x84, 0x01, 0xc0, 0x74, 0x91,
955 0x38, 0x4b, 0x08, 0x80, 0x14, 0x00, 0x40, 0x7a, 0x8e, 0x42, 0xa6,
956 0x00, 0x40, 0x46, 0x01, 0x80, 0x9d, 0x98, 0x26, 0x53, 0x00, 0xa0,
957 0x04, 0x00, 0x60, 0xcb, 0x63, 0x62, 0xe3, 0x00, 0x50, 0x2d, 0x00,
958 0x60, 0x27, 0x7f, 0xe6, 0xd3, 0x00, 0x80, 0x9d, 0xf8, 0x99, 0x7b,
959 0x01, 0x00, 0x5b, 0x94, 0x21, 0x15, 0x01, 0xa0, 0x91, 0x00, 0x20,
960 0x13, 0x65, 0x88, 0x44, 0x00, 0x68, 0x3b, 0x00, 0xac, 0xcf, 0x56,
961 0x8a, 0x45, 0x00, 0x58, 0x30, 0x00, 0x14, 0x66, 0x4b, 0xc4, 0x39,
962 0x00, 0xd8, 0x2d, 0x00, 0x30, 0x49, 0x57, 0x66, 0x48, 0x00, 0xb0,
963 0xb7, 0x00, 0xc0, 0xce, 0x10, 0x0b, 0xb2, 0x00, 0x08, 0x0c, 0x00,
964 0x30, 0x51, 0x88, 0x85, 0x29, 0x00, 0x04, 0x7b, 0x00, 0x60, 0xc8,
965 0x23, 0x23, 0x78, 0x00, 0x84, 0x99, 0x00, 0x14, 0x46, 0xf2, 0x57,
966 0x3c, 0xf1, 0x2b, 0xae, 0x10, 0xe7, 0x2a, 0x00, 0x00, 0x78, 0x99,
967 0xb2, 0x3c, 0xb9, 0x24, 0x39, 0x45, 0x81, 0x5b, 0x08, 0x2d, 0x71,
968 0x07, 0x57, 0x57, 0x2e, 0x1e, 0x28, 0xce, 0x49, 0x17, 0x2b, 0x14,
969 0x36, 0x61, 0x02, 0x61, 0x9a, 0x40, 0x2e, 0xc2, 0x79, 0x99, 0x19,
970 0x32, 0x81, 0x34, 0x0f, 0xe0, 0xf3, 0xcc, 0x00, 0x00, 0xa0, 0x91,
971 0x15, 0x11, 0xe0, 0x83, 0xf3, 0xfd, 0x78, 0xce, 0x0e, 0xae, 0xce,
972 0xce, 0x36, 0x8e, 0xb6, 0x0e, 0x5f, 0x2d, 0xea, 0xbf, 0x06, 0xff,
973 0x22, 0x62, 0x62, 0xe3, 0xfe, 0xe5, 0xcf, 0xab, 0x70, 0x40, 0x00,
974 0x00, 0xe1, 0x74, 0x7e, 0xd1, 0xfe, 0x2c, 0x2f, 0xb3, 0x1a, 0x80,
975 0x3b, 0x06, 0x80, 0x6d, 0xfe, 0xa2, 0x25, 0xee, 0x04, 0x68, 0x5e,
976 0x0b, 0xa0, 0x75, 0xf7, 0x8b, 0x66, 0xb2, 0x0f, 0x40, 0xb5, 0x00,
977 0xa0, 0xe9, 0xda, 0x57, 0xf3, 0x70, 0xf8, 0x7e, 0x3c, 0x3c, 0x45,
978 0xa1, 0x90, 0xb9, 0xd9, 0xd9, 0xe5, 0xe4, 0xe4, 0xd8, 0x4a, 0xc4,
979 0x42, 0x5b, 0x61, 0xca, 0x57, 0x7d, 0xfe, 0x67, 0xc2, 0x5f, 0xc0,
980 0x57, 0xfd, 0x6c, 0xf9, 0x7e, 0x3c, 0xfc, 0xf7, 0xf5, 0xe0, 0xbe,
981 0xe2, 0x24, 0x81, 0x32, 0x5d, 0x81, 0x47, 0x04, 0xf8, 0xe0, 0xc2,
982 0xcc, 0xf4, 0x4c, 0xa5, 0x1c, 0xcf, 0x92, 0x09, 0x84, 0x62, 0xdc,
983 0xe6, 0x8f, 0x47, 0xfc, 0xb7, 0x0b, 0xff, 0xfc, 0x1d, 0xd3, 0x22,
984 0xc4, 0x49, 0x62, 0xb9, 0x58, 0x2a, 0x14, 0xe3, 0x51, 0x12, 0x71,
985 0x8e, 0x44, 0x9a, 0x8c, 0xf3, 0x32, 0xa5, 0x22, 0x89, 0x42, 0x92,
986 0x29, 0xc5, 0x25, 0xd2, 0xff, 0x64, 0xe2, 0xdf, 0x2c, 0xfb, 0x03,
987 0x3e, 0xdf, 0x35, 0x00, 0xb0, 0x6a, 0x3e, 0x01, 0x7b, 0x91, 0x2d,
988 0xa8, 0x5d, 0x63, 0x03, 0xf6, 0x4b, 0x27, 0x10, 0x58, 0x74, 0xc0,
989 0xe2, 0xf7, 0x00, 0x00, 0xf2, 0xbb, 0x6f, 0xc1, 0xd4, 0x28, 0x08,
990 0x03, 0x80, 0x68, 0x83, 0xe1, 0xcf, 0x77, 0xff, 0xef, 0x3f, 0xfd,
991 0x47, 0xa0, 0x25, 0x00, 0x80, 0x66, 0x49, 0x92, 0x71, 0x00, 0x00,
992 0x5e, 0x44, 0x24, 0x2e, 0x54, 0xca, 0xb3, 0x3f, 0xc7, 0x08, 0x00,
993 0x00, 0x44, 0xa0, 0x81, 0x2a, 0xb0, 0x41, 0x1b, 0xf4, 0xc1, 0x18,
994 0x2c, 0xc0, 0x06, 0x1c, 0xc1, 0x05, 0xdc, 0xc1, 0x0b, 0xfc, 0x60,
995 0x36, 0x84, 0x42, 0x24, 0xc4, 0xc2, 0x42, 0x10, 0x42, 0x0a, 0x64,
996 0x80, 0x1c, 0x72, 0x60, 0x29, 0xac, 0x82, 0x42, 0x28, 0x86, 0xcd,
997 0xb0, 0x1d, 0x2a, 0x60, 0x2f, 0xd4, 0x40, 0x1d, 0x34, 0xc0, 0x51,
998 0x68, 0x86, 0x93, 0x70, 0x0e, 0x2e, 0xc2, 0x55, 0xb8, 0x0e, 0x3d,
999 0x70, 0x0f, 0xfa, 0x61, 0x08, 0x9e, 0xc1, 0x28, 0xbc, 0x81, 0x09,
1000 0x04, 0x41, 0xc8, 0x08, 0x13, 0x61, 0x21, 0xda, 0x88, 0x01, 0x62,
1001 0x8a, 0x58, 0x23, 0x8e, 0x08, 0x17, 0x99, 0x85, 0xf8, 0x21, 0xc1,
1002 0x48, 0x04, 0x12, 0x8b, 0x24, 0x20, 0xc9, 0x88, 0x14, 0x51, 0x22,
1003 0x4b, 0x91, 0x35, 0x48, 0x31, 0x52, 0x8a, 0x54, 0x20, 0x55, 0x48,
1004 0x1d, 0xf2, 0x3d, 0x72, 0x02, 0x39, 0x87, 0x5c, 0x46, 0xba, 0x91,
1005 0x3b, 0xc8, 0x00, 0x32, 0x82, 0xfc, 0x86, 0xbc, 0x47, 0x31, 0x94,
1006 0x81, 0xb2, 0x51, 0x3d, 0xd4, 0x0c, 0xb5, 0x43, 0xb9, 0xa8, 0x37,
1007 0x1a, 0x84, 0x46, 0xa2, 0x0b, 0xd0, 0x64, 0x74, 0x31, 0x9a, 0x8f,
1008 0x16, 0xa0, 0x9b, 0xd0, 0x72, 0xb4, 0x1a, 0x3d, 0x8c, 0x36, 0xa1,
1009 0xe7, 0xd0, 0xab, 0x68, 0x0f, 0xda, 0x8f, 0x3e, 0x43, 0xc7, 0x30,
1010 0xc0, 0xe8, 0x18, 0x07, 0x33, 0xc4, 0x6c, 0x30, 0x2e, 0xc6, 0xc3,
1011 0x42, 0xb1, 0x38, 0x2c, 0x09, 0x93, 0x63, 0xcb, 0xb1, 0x22, 0xac,
1012 0x0c, 0xab, 0xc6, 0x1a, 0xb0, 0x56, 0xac, 0x03, 0xbb, 0x89, 0xf5,
1013 0x63, 0xcf, 0xb1, 0x77, 0x04, 0x12, 0x81, 0x45, 0xc0, 0x09, 0x36,
1014 0x04, 0x77, 0x42, 0x20, 0x61, 0x1e, 0x41, 0x48, 0x58, 0x4c, 0x58,
1015 0x4e, 0xd8, 0x48, 0xa8, 0x20, 0x1c, 0x24, 0x34, 0x11, 0xda, 0x09,
1016 0x37, 0x09, 0x03, 0x84, 0x51, 0xc2, 0x27, 0x22, 0x93, 0xa8, 0x4b,
1017 0xb4, 0x26, 0xba, 0x11, 0xf9, 0xc4, 0x18, 0x62, 0x32, 0x31, 0x87,
1018 0x58, 0x48, 0x2c, 0x23, 0xd6, 0x12, 0x8f, 0x13, 0x2f, 0x10, 0x7b,
1019 0x88, 0x43, 0xc4, 0x37, 0x24, 0x12, 0x89, 0x43, 0x32, 0x27, 0xb9,
1020 0x90, 0x02, 0x49, 0xb1, 0xa4, 0x54, 0xd2, 0x12, 0xd2, 0x46, 0xd2,
1021 0x6e, 0x52, 0x23, 0xe9, 0x2c, 0xa9, 0x9b, 0x34, 0x48, 0x1a, 0x23,
1022 0x93, 0xc9, 0xda, 0x64, 0x6b, 0xb2, 0x07, 0x39, 0x94, 0x2c, 0x20,
1023 0x2b, 0xc8, 0x85, 0xe4, 0x9d, 0xe4, 0xc3, 0xe4, 0x33, 0xe4, 0x1b,
1024 0xe4, 0x21, 0xf2, 0x5b, 0x0a, 0x9d, 0x62, 0x40, 0x71, 0xa4, 0xf8,
1025 0x53, 0xe2, 0x28, 0x52, 0xca, 0x6a, 0x4a, 0x19, 0xe5, 0x10, 0xe5,
1026 0x34, 0xe5, 0x06, 0x65, 0x98, 0x32, 0x41, 0x55, 0xa3, 0x9a, 0x52,
1027 0xdd, 0xa8, 0xa1, 0x54, 0x11, 0x35, 0x8f, 0x5a, 0x42, 0xad, 0xa1,
1028 0xb6, 0x52, 0xaf, 0x51, 0x87, 0xa8, 0x13, 0x34, 0x75, 0x9a, 0x39,
1029 0xcd, 0x83, 0x16, 0x49, 0x4b, 0xa5, 0xad, 0xa2, 0x95, 0xd3, 0x1a,
1030 0x68, 0x17, 0x68, 0xf7, 0x69, 0xaf, 0xe8, 0x74, 0xba, 0x11, 0xdd,
1031 0x95, 0x1e, 0x4e, 0x97, 0xd0, 0x57, 0xd2, 0xcb, 0xe9, 0x47, 0xe8,
1032 0x97, 0xe8, 0x03, 0xf4, 0x77, 0x0c, 0x0d, 0x86, 0x15, 0x83, 0xc7,
1033 0x88, 0x67, 0x28, 0x19, 0x9b, 0x18, 0x07, 0x18, 0x67, 0x19, 0x77,
1034 0x18, 0xaf, 0x98, 0x4c, 0xa6, 0x19, 0xd3, 0x8b, 0x19, 0xc7, 0x54,
1035 0x30, 0x37, 0x31, 0xeb, 0x98, 0xe7, 0x99, 0x0f, 0x99, 0x6f, 0x55,
1036 0x58, 0x2a, 0xb6, 0x2a, 0x7c, 0x15, 0x91, 0xca, 0x0a, 0x95, 0x4a,
1037 0x95, 0x26, 0x95, 0x1b, 0x2a, 0x2f, 0x54, 0xa9, 0xaa, 0xa6, 0xaa,
1038 0xde, 0xaa, 0x0b, 0x55, 0xf3, 0x55, 0xcb, 0x54, 0x8f, 0xa9, 0x5e,
1039 0x53, 0x7d, 0xae, 0x46, 0x55, 0x33, 0x53, 0xe3, 0xa9, 0x09, 0xd4,
1040 0x96, 0xab, 0x55, 0xaa, 0x9d, 0x50, 0xeb, 0x53, 0x1b, 0x53, 0x67,
1041 0xa9, 0x3b, 0xa8, 0x87, 0xaa, 0x67, 0xa8, 0x6f, 0x54, 0x3f, 0xa4,
1042 0x7e, 0x59, 0xfd, 0x89, 0x06, 0x59, 0xc3, 0x4c, 0xc3, 0x4f, 0x43,
1043 0xa4, 0x51, 0xa0, 0xb1, 0x5f, 0xe3, 0xbc, 0xc6, 0x20, 0x0b, 0x63,
1044 0x19, 0xb3, 0x78, 0x2c, 0x21, 0x6b, 0x0d, 0xab, 0x86, 0x75, 0x81,
1045 0x35, 0xc4, 0x26, 0xb1, 0xcd, 0xd9, 0x7c, 0x76, 0x2a, 0xbb, 0x98,
1046 0xfd, 0x1d, 0xbb, 0x8b, 0x3d, 0xaa, 0xa9, 0xa1, 0x39, 0x43, 0x33,
1047 0x4a, 0x33, 0x57, 0xb3, 0x52, 0xf3, 0x94, 0x66, 0x3f, 0x07, 0xe3,
1048 0x98, 0x71, 0xf8, 0x9c, 0x74, 0x4e, 0x09, 0xe7, 0x28, 0xa7, 0x97,
1049 0xf3, 0x7e, 0x8a, 0xde, 0x14, 0xef, 0x29, 0xe2, 0x29, 0x1b, 0xa6,
1050 0x34, 0x4c, 0xb9, 0x31, 0x65, 0x5c, 0x6b, 0xaa, 0x96, 0x97, 0x96,
1051 0x58, 0xab, 0x48, 0xab, 0x51, 0xab, 0x47, 0xeb, 0xbd, 0x36, 0xae,
1052 0xed, 0xa7, 0x9d, 0xa6, 0xbd, 0x45, 0xbb, 0x59, 0xfb, 0x81, 0x0e,
1053 0x41, 0xc7, 0x4a, 0x27, 0x5c, 0x27, 0x47, 0x67, 0x8f, 0xce, 0x05,
1054 0x9d, 0xe7, 0x53, 0xd9, 0x53, 0xdd, 0xa7, 0x0a, 0xa7, 0x16, 0x4d,
1055 0x3d, 0x3a, 0xf5, 0xae, 0x2e, 0xaa, 0x6b, 0xa5, 0x1b, 0xa1, 0xbb,
1056 0x44, 0x77, 0xbf, 0x6e, 0xa7, 0xee, 0x98, 0x9e, 0xbe, 0x5e, 0x80,
1057 0x9e, 0x4c, 0x6f, 0xa7, 0xde, 0x79, 0xbd, 0xe7, 0xfa, 0x1c, 0x7d,
1058 0x2f, 0xfd, 0x54, 0xfd, 0x6d, 0xfa, 0xa7, 0xf5, 0x47, 0x0c, 0x58,
1059 0x06, 0xb3, 0x0c, 0x24, 0x06, 0xdb, 0x0c, 0xce, 0x18, 0x3c, 0xc5,
1060 0x35, 0x71, 0x6f, 0x3c, 0x1d, 0x2f, 0xc7, 0xdb, 0xf1, 0x51, 0x43,
1061 0x5d, 0xc3, 0x40, 0x43, 0xa5, 0x61, 0x95, 0x61, 0x97, 0xe1, 0x84,
1062 0x91, 0xb9, 0xd1, 0x3c, 0xa3, 0xd5, 0x46, 0x8d, 0x46, 0x0f, 0x8c,
1063 0x69, 0xc6, 0x5c, 0xe3, 0x24, 0xe3, 0x6d, 0xc6, 0x6d, 0xc6, 0xa3,
1064 0x26, 0x06, 0x26, 0x21, 0x26, 0x4b, 0x4d, 0xea, 0x4d, 0xee, 0x9a,
1065 0x52, 0x4d, 0xb9, 0xa6, 0x29, 0xa6, 0x3b, 0x4c, 0x3b, 0x4c, 0xc7,
1066 0xcd, 0xcc, 0xcd, 0xa2, 0xcd, 0xd6, 0x99, 0x35, 0x9b, 0x3d, 0x31,
1067 0xd7, 0x32, 0xe7, 0x9b, 0xe7, 0x9b, 0xd7, 0x9b, 0xdf, 0xb7, 0x60,
1068 0x5a, 0x78, 0x5a, 0x2c, 0xb6, 0xa8, 0xb6, 0xb8, 0x65, 0x49, 0xb2,
1069 0xe4, 0x5a, 0xa6, 0x59, 0xee, 0xb6, 0xbc, 0x6e, 0x85, 0x5a, 0x39,
1070 0x59, 0xa5, 0x58, 0x55, 0x5a, 0x5d, 0xb3, 0x46, 0xad, 0x9d, 0xad,
1071 0x25, 0xd6, 0xbb, 0xad, 0xbb, 0xa7, 0x11, 0xa7, 0xb9, 0x4e, 0x93,
1072 0x4e, 0xab, 0x9e, 0xd6, 0x67, 0xc3, 0xb0, 0xf1, 0xb6, 0xc9, 0xb6,
1073 0xa9, 0xb7, 0x19, 0xb0, 0xe5, 0xd8, 0x06, 0xdb, 0xae, 0xb6, 0x6d,
1074 0xb6, 0x7d, 0x61, 0x67, 0x62, 0x17, 0x67, 0xb7, 0xc5, 0xae, 0xc3,
1075 0xee, 0x93, 0xbd, 0x93, 0x7d, 0xba, 0x7d, 0x8d, 0xfd, 0x3d, 0x07,
1076 0x0d, 0x87, 0xd9, 0x0e, 0xab, 0x1d, 0x5a, 0x1d, 0x7e, 0x73, 0xb4,
1077 0x72, 0x14, 0x3a, 0x56, 0x3a, 0xde, 0x9a, 0xce, 0x9c, 0xee, 0x3f,
1078 0x7d, 0xc5, 0xf4, 0x96, 0xe9, 0x2f, 0x67, 0x58, 0xcf, 0x10, 0xcf,
1079 0xd8, 0x33, 0xe3, 0xb6, 0x13, 0xcb, 0x29, 0xc4, 0x69, 0x9d, 0x53,
1080 0x9b, 0xd3, 0x47, 0x67, 0x17, 0x67, 0xb9, 0x73, 0x83, 0xf3, 0x88,
1081 0x8b, 0x89, 0x4b, 0x82, 0xcb, 0x2e, 0x97, 0x3e, 0x2e, 0x9b, 0x1b,
1082 0xc6, 0xdd, 0xc8, 0xbd, 0xe4, 0x4a, 0x74, 0xf5, 0x71, 0x5d, 0xe1,
1083 0x7a, 0xd2, 0xf5, 0x9d, 0x9b, 0xb3, 0x9b, 0xc2, 0xed, 0xa8, 0xdb,
1084 0xaf, 0xee, 0x36, 0xee, 0x69, 0xee, 0x87, 0xdc, 0x9f, 0xcc, 0x34,
1085 0x9f, 0x29, 0x9e, 0x59, 0x33, 0x73, 0xd0, 0xc3, 0xc8, 0x43, 0xe0,
1086 0x51, 0xe5, 0xd1, 0x3f, 0x0b, 0x9f, 0x95, 0x30, 0x6b, 0xdf, 0xac,
1087 0x7e, 0x4f, 0x43, 0x4f, 0x81, 0x67, 0xb5, 0xe7, 0x23, 0x2f, 0x63,
1088 0x2f, 0x91, 0x57, 0xad, 0xd7, 0xb0, 0xb7, 0xa5, 0x77, 0xaa, 0xf7,
1089 0x61, 0xef, 0x17, 0x3e, 0xf6, 0x3e, 0x72, 0x9f, 0xe3, 0x3e, 0xe3,
1090 0x3c, 0x37, 0xde, 0x32, 0xde, 0x59, 0x5f, 0xcc, 0x37, 0xc0, 0xb7,
1091 0xc8, 0xb7, 0xcb, 0x4f, 0xc3, 0x6f, 0x9e, 0x5f, 0x85, 0xdf, 0x43,
1092 0x7f, 0x23, 0xff, 0x64, 0xff, 0x7a, 0xff, 0xd1, 0x00, 0xa7, 0x80,
1093 0x25, 0x01, 0x67, 0x03, 0x89, 0x81, 0x41, 0x81, 0x5b, 0x02, 0xfb,
1094 0xf8, 0x7a, 0x7c, 0x21, 0xbf, 0x8e, 0x3f, 0x3a, 0xdb, 0x65, 0xf6,
1095 0xb2, 0xd9, 0xed, 0x41, 0x8c, 0xa0, 0xb9, 0x41, 0x15, 0x41, 0x8f,
1096 0x82, 0xad, 0x82, 0xe5, 0xc1, 0xad, 0x21, 0x68, 0xc8, 0xec, 0x90,
1097 0xad, 0x21, 0xf7, 0xe7, 0x98, 0xce, 0x91, 0xce, 0x69, 0x0e, 0x85,
1098 0x50, 0x7e, 0xe8, 0xd6, 0xd0, 0x07, 0x61, 0xe6, 0x61, 0x8b, 0xc3,
1099 0x7e, 0x0c, 0x27, 0x85, 0x87, 0x85, 0x57, 0x86, 0x3f, 0x8e, 0x70,
1100 0x88, 0x58, 0x1a, 0xd1, 0x31, 0x97, 0x35, 0x77, 0xd1, 0xdc, 0x43,
1101 0x73, 0xdf, 0x44, 0xfa, 0x44, 0x96, 0x44, 0xde, 0x9b, 0x67, 0x31,
1102 0x4f, 0x39, 0xaf, 0x2d, 0x4a, 0x35, 0x2a, 0x3e, 0xaa, 0x2e, 0x6a,
1103 0x3c, 0xda, 0x37, 0xba, 0x34, 0xba, 0x3f, 0xc6, 0x2e, 0x66, 0x59,
1104 0xcc, 0xd5, 0x58, 0x9d, 0x58, 0x49, 0x6c, 0x4b, 0x1c, 0x39, 0x2e,
1105 0x2a, 0xae, 0x36, 0x6e, 0x6c, 0xbe, 0xdf, 0xfc, 0xed, 0xf3, 0x87,
1106 0xe2, 0x9d, 0xe2, 0x0b, 0xe3, 0x7b, 0x17, 0x98, 0x2f, 0xc8, 0x5d,
1107 0x70, 0x79, 0xa1, 0xce, 0xc2, 0xf4, 0x85, 0xa7, 0x16, 0xa9, 0x2e,
1108 0x12, 0x2c, 0x3a, 0x96, 0x40, 0x4c, 0x88, 0x4e, 0x38, 0x94, 0xf0,
1109 0x41, 0x10, 0x2a, 0xa8, 0x16, 0x8c, 0x25, 0xf2, 0x13, 0x77, 0x25,
1110 0x8e, 0x0a, 0x79, 0xc2, 0x1d, 0xc2, 0x67, 0x22, 0x2f, 0xd1, 0x36,
1111 0xd1, 0x88, 0xd8, 0x43, 0x5c, 0x2a, 0x1e, 0x4e, 0xf2, 0x48, 0x2a,
1112 0x4d, 0x7a, 0x92, 0xec, 0x91, 0xbc, 0x35, 0x79, 0x24, 0xc5, 0x33,
1113 0xa5, 0x2c, 0xe5, 0xb9, 0x84, 0x27, 0xa9, 0x90, 0xbc, 0x4c, 0x0d,
1114 0x4c, 0xdd, 0x9b, 0x3a, 0x9e, 0x16, 0x9a, 0x76, 0x20, 0x6d, 0x32,
1115 0x3d, 0x3a, 0xbd, 0x31, 0x83, 0x92, 0x91, 0x90, 0x71, 0x42, 0xaa,
1116 0x21, 0x4d, 0x93, 0xb6, 0x67, 0xea, 0x67, 0xe6, 0x66, 0x76, 0xcb,
1117 0xac, 0x65, 0x85, 0xb2, 0xfe, 0xc5, 0x6e, 0x8b, 0xb7, 0x2f, 0x1e,
1118 0x95, 0x07, 0xc9, 0x6b, 0xb3, 0x90, 0xac, 0x05, 0x59, 0x2d, 0x0a,
1119 0xb6, 0x42, 0xa6, 0xe8, 0x54, 0x5a, 0x28, 0xd7, 0x2a, 0x07, 0xb2,
1120 0x67, 0x65, 0x57, 0x66, 0xbf, 0xcd, 0x89, 0xca, 0x39, 0x96, 0xab,
1121 0x9e, 0x2b, 0xcd, 0xed, 0xcc, 0xb3, 0xca, 0xdb, 0x90, 0x37, 0x9c,
1122 0xef, 0x9f, 0xff, 0xed, 0x12, 0xc2, 0x12, 0xe1, 0x92, 0xb6, 0xa5,
1123 0x86, 0x4b, 0x57, 0x2d, 0x1d, 0x58, 0xe6, 0xbd, 0xac, 0x6a, 0x39,
1124 0xb2, 0x3c, 0x71, 0x79, 0xdb, 0x0a, 0xe3, 0x15, 0x05, 0x2b, 0x86,
1125 0x56, 0x06, 0xac, 0x3c, 0xb8, 0x8a, 0xb6, 0x2a, 0x6d, 0xd5, 0x4f,
1126 0xab, 0xed, 0x57, 0x97, 0xae, 0x7e, 0xbd, 0x26, 0x7a, 0x4d, 0x6b,
1127 0x81, 0x5e, 0xc1, 0xca, 0x82, 0xc1, 0xb5, 0x01, 0x6b, 0xeb, 0x0b,
1128 0x55, 0x0a, 0xe5, 0x85, 0x7d, 0xeb, 0xdc, 0xd7, 0xed, 0x5d, 0x4f,
1129 0x58, 0x2f, 0x59, 0xdf, 0xb5, 0x61, 0xfa, 0x86, 0x9d, 0x1b, 0x3e,
1130 0x15, 0x89, 0x8a, 0xae, 0x14, 0xdb, 0x17, 0x97, 0x15, 0x7f, 0xd8,
1131 0x28, 0xdc, 0x78, 0xe5, 0x1b, 0x87, 0x6f, 0xca, 0xbf, 0x99, 0xdc,
1132 0x94, 0xb4, 0xa9, 0xab, 0xc4, 0xb9, 0x64, 0xcf, 0x66, 0xd2, 0x66,
1133 0xe9, 0xe6, 0xde, 0x2d, 0x9e, 0x5b, 0x0e, 0x96, 0xaa, 0x97, 0xe6,
1134 0x97, 0x0e, 0x6e, 0x0d, 0xd9, 0xda, 0xb4, 0x0d, 0xdf, 0x56, 0xb4,
1135 0xed, 0xf5, 0xf6, 0x45, 0xdb, 0x2f, 0x97, 0xcd, 0x28, 0xdb, 0xbb,
1136 0x83, 0xb6, 0x43, 0xb9, 0xa3, 0xbf, 0x3c, 0xb8, 0xbc, 0x65, 0xa7,
1137 0xc9, 0xce, 0xcd, 0x3b, 0x3f, 0x54, 0xa4, 0x54, 0xf4, 0x54, 0xfa,
1138 0x54, 0x36, 0xee, 0xd2, 0xdd, 0xb5, 0x61, 0xd7, 0xf8, 0x6e, 0xd1,
1139 0xee, 0x1b, 0x7b, 0xbc, 0xf6, 0x34, 0xec, 0xd5, 0xdb, 0x5b, 0xbc,
1140 0xf7, 0xfd, 0x3e, 0xc9, 0xbe, 0xdb, 0x55, 0x01, 0x55, 0x4d, 0xd5,
1141 0x66, 0xd5, 0x65, 0xfb, 0x49, 0xfb, 0xb3, 0xf7, 0x3f, 0xae, 0x89,
1142 0xaa, 0xe9, 0xf8, 0x96, 0xfb, 0x6d, 0x5d, 0xad, 0x4e, 0x6d, 0x71,
1143 0xed, 0xc7, 0x03, 0xd2, 0x03, 0xfd, 0x07, 0x23, 0x0e, 0xb6, 0xd7,
1144 0xb9, 0xd4, 0xd5, 0x1d, 0xd2, 0x3d, 0x54, 0x52, 0x8f, 0xd6, 0x2b,
1145 0xeb, 0x47, 0x0e, 0xc7, 0x1f, 0xbe, 0xfe, 0x9d, 0xef, 0x77, 0x2d,
1146 0x0d, 0x36, 0x0d, 0x55, 0x8d, 0x9c, 0xc6, 0xe2, 0x23, 0x70, 0x44,
1147 0x79, 0xe4, 0xe9, 0xf7, 0x09, 0xdf, 0xf7, 0x1e, 0x0d, 0x3a, 0xda,
1148 0x76, 0x8c, 0x7b, 0xac, 0xe1, 0x07, 0xd3, 0x1f, 0x76, 0x1d, 0x67,
1149 0x1d, 0x2f, 0x6a, 0x42, 0x9a, 0xf2, 0x9a, 0x46, 0x9b, 0x53, 0x9a,
1150 0xfb, 0x5b, 0x62, 0x5b, 0xba, 0x4f, 0xcc, 0x3e, 0xd1, 0xd6, 0xea,
1151 0xde, 0x7a, 0xfc, 0x47, 0xdb, 0x1f, 0x0f, 0x9c, 0x34, 0x3c, 0x59,
1152 0x79, 0x4a, 0xf3, 0x54, 0xc9, 0x69, 0xda, 0xe9, 0x82, 0xd3, 0x93,
1153 0x67, 0xf2, 0xcf, 0x8c, 0x9d, 0x95, 0x9d, 0x7d, 0x7e, 0x2e, 0xf9,
1154 0xdc, 0x60, 0xdb, 0xa2, 0xb6, 0x7b, 0xe7, 0x63, 0xce, 0xdf, 0x6a,
1155 0x0f, 0x6f, 0xef, 0xba, 0x10, 0x74, 0xe1, 0xd2, 0x45, 0xff, 0x8b,
1156 0xe7, 0x3b, 0xbc, 0x3b, 0xce, 0x5c, 0xf2, 0xb8, 0x74, 0xf2, 0xb2,
1157 0xdb, 0xe5, 0x13, 0x57, 0xb8, 0x57, 0x9a, 0xaf, 0x3a, 0x5f, 0x6d,
1158 0xea, 0x74, 0xea, 0x3c, 0xfe, 0x93, 0xd3, 0x4f, 0xc7, 0xbb, 0x9c,
1159 0xbb, 0x9a, 0xae, 0xb9, 0x5c, 0x6b, 0xb9, 0xee, 0x7a, 0xbd, 0xb5,
1160 0x7b, 0x66, 0xf7, 0xe9, 0x1b, 0x9e, 0x37, 0xce, 0xdd, 0xf4, 0xbd,
1161 0x79, 0xf1, 0x16, 0xff, 0xd6, 0xd5, 0x9e, 0x39, 0x3d, 0xdd, 0xbd,
1162 0xf3, 0x7a, 0x6f, 0xf7, 0xc5, 0xf7, 0xf5, 0xdf, 0x16, 0xdd, 0x7e,
1163 0x72, 0x27, 0xfd, 0xce, 0xcb, 0xbb, 0xd9, 0x77, 0x27, 0xee, 0xad,
1164 0xbc, 0x4f, 0xbc, 0x5f, 0xf4, 0x40, 0xed, 0x41, 0xd9, 0x43, 0xdd,
1165 0x87, 0xd5, 0x3f, 0x5b, 0xfe, 0xdc, 0xd8, 0xef, 0xdc, 0x7f, 0x6a,
1166 0xc0, 0x77, 0xa0, 0xf3, 0xd1, 0xdc, 0x47, 0xf7, 0x06, 0x85, 0x83,
1167 0xcf, 0xfe, 0x91, 0xf5, 0x8f, 0x0f, 0x43, 0x05, 0x8f, 0x99, 0x8f,
1168 0xcb, 0x86, 0x0d, 0x86, 0xeb, 0x9e, 0x38, 0x3e, 0x39, 0x39, 0xe2,
1169 0x3f, 0x72, 0xfd, 0xe9, 0xfc, 0xa7, 0x43, 0xcf, 0x64, 0xcf, 0x26,
1170 0x9e, 0x17, 0xfe, 0xa2, 0xfe, 0xcb, 0xae, 0x17, 0x16, 0x2f, 0x7e,
1171 0xf8, 0xd5, 0xeb, 0xd7, 0xce, 0xd1, 0x98, 0xd1, 0xa1, 0x97, 0xf2,
1172 0x97, 0x93, 0xbf, 0x6d, 0x7c, 0xa5, 0xfd, 0xea, 0xc0, 0xeb, 0x19,
1173 0xaf, 0xdb, 0xc6, 0xc2, 0xc6, 0x1e, 0xbe, 0xc9, 0x78, 0x33, 0x31,
1174 0x5e, 0xf4, 0x56, 0xfb, 0xed, 0xc1, 0x77, 0xdc, 0x77, 0x1d, 0xef,
1175 0xa3, 0xdf, 0x0f, 0x4f, 0xe4, 0x7c, 0x20, 0x7f, 0x28, 0xff, 0x68,
1176 0xf9, 0xb1, 0xf5, 0x53, 0xd0, 0xa7, 0xfb, 0x93, 0x19, 0x93, 0x93,
1177 0xff, 0x04, 0x03, 0x98, 0xf3, 0xfc, 0x63, 0x33, 0x2d, 0xdb, 0x00,
1178 0x00, 0x00, 0x20, 0x63, 0x48, 0x52, 0x4d, 0x00, 0x00, 0x7a, 0x25,
1179 0x00, 0x00, 0x80, 0x83, 0x00, 0x00, 0xf9, 0xff, 0x00, 0x00, 0x80,
1180 0xe9, 0x00, 0x00, 0x75, 0x30, 0x00, 0x00, 0xea, 0x60, 0x00, 0x00,
1181 0x3a, 0x98, 0x00, 0x00, 0x17, 0x6f, 0x92, 0x5f, 0xc5, 0x46, 0x00,
1182 0x00, 0x25, 0xa0, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0xec, 0x9d,
1183 0x79, 0x94, 0x25, 0x55, 0x9d, 0xe7, 0xbf, 0xbf, 0x1b, 0xf1, 0xf6,
1184 0xf7, 0x72, 0xad, 0x5c, 0xaa, 0xa8, 0x3d, 0x6b, 0x2f, 0x76, 0x41,
1185 0x60, 0x4a, 0xb4, 0xb1, 0x65, 0x5c, 0xda, 0xb6, 0x15, 0x6c, 0x04,
1186 0xec, 0xd1, 0x43, 0xab, 0xad, 0x07, 0x41, 0x1a, 0xa4, 0x6d, 0x9d,
1187 0x46, 0xa4, 0x68, 0xa8, 0xee, 0x39, 0x72, 0xa6, 0xad, 0xee, 0x71,
1188 0x10, 0x97, 0x71, 0x03, 0xb4, 0x61, 0x46, 0x4b, 0xc7, 0x6d, 0xc0,
1189 0x06, 0x51, 0xb1, 0x9a, 0x62, 0x69, 0x4a, 0xaa, 0x84, 0xda, 0xf7,
1190 0x25, 0x2b, 0xf7, 0xcc, 0x97, 0x6f, 0x8d, 0xb8, 0x77, 0xfe, 0x78,
1191 0x2f, 0x5f, 0x46, 0xc6, 0x8b, 0xe5, 0xde, 0xb7, 0x64, 0x15, 0x95,
1192 0xf1, 0xcb, 0x13, 0xe7, 0x45, 0xdc, 0xb8, 0xb1, 0x64, 0x44, 0xdc,
1193 0x4f, 0x7c, 0x7f, 0xbf, 0x7b, 0xe3, 0x5e, 0x12, 0x42, 0x20, 0xb0,
1194 0xc0, 0x02, 0x0b, 0xec, 0x6c, 0x30, 0xbd, 0x32, 0xf7, 0x4a, 0x28,
1195 0xb8, 0x1a, 0x73, 0xdb, 0xe8, 0x2c, 0xfb, 0x7f, 0x82, 0x37, 0xf5,
1196 0x9c, 0x06, 0x5a, 0x60, 0x73, 0x11, 0x4a, 0xf4, 0x3a, 0xfa, 0xbf,
1197 0x44, 0x8d, 0xff, 0x5b, 0x3d, 0x60, 0x0b, 0xa0, 0x18, 0x00, 0x2d,
1198 0xb0, 0x26, 0x00, 0x85, 0x9a, 0xb0, 0xcf, 0x66, 0xc0, 0x8d, 0x6c,
1199 0x30, 0x20, 0x17, 0x40, 0xf8, 0x1d, 0x4b, 0x34, 0x00, 0x68, 0x6e,
1200 0xe7, 0xa0, 0x02, 0x32, 0xd5, 0xf3, 0x0c, 0xc0, 0x18, 0x00, 0x6d,
1201 0x4e, 0x82, 0xaa, 0x11, 0x20, 0xa3, 0x1a, 0xd3, 0x65, 0x0b, 0xf9,
1202 0xeb, 0xd1, 0x05, 0x15, 0x75, 0xae, 0xf7, 0xcb, 0x27, 0x6a, 0x54,
1203 0x81, 0xd4, 0xa0, 0xe3, 0x07, 0x16, 0x00, 0xed, 0x8c, 0x51, 0x54,
1204 0xb2, 0x70, 0xaa, 0x15, 0x54, 0x8d, 0x06, 0x2a, 0x35, 0xf1, 0xfa,
1205 0x34, 0xa3, 0x40, 0x37, 0x1a, 0x56, 0x32, 0xfb, 0x15, 0x8a, 0x69,
1206 0xd4, 0x60, 0x70, 0x05, 0xe0, 0x0b, 0x80, 0x36, 0x6b, 0xa0, 0x22,
1207 0xc5, 0xe5, 0x46, 0xe4, 0x21, 0x0f, 0x05, 0x56, 0x0f, 0xe4, 0xfc,
1208 0xd6, 0x89, 0x3a, 0xae, 0x6d, 0xb3, 0x63, 0x5c, 0x42, 0x61, 0x3b,
1209 0xe1, 0xf2, 0xff, 0xd4, 0xbb, 0x2c, 0x9b, 0x26, 0x0b, 0x3e, 0x31,
1210 0x0b, 0xd7, 0x36, 0x00, 0xda, 0xeb, 0x14, 0x5e, 0x24, 0xe1, 0x86,
1211 0x91, 0x02, 0x50, 0x6a, 0x9d, 0xf7, 0x5a, 0xb6, 0x9e, 0x1f, 0x29,
1212 0x9c, 0x5b, 0xbd, 0x10, 0x6e, 0x94, 0x02, 0xa3, 0x1a, 0x0b, 0x9c,
1213 0x4a, 0xec, 0xac, 0x56, 0xa8, 0xd8, 0xd3, 0x6b, 0x81, 0x91, 0xdf,
1214 0xb1, 0xb9, 0x87, 0xdb, 0xe9, 0xb4, 0x1f, 0xbf, 0x3c, 0xf5, 0x54,
1215 0x78, 0x38, 0xc1, 0xf0, 0xac, 0x01, 0xdf, 0xd9, 0x08, 0x34, 0x55,
1216 0xa5, 0x41, 0x92, 0xb0, 0x80, 0x4b, 0x3e, 0xf2, 0x59, 0x2f, 0xb3,
1217 0x9d, 0xca, 0xbe, 0x6b, 0x85, 0x62, 0xbd, 0x8a, 0xd2, 0x0d, 0xb0,
1218 0xb3, 0x61, 0xa2, 0xce, 0x3c, 0x2a, 0x8a, 0xaa, 0x96, 0x75, 0x7e,
1219 0x79, 0x34, 0x8f, 0x3c, 0x2a, 0x40, 0x13, 0x8a, 0xe7, 0xe5, 0xf4,
1220 0x42, 0x70, 0x4b, 0xf3, 0x52, 0xa8, 0x01, 0xd0, 0xce, 0x40, 0x17,
1221 0xb1, 0x1e, 0x65, 0x45, 0x35, 0x02, 0x8d, 0x1a, 0xb8, 0x4f, 0x55,
1222 0x78, 0xd6, 0x0b, 0xbe, 0x7a, 0x94, 0xdc, 0x6c, 0x83, 0x4d, 0x36,
1223 0x5d, 0x45, 0x55, 0x89, 0x1a, 0xe0, 0xd3, 0x88, 0x34, 0xfb, 0x7a,
1224 0xd9, 0xe3, 0xab, 0x9c, 0xa7, 0x9b, 0x5b, 0x4d, 0x75, 0x2a, 0xea,
1225 0x00, 0x68, 0x0a, 0x50, 0x12, 0x35, 0xa8, 0x0b, 0xbf, 0x02, 0xed,
1226 0x07, 0x1c, 0xaa, 0x03, 0x54, 0xcc, 0x03, 0x2c, 0x2a, 0x80, 0x53,
1227 0x01, 0x9a, 0xaa, 0x02, 0x54, 0x51, 0x70, 0xf5, 0xac, 0x6b, 0x86,
1228 0x22, 0x53, 0x8d, 0x4b, 0xc9, 0xaa, 0x23, 0x15, 0xd7, 0x4f, 0x16,
1229 0x32, 0x42, 0x72, 0x1b, 0x51, 0xc3, 0x7e, 0x54, 0x20, 0x57, 0x8b,
1230 0xbb, 0xeb, 0xe4, 0xa6, 0x8a, 0x1a, 0x42, 0x02, 0x73, 0x1a, 0x68,
1231 0x7e, 0x6a, 0xa1, 0x96, 0xc2, 0x2e, 0x03, 0x18, 0xaa, 0x01, 0x68,
1232 0xaa, 0xeb, 0x64, 0xd2, 0x1a, 0x01, 0xba, 0x7a, 0x21, 0x56, 0x4f,
1233 0xcd, 0xab, 0x4a, 0x9e, 0x46, 0x34, 0x65, 0x10, 0x75, 0x02, 0x4d,
1234 0x46, 0x9d, 0x71, 0x87, 0x02, 0x2c, 0x24, 0xe0, 0x21, 0x0b, 0x23,
1235 0x2e, 0x01, 0x39, 0x21, 0x09, 0x41, 0xaf, 0x63, 0x92, 0xe5, 0x58,
1236 0x4e, 0xe7, 0xac, 0x0a, 0xa9, 0x46, 0xd7, 0xdc, 0x9e, 0x15, 0x40,
1237 0x93, 0xa9, 0x9d, 0x53, 0x71, 0xf3, 0xfc, 0xd2, 0x54, 0xd6, 0xcb,
1238 0x6c, 0xe7, 0xb6, 0xec, 0x96, 0xa7, 0x51, 0xc0, 0x54, 0x01, 0x7d,
1239 0xbd, 0x95, 0x09, 0xcd, 0xaa, 0x48, 0x68, 0x26, 0xd0, 0xbc, 0xd4,
1240 0x46, 0xa3, 0xd5, 0x96, 0x97, 0x6a, 0x72, 0xcb, 0xa3, 0x9a, 0xae,
1241 0x9a, 0xc7, 0x29, 0xff, 0xd4, 0xcb, 0x5d, 0xe5, 0x3c, 0x49, 0xe1,
1242 0x85, 0x41, 0xa7, 0x53, 0xc1, 0xe9, 0xa7, 0x11, 0x60, 0x2a, 0xe0,
1243 0x52, 0x2d, 0xf8, 0xa4, 0xb8, 0xae, 0x96, 0x3c, 0xaa, 0xfb, 0xf3,
1244 0xdb, 0x4e, 0x15, 0x7e, 0x32, 0xea, 0x4e, 0x45, 0xd9, 0x9d, 0x89,
1245 0x71, 0x35, 0x51, 0x47, 0x5a, 0x2d, 0x6e, 0x96, 0x1f, 0xe4, 0xb8,
1246 0xc7, 0xbe, 0x65, 0x41, 0x63, 0xcf, 0xeb, 0x97, 0x66, 0xdf, 0x07,
1247 0x57, 0x84, 0x98, 0xa8, 0x21, 0xbf, 0xd7, 0xf9, 0x93, 0xc3, 0xb2,
1248 0xd7, 0x3d, 0x98, 0xd5, 0xda, 0x54, 0xfd, 0x34, 0x43, 0x4c, 0x36,
1249 0xae, 0x54, 0x0b, 0xb4, 0x98, 0x0b, 0x64, 0xbc, 0x00, 0x44, 0x3e,
1250 0xdb, 0xc8, 0x82, 0x4c, 0x45, 0xf1, 0x35, 0x5a, 0xdd, 0xb9, 0xb9,
1251 0xd7, 0x24, 0x79, 0xcd, 0x9d, 0xe2, 0x96, 0xcd, 0x6a, 0xbc, 0xab,
1252 0xaa, 0xd6, 0x54, 0x9a, 0x66, 0xa8, 0xa8, 0xad, 0x46, 0x2a, 0x30,
1253 0x19, 0xd5, 0xa5, 0x02, 0x34, 0xbf, 0x6d, 0x55, 0xd6, 0x73, 0x17,
1254 0x40, 0x3a, 0xad, 0x93, 0x85, 0x20, 0x24, 0x5c, 0xd5, 0x59, 0x6b,
1255 0x2a, 0xa2, 0x9f, 0x06, 0x80, 0xc9, 0x2a, 0x30, 0x2f, 0xf5, 0x62,
1256 0x2f, 0xe8, 0x4e, 0xf0, 0x62, 0x12, 0x70, 0x52, 0x99, 0x9c, 0xf6,
1257 0x55, 0x0b, 0x34, 0x6b, 0x49, 0x53, 0x75, 0x9f, 0xa1, 0xb0, 0x5e,
1258 0xc6, 0x05, 0x55, 0x6d, 0xd2, 0x51, 0x0f, 0xd0, 0xfc, 0xdc, 0x94,
1259 0x7a, 0x63, 0x64, 0x8d, 0x70, 0x25, 0x9d, 0x00, 0x81, 0x1a, 0x81,
1260 0x04, 0x05, 0x28, 0x35, 0x62, 0x72, 0x3b, 0x86, 0x17, 0xd8, 0x84,
1261 0x24, 0x70, 0xdd, 0xd2, 0xc8, 0xe1, 0xda, 0x35, 0x25, 0xf6, 0xa6,
1262 0x9f, 0x81, 0x10, 0xb3, 0x17, 0x42, 0xbb, 0xda, 0x60, 0x92, 0x00,
1263 0x62, 0x0a, 0xdb, 0xb0, 0x06, 0x82, 0x4f, 0x55, 0x11, 0xaa, 0xa8,
1264 0x36, 0x15, 0xc0, 0xc1, 0x27, 0x7d, 0x36, 0x9a, 0x77, 0x34, 0x22,
1265 0x86, 0xa6, 0xda, 0x18, 0xb6, 0xd6, 0x66, 0x16, 0xaa, 0x2a, 0xab,
1266 0x16, 0x80, 0x41, 0x41, 0x3d, 0xc9, 0x4c, 0xbc, 0x46, 0xa8, 0xf1,
1267 0x06, 0xec, 0x4b, 0xe6, 0x9c, 0xfd, 0x62, 0x6c, 0x4e, 0x80, 0x13,
1268 0x67, 0x0a, 0xd0, 0x64, 0xe2, 0x62, 0xb2, 0xae, 0x17, 0x73, 0x98,
1269 0x67, 0x92, 0x10, 0x62, 0x1e, 0xdb, 0x31, 0x8f, 0xed, 0xdd, 0xf2,
1270 0x63, 0x16, 0xa0, 0x67, 0x3d, 0x2e, 0x6a, 0x80, 0x9c, 0x9f, 0xcb,
1271 0x5a, 0x6b, 0xe5, 0x01, 0x29, 0x42, 0xac, 0xd9, 0xdf, 0x72, 0xaa,
1272 0x36, 0xc1, 0x90, 0x49, 0x53, 0x8d, 0x79, 0xf9, 0xc5, 0xc2, 0xb8,
1273 0xa4, 0x22, 0xe3, 0x0a, 0xca, 0x8c, 0x37, 0x00, 0x52, 0xdc, 0x76,
1274 0x7e, 0xc2, 0x63, 0xde, 0x2d, 0xcd, 0xbe, 0xcc, 0x6a, 0x50, 0x85,
1275 0x7e, 0xf7, 0xb5, 0x2e, 0xb7, 0x54, 0x6f, 0x22, 0xc4, 0x64, 0x00,
1276 0xa6, 0xaa, 0x9a, 0x98, 0x07, 0x98, 0xfc, 0xd2, 0x9c, 0xd2, 0xfd,
1277 0x00, 0x47, 0x35, 0xa6, 0x91, 0xe2, 0xff, 0xd9, 0x58, 0xd7, 0x94,
1278 0x2c, 0xf7, 0xa0, 0x1a, 0x69, 0x24, 0xa1, 0xff, 0x08, 0x64, 0x79,
1279 0x73, 0x7a, 0x37, 0xb7, 0x24, 0x4b, 0xa8, 0x9c, 0x2c, 0x8f, 0x20,
1280 0xd9, 0x1e, 0x59, 0x72, 0xd8, 0xb2, 0x1a, 0x38, 0x54, 0x4e, 0x17,
1281 0xe5, 0x73, 0x20, 0x97, 0x87, 0x7a, 0xba, 0x78, 0x88, 0xca, 0x16,
1282 0x53, 0xc7, 0x99, 0x9a, 0xf3, 0xd6, 0x5f, 0xc2, 0x56, 0xc4, 0x84,
1283 0x65, 0x7f, 0xb2, 0xc1, 0x7c, 0xa1, 0x00, 0x37, 0x37, 0xd0, 0x71,
1284 0x1b, 0xe4, 0xa0, 0x00, 0x1c, 0xbf, 0x3c, 0xdc, 0x07, 0x56, 0x7e,
1285 0x70, 0xe3, 0x12, 0xfb, 0xf2, 0x02, 0xa1, 0x4c, 0x8c, 0x4e, 0x06,
1286 0x6e, 0x62, 0x36, 0x80, 0xa6, 0xda, 0x8c, 0x82, 0x24, 0xd4, 0x8e,
1287 0x1b, 0x68, 0x64, 0x97, 0x99, 0x47, 0x9a, 0xdb, 0x7a, 0x37, 0x55,
1288 0xe7, 0x04, 0x38, 0xbb, 0x62, 0xf3, 0x53, 0x8f, 0xf0, 0xf9, 0x5f,
1289 0xdd, 0x01, 0x4f, 0x16, 0x38, 0x4d, 0xef, 0xa9, 0x34, 0xa7, 0x01,
1290 0x60, 0x65, 0x44, 0xd0, 0x0c, 0xec, 0x94, 0x96, 0x8a, 0xd0, 0x60,
1291 0x82, 0x81, 0x43, 0x33, 0x0b, 0xd0, 0x8a, 0x26, 0x34, 0xd3, 0x84,
1292 0x56, 0x28, 0x42, 0x2b, 0x1a, 0x60, 0x86, 0x09, 0x8d, 0x73, 0x68,
1293 0x99, 0x9c, 0xd0, 0xf3, 0x05, 0x68, 0x86, 0x01, 0xdd, 0xe0, 0xd0,
1294 0x0a, 0x05, 0x68, 0xb9, 0x02, 0xb4, 0xa2, 0x01, 0xcd, 0x30, 0xc1,
1295 0x4c, 0x0e, 0x56, 0x28, 0x40, 0x1f, 0x1a, 0x15, 0xe1, 0x4c, 0x0e,
1296 0xa1, 0x6c, 0x0e, 0x7a, 0xae, 0x80, 0x90, 0x61, 0x42, 0x2b, 0x16,
1297 0x11, 0x32, 0x38, 0x34, 0xce, 0x41, 0x99, 0x1c, 0x34, 0x02, 0xc0,
1298 0x05, 0xa8, 0x50, 0x84, 0x66, 0x7f, 0x50, 0x0c, 0x43, 0x30, 0x2e,
1299 0x66, 0x84, 0x0e, 0x00, 0x00, 0x21, 0x9d, 0x4c, 0xb2, 0x00, 0x4b,
1300 0x08, 0x40, 0xd7, 0xc1, 0x43, 0x1a, 0xb8, 0x00, 0x28, 0xa4, 0x83,
1301 0x47, 0xc2, 0x30, 0x09, 0x40, 0x24, 0x8c, 0x3c, 0x63, 0x10, 0xb1,
1302 0x08, 0xf2, 0x21, 0x1d, 0x66, 0x32, 0x8e, 0x42, 0x5b, 0x0a, 0xc5,
1303 0x64, 0x82, 0x8a, 0x1a, 0x81, 0x6b, 0x1a, 0xb8, 0xae, 0xc3, 0x8c,
1304 0x84, 0x60, 0xc6, 0x22, 0x30, 0x35, 0x0d, 0xa6, 0xae, 0xc1, 0x08,
1305 0x87, 0x60, 0xc6, 0xa2, 0x64, 0x84, 0x42, 0x30, 0x35, 0x02, 0x0f,
1306 0xe9, 0x30, 0x23, 0x61, 0x98, 0x1a, 0x2b, 0xe5, 0x09, 0x87, 0x61,
1307 0x42, 0x07, 0x07, 0x83, 0x09, 0x1d, 0x26, 0x58, 0xb9, 0xb0, 0x89,
1308 0x19, 0xa8, 0x2b, 0x15, 0x47, 0xb3, 0x0c, 0x4b, 0x6b, 0x0e, 0x2b,
1309 0x36, 0x85, 0x2f, 0xe4, 0xb8, 0x43, 0x21, 0x97, 0x55, 0x45, 0x70,
1310 0x80, 0x90, 0x90, 0x54, 0x5c, 0x6e, 0x80, 0xe2, 0x0e, 0xeb, 0xb9,
1311 0x07, 0xf0, 0x64, 0xf7, 0xc9, 0x2c, 0xff, 0x23, 0xd9, 0x62, 0xa3,
1312 0xf6, 0x89, 0xe0, 0x5f, 0x1b, 0x2d, 0xad, 0xda, 0xf4, 0x06, 0x83,
1313 0xcc, 0xad, 0x86, 0xce, 0x4b, 0xd5, 0x30, 0x05, 0x30, 0xd9, 0xe7,
1314 0xfd, 0x96, 0xc9, 0x63, 0x9f, 0x4c, 0x42, 0xb9, 0x31, 0x45, 0xc5,
1315 0xe7, 0xfe, 0xbf, 0x52, 0x05, 0x39, 0xd3, 0xbf, 0xd5, 0x67, 0x59,
1316 0xd2, 0x24, 0x26, 0x34, 0x70, 0x30, 0x70, 0x30, 0x18, 0xd0, 0x72,
1317 0x39, 0x84, 0x0a, 0x05, 0xe8, 0xd9, 0x02, 0x42, 0x85, 0x02, 0x42,
1318 0x27, 0x07, 0x45, 0x6c, 0x60, 0x14, 0xc9, 0xf1, 0x34, 0x62, 0x63,
1319 0x69, 0x11, 0xc9, 0xe5, 0x11, 0x1e, 0x4f, 0x23, 0x9c, 0xce, 0x22,
1320 0x92, 0xc9, 0x22, 0x7c, 0xfc, 0x94, 0x88, 0x0f, 0x8e, 0x21, 0x91,
1321 0xc9, 0x22, 0x9a, 0xc9, 0x41, 0x2f, 0x14, 0xa1, 0x1b, 0x86, 0xd0,
1322 0x72, 0x05, 0x68, 0x65, 0x80, 0x69, 0x06, 0x87, 0x66, 0x18, 0x20,
1323 0x93, 0x83, 0x38, 0xaf, 0x86, 0xcd, 0xec, 0x58, 0x73, 0x6b, 0xf1,
1324 0x89, 0x20, 0x34, 0x06, 0xa1, 0x6b, 0x65, 0xe0, 0x95, 0x01, 0x16,
1325 0x0b, 0xc3, 0xd4, 0x75, 0x98, 0x21, 0x9d, 0xcc, 0x58, 0x14, 0x46,
1326 0x3c, 0x86, 0x7c, 0x5b, 0x12, 0x93, 0xf3, 0xe7, 0x51, 0xb6, 0xb5,
1327 0x05, 0xb9, 0x78, 0x04, 0x85, 0xd6, 0x24, 0x0a, 0xb1, 0x18, 0x0a,
1328 0xa9, 0x38, 0xf2, 0x6d, 0x29, 0xca, 0xb5, 0x26, 0x31, 0x79, 0x4e,
1329 0x37, 0x26, 0x13, 0x71, 0xca, 0x47, 0x42, 0x30, 0x23, 0x11, 0x14,
1330 0xa3, 0x61, 0x14, 0xb5, 0x30, 0x8c, 0xd2, 0xab, 0xa3, 0xfc, 0x0a,
1331 0x61, 0xe0, 0x15, 0xb4, 0xcd, 0x2c, 0xf2, 0xc2, 0x52, 0xf4, 0xed,
1332 0xf0, 0x53, 0x71, 0x1b, 0xfd, 0x54, 0x96, 0x53, 0x7e, 0xd3, 0x05,
1333 0x44, 0x32, 0x40, 0xe3, 0x35, 0x6c, 0x23, 0x3c, 0x7e, 0x9d, 0x20,
1334 0x4d, 0x0e, 0x80, 0x23, 0xc8, 0x7f, 0xb6, 0x55, 0x13, 0xd0, 0x64,
1335 0xaa, 0xfd, 0xdd, 0x9a, 0x4f, 0xc8, 0x42, 0x8c, 0xf9, 0xa4, 0xb9,
1336 0x4d, 0x24, 0xb1, 0xad, 0x0c, 0xf8, 0x54, 0x80, 0xc6, 0x2c, 0x6a,
1337 0x8a, 0xcd, 0x98, 0xd3, 0x20, 0xa0, 0xcd, 0xd0, 0x5a, 0x84, 0x02,
1338 0x74, 0xe4, 0x11, 0xce, 0xe4, 0x10, 0xce, 0xe4, 0x10, 0xca, 0x64,
1339 0x11, 0x19, 0x4d, 0x8b, 0x68, 0x09, 0x4a, 0x88, 0xf4, 0x0f, 0x89,
1340 0xc4, 0xde, 0x23, 0x68, 0x1f, 0x1c, 0x46, 0xcb, 0x58, 0x5a, 0x44,
1341 0xc6, 0xd3, 0x88, 0x8e, 0xa6, 0x11, 0xc9, 0x64, 0x11, 0x99, 0xcc,
1342 0x22, 0x94, 0xcb, 0x8b, 0xd0, 0x64, 0x16, 0xa1, 0x7c, 0x11, 0x7a,
1343 0x36, 0x07, 0x1d, 0x67, 0xdf, 0x18, 0x00, 0x8d, 0xc7, 0xa5, 0x00,
1344 0x19, 0x26, 0xc8, 0x30, 0xdd, 0x80, 0x2d, 0x94, 0x00, 0x1b, 0xd2,
1345 0x61, 0x46, 0x23, 0x30, 0xe2, 0x51, 0x14, 0x63, 0x51, 0x14, 0xe3,
1346 0x11, 0x2a, 0x26, 0xe2, 0x28, 0x24, 0x63, 0xc8, 0xb7, 0xb5, 0x20,
1347 0x9f, 0x8a, 0x23, 0xd7, 0xd9, 0x46, 0x99, 0x85, 0x3d, 0x18, 0x59,
1348 0xbe, 0x90, 0xc6, 0x5a, 0x92, 0xc8, 0xb5, 0x24, 0x91, 0x6b, 0x4d,
1349 0x52, 0x2e, 0x19, 0x47, 0x3e, 0x11, 0x43, 0x21, 0x16, 0x41, 0x21,
1350 0x14, 0x45, 0x11, 0x11, 0x14, 0x2a, 0xf0, 0x43, 0x19, 0x39, 0x46,
1351 0xd9, 0x75, 0xe6, 0x16, 0x87, 0x58, 0xf8, 0xaa, 0x2d, 0x2f, 0xc0,
1352 0x08, 0x0f, 0x28, 0xb9, 0x81, 0xc8, 0x94, 0x48, 0xf3, 0x9a, 0xdc,
1353 0x8e, 0x61, 0xdd, 0x0f, 0xb3, 0xe4, 0x23, 0x17, 0x77, 0xdd, 0xab,
1354 0xe6, 0xdb, 0xd5, 0x15, 0xa5, 0xca, 0xa8, 0x4f, 0xde, 0x83, 0xa4,
1355 0xf8, 0xa9, 0x32, 0x7b, 0xf3, 0x09, 0x37, 0x77, 0x4d, 0x15, 0x54,
1356 0xf6, 0x49, 0xab, 0x63, 0x5b, 0x52, 0x4c, 0x9b, 0x5e, 0x37, 0x05,
1357 0x25, 0xcd, 0x72, 0x06, 0x5a, 0x19, 0x56, 0x26, 0x74, 0x18, 0xd0,
1358 0x50, 0x40, 0x28, 0x9d, 0x41, 0x38, 0x9d, 0x43, 0xe4, 0xe4, 0x80,
1359 0x48, 0xee, 0x3b, 0x82, 0xce, 0xfe, 0x21, 0x91, 0x1c, 0x1c, 0x45,
1360 0x62, 0x70, 0x04, 0xc9, 0x5d, 0x87, 0x44, 0xfb, 0x89, 0x53, 0x68,
1361 0x9b, 0xc8, 0x88, 0x48, 0x7a, 0x12, 0xe1, 0xc9, 0x2c, 0x22, 0xb9,
1362 0x02, 0x34, 0x21, 0x02, 0x30, 0x9d, 0xed, 0x16, 0xd2, 0x61, 0xc6,
1363 0xa2, 0x28, 0xb6, 0x24, 0x90, 0x4f, 0xc4, 0xa9, 0xd0, 0xd1, 0x82,
1364 0xc9, 0x95, 0x4b, 0x30, 0x34, 0xbf, 0x9b, 0x26, 0x7a, 0xda, 0x30,
1365 0xd9, 0xd5, 0x89, 0xc9, 0x45, 0xbd, 0x34, 0xbc, 0xfc, 0x1c, 0x1a,
1366 0x4b, 0xc6, 0x91, 0x4f, 0xc6, 0x91, 0x0b, 0x45, 0x51, 0x84, 0x0e,
1367 0x03, 0x7a, 0x19, 0x73, 0x1c, 0x02, 0x66, 0x19, 0x01, 0x46, 0xa5,
1368 0xe8, 0xbb, 0xc1, 0x4c, 0x46, 0x71, 0xc9, 0xac, 0xe3, 0x15, 0x67,
1369 0x7b, 0x26, 0xdc, 0xb8, 0xe4, 0x64, 0x4a, 0x9c, 0x8f, 0x9b, 0xf2,
1370 0x74, 0x8b, 0xb7, 0x79, 0xbe, 0x85, 0x64, 0x80, 0x26, 0xf3, 0x01,
1371 0x37, 0xb9, 0x00, 0xcc, 0x0e, 0x07, 0xcd, 0x07, 0x52, 0x9a, 0x0f,
1372 0xc0, 0x54, 0xf2, 0xaa, 0xc1, 0x6e, 0x4a, 0x65, 0x31, 0x10, 0x74,
1373 0x00, 0x7a, 0x25, 0x2c, 0xcd, 0x60, 0x40, 0x47, 0x01, 0xa1, 0x53,
1374 0x83, 0x48, 0xf5, 0x0f, 0x89, 0xd4, 0xa9, 0x51, 0x24, 0x0f, 0x1f,
1375 0x13, 0xad, 0xaf, 0xec, 0x41, 0xef, 0xf1, 0x01, 0xd1, 0xda, 0x3f,
1376 0x8c, 0xc4, 0xd0, 0x28, 0x12, 0x63, 0x13, 0x22, 0x3a, 0x96, 0x46,
1377 0x64, 0x7c, 0x02, 0x51, 0x11, 0x28, 0xa8, 0xc0, 0x14, 0x2d, 0x16,
1378 0x45, 0xb1, 0xb5, 0xac, 0xe8, 0xda, 0x5b, 0x91, 0xed, 0xe9, 0x40,
1379 0xba, 0xab, 0x83, 0x26, 0x57, 0x2f, 0x45, 0xff, 0x9a, 0xe5, 0x34,
1380 0xd4, 0xdd, 0x8e, 0x74, 0x57, 0x3b, 0xa5, 0x17, 0x74, 0x63, 0x3c,
1381 0x92, 0x44, 0x0e, 0x3a, 0x0c, 0x30, 0x98, 0x65, 0x55, 0x27, 0x60,
1382 0x80, 0xca, 0x08, 0x71, 0x72, 0x7a, 0xeb, 0x81, 0x96, 0xe9, 0x91,
1383 0x5f, 0x65, 0x9d, 0x69, 0x3b, 0x27, 0x53, 0xc2, 0x3d, 0xf5, 0xaa,
1384 0xa4, 0xa9, 0x82, 0x9a, 0x17, 0xd0, 0x54, 0x02, 0xfd, 0x5e, 0x71,
1385 0x2a, 0x3f, 0x20, 0x59, 0x7f, 0x9d, 0xe6, 0xdd, 0x96, 0xfd, 0x00,
1386 0xe7, 0x9c, 0x46, 0x60, 0x65, 0x68, 0x09, 0x68, 0xe5, 0x38, 0x16,
1387 0x81, 0x50, 0x40, 0xb8, 0x50, 0x72, 0xf3, 0xe2, 0x07, 0x8f, 0x89,
1388 0xb6, 0x3f, 0xec, 0x17, 0xbd, 0x47, 0x4e, 0xa2, 0xf5, 0xd8, 0x29,
1389 0xb4, 0x1e, 0xeb, 0x17, 0xa9, 0x13, 0x03, 0x48, 0x1d, 0x38, 0x26,
1390 0xda, 0x47, 0x26, 0x10, 0x17, 0x3c, 0x80, 0x55, 0x60, 0xa7, 0xc7,
1391 0xa2, 0x61, 0x14, 0x17, 0xf6, 0xd2, 0xd8, 0x92, 0x05, 0x18, 0x9b,
1392 0xdf, 0x85, 0xf1, 0x73, 0xba, 0x69, 0x7c, 0x51, 0x0f, 0xc6, 0x96,
1393 0x2d, 0xa4, 0xc1, 0xf5, 0x7d, 0x34, 0xd0, 0xd9, 0x86, 0xc9, 0x64,
1394 0x12, 0x59, 0xc4, 0x90, 0x07, 0x81, 0x97, 0x95, 0x9d, 0x80, 0x09,
1395 0x82, 0x31, 0x03, 0x74, 0x66, 0x1d, 0xf0, 0xaa, 0xe7, 0xd7, 0x4f,
1396 0xe1, 0x09, 0x97, 0xca, 0x0f, 0x3f, 0xb0, 0x89, 0x5a, 0x81, 0xe6,
1397 0x57, 0x3b, 0xe9, 0xa5, 0x9e, 0x34, 0x0f, 0x70, 0xe9, 0x0e, 0xeb,
1398 0x75, 0x1f, 0x80, 0x79, 0x83, 0x8e, 0x55, 0xdc, 0x44, 0x2a, 0xbb,
1399 0x88, 0x0c, 0x45, 0x84, 0x26, 0xc7, 0x10, 0x3f, 0x78, 0x4c, 0x74,
1400 0x1e, 0x3d, 0x85, 0xd6, 0x43, 0xc7, 0x45, 0xdb, 0xc1, 0xe3, 0xe8,
1401 0x78, 0xf9, 0x35, 0xd1, 0xbb, 0xf7, 0x30, 0xe6, 0x0d, 0x8e, 0x8a,
1402 0xf8, 0xc8, 0x18, 0xe2, 0x41, 0xd1, 0x09, 0xec, 0xf5, 0x66, 0xf1,
1403 0x28, 0x0a, 0xf3, 0xda, 0x91, 0x99, 0xdf, 0x45, 0x63, 0x17, 0xaf,
1404 0xc5, 0x89, 0xbe, 0xc5, 0x34, 0xb4, 0x74, 0x3e, 0x8d, 0x2e, 0xea,
1405 0xc5, 0xc8, 0xe2, 0xf9, 0x34, 0xda, 0xdb, 0x83, 0x31, 0x84, 0x51,
1406 0x80, 0x06, 0xa3, 0x1c, 0xb3, 0x03, 0xcc, 0xb2, 0xba, 0x13, 0x8e,
1407 0x10, 0x73, 0x52, 0x5a, 0xa6, 0x0b, 0xa0, 0x0c, 0x5b, 0x9a, 0xe9,
1408 0x92, 0xd7, 0x94, 0x50, 0x70, 0x6e, 0x8a, 0x0d, 0xf0, 0x6e, 0xb8,
1409 0x2b, 0xdc, 0x80, 0x26, 0x0b, 0x33, 0xe6, 0x01, 0x33, 0x27, 0x88,
1410 0x59, 0x27, 0xdd, 0x65, 0x99, 0xd9, 0xd2, 0xbc, 0xf6, 0x31, 0x7d,
1411 0x1c, 0x02, 0x83, 0x06, 0x42, 0xa8, 0xbc, 0x15, 0x87, 0x66, 0x8c,
1412 0x23, 0x3e, 0x38, 0x82, 0xd4, 0x91, 0x53, 0xa2, 0x75, 0xef, 0x61,
1413 0x74, 0xfe, 0xf6, 0x25, 0xb1, 0x64, 0xf7, 0x61, 0xd1, 0xb5, 0xe7,
1414 0xa0, 0xe8, 0x3c, 0x72, 0x12, 0xed, 0x3c, 0x50, 0x5a, 0x81, 0xcd,
1415 0x11, 0x6b, 0x6f, 0x41, 0x66, 0xcd, 0x32, 0x1a, 0x58, 0xb6, 0x10,
1416 0x23, 0x17, 0xaf, 0xa5, 0xa3, 0x17, 0xae, 0xa5, 0x13, 0x4b, 0xe6,
1417 0xd3, 0x68, 0x6f, 0x27, 0xc6, 0x93, 0x6d, 0x48, 0x23, 0x8c, 0x02,
1418 0x38, 0x80, 0x02, 0xc8, 0xe2, 0xc4, 0x72, 0x17, 0x20, 0xf1, 0x4a,
1419 0x35, 0x86, 0x33, 0xac, 0x0c, 0xc9, 0x34, 0xa7, 0x7d, 0x0b, 0x07,
1420 0xf7, 0xd7, 0x2b, 0xbe, 0x66, 0x85, 0x9a, 0x23, 0xd0, 0x54, 0x61,
1421 0xe6, 0xe4, 0xe6, 0xb9, 0xc1, 0x4b, 0xb7, 0xa5, 0x79, 0x2d, 0x3b,
1422 0x41, 0x6f, 0x5a, 0x6f, 0x4d, 0xc5, 0xba, 0x42, 0xe5, 0x38, 0x57,
1423 0x0e, 0xd1, 0xe1, 0x51, 0x24, 0x5f, 0xdd, 0x27, 0xba, 0xb7, 0xed,
1424 0x14, 0x8b, 0x5e, 0x7e, 0x55, 0xf4, 0x6e, 0xdb, 0x81, 0xc5, 0x27,
1425 0x06, 0x44, 0xcb, 0xd8, 0x04, 0xa2, 0xc1, 0x23, 0x1d, 0x58, 0x60,
1426 0x33, 0x2d, 0x1c, 0x86, 0xd1, 0xdb, 0x89, 0xf4, 0x9a, 0xe5, 0xd4,
1427 0x7f, 0xf9, 0x05, 0x74, 0xe4, 0xdc, 0x15, 0x74, 0xf2, 0xb2, 0x73,
1428 0xe9, 0xe8, 0xfc, 0x2e, 0x8c, 0x85, 0x12, 0xc8, 0x42, 0x47, 0x11,
1429 0x26, 0x84, 0x45, 0xc9, 0xb9, 0x29, 0x30, 0x27, 0x68, 0x19, 0x96,
1430 0x65, 0xb7, 0x5f, 0xfb, 0x76, 0x4e, 0x6e, 0xa9, 0xa9, 0xa0, 0xd6,
1431 0xe0, 0x05, 0x34, 0xa7, 0x56, 0xe8, 0x5e, 0x31, 0x32, 0x37, 0x10,
1432 0xe9, 0x36, 0xa0, 0x39, 0x4d, 0x1a, 0x50, 0xd1, 0x56, 0xce, 0x00,
1433 0x64, 0x60, 0x08, 0x97, 0x73, 0x15, 0x11, 0x1a, 0x1b, 0x42, 0xcb,
1434 0xc1, 0xe3, 0xa2, 0x73, 0xfb, 0x2e, 0xcc, 0xff, 0xb7, 0xad, 0x7c,
1435 0xc5, 0xab, 0x07, 0xd1, 0x7d, 0xe8, 0xb8, 0x68, 0x3b, 0x35, 0x84,
1436 0x54, 0xf0, 0xa8, 0x06, 0x16, 0x58, 0x6d, 0x96, 0x8c, 0xa3, 0x70,
1437 0x4e, 0x0f, 0x8d, 0xad, 0x58, 0x8c, 0xc1, 0xcb, 0xcf, 0xa7, 0x43,
1438 0x57, 0x5e, 0x42, 0x07, 0x57, 0x2c, 0xa4, 0xa1, 0x05, 0xdd, 0x18,
1439 0xa5, 0x24, 0x32, 0x30, 0x21, 0x50, 0x28, 0x03, 0x4e, 0x54, 0x41,
1440 0xc9, 0xb0, 0xcd, 0x3b, 0x2d, 0x1b, 0x2e, 0xeb, 0x9d, 0xe0, 0xe8,
1441 0x04, 0x35, 0xaf, 0xd8, 0x9a, 0x2f, 0xd0, 0x54, 0x5d, 0x4c, 0x2f,
1442 0x50, 0x59, 0xa7, 0x90, 0x6d, 0xbe, 0x3a, 0x1f, 0x41, 0x43, 0x08,
1443 0x84, 0x30, 0x04, 0x4c, 0x84, 0xb2, 0xe3, 0x25, 0xf5, 0xf5, 0xd4,
1444 0xf3, 0x62, 0xc5, 0x6f, 0x5e, 0x10, 0xcb, 0x5e, 0xd8, 0x29, 0x16,
1445 0x9e, 0x18, 0x40, 0x4b, 0xd0, 0xec, 0x21, 0xb0, 0xc0, 0x9a, 0x6b,
1446 0x2d, 0x49, 0xe4, 0x56, 0x2e, 0xa1, 0x81, 0xb7, 0x5d, 0x46, 0xfb,
1447 0xae, 0xb8, 0x88, 0x0e, 0x6d, 0xb8, 0x90, 0x0e, 0xce, 0xeb, 0xc4,
1448 0x38, 0xa2, 0xc8, 0x96, 0x01, 0x47, 0x30, 0x7d, 0xc1, 0x55, 0xf4,
1449 0x59, 0x76, 0x02, 0xa0, 0x5b, 0x25, 0x85, 0x6b, 0x4d, 0xa8, 0x0a,
1450 0xd0, 0xbc, 0x5c, 0x4c, 0x27, 0x05, 0x16, 0xb2, 0xfc, 0x7a, 0xcd,
1451 0x4f, 0x2f, 0x97, 0x54, 0x18, 0x21, 0x04, 0x42, 0x1e, 0xd1, 0x3d,
1452 0xfb, 0x45, 0xef, 0xd3, 0xcf, 0xa1, 0xef, 0xa7, 0xbf, 0xe6, 0x6b,
1453 0x77, 0xec, 0x45, 0xef, 0x81, 0xa3, 0xa2, 0x23, 0x00, 0x58, 0x60,
1454 0x5e, 0xa6, 0x31, 0xc0, 0xe4, 0xcd, 0x3d, 0x06, 0x51, 0xe9, 0x33,
1455 0xad, 0xb9, 0x6a, 0x5d, 0xed, 0x48, 0xaf, 0x5a, 0x4a, 0x83, 0x57,
1456 0xbe, 0x81, 0xf6, 0xff, 0xc9, 0x9b, 0xe9, 0xb5, 0x4b, 0xd6, 0xd1,
1457 0x91, 0x68, 0x07, 0xc6, 0x21, 0x60, 0x22, 0x0f, 0xc0, 0xa8, 0x54,
1458 0x12, 0x58, 0xc1, 0x55, 0xb0, 0xcc, 0x5b, 0x7f, 0xed, 0xf3, 0x76,
1459 0xb5, 0x67, 0x3a, 0xb8, 0xa1, 0x6e, 0x1f, 0xde, 0x57, 0x01, 0x4d,
1460 0x36, 0x66, 0xe6, 0x14, 0xbc, 0xd7, 0x5d, 0x60, 0x65, 0x9f, 0xc2,
1461 0x33, 0x96, 0x19, 0x74, 0x44, 0x40, 0xd0, 0x41, 0xc5, 0x71, 0xa4,
1462 0x5e, 0xd8, 0x21, 0x96, 0xfc, 0xe4, 0x19, 0xb1, 0xee, 0x77, 0x2f,
1463 0x8b, 0xa5, 0xcf, 0x6d, 0x17, 0x8b, 0xb3, 0x79, 0x84, 0x82, 0x62,
1464 0x1a, 0x98, 0xac, 0xad, 0x5c, 0x4c, 0xf8, 0xf2, 0xdd, 0x0c, 0xcc,
1465 0xda, 0x73, 0x3e, 0xa6, 0x03, 0x26, 0x79, 0x03, 0xf8, 0xe4, 0x46,
1466 0x8e, 0x83, 0xc7, 0x9d, 0x89, 0xc4, 0x08, 0x78, 0xe8, 0x6e, 0x0d,
1467 0xcb, 0x96, 0x95, 0x8b, 0xd7, 0x0c, 0x92, 0x01, 0xa1, 0x30, 0x70,
1468 0xf3, 0xbd, 0x1c, 0x3b, 0xf7, 0x06, 0x83, 0x96, 0x4f, 0xd9, 0xaa,
1469 0xa5, 0x34, 0xb0, 0xe1, 0x22, 0x3a, 0xf0, 0xd6, 0xcb, 0x68, 0xef,
1470 0x3b, 0xdf, 0x44, 0xaf, 0x75, 0xf6, 0x62, 0x08, 0x0c, 0x05, 0xe4,
1471 0x40, 0x96, 0xfa, 0xd4, 0x82, 0x05, 0x5a, 0xd6, 0xf9, 0xa9, 0x65,
1472 0xc3, 0xf2, 0x6b, 0x38, 0x40, 0xcd, 0x80, 0x7b, 0x33, 0x8f, 0xca,
1473 0x24, 0x0b, 0x34, 0xb7, 0x78, 0x99, 0x55, 0x99, 0xb9, 0x81, 0x2b,
1474 0xec, 0x38, 0x1f, 0x02, 0x43, 0x04, 0x84, 0x0c, 0x92, 0x5b, 0xb7,
1475 0x8b, 0x65, 0x4f, 0x3c, 0x2b, 0xd6, 0x3c, 0xfe, 0xa4, 0xb8, 0x60,
1476 0xe7, 0x1e, 0x31, 0x3f, 0x78, 0x44, 0x02, 0xab, 0x47, 0x3d, 0x3d,
1477 0x74, 0xb7, 0x86, 0x8f, 0x7d, 0x92, 0x80, 0x31, 0x87, 0x0c, 0x09,
1478 0xe0, 0x5f, 0xbf, 0x2b, 0x70, 0xfd, 0xdf, 0x9a, 0x8e, 0xdb, 0xbf,
1479 0xf7, 0x2a, 0xc2, 0x0f, 0xbf, 0xa9, 0x4d, 0xeb, 0x01, 0xab, 0xa5,
1480 0x80, 0x1f, 0x7d, 0x5f, 0xe0, 0xba, 0xbf, 0x31, 0x51, 0x28, 0x06,
1481 0xd7, 0xda, 0xc9, 0xba, 0x3b, 0x90, 0x7e, 0xfb, 0x9b, 0xd8, 0xab,
1482 0x7f, 0x7a, 0x15, 0xed, 0xbc, 0xea, 0x52, 0xda, 0x3d, 0xef, 0x1c,
1483 0x0c, 0xa0, 0x08, 0x8e, 0x3c, 0x04, 0x44, 0x05, 0x5e, 0x05, 0x0b,
1484 0xc8, 0x0a, 0x2e, 0x90, 0x2b, 0xba, 0xc4, 0xd9, 0x3c, 0xdd, 0x4f,
1485 0x19, 0xa0, 0x4d, 0xc5, 0xcc, 0x9c, 0x9a, 0x61, 0xd8, 0x5d, 0xcc,
1486 0xb0, 0xcb, 0x14, 0x01, 0xca, 0x11, 0xb1, 0x08, 0x18, 0x34, 0x68,
1487 0x47, 0x0f, 0x63, 0xfe, 0x4f, 0x9e, 0xe6, 0xe7, 0x7f, 0xe7, 0xc7,
1488 0xe2, 0x8d, 0x5b, 0x5f, 0x16, 0xcb, 0x82, 0x47, 0x21, 0xb0, 0x46,
1489 0x59, 0x6b, 0x12, 0xd8, 0xf6, 0x7d, 0x0d, 0xab, 0x56, 0x11, 0x90,
1490 0xab, 0x56, 0x69, 0x82, 0x01, 0x1b, 0x6e, 0x30, 0xb1, 0x75, 0xfb,
1491 0x4c, 0x95, 0x95, 0x88, 0x03, 0x2f, 0x7e, 0x5f, 0xc3, 0xea, 0x35,
1492 0x0e, 0xdb, 0x45, 0x80, 0x63, 0x47, 0x81, 0xf3, 0xde, 0x67, 0x60,
1493 0x64, 0x3c, 0xb8, 0xc6, 0x32, 0xb6, 0xa0, 0x1b, 0xa3, 0xd7, 0x5c,
1494 0xcd, 0xb6, 0x7f, 0xe8, 0x3d, 0xb4, 0xed, 0xd2, 0x73, 0xe9, 0x00,
1495 0x62, 0x48, 0x23, 0x03, 0x02, 0x9f, 0x01, 0xb3, 0x7c, 0x19, 0x5e,
1496 0x79, 0x17, 0xb8, 0x39, 0xa9, 0x35, 0x57, 0xa8, 0x79, 0x01, 0xcd,
1497 0xad, 0x46, 0x53, 0x77, 0x71, 0x33, 0xad, 0x4a, 0x2c, 0x62, 0x99,
1498 0xc2, 0x20, 0x84, 0x11, 0x05, 0x03, 0x10, 0xfe, 0xfd, 0x0e, 0xb1,
1499 0xfc, 0x5f, 0x1e, 0x11, 0x57, 0x3d, 0xfe, 0xff, 0xf8, 0x1b, 0xc6,
1500 0x26, 0x82, 0x06, 0xac, 0x81, 0x35, 0xc7, 0x36, 0x5c, 0x48, 0xf8,
1501 0xcd, 0xf7, 0x34, 0x90, 0x93, 0xd2, 0x8a, 0x03, 0xcf, 0x6f, 0x13,
1502 0xd8, 0xf0, 0x21, 0x13, 0x45, 0x63, 0x3a, 0xf9, 0xb6, 0x0f, 0x32,
1503 0x7c, 0xe9, 0x7e, 0x06, 0x8c, 0x57, 0x43, 0x10, 0x61, 0xe0, 0xbd,
1504 0x1f, 0x37, 0xf1, 0xa3, 0xa7, 0x03, 0x57, 0xb3, 0x16, 0x7b, 0xf3,
1505 0x1b, 0x68, 0xf7, 0x2d, 0x7f, 0xc1, 0x7e, 0xf5, 0x67, 0x6f, 0xa5,
1506 0x97, 0xc2, 0x29, 0x8c, 0x21, 0x0b, 0xc0, 0x84, 0x61, 0x01, 0x59,
1507 0xde, 0x32, 0x5f, 0x70, 0x50, 0x6a, 0x45, 0x97, 0x78, 0x1a, 0x77,
1508 0x53, 0x68, 0xf6, 0xf6, 0x67, 0x4e, 0xdf, 0x60, 0x3a, 0xc5, 0xcc,
1509 0x42, 0x0e, 0xea, 0x2c, 0x5a, 0x01, 0x5a, 0x04, 0x0c, 0x84, 0xf0,
1510 0x73, 0x2f, 0x8a, 0xb5, 0xff, 0xf8, 0x75, 0xfe, 0x27, 0x3f, 0xff,
1511 0xb5, 0x38, 0x2f, 0x5f, 0x9c, 0x5b, 0x71, 0xb1, 0x68, 0x34, 0x0a,
1512 0xc6, 0x18, 0x4c, 0xd3, 0x44, 0x3e, 0x9f, 0x97, 0xce, 0x2f, 0x84,
1513 0x40, 0x36, 0x9b, 0x6d, 0xca, 0x39, 0xc5, 0xe3, 0x71, 0x44, 0xa3,
1514 0x51, 0x14, 0x8b, 0x45, 0x18, 0x86, 0x01, 0xd3, 0x2c, 0xb9, 0x60,
1515 0x9a, 0x56, 0xea, 0xce, 0x4c, 0xd7, 0x75, 0x70, 0xce, 0x31, 0x39,
1516 0x39, 0xd9, 0x90, 0xe3, 0xa5, 0x52, 0x29, 0x68, 0x9a, 0x36, 0xe3,
1517 0x58, 0xa6, 0x69, 0x82, 0x73, 0x0e, 0x4d, 0xd3, 0xc0, 0x18, 0xab,
1518 0x1c, 0x57, 0xd7, 0x75, 0x64, 0x32, 0x19, 0xa9, 0x6b, 0xe5, 0x65,
1519 0x5f, 0xbc, 0x83, 0xe1, 0xce, 0x5b, 0x19, 0x30, 0xe1, 0xb0, 0x32,
1520 0x09, 0xdc, 0x74, 0x3b, 0xc7, 0xb7, 0x7e, 0x54, 0xa2, 0xdd, 0xc2,
1521 0x1e, 0xe0, 0xc5, 0xc7, 0x75, 0x74, 0x77, 0x39, 0xc4, 0xce, 0x5a,
1522 0x80, 0x6f, 0x7c, 0x8b, 0xe3, 0xa3, 0xf7, 0xf0, 0x80, 0x4c, 0x75,
1523 0xda, 0xb9, 0x2b, 0xe9, 0xd8, 0x2d, 0x37, 0xb2, 0x7f, 0xfb, 0x8b,
1524 0xf7, 0xd0, 0x6f, 0x13, 0xed, 0x18, 0xc6, 0x24, 0x50, 0x6e, 0x08,
1525 0x92, 0x47, 0x49, 0x17, 0xdb, 0x95, 0x9b, 0x75, 0x32, 0x3d, 0x94,
1526 0x9a, 0x2b, 0xd0, 0xbc, 0x2a, 0x02, 0xa6, 0x26, 0x7b, 0xf0, 0x3f,
1527 0x5c, 0x51, 0x63, 0xa5, 0xdf, 0x28, 0x08, 0x11, 0x24, 0xc1, 0xf7,
1528 0xef, 0xc1, 0xd2, 0xbb, 0x37, 0xf3, 0x0f, 0x3c, 0xfa, 0x33, 0xfe,
1529 0x9f, 0xe6, 0x6a, 0x0d, 0xe5, 0x6d, 0xb7, 0xdd, 0x86, 0xdb, 0x6f,
1530 0xbf, 0x1d, 0xe9, 0x74, 0x1a, 0xd7, 0x5f, 0x7f, 0x3d, 0x76, 0xec,
1531 0xd8, 0xe1, 0x99, 0xff, 0xa6, 0x9b, 0x6e, 0xc2, 0x17, 0xbe, 0xf0,
1532 0x05, 0xfc, 0xe0, 0x07, 0x3f, 0xc0, 0x1d, 0x77, 0xdc, 0xd1, 0x94,
1533 0x73, 0xfa, 0xf8, 0xc7, 0x3f, 0x8e, 0x8d, 0x1b, 0x37, 0xa2, 0x50,
1534 0x28, 0xc0, 0x34, 0x4d, 0x68, 0x9a, 0x56, 0x01, 0x8b, 0x69, 0x9a,
1535 0x60, 0x8c, 0x61, 0xcb, 0x96, 0x2d, 0xb8, 0xf9, 0xe6, 0x9b, 0x1b,
1536 0x72, 0xbc, 0x07, 0x1f, 0x7c, 0x10, 0xd7, 0x5e, 0x7b, 0x2d, 0x84,
1537 0x10, 0xe0, 0x9c, 0x83, 0x73, 0x8e, 0x6c, 0x36, 0x0b, 0xd3, 0x34,
1538 0xa1, 0xeb, 0x3a, 0xe2, 0xf1, 0x92, 0x58, 0x67, 0x8c, 0x81, 0x88,
1539 0x70, 0xfd, 0xf5, 0xd7, 0xe3, 0xa9, 0xa7, 0x9e, 0xaa, 0xeb, 0x98,
1540 0xe1, 0x10, 0xf0, 0xfc, 0xf7, 0x35, 0x9c, 0x7f, 0x01, 0x01, 0x19,
1541 0xfb, 0x4a, 0xe0, 0xe4, 0x49, 0xe0, 0x82, 0x6b, 0x0c, 0x9c, 0x1a,
1542 0x06, 0x1e, 0xbc, 0x4b, 0xc3, 0x27, 0x3e, 0x4a, 0xd5, 0xea, 0x2c,
1543 0x0a, 0xec, 0xde, 0x0d, 0xbc, 0xf1, 0x06, 0x03, 0x63, 0x13, 0x01,
1544 0x90, 0x1a, 0x65, 0x6b, 0x97, 0xd3, 0xd1, 0xfb, 0xff, 0x9a, 0x3d,
1545 0xf6, 0xbe, 0x77, 0xd0, 0xef, 0xc0, 0x51, 0x44, 0x1e, 0x26, 0x08,
1546 0x39, 0x8b, 0x52, 0xcb, 0x7b, 0xb8, 0x9f, 0xf6, 0x2f, 0x0b, 0x2a,
1547 0x50, 0x93, 0xed, 0xd8, 0x4f, 0xa6, 0x82, 0x60, 0x5a, 0xb9, 0xe9,
1548 0x60, 0x88, 0xc3, 0xfc, 0xf2, 0x37, 0xf8, 0xbb, 0x2f, 0xbb, 0xce,
1549 0xfc, 0xfb, 0x47, 0x7e, 0xca, 0x37, 0xcc, 0xe5, 0xe6, 0x16, 0xd1,
1550 0x68, 0x14, 0x4b, 0x96, 0x2c, 0xc1, 0xfa, 0xf5, 0xeb, 0xf1, 0xc3,
1551 0x1f, 0xfe, 0x10, 0x8b, 0x16, 0x2d, 0xf2, 0xcc, 0x6f, 0x9a, 0x26,
1552 0x96, 0x2c, 0x59, 0x82, 0x48, 0x24, 0xd2, 0xb4, 0x73, 0xca, 0xe5,
1553 0x72, 0xe8, 0xe9, 0xe9, 0xc1, 0xa2, 0x45, 0x8b, 0xb0, 0x74, 0xe9,
1554 0x52, 0x68, 0x9a, 0x86, 0xf1, 0xf1, 0x71, 0xe4, 0xf3, 0x79, 0xc4,
1555 0xe3, 0x71, 0xf4, 0xf6, 0xf6, 0xa2, 0xb3, 0xb3, 0xb3, 0x61, 0xc7,
1556 0x6b, 0x6b, 0x6b, 0x43, 0x2a, 0x95, 0x42, 0x3e, 0x9f, 0xc7, 0xc8,
1557 0xc8, 0x08, 0x88, 0x08, 0x7d, 0x7d, 0x7d, 0x58, 0xb5, 0x6a, 0x15,
1558 0x96, 0x2f, 0x5f, 0x8e, 0x89, 0x89, 0x09, 0x8c, 0x8f, 0x8f, 0xc3,
1559 0x34, 0x4d, 0xcc, 0x9b, 0x37, 0x0f, 0xd1, 0x68, 0xfd, 0x1f, 0x77,
1560 0x14, 0x8a, 0xc0, 0x27, 0x36, 0x72, 0x14, 0x26, 0xcb, 0x4f, 0xe7,
1561 0x8c, 0x95, 0x40, 0xef, 0x32, 0xe0, 0x96, 0x1b, 0x18, 0x56, 0x2d,
1562 0x25, 0xdc, 0xf4, 0x7e, 0x02, 0x26, 0x1d, 0x5c, 0x4d, 0x0e, 0xdc,
1563 0x72, 0xbf, 0x19, 0xc0, 0xac, 0xc1, 0xf6, 0xea, 0x7e, 0xb1, 0xf0,
1564 0x9a, 0x4f, 0x99, 0x77, 0x7c, 0xe0, 0x53, 0xe6, 0xed, 0x03, 0xc3,
1565 0x68, 0x47, 0x12, 0x26, 0xaa, 0x1b, 0xd7, 0xdb, 0xbf, 0xdf, 0x76,
1566 0xea, 0x93, 0xd0, 0xca, 0x28, 0xcf, 0x9e, 0x4a, 0x65, 0xfa, 0xc2,
1567 0xaf, 0xfe, 0xd4, 0x29, 0x04, 0xe4, 0x0b, 0x08, 0xff, 0xe5, 0xa7,
1568 0xf9, 0xa7, 0x6e, 0xb9, 0x8f, 0xff, 0xd5, 0xe0, 0xa8, 0x68, 0x9d,
1569 0xeb, 0x37, 0xcf, 0xea, 0x36, 0xae, 0x58, 0xb1, 0x02, 0x5b, 0xb6,
1570 0x6c, 0x41, 0x5b, 0x5b, 0x9b, 0x6b, 0xfe, 0xb1, 0xb1, 0xb1, 0x19,
1571 0xbf, 0xcd, 0xb0, 0xe1, 0xe1, 0xe1, 0x2a, 0xc5, 0xb6, 0x76, 0xed,
1572 0x5a, 0xf4, 0xf5, 0xf5, 0x61, 0xf9, 0xf2, 0xe5, 0x58, 0xb1, 0x62,
1573 0x05, 0xee, 0xbc, 0xf3, 0xce, 0x86, 0x1d, 0xef, 0xb3, 0x9f, 0xfd,
1574 0x2c, 0x56, 0xac, 0x58, 0x81, 0xbe, 0xbe, 0x3e, 0xac, 0x5b, 0xb7,
1575 0x0e, 0x9f, 0xf9, 0xcc, 0x67, 0x66, 0xc0, 0xf5, 0x1d, 0xef, 0x78,
1576 0x07, 0x56, 0xaf, 0x5e, 0x8d, 0xbe, 0xbe, 0x3e, 0xac, 0x5c, 0xb9,
1577 0x12, 0x5b, 0xb7, 0x6e, 0x6d, 0xc8, 0x71, 0xb7, 0xfe, 0x5e, 0xe0,
1578 0x8b, 0x5f, 0xe3, 0x40, 0xd2, 0x61, 0x65, 0x1a, 0xb8, 0xf5, 0x46,
1579 0x86, 0x1f, 0xfc, 0x93, 0x86, 0x48, 0xb4, 0xfc, 0xbe, 0xb7, 0xb9,
1580 0xa5, 0xff, 0xfd, 0xeb, 0x1c, 0x4f, 0x6e, 0x0d, 0xe2, 0x66, 0xcd,
1581 0xb2, 0xc7, 0x7e, 0x21, 0x36, 0xbc, 0xe5, 0x83, 0xc6, 0xbd, 0xcf,
1582 0x3d, 0x2f, 0xd6, 0x21, 0x85, 0x02, 0xaa, 0x3f, 0x81, 0x74, 0xeb,
1583 0x65, 0xda, 0xb1, 0x8f, 0x46, 0xd5, 0xae, 0x97, 0xbd, 0x7b, 0xd9,
1584 0xd0, 0x40, 0x06, 0x87, 0xf6, 0xc1, 0x3b, 0xcd, 0x3b, 0xbe, 0xb9,
1585 0x85, 0x5f, 0x1d, 0xdc, 0xae, 0x92, 0xd9, 0x63, 0x41, 0x17, 0x5f,
1586 0x7c, 0x31, 0x1e, 0x7b, 0xec, 0x31, 0xc4, 0x62, 0x31, 0x69, 0x10,
1587 0x36, 0xda, 0xd2, 0xe9, 0xf4, 0x8c, 0xe5, 0x4c, 0x26, 0x53, 0x51,
1588 0x87, 0xa3, 0xa3, 0xa3, 0xd8, 0xbf, 0x7f, 0x3f, 0x8e, 0x1c, 0x39,
1589 0xd2, 0xb0, 0xe3, 0x1d, 0x3a, 0x74, 0x08, 0xc7, 0x8e, 0x1d, 0x43,
1590 0xb1, 0x58, 0x0a, 0x50, 0x15, 0x0a, 0x85, 0xca, 0x3a, 0xce, 0x79,
1591 0x25, 0xae, 0x96, 0xcd, 0x66, 0xb1, 0x6f, 0xdf, 0x3e, 0x8c, 0x8c,
1592 0x8c, 0x34, 0xec, 0xd8, 0xf7, 0x7f, 0x9d, 0x63, 0xdb, 0xb3, 0x40,
1593 0x55, 0x15, 0x94, 0x09, 0xb4, 0xb5, 0x01, 0xeb, 0xd7, 0x96, 0x1d,
1594 0x1c, 0x9b, 0xab, 0xb9, 0x6b, 0x07, 0xb0, 0xf1, 0x2b, 0x41, 0xdc,
1595 0xac, 0xe9, 0x6a, 0xed, 0x00, 0x16, 0xbf, 0xfb, 0x13, 0xe6, 0x5d,
1596 0x5b, 0xb7, 0x8a, 0xf3, 0x10, 0x47, 0x11, 0xee, 0x1d, 0xb4, 0x7a,
1597 0x8d, 0x9a, 0xe6, 0x09, 0x34, 0x99, 0xb1, 0x01, 0xaa, 0xfb, 0x19,
1598 0x8b, 0xc0, 0xf8, 0xbb, 0x2f, 0xf2, 0x0f, 0xff, 0x9f, 0x5f, 0x8a,
1599 0x2b, 0x83, 0xdb, 0xe4, 0x6d, 0x57, 0x5f, 0x7d, 0x35, 0xbe, 0xf1,
1600 0x8d, 0x6f, 0x40, 0xd7, 0xab, 0x7b, 0x41, 0x9f, 0x82, 0x4b, 0x2e,
1601 0x97, 0x6b, 0xaa, 0xcb, 0x69, 0x77, 0x73, 0x67, 0xd3, 0x84, 0xad,
1602 0xa9, 0xfd, 0x54, 0xa5, 0x40, 0x53, 0x14, 0x72, 0x0e, 0xb8, 0x75,
1603 0x93, 0x89, 0x42, 0xd6, 0xc1, 0xf5, 0x34, 0xcb, 0x51, 0x1a, 0xdb,
1604 0xb8, 0xf3, 0x42, 0x00, 0x7f, 0xfd, 0x0f, 0x26, 0xc6, 0xd3, 0xc1,
1605 0xb3, 0x3a, 0x1b, 0x36, 0x38, 0x8a, 0xf6, 0x1b, 0xef, 0xe4, 0x7f,
1606 0x3b, 0xd4, 0x8f, 0x0e, 0x84, 0x2a, 0xdd, 0x74, 0xfb, 0x8d, 0xcc,
1607 0x56, 0xc5, 0x2a, 0xbf, 0xa7, 0xc8, 0x0b, 0x6c, 0x33, 0xd3, 0xc3,
1608 0x30, 0x5e, 0xdb, 0x29, 0xfa, 0x1e, 0xf8, 0x0e, 0xbf, 0x2e, 0xb8,
1609 0x3d, 0xb6, 0x8b, 0x48, 0xa5, 0xcb, 0xb5, 0x69, 0xd3, 0x26, 0xf4,
1610 0xf7, 0xf7, 0x57, 0xd2, 0x6f, 0xb8, 0xe1, 0x06, 0x6c, 0xde, 0xbc,
1611 0xb9, 0x3a, 0xf6, 0x53, 0x56, 0x2f, 0xcd, 0x04, 0xda, 0xd4, 0x39,
1612 0xcd, 0x86, 0x1a, 0x3c, 0x13, 0x6c, 0xdb, 0x0e, 0x81, 0x7f, 0xfa,
1613 0xba, 0x8b, 0xeb, 0x89, 0x6a, 0x57, 0x73, 0xf3, 0xd7, 0x39, 0x7e,
1614 0xf1, 0x6c, 0xe0, 0x6a, 0xce, 0xa6, 0x1d, 0x3c, 0x2e, 0xe6, 0xdf,
1615 0xf3, 0x3f, 0xf8, 0x07, 0x11, 0x82, 0x01, 0xe7, 0x91, 0xd1, 0x7c,
1616 0xcd, 0x2f, 0x86, 0x26, 0xef, 0x7e, 0x86, 0x60, 0x3c, 0xfc, 0x53,
1617 0xf1, 0x16, 0xce, 0xab, 0x87, 0x31, 0x0b, 0x80, 0x56, 0xba, 0x94,
1618 0x5b, 0xb6, 0x6c, 0xc1, 0xb5, 0xd7, 0x5e, 0x3b, 0xc3, 0xdd, 0xbb,
1619 0xf9, 0xe6, 0x9b, 0xb1, 0x69, 0xd3, 0x26, 0xc7, 0xfc, 0xf5, 0x36,
1620 0x5b, 0x50, 0xb1, 0xbe, 0xbe, 0x3e, 0xac, 0x59, 0xb3, 0x06, 0xe7,
1621 0x9f, 0x7f, 0x3e, 0x2e, 0xbd, 0xf4, 0x52, 0xbc, 0xf9, 0xcd, 0x6f,
1622 0xc6, 0xea, 0xd5, 0xab, 0xcf, 0xaa, 0xfb, 0x70, 0xef, 0x43, 0x1c,
1623 0xcf, 0x3d, 0x2b, 0xe0, 0xd9, 0x99, 0x54, 0x04, 0x78, 0xed, 0xf7,
1624 0x02, 0xf7, 0x3c, 0x18, 0xb8, 0x9a, 0xa7, 0xc3, 0x1e, 0x7f, 0x82,
1625 0xbf, 0x65, 0x62, 0x10, 0x1d, 0xd0, 0x2b, 0x83, 0xa3, 0x78, 0x29,
1626 0xb2, 0x2a, 0x5e, 0x79, 0x01, 0xcd, 0x3a, 0xac, 0x94, 0xd7, 0x70,
1627 0x75, 0xe5, 0x40, 0x08, 0x68, 0xcf, 0x21, 0xb1, 0x38, 0xb8, 0x25,
1628 0xd5, 0x16, 0x0e, 0x87, 0x01, 0x00, 0x2d, 0x2d, 0x2d, 0x78, 0xf6,
1629 0xd9, 0x67, 0x71, 0xdd, 0x75, 0xd7, 0xc1, 0x30, 0xa6, 0x5b, 0x74,
1630 0x7e, 0xee, 0x73, 0x9f, 0xc3, 0x2d, 0xb7, 0xdc, 0x52, 0xb5, 0x9d,
1631 0x35, 0x4f, 0xb3, 0xed, 0xd1, 0x47, 0x1f, 0xc5, 0xab, 0xaf, 0xbe,
1632 0x8a, 0xed, 0xdb, 0xb7, 0x63, 0xdb, 0xb6, 0x6d, 0x78, 0xe6, 0x99,
1633 0x67, 0xf0, 0x91, 0x8f, 0x7c, 0xe4, 0xac, 0xba, 0x0f, 0x99, 0x1c,
1634 0xf0, 0xa9, 0x4d, 0x1c, 0xbc, 0xe8, 0x52, 0x2c, 0x18, 0x50, 0x2c,
1635 0x02, 0x7f, 0xf9, 0x79, 0x8e, 0xb1, 0xc0, 0xd5, 0x3c, 0x2d, 0x96,
1636 0xce, 0x22, 0x39, 0x99, 0x45, 0x0c, 0xb0, 0x0c, 0x74, 0x5d, 0xcd,
1637 0x25, 0x57, 0xb1, 0xe5, 0x37, 0x8c, 0x9d, 0xd3, 0x20, 0xa0, 0xce,
1638 0xa3, 0x1e, 0x33, 0x88, 0x05, 0xdd, 0x34, 0xd0, 0xec, 0xb1, 0x16,
1639 0x5f, 0x8f, 0x66, 0x8f, 0x93, 0xfd, 0xfc, 0xe7, 0x3f, 0xc7, 0x87,
1640 0x3f, 0xfc, 0x61, 0x3c, 0xf2, 0xc8, 0x23, 0x95, 0xb4, 0xcd, 0x9b,
1641 0x37, 0x63, 0x62, 0x62, 0x02, 0xdf, 0xfe, 0xf6, 0xb7, 0xab, 0x5c,
1642 0xcf, 0x59, 0x79, 0x33, 0x3e, 0xfe, 0x38, 0x8e, 0x1e, 0x3d, 0x8a,
1643 0x44, 0x22, 0x81, 0x78, 0x3c, 0x8e, 0x54, 0x2a, 0x85, 0xdd, 0xbb,
1644 0x77, 0x9f, 0x75, 0xf7, 0x62, 0xc3, 0x45, 0x04, 0x0a, 0xa1, 0xfa,
1645 0xd3, 0xa6, 0xf2, 0x93, 0xad, 0x85, 0x81, 0xab, 0xaf, 0xa0, 0xaa,
1646 0xcf, 0xa2, 0x02, 0x9b, 0x1d, 0x8b, 0x86, 0x91, 0x8b, 0x85, 0x91,
1647 0xaf, 0xd5, 0x73, 0x54, 0x1d, 0x68, 0xd8, 0x09, 0x6c, 0xa5, 0xc9,
1648 0x84, 0x76, 0xfd, 0xdb, 0xe9, 0xd7, 0x5f, 0xfa, 0x2e, 0x3e, 0x10,
1649 0xdc, 0x16, 0x9b, 0x17, 0xe3, 0xd0, 0x9e, 0xec, 0xd1, 0x47, 0x1f,
1650 0x45, 0x57, 0x57, 0x17, 0xbe, 0xf4, 0xa5, 0x2f, 0x95, 0xde, 0x07,
1651 0x8c, 0xe1, 0xc1, 0x07, 0x1f, 0xc4, 0x89, 0x13, 0x27, 0x66, 0xc4,
1652 0xd9, 0x66, 0xcb, 0x36, 0x6d, 0xda, 0x84, 0x97, 0x5f, 0x7e, 0xf9,
1653 0xac, 0xbe, 0x0f, 0x97, 0xac, 0x27, 0xdc, 0xf7, 0x69, 0x06, 0x2a,
1654 0xba, 0x3f, 0xdd, 0xcc, 0x00, 0xee, 0xbe, 0x95, 0xe1, 0x89, 0x67,
1655 0x05, 0xfe, 0xfd, 0x95, 0x00, 0x6a, 0xb3, 0x6d, 0x57, 0x5f, 0x41,
1656 0xcf, 0xb7, 0x76, 0x61, 0x18, 0xf9, 0xca, 0xd8, 0x9d, 0x5e, 0x83,
1657 0xa4, 0xc0, 0x96, 0xee, 0xdb, 0x6c, 0xc3, 0x6d, 0xc3, 0x6a, 0xb0,
1658 0xe5, 0x10, 0x7a, 0xe3, 0x25, 0xf4, 0x87, 0xeb, 0xfe, 0x33, 0x3d,
1659 0x1d, 0xdc, 0x16, 0xdb, 0x5b, 0xc7, 0xa5, 0x91, 0xe8, 0xe6, 0xcd,
1660 0x9b, 0x71, 0xff, 0xfd, 0xf7, 0x57, 0x96, 0x63, 0xb1, 0x18, 0x1e,
1661 0x7e, 0xf8, 0x61, 0xbc, 0xfb, 0xdd, 0xef, 0x06, 0x30, 0xbb, 0x31,
1662 0xb4, 0x64, 0x32, 0x39, 0xab, 0xd7, 0x24, 0x14, 0x9a, 0xdd, 0xaf,
1663 0xdf, 0x22, 0x61, 0xe0, 0x5f, 0x3e, 0xc7, 0x10, 0x4f, 0xa1, 0xba,
1664 0xbd, 0x99, 0xd5, 0xcc, 0x92, 0x4a, 0x7b, 0xe8, 0x1e, 0x86, 0x54,
1665 0x22, 0x78, 0x76, 0x67, 0xd3, 0xda, 0x52, 0x98, 0xb8, 0xf7, 0x16,
1666 0xed, 0xe1, 0xca, 0x10, 0xcb, 0x70, 0x9c, 0x9c, 0xd8, 0x64, 0x8d,
1667 0x1a, 0xf8, 0x82, 0xac, 0x8a, 0x82, 0x96, 0xf9, 0xe9, 0x6f, 0xa9,
1668 0x04, 0x04, 0x09, 0xe0, 0xab, 0xf7, 0x69, 0xff, 0x7c, 0xe9, 0x7a,
1669 0xda, 0x15, 0xdc, 0x1e, 0x7f, 0xa0, 0x01, 0xc0, 0x5d, 0x77, 0xdd,
1670 0x85, 0xaf, 0x7e, 0xf5, 0xab, 0x95, 0xe5, 0xae, 0xae, 0x2e, 0xdc,
1671 0x77, 0xdf, 0x7d, 0x00, 0x4a, 0xed, 0xb3, 0x9a, 0x65, 0xe2, 0x34,
1672 0xf7, 0x50, 0x68, 0x6d, 0xa6, 0xa1, 0x69, 0x9a, 0x63, 0xf3, 0x95,
1673 0x46, 0xda, 0xad, 0x37, 0x30, 0x5c, 0xbe, 0xc1, 0xe1, 0x6b, 0x00,
1674 0xa7, 0x88, 0x70, 0x16, 0x38, 0xff, 0x12, 0xc2, 0xe7, 0x3e, 0xc2,
1675 0x82, 0x87, 0x77, 0xb6, 0x5e, 0x70, 0x3a, 0x8a, 0x0f, 0xdd, 0xa3,
1676 0x6d, 0x5e, 0xb9, 0x16, 0x07, 0x90, 0x2f, 0x0f, 0x73, 0xe4, 0xdc,
1677 0xdd, 0xb6, 0x80, 0x7b, 0x5c, 0x4b, 0xea, 0xd3, 0x27, 0xe1, 0xf0,
1678 0xeb, 0xd4, 0x75, 0x87, 0x89, 0x22, 0xa8, 0xb5, 0x0d, 0x13, 0x3f,
1679 0x79, 0x48, 0xbb, 0x77, 0xc3, 0x85, 0xb4, 0x33, 0xb8, 0x4d, 0xd3,
1680 0xca, 0xcb, 0xcb, 0x3e, 0xf9, 0xc9, 0x4f, 0xe2, 0x89, 0x27, 0x9e,
1681 0x98, 0xd5, 0x73, 0x9a, 0xfa, 0x08, 0xfd, 0x4c, 0x30, 0x22, 0xaa,
1682 0x6a, 0x46, 0xd2, 0x48, 0xbb, 0x68, 0x2d, 0xe1, 0xde, 0xdb, 0x59,
1683 0xf5, 0xf7, 0x9c, 0x5e, 0xf5, 0x66, 0x69, 0xe0, 0x6f, 0x3e, 0xc6,
1684 0x70, 0xe9, 0xfa, 0xa0, 0x83, 0xe4, 0x66, 0x5b, 0x4b, 0x02, 0x93,
1685 0xdf, 0x7f, 0x40, 0xfb, 0xe2, 0x75, 0xd7, 0xd0, 0xd3, 0x48, 0x23,
1686 0x0a, 0xff, 0x8e, 0x1c, 0xe1, 0xe2, 0x2d, 0x92, 0x4c, 0x2d, 0xa7,
1687 0x7d, 0x08, 0x29, 0xfb, 0x60, 0xa0, 0x33, 0x07, 0x36, 0xc8, 0x82,
1688 0x75, 0x77, 0x61, 0xf8, 0x97, 0xdf, 0xd2, 0x36, 0x7e, 0xfa, 0x26,
1689 0xf6, 0xa3, 0x90, 0x0e, 0x63, 0xae, 0xdf, 0xb0, 0x44, 0x22, 0xe1,
1690 0xe9, 0x66, 0x19, 0x86, 0x81, 0x1b, 0x6f, 0xbc, 0x11, 0x2f, 0xbc,
1691 0xf0, 0xc2, 0xec, 0x3d, 0x44, 0x2d, 0x2d, 0x33, 0x96, 0xed, 0x6d,
1692 0xde, 0x18, 0x63, 0x0d, 0xf9, 0x9e, 0xd2, 0xd5, 0x05, 0xb4, 0xc4,
1693 0x15, 0x19, 0x63, 0x4d, 0x53, 0x68, 0x91, 0x30, 0xf0, 0x3f, 0xff,
1694 0x8e, 0x21, 0xe6, 0xe4, 0x6a, 0x26, 0x80, 0x7f, 0xf8, 0x1a, 0xc7,
1695 0x33, 0xdb, 0x04, 0x10, 0xab, 0x76, 0x3d, 0xf5, 0x68, 0xc9, 0xf5,
1696 0x4c, 0x04, 0x9d, 0x5c, 0x35, 0xcd, 0xae, 0xb8, 0x80, 0x76, 0x3d,
1697 0xf3, 0x5d, 0xed, 0xf3, 0xd7, 0xbc, 0x87, 0x7e, 0x8d, 0x09, 0x84,
1698 0xe1, 0xdd, 0xf7, 0x99, 0x5d, 0x4c, 0x55, 0xb1, 0x8a, 0xf9, 0xb8,
1699 0x9b, 0xc2, 0x05, 0x6e, 0xf6, 0xfe, 0xbc, 0xa7, 0xa1, 0x46, 0x30,
1700 0x90, 0x07, 0x45, 0xc3, 0xc8, 0x3f, 0xf0, 0x79, 0xf6, 0xbf, 0x9e,
1701 0xfe, 0xb6, 0xf6, 0xf7, 0x6f, 0xba, 0x98, 0x5e, 0x9b, 0xd3, 0x6f,
1702 0xa0, 0x32, 0x3c, 0xbc, 0xe2, 0x46, 0x43, 0x43, 0x43, 0x78, 0xff,
1703 0xfb, 0xdf, 0x8f, 0xc3, 0x87, 0x0f, 0xcf, 0x50, 0x2e, 0xcd, 0xb2,
1704 0xd6, 0xd6, 0x99, 0x9f, 0xd8, 0x6e, 0xdc, 0xb8, 0x11, 0xdf, 0xfc,
1705 0xe6, 0x37, 0xf1, 0xe8, 0xa3, 0x8f, 0xe2, 0x67, 0x3f, 0xfb, 0x19,
1706 0x76, 0xee, 0xdc, 0x89, 0x07, 0x1e, 0x78, 0x60, 0x56, 0x54, 0xab,
1707 0xae, 0xeb, 0x95, 0xa6, 0x2d, 0x8d, 0xb6, 0xbb, 0x3f, 0xce, 0x70,
1708 0xf9, 0x9b, 0x1c, 0x5c, 0xcd, 0x30, 0x70, 0x64, 0x5f, 0xa9, 0x6d,
1709 0xda, 0xe7, 0xbf, 0xcc, 0x21, 0x0c, 0x67, 0xd7, 0xf3, 0xa2, 0x37,
1710 0x12, 0xee, 0xfa, 0x58, 0xe0, 0x7a, 0x36, 0xda, 0x3a, 0x5a, 0x90,
1711 0xfe, 0xe2, 0x9d, 0xec, 0x91, 0x5f, 0x3f, 0xac, 0x6d, 0xbc, 0xf0,
1712 0x3c, 0xda, 0x8b, 0x34, 0x42, 0x1e, 0x30, 0x73, 0x1a, 0xf1, 0x09,
1713 0x4e, 0xae, 0xa7, 0xee, 0xa1, 0xce, 0xc8, 0x47, 0xa9, 0x99, 0x98,
1714 0xf9, 0xf9, 0x93, 0x01, 0xeb, 0x97, 0xf1, 0x06, 0x18, 0xd2, 0x88,
1715 0x6c, 0xb8, 0x8c, 0x76, 0xfc, 0xea, 0x3b, 0xda, 0x3f, 0xfe, 0xf0,
1716 0x97, 0xe2, 0x92, 0xfb, 0x1e, 0xe4, 0xef, 0xd9, 0xbe, 0x6b, 0xee,
1717 0xb5, 0x55, 0x8b, 0xc7, 0xe3, 0xe0, 0x9c, 0xfb, 0x2a, 0x9e, 0x43,
1718 0x87, 0x0e, 0xe1, 0x9a, 0x6b, 0xae, 0xc1, 0x93, 0x4f, 0x3e, 0x89,
1719 0xb6, 0xb6, 0xb6, 0xa6, 0xc6, 0xb9, 0xba, 0xba, 0xba, 0x00, 0x94,
1720 0xe2, 0x74, 0x42, 0x08, 0xbc, 0xeb, 0x5d, 0xef, 0xaa, 0xca, 0xf3,
1721 0xca, 0x2b, 0xaf, 0x34, 0xf5, 0x9a, 0x4c, 0x75, 0x25, 0xa4, 0x69,
1722 0x5a, 0xa5, 0xfb, 0xa0, 0x46, 0xda, 0x65, 0xe7, 0x11, 0xee, 0xfc,
1723 0x18, 0xab, 0x86, 0x59, 0x19, 0x68, 0x7f, 0xb7, 0x99, 0x23, 0x97,
1724 0x07, 0x7e, 0xf3, 0xa2, 0xc0, 0x63, 0x3f, 0x16, 0xf8, 0xc0, 0x75,
1725 0x54, 0xdd, 0x77, 0x5a, 0x1a, 0xb8, 0xf3, 0xaf, 0x18, 0x9e, 0xdc,
1726 0x2a, 0xf0, 0xd4, 0xb6, 0xa0, 0xd6, 0xb3, 0xee, 0x17, 0x69, 0x12,
1727 0x99, 0x8f, 0xfe, 0x39, 0x7b, 0xe6, 0xb6, 0x0f, 0xb1, 0x27, 0x16,
1728 0x2d, 0xc1, 0x51, 0x64, 0x21, 0x90, 0x05, 0xa1, 0xba, 0x9b, 0x20,
1729 0xa7, 0x01, 0x52, 0x5c, 0x87, 0xaf, 0xab, 0x88, 0x00, 0x89, 0x0e,
1730 0x1e, 0xed, 0x9d, 0x3c, 0x3a, 0xf5, 0x58, 0xeb, 0xd4, 0xfd, 0xf6,
1731 0x74, 0x8f, 0xb5, 0x0c, 0x61, 0xc4, 0x21, 0xb2, 0xa3, 0x68, 0xff,
1732 0xbf, 0xbf, 0x12, 0x17, 0x7d, 0xed, 0x71, 0x7e, 0xe5, 0x2f, 0xb7,
1733 0x8a, 0xb5, 0x73, 0xe5, 0x26, 0xf6, 0xf5, 0xf5, 0x21, 0x1a, 0x8d,
1734 0xe2, 0xe4, 0xc9, 0x93, 0x18, 0x1a, 0x1a, 0xf2, 0xcd, 0xbf, 0x6c,
1735 0xd9, 0x32, 0x24, 0x12, 0x09, 0x1c, 0x3b, 0x76, 0xac, 0xa1, 0x1f,
1736 0x69, 0x5b, 0x6d, 0xc1, 0x82, 0x05, 0xe8, 0xe9, 0xe9, 0x41, 0x2e,
1737 0x97, 0x83, 0x10, 0xa2, 0xa2, 0x06, 0x85, 0x10, 0xd0, 0x34, 0x0d,
1738 0xd1, 0x68, 0x14, 0x63, 0x63, 0x63, 0xd8, 0xbb, 0x77, 0x6f, 0xd3,
1739 0x8e, 0xdf, 0xd9, 0xd9, 0x89, 0x42, 0xa1, 0x80, 0x68, 0x34, 0x8a,
1740 0x03, 0x07, 0x0e, 0x60, 0x7c, 0xbc, 0x71, 0x7d, 0x5b, 0xc7, 0x22,
1741 0xc0, 0xb6, 0xef, 0x69, 0x38, 0xf7, 0x3c, 0x02, 0xec, 0x5f, 0x75,
1742 0xc5, 0x81, 0x17, 0x9f, 0x17, 0xd8, 0xf0, 0x61, 0x13, 0xf9, 0x72,
1743 0x53, 0xbf, 0xd5, 0x4b, 0x09, 0xcf, 0x3f, 0xae, 0x95, 0x6a, 0x36,
1744 0x8d, 0xea, 0xfc, 0x3b, 0x77, 0x00, 0x97, 0xdd, 0x60, 0x60, 0x32,
1745 0x1b, 0x40, 0xa9, 0x16, 0x5b, 0x7a, 0x0e, 0x06, 0x3f, 0xfa, 0x7e,
1746 0xf6, 0xec, 0x07, 0xde, 0x49, 0xdb, 0x56, 0xac, 0xa6, 0x03, 0xc8,
1747 0x43, 0x94, 0xc7, 0x6a, 0x9f, 0xea, 0xd4, 0x31, 0x6f, 0xfb, 0xad,
1748 0xa5, 0x1b, 0x6e, 0xe9, 0x31, 0x05, 0xdc, 0x46, 0x45, 0x77, 0xea,
1749 0xb9, 0x36, 0x84, 0xe9, 0xce, 0x1e, 0x67, 0x02, 0x4e, 0x43, 0x08,
1750 0x31, 0x08, 0x14, 0x10, 0x7f, 0xe6, 0x39, 0xb1, 0xe6, 0x5f, 0x7f,
1751 0x21, 0x2e, 0xf9, 0xe9, 0xaf, 0xf8, 0xfa, 0xc3, 0x27, 0xd0, 0x11,
1752 0xdc, 0xf2, 0xc0, 0x1a, 0x69, 0xf7, 0xdf, 0xca, 0xf0, 0x5f, 0xef,
1753 0x70, 0xe8, 0xad, 0x96, 0x01, 0x5c, 0x03, 0xde, 0xf6, 0x21, 0x13,
1754 0x4f, 0x3f, 0x3f, 0x53, 0x71, 0x7d, 0xe1, 0x13, 0x0c, 0xf7, 0x7c,
1755 0xd6, 0xa1, 0x0b, 0x6e, 0x00, 0x48, 0x01, 0xff, 0xfc, 0x15, 0x8e,
1756 0xdb, 0xfe, 0x5b, 0xf0, 0x49, 0x94, 0xac, 0x85, 0x74, 0x18, 0x7f,
1757 0x7c, 0x39, 0xed, 0x7e, 0xdf, 0xdb, 0x68, 0xfb, 0xf5, 0xef, 0x64,
1758 0xcf, 0xb7, 0x74, 0x63, 0xa8, 0x0c, 0x32, 0xd3, 0x02, 0xad, 0x82,
1759 0x03, 0xc8, 0xec, 0xa3, 0x40, 0x39, 0x0d, 0x46, 0xec, 0x54, 0x61,
1760 0xc0, 0x55, 0x06, 0x49, 0x71, 0x1a, 0x57, 0xc0, 0x3e, 0x50, 0x4a,
1761 0x18, 0xd5, 0xe3, 0x0b, 0x84, 0xab, 0x96, 0x09, 0x21, 0x44, 0x41,
1762 0xd0, 0xc1, 0x46, 0x4e, 0x62, 0xde, 0x2f, 0x7e, 0x2b, 0xd6, 0x7d,
1763 0xf7, 0xc7, 0xfc, 0xd2, 0xe7, 0x77, 0x88, 0x45, 0x83, 0x23, 0x48,
1764 0x06, 0x8f, 0x42, 0x60, 0xf5, 0xd8, 0x95, 0x6f, 0x20, 0x3c, 0xf3,
1765 0xb0, 0x06, 0x9a, 0x0a, 0x8c, 0x58, 0x2d, 0x09, 0xfc, 0xe4, 0x27,
1766 0x02, 0x7f, 0xfa, 0xa9, 0xea, 0xc6, 0x68, 0x1d, 0xad, 0xc0, 0xcb,
1767 0xff, 0x5b, 0xc7, 0xa2, 0xc5, 0xa8, 0xee, 0x4e, 0x48, 0x03, 0x04,
1768 0x01, 0x6f, 0xf9, 0x2f, 0x26, 0x7e, 0xf3, 0x62, 0xe0, 0x7a, 0x7a,
1769 0x40, 0xcc, 0x3c, 0x6f, 0x15, 0x9d, 0x78, 0xd7, 0x95, 0xf4, 0x87,
1770 0xeb, 0xde, 0x45, 0x2f, 0x9d, 0xb7, 0x86, 0x0e, 0x23, 0x84, 0x5c,
1771 0x79, 0x0c, 0x01, 0x13, 0x33, 0x7b, 0xa2, 0x75, 0x1a, 0xfd, 0xc9,
1772 0x3a, 0xac, 0x9d, 0xdd, 0xfd, 0xf4, 0x1d, 0xca, 0xae, 0x11, 0xe3,
1773 0x72, 0x3a, 0x8d, 0x8a, 0xee, 0x34, 0xa4, 0x9d, 0x8e, 0x99, 0x63,
1774 0x72, 0x96, 0xe6, 0x75, 0x68, 0x88, 0x00, 0x30, 0x11, 0x3e, 0x75,
1775 0x12, 0x9d, 0xbf, 0x78, 0x96, 0xaf, 0xf9, 0xd1, 0x53, 0x62, 0xfd,
1776 0x6f, 0x5e, 0x14, 0xcb, 0x07, 0x86, 0x03, 0xb8, 0x05, 0xa6, 0x66,
1777 0xdd, 0x1d, 0xc0, 0xbf, 0x7f, 0x4f, 0xc7, 0xb2, 0xf5, 0xa8, 0x76,
1778 0x35, 0x75, 0x20, 0x3b, 0x0a, 0x5c, 0xf4, 0x3e, 0x13, 0xbb, 0x0e,
1779 0x3a, 0x43, 0xe9, 0xfa, 0x77, 0x30, 0x7c, 0xef, 0x2b, 0xac, 0x54,
1780 0x74, 0xec, 0x59, 0xa2, 0xc0, 0xc9, 0xbd, 0xc0, 0x45, 0x7f, 0x6e,
1781 0xe0, 0xe4, 0x60, 0x70, 0xad, 0x2b, 0x97, 0x25, 0x8c, 0xe2, 0xfa,
1782 0x95, 0x74, 0xf2, 0xcf, 0xae, 0xa2, 0x9d, 0xef, 0xb9, 0x8a, 0x76,
1783 0x5e, 0xb0, 0x86, 0x8e, 0x21, 0x86, 0x49, 0x14, 0xcb, 0x6e, 0xa5,
1784 0xa8, 0xc0, 0xc9, 0x6b, 0x6c, 0x4e, 0xaf, 0x21, 0xec, 0x7c, 0x07,
1785 0x47, 0x91, 0x01, 0x9a, 0x97, 0xeb, 0xe9, 0x35, 0x3e, 0xa7, 0xcc,
1786 0xc8, 0xe9, 0xd5, 0x69, 0x04, 0x1d, 0x1a, 0x18, 0xa2, 0x00, 0x0c,
1787 0x84, 0x07, 0xfb, 0xd1, 0xbe, 0x73, 0x9f, 0x98, 0xbf, 0xe5, 0x29,
1788 0xb1, 0xee, 0x77, 0xff, 0x21, 0x96, 0xed, 0x3e, 0x28, 0xe6, 0x8d,
1789 0x4e, 0x20, 0x16, 0x3c, 0x3e, 0x81, 0x79, 0xd9, 0xc2, 0x1e, 0xe0,
1790 0x8a, 0x0b, 0x09, 0xf9, 0x3c, 0xaa, 0x6a, 0x2d, 0x49, 0x03, 0x4e,
1791 0x9d, 0x2a, 0xf5, 0x62, 0xeb, 0x66, 0x8c, 0x01, 0x6f, 0xbf, 0x82,
1792 0x10, 0x8e, 0x38, 0x8c, 0x8e, 0x2e, 0x80, 0x48, 0x04, 0xf8, 0xed,
1793 0x4b, 0x02, 0x27, 0x06, 0xe6, 0xee, 0x35, 0x66, 0x0c, 0x7c, 0xc5,
1794 0x62, 0x1a, 0x3a, 0x6f, 0x25, 0x4e, 0xbc, 0xf7, 0x8f, 0xd9, 0xce,
1795 0xcb, 0xcf, 0xa7, 0xc3, 0x7d, 0x0b, 0x31, 0x40, 0x29, 0xa4, 0xcb,
1796 0x5a, 0x4b, 0x40, 0xc0, 0x84, 0xf3, 0xc8, 0xe8, 0x5e, 0xcb, 0x06,
1797 0xdc, 0x07, 0x1a, 0xe6, 0xa8, 0xae, 0xf9, 0x94, 0x1e, 0x39, 0xdd,
1798 0x4b, 0xa5, 0x11, 0xdc, 0x47, 0x50, 0x77, 0x52, 0x6c, 0x4e, 0x80,
1799 0xd3, 0x1d, 0xe6, 0xa7, 0xa7, 0x29, 0xb8, 0x85, 0x40, 0xd0, 0x40,
1800 0xc8, 0x22, 0x76, 0xbc, 0x1f, 0x6d, 0xcf, 0xbc, 0x28, 0x96, 0xff,
1801 0xee, 0x3f, 0xc4, 0xd2, 0xa7, 0x9e, 0x13, 0xcb, 0x0f, 0x1e, 0x17,
1802 0x1d, 0x99, 0x2c, 0xc2, 0x41, 0x11, 0x0e, 0x2c, 0xb0, 0xe6, 0x1a,
1803 0x11, 0xc4, 0xfc, 0x2e, 0x8c, 0xbf, 0x61, 0x1d, 0x1d, 0xfb, 0xa3,
1804 0xcb, 0x68, 0xdf, 0x5b, 0x2f, 0xa5, 0x7d, 0x6b, 0xfb, 0xa8, 0x3f,
1805 0x92, 0x42, 0x1a, 0x04, 0xa3, 0x8c, 0x22, 0x01, 0x5e, 0x71, 0x0b,
1806 0xad, 0xae, 0xa2, 0x15, 0x54, 0x5e, 0xf3, 0x26, 0x66, 0x0e, 0x55,
1807 0x67, 0xb8, 0x80, 0xcc, 0xeb, 0x0b, 0x02, 0xd8, 0x81, 0x26, 0x03,
1808 0x35, 0xaf, 0x81, 0x52, 0x18, 0xaa, 0xfb, 0x04, 0x77, 0x82, 0x9b,
1809 0x66, 0x03, 0x9a, 0xe6, 0xb2, 0xbe, 0x34, 0x4f, 0x60, 0xd0, 0x41,
1810 0x08, 0x43, 0x80, 0xa0, 0x19, 0x63, 0x48, 0x1e, 0x3d, 0x85, 0xb6,
1811 0x5d, 0x07, 0x44, 0xf7, 0x2f, 0x9f, 0x13, 0xcb, 0x5f, 0xfa, 0x83,
1812 0x58, 0xb8, 0x7d, 0x97, 0x98, 0x3f, 0x34, 0x8a, 0xe0, 0xeb, 0xbb,
1813 0xc0, 0x02, 0x6b, 0x40, 0x1c, 0x6c, 0x5d, 0x1f, 0xf5, 0x9f, 0xbb,
1814 0x0a, 0x27, 0xdf, 0x76, 0x19, 0xed, 0xbd, 0x68, 0x1d, 0x1d, 0x5f,
1815 0x3a, 0x9f, 0x86, 0x5b, 0x3b, 0x31, 0x8e, 0x10, 0x0a, 0x15, 0x67,
1816 0x91, 0x57, 0x60, 0x63, 0x8f, 0x73, 0x59, 0x87, 0x9c, 0xf3, 0x9a,
1817 0x4c, 0x38, 0x8f, 0x8e, 0xee, 0x15, 0xfc, 0xb7, 0x36, 0xaa, 0x95,
1818 0x02, 0x9a, 0x9f, 0xeb, 0xe9, 0x56, 0x51, 0xe0, 0xa4, 0xd6, 0x9c,
1819 0x5c, 0x52, 0xcd, 0x03, 0x60, 0x4e, 0x79, 0xaa, 0xf7, 0xc7, 0xca,
1820 0x80, 0xd3, 0x21, 0xc0, 0xa0, 0xa1, 0x80, 0x50, 0xff, 0x49, 0xb4,
1821 0xed, 0x3e, 0x24, 0xba, 0x77, 0x1f, 0x12, 0x5d, 0x3b, 0xf6, 0xa0,
1822 0xe7, 0xb7, 0x2f, 0x89, 0x25, 0x87, 0x4e, 0x88, 0xf6, 0x20, 0x0e,
1823 0x17, 0x58, 0x60, 0xee, 0x96, 0x88, 0xa1, 0xb0, 0xa0, 0x9b, 0xc6,
1824 0x2f, 0x5a, 0x8b, 0xa3, 0x97, 0x9c, 0x4b, 0xc7, 0xd6, 0x2d, 0xa3,
1825 0xc1, 0xe5, 0x8b, 0x30, 0xb0, 0x7a, 0x29, 0x0d, 0xb0, 0x04, 0xb2,
1826 0x20, 0x98, 0x16, 0x05, 0xc6, 0x21, 0xaa, 0xbe, 0x0e, 0x72, 0x02,
1827 0x9a, 0xe9, 0x02, 0x2b, 0x37, 0x70, 0x39, 0xd5, 0x60, 0xba, 0xc1,
1828 0x4c, 0xb8, 0x00, 0x0d, 0x32, 0x40, 0xb3, 0xc2, 0x0c, 0x2e, 0x50,
1829 0xb3, 0xb6, 0x53, 0x23, 0x1b, 0x7c, 0xdc, 0x00, 0xe7, 0x04, 0x2b,
1830 0xdd, 0x25, 0x8f, 0x93, 0x02, 0x9c, 0xd9, 0x2e, 0x8e, 0xc0, 0x2a,
1831 0xa3, 0x85, 0x6a, 0x20, 0x10, 0x18, 0xd2, 0x88, 0x0e, 0x8d, 0x21,
1832 0xf9, 0xda, 0x7e, 0xd1, 0xbd, 0x7d, 0x97, 0x58, 0xb0, 0xe7, 0x30,
1833 0x3a, 0xf7, 0x1d, 0x15, 0x1d, 0xbb, 0x0e, 0x60, 0xde, 0xfe, 0xa3,
1834 0xa2, 0xd3, 0x30, 0x82, 0x9e, 0x75, 0x03, 0x9b, 0x5b, 0xd6, 0xd3,
1835 0x89, 0xf1, 0xb5, 0xcb, 0x69, 0x70, 0xe9, 0x39, 0x18, 0xe9, 0x5b,
1836 0x4c, 0x83, 0x6b, 0x97, 0xd1, 0xa9, 0x4b, 0xd6, 0xe3, 0xd8, 0xfc,
1837 0x79, 0x34, 0x1e, 0x6e, 0xc1, 0x24, 0x34, 0x98, 0x30, 0xcb, 0x8e,
1838 0x63, 0x11, 0x54, 0x9e, 0xe3, 0x36, 0xc8, 0x58, 0xa1, 0xe3, 0xa4,
1839 0xa8, 0x64, 0x61, 0xe7, 0x04, 0x30, 0x2b, 0xc4, 0x4c, 0x9b, 0x1a,
1840 0xf3, 0x85, 0x99, 0x17, 0xd0, 0xbc, 0x54, 0x1a, 0x3c, 0xa0, 0xe6,
1841 0x56, 0x71, 0xc0, 0x24, 0x21, 0xa7, 0x79, 0xc0, 0x4b, 0x43, 0x75,
1842 0x03, 0x5f, 0xa7, 0x63, 0x4c, 0x0f, 0xda, 0xa2, 0x81, 0xca, 0x90,
1843 0x03, 0x08, 0x0c, 0x06, 0xf4, 0xfc, 0x04, 0x62, 0x07, 0x8f, 0x89,
1844 0x8e, 0x63, 0xa7, 0xd0, 0xb6, 0x7d, 0x97, 0xe8, 0x79, 0x79, 0x97,
1845 0x38, 0xe7, 0xf0, 0x71, 0xb4, 0x9d, 0x18, 0x40, 0x6a, 0x60, 0x44,
1846 0x24, 0x86, 0xc7, 0x10, 0x7c, 0xb9, 0x17, 0xd8, 0xeb, 0x5a, 0x71,
1847 0xcd, 0x6b, 0xc7, 0x64, 0x77, 0x07, 0xa5, 0x17, 0xf5, 0x62, 0x6c,
1848 0xe5, 0x62, 0x1a, 0xbc, 0xec, 0x7c, 0x3a, 0xb2, 0x64, 0x01, 0x46,
1849 0x97, 0x2e, 0xa0, 0xa1, 0x8e, 0x79, 0x98, 0x40, 0x08, 0x45, 0x30,
1850 0x98, 0xe0, 0x10, 0x28, 0x80, 0xca, 0xe8, 0x10, 0x1e, 0x50, 0xb1,
1851 0xa7, 0x99, 0x2e, 0x90, 0xf3, 0x83, 0x95, 0x9b, 0x3b, 0xe9, 0x14,
1852 0x23, 0x93, 0xf9, 0xe4, 0xa9, 0xea, 0x63, 0x75, 0x19, 0xa0, 0xc9,
1853 0xb8, 0xa0, 0x32, 0xae, 0xa8, 0x17, 0xe0, 0x9c, 0x94, 0x97, 0xe6,
1854 0x01, 0x33, 0xcd, 0x65, 0xff, 0x4e, 0xc7, 0xa2, 0x19, 0xe9, 0x0c,
1855 0x34, 0x43, 0x0b, 0x0a, 0x68, 0x28, 0x22, 0x54, 0xcc, 0x20, 0x32,
1856 0x9a, 0x46, 0x7c, 0xff, 0x51, 0xd1, 0xf6, 0xda, 0x01, 0xd1, 0x73,
1857 0xa4, 0x1f, 0xad, 0x7b, 0x0e, 0xa2, 0x73, 0xc7, 0x1e, 0xd1, 0x3b,
1858 0x30, 0x22, 0x12, 0x23, 0xe3, 0x88, 0x4d, 0x66, 0x11, 0x9e, 0xcb,
1859 0x03, 0x26, 0x07, 0x76, 0x66, 0x58, 0x38, 0x04, 0xb3, 0xad, 0x05,
1860 0xd9, 0x8e, 0x56, 0xca, 0x2c, 0x3f, 0x07, 0x43, 0xe7, 0xad, 0xa2,
1861 0x53, 0x8b, 0x7a, 0x30, 0xd6, 0xb7, 0x90, 0x86, 0xd6, 0xad, 0xa0,
1862 0xfe, 0xce, 0x36, 0x4c, 0x26, 0x12, 0xc8, 0x21, 0x8c, 0x22, 0x74,
1863 0x18, 0xe0, 0xe5, 0x3a, 0xc7, 0x29, 0x7d, 0x24, 0x66, 0x40, 0xc3,
1864 0x0d, 0x26, 0x5e, 0x30, 0x73, 0x5b, 0x36, 0x5c, 0xb6, 0x35, 0x5d,
1865 0xd2, 0x38, 0xbc, 0xdb, 0x95, 0xf9, 0x7d, 0xee, 0x54, 0xf5, 0xdd,
1866 0xb9, 0x17, 0xd0, 0x64, 0xa0, 0x26, 0x1b, 0x5f, 0x73, 0xab, 0x1d,
1867 0x65, 0x92, 0x80, 0x92, 0xcd, 0xef, 0xb4, 0x6c, 0x3f, 0x7e, 0xf5,
1868 0xe0, 0xa5, 0x54, 0x76, 0x53, 0xa7, 0xab, 0x34, 0x04, 0x08, 0x0c,
1869 0x1c, 0x0c, 0x59, 0x44, 0x26, 0xd2, 0x88, 0x8d, 0xa7, 0x11, 0x1d,
1870 0x1c, 0x11, 0xc9, 0x53, 0xa3, 0x48, 0xec, 0x3d, 0x2c, 0xda, 0x77,
1871 0xec, 0xc1, 0xfc, 0xfe, 0x21, 0x91, 0xea, 0x1f, 0x42, 0x72, 0x78,
1872 0x0c, 0xf1, 0xd1, 0x09, 0x11, 0x1d, 0x9b, 0x40, 0x74, 0x32, 0xa8,
1873 0x79, 0x0d, 0xac, 0x0e, 0x0b, 0xe9, 0x30, 0x5b, 0x52, 0xc8, 0xb5,
1874 0xa7, 0x90, 0x6b, 0x6b, 0xa1, 0x6c, 0x77, 0x3b, 0x26, 0xbb, 0x3b,
1875 0x29, 0xbd, 0x7c, 0x21, 0x06, 0xcf, 0x5f, 0x49, 0xa7, 0xba, 0x3b,
1876 0x91, 0xee, 0x6a, 0xa7, 0x74, 0x47, 0x2b, 0x32, 0x2d, 0x09, 0xe4,
1877 0xf4, 0x04, 0xb2, 0x08, 0xc1, 0x80, 0x28, 0x63, 0xaa, 0x08, 0x4b,
1878 0x0f, 0x85, 0x55, 0xbd, 0x53, 0xcc, 0xec, 0xee, 0x0b, 0x15, 0x55,
1879 0xc6, 0x7d, 0xa0, 0xe6, 0x94, 0xdf, 0xf4, 0xc9, 0xcb, 0x15, 0x00,
1880 0xe6, 0x07, 0x31, 0xaf, 0x1e, 0x6b, 0x21, 0x13, 0x43, 0x73, 0x83,
1881 0x9a, 0x9f, 0x2b, 0xca, 0x7c, 0xe2, 0x6c, 0xcc, 0xa2, 0x98, 0xec,
1882 0xdf, 0x88, 0x92, 0x0f, 0xa0, 0xc8, 0x03, 0x56, 0x32, 0x13, 0xc1,
1883 0x79, 0x24, 0x66, 0xe6, 0x70, 0x7e, 0x33, 0x61, 0x37, 0xed, 0xc4,
1884 0x4e, 0x9f, 0x01, 0xc0, 0x60, 0x42, 0x83, 0x01, 0xcd, 0xcc, 0x23,
1885 0x9c, 0xce, 0x20, 0x92, 0xce, 0x20, 0xb2, 0xff, 0xa8, 0x68, 0x3b,
1886 0x72, 0x12, 0x1d, 0x03, 0xc3, 0x22, 0xd1, 0x3f, 0x82, 0xc4, 0xe1,
1887 0xe3, 0x68, 0xdd, 0x7f, 0x54, 0x74, 0x0e, 0x8f, 0x23, 0x3e, 0x31,
1888 0x29, 0x22, 0x13, 0x93, 0x88, 0xe4, 0xf2, 0xd0, 0x8b, 0x41, 0x0c,
1889 0x6f, 0x4e, 0x19, 0x63, 0x10, 0x91, 0x30, 0x8c, 0x44, 0x0c, 0xf9,
1890 0x96, 0x04, 0x0a, 0x2d, 0x09, 0xca, 0xcf, 0xef, 0xc6, 0xe8, 0xea,
1891 0xa5, 0x34, 0xdc, 0x53, 0x86, 0x54, 0x6f, 0x27, 0x26, 0x56, 0x2e,
1892 0xc6, 0x50, 0x47, 0x3b, 0x65, 0x92, 0x31, 0xe4, 0xa3, 0x31, 0xe4,
1893 0x11, 0x82, 0x01, 0x0d, 0x26, 0x58, 0x39, 0x24, 0x6f, 0x5a, 0x80,
1894 0x55, 0x2a, 0xfa, 0x4e, 0xe0, 0x72, 0xeb, 0xea, 0xcb, 0x9a, 0x66,
1895 0xba, 0xac, 0x93, 0x99, 0x64, 0x20, 0xe8, 0x04, 0x4e, 0xe1, 0x11,
1896 0xe8, 0xf7, 0x82, 0x99, 0x9b, 0x2a, 0x83, 0x4a, 0x0c, 0x4d, 0x05,
1897 0x6c, 0x4e, 0x90, 0x73, 0x82, 0x9b, 0x5b, 0xcc, 0x8d, 0x5c, 0xe0,
1898 0xc3, 0x7c, 0xe2, 0x73, 0xcc, 0x67, 0x3f, 0x4c, 0x11, 0x60, 0x4e,
1899 0xf3, 0x4e, 0xbf, 0xd3, 0xf3, 0xd3, 0x7f, 0x28, 0xbb, 0xb3, 0x62,
1900 0xc6, 0x1a, 0x13, 0x0c, 0x05, 0x84, 0x8a, 0x39, 0x84, 0x33, 0xe5,
1901 0x69, 0x3c, 0x2d, 0x22, 0xe3, 0x69, 0xc4, 0x46, 0xd3, 0x88, 0x0e,
1902 0x8e, 0x20, 0xbe, 0xe7, 0xb0, 0x68, 0xeb, 0x1f, 0x44, 0xdb, 0xc8,
1903 0x04, 0x62, 0xe3, 0x69, 0x11, 0x19, 0x4d, 0x23, 0x3a, 0x32, 0x8a,
1904 0x58, 0xff, 0xb0, 0x48, 0x4c, 0x66, 0x11, 0x2d, 0x14, 0xa1, 0x71,
1905 0x1e, 0xb8, 0xba, 0x67, 0xa2, 0x9a, 0x8a, 0x46, 0x50, 0xec, 0x68,
1906 0xc5, 0x64, 0x6f, 0x27, 0x65, 0x92, 0x09, 0xe4, 0x3a, 0x52, 0xc8,
1907 0xa7, 0x92, 0x94, 0xed, 0x6a, 0xc7, 0xe4, 0xd2, 0x73, 0x30, 0xbc,
1908 0xa8, 0x97, 0x26, 0x5a, 0x93, 0xc8, 0xb7, 0x24, 0x91, 0x6d, 0x4f,
1909 0x51, 0x36, 0x1e, 0x45, 0x21, 0x1e, 0x43, 0x31, 0x16, 0x45, 0x1e,
1910 0x11, 0x14, 0xcb, 0x63, 0x50, 0x8a, 0x8a, 0xc2, 0x32, 0x40, 0x15,
1911 0x50, 0xf1, 0x72, 0x30, 0x5c, 0xb8, 0x16, 0x78, 0x2f, 0x80, 0xc9,
1912 0x40, 0xce, 0x4d, 0xa1, 0x09, 0x9f, 0x65, 0x3f, 0xa5, 0xc5, 0xe1,
1913 0x5d, 0x43, 0x29, 0x5c, 0x80, 0x56, 0x33, 0xc8, 0x6a, 0x01, 0x9a,
1914 0x8c, 0x1b, 0x6a, 0x77, 0x41, 0x9d, 0x54, 0x9b, 0xdb, 0x68, 0xc8,
1915 0xf6, 0x5f, 0xcd, 0x53, 0x39, 0x79, 0x2f, 0x93, 0x4f, 0x1e, 0x92,
1916 0x04, 0x98, 0x1f, 0xd4, 0xbc, 0x46, 0x76, 0x9e, 0x9e, 0xb7, 0x02,
1917 0x6f, 0x7a, 0x2d, 0xcd, 0xd8, 0xa3, 0x00, 0x81, 0x43, 0x03, 0x2f,
1918 0xb9, 0xba, 0x66, 0x16, 0xa1, 0x91, 0x09, 0xc4, 0x26, 0x33, 0x88,
1919 0x8c, 0x4d, 0x8a, 0x48, 0x36, 0x87, 0xf0, 0x78, 0x49, 0xdd, 0x85,
1920 0xc7, 0x26, 0x10, 0x99, 0xc8, 0x88, 0xc8, 0x64, 0x16, 0x91, 0xb1,
1921 0x09, 0x84, 0x73, 0x05, 0x44, 0x4e, 0x0e, 0x88, 0xd8, 0x89, 0x21,
1922 0x24, 0x26, 0x26, 0x91, 0xc8, 0x64, 0xa1, 0xe7, 0x8b, 0xd0, 0x0d,
1923 0x03, 0x7a, 0x26, 0x27, 0xb4, 0x7c, 0x11, 0x9a, 0x61, 0x40, 0xcf,
1924 0x17, 0xa0, 0xcd, 0x75, 0x65, 0x48, 0x04, 0x1e, 0x8b, 0xc0, 0xd4,
1925 0x75, 0x98, 0x61, 0x1d, 0x66, 0x2c, 0x4a, 0x46, 0x38, 0x04, 0x33,
1926 0x1c, 0x82, 0x11, 0x8b, 0xc0, 0x48, 0xc4, 0x91, 0xeb, 0x6c, 0x45,
1927 0x7a, 0x61, 0x0f, 0x65, 0x92, 0x09, 0xe4, 0x53, 0x31, 0xe4, 0x5b,
1928 0x52, 0x28, 0xc4, 0x23, 0x94, 0x6f, 0x4b, 0x21, 0x1f, 0x8b, 0x21,
1929 0x9f, 0x8a, 0xa1, 0x90, 0x88, 0xa3, 0x90, 0x8c, 0x21, 0x9f, 0x4a,
1930 0x50, 0x3e, 0x95, 0x40, 0x36, 0x91, 0x42, 0xbe, 0x7c, 0xf7, 0xcc,
1931 0x72, 0xb0, 0x82, 0x5b, 0x8a, 0xab, 0x70, 0x68, 0x0e, 0x2a, 0x2c,
1932 0xea, 0x4a, 0x78, 0xa8, 0x14, 0xee, 0x31, 0xef, 0xb4, 0xce, 0x0d,
1933 0x6a, 0x7e, 0xeb, 0x4c, 0x87, 0x7d, 0xfb, 0xa9, 0x3d, 0xbf, 0xbc,
1934 0x6e, 0xc7, 0x84, 0xa2, 0x1a, 0x93, 0x82, 0x59, 0xad, 0x40, 0x73,
1935 0x52, 0x6b, 0x7e, 0xb1, 0x35, 0xaf, 0x8a, 0x04, 0x15, 0x90, 0xf8,
1936 0x29, 0x27, 0x59, 0x70, 0x11, 0x54, 0x54, 0x98, 0xf7, 0x70, 0xf4,
1937 0x5e, 0x69, 0xb0, 0x1c, 0xd7, 0xef, 0x1a, 0x4c, 0xc3, 0x0f, 0x15,
1938 0x00, 0xda, 0x8f, 0x3c, 0x55, 0x25, 0x31, 0x95, 0x0f, 0x95, 0x5f,
1939 0xb3, 0xec, 0x02, 0x9b, 0xd0, 0x78, 0x09, 0x5c, 0xba, 0x69, 0x82,
1940 0xe5, 0x8b, 0xe5, 0x79, 0x0e, 0x36, 0x9e, 0x16, 0xe1, 0xe1, 0x31,
1941 0x44, 0xd2, 0x19, 0x44, 0xf3, 0x05, 0x84, 0x27, 0xb3, 0x08, 0x65,
1942 0x72, 0x08, 0x15, 0x0d, 0xa1, 0x15, 0xcb, 0xc0, 0xcb, 0xe4, 0xa0,
1943 0x17, 0x8a, 0xd3, 0xdb, 0x9b, 0x1c, 0x5a, 0x26, 0x07, 0xcd, 0x30,
1944 0xc1, 0x8a, 0x45, 0x30, 0xd3, 0x84, 0x66, 0x72, 0x41, 0x9c, 0x43,
1945 0xe3, 0x02, 0xc4, 0x39, 0x28, 0x93, 0xab, 0x40, 0x92, 0x0a, 0x45,
1946 0x30, 0x93, 0x83, 0x91, 0xf5, 0xa1, 0x23, 0xc0, 0x30, 0xca, 0x2a,
1947 0x93, 0xa6, 0xd5, 0x0d, 0xd9, 0x1e, 0x4c, 0x51, 0x0a, 0x78, 0x73,
1948 0x8d, 0x81, 0x0b, 0x01, 0x8a, 0x84, 0x61, 0x86, 0x43, 0xa5, 0x07,
1949 0x5f, 0xd7, 0xc0, 0x89, 0x20, 0x74, 0x8d, 0x4c, 0x4d, 0x83, 0x28,
1950 0xab, 0x23, 0x33, 0xa4, 0x83, 0xeb, 0x1a, 0x4c, 0x5d, 0x83, 0x19,
1951 0xd2, 0x61, 0xc4, 0xa2, 0x30, 0xe3, 0x51, 0x18, 0xa5, 0x65, 0x32,
1952 0xca, 0x6e, 0x9e, 0x11, 0x8b, 0xa2, 0x10, 0x8b, 0x20, 0xd7, 0x96,
1953 0x42, 0x7e, 0x5e, 0x1b, 0xe5, 0x74, 0x1d, 0xa6, 0xa6, 0x81, 0x47,
1954 0x42, 0x30, 0x43, 0x3a, 0x4c, 0x5d, 0x87, 0xa1, 0x87, 0x60, 0x42,
1955 0x2f, 0x5f, 0xc9, 0x50, 0xe5, 0xb3, 0x76, 0x61, 0x29, 0x56, 0xc2,
1956 0x02, 0x23, 0xaa, 0x68, 0x27, 0x5e, 0x56, 0x55, 0x70, 0x04, 0x94,
1957 0xb5, 0xf0, 0xc2, 0x47, 0x91, 0x78, 0xb9, 0x5e, 0x6e, 0xa0, 0x93,
1958 0x81, 0x9c, 0x4c, 0x7e, 0xd3, 0x07, 0x42, 0xdc, 0x63, 0x5b, 0x2e,
1959 0x09, 0x60, 0xeb, 0x35, 0x00, 0xe4, 0x47, 0x74, 0x92, 0x82, 0x59,
1960 0x3d, 0x40, 0xf3, 0x73, 0x43, 0xfd, 0x62, 0x6d, 0x7e, 0x60, 0x93,
1961 0x55, 0x3f, 0xf5, 0xa4, 0xc9, 0xaa, 0x2e, 0xb7, 0xed, 0xa0, 0x00,
1962 0xb7, 0x5a, 0x26, 0x48, 0xa4, 0xc1, 0x06, 0x43, 0xd8, 0x70, 0x87,
1963 0xaa, 0x34, 0x0d, 0x02, 0x04, 0x61, 0x5b, 0x4f, 0x96, 0xbb, 0x46,
1964 0x0e, 0x8f, 0x10, 0xb3, 0x3c, 0x72, 0xa5, 0x63, 0x09, 0xcb, 0x76,
1965 0xbc, 0x72, 0x0e, 0x02, 0xc2, 0xf1, 0x99, 0x10, 0x96, 0x6d, 0xac,
1966 0xc7, 0x15, 0x2e, 0x4f, 0xd4, 0xd4, 0xde, 0xad, 0xe7, 0x69, 0x3d,
1967 0x03, 0xeb, 0x59, 0x54, 0xbf, 0xbd, 0x85, 0xc3, 0xbc, 0xa8, 0xa8,
1968 0xe0, 0xea, 0xe2, 0x64, 0x45, 0xd1, 0xcc, 0x2d, 0xdd, 0x7a, 0x6c,
1969 0x86, 0xcf, 0xb2, 0x9b, 0xf2, 0xe0, 0x1e, 0xcb, 0x32, 0x70, 0xf3,
1970 0x52, 0x37, 0xdc, 0x07, 0x86, 0xb2, 0x40, 0x14, 0x35, 0x82, 0x4a,
1971 0x48, 0xfe, 0x3f, 0x6e, 0x00, 0x13, 0xb5, 0x42, 0xcc, 0x6a, 0xf5,
1972 0x76, 0xe4, 0x2e, 0x1c, 0x1e, 0x5c, 0xaf, 0xbc, 0x34, 0xe3, 0x01,
1973 0xaf, 0x2e, 0x98, 0x5c, 0x01, 0x76, 0x5e, 0x40, 0xf2, 0x03, 0x24,
1974 0x53, 0x38, 0x06, 0x49, 0x6e, 0x03, 0x49, 0x98, 0xc1, 0x01, 0x8a,
1975 0xa8, 0x01, 0x68, 0xd5, 0xf3, 0xa2, 0x82, 0x03, 0xaf, 0xd1, 0xee,
1976 0xdd, 0xd2, 0xdd, 0x42, 0x08, 0xfe, 0x2f, 0x2f, 0x92, 0x56, 0xf1,
1977 0x2a, 0xcf, 0x93, 0x3d, 0x45, 0xf8, 0x6c, 0xe3, 0xf6, 0x66, 0xf7,
1978 0x6a, 0xbb, 0xe4, 0x35, 0xe0, 0x86, 0x2c, 0xd0, 0x20, 0x51, 0x60,
1979 0x1b, 0x35, 0xf9, 0xb9, 0x6b, 0x2a, 0xca, 0xce, 0x6f, 0x9d, 0x90,
1980 0x3c, 0x0e, 0x57, 0x84, 0x3a, 0xe0, 0xd3, 0xeb, 0x6c, 0x2d, 0x20,
1981 0x6b, 0x14, 0xd0, 0x9c, 0x0e, 0x4e, 0x0e, 0x0f, 0x10, 0x39, 0xcc,
1982 0xab, 0x28, 0x37, 0x2a, 0x4b, 0x62, 0x27, 0x80, 0xa0, 0x06, 0x40,
1983 0xd9, 0x21, 0xa2, 0xba, 0x3d, 0x24, 0xd7, 0xc9, 0xb9, 0x99, 0xb5,
1984 0xc0, 0xcb, 0xbf, 0x52, 0xc6, 0xed, 0x1a, 0x7b, 0x81, 0x8b, 0x3c,
1985 0x94, 0xb6, 0x3b, 0xa8, 0x9a, 0xd7, 0x36, 0x4f, 0xd4, 0x90, 0x26,
1986 0x24, 0xa1, 0x06, 0x05, 0xc0, 0xf9, 0x15, 0x4a, 0x59, 0xd5, 0xd6,
1987 0x0c, 0xc8, 0x09, 0x49, 0x08, 0xd5, 0x02, 0x3f, 0x95, 0xc9, 0xcf,
1988 0x95, 0x94, 0x89, 0x8d, 0xd5, 0x04, 0xb1, 0x66, 0x01, 0x0d, 0x0e,
1989 0xd0, 0xf2, 0x7b, 0x08, 0xad, 0xaa, 0x8e, 0xd9, 0xa0, 0xe8, 0x54,
1990 0x50, 0x99, 0xe5, 0xa2, 0xa9, 0xaa, 0x20, 0xbf, 0xfc, 0x4c, 0x01,
1991 0x40, 0xf5, 0xb8, 0x8d, 0xb2, 0x31, 0xc6, 0x7a, 0x20, 0x26, 0xdb,
1992 0x7e, 0x50, 0x16, 0x70, 0xb2, 0xaa, 0x0d, 0x67, 0x08, 0xd8, 0xbc,
1993 0xd4, 0x9a, 0x0c, 0xe8, 0xbc, 0x54, 0x18, 0x5c, 0x0a, 0xb0, 0x5f,
1994 0x41, 0x56, 0x85, 0x9b, 0x1b, 0x20, 0x4e, 0xd7, 0x04, 0x0f, 0x35,
1995 0x26, 0xe3, 0x3e, 0x0a, 0x09, 0x60, 0xd5, 0xdd, 0x73, 0xa6, 0x3e,
1996 0x4b, 0x0f, 0x20, 0x49, 0x9c, 0x34, 0x97, 0x28, 0x84, 0x5c, 0x52,
1997 0xd1, 0x01, 0xf5, 0xa9, 0x22, 0x26, 0xb1, 0x7f, 0x26, 0x09, 0x2c,
1998 0x28, 0xc2, 0x0c, 0xa8, 0x4f, 0x89, 0xd5, 0x03, 0x31, 0x3f, 0x35,
1999 0x46, 0x0a, 0x95, 0x44, 0xcd, 0x02, 0x99, 0x4c, 0xad, 0x97, 0xac,
2000 0xfb, 0xa9, 0x0a, 0x39, 0x15, 0xe0, 0xd5, 0xa2, 0xda, 0x20, 0x09,
2001 0x34, 0x48, 0xba, 0x7a, 0xb0, 0xb9, 0xa9, 0xa8, 0x11, 0xac, 0x7e,
2002 0x0a, 0x0c, 0xf0, 0x6e, 0xf8, 0xda, 0x14, 0x35, 0x36, 0x9b, 0x40,
2003 0x93, 0x05, 0x9c, 0x70, 0x51, 0x76, 0x76, 0xf5, 0xe6, 0x57, 0xa8,
2004 0x65, 0xd6, 0xcb, 0x42, 0x05, 0x0a, 0x10, 0x83, 0xc7, 0x7a, 0x2f,
2005 0x60, 0xfa, 0x41, 0xcc, 0x69, 0xbd, 0xdf, 0x75, 0x68, 0x96, 0x1a,
2006 0x23, 0xc7, 0x00, 0x7f, 0x73, 0xa0, 0x26, 0x7c, 0x62, 0xb1, 0x4e,
2007 0xeb, 0x55, 0x6a, 0xc5, 0x64, 0x5c, 0x1f, 0x59, 0xf7, 0xb3, 0x56,
2008 0xe8, 0x01, 0xf2, 0xf1, 0x38, 0x59, 0x00, 0xd5, 0x53, 0x71, 0xa1,
2009 0x72, 0x8e, 0xb5, 0x5c, 0xbb, 0xa6, 0x43, 0xec, 0x74, 0x00, 0xcd,
2010 0xaf, 0x32, 0x01, 0x0a, 0x80, 0x53, 0xa9, 0x49, 0xad, 0x25, 0x4d,
2011 0x56, 0x61, 0xa9, 0xc6, 0xb8, 0x64, 0xcf, 0xa1, 0x96, 0x3c, 0x50,
2012 0x58, 0x27, 0x0b, 0xb5, 0x5a, 0xdc, 0x4c, 0x6a, 0xf0, 0xb3, 0x51,
2013 0xab, 0x6a, 0x93, 0x55, 0x70, 0x2a, 0x40, 0x83, 0x42, 0x01, 0xf7,
2014 0xfd, 0x88, 0x5a, 0x41, 0xdd, 0xa9, 0xe6, 0x57, 0x55, 0x92, 0x2a,
2015 0xe7, 0xec, 0x05, 0x2d, 0x71, 0x3a, 0x00, 0x76, 0xa6, 0x00, 0xcd,
2016 0xef, 0x1f, 0x26, 0x8f, 0x87, 0x4a, 0xb6, 0x90, 0xd6, 0xd2, 0x84,
2017 0x64, 0xb6, 0x40, 0xe9, 0x74, 0x7e, 0x8d, 0x70, 0x23, 0x6b, 0x55,
2018 0x65, 0x2a, 0xae, 0xe4, 0x99, 0x08, 0x34, 0x51, 0x07, 0xe0, 0xbc,
2019 0x0a, 0x68, 0x3d, 0xea, 0x4e, 0xa5, 0x22, 0xa2, 0x56, 0xb7, 0xb6,
2020 0x5e, 0xc8, 0xca, 0xfe, 0x3f, 0x2a, 0x0a, 0x6c, 0xd6, 0x21, 0x76,
2021 0xa6, 0x01, 0xad, 0x51, 0x90, 0x73, 0x72, 0x47, 0x48, 0xa1, 0xa0,
2022 0xab, 0xb8, 0x6e, 0x8d, 0xac, 0x61, 0xac, 0x57, 0x71, 0xa9, 0xb4,
2023 0x05, 0x54, 0x75, 0x31, 0x67, 0x13, 0x64, 0x8d, 0x80, 0x9b, 0x0a,
2024 0xd8, 0x54, 0x0b, 0xae, 0x6a, 0x4d, 0xaa, 0xac, 0xda, 0x51, 0x01,
2025 0x4d, 0x23, 0x9a, 0xa3, 0xf8, 0x01, 0x5b, 0x15, 0x5e, 0xa7, 0x15,
2026 0x60, 0xaf, 0x17, 0xa0, 0xa9, 0xb8, 0xa9, 0x4e, 0x17, 0x9f, 0x5c,
2027 0x80, 0xa7, 0x12, 0x2b, 0x52, 0x85, 0x4c, 0xad, 0x79, 0x20, 0x19,
2028 0x17, 0x53, 0xd9, 0x0f, 0x14, 0xf3, 0x9d, 0x2e, 0x35, 0xd6, 0x48,
2029 0xc0, 0xc9, 0x28, 0x37, 0x55, 0xa0, 0xa9, 0xce, 0xd7, 0x0a, 0x42,
2030 0x15, 0x08, 0xaa, 0xba, 0xcc, 0xb2, 0xff, 0xdb, 0x19, 0xad, 0xbc,
2031 0xce, 0x46, 0xa0, 0xd5, 0x73, 0x61, 0x9d, 0xc0, 0xa6, 0x52, 0xc8,
2032 0xeb, 0x89, 0x45, 0xd5, 0x52, 0xc3, 0x28, 0x0b, 0x3e, 0x48, 0xba,
2033 0x90, 0xe4, 0xa2, 0x74, 0xfd, 0x3e, 0x61, 0xf3, 0x7b, 0x21, 0x34,
2034 0x0b, 0x72, 0xc2, 0x63, 0xff, 0x4e, 0x71, 0x56, 0x21, 0xb1, 0xad,
2035 0xf0, 0x51, 0xf9, 0xb5, 0xc6, 0xe1, 0xea, 0x55, 0x74, 0xaa, 0xdb,
2036 0xa9, 0xee, 0xaf, 0x16, 0x25, 0xfb, 0xba, 0x35, 0x1d, 0x67, 0xa7,
2037 0x09, 0xc5, 0x7c, 0xe4, 0xa2, 0x02, 0x65, 0xe1, 0xa7, 0x0a, 0x34,
2038 0x81, 0xe9, 0x1a, 0xd1, 0x7a, 0xd5, 0x94, 0x5a, 0xab, 0xfe, 0xfa,
2039 0xd2, 0x55, 0xd4, 0x9b, 0x6a, 0x01, 0x91, 0xdd, 0x46, 0xf8, 0xe4,
2040 0x57, 0x09, 0x4e, 0xab, 0xaa, 0x3a, 0x55, 0xd7, 0xcc, 0x2f, 0x2e,
2041 0xd7, 0x08, 0xb7, 0xb8, 0x51, 0x69, 0x67, 0x85, 0x9d, 0xad, 0x40,
2042 0x6b, 0x84, 0xb2, 0x13, 0x0d, 0x72, 0xd1, 0xdc, 0xd2, 0xb8, 0x02,
2043 0x50, 0x54, 0xa0, 0xe5, 0xd5, 0xb4, 0xc2, 0x0d, 0x88, 0x02, 0xcd,
2044 0x6b, 0x63, 0x46, 0x0d, 0xbc, 0x27, 0x2a, 0xdb, 0x0b, 0x45, 0xe8,
2045 0xd9, 0x41, 0x59, 0x0b, 0xec, 0x6a, 0x05, 0x22, 0x35, 0x70, 0xbb,
2046 0xd7, 0xa5, 0xab, 0x18, 0x00, 0xed, 0xf4, 0xba, 0xb0, 0x6e, 0x0f,
2047 0x94, 0x4a, 0x1c, 0xaa, 0x19, 0x79, 0x9b, 0x11, 0xd0, 0xa7, 0xd7,
2048 0xf9, 0x7d, 0x13, 0x0d, 0x5c, 0x57, 0x6b, 0x43, 0x5f, 0x55, 0xe5,
2049 0xa8, 0x0a, 0x65, 0x3f, 0xd5, 0x3a, 0x67, 0x2c, 0x00, 0x5a, 0x7d,
2050 0x85, 0x47, 0xc0, 0xff, 0x2b, 0x08, 0x99, 0x36, 0x77, 0x2a, 0x0f,
2051 0x63, 0x33, 0x82, 0xf7, 0xaa, 0xd0, 0xa2, 0x33, 0xec, 0x3e, 0x9c,
2052 0x0e, 0xe0, 0xd5, 0x0a, 0x29, 0xd5, 0xff, 0x81, 0x2b, 0xec, 0x47,
2053 0xcc, 0xf5, 0x42, 0x1a, 0x00, 0xed, 0xf4, 0x14, 0x30, 0x92, 0xdc,
2054 0x0f, 0x29, 0x1e, 0x4f, 0x05, 0x34, 0xcd, 0x00, 0xdd, 0x99, 0x7e,
2055 0x0f, 0x1a, 0x99, 0xcf, 0xad, 0x92, 0x21, 0x70, 0xfd, 0x02, 0xa0,
2056 0x05, 0x10, 0x54, 0xc8, 0x47, 0x0d, 0x2a, 0x30, 0x14, 0x5c, 0xf7,
2057 0xba, 0xf7, 0x11, 0x00, 0xea, 0x0c, 0xb3, 0xff, 0x3f, 0x00, 0x33,
2058 0x7e, 0xb5, 0x01, 0x3c, 0x57, 0x93, 0xe4, 0x00, 0x00, 0x00, 0x00,
2059 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
2060 };
2061
2062 unsigned int nxlogo_png_size = sizeof(nxlogo_png);
2063
2064 static void nx_iperf_send_image(NX_WEB_HTTP_SERVER *server_ptr, UCHAR *img, UINT imgsize);
2065 static void nx_iperf_print_tcp_rx_results(NX_WEB_HTTP_SERVER *server_ptr, NXD_ADDRESS *peer_ip_address);
2066 static void nx_iperf_print_tcp_tx_results(NX_WEB_HTTP_SERVER *server_ptr, NXD_ADDRESS *peer_ip_address);
2067 static void nx_iperf_print_udp_rx_results(NX_WEB_HTTP_SERVER *server_ptr, NXD_ADDRESS *peer_ip_address);
2068 static void nx_iperf_print_udp_tx_results(NX_WEB_HTTP_SERVER *server_ptr, NXD_ADDRESS *peer_ip_address);
2069
2070 void nx_iperf_tcp_rx_test(UCHAR *, ULONG);
2071 void nx_iperf_tcp_tx_test(UCHAR *, ULONG);
2072 void nx_iperf_udp_rx_test(UCHAR *, ULONG);
2073 void nx_iperf_udp_tx_test(UCHAR *, ULONG);
2074
2075 void nx_iperf_tcp_rx_cleanup(void);
2076 void nx_iperf_tcp_tx_cleanup(void);
2077 void nx_iperf_udp_rx_cleanup(void);
2078 void nx_iperf_udp_tx_cleanup(void);
2079
2080 char *nx_iperf_get_ip_addr_string(NXD_ADDRESS *ip_address, UINT *string_length);
2081 void nx_iperf_test_info_parse(ctrl_info *iperf_ctrlInfo_ptr);
2082 void nx_iperf_tcp_rx_connect_received(NX_TCP_SOCKET *socket_ptr, UINT port);
2083 void nx_iperf_tcp_rx_disconnect_received(NX_TCP_SOCKET *socket_ptr);
2084 UINT nx_iperf_authentication_check(struct NX_WEB_HTTP_SERVER_STRUCT *server_ptr, UINT request_type, CHAR *resource, CHAR **name, CHAR **password, CHAR **realm);
2085 UINT nx_iperf_get_notify(NX_WEB_HTTP_SERVER *server_ptr, UINT request_type, CHAR *resource, NX_PACKET *packet_ptr);
2086 void nx_iperf_entry(NX_PACKET_POOL *pool_ptr, NX_IP *ip_ptr, UCHAR *http_stack, ULONG http_stack_size, UCHAR *iperf_stack, ULONG iperf_stack_size);
2087
2088 void nx_iperf_thread_tcp_rx_entry(ULONG thread_input);
2089 void nx_iperf_thread_tcp_tx_entry(ULONG thread_input);
2090 void nx_iperf_thread_udp_tx_entry(ULONG thread_input);
2091 void nx_iperf_thread_udp_rx_entry(ULONG thread_input);
2092
2093 void nx_iperf_udp_client_socket_vlan_priority_set(UCHAR vlan_priority);
2094 void nx_iperf_tcp_client_socket_vlan_priority_set(UCHAR vlan_priority);
2095
nx_iperf_entry(NX_PACKET_POOL * pool_ptr,NX_IP * ip_ptr,UCHAR * http_stack,ULONG http_stack_size,UCHAR * iperf_stack,ULONG iperf_stack_size)2096 void nx_iperf_entry(NX_PACKET_POOL *pool_ptr, NX_IP *ip_ptr, UCHAR *http_stack, ULONG http_stack_size, UCHAR *iperf_stack, ULONG iperf_stack_size)
2097 {
2098 UINT status;
2099
2100 /* Set the iPerf Stack and Size. */
2101 nx_iperf_stack_area = iperf_stack;
2102 nx_iperf_stack_area_size = iperf_stack_size;
2103
2104 /* Set the IP instance and Packet Pool. */
2105 nx_iperf_test_ip = ip_ptr;
2106 nx_iperf_test_pool = pool_ptr;
2107
2108 /* Create a TCP server socket. */
2109 status = nx_tcp_socket_create(nx_iperf_test_ip, &tcp_server_socket, "TCP Server Socket",
2110 NX_IP_NORMAL, NX_FRAGMENT_OKAY, NX_IP_TIME_TO_LIVE, 32 * 1024,
2111 NX_NULL, nx_iperf_tcp_rx_disconnect_received);
2112
2113 /* Check for error. */
2114 if (status)
2115 {
2116 nx_iperf_test_error_counter++;
2117 return;
2118 }
2119
2120 /* Create a TCP client socket. */
2121 status = nx_tcp_socket_create(nx_iperf_test_ip, &tcp_client_socket, "TCP Client Socket",
2122 NX_IP_NORMAL, NX_FRAGMENT_OKAY, NX_IP_TIME_TO_LIVE, 32 * 1024,
2123 NX_NULL, NX_NULL);
2124
2125 /* Check for error. */
2126 if (status)
2127 {
2128 nx_iperf_test_error_counter++;
2129 return;
2130 }
2131
2132 if (tcp_client_socket_vlan_priority != NX_VLAN_PRIORITY_INVALID)
2133 {
2134 nx_tcp_socket_vlan_priority_set(&tcp_client_socket, (UINT)tcp_client_socket_vlan_priority);
2135 }
2136
2137 /* Create a UDP server socket. */
2138 status = nx_udp_socket_create(nx_iperf_test_ip, &udp_server_socket, "UDP Server Socket", NX_IP_NORMAL, NX_FRAGMENT_OKAY, 0x80, 5);
2139
2140 /* Check status. */
2141 if (status)
2142 {
2143 nx_iperf_test_error_counter++;
2144 return;
2145 }
2146
2147 /* Create a UDP client socket. */
2148 status = nx_udp_socket_create(nx_iperf_test_ip, &udp_client_socket, "UDP Client Socket", NX_IP_NORMAL, NX_FRAGMENT_OKAY, 0x80, 5);
2149
2150 /* Check status. */
2151 if (status)
2152 {
2153 nx_iperf_test_error_counter++;
2154 return;
2155 }
2156
2157 if (udp_client_socket_vlan_priority != NX_VLAN_PRIORITY_INVALID)
2158 {
2159 nx_udp_socket_vlan_priority_set(&udp_client_socket, (UINT)udp_client_socket_vlan_priority);
2160 }
2161
2162 /* Create the HTTP Server. */
2163 status = nx_web_http_server_create(&nx_iperf_web_server, "My HTTP Server", ip_ptr, NX_WEB_HTTP_SERVER_PORT, &nx_iperf_ram_disk, http_stack, http_stack_size, pool_ptr, nx_iperf_authentication_check, nx_iperf_get_notify);
2164
2165 /* Check the status. */
2166 if (status)
2167 {
2168
2169 /* Update the error counter and return. */
2170 nx_iperf_test_error_counter++;
2171 return;
2172 }
2173
2174 /* Start the HTTP Server. */
2175 status = nx_web_http_server_start(&nx_iperf_web_server);
2176
2177 /* Check the status. */
2178 if (status)
2179 {
2180
2181 /* Update the error counter and return. */
2182 nx_iperf_test_error_counter++;
2183 return;
2184 }
2185 }
2186
nx_iperf_authentication_check(struct NX_WEB_HTTP_SERVER_STRUCT * server_ptr,UINT request_type,CHAR * resource,CHAR ** name,CHAR ** password,CHAR ** realm)2187 UINT nx_iperf_authentication_check(struct NX_WEB_HTTP_SERVER_STRUCT *server_ptr, UINT request_type, CHAR *resource, CHAR **name, CHAR **password, CHAR **realm)
2188 {
2189
2190
2191 #ifdef NX_IPERF_AUTH_ENABLE
2192
2193 NX_PARAMETER_NOT_USED(server_ptr);
2194 NX_PARAMETER_NOT_USED(request_type);
2195 NX_PARAMETER_NOT_USED(resource);
2196 *name = "PlaceholderName";
2197 *password = "PlaceholderPassword";
2198 *realm = "test.htm";
2199
2200 return(NX_WEB_HTTP_BASIC_AUTHENTICATE);
2201 #else
2202 NX_PARAMETER_NOT_USED(server_ptr);
2203 NX_PARAMETER_NOT_USED(request_type);
2204 NX_PARAMETER_NOT_USED(resource);
2205 NX_PARAMETER_NOT_USED(name);
2206 NX_PARAMETER_NOT_USED(password);
2207 NX_PARAMETER_NOT_USED(realm);
2208
2209 return(NX_SUCCESS);
2210 #endif
2211 }
2212
2213 static CHAR device_ip_addr_string[40];
nx_iperf_get_ip_addr_string(NXD_ADDRESS * ip_address,UINT * string_length)2214 char *nx_iperf_get_ip_addr_string(NXD_ADDRESS *ip_address, UINT *string_length)
2215 {
2216 UINT length = 0;
2217 #ifdef FEATURE_NX_IPV6
2218 UINT i;
2219 #endif
2220
2221 memset(device_ip_addr_string, 0, sizeof(device_ip_addr_string));
2222
2223 #ifdef FEATURE_NX_IPV6
2224 if (ip_address -> nxd_ip_version == NX_IP_VERSION_V6)
2225 {
2226 for (i = 0; i < 4; i ++)
2227 {
2228 length += _nx_utility_uint_to_string((UINT)ip_address -> nxd_ip_address.v6[i] >> 16, 16, &device_ip_addr_string[length], sizeof(device_ip_addr_string) - length);
2229 device_ip_addr_string[length++] = ':';
2230 length += _nx_utility_uint_to_string((UINT)ip_address -> nxd_ip_address.v6[i] & 0xFFFF, 16, &device_ip_addr_string[length], sizeof(device_ip_addr_string) - length);
2231 if (i != 3)
2232 {
2233 device_ip_addr_string[length++] = ':';
2234 }
2235 }
2236 }
2237 else
2238 #endif
2239 {
2240 #ifndef NX_DISABLE_IPV4
2241 length = _nx_utility_uint_to_string(ip_address -> nxd_ip_address.v4 >> 24, 10, device_ip_addr_string, sizeof(device_ip_addr_string) - length);
2242 device_ip_addr_string[length++] = '.';
2243 length += _nx_utility_uint_to_string(((ip_address -> nxd_ip_address.v4 >> 16) & 0xFF), 10, &device_ip_addr_string[length], sizeof(device_ip_addr_string) - length);
2244 device_ip_addr_string[length++] = '.';
2245 length += _nx_utility_uint_to_string(((ip_address -> nxd_ip_address.v4 >> 8) & 0xFF), 10, &device_ip_addr_string[length], sizeof(device_ip_addr_string) - length);
2246 device_ip_addr_string[length++] = '.';
2247 length += _nx_utility_uint_to_string((ip_address -> nxd_ip_address.v4 & 0xFF), 10, &device_ip_addr_string[length], sizeof(device_ip_addr_string) - length);
2248 #endif
2249 }
2250
2251 *string_length = length;
2252 return device_ip_addr_string;
2253 }
2254
2255 /* This function takes the token/value pair, and stores the information in the ctrl_info_ptr. */
2256 /* For example, a token/value pair can be: "TestType"="TC_Rx", and the ctrl_info_ptr stores the information. */
nx_iperf_check_token_value(char * token,char * value_ptr,ctrl_info * ctrl_info_ptr)2257 static void nx_iperf_check_token_value(char *token, char *value_ptr, ctrl_info *ctrl_info_ptr)
2258 {
2259 UINT val;
2260 UINT i;
2261 UINT token_length = 0;
2262 UINT value_length = 0;
2263 UINT status;
2264
2265 /* Check string length of token. */
2266 status = _nx_utility_string_length_check(token, &token_length, NX_MAX_STRING_LENGTH);
2267 if (status)
2268 {
2269 return;
2270 }
2271
2272 /* Check string length of value. */
2273 if (value_ptr)
2274 {
2275 status = _nx_utility_string_length_check(value_ptr, &value_length, NX_MAX_STRING_LENGTH);
2276 if (status)
2277 {
2278 return;
2279 }
2280 }
2281
2282 /* Check for name. */
2283 if ((token_length == sizeof("TestType") - 1 ) &&
2284 (memcmp(token, "TestType", token_length) == 0))
2285 {
2286 /* Check for value. */
2287 ctrl_info_ptr -> ctrl_sign = UNKNOWN_TEST;
2288 if (value_ptr)
2289 {
2290 if ((value_length == sizeof(TCP_Rx) - 1 ) &&
2291 (memcmp(value_ptr, TCP_Rx, value_length) == 0))
2292 {
2293 ctrl_info_ptr -> ctrl_sign = TCP_RX_START;
2294 }
2295 else if ((value_length == sizeof(TCP_Tx) - 1 ) &&
2296 (memcmp(value_ptr, TCP_Tx, value_length) == 0))
2297 {
2298 ctrl_info_ptr -> ctrl_sign = TCP_TX_START;
2299 }
2300 else if ((value_length == sizeof(UDP_Rx) - 1 ) &&
2301 (memcmp(value_ptr, UDP_Rx, value_length) == 0))
2302 {
2303 ctrl_info_ptr -> ctrl_sign = UDP_RX_START;
2304 }
2305 else if ((value_length == sizeof(UDP_Tx) - 1 ) &&
2306 (memcmp(value_ptr, UDP_Tx, value_length) == 0))
2307 {
2308 ctrl_info_ptr -> ctrl_sign = UDP_TX_START;
2309 }
2310 }
2311 }
2312 else if ((token_length == (sizeof("ip") - 1)) &&
2313 (memcmp(token, "ip", token_length) == 0))
2314 {
2315 char *ptr = value_ptr;
2316 int colon_sum, colon_count;
2317 ctrl_info_ptr -> ip = 0;
2318 val = 0;
2319 colon_sum = 0;
2320 colon_count = 0;
2321 if (value_ptr == 0)
2322 {
2323 ctrl_info_ptr -> version = NX_IP_VERSION_V4;
2324 }
2325 while (ptr && (*ptr != 0))
2326 {
2327 if (*ptr == '.')
2328 {
2329 ctrl_info_ptr -> version = NX_IP_VERSION_V4;
2330 while (value_ptr && (*value_ptr != 0))
2331 {
2332 if (*value_ptr == '.')
2333 {
2334 ctrl_info_ptr -> ip = (ctrl_info_ptr -> ip << 8) + val;
2335 val = 0;
2336 }
2337 else
2338 {
2339 val = val * 10 + ((UINT)(*value_ptr - '0'));
2340 }
2341 value_ptr++;
2342 }
2343 ctrl_info_ptr -> ip = (ctrl_info_ptr -> ip << 8) + val;
2344 break;
2345 }
2346 else if (*ptr == '%')
2347 {
2348 if ((*(++ptr) == '3') && (*(++ptr) == 'A'))
2349 {
2350 ctrl_info_ptr -> version = NX_IP_VERSION_V6;
2351 colon_sum++;
2352 }
2353 }
2354 ptr++;
2355 }
2356 while (value_ptr && (*value_ptr != 0) && (colon_sum != 0))
2357 {
2358 if (*value_ptr == '%')
2359 {
2360 if ((*(++value_ptr) == '3') && (*(++value_ptr) == 'A'))
2361 {
2362 ctrl_info_ptr -> ipv6[colon_count / 2] = (ctrl_info_ptr -> ipv6[colon_count / 2] << 16) + val;
2363 colon_count++;
2364
2365 if (*(value_ptr + 1) == '%')
2366 {
2367 value_ptr++;
2368 if ((*(++value_ptr) == '3') && (*(++value_ptr) == 'A'))
2369 {
2370 for (i = 0; i <= (UINT)(7 - colon_sum); i++)
2371 {
2372 ctrl_info_ptr -> ipv6[colon_count / 2] = ctrl_info_ptr -> ipv6[colon_count / 2] << 16;
2373 colon_count++;
2374 }
2375 }
2376 }
2377 val = 0;
2378 }
2379 }
2380 else
2381 {
2382 if (*value_ptr >= '0' && *value_ptr <= '9')
2383 {
2384 val = val * 16 + ((UINT)(*value_ptr - '0'));
2385 }
2386 else if (*value_ptr >= 'a' && *value_ptr <= 'f')
2387 {
2388 val = val * 16 + ((UINT)(*value_ptr - 'a')) + 10;
2389 }
2390 else if (*value_ptr >= 'A' && *value_ptr <= 'F')
2391 {
2392 val = val * 16 + ((UINT)(*value_ptr - 'A')) + 10;
2393 }
2394 }
2395 value_ptr++;
2396 }
2397 if (ctrl_info_ptr -> version == NX_IP_VERSION_V6)
2398 {
2399 ctrl_info_ptr -> ipv6[3] = (ctrl_info_ptr -> ipv6[3] << 16) + val;
2400 }
2401 }
2402 else if ((token_length == (sizeof("test_time") - 1)) &&
2403 (memcmp(token, "test_time", token_length) == 0))
2404 {
2405 ctrl_info_ptr -> TestTime = 0;
2406 while (value_ptr && (*value_ptr != 0))
2407 {
2408 ctrl_info_ptr -> TestTime = ctrl_info_ptr -> TestTime * 10 + ((UINT)(*value_ptr - '0'));
2409 value_ptr++;
2410 }
2411 ctrl_info_ptr -> TestTime = ctrl_info_ptr -> TestTime * NX_IP_PERIODIC_RATE;
2412 }
2413 else if ((token_length == (sizeof("rate") - 1)) &&
2414 (memcmp(token, "rate", token_length) == 0))
2415 {
2416 ctrl_info_ptr -> Rate = 0;
2417 while (value_ptr && (*value_ptr != 0))
2418 {
2419 ctrl_info_ptr -> Rate = ctrl_info_ptr -> Rate * 10 + ((UINT)(*value_ptr - '0'));
2420 value_ptr++;
2421 }
2422 }
2423 else if ((token_length == (sizeof("size") - 1)) &&
2424 (memcmp(token, "size", token_length) == 0))
2425 {
2426 ctrl_info_ptr -> PacketSize = 0;
2427 while (value_ptr && (*value_ptr != 0))
2428 {
2429 ctrl_info_ptr -> PacketSize = ctrl_info_ptr -> PacketSize * 10 + ((UINT)(*value_ptr - '0'));
2430 value_ptr++;
2431 }
2432 }
2433 else if ((token_length == (sizeof("port") - 1)) &&
2434 (memcmp(token, "port", token_length) == 0))
2435 {
2436 ctrl_info_ptr -> port = 0;
2437 while (value_ptr && (*value_ptr != 0))
2438 {
2439 ctrl_info_ptr -> port = ctrl_info_ptr -> port * 10 + ((UINT)(*value_ptr - '0'));
2440 value_ptr++;
2441 }
2442 }
2443 }
2444
2445 /* This function parses the incoming HTTP command line. For each token/value pair, it
2446 invokes the nx_iperf_check_token_value routine to parse the values. */
nx_iperf_parse_command(NX_PACKET * packet_ptr,ctrl_info * ctrl_info_ptr)2447 static void nx_iperf_parse_command(NX_PACKET *packet_ptr, ctrl_info *ctrl_info_ptr)
2448 {
2449 UCHAR *cmd_string = packet_ptr -> nx_packet_prepend_ptr;
2450 UCHAR *token = NX_NULL;
2451 UCHAR *end_cmd;
2452 UCHAR *next_token;
2453 UCHAR *value_ptr;
2454
2455 /* At this point, cmd_string points to the beginning of the HTTP request,
2456 which takes the form of:
2457 "GET /test.htm?TestType=xxxxx&ip=....&rxed_pkts=xxxx&test_time=xxxx&tputs=xxxx" */
2458
2459 /* First skip the "Get /test.html?" string. */
2460 cmd_string += (sizeof("GET /test.htm?") - 1);
2461
2462 /* Find the end of the cmd string, */
2463 end_cmd = cmd_string;
2464 while (end_cmd < packet_ptr -> nx_packet_append_ptr)
2465 {
2466 if (*end_cmd == ' ')
2467 {
2468 break;
2469 }
2470 end_cmd++;
2471 }
2472 *end_cmd = 0;
2473
2474 /* The first token starts from cmd_string. */
2475 token = cmd_string;
2476 next_token = cmd_string;
2477 while (next_token < end_cmd)
2478 {
2479 /* Find the next token .*/
2480 while (next_token < end_cmd)
2481 {
2482 if (*next_token == '=')
2483 {
2484 break;
2485 }
2486 next_token++;
2487 }
2488
2489 if (*next_token == '=')
2490 {
2491 /* Find a name=value pair. Now we need to find the "=" sign. */
2492 *next_token = 0;
2493 value_ptr = next_token + 1;
2494 next_token++;
2495
2496 while (next_token < end_cmd)
2497 {
2498 if (*next_token == '&')
2499 {
2500 *next_token = 0;
2501
2502 break;
2503 }
2504 next_token++;
2505 }
2506
2507 if (value_ptr == next_token)
2508 {
2509 /* There is no value string. */
2510 value_ptr = NX_NULL;
2511 }
2512
2513 /* Move next_token beyond the NULL terminator. */
2514 next_token++;
2515
2516
2517 nx_iperf_check_token_value((char *)token, (char *)value_ptr, ctrl_info_ptr);
2518 }
2519 token = next_token;
2520 }
2521
2522 /* Finished parsing the whole command. */
2523 }
2524
2525 static CHAR mytempstring[30];
nx_iperf_print_main_test_window(NX_WEB_HTTP_SERVER * server_ptr)2526 static VOID nx_iperf_print_main_test_window(NX_WEB_HTTP_SERVER *server_ptr)
2527 {
2528 NX_PACKET *resp_packet_ptr;
2529 UINT status;
2530 NXD_ADDRESS server_ip;
2531 UINT length = 0;
2532 CHAR *ip_addr_string;
2533
2534 #ifdef FEATURE_NX_IPV6
2535 UINT address_index;
2536 ULONG prefix_length;
2537 UINT interface_index;
2538 #endif
2539
2540 status = nx_packet_allocate(server_ptr -> nx_web_http_server_packet_pool_ptr, &resp_packet_ptr, NX_TCP_PACKET, NX_WAIT_FOREVER);
2541
2542 /* write HTML code into the packet */
2543 /* htmlwrite(p,s,l) (nx_packet_data_append(p,s,l, server_ptr-> nx_web_http_server_packet_pool_ptr,NX_WAIT_FOREVER)) */
2544
2545 status += htmlwrite(resp_packet_ptr, outtermosttable, sizeof(outtermosttable) - 1);
2546 status += htmlwrite(resp_packet_ptr, maintabletag, sizeof(maintabletag) - 1);
2547
2548 /* print the IP address line. */
2549 status += htmlwrite(resp_packet_ptr, h1line1, sizeof(h1line1) - 1);
2550
2551 #ifndef NX_DISABLE_IPV4
2552 server_ip.nxd_ip_version = NX_IP_VERSION_V4;
2553 server_ip.nxd_ip_address.v4 = nx_iperf_test_ip -> nx_ip_interface[0].nx_interface_ip_address;
2554 ip_addr_string = nx_iperf_get_ip_addr_string(&server_ip, &length);
2555 status += htmlwrite(resp_packet_ptr, ip_addr_string, length);
2556 status += htmlwrite(resp_packet_ptr, "\n", sizeof("\n") - 1);
2557 #endif
2558
2559 #ifdef FEATURE_NX_IPV6
2560 address_index = 0;
2561
2562 /* Loop to output the IPv6 address. */
2563 while (1)
2564 {
2565
2566 /* Get the IPv6 address. */
2567 if (nxd_ipv6_address_get(nx_iperf_test_ip, address_index, &server_ip, &prefix_length, &interface_index) == NX_SUCCESS)
2568 {
2569 ip_addr_string = nx_iperf_get_ip_addr_string(&server_ip, &length);
2570 status += htmlwrite(resp_packet_ptr, ip_addr_string, length);
2571 status += htmlwrite(resp_packet_ptr, "\n", sizeof("\n") - 1);
2572 address_index++;
2573 }
2574 else
2575 {
2576 break;
2577 }
2578 }
2579 #endif
2580
2581 status += htmlwrite(resp_packet_ptr, h1line2, sizeof(h1line2) - 1);
2582 status += htmlwrite(resp_packet_ptr, tdendtag, sizeof(tdendtag) - 1);
2583 status += htmlwrite(resp_packet_ptr, trendtag, sizeof(trendtag) - 1);
2584 status += nx_web_http_server_callback_packet_send(server_ptr, resp_packet_ptr);
2585
2586 if (status)
2587 {
2588 nx_packet_release(resp_packet_ptr);
2589 nx_iperf_test_error_counter++;
2590 }
2591
2592 status = nx_packet_allocate(server_ptr -> nx_web_http_server_packet_pool_ptr, &resp_packet_ptr, NX_TCP_PACKET, NX_WAIT_FOREVER);
2593 status += htmlwrite(resp_packet_ptr, udptxsubmittag1, sizeof(udptxsubmittag1) - 1);
2594 ip_addr_string = nx_iperf_get_ip_addr_string(&udp_tx_ip_address, &length);
2595 status += htmlwrite(resp_packet_ptr, ip_addr_string, length);
2596 status += htmlwrite(resp_packet_ptr, udptxsubmittag2, sizeof(udptxsubmittag2) - 1);
2597 length = _nx_utility_uint_to_string(udp_tx_port, 10, mytempstring, sizeof(mytempstring));
2598 status += htmlwrite(resp_packet_ptr, mytempstring, length);
2599 status += htmlwrite(resp_packet_ptr, udptxsubmittag3, sizeof(udptxsubmittag3) - 1);
2600 length = _nx_utility_uint_to_string(udp_tx_test_time, 10, mytempstring, sizeof(mytempstring));
2601 status += htmlwrite(resp_packet_ptr, mytempstring, length);
2602 status += htmlwrite(resp_packet_ptr, udptxsubmittag4, sizeof(udptxsubmittag4) - 1);
2603 length = _nx_utility_uint_to_string(udp_tx_packet_size, 10, mytempstring, sizeof(mytempstring));
2604 status += htmlwrite(resp_packet_ptr, mytempstring, length);
2605 status += htmlwrite(resp_packet_ptr, udptxsubmittag5, sizeof(udptxsubmittag5) - 1);
2606 status += nx_web_http_server_callback_packet_send(server_ptr, resp_packet_ptr);
2607
2608 if (status)
2609 {
2610 nx_packet_release(resp_packet_ptr);
2611 nx_iperf_test_error_counter++;
2612 }
2613
2614 status = nx_packet_allocate(server_ptr -> nx_web_http_server_packet_pool_ptr, &resp_packet_ptr, NX_TCP_PACKET, NX_WAIT_FOREVER);
2615 status += htmlwrite(resp_packet_ptr, udprxsubmittag1, sizeof(udprxsubmittag1) - 1);
2616 length = _nx_utility_uint_to_string(udp_rx_test_time, 10, mytempstring, sizeof(mytempstring));
2617 status += htmlwrite(resp_packet_ptr, mytempstring, length);
2618 status += htmlwrite(resp_packet_ptr, udprxsubmittag2, sizeof(udprxsubmittag2) - 1);
2619 status += nx_web_http_server_callback_packet_send(server_ptr, resp_packet_ptr);
2620
2621 if (status)
2622 {
2623 nx_packet_release(resp_packet_ptr);
2624 nx_iperf_test_error_counter++;
2625 }
2626
2627 status = nx_packet_allocate(server_ptr -> nx_web_http_server_packet_pool_ptr, &resp_packet_ptr, NX_TCP_PACKET, NX_WAIT_FOREVER);
2628 status += htmlwrite(resp_packet_ptr, tcptxsubmittag1, sizeof(tcptxsubmittag1) - 1);
2629 ip_addr_string = nx_iperf_get_ip_addr_string(&tcp_tx_ip_address, &length);
2630 status += htmlwrite(resp_packet_ptr, ip_addr_string, length);
2631 status += htmlwrite(resp_packet_ptr, tcptxsubmittag2, sizeof(tcptxsubmittag2) - 1);
2632 length = _nx_utility_uint_to_string(tcp_tx_port, 10, mytempstring, sizeof(mytempstring));
2633 status += htmlwrite(resp_packet_ptr, mytempstring, length);
2634 status += htmlwrite(resp_packet_ptr, tcptxsubmittag3, sizeof(tcptxsubmittag3) - 1);
2635 length = _nx_utility_uint_to_string(tcp_tx_test_time, 10, mytempstring, sizeof(mytempstring));
2636 status += htmlwrite(resp_packet_ptr, mytempstring, length);
2637 status += htmlwrite(resp_packet_ptr, tcptxsubmittag4, sizeof(tcptxsubmittag4) - 1);
2638 status += nx_web_http_server_callback_packet_send(server_ptr, resp_packet_ptr);
2639
2640 if (status)
2641 {
2642 nx_packet_release(resp_packet_ptr);
2643 nx_iperf_test_error_counter++;
2644 }
2645
2646 status = nx_packet_allocate(server_ptr -> nx_web_http_server_packet_pool_ptr, &resp_packet_ptr, NX_TCP_PACKET, NX_WAIT_FOREVER);
2647 status += htmlwrite(resp_packet_ptr, tcprxsubmittag1, sizeof(tcprxsubmittag1) - 1);
2648 length = _nx_utility_uint_to_string(tcp_rx_test_time, 10, mytempstring, sizeof(mytempstring));
2649 status += htmlwrite(resp_packet_ptr, mytempstring, length);
2650 status += htmlwrite(resp_packet_ptr, tcprxsubmittag2, sizeof(tcprxsubmittag2) - 1);
2651 status += nx_web_http_server_callback_packet_send(server_ptr, resp_packet_ptr);
2652
2653 if (status)
2654 {
2655 nx_packet_release(resp_packet_ptr);
2656 nx_iperf_test_error_counter++;
2657 }
2658
2659 status = nx_packet_allocate(server_ptr -> nx_web_http_server_packet_pool_ptr, &resp_packet_ptr, NX_TCP_PACKET, NX_WAIT_FOREVER);
2660 status += htmlwrite(resp_packet_ptr, tableendtag, sizeof(tableendtag) - 1);
2661 status += htmlwrite(resp_packet_ptr, tdendtag, sizeof(tdendtag) - 1);
2662
2663 status += nx_web_http_server_callback_packet_send(server_ptr, resp_packet_ptr);
2664
2665 if (status)
2666 {
2667 nx_packet_release(resp_packet_ptr);
2668 nx_iperf_test_error_counter++;
2669 }
2670 }
2671
nx_iperf_print_end_of_page(NX_WEB_HTTP_SERVER * server_ptr)2672 static void nx_iperf_print_end_of_page(NX_WEB_HTTP_SERVER *server_ptr)
2673 {
2674 UINT status;
2675 NX_PACKET *resp_packet_ptr;
2676
2677 status = nx_packet_allocate(server_ptr -> nx_web_http_server_packet_pool_ptr, &resp_packet_ptr, NX_TCP_PACKET, NX_WAIT_FOREVER);
2678
2679 /* End of the page. */
2680 status += htmlwrite(resp_packet_ptr, tableendtag, sizeof(tableendtag) - 1); /* outtermost table. */
2681 status += htmlwrite(resp_packet_ptr, doublebr, sizeof(doublebr) - 1);
2682 status += htmlwrite(resp_packet_ptr, centerendtag, sizeof(centerendtag) - 1);
2683 status += htmlwrite(resp_packet_ptr, bodyendtag, sizeof(bodyendtag) - 1);
2684 status += htmlwrite(resp_packet_ptr, htmlendtag, sizeof(htmlendtag) - 1);
2685
2686 status += nx_web_http_server_callback_packet_send(server_ptr, resp_packet_ptr);
2687
2688 if (status)
2689 {
2690 nx_packet_release(resp_packet_ptr);
2691 nx_iperf_test_error_counter++;
2692 }
2693 }
2694
nx_iperf_print_header(NX_WEB_HTTP_SERVER * server_ptr)2695 static void nx_iperf_print_header(NX_WEB_HTTP_SERVER *server_ptr)
2696 {
2697 NX_PACKET *resp_packet_ptr;
2698 UINT status;
2699
2700 status = nx_packet_allocate(server_ptr -> nx_web_http_server_packet_pool_ptr,
2701 &resp_packet_ptr,
2702 NX_TCP_PACKET,
2703 NX_WAIT_FOREVER);
2704
2705
2706 /* write HTML code into the packet */
2707 /* htmlwrite(p,s,l) (nx_packet_data_append(p,s,l, server_ptr-> nx_web_http_server_packet_pool_ptr,NX_WAIT_FOREVER)) */
2708
2709 status += htmlwrite(resp_packet_ptr, htmlresponse, sizeof(htmlresponse) - 1);
2710 status += htmlwrite(resp_packet_ptr, htmltag, sizeof(htmltag) - 1);
2711 status += htmlwrite(resp_packet_ptr, titleline, sizeof(titleline) - 1);
2712 status += htmlwrite(resp_packet_ptr, bodytag, sizeof(bodytag) - 1);
2713 status += htmlwrite(resp_packet_ptr, logo_area, sizeof(logo_area) - 1);
2714 status += htmlwrite(resp_packet_ptr, hrline, sizeof(hrline) - 1);
2715 status += htmlwrite(resp_packet_ptr, centertag, sizeof(centertag) - 1);
2716
2717 status += nx_web_http_server_callback_packet_send(server_ptr, resp_packet_ptr);
2718
2719 if (status)
2720 {
2721 nx_packet_release(resp_packet_ptr);
2722 nx_iperf_test_error_counter++;
2723 }
2724 }
2725
2726
nx_iperf_print_test_inprogress(NX_WEB_HTTP_SERVER * server_ptr,char * msg)2727 static void nx_iperf_print_test_inprogress(NX_WEB_HTTP_SERVER *server_ptr, char *msg)
2728 {
2729 NX_PACKET *resp_packet_ptr;
2730 UINT status;
2731 UINT length = 0;
2732
2733 status = nx_packet_allocate(server_ptr -> nx_web_http_server_packet_pool_ptr,
2734 &resp_packet_ptr,
2735 NX_TCP_PACKET,
2736 NX_WAIT_FOREVER);
2737 status += htmlwrite(resp_packet_ptr, tdcentertag, sizeof(tdcentertag) - 1);
2738 status += htmlwrite(resp_packet_ptr, fontcolortag, sizeof(fontcolortag) - 1);
2739 _nx_utility_string_length_check(msg, &length, NX_MAX_STRING_LENGTH);
2740 status += htmlwrite(resp_packet_ptr, msg, length);
2741 status += htmlwrite(resp_packet_ptr, fontendtag, sizeof(fontendtag) - 1);
2742 status += htmlwrite(resp_packet_ptr, tdendtag, sizeof(tdendtag) - 1);
2743
2744 status += nx_web_http_server_callback_packet_send(server_ptr, resp_packet_ptr);
2745
2746 if (status)
2747 {
2748 nx_packet_release(resp_packet_ptr);
2749 nx_iperf_test_error_counter++;
2750 }
2751 }
2752
nx_iperf_print_empty_line(NX_WEB_HTTP_SERVER * server_ptr)2753 static void nx_iperf_print_empty_line(NX_WEB_HTTP_SERVER *server_ptr)
2754 {
2755 NX_PACKET *resp_packet_ptr;
2756 UINT status = 0;
2757
2758 status += nx_packet_allocate(server_ptr -> nx_web_http_server_packet_pool_ptr, &resp_packet_ptr, NX_TCP_PACKET, NX_WAIT_FOREVER);
2759 status += htmlwrite(resp_packet_ptr, choosetesttag, sizeof(choosetesttag) - 1);
2760 status += htmlwrite(resp_packet_ptr, trendtag, sizeof(trendtag) - 1);
2761 status += nx_web_http_server_callback_packet_send(server_ptr, resp_packet_ptr);
2762
2763 if (status)
2764 {
2765 nx_packet_release(resp_packet_ptr);
2766 nx_iperf_test_error_counter++;
2767 }
2768 }
2769
nx_iperf_send_test_result_info(NX_WEB_HTTP_SERVER * server_ptr)2770 static void nx_iperf_send_test_result_info(NX_WEB_HTTP_SERVER *server_ptr)
2771 {
2772 char *response_string = NX_NULL;
2773 NXD_ADDRESS peer_ip_address;
2774
2775 if (nx_iperf_ctrl_info.TestStatus == 0)
2776 {
2777 nx_iperf_print_empty_line(server_ptr);
2778
2779 /* No test is running. Do nothing. */
2780 return;
2781 }
2782 else if (nx_iperf_ctrl_info.TestStatus == 1)
2783 {
2784 switch (nx_iperf_ctrl_info.ctrl_sign)
2785 {
2786 case UDP_RX_START:
2787 response_string = "UDP Receive Test started. After the iperf test finishes, click <a href=\"/\">here</a> to get results.";
2788 break;
2789 case TCP_RX_START:
2790 response_string = "TCP Receive Test started. After the iperf test finishes, click <a href=\"/\">here</a> to get results.";
2791 break;
2792 case UDP_TX_START:
2793 response_string = "UDP Transmit Test starts in 2 seconds. After iperf test is done, click <a href=\"/\">here</a> to get results.";
2794 break;
2795 case TCP_TX_START:
2796 response_string = "TCP Transmit test starts in 2 seconds. After iperf test is done, click <a href=\"/\">here</a> to get results.";
2797 break;
2798 }
2799 nx_iperf_print_test_inprogress(server_ptr, response_string);
2800 }
2801 else if (nx_iperf_ctrl_info.TestStatus == 2)
2802 {
2803
2804 /* Check the ThroughPut value and StartTime,
2805 if the StartTime is zero means no connection.
2806 if throughput value is zero means maybe user interrupt the test.
2807 recalculate the ThroughPut before Interrupt. */
2808 if ((!nx_iperf_ctrl_info.ThroughPut) && (nx_iperf_ctrl_info.StartTime))
2809 {
2810
2811 /* Calculate the run time and Throughput(Mbps). */
2812 nx_iperf_ctrl_info.RunTime = tx_time_get() - nx_iperf_ctrl_info.StartTime;
2813
2814 /* Check the run time. */
2815 if (nx_iperf_ctrl_info.RunTime > nx_iperf_ctrl_info.TestTime)
2816 {
2817 nx_iperf_ctrl_info.RunTime = nx_iperf_ctrl_info.TestTime;
2818 }
2819
2820 /* Calculate Throughput(Mbps). */
2821 nx_iperf_ctrl_info.ThroughPut = (nx_iperf_ctrl_info.BytesTxed + nx_iperf_ctrl_info.BytesRxed) / nx_iperf_ctrl_info.RunTime * NX_IP_PERIODIC_RATE / 125000;
2822 }
2823
2824 peer_ip_address.nxd_ip_version = nx_iperf_ctrl_info.version;
2825
2826 #ifdef FEATURE_NX_IPV6
2827 if (peer_ip_address.nxd_ip_version == NX_IP_VERSION_V6)
2828 {
2829 peer_ip_address.nxd_ip_address.v6[0] = nx_iperf_ctrl_info.ipv6[0];
2830 peer_ip_address.nxd_ip_address.v6[1] = nx_iperf_ctrl_info.ipv6[1];
2831 peer_ip_address.nxd_ip_address.v6[2] = nx_iperf_ctrl_info.ipv6[2];
2832 peer_ip_address.nxd_ip_address.v6[3] = nx_iperf_ctrl_info.ipv6[3];
2833 }
2834 else
2835 #endif
2836 {
2837 #ifndef NX_DISABLE_IPV4
2838 peer_ip_address.nxd_ip_address.v4 = nx_iperf_ctrl_info.ip;
2839 #endif
2840 }
2841
2842 switch (nx_iperf_ctrl_info.ctrl_sign)
2843 {
2844 case UDP_RX_START:
2845 nx_iperf_print_udp_rx_results(server_ptr, &peer_ip_address);
2846 break;
2847 case TCP_RX_START:
2848 nx_iperf_print_tcp_rx_results(server_ptr, &peer_ip_address);
2849 break;
2850 case UDP_TX_START:
2851 nx_iperf_print_udp_tx_results(server_ptr, &peer_ip_address);
2852 break;
2853 case TCP_TX_START:
2854 nx_iperf_print_tcp_tx_results(server_ptr, &peer_ip_address);
2855 break;
2856 }
2857 memset(&nx_iperf_ctrl_info, 0, sizeof(nx_iperf_ctrl_info));
2858 }
2859 }
2860
nx_iperf_get_notify(NX_WEB_HTTP_SERVER * server_ptr,UINT request_type,CHAR * resource,NX_PACKET * packet_ptr)2861 UINT nx_iperf_get_notify(NX_WEB_HTTP_SERVER *server_ptr, UINT request_type, CHAR *resource, NX_PACKET *packet_ptr)
2862 {
2863 ctrl_info new_cmd;
2864 UINT status;
2865 ULONG port;
2866 UINT length;
2867
2868 NX_PARAMETER_NOT_USED(request_type);
2869
2870 memset(&new_cmd, 0, sizeof(ctrl_info));
2871
2872 /* Get peer IP address. */
2873 status = nxd_tcp_socket_peer_info_get(&server_ptr -> nx_web_http_server_current_session_ptr -> nx_tcp_session_socket, &udp_tx_ip_address, &port);
2874 if (status)
2875 {
2876 return(status);
2877 }
2878 tcp_tx_ip_address = udp_tx_ip_address;
2879
2880 /* Disconnect to mark the end of respond. */
2881 #ifndef NX_WEB_HTTP_KEEPALIVE_DISABLE
2882 server_ptr -> nx_web_http_server_keepalive = NX_FALSE;
2883 #endif
2884
2885 _nx_utility_string_length_check(resource, &length, NX_WEB_HTTP_MAX_RESOURCE);
2886 if (((length == sizeof("/test.htm") - 1) && (memcmp(resource, "/test.htm", length) == 0)) ||
2887 ((length == 1) && *resource == '/'))
2888 {
2889
2890 /* Printer the header. */
2891 nx_iperf_print_header(server_ptr);
2892
2893 /* Parse the command. */
2894 nx_iperf_parse_command(packet_ptr, &new_cmd);
2895
2896 /* If the current test is still running, and we have a new command,
2897 we need to clean up the current one. */
2898 if (new_cmd.ctrl_sign)
2899 {
2900 if ((nx_iperf_ctrl_info.TestStatus != 0) || ((nx_iperf_ctrl_info.ctrl_sign & NX_IPERF_CLEAN_UP_MASK) == 1))
2901 {
2902
2903 switch (nx_iperf_ctrl_info.ctrl_sign)
2904 {
2905 case TCP_RX_START:
2906 nx_iperf_tcp_rx_cleanup();
2907 break;
2908 case TCP_TX_START:
2909 nx_iperf_tcp_tx_cleanup();
2910 break;
2911 case UDP_RX_START:
2912 nx_iperf_udp_rx_cleanup();
2913 break;
2914 case UDP_TX_START:
2915 nx_iperf_udp_tx_cleanup();
2916 break;
2917 default:
2918 break;
2919 }
2920 memset(&nx_iperf_ctrl_info, 0, sizeof(nx_iperf_ctrl_info));
2921 }
2922
2923 memcpy(&nx_iperf_ctrl_info, &new_cmd, sizeof(ctrl_info)); /* Use case of memcpy is verified. */
2924
2925 /* Create the test thread and run the test. */
2926 nx_iperf_test_info_parse(&nx_iperf_ctrl_info);
2927
2928 /* Update the TestStatus. */
2929 nx_iperf_ctrl_info.TestStatus = 1;
2930 }
2931
2932 /* Check the status, set the default value. */
2933 if (nx_iperf_ctrl_info.TestStatus == 0)
2934 {
2935
2936 /* Check the IP version. */
2937 if (udp_tx_ip_address.nxd_ip_version == NX_IP_VERSION_V4)
2938 {
2939 udp_tx_packet_size = 1470;
2940 }
2941 else
2942 {
2943 udp_tx_packet_size = 1450;
2944 }
2945 }
2946
2947 /* Print the main window. */
2948 nx_iperf_print_main_test_window(server_ptr);
2949
2950 /* If there is a new command, show the result of launching the command. */
2951 nx_iperf_send_test_result_info(server_ptr);
2952
2953 nx_iperf_print_end_of_page(server_ptr);
2954
2955 /* Update the TestStatus. */
2956 if (nx_iperf_ctrl_info.TestStatus == 1)
2957 {
2958 nx_iperf_ctrl_info.TestStatus = 2;
2959 }
2960
2961 return(NX_WEB_HTTP_CALLBACK_COMPLETED);
2962 }
2963 /* send the logo files */
2964 if ((length == sizeof("/nxlogo.png") - 1) && (memcmp(resource, "/nxlogo.png", length) == 0))
2965 {
2966 nx_iperf_send_image(server_ptr, (UCHAR *)nxlogo_png, nxlogo_png_size);
2967 return(NX_WEB_HTTP_CALLBACK_COMPLETED);
2968 }
2969
2970 if ((length == sizeof("/mslogo.jpg") - 1) && (memcmp(resource, "/mslogo.jpg", length) == 0))
2971 {
2972 nx_iperf_send_image(server_ptr, (UCHAR *)mslogo_jpg, mslogo_jpg_size);
2973 return(NX_WEB_HTTP_CALLBACK_COMPLETED);
2974 }
2975
2976 return(NX_SUCCESS);
2977 }
2978
nx_iperf_send_image(NX_WEB_HTTP_SERVER * server_ptr,UCHAR * img,UINT imgsize)2979 static void nx_iperf_send_image(NX_WEB_HTTP_SERVER *server_ptr, UCHAR *img, UINT imgsize)
2980 {
2981
2982 UINT remaining;
2983 UCHAR *position;
2984 UINT max_size;
2985 UINT status;
2986 NX_PACKET *resp_packet_ptr;
2987
2988 /* Generate HTTP header. */
2989 status = nx_web_http_server_callback_generate_response_header(server_ptr,
2990 &resp_packet_ptr, NX_WEB_HTTP_STATUS_OK, imgsize, "image/jpeg", NX_NULL);
2991 if (status)
2992 {
2993 return;
2994 }
2995
2996 status = nx_web_http_server_callback_packet_send(server_ptr, resp_packet_ptr);
2997 if (status)
2998 {
2999 nx_packet_release(resp_packet_ptr);
3000 return;
3001 }
3002
3003 status = nx_tcp_socket_mss_get(&(server_ptr -> nx_web_http_server_current_session_ptr -> nx_tcp_session_socket), (ULONG *)&max_size);
3004 if (status)
3005 {
3006 return;
3007 }
3008
3009 remaining = imgsize;
3010 position = img;
3011 while (remaining)
3012 {
3013 if (remaining > max_size)
3014 {
3015 nx_web_http_server_callback_data_send(server_ptr, (void *)position, max_size);
3016 position += max_size;
3017 remaining -= max_size;
3018 }
3019 else
3020 {
3021 nx_web_http_server_callback_data_send(server_ptr, (void *)position, remaining);
3022 remaining = 0;
3023 }
3024 }
3025 }
3026
3027
nx_iperf_test_info_parse(ctrl_info * iperf_ctrlInfo_ptr)3028 void nx_iperf_test_info_parse(ctrl_info *iperf_ctrlInfo_ptr)
3029 {
3030
3031 /* Check the sign and set the related parameters. */
3032 switch ((iperf_ctrlInfo_ptr -> ctrl_sign) & NX_IPERF_CTRL_SIGN_MASK)
3033 {
3034
3035 case TCP_RX_START:
3036 {
3037 if (iperf_ctrlInfo_ptr -> TestTime == 0)
3038 {
3039 iperf_ctrlInfo_ptr -> TestTime = 10 * NX_IP_PERIODIC_RATE;
3040 }
3041 tcp_rx_test_time = (UINT)((iperf_ctrlInfo_ptr -> TestTime) / NX_IP_PERIODIC_RATE);
3042
3043 nx_iperf_tcp_rx_test(nx_iperf_stack_area, nx_iperf_stack_area_size);
3044 break;
3045 }
3046
3047 case TCP_TX_START:
3048 {
3049
3050 if (iperf_ctrlInfo_ptr -> TestTime == 0)
3051 {
3052 iperf_ctrlInfo_ptr -> TestTime = 10 * NX_IP_PERIODIC_RATE;
3053 }
3054 tcp_tx_test_time = (UINT)((iperf_ctrlInfo_ptr -> TestTime) / NX_IP_PERIODIC_RATE);
3055
3056 /* Set the transmit ip address. */
3057 if (iperf_ctrlInfo_ptr -> version == NX_IP_VERSION_V4)
3058 {
3059 #ifndef NX_DISABLE_IPV4
3060 tcp_tx_ip_address.nxd_ip_version = NX_IP_VERSION_V4;
3061 tcp_tx_ip_address.nxd_ip_address.v4 = iperf_ctrlInfo_ptr -> ip;
3062 #else
3063 break;
3064 #endif
3065 }
3066
3067 #ifdef FEATURE_NX_IPV6
3068 else
3069 {
3070 tcp_tx_ip_address.nxd_ip_version = NX_IP_VERSION_V6;
3071 tcp_tx_ip_address.nxd_ip_address.v6[0] = iperf_ctrlInfo_ptr -> ipv6[0];
3072 tcp_tx_ip_address.nxd_ip_address.v6[1] = iperf_ctrlInfo_ptr -> ipv6[1];
3073 tcp_tx_ip_address.nxd_ip_address.v6[2] = iperf_ctrlInfo_ptr -> ipv6[2];
3074 tcp_tx_ip_address.nxd_ip_address.v6[3] = iperf_ctrlInfo_ptr -> ipv6[3];
3075 }
3076 #endif
3077 tcp_tx_port = iperf_ctrlInfo_ptr -> port;
3078
3079 nx_iperf_tcp_tx_test(nx_iperf_stack_area, nx_iperf_stack_area_size);
3080 break;
3081 }
3082
3083 case UDP_RX_START:
3084 {
3085 if (iperf_ctrlInfo_ptr -> TestTime == 0)
3086 {
3087 iperf_ctrlInfo_ptr -> TestTime = 10 * NX_IP_PERIODIC_RATE;
3088 }
3089 udp_rx_test_time = (UINT)((iperf_ctrlInfo_ptr -> TestTime) / NX_IP_PERIODIC_RATE);
3090
3091 nx_iperf_udp_rx_test(nx_iperf_stack_area, nx_iperf_stack_area_size);
3092 break;
3093 }
3094
3095 case UDP_TX_START:
3096 {
3097 if (iperf_ctrlInfo_ptr -> TestTime == 0)
3098 {
3099 iperf_ctrlInfo_ptr -> TestTime = 10 * NX_IP_PERIODIC_RATE;
3100 }
3101 udp_tx_test_time = (UINT)((iperf_ctrlInfo_ptr -> TestTime) / NX_IP_PERIODIC_RATE);
3102
3103 if ((iperf_ctrlInfo_ptr -> PacketSize == 0) || (iperf_ctrlInfo_ptr -> PacketSize > 1470))
3104 {
3105 iperf_ctrlInfo_ptr -> PacketSize = 1470;
3106 }
3107 udp_tx_packet_size = (UINT)(iperf_ctrlInfo_ptr -> PacketSize);
3108 udp_tx_port = iperf_ctrlInfo_ptr -> port;
3109
3110 /* Set the transmit ip address. */
3111 if (iperf_ctrlInfo_ptr -> version == NX_IP_VERSION_V4)
3112 {
3113 #ifndef NX_DISABLE_IPV4
3114 udp_tx_ip_address.nxd_ip_version = NX_IP_VERSION_V4;
3115 udp_tx_ip_address.nxd_ip_address.v4 = iperf_ctrlInfo_ptr -> ip;
3116 #else
3117 break;
3118 #endif
3119 }
3120
3121 #ifdef FEATURE_NX_IPV6
3122 else
3123 {
3124 udp_tx_ip_address.nxd_ip_version = NX_IP_VERSION_V6;
3125 udp_tx_ip_address.nxd_ip_address.v6[0] = iperf_ctrlInfo_ptr -> ipv6[0];
3126 udp_tx_ip_address.nxd_ip_address.v6[1] = iperf_ctrlInfo_ptr -> ipv6[1];
3127 udp_tx_ip_address.nxd_ip_address.v6[2] = iperf_ctrlInfo_ptr -> ipv6[2];
3128 udp_tx_ip_address.nxd_ip_address.v6[3] = iperf_ctrlInfo_ptr -> ipv6[3];
3129 if (udp_tx_packet_size > 1450)
3130 {
3131 udp_tx_packet_size = 1450;
3132 }
3133 }
3134 #endif
3135
3136 if (iperf_ctrlInfo_ptr -> Rate == 0)
3137 {
3138 iperf_ctrlInfo_ptr -> Rate = 10;
3139 }
3140
3141 nx_iperf_udp_tx_test(nx_iperf_stack_area, nx_iperf_stack_area_size);
3142 break;
3143 }
3144
3145 default:
3146 {
3147 break;
3148 }
3149 }
3150 }
3151
nx_iperf_print_tcp_rx_results(NX_WEB_HTTP_SERVER * server_ptr,NXD_ADDRESS * peer_ip_address)3152 static void nx_iperf_print_tcp_rx_results(NX_WEB_HTTP_SERVER *server_ptr, NXD_ADDRESS *peer_ip_address)
3153 {
3154
3155 UINT status;
3156 NX_PACKET *resp_packet_ptr;
3157 UINT length = 0;
3158 CHAR *ip_addr_string;
3159
3160 status = nx_packet_allocate(server_ptr -> nx_web_http_server_packet_pool_ptr,
3161 &resp_packet_ptr,
3162 NX_TCP_PACKET,
3163 NX_WAIT_FOREVER);
3164
3165 htmlwrite(resp_packet_ptr, toptdtag, sizeof(toptdtag) - 1);
3166 htmlwrite(resp_packet_ptr, tabletag, sizeof(tabletag) - 1);
3167 status += htmlwrite(resp_packet_ptr, rightspanline, sizeof(rightspanline) - 1);
3168 htmlwrite(resp_packet_ptr, trtag, sizeof(trtag) - 1);
3169 htmlwrite(resp_packet_ptr, tdtag, sizeof(tdtag) - 1);
3170 htmlwrite(resp_packet_ptr, fonttag, sizeof(fonttag) - 1);
3171 htmlwrite(resp_packet_ptr, "TCP Receive Test Done:", sizeof("TCP Receive Test Done:") - 1);
3172 status += htmlwrite(resp_packet_ptr, fontendtag, sizeof(fontendtag) - 1);
3173 status += htmlwrite(resp_packet_ptr, tdendtag, sizeof(tdendtag) - 1);
3174 status += htmlwrite(resp_packet_ptr, trendtag, sizeof(trendtag) - 1);
3175
3176 status += htmlwrite(resp_packet_ptr, rightspanline, sizeof(rightspanline) - 1);
3177 status += htmlwrite(resp_packet_ptr, trtag, sizeof(trtag) - 1);
3178 status += htmlwrite(resp_packet_ptr, tdtag, sizeof(tdtag) - 1);
3179 status += htmlwrite(resp_packet_ptr, fonttag, sizeof(fonttag) - 1);
3180 status += htmlwrite(resp_packet_ptr, "Source IP Address: ", sizeof("Source IP Address: ") - 1);
3181 ip_addr_string = nx_iperf_get_ip_addr_string(peer_ip_address, &length);
3182 status += htmlwrite(resp_packet_ptr, ip_addr_string, length);
3183 status += htmlwrite(resp_packet_ptr, fontendtag, sizeof(fontendtag) - 1);
3184 status += htmlwrite(resp_packet_ptr, tdendtag, sizeof(tdendtag) - 1);
3185 status += htmlwrite(resp_packet_ptr, trendtag, sizeof(trendtag) - 1);
3186
3187 htmlwrite(resp_packet_ptr, trtag, sizeof(trtag) - 1);
3188 htmlwrite(resp_packet_ptr, tdtag, sizeof(tdtag) - 1);
3189 status += htmlwrite(resp_packet_ptr, fonttag, sizeof(fonttag) - 1);
3190 status += htmlwrite(resp_packet_ptr, "Test Time(milliseconds): ", sizeof("Test Time(milliseconds): ") - 1);
3191 length = _nx_utility_uint_to_string((UINT)(nx_iperf_ctrl_info.RunTime * 1000 / NX_IP_PERIODIC_RATE), 10, mytempstring, sizeof(mytempstring));
3192 status += htmlwrite(resp_packet_ptr, mytempstring, length);
3193 status += htmlwrite(resp_packet_ptr, fontendtag, sizeof(fontendtag) - 1);
3194 status += htmlwrite(resp_packet_ptr, tdendtag, sizeof(tdendtag) - 1);
3195 status += htmlwrite(resp_packet_ptr, trendtag, sizeof(trendtag) - 1);
3196
3197 status += htmlwrite(resp_packet_ptr, trtag, sizeof(trtag) - 1);
3198 status += htmlwrite(resp_packet_ptr, tdtag, sizeof(tdtag) - 1);
3199 status += htmlwrite(resp_packet_ptr, fonttag, sizeof(fonttag) - 1);
3200 status += htmlwrite(resp_packet_ptr, "Number of Packets Received: ", sizeof("Number of Packets Received: ") - 1);
3201 length = _nx_utility_uint_to_string((UINT)(nx_iperf_ctrl_info.PacketsRxed), 10, mytempstring, sizeof(mytempstring));
3202 status += htmlwrite(resp_packet_ptr, mytempstring, length);
3203 status += htmlwrite(resp_packet_ptr, fontendtag, sizeof(fontendtag) - 1);
3204 status += htmlwrite(resp_packet_ptr, tdendtag, sizeof(tdendtag) - 1);
3205 status += htmlwrite(resp_packet_ptr, trendtag, sizeof(trendtag) - 1);
3206
3207 status += htmlwrite(resp_packet_ptr, trtag, sizeof(trtag) - 1);
3208 status += htmlwrite(resp_packet_ptr, tdtag, sizeof(tdtag) - 1);
3209 status += htmlwrite(resp_packet_ptr, fonttag, sizeof(fonttag) - 1);
3210 status += htmlwrite(resp_packet_ptr, "Number of Bytes Received: ", sizeof("Number of Bytes Received: ") - 1);
3211 length = _nx_utility_uint_to_string((UINT)(nx_iperf_ctrl_info.BytesRxed), 10, mytempstring, sizeof(mytempstring));
3212 status += htmlwrite(resp_packet_ptr, mytempstring, length);
3213 status += htmlwrite(resp_packet_ptr, fontendtag, sizeof(fontendtag) - 1);
3214 status += htmlwrite(resp_packet_ptr, tdendtag, sizeof(tdendtag) - 1);
3215 status += htmlwrite(resp_packet_ptr, trendtag, sizeof(trendtag) - 1);
3216
3217 status += htmlwrite(resp_packet_ptr, trtag, sizeof(trtag) - 1);
3218 status += htmlwrite(resp_packet_ptr, tdtag, sizeof(tdtag) - 1);
3219 status += htmlwrite(resp_packet_ptr, fonttag, sizeof(fonttag) - 1);
3220 status += htmlwrite(resp_packet_ptr, "Throughput(Mbps): ", sizeof("Throughput(Mbps): ") - 1);
3221 length = _nx_utility_uint_to_string((UINT)(nx_iperf_ctrl_info.ThroughPut), 10, mytempstring, sizeof(mytempstring));
3222 status += htmlwrite(resp_packet_ptr, mytempstring, length);
3223 status += htmlwrite(resp_packet_ptr, fontendtag, sizeof(fontendtag) - 1);
3224 status += htmlwrite(resp_packet_ptr, tdendtag, sizeof(tdendtag) - 1);
3225 status += htmlwrite(resp_packet_ptr, trendtag, sizeof(trendtag) - 1);
3226
3227 #if defined(TX_ENABLE_EXECUTION_CHANGE_NOTIFY) || defined(TX_EXECUTION_PROFILE_ENABLE)
3228 status += htmlwrite(resp_packet_ptr, trtag, sizeof(trtag) - 1);
3229 status += htmlwrite(resp_packet_ptr, tdtag, sizeof(tdtag) - 1);
3230 status += htmlwrite(resp_packet_ptr, fonttag, sizeof(fonttag) - 1);
3231 length = _nx_utility_uint_to_string(nx_iperf_ctrl_info.idleTime, 10, mytempstring, sizeof(mytempstring));
3232 status += htmlwrite(resp_packet_ptr, "Idle Time: ", sizeof("Idle Time: ") - 1);
3233 status += htmlwrite(resp_packet_ptr, mytempstring, length);
3234 status += htmlwrite(resp_packet_ptr, "%", sizeof("%") - 1);
3235 status += htmlwrite(resp_packet_ptr, fontendtag, sizeof(fontendtag) - 1);
3236 status += htmlwrite(resp_packet_ptr, tdendtag, sizeof(tdendtag) - 1);
3237 status += htmlwrite(resp_packet_ptr, trendtag, sizeof(trendtag) - 1);
3238 #endif
3239
3240 htmlwrite(resp_packet_ptr, tableendtag, sizeof(tableendtag) - 1);
3241 htmlwrite(resp_packet_ptr, tdendtag, sizeof(tdendtag) - 1);
3242
3243 status += nx_web_http_server_callback_packet_send(server_ptr, resp_packet_ptr);
3244
3245 if (status)
3246 {
3247 nx_packet_release(resp_packet_ptr);
3248 nx_iperf_test_error_counter++;
3249 }
3250
3251 /* Delete the receive thread. */
3252 nx_iperf_tcp_rx_cleanup();
3253 }
3254
nx_iperf_print_tcp_tx_results(NX_WEB_HTTP_SERVER * server_ptr,NXD_ADDRESS * peer_ip_address)3255 static void nx_iperf_print_tcp_tx_results(NX_WEB_HTTP_SERVER *server_ptr, NXD_ADDRESS *peer_ip_address)
3256 {
3257 UINT status;
3258 NX_PACKET *resp_packet_ptr;
3259 UINT length = 0;
3260 CHAR *ip_addr_string;
3261
3262 status = nx_packet_allocate(server_ptr -> nx_web_http_server_packet_pool_ptr,
3263 &resp_packet_ptr,
3264 NX_TCP_PACKET,
3265 NX_WAIT_FOREVER);
3266
3267 htmlwrite(resp_packet_ptr, toptdtag, sizeof(toptdtag) - 1);
3268 htmlwrite(resp_packet_ptr, tabletag, sizeof(tabletag) - 1);
3269 status += htmlwrite(resp_packet_ptr, rightspanline, sizeof(rightspanline) - 1);
3270 htmlwrite(resp_packet_ptr, trtag, sizeof(trtag) - 1);
3271 htmlwrite(resp_packet_ptr, tdtag, sizeof(tdtag) - 1);
3272 htmlwrite(resp_packet_ptr, fonttag, sizeof(fonttag) - 1);
3273 htmlwrite(resp_packet_ptr, "TCP Transmit Test Done:", sizeof("TCP Transmit Test Done:") - 1);
3274 status += htmlwrite(resp_packet_ptr, fontendtag, sizeof(fontendtag) - 1);
3275 status += htmlwrite(resp_packet_ptr, tdendtag, sizeof(tdendtag) - 1);
3276 status += htmlwrite(resp_packet_ptr, trendtag, sizeof(trendtag) - 1);
3277
3278 status += htmlwrite(resp_packet_ptr, rightspanline, sizeof(rightspanline) - 1);
3279 status += htmlwrite(resp_packet_ptr, trtag, sizeof(trtag) - 1);
3280 status += htmlwrite(resp_packet_ptr, tdtag, sizeof(tdtag) - 1);
3281 status += htmlwrite(resp_packet_ptr, fonttag, sizeof(fonttag) - 1);
3282 status += htmlwrite(resp_packet_ptr, "Destination IP Address: ", sizeof("Destination IP Address: ") - 1);
3283 ip_addr_string = nx_iperf_get_ip_addr_string(peer_ip_address, &length);
3284 status += htmlwrite(resp_packet_ptr, ip_addr_string, length);
3285 status += htmlwrite(resp_packet_ptr, fontendtag, sizeof(fontendtag) - 1);
3286 status += htmlwrite(resp_packet_ptr, tdendtag, sizeof(tdendtag) - 1);
3287 status += htmlwrite(resp_packet_ptr, trendtag, sizeof(trendtag) - 1);
3288
3289 status += htmlwrite(resp_packet_ptr, trtag, sizeof(trtag) - 1);
3290 status += htmlwrite(resp_packet_ptr, tdtag, sizeof(tdtag) - 1);
3291 status += htmlwrite(resp_packet_ptr, fonttag, sizeof(fonttag) - 1);
3292 status += htmlwrite(resp_packet_ptr, "Destination Port: ", sizeof("Destination Port: ") - 1);
3293 length = _nx_utility_uint_to_string(nx_iperf_ctrl_info.port, 10, mytempstring, sizeof(mytempstring));
3294 status += htmlwrite(resp_packet_ptr, mytempstring, length);
3295 status += htmlwrite(resp_packet_ptr, fontendtag, sizeof(fontendtag) - 1);
3296 status += htmlwrite(resp_packet_ptr, tdendtag, sizeof(tdendtag) - 1);
3297 status += htmlwrite(resp_packet_ptr, trendtag, sizeof(trendtag) - 1);
3298
3299 status += htmlwrite(resp_packet_ptr, trtag, sizeof(trtag) - 1);
3300 status += htmlwrite(resp_packet_ptr, tdtag, sizeof(tdtag) - 1);
3301 status += htmlwrite(resp_packet_ptr, fonttag, sizeof(fonttag) - 1);
3302 status += htmlwrite(resp_packet_ptr, "Test Time(milliseconds): ", sizeof("Test Time(milliseconds): ") - 1);
3303 length = _nx_utility_uint_to_string((UINT)(nx_iperf_ctrl_info.RunTime * 1000 / NX_IP_PERIODIC_RATE), 10, mytempstring, sizeof(mytempstring));
3304 status += htmlwrite(resp_packet_ptr, mytempstring, length);
3305 status += htmlwrite(resp_packet_ptr, fontendtag, sizeof(fontendtag) - 1);
3306 status += htmlwrite(resp_packet_ptr, tdendtag, sizeof(tdendtag) - 1);
3307 status += htmlwrite(resp_packet_ptr, trendtag, sizeof(trendtag) - 1);
3308
3309 status += htmlwrite(resp_packet_ptr, trtag, sizeof(trtag) - 1);
3310 status += htmlwrite(resp_packet_ptr, tdtag, sizeof(tdtag) - 1);
3311 status += htmlwrite(resp_packet_ptr, fonttag, sizeof(fonttag) - 1);
3312 status += htmlwrite(resp_packet_ptr, "Number of Packets Transmitted: ", sizeof("Number of Packets Transmitted: ") - 1);
3313 length = _nx_utility_uint_to_string((UINT)(nx_iperf_ctrl_info.PacketsTxed), 10, mytempstring, sizeof(mytempstring));
3314 status += htmlwrite(resp_packet_ptr, mytempstring, length);
3315 status += htmlwrite(resp_packet_ptr, fontendtag, sizeof(fontendtag) - 1);
3316 status += htmlwrite(resp_packet_ptr, tdendtag, sizeof(tdendtag) - 1);
3317 status += htmlwrite(resp_packet_ptr, trendtag, sizeof(trendtag) - 1);
3318
3319 status += htmlwrite(resp_packet_ptr, trtag, sizeof(trtag) - 1);
3320 status += htmlwrite(resp_packet_ptr, tdtag, sizeof(tdtag) - 1);
3321 status += htmlwrite(resp_packet_ptr, fonttag, sizeof(fonttag) - 1);
3322 status += htmlwrite(resp_packet_ptr, "Number of Bytes Transmitted: ", sizeof("Number of Bytes Transmitted: ") - 1);
3323 length = _nx_utility_uint_to_string((UINT)(nx_iperf_ctrl_info.BytesTxed), 10, mytempstring, sizeof(mytempstring));
3324 status += htmlwrite(resp_packet_ptr, mytempstring, length);
3325 status += htmlwrite(resp_packet_ptr, fontendtag, sizeof(fontendtag) - 1);
3326 status += htmlwrite(resp_packet_ptr, tdendtag, sizeof(tdendtag) - 1);
3327 status += htmlwrite(resp_packet_ptr, trendtag, sizeof(trendtag) - 1);
3328
3329 status += htmlwrite(resp_packet_ptr, trtag, sizeof(trtag) - 1);
3330 status += htmlwrite(resp_packet_ptr, tdtag, sizeof(tdtag) - 1);
3331 status += htmlwrite(resp_packet_ptr, fonttag, sizeof(fonttag) - 1);
3332 status += htmlwrite(resp_packet_ptr, "Throughput(Mbps): ", sizeof("Throughput(Mbps): ") - 1);
3333 length = _nx_utility_uint_to_string((UINT)(nx_iperf_ctrl_info.ThroughPut), 10, mytempstring, sizeof(mytempstring));
3334 status += htmlwrite(resp_packet_ptr, mytempstring, length);
3335 status += htmlwrite(resp_packet_ptr, fontendtag, sizeof(fontendtag) - 1);
3336 status += htmlwrite(resp_packet_ptr, tdendtag, sizeof(tdendtag) - 1);
3337 status += htmlwrite(resp_packet_ptr, trendtag, sizeof(trendtag) - 1);
3338
3339 #if defined(TX_ENABLE_EXECUTION_CHANGE_NOTIFY) || defined(TX_EXECUTION_PROFILE_ENABLE)
3340 status += htmlwrite(resp_packet_ptr, trtag, sizeof(trtag) - 1);
3341 status += htmlwrite(resp_packet_ptr, tdtag, sizeof(tdtag) - 1);
3342 status += htmlwrite(resp_packet_ptr, fonttag, sizeof(fonttag) - 1);
3343 length = _nx_utility_uint_to_string(nx_iperf_ctrl_info.idleTime, 10, mytempstring, sizeof(mytempstring));
3344 status += htmlwrite(resp_packet_ptr, "Idle Time: ", sizeof("Idle Time: ") - 1);
3345 status += htmlwrite(resp_packet_ptr, mytempstring, length);
3346 status += htmlwrite(resp_packet_ptr, "%", sizeof("%") - 1);
3347 status += htmlwrite(resp_packet_ptr, fontendtag, sizeof(fontendtag) - 1);
3348 status += htmlwrite(resp_packet_ptr, tdendtag, sizeof(tdendtag) - 1);
3349 status += htmlwrite(resp_packet_ptr, trendtag, sizeof(trendtag) - 1);
3350 #endif
3351
3352 status += htmlwrite(resp_packet_ptr, tableendtag, sizeof(tableendtag) - 1);
3353 status += htmlwrite(resp_packet_ptr, tdendtag, sizeof(tdendtag) - 1);
3354
3355 status += nx_web_http_server_callback_packet_send(server_ptr, resp_packet_ptr);
3356
3357 if (status)
3358 {
3359 nx_packet_release(resp_packet_ptr);
3360 nx_iperf_test_error_counter++;
3361 }
3362
3363 /* Delete the receive thread. */
3364 nx_iperf_tcp_tx_cleanup();
3365 }
3366
nx_iperf_print_udp_rx_results(NX_WEB_HTTP_SERVER * server_ptr,NXD_ADDRESS * peer_ip_address)3367 static void nx_iperf_print_udp_rx_results(NX_WEB_HTTP_SERVER *server_ptr, NXD_ADDRESS *peer_ip_address)
3368 {
3369 UINT status;
3370 NX_PACKET *resp_packet_ptr;
3371 UINT length = 0;
3372 CHAR *ip_addr_string;
3373
3374 status = nx_packet_allocate(server_ptr -> nx_web_http_server_packet_pool_ptr,
3375 &resp_packet_ptr,
3376 NX_TCP_PACKET,
3377 NX_WAIT_FOREVER);
3378
3379 /* now send the data back to the client. */
3380 htmlwrite(resp_packet_ptr, toptdtag, sizeof(toptdtag) - 1);
3381 htmlwrite(resp_packet_ptr, tabletag, sizeof(tabletag) - 1);
3382 status += htmlwrite(resp_packet_ptr, rightspanline, sizeof(rightspanline) - 1);
3383 htmlwrite(resp_packet_ptr, trtag, sizeof(trtag) - 1);
3384 htmlwrite(resp_packet_ptr, tdtag, sizeof(tdtag) - 1);
3385 htmlwrite(resp_packet_ptr, fonttag, sizeof(fonttag) - 1);
3386 htmlwrite(resp_packet_ptr, "UDP Receive Test Done:", sizeof("UDP Receive Test Done:") - 1);
3387 status += htmlwrite(resp_packet_ptr, fontendtag, sizeof(fontendtag) - 1);
3388 status += htmlwrite(resp_packet_ptr, tdendtag, sizeof(tdendtag) - 1);
3389 status += htmlwrite(resp_packet_ptr, trendtag, sizeof(trendtag) - 1);
3390
3391 status += htmlwrite(resp_packet_ptr, rightspanline, sizeof(rightspanline) - 1);
3392 status += htmlwrite(resp_packet_ptr, trtag, sizeof(trtag) - 1);
3393 status += htmlwrite(resp_packet_ptr, tdtag, sizeof(tdtag) - 1);
3394 status += htmlwrite(resp_packet_ptr, fonttag, sizeof(fonttag) - 1);
3395 status += htmlwrite(resp_packet_ptr, "Source IP Address: ", sizeof("Source IP Address: ") - 1);
3396 ip_addr_string = nx_iperf_get_ip_addr_string(peer_ip_address, &length);
3397 status += htmlwrite(resp_packet_ptr, ip_addr_string, length);
3398 status += htmlwrite(resp_packet_ptr, fontendtag, sizeof(fontendtag) - 1);
3399 status += htmlwrite(resp_packet_ptr, tdendtag, sizeof(tdendtag) - 1);
3400 status += htmlwrite(resp_packet_ptr, trendtag, sizeof(trendtag) - 1);
3401
3402 htmlwrite(resp_packet_ptr, trtag, sizeof(trtag) - 1);
3403 htmlwrite(resp_packet_ptr, tdtag, sizeof(tdtag) - 1);
3404 status += htmlwrite(resp_packet_ptr, fonttag, sizeof(fonttag) - 1);
3405 status += htmlwrite(resp_packet_ptr, "Test Time(milliseconds): ", sizeof("Test Time(milliseconds): ") - 1);
3406 length = _nx_utility_uint_to_string((UINT)(nx_iperf_ctrl_info.RunTime * 1000 / NX_IP_PERIODIC_RATE), 10, mytempstring, sizeof(mytempstring));
3407 status += htmlwrite(resp_packet_ptr, mytempstring, length);
3408 status += htmlwrite(resp_packet_ptr, fontendtag, sizeof(fontendtag) - 1);
3409 status += htmlwrite(resp_packet_ptr, tdendtag, sizeof(tdendtag) - 1);
3410 status += htmlwrite(resp_packet_ptr, trendtag, sizeof(trendtag) - 1);
3411
3412 status += htmlwrite(resp_packet_ptr, trtag, sizeof(trtag) - 1);
3413 status += htmlwrite(resp_packet_ptr, tdtag, sizeof(tdtag) - 1);
3414 status += htmlwrite(resp_packet_ptr, fonttag, sizeof(fonttag) - 1);
3415 status += htmlwrite(resp_packet_ptr, "Number of Packets Received: ", sizeof("Number of Packets Received: ") - 1);
3416 length = _nx_utility_uint_to_string((UINT)(nx_iperf_ctrl_info.PacketsRxed), 10, mytempstring, sizeof(mytempstring));
3417 status += htmlwrite(resp_packet_ptr, mytempstring, length);
3418 status += htmlwrite(resp_packet_ptr, fontendtag, sizeof(fontendtag) - 1);
3419 status += htmlwrite(resp_packet_ptr, tdendtag, sizeof(tdendtag) - 1);
3420 status += htmlwrite(resp_packet_ptr, trendtag, sizeof(trendtag) - 1);
3421
3422 status += htmlwrite(resp_packet_ptr, trtag, sizeof(trtag) - 1);
3423 status += htmlwrite(resp_packet_ptr, tdtag, sizeof(tdtag) - 1);
3424 status += htmlwrite(resp_packet_ptr, fonttag, sizeof(fonttag) - 1);
3425 status += htmlwrite(resp_packet_ptr, "Number of Bytes Received: ", sizeof("Number of Bytes Received: ") - 1);
3426 length = _nx_utility_uint_to_string((UINT)(nx_iperf_ctrl_info.BytesRxed), 10, mytempstring, sizeof(mytempstring));
3427 status += htmlwrite(resp_packet_ptr, mytempstring, length);
3428 status += htmlwrite(resp_packet_ptr, fontendtag, sizeof(fontendtag) - 1);
3429 status += htmlwrite(resp_packet_ptr, tdendtag, sizeof(tdendtag) - 1);
3430 status += htmlwrite(resp_packet_ptr, trendtag, sizeof(trendtag) - 1);
3431
3432 status += htmlwrite(resp_packet_ptr, trtag, sizeof(trtag) - 1);
3433 status += htmlwrite(resp_packet_ptr, tdtag, sizeof(tdtag) - 1);
3434 status += htmlwrite(resp_packet_ptr, fonttag, sizeof(fonttag) - 1);
3435 status += htmlwrite(resp_packet_ptr, "Throughput(Mbps): ", sizeof("Throughput(Mbps): ") - 1);
3436 length = _nx_utility_uint_to_string((UINT)(nx_iperf_ctrl_info.ThroughPut), 10, mytempstring, sizeof(mytempstring));
3437 status += htmlwrite(resp_packet_ptr, mytempstring, length);
3438 status += htmlwrite(resp_packet_ptr, fontendtag, sizeof(fontendtag) - 1);
3439 status += htmlwrite(resp_packet_ptr, tdendtag, sizeof(tdendtag) - 1);
3440 status += htmlwrite(resp_packet_ptr, trendtag, sizeof(trendtag) - 1);
3441
3442 #if defined(TX_ENABLE_EXECUTION_CHANGE_NOTIFY) || defined(TX_EXECUTION_PROFILE_ENABLE)
3443 status += htmlwrite(resp_packet_ptr, trtag, sizeof(trtag) - 1);
3444 status += htmlwrite(resp_packet_ptr, tdtag, sizeof(tdtag) - 1);
3445 status += htmlwrite(resp_packet_ptr, fonttag, sizeof(fonttag) - 1);
3446 length = _nx_utility_uint_to_string((UINT)(nx_iperf_ctrl_info.idleTime), 10, mytempstring, sizeof(mytempstring));
3447 status += htmlwrite(resp_packet_ptr, "Idle Time: ", sizeof("Idle Time: ") - 1);
3448 status += htmlwrite(resp_packet_ptr, mytempstring, length);
3449 status += htmlwrite(resp_packet_ptr, "%", sizeof("%") - 1);
3450 status += htmlwrite(resp_packet_ptr, fontendtag, sizeof(fontendtag) - 1);
3451 status += htmlwrite(resp_packet_ptr, tdendtag, sizeof(tdendtag) - 1);
3452 status += htmlwrite(resp_packet_ptr, trendtag, sizeof(trendtag) - 1);
3453 #endif
3454
3455 status += htmlwrite(resp_packet_ptr, tableendtag, sizeof(tableendtag) - 1);
3456 status += htmlwrite(resp_packet_ptr, tdendtag, sizeof(tdendtag) - 1);
3457
3458 status += nx_web_http_server_callback_packet_send(server_ptr, resp_packet_ptr);
3459
3460 if (status)
3461 {
3462 nx_packet_release(resp_packet_ptr);
3463 nx_iperf_test_error_counter++;
3464 }
3465
3466 nx_iperf_udp_rx_cleanup();
3467 }
3468
nx_iperf_print_udp_tx_results(NX_WEB_HTTP_SERVER * server_ptr,NXD_ADDRESS * peer_ip_address)3469 static void nx_iperf_print_udp_tx_results(NX_WEB_HTTP_SERVER *server_ptr, NXD_ADDRESS *peer_ip_address)
3470 {
3471 UINT status;
3472 NX_PACKET *resp_packet_ptr;
3473 UINT length = 0;
3474 CHAR *ip_addr_string;
3475
3476 status = nx_packet_allocate(server_ptr -> nx_web_http_server_packet_pool_ptr,
3477 &resp_packet_ptr,
3478 NX_TCP_PACKET,
3479 NX_WAIT_FOREVER);
3480
3481 /* now send the data back to the client. */
3482 htmlwrite(resp_packet_ptr, toptdtag, sizeof(toptdtag) - 1);
3483 htmlwrite(resp_packet_ptr, tabletag, sizeof(tabletag) - 1);
3484 status += htmlwrite(resp_packet_ptr, rightspanline, sizeof(rightspanline) - 1);
3485 htmlwrite(resp_packet_ptr, trtag, sizeof(trtag) - 1);
3486 htmlwrite(resp_packet_ptr, tdtag, sizeof(tdtag) - 1);
3487 htmlwrite(resp_packet_ptr, fonttag, sizeof(fonttag) - 1);
3488 htmlwrite(resp_packet_ptr, "UDP Transmit Test Done:", sizeof("UDP Transmit Test Done:") - 1);
3489 status += htmlwrite(resp_packet_ptr, fontendtag, sizeof(fontendtag) - 1);
3490 status += htmlwrite(resp_packet_ptr, tdendtag, sizeof(tdendtag) - 1);
3491 status += htmlwrite(resp_packet_ptr, trendtag, sizeof(trendtag) - 1);
3492
3493 status += htmlwrite(resp_packet_ptr, rightspanline, sizeof(rightspanline) - 1);
3494 status += htmlwrite(resp_packet_ptr, trtag, sizeof(trtag) - 1);
3495 status += htmlwrite(resp_packet_ptr, tdtag, sizeof(tdtag) - 1);
3496 status += htmlwrite(resp_packet_ptr, fonttag, sizeof(fonttag) - 1);
3497 status += htmlwrite(resp_packet_ptr, "Destination IP Address: ", sizeof("Destination IP Address: ") - 1);
3498 ip_addr_string = nx_iperf_get_ip_addr_string(peer_ip_address, &length);
3499 status += htmlwrite(resp_packet_ptr, ip_addr_string, length);
3500 status += htmlwrite(resp_packet_ptr, fontendtag, sizeof(fontendtag) - 1);
3501 status += htmlwrite(resp_packet_ptr, tdendtag, sizeof(tdendtag) - 1);
3502 status += htmlwrite(resp_packet_ptr, trendtag, sizeof(trendtag) - 1);
3503
3504 status += htmlwrite(resp_packet_ptr, trtag, sizeof(trtag) - 1);
3505 status += htmlwrite(resp_packet_ptr, tdtag, sizeof(tdtag) - 1);
3506 status += htmlwrite(resp_packet_ptr, fonttag, sizeof(fonttag) - 1);
3507 status += htmlwrite(resp_packet_ptr, "Destination Port: ", sizeof("Destination Port: ") - 1);
3508 length = _nx_utility_uint_to_string(nx_iperf_ctrl_info.port, 10, mytempstring, sizeof(mytempstring));
3509 status += htmlwrite(resp_packet_ptr, mytempstring, length);
3510 status += htmlwrite(resp_packet_ptr, fontendtag, sizeof(fontendtag) - 1);
3511 status += htmlwrite(resp_packet_ptr, tdendtag, sizeof(tdendtag) - 1);
3512 status += htmlwrite(resp_packet_ptr, trendtag, sizeof(trendtag) - 1);
3513
3514 status += htmlwrite(resp_packet_ptr, trtag, sizeof(trtag) - 1);
3515 status += htmlwrite(resp_packet_ptr, tdtag, sizeof(tdtag) - 1);
3516 status += htmlwrite(resp_packet_ptr, fonttag, sizeof(fonttag) - 1);
3517 status += htmlwrite(resp_packet_ptr, "Test Time(milliseconds): ", sizeof("Test Time(milliseconds): ") - 1);
3518 length = _nx_utility_uint_to_string((UINT)(nx_iperf_ctrl_info.RunTime * 1000 / NX_IP_PERIODIC_RATE), 10, mytempstring, sizeof(mytempstring));
3519 status += htmlwrite(resp_packet_ptr, mytempstring, length);
3520 status += htmlwrite(resp_packet_ptr, fontendtag, sizeof(fontendtag) - 1);
3521 status += htmlwrite(resp_packet_ptr, tdendtag, sizeof(tdendtag) - 1);
3522 status += htmlwrite(resp_packet_ptr, trendtag, sizeof(trendtag) - 1);
3523
3524 status += htmlwrite(resp_packet_ptr, trtag, sizeof(trtag) - 1);
3525 status += htmlwrite(resp_packet_ptr, tdtag, sizeof(tdtag) - 1);
3526 status += htmlwrite(resp_packet_ptr, fonttag, sizeof(fonttag) - 1);
3527 status += htmlwrite(resp_packet_ptr, "Number of Packets Transmitted: ", sizeof("Number of Packets Transmitted: ") - 1);
3528 length = _nx_utility_uint_to_string((UINT)(nx_iperf_ctrl_info.PacketsTxed), 10, mytempstring, sizeof(mytempstring));
3529 status += htmlwrite(resp_packet_ptr, mytempstring, length);
3530 status += htmlwrite(resp_packet_ptr, fontendtag, sizeof(fontendtag) - 1);
3531 status += htmlwrite(resp_packet_ptr, tdendtag, sizeof(tdendtag) - 1);
3532 status += htmlwrite(resp_packet_ptr, trendtag, sizeof(trendtag) - 1);
3533
3534 status += htmlwrite(resp_packet_ptr, trtag, sizeof(trtag) - 1);
3535 status += htmlwrite(resp_packet_ptr, tdtag, sizeof(tdtag) - 1);
3536 status += htmlwrite(resp_packet_ptr, fonttag, sizeof(fonttag) - 1);
3537 status += htmlwrite(resp_packet_ptr, "Number of Bytes Transmitted: ", sizeof("Number of Bytes Transmitted: ") - 1);
3538 length = _nx_utility_uint_to_string((UINT)(nx_iperf_ctrl_info.BytesTxed), 10, mytempstring, sizeof(mytempstring));
3539 status += htmlwrite(resp_packet_ptr, mytempstring, length);
3540 status += htmlwrite(resp_packet_ptr, fontendtag, sizeof(fontendtag) - 1);
3541 status += htmlwrite(resp_packet_ptr, tdendtag, sizeof(tdendtag) - 1);
3542 status += htmlwrite(resp_packet_ptr, trendtag, sizeof(trendtag) - 1);
3543
3544 status += htmlwrite(resp_packet_ptr, trtag, sizeof(trtag) - 1);
3545 status += htmlwrite(resp_packet_ptr, tdtag, sizeof(tdtag) - 1);
3546 status += htmlwrite(resp_packet_ptr, fonttag, sizeof(fonttag) - 1);
3547 status += htmlwrite(resp_packet_ptr, "Throughput(Mbps): ", sizeof("Throughput(Mbps): ") - 1);
3548 length = _nx_utility_uint_to_string((UINT)(nx_iperf_ctrl_info.ThroughPut), 10, mytempstring, sizeof(mytempstring));
3549 status += htmlwrite(resp_packet_ptr, mytempstring, length);
3550 status += htmlwrite(resp_packet_ptr, fontendtag, sizeof(fontendtag) - 1);
3551 status += htmlwrite(resp_packet_ptr, tdendtag, sizeof(tdendtag) - 1);
3552 status += htmlwrite(resp_packet_ptr, trendtag, sizeof(trendtag) - 1);
3553
3554 #if defined(TX_ENABLE_EXECUTION_CHANGE_NOTIFY) || defined(TX_EXECUTION_PROFILE_ENABLE)
3555 status += htmlwrite(resp_packet_ptr, trtag, sizeof(trtag) - 1);
3556 status += htmlwrite(resp_packet_ptr, tdtag, sizeof(tdtag) - 1);
3557 status += htmlwrite(resp_packet_ptr, fonttag, sizeof(fonttag) - 1);
3558 length = _nx_utility_uint_to_string((UINT)(nx_iperf_ctrl_info.idleTime), 10, mytempstring, sizeof(mytempstring));
3559 status += htmlwrite(resp_packet_ptr, "Idle Time: ", sizeof("Idle Time: ") - 1);
3560 status += htmlwrite(resp_packet_ptr, mytempstring, length);
3561 status += htmlwrite(resp_packet_ptr, "%", sizeof("%") - 1);
3562 status += htmlwrite(resp_packet_ptr, fontendtag, sizeof(fontendtag) - 1);
3563 status += htmlwrite(resp_packet_ptr, tdendtag, sizeof(tdendtag) - 1);
3564 status += htmlwrite(resp_packet_ptr, trendtag, sizeof(trendtag) - 1);
3565 #endif
3566
3567 status += htmlwrite(resp_packet_ptr, tableendtag, sizeof(tableendtag) - 1);
3568 status += htmlwrite(resp_packet_ptr, tdendtag, sizeof(tdendtag) - 1);
3569
3570 status += nx_web_http_server_callback_packet_send(server_ptr, resp_packet_ptr);
3571
3572 if (status)
3573 {
3574 nx_packet_release(resp_packet_ptr);
3575 nx_iperf_test_error_counter++;
3576 }
3577
3578 nx_iperf_udp_tx_cleanup();
3579 }
3580
nx_iperf_thread_tcp_rx_entry(ULONG thread_input)3581 void nx_iperf_thread_tcp_rx_entry(ULONG thread_input)
3582 {
3583 UINT status;
3584 NX_PACKET *packet_ptr;
3585 ULONG actual_status;
3586 ULONG expire_time;
3587 ctrl_info *ctrlInfo_ptr;
3588 NXD_ADDRESS ip_address;
3589 ULONG port;
3590
3591 /* Set the pointer. */
3592 ctrlInfo_ptr = (ctrl_info *)thread_input;
3593
3594 #if defined(TX_ENABLE_EXECUTION_CHANGE_NOTIFY) || defined(TX_EXECUTION_PROFILE_ENABLE)
3595 /* Update the time. */
3596 thread_time = 0;
3597 isr_time = 0;
3598 idle_time = 0;
3599 #endif
3600
3601 /* Update the test result. */
3602 ctrlInfo_ptr -> PacketsRxed = 0;
3603 ctrlInfo_ptr -> BytesRxed = 0;
3604 ctrlInfo_ptr -> ThroughPut = 0;
3605 ctrlInfo_ptr -> StartTime = 0;
3606 ctrlInfo_ptr -> RunTime = 0;
3607 ctrlInfo_ptr -> ErrorCode = 0;
3608
3609 /* Ensure the IP instance has been initialized. */
3610 status = nx_ip_status_check(nx_iperf_test_ip, NX_IP_INITIALIZE_DONE, &actual_status, NX_IP_PERIODIC_RATE);
3611
3612 /* Check status... */
3613 if (status != NX_SUCCESS)
3614 {
3615 error_counter++;
3616 return;
3617 }
3618
3619 /* Setup this thread to listen. */
3620 status = nx_tcp_server_socket_listen(nx_iperf_test_ip, NX_IPERF_TCP_RX_PORT, &tcp_server_socket, 5, nx_iperf_tcp_rx_connect_received);
3621
3622 /* Check for error. */
3623 if (status)
3624 {
3625 error_counter++;
3626 return;
3627 }
3628
3629 /* Increment thread tcp rx's counter. */
3630 thread_tcp_rx_counter++;
3631
3632 /* Accept a client socket connection. */
3633 status = nx_tcp_server_socket_accept(&tcp_server_socket, NX_WAIT_FOREVER);
3634
3635 /* Check for error. */
3636 if (status)
3637 {
3638 nx_tcp_server_socket_unlisten(nx_iperf_test_ip, NX_IPERF_TCP_RX_PORT);
3639 error_counter++;
3640 return;
3641 }
3642
3643 /*Get source ip address*/
3644 status = nxd_tcp_socket_peer_info_get(&tcp_server_socket, &ip_address, &port);
3645 if (status)
3646 {
3647 nx_tcp_server_socket_unaccept(&tcp_server_socket);
3648 nx_tcp_server_socket_unlisten(nx_iperf_test_ip, NX_IPERF_TCP_RX_PORT);
3649 error_counter++;
3650 return;
3651 }
3652
3653 ctrlInfo_ptr -> version = ip_address.nxd_ip_version;
3654 if (ctrlInfo_ptr -> version == NX_IP_VERSION_V4)
3655 {
3656 #ifndef NX_DISABLE_IPV4
3657 ctrlInfo_ptr -> ip = ip_address.nxd_ip_address.v4;
3658 #endif
3659 }
3660 #ifdef FEATURE_NX_IPV6
3661 else if (ctrlInfo_ptr -> version == NX_IP_VERSION_V6)
3662 {
3663 memcpy(ctrlInfo_ptr -> ipv6, ip_address.nxd_ip_address.v6, sizeof(ULONG) * 4); /* Use case of memcpy is verified. */
3664 }
3665 #endif
3666
3667 /* Set the test start time. */
3668 ctrlInfo_ptr -> StartTime = tx_time_get();
3669 expire_time = (ULONG)(ctrlInfo_ptr -> StartTime + (ctrlInfo_ptr -> TestTime) + 20);
3670
3671 #if defined(TX_ENABLE_EXECUTION_CHANGE_NOTIFY) || defined(TX_EXECUTION_PROFILE_ENABLE)
3672 _tx_execution_thread_total_time_reset();
3673 _tx_execution_isr_time_reset();
3674 _tx_execution_idle_time_reset();
3675 #endif
3676
3677 while (tx_time_get() < expire_time)
3678 {
3679 /* Receive a TCP message from the socket. */
3680 status = nx_tcp_socket_receive(&tcp_server_socket, &packet_ptr, NX_WAIT_FOREVER);
3681
3682 /* Check for error. */
3683 if (status)
3684 {
3685 error_counter++;
3686 break;
3687 }
3688
3689 /* Update the counter. */
3690 ctrlInfo_ptr -> PacketsRxed++;
3691 ctrlInfo_ptr -> BytesRxed += packet_ptr -> nx_packet_length;
3692
3693 /* Release the packet. */
3694 nx_packet_release(packet_ptr);
3695 }
3696
3697 #if defined(TX_ENABLE_EXECUTION_CHANGE_NOTIFY) || defined(TX_EXECUTION_PROFILE_ENABLE)
3698 _tx_execution_thread_total_time_get(&thread_time);
3699 _tx_execution_isr_time_get(&isr_time);
3700 _tx_execution_idle_time_get(&idle_time);
3701 #endif
3702
3703 /* Calculate the test time and Throughput(Mbps). */
3704 ctrlInfo_ptr -> RunTime = tx_time_get() - ctrlInfo_ptr -> StartTime;
3705 ctrlInfo_ptr -> ThroughPut = ctrlInfo_ptr -> BytesRxed / ctrlInfo_ptr -> RunTime * NX_IP_PERIODIC_RATE / 125000;
3706
3707 #if defined(TX_ENABLE_EXECUTION_CHANGE_NOTIFY) || defined(TX_EXECUTION_PROFILE_ENABLE)
3708 ctrlInfo_ptr -> idleTime = (ULONG)((unsigned long long)idle_time * 100 / ((unsigned long long)thread_time + (unsigned long long)isr_time + (unsigned long long)idle_time));
3709 #endif
3710
3711 /* Disconnect the server socket. */
3712 status = nx_tcp_socket_disconnect(&tcp_server_socket, 10);
3713
3714 /* Check for error. */
3715 if (status)
3716 {
3717 error_counter++;
3718 }
3719
3720 /* Unaccept the server socket. */
3721 status = nx_tcp_server_socket_unaccept(&tcp_server_socket);
3722 status += nx_tcp_server_socket_unlisten(nx_iperf_test_ip, NX_IPERF_TCP_RX_PORT);
3723
3724 /* Check for error. */
3725 if (status)
3726 {
3727 error_counter++;
3728 }
3729
3730 if (error_counter)
3731 {
3732 ctrlInfo_ptr -> ErrorCode = error_counter;
3733 }
3734 }
3735
nx_iperf_tcp_rx_connect_received(NX_TCP_SOCKET * socket_ptr,UINT port)3736 void nx_iperf_tcp_rx_connect_received(NX_TCP_SOCKET *socket_ptr, UINT port)
3737 {
3738 /* Check for the proper socket and port. */
3739 if ((socket_ptr != &tcp_server_socket) || (port != NX_IPERF_TCP_RX_PORT))
3740 {
3741 error_counter++;
3742 }
3743 }
3744
nx_iperf_tcp_rx_disconnect_received(NX_TCP_SOCKET * socket)3745 void nx_iperf_tcp_rx_disconnect_received(NX_TCP_SOCKET *socket)
3746 {
3747 /* Check for proper disconnected socket. */
3748 if (socket != &tcp_server_socket)
3749 {
3750 error_counter++;
3751 }
3752 }
3753
nx_iperf_tcp_rx_cleanup(void)3754 void nx_iperf_tcp_rx_cleanup(void)
3755 {
3756 nx_tcp_socket_disconnect(&tcp_server_socket, NX_NO_WAIT);
3757 nx_tcp_server_socket_unaccept(&tcp_server_socket);
3758 nx_tcp_server_socket_unlisten(nx_iperf_test_ip, NX_IPERF_TCP_RX_PORT);
3759
3760 tx_thread_terminate(&thread_tcp_rx_iperf);
3761 tx_thread_delete(&thread_tcp_rx_iperf);
3762 }
3763
nx_iperf_tcp_rx_test(UCHAR * stack_space,ULONG stack_size)3764 void nx_iperf_tcp_rx_test(UCHAR *stack_space, ULONG stack_size)
3765 {
3766
3767 UINT status;
3768
3769 status = tx_thread_create(&thread_tcp_rx_iperf, "thread tcp rx",
3770 nx_iperf_thread_tcp_rx_entry,
3771 (ULONG)&nx_iperf_ctrl_info,
3772 stack_space, stack_size, NX_IPERF_THREAD_PRIORITY, NX_IPERF_THREAD_PRIORITY,
3773 TX_NO_TIME_SLICE, TX_AUTO_START);
3774
3775 if (status)
3776 {
3777 nx_iperf_ctrl_info.ErrorCode = 1;
3778 }
3779 return;
3780 }
3781
nx_iperf_thread_tcp_tx_entry(ULONG thread_input)3782 void nx_iperf_thread_tcp_tx_entry(ULONG thread_input)
3783 {
3784 UINT status;
3785 UINT is_first = NX_TRUE;
3786 NX_PACKET *my_packet = NX_NULL;
3787 #ifndef NX_DISABLE_PACKET_CHAIN
3788 NX_PACKET *packet_ptr;
3789 NX_PACKET *last_packet;
3790 ULONG remaining_size;
3791 #endif /* NX_DISABLE_PACKET_CHAIN */
3792 ULONG expire_time;
3793 ctrl_info *ctrlInfo_ptr;
3794 ULONG packet_size;
3795 NXD_ADDRESS server_ip;
3796
3797 /* Set the pointer. */
3798 ctrlInfo_ptr = (ctrl_info *)thread_input;
3799
3800 #if defined(TX_ENABLE_EXECUTION_CHANGE_NOTIFY) || defined(TX_EXECUTION_PROFILE_ENABLE)
3801 thread_time = 0;
3802 isr_time = 0;
3803 idle_time = 0;
3804 #endif
3805
3806 ctrlInfo_ptr -> PacketsTxed = 0;
3807 ctrlInfo_ptr -> BytesTxed = 0;
3808 ctrlInfo_ptr -> ThroughPut = 0;
3809 ctrlInfo_ptr -> StartTime = 0;
3810 ctrlInfo_ptr -> RunTime = 0;
3811 ctrlInfo_ptr -> ErrorCode = 0;
3812
3813 server_ip.nxd_ip_version = ctrlInfo_ptr -> version;
3814
3815 #ifdef FEATURE_NX_IPV6
3816 if (ctrlInfo_ptr -> version == NX_IP_VERSION_V6)
3817 {
3818 server_ip.nxd_ip_address.v6[0] = ctrlInfo_ptr -> ipv6[0];
3819 server_ip.nxd_ip_address.v6[1] = ctrlInfo_ptr -> ipv6[1];
3820 server_ip.nxd_ip_address.v6[2] = ctrlInfo_ptr -> ipv6[2];
3821 server_ip.nxd_ip_address.v6[3] = ctrlInfo_ptr -> ipv6[3];
3822 }
3823 else if (ctrlInfo_ptr -> version == NX_IP_VERSION_V4)
3824 #endif
3825 {
3826 #ifndef NX_DISABLE_IPV4
3827 server_ip.nxd_ip_address.v4 = ctrlInfo_ptr -> ip;
3828 #endif
3829 }
3830
3831 /* TCP Transmit Test Starts in 2 seconds. */
3832 tx_thread_sleep(200);
3833
3834 /* Bind the socket. */
3835 status = nx_tcp_client_socket_bind(&tcp_client_socket, NX_ANY_PORT, NX_WAIT_FOREVER);
3836
3837 /* Check for error. */
3838 if (status)
3839 {
3840 error_counter++;
3841 return;
3842 }
3843
3844 /* Attempt to connect the socket. */
3845 status = nxd_tcp_client_socket_connect(&tcp_client_socket, &server_ip, ctrlInfo_ptr -> port, NX_WAIT_FOREVER);
3846
3847 /* Check for error. */
3848 if (status)
3849 {
3850 nx_tcp_client_socket_unbind(&tcp_client_socket);
3851 error_counter++;
3852 return;
3853 }
3854
3855 /* Set the test start time. */
3856 ctrlInfo_ptr -> StartTime = tx_time_get();
3857 expire_time = (ULONG)(ctrlInfo_ptr -> StartTime + (ctrlInfo_ptr -> TestTime));
3858
3859 #if defined(TX_ENABLE_EXECUTION_CHANGE_NOTIFY) || defined(TX_EXECUTION_PROFILE_ENABLE)
3860 _tx_execution_thread_total_time_reset();
3861 _tx_execution_isr_time_reset();
3862 _tx_execution_idle_time_reset();
3863 #endif
3864
3865 /* Set the packet size. */
3866 status = nx_tcp_socket_mss_get(&tcp_client_socket, &packet_size);
3867
3868 /* Check for error. */
3869 if (status)
3870 {
3871 nx_tcp_socket_disconnect(&tcp_client_socket, NX_NO_WAIT);
3872 nx_tcp_client_socket_unbind(&tcp_client_socket);
3873 error_counter++;
3874 return;
3875 }
3876
3877 /* Loop to transmit the packet. */
3878 while (tx_time_get() < expire_time)
3879 {
3880
3881 /* Allocate a packet. */
3882 status = nx_packet_allocate(nx_iperf_test_pool, &my_packet, NX_TCP_PACKET, NX_WAIT_FOREVER);
3883
3884 /* Check status. */
3885 if (status != NX_SUCCESS)
3886 {
3887 break;
3888 }
3889
3890 /* Write ABCs into the packet payload! */
3891 /* Adjust the write pointer. */
3892 if (my_packet -> nx_packet_prepend_ptr + packet_size <= my_packet -> nx_packet_data_end)
3893 {
3894 my_packet -> nx_packet_append_ptr = my_packet -> nx_packet_prepend_ptr + packet_size;
3895 #ifndef NX_DISABLE_PACKET_CHAIN
3896 remaining_size = 0;
3897 #endif /* NX_DISABLE_PACKET_CHAIN */
3898 }
3899 else
3900 {
3901 #ifdef NX_DISABLE_PACKET_CHAIN
3902 packet_size = (ULONG)(my_packet -> nx_packet_data_end - my_packet -> nx_packet_prepend_ptr);
3903 my_packet -> nx_packet_append_ptr = my_packet -> nx_packet_prepend_ptr + packet_size;
3904 #else
3905 my_packet -> nx_packet_append_ptr = my_packet -> nx_packet_data_end;
3906 remaining_size = packet_size - (ULONG)(my_packet -> nx_packet_append_ptr - my_packet -> nx_packet_prepend_ptr);
3907 last_packet = my_packet;
3908 #endif /* NX_DISABLE_PACKET_CHAIN */
3909 }
3910 my_packet -> nx_packet_length = packet_size;
3911
3912 #ifndef NX_DISABLE_PACKET_CHAIN
3913 while (remaining_size)
3914 {
3915
3916 /* Allocate a packet. */
3917 status = nx_packet_allocate(nx_iperf_test_pool, &packet_ptr, NX_TCP_PACKET, NX_WAIT_FOREVER);
3918
3919 /* Check status. */
3920 if (status != NX_SUCCESS)
3921 {
3922 break;
3923 }
3924
3925 last_packet -> nx_packet_next = packet_ptr;
3926 last_packet = packet_ptr;
3927 if (remaining_size < (ULONG)(packet_ptr -> nx_packet_data_end - packet_ptr -> nx_packet_prepend_ptr))
3928 {
3929 packet_ptr -> nx_packet_append_ptr = packet_ptr -> nx_packet_prepend_ptr + remaining_size;
3930 }
3931 else
3932 {
3933 packet_ptr -> nx_packet_append_ptr = packet_ptr -> nx_packet_data_end;
3934 }
3935 remaining_size = remaining_size - (ULONG)(packet_ptr -> nx_packet_append_ptr - packet_ptr -> nx_packet_prepend_ptr);
3936 }
3937 #endif /* NX_DISABLE_PACKET_CHAIN */
3938
3939 if (is_first)
3940 {
3941 memset(my_packet -> nx_packet_prepend_ptr, 0, (UINT)(my_packet -> nx_packet_data_end - my_packet -> nx_packet_prepend_ptr));
3942 is_first = NX_FALSE;
3943 }
3944
3945 /* Send the packet out! */
3946 status = nx_tcp_socket_send(&tcp_client_socket, my_packet, NX_WAIT_FOREVER);
3947
3948 /* Determine if the status is valid. */
3949 if (status)
3950 {
3951 error_counter++;
3952 nx_packet_release(my_packet);
3953 break;
3954 }
3955 else
3956 {
3957
3958 /* Update the counter. */
3959 ctrlInfo_ptr -> PacketsTxed++;
3960 ctrlInfo_ptr -> BytesTxed += packet_size;
3961 }
3962 }
3963
3964 /* Calculate the test time and Throughput(Mbps). */
3965 ctrlInfo_ptr -> RunTime = tx_time_get() - ctrlInfo_ptr -> StartTime;
3966 ctrlInfo_ptr -> ThroughPut = ctrlInfo_ptr -> BytesTxed / ctrlInfo_ptr -> RunTime * NX_IP_PERIODIC_RATE / 125000;
3967
3968 #if defined(TX_ENABLE_EXECUTION_CHANGE_NOTIFY) || defined(TX_EXECUTION_PROFILE_ENABLE)
3969 _tx_execution_thread_total_time_get(&thread_time);
3970 _tx_execution_isr_time_get(&isr_time);
3971 _tx_execution_idle_time_get(&idle_time);
3972 #endif
3973
3974 #if defined(TX_ENABLE_EXECUTION_CHANGE_NOTIFY) || defined(TX_EXECUTION_PROFILE_ENABLE)
3975 ctrlInfo_ptr -> idleTime = (ULONG)((unsigned long long)idle_time * 100 / ((unsigned long long)thread_time + (unsigned long long)isr_time + (unsigned long long)idle_time));
3976 #endif
3977
3978 /* Disconnect this socket. */
3979 status = nx_tcp_socket_disconnect(&tcp_client_socket, NX_NO_WAIT);
3980
3981 /* Determine if the status is valid. */
3982 if (status)
3983 {
3984 error_counter++;
3985 }
3986
3987 /* Unbind the socket. */
3988 status = nx_tcp_client_socket_unbind(&tcp_client_socket);
3989
3990 /* Check for error. */
3991 if (status)
3992 {
3993 error_counter++;
3994 }
3995
3996 if (error_counter)
3997 {
3998 ctrlInfo_ptr -> ErrorCode = error_counter;
3999 }
4000 }
4001
nx_iperf_tcp_tx_cleanup(void)4002 void nx_iperf_tcp_tx_cleanup(void)
4003 {
4004 nx_tcp_socket_disconnect(&tcp_client_socket, NX_NO_WAIT);
4005 nx_tcp_client_socket_unbind(&tcp_client_socket);
4006
4007 tx_thread_terminate(&thread_tcp_tx_iperf);
4008 tx_thread_delete(&thread_tcp_tx_iperf);
4009 }
4010
nx_iperf_tcp_tx_test(UCHAR * stack_space,ULONG stack_size)4011 void nx_iperf_tcp_tx_test(UCHAR *stack_space, ULONG stack_size)
4012 {
4013 UINT status;
4014
4015 status = tx_thread_create(&thread_tcp_tx_iperf, "thread tcp tx",
4016 nx_iperf_thread_tcp_tx_entry,
4017 (ULONG)&nx_iperf_ctrl_info,
4018 stack_space, stack_size, NX_WEB_HTTP_SERVER_PRIORITY + 1, NX_WEB_HTTP_SERVER_PRIORITY + 1,
4019 TX_NO_TIME_SLICE, TX_AUTO_START);
4020
4021 if (status)
4022 {
4023 nx_iperf_ctrl_info.ErrorCode = 1;
4024 }
4025 return;
4026 }
4027
4028
nx_iperf_thread_udp_rx_entry(ULONG thread_input)4029 void nx_iperf_thread_udp_rx_entry(ULONG thread_input)
4030 {
4031 UINT status;
4032 ULONG expire_time;
4033 NX_PACKET *my_packet;
4034 ctrl_info *ctrlInfo_ptr;
4035 int packetID = 0;
4036 UINT sender_port;
4037 ULONG tmp;
4038 NXD_ADDRESS source_ip_address;
4039
4040 /* Set the pointer. */
4041 ctrlInfo_ptr = (ctrl_info *)thread_input;
4042
4043 #if defined(TX_ENABLE_EXECUTION_CHANGE_NOTIFY) || defined(TX_EXECUTION_PROFILE_ENABLE)
4044 thread_time = 0;
4045 isr_time = 0;
4046 idle_time = 0;
4047 #endif
4048
4049 /* Update the test result. */
4050 ctrlInfo_ptr -> PacketsRxed = 0;
4051 ctrlInfo_ptr -> BytesRxed = 0;
4052 ctrlInfo_ptr -> ThroughPut = 0;
4053 ctrlInfo_ptr -> StartTime = 0;
4054 ctrlInfo_ptr -> RunTime = 0;
4055 ctrlInfo_ptr -> ErrorCode = 0;
4056
4057 /* Bind the UDP socket to the IP port. */
4058 status = nx_udp_socket_bind(&udp_server_socket, NX_IPERF_UDP_RX_PORT, TX_WAIT_FOREVER);
4059
4060 /* Check status. */
4061 if (status)
4062 {
4063 error_counter++;
4064 return;
4065 }
4066
4067 /* Disable checksum for UDP. */
4068 nx_udp_socket_checksum_disable(&udp_server_socket);
4069
4070 /* Receive a UDP packet. */
4071 status = nx_udp_socket_receive(&udp_server_socket, &my_packet, TX_WAIT_FOREVER);
4072
4073 /* Check status. */
4074 if (status)
4075 {
4076 nx_udp_socket_unbind(&udp_server_socket);
4077 error_counter++;
4078 return;
4079 }
4080
4081 /* Get source ip address*/
4082 nxd_udp_source_extract(my_packet, &source_ip_address, &sender_port);
4083
4084 /* Set the IP address Version. */
4085 ctrlInfo_ptr -> version = source_ip_address.nxd_ip_version;
4086
4087 #ifndef NX_DISABLE_IPV4
4088 if (ctrlInfo_ptr -> version == NX_IP_VERSION_V4)
4089 {
4090 ctrlInfo_ptr -> ip = source_ip_address.nxd_ip_address.v4;
4091 }
4092 #endif
4093 #ifdef FEATURE_NX_IPV6
4094 if (ctrlInfo_ptr -> version == NX_IP_VERSION_V6)
4095 {
4096 ctrlInfo_ptr -> ipv6[0] = source_ip_address.nxd_ip_address.v6[0];
4097 ctrlInfo_ptr -> ipv6[1] = source_ip_address.nxd_ip_address.v6[1];
4098 ctrlInfo_ptr -> ipv6[2] = source_ip_address.nxd_ip_address.v6[2];
4099 ctrlInfo_ptr -> ipv6[3] = source_ip_address.nxd_ip_address.v6[3];
4100 }
4101 #endif
4102
4103 /* Release the packet. */
4104 nx_packet_release(my_packet);
4105
4106 /* Set the test start time. */
4107 ctrlInfo_ptr -> StartTime = tx_time_get();
4108 expire_time = (ULONG)(ctrlInfo_ptr -> StartTime + (ctrlInfo_ptr -> TestTime) + 5); /* Wait 5 more ticks to synchronize. */
4109
4110 #if defined(TX_ENABLE_EXECUTION_CHANGE_NOTIFY) || defined(TX_EXECUTION_PROFILE_ENABLE)
4111 _tx_execution_thread_total_time_reset();
4112 _tx_execution_isr_time_reset();
4113 _tx_execution_idle_time_reset();
4114 #endif
4115
4116 while (tx_time_get() < expire_time)
4117 {
4118
4119 /* Receive a UDP packet. */
4120 status = nx_udp_socket_receive(&udp_server_socket, &my_packet, TX_WAIT_FOREVER);
4121
4122 /* Check status. */
4123 if (status != NX_SUCCESS)
4124 {
4125 error_counter++;
4126 break;
4127 }
4128
4129 /* Update the counter. */
4130 ctrlInfo_ptr -> PacketsRxed++;
4131 ctrlInfo_ptr -> BytesRxed += my_packet -> nx_packet_length;
4132
4133 /* Detect the end of the test signal. */
4134 packetID = *(int *)(my_packet -> nx_packet_prepend_ptr);
4135
4136 tmp = (ULONG)packetID;
4137 NX_CHANGE_ULONG_ENDIAN(tmp);
4138 packetID = (int)tmp;
4139
4140
4141 /* Check the packet ID. */
4142 if (packetID < 0)
4143 {
4144
4145 /* Test has finished. */
4146 #if defined(TX_ENABLE_EXECUTION_CHANGE_NOTIFY) || defined(TX_EXECUTION_PROFILE_ENABLE)
4147 _tx_execution_thread_total_time_get(&thread_time);
4148 _tx_execution_isr_time_get(&isr_time);
4149 _tx_execution_idle_time_get(&idle_time);
4150 #endif
4151
4152 /* Calculate the test time and Throughput. */
4153 ctrlInfo_ptr -> RunTime = tx_time_get() - ctrlInfo_ptr -> StartTime;
4154 ctrlInfo_ptr -> ThroughPut = ctrlInfo_ptr -> BytesRxed / ctrlInfo_ptr -> RunTime * NX_IP_PERIODIC_RATE / 125000;
4155
4156 /* received end of the test signal */
4157
4158 /* Send the UDP packet. */
4159 status = nxd_udp_socket_send(&udp_server_socket, my_packet, &source_ip_address, sender_port);
4160
4161 /* Check the status. */
4162 if (status)
4163 {
4164
4165 /* Release the packet. */
4166 nx_packet_release(my_packet);
4167 }
4168 else
4169 {
4170
4171 /* Loop to receive the end of the test signal. */
4172 while (1)
4173 {
4174
4175 /* Receive a UDP packet. */
4176 status = nx_udp_socket_receive(&udp_server_socket, &my_packet, 20);
4177
4178 /* Check the status. */
4179 if (status)
4180 {
4181 break;
4182 }
4183
4184 /* Send the UDP packet. */
4185 status = nxd_udp_socket_send(&udp_server_socket, my_packet, &source_ip_address, sender_port);
4186
4187 /* Check the status. */
4188 if (status)
4189 {
4190
4191 /* Release the packet. */
4192 nx_packet_release(my_packet);
4193 }
4194 }
4195 }
4196 break;
4197 }
4198 else
4199 {
4200
4201 /* Release the packet. */
4202 nx_packet_release(my_packet);
4203 }
4204 }
4205
4206 if (packetID >= 0)
4207 {
4208
4209 /* Test is not synchronized. */
4210 #if defined(TX_ENABLE_EXECUTION_CHANGE_NOTIFY) || defined(TX_EXECUTION_PROFILE_ENABLE)
4211 _tx_execution_thread_total_time_get(&thread_time);
4212 _tx_execution_isr_time_get(&isr_time);
4213 _tx_execution_idle_time_get(&idle_time);
4214 #endif
4215
4216 /* Calculate the test time and Throughput. */
4217 ctrlInfo_ptr -> RunTime = tx_time_get() - ctrlInfo_ptr -> StartTime;
4218 ctrlInfo_ptr -> ThroughPut = ctrlInfo_ptr -> BytesRxed / ctrlInfo_ptr -> RunTime * NX_IP_PERIODIC_RATE / 125000;
4219 }
4220
4221 #if defined(TX_ENABLE_EXECUTION_CHANGE_NOTIFY) || defined(TX_EXECUTION_PROFILE_ENABLE)
4222 ctrlInfo_ptr -> idleTime = (ULONG)((unsigned long long)idle_time * 100 / ((unsigned long long)thread_time + (unsigned long long)isr_time + (unsigned long long)idle_time));
4223 #endif
4224
4225 /* Unbind the socket. */
4226 nx_udp_socket_unbind(&udp_server_socket);
4227
4228 /* Check error counter. */
4229 if (error_counter)
4230 {
4231 ctrlInfo_ptr -> ErrorCode = error_counter;
4232 }
4233 }
4234
nx_iperf_udp_rx_cleanup(void)4235 void nx_iperf_udp_rx_cleanup(void)
4236 {
4237 nx_udp_socket_unbind(&udp_server_socket);
4238
4239 tx_thread_terminate(&thread_udp_rx_iperf);
4240 tx_thread_delete(&thread_udp_rx_iperf);
4241 }
4242
nx_iperf_udp_rx_test(UCHAR * stack_space,ULONG stack_size)4243 void nx_iperf_udp_rx_test(UCHAR *stack_space, ULONG stack_size)
4244 {
4245 UINT status;
4246
4247 status = tx_thread_create(&thread_udp_rx_iperf, "thread udp rx",
4248 nx_iperf_thread_udp_rx_entry,
4249 (ULONG)&nx_iperf_ctrl_info,
4250 stack_space, stack_size, NX_WEB_HTTP_SERVER_PRIORITY + 1, NX_WEB_HTTP_SERVER_PRIORITY + 1,
4251 TX_NO_TIME_SLICE, TX_AUTO_START);
4252
4253 if (status)
4254 {
4255 nx_iperf_ctrl_info.ErrorCode = 1;
4256 }
4257 return;
4258 }
4259
nx_iperf_send_udp_packet(int udp_id,ctrl_info * ctrlInfo_ptr)4260 static void nx_iperf_send_udp_packet(int udp_id, ctrl_info *ctrlInfo_ptr)
4261 {
4262
4263 UINT status;
4264 NX_PACKET *my_packet = NX_NULL;
4265 udp_payload *payload_ptr;
4266 ULONG tmp;
4267
4268 NXD_ADDRESS server_ip;
4269
4270 server_ip.nxd_ip_version = ctrlInfo_ptr -> version;
4271
4272 #ifdef FEATURE_NX_IPV6
4273 if (ctrlInfo_ptr -> version == NX_IP_VERSION_V6)
4274 {
4275 server_ip.nxd_ip_address.v6[0] = ctrlInfo_ptr -> ipv6[0];
4276 server_ip.nxd_ip_address.v6[1] = ctrlInfo_ptr -> ipv6[1];
4277 server_ip.nxd_ip_address.v6[2] = ctrlInfo_ptr -> ipv6[2];
4278 server_ip.nxd_ip_address.v6[3] = ctrlInfo_ptr -> ipv6[3];
4279 }
4280 else if (ctrlInfo_ptr -> version == NX_IP_VERSION_V4)
4281 #endif
4282 {
4283 #ifndef NX_DISABLE_IPV4
4284 server_ip.nxd_ip_address.v4 = ctrlInfo_ptr -> ip;
4285 #endif
4286 }
4287
4288 /* Send the end of test indicator. */
4289 nx_packet_allocate(nx_iperf_test_pool, &my_packet, NX_UDP_PACKET, TX_WAIT_FOREVER);
4290 my_packet -> nx_packet_append_ptr = my_packet -> nx_packet_prepend_ptr + ctrlInfo_ptr -> PacketSize;
4291
4292 payload_ptr = (udp_payload *)my_packet -> nx_packet_prepend_ptr;
4293 payload_ptr -> udp_id = udp_id;
4294 payload_ptr -> tv_sec = _tx_timer_system_clock / NX_IP_PERIODIC_RATE;
4295 payload_ptr -> tv_usec = _tx_timer_system_clock / NX_IP_PERIODIC_RATE * 1000000;
4296
4297 tmp = (ULONG)payload_ptr -> udp_id;
4298 NX_CHANGE_ULONG_ENDIAN(tmp);
4299 payload_ptr -> udp_id = (int)tmp;
4300
4301 NX_CHANGE_ULONG_ENDIAN(payload_ptr -> tv_sec);
4302 NX_CHANGE_ULONG_ENDIAN(payload_ptr -> tv_usec);
4303
4304 /* Adjust the write pointer. */
4305 my_packet -> nx_packet_length = (UINT)(ctrlInfo_ptr -> PacketSize);
4306
4307 /* Send the UDP packet. */
4308 status = nxd_udp_socket_send(&udp_client_socket, my_packet, &server_ip, ctrlInfo_ptr -> port);
4309
4310 /* Check the status. */
4311 if (status)
4312 {
4313
4314 /* Release the packet. */
4315 nx_packet_release(my_packet);
4316 return;
4317 }
4318 }
4319
nx_iperf_thread_udp_tx_entry(ULONG thread_input)4320 void nx_iperf_thread_udp_tx_entry(ULONG thread_input)
4321 {
4322 UINT status;
4323 ULONG expire_time;
4324 ctrl_info *ctrlInfo_ptr;
4325 NX_PACKET *my_packet;
4326 int i;
4327 long udp_id;
4328
4329 /* Initialize the value. */
4330 udp_id = 0;
4331 ctrlInfo_ptr = (ctrl_info *)thread_input;
4332
4333 #if defined(TX_ENABLE_EXECUTION_CHANGE_NOTIFY) || defined(TX_EXECUTION_PROFILE_ENABLE)
4334 thread_time = 0;
4335 isr_time = 0;
4336 idle_time = 0;
4337 #endif
4338
4339 ctrlInfo_ptr -> PacketsTxed = 0;
4340 ctrlInfo_ptr -> BytesTxed = 0;
4341 ctrlInfo_ptr -> ThroughPut = 0;
4342 ctrlInfo_ptr -> StartTime = 0;
4343 ctrlInfo_ptr -> RunTime = 0;
4344 ctrlInfo_ptr -> ErrorCode = 0;
4345
4346 /* UDP Transmit Test Starts in 2 seconds. */
4347 tx_thread_sleep(200);
4348
4349 /* Bind the UDP socket to the IP port. */
4350 status = nx_udp_socket_bind(&udp_client_socket, NX_ANY_PORT, TX_WAIT_FOREVER);
4351
4352 /* Check status. */
4353 if (status)
4354 {
4355 error_counter++;
4356 return;
4357 }
4358
4359 /* Do not calculate checksum for UDP. */
4360 nx_udp_socket_checksum_disable(&udp_client_socket);
4361
4362 /* Set the test start time. */
4363 ctrlInfo_ptr -> StartTime = tx_time_get();
4364 expire_time = (ULONG)(ctrlInfo_ptr -> StartTime + (ctrlInfo_ptr -> TestTime));
4365
4366 #if defined(TX_ENABLE_EXECUTION_CHANGE_NOTIFY) || defined(TX_EXECUTION_PROFILE_ENABLE)
4367 _tx_execution_thread_total_time_reset();
4368 _tx_execution_isr_time_reset();
4369 _tx_execution_idle_time_reset();
4370 #endif
4371
4372 while (tx_time_get() < expire_time)
4373 {
4374
4375 /* Write ABCs into the packet payload! */
4376 nx_iperf_send_udp_packet(udp_id, ctrlInfo_ptr);
4377
4378 /* Update the ID. */
4379 udp_id = (udp_id + 1) & 0x7FFFFFFF;
4380
4381 /* Update the counter. */
4382 ctrlInfo_ptr -> PacketsTxed++;
4383 ctrlInfo_ptr -> BytesTxed += ctrlInfo_ptr -> PacketSize;
4384 }
4385
4386 #if defined(TX_ENABLE_EXECUTION_CHANGE_NOTIFY) || defined(TX_EXECUTION_PROFILE_ENABLE)
4387 _tx_execution_thread_total_time_get(&thread_time);
4388 _tx_execution_isr_time_get(&isr_time);
4389 _tx_execution_idle_time_get(&idle_time);
4390 #endif
4391
4392 /* Calculate the test time and Throughput. */
4393 ctrlInfo_ptr -> RunTime = tx_time_get() - ctrlInfo_ptr -> StartTime;
4394 ctrlInfo_ptr -> ThroughPut = ctrlInfo_ptr -> BytesTxed / ctrlInfo_ptr -> RunTime * NX_IP_PERIODIC_RATE / 125000;
4395
4396 #if defined(TX_ENABLE_EXECUTION_CHANGE_NOTIFY) || defined(TX_EXECUTION_PROFILE_ENABLE)
4397 ctrlInfo_ptr -> idleTime = (ULONG)((unsigned long long)idle_time * 100 / ((unsigned long long)thread_time + (unsigned long long)isr_time + (unsigned long long)idle_time));
4398 #endif
4399
4400 if (error_counter)
4401 {
4402 ctrlInfo_ptr -> ErrorCode = error_counter;
4403 }
4404
4405 ctrlInfo_ptr -> PacketSize = 100;
4406 for (i = 0; i < 10; i++)
4407 {
4408 /* Send the end of the test signal*/
4409 nx_iperf_send_udp_packet((0 - udp_id), ctrlInfo_ptr);
4410
4411 /* Receive the packet. s*/
4412 if (nx_udp_socket_receive(&udp_client_socket, &my_packet, 10) == NX_SUCCESS)
4413 {
4414 nx_packet_release(my_packet);
4415 break;
4416 }
4417 }
4418
4419 /* Unbind the socket. */
4420 nx_udp_socket_unbind(&udp_client_socket);
4421 }
4422
nx_iperf_udp_tx_cleanup(void)4423 void nx_iperf_udp_tx_cleanup(void)
4424 {
4425 nx_udp_socket_unbind(&udp_client_socket);
4426 tx_thread_terminate(&thread_udp_tx_iperf);
4427 tx_thread_delete(&thread_udp_tx_iperf);
4428 }
4429
nx_iperf_udp_tx_test(UCHAR * stack_space,ULONG stack_size)4430 void nx_iperf_udp_tx_test(UCHAR *stack_space, ULONG stack_size)
4431 {
4432 UINT status;
4433
4434 status = tx_thread_create(&thread_udp_tx_iperf, "thread udp tx",
4435 nx_iperf_thread_udp_tx_entry,
4436 (ULONG)&nx_iperf_ctrl_info,
4437 stack_space, stack_size, NX_WEB_HTTP_SERVER_PRIORITY + 1, NX_WEB_HTTP_SERVER_PRIORITY + 1,
4438 TX_NO_TIME_SLICE, TX_AUTO_START);
4439
4440 if (status)
4441 {
4442 nx_iperf_ctrl_info.ErrorCode = 1;
4443 }
4444 return;
4445 }
4446
nx_iperf_udp_client_socket_vlan_priority_set(UCHAR vlan_priority)4447 void nx_iperf_udp_client_socket_vlan_priority_set(UCHAR vlan_priority)
4448 {
4449 if (vlan_priority <= NX_VLAN_PRIORITY_MAX)
4450 {
4451 udp_client_socket_vlan_priority = vlan_priority;
4452 }
4453 }
4454
nx_iperf_tcp_client_socket_vlan_priority_set(UCHAR vlan_priority)4455 void nx_iperf_tcp_client_socket_vlan_priority_set(UCHAR vlan_priority)
4456 {
4457 if (vlan_priority <= NX_VLAN_PRIORITY_MAX)
4458 {
4459 tcp_client_socket_vlan_priority = vlan_priority;
4460 }
4461 }
4462