diff --git a/src/.output/xdp_filter.bpf.o b/src/.output/xdp_filter.bpf.o index 53ab89d..8a789c7 100644 Binary files a/src/.output/xdp_filter.bpf.o and b/src/.output/xdp_filter.bpf.o differ diff --git a/src/.output/xdp_filter.o b/src/.output/xdp_filter.o index e5c3960..4f368d8 100644 Binary files a/src/.output/xdp_filter.o and b/src/.output/xdp_filter.o differ diff --git a/src/.output/xdp_filter.skel.h b/src/.output/xdp_filter.skel.h index 3bd5956..e4e74f0 100644 --- a/src/.output/xdp_filter.skel.h +++ b/src/.output/xdp_filter.skel.h @@ -24,7 +24,7 @@ struct xdp_filter_bpf { char xdp_receive_____fmt_1[2]; char xdp_receive_____fmt_2[2]; char xdp_receive_____fmt_3[2]; - char xdp_receive_____fmt_4[2]; + char xdp_receive_____fmt_4[6]; char xdp_receive_____fmt_5[2]; char xdp_receive_____fmt_6[2]; char xdp_receive_____fmt_7[54]; @@ -140,200 +140,214 @@ xdp_filter_bpf__create_skeleton(struct xdp_filter_bpf *obj) s->progs[0].prog = &obj->progs.xdp_receive; s->progs[0].link = &obj->links.xdp_receive; - s->data_sz = 6840; + s->data_sz = 7128; s->data = (void *)"\ \x7f\x45\x4c\x46\x02\x01\x01\0\0\0\0\0\0\0\0\0\x01\0\xf7\0\x01\0\0\0\0\0\0\0\0\ -\0\0\0\0\0\0\0\0\0\0\0\x78\x17\0\0\0\0\0\0\0\0\0\0\x40\0\0\0\0\0\x40\0\x0d\0\ +\0\0\0\0\0\0\0\0\0\0\0\x98\x18\0\0\0\0\0\0\0\0\0\0\x40\0\0\0\0\0\x40\0\x0d\0\ \x0c\0\x61\x12\x04\0\0\0\0\0\x61\x11\0\0\0\0\0\0\xbf\x13\0\0\0\0\0\0\x07\x03\0\ \0\x0e\0\0\0\x3d\x32\x04\0\0\0\0\0\x18\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xb7\x02\ -\0\0\x13\0\0\0\x05\0\x38\0\0\0\0\0\xbf\x16\0\0\0\0\0\0\x07\x06\0\0\x22\0\0\0\ -\x3d\x62\x03\0\0\0\0\0\x18\x01\0\0\x13\0\0\0\0\0\0\0\0\0\0\0\x05\0\x31\0\0\0\0\ +\0\0\x13\0\0\0\x05\0\x11\0\0\0\0\0\xbf\x16\0\0\0\0\0\0\x07\x06\0\0\x22\0\0\0\ +\x3d\x62\x03\0\0\0\0\0\x18\x01\0\0\x13\0\0\0\0\0\0\0\0\0\0\0\x05\0\x0a\0\0\0\0\ \0\x71\x13\x17\0\0\0\0\0\x15\x03\x03\0\x06\0\0\0\x18\x01\0\0\x15\0\0\0\0\0\0\0\ -\0\0\0\0\x05\0\x2c\0\0\0\0\0\xbf\x13\0\0\0\0\0\0\x07\x03\0\0\x36\0\0\0\x3d\x32\ -\x03\0\0\0\0\0\x18\x01\0\0\x17\0\0\0\0\0\0\0\0\0\0\0\x05\0\x26\0\0\0\0\0\x69\ -\x13\x24\0\0\0\0\0\x15\x03\x03\0\x23\x28\0\0\x18\x01\0\0\x19\0\0\0\0\0\0\0\0\0\ -\0\0\x05\0\x21\0\0\0\0\0\x69\x13\x2e\0\0\0\0\0\x77\x03\0\0\x02\0\0\0\x57\x03\0\ -\0\x3c\0\0\0\x69\x14\x10\0\0\0\0\0\xdc\x04\0\0\x10\0\0\0\x1f\x34\0\0\0\0\0\0\ -\x71\x11\x0e\0\0\0\0\0\x67\x01\0\0\x02\0\0\0\x57\x01\0\0\x3c\0\0\0\x1f\x14\0\0\ -\0\0\0\0\x15\x04\x03\0\x04\0\0\0\x18\x01\0\0\x1b\0\0\0\0\0\0\0\0\0\0\0\x05\0\ -\x13\0\0\0\0\0\x0f\x36\0\0\0\0\0\0\xbf\x61\0\0\0\0\0\0\x07\x01\0\0\x04\0\0\0\ -\x3d\x12\x03\0\0\0\0\0\x18\x01\0\0\x1d\0\0\0\0\0\0\0\0\0\0\0\x05\0\x0c\0\0\0\0\ -\0\x18\x01\0\0\x1f\0\0\0\0\0\0\0\0\0\0\0\xb7\x02\0\0\x36\0\0\0\xbf\x63\0\0\0\0\ -\0\0\xb7\x04\0\0\x04\0\0\0\x85\0\0\0\x06\0\0\0\x71\x61\0\0\0\0\0\0\x55\x01\x02\ -\0\x74\0\0\0\x71\x61\x01\0\0\0\0\0\x15\x01\x06\0\x65\0\0\0\x18\x01\0\0\x55\0\0\ -\0\0\0\0\0\0\0\0\0\xb7\x02\0\0\x02\0\0\0\x85\0\0\0\x06\0\0\0\xb7\0\0\0\x02\0\0\ -\0\x95\0\0\0\0\0\0\0\x71\x61\x02\0\0\0\0\0\x55\x01\xf8\xff\x73\0\0\0\x71\x61\ -\x03\0\0\0\0\0\x55\x01\xf6\xff\x74\0\0\0\x18\x01\0\0\x57\0\0\0\0\0\0\0\0\0\0\0\ -\xb7\x02\0\0\x0f\0\0\0\x85\0\0\0\x06\0\0\0\xb7\x01\0\0\x62\0\0\0\x73\x16\x01\0\ -\0\0\0\0\x05\0\xf3\xff\0\0\0\0\x44\x75\x61\x6c\x20\x42\x53\x44\x2f\x47\x50\x4c\ -\0\x42\x6f\x75\x6e\x64\x20\x63\x68\x65\x63\x6b\x20\x66\x61\x69\x6c\x20\x41\0\ -\x42\0\x43\0\x44\0\x45\0\x46\0\x47\0\x52\x65\x63\x65\x69\x76\x65\x64\x20\x76\ -\x61\x6c\x69\x64\x20\x54\x43\x50\x20\x70\x61\x63\x6b\x65\x74\x20\x77\x69\x74\ -\x68\x20\x70\x61\x79\x6c\x6f\x61\x64\x20\x25\x73\x20\x6f\x66\x20\x73\x69\x7a\ -\x65\x20\x25\x69\x0a\0\x48\0\x42\x50\x46\x20\x66\x69\x6e\x69\x73\x68\x65\x64\ -\x0a\x20\0\x9f\xeb\x01\0\x18\0\0\0\0\0\0\0\x9c\x02\0\0\x9c\x02\0\0\x3d\x06\0\0\ -\0\0\0\0\0\0\0\x02\x02\0\0\0\x01\0\0\0\x06\0\0\x04\x18\0\0\0\x08\0\0\0\x03\0\0\ -\0\0\0\0\0\x0d\0\0\0\x03\0\0\0\x20\0\0\0\x16\0\0\0\x03\0\0\0\x40\0\0\0\x20\0\0\ -\0\x03\0\0\0\x60\0\0\0\x30\0\0\0\x03\0\0\0\x80\0\0\0\x3f\0\0\0\x03\0\0\0\xa0\0\ -\0\0\x4e\0\0\0\0\0\0\x08\x04\0\0\0\x54\0\0\0\0\0\0\x01\x04\0\0\0\x20\0\0\0\0\0\ -\0\0\x01\0\0\x0d\x06\0\0\0\x61\0\0\0\x01\0\0\0\x65\0\0\0\0\0\0\x01\x04\0\0\0\ -\x20\0\0\x01\x69\0\0\0\x01\0\0\x0c\x05\0\0\0\x32\x05\0\0\0\0\0\x01\x01\0\0\0\ -\x08\0\0\x01\0\0\0\0\0\0\0\x03\0\0\0\0\x08\0\0\0\x0a\0\0\0\x0d\0\0\0\x37\x05\0\ -\0\0\0\0\x01\x04\0\0\0\x20\0\0\0\x4b\x05\0\0\0\0\0\x0e\x09\0\0\0\x01\0\0\0\0\0\ -\0\0\0\0\0\x0a\x08\0\0\0\0\0\0\0\0\0\0\x03\0\0\0\0\x0c\0\0\0\x0a\0\0\0\x13\0\0\ -\0\x53\x05\0\0\0\0\0\x0e\x0d\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x03\0\0\0\0\x0c\0\0\0\ -\x0a\0\0\0\x02\0\0\0\x67\x05\0\0\0\0\0\x0e\x0f\0\0\0\0\0\0\0\x7d\x05\0\0\0\0\0\ -\x0e\x0f\0\0\0\0\0\0\0\x93\x05\0\0\0\0\0\x0e\x0f\0\0\0\0\0\0\0\xa9\x05\0\0\0\0\ -\0\x0e\x0f\0\0\0\0\0\0\0\xbf\x05\0\0\0\0\0\x0e\x0f\0\0\0\0\0\0\0\xd5\x05\0\0\0\ -\0\0\x0e\x0f\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x03\0\0\0\0\x0c\0\0\0\x0a\0\0\0\x36\0\ -\0\0\xeb\x05\0\0\0\0\0\x0e\x16\0\0\0\0\0\0\0\x01\x06\0\0\0\0\0\x0e\x0f\0\0\0\0\ -\0\0\0\0\0\0\0\0\0\0\x03\0\0\0\0\x0c\0\0\0\x0a\0\0\0\x0f\0\0\0\x17\x06\0\0\0\0\ -\0\x0e\x19\0\0\0\0\0\0\0\x2d\x06\0\0\x0a\0\0\x0f\0\0\0\0\x0e\0\0\0\0\0\0\0\x13\ -\0\0\0\x10\0\0\0\x13\0\0\0\x02\0\0\0\x11\0\0\0\x15\0\0\0\x02\0\0\0\x12\0\0\0\ -\x17\0\0\0\x02\0\0\0\x13\0\0\0\x19\0\0\0\x02\0\0\0\x14\0\0\0\x1b\0\0\0\x02\0\0\ -\0\x15\0\0\0\x1d\0\0\0\x02\0\0\0\x17\0\0\0\x1f\0\0\0\x36\0\0\0\x18\0\0\0\x55\0\ -\0\0\x02\0\0\0\x1a\0\0\0\x57\0\0\0\x0f\0\0\0\x35\x06\0\0\x01\0\0\x0f\0\0\0\0\ -\x0b\0\0\0\0\0\0\0\x0d\0\0\0\0\x78\x64\x70\x5f\x6d\x64\0\x64\x61\x74\x61\0\x64\ -\x61\x74\x61\x5f\x65\x6e\x64\0\x64\x61\x74\x61\x5f\x6d\x65\x74\x61\0\x69\x6e\ -\x67\x72\x65\x73\x73\x5f\x69\x66\x69\x6e\x64\x65\x78\0\x72\x78\x5f\x71\x75\x65\ -\x75\x65\x5f\x69\x6e\x64\x65\x78\0\x65\x67\x72\x65\x73\x73\x5f\x69\x66\x69\x6e\ -\x64\x65\x78\0\x5f\x5f\x75\x33\x32\0\x75\x6e\x73\x69\x67\x6e\x65\x64\x20\x69\ -\x6e\x74\0\x63\x74\x78\0\x69\x6e\x74\0\x78\x64\x70\x5f\x72\x65\x63\x65\x69\x76\ -\x65\0\x78\x64\x70\x5f\x70\x72\x6f\x67\0\x2f\x68\x6f\x6d\x65\x2f\x6f\x73\x62\ -\x6f\x78\x65\x73\x2f\x54\x46\x47\x2f\x73\x72\x63\x2f\x65\x62\x70\x66\x2f\x78\ -\x64\x70\x5f\x66\x69\x6c\x74\x65\x72\x2e\x62\x70\x66\x2e\x63\0\x20\x20\x20\x20\ -\x76\x6f\x69\x64\x20\x2a\x64\x61\x74\x61\x5f\x65\x6e\x64\x20\x3d\x20\x28\x76\ -\x6f\x69\x64\x20\x2a\x29\x28\x6c\x6f\x6e\x67\x29\x63\x74\x78\x2d\x3e\x64\x61\ -\x74\x61\x5f\x65\x6e\x64\x3b\0\x20\x20\x20\x20\x76\x6f\x69\x64\x20\x2a\x64\x61\ -\x74\x61\x20\x3d\x20\x28\x76\x6f\x69\x64\x20\x2a\x29\x28\x6c\x6f\x6e\x67\x29\ -\x63\x74\x78\x2d\x3e\x64\x61\x74\x61\x3b\0\x2f\x68\x6f\x6d\x65\x2f\x6f\x73\x62\ -\x6f\x78\x65\x73\x2f\x54\x46\x47\x2f\x73\x72\x63\x2f\x65\x62\x70\x66\x2f\x2e\ -\x2e\x2f\x69\x6e\x63\x6c\x75\x64\x65\x2f\x70\x61\x63\x6b\x65\x74\x2f\x70\x61\ -\x63\x6b\x65\x74\x5f\x6d\x61\x6e\x61\x67\x65\x72\x2e\x68\0\x20\x20\x20\x20\x69\ -\x66\x20\x28\x28\x76\x6f\x69\x64\x20\x2a\x29\x65\x74\x68\x20\x2b\x20\x73\x69\ -\x7a\x65\x6f\x66\x28\x73\x74\x72\x75\x63\x74\x20\x65\x74\x68\x68\x64\x72\x29\ -\x20\x3e\x20\x64\x61\x74\x61\x5f\x65\x6e\x64\x29\x7b\0\x20\x20\x20\x20\x69\x66\ -\x28\x65\x74\x68\x65\x72\x6e\x65\x74\x5f\x68\x65\x61\x64\x65\x72\x5f\x62\x6f\ -\x75\x6e\x64\x5f\x63\x68\x65\x63\x6b\x28\x65\x74\x68\x2c\x20\x64\x61\x74\x61\ -\x5f\x65\x6e\x64\x29\x3c\x30\x29\x7b\0\x20\x20\x20\x20\x20\x20\x20\x20\x62\x70\ -\x66\x5f\x70\x72\x69\x6e\x74\x6b\x28\x22\x42\x6f\x75\x6e\x64\x20\x63\x68\x65\ -\x63\x6b\x20\x66\x61\x69\x6c\x20\x41\x22\x29\x3b\0\x20\x20\x20\x20\x69\x66\x20\ -\x28\x28\x76\x6f\x69\x64\x20\x2a\x29\x69\x70\x20\x2b\x20\x73\x69\x7a\x65\x6f\ -\x66\x28\x2a\x69\x70\x29\x20\x3e\x20\x64\x61\x74\x61\x5f\x65\x6e\x64\x29\x7b\0\ -\x20\x20\x20\x20\x69\x66\x20\x28\x69\x70\x5f\x68\x65\x61\x64\x65\x72\x5f\x62\ -\x6f\x75\x6e\x64\x5f\x63\x68\x65\x63\x6b\x28\x69\x70\x2c\x20\x64\x61\x74\x61\ -\x5f\x65\x6e\x64\x29\x3c\x30\x29\x7b\0\x20\x20\x20\x20\x20\x20\x20\x20\x62\x70\ -\x66\x5f\x70\x72\x69\x6e\x74\x6b\x28\x22\x42\x22\x29\x3b\0\x20\x20\x20\x20\x73\ -\x77\x69\x74\x63\x68\x28\x69\x70\x2d\x3e\x70\x72\x6f\x74\x6f\x63\x6f\x6c\x29\ -\x7b\0\x20\x20\x20\x20\x69\x66\x20\x28\x67\x65\x74\x5f\x70\x72\x6f\x74\x6f\x63\ -\x6f\x6c\x28\x64\x61\x74\x61\x29\x20\x21\x3d\x20\x49\x50\x50\x52\x4f\x54\x4f\ -\x5f\x54\x43\x50\x29\x7b\0\x20\x20\x20\x20\x20\x20\x20\x20\x62\x70\x66\x5f\x70\ -\x72\x69\x6e\x74\x6b\x28\x22\x43\x22\x29\x3b\0\x20\x20\x20\x20\x69\x66\x20\x28\ -\x28\x76\x6f\x69\x64\x20\x2a\x29\x74\x63\x70\x20\x2b\x20\x73\x69\x7a\x65\x6f\ -\x66\x28\x2a\x74\x63\x70\x29\x20\x3e\x20\x64\x61\x74\x61\x5f\x65\x6e\x64\x29\ -\x7b\0\x20\x20\x20\x20\x69\x66\x20\x28\x74\x63\x70\x5f\x68\x65\x61\x64\x65\x72\ -\x5f\x62\x6f\x75\x6e\x64\x5f\x63\x68\x65\x63\x6b\x28\x74\x63\x70\x2c\x20\x64\ -\x61\x74\x61\x5f\x65\x6e\x64\x29\x29\x7b\0\x20\x20\x20\x20\x20\x20\x20\x20\x62\ -\x70\x66\x5f\x70\x72\x69\x6e\x74\x6b\x28\x22\x44\x22\x29\x3b\0\x20\x20\x20\x20\ -\x69\x66\x20\x28\x74\x63\x70\x2d\x3e\x64\x65\x73\x74\x20\x21\x3d\x20\x6e\x74\ -\x6f\x68\x73\x28\x39\x30\x30\x30\x29\x29\x7b\0\x20\x20\x20\x20\x20\x20\x20\x20\ -\x62\x70\x66\x5f\x70\x72\x69\x6e\x74\x6b\x28\x22\x45\x22\x29\x3b\0\x20\x20\x20\ -\x20\x70\x61\x79\x6c\x6f\x61\x64\x5f\x73\x69\x7a\x65\x20\x3d\x20\x6e\x74\x6f\ -\x68\x73\x28\x69\x70\x2d\x3e\x74\x6f\x74\x5f\x6c\x65\x6e\x29\x20\x2d\x20\x28\ -\x74\x63\x70\x2d\x3e\x64\x6f\x66\x66\x20\x2a\x20\x34\x29\x20\x2d\x20\x28\x69\ -\x70\x2d\x3e\x69\x68\x6c\x20\x2a\x20\x34\x29\x3b\0\x20\x20\x20\x20\x69\x66\x20\ -\x28\x70\x61\x79\x6c\x6f\x61\x64\x5f\x73\x69\x7a\x65\x20\x21\x3d\x20\x73\x69\ -\x7a\x65\x6f\x66\x28\x6d\x61\x74\x63\x68\x5f\x70\x61\x74\x74\x65\x72\x6e\x29\ -\x20\x2d\x20\x31\x29\x20\x7b\0\x20\x20\x20\x20\x20\x20\x20\x20\x62\x70\x66\x5f\ -\x70\x72\x69\x6e\x74\x6b\x28\x22\x46\x22\x29\x3b\0\x20\x20\x20\x20\x69\x66\x20\ -\x28\x28\x76\x6f\x69\x64\x20\x2a\x29\x70\x61\x79\x6c\x6f\x61\x64\x20\x2b\x20\ -\x70\x61\x79\x6c\x6f\x61\x64\x5f\x73\x69\x7a\x65\x20\x3e\x20\x64\x61\x74\x61\ -\x5f\x65\x6e\x64\x29\x7b\0\x20\x20\x20\x20\x20\x20\x20\x20\x62\x70\x66\x5f\x70\ +\0\0\0\0\x05\0\x05\0\0\0\0\0\xbf\x13\0\0\0\0\0\0\x07\x03\0\0\x36\0\0\0\x3d\x32\ +\x06\0\0\0\0\0\x18\x01\0\0\x17\0\0\0\0\0\0\0\0\0\0\0\xb7\x02\0\0\x02\0\0\0\x85\ +\0\0\0\x06\0\0\0\xb7\0\0\0\x02\0\0\0\x95\0\0\0\0\0\0\0\x69\x13\x24\0\0\0\0\0\ +\x15\x03\x06\0\x23\x28\0\0\xdc\x03\0\0\x10\0\0\0\x18\x01\0\0\x19\0\0\0\0\0\0\0\ +\0\0\0\0\xb7\x02\0\0\x06\0\0\0\x85\0\0\0\x06\0\0\0\x05\0\xf6\xff\0\0\0\0\x69\ +\x13\x2e\0\0\0\0\0\x77\x03\0\0\x02\0\0\0\x57\x03\0\0\x3c\0\0\0\x69\x14\x10\0\0\ +\0\0\0\xdc\x04\0\0\x10\0\0\0\x1f\x34\0\0\0\0\0\0\x71\x11\x0e\0\0\0\0\0\x67\x01\ +\0\0\x02\0\0\0\x57\x01\0\0\x3c\0\0\0\x1f\x14\0\0\0\0\0\0\x15\x04\x03\0\x04\0\0\ +\0\x18\x01\0\0\x1f\0\0\0\0\0\0\0\0\0\0\0\x05\0\xe6\xff\0\0\0\0\x0f\x36\0\0\0\0\ +\0\0\xbf\x61\0\0\0\0\0\0\x07\x01\0\0\x04\0\0\0\x3d\x12\x03\0\0\0\0\0\x18\x01\0\ +\0\x21\0\0\0\0\0\0\0\0\0\0\0\x05\0\xdf\xff\0\0\0\0\x18\x01\0\0\x23\0\0\0\0\0\0\ +\0\0\0\0\0\xb7\x02\0\0\x36\0\0\0\xbf\x63\0\0\0\0\0\0\xb7\x04\0\0\x04\0\0\0\x85\ +\0\0\0\x06\0\0\0\x71\x61\0\0\0\0\0\0\x15\x01\x03\0\x74\0\0\0\x18\x01\0\0\x59\0\ +\0\0\0\0\0\0\0\0\0\0\x05\0\xd4\xff\0\0\0\0\x71\x61\x01\0\0\0\0\0\x55\x01\xfb\ +\xff\x65\0\0\0\x71\x61\x02\0\0\0\0\0\x55\x01\xf9\xff\x73\0\0\0\x71\x61\x03\0\0\ +\0\0\0\x55\x01\xf7\xff\x74\0\0\0\x18\x01\0\0\x5b\0\0\0\0\0\0\0\0\0\0\0\xb7\x02\ +\0\0\x0f\0\0\0\x85\0\0\0\x06\0\0\0\xb7\x01\0\0\x62\0\0\0\x73\x16\x01\0\0\0\0\0\ +\x05\0\xc9\xff\0\0\0\0\x44\x75\x61\x6c\x20\x42\x53\x44\x2f\x47\x50\x4c\0\x42\ +\x6f\x75\x6e\x64\x20\x63\x68\x65\x63\x6b\x20\x66\x61\x69\x6c\x20\x41\0\x42\0\ +\x43\0\x44\0\x45\x20\x25\x69\x0a\0\x46\0\x47\0\x52\x65\x63\x65\x69\x76\x65\x64\ +\x20\x76\x61\x6c\x69\x64\x20\x54\x43\x50\x20\x70\x61\x63\x6b\x65\x74\x20\x77\ +\x69\x74\x68\x20\x70\x61\x79\x6c\x6f\x61\x64\x20\x25\x73\x20\x6f\x66\x20\x73\ +\x69\x7a\x65\x20\x25\x69\x0a\0\x48\0\x42\x50\x46\x20\x66\x69\x6e\x69\x73\x68\ +\x65\x64\x0a\x20\0\x9f\xeb\x01\0\x18\0\0\0\0\0\0\0\xb4\x02\0\0\xb4\x02\0\0\x26\ +\x07\0\0\0\0\0\0\0\0\0\x02\x02\0\0\0\x01\0\0\0\x06\0\0\x04\x18\0\0\0\x08\0\0\0\ +\x03\0\0\0\0\0\0\0\x0d\0\0\0\x03\0\0\0\x20\0\0\0\x16\0\0\0\x03\0\0\0\x40\0\0\0\ +\x20\0\0\0\x03\0\0\0\x60\0\0\0\x30\0\0\0\x03\0\0\0\x80\0\0\0\x3f\0\0\0\x03\0\0\ +\0\xa0\0\0\0\x4e\0\0\0\0\0\0\x08\x04\0\0\0\x54\0\0\0\0\0\0\x01\x04\0\0\0\x20\0\ +\0\0\0\0\0\0\x01\0\0\x0d\x06\0\0\0\x61\0\0\0\x01\0\0\0\x65\0\0\0\0\0\0\x01\x04\ +\0\0\0\x20\0\0\x01\x69\0\0\0\x01\0\0\x0c\x05\0\0\0\x1b\x06\0\0\0\0\0\x01\x01\0\ +\0\0\x08\0\0\x01\0\0\0\0\0\0\0\x03\0\0\0\0\x08\0\0\0\x0a\0\0\0\x0d\0\0\0\x20\ +\x06\0\0\0\0\0\x01\x04\0\0\0\x20\0\0\0\x34\x06\0\0\0\0\0\x0e\x09\0\0\0\x01\0\0\ +\0\0\0\0\0\0\0\0\x0a\x08\0\0\0\0\0\0\0\0\0\0\x03\0\0\0\0\x0c\0\0\0\x0a\0\0\0\ +\x13\0\0\0\x3c\x06\0\0\0\0\0\x0e\x0d\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x03\0\0\0\0\ +\x0c\0\0\0\x0a\0\0\0\x02\0\0\0\x50\x06\0\0\0\0\0\x0e\x0f\0\0\0\0\0\0\0\x66\x06\ +\0\0\0\0\0\x0e\x0f\0\0\0\0\0\0\0\x7c\x06\0\0\0\0\0\x0e\x0f\0\0\0\0\0\0\0\0\0\0\ +\0\0\0\0\x03\0\0\0\0\x0c\0\0\0\x0a\0\0\0\x06\0\0\0\x92\x06\0\0\0\0\0\x0e\x13\0\ +\0\0\0\0\0\0\xa8\x06\0\0\0\0\0\x0e\x0f\0\0\0\0\0\0\0\xbe\x06\0\0\0\0\0\x0e\x0f\ +\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x03\0\0\0\0\x0c\0\0\0\x0a\0\0\0\x36\0\0\0\xd4\x06\ +\0\0\0\0\0\x0e\x17\0\0\0\0\0\0\0\xea\x06\0\0\0\0\0\x0e\x0f\0\0\0\0\0\0\0\0\0\0\ +\0\0\0\0\x03\0\0\0\0\x0c\0\0\0\x0a\0\0\0\x0f\0\0\0\0\x07\0\0\0\0\0\x0e\x1a\0\0\ +\0\0\0\0\0\x16\x07\0\0\x0a\0\0\x0f\0\0\0\0\x0e\0\0\0\0\0\0\0\x13\0\0\0\x10\0\0\ +\0\x13\0\0\0\x02\0\0\0\x11\0\0\0\x15\0\0\0\x02\0\0\0\x12\0\0\0\x17\0\0\0\x02\0\ +\0\0\x14\0\0\0\x19\0\0\0\x06\0\0\0\x15\0\0\0\x1f\0\0\0\x02\0\0\0\x16\0\0\0\x21\ +\0\0\0\x02\0\0\0\x18\0\0\0\x23\0\0\0\x36\0\0\0\x19\0\0\0\x59\0\0\0\x02\0\0\0\ +\x1b\0\0\0\x5b\0\0\0\x0f\0\0\0\x1e\x07\0\0\x01\0\0\x0f\0\0\0\0\x0b\0\0\0\0\0\0\ +\0\x0d\0\0\0\0\x78\x64\x70\x5f\x6d\x64\0\x64\x61\x74\x61\0\x64\x61\x74\x61\x5f\ +\x65\x6e\x64\0\x64\x61\x74\x61\x5f\x6d\x65\x74\x61\0\x69\x6e\x67\x72\x65\x73\ +\x73\x5f\x69\x66\x69\x6e\x64\x65\x78\0\x72\x78\x5f\x71\x75\x65\x75\x65\x5f\x69\ +\x6e\x64\x65\x78\0\x65\x67\x72\x65\x73\x73\x5f\x69\x66\x69\x6e\x64\x65\x78\0\ +\x5f\x5f\x75\x33\x32\0\x75\x6e\x73\x69\x67\x6e\x65\x64\x20\x69\x6e\x74\0\x63\ +\x74\x78\0\x69\x6e\x74\0\x78\x64\x70\x5f\x72\x65\x63\x65\x69\x76\x65\0\x78\x64\ +\x70\x5f\x70\x72\x6f\x67\0\x2f\x68\x6f\x6d\x65\x2f\x6f\x73\x62\x6f\x78\x65\x73\ +\x2f\x54\x46\x47\x2f\x73\x72\x63\x2f\x65\x62\x70\x66\x2f\x78\x64\x70\x5f\x66\ +\x69\x6c\x74\x65\x72\x2e\x62\x70\x66\x2e\x63\0\x20\x20\x20\x20\x76\x6f\x69\x64\ +\x20\x2a\x64\x61\x74\x61\x5f\x65\x6e\x64\x20\x3d\x20\x28\x76\x6f\x69\x64\x20\ +\x2a\x29\x28\x6c\x6f\x6e\x67\x29\x63\x74\x78\x2d\x3e\x64\x61\x74\x61\x5f\x65\ +\x6e\x64\x3b\0\x20\x20\x20\x20\x76\x6f\x69\x64\x20\x2a\x64\x61\x74\x61\x20\x3d\ +\x20\x28\x76\x6f\x69\x64\x20\x2a\x29\x28\x6c\x6f\x6e\x67\x29\x63\x74\x78\x2d\ +\x3e\x64\x61\x74\x61\x3b\0\x2f\x68\x6f\x6d\x65\x2f\x6f\x73\x62\x6f\x78\x65\x73\ +\x2f\x54\x46\x47\x2f\x73\x72\x63\x2f\x69\x6e\x63\x6c\x75\x64\x65\x2f\x70\x61\ +\x63\x6b\x65\x74\x2f\x70\x61\x63\x6b\x65\x74\x5f\x6d\x61\x6e\x61\x67\x65\x72\ +\x2e\x68\0\x20\x20\x20\x20\x69\x66\x20\x28\x28\x76\x6f\x69\x64\x20\x2a\x29\x65\ +\x74\x68\x20\x2b\x20\x73\x69\x7a\x65\x6f\x66\x28\x73\x74\x72\x75\x63\x74\x20\ +\x65\x74\x68\x68\x64\x72\x29\x20\x3e\x20\x64\x61\x74\x61\x5f\x65\x6e\x64\x29\ +\x7b\0\x20\x20\x20\x20\x69\x66\x28\x65\x74\x68\x65\x72\x6e\x65\x74\x5f\x68\x65\ +\x61\x64\x65\x72\x5f\x62\x6f\x75\x6e\x64\x5f\x63\x68\x65\x63\x6b\x28\x65\x74\ +\x68\x2c\x20\x64\x61\x74\x61\x5f\x65\x6e\x64\x29\x3c\x30\x29\x7b\0\x20\x20\x20\ +\x20\x20\x20\x20\x20\x62\x70\x66\x5f\x70\x72\x69\x6e\x74\x6b\x28\x22\x42\x6f\ +\x75\x6e\x64\x20\x63\x68\x65\x63\x6b\x20\x66\x61\x69\x6c\x20\x41\x22\x29\x3b\0\ +\x20\x20\x20\x20\x69\x66\x20\x28\x28\x76\x6f\x69\x64\x20\x2a\x29\x69\x70\x20\ +\x2b\x20\x73\x69\x7a\x65\x6f\x66\x28\x2a\x69\x70\x29\x20\x3e\x20\x64\x61\x74\ +\x61\x5f\x65\x6e\x64\x29\x7b\0\x20\x20\x20\x20\x69\x66\x20\x28\x69\x70\x5f\x68\ +\x65\x61\x64\x65\x72\x5f\x62\x6f\x75\x6e\x64\x5f\x63\x68\x65\x63\x6b\x28\x69\ +\x70\x2c\x20\x64\x61\x74\x61\x5f\x65\x6e\x64\x29\x3c\x30\x29\x7b\0\x20\x20\x20\ +\x20\x20\x20\x20\x20\x62\x70\x66\x5f\x70\x72\x69\x6e\x74\x6b\x28\x22\x42\x22\ +\x29\x3b\0\x20\x20\x20\x20\x73\x77\x69\x74\x63\x68\x28\x69\x70\x2d\x3e\x70\x72\ +\x6f\x74\x6f\x63\x6f\x6c\x29\x7b\0\x20\x20\x20\x20\x69\x66\x20\x28\x67\x65\x74\ +\x5f\x70\x72\x6f\x74\x6f\x63\x6f\x6c\x28\x64\x61\x74\x61\x29\x20\x21\x3d\x20\ +\x49\x50\x50\x52\x4f\x54\x4f\x5f\x54\x43\x50\x29\x7b\0\x20\x20\x20\x20\x20\x20\ +\x20\x20\x62\x70\x66\x5f\x70\x72\x69\x6e\x74\x6b\x28\x22\x43\x22\x29\x3b\0\x20\ +\x20\x20\x20\x69\x66\x20\x28\x28\x76\x6f\x69\x64\x20\x2a\x29\x74\x63\x70\x20\ +\x2b\x20\x73\x69\x7a\x65\x6f\x66\x28\x2a\x74\x63\x70\x29\x20\x3e\x20\x64\x61\ +\x74\x61\x5f\x65\x6e\x64\x29\x7b\0\x20\x20\x20\x20\x69\x66\x20\x28\x74\x63\x70\ +\x5f\x68\x65\x61\x64\x65\x72\x5f\x62\x6f\x75\x6e\x64\x5f\x63\x68\x65\x63\x6b\ +\x28\x74\x63\x70\x2c\x20\x64\x61\x74\x61\x5f\x65\x6e\x64\x29\x29\x7b\0\x20\x20\ +\x20\x20\x20\x20\x20\x20\x62\x70\x66\x5f\x70\x72\x69\x6e\x74\x6b\x28\x22\x44\ +\x22\x29\x3b\0\x7d\0\x2f\x68\x6f\x6d\x65\x2f\x6f\x73\x62\x6f\x78\x65\x73\x2f\ +\x54\x46\x47\x2f\x73\x72\x63\x2f\x69\x6e\x63\x6c\x75\x64\x65\x2f\x70\x61\x63\ +\x6b\x65\x74\x2f\x70\x72\x6f\x74\x6f\x63\x6f\x6c\x2f\x74\x63\x70\x5f\x68\x65\ +\x6c\x70\x65\x72\x2e\x68\0\x20\x20\x20\x20\x72\x65\x74\x75\x72\x6e\x20\x6e\x74\ +\x6f\x68\x73\x28\x74\x63\x70\x2d\x3e\x64\x65\x73\x74\x29\x3b\0\x20\x20\x20\x20\ +\x69\x66\x20\x28\x67\x65\x74\x5f\x74\x63\x70\x5f\x64\x65\x73\x74\x5f\x70\x6f\ +\x72\x74\x28\x74\x63\x70\x29\x20\x21\x3d\x20\x53\x45\x43\x52\x45\x54\x5f\x50\ +\x41\x43\x4b\x45\x54\x5f\x44\x45\x53\x54\x5f\x50\x4f\x52\x54\x29\x7b\0\x20\x20\ +\x20\x20\x20\x20\x20\x20\x62\x70\x66\x5f\x70\x72\x69\x6e\x74\x6b\x28\x22\x45\ +\x20\x25\x69\x5c\x6e\x22\x2c\x20\x6e\x74\x6f\x68\x73\x28\x74\x63\x70\x2d\x3e\ +\x64\x65\x73\x74\x29\x29\x3b\0\x20\x20\x20\x20\x70\x61\x79\x6c\x6f\x61\x64\x5f\ +\x73\x69\x7a\x65\x20\x3d\x20\x6e\x74\x6f\x68\x73\x28\x69\x70\x2d\x3e\x74\x6f\ +\x74\x5f\x6c\x65\x6e\x29\x20\x2d\x20\x28\x74\x63\x70\x2d\x3e\x64\x6f\x66\x66\ +\x20\x2a\x20\x34\x29\x20\x2d\x20\x28\x69\x70\x2d\x3e\x69\x68\x6c\x20\x2a\x20\ +\x34\x29\x3b\0\x20\x20\x20\x20\x69\x66\x20\x28\x70\x61\x79\x6c\x6f\x61\x64\x5f\ +\x73\x69\x7a\x65\x20\x21\x3d\x20\x73\x69\x7a\x65\x6f\x66\x28\x6d\x61\x74\x63\ +\x68\x5f\x70\x61\x74\x74\x65\x72\x6e\x29\x20\x2d\x20\x31\x29\x20\x7b\0\x20\x20\ +\x20\x20\x20\x20\x20\x20\x62\x70\x66\x5f\x70\x72\x69\x6e\x74\x6b\x28\x22\x46\ +\x22\x29\x3b\0\x20\x20\x20\x20\x69\x66\x20\x28\x28\x76\x6f\x69\x64\x20\x2a\x29\ +\x70\x61\x79\x6c\x6f\x61\x64\x20\x2b\x20\x70\x61\x79\x6c\x6f\x61\x64\x5f\x73\ +\x69\x7a\x65\x20\x3e\x20\x64\x61\x74\x61\x5f\x65\x6e\x64\x29\x7b\0\x20\x20\x20\ +\x20\x69\x66\x20\x28\x74\x63\x70\x5f\x70\x61\x79\x6c\x6f\x61\x64\x5f\x62\x6f\ +\x75\x6e\x64\x5f\x63\x68\x65\x63\x6b\x28\x70\x61\x79\x6c\x6f\x61\x64\x2c\x20\ +\x70\x61\x79\x6c\x6f\x61\x64\x5f\x73\x69\x7a\x65\x2c\x20\x64\x61\x74\x61\x5f\ +\x65\x6e\x64\x29\x29\x7b\0\x20\x20\x20\x20\x20\x20\x20\x20\x62\x70\x66\x5f\x70\ \x72\x69\x6e\x74\x6b\x28\x22\x47\x22\x29\x3b\0\x20\x20\x20\x20\x62\x70\x66\x5f\ \x70\x72\x69\x6e\x74\x6b\x28\x22\x52\x65\x63\x65\x69\x76\x65\x64\x20\x76\x61\ \x6c\x69\x64\x20\x54\x43\x50\x20\x70\x61\x63\x6b\x65\x74\x20\x77\x69\x74\x68\ \x20\x70\x61\x79\x6c\x6f\x61\x64\x20\x25\x73\x20\x6f\x66\x20\x73\x69\x7a\x65\ \x20\x25\x69\x5c\x6e\x22\x2c\x20\x70\x61\x79\x6c\x6f\x61\x64\x2c\x20\x70\x61\ -\x79\x6c\x6f\x61\x64\x5f\x73\x69\x7a\x65\x29\x3b\0\x20\x20\x20\x20\x20\x20\x20\ -\x20\x69\x66\x20\x28\x70\x61\x79\x6c\x6f\x61\x64\x5b\x69\x5d\x20\x21\x3d\x20\ -\x6d\x61\x74\x63\x68\x5f\x70\x61\x74\x74\x65\x72\x6e\x5b\x69\x5d\x29\x7b\0\x20\ -\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x62\x70\x66\x5f\x70\x72\x69\x6e\ -\x74\x6b\x28\x22\x48\x22\x29\x3b\0\x7d\0\x20\x20\x20\x20\x62\x70\x66\x5f\x70\ -\x72\x69\x6e\x74\x6b\x28\x22\x42\x50\x46\x20\x66\x69\x6e\x69\x73\x68\x65\x64\ -\x5c\x6e\x20\x22\x29\x3b\0\x20\x20\x20\x20\x70\x61\x79\x6c\x6f\x61\x64\x5b\x31\ -\x5d\x20\x3d\x20\x27\x62\x27\x3b\0\x63\x68\x61\x72\0\x5f\x5f\x41\x52\x52\x41\ -\x59\x5f\x53\x49\x5a\x45\x5f\x54\x59\x50\x45\x5f\x5f\0\x4c\x49\x43\x45\x4e\x53\ -\x45\0\x78\x64\x70\x5f\x72\x65\x63\x65\x69\x76\x65\x2e\x5f\x5f\x5f\x5f\x66\x6d\ -\x74\0\x78\x64\x70\x5f\x72\x65\x63\x65\x69\x76\x65\x2e\x5f\x5f\x5f\x5f\x66\x6d\ -\x74\x2e\x31\0\x78\x64\x70\x5f\x72\x65\x63\x65\x69\x76\x65\x2e\x5f\x5f\x5f\x5f\ -\x66\x6d\x74\x2e\x32\0\x78\x64\x70\x5f\x72\x65\x63\x65\x69\x76\x65\x2e\x5f\x5f\ -\x5f\x5f\x66\x6d\x74\x2e\x33\0\x78\x64\x70\x5f\x72\x65\x63\x65\x69\x76\x65\x2e\ -\x5f\x5f\x5f\x5f\x66\x6d\x74\x2e\x34\0\x78\x64\x70\x5f\x72\x65\x63\x65\x69\x76\ -\x65\x2e\x5f\x5f\x5f\x5f\x66\x6d\x74\x2e\x35\0\x78\x64\x70\x5f\x72\x65\x63\x65\ -\x69\x76\x65\x2e\x5f\x5f\x5f\x5f\x66\x6d\x74\x2e\x36\0\x78\x64\x70\x5f\x72\x65\ -\x63\x65\x69\x76\x65\x2e\x5f\x5f\x5f\x5f\x66\x6d\x74\x2e\x37\0\x78\x64\x70\x5f\ -\x72\x65\x63\x65\x69\x76\x65\x2e\x5f\x5f\x5f\x5f\x66\x6d\x74\x2e\x38\0\x78\x64\ -\x70\x5f\x72\x65\x63\x65\x69\x76\x65\x2e\x5f\x5f\x5f\x5f\x66\x6d\x74\x2e\x39\0\ -\x2e\x72\x6f\x64\x61\x74\x61\0\x6c\x69\x63\x65\x6e\x73\x65\0\x9f\xeb\x01\0\x20\ -\0\0\0\0\0\0\0\x14\0\0\0\x14\0\0\0\xcc\x02\0\0\xe0\x02\0\0\0\0\0\0\x08\0\0\0\ -\x75\0\0\0\x01\0\0\0\0\0\0\0\x07\0\0\0\x10\0\0\0\x75\0\0\0\x2c\0\0\0\0\0\0\0\ -\x7e\0\0\0\xaa\0\0\0\x29\xe4\0\0\x08\0\0\0\x7e\0\0\0\xdc\0\0\0\x25\xe8\0\0\x10\ -\0\0\0\x06\x01\0\0\x44\x01\0\0\x15\x28\0\0\x20\0\0\0\x7e\0\0\0\x7d\x01\0\0\x08\ -\x10\x01\0\x28\0\0\0\x7e\0\0\0\xb3\x01\0\0\x09\x14\x01\0\x48\0\0\0\x06\x01\0\0\ -\xdd\x01\0\0\x14\x44\0\0\x58\0\0\0\x7e\0\0\0\x0b\x02\0\0\x09\x28\x01\0\x60\0\0\ -\0\x7e\0\0\0\x3b\x02\0\0\x09\x2c\x01\0\x78\0\0\0\x06\x01\0\0\x54\x02\0\0\x10\ -\x94\0\0\x80\0\0\0\x7e\0\0\0\x6e\x02\0\0\x09\x3c\x01\0\x88\0\0\0\x7e\0\0\0\x9a\ -\x02\0\0\x09\x40\x01\0\xa0\0\0\0\x06\x01\0\0\xb3\x02\0\0\x15\x60\0\0\xb0\0\0\0\ -\x7e\0\0\0\xe3\x02\0\0\x09\x54\x01\0\xb8\0\0\0\x7e\0\0\0\x13\x03\0\0\x09\x58\ -\x01\0\xd0\0\0\0\x7e\0\0\0\x2c\x03\0\0\x0e\x68\x01\0\xd8\0\0\0\x7e\0\0\0\x2c\ -\x03\0\0\x09\x68\x01\0\xe0\0\0\0\x7e\0\0\0\x4f\x03\0\0\x09\x6c\x01\0\xf8\0\0\0\ -\x7e\0\0\0\x68\x03\0\0\x2f\x7c\x01\0\0\x01\0\0\x7e\0\0\0\x68\x03\0\0\x34\x7c\ -\x01\0\x10\x01\0\0\x7e\0\0\0\x68\x03\0\0\x14\x7c\x01\0\x20\x01\0\0\x7e\0\0\0\ -\x68\x03\0\0\x27\x7c\x01\0\x28\x01\0\0\x7e\0\0\0\x68\x03\0\0\x40\x7c\x01\0\x30\ -\x01\0\0\x7e\0\0\0\x68\x03\0\0\x44\x7c\x01\0\x40\x01\0\0\x7e\0\0\0\x68\x03\0\0\ -\x39\x7c\x01\0\x48\x01\0\0\x7e\0\0\0\xb1\x03\0\0\x09\x8c\x01\0\x50\x01\0\0\x7e\ -\0\0\0\xe6\x03\0\0\x09\x90\x01\0\x68\x01\0\0\x7e\0\0\0\0\0\0\0\0\0\0\0\x70\x01\ -\0\0\x7e\0\0\0\xff\x03\0\0\x19\xa4\x01\0\x80\x01\0\0\x7e\0\0\0\xff\x03\0\0\x09\ -\xa4\x01\0\x88\x01\0\0\x7e\0\0\0\x33\x04\0\0\x09\xa8\x01\0\xa0\x01\0\0\x7e\0\0\ -\0\x4c\x04\0\0\x05\xb8\x01\0\xd0\x01\0\0\x7e\0\0\0\xad\x04\0\0\x0d\xc4\x01\0\ -\xd8\x01\0\0\x7e\0\0\0\xad\x04\0\0\x0d\xc4\x01\0\xe0\x01\0\0\x7e\0\0\0\xad\x04\ -\0\0\x0d\xc4\x01\0\xe8\x01\0\0\x7e\0\0\0\xad\x04\0\0\x0d\xc4\x01\0\xf0\x01\0\0\ -\x7e\0\0\0\xda\x04\0\0\x0d\xc8\x01\0\0\x02\0\0\x7e\0\0\0\0\0\0\0\0\0\0\0\x10\ -\x02\0\0\x7e\0\0\0\xf7\x04\0\0\x01\x10\x02\0\x20\x02\0\0\x7e\0\0\0\xad\x04\0\0\ -\x0d\xc4\x01\0\x28\x02\0\0\x7e\0\0\0\xad\x04\0\0\x0d\xc4\x01\0\x30\x02\0\0\x7e\ -\0\0\0\xad\x04\0\0\x0d\xc4\x01\0\x38\x02\0\0\x7e\0\0\0\xad\x04\0\0\x0d\xc4\x01\ -\0\x40\x02\0\0\x7e\0\0\0\xf9\x04\0\0\x05\xdc\x01\0\x68\x02\0\0\x7e\0\0\0\x1c\ -\x05\0\0\x10\xe0\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ -\x9a\x01\0\0\0\0\x02\0\xf8\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x5e\x01\0\0\0\0\x02\0\ -\x68\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x23\x01\0\0\0\0\x02\0\xa0\x01\0\0\0\0\0\0\ -\0\0\0\0\0\0\0\0\xe8\0\0\0\0\0\x02\0\xf0\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xc3\0\ -\0\0\0\0\x02\0\0\x02\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xa5\0\0\0\0\0\x02\0\x08\x02\0\ -\0\0\0\0\0\0\0\0\0\0\0\0\0\x80\0\0\0\0\0\x02\0\x10\x02\0\0\0\0\0\0\0\0\0\0\0\0\ -\0\0\x57\x01\0\0\0\0\x02\0\x48\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x92\x01\0\0\0\0\ -\x02\0\x20\x02\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x1c\x01\0\0\0\0\x02\0\x78\0\0\0\0\0\ -\0\0\0\0\0\0\0\0\0\0\xe1\0\0\0\0\0\x02\0\xa0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x9e\ -\0\0\0\0\0\x02\0\xd0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x14\0\0\0\x01\0\x04\0\0\0\0\ -\0\0\0\0\0\x13\0\0\0\0\0\0\0\x7c\x01\0\0\x01\0\x04\0\x13\0\0\0\0\0\0\0\x02\0\0\ -\0\0\0\0\0\x66\x01\0\0\x01\0\x04\0\x15\0\0\0\0\0\0\0\x02\0\0\0\0\0\0\0\x41\x01\ -\0\0\x01\0\x04\0\x17\0\0\0\0\0\0\0\x02\0\0\0\0\0\0\0\x2b\x01\0\0\x01\0\x04\0\ -\x19\0\0\0\0\0\0\0\x02\0\0\0\0\0\0\0\x06\x01\0\0\x01\0\x04\0\x1b\0\0\0\0\0\0\0\ -\x02\0\0\0\0\0\0\0\xf0\0\0\0\x01\0\x04\0\x1d\0\0\0\0\0\0\0\x02\0\0\0\0\0\0\0\ -\xcb\0\0\0\x01\0\x04\0\x1f\0\0\0\0\0\0\0\x36\0\0\0\0\0\0\0\xad\0\0\0\x01\0\x04\ -\0\x55\0\0\0\0\0\0\0\x02\0\0\0\0\0\0\0\x88\0\0\0\x01\0\x04\0\x57\0\0\0\0\0\0\0\ -\x0f\0\0\0\0\0\0\0\0\0\0\0\x03\0\x02\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ -\x03\0\x04\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x78\0\0\0\x11\0\x03\0\0\0\0\0\0\0\ -\0\0\x0d\0\0\0\0\0\0\0\x43\0\0\0\x12\0\x02\0\0\0\0\0\0\0\0\0\x78\x02\0\0\0\0\0\ -\0\x28\0\0\0\0\0\0\0\x01\0\0\0\x18\0\0\0\x60\0\0\0\0\0\0\0\x01\0\0\0\x18\0\0\0\ -\x88\0\0\0\0\0\0\0\x01\0\0\0\x18\0\0\0\xb8\0\0\0\0\0\0\0\x01\0\0\0\x18\0\0\0\ -\xe0\0\0\0\0\0\0\0\x01\0\0\0\x18\0\0\0\x50\x01\0\0\0\0\0\0\x01\0\0\0\x18\0\0\0\ -\x88\x01\0\0\0\0\0\0\x01\0\0\0\x18\0\0\0\xa0\x01\0\0\0\0\0\0\x01\0\0\0\x18\0\0\ -\0\xf0\x01\0\0\0\0\0\0\x01\0\0\0\x18\0\0\0\x40\x02\0\0\0\0\0\0\x01\0\0\0\x18\0\ -\0\0\x28\x02\0\0\0\0\0\0\x0a\0\0\0\x18\0\0\0\x34\x02\0\0\0\0\0\0\x0a\0\0\0\x18\ -\0\0\0\x40\x02\0\0\0\0\0\0\x0a\0\0\0\x18\0\0\0\x4c\x02\0\0\0\0\0\0\x0a\0\0\0\ -\x18\0\0\0\x58\x02\0\0\0\0\0\0\x0a\0\0\0\x18\0\0\0\x64\x02\0\0\0\0\0\0\x0a\0\0\ -\0\x18\0\0\0\x70\x02\0\0\0\0\0\0\x0a\0\0\0\x18\0\0\0\x7c\x02\0\0\0\0\0\0\x0a\0\ -\0\0\x18\0\0\0\x88\x02\0\0\0\0\0\0\x0a\0\0\0\x18\0\0\0\x94\x02\0\0\0\0\0\0\x0a\ -\0\0\0\x18\0\0\0\xac\x02\0\0\0\0\0\0\0\0\0\0\x19\0\0\0\x2c\0\0\0\0\0\0\0\0\0\0\ +\x79\x6c\x6f\x61\x64\x5f\x73\x69\x7a\x65\x29\x3b\0\x2f\x68\x6f\x6d\x65\x2f\x6f\ +\x73\x62\x6f\x78\x65\x73\x2f\x54\x46\x47\x2f\x73\x72\x63\x2f\x69\x6e\x63\x6c\ +\x75\x64\x65\x2f\x63\x6f\x6d\x6d\x6f\x6e\x2f\x63\x6f\x6d\x6d\x6f\x6e\x5f\x75\ +\x74\x69\x6c\x73\x2e\x68\0\x20\x20\x20\x20\x20\x20\x20\x20\x69\x66\x20\x28\x73\ +\x74\x72\x31\x5b\x69\x69\x5d\x20\x21\x3d\x20\x73\x74\x72\x32\x5b\x69\x69\x5d\ +\x29\x7b\0\x20\x20\x20\x20\x20\x20\x20\x20\x62\x70\x66\x5f\x70\x72\x69\x6e\x74\ +\x6b\x28\x22\x48\x22\x29\x3b\0\x20\x20\x20\x20\x62\x70\x66\x5f\x70\x72\x69\x6e\ +\x74\x6b\x28\x22\x42\x50\x46\x20\x66\x69\x6e\x69\x73\x68\x65\x64\x5c\x6e\x20\ +\x22\x29\x3b\0\x20\x20\x20\x20\x70\x61\x79\x6c\x6f\x61\x64\x5b\x31\x5d\x20\x3d\ +\x20\x27\x62\x27\x3b\0\x63\x68\x61\x72\0\x5f\x5f\x41\x52\x52\x41\x59\x5f\x53\ +\x49\x5a\x45\x5f\x54\x59\x50\x45\x5f\x5f\0\x4c\x49\x43\x45\x4e\x53\x45\0\x78\ +\x64\x70\x5f\x72\x65\x63\x65\x69\x76\x65\x2e\x5f\x5f\x5f\x5f\x66\x6d\x74\0\x78\ +\x64\x70\x5f\x72\x65\x63\x65\x69\x76\x65\x2e\x5f\x5f\x5f\x5f\x66\x6d\x74\x2e\ +\x31\0\x78\x64\x70\x5f\x72\x65\x63\x65\x69\x76\x65\x2e\x5f\x5f\x5f\x5f\x66\x6d\ +\x74\x2e\x32\0\x78\x64\x70\x5f\x72\x65\x63\x65\x69\x76\x65\x2e\x5f\x5f\x5f\x5f\ +\x66\x6d\x74\x2e\x33\0\x78\x64\x70\x5f\x72\x65\x63\x65\x69\x76\x65\x2e\x5f\x5f\ +\x5f\x5f\x66\x6d\x74\x2e\x34\0\x78\x64\x70\x5f\x72\x65\x63\x65\x69\x76\x65\x2e\ +\x5f\x5f\x5f\x5f\x66\x6d\x74\x2e\x35\0\x78\x64\x70\x5f\x72\x65\x63\x65\x69\x76\ +\x65\x2e\x5f\x5f\x5f\x5f\x66\x6d\x74\x2e\x36\0\x78\x64\x70\x5f\x72\x65\x63\x65\ +\x69\x76\x65\x2e\x5f\x5f\x5f\x5f\x66\x6d\x74\x2e\x37\0\x78\x64\x70\x5f\x72\x65\ +\x63\x65\x69\x76\x65\x2e\x5f\x5f\x5f\x5f\x66\x6d\x74\x2e\x38\0\x78\x64\x70\x5f\ +\x72\x65\x63\x65\x69\x76\x65\x2e\x5f\x5f\x5f\x5f\x66\x6d\x74\x2e\x39\0\x2e\x72\ +\x6f\x64\x61\x74\x61\0\x6c\x69\x63\x65\x6e\x73\x65\0\x9f\xeb\x01\0\x20\0\0\0\0\ +\0\0\0\x14\0\0\0\x14\0\0\0\xcc\x02\0\0\xe0\x02\0\0\0\0\0\0\x08\0\0\0\x75\0\0\0\ +\x01\0\0\0\0\0\0\0\x07\0\0\0\x10\0\0\0\x75\0\0\0\x2c\0\0\0\0\0\0\0\x7e\0\0\0\ +\xaa\0\0\0\x29\xf4\0\0\x08\0\0\0\x7e\0\0\0\xdc\0\0\0\x25\xf8\0\0\x10\0\0\0\x06\ +\x01\0\0\x3c\x01\0\0\x15\x28\0\0\x20\0\0\0\x7e\0\0\0\x75\x01\0\0\x08\x24\x01\0\ +\x28\0\0\0\x7e\0\0\0\xab\x01\0\0\x09\x28\x01\0\x48\0\0\0\x06\x01\0\0\xd5\x01\0\ +\0\x14\x44\0\0\x58\0\0\0\x7e\0\0\0\x03\x02\0\0\x09\x3c\x01\0\x60\0\0\0\x7e\0\0\ +\0\x33\x02\0\0\x09\x40\x01\0\x78\0\0\0\x06\x01\0\0\x4c\x02\0\0\x10\xb0\0\0\x80\ +\0\0\0\x7e\0\0\0\x66\x02\0\0\x09\x50\x01\0\x88\0\0\0\x7e\0\0\0\x92\x02\0\0\x09\ +\x54\x01\0\xa0\0\0\0\x06\x01\0\0\xab\x02\0\0\x15\x60\0\0\xb0\0\0\0\x7e\0\0\0\ +\xdb\x02\0\0\x09\x68\x01\0\xb8\0\0\0\x7e\0\0\0\x0b\x03\0\0\x09\x6c\x01\0\xc8\0\ +\0\0\x7e\0\0\0\0\0\0\0\0\0\0\0\xd8\0\0\0\x7e\0\0\0\x24\x03\0\0\x01\x20\x02\0\ +\xe8\0\0\0\x26\x03\0\0\x61\x03\0\0\x0c\x34\0\0\xf0\0\0\0\x7e\0\0\0\x7e\x03\0\0\ +\x09\x7c\x01\0\0\x01\0\0\x7e\0\0\0\xba\x03\0\0\x09\x80\x01\0\x28\x01\0\0\x7e\0\ +\0\0\xea\x03\0\0\x2f\x90\x01\0\x30\x01\0\0\x7e\0\0\0\xea\x03\0\0\x34\x90\x01\0\ +\x40\x01\0\0\x7e\0\0\0\xea\x03\0\0\x14\x90\x01\0\x50\x01\0\0\x7e\0\0\0\xea\x03\ +\0\0\x27\x90\x01\0\x58\x01\0\0\x7e\0\0\0\xea\x03\0\0\x40\x90\x01\0\x60\x01\0\0\ +\x7e\0\0\0\xea\x03\0\0\x44\x90\x01\0\x70\x01\0\0\x7e\0\0\0\xea\x03\0\0\x39\x90\ +\x01\0\x78\x01\0\0\x7e\0\0\0\x33\x04\0\0\x09\xa0\x01\0\x80\x01\0\0\x7e\0\0\0\ +\x68\x04\0\0\x09\xa4\x01\0\x98\x01\0\0\x7e\0\0\0\0\0\0\0\0\0\0\0\xa0\x01\0\0\ +\x06\x01\0\0\x81\x04\0\0\x19\x7c\0\0\xb0\x01\0\0\x7e\0\0\0\xb5\x04\0\0\x09\xb8\ +\x01\0\xb8\x01\0\0\x7e\0\0\0\xf8\x04\0\0\x09\xbc\x01\0\xd0\x01\0\0\x7e\0\0\0\ +\x11\x05\0\0\x05\xcc\x01\0\0\x02\0\0\x72\x05\0\0\xa6\x05\0\0\x0d\x6c\0\0\x08\ +\x02\0\0\x72\x05\0\0\xa6\x05\0\0\x0d\x6c\0\0\x10\x02\0\0\x7e\0\0\0\xc9\x05\0\0\ +\x09\xdc\x01\0\x28\x02\0\0\x72\x05\0\0\xa6\x05\0\0\x0d\x6c\0\0\x30\x02\0\0\x72\ +\x05\0\0\xa6\x05\0\0\x0d\x6c\0\0\x38\x02\0\0\x72\x05\0\0\xa6\x05\0\0\x0d\x6c\0\ +\0\x40\x02\0\0\x72\x05\0\0\xa6\x05\0\0\x0d\x6c\0\0\x48\x02\0\0\x72\x05\0\0\xa6\ +\x05\0\0\x0d\x6c\0\0\x50\x02\0\0\x72\x05\0\0\xa6\x05\0\0\x0d\x6c\0\0\x58\x02\0\ +\0\x7e\0\0\0\xe2\x05\0\0\x05\xec\x01\0\x80\x02\0\0\x7e\0\0\0\x05\x06\0\0\x10\ +\xf0\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x9a\ +\x01\0\0\0\0\x02\0\x28\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x66\x01\0\0\0\0\x02\0\ +\x98\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x2b\x01\0\0\0\0\x02\0\xd0\x01\0\0\0\0\0\0\ +\0\0\0\0\0\0\0\0\x06\x01\0\0\0\0\x02\0\x10\x02\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xe8\ +\0\0\0\0\0\x02\0\xc8\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xc3\0\0\0\0\0\x02\0\xd0\0\0\ +\0\0\0\0\0\0\0\0\0\0\0\0\0\xa5\0\0\0\0\0\x02\0\xd8\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ +\0\x80\0\0\0\0\0\x02\0\x28\x02\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x5f\x01\0\0\0\0\x02\ +\0\x48\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x24\x01\0\0\0\0\x02\0\x78\0\0\0\0\0\0\0\0\ +\0\0\0\0\0\0\0\xe1\0\0\0\0\0\x02\0\xa0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x9e\0\0\0\ +\0\0\x02\0\xe8\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x14\0\0\0\x01\0\x04\0\0\0\0\0\0\0\ +\0\0\x13\0\0\0\0\0\0\0\x84\x01\0\0\x01\0\x04\0\x13\0\0\0\0\0\0\0\x02\0\0\0\0\0\ +\0\0\x6e\x01\0\0\x01\0\x04\0\x15\0\0\0\0\0\0\0\x02\0\0\0\0\0\0\0\x49\x01\0\0\ +\x01\0\x04\0\x17\0\0\0\0\0\0\0\x02\0\0\0\0\0\0\0\x33\x01\0\0\x01\0\x04\0\x19\0\ +\0\0\0\0\0\0\x06\0\0\0\0\0\0\0\x0e\x01\0\0\x01\0\x04\0\x1f\0\0\0\0\0\0\0\x02\0\ +\0\0\0\0\0\0\xf0\0\0\0\x01\0\x04\0\x21\0\0\0\0\0\0\0\x02\0\0\0\0\0\0\0\xcb\0\0\ +\0\x01\0\x04\0\x23\0\0\0\0\0\0\0\x36\0\0\0\0\0\0\0\xad\0\0\0\x01\0\x04\0\x59\0\ +\0\0\0\0\0\0\x02\0\0\0\0\0\0\0\x88\0\0\0\x01\0\x04\0\x5b\0\0\0\0\0\0\0\x0f\0\0\ +\0\0\0\0\0\0\0\0\0\x03\0\x02\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x03\0\ +\x04\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x78\0\0\0\x11\0\x03\0\0\0\0\0\0\0\0\0\ +\x0d\0\0\0\0\0\0\0\x43\0\0\0\x12\0\x02\0\0\0\0\0\0\0\0\0\x90\x02\0\0\0\0\0\0\ +\x28\0\0\0\0\0\0\0\x01\0\0\0\x18\0\0\0\x60\0\0\0\0\0\0\0\x01\0\0\0\x18\0\0\0\ +\x88\0\0\0\0\0\0\0\x01\0\0\0\x18\0\0\0\xb8\0\0\0\0\0\0\0\x01\0\0\0\x18\0\0\0\0\ +\x01\0\0\0\0\0\0\x01\0\0\0\x18\0\0\0\x80\x01\0\0\0\0\0\0\x01\0\0\0\x18\0\0\0\ +\xb8\x01\0\0\0\0\0\0\x01\0\0\0\x18\0\0\0\xd0\x01\0\0\0\0\0\0\x01\0\0\0\x18\0\0\ +\0\x10\x02\0\0\0\0\0\0\x01\0\0\0\x18\0\0\0\x58\x02\0\0\0\0\0\0\x01\0\0\0\x18\0\ +\0\0\x40\x02\0\0\0\0\0\0\x0a\0\0\0\x18\0\0\0\x4c\x02\0\0\0\0\0\0\x0a\0\0\0\x18\ +\0\0\0\x58\x02\0\0\0\0\0\0\x0a\0\0\0\x18\0\0\0\x64\x02\0\0\0\0\0\0\x0a\0\0\0\ +\x18\0\0\0\x70\x02\0\0\0\0\0\0\x0a\0\0\0\x18\0\0\0\x7c\x02\0\0\0\0\0\0\x0a\0\0\ +\0\x18\0\0\0\x88\x02\0\0\0\0\0\0\x0a\0\0\0\x18\0\0\0\x94\x02\0\0\0\0\0\0\x0a\0\ +\0\0\x18\0\0\0\xa0\x02\0\0\0\0\0\0\x0a\0\0\0\x18\0\0\0\xac\x02\0\0\0\0\0\0\x0a\ +\0\0\0\x18\0\0\0\xc4\x02\0\0\0\0\0\0\0\0\0\0\x19\0\0\0\x2c\0\0\0\0\0\0\0\0\0\0\ \0\x17\0\0\0\x40\0\0\0\0\0\0\0\0\0\0\0\x17\0\0\0\x50\0\0\0\0\0\0\0\0\0\0\0\x17\ \0\0\0\x60\0\0\0\0\0\0\0\0\0\0\0\x17\0\0\0\x70\0\0\0\0\0\0\0\0\0\0\0\x17\0\0\0\ \x80\0\0\0\0\0\0\0\0\0\0\0\x17\0\0\0\x90\0\0\0\0\0\0\0\0\0\0\0\x17\0\0\0\xa0\0\ @@ -355,7 +369,7 @@ xdp_filter_bpf__create_skeleton(struct xdp_filter_bpf *obj) \x90\x02\0\0\0\0\0\0\0\0\0\0\x17\0\0\0\xa0\x02\0\0\0\0\0\0\0\0\0\0\x17\0\0\0\ \xb0\x02\0\0\0\0\0\0\0\0\0\0\x17\0\0\0\xc0\x02\0\0\0\0\0\0\0\0\0\0\x17\0\0\0\ \xd0\x02\0\0\0\0\0\0\0\0\0\0\x17\0\0\0\xe0\x02\0\0\0\0\0\0\0\0\0\0\x17\0\0\0\ -\xf0\x02\0\0\0\0\0\0\0\0\0\0\x17\0\0\0\x20\x1f\x0e\x0f\x10\x11\x12\x13\x14\x15\ +\xf0\x02\0\0\0\0\0\0\0\0\0\0\x17\0\0\0\x21\x20\x0e\x0f\x10\x11\x12\x13\x14\x15\ \x16\x17\0\x2e\x74\x65\x78\x74\0\x2e\x72\x65\x6c\x2e\x42\x54\x46\x2e\x65\x78\ \x74\0\x78\x64\x70\x5f\x72\x65\x63\x65\x69\x76\x65\x2e\x5f\x5f\x5f\x5f\x66\x6d\ \x74\0\x2e\x72\x65\x6c\x78\x64\x70\x5f\x70\x72\x6f\x67\0\x2e\x6c\x6c\x76\x6d\ @@ -369,38 +383,38 @@ xdp_filter_bpf__create_skeleton(struct xdp_filter_bpf *obj) \x31\x37\0\x78\x64\x70\x5f\x72\x65\x63\x65\x69\x76\x65\x2e\x5f\x5f\x5f\x5f\x66\ \x6d\x74\x2e\x37\0\x4c\x42\x42\x30\x5f\x36\0\x4c\x42\x42\x30\x5f\x31\x36\0\x78\ \x64\x70\x5f\x72\x65\x63\x65\x69\x76\x65\x2e\x5f\x5f\x5f\x5f\x66\x6d\x74\x2e\ -\x36\0\x78\x64\x70\x5f\x72\x65\x63\x65\x69\x76\x65\x2e\x5f\x5f\x5f\x5f\x66\x6d\ -\x74\x2e\x35\0\x4c\x42\x42\x30\x5f\x34\0\x4c\x42\x42\x30\x5f\x31\x34\0\x78\x64\ -\x70\x5f\x72\x65\x63\x65\x69\x76\x65\x2e\x5f\x5f\x5f\x5f\x66\x6d\x74\x2e\x34\0\ -\x78\x64\x70\x5f\x72\x65\x63\x65\x69\x76\x65\x2e\x5f\x5f\x5f\x5f\x66\x6d\x74\ -\x2e\x33\0\x4c\x42\x42\x30\x5f\x32\0\x4c\x42\x42\x30\x5f\x31\x32\0\x78\x64\x70\ -\x5f\x72\x65\x63\x65\x69\x76\x65\x2e\x5f\x5f\x5f\x5f\x66\x6d\x74\x2e\x32\0\x78\ -\x64\x70\x5f\x72\x65\x63\x65\x69\x76\x65\x2e\x5f\x5f\x5f\x5f\x66\x6d\x74\x2e\ -\x31\0\x4c\x42\x42\x30\x5f\x32\x30\0\x4c\x42\x42\x30\x5f\x31\x30\0\0\0\0\0\0\0\ +\x36\0\x4c\x42\x42\x30\x5f\x31\x35\0\x78\x64\x70\x5f\x72\x65\x63\x65\x69\x76\ +\x65\x2e\x5f\x5f\x5f\x5f\x66\x6d\x74\x2e\x35\0\x4c\x42\x42\x30\x5f\x34\0\x4c\ +\x42\x42\x30\x5f\x31\x34\0\x78\x64\x70\x5f\x72\x65\x63\x65\x69\x76\x65\x2e\x5f\ +\x5f\x5f\x5f\x66\x6d\x74\x2e\x34\0\x78\x64\x70\x5f\x72\x65\x63\x65\x69\x76\x65\ +\x2e\x5f\x5f\x5f\x5f\x66\x6d\x74\x2e\x33\0\x4c\x42\x42\x30\x5f\x32\0\x4c\x42\ +\x42\x30\x5f\x31\x32\0\x78\x64\x70\x5f\x72\x65\x63\x65\x69\x76\x65\x2e\x5f\x5f\ +\x5f\x5f\x66\x6d\x74\x2e\x32\0\x78\x64\x70\x5f\x72\x65\x63\x65\x69\x76\x65\x2e\ +\x5f\x5f\x5f\x5f\x66\x6d\x74\x2e\x31\0\x4c\x42\x42\x30\x5f\x31\x30\0\0\0\0\0\0\ \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ -\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x01\0\0\0\x01\0\0\0\x06\0\0\0\0\0\0\ -\0\0\0\0\0\0\0\0\0\x40\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x04\0\0\0\ -\0\0\0\0\0\0\0\0\0\0\0\0\x2c\0\0\0\x01\0\0\0\x06\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ -\x40\0\0\0\0\0\0\0\x78\x02\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x08\0\0\0\0\0\0\0\0\0\0\ -\0\0\0\0\0\x4f\0\0\0\x01\0\0\0\x03\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xb8\x02\0\0\0\ -\0\0\0\x0d\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x67\ -\0\0\0\x01\0\0\0\x02\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xc5\x02\0\0\0\0\0\0\x66\0\0\ -\0\0\0\0\0\0\0\0\0\0\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x73\0\0\0\x01\0\0\ -\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x2b\x03\0\0\0\0\0\0\xf1\x08\0\0\0\0\0\0\0\0\ -\0\0\0\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x0b\0\0\0\x01\0\0\0\0\0\0\0\0\0\ -\0\0\0\0\0\0\0\0\0\0\x1c\x0c\0\0\0\0\0\0\0\x03\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x01\ -\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x5f\0\0\0\x02\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ -\0\0\x20\x0f\0\0\0\0\0\0\x88\x02\0\0\0\0\0\0\x0c\0\0\0\x19\0\0\0\x08\0\0\0\0\0\ -\0\0\x18\0\0\0\0\0\0\0\x28\0\0\0\x09\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xa8\ -\x11\0\0\0\0\0\0\xa0\0\0\0\0\0\0\0\x07\0\0\0\x02\0\0\0\x08\0\0\0\0\0\0\0\x10\0\ -\0\0\0\0\0\0\x6f\0\0\0\x09\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x48\x12\0\0\0\ -\0\0\0\xb0\0\0\0\0\0\0\0\x07\0\0\0\x05\0\0\0\x08\0\0\0\0\0\0\0\x10\0\0\0\0\0\0\ -\0\x07\0\0\0\x09\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xf8\x12\0\0\0\0\0\0\xd0\ -\x02\0\0\0\0\0\0\x07\0\0\0\x06\0\0\0\x08\0\0\0\0\0\0\0\x10\0\0\0\0\0\0\0\x35\0\ -\0\0\x03\x4c\xff\x6f\0\0\0\x80\0\0\0\0\0\0\0\0\0\0\0\0\xc8\x15\0\0\0\0\0\0\x0c\ -\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x57\0\0\0\x03\ -\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xd4\x15\0\0\0\0\0\0\xa2\x01\0\0\0\0\0\0\ -\0\0\0\0\0\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"; +\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x01\0\0\0\x01\0\0\0\x06\0\0\0\0\0\ +\0\0\0\0\0\0\0\0\0\0\x40\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x04\0\0\ +\0\0\0\0\0\0\0\0\0\0\0\0\0\x2c\0\0\0\x01\0\0\0\x06\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ +\0\x40\0\0\0\0\0\0\0\x90\x02\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x08\0\0\0\0\0\0\0\0\0\ +\0\0\0\0\0\0\x4f\0\0\0\x01\0\0\0\x03\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xd0\x02\0\0\ +\0\0\0\0\x0d\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ +\x67\0\0\0\x01\0\0\0\x02\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xdd\x02\0\0\0\0\0\0\x6a\ +\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x73\0\0\0\x01\ +\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x47\x03\0\0\0\0\0\0\xf2\x09\0\0\0\0\0\0\ +\0\0\0\0\0\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x0b\0\0\0\x01\0\0\0\0\0\0\0\ +\0\0\0\0\0\0\0\0\0\0\0\0\x39\x0d\0\0\0\0\0\0\0\x03\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ +\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x5f\0\0\0\x02\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ +\0\0\0\0\x40\x10\0\0\0\0\0\0\x88\x02\0\0\0\0\0\0\x0c\0\0\0\x19\0\0\0\x08\0\0\0\ +\0\0\0\0\x18\0\0\0\0\0\0\0\x28\0\0\0\x09\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ +\xc8\x12\0\0\0\0\0\0\xa0\0\0\0\0\0\0\0\x07\0\0\0\x02\0\0\0\x08\0\0\0\0\0\0\0\ +\x10\0\0\0\0\0\0\0\x6f\0\0\0\x09\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x68\x13\ +\0\0\0\0\0\0\xb0\0\0\0\0\0\0\0\x07\0\0\0\x05\0\0\0\x08\0\0\0\0\0\0\0\x10\0\0\0\ +\0\0\0\0\x07\0\0\0\x09\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x18\x14\0\0\0\0\0\ +\0\xd0\x02\0\0\0\0\0\0\x07\0\0\0\x06\0\0\0\x08\0\0\0\0\0\0\0\x10\0\0\0\0\0\0\0\ +\x35\0\0\0\x03\x4c\xff\x6f\0\0\0\x80\0\0\0\0\0\0\0\0\0\0\0\0\xe8\x16\0\0\0\0\0\ +\0\x0c\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x57\0\0\ +\0\x03\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xf4\x16\0\0\0\0\0\0\xa2\x01\0\0\0\ +\0\0\0\0\0\0\0\0\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"; return 0; err: diff --git a/src/bin/xdp_filter b/src/bin/xdp_filter index e9b8fd1..3fd0193 100755 Binary files a/src/bin/xdp_filter and b/src/bin/xdp_filter differ diff --git a/src/constants/constants.h b/src/constants/constants.h index c75db68..3a1a5fd 100644 --- a/src/constants/constants.h +++ b/src/constants/constants.h @@ -2,5 +2,6 @@ #define __CONSTANTS_H #define SECRET_PACKET_PAYLOAD "test" +#define SECRET_PACKET_DEST_PORT 9000 #endif \ No newline at end of file diff --git a/src/ebpf/xdp_filter.bpf.c b/src/ebpf/xdp_filter.bpf.c index 2eefcdb..99247ba 100644 --- a/src/ebpf/xdp_filter.bpf.c +++ b/src/ebpf/xdp_filter.bpf.c @@ -14,6 +14,7 @@ #include #include #include +#include #include #include @@ -22,7 +23,10 @@ #include "../user/xdp_filter.h" #include "../constants/constants.h" -#include "../include/packet/packet_manager.h" + +#include "packet/packet_manager.h" +#include "packet/protocol/tcp_helper.h" +#include "common/common_utils.h" char LICENSE[] SEC("license") = "Dual BSD/GPL"; @@ -56,10 +60,11 @@ int xdp_receive(struct xdp_md *ctx) void *data_end = (void *)(long)ctx->data_end; void *data = (void *)(long)ctx->data; - char match_pattern[] = "test"; - unsigned int payload_size, i; + char match_pattern[] = SECRET_PACKET_PAYLOAD; + int match_pattern_size = strlen(match_pattern); + unsigned int payload_size; struct ethhdr *eth = data; - unsigned char *payload; + char *payload; struct tcphdr *tcp; struct iphdr *ip; @@ -87,34 +92,32 @@ int xdp_receive(struct xdp_md *ctx) return XDP_PASS; } - if (tcp->dest != ntohs(9000)){ - bpf_printk("E"); + if (get_tcp_dest_port(tcp) != SECRET_PACKET_DEST_PORT){ + bpf_printk("E %i\n", ntohs(tcp->dest)); return XDP_PASS; } payload_size = ntohs(ip->tot_len) - (tcp->doff * 4) - (ip->ihl * 4); payload = (void *)tcp + tcp->doff*4; - // Here we use "size - 1" to account for the final '\0' in "test". + // We use "size - 1" to account for the final '\0' if (payload_size != sizeof(match_pattern) - 1) { bpf_printk("F"); return XDP_PASS; } // Point to start of payload. - if ((void *)payload + payload_size > data_end){ + if (tcp_payload_bound_check(payload, payload_size, data_end)){ bpf_printk("G"); return XDP_PASS; } bpf_printk("Received valid TCP packet with payload %s of size %i\n", payload, payload_size); // Compare each byte, exit if a difference is found. - for (i = 0; i < payload_size; i++) - if (payload[i] != match_pattern[i]){ - bpf_printk("H"); - return XDP_PASS; - } - + if(str_n_compare(payload, payload_size, match_pattern, match_pattern_size, payload_size)!=0){ + bpf_printk("H"); + return XDP_PASS; + } bpf_printk("BPF finished\n "); payload[1] = 'b'; diff --git a/src/include/common/common_utils.h b/src/include/common/common_utils.h new file mode 100644 index 0000000..35e8079 --- /dev/null +++ b/src/include/common/common_utils.h @@ -0,0 +1,35 @@ +#ifndef __COMMON_UTILS_H__ +#define __COMMON_UTILS_H__ + +/** +* Compares two strings. +* Yes, we cannot use strcmp from ebpf. +* https://github.com/iovisor/bcc/issues/691 +* +* Misteriouslly we can from xdp_filter, but it might not work somewhere else. +* However it is the verifier which does not let us call strncmp without +* additional checks so we will use this one anyway. +* +* @param str1 +* @param str1len //Just to please the ebpf verifier +* @param str2 +* @param str2len //Just to please the ebpf verifier +* @return 0 if equal, -1 if false +*/ +static __always_inline int str_n_compare(char* str1, int str1len, char* str2, int str2len, int size){ + for(int ii = 0; ii < size; ii++){ + if(str1len data_end){ + return -1; + } + return 0; //OK +} + /* UTILITIES */ @@ -44,4 +51,8 @@ static __always_inline int get_protocol(void* data){ } } +static __always_inline unsigned char* get_payload(struct tcphdr *tcp){ + return (void *)tcp + tcp->doff*4; +} + #endif \ No newline at end of file diff --git a/src/include/packet/protocol/tcp_helper.h b/src/include/packet/protocol/tcp_helper.h new file mode 100644 index 0000000..8c6cfd0 --- /dev/null +++ b/src/include/packet/protocol/tcp_helper.h @@ -0,0 +1,16 @@ +#ifndef __TCP_HELPER_H__ +#define __TCP_HELPER_H__ + +#include +#include + + +static __always_inline int get_tcp_src_port(struct tcphdr *tcp){ + return ntohs(tcp->source); +} + +static __always_inline int get_tcp_dest_port(struct tcphdr *tcp){ + return ntohs(tcp->dest); +} + +#endif \ No newline at end of file diff --git a/src/include/packet/tcp_helper.h b/src/include/packet/tcp_helper.h deleted file mode 100644 index e69de29..0000000