blob: 00791fd7798be55aee48d46811b958b63064b553 [file] [log] [blame]
// no output from test machine
// https://syzkaller.appspot.com/bug?id=8bf9a9a2638fc9e95348d4398decb1b5c80beecb
// status:invalid
// autogenerated by syzkaller (http://github.com/google/syzkaller)
#define _GNU_SOURCE
#include <arpa/inet.h>
#include <errno.h>
#include <errno.h>
#include <fcntl.h>
#include <linux/if.h>
#include <linux/if_ether.h>
#include <linux/if_tun.h>
#include <linux/ip.h>
#include <linux/tcp.h>
#include <net/if_arp.h>
#include <pthread.h>
#include <signal.h>
#include <stdarg.h>
#include <stdarg.h>
#include <stdbool.h>
#include <stdint.h>
#include <stdio.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdlib.h>
#include <string.h>
#include <sys/ioctl.h>
#include <sys/prctl.h>
#include <sys/stat.h>
#include <sys/syscall.h>
#include <sys/time.h>
#include <sys/wait.h>
#include <time.h>
#include <unistd.h>
const int kFailStatus = 67;
const int kRetryStatus = 69;
__attribute__((noreturn)) static void doexit(int status)
{
volatile unsigned i;
syscall(__NR_exit_group, status);
for (i = 0;; i++) {
}
}
__attribute__((noreturn)) static void fail(const char* msg, ...)
{
int e = errno;
fflush(stdout);
va_list args;
va_start(args, msg);
vfprintf(stderr, msg, args);
va_end(args);
fprintf(stderr, " (errno %d)\n", e);
doexit((e == ENOMEM || e == EAGAIN) ? kRetryStatus : kFailStatus);
}
__attribute__((noreturn)) static void exitf(const char* msg, ...)
{
int e = errno;
fflush(stdout);
va_list args;
va_start(args, msg);
vfprintf(stderr, msg, args);
va_end(args);
fprintf(stderr, " (errno %d)\n", e);
doexit(kRetryStatus);
}
#define BITMASK_LEN(type, bf_len) (type)((1ull << (bf_len)) - 1)
#define BITMASK_LEN_OFF(type, bf_off, bf_len) \
(type)(BITMASK_LEN(type, (bf_len)) << (bf_off))
#define STORE_BY_BITMASK(type, addr, val, bf_off, bf_len) \
if ((bf_off) == 0 && (bf_len) == 0) { \
*(type*)(addr) = (type)(val); \
} else { \
type new_val = *(type*)(addr); \
new_val &= ~BITMASK_LEN_OFF(type, (bf_off), (bf_len)); \
new_val |= ((type)(val)&BITMASK_LEN(type, (bf_len))) << (bf_off); \
*(type*)(addr) = new_val; \
}
static void vsnprintf_check(char* str, size_t size, const char* format,
va_list args)
{
int rv;
rv = vsnprintf(str, size, format, args);
if (rv < 0)
fail("tun: snprintf failed");
if ((size_t)rv >= size)
fail("tun: string '%s...' doesn't fit into buffer", str);
}
static void snprintf_check(char* str, size_t size, const char* format,
...)
{
va_list args;
va_start(args, format);
vsnprintf_check(str, size, format, args);
va_end(args);
}
#define COMMAND_MAX_LEN 128
static void execute_command(const char* format, ...)
{
va_list args;
char command[COMMAND_MAX_LEN];
int rv;
va_start(args, format);
vsnprintf_check(command, sizeof(command), format, args);
rv = system(command);
if (rv != 0)
fail("tun: command \"%s\" failed with code %d", &command[0], rv);
va_end(args);
}
static int tunfd = -1;
#define SYZ_TUN_MAX_PACKET_SIZE 1000
#define MAX_PIDS 32
#define ADDR_MAX_LEN 32
#define LOCAL_MAC "aa:aa:aa:aa:aa:%02hx"
#define REMOTE_MAC "bb:bb:bb:bb:bb:%02hx"
#define LOCAL_IPV4 "172.20.%d.170"
#define REMOTE_IPV4 "172.20.%d.187"
#define LOCAL_IPV6 "fe80::%02hxaa"
#define REMOTE_IPV6 "fe80::%02hxbb"
static void initialize_tun(uint64_t pid)
{
if (pid >= MAX_PIDS)
fail("tun: no more than %d executors", MAX_PIDS);
int id = pid;
tunfd = open("/dev/net/tun", O_RDWR | O_NONBLOCK);
if (tunfd == -1)
fail("tun: can't open /dev/net/tun");
char iface[IFNAMSIZ];
snprintf_check(iface, sizeof(iface), "syz%d", id);
struct ifreq ifr;
memset(&ifr, 0, sizeof(ifr));
strncpy(ifr.ifr_name, iface, IFNAMSIZ);
ifr.ifr_flags = IFF_TAP | IFF_NO_PI;
if (ioctl(tunfd, TUNSETIFF, (void*)&ifr) < 0)
fail("tun: ioctl(TUNSETIFF) failed");
char local_mac[ADDR_MAX_LEN];
snprintf_check(local_mac, sizeof(local_mac), LOCAL_MAC, id);
char remote_mac[ADDR_MAX_LEN];
snprintf_check(remote_mac, sizeof(remote_mac), REMOTE_MAC, id);
char local_ipv4[ADDR_MAX_LEN];
snprintf_check(local_ipv4, sizeof(local_ipv4), LOCAL_IPV4, id);
char remote_ipv4[ADDR_MAX_LEN];
snprintf_check(remote_ipv4, sizeof(remote_ipv4), REMOTE_IPV4, id);
char local_ipv6[ADDR_MAX_LEN];
snprintf_check(local_ipv6, sizeof(local_ipv6), LOCAL_IPV6, id);
char remote_ipv6[ADDR_MAX_LEN];
snprintf_check(remote_ipv6, sizeof(remote_ipv6), REMOTE_IPV6, id);
execute_command("sysctl -w net.ipv6.conf.%s.accept_dad=0", iface);
execute_command("sysctl -w net.ipv6.conf.%s.router_solicitations=0",
iface);
execute_command("ip link set dev %s address %s", iface, local_mac);
execute_command("ip addr add %s/24 dev %s", local_ipv4, iface);
execute_command("ip -6 addr add %s/120 dev %s", local_ipv6, iface);
execute_command("ip neigh add %s lladdr %s dev %s nud permanent",
remote_ipv4, remote_mac, iface);
execute_command("ip -6 neigh add %s lladdr %s dev %s nud permanent",
remote_ipv6, remote_mac, iface);
execute_command("ip link set dev %s up", iface);
}
static void setup_tun(uint64_t pid, bool enable_tun)
{
if (enable_tun)
initialize_tun(pid);
}
static int read_tun(char* data, int size)
{
int rv = read(tunfd, data, size);
if (rv < 0) {
if (errno == EAGAIN)
return -1;
fail("tun: read failed with %d, errno: %d", rv, errno);
}
return rv;
}
struct csum_inet {
uint32_t acc;
};
static void csum_inet_init(struct csum_inet* csum)
{
csum->acc = 0;
}
static void csum_inet_update(struct csum_inet* csum,
const uint8_t* data, size_t length)
{
if (length == 0)
return;
size_t i;
for (i = 0; i < length - 1; i += 2)
csum->acc += *(uint16_t*)&data[i];
if (length & 1)
csum->acc += (uint16_t)data[length - 1];
while (csum->acc > 0xffff)
csum->acc = (csum->acc & 0xffff) + (csum->acc >> 16);
}
static uint16_t csum_inet_digest(struct csum_inet* csum)
{
return ~csum->acc;
}
static uintptr_t syz_emit_ethernet(uintptr_t a0, uintptr_t a1)
{
if (tunfd < 0)
return (uintptr_t)-1;
int64_t length = a0;
char* data = (char*)a1;
return write(tunfd, data, length);
}
static void flush_tun()
{
char data[SYZ_TUN_MAX_PACKET_SIZE];
while (read_tun(&data[0], sizeof(data)) != -1)
;
}
static uint64_t current_time_ms()
{
struct timespec ts;
if (clock_gettime(CLOCK_MONOTONIC, &ts))
fail("clock_gettime failed");
return (uint64_t)ts.tv_sec * 1000 + (uint64_t)ts.tv_nsec / 1000000;
}
static void test();
void loop()
{
int iter;
for (iter = 0;; iter++) {
int pid = fork();
if (pid < 0)
fail("clone failed");
if (pid == 0) {
prctl(PR_SET_PDEATHSIG, SIGKILL, 0, 0, 0);
setpgrp();
flush_tun();
test();
doexit(0);
}
int status = 0;
uint64_t start = current_time_ms();
for (;;) {
int res = waitpid(-1, &status, __WALL | WNOHANG);
if (res == pid)
break;
usleep(1000);
if (current_time_ms() - start > 5 * 1000) {
kill(-pid, SIGKILL);
kill(pid, SIGKILL);
while (waitpid(-1, &status, __WALL) != pid) {
}
break;
}
}
}
}
long r[105];
void* thr(void* arg)
{
switch ((long)arg) {
case 0:
r[0] = syscall(__NR_mmap, 0x20000000ul, 0xf07000ul, 0x3ul, 0x32ul,
0xfffffffffffffffful, 0x0ul);
break;
case 1:
r[1] = syscall(__NR_socket, 0x2ul, 0x2ul, 0x0ul);
break;
case 2:
*(uint16_t*)0x20f01000 = (uint16_t)0x2;
*(uint16_t*)0x20f01002 = (uint16_t)0x224e;
*(uint32_t*)0x20f01004 = (uint32_t)0x10000e0;
*(uint8_t*)0x20f01008 = (uint8_t)0x0;
*(uint8_t*)0x20f01009 = (uint8_t)0x0;
*(uint8_t*)0x20f0100a = (uint8_t)0x0;
*(uint8_t*)0x20f0100b = (uint8_t)0x0;
*(uint8_t*)0x20f0100c = (uint8_t)0x0;
*(uint8_t*)0x20f0100d = (uint8_t)0x0;
*(uint8_t*)0x20f0100e = (uint8_t)0x0;
*(uint8_t*)0x20f0100f = (uint8_t)0x0;
r[13] = syscall(__NR_bind, r[1], 0x20f01000ul, 0x10ul);
break;
case 3:
*(uint16_t*)0x20647000 = (uint16_t)0x2;
*(uint16_t*)0x20647002 = (uint16_t)0x204e;
*(uint32_t*)0x20647004 = (uint32_t)0xfeffffff;
*(uint8_t*)0x20647008 = (uint8_t)0x0;
*(uint8_t*)0x20647009 = (uint8_t)0x0;
*(uint8_t*)0x2064700a = (uint8_t)0x0;
*(uint8_t*)0x2064700b = (uint8_t)0x0;
*(uint8_t*)0x2064700c = (uint8_t)0x0;
*(uint8_t*)0x2064700d = (uint8_t)0x0;
*(uint8_t*)0x2064700e = (uint8_t)0x0;
*(uint8_t*)0x2064700f = (uint8_t)0x0;
r[25] = syscall(__NR_recvfrom, r[1], 0x20f04000ul, 0x0ul, 0x2ul,
0x20647000ul, 0x10ul);
break;
case 4:
*(uint8_t*)0x20df2fce = (uint8_t)0xbb;
*(uint8_t*)0x20df2fcf = (uint8_t)0xbb;
*(uint8_t*)0x20df2fd0 = (uint8_t)0xbb;
*(uint8_t*)0x20df2fd1 = (uint8_t)0xbb;
*(uint8_t*)0x20df2fd2 = (uint8_t)0xbb;
*(uint8_t*)0x20df2fd3 = (uint8_t)0x0;
*(uint8_t*)0x20df2fd4 = (uint8_t)0xbb;
*(uint8_t*)0x20df2fd5 = (uint8_t)0xbb;
*(uint8_t*)0x20df2fd6 = (uint8_t)0xbb;
*(uint8_t*)0x20df2fd7 = (uint8_t)0xbb;
*(uint8_t*)0x20df2fd8 = (uint8_t)0xbb;
*(uint8_t*)0x20df2fd9 = (uint8_t)0x0;
*(uint16_t*)0x20df2fda = (uint16_t)0x8;
STORE_BY_BITMASK(uint8_t, 0x20df2fdc, 0x5, 0, 4);
STORE_BY_BITMASK(uint8_t, 0x20df2fdc, 0x4, 4, 4);
STORE_BY_BITMASK(uint8_t, 0x20df2fdd, 0x101, 0, 2);
STORE_BY_BITMASK(uint8_t, 0x20df2fdd, 0x0, 2, 6);
*(uint16_t*)0x20df2fde = (uint16_t)0x2310;
*(uint16_t*)0x20df2fe0 = (uint16_t)0x6400;
*(uint16_t*)0x20df2fe2 = (uint16_t)0x0;
*(uint8_t*)0x20df2fe4 = (uint8_t)0x2;
*(uint8_t*)0x20df2fe5 = (uint8_t)0x11;
*(uint16_t*)0x20df2fe6 = (uint16_t)0x0;
*(uint8_t*)0x20df2fe8 = (uint8_t)0xac;
*(uint8_t*)0x20df2fe9 = (uint8_t)0x14;
*(uint8_t*)0x20df2fea = (uint8_t)0x0;
*(uint8_t*)0x20df2feb = (uint8_t)0xbb;
*(uint32_t*)0x20df2fec = (uint32_t)0x10000e0;
*(uint16_t*)0x20df2ff0 = (uint16_t)0x204e;
*(uint16_t*)0x20df2ff2 = (uint16_t)0x224e;
*(uint8_t*)0x20df2ff4 = (uint8_t)0x4;
STORE_BY_BITMASK(uint8_t, 0x20df2ff5, 0x1, 0, 4);
STORE_BY_BITMASK(uint8_t, 0x20df2ff5, 0x51, 4, 4);
*(uint16_t*)0x20df2ff6 = (uint16_t)0x0;
STORE_BY_BITMASK(uint8_t, 0x20df2ff8, 0x0, 0, 1);
STORE_BY_BITMASK(uint8_t, 0x20df2ff8, 0xb, 1, 4);
STORE_BY_BITMASK(uint8_t, 0x20df2ff8, 0x6, 5, 3);
memcpy((void*)0x20df2ff9, "\xd2\x2b\x30", 3);
*(uint8_t*)0x20df2ffc = (uint8_t)0x10000;
memcpy((void*)0x20df2ffd, "\x29\x9d\x28", 3);
memcpy(
(void*)0x20df3000,
"\x06\x29\x9a\x9b\x46\x91\x35\xfa\xec\x24\x89\x45\x34\xaf\xf5"
"\x6d\xe2\x6a\xd5\x40\x2e\xe0\xe7\x20\x04\x4e\x3d\x78\xe1\x61"
"\x23\xb9\xd9\xb8\xca\x3d\xc8\xc2\xfe\xa5\xff\x3d\x08\xf4\x09"
"\x8d\x53\x62\xf0\xb8\x1b\x8b\x7f\x04\x28\x64\x89\x03\x18\x3e"
"\x20\x2e\x69\xfd\x7a\x75\xdc\x05\x79\xab\x10\xb9\x65\x54\x01"
"\xd9\x30\x81\x26\xae\x0b\x65\x12\x95\xc3\x24\xe2\xfc\xaf\xa9"
"\xc8\x49\x21\x32\xdf\x00\x3f\x4d\x04\x7d\xa7\x19\xaa\x28\x9f"
"\x55\x9f\xf2\x34\x82\x11\x20\xec\xf5\x5e\xf0\x64\x6e\xf3\x64"
"\x8b\x20\x27\x79\x92\xd2\xb0\xe6\xe0\xb1\x45\xec\x61\x54\x6b"
"\xf2\x6f\x2c\xdb\xa0\x2f\x46\x9f\xef\xec\x03\x69\x83\xe3\x9e"
"\x02\xb0\xd7\x06\xc2\x24\xfa\x44\x6b\x9d\x1d\xb3\xed\xb8\x08"
"\xdf\x9a\x1e\x79\xa2\x69\xb3\x06\x3f\x67\x1c\xc8\xc2\xad\x25"
"\x6b\x11\x56\x28\x7f\x7a\x7d\x74\xfc\x77\x57\x29\x7b\xd3\x00"
"\x51\x09\x51\x02\x94\x3f\x6e\xb4\x87\x45\x68\xa4\xe1\x28\x9e"
"\xb4\x04\x37\xdf\x08\xc6\x03\x31\x80\xc1\x89\x0d\x5e\x0c\x80"
"\x58\xac\xfa\x56\x63\xb5\x7c\x10\x1f\x3c\xdc\x45\xae\xb4\x3c"
"\x0b\xe1\xfa\xd9\xad\x2b\x27\x41\x96\xd1\xa5\xf7\xd1\xc0\x1d"
"\x3a\xdb\x4a\x1a\xbe\x54\xf5\xd5\xf6\xe6\xa0\x2c\xc7\x59\x07"
"\x81\xe3\xd6\x2f\xc1\x52\x74\x31\x5d\x24\x69\x61\xfc\x44\x8d"
"\x74\x2b\x85\xe0\x22\x9a\xf7\xcb\xd5\x01\xd6\x38\x4c\x00\x9d"
"\x9c\xd2\xfa\xfc\x9d\xfc\xfb\xbf\x4c\x63\x3c\x3e\xd4\xed\x68"
"\xb1\xbf\x2a\xeb\xaf\x35\x24\xe2\x14\x5f\x84\x14\xaf\xb9\x42"
"\xa8\x7c\xe9\x49\xaa\x8d\x42\xf7\x0f\x4a\x81\xdb\x54\x0d\xd7"
"\x37\x53\x16\xb5\x14\x4f\x1b\x97\xd6\xb4\x4b\xf9\xd2\x4b\x2d"
"\x0f\xf3\xaa\xbf\x78\xb3\xf9\x50\xcc\xf4\x9f\x3a\x2e\x9f\xd9"
"\x1a\x8e\x37\x7e\xd5\x20\x9e\xfd\x42\x34\xc2\x11\x82\x66\x91"
"\x3d\x36\x41\x6f\xcc\x39\x4b\xd2\xd1\x6d\xfb\xd2\x5b\x84\x12"
"\x4e\x86\x3c\xcb\xe8\x7d\xde\xcc\xd1\x90\xb8\xc7\xa1\x42\xe0"
"\xcd\x8c\xa5\xfe\xd7\xbb\x21\x6e\x59\x84\x35\xc9\xf5\x8d\x16"
"\xe2\x6b\xad\xf7\x38\xa7\x80\x5b\xb6\x07\xe7\x87\x1a\x84\xeb"
"\xb2\xcc\xc2\x1b\x08\x90\x9f\xaa\xa0\x79\x34\xe4\x29\xd9\x95"
"\xa5\xb8\x62\x98\x1a\xd6\x92\xa9\x07\x67\xb3\x12\xed\xc6\x2d"
"\x05\x6f\xe6\x27\xbf\xba\x4a\xf7\x26\x52\xae\x4f\x78\x49\xce"
"\x19\x12\xab\xec\x3a\x2f\x3f\x73\xba\x44\x67\xf5\x95\xd7\x6d"
"\x27\xb2\x1a\x86\xe2\xcc\x05\x67\x1a\x29\x8c\x1a\x83\x5d\xbb"
"\x98\xd5\x35\x4f\x97\x52\xf0\x29\x6c\x9d\xe6\x69\x81\x86\x91"
"\xda\xff\x8b\xde\xdd\x58\x50\xda\x12\x44\xa7\xec\xab\xdb\x3d"
"\x9e\x0d\x8a\xd3\x6d\x4f\xb9\x1d\x12\xab\x40\x55\xb6\x0c\xbe"
"\xf4\xeb\x6a\x8f\x67\x4c\x25\xab\xe6\xa0\x43\x24\xbc\x14\x65"
"\x16\x6f\xfc\x22\x2e\xfd\x17\xe0\x74\xb2\x35\x90\xf5\x21\xb9"
"\x5e\x6e\x6c\x45\xa4\x10\x1e\xb1\xb7\xdd\x93\x56\xdb\xb6\xd5"
"\x40\x31\x61\x7c\x88\xc5\xaa\x82\x32\x86\x6c\x17\xe2\x2b\xe0"
"\xf2\x4f\x7c\x4d\x6c\x8b\x21\x9c\x6d\xd3\x09\x96\x32\x67\xfc"
"\x2d\x45\xd8\x58\x96\x2c\x88\x63\x74\x00\xee\xfa\x50\x4d\x90"
"\x87\x8e\xf6\xc7\x3a\x59\xae\xed\x68\xb4\xd0\x4b\xe3\xd7\xd8"
"\xd5\x2f\x22\x07\xec\x91\xcd\xc1\xae\x5f\xf3\x80\x9b\x1d\xda"
"\x36\x06\x04\xaf\x88\x54\xa8\x9f\x05\x42\xa0\x39\x84\x75\x17"
"\xf9\x0b\xbd\xfb\x16\xd6\x97\x8e\x46\x72\x90\x38\x19\x07\x74"
"\x0f\xe3\xdb\x16\x3b\xb6\x7f\x93\xb1\xc7\x24\x33\x4b\xe4\xcb"
"\x09\x8b\xda\x91\x1a\xb6\x03\x0c\x46\xbe\x85\xa8\x97\xf9\xb1"
"\xdd\xb3\x30\x6f\xf2\xca\xc6\xc2\x6a\x21\xfd\xe8\x76\xa8\x94"
"\xe3\xe7\xeb\xcc\x00\x63\xf4\x19\xc9\x5d\xed\x5d\xad\x1b\xfb"
"\xd5\x3f\x89\xef\x75\xc7\xac\x4d\xdd\x5b\x90\x9a\xa4\x09\x8f"
"\x80\xd4\x12\xc2\x51\x08\x50\xe8\x5c\x41\x2c\x01\xdd\x54\x1e"
"\x08\xcc\xf9\x7f\xe0\xb4\x7d\x91\x5c\x87\xb9\x1b\x0b\xab\x1d"
"\x2b\x9c\xc7\xac\x6b\x96\x53\xc5\xfc\xb4\x74\x75\x60\xbd\x65"
"\xd6\x49\x9a\x39\x99\x1e\xcc\x72\x2d\x20\x84\x94\xcc\x6a\x66"
"\x53\xe5\x0a\x0d\x41\xbc\x40\x68\xd9\x61\xfa\x32\x07\x2b\x65"
"\xec\x07\x5a\x8a\x35\xc5\x4d\x25\xf3\xf4\xe1\x78\x2f\x08\x87"
"\x39\xdb\x3e\xa2\x2d\xa5\x09\xfc\xf1\x2f\x63\x54\x20\x64\xe2"
"\xb7\x2d\xb6\x2a\x9c\x7c\xea\x08\x5e\x1c\x98\x0a\xcf\x05\x56"
"\x7e\xca\x39\x6b\x19\xc6\xc1\x48\xeb\xb2\x4f\x23\x36\x12\xdc"
"\x65\xad\x15\x9c\x3d\xb0\x09\xe2\xd5\x98\x37\x13\x42\x13\x43"
"\xf2\x22\x59\xb0\x84\x2f\xdf\x24\xe5\xe3\x76\xc3\xaf\x0e\x17"
"\x71\xd2\x25\x2f\xd8\x4f\xdd\x98\x48\x52\x5f\x7e\xf6\x9a\x89"
"\x51\x6a\xb6\x34\x39\x5d\xd5\x31\x64\xce\x0c\x1b\x92\x2e\x35"
"\x5b\x3c\x36\x20\x66\x41\xa8\x79\xed\xc0\x03\x7d\x01\x6f\x06"
"\x1d\x52\xc6\xdc\xe7\x5e\xa3\x69\x3d\x40\xd8\x2e\x3c\x63\x75"
"\x68\x8a\x6a\xa4\x54\x72\x4f\xbf\x56\x6b\xc1\x41\xdd\x1f\x57"
"\xd0\x2d\xca\xad\xdc\x79\xe3\xe2\xce\xa2\x10\x02\x04\x6d\xb8"
"\x63\x22\xe3\x5c\x59\x0d\xdb\x27\x94\x6f\x69\xe6\xec\x30\x45"
"\x44\x83\xc3\x65\xfd\xec\x58\xf6\xc1\xb3\x80\x76\x18\xbe\xaa"
"\xe5\xbc\xd2\x1b\xb9\xbf\xac\xe5\x23\x64\xb9\x1c\x42\x03\x12"
"\x31\xfd\xcc\x7b\x15\x11\x7a\x84\xa9\xff\xb1\x36\xe3\xb4\xe9"
"\x1b\x01\xcd\xcb\xdf\x72\xa6\xc0\xd1\xe6\xf9\x0f\xec\x8a\xfc"
"\xe7\x94\xf2\x6d\x69\x67\xc8\xda\x92\x75\xb8\x70\xb3\xea\x5c"
"\x73\xc8\x4b\x56\x89\xe1\x1b\x10\xc4\xd8\x04\xd1\x4d\x31\x52"
"\x42\x4d\x2f\x25\x86\x19\xe0\xcc\xb3\x94\xd0\x5e\x7f\x1d\x72"
"\x33\x0f\x23\x0d\xe4\xc3\xe8\x90\x68\x55\x98\xc5\x68\xbe\xb6"
"\xb5\xa6\x99\xa2\x87\x4d\xd0\x30\x36\xbd\x6a\x19\xb0\x66\x03"
"\xaa\xc4\x12\xf5\xa2\x37\x55\x9c\x1e\x76\x28\x79\xa8\x55\xc4"
"\xf9\xf0\xd7\x48\xfd\x0f\x85\xc4\x60\x40\xa1\x6d\xa9\x21\x45"
"\xe1\x95\x84\x88\xb4\x50\x10\xcb\x9f\x59\xe5\xb4\xde\x80\x1b"
"\x63\x6d\x93\xe8\x9c\x1e\x30\x67\xa2\xae\x89\xfa\xfb\x94\x7f"
"\x07\x2f\x23\x56\x8c\x84\xb1\xed\xd0\x9f\x41\x28\x1a\xb1\x6b"
"\x69\x23\xd6\x69\x35\x9e\xb4\xbc\x8d\xc6\x70\x2a\xd1\xa6\xf0"
"\xea\xc2\x68\xe8\x25\x88\x7f\x8b\x78\x54\x6f\xdf\xc0\x69\xe1"
"\xe2\x62\xf8\x09\xb2\x40\xc5\xd6\x84\xa0\xde\xe5\x78\xa7\x90"
"\x4b\xe0\x49\x9b\x3b\xeb\xd0\x69\xf1\xb7\x3e\xd0\x25\xe8\x79"
"\x9d\xf7\x69\x78\xcf\xa7\x30\x07\x77\x32\x88\xdc\x6a\x83\x83"
"\x5f\x7d\x2f\x8d\x53\xcc\xcd\x97\x73\xdc\x55\x16\x2e\x7f\xde"
"\xac\x24\x10\x19\x74\x75\x10\xf8\xf8\x66\x51\xa9\x62\xa5\x4f"
"\xad\x12\xd6\x78\xae\xe9\xc6\xb4\xb1\x30\xb0\x46\xad\xa6\x5d"
"\xca\xe6\x8c\x81\x38\xfc\xfd\xea\x3b\xdb\x9c\xe3\x7d\x08\x59"
"\x0f\x2c\x88\x75\xa5\x9f\x74\x91\xae\x15\x8f\xa4\x8c\x82\x62"
"\xa9\xb8\x0c\x5e\x58\xdb\x43\xb2\xb6\xa8\x79\x1e\x2b\x24\x23"
"\x7b\xd1\xe7\xa8\x6f\xe0\x72\xba\x0c\x83\xca\x02\x74\x64\x38"
"\x95\xdf\x3b\x4a\x73\x04\x09\xda\x33\xdb\x3d\x77\x7a\xaa\x81"
"\x89\xc7\xfe\xdd\xcb\x3d\x5a\x8e\x3f\xb0\x27\x54\x3b\x75\x9f"
"\x9c\x49\xa5\x72\x20\xe0\xd0\x37\xea\xc4\x67\x8e\xe6\xab\x6a"
"\x9a\x50\xa8\x35\xb5\xe8\x6b\x6c\x7e\xc7\xf5\x3c\xd6\xd0\xbc"
"\x3c\x9c\xb4\x6e\x3c\x98\x3f\x1a\xe9\x6a\xd2\xbc\x75\x4a\x42"
"\xe6\x47\xce\x2a\x65\x36\x33\xf1\x31\xc6\x89\x0e\x4f\x4b\x0b"
"\xef\x4a\xa2\x7c\x65\xe9\xad\x28\xc0\x0e\x6c\x11\xf5\x50\x4f"
"\xb6\x8a\x67\xad\x71\x77\x00\x96\x5a\xa4\xbb\x51\xa4\x4c\x77"
"\x08\xbc\x40\x61\x58\x92\x93\x04\xaa\x7c\x0a\xbe\xfe\xb4\x16"
"\xdc\x76\x9d\x66\x72\x77\xd1\x97\x27\x07\x8a\x57\xe7\x49\x12"
"\xa9\x7d\x1b\xf8\xd8\x7e\xed\xfa\xf7\xe4\x5f\x90\x2b\x45\xa7"
"\xc3\x5c\x8e\xb9\x92\x02\xbc\x56\x37\x3c\xc8\x4f\xa5\xd6\x85"
"\xeb\x9f\xee\x01\x30\x71\x44\xa3\xda\xa6\xd5\xdf\x34\x8c\x31"
"\x48\x60\xaf\x17\x43\x31\x12\x0b\xaa\x10\x0b\x3e\x8c\x6e\x41"
"\x15\xc6\xb0\xd2\xbc\xc7\x7c\x7f\xc0\x4f\x39\xc7\xf5\xda\x3f"
"\xbb\xd9\x86\x45\x47\x1f\x8a\x5c\x46\xad\x68\xd5\x3b\x8a\xb0"
"\xe6\x1b\xc6\xfb\x0f\x70\x89\xd8\x10\x2d\xcb\xb9\xf3\xa3\xd4"
"\x23\xd5\xb1\xb5\x9b\x92\x8b\xe2\x40\x85\xec\xf6\x71\xc2\x45"
"\x4b\x31\xa5\xcb\xc5\x46\x5a\x98\xfb\x48\x9d\x42\x06\x51\x0c"
"\x1f\x39\xfa\x7b\xe9\x39\x3f\x06\xa5\xe4\xc8\x92\x43\x65\xff"
"\x4e\xa4\x6d\x97\xd6\xc4\x62\x2d\x00\x5c\x71\xde\x47\x5a\x99"
"\x3f\x3b\xf9\xcf\xc5\xa8\xe8\xf8\x8f\x79\x62\x8a\xde\xcc\x3e"
"\x25\x55\x02\x05\x73\x24\xf2\x3f\xd8\xbd\x70\xb8\xa3\xed\xab"
"\x08\xad\xff\xf7\x35\x2e\x0f\xfb\x45\xe6\xd3\xfd\xdf\xaa\x6e"
"\xc1\x33\x69\xf2\xf8\x40\x5f\xda\x84\x70\xbe\x1d\xf2\xd6\x56"
"\x91\xf0\x24\x33\x89\xf3\x52\x0c\x84\x1f\x0f\xf5\xcb\x1c\x44"
"\xa5\x5d\xbc\x9b\xc1\x7c\xbc\x00\x26\xec\x46\x9a\x3b\x25\xa1"
"\x62\xa0\xd7\x72\x31\xe6\x7a\xa6\xf4\xed\xb3\x8b\x3b\x44\xca"
"\x86\x8a\x3a\xc3\x2f\x86\x62\xfc\x55\x56\x2f\x96\x99\x1b\x1e"
"\xf1\xb6\xd2\x95\x03\x7f\xa4\x55\x6a\xa4\x7b\xbf\xbb\x53\xc8"
"\xfa\x46\x65\xab\x09\xd0\xe4\x92\x69\x4e\x55\x1a\x6b\xab\x64"
"\xd5\x6b\x16\xc0\x08\x3f\x62\x23\x7a\xad\x47\x95\xe1\x75\x2f"
"\x44\xac\x11\x3a\xaf\x2a\x6f\xb4\x30\xf5\x4f\x68\x7f\x41\x3e"
"\x27\x62\x1b\x25\x5d\x0a\xa5\xc4\x4f\x17\xaf\x13\x7a\xff\x48"
"\x18\xe0\xc6\x15\x9b\xa4\xa8\x34\x81\xa3\x4d\x86\x3d\xc4\xb1"
"\x5a\xf4\x7e\x86\x7b\x00\x62\xae\x68\x03\x90\x29\x4c\xa0\xa8"
"\xa1\x73\x8c\xf8\xd7\x03\x96\xab\xd2\xdc\xd0\xf7\x45\x87\x7e"
"\xe1\xee\xf0\x9d\x42\x53\x8b\x15\xc1\xb4\xab\x45\x59\x5a\x40"
"\x58\xf5\xa4\xda\x26\xd0\x40\x8f\xd0\xc0\x85\xdb\xa0\x23\x94"
"\xef\xd3\xb8\x6a\x60\x1c\x4a\x97\x8f\x91\x68\x70\xec\x1c\x97"
"\x62\x97\x40\x99\xb9\x3a\x9b\x52\x60\x3c\xb2\xdc\xc6\x4a\xec"
"\x7e\x2a\x22\x82\x57\x81\x81\xfd\x2c\xed\xc6\x83\x41\x62\x3c"
"\x90\xd1\xc2\xfc\xa9\x09\x8f\x42\xe6\xd1\xfa\x65\x41\xf5\x08"
"\xb6\x3d\xe5\x77\x9b\x8f\xce\xd9\x9c\x88\xc1\x6d\x8b\x7b\x73"
"\x92\x12\x80\x7c\x2e\x79\xd7\x5d\x30\x2a\x3d\xbf\x2b\x60\x84"
"\xa5\xf8\x5d\xd7\xeb\x1a\x58\x79\xb5\xa4\x0c\x2b\x20\xa5\xbc"
"\x01\xce\xd8\xd5\xd6\x45\xb3\x79\x29\xde\x62\x3f\x04\x57\x57"
"\xa7\x88\x2f\xe7\x07\x21\x4c\x8d\xe7\x52\xc7\xe1\xa5\x12\x19"
"\x5f\x0f\x19\x9e\x92\xdd\xb3\xc5\x10\x46\xea\xfc\xe1\x59\xc4"
"\xe8\xb6\x22\xd3\x1f\x2d\x9d\x7f\xdc\xc9\x96\xf2\x7e\xdf\xbc"
"\xe8\xff\x86\x3d\x93\x5b\x4d\x59\xa7\x8a\xad\x09\x73\x3c\x62"
"\x77\x25\x9d\xb7\x8d\x61\xcd\x21\x67\x34\x7e\xe2\x1a\x6b\x69"
"\xb1\x3b\x10\x68\x85\x9c\x9b\x86\x44\x96\x36\xb1\x15\x92\x29"
"\x18\x6a\x86\x39\x28\x0b\xb8\xc3\x60\x12\xc5\xac\x35\xa3\x35"
"\xf6\xb1\xb3\xdf\x00\xfb\x3a\xed\xca\x46\x7d\x8f\xa3\x4d\x77"
"\x05\xd7\xb8\xa8\xe3\xca\xdd\xfe\x2d\x12\x5b\x08\xd4\x36\xa1"
"\xa0\x07\xa8\x2d\x31\x2f\x8a\x0d\xec\x07\x8a\xe0\x31\x0f\xb4"
"\xb1\x51\x60\xa8\xc7\x5b\x3f\x83\xf2\xfb\x4d\x2a\x24\xf3\x52"
"\x2c\xa1\x83\x58\x08\x03\xdf\x04\x6c\x40\x1e\x25\x83\x0c\x74"
"\xc2\x93\x89\xc1\x31\x74\x8f\x77\xbb\x7b\x78\x15\x26\x06\x89"
"\xe7\x47\x04\x22\x14\x28\xfc\xf7\xae\xfc\xd9\xbc\x95\x5d\x92"
"\x42\x52\x7a\x94\x85\x3f\x11\xdb\xca\xc7\xa8\x62\x30\xaa\x66"
"\x1a\xf4\xd5\x1d\xf1\x4d\xba\x53\xce\xda\x63\xa4\x4f\x30\xfe"
"\x04\x1d\xf4\x5e\x9c\x4a\x83\xf3\xc7\x58\x71\xea\xd2\x1b\x26"
"\x66\x8c\x90\xfe\xae\x82\x43\x97\x79\x1d\x6c\x21\x1f\xc1\x19"
"\x89\xc8\x15\xc4\x7a\x06\x3e\x98\x11\x71\xc0\x70\x45\x19\xed"
"\x2a\x31\x28\x54\xda\x36\xe3\x38\x3a\x70\x60\xd1\xc2\xa7\xfc"
"\x08\x46\x0b\x82\xf2\x48\x74\x82\xce\x74\xf1\x0e\xaf\x11\x99"
"\x73\xcc\x70\x73\x3a\xcb\x07\x1a\xe6\x88\x1d\xd6\x11\x0f\x06"
"\xc9\x93\x92\x0d\xbf\xb9\xd6\x7f\x17\x9f\xb7\x6a\xb4\x23\x37"
"\x84\x10\xe4\x70\xf6\x64\x30\x7f\xe3\x01\x31\x4d\x67\x1a\x43"
"\x7e\xe0\x7f\x32\xd6\x32\x9d\xfd\x77\xcf\x84\x69\x52\x28\xd0"
"\xb0\x50\x7d\x8b\x92\x28\x0e\x44\xa8\x4c\x27\x79\x70\xed\x44"
"\xd4\x42\xc6\x6e\x57\xfa\xe7\x0a\x2c\xf8\x23\x8b\x1d\x01\xcd"
"\x24\x4e\x51\xb3\x81\xa7\x76\x49\x0f\x51\x23\x87\xab\x32\x14"
"\xb3\xb3\x01\x37\x8f\x24\x5a\x21\x50\xbe\x0a\x6d\xfc\xb0\xd9"
"\x8d\xf7\xe3\x56\xee\x24\x00\xaa\x76\x6c\xfd\x44\x44\xb4\xd1"
"\x56\xe8\x45\xb9\xd8\x11\x40\x12\x62\x80\x15\xfe\xcf\x04\x2b"
"\xe7\xbb\x34\x2c\xa1\x5e\x62\x6d\x1d\xa0\xd2\xd5\xcd\x1a\x4c"
"\x66\x1e\x18\x1d\xf3\x9d\x29\x75\x13\xc9\x46\x2a\xe4\xf3\xfa"
"\xbf\x3c\xce\x8b\xe1\xf1\xb5\x53\xe4\xfb\xed\x88\x14\xfe\xf6"
"\xaf\x6d\xb0\xe1\xe4\x3f\x4a\x1b\x75\xa5\x76\x1e\xda\xf2\xe7"
"\xff\x08\xed\xe9\xcd\xf2\x3b\x3e\x54\x06\x93\x23\x27\xfb\x64"
"\x06\x92\x14\xee\x0a\x0b\xcd\x31\x43\x23\x0f\xad\x00\x8f\x4a"
"\xe2\xa2\xaf\x97\xbd\xa4\xc7\x6d\x48\x64\xb4\x68\xea\x38\x2f"
"\xf3\xd1\x3a\xc8\x71\x6b\x06\x98\x40\xd2\x5a\xb9\x8e\x49\x88"
"\x65\xb5\xa5\x9f\xed\x16\x30\x3c\x9a\xe0\xf0\xbc\xce\xd1\x50"
"\x3a\xee\x68\x08\x97\xea\x64\x66\x41\x05\x67\x1e\xc1\x03\xf7"
"\x9c\x75\xff\x66\xb5\xf7\x8a\x55\x73\x49\x1e\x75\xde\xe5\x13"
"\x77\x60\x2e\x7a\xc2\xd9\xf7\xbe\xe9\xc0\xd1\x97\xfc\x21\xe8"
"\x2f\xf1\x67\xa2\xcf\x5c\x48\x7b\x28\x95\x81\x3c\xa7\x75\xd3"
"\x17\x78\xf1\xde\xb6\x02\xd1\xce\x1f\x85\xc2\xba\x59\xf1\xad"
"\x84\x35\x4b\x06\x68\xbd\x1d\x32\xe2\x87\xb1\x95\xee\xbf\x0d"
"\xf0\xc9\x4a\x64\xc8\x93\x61\xa7\x8f\xe0\x5b\x78\xc9\xc2\x31"
"\x5d\xc2\x9e\x39\x2c\x86\x8c\xe4\xd5\xb4\x89\x76\x67\x37\x31"
"\x0e\xfa\x4f\xe5\x8c\x92\x31\xde\xe8\xf9\xbb\x46\x4a\xf2\xfc"
"\xfc\x16\x87\xf0\x90\x6b\xce\x41\x66\x0a\x9b\x4e\xd0\x5d\xe2"
"\xb9\x21\xd6\x47\x50\x28\xd1\xa4\xee\x89\x1d\xdb\x25\x85\xae"
"\xd6\xef\x47\xea\x60\xc1\xdd\x0e\x93\x38\xac\xec\xfe\xcc\x8d"
"\x81\x3e\x15\xd4\xf0\xbc\x56\xa6\xd2\xd3\xdc\xa7\x1a\x06\x96"
"\x95\x6e\x60\x15\x2f\xf3\x72\xb5\x3a\x3f\x60\x69\x2f\x90\x1b"
"\xd5\xf8\x3d\xc3\x28\x72\x80\x4c\x5d\x47\xc6\xc9\x63\x21\x88"
"\xcb\x56\xf2\x44\xd2\x5a\xfd\xd8\x99\x9d\x8b\x39\xb2\x6f\xbc"
"\xb9\x12\x92\x97\x20\x6a\xc6\x76\x89\xfb\xf6\xdc\x1d\xdd\xad"
"\x55\xa2\xf9\x50\x88\xc1\xc5\x53\xa2\xc0\x3a\x48\x63\x34\x53"
"\x48\xee\xbd\x5c\x0e\x2a\x22\x20\xb3\x7a\x2b\xbc\x0c\xa5\xb6"
"\xd2\x75\xb8\x0c\xbb\x18\x54\xdf\x28\xb3\xaa\x4e\x7f\x02\xae"
"\x18\x56\x74\x49\x23\xd5\x77\xcb\x1f\x02\x41\xdb\x08\x46\x19"
"\xcb\x95\xd9\x3e\xa1\x78\x3b\x43\x29\xb8\xef\x62\x60\x89\x56"
"\x8d\xfe\xf0\xee\x89\x01\xe4\x7f\x96\x63\xdc\xde\x3e\x98\x39"
"\x71\x91\x64\xef\xea\x6f\x3e\xec\xcd\x01\xa3\xd9\xec\xe2\x14"
"\xd1\xc0\x3f\x3d\x30\x65\xa8\x47\x74\xe0\xd9\x66\x13\xf9\x76"
"\x41\x92\xb5\xc6\x14\xc7\x0a\xdc\xd7\x09\x70\x67\xdd\x98\xbb"
"\x0f\x83\x59\x88\x6b\x3c\x2a\x61\xd5\xf8\x4c\x40\xf3\xa2\x50"
"\x77\xeb\x20\x88\x33\x88\xbd\xb4\xb9\x1f\xf5\xe7\xb1\x11\x98"
"\xdf\xae\x06\x40\xcc\x09\x5c\x03\xdc\xd3\xdc\x7d\xae\x78\xfd"
"\x75\x44\xb9\x44\xeb\xf7\xc3\xed\xb8\xc1\x64\x81\x5c\xac\x96"
"\x75\x39\x8b\xc6\x83\xc9\xa6\x46\xa5\x9b\x60\xab\xe5\x1d\xb9"
"\x7c\x86\xab\x93\x3d\x64\x40\x17\xaf\xa7\xe1\xdb\x9e\xc2\xd6"
"\x4c\x31\xed\xaa\xc5\x57\x0f\x8f\x90\x99\x69\x50\xe5\xef\x3e"
"\x77\xea\xce\xf6\x3a\xe6\x3e\x92\x97\xcc\x63\x7a\x8e\x40\x8d"
"\x96\x6a\xa9\x42\x27\x91\x8e\xcf\xd7\x76\x57\x6d\x3b\x40\xf7"
"\x93\x83\x23\x74\x7c\xec\x37\x88\xca\xb2\x3d\x70\xb3\x76\x86"
"\xb8\x3a\xe7\x6b\x16\xb8\xc0\x14\xbc\x37\x0e\xbd\x85\xf8\xed"
"\x50\xc9\xc6\x80\x75\x48\x56\x9d\xba\x04\x77\xe6\x57\x72\xbc"
"\xc8\x66\x63\x81\x41\xac\x79\x17\xa7\xb1\x93\x91\x6e\x48\x74"
"\x49\x18\x73\x84\x24\x23\xc6\x07\x2e\xe0\xe2\x16\xce\x1f\x9f"
"\xfb\x6a\x46\x49\xcc\xc1\x3f\xc4\xef\x4d\x88\x2d\x4e\x40\x45"
"\x80\x9e\xa0\x90\x52\x68\xe7\x86\xe4\x3d\x53\x82\xf9\x2d\x2f"
"\x5f\x2b\x32\x47\x9e\x25\x51\xa8\xc6\xd6\xc1\x37\xb9\xd1\x25"
"\xfc\xba\x48\xd8\x8f\xd6\xae\x44\xb8\x72\x7f\xa7\x65\xb8\xe2"
"\x05\x2d\x3d\x4b\x2b\xcf\x5b\x83\xb4\x1b\x3f\x8b\xfb\x1e\x0e"
"\x13\x28\x13\x31\x45\x11\x35\xb8\xbe\x09\xbb\x21\xdc\x12\x1a"
"\x94\x99\x4a\x74\x9c\xc6\x4e\xbd\xd2\xa6\x68\xa5\x67\x3e\x25"
"\x3d\x58\x59\xee\x0e\x7c\x75\x48\xb9\x62\x27\xe5\x48\xf0\x66"
"\x31\x61\x20\xec\xa0\xc3\xf7\x91\xc4\xf5\x2c\x32\x2e\x91\x89"
"\xce\x16\x75\xc2\xd1\x9e\x90\x3a\x7b\xc8\x07\x3f\x12\xb0\x1d"
"\x04\xcc\x72\x9b\x01\x4a\x8d\x7e\x78\xe6\xd6\xe0\xc1\x3b\xf5"
"\xd4\x78\x5c\x53\x0f\x54\xa4\x11\xd5\x85\x7c\xf7\x8d\x41\x88"
"\x22\x79\x39\x83\x68\x76\xd0\xa9\xd0\xa3\xa4\xc8\x33\xad\x13"
"\x0e\x14\xd4\x3a\x9d\x2a\x0b\x12\x5b\x98\x9d\xf9\xa6\xb0\x25"
"\xed\xb5\xe7\x21\x69\x77\x87\xec\xb1\xfe\xd7\xe5\xa9\x8f\x09"
"\xe2\x40\xb3\x19\x2c\xe7\x08\x40\x9e\x49\xe1\x8d\x5e\x75\xbe"
"\xf1\x0f\x47\x02\x18\xd2\x3d\xfa\xbf\x0c\xaf\xc7\x1c\x59\x07"
"\xf8\x44\x6a\x26\x35\x51\x31\x7a\xc5\xbf\x57\xb7\xa1\xa8\x6a"
"\x71\xe0\xd9\x43\xcd\x7a\x9d\x15\xb0\xfc\x21\xfe\x78\xab\x4d"
"\x01\xba\x70\x3c\xaa\x46\x47\x25\xdd\xa0\x93\x9f\x56\xa7\x62"
"\x21\xe1\xd9\xae\xab\x35\xf5\xb7\x7c\xc5\xf2\xea\xac\x39\x02"
"\xd9\xd4\x66\xd8\xc2\x8e\xf1\x5a\x6c\x87\x82\x5a\xeb\xbb\xeb"
"\x8f\x71\xd2\x68\x8e\xc7\xa2\xb8\xcd\x4b\x72\x3e\x1d\x24\x0b"
"\x91\x82\xeb\xf1\x66\xac\x6b\xb6\xa2\x9a\xa7\xa8\x79\xf9\x0d"
"\xaa\x14\xbd\x6d\x85\x2c\x89\x6d\x86\x8e\xfa\x03\x0c\x10\xec"
"\xdb\x1e\xff\xa4\x6b\x52\x65\x4f\x0e\x2b\x0f\xce\x29\x32\xc2"
"\x1f\xfa\xd7\x99\x3e\xb9\xa7\xb0\x47\x51\x1a\x2f\x32\x56\x93"
"\x03\x89\xd6\x0e\x09\x18\x13\x48\x8a\xb0\xc2\xae\x50\xc5\xf3"
"\xcb\xd0\x13\xec\x7e\x83\x34\xe1\xf9\x94\xbf\x45\xf0\x32\xe4"
"\x9e\x0f\xd2\x52\x27\xd4\x51\x85\x99\x5e\x55\xc0\x7d\x40\xe5"
"\x46\x02\xed\xa4\xd6\xe6\x1a\xde\xaf\x5b\x6f\x53\x6c\x4b\x0e"
"\xd9\x49\x74\xb9\xf9\xf2\xf3\x19\xb1\xb7\xa6\x98\xfc\xde\x10"
"\x55\x57\x07\xc9\x54\xa9\xf8\xb6\xa8\x75\x96\x76\x56\xe7\x74"
"\x39\x28\x73\x33\x25\xa3\x57\xa4\xd2\xd7\x36\xd9\x2f\x20\x1f"
"\xf5\x41\x21\x6b\x9e\x88\x8f\xaf\x3d\xe7\x3d\xe7\x9d\x3d\x97"
"\xf4\xd0\x5e\x65\x7f\xaa\x1e\xc9\xd4\x55\xee\x42\xac\x8e\x3f"
"\x6b\x5a\xa8\xe2\x93\x50\xca\x85\xb5\x84\x80\xc6\xb5\xe2\x12"
"\x34\xe2\x5b\xbe\x40\x68\x2a\xfb\x0f\x0d\xa5\x53\xe8\xe9\x3c"
"\x11\xab\xd9\x08\x38\x4c\x6b\x74\x9b\x58\x39\xbe\x72\x6b\x01"
"\x53\xea\x95\x6a\x43\xaf\x4c\x0c\xa6\x65\xde\x90\xaa\x48\x61"
"\x19\x9b\xce\xa6\x40\xf1\x07\x89\x31\xe8\x02\x9a\x0d\xb1\x02"
"\x0c\x72\x93\xbe\xd0\x2b\x37\xe6\x4b\x0b\x47\xf4\x03\x8e\x2f"
"\x5d\x37\x61\x2d\x0d\xeb\x9c\xe5\x58\xbc\xb4\x25\xb4\x4c\xab"
"\xd3\xe7\xae\x13\xd8\xd0\xc9\x68\x0c\xad\x27\x9d\x01\xbd\x12"
"\xe2\xa5\x42\xc7\x60\x90\x7c\x44\xe7\xe4\xfc\x72\x20\x75\xb2"
"\xe7\x72\xd3\x8e\x84\xf4\x1d\x1c\x40\x27\x7a\xcf\xc1\xf8\x66"
"\x0f\xcf\xaf\xec\xac\x26\x06\x12\x1d\x7e\x56\x96\x5a\x0e\x02"
"\xc2\xd9\x4c\x43\x76\x10\x77\x65\x2d\xaa\x73\xa7\xda\xcb\x09"
"\x36\xa2\x0d\x2c\x4a\xde\x0b\x08\x47\x3b\xca\x50\x1f\x67\xe4",
4095);
struct csum_inet csum_67;
csum_inet_init(&csum_67);
csum_inet_update(&csum_67, (const uint8_t*)0x20df2fe8, 4);
csum_inet_update(&csum_67, (const uint8_t*)0x20df2fec, 4);
uint16_t csum_67_chunk_2 = 0x2100;
csum_inet_update(&csum_67, (const uint8_t*)&csum_67_chunk_2, 2);
uint16_t csum_67_chunk_3 = 0x1000;
csum_inet_update(&csum_67, (const uint8_t*)&csum_67_chunk_3, 2);
csum_inet_update(&csum_67, (const uint8_t*)0x20df2ff0, 16);
*(uint16_t*)0x20df2ff6 = csum_inet_digest(&csum_67);
struct csum_inet csum_68;
csum_inet_init(&csum_68);
csum_inet_update(&csum_68, (const uint8_t*)0x20df2fdc, 20);
*(uint16_t*)0x20df2fe6 = csum_inet_digest(&csum_68);
r[69] = syz_emit_ethernet(0x1031ul, 0x20df2fceul);
break;
case 5:
*(uint8_t*)0x20df2fce = (uint8_t)0xbb;
*(uint8_t*)0x20df2fcf = (uint8_t)0xbb;
*(uint8_t*)0x20df2fd0 = (uint8_t)0xbb;
*(uint8_t*)0x20df2fd1 = (uint8_t)0xbb;
*(uint8_t*)0x20df2fd2 = (uint8_t)0xbb;
*(uint8_t*)0x20df2fd3 = (uint8_t)0x0;
*(uint8_t*)0x20df2fd4 = (uint8_t)0xbb;
*(uint8_t*)0x20df2fd5 = (uint8_t)0xbb;
*(uint8_t*)0x20df2fd6 = (uint8_t)0xbb;
*(uint8_t*)0x20df2fd7 = (uint8_t)0xbb;
*(uint8_t*)0x20df2fd8 = (uint8_t)0xbb;
*(uint8_t*)0x20df2fd9 = (uint8_t)0x0;
*(uint16_t*)0x20df2fda = (uint16_t)0x8;
STORE_BY_BITMASK(uint8_t, 0x20df2fdc, 0x5, 0, 4);
STORE_BY_BITMASK(uint8_t, 0x20df2fdc, 0x4, 4, 4);
STORE_BY_BITMASK(uint8_t, 0x20df2fdd, 0x0, 0, 2);
STORE_BY_BITMASK(uint8_t, 0x20df2fdd, 0x0, 2, 6);
*(uint16_t*)0x20df2fde = (uint16_t)0x1c00;
*(uint16_t*)0x20df2fe0 = (uint16_t)0x6400;
*(uint16_t*)0x20df2fe2 = (uint16_t)0x0;
*(uint8_t*)0x20df2fe4 = (uint8_t)0x0;
*(uint8_t*)0x20df2fe5 = (uint8_t)0x11;
*(uint16_t*)0x20df2fe6 = (uint16_t)0x0;
*(uint8_t*)0x20df2fe8 = (uint8_t)0xac;
*(uint8_t*)0x20df2fe9 = (uint8_t)0x14;
*(uint8_t*)0x20df2fea = (uint8_t)0x0;
*(uint8_t*)0x20df2feb = (uint8_t)0xbb;
*(uint32_t*)0x20df2fec = (uint32_t)0x10000e0;
*(uint16_t*)0x20df2ff0 = (uint16_t)0x204e;
*(uint16_t*)0x20df2ff2 = (uint16_t)0x224e;
*(uint16_t*)0x20df2ff4 = (uint16_t)0x800;
*(uint16_t*)0x20df2ff6 = (uint16_t)0x0;
struct csum_inet csum_102;
csum_inet_init(&csum_102);
csum_inet_update(&csum_102, (const uint8_t*)0x20df2fe8, 4);
csum_inet_update(&csum_102, (const uint8_t*)0x20df2fec, 4);
uint16_t csum_102_chunk_2 = 0x1100;
csum_inet_update(&csum_102, (const uint8_t*)&csum_102_chunk_2, 2);
uint16_t csum_102_chunk_3 = 0x800;
csum_inet_update(&csum_102, (const uint8_t*)&csum_102_chunk_3, 2);
csum_inet_update(&csum_102, (const uint8_t*)0x20df2ff0, 8);
*(uint16_t*)0x20df2ff6 = csum_inet_digest(&csum_102);
struct csum_inet csum_103;
csum_inet_init(&csum_103);
csum_inet_update(&csum_103, (const uint8_t*)0x20df2fdc, 20);
*(uint16_t*)0x20df2fe6 = csum_inet_digest(&csum_103);
r[104] = syz_emit_ethernet(0x2aul, 0x20df2fceul);
break;
}
return 0;
}
void test()
{
long i;
pthread_t th[12];
memset(r, -1, sizeof(r));
srand(getpid());
for (i = 0; i < 6; i++) {
pthread_create(&th[i], 0, thr, (void*)i);
usleep(rand() % 10000);
}
for (i = 0; i < 6; i++) {
pthread_create(&th[6 + i], 0, thr, (void*)i);
if (rand() % 2)
usleep(rand() % 10000);
}
usleep(rand() % 100000);
}
int main()
{
setup_tun(0, true);
loop();
return 0;
}