From 6ba995ae2b2ed0299920c7ec0195032c3295e311 Mon Sep 17 00:00:00 2001 From: Neale Pickett Date: Tue, 20 Sep 2011 09:21:11 -0600 Subject: [PATCH 01/36] create passwd file in ctf package --- packages/ctfbase/service/ctfd/passwd | 2 ++ packages/ctfbase/service/ctfd/run | 5 +++++ 2 files changed, 7 insertions(+) create mode 100644 packages/ctfbase/service/ctfd/passwd diff --git a/packages/ctfbase/service/ctfd/passwd b/packages/ctfbase/service/ctfd/passwd new file mode 100644 index 0000000..87eee46 --- /dev/null +++ b/packages/ctfbase/service/ctfd/passwd @@ -0,0 +1,2 @@ +root:$1$bEGCYemG$pAo9KXWQKgQNijRGKSb7e1:0:0:root:/:/bin/ash +nobody:x:65534:65534:nobody:/:/bin/sh diff --git a/packages/ctfbase/service/ctfd/run b/packages/ctfbase/service/ctfd/run index 431f9f9..1f7542a 100755 --- a/packages/ctfbase/service/ctfd/run +++ b/packages/ctfbase/service/ctfd/run @@ -2,6 +2,11 @@ exec 2>&1 +# Make user accounts +if ! [ -r /etc/passwd ]; then + cat passwd >/etc/passwd +fi + # Set up networking for all CTF ip ip link set eth0 up if ! ip route | grep -q default; then From 5c870b3c6f5b8c479b5f50f505f4ed3a571e8014 Mon Sep 17 00:00:00 2001 From: Neale Pickett Date: Wed, 21 Sep 2011 15:23:09 -0600 Subject: [PATCH 02/36] fixes for new buildroot + cleanup from merge --- packages/ctfbase/ctfbase.mk | 3 +-- packages/ctfbase/service/ctfd/passwd | 3 ++- packages/ctfbase/service/ctfd/run | 2 +- packages/mcp/mcp.mk | 2 -- src/token.c | 3 ++- 5 files changed, 6 insertions(+), 7 deletions(-) diff --git a/packages/ctfbase/ctfbase.mk b/packages/ctfbase/ctfbase.mk index 30611cb..6a5f78d 100644 --- a/packages/ctfbase/ctfbase.mk +++ b/packages/ctfbase/ctfbase.mk @@ -2,11 +2,10 @@ CTFBASE_PKGDIR = $(TARGET)/ctfbase ctfbase-install: ctfbase-build mkdir -p $(CTFBASE_PKGDIR)/bin/ + cp packages/ctfbase/src/arc4 $(CTFBASE_PKGDIR)/bin/ $(call COPYTREE, packages/ctfbase/service, $(CTFBASE_PKGDIR)/service) - cp packages/ctfbase/src/arc4 $(CTFBASE_PKGDIR)/bin/ - ctfbase-clean: rm -rf $(CTFBASE_PKGDIR) $(MAKE) -C packages/ctfbase/src clean diff --git a/packages/ctfbase/service/ctfd/passwd b/packages/ctfbase/service/ctfd/passwd index 87eee46..b0ebfea 100644 --- a/packages/ctfbase/service/ctfd/passwd +++ b/packages/ctfbase/service/ctfd/passwd @@ -1,2 +1,3 @@ root:$1$bEGCYemG$pAo9KXWQKgQNijRGKSb7e1:0:0:root:/:/bin/ash -nobody:x:65534:65534:nobody:/:/bin/sh +ctf:x:100:100:CTF Services:/:/bin/false +nobody:x:65534:65534:nobody:/:/bin/false diff --git a/packages/ctfbase/service/ctfd/run b/packages/ctfbase/service/ctfd/run index 4e73720..462ed5d 100755 --- a/packages/ctfbase/service/ctfd/run +++ b/packages/ctfbase/service/ctfd/run @@ -10,7 +10,7 @@ fi # Set up networking for all CTF ips ip link set eth0 up if ! ip route | grep -q default; then - ip route add default via 10.0.0.1 || exit 1 + ip route add default via fd82:b410:3441:1661::1 || exit 1 fi install -o root -m 0755 -d /var/lib/ctf/tokens diff --git a/packages/mcp/mcp.mk b/packages/mcp/mcp.mk index 93e951e..19e6ef8 100644 --- a/packages/mcp/mcp.mk +++ b/packages/mcp/mcp.mk @@ -35,8 +35,6 @@ mcp-install: $(MCP_BUILDDIR)/build $(call COPYTREE, packages/mcp/service, $(MCP_PKGDIR)/service) - $(call COPYTREE, packages/mcp/tokend.keys, $(MCP_PKGDIR)/tokend.keys) - $(call COPYTREE, packages/mcp/www, $(MCP_PKGDIR)/www) cp packages/mcp/src/puzzler.cgi $(MCP_PKGDIR)/www/ cp packages/mcp/src/claim.cgi $(MCP_PKGDIR)/www/ diff --git a/src/token.c b/src/token.c index b6d6c92..969e3d2 100644 --- a/src/token.c +++ b/src/token.c @@ -1,3 +1,4 @@ +#define _GNU_SOURCE #include #include #include @@ -59,5 +60,5 @@ get_token(char *buf, size_t buflen, while ('\n' == buf[l-1]) l -= 1; buf[l-1] = '\0'; - return l; + return l; } From 64b23168600feda896d879f19103a2b944a9e95c Mon Sep 17 00:00:00 2001 From: Neale Pickett Date: Wed, 21 Sep 2011 16:19:00 -0600 Subject: [PATCH 03/36] octopus port to ipv6 --- packages/octopus/octopus.mk | 2 - packages/octopus/service/octopus/ip.txt | 2 +- packages/octopus/service/octopus/run | 1 + packages/octopus/solution.sh | 10 ++-- packages/octopus/src/octopus.c | 70 +++++++++---------------- 5 files changed, 32 insertions(+), 53 deletions(-) diff --git a/packages/octopus/octopus.mk b/packages/octopus/octopus.mk index 5c2b38a..4e34aba 100644 --- a/packages/octopus/octopus.mk +++ b/packages/octopus/octopus.mk @@ -5,8 +5,6 @@ octopus-install: octopus-build $(call COPYTREE, packages/octopus/service, $(OCTOPUS_PKGDIR)/service) - $(call COPYTREE, packages/octopus/tokens, $(OCTOPUS_PKGDIR)/tokens) - cp packages/octopus/src/octopus $(OCTOPUS_PKGDIR)/bin/ octopus-clean: diff --git a/packages/octopus/service/octopus/ip.txt b/packages/octopus/service/octopus/ip.txt index 1628247..9d23432 100644 --- a/packages/octopus/service/octopus/ip.txt +++ b/packages/octopus/service/octopus/ip.txt @@ -1 +1 @@ -10.0.0.8/24 +fd84:b410:3441:1663::8888/48 diff --git a/packages/octopus/service/octopus/run b/packages/octopus/service/octopus/run index 2b7df70..45a06c8 100755 --- a/packages/octopus/service/octopus/run +++ b/packages/octopus/service/octopus/run @@ -3,4 +3,5 @@ exec 2>&1 IP=$(cat ip.txt) ip addr add $IP label eth0:octopus dev eth0 +ip monitor | grep -q $IP exec /opt/octopus/bin/octopus ${IP%/*} diff --git a/packages/octopus/solution.sh b/packages/octopus/solution.sh index 753e33a..d99139b 100755 --- a/packages/octopus/solution.sh +++ b/packages/octopus/solution.sh @@ -1,16 +1,16 @@ #! /bin/sh port=8888 -host=${1:-10.0.0.8} +host=${1:-[::1]} blooper=$(tempfile) trap "rm $blooper" 0 -echo foo | socat -t 0.01 STDIO UDP:$host:$port | tail -n +5 > $blooper +echo foo | socat -t 0.01 STDIO UDP6:$host:$port | tail -n +5 > $blooper for i in $(seq 8); do - result=$(socat -t 0.01 STDIO UDP:$host:$port < $blooper | awk -F': ' '(NF > 1) {print $2; exit;}') - port=$(echo "ibase=8; $result" | bc) + result=$(socat -t 0.01 STDIO UDP6:$host:$port < $blooper | awk -F': ' '(NF > 1) {print $2; exit;}') + port=$(printf "%d" "0$result") echo "next port: $port ($result)" done -echo $result \ No newline at end of file +echo $result diff --git a/packages/octopus/src/octopus.c b/packages/octopus/src/octopus.c index 5c0744f..a205306 100644 --- a/packages/octopus/src/octopus.c +++ b/packages/octopus/src/octopus.c @@ -19,13 +19,8 @@ #define max(a,b) (((a)>(b))?(a):(b)) #endif -char token[80]; -size_t tokenlen; - -uint8_t const key[] = {0x99, 0x5f, 0xcb, 0xde, - 0xf9, 0x6d, 0x02, 0xf3, - 0x47, 0x60, 0x0a, 0xe0, - 0x0a, 0x25, 0x4d, 0x16}; +const char token[] = "octopus:xylep-radar-nanox"; +const size_t tokenlen = sizeof(token) - 1; char const octopus[] = (" ___\n" @@ -197,17 +192,17 @@ struct bound_port { } bound_ports[PORTS]; int -bind_port(struct in_addr *addr, int fd, uint16_t port) { - struct sockaddr_in saddr; +bind_port(struct in6_addr *addr, int fd, uint16_t port) { + struct sockaddr_in6 saddr = {0}; - saddr.sin_family = AF_INET; - saddr.sin_port = htons(port); - memcpy(&saddr.sin_addr.s_addr, addr, sizeof(struct in_addr)); - return bind(fd, (struct sockaddr *)&saddr, sizeof(saddr)); + saddr.sin6_family = AF_INET6; + saddr.sin6_port = htons(port); + memcpy(&saddr.sin6_addr, addr, sizeof *addr); + return bind(fd, (struct sockaddr *)&saddr, sizeof saddr); } int -rebind(struct in_addr *addr) +rebind(struct in6_addr *addr) { static int offset = 0; int i; @@ -226,7 +221,7 @@ rebind(struct in_addr *addr) } /* Bind to a port */ - bound_ports[i + offset].fd = socket(PF_INET, SOCK_DGRAM, 0); + bound_ports[i + offset].fd = socket(AF_INET6, SOCK_DGRAM, 0); do { port = (random() % 56635) + 10000; ret = bind_port(addr, bound_ports[i + offset].fd, port); @@ -266,14 +261,14 @@ rebind(struct in_addr *addr) void do_io(int which) { - struct bound_port *bp = &bound_ports[which]; - char input[INPUT_MAX]; - ssize_t inlen; - struct sockaddr from; - socklen_t fromlen = sizeof(from); + struct bound_port *bp = &bound_ports[which]; + char input[INPUT_MAX]; + ssize_t inlen; + struct sockaddr_in6 from; + socklen_t fromlen = sizeof(from); inlen = recvfrom(bp->fd, input, INPUT_MAX, 0, - &from, &fromlen); + (struct sockaddr *)&from, &fromlen); if (-1 == inlen) { /* Well don't that just beat all. */ return; @@ -299,10 +294,6 @@ loop() int i; int nfds = 0; fd_set rfds; - struct timeval timeout; - - timeout.tv_sec = 1; - timeout.tv_usec = 0; FD_ZERO(&rfds); for (i = 0; i < PORTS; i += 1) { @@ -310,7 +301,7 @@ loop() FD_SET(bound_ports[i].fd, &rfds); } - while (-1 == select(nfds+1, &rfds, NULL, NULL, &timeout)) { + while (-1 == select(nfds+1, &rfds, NULL, NULL, NULL)) { if (EINTR == errno) { continue; } @@ -329,25 +320,25 @@ loop() int main(int argc, char *argv[]) { - int ret; - int i; - time_t last_bind = 0; - time_t last_token = 0; - struct in_addr addr; + int ret; + int i; + time_t last_bind = 0; + time_t last_token = 0; + struct in6_addr addr; /* The random seed isn't super important here. */ srand(time(NULL)); if (argc > 1) { - if (-1 == inet_aton(argv[1], &addr)) { + if (0 >= inet_pton(AF_INET6, argv[1], &addr)) { fprintf(stderr, "invalid address: %s\n", argv[1]); return EX_IOERR; } } else { - addr.s_addr = INADDR_ANY; + memcpy(&addr, &in6addr_any, sizeof addr); } - bound_ports[0].fd = socket(PF_INET, SOCK_DGRAM, 0); + bound_ports[0].fd = socket(AF_INET6, SOCK_DGRAM, 0); ret = bind_port(&addr, bound_ports[0].fd, 8888); if (-1 == ret) { perror("bind port 8888"); @@ -361,17 +352,6 @@ main(int argc, char *argv[]) do { time_t now = time(NULL); - if (last_token + 60 < now) { - last_token = now; - while (NULL == fgets(token, sizeof(token), stdin)) { - if (-1 == fseek(stdin, 0, SEEK_SET)) { - /* Non-seekable stdin: we're done. */ - return 0; - } - } - for (tokenlen = 0; token[tokenlen] && (token[tokenlen] != '\n'); tokenlen += 1); - } - if (last_bind + 4 < now) { last_bind = now; if (-1 == rebind(&addr)) break; From 103688df852e3a8133b09c9feb4fa5fef5c7fe44 Mon Sep 17 00:00:00 2001 From: Neale Pickett Date: Wed, 21 Sep 2011 17:31:13 -0600 Subject: [PATCH 04/36] fix arc4 definition --- src/arc4.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/arc4.c b/src/arc4.c index 471b503..01e3b27 100644 --- a/src/arc4.c +++ b/src/arc4.c @@ -148,7 +148,7 @@ arc4_encrypt_stream(FILE *out, FILE *in, return written; } -int +ssize_t arc4_decrypt_stream(FILE *out, FILE *in, const uint8_t *key, size_t keylen) { From 17d0544c1eb511e40bc0584fe90c4bbf6f6a0b3c Mon Sep 17 00:00:00 2001 From: Neale Pickett Date: Thu, 22 Sep 2011 18:32:03 -0600 Subject: [PATCH 05/36] IPv6 router --- Makefile | 2 + packages/router/router.mk | 50 ++++++++++++++++++++---- packages/router/service/fish-forward/run | 3 -- packages/router/service/radvd/log/run | 4 ++ packages/router/service/radvd/radvd.conf | 26 ++++++++++++ packages/router/service/radvd/run | 5 +++ packages/router/service/router/finish | 6 +-- packages/router/service/router/run | 39 ++++-------------- packages/router/service/sshd/passwd | 1 + packages/router/service/sshd/run | 3 ++ 10 files changed, 93 insertions(+), 46 deletions(-) delete mode 100755 packages/router/service/fish-forward/run create mode 100755 packages/router/service/radvd/log/run create mode 100644 packages/router/service/radvd/radvd.conf create mode 100755 packages/router/service/radvd/run create mode 100644 packages/router/service/sshd/passwd diff --git a/Makefile b/Makefile index 24dd97e..329657e 100644 --- a/Makefile +++ b/Makefile @@ -10,6 +10,8 @@ CACHE = cache # The end result BIN = bin +# Things configure likes to see +CONFIG_XCOMPILE_FLAGS = --host=i386-linux --program-transform-name= all: packages diff --git a/packages/router/router.mk b/packages/router/router.mk index 916ad05..ea9c639 100644 --- a/packages/router/router.mk +++ b/packages/router/router.mk @@ -1,6 +1,23 @@ ROUTER_PKGDIR = $(TARGET)/router ROUTER_BUILDDIR = $(BUILD)/router + +router-source: $(ROUTER_BUILDDIR)/dnsmasq-source $(ROUTER_BUILDDIR)/radvd-source + +router-build: $(ROUTER_BUILDDIR)/dnsmasq-build $(ROUTER_BUILDDIR)/radvd-build + +router-install: router-build + mkdir -p $(ROUTER_PKGDIR)/bin + cp $(DNSMASQ_SRCDIR)/src/dnsmasq $(ROUTER_PKGDIR)/bin/ + + cp $(RADVD_SRCDIR)/radvd $(ROUTER_PKGDIR)/bin/ + cp $(RADVD_SRCDIR)/radvdump $(ROUTER_PKGDIR)/bin/ + + $(call COPYTREE, packages/router/service, $(ROUTER_PKGDIR)/service) + +## +## dnsmasq +## DNSMASQ_VERSION = 2.57 DNSMASQ_SRCDIR = $(ROUTER_BUILDDIR)/dnsmasq-$(DNSMASQ_VERSION) DNSMASQ_TARBALL = $(CACHE)/dnsmasq-$(DNSMASQ_VERSION).tar.gz @@ -10,22 +27,39 @@ $(DNSMASQ_TARBALL): @ mkdir -p $(@D) wget -O $@ $(DNSMASQ_URL) -router-source: $(ROUTER_BUILDDIR)/source -$(ROUTER_BUILDDIR)/source: $(DNSMASQ_TARBALL) +$(ROUTER_BUILDDIR)/dnsmasq-source: $(DNSMASQ_TARBALL) mkdir -p $(ROUTER_BUILDDIR) zcat $(DNSMASQ_TARBALL) | (cd $(ROUTER_BUILDDIR) && tar xf -) touch $@ -router-build: $(ROUTER_BUILDDIR)/built -$(ROUTER_BUILDDIR)/built: $(ROUTER_BUILDDIR)/source +$(ROUTER_BUILDDIR)/dnsmasq-build: $(ROUTER_BUILDDIR)/dnsmasq-source $(MAKE) -C $(DNSMASQ_SRCDIR) touch $@ -router-install: router-build - mkdir -p $(ROUTER_PKGDIR)/sbin - cp $(DNSMASQ_SRCDIR)/src/dnsmasq $(ROUTER_PKGDIR)/sbin/ - $(call COPYTREE, packages/router/service, $(ROUTER_PKGDIR)/service) +## +## radvd +## +RADVD_VERSION = 1.8.1 +RADVD_TARBALL = $(CACHE)/radvd-$(RADVD_VERSION).tar.gz +RADVD_URL = http://www.litech.org/radvd/dist/radvd-$(RADVD_VERSION).tar.gz +RADVD_SRCDIR = $(ROUTER_BUILDDIR)/radvd-$(RADVD_VERSION) + +$(RADVD_TARBALL): + @ mkdir -p $(@D) + wget -O $@ $(RADVD_URL) + +$(ROUTER_BUILDDIR)/radvd-source: $(RADVD_TARBALL) + mkdir -p $(ROUTER_BUILDDIR) + zcat $(RADVD_TARBALL) | (cd $(ROUTER_BUILDDIR) && tar xf -) + touch $@ + +$(ROUTER_BUILDDIR)/radvd-build: $(ROUTER_BUILDDIR)/radvd-source + cd $(RADVD_SRCDIR) && ./configure $(CONFIG_XCOMPILE_FLAGS) + $(MAKE) -C $(RADVD_SRCDIR) + touch $@ + + router-clean: rm -rf $(ROUTER_PKGDIR) diff --git a/packages/router/service/fish-forward/run b/packages/router/service/fish-forward/run deleted file mode 100755 index 413c81d..0000000 --- a/packages/router/service/fish-forward/run +++ /dev/null @@ -1,3 +0,0 @@ -#! /bin/sh - -exec socat -u udp-listen:27844 udp-datagram:172.16.24.255:27844,broadcast diff --git a/packages/router/service/radvd/log/run b/packages/router/service/radvd/log/run new file mode 100755 index 0000000..d9d6355 --- /dev/null +++ b/packages/router/service/radvd/log/run @@ -0,0 +1,4 @@ +#! /bin/sh + +exec svlogd -tt $PWD + diff --git a/packages/router/service/radvd/radvd.conf b/packages/router/service/radvd/radvd.conf new file mode 100644 index 0000000..f8d7540 --- /dev/null +++ b/packages/router/service/radvd/radvd.conf @@ -0,0 +1,26 @@ +interface eth0 { AdvSendAdvert on; prefix fd84:b410:3441:0::/64; }; +interface eth0.1 { AdvSendAdvert on; prefix fd84:b410:3441:1::/64; }; +interface eth0.2 { AdvSendAdvert on; prefix fd84:b410:3441:2::/64; }; +interface eth0.3 { AdvSendAdvert on; prefix fd84:b410:3441:3::/64; }; +interface eth0.4 { AdvSendAdvert on; prefix fd84:b410:3441:4::/64; }; +interface eth0.5 { AdvSendAdvert on; prefix fd84:b410:3441:5::/64; }; +interface eth0.6 { AdvSendAdvert on; prefix fd84:b410:3441:6::/64; }; +interface eth0.7 { AdvSendAdvert on; prefix fd84:b410:3441:7::/64; }; +interface eth0.8 { AdvSendAdvert on; prefix fd84:b410:3441:8::/64; }; +interface eth0.9 { AdvSendAdvert on; prefix fd84:b410:3441:9::/64; }; +interface eth0.10 { AdvSendAdvert on; prefix fd84:b410:3441:10::/64; }; +interface eth0.11 { AdvSendAdvert on; prefix fd84:b410:3441:11::/64; }; +interface eth0.12 { AdvSendAdvert on; prefix fd84:b410:3441:12::/64; }; +interface eth0.13 { AdvSendAdvert on; prefix fd84:b410:3441:13::/64; }; +interface eth0.14 { AdvSendAdvert on; prefix fd84:b410:3441:14::/64; }; +interface eth0.15 { AdvSendAdvert on; prefix fd84:b410:3441:15::/64; }; +interface eth0.16 { AdvSendAdvert on; prefix fd84:b410:3441:16::/64; }; +interface eth0.17 { AdvSendAdvert on; prefix fd84:b410:3441:17::/64; }; +interface eth0.18 { AdvSendAdvert on; prefix fd84:b410:3441:18::/64; }; +interface eth0.19 { AdvSendAdvert on; prefix fd84:b410:3441:19::/64; }; +interface eth0.20 { AdvSendAdvert on; prefix fd84:b410:3441:20::/64; }; +interface eth0.21 { AdvSendAdvert on; prefix fd84:b410:3441:21::/64; }; +interface eth0.22 { AdvSendAdvert on; prefix fd84:b410:3441:22::/64; }; +interface eth0.23 { AdvSendAdvert on; prefix fd84:b410:3441:23::/64; }; +interface eth0.24 { AdvSendAdvert on; prefix fd84:b410:3441:24::/64; }; + diff --git a/packages/router/service/radvd/run b/packages/router/service/radvd/run new file mode 100755 index 0000000..3ee78f1 --- /dev/null +++ b/packages/router/service/radvd/run @@ -0,0 +1,5 @@ +#! /bin/sh + +exec 2>&1 + +exec /opt/router/bin/radvd -C radvd.conf -d 1 -m stderr -p radvd.pid diff --git a/packages/router/service/router/finish b/packages/router/service/router/finish index 8c3aa29..d743cb8 100755 --- a/packages/router/service/router/finish +++ b/packages/router/service/router/finish @@ -1,9 +1,9 @@ #! /bin/sh -ip addr del 10.0.0.1/16 dev eth0 - -for i in $(seq 48); do +for i in $(seq 24); do ip link del link dev eth0.$i done +ip link set dev eth0 down + iptables -F INPUT diff --git a/packages/router/service/router/run b/packages/router/service/router/run index ae41920..ca5ce40 100755 --- a/packages/router/service/router/run +++ b/packages/router/service/router/run @@ -4,45 +4,20 @@ exec 2>&1 hostname router -# McPhall suggested all these. I don't know what most of them do. -# But I do know that McPhall is a smart guy. -echo 1 > /proc/sys/net/ipv4/ip_forward +PFX=fd84:b410:3441 + +# We're a router echo 1 > /proc/sys/net/ipv6/conf/default/forwarding -echo 0 > /proc/sys/kernel/randomize_va_space -echo 0 > /proc/sys/net/ipv4/conf/all/arp_accept -echo 1 > /proc/sys/net/ipv4/conf/all/arp_filter -echo 1 > /proc/sys/net/ipv4/conf/all/arp_announce -echo 2 > /proc/sys/net/ipv4/conf/all/arp_ignore -echo 0 > /proc/sys/net/ipv4/conf/all/shared_media -echo 0 > /proc/sys/net/ipv4/tcp_timestamps -echo 1 > /proc/sys/net/ipv4/icmp_errors_use_inbound_ifaddr -echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts - -# Make a huge arp table, because this is a router -# and people like to run nmap - -echo 8192 > /proc/sys/net/ipv4/neigh/default/gc_thresh3 -echo 4096 > /proc/sys/net/ipv4/neigh/default/gc_thresh2 - -# No label: dnsmasq can't cope -ip addr add 172.16.0.1/24 dev eth0 -ip addr add 172.30.73.1/24 dev eth0 +# Bring up main ethernet interface +ip addr add $PFX:0::1/64 dev eth0 ip link set eth0 up +# Bring up vlans for i in $(seq 24); do ip link add link eth0 name eth0.$i type vlan id $i - ip addr add 172.16.$i.1/24 dev eth0.$i + ip addr add $PFX:$i::1/64 dev eth0.$i ip link set eth0.$i up done -iptables -P OUTPUT ACCEPT -iptables -P FORWARD ACCEPT - -iptables -A INPUT -p udp --dport 53 -j ACCEPT -iptables -A INPUT -p udp --dport 67:68 -j ACCEPT -iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT -iptables -A INPUT -s 172.16.0.0/12 -j ACCEPT -iptables -P INPUT DROP - sleep 8100d diff --git a/packages/router/service/sshd/passwd b/packages/router/service/sshd/passwd new file mode 100644 index 0000000..97e6113 --- /dev/null +++ b/packages/router/service/sshd/passwd @@ -0,0 +1 @@ +root:$1$xAJ7KwiU$BeKJjYGs9r/hY9Ag4qv4I1:0:0:root:/:/bin/sh \ No newline at end of file diff --git a/packages/router/service/sshd/run b/packages/router/service/sshd/run index e60e68b..0a56304 100755 --- a/packages/router/service/sshd/run +++ b/packages/router/service/sshd/run @@ -1,4 +1,7 @@ #! /bin/sh exec 2>&1 + +cat passwd > /etc/passwd + exec dropbear -r ./rsa.key -E -F From da7a8b2f6be78542a930f44927fcc996cacd2dfc Mon Sep 17 00:00:00 2001 From: Neale Pickett Date: Thu, 22 Sep 2011 18:41:28 -0600 Subject: [PATCH 06/36] remove dnsmasq from router package --- packages/router/router.mk | 27 ++---------------- packages/router/service/dnsmasq/dnsmasq.conf | 29 -------------------- packages/router/service/dnsmasq/log/run | 4 --- packages/router/service/dnsmasq/run | 12 -------- 4 files changed, 2 insertions(+), 70 deletions(-) delete mode 100644 packages/router/service/dnsmasq/dnsmasq.conf delete mode 100755 packages/router/service/dnsmasq/log/run delete mode 100755 packages/router/service/dnsmasq/run diff --git a/packages/router/router.mk b/packages/router/router.mk index ea9c639..d30118e 100644 --- a/packages/router/router.mk +++ b/packages/router/router.mk @@ -2,41 +2,18 @@ ROUTER_PKGDIR = $(TARGET)/router ROUTER_BUILDDIR = $(BUILD)/router -router-source: $(ROUTER_BUILDDIR)/dnsmasq-source $(ROUTER_BUILDDIR)/radvd-source +router-source: $(ROUTER_BUILDDIR)/radvd-source -router-build: $(ROUTER_BUILDDIR)/dnsmasq-build $(ROUTER_BUILDDIR)/radvd-build +router-build: $(ROUTER_BUILDDIR)/radvd-build router-install: router-build mkdir -p $(ROUTER_PKGDIR)/bin - cp $(DNSMASQ_SRCDIR)/src/dnsmasq $(ROUTER_PKGDIR)/bin/ cp $(RADVD_SRCDIR)/radvd $(ROUTER_PKGDIR)/bin/ cp $(RADVD_SRCDIR)/radvdump $(ROUTER_PKGDIR)/bin/ $(call COPYTREE, packages/router/service, $(ROUTER_PKGDIR)/service) -## -## dnsmasq -## -DNSMASQ_VERSION = 2.57 -DNSMASQ_SRCDIR = $(ROUTER_BUILDDIR)/dnsmasq-$(DNSMASQ_VERSION) -DNSMASQ_TARBALL = $(CACHE)/dnsmasq-$(DNSMASQ_VERSION).tar.gz -DNSMASQ_URL = http://www.thekelleys.org.uk/dnsmasq/dnsmasq-$(DNSMASQ_VERSION).tar.gz - -$(DNSMASQ_TARBALL): - @ mkdir -p $(@D) - wget -O $@ $(DNSMASQ_URL) - -$(ROUTER_BUILDDIR)/dnsmasq-source: $(DNSMASQ_TARBALL) - mkdir -p $(ROUTER_BUILDDIR) - zcat $(DNSMASQ_TARBALL) | (cd $(ROUTER_BUILDDIR) && tar xf -) - touch $@ - -$(ROUTER_BUILDDIR)/dnsmasq-build: $(ROUTER_BUILDDIR)/dnsmasq-source - $(MAKE) -C $(DNSMASQ_SRCDIR) - touch $@ - - ## ## radvd ## diff --git a/packages/router/service/dnsmasq/dnsmasq.conf b/packages/router/service/dnsmasq/dnsmasq.conf deleted file mode 100644 index a047ccc..0000000 --- a/packages/router/service/dnsmasq/dnsmasq.conf +++ /dev/null @@ -1,29 +0,0 @@ -no-resolv -local=/ctf/ -no-hosts -domain=ctf -dhcp-authoritative -dhcp-range=vlan1,172.16.1.10,172.16.1.254 -dhcp-range=vlan2,172.16.2.10,172.16.2.254 -dhcp-range=vlan3,172.16.3.10,172.16.3.254 -dhcp-range=vlan4,172.16.4.10,172.16.4.254 -dhcp-range=vlan5,172.16.5.10,172.16.5.254 -dhcp-range=vlan6,172.16.6.10,172.16.6.254 -dhcp-range=vlan7,172.16.7.10,172.16.7.254 -dhcp-range=vlan8,172.16.8.10,172.16.8.254 -dhcp-range=vlan9,172.16.9.10,172.16.9.254 -dhcp-range=vlan10,172.16.10.10,172.16.10.254 -dhcp-range=vlan11,172.16.11.10,172.16.11.254 -dhcp-range=vlan12,172.16.12.10,172.16.12.254 -dhcp-range=vlan13,172.16.13.10,172.16.13.254 -dhcp-range=vlan14,172.16.14.10,172.16.14.254 -dhcp-range=vlan15,172.16.15.10,172.16.15.254 -dhcp-range=vlan16,172.16.16.10,172.16.16.254 -dhcp-range=vlan17,172.16.17.10,172.16.17.254 -dhcp-range=vlan18,172.16.18.10,172.16.18.254 -dhcp-range=vlan19,172.16.19.10,172.16.19.254 -dhcp-range=vlan20,172.16.20.10,172.16.20.254 -dhcp-range=vlan21,172.16.21.10,172.16.21.254 -dhcp-range=vlan22,172.16.22.10,172.16.22.254 -dhcp-range=vlan23,172.16.23.10,172.16.23.254 -dhcp-range=vlan24,172.16.24.10,172.16.24.254 diff --git a/packages/router/service/dnsmasq/log/run b/packages/router/service/dnsmasq/log/run deleted file mode 100755 index d9d6355..0000000 --- a/packages/router/service/dnsmasq/log/run +++ /dev/null @@ -1,4 +0,0 @@ -#! /bin/sh - -exec svlogd -tt $PWD - diff --git a/packages/router/service/dnsmasq/run b/packages/router/service/dnsmasq/run deleted file mode 100755 index 1373e45..0000000 --- a/packages/router/service/dnsmasq/run +++ /dev/null @@ -1,12 +0,0 @@ -#! /bin/sh -e - -exec 2>&1 - -mkdir -p /var/lib/misc - -exec /opt/router/sbin/dnsmasq \ - --keep-in-foreground \ - --conf-file=dnsmasq.conf \ - --pid-file= \ - --log-facility=/proc/self/fd/1 - From 7f80a15a42b5a19720a0a858f20dd4a96272b87a Mon Sep 17 00:00:00 2001 From: Neale Pickett Date: Fri, 23 Sep 2011 09:11:20 -0600 Subject: [PATCH 07/36] Document IPv6 layout --- doc/ipv6.txt | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 doc/ipv6.txt diff --git a/doc/ipv6.txt b/doc/ipv6.txt new file mode 100644 index 0000000..1fe56ef --- /dev/null +++ b/doc/ipv6.txt @@ -0,0 +1,15 @@ +IPv6 in Dirtbags CTF +==================== + +The contest network uses IPs in the unique local address space +fd82:b410:3441::/48. Each team gets a /64 internal subnet, with +their team number (generally the same as the switch port). + +Each subnet's gateway is ::1. + +Team 5, in switch port 5, on VLAN 5, gets fd82:b410:3441:5::/64. + +Server network is fd84:b410:3441::/64 (AKA fd84:b410:3441:0::/64). To +make things easier to type, use hosts in the /112. The MCP server lives +at fd84:b410:3441::2. + From 79b6534204bae52215706da5f314a5320889aabf Mon Sep 17 00:00:00 2001 From: Neale Pickett Date: Fri, 23 Sep 2011 13:42:02 -0600 Subject: [PATCH 08/36] resolve packages passwd conflicts --- packages/ctfbase/service/ctfd/passwd | 3 --- packages/ctfbase/service/ctfd/run | 10 ++++------ packages/router/service/sshd/passwd | 1 - packages/router/service/sshd/run | 4 +++- 4 files changed, 7 insertions(+), 11 deletions(-) delete mode 100644 packages/ctfbase/service/ctfd/passwd delete mode 100644 packages/router/service/sshd/passwd diff --git a/packages/ctfbase/service/ctfd/passwd b/packages/ctfbase/service/ctfd/passwd deleted file mode 100644 index b0ebfea..0000000 --- a/packages/ctfbase/service/ctfd/passwd +++ /dev/null @@ -1,3 +0,0 @@ -root:$1$bEGCYemG$pAo9KXWQKgQNijRGKSb7e1:0:0:root:/:/bin/ash -ctf:x:100:100:CTF Services:/:/bin/false -nobody:x:65534:65534:nobody:/:/bin/false diff --git a/packages/ctfbase/service/ctfd/run b/packages/ctfbase/service/ctfd/run index 462ed5d..796021e 100755 --- a/packages/ctfbase/service/ctfd/run +++ b/packages/ctfbase/service/ctfd/run @@ -3,15 +3,13 @@ exec 2>&1 # Make user accounts -if ! [ -r /etc/passwd ]; then - cat passwd >/etc/passwd -fi +adduser -D -u 0 -h /var root || true +adduser -D -u 100 -h /tmp -g 'CTF Services' ctf || true +adduser -D -u 65534 -h / nobody || true +echo 'root:$1$bEGCYemG$pAo9KXWQKgQNijRGKSb7e1' | chpasswd --encrypted # Set up networking for all CTF ips ip link set eth0 up -if ! ip route | grep -q default; then - ip route add default via fd82:b410:3441:1661::1 || exit 1 -fi install -o root -m 0755 -d /var/lib/ctf/tokens exec ./ctfd diff --git a/packages/router/service/sshd/passwd b/packages/router/service/sshd/passwd deleted file mode 100644 index 97e6113..0000000 --- a/packages/router/service/sshd/passwd +++ /dev/null @@ -1 +0,0 @@ -root:$1$xAJ7KwiU$BeKJjYGs9r/hY9Ag4qv4I1:0:0:root:/:/bin/sh \ No newline at end of file diff --git a/packages/router/service/sshd/run b/packages/router/service/sshd/run index 0a56304..529fed1 100755 --- a/packages/router/service/sshd/run +++ b/packages/router/service/sshd/run @@ -2,6 +2,8 @@ exec 2>&1 -cat passwd > /etc/passwd +if adduser -D -u 0 -h / -s /bin/sh root; then + echo 'root:$1$xAJ7KwiU$BeKJjYGs9r/hY9Ag4qv4I1' | chpasswd --encrypted +done exec dropbear -r ./rsa.key -E -F From eeb583b5fb0eb85fdc520c40e906cf5af8fb9a5f Mon Sep 17 00:00:00 2001 From: Neale Pickett Date: Fri, 23 Sep 2011 16:04:25 -0600 Subject: [PATCH 09/36] IPv6 for ircd, mcp --- packages/00admin/00admin.mk | 6 + .../{ctfbase => 00admin}/service/sshd/log/run | 0 .../{ctfbase => 00admin}/service/sshd/rsa.key | Bin packages/00admin/service/sshd/run | 14 + packages/ctfbase/ctfbase.mk | 16 - packages/ctfbase/service/ctfd/ctfd | 13 - packages/ctfbase/service/ctfd/log/run | 4 - packages/ctfbase/service/ctfd/run | 15 - packages/ctfbase/service/sshd/finish | 4 - packages/ctfbase/service/sshd/run | 6 - packages/ctfbase/src/Makefile | 7 - packages/ctfbase/src/arc4.c | 1 - packages/ctfbase/src/arc4.h | 1 - packages/fireeye/fireeye.mk | 8 - packages/fireeye/tokens.txt | 1000 ---- packages/inferno/inferno.mk | 2 +- packages/ircd/ircd.mk | 7 +- packages/ircd/service/ircd/ngircd.conf | 4 +- packages/ircd/service/ircd/run | 3 + packages/mcp/service/httpd/finish | 4 + packages/mcp/service/httpd/ip.txt | 1 + packages/mcp/service/httpd/run | 10 +- packages/mcp/service/puzzled/run | 4 +- packages/mcp/service/tokend/log/run | 3 - packages/mcp/service/tokend/run | 20 - packages/octopus/service/octopus/ip.txt | 2 +- packages/octopus/service/octopus/run | 3 +- packages/router/service/router/run | 6 +- packages/router/service/sshd/run | 4 +- packages/sandia/sandia.mk | 8 - packages/sandia/tokens.txt | 5000 ----------------- packages/solera/solera.mk | 8 - packages/solera/tokens.txt | 1000 ---- packages/splunk/splunk.mk | 8 - packages/splunk/tokens.txt | 1000 ---- 35 files changed, 50 insertions(+), 8142 deletions(-) create mode 100644 packages/00admin/00admin.mk rename packages/{ctfbase => 00admin}/service/sshd/log/run (100%) rename packages/{ctfbase => 00admin}/service/sshd/rsa.key (100%) create mode 100755 packages/00admin/service/sshd/run delete mode 100644 packages/ctfbase/ctfbase.mk delete mode 100755 packages/ctfbase/service/ctfd/ctfd delete mode 100755 packages/ctfbase/service/ctfd/log/run delete mode 100755 packages/ctfbase/service/ctfd/run delete mode 100755 packages/ctfbase/service/sshd/finish delete mode 100755 packages/ctfbase/service/sshd/run delete mode 100644 packages/ctfbase/src/Makefile delete mode 120000 packages/ctfbase/src/arc4.c delete mode 120000 packages/ctfbase/src/arc4.h delete mode 100644 packages/fireeye/fireeye.mk delete mode 100644 packages/fireeye/tokens.txt create mode 100755 packages/mcp/service/httpd/finish create mode 100644 packages/mcp/service/httpd/ip.txt delete mode 100755 packages/mcp/service/tokend/log/run delete mode 100755 packages/mcp/service/tokend/run delete mode 100644 packages/sandia/sandia.mk delete mode 100644 packages/sandia/tokens.txt delete mode 100644 packages/solera/solera.mk delete mode 100644 packages/solera/tokens.txt delete mode 100644 packages/splunk/splunk.mk delete mode 100644 packages/splunk/tokens.txt diff --git a/packages/00admin/00admin.mk b/packages/00admin/00admin.mk new file mode 100644 index 0000000..d4ea3ad --- /dev/null +++ b/packages/00admin/00admin.mk @@ -0,0 +1,6 @@ +00ADMIN_PKGDIR = $(TARGET)/00admin + +00admin-install: + $(call COPYTREE, packages/00admin/service, $(00ADMIN_PKGDIR)/service) + +PACKAGES += 00admin diff --git a/packages/ctfbase/service/sshd/log/run b/packages/00admin/service/sshd/log/run similarity index 100% rename from packages/ctfbase/service/sshd/log/run rename to packages/00admin/service/sshd/log/run diff --git a/packages/ctfbase/service/sshd/rsa.key b/packages/00admin/service/sshd/rsa.key similarity index 100% rename from packages/ctfbase/service/sshd/rsa.key rename to packages/00admin/service/sshd/rsa.key diff --git a/packages/00admin/service/sshd/run b/packages/00admin/service/sshd/run new file mode 100755 index 0000000..4100c4f --- /dev/null +++ b/packages/00admin/service/sshd/run @@ -0,0 +1,14 @@ +#! /bin/sh + +exec 2>&1 + +[ -r /etc/passwd ] || echo 'root:x:0:0:root:/tmp:/bin/sh' > /etc/passwd + +# Always do this, in case something else set a root password +echo 'root:$1$bEGCYemG$pAo9KXWQKgQNijRGKSb7e1' | chpasswd --encrypted + +# Bring up the NIC; this will get us at least a link-local address, and +# hopefully a global address with stateless autoconfiguration. +ip link set eth0 up + +exec dropbear -r ./rsa.key -E -F diff --git a/packages/ctfbase/ctfbase.mk b/packages/ctfbase/ctfbase.mk deleted file mode 100644 index 6a5f78d..0000000 --- a/packages/ctfbase/ctfbase.mk +++ /dev/null @@ -1,16 +0,0 @@ -CTFBASE_PKGDIR = $(TARGET)/ctfbase - -ctfbase-install: ctfbase-build - mkdir -p $(CTFBASE_PKGDIR)/bin/ - cp packages/ctfbase/src/arc4 $(CTFBASE_PKGDIR)/bin/ - - $(call COPYTREE, packages/ctfbase/service, $(CTFBASE_PKGDIR)/service) - -ctfbase-clean: - rm -rf $(CTFBASE_PKGDIR) - $(MAKE) -C packages/ctfbase/src clean - -ctfbase-build: - $(MAKE) -C packages/ctfbase/src build - -PACKAGES += ctfbase diff --git a/packages/ctfbase/service/ctfd/ctfd b/packages/ctfbase/service/ctfd/ctfd deleted file mode 100755 index e080a60..0000000 --- a/packages/ctfbase/service/ctfd/ctfd +++ /dev/null @@ -1,13 +0,0 @@ -#! /bin/sh -e - -PATH=/bin:/opt/ctfbase/bin; export PATH - -while true; do - # Fetch list of teams - teams=/var/lib/ctf/teams.txt - rm -f $teams.tmp - wget -q -O $teams.tmp http://10.0.0.2/teams.txt && \ - mv $teams.tmp $teams - - sleep 60 -done diff --git a/packages/ctfbase/service/ctfd/log/run b/packages/ctfbase/service/ctfd/log/run deleted file mode 100755 index d9d6355..0000000 --- a/packages/ctfbase/service/ctfd/log/run +++ /dev/null @@ -1,4 +0,0 @@ -#! /bin/sh - -exec svlogd -tt $PWD - diff --git a/packages/ctfbase/service/ctfd/run b/packages/ctfbase/service/ctfd/run deleted file mode 100755 index 796021e..0000000 --- a/packages/ctfbase/service/ctfd/run +++ /dev/null @@ -1,15 +0,0 @@ -#! /bin/sh -e - -exec 2>&1 - -# Make user accounts -adduser -D -u 0 -h /var root || true -adduser -D -u 100 -h /tmp -g 'CTF Services' ctf || true -adduser -D -u 65534 -h / nobody || true -echo 'root:$1$bEGCYemG$pAo9KXWQKgQNijRGKSb7e1' | chpasswd --encrypted - -# Set up networking for all CTF ips -ip link set eth0 up - -install -o root -m 0755 -d /var/lib/ctf/tokens -exec ./ctfd diff --git a/packages/ctfbase/service/sshd/finish b/packages/ctfbase/service/sshd/finish deleted file mode 100755 index 6b7b77b..0000000 --- a/packages/ctfbase/service/sshd/finish +++ /dev/null @@ -1,4 +0,0 @@ -#! /bin/sh - -iptables -D INPUT -s 10.0.0.0/16 --proto tcp --dport 55 -j ACCEPT -iptables -D INPUT --proto tcp --dport 55 -j REJECT diff --git a/packages/ctfbase/service/sshd/run b/packages/ctfbase/service/sshd/run deleted file mode 100755 index 551c66d..0000000 --- a/packages/ctfbase/service/sshd/run +++ /dev/null @@ -1,6 +0,0 @@ -#! /bin/sh - -exec 2>&1 -iptables -A INPUT -s 10.0.0.0/16 --proto tcp --dport 22 -j ACCEPT -iptables -A INPUT --proto tcp --dport 22 -j REJECT -exec dropbear -r ./rsa.key -E -F diff --git a/packages/ctfbase/src/Makefile b/packages/ctfbase/src/Makefile deleted file mode 100644 index b0d4010..0000000 --- a/packages/ctfbase/src/Makefile +++ /dev/null @@ -1,7 +0,0 @@ -build: arc4 - -arc4: arc4.c -arc4: CFLAGS += -DARC4_MAIN - -clean: - rm -f *.o arc4 diff --git a/packages/ctfbase/src/arc4.c b/packages/ctfbase/src/arc4.c deleted file mode 120000 index 4dcde89..0000000 --- a/packages/ctfbase/src/arc4.c +++ /dev/null @@ -1 +0,0 @@ -../../../src/arc4.c \ No newline at end of file diff --git a/packages/ctfbase/src/arc4.h b/packages/ctfbase/src/arc4.h deleted file mode 120000 index a5d8c7a..0000000 --- a/packages/ctfbase/src/arc4.h +++ /dev/null @@ -1 +0,0 @@ -../../../src/arc4.h \ No newline at end of file diff --git a/packages/fireeye/fireeye.mk b/packages/fireeye/fireeye.mk deleted file mode 100644 index 17748d6..0000000 --- a/packages/fireeye/fireeye.mk +++ /dev/null @@ -1,8 +0,0 @@ -fireeye-source: -fireeye-build: - -fireeye-install: packages/fireeye/tokens.txt - mkdir -p $(TARGET)/fireeye/ - cp $< $(TARGET)/fireeye/ - -PACKAGES += fireeye diff --git a/packages/fireeye/tokens.txt b/packages/fireeye/tokens.txt deleted file mode 100644 index 9125d6d..0000000 --- a/packages/fireeye/tokens.txt +++ /dev/null @@ -1,1000 +0,0 @@ -fireeye:xehad-matop-depox -fireeye:xepep-sovyd-pefex -fireeye:xopov-lytyl-sytux -fireeye:xizin-bigom-sehax -fireeye:xiden-pygoh-nalix -fireeye:xekac-masyt-muhex -fireeye:xezis-hecep-depax -fireeye:xuzic-rekuc-rofex -fireeye:xopaz-miduv-funux -fireeye:xubag-febip-cyrax -fireeye:xemec-fadac-mycex -fireeye:xihem-tufos-rihyx -fireeye:xobop-rikic-moryx -fireeye:xehac-ziper-cehyx -fireeye:xutog-hatat-kesex -fireeye:xevic-kogiv-cehux -fireeye:xidem-hevor-gemox -fireeye:xemit-bivoz-hafyx -fireeye:xecod-redyf-vafyx -fireeye:xurog-cakib-gofox -fireeye:xomim-zyvyg-macex -fireeye:xotok-pobab-zilux -fireeye:xibim-paduk-dudux -fireeye:xodof-vuryp-gyvox -fireeye:xinov-velem-gugyx -fireeye:xetaf-ruzac-sisex -fireeye:xuhav-hikyt-myfyx -fireeye:xebad-vacon-lamax -fireeye:xoleh-mutac-zisox -fireeye:xicar-bozul-fetax -fireeye:ximin-bocob-licix -fireeye:xuver-dotog-nyrex -fireeye:xizev-corat-pedux -fireeye:xuvim-zusez-bulax -fireeye:xidev-tured-cobix -fireeye:xifih-pafaf-dofux -fireeye:xokoz-vemum-valyx -fireeye:xumed-tanom-tagux -fireeye:xufad-vufom-rivux -fireeye:xonip-turom-donyx -fireeye:xetil-hoziv-nebax -fireeye:xepap-nyfyt-sibox -fireeye:xihet-cifup-gimex -fireeye:xudom-sebuc-vedax -fireeye:xinen-rubon-nomax -fireeye:xucop-synyf-kyzix -fireeye:xogar-bozaz-cyryx -fireeye:xecic-rohic-syzyx -fireeye:xorip-lamog-filox -fireeye:xucab-hyhyp-gafux -fireeye:xicos-lecuk-vykyx -fireeye:xozem-dafuh-bolux -fireeye:xuzap-sazer-begix -fireeye:xocic-rapir-zamix -fireeye:xinet-tyhih-dulix -fireeye:xoman-cyhoc-mebax -fireeye:xetez-dafif-nybyx -fireeye:xezel-lyfop-sinax -fireeye:xudol-ninag-sebax -fireeye:xegac-pyram-rifox -fireeye:xefev-pokig-sasex -fireeye:xorar-folas-kokyx -fireeye:xesir-gomen-donyx -fireeye:xugef-hakuc-nilox -fireeye:xezat-zamor-bemax -fireeye:xuhef-fakat-tyfox -fireeye:xebek-zunyc-horax -fireeye:xebok-rufyr-tylox -fireeye:xigeg-misyh-timyx -fireeye:xubah-bigyp-duvux -fireeye:xinah-vecug-pivox -fireeye:xodes-mazuh-gimix -fireeye:xevic-zalid-zonix -fireeye:xelic-dydyv-zelox -fireeye:xugad-mufud-curax -fireeye:xivit-tahif-fopex -fireeye:xipel-fumyz-rybox -fireeye:xudal-sibuk-manax -fireeye:xegek-zifyr-netex -fireeye:xomaf-syfab-bonax -fireeye:xitav-feliv-nypax -fireeye:xekog-fybur-vibox -fireeye:xomin-panyn-cygyx -fireeye:ximih-ladon-lebyx -fireeye:xozov-lofus-ronyx -fireeye:xezap-zilyh-mepox -fireeye:xekel-pomul-zocux -fireeye:xomis-regif-sefax -fireeye:xegep-popoz-fyhax -fireeye:xeled-dugad-sosix -fireeye:xibid-panob-ripex -fireeye:xusit-menuk-typux -fireeye:xelol-kubol-pihyx -fireeye:xumek-golyz-levex -fireeye:ximig-hysek-cybox -fireeye:xibis-pasuk-zocix -fireeye:xuleh-sehuf-pepix -fireeye:xonig-vyrym-donyx -fireeye:xozad-nenif-cigax -fireeye:xeraf-moseg-mobax -fireeye:xelof-dykyc-fezux -fireeye:xocol-nubyc-sosix -fireeye:xetor-tygim-fyrox -fireeye:xikop-cicen-nigax -fireeye:xuvom-bivyv-hodox -fireeye:xinab-feduk-dofox -fireeye:xeros-cyhyp-gozex -fireeye:xifip-tuhiv-gorux -fireeye:xitoz-vahin-dymox -fireeye:xuriz-pupug-mimox -fireeye:xumab-nasid-mylax -fireeye:xedil-kebug-gukix -fireeye:xikot-cecoc-gynyx -fireeye:xobep-sigib-kyhox -fireeye:xofab-dukyf-tihyx -fireeye:xikit-geduc-focex -fireeye:xonam-ryzyr-fudux -fireeye:xuvor-hetap-purux -fireeye:xemag-mifob-fesix -fireeye:xidol-pahaz-lecix -fireeye:xedem-gusyz-dutox -fireeye:xutap-lobeh-lezax -fireeye:xebad-numet-fefix -fireeye:xohaf-fepit-hetex -fireeye:xotim-gopel-zerux -fireeye:xuvac-padez-mivyx -fireeye:xodir-vazit-nadyx -fireeye:xutoz-mygob-kevyx -fireeye:xocek-lenyl-fagax -fireeye:xofad-hifoh-valix -fireeye:xuvif-syzyr-zihox -fireeye:xevid-cekip-zybyx -fireeye:xodin-lezin-paryx -fireeye:xemes-lodop-napux -fireeye:xicoc-bofip-pymox -fireeye:xusoz-lahup-vyfex -fireeye:xucif-vunob-mikox -fireeye:xitog-mabin-lalyx -fireeye:xovip-menyg-sesix -fireeye:xideh-sodiz-kicax -fireeye:xufeb-pemug-nipax -fireeye:xumer-kekil-zetix -fireeye:xedob-zihut-cekux -fireeye:xilec-vodev-pyhyx -fireeye:xulec-vavyf-fuvix -fireeye:xozed-tylod-vavax -fireeye:xihar-cobub-dobax -fireeye:xemom-cesur-vezox -fireeye:xugos-gygub-tehox -fireeye:xemir-vulon-vypex -fireeye:xonev-lizur-mepox -fireeye:xegin-behyv-medyx -fireeye:xuvic-mucyp-vypax -fireeye:xiviv-rofut-pamux -fireeye:xeten-rynyr-necyx -fireeye:xugoc-pygyk-kogex -fireeye:xedaz-vaseg-mizax -fireeye:xetez-tidin-zebax -fireeye:xetez-cazel-vicux -fireeye:xumoh-pacuh-zidex -fireeye:xilom-nonim-rekex -fireeye:xereb-mapom-kuhux -fireeye:xetos-losud-telyx -fireeye:xusal-nefuv-nakux -fireeye:xopib-conuv-zazux -fireeye:xuteh-narib-fyvux -fireeye:xukef-vyhob-cybex -fireeye:ximos-namyn-ketax -fireeye:xoker-subas-kyhox -fireeye:xebip-vulyh-tulex -fireeye:xukes-dotal-forex -fireeye:xotiz-befof-kuzix -fireeye:xozol-godun-badux -fireeye:xufir-detid-gomix -fireeye:xeloc-syvek-nulyx -fireeye:xikaz-dylyl-cecix -fireeye:xuban-vuzef-vovix -fireeye:xenak-mebit-sabux -fireeye:xemon-cymyr-rygix -fireeye:xuvis-zoroc-risix -fireeye:xidak-gorap-dofyx -fireeye:xitak-kepun-nekyx -fireeye:xucan-sokod-tatyx -fireeye:xenit-nymyl-rakix -fireeye:xebez-kokoc-zupax -fireeye:xubam-sidor-kukex -fireeye:xegir-mytab-detex -fireeye:xizeb-gypyr-sakox -fireeye:xelac-hanok-lynox -fireeye:xipam-gucav-henux -fireeye:xohas-hupul-cazix -fireeye:xudoz-rytog-likyx -fireeye:xuron-vaviz-gufax -fireeye:xogob-fyzeg-camax -fireeye:xogif-nynip-lezox -fireeye:xiget-hydyp-mamix -fireeye:xunon-gasig-zidax -fireeye:xizas-kydas-tytix -fireeye:xusis-cyhah-mezex -fireeye:xudiv-regys-bolux -fireeye:xusag-dakak-myvyx -fireeye:xegiv-hibec-dudax -fireeye:xopov-lisaf-medyx -fireeye:xefec-cytes-lezux -fireeye:xised-kihut-zirux -fireeye:xitov-kikef-kityx -fireeye:xikiv-vuneh-letax -fireeye:xucam-vemok-vyfax -fireeye:xidol-puhak-voryx -fireeye:xicen-casyd-bucax -fireeye:xemob-hados-syrox -fireeye:xifez-gydiv-sefox -fireeye:xozev-rakor-pepox -fireeye:xodan-honag-dukux -fireeye:xereg-kabah-visax -fireeye:xigec-cuzum-tupax -fireeye:xovik-kakit-sacix -fireeye:xodic-zifef-lalix -fireeye:xivaz-micup-losex -fireeye:xilon-mekim-zocyx -fireeye:xusiz-keriv-nizox -fireeye:xogil-ligyl-dibox -fireeye:xiron-kyvag-cizux -fireeye:xeseg-tetyt-cifox -fireeye:xinig-latyt-hymox -fireeye:xihil-fufel-nylax -fireeye:xuteb-tepic-gekux -fireeye:xunad-nyvar-gagex -fireeye:xokim-rukid-mosox -fireeye:xukob-lolin-bepax -fireeye:xusen-hyvom-pohax -fireeye:xekak-hunam-colix -fireeye:xegib-gynyc-lygix -fireeye:xevov-lopoc-zolox -fireeye:xuzac-viryb-lazix -fireeye:xonac-sevat-nypox -fireeye:xolar-sekak-cutux -fireeye:xugap-tocov-zamox -fireeye:xuzis-pyrid-mohux -fireeye:xogir-ruked-nutix -fireeye:xipas-cucet-ketax -fireeye:xofoc-bulyl-mokex -fireeye:xibef-katip-pisox -fireeye:xirez-tidum-rusex -fireeye:xefan-depok-gipux -fireeye:xicik-mehol-sulux -fireeye:xevag-gomep-sevyx -fireeye:xikaz-vimoc-hypax -fireeye:xedac-cefiv-kufox -fireeye:xomal-sofav-tikex -fireeye:xepes-lyzac-kopix -fireeye:xufih-huduz-hycox -fireeye:xulab-kozag-bisix -fireeye:xisen-tikum-dutyx -fireeye:xubis-bokuv-dukox -fireeye:xopap-hycyg-zelex -fireeye:xocis-sobih-dibox -fireeye:xihep-cileb-gunux -fireeye:xosin-syres-pohax -fireeye:xolin-mogir-pazax -fireeye:xivog-loged-sitax -fireeye:xebih-terap-pidox -fireeye:xozem-kelyg-fosax -fireeye:xudiv-vizig-zidex -fireeye:xerov-tifap-myzix -fireeye:xubaf-coves-byzix -fireeye:xetav-tosik-zoryx -fireeye:xezes-lidav-hahyx -fireeye:xutob-zakol-cynex -fireeye:xezov-kuzef-nisex -fireeye:xotis-bogen-datyx -fireeye:xopen-terut-cyfox -fireeye:xubod-rodef-rerox -fireeye:xiger-fofys-zacox -fireeye:xifoh-risah-vicox -fireeye:xubig-kimub-dinux -fireeye:xolop-hygof-casex -fireeye:xonim-muluf-lulyx -fireeye:xoden-guzyg-hozix -fireeye:xelep-sobof-suhix -fireeye:xefar-zahas-kohyx -fireeye:xifin-tober-guhex -fireeye:xidak-pugod-halox -fireeye:xitan-losym-vokox -fireeye:xuvah-cynac-sogix -fireeye:xizen-mopan-sitox -fireeye:xugip-dymif-bosax -fireeye:xepol-cekud-hesax -fireeye:xifaf-cybof-vagyx -fireeye:xilif-fened-lubex -fireeye:xukez-bosah-fifix -fireeye:xotoh-dalet-viryx -fireeye:xugiz-labyd-bicix -fireeye:xucoz-dudyr-tipax -fireeye:xozag-fupar-ladox -fireeye:xumod-lozim-pihux -fireeye:xukof-cytan-vyfax -fireeye:xunat-ferot-mogix -fireeye:ximod-kerov-sukyx -fireeye:xihok-dabad-kivux -fireeye:xehar-detek-mibax -fireeye:xomek-rysub-linix -fireeye:xisas-cusif-zinex -fireeye:xedig-belyh-symex -fireeye:xoniz-savub-gygax -fireeye:xepad-vohit-sikix -fireeye:xuseb-cusav-tykix -fireeye:xiheh-bidaz-lubix -fireeye:xegor-zyfel-guvix -fireeye:xelad-cimyr-tukex -fireeye:xelim-modyp-nepox -fireeye:xivah-gezar-hepix -fireeye:xihoc-punuh-syzux -fireeye:xugiz-deguf-penox -fireeye:xihef-gubad-zofix -fireeye:xedem-sybef-cebux -fireeye:xivap-misar-kocix -fireeye:xumib-roloh-barox -fireeye:xotob-fazym-vapex -fireeye:xegat-fugon-kasyx -fireeye:xehil-gabyc-zityx -fireeye:xivof-susyk-cohax -fireeye:xefik-sunet-nicex -fireeye:xipef-kupep-defyx -fireeye:xusil-nyhuh-bufox -fireeye:xubik-vabyb-hygex -fireeye:xuleb-mozus-femux -fireeye:xoseh-temeg-mehix -fireeye:xerep-bogyl-dudex -fireeye:xufap-mevyb-totix -fireeye:xulat-gecyd-lyvix -fireeye:xifaz-tunap-pypyx -fireeye:xubat-kutyr-gikux -fireeye:xomes-lehys-fumix -fireeye:xogah-vasym-dusex -fireeye:xufes-vozyd-labox -fireeye:xovef-varir-sinux -fireeye:xipog-finec-gehux -fireeye:xehad-lukib-dibyx -fireeye:xunom-byvob-madax -fireeye:xires-bogum-donyx -fireeye:xemem-hatit-kanyx -fireeye:xocon-paheh-benox -fireeye:xorek-hozap-rytax -fireeye:xorom-cyles-lurex -fireeye:xurep-bapes-gekex -fireeye:xipet-lukyr-badyx -fireeye:xefeg-dehoz-tetax -fireeye:xikeg-niguf-bulux -fireeye:xolop-rikev-volix -fireeye:xurog-lycyr-livex -fireeye:xeheh-surek-covyx -fireeye:xenif-rofon-memox -fireeye:xevev-kudyd-bokix -fireeye:xutam-nofif-ricux -fireeye:xorim-pehak-gimax -fireeye:xoneb-kiboz-futix -fireeye:xudet-cuson-corox -fireeye:xosev-mezem-vudix -fireeye:xuboz-dalyn-pefux -fireeye:xiled-putos-nonex -fireeye:xifob-bamyc-sifix -fireeye:xorit-mynyh-vyrux -fireeye:xelin-zykit-sihex -fireeye:xumin-fiter-rovox -fireeye:xogaz-hyvid-buhux -fireeye:xekat-gorun-nerux -fireeye:xosah-curah-suzax -fireeye:xoses-lurag-fydex -fireeye:xibic-hocuv-lyfax -fireeye:xuzip-nuvup-fobax -fireeye:xogoc-zuhuh-lunix -fireeye:xozol-dypyt-dihex -fireeye:xugim-rovak-gohyx -fireeye:xomer-tivan-matux -fireeye:xiher-vemyt-sibyx -fireeye:xurop-vumim-gekax -fireeye:xolis-nekof-vehix -fireeye:xudal-duveg-gyrox -fireeye:xipos-nibyf-dimix -fireeye:xetir-lyluc-rihax -fireeye:xuriv-zipes-cytyx -fireeye:xeled-zasem-futyx -fireeye:xokoh-hytyz-myfax -fireeye:xodet-bitod-bugax -fireeye:xoreh-havih-lonyx -fireeye:xunol-semyr-kemyx -fireeye:xoneh-cydov-fytox -fireeye:xibep-rezyg-hahyx -fireeye:xozep-nyduz-kynix -fireeye:xeteg-vepuz-tulox -fireeye:xilat-lahek-cyfex -fireeye:xusek-vynaz-lenux -fireeye:xific-giner-cifax -fireeye:xudib-filyb-sucyx -fireeye:xogot-nugac-zihax -fireeye:xehor-kenag-detex -fireeye:xedim-rafev-magax -fireeye:xokos-dodaf-delix -fireeye:xuhez-lavut-vohax -fireeye:xetoc-nohom-vezyx -fireeye:xisim-bozeb-nimyx -fireeye:xidak-lomob-rehix -fireeye:xusal-zolyr-dyvyx -fireeye:xupep-pabih-bosux -fireeye:xehod-zukih-gazox -fireeye:xigal-voduv-lyzox -fireeye:xemig-dogog-nymax -fireeye:xerep-tucak-cefyx -fireeye:xogip-cegeh-fifex -fireeye:xosab-mytub-rygox -fireeye:xikop-kudud-kohix -fireeye:xorad-kekam-rirex -fireeye:xihon-cylip-tekax -fireeye:xikat-tizif-huhax -fireeye:xovez-pufov-ralux -fireeye:xunal-vehas-sivyx -fireeye:xukir-vizar-sydux -fireeye:xigeb-lyliv-mubax -fireeye:xuvam-ruvub-vomex -fireeye:xuseb-cured-guhux -fireeye:xipez-febeg-pykux -fireeye:xedaf-simom-gehux -fireeye:xunak-minyz-cubyx -fireeye:xikem-becen-ceryx -fireeye:xicim-vevad-dolyx -fireeye:xolar-vunuf-kesux -fireeye:xunis-hesis-golyx -fireeye:xehom-sesul-banux -fireeye:xirar-gegik-horyx -fireeye:xeras-mohip-fufix -fireeye:ximif-pytyh-zytex -fireeye:xokot-kysoz-tigox -fireeye:xidih-caves-rufex -fireeye:xizer-bopum-tutix -fireeye:xeval-puzyg-kydux -fireeye:xoloc-dorag-rutox -fireeye:xocab-gycer-cypyx -fireeye:xelis-huhif-volix -fireeye:xivor-laneb-myhax -fireeye:xocol-pyvyc-gyzyx -fireeye:xupih-vumip-zyfex -fireeye:xedoz-dalit-fuhux -fireeye:xelak-nerus-togux -fireeye:xotig-vodef-zacix -fireeye:xetod-nezys-fedix -fireeye:xunaf-babub-gagox -fireeye:xebor-kykyg-nybix -fireeye:xohic-nipod-gozux -fireeye:xodez-tysyf-muvax -fireeye:xivin-pyfes-tasyx -fireeye:xukeg-havup-banyx -fireeye:xolof-romam-lobax -fireeye:xegiz-denyr-sekox -fireeye:xukos-rosip-nihex -fireeye:xehon-pohyk-metyx -fireeye:xitof-gocuv-horux -fireeye:xomag-nemud-nityx -fireeye:xidef-fanen-hirex -fireeye:xifav-topab-dolix -fireeye:xunil-hylav-lemex -fireeye:xevih-hycel-dinex -fireeye:xenok-tobap-pepax -fireeye:xigop-gigav-cutax -fireeye:xehof-cibap-kilex -fireeye:xulad-tefit-filax -fireeye:xofez-rusyn-dyhex -fireeye:xeval-tadum-bavux -fireeye:xidih-cuseb-gunyx -fireeye:xukiz-hifuc-memax -fireeye:xitoz-nukob-kusax -fireeye:xukag-noluf-vupax -fireeye:xuros-hurar-meryx -fireeye:xinih-gadif-cyrex -fireeye:xobet-faneb-zifyx -fireeye:xuvok-keked-lidax -fireeye:xebat-tyvir-sefex -fireeye:xulin-vihes-tucex -fireeye:xutah-licak-rihax -fireeye:ximon-zybup-podux -fireeye:xofov-nyhof-tusax -fireeye:ximen-socis-nisix -fireeye:xomav-filuc-lomax -fireeye:xinar-pupaz-fetex -fireeye:xelog-kycel-gicex -fireeye:xonam-ruvyc-vuvox -fireeye:xipes-bysec-savux -fireeye:xeloc-kanar-nalix -fireeye:xezoz-tuhyg-nenix -fireeye:xipad-dipik-cubux -fireeye:xotip-tamyf-bimex -fireeye:xelas-fogas-pybix -fireeye:xidel-pihyh-nofux -fireeye:xudec-kopan-rekax -fireeye:xuleb-rozof-lycix -fireeye:xuvil-nasov-fatax -fireeye:xebom-kepyt-ferux -fireeye:xifiz-gafeb-pukax -fireeye:xizes-zukuc-hakax -fireeye:xekif-sebec-hufex -fireeye:xefam-nesor-gelux -fireeye:xoroh-sikef-penyx -fireeye:xives-ryzol-votax -fireeye:xivac-direp-buvyx -fireeye:xeped-hepeh-kegex -fireeye:xomiz-hyzyz-hofux -fireeye:xosok-ragen-terex -fireeye:xizot-cypyc-cabyx -fireeye:xipeh-kezyl-kafix -fireeye:xosol-gotud-disyx -fireeye:ximem-remyv-rybix -fireeye:xezob-hivok-pucyx -fireeye:xesel-kamib-satex -fireeye:xiteb-rizun-bipex -fireeye:xomav-dutor-tazux -fireeye:xinov-rizun-satex -fireeye:xenim-cukag-tofyx -fireeye:xedad-dytan-zyfex -fireeye:xifez-bukyv-tevox -fireeye:xitah-faloh-sukax -fireeye:xiger-pokor-hapex -fireeye:xihel-pusad-cafyx -fireeye:ximar-fefup-sicyx -fireeye:xiref-falyp-kodyx -fireeye:xiper-docyr-zegux -fireeye:xihiz-falus-katax -fireeye:xikol-vodur-rahix -fireeye:xobat-vudoc-livax -fireeye:xevef-valyg-mytax -fireeye:xokek-gobyn-lycax -fireeye:xelad-pazuz-bumox -fireeye:xupel-pezyf-lidex -fireeye:xufep-giloz-zybux -fireeye:xosih-bylyb-lofox -fireeye:xesez-kasyk-gehax -fireeye:xezis-kudel-dycix -fireeye:xeras-gydag-mofex -fireeye:xobaf-hekof-bazex -fireeye:xegis-gytal-mumax -fireeye:xeraz-subuf-durix -fireeye:xosok-kugud-vulix -fireeye:xenop-citer-budox -fireeye:xihab-bamuz-cyzix -fireeye:xozot-myluh-tydyx -fireeye:ximik-pakil-parox -fireeye:xuzas-sebyv-racax -fireeye:xekep-hulod-tudox -fireeye:xobef-kikas-rebex -fireeye:xirev-nazel-hekyx -fireeye:xepib-zotuf-pelyx -fireeye:xicor-fazeg-canax -fireeye:xifih-tyned-lyfex -fireeye:xuvon-manud-sedyx -fireeye:xibop-ninet-sozex -fireeye:xideg-domeh-gobux -fireeye:xusos-hesiz-ponex -fireeye:xedor-vyfyf-vihax -fireeye:xonoz-kulyl-bokux -fireeye:xofis-lapez-tarox -fireeye:xosev-hubah-tavex -fireeye:xiper-mevyv-migix -fireeye:xiver-vuhit-lipix -fireeye:xifom-fahol-vydox -fireeye:xulan-lamar-lunyx -fireeye:xecir-sedaf-bemix -fireeye:xecih-susad-tygyx -fireeye:xudoh-pycar-fovyx -fireeye:xetin-muval-fybax -fireeye:xuboh-lebyp-kadox -fireeye:xupih-zecib-cumyx -fireeye:xizeg-kocid-nimex -fireeye:ximak-potav-zohyx -fireeye:xegen-hutak-togox -fireeye:xinad-hapak-puzux -fireeye:xolid-fagyh-fybyx -fireeye:xinid-vomok-hohyx -fireeye:xomek-hopel-bipex -fireeye:xuhim-lelub-zipax -fireeye:xeteh-gebeg-bodax -fireeye:xozob-talor-sahex -fireeye:xivon-gonik-zubux -fireeye:xudol-kural-simax -fireeye:xepip-zedun-zopex -fireeye:xutot-mohuv-sufux -fireeye:xugor-bibef-gunax -fireeye:xefec-fubod-gozex -fireeye:xopag-tegig-revex -fireeye:xosos-kapun-fovox -fireeye:xedas-zepyk-ladax -fireeye:xomop-delob-lepex -fireeye:xuhav-fapec-rutix -fireeye:xehaf-zedyv-nugyx -fireeye:xenim-podud-secyx -fireeye:xonoh-teleh-vesax -fireeye:xetih-hemez-henax -fireeye:xicir-hyzuh-bifex -fireeye:xofad-zezyb-vizax -fireeye:xinov-supez-cozax -fireeye:xofem-tasir-cunox -fireeye:xekek-keryb-zubax -fireeye:xumit-bigik-kekux -fireeye:xitag-kikyg-nyvux -fireeye:xecaf-leruk-tehox -fireeye:xobap-racyb-budex -fireeye:xudaf-cirot-fyhyx -fireeye:xipog-nidif-zavex -fireeye:xulih-bilah-benyx -fireeye:xivit-lelys-mebax -fireeye:xucif-rumeh-norex -fireeye:xikob-foden-cukux -fireeye:xohim-mobaf-hucex -fireeye:xecor-valyl-vuvax -fireeye:xuhot-daven-kykux -fireeye:xisac-bicum-nilix -fireeye:xiges-nakir-mufux -fireeye:xicep-zasyn-gucyx -fireeye:xelol-sahyh-pinyx -fireeye:xizez-bunez-nopex -fireeye:xinim-helyc-muhox -fireeye:xosak-bilod-nunex -fireeye:xenos-coben-cecyx -fireeye:xudag-kypif-zapax -fireeye:xibad-zopyb-vycox -fireeye:xivec-bymab-zibax -fireeye:xocog-kityb-nifax -fireeye:xicik-roner-kisux -fireeye:xifis-nynak-badux -fireeye:xocap-mityb-nabox -fireeye:xupit-tagef-begax -fireeye:xolim-bazys-nodex -fireeye:xohid-citug-sarex -fireeye:xesag-dyfop-dyzax -fireeye:xunob-rociz-zomox -fireeye:xugat-dutyh-hyrax -fireeye:xudet-putoc-fanux -fireeye:xuneb-nybit-pegox -fireeye:xenis-haseb-mamax -fireeye:xenig-kerys-todox -fireeye:xidit-micyg-vusyx -fireeye:xogir-lyzub-hokax -fireeye:xenic-nilis-lyhux -fireeye:xucim-pydis-zahex -fireeye:xigev-tipom-lazox -fireeye:xehof-lelen-vehux -fireeye:xonef-husez-fyhix -fireeye:xomir-cofuh-hymex -fireeye:xuceb-canun-dolex -fireeye:xumaz-rakaz-nafix -fireeye:xidor-mivav-lilax -fireeye:xosit-loren-losux -fireeye:xumiz-gibyn-pokix -fireeye:xufod-banor-duzox -fireeye:xovok-ryvic-fefyx -fireeye:xigeh-menib-sysyx -fireeye:xesah-vysob-bibex -fireeye:xopit-vebyk-kuvex -fireeye:xucin-byzob-zyrex -fireeye:xusos-pezip-zinux -fireeye:xobac-lacyd-fyfex -fireeye:xoral-netit-vynyx -fireeye:xuhin-tycip-nupix -fireeye:xureg-tutoz-zinux -fireeye:xemog-ficat-ramax -fireeye:xiciv-kikip-pabyx -fireeye:xopab-tedih-kusox -fireeye:xopas-minoz-nogox -fireeye:xomis-vonus-rocyx -fireeye:xibab-bacus-zebyx -fireeye:xusin-benuh-tegex -fireeye:xecad-hudev-fynix -fireeye:xivek-lugyv-vymex -fireeye:xizam-dohil-sykax -fireeye:xopeb-tumuh-fodex -fireeye:xuvol-kukel-dizix -fireeye:xidob-logaf-romax -fireeye:xupab-suroz-sygax -fireeye:xinar-segud-difex -fireeye:xilig-habut-kefix -fireeye:xupev-bival-berax -fireeye:xihal-fakyk-kufex -fireeye:xinih-sekyc-livux -fireeye:xezip-zofig-lohix -fireeye:xolon-geguv-vahyx -fireeye:xusip-zinap-pamex -fireeye:xefab-goboh-tahux -fireeye:xucoz-riluk-gyrax -fireeye:xuvol-goren-vuzox -fireeye:xorem-komak-melax -fireeye:xuzel-lepyk-tahex -fireeye:xepom-pedit-pyvax -fireeye:xugon-kivuk-legyx -fireeye:xulil-vikem-nygox -fireeye:xeves-dalad-nanax -fireeye:xisin-fyhus-hivox -fireeye:xubel-caval-belyx -fireeye:xeter-fygud-lodux -fireeye:xihib-manir-gezox -fireeye:xeril-necum-dokyx -fireeye:xubem-tadag-socox -fireeye:xozeg-bageb-zysox -fireeye:xobim-kiseb-pofix -fireeye:ximos-byked-myfux -fireeye:xisas-ridum-zemox -fireeye:xerem-dafuv-hizyx -fireeye:ximit-pymus-zekyx -fireeye:xuric-ginal-kegax -fireeye:xelig-davek-fulex -fireeye:xebat-sotul-picix -fireeye:xigam-lyfit-denix -fireeye:xubed-sodyb-mepex -fireeye:xuzim-lagur-dadax -fireeye:xoked-hadyk-vuvyx -fireeye:xudim-fifeg-zetex -fireeye:xecoh-depuk-kicax -fireeye:xotan-pokor-pycox -fireeye:xofoz-zisam-melex -fireeye:xotec-viheg-kyfax -fireeye:xeloc-hygyt-budax -fireeye:xomib-pagib-guvex -fireeye:xibaz-tebam-furux -fireeye:xofih-gosol-kekox -fireeye:xotoc-hifeb-futix -fireeye:xuson-zaguh-lakox -fireeye:xibag-gamis-nylax -fireeye:xobov-tizel-fupux -fireeye:xetiz-vinuh-bimix -fireeye:xufof-repim-zetix -fireeye:xorom-dyvuc-hytyx -fireeye:xotab-senup-levux -fireeye:xemar-ludyn-zydux -fireeye:xicif-veryp-rytex -fireeye:xiseh-zorub-bimex -fireeye:xunod-vegun-mivax -fireeye:xiloh-nolef-vamax -fireeye:xofab-higoc-gomax -fireeye:xumif-lubof-kigyx -fireeye:xigez-deruf-vudax -fireeye:xopan-ralol-pisax -fireeye:xemem-kadib-givox -fireeye:xehim-zibon-kegox -fireeye:xipit-sucik-zurix -fireeye:xunah-vociz-rohox -fireeye:xirav-solec-zulux -fireeye:xopep-hupud-ginux -fireeye:xoraz-cecis-cilix -fireeye:xicin-zotep-colex -fireeye:xilom-vidoc-nisox -fireeye:xedak-dacus-nasex -fireeye:xucic-hukip-tizax -fireeye:xukis-lokog-hilyx -fireeye:xeser-hibah-kumex -fireeye:xodav-ketyl-potix -fireeye:xokit-vumed-zocux -fireeye:xikok-kesed-rufix -fireeye:xisod-luhaz-hafux -fireeye:xeval-gudus-samyx -fireeye:xovam-tecac-solix -fireeye:xilos-gizat-ripox -fireeye:xezon-deliv-fynux -fireeye:xuhig-dafus-vikox -fireeye:xonec-sevac-kyrix -fireeye:xefok-zecod-fadyx -fireeye:xohov-cypyf-suzix -fireeye:xuvig-dopog-mokex -fireeye:xidac-cusuc-vacox -fireeye:xogov-zopuz-sizix -fireeye:xirar-pymut-devix -fireeye:xefek-zuhyg-buzix -fireeye:xopil-meroh-nivex -fireeye:xonan-zetug-kimox -fireeye:xigav-romos-tulix -fireeye:xidic-ratis-girox -fireeye:xovif-behoh-matux -fireeye:xorev-vuvuz-pysex -fireeye:xupor-lymyz-pikax -fireeye:xudaz-fyden-cemax -fireeye:xivid-dyrez-sihox -fireeye:xekaf-pudyn-zafax -fireeye:xuzam-piher-bifox -fireeye:xupag-zadiv-gizex -fireeye:xovek-mikih-bosix -fireeye:xopad-zysem-netix -fireeye:xucah-citup-purux -fireeye:xomof-setoc-vuhex -fireeye:xedoc-luzic-luzex -fireeye:xevir-vucad-lumax -fireeye:xupod-sumif-cimex -fireeye:xuhos-nudyp-mamax -fireeye:xigir-sysog-duhox -fireeye:xogip-gygev-somox -fireeye:xikil-gifep-vybox -fireeye:xepol-rydyf-pymyx -fireeye:xefih-lacob-nicex -fireeye:xones-riter-bebox -fireeye:xurik-kodur-visux -fireeye:xicic-dysor-potax -fireeye:xopos-pegep-gybix -fireeye:xeveb-susul-kehox -fireeye:xeser-zaseg-fufyx -fireeye:xumek-ripik-mikix -fireeye:xover-kahoc-musux -fireeye:xunec-gizic-valyx -fireeye:xuvor-nupod-nomox -fireeye:xolav-dabup-gelyx -fireeye:xiveh-tyrib-decex -fireeye:xides-rimyn-hilux -fireeye:xicat-comop-cosix -fireeye:xiret-vilot-fucax -fireeye:xorec-gosuh-pitex -fireeye:xuvim-hucur-dazyx -fireeye:xifeg-nyfor-gudax -fireeye:xefib-hibog-tacyx -fireeye:xuzit-gubut-dahux -fireeye:xicol-dykes-nylix -fireeye:xovob-gadyn-sopox -fireeye:xizav-lilyl-kebox -fireeye:xesac-riceh-livix -fireeye:xumov-hyvaf-cufex -fireeye:xivid-ludev-fepyx -fireeye:xodom-cofur-vizyx -fireeye:xisoc-buhis-radix -fireeye:xisif-pycah-gusyx -fireeye:xofop-luzud-varox -fireeye:xebol-sorir-fyhix -fireeye:xitag-becop-zofex -fireeye:xihih-robob-zedox -fireeye:xuret-bafat-nicyx -fireeye:xokab-bomah-gikux -fireeye:xuger-kopeg-tedax -fireeye:xesiz-rivyb-hyfox -fireeye:xedop-fanyt-hugax -fireeye:xulid-getuz-vakex -fireeye:xehiv-gyvun-nytux -fireeye:xuher-mesak-cuhox -fireeye:xebos-codap-venyx -fireeye:xusek-foruk-copax -fireeye:xumon-rufys-metax -fireeye:xoniz-negyk-lesux -fireeye:xupol-sagir-kypax -fireeye:xikig-lygup-sagux -fireeye:xiben-gonyr-dikax -fireeye:xuteh-hymen-zoryx -fireeye:xovom-fadig-vonex -fireeye:xehit-cyvok-kikux -fireeye:xigit-palek-fovyx -fireeye:xofil-pepas-manex -fireeye:xikon-zyzuh-ragyx -fireeye:xivez-covys-rivux -fireeye:xigid-taryf-zityx -fireeye:xosil-kifal-fuzax -fireeye:xunan-silyp-mefyx -fireeye:xetog-cidyb-cesax -fireeye:xomig-hukyt-zuvix -fireeye:xuzoz-hohud-vymax -fireeye:xuram-pebez-vopex -fireeye:xupor-togat-tokax -fireeye:xibad-pybym-zygux -fireeye:xevof-gyben-diryx -fireeye:xogil-zorod-fofix -fireeye:xudat-bidep-pufex -fireeye:xofeh-beduv-pehux -fireeye:xocon-rorym-sirex -fireeye:xukig-gudyp-vakox -fireeye:xirah-givub-savix -fireeye:xocap-syzor-mapyx -fireeye:xetok-toric-gofix -fireeye:xekeh-malys-gonyx -fireeye:xulap-pyfuk-cycyx -fireeye:xumeg-zymim-kegyx -fireeye:xilod-famub-nydax -fireeye:xugeb-sepit-mobix -fireeye:xugar-fovyh-cukex -fireeye:xusir-lufet-dilax -fireeye:xezik-pifit-bimox -fireeye:xomaz-fizah-depex -fireeye:xolez-lotyf-komux -fireeye:xesig-pozif-cekix -fireeye:xefef-lifes-rokix -fireeye:xibir-kihil-munox -fireeye:xonoz-pyzof-vosux -fireeye:xugap-pavop-horax -fireeye:xinav-vevon-cufix -fireeye:xusep-tefaz-pohox -fireeye:xefis-hadov-ninyx -fireeye:xidam-zyrod-rasox -fireeye:xulad-folyd-rigux -fireeye:xuzil-digys-pivix -fireeye:xonec-cusug-katix -fireeye:xurip-dopip-lopyx -fireeye:xuzom-fefyr-havux -fireeye:xebop-tilav-nusux -fireeye:xugag-pytor-zabox -fireeye:xoced-dypaz-zipix -fireeye:xogom-filyc-padax -fireeye:xozir-pupet-vinax -fireeye:xodev-torum-hemux -fireeye:xocom-sagos-fodox -fireeye:xoped-gakaz-tigex -fireeye:xolid-tucaz-dodix -fireeye:xugab-vagaf-fezix -fireeye:xuzap-neter-dodox -fireeye:xilog-bynyl-sisex -fireeye:xemad-luzyv-rokox -fireeye:xifef-lidas-mypox -fireeye:xomoz-sarer-lisix -fireeye:xumar-katez-hyhyx -fireeye:xivih-debak-huvyx -fireeye:xibam-bacor-zecyx -fireeye:xerel-fapaf-pikox -fireeye:xikot-pylib-bypyx -fireeye:xeces-fulot-tosox -fireeye:xenib-kogyv-zyvox -fireeye:xoceb-vigoz-hydex -fireeye:xohek-pycal-fokyx -fireeye:xevan-mavuf-fazox -fireeye:xofah-fabyv-tapix -fireeye:xetat-gyhez-rynax -fireeye:xovaf-vihuz-besox -fireeye:xukil-zuhed-vulox -fireeye:xific-perod-kifox -fireeye:xurez-pores-magox -fireeye:xevif-vifoz-vapax -fireeye:xolod-sanub-nutax -fireeye:xopel-gitis-rytix -fireeye:xufep-ramur-fupex -fireeye:xezem-siben-cirix -fireeye:xumed-podal-gilox -fireeye:ximin-bozuc-tupax -fireeye:xidep-tepev-harex -fireeye:xobad-zekit-cyrox -fireeye:xeted-dynyk-nufux -fireeye:xehot-nekun-sulix -fireeye:xocen-vucyb-fydex -fireeye:xokon-kucop-kakax -fireeye:xikof-vikyb-fudax -fireeye:xicob-hymip-fafox -fireeye:xugol-zuceh-sycyx -fireeye:xelov-hopuz-libux -fireeye:xofes-kysev-gabyx -fireeye:xutit-fesev-govex -fireeye:xumot-kyvut-kodax -fireeye:xefah-kusec-hylix -fireeye:xozam-ceguf-fotyx -fireeye:xigeg-limyp-fehox -fireeye:xopet-seroz-fypex -fireeye:xerip-mavab-rehyx -fireeye:xirab-rehom-becix -fireeye:xutin-hytac-cyrox -fireeye:xizoh-mysep-robyx -fireeye:xibaf-hynam-lekix -fireeye:xutag-zevuv-begox -fireeye:xehop-luven-hovax -fireeye:xehaf-macyd-kadux -fireeye:xemof-cynim-hubox -fireeye:xitat-cisok-sykux -fireeye:xufim-dytah-lapyx -fireeye:xedor-fytel-hazax -fireeye:xunon-debip-ritix -fireeye:xocov-babyd-bobex -fireeye:xubob-sypyn-munyx -fireeye:xerif-hosub-savox -fireeye:xumag-hacam-bufex -fireeye:xorog-roteg-rucyx -fireeye:xilev-bekop-bimyx -fireeye:xerek-mecal-ranax -fireeye:xunit-redav-locux -fireeye:xekik-mycaf-bagox -fireeye:xokol-fizyg-lovix -fireeye:xicev-buvas-safax -fireeye:ximih-vyneb-subex -fireeye:xebeb-dodoh-sibex -fireeye:xoviv-votag-vinox -fireeye:xobig-sedyc-vysux -fireeye:xutel-zesit-kikex -fireeye:xulap-linos-vedox -fireeye:xicec-nykic-hyzax -fireeye:xuhog-hupis-bihux -fireeye:ximod-hukor-lezix -fireeye:xulop-karev-samux -fireeye:xomac-razep-tehux -fireeye:xutat-todut-sifux -fireeye:xuvom-refaf-tikyx -fireeye:xohig-pivyt-pudax -fireeye:xuceh-barul-cifex -fireeye:xitir-gonel-kubix -fireeye:xunod-rudus-gegox -fireeye:xehoc-pehok-lilax -fireeye:xutan-cyvus-kylax -fireeye:xitic-susaf-hivax -fireeye:xitic-rivyk-rogax -fireeye:xilar-tuzem-humex -fireeye:xubih-venom-dyhix -fireeye:xupid-zucec-bedix -fireeye:xusan-nogon-gubox -fireeye:xizid-bifot-vogyx -fireeye:xizos-lehih-rurix -fireeye:xokid-dimap-rofux -fireeye:xivel-zelem-sevox -fireeye:xemak-fylov-fimix -fireeye:xorob-mimyc-bopix diff --git a/packages/inferno/inferno.mk b/packages/inferno/inferno.mk index 192765f..308c6f7 100644 --- a/packages/inferno/inferno.mk +++ b/packages/inferno/inferno.mk @@ -25,4 +25,4 @@ inferno-install: $(INFERNO_BUILDDIR)/build inferno-clean: rm -rf $(INFERNO_PKGDIR) $(INFERNO_BUILDDIR) -PACKAGES += inferno \ No newline at end of file +PACKAGES += inferno diff --git a/packages/ircd/ircd.mk b/packages/ircd/ircd.mk index 75d1024..79d99ea 100644 --- a/packages/ircd/ircd.mk +++ b/packages/ircd/ircd.mk @@ -1,13 +1,12 @@ IRCD_PKGDIR = $(TARGET)/ircd IRCD_BUILDDIR = $(BUILD)/ircd -IRCD_VERSION = 17.1 +IRCD_VERSION = 18 IRCD_TAR = $(CACHE)/ngircd-$(IRCD_VERSION).tar.gz IRCD_URL = ftp://ftp.berlios.de/pub/ngircd/ngircd-$(IRCD_VERSION).tar.gz IRCD_SRCDIR = $(IRCD_BUILDDIR)/ngircd-$(IRCD_VERSION) # Prevents automake from mangling cross-compiled binary names IRCD_CC_HOST := $(shell $(CC) -v 2>&1 | awk '/Target:/{print $$2}') -IRCD_CONF_OPT := --host=i686-unknown-linux-uclibc --program-transform-name= ircd-install: ircd-build @@ -23,7 +22,7 @@ $(IRCD_BUILDDIR)/source: $(IRCD_TAR) ircd-build: $(IRCD_BUILDDIR)/built $(IRCD_BUILDDIR)/built: $(IRCD_BUILDDIR)/source - cd $(IRCD_SRCDIR) && ./configure $(IRCD_CONF_OPT) + cd $(IRCD_SRCDIR) && ./configure $(CONFIG_XCOMPILE_FLAGS) $(MAKE) -C $(IRCD_SRCDIR) touch $@ @@ -36,4 +35,4 @@ ircd-install: ircd-build ircd-clean: rm -rf $(IRCD_BUILDDIR) -PACKAGES += ircd \ No newline at end of file +PACKAGES += ircd diff --git a/packages/ircd/service/ircd/ngircd.conf b/packages/ircd/service/ircd/ngircd.conf index 1e459ec..0e7705b 100644 --- a/packages/ircd/service/ircd/ngircd.conf +++ b/packages/ircd/service/ircd/ngircd.conf @@ -1,8 +1,8 @@ [Global] Name = irc.ctf Info = CTF IRC - OperCanUseMode = yes + MotdPhrase = "welcome datacomp" [Operator] Name = oper - Password = opsplz + Password = operpass diff --git a/packages/ircd/service/ircd/run b/packages/ircd/service/ircd/run index b10a66d..f033477 100755 --- a/packages/ircd/service/ircd/run +++ b/packages/ircd/service/ircd/run @@ -1,4 +1,7 @@ #! /bin/sh exec 2>&1 + +ip addr add fd84:b410:3441::6 label eth0:ircd dev eth0 + exec /opt/ircd/bin/ngircd --config ./ngircd.conf --nodaemon diff --git a/packages/mcp/service/httpd/finish b/packages/mcp/service/httpd/finish new file mode 100755 index 0000000..6317f74 --- /dev/null +++ b/packages/mcp/service/httpd/finish @@ -0,0 +1,4 @@ +#! /bin/sh + +IP=$(cat ip.txt) +ip addr del $IP dev eth0 diff --git a/packages/mcp/service/httpd/ip.txt b/packages/mcp/service/httpd/ip.txt new file mode 100644 index 0000000..9172a33 --- /dev/null +++ b/packages/mcp/service/httpd/ip.txt @@ -0,0 +1 @@ +fd84:b410:3441::2/64 diff --git a/packages/mcp/service/httpd/run b/packages/mcp/service/httpd/run index 899b1c5..4f064d7 100755 --- a/packages/mcp/service/httpd/run +++ b/packages/mcp/service/httpd/run @@ -2,11 +2,13 @@ exec 2>&1 -ip addr add 10.0.0.2/16 label eth0:mcp dev eth0 - -install -d /var/www +# Bring up address +IP=$(cat ip.txt) +ip addr add $IP dev eth0 +ip monitor | grep -q $IP # Link in puzzles and web pages +install -d /var/www for d in /opt/*; do if [ -d $d/puzzles ]; then ln -sf $d/puzzles /var/www/$(basename $d) @@ -20,4 +22,4 @@ done mkdir -p sites cd sites ln -sf /var/www default -exec tcpsvd -u ctf 10.0.0.2 80 /opt/mcp/bin/fnord-cgi +exec tcpsvd -u ctf $IP 80 /opt/mcp/bin/fnord-cgi diff --git a/packages/mcp/service/puzzled/run b/packages/mcp/service/puzzled/run index 936c647..261eaf7 100755 --- a/packages/mcp/service/puzzled/run +++ b/packages/mcp/service/puzzled/run @@ -4,7 +4,9 @@ exec 2>&1 DB=/var/lib/ctf/puzzles.db -mkdir -p /var/www +adduser -D -S -h /var/lib/ctf -H ctf || true + +mkdir -p /var/lib/ctf /var/www touch $DB chown ctf $DB diff --git a/packages/mcp/service/tokend/log/run b/packages/mcp/service/tokend/log/run deleted file mode 100755 index 1e7bd9d..0000000 --- a/packages/mcp/service/tokend/log/run +++ /dev/null @@ -1,3 +0,0 @@ -#! /bin/sh - -exec svlogd -tt $PWD diff --git a/packages/mcp/service/tokend/run b/packages/mcp/service/tokend/run deleted file mode 100755 index 52860c5..0000000 --- a/packages/mcp/service/tokend/run +++ /dev/null @@ -1,20 +0,0 @@ -#! /bin/sh - -exec 2>&1 - -ip addr add 10.0.0.2/16 label eth0:mcp dev eth0 - -DB=/var/lib/ctf/tokens.db - -if [ ! -f $DB ]; then - # Append any package-provided tokens - cat /opt/*/tokens.txt >$DB 2>/dev/null - chown ctf $DB -fi - -for fn in /var/lib/ctf/tokens.db /var/lib/ctf/claim.db; do - touch $fn - chown ctf $fn -done - -exec tcpsvd -u ctf 0 1 /opt/mcp/bin/in.tokend diff --git a/packages/octopus/service/octopus/ip.txt b/packages/octopus/service/octopus/ip.txt index 9d23432..d584470 100644 --- a/packages/octopus/service/octopus/ip.txt +++ b/packages/octopus/service/octopus/ip.txt @@ -1 +1 @@ -fd84:b410:3441:1663::8888/48 +fd84:b410:3441::8888/64 diff --git a/packages/octopus/service/octopus/run b/packages/octopus/service/octopus/run index 45a06c8..3386b3d 100755 --- a/packages/octopus/service/octopus/run +++ b/packages/octopus/service/octopus/run @@ -1,7 +1,8 @@ #! /bin/sh -e exec 2>&1 + IP=$(cat ip.txt) -ip addr add $IP label eth0:octopus dev eth0 +ip addr add $IP dev eth0 ip monitor | grep -q $IP exec /opt/octopus/bin/octopus ${IP%/*} diff --git a/packages/router/service/router/run b/packages/router/service/router/run index ca5ce40..8a9c36f 100755 --- a/packages/router/service/router/run +++ b/packages/router/service/router/run @@ -2,12 +2,12 @@ exec 2>&1 -hostname router - PFX=fd84:b410:3441 +hostname router + # We're a router -echo 1 > /proc/sys/net/ipv6/conf/default/forwarding +echo 1 > /proc/sys/net/ipv6/conf/all/forwarding # Bring up main ethernet interface ip addr add $PFX:0::1/64 dev eth0 diff --git a/packages/router/service/sshd/run b/packages/router/service/sshd/run index 529fed1..6d4ef96 100755 --- a/packages/router/service/sshd/run +++ b/packages/router/service/sshd/run @@ -2,8 +2,6 @@ exec 2>&1 -if adduser -D -u 0 -h / -s /bin/sh root; then - echo 'root:$1$xAJ7KwiU$BeKJjYGs9r/hY9Ag4qv4I1' | chpasswd --encrypted -done +[ -r /etc/passwd ] || echo 'root:$1$xAJ7KwiU$BeKJjYGs9r/hY9Ag4qv4I1:0:0:root:/tmp:/bin/sh' > /etc/passwd exec dropbear -r ./rsa.key -E -F diff --git a/packages/sandia/sandia.mk b/packages/sandia/sandia.mk deleted file mode 100644 index ab472bd..0000000 --- a/packages/sandia/sandia.mk +++ /dev/null @@ -1,8 +0,0 @@ -sandia-source: -sandia-build: - -sandia-install: packages/sandia/tokens.txt - mkdir -p $(TARGET)/sandia/ - cp $< $(TARGET)/sandia/ - -PACKAGES += sandia diff --git a/packages/sandia/tokens.txt b/packages/sandia/tokens.txt deleted file mode 100644 index cc2fb4f..0000000 --- a/packages/sandia/tokens.txt +++ /dev/null @@ -1,5000 +0,0 @@ -round1:xocop-furiz-nakax -round1:xofaf-bulyr-bipox -round1:xihot-pyhad-gipax -round1:xidak-pobah-merex -round1:xodov-dymos-delyx -round1:xupog-pires-dedyx -round1:xeril-zadug-hytux -round1:xebib-seheg-ketux -round1:xifas-cyvuz-zucix -round1:xotep-lenic-tepix -round1:xopif-gymok-porux -round1:xobac-sivek-bogyx -round1:xibot-variv-furox -round1:xumiv-kyron-nudix -round1:xelov-zisyc-rikyx -round1:xebef-zoveg-difox -round1:xihad-rekup-kofox -round1:xubog-sohoc-ronix -round1:xetik-hylok-medex -round1:xomom-garab-fopux -round1:xuzes-voraf-firyx -round1:xinit-mykip-hivax -round1:xefan-befif-bupax -round1:xuniz-fevuc-mipex -round1:xegaf-fecyv-vutyx -round1:xocip-lalid-fimox -round1:xocef-dynon-fyfox -round1:xenoh-sydut-casex -round1:xilat-raneh-nabax -round1:xoned-makyh-morix -round1:xiled-fihoc-zytyx -round1:xobof-cicib-dudyx -round1:xucen-dorat-kavax -round1:xedek-manuv-kegox -round1:xupos-sekyf-hatix -round1:xoroz-pukac-pasex -round1:xecos-lupek-zucox -round1:xebic-cikoz-sehax -round1:xugas-puhuz-babox -round1:xumen-sugic-manax -round1:xiror-pysil-bisax -round1:xozah-fomab-suzix -round1:xomak-temem-cisax -round1:xigaf-bubaf-hudix -round1:xupac-pynis-karyx -round1:xotef-fubas-rycix -round1:xugah-zuvef-tumux -round1:xedab-ketam-dimox -round1:xubel-moheg-nynux -round1:xunod-camal-rykex -round1:xufov-kyner-sacex -round1:xevek-kyceg-sipyx -round1:xuboc-tefiv-razex -round1:xenis-kipez-nadux -round1:xucen-karyf-simux -round1:xuned-petyv-cilix -round1:xesam-hizim-mevox -round1:xemaf-futac-kibox -round1:xepon-dobyb-hogux -round1:xeboh-tarom-cavox -round1:xudif-gulez-hyfox -round1:xivob-kipen-rilix -round1:xevav-sufap-vezox -round1:xocir-fegog-vykax -round1:xunif-fasiz-vudex -round1:xukik-nyrig-resox -round1:xesoc-ciguc-sosox -round1:xufoz-koren-honix -round1:xobes-luzuk-ludux -round1:xihoh-kutok-nebyx -round1:xelet-dupaz-sumux -round1:xoral-dovug-lepox -round1:ximan-sefol-kynex -round1:xedel-tozop-movox -round1:xecen-bycip-hygax -round1:xetop-tecyk-nedox -round1:xupes-puvov-dodyx -round1:xotem-cufin-suhox -round1:xisih-lodud-zacix -round1:xitir-pagib-cygax -round1:xesem-fipeg-cezux -round1:xukir-rilan-pygyx -round1:xogef-zuget-ragux -round1:xoded-sakes-butox -round1:xugiv-rozuk-hofux -round1:xidef-lucip-decox -round1:xudel-kocyb-sakox -round1:xonic-ticur-fynyx -round1:xonet-selyg-vydix -round1:xohic-deluf-hezix -round1:xoran-nidic-mopax -round1:xorov-zypyv-lobyx -round1:xebif-nenag-dodex -round1:xorip-hyfor-nugux -round1:xomoh-faril-cytox -round1:xobar-karal-guzyx -round1:xolil-tekyg-tomax -round1:xehod-sisir-facax -round1:xomiz-batoc-tefex -round1:xemic-totuz-vytyx -round1:xetak-nolis-rupux -round1:xupar-pyzyf-canax -round1:xogab-pykyn-vubox -round1:xufol-pehec-kafex -round1:xofip-zegag-faryx -round1:xukar-vusuh-gonyx -round1:xorar-lesag-nikax -round1:xonif-hihyg-pokux -round1:xomof-halez-bafix -round1:xumiz-zonuz-davyx -round1:xozep-tekec-zobyx -round1:xetab-dakul-tocax -round1:xehen-varav-pogax -round1:xefaf-pypip-mefax -round1:xotom-ruzah-kemex -round1:xucil-cypuh-tifax -round1:xesat-bypel-pyrox -round1:xelak-busod-torex -round1:xuhaf-zekad-vihex -round1:xular-zynub-picox -round1:xivov-kytyc-tozox -round1:xulos-pybeh-zidax -round1:ximas-menyb-vupax -round1:xufob-vazap-denux -round1:xodod-murot-gybux -round1:xelar-lasut-balix -round1:xuben-lidek-zucyx -round1:xesok-kozev-mugox -round1:xukev-mypuz-bybux -round1:xedeh-kerus-bopix -round1:xidel-rozuk-zopyx -round1:xunis-fycec-symux -round1:xeniz-naviv-sydux -round1:xifes-poguh-syhex -round1:xoleh-gevaf-myfix -round1:xenid-zicyh-pecyx -round1:xolip-cezuz-hanyx -round1:xicib-nifam-dagax -round1:xeroz-diras-ryvax -round1:xirok-siden-nicex -round1:xipik-karuz-puvax -round1:xelap-gycih-dezex -round1:xekeh-sorud-damax -round1:xucek-rakus-vokex -round1:xuzik-semab-pikex -round1:xeket-tavan-vykox -round1:xorod-fybam-rymax -round1:xozer-mihof-rozax -round1:xugav-zotin-mofex -round1:xifab-pedut-zacox -round1:xotah-sizyb-kutax -round1:xupih-zyper-tisex -round1:xihat-kodup-novux -round1:xopef-lopob-nygyx -round1:xigas-timig-nigox -round1:xihih-laseg-dufix -round1:xupeb-vapaz-muvox -round1:xezad-giceh-vomyx -round1:xekep-kepad-tozex -round1:xopod-zevym-ramox -round1:xihek-lurar-rypix -round1:xuvem-nevir-rivyx -round1:xocip-bekod-pyfix -round1:xefag-hygov-tosox -round1:xetef-cyrec-nitex -round1:xonel-berym-ticix -round1:xohik-fohok-bufyx -round1:xudal-mecig-zanex -round1:xucam-vecub-futix -round1:xugop-lecat-subox -round1:xitoh-fonum-nodex -round1:xocos-tyveb-tolux -round1:xital-dudel-zurox -round1:xifav-vepuh-hesex -round1:xudev-ditac-vusex -round1:xunil-hebiv-lebex -round1:xovig-cevip-nezix -round1:xoked-dolad-rofox -round1:xigam-lukud-tehox -round1:xidet-subis-zibix -round1:xorib-kefas-mityx -round1:xekaz-hyfyr-ferox -round1:xupik-zobeh-fegex -round1:xutot-tivoc-tufix -round1:xiham-vomig-kyvex -round1:xihat-zekab-tuzix -round1:xucas-teviz-pekux -round1:xugim-dozyv-nydox -round1:xuraz-myvil-zadyx -round1:xuhit-nyled-pofax -round1:xucot-vacam-dicux -round1:xihop-hekar-denix -round1:xelis-tesyl-fihax -round1:xunen-siniv-zamex -round1:xuseb-panep-fagax -round1:xubap-vevuh-dazix -round1:xihac-zakiz-vufix -round1:xohof-bozak-linix -round1:xohep-zatih-cugux -round1:xihos-nisos-gefex -round1:xuhil-copav-bolex -round1:ximod-detot-bigix -round1:xicoc-curuv-rakax -round1:xesev-bific-labix -round1:xufig-likis-huhax -round1:xiveb-getut-tetyx -round1:xofok-dohah-kadix -round1:xural-bykik-dymix -round1:xohac-vahus-figyx -round1:xomiz-kazug-fimax -round1:xinom-pefat-tylex -round1:xudok-cakev-typux -round1:xesir-gizef-tobyx -round1:xenop-cotut-duzux -round1:xocid-bysic-lidyx -round1:xokip-cyfyc-tylax -round1:xobat-vopun-menix -round1:xifis-sirel-lutyx -round1:xegek-zegav-gelyx -round1:xicod-hizyr-rykex -round1:xoped-vahor-tizex -round1:xikof-gelob-pezex -round1:xeled-pakaz-zymox -round1:xileb-nimoz-dizyx -round1:xifet-cakyd-gupyx -round1:xukik-zysas-cykyx -round1:xebon-febak-zykux -round1:xemoz-vozit-garox -round1:xekep-vofys-dydox -round1:xicel-kevyr-kikax -round1:xekas-tiduk-sapix -round1:xecez-cynuv-syzox -round1:xecov-pirar-luvox -round1:xoreb-vocok-vivux -round1:xenev-zymem-lohox -round1:xilib-cabyc-labyx -round1:xotip-pypuc-migox -round1:xucit-bucob-sirex -round1:xugah-bisep-bucex -round1:xoses-kymot-nefyx -round1:xokav-bafyf-lemax -round1:xohin-nonor-kybox -round1:xunig-pupym-kuhux -round1:xodaf-vidob-sizex -round1:xumav-cycyd-zyhox -round1:xusil-mifup-gitex -round1:xibih-gyken-numux -round1:xurev-hakuf-lasux -round1:xigag-gonab-dukux -round1:xemim-detig-dypax -round1:xorat-susut-popux -round1:xetog-cynuh-defex -round1:xivom-fitec-bypix -round1:xonem-pizob-rodex -round1:xiboz-sefem-cizux -round1:xipic-hopuf-lepyx -round1:xemob-gutem-fysox -round1:xucoc-rakoz-pivyx -round1:xubac-caged-setux -round1:xiler-rokin-rozex -round1:xukek-movib-talix -round1:xomor-pamor-pevix -round1:xusak-rufyc-cibix -round1:xiviv-bodog-mugux -round1:xuziv-tagig-gebix -round1:xehos-mavef-cadox -round1:xeval-pogup-bozix -round1:xelip-pozyk-larix -round1:xedon-giryk-hufix -round1:xives-lutel-sugax -round1:xofoz-rufif-nocax -round1:xecoc-pofen-kufex -round1:xubet-kanuc-zicax -round1:xozog-damis-comox -round1:xeniz-gytus-dugyx -round1:xonib-vymun-vetux -round1:xukem-vukeb-resox -round1:xikih-pipod-dimux -round1:xirop-himum-pogax -round1:xodip-fatah-fohux -round1:xedab-dunut-durix -round1:xovah-decod-pezox -round1:xofep-peruz-dobax -round1:xeror-hekev-bihux -round1:xifav-sylud-rogix -round1:xerid-citid-kyfox -round1:xerap-synog-zyzex -round1:xubaf-sisag-vidyx -round1:xuden-nyrub-nisox -round1:xilab-nezih-direx -round1:xetak-soges-myvyx -round1:xelac-futol-dohox -round1:xoram-gacul-lohux -round1:xozil-hipyh-hylox -round1:xelor-rikom-kavix -round1:xemep-sovos-gizax -round1:xilon-gunuf-zybux -round1:xozen-bilab-pihix -round1:xidod-mamys-gevix -round1:xodov-vytyk-vesux -round1:xegef-mifed-nocyx -round1:xicak-mucot-zypox -round1:xesiz-ricys-hamex -round1:xobak-bisul-nepyx -round1:xirov-haket-hunox -round1:xokez-resat-vacax -round1:xikes-micar-mutux -round1:xukim-guder-gosix -round1:xurom-gameb-hasax -round1:xinet-nanuc-vycox -round1:xonir-bafiv-vyfix -round1:xukoh-lerif-mybox -round1:xided-tuhuk-sutox -round1:xonen-sukyt-sezax -round1:xusim-puneb-fypex -round1:xemen-cufyz-bulux -round1:xemop-vuget-sopux -round1:xekah-hirud-hobix -round1:xites-kugoz-sagix -round1:xoveg-rupem-dunyx -round1:xemaf-fafev-lyrax -round1:xotev-dasof-cagax -round1:xehif-rihem-cyrix -round1:xilec-kihyt-ruhex -round1:xezed-dehag-hyrix -round1:xugok-rabic-tigux -round1:xuneh-rirob-hegux -round1:xugem-hicop-gyrux -round1:xorom-nysar-zubex -round1:xigic-kikyp-sumux -round1:xeleg-madeg-tolox -round1:xunar-rokeh-zyhax -round1:xofeg-nudoc-vuhex -round1:xivov-kakyf-locax -round1:xogah-mypum-mugyx -round1:xuhac-fokys-hehex -round1:ximih-zedez-zikax -round1:xofek-manub-zafyx -round1:ximig-takik-vorux -round1:xosis-cazoh-zegux -round1:xudop-tamif-tocix -round1:xofac-bibyr-cilix -round1:xicac-syhaf-zigux -round1:xolip-bynus-nirux -round1:xucih-bobit-tuvix -round1:xolon-fanim-golox -round1:xebat-micid-disox -round1:xopav-cidog-lunox -round1:xemon-kules-fepyx -round1:xodod-gikel-bamax -round1:xuman-kidiz-sumix -round1:xubeb-tuhig-muvax -round1:xolih-rulir-gylux -round1:xefih-zarav-gylax -round1:xopad-lugic-hepox -round1:xumam-dezem-bekax -round1:xomav-begoz-gibux -round1:xesiz-bihod-gekex -round1:xeniv-dytam-gicox -round1:xenot-socyl-zybux -round1:xegev-paral-kybyx -round1:xunas-lekis-bolyx -round1:xomoc-gupuv-zihyx -round1:xuzag-tydub-hutex -round1:xodog-mezuf-gyfex -round1:xokil-gacun-bemix -round1:xodam-ruvob-kygux -round1:xosag-vogyd-melox -round1:xetek-kesup-bolex -round1:xovod-tyger-zysax -round1:xizoc-lagut-hupix -round1:xoket-botet-gazux -round1:xekok-zycur-dyfyx -round1:xodas-merap-rutex -round1:xogip-vokyl-revux -round1:xitad-zecem-motex -round1:xicah-pivic-hekax -round1:xebok-fisuk-pinix -round1:xisoc-gopep-fusex -round1:xiget-momav-hicex -round1:xevel-hyzib-hirix -round1:xifel-pafub-petux -round1:xukek-hadeb-zanix -round1:xotas-kysuz-fidux -round1:xutat-fyvyn-nibux -round1:xebav-mavys-gepix -round1:xopig-tadon-kylox -round1:xodih-sugon-nazux -round1:xumoh-bavat-mabex -round1:xutar-behyl-mycax -round1:xumaf-rafoz-fukyx -round1:xomav-mibuh-zudox -round1:xekoc-norec-visox -round1:xuket-gucug-tesux -round1:xofig-vysaz-fykax -round1:xocig-bipah-typax -round1:xetot-rykav-hedex -round1:xolig-tomer-fugux -round1:xedic-zehes-pybax -round1:xulag-pacal-hirox -round1:xiden-sihag-bevex -round1:xubid-veheh-vamex -round1:xisov-dyzer-povux -round1:xizev-temeg-dugux -round1:xegar-hafof-puzyx -round1:xebes-codaf-minex -round1:xudod-bovyt-girax -round1:xefer-mekuh-fokox -round1:xetok-benad-vynex -round1:xevih-tibem-bytox -round1:xelep-dacih-gugux -round1:xorif-pasyv-rifax -round1:xicef-rokif-dynex -round1:xiveb-lehek-vekox -round1:xigiz-higal-cirax -round1:xoziz-kylah-lecyx -round1:xibir-hozah-medox -round1:xehib-lycah-botix -round1:xurez-mydem-novax -round1:xihad-kuhun-bykax -round1:xunod-zumur-nomyx -round1:xetap-numyh-zumux -round1:xuhef-cycyc-kugax -round1:xofar-nibuf-bapex -round1:xunip-tizuh-pimyx -round1:xifoc-feboc-kotix -round1:xudic-fumep-pumax -round1:xitop-nekyl-bimax -round1:xekoc-kaber-rylox -round1:xuzas-dorav-lygax -round1:xezit-ryses-mybyx -round1:xodac-vunoc-dosox -round1:xidok-laram-gubox -round1:xemok-zukol-pasox -round1:xudip-nehih-zahux -round1:xesob-mudir-sozyx -round1:xumak-lubuv-dycix -round1:xekaz-zicez-denux -round1:xibog-lafoz-sidox -round1:xekod-kakup-rylex -round1:xupet-pihan-belax -round1:xirip-hefom-zalyx -round1:xomek-hyfez-vunax -round1:xebim-fecik-povex -round1:xuvac-niras-kicyx -round1:xizop-viner-varox -round1:xebov-nisuf-tisix -round1:xebig-nifol-byvix -round1:xibeh-somug-nimux -round1:xoloh-letin-rakax -round1:xehaf-fevob-pavix -round1:xupis-mirup-pybox -round1:xunoz-zadom-bosax -round1:xitev-guket-pulax -round1:xihin-fukab-pevyx -round1:xegil-ruhob-hebyx -round1:xileb-tucog-mamix -round1:xisod-cobun-debyx -round1:xilab-fymap-vovax -round1:xenon-hepyv-nonux -round1:xutip-barum-kozox -round1:xonos-vofym-hupox -round1:ximad-retav-rykex -round1:xisab-hukes-bigux -round1:ximeb-kozoc-hazux -round1:xesos-hinat-kutux -round1:xomiz-gopip-ketux -round1:xehar-lakes-garex -round1:xokil-tyvar-cibax -round1:xofin-cakam-fehix -round1:xomes-cadab-fanax -round1:xumet-vumin-tazex -round1:xufoz-bovaf-tymox -round1:xeras-lykeh-totax -round1:xukeh-sohiz-vabox -round1:xobob-runev-megex -round1:xikek-kaluf-kytex -round1:xutal-nekif-becyx -round1:xibac-bibab-vigex -round1:xokof-lavyv-tipex -round1:xofad-cyciz-zumyx -round1:xiseg-lyfos-sorix -round1:xuzob-vacal-sisax -round1:xecot-vicyp-bebax -round1:xusif-lopat-terox -round1:xides-movyn-gopex -round1:xonof-neleg-lusux -round1:xipev-mageb-cecyx -round1:xovon-vivah-bazex -round1:xetoh-goziz-sitix -round1:xecet-sidon-hugox -round1:xocon-gatat-bafyx -round1:xosoh-cozus-bazox -round1:xutem-gunyt-hihyx -round1:xehih-nudek-vogox -round1:xudar-lyvoc-dydix -round1:xulak-huves-vihux -round1:xoleh-roref-darux -round1:xizaz-varos-sudox -round1:xizog-sedyf-mibox -round1:xohef-momuk-sodix -round1:xirir-symup-libax -round1:xefeh-rosib-kogax -round1:xidad-zubuk-tysox -round1:xotes-kakam-rucix -round1:xinac-befav-fagax -round1:xunec-mepub-zovyx -round1:xekad-vocid-dicox -round1:xumav-cacim-fegax -round1:xufez-pybep-tofix -round1:xunac-cunev-babux -round1:xular-cegyl-lotax -round1:xibec-lavib-hakux -round1:xezic-kabez-comex -round1:xoreb-babyk-legix -round1:xugaz-vavac-gahyx -round1:xeteb-doron-zynex -round1:xobib-gohob-mykax -round1:xivef-mikuz-dabax -round1:xotig-cabyk-rimox -round1:xomez-sefyb-secax -round1:xogil-gyruz-femax -round1:xibav-pamaf-zibex -round1:xudop-paduv-besex -round1:xofic-bozit-dytux -round1:xufoz-vybor-dihex -round1:xuzim-byhat-synux -round1:xohez-gorir-gufex -round1:xucol-pizeh-zydux -round1:xulic-camuz-favex -round1:xudat-vekiv-tatix -round1:xuvef-syzen-lelix -round1:xuhev-hupiz-gosix -round1:xetiv-nuper-cycix -round1:xikoc-nufyb-cidux -round1:xilol-kodym-mimox -round1:xisit-vazob-kahix -round1:xunik-sutem-nugex -round1:xitek-labyt-vugox -round1:xusol-vodif-bitux -round1:xokoz-besyg-rycux -round1:xecil-picuk-tymex -round1:xoris-covis-rumox -round1:xuhiz-zebaz-lacex -round1:xisag-penif-pudex -round1:xisav-silyp-zobux -round1:xigac-gatil-cikax -round1:xenin-mukup-lifux -round1:xonig-vamyd-pilax -round1:xukiz-gacen-dabux -round1:xopoz-muloh-cyvyx -round1:xugoh-syvuz-bisax -round1:xovin-haryf-medax -round1:xodan-gipep-zipex -round1:xigeg-samil-hupex -round1:xitip-nydur-sepox -round1:xofaz-tuhob-mikox -round1:xoziz-hykir-pucox -round1:xogih-sokim-sevix -round1:xehis-netot-sacox -round1:xevam-sykan-gyzix -round1:xoded-bilep-pazax -round1:xemel-bacus-zupyx -round1:xibiz-fytam-fygax -round1:xozog-cycon-kidix -round1:xirov-zucyk-pacyx -round1:xiseg-hogez-zatix -round1:xoken-zizik-culix -round1:xulik-tomyt-fegux -round1:xohat-lycaz-tycex -round1:xumas-rozif-bogex -round1:xeliv-ronus-ravyx -round1:xibob-kibop-movyx -round1:xisis-teted-parix -round1:xokav-hosab-locux -round1:xotos-binap-hefix -round1:xokid-pyveh-divux -round1:xumit-mavak-cevux -round1:xuder-vigud-tafix -round1:xozet-kityv-kitax -round1:xepit-kazuc-degox -round1:xileg-lipuv-sinyx -round1:xuvit-myfyb-nulux -round1:xicog-kilat-kusox -round1:xiriz-dugel-vemux -round1:xenit-tires-nuhix -round1:xugen-bezug-gabex -round1:xilov-ribec-pumix -round1:xufot-culoz-disyx -round1:xunob-filim-luvox -round1:xidab-gugun-syfex -round1:xizap-vorol-tusix -round1:xodev-facik-bazux -round1:xumap-halop-fycyx -round1:xeked-cotib-halix -round1:xihop-pynuk-lorox -round1:xogav-surel-topyx -round1:xorem-lufyz-pycyx -round1:xetat-bulag-zygex -round1:xovil-cygup-mavix -round1:xizap-tytor-vofax -round1:xofod-vocok-lubux -round1:xecoc-kadit-zozyx -round1:xupeh-sacec-lyfyx -round1:xefin-cyhyk-bokox -round1:xeveg-ragiz-cilix -round1:xuger-tufak-hezyx -round1:xomif-kyviz-cogyx -round1:xicec-penin-kudax -round1:xunir-hozyk-kisox -round1:xiziz-vivaz-rimix -round1:xicem-ronys-kagex -round1:xugah-siban-dazex -round1:xozas-muhev-zunix -round1:xodom-hilis-dobux -round1:xevig-vupav-sefex -round1:xugoh-gepof-namex -round1:xurop-neged-rodax -round1:xoheb-zibum-puzax -round1:xefiz-hidam-penox -round1:xokil-hibob-mapix -round1:xelef-pubok-girux -round1:xuseb-bolir-popix -round1:xipor-dyryb-zalax -round1:xezir-fimir-borix -round1:xumat-bebon-cabux -round1:xulad-kedid-mepox -round1:xihoh-dacul-kydax -round1:xerin-gutup-dipux -round1:xinoz-mitep-febix -round1:xocac-rikyk-lizux -round1:xesos-pasub-likix -round1:xunir-zigun-talyx -round1:xonon-pyhyc-pizux -round1:xuvez-fegem-nihix -round1:xicih-sanih-nanyx -round1:xuhed-mavah-tugux -round1:xezor-gilop-tucux -round1:xorom-podif-pizix -round1:xivid-cefuh-kalax -round1:xepac-vysep-tevix -round1:xoroh-nynos-tygyx -round1:xivig-gudah-kefax -round1:xikoh-koviz-pasax -round1:xofer-zonak-copix -round1:xofec-fudat-hogux -round1:ximog-nosil-nezyx -round1:xihin-suzuv-punox -round1:xopid-gumof-nizox -round1:xepoc-pifuc-lavex -round1:xezac-taluf-merex -round1:xepip-gogir-dofax -round1:xohav-tecap-zidux -round1:xelom-figug-tabux -round1:xobib-rotum-dyrex -round1:xutoc-baryr-selex -round1:xefig-hurur-fymix -round1:xuric-gihyf-tulyx -round1:xegol-fonot-bykyx -round1:xiham-nufom-lilex -round1:xocah-binan-debox -round1:ximem-fapak-cugyx -round1:xukak-pobis-pagox -round1:xicis-tagyv-vylux -round1:xibac-kizoz-notix -round1:xehon-syzet-tofix -round1:xidor-kytyl-zogex -round1:xoban-vovys-hilox -round1:xetip-fageh-vytax -round1:xobov-fanel-kozox -round1:xinel-vepor-bafex -round1:xibik-fukug-pitux -round1:xofin-hined-cobux -round1:xicil-zafiv-rakux -round1:xevok-fofum-demex -round1:xecot-focyr-pypix -round1:xuvep-zugus-fefyx -round1:xomel-laduk-medax -round1:xibop-pomah-kekax -round1:xorem-kifog-fozyx -round1:xezal-zadim-dekax -round1:xulos-dilis-zifux -round1:xolot-sabos-ruvex -round1:xesid-tyzip-nafux -round1:xofed-zogen-hazix -round1:xunav-boguv-mydix -round1:xegip-pucif-larix -round1:xuver-vehyb-dolyx -round1:xepik-colak-vefyx -round1:xenet-nehyh-lerax -round1:xunom-hyzuz-balax -round1:xusif-dymoh-hugyx -round1:xuzab-folek-fotux -round1:xodac-duked-secix -round1:xusoh-kuhun-tynex -round1:xuler-sebov-ripix -round1:xemed-tygef-pahix -round1:xigas-lobop-mepox -round1:xuram-dacut-munux -round1:xilar-tyrid-lisyx -round1:xekil-padyv-hicyx -round1:xotof-fibev-rytux -round1:xorab-tybib-sonox -round1:xelis-kerun-mypyx -round1:xozav-leven-nifex -round1:xivem-pohus-fahyx -round1:xetiv-zuhip-dylex -round1:xemim-kefif-zozox -round1:xunep-barih-kezex -round1:xucez-bacig-bydix -round1:xebod-gybyg-gecex -round1:xihav-kuhyr-vipex -round1:xemos-vaced-cepux -round1:xosat-posyg-goryx -round1:xofir-repib-zibax -round1:xogig-fypon-zilex -round1:xunaz-lanof-lumix -round1:xovim-gibyl-kekox -round1:xigip-bipap-bomix -round1:xozag-vupep-lecyx -round1:xedob-puhoh-tilix -round1:xoreh-lugok-refax -round1:xucef-hyseg-bysex -round1:xogim-gikir-vorux -round1:xekoc-rydag-kenox -round1:xeseg-bucug-fubex -round1:xosah-vahig-luvyx -round1:xoged-kukyd-puvix -round1:xeker-faraf-pivux -round1:xobac-zycir-vocox -round1:xehih-barag-nepyx -round1:xotop-bapor-vypox -round1:xufek-difac-gisax -round1:xupaf-labak-mihix -round1:xiceb-pahic-sopox -round1:xetaf-nibym-vafix -round1:xunap-fegiz-befux -round1:xokol-rihev-nedyx -round1:xebev-zyleg-gygox -round1:xupad-fyled-huhix -round1:xiziz-siryf-sikix -round1:xotaz-rymep-vytex -round1:xumel-harod-pevyx -round1:xigik-fidyf-voryx -round1:xemep-hyfag-hyzex -round1:xivof-durys-becux -round1:xumip-mygac-mifex -round1:xigeh-zopuz-hibox -round1:xiteg-vuzap-zozax -round1:xevef-tonyl-tihox -round1:xuhil-hetem-befix -round1:xufiv-runeb-dyzex -round1:xecek-disar-dogux -round1:xumed-hapik-lyrex -round1:xivab-dedyl-facyx -round1:xipit-zakif-bihix -round1:xedot-pepyh-bodex -round1:xifes-rupuc-dilyx -round1:xuner-recez-rapix -round1:xobeb-myzul-zolux -round1:xohov-sogil-facox -round1:xolop-dilor-varax -round1:xepam-zopek-hosax -round1:xicob-hudos-gupyx -round1:xohen-fivuv-gipex -round1:xibas-kagol-cycax -round1:xumod-vubug-basox -round1:xemod-teluf-dyrux -round1:xigih-cabic-betax -round1:xomam-heniz-vusax -round1:xuloc-zobov-subox -round1:xulin-mitod-lesox -round1:xekar-tihed-hodix -round1:ximal-lazad-gygox -round1:xuvev-lenev-lidax -round1:xiben-gihef-fagix -round1:xogac-cuguf-revix -round1:xirom-kyzyh-hufix -round1:xodek-nezyt-pyfyx -round1:xekek-luhev-fobex -round1:xizez-rakic-myhyx -round1:xuril-zugen-cavix -round1:xodit-cufer-zubex -round1:xovor-tyhyg-dipax -round1:xisoc-mamok-lafox -round1:xuvip-vydyg-pevyx -round1:xifif-gakaz-ducyx -round1:xubog-bilin-nodux -round1:xusaz-vumar-pibix -round1:xogef-gedun-kanax -round1:xefon-vevuh-hivix -round1:xekon-fazur-kotix -round1:xureh-rudan-pysyx -round1:xogek-gykih-civex -round1:xibig-fedyh-kykox -round1:xipep-bekem-gagax -round1:xolop-vukyv-dykox -round1:xoham-babyf-pecax -round1:xihem-mavof-hisux -round1:xizis-cihob-vudux -round1:xisep-rihaz-fonax -round1:xorib-katif-fybox -round1:ximer-zates-tanex -round1:xotaz-hadat-ranix -round1:xomal-siguh-purax -round1:xolan-duvaf-fucyx -round1:xecah-setud-depex -round1:xedah-sohiz-relex -round1:xirad-tunoc-cohux -round1:xineh-binec-mykex -round1:ximem-natyz-vilyx -round1:xovin-finyd-hysax -round1:xorob-bicek-pykix -round1:xetop-zulas-virix -round1:xifev-helir-hinux -round1:xolin-pyres-sulox -round1:xihez-vigut-vibyx -round1:xudev-kunyl-sudyx -round1:xomec-tunor-sytix -round1:xorav-mobod-cikax -round1:xufah-rihod-befyx -round1:xotiv-luceh-sysix -round1:xekop-vibif-lalex -round1:xohif-hyzyc-hakux -round1:xohis-litas-kilix -round1:xuzam-gerab-pihox -round1:xezov-syped-sybox -round1:xehon-nusam-gitix -round1:xedid-lamol-rutix -round1:xefok-rusak-zusyx -round1:xidom-diryn-gehyx -round1:xudic-dyfec-nusex -round1:xukos-naher-vakix -round1:xemod-tidum-bykax -round1:xokag-ninyg-kyrax -round1:xugik-moled-rukix -round1:xeboc-volav-livyx -round1:xikoc-ditib-senox -round1:xesal-cyhog-cezix -round1:xovad-tamon-lygox -round1:xeper-rydud-vecyx -round1:xebid-ruled-dalux -round1:ximad-femaz-lulux -round1:xofab-togeb-hupix -round1:xuveb-zaric-dezex -round1:xical-sapuz-cehyx -round1:xufil-dudyz-nupux -round1:xepok-tipul-dofix -round1:xicer-ronaz-cihyx -round1:xovoz-lupic-rorux -round1:xuhap-gateb-mabyx -round1:xobob-pusyl-cavux -round1:xibos-zazip-hohyx -round1:xucid-logah-cevax -round1:xigeb-pipiv-nilex -round1:xocag-visiz-mekex -round1:xezid-mazeh-kerax -round1:xibod-gehup-pypox -round1:xusap-cekid-kegyx -round1:xiroz-cubyd-pugix -round1:xudas-dyvos-rupux -round1:xevog-tokeh-nynux -round1:xobab-hopol-zibex -round1:xupic-myzos-ziryx -round1:xidev-hiryr-sykyx -round1:xubed-cotaf-fopix -round1:xuner-buzum-kakix -round1:ximik-zehuh-cuzux -round1:xucid-tobav-gyrux -round1:xozoh-dovym-kitux -round1:xunol-rykub-hukux -round1:xosiv-byres-tevux -round1:xipit-hicah-cycox -round1:xegif-ryguv-nesax -round1:xibat-gatus-kykux -round1:xegov-kutoz-kesox -round1:xesez-gatyf-bimix -round1:xofov-gemut-ratyx -round1:xinev-lodun-pylox -round1:xikan-gudiz-dobyx -round1:xesot-zyfol-helax -round1:xugon-dolek-nycyx -round1:xeroz-badyh-refex -round1:xitat-bifut-zetox -round1:xekag-nisam-dubox -round1:xidav-famuv-sylex -round1:xetor-nanig-mybyx -round1:xutoz-cohyh-hymox -round1:xekih-bafub-lacux -round1:xunan-satym-ludyx -round1:xehav-hunys-katax -round1:xuhav-tazer-cavox -round1:xufih-humok-sirex -round1:xulec-devoh-padyx -round1:xocez-basut-figux -round1:xifad-nugir-rohyx -round1:xefad-fysuz-rirox -round1:xolam-solov-lufex -round1:ximab-reheb-fuvix -round1:xodes-huren-lepix -round1:xofon-byger-hisex -round1:xiver-fyhof-gufox -round1:xetis-nyhep-lyhyx -round1:ximom-hyber-typax -round1:xoher-disil-vegyx -round1:xenoc-fomug-rilex -round1:xizog-tecig-rutex -round1:xotap-tedec-vepyx -round1:xivan-colyg-hucox -round1:xodok-sodir-vetox -round1:xohac-nylob-sahex -round1:xufih-cuzig-gufax -round1:xicin-dabuv-vusex -round1:xepag-gibeh-kihox -round1:xusah-dohek-fuzux -round1:xilif-pulod-ropyx -round1:xurar-dalel-botex -round1:xidip-huram-sogox -round1:xukim-ninyl-turyx -round1:xebag-lazap-nasax -round1:xovak-nabek-mepix -round1:xuval-hacyv-fupux -round1:xifos-fygap-vyhux -round1:xizok-togav-pihix -round1:xeboc-henut-rokix -round1:xorak-ruluv-pyzyx -round1:xocez-vuvof-papix -round1:xomop-buvef-dibux -round1:xopap-rusat-vazux -round1:xokip-buhom-lacax -round1:xeval-cisin-sunyx -round1:xupac-femuh-vymix -round1:xidik-mokuf-ledyx -round1:xebek-bared-kazex -round1:xodom-cadel-zuvux -round1:xikiz-hetod-cygyx -round1:xorob-lugyd-pezox -round1:xetos-mytyt-sogox -round1:xubid-lepyb-gagax -round1:xogof-delat-nucux -round1:xigit-koveb-hopix -round1:xusaf-demoz-kuryx -round1:xigav-nalet-kimix -round1:xikiz-kadyp-kozyx -round1:xorev-lezeh-gifex -round1:xenol-revip-fudix -round1:xehih-bicaf-velox -round1:xurid-dupyg-pivox -round1:xibop-fityr-kutux -round1:ximoh-zodoz-bebix -round1:xoheh-kokyp-helox -round1:xecik-lavin-ledix -round1:xosid-gacyd-kyrox -round1:xuven-hufyd-gocox -round1:xumel-tufud-tedex -round1:xolom-lybap-zafux -round1:xezir-mefop-byvax -round1:xemov-mudul-rusex -round1:xofez-kisov-rolex -round1:xodod-kysek-gorax -round1:xudec-kegam-gohyx -round1:xuzac-danys-bepox -round1:xehic-narom-sicix -round1:xesat-bufih-talax -round1:ximiv-budif-zokix -round1:xogat-lymok-sedax -round1:xomis-nisir-kolux -round1:xosep-tegoz-sahax -round1:xived-decof-garux -round1:xolef-hevam-kivox -round1:xumat-minal-tevex -round1:xubom-homag-lovix -round1:xulil-vahal-suvux -round1:xesam-cyzik-nunux -round1:xiteh-honuk-pemax -round1:xilov-savum-tidix -round1:xisev-bibyp-suvex -round1:xuzoh-karoh-kyrix -round1:xesog-tovih-dybux -round1:xukif-gebar-gazyx -round1:xerag-nones-banyx -round1:xihog-gabas-bigex -round1:xepog-nudom-cegix -round1:xibet-vakid-calyx -round1:xodiz-gorak-rabex -round1:xipem-sunyb-fucex -round1:xovot-bavot-hihox -round1:xezom-nirik-vypix -round1:xikok-bavos-lucix -round1:xuleg-lagog-muhux -round1:xofad-dyleg-lygax -round1:xobiv-cakyf-gigox -round1:xokis-nized-vunyx -round1:xinid-kihip-zitex -round1:xogov-ficep-zulox -round1:xohik-bamem-detyx -round1:xedef-sifah-ledax -round1:xeses-dybel-husax -round1:xomeb-citum-pirix -round1:xubav-faneb-nubux -round2:xidas-fytyn-tivyx -round2:xukid-gofyd-medux -round2:xihag-byvik-sykex -round2:xukam-geker-dezox -round2:xerip-kedyb-ganux -round2:xirec-kadek-fitox -round2:xokov-fatul-sovex -round2:xumep-bikon-rykux -round2:xusif-kinat-rypyx -round2:xuled-kafig-sabyx -round2:xozob-hazim-banox -round2:xufec-nibet-lylux -round2:xirag-hobot-vebyx -round2:xuhos-feriz-cidex -round2:xezeb-zahuk-fymix -round2:xuned-hesuv-nemux -round2:xesih-negov-rehax -round2:xocat-gumaz-sozix -round2:xerot-zekum-vahix -round2:xifeg-zegec-fonex -round2:xoces-cumyk-ravix -round2:xosav-vamyg-pabax -round2:xevog-rilem-pymux -round2:xunak-todot-hepox -round2:xociz-cudip-cebex -round2:xumeg-mupek-hasox -round2:xorav-defyg-lutax -round2:xikaz-higob-lokox -round2:xesih-divar-sahax -round2:xugof-zygev-sulyx -round2:xoget-hucuv-dacix -round2:xuhor-hihed-mavyx -round2:xudin-gisod-mipax -round2:xumaz-lovaf-tylyx -round2:xoreg-zipig-lulax -round2:xisot-ceveg-bupax -round2:xohiv-zusit-cahox -round2:xeban-hugus-zifix -round2:xotag-bunek-kulux -round2:xupac-cusur-lurex -round2:xisic-kybes-pitox -round2:xekad-cihat-lozex -round2:xugiv-vupyg-vupax -round2:xufib-helib-vadex -round2:xunec-kypen-gicex -round2:xevol-pifig-hifax -round2:xusid-polim-lysex -round2:xecah-tevul-desux -round2:xobad-vafud-rucix -round2:xehim-dogef-zolix -round2:xumik-vaneh-curox -round2:xevet-ligub-cefex -round2:xivaz-belor-musyx -round2:xumeb-syvuv-canex -round2:xizag-vupyb-mylex -round2:xovib-pogud-menux -round2:xofig-buhuc-volax -round2:xicad-pevyk-pisyx -round2:xuram-tybev-kepyx -round2:xogog-gerur-cizex -round2:xuniz-fykoh-ganyx -round2:xukos-nepid-sytax -round2:xenar-kogog-fufox -round2:xipok-zugir-dapax -round2:xukek-hycic-nibux -round2:xilaf-rafet-cidax -round2:xuvin-bafyv-minix -round2:xirik-vapyl-falyx -round2:xehen-cobif-tezix -round2:xurav-puvav-vurox -round2:xitiz-guzes-kirix -round2:xotip-gocam-lufix -round2:xivaz-huseb-lunix -round2:xetan-tufys-filix -round2:xekol-ribet-netex -round2:xilad-terib-hymax -round2:xudag-bymal-horyx -round2:xetiz-harys-dizax -round2:xidoz-zyfar-fibax -round2:xubin-tised-mobux -round2:xikin-litaz-dodax -round2:xunek-gacib-rezux -round2:xuvat-vitog-divax -round2:xorak-tacor-nubix -round2:xupen-bydon-cyvix -round2:xopar-kuhet-sorax -round2:xemeh-catyt-myhyx -round2:xosos-fufih-dyhex -round2:xizem-myheb-dynox -round2:xoliv-cafan-hynax -round2:xukig-duhol-tihax -round2:ximig-potiz-rozyx -round2:xegoz-mipav-dobax -round2:xiriv-mamyt-lakax -round2:xoheh-basub-kylux -round2:xeriv-vuzyc-rosox -round2:xutid-gyzic-fydyx -round2:xirop-temyz-culex -round2:xobil-fulyg-tohax -round2:xilih-pupem-manix -round2:xudil-kifuc-mydex -round2:xenog-tegav-sonux -round2:xikas-dibyd-volux -round2:xocak-nupus-docyx -round2:xenig-hesyr-dobox -round2:xivoh-haloh-sagax -round2:xehed-bykan-puhex -round2:xurof-fusad-fuhex -round2:xovas-tafan-tytox -round2:xosip-bicoh-devyx -round2:xiceh-fenih-fecox -round2:xopim-gukir-nerax -round2:xepar-nofef-cahox -round2:xetot-guref-takyx -round2:xemov-bimim-mytax -round2:xigoh-vilac-curux -round2:xepaf-fakos-fezex -round2:xolol-sonog-gopux -round2:ximep-pyhul-begax -round2:xutir-kocof-palax -round2:xegon-tivip-besix -round2:xecis-midyt-zifyx -round2:xitop-kohet-fetex -round2:xinom-ronep-lipax -round2:xelad-nifyg-decyx -round2:xudem-pynor-hifex -round2:xidil-betac-kukix -round2:xofak-mogob-huzyx -round2:xocik-tubeb-nocix -round2:xedez-sutip-sebux -round2:xusir-pipip-pohex -round2:xokof-vagor-nacax -round2:xirov-nifep-bugox -round2:xekes-kobat-tibux -round2:xivin-zukiv-zufex -round2:xevot-fefib-fasyx -round2:xegif-sitig-puhux -round2:xohes-kyhag-cyfex -round2:xesez-nupur-nylux -round2:xobeb-fyteb-selix -round2:xizot-zisir-cilix -round2:xereh-gybuh-sapux -round2:xevip-picas-zomux -round2:xotas-vohal-culux -round2:xifok-zobam-tofix -round2:xovol-fuzyc-nesix -round2:xetev-zasam-vepex -round2:xovel-zapyh-bipex -round2:xizof-mogih-fadux -round2:xuciz-vilus-vukex -round2:xifiz-hebic-dutax -round2:xores-pyryc-lumex -round2:xenar-lopem-hupax -round2:xuket-gimiv-calux -round2:xidon-vukig-bifyx -round2:xorem-belyd-bezix -round2:xorac-palil-desax -round2:xetot-voziz-metex -round2:xezes-colib-furox -round2:xonet-vyfib-cazox -round2:xudik-synut-hanox -round2:xetov-neguh-midux -round2:xokod-vuzal-botex -round2:xenem-boseh-fygix -round2:xudif-pemet-movyx -round2:xekor-gymuc-nypyx -round2:xuboh-bubip-rovyx -round2:xosis-novyv-gytux -round2:xisaf-difil-puhux -round2:xeroz-tikit-cogax -round2:xibaz-foryk-cimex -round2:xomat-dyder-suzox -round2:xibal-kiled-gobox -round2:xufip-fogeg-mumax -round2:xedoc-delam-humax -round2:xebac-vipag-nunox -round2:xevis-zenic-dicix -round2:xenid-hyfot-curix -round2:xebil-veboc-lokyx -round2:xufid-virin-hutux -round2:xoser-vekag-kabux -round2:xoket-dolun-vumix -round2:xinah-zuguv-nebox -round2:xuriv-gybyp-tegox -round2:xobom-ledyt-tyzox -round2:xumiv-bepik-sulyx -round2:xikid-risym-divax -round2:xibac-hegol-culex -round2:xogag-fobad-vugox -round2:xesol-myrym-legix -round2:xubad-bugon-gohax -round2:xokon-bybod-zezux -round2:xepas-cecuz-kobex -round2:xofec-herav-pymox -round2:xozim-kasyt-gybyx -round2:xidol-zycer-benyx -round2:xegac-lupan-lasux -round2:xupab-legum-cetax -round2:xolon-nibiv-dekux -round2:xibim-duzoz-zylex -round2:xefib-refim-vysyx -round2:xovid-muzym-pygux -round2:xihic-sahuh-zigux -round2:xegoh-sidyd-vuhux -round2:xugaf-zicon-madex -round2:xefec-bygah-pugyx -round2:xicoh-pyvur-tohex -round2:xihaz-fypod-lifax -round2:xegob-mifez-nivux -round2:xurob-tebac-dasux -round2:xivel-pupeh-nanax -round2:xefaz-deguc-lakix -round2:xogeg-sanic-rigex -round2:xiron-nafet-pabax -round2:xesok-gepet-kybex -round2:xikob-dydac-kagax -round2:xopon-hevad-lonox -round2:xikel-penif-dytyx -round2:ximaf-bitav-vagux -round2:xinak-dapov-mozox -round2:xukos-bukib-pasox -round2:xifac-zukuh-lifex -round2:xorat-furym-zazyx -round2:xifab-ropub-metox -round2:xufit-muniz-nodox -round2:xinip-kupun-nucax -round2:xuhat-zudur-secax -round2:xovov-kymag-terox -round2:xevic-setud-pedex -round2:xupab-kyzof-legix -round2:xovek-gumin-pohox -round2:xugat-fepyb-lygix -round2:xosil-nenik-rufox -round2:xifir-fuhed-bofox -round2:xokar-mipyc-delyx -round2:xufoc-fabed-zumax -round2:xigan-movec-vuzex -round2:xefab-dudam-radyx -round2:xufaz-hehuc-kuhax -round2:xenat-mykic-tykux -round2:xefiz-fyvuc-vuhyx -round2:xehid-zyzur-gedux -round2:xutan-bahot-cahix -round2:xeriv-veneh-hazux -round2:xilin-cedop-macax -round2:xefic-lagyv-mepyx -round2:ximir-nalim-lezyx -round2:xerab-zymah-vizax -round2:xivef-lesuc-zolex -round2:xibek-rafym-fubix -round2:xeter-fumul-dehex -round2:xuvan-fyvyl-rylox -round2:xefah-cugyn-repox -round2:xeveb-gacyl-hemex -round2:xurih-moher-mogux -round2:xodos-basyr-cygox -round2:xeneb-loryf-lafax -round2:xupev-liryl-pifex -round2:xosal-cihys-lebox -round2:xocoz-tufud-panix -round2:xufob-vypar-nekyx -round2:xudov-loded-pelyx -round2:xecif-gydyt-hecox -round2:xiped-cazyl-ledox -round2:xihag-cykuv-fydix -round2:xepot-rotut-rapex -round2:xinip-hugop-lobux -round2:xilig-livof-pahyx -round2:xolof-kynub-bimox -round2:xibek-hubyt-fybux -round2:xipot-pobok-cucox -round2:xibev-fyrev-punax -round2:xuzer-hekos-dyrix -round2:xesof-lufuf-sumux -round2:xogiv-batuk-sokex -round2:xifoh-vunan-helax -round2:xivov-vapyh-hagyx -round2:xiciz-nipyd-mezox -round2:xepoh-vekor-vybux -round2:xodez-pypuv-zunyx -round2:xoseh-hylih-zisax -round2:xikal-fysuf-fymux -round2:xeriv-fifok-mirox -round2:xodef-hodit-tifax -round2:xigan-nadal-befox -round2:xuvod-garas-cotax -round2:xuris-gityl-vinox -round2:xemeb-tyzez-kelyx -round2:xedeh-mohog-remux -round2:xikoz-zyzis-vadox -round2:xucez-pivil-vipox -round2:xizog-rurep-turyx -round2:xisas-dydib-vasex -round2:xunin-tufec-febex -round2:xikap-cibud-dycax -round2:xecen-dahor-molux -round2:xumov-kicen-tabyx -round2:xetag-lypuh-fanox -round2:xilak-bipah-kybox -round2:xovah-kilid-zagex -round2:xezeb-rybim-lepyx -round2:xukop-lovug-sogex -round2:xitev-micyf-zigux -round2:xupoc-tygol-cacyx -round2:xeref-kilyc-nigex -round2:xeheg-vutuc-rodex -round2:xopem-lytyz-mozex -round2:xokig-dageg-zevax -round2:xeces-vanel-ledax -round2:xufav-lozov-mucox -round2:xulic-vagim-hokyx -round2:xupid-zalan-fasox -round2:xenos-zicur-bopax -round2:xozal-hyvih-lupox -round2:xinav-kegep-rigox -round2:xusok-tovit-hidix -round2:xokol-hepak-sosix -round2:xevim-zirub-hupix -round2:xivab-gycar-kuzex -round2:xuhep-kagih-gifyx -round2:xorar-hafur-dymyx -round2:xotip-zupym-rokox -round2:xezez-gesem-turox -round2:xebel-dotuz-fukyx -round2:xeser-tycan-kapox -round2:xipis-tefuv-hilyx -round2:xelem-zyfaz-typux -round2:xemod-tumur-zodox -round2:xogis-momiz-cydux -round2:xeced-cukok-kulux -round2:xevah-sucun-mybux -round2:xumon-mikop-focux -round2:xofif-kyvuf-legax -round2:xoson-dazor-vepyx -round2:ximed-caveb-holix -round2:xohov-lagad-byhex -round2:xuvan-cusob-narox -round2:xufam-biruk-semux -round2:xibol-kyron-gutox -round2:xoten-cunib-hykox -round2:xizal-mabod-setux -round2:xutic-bazih-bykux -round2:xehib-dyhyh-kodix -round2:xinot-lymil-syfyx -round2:xuzer-tyduf-tufox -round2:xufob-govyl-bofex -round2:xipad-nopyd-gesex -round2:xodoz-citen-cabox -round2:xotas-lotyp-buzux -round2:xevic-tizip-cupyx -round2:xinan-lycyb-govix -round2:xovom-zisuv-zitax -round2:xepop-zisuf-fyhyx -round2:xokac-gygom-vobyx -round2:xulag-davus-cezyx -round2:xosif-hobep-kifox -round2:xudet-koton-kemax -round2:xuroz-sebub-hufux -round2:xicof-cezic-mylex -round2:xehir-pamyc-muzax -round2:xunoh-latip-cylox -round2:xokis-tyzum-lynux -round2:xehit-rigaz-kukex -round2:xidil-tiher-gazix -round2:xirac-mikyn-kizix -round2:xevik-kudim-zurix -round2:xozin-mahep-ramux -round2:xokin-rudig-zunox -round2:xevak-simes-sohux -round2:xufav-todup-civux -round2:xosep-kinup-lapix -round2:xebor-debav-bulux -round2:xecim-buriv-fobox -round2:xiceg-hatok-gypex -round2:xicef-rodic-bipox -round2:xeboh-sefel-nolox -round2:xudob-cihoz-kysox -round2:xikim-vapyt-pipox -round2:xehov-revav-suvax -round2:xipod-bafal-sekix -round2:xemig-licem-himex -round2:xemoz-vivic-dofux -round2:xesim-zoniz-rizix -round2:xitot-venud-bekix -round2:xigaz-penog-rirux -round2:xulec-fypon-kidax -round2:xodir-movog-sirex -round2:xozad-kykaf-pebix -round2:xegos-lobys-zegox -round2:xipif-daped-ryfox -round2:xidoc-rylif-pylux -round2:xuref-komag-nityx -round2:xedom-socud-pevax -round2:xogen-gafyr-zecux -round2:xidos-menit-hobix -round2:xufem-vudir-sohex -round2:xuziv-nazip-kopux -round2:xevos-dekam-pycax -round2:xepeh-nycyc-kydux -round2:xelim-gisok-zelix -round2:xulic-sylan-hozix -round2:xutoz-pybob-kuhax -round2:xuvot-munag-zemix -round2:xisel-cygem-hucax -round2:xepev-kasof-kipix -round2:xepec-zytyv-zepox -round2:xekev-nagim-cilux -round2:xeloh-bibob-mivox -round2:xesoz-bosub-byfox -round2:xeril-vuhym-manox -round2:xecid-zucuc-barox -round2:xomev-zazar-mumox -round2:xurip-tipuh-hilex -round2:xutec-kycon-zazex -round2:xipac-recif-tykyx -round2:xolid-kahet-fitox -round2:xunof-kisuv-fatyx -round2:xiliv-nykim-bosox -round2:xenoz-sitap-bunox -round2:xolac-luhig-sybex -round2:xifab-buvad-rycex -round2:xikoc-sumop-mezix -round2:xedot-pabon-vanix -round2:xunos-bosip-mysux -round2:xomec-zahur-bavyx -round2:xupez-vebaf-kevax -round2:xetin-bibav-dihux -round2:xicoc-fegos-polux -round2:xenas-mibuk-bokox -round2:xonab-vykis-cinix -round2:xumot-peryl-gykux -round2:xorer-dorak-tonex -round2:xotiv-rubit-zulyx -round2:xumil-pelyl-nelax -round2:xulin-tacyr-lykix -round2:xediz-nocog-fozyx -round2:xehez-cakid-pihox -round2:xotaf-hycoc-mekyx -round2:xohek-hagys-ratex -round2:xupak-bakiv-relyx -round2:xehav-lyfim-cytox -round2:xetos-mycop-refix -round2:xufor-bevem-kamux -round2:ximim-dyven-vizax -round2:ximin-hazud-kymax -round2:xuzim-dyrag-kugex -round2:xidab-terol-vafex -round2:xekoc-teref-typox -round2:xigom-zypob-tazax -round2:xedam-sytyd-vacox -round2:xuhit-garuz-tudux -round2:xodos-pefeh-tucyx -round2:xocin-kolid-kenex -round2:xulib-lityp-mihax -round2:xococ-tizez-pocex -round2:xifal-henul-karax -round2:xevon-bydoz-pakox -round2:xobak-rimid-zerax -round2:xelep-supad-mysox -round2:xinog-dotat-hocyx -round2:xuhom-vodir-febex -round2:xutof-vovap-sydux -round2:xinec-cakic-rosex -round2:xunal-pocak-dyvix -round2:xekeh-hobiz-nagux -round2:xifit-cynak-lilex -round2:xulob-ceryc-kubox -round2:xugor-gazug-ludax -round2:xusoc-zyzut-lityx -round2:xocam-patyc-ricex -round2:xegon-motog-pebyx -round2:xotap-casul-tytyx -round2:xusok-cupaz-gumox -round2:xefel-manor-synax -round2:xivop-senis-hasyx -round2:xibah-lilec-birex -round2:xurop-sisig-nilux -round2:xutab-hucuh-molex -round2:xitak-givoh-mukex -round2:xemad-rurac-cylux -round2:xipik-sytup-ginex -round2:xugav-pavek-duhyx -round2:xikic-cubip-kocax -round2:xusor-movuz-gikex -round2:xicef-dekyn-nabex -round2:xemoc-vynul-kupyx -round2:xerel-hyhov-nacux -round2:xeboc-pylog-sakox -round2:xemid-rymad-momyx -round2:xicad-borot-semux -round2:xuvon-moves-pagax -round2:xipiv-sazig-nifyx -round2:xumoz-pytin-fisix -round2:xigaz-voden-datex -round2:xikal-fulir-hetux -round2:xodeb-vebez-mecex -round2:xutis-dunor-pimax -round2:xevag-fygan-zozox -round2:xufot-pakum-cusex -round2:xekit-redil-rufax -round2:xehep-kekib-gysax -round2:xidat-puviv-zimix -round2:xefis-sutuk-virox -round2:xubiv-vyhup-nesox -round2:xudoc-sykyt-lavax -round2:xucos-vozuv-rupax -round2:xuhep-rymes-ryzix -round2:xutir-zegih-nehox -round2:xekop-bifyf-bocax -round2:xocol-fonat-suhax -round2:xemen-dyfun-dunix -round2:xefek-dosyc-fimyx -round2:xelak-sokon-kyvex -round2:xozin-pipok-mamax -round2:xitid-moges-docux -round2:xuget-zeryf-sedax -round2:xurir-zipym-nolyx -round2:xelid-cynac-lyrux -round2:xeral-fyhyz-dogix -round2:xovot-viguh-busyx -round2:xumev-nenoc-pidux -round2:xivin-sizev-sakyx -round2:xezah-mumir-gekax -round2:xohir-vovyl-gysux -round2:xitaz-vazak-lotex -round2:xeneg-vinab-helax -round2:xenad-kezov-tyrax -round2:ximiz-cynyb-fohax -round2:xohol-gucab-fumyx -round2:xorit-davyd-cyhox -round2:xuzec-tires-rusyx -round2:xuces-dozah-vykyx -round2:xucit-tycuc-rehax -round2:xemib-dyfuf-zydex -round2:xokil-lyfyt-gydax -round2:xodoc-kekuv-rokix -round2:xozov-docol-bamex -round2:xikag-situl-robex -round2:xemof-dakur-rotax -round2:xonin-mybub-tuzex -round2:xopeb-sazud-hulux -round2:xotic-hyvar-gonix -round2:xezip-fimur-bihyx -round2:xihar-vozuc-funex -round2:xiraz-fikir-niryx -round2:xufem-menar-barux -round2:xuvoz-girul-sufox -round2:xitoz-mobeb-nygix -round2:xobit-pamiz-hibax -round2:xipem-rolik-ludix -round2:xicog-fiker-timax -round2:xitab-hacyg-kisyx -round2:xilok-lylop-gunax -round2:xubif-malod-gusix -round2:xufih-piryl-rypex -round2:xeroh-panap-bufox -round2:xiris-typek-tamex -round2:xezeb-kagiz-dogex -round2:xihag-cuten-lihex -round2:xerev-suzuk-kekix -round2:xuhil-febim-konox -round2:xucac-luhib-pocix -round2:xipir-mumef-rilax -round2:xikak-nomoz-busux -round2:xunam-licob-nefax -round2:xefaz-rahyv-kegex -round2:xemeh-gicif-lotox -round2:xuhih-tiryg-muzax -round2:xusik-nuhen-kagex -round2:xuzim-nagol-zofox -round2:xucev-lelyn-tudax -round2:xidac-finyf-micix -round2:xunek-nyvot-volyx -round2:xodas-dyseg-zyhyx -round2:xusac-riluz-tefox -round2:xucel-konat-medix -round2:xehoh-parez-licex -round2:xufic-nytag-bifix -round2:xorit-ziher-fukux -round2:xuleh-mydac-limex -round2:xitir-gures-racix -round2:xufog-hytog-lesox -round2:xezid-lydot-kycax -round2:xocer-mysid-cyvux -round2:xeper-hinav-cadox -round2:xonet-pypos-sidax -round2:xemad-nalap-comox -round2:xocot-sohog-dosux -round2:xotef-sihot-ganex -round2:ximim-miryh-zopyx -round2:xegon-ragit-kyvox -round2:xebad-lipuk-katox -round2:xekin-tycot-focux -round2:xenar-homet-todax -round2:xitov-tovab-visex -round2:xevam-romat-tucix -round2:xoloh-sadus-vyvyx -round2:xunes-duzev-rikux -round2:xetet-vezus-nebyx -round2:xupon-zazon-rynix -round2:xirif-dozys-bapyx -round2:xokok-takuc-nofyx -round2:xipof-fevic-cetux -round2:xopep-nefep-zobex -round2:xuhol-pezuh-lylox -round2:xomos-cevup-culex -round2:xupim-litob-zemex -round2:xucis-lonom-sakox -round2:xumem-hybys-dumyx -round2:xucap-matac-micyx -round2:xonem-gyneh-nazyx -round2:xugin-megof-hefyx -round2:xeral-pydif-kodux -round2:xilot-gehys-nivax -round2:ximoh-tageg-ditax -round2:xifob-cedyv-cafyx -round2:xocov-buzak-mefux -round2:xelas-kocef-kofex -round2:xodig-gumyt-nizex -round2:xurol-kuzak-lycax -round2:xucim-vyson-mikyx -round2:xices-lonig-makex -round2:xovel-pifud-bikex -round2:xocel-venyh-lufyx -round2:xobic-bihep-rycax -round2:xinas-luzoh-gafex -round2:xenev-capyr-zogex -round2:xelal-tytib-kusox -round2:xidev-taziv-bydox -round2:xedaf-nados-kocyx -round2:xufeh-cokib-pihux -round2:xikiv-zufed-mafex -round2:xicem-veruv-bazix -round2:xukit-vovas-zifix -round2:xunif-fyvog-bymax -round2:xusiv-sohyc-cenux -round2:xofet-lekon-gadix -round2:xeroz-ravid-typex -round2:xukef-hymeh-huzex -round2:xudif-dineh-sagyx -round2:xokoc-mumir-byvux -round2:xohih-dufug-rehyx -round2:xocef-cunyt-pafyx -round2:xodag-nufyt-pibix -round2:xureb-fykoz-bofix -round2:xokep-palod-cirox -round2:ximiz-palel-vygox -round2:xenes-pupyf-cumyx -round2:xupaz-culam-ruvix -round2:xopil-gazum-mydix -round2:xerim-catab-bemix -round2:xotet-daniz-sufix -round2:xiheh-zekut-suzyx -round2:xosak-fubeb-kybix -round2:xesek-riluf-rygyx -round2:xirib-sunak-ditux -round2:xodel-defah-hulex -round2:xeger-kofoh-nagyx -round2:xenog-lusac-bivyx -round2:xerin-pomic-suzax -round2:xudit-rodop-hitix -round2:xukil-fisel-gudyx -round2:xihaf-lafiz-luvax -round2:xufoc-zuzul-fedox -round2:xesan-rebub-pifax -round2:xunik-movut-zepyx -round2:xoton-gelyn-vuzux -round2:xohib-vucud-topix -round2:xutos-dizuh-mykix -round2:xurip-hilas-lucix -round2:xuzeg-hyroz-hupax -round2:xibic-bykyv-mifux -round2:xehil-bilyl-garax -round2:xobad-sypov-cinyx -round2:xodim-danuz-ralux -round2:xelos-fafyv-betox -round2:xerak-zypav-lomax -round2:xukic-vesyc-fohux -round2:xuzok-kykog-favyx -round2:xedol-lykyk-zymex -round2:xekep-fezov-bivax -round2:xosab-kucyd-sutux -round2:xopap-kufys-gohyx -round2:xegin-folul-kepyx -round2:xopen-hebef-sasox -round2:xuvop-risum-tepux -round2:xenif-gebad-kitax -round2:xofog-zarab-sonox -round2:xidoh-synez-tecyx -round2:xuzaf-dikus-sycyx -round2:xevok-bycup-sybex -round2:xovoc-nutuk-zovax -round2:xulin-zyzaz-pycex -round2:xuhag-movun-zisux -round2:xozag-domoz-nomax -round2:xives-pufud-silyx -round2:xopom-girab-solex -round2:xefak-sysyg-revux -round2:xobin-katav-besux -round2:xozar-myrez-fubyx -round2:xofaf-navyc-nunix -round2:xesal-cepol-dedyx -round2:xivaz-hyzih-nicex -round2:xibik-bylov-falyx -round2:xigov-naham-cylex -round2:xorov-zybyt-divex -round2:xuzir-finuz-hybix -round2:xikal-raced-lagax -round2:xepib-digop-mipux -round2:xizam-gobyv-tasex -round2:xideg-zihok-huvax -round2:xunid-cutun-sovux -round2:xosir-nicah-rypix -round2:xekod-rumub-lazex -round2:xusaf-huvov-vazox -round2:xemas-bitac-vasox -round2:xidor-polis-bupex -round2:xisok-dypif-kovyx -round2:xokec-zuseb-gomex -round2:xukof-nenur-macax -round2:xegir-kukyk-bifyx -round2:xedig-kihek-tehex -round2:xiger-nukep-nubix -round2:xemoh-gepir-nazex -round2:xihes-minok-remux -round2:xukag-bydez-tedix -round2:xomic-direp-homux -round2:xifik-zobof-dezix -round2:xokiz-romin-nukyx -round2:xuzom-cipuz-rofex -round2:xucas-degab-zubix -round2:xuliv-cypov-gitox -round2:xodod-fenoc-zusix -round2:xerah-zihik-nomix -round2:xifoc-cebyv-pazux -round2:xifev-vubam-ratex -round2:xodom-vykiz-kitex -round2:xedab-vakop-firux -round2:xoget-dazeb-vupix -round2:xiroh-vesup-gyfux -round2:xopot-sigaf-samux -round2:xupap-titot-vymex -round2:xiges-torup-ryzox -round2:xotol-ceneh-rihox -round2:xonem-pyrof-vyryx -round2:xobep-selam-nudux -round2:xicek-fefis-hahyx -round2:xuzer-kihir-vupox -round2:xezag-rimyt-ditox -round2:xozot-gohut-kunox -round2:xokep-momyf-rycix -round2:xepig-mesip-rebyx -round2:xocep-capob-pofax -round2:xozam-daker-zupix -round2:xipap-raced-kibyx -round2:xutif-recos-sopex -round2:xuveb-tuved-tibax -round2:xoses-zeruf-gerix -round2:xitib-kugul-bofyx -round2:xupec-giziv-pybox -round2:xifoh-hevec-kivex -round2:xebis-gycyn-samax -round2:xineh-zabiv-bykyx -round2:xetot-gotyr-zipyx -round2:xivop-lomec-norex -round2:xunef-hisep-sinyx -round2:xehoz-lypyz-lybyx -round2:xeved-leveb-nizux -round2:xutef-senir-nilyx -round2:xurat-dudeb-hybux -round2:xuhaf-dumyh-colyx -round2:xozos-bebyr-fulax -round2:xumib-laluv-redex -round2:xuhef-zezuc-butex -round2:xizep-kokot-dylyx -round2:xurad-taduh-detax -round2:xivoc-sidyv-lenax -round2:xivev-sikul-lazux -round2:xisas-gefuz-borox -round2:xinol-zefab-bicix -round2:xepol-sunal-genax -round2:xozab-pakyz-cadax -round2:xetop-nihas-fapix -round2:xefov-norah-fivex -round2:xuden-luvyb-vovix -round2:xumep-sekyz-covux -round2:xefen-vigof-zinyx -round2:xodop-lepav-bizox -round2:xeteb-pozek-kylox -round2:xesal-suzik-micex -round2:xitec-gyluh-dulex -round2:xopat-kalun-kezyx -round2:xubob-pocyb-gesix -round2:xuras-tumed-valyx -round2:xolot-nanez-huhyx -round2:xesoz-nipyk-relex -round2:xipik-bocik-bokux -round2:xekon-kuduh-fikex -round2:xofiz-nonuh-pelex -round2:xokip-raref-kyhux -round2:xenib-dacyd-vezux -round2:xomop-hyvyp-posex -round2:xofac-vulim-tebax -round2:xodip-pohes-cocux -round2:xizik-mulun-holyx -round2:xunat-cykit-telix -round2:xivap-sygob-colax -round2:xenad-vafuc-fakyx -round2:xinor-vucol-canux -round2:xerob-furym-lohox -round2:xovam-pucuz-zyzax -round2:xukin-pypad-picyx -round2:xereh-hasig-dapex -round2:xucan-bykof-negux -round2:xecos-konog-simax -round2:xitef-kovim-kizix -round2:xenaf-mivur-sikex -round2:xipoc-tykal-hunax -round2:xeziv-bafic-masyx -round2:xeniv-bodec-tusex -round2:xosab-nunyn-devax -round2:xezib-vyrud-cegyx -round2:xutah-saken-mocex -round2:xenen-rafad-zipix -round2:xovil-ryzam-todex -round2:xukem-tohep-terex -round2:xehed-calis-bipex -round2:xevav-zozuf-kosax -round2:xelih-fucis-kityx -round2:xibim-tipyc-gapyx -round2:xilap-melef-pahix -round2:xizor-zinoc-cacax -round2:xinak-fezyr-hudux -round2:xezil-medok-cifix -round2:xufev-nydot-ganax -round2:xipoc-namak-robux -round2:xuzoz-kityp-gadex -round2:xemin-nidob-fusix -round2:xigac-forin-gamix -round2:xopec-pysul-zypex -round2:xudef-bugan-bupux -round2:xumor-rakyv-lapux -round2:xiper-vozyr-dahox -round2:xezeb-kifit-pilix -round2:xeden-vucus-degix -round2:xizoc-kuvin-zigyx -round2:xukif-vubis-catix -round2:xemod-nufos-sakix -round2:xegam-huryv-novyx -round2:xebel-guhok-napyx -round2:xubim-byzul-tadux -round2:xolok-gileb-tusix -round2:xizar-cilel-zunux -round2:xehop-zasog-kacix -round2:xokig-bofaf-fegox -round2:xupis-mokum-bocex -round2:xomal-rovaf-gukix -round2:xovez-purih-kakax -round2:xofol-kicid-havix -round2:xidih-lehir-fokux -round2:xeces-vepeb-husyx -round2:xirin-fubol-kanux -round2:xedah-lyhik-pinix -round2:xinef-cacac-pigax -round2:xibog-kybet-tasux -round2:xiseg-zineg-tozox -round2:xecad-venel-pubyx -round2:xitec-hivun-bakax -round2:xurok-ramak-vylox -round2:xomeh-zatoc-nirox -round2:xifol-lapac-nevox -round2:xucal-pinas-nozax -round2:xutel-nypig-nohix -round2:xelam-fobed-mihyx -round2:xibim-fanar-myrox -round2:xehiv-lemyn-pylox -round2:xudab-borog-lydax -round2:xufis-relag-fukax -round2:xucob-hecid-cimex -round2:xilif-tukac-lubix -round2:xudip-lutal-lovux -round2:xuham-pudip-lupux -round2:xiror-pizic-mulix -round2:xuhis-dabig-batox -round2:xohap-vabaf-litox -round2:xodav-kesyt-dudax -round2:xoken-cotip-debyx -round2:xogez-bered-sygox -round2:xurim-votiz-gubux -round2:xobak-bugam-kubex -round2:xohon-silys-gutix -round2:xenor-dabyn-tycex -round2:xemah-canav-higyx -round2:xusic-kyfar-lisyx -round2:xezis-gafuk-kihex -round2:xemob-fumad-sacix -round2:xodov-tabyn-pygox -round2:xogag-zonit-lypyx -round2:xusin-sikah-zikex -round2:xipig-fupob-videx -round2:xumam-fonyn-pukex -round2:xicap-nitit-tuzex -round2:xonav-tucot-hufyx -round2:xekir-kamop-sipix -round2:xuzah-typyk-gidux -round2:xizaf-huzum-zacix -round2:xopef-nodyl-nozex -round2:xokeh-hybit-midox -round2:xodah-kineh-tedux -round2:xukam-gifug-nyrax -round2:xidok-sipec-hivox -round2:xugoc-pobeg-vugux -round2:xebam-nyhiv-mukax -round2:xoged-nykol-tocex -round2:xevez-mecid-fipix -round2:xotod-zidov-tatix -round2:xepil-kunop-tacex -round2:xelas-pocul-dipux -round2:xoteh-zypes-dutyx -round2:xihar-sodeg-fidux -round2:xudot-muryt-tamax -round2:xuped-somuh-putix -round2:ximac-kyfop-lizox -round2:xonoh-fyzyr-motix -round2:xepop-husit-sufex -round2:xumek-syces-mapox -round2:xupiz-nytus-sofex -round2:xusic-zyteh-gafex -round2:xeneb-fatom-dezix -round2:xepam-cidyd-mehyx -round2:xegiv-mysef-pynix -round2:xehah-fecyc-rofix -round2:xinoh-sogul-buzex -round2:xotod-zidef-tugex -round2:xekez-guvel-lazex -round2:xotam-gacen-bosix -round2:ximiv-kubob-tubux -round2:xehon-fosyk-cunax -round2:xosod-regip-zatyx -round2:xebiz-kedir-tazux -round2:xecoz-cizof-zufix -round2:xufeg-fepet-kakux -round2:xenoh-hanih-furux -round2:xefig-lobat-basox -round2:xemeh-dafiz-nenax -round2:xihov-livud-dygax -round2:xekir-badam-petox -round2:ximop-narab-zydax -round2:xebad-gilom-minex -round2:xises-hykyb-mazox -round2:xoros-gurac-zorox -round2:xuged-pyned-dirox -round2:xupog-huver-pepex -round2:xifib-bygod-nihix -round2:xudot-pozas-gepex -round2:xirin-bibos-nebyx -round2:xufel-rogov-vazox -round2:xikos-fuket-dukex -round2:xilil-regec-nymex -round2:xebod-lyvut-fusax -round2:xopih-divyb-corix -round2:xifoh-dunyv-docox -round2:xogol-zakuk-tucix -round2:xerif-guguf-fedax -round2:xihav-sozap-delox -round2:xuler-korol-rogux -round2:xosef-fetyr-fatex -round2:xusig-tezyn-dykux -round2:xodac-tonyb-salex -round2:xizir-cicym-zysyx -round2:xefah-bezyd-pakux -round2:xomop-fukob-gekex -round2:xitas-sisus-lisux -round2:xohag-holam-lovyx -round2:xuvet-gyvim-hyrex -round2:xucat-luson-todix -round2:xidap-guvyb-feryx -round2:xevem-hydyz-cygyx -round2:xuheg-cezuk-fyvox -round2:xunop-hynum-begex -round2:xenim-dysef-bodox -round2:xugih-vutys-fuhex -round2:xomiv-zepef-zalux -round2:xobek-hecil-vynex -round2:xufob-resef-mutix -round2:xufov-veteh-vohyx -round2:xedav-gufib-navux -round2:xober-dezeb-cimyx -round2:xosas-kihep-dudyx -round2:xebes-sobog-pysax -round2:xivic-fibyc-levox -round2:xenor-megyd-surix -round2:xokib-makul-cigyx -round2:xigag-gufyd-volyx -round2:xufik-tycoh-havax -round2:xocik-bifed-monux -round2:xigeg-pacaz-kycix -round2:xufit-zyryl-gacox -round2:xivor-becef-facox -round2:xomeb-kuvos-govox -round3:xobof-ficod-dysax -round3:xikol-hapab-funax -round3:xedop-fikuf-solex -round3:xozoc-tubam-derix -round3:xuzop-gytim-natax -round3:xitok-bygac-zobix -round3:xosed-rylec-razix -round3:xutin-hytel-gogox -round3:xelat-pagab-hivox -round3:xekof-zebab-cuvux -round3:xedes-vacyp-ripax -round3:xugiz-zocen-bitax -round3:xuvab-rosum-rodex -round3:xokak-dudid-tesyx -round3:xuhih-hakoz-sufex -round3:xezog-sonys-zezax -round3:xoded-zoliv-cifox -round3:xikef-katim-burax -round3:xodim-rerih-fulox -round3:xelag-fyvil-mudex -round3:xebiv-kotef-tazex -round3:xonap-vomin-vuzux -round3:xorep-biteh-zufyx -round3:xudid-simuf-givux -round3:xezoh-lekez-barix -round3:xezot-kebin-rykyx -round3:xusev-fetof-kypox -round3:xeram-mymob-suzex -round3:xegod-lydal-gesix -round3:xokid-dozev-pofix -round3:xuzef-rifes-cyvix -round3:xocot-mogyf-defox -round3:xizov-tobun-sigux -round3:xipic-dutil-kasox -round3:xicad-dytol-pyfix -round3:xorih-kuluv-kikux -round3:xohit-norop-lucux -round3:xelaf-gifep-tolix -round3:xesod-zifon-tyzox -round3:xovel-mymim-hodax -round3:xodet-lamyd-syhex -round3:xemoz-zukev-kidax -round3:xucic-rizyb-hodux -round3:xived-zavad-cyrux -round3:xufor-dokut-galix -round3:xorih-hagur-zikyx -round3:xilah-hotog-lepyx -round3:xelin-zudim-ruhox -round3:xugal-codat-nunix -round3:xibak-vedop-vegix -round3:xecem-lihas-togox -round3:xelav-rykec-rygyx -round3:xehok-letyk-sycax -round3:xecid-giced-zeryx -round3:xirif-mubad-fapix -round3:xodib-pahud-nutox -round3:xidim-hukoz-rulax -round3:xosel-gasav-hukax -round3:xufin-kepot-cunux -round3:xuzan-letyv-lykex -round3:xogar-gelas-hefux -round3:xesel-cadyp-kifex -round3:xozic-vohas-pekix -round3:xideh-fahak-kadix -round3:xuvoz-mebid-hilux -round3:xekar-lizev-fafex -round3:xukob-rupov-nedex -round3:xulec-dyvyb-tylox -round3:xefil-zytib-kosux -round3:xulez-rybiv-mekax -round3:xipit-dygyl-porux -round3:xovic-kygas-tasyx -round3:xusal-butik-gitux -round3:xepac-nunad-fypux -round3:xotic-kyrap-nulyx -round3:xokek-mufyc-bobex -round3:xurit-nafop-vazyx -round3:xogap-guzyn-dytyx -round3:xemid-notag-rukex -round3:xefar-kigun-kunyx -round3:xodot-zugig-mapux -round3:xoveh-cosib-robux -round3:xelik-zimer-hizex -round3:xudic-vupec-vyrex -round3:xibok-penof-ranax -round3:xifah-vucas-bivex -round3:xucat-bucaz-tepux -round3:xific-pukov-cimix -round3:xoseh-zinim-zahyx -round3:xucen-gupat-fumyx -round3:xenop-myfim-vopox -round3:xucif-bafag-tahyx -round3:xemat-sirun-nicax -round3:xonog-ficut-pamex -round3:xudac-rutyg-cosex -round3:xecef-syvad-vivax -round3:ximob-ducyd-bevux -round3:xodeg-mysez-hofex -round3:xivaz-cikon-gicix -round3:xilez-hosoh-dofex -round3:xodak-tavum-zecax -round3:xifem-nomys-nidix -round3:xekep-mofem-renux -round3:xizon-punas-mulox -round3:xidac-tufip-vepix -round3:xovez-nosap-libix -round3:xipep-kohor-guhux -round3:xutaz-butor-fenix -round3:xonil-dydyp-sevux -round3:xokir-fumec-cukax -round3:xogor-zetis-nihex -round3:xitop-fatuc-falix -round3:xodil-bodim-facax -round3:xotam-lydar-badix -round3:xibir-vosot-cufyx -round3:ximib-hivip-gilax -round3:xuloz-fociz-vylox -round3:xogif-nuzef-dyfux -round3:xofif-vymiv-pumex -round3:xepon-zonyk-sacax -round3:xubor-hucos-gelux -round3:xopal-kopat-tivyx -round3:xekik-mozin-menyx -round3:xuvof-nukyf-dorix -round3:xupef-vavol-muzux -round3:xileb-zaryr-figyx -round3:xifel-kobih-lenux -round3:xisaf-socar-razox -round3:xerec-cehul-fydux -round3:xeset-nulep-gysux -round3:xugim-hipyh-hykyx -round3:xozok-tepeb-hivyx -round3:xekeh-lylyk-hydex -round3:xogeg-hykop-lacix -round3:xedoc-kyfas-gudax -round3:xovid-vunuh-zilex -round3:xiral-rycap-desix -round3:xenek-hadev-kunux -round3:xehos-sekok-cypux -round3:xuzev-luzak-mytex -round3:xupop-bamum-zobix -round3:xumik-hohan-gobax -round3:xezik-pebev-civix -round3:xorab-lapuh-ryfox -round3:xogok-turyt-gehyx -round3:xipoc-poput-lonyx -round3:xibez-kyfyv-kafox -round3:xovav-bipos-silix -round3:xolob-roryg-bytyx -round3:xigat-veryb-kezex -round3:xotok-myzas-tasux -round3:xerot-dybop-cunex -round3:xilev-mobag-dozex -round3:xuhed-tysyr-cekux -round3:xufop-hakav-manox -round3:ximel-pynyd-tavax -round3:xeniz-maguz-zifax -round3:xered-govep-zonix -round3:xupim-ginud-hydux -round3:xocov-kyleg-toryx -round3:xobal-refun-kacox -round3:xeses-totis-fynex -round3:xurol-takaf-mesix -round3:xokav-lubop-fivex -round3:xudid-zubaz-vupax -round3:xifis-bacun-dolyx -round3:xirot-todyp-kicox -round3:xofiv-kegat-kyhox -round3:xibar-labag-bafox -round3:xikam-debat-cilox -round3:xisod-zibyd-kuvax -round3:xolor-vavym-vyhox -round3:xiker-kezof-gogox -round3:xidon-gogyn-fozex -round3:xicic-hogun-legyx -round3:xicol-kosig-danyx -round3:xelih-fedul-fimex -round3:xupak-nodis-pibux -round3:xidin-pibad-fucux -round3:xolep-bamaz-nocax -round3:xoniz-pegil-mapux -round3:xufak-zopav-subox -round3:xipat-lolyc-gurux -round3:xikor-tylop-mikex -round3:xevaz-turad-radyx -round3:xoreh-solor-nafux -round3:xubap-nekir-gedax -round3:xuheh-lalip-lanix -round3:xupec-birep-ganyx -round3:xizim-secoz-gedux -round3:xeper-zuzyb-menax -round3:xuhas-tyboh-bufux -round3:xofav-mapyk-fuvex -round3:xetak-guseg-puhax -round3:xupit-pehus-henyx -round3:xizom-vecup-syrex -round3:xohaz-kutek-vedix -round3:xeras-mohud-mebix -round3:xeric-zybas-narex -round3:xipec-cetin-ligax -round3:xiris-koder-curyx -round3:xosag-levur-lalux -round3:xilal-sazut-cekax -round3:xusef-digyz-pydox -round3:xizot-cinyb-gokax -round3:xebim-dafad-nudyx -round3:xuhil-tyviz-tubax -round3:ximic-kilan-facex -round3:xecen-pukup-bodix -round3:xufal-disil-lydux -round3:xulot-ruryl-kacox -round3:xosen-sibef-locux -round3:xugob-botic-tufix -round3:xezap-gibim-muzax -round3:xehis-ferif-nanux -round3:xotit-fohyc-simux -round3:xovih-rales-zabax -round3:xicam-genap-fekyx -round3:xetah-voler-rutex -round3:xilat-gyfiv-fegex -round3:xetoh-cakob-rycix -round3:xeden-fabis-cusux -round3:xepih-libac-cykix -round3:xirav-fuhul-dohyx -round3:xifip-fovid-lorix -round3:xofig-lotat-zyzex -round3:xozes-tavaz-tyrux -round3:xugim-havac-rilix -round3:xizos-forok-cucyx -round3:xilod-hikaf-visux -round3:xinis-divyh-pygox -round3:xoreb-celud-dybex -round3:xolok-zegab-cycux -round3:xodim-hodud-kulox -round3:xihic-detyr-zilyx -round3:xines-feres-repex -round3:xofir-takov-medax -round3:xuriv-sypif-lazux -round3:xepel-fihuh-tylax -round3:xolid-cazas-zupox -round3:xulav-banip-tidyx -round3:xogip-lifec-sonyx -round3:xovos-dovyr-nuvax -round3:xucac-pycam-vafex -round3:xeloc-guvaz-vopex -round3:xipif-pezum-kosyx -round3:xukev-taveh-sorex -round3:xosev-fizyn-hutux -round3:xebez-pyzon-komox -round3:xutel-darid-gobux -round3:xomoh-topir-hopex -round3:xikif-vovom-ryzyx -round3:xodem-cosyn-salax -round3:xezek-seleg-zamix -round3:xupon-hafav-nehix -round3:xedoc-kiden-comox -round3:xoger-deror-ruhix -round3:xefef-gygag-hehox -round3:xukah-lynoh-locyx -round3:xudoc-bufes-vadix -round3:xevih-bifyr-fipux -round3:xisih-kelyp-sobax -round3:xitet-nykak-fucox -round3:xitec-nudal-zifex -round3:xocor-hupyh-dehix -round3:xemin-satat-ducax -round3:xifek-velov-kafax -round3:xivig-lamef-gifex -round3:xulib-defip-vakix -round3:xulip-lasyl-tofox -round3:xules-vegaf-malyx -round3:ximis-gyfub-nifyx -round3:xuvov-musyb-kunax -round3:xinet-luhap-fizix -round3:xedak-radeh-zesix -round3:xiteb-podon-suzix -round3:xevif-pubov-zokex -round3:xogel-pifah-lytyx -round3:xogav-cunil-tifox -round3:xurin-dapyz-gedix -round3:xufik-todor-gogox -round3:xolih-pokom-zenyx -round3:xiber-sobof-gufux -round3:xerof-rocav-vonux -round3:xumeh-lymez-cefox -round3:xebav-nyror-hyrix -round3:xivem-sytyk-busex -round3:xuhir-karat-fucix -round3:xudar-bazyd-pakux -round3:xopik-sopuk-vucix -round3:xedoz-netom-vufux -round3:ximah-kecir-minix -round3:xuhiv-nydoh-volax -round3:xemob-nedut-lunex -round3:xufeb-tosut-zyfux -round3:xuled-benec-cybex -round3:xuzon-vybac-gynyx -round3:xezom-gokir-sotax -round3:xotin-sigen-nodax -round3:xukic-garof-catux -round3:xunir-himic-pelax -round3:xipep-lohof-fityx -round3:xefed-kiruc-sygex -round3:xuhil-bemeh-todyx -round3:xusik-necol-bukix -round3:xufal-kydev-lafix -round3:xomaf-syhid-vovix -round3:xifet-masoz-lydix -round3:xuben-botyg-pokex -round3:xecok-hihim-gagyx -round3:xideh-gehyp-cocix -round3:xukeg-lezug-pylax -round3:xirez-heroh-fuvix -round3:xibag-pymof-valex -round3:xufad-zedir-bupex -round3:xeced-kacud-rudux -round3:xomer-punuz-gedex -round3:xisec-fafup-tezex -round3:xutoc-fegys-buvox -round3:xehat-kelin-hyfyx -round3:xulin-sesyh-musux -round3:xocec-lykad-kakyx -round3:xigar-vatez-tobax -round3:xesen-migap-gybix -round3:xefil-hapid-tunax -round3:xevap-gumah-cypux -round3:xegal-bihoz-cuhox -round3:xumip-bucyr-kofix -round3:xibit-gefam-mubox -round3:xoced-zycob-gihux -round3:xuzic-vihyl-kefox -round3:xicem-dahub-bimex -round3:xupok-gagys-morix -round3:xireh-lyteg-rynyx -round3:xotog-parum-pegux -round3:xudim-sikih-hupax -round3:ximom-fesez-mytyx -round3:xurib-gipyv-gynox -round3:xohon-comyz-cibyx -round3:xupif-cohih-lutax -round3:xecet-duhaz-gylox -round3:ximas-hanod-pidax -round3:xudis-davak-gucax -round3:xurig-behom-nyrox -round3:xufec-vokil-tygox -round3:xorin-seped-kulix -round3:xoter-lakoc-desyx -round3:xuran-gafev-kudax -round3:xoveg-ferir-sagox -round3:xedoz-ciret-tesux -round3:xucal-vozag-pegix -round3:xunoz-vysep-sevex -round3:xibil-giher-fyzix -round3:xogop-milup-luhyx -round3:xozid-gazet-metax -round3:xulel-bykid-zehax -round3:xupat-higov-rarax -round3:xuzal-zikel-gulyx -round3:xufal-zokun-tabox -round3:xodav-sefiv-pycax -round3:xedec-botut-pibyx -round3:xekir-sazys-fusox -round3:xefol-hynen-vomix -round3:xoget-rarif-dikix -round3:xoted-potyg-nelux -round3:xevok-dacub-sadux -round3:xovad-hudyt-hecex -round3:xeviz-cehiv-zylyx -round3:xofar-vyryk-hamex -round3:xocaz-putag-nunax -round3:xifod-tycad-pesax -round3:xihic-kafiz-nizex -round3:xikol-volyf-volyx -round3:xogec-hymib-dirux -round3:xiraz-papit-pivyx -round3:xehik-rokol-sonux -round3:xipaf-pytas-lorax -round3:xicaz-nusuf-vufix -round3:xeher-tiboc-pupyx -round3:xolok-fylud-riryx -round3:xefet-takyr-gemox -round3:xirib-gydac-zitux -round3:xubog-vobuh-mucox -round3:xepan-bylir-rofyx -round3:xegas-nisiz-repix -round3:xibab-tefin-tovyx -round3:xudif-tedav-cumex -round3:xulom-gecog-ripyx -round3:xicop-sumel-forax -round3:xeded-rydar-detex -round3:xinil-tebyp-nitex -round3:xenor-migyz-pusix -round3:xuhoc-mepyr-hycax -round3:xofat-tepyd-nypex -round3:xives-fufih-virix -round3:xetav-kazab-vunox -round3:xibac-datim-mukox -round3:xurol-tonap-nyzox -round3:xenoc-pytyt-hymux -round3:xidap-nomyh-futax -round3:xutit-tados-hypex -round3:xibad-retyl-vumox -round3:xucef-dacaf-lilux -round3:xuzov-vesib-nolax -round3:xutah-relel-rurex -round3:xibeb-rypes-gokax -round3:xesih-rotul-vyvix -round3:xiraf-sypeh-kurux -round3:xumiz-zodir-vetex -round3:xeveb-rupob-nevax -round3:xocip-focet-gygux -round3:xutil-hogud-kidux -round3:xuhir-lekez-vidax -round3:xutic-mibap-tusyx -round3:xenem-pokor-hulex -round3:xopih-cubub-lynux -round3:xined-gulyv-hukax -round3:xihol-zusyd-hetix -round3:xezat-balur-sedix -round3:xusen-tesys-rivox -round3:xuzon-ficef-lyvux -round3:xomal-dygol-falix -round3:xemap-mesok-tynax -round3:xicat-binal-povux -round3:xigif-ribuh-zygix -round3:xegim-lomyp-kebux -round3:xenoc-vuhyf-kebyx -round3:xozir-cacip-lypax -round3:xisof-zagiv-kuzux -round3:xivag-kusik-begax -round3:xenav-kihal-rigax -round3:xucot-beson-sobex -round3:xegaz-mynah-cupix -round3:xutas-syvur-dicux -round3:xudop-nezec-nuvyx -round3:xivat-cytin-zozux -round3:xihes-hebak-fizox -round3:xenir-gonun-zapex -round3:ximil-nobyg-fatox -round3:xidog-solep-tecex -round3:xicep-dysib-pufux -round3:xopib-lorih-lonux -round3:xezaz-zopih-kanux -round3:xufah-cymil-tupyx -round3:xisas-figyb-vybox -round3:xikaz-gugat-gybix -round3:xotic-cipoz-namox -round3:xisem-sifam-dobax -round3:xihez-vybug-pifix -round3:xesep-kerum-sacax -round3:xudak-dyhur-puzax -round3:xopim-syrer-gusox -round3:xugep-vevuc-nafox -round3:xurol-rokas-vumux -round3:xiket-pofam-gabix -round3:xopef-volev-mogyx -round3:xogog-bohur-nidax -round3:xomoc-zivup-zelax -round3:xumog-gituv-kagux -round3:xokom-nonef-rulox -round3:xufic-sageb-rudax -round3:xuhop-takev-tufyx -round3:xetiz-rymaf-mimyx -round3:xival-fobac-mimux -round3:xupek-lyzif-lalex -round3:xocev-kycyd-bilax -round3:xuvih-kefop-symox -round3:xenez-kinis-bupox -round3:xebil-dobyl-gykyx -round3:xiced-motam-dunax -round3:xozon-gylyp-rikox -round3:xokah-nalil-cyhux -round3:xerez-dydoz-rumax -round3:xutos-logul-posex -round3:xonod-dovoz-mihox -round3:xihaz-muryc-rehox -round3:xiceb-vulak-mocex -round3:xipas-zynic-tizix -round3:xuniv-gihep-manix -round3:xinop-pomev-lavyx -round3:xemad-lutuk-vagax -round3:xetep-dymyt-nogox -round3:xoson-pyhed-vylox -round3:xetir-zehaz-pocox -round3:xubin-hohof-lifyx -round3:xogor-veniv-zacix -round3:xunol-bapiz-nymyx -round3:xofaz-pyliz-dobax -round3:xeliv-pyzuf-pufix -round3:xuzag-piril-puvax -round3:xitos-dabav-nemox -round3:xococ-bateh-vekux -round3:xomar-pulud-fenux -round3:xuvid-zimas-sezux -round3:ximoh-gizuk-dadox -round3:xilep-bizeb-nufyx -round3:xirot-zyhyg-vukux -round3:xehid-hamov-temix -round3:xebev-fyhot-zasex -round3:xegig-cutor-penux -round3:xulap-zubuf-rebax -round3:xepog-firyf-datax -round3:xeban-tezyr-nasax -round3:xusar-kelas-kanux -round3:xekob-gepal-curix -round3:xoreg-maged-bezox -round3:xelod-kofib-syvox -round3:xucen-canod-hesox -round3:xinag-lybum-bolex -round3:xibeb-sezav-husyx -round3:xehob-celas-cefix -round3:xoger-sozyh-lutyx -round3:xudog-byrog-gumex -round3:xucot-videz-panyx -round3:xuvok-mikyc-cedux -round3:xifok-vohyk-cisox -round3:xugil-lefel-tilux -round3:xitil-nepov-vacax -round3:xezic-kazuz-gamix -round3:xugis-fyfin-rylex -round3:xekin-tizan-fusax -round3:xegec-dupyc-sevex -round3:xesav-tofeh-cidyx -round3:xekih-zipet-bifox -round3:xoteb-tuvys-pirux -round3:xilev-necen-gehex -round3:xolid-horir-danex -round3:xizor-sodet-maryx -round3:xiviz-vydes-mecex -round3:xusar-sumab-pidyx -round3:xuvep-fokim-zadux -round3:xofid-vihal-gimex -round3:xenoh-kalos-bylax -round3:xukeb-vonuh-cyvex -round3:xufim-magir-ripex -round3:xikat-kehip-dozox -round3:xisem-fakas-nodux -round3:xocav-reluc-cudux -round3:xubig-cegyk-pusox -round3:xidag-bykir-pirex -round3:xunis-gafim-kupex -round3:xerem-nofys-cosix -round3:xevoc-myruh-parix -round3:xureb-vapul-fykox -round3:xovic-canyn-nylux -round3:xosec-cihot-vugix -round3:xufef-kapam-mepax -round3:xesas-fosab-vitax -round3:xehad-rubod-zugyx -round3:xinok-fakan-rupox -round3:xuciz-zolak-tolax -round3:xuvad-kykoh-subyx -round3:xobog-vycac-zitox -round3:xogat-vylef-banux -round3:xofan-nulor-genax -round3:xokot-lytid-dosux -round3:xidek-biref-gusix -round3:xuniz-hebar-cugox -round3:xuvef-nagos-mytyx -round3:xerip-secyv-minax -round3:xegoh-pifyd-gevux -round3:xonas-fukoh-tebex -round3:xeseg-tydem-rihox -round3:xunol-tuvyk-lymix -round3:xegah-sifab-rolix -round3:xedov-hatol-dusix -round3:xecef-nurum-metox -round3:xevoh-koben-budux -round3:xotin-mycal-kykix -round3:xehit-damiv-sitox -round3:xodif-ragum-vulex -round3:xezoc-pecib-hibex -round3:xizan-mezis-batix -round3:xobog-masyb-pycex -round3:xikad-tagoz-haryx -round3:xepid-nakuz-pymex -round3:xivev-cyhav-savix -round3:xigig-tyhev-hilex -round3:xekik-kuhah-bovox -round3:xodof-gasyl-sugex -round3:xilan-pysuk-fulux -round3:xelin-bires-basox -round3:xufeg-sukaf-nybax -round3:xonov-codyg-rokax -round3:xucol-fifac-duzix -round3:xutat-vyhev-kilyx -round3:xikop-dosun-rigax -round3:xunif-pyzub-tylex -round3:xolor-fohim-sifex -round3:xetal-lyvul-zosax -round3:xokab-zager-rylyx -round3:xinal-suted-bomux -round3:xenih-demum-cotax -round3:xehav-mefug-mecex -round3:xidos-nirit-vylyx -round3:xitis-nifev-secex -round3:xofaf-febym-kadex -round3:xekot-tonap-vetix -round3:xuhik-pucuh-revex -round3:xekit-gadez-mopux -round3:xozih-venar-gurex -round3:xofol-lypur-rizyx -round3:xegok-bekom-licix -round3:ximic-mivyk-nymox -round3:xecev-papof-hihox -round3:xedof-samam-cucyx -round3:xumol-hubup-rumex -round3:xekab-gazaz-monux -round3:xenok-mukac-hivax -round3:xivat-vyhys-nitax -round3:xuzir-tasyk-huzax -round3:xogal-mipif-vorox -round3:xofak-cuzen-pehux -round3:xedat-hynoh-gazax -round3:xedel-nagov-vecux -round3:xogib-zutih-fidex -round3:xehen-revyd-gokix -round3:xusig-bizes-runax -round3:xegeh-keleb-vohyx -round3:xokok-polur-lipax -round3:xudac-ryhas-tevux -round3:xipob-kekav-begyx -round3:xihik-gekub-difix -round3:xohit-vygut-reryx -round3:xipom-bobof-botox -round3:xetid-fekyl-vuzix -round3:xutip-luhod-zytox -round3:xubim-pumeh-gasyx -round3:xegav-kilur-tysix -round3:xitah-purev-canax -round3:xemiv-sahuv-zotix -round3:xomag-gylob-husax -round3:xelaz-cugom-nivax -round3:xubon-vyric-lihax -round3:xivik-kuhen-kylox -round3:xitam-fakud-gukax -round3:xevev-maduz-bobax -round3:xuleh-coruc-cutox -round3:xezoz-zyvyc-huvox -round3:xiziv-cifab-pygex -round3:xugel-hilav-dadox -round3:xugog-kebag-kodyx -round3:xisol-dolek-fakix -round3:xohel-kybih-penux -round3:xidad-cilan-fenax -round3:xupiz-fibup-canax -round3:xoniv-rufyz-zezox -round3:xileg-vibih-bapex -round3:xupan-zeguf-manux -round3:xekob-dytik-zecex -round3:xugig-byvap-sobux -round3:ximik-rimib-bihex -round3:xevot-dyhol-lufex -round3:xitek-fican-hepex -round3:xideh-bipav-dymix -round3:xecab-saguv-fofax -round3:xizog-dides-cinex -round3:xeriv-kyvuk-nicax -round3:xudoh-luken-gygox -round3:xipar-kudyn-kizax -round3:xerir-fycom-dapox -round3:xilon-zocam-falix -round3:xizev-satig-pifox -round3:xelod-penir-sosyx -round3:xugen-cicag-birox -round3:xomah-gukag-zegex -round3:xucas-zimol-rydax -round3:xiped-nohar-busyx -round3:xetim-ribal-bomox -round3:ximeg-syler-cytyx -round3:xocal-tusup-fenyx -round3:xopig-fyvon-hudox -round3:xesan-kanon-fymux -round3:xuzil-ranap-rykux -round3:xudof-hyfal-digyx -round3:xudil-cobud-kemix -round3:xokag-niduk-zydox -round3:xizob-telos-zucyx -round3:xiror-maryr-sagax -round3:xodir-dosak-gohax -round3:xovid-furev-vivux -round3:xunan-nuhug-cebux -round3:xelas-fivit-cecyx -round3:xeses-gyrot-dypax -round3:xiher-gihyk-pysux -round3:xepoh-mezem-livex -round3:xulec-cykuv-cocyx -round3:xekis-rokib-kacix -round3:xuras-nysuh-bybex -round3:ximec-hohog-mesex -round3:xehoh-voruf-vubux -round3:xehab-kugev-lazyx -round3:xikos-colob-sohex -round3:xutep-zyvar-zyrix -round3:xetat-rabum-nuvax -round3:xokig-tibub-tosax -round3:xicef-hebil-byrox -round3:xugap-hodok-nogox -round3:xihet-cakys-mydox -round3:xerav-sarun-kudex -round3:xebes-vitid-vynix -round3:xunem-riron-belux -round3:xefof-zabuh-herax -round3:xegec-lovol-fakox -round3:xefib-nukag-facex -round3:xekab-mofir-zybix -round3:xezok-fekab-gurux -round3:xupaz-sygil-nysyx -round3:xorin-ficaz-bygyx -round3:xifab-koran-tapyx -round3:xopic-fuduz-kutax -round3:xebad-ticyt-rybux -round3:xitem-mopug-fetux -round3:xobin-hudym-hecix -round3:xepar-movec-cytax -round3:xogar-tykoh-nacyx -round3:xikev-duhyz-rofox -round3:xezab-tipub-nabox -round3:xuhof-kylyl-cemax -round3:xugad-pukyv-hubix -round3:xufic-kifel-cumox -round3:xelak-zamyn-ripax -round3:xopag-fehyz-lilex -round3:xupir-vyvym-satex -round3:xinir-rozil-nusyx -round3:xizil-dyzad-kicox -round3:xunam-tohuf-bavox -round3:xesez-pylus-vecix -round3:xiret-hunoc-mukux -round3:xekah-fezeh-rupux -round3:xorel-bigav-pohux -round3:xonop-detir-cavex -round3:xorim-gapac-zipix -round3:xufam-soteh-lafux -round3:xizag-kusop-disyx -round3:xoced-revut-surux -round3:xeher-mehyn-bobox -round3:xevek-kurif-cidix -round3:xunic-sezyg-rykex -round3:xirar-dusac-guvyx -round3:xorep-nituz-mumox -round3:xonan-patez-bodux -round3:xerin-cyvok-mibix -round3:xenor-tagip-tapyx -round3:xucav-mugyf-dozox -round3:xozak-burop-lopyx -round3:xocis-dovad-vebax -round3:xotov-dimil-nolix -round3:xipag-medin-bufox -round3:xonoz-nudan-tygyx -round3:xukof-gisiv-lilux -round3:ximos-kityl-bibex -round3:xibil-hipet-mityx -round3:xufig-potom-lobax -round3:xeten-fetac-vitux -round3:xucic-bacin-genax -round3:xihig-gafeg-pimix -round3:xutir-kosog-depex -round3:xihol-zygos-celix -round3:xorot-pireh-melix -round3:xuvig-rilek-gatux -round3:xilok-fifyt-subux -round3:xilos-mabev-vymyx -round3:xitic-zucad-pufix -round3:xogaf-lotyp-zefax -round3:xeraz-lylap-nonex -round3:xibik-lepec-gisix -round3:xezat-cekyn-pogyx -round3:xulir-danih-ravux -round3:xilem-pygof-ticax -round3:xegib-pyzak-badax -round3:xucis-rusiz-vihyx -round3:xitos-gulum-fonax -round3:xidom-dilib-fuzix -round3:xemaf-bedul-nynyx -round3:xomok-pyser-cezox -round3:xipig-bigud-ratyx -round3:xufar-gycyt-votix -round3:xutoz-cuver-tadex -round3:xipas-zuzim-mosox -round3:xubeg-fepuh-tedox -round3:xuhoz-pomim-pidox -round3:xigar-ladem-gunax -round3:xohaf-gupyc-felex -round3:xitaz-sidar-mycex -round3:xibaf-bumyp-cudux -round3:xudih-pacid-fatix -round3:xocel-bamev-dakax -round3:xoges-himys-zupox -round3:xifep-gobac-fykyx -round3:ximif-hevel-bodux -round3:xodog-movub-pahyx -round3:xotog-mobel-tefax -round3:xopod-dapug-milax -round3:xesir-pesec-pozyx -round3:xedos-dogaz-tipux -round3:xuzib-felaz-dinox -round3:xiliv-nulik-gypix -round3:xezip-vurib-terex -round3:xucef-syzok-hobax -round3:xehah-tyrur-babox -round3:xinim-molum-dytux -round3:xifah-hucus-lezux -round3:xiref-ryfyf-gasux -round3:xovig-vyhon-cakyx -round3:xopoc-milog-gepox -round3:xudod-zymyr-fityx -round3:xenid-basit-fefox -round3:xosef-fanyv-pypux -round3:xepes-suceg-gerix -round3:xinev-vimyn-nokex -round3:xopok-magiz-cypux -round3:xefin-razem-fykex -round3:xider-konug-kipex -round3:xudan-betob-gakix -round3:xibom-rizav-sezyx -round3:xuvac-pohib-kimex -round3:xeloc-zelat-rityx -round3:xumis-vysyg-gugyx -round3:xosor-bibyk-denex -round3:xokom-cogem-sylyx -round3:xopic-mihez-gabax -round3:xolav-ragof-dulax -round3:xutid-bupes-fubox -round3:xetom-cyzut-gykax -round3:xucov-bofon-symex -round3:xenep-ralot-holax -round3:ximom-kedig-gohex -round3:xelib-tobip-homyx -round3:xofed-zosap-volox -round3:xihim-hotyp-kofux -round3:xokat-zicez-selox -round3:xugim-tukel-farox -round3:xikib-niryg-vipux -round3:xipoh-nopyb-pidux -round3:xizid-gyfog-fybyx -round3:xoter-pamap-sogax -round3:xuhep-hafin-cypix -round3:xeben-paluz-pizox -round3:xegal-begud-bibex -round3:ximes-zazen-ryhux -round3:xugaf-zasur-litox -round3:xemin-rulag-pemux -round3:xigaz-kucal-vafax -round3:xifam-gysom-belax -round3:xedof-lebuv-dunux -round3:xurab-pysev-rupux -round3:xeboh-cylah-patax -round3:xelor-tukup-lumix -round3:xunoc-kedaz-zirux -round3:xevad-mygeh-tozax -round3:xizez-kymin-horix -round3:xuzoc-heneh-kynax -round3:xogov-husog-pirex -round3:xehev-beruc-volyx -round3:xesar-gelys-robax -round3:xefer-bonak-hytux -round3:xurad-sobim-nyvox -round3:xineh-kipeb-hicox -round3:xomal-dunom-vepux -round3:xohas-cufut-femex -round3:xibir-nuzep-necix -round3:xofov-rysyh-curyx -round3:xekon-roter-degex -round3:xerel-napev-symex -round3:xuveh-basun-hykix -round3:xupip-socom-nukex -round3:xecim-vumuc-nizix -round3:xekol-cohus-volix -round3:xuhap-bynet-dynix -round3:xugah-niboh-cecex -round3:xipes-bitep-vucax -round3:xidor-didam-cyfyx -round3:xomem-toror-kahax -round3:xokag-gybar-sekyx -round3:xidan-merum-rymox -round3:xekas-lobid-duvix -round3:xofoc-mylon-pidix -round3:xitad-cynac-sizax -round3:xiliz-niduh-pisex -round3:xizin-kysen-rulux -round3:xufar-rebeb-zuhex -round3:xupab-nifos-bofox -round3:xuroz-gonuv-todux -round3:xonap-fugad-gipix -round3:xunen-zodec-zenax -round3:xesop-mobak-pyrux -round3:xikis-vekis-cohix -round3:xukod-holed-fymux -round3:ximep-cakus-zylax -round3:xefam-dovol-milux -round3:xetep-gabir-sugox -round3:xobib-myzat-cytux -round3:xezef-fygyz-purax -round3:xofav-buroh-zotux -round3:xugah-numol-zarux -round3:xuzil-gubec-lurix -round3:xemom-fadym-sudix -round3:xetal-dopyt-byhux -round3:xireb-boryb-mekix -round3:xurel-sogez-lydox -round3:xirir-cusor-popyx -round3:xisol-melez-pisix -round3:xedab-gitus-likox -round3:xeref-tazat-purux -round3:xepig-putir-dolex -round3:xugen-pufeh-kyzax -round3:xinim-bovyf-kygux -round3:xeseg-rygug-tyvax -round3:xopir-labif-melox -round3:xumil-sikyz-ganyx -round3:xegan-metor-hadax -round3:xubeh-varip-pozux -round3:xuboz-pehoh-fyrox -round3:xubid-difyp-hekix -round3:xigot-ropyb-sudox -round3:xisiz-nusel-zepex -round3:xunot-pyliz-nyhex -round3:xemod-setec-vugux -round3:xolah-parav-pibyx -round3:xecev-vycyk-dytox -round3:xirek-zyluz-decux -round3:xipos-didil-dasex -round3:xotap-korel-nudox -round3:xokic-kobel-garox -round3:xobak-cycyg-limix -round3:xenir-mibyt-vabox -round3:xinel-zazez-cotyx -round3:xiliz-rufim-sobax -round3:xufal-lezoc-disux -round3:xuved-vahin-hepax -round3:xisad-lacit-hunox -round3:xiger-nobot-nilox -round3:xifob-tudam-cybax -round3:xohan-rytum-kumyx -round3:ximos-dysus-gelox -round3:xulem-tutev-pynux -round3:xufac-lunim-lekix -round3:xumoz-piced-lizix -round3:xukel-polup-didax -round3:xosit-sukik-zavax -round3:xocon-dutyl-fedax -round3:xudag-rumen-fizax -round3:xutef-mibot-nahyx -round3:xogah-tysyd-pybox -round3:xenic-cezeh-pilyx -round3:xegav-pynyk-cutux -round3:xoval-dated-ditix -round3:xihen-bitug-dilux -round3:xigif-zovyg-refox -round3:xotet-burod-metyx -round3:xifoh-buvuh-cihux -round3:xikib-tazol-rovyx -round3:xegoc-denis-kyvax -round3:xifid-ligyc-sakox -round3:xobeh-typyn-zofux -round3:xefas-siger-sonux -round3:xirih-detem-vysyx -round3:xusam-tydym-golyx -round3:xihak-simyg-gugix -round3:xubad-zafah-cumex -round3:xumar-myhyd-refix -round3:xucan-susug-vodox -round3:xubar-dadin-hacax -round3:xifif-kacyk-kurix -round3:xorom-cyzeg-zytox -round3:xozef-zidam-felex -round3:xepav-kicib-pebax -round3:xozas-livod-dimux -round3:xupid-zyfit-valix -round3:xosek-hezug-lakix -round3:ximec-zidiz-zakix -round3:xesir-cylek-rebix -round3:xikis-kiraf-gigex -round3:xodec-mefim-sytex -round3:xuteg-bysor-sofax -round3:xemim-hanip-tysix -round3:xulil-pupab-pynex -round3:xomah-fonov-pumex -round3:xumav-fovir-tetex -round3:xobag-hagas-nohux -round3:xubac-rymuk-cucex -round3:xulor-desuv-topyx -round3:xifed-bobik-tyfux -round3:xolol-kicik-cupix -round3:xumid-hucen-gigox -round3:xoher-nopug-fafyx -round3:xumoc-vazek-tocux -round3:xubin-zesis-ryvex -round3:xufab-befeb-zogex -round3:xumoz-giciv-bavax -round3:xukor-zipez-pizox -round3:xumih-hyfon-cuzox -round3:xehal-nofut-rizix -round3:xehig-cufen-puzax -round3:xufih-ginul-rivax -round3:xefek-rykus-kygox -round3:xukeg-kazup-hyzax -round3:xemec-docif-botex -round3:xekip-deser-gitox -round4:xesas-dosis-fivox -round4:xobiz-pucok-nopax -round4:xukor-hutud-sumyx -round4:xonat-befur-papux -round4:xebif-mytok-zagax -round4:xicah-hynap-sesax -round4:xofek-gepyv-kedix -round4:xodin-vosys-rutux -round4:xukaz-heryc-nacux -round4:xemet-resyv-pirex -round4:xozop-galac-cadix -round4:xufar-cyhes-fasax -round4:xigap-rudih-funax -round4:xulir-rokyr-gilix -round4:xufab-goven-sisix -round4:xovam-nucyz-bevex -round4:xupez-tecuv-lasax -round4:xukod-disup-dugax -round4:xumoh-pekut-zonex -round4:xepar-rasib-kesox -round4:xeviz-myguk-sygox -round4:xuzep-zicis-lytyx -round4:xidod-lipur-hosex -round4:xoved-mokob-vasox -round4:xupas-leheg-galux -round4:xehov-hykyv-bakyx -round4:xorid-dateh-rudix -round4:xinec-sibal-hazux -round4:xipir-sefyb-korux -round4:xopos-vumed-tosux -round4:xukev-hilal-dyfax -round4:xecov-maher-bugux -round4:xetid-pyryc-fafex -round4:xozoz-zibyt-cazyx -round4:xuhah-feryv-hopax -round4:xelof-ticev-migyx -round4:xiriz-bidoc-fifix -round4:xopin-cyzom-cakex -round4:xevav-byvon-tebyx -round4:xeziz-vyzip-pybax -round4:xupok-terec-vytox -round4:xemal-puneg-zevix -round4:xedel-tozoh-zozix -round4:xidit-labap-dumax -round4:xipab-rerub-folix -round4:xoveh-civul-huvex -round4:xofok-hycyf-pyhox -round4:xehol-tutak-ryzyx -round4:xesig-zuzom-tadox -round4:xuros-lefec-zigyx -round4:xizik-rupyn-cylex -round4:xidaz-tagus-vyfix -round4:xotaz-likol-punax -round4:xubon-nyfef-cupex -round4:xecin-vecet-nizex -round4:xulef-mamas-lafix -round4:xokaz-hevun-kibox -round4:ximep-novan-sagyx -round4:xivem-sorug-fesax -round4:xohob-vogyv-nevox -round4:xekiv-difop-sevox -round4:xolef-conal-dorox -round4:xokac-demub-finex -round4:xubov-suhyp-vehox -round4:xodid-muhic-sykyx -round4:xiroz-bulyc-pyryx -round4:xefin-kenep-fehex -round4:xozoz-bekir-fatux -round4:xikod-picos-dabyx -round4:xugam-poziz-delox -round4:xunit-humaz-lorux -round4:xisal-faget-nebax -round4:xicoc-somur-tidux -round4:xekih-cerim-besyx -round4:xisaz-riliz-byfax -round4:xifin-zusef-nogox -round4:xofet-fokon-fomix -round4:xipaz-zuruk-fufyx -round4:xugel-lubim-nuvex -round4:xevef-homuv-lasix -round4:xisih-bifoh-gugux -round4:xisan-gopam-covix -round4:xonab-gesit-gonux -round4:xuhip-rebas-sobux -round4:xebez-tulic-tuvux -round4:xugic-hynog-zikix -round4:xukez-herez-gevax -round4:xudep-zatiz-valix -round4:xudik-casac-zyhux -round4:xogim-budal-duvux -round4:xofaz-zebys-vorex -round4:xugir-gydin-puzox -round4:xineh-nyfoz-sipex -round4:xolal-homev-gugex -round4:xizat-vycos-horix -round4:xohec-mahat-kevox -round4:xosik-gukoc-zagax -round4:xohop-lamak-nanux -round4:xudem-kubed-hybex -round4:xumat-cevuz-zuzex -round4:xezon-rucyc-kizyx -round4:xeven-mupus-gifex -round4:xesoc-refuv-lipyx -round4:xokad-fomyc-mufux -round4:xidic-togih-vosex -round4:ximoc-redab-pybux -round4:xeleh-hysov-fovix -round4:xutam-citir-ruzox -round4:xulah-vunum-bypyx -round4:xulit-sysoz-tirax -round4:xelal-coges-nokyx -round4:xosil-ronem-cyvyx -round4:xudiv-colyk-fisex -round4:xecec-muhuh-ryvex -round4:xuhor-tehim-cisyx -round4:xutis-recyz-vazax -round4:xisip-cyhyb-vymyx -round4:xinom-dabar-borax -round4:xifeb-vazyt-topax -round4:xocab-kemik-rorax -round4:xucit-zivis-muvax -round4:xokep-pyvaz-morax -round4:xomaz-zisif-cakox -round4:xevip-gycem-zovox -round4:xorok-fucid-micax -round4:xokas-zycom-tybyx -round4:xular-dedeg-mupex -round4:xetez-ryzys-pafyx -round4:xuref-vugig-pykyx -round4:xemas-pifep-revux -round4:ximiz-resil-tanex -round4:xizok-bokuf-bosax -round4:xibiv-fyleg-ninex -round4:xekic-licyp-pyfux -round4:xukop-fyhup-kifox -round4:xopas-gahon-fedax -round4:xofop-nivyc-pivyx -round4:xubat-disis-turex -round4:xosiz-tecen-vigax -round4:xesan-hutov-panax -round4:xusih-cezyr-dyhux -round4:xogam-vyges-vodyx -round4:xofis-tysud-figix -round4:xodob-motyd-kinox -round4:xicen-sytap-gyzax -round4:xogan-denuh-fukex -round4:xecoz-gener-hunax -round4:xohin-gofin-nagax -round4:xesen-dikyl-tabyx -round4:xevop-bitep-dazax -round4:xosep-genem-zytax -round4:xedeg-hamar-sacex -round4:xuvog-rinit-fezix -round4:xedin-magev-hybux -round4:xigef-sytag-zocex -round4:xobag-dutit-byfox -round4:xidep-voped-tobex -round4:xepov-gedal-hefyx -round4:xehaz-gahup-fifax -round4:xoriz-runik-sagux -round4:xomel-kosur-lavux -round4:xokor-habul-zozox -round4:xuhif-suvob-zomex -round4:xider-fyluv-fevex -round4:xoteh-muhyd-nynox -round4:xinis-nibak-gihex -round4:xules-tynuz-nyfex -round4:xeboh-gyvos-hosyx -round4:xogit-segar-zodex -round4:xogos-silyn-gutix -round4:xecan-caner-gehex -round4:xifet-pimil-filix -round4:xiriv-ryzaz-kyrix -round4:xuceh-sacer-herox -round4:xozip-gikyp-tosyx -round4:xuten-zipop-nubix -round4:xumik-gidez-nubox -round4:xenef-fofyd-mylyx -round4:xodam-losuf-locox -round4:xukar-torip-kytax -round4:xinon-zydum-cekex -round4:xumek-kirys-tibex -round4:xitap-zonyc-zamux -round4:xovim-roduh-lidyx -round4:xekez-nahal-labux -round4:xekes-gulic-byrix -round4:xikes-buhek-hegix -round4:xonen-rukam-sunax -round4:xucor-zalak-susox -round4:xupog-motam-nysyx -round4:xebes-dyrym-puzyx -round4:xodof-zavef-kufyx -round4:xofiv-dofef-nyvex -round4:xikad-zugah-bufox -round4:xebor-gicet-dipyx -round4:xomoh-mapol-bivyx -round4:xidak-gaseb-fogex -round4:xolag-vybur-nubyx -round4:xofav-hugec-lilix -round4:xorig-viseb-kocax -round4:xigec-fotun-cahux -round4:xozat-kemyb-zunox -round4:xigen-ducin-fimux -round4:xivoh-hatif-dolix -round4:xuvak-nyrut-cysyx -round4:xiniv-dymut-tukex -round4:xufat-safyk-vezox -round4:xerol-gosob-zygox -round4:xuzeg-suguk-bibyx -round4:xugat-nugag-nekux -round4:xikok-mohur-kesax -round4:xolit-bezys-vuhyx -round4:xutak-cesuv-mukix -round4:xokeb-sutib-latax -round4:xizer-pakyp-pucex -round4:xusof-nebyr-pylex -round4:xodab-falav-regux -round4:xotes-vyfos-sutex -round4:xozot-dydom-hagax -round4:xehod-telym-pysox -round4:xesap-gicic-cufux -round4:xecog-gupob-dutax -round4:xibar-hutyt-tizax -round4:xusob-pirer-popox -round4:xutez-cyrul-zakix -round4:ximit-nymug-surix -round4:xenon-mybap-donax -round4:xiref-sifok-visex -round4:xetat-pipen-vokex -round4:xinok-hemyb-kezax -round4:xeped-duroh-pibux -round4:xobap-metab-tizix -round4:xemet-hafuh-ryhox -round4:xugef-degor-zovox -round4:xunep-nimyg-ryfax -round4:xidag-kycoz-tepyx -round4:xebom-kehyz-vabix -round4:xifoh-bovyt-nisex -round4:xogov-kesav-punax -round4:xukif-sokih-fozex -round4:xipib-pibes-zenax -round4:ximos-zamom-lezax -round4:xidaf-tacys-mamax -round4:xoges-gydap-gamyx -round4:xefep-zedah-cupox -round4:xisen-nihic-tysex -round4:xefeb-patag-tukex -round4:xerik-zafuh-vekyx -round4:xipor-sotut-cadux -round4:xuvev-kyfap-lorix -round4:xuhal-folys-tarux -round4:xohiv-kovef-genux -round4:xesek-bezys-hilex -round4:xilig-sezob-sidux -round4:xugep-zahak-nifox -round4:xogol-satus-mygex -round4:xufez-mydip-romyx -round4:xocem-kulyk-vinux -round4:xelac-zenis-vyvix -round4:xelek-romel-relyx -round4:xoror-dyhez-zasix -round4:xubol-nahut-comox -round4:xogab-nukos-vozix -round4:xibor-dudoz-fahyx -round4:xovoz-fyvur-vupix -round4:ximob-fivid-bagyx -round4:xecas-lydin-cuvux -round4:xogec-kezen-vodox -round4:xigig-dogah-vorax -round4:xofin-casec-kygox -round4:xufes-nypot-lobox -round4:xecon-nabap-rygix -round4:xohim-relum-lomix -round4:xegid-vakam-hasox -round4:xivad-mofyp-kahox -round4:xesiv-zinyl-narax -round4:xidec-kyfet-tukox -round4:xubek-mobyg-pezyx -round4:xezer-goked-cyhix -round4:xodiz-muzat-vobax -round4:xineh-vuhuc-nefax -round4:xozir-rehon-kolux -round4:xoned-zulag-danax -round4:xicop-holuh-sygex -round4:xizor-vemob-sunox -round4:xizef-nilag-tehux -round4:xidoz-matar-dunox -round4:xulit-cucam-kytax -round4:xokot-tavuk-colyx -round4:xigeb-kofif-gicyx -round4:xekak-rynak-hehox -round4:xopit-fosom-tonux -round4:xunel-malis-ganux -round4:xesoc-zupyd-bokex -round4:xicer-saryf-vapux -round4:xodib-lilek-diryx -round4:xezoz-dyvid-nypyx -round4:xesih-gizor-cokox -round4:xinar-hakyf-mocox -round4:xusez-farab-nacex -round4:xuher-zufym-hemux -round4:xivaz-mubig-hotix -round4:xohop-kunem-zydax -round4:xetez-kaves-curux -round4:xucak-nomig-namyx -round4:xitez-vyvys-huryx -round4:xolih-cuban-vylex -round4:xeheb-bovem-gyrox -round4:xerir-pamom-mybyx -round4:xuper-dyror-nisix -round4:xesiz-hozyz-ripyx -round4:xuvan-buhif-totyx -round4:xefis-gevin-zygix -round4:xirib-mysuk-zobix -round4:xesop-cuvyh-kyvux -round4:xumed-tymef-tivux -round4:xinom-nabah-gelex -round4:xikof-gaber-cusix -round4:xuken-radam-sosax -round4:xusal-zeriz-lodax -round4:xeveh-niner-palax -round4:xosop-porac-pagux -round4:xuhat-vodob-virux -round4:xisit-kodok-vykox -round4:xitip-palug-dodax -round4:xogoc-tupob-bohax -round4:xopoc-sazip-gocex -round4:xelof-rahyk-povox -round4:xumol-fyvud-nurex -round4:xufat-rycit-zorix -round4:xozen-cocab-zamyx -round4:xonab-koges-rafyx -round4:xelah-pudir-mucix -round4:xipiz-nivuh-sigux -round4:xekar-zekam-dicex -round4:xezac-hunyb-bycux -round4:xunam-namug-birex -round4:xetan-rinar-nenux -round4:xovah-nunyd-citix -round4:xofan-nelah-lahix -round4:xilib-peleh-lyvyx -round4:xulid-tofaf-kitox -round4:xinab-fehat-dukix -round4:xuzif-tutup-canux -round4:xomeg-cyzih-hirix -round4:xurir-ravon-bavax -round4:xuner-pitab-kodox -round4:xozif-guzad-fimex -round4:xolah-nefyg-rihox -round4:xurib-lebop-revox -round4:xices-hevam-zivax -round4:xudik-kucor-pepox -round4:xelam-ryfiv-fegox -round4:xufoh-magyf-cifox -round4:xefid-vapir-rofox -round4:xotah-gadil-gygox -round4:xusid-nilin-tidyx -round4:xenol-vudek-herix -round4:xesoh-pyrad-ticux -round4:xuhat-syzin-topox -round4:xucil-vebet-zafex -round4:xuzoz-kuhyz-notax -round4:xepaf-tygag-telox -round4:xunit-nolyl-negex -round4:xesad-gigur-banax -round4:xerop-sineh-fekyx -round4:xodeh-dyken-rasux -round4:xebab-lolyk-zutax -round4:xekap-cuzed-zuhix -round4:xumed-cyfyr-mavex -round4:xomez-guhuc-sakix -round4:xefad-hazyg-lobax -round4:xocer-hopop-pymax -round4:xemic-tocam-kerox -round4:xuzas-sygan-rafyx -round4:xepov-kisar-zyzix -round4:xedih-fysuc-kavox -round4:xinab-defag-fumax -round4:xodal-buvyb-vugex -round4:xogob-hufat-movix -round4:xuneh-rupit-mufix -round4:xuhez-dazib-tirux -round4:xedip-gaman-gokox -round4:xepeb-rybud-mecyx -round4:xukid-nosuz-tumax -round4:xomas-varyc-lilax -round4:xizoz-ryram-mupyx -round4:xokom-sosup-kikex -round4:xukap-tuzac-buhix -round4:xosef-valif-gebix -round4:xifap-harus-kolax -round4:xerob-tiguc-ronyx -round4:xukev-mylat-lynax -round4:xipet-lipud-vokyx -round4:xocob-mafad-potax -round4:xunac-vebiv-cebix -round4:xipam-vekig-fapax -round4:xular-fycag-fabax -round4:xiteh-zenap-zypox -round4:xocin-corit-honix -round4:xigam-kuvub-fupyx -round4:xuhoz-gyrys-hovox -round4:xudod-dyrag-kigox -round4:xorim-hereg-dycax -round4:xonig-hodum-zumix -round4:xogol-ryrog-lifex -round4:xecic-cahyr-nesix -round4:xulem-coven-penix -round4:xerot-kucek-sasyx -round4:xeseh-fekyc-tohox -round4:xunam-fumaf-gisux -round4:xulop-hoced-holux -round4:xehid-ryhul-kecyx -round4:xopik-bifan-nemux -round4:xuzam-negif-felex -round4:xemog-sihaf-kobex -round4:xekoc-fazif-pymex -round4:xurar-rutuv-hynex -round4:xeros-veres-rapix -round4:xozez-botof-gatyx -round4:xesic-mekar-gigex -round4:xupam-zinun-kucix -round4:xefif-zugun-rekyx -round4:xupet-gilyn-zavix -round4:xugek-taper-hetex -round4:xikim-tilon-hutyx -round4:xineg-fypaz-posox -round4:xofes-napab-mamex -round4:xehir-gamih-myzox -round4:xenil-kepyb-burix -round4:xuvam-dapat-cofex -round4:xofes-zyfer-vemex -round4:xilet-pureb-cagex -round4:xigav-lacec-vomix -round4:xelal-ciluk-pemix -round4:xubeb-batup-dypex -round4:xevir-fonig-gafox -round4:xuvic-cucub-cuhyx -round4:xuhal-nysan-dorex -round4:xinik-vuril-tufix -round4:xobam-zaned-hunox -round4:xevav-gulov-zytyx -round4:xuzeb-lonup-lirux -round4:xuzom-viveb-totax -round4:xucor-riciz-caryx -round4:xolip-bahez-hafax -round4:xofez-gonur-hydux -round4:xuron-nukar-nymax -round4:xicel-vycoc-gecux -round4:xevis-vyrar-sepyx -round4:xulif-vedec-tecax -round4:xezef-vipyf-gomix -round4:xelem-vovem-hygux -round4:xocez-gedud-nalyx -round4:xufef-reduk-gyryx -round4:xufor-mokyv-rocyx -round4:xeseh-zaris-cylex -round4:xucib-sivil-zemux -round4:xibih-kunic-rudax -round4:xones-lumun-kutox -round4:xepir-kozyp-pacux -round4:xuhid-labih-cilex -round4:xidon-cyfup-kadux -round4:xotop-gytes-davux -round4:xozoz-ryhul-fehux -round4:xurom-zolor-nityx -round4:xonal-kibun-fecox -round4:xifab-didyr-huzyx -round4:xihak-nycik-relix -round4:xosac-cagif-nefox -round4:xurot-gonul-mirix -round4:xerez-gigyr-lafyx -round4:xuvet-sivyg-sybyx -round4:xofin-lahak-timux -round4:xodov-suhak-vemix -round4:xorab-cadas-kakox -round4:xerap-ravom-vahix -round4:xetot-sufad-padix -round4:xulah-mikuz-gynox -round4:xulaf-tyvur-racux -round4:xitis-lynab-husox -round4:xikar-gogeh-mikyx -round4:xubil-tapym-fihex -round4:xumeb-hofah-sumax -round4:xizat-rahoh-lofox -round4:xucov-navic-segyx -round4:xiliv-puril-gugux -round4:xupiz-milas-tehux -round4:xotel-ryhap-negox -round4:xifib-selub-bicex -round4:xifef-kator-picux -round4:xepal-bofok-fovex -round4:xukeg-suzig-kimax -round4:xedev-tagub-memax -round4:xizad-rutyl-kosex -round4:xupil-mafik-mesex -round4:xomah-tozec-nuvex -round4:xican-pivuc-rekix -round4:xomel-relyg-bisux -round4:xugem-kakop-tyryx -round4:xulih-kirys-nutix -round4:xigot-tudyl-ponox -round4:xehag-haces-lerix -round4:xozor-zubug-musyx -round4:xihim-tenyk-sukux -round4:xokag-lonus-penox -round4:xeval-nyhuz-pinox -round4:xudim-pukon-pidax -round4:xifiz-mokuk-fotix -round4:xeror-rekuc-lufex -round4:xipoc-hivum-sitax -round4:xokot-myhek-pocax -round4:xemav-gugyg-ribox -round4:xihac-dycip-fokax -round4:xupan-vavom-tegix -round4:xekit-finec-mynax -round4:xepiv-dydan-nusux -round4:xicos-zihud-lirex -round4:xezof-zanel-sehex -round4:xezac-hinol-zitux -round4:xonoz-benug-vagyx -round4:xipaz-cyvem-subox -round4:xulaf-ninyc-dakox -round4:xezal-ropul-vugix -round4:xufak-bezib-nizux -round4:xefis-dyheg-pobex -round4:xinel-vutub-mevex -round4:xoteg-gucuf-hitix -round4:xitob-kasyv-mepix -round4:xotad-gizon-putax -round4:xemis-vysuc-kigux -round4:xucip-fezef-nitax -round4:xotis-fezaz-tamyx -round4:xuhic-segod-legax -round4:xuhiv-fyhah-vemax -round4:xusih-cagyd-hatix -round4:xumah-cysag-vucix -round4:xezov-guzus-ryhex -round4:xeses-napom-tanax -round4:xebaf-kipyg-dozyx -round4:xevor-pyguv-cigux -round4:xemar-kyhit-tarox -round4:xofen-lubyv-sezax -round4:xidan-zumyb-cadox -round4:xepes-hydad-karox -round4:xetif-ditiv-pamax -round4:xopol-myvur-mytyx -round4:xenal-dasec-zohox -round4:ximed-kolic-hybix -round4:xumak-lituh-lahyx -round4:xikac-bocec-cedox -round4:xomoc-zekuf-sesyx -round4:xumit-vonos-fukax -round4:xulop-gycor-myhex -round4:xuzin-biryr-synex -round4:xehes-bisyk-gapex -round4:xovom-zyfuk-dynux -round4:xetal-rebut-gezyx -round4:xigel-rased-cosex -round4:xihet-nuruc-munox -round4:xegim-soryv-zefex -round4:xugov-ginod-zegex -round4:xifag-sedon-tinux -round4:xutok-hiryg-munex -round4:xokem-lezar-tolax -round4:xihod-lyrah-bydox -round4:xigin-humuz-cidax -round4:xorit-ryfan-gyvex -round4:xigid-ladep-dobax -round4:xifik-monuk-razox -round4:xegos-lumus-sybox -round4:xesib-mupov-modux -round4:xonab-cimid-rofex -round4:xezak-nisac-lifyx -round4:xutap-kunuk-bimux -round4:xemec-rehuh-fevox -round4:xokel-peruk-ducyx -round4:xemal-tesyl-tybox -round4:ximat-cadoh-denyx -round4:xoniv-kycen-nybox -round4:xerop-goket-tevux -round4:xoben-megic-sagux -round4:xomol-cakyh-ropux -round4:xilib-podys-kuvyx -round4:xenig-bibel-zilux -round4:xikod-dyvyc-typex -round4:xudac-sylur-dobux -round4:xunes-gaced-mufox -round4:xuhim-havub-gehux -round4:xover-zydyp-rigix -round4:xudip-hitav-patux -round4:xopav-sugop-zecox -round4:xesod-gubep-nyhex -round4:xemeg-hagul-febox -round4:xesoh-hugod-vuhax -round4:xigah-nogoh-filyx -round4:xefod-gurah-fecex -round4:xotod-nedal-cedex -round4:xerad-zomon-nobox -round4:xevig-tovyz-curux -round4:xesil-humen-bicix -round4:xenaf-senub-gidox -round4:xocop-tisoh-rosux -round4:xemiz-kagud-ciryx -round4:xufih-defil-lucix -round4:xolic-halyf-havax -round4:xenap-ronyl-nuhux -round4:xufas-mosuv-cevax -round4:xofok-katet-rifux -round4:xorag-fuvoh-muvux -round4:xuceg-fazec-medex -round4:xifen-vahos-nynix -round4:xotob-regev-zatex -round4:xedid-zydig-sanix -round4:xekap-rycud-cihix -round4:xogiv-bopep-zekyx -round4:xokeh-livom-vadix -round4:xomos-rizut-zubix -round4:xirek-nyhen-vumux -round4:xidad-feden-bidax -round4:xenon-rinor-cybix -round4:xorah-fohil-fuzyx -round4:xuvep-sozyf-tygex -round4:xomar-bylim-nelux -round4:xodoc-viged-zogyx -round4:xohiv-sekep-pynix -round4:xunig-nokav-tibox -round4:xopin-kokit-becex -round4:xokok-raduc-nugyx -round4:xekak-bylun-sozyx -round4:xusod-mofyv-tykex -round4:xobah-luluf-fadix -round4:xozap-nomih-tuzox -round4:xudeh-canon-dizax -round4:xelib-zohul-fohyx -round4:xubol-remyp-rahax -round4:xevan-bidos-zypix -round4:xodac-voluk-hutux -round4:xozah-vyceg-cepox -round4:xutas-tykur-terox -round4:xevek-comet-zykux -round4:xetal-heloc-hazax -round4:ximiv-dasyl-ribex -round4:xifik-gytat-sopax -round4:xinaf-tyzug-lybax -round4:xelil-ririh-gekax -round4:xirek-sahic-codox -round4:xihig-hegan-hibix -round4:xulok-doror-mefyx -round4:xeson-nituc-sohix -round4:xonov-tiveh-nugax -round4:xefes-pyhib-budex -round4:xomek-suvom-hadix -round4:xugef-vecyf-litax -round4:xehid-tenar-tatix -round4:xihek-luvas-cyhax -round4:xenet-busit-gegux -round4:xohis-biduk-mimex -round4:xitep-cocif-nodax -round4:xekem-zivel-hucax -round4:xedip-lypuz-duvux -round4:xinen-byzad-hohux -round4:xidod-nores-fymox -round4:xuvip-vukah-fasix -round4:xicim-gacus-talox -round4:xezib-hilyn-mavux -round4:xoder-cufaz-molux -round4:xemab-bimin-hatyx -round4:xizod-nelat-cibex -round4:xobeg-babeb-nelux -round4:xepad-gydan-bymox -round4:xeceg-kyvig-senax -round4:xifiz-pozeh-tatax -round4:xeref-duvod-tupex -round4:xonaf-kukul-bydyx -round4:xezeh-tykof-lemex -round4:xecic-hylyp-kolyx -round4:xuked-zikub-susux -round4:xemiz-hocuz-sovix -round4:xezim-lyhyc-nubux -round4:xurav-cuken-kysix -round4:xohaf-byrop-zezix -round4:xezab-nyzeh-kehex -round4:xozis-puzyc-vabox -round4:xipel-dyfeh-lumox -round4:xigob-pimuc-canax -round4:xufaz-lefyd-gikex -round4:xizav-nyhen-nigex -round4:xeheg-konup-rolux -round4:xunop-cunus-livex -round4:xevas-dahoh-vetox -round4:xigip-manyt-rimyx -round4:xihaz-temom-sozix -round4:xuhac-poham-hozex -round4:xesad-lofof-cadax -round4:xozos-ryhif-gudux -round4:xopib-zydac-nepox -round4:xubap-firin-zybux -round4:xepon-zatev-karux -round4:xogof-myrep-pysex -round4:xezaf-mirul-pobax -round4:xilin-zizeg-cazyx -round4:xizim-kugum-cyvux -round4:xipah-babaz-nubux -round4:xucak-sybip-vofux -round4:xulad-kadyf-lukox -round4:xuret-hymeg-nycox -round4:xegoh-gepuh-tozex -round4:xunev-lakep-kuvex -round4:xedir-kysik-picox -round4:xibec-zydyn-kasex -round4:xobiv-sasel-sefux -round4:xikec-hitas-kubox -round4:xehig-pamoc-zohox -round4:xipif-komid-huryx -round4:xutel-nibif-cesax -round4:xifil-ludud-cunyx -round4:xotim-pocoh-pimux -round4:xovel-figus-gonex -round4:xumag-mekek-cusox -round4:xisov-dufek-gulax -round4:xivom-gypab-badex -round4:xokoc-kolen-luvyx -round4:xidir-nefyk-tefox -round4:xulap-tynav-bifux -round4:xehav-lurid-sacox -round4:xuciv-gyhen-temux -round4:xerel-zalih-pigyx -round4:xeror-dysog-cipyx -round4:xizod-nepen-guhex -round4:xenep-kylaz-colyx -round4:xipem-lecep-guvyx -round4:xurak-zegok-napax -round4:xoloc-tizeb-gobyx -round4:xorez-hokub-zihix -round4:xupez-vahol-lokex -round4:xucep-gefov-kugyx -round4:xopit-rutol-vibyx -round4:xepet-pevir-bomex -round4:xizad-duzuh-zegux -round4:xukoc-sinad-lolex -round4:xobes-fitof-symox -round4:xucod-nacaz-modux -round4:xufoc-bagyr-kolix -round4:xukin-cyhyg-duzox -round4:xenos-rotut-gasax -round4:xurob-vaned-lybex -round4:xicef-mypiv-hivox -round4:xekib-kucyp-honax -round4:xelem-zakyr-nobix -round4:xozov-voric-bezix -round4:xibeh-vyvil-rutux -round4:xizip-bukep-zamux -round4:xihog-rahag-bitax -round4:xizek-given-bopex -round4:xoroc-tyfas-dukyx -round4:xegeh-basuc-ramyx -round4:xelig-hocin-fekox -round4:xefaf-vidos-bolux -round4:xukaf-mocuk-nozex -round4:xesac-cuniz-visox -round4:xusic-pudyv-zynux -round4:xilip-zysoh-sabox -round4:xoves-zimer-kykox -round4:xepil-rufel-cimox -round4:xebos-pipos-rovix -round4:xidib-coryz-rykax -round4:xevop-pahih-zukox -round4:ximed-vedeh-helux -round4:xedon-supoh-lohex -round4:xugip-hisyc-vokux -round4:xikap-hipet-cufox -round4:xoheg-bylig-sulix -round4:xoceh-pakak-dapyx -round4:xehag-kagik-katix -round4:xeziv-ziryh-petax -round4:xitog-vuvon-gavix -round4:xepor-bulyn-gipyx -round4:xirak-lomar-sycex -round4:xurev-zityf-tuzox -round4:xozap-misof-kyrux -round4:xobar-rodod-varux -round4:xinev-vynov-vokix -round4:xozas-nudus-fubyx -round4:xeleg-kyryk-nyfyx -round4:xinob-gevot-fibax -round4:xobop-gadef-fatex -round4:xefiv-hyrez-mikix -round4:xivok-tucav-fupix -round4:xihez-banim-rorax -round4:xerar-didyn-pypax -round4:xidec-hyban-padax -round4:xeved-fezif-renix -round4:xubag-kodop-zosax -round4:xikir-bemup-gudax -round4:xumit-kohiz-padix -round4:xedic-nytyc-gunix -round4:xuhin-vetap-gonux -round4:xunid-cuguz-zubox -round4:xilaz-kusyz-gogyx -round4:xokom-hirer-vymox -round4:xugik-siviv-vyvix -round4:xilad-nateh-dylox -round4:xuton-vytyg-mebax -round4:xovar-dehab-tohax -round4:xetet-gonyd-cezux -round4:xokol-silyt-zazix -round4:xeter-molul-gucax -round4:xihin-moreh-tyzux -round4:xonop-dykob-govix -round4:xihir-lubit-zabax -round4:xunak-mopib-derux -round4:xefep-racib-mamux -round4:xigag-vugyf-hyhox -round4:xilod-dipyg-konyx -round4:xesas-toluf-lycux -round4:xepeg-cazed-tykix -round4:xogof-kumoz-fivyx -round4:xihic-fivod-lufix -round4:xogel-rupak-bibex -round4:xogoz-vezyh-telex -round4:xehok-finoc-vypix -round4:xoken-tamug-famex -round4:xureb-kusih-pefyx -round4:xifin-hacut-pocox -round4:xosov-sisab-fyhyx -round4:xibak-socyv-ganix -round4:xelop-kupuc-ruhox -round4:xedih-byfog-nyrox -round4:xeret-virag-pygyx -round4:xeper-hibot-sobyx -round4:xocad-sofoz-setex -round4:xuzin-cipym-lepex -round4:xoron-dovut-zohox -round4:xosor-habiz-dudyx -round4:xecip-bugag-conox -round4:xuron-zeteh-hytax -round4:xogec-cirup-dogox -round4:xohas-lazyg-vivyx -round4:xonih-vobop-nygix -round4:xipig-vadih-hokyx -round4:xizeg-dyvek-kizyx -round4:xuvec-mutit-fesex -round4:xefev-labih-nezyx -round4:xikib-guryf-zugyx -round4:xuzip-hubic-ducix -round4:xelif-lipas-lelix -round4:xosol-bumef-lybax -round4:xiled-caraz-mynax -round4:xugir-dymym-kykox -round4:xihap-miper-kitix -round4:xicov-gulek-cudax -round4:xozob-cecot-citix -round4:xemes-mupic-tuvax -round4:xezoz-bizon-furyx -round4:xitib-lureg-pebax -round4:xorof-dihar-hehix -round4:xecez-rufis-mekox -round4:xeket-tibor-hefax -round4:xubag-catuk-nolex -round4:xemov-mikoz-guhux -round4:xihib-sotem-dohyx -round4:xicek-sovuf-gorax -round4:xikoz-tozeh-letux -round4:xeber-zazap-vocux -round4:xonic-facyv-gufyx -round4:xefel-davak-sosix -round4:xefen-reryl-guvax -round4:xozic-fagaz-disyx -round4:xezek-fohuz-nygax -round4:xunof-gibys-pynux -round4:xigib-nicoh-zegix -round4:xesos-turad-pezox -round4:xegov-vynuf-henux -round4:xozez-zisym-calex -round4:xizoh-peton-myhax -round4:xenit-dumig-linox -round4:xofog-zykeb-tatyx -round4:xufes-segac-tagix -round4:xucol-timib-folix -round4:xivit-tagod-vekax -round4:xodog-vogim-zolax -round4:xocid-rikip-pegyx -round4:xikog-canan-sofux -round4:xuboc-libeh-sisax -round4:xovib-bytun-nypix -round4:xevob-ryzis-sozox -round4:xemec-kilon-lulux -round4:xocim-lygac-byhax -round4:xolel-fovaf-sapex -round4:xuzal-cecuv-nunyx -round4:xiboh-fyhol-gidux -round4:xopeg-tytes-palax -round4:xenap-tanak-gynox -round4:xenal-rubot-rukux -round4:xedes-mevun-pahex -round4:xufiv-ryluk-fifix -round4:xirov-zirut-pucux -round4:xobit-kepin-sofax -round4:xocod-zoved-rolex -round4:xufil-gucut-nuhux -round4:xeleg-kupel-bevix -round4:xocen-libok-telex -round4:xegir-fybot-zihex -round4:xunib-tomem-rebux -round4:xipol-paguv-bupux -round4:xuzav-lypyv-pedax -round4:xevek-fanes-nyfux -round4:xenal-vikam-sedyx -round4:xegom-vubet-kydux -round4:xizet-kyryr-labux -round4:xuzem-takih-lebix -round4:xefin-pyged-nehax -round4:xuman-vygof-tolax -round4:ximak-poveh-fubax -round4:xogir-huvyn-punex -round4:xovok-myvuz-dygox -round4:ximin-hosyv-cenux -round4:xudan-hotik-virux -round4:xiveh-pokov-bebox -round4:xopeb-ralum-zapax -round4:xemeb-mavef-nozax -round4:xolos-hosuc-copux -round4:xorag-lifyk-nalyx -round4:xirim-vyvod-tifyx -round4:xopam-tosuf-kotyx -round4:xozef-mugoz-kovyx -round4:xodir-vunop-nekux -round4:xumik-vigat-vemox -round4:xomak-zemuf-lynox -round4:xopek-fosak-sadox -round4:xuzip-sesog-kuvax -round4:xiken-harar-tyrux -round4:xubid-zagif-dusax -round4:xotoc-guhup-domix -round4:xovar-disyc-myzax -round4:xolot-sifuz-bidox -round4:xokam-zokan-ficax -round4:xovic-bahyh-fyfix -round4:xefoh-salov-catax -round4:xekaz-zikal-horox -round4:xibed-mynac-venax -round4:xifeh-lehuz-ridux -round4:xihos-gigaf-videx -round4:xohec-byson-fovyx -round4:xifac-bokiv-vecyx -round4:xilak-bikut-gapux -round4:xodan-zozep-gotyx -round4:xodid-kived-cybux -round4:xufan-gohep-duhox -round4:xibag-fekyd-gikux -round4:xevad-gosef-himix -round4:xenav-zelaf-sozyx -round4:xipet-lubom-zesex -round4:xuzoz-nazys-rovyx -round4:xuhab-raluc-cosix -round4:xebab-coluz-kugix -round4:xuvol-hehiv-mosox -round4:xikat-myzus-hivex -round4:xiver-fihyn-dukyx -round4:xezit-vuvyg-lucax -round4:xoliv-hutuv-dyvex -round4:xuzon-tufom-ripyx -round4:xebaz-gugip-zybyx -round4:xevag-nifeg-hynux -round4:xihel-lygeb-fetox -round4:xiris-gygyp-borix -round4:xidis-domel-fosyx -round4:xuhop-fivut-filyx -round4:xolis-vunad-cevax -round4:xeleg-cycac-kedux -round4:xeval-cizem-gosax -round4:xedel-sepiz-dykox -round4:xenag-terib-kepax -round4:xufoz-kukiz-mofyx -round4:xovas-zatad-fydyx -round4:xozov-domok-vobyx -round4:xozep-toceh-cegyx -round4:xobar-taboh-huhex -round4:xuhel-gehuh-kamux -round4:xigep-gunit-rapox -round4:xusal-vyber-sukex -round4:xopab-miciv-rabux -round4:xipir-momep-bocox -round4:xilog-muryk-nyfyx -round4:xicoz-nelev-nubux -round4:xogoh-modin-dynyx -round4:xufid-celev-zezex -round4:xiher-bopuk-bimyx -round4:xudop-tycug-kugix -round4:xebaz-fidev-mibyx -round4:xulam-nimal-munox -round4:xopev-vyryd-zolux -round4:xiger-gosyg-zazux -round4:xicit-dador-gykux -round4:xihav-ratit-hyhux -round4:xonal-posil-murux -round4:xukog-pubum-ditux -round4:xegik-nofys-cidix -round4:xumic-gefav-casix -round5:xeged-socyz-cahix -round5:xipal-keruf-nukux -round5:xutok-mifon-gigux -round5:xomod-sidoh-nizex -round5:xozof-giren-gefex -round5:xufid-zopun-simax -round5:xibev-pedis-limex -round5:xisoc-dobeh-favax -round5:xinit-myfyr-cunax -round5:xucok-bohuz-sadyx -round5:xisef-vehis-fozox -round5:xuteg-petav-syvux -round5:xutic-zetav-sarox -round5:xefec-tymyf-nycax -round5:xegov-luhit-locex -round5:xehak-subah-fusax -round5:xirip-codah-fuzox -round5:xivad-gikul-zetux -round5:xinop-rukyl-nonex -round5:xusos-nitaf-nysex -round5:xevim-lipin-turex -round5:xokam-micil-varix -round5:xodac-zakos-puzux -round5:xoved-tibuz-notux -round5:xusem-nibyb-fedox -round5:xosof-zityk-gimox -round5:xivef-ryfip-dolox -round5:xopir-cyhot-tybux -round5:xomem-boriv-bigax -round5:xepok-zodof-tirox -round5:xosod-gecat-ledix -round5:xivon-huziv-gemyx -round5:xurak-cisyf-vohix -round5:xusep-vafad-fibyx -round5:xofir-cocen-mylux -round5:xebar-tusop-gyvex -round5:xized-putal-nubax -round5:xerig-hamez-napux -round5:xosir-zitis-gilex -round5:xudel-kogaf-lotix -round5:xuzen-temes-debex -round5:xegib-kinuf-gigax -round5:xesav-nufeg-mahux -round5:xigot-cuzaz-dusux -round5:xipar-givyh-husix -round5:xugof-kiral-kabux -round5:xuheb-tunih-kehax -round5:xekid-nesic-tysix -round5:xolim-syzul-bagux -round5:xikav-fihuv-bafix -round5:xebob-gofyk-hisax -round5:xevig-vohur-rerix -round5:xekiz-kumet-didyx -round5:xedim-fizap-nohix -round5:xecap-cuvys-gogax -round5:xecod-nizyk-rykox -round5:xukel-sakaf-tunox -round5:xugef-cazih-byfix -round5:xozal-dumav-hylox -round5:xeheh-samyg-muhox -round5:xulas-puham-pefux -round5:xunis-sohor-tivax -round5:xedol-sogyc-kapyx -round5:xedop-rupez-lagox -round5:xokiz-sadof-kimix -round5:xevot-lubac-hebox -round5:xonon-bemyn-myrex -round5:xesif-danic-dedix -round5:xivik-lyrys-tipix -round5:xunik-rizel-vapux -round5:xovin-hugig-titox -round5:xidah-begul-gokax -round5:xemol-kysog-gyzax -round5:xuhir-sasyb-ducyx -round5:xoleh-dunar-gamyx -round5:xeram-sykot-visux -round5:xutel-tuvuz-fotex -round5:xucop-gypob-menix -round5:xilom-movip-lumyx -round5:ximos-logym-ninyx -round5:xigiz-depeh-komex -round5:xenac-robyc-pylux -round5:xelef-fepob-lavux -round5:xucin-nytib-pucyx -round5:xocos-pehol-gypax -round5:xodin-rutib-nysix -round5:xinac-fygih-tabox -round5:xumal-bynal-gamax -round5:xised-pened-vapox -round5:xigig-gehek-tupix -round5:xodad-vufen-conyx -round5:xuvez-nesur-damyx -round5:xerag-povyg-sufex -round5:xonik-dyrov-hilox -round5:xilip-rebip-lutex -round5:xehoc-rubib-nudux -round5:xecit-vipyk-gityx -round5:xenob-perem-gucax -round5:xibev-tevyd-vihux -round5:xokis-gepag-gydax -round5:ximag-kuzym-sefax -round5:xeton-tevuv-luhax -round5:xepin-fodur-gafux -round5:xuhes-tuvir-hymex -round5:xeril-pabyd-nosux -round5:xovop-gunam-kyzyx -round5:xulev-saras-sepyx -round5:xecav-byhok-vosux -round5:xuteg-dafym-ropax -round5:xunaz-gykog-fucox -round5:xuzev-porez-timix -round5:xokag-mekec-bapox -round5:xurak-gyhev-kymix -round5:xepap-semum-nozox -round5:xures-kusal-lutyx -round5:xodot-veryl-zyvax -round5:xeziz-harac-mocox -round5:xipeb-hedef-didox -round5:xorem-vugul-nycax -round5:xufof-nasyg-rikex -round5:xived-negak-celex -round5:xideg-vorom-tidox -round5:xecir-hocyg-fidix -round5:xuzid-pucyk-banux -round5:xotab-tozov-vudix -round5:xidig-vokag-cinex -round5:xodah-sibaf-hovox -round5:xiked-vuzec-cocox -round5:xuzem-hedik-kykex -round5:xokit-pebed-sahix -round5:xodac-dyleh-garex -round5:xikir-gycad-zuvex -round5:xecah-kylib-puzux -round5:xigih-bidic-canox -round5:xuhid-bicol-zovyx -round5:xeval-kypug-zyrax -round5:xilob-kamup-fudax -round5:xekom-lygil-hymix -round5:xopok-mehuh-zazix -round5:xivor-zorit-docox -round5:xokev-kuzot-zynyx -round5:xofig-fynyc-rarux -round5:xusap-tycod-cecux -round5:xeheg-nazol-cyrex -round5:xonod-zulat-nuhex -round5:xonac-gurug-nihox -round5:xohor-netus-surex -round5:xukah-kulud-fobax -round5:xobif-rysic-tivex -round5:xufel-vobug-nunex -round5:xuzaf-mulel-rabux -round5:xucev-docas-nysex -round5:xovaz-sosyf-hyhox -round5:xefil-mifol-pulux -round5:xivan-desof-runux -round5:xufav-beken-fysix -round5:xunih-hynev-vutax -round5:xulep-dafol-tufax -round5:xuhon-ladov-tumix -round5:xuvem-rukon-lyfax -round5:xoneh-fikyp-cegax -round5:xugaz-nodob-dusyx -round5:xinec-lyhyk-kamux -round5:xipel-hises-tytax -round5:xumat-zihas-cyfax -round5:xupoz-zapes-dacyx -round5:xubiv-tevil-catax -round5:xunal-ryrad-dysox -round5:xisef-givyn-vehox -round5:xutin-zilot-dypux -round5:xelet-ginus-tonex -round5:xugic-kumyt-ludex -round5:xizam-palef-rivix -round5:xemet-paryp-mipox -round5:xetam-zyfuf-nekex -round5:xelas-dimef-ketux -round5:xozak-kebor-hasex -round5:xegic-menuz-cevux -round5:xuroc-cociz-masix -round5:xosef-cafeb-vitox -round5:xekeg-vazil-samax -round5:xopan-gykat-havox -round5:xehef-rityn-tivix -round5:xuvop-degug-kosix -round5:xicar-manup-gygex -round5:xopah-giper-zymox -round5:xoriv-habon-ripux -round5:xoloz-conek-duhix -round5:xebar-ranud-marox -round5:xipad-kunon-daryx -round5:xodil-feliz-mirux -round5:xotet-lacoz-sagax -round5:xomin-duham-comex -round5:xudoh-kidon-narux -round5:xecac-bucuh-makux -round5:xukik-cobep-kalex -round5:xizat-hituk-kuhux -round5:xorap-pagil-capux -round5:xofir-tihab-horyx -round5:xehez-fipiv-nozox -round5:xodit-hizar-tygyx -round5:xipal-pacef-butyx -round5:xefog-gahit-vavex -round5:xogef-simad-lusux -round5:xelin-fumol-mifix -round5:xeten-tapyl-navax -round5:xolef-dudef-korix -round5:xorep-pomyn-kybax -round5:xunod-hovap-lynax -round5:xipon-lapot-nomax -round5:xonoh-hiteh-demix -round5:xivot-funat-mibox -round5:xerec-cisop-synox -round5:xoben-goruz-valix -round5:xotah-hadov-figux -round5:xocel-rygod-forux -round5:xotel-cikim-virix -round5:xicis-hicuh-nefax -round5:xihec-deduf-hutyx -round5:xusez-migan-kucyx -round5:xulel-tafab-tesyx -round5:xumot-macuf-gokex -round5:xelil-ropyl-losix -round5:xesim-turus-cykex -round5:xudon-teryl-vycyx -round5:xiraf-fitul-rizox -round5:xokem-zulis-nycox -round5:xusic-fokeb-vekux -round5:xemat-zupyt-nolyx -round5:xunep-nivoh-nipax -round5:xiboh-laduz-hibax -round5:xitin-zakop-racix -round5:xigoh-ralub-cysyx -round5:xobig-tolor-hemex -round5:xikah-husah-papox -round5:xopin-hozyd-pykyx -round5:xolib-lyred-rykyx -round5:xehih-morek-repix -round5:xekon-fefom-nulyx -round5:xezek-gabyv-rotux -round5:xeroc-tasan-hyzox -round5:xuzad-dydof-lahex -round5:xitat-domyd-tovix -round5:xuhon-pygum-nemex -round5:xukid-hovob-molyx -round5:xokeb-hehoz-sugux -round5:xusog-myhur-tybux -round5:xorec-soryf-cefux -round5:xekoh-nurin-sekox -round5:xemep-belit-megex -round5:xerop-zymir-vabux -round5:xofel-licef-putax -round5:xepes-befuc-kokyx -round5:xevoz-sevop-zikox -round5:xugof-hidol-fegix -round5:xocah-zeros-hapex -round5:xeven-kiliz-huzix -round5:xuges-gypif-facyx -round5:xinaz-cyvik-vipax -round5:xunal-megym-devix -round5:xideg-vilup-fifux -round5:xorib-zumyf-hegix -round5:xopam-curob-rucix -round5:xevog-sydab-kokix -round5:xugec-kyfob-kicyx -round5:xizef-tibas-fuzix -round5:xifef-sulys-vanix -round5:xibav-fuget-huvax -round5:xuhog-cyryp-dusax -round5:xomaz-kotag-ditux -round5:xipep-mizut-sylox -round5:xonan-sigib-sohax -round5:xutek-taced-tycex -round5:xedar-kyfel-limyx -round5:xemor-domak-zozox -round5:xiroc-kogot-tucyx -round5:xeron-vahyg-fadux -round5:xemoz-gisaf-nybax -round5:xefas-dific-nukyx -round5:xidot-kikup-ganux -round5:xoral-halih-cylox -round5:xubod-gyzoh-marix -round5:xubog-nofih-sopux -round5:xegan-nepad-tosax -round5:xukel-gihos-rykix -round5:xecol-safym-fapux -round5:xeber-dened-tyzax -round5:xuhar-pomyl-cerox -round5:xilak-hosyt-gusux -round5:xodep-kivoh-kunux -round5:xofam-pedig-kipex -round5:xopef-kegam-habox -round5:xoron-pyboc-cosox -round5:xusov-kelec-sosex -round5:xerip-fufog-zunox -round5:xoras-kukeh-kusix -round5:xecef-puheb-nipix -round5:xupaf-badub-musux -round5:xocol-zagyz-rezax -round5:xosel-tiger-fizyx -round5:xivod-veviv-sugox -round5:xodan-kolup-pasax -round5:xenol-vytuc-bofyx -round5:xorac-zyvyg-mefex -round5:xefar-gatyd-cypox -round5:xohac-pirat-mobux -round5:ximok-fatip-dezox -round5:xobos-pysoz-dypex -round5:xefim-bunyh-dodux -round5:xiziv-bokec-gysux -round5:xibol-vahyb-tepex -round5:xunav-lufyn-didux -round5:xosok-mibid-bogyx -round5:xiheh-heheg-patux -round5:xemon-niluh-lirex -round5:xezam-kekyn-dypax -round5:xudad-mevid-tyrex -round5:xisan-holof-matux -round5:xigic-tivis-divix -round5:xevas-zegav-nuhix -round5:xufil-hetun-bufex -round5:ximok-zysuh-tezyx -round5:xegen-gyzok-nimex -round5:xupot-zukor-zegax -round5:xudog-pemek-datox -round5:xegim-zetym-belox -round5:xuzef-puvav-dadox -round5:xumat-fyhaf-nedix -round5:xibiv-hikyz-tanix -round5:xufoh-casur-makox -round5:xufal-hyceg-vodyx -round5:xokap-gurem-benyx -round5:xuhik-puvat-locax -round5:xifak-nicar-mypex -round5:xuzem-napip-katex -round5:xogaz-rapab-gekyx -round5:xuvoh-nudul-kumyx -round5:xutep-syzus-hamux -round5:xomom-gomut-zepox -round5:xehov-punob-fytux -round5:xukik-gavok-fanix -round5:xihom-mimam-pimux -round5:xisen-kykis-tygox -round5:ximog-ripif-binyx -round5:xobih-nyzyk-nevux -round5:xisog-vozeg-mozyx -round5:xihar-himok-vitux -round5:xedom-panot-nypex -round5:xesim-tanef-mogix -round5:xibas-cukap-fepix -round5:xobes-heber-hyhix -round5:xolah-pykad-fovax -round5:xemip-dovif-sacex -round5:xeniv-govad-zolyx -round5:xuran-sobit-diryx -round5:xehoc-kihec-nisax -round5:xigeh-cizic-tonex -round5:xutok-dytaz-navox -round5:xerab-geduk-bisix -round5:xilop-nivon-belix -round5:xohec-zynel-kevux -round5:ximir-pumov-godax -round5:xukep-ligyg-pepux -round5:xubag-tulab-gizix -round5:xofih-tapuz-betux -round5:xinih-seduz-kulix -round5:xekor-kavin-redix -round5:xosob-zezok-bocox -round5:xizav-kykor-kabyx -round5:xuzef-gubyt-turix -round5:xukat-luves-zogux -round5:xecas-gufyb-vepix -round5:xuzib-fegur-hocax -round5:xugoc-kuvuz-pupux -round5:xekab-gogat-dosax -round5:xihih-bykeb-nygyx -round5:xuzar-sizum-lihix -round5:xepah-gonim-ryzix -round5:xinek-pyhak-fefyx -round5:xidor-ketyz-bosox -round5:xulap-fubog-ranux -round5:xoleh-pikit-bobox -round5:xenop-zozyb-hycax -round5:xiril-fupys-hurex -round5:xibib-ruzut-zabix -round5:xiner-mypym-cisox -round5:xepib-secos-fugux -round5:xitom-farym-kirux -round5:xicig-mymat-hofex -round5:xidof-gimun-litux -round5:xonaf-nanoz-cydox -round5:xubep-haben-lylex -round5:xoceb-nuheb-vevex -round5:xigit-nelak-berax -round5:xizag-vynit-sykex -round5:ximab-kivag-vycux -round5:xicem-ryvop-pydax -round5:xehoz-kuzir-semix -round5:xuvan-pazah-hyfex -round5:xefak-cihem-pynux -round5:xecel-kynog-fotyx -round5:xomom-sugyl-letix -round5:xunid-natap-lazyx -round5:xorel-cosah-tocax -round5:xevin-hifop-peryx -round5:xudeb-lydod-gylex -round5:xupeb-gyrop-rygux -round5:xibah-calyp-vulix -round5:xover-raziv-lazix -round5:xokot-muvuk-repyx -round5:xiros-bihic-kobix -round5:xogos-hobor-ragyx -round5:xunaf-gager-nonyx -round5:xobic-sehoz-purux -round5:xopob-zevug-syvyx -round5:xosaf-tosim-tetix -round5:xevot-vupuz-mytux -round5:xumaz-riced-padux -round5:xicip-sunav-sadox -round5:xezeh-kogyb-zogox -round5:xutor-fakir-fomix -round5:xizeg-cuseb-hivux -round5:xohih-hoded-tihox -round5:xerag-cocas-curax -round5:xebif-tyrer-povix -round5:xopaf-ketek-zypox -round5:xuvis-fezif-sagax -round5:xikic-nosib-tihux -round5:xevon-gozer-dynox -round5:xehig-berik-comox -round5:xubof-mykud-gudix -round5:xedat-pydys-damex -round5:xunez-zonyv-kezox -round5:xenim-robus-pipux -round5:xekip-hehyr-cifix -round5:xozes-cyteg-rigux -round5:xikec-tafit-tysox -round5:xugas-gizar-comex -round5:xovik-pulip-rypex -round5:xezas-vibop-rihyx -round5:xegor-huviv-cotux -round5:xolah-toved-zudex -round5:xepib-fybiz-vefix -round5:xozaf-pelon-dykex -round5:xuzas-sazet-fotox -round5:xibop-rahin-fipux -round5:xedop-vesev-vozix -round5:ximam-zulus-difux -round5:xedif-pemah-gydix -round5:xemep-vogon-dogax -round5:xuzic-sezin-tezyx -round5:xobap-cosys-tozox -round5:xecop-sefos-zinex -round5:xitip-bebuk-botux -round5:xunon-niteb-ramex -round5:xoger-zeguh-halux -round5:xofal-hysad-gymox -round5:xusev-mavof-sehax -round5:xelol-ziguv-falix -round5:xeged-gapop-dylux -round5:xukid-rulet-vuryx -round5:xozat-rycan-kikyx -round5:xomih-nyrig-mevex -round5:xucic-kateh-ruhex -round5:xiviz-seziv-dohyx -round5:xepac-lugut-vilix -round5:xefel-camev-vohex -round5:xebag-lekon-remyx -round5:xirof-zalih-hymox -round5:xohak-zafap-migex -round5:xoler-sokym-mirox -round5:xulec-dymun-kutox -round5:xutip-ryveb-zemyx -round5:xumom-likov-favox -round5:xucab-lyvub-subix -round5:xovor-mypol-bidux -round5:xubif-daton-gopux -round5:xogoz-lovyd-vekox -round5:xuhas-zakis-libax -round5:xomiz-rucoh-turux -round5:xohem-miziz-cohux -round5:xodeb-salib-fehox -round5:xegip-kozir-dudex -round5:xirar-votud-tehex -round5:xovok-kazir-kipox -round5:xikar-sihyh-cacyx -round5:xuvog-pogaf-dacex -round5:xenan-bibep-lunex -round5:xitip-pizap-mupax -round5:xuvic-tikyc-lyvox -round5:xigad-nagib-cumyx -round5:xenid-genub-bovyx -round5:xisoc-hobat-pibux -round5:xogoc-cicim-fukix -round5:xotor-nofez-nizix -round5:xolek-regob-cumox -round5:xupeb-zopic-hafix -round5:xoter-dunug-rymax -round5:xeveb-gabyv-debax -round5:xufed-nyfoz-nilyx -round5:xuric-mavap-zevux -round5:xogib-bikom-duhux -round5:xegit-bodus-dasux -round5:xutom-muham-bufux -round5:xekep-hygyf-pusyx -round5:xobap-pukem-lofex -round5:xurin-rugar-cogyx -round5:xizof-hesob-dutux -round5:xemib-cygys-fobax -round5:xucom-vutat-murix -round5:xukol-bekad-zazyx -round5:xunig-metef-zyfux -round5:xufil-hunym-vuvyx -round5:xitez-zakim-micux -round5:xisod-verut-hidyx -round5:xihab-tapys-gosux -round5:xuzan-hacul-zagix -round5:xosev-vedeg-cilax -round5:xorac-keric-zybyx -round5:xoret-tymav-rabux -round5:xubop-binuh-kezex -round5:ximik-vovug-vozax -round5:xuhav-vemis-kygix -round5:xufit-zygyd-nymox -round5:xopog-moruh-venyx -round5:xitag-gylub-kufux -round5:xizil-nosag-symex -round5:xotin-kebus-folex -round5:xoles-bases-segex -round5:xevab-hohif-tygex -round5:xofob-lytib-ketux -round5:xefas-sihic-mytyx -round5:xidez-rysod-tezax -round5:xugec-buzev-losex -round5:xefeh-pafed-lybux -round5:xumip-fypod-zutax -round5:xemiv-lirip-gedix -round5:xukot-bokur-dykux -round5:xebam-zenoz-decox -round5:xedaz-seruc-hyvax -round5:xumin-sycyh-nyhax -round5:xivir-rolar-munex -round5:xidek-zoryg-kabux -round5:xicep-vohop-rumex -round5:xoton-nalev-gisox -round5:xibec-syfan-zegix -round5:xofec-serir-bidax -round5:xezas-sisib-sidyx -round5:xisab-kozim-buhix -round5:xibaz-zokuc-halex -round5:xodeb-ninom-dekux -round5:xunad-haloc-tylyx -round5:xedar-danor-zupex -round5:xecol-dehut-kasox -round5:xolin-tuder-rarax -round5:xukeg-gulot-pyhex -round5:xehad-posol-pahyx -round5:xegim-kozul-tulux -round5:xuvor-pymaf-gisex -round5:xukig-tefaz-gezex -round5:xemaf-homev-razax -round5:xuhiz-tugef-gepax -round5:xikil-hokih-dovix -round5:xigan-pehyl-pehax -round5:xeken-dohoh-mybax -round5:xosir-nyvit-nubix -round5:xosap-lagef-hudex -round5:xutim-zaner-zekox -round5:xinom-fakab-dynox -round5:xonem-tezop-kyrix -round5:xedit-cyzad-kebux -round5:xevih-vucer-kevox -round5:xehin-lunos-kucox -round5:xigef-pesyt-sysux -round5:xekop-nufis-defex -round5:xerof-mefiv-vicax -round5:xobih-lazih-nigix -round5:xihof-mubat-tysex -round5:xorit-mazes-cidux -round5:xinav-gakyc-tyrux -round5:xunid-pepig-gulox -round5:xuhak-lozup-dihox -round5:xugot-pilom-mosax -round5:xomip-tubys-hufox -round5:xubil-taboc-fylox -round5:xefep-hubif-tytux -round5:xolod-zedur-cotux -round5:xinab-sosyn-fosex -round5:xolam-gikob-gusox -round5:xudad-vypeg-bumax -round5:xohih-tikah-setyx -round5:xoneg-galeb-dicax -round5:xokog-naguk-sikyx -round5:xibin-docit-sypex -round5:xicar-hosuc-fyhox -round5:xufez-momyb-pycux -round5:xerif-ginuk-zigix -round5:xoror-todih-nurox -round5:xenim-lafit-dynox -round5:xuzac-rufap-fysyx -round5:xedeh-momob-bytux -round5:xirot-zazad-bafax -round5:xuhic-pisob-rikyx -round5:xifer-facah-konex -round5:xoboc-pefys-pagyx -round5:xihil-digip-zypex -round5:xurov-molim-fesox -round5:xebac-lasys-putex -round5:xigez-pevav-tyhox -round5:xugop-hadyl-baryx -round5:xidon-cutet-pyzax -round5:xutac-bifez-lacax -round5:xokof-levub-befyx -round5:xidob-petos-talax -round5:xolos-borom-cisex -round5:xifah-fomih-razox -round5:xihod-ledol-cilyx -round5:xopoc-vipul-bylux -round5:xobob-nogar-gizox -round5:xiriv-geleb-rugix -round5:xezih-pideg-dikax -round5:xipag-vetac-tidox -round5:xukak-nycef-temex -round5:xetep-gezan-bytex -round5:xihez-vunat-gafux -round5:xenif-siget-domyx -round5:xolaf-nutol-pofux -round5:xuvap-gulyz-kybix -round5:xereb-tazer-rupix -round5:xibel-fynac-mucex -round5:xinaf-fasam-cytix -round5:xevih-fivur-vevux -round5:xehoh-voric-zopox -round5:xedas-tobip-vytux -round5:xobor-befac-gumix -round5:xicav-dymyg-napax -round5:xicol-lyzug-babox -round5:xefit-dusuf-numyx -round5:xikad-cadub-hapix -round5:xesiv-fedev-denox -round5:xupor-zazec-hozux -round5:xilid-bavum-vylyx -round5:xokan-vagin-fagox -round5:xobol-paled-tycix -round5:xetev-refan-hofyx -round5:xupez-ferun-vekox -round5:xufip-gurus-dirix -round5:xicek-kokof-zimox -round5:xofek-rimyh-kunax -round5:xitob-givun-gavux -round5:xidif-tisik-govox -round5:xobar-hugir-dydax -round5:xidad-gagaz-gezox -round5:xohof-kolot-lidux -round5:xeviz-rutud-pisyx -round5:xupor-bonyv-kekox -round5:xobok-kecim-dedyx -round5:xedeb-lylac-vutax -round5:xeroc-dehav-tolix -round5:xisik-hemin-fugyx -round5:xegis-kehat-nesux -round5:xudog-revez-cybyx -round5:xiteh-lyzit-gemox -round5:xepih-tisah-sevox -round5:xomik-zuduk-pisox -round5:xoper-hociv-mymax -round5:xukis-mufeb-vukax -round5:xufin-komoc-degox -round5:xipid-nibyk-dotex -round5:xedip-mypyk-balix -round5:xeleb-sukiv-hydax -round5:xibeh-tolog-vikux -round5:xikok-petyp-semox -round5:xoteh-neret-cevix -round5:xeret-lifif-sifox -round5:xonev-fezyd-rotax -round5:xozok-cyzyk-kusox -round5:xetep-recur-rerux -round5:ximac-zagyc-kysox -round5:xinom-pasez-hibox -round5:xegof-nocup-hesax -round5:xikoc-rurup-luvux -round5:xupim-danep-vogox -round5:ximac-dipup-nykyx -round5:xobap-zugac-bohox -round5:xudav-calom-numyx -round5:xecal-magub-hufix -round5:xizoz-nynum-cubux -round5:xebib-kofas-burux -round5:xolel-rydig-nabex -round5:xupiz-lolyn-fytex -round5:xunis-luvuk-ruhax -round5:xehar-risir-pefyx -round5:xudac-banuk-sivux -round5:xemob-mecif-fanux -round5:ximoc-nylac-fybux -round5:xuzir-mepan-mimux -round5:xecel-parul-tolux -round5:xogar-kisin-vikux -round5:xupan-pibuc-bylax -round5:xilit-cisom-socex -round5:xitic-cotah-cagox -round5:xugim-makab-kavux -round5:xicac-bafut-sotyx -round5:xunih-dymen-sanyx -round5:xukis-tuvum-pekex -round5:xibas-salok-hugox -round5:xused-hepos-gakyx -round5:xisad-funis-nekox -round5:xuriz-hyhor-buhux -round5:xodos-fuvoz-cufyx -round5:xicav-ripez-kuzux -round5:xugim-ginyf-rufyx -round5:xitok-gufak-katyx -round5:xidav-cuhih-guvox -round5:xoson-suroc-gyrex -round5:xufor-datyb-zerex -round5:xipid-nicyv-hakox -round5:xunar-mohof-vovyx -round5:xogit-gopiv-facex -round5:xigap-zohys-bomyx -round5:xozet-mudal-hosix -round5:xefim-divyl-vetex -round5:xudiv-kyzev-nutax -round5:xemeg-lipul-dyfex -round5:xecob-zuren-lopux -round5:xedip-zeler-ruzax -round5:xesin-rocef-hagyx -round5:xubiz-fadyp-tofyx -round5:xizis-miroh-nalax -round5:xihad-tibyt-nevyx -round5:xorok-vovun-fenex -round5:xuzop-gekun-nitox -round5:xotif-senoh-pihax -round5:xusam-bicoz-magex -round5:xosis-hyfin-licox -round5:xelis-zufuz-kolyx -round5:xeget-dyliz-tibox -round5:xebol-sobum-lihyx -round5:xicez-vebad-solux -round5:xegal-fesun-susax -round5:ximig-niciz-sobax -round5:xubat-zatym-lorox -round5:xekif-vysed-fopix -round5:xezer-zamuk-horax -round5:xehob-guvyz-difox -round5:xoziv-birit-kikox -round5:xofaz-tygon-vavyx -round5:xekof-fyfyf-tapox -round5:xofir-dilub-sivax -round5:xidev-goruc-tivox -round5:xidez-dutev-sekax -round5:xevet-dumab-nyrox -round5:xuken-cizot-rurix -round5:xomir-hacyn-hatux -round5:xivas-befuz-bykix -round5:xobem-lygih-tecax -round5:xubet-cyhuv-bukyx -round5:xemal-cokuk-naryx -round5:xesag-hibyf-kelex -round5:xunob-fizep-nogox -round5:xepog-tenuf-sulyx -round5:xemip-gigos-hibex -round5:xomig-vavep-vylyx -round5:xocov-kunyp-ricyx -round5:xivap-pikuv-melox -round5:xecoh-lyvep-vabux -round5:xeroh-nafam-rebax -round5:xeraf-bodin-kigix -round5:xilon-cedur-binex -round5:xevab-pemuv-rocax -round5:xukas-kygat-pakyx -round5:xepin-zyluk-tosox -round5:xinod-suvid-mesex -round5:xemip-suhof-dasex -round5:xovol-vaseh-pesex -round5:xibif-tagep-melax -round5:xidos-rugur-pagyx -round5:xudef-sybys-telox -round5:xomil-rolor-pokex -round5:xugit-cyseg-vacix -round5:xizos-tocyp-tanyx -round5:xeloz-himez-sicyx -round5:xeric-nyfat-dityx -round5:xebes-natyd-hufix -round5:xufop-tisov-duzux -round5:xeber-hisib-sogex -round5:xedes-hivur-myzux -round5:xolir-rohik-bicyx -round5:xomaz-surec-tumex -round5:xunib-tinih-senex -round5:xever-dogem-hecax -round5:xetem-raloc-hyvyx -round5:xozol-byvok-fupex -round5:xekez-gecuf-gydux -round5:xepoh-patet-lyzox -round5:xined-covat-dygux -round5:xilok-sesud-dunyx -round5:xuboz-datuv-motux -round5:xotog-cohak-sifox -round5:xiboc-hapab-vadyx -round5:xonir-tetyz-penix -round5:xerak-bikuf-ninyx -round5:xukav-dorog-lasyx -round5:xuzom-pukyn-zecix -round5:xubot-fupis-surix -round5:xebat-boliz-ryzyx -round5:xoril-detit-tykox -round5:xumih-goros-socyx -round5:xevob-byhod-pikox -round5:xulov-duhyc-synex -round5:xokad-gugan-filox -round5:xumel-cerif-dibux -round5:xizol-tidof-zivyx -round5:xetov-hetev-bycux -round5:xiban-cysam-pylix -round5:xomin-hunez-nypox -round5:xukaf-hefyf-suvax -round5:xogoc-dypol-figyx -round5:xuzig-lasun-datax -round5:xikeb-vipyr-manyx -round5:xifap-zuzyl-nybix -round5:xupig-lykub-bizix -round5:xurah-carug-razax -round5:xezes-pusoc-sagix -round5:xoram-mokip-cazex -round5:xirof-tocin-famyx -round5:xoheh-bituc-gebox -round5:xurod-hifon-kutex -round5:xitod-dumes-memux -round5:xevez-goboh-furix -round5:xufop-nogak-kuzyx -round5:xofer-vilat-gatax -round5:xisak-mirut-fatux -round5:xobeh-kutob-rycox -round5:xegic-vamyr-dibox -round5:xicop-lufaf-difux -round5:xebaf-casos-bigox -round5:xuhaf-pedih-becix -round5:xoneg-musil-pytyx -round5:xidom-cisim-ragux -round5:xopit-hemif-helax -round5:xiroh-pygot-pomix -round5:xones-higeg-copyx -round5:xecef-kebuz-dazex -round5:xisid-liryl-honix -round5:xefez-pazoc-ricux -round5:xosen-vygyg-buvax -round5:xubom-tyrih-supux -round5:xiraz-gymez-pusax -round5:xibis-numyt-lufox -round5:xofof-vileb-gelix -round5:xocor-nevoz-kibux -round5:xolev-tokun-famox -round5:xoneh-vezen-kifex -round5:xecoc-bytiv-nezux -round5:xufan-sakof-cugex -round5:xerel-bavad-lizex -round5:xefag-calip-votex -round5:xicam-bomek-hofix -round5:xinop-busum-dulex -round5:xeson-hepus-dihyx -round5:xedel-bareg-gihyx -round5:xohoz-leris-remex -round5:xeneg-dirut-seryx -round5:xecic-godah-cigux -round5:xidip-tobuc-gysyx -round5:xihes-cuhot-takix -round5:xofir-bidyl-gebex -round5:xobam-goheg-sehex -round5:xonot-zagep-nuzex -round5:xenoz-cutup-dedax -round5:xedir-sideh-bifyx -round5:xuniz-kizyk-damux -round5:xonif-hyfis-kukux -round5:xusib-bupun-kebax -round5:xekak-totat-mykex -round5:xepak-zareb-kudix -round5:xucam-ladoz-titux -round5:xonen-zybul-mucex -round5:xipip-sikof-cadax -round5:xupeh-kirih-supyx -round5:xemic-kolih-nefax -round5:xuhol-zimyc-lyrex -round5:xudir-runos-gidox -round5:xurir-zofac-pokax -round5:xulot-pupon-sysex -round5:xizap-rahan-dyhyx -round5:xevom-kityc-lidyx -round5:xohon-vupan-badux -round5:xelin-hasid-felex -round5:xiziz-filos-culex -round5:xezaf-lezyk-femex -round5:xoheb-micog-bevox -round5:xozin-pomos-cyzyx -round5:xubit-tadas-nyrix -round5:xiked-tozyp-fazyx -round5:xulir-kezyn-zakux -round5:xotoc-lofog-fufox -round5:xigib-fanec-lypux -round5:xegan-luvup-mehex -round5:xigaz-tuger-dasox -round5:xohan-kuzam-kysux -round5:xomot-tisyg-ninyx -round5:xevad-dycyg-cupix -round5:xider-hoduf-zimix -round5:xevav-zimeh-sytyx -round5:xopet-suzer-rypox -round5:xupeg-fabum-fugox -round5:xedaz-repar-civax -round5:ximir-sacuz-fekyx -round5:xilip-vadeh-hamux -round5:xucag-paget-ratix -round5:xudar-tebon-hokex -round5:xidec-zukit-dihix -round5:xupot-fivyg-ketex -round5:xolig-rygem-gegox -round5:xegin-melah-luzox -round5:xedof-lehec-hegex -round5:xubil-kypit-podax -round5:xococ-loges-sanax -round5:xuhan-lopal-lypyx -round5:xoros-kezyl-namex -round5:xodoh-komuk-fugox -round5:xudev-ruzuc-dimix -round5:xefis-kogyv-hutyx -round5:xizal-domos-nufex -round5:xobap-veler-dycox -round5:xovoz-hybif-bifix -round5:xoloh-mituc-copux -round5:xuhik-vacuc-tofax -round5:xizat-lypot-kyvax -round5:xefab-hahut-dipax -round5:xikiv-ticod-vymyx -round5:xifah-sisoh-mapax -round5:xutal-rasec-fovox -round5:xuzil-dubub-basyx -round5:xevod-fuhad-posax -round5:xipel-dyvug-bytux -round5:xuzid-suram-bonex -round5:xofaf-hatag-mymux -round5:xider-bosuz-zuhax -round5:xumez-sivim-kakax -round5:xolib-bumyr-typox -round5:xefak-zuhav-vycyx -round5:xuzip-viryr-homox -round5:xucip-bokeb-tefax -round5:xusov-kahys-tilax -round5:xokel-hyvik-finux -round5:xipir-fivet-nuzox -round5:xokoz-fehef-dufax -round5:xokav-tudos-hycyx -round5:xodid-kusor-zemux -round5:xekor-lehif-mudax -round5:xutic-nareg-cyrex -round5:xipid-gotud-dyvux -round5:xokif-cytum-mugax -round5:xikol-marim-vusox -round5:xiraf-hucyn-mamyx -round5:xelal-dobar-burex -round5:xovof-modet-zomux -round5:xecon-kadyb-cafex -round5:xebod-nozyt-pumyx -round5:xotat-damen-fasox -round5:xumah-hylec-zygex -round5:xokoc-zihol-bupux -round5:xobel-bedos-hifyx -round5:xipec-gapol-hudax -round5:xicev-gyber-ponox -round5:xebas-goguh-cisix -round5:xurev-cigol-tegox -round5:xolal-cefys-zecex -round5:xubin-lopop-linux -round5:xihac-terob-sidox -round5:xitah-hygih-zavux -round5:xufik-suhoh-comax -round5:xezah-hitoh-bycux -round5:xirip-fisot-kyzax -round5:xebil-mebab-kakax -round5:xucac-vufec-nobox -round5:xohor-zypuv-lugux -round5:xesig-bebal-balex -round5:xuhaf-higis-picux -round5:xitol-hufaf-decux -round5:xidoc-fyret-lafex -round5:xukif-fycam-cukyx -round5:xoziz-puzip-cevox -round5:xegor-sumat-tibyx -round5:xocet-huzec-pypux -round5:xitic-loful-fyrax -round5:xekip-pybir-cehax -round5:xozas-hagub-mopyx -round5:xeven-vycok-gyfax -round5:xurot-byhur-mogux -round5:xotaz-hylit-tomyx -round5:xoceh-dupoc-sokux -round5:xucaf-rogav-sarux -round5:xefat-tavav-pacax -round5:xukan-dobub-bagyx -round5:xucil-deguk-pihax diff --git a/packages/solera/solera.mk b/packages/solera/solera.mk deleted file mode 100644 index fe5c8aa..0000000 --- a/packages/solera/solera.mk +++ /dev/null @@ -1,8 +0,0 @@ -solera-source: -solera-build: - -solera-install: packages/solera/tokens.txt - mkdir -p $(TARGET)/solera/ - cp $< $(TARGET)/solera/ - -PACKAGES += solera diff --git a/packages/solera/tokens.txt b/packages/solera/tokens.txt deleted file mode 100644 index a54f542..0000000 --- a/packages/solera/tokens.txt +++ /dev/null @@ -1,1000 +0,0 @@ -solera:xihah-myliz-zafox -solera:xesic-pyzyf-dakix -solera:xufis-suhec-honux -solera:xubof-roreg-vozax -solera:xelag-gyryf-kirex -solera:xeken-gerik-guvax -solera:xunim-calil-topax -solera:xutil-bagod-rahox -solera:xotot-pakec-cosyx -solera:xezic-cener-rybux -solera:xidin-vyken-hedyx -solera:xitat-bekoz-hakix -solera:xorel-pemor-ruvax -solera:xurok-gicip-nyzox -solera:xusap-dirif-selex -solera:xeniz-kinys-sefox -solera:xulel-vyhal-kukex -solera:xodos-pevek-gevyx -solera:xubof-necam-hapox -solera:xoner-zubof-minax -solera:xozes-regak-vibux -solera:xulem-pynyg-hymex -solera:xecoz-fahin-bitux -solera:xipek-romah-humyx -solera:xitid-tisof-kopax -solera:xivoz-fykac-subex -solera:xuzip-herin-gymyx -solera:xotec-fepem-sekix -solera:xisob-fysun-dyvux -solera:xivod-verol-bacix -solera:xenif-roteh-sopyx -solera:xerab-vobem-cerex -solera:xosod-pesag-letox -solera:xocog-racoh-zakox -solera:xipib-busum-lufex -solera:xevev-nilel-lazux -solera:xefap-vilog-mecux -solera:xufol-numuv-mecyx -solera:xovol-mivif-vakix -solera:xucaf-lepeh-nonax -solera:xucop-likuc-fukex -solera:xirid-lerum-narex -solera:xibek-lerad-lazox -solera:xivik-lokyg-dabyx -solera:xonir-sypys-pipix -solera:xigih-rehyn-favyx -solera:xiver-kulaf-totax -solera:xunav-domen-rekix -solera:xibok-levon-nozex -solera:xumog-pigyl-cysox -solera:xuseg-lefym-kydax -solera:ximaf-nizoh-togux -solera:xubop-mozuc-hirux -solera:xozid-gyrev-tabyx -solera:xirog-dulog-pozex -solera:xoved-cuset-senex -solera:xunip-besob-lopox -solera:xilog-zadel-kylax -solera:xifeb-temin-divox -solera:xufiz-vukif-nidix -solera:xucom-kiful-luvyx -solera:xicin-kukiv-dulyx -solera:xuhiv-dusal-vypox -solera:xuhot-bohad-nahux -solera:xezos-papoz-zedyx -solera:xisag-kodek-habex -solera:xohel-fypet-namyx -solera:xodon-pabim-dohax -solera:xibic-sozur-lasyx -solera:xigih-mesak-byzux -solera:xogin-pyrul-nucyx -solera:xozep-nofog-vyfux -solera:xuper-nudyz-cegax -solera:xitam-davot-gipex -solera:xuhar-tecar-dezyx -solera:xudif-vypev-cabyx -solera:xereg-regyp-legax -solera:xofod-nyses-nopix -solera:xusot-mylis-sizyx -solera:xudaf-gyhip-falux -solera:xezan-miran-nokix -solera:xugin-cezid-medox -solera:xotak-tesok-vopex -solera:xuloh-lolic-muzux -solera:xukeb-fakyh-gefax -solera:xinez-sadah-ragux -solera:xitid-vucor-kivux -solera:xipof-raraf-sunix -solera:ximen-hytir-macux -solera:xiven-zumec-gifex -solera:xebig-disub-fizex -solera:xekik-gehir-vezox -solera:xebil-modyn-pozox -solera:xevoh-kokef-cirax -solera:xilon-bamyk-tynax -solera:xozaf-vukic-rabix -solera:xulir-zygum-sigux -solera:xohad-pykis-hisyx -solera:xofob-suzod-fotix -solera:xuhaz-zybyg-lyrex -solera:xecok-pebut-vepix -solera:xizoz-cuhop-lonyx -solera:xemof-zehag-citux -solera:xonam-depyr-mivix -solera:xefob-mubos-vezux -solera:xocob-horog-kodex -solera:xutoh-vetez-tamyx -solera:xemem-pufyg-zavex -solera:xusic-fufaz-bucix -solera:xecar-monis-lutax -solera:xosef-tuviv-gapex -solera:xelel-bumyv-sekox -solera:xehez-falif-lohex -solera:xemam-napoz-hygyx -solera:xokih-bemiz-bofyx -solera:xohib-cinyb-cesix -solera:xemed-tipyp-gokax -solera:xocat-mezym-nubox -solera:xozih-cemos-cudax -solera:xuham-leviz-zypex -solera:xemev-rozel-vysax -solera:xurev-gygys-balex -solera:xocos-lutic-hyhex -solera:xovom-pekuv-hevox -solera:xicid-hetug-dofix -solera:xolon-lyked-sigex -solera:xufok-detav-sulax -solera:xohol-ryviv-pyvux -solera:xosav-dygav-cyzox -solera:xozif-mebop-hanax -solera:xokem-fikoz-husax -solera:xubad-fafod-tikax -solera:xuhov-minuh-sibyx -solera:xurop-lokor-myhox -solera:xeris-cetug-digax -solera:xubih-sorod-hubex -solera:xizod-cyset-sesyx -solera:xilol-symop-vysox -solera:xehin-picyf-sufax -solera:xusaf-ralid-forax -solera:xefev-sorir-pekux -solera:xosev-vebot-vacex -solera:xovic-mekac-dakax -solera:xisok-cukun-botox -solera:xezab-cecyt-dicix -solera:xefis-gydov-heryx -solera:xibes-kevut-cafix -solera:xidit-puvak-duvax -solera:xodot-dovah-lerax -solera:xivac-ludig-zolux -solera:xigim-zycip-tysox -solera:xunav-sovor-lynox -solera:xitit-nupet-vorex -solera:xisaz-zotig-mofix -solera:xurah-gipob-sykax -solera:xozid-cegon-zudox -solera:xogav-falor-sygex -solera:xumod-gamud-bevix -solera:xutol-zomam-dysyx -solera:xitep-herov-busix -solera:xitin-vizov-givyx -solera:xofiv-vicyz-tezux -solera:xulir-cozil-zelax -solera:xenov-sybim-gimux -solera:xucid-dysor-kekux -solera:xegor-nyrym-temox -solera:xebec-verut-rityx -solera:xufaf-hutun-cubox -solera:xuzel-mited-porox -solera:xozil-todof-mapix -solera:xofif-bolim-mokex -solera:xelov-nafyk-kulux -solera:xelaf-zofom-fagox -solera:xogip-sazeh-lipox -solera:ximip-pomaz-vilax -solera:xevet-funem-dilex -solera:xekim-kykak-nahex -solera:xoliz-zysem-futux -solera:xofaz-ginib-kovax -solera:xuveh-dabam-bozax -solera:xetor-hekaf-pehex -solera:xozer-nifid-vasox -solera:ximal-gemit-nebux -solera:xibin-fogah-sibix -solera:xosoh-sapuf-kikax -solera:xebes-pevyl-bycex -solera:xomit-vizek-milox -solera:xebed-zasut-tasex -solera:xitiv-fomob-domix -solera:xocem-soref-kotox -solera:xeraz-comib-camux -solera:xucef-doneh-dapix -solera:xovet-byhan-vazox -solera:xogif-fatag-lusix -solera:xepib-rubus-basyx -solera:xocal-hovaf-secex -solera:xeter-dokot-vumux -solera:xusan-pomot-lekex -solera:xuzit-muhyv-fonox -solera:xuned-rosed-gogax -solera:xugen-nefom-nodex -solera:xotar-zudyd-fafix -solera:xopit-vumut-volex -solera:xedeb-nyral-nacax -solera:xuhav-difan-posyx -solera:xuvif-pibyt-gutux -solera:xunoh-megar-lumux -solera:xenos-kyvet-sypox -solera:xugel-corag-nozyx -solera:xicol-tabog-bytix -solera:xuveb-madaz-netux -solera:xikiz-mimaf-vypox -solera:xesor-manuk-tylyx -solera:xipif-nevyk-dydix -solera:xopal-vetef-manax -solera:xobin-lyfos-himux -solera:xupan-vekyk-cebix -solera:xokol-tolag-sedux -solera:xovaf-cukem-gufux -solera:xulog-ciseg-rezex -solera:xovep-zehig-lisix -solera:xufik-lolot-zatex -solera:xebim-hysuk-cidax -solera:xicin-tedev-duhex -solera:xudet-cegep-vukox -solera:xubat-vifon-gifax -solera:xozed-cibac-vupox -solera:xutad-lifec-rygax -solera:xekik-muzev-zupux -solera:xogaz-mefoh-vapex -solera:xiloc-gohid-cosox -solera:xines-mazil-nevax -solera:xitih-caboh-zefox -solera:xeboc-zypon-lecux -solera:xides-cotaz-mudex -solera:xicaz-fycaz-rupux -solera:xopof-musyf-kozux -solera:xilim-nofig-dybyx -solera:xoror-kisov-sihyx -solera:xilam-matap-botox -solera:xidop-begut-zodux -solera:xehaf-totan-derox -solera:xutic-degis-dypux -solera:xudet-henig-zacox -solera:xocin-pefyt-gusix -solera:xidad-secot-tygix -solera:xudar-kobil-novux -solera:xuzic-sisot-nugux -solera:xidek-nyloh-rapox -solera:xokih-hapuc-zatix -solera:xeges-nenak-vesix -solera:xetoc-gimyn-cepax -solera:xolig-fimup-mabox -solera:xodop-metyg-zuhex -solera:xefim-gozyr-tigax -solera:xotar-navik-lylex -solera:xefic-cenyf-getax -solera:xugir-befet-vugox -solera:xebod-dacec-fyrux -solera:xumek-dunos-sozyx -solera:xodap-lysif-byrux -solera:xigap-renim-rufyx -solera:xevef-tamil-linax -solera:xocid-mevet-zefyx -solera:xefid-levyl-hegix -solera:xolon-bohab-sedyx -solera:xoval-pycuz-zesix -solera:xerov-miryt-nukux -solera:xusiz-nygas-kanox -solera:xidic-rudib-lesux -solera:xenar-bisec-gavyx -solera:xefat-virun-fodyx -solera:xumic-nevum-lozex -solera:xurip-kovor-kovax -solera:xebah-fefyr-honax -solera:xihez-tivur-gifax -solera:xusoc-zyses-bynax -solera:xusaf-fyder-nypox -solera:xilas-biruk-bicex -solera:xutak-vabyd-takox -solera:xelif-punol-likyx -solera:xuzit-vevel-tytox -solera:xedot-lygeh-lokex -solera:xepas-hisun-ticox -solera:xikig-byduz-facyx -solera:xobar-cehiv-myzax -solera:xoval-zedyr-suzyx -solera:xugit-vatel-nihex -solera:xulen-huvep-zynix -solera:xihah-besar-denix -solera:xises-kubug-lunox -solera:xezoh-ronec-bazyx -solera:xicel-sacid-zavyx -solera:xomeg-muduk-muzex -solera:xucod-rudet-mutix -solera:xutim-rocym-mygax -solera:xebin-gygyt-comox -solera:xisoh-hopec-zumix -solera:xolaz-kafot-mukax -solera:xokiz-tymis-vilox -solera:xeker-fenih-mupyx -solera:xehog-hegyc-dehux -solera:xireh-sifak-menex -solera:xuket-nubyt-kedyx -solera:xozez-lotez-vebox -solera:xufoz-vebiv-futex -solera:xezop-remet-tedox -solera:xonak-cozan-fomox -solera:xotih-lalig-pubax -solera:xikin-tidep-gutix -solera:xumam-zonyf-hakox -solera:xebek-sobok-sicex -solera:xihod-tecuk-kerux -solera:xekop-visud-pugux -solera:xorik-zyhom-fynux -solera:xutot-hozom-gadyx -solera:xutig-kamem-metex -solera:xenov-zocyv-hobux -solera:xudev-hosof-kopux -solera:xepim-locin-tybox -solera:xekop-nyreg-gavyx -solera:xigog-govef-sogyx -solera:xusiz-kebak-bazux -solera:xufik-fadet-nanax -solera:xosem-cazar-suvex -solera:xocac-nokyl-pysux -solera:xohek-dapek-napox -solera:xetel-kyzam-bidux -solera:xefad-kurud-cenyx -solera:xured-rogyl-vydox -solera:xeval-zorun-helox -solera:xedev-sumik-fevux -solera:xidev-velik-vyzex -solera:xotic-rydig-nynax -solera:xutar-liref-fyrux -solera:xecih-dofuh-himex -solera:xepon-kofyd-pebix -solera:xevez-vybop-tomax -solera:xufag-macyc-gafex -solera:xubef-famol-myhax -solera:xevoh-vilom-hepox -solera:xoson-rapub-zotux -solera:xebof-zyfiz-konux -solera:xepod-lavyd-norax -solera:xenet-lizud-dosox -solera:xubih-tegih-refix -solera:xebof-cybef-rilex -solera:xefog-mirot-kisyx -solera:xipis-lakug-nokax -solera:xolaz-fucot-tyrux -solera:xotid-cusuz-depex -solera:xedik-mycal-buhex -solera:xukeb-bifut-kumox -solera:xolap-nacir-mupax -solera:xihan-fybyd-zecex -solera:xuhen-zysev-zuvex -solera:xefeg-furyf-fazox -solera:ximon-davin-komex -solera:xiros-nevot-papyx -solera:xucel-picar-tybix -solera:xofed-segar-zifex -solera:xezic-gotum-cakyx -solera:xenaf-sygat-tikyx -solera:xogab-menyl-vydex -solera:xecer-vumir-capix -solera:xokik-hukec-gepyx -solera:xuniz-riled-tymix -solera:xisod-nefun-rofix -solera:xofeb-cagur-vefyx -solera:xunez-zyruz-vofux -solera:xebab-nynic-hezex -solera:xulob-zured-hovex -solera:xokes-fekop-favax -solera:xeman-sined-hulyx -solera:xulik-nitos-gipex -solera:xetim-makiv-numux -solera:xorid-fevyz-fegex -solera:xores-huhuv-nidux -solera:xosol-romum-tohux -solera:xufeh-buzit-cobyx -solera:xilag-nokop-sovux -solera:xuvan-locun-dycox -solera:xilop-nyfik-fadux -solera:xuzib-komul-cipex -solera:xubiv-mizuf-hozax -solera:xinim-mugyg-zityx -solera:xohoh-kycim-rapax -solera:xiveg-lemuz-nypix -solera:xuros-cihib-forax -solera:xudom-kiryb-fecex -solera:xisob-sacik-nazox -solera:xumif-fetyc-cuvex -solera:xenik-bugev-racix -solera:xefak-hymim-ponix -solera:xekab-fupep-tygix -solera:xotob-ducuf-bakax -solera:xitev-puhit-vyrax -solera:xupif-reluc-sokax -solera:xotik-mavov-pahox -solera:xorak-bysog-gulax -solera:xolis-tocat-muzyx -solera:xopez-duvul-zudix -solera:xinek-rydyl-puhyx -solera:xuher-budyg-zypux -solera:xopok-febir-fabax -solera:xireb-dobyl-ludox -solera:xukob-zaviv-ficax -solera:xumav-vylec-batix -solera:xogil-sahid-dubux -solera:xigol-renal-sehex -solera:xuvoc-lutud-mefyx -solera:xibak-tupol-filix -solera:xemog-tuvim-regox -solera:xigim-benyv-motax -solera:xezog-balom-pevax -solera:xofit-gifan-cydyx -solera:xolas-cogaz-byzox -solera:ximor-zocyp-bekax -solera:xocem-nizyt-notix -solera:xupil-fepyz-ginox -solera:xoces-cuzup-ryfix -solera:xuhen-zikyp-sisax -solera:xetam-rydit-gilix -solera:xofas-lugaf-zimox -solera:xofiv-kevec-denux -solera:xokit-lires-fefux -solera:xegof-kasym-bezox -solera:xivok-zypov-mikox -solera:xufoz-geluk-gulix -solera:xirav-nagys-lipyx -solera:xevaz-zatez-mynox -solera:xusap-zavyz-lakix -solera:xomim-pyfoh-gicux -solera:xudor-vykez-fadox -solera:ximab-guryv-muhox -solera:xizin-kydyc-himox -solera:xudon-kebul-pepox -solera:xusic-gazes-kefex -solera:xetic-rysot-gonyx -solera:xecef-sulul-cymyx -solera:xunep-rysos-kofex -solera:xohab-tecog-nydex -solera:xipeb-maryk-fyfox -solera:xerek-myheh-zunyx -solera:xukal-misil-cirux -solera:xogab-fypis-huzex -solera:xohen-tibuv-fogux -solera:xibel-cycep-tusix -solera:xobak-ropom-hyvix -solera:xehal-tagak-garix -solera:xuvog-kuvem-nahix -solera:xinem-mupuk-zozax -solera:xosim-begop-kezux -solera:xeciv-bicob-lifix -solera:xomor-butac-cilox -solera:xonad-velel-garix -solera:xozib-vilof-gatyx -solera:xihoc-timap-novix -solera:xozak-bifud-sezex -solera:xufac-zozab-hekex -solera:xireh-cobyc-mecyx -solera:xefif-tumym-hepix -solera:xesac-kydis-cemux -solera:xorif-fobur-socox -solera:xigoz-hocor-harux -solera:xikef-ropep-tibox -solera:xulig-tarof-sikyx -solera:xutas-digit-lezex -solera:xutiv-girep-luzex -solera:xudat-pagif-vysyx -solera:xemos-dabyc-lonyx -solera:xunic-vogep-savix -solera:xumor-mybis-nizex -solera:xuveh-vibib-tudux -solera:xugep-tupoh-botox -solera:xovez-fikys-subex -solera:xefiv-luhum-badux -solera:xebos-fedok-necyx -solera:xuzam-navig-ronox -solera:xeson-bycah-zitax -solera:xolin-sivur-byzyx -solera:xekeg-behyn-fypox -solera:xenib-myrec-gigyx -solera:xuzar-fevoz-tylox -solera:xolov-bytir-getix -solera:xokod-comot-sanox -solera:xuceb-dofyf-cumax -solera:xitod-vuvom-gyhox -solera:xinit-lataf-foryx -solera:ximir-bosad-renex -solera:xebap-cylur-fylox -solera:xumod-semok-sekox -solera:xitic-hemen-kafex -solera:xefeb-dobab-kypux -solera:xofac-bynyf-zyvex -solera:xifen-fukiv-vezax -solera:xiveh-rocon-pamux -solera:xikeb-ligyn-hasux -solera:xetik-cenir-tivyx -solera:xerer-mavik-cyfex -solera:xuhon-mozos-kizyx -solera:xoviv-zyvig-ryhyx -solera:xifec-hifur-sefux -solera:xusar-lifel-takox -solera:xokal-bevyc-mipux -solera:xevin-tesah-hyrex -solera:xopef-bomuf-lehix -solera:xucod-kilit-petax -solera:xufib-masyc-syvix -solera:xepov-nezic-tetex -solera:xomiz-cafog-zudox -solera:xemos-poral-mumux -solera:xikot-tifik-vacex -solera:xohap-cokys-pasox -solera:xemac-labap-mikex -solera:xizik-fymin-copax -solera:xukok-horum-puvix -solera:xotam-raroz-dumax -solera:xirim-zizob-zicix -solera:xetid-ragag-dymix -solera:xusoz-symus-genyx -solera:xubeh-govep-kitix -solera:xemek-sygok-cudax -solera:xolat-tanok-pykyx -solera:xidam-vypir-senux -solera:xilaf-dorup-sivux -solera:xezeb-kihel-tozex -solera:xubem-nigyg-ryhux -solera:xebet-zipol-pypox -solera:xeved-betin-bumux -solera:xirev-togin-tevax -solera:ximag-noreb-sepax -solera:xupeb-cavyn-devox -solera:xomek-gitut-burox -solera:xuher-golyp-safyx -solera:xukic-sykod-secex -solera:xorek-behof-sarux -solera:xuvab-monoc-vazax -solera:xihal-tader-lisox -solera:xevig-nysyp-navex -solera:xofon-mibik-nafix -solera:xucac-fufen-cobyx -solera:xidiz-pybym-fanax -solera:xuzos-byzeb-byhyx -solera:xired-retuf-digox -solera:xevar-honet-hebix -solera:xogeh-pifeg-curax -solera:xisef-filub-zedox -solera:xodaz-kylyv-zykax -solera:xozev-lenos-befax -solera:xidov-mepun-dolex -solera:xokac-fuvob-macax -solera:xilam-satym-bafyx -solera:xidap-lahuh-navox -solera:xubim-luhol-lohox -solera:xugon-bobug-bubax -solera:xidol-kesak-dokax -solera:xovet-zylig-misix -solera:xovev-kehop-hotix -solera:xuhik-cavov-zoryx -solera:xotot-ducur-zefyx -solera:xolos-cymud-safax -solera:xisic-hicag-tynux -solera:xenem-regom-dokox -solera:xurek-murar-pumox -solera:xezic-dikal-hybox -solera:xuvaf-dubug-pykex -solera:xunes-sibip-dimox -solera:xemel-vivod-huvyx -solera:xikeg-lulov-nanyx -solera:xudad-micoz-totyx -solera:xelav-tofun-hykux -solera:xiris-vyrig-mitax -solera:xifok-cudok-zotyx -solera:xilav-digec-lumax -solera:xoseb-bokoz-helyx -solera:xigav-kuren-hozex -solera:xocat-maren-nekyx -solera:xitok-babiv-satex -solera:xusis-negyb-darax -solera:xotor-lihyb-zidyx -solera:xezom-kakid-ruzyx -solera:xigav-bagyc-rerex -solera:xosep-vukyf-macox -solera:xelor-vupyg-pydux -solera:xison-sonyg-lyfyx -solera:xomot-vehav-makax -solera:xurok-forug-lyryx -solera:xipaf-zacet-culux -solera:xofen-favyh-pomux -solera:xecah-bynov-cekyx -solera:xeket-dizev-lonux -solera:xorif-tetut-dibax -solera:ximat-filag-rycox -solera:xoriv-vuvol-nefox -solera:xicoz-guruh-lacux -solera:xosib-zidoz-nabux -solera:xudiv-kives-bezex -solera:xopos-matez-tybix -solera:xepaz-huhub-lahyx -solera:xibam-nyhum-sahox -solera:xedot-gamog-ripux -solera:xevoz-pytat-vatex -solera:xugol-holyl-makyx -solera:xehog-nycam-pupux -solera:xebos-fikob-lihix -solera:xipop-sukul-gitox -solera:xezak-biduv-sebix -solera:xotac-dituk-vorix -solera:xusod-fivir-bikex -solera:xefoh-focik-zunox -solera:xulab-fopof-tyfyx -solera:xedil-lucyk-vypux -solera:xokof-pudat-rohox -solera:xeneh-gemuf-bilix -solera:xevav-hyric-nezax -solera:xonek-meriz-fupux -solera:xekok-cafin-vitax -solera:xihag-nisom-fuhix -solera:xefif-pysit-lirax -solera:xisor-lazyk-mopex -solera:xogis-gifyd-bymyx -solera:xunas-tirod-bobyx -solera:xecec-gifyb-bubyx -solera:xilig-hacic-rolox -solera:xovam-bevyb-cofux -solera:xipar-runuh-pusux -solera:xipoz-ginas-botyx -solera:xosob-zunis-fifyx -solera:xoveg-dezek-pylax -solera:xuhev-hasam-zynix -solera:xonih-fypyk-hyvex -solera:xopop-fylik-vygux -solera:xedam-ruson-fudix -solera:xikad-ceruh-lazex -solera:xotop-kipop-hurax -solera:xohem-zycab-vyhyx -solera:xolak-vihad-nudex -solera:xehih-zogib-dybix -solera:xobed-fidud-bycox -solera:xitim-rahit-fehex -solera:xidor-teser-dovix -solera:xikid-senev-subex -solera:xunin-timoz-busox -solera:xopen-durop-denux -solera:xidig-zypub-zimix -solera:xeram-peduz-kulox -solera:xemob-tilis-patex -solera:xuteb-licez-fytex -solera:xotob-rofev-hakex -solera:xigob-zecad-lokux -solera:xiker-kocun-gadix -solera:xemen-kizat-gudox -solera:xumas-kehel-tisox -solera:xihil-zygoz-gotix -solera:xilel-hylim-dylix -solera:xugig-kohah-byrix -solera:xevot-kyrur-hydyx -solera:xecal-myvop-rosox -solera:xudid-lepav-nybex -solera:xitip-tobep-bogyx -solera:xinav-hapim-fezyx -solera:xisir-motog-zopox -solera:xohaz-suzib-hyvyx -solera:xeniz-nydit-kagox -solera:xifef-pomas-cilax -solera:xufev-dafih-kumex -solera:xepif-gafyf-tebox -solera:xilic-kotod-fitex -solera:xitih-kavig-lesex -solera:xikas-firuh-dilox -solera:xeren-zakum-tykox -solera:xohal-fypoh-vymyx -solera:xegat-kotov-dydyx -solera:xinor-nenok-zodix -solera:xitin-fedez-luhax -solera:xevag-fumyk-gevix -solera:xenaz-ravik-turex -solera:xihor-belav-hifax -solera:xebok-hokoz-bevax -solera:xisep-gekuv-peryx -solera:xecor-sycaz-zizux -solera:xomeg-menip-hinox -solera:xubos-zepug-didux -solera:xirib-pabyg-tepax -solera:xenad-zacog-vazox -solera:xovap-kivuz-kovox -solera:xesin-luner-tehyx -solera:xegec-zylep-zilex -solera:xohom-comik-bisyx -solera:xeges-zutot-fehux -solera:xitib-riliz-gerox -solera:xigog-kiduf-bovux -solera:xecir-kubur-bolox -solera:xemok-camol-redix -solera:xuleg-dutyh-fabex -solera:xecis-dogez-cypyx -solera:xivat-povog-pehyx -solera:xesip-zukag-myvyx -solera:xifol-vehiz-hekax -solera:xeleg-tydir-letex -solera:xekog-pasug-ragyx -solera:xibig-dynuz-zavex -solera:xolok-sitov-fazox -solera:xepop-zinod-hagux -solera:xorel-cylim-pivix -solera:xobag-bemad-bolyx -solera:xucas-lalyg-bonox -solera:xisah-huzov-lopyx -solera:xulah-ryryh-dafax -solera:xigag-nydaz-sudix -solera:xotap-gorat-navyx -solera:xolaf-lofac-digox -solera:xehot-fizuc-dypox -solera:xoman-pemom-huryx -solera:xemim-fomyd-mykix -solera:xesab-lifen-havex -solera:xucof-kebip-cytax -solera:xesig-kydyl-zerex -solera:xiton-fedir-zocex -solera:xibop-mifem-puzux -solera:xudoh-lekoh-denux -solera:xocot-pepob-zafyx -solera:xupep-cosez-cilox -solera:xedib-dicin-dyvox -solera:xitap-motyp-vyrox -solera:xugol-nusal-fyhix -solera:xizeb-zidep-nohux -solera:xepaz-nafib-robox -solera:xogel-betyh-fifux -solera:xuvef-vydol-kimax -solera:xetib-nozen-manix -solera:xotok-relen-zybax -solera:xolig-limef-bohix -solera:xusoz-sozob-temox -solera:xuhot-rumid-tinyx -solera:xufid-godup-gonax -solera:xenat-hupih-kotax -solera:xuheb-vatar-remex -solera:xulen-mikom-dusex -solera:xucac-fazab-nofax -solera:xutot-zehol-tegix -solera:xepaz-novas-fehix -solera:xumav-lamog-hilex -solera:xezop-pubec-tosux -solera:xinig-mysys-dupyx -solera:xudif-vydop-burox -solera:xeceh-fydoh-betyx -solera:xigob-vifak-mefax -solera:xisih-nuzas-tagyx -solera:xopaz-zolyc-dehyx -solera:xeras-cyzoh-kosux -solera:xihon-nylok-gydix -solera:xizef-camyf-pisyx -solera:xehob-bytut-bagux -solera:xoleh-tynog-lobyx -solera:xulag-susop-bafix -solera:xoval-vukuz-navyx -solera:xutam-bizob-banix -solera:xeran-lyliz-nihax -solera:xisip-bucas-kilix -solera:xisiv-mylam-gevox -solera:xomov-pepoh-bygex -solera:xipid-gytar-cycix -solera:xukih-milec-renyx -solera:xipad-himol-vocax -solera:xipac-kazep-sevax -solera:xegib-lemev-velax -solera:xuzad-dadid-sysex -solera:xukob-bukan-zygax -solera:xigel-bokel-vibyx -solera:xotob-gizig-vyzux -solera:xocov-fufev-damix -solera:ximog-fopil-gehux -solera:xoneh-vobis-bafyx -solera:xovof-hyfyd-ryzox -solera:xerit-manok-kocex -solera:xerec-lolor-makix -solera:xicon-tisec-sypyx -solera:xubik-bunul-pidax -solera:xucip-cylim-degox -solera:xunos-rozug-tebox -solera:xefos-ducyk-kobyx -solera:xuvoz-pohih-lyfax -solera:xerit-zugep-hypix -solera:xocas-ditov-nipux -solera:xorib-hyfim-giryx -solera:xobiv-hulec-myzux -solera:ximik-mufep-zotux -solera:xicer-devuf-tyhux -solera:xevek-lyfed-dezax -solera:xiriz-hakyp-bozyx -solera:xofag-kafuc-pyvax -solera:xunor-pidug-bukox -solera:xobes-zavab-tubex -solera:xevek-zabuc-hynax -solera:xohis-cemyl-nozyx -solera:xotad-behiv-hukex -solera:xiviz-muges-conox -solera:xepez-lameh-vovox -solera:xocih-zofav-sygax -solera:xuloh-bikyh-nalyx -solera:xusoz-namuc-myvix -solera:xuked-lahib-zilax -solera:xipon-zobig-cimux -solera:xofah-bydyc-nydix -solera:xuzot-hydum-gudux -solera:xolik-bucuk-keryx -solera:xocaz-tolah-nurox -solera:xosek-vypas-dobix -solera:xidak-mozec-zotax -solera:xomad-ranop-zakux -solera:xopit-todis-murax -solera:xogon-genyp-ronix -solera:ximab-halyv-zehex -solera:xined-lidyn-zotax -solera:xuzot-gacoh-gonox -solera:xuven-bilat-dasox -solera:xokez-rivyz-ravyx -solera:xuvov-puhuz-nyzux -solera:xiten-nanir-ritex -solera:xubaz-pydyd-kemox -solera:xekeb-konof-sobox -solera:xevof-sufiv-dozix -solera:xicip-zynab-gurux -solera:xuhem-dodez-zizyx -solera:xelin-gufin-magax -solera:xivaz-gufeh-lufix -solera:xifip-hysev-mypix -solera:xuvor-torid-sacax -solera:xipiv-rydut-bytax -solera:xukar-fefed-fugox -solera:xizav-sacat-dacix -solera:xecah-rulup-zumax -solera:xosef-mudeg-cazox -solera:xugog-vatyb-zybyx -solera:xohif-delad-rotox -solera:xodod-nenob-cidex -solera:xigaz-kicom-zesax -solera:xeses-bilir-pobax -solera:xites-zizyv-ledex -solera:xudah-zilez-zezux -solera:xokab-rigen-pytyx -solera:xefim-sosat-bagix -solera:xirek-pagor-migix -solera:xozac-votul-kymax -solera:xudeg-pycic-lubyx -solera:xedod-vomuk-behox -solera:xunot-tegeh-vusax -solera:xigev-vifom-folyx -solera:xinis-depuk-virox -solera:xefih-micit-vibex -solera:xekes-cuvyz-hucyx -solera:xuvep-moceh-tubax -solera:xecaz-cunyf-pufox -solera:xuheh-gofyz-kuhax -solera:xecaf-zamed-konox -solera:xoboh-funyt-vibix -solera:xipov-cites-tufox -solera:xiger-fosah-dedex -solera:xeraz-solyc-sufux -solera:xudik-piboz-dedex -solera:xogip-syfet-sirix -solera:xevop-cadac-mifix -solera:xipis-hipun-belux -solera:ximol-locur-rovux -solera:ximor-notam-subox -solera:xugaz-cegul-nyvex -solera:xuked-bysut-mimix -solera:xubil-vupon-hycux -solera:xucak-dysyt-gazix -solera:xerov-vikyh-docix -solera:xemif-ruvyc-zohux -solera:xodok-mumiz-mezex -solera:xozeb-goseh-migex -solera:xuzid-zitys-cupyx -solera:xedip-zynic-vygax -solera:xucen-zigec-rerax -solera:xogef-toren-dirax -solera:xudig-revyg-fyzix -solera:xivel-kesef-rohux -solera:xorod-gipem-lodix -solera:xehab-kesod-vyvyx -solera:xotid-socus-hivix -solera:xufef-fokib-diryx -solera:xumov-hapok-damix -solera:xunos-gekos-lyhox -solera:xecov-lazyt-zylux -solera:xetov-fekah-lisax -solera:xikec-sinim-livax -solera:xusol-bivag-dodyx -solera:xoval-ciliz-rorax -solera:xuren-sykud-dabex -solera:xulap-tibym-tibex -solera:xesic-kyfun-rusux -solera:xemak-vucuk-lyvux -solera:xorat-kofym-zuzex -solera:xugig-cepyv-lelux -solera:xipip-becez-lysyx -solera:xoses-vulur-dozix -solera:xusem-vavac-bimex -solera:xodiz-nopys-kihux -solera:xisir-lypif-silax -solera:xosop-botug-socax -solera:xeseg-nevev-fydux -solera:xetet-pivyz-hytox -solera:xevaz-gihyf-kufyx -solera:xekin-libun-batix -solera:ximac-fonin-mylix -solera:xedeb-logis-menux -solera:xebap-nalav-fuvax -solera:xihon-fihav-gurex -solera:xocin-cybiz-bacox -solera:xutiv-hagup-punyx -solera:xiras-hehug-navax -solera:xozom-fycic-pydox -solera:xoteb-nymak-guzux -solera:xibas-ferot-dumix -solera:xepes-setat-hysux -solera:xodos-bazub-sepex -solera:xorit-nofif-panyx -solera:xizer-cumym-cetyx -solera:xubed-niguh-farex -solera:xegac-bizuz-dytox -solera:xuvif-zapyd-cuzox -solera:xodog-dibaf-hokix -solera:xufel-katev-legex -solera:xecef-tegum-nihyx -solera:xupom-galoh-zamux -solera:xulof-fanyk-pebax -solera:xohad-kyger-zebux -solera:xuceg-cabec-kodex -solera:xorek-nobuk-nykux -solera:xemim-lemoh-rokax -solera:xugip-ruryh-puvex -solera:xuzan-ganev-fisyx -solera:xikat-hanep-subux -solera:xedos-zecam-badux -solera:xibic-lynud-kutax -solera:xobis-nalad-bokix -solera:xusaf-cadop-zecux -solera:xilab-sokor-fomax -solera:xupat-bifef-ryhux -solera:xevat-guveh-ramex -solera:xuhed-gidop-lisyx -solera:xepis-fysep-terux -solera:xopec-senur-mahux -solera:ximid-rufig-bakex -solera:xivib-zukiz-nedix -solera:xibam-limud-febax -solera:xefir-fosyc-lebyx -solera:xiroc-pybon-muzex -solera:xufaz-rukab-fudax -solera:xenoz-fykir-dydyx -solera:xiked-lenap-gyryx -solera:xibod-sykuf-nuvex -solera:xorok-fylyt-dytyx -solera:xukab-gorek-syvex -solera:xivev-lopeh-mohix -solera:xupol-nohov-furix -solera:xegok-kates-supax -solera:xidib-lohur-bamyx -solera:xerok-pokig-sifox -solera:xopak-vohyt-gikyx -solera:xuzev-pafac-sehyx -solera:xusef-kidam-sanox -solera:xitan-maden-cipax -solera:xubaz-goteh-vitax -solera:xukid-mydyn-figox -solera:xeris-lumab-dydyx -solera:xileg-lisuk-zutix -solera:xezoc-zymit-raryx -solera:xoget-mahyg-himix -solera:xidan-fokik-sopox -solera:xozil-mudul-rovix -solera:ximoc-pehor-makyx -solera:xufan-kided-gekex -solera:xepeg-lavat-zavax -solera:xuhem-febok-kifix -solera:xupik-pohon-kezyx -solera:xocig-sycuz-bidyx -solera:xocos-lacyd-ficax -solera:xuvol-sipon-komax -solera:xumaf-dazan-tymux -solera:xofik-lymyg-ruhix -solera:xokin-hugol-dafux -solera:xikam-bitun-dikux -solera:xusaf-zifun-kytux -solera:xihem-ludol-herox -solera:xikad-renyd-lovox -solera:xilav-somoc-mafax -solera:xolif-lyzun-tukux -solera:xobam-mypun-gynex -solera:xutom-gopic-bizex -solera:xerom-cipet-vabox -solera:xoron-vyryh-pipox -solera:xotov-lafaf-fovix -solera:xigin-cylip-dezix -solera:xotak-melod-pibox -solera:xelah-nofon-merax diff --git a/packages/splunk/splunk.mk b/packages/splunk/splunk.mk deleted file mode 100644 index c256ba6..0000000 --- a/packages/splunk/splunk.mk +++ /dev/null @@ -1,8 +0,0 @@ -splunk-source: -splunk-build: - -splunk-install: packages/splunk/tokens.txt - mkdir -p $(TARGET)/splunk/ - cp $< $(TARGET)/splunk/ - -PACKAGES += splunk diff --git a/packages/splunk/tokens.txt b/packages/splunk/tokens.txt deleted file mode 100644 index 9473cfa..0000000 --- a/packages/splunk/tokens.txt +++ /dev/null @@ -1,1000 +0,0 @@ -splunk:xucip-nedyn-cusex -splunk:xudac-diduf-corix -splunk:xohas-zecyl-papix -splunk:xohit-fipih-fizax -splunk:xurer-putov-sicux -splunk:xelig-pivoz-ficux -splunk:xufel-rysyg-pyhax -splunk:xotem-sizil-kusux -splunk:xulov-devat-zozux -splunk:xifot-piham-sabax -splunk:xigib-tetub-zilux -splunk:xogop-hykof-videx -splunk:xogof-kulor-nekax -splunk:xulim-penom-marex -splunk:xeser-buroh-pysyx -splunk:xudat-zinec-nadax -splunk:xomiv-vofiz-lilax -splunk:ximan-nyker-fazyx -splunk:xudef-tagig-dafox -splunk:xevop-tutyr-tamox -splunk:xomos-nokon-damex -splunk:xugor-pokys-vyfex -splunk:xerip-cozah-limex -splunk:xukob-zymim-ripux -splunk:xorid-cibin-mozox -splunk:xuhig-rener-sulox -splunk:xobac-byvid-gasux -splunk:xidik-sopov-tolyx -splunk:xufaf-lalor-zycox -splunk:xunor-guran-pevex -splunk:xugih-cycik-mygux -splunk:xevom-zavoc-hicax -splunk:xupak-nipip-hapux -splunk:xohop-venyc-kigox -splunk:xekad-pipen-nuzux -splunk:xoger-penar-zodax -splunk:xezip-rakal-kygyx -splunk:xozih-rytus-fomox -splunk:xigar-sokad-mufyx -splunk:xuhav-falyd-cigyx -splunk:xumom-saben-bedix -splunk:xuhos-dolob-zupax -splunk:xovet-butas-munix -splunk:xezan-rutom-mezox -splunk:xipom-hihaf-kocax -splunk:xidoz-vupug-visax -splunk:xogib-boguc-lipux -splunk:xilot-suzah-kytex -splunk:xoser-dogun-racux -splunk:xokid-nonec-sogix -splunk:xupof-vukot-legex -splunk:xifer-culag-gasex -splunk:xudih-bysyv-numyx -splunk:xuzen-vobum-cizyx -splunk:xedol-sifed-zimex -splunk:xupos-bodiz-rifax -splunk:xoveb-zudop-kicox -splunk:xitot-hehor-zidox -splunk:xozin-fibic-kibax -splunk:xibal-gybak-dicix -splunk:xideg-satyh-zesux -splunk:xevoh-rekep-relex -splunk:xugam-gofug-semix -splunk:xecop-dobar-hotix -splunk:ximog-nysuk-dyhox -splunk:xegon-kesiz-zynux -splunk:xugek-vocef-cugex -splunk:xolak-tosyv-kunix -splunk:xebet-sekuf-kunox -splunk:xutat-tudab-givox -splunk:xenab-ducik-mopex -splunk:xigar-rusis-bosax -splunk:xeran-kukil-vufux -splunk:xeret-ripad-zadix -splunk:xerog-gopef-pidyx -splunk:xihim-dazon-tovax -splunk:xutid-butek-menex -splunk:xoced-godol-ropax -splunk:xuvap-gakih-vahyx -splunk:xuhel-fyhet-dycex -splunk:xohil-minub-tupax -splunk:xobev-pohub-gitox -splunk:xevib-vygak-sulyx -splunk:xihes-bimaf-hadax -splunk:xibor-cyhin-tutix -splunk:xodal-fukan-gytex -splunk:xisev-bemuv-dipix -splunk:xekoc-nocit-dumox -splunk:xigor-hamep-vutox -splunk:xugog-rucuv-tenox -splunk:xilom-guviv-pibyx -splunk:xulah-ziroh-cymax -splunk:xigec-ribum-tyfyx -splunk:xococ-dusyg-sekyx -splunk:xohoh-bidap-funox -splunk:xupag-sohyg-makix -splunk:xivas-huneg-cobex -splunk:xidak-noled-cypix -splunk:xomad-sicok-sopex -splunk:xusov-dehyb-lugex -splunk:xofoh-lukyc-kadix -splunk:xukog-zuraf-rytyx -splunk:xibek-bemum-gehyx -splunk:xesic-rurog-zefex -splunk:xutin-loded-valix -splunk:xepac-tilaz-sagox -splunk:xuzev-myguc-zypex -splunk:xekaz-local-zohix -splunk:xetod-tyfac-sakox -splunk:xovig-cycip-bypyx -splunk:xohin-vusuv-lubax -splunk:xidid-rohah-zyvix -splunk:xogef-fuzag-bilax -splunk:xusez-gyhyp-gedax -splunk:xuzer-makim-lopyx -splunk:xibeg-byrud-rogox -splunk:xotis-nagov-rohux -splunk:xosop-zibed-tomox -splunk:xoziz-kucen-fazex -splunk:xetob-vyhog-rytex -splunk:xegoh-todyt-tidux -splunk:xezok-husog-nunax -splunk:xunos-pokuz-hycax -splunk:xufik-pyson-dikex -splunk:xesaf-vimof-ronax -splunk:xonov-hahiz-cekox -splunk:ximik-becid-nydyx -splunk:xufal-gohes-girax -splunk:xusek-lopac-fivax -splunk:xusok-gehen-motux -splunk:xugic-typak-ramux -splunk:xinob-dorin-gyvox -splunk:xukev-sozit-tumex -splunk:ximeb-vozit-tefux -splunk:xubik-tosil-hofax -splunk:xozam-kusim-bobox -splunk:xilef-tyvaz-dysix -splunk:xocob-dazob-rygux -splunk:xilob-polip-nunyx -splunk:xidat-disic-lanex -splunk:xugom-zirak-pupox -splunk:xucaf-netin-zutax -splunk:xetez-fusug-tukix -splunk:xuzod-ginus-sehex -splunk:xinos-notyr-kevix -splunk:xecek-lavaf-somox -splunk:xeken-nycus-dobix -splunk:xubet-gyroc-linux -splunk:xisoh-filac-batax -splunk:xipoz-hoham-natyx -splunk:xosot-cacur-sodax -splunk:ximan-gylad-covox -splunk:xoted-datin-cytux -splunk:xihop-nogyf-komax -splunk:xogih-levih-zadux -splunk:xuzir-sanuf-nedax -splunk:xuleg-gacob-kokax -splunk:xuved-bavym-setox -splunk:xudig-vypoh-zucox -splunk:xubom-kylup-bicux -splunk:xivek-muhur-nopyx -splunk:xodoz-dofas-ricax -splunk:xekan-kykem-fofux -splunk:xogon-gedyk-vokex -splunk:xisan-zenuc-lasix -splunk:xezip-secal-ribax -splunk:xusip-bamyz-kuzix -splunk:xegef-danyl-hudux -splunk:xeped-tuhiv-zodux -splunk:xefev-rohuz-munix -splunk:xifes-vepah-bekax -splunk:xobiv-kefyr-hysux -splunk:xisic-fecec-neryx -splunk:xoned-syhiz-tykux -splunk:xidot-munyh-nonox -splunk:xipig-fusan-lagex -splunk:xukep-talab-kuhax -splunk:xubod-hyviz-fezux -splunk:xomap-pemez-tudux -splunk:xeret-zacez-bopux -splunk:xerem-nubef-mafix -splunk:xopim-zedok-binix -splunk:xuhoz-lybep-zepox -splunk:xukal-posyl-vakux -splunk:xifer-paviv-cavux -splunk:xubiz-nykud-dudyx -splunk:xehom-tugub-tafyx -splunk:xizan-hugoc-cufux -splunk:ximep-selyr-bolex -splunk:xotig-zihaf-lusux -splunk:xegeh-gabad-veryx -splunk:xemah-vabyr-ribyx -splunk:xopor-zicyc-hipix -splunk:xorip-zifer-focex -splunk:xeked-cytyr-benux -splunk:xifoh-povaf-kyrex -splunk:xudir-raryd-basyx -splunk:xegas-vasym-vomox -splunk:xetir-cicam-cokux -splunk:xigok-lanez-sonix -splunk:xesel-mihaf-lygix -splunk:xipoc-kumut-lofox -splunk:xeran-monaf-tefox -splunk:xurih-timec-hybix -splunk:xugop-zunab-todax -splunk:xolik-berup-lufex -splunk:xopaf-pakym-rerux -splunk:xebob-filul-fogox -splunk:xosic-roduc-lovux -splunk:xivit-tovam-rufex -splunk:ximeg-kezyn-sytox -splunk:xuhom-kikyd-demex -splunk:xihig-conaf-kiryx -splunk:xeseh-lurag-zulux -splunk:xeper-tohof-hafix -splunk:xemik-gugyn-levax -splunk:xebet-denum-zosix -splunk:xilih-tetez-rufyx -splunk:xetog-pupem-labox -splunk:xukol-hacih-lafax -splunk:xonat-digiz-vevux -splunk:xefik-vafar-gahix -splunk:ximok-totis-cinux -splunk:xosoc-gigor-zatyx -splunk:xecis-kenyk-sybix -splunk:xoner-dotel-lydux -splunk:xolav-moraz-lubix -splunk:xuver-piben-tulox -splunk:xocon-tyvul-kylex -splunk:xetan-gepuk-venex -splunk:xubat-desin-votyx -splunk:xomoz-cihan-zatyx -splunk:xovic-hygep-kyzax -splunk:xizol-menig-zonyx -splunk:xibaz-tybud-kumex -splunk:xerot-pagym-myvix -splunk:xizib-gytef-pacex -splunk:xuvop-gamaf-mufax -splunk:xosib-rumib-pumax -splunk:xumid-begim-zavix -splunk:xezot-kisil-sonox -splunk:xunig-bezyb-bagex -splunk:xikem-cenap-pezix -splunk:xohec-sylal-hibyx -splunk:xotas-kevuf-mufex -splunk:xucoh-rurog-lesix -splunk:xotov-gihic-gyfox -splunk:xozov-penag-rucex -splunk:xuvad-lecot-zokex -splunk:xedeb-kipav-gydix -splunk:xogor-miban-satax -splunk:xovob-nymab-fityx -splunk:xicip-luvyd-tihyx -splunk:xofen-favuh-rafex -splunk:xuhel-bapyz-sinex -splunk:xugan-vadyn-bofex -splunk:xigic-bekyh-tugex -splunk:xunif-tugun-cabox -splunk:xitan-gyryn-numix -splunk:xomic-tuvit-vygix -splunk:xokag-bilit-byryx -splunk:xutan-ceput-putux -splunk:xokoc-kumyv-nehax -splunk:xokal-vivoh-dyvyx -splunk:xohip-fozen-kifax -splunk:xuhiv-rakiv-lytyx -splunk:xolaz-lazoh-nogex -splunk:xufas-zinah-givux -splunk:xidaz-tadoh-norex -splunk:xigad-zatas-fekox -splunk:xosop-gevud-sozox -splunk:xohep-kukak-giryx -splunk:xolat-lylud-pofyx -splunk:xeher-kemih-sipux -splunk:xotom-talad-verix -splunk:xesik-zynir-cikex -splunk:xuliz-rutul-betox -splunk:xumor-gupun-mitix -splunk:xegod-sufec-hamox -splunk:xigav-mivar-hatyx -splunk:xevil-vaseh-dovex -splunk:xusaf-hemec-zizux -splunk:xibal-pebif-dyzux -splunk:xitod-sofal-lipax -splunk:xuhes-losep-pesyx -splunk:xudam-peref-kubyx -splunk:xebon-bugyb-bedax -splunk:xugac-kotet-cuhex -splunk:xekev-bodep-vusyx -splunk:xohah-dehip-nyzux -splunk:xozik-kofer-harox -splunk:xotes-pubac-natox -splunk:xekip-tokok-gitux -splunk:xupos-zozyz-bypux -splunk:xulog-nufas-figox -splunk:xofod-sotim-sozox -splunk:xezez-zogak-cigex -splunk:xofif-pugyd-gavyx -splunk:xepak-rofen-gofex -splunk:xebog-titiv-movex -splunk:xosab-zukan-nurex -splunk:xufeg-legyg-labyx -splunk:xozep-monuh-vezex -splunk:xurar-nicon-tafox -splunk:xukem-vypev-difix -splunk:xoded-kagez-kepax -splunk:xenot-muhas-lacix -splunk:xupor-sofen-cagix -splunk:xuvel-zyvet-pyfix -splunk:xucam-cipam-nefyx -splunk:xufes-binud-sozox -splunk:xuvil-mypef-sydax -splunk:xivad-bomos-fosox -splunk:xeliz-gucat-tonux -splunk:xopip-liryp-tolyx -splunk:xefec-mopyc-ratax -splunk:xuzah-gedud-ribox -splunk:xeber-fameg-capix -splunk:xemok-bytyz-zypax -splunk:xuded-lihek-vapax -splunk:xorar-coral-bytex -splunk:ximod-funof-nolyx -splunk:xetip-gebeh-gicox -splunk:xogol-hekeb-dulix -splunk:xuzok-hikav-kilux -splunk:xesod-fimim-cyfex -splunk:xemil-tymit-hymux -splunk:xiveb-sekon-sotix -splunk:xufep-gylak-kybex -splunk:xeted-sarak-bucex -splunk:xidev-vedyg-pahyx -splunk:xucop-fofog-rycox -splunk:xusan-lihah-mikox -splunk:xusak-sacyp-ruvox -splunk:xeriv-hulit-kanax -splunk:xunot-gepaz-vupox -splunk:xomed-naluh-capox -splunk:xitak-sudaz-nidax -splunk:xivik-hahev-sohux -splunk:xizoz-nalag-fyzyx -splunk:xovop-ravob-becix -splunk:xirav-vylug-zupex -splunk:xisot-bunek-sihux -splunk:xinec-zelos-bunex -splunk:xisim-vator-hugax -splunk:xocas-nyzut-norox -splunk:xoreg-hodum-kydyx -splunk:xodoz-gunyf-gerux -splunk:xodoz-nogiz-pumex -splunk:xetev-panym-penix -splunk:xudeb-kidyp-kimyx -splunk:xetes-rozif-gapix -splunk:xinod-fylaf-hapux -splunk:xurir-hazop-sasex -splunk:xomog-pikyz-netix -splunk:xenip-mopum-betyx -splunk:xotap-rugik-nahex -splunk:ximip-labek-mydox -splunk:xicot-fekyz-cyzyx -splunk:xibif-zupyr-fuzux -splunk:xesav-tigez-gopox -splunk:xesed-pelir-lyvyx -splunk:xoher-fosoh-cofux -splunk:xunep-basor-mibox -splunk:xegin-cegam-cunex -splunk:xidep-zirul-kivax -splunk:xetis-dodeh-zogux -splunk:xemim-zytuf-nahux -splunk:xozol-megal-sizyx -splunk:xokoz-tesun-berox -splunk:xopen-biseh-katax -splunk:ximin-vupyg-tohex -splunk:xezan-vugud-nycix -splunk:xipol-repyd-bylox -splunk:xitad-bohav-lehux -splunk:xirom-mazus-zutox -splunk:xopod-nicuk-vekex -splunk:xibom-ladym-mypex -splunk:xehac-lefaf-gadax -splunk:xevig-nagyd-rekex -splunk:xebok-remus-dydox -splunk:xifod-ginud-zonix -splunk:xibev-mohup-zumax -splunk:xuvel-zuvac-fuhox -splunk:xezir-zikab-pocyx -splunk:xifem-vipag-gybix -splunk:xinim-param-vivox -splunk:xufav-koces-cirex -splunk:xukil-nigac-hezox -splunk:xetot-zikil-gugix -splunk:xudis-fihib-cotux -splunk:xodit-zevom-lydux -splunk:xegel-ricin-capix -splunk:xudib-zazab-fyvax -splunk:xupel-mekym-redax -splunk:xokeg-zukah-nifex -splunk:xinaz-gokuf-bovox -splunk:xobes-cyfoh-pymux -splunk:xulic-homam-fusax -splunk:xizec-nacol-magix -splunk:xibop-rykem-naryx -splunk:xedag-citov-huryx -splunk:xogif-mucar-padyx -splunk:xocof-retas-pomix -splunk:xemik-puden-zesox -splunk:xedol-lytub-fepox -splunk:xicit-tydep-nylux -splunk:xumam-kasuk-rynex -splunk:xegas-lufed-hapex -splunk:xerol-bisuh-zalex -splunk:xebas-kezos-rynix -splunk:xozop-hevib-lytax -splunk:xoper-lybef-fukax -splunk:xodek-rurud-vunox -splunk:xodig-ceges-pilux -splunk:xicob-gipev-fybux -splunk:xigiz-gemef-dafox -splunk:xihic-vesuv-pinex -splunk:xenon-napel-ryhix -splunk:xorad-micym-zemax -splunk:xesok-kivyh-hicyx -splunk:xopig-moret-gyrex -splunk:xekor-lyrig-ririx -splunk:xukid-hohub-libox -splunk:xoreb-byhal-vatex -splunk:xeler-pukim-furyx -splunk:xinod-bitab-datux -splunk:xepes-byhyk-casix -splunk:xohes-tapat-cugyx -splunk:xihas-nogis-govyx -splunk:xomaz-bulyl-pubax -splunk:xobiv-ceteh-hedyx -splunk:xehek-mugav-vanox -splunk:xenep-datif-mofix -splunk:xupeh-tulad-nomax -splunk:xomar-kepid-rasux -splunk:xegez-kyvob-sahyx -splunk:xedel-pabug-fusax -splunk:xosev-hosed-monox -splunk:xihiz-cisyg-delux -splunk:xuvad-konof-fefex -splunk:xipih-mipor-kamax -splunk:xumad-kahaf-pyryx -splunk:xekot-razuz-mafux -splunk:xoles-mozef-duvyx -splunk:xerav-cenah-vedix -splunk:xetak-mesah-togyx -splunk:xizes-gygel-vulex -splunk:xucih-lyfig-nivyx -splunk:xehom-nyvin-ralex -splunk:xizap-pigel-mizex -splunk:xuhod-gyreg-tunex -splunk:xonal-hyguf-civex -splunk:xupoc-voher-tovyx -splunk:xodam-mepyh-refyx -splunk:xepim-vazer-bazex -splunk:xurov-simir-vunox -splunk:xodiv-hagib-huhex -splunk:xigal-syreg-kunux -splunk:xehoc-mulon-gemyx -splunk:xumad-huseb-fedyx -splunk:xipeg-bipir-mysix -splunk:xorof-cevan-vesox -splunk:xulif-mivep-hyvox -splunk:xopiv-pidag-lisix -splunk:xohod-fytyk-cydex -splunk:xepif-katus-kodix -splunk:xuren-zagab-zubyx -splunk:xopaz-venyh-bufyx -splunk:xutop-lades-gocox -splunk:xogez-ryvuh-lymix -splunk:xozop-hehif-sygox -splunk:xupeh-hiram-cynix -splunk:xurac-gamyz-gipox -splunk:xolol-bohoz-volax -splunk:xoler-rivim-pizex -splunk:xocim-tavoh-tevax -splunk:xetiv-buzim-vicex -splunk:xegod-cumyv-zykox -splunk:xokaf-fecoz-mebax -splunk:xukoz-fenok-cinex -splunk:xomaf-fibuh-vimix -splunk:xidon-cumyl-gahyx -splunk:xinad-mumar-modox -splunk:xuvak-cikef-titex -splunk:xurig-gared-notex -splunk:xozif-baviv-zecyx -splunk:xozab-tugir-tumyx -splunk:xebop-nopih-huzex -splunk:xebor-mogyl-zytox -splunk:xuhoz-rygig-mesox -splunk:xepel-ducun-bugyx -splunk:xefal-mavud-danox -splunk:xegim-mulyn-dalyx -splunk:xepat-zenop-kamix -splunk:xerap-biteh-comox -splunk:xubez-rytyp-tesux -splunk:xodoh-zacaf-rupix -splunk:xozim-vitag-semyx -splunk:xesim-cutig-danux -splunk:xekis-dyfan-degux -splunk:xesod-havik-febex -splunk:xelin-nizof-zyfix -splunk:xerec-dynug-zibax -splunk:xifos-mipid-zahyx -splunk:xibar-hubyb-bysux -splunk:xeboz-nahab-cevex -splunk:xobob-nopas-zyzix -splunk:xuneg-porab-botex -splunk:xicaf-vuvaf-lylux -splunk:xinih-gydel-senox -splunk:xopiz-fesys-cutax -splunk:xuvoz-bycad-dykax -splunk:xebiz-mabyr-luzox -splunk:xifar-pahep-fufyx -splunk:xopas-kysop-gazyx -splunk:xoker-gokym-vehox -splunk:xerod-fygon-vesex -splunk:xebok-gilaz-hibux -splunk:xolep-sazop-tatex -splunk:xesol-rikov-gufax -splunk:xefas-tekod-nikix -splunk:xozas-pesun-zynax -splunk:xopov-pudis-zyzex -splunk:xulov-sohil-zogux -splunk:xosel-gydyg-mydix -splunk:xuzim-dyhif-tahex -splunk:xodok-morad-nyryx -splunk:xilot-cosul-tyzix -splunk:xofov-pyhof-suhyx -splunk:xivag-vypob-fylex -splunk:xicol-pibyz-kidix -splunk:xutid-fymyr-cecex -splunk:xicir-vusek-gerax -splunk:xurep-ducah-zydux -splunk:xeboz-socap-pycex -splunk:xofom-hyfot-savyx -splunk:xebis-zeluv-rydix -splunk:xonek-pifip-myvix -splunk:xiril-fyvav-tyhyx -splunk:xofoh-hehig-zikax -splunk:xocir-nebiv-lerux -splunk:xonec-bivun-gynex -splunk:xoreh-rafic-syrux -splunk:xegeh-dynap-posix -splunk:xipoh-cufok-zusix -splunk:xecid-ranup-didux -splunk:xevif-natil-firyx -splunk:xovel-tycas-lezex -splunk:xufaz-fumuc-gimox -splunk:xolez-saluk-tedex -splunk:xemin-butam-tytyx -splunk:xepos-zuzid-kumyx -splunk:xehir-vopec-zanox -splunk:xifim-cucag-midix -splunk:xisen-cizeg-nylex -splunk:xopiv-hodus-bibix -splunk:ximip-nyryr-syrux -splunk:xukit-micyl-fecox -splunk:xudos-rotid-gonax -splunk:xibah-kalel-vazox -splunk:xuzon-zyfeb-codex -splunk:xizaz-tuduz-gydix -splunk:xizic-fezul-rugax -splunk:xocem-lyfal-dibyx -splunk:xegim-munyr-sirox -splunk:xevoh-bilec-pehax -splunk:xulit-dazag-vikix -splunk:xopin-timab-necix -splunk:xipig-febaz-nolex -splunk:xunib-bogyt-dybax -splunk:xodid-mubiz-mifax -splunk:xonoh-cunem-getex -splunk:xicos-fulod-parax -splunk:xulac-kubyg-cafux -splunk:xunat-cycuc-mezex -splunk:xupos-nodyt-nogix -splunk:xudez-tasuv-sygix -splunk:xidon-sugav-konax -splunk:xozez-rucyt-nugox -splunk:xiroh-hydac-sytyx -splunk:xicon-zifom-cizyx -splunk:xezen-nyrec-dunix -splunk:xekez-guzur-fomux -splunk:xodok-vysef-mihyx -splunk:xozet-natak-sisix -splunk:xohap-konot-kyvix -splunk:xorol-setyb-bifyx -splunk:xiked-mipun-gicax -splunk:xofal-ranyt-farex -splunk:xogic-toliv-vuhex -splunk:xubed-zabes-typix -splunk:xenid-rohub-susix -splunk:xidec-lyfyh-mygox -splunk:ximen-ryzon-nanex -splunk:xumik-disym-hapox -splunk:xucor-defel-tunax -splunk:xopih-hicon-hihyx -splunk:xeliv-sofup-pymax -splunk:xosad-zezez-garux -splunk:xicor-tusoz-vorex -splunk:xopap-sofof-bakax -splunk:xumol-tubez-rugax -splunk:xisik-relin-lolox -splunk:xogob-sukac-lycox -splunk:xolis-nuril-sydix -splunk:xukes-timod-fumux -splunk:ximed-tases-gubyx -splunk:xidoc-migik-mugix -splunk:xived-pevig-borix -splunk:xiloz-gidin-pynyx -splunk:xubag-gudok-nynux -splunk:xunor-kuciz-bukux -splunk:xuzib-dyvoc-sedix -splunk:xicov-hyrer-lahex -splunk:xokef-zapun-vasox -splunk:xisep-nelum-nohux -splunk:xenos-caner-besax -splunk:xuzel-ferof-vygix -splunk:xuses-bemif-rehex -splunk:xisad-sinav-vyryx -splunk:xenef-sovin-tihyx -splunk:xefek-vufek-cecix -splunk:xucif-nulil-satox -splunk:xepik-lepun-galyx -splunk:xuzal-ceser-porox -splunk:xoceg-rober-hylox -splunk:xibad-taryn-pazix -splunk:xidom-cinun-gufax -splunk:xorec-veduc-mitex -splunk:xodiz-vucem-zolix -splunk:xebin-fukyg-bihex -splunk:xevap-capoc-zisax -splunk:xuret-sanuz-rupox -splunk:xucah-zisek-rirox -splunk:xukin-vygyc-cyfox -splunk:xeveh-mazut-vezex -splunk:xufil-kazuc-fuhyx -splunk:xutic-sufav-tavax -splunk:xidim-tanuv-surix -splunk:xuzam-bumys-sifyx -splunk:xoniv-sykic-lygax -splunk:xuvin-hyget-gelex -splunk:xudor-hyvyd-nufyx -splunk:xerom-sobuh-zimux -splunk:xokad-gibev-dukax -splunk:xesaz-hykel-gidux -splunk:xigok-mihis-godix -splunk:xidab-mubip-hifex -splunk:xokoz-fosop-fahyx -splunk:xufod-gusyd-gocex -splunk:xegib-dimuz-zosex -splunk:xikek-lyrog-dabix -splunk:xunat-cykit-bymix -splunk:ximot-guvik-mubux -splunk:xirar-nufiv-hagux -splunk:xugep-dyfec-nudyx -splunk:xoteh-hihes-lucex -splunk:ximaz-liguk-sogux -splunk:xecor-nafom-vakyx -splunk:xotet-lecur-karyx -splunk:xotak-syneb-dazax -splunk:xebim-fakug-comex -splunk:xepig-mesiv-pahox -splunk:xofok-nefac-lyzox -splunk:xuseh-madol-rumox -splunk:xulip-cytyh-citix -splunk:xusor-zunav-pelax -splunk:xotil-minas-morax -splunk:xinis-zomez-rimyx -splunk:xudaf-zyheh-cugix -splunk:xepet-vylom-dacux -splunk:xebal-dehov-dipex -splunk:xuder-canev-sozax -splunk:xocid-tamuk-dycox -splunk:xitis-rohad-rogux -splunk:xevad-kuraz-mepox -splunk:xekaz-nomer-bulyx -splunk:xecec-ponyf-vufox -splunk:xusab-hapiv-holix -splunk:xorev-vugit-zasox -splunk:xisiv-rikap-henux -splunk:xovep-mygem-nohax -splunk:xusab-tafof-dycax -splunk:xukah-hamyn-zonox -splunk:xemov-limom-padax -splunk:xofol-cager-tivex -splunk:xemoc-velal-nynux -splunk:xodok-pegan-fadex -splunk:xuzal-puvon-dulex -splunk:xulin-sezog-zugyx -splunk:xuvof-cafip-delix -splunk:xucir-dufal-dufix -splunk:xudin-zizad-rygox -splunk:xucem-fudah-nufex -splunk:xodat-lozat-legyx -splunk:xoher-zycun-pobix -splunk:xudir-mucal-pozux -splunk:xemob-ryber-vofox -splunk:xozoz-nunuv-temyx -splunk:xusev-sovum-kimix -splunk:xipis-dimid-myzax -splunk:xohim-fafys-mekox -splunk:xutig-pizih-cymyx -splunk:xocid-ryhum-cagex -splunk:xisor-tubuh-hudyx -splunk:xeleg-cymyl-hakex -splunk:xevag-sisad-sugax -splunk:xelok-nylib-kamox -splunk:xolek-cudif-sehyx -splunk:xumop-parot-vebex -splunk:xomab-tyvym-muvyx -splunk:xirom-cicug-zaryx -splunk:xihef-tidym-mitix -splunk:xihep-teduk-sedex -splunk:xeviv-mimiv-pulex -splunk:xovis-nohes-myvex -splunk:xumeh-hynut-lizax -splunk:xipob-pihem-dupox -splunk:xorap-zuzih-symyx -splunk:xidab-hydon-hycix -splunk:xukon-resig-bezax -splunk:xomeh-sofav-hidox -splunk:xogik-beful-dydex -splunk:xuset-nelin-zifox -splunk:xipes-bomyv-vypex -splunk:xekod-gihob-dusix -splunk:xenaf-colyv-denex -splunk:xuhob-nusin-vizix -splunk:xonet-somuh-vuvex -splunk:xivoc-noded-lyzex -splunk:xehez-pahec-nyryx -splunk:xurac-pagyc-bozex -splunk:xikad-patut-kodix -splunk:xugad-lavar-zufix -splunk:xotag-safep-zykux -splunk:xecoc-zilyb-tyfax -splunk:ximig-vofos-lukyx -splunk:xikep-fegym-cypux -splunk:xehik-fopor-kogox -splunk:xilam-curym-sucix -splunk:xokob-ticyg-totex -splunk:xupas-tuneb-cakax -splunk:xukol-zaren-pyryx -splunk:xiniv-pezup-depex -splunk:xikat-mulez-kyzax -splunk:xitiv-fimim-ricex -splunk:xohoh-lukat-sesax -splunk:xokek-fadap-fivex -splunk:xokap-hemen-lyrex -splunk:xiror-lasaf-ligux -splunk:xepan-vibub-lekux -splunk:xepeb-fotum-rorox -splunk:xunet-vofep-misix -splunk:xolag-cugoz-tovax -splunk:xemis-lyrov-nufex -splunk:xosic-homud-titex -splunk:xuhar-cetut-tusax -splunk:xonet-pulup-vuzix -splunk:xolap-hymap-notox -splunk:xidan-medip-dufex -splunk:xufef-dicic-mutyx -splunk:xenev-vesik-donux -splunk:xepib-pamav-fefix -splunk:xisib-morag-zelax -splunk:xegan-ziceb-mefyx -splunk:xemeg-sikev-henex -splunk:xinom-zelot-dadux -splunk:xutem-hadod-ladox -splunk:xobad-pusor-fobax -splunk:xugoz-tirem-zazix -splunk:xokap-lilyg-mytyx -splunk:xenan-totyz-lodex -splunk:xogen-pecym-fegox -splunk:xilic-fyhaf-supyx -splunk:xutam-guved-binix -splunk:xelep-popyl-syfyx -splunk:xuhes-syhos-tyfyx -splunk:xical-nules-pypax -splunk:xubiz-zever-zafax -splunk:xoten-nykuf-telux -splunk:xegis-diloh-nynax -splunk:xusag-safiz-nagex -splunk:xiget-mudef-vagax -splunk:xugar-tigil-dukyx -splunk:xisit-diser-vecix -splunk:xeviz-dyfag-celex -splunk:xuhap-cisym-hupex -splunk:xegen-rafav-cosax -splunk:xusak-desar-nizex -splunk:xerak-kegar-makox -splunk:xomov-nepem-kytix -splunk:xofif-valyl-mezex -splunk:xodar-tehas-gykex -splunk:xerik-pudod-dumox -splunk:xezig-vubol-kekax -splunk:xibop-pudet-tadyx -splunk:xulil-kugum-fesux -splunk:xotet-lanik-nupex -splunk:xigan-vubog-rulax -splunk:xihat-tucyr-sarux -splunk:xegab-dysul-tovyx -splunk:xuhar-cafek-mezyx -splunk:xivin-kepof-nukix -splunk:xudop-potyf-fyhox -splunk:xofep-mohem-vypix -splunk:xunaz-fivob-pahax -splunk:xelil-fazif-vynux -splunk:xezac-nolyg-kyfax -splunk:xohoc-givok-typyx -splunk:xenoz-sobur-cenyx -splunk:xizif-zozic-fuhox -splunk:xobop-gepet-gurix -splunk:xihig-canuv-zemex -splunk:xemeg-pufuc-vanix -splunk:xeteb-hanyp-fepux -splunk:xirer-gikot-gybex -splunk:xehil-kohek-sebax -splunk:xizil-ropet-zokex -splunk:xihig-benal-hasyx -splunk:xurom-mivyf-rudex -splunk:xifam-zikir-hicyx -splunk:xedec-cozuf-nikix -splunk:xigen-gisoh-zerox -splunk:xuzar-daveb-botix -splunk:xison-cikof-pobox -splunk:xegoh-cypiz-zugux -splunk:xidal-lulur-cysyx -splunk:xofon-sehug-lebox -splunk:xekif-rikap-subyx -splunk:xulih-lupyz-ditux -splunk:xecok-bisic-lodex -splunk:xovol-kycep-mikox -splunk:xinoc-nugyk-vasex -splunk:ximah-dusoz-cakux -splunk:xunek-hezul-gudax -splunk:xogac-nadys-dezix -splunk:xifav-dosug-lugyx -splunk:xuhon-vegyn-vulux -splunk:xukir-kulyv-vybyx -splunk:xiroz-subec-rolyx -splunk:xemid-tikec-kofyx -splunk:xipid-disus-rihex -splunk:ximik-zyked-birux -splunk:xevon-hutyp-hahex -splunk:xitol-kirod-byvox -splunk:xicig-hemuk-cohux -splunk:xokot-luliz-mikex -splunk:xovog-diryk-hifux -splunk:xireg-kumon-bakax -splunk:xifoc-zipuf-mydex -splunk:xelas-petum-nymix -splunk:xigif-ropef-dalux -splunk:xevab-cyfod-zalex -splunk:xesoc-sabiz-kufax -splunk:xonob-hypup-berex -splunk:xusig-zudih-zitax -splunk:xucik-cacig-varax -splunk:xocer-popih-bifyx -splunk:xovim-nubih-repux -splunk:xolab-gucol-fagix -splunk:xolez-remak-gemyx -splunk:xuboh-fedin-dubox -splunk:xugov-genyh-girax -splunk:xekaf-kypic-pusix -splunk:xesar-bisos-fetex -splunk:xusep-micur-rizix -splunk:xolol-dugoh-ninix -splunk:xorov-nizoh-mysyx -splunk:xozat-zyvik-vemix -splunk:xesam-fyrag-fusyx -splunk:xukib-fuduv-gadix -splunk:xisac-sipyn-negox -splunk:xihel-tatoc-gydux -splunk:xosin-cegal-dicax -splunk:xozim-mepel-rofyx -splunk:xorer-hymer-kurax -splunk:xerel-kilez-favix -splunk:xovic-vadad-minax -splunk:xiles-bymyl-fubax -splunk:xuvod-dyhyf-tocox -splunk:xinil-kyhon-nevax -splunk:xusig-purud-vudax -splunk:xetot-gyvyb-fygax -splunk:xihar-cokuv-mityx -splunk:xizon-tuguk-pucix -splunk:xotas-casag-rasux -splunk:xosap-bezup-culox -splunk:xepih-facov-nomix -splunk:xumid-humav-hibex -splunk:xeviv-zusok-rohix -splunk:xikat-kotig-dinax -splunk:xufin-kicub-kanax -splunk:xicam-pidoz-nusix -splunk:xopom-mebuc-vubyx -splunk:xohev-zucaz-kizix -splunk:xuhop-bopic-lifex -splunk:xokof-tekit-sabix -splunk:xezit-lotin-tefyx -splunk:xokem-besog-lihex -splunk:xukir-zafyl-hufyx -splunk:xefod-ravic-velox -splunk:xegeb-homas-ludox -splunk:xikif-dufol-tohix -splunk:xomon-rymih-pysyx -splunk:xelas-lunip-deryx -splunk:xefin-zepub-dehox -splunk:xutep-cosol-gidox -splunk:xuvac-rynis-vumax -splunk:xolaf-dozem-syvix -splunk:ximit-mezif-rahux -splunk:xezan-cemyn-botyx -splunk:xizap-vybes-rymix -splunk:xovad-byzys-canex -splunk:xugig-botuf-vogox -splunk:xukev-lakyz-lynex -splunk:xipoh-sifyp-gezyx -splunk:xelev-sabyh-cenyx -splunk:xumev-kuful-hufyx -splunk:xoloh-modoz-tadux -splunk:ximab-fubim-fotox -splunk:xevas-roraz-cazex -splunk:xuzid-vypel-ducax -splunk:xokop-bikab-dykex -splunk:xifiz-sysug-lunux -splunk:xegok-nareb-bodox -splunk:xovom-maviz-rapix -splunk:xubad-fynuf-resux -splunk:xideg-mosoh-sofex -splunk:xuros-mohef-kolox -splunk:xetos-nahih-rinex -splunk:xupiv-beteg-lugex -splunk:xudav-ludil-fizax -splunk:xesir-minig-fymox -splunk:xumob-focil-pezax -splunk:xokif-katal-dadix -splunk:xucib-nygyr-sekox -splunk:xuged-sedob-fegux -splunk:xufac-buhiv-morix -splunk:xuzic-leson-vupux -splunk:xenab-kezon-bahox -splunk:xedoc-kykad-nypyx -splunk:xofik-nidem-mysix -splunk:xutet-reveh-cipex -splunk:xitot-sytif-ripax -splunk:xuler-botok-gydex -splunk:xigel-sekop-huvax -splunk:xesak-gadur-gypax -splunk:xuzac-mifah-bimix -splunk:xevac-gorad-pusix -splunk:xonis-gohyf-casix -splunk:xokam-kokor-gavax -splunk:xorar-rudep-niryx -splunk:xezez-sigaz-mupyx -splunk:xukic-lapip-vicux -splunk:xinoc-nemer-gyvix -splunk:xebef-fybah-dyrox -splunk:xucag-pyruf-vybux -splunk:xukiz-bisuc-tinix -splunk:xesag-tusur-cihux -splunk:xigek-zipys-gycux -splunk:xumet-cupar-hihax -splunk:xotev-zinah-caryx -splunk:xuran-dapet-kokax -splunk:xigir-nurit-zubix -splunk:xemit-bidol-felix -splunk:xumek-mymet-fasox -splunk:xibab-pufes-zazix -splunk:xefos-naral-rihox -splunk:xucab-tylav-hytax -splunk:xegel-zyvyh-denox -splunk:xegel-heneb-kizex -splunk:xefed-padis-cahux -splunk:xitog-mehic-lavox -splunk:xecif-nizan-pabox -splunk:xicar-zeres-manox -splunk:xikop-gycod-serux -splunk:xuben-gedyc-lafox -splunk:xubah-vyboz-bunux -splunk:xopaf-pohyr-hurax -splunk:xuvot-coheh-figax -splunk:xuvat-mufic-myvex -splunk:xunos-fidin-kofyx -splunk:xitac-liviv-nupex -splunk:xevik-babad-cosyx -splunk:xogam-gigab-zydux -splunk:xumak-nysaz-fetex -splunk:xugid-cyzig-vobex -splunk:xitag-lebeh-vesex -splunk:xocak-govyt-cigix -splunk:xuriv-cineh-ripux -splunk:xiraz-zygil-rohex -splunk:xoran-hobyt-fedix -splunk:xonom-gybog-mocix -splunk:xuzar-comil-zitax -splunk:xemok-tivic-hycix -splunk:xikok-razeg-nuhex -splunk:xesah-fybyz-bidux -splunk:xedim-lapet-samix -splunk:xuper-favut-rugyx From 8f009026a712bc12ffcd2d844bcfb6487d3d9c04 Mon Sep 17 00:00:00 2001 From: Neale Pickett Date: Fri, 23 Sep 2011 16:05:17 -0600 Subject: [PATCH 10/36] remove armadillo category --- packages/armadillo/armadillo.mk | 20 ----- packages/armadillo/service/armadillo/finish | 4 - packages/armadillo/service/armadillo/ip.txt | 1 - packages/armadillo/service/armadillo/log/run | 3 - packages/armadillo/service/armadillo/motd | 4 - packages/armadillo/service/armadillo/pwnie | 4 - packages/armadillo/service/armadillo/run | 40 --------- packages/armadillo/src/Makefile | 17 ---- packages/armadillo/src/arc4.c | 1 - packages/armadillo/src/arc4.h | 1 - packages/armadillo/src/dillo-solve | 22 ----- packages/armadillo/src/dillo.c | 59 ------------ packages/armadillo/src/gimmie.c | 19 ---- packages/armadillo/src/killme.c | 59 ------------ packages/armadillo/src/straceme.c | 85 ------------------ packages/armadillo/src/token.c | 1 - packages/armadillo/src/token.h | 1 - packages/armadillo/tokens/gimmie/category | 1 - packages/armadillo/tokens/gimmie/category.key | 1 - packages/armadillo/tokens/gimmie/enc.key | 1 - packages/armadillo/tokens/killme/category | 1 - packages/armadillo/tokens/killme/category.key | 1 - packages/armadillo/tokens/killme/enc.key | 1 - packages/armadillo/tokens/ltraceme/category | 1 - .../armadillo/tokens/ltraceme/category.key | 1 - packages/armadillo/tokens/ltraceme/enc.key | Bin 16 -> 0 bytes packages/armadillo/tokens/straceme/category | 1 - .../armadillo/tokens/straceme/category.key | 1 - packages/armadillo/tokens/straceme/enc.key | Bin 16 -> 0 bytes 29 files changed, 351 deletions(-) delete mode 100644 packages/armadillo/armadillo.mk delete mode 100755 packages/armadillo/service/armadillo/finish delete mode 100644 packages/armadillo/service/armadillo/ip.txt delete mode 100755 packages/armadillo/service/armadillo/log/run delete mode 100644 packages/armadillo/service/armadillo/motd delete mode 100755 packages/armadillo/service/armadillo/pwnie delete mode 100755 packages/armadillo/service/armadillo/run delete mode 100644 packages/armadillo/src/Makefile delete mode 120000 packages/armadillo/src/arc4.c delete mode 120000 packages/armadillo/src/arc4.h delete mode 100755 packages/armadillo/src/dillo-solve delete mode 100644 packages/armadillo/src/dillo.c delete mode 100644 packages/armadillo/src/gimmie.c delete mode 100644 packages/armadillo/src/killme.c delete mode 100644 packages/armadillo/src/straceme.c delete mode 120000 packages/armadillo/src/token.c delete mode 120000 packages/armadillo/src/token.h delete mode 100644 packages/armadillo/tokens/gimmie/category delete mode 100644 packages/armadillo/tokens/gimmie/category.key delete mode 100644 packages/armadillo/tokens/gimmie/enc.key delete mode 100644 packages/armadillo/tokens/killme/category delete mode 100644 packages/armadillo/tokens/killme/category.key delete mode 100644 packages/armadillo/tokens/killme/enc.key delete mode 100644 packages/armadillo/tokens/ltraceme/category delete mode 100644 packages/armadillo/tokens/ltraceme/category.key delete mode 100644 packages/armadillo/tokens/ltraceme/enc.key delete mode 100644 packages/armadillo/tokens/straceme/category delete mode 100644 packages/armadillo/tokens/straceme/category.key delete mode 100644 packages/armadillo/tokens/straceme/enc.key diff --git a/packages/armadillo/armadillo.mk b/packages/armadillo/armadillo.mk deleted file mode 100644 index 4febdb5..0000000 --- a/packages/armadillo/armadillo.mk +++ /dev/null @@ -1,20 +0,0 @@ -ARMADILLO_PKGDIR = $(TARGET)/armadillo - -armadillo-install: armadillo-build - mkdir -p $(ARMADILLO_PKGDIR) - - mkdir -p $(ARMADILLO_PKGDIR)/bin/ - $(MAKE) -C packages/armadillo/src install DESTDIR=$(CURDIR)/$(ARMADILLO_PKGDIR) - - $(call COPYTREE, packages/armadillo/tokens, $(ARMADILLO_PKGDIR)/tokens) - - $(call COPYTREE, packages/armadillo/service, $(ARMADILLO_PKGDIR)/service) - -armadillo-clean: - rm -rf $(ARMADILLO_PKGDIR) - $(MAKE) -C packages/armadillo/src clean - -armadillo-build: - $(MAKE) -C packages/armadillo/src build - -PACKAGES += armadillo diff --git a/packages/armadillo/service/armadillo/finish b/packages/armadillo/service/armadillo/finish deleted file mode 100755 index 6317f74..0000000 --- a/packages/armadillo/service/armadillo/finish +++ /dev/null @@ -1,4 +0,0 @@ -#! /bin/sh - -IP=$(cat ip.txt) -ip addr del $IP dev eth0 diff --git a/packages/armadillo/service/armadillo/ip.txt b/packages/armadillo/service/armadillo/ip.txt deleted file mode 100644 index 2e7cb07..0000000 --- a/packages/armadillo/service/armadillo/ip.txt +++ /dev/null @@ -1 +0,0 @@ -10.0.0.3/24 diff --git a/packages/armadillo/service/armadillo/log/run b/packages/armadillo/service/armadillo/log/run deleted file mode 100755 index 1e7bd9d..0000000 --- a/packages/armadillo/service/armadillo/log/run +++ /dev/null @@ -1,3 +0,0 @@ -#! /bin/sh - -exec svlogd -tt $PWD diff --git a/packages/armadillo/service/armadillo/motd b/packages/armadillo/service/armadillo/motd deleted file mode 100644 index 47ed8b3..0000000 --- a/packages/armadillo/service/armadillo/motd +++ /dev/null @@ -1,4 +0,0 @@ - .::7777::-. - /:'////' `::>/|/ - .', |||| `/( e\ - -==~-'`-Xm````-mr' `-_\ diff --git a/packages/armadillo/service/armadillo/pwnie b/packages/armadillo/service/armadillo/pwnie deleted file mode 100755 index 7317d69..0000000 --- a/packages/armadillo/service/armadillo/pwnie +++ /dev/null @@ -1,4 +0,0 @@ -#! /bin/sh - -[ -f motd ] && cat motd -exec chroot /mnt/pwnables-root login -f alice diff --git a/packages/armadillo/service/armadillo/run b/packages/armadillo/service/armadillo/run deleted file mode 100755 index 40b5dab..0000000 --- a/packages/armadillo/service/armadillo/run +++ /dev/null @@ -1,40 +0,0 @@ -#! /bin/sh -e - -# Configure IP address -IP=$(cat ip.txt) -ip addr add $IP label eth0:armadillo dev eth0 - -# Set up chroot environment -# We never umount any of this since it's all just in RAM -mkdir -p /mnt/armadillo-root -grep -q armadillo-root /proc/mounts || mount -o bind / /mnt/armadillo-root -grep -q armadillo-var /proc/mounts || mount -t tmpfs -o size=5m,mode=0755 armadillo-var /mnt/armadillo-root/var -grep -q armadillo-tmp /proc/mounts || mount -t tmpfs -o size=15k armadillo-tmp /mnt/armadillo-root/tmp -grep -q armadillo-home /proc/mounts || mount -t tmpfs -o size=5m,mode=0755 armadillo-home /mnt/armadillo-root/home - -# Make some skeleton junk -install -o root -m 0755 -d /mnt/armadillo-root/var/lib -install -o root -m 0755 -d /mnt/armadillo-root/var/lib/ctf -install -o root -m 0755 -d /mnt/armadillo-root/var/lib/ctf/tokens -install -o root -m 0755 -d /mnt/armadillo-root/var/log -install -o root -m 0755 -d /mnt/armadillo-root/var/spool -install -o root -m 0755 -d /mnt/armadillo-root/var/cache -install -o root -m 0777 -d /mnt/armadillo-root/var/run -install -o root -m 0777 -d /mnt/armadillo-root/var/cache - -# Install the binaries -install -o root -d /mnt/armadillo-root/home/alice/ -install -o bob -m 0111 /opt/armadillo/bin/gimmie /mnt/armadillo-root/home/alice/ -install -o bob -m 0111 /opt/armadillo/bin/dillo /mnt/armadillo-root/home/alice/ - -# straceme and killme need to be suid, to prevent LD_PRELOAD -install -o bob -m 04111 /opt/armadillo/bin/straceme /mnt/armadillo-root/home/alice/ -install -o bob -m 04111 /opt/armadillo/bin/killme /mnt/armadillo-root/home/alice/ - -# Set up links for tokens -mkdir -p /var/lib/ctf/tokens -for puzzle in gimmie straceme killme dillo; do - ln -sf /mnt/armadillo-root/var/lib/ctf/tokens/$puzzle /var/lib/ctf/tokens/$puzzle -done - -exec tcpsvd -C 5:"Let's not be greedy" ${IP%/*} 23 /sbin/telnetd -l ./pwnie diff --git a/packages/armadillo/src/Makefile b/packages/armadillo/src/Makefile deleted file mode 100644 index b183ebc..0000000 --- a/packages/armadillo/src/Makefile +++ /dev/null @@ -1,17 +0,0 @@ -CFLAGS = -Wall -Werror -TARGETS = gimmie straceme killme dillo - -all: build - -build: $(TARGETS) - -gimmie: gimmie.o token.o arc4.o -straceme: straceme.o token.o arc4.o -killme: killme.o token.o arc4.o -dillo: dillo.o token.o arc4.o - -install: $(TARGETS) - install -m 0755 $(TARGETS) $(DESTDIR)/bin - -clean: - rm -f *.o $(TARGETS) diff --git a/packages/armadillo/src/arc4.c b/packages/armadillo/src/arc4.c deleted file mode 120000 index 4dcde89..0000000 --- a/packages/armadillo/src/arc4.c +++ /dev/null @@ -1 +0,0 @@ -../../../src/arc4.c \ No newline at end of file diff --git a/packages/armadillo/src/arc4.h b/packages/armadillo/src/arc4.h deleted file mode 120000 index a5d8c7a..0000000 --- a/packages/armadillo/src/arc4.h +++ /dev/null @@ -1 +0,0 @@ -../../../src/arc4.h \ No newline at end of file diff --git a/packages/armadillo/src/dillo-solve b/packages/armadillo/src/dillo-solve deleted file mode 100755 index 296dbc5..0000000 --- a/packages/armadillo/src/dillo-solve +++ /dev/null @@ -1,22 +0,0 @@ -#! /usr/bin/python - -import subprocess - -# In the actual contest you'd want to run netcat or just -# open your own TCP connection to port 23 and run commands. -d = subprocess.Popen(['./dillo'], - stdout=subprocess.PIPE, - stdin=subprocess.PIPE) -o = d.stdout -i = d.stdin - -c = o.read(1) -v = chr(ord(c) ^ 0x20) -i.write(v) - -o.readline() -o.readline() -o.readline() -o.readline() -o.readline() -d.poll() diff --git a/packages/armadillo/src/dillo.c b/packages/armadillo/src/dillo.c deleted file mode 100644 index 44e6cad..0000000 --- a/packages/armadillo/src/dillo.c +++ /dev/null @@ -1,59 +0,0 @@ -#include -#include -#include -#include "arc4.h" -#include "token.h" - -const uint8_t key[] = - {0xa5, 0xb1, 0x6f, 0xce, - 0x59, 0x2d, 0xb1, 0xe9, - 0x4b, 0x07, 0x91, 0x6d, - 0x9f, 0x3b, 0xc8, 0xc6}; - -const char dillo[] = - (" .::7777::-.\n" - " /:'////' `::>/|/\n" - " .', |||| `/( e\\\n" - " -==~-'`-Xm````-mr' `-_\\\n"); - -int -main(int argc, char *argv[]) -{ - uint8_t v; - int i; - - /* Pick a random non-zero xor value */ - do { - v = arc4_rand8(); - } while (! v); - - - /* Print the dillo */ - for (i = 0; dillo[i]; i += 1) { - struct timespec req = {0, 33333333}; - uint8_t c = dillo[i]; - - if ('\n' != c) { - c ^= v; - } - write(1, &c, 1); - nanosleep(&req, NULL); - } - - /* Read a single byte; strace will help with solution */ - { - uint8_t c; - - read(0, &c, 1); - if (c != v) { - return 1; - } - } - - if (-1 == print_token("dillo", key, sizeof(key))) { - write(2, "Something is broken; I can't read my token.\n", 44); - return 69; - } - - return 0; -} diff --git a/packages/armadillo/src/gimmie.c b/packages/armadillo/src/gimmie.c deleted file mode 100644 index bdf56f2..0000000 --- a/packages/armadillo/src/gimmie.c +++ /dev/null @@ -1,19 +0,0 @@ -#include -#include -#include "token.h" - -uint8_t const key[] = {0x5f, 0x64, 0x13, 0x29, - 0x2e, 0x46, 0x76, 0xcd, - 0x65, 0xff, 0xe8, 0x03, - 0xa4, 0xa9, 0x4f, 0xd9}; - -int -main(int argc, char *argv[]) -{ - if (-1 == print_token("gimmie", key, sizeof(key))) { - fprintf(stderr, "Something is broken; I can't read my token.\n"); - return EX_UNAVAILABLE; - } - - return 0; -} diff --git a/packages/armadillo/src/killme.c b/packages/armadillo/src/killme.c deleted file mode 100644 index 90ba60b..0000000 --- a/packages/armadillo/src/killme.c +++ /dev/null @@ -1,59 +0,0 @@ -#include -#include -#include -#include -#include "arc4.h" -#include "token.h" - -#define ROUNDS 20 - -uint8_t const key[] = {0x51, 0x91, 0x6d, 0x81, - 0x14, 0x21, 0xf8, 0x95, - 0xb8, 0x09, 0x87, 0xa6, - 0xa8, 0xb0, 0xa0, 0x46}; - -int lastsig; - -void -handler(int signum) -{ - lastsig = signum; -} - -int -main(int argc, char *argv[]) -{ - int i; - - for (i = 1; i < 8; i += 1) { - signal(i, handler); - } - - for (i = 0; i < ROUNDS; i += 1) { - int desired = (arc4_rand8() % 7) + 1; - - lastsig = 0; - printf("%d\n", desired); - fflush(stdout); - if (i == 0) { - sleep(5); - } else { - sleep(1); - } - if (0 == lastsig) { - printf("Too slow.\n"); - return 1; - } - if (lastsig != desired) { - printf("Wrong one.\n"); - return 1; - } - } - - if (-1 == print_token("killme", key, sizeof(key))) { - fprintf(stderr, "Something is broken; I can't read my token.\n"); - return EX_UNAVAILABLE; - } - - return 0; -} diff --git a/packages/armadillo/src/straceme.c b/packages/armadillo/src/straceme.c deleted file mode 100644 index ceb9ea2..0000000 --- a/packages/armadillo/src/straceme.c +++ /dev/null @@ -1,85 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "token.h" - -uint8_t const key[] = {0x30, 0x00, 0x55, 0x0f, - 0xc2, 0xf6, 0x52, 0x2a, - 0x31, 0xfd, 0x00, 0x92, - 0x9d, 0x49, 0x24, 0xce}; - -int -main(int argc, char *argv[]) -{ - /* Check argv[1]. - * - * If no args, argv[1] will be NULL, which causes a segfault. - * This is what we want. - * - * To pass this, run ./straceme $$. - * But you have to do it from a shell script, because if you run - * strace ./straceme $$ - * getppid() will return the PID of strace! - */ - if (getppid() != atoi(argv[1])) { - write(2, "argv[1] incorrect\n", 18); - return EX_USAGE; - } - - /* Read an rc file. - * - * To pass this, set $HOME to someplace you have access. - */ - { - int fd; - char fn[128]; - char bs[1000]; - int len; - - len = snprintf(fn, sizeof(fn) - 1, "%s/.stracemerc", getenv("HOME")); - if (len < 0) { - len = 0; - } - fn[len] = '\0'; - - if (-1 == (fd = open(fn, O_RDONLY))) { - fd = open("/etc/stracemerc", O_RDONLY); - } - if (-1 == fd) { - return EX_NOINPUT; - } - - /* We don't actually care about contents */ - read(fd, bs, sizeof(bs)); - close(fd); - } - - /* Read in category name from fd 5 - * - * echo -n straceme > foo.txt - * ./straceme $$ 5< foo.txt - */ - { - char cat[50]; - int catlen; - int i; - - catlen = read(5, cat, sizeof(cat) - 1); - for (i = 0; i < catlen; i += 1) { - if (! isalnum(cat[i])) break; - } - cat[i] = '\0'; - - if (-1 == print_token(cat, key, sizeof(key))) { - write(2, "Something is broken; I can't read my token.\n", 44); - return 69; - } - } - return 0; -} diff --git a/packages/armadillo/src/token.c b/packages/armadillo/src/token.c deleted file mode 120000 index b64f986..0000000 --- a/packages/armadillo/src/token.c +++ /dev/null @@ -1 +0,0 @@ -../../../src/token.c \ No newline at end of file diff --git a/packages/armadillo/src/token.h b/packages/armadillo/src/token.h deleted file mode 120000 index 18eaf6f..0000000 --- a/packages/armadillo/src/token.h +++ /dev/null @@ -1 +0,0 @@ -../../../src/token.h \ No newline at end of file diff --git a/packages/armadillo/tokens/gimmie/category b/packages/armadillo/tokens/gimmie/category deleted file mode 100644 index 5e1d073..0000000 --- a/packages/armadillo/tokens/gimmie/category +++ /dev/null @@ -1 +0,0 @@ -pwnables diff --git a/packages/armadillo/tokens/gimmie/category.key b/packages/armadillo/tokens/gimmie/category.key deleted file mode 100644 index b9f44b7..0000000 --- a/packages/armadillo/tokens/gimmie/category.key +++ /dev/null @@ -1 +0,0 @@ -‚Æt322˜/—0ãg†žji \ No newline at end of file diff --git a/packages/armadillo/tokens/gimmie/enc.key b/packages/armadillo/tokens/gimmie/enc.key deleted file mode 100644 index b90c03d..0000000 --- a/packages/armadillo/tokens/gimmie/enc.key +++ /dev/null @@ -1 +0,0 @@ -_d).FvÍeÿ褩OÙ \ No newline at end of file diff --git a/packages/armadillo/tokens/killme/category b/packages/armadillo/tokens/killme/category deleted file mode 100644 index 5e1d073..0000000 --- a/packages/armadillo/tokens/killme/category +++ /dev/null @@ -1 +0,0 @@ -pwnables diff --git a/packages/armadillo/tokens/killme/category.key b/packages/armadillo/tokens/killme/category.key deleted file mode 100644 index b9f44b7..0000000 --- a/packages/armadillo/tokens/killme/category.key +++ /dev/null @@ -1 +0,0 @@ -‚Æt322˜/—0ãg†žji \ No newline at end of file diff --git a/packages/armadillo/tokens/killme/enc.key b/packages/armadillo/tokens/killme/enc.key deleted file mode 100644 index ed50ba4..0000000 --- a/packages/armadillo/tokens/killme/enc.key +++ /dev/null @@ -1 +0,0 @@ -Q‘m!ø•¸ ‡¦¨° F \ No newline at end of file diff --git a/packages/armadillo/tokens/ltraceme/category b/packages/armadillo/tokens/ltraceme/category deleted file mode 100644 index 5e1d073..0000000 --- a/packages/armadillo/tokens/ltraceme/category +++ /dev/null @@ -1 +0,0 @@ -pwnables diff --git a/packages/armadillo/tokens/ltraceme/category.key b/packages/armadillo/tokens/ltraceme/category.key deleted file mode 100644 index b9f44b7..0000000 --- a/packages/armadillo/tokens/ltraceme/category.key +++ /dev/null @@ -1 +0,0 @@ -‚Æt322˜/—0ãg†žji \ No newline at end of file diff --git a/packages/armadillo/tokens/ltraceme/enc.key b/packages/armadillo/tokens/ltraceme/enc.key deleted file mode 100644 index faaa27e08c2abdfa9a1342e85fe2f7cf817534ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16 YcmbR8X_BjuOT)vdDQBPj=VA~507!TT*Z=?k diff --git a/packages/armadillo/tokens/straceme/category b/packages/armadillo/tokens/straceme/category deleted file mode 100644 index 5e1d073..0000000 --- a/packages/armadillo/tokens/straceme/category +++ /dev/null @@ -1 +0,0 @@ -pwnables diff --git a/packages/armadillo/tokens/straceme/category.key b/packages/armadillo/tokens/straceme/category.key deleted file mode 100644 index b9f44b7..0000000 --- a/packages/armadillo/tokens/straceme/category.key +++ /dev/null @@ -1 +0,0 @@ -‚Æt322˜/—0ãg†žji \ No newline at end of file diff --git a/packages/armadillo/tokens/straceme/enc.key b/packages/armadillo/tokens/straceme/enc.key deleted file mode 100644 index 4a72766c4dd10de468b6f5d5f69a743e58f004ad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16 XcmXqD2<1QYElA7oFT Date: Fri, 23 Sep 2011 16:57:26 -0600 Subject: [PATCH 11/36] /service/* stays up --- packages/ircd/ircd.mk | 2 +- packages/ircd/service/ircd/finish | 4 +++ packages/ircd/service/ircd/ip.txt | 1 + packages/ircd/service/ircd/ngircd.conf | 4 +++ packages/ircd/service/ircd/run | 9 ++++-- packages/logger/service/logger/ip.txt | 2 +- packages/mcp/service/httpd/run | 2 +- packages/mcp/www/index.html | 13 +++----- packages/printf/printf.mk | 2 -- packages/printf/service/printf/ip.txt | 2 +- packages/printf/service/printf/run | 3 +- packages/printf/service/printf/run-printf | 7 +---- packages/printf/src/Makefile | 2 +- packages/printf/src/printf.c | 35 +++++---------------- packages/printf/tokens/printf0/category | 1 - packages/printf/tokens/printf0/category.key | 1 - packages/printf/tokens/printf0/enc.key | 1 - packages/printf/tokens/printf1/category | 1 - packages/printf/tokens/printf1/category.key | 1 - packages/printf/tokens/printf1/enc.key | 1 - packages/printf/tokens/printf2/category | 1 - packages/printf/tokens/printf2/category.key | 1 - packages/printf/tokens/printf2/enc.key | 1 - packages/printf/tokens/printf3/category | 1 - packages/printf/tokens/printf3/category.key | 1 - packages/printf/tokens/printf3/enc.key | 1 - packages/printf/tokens/printf4/category | 1 - packages/printf/tokens/printf4/category.key | 1 - packages/printf/tokens/printf4/enc.key | 1 - packages/tanks/tanks.mk | 3 +- 30 files changed, 38 insertions(+), 68 deletions(-) create mode 100755 packages/ircd/service/ircd/finish create mode 100644 packages/ircd/service/ircd/ip.txt delete mode 100644 packages/printf/tokens/printf0/category delete mode 100644 packages/printf/tokens/printf0/category.key delete mode 100644 packages/printf/tokens/printf0/enc.key delete mode 100644 packages/printf/tokens/printf1/category delete mode 100644 packages/printf/tokens/printf1/category.key delete mode 100644 packages/printf/tokens/printf1/enc.key delete mode 100644 packages/printf/tokens/printf2/category delete mode 100644 packages/printf/tokens/printf2/category.key delete mode 100644 packages/printf/tokens/printf2/enc.key delete mode 100644 packages/printf/tokens/printf3/category delete mode 100644 packages/printf/tokens/printf3/category.key delete mode 100644 packages/printf/tokens/printf3/enc.key delete mode 100644 packages/printf/tokens/printf4/category delete mode 100644 packages/printf/tokens/printf4/category.key delete mode 100644 packages/printf/tokens/printf4/enc.key diff --git a/packages/ircd/ircd.mk b/packages/ircd/ircd.mk index 79d99ea..2b5b06f 100644 --- a/packages/ircd/ircd.mk +++ b/packages/ircd/ircd.mk @@ -22,7 +22,7 @@ $(IRCD_BUILDDIR)/source: $(IRCD_TAR) ircd-build: $(IRCD_BUILDDIR)/built $(IRCD_BUILDDIR)/built: $(IRCD_BUILDDIR)/source - cd $(IRCD_SRCDIR) && ./configure $(CONFIG_XCOMPILE_FLAGS) + cd $(IRCD_SRCDIR) && ./configure $(CONFIG_XCOMPILE_FLAGS) --enable-ipv6 $(MAKE) -C $(IRCD_SRCDIR) touch $@ diff --git a/packages/ircd/service/ircd/finish b/packages/ircd/service/ircd/finish new file mode 100755 index 0000000..6317f74 --- /dev/null +++ b/packages/ircd/service/ircd/finish @@ -0,0 +1,4 @@ +#! /bin/sh + +IP=$(cat ip.txt) +ip addr del $IP dev eth0 diff --git a/packages/ircd/service/ircd/ip.txt b/packages/ircd/service/ircd/ip.txt new file mode 100644 index 0000000..07f368a --- /dev/null +++ b/packages/ircd/service/ircd/ip.txt @@ -0,0 +1 @@ +fd84:b410:3441::6/64 diff --git a/packages/ircd/service/ircd/ngircd.conf b/packages/ircd/service/ircd/ngircd.conf index 0e7705b..cb21c97 100644 --- a/packages/ircd/service/ircd/ngircd.conf +++ b/packages/ircd/service/ircd/ngircd.conf @@ -1,7 +1,11 @@ [Global] Name = irc.ctf Info = CTF IRC + AdminInfo1 = CTF IRC Server + AdminInfo2 = The table at the front of the room + AdminEmail = zephyr@dirtbags.net MotdPhrase = "welcome datacomp" + Listen = fd84:b410:3441::6 [Operator] Name = oper diff --git a/packages/ircd/service/ircd/run b/packages/ircd/service/ircd/run index f033477..16a5e77 100755 --- a/packages/ircd/service/ircd/run +++ b/packages/ircd/service/ircd/run @@ -2,6 +2,11 @@ exec 2>&1 -ip addr add fd84:b410:3441::6 label eth0:ircd dev eth0 +IP=$(cat ip.txt) +ip addr add $IP label eth0:ircd dev eth0 +ip monitor | grep -q $IP -exec /opt/ircd/bin/ngircd --config ./ngircd.conf --nodaemon +adduser -S -H -u 65534 nobody +adduser -S -H irc + +exec setuidgid irc /opt/ircd/bin/ngircd --config ./ngircd.conf --nodaemon diff --git a/packages/logger/service/logger/ip.txt b/packages/logger/service/logger/ip.txt index b7c75a4..9777f24 100644 --- a/packages/logger/service/logger/ip.txt +++ b/packages/logger/service/logger/ip.txt @@ -1 +1 @@ -10.0.0.14/24 +fd84:b410:3441::07a6/64 diff --git a/packages/mcp/service/httpd/run b/packages/mcp/service/httpd/run index 4f064d7..a183245 100755 --- a/packages/mcp/service/httpd/run +++ b/packages/mcp/service/httpd/run @@ -22,4 +22,4 @@ done mkdir -p sites cd sites ln -sf /var/www default -exec tcpsvd -u ctf $IP 80 /opt/mcp/bin/fnord-cgi +exec tcpsvd -u ctf ${IP%/*} 80 /opt/mcp/bin/fnord-cgi diff --git a/packages/mcp/www/index.html b/packages/mcp/www/index.html index 0c1d155..82b48c1 100644 --- a/packages/mcp/www/index.html +++ b/packages/mcp/www/index.html @@ -19,8 +19,8 @@ About scoring
  • - Contest chat + Contest chat carries important announcements, and sometimes clues and puzzles.
  • @@ -42,16 +42,13 @@

    Rules

      -
    • - No ARP-level attacks: this includes IP spoofing. -
    • No DoS attacks.
    • - Do not attack machines outside the contest network - (10.x.x.x). Low ports (under 1024) do not - run contest categories. + Do not attack machines outside fd84:b410:3441::/48. + Low ports (under 1024) do not run contest categories, don't + waste your time.
    • Consider the contest network hostile. It is up to you to diff --git a/packages/printf/printf.mk b/packages/printf/printf.mk index f77ba09..520985d 100644 --- a/packages/printf/printf.mk +++ b/packages/printf/printf.mk @@ -6,8 +6,6 @@ printf-install: printf-build mkdir -p $(PRINTF_PKGDIR)/bin/ $(MAKE) -C packages/printf/src install DESTDIR=$(CURDIR)/$(PRINTF_PKGDIR) - $(call COPYTREE, packages/printf/tokens, $(PRINTF_PKGDIR)/tokens) - $(call COPYTREE, packages/printf/service, $(PRINTF_PKGDIR)/service) printf-clean: diff --git a/packages/printf/service/printf/ip.txt b/packages/printf/service/printf/ip.txt index fb7ede6..7adf1f8 100644 --- a/packages/printf/service/printf/ip.txt +++ b/packages/printf/service/printf/ip.txt @@ -1 +1 @@ -10.0.0.91 +fd84:b410:3441::2329/64 diff --git a/packages/printf/service/printf/run b/packages/printf/service/printf/run index 331b959..3336885 100755 --- a/packages/printf/service/printf/run +++ b/packages/printf/service/printf/run @@ -3,7 +3,8 @@ exec 2>&1 IP=$(cat ip.txt) -ip addr add $IP label eth0:printf dev eth0 +ip addr add $IP dev eth0 +ip monitor | grep -q $IP # So I say to him, "Alex, what's a good high port number for a CTF category?" # And he says, "6" diff --git a/packages/printf/service/printf/run-printf b/packages/printf/service/printf/run-printf index 716baf7..0f6bd9b 100755 --- a/packages/printf/service/printf/run-printf +++ b/packages/printf/service/printf/run-printf @@ -1,8 +1,3 @@ #! /bin/sh -chpst -u 9001 -/ /opt/printf/bin ./printf \ - 3< /var/lib/ctf/tokens/printf0 \ - 4< /var/lib/ctf/tokens/printf1 \ - 5< /var/lib/ctf/tokens/printf2 \ - 6< /var/lib/ctf/tokens/printf3 \ - 7< /var/lib/ctf/tokens/printf4 +exec chpst -u 9001 -/ /opt/printf/bin ./printf diff --git a/packages/printf/src/Makefile b/packages/printf/src/Makefile index 15f1b4d..5def83f 100644 --- a/packages/printf/src/Makefile +++ b/packages/printf/src/Makefile @@ -5,7 +5,7 @@ TARGETS = printf all: build build: $(TARGETS) -printf: printf.o token.o +printf: printf.o install: $(TARGETS) install -m 0755 $(TARGETS) $(DESTDIR)/bin diff --git a/packages/printf/src/printf.c b/packages/printf/src/printf.c index a93f10f..f28a113 100644 --- a/packages/printf/src/printf.c +++ b/packages/printf/src/printf.c @@ -1,7 +1,6 @@ #include #include #include -#include "token.h" void record(char *buf) { @@ -19,40 +18,24 @@ record(char *buf) { fputc('\n', stderr); } -uint8_t const key[] = {0x98, 0x37, 0x92, 0x7d, - 0xa5, 0x6d, 0xc9, 0x61, - 0xca, 0x97, 0xf8, 0xa5, - 0xfe, 0x0f, 0xf6, 0xfc}; - /* Storage space for tokens */ -char token[5][TOKEN_MAX]; +char *token[5] = { + "printf:xylep-radar-nanox", + "printf:xylep-radar-nanox", + "printf:xylep-radar-nanox", + "printf:xylep-radar-nanox", + "printf:xylep-radar-nanox" +}; /* Make this global so the stack isn't gigantic */ char global_fmt[8000] = {0}; -/* Since this runs in a chroot jail, and setting up all the symlinks is - * a pain in the butt, we just read from file discriptors passed in. - * Pipes are the best thing. :D - */ -void -read_tokens() -{ - int i; - ssize_t len; - - for (i = 0; i < sizeof(token)/sizeof(*token); i += 1) { - len = read_token_fd(i + 3, key, sizeof(key), token[i], sizeof(token[i])); - if (len >= sizeof(token[i])) abort(); - token[i][len] = '\0'; - } -} - int main(int argc, char *argv[], char *env[]) { char *t0 = token[0]; - int t1[TOKEN_MAX]; + int t1[100]; char *fmt = global_fmt; char *datacomp = "welcome datacomp"; int token4_flag = 0; @@ -64,8 +47,6 @@ main(int argc, char *argv[], char *env[]) /* So the compiler won't complain about unused variables */ i = datacomp[0] ^ t0[0]; - read_tokens(); - /* Token 0 just hangs out on the stack */ /* Set up token 1 (%c%c%c%c...) */ diff --git a/packages/printf/tokens/printf0/category b/packages/printf/tokens/printf0/category deleted file mode 100644 index f3be370..0000000 --- a/packages/printf/tokens/printf0/category +++ /dev/null @@ -1 +0,0 @@ -printf diff --git a/packages/printf/tokens/printf0/category.key b/packages/printf/tokens/printf0/category.key deleted file mode 100644 index 6089383..0000000 --- a/packages/printf/tokens/printf0/category.key +++ /dev/null @@ -1 +0,0 @@ -‚»ÞIŠ[^,5àÆÚO½Ì \ No newline at end of file diff --git a/packages/printf/tokens/printf0/enc.key b/packages/printf/tokens/printf0/enc.key deleted file mode 100644 index ef2e9f9..0000000 --- a/packages/printf/tokens/printf0/enc.key +++ /dev/null @@ -1 +0,0 @@ -˜7’}¥mÉaÊ—ø¥þöü \ No newline at end of file diff --git a/packages/printf/tokens/printf1/category b/packages/printf/tokens/printf1/category deleted file mode 100644 index f3be370..0000000 --- a/packages/printf/tokens/printf1/category +++ /dev/null @@ -1 +0,0 @@ -printf diff --git a/packages/printf/tokens/printf1/category.key b/packages/printf/tokens/printf1/category.key deleted file mode 100644 index 6089383..0000000 --- a/packages/printf/tokens/printf1/category.key +++ /dev/null @@ -1 +0,0 @@ -‚»ÞIŠ[^,5àÆÚO½Ì \ No newline at end of file diff --git a/packages/printf/tokens/printf1/enc.key b/packages/printf/tokens/printf1/enc.key deleted file mode 100644 index ef2e9f9..0000000 --- a/packages/printf/tokens/printf1/enc.key +++ /dev/null @@ -1 +0,0 @@ -˜7’}¥mÉaÊ—ø¥þöü \ No newline at end of file diff --git a/packages/printf/tokens/printf2/category b/packages/printf/tokens/printf2/category deleted file mode 100644 index f3be370..0000000 --- a/packages/printf/tokens/printf2/category +++ /dev/null @@ -1 +0,0 @@ -printf diff --git a/packages/printf/tokens/printf2/category.key b/packages/printf/tokens/printf2/category.key deleted file mode 100644 index 6089383..0000000 --- a/packages/printf/tokens/printf2/category.key +++ /dev/null @@ -1 +0,0 @@ -‚»ÞIŠ[^,5àÆÚO½Ì \ No newline at end of file diff --git a/packages/printf/tokens/printf2/enc.key b/packages/printf/tokens/printf2/enc.key deleted file mode 100644 index ef2e9f9..0000000 --- a/packages/printf/tokens/printf2/enc.key +++ /dev/null @@ -1 +0,0 @@ -˜7’}¥mÉaÊ—ø¥þöü \ No newline at end of file diff --git a/packages/printf/tokens/printf3/category b/packages/printf/tokens/printf3/category deleted file mode 100644 index f3be370..0000000 --- a/packages/printf/tokens/printf3/category +++ /dev/null @@ -1 +0,0 @@ -printf diff --git a/packages/printf/tokens/printf3/category.key b/packages/printf/tokens/printf3/category.key deleted file mode 100644 index 6089383..0000000 --- a/packages/printf/tokens/printf3/category.key +++ /dev/null @@ -1 +0,0 @@ -‚»ÞIŠ[^,5àÆÚO½Ì \ No newline at end of file diff --git a/packages/printf/tokens/printf3/enc.key b/packages/printf/tokens/printf3/enc.key deleted file mode 100644 index ef2e9f9..0000000 --- a/packages/printf/tokens/printf3/enc.key +++ /dev/null @@ -1 +0,0 @@ -˜7’}¥mÉaÊ—ø¥þöü \ No newline at end of file diff --git a/packages/printf/tokens/printf4/category b/packages/printf/tokens/printf4/category deleted file mode 100644 index f3be370..0000000 --- a/packages/printf/tokens/printf4/category +++ /dev/null @@ -1 +0,0 @@ -printf diff --git a/packages/printf/tokens/printf4/category.key b/packages/printf/tokens/printf4/category.key deleted file mode 100644 index 6089383..0000000 --- a/packages/printf/tokens/printf4/category.key +++ /dev/null @@ -1 +0,0 @@ -‚»ÞIŠ[^,5àÆÚO½Ì \ No newline at end of file diff --git a/packages/printf/tokens/printf4/enc.key b/packages/printf/tokens/printf4/enc.key deleted file mode 100644 index ef2e9f9..0000000 --- a/packages/printf/tokens/printf4/enc.key +++ /dev/null @@ -1 +0,0 @@ -˜7’}¥mÉaÊ—ø¥þöü \ No newline at end of file diff --git a/packages/tanks/tanks.mk b/packages/tanks/tanks.mk index 9007d20..b530520 100644 --- a/packages/tanks/tanks.mk +++ b/packages/tanks/tanks.mk @@ -1,7 +1,7 @@ TANKS_PKGDIR = $(TARGET)/tanks TANKS_CACHE = $(CACHE)/tanks.git TANKS_BUILDDIR = $(BUILD)/tanks -TANKS_URL = "http://woozle.org/~neale/projects/ctanks" +TANKS_URL = "http://dirtbags.net/projects/tanks" $(TANKS_CACHE): git clone --bare $(TANKS_URL) $@ @@ -23,7 +23,6 @@ tanks-install: tanks-build $(call COPYTREE, packages/tanks/html, $(TANKS_PKGDIR)/html) cp packages/mcp/www/ctf.css $(TANKS_PKGDIR)/html/style.css - cp packages/mcp/www/grunge.png $(TANKS_PKGDIR)/html cp $(TANKS_BUILDDIR)/nav.html.inc $(TANKS_PKGDIR)/html cp $(TANKS_BUILDDIR)/tanks.js $(TANKS_PKGDIR)/html cp $(TANKS_BUILDDIR)/forf.html $(TANKS_PKGDIR)/html From 7fbe6d265030f587320a65dbfc5604e8e33760e9 Mon Sep 17 00:00:00 2001 From: Neale Pickett Date: Fri, 23 Sep 2011 17:05:14 -0600 Subject: [PATCH 12/36] cleanup, add lxc package (broken) --- packages/logger/logger.mk | 20 - packages/logger/service/logger/finish | 4 - packages/logger/service/logger/ip.txt | 1 - packages/logger/service/logger/log/run | 3 - packages/logger/service/logger/run | 6 - packages/logger/src/COPYING | 20 - packages/logger/src/Makefile | 14 - packages/logger/src/arc4.c | 1 - packages/logger/src/arc4.h | 1 - packages/logger/src/logger.c | 652 -------------------- packages/logger/src/token.c | 1 - packages/logger/src/token.h | 1 - packages/logger/tokens/logger0/category | 1 - packages/logger/tokens/logger0/category.key | 1 - packages/logger/tokens/logger0/enc.key | 1 - packages/logger/tokens/logger1/category | 1 - packages/logger/tokens/logger1/category.key | 1 - packages/logger/tokens/logger1/enc.key | 1 - packages/logger/tokens/logger2/category | 1 - packages/logger/tokens/logger2/category.key | 1 - packages/logger/tokens/logger2/enc.key | 1 - packages/lxc/lxc.mk | 49 ++ packages/printf/src/token.c | 1 - packages/printf/src/token.h | 1 - src/arc4.c | 230 ------- src/arc4.h | 40 -- src/token.c | 64 -- src/token.h | 19 - 28 files changed, 49 insertions(+), 1088 deletions(-) delete mode 100644 packages/logger/logger.mk delete mode 100755 packages/logger/service/logger/finish delete mode 100644 packages/logger/service/logger/ip.txt delete mode 100755 packages/logger/service/logger/log/run delete mode 100755 packages/logger/service/logger/run delete mode 100644 packages/logger/src/COPYING delete mode 100644 packages/logger/src/Makefile delete mode 120000 packages/logger/src/arc4.c delete mode 120000 packages/logger/src/arc4.h delete mode 100644 packages/logger/src/logger.c delete mode 120000 packages/logger/src/token.c delete mode 120000 packages/logger/src/token.h delete mode 100644 packages/logger/tokens/logger0/category delete mode 100644 packages/logger/tokens/logger0/category.key delete mode 100644 packages/logger/tokens/logger0/enc.key delete mode 100644 packages/logger/tokens/logger1/category delete mode 100644 packages/logger/tokens/logger1/category.key delete mode 100644 packages/logger/tokens/logger1/enc.key delete mode 100644 packages/logger/tokens/logger2/category delete mode 100644 packages/logger/tokens/logger2/category.key delete mode 100644 packages/logger/tokens/logger2/enc.key create mode 100644 packages/lxc/lxc.mk delete mode 120000 packages/printf/src/token.c delete mode 120000 packages/printf/src/token.h delete mode 100644 src/arc4.c delete mode 100644 src/arc4.h delete mode 100644 src/token.c delete mode 100644 src/token.h diff --git a/packages/logger/logger.mk b/packages/logger/logger.mk deleted file mode 100644 index 14f251c..0000000 --- a/packages/logger/logger.mk +++ /dev/null @@ -1,20 +0,0 @@ -LOGGER_PKGDIR = $(TARGET)/logger - -logger-install: logger-build - mkdir -p $(LOGGER_PKGDIR) - - mkdir -p $(LOGGER_PKGDIR)/bin/ - $(MAKE) -C packages/logger/src install DESTDIR=$(CURDIR)/$(LOGGER_PKGDIR) - - $(call COPYTREE, packages/logger/tokens, $(LOGGER_PKGDIR)/tokens) - - $(call COPYTREE, packages/logger/service, $(LOGGER_PKGDIR)/service) - -logger-clean: - rm -rf $(LOGGER_PKGDIR) - $(MAKE) -C packages/logger/src clean - -logger-build: - $(MAKE) -C packages/logger/src build - -PACKAGES += logger diff --git a/packages/logger/service/logger/finish b/packages/logger/service/logger/finish deleted file mode 100755 index 6317f74..0000000 --- a/packages/logger/service/logger/finish +++ /dev/null @@ -1,4 +0,0 @@ -#! /bin/sh - -IP=$(cat ip.txt) -ip addr del $IP dev eth0 diff --git a/packages/logger/service/logger/ip.txt b/packages/logger/service/logger/ip.txt deleted file mode 100644 index 9777f24..0000000 --- a/packages/logger/service/logger/ip.txt +++ /dev/null @@ -1 +0,0 @@ -fd84:b410:3441::07a6/64 diff --git a/packages/logger/service/logger/log/run b/packages/logger/service/logger/log/run deleted file mode 100755 index 1e7bd9d..0000000 --- a/packages/logger/service/logger/log/run +++ /dev/null @@ -1,3 +0,0 @@ -#! /bin/sh - -exec svlogd -tt $PWD diff --git a/packages/logger/service/logger/run b/packages/logger/service/logger/run deleted file mode 100755 index 2e36c15..0000000 --- a/packages/logger/service/logger/run +++ /dev/null @@ -1,6 +0,0 @@ -#! /bin/sh -e - -exec 2>&1 -IP=$(cat ip.txt) -ip addr add $IP label eth0:logger dev eth0 -exec tcpsvd ${IP%/*} 1958 /opt/logger/bin/logger diff --git a/packages/logger/src/COPYING b/packages/logger/src/COPYING deleted file mode 100644 index 5f6471e..0000000 --- a/packages/logger/src/COPYING +++ /dev/null @@ -1,20 +0,0 @@ -Base64 code was taken from -http://cvs.savannah.gnu.org/viewvc/*checkout*/gnulib/gnulib/lib/base64.c?revision=HEAD - -/* base64.c -- Encode binary data using printable characters. - Copyright (C) 1999, 2000, 2001, 2004, 2005, 2006 Free Software - Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software Foundation, - Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ diff --git a/packages/logger/src/Makefile b/packages/logger/src/Makefile deleted file mode 100644 index f895c85..0000000 --- a/packages/logger/src/Makefile +++ /dev/null @@ -1,14 +0,0 @@ -CFLAGS = -Wall -Werror -LDFLAGS = -static -TARGETS = logger - -all: build -build: $(TARGETS) - -logger: logger.o arc4.o token.o - -install: $(TARGETS) - install -m 0755 $(TARGETS) $(DESTDIR)/bin - -clean: - rm -f *.o $(TARGETS) diff --git a/packages/logger/src/arc4.c b/packages/logger/src/arc4.c deleted file mode 120000 index 4dcde89..0000000 --- a/packages/logger/src/arc4.c +++ /dev/null @@ -1 +0,0 @@ -../../../src/arc4.c \ No newline at end of file diff --git a/packages/logger/src/arc4.h b/packages/logger/src/arc4.h deleted file mode 120000 index a5d8c7a..0000000 --- a/packages/logger/src/arc4.h +++ /dev/null @@ -1 +0,0 @@ -../../../src/arc4.h \ No newline at end of file diff --git a/packages/logger/src/logger.c b/packages/logger/src/logger.c deleted file mode 100644 index 2d47b88..0000000 --- a/packages/logger/src/logger.c +++ /dev/null @@ -1,652 +0,0 @@ -/** logger.c - generate fake log messages (part of dirtbags CTF) - * - * Author: Neale Pickett - * - * This software has been authored by an employee or employees of Los - * Alamos National Security, LLC, operator of the Los Alamos National - * Laboratory (LANL) under Contract No. DE-AC52-06NA25396 with the - * U.S. Department of Energy. The U.S. Government has rights to use, - * reproduce, and distribute this software. The public may copy, - * distribute, prepare derivative works and publicly display this - * software without charge, provided that this Notice and any statement - * of authorship are reproduced on all copies. Neither the Government - * nor LANS makes any warranty, express or implied, or assumes any - * liability or responsibility for the use of this software. If - * software is modified to produce derivative works, such modified - * software should be clearly marked, so as not to confuse it with the - * version available from LANL. - */ - - -#include -#include -#include -#include -#include - -#ifdef STANDALONE -# define TOKEN_MAX 50 -#else -# include "token.h" -#endif - -#define PID_MAX 32768 -#define QSIZE 200 -#define MSGS_PER_SEC_MIN 10 -#define MSGS_PER_SEC_MAX 40 - -const uint8_t key[] = {0x99, 0xeb, 0xc0, 0xce, - 0xe0, 0xc9, 0xed, 0x5b, - 0xbd, 0xc8, 0xb5, 0xfd, - 0xdd, 0x0b, 0x03, 0x10}; - -/* Storage space for tokens */ -char token[3][TOKEN_MAX]; - -void -read_tokens() -{ - int i; - ssize_t len; - char name[40]; - - for (i = 0; i < sizeof(token)/sizeof(*token); i += 1) { -#ifdef STANDALONE - strcpy(token[i], "logger:xylep-donut-nanox"); -#else - /* This can't grow beyond 40. Think about it. */ - sprintf(name, "logger%d", i); - - len = get_token(token[i], sizeof(token[i]), name, key, sizeof(key)); - if ((-1 == len) || (len >= sizeof(token[i]))) abort(); - token[i][len] = '\0'; -#endif - } -} - - -/* - * Base 64 (GPL: see COPYING) - */ - -/* C89 compliant way to cast 'char' to 'unsigned char'. */ -static inline unsigned char -to_uchar (char ch) -{ - return ch; -} - -/* Base64 encode IN array of size INLEN into OUT array of size OUTLEN. - If OUTLEN is less than BASE64_LENGTH(INLEN), write as many bytes as - possible. If OUTLEN is larger than BASE64_LENGTH(INLEN), also zero - terminate the output buffer. */ -void -base64_encode (const char *in, size_t inlen, - char *out, size_t outlen) -{ - static const char b64str[64] = - "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; - - while (inlen && outlen) { - *out++ = b64str[(to_uchar(in[0]) >> 2) & 0x3f]; - if (!--outlen) - break; - *out++ = b64str[((to_uchar(in[0]) << 4) - + (--inlen ? to_uchar(in[1]) >> 4 : 0)) - & 0x3f]; - if (!--outlen) - break; - *out++ = (inlen - ? b64str[((to_uchar(in[1]) << 2) - + (--inlen ? to_uchar(in[2]) >> 6 : 0)) - & 0x3f] - : '='); - if (!--outlen) - break; - *out++ = inlen ? b64str[to_uchar(in[2]) & 0x3f] : '='; - if (!--outlen) - break; - if (inlen) - inlen--; - if (inlen) - in += 3; - } - - if (outlen) - *out = '\0'; -} - - -/* - * Bubble Babble - */ -char const consonants[] = "bcdfghklmnprstvz"; -char const vowels[] = "aeiouy"; - -#define bubblebabble_len(n) (6*(((n)/2)+1)) - -/** Compute bubble babble for input buffer. - * - * The generated output will be of length 6*((inlen/2)+1), including the - * trailing NULL. - * - * Test vectors: - * `' (empty string) `xexax' - * `1234567890' `xesef-disof-gytuf-katof-movif-baxux' - * `Pineapple' `xigak-nyryk-humil-bosek-sonax' - */ -void -bubblebabble(unsigned char *out, - unsigned char const *in, - const size_t inlen) -{ - size_t pos = 0; - int seed = 1; - size_t i = 0; - - out[pos++] = 'x'; - while (1) { - unsigned char c; - - if (i == inlen) { - out[pos++] = vowels[seed % 6]; - out[pos++] = 'x'; - out[pos++] = vowels[seed / 6]; - break; - } - - c = in[i++]; - out[pos++] = vowels[(((c >> 6) & 3) + seed) % 6]; - out[pos++] = consonants[(c >> 2) & 15]; - out[pos++] = vowels[((c & 3) + (seed / 6)) % 6]; - if (i == inlen) { - break; - } - seed = ((seed * 5) + (c * 7) + in[i]) % 36; - - c = in[i++]; - out[pos++] = consonants[(c >> 4) & 15]; - out[pos++] = '-'; - out[pos++] = consonants[c & 15]; - } - - out[pos++] = 'x'; - out[pos] = '\0'; -} - - - -int -randint(int max) -{ - return random() % max; -} - -#define itokenlen 5 - -char const * -bogus_token() -{ - static char token[TOKEN_MAX]; - unsigned char crap[itokenlen]; - unsigned char digest[bubblebabble_len(itokenlen)]; - int i; - - for (i = 0; i < sizeof(crap); i += 1 ) { - crap[i] = (unsigned char)randint(256); - } - bubblebabble(digest, (unsigned char *)&crap, itokenlen); - snprintf(token, sizeof(token), "bogus:%s", digest); - token[sizeof(token) - 1] = '\0'; - - return token; -} - -#define choice(a) (a[randint(sizeof(a)/sizeof(*a))]) - -char const *users[] = {"alice", "bob", "carol", "dave", - "eve", "fran", "gordon", - "isaac", "justin", "mallory", - "oscar", "pat", "steve", - "trent", "vanna", "walter", "zoe"}; - - -char const * -user() -{ - return choice(users); -} - -char const *filenames[] = {"about", "request", "page", "buttons", - "images", "overview"}; -char const *extensions[] = {"html", "htm", "jpg", "png", "css", "cgi"}; -char const *fields[] = {"q", "s", "search", "id", "req", "oid", "pmt", - "u", "page", "xxnp", "stat", "jk", "ttb", - "access", "domain", "needle", "service", "client"}; -char const *values[] = {"1", "turnip", "chupacabra", "58", "identify", - "parthenon", "jellyfish", "pullman", "auth", - "xa4Jmwl", "cornmeal", "ribbon", "49299248", - "javaWidget", "crashdump", "priority", - "blogosphere"}; - -char const * -url() -{ - static char url[200]; - int i, parts; - - strcpy(url, "/"); - - parts = randint(4); - for (i = 0; i < parts; i += 1) { - if (i > 0) { - strcat(url, "/"); - } - strcat(url, choice(filenames)); - } - - if (randint(5) > 1) { - if (i > 0) { - strcat(url, "."); - strcat(url, choice(extensions)); - } - } else { - parts = randint(8) + 1; - for (i = 0; i < parts; i += 1) { - if (0 == i) { - strcat(url, "?"); - } else { - strcat(url, "&"); - } - strcat(url, choice(fields)); - strcat(url, "="); - strcat(url, choice(values)); - } - } - - return url; -} - - -struct message { - time_t when; - char text[300]; - struct message *next; -}; - -/* Allocate some messages */ -struct message heap[QSIZE]; - -struct message *pool; -struct message *queue; - -struct message * -get_message() -{ - struct message *ret = pool; - - if (pool) { - pool = pool->next; - } - - return ret; -} - -void -free_message(struct message *msg) -{ - if (msg) { - msg->next = pool; - pool = msg; - } -} - -/* Either get count messages, or don't get any at all. */ -int -get_many_messages(struct message **msgs, size_t count) -{ - int i; - - for (i = 0; i < count; i += 1) { - msgs[i] = get_message(); - } - - if (NULL == msgs[i-1]) { - for (i = 0; i < count; i += 1) { - free_message(msgs[i]); - } - return -1; - } - - return 0; -} - -void -enqueue_message(struct message *msg) -{ - struct message *cur; - - /* In some cases, we want msg to be at the head */ - if ((NULL == queue) || (queue->when > msg->when)) { - msg->next = queue; - queue = msg; - return; - } - - /* Find where to stick it */ - for (cur = queue; NULL != cur->next; cur = cur->next) { - if (cur->next->when > msg->when) break; - } - - /* Insert it after cur */ - msg->next = cur->next; - cur->next = msg; -} - -void -enqueue_messages(struct message **msgs, size_t count) -{ - int i; - - for (i = 0; i < count; i += 1) { - enqueue_message(msgs[i]); - } -} - -struct message * -dequeue_message(time_t now) -{ - if ((NULL != queue) && (queue->when <= now)) { - struct message *ret = queue; - - queue = queue->next; - free_message(ret); - return ret; - } - - return NULL; -} - -int -main(int argc, char *argv[]) -{ - int i; - int pid = 52; - time_t then = time(NULL) - 100; /* Assure we get new tokens right away */ - - /* Seed RNG */ - srandom(then); - - /* Initialize free messages */ - { - pool = &(heap[0]); - for (i = 0; i < QSIZE - 1; i += 1) { - heap[i].next = &(heap[i+1]); - } - heap[i].next = NULL; - } - - /* Now let's make some crap! */ - while (! feof(stdout)) { - struct message *msg; - time_t now = time(NULL); - int i, max; - - /* Print messages */ - while ((msg = dequeue_message(now))) { - char ftime[80]; - struct tm *tm; - - tm = gmtime(&msg->when); - if (! tm) { - snprintf(ftime, sizeof(ftime), "%ld", now); - } else { - strftime(ftime, sizeof(ftime), "%b %d %T", tm); - } - printf("%s loghost %s\n", ftime, msg->text); - } - fflush(stdout); - - /* Time for new tokens? */ - if (then + 60 <= now) { - read_tokens(); - then = now; - } - - /* Make some messages */ - max = MSGS_PER_SEC_MIN + randint(MSGS_PER_SEC_MAX - MSGS_PER_SEC_MIN); - - for (i = 0; i < max; i += 1) { - time_t start = now + 1; - struct message *messages[10]; - - /* Increment the PID */ - pid = (pid + 1 + randint(20)) % PID_MAX; - - switch (randint(90)) { - case 0: - /* Internal diagnostic! */ - if (-1 != get_many_messages(messages, 1)) { - int queued, pooled; - struct message *msg; - - for (pooled = 0, msg = pool; - msg; - msg = msg->next, pooled += 1); - /* Start at one because of this message */ - for (queued = 1, msg = queue; - msg; - msg = msg->next, queued += 1); - - messages[0]->when = now; - snprintf(messages[0]->text, sizeof(messages[0]->text), - "DEBUG: %d in pool, %d in queue (%d total)", - pooled, queued, pooled + queued); - enqueue_messages(messages, 1); - } - case 1: - /* Lame-o "token" service */ - if (-1 != get_many_messages(messages, 1)) { - messages[0]->when = start; - snprintf(messages[0]->text, sizeof(messages[0]->text), - "tokenserv[%d]: token is %s", - pid, token[0]); - enqueue_messages(messages, 1); - } - /* Always follow this with a couple lines of fluff so it's - not the last thing in a batch */ - max += 2; - break; - case 2: - /* IMAP */ - { - char const *mytoken; - char const *u; - char btoken[TOKEN_MAX * 2]; - - if (randint(5) == 0) { - mytoken = token[1]; - u = "token"; - } else { - mytoken = bogus_token(); - u = user(); - } - base64_encode(mytoken, strlen(mytoken), btoken, sizeof(btoken)); - - if (-1 != get_many_messages(messages, 2)) { - const int offset=15; - - messages[0]->when = start; - snprintf(messages[0]->text, sizeof(messages[0]->text), - "imapd[%d]: Login: user=%s method=PLAIN token1=%.*s", - pid, u, offset, btoken); - - messages[1]->when = start + 4 + randint(60); - snprintf(messages[1]->text, sizeof(messages[1]->text), - "imapd[%d]: Disconnected: Logged out token2=%s", - pid, btoken + offset); - - enqueue_messages(messages, 2); - } - } - case 3: - /* IRC */ - if (-1 != get_many_messages(messages, 3)) { - int connection = randint(512); - int port = randint(65536); - - messages[0]->when = start; - snprintf(messages[0]->text, sizeof(messages[0]->text), - "ircd: Accepted connection %d from %d.%d.%d.%d:%d on socket %d.", - connection, - randint(256), randint(256), - randint(256), randint(256), - port, - randint(256)); - - messages[1]->when = start + randint(5); - snprintf(messages[1]->text, sizeof(messages[1]->text), - "ircd: User \"%s!~%s@dirtbags.net\" registered (connection %d).", - user(), user(), connection); - - - messages[2]->when = messages[1]->when + randint(600); - snprintf(messages[2]->text, sizeof(messages[2]->text), - "ircd: Shutting down connection %d (Got QUIT command.) with dirtbags.net:%d.", - connection, port); - - enqueue_messages(messages, 3); - } - break; - case 4: - /* cron */ - if (-1 != get_many_messages(messages, 1)) { - messages[0]->when = start; - snprintf(messages[0]->text, sizeof(messages[0]->text), - "/USR/SBIN/CRON[%d]: (root) CMD ( /opt/bloatware/cleanup.sh )", - pid); - enqueue_messages(messages, 1); - } - break; - case 5: - /* sudo */ - if (-1 != get_many_messages(messages, 1)) { - char const *u = user(); - - messages[0]->when = start; - snprintf(messages[0]->text, sizeof(messages[0]->text), - "sudo: %12s : TTY=pts/%d ; PWD=/home/%s ; USER=root; COMMAND=/usr/bin/less /var/log/syslog", - u, randint(12), u); - enqueue_messages(messages, 1); - } - break; - case 6 ... 20: - /* SMTP */ - { - char const *mytoken; - size_t tokenlen; - char const *host; - size_t hostlen; - char const *from; - size_t fromlen; - char const *to; - int is_token; - - if (randint(10) == 0) { - is_token = 1; - mytoken = token[2]; - } else { - is_token = 0; - mytoken = bogus_token(); - } - - tokenlen = strlen(mytoken); - host = mytoken; - hostlen = tokenlen/3; - from = mytoken + hostlen; - fromlen = tokenlen/3; - to = mytoken + hostlen + fromlen; - - if (-1 != get_many_messages(messages, 8)) { - int o1 = randint(256); - int o2 = randint(256); - int o3 = randint(256); - int o4 = randint(256); - long int mid = random(); - long int mid2 = random(); - - messages[0]->when = start; - snprintf(messages[0]->text, sizeof(messages[0]->text), - "smtp/smtpd[%d]: connect from %.*s[%d.%d.%d.%d]", - pid, hostlen, host, o1, o2, o3, o4); - - messages[1]->when = messages[0]->when + randint(1); - snprintf(messages[1]->text, sizeof(messages[1]->text), - "smtp/smtpd[%d]: %08lX: client=%.*s[%d.%d.%d.%d]", - pid, mid, hostlen, host, o1, o2, o3, o4); - - messages[2]->when = messages[1]->when + 2 + randint(3); - snprintf(messages[2]->text, sizeof(messages[2]->text), - "smtp/smtpd[%d]: disconnect from [%d.%d.%d.%d]", - pid, o1, o2, o3, o4); - - pid = (pid + 1 + randint(5)) % PID_MAX; - messages[3]->when = messages[1]->when + 1 + randint(2); - snprintf(messages[3]->text, sizeof(messages[3]->text), - "smtp/cleanup[%d]: %08lX: message-id=<%08lx@junkmail.spam>", - pid, mid, mid2); - - pid = (pid + 1 + randint(5)) % PID_MAX; - messages[4]->when = messages[3]->when + randint(1); - snprintf(messages[4]->text, sizeof(messages[4]->text), - "smtp/qmgr[%d]: %08lX: from=<%.*s@junkmail.spam>, size=%d, nrcpt=1 (queue active)", - pid, mid, fromlen, from, randint(6000)); - - messages[5]->when = messages[4]->when + 2 + randint(2); - snprintf(messages[5]->text, sizeof(messages[5]->text), - "smtp/qmgr[%d]: %08lX: removed", - pid, mid); - - messages[6]->when = messages[4]->when + randint(1); - snprintf(messages[6]->text, sizeof(messages[6]->text), - "smtp/deliver(%s): msgid=<%08lx@junkmail.spam>: saved to INBOX", - to, mid2); - - pid = (pid + 1 + randint(5)) % PID_MAX; - messages[7]->when = messages[4]->when + randint(1); - snprintf(messages[7]->text, sizeof(messages[7]->text), - "smtp/local[%d]: %08lX: to <%s@dirtbags.net>, relay=local, dsn=2.0.0, status=sent (delivered to command /usr/bin/deliver)", - pid, mid, to); - - enqueue_messages(messages, 8); - } - } - break; - case 21 ... 30: - /* ssh */ - break; - default: - /* HTTP */ - if (-1 != get_many_messages(messages, 1)) { - messages[0]->when = start; - snprintf(messages[0]->text, sizeof(messages[0]->text), - "httpd[%d]: %d.%d.%d.%d\t-\tdirtbags.net\t80\tGET\t%s\t-\tHTTP/1.1\t200\t%d\t-\tMozilla/5.0", - pid, - randint(256), randint(256), - randint(256), randint(256), - url(), randint(4000) + 378); - enqueue_messages(messages, 1); - } - break; - } - } - - { - struct timespec t = { 1, 0 }; - - nanosleep(&t, NULL); - } - } - - return 0; -} diff --git a/packages/logger/src/token.c b/packages/logger/src/token.c deleted file mode 120000 index b64f986..0000000 --- a/packages/logger/src/token.c +++ /dev/null @@ -1 +0,0 @@ -../../../src/token.c \ No newline at end of file diff --git a/packages/logger/src/token.h b/packages/logger/src/token.h deleted file mode 120000 index 18eaf6f..0000000 --- a/packages/logger/src/token.h +++ /dev/null @@ -1 +0,0 @@ -../../../src/token.h \ No newline at end of file diff --git a/packages/logger/tokens/logger0/category b/packages/logger/tokens/logger0/category deleted file mode 100644 index 7c82fcf..0000000 --- a/packages/logger/tokens/logger0/category +++ /dev/null @@ -1 +0,0 @@ -logger diff --git a/packages/logger/tokens/logger0/category.key b/packages/logger/tokens/logger0/category.key deleted file mode 100644 index f11bbd8..0000000 --- a/packages/logger/tokens/logger0/category.key +++ /dev/null @@ -1 +0,0 @@ -SÞ*ç¹¼ŠÉÐ7þkðp \ No newline at end of file diff --git a/packages/logger/tokens/logger0/enc.key b/packages/logger/tokens/logger0/enc.key deleted file mode 100644 index b6a79d9..0000000 --- a/packages/logger/tokens/logger0/enc.key +++ /dev/null @@ -1 +0,0 @@ -™ëÀÎàÉí[½ÈµýÝ  \ No newline at end of file diff --git a/packages/logger/tokens/logger1/category b/packages/logger/tokens/logger1/category deleted file mode 100644 index 7c82fcf..0000000 --- a/packages/logger/tokens/logger1/category +++ /dev/null @@ -1 +0,0 @@ -logger diff --git a/packages/logger/tokens/logger1/category.key b/packages/logger/tokens/logger1/category.key deleted file mode 100644 index f11bbd8..0000000 --- a/packages/logger/tokens/logger1/category.key +++ /dev/null @@ -1 +0,0 @@ -SÞ*ç¹¼ŠÉÐ7þkðp \ No newline at end of file diff --git a/packages/logger/tokens/logger1/enc.key b/packages/logger/tokens/logger1/enc.key deleted file mode 100644 index b6a79d9..0000000 --- a/packages/logger/tokens/logger1/enc.key +++ /dev/null @@ -1 +0,0 @@ -™ëÀÎàÉí[½ÈµýÝ  \ No newline at end of file diff --git a/packages/logger/tokens/logger2/category b/packages/logger/tokens/logger2/category deleted file mode 100644 index 7c82fcf..0000000 --- a/packages/logger/tokens/logger2/category +++ /dev/null @@ -1 +0,0 @@ -logger diff --git a/packages/logger/tokens/logger2/category.key b/packages/logger/tokens/logger2/category.key deleted file mode 100644 index f11bbd8..0000000 --- a/packages/logger/tokens/logger2/category.key +++ /dev/null @@ -1 +0,0 @@ -SÞ*ç¹¼ŠÉÐ7þkðp \ No newline at end of file diff --git a/packages/logger/tokens/logger2/enc.key b/packages/logger/tokens/logger2/enc.key deleted file mode 100644 index b6a79d9..0000000 --- a/packages/logger/tokens/logger2/enc.key +++ /dev/null @@ -1 +0,0 @@ -™ëÀÎàÉí[½ÈµýÝ  \ No newline at end of file diff --git a/packages/lxc/lxc.mk b/packages/lxc/lxc.mk new file mode 100644 index 0000000..306246b --- /dev/null +++ b/packages/lxc/lxc.mk @@ -0,0 +1,49 @@ +LXC_PKGDIR = $(TARGET)/lxc +LXC_BUILDDIR = $(BUILD)/lxc +LXC_VERSION = 0.7.5 +LXC_TAR = $(CACHE)/lxc-$(LXC_VERSION).tar.gz +LXC_URL = http://lxc.sourceforge.net/download/lxc/lxc-$(LXC_VERSION).tar.gz +LXC_SRCDIR = $(LXC_BUILDDIR)/lxc-$(LXC_VERSION) + +LXC_COMMANDS = attach cgroup checkpoint console execute freeze +LXC_COMMANDS += info init kill monitor restart start stop +LXC_COMMANDS += unfreeze unshare wait + +LXC_PROGRAMS = $(addprefix $(LXC_SRCDIR)/src/lxc/lxc-, $(LXC_COMMANDS)) + + +# Prevents automake from mangling cross-compiled binary names +LXC_CC_HOST := $(shell $(CC) -v 2>&1 | awk '/Target:/{print $$2}') +LXC_CONF_OPT := --host=i386-unknown-linux-uclibc --program-transform-name= + +lxc-install: lxc-build + +$(LXC_TAR): + @ mkdir -p $(@D) + wget -O $@ $(LXC_URL) + +lxc-source: $(LXC_BUILDDIR)/source +$(LXC_BUILDDIR)/source: $(LXC_TAR) + mkdir -p $(LXC_BUILDDIR) + zcat $(LXC_TAR) | (cd $(LXC_BUILDDIR) && tar xf -) + touch $@ + +lxc-build: $(LXC_BUILDDIR)/built +$(LXC_BUILDDIR)/built: $(LXC_BUILDDIR)/source + cd $(LXC_SRCDIR) && ./configure $(LXC_CONF_OPT) + $(MAKE) -C $(LXC_SRCDIR) + touch $@ + +lxc-install: lxc-build + mkdir -p $(LXC_PKGDIR)/lib + cp $(LXC_SRCDIR)/src/lxc/liblxc.so $(LXC_PKGDIR)/lib + + mkdir -p $(LXC_PKGDIR)/bin + cp $(LXC_PROGRAMS) $(LXC_PKGDIR)/bin + +# $(call COPYTREE, packages/lxc/service, $(LXC_PKGDIR)/service) + +lxc-clean: + rm -rf $(LXC_BUILDDIR) + +PACKAGES += lxc diff --git a/packages/printf/src/token.c b/packages/printf/src/token.c deleted file mode 120000 index f0a9dcd..0000000 --- a/packages/printf/src/token.c +++ /dev/null @@ -1 +0,0 @@ -../../../include/token.c \ No newline at end of file diff --git a/packages/printf/src/token.h b/packages/printf/src/token.h deleted file mode 120000 index 21e62e4..0000000 --- a/packages/printf/src/token.h +++ /dev/null @@ -1 +0,0 @@ -../../../include/token.h \ No newline at end of file diff --git a/src/arc4.c b/src/arc4.c deleted file mode 100644 index 01e3b27..0000000 --- a/src/arc4.c +++ /dev/null @@ -1,230 +0,0 @@ -#include -#include -#include -#include -#include "arc4.h" - -#define swap(a, b) do {uint8_t _swap=a; a=b, b=_swap;} while (0) - -void -arc4_init(struct arc4_ctx *ctx, uint8_t const *key, size_t keylen) -{ - int i; - int j = 0; - - for (i = 0; i < 256; i += 1) { - ctx->S[i] = i; - } - - for (i = 0; i < 256; i += 1) { - j = (j + ctx->S[i] + key[i % keylen]) % 256; - swap(ctx->S[i], ctx->S[j]); - } - ctx->i = 0; - ctx->j = 0; -} - -uint8_t -arc4_out(struct arc4_ctx *ctx) -{ - ctx->i = (ctx->i + 1) % 256; - ctx->j = (ctx->j + ctx->S[ctx->i]) % 256; - swap(ctx->S[ctx->i], ctx->S[ctx->j]); - return ctx->S[(ctx->S[ctx->i] + ctx->S[ctx->j]) % 256]; -} - -void -arc4_crypt(struct arc4_ctx *ctx, - uint8_t *obuf, const uint8_t *ibuf, size_t buflen) -{ - size_t k; - - for (k = 0; k < buflen; k += 1) { - obuf[k] = ibuf[k] ^ arc4_out(ctx); - } -} - -/* Create a nonce as an arc4 stream with key=seed */ -void -arc4_nonce(uint8_t *nonce, size_t noncelen, - void *seed, size_t seedlen) -{ - struct arc4_ctx ctx; - int i; - - arc4_init(&ctx, seed, seedlen); - for (i = 0; i < noncelen; i += 1) { - nonce[i] = arc4_out(&ctx); - } -} - - -/*************************************************** - * - * Psuedo Random Number Generation - * - */ -static struct arc4_ctx prng_ctx; -static int prng_initialized = 0; - -void -arc4_rand_seed(const uint8_t *seed, size_t seedlen) -{ - arc4_init(&prng_ctx, seed, seedlen); - prng_initialized = 1; -} - -static void -arc4_rand_autoseed() -{ - if (! prng_initialized) { - uint8_t key[ARC4_KEYLEN]; - FILE *urandom; - - /* Open /dev/urandom or die trying */ - urandom = fopen("/dev/urandom", "r"); - if (! urandom) { - perror("Opening /dev/urandom"); - abort(); - } - setbuf(urandom, NULL); - fread(&key, sizeof(key), 1, urandom); - fclose(urandom); - - arc4_rand_seed(key, sizeof(key)); - } -} - -uint8_t -arc4_rand8() -{ - arc4_rand_autoseed(); - return arc4_out(&prng_ctx); -} - -uint32_t -arc4_rand32() -{ - arc4_rand_autoseed(); - return ((arc4_out(&prng_ctx) << 0) | - (arc4_out(&prng_ctx) << 8) | - (arc4_out(&prng_ctx) << 16) | - (arc4_out(&prng_ctx) << 24)); -} - -/***************************************** - * - * Stream operations - * - */ - -ssize_t -arc4_encrypt_stream(FILE *out, FILE *in, - const uint8_t *key, size_t keylen) -{ - struct arc4_ctx ctx; - uint32_t seed = arc4_rand32(); - uint8_t nonce[ARC4_KEYLEN]; - ssize_t written = 0; - int i; - - fwrite("arc4", 4, 1, out); - fwrite(&seed, sizeof(seed), 1, out); - - arc4_nonce(nonce, sizeof(nonce), &seed, sizeof(seed)); - for (i = 0; i < keylen; i += 1) { - nonce[i] ^= key[i]; - } - arc4_init(&ctx, nonce, sizeof(nonce)); - - while (1) { - int c = fgetc(in); - - if (EOF == c) break; - fputc((uint8_t)c ^ arc4_out(&ctx), out); - written += 1; - } - - return written; -} - -ssize_t -arc4_decrypt_stream(FILE *out, FILE *in, - const uint8_t *key, size_t keylen) -{ - struct arc4_ctx ctx; - uint32_t seed; - uint8_t nonce[ARC4_KEYLEN]; - ssize_t written = 0; - char sig[4]; - int i; - - fread(&sig, sizeof(sig), 1, in); - if (memcmp(sig, "arc4", 4)) { - return -1; - } - fread(&seed, sizeof(seed), 1, in); - - arc4_nonce(nonce, sizeof(nonce), &seed, sizeof(seed)); - for (i = 0; i < keylen; i += 1) { - nonce[i] ^= key[i]; - } - arc4_init(&ctx, nonce, sizeof(nonce)); - - while (1) { - int c = fgetc(in); - - if (EOF == c) break; - fputc((uint8_t)c ^ arc4_out(&ctx), out); - written += 1; - } - - return written; -} - - -#ifdef ARC4_MAIN - -#include -#include - -int -main(int argc, char *argv[]) -{ - uint8_t key[ARC4_KEYLEN] = {0}; - size_t keylen; - - /* Read key and initialize context */ - { - char *ekey = getenv("KEY"); - - if (ekey) { - keylen = strlen(ekey); - memcpy(key, ekey, keylen); - } else { - keylen = read(3, key, sizeof(key)); - if (-1 == keylen) { - fprintf(stderr, "error: must specify key.\n"); - return 1; - } - } - } - - if (! argv[1]) { - if (-1 == arc4_decrypt_stream(stdout, stdin, key, keylen)) { - fprintf(stderr, "error: not an arc4 stream.\n"); - return 1; - } - } else if (0 == strcmp(argv[1], "-e")) { - arc4_encrypt_stream(stdout, stdin, key, keylen); - } else { - fprintf(stderr, "Usage: %s [-e] -#include -#include - -#define ARC4_KEYLEN 256 - -struct arc4_ctx { - uint8_t S[256]; - uint8_t i; - uint8_t j; -}; - -/* Stream operations */ -ssize_t -arc4_encrypt_stream(FILE *out, FILE *in, - const uint8_t *key, size_t keylen); -ssize_t -arc4_decrypt_stream(FILE *out, FILE *in, - const uint8_t *key, size_t keylen); - - -/* Auto-seeding Psuedo Random Number Generator */ -void arc4_rand_seed(const uint8_t *seed, size_t seedlen); -uint8_t arc4_rand8(); -uint32_t arc4_rand32(); - -/* Low-level operations */ -void arc4_init(struct arc4_ctx *ctx, const uint8_t *key, size_t keylen); -uint8_t arc4_out(struct arc4_ctx *ctx); -void arc4_crypt(struct arc4_ctx *ctx, - uint8_t *obuf, const uint8_t *ibuf, size_t buflen); -void arc4_crypt_buffer(const uint8_t *key, size_t keylen, - uint8_t *buf, size_t buflen); -void arc4_nonce(uint8_t *nonce, size_t noncelen, void *seed, size_t seedlen); - - -#endif diff --git a/src/token.c b/src/token.c deleted file mode 100644 index 969e3d2..0000000 --- a/src/token.c +++ /dev/null @@ -1,64 +0,0 @@ -#define _GNU_SOURCE -#include -#include -#include -#include "token.h" -#include "arc4.h" - -#ifndef CTF_BASE -#define CTF_BASE "/var/lib/ctf" -#endif - -ssize_t -write_token(FILE *out, - const char *name, - const uint8_t *key, size_t keylen) -{ - char *base; - char path[PATH_MAX]; - int pathlen; - FILE *f; - ssize_t ret; - - base = getenv("CTF_BASE"); - if (! base) base = CTF_BASE; - - pathlen = snprintf(path, sizeof(path) - 1, - "%s/tokens/%s", base, name); - path[pathlen] = '\0'; - - f = fopen(path, "r"); - if (NULL == f) return -1; - ret = arc4_decrypt_stream(out, f, key, keylen); - fclose(f); - - return ret; -} - -ssize_t -print_token(const char *name, - const uint8_t *key, size_t keylen) -{ - return write_token(stdout, name, key, keylen); -} - -ssize_t -get_token(char *buf, size_t buflen, - const char *name, - const uint8_t *key, size_t keylen) -{ - FILE *f; - ssize_t l; - - f = fmemopen(buf, buflen, "w"); - if (! f) return -1; - - l = write_token(f, name, key, keylen); - fclose(f); - if (-1 == l) return -1; - - while ('\n' == buf[l-1]) l -= 1; - buf[l-1] = '\0'; - - return l; -} diff --git a/src/token.h b/src/token.h deleted file mode 100644 index f9eacbb..0000000 --- a/src/token.h +++ /dev/null @@ -1,19 +0,0 @@ -#ifndef __TOKEN_H__ -#define __TOKEN_H__ - -#define TOKEN_MAX 50 - -#include -#include -#include - -ssize_t write_token(FILE *out, - const char *name, - const uint8_t *key, size_t keylen); -ssize_t print_token(const char *name, - const uint8_t *key, size_t keylen); -ssize_t get_token(char *buf, size_t buflen, - const char *name, - const uint8_t *key, size_t keylen); - -#endif From 45c52d73f836aa37aadae44be04ddc3a8a7c2dca Mon Sep 17 00:00:00 2001 From: Neale Pickett Date: Mon, 26 Sep 2011 11:51:04 -0600 Subject: [PATCH 13/36] Attempt to bring in lxc --- packages/libcap/libcap.mk | 28 ++++++++++++++++++++++++++++ packages/lxc/lxc.mk | 10 +++++++--- 2 files changed, 35 insertions(+), 3 deletions(-) create mode 100644 packages/libcap/libcap.mk diff --git a/packages/libcap/libcap.mk b/packages/libcap/libcap.mk new file mode 100644 index 0000000..500641a --- /dev/null +++ b/packages/libcap/libcap.mk @@ -0,0 +1,28 @@ +LIBCAP_PKGDIR = $(TARGET)/libcap +LIBCAP_BUILDDIR = $(BUILD)/libcap +LIBCAP_VERSION = 2.22 +LIBCAP_TAR = $(CACHE)/libcap-$(LIBCAP_VERSION).tar.gz +# XXX: kernel.org was down when I wrote this, but is the canonical source +LIBCAP_URL = http://ftp.debian.org/debian/pool/main/libc/libcap2/libcap2_$(LIBCAP_VERSION).orig.tar.gz +LIBCAP_SRCDIR = $(LIBCAP_BUILDDIR)/libcap-$(LIBCAP_VERSION) + +LIBCAP_LDOPTS = -L$(CURDIR)/$(LIBCAP_SRCDIR)/libcap +LIBCAP_CFLAGS = -I$(CURDIR)/$(LIBCAP_SRCDIR)/libcap/include + +$(LIBCAP_TAR): + mkdir -p $(@D) + wget -O $@ $(LIBCAP_URL) + +libcap-source: $(LIBCAP_BUILDDIR)/source +$(LIBCAP_BUILDDIR)/source: $(LIBCAP_TAR) + mkdir -p $(@D) + zcat $< | ( cd $(@D) && tar xf -) + touch $@ + + +# This library's build sort of blows. +libcap-build: $(LIBCAP_BUILDDIR)/built +$(LIBCAP_BUILDDIR)/built: $(LIBCAP_BUILDDIR)/source + $(MAKE) -C $(LIBCAP_SRCDIR)/libcap _makenames + $(MAKE) -C $(LIBCAP_SRCDIR) CC=$(CC) + touch $@ diff --git a/packages/lxc/lxc.mk b/packages/lxc/lxc.mk index 306246b..cfdcec1 100644 --- a/packages/lxc/lxc.mk +++ b/packages/lxc/lxc.mk @@ -29,9 +29,9 @@ $(LXC_BUILDDIR)/source: $(LXC_TAR) touch $@ lxc-build: $(LXC_BUILDDIR)/built -$(LXC_BUILDDIR)/built: $(LXC_BUILDDIR)/source - cd $(LXC_SRCDIR) && ./configure $(LXC_CONF_OPT) - $(MAKE) -C $(LXC_SRCDIR) +$(LXC_BUILDDIR)/built: $(LXC_BUILDDIR)/source libcap-build + cd $(LXC_SRCDIR) && CFLAGS="$(LIBCAP_CFLAGS)" LDFLAGS="$(LIBCAP_LDFLAGS)" ./configure $(CONFIG_XCOMPILE_FLAGS) + $(MAKE) -C $(LXC_SRCDIR) LDFLAGS="-R /opt/lxc/lib" touch $@ lxc-install: lxc-build @@ -46,4 +46,8 @@ lxc-install: lxc-build lxc-clean: rm -rf $(LXC_BUILDDIR) + +LIBCAP_PKGDIR = $(TARGET)/libcap + + PACKAGES += lxc From 3f48e7630a0be86296e941c00d24a89adb880f66 Mon Sep 17 00:00:00 2001 From: Neale Pickett Date: Mon, 26 Sep 2011 11:52:28 -0600 Subject: [PATCH 14/36] Move CONFIG_XCOMPILE_FLAGS into packages.mk --- packages/lxc/lxc.mk | 49 --------------------------------------------- 1 file changed, 49 deletions(-) delete mode 100644 packages/lxc/lxc.mk diff --git a/packages/lxc/lxc.mk b/packages/lxc/lxc.mk deleted file mode 100644 index 306246b..0000000 --- a/packages/lxc/lxc.mk +++ /dev/null @@ -1,49 +0,0 @@ -LXC_PKGDIR = $(TARGET)/lxc -LXC_BUILDDIR = $(BUILD)/lxc -LXC_VERSION = 0.7.5 -LXC_TAR = $(CACHE)/lxc-$(LXC_VERSION).tar.gz -LXC_URL = http://lxc.sourceforge.net/download/lxc/lxc-$(LXC_VERSION).tar.gz -LXC_SRCDIR = $(LXC_BUILDDIR)/lxc-$(LXC_VERSION) - -LXC_COMMANDS = attach cgroup checkpoint console execute freeze -LXC_COMMANDS += info init kill monitor restart start stop -LXC_COMMANDS += unfreeze unshare wait - -LXC_PROGRAMS = $(addprefix $(LXC_SRCDIR)/src/lxc/lxc-, $(LXC_COMMANDS)) - - -# Prevents automake from mangling cross-compiled binary names -LXC_CC_HOST := $(shell $(CC) -v 2>&1 | awk '/Target:/{print $$2}') -LXC_CONF_OPT := --host=i386-unknown-linux-uclibc --program-transform-name= - -lxc-install: lxc-build - -$(LXC_TAR): - @ mkdir -p $(@D) - wget -O $@ $(LXC_URL) - -lxc-source: $(LXC_BUILDDIR)/source -$(LXC_BUILDDIR)/source: $(LXC_TAR) - mkdir -p $(LXC_BUILDDIR) - zcat $(LXC_TAR) | (cd $(LXC_BUILDDIR) && tar xf -) - touch $@ - -lxc-build: $(LXC_BUILDDIR)/built -$(LXC_BUILDDIR)/built: $(LXC_BUILDDIR)/source - cd $(LXC_SRCDIR) && ./configure $(LXC_CONF_OPT) - $(MAKE) -C $(LXC_SRCDIR) - touch $@ - -lxc-install: lxc-build - mkdir -p $(LXC_PKGDIR)/lib - cp $(LXC_SRCDIR)/src/lxc/liblxc.so $(LXC_PKGDIR)/lib - - mkdir -p $(LXC_PKGDIR)/bin - cp $(LXC_PROGRAMS) $(LXC_PKGDIR)/bin - -# $(call COPYTREE, packages/lxc/service, $(LXC_PKGDIR)/service) - -lxc-clean: - rm -rf $(LXC_BUILDDIR) - -PACKAGES += lxc From 0df9801976807240cdaa7f63e351bf4e081ff7bb Mon Sep 17 00:00:00 2001 From: Neale Pickett Date: Mon, 26 Sep 2011 12:13:50 -0600 Subject: [PATCH 15/36] Reall move CONFIG_XCOMPILE_FLAGS into packages.mk --- Makefile | 3 --- packages/packages.mk | 3 +++ 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index 329657e..4b9363b 100644 --- a/Makefile +++ b/Makefile @@ -10,9 +10,6 @@ CACHE = cache # The end result BIN = bin -# Things configure likes to see -CONFIG_XCOMPILE_FLAGS = --host=i386-linux --program-transform-name= - all: packages dist: ctf-install.zip diff --git a/packages/packages.mk b/packages/packages.mk index 2981412..d4b16f6 100644 --- a/packages/packages.mk +++ b/packages/packages.mk @@ -21,6 +21,9 @@ endef include packages/*/*.mk +# Things configure likes to see +CONFIG_XCOMPILE_FLAGS = --host=i386-linux --program-transform-name= + # Make foo depend on foo.pkg $(foreach p, $(PACKAGES), $(eval $p: $(BIN)/$p.pkg)) From bf40023ac6c551a4805ec7f7808f6c90d1e67c15 Mon Sep 17 00:00:00 2001 From: Neale Pickett Date: Mon, 26 Sep 2011 13:00:42 -0600 Subject: [PATCH 16/36] LXC compiling --- packages/libcap/libcap.mk | 2 +- packages/lxc/lxc.mk | 3 ++- packages/lxc/utmp.c | 11 +++++++++++ 3 files changed, 14 insertions(+), 2 deletions(-) create mode 100644 packages/lxc/utmp.c diff --git a/packages/libcap/libcap.mk b/packages/libcap/libcap.mk index 500641a..92f6ee1 100644 --- a/packages/libcap/libcap.mk +++ b/packages/libcap/libcap.mk @@ -6,7 +6,7 @@ LIBCAP_TAR = $(CACHE)/libcap-$(LIBCAP_VERSION).tar.gz LIBCAP_URL = http://ftp.debian.org/debian/pool/main/libc/libcap2/libcap2_$(LIBCAP_VERSION).orig.tar.gz LIBCAP_SRCDIR = $(LIBCAP_BUILDDIR)/libcap-$(LIBCAP_VERSION) -LIBCAP_LDOPTS = -L$(CURDIR)/$(LIBCAP_SRCDIR)/libcap +LIBCAP_LDFLAGS = -L$(CURDIR)/$(LIBCAP_SRCDIR)/libcap LIBCAP_CFLAGS = -I$(CURDIR)/$(LIBCAP_SRCDIR)/libcap/include $(LIBCAP_TAR): diff --git a/packages/lxc/lxc.mk b/packages/lxc/lxc.mk index cfdcec1..5d37df2 100644 --- a/packages/lxc/lxc.mk +++ b/packages/lxc/lxc.mk @@ -26,12 +26,13 @@ lxc-source: $(LXC_BUILDDIR)/source $(LXC_BUILDDIR)/source: $(LXC_TAR) mkdir -p $(LXC_BUILDDIR) zcat $(LXC_TAR) | (cd $(LXC_BUILDDIR) && tar xf -) + cp packages/lxc/utmp.c $(LXC_SRCDIR)/src/lxc/ touch $@ lxc-build: $(LXC_BUILDDIR)/built $(LXC_BUILDDIR)/built: $(LXC_BUILDDIR)/source libcap-build cd $(LXC_SRCDIR) && CFLAGS="$(LIBCAP_CFLAGS)" LDFLAGS="$(LIBCAP_LDFLAGS)" ./configure $(CONFIG_XCOMPILE_FLAGS) - $(MAKE) -C $(LXC_SRCDIR) LDFLAGS="-R /opt/lxc/lib" + LD_RUN_PATH=/opt/lxc/lib $(MAKE) -C $(LXC_SRCDIR) touch $@ lxc-install: lxc-build diff --git a/packages/lxc/utmp.c b/packages/lxc/utmp.c new file mode 100644 index 0000000..5b51ba2 --- /dev/null +++ b/packages/lxc/utmp.c @@ -0,0 +1,11 @@ +/* Detecting runlevels from utmp is straight up bullshit, you. + + 1. runit doesn't have run levels + 2. dbtl doesn't write utmp + 3. even if it did, it doesn't have the glibc functions this code + wants +*/ +int lxc_utmp_mainloop_add(struct lxc_epoll_descr *descr, + struct lxc_handler *handler) { + return 0; +} From 7db7440fbfa6945f83687e10962f77f59a70f343 Mon Sep 17 00:00:00 2001 From: Neale Pickett Date: Mon, 26 Sep 2011 14:13:37 -0600 Subject: [PATCH 17/36] Make LXC binaries search the right place for libraries --- packages/lxc/lxc.mk | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/packages/lxc/lxc.mk b/packages/lxc/lxc.mk index 5d37df2..e8edc3e 100644 --- a/packages/lxc/lxc.mk +++ b/packages/lxc/lxc.mk @@ -31,13 +31,14 @@ $(LXC_BUILDDIR)/source: $(LXC_TAR) lxc-build: $(LXC_BUILDDIR)/built $(LXC_BUILDDIR)/built: $(LXC_BUILDDIR)/source libcap-build - cd $(LXC_SRCDIR) && CFLAGS="$(LIBCAP_CFLAGS)" LDFLAGS="$(LIBCAP_LDFLAGS)" ./configure $(CONFIG_XCOMPILE_FLAGS) - LD_RUN_PATH=/opt/lxc/lib $(MAKE) -C $(LXC_SRCDIR) + cd $(LXC_SRCDIR) && CFLAGS="$(LIBCAP_CFLAGS)" LDFLAGS="$(LIBCAP_LDFLAGS) -Xlinker -rpath -Xlinker /opt/lxc/lib" ./configure $(CONFIG_XCOMPILE_FLAGS) + $(MAKE) -C $(LXC_SRCDIR) touch $@ lxc-install: lxc-build mkdir -p $(LXC_PKGDIR)/lib - cp $(LXC_SRCDIR)/src/lxc/liblxc.so $(LXC_PKGDIR)/lib + cp $(LXC_SRCDIR)/src/lxc/liblxc.so $(LXC_PKGDIR)/lib/liblxc.so.0 + cp $(LIBCAP_SRCDIR)/libcap/libcap.so.* $(LXC_PKGDIR)/lib mkdir -p $(LXC_PKGDIR)/bin cp $(LXC_PROGRAMS) $(LXC_PKGDIR)/bin From bdff29149a8eb76f4e85e70b1f862cffd7d9e3bb Mon Sep 17 00:00:00 2001 From: Neale Pickett Date: Wed, 28 Sep 2011 15:47:49 -0600 Subject: [PATCH 18/36] add mrd6 to router image --- packages/router/router.mk | 47 ++++++++++++++++++++++++++++++--------- 1 file changed, 37 insertions(+), 10 deletions(-) diff --git a/packages/router/router.mk b/packages/router/router.mk index d30118e..ed65d09 100644 --- a/packages/router/router.mk +++ b/packages/router/router.mk @@ -1,19 +1,17 @@ ROUTER_PKGDIR = $(TARGET)/router ROUTER_BUILDDIR = $(BUILD)/router +router-source: -router-source: $(ROUTER_BUILDDIR)/radvd-source - -router-build: $(ROUTER_BUILDDIR)/radvd-build +router-build: router-install: router-build - mkdir -p $(ROUTER_PKGDIR)/bin - - cp $(RADVD_SRCDIR)/radvd $(ROUTER_PKGDIR)/bin/ - cp $(RADVD_SRCDIR)/radvdump $(ROUTER_PKGDIR)/bin/ - $(call COPYTREE, packages/router/service, $(ROUTER_PKGDIR)/service) +router-clean: + rm -rf $(ROUTER_PKGDIR) $(ROUTER_BUILDDIR) + + ## ## radvd ## @@ -26,19 +24,48 @@ $(RADVD_TARBALL): @ mkdir -p $(@D) wget -O $@ $(RADVD_URL) +router-source: $(ROUTER_BUILDDIR)/radvd-source $(ROUTER_BUILDDIR)/radvd-source: $(RADVD_TARBALL) mkdir -p $(ROUTER_BUILDDIR) zcat $(RADVD_TARBALL) | (cd $(ROUTER_BUILDDIR) && tar xf -) touch $@ +router-build: $(ROUTER_BUILDDIR)/radvd-build $(ROUTER_BUILDDIR)/radvd-build: $(ROUTER_BUILDDIR)/radvd-source cd $(RADVD_SRCDIR) && ./configure $(CONFIG_XCOMPILE_FLAGS) $(MAKE) -C $(RADVD_SRCDIR) touch $@ +router-install: radvd-install +radvd-install: + mkdir -p $(ROUTER_PKGDIR)/bin + cp $(RADVD_SRCDIR)/radvd $(ROUTER_PKGDIR)/bin/ + cp $(RADVD_SRCDIR)/radvdump $(ROUTER_PKGDIR)/bin/ -router-clean: - rm -rf $(ROUTER_PKGDIR) +## +## mrd6 +## +MRD6_CACHE = $(CACHE)/mrd6.git +MRD6_BUILDDIR = $(ROUTER_BUILDDIR)/mrd6 +MRD6_URL = https://github.com/hugosantos/mrd6.git + +$(MRD6_CACHE): + git clone --bare $(MRD6_URL) $@ + +router-source: $(MRD6_BUILDDIR) +$(MRD6_BUILDDIR): $(MRD6_CACHE) + git clone $< $@ + +router-build: $(ROUTER_BUILDDIR)/mrd6-build +$(ROUTER_BUILDDIR)/mrd6-build: $(MRD6_BUILDDIR) + $(MAKE) -C $(MRD6_BUILDDIR) + touch $@ + +router-install: mrd6-install +mrd6-install: + mkdir -p $(ROUTER_PKGDIR)/bin + cp $(MRD6_BUILDDIR)/src/mrd $(ROUTER_PKGDIR)/bin + PACKAGES += router From e205b5913ca06a996663e98d9d0d23f6f9869728 Mon Sep 17 00:00:00 2001 From: Neale Pickett Date: Thu, 29 Sep 2011 09:32:27 -0600 Subject: [PATCH 19/36] add multicaster --- packages/multicaster/multicaster.mk | 16 +++ packages/multicaster/src/Makefile | 12 ++ packages/multicaster/src/multicaster-client.c | 109 ++++++++++++++++++ packages/multicaster/src/multicaster-server.c | 71 ++++++++++++ 4 files changed, 208 insertions(+) create mode 100644 packages/multicaster/multicaster.mk create mode 100644 packages/multicaster/src/Makefile create mode 100644 packages/multicaster/src/multicaster-client.c create mode 100644 packages/multicaster/src/multicaster-server.c diff --git a/packages/multicaster/multicaster.mk b/packages/multicaster/multicaster.mk new file mode 100644 index 0000000..ce8e15c --- /dev/null +++ b/packages/multicaster/multicaster.mk @@ -0,0 +1,16 @@ +MULTICASTER_PKGDIR = $(TARGET)/multicaster + +multicaster-install: multicaster-build + mkdir -p $(MULTICASTER_PKGDIR) + + mkdir -p $(MULTICASTER_PKGDIR)/bin/ + $(MAKE) -C packages/multicaster/src install DESTDIR=$(CURDIR)/$(MULTICASTER_PKGDIR) + +multicaster-clean: + rm -rf $(MULTICASTER_PKGDIR) + $(MAKE) -C packages/multicaster/src clean + +multicaster-build: + $(MAKE) -C packages/multicaster/src build + +PACKAGES += multicaster diff --git a/packages/multicaster/src/Makefile b/packages/multicaster/src/Makefile new file mode 100644 index 0000000..629b3dc --- /dev/null +++ b/packages/multicaster/src/Makefile @@ -0,0 +1,12 @@ +CFLAGS = -Wall -Werror +LDFLAGS = -static +TARGETS = multicaster-server multicaster-client + +all: build +build: $(TARGETS) + +install: $(TARGETS) + install -m 0755 $(TARGETS) $(DESTDIR)/bin + +clean: + rm -f *.o $(TARGETS) \ No newline at end of file diff --git a/packages/multicaster/src/multicaster-client.c b/packages/multicaster/src/multicaster-client.c new file mode 100644 index 0000000..6c00f66 --- /dev/null +++ b/packages/multicaster/src/multicaster-client.c @@ -0,0 +1,109 @@ +/* multicast_client.c + * Adopted from tmouse's client/server example code + * found at http://cboard.cprogramming.com/showthread.php?t=67469 + */ + +#include +#include +#include +#include /* for printf() and fprintf() */ +#include /* for atoi() and exit() */ +#include /* for memset() */ +#include /* for timestamps */ +#include + +void DieWithError(const char* errorMessage) +{ + fprintf(stderr, "%s\n", errorMessage); + exit(10); +} + +int main(int argc, char* argv[]) +{ + int sock; /* Socket */ + char* multicastIP; /* Arg: IP Multicast Address */ + char* multicastPort; /* Arg: Port */ + struct addrinfo * multicastAddr = {0}; /* Multicast Address */ + struct addrinfo * localAddr; /* Local address to bind to */ + struct addrinfo hints = { 0 }; /* Hints for name lookup */ + + if ( argc != 3 ) + { + fprintf(stderr,"Usage: %s \n", argv[0]); + exit(10); + } + + multicastIP = argv[1]; /* First arg: Multicast IP address */ + multicastPort = argv[2]; /* Second arg: Multicast port */ + + /* Resolve the multicast group address */ + hints.ai_family = PF_INET6; + hints.ai_flags = AI_NUMERICHOST; + if ( getaddrinfo(multicastIP, NULL, &hints, &multicastAddr) != 0 ) DieWithError("getaddrinfo() failed"); + + /* Get a local address with the same family as our multicast group */ + hints.ai_family = multicastAddr->ai_family; + hints.ai_socktype = SOCK_DGRAM; + hints.ai_flags = AI_PASSIVE; /* Return an address we can bind to */ + if ( getaddrinfo(NULL, multicastPort, &hints, &localAddr) != 0 ) + { + DieWithError("getaddrinfo() failed"); + } + + /* Create socket for receiving datagrams */ + if ( (sock = socket(localAddr->ai_family, localAddr->ai_socktype, 0)) == -1 ) + { + DieWithError("socket() failed"); + } + + const int trueValue = 1; + setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (const void *) &trueValue, sizeof(trueValue)); +#ifdef __APPLE__ + setsockopt(sock, SOL_SOCKET, SO_REUSEPORT, (const void *) &trueValue, sizeof(trueValue)); +#endif + + /* Bind to the multicast port */ + if ( bind(sock, localAddr->ai_addr, localAddr->ai_addrlen) != 0 ) + { + DieWithError("bind() failed"); + } + + /* Join the multicast group. */ + if ((multicastAddr->ai_family == PF_INET6)&&(multicastAddr->ai_addrlen == sizeof(struct sockaddr_in6))) + { + struct sockaddr_in6 *addr = (struct sockaddr_in6 *)(multicastAddr->ai_addr); + struct ipv6_mreq multicastRequest; /* Multicast address join structure */ + + /* Specify the multicast group */ + memcpy(&multicastRequest.ipv6mr_multiaddr, &((struct sockaddr_in6*)(multicastAddr->ai_addr))->sin6_addr, sizeof(multicastRequest.ipv6mr_multiaddr)); + + printf("scope_id: %d\n", addr->sin6_scope_id); + + /* Accept multicast from any interface */ + multicastRequest.ipv6mr_interface = addr->sin6_scope_id; + + /* Join the multicast address */ + if ( setsockopt(sock, IPPROTO_IPV6, IPV6_JOIN_GROUP, (char*) &multicastRequest, sizeof(multicastRequest)) != 0 ) DieWithError("setsockopt(IPV6_JOIN_GROUP) failed"); + } + else DieWithError("Not IPv6"); + + freeaddrinfo(localAddr); + freeaddrinfo(multicastAddr); + + for (;;) /* Run forever */ + { + char recvString[500]; /* Buffer for received string */ + int recvStringLen; /* Length of received string */ + + /* Receive a single datagram from the server */ + if ((recvStringLen = recvfrom(sock, recvString, sizeof(recvString) - 1, 0, NULL, 0)) < 0) DieWithError("recvfrom() failed"); + recvString[recvStringLen] = '\0'; + + /* Print the received string */ + printf("Received string [%s]\n", recvString); + } + + /* NOT REACHED */ + close(sock); + exit(EXIT_SUCCESS); +} diff --git a/packages/multicaster/src/multicaster-server.c b/packages/multicaster/src/multicaster-server.c new file mode 100644 index 0000000..5812d14 --- /dev/null +++ b/packages/multicaster/src/multicaster-server.c @@ -0,0 +1,71 @@ +/* multicast_server.c + * Adapted from tmouse's IPv6 client/server example code + * found at http://cboard.cprogramming.com/showthread.php?t=67469 + */ + +#include /* for fprintf() */ +#include +#include +#include +#include /* for atoi() and exit() */ +#include +#include + +static void DieWithError(const char* errorMessage) +{ + fprintf(stderr, "%s\n", errorMessage); + exit(10); +} + +int main(int argc, char *argv[]) +{ + int sock; /* Socket */ + char* multicastIP; /* Arg: IP Multicast address */ + char* multicastPort; /* Arg: Server port */ + char* sendString; /* Arg: String to multicast */ + size_t sendStringLen; /* Length of string to multicast */ + struct addrinfo * multicastAddr; /* Multicast address */ + struct addrinfo hints = { 0 }; /* Hints for name lookup */ + + if ( argc != 4 ) + { + fprintf(stderr, "Usage: %s \n", argv[0]); + exit(10); + } + + multicastIP = argv[1]; /* First arg: multicast IP address */ + multicastPort = argv[2]; /* Second arg: multicast port */ + sendString = argv[3]; /* Third arg: String to multicast */ + sendStringLen = strlen(sendString); /* Find length of sendString */ + + /* Resolve destination address for multicast datagrams */ + hints.ai_family = PF_INET6; + hints.ai_socktype = SOCK_DGRAM; + hints.ai_flags = AI_NUMERICHOST; + if (getaddrinfo(multicastIP, multicastPort, &hints, &multicastAddr) != 0) DieWithError("getaddrinfo() failed"); + + /* Create socket for sending multicast datagrams */ + if ((sock = socket(multicastAddr->ai_family, multicastAddr->ai_socktype, 0)) == -1) DieWithError("socket() failed"); + + //int scope_id = if_nametoindex("eth0"); + //if (setsockopt(sock, IPPROTO_IPV6, IPV6_MULTICAST_IF, (const char *) &scope_id, sizeof(scope_id)) != 0) DieWithError("setsockopt(MULTICAST_IF) failed"); + + for (;;) /* Run forever */ + { + int sendLen = sendto(sock, sendString, sendStringLen, 0, multicastAddr->ai_addr, multicastAddr->ai_addrlen); + if (sendLen == sendStringLen ) + { + printf("Sent [%s] (%i bytes) to %s, port %s\n", sendString, sendLen, multicastIP, multicastPort); + } + else + { + DieWithError("sendto() sent a different number of bytes than expected"); + } + sleep(1); /* Multicast sendString in datagram to clients every second */ + } + + /* NOT REACHED */ + freeaddrinfo(multicastAddr); + close(sock); + return 0; +} From 4df59a3ae57acbb21b49027ccae837037f2d7419 Mon Sep 17 00:00:00 2001 From: Neale Pickett Date: Thu, 29 Sep 2011 14:29:19 -0600 Subject: [PATCH 20/36] Make multicast packets have >1 hops --- packages/multicaster/src/Makefile | 1 - packages/multicaster/src/multicaster-server.c | 4 ++-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/packages/multicaster/src/Makefile b/packages/multicaster/src/Makefile index 629b3dc..bf4eb10 100644 --- a/packages/multicaster/src/Makefile +++ b/packages/multicaster/src/Makefile @@ -1,5 +1,4 @@ CFLAGS = -Wall -Werror -LDFLAGS = -static TARGETS = multicaster-server multicaster-client all: build diff --git a/packages/multicaster/src/multicaster-server.c b/packages/multicaster/src/multicaster-server.c index 5812d14..830ec3b 100644 --- a/packages/multicaster/src/multicaster-server.c +++ b/packages/multicaster/src/multicaster-server.c @@ -47,8 +47,8 @@ int main(int argc, char *argv[]) /* Create socket for sending multicast datagrams */ if ((sock = socket(multicastAddr->ai_family, multicastAddr->ai_socktype, 0)) == -1) DieWithError("socket() failed"); - //int scope_id = if_nametoindex("eth0"); - //if (setsockopt(sock, IPPROTO_IPV6, IPV6_MULTICAST_IF, (const char *) &scope_id, sizeof(scope_id)) != 0) DieWithError("setsockopt(MULTICAST_IF) failed"); + int hops = 5; + if (setsockopt(sock, IPPROTO_IPV6, IPV6_MULTICAST_HOPS, &hops, sizeof(hops)) != 0) DieWithError("setsockopt(MULTICAST_HOPS) failed"); for (;;) /* Run forever */ { From 5167ce24997fa78994999613e73cc97737b270e2 Mon Sep 17 00:00:00 2001 From: "Cherish A. Franco" Date: Thu, 29 Sep 2011 16:04:38 -0600 Subject: [PATCH 21/36] Making client do some snazzy stuff like sendto(). ~Cherish --- packages/multicaster/src/multicaster-client.c | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/packages/multicaster/src/multicaster-client.c b/packages/multicaster/src/multicaster-client.c index 6c00f66..a2bf4ef 100644 --- a/packages/multicaster/src/multicaster-client.c +++ b/packages/multicaster/src/multicaster-client.c @@ -92,12 +92,24 @@ int main(int argc, char* argv[]) for (;;) /* Run forever */ { - char recvString[500]; /* Buffer for received string */ - int recvStringLen; /* Length of received string */ + char recvString[500]; /* Buffer for received string */ + int recvStringLen; /* Length of received string */ + struct sockaddr_in6 from; + socklen_t fromlen = sizeof(from); + char sendString[] = "Token: banana\n"; + char errorString[] = "That is not correct! Try again!\n"; /* Receive a single datagram from the server */ - if ((recvStringLen = recvfrom(sock, recvString, sizeof(recvString) - 1, 0, NULL, 0)) < 0) DieWithError("recvfrom() failed"); + if ((recvStringLen = recvfrom(sock, recvString, sizeof(recvString) - 1, 0, (struct sockaddr *)&from, &fromlen)) < 0) DieWithError("recvfrom() failed"); recvString[recvStringLen] = '\0'; + if(strcmp(recvString, "hello")==0) { + printf("Correct!!\n"); + // printf("Token: banana\n"); + sendto(sock, sendString, sizeof(sendString) - 1, 0, (struct sockaddr *)&from, fromlen); + } else { + // printf("That isn't correct! Try again!\n"); + sendto(sock, errorString, sizeof(errorString) - 1, 0, (struct sockaddr *)&from, fromlen); + } /* Print the received string */ printf("Received string [%s]\n", recvString); From d76aad9e9e2668d7fea00fb9904652b9d8ec1bb5 Mon Sep 17 00:00:00 2001 From: Neale Pickett Date: Mon, 10 Oct 2011 22:28:56 -0600 Subject: [PATCH 22/36] fizzbuzz puzzle --- packages/fizzbuzz/src/fizzbuzz.c | 85 ++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 packages/fizzbuzz/src/fizzbuzz.c diff --git a/packages/fizzbuzz/src/fizzbuzz.c b/packages/fizzbuzz/src/fizzbuzz.c new file mode 100644 index 0000000..41acb43 --- /dev/null +++ b/packages/fizzbuzz/src/fizzbuzz.c @@ -0,0 +1,85 @@ +#include +#include + +/* + * How this works: + * + * You have to provide this with the output of a fizzbuzz program to get + * it to decode the token. + * + * Provide the encoded token on fd 3, and it will output the decode + * provided correct input. If you provided the decoded token, it will + * encode it. In other words, encode(x) = decode(x). + * + * + * Here's a fizzbuzz program in bourne shell: + * + * for i in $(seq 100); do + * if [ $(expr $i % 15) = 0 ]; then + * echo 'FizzBuzz' + * elif [ $(expr $i % 3) = 0 ]; then + * echo 'Fizz' + * elif [ $(expr $i % 5) = 0 ]; then + * echo 'Buzz' + * else + * echo $i + * fi + * done + * + */ + +char craptable[] = { + 0x64, 0xd4, 0x11, 0x55, 0x50, 0x16, 0x61, 0x02, + 0xf7, 0xfd, 0x63, 0x36, 0xd9, 0xa6, 0xf2, 0x29, + 0xad, 0xfb, 0xed, 0x7a, 0x06, 0x91, 0xe7, 0x67, + 0x80, 0xb6, 0x53, 0x2c, 0x43, 0xf9, 0x3c, 0xf2, + 0x83, 0x5c, 0x25, 0xee, 0x21 +}; + +int +main(int argc, char *argv[]) +{ + int i; + char token[100]; + size_t tokenlen; + + { + FILE *tokenin = fdopen(3, "r"); + + if (! tokenin) { + printf("Somebody didn't read the instructions.\n"); + return 1; + } + + tokenlen = fread(token, 1, sizeof(token), tokenin); + fclose(tokenin); + } + + + for (i=1; i <= 100; i += 1) { + char l[100]; + + fgets(l, sizeof(l), stdin); + + if (0 == i % 15) { + if (0 != strcmp("FizzBuzz\n", l)) break; + } else if (0 == i % 3) { + if (0 != strcmp("Fizz\n", l)) break; + } else if (0 == i % 5) { + if (0 != strcmp("Buzz\n", l)) break; + } else { + if (atoi(l) != i) break; + } + + token[i % tokenlen] ^= i; + token[i % tokenlen] ^= craptable[i % sizeof(craptable)]; + } + + if (101 == i) { + fwrite(token, tokenlen, 1, stdout); + } else { + printf("Next time, FizzBuzz me.\n"); + } + + return 0; +} From d2de6440887ec9b55ae59a5e6346f5fbbd7c9a6a Mon Sep 17 00:00:00 2001 From: Neale Pickett Date: Tue, 11 Oct 2011 15:38:34 -0600 Subject: [PATCH 23/36] add sh4pwn build stuff --- sh4pwn/README | 1 + sh4pwn/buildroot.config | 919 ++++++++++++++ sh4pwn/busybox.config | 990 +++++++++++++++ sh4pwn/cleanup.sh | 26 + sh4pwn/linux.config | 1645 +++++++++++++++++++++++++ sh4pwn/skeleton/etc/hosts | 1 + sh4pwn/skeleton/etc/issue | 2 + sh4pwn/skeleton/etc/passwd | 1 + sh4pwn/skeleton/etc/profile | 6 + sh4pwn/skeleton/home/.empty | 0 sh4pwn/skeleton/mnt/.empty | 0 sh4pwn/skeleton/opt/.empty | 0 sh4pwn/skeleton/proc/.empty | 0 sh4pwn/skeleton/sbin/init | 55 + sh4pwn/skeleton/sbin/mkrw | 17 + sh4pwn/skeleton/sbin/runit-signal | 69 ++ sh4pwn/skeleton/sbin/udhcpc.script | 39 + sh4pwn/skeleton/service/eth0/finish | 3 + sh4pwn/skeleton/service/eth0/run | 6 + sh4pwn/skeleton/service/lo/finish | 3 + sh4pwn/skeleton/service/lo/run | 7 + sh4pwn/skeleton/service/telnetd/issue | 8 + sh4pwn/skeleton/service/telnetd/run | 3 + sh4pwn/skeleton/service/tty1/run | 6 + sh4pwn/skeleton/service/tty2/run | 1 + sh4pwn/skeleton/service/tty3/run | 1 + sh4pwn/skeleton/service/tty4/run | 1 + sh4pwn/skeleton/sys/.empty | 0 sh4pwn/skeleton/tmp/.empty | 0 sh4pwn/target_device_table.txt | 42 + 30 files changed, 3852 insertions(+) create mode 100644 sh4pwn/README create mode 100644 sh4pwn/buildroot.config create mode 100644 sh4pwn/busybox.config create mode 100755 sh4pwn/cleanup.sh create mode 100644 sh4pwn/linux.config create mode 100644 sh4pwn/skeleton/etc/hosts create mode 100644 sh4pwn/skeleton/etc/issue create mode 100644 sh4pwn/skeleton/etc/passwd create mode 100644 sh4pwn/skeleton/etc/profile create mode 100644 sh4pwn/skeleton/home/.empty create mode 100644 sh4pwn/skeleton/mnt/.empty create mode 100644 sh4pwn/skeleton/opt/.empty create mode 100644 sh4pwn/skeleton/proc/.empty create mode 100755 sh4pwn/skeleton/sbin/init create mode 100755 sh4pwn/skeleton/sbin/mkrw create mode 100755 sh4pwn/skeleton/sbin/runit-signal create mode 100755 sh4pwn/skeleton/sbin/udhcpc.script create mode 100755 sh4pwn/skeleton/service/eth0/finish create mode 100755 sh4pwn/skeleton/service/eth0/run create mode 100755 sh4pwn/skeleton/service/lo/finish create mode 100755 sh4pwn/skeleton/service/lo/run create mode 100644 sh4pwn/skeleton/service/telnetd/issue create mode 100755 sh4pwn/skeleton/service/telnetd/run create mode 100755 sh4pwn/skeleton/service/tty1/run create mode 120000 sh4pwn/skeleton/service/tty2/run create mode 120000 sh4pwn/skeleton/service/tty3/run create mode 120000 sh4pwn/skeleton/service/tty4/run create mode 100644 sh4pwn/skeleton/sys/.empty create mode 100644 sh4pwn/skeleton/tmp/.empty create mode 100644 sh4pwn/target_device_table.txt diff --git a/sh4pwn/README b/sh4pwn/README new file mode 100644 index 0000000..b486b0c --- /dev/null +++ b/sh4pwn/README @@ -0,0 +1 @@ +This is the stuff you need to make a pwnable image. You build it just like dbtl. diff --git a/sh4pwn/buildroot.config b/sh4pwn/buildroot.config new file mode 100644 index 0000000..4d1dd41 --- /dev/null +++ b/sh4pwn/buildroot.config @@ -0,0 +1,919 @@ +# +# Automatically generated make config: don't edit +# Buildroot 2011.08 Configuration +# Fri Oct 7 15:50:09 2011 +# +BR2_HAVE_DOT_CONFIG=y +# BR2_arm is not set +# BR2_armeb is not set +# BR2_avr32 is not set +# BR2_bfin is not set +# BR2_i386 is not set +# BR2_mips is not set +# BR2_mipsel is not set +# BR2_powerpc is not set +BR2_sh=y +# BR2_sh64 is not set +# BR2_sparc is not set +# BR2_x86_64 is not set +# BR2_xtensa is not set +# BR2_sh2 is not set +# BR2_sh2a is not set +# BR2_sh3 is not set +# BR2_sh3eb is not set +BR2_sh4=y +# BR2_sh4eb is not set +# BR2_sh4a is not set +# BR2_sh4aeb is not set +BR2_ARCH="sh4" +BR2_ENDIAN="LITTLE" + +# +# Build options +# + +# +# Commands +# +BR2_WGET="wget --passive-ftp -nd -t 3" +BR2_SVN="svn" +BR2_BZR="bzr" +BR2_GIT="git" +BR2_ZCAT="gzip -d -c" +BR2_BZCAT="bzcat" +BR2_XZCAT="xzcat" +BR2_TAR_OPTIONS="" +BR2_DL_DIR="$(TOPDIR)/dl" +BR2_HOST_DIR="$(BASE_DIR)/host" + +# +# Mirrors and Download locations +# +BR2_PRIMARY_SITE="" +BR2_BACKUP_SITE="http://sources.buildroot.net/" +BR2_SOURCEFORGE_MIRROR="kent" +BR2_KERNEL_MIRROR="http://www.kernel.org/pub/" +BR2_GNU_MIRROR="http://ftp.gnu.org/pub/gnu" +BR2_DEBIAN_MIRROR="http://ftp.debian.org" +BR2_JLEVEL=2 +# BR2_CCACHE is not set +# BR2_DEPRECATED is not set +# BR2_ENABLE_DEBUG is not set +BR2_STRIP_strip=y +# BR2_STRIP_sstrip is not set +# BR2_STRIP_none is not set +# BR2_OPTIMIZE_0 is not set +# BR2_OPTIMIZE_1 is not set +# BR2_OPTIMIZE_2 is not set +# BR2_OPTIMIZE_3 is not set +BR2_OPTIMIZE_S=y +# BR2_PREFER_STATIC_LIB is not set +# BR2_HAVE_DOCUMENTATION is not set +# BR2_HAVE_DEVFILES is not set + +# +# Toolchain +# +BR2_TOOLCHAIN_BUILDROOT=y +# BR2_TOOLCHAIN_EXTERNAL is not set +# BR2_TOOLCHAIN_CTNG is not set + +# +# Kernel Header Options +# +# BR2_KERNEL_HEADERS_2_6_35 is not set +# BR2_KERNEL_HEADERS_2_6_36 is not set +# BR2_KERNEL_HEADERS_2_6_37 is not set +# BR2_KERNEL_HEADERS_2_6_38 is not set +BR2_KERNEL_HEADERS_2_6_39=y +# BR2_KERNEL_HEADERS_3_0 is not set +# BR2_KERNEL_HEADERS_VERSION is not set +# BR2_KERNEL_HEADERS_SNAP is not set +BR2_DEFAULT_KERNEL_HEADERS="2.6.39.4" + +# +# uClibc Options +# +BR2_UCLIBC_VERSION_0_9_31=y +# BR2_UCLIBC_VERSION_SNAPSHOT is not set +BR2_UCLIBC_VERSION_STRING="0.9.31.1" +BR2_UCLIBC_CONFIG="toolchain/uClibc/uClibc-0.9.31.config" +# BR2_PTHREAD_DEBUG is not set +# BR2_UCLIBC_INSTALL_TEST_SUITE is not set + +# +# Binutils Options +# +# BR2_BINUTILS_VERSION_2_20 is not set +# BR2_BINUTILS_VERSION_2_20_1 is not set +BR2_BINUTILS_VERSION_2_21=y +BR2_BINUTILS_VERSION="2.21" +BR2_BINUTILS_EXTRA_CONFIG_OPTIONS="" + +# +# GCC Options +# +# BR2_GCC_VERSION_4_2_4 is not set +# BR2_GCC_VERSION_4_3_X is not set +# BR2_GCC_VERSION_4_4_X is not set +BR2_GCC_VERSION_4_5_X=y +# BR2_GCC_VERSION_4_6_X is not set +# BR2_GCC_VERSION_SNAP is not set +BR2_GCC_SUPPORTS_FINEGRAINEDMTUNE=y +BR2_GCC_VERSION="4.5.3" +BR2_EXTRA_GCC_CONFIG_OPTIONS="--with-multilib-list=m4,m4-nofpu" +# BR2_INSTALL_OBJC is not set +# BR2_INSTALL_FORTRAN is not set +BR2_GCC_SHARED_LIBGCC=y +# BR2_GCC_ENABLE_OPENMP is not set + +# +# Gdb Options +# + +# +# Gdb debugger for the target needs WCHAR support in toolchain +# +# BR2_PACKAGE_GDB_SERVER is not set +# BR2_PACKAGE_GDB_HOST is not set +BR2_INET_IPV6=y +BR2_TOOLCHAIN_HAS_THREADS=y +BR2_TOOLCHAIN_HAS_SHADOW_PASSWORDS=y +# BR2_ENABLE_LOCALE_PURGE is not set +BR2_NEEDS_GETTEXT=y +BR2_USE_MMU=y +BR2_TARGET_OPTIMIZATION="-pipe" +BR2_TARGET_LDFLAGS="" + +# +# Toolchain Options +# +# BR2_TOOLCHAIN_BUILDROOT_LARGEFILE is not set +BR2_TOOLCHAIN_BUILDROOT_INET_IPV6=y +# BR2_TOOLCHAIN_BUILDROOT_INET_RPC is not set +# BR2_TOOLCHAIN_BUILDROOT_WCHAR is not set +# BR2_TOOLCHAIN_BUILDROOT_LOCALE is not set +# BR2_TOOLCHAIN_BUILDROOT_CXX is not set +# BR2_TOOLCHAIN_BUILDROOT_USE_SSP is not set +# BR2_PTHREADS_NONE is not set +# BR2_PTHREADS is not set +BR2_PTHREADS_OLD=y +# BR2_ELF2FLT is not set + +# +# System configuration +# +BR2_TARGET_GENERIC_HOSTNAME="" +BR2_TARGET_GENERIC_ISSUE="" +BR2_ROOTFS_DEVICE_CREATION_STATIC=y +# BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_DEVTMPFS is not set +# BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_MDEV is not set +# BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_UDEV is not set +BR2_ROOTFS_DEVICE_TABLE="sh4pwn/target_device_table.txt" +BR2_ROOTFS_STATIC_DEVICE_TABLE="sh4pwn/target_device_table.txt" +# BR2_ROOTFS_SKELETON_DEFAULT is not set +BR2_ROOTFS_SKELETON_CUSTOM=y +BR2_ROOTFS_SKELETON_CUSTOM_PATH="sh4pwn/skeleton" +BR2_ROOTFS_POST_BUILD_SCRIPT="sh4pwn/cleanup.sh" + +# +# Package Selection for the target +# +BR2_PACKAGE_BUSYBOX=y +# BR2_BUSYBOX_VERSION_1_16_X is not set +# BR2_BUSYBOX_VERSION_1_17_X is not set +BR2_BUSYBOX_VERSION_1_18_X=y +# BR2_PACKAGE_BUSYBOX_SNAPSHOT is not set +BR2_BUSYBOX_VERSION="1.18.5" +BR2_PACKAGE_BUSYBOX_CONFIG="sh4pwn/busybox.config" +# BR2_PACKAGE_BUSYBOX_SHOW_OTHERS is not set +# BR2_PACKAGE_CUSTOMIZE is not set + +# +# Audio and video libraries and applications +# +# BR2_PACKAGE_ALSA_LIB is not set + +# +# alsa-utils requires a toolchain with LARGEFILE support +# +# BR2_PACKAGE_AUMIX is not set +# BR2_PACKAGE_FAAD2 is not set +# BR2_PACKAGE_FLAC is not set + +# +# ffmpeg requires a toolchain with LARGEFILE and IPV6 support +# + +# +# gstreamer requires a toolchain with WCHAR support +# + +# +# gst-ffmpeg requires a toolchain with LARGEFILE and IPV6 support +# +# BR2_PACKAGE_LAME is not set +# BR2_PACKAGE_LIBAO is not set +# BR2_PACKAGE_LIBCDAUDIO is not set +# BR2_PACKAGE_LIBCUE is not set +# BR2_PACKAGE_LIBCUEFILE is not set + +# +# libdvdread requires a toolchain with LARGEFILE support +# + +# +# libdvdnav requires a toolchain with LARGEFILE support +# +# BR2_PACKAGE_LIBID3TAG is not set +# BR2_PACKAGE_LIBMAD is not set + +# +# libmms requires a toolchain with WCHAR support +# + +# +# libmpd requires a toolchain with WCHAR support +# +# BR2_PACKAGE_LIBMPEG2 is not set +# BR2_PACKAGE_LIBOGG is not set +# BR2_PACKAGE_LIBREPLAYGAIN is not set +# BR2_PACKAGE_LIBSAMPLERATE is not set +# BR2_PACKAGE_LIBSNDFILE is not set +# BR2_PACKAGE_LIBTHEORA is not set +# BR2_PACKAGE_LIBVORBIS is not set + +# +# Live555 needs C++ compiler +# +# BR2_PACKAGE_MADPLAY is not set + +# +# mpd requires a toolchain with C++ and WCHAR support +# +# BR2_PACKAGE_MPG123 is not set +# BR2_PACKAGE_MPLAYER is not set +# BR2_PACKAGE_MUSEPACK is not set +# BR2_PACKAGE_SPEEX is not set + +# +# swfdec requires a toolchain with WCHAR and C++ support +# + +# +# taglib requires a toolchain with C++ support enabled +# +# BR2_PACKAGE_TREMOR is not set +# BR2_PACKAGE_VORBIS_TOOLS is not set +# BR2_PACKAGE_WAVPACK is not set + +# +# Compressors and decompressors +# +# BR2_PACKAGE_BZIP2 is not set +# BR2_PACKAGE_LZOP is not set +# BR2_PACKAGE_XZ is not set + +# +# Debugging, profiling and benchmark +# + +# +# bonnie++ requires a toolchain with C++ support enabled +# +# BR2_PACKAGE_DHRYSTONE is not set +# BR2_PACKAGE_DMALLOC is not set +# BR2_PACKAGE_KEXEC is not set + +# +# lmbench requires a toolchain with RPC support +# + +# +# lsof requires a toolchain with RPC support +# +# BR2_PACKAGE_LTP_TESTSUITE is not set +# BR2_PACKAGE_MEMSTAT is not set +# BR2_PACKAGE_NETPERF is not set + +# +# oprofile requires a toolchain with C++ support enabled +# +# BR2_PACKAGE_STRACE is not set +# BR2_PACKAGE_WHETSTONE is not set + +# +# Development tools +# +# BR2_PACKAGE_AUTOCONF is not set +# BR2_PACKAGE_AUTOMAKE is not set +# BR2_PACKAGE_BINUTILS is not set + +# +# bison requires a toolchain with WCHAR support +# +# BR2_PACKAGE_BSDIFF is not set +# BR2_PACKAGE_CCACHE is not set +# BR2_PACKAGE_DISTCC is not set +# BR2_PACKAGE_FLEX is not set + +# +# gcc needs development files in target filesystem +# + +# +# gettext requires a toolchain with WCHAR support +# +# BR2_PACKAGE_GMP is not set + +# +# gperf requires a toolchain with C++ support enabled +# +# BR2_PACKAGE_MAKE is not set +# BR2_PACKAGE_MPC is not set +# BR2_PACKAGE_MPFR is not set +# BR2_PACKAGE_LIBTOOL is not set + +# +# m4 requires a toolchain with WCHAR support +# + +# +# pkg-config requires a toolchain with WCHAR support +# +# BR2_PACKAGE_SSTRIP is not set + +# +# Games +# +# BR2_PACKAGE_GNUCHESS is not set +# BR2_PACKAGE_PRBOOM is not set + +# +# Graphic libraries and applications (graphic/text) +# + +# +# Graphic applications +# + +# +# rrdtool requires a toolchain with WCHAR support +# + +# +# graphic libraries +# +# BR2_PACKAGE_DIRECTFB is not set +# BR2_PACKAGE_FBDUMP is not set +# BR2_PACKAGE_FBGRAB is not set +# BR2_PACKAGE_FBV is not set +# BR2_PACKAGE_IMAGEMAGICK is not set +# BR2_PACKAGE_LINUX_FUSION is not set +# BR2_PACKAGE_SDL is not set + +# +# other GUIs +# + +# +# qt requires a toolchain with C++ support enabled +# + +# +# X.org requires a toolchain with WCHAR support +# + +# +# X libraries and helper libraries +# +# BR2_PACKAGE_LIBERATION is not set + +# +# X Window managers +# + +# +# X applications +# + +# +# gob2 requires a toolchain with WCHAR support +# + +# +# midori requires C++, WCHAR in toolchain and libgtk2 +# + +# +# Hardware handling +# + +# +# cdrkit requires a toolchain with LARGEFILE support +# +# BR2_PACKAGE_CRAMFS is not set + +# +# dbus not available (need expat or libxml2) +# + +# +# dmraid requires a toolchain with LARGEFILE support +# + +# +# dosfstools requires a toolchain with LARGEFILE support +# + +# +# e2fsprogs requires a toolchain with LARGEFILE + WCHAR support +# +# BR2_PACKAGE_EEPROG is not set +# BR2_PACKAGE_FCONFIG is not set +# BR2_PACKAGE_FIS is not set +# BR2_PACKAGE_GADGETFS_TEST is not set + +# +# gdisk requires a toolchain with LARGEFILE/WCHAR/C++ support enabled +# +# BR2_PACKAGE_GENEXT2FS is not set +# BR2_PACKAGE_GENROMFS is not set +# BR2_PACKAGE_GPSD is not set + +# +# gvfs requires a toolchain with LARGEFILE and WCHAR support +# +# BR2_PACKAGE_HWDATA is not set +# BR2_PACKAGE_I2C_TOOLS is not set +# BR2_PACKAGE_INPUT_EVENT_DAEMON is not set +# BR2_PACKAGE_INPUT_TOOLS is not set +# BR2_PACKAGE_IOSTAT is not set +# BR2_PACKAGE_IRDA_UTILS is not set +# BR2_PACKAGE_KBD is not set + +# +# libv4l requires a toolchain with LARGEFILE support +# +# BR2_PACKAGE_LM_SENSORS is not set +# BR2_PACKAGE_LSUIO is not set + +# +# lvm2 requires a toolchain with LARGEFILE support +# +# BR2_PACKAGE_MAKEDEVS is not set +# BR2_PACKAGE_MDADM is not set + +# +# memtester requires a toolchain with LARGEFILE support +# +# BR2_PACKAGE_MTD is not set + +# +# ntfs-3g requires a toolchain with LARGEFILE and WCHAR support +# + +# +# ntfsprogs requires a toolchain with WCHAR and LARGEFILE support +# +# BR2_PACKAGE_PCIUTILS is not set +# BR2_PACKAGE_RNG_TOOLS is not set +# BR2_PACKAGE_SDPARM is not set +# BR2_PACKAGE_SETSERIAL is not set + +# +# smartmontools requires a toolchain with C++ support enabled +# + +# +# squashfs requires a toolchain with LARGEFILE support +# +# BR2_PACKAGE_SREDIRD is not set + +# +# sshfs requires a toolchain with LARGEFILE and WCHAR support +# +# BR2_PACKAGE_STATSERIAL is not set +# BR2_PACKAGE_SYSSTAT is not set +# BR2_PACKAGE_TI_UTILS is not set +# BR2_PACKAGE_UBOOT_TOOLS is not set + +# +# udev requires /dev mgmnt set to udev under System configuration +# +# BR2_PACKAGE_USB_MODESWITCH is not set +# BR2_PACKAGE_USBUTILS is not set +# BR2_PACKAGE_WIPE is not set + +# +# xfsprogs requires a toolchain with LARGEFILE + WCHAR support +# + +# +# Interpreter languages and scripting +# +# BR2_PACKAGE_HASERL is not set +# BR2_PACKAGE_LUA is not set +# BR2_PACKAGE_MICROPERL is not set +# BR2_PACKAGE_PHP is not set + +# +# python requires a toolchain with WCHAR support +# + +# +# ruby requires a toolchain with WCHAR support +# +# BR2_PACKAGE_TCL is not set + +# +# Libraries +# + +# +# Compression and decompression +# + +# +# libarchive requires a toolchain with WCHAR support +# +# BR2_PACKAGE_LZO is not set +# BR2_PACKAGE_ZLIB is not set + +# +# Crypto +# +# BR2_PACKAGE_BEECRYPT is not set +# BR2_PACKAGE_GNUTLS is not set +# BR2_PACKAGE_LIBGCRYPT is not set +# BR2_PACKAGE_LIBGPG_ERROR is not set + +# +# libnss requires a toolchain with LARGEFILE support +# +# BR2_PACKAGE_OPENSSL is not set + +# +# Database +# +# BR2_PACKAGE_BERKELEYDB is not set + +# +# Mysql client requires a toolchain with C++ support enabled +# +# BR2_PACKAGE_SQLITE is not set + +# +# Filesystem +# + +# +# gamin requires a toolchain with WCHAR support +# +# BR2_PACKAGE_LIBCONFIG is not set +# BR2_PACKAGE_LIBCONFUSE is not set + +# +# libfuse requires a toolchain with LARGEFILE support +# +# BR2_PACKAGE_LIBLOCKFILE is not set +# BR2_PACKAGE_LIBSYSFS is not set + +# +# Graphics +# + +# +# atk requires a toolchain with WCHAR support +# +# BR2_PACKAGE_CAIRO is not set +# BR2_PACKAGE_FONTCONFIG is not set +# BR2_PACKAGE_FREETYPE is not set +# BR2_PACKAGE_JPEG is not set +# BR2_PACKAGE_LIBART is not set +# BR2_PACKAGE_LIBEXIF is not set + +# +# libgtk2 requires a toolchain with WCHAR and C++ support +# +# BR2_PACKAGE_LIBPNG is not set + +# +# libraw requires a toolchain with C++ support enabled +# +# BR2_PACKAGE_LIBSVGTINY is not set +# BR2_PACKAGE_LIBUNGIF is not set + +# +# pango requires a toolchain with WCHAR and C++ support +# +# BR2_PACKAGE_PIXMAN is not set +# BR2_PACKAGE_TIFF is not set + +# +# webkit requires C++, WCHAR in toolchain and libgtk2 +# + +# +# Hardware handling +# +# BR2_PACKAGE_LIBAIO is not set +# BR2_PACKAGE_LIBRAW1394 is not set +# BR2_PACKAGE_TSLIB is not set +# BR2_PACKAGE_LIBHID is not set +# BR2_PACKAGE_LIBIQRF is not set +# BR2_PACKAGE_LIBUSB is not set + +# +# Networking +# +# BR2_PACKAGE_LIBCGI is not set + +# +# libcgicc requires a toolchain with C++ support enabled +# +# BR2_PACKAGE_LIBCURL is not set +# BR2_PACKAGE_LIBDNET is not set +# BR2_PACKAGE_LIBEXOSIP2 is not set +# BR2_PACKAGE_LIBIDN is not set +# BR2_PACKAGE_LIBMICROHTTPD is not set +# BR2_PACKAGE_NEON is not set + +# +# libmnl requires a toolchain with LARGEFILE support +# +# BR2_PACKAGE_LIBNL is not set +# BR2_PACKAGE_LIBPCAP is not set +# BR2_PACKAGE_LIBOSIP2 is not set +# BR2_PACKAGE_LIBRSYNC is not set + +# +# libsoup requires a toolchain with WCHAR support +# + +# +# libupnp requires a toolchain with LARGEFILE support +# + +# +# Other +# +# BR2_PACKAGE_LIBARGTABLE2 is not set +# BR2_PACKAGE_ARGP_STANDALONE is not set +# BR2_PACKAGE_LIBATOMIC_OPS is not set +# BR2_PACKAGE_LIBCAP is not set +# BR2_PACKAGE_LIBDAEMON is not set +# BR2_PACKAGE_LIBELF is not set +# BR2_PACKAGE_LIBEVENT is not set +# BR2_PACKAGE_LIBFFI is not set + +# +# libglib2 requires a toolchain with WCHAR support +# + +# +# libnspr requires a toolchain with LARGEFILE support +# + +# +# libsigc++ requires a toolchain with C++ support enabled +# +# BR2_PACKAGE_ORC is not set + +# +# Text and terminal handling +# + +# +# enchant requires a toolchain with C++ and WCHAR support enabled +# + +# +# icu requires a toolchain with C++ support and WCHAR enabled +# +# BR2_PACKAGE_LIBICONV is not set +# BR2_PACKAGE_NCURSES is not set +# BR2_PACKAGE_NEWT is not set +# BR2_PACKAGE_PCRE is not set +# BR2_PACKAGE_POPT is not set +# BR2_PACKAGE_READLINE is not set +# BR2_PACKAGE_SLANG is not set + +# +# JSON/XML +# +# BR2_PACKAGE_EXPAT is not set +# BR2_PACKAGE_EZXML is not set +# BR2_PACKAGE_LIBROXML is not set +# BR2_PACKAGE_LIBXML2 is not set +# BR2_PACKAGE_LIBXSLT is not set +# BR2_PACKAGE_LIBYAML is not set +# BR2_PACKAGE_MXML is not set + +# +# xerces-c++ requires a toolchain with C++ and WCHAR support enabled +# +# BR2_PACKAGE_YAJL is not set + +# +# Miscellaneous +# + +# +# shared-mime-info requires a toolchain with WCHAR support +# + +# +# Networking applications +# +# BR2_PACKAGE_ARGUS is not set +# BR2_PACKAGE_AVAHI is not set +# BR2_PACKAGE_AXEL is not set + +# +# bind requires a toolchain with LARGEFILE support +# +# BR2_PACKAGE_BMON is not set +# BR2_PACKAGE_BRIDGE is not set +# BR2_PACKAGE_BWM_NG is not set +# BR2_PACKAGE_CAN_UTILS is not set + +# +# ctorrent requires a toolchain with C++ support enabled +# +# BR2_PACKAGE_CUPS is not set +# BR2_PACKAGE_DHCPDUMP is not set +# BR2_PACKAGE_DNSMASQ is not set +# BR2_PACKAGE_DROPBEAR is not set +# BR2_PACKAGE_EBTABLES is not set +# BR2_PACKAGE_ETHTOOL is not set +# BR2_PACKAGE_HOSTAPD is not set +# BR2_PACKAGE_IFPLUGD is not set + +# +# iperf requires a toolchain with C++ support enabled +# +# BR2_PACKAGE_IPROUTE2 is not set +# BR2_PACKAGE_IPSEC_TOOLS is not set + +# +# ipset requires a toolchain with LARGEFILE support +# +# BR2_PACKAGE_IPTABLES is not set +# BR2_PACKAGE_IW is not set + +# +# Kismet requires a toolchain with C++ support enabled +# +# BR2_PACKAGE_XL2TP is not set +# BR2_PACKAGE_LINKS is not set +# BR2_PACKAGE_LRZSZ is not set +# BR2_PACKAGE_MII_DIAG is not set +# BR2_PACKAGE_MROUTED is not set + +# +# mutt requires a toolchain with WCHAR support +# + +# +# nbd requires a toolchain with WCHAR support +# + +# +# ncftp requires a toolchain with LARGEFILE support +# +# BR2_PACKAGE_NETPLUG is not set +# BR2_PACKAGE_NETSNMP is not set +# BR2_PACKAGE_NETSTAT_NAT is not set + +# +# nfs-utils requires a toolchain with RPC and LARGEFILE support +# +# BR2_PACKAGE_NGIRCD is not set +# BR2_PACKAGE_NTP is not set +# BR2_PACKAGE_NUTTCP is not set +# BR2_PACKAGE_OLSR is not set +# BR2_PACKAGE_OPENNTPD is not set +# BR2_PACKAGE_OPENSSH is not set +# BR2_PACKAGE_OPENVPN is not set + +# +# portmap requires a toolchain with 'Enable RPC' selected +# +# BR2_PACKAGE_PPPD is not set +# BR2_PACKAGE_RADVD is not set +# BR2_PACKAGE_PPTP_LINUX is not set +# BR2_PACKAGE_PROFTPD is not set +# BR2_PACKAGE_QUAGGA is not set +# BR2_PACKAGE_RSH_REDONE is not set +# BR2_PACKAGE_RSYNC is not set +# BR2_PACKAGE_SAMBA is not set +# BR2_PACKAGE_SER2NET is not set +# BR2_PACKAGE_SOCAT is not set +# BR2_PACKAGE_SPAWN_FCGI is not set + +# +# Squid requires a toolchain with C++ and IPv6 support enabled +# +# BR2_PACKAGE_STUNNEL is not set +# BR2_PACKAGE_TCPDUMP is not set +# BR2_PACKAGE_TCPREPLAY is not set +# BR2_PACKAGE_TN5250 is not set +# BR2_PACKAGE_TTCP is not set + +# +# udpcast requires a toolchain with LARGEFILE support +# +# BR2_PACKAGE_VPNC is not set +# BR2_PACKAGE_VSFTPD is not set +# BR2_PACKAGE_VTUN is not set +# BR2_PACKAGE_WIRELESS_TOOLS is not set +# BR2_PACKAGE_WPA_SUPPLICANT is not set + +# +# Package managers +# +# BR2_PACKAGE_IPKG is not set + +# +# Shell and utilities +# +# BR2_PACKAGE_AT is not set +# BR2_PACKAGE_DIALOG is not set +# BR2_PACKAGE_FILE is not set + +# +# inotify-tools requires a toolchain with LARGEFILE support +# +# BR2_PACKAGE_LOCKFILE_PROGS is not set + +# +# logrotate requires a toolchain with WCHAR support +# +# BR2_PACKAGE_SCREEN is not set +# BR2_PACKAGE_SUDO is not set +# BR2_PACKAGE_WHICH is not set +# BR2_PACKAGE_XMLSTARLET is not set + +# +# System tools +# + +# +# acl requires a toolchain with LARGEFILE support +# + +# +# attr requires a toolchain with LARGEFILE support +# +# BR2_PACKAGE_HTOP is not set + +# +# util-linux requires a toolchain with LARGEFILE + WCHAR support +# + +# +# Text editors and viewers +# +# BR2_PACKAGE_ED is not set +# BR2_PACKAGE_NANO is not set +# BR2_PACKAGE_UEMACS is not set + +# +# Filesystem images +# +# BR2_TARGET_ROOTFS_CRAMFS is not set +# BR2_TARGET_ROOTFS_CLOOP is not set +# BR2_TARGET_ROOTFS_EXT2 is not set +# BR2_TARGET_ROOTFS_JFFS2 is not set +# BR2_TARGET_ROOTFS_UBIFS is not set +# BR2_TARGET_ROOTFS_SQUASHFS is not set +# BR2_TARGET_ROOTFS_TAR is not set +# BR2_TARGET_ROOTFS_CPIO is not set +BR2_TARGET_ROOTFS_INITRAMFS=y +# BR2_TARGET_ROOTFS_ROMFS is not set + +# +# Bootloaders +# +# BR2_TARGET_BAREBOX is not set +# BR2_TARGET_UBOOT is not set + +# +# Kernel +# +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_2_6_39=y +# BR2_LINUX_KERNEL_SAME_AS_HEADERS is not set +# BR2_LINUX_KERNEL_CUSTOM_VERSION is not set +# BR2_LINUX_KERNEL_CUSTOM_TARBALL is not set +# BR2_LINUX_KERNEL_CUSTOM_GIT is not set +BR2_LINUX_KERNEL_VERSION="2.6.39.4" +BR2_LINUX_KERNEL_PATCH="" +# BR2_LINUX_KERNEL_USE_DEFCONFIG is not set +BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y +BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="sh4pwn/linux.config" +# BR2_LINUX_KERNEL_UIMAGE is not set +BR2_LINUX_KERNEL_ZIMAGE=y +# BR2_LINUX_KERNEL_VMLINUX_BIN is not set +# BR2_LINUX_KERNEL_IMAGE_TARGET_CUSTOM is not set diff --git a/sh4pwn/busybox.config b/sh4pwn/busybox.config new file mode 100644 index 0000000..bc5dbba --- /dev/null +++ b/sh4pwn/busybox.config @@ -0,0 +1,990 @@ +# +# Automatically generated make config: don't edit +# Busybox version: 1.18.5 +# Fri Sep 9 12:29:48 2011 +# +CONFIG_HAVE_DOT_CONFIG=y + +# +# Busybox Settings +# + +# +# General Configuration +# +CONFIG_DESKTOP=y +# CONFIG_EXTRA_COMPAT is not set +# CONFIG_INCLUDE_SUSv2 is not set +# CONFIG_USE_PORTABLE_CODE is not set +CONFIG_PLATFORM_LINUX=y +CONFIG_FEATURE_BUFFERS_USE_MALLOC=y +# CONFIG_FEATURE_BUFFERS_GO_ON_STACK is not set +# CONFIG_FEATURE_BUFFERS_GO_IN_BSS is not set +CONFIG_SHOW_USAGE=y +CONFIG_FEATURE_VERBOSE_USAGE=y +# CONFIG_FEATURE_COMPRESS_USAGE is not set +CONFIG_FEATURE_INSTALLER=y +CONFIG_INSTALL_NO_USR=y +# CONFIG_LOCALE_SUPPORT is not set +CONFIG_UNICODE_SUPPORT=y +# CONFIG_UNICODE_USING_LOCALE is not set +# CONFIG_FEATURE_CHECK_UNICODE_IN_ENV is not set +CONFIG_SUBST_WCHAR=63 +CONFIG_LAST_SUPPORTED_WCHAR=767 +# CONFIG_UNICODE_COMBINING_WCHARS is not set +# CONFIG_UNICODE_WIDE_WCHARS is not set +# CONFIG_UNICODE_BIDI_SUPPORT is not set +# CONFIG_UNICODE_NEUTRAL_TABLE is not set +# CONFIG_UNICODE_PRESERVE_BROKEN is not set +CONFIG_LONG_OPTS=y +CONFIG_FEATURE_DEVPTS=y +CONFIG_FEATURE_CLEAN_UP=y +# CONFIG_FEATURE_WTMP is not set +# CONFIG_FEATURE_UTMP is not set +# CONFIG_FEATURE_PIDFILE is not set +CONFIG_FEATURE_SUID=y +# CONFIG_FEATURE_SUID_CONFIG is not set +# CONFIG_FEATURE_SUID_CONFIG_QUIET is not set +# CONFIG_SELINUX is not set +# CONFIG_FEATURE_PREFER_APPLETS is not set +CONFIG_BUSYBOX_EXEC_PATH="/proc/self/exe" +CONFIG_FEATURE_SYSLOG=y +# CONFIG_FEATURE_HAVE_RPC is not set + +# +# Build Options +# +# CONFIG_STATIC is not set +# CONFIG_PIE is not set +# CONFIG_NOMMU is not set +# CONFIG_BUILD_LIBBUSYBOX is not set +# CONFIG_FEATURE_INDIVIDUAL is not set +# CONFIG_FEATURE_SHARED_BUSYBOX is not set +CONFIG_LFS=y +CONFIG_CROSS_COMPILER_PREFIX="" +CONFIG_EXTRA_CFLAGS="" + +# +# Debugging Options +# +# CONFIG_DEBUG is not set +# CONFIG_DEBUG_PESSIMIZE is not set +# CONFIG_WERROR is not set +CONFIG_NO_DEBUG_LIB=y +# CONFIG_DMALLOC is not set +# CONFIG_EFENCE is not set + +# +# Installation Options ("make install" behavior) +# +CONFIG_INSTALL_APPLET_SYMLINKS=y +# CONFIG_INSTALL_APPLET_HARDLINKS is not set +# CONFIG_INSTALL_APPLET_SCRIPT_WRAPPERS is not set +# CONFIG_INSTALL_APPLET_DONT is not set +# CONFIG_INSTALL_SH_APPLET_SYMLINK is not set +# CONFIG_INSTALL_SH_APPLET_HARDLINK is not set +# CONFIG_INSTALL_SH_APPLET_SCRIPT_WRAPPER is not set +CONFIG_PREFIX="./_install" + +# +# Busybox Library Tuning +# +CONFIG_PASSWORD_MINLEN=6 +CONFIG_MD5_SIZE_VS_SPEED=2 +# CONFIG_FEATURE_FAST_TOP is not set +# CONFIG_FEATURE_ETC_NETWORKS is not set +CONFIG_FEATURE_USE_TERMIOS=y +CONFIG_FEATURE_EDITING=y +CONFIG_FEATURE_EDITING_MAX_LEN=1024 +CONFIG_FEATURE_EDITING_VI=y +CONFIG_FEATURE_EDITING_HISTORY=999 +CONFIG_FEATURE_EDITING_SAVEHISTORY=y +CONFIG_FEATURE_TAB_COMPLETION=y +# CONFIG_FEATURE_USERNAME_COMPLETION is not set +CONFIG_FEATURE_EDITING_FANCY_PROMPT=y +# CONFIG_FEATURE_EDITING_ASK_TERMINAL is not set +CONFIG_FEATURE_NON_POSIX_CP=y +# CONFIG_FEATURE_VERBOSE_CP_MESSAGE is not set +CONFIG_FEATURE_COPYBUF_KB=4 +CONFIG_MONOTONIC_SYSCALL=y +CONFIG_IOCTL_HEX2STR_ERROR=y +# CONFIG_FEATURE_HWIB is not set + +# +# Applets +# + +# +# Archival Utilities +# +# CONFIG_FEATURE_SEAMLESS_XZ is not set +# CONFIG_FEATURE_SEAMLESS_LZMA is not set +# CONFIG_FEATURE_SEAMLESS_BZ2 is not set +# CONFIG_FEATURE_SEAMLESS_GZ is not set +# CONFIG_FEATURE_SEAMLESS_Z is not set +CONFIG_AR=y +# CONFIG_FEATURE_AR_LONG_FILENAMES is not set +CONFIG_FEATURE_AR_CREATE=y +CONFIG_BUNZIP2=y +# CONFIG_BZIP2 is not set +CONFIG_CPIO=y +# CONFIG_FEATURE_CPIO_O is not set +# CONFIG_FEATURE_CPIO_P is not set +# CONFIG_DPKG is not set +# CONFIG_DPKG_DEB is not set +# CONFIG_FEATURE_DPKG_DEB_EXTRACT_ONLY is not set +CONFIG_GUNZIP=y +CONFIG_GZIP=y +# CONFIG_FEATURE_GZIP_LONG_OPTIONS is not set +# CONFIG_LZOP is not set +# CONFIG_LZOP_COMPR_HIGH is not set +# CONFIG_RPM2CPIO is not set +# CONFIG_RPM is not set +CONFIG_TAR=y +CONFIG_FEATURE_TAR_CREATE=y +# CONFIG_FEATURE_TAR_AUTODETECT is not set +CONFIG_FEATURE_TAR_FROM=y +# CONFIG_FEATURE_TAR_OLDGNU_COMPATIBILITY is not set +# CONFIG_FEATURE_TAR_OLDSUN_COMPATIBILITY is not set +CONFIG_FEATURE_TAR_GNU_EXTENSIONS=y +CONFIG_FEATURE_TAR_LONG_OPTIONS=y +CONFIG_FEATURE_TAR_TO_COMMAND=y +# CONFIG_FEATURE_TAR_UNAME_GNAME is not set +# CONFIG_FEATURE_TAR_NOPRESERVE_TIME is not set +# CONFIG_FEATURE_TAR_SELINUX is not set +# CONFIG_UNCOMPRESS is not set +CONFIG_UNLZMA=y +# CONFIG_FEATURE_LZMA_FAST is not set +CONFIG_LZMA=y +CONFIG_UNXZ=y +CONFIG_XZ=y +CONFIG_UNZIP=y + +# +# Coreutils +# +CONFIG_BASENAME=y +CONFIG_CAT=y +CONFIG_DATE=y +CONFIG_FEATURE_DATE_ISOFMT=y +# CONFIG_FEATURE_DATE_NANO is not set +CONFIG_FEATURE_DATE_COMPAT=y +CONFIG_TEST=y +CONFIG_FEATURE_TEST_64=y +CONFIG_TR=y +CONFIG_FEATURE_TR_CLASSES=y +CONFIG_FEATURE_TR_EQUIV=y +CONFIG_BASE64=y +# CONFIG_CAL is not set +CONFIG_CATV=y +CONFIG_CHGRP=y +CONFIG_CHMOD=y +CONFIG_CHOWN=y +# CONFIG_FEATURE_CHOWN_LONG_OPTIONS is not set +CONFIG_CHROOT=y +CONFIG_CKSUM=y +# CONFIG_COMM is not set +CONFIG_CP=y +# CONFIG_FEATURE_CP_LONG_OPTIONS is not set +CONFIG_CUT=y +CONFIG_DD=y +CONFIG_FEATURE_DD_SIGNAL_HANDLING=y +# CONFIG_FEATURE_DD_THIRD_STATUS_LINE is not set +CONFIG_FEATURE_DD_IBS_OBS=y +CONFIG_DF=y +# CONFIG_FEATURE_DF_FANCY is not set +CONFIG_DIRNAME=y +CONFIG_DOS2UNIX=y +CONFIG_UNIX2DOS=y +CONFIG_DU=y +CONFIG_FEATURE_DU_DEFAULT_BLOCKSIZE_1K=y +CONFIG_ECHO=y +CONFIG_FEATURE_FANCY_ECHO=y +CONFIG_ENV=y +# CONFIG_FEATURE_ENV_LONG_OPTIONS is not set +# CONFIG_EXPAND is not set +# CONFIG_FEATURE_EXPAND_LONG_OPTIONS is not set +CONFIG_EXPR=y +CONFIG_EXPR_MATH_SUPPORT_64=y +CONFIG_FALSE=y +CONFIG_FOLD=y +CONFIG_FSYNC=y +CONFIG_HEAD=y +CONFIG_FEATURE_FANCY_HEAD=y +CONFIG_HOSTID=y +CONFIG_ID=y +CONFIG_INSTALL=y +CONFIG_FEATURE_INSTALL_LONG_OPTIONS=y +CONFIG_LENGTH=y +CONFIG_LN=y +CONFIG_LOGNAME=y +CONFIG_LS=y +CONFIG_FEATURE_LS_FILETYPES=y +CONFIG_FEATURE_LS_FOLLOWLINKS=y +CONFIG_FEATURE_LS_RECURSIVE=y +CONFIG_FEATURE_LS_SORTFILES=y +CONFIG_FEATURE_LS_TIMESTAMPS=y +CONFIG_FEATURE_LS_USERNAME=y +CONFIG_FEATURE_LS_COLOR=y +CONFIG_FEATURE_LS_COLOR_IS_DEFAULT=y +CONFIG_MD5SUM=y +CONFIG_MKDIR=y +CONFIG_FEATURE_MKDIR_LONG_OPTIONS=y +CONFIG_MKFIFO=y +CONFIG_MKNOD=y +CONFIG_MV=y +CONFIG_FEATURE_MV_LONG_OPTIONS=y +CONFIG_NICE=y +CONFIG_NOHUP=y +CONFIG_OD=y +CONFIG_PRINTENV=y +CONFIG_PRINTF=y +CONFIG_PWD=y +CONFIG_READLINK=y +CONFIG_FEATURE_READLINK_FOLLOW=y +CONFIG_REALPATH=y +CONFIG_RM=y +CONFIG_RMDIR=y +# CONFIG_FEATURE_RMDIR_LONG_OPTIONS is not set +CONFIG_SEQ=y +CONFIG_SHA1SUM=y +CONFIG_SHA256SUM=y +CONFIG_SHA512SUM=y +CONFIG_SLEEP=y +CONFIG_FEATURE_FANCY_SLEEP=y +CONFIG_FEATURE_FLOAT_SLEEP=y +CONFIG_SORT=y +CONFIG_FEATURE_SORT_BIG=y +# CONFIG_SPLIT is not set +# CONFIG_FEATURE_SPLIT_FANCY is not set +# CONFIG_STAT is not set +# CONFIG_FEATURE_STAT_FORMAT is not set +CONFIG_STTY=y +# CONFIG_SUM is not set +CONFIG_SYNC=y +CONFIG_TAC=y +CONFIG_TAIL=y +CONFIG_FEATURE_FANCY_TAIL=y +CONFIG_TEE=y +CONFIG_FEATURE_TEE_USE_BLOCK_IO=y +CONFIG_TOUCH=y +CONFIG_TRUE=y +CONFIG_TTY=y +CONFIG_UNAME=y +# CONFIG_UNEXPAND is not set +# CONFIG_FEATURE_UNEXPAND_LONG_OPTIONS is not set +CONFIG_UNIQ=y +CONFIG_USLEEP=y +CONFIG_UUDECODE=y +CONFIG_UUENCODE=y +CONFIG_WC=y +# CONFIG_FEATURE_WC_LARGE is not set +# CONFIG_WHO is not set +CONFIG_WHOAMI=y +CONFIG_YES=y + +# +# Common options for cp and mv +# +CONFIG_FEATURE_PRESERVE_HARDLINKS=y + +# +# Common options for ls, more and telnet +# +CONFIG_FEATURE_AUTOWIDTH=y + +# +# Common options for df, du, ls +# +CONFIG_FEATURE_HUMAN_READABLE=y + +# +# Common options for md5sum, sha1sum, sha256sum, sha512sum +# +CONFIG_FEATURE_MD5_SHA1_SUM_CHECK=y + +# +# Console Utilities +# +CONFIG_CHVT=y +# CONFIG_FGCONSOLE is not set +CONFIG_CLEAR=y +CONFIG_DEALLOCVT=y +CONFIG_DUMPKMAP=y +# CONFIG_KBD_MODE is not set +CONFIG_LOADFONT=y +CONFIG_LOADKMAP=y +CONFIG_OPENVT=y +CONFIG_RESET=y +CONFIG_RESIZE=y +CONFIG_FEATURE_RESIZE_PRINT=y +CONFIG_SETCONSOLE=y +# CONFIG_FEATURE_SETCONSOLE_LONG_OPTIONS is not set +# CONFIG_SETFONT is not set +# CONFIG_FEATURE_SETFONT_TEXTUAL_MAP is not set +CONFIG_DEFAULT_SETFONT_DIR="" +CONFIG_SETKEYCODES=y +CONFIG_SETLOGCONS=y +# CONFIG_SHOWKEY is not set + +# +# Common options for loadfont and setfont +# +CONFIG_FEATURE_LOADFONT_PSF2=y +CONFIG_FEATURE_LOADFONT_RAW=y + +# +# Debian Utilities +# +CONFIG_MKTEMP=y +# CONFIG_PIPE_PROGRESS is not set +# CONFIG_RUN_PARTS is not set +# CONFIG_FEATURE_RUN_PARTS_LONG_OPTIONS is not set +# CONFIG_FEATURE_RUN_PARTS_FANCY is not set +# CONFIG_START_STOP_DAEMON is not set +# CONFIG_FEATURE_START_STOP_DAEMON_FANCY is not set +# CONFIG_FEATURE_START_STOP_DAEMON_LONG_OPTIONS is not set +# CONFIG_WHICH is not set + +# +# Editors +# +CONFIG_PATCH=y +CONFIG_AWK=y +# CONFIG_FEATURE_AWK_LIBM is not set +CONFIG_CMP=y +CONFIG_DIFF=y +# CONFIG_FEATURE_DIFF_LONG_OPTIONS is not set +CONFIG_FEATURE_DIFF_DIR=y +# CONFIG_ED is not set +CONFIG_SED=y +CONFIG_VI=y +CONFIG_FEATURE_VI_MAX_LEN=4096 +CONFIG_FEATURE_VI_8BIT=y +CONFIG_FEATURE_VI_COLON=y +CONFIG_FEATURE_VI_YANKMARK=y +CONFIG_FEATURE_VI_SEARCH=y +CONFIG_FEATURE_VI_USE_SIGNALS=y +CONFIG_FEATURE_VI_DOT_CMD=y +CONFIG_FEATURE_VI_READONLY=y +CONFIG_FEATURE_VI_SETOPTS=y +CONFIG_FEATURE_VI_SET=y +CONFIG_FEATURE_VI_WIN_RESIZE=y +CONFIG_FEATURE_VI_ASK_TERMINAL=y +CONFIG_FEATURE_VI_OPTIMIZE_CURSOR=y +CONFIG_FEATURE_ALLOW_EXEC=y + +# +# Finding Utilities +# +CONFIG_FIND=y +CONFIG_FEATURE_FIND_PRINT0=y +CONFIG_FEATURE_FIND_MTIME=y +CONFIG_FEATURE_FIND_MMIN=y +CONFIG_FEATURE_FIND_PERM=y +CONFIG_FEATURE_FIND_TYPE=y +CONFIG_FEATURE_FIND_XDEV=y +CONFIG_FEATURE_FIND_MAXDEPTH=y +CONFIG_FEATURE_FIND_NEWER=y +# CONFIG_FEATURE_FIND_INUM is not set +CONFIG_FEATURE_FIND_EXEC=y +CONFIG_FEATURE_FIND_USER=y +CONFIG_FEATURE_FIND_GROUP=y +CONFIG_FEATURE_FIND_NOT=y +CONFIG_FEATURE_FIND_DEPTH=y +CONFIG_FEATURE_FIND_PAREN=y +CONFIG_FEATURE_FIND_SIZE=y +CONFIG_FEATURE_FIND_PRUNE=y +# CONFIG_FEATURE_FIND_DELETE is not set +CONFIG_FEATURE_FIND_PATH=y +CONFIG_FEATURE_FIND_REGEX=y +# CONFIG_FEATURE_FIND_CONTEXT is not set +# CONFIG_FEATURE_FIND_LINKS is not set +CONFIG_GREP=y +CONFIG_FEATURE_GREP_EGREP_ALIAS=y +CONFIG_FEATURE_GREP_FGREP_ALIAS=y +CONFIG_FEATURE_GREP_CONTEXT=y +CONFIG_XARGS=y +# CONFIG_FEATURE_XARGS_SUPPORT_CONFIRMATION is not set +CONFIG_FEATURE_XARGS_SUPPORT_QUOTES=y +CONFIG_FEATURE_XARGS_SUPPORT_TERMOPT=y +CONFIG_FEATURE_XARGS_SUPPORT_ZERO_TERM=y + +# +# Init Utilities +# +# CONFIG_BOOTCHARTD is not set +# CONFIG_FEATURE_BOOTCHARTD_BLOATED_HEADER is not set +# CONFIG_FEATURE_BOOTCHARTD_CONFIG_FILE is not set +CONFIG_HALT=y +# CONFIG_FEATURE_CALL_TELINIT is not set +CONFIG_TELINIT_PATH="" +# CONFIG_INIT is not set +# CONFIG_FEATURE_USE_INITTAB is not set +# CONFIG_FEATURE_KILL_REMOVED is not set +CONFIG_FEATURE_KILL_DELAY=0 +# CONFIG_FEATURE_INIT_SCTTY is not set +# CONFIG_FEATURE_INIT_SYSLOG is not set +# CONFIG_FEATURE_EXTRA_QUIET is not set +# CONFIG_FEATURE_INIT_COREDUMPS is not set +# CONFIG_FEATURE_INITRD is not set +CONFIG_INIT_TERMINAL_TYPE="" +CONFIG_MESG=y + +# +# Login/Password Management Utilities +# +# CONFIG_ADD_SHELL is not set +# CONFIG_REMOVE_SHELL is not set +CONFIG_FEATURE_SHADOWPASSWDS=y +# CONFIG_USE_BB_PWD_GRP is not set +# CONFIG_USE_BB_SHADOW is not set +CONFIG_USE_BB_CRYPT=y +# CONFIG_USE_BB_CRYPT_SHA is not set +CONFIG_ADDUSER=y +# CONFIG_FEATURE_ADDUSER_LONG_OPTIONS is not set +# CONFIG_FEATURE_CHECK_NAMES is not set +CONFIG_FIRST_SYSTEM_ID=100 +CONFIG_LAST_SYSTEM_ID=999 +CONFIG_ADDGROUP=y +# CONFIG_FEATURE_ADDGROUP_LONG_OPTIONS is not set +# CONFIG_FEATURE_ADDUSER_TO_GROUP is not set +CONFIG_DELUSER=y +CONFIG_DELGROUP=y +# CONFIG_FEATURE_DEL_USER_FROM_GROUP is not set +CONFIG_GETTY=y +CONFIG_LOGIN=y +# CONFIG_PAM is not set +# CONFIG_LOGIN_SCRIPTS is not set +# CONFIG_FEATURE_NOLOGIN is not set +# CONFIG_FEATURE_SECURETTY is not set +CONFIG_PASSWD=y +CONFIG_FEATURE_PASSWD_WEAK_CHECK=y +# CONFIG_CRYPTPW is not set +CONFIG_CHPASSWD=y +# CONFIG_SU is not set +# CONFIG_FEATURE_SU_SYSLOG is not set +# CONFIG_FEATURE_SU_CHECKS_SHELLS is not set +CONFIG_SULOGIN=y +# CONFIG_VLOCK is not set + +# +# Linux Ext2 FS Progs +# +CONFIG_CHATTR=y +CONFIG_FSCK=y +CONFIG_LSATTR=y +CONFIG_TUNE2FS=y + +# +# Linux Module Utilities +# +# CONFIG_MODINFO is not set +# CONFIG_MODPROBE_SMALL is not set +# CONFIG_FEATURE_MODPROBE_SMALL_OPTIONS_ON_CMDLINE is not set +# CONFIG_FEATURE_MODPROBE_SMALL_CHECK_ALREADY_LOADED is not set +# CONFIG_INSMOD is not set +# CONFIG_RMMOD is not set +# CONFIG_LSMOD is not set +# CONFIG_FEATURE_LSMOD_PRETTY_2_6_OUTPUT is not set +# CONFIG_MODPROBE is not set +# CONFIG_FEATURE_MODPROBE_BLACKLIST is not set +# CONFIG_DEPMOD is not set + +# +# Options common to multiple modutils +# +# CONFIG_FEATURE_2_4_MODULES is not set +# CONFIG_FEATURE_INSMOD_TRY_MMAP is not set +# CONFIG_FEATURE_INSMOD_VERSION_CHECKING is not set +# CONFIG_FEATURE_INSMOD_KSYMOOPS_SYMBOLS is not set +# CONFIG_FEATURE_INSMOD_LOADINKMEM is not set +# CONFIG_FEATURE_INSMOD_LOAD_MAP is not set +# CONFIG_FEATURE_INSMOD_LOAD_MAP_FULL is not set +# CONFIG_FEATURE_CHECK_TAINTED_MODULE is not set +# CONFIG_FEATURE_MODUTILS_ALIAS is not set +# CONFIG_FEATURE_MODUTILS_SYMBOLS is not set +CONFIG_DEFAULT_MODULES_DIR="" +CONFIG_DEFAULT_DEPMOD_FILE="" + +# +# Linux System Utilities +# +# CONFIG_BLOCKDEV is not set +CONFIG_REV=y +# CONFIG_ACPID is not set +# CONFIG_FEATURE_ACPID_COMPAT is not set +CONFIG_BLKID=y +CONFIG_DMESG=y +CONFIG_FEATURE_DMESG_PRETTY=y +# CONFIG_FBSET is not set +# CONFIG_FEATURE_FBSET_FANCY is not set +# CONFIG_FEATURE_FBSET_READMODE is not set +CONFIG_FDFLUSH=y +CONFIG_FDFORMAT=y +CONFIG_FDISK=y +CONFIG_FDISK_SUPPORT_LARGE_DISKS=y +CONFIG_FEATURE_FDISK_WRITABLE=y +# CONFIG_FEATURE_AIX_LABEL is not set +# CONFIG_FEATURE_SGI_LABEL is not set +# CONFIG_FEATURE_SUN_LABEL is not set +# CONFIG_FEATURE_OSF_LABEL is not set +# CONFIG_FEATURE_GPT_LABEL is not set +# CONFIG_FEATURE_FDISK_ADVANCED is not set +CONFIG_FINDFS=y +CONFIG_FLOCK=y +CONFIG_FREERAMDISK=y +# CONFIG_FSCK_MINIX is not set +CONFIG_MKFS_EXT2=y +# CONFIG_MKFS_MINIX is not set +# CONFIG_FEATURE_MINIX2 is not set +# CONFIG_MKFS_REISER is not set +CONFIG_MKFS_VFAT=y +CONFIG_GETOPT=y +CONFIG_FEATURE_GETOPT_LONG=y +CONFIG_HEXDUMP=y +CONFIG_FEATURE_HEXDUMP_REVERSE=y +CONFIG_HD=y +CONFIG_HWCLOCK=y +CONFIG_FEATURE_HWCLOCK_LONG_OPTIONS=y +CONFIG_FEATURE_HWCLOCK_ADJTIME_FHS=y +CONFIG_IPCRM=y +CONFIG_IPCS=y +CONFIG_LOSETUP=y +CONFIG_LSPCI=y +CONFIG_LSUSB=y +CONFIG_MDEV=y +CONFIG_FEATURE_MDEV_CONF=y +# CONFIG_FEATURE_MDEV_RENAME is not set +# CONFIG_FEATURE_MDEV_RENAME_REGEXP is not set +CONFIG_FEATURE_MDEV_EXEC=y +# CONFIG_FEATURE_MDEV_LOAD_FIRMWARE is not set +CONFIG_MKSWAP=y +# CONFIG_FEATURE_MKSWAP_UUID is not set +CONFIG_MORE=y +CONFIG_MOUNT=y +# CONFIG_FEATURE_MOUNT_FAKE is not set +# CONFIG_FEATURE_MOUNT_VERBOSE is not set +# CONFIG_FEATURE_MOUNT_HELPERS is not set +CONFIG_FEATURE_MOUNT_LABEL=y +# CONFIG_FEATURE_MOUNT_NFS is not set +# CONFIG_FEATURE_MOUNT_CIFS is not set +CONFIG_FEATURE_MOUNT_FLAGS=y +# CONFIG_FEATURE_MOUNT_FSTAB is not set +# CONFIG_PIVOT_ROOT is not set +CONFIG_RDATE=y +# CONFIG_RDEV is not set +CONFIG_READPROFILE=y +# CONFIG_RTCWAKE is not set +# CONFIG_SCRIPT is not set +# CONFIG_SCRIPTREPLAY is not set +# CONFIG_SETARCH is not set +CONFIG_SWAPONOFF=y +# CONFIG_FEATURE_SWAPON_PRI is not set +# CONFIG_SWITCH_ROOT is not set +CONFIG_UMOUNT=y +CONFIG_FEATURE_UMOUNT_ALL=y + +# +# Common options for mount/umount +# +CONFIG_FEATURE_MOUNT_LOOP=y +CONFIG_FEATURE_MOUNT_LOOP_CREATE=y +# CONFIG_FEATURE_MTAB_SUPPORT is not set +CONFIG_VOLUMEID=y + +# +# Filesystem/Volume identification +# +CONFIG_FEATURE_VOLUMEID_EXT=y +CONFIG_FEATURE_VOLUMEID_BTRFS=y +CONFIG_FEATURE_VOLUMEID_REISERFS=y +CONFIG_FEATURE_VOLUMEID_FAT=y +CONFIG_FEATURE_VOLUMEID_HFS=y +CONFIG_FEATURE_VOLUMEID_JFS=y +CONFIG_FEATURE_VOLUMEID_XFS=y +CONFIG_FEATURE_VOLUMEID_NTFS=y +CONFIG_FEATURE_VOLUMEID_ISO9660=y +CONFIG_FEATURE_VOLUMEID_UDF=y +CONFIG_FEATURE_VOLUMEID_LUKS=y +CONFIG_FEATURE_VOLUMEID_LINUXSWAP=y +CONFIG_FEATURE_VOLUMEID_CRAMFS=y +CONFIG_FEATURE_VOLUMEID_ROMFS=y +CONFIG_FEATURE_VOLUMEID_SYSV=y +CONFIG_FEATURE_VOLUMEID_OCFS2=y +CONFIG_FEATURE_VOLUMEID_LINUXRAID=y + +# +# Miscellaneous Utilities +# +# CONFIG_CONSPY is not set +# CONFIG_NANDWRITE is not set +# CONFIG_NANDDUMP is not set +# CONFIG_UBIATTACH is not set +# CONFIG_UBIDETACH is not set +# CONFIG_ADJTIMEX is not set +# CONFIG_BBCONFIG is not set +# CONFIG_FEATURE_COMPRESS_BBCONFIG is not set +# CONFIG_BEEP is not set +CONFIG_FEATURE_BEEP_FREQ=0 +CONFIG_FEATURE_BEEP_LENGTH_MS=0 +# CONFIG_CHAT is not set +# CONFIG_FEATURE_CHAT_NOFAIL is not set +# CONFIG_FEATURE_CHAT_TTY_HIFI is not set +# CONFIG_FEATURE_CHAT_IMPLICIT_CR is not set +# CONFIG_FEATURE_CHAT_SWALLOW_OPTS is not set +# CONFIG_FEATURE_CHAT_SEND_ESCAPES is not set +# CONFIG_FEATURE_CHAT_VAR_ABORT_LEN is not set +# CONFIG_FEATURE_CHAT_CLR_ABORT is not set +CONFIG_CHRT=y +# CONFIG_CROND is not set +# CONFIG_FEATURE_CROND_D is not set +# CONFIG_FEATURE_CROND_CALL_SENDMAIL is not set +CONFIG_FEATURE_CROND_DIR="" +# CONFIG_CRONTAB is not set +CONFIG_DC=y +# CONFIG_FEATURE_DC_LIBM is not set +# CONFIG_DEVFSD is not set +# CONFIG_DEVFSD_MODLOAD is not set +# CONFIG_DEVFSD_FG_NP is not set +# CONFIG_DEVFSD_VERBOSE is not set +# CONFIG_FEATURE_DEVFS is not set +CONFIG_DEVMEM=y +# CONFIG_EJECT is not set +# CONFIG_FEATURE_EJECT_SCSI is not set +# CONFIG_FBSPLASH is not set +# CONFIG_FLASHCP is not set +# CONFIG_FLASH_LOCK is not set +# CONFIG_FLASH_UNLOCK is not set +# CONFIG_FLASH_ERASEALL is not set +# CONFIG_IONICE is not set +CONFIG_INOTIFYD=y +# CONFIG_LAST is not set +# CONFIG_FEATURE_LAST_SMALL is not set +# CONFIG_FEATURE_LAST_FANCY is not set +CONFIG_LESS=y +CONFIG_FEATURE_LESS_MAXLINES=9999999 +CONFIG_FEATURE_LESS_BRACKETS=y +CONFIG_FEATURE_LESS_FLAGS=y +# CONFIG_FEATURE_LESS_MARKS is not set +CONFIG_FEATURE_LESS_REGEXP=y +# CONFIG_FEATURE_LESS_WINCH is not set +# CONFIG_FEATURE_LESS_DASHCMD is not set +# CONFIG_FEATURE_LESS_LINENUMS is not set +# CONFIG_HDPARM is not set +# CONFIG_FEATURE_HDPARM_GET_IDENTITY is not set +# CONFIG_FEATURE_HDPARM_HDIO_SCAN_HWIF is not set +# CONFIG_FEATURE_HDPARM_HDIO_UNREGISTER_HWIF is not set +# CONFIG_FEATURE_HDPARM_HDIO_DRIVE_RESET is not set +# CONFIG_FEATURE_HDPARM_HDIO_TRISTATE_HWIF is not set +# CONFIG_FEATURE_HDPARM_HDIO_GETSET_DMA is not set +CONFIG_MAKEDEVS=y +# CONFIG_FEATURE_MAKEDEVS_LEAF is not set +CONFIG_FEATURE_MAKEDEVS_TABLE=y +# CONFIG_MAN is not set +# CONFIG_MICROCOM is not set +# CONFIG_MOUNTPOINT is not set +# CONFIG_MT is not set +# CONFIG_RAIDAUTORUN is not set +# CONFIG_READAHEAD is not set +# CONFIG_RFKILL is not set +# CONFIG_RUNLEVEL is not set +# CONFIG_RX is not set +CONFIG_SETSID=y +CONFIG_STRINGS=y +# CONFIG_TASKSET is not set +# CONFIG_FEATURE_TASKSET_FANCY is not set +CONFIG_TIME=y +# CONFIG_TIMEOUT is not set +# CONFIG_TTYSIZE is not set +# CONFIG_VOLNAME is not set +CONFIG_WALL=y +# CONFIG_WATCHDOG is not set + +# +# Networking Utilities +# +# CONFIG_NBDCLIENT is not set +CONFIG_NC=y +CONFIG_NC_SERVER=y +CONFIG_NC_EXTRA=y +# CONFIG_NC_110_COMPAT is not set +CONFIG_FEATURE_IPV6=y +# CONFIG_FEATURE_UNIX_LOCAL is not set +# CONFIG_FEATURE_PREFER_IPV4_ADDRESS is not set +# CONFIG_VERBOSE_RESOLUTION_ERRORS is not set +# CONFIG_ARP is not set +# CONFIG_ARPING is not set +CONFIG_BRCTL=y +CONFIG_FEATURE_BRCTL_FANCY=y +CONFIG_FEATURE_BRCTL_SHOW=y +# CONFIG_DNSD is not set +CONFIG_ETHER_WAKE=y +# CONFIG_FAKEIDENTD is not set +# CONFIG_FTPD is not set +# CONFIG_FEATURE_FTP_WRITE is not set +# CONFIG_FEATURE_FTPD_ACCEPT_BROKEN_LIST is not set +# CONFIG_FTPGET is not set +# CONFIG_FTPPUT is not set +# CONFIG_FEATURE_FTPGETPUT_LONG_OPTIONS is not set +CONFIG_HOSTNAME=y +# CONFIG_HTTPD is not set +# CONFIG_FEATURE_HTTPD_RANGES is not set +# CONFIG_FEATURE_HTTPD_USE_SENDFILE is not set +# CONFIG_FEATURE_HTTPD_SETUID is not set +# CONFIG_FEATURE_HTTPD_BASIC_AUTH is not set +# CONFIG_FEATURE_HTTPD_AUTH_MD5 is not set +# CONFIG_FEATURE_HTTPD_CGI is not set +# CONFIG_FEATURE_HTTPD_CONFIG_WITH_SCRIPT_INTERPR is not set +# CONFIG_FEATURE_HTTPD_SET_REMOTE_PORT_TO_ENV is not set +# CONFIG_FEATURE_HTTPD_ENCODE_URL_STR is not set +# CONFIG_FEATURE_HTTPD_ERROR_PAGES is not set +# CONFIG_FEATURE_HTTPD_PROXY is not set +# CONFIG_FEATURE_HTTPD_GZIP is not set +CONFIG_IFCONFIG=y +CONFIG_FEATURE_IFCONFIG_STATUS=y +CONFIG_FEATURE_IFCONFIG_SLIP=y +CONFIG_FEATURE_IFCONFIG_MEMSTART_IOADDR_IRQ=y +CONFIG_FEATURE_IFCONFIG_HW=y +# CONFIG_FEATURE_IFCONFIG_BROADCAST_PLUS is not set +# CONFIG_IFENSLAVE is not set +# CONFIG_IFPLUGD is not set +# CONFIG_IFUPDOWN is not set +CONFIG_IFUPDOWN_IFSTATE_PATH="" +# CONFIG_FEATURE_IFUPDOWN_IP is not set +# CONFIG_FEATURE_IFUPDOWN_IP_BUILTIN is not set +# CONFIG_FEATURE_IFUPDOWN_IFCONFIG_BUILTIN is not set +# CONFIG_FEATURE_IFUPDOWN_IPV4 is not set +# CONFIG_FEATURE_IFUPDOWN_IPV6 is not set +# CONFIG_FEATURE_IFUPDOWN_MAPPING is not set +# CONFIG_FEATURE_IFUPDOWN_EXTERNAL_DHCP is not set +# CONFIG_INETD is not set +# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_ECHO is not set +# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DISCARD is not set +# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_TIME is not set +# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DAYTIME is not set +# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_CHARGEN is not set +# CONFIG_FEATURE_INETD_RPC is not set +CONFIG_IP=y +CONFIG_FEATURE_IP_ADDRESS=y +CONFIG_FEATURE_IP_LINK=y +CONFIG_FEATURE_IP_ROUTE=y +CONFIG_FEATURE_IP_TUNNEL=y +CONFIG_FEATURE_IP_RULE=y +CONFIG_FEATURE_IP_SHORT_FORMS=y +# CONFIG_FEATURE_IP_RARE_PROTOCOLS is not set +CONFIG_IPADDR=y +CONFIG_IPLINK=y +CONFIG_IPROUTE=y +CONFIG_IPTUNNEL=y +CONFIG_IPRULE=y +# CONFIG_IPCALC is not set +# CONFIG_FEATURE_IPCALC_FANCY is not set +# CONFIG_FEATURE_IPCALC_LONG_OPTIONS is not set +# CONFIG_NAMEIF is not set +# CONFIG_FEATURE_NAMEIF_EXTENDED is not set +CONFIG_NETSTAT=y +# CONFIG_FEATURE_NETSTAT_WIDE is not set +# CONFIG_FEATURE_NETSTAT_PRG is not set +CONFIG_NSLOOKUP=y +# CONFIG_NTPD is not set +# CONFIG_FEATURE_NTPD_SERVER is not set +CONFIG_PING=y +CONFIG_PING6=y +CONFIG_FEATURE_FANCY_PING=y +# CONFIG_PSCAN is not set +# CONFIG_ROUTE is not set +# CONFIG_SLATTACH is not set +CONFIG_TCPSVD=y +CONFIG_TELNET=y +CONFIG_FEATURE_TELNET_TTYPE=y +CONFIG_FEATURE_TELNET_AUTOLOGIN=y +CONFIG_TELNETD=y +# CONFIG_FEATURE_TELNETD_STANDALONE is not set +# CONFIG_FEATURE_TELNETD_INETD_WAIT is not set +CONFIG_TFTP=y +CONFIG_TFTPD=y + +# +# Common options for tftp/tftpd +# +CONFIG_FEATURE_TFTP_GET=y +CONFIG_FEATURE_TFTP_PUT=y +CONFIG_FEATURE_TFTP_BLOCKSIZE=y +# CONFIG_FEATURE_TFTP_PROGRESS_BAR is not set +# CONFIG_TFTP_DEBUG is not set +CONFIG_TRACEROUTE=y +CONFIG_TRACEROUTE6=y +# CONFIG_FEATURE_TRACEROUTE_VERBOSE is not set +# CONFIG_FEATURE_TRACEROUTE_SOURCE_ROUTE is not set +# CONFIG_FEATURE_TRACEROUTE_USE_ICMP is not set +# CONFIG_TUNCTL is not set +# CONFIG_FEATURE_TUNCTL_UG is not set +CONFIG_UDHCPD=y +CONFIG_DHCPRELAY=y +CONFIG_DUMPLEASES=y +CONFIG_FEATURE_UDHCPD_WRITE_LEASES_EARLY=y +CONFIG_DHCPD_LEASES_FILE="/tmp/dhcp-leases" +CONFIG_UDHCPC=y +CONFIG_FEATURE_UDHCPC_ARPING=y +# CONFIG_FEATURE_UDHCP_PORT is not set +CONFIG_UDHCP_DEBUG=0 +# CONFIG_FEATURE_UDHCP_RFC3397 is not set +CONFIG_UDHCPC_DEFAULT_SCRIPT="/sbin/udhcpc-script" +CONFIG_UDHCPC_SLACK_FOR_BUGGY_SERVERS=80 +CONFIG_IFUPDOWN_UDHCPC_CMD_OPTIONS="" +CONFIG_UDPSVD=y +# CONFIG_VCONFIG is not set +CONFIG_WGET=y +CONFIG_FEATURE_WGET_STATUSBAR=y +CONFIG_FEATURE_WGET_AUTHENTICATION=y +CONFIG_FEATURE_WGET_LONG_OPTIONS=y +CONFIG_FEATURE_WGET_TIMEOUT=y +# CONFIG_ZCIP is not set + +# +# Print Utilities +# +# CONFIG_LPD is not set +# CONFIG_LPR is not set +# CONFIG_LPQ is not set + +# +# Mail Utilities +# +# CONFIG_MAKEMIME is not set +CONFIG_FEATURE_MIME_CHARSET="" +# CONFIG_POPMAILDIR is not set +# CONFIG_FEATURE_POPMAILDIR_DELIVERY is not set +# CONFIG_REFORMIME is not set +# CONFIG_FEATURE_REFORMIME_COMPAT is not set +# CONFIG_SENDMAIL is not set + +# +# Process Utilities +# +# CONFIG_IOSTAT is not set +# CONFIG_MPSTAT is not set +# CONFIG_PMAP is not set +# CONFIG_POWERTOP is not set +# CONFIG_SMEMCAP is not set +CONFIG_FREE=y +# CONFIG_FUSER is not set +CONFIG_KILL=y +CONFIG_KILLALL=y +CONFIG_KILLALL5=y +# CONFIG_NMETER is not set +# CONFIG_PGREP is not set +# CONFIG_PIDOF is not set +# CONFIG_FEATURE_PIDOF_SINGLE is not set +# CONFIG_FEATURE_PIDOF_OMIT is not set +# CONFIG_PKILL is not set +CONFIG_PS=y +CONFIG_FEATURE_PS_WIDE=y +# CONFIG_FEATURE_PS_TIME is not set +# CONFIG_FEATURE_PS_ADDITIONAL_COLUMNS is not set +# CONFIG_FEATURE_PS_UNUSUAL_SYSTEMS is not set +CONFIG_RENICE=y +# CONFIG_BB_SYSCTL is not set +CONFIG_TOP=y +CONFIG_FEATURE_TOP_CPU_USAGE_PERCENTAGE=y +CONFIG_FEATURE_TOP_CPU_GLOBAL_PERCENTS=y +# CONFIG_FEATURE_TOP_SMP_CPU is not set +# CONFIG_FEATURE_TOP_DECIMALS is not set +# CONFIG_FEATURE_TOP_SMP_PROCESS is not set +# CONFIG_FEATURE_TOPMEM is not set +# CONFIG_FEATURE_SHOW_THREADS is not set +CONFIG_UPTIME=y +CONFIG_WATCH=y + +# +# Runit Utilities +# +CONFIG_RUNSV=y +CONFIG_RUNSVDIR=y +CONFIG_FEATURE_RUNSVDIR_LOG=y +CONFIG_SV=y +CONFIG_SV_DEFAULT_SERVICE_DIR="/service" +CONFIG_SVLOGD=y +CONFIG_CHPST=y +CONFIG_SETUIDGID=y +CONFIG_ENVUIDGID=y +CONFIG_ENVDIR=y +CONFIG_SOFTLIMIT=y +# CONFIG_CHCON is not set +# CONFIG_FEATURE_CHCON_LONG_OPTIONS is not set +# CONFIG_GETENFORCE is not set +# CONFIG_GETSEBOOL is not set +# CONFIG_LOAD_POLICY is not set +# CONFIG_MATCHPATHCON is not set +# CONFIG_RESTORECON is not set +# CONFIG_RUNCON is not set +# CONFIG_FEATURE_RUNCON_LONG_OPTIONS is not set +# CONFIG_SELINUXENABLED is not set +# CONFIG_SETENFORCE is not set +# CONFIG_SETFILES is not set +# CONFIG_FEATURE_SETFILES_CHECK_OPTION is not set +# CONFIG_SETSEBOOL is not set +# CONFIG_SESTATUS is not set + +# +# Shells +# +CONFIG_ASH=y +CONFIG_ASH_BASH_COMPAT=y +CONFIG_ASH_JOB_CONTROL=y +CONFIG_ASH_ALIAS=y +# CONFIG_ASH_GETOPTS is not set +CONFIG_ASH_BUILTIN_ECHO=y +CONFIG_ASH_BUILTIN_PRINTF=y +CONFIG_ASH_BUILTIN_TEST=y +CONFIG_ASH_CMDCMD=y +# CONFIG_ASH_MAIL is not set +CONFIG_ASH_OPTIMIZE_FOR_SIZE=y +CONFIG_ASH_RANDOM_SUPPORT=y +CONFIG_ASH_EXPAND_PRMT=y +# CONFIG_CTTYHACK is not set +# CONFIG_HUSH is not set +# CONFIG_HUSH_BASH_COMPAT is not set +# CONFIG_HUSH_BRACE_EXPANSION is not set +# CONFIG_HUSH_HELP is not set +# CONFIG_HUSH_INTERACTIVE is not set +# CONFIG_HUSH_SAVEHISTORY is not set +# CONFIG_HUSH_JOB is not set +# CONFIG_HUSH_TICK is not set +# CONFIG_HUSH_IF is not set +# CONFIG_HUSH_LOOPS is not set +# CONFIG_HUSH_CASE is not set +# CONFIG_HUSH_FUNCTIONS is not set +# CONFIG_HUSH_LOCAL is not set +# CONFIG_HUSH_RANDOM_SUPPORT is not set +# CONFIG_HUSH_EXPORT_N is not set +# CONFIG_HUSH_MODE_X is not set +# CONFIG_MSH is not set +CONFIG_FEATURE_SH_IS_ASH=y +# CONFIG_FEATURE_SH_IS_HUSH is not set +# CONFIG_FEATURE_SH_IS_NONE is not set +# CONFIG_FEATURE_BASH_IS_ASH is not set +# CONFIG_FEATURE_BASH_IS_HUSH is not set +CONFIG_FEATURE_BASH_IS_NONE=y +# CONFIG_SH_MATH_SUPPORT is not set +# CONFIG_SH_MATH_SUPPORT_64 is not set +CONFIG_FEATURE_SH_EXTRA_QUIET=y +# CONFIG_FEATURE_SH_STANDALONE is not set +# CONFIG_FEATURE_SH_NOFORK is not set + +# +# System Logging Utilities +# +# CONFIG_SYSLOGD is not set +# CONFIG_FEATURE_ROTATE_LOGFILE is not set +# CONFIG_FEATURE_REMOTE_LOG is not set +# CONFIG_FEATURE_SYSLOGD_DUP is not set +CONFIG_FEATURE_SYSLOGD_READ_BUFFER_SIZE=0 +# CONFIG_FEATURE_IPC_SYSLOG is not set +CONFIG_FEATURE_IPC_SYSLOG_BUFFER_SIZE=0 +# CONFIG_LOGREAD is not set +# CONFIG_FEATURE_LOGREAD_REDUCED_LOCKING is not set +# CONFIG_KLOGD is not set +# CONFIG_FEATURE_KLOGD_KLOGCTL is not set +# CONFIG_LOGGER is not set diff --git a/sh4pwn/cleanup.sh b/sh4pwn/cleanup.sh new file mode 100755 index 0000000..36f0944 --- /dev/null +++ b/sh4pwn/cleanup.sh @@ -0,0 +1,26 @@ +#! /bin/sh + +# Invoked by buildroot just before making a filesystem + +move () { + [ -d $1 ] && (cd $1 && tar cf - .) | (cd $2 && tar xf -) && rm -rf $1 +} + +rm -rf $1/init.d +rm -rf $1/var/cache $1/var/lib + +move $1/usr/bin $1/bin +move $1/usr/sbin $1/sbin +move $1/usr/lib $1/lib +move $1/usr/share $1/lib +[ -d $1/usr ] && rmdir $1/usr +[ -x $1/usr ] && rm $1/usr + +set +cp $(dirname $0)/skeleton/sbin/init $1/sbin || exit 1 + +cat < $1/etc/issue + o Dirtbags Shitty Linux +(m) $(date --rfc-3339=date) +EOF + diff --git a/sh4pwn/linux.config b/sh4pwn/linux.config new file mode 100644 index 0000000..fa59a54 --- /dev/null +++ b/sh4pwn/linux.config @@ -0,0 +1,1645 @@ +# +# Automatically generated make config: don't edit +# Linux/sh 2.6.39.4 Kernel Configuration +# Fri Oct 7 16:03:14 2011 +# +CONFIG_SUPERH=y +CONFIG_SUPERH32=y +# CONFIG_SUPERH64 is not set +CONFIG_ARCH_DEFCONFIG="arch/sh/configs/shx3_defconfig" +CONFIG_RWSEM_GENERIC_SPINLOCK=y +CONFIG_GENERIC_BUG=y +CONFIG_GENERIC_FIND_NEXT_BIT=y +CONFIG_GENERIC_FIND_BIT_LE=y +CONFIG_GENERIC_HWEIGHT=y +CONFIG_IRQ_PER_CPU=y +# CONFIG_GENERIC_GPIO is not set +CONFIG_GENERIC_CLOCKEVENTS=y +# CONFIG_ARCH_SUSPEND_POSSIBLE is not set +CONFIG_ARCH_HIBERNATION_POSSIBLE=y +CONFIG_SYS_SUPPORTS_HUGETLBFS=y +CONFIG_SYS_SUPPORTS_PCI=y +CONFIG_SYS_SUPPORTS_TMU=y +CONFIG_STACKTRACE_SUPPORT=y +CONFIG_LOCKDEP_SUPPORT=y +CONFIG_HAVE_LATENCYTOP_SUPPORT=y +# CONFIG_ARCH_HAS_ILOG2_U32 is not set +# CONFIG_ARCH_HAS_ILOG2_U64 is not set +CONFIG_ARCH_NO_VIRT_TO_BUS=y +CONFIG_ARCH_HAS_DEFAULT_IDLE=y +CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y +# CONFIG_NO_IOPORT is not set +CONFIG_IO_TRAPPED=y +CONFIG_DMA_NONCOHERENT=y +CONFIG_NEED_DMA_MAP_STATE=y +CONFIG_NEED_SG_DMA_LENGTH=y +CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" +CONFIG_CONSTRUCTORS=y +CONFIG_HAVE_IRQ_WORK=y +CONFIG_IRQ_WORK=y + +# +# General setup +# +CONFIG_EXPERIMENTAL=y +CONFIG_BROKEN_ON_SMP=y +CONFIG_INIT_ENV_ARG_LIMIT=32 +CONFIG_CROSS_COMPILE="" +CONFIG_LOCALVERSION="" +CONFIG_LOCALVERSION_AUTO=y +CONFIG_HAVE_KERNEL_GZIP=y +CONFIG_HAVE_KERNEL_BZIP2=y +CONFIG_HAVE_KERNEL_LZMA=y +CONFIG_HAVE_KERNEL_XZ=y +CONFIG_HAVE_KERNEL_LZO=y +CONFIG_KERNEL_GZIP=y +# CONFIG_KERNEL_BZIP2 is not set +# CONFIG_KERNEL_LZMA is not set +# CONFIG_KERNEL_XZ is not set +# CONFIG_KERNEL_LZO is not set +CONFIG_SWAP=y +CONFIG_SYSVIPC=y +CONFIG_SYSVIPC_SYSCTL=y +# CONFIG_POSIX_MQUEUE is not set +# CONFIG_BSD_PROCESS_ACCT is not set +# CONFIG_FHANDLE is not set +# CONFIG_TASKSTATS is not set +# CONFIG_AUDIT is not set +CONFIG_HAVE_GENERIC_HARDIRQS=y + +# +# IRQ subsystem +# +CONFIG_GENERIC_HARDIRQS=y +CONFIG_HAVE_SPARSE_IRQ=y +CONFIG_GENERIC_IRQ_SHOW=y +CONFIG_SPARSE_IRQ=y + +# +# RCU Subsystem +# +CONFIG_TINY_RCU=y +# CONFIG_PREEMPT_RCU is not set +# CONFIG_RCU_TRACE is not set +# CONFIG_TREE_RCU_TRACE is not set +CONFIG_IKCONFIG=y +CONFIG_IKCONFIG_PROC=y +CONFIG_LOG_BUF_SHIFT=14 +# CONFIG_CGROUPS is not set +# CONFIG_NAMESPACES is not set +# CONFIG_SCHED_AUTOGROUP is not set +CONFIG_SYSFS_DEPRECATED=y +CONFIG_SYSFS_DEPRECATED_V2=y +# CONFIG_RELAY is not set +CONFIG_BLK_DEV_INITRD=y +CONFIG_INITRAMFS_SOURCE="/home/neale/buildroot/output/images/rootfs.initramfs" +CONFIG_INITRAMFS_ROOT_UID=0 +CONFIG_INITRAMFS_ROOT_GID=0 +CONFIG_RD_GZIP=y +# CONFIG_RD_BZIP2 is not set +# CONFIG_RD_LZMA is not set +# CONFIG_RD_XZ is not set +# CONFIG_RD_LZO is not set +# CONFIG_INITRAMFS_COMPRESSION_NONE is not set +CONFIG_INITRAMFS_COMPRESSION_GZIP=y +# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set +CONFIG_SYSCTL=y +CONFIG_ANON_INODES=y +CONFIG_EXPERT=y +CONFIG_UID16=y +# CONFIG_SYSCTL_SYSCALL is not set +CONFIG_KALLSYMS=y +# CONFIG_KALLSYMS_EXTRA_PASS is not set +CONFIG_HOTPLUG=y +CONFIG_PRINTK=y +CONFIG_BUG=y +CONFIG_ELF_CORE=y +CONFIG_BASE_FULL=y +CONFIG_FUTEX=y +CONFIG_EPOLL=y +CONFIG_SIGNALFD=y +CONFIG_TIMERFD=y +CONFIG_EVENTFD=y +CONFIG_SHMEM=y +CONFIG_AIO=y +CONFIG_EMBEDDED=y +CONFIG_HAVE_PERF_EVENTS=y +CONFIG_PERF_USE_VMALLOC=y + +# +# Kernel Performance Events And Counters +# +CONFIG_PERF_EVENTS=y +# CONFIG_PERF_COUNTERS is not set +CONFIG_VM_EVENT_COUNTERS=y +CONFIG_PCI_QUIRKS=y +CONFIG_COMPAT_BRK=y +CONFIG_SLAB=y +# CONFIG_SLUB is not set +# CONFIG_SLOB is not set +CONFIG_PROFILING=y +CONFIG_OPROFILE=y +CONFIG_HAVE_OPROFILE=y +# CONFIG_KPROBES is not set +CONFIG_HAVE_IOREMAP_PROT=y +CONFIG_HAVE_KPROBES=y +CONFIG_HAVE_KRETPROBES=y +CONFIG_HAVE_ARCH_TRACEHOOK=y +CONFIG_HAVE_DMA_ATTRS=y +CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y +CONFIG_HAVE_CLK=y +CONFIG_HAVE_DMA_API_DEBUG=y +CONFIG_HAVE_HW_BREAKPOINT=y +CONFIG_HAVE_MIXED_BREAKPOINTS_REGS=y + +# +# GCOV-based kernel profiling +# +CONFIG_HAVE_GENERIC_DMA_COHERENT=y +CONFIG_SLABINFO=y +CONFIG_RT_MUTEXES=y +CONFIG_BASE_SMALL=0 +CONFIG_MODULES=y +# CONFIG_MODULE_FORCE_LOAD is not set +# CONFIG_MODULE_UNLOAD is not set +# CONFIG_MODVERSIONS is not set +# CONFIG_MODULE_SRCVERSION_ALL is not set +CONFIG_BLOCK=y +CONFIG_LBDAF=y +# CONFIG_BLK_DEV_BSG is not set +# CONFIG_BLK_DEV_INTEGRITY is not set + +# +# IO Schedulers +# +CONFIG_IOSCHED_NOOP=y +CONFIG_IOSCHED_DEADLINE=y +CONFIG_IOSCHED_CFQ=y +# CONFIG_DEFAULT_DEADLINE is not set +CONFIG_DEFAULT_CFQ=y +# CONFIG_DEFAULT_NOOP is not set +CONFIG_DEFAULT_IOSCHED="cfq" +# CONFIG_INLINE_SPIN_TRYLOCK is not set +# CONFIG_INLINE_SPIN_TRYLOCK_BH is not set +# CONFIG_INLINE_SPIN_LOCK is not set +# CONFIG_INLINE_SPIN_LOCK_BH is not set +# CONFIG_INLINE_SPIN_LOCK_IRQ is not set +# CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set +CONFIG_INLINE_SPIN_UNLOCK=y +# CONFIG_INLINE_SPIN_UNLOCK_BH is not set +CONFIG_INLINE_SPIN_UNLOCK_IRQ=y +# CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set +# CONFIG_INLINE_READ_TRYLOCK is not set +# CONFIG_INLINE_READ_LOCK is not set +# CONFIG_INLINE_READ_LOCK_BH is not set +# CONFIG_INLINE_READ_LOCK_IRQ is not set +# CONFIG_INLINE_READ_LOCK_IRQSAVE is not set +CONFIG_INLINE_READ_UNLOCK=y +# CONFIG_INLINE_READ_UNLOCK_BH is not set +CONFIG_INLINE_READ_UNLOCK_IRQ=y +# CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set +# CONFIG_INLINE_WRITE_TRYLOCK is not set +# CONFIG_INLINE_WRITE_LOCK is not set +# CONFIG_INLINE_WRITE_LOCK_BH is not set +# CONFIG_INLINE_WRITE_LOCK_IRQ is not set +# CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set +CONFIG_INLINE_WRITE_UNLOCK=y +# CONFIG_INLINE_WRITE_UNLOCK_BH is not set +CONFIG_INLINE_WRITE_UNLOCK_IRQ=y +# CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set +# CONFIG_MUTEX_SPIN_ON_OWNER is not set +# CONFIG_FREEZER is not set + +# +# System type +# +CONFIG_CPU_SH4=y +CONFIG_CPU_HAS_PMU=y +# CONFIG_CPU_SUBTYPE_SH7619 is not set +# CONFIG_CPU_SUBTYPE_SH7201 is not set +# CONFIG_CPU_SUBTYPE_SH7203 is not set +# CONFIG_CPU_SUBTYPE_SH7206 is not set +# CONFIG_CPU_SUBTYPE_SH7263 is not set +# CONFIG_CPU_SUBTYPE_MXG is not set +# CONFIG_CPU_SUBTYPE_SH7705 is not set +# CONFIG_CPU_SUBTYPE_SH7706 is not set +# CONFIG_CPU_SUBTYPE_SH7707 is not set +# CONFIG_CPU_SUBTYPE_SH7708 is not set +# CONFIG_CPU_SUBTYPE_SH7709 is not set +# CONFIG_CPU_SUBTYPE_SH7710 is not set +# CONFIG_CPU_SUBTYPE_SH7712 is not set +# CONFIG_CPU_SUBTYPE_SH7720 is not set +# CONFIG_CPU_SUBTYPE_SH7721 is not set +# CONFIG_CPU_SUBTYPE_SH7750 is not set +# CONFIG_CPU_SUBTYPE_SH7091 is not set +# CONFIG_CPU_SUBTYPE_SH7750R is not set +# CONFIG_CPU_SUBTYPE_SH7750S is not set +# CONFIG_CPU_SUBTYPE_SH7751 is not set +CONFIG_CPU_SUBTYPE_SH7751R=y +# CONFIG_CPU_SUBTYPE_SH7760 is not set +# CONFIG_CPU_SUBTYPE_SH4_202 is not set +# CONFIG_CPU_SUBTYPE_SH7723 is not set +# CONFIG_CPU_SUBTYPE_SH7724 is not set +# CONFIG_CPU_SUBTYPE_SH7757 is not set +# CONFIG_CPU_SUBTYPE_SH7763 is not set +# CONFIG_CPU_SUBTYPE_SH7770 is not set +# CONFIG_CPU_SUBTYPE_SH7780 is not set +# CONFIG_CPU_SUBTYPE_SH7785 is not set +# CONFIG_CPU_SUBTYPE_SH7786 is not set +# CONFIG_CPU_SUBTYPE_SHX3 is not set +# CONFIG_CPU_SUBTYPE_SH7343 is not set +# CONFIG_CPU_SUBTYPE_SH7722 is not set +# CONFIG_CPU_SUBTYPE_SH7366 is not set + +# +# Memory management options +# +CONFIG_QUICKLIST=y +CONFIG_MMU=y +CONFIG_PAGE_OFFSET=0x80000000 +CONFIG_FORCE_MAX_ZONEORDER=11 +CONFIG_MEMORY_START=0x0c000000 +CONFIG_MEMORY_SIZE=0x04000000 +CONFIG_29BIT=y +CONFIG_VSYSCALL=y +CONFIG_ARCH_FLATMEM_ENABLE=y +CONFIG_ARCH_SPARSEMEM_ENABLE=y +CONFIG_ARCH_SPARSEMEM_DEFAULT=y +CONFIG_MAX_ACTIVE_REGIONS=1 +CONFIG_ARCH_POPULATES_NODE_MAP=y +CONFIG_ARCH_SELECT_MEMORY_MODEL=y +CONFIG_UNCACHED_MAPPING=y +CONFIG_PAGE_SIZE_4KB=y +# CONFIG_PAGE_SIZE_64KB is not set +CONFIG_SELECT_MEMORY_MODEL=y +CONFIG_FLATMEM_MANUAL=y +# CONFIG_SPARSEMEM_MANUAL is not set +CONFIG_FLATMEM=y +CONFIG_FLAT_NODE_MEM_MAP=y +CONFIG_SPARSEMEM_STATIC=y +CONFIG_HAVE_MEMBLOCK=y +CONFIG_PAGEFLAGS_EXTENDED=y +CONFIG_SPLIT_PTLOCK_CPUS=4 +# CONFIG_COMPACTION is not set +# CONFIG_PHYS_ADDR_T_64BIT is not set +CONFIG_ZONE_DMA_FLAG=0 +CONFIG_NR_QUICK=1 +# CONFIG_KSM is not set +CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 +CONFIG_NEED_PER_CPU_KM=y + +# +# Cache configuration +# +CONFIG_CACHE_WRITEBACK=y +# CONFIG_CACHE_WRITETHROUGH is not set +# CONFIG_CACHE_OFF is not set + +# +# Processor features +# +CONFIG_CPU_LITTLE_ENDIAN=y +# CONFIG_CPU_BIG_ENDIAN is not set +CONFIG_SH_FPU=y +# CONFIG_SH_STORE_QUEUES is not set +CONFIG_CPU_HAS_INTEVT=y +CONFIG_CPU_HAS_SR_RB=y +CONFIG_CPU_HAS_FPU=y + +# +# Board support +# +# CONFIG_SH_SECUREEDGE5410 is not set +CONFIG_SH_RTS7751R2D=y +# CONFIG_SH_LANDISK is not set +# CONFIG_SH_TITAN is not set +# CONFIG_SH_LBOX_RE2 is not set + +# +# RTS7751R2D Board Revision +# +CONFIG_RTS7751R2D_PLUS=y +# CONFIG_RTS7751R2D_1 is not set + +# +# Timer and clock configuration +# +CONFIG_SH_TIMER_TMU=y +CONFIG_SH_PCLK_FREQ=60000000 +CONFIG_SH_CLK_CPG=y +CONFIG_SH_CLK_CPG_LEGACY=y +# CONFIG_NO_HZ is not set +# CONFIG_HIGH_RES_TIMERS is not set +CONFIG_GENERIC_CLOCKEVENTS_BUILD=y + +# +# CPU Frequency scaling +# +# CONFIG_CPU_FREQ is not set + +# +# DMA support +# +# CONFIG_SH_DMA is not set + +# +# Companion Chips +# + +# +# Additional SuperH Device Drivers +# +CONFIG_HEARTBEAT=y +# CONFIG_PUSH_SWITCH is not set + +# +# Kernel features +# +# CONFIG_HZ_100 is not set +CONFIG_HZ_250=y +# CONFIG_HZ_300 is not set +# CONFIG_HZ_1000 is not set +CONFIG_HZ=250 +# CONFIG_SCHED_HRTICK is not set +# CONFIG_KEXEC is not set +# CONFIG_CRASH_DUMP is not set +# CONFIG_SECCOMP is not set +CONFIG_PREEMPT_NONE=y +# CONFIG_PREEMPT_VOLUNTARY is not set +# CONFIG_PREEMPT is not set +CONFIG_GUSA=y +# CONFIG_GUSA_RB is not set +CONFIG_HW_PERF_EVENTS=y + +# +# SuperH / SH-Mobile Driver Options +# + +# +# Interrupt controller options +# + +# +# Boot options +# +CONFIG_ZERO_PAGE_OFFSET=0x00010000 +CONFIG_BOOT_LINK_OFFSET=0x00800000 +CONFIG_ENTRY_OFFSET=0x00001000 + +# +# Bus options +# +CONFIG_PCI=y +CONFIG_PCI_DOMAINS=y +# CONFIG_PCIEPORTBUS is not set +# CONFIG_ARCH_SUPPORTS_MSI is not set +# CONFIG_PCI_STUB is not set +# CONFIG_PCI_IOV is not set +# CONFIG_PCCARD is not set +# CONFIG_HOTPLUG_PCI is not set + +# +# Executable file formats +# +CONFIG_BINFMT_ELF=y +# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set +# CONFIG_HAVE_AOUT is not set +# CONFIG_BINFMT_MISC is not set + +# +# Power management options (EXPERIMENTAL) +# +# CONFIG_HIBERNATION is not set +# CONFIG_PM_RUNTIME is not set +# CONFIG_CPU_IDLE is not set +CONFIG_NET=y + +# +# Networking options +# +CONFIG_PACKET=y +CONFIG_UNIX=y +# CONFIG_NET_KEY is not set +CONFIG_INET=y +# CONFIG_IP_MULTICAST is not set +# CONFIG_IP_ADVANCED_ROUTER is not set +# CONFIG_IP_PNP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE_DEMUX is not set +# CONFIG_ARPD is not set +# CONFIG_SYN_COOKIES is not set +# CONFIG_INET_AH is not set +# CONFIG_INET_ESP is not set +# CONFIG_INET_IPCOMP is not set +# CONFIG_INET_XFRM_TUNNEL is not set +# CONFIG_INET_TUNNEL is not set +# CONFIG_INET_XFRM_MODE_TRANSPORT is not set +# CONFIG_INET_XFRM_MODE_TUNNEL is not set +# CONFIG_INET_XFRM_MODE_BEET is not set +# CONFIG_INET_LRO is not set +# CONFIG_INET_DIAG is not set +# CONFIG_TCP_CONG_ADVANCED is not set +CONFIG_TCP_CONG_CUBIC=y +CONFIG_DEFAULT_TCP_CONG="cubic" +# CONFIG_TCP_MD5SIG is not set +CONFIG_IPV6=y +# CONFIG_IPV6_PRIVACY is not set +# CONFIG_IPV6_ROUTER_PREF is not set +# CONFIG_IPV6_OPTIMISTIC_DAD is not set +# CONFIG_INET6_AH is not set +# CONFIG_INET6_ESP is not set +# CONFIG_INET6_IPCOMP is not set +# CONFIG_IPV6_MIP6 is not set +# CONFIG_INET6_XFRM_TUNNEL is not set +# CONFIG_INET6_TUNNEL is not set +# CONFIG_INET6_XFRM_MODE_TRANSPORT is not set +# CONFIG_INET6_XFRM_MODE_TUNNEL is not set +# CONFIG_INET6_XFRM_MODE_BEET is not set +# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set +# CONFIG_IPV6_SIT is not set +# CONFIG_IPV6_TUNNEL is not set +# CONFIG_IPV6_MULTIPLE_TABLES is not set +# CONFIG_IPV6_MROUTE is not set +# CONFIG_NETWORK_SECMARK is not set +# CONFIG_NETWORK_PHY_TIMESTAMPING is not set +# CONFIG_NETFILTER is not set +# CONFIG_IP_DCCP is not set +# CONFIG_IP_SCTP is not set +# CONFIG_RDS is not set +# CONFIG_TIPC is not set +# CONFIG_ATM is not set +# CONFIG_L2TP is not set +# CONFIG_BRIDGE is not set +# CONFIG_NET_DSA is not set +# CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set +# CONFIG_LLC2 is not set +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set +# CONFIG_PHONET is not set +# CONFIG_IEEE802154 is not set +# CONFIG_NET_SCHED is not set +# CONFIG_DCB is not set +# CONFIG_BATMAN_ADV is not set + +# +# Network testing +# +# CONFIG_NET_PKTGEN is not set +# CONFIG_HAMRADIO is not set +# CONFIG_CAN is not set +# CONFIG_IRDA is not set +# CONFIG_BT is not set +# CONFIG_AF_RXRPC is not set +# CONFIG_WIRELESS is not set +# CONFIG_WIMAX is not set +# CONFIG_RFKILL is not set +# CONFIG_NET_9P is not set +# CONFIG_CAIF is not set +# CONFIG_CEPH_LIB is not set + +# +# Device Drivers +# + +# +# Generic Driver Options +# +CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" +# CONFIG_DEVTMPFS is not set +CONFIG_STANDALONE=y +CONFIG_PREVENT_FIRMWARE_BUILD=y +CONFIG_FW_LOADER=m +CONFIG_FIRMWARE_IN_KERNEL=y +CONFIG_EXTRA_FIRMWARE="" +# CONFIG_SYS_HYPERVISOR is not set +CONFIG_ARCH_NO_SYSDEV_OPS=y +# CONFIG_CONNECTOR is not set +# CONFIG_MTD is not set +# CONFIG_PARPORT is not set +CONFIG_BLK_DEV=y +# CONFIG_BLK_CPQ_CISS_DA is not set +# CONFIG_BLK_DEV_DAC960 is not set +# CONFIG_BLK_DEV_UMEM is not set +# CONFIG_BLK_DEV_COW_COMMON is not set +# CONFIG_BLK_DEV_LOOP is not set + +# +# DRBD disabled because PROC_FS, INET or CONNECTOR not selected +# +# CONFIG_BLK_DEV_NBD is not set +# CONFIG_BLK_DEV_SX8 is not set +# CONFIG_BLK_DEV_UB is not set +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_COUNT=16 +CONFIG_BLK_DEV_RAM_SIZE=4096 +# CONFIG_BLK_DEV_XIP is not set +# CONFIG_CDROM_PKTCDVD is not set +# CONFIG_ATA_OVER_ETH is not set +# CONFIG_BLK_DEV_HD is not set +# CONFIG_BLK_DEV_RBD is not set +# CONFIG_SENSORS_LIS3LV02D is not set +CONFIG_MISC_DEVICES=y +# CONFIG_AD525X_DPOT is not set +# CONFIG_PHANTOM is not set +# CONFIG_SGI_IOC4 is not set +# CONFIG_TIFM_CORE is not set +# CONFIG_ENCLOSURE_SERVICES is not set +# CONFIG_HP_ILO is not set +# CONFIG_TI_DAC7512 is not set +# CONFIG_PCH_PHUB is not set +# CONFIG_C2PORT is not set + +# +# EEPROM support +# +# CONFIG_EEPROM_AT25 is not set +# CONFIG_EEPROM_93CX6 is not set +# CONFIG_CB710_CORE is not set + +# +# Texas Instruments shared transport line discipline +# +# CONFIG_SENSORS_LIS3_SPI is not set +CONFIG_HAVE_IDE=y +# CONFIG_IDE is not set + +# +# SCSI device support +# +CONFIG_SCSI_MOD=y +# CONFIG_RAID_ATTRS is not set +CONFIG_SCSI=y +CONFIG_SCSI_DMA=y +# CONFIG_SCSI_TGT is not set +# CONFIG_SCSI_NETLINK is not set +CONFIG_SCSI_PROC_FS=y + +# +# SCSI support type (disk, tape, CD-ROM) +# +CONFIG_BLK_DEV_SD=y +# CONFIG_CHR_DEV_ST is not set +# CONFIG_CHR_DEV_OSST is not set +# CONFIG_BLK_DEV_SR is not set +# CONFIG_CHR_DEV_SG is not set +# CONFIG_CHR_DEV_SCH is not set +# CONFIG_SCSI_MULTI_LUN is not set +# CONFIG_SCSI_CONSTANTS is not set +# CONFIG_SCSI_LOGGING is not set +# CONFIG_SCSI_SCAN_ASYNC is not set +CONFIG_SCSI_WAIT_SCAN=m + +# +# SCSI Transports +# +# CONFIG_SCSI_SPI_ATTRS is not set +# CONFIG_SCSI_FC_ATTRS is not set +# CONFIG_SCSI_ISCSI_ATTRS is not set +# CONFIG_SCSI_SAS_ATTRS is not set +# CONFIG_SCSI_SAS_LIBSAS is not set +# CONFIG_SCSI_SRP_ATTRS is not set +CONFIG_SCSI_LOWLEVEL=y +# CONFIG_ISCSI_TCP is not set +# CONFIG_ISCSI_BOOT_SYSFS is not set +# CONFIG_SCSI_CXGB3_ISCSI is not set +# CONFIG_SCSI_CXGB4_ISCSI is not set +# CONFIG_SCSI_BNX2_ISCSI is not set +# CONFIG_SCSI_BNX2X_FCOE is not set +# CONFIG_BE2ISCSI is not set +# CONFIG_BLK_DEV_3W_XXXX_RAID is not set +# CONFIG_SCSI_HPSA is not set +# CONFIG_SCSI_3W_9XXX is not set +# CONFIG_SCSI_3W_SAS is not set +# CONFIG_SCSI_ACARD is not set +# CONFIG_SCSI_AACRAID is not set +# CONFIG_SCSI_AIC7XXX is not set +# CONFIG_SCSI_AIC7XXX_OLD is not set +# CONFIG_SCSI_AIC79XX is not set +# CONFIG_SCSI_AIC94XX is not set +# CONFIG_SCSI_MVSAS is not set +# CONFIG_SCSI_ARCMSR is not set +# CONFIG_MEGARAID_NEWGEN is not set +# CONFIG_MEGARAID_LEGACY is not set +# CONFIG_MEGARAID_SAS is not set +# CONFIG_SCSI_MPT2SAS is not set +# CONFIG_SCSI_HPTIOP is not set +# CONFIG_LIBFC is not set +# CONFIG_LIBFCOE is not set +# CONFIG_FCOE is not set +# CONFIG_SCSI_DMX3191D is not set +# CONFIG_SCSI_FUTURE_DOMAIN is not set +# CONFIG_SCSI_IPS is not set +# CONFIG_SCSI_INITIO is not set +# CONFIG_SCSI_INIA100 is not set +# CONFIG_SCSI_STEX is not set +# CONFIG_SCSI_SYM53C8XX_2 is not set +# CONFIG_SCSI_IPR is not set +# CONFIG_SCSI_QLOGIC_1280 is not set +# CONFIG_SCSI_QLA_FC is not set +# CONFIG_SCSI_QLA_ISCSI is not set +# CONFIG_SCSI_LPFC is not set +# CONFIG_SCSI_DC395x is not set +# CONFIG_SCSI_DC390T is not set +# CONFIG_SCSI_NSP32 is not set +# CONFIG_SCSI_DEBUG is not set +# CONFIG_SCSI_PMCRAID is not set +# CONFIG_SCSI_PM8001 is not set +# CONFIG_SCSI_SRP is not set +# CONFIG_SCSI_BFA_FC is not set +# CONFIG_SCSI_DH is not set +# CONFIG_SCSI_OSD_INITIATOR is not set +CONFIG_ATA=y +# CONFIG_ATA_NONSTANDARD is not set +CONFIG_ATA_VERBOSE_ERROR=y +CONFIG_SATA_PMP=y + +# +# Controllers with non-SFF native interface +# +# CONFIG_SATA_AHCI is not set +# CONFIG_SATA_AHCI_PLATFORM is not set +# CONFIG_SATA_INIC162X is not set +# CONFIG_SATA_ACARD_AHCI is not set +# CONFIG_SATA_SIL24 is not set +CONFIG_ATA_SFF=y + +# +# SFF controllers with custom DMA interface +# +# CONFIG_PDC_ADMA is not set +# CONFIG_SATA_QSTOR is not set +# CONFIG_SATA_SX4 is not set +CONFIG_ATA_BMDMA=y + +# +# SATA SFF controllers with BMDMA +# +# CONFIG_ATA_PIIX is not set +# CONFIG_SATA_MV is not set +# CONFIG_SATA_NV is not set +# CONFIG_SATA_PROMISE is not set +# CONFIG_SATA_SIL is not set +# CONFIG_SATA_SIS is not set +# CONFIG_SATA_SVW is not set +# CONFIG_SATA_ULI is not set +# CONFIG_SATA_VIA is not set +# CONFIG_SATA_VITESSE is not set + +# +# PATA SFF controllers with BMDMA +# +# CONFIG_PATA_ALI is not set +# CONFIG_PATA_AMD is not set +# CONFIG_PATA_ARASAN_CF is not set +# CONFIG_PATA_ARTOP is not set +# CONFIG_PATA_ATIIXP is not set +# CONFIG_PATA_ATP867X is not set +# CONFIG_PATA_CMD64X is not set +# CONFIG_PATA_CS5520 is not set +# CONFIG_PATA_CS5530 is not set +# CONFIG_PATA_CS5536 is not set +# CONFIG_PATA_CYPRESS is not set +# CONFIG_PATA_EFAR is not set +# CONFIG_PATA_HPT366 is not set +# CONFIG_PATA_HPT37X is not set +# CONFIG_PATA_HPT3X2N is not set +# CONFIG_PATA_HPT3X3 is not set +# CONFIG_PATA_IT8213 is not set +# CONFIG_PATA_IT821X is not set +# CONFIG_PATA_JMICRON is not set +# CONFIG_PATA_MARVELL is not set +# CONFIG_PATA_NETCELL is not set +# CONFIG_PATA_NINJA32 is not set +# CONFIG_PATA_NS87415 is not set +# CONFIG_PATA_OLDPIIX is not set +# CONFIG_PATA_OPTIDMA is not set +# CONFIG_PATA_PDC2027X is not set +# CONFIG_PATA_PDC_OLD is not set +# CONFIG_PATA_RADISYS is not set +# CONFIG_PATA_RDC is not set +# CONFIG_PATA_SC1200 is not set +# CONFIG_PATA_SCH is not set +# CONFIG_PATA_SERVERWORKS is not set +# CONFIG_PATA_SIL680 is not set +# CONFIG_PATA_SIS is not set +# CONFIG_PATA_TOSHIBA is not set +# CONFIG_PATA_TRIFLEX is not set +# CONFIG_PATA_VIA is not set +# CONFIG_PATA_WINBOND is not set + +# +# PIO-only SFF controllers +# +# CONFIG_PATA_CMD640_PCI is not set +# CONFIG_PATA_MPIIX is not set +# CONFIG_PATA_NS87410 is not set +# CONFIG_PATA_OPTI is not set +CONFIG_PATA_PLATFORM=y +# CONFIG_PATA_RZ1000 is not set + +# +# Generic fallback / legacy drivers +# +# CONFIG_ATA_GENERIC is not set +# CONFIG_PATA_LEGACY is not set +# CONFIG_MD is not set +# CONFIG_TARGET_CORE is not set +# CONFIG_FUSION is not set + +# +# IEEE 1394 (FireWire) support +# +# CONFIG_FIREWIRE is not set +# CONFIG_FIREWIRE_NOSY is not set +# CONFIG_I2O is not set +CONFIG_NETDEVICES=y +# CONFIG_DUMMY is not set +# CONFIG_BONDING is not set +# CONFIG_MACVLAN is not set +# CONFIG_EQUALIZER is not set +# CONFIG_TUN is not set +# CONFIG_VETH is not set +# CONFIG_ARCNET is not set +CONFIG_MII=y +# CONFIG_PHYLIB is not set +CONFIG_NET_ETHERNET=y +# CONFIG_AX88796 is not set +# CONFIG_STNIC is not set +# CONFIG_HAPPYMEAL is not set +# CONFIG_SUNGEM is not set +# CONFIG_CASSINI is not set +# CONFIG_NET_VENDOR_3COM is not set +# CONFIG_SMC91X is not set +# CONFIG_ENC28J60 is not set +# CONFIG_ETHOC is not set +# CONFIG_SMC911X is not set +# CONFIG_SMSC911X is not set +# CONFIG_DNET is not set +# CONFIG_NET_TULIP is not set +# CONFIG_HP100 is not set +# CONFIG_IBM_NEW_EMAC_ZMII is not set +# CONFIG_IBM_NEW_EMAC_RGMII is not set +# CONFIG_IBM_NEW_EMAC_TAH is not set +# CONFIG_IBM_NEW_EMAC_EMAC4 is not set +# CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set +# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set +# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set +CONFIG_NET_PCI=y +# CONFIG_PCNET32 is not set +# CONFIG_AMD8111_ETH is not set +# CONFIG_ADAPTEC_STARFIRE is not set +# CONFIG_KSZ884X_PCI is not set +# CONFIG_B44 is not set +# CONFIG_FORCEDETH is not set +# CONFIG_E100 is not set +# CONFIG_FEALNX is not set +# CONFIG_NATSEMI is not set +# CONFIG_NE2K_PCI is not set +CONFIG_8139CP=y +CONFIG_8139TOO=y +# CONFIG_8139TOO_PIO is not set +# CONFIG_8139TOO_TUNE_TWISTER is not set +# CONFIG_8139TOO_8129 is not set +# CONFIG_8139_OLD_RX_RESET is not set +# CONFIG_R6040 is not set +# CONFIG_SIS900 is not set +# CONFIG_EPIC100 is not set +# CONFIG_SMSC9420 is not set +# CONFIG_SUNDANCE is not set +# CONFIG_TLAN is not set +# CONFIG_KS8851 is not set +# CONFIG_KS8851_MLL is not set +# CONFIG_VIA_RHINE is not set +# CONFIG_SC92031 is not set +# CONFIG_ATL2 is not set +# CONFIG_NETDEV_1000 is not set +# CONFIG_NETDEV_10000 is not set +# CONFIG_TR is not set +# CONFIG_WLAN is not set + +# +# Enable WiMAX (Networking options) to see the WiMAX drivers +# + +# +# USB Network Adapters +# +# CONFIG_USB_CATC is not set +# CONFIG_USB_KAWETH is not set +# CONFIG_USB_PEGASUS is not set +# CONFIG_USB_RTL8150 is not set +# CONFIG_USB_USBNET is not set +# CONFIG_USB_IPHETH is not set +# CONFIG_WAN is not set + +# +# CAIF transport drivers +# +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +# CONFIG_PPP is not set +# CONFIG_SLIP is not set +# CONFIG_NET_FC is not set +# CONFIG_NETCONSOLE is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_VMXNET3 is not set +# CONFIG_ISDN is not set +# CONFIG_PHONE is not set + +# +# Input device support +# +CONFIG_INPUT=y +CONFIG_INPUT_FF_MEMLESS=m +# CONFIG_INPUT_POLLDEV is not set +# CONFIG_INPUT_SPARSEKMAP is not set + +# +# Userland interfaces +# +# CONFIG_INPUT_MOUSEDEV is not set +# CONFIG_INPUT_JOYDEV is not set +# CONFIG_INPUT_EVDEV is not set +# CONFIG_INPUT_EVBUG is not set + +# +# Input Device Drivers +# +# CONFIG_INPUT_KEYBOARD is not set +# CONFIG_INPUT_MOUSE is not set +# CONFIG_INPUT_JOYSTICK is not set +# CONFIG_INPUT_TABLET is not set +# CONFIG_INPUT_TOUCHSCREEN is not set +# CONFIG_INPUT_MISC is not set + +# +# Hardware I/O ports +# +# CONFIG_SERIO is not set +# CONFIG_GAMEPORT is not set + +# +# Character devices +# +CONFIG_VT=y +CONFIG_CONSOLE_TRANSLATIONS=y +CONFIG_VT_CONSOLE=y +CONFIG_HW_CONSOLE=y +CONFIG_VT_HW_CONSOLE_BINDING=y +CONFIG_UNIX98_PTYS=y +# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set +CONFIG_LEGACY_PTYS=y +CONFIG_LEGACY_PTY_COUNT=256 +# CONFIG_SERIAL_NONSTANDARD is not set +# CONFIG_NOZOMI is not set +# CONFIG_N_GSM is not set +CONFIG_DEVKMEM=y + +# +# Serial drivers +# +CONFIG_SERIAL_8250=y +# CONFIG_SERIAL_8250_CONSOLE is not set +CONFIG_SERIAL_8250_PCI=y +CONFIG_SERIAL_8250_NR_UARTS=4 +CONFIG_SERIAL_8250_RUNTIME_UARTS=4 +# CONFIG_SERIAL_8250_EXTENDED is not set + +# +# Non-8250 serial port support +# +# CONFIG_SERIAL_MAX3100 is not set +# CONFIG_SERIAL_MAX3107 is not set +# CONFIG_SERIAL_MFD_HSU is not set +CONFIG_SERIAL_SH_SCI=y +CONFIG_SERIAL_SH_SCI_NR_UARTS=1 +CONFIG_SERIAL_SH_SCI_CONSOLE=y +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +# CONFIG_SERIAL_JSM is not set +# CONFIG_SERIAL_TIMBERDALE is not set +# CONFIG_SERIAL_ALTERA_JTAGUART is not set +# CONFIG_SERIAL_ALTERA_UART is not set +# CONFIG_SERIAL_PCH_UART is not set +# CONFIG_TTY_PRINTK is not set +# CONFIG_IPMI_HANDLER is not set +CONFIG_HW_RANDOM=y +# CONFIG_HW_RANDOM_TIMERIOMEM is not set +# CONFIG_R3964 is not set +# CONFIG_APPLICOM is not set +# CONFIG_RAW_DRIVER is not set +# CONFIG_TCG_TPM is not set +CONFIG_DEVPORT=y +# CONFIG_RAMOOPS is not set +# CONFIG_I2C is not set +CONFIG_SPI=y +CONFIG_SPI_MASTER=y + +# +# SPI Master Controller Drivers +# +# CONFIG_SPI_ALTERA is not set +CONFIG_SPI_BITBANG=y +# CONFIG_SPI_PXA2XX_PCI is not set +# CONFIG_SPI_SH_MSIOF is not set +# CONFIG_SPI_SH is not set +CONFIG_SPI_SH_SCI=y +# CONFIG_SPI_TOPCLIFF_PCH is not set +# CONFIG_SPI_XILINX is not set +# CONFIG_SPI_DESIGNWARE is not set + +# +# SPI Protocol Masters +# +# CONFIG_SPI_SPIDEV is not set +# CONFIG_SPI_TLE62X0 is not set + +# +# PPS support +# +# CONFIG_PPS is not set + +# +# PPS generators support +# +# CONFIG_W1 is not set +# CONFIG_POWER_SUPPLY is not set +# CONFIG_HWMON is not set +# CONFIG_THERMAL is not set +# CONFIG_WATCHDOG is not set +CONFIG_SSB_POSSIBLE=y + +# +# Sonics Silicon Backplane +# +# CONFIG_SSB is not set +CONFIG_MFD_SUPPORT=y +# CONFIG_MFD_CORE is not set +CONFIG_MFD_SM501=y +# CONFIG_HTC_PASIC3 is not set +# CONFIG_MFD_TMIO is not set +# CONFIG_MFD_WM831X_SPI is not set +# CONFIG_MFD_MC13XXX is not set +# CONFIG_ABX500_CORE is not set +# CONFIG_EZX_PCAP is not set +# CONFIG_LPC_SCH is not set +# CONFIG_MFD_RDC321X is not set +# CONFIG_MFD_JANZ_CMODIO is not set +# CONFIG_MFD_VX855 is not set +# CONFIG_REGULATOR is not set +# CONFIG_MEDIA_SUPPORT is not set + +# +# Graphics support +# +CONFIG_VGA_ARB=y +CONFIG_VGA_ARB_MAX_GPUS=16 +# CONFIG_DRM is not set +# CONFIG_STUB_POULSBO is not set +# CONFIG_VGASTATE is not set +CONFIG_VIDEO_OUTPUT_CONTROL=m +CONFIG_FB=y +# CONFIG_FIRMWARE_EDID is not set +# CONFIG_FB_DDC is not set +# CONFIG_FB_BOOT_VESA_SUPPORT is not set +CONFIG_FB_CFB_FILLRECT=y +CONFIG_FB_CFB_COPYAREA=y +CONFIG_FB_CFB_IMAGEBLIT=y +# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set +CONFIG_FB_SYS_FILLRECT=m +CONFIG_FB_SYS_COPYAREA=m +CONFIG_FB_SYS_IMAGEBLIT=m +# CONFIG_FB_FOREIGN_ENDIAN is not set +CONFIG_FB_SYS_FOPS=m +# CONFIG_FB_WMT_GE_ROPS is not set +CONFIG_FB_DEFERRED_IO=y +# CONFIG_FB_SVGALIB is not set +# CONFIG_FB_MACMODES is not set +CONFIG_FB_BACKLIGHT=y +CONFIG_FB_MODE_HELPERS=y +# CONFIG_FB_TILEBLITTING is not set + +# +# Frame buffer hardware drivers +# +# CONFIG_FB_CIRRUS is not set +# CONFIG_FB_PM2 is not set +# CONFIG_FB_CYBER2000 is not set +# CONFIG_FB_ASILIANT is not set +# CONFIG_FB_IMSTT is not set +# CONFIG_FB_S1D13XXX is not set +# CONFIG_FB_NVIDIA is not set +# CONFIG_FB_RIVA is not set +# CONFIG_FB_MATROX is not set +# CONFIG_FB_RADEON is not set +# CONFIG_FB_ATY128 is not set +# CONFIG_FB_ATY is not set +# CONFIG_FB_S3 is not set +# CONFIG_FB_SAVAGE is not set +# CONFIG_FB_SIS is not set +# CONFIG_FB_NEOMAGIC is not set +# CONFIG_FB_KYRO is not set +# CONFIG_FB_3DFX is not set +# CONFIG_FB_VOODOO1 is not set +# CONFIG_FB_VT8623 is not set +# CONFIG_FB_TRIDENT is not set +# CONFIG_FB_ARK is not set +# CONFIG_FB_PM3 is not set +# CONFIG_FB_CARMINE is not set +CONFIG_FB_SH_MOBILE_LCDC=m +CONFIG_FB_SH_MOBILE_HDMI=m +CONFIG_FB_SM501=y +# CONFIG_FB_UDL is not set +# CONFIG_FB_VIRTUAL is not set +# CONFIG_FB_METRONOME is not set +# CONFIG_FB_MB862XX is not set +# CONFIG_FB_BROADSHEET is not set +CONFIG_BACKLIGHT_LCD_SUPPORT=y +CONFIG_LCD_CLASS_DEVICE=m +# CONFIG_LCD_LTV350QV is not set +# CONFIG_LCD_TDO24M is not set +# CONFIG_LCD_VGG2432A4 is not set +# CONFIG_LCD_PLATFORM is not set +# CONFIG_LCD_S6E63M0 is not set +# CONFIG_LCD_LD9040 is not set +CONFIG_BACKLIGHT_CLASS_DEVICE=y +CONFIG_BACKLIGHT_GENERIC=y + +# +# Display device support +# +# CONFIG_DISPLAY_SUPPORT is not set + +# +# Console display driver support +# +CONFIG_DUMMY_CONSOLE=y +CONFIG_FRAMEBUFFER_CONSOLE=y +# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set +# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set +# CONFIG_FONTS is not set +CONFIG_FONT_8x8=y +CONFIG_FONT_8x16=y +CONFIG_LOGO=y +# CONFIG_LOGO_LINUX_MONO is not set +# CONFIG_LOGO_LINUX_VGA16 is not set +# CONFIG_LOGO_LINUX_CLUT224 is not set +# CONFIG_LOGO_SUPERH_MONO is not set +# CONFIG_LOGO_SUPERH_VGA16 is not set +CONFIG_LOGO_SUPERH_CLUT224=y +CONFIG_SOUND=m +# CONFIG_SOUND_OSS_CORE is not set +CONFIG_SND=m +CONFIG_SND_TIMER=m +CONFIG_SND_PCM=m +CONFIG_SND_JACK=y +# CONFIG_SND_SEQUENCER is not set +# CONFIG_SND_MIXER_OSS is not set +# CONFIG_SND_PCM_OSS is not set +# CONFIG_SND_DYNAMIC_MINORS is not set +CONFIG_SND_SUPPORT_OLD_API=y +CONFIG_SND_VERBOSE_PROCFS=y +# CONFIG_SND_VERBOSE_PRINTK is not set +# CONFIG_SND_DEBUG is not set +# CONFIG_SND_RAWMIDI_SEQ is not set +# CONFIG_SND_OPL3_LIB_SEQ is not set +# CONFIG_SND_OPL4_LIB_SEQ is not set +# CONFIG_SND_SBAWE_SEQ is not set +# CONFIG_SND_EMU10K1_SEQ is not set +CONFIG_SND_DRIVERS=y +# CONFIG_SND_DUMMY is not set +# CONFIG_SND_ALOOP is not set +# CONFIG_SND_MTPAV is not set +# CONFIG_SND_SERIAL_U16550 is not set +# CONFIG_SND_MPU401 is not set +CONFIG_SND_PCI=y +# CONFIG_SND_AD1889 is not set +# CONFIG_SND_ALS300 is not set +# CONFIG_SND_ALI5451 is not set +# CONFIG_SND_ATIIXP is not set +# CONFIG_SND_ATIIXP_MODEM is not set +# CONFIG_SND_AU8810 is not set +# CONFIG_SND_AU8820 is not set +# CONFIG_SND_AU8830 is not set +# CONFIG_SND_AW2 is not set +# CONFIG_SND_AZT3328 is not set +# CONFIG_SND_BT87X is not set +# CONFIG_SND_CA0106 is not set +# CONFIG_SND_CMIPCI is not set +# CONFIG_SND_OXYGEN is not set +# CONFIG_SND_CS4281 is not set +# CONFIG_SND_CS46XX is not set +# CONFIG_SND_CS5535AUDIO is not set +# CONFIG_SND_CTXFI is not set +# CONFIG_SND_DARLA20 is not set +# CONFIG_SND_GINA20 is not set +# CONFIG_SND_LAYLA20 is not set +# CONFIG_SND_DARLA24 is not set +# CONFIG_SND_GINA24 is not set +# CONFIG_SND_LAYLA24 is not set +# CONFIG_SND_MONA is not set +# CONFIG_SND_MIA is not set +# CONFIG_SND_ECHO3G is not set +# CONFIG_SND_INDIGO is not set +# CONFIG_SND_INDIGOIO is not set +# CONFIG_SND_INDIGODJ is not set +# CONFIG_SND_INDIGOIOX is not set +# CONFIG_SND_INDIGODJX is not set +# CONFIG_SND_EMU10K1 is not set +# CONFIG_SND_EMU10K1X is not set +# CONFIG_SND_ENS1370 is not set +# CONFIG_SND_ENS1371 is not set +# CONFIG_SND_ES1938 is not set +# CONFIG_SND_ES1968 is not set +# CONFIG_SND_FM801 is not set +# CONFIG_SND_HDA_INTEL is not set +# CONFIG_SND_HDSP is not set +# CONFIG_SND_HDSPM is not set +# CONFIG_SND_ICE1712 is not set +# CONFIG_SND_ICE1724 is not set +# CONFIG_SND_INTEL8X0 is not set +# CONFIG_SND_INTEL8X0M is not set +# CONFIG_SND_KORG1212 is not set +# CONFIG_SND_LX6464ES is not set +# CONFIG_SND_MAESTRO3 is not set +# CONFIG_SND_MIXART is not set +# CONFIG_SND_NM256 is not set +# CONFIG_SND_PCXHR is not set +# CONFIG_SND_RIPTIDE is not set +# CONFIG_SND_RME32 is not set +# CONFIG_SND_RME96 is not set +# CONFIG_SND_RME9652 is not set +# CONFIG_SND_SONICVIBES is not set +# CONFIG_SND_TRIDENT is not set +# CONFIG_SND_VIA82XX is not set +# CONFIG_SND_VIA82XX_MODEM is not set +# CONFIG_SND_VIRTUOSO is not set +# CONFIG_SND_VX222 is not set +# CONFIG_SND_YMFPCI is not set +CONFIG_SND_SPI=y +CONFIG_SND_SUPERH=y +CONFIG_SND_USB=y +# CONFIG_SND_USB_AUDIO is not set +# CONFIG_SND_USB_UA101 is not set +# CONFIG_SND_USB_CAIAQ is not set +# CONFIG_SND_USB_6FIRE is not set +CONFIG_SND_SOC=m +# CONFIG_SND_SOC_CACHE_LZO is not set + +# +# SoC Audio support for SuperH +# +# CONFIG_SND_SOC_SH4_FSI is not set +CONFIG_SND_SOC_I2C_AND_SPI=m +# CONFIG_SND_SOC_ALL_CODECS is not set +# CONFIG_SOUND_PRIME is not set +CONFIG_HID_SUPPORT=y +CONFIG_HID=y +# CONFIG_HIDRAW is not set + +# +# USB Input Devices +# +CONFIG_USB_HID=y +# CONFIG_HID_PID is not set +# CONFIG_USB_HIDDEV is not set + +# +# Special HID drivers +# +# CONFIG_HID_3M_PCT is not set +CONFIG_HID_A4TECH=y +# CONFIG_HID_ACRUX is not set +CONFIG_HID_APPLE=y +CONFIG_HID_BELKIN=y +# CONFIG_HID_CANDO is not set +CONFIG_HID_CHERRY=y +CONFIG_HID_CHICONY=y +# CONFIG_HID_PRODIKEYS is not set +CONFIG_HID_CYPRESS=y +# CONFIG_HID_DRAGONRISE is not set +# CONFIG_HID_EMS_FF is not set +CONFIG_HID_EZKEY=y +# CONFIG_HID_KEYTOUCH is not set +# CONFIG_HID_KYE is not set +# CONFIG_HID_UCLOGIC is not set +# CONFIG_HID_WALTOP is not set +CONFIG_HID_GYRATION=y +# CONFIG_HID_TWINHAN is not set +# CONFIG_HID_KENSINGTON is not set +# CONFIG_HID_LCPOWER is not set +CONFIG_HID_LOGITECH=y +# CONFIG_LOGITECH_FF is not set +# CONFIG_LOGIRUMBLEPAD2_FF is not set +# CONFIG_LOGIG940_FF is not set +# CONFIG_LOGIWII_FF is not set +CONFIG_HID_MICROSOFT=y +# CONFIG_HID_MOSART is not set +CONFIG_HID_MONTEREY=y +# CONFIG_HID_MULTITOUCH is not set +# CONFIG_HID_NTRIG is not set +# CONFIG_HID_ORTEK is not set +CONFIG_HID_PANTHERLORD=y +# CONFIG_PANTHERLORD_FF is not set +CONFIG_HID_PETALYNX=y +# CONFIG_HID_PICOLCD is not set +# CONFIG_HID_QUANTA is not set +# CONFIG_HID_ROCCAT is not set +# CONFIG_HID_ROCCAT_ARVO is not set +# CONFIG_HID_ROCCAT_KONE is not set +# CONFIG_HID_ROCCAT_KONEPLUS is not set +# CONFIG_HID_ROCCAT_KOVAPLUS is not set +# CONFIG_HID_ROCCAT_PYRA is not set +CONFIG_HID_SAMSUNG=y +CONFIG_HID_SONY=y +# CONFIG_HID_STANTUM is not set +CONFIG_HID_SUNPLUS=y +# CONFIG_HID_GREENASIA is not set +# CONFIG_HID_SMARTJOYPLUS is not set +# CONFIG_HID_TOPSEED is not set +# CONFIG_HID_THRUSTMASTER is not set +# CONFIG_HID_ZEROPLUS is not set +# CONFIG_HID_ZYDACRON is not set +CONFIG_USB_SUPPORT=y +CONFIG_USB_ARCH_HAS_HCD=y +CONFIG_USB_ARCH_HAS_OHCI=y +CONFIG_USB_ARCH_HAS_EHCI=y +CONFIG_USB=y +# CONFIG_USB_DEBUG is not set +CONFIG_USB_ANNOUNCE_NEW_DEVICES=y + +# +# Miscellaneous USB options +# +# CONFIG_USB_DEVICEFS is not set +CONFIG_USB_DEVICE_CLASS=y +# CONFIG_USB_DYNAMIC_MINORS is not set +# CONFIG_USB_OTG_WHITELIST is not set +# CONFIG_USB_OTG_BLACKLIST_HUB is not set +# CONFIG_USB_MON is not set +# CONFIG_USB_WUSB is not set +# CONFIG_USB_WUSB_CBAF is not set + +# +# USB Host Controller Drivers +# +# CONFIG_USB_C67X00_HCD is not set +# CONFIG_USB_XHCI_HCD is not set +# CONFIG_USB_EHCI_HCD is not set +# CONFIG_USB_OXU210HP_HCD is not set +# CONFIG_USB_ISP116X_HCD is not set +# CONFIG_USB_ISP1760_HCD is not set +# CONFIG_USB_ISP1362_HCD is not set +CONFIG_USB_OHCI_HCD=y +# CONFIG_USB_OHCI_SH is not set +# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set +# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set +CONFIG_USB_OHCI_LITTLE_ENDIAN=y +# CONFIG_USB_UHCI_HCD is not set +# CONFIG_USB_SL811_HCD is not set +# CONFIG_USB_R8A66597_HCD is not set +# CONFIG_USB_WHCI_HCD is not set +# CONFIG_USB_HWA_HCD is not set + +# +# USB Device Class drivers +# +# CONFIG_USB_ACM is not set +# CONFIG_USB_PRINTER is not set +# CONFIG_USB_WDM is not set +# CONFIG_USB_TMC is not set + +# +# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may +# + +# +# also be needed; see USB_STORAGE Help for more info +# +CONFIG_USB_STORAGE=y +# CONFIG_USB_STORAGE_DEBUG is not set +# CONFIG_USB_STORAGE_REALTEK is not set +# CONFIG_USB_STORAGE_DATAFAB is not set +# CONFIG_USB_STORAGE_FREECOM is not set +# CONFIG_USB_STORAGE_ISD200 is not set +# CONFIG_USB_STORAGE_USBAT is not set +# CONFIG_USB_STORAGE_SDDR09 is not set +# CONFIG_USB_STORAGE_SDDR55 is not set +# CONFIG_USB_STORAGE_JUMPSHOT is not set +# CONFIG_USB_STORAGE_ALAUDA is not set +# CONFIG_USB_STORAGE_ONETOUCH is not set +# CONFIG_USB_STORAGE_KARMA is not set +# CONFIG_USB_STORAGE_CYPRESS_ATACB is not set +# CONFIG_USB_STORAGE_ENE_UB6250 is not set +# CONFIG_USB_UAS is not set +CONFIG_USB_LIBUSUAL=y + +# +# USB Imaging devices +# +# CONFIG_USB_MDC800 is not set +# CONFIG_USB_MICROTEK is not set + +# +# USB port drivers +# +# CONFIG_USB_SERIAL is not set + +# +# USB Miscellaneous drivers +# +# CONFIG_USB_EMI62 is not set +# CONFIG_USB_EMI26 is not set +# CONFIG_USB_ADUTUX is not set +# CONFIG_USB_SEVSEG is not set +# CONFIG_USB_RIO500 is not set +# CONFIG_USB_LEGOTOWER is not set +# CONFIG_USB_LCD is not set +# CONFIG_USB_LED is not set +# CONFIG_USB_CYPRESS_CY7C63 is not set +# CONFIG_USB_CYTHERM is not set +# CONFIG_USB_IDMOUSE is not set +# CONFIG_USB_FTDI_ELAN is not set +# CONFIG_USB_APPLEDISPLAY is not set +# CONFIG_USB_LD is not set +# CONFIG_USB_TRANCEVIBRATOR is not set +# CONFIG_USB_IOWARRIOR is not set +# CONFIG_USB_TEST is not set +# CONFIG_USB_ISIGHTFW is not set +# CONFIG_USB_YUREX is not set +# CONFIG_USB_GADGET is not set + +# +# OTG and related infrastructure +# +# CONFIG_NOP_USB_XCEIV is not set +# CONFIG_UWB is not set +# CONFIG_MMC is not set +# CONFIG_MEMSTICK is not set +# CONFIG_NEW_LEDS is not set +# CONFIG_NFC_DEVICES is not set +# CONFIG_ACCESSIBILITY is not set +# CONFIG_INFINIBAND is not set +CONFIG_RTC_LIB=y +CONFIG_RTC_CLASS=y +CONFIG_RTC_HCTOSYS=y +CONFIG_RTC_HCTOSYS_DEVICE="rtc0" +# CONFIG_RTC_DEBUG is not set + +# +# RTC interfaces +# +CONFIG_RTC_INTF_SYSFS=y +CONFIG_RTC_INTF_PROC=y +CONFIG_RTC_INTF_DEV=y +# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set +# CONFIG_RTC_DRV_TEST is not set + +# +# SPI RTC drivers +# +# CONFIG_RTC_DRV_M41T94 is not set +# CONFIG_RTC_DRV_DS1305 is not set +# CONFIG_RTC_DRV_DS1390 is not set +# CONFIG_RTC_DRV_MAX6902 is not set +CONFIG_RTC_DRV_R9701=y +# CONFIG_RTC_DRV_RS5C348 is not set +# CONFIG_RTC_DRV_DS3234 is not set +# CONFIG_RTC_DRV_PCF2123 is not set + +# +# Platform RTC drivers +# +# CONFIG_RTC_DRV_DS1286 is not set +# CONFIG_RTC_DRV_DS1511 is not set +# CONFIG_RTC_DRV_DS1553 is not set +# CONFIG_RTC_DRV_DS1742 is not set +# CONFIG_RTC_DRV_STK17TA8 is not set +# CONFIG_RTC_DRV_M48T86 is not set +# CONFIG_RTC_DRV_M48T35 is not set +# CONFIG_RTC_DRV_M48T59 is not set +# CONFIG_RTC_DRV_MSM6242 is not set +# CONFIG_RTC_DRV_BQ4802 is not set +# CONFIG_RTC_DRV_RP5C01 is not set +# CONFIG_RTC_DRV_V3020 is not set + +# +# on-CPU RTC drivers +# +# CONFIG_RTC_DRV_SH is not set +# CONFIG_RTC_DRV_GENERIC is not set +# CONFIG_DMADEVICES is not set +# CONFIG_AUXDISPLAY is not set +# CONFIG_UIO is not set +# CONFIG_STAGING is not set +CONFIG_CLKDEV_LOOKUP=y + +# +# File systems +# +# CONFIG_EXT2_FS is not set +# CONFIG_EXT3_FS is not set +# CONFIG_EXT4_FS is not set +# CONFIG_REISERFS_FS is not set +# CONFIG_JFS_FS is not set +# CONFIG_XFS_FS is not set +# CONFIG_GFS2_FS is not set +# CONFIG_BTRFS_FS is not set +# CONFIG_NILFS2_FS is not set +# CONFIG_FS_POSIX_ACL is not set +CONFIG_FILE_LOCKING=y +CONFIG_FSNOTIFY=y +CONFIG_DNOTIFY=y +CONFIG_INOTIFY_USER=y +# CONFIG_FANOTIFY is not set +# CONFIG_QUOTA is not set +# CONFIG_QUOTACTL is not set +# CONFIG_AUTOFS4_FS is not set +# CONFIG_FUSE_FS is not set + +# +# Caches +# +# CONFIG_FSCACHE is not set + +# +# CD-ROM/DVD Filesystems +# +# CONFIG_ISO9660_FS is not set +# CONFIG_UDF_FS is not set + +# +# DOS/FAT/NT Filesystems +# +# CONFIG_MSDOS_FS is not set +# CONFIG_VFAT_FS is not set +# CONFIG_NTFS_FS is not set + +# +# Pseudo filesystems +# +CONFIG_PROC_FS=y +CONFIG_PROC_KCORE=y +CONFIG_PROC_SYSCTL=y +CONFIG_PROC_PAGE_MONITOR=y +CONFIG_SYSFS=y +CONFIG_TMPFS=y +# CONFIG_TMPFS_POSIX_ACL is not set +# CONFIG_HUGETLBFS is not set +# CONFIG_HUGETLB_PAGE is not set +# CONFIG_CONFIGFS_FS is not set +CONFIG_MISC_FILESYSTEMS=y +# CONFIG_ADFS_FS is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_HFSPLUS_FS is not set +# CONFIG_BEFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_EFS_FS is not set +# CONFIG_LOGFS is not set +# CONFIG_CRAMFS is not set +CONFIG_SQUASHFS=y +CONFIG_SQUASHFS_XATTR=y +CONFIG_SQUASHFS_LZO=y +# CONFIG_SQUASHFS_XZ is not set +# CONFIG_SQUASHFS_EMBEDDED is not set +CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3 +# CONFIG_VXFS_FS is not set +# CONFIG_MINIX_FS is not set +# CONFIG_MINIX_FS_NATIVE_ENDIAN is not set +# CONFIG_OMFS_FS is not set +# CONFIG_HPFS_FS is not set +# CONFIG_QNX4FS_FS is not set +# CONFIG_ROMFS_FS is not set +# CONFIG_PSTORE is not set +# CONFIG_SYSV_FS is not set +# CONFIG_UFS_FS is not set +# CONFIG_NETWORK_FILESYSTEMS is not set + +# +# Partition Types +# +# CONFIG_PARTITION_ADVANCED is not set +CONFIG_MSDOS_PARTITION=y +CONFIG_NLS=y +CONFIG_NLS_DEFAULT="iso8859-1" +# CONFIG_NLS_CODEPAGE_437 is not set +# CONFIG_NLS_CODEPAGE_737 is not set +# CONFIG_NLS_CODEPAGE_775 is not set +# CONFIG_NLS_CODEPAGE_850 is not set +# CONFIG_NLS_CODEPAGE_852 is not set +# CONFIG_NLS_CODEPAGE_855 is not set +# CONFIG_NLS_CODEPAGE_857 is not set +# CONFIG_NLS_CODEPAGE_860 is not set +# CONFIG_NLS_CODEPAGE_861 is not set +# CONFIG_NLS_CODEPAGE_862 is not set +# CONFIG_NLS_CODEPAGE_863 is not set +# CONFIG_NLS_CODEPAGE_864 is not set +# CONFIG_NLS_CODEPAGE_865 is not set +# CONFIG_NLS_CODEPAGE_866 is not set +# CONFIG_NLS_CODEPAGE_869 is not set +# CONFIG_NLS_CODEPAGE_936 is not set +# CONFIG_NLS_CODEPAGE_950 is not set +# CONFIG_NLS_CODEPAGE_932 is not set +# CONFIG_NLS_CODEPAGE_949 is not set +# CONFIG_NLS_CODEPAGE_874 is not set +# CONFIG_NLS_ISO8859_8 is not set +# CONFIG_NLS_CODEPAGE_1250 is not set +# CONFIG_NLS_CODEPAGE_1251 is not set +# CONFIG_NLS_ASCII is not set +# CONFIG_NLS_ISO8859_1 is not set +# CONFIG_NLS_ISO8859_2 is not set +# CONFIG_NLS_ISO8859_3 is not set +# CONFIG_NLS_ISO8859_4 is not set +# CONFIG_NLS_ISO8859_5 is not set +# CONFIG_NLS_ISO8859_6 is not set +# CONFIG_NLS_ISO8859_7 is not set +# CONFIG_NLS_ISO8859_9 is not set +# CONFIG_NLS_ISO8859_13 is not set +# CONFIG_NLS_ISO8859_14 is not set +# CONFIG_NLS_ISO8859_15 is not set +# CONFIG_NLS_KOI8_R is not set +# CONFIG_NLS_KOI8_U is not set +# CONFIG_NLS_UTF8 is not set + +# +# Kernel hacking +# +CONFIG_TRACE_IRQFLAGS_SUPPORT=y +# CONFIG_PRINTK_TIME is not set +CONFIG_DEFAULT_MESSAGE_LOGLEVEL=4 +# CONFIG_ENABLE_WARN_DEPRECATED is not set +# CONFIG_ENABLE_MUST_CHECK is not set +CONFIG_FRAME_WARN=1024 +# CONFIG_MAGIC_SYSRQ is not set +# CONFIG_STRIP_ASM_SYMS is not set +# CONFIG_UNUSED_SYMBOLS is not set +# CONFIG_DEBUG_FS is not set +# CONFIG_HEADERS_CHECK is not set +# CONFIG_DEBUG_SECTION_MISMATCH is not set +# CONFIG_DEBUG_KERNEL is not set +# CONFIG_HARDLOCKUP_DETECTOR is not set +# CONFIG_SPARSE_RCU_POINTER is not set +CONFIG_DEBUG_BUGVERBOSE=y +# CONFIG_DEBUG_MEMORY_INIT is not set +# CONFIG_SYSCTL_SYSCALL_CHECK is not set +CONFIG_HAVE_FUNCTION_TRACER=y +CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y +CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST=y +CONFIG_HAVE_DYNAMIC_FTRACE=y +CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y +CONFIG_HAVE_SYSCALL_TRACEPOINTS=y +CONFIG_RING_BUFFER=y +CONFIG_RING_BUFFER_ALLOW_SWAP=y +CONFIG_TRACING_SUPPORT=y +# CONFIG_FTRACE is not set +# CONFIG_DMA_API_DEBUG is not set +# CONFIG_ATOMIC64_SELFTEST is not set +# CONFIG_SAMPLES is not set +CONFIG_HAVE_ARCH_KGDB=y +# CONFIG_TEST_KSTRTOX is not set +# CONFIG_SH_STANDARD_BIOS is not set +# CONFIG_DWARF_UNWINDER is not set + +# +# Security options +# +# CONFIG_KEYS is not set +# CONFIG_SECURITY_DMESG_RESTRICT is not set +# CONFIG_SECURITY is not set +# CONFIG_SECURITYFS is not set +CONFIG_DEFAULT_SECURITY_DAC=y +CONFIG_DEFAULT_SECURITY="" +# CONFIG_CRYPTO is not set +# CONFIG_VIRTUALIZATION is not set +# CONFIG_BINARY_PRINTF is not set + +# +# Library routines +# +CONFIG_BITREVERSE=y +CONFIG_GENERIC_FIND_LAST_BIT=y +# CONFIG_CRC_CCITT is not set +# CONFIG_CRC16 is not set +# CONFIG_CRC_T10DIF is not set +# CONFIG_CRC_ITU_T is not set +CONFIG_CRC32=y +# CONFIG_CRC7 is not set +# CONFIG_LIBCRC32C is not set +CONFIG_ZLIB_INFLATE=y +CONFIG_LZO_DECOMPRESS=y +# CONFIG_XZ_DEC is not set +# CONFIG_XZ_DEC_BCJ is not set +CONFIG_DECOMPRESS_GZIP=y +CONFIG_HAS_IOMEM=y +CONFIG_HAS_IOPORT=y +CONFIG_HAS_DMA=y +CONFIG_NLATTR=y +CONFIG_GENERIC_ATOMIC64=y +# CONFIG_AVERAGE is not set diff --git a/sh4pwn/skeleton/etc/hosts b/sh4pwn/skeleton/etc/hosts new file mode 100644 index 0000000..ba712fe --- /dev/null +++ b/sh4pwn/skeleton/etc/hosts @@ -0,0 +1 @@ +127.0.0.1 localhost diff --git a/sh4pwn/skeleton/etc/issue b/sh4pwn/skeleton/etc/issue new file mode 100644 index 0000000..56f7582 --- /dev/null +++ b/sh4pwn/skeleton/etc/issue @@ -0,0 +1,2 @@ + o Dirtbags Tiny Linux +(m) diff --git a/sh4pwn/skeleton/etc/passwd b/sh4pwn/skeleton/etc/passwd new file mode 100644 index 0000000..bd59b18 --- /dev/null +++ b/sh4pwn/skeleton/etc/passwd @@ -0,0 +1 @@ +root::0:0:root:/tmp:/bin/sh diff --git a/sh4pwn/skeleton/etc/profile b/sh4pwn/skeleton/etc/profile new file mode 100644 index 0000000..531198c --- /dev/null +++ b/sh4pwn/skeleton/etc/profile @@ -0,0 +1,6 @@ +PATH=/bin +[ $USER = root ] && PATH=/sbin:/bin +for i in /opt/*/bin; do + [ -d $i ] && PATH=$i:$PATH +done +export PATH diff --git a/sh4pwn/skeleton/home/.empty b/sh4pwn/skeleton/home/.empty new file mode 100644 index 0000000..e69de29 diff --git a/sh4pwn/skeleton/mnt/.empty b/sh4pwn/skeleton/mnt/.empty new file mode 100644 index 0000000..e69de29 diff --git a/sh4pwn/skeleton/opt/.empty b/sh4pwn/skeleton/opt/.empty new file mode 100644 index 0000000..e69de29 diff --git a/sh4pwn/skeleton/proc/.empty b/sh4pwn/skeleton/proc/.empty new file mode 100644 index 0000000..e69de29 diff --git a/sh4pwn/skeleton/sbin/init b/sh4pwn/skeleton/sbin/init new file mode 100755 index 0000000..bd0cdc1 --- /dev/null +++ b/sh4pwn/skeleton/sbin/init @@ -0,0 +1,55 @@ +#! /bin/sh + +loudmount () { + echo -n " $3" + mount -t $1 $2 $3 +} + +sysctl () { + echo $2 > /proc/sys/$1 +} + +if [ $$ -ne 1 ]; then + echo "Perhaps you wanted poweroff, reboot, or halt?" + exit +fi + +echo -n "Mounting filesystems:" +loudmount proc proc /proc +loudmount sysfs sys /sys +loudmount tmpfs dev /dev + /sbin/mdev -s + mkdir /dev/pts +loudmount devpts pts /dev/pts +loudmount tmpfs tmp /tmp +loudmount tmpfs mnt /mnt +echo "." + +if grep -q noinit /proc/cmdline; then + exec /bin/sh +fi + +echo -n "Setting kernel parameters..." +sysctl kernel/hotplug /sbin/mdev +sysctl kernel/randomize_va_space 2 +sysctl kernel/hostname dbtl +sysctl kernel/ctrl-alt-del 0 +sysctl net/ipv4/tcp_syncookies 1 +echo " done." + +echo -n "Setting up /service..." +if ! mkrw /service; then + echo " failed! How embarassing!" + echo + echo "Er, sorry about that. Here's a shell, hopefully you" + echo "can sort things out. The machine will reboot when this shell" + echo "exits." + /bin/sh + busybox reboot -f +fi +echo " done." + +## Hand off to runit +exec runsvdir -P -s /sbin/runit-signal /service \ + 'log: ....................................................................................................................................' + diff --git a/sh4pwn/skeleton/sbin/mkrw b/sh4pwn/skeleton/sbin/mkrw new file mode 100755 index 0000000..e59f0d1 --- /dev/null +++ b/sh4pwn/skeleton/sbin/mkrw @@ -0,0 +1,17 @@ +#! /bin/sh -e + +if ! [ -d "$1" ]; then + echo "usage: $0 DIRECTORY" + echo + echo "Makes DIRECTORY a read/write tmpfs mount with the same" + echo "contents." + exit 1 +fi + +fsname=$(basename $1) +mkdir /tmp/$fsname +mount -t tmpfs $fsname /tmp/$fsname +(cd $1 && tar cf - .) | (cd /tmp/$fsname && tar xf -) +mount -o move /tmp/$fsname $1 +rmdir /tmp/$fsname + diff --git a/sh4pwn/skeleton/sbin/runit-signal b/sh4pwn/skeleton/sbin/runit-signal new file mode 100755 index 0000000..365fd28 --- /dev/null +++ b/sh4pwn/skeleton/sbin/runit-signal @@ -0,0 +1,69 @@ +#! /bin/sh + +## +## Signal handler for runit +## + +if [ $PPID != 1 ]; then + echo "This program should only be invoked by PID 1." + # The reason is that killall5 won't kill anything in the same + # process group. That means it won't kill your invoking shell, + # getty, or svrun. That in turn prevents filesystems from + # unmounting, or even being remounted ro, since svrun (at least) has + # a FIFO open for writes. And if we reboot without unmounting + # filesystems, that's bad. + + echo "Feel free to read $0 to learn why :)" + exit 1 +fi + +waitall () { + for i in $(seq 50); do + # If all processes are in group 0, we're done + awk '($5){exit 1;}' /proc/[0-9]*/stat && return 0 + usleep 200000 + done + return 1 +} + +cleanup () { + echo "Stopping services..." + sv stop /service/* + echo "Asking processes to exit..." + killall5 -HUP + killall5 -TERM + if waitall; then + echo "Forcing processes to exit..." + killall5 -KILL + waitall + fi + echo "Unmounting file systems..." + umount -a -r + + # Sometimes when we reach here we still haven't been able to umount + # everything. Not much more we can do about that, other than flush + # write buffers and hope for the best. + sync +} + +case $1 in + 1) # SIGHUP + ;; + 15) # SIGTERM: reboot + cleanup + echo "Rebooting..." + reboot -f + ;; + 10) # SIGUSR1: halt + cleanup + echo "Halting..." + halt -f + ;; + 12) # SIGUSR2: power + cleanup + echo "Shutting down..." + poweroff -f + ;; + *) # Everything else + ;; +esac diff --git a/sh4pwn/skeleton/sbin/udhcpc.script b/sh4pwn/skeleton/sbin/udhcpc.script new file mode 100755 index 0000000..a52a7f8 --- /dev/null +++ b/sh4pwn/skeleton/sbin/udhcpc.script @@ -0,0 +1,39 @@ +#!/bin/sh + +# udhcpc script edited by Tim Riker + +[ -z "$1" ] && echo "Error: should be called from udhcpc" && exit 1 + +RESOLV_CONF="/etc/resolv.conf" +[ -n "$broadcast" ] && BROADCAST="broadcast $broadcast" +[ -n "$subnet" ] && NETMASK="netmask $subnet" + +case "$1" in + deconfig) + /sbin/ifconfig $interface 0.0.0.0 + ;; + + renew|bound) + /sbin/ifconfig $interface $ip $BROADCAST $NETMASK + + if [ -n "$router" ] ; then + echo "deleting routers" + while route del default gw 0.0.0.0 dev $interface ; do + : + done + + for i in $router ; do + route add default gw $i dev $interface + done + fi + + echo -n > $RESOLV_CONF + [ -n "$domain" ] && echo search $domain >> $RESOLV_CONF + for i in $dns ; do + echo adding dns $i + echo nameserver $i >> $RESOLV_CONF + done + ;; +esac + +exit 0 diff --git a/sh4pwn/skeleton/service/eth0/finish b/sh4pwn/skeleton/service/eth0/finish new file mode 100755 index 0000000..2df9a20 --- /dev/null +++ b/sh4pwn/skeleton/service/eth0/finish @@ -0,0 +1,3 @@ +#! /bin/sh + +ip addr set dev eth0 down diff --git a/sh4pwn/skeleton/service/eth0/run b/sh4pwn/skeleton/service/eth0/run new file mode 100755 index 0000000..cf90a25 --- /dev/null +++ b/sh4pwn/skeleton/service/eth0/run @@ -0,0 +1,6 @@ +#! /bin/sh -e + +ip link set dev eth0 up + +exec inotifyd true $(pwd) + diff --git a/sh4pwn/skeleton/service/lo/finish b/sh4pwn/skeleton/service/lo/finish new file mode 100755 index 0000000..e69f864 --- /dev/null +++ b/sh4pwn/skeleton/service/lo/finish @@ -0,0 +1,3 @@ +#! /bin/sh + +ip link set dev lo down diff --git a/sh4pwn/skeleton/service/lo/run b/sh4pwn/skeleton/service/lo/run new file mode 100755 index 0000000..851964d --- /dev/null +++ b/sh4pwn/skeleton/service/lo/run @@ -0,0 +1,7 @@ +#! /bin/sh -e + +ip link set dev lo up +ip addr add 127.0.0.1/8 dev lo + +exec inotifyd true $(pwd) + diff --git a/sh4pwn/skeleton/service/telnetd/issue b/sh4pwn/skeleton/service/telnetd/issue new file mode 100644 index 0000000..b8f0a8f --- /dev/null +++ b/sh4pwn/skeleton/service/telnetd/issue @@ -0,0 +1,8 @@ + ""\/ \/"" + "\__/" A STAG PARTY YOU SAY ?!!?!?!? + (oo) +-. ______-LJ WELL OF COURSE I'D LOVE TO ATTEND + ,' | + |.____.. / SAY WHAT REPEAT THAT LAST PART ABOUT WHAT IT IS AGAIN + \\ /A\ + |A |// vir. pwn:xudap-tinak-kanex diff --git a/sh4pwn/skeleton/service/telnetd/run b/sh4pwn/skeleton/service/telnetd/run new file mode 100755 index 0000000..b560efc --- /dev/null +++ b/sh4pwn/skeleton/service/telnetd/run @@ -0,0 +1,3 @@ +#! /bin/sh + +exec tcpsvd :: 23 telnetd -f issue -l /bin/sh diff --git a/sh4pwn/skeleton/service/tty1/run b/sh4pwn/skeleton/service/tty1/run new file mode 100755 index 0000000..b9c3414 --- /dev/null +++ b/sh4pwn/skeleton/service/tty1/run @@ -0,0 +1,6 @@ +#! /bin/sh + +dev=/dev/$(basename $(pwd)) +test -c $dev || exit + +exec getty 38400 $dev diff --git a/sh4pwn/skeleton/service/tty2/run b/sh4pwn/skeleton/service/tty2/run new file mode 120000 index 0000000..603eb32 --- /dev/null +++ b/sh4pwn/skeleton/service/tty2/run @@ -0,0 +1 @@ +../tty1/run \ No newline at end of file diff --git a/sh4pwn/skeleton/service/tty3/run b/sh4pwn/skeleton/service/tty3/run new file mode 120000 index 0000000..603eb32 --- /dev/null +++ b/sh4pwn/skeleton/service/tty3/run @@ -0,0 +1 @@ +../tty1/run \ No newline at end of file diff --git a/sh4pwn/skeleton/service/tty4/run b/sh4pwn/skeleton/service/tty4/run new file mode 120000 index 0000000..603eb32 --- /dev/null +++ b/sh4pwn/skeleton/service/tty4/run @@ -0,0 +1 @@ +../tty1/run \ No newline at end of file diff --git a/sh4pwn/skeleton/sys/.empty b/sh4pwn/skeleton/sys/.empty new file mode 100644 index 0000000..e69de29 diff --git a/sh4pwn/skeleton/tmp/.empty b/sh4pwn/skeleton/tmp/.empty new file mode 100644 index 0000000..e69de29 diff --git a/sh4pwn/target_device_table.txt b/sh4pwn/target_device_table.txt new file mode 100644 index 0000000..d270eb5 --- /dev/null +++ b/sh4pwn/target_device_table.txt @@ -0,0 +1,42 @@ +# When building a target filesystem, it is desirable to not have to +# become root and then run 'mknod' a thousand times. Using a device +# table you can create device nodes and directories "on the fly". +# +# This is a sample device table file for use with genext2fs. You can +# do all sorts of interesting things with a device table file. For +# example, if you want to adjust the permissions on a particular file +# you can just add an entry like: +# /sbin/foobar f 2755 0 0 - - - - - +# and (assuming the file /sbin/foobar exists) it will be made setuid +# root (regardless of what its permissions are on the host filesystem. +# Furthermore, you can use a single table entry to create a many device +# minors. For example, if I wanted to create /dev/hda and /dev/hda[0-15] +# I could just use the following two table entries: +# /dev/hda b 640 0 0 3 0 0 0 - +# /dev/hda b 640 0 0 3 1 1 1 15 +# +# Device table entries take the form of: +# +# where name is the file name, type can be one of: +# f A regular file +# d Directory +# c Character special device file +# b Block special device file +# p Fifo (named pipe) +# uid is the user id for the target file, gid is the group id for the +# target file. The rest of the entries (major, minor, etc) apply only +# to device special files. + +# Have fun +# -Erik Andersen +# + +# +/dev d 755 0 0 - - - - - +/tmp d 1777 0 0 - - - - - +/bin/busybox f 4755 0 0 - - - - - +/etc/passwd f 644 0 0 - - - - - +/etc/shadow f 600 0 0 - - - - - +/dev/console c 666 0 0 5 1 - - - +/dev/null c 666 0 0 1 3 - - - +/dev/zero c 666 0 0 1 5 - - - From 22bd672960058d3db3643de2553ed52644e9c9b9 Mon Sep 17 00:00:00 2001 From: "Cherish A. Franco" Date: Tue, 11 Oct 2011 15:54:52 -0600 Subject: [PATCH 24/36] Working on that server again, Now it does more stuff, er, more address getting. ~Cherish --- packages/multicaster/src/multicaster-server.c | 196 +++++++++++++----- 1 file changed, 147 insertions(+), 49 deletions(-) diff --git a/packages/multicaster/src/multicaster-server.c b/packages/multicaster/src/multicaster-server.c index 830ec3b..a1b3507 100644 --- a/packages/multicaster/src/multicaster-server.c +++ b/packages/multicaster/src/multicaster-server.c @@ -3,69 +3,167 @@ * found at http://cboard.cprogramming.com/showthread.php?t=67469 */ -#include /* for fprintf() */ -#include -#include #include -#include /* for atoi() and exit() */ -#include +#include +#include #include +#include +#include +#include +#include +#include static void DieWithError(const char* errorMessage) { - fprintf(stderr, "%s\n", errorMessage); - exit(10); + fprintf(stderr, "%s\n", errorMessage); + exit(10); } int main(int argc, char *argv[]) { - int sock; /* Socket */ - char* multicastIP; /* Arg: IP Multicast address */ - char* multicastPort; /* Arg: Server port */ - char* sendString; /* Arg: String to multicast */ - size_t sendStringLen; /* Length of string to multicast */ - struct addrinfo * multicastAddr; /* Multicast address */ - struct addrinfo hints = { 0 }; /* Hints for name lookup */ + int sender, listener; /* Sockets */ + char* multicastIP; /* Arg: IP Multicast address */ + char* multicastPort; /* Arg: Server port */ + char* token; + size_t tokenlen; + struct addrinfo * multicastAddr; /* Multicast address */ + struct addrinfo hints = { 0 }; /* Hints for name lookup */ - if ( argc != 4 ) - { - fprintf(stderr, "Usage: %s \n", argv[0]); - exit(10); - } + if (argc != 4) + { + fprintf(stderr, "Usage: %s \n", argv[0]); + exit(10); + } - multicastIP = argv[1]; /* First arg: multicast IP address */ - multicastPort = argv[2]; /* Second arg: multicast port */ - sendString = argv[3]; /* Third arg: String to multicast */ - sendStringLen = strlen(sendString); /* Find length of sendString */ + multicastIP = argv[1]; /* First arg: multicast IP address */ + multicastPort = argv[2]; /* Second arg: multicast port */ + token = argv[3]; + tokenlen = strlen(token); - /* Resolve destination address for multicast datagrams */ - hints.ai_family = PF_INET6; - hints.ai_socktype = SOCK_DGRAM; - hints.ai_flags = AI_NUMERICHOST; - if (getaddrinfo(multicastIP, multicastPort, &hints, &multicastAddr) != 0) DieWithError("getaddrinfo() failed"); + /* Resolve destination address for multicast datagrams */ + hints.ai_family = PF_INET6; + hints.ai_socktype = SOCK_DGRAM; + hints.ai_flags = AI_NUMERICHOST; - /* Create socket for sending multicast datagrams */ - if ((sock = socket(multicastAddr->ai_family, multicastAddr->ai_socktype, 0)) == -1) DieWithError("socket() failed"); + if (getaddrinfo(multicastIP, multicastPort, &hints, &multicastAddr) != 0) + { + DieWithError("getaddrinfo() failed"); + } - int hops = 5; - if (setsockopt(sock, IPPROTO_IPV6, IPV6_MULTICAST_HOPS, &hops, sizeof(hops)) != 0) DieWithError("setsockopt(MULTICAST_HOPS) failed"); + /* Create socket for sending multicast datagrams */ + if ((sender = socket(multicastAddr->ai_family, multicastAddr->ai_socktype, 0)) == -1) + { + DieWithError("socket() failed"); + } - for (;;) /* Run forever */ - { - int sendLen = sendto(sock, sendString, sendStringLen, 0, multicastAddr->ai_addr, multicastAddr->ai_addrlen); - if (sendLen == sendStringLen ) - { - printf("Sent [%s] (%i bytes) to %s, port %s\n", sendString, sendLen, multicastIP, multicastPort); - } - else - { - DieWithError("sendto() sent a different number of bytes than expected"); - } - sleep(1); /* Multicast sendString in datagram to clients every second */ - } + /* Create socket for recieving multicast datagrams */ + if ((listener = socket(multicastAddr->ai_family, multicastAddr->ai_socktype, 0)) == -1) + { + DieWithError("socket() failed"); + } - /* NOT REACHED */ - freeaddrinfo(multicastAddr); - close(sock); - return 0; + { + int hops = 5; + if (setsockopt(sender, IPPROTO_IPV6, IPV6_MULTICAST_HOPS, &hops, sizeof(hops)) != 0) + { + DieWithError("setsockopt(MULTICAST_HOPS) failed"); + } + } + + /* Join the multicast group. */ + if ((multicastAddr->ai_family == PF_INET6)&&(multicastAddr->ai_addrlen == sizeof(struct sockaddr_in6))) + { + struct sockaddr_in6 *addr = (struct sockaddr_in6 *)(multicastAddr->ai_addr); + struct ipv6_mreq multicastRequest; /* Multicast address join structure */ + + /* Specify the multicast group */ + memcpy(&multicastRequest.ipv6mr_multiaddr, &(addr)->sin6_addr, sizeof(multicastRequest.ipv6mr_multiaddr)); + + /* Accept multicast from any interface */ + multicastRequest.ipv6mr_interface = addr->sin6_scope_id; + + /* Join the multicast address */ + if (setsockopt(listener, IPPROTO_IPV6, IPV6_JOIN_GROUP, (char*) &multicastRequest, sizeof(multicastRequest)) != 0) + { + DieWithError("setsockopt(IPV6_JOIN_GROUP) failed"); + } + } else { + DieWithError("Not IPv6"); + } + + for (;;) /* Run forever */ + { + int n; + int max_fd; + struct timeval timeout; + fd_set input; + + char recvString[500]; /* Buffer for received string */ + int recvStringLen; /* Length of received string */ + + char sendString[] = "Say Hello\n"; + size_t sendStringLen = sizeof(sendString)-1; + char errorString[] = "That is not correct! Try again!\n"; + + struct sockaddr_in6 from; + socklen_t fromlen = sizeof(from); + + FD_ZERO(&input); + FD_SET(listener, &input); + + max_fd = listener + 1; + + timeout.tv_sec = 1; + timeout.tv_usec = 0; + + n = select(max_fd, &input, NULL, NULL, &timeout); + + /* See if there was an error */ + if (n < 0) + { + perror("select failed"); + } else if (n == 0) { + puts("TIMEOUT"); + } else { + if (FD_ISSET(listener, &input)) + { + recvStringLen = recvfrom(listener, recvString, sizeof(recvString) - 1, 0, + (struct sockaddr *)&from, &fromlen); + /* Receive a single datagram from the server */ + if (recvStringLen < 0) + { + DieWithError("recvfrom() failed"); + } + + recvString[recvStringLen] = '\0'; + if (strcmp(recvString, "hello")==0) + { + printf("Correct!!\n"); + sendto(listener, token, sizeof(sendString), 0, (struct sockaddr *)&from, fromlen); + } else { + sendto(listener, errorString, sizeof(errorString), 0, (struct sockaddr *)&from, fromlen); + } + + /* Print the received string */ + printf("Received string [%s]\n", recvString); + } + } + + int sendLen = sendto(sender, sendString, sendStringLen, 0, multicastAddr->ai_addr, + multicastAddr->ai_addrlen); + if (sendLen == sendStringLen) + { + printf("Sent [%s] (%i bytes) to %s, port %s\n", sendString, sendLen, + multicastIP, multicastPort); + } else { + DieWithError("sendto() sent a different number of bytes than expected"); + } + } + + /* NOT REACHED */ + freeaddrinfo(multicastAddr); + close(sender); + close(listener); + + return 0; } From 59392e54d803c9d5067a35ae8fd78d2baf5e3768 Mon Sep 17 00:00:00 2001 From: "Cherish A. Franco" Date: Tue, 11 Oct 2011 16:02:51 -0600 Subject: [PATCH 25/36] Fixing those stupid exit(10); things. ~Cherish --- packages/multicaster/src/multicaster-server.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/multicaster/src/multicaster-server.c b/packages/multicaster/src/multicaster-server.c index a1b3507..799e5ad 100644 --- a/packages/multicaster/src/multicaster-server.c +++ b/packages/multicaster/src/multicaster-server.c @@ -16,7 +16,7 @@ static void DieWithError(const char* errorMessage) { fprintf(stderr, "%s\n", errorMessage); - exit(10); + exit(1); } int main(int argc, char *argv[]) @@ -32,7 +32,7 @@ int main(int argc, char *argv[]) if (argc != 4) { fprintf(stderr, "Usage: %s \n", argv[0]); - exit(10); + exit(1); } multicastIP = argv[1]; /* First arg: multicast IP address */ From f3eb4e43e08065aed2efb5f36012262a17dbc2f7 Mon Sep 17 00:00:00 2001 From: "Cherish A. Franco" Date: Tue, 11 Oct 2011 17:14:19 -0600 Subject: [PATCH 26/36] Done with AWESOME server I think! ~Cherish --- packages/multicaster/src/multicaster-server.c | 196 +++++------------- .../src/multicaster-serverAWESOME.c | 178 ++++++++++++++++ 2 files changed, 227 insertions(+), 147 deletions(-) create mode 100644 packages/multicaster/src/multicaster-serverAWESOME.c diff --git a/packages/multicaster/src/multicaster-server.c b/packages/multicaster/src/multicaster-server.c index 799e5ad..830ec3b 100644 --- a/packages/multicaster/src/multicaster-server.c +++ b/packages/multicaster/src/multicaster-server.c @@ -3,167 +3,69 @@ * found at http://cboard.cprogramming.com/showthread.php?t=67469 */ -#include -#include -#include -#include -#include -#include +#include /* for fprintf() */ #include -#include +#include +#include +#include /* for atoi() and exit() */ #include +#include static void DieWithError(const char* errorMessage) { - fprintf(stderr, "%s\n", errorMessage); - exit(1); + fprintf(stderr, "%s\n", errorMessage); + exit(10); } int main(int argc, char *argv[]) { - int sender, listener; /* Sockets */ - char* multicastIP; /* Arg: IP Multicast address */ - char* multicastPort; /* Arg: Server port */ - char* token; - size_t tokenlen; - struct addrinfo * multicastAddr; /* Multicast address */ - struct addrinfo hints = { 0 }; /* Hints for name lookup */ + int sock; /* Socket */ + char* multicastIP; /* Arg: IP Multicast address */ + char* multicastPort; /* Arg: Server port */ + char* sendString; /* Arg: String to multicast */ + size_t sendStringLen; /* Length of string to multicast */ + struct addrinfo * multicastAddr; /* Multicast address */ + struct addrinfo hints = { 0 }; /* Hints for name lookup */ - if (argc != 4) - { - fprintf(stderr, "Usage: %s \n", argv[0]); - exit(1); - } + if ( argc != 4 ) + { + fprintf(stderr, "Usage: %s \n", argv[0]); + exit(10); + } - multicastIP = argv[1]; /* First arg: multicast IP address */ - multicastPort = argv[2]; /* Second arg: multicast port */ - token = argv[3]; - tokenlen = strlen(token); + multicastIP = argv[1]; /* First arg: multicast IP address */ + multicastPort = argv[2]; /* Second arg: multicast port */ + sendString = argv[3]; /* Third arg: String to multicast */ + sendStringLen = strlen(sendString); /* Find length of sendString */ - /* Resolve destination address for multicast datagrams */ - hints.ai_family = PF_INET6; - hints.ai_socktype = SOCK_DGRAM; - hints.ai_flags = AI_NUMERICHOST; + /* Resolve destination address for multicast datagrams */ + hints.ai_family = PF_INET6; + hints.ai_socktype = SOCK_DGRAM; + hints.ai_flags = AI_NUMERICHOST; + if (getaddrinfo(multicastIP, multicastPort, &hints, &multicastAddr) != 0) DieWithError("getaddrinfo() failed"); - if (getaddrinfo(multicastIP, multicastPort, &hints, &multicastAddr) != 0) - { - DieWithError("getaddrinfo() failed"); - } + /* Create socket for sending multicast datagrams */ + if ((sock = socket(multicastAddr->ai_family, multicastAddr->ai_socktype, 0)) == -1) DieWithError("socket() failed"); - /* Create socket for sending multicast datagrams */ - if ((sender = socket(multicastAddr->ai_family, multicastAddr->ai_socktype, 0)) == -1) - { - DieWithError("socket() failed"); - } + int hops = 5; + if (setsockopt(sock, IPPROTO_IPV6, IPV6_MULTICAST_HOPS, &hops, sizeof(hops)) != 0) DieWithError("setsockopt(MULTICAST_HOPS) failed"); - /* Create socket for recieving multicast datagrams */ - if ((listener = socket(multicastAddr->ai_family, multicastAddr->ai_socktype, 0)) == -1) - { - DieWithError("socket() failed"); - } + for (;;) /* Run forever */ + { + int sendLen = sendto(sock, sendString, sendStringLen, 0, multicastAddr->ai_addr, multicastAddr->ai_addrlen); + if (sendLen == sendStringLen ) + { + printf("Sent [%s] (%i bytes) to %s, port %s\n", sendString, sendLen, multicastIP, multicastPort); + } + else + { + DieWithError("sendto() sent a different number of bytes than expected"); + } + sleep(1); /* Multicast sendString in datagram to clients every second */ + } - { - int hops = 5; - if (setsockopt(sender, IPPROTO_IPV6, IPV6_MULTICAST_HOPS, &hops, sizeof(hops)) != 0) - { - DieWithError("setsockopt(MULTICAST_HOPS) failed"); - } - } - - /* Join the multicast group. */ - if ((multicastAddr->ai_family == PF_INET6)&&(multicastAddr->ai_addrlen == sizeof(struct sockaddr_in6))) - { - struct sockaddr_in6 *addr = (struct sockaddr_in6 *)(multicastAddr->ai_addr); - struct ipv6_mreq multicastRequest; /* Multicast address join structure */ - - /* Specify the multicast group */ - memcpy(&multicastRequest.ipv6mr_multiaddr, &(addr)->sin6_addr, sizeof(multicastRequest.ipv6mr_multiaddr)); - - /* Accept multicast from any interface */ - multicastRequest.ipv6mr_interface = addr->sin6_scope_id; - - /* Join the multicast address */ - if (setsockopt(listener, IPPROTO_IPV6, IPV6_JOIN_GROUP, (char*) &multicastRequest, sizeof(multicastRequest)) != 0) - { - DieWithError("setsockopt(IPV6_JOIN_GROUP) failed"); - } - } else { - DieWithError("Not IPv6"); - } - - for (;;) /* Run forever */ - { - int n; - int max_fd; - struct timeval timeout; - fd_set input; - - char recvString[500]; /* Buffer for received string */ - int recvStringLen; /* Length of received string */ - - char sendString[] = "Say Hello\n"; - size_t sendStringLen = sizeof(sendString)-1; - char errorString[] = "That is not correct! Try again!\n"; - - struct sockaddr_in6 from; - socklen_t fromlen = sizeof(from); - - FD_ZERO(&input); - FD_SET(listener, &input); - - max_fd = listener + 1; - - timeout.tv_sec = 1; - timeout.tv_usec = 0; - - n = select(max_fd, &input, NULL, NULL, &timeout); - - /* See if there was an error */ - if (n < 0) - { - perror("select failed"); - } else if (n == 0) { - puts("TIMEOUT"); - } else { - if (FD_ISSET(listener, &input)) - { - recvStringLen = recvfrom(listener, recvString, sizeof(recvString) - 1, 0, - (struct sockaddr *)&from, &fromlen); - /* Receive a single datagram from the server */ - if (recvStringLen < 0) - { - DieWithError("recvfrom() failed"); - } - - recvString[recvStringLen] = '\0'; - if (strcmp(recvString, "hello")==0) - { - printf("Correct!!\n"); - sendto(listener, token, sizeof(sendString), 0, (struct sockaddr *)&from, fromlen); - } else { - sendto(listener, errorString, sizeof(errorString), 0, (struct sockaddr *)&from, fromlen); - } - - /* Print the received string */ - printf("Received string [%s]\n", recvString); - } - } - - int sendLen = sendto(sender, sendString, sendStringLen, 0, multicastAddr->ai_addr, - multicastAddr->ai_addrlen); - if (sendLen == sendStringLen) - { - printf("Sent [%s] (%i bytes) to %s, port %s\n", sendString, sendLen, - multicastIP, multicastPort); - } else { - DieWithError("sendto() sent a different number of bytes than expected"); - } - } - - /* NOT REACHED */ - freeaddrinfo(multicastAddr); - close(sender); - close(listener); - - return 0; + /* NOT REACHED */ + freeaddrinfo(multicastAddr); + close(sock); + return 0; } diff --git a/packages/multicaster/src/multicaster-serverAWESOME.c b/packages/multicaster/src/multicaster-serverAWESOME.c new file mode 100644 index 0000000..d8b69d0 --- /dev/null +++ b/packages/multicaster/src/multicaster-serverAWESOME.c @@ -0,0 +1,178 @@ +/* multicast_server.c + * Adapted from tmouse's IPv6 client/server example code + * found at http://cboard.cprogramming.com/showthread.php?t=67469 + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +static void DieWithError(const char* errorMessage) +{ + fprintf(stderr, "%s\n", errorMessage); + exit(1); +} + +int main(int argc, char *argv[]) +{ + int sender, listener; /* Sockets */ + char* multicastIP; /* Arg: IP Multicast address */ + char* multicastPort; /* Arg: Server port */ + char* token; + size_t tokenlen; + struct addrinfo * multicastAddr; /* Multicast address */ + struct addrinfo hints = { 0 }; /* Hints for name lookup */ + struct timeval timeout = { 0 }; + + if (argc != 4) + { + fprintf(stderr, "Usage: %s \n", argv[0]); + exit(1); + } + + multicastIP = argv[1]; /* First arg: multicast IP address */ + multicastPort = argv[2]; /* Second arg: multicast port */ + token = argv[3]; + tokenlen = strlen(token); + + /* Resolve destination address for multicast datagrams */ + hints.ai_family = PF_INET6; + hints.ai_socktype = SOCK_DGRAM; + hints.ai_flags = AI_NUMERICHOST; + + if (getaddrinfo(multicastIP, multicastPort, &hints, &multicastAddr) != 0) + { + DieWithError("getaddrinfo() failed"); + } + + /* Create socket for sending multicast datagrams */ + if ((sender = socket(multicastAddr->ai_family, multicastAddr->ai_socktype, 0)) == -1) + { + DieWithError("socket() failed"); + } + + /* Create socket for recieving multicast datagrams */ + if ((listener = socket(multicastAddr->ai_family, multicastAddr->ai_socktype, 0)) == -1) + { + DieWithError("socket() failed"); + } + + { + int hops = 5; + if (setsockopt(sender, IPPROTO_IPV6, IPV6_MULTICAST_HOPS, &hops, sizeof(hops)) != 0) + { + DieWithError("setsockopt(MULTICAST_HOPS) failed"); + } + } + + /* Bind to the multicast port */ + if (bind(listener, multicastAddr->ai_addr, multicastAddr->ai_addrlen) != 0) + { + DieWithError("bind() failed"); + } + + /* Join the multicast group. */ + if ((multicastAddr->ai_family == PF_INET6)&&(multicastAddr->ai_addrlen == sizeof(struct sockaddr_in6))) + { + struct sockaddr_in6 *addr = (struct sockaddr_in6 *)(multicastAddr->ai_addr); + struct ipv6_mreq multicastRequest; /* Multicast address join structure */ + + /* Specify the multicast group */ + memcpy(&multicastRequest.ipv6mr_multiaddr, &(addr)->sin6_addr, sizeof(multicastRequest.ipv6mr_multiaddr)); + + /* Accept multicast from any interface */ + multicastRequest.ipv6mr_interface = addr->sin6_scope_id; + + /* Join the multicast address */ + if (setsockopt(listener, IPPROTO_IPV6, IPV6_JOIN_GROUP, (char*) &multicastRequest, sizeof(multicastRequest)) != 0) + { + DieWithError("setsockopt(IPV6_JOIN_GROUP) failed"); + } + } else { + DieWithError("Not IPv6"); + } + + for (;;) /* Run forever */ + { + int n; + int max_fd; + fd_set input; + + char recvString[500]; /* Buffer for received string */ + int recvStringLen; /* Length of received string */ + + char sendString[] = "Say Hello\n"; + size_t sendStringLen = sizeof(sendString)-1; + char errorString[] = "That is not correct! Try again!\n"; + + struct sockaddr_in6 from; + socklen_t fromlen = sizeof(from); + + FD_ZERO(&input); + FD_SET(listener, &input); + + max_fd = listener + 1; + + if (timeout.tv_usec < 100) + { + timeout.tv_sec = 1; + timeout.tv_usec = 0; + + int sendLen = sendto(sender, sendString, sendStringLen, 0, multicastAddr->ai_addr, + multicastAddr->ai_addrlen); + if (sendLen == sendStringLen) + { + printf("Sent [%s] (%i bytes) to %s, port %s\n", sendString, sendLen, + multicastIP, multicastPort); + } else { + DieWithError("sendto() sent a different number of bytes than expected"); + } + } + + n = select(max_fd, &input, NULL, NULL, &timeout); + + /* See if there was an error */ + if (n < 0) + { + perror("select failed"); + } else if (n == 0) { + puts("TIMEOUT"); + } else { + if (FD_ISSET(listener, &input)) + { + recvStringLen = recvfrom(listener, recvString, sizeof(recvString) - 1, 0, + (struct sockaddr *)&from, &fromlen); + /* Receive a single datagram from the server */ + if (recvStringLen < 0) + { + DieWithError("recvfrom() failed"); + } + + recvString[recvStringLen] = '\0'; + if (strcmp(recvString, "hello")==0) + { + printf("Correct!!\n"); + sendto(listener, token, sizeof(sendString), 0, (struct sockaddr *)&from, fromlen); + } else if (strcmp(recvString, sendString)!=0) { + sendto(listener, errorString, sizeof(errorString), 0, (struct sockaddr *)&from, fromlen); + } + + /* Print the received string */ + printf("Received string [%s]\n", recvString); + } + } + } + + /* NOT REACHED */ + freeaddrinfo(multicastAddr); + close(sender); + close(listener); + + return 0; +} From 195bcd58e8f5c9ec59436f504a0565b70f3595bb Mon Sep 17 00:00:00 2001 From: Neale Pickett Date: Wed, 12 Oct 2011 10:49:37 -0600 Subject: [PATCH 27/36] stop building lxc by default --- packages/lxc/lxc.mk | 3 --- 1 file changed, 3 deletions(-) diff --git a/packages/lxc/lxc.mk b/packages/lxc/lxc.mk index e8edc3e..c9816e8 100644 --- a/packages/lxc/lxc.mk +++ b/packages/lxc/lxc.mk @@ -50,6 +50,3 @@ lxc-clean: LIBCAP_PKGDIR = $(TARGET)/libcap - - -PACKAGES += lxc From 62c0d3de8c6801f136ad9571ef38badbee24fa73 Mon Sep 17 00:00:00 2001 From: Neale Pickett Date: Wed, 12 Oct 2011 10:50:09 -0600 Subject: [PATCH 28/36] replace mrd6 with ecmh --- packages/router/router.mk | 31 ++++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/packages/router/router.mk b/packages/router/router.mk index ed65d09..536e609 100644 --- a/packages/router/router.mk +++ b/packages/router/router.mk @@ -44,28 +44,29 @@ radvd-install: ## -## mrd6 +## ecmh ## -MRD6_CACHE = $(CACHE)/mrd6.git -MRD6_BUILDDIR = $(ROUTER_BUILDDIR)/mrd6 -MRD6_URL = https://github.com/hugosantos/mrd6.git +ECMH_CACHE = $(CACHE)/ecmh.git +ECMH_BUILDDIR = $(ROUTER_BUILDDIR)/ecmh +ECMH_URL = http://woozle.org/~neale/projects/ecmh -$(MRD6_CACHE): - git clone --bare $(MRD6_URL) $@ +$(ECMH_CACHE): + git clone --bare $(ECMH_URL) $@ -router-source: $(MRD6_BUILDDIR) -$(MRD6_BUILDDIR): $(MRD6_CACHE) +router-source: $(ECMH_BUILDDIR) +$(ECMH_BUILDDIR): $(ECMH_CACHE) git clone $< $@ -router-build: $(ROUTER_BUILDDIR)/mrd6-build -$(ROUTER_BUILDDIR)/mrd6-build: $(MRD6_BUILDDIR) - $(MAKE) -C $(MRD6_BUILDDIR) +router-build: $(ROUTER_BUILDDIR)/ecmh-build +$(ROUTER_BUILDDIR)/ecmh-build: $(ECMH_BUILDDIR) + $(MAKE) -C $(ECMH_BUILDDIR)/src ECMH_VERSION=dbtl-git + $(MAKE) -C $(ECMH_BUILDDIR)/tools/mtrace6 touch $@ -router-install: mrd6-install -mrd6-install: +router-install: ecmh-install +ecmh-install: mkdir -p $(ROUTER_PKGDIR)/bin - cp $(MRD6_BUILDDIR)/src/mrd $(ROUTER_PKGDIR)/bin - + cp $(ECMH_BUILDDIR)/src/ecmh $(ROUTER_PKGDIR)/bin + cp $(ECMH_BUILDDIR)/tools/mtrace6/mtrace6 $(ROUTER_PKGDIR)/bin PACKAGES += router From ffa1ce92716b9039ef4e64384dc9f9de18573bf9 Mon Sep 17 00:00:00 2001 From: Neale Pickett Date: Wed, 12 Oct 2011 17:41:19 -0600 Subject: [PATCH 29/36] make points submission almost work again --- packages/mcp/bin/addteam | 6 +----- packages/mcp/mcp.mk | 27 ++++++++++++++------------- packages/mcp/service/httpd/run | 6 +----- packages/mcp/service/puzzled/run | 3 +++ 4 files changed, 19 insertions(+), 23 deletions(-) diff --git a/packages/mcp/bin/addteam b/packages/mcp/bin/addteam index 6a335a3..e936f01 100755 --- a/packages/mcp/bin/addteam +++ b/packages/mcp/bin/addteam @@ -45,13 +45,9 @@ esac # Compute hash of team name; they'll use this for everything in the # contest instead of their team name, which makes stuff much easier on # me since all team hashes are in the set /[0-9a-f]{8}/. -hash=$(echo "not a nonce:::$1" | md5sum | cut -b 1-8) +hash=$(dd if=/dev/urandom count=1 2>/dev/null | md5sum | cut -b 1-8) echo "$1" > $base/teams/names/$hash echo "$color" > $base/teams/colors/$hash echo "Registered with hash: $hash" - -# Create encrypted listing of teams -ls $base/teams/names | KEY="Too much cheese." arc4 > $www/teams.txt.$$ -mv $www/teams.txt.$$ $www/teams.txt diff --git a/packages/mcp/mcp.mk b/packages/mcp/mcp.mk index 19e6ef8..ea8c647 100644 --- a/packages/mcp/mcp.mk +++ b/packages/mcp/mcp.mk @@ -1,27 +1,28 @@ MCP_PKGDIR = $(TARGET)/mcp MCP_BUILDDIR = $(BUILD)/mcp -MCP_FNORD_VERSION = 1.10 -MCP_FNORD_TARBALL = fnord-$(MCP_FNORD_VERSION).tar.bz2 -MCP_FNORD_TARCACHE = $(CACHE)/$(MCP_FNORD_TARBALL) -MCP_FNORD_URL = http://www.fefe.de/fnord/$(MCP_FNORD_TARBALL) -MCP_FNORD_SRCDIR = $(MCP_BUILDDIR)/fnord-$(MCP_FNORD_VERSION) -$(MCP_FNORD_TARCACHE): - @ mkdir -p $(@D) - wget -O $@ $(MCP_FNORD_URL) +## +## XXX: clean up fnord like router.mk +## + +FNORD_CACHE = $(CACHE)/fnord.git +FNORD_BUILDDIR = $(MCP_BUILDDIR)/fnord +FNORD_URL = http://woozle.org/~neale/projects/fnord + +$(FNORD_CACHE): + git clone --bare $(FNORD_URL) $@ mcp-source: $(MCP_BUILDDIR)/source -$(MCP_BUILDDIR)/source: $(MCP_FNORD_TARCACHE) +$(MCP_BUILDDIR)/source: $(FNORD_CACHE) mkdir -p $(@D) - bzcat $< | (cd $(@D) && tar xf -) - (cd $(@D)/fnord-$(MCP_FNORD_VERSION) && patch -p 1) < packages/mcp/fnord.patch + git clone $(FNORD_CACHE) $(@D)/fnord touch $@ mcp-build: $(MCP_BUILDDIR)/build $(MCP_BUILDDIR)/build: $(MCP_BUILDDIR)/source $(MAKE) -C packages/mcp/src build - $(MAKE) -C $(MCP_BUILDDIR)/fnord-$(MCP_FNORD_VERSION) DIET= CC=$(CC) fnord-cgi + $(MAKE) -C $(MCP_BUILDDIR)/fnord DIET= CC=$(CC) fnord-cgi mcp-install: $(MCP_BUILDDIR)/build @@ -31,7 +32,7 @@ mcp-install: $(MCP_BUILDDIR)/build cp packages/mcp/src/pointscli $(MCP_PKGDIR)/bin/ cp packages/mcp/src/puzzles.cgi $(MCP_PKGDIR)/bin/ - cp $(MCP_BUILDDIR)/fnord-$(MCP_FNORD_VERSION)/fnord-cgi $(MCP_PKGDIR)/bin/ + cp $(MCP_BUILDDIR)/fnord/fnord-cgi $(MCP_PKGDIR)/bin/ $(call COPYTREE, packages/mcp/service, $(MCP_PKGDIR)/service) diff --git a/packages/mcp/service/httpd/run b/packages/mcp/service/httpd/run index a183245..7a96666 100755 --- a/packages/mcp/service/httpd/run +++ b/packages/mcp/service/httpd/run @@ -18,8 +18,4 @@ for d in /opt/*; do fi done - -mkdir -p sites -cd sites -ln -sf /var/www default -exec tcpsvd -u ctf ${IP%/*} 80 /opt/mcp/bin/fnord-cgi +exec tcpsvd -u ctf ${IP%/*} 80 /opt/mcp/bin/fnord-cgi /var/www diff --git a/packages/mcp/service/puzzled/run b/packages/mcp/service/puzzled/run index 261eaf7..c154128 100755 --- a/packages/mcp/service/puzzled/run +++ b/packages/mcp/service/puzzled/run @@ -4,6 +4,9 @@ exec 2>&1 DB=/var/lib/ctf/puzzles.db +# Create CTF user +touch /etc/group /etc/passwd +addgroup -g 56634 nogroup || true adduser -D -S -h /var/lib/ctf -H ctf || true mkdir -p /var/lib/ctf /var/www From f021ffd092d3de76f6ee41ebc30beb6958411fcd Mon Sep 17 00:00:00 2001 From: Neale Pickett Date: Thu, 13 Oct 2011 17:22:03 -0600 Subject: [PATCH 30/36] Verified claim.cgi, puzzled, scoreboard. Looking good. --- packages/mcp/bin/scoreboard | 2 +- packages/mcp/service/pointsd/pointsd | 28 ++++++---------------- packages/mcp/service/pointsd/run | 36 +++++++++++++++++++++++----- packages/mcp/service/puzzled/run | 10 +++----- 4 files changed, 41 insertions(+), 35 deletions(-) diff --git a/packages/mcp/bin/scoreboard b/packages/mcp/bin/scoreboard index 3522446..1f2dac3 100755 --- a/packages/mcp/bin/scoreboard +++ b/packages/mcp/bin/scoreboard @@ -1,4 +1,4 @@ -#! /usr/bin/awk -f +#! /bin/awk -f ## ## diff --git a/packages/mcp/service/pointsd/pointsd b/packages/mcp/service/pointsd/pointsd index d1d7e72..a6fc72f 100755 --- a/packages/mcp/service/pointsd/pointsd +++ b/packages/mcp/service/pointsd/pointsd @@ -1,28 +1,14 @@ #! /bin/sh -# First argument is seconds between running everything -period=${1:-60} - -NEWPOINTS=/var/lib/ctf/points.new +fn=$2/$3 POINTS=/var/lib/ctf/points.log SCOREBOARD=/var/www/scoreboard.html -if ! [ -f $SCOREBOARD ]; then - /opt/mcp/bin/scoreboard < $POINTS > $SCOREBOARD +cat $fn >> $POINTS || break +rm $fn + +# Render scoreboard +if [ $POINTS -nt $SCOREBOARD ]; then + /opt/mcp/bin/scoreboard < $POINTS > $SCOREBOARD.new && mv $SCOREBOARD.new $SCOREBOARD fi -while true; do - # Collect any new points - for fn in $NEWPOINTS/*; do - [ -f $fn ] || continue - cat $fn >> $POINTS || break - rm $fn - done - - # Render scoreboard - if [ $POINTS -nt $SCOREBOARD ]; then - /opt/mcp/bin/scoreboard < $POINTS > $SCOREBOARD.new && mv $SCOREBOARD.new $SCOREBOARD - fi - - sleep $period -done diff --git a/packages/mcp/service/pointsd/run b/packages/mcp/service/pointsd/run index a7d63bd..ea3d1ac 100755 --- a/packages/mcp/service/pointsd/run +++ b/packages/mcp/service/pointsd/run @@ -1,13 +1,37 @@ -#! /bin/sh +#! /bin/sh -e exec 2>&1 -install -o ctf -m 0755 -d /var/lib/ctf/points.new +install -d /var/lib/ctf + +# Create CTF user +touch /etc/group /etc/passwd +addgroup -g 56634 nogroup || true +adduser -D -S -h /var/lib/ctf -H ctf || true + +NEWDIR=/var/lib/ctf/points.new + +install -d /var/www +install -o ctf -m 0755 -d $NEWDIR install -o ctf -m 0755 -d /var/lib/ctf/points.tmp touch /var/lib/ctf/points.log -# Re-populate teams list for tanks -ls $base/teams/names | KEY="Too much cheese." /opt/mcp/bin/arc4 > $www/teams.txt.$$ -mv $www/teams.txt.$$ $www/teams.txt +# Generate preliminary scoreboard +if ! [ -f /var/www/scoreboard.html ]; then + /opt/mcp/bin/scoreboard < /dev/null > /var/www/scoreboard.html +fi -exec ./pointsd + +if [ -x /sbin/inotifyd ]; then + exec /sbin/inotifyd ./pointsd $NEWDIR:y +fi + +# Simulate inotifyd +cd $NEWDIR +while true; do + for fn in *; do + [ -f "$fn" ] || continue + ./pointsd m $NEWDIR $fn + done + sleep 7 +done diff --git a/packages/mcp/service/puzzled/run b/packages/mcp/service/puzzled/run index c154128..08f8d43 100755 --- a/packages/mcp/service/puzzled/run +++ b/packages/mcp/service/puzzled/run @@ -2,14 +2,10 @@ exec 2>&1 +install -d /var/www + +# Install truncates files DB=/var/lib/ctf/puzzles.db - -# Create CTF user -touch /etc/group /etc/passwd -addgroup -g 56634 nogroup || true -adduser -D -S -h /var/lib/ctf -H ctf || true - -mkdir -p /var/lib/ctf /var/www touch $DB chown ctf $DB From 884ba02a510ba86118d852bb27e21ecaadbee5fd Mon Sep 17 00:00:00 2001 From: Neale Pickett Date: Thu, 13 Oct 2011 21:15:11 -0600 Subject: [PATCH 31/36] add multicaster, verify token junk --- packages/mcp/service/pointsd/run | 16 +- packages/mcp/www/index.html | 1 + packages/multicaster/multicaster.mk | 3 + packages/multicaster/src/Makefile | 2 +- .../src/multicaster-serverAWESOME.c | 178 ------------------ packages/multicaster/src/multicaster.c | 166 ++++++++++++++++ 6 files changed, 186 insertions(+), 180 deletions(-) delete mode 100644 packages/multicaster/src/multicaster-serverAWESOME.c create mode 100644 packages/multicaster/src/multicaster.c diff --git a/packages/mcp/service/pointsd/run b/packages/mcp/service/pointsd/run index ea3d1ac..104d477 100755 --- a/packages/mcp/service/pointsd/run +++ b/packages/mcp/service/pointsd/run @@ -9,11 +9,25 @@ touch /etc/group /etc/passwd addgroup -g 56634 nogroup || true adduser -D -S -h /var/lib/ctf -H ctf || true +# Set up base directories NEWDIR=/var/lib/ctf/points.new - install -d /var/www +install -d /var/lib/ctf install -o ctf -m 0755 -d $NEWDIR install -o ctf -m 0755 -d /var/lib/ctf/points.tmp + +# Make tokens database now, this is as good a time as any +TOKENS=/var/lib/ctf/tokens.db +for fn in $TOKENS /opt/*/tokens.txt; do + [ -f "$fn" ] || continue + cat $fn +done | sort | uniq > $TOKENS.new +mv $TOKENS.new $TOKENS + +# Create some files +CLAIM=/var/lib/ctf/claim.db +touch $CLAIM +chown ctf $CLAIM touch /var/lib/ctf/points.log # Generate preliminary scoreboard diff --git a/packages/mcp/www/index.html b/packages/mcp/www/index.html index 82b48c1..6eb124c 100644 --- a/packages/mcp/www/index.html +++ b/packages/mcp/www/index.html @@ -46,6 +46,7 @@ No DoS attacks.
    • + Contest servers lie within fd84:b410:3441::/112. Do not attack machines outside fd84:b410:3441::/48. Low ports (under 1024) do not run contest categories, don't waste your time. diff --git a/packages/multicaster/multicaster.mk b/packages/multicaster/multicaster.mk index ce8e15c..9e7fed6 100644 --- a/packages/multicaster/multicaster.mk +++ b/packages/multicaster/multicaster.mk @@ -2,6 +2,9 @@ MULTICASTER_PKGDIR = $(TARGET)/multicaster multicaster-install: multicaster-build mkdir -p $(MULTICASTER_PKGDIR) + cp packages/multicaster/tokens.txt $(MULTICASTER_PKGDIR) + + $(call COPYTREE, packages/multicaster/service, $(MULTICASTER_PKGDIR)/service) mkdir -p $(MULTICASTER_PKGDIR)/bin/ $(MAKE) -C packages/multicaster/src install DESTDIR=$(CURDIR)/$(MULTICASTER_PKGDIR) diff --git a/packages/multicaster/src/Makefile b/packages/multicaster/src/Makefile index bf4eb10..219a13b 100644 --- a/packages/multicaster/src/Makefile +++ b/packages/multicaster/src/Makefile @@ -1,5 +1,5 @@ CFLAGS = -Wall -Werror -TARGETS = multicaster-server multicaster-client +TARGETS = multicaster all: build build: $(TARGETS) diff --git a/packages/multicaster/src/multicaster-serverAWESOME.c b/packages/multicaster/src/multicaster-serverAWESOME.c deleted file mode 100644 index d8b69d0..0000000 --- a/packages/multicaster/src/multicaster-serverAWESOME.c +++ /dev/null @@ -1,178 +0,0 @@ -/* multicast_server.c - * Adapted from tmouse's IPv6 client/server example code - * found at http://cboard.cprogramming.com/showthread.php?t=67469 - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -static void DieWithError(const char* errorMessage) -{ - fprintf(stderr, "%s\n", errorMessage); - exit(1); -} - -int main(int argc, char *argv[]) -{ - int sender, listener; /* Sockets */ - char* multicastIP; /* Arg: IP Multicast address */ - char* multicastPort; /* Arg: Server port */ - char* token; - size_t tokenlen; - struct addrinfo * multicastAddr; /* Multicast address */ - struct addrinfo hints = { 0 }; /* Hints for name lookup */ - struct timeval timeout = { 0 }; - - if (argc != 4) - { - fprintf(stderr, "Usage: %s \n", argv[0]); - exit(1); - } - - multicastIP = argv[1]; /* First arg: multicast IP address */ - multicastPort = argv[2]; /* Second arg: multicast port */ - token = argv[3]; - tokenlen = strlen(token); - - /* Resolve destination address for multicast datagrams */ - hints.ai_family = PF_INET6; - hints.ai_socktype = SOCK_DGRAM; - hints.ai_flags = AI_NUMERICHOST; - - if (getaddrinfo(multicastIP, multicastPort, &hints, &multicastAddr) != 0) - { - DieWithError("getaddrinfo() failed"); - } - - /* Create socket for sending multicast datagrams */ - if ((sender = socket(multicastAddr->ai_family, multicastAddr->ai_socktype, 0)) == -1) - { - DieWithError("socket() failed"); - } - - /* Create socket for recieving multicast datagrams */ - if ((listener = socket(multicastAddr->ai_family, multicastAddr->ai_socktype, 0)) == -1) - { - DieWithError("socket() failed"); - } - - { - int hops = 5; - if (setsockopt(sender, IPPROTO_IPV6, IPV6_MULTICAST_HOPS, &hops, sizeof(hops)) != 0) - { - DieWithError("setsockopt(MULTICAST_HOPS) failed"); - } - } - - /* Bind to the multicast port */ - if (bind(listener, multicastAddr->ai_addr, multicastAddr->ai_addrlen) != 0) - { - DieWithError("bind() failed"); - } - - /* Join the multicast group. */ - if ((multicastAddr->ai_family == PF_INET6)&&(multicastAddr->ai_addrlen == sizeof(struct sockaddr_in6))) - { - struct sockaddr_in6 *addr = (struct sockaddr_in6 *)(multicastAddr->ai_addr); - struct ipv6_mreq multicastRequest; /* Multicast address join structure */ - - /* Specify the multicast group */ - memcpy(&multicastRequest.ipv6mr_multiaddr, &(addr)->sin6_addr, sizeof(multicastRequest.ipv6mr_multiaddr)); - - /* Accept multicast from any interface */ - multicastRequest.ipv6mr_interface = addr->sin6_scope_id; - - /* Join the multicast address */ - if (setsockopt(listener, IPPROTO_IPV6, IPV6_JOIN_GROUP, (char*) &multicastRequest, sizeof(multicastRequest)) != 0) - { - DieWithError("setsockopt(IPV6_JOIN_GROUP) failed"); - } - } else { - DieWithError("Not IPv6"); - } - - for (;;) /* Run forever */ - { - int n; - int max_fd; - fd_set input; - - char recvString[500]; /* Buffer for received string */ - int recvStringLen; /* Length of received string */ - - char sendString[] = "Say Hello\n"; - size_t sendStringLen = sizeof(sendString)-1; - char errorString[] = "That is not correct! Try again!\n"; - - struct sockaddr_in6 from; - socklen_t fromlen = sizeof(from); - - FD_ZERO(&input); - FD_SET(listener, &input); - - max_fd = listener + 1; - - if (timeout.tv_usec < 100) - { - timeout.tv_sec = 1; - timeout.tv_usec = 0; - - int sendLen = sendto(sender, sendString, sendStringLen, 0, multicastAddr->ai_addr, - multicastAddr->ai_addrlen); - if (sendLen == sendStringLen) - { - printf("Sent [%s] (%i bytes) to %s, port %s\n", sendString, sendLen, - multicastIP, multicastPort); - } else { - DieWithError("sendto() sent a different number of bytes than expected"); - } - } - - n = select(max_fd, &input, NULL, NULL, &timeout); - - /* See if there was an error */ - if (n < 0) - { - perror("select failed"); - } else if (n == 0) { - puts("TIMEOUT"); - } else { - if (FD_ISSET(listener, &input)) - { - recvStringLen = recvfrom(listener, recvString, sizeof(recvString) - 1, 0, - (struct sockaddr *)&from, &fromlen); - /* Receive a single datagram from the server */ - if (recvStringLen < 0) - { - DieWithError("recvfrom() failed"); - } - - recvString[recvStringLen] = '\0'; - if (strcmp(recvString, "hello")==0) - { - printf("Correct!!\n"); - sendto(listener, token, sizeof(sendString), 0, (struct sockaddr *)&from, fromlen); - } else if (strcmp(recvString, sendString)!=0) { - sendto(listener, errorString, sizeof(errorString), 0, (struct sockaddr *)&from, fromlen); - } - - /* Print the received string */ - printf("Received string [%s]\n", recvString); - } - } - } - - /* NOT REACHED */ - freeaddrinfo(multicastAddr); - close(sender); - close(listener); - - return 0; -} diff --git a/packages/multicaster/src/multicaster.c b/packages/multicaster/src/multicaster.c new file mode 100644 index 0000000..0689959 --- /dev/null +++ b/packages/multicaster/src/multicaster.c @@ -0,0 +1,166 @@ +/* multicast_server.c + * Adapted from tmouse's IPv6 client/server example code + * found at http://cboard.cprogramming.com/showthread.php?t=67469 + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +static void +DieWithError(const char* errorMessage) +{ + fprintf(stderr, "%s\n", errorMessage); + exit(1); +} + +int +main(int argc, char *argv[]) +{ + int sender, listener; /* Sockets */ + char* multicastIP; /* Arg: IP Multicast address */ + char* multicastPort; /* Arg: Server port */ + char token[100]; + size_t tokenlen; + struct addrinfo * multicastAddr; /* Multicast address */ + struct addrinfo hints = { 0 }; /* Hints for name lookup */ + struct timeval timeout = { 0 }; + + if (argc != 3) + { + fprintf(stderr, "Usage: %s ADDRESS PORT ai_family == PF_INET6) && + (multicastAddr->ai_addrlen == sizeof(struct sockaddr_in6)))) { + DieWithError("Not IPv6"); + } + + /* Create socket for sending multicast datagrams */ + if ((sender = socket(multicastAddr->ai_family, multicastAddr->ai_socktype, 0)) == -1) { + DieWithError("socket() failed"); + } + + /* Create socket for recieving multicast datagrams */ + if ((listener = socket(multicastAddr->ai_family, multicastAddr->ai_socktype, 0)) == -1) { + DieWithError("socket() failed"); + } + + /* We need to go through a router, set hops to 5 */ + { + int hops = 5; + + if (setsockopt(sender, IPPROTO_IPV6, IPV6_MULTICAST_HOPS, &hops, sizeof(hops)) != 0) { + DieWithError("setsockopt(MULTICAST_HOPS) failed"); + } + } + + /* Bind to the multicast port */ + if (bind(listener, multicastAddr->ai_addr, multicastAddr->ai_addrlen) != 0) { + DieWithError("bind() failed"); + } + + + /* Join the multicast group. */ + { + struct sockaddr_in6 *addr = (struct sockaddr_in6 *)(multicastAddr->ai_addr); + struct ipv6_mreq multicastRequest; + + multicastRequest.ipv6mr_interface = addr->sin6_scope_id; + memcpy(&multicastRequest.ipv6mr_multiaddr, &(addr->sin6_addr), + sizeof(multicastRequest.ipv6mr_multiaddr)); + + if (setsockopt(listener, IPPROTO_IPV6, IPV6_JOIN_GROUP, + (char*)&multicastRequest, sizeof(multicastRequest)) != 0) { + DieWithError("setsockopt(IPV6_JOIN_GROUP) failed"); + } + } + + for (;;) { /* Run forever */ + int n; + int max_fd; + fd_set input; + + char recvString[500]; /* Buffer for received string */ + int recvStringLen; /* Length of received string */ + + char sendString[] = "If anyone is out there, please say hello\n"; + size_t sendStringLen = sizeof(sendString)-1; + char errorString[] = "Say what?\n"; + + struct sockaddr_in6 from; + socklen_t fromlen = sizeof(from); + + FD_ZERO(&input); + FD_SET(listener, &input); + + max_fd = listener + 1; + + if (timeout.tv_usec < 100) { + ssize_t sendLen; + + timeout.tv_sec = 1; + timeout.tv_usec = 0; + + sendLen = sendto(sender, sendString, sendStringLen, 0, multicastAddr->ai_addr, + multicastAddr->ai_addrlen); + if (sendLen != sendStringLen) { + DieWithError("sendto() sent a different number of bytes than expected"); + } + } + + n = select(max_fd, &input, NULL, NULL, &timeout); + + /* See if there was an error */ + if (n < 0) { + perror("select failed"); + } else if (FD_ISSET(listener, &input)) { + recvStringLen = recvfrom(listener, recvString, sizeof(recvString) - 1, 0, + (struct sockaddr *)&from, &fromlen); + /* Receive a single datagram from the server */ + if (recvStringLen < 0) { + DieWithError("recvfrom() failed"); + } + + recvString[recvStringLen] = '\0'; + if (strcmp(recvString, "hello")==0) { + sendto(listener, token, sizeof(sendString), 0, (struct sockaddr *)&from, + fromlen); + } else if (strcmp(recvString, sendString)!=0) { + sendto(listener, errorString, sizeof(errorString), 0, + (struct sockaddr *)&from, fromlen); + } + } + } + + /* NOT REACHED */ + freeaddrinfo(multicastAddr); + close(sender); + close(listener); + + return 0; +} From 61680f9cffae6b6ddd2be715ac29cc4d3f972ce7 Mon Sep 17 00:00:00 2001 From: Neale Pickett Date: Thu, 13 Oct 2011 21:24:29 -0600 Subject: [PATCH 32/36] make octopus use a changeable token --- packages/octopus/octopus.mk | 1 + packages/octopus/service/octopus/finish | 4 ---- packages/octopus/service/octopus/run | 6 +++--- packages/octopus/src/octopus.c | 10 ++++++++-- packages/octopus/tokens.txt | 1 + 5 files changed, 13 insertions(+), 9 deletions(-) delete mode 100755 packages/octopus/service/octopus/finish create mode 100644 packages/octopus/tokens.txt diff --git a/packages/octopus/octopus.mk b/packages/octopus/octopus.mk index 4e34aba..d0e2962 100644 --- a/packages/octopus/octopus.mk +++ b/packages/octopus/octopus.mk @@ -5,6 +5,7 @@ octopus-install: octopus-build $(call COPYTREE, packages/octopus/service, $(OCTOPUS_PKGDIR)/service) + cp packages/octopus/tokens.txt $(OCTOPUS_PKGDIR)/ cp packages/octopus/src/octopus $(OCTOPUS_PKGDIR)/bin/ octopus-clean: diff --git a/packages/octopus/service/octopus/finish b/packages/octopus/service/octopus/finish deleted file mode 100755 index 6317f74..0000000 --- a/packages/octopus/service/octopus/finish +++ /dev/null @@ -1,4 +0,0 @@ -#! /bin/sh - -IP=$(cat ip.txt) -ip addr del $IP dev eth0 diff --git a/packages/octopus/service/octopus/run b/packages/octopus/service/octopus/run index 3386b3d..66fc4e1 100755 --- a/packages/octopus/service/octopus/run +++ b/packages/octopus/service/octopus/run @@ -3,6 +3,6 @@ exec 2>&1 IP=$(cat ip.txt) -ip addr add $IP dev eth0 -ip monitor | grep -q $IP -exec /opt/octopus/bin/octopus ${IP%/*} +ip addr add $IP dev eth0 || true + +exec /opt/octopus/bin/octopus ${IP%/*} < /opt/octopus/tokens.txt diff --git a/packages/octopus/src/octopus.c b/packages/octopus/src/octopus.c index a205306..d1397bb 100644 --- a/packages/octopus/src/octopus.c +++ b/packages/octopus/src/octopus.c @@ -19,8 +19,8 @@ #define max(a,b) (((a)>(b))?(a):(b)) #endif -const char token[] = "octopus:xylep-radar-nanox"; -const size_t tokenlen = sizeof(token) - 1; +const char token[100]; +size_t tokenlen; char const octopus[] = (" ___\n" @@ -338,6 +338,12 @@ main(int argc, char *argv[]) memcpy(&addr, &in6addr_any, sizeof addr); } + if (NULL == fgets(token, sizeof(token), stdin)) { + perror("Unable to read token"); + return EX_IOERR; + } + tokenlen = strlen(token); + bound_ports[0].fd = socket(AF_INET6, SOCK_DGRAM, 0); ret = bind_port(&addr, bound_ports[0].fd, 8888); if (-1 == ret) { diff --git a/packages/octopus/tokens.txt b/packages/octopus/tokens.txt new file mode 100644 index 0000000..e7bf2cb --- /dev/null +++ b/packages/octopus/tokens.txt @@ -0,0 +1 @@ +net:xemim-civiz-tyrox From 7b751ac92bcda7036b14416b153be82bf0153ae5 Mon Sep 17 00:00:00 2001 From: Neale Pickett Date: Thu, 13 Oct 2011 22:12:53 -0600 Subject: [PATCH 33/36] add fizzbuzz --- packages/fizzbuzz/fizzbuzz-client.sh | 13 +++++++++++++ packages/fizzbuzz/fizzbuzz.mk | 29 ++++++++++++++++++++++++++++ packages/fizzbuzz/src/Makefile | 11 +++++++++++ packages/fizzbuzz/src/fizzbuzz.c | 7 ++++--- packages/fizzbuzz/tokens.txt | 1 + packages/mcp/service/pointsd/run | 5 +++-- packages/multicaster/src/Makefile | 2 +- 7 files changed, 62 insertions(+), 6 deletions(-) create mode 100755 packages/fizzbuzz/fizzbuzz-client.sh create mode 100644 packages/fizzbuzz/fizzbuzz.mk create mode 100644 packages/fizzbuzz/src/Makefile create mode 100644 packages/fizzbuzz/tokens.txt diff --git a/packages/fizzbuzz/fizzbuzz-client.sh b/packages/fizzbuzz/fizzbuzz-client.sh new file mode 100755 index 0000000..d6caa5e --- /dev/null +++ b/packages/fizzbuzz/fizzbuzz-client.sh @@ -0,0 +1,13 @@ +#! /bin/sh + +for i in $(seq 100); do + if [ $(expr $i % 15) = 0 ]; then + echo 'FizzBuzz' + elif [ $(expr $i % 3) = 0 ]; then + echo 'Fizz' + elif [ $(expr $i % 5) = 0 ]; then + echo 'Buzz' + else + echo $i + fi +done diff --git a/packages/fizzbuzz/fizzbuzz.mk b/packages/fizzbuzz/fizzbuzz.mk new file mode 100644 index 0000000..10dcac7 --- /dev/null +++ b/packages/fizzbuzz/fizzbuzz.mk @@ -0,0 +1,29 @@ +FIZZBUZZ_PKGDIR = $(TARGET)/fizzbuzz +FIZZBUZZ_BUILDDIR = $(BUILD)/fizzbuzz + +$(FIZZBUZZ_BUILDDIR)/token.enc: packages/fizzbuzz/tokens.txt +$(FIZZBUZZ_BUILDDIR)/token.enc: packages/fizzbuzz/fizzbuzz-client.sh +$(FIZZBUZZ_BUILDDIR)/token.enc: $(FIZZBUZZ_BUILDDIR)/fizzbuzz-native + packages/fizzbuzz/fizzbuzz-client.sh | $(FIZZBUZZ_BUILDDIR)/fizzbuzz-native 3< packages/fizzbuzz/tokens.txt > $@ + +$(FIZZBUZZ_BUILDDIR)/fizzbuzz-native: packages/fizzbuzz/src/fizzbuzz.c + @ mkdir -p $(@D) + cc -o $@ $< + +fizzbuzz-install: fizzbuzz-build + mkdir -p $(FIZZBUZZ_PKGDIR)/bin/ + + $(call COPYTREE, packages/fizzbuzz/service, $(FIZZBUZZ_PKGDIR)/service) + + cp packages/fizzbuzz/tokens.txt $(FIZZBUZZ_PKGDIR)/ + cp $(FIZZBUZZ_BUILDDIR)/token.enc $(FIZZBUZZ_PKGDIR)/ + cp packages/fizzbuzz/src/fizzbuzz $(FIZZBUZZ_PKGDIR)/bin/ + +fizzbuzz-clean: + rm -rf $(FIZZBUZZ_PKGDIR) $(FIZZBUZZ_BUILDDIR) + $(MAKE) -C packages/fizzbuzz/src clean + +fizzbuzz-build: $(FIZZBUZZ_BUILDDIR)/token.enc + $(MAKE) -C packages/fizzbuzz/src build + +PACKAGES += fizzbuzz diff --git a/packages/fizzbuzz/src/Makefile b/packages/fizzbuzz/src/Makefile new file mode 100644 index 0000000..cd3f866 --- /dev/null +++ b/packages/fizzbuzz/src/Makefile @@ -0,0 +1,11 @@ +CFLAGS = -Wall -Werror +TARGETS = fizzbuzz + +all: build +build: $(TARGETS) + +install: $(TARGETS) + install -m 0755 $(TARGETS) $(DESTDIR)/bin + +clean: + rm -f *.o $(TARGETS) diff --git a/packages/fizzbuzz/src/fizzbuzz.c b/packages/fizzbuzz/src/fizzbuzz.c index 41acb43..2b495e7 100644 --- a/packages/fizzbuzz/src/fizzbuzz.c +++ b/packages/fizzbuzz/src/fizzbuzz.c @@ -1,5 +1,6 @@ #include #include +#include /* * How this works: @@ -25,7 +26,7 @@ * echo $i * fi * done - * + * */ char craptable[] = { @@ -50,11 +51,11 @@ main(int argc, char *argv[]) printf("Somebody didn't read the instructions.\n"); return 1; } - + tokenlen = fread(token, 1, sizeof(token), tokenin); fclose(tokenin); } - + for (i=1; i <= 100; i += 1) { char l[100]; diff --git a/packages/fizzbuzz/tokens.txt b/packages/fizzbuzz/tokens.txt new file mode 100644 index 0000000..c55bea1 --- /dev/null +++ b/packages/fizzbuzz/tokens.txt @@ -0,0 +1 @@ +net:xuhen-fizuv-syvex diff --git a/packages/mcp/service/pointsd/run b/packages/mcp/service/pointsd/run index 104d477..d4f92f4 100755 --- a/packages/mcp/service/pointsd/run +++ b/packages/mcp/service/pointsd/run @@ -4,10 +4,11 @@ exec 2>&1 install -d /var/lib/ctf -# Create CTF user +# Create CTF and nobody users touch /etc/group /etc/passwd -addgroup -g 56634 nogroup || true +addgroup -g 65534 nogroup || true adduser -D -S -h /var/lib/ctf -H ctf || true +adduser -D -g nogroup -u 65534 -h /tmp -H nobody || true # Set up base directories NEWDIR=/var/lib/ctf/points.new diff --git a/packages/multicaster/src/Makefile b/packages/multicaster/src/Makefile index 219a13b..c5faabb 100644 --- a/packages/multicaster/src/Makefile +++ b/packages/multicaster/src/Makefile @@ -8,4 +8,4 @@ install: $(TARGETS) install -m 0755 $(TARGETS) $(DESTDIR)/bin clean: - rm -f *.o $(TARGETS) \ No newline at end of file + rm -f *.o $(TARGETS) From ecbc2eb44d5e03079493b440aeba8cf60553d8f2 Mon Sep 17 00:00:00 2001 From: Neale Pickett Date: Thu, 13 Oct 2011 22:14:35 -0600 Subject: [PATCH 34/36] add some stuff I forgot (it's late) --- packages/fizzbuzz/service/fizzbuzz/ip.txt | 1 + packages/fizzbuzz/service/fizzbuzz/log/run | 3 +++ packages/fizzbuzz/service/fizzbuzz/run | 8 ++++++++ packages/multicaster/service/multicaster/ip.txt | 1 + packages/multicaster/service/multicaster/log/run | 3 +++ packages/multicaster/service/multicaster/run | 8 ++++++++ packages/multicaster/tokens.txt | 1 + 7 files changed, 25 insertions(+) create mode 100644 packages/fizzbuzz/service/fizzbuzz/ip.txt create mode 100755 packages/fizzbuzz/service/fizzbuzz/log/run create mode 100755 packages/fizzbuzz/service/fizzbuzz/run create mode 100644 packages/multicaster/service/multicaster/ip.txt create mode 100755 packages/multicaster/service/multicaster/log/run create mode 100755 packages/multicaster/service/multicaster/run create mode 100644 packages/multicaster/tokens.txt diff --git a/packages/fizzbuzz/service/fizzbuzz/ip.txt b/packages/fizzbuzz/service/fizzbuzz/ip.txt new file mode 100644 index 0000000..c4d788a --- /dev/null +++ b/packages/fizzbuzz/service/fizzbuzz/ip.txt @@ -0,0 +1 @@ +fd84:b410:3441::a0d/64 diff --git a/packages/fizzbuzz/service/fizzbuzz/log/run b/packages/fizzbuzz/service/fizzbuzz/log/run new file mode 100755 index 0000000..1e7bd9d --- /dev/null +++ b/packages/fizzbuzz/service/fizzbuzz/log/run @@ -0,0 +1,3 @@ +#! /bin/sh + +exec svlogd -tt $PWD diff --git a/packages/fizzbuzz/service/fizzbuzz/run b/packages/fizzbuzz/service/fizzbuzz/run new file mode 100755 index 0000000..47aef25 --- /dev/null +++ b/packages/fizzbuzz/service/fizzbuzz/run @@ -0,0 +1,8 @@ +#! /bin/sh -e + +exec 2>&1 + +IP=$(cat ip.txt) +ip addr add $IP dev eth0 || true + +exec tcpsvd -u nobody ${IP%/*} 1013 /opt/fizzbuzz/bin/fizzbuzz 3&1 + +IP=$(cat ip.txt) +ip addr add $IP dev eth0 || true + +exec setuidgid ctf /opt/multicaster/bin/multicaster ff15::62c 1580 Date: Fri, 14 Oct 2011 12:42:02 -0600 Subject: [PATCH 35/36] Add TF4 savethedate and an Inferno article --- doc/2011-09-Inferno/LLNL-article.pdf | Bin 0 -> 134655 bytes doc/2012-02-TF4/savethedate-color.pdf | Bin 0 -> 26384 bytes doc/2012-02-TF4/savethedate.pdf | Bin 0 -> 25319 bytes 3 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 doc/2011-09-Inferno/LLNL-article.pdf create mode 100644 doc/2012-02-TF4/savethedate-color.pdf create mode 100644 doc/2012-02-TF4/savethedate.pdf diff --git a/doc/2011-09-Inferno/LLNL-article.pdf b/doc/2011-09-Inferno/LLNL-article.pdf new file mode 100644 index 0000000000000000000000000000000000000000..9b124b455eb6d42432e5e6101ae8fa3a8f58605a GIT binary patch literal 134655 zcmb5VRd5_l&?P!zW+sc7nI(&vnJpMGj&MW1^2%h zO?Fv3M-L!~UDnau11Jr&bg=@8i6OgtfPm&s$UfPV2BVSGa+uvudJC&FnZ`_M(3J6t z_Vq3>XkvtUUEj?et=awr*f?frr0AH4x;Jnxl`BpDT!Z-funp0u*amROs^VZeGuCb_dacFXz|dIWgTL$Bk}jcYEy9kB&o1 zV5A#tl@5{4#!>5EGP`?wtH$Q1XyjJhS;Fk>UroW?{^xE;$9K?QyM8V$8B6}WJi+v7 zIP~|&A8%P|fSW$dHvY@R?#@YP^wrHqcyHb@2<;2fmDyG-&V^<*rws}F^r_?go{%lu zWptX(^z{uczs>yc_;j7Ph^T3vm~%U)>i6uEOq>|*=Z{%fu;uvGRzHzvV_g3+WxF}) zJtLZ>YMGmBk+=*Tu?U(Em4D*eotcT{qi21I#0$rpjkjW#XhTOj| z(|x-Rt(CRK@fplH)d)?KgW81yaNN-vdr4uwR5fAiF4hJ0CwUHbXOO3&`B?ts>Z8+p zPxBgxtEnRZ88^wzEU6DKnURX%U`~Iv?6}_!iK-a z2^-7N6^xqfm;5CA(cB53D=Njy2l}2q<*y5# zgpKRIhFD41bc<9DGd=tQKPJ@Oq&5qb&8#3+vW&CMvjT&3 zn2b!u&Q!JI4&M^y5tA)hH=TO(b4%Z9&O5TfF`_|1y?0Mho)o1=pG=x9o(1%kVlF5Roz!|9lBJfX@DmG#>SIn^T@MmT1XSAXY$iXY6+jT@sBc20$iH2DtZsw zf)uWTD@c~xbRoM5F(AyIw?lzPv|{f2rlGD*a8lOB!uez|H#}{ZH6ClMWHrP`d@hC= z&-3~gCVYeEH*`;5rwt1QvP&JS9tax0PqX1kGbYW7?S~FZN#~LWNX8V>Ay9FZgD0bH zZ@r8)MJNKhSrbfAn?phg5yvJ@yRb7vQ9+Awl4Rs^`LbAEapzXTXA=eK2J$9U|E8EO zIg)L&n?T|4qI=*qZz!&_RUQ9a;WxoAZh*c zarheL6SzNWf(Mhfv2`5O{8{DmIEi96Ia}IbqitYH*&8jNGaI!2b`OVcT3ER}#e0!% zyzUQ{$~Lixh0M6N>Cs9~jfI{|cBuJp9gEk@F7kshTBsl>?za|-08voY&Ap4llJ-Dl z*eT+&+XVz!Pu=)4^k%%Tj}XGH#=7D{fcLry1BS!P4oRHlH)0n(sr6=P4LIc;!|%5` zC}wM$iPBzr^a$k$^}9?`ubf z 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 literal 0 HcmV?d00001 diff --git a/doc/2012-02-TF4/savethedate-color.pdf b/doc/2012-02-TF4/savethedate-color.pdf new file mode 100644 index 0000000000000000000000000000000000000000..a9126dc34efa932cacd69e1740597c71ce228f65 GIT binary patch literal 26384 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

      f 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 Jo{}W?e*wdYp-2D# literal 0 HcmV?d00001 From ded581f0704a16de52c675169d70ce4b3db37022 Mon Sep 17 00:00:00 2001 From: Neale Pickett Date: Fri, 14 Oct 2011 22:10:25 -0600 Subject: [PATCH 36/36] printf working --- packages/printf/printf.mk | 1 + packages/printf/service/printf/run-printf | 2 +- packages/printf/src/printf.c | 31 ++++++++++++++++++----- packages/printf/tokens.txt | 5 ++++ 4 files changed, 31 insertions(+), 8 deletions(-) create mode 100644 packages/printf/tokens.txt diff --git a/packages/printf/printf.mk b/packages/printf/printf.mk index 520985d..cc22d75 100644 --- a/packages/printf/printf.mk +++ b/packages/printf/printf.mk @@ -7,6 +7,7 @@ printf-install: printf-build $(MAKE) -C packages/printf/src install DESTDIR=$(CURDIR)/$(PRINTF_PKGDIR) $(call COPYTREE, packages/printf/service, $(PRINTF_PKGDIR)/service) + cp packages/printf/tokens.txt $(PRINTF_PKGDIR)/ printf-clean: rm -rf $(PRINTF_PKGDIR) diff --git a/packages/printf/service/printf/run-printf b/packages/printf/service/printf/run-printf index 0f6bd9b..49789b9 100755 --- a/packages/printf/service/printf/run-printf +++ b/packages/printf/service/printf/run-printf @@ -1,3 +1,3 @@ #! /bin/sh -exec chpst -u 9001 -/ /opt/printf/bin ./printf +exec chpst -u 9001 -/ /opt/printf/bin ./printf 3