From b495e53891ac2bc71ed68943e0edcce11e1af35f Mon Sep 17 00:00:00 2001 From: cozis Date: Tue, 31 Oct 2023 16:09:51 +0100 Subject: [PATCH] new makefile --- 3p/packetdrill | 1 - 3p/tinycthread | 1 - README.md | 22 +- examples/{echo_tcp.c => echo.c} | 21 +- examples/{microhttp => http}/http_parser.c | 0 examples/{microhttp => http}/http_parser.h | 0 examples/{microhttp => http}/main.c | 0 examples/{microhttp => http}/xhttp.c | 0 examples/{microhttp => http}/xhttp.h | 0 makefile | 178 ++-- obj/arp.o | Bin 0 -> 21456 bytes obj/endian.o | Bin 0 -> 5624 bytes obj/icmp.o | Bin 0 -> 8232 bytes obj/ip.o | Bin 0 -> 15760 bytes obj/microtcp.o | Bin 0 -> 64256 bytes obj/tcp.o | Bin 0 -> 53888 bytes obj/tcp_timer.o | Bin 0 -> 8416 bytes obj/tinycthread.o | Bin 0 -> 17992 bytes obj/utils.o | Bin 0 -> 9712 bytes out/echo | Bin 0 -> 169336 bytes out/http | Bin 0 -> 237488 bytes out/libmicrotcp.a | Bin 0 -> 207522 bytes out/libtuntap.a | Bin 0 -> 73476 bytes out/microtcp.h | 82 ++ {3p/include => out}/tuntap-export.h | 0 {3p/include => out}/tuntap.h | 0 src/arp.c | 119 --- src/arp.h | 3 - src/endian.c | 2 - src/icmp.c | 3 - src/icmp.h | 3 - src/ip.c | 3 - src/ip.h | 3 - src/microtcp.c | 202 ++--- src/microtcp.h | 6 +- src/tcp.c | 11 +- src/tcp.h | 3 - src/tcp_timer.c | 3 - src/tinycthread.c | 931 +++++++++++++++++++++ src/tinycthread.h | 479 +++++++++++ src/utils.c | 3 - src/utils.h | 3 - 42 files changed, 1648 insertions(+), 434 deletions(-) delete mode 160000 3p/packetdrill delete mode 160000 3p/tinycthread rename examples/{echo_tcp.c => echo.c} (53%) rename examples/{microhttp => http}/http_parser.c (100%) rename examples/{microhttp => http}/http_parser.h (100%) rename examples/{microhttp => http}/main.c (100%) rename examples/{microhttp => http}/xhttp.c (100%) rename examples/{microhttp => http}/xhttp.h (100%) create mode 100644 obj/arp.o create mode 100644 obj/endian.o create mode 100644 obj/icmp.o create mode 100644 obj/ip.o create mode 100644 obj/microtcp.o create mode 100644 obj/tcp.o create mode 100644 obj/tcp_timer.o create mode 100644 obj/tinycthread.o create mode 100644 obj/utils.o create mode 100644 out/echo create mode 100644 out/http create mode 100644 out/libmicrotcp.a create mode 100644 out/libtuntap.a create mode 100644 out/microtcp.h rename {3p/include => out}/tuntap-export.h (100%) rename {3p/include => out}/tuntap.h (100%) create mode 100644 src/tinycthread.c create mode 100644 src/tinycthread.h diff --git a/3p/packetdrill b/3p/packetdrill deleted file mode 160000 index 8595c94..0000000 --- a/3p/packetdrill +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 8595c94c9cbb46cb4828ab3db0c71ad5c9b854af diff --git a/3p/tinycthread b/3p/tinycthread deleted file mode 160000 index 6957fc8..0000000 --- a/3p/tinycthread +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 6957fc8383d6c7db25b60b8c849b29caab1caaee diff --git a/README.md b/README.md index ea65c48..81ea565 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,18 @@ MicroTCP is a TCP/IP network stack which I started building as a learning exerci At this moment MicroTCP implements ARP (RFC 826, complete), IPv4 (no fragmentation), ICMP (minimum necessary to reply to pings) and TCP (complete but not stress-tested). Note that "complete" should be not intended as "fully compliant" but just as a measure of progress on all of the major features. For instance, it's complete enough to handle HTTP traffic on a local network (Look into examples/microhttp to know more). ## Where does it run? -MicroTCP can run on Windows and Linux alongside the OS's network stack. To route the network traffic to MicroTCP, the process running it behaves as a virtual host with its own IP address. This is done using a TAP device, which comes built-in on Linux but needs installing on Windows. It should be very easy to adapt to run on microcontrollers but haven't tried yet, the dream is to serve my [blog](https://cozis.github.io/) from an STM32 board. +MicroTCP can run on Windows and Linux alongside the OS's network stack. To route the network traffic to MicroTCP, the process running it behaves as a virtual host with its own IP address. This is done using a TAP device, which comes built-in on Linux but needs installing on Windows. It should be very easy to adapt to run MicroTCP on microcontrollers but haven't tried yet. The dream is to serve my [blog](https://cozis.github.io/) from an STM32 board! + +## Build and Install +If you are on Windows, you need to install the TAP driver provided by OpenVPN and instanciate a virtual NIC so that MicroTCP can connect to it when started. To build the project from source, make sure you cloned the repository with submodules +```sh +git clone https://github.com/cozis/microtcp.git --recursive +``` +and then run +```sh +make +``` +You'll need both `make` and `cmake` for it to work. If all goes well, you'll find the library files `libtuntap.a`, `libmicrotcp.a` and header files `tuntap.h`, `tuntap-export.h`, `microtcp.h` in `out/`. ## Usage MicroTCP's uses the usual socket interface any network programmer is familiar with, the main difference being you need to esplicitly instanciate the network stack and pass its handle around. Without further ado, here's a simple echo server that shows the basic usage: @@ -42,8 +53,11 @@ int main(void) ``` This should be pretty straight forward to understand. One thing may be worth noting is that `microtcp_open` behaves as the BSD's `socket+bind+listen` all at once to setup a listening TCP server. -There are more than one way to set up the stack, the main way being `microtcp_create` which creates a virtual network inferface on the host OS with IP 10.0.0.5/24 and a virtual host for the MicroTCP process with the 10.0.0.4/24 IP. You can open Wireshark on the virtual NIC to inspect the traffic between the host and the process. +There is more than one way to set up the stack, the main way being `microtcp_create` which creates a virtual network inferface on the host OS with IP 10.0.0.5/24 and a virtual host for the MicroTCP process at 10.0.0.4/24. You can open Wireshark on the virtual NIC to inspect the traffic between the host and the process. -It's also possible to configure the stack using the `microtcp_create_using_callbacks`, which lets you explicitly provide the input L2 frames to it and receive the frames in a buffer. This is how one would run the stack on a microcontroller. +It's also possible to configure the stack using the `microtcp_create_using_callbacks`, which lets you explicitly provide the input L2 frames to it and receive the frames in a buffer. This is how one would configure the stack to run on a microcontroller. -Each instance of MicroTCP (without considering the callbacks) is completely isolated from the others, therefore, if your specific callback implementation allows it, you can have as many instances as you like! Usually the callbacks introduce a dependency between the stacks because the system is one big global state. +Each instance of MicroTCP (without considering the callbacks) is completely isolated from the others, therefore, if your specific callback implementation allows it, you can have as many instances as you like! + +## Testing +There is still no testing infractructure. The way I'm testing it is by setting up an HTTP or echo server and stressing it until something breaks while capturing what happened using Wireshark. \ No newline at end of file diff --git a/examples/echo_tcp.c b/examples/echo.c similarity index 53% rename from examples/echo_tcp.c rename to examples/echo.c index 39c43ef..6ebcd3a 100644 --- a/examples/echo_tcp.c +++ b/examples/echo.c @@ -3,13 +3,28 @@ int main(void) { + microtcp_errcode_t err; microtcp_t *mtcp = microtcp_create("10.0.0.5", "10.0.0.4", NULL, NULL); - + if (mtcp == NULL) { + fprintf(stderr, "Error: Couldn't create MicroTCP instance\n"); + return -1; + } + uint16_t port = 8081; - microtcp_socket_t *server = microtcp_open(mtcp, port, NULL); + microtcp_socket_t *server = microtcp_open(mtcp, port, &err); + if (server == NULL) { + fprintf(stderr, "Error: %s\n", microtcp_strerror(err)); + microtcp_destroy(mtcp); + return -1; + } while (1) { - microtcp_socket_t *client = microtcp_accept(server, false, NULL); + microtcp_socket_t *client = microtcp_accept(server, false, &err); + if (client == NULL) { + fprintf(stderr, "Error: %s\n", microtcp_strerror(err)); + break; + } + char buffer[1024]; size_t num = microtcp_recv(client, buffer, sizeof(buffer), false, NULL); microtcp_send(client, "echo: ", 6, false, NULL); diff --git a/examples/microhttp/http_parser.c b/examples/http/http_parser.c similarity index 100% rename from examples/microhttp/http_parser.c rename to examples/http/http_parser.c diff --git a/examples/microhttp/http_parser.h b/examples/http/http_parser.h similarity index 100% rename from examples/microhttp/http_parser.h rename to examples/http/http_parser.h diff --git a/examples/microhttp/main.c b/examples/http/main.c similarity index 100% rename from examples/microhttp/main.c rename to examples/http/main.c diff --git a/examples/microhttp/xhttp.c b/examples/http/xhttp.c similarity index 100% rename from examples/microhttp/xhttp.c rename to examples/http/xhttp.c diff --git a/examples/microhttp/xhttp.h b/examples/http/xhttp.h similarity index 100% rename from examples/microhttp/xhttp.h rename to examples/http/xhttp.h diff --git a/makefile b/makefile index 012b215..ab2986e 100644 --- a/makefile +++ b/makefile @@ -1,147 +1,85 @@ + ifeq ($(OS),Windows_NT) - OSNAME = windows - ifeq ($(PROCESSOR_ARCHITEW6432),AMD64) - ARCH = AMD64 - else ifeq ($(PROCESSOR_ARCHITECTURE),AMD64) - ARCH = AMD64 - else ifeq ($(PROCESSOR_ARCHITECTURE),x86) - ARCH = IA32 - endif + OSTAG = WIN + EXT = .exe + CMAKE_GENERATOR = "MinGW Makefiles" else UNAME_S := $(shell uname -s) ifeq ($(UNAME_S),Linux) - OSNAME = linux + OSTAG = LIN + EXT = + CMAKE_GENERATOR = "Unix Makefiles" else ifeq ($(UNAME_S),Darwin) + $(error OSX isn't supported) OSNAME = osx endif - - UNAME_P := $(shell uname -p) - ifeq ($(UNAME_P),x86_64) - ARCH = AMD64 - endif - ifneq ($(filter %86,$(UNAME_P)),) - ARCH = IA32 - endif - ifneq ($(filter arm%,$(UNAME_P)),) - ARCH = ARM - endif endif -ifeq ($(OSNAME),windows) - CC = gcc.exe - CXX = g++.exe - CFLAGS_PLATFORM = - LFLAGS_PLATFORM = -lws2_32 - CMAKE_GENERATOR = "MinGW Makefiles" -else ifeq ($(OSNAME),linux) - CC = gcc - CXX = g++ - CFLAGS_PLATFORM = -pthread - LFLAGS_PLATFORM = - CMAKE_GENERATOR = "Unix Makefiles" -else -endif +AR = ar$(EXT) +CC = gcc$(EXT) +CXX = g++$(EXT) -# One of: drmemory, valgrind -MEMDBG=valgrind +SRCDIR = src +OBJDIR = obj +OUTDIR = out -LIBDIR = 3p/lib -INCDIR = 3p/include +CFILES = $(wildcard $(SRCDIR)/*.c) +HFILES = $(wildcard $(SRCDIR)/*.h) +OFILES = $(patsubst $(SRCDIR)/%.c, $(OBJDIR)/%.o, $(CFILES)) -CFLAGS = $(CUSTOM_CFLAGS) $(CFLAGS_PLATFORM) -I$(INCDIR) -Ibuild/ -Wall -Wextra -LFLAGS = $(CUSTOM_LFLAGS) -ltuntap $(LFLAGS_PLATFORM) -L$(LIBDIR) +CFLAGS_WIN = +CFLAGS_LIN = -pthread +CFLAGS = -Wall -Wextra -g $(CFLAGS_$(OSTAG)) -DMICROTCP_DEBUG -DTCP_DEBUG -ifeq ($(MEMDBG),drmemory) - CFLAGS += -gdwarf-2 -else - CFLAGS += -g3 -endif +LIBFILE = $(OUTDIR)/libmicrotcp.a -.PHONY: all clean +TAP_AFILES = $(OUTDIR)/libtuntap.a +TAP_HFILES = $(OUTDIR)/tuntap.h $(OUTDIR)/tuntap-export.h -all: build/microtcp.h build/microtcp.c build/echo_tcp build/echo_http build/test +EXAMPLE_0 = $(OUTDIR)/http$(EXT) +EXAMPLE_1 = $(OUTDIR)/echo$(EXT) -3p/lib/libtuntap.a: 3p/libtuntap/build/lib/libtuntap.a - cp 3p/libtuntap/build/lib/libtuntap.a $(LIBDIR) +EXAMPLE_CFILES_0 = $(wildcard examples/http/*.c) +EXAMPLE_HFILES_0 = $(wildcard examples/http/*.h) -3p/include/tuntap.h: 3p/libtuntap/tuntap.h - cp 3p/libtuntap/tuntap.h $(INCDIR) +EXAMPLE_CFILES_1 = examples/echo.c +EXAMPLE_HFILES_1 = -3p/include/tuntap-export.h: 3p/libtuntap/build/tuntap-export.h - cp 3p/libtuntap/build/tuntap-export.h $(INCDIR) +EXAMPLE_LFLAGS_WIN = -lws2_32 +EXAMPLE_LFLAGS_LIN = +EXAMPLE_LFLAGS = -lmicrotcp -ltuntap $(EXAMPLE_LFLAGS_$(OSTAG)) -3p/libtuntap/build/lib/libtuntap.a 3p/libtuntap/tuntap.h 3p/libtuntap/build/tuntap-export.h: - cd 3p/libtuntap/ \ - && mkdir -p build \ - && cd build \ - && cmake .. -G $(CMAKE_GENERATOR) \ - -DBUILD_TESTING=OFF \ - -DCMAKE_C_COMPILER=$(CC) \ - -DCMAKE_CXX_COMPILER=$(CXX) \ - -DCMAKE_BUILD_TYPE=Debug \ - && make +.PHONY: all exm lib clean -3p/include/tinycthread.h: 3p/tinycthread/source/tinycthread.h - cp 3p/tinycthread/source/tinycthread.h 3p/include +all: lib exm -3p/src/tinycthread.c: 3p/tinycthread/source/tinycthread.c - cp 3p/tinycthread/source/tinycthread.c 3p/src +exm: $(EXAMPLE_0) $(EXAMPLE_1) -build/echo_tcp: examples/echo_tcp.c $(LIBDIR)/libtuntap.a 3p/include/tuntap.h 3p/include/tuntap-export.h build/microtcp.c build/microtcp.h - mkdir -p $(@D) - gcc build/microtcp.c examples/echo_tcp.c -o $@ $(CFLAGS) $(LFLAGS) -DDEBUG=1 -DARP_DEBUG -DMICROTCP_DEBUG -DIP_DEBUG -DICMP_DEBUG -DTCP_DEBUG -DMICROTCP_BACKGROUND_THREAD -DMICROTCP_USING_TAP -DMICROTCP_USING_MUX +lib: $(LIBFILE) $(TAP_HFILES) $(TAP_AFILES) + cp $(SRCDIR)/microtcp.h $(OUTDIR)/microtcp.h -build/microtcp.h: src/microtcp.h - mkdir -p $(@D) - [ ! -e $@ ] || rm $@ - echo "#define MICROTCP_AMALGAMATION" >> $@ - cat src/microtcp.h >> $@ +$(OBJDIR)/%.o: $(SRCDIR)/%.c $(HFILES) $(TAP_HFILES) + $(CC) -c -o $@ $< $(CFLAGS) -I$(OUTDIR) -build/microtcp.c: 3p/include/tinycthread.h 3p/src/tinycthread.c $(wildcard src/*.c src/*.h) - mkdir -p $(@D) - [ ! -e $@ ] || rm $@ - printf "#include \"microtcp.h\"\n" > $@ - printf "#ifdef MICROTCP_BACKGROUND_THREAD" >> $@ - printf "\n#line 1 \"3p/include/tinycthread.h\"\n" >> $@ - cat 3p/include/tinycthread.h >> $@ - printf "\n#line 1 \"3p/src/tinycthread.c\"\n" >> $@ - cat 3p/src/tinycthread.c >> $@ - printf "\n#endif /* MICROTCP_BACKGROUND_THREAD */" >> $@ - printf "\n#line 1 \"src/defs.h\"\n" >> $@ - cat src/defs.h >> $@ - printf "\n#line 1 \"src/utils.h\"\n" >> $@ - cat src/utils.h >> $@ - printf "\n#line 1 \"src/endian.h\"\n" >> $@ - cat src/endian.h >> $@ - printf "\n#line 1 \"src/arp.h\"\n" >> $@ - cat src/arp.h >> $@ - printf "\n#line 1 \"src/icmp.h\"\n" >> $@ - cat src/icmp.h >> $@ - printf "\n#line 1 \"src/ip.h\"\n" >> $@ - cat src/ip.h >> $@ - printf "\n#line 1 \"src/tcp_timer.h\"\n" >> $@ - cat src/tcp_timer.h >> $@ - printf "\n#line 1 \"src/tcp.h\"\n" >> $@ - cat src/tcp.h >> $@ - printf "\n#line 1 \"src/utils.c\"\n" >> $@ - cat src/utils.c >> $@ - printf "\n#line 1 \"src/endian.c\"\n" >> $@ - cat src/endian.c >> $@ - printf "\n#line 1 \"src/arp.c\"\n" >> $@ - cat src/arp.c >> $@ - printf "\n#line 1 \"src/icmp.c\"\n" >> $@ - cat src/icmp.c >> $@ - printf "\n#line 1 \"src/ip.c\"\n" >> $@ - cat src/ip.c >> $@ - printf "\n#line 1 \"src/tcp_timer.c\"\n" >> $@ - cat src/tcp_timer.c >> $@ - printf "\n#line 1 \"src/tcp.c\"\n" >> $@ - cat src/tcp.c >> $@ - printf "\n#line 1 \"src/microtcp.c\"\n" >> $@ - cat src/microtcp.c >> $@ +$(LIBFILE): $(OFILES) + $(AR) rcs $@ $^ -build/echo_http: examples/microhttp/main.c $(LIBDIR)/libtuntap.a 3p/include/tuntap.h 3p/include/tuntap-export.h build/microtcp.h build/microtcp.c - gcc examples/microhttp/main.c examples/microhttp/xhttp.c build/microtcp.c -o $@ $(CFLAGS) $(LFLAGS) -DDEBUG=1 -DARP_DEBUG -DMICROTCP_DEBUG -DIP_DEBUG -DICMP_DEBUG -DTCP_DEBUG -DMICROTCP_USING_MUX +$(TAP_AFILES) $(TAP_HFILES): + cd 3p/libtuntap/ && \ + mkdir -p build && \ + cd build && \ + cmake .. -G $(CMAKE_GENERATOR) -DBUILD_TESTING=OFF -DCMAKE_C_COMPILER=$(CC) -DCMAKE_CXX_COMPILER=$(CXX) -DCMAKE_BUILD_TYPE=Debug && \ + make + cp 3p/libtuntap/build/lib/libtuntap.a $(OUTDIR)/libtuntap.a + cp 3p/libtuntap/tuntap.h $(OUTDIR)/tuntap.h + cp 3p/libtuntap/build/tuntap-export.h $(OUTDIR)/tuntap-export.h + +$(EXAMPLE_0): lib $(EXAMPLE_CFILES_0) $(EXAMPLE_HFILES_0) + $(CC) -o $@ $(EXAMPLE_CFILES_0) $(CFLAGS) $(EXAMPLE_LFLAGS) -I$(OUTDIR) -L$(OUTDIR) + +$(EXAMPLE_1): lib $(EXAMPLE_CFILES_1) $(EXAMPLE_HFILES_1) + $(CC) -o $@ $(EXAMPLE_CFILES_1) $(CFLAGS) $(EXAMPLE_LFLAGS) -I$(OUTDIR) -L$(OUTDIR) clean: - rm -fr build 3p/libtuntap/build 3p/lib/* 3p/include/* \ No newline at end of file + rm -fr $(OBJDIR) $(OUTDIR) + mkdir obj out diff --git a/obj/arp.o b/obj/arp.o new file mode 100644 index 0000000000000000000000000000000000000000..6ecee9a3073c18cb354e9d22cefa698571f575a8 GIT binary patch literal 21456 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 ZKaHC9ueyH2U`g`dr2JoRdqy4A|KIBW!CC+S literal 0 HcmV?d00001 diff --git a/obj/icmp.o b/obj/icmp.o new file mode 100644 index 0000000000000000000000000000000000000000..d9510fa8cd4c93bfb60789f23f2d83f1b23373e5 GIT binary patch literal 8232 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 Ad;kCd literal 0 HcmV?d00001 diff --git a/obj/ip.o b/obj/ip.o new file mode 100644 index 0000000000000000000000000000000000000000..0de60b4cdb26d2641a9b9d93de44ca89cbcff05f GIT binary patch literal 15760 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 literal 0 HcmV?d00001 diff --git a/obj/microtcp.o b/obj/microtcp.o new file mode 100644 index 0000000000000000000000000000000000000000..456159bd2e39cfd1df3d65980d5cb713dc998e04 GIT binary patch literal 64256 zcmdVD3w%`7wLgAlCWlNy-U$%i!%I*kJOl*=3_@^tM;;2khLB7kH6$^afOw@+B9&aE zg<4zNa@E?}+Iz8T?XCE#Xl=pPwrZ`SwJr6DVp}SdG?+ zr|Yi$F>pJ9>k~UxJlkDT{NRcg8oO(A2tXA_cFb?+j`u2laOpar`H%OC28>pmXzaeA zfJN95uVrRCYAgA?vn^)u>T1Y#^11GsH@Y^z;cYsTW!T|CUKXbN$@mU#HkGvd02@L@ z4fKV?RAATBX`>qp9qI0TBi_9N23qtiS1G#0cV5#L-$B@lLpy5TnAiREyzXZoBD;4# z`Q2VPaTOWtUF3|#d0Oang(CMtHOfx)CY8sD}*b*|x78@1RR_**8M z$NnLk5}Qql#b%4c=DYup4NKG4NCVN(tnnR7OXA(NB}dCeMq$3|i1As{fh(_&Qpo30 zQIsPMNX{xGYIuyw%fEW^yC#gKtl|L9+0u_BWN>oF?> ztF>)8*^%>^td$%=*NGz6^y)xi^g&@rHtJ?OWV$N4!RABVoiD&u4?+;DKa;B+Gq%Oq z^yRPoHPdjf^ej-<<`=@nH+%<~e0Aeb&6StxjdUpW@psrM$e}Yj`9bdF&qyan-Q0Q6 z;M{o;x482HcRFu7cbR{&^B$d}J-hpfhlfM3?^55hBhk?j7R87jDMGtoD;V^^krim7 zOp98*RYM}Y2-F8S34Um#6$Ua^UG!n5RsYHY^%Nmt3+)H!{oJ&Gws6;gyGxfbX{y8Y z2$0aVmL#jUJxp>?GoYCz=8=qk4AwX`FH=J^0Fbjt&_~rlN9Y3vJx3oRmyTI{!vj>a zVZm51jIdI0L+!I9Jd!2GgeKa`wK_aGe+jF?4B69pFj5ce+F!)ZjA8KGG~5x{&Ul+N z1DyK@@$R3p6Pc{-WQ87bkA^Z0QH#!Vu)Fgqbe??;@f|s%#;`qWPE6bnMh8(RbWWS8 zyXG(k)x%!#4fh!B_r-VC7J=e08mf{h(H8e3fa>*)2<@D2`Uz}-Hll$eW9%dJ2dvhS zA5@1(J)FaGj>tJj&c64!2g8ZBD~`xe34`nttqL{iI40+4hLZ4Y?*c>he9DtRA|8L+I*;R!$wde zX~zHJ2dfK;AKWjFimMrr+Knn3|-{%T;#>t}M$?@)=sCyqhy+<;11)C^m zm)piM$cE0-2``~x1_E{MuT-X_88ke`xT$LtraLZKrnWKHRd$l5KX{zt5Ze{S567F1 z9f?qzE; z=J~{X)#Ufxj~zs#y4CO4M(DyF)hpxXk^}6{oyUMa>~T4=;;fU;c5izXSl46p>lJT* zj|3h;`gU(S3`mPx2HL?T;`PtQ4L>C@w)zXZI#(ax0bOrlE=H&BZAXY@*JE_@QY~6? zXKfoUIgh&SOJXs@Walp9!`bt19Y{vamM;=ev@r}VRsPjZU^*#0_b5$4;W|NhJyHCf z>S))o5N5+~@@z8Qfo83kwLISSUNxL;ADrzzyN!+@nsjZx&+D9QGfS01xcdU(x}P}e zKZNE)=w9)f$q9N6OPtE*%HO$+{9)&cr$7Tid4f;HGHA{L&ExUgM~F956hxo)I)z0g zvUf0tL*2Ej!RXMA6|Z&IHeiDP7RLT{@OcWGXoD5#XtQ9Gi{ePfkRF3{Ez&EG?8UeX z;846fOdK)>S5DHHNC)QzD<06Bf#pEWLCQV)Z_I>(b$Th}^YZ8b<)b+2aI(Ed%q}&X zLXWPe4k9*$0!COuup(*J2jhN}%EG_8Y7Wv0>tL_qPhM*x2I)|{-4go1mX(>w)tSku zJ1yd!yW&W)vfaC?>GD9$v!uW~pJy#dk`>QVuz2Edgw}gc9L|Y{AP^T*WwKJ$GDqSk z2Hh^zp<~yET((cdcXakx-?6yAk~nooVSs1J0M8C7{^XTu1MIua(&@mK{h7&wlB5BO z+GXdphy`>mTzeuItfawBM<>@qgx^`X^e-n*^72Yu-gqo6J>V0jiy9B#gg6{j@UV=D zhZgSi|8k5X-E(l$*NPv+;_ivJO5%AhlGnzccr6ysdtXM&g*%cUANSrLPM%EjA#oOV zzqYXZ9ih^SzxpR~WR|n?yJ51gNYiy9l$tL&Z3=RlCux}oYbynnGc}e`>1)z#Kd6pM z^TpA-Nbx5zRhv$6R^~rc=_UW`O08&liV#OfTC?g=5a^V7Hy7E_c?9FwWP2QocRf`- z>+)GwWNbpjx;MW^Gls6s@Aci7+)?x1zq;K*bBd$7!NQ3NvTwqP5q6@loygN&lwEM! z6JF;q)n~_w!#d%$cL~zV2r~sb(GyYT%mATnGiHsQ`)NW+(ZNe^n+$?)C;xF6w7jN5++#M@kK*Ty|S}utG5M#fW>IHQF zQQcwUPG^t4={~e=f9D0D-DgP1%W!Enz06|7N;o5sB z-HplS9rkcZlkc4fbvqW_&9$eefTqjma-TSQJ|w&Y1oxfnJaV%0@X5|YC$XcI9?{@+ zF?a+*IyFNf>$9T<6bDW|k76*>BARg(*q)jpWC>3kWfuu+%|Tgw{seku2pmt)#)i8h zb7q@nOA5>oO?vD=MBiqGh7)E*mx(yRf+~*3v4-noq^PCQmcVLO)^^cgA8HE^F*H4= zzQ7All#m6f3_xIFb=jb(NBzvyu#1K;Tw?C8+Z0Y zQ*+`#%?HGWHYz)(GPADzW3)+;Nec%JM(~Z(kUS;0?&{k7ftM=Xv4WRj#?7C^qSkAr3#88z@M^Gk?j?|g=&Arlfynx*41 zz41lYx({&dK(JLn)F)u{m?7Unv5pQ-T9%}-ZwxAra31erYvn`CIviX~NaCqI%yi($ zAYHB7V;_Z#R37*r+_B<4BW6Zu;0A`Zj$kW*tOQE9Yr11typB#WnJo2z>Zu|)$Qgl? zL#;(e9)?BH2I;8H91RIV@*~7#M|CCoRW7MH@@O@)wX`?YfSal~BtTG#Oiev1$lk>O zXsqalNiCz_;u}8)C2*d;_S!|omYhI-i>+{>;sBw%hl z0k@cLA#b&O0bTQG9kbaf+e~bz^x_R3fnN89IKJJKqcAso=dXeMK^2out-|#F-o@Xk zd4UJo&Yh?dyr}OP_euBEAaW83dMarm)D#|Le0{*~sZcu|^T>q<^(=4-R-#5HJM9k| zl?t306yUrdfI>oBb^Ni-19J};FIXx{;^7i_>&lXr6MCPnYfq@y9l(EU1S7Y-d7tzB{1 z^Qh%$haWed9M6cee%U=EPeLN@Q~qO4X$N@9IKbBo(s#?|rw|UoCKm!9&BX=vWr`rK zU11FhoBMhWoB#i|E1WT-$NhiDt{jUWUkS%DaVZ#zWy9t{tq(@olA@%rbn6z)aa3p;DC;r8tgV~p-P62iUjCl2=lT+1+1P*gZUyQlR}$DjBO ziea)%eYS*(U?Zi6BGI0TtVWS8NVB8n1JpFF=2-DfSD7sZ68QuIijie!?NlRE?MgoH z+;uAy5NI_@@2oYQy=OI${dXdYpN!XIpRGr2dQhbYu3h_Ar}vLeVAfI%IgB7XMYe8{ z^+0tz$U9J78(eqokLrj;p@i=IKv8SKbTo&cjJU+@eAEP2n%(b+j{!}VxdZYMdVWT| z^hmHO`71^x>|P!{N;fi(V91GMM1qm&-#=s)$MXdz(u-M|WA(6@4Va?l+c;sV$!XEh z9&q*60d1PgqzEz{9blwF+?!T&M3*+zl`Jo>-+wI|x;-r-P%6-?x|TR}lCwf%y=BgR zj5Ob7E;D&(K^jVyqGg2I+^Lq^a!8nb2toPS5a33pK4pZ}q~6D_o{Bcm#T61%yz5C} z50g`Otex7!;=#xhXhAJS_nOlUFc=Nla|3|w|5{_x2yO*C1sX{*(1^S$&b<}^8=H42>i?`?u^FfSW1lz z2Bax%py&;b+YMg>iz#7$yZ?PLOaG(W!>MsbY!(@6kZDfr;Mj0D*aTtSNJq}K^nx;| zi0*;HAP0`bFo93shM&q;ayl^@HDb`+qJ=9{!bc(dLTW_f~QQZozthX*gCD(Sy}Wtlpauy zy+ii}ARlB5;_5LNdqm9(-8JuF8`|rPSt^dt!V*Qu5elh5N}jj#xx;U-d3Q_lUD^pG zn%*_FJ@ro*avWM<0h0w6#>c?K<9v35uQBQ!xx4fHRN9t+8Z#duw~FwZ6Wyy*=3= z*|Y0fMyF!+?a8`SGFBJsXsy30nToAR*4K4*Bx9*{Nrjr5);FbMZOQi7`lkB!)>M64 ztf{3VRo7CVjBTvzh=D`>x`3@WtHr4=R+nOS%V*cdn(H{;^x`(b+IHf{%2*Vrhgz;eQQfglDVs7wMj@>-`v`f zY+&8f6yEvgpKk>JC%+x-_2bpxRrQ|N)RADrB-V5`HYVE>ZLLi$sbu?@^=ObYV+K4O zJQvNIy>toL`rLD4vs*ix8>pE(k}VCfF{3(8&-V=FxS4J3$qlg?Gh&NZEL<47?z-5& z!rzplTD*WyOY)l3|C|q%GJHt>aWfm+lS$Q#n)zSn*mL>Qy`FKKZ_gB&mht{C`25c- zlT8}6l-;h2X3a*o>u7E6)LIm8WA-Se=?Tk%H@}fC(jXu%X>Md?fHPt7*OX}KN(Cxe$3N{X(Q5~@{jqR=L zxi6&Z+G5R3YufADH-S+`eV2{uxFYtCh>eQ>kNh^ZdF^#A4Xx`lBwChgZEK@wl3Is2 z2OHbwS~S+GLMEt-E0Ah$TDvxh@SjL-0E>0>r`+mf71Zqnw>mD9?`>y zPa&R~)m4DC@H`5=iMsZ-L|Yw=u-^LC4ao!7uPqI(=(__==5aEe4}f7OeGczzZMn^cZ~w7u*xdE~Ty)kGKOd6a?147w0d zPL2=n^89}bNYCiIm`I}*>9~PZnJIQ_|C@vBFAPjy-!Xu$dqoY^Q^P2g8~qi2BOw;V zr|aD4oA~wL#Se>Il9L~$1#2DvFQ=e@x1CI)q|Y-;4t3!S#TO8-weC6<@@)Sj32(JF(;i z6+8E=5p->I$eqlIC^X#*kQwJriO@Bd924yuy&Nd(7_H1D$tBUhgbbf!at3ft)FcLR zPJv0pIH$xUhUcwAnF^B_!HK>mF|y(n)LH2jMsw@@Em~u4eFaq_vNmuc$195FURio4 zXo@K>cl8trrTtBwX{AM<}4Fl)A%txq#sTl)KeS(C-ACHEV|j14g%_wwlci074% zY+ea5HQMI3l`zg~LlzK=$9FF?qA| zK8rloGOuRPTQHEho*PZ$7Z#8QdHLk7UsX<{O-ts*BaMKHCgd&1`&Gbc(ZE36yv5Np zzGUcKsKIdhopKs4oN6QY0m_Y1$1jbPaQ83lmES9GC@xv4{M_0j=btLfd*USuiy30_1Vk1+hZ1fFy>o9L84)h8J88 zsuHi9PL>=W!nP_5@nK;KMntH-!utwF<-LcCGR%DnPAen9h4+{uvZLvO1!u4+q@uBG z3Zs3&xU!$4jB(0>@hs0&Bk2UTOSMT%;xciQIBOtPS?lGm!RaIXx2z)VPPbSY*wkTxM~)zO=u}BiGCUhuCK6kBwb6Qj1$o^46GfjqgXhp z^)zmgm?=NH;ChrF1Ev0k%E~EW{De$gL6$()$AA_NDm*7I2NIZaQ;XgdFjBv4Sgi8v3g`6>_##LP71e3UwWtnUemkp*is_qZHy}~Ql z)~hQ_>Pk+nlT?CJZIW6&=nZhcrUHf}`;}8&#>Qgap8&`w^M8N~c7dUyZ(XDW5W7H8 z{!kj>22kad)giB_fAk`xS+b%5mIaCimc0ekSfFSSCyWJ(2A3A*qqH#WJ@g8qBZjp_ zh0()ElyzXbRaDf6u7!26&8@`dR?3wcdlr>(B1YxBqH<0cdlpp`{28dRXHg$38Wi=- z{~L0uVHc_^m-Q(pVzv%|_i)Xzk;G=h6npuk^$?_a&^jp*qPTd_8Nk>&@%baX;%B4x zBTYS__<1XY75}VH2xFQtPVvtxsNza`4$&)qso&Hh$O+S$^viw5B0V)ozryM2ApL4( zAvnc@^e_7kru2Mti^7WH%Dmd%V#4D7R$nO|VD**afmT2*9>j_0V3uZZ5ykXSPELVI z50SKIra8q!Ib8_xA$p8?n(k9Pj1#8Ci-&W<^rhkvMZZCRt}xACJaQmeh<&Sg^ssf1 zb_g-s5-q+e`VwY{hV}Y>WCcmIu!+QYt(=g0uI~4nLhW0{?frg;A~C}t)#uY-V0@u? z12@H)CTC+Ag%INy#UJneC6JkpR(w4trW&$Ou+LSS#8ytkP2vk|uv(M2ofFGV;wzk3 zX%b)O#N{TjmlLZ^;sH)Hn8bseSZ5NCaH82H9_K`xNqjGVA_PsD#8aH;G>PwXVuMNi zfCsm0OyWTPohY+~Lq+jHlgJU%j~VtljBR>h@p;jmFrz6ny=)W;Nn!>&pICk-C&cpS zbFHQq7RR}{2N(tm@@V!v$RrkXYsE}rDJP^&F6M+Z!zG*$%dhGmfdtj2%%$9O<2ncz zk1P5%L_Kv7W<-1CqzLIF<96}nqMrvvMEkQN`vDmzoLcf*T<1oQs6(|LTTz1_^h&kp)FNara?N=0$BW4qr@f`m3`Pa;~a``&Szj^$d zFS0a6W`bQLhek*fq#i(8gHmBh@sILe0$_~y3>!}pKkofkWJJB8)I5L0rO|>Xh@2cp zEOVn9!5aF2z}V*}5vn1d`X)sh87T5e$10??Y9=np8-6Y@6A$s;QD|9oCLRQ3X+kTk z(IRvS`;YOg(8_|V%XAVOTGe|c62`Mamknqy^}K2dsG%#k7q8~&Qs_z^Ax$3&tuCXf zTN^uisIHX8vslQa)|68F+&YkhYp9|4bvy!3ucVrElGF5tl1Vpmn%;vo>9s{$`+6R| zg=ErAmCr&PdPLczKgMZ#1ly#q>h~GY(;GR)cqRG6=R<$)X1hW&qjv?yIKT92dKlkW zrkdG^F=lbXbhFR}<$b`gvSb*3V|!U zBI}q4iB}jaIU{c}v}Dmr##$~^awd1fEphfANdpHkp5G0e$nm7VFk=;By5zyYNVtlkD9{>I@cETLXJTqXxtbS zPEEdO>X;WHuI75d(BI*jN1>I`&}mU}KhrLw?M52Yy8#)}NT;*;O~4AB!HH^9W-KS- zCUGVwYE5EX=|(i!N>gj;ll{Mn)ldu;@Je$+m9!EyiJDM3EtT144wX%e`V}Hh*;&@U zMA_MSv;$+rDLaP~rY*{*a>8_=vT2-%u>@u3a$<~0oX3d?CNZ58MxU}7oG|*7Rdd4V zQ#OkeMxU|^II+?&nA3L%(dR{u)%c#^fw2yAX*j zCb7791rl3LVoCH2aO*OOi;B-hV!KJKD*P76cA3Ow{c4bNt4UnmzZQu*OyUX_=Wdg@ zGLO9OK9fk~Q_$OI602FZ{U)&{dNCM0Wg4qIxBth{_QOEym5nVLPUqZce-PwGDT61A zBo_xqLQ9blvg-8Z0$eg}qtcd}O|gpZqIN*J+}ONLR`KtQnCl(s>plZ`%PjvGMEE+2 zjPU$DI5AzHfddFK*F(}PE7EMR)^v~4Kt?XykepmNo>7*l8#0cHbt(NPXX*s zO%Dy^{CLsh07sz&wtD%51}-cLb>$rcUeN9oO_inqY)?&lyAchd`KzaAuCv z=@fc8hr?oc_v$kQ_vo1pI>xeFJ(JU){3^VAohk5KPNCs>xk)394P%dpZ zqXS{AL)7z$uhC(7rVhUqONRFJ!3@agusr8XsoJ#B@|-!Q&1yBh*w}ZWrZ1-;8QxuO zWLp!+CUsV2)_HfJ?xvv5s+_8fI;(Q#X4F}gQ!90vI;N)UFn-r3?RU=y{GS1TBV(VO zGbnz9cds-)(=Uf(5qyU2_bLco`w_`Dw z{0ET`38KdWxd`p)1P^2X4$}KE>l$>46;jgF@ph!IvDZ535mbt;QQ`T-+IZ9bkx~*>k0XIM)elsQ+#i`p zbJxJ~4@A`RW7pSVP8QiqJ}{K8`u|?UWe>sqT zQCfPA#fu|@q<Ce`o3J{^q)Q@GjZODmZ){kmwJta5a!0C)2+tAVI>x4RBGT5L7x>Dp z0vQe?B0Q2(yp{3j58*8)-6GQQu!taI%OAr$ zAAz?@-+MY7^gWd>v}Yn_9){o3;W5T0D~*6Z39H+PKkNx-*mZ5-%`XQ$_JpfU50Wu+ zPk06m!5A}59sdzNJJYVWht(HNrFW44-O8bJNd>~s-8E6$7a~^rtoaq@CfYqDHTENxGQZ(6IZvUWttW6-xToQ8kQ)s&gi@~Jm1)L zwZ!GC)8)H^@(%^&uMSVmXorq;JDB<#)8!LE`M(6^8=dm&(&bHDzaku>3iLQH;4ven zHo8LFQG6j0*hGA3VcM5o49c$$$}bF$Fn+L3e5X2G$lC%!dsk5APeGaL@agXYrZ{E{ zR~?>VfI9@3r4+XYz)VB2OS z#C(hPf_OGZta$7i=J}t)^>8v&ZuGx!X(kVmv~&NQ@^FOq^a7c&StLBsj6s)cnq?2~ zmdThOE+t*4x0qmgS16-ls$?h#?RgG7*&cU=rWy6`7JJ+knr8rQm#>8`AO*s^rAyu& z;#qij_fn(#{UP4qq9Mxw{~eOh5?h~ODRfTq@| z>VJfIWhgY>bh*HMafF)ZKSI2fjxcQmxm^X(`N{R6AVxNZ41>^~F9qeV55>rh;ZGY4 zgHMEb_c^lrumCrPIO;}rKO?}75bq8~c0arE3>9skT#Q}cf#Et-M)yG@yAN$tO|A)* z5~N3`T!i-g7?O;|n&;Y3pFaXbvr2!wIxY9ofO_yq)%)tu8PXq(TU;HQZe|&)%{YB^ zXaQLpb`dvQ6$xm|AbqhJNL zG+j%&wO$KqSsEJgLzZeCJL1yN*|evN0nI3}G&I*#y3$m-G_=B0S}RIS3l)m&UO~{9 z4Wra3(?Y|EJp~8mKP@zc_>-F&hSNgT#E|;AY3=jWT|})JAzp|Fy=z{mAF(Gh=0?*C z&D^vcd4U|i4CKfSoo0*~=VGUZ!m!U*x;FjC<8 zRMBLzL+FozIbNeQj?kV95LTw}dJnt2cUU?1;HTQ}`FE`e>?@YQ~fg!^r?;lCthX7~le?aROL*EhzKRht> ze8^@B-y#*o&*6#rE$5JB174pOUZUEqVrOI6OTi@F)~511#If0qUzdsHa^nX?&wfzs z`6R%(Y>S&R_6?Q=ws<@c@urF5a7N;rW*KwW22H6kVJgD?r+7HvSsqVVLM?^w3QszH zI^b`ZwM;TgoMxE6G&HKHymzE%U{PtPEVl%EB;meZr0Cq<=k=b}dtNylZlu?{_e@aW zSsb~HVyEadk1~4|BNJmVohThG4@HW4_coZ0$9}3MYr<~ryz+pU)g2@)i z`TeJ3iC$P9vY8b1%Saa6JaI3g5R8a*DY}_ghRmo+PiT3c(CGeDVTI2k_n~@mqai0W zvo{HymbKp)2r>voDp9?k#{1j#P4#i3i?!^PrWnY&AZJhpDSGc<8|dA;uy;Xk5^4x@ zu<95}QX0d=#QwgqKkfl(b700(js#g~#4zYOk~GH-Aj^%~Ppg9UAr(rF?oZ8GUHQ2S zSohJsVZuDa*hCsbMxR$cxj!XNmlgG%6utf|qXo77WZ?*(b}TbREW_ST z#yHz{M*_|fr2>knVw3=wW^-40#q#I&lqb5J7wE!rX-VXwacKq`#y{D$=PUZLA3qL2 zTr5Jwi||`qq0nE83cU~x!1x!Uy_4~s9qr@s%ES1z_4VVgnR<5O?8$hSsRhsPuWjiZ zKW%(dOMP=^L(0YsCz^A^?sfEMX1 z(xMe0DYU60fmh?`$#noQfaiz2Jk#z-M1JRm{3+on6}#o|3qIqAIwPf3e(7=F-|AP4 z_fOyJ7rf|Kto6_G!a3n~AJ3%bgjV_m8~xC#Nq%W`hF{#}`)?E4E86In^@_gi_j}YY zc_doyS43C&Ww-f*KIs>3^=EFS-{^5aZ*BO@KK|gneyD2}7~Jj`bort18RZkX(tCwd zujosBbr8Sd=xt8YFQ$5;Tm9ly{>ZKVpsoIxb$$%VZ)Sl0BIfZv^EjwHOme!D1WhD7 zyv%4&`G{Y(*B=DI-aOwgj;{4fp=4ULm;IsPQGI++jf__KeYW~@x6*IPaldq}pBFx} zVq)}7{2#fd%J(C^V}9rna5?Vxd(*O1C24?43cLI$epmUYafSX{(cOM1de8YNSxAzG zdcE%#^@`+2UnIKX&-x?ZBz?>7z2}if{CiaiUlAT(PEF(AfHJA@@DK_W#-f+|QR31G0oGRIy3-%L z(I0jLHJpFY&wJTFYpb8PHM(G;KanrSM^aUh(&>I^_(b22b{>bJLdVa4*!SP^3(@|4 z=KDia{+Rjxpy>O4Xh!t1=t_U+QNLub9}S;Y?#F)Q`;Yp0(FuN4cz6YgQxKi$7v3Iy z1Tv4tKR?o6~EhU&!ZZm5+N;IXTn)iUofDov6IZk52bX7WkES_|cdAl1{(q4!`(z zzfW|SKP)`5+#kBq@3+Ap^rk-qX5Z_V-b4L@YKY+R?wkn9jFR)Yblz+7qA`C8!(Y-4 zGx`2E!Qib^*{mWuG6(aai}P$oTZPfzG8n4zc{>VQqJfp9lx7R;y ze9ymS6NyK3xbc!#{Jb;Kc}G-KQ~N{iP_L9fpjY&e4=;u>{jd0Wk8Xe`t@QnEQBoBI z_zgGWCntr6X{mMI^6|8KPR_%A$s)fXJheX>{p!>O=l}&Vzu*ysEEGc{@AdQFg1(K~ zVx4fK(QxBVKX1NYfL=p%3wpiLYoqTU_lJ-Jbww8(kG=&1_>~YD@uG4S9M}&%T}_=A z6k|FmY!uuBL|_>5se&))-gr_uYsT%J;pDy8M899`Os` z@(bSg`>taA5kC*T?=cFkFa_BG{S%4Odwu_#e(@ju^2z>$z5ZD6-0Sy^Y(i%#-s|^^ zISRnx#i{GZ+4# zNq#XzKx3#jvq0bFmv;J<=qxw*@qS74Hh;h>6oHll zF7=Be*HTErlf%@H2boj9NZx$XfABs2K*s_T0&5&6Gs7C+^`jrKH87qnm<<0r?hi0* zO3kTY6&bnYcE9+`+*-}_4{=BgB$%RX!bsh{z&jdhwl?z z;16%aB;W?W?<0Q2R)1g@{Nzy|V?o|3idHm-Sa6o#`_KOAXf+Jp(GI`&)+;$ehhlzj zR2+(yE%N&!_mSv*lC*hxK{mKp09buNC*Z9LzH0~6AhD6Pa z6wLQ49wkbOg{vl_-0hrt)E|IxFU2v9OGdx!S7QFb*8||!;97Do*<{dVeqoAYees=- zh~fj!_xo@4hj!9$2?hoHuJXsgN{Ep&{6UZT1NQpEy66{Ep91`@qN(6$=A#&J^s*dp@k<{(iLJ1huy%f?91qgY$^;c(@;_DjNGMwg=TtLdcrPRWPN|7uPIao}f3jnJwyp z=nY<5b0=QEZon(qt*O@f)@Hnf+uDiuO=evlqy>7d*WB+ur7NG~@OA4zIbjwT)lw_nPZEQVDw5xIqL?&}(p=Eo3i# zb2{bGM+LkK7q5uTo_J1dTGiyL39)hOQ=Kiz8EZ+Jrg|jn+UwWNz-o2e*^^`A*2cy) z)^%)ZsbAOL+S1zDF|M;^V^a$jef0H?4rJnkAoW*`BlYkljMnyX^xiPuzt)U;2(?bL z>B}GE8tWUaw8!s2clNy6v z%`dsuShUEAz)HMYH@&DSc;$UwZK4+6Bv~?h$->0E*^6qWG~Vc! z(s&C!fo*5=!4%K=@=1buUfbG|^x8T*)+LPU=u4t2_9I%2^85~ZsvT-#)56m(4}BUS zG4*V(trbnh@0z29V-JN*}`b$1nKTvoN%Y za@HhrUGtHKp!c&0X{!aHh69wmWe>u&6Uockp-I!VNe|YoYiK}+=>QihZn<>*8s=;w zOk;CvUCP53dhq5y9>SqmM{QWY0U(E2Oc`04}U=i#!MurEhe4~ezu#g zm{ZGE?MSX&Z-RuiTZBTb8!2c9p$XzqgC$I;pvFpYDwNCqDaBHJ`% ziI?h8(wQfD`eBF!*GL1|vgNauW4xijmAGWqyyc$ui3TqPK{}H49vPKxjggv=BoK`I zu-8_%32xV50)dGk^w|pzQRV|g6pGTHu?UKjUgq-@Fo1qmf_#?3cw$XmN774NK;}t{ zxp3C9<%wAs6@#8gLzwBdRI;NEHB;xO#K!ifRFcO-qL$V_doncWY{$@-($6Y!-{VnI z#XU8+!`*qrpG^_eOVqEcYidaw0-CV1fpsFWu4(N$oR}e_p8W+7j$4S(h&PC!JU*Zl z`8@5zqVJMp)1cnj23x}1(i=|cfXgsBs6iiGgeFU@M=wX64QL9~j#&kLVk!M0Dq|q@ zbGFAtYL=`3H`vY$U878=EJ}d6MxKie=L4C=T+dXd*U+29(P1mCly-Fd=(l2scwjoY(;Xbdba#XoN&M4&s|f{HYfX3tr9gc+JwqHOtcjHXPzq*S}!a9Jv0R zi)StMjL(_5ujvWg%gI2Ppkcm6JynJUo*Rn|shurvwAz(N>R>)dGj$WS5nauwjPZ&M zNnf++Y%@_IU`I0-836GaxCX@N6h3o<9@CCyYpZLR!m*JXFdZkTN*WPlcCJG!<_icl zk{QeiW!&`=8_Wb$fC=hVKIN8{uzvIX-l8ln2VPzu8~RZ#8Ve47#=Wr zU<=X^myWwN7$q)1!^Sah8F44%sfI0wP zdC`_t;!~pDB}-N;oMRS7)V+A5pm?u_rV1$bu|T}~qYp`$2y7ffTS2;T+JSjR!3O0X z?#zOij(t36Cd?|)Iq?BB>aP45BpSLmLK+gk)5OE{IuSGQn&p}Eb6#j-o=0)u6qjRh zJJKG^UyDl519^mN!UWwJ$>+{n%#k-S(Q3Z{oMZ(-vRi#~vaY4Gjh%;wMs9)N>rsf? z9FNn!sbPt{fMzLXPDK$u?Jcqj>cBh=`7EDdgLM^+J49*Q1&c6lG~1cz+Ki#-;LL*7 z7|zNXwUWH*Ef{psOjvd$HU@^t@~OkLLh^yE&JOC&LC^DelYnMGGy!U>Yp3t$Q6HtL z4Yjw-tn4phof=Q))tVlfG5rmuPQ^6Ap;|81)@m(;^(8nS$s=dktorh!+d=p+Gn(*NqvK%-P8H8$Fq+W1j=x zdBofzP{Tybpb{)g8XF-FhY%h?XkwS{gUePePAr{$@tjkZb3wqvbe{K!xaFkl^}N;t zS1kLMEcHx44ceUIB=1N;4&K**@Emy4Vo)fUxA;ORTf4Mo`SMkXxhod)%ps9THy9eK zjoqEYIc;F2hcL51N;5RG3+<7lGk1?x?9}KotPXSFmULj?2LgB(3}3HHSE`nzNtD@C z!laaf4sUO;=gM+`Rl>xImf{JlQqh5%JJ+{lhH{?B;LR7zyLgLErb@vYncIsaY~ZKl z<-v>=9!V`@;xj5XGaWoOXIv@mpQiiTlWl5hco!Zhym0pHb7Nyxtid|C(`@yPo7l;z zi65Udp=!e9s)?r?9M3%9z|#`=juf7Sz(4E|(la9a38UvD=%_F!JnFmD3tdwZ8d#7U z-G!$(1_7skbnruOHAN+#49_m?75*eBOrAbBw~UB_{P{ut<%Hwl=LR)D(mzB5#QQqV z^*nxnQS-xdgYtVMpC6jk{K&GfmVZ?8`2o-%e_p`*yrj`San(ZH@0 ze3{_-K>KyTiO(+K!yg&|c8k#8D=O&2`gaQbeL}AfnLi@*`ksl(`?ApQclf_A^snOy zVLJ512Qoa#bJ*cu3Dc8a{1?1Hqc3cX7W@RpHaa+F;=BlQ6TSJumFMl@T+f>=^uzNF zz%d$^q#x1$4UZ<%p?oe8e673@$MF>T8-bIY=7SRQA{KBOgNe_tWq{`R2mF4)2lPP# z2gf~}e=hhY!8zUm|BK*w6rGP*=Hv}V`w@TsOad@{gK>)B*NrxW`o)4e!AH{rwKzCl z;oK?s+oKrvxS!$joo3hYBzaEI3|*=uw`TS@5}8@FiLBm09qHEO;Am z@~i0*I`l>4&t##$Een2M7W}a+_>Z#Szs!Qaody3>7M#BC(Nnt@11EhO@Tv+OcbStn zRPa0*PkFt8ya`$OoSOx&5k8N}c*^sB@L86Her*=KEepO)_>aWvGIZz{6h15X(h&x~ z+nl_;S@`VBg8x+bga;S~ysp6Iud~n}&w_s>d?GUN>NiL7F_iYyE<=D*yIjVfMa5U# zWN11w3w^cFKOhrHUY|hD<$`}HX5{B}2`-xi|4{6sU-6+2BU8N(oMz~Go{!7jzLxHr3;Tb}$R+dq4dqsMyBo-pN~ zKjQPRJVf*_Jzn)MJQ9>`r}lsH=pyZVx{rSacb9rJ!#R_u{)1b*r{1neZ^@sUXFY{+ z>UM3_oE?l_ef>{d_OXkkS9kB%6S*%Hb0sc%# zvK`Mv(2eB!woZC#gr1S;oOm`ev9*l*_}G)@#{uHle|WL>Vp96 zYqzXTCgi@m+?b_1ky$h3PqFYL64>wM$0h35;SR4pO6WK>-R31JNm!DSpIFL#1d2LE zCK7D_x;XBqn42%SFn1qtcaAos(Pii!hiyshmxJ?qdeRC;Gf)4dQ`G;`si49vce?l~ zP|3F`B_)C0q2kqd_gyg zl$N}YN%(?D%mqF9Bu{G)x!z<i-#K*cqBAPtNi>#*T?Y3+dO&{ z&;)`s6+cl-HV7hzn1F}_8wQ!mG^oWqeibAsPFRn~5ECszl~}h_6b_2YZN3ay1S2+l zD=r{5H?1={G8Rzqy%48P#sUhGRoh#idLZl+$p{SYkz^ESq43wG(6Zi8Gkjw&z}(BA z{Si9Gn$s!xR0qc&ljUQUgUfW#oA2PwlGgn*tykC4mpk-(C7pEeS0&xz;JWXmpOH}h zb40H#4*k`F>%NZC-y}HgU(uoXb(r7Kah8LBThiw`_*0TTU(Q%=d1v9D+HJdqPqy&y zS@;wSf5yVkw(u7PCppit@LyUuru^P}l783XLv5<^EFuOtNX}{ar}%ck)ebj_9X{*e zYKJd5xZ2?k!CgE2)S*}Yzi@En|C)mrNcwF#yZrlNpMeg_COatq;SR3+Pj~R;!naCr zm;b{Kz4HHogDd|ZJNO>q|9lqye{<-Se;x^fL-kVrw0~mb9|-?Gg1hpsap;wQi-Rlw zP6wYZ@?9%9ooqip?$GZQ|2gU4%D)#i5)Rc%{inC!F8?hSZuggN3%C2r%@%*VzkJcc z=~Da4*DXGFf1&j|9VDmC=P3)P%csOXPg{J>1+M+;d5hlW^Ol9v<$J>CXcj*6uzsXN z?e?hHd4+?koiBHAwR4@|uATQ=IPIOQ{I6R0bPMk#^{YIuN}4|1L5JchPk#qjKc;mq z9j-jzw{TmY*Dc(Z=K@Fokdw(#36e3pej zW#JcC_y-m~$HE87J|opzW8w2He6EG>ws2eiK5`$0_}Kifv+%gZXOD%?v+zePoW^>! z+hGg0<@~dS+wu&R{Y{eRLW|FO3twpAk6Jk0Q`351w(!Lk{x=J!du~c!DL2Td-dYRa zUW^0|!Y{%=l3oAQj7i-3%Bci&%*6`|8C)Sy+v~Ch3s&d#eaZ>+wzPNoZ^EW52sr= zg}^h3A&yxVA3LtDvT)nqKIQN^D15${1^>E(FBST4JNQb$pK$Oi1pkSHHwgX<2X7Yq zgoWF7h{(RP#?O?{mk3Ttdz|WT(c65+SUA~pkMNn2h0m1^{YMgKKjz>X&*|@{(4lgU zq)KpXu=v~agnzT}D?q3HXpeSoll}Pg?jYi@(k1P79|sk=FZD3twR25m|7NoVK425}fq4 z+kJwClL_>`(iDr2-H(=9_&TfJH5P97>n4l8UGHWKr+OEN{kK|t?0P?A;g?wTe$~S5 z`12hLx8u)7xvxO>X|nii6Wq1W7c87aY!*3hv-sF@zHi}kEdDe5A%TPHy$b)d9iOo9 zW($AM!q;1PekBq(h))gvDW8ii+^%=0g|}Mtk6U<~h5yvT?RtM_;a6MqL;53u!<8o~ zxNA@P{yrUqlPPun{c($rZO>0xxZPg2S$xg`AGO1`ES&i7mG*kj;$!naVBt3ZSp!fQ z2kB+o^9vTFMWrl`Plea!PTG7ly$;64zAfmah^BtW2jvF0w1kb^>ZJ!q{d=B!ofBo9x zW5=uG7EY`ydf^Ah35(CUNGqSdqdA-VwcTH07QWe{A1yfPYu9_8g;TwAq~22&o+Sle2KApIn%BQb|6Q4JP&p^RlJ`*jx3G~{&Q!PHWz6&j!_*dlO2ggMg zA6w2=i{9qbW#PnUj_}!@h0kY0Tn*ceY)5-)blmFT7Z}*nXX=TT{w)#w4u}47!N2O@ zO@iO;;57EovDd+GGO%}_gWo8)`kl)2AA&za4T3}QH)VbGtb^Yz_zMpHkl=?L{11Y^ z>fpNGJM7?p5&AbA{BMFEaqy6=Pu_Fzqe4&5ciDR73H=8SUMTnp2QL-;BM0vzI8WLv zyXkr|hn&g62Mc}F!G{T6;NYVKFLChG1;;0mGx(1aywbrZ3O>lebsZaX@M%J?>rwTG z34%*E<|k66i?AF8MjXb^#C1~qPnsdXb-%ukLqA&jolHOR1dZ`UAv1r00SVf+8>=AB zRdP)@)%%~qXS##`s>A@Z9sDs7koM^4P(J@vZqgT-Q-CiMy;eH-CZWH=!M|H<09xbF zq5LnEM|5cpLx^y=T*+H(FKls z9QsY7*TW7@&$-fZz`=hm{_qP2A1iXc?ck%NgMQ%PH;EtWb9^f2Y>6X96fkfoe!GtQ z4nAMneT;+8kw8N41=xI^6gyww;0J~O5(mFs?AGYuQStu{2mguK=ieRtg!sef9Q-=L z?{e^0#10QQxYoPh!L{C(9GspTrsH)7A13xc=HS~z9{mFcYX7eYz24_l{Bg0{h={32 zar)z@bWCvY^Q1m{-kuJne^2VY%)u`*WL}$t|4RJ)ItTxn)Vtlmmk55BgRc|4^!~ES zqx|*$vf|2L?;|U&{D1H8r|0A8$dR+sPnZ5u=HT~;e@<}l(?#Fu4nADkx7oqJEB^UO z2aiiXyxGB@B*Adp;ot`)e%|BY%Ow4xgLjEMdf!>~{fXEG-zMcl@daXkz3;4er}lS; zzDD?rad5R8J;zRm@@bWEt=_@MNZh!=!RZh5(y`mY)o%2hIUUOXZMwkmUk<)k{CuB- zt3AK(;A&63Pp$l)Gwi)zJM`Cz|NPCtYee6EVn5~cyrc&^_!_b22nWAb{O}A1KTXE# zvmJb{_{jxX@Ffm@ztpSu$5qbN;-6a``f7;}cQ|-T^uNc!KQ4B7*uftY`42dFtELaGzw6-oirAkW{4A*#UnS45 zbEUM$KnGVp8ROtLNk5w6;9nO$7dZImO?BQ92iJamxr1xJZgOz_lUExYe73~xE(gC; z`r|GK|B=|?HV01#pS=$LIqeq?zDwHuj}HF2*e4|Qt3T^{Sm)_3KG>m;iapP8@S!rU zo#WuzALlsucJY&?4*tHh%avL1YaCqr-8Ki;e)ky%|Bl2fea=MnrN4+q$6km2q}cNz z2iN}i0|(df>t_!BTd~hjst||POMeiYjV*gJ# zxb`1?9)_~d#J@jEyMNiCuaI%}5eI)x;?+S1A0+FDpF8*oiA%3JxbpqIgSU%6pLFn@ z!lzi`7G;zCf5$&M=#N6tq4V|poVC3gB<__vxIRA-bMO)wZ^k+JkA%;;4t}5b)rAiJ9g%;zgAWq> z)H(QD((hUv{C9%?n}g4g`I5#()pw-uzr~@yM#hUf9sJvpzSqGYm3sAgFy$W+`#kN? z>$>ZZgD(?#-pGRg!NJvk{_f!FpS{K2Dv$cJK5wS@pCoRNa_FnX4wD?bQTp%s4ldou zTj=2W+`=jc*L{aZ2VWz0=x}iDUt1hp`_~=^pG*qkxYNO35&yi~!QU4@{HB9{%dqkO z+rh69yZzL`pOOCdqJ!)AG+uM?Nz#5fBA2$yc(LbK_(9>L`#@@+*Q6bP=g{9GeE#m>`W{7* zjFZY|pZMDl2lpji<>1@IAI^91O=6z~S@4w(K2^pGecn~&(YV^~&}&@1-od{m@$*&( zkBdCtcJRwZ--jLiH1U)D4!&FT{egpjTH?<$4t|%k@AD3xBl;e4@Xty+>irzG!yxG= zZ#eW1%KY%CgMUimq<;ED`Dni@6gw$iFZJqkxr%Fl9PQBSbB!Gi-Xi|C)4_KTLmW3d zc#FvY1qXjc`r|ho{4}xKcN~0`%)7ql;J1n2zvSQ#i@vWrc%}6B-)F(~KCRkE{Wf3Z zRs7dt|9%dx>qngjDSeK}qxUlv*Zb5n9X<=hZVMb-_k~tD_=BQP(!pPmbz-}N=ZPJz zckoK#bCZKtX*)W2uK0uAXH&hVia$T#&=-jv_B;5;s349XJNOErSAS9dtEFudWvREw!G}v69_Zk4k!Os9|4i&N#liKxlnWfZucVhac$e7oatH4v z?b77n_Xzz42fs_??{e_V#16Y0{Bsgt{=>l^lz#W04t`ANA9V0#ffkyq)HwL_GQKZ$@M7_w?GC;}%8Sr2iJMa(+)mM;_ZtLuH$uHUt?Ic+lykiVh7iKkiHIHB>pqj!QYYgI>*5; z61y#O@ZU+?zSP0h&#rdx#WD`w@8FwczO>K5pO$ui-NE-ryZ^z#k4t-n`(@f^l<1W& zIE5E-efq144=`J=B)nqq_q24f~!5>7DG2V z^s4VB2UojwS$xQD`hCGW9r|P9=ijvG$u#<1qMtkT8Xw+taBaswI=IFSUmna-eO3Ox z4n9cw(Qv`l4*DIbc@DkGv&z9$o+by^darfxd!%1%6K(Jp;tZ+Ik?*YdlnzE zzkc`eHHTiho%gOqPxjaEN`?j?fy1@ia0gFFf3Ff;<=5|4u5jqpZb=7My*4;_zVQFJ z!~aV$7SFrOp;tTHYtfS(CP+NlXW^vp`@-jGhmXp0%)yUIJlFR@RA2r6R=K>#p?1@8 zWVYZ+|AD;c(BRO2Ao{jB^!h!p8y$L$Z~9(|)~okdo_6SUzWc6&tDGM?c!TJhFYk{i z|If)hyG(G^Yp3Wn+@bF_&E-`&^!i=28i!u>+Th@-*NqOYdfn~ds@FaTSG^88xa#$+ z;HuXYc^~E#hhEpcZ#ne(-8g;kM(w706$(GaRj8pKTvpQOV_?-z7B zxcb8<9bEn4a}KWZf6c+Q-M=Zg%K3MhH$3Rzf0FsxL5GjdGhcD=Au^A8&EccpQT~fV zukD^EA23q;XuJ1!aMkN{2mia+|6B*(E&CxC2(J3-_nucd^x7^>4zBfH>)^x0&$l}K z^*hsFaOjoKHym8+eb~YKiTqDG{Pp|RFFW+g{~ZTc{vSHHzUSUc#zVD_eph?2;My+A zXPkp;y)zwL_s!=z{PjDdS2*;_zs12XA^~t*8{?Cwa_VhqCzI{5p-=K%-5 zQ{ux@4zAw;`MHDZeStR}T;>0>gXhUSKQheYL*>`+&YmZ@%CGzvI=IerF1Gm4JV(Ee z-s;f5AnW4m9elHl3pZMPXkK)Y^xwS>J$=8Jjt3oln(RwF?(os?xWDMo?=@_^w;X(^ z%zysm;QCxj?r>93?XyAV&*g%LkWKRI_mvko^lHz`99-X%zskYCBK)s&aBbh41lM}+ zm-fBi!Ecsz*7FV@{qESW9D4mO{vREBjg$U}OgpGNeI5KS(vCv}S2^|j)>9mMV#al*Ek=!Bt=V zI~D)#&}+S4ba0J_U$yx7kmIoEb&o@@az5tZ`rP%89bBKgKJMVp3;z!VSNZkta+J!x zi^eOJKjz>n&v*w{y`~9H{C)h>=eSln^na0fm9Xf^)%5R*Y;fqceYZLI&m>-b)xlLx z-A{7$deWg+`JWM7<-bqt_Hzp-IVY2HINoyjsQ=`QHu+lbqd6wsTX41iGU;E#9eS02 zqJwL@=zG)3U*(@~@h1`W`GMsQpFhdQO2VQiQS|S_Y;fq+{x>`LnWPAgJ01K-vTt_3 zgRA^cIQS;R#ycpu+UGUFf9=q#Jb!a=m>waA0c5x z)ClIQ%IC+@&e|@D$K--^rGI)<%Z1`$ppA2?-JI9y6~3}v zSCvZQPYGA?pZTp?)6wBoG1}g05Kc5C*Wf$jO)ZVBAmr=1HEY_F8-!LMe8YTgQp+2x zxv3?oMNp|%Ro}XPJ^p;JSJl#*N><_TUXJ5Wy-Rv+OJ^0nW{yA1o!TV4lk4!Aa{9x? z|F=gB45&+Lyi|VGa`EZY6)|V&z5z(vlhh>D0b(u=ebJmN<$e$imsB=tU{7F=rWb^Z zTS~6y{nV*fGu-;mL~;&5P-UoG0Sklm5rPB?KZE=}+?& zSO3|-T%D-oO_S)?^L}R!UP!yNGlBJ3|9?|ytOw6EXR4oue7F83z+9eG;@ZpT*Ym#U z7}lj-0~!~jauo^s#r+<03VvPME0EKZ{40-{B3hp0r?K3Xe*-X=CzYHd_3M5(VRX2( zR|D&*{_Rq~`YF{JZ~UyP`}Et6B%^vmjCr9ObPOD`_OWF z{v0y(+NSGGg7t8?v|j@a`GxEMB~m`-@KF5~{w^+vr(1r4l&_X`gwng^A3{b?_P;~y zf5_@TbgN6tYrFJRH`Ud4BmH{bv$D@Y%|LzCElO^+S) RRQ{R|Oo@Y9P|mLX{}1yHTb}>` literal 0 HcmV?d00001 diff --git a/obj/tcp.o b/obj/tcp.o new file mode 100644 index 0000000000000000000000000000000000000000..db69e6af2f3ef3342a351c737faaffe36cd23cc5 GIT binary patch literal 53888 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 ay<1Cu+kUyA>8gAu-#8rCToONa`TqmLQS@;D literal 0 HcmV?d00001 diff --git a/obj/tcp_timer.o b/obj/tcp_timer.o new file mode 100644 index 0000000000000000000000000000000000000000..3b9e52129b71e0595adb6bec1e8dd9c5e7e2a294 GIT binary patch literal 8416 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 ZVlT_d`PFNUIaRX%5#|4ZV<`#U{=bCu`>_B3 literal 0 HcmV?d00001 diff --git a/obj/tinycthread.o b/obj/tinycthread.o new file mode 100644 index 0000000000000000000000000000000000000000..25100655c2555fd105a765a62a2c0048d4761496 GIT binary patch literal 17992 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 Q{aCkBc$W0|OV9uR09G@>cmMzZ literal 0 HcmV?d00001 diff --git a/obj/utils.o b/obj/utils.o new file mode 100644 index 0000000000000000000000000000000000000000..d4b540a61fe90a6ad6dc8621420a6b94584e1d77 GIT binary patch literal 9712 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 P9rH{daV`@PWdDBwHtQ$K literal 0 HcmV?d00001 diff --git a/out/echo b/out/echo new file mode 100644 index 0000000000000000000000000000000000000000..8ebd1b3e603e85b109b70e83cba5c7102c00aaa5 GIT binary patch literal 169336 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�f@pkt}1>4HzefLO3 z@Uepv9EOzG>6BBObm}r);S8sOl!>OSKp7}>b9@dFsKX;@gg%*a`srUh$aN3zJ&L!K z;T?o-cVQCfq#ccR%#Zq8o3Ucy8kpzJSnv9BDDz{G)oO*uAgi@q-nY_9z33U`?oy22 zR5)5Y1@|{4HKSL?T2pWJ$b0+e>=!O^^oGqdN+0`W zq(rk}487<-I0YQGJ<2-skhU*S@(Py1Be}g053ZE{jSj;^*=T3r?0Z}HNMr{kTOeo^ z`nh{r@_b<18>rTy#%wmLU?XLaDp`Y7SquZy2x?;f{b*^Hzt3~`4Qfk)B*Xk@TH?W( zil*Qq3FBOP((VvsF>1$yYL*|I4HSPypg|XZv@*tB)0-`Kzdk|zZlgI+NU(hd$*&p4F#Vma+ zEM|{`?qHdE=3UUdS$~pATp>lvKadtQo4nCOOR=?}l`gpXi}z zNtIR|3{#^uT>2YH>0mGdv!Yd2C0N~2S!5v@l{(#lcnj2y)GQ0I`fb?Q!8%)PskS@h zlp82!zWkwLOJ!?OV)*Lu*L^3(-ves=9lII=h|j*R3FB|(Yv?&14~M5HvV~-@LDBRp z+tBT7f(UQqQA%BWff+Q!Gf)Vm-S)zPPaZ_QhSWgC&6b@i9&xf#lJiO|Bzu@|NdHUn&k2T6|(21aeE2f_0g@tiMs;6Mn~ zQn>{y3~?hpO*c7{xzi~mZ6G5YfxOIuTPAAfbPXn$O*@pVH{2$&Udr}%DS94xQSo(- zi?1tK{sj9%yj`VzSV76T0P;YiV^{ki?34VjMg4oR4Q)ldU~z#)In{-722p-Zp+prb z!Z=n4>-%<@GT@v2?>2WD48wKwvtwINhvU%=nYxeglf;dV+ zml>rbQMSG~FR6r-1Ip_E(6bS)jOYF~+9Vt~95E>u z*l@GK*XiEK#f?tf<=kdxMYl8T&KljB+;udCIjYdknq(y`YqW-(g!|4Wk>jq09iZ$e z?kM^{wHH9Oakx4T`(&SDwBCVa?+7MRW|nL;WS^=)$ASz%t|H`c#M1y3+D{-S7uu-@ zLEEW7HQEygqK)=9`#)`{|8(lDBk_0EtvUF+SmI^3jz!#e>p1+q__h>fZtTVdYI7@A z@e3@TEkgT4!ihK|SEAQ8anBCU$SA~N4980U|DIX{+#bO_nl&5kFZUjc_a z)jLX+=B0>&wm`fFEW*2>KHO`2iE|uG>|vg!=k#<3E%0pN&605-O52;Cn5htp5U2dT zq&>PbSw0Nq=b!6o3MaFMJ5@F%t1L{Gk8sK#NS04amS<{|CnU2*I#re?tMD8LLxlSr zqnz?flI3qus;WFoqlEc2S)-jQMTuOMHba8vdv*tlW^=@4cW>p+& z?T>b5v|+u8J1CS!MyG@4THwL-oCH}5Lr4Rh0yRURU}qcukqxcE5qfkR zhM?p>rt?R4M7P1D;BN2!z}n`q!y2(akG=Oy&o^#_h7Fvv(r*LV4KF2dPh+pWQo{G_ z8VUblFO%?nd$ELl_96-YiKEY`e;-Un9}LQeGLys#_eEb0$nH9tOaxBo42{ywf#_ce;{J)Lfuw z_je0g*>7_7N~4{Ji`%VW!8+Z)hdo>V%F?p3GF*P~Zu@xHw*HBew?{i?`MYns8jfJJ zb6fYY3@8Du^q!1PxrXP*mION*1lG;4kNqzQ^fXmKdRRQtS6exHb$vJKxRnF9tQ8=Fy<<64@EDq$K!H(1gk0@+E1V+oSJpz{tnm)&eHd_fx-0S(RWdrVxP0c z=@fqt`h?Q7dD~rFfR=DdErN1q(Rqs0xqnJyZnIJGK@35mvAAwgy3? zY3Y-?=2?i$*5Rl$H1tCd*+EDHPG|GvlK%+GK6nFA2NA`+kkrB3Ba&m=4+=Fuy#7@CJ+D(Iz)=i^(aL$Y?QOzHV0s8jAo{dHoG4pP4$7?Dt(&Z z|1VVfyFi!1Je@){`9NOhq15GWdC`;zX23v~VS*wV!H-C<8!MAT*GQdE^hLQC?v7>) zQ|V**c+j3giqo9PSOhBg3jwHEaJGg^)^&9&~AdB-51|*D`3!(iDR7>5| zQpRGS+LrE=UedVJyFmO-5fUWyJV4XNl@cJzUQB0*vV~qjH4FPFTp4i z_w+^uGT>1}fPt$meREG2;6h!H_2fbwW{1`FeV@T#Eq`2)wl{RN(o4v28j;=A{{48P+MO*t+%Gsb`F4LTP#<#%w86-nD1ES zk75(x*wg`$%K;8mi*`l}cF)Cg25|nmQ5`IyBgCcxOS^q2Mpn`s>hm0)WlK|zT_ZzY z!w}**Cf@Gjs#u`mKz8GLZXRn=tAl4K96q0cK*fNGL(`+dpn^qgA!F^nMRJ{75bVZ{ zUzK@nvJNsAt2&4+b81&8z#0RHhE|&RPG3aG+v!`b!!SZPnd~xU=B`!FlKU`((xbz? z2Vejd4Wyjpbfh288ysCW%fBbWYj6F%)FR9i*g`i-68V!Dfuwm)OKM}#g^FFM)Qu2d z_6+I5*K|@hJLv#6vp5vhg@0Orm1q*P6`IAvfp9DzW;ezsM8W{Xg_&8GuuC|dUF1`! zecX1H4Jh8K;a=Tj2*~W!`BBgA+Lmqry)sLX9yRkqUN}I)iBhVa3<9hbdc7fSGHLhk z;wl1^cd|2jZ2SQ=%0NXqfwa^5b8&aZ1xw`z-3(*nHs7`|4nA0y%V}5&LYi5N!5; zxYK_Cjym>(p0S`1FJLA00@@57tWDfpCOhZ(H+XIzgRY7BcO3w^+(xKIz4ZC=ADi9N z8+8M>+o1|E{}I?a+=#a zGwjK2;6v{IUqXTK7NA5VFA>R2M7)VeP9lr-C+!ynIud&7bfU{ z>Jx7|eZxp!>^irtZQQ$9ODS5oAzJXnPXF&mG}b?1g-0|L{9ahcbJzaPnExqUIfQl` zj(+Jvn2qqy>P?Qg8IO+plWb%f`8VmKXQG9F#A1Z$ls=Pf2Gtw7{$N*+WYGxpet&QE;uyZ`?Ss#-rc6~Hh z7p3033Pg-q{jzMt>j zXl`1JzYUxDmp3Tm$CYV($1Op`v$2U#P~f8x@actE<{Q5PBTo}aASNjDqyLZEKlr3{cBA_W6=2x)L;m*-M?->Tw&0) z4%6A%fahZTiTWEf7I^RtSkO8+7jvsoQRyos?rnT75Ob~=HdKq!tl$e=JTGdx4P-WK z=3hKLsjK3lv@p&JCN{(=0nBWIaHo%Ml#VXX=$+xPoB@@~HAu#}VX%K?>Si=NLTsO< z)EcFl;8<$mSZdSoGMsj>GxTuk&;@!#z2LxMQ0;2iOkvA9RkNNPTG-na4Z*!jrw#|$ zAAx)WOnfUO0*fZD6&~Z@RHJYHCn6mQK6lY>Kf?Vp&NfD}i&-%Px+cxRLrr07S`tp2 zbpzyN=Qj3_;(4qTz@N@SS34NE(RQK(x_B@QaBy)7A#ADf4vVcA=aARUIXX(GT9x`1 zLt7i~M{7C<6O1{W7YIp%;X)jQL-W>a_p?R0pZBYA;$N>k&=c|KJUq}3$^i@W{|xKI z6pT2bNsRDA`2hVqOzG)<=w{TmgU`tBY1$;QdT$FUjc#6v&IQ3LK!(4C>Y_&JT3rz1 zDnUSE7+2Wph3><(0TazYLVj5tiXDMsXJX&9nQE=`mb>y$=RALN9rtcCDzSGfr$Tsj z&)0z@K6?fN`$tca9sr&WTM^|%p=tB2#IRbwoOOR&fx7J+xbf-xDWUl6iL4u9T{t&- zOmAQXj%j!r9GD7GrVMEr4ak&<=gw@j*b36tbEnBoIHt@y!Ha*bo{OZ+nT}eL(~+v= z%t#upl)KIfA!Z~s72PRQkp@t+kxYWviiVGh!P3X}hL~Dc@_h>!EUrlhka?I|<)spE z=+Q&7FsW+bnJtmZP9^oH=rMRs}cQp#xm*02m<^2 zzZ4zlgAPC-TnoaA#6$u5MFCzzZ*TfQRs3M7RJ?)}OI1Y$d^#(_=ZoK^j5yZ(@o9Jr zH<^VA4bS2I@K@4W7sRC2$jRyeVAHtJi1UY}Ckk=fD8RbLZUBAkFgxa3BoA*pl1Ae! zDRggG=qEnJt?LU!KgP-e^)Z;_90Cos+iN)h=L@=N6vf@Kt7IE$`bSEhiCwHo@afpOz zP7;np3Xx{-1~U_7Cpy)83S#{j%G`ILOUGS^JnTYrJNGoQK$+U4ioA;cCrr}A!m#sF z4`fq_h`C=Q$Z=mKR07GwiJRdDab#biecBGgD?zC5Pt{6HB*&JNnYyCng~&~>@b0iIH07ZACAGjDTL)2EX0^n8R&N+uy6jE zr~^3^+6}uYv=4Zt5%)bclOiO;F}O?$Ns*e|F4b4Q6kn3p>nig79pQ zvk}x+0$P9nbEUd!PNk0EOI|^}*fr`|pN%Br(XjODZS2*85PJ0i)vME%NUwGyupfCsBt=MdH5~WvurA+gtbe^CrV1ILPoNGXt zy$SIKIIBbp+Jp+BQx1tURp9M-Thg3Y^WdcGHCi&DAYSyB+-^YafB#9g zoUpUvVsbUOhbHNrd0u)*p?--fzJi%^V}UGe*t~{!z2H6^UzUAPy5~lpmn$ILt*POz zBnX#dD|v0Fq&QHtwq4T;Bj+cdJPct=eJ&f@uw;@=J4(%zRe@k$d}+6*fH?GiNAw~n0ru(#obKzl5}^zp?=1iR zS`J`br(Gz4Z&3#BiR{M}3bw6lr(a&n)$=Mel&|bljN(}??(B5IF!W}Mp!MaFPid?$ z@YLBu*eG!%Csz1rGXGkWZ_X3XVp+_$2+OAvU?_lIA2jBu0?@w49HI_#(3uAsy8wwV zq$k~nE@YHS*aaburd$QUC(A&}0nkW5j8~kg3(d1AIF7&)j}`j#aRjmJqP;LG{EBs91vw*^bldTZOR2QqX>V!4vH}EG3j1ZYPXjGU#iWl0XyrX zk%uAjwXhi&aM;0k#y3oD9RKQ%GLqUFNJGkkOb(atR4bCJ!LGzx|4%us|=v&w_L-l*^lEi&3^9@$`;k!>|BPs-~6yd@)UycA>SFeodR5II% z#}CA2hvyR5vE>hZk0f9I&ivLl)X?94wHf-xy6@}-j}Z+g!?t62uB!8{s`HHj zb?#-I%TnspUBo)5f4ZMLZ!$f~YPLHNA3F?X7#ci8lZDCTM}LNW=v;BeB6EL$xTx+!NPt0%GVgoz6o5|&;D4GZ)Svdv95fT8YgBJCz35VQqcV31=7+Jc6ZeO_|s5YcxOqP5QSegm4Ye8lkO*P11%=q9$q0M zP8eY{&M0l!p~`H%^D+-NAu@kwGmGlxr4pzBV7|<+a+!04wS`w%P?eCAl1;kpLhqy}yf5(;k|11O5;bHdr zin)#bnc>XF{*k>GD75UYTF#-AGOU2rJ1JSu2VjzY zbUS7+t5>TT`%~7X(&evmDwm!H*cgKG*%v8lWzndX-XmLj$G7xmxAcx{=^fL;oPqCx z%o9hjk9WJ~!y~{h3ohU^%T~)C;L|SOcm5(>*pDvkx59H!z_nD4*s}=VkI=1V$jR_H zP%U%fcfm${dJP1Pu2E-Izx#o9lY1^_4+$nJbpKA=&0&a{3$9ZzpyOaA=xLK(E~L3d9L_OCq4*E!d~*S6*z0rnm{gEi$%0wplG#bCJ%cQj z#r*@Prfb6rPvW3Y!IW?Vd(LG7HhYqff4+fB3aP%SXaUyq-CPeS^s?t<9{;nPUQo|m za>0KdN70`})u+F51>_K){qB|MfjQq3B?r-fb%d_A%*+-Rt_rH#X8N@h?Y^Y=^mY@Q z=;8?KRZUc@CceWax*wD#Tzx5i$IF{p$wfV@O0^IK06xN*|}r|jKfEP}0^`35XR z30nI$(VeZ(jZ^5(C%RiTy8PC26^_2k({b$Y1`hVp0^+z>;dmZkP=tPq(c9=EI;fMVfyFQAV1gY(|>@f@n8=RW&|eHBPD7o4+gK`Xh@= zRPhv5OsUyFV6oW+r{keK=8bCAZ*%8bZ;>YpziSHl+B};>yaha@?$i%9kXEWU&Q8WI zykWQtn|*yeTIkc9^Cqi0Lg8rltyJE;th%9$vOWKxkj&!XO7?U>&JbX@R5C?92asU| z`*ONqe*tM2!9Iexqo&V7;+q~-lKY@Qdi6vI&@RR42|E4zEdH4)eoYk*XR)8f95tzT z>i?v6#PkFLFTro;xANtcKy^Q=r%vwQ{VP-}04euV%6P9`eB2ba_o8aARJHf5%h28* zz9Zxu%Ho$*v0oL3S-cU&>?QZ;rE%nyR&LJ0B{^n=98JI?ggtgO7TEo= z-_C`$;7l&qK^8D3=MEHe=E5#=o(48pq@va>?jdK9HGwhv$#TeueJ!Y9I}25*T89~< zN&JvgFhvZFdxH=~D@2%ndlJYt;H|vF1Dk$-;L5*0^570{;J}-5wb~vbvfv4DjIzQO zE+q#fOd+$O<_J)L<+lj0LkX_~62e=@C_LoIv)BN2gomQ}sz`*_>BM2>af!o0o0K2; z0j8uhfQ|dNEo@x8EK;&eQ9^V~YQk8x6|b{psg@R#EY-VQL@aONvF1?GuY$0)6Q|>KX??Yyo;eAMGLK9PMQ( zAT?a6r6@!~s_?<|UXRMlMgRuHw{wj)MAf)VCB+s$jIM;H0ZP49Lvswd2m52sGcRJ3e_Y^ZEhBD4iOslYZ)BRPMFJa`x@%h zSV3zka$6IgaL&L>@FHcAUF3gSsXMN-p~k(ruy(e31P1pPT#KS_V!xaHlkAZ$QXIQ9 zJDP>x@Hs+$^n*Qu(qErj~Dh6F-=s7D|h&KfD)w|%N5RXt~!;0)j zJ5)a8?9~-@FM64q9B7CR)HnTz4|R_3qQN^}@b(zg(+j`HQ|4_xM}j^iv3l;KTB8|p zR7^iTf(=u?gq$7MZjW$FDZ*VA$^JJCkcq$HZbY7;zil3-^A%il#HU}0I9$rFBCy|q z%%zs50ehZ`Txc>EFLAGPluiy5=^zrz_P2gWgk? zEAGn2V^$5s8qLC;CiR%r#N`_VA6^`PG>2mPlN(tWjp%HSIz@jj=y&%nhZh&JqN!#w zKd24O0W9D#9A|A`p>61u(!_slLuv4}k!uk@f`p1S%lwWq ztR0x0eRxWGZ_K|#twY{`z?=QAH`Kpwg}Hyzig|tmY!957J~%U8yfxn0!hN}Cx7s;? zRyT-;!po|1>NM{l4w9feh=U~K0h@#`_tY!&U6`J-gj&brfvw)5rd+g5i-iEQi}BdS z!lGK?1`M2B6f@qc2T@njXd-HyXW1F)(38>K%6<_k&A4*U)EjNoub#~M4aXIqFB_(Q zohH}GxM&#K>)z=bF;az@BUF`MW&aM=PZhtnJ& z9Ir$5u+dKZKBLM%Qin%LC{oEm2`CTJNlm~>#dklx|HAh}d=JpZk~27|1uiG`B_!db zzJV_Or&=(}Hf@Rz`G;tV4>{O10y8LKW7KmFJx^npqe&Z0VtjMR_-%9+FIhH4ow7i# zhVfD`NgYEjI?s5z82zFO>`%m1wk&oiuRi2*&dL(sj4(*4p(?%;*9~Z%tDbCJURP>? zgjynGApBDlNV)2VjkQ9!f9 zt=1gf|G&l=@T}*|&58924&{rq3cb~805}4A?lb@!eIw2vsqX7wTQ>9j5vHk-fC6iXMV!j*5=uz@9&PCt%0Hq~``k zLnb?Io(MMk|E4hKAn2e)+3snwK_7O7|E3PS);y*9@c$MWQ*pE=G}OqDfIY&Eq9EQ7 zvvPD`+dEl-(XS&3#@@_UQ84yqj*5b@H=)iSCmHMHGZ?tCI!g_3N`Iv4o~6%-^l_x3 zj1Jh5v2T-ciQ_E>=ABlkN27z^qGEtlkb@pc331y>e)Z9AmVn7j7B>eox1!4|`;(1g zJ@`{rGzDm4Xj5P-Q$U#R*ri#~z~L|#W6=_C?CCBCjPwszrpN`kYUzL;cgg91QGmc` zMnwTsR1_dE8V^6X6#&0glz3U*CV@l2fb01!=zkvczYF@`iRL=>1zBHy>boWT{|;zZ-vVVE?tAl zhQJ@z{tn^re62V%(sRB5cKiBkA0N21pp5X)u57x)`vVCLct^O|bf@L>Y;>JQ)* z3c?ER1<|1CjT$IRN^3r9QtIzH_JLM>)og*ySe`-acQD(p;5s(W`KO`3ai@^I!^b+e zc{UE?Q=J{n!yp)4Aa6U80uKv%&rTK%sAG_&)uGUKsynY8&ZDlg<+{84W-CX1A1;{0 z1Ly@T*)GMSqpXABIYPpAA9pPUOBNo05f!PiHuPu!P&HT`3ihb#2iV2)cV zav!o^yCk=9l>v5PGq`uyho>-UBeK2uK5bX)e9l_yMOBr6vXhN zDbb2{9|bH_q5&I9F_RP`-i;fp=$t$kPGX=u>&<1S`c>>mo$=e429rcgs>g~StMiGkfS&I4^6|W*VqHSXeuAx ze<80uZ<`-2z^l)9m8SkoHkxRI+IJ&tMQD3A7VHYd>$|ZDXYLis58}>Kw+r!(c1Sbz zC4CPzq!=ah^iciUXym?VVT-ihFh3e!2_w+#zZ=GCg9x_WFNOt2F>IUbEzz(BuD&=z zGO#Jz=x?P?;rSbRD5mx`)NW(#o(q(RuvS2ENH_rlvJEcHeB{I1zJS>Blc zJ`s3dbC9v2hbw$kN&O>j2s#-^fIaw~p81j(MgGTW+pAF*{$)8CK> zSVvkY6lom>r?U(WU(+^SNo|mJ#4I|%Ki8Rbu00z`P=~5^Cw*0}9M}w$5Ai-B*SQJ$ z7%t3XCe_#9IoIR4BOcV)`my@1SPeA_D4-np$tF<%d9q&4Fdzxv=<_ooc|;rY0Tg-> zzbVIn!f)rD?1SD5(WWrfxMl+(8>4N_a$CuCXlL^(bykp7l~`qiCFNWRSlmd5_8|97 zhX*->0*+7Li8wt-1ojIzi@KwO{tFNCJY3#}v@`twod0b5g1a zWg{Rqaa364pbts8X+n2sIu*T0%ScQ+O9|3hmSvZIGzDAAtzwvEV}0Z~7&}ubf%x1Bx26JTp4MaKak2>oM@R_HX>E$SWS@X zQ_7yHiW5@LmQjJm(}xGTw%47dA(MyXYB!M>HD3f)E%dyl^haU9ur>#0=t@1vO}BFY z$d-g^6pc%R%U_ZLy-E@Q))Yfurt1i6TrV#?3q7_(^;iz#=&{of*t?gDIDlVsZMfHJ z;owP{UBD_H_`{Ws%dEN#qt_)r#$zNxG!nqVvt#SbQa;N=4(DFI7_$Ce+ZJ%h+>YaBX5;z|94xZcSnGv{BwLnM`7J7(~xw4vVx!3!fdh@`2CO*q?~-?I|-zSB%!>NjyQb zl|Fu=Q`RRvA&x*UE(CC#1NZ;|xgY`{8SObAfQ|Lf%8O{9Z9u`T#Js!8V7@)Q!Xc=D z7bLNA%>OKpy0*RgZnX0N-l&9!o4UaE);iv??+V2IuWcetPDgA+0dl*=&^Wp4B$vM( z%B9RswIz2to_oTxiTM4BjL0#xdGP`QKrC|0nZHZbvl_VN2QIF_kx93y&LcZ}FK|*y z7}J^A4ll1vNoBtGB88cC4dy2&z*{>FXjSD`D~%xTPp_OQ0;Hpd_bZJx?^n90HpN%b zT^@6vax+iV7H`PStYri73E)R`E1p>_EpiZ~O*RMn#oC!5&Ri@z195Y)Eb{}r;-2F~ zUc|H4B=XSk9+TiN*8bHb_=~lFGKutGtc4-VysH8Tp>y1gh);h?K=qyDtH3(%@@1A8 z7#^O3llb%&H{4XfxrfE-y&Iq=f#~K%pKwq=9Yiod@0(O%Qw<8+n{LNnNDP~nO?T*M zS$oqrB#OKZ$>P>zv@IFs!LqL3nT&SnXnRw)j_qvP!x&JuB*E4?VCx*Phc(zrgcu-J z&!yt~H8IV#G=8uvG7WFeAo+pQH8c3}WFcR@KDP683>7(WHkY_()X*qN9p%bKn<`M> z{uu;_K8W4V6n`_z^%m^L?ksu~?E;Chi=Ij%=tP4QoxHBLjO}rJ!c>XTuymeZB@*6E%vy(AADK+U?WHlOro7!ua%)&>%Vfi!>uxnEb5L zEdZ4rpZ?Kg1-ya4jnZj&Temcb?Ia1YqZ9;do;x1md5P*NXa+W5Yc=hu!tqPHpHDc8 z(R`|Ko&lKr!`IPh8 z3_Rsn`P4A%o^%XrtbZ!wwzmNT!|ZQG%DPpq8FC3P)aWWb+Lfh28Cb>;Q8P{8YP^ zGB4w0O!3Sg2y)KL^U;3Fbo(%9QP*!_A1pQ3y^mf}Z#hnc`B1Zs2Ysoei$VbHPi4@QXl{AgZeeISh{ATc5OFr&>yvq(Q}LH+ z6??B6g!Hm;DWspvo)&+WO9ZD&tJw@o;sHG3f%#RWCYz88%k={}135|?gc|kOSay_G zV|^oV5#>XSn|+jj9B9%Vn{wo(VD%X{bs*+8^ltYg2nM*$0<|!fOUzF^NE3crEUdi{ zg=`P+3hO;m^e4*ARvYJIjea|$(Z3r{kM7P~zDH3eD-dq$G3CN0 zY{jU+4rnk-#(g^7KU(^~qWfc18;b5K&6At%?#~WJ_p`wEU((%E_Ic>0oTTqK`i@*; zhV9iSVc62w(d(n$h{!&rXL1h0;oZ8-^uYNHY zCJf3Gu92myQ3_iZI*l~45jR`)1KG+)8$)&6(jemiB$F$IK8YEHyR4TtZUM!%rdK`_r}WJ0)q| zBlA3ur8&D}hDM7gxLPECY_S-);Fib_!5=Fxc75`CBdNRCzS>{tJsXsL%PDDgm9Udm zIVEe7C90E@Hl-NXRMJQV=jG`Rj#U#=l_vSC!itaQ7mn~5qj@3t9-NQ2@OB2}n`DtD zr8vUJ@0=3LRYE>~;gmc}8eDrT`i6y@j~xx@=jLc+O|-Bft+!+THI3bL_r^7b)_l_L zZ^^K*6M-MQZb1kp{OeLDlJX_sqJB+AWISJgJq!?;%RvC#rnSB2pb^U#O2=-Qe_#H(&R?q-nXD#Jm9wb+7 z999hb7B5_fli@8dxO(|($Txa2&T04Q<5T;nX9{pP*0*Ftd_bU{+x(pi%Xk--_G^q3 zn$xkoL(XIVW;H*o+cMr|LOT~H30dQyxH=uh!$3jVtLeL0ZIw1FAJ4xIysy`<7ne?7 z&eo)m9)`<@coVJBO`teVby0Dtrs6ns=VwA2eO7p7k+!tKGH{x^8i>&- zUAzH))k`SDAnC?fkkhsl-o$TyLf1C)`^hfJWuuHF)1>df>ps*#_y-PlTr}J^45#-`;AKT3XC8&qwNRIa9CD6z zk@FPl8QCs#$k}ns=aTK~*QUwV3)y1dG}6Z>cjB2xIS8AGQ2R*c96bcPslTdc z191xB4!a^@yfNLuxS1G-;#a0ph^POnhJYW8Z8zJ5a5cv zRn=8fD$47^p(+rfh*gXzK0+%)B@u|F*t?_xoRn8B^_CP@RCvq4cz9WPowqDfRYGi< zZv|iM4GH4^REI4cgszh6s;ZD+H73opFT%J^C$F$Ul9_#TVz zBz(`r*N5+y@tucnU2Vx!Bk(gzEUUb(NCZ=~BvMuusx7LiF0TrQYI7^mA!m41=48-W zFmKL+%PH$~T}o3Isw(y7PO6(c#!`?|E~u#uE%(lz?Y*pU{(SE(w|GAfepQRDSPq`5 z(8}jxkYIZCzF!E-wjLR~6S*Vc01vl!j+goj13vwz^WrLb$lbTT#BGwzzf` z5T($2&7`{PyaxeZg}v;V`1e1Q%b=eH;=ZSwz9Sb=)wHCAnLRcUo)3Po3jt7~d# zO~T7y=OAOZco#~Zw~jD_%KysprB%fhte!t-jz7528?N?NMplMkq1|{Cn0JAH&Q}L5 zxYB>wT;02t6{-r?uJWERn~0`dK%!O^-53c)LPg6ESH)8#wDWX&+%v7qS!Q@6Rq%^I8f%sJi0PE1; zDfDPQ6!|pq?ACM!gbT}}=`AX*ttqN0<_v39Rxb|~QOL&Jg{zCi`qAv6PGxaPk&Nx- zYEBh+*HA42yj0ilC@Lz}xO9^#ftf>!I3F$n4RuAzg(yM~7hy1_K%;#<$rnMtib^5u z+Uiwq5TS=P*E`~%%i$OHvDkj zgITMn!=#5fX;}zVlrJq0=ax*is=OD>_U3s{ImKJ$J%6^haNcDLXBHLYW3wdrfsR0) z)s@Mb$uh?B&N};?Y13zXdFHJAi{{MrUu;TiifbWBSb?-pZ75vJtbtQ%7&bTzn^9L; zUROtNhW52~jFms$7Um;QLgY($q1Aa$B5@DC58%uA zk9ElS=lM1R?rD6tX!!QeS@v*a^inK~GSLQU$*ORuj$P);Te_?oYVOJ?E(u49E7+YS zQ!c2cqFWp&rA1YdO4d~stYl^p=#b2mI@CYRfxl_|Gv$+wvC_dW z@a9<+ARSFREG@HiXPuT2)<369@J3vXfxej(Rka zFy9%7A4vP=txqJbz?b=&pNr``(17W6g%OMw`dm|8i#{%OFA8emVpqtd;|;BZ$m;-y zrH4kwAnEF2mdDD$E$bV@Xw3pIZr2DhIQ+>(g5R_74dPpk?+^8N3&OvWt26rMz%s&e(HZ#y-r_uK{Qi*lVq-kePgLm%rPMR`3@673Wb%@njUa#e~=ID;{R+qskgJ5Jm z4HENCnzqtNGATA=Kn@~0_#GvXT`(z3l|!kAtE;^g)mUkm6}d~~J_O2j?$@d#*sxfI z*{RZ7T8;To8j942alLrn<(Dn+=g&REi`iGaGuBKt8o@9Mqehk4p>Pr7&K*P)sCcS| zR#;^D=BlsK7CgX7|uU~($dc`8yGHTG?)yo2PE5%J&4 ziZOcFO)grn*Hb4Gcvxpr_DN`Ld_+QZt|F|dZkQsQNnVaJ*iK!j9adRrI`v%*4Ox-o z%?qYs6XC1DYRwBSpJ4`lc_kK0^bFwpW1d`<>|)D0Xn#XYkT>jnn1;HfHh1#pg6BkJ z;4_XHe%>u3E$b!dc;9)6#0JFME=(l45OyN$L)bDWkywjx)!alPYZTHKClY)`{KQLe z+=Z|f;WC8x1@MXhgnvi49^r*wNhCTD-ZLLp^%2$;pgyjW+;SP}BW%7L^%3qsxD4Uq zAnGIhCBpRxPrU;55ylswKEme_W{tM216L&yXCU0QD3O?ta6k69DiD76>O|shgw;47 zd;;N55$-}b8i$R05#Eb%Ec}{R5uSmt0B5fA5k7^Z;0lD#6rn!CdvU)11j29OV#zLq zy|}!w7vUV-v>JPeWu1=o{TT>{FGGEVmm#b`n2lSDcO!fg;S&h&!u88t2v^`{@Lq&- zDp7x|WsR*ueS{P7)Ibp75`;AfZ$sFEa3jJE2=^fDL^$q7^aH~45N6|IY$?J#gpVQ& zBFw2peS~dzRH%jJc$jMg!YO!ku@hk{!ajtrBh1Dn-+v>_LpXOO>LaX0Sc7ma!WM+j zA>4rQO@y5YvsR%#!ZQ(Odn~I6VIIPtA`Bw@6k!d*2X8`s<|EvIuoGb?!jBO4A)IhC z_|LYiH3-i@_y>gZ5x#}60^#wuKz<0%Mfe25LWH{z#t`-)e77F$lwGODn5o;7wtXiq!(2CV6 zwc0wM#d)Y&>r}N4*lM+Yt+}7iyVlvs;aB>*_dfUc$9F&U=Q_+u5x#J{eAS%fDe zY(n@0!Zw7vF-Km9aLV1_M|c^+9SGk+_zuG2ZQ#!s#)$~C2$$RgeuSSOY(rRaANUdO zk8m@>srQ2);j_O4Kf=c!0Dq}rJn<{^8wgK&2>k}aj}f*byy;=|8wlgSM!$h@^&{vv z5E_r7-#}Q6(8ZJe(-GDqT#v9Bp|b=02tRxb{0Pr~9Q+9HMffDbZxMck(0Ky<*f?=N z!g_??{to;Iul+sv5&jh6g$Tzz34Vkdp9Vj|+nxbG!bv;9kBucKAgo7t9>QjXS0HRh z*!CRw5w1pfJHk5VKc%@-vB?t<$nY}!fu4OBfQ{E@FNVr1%8A-Md)Ii z+KF$2AK{!ogCF4y2-^{^co+N#pLq}b2+jAwkMLIrKSKB=LN{v|*$=>va09}X2zjAe z%VnN1*Dy~@nB@`2<%U0|BkRWQaoyd+NHN(#4`3KI_>IJ`aTMCNjYuppHI|tX53h08 z8T*&*J8++xDx?bkLWJ)$qRlfwUzEEVzt@nygZ%oUuJ!mGHy-!Ae1tY7mbkz=AR4k` z7EBUbwj#N0|L*R~5&C%R0-^=K6Ul!7{@^_P3?Kg~(ygZM?keQZ=eJAEocsvV0~5Qu zXXo)x_4x+_zYp*W^Xxm=w{Ir!D==2i&67Xfm%kk8H%;#Dem774>%RQ;z#lcGyW7j- zH+=rBNS`?seRv+;_VGKB-Z%|?TW|R%i+J(Rr@+qxzNHAsl7g6_X$D^ z>j?Ij8o!;@-TgA+K8>~0w}Ee2JZ(1Wd7cfGz74y9U)R#zeQO?nm(QO-oea+D?tUc? z|E!O10RAE1_v?*6Nzmfs7T{k2{)paq>rkJ6CGf?VM_rVMU+3dD0KXRaiM{cs^~m1_ z{3hVf=#95l`TV~Qp3dHjF!`L~gO0p8rEu#LO~ zn%`s2d;k-2?dS{W#OK69W3@E8sT+ z&o{05{;@at{dfxZO7+KfcW=q#zuxB`3H(;zpUNxa9ex?l1OAZXcn+kOeCu4Fe>Lzs zfXC3>qhECqQa)D!|0wYNd*c`NuF{P5oT+k5oi4}2Z)du!t_0Y4Y` zy^UjE0e?R5n|jN)t`P;SA1M#_B+GERxi?--1EhRL0{=Jg?=64xfd3Zwe^>u8oiL1-3e}cj@iFxD$=qo{UL|*$j)Nemm z0sq4C?(XW|G7j&t;eOy>27Yh#`z7Gt1AcGwz^{NWIRSI$-tw&@M1hol*f16YKPk_? zvA%sHfnRsx-pgPf@b>_}xB9ah_|3rIlBfSCzW%F#uU^sJUDq4GxL5vx9|-*3=9w=6 zzi{Q==doV_e+lqschDg)dW9LH9 zJPw+xd&{xb`}sTz_^~JB8BQMlEg#Em|*f8g2O-M`7hZ};)<0RQQKz#B2# zhpxpl>%9D5*pq+Yf9UA${&}AKEx!CF;4i`Y&feN;8}OF_Kdd*u>duTT($)cg1Mna8 z#xtBf@_^@W%r` zJdeNL=idVSnU|wa&BG7z@s9)Fxnb}3mG1+8aA$Y-k9+I4)P#Zd2QXOt3i!%A`6a&m z8sHziV()EWGVsp>@AT%ke(?Rb6!`5|;uTN5@%B5u{PTf7=jy%Rb8G>A9M;~DjUNB^ z8jl|beh~1N^v3s^Z@mxvHNgKZ5C5@mUjS>9?bq(T4b}jE1Mt)H_?vwG$-w^(_`S_H zmID7R@S}S3tJ`K({=i2!c6ZP3jkj8S`CEXW3jE*m@Sphj$AK@!+T%re_?~;p_klkb z_z`*jAK?2xki;75Pxju1Yk6ckNTB2pI+?EFWL!w)y>`AYsiq3W2qY#*7Hw+KOOk( zdHB11KSr=dTzE@&_lbFUbz?*R!N4B@JYQ+%%eNQ$ew+#XmMvIA&*MMOm%kkN#I1Yx z^LpTmfIl>k{~(`#EAZ2SN6@2REpLf`b^_zrnyi4*aOz_+I_kOyFM!es60>%Ynb@-tO*Kd$)7@ zIhz_-Ki30);4k++m)Z*azkvToZ~fM1zW;Ut|KbDP-TU^&tEDlK|0(dF0e?+ze6RA2 z;91F0+q=85L^{tPRZszUaZdx8LQ!PX}H;?3L@EY{&Qidf>YnR4zKEW%8|N4jS6@)iyeYvsQ)rvwy;#wC_A(pu1dS1g=@|6oyAh~cWkauaZ z#%q0)eVk(P+N>4HJpo`mI+6=hNx2dlkxS3Y&1sL_yEPpiJIIyOFLP|9> zXqTiPG|c^Ayt*}TsP7 zH|TJ)4!7xWhYok?@EslQ)}hhQkSn3XtPUG=*rdZ29k%Ikr4HBWaDxsv>u{S6cj$1J z4&Tw?ZXFs`TE7mnI&9EklMY*S*rvmkI$Wp24LaPc!)-d;p~GD|d`E}7b!b#;{W{F* zutA4SI&9Hln+{j%aGee}=y04me=nZ2cieVyEya z*|9@M4s94R{1kzPuN{Fm1dJSt6BCkd3b|@9i`&aZs(ZCh`j)4k& z`G7n!A5ioaLvr-9=PA?_WvNe>izxbf+>I#tR~@1-Pv!ca9H9;sJy*FE{h|d5vG_mI zKR6*r|4^Hve}#hn&86foTb!fsyi^f!dG+62ir!h4qyPFwMfGT|FWQ4i(Lb{~M}PnA zieR-Wls%}i9EcRlC_X($Uw@|}xm$O+don2c7thMkzk0W#c=kWazy3!#`Yrb=`Un4` zKVQ8pN55#hqMw)>3-&Nb*>l_G9Q}=tDS~@*W62)$1CcM4HP`$ebtXdj8*S{DtXGu1 zE2_l-%z8dO7J=&h7qxi=7DhCTp=!?=4FVy^{;yA24v8_*mA`#7tBFg(`G zz-aGUQhD%{5f~#t!W$2Xfkpu`-U9^23Xt_y!pOkB0@Qm~Lu6n-0UA6sB_l9SfJX00 z0^2PNsPb)H4hv*L#VIM=HtX103>q@Cxj#%+IKPW)&97kV6$ z1M{PNTC%}=kHCWTN?o4t!EZIPIByEly%EcT{>dYjiu%n=35{dVsQ zV%o&E9o`Yd9O<3|0goHjy$FI%=^daexP_tz#ln1s6>=v73b{l?SYWg(%9_H|aR9>a zNOT#aUkUB0_!rtvM1;1;h)txhi()qj1q(a&HB&B@lvq2A30yG?J_i#67Png&@qhRmg;b zs#+#6o^S$9AoLP37JcDwVU$tGRbR8P0&%Nw9{%mZZ;=uxME_(23%4L8R5%-Pr*H=p zx`x$>B(L74=8#*8|Kz>+GXp{9V$U{bc9o%R7UA76h8fCGt=;+Xnp8D8oI>L4&K+w~ z+iL+wW8X7_oxfU>;!>#@%bY3nPp*+!VX7F4&5{b0xNA*n6k3g05zC5@ch(f)D6e7m zNwECw&ezt^JQo5=Sd`M>y8(TIP9b2_LX_?;7Nc8XZ?Wev#ofmLuD8hVBvjv_`wHtH zc%p0fPdCv5E3e;R4GpM%BX}m_79S4U150L+RCgq=VgRs*l(WLY4~TCp<&tNvQ<3-* z3@Y~KGR8x$^;Q_rco##A zTbiKb1KuU5LT;I0T<>i7#jOxb#JfHMAS;-JcMr6=RbD%IQr=ebR0~kzEk+5rHK{kC zGh;+uXGw4!HQtG0a*j$-iQ%Pb>rw#%M$B~<7v2n-_!iQ%4V3s8#*cPrEi&)C4;vxu z_#nq%C2VJLP z1H7w%i3~M%Q^P25rkQ8h14)osk zB^^{Q*%e8%TuB#6vn%<2TqWuAoTOofbt`I+*J5*fGM?tZz(U<~MneT5uaXvLU}1q1 zWgL-HAZ8e%lBu9!-GG`~;My*dtmEM1f`a6wAc-allHM{TCRgIc4FyG!r^%hfVPm5p z6=4^Ip0WseEGV|8fh3UY zJ^_VZXhbuSN^cTy-p~4hE*qr>lvg7C#17Yc8R8>Vk%gd27)1WA<37) zlM%l}hKW6m;+IH+_@&7^75K;q;c50xLmv>?r<^KVjDjN(e2zA-48ns=Zt?z-3#)nQs+-1Bzns6@%;7x#MqJ=e# z8(tQS(WC%w5^q>BqD4ilO9|#ankr)MGairPMT=wCA@^C7-zczVvZ-js`!fY@#$U8l zu!a{z<%^anf!=WRNYQcu65cZ;s}LaLeFM4CKGo#U8U+;iC4Q3W4or55?Q36+B5&oqlaoIu(?JLi@Xg?y*G*i=8MJ# z?|F2b(Zj`-k>0JWCJXwojG9WXqhX80*KMiN&q%jep!QU0ia9t!pp~i82k4!)iuWP? zv=kgk{}oY}^09XBb4Vzl`?;G~sz4>GGHqF6Cy-0T^05xCwpD5v<#DJsrXtN>~J)pR4$8sOTBpQBF3UoRd6 zxRLPVpo+gCa1-HO$YlJ@Oq9w9FNAaBZ7EW36SvKrO{OaB)wJr0942RjIvG{*4ebbrkozK4r5;H`nAJ?zKpMP^36U9ZY^gQtu0wla@W^q;e&#*e<9ZVmelztj4S??CQWp(l85Ku48HGZlT z#bEC!8n7nGE~LRLB+uIL^&lJRjU%Q*fJX0T+IEiAxhC&By5(E}n!UkPdYw3|#ruFf zn*^BWO^2BHEdsQ9cai5d0Tz0n6SGx-Ht!R(;rM+5EcKpc`9B~)yZ17IhXh#e-3o`r z9~EGw_c!wVwqQ8qtoDu|@VEe{cs$Y_e?ov$y*nx3cQUx0=Iz32eEjzXH-l$gsmsE8 zQUL+OiZK)Q{oVt!%XmwCKlf5ttQq0TS0VL_8B z)WfCaHs=Q6_>kEBFg2Y*y)n|Qpfl68C`c=P6ojHx{=iy0!e)N-xE&uEdzmav$S(*J zBp7XT*RgdG{nwcI3~|T(JN}EPS#^?BV_2us?y-qDk{!1g|3&nUqM%fy%Ke2@UE8$o zMD2Ing|IHCeNl`RF^zk5{4YnJ(n_;L0GP}zaN6|hV?srvxuI;ChL{*3o35~SOU?-b`5G6{-58~z_4 zT%(f3^EIL>7o2IN1RR2N7{3Myj!PldFWHiwv#FtgZIeBX9w-W!$Dx38s%1?f;Z^O6 zv@)(KG;gXl%!AztsIVT-RG5e8(c*Yy+&oO`kLyiEKF!w1Dric0r-0U+A8rMZ@z`&g z3(8IcbrU;ObCI;-HkmG&i)Dmd>LuV5vn|P~+se|-@QJykkmFg_EZqb#=8=UgpN-`e z0TM2azlQ~acaE+$Dr#xc(E@)&co(UU5qLM@Rgh>N8#@;}uD&JwTf)a>_%?vXO9401 zyyFFKBJ7ZVS^5glHv?8nDv5%s8OW2%C6x{41ou`tLsm5QFI>f?3hC3#CK02WnK@B_ zgm*0!PAV#fz)Yea{3*F&O#-MT;N(OB)Dm!Vk^pK6I61kbFYHuHz{#np8UShuIN2;# zt0my%bOF>7aB@cYr^td@0!|*3oCZKG0Vik04*{T-fRnS`fsm$_fRl6L`vOo)z{&a1 zdqJj_fRhW-Q-D!Rz{!QBEdbOKaB`8Dqn3b^i#^slwFI2(y#$|iaG|3pYXOuM9WWNIORs&}Bsahn+B60qYQh^WvWlcOy% zB3uGaT@*VBNsbhDCSK zh2!pmIga}-nxNxyKq+9tkAceFl6*&l8cMH3QeVbD3Yf!P_T#FNj_BQ!?js$z?ny@q zkns2>9&?n;j55-znWG~ggFg$6R3t_69U?N8{U(s>d(5#h_P*&L#%m*8N#hOca|#=0 zlRV~{2LulQMVxb1b8d}~a zp0^w6$)zW+Hq7&7z{IWANk4*hlnlr z2I{pfL-6uqa7-c&wxjaAf{YJsV#!_}h*HpPElR>pU(kAA(B*;tN>Hl^x;)UN1hpuq zT$6K3yZEgOe4f4QH7!W;z%?%e@RC$;e7_3#- zNlTpP$Ky zeG%%6`0q^+diJ(F|1nMcS8fC;XxJZEzm0&ocBWGBn6HQ55mI`LJ@i<<9;4w4PD;MA zO&YR~mT{mj;}pnH{{PAzl;?}D>;tqfRNnt#>ju$o4F3sbzG{aSXhFFgm|bu9@?Q1j zNnSqz!m~GM%7OQ4&O@{%O2=R966LRU-6F^(-bfiiiXMC|``LT!LYjK=bj2($u|U-9 zI;tEVk*VuF_HfQ!eb3)#=R7~?ge4dh9!Z&$Y|hAnnfkJL>L1Gd0h%2U48fd3(nodHmOD%ZPxMJV3H_g)IXKJDoCm;z~Qi zDYezPaKs!6xWf(}q_cyjPt@Rj*;o!z*8g_up4PwaTYpfG_0kv5vMY4^Qr6G1>+`Lj zy{Gjpds@GE59^QE!}_*8tY2dXzvcvs*WfeQ_r>fKUHaH$m1tsy!prRH?343)%pRk? zuACaT2dHj!vhr!dZd5+q-l2S!%xRscd|K3F74IF*lr3`vR2}8h$+mfe_S?YV6lK6h zJroR(fwbC|k(B+d(Z7p>!IxI_F9#^nKdJyWe@UD9cn0V?<=fV}{w%gHt?|5-w>swy zkn!s8mNub%09UlkuPvF6ptc&r+gR>TS)unQDZ%oJ8AQ#l;TX46O?=9#S3YS~S$xjQ zRU2dQY}SV^OZzk@RwS#s}&EB$;lm7DQ73B-SFdsbj*4yYHQLnd_RuGO0M$b zdTUUgAJ!M0_;J{09D~ob%*UFPV66te;kQMV56-o8FVe33dagA? z`L)d$##h9ct1NS@=D$dZ0sn*KmvUTXHRhGW$vx#T>@?~>#xmd7Uojrx^Z(Q5KV}d9 z_8$HQzMjQgWSLa3Nz2&JmoYw@%fq5vIku`|Il}jeG5jrf+ni~Io|>Q-U-9`*@cCz2 z)v6w}8-s_l*J`q&OsLU3xB5K)AkSemtH~Ph36j~5)t#$&#;b(Q9d)g&z!P&68$0UG zFOY-@ief{@09jQzz>;MZj_*<*r>eZO_cR8NM=6`7mQ0MkAEzvkcTpi~c5Uc~LG3uK z#*|tkmC)@SL-+s-36oXAwvIZ{Qf5scH7%84>ZbrayG;*MgYc$S!|ZFNwjmj_#{p~V zA-^tHizbhFnGW2~G7Ggc(CKn5NM=G5C1Y1VBX|wsRfV{naojr*?SFs^KHG}cY1>~` zS%B@KDmZZw+o){~S7Xq^y1VH^TiI@PwhTC@25`_SWM0@>2H(hDKuyN=G-X4B3=31oM+wG`+(N9X3j7kyoW5YIa>ueyL9#W|q|$ z^=Zw3VXU<0n6mn8cfPY`zGOHXONOD$4bbIt0f z#j19xh;z-+T+_vXrj*V#rz)kbO6gql5T&%m=wHXe8EZzjj!@P|;7(p<*V5XY__1ac z#j|q|`D4vdl+S9a1dcVED3I-3RhRv8)unlWY`hw8%8fW%mt=FgnWlKU(Q)NQa~P|D zV@7WoPVML>d^_Hv9a51fH@H#%$Tu4699 zJUgq6Qc9R6O8OWWmSnbkD9|?@TCcSERN~H z80l$Wn#U)&ED&YGE82$E(PH7Ny4Psy<)?%;Y2a5{>l&T4(NZGsRH_1LZ^T^sy+YMD z&V#KP*766UMJ!-kvg-(;*>x~&6%RZxifb__Or`z7+;m8^D~IfURk#gf>{|t3zFRt= z#|Nv#*&1hd?eOz|x31BxV>r~@tt<4rQKPb8-!_iI(qXUr9obriKy8%14E5+^wnBX^B9?!Up973?N zp|hs^xLH?h@#AfJVmVLM1JX-9h#Nr~uip8J z-tBlnk=pIJ=O+6<)A?#^qowvgTWV{gr8Y@hdN=exNY_6tg`;*j+VwV)>MPg->m80Z zH#b@XOE|l-^yWsjG12}O{C1|O1sK^uYL}*tVw@WR?XuLVhzHleMssk%?T9Zs1b?^& zr~sw>K4Kx%=fPFPTb;{|;C#~87O<}#ujz;S^eJ>Yq_3?aUg%#UeP5BE`d{SpB@U$T z+atf7^l6d*A({`b9{H;^ecG4r+(G(yA?>?c(~l7@BzMVk8pw|~xRR zxbcz8?0QMd_k8-`qolV(0hDd77!UC2nd;(xJs4B@JqE=p4={}vQBDD4UeK=#TT-en z?0JCV9aQ1}cXi=^TmHebVQ9z+ux5mYnI9p*Hc9-O&M6Em$6*j~-a{S@*I7#_;atxk z>-@mPCg*Dg>)ho?G~G`DSnd^w2i(K)kL@4s`M}#1{Chq<2?6ThL9}+Ik@x{y`dO zO)fyUV9t(Fk<~e~h>Nh?knhLrbxlf$A4&Wp0? zVE`{~K$!dxo-|tvRoXnt)HTO*4+d9+UZqa)0~RayN4zA#Oz#_~e|EQ$2OBw6fJ|Qi zib5IO#ubqQt1d?DLULrpP0fcYQhDJeqGs0^)X})C1!XGeCk#MwaZ9FN<)kGp@-pK{ ziP0j-2Q=o;^g#eUdu7fUv$QSOYg_2d;YpRXrK!U;_M9B{6vG^$Gu~c^8<>4GfF2ap ziKa{LsYG(0FoHank)B57u?Xe9qI;5)v`n+>YEZ;+3l*zjrAN;rrFJV)J-bC4s^l_F z| z(bKCg-qPK=+N`d-?*R9mTbs)k!-}9A;J$O~@qUCt?vI!|eawaNKpF;E&y_0ddZeh+ zFR};SE^v1tMfRZEk;u`At3Bv;qWEOQv6-9wVnGM~KEN-`kw$Ms4{VCP3`jPj2R26z zW1Jh&12+{?muy52{8Z6!BYNO2MYDo5cMDB)0&EK;O+l#b<-y^JBT>Mzy*#*2HRFbC zFAt6sz(p4KMPh*4%Y&nA#?|)nP>K5qIk~+&lyPW}+Fl+iO|ZDs_VQ4fVAS^VP=#RB z_VQ3xFlu{wsLE>rkJ?@ysungA06N%XtYy$;p#D|wqLA>5Mz*|m9+^FtMso;37q)v4uU8GKnu!b2T^{kxKIviwzFPvt3 z0+Qkl&Vk-9eMtwEi{r$;S+1muq}i3+LZu`zCiY>Yx*DPa+^_Dm*cSqmbON+6I@s)s zoEM!Bqm809sJ~{>BWz(s9~NWaD5^r-C|VAzS=5OXtEf>ZZ(zES8UWtnRg8vQ$_a3v zg8Nu0b5X*53NH33JWGK46kP06pwCNQha|Vfj2{V>klT*`^kI;}ZA401$z9OmZp2=4 z^4n(3#5HF~E2&v`(D{%-k8l`tYjycdOpvPRJWFb_TgDiU#D9ct5*vAeY2HcO@@P})( z3NUp2930+?&``5Ddn z+^RcY>~4eWDXs5!)ck=J3Ti2+I&$Gu*Nas0uu^jW5h{6(kA50*`>dtVhp}=mN?Q9o zMc+PbP1+@JOC>(2WSEay(qK6;56RFFaybB$Jw*A}Dfv^h{1v|ZfvC9U_*gDUO1L2# z6NPe-cb%0b60@4@a};s6<>j0oa#?cy?xz`-SfK%0YL7eHC{?6fVx>q+tI8fB{kh5# zL-X|9k8A-?A3o6sNm^Ob-iL2Y16-qE6nh(GoTg;FAzcZ2CqFl@`MEjG%4iuz)e{u5 z!g87LjOIZfB^L^yk|Jj-k%KjQlaD?ejafNpwpB_14(bzBEQ46p;h^#*Cml->W0ZrM zD_3Kdbg-3f6Y_SH2UUk$Hj`?DRbjXlC+!=Hl%Bc1y4S(d=W9hWBqt6ZL&xfjYFViK zm7;D`t~}aR`H!}wRPY2s)Q`=nZ#Bw}p#y$nNb9FzN*&7iddfIf$!OFvddhi+FXPyp$?Znj47zQW;z|B5JYV@dv&^*CYg7!S zYsQDc`cO)2wPqRWt9b-0wNgSKW_%8d96uJ0A(~^F&+&uL@#8Yh zQOhFz@n}_|ZAQ%-^xkp8@BA-DHejBrG#*!+)7bxRYMdYXXn|7G<2s(@Q`GZIbJTT* zu|yk1er`g2iEp2xZq%|{>t%OmW8cF-z(;CQ-Dc|A);91mc-%ZF%~=T_Od5AVb-=g^ z1*~W82bZdu`$KI?!z+3*Z3yz1JBm61D4TPjfLfRdsMQ*MCOzaHP5i;c>lGJv4FR>X z6VNB!^+ca*IXJC)JPGnot4={u?u05^b0GhODs8|d0o)r)f5x~z_RhHDhFq$YBcHg- z?qHl}g#)FjD-gFoW`e%$zL9aB`wWz)?m--SCNj{6oAurGcSv#*!KBxMxtYiFcEO^^ z%SglqENl}9=AE|-7TbeCW|LOVx`YZUPe8mNch)6T>fQ@D%m);qvRDXlBh0fdq4MN3 zk=vwpgzpgRH0O)71A1HH6m0TW`-NX=hOgGQm`19 zCUjg&U`R;v6D6_S`yk;U#N#Xlnw?;A#f>;~-2qr0z2(ljIPr>0kXDd8>*DNklPD|? zOBK!wNv?4iVLs<_UMyaPT)E+EP-&c(Q&gNu@~n&VYWj9$glAonJnQ1TUVJ@Zo^?s` ztc&x8z&z`c8oKQ66VeTr&8c(m}gy_tjLUo zdDg}0CqN?nE{(1dAQ|Ra7pFQ#n^MZ9I~b)))zKHHrkoCwqc2Wfzt<2iR!3i)W$rXs z5ayG5=Y%w!VuV>6oD;=kuGAA}g#d{#kG?po(sMwT3G?WSb5fdRo(=Qpi?h188<_eq zkDWQEO34fk^XQASCP^p5&=}^?7v~(Qf=yu_eR0kepgGK= zFV1!1zm_nMzBro%m>1^J7v~lMTEjg0;@l>{!Z44%I9mm13v;E}xle$l;b)n-2Lxyj z^XQB7kO0fWJo@51D!|GxkG?p+Ew~B!Ssmul7w2&SP6_kqi}Qp4r-pg-#nDG!!aVxo z{JtQG%&jZo(HG}Q1?ZzMPJO?F;p~VUeR1}4|3%M>lZaB?S`ek7reZgJbOz>BPdAH`wlG4hCdGy7ZD?oktW9IHq0UE+Q`r;fW zK%*+u`K2erf+kg{hf70lHquUD6~sD2Vl_Z!?1-_bpvYU zIOOg`)^pky#aIzDa`Yu5M_)2ixw4dzqc0gb`jWX5btIUPqc0gb`jU~OFBv)dlIeBy z#W~Kt3*rLm=!^7O)o^XDk8%^vGu|{LNH6H@6z3UX9<+3x4KD-2HA-1LMCc9B0nIIqc6^LHZ{cAHreq=_gHDfna3Le=Tt}Tf*)RUhr6}t55hN~?{N2V zs0t^t@#l{AUS$xzjQ?WcggNJ z0UEM>r%8b3FyEcwP86Ue%(u0;lLTlD^KC8eVrk?yGwpttIKPAQ9~j9c~HL9uf6wwAFV2)RT^y`f!F zm`r7*D}M)yLN51zm8-Y4EJIXiFUZjr85I+uyWpbO6-dH9Yy4MmtA4@7l2XB~`URJ$ zIJfGD%Ob1<@%i}sJ&5}l_QT}iR{d~!8I#<4bE9_{dav;D=vmC`^f0=t0>DoM2*~(m zUN7B@E90BlB|rgY605MCL%Pa{hws7zDB@t3knzjBQO2*7j9=y^;VF?(%G?~|oClK> zezVfN$$pKdM9f>fyJ$)?wQtd;EJFJ+Z`Gy@Cg!Ii)(!I=0OoB1c;WqM{_V;x%-P6v zhkX>J_1&NGO(EIgdD41Vhf6-wfY9t3hEcf^tJIr9Lpe3Tjaj9v>2C^+CknTom9nV6 zDKwpJ6wCNo*}Qp^dIM3I$5haI_PVzz99PI4g@mg3(TEczWnE<0qYM{8$Ar=uwc=$j-wnL)CdET@|X$GwG_(aBWiURObGgoJnoU#A|bKyV3V` z-WtqQPVltOcYU2xA~~Hib8cv^l;_b0g{s&Dtj;FohJ!->HrMRQxFHWkW%AmoRnEz& zZ0+Thwwzb`e@`pAgP|8MQmW-^9Ejra3oKwUbO(p2JS(?egJkTn$O#aCGEMwhV%TKs z`!I%B^W|U>8E?K&Ngj^s#mnqUM3Fbyf%tN83@0`y;u_9bz%otct)+$&8o)<#MuQ^m zWqela&ce7igECa|;dcK6ScuOBLo2ny5lSBvHu(yl3l35WQ2?!^zaeNcq3Z%g%;%-N z%&y1D!zlnrsyNEgNZFZrLvX~$Ai*tK&HJp#Hw4FXGJ<-kGI3+DTxFtJW#YzQBgat` zSgmAwb5LduV)HQCaFrbjtrfL~e2hi(4}m`_S09CEeplIb)Nglg?5N4mu~*q+IZWA| zS9R3PXY;$-9zb%t^TG~QC$6@~vL4!<>pE)BrH$9xaoWrWg|#oT$T#K^?(L}MEY-Zu z&efaRW5{v6EmKBr=}~6iU~99R>G&IM?f9mwbUF9h(&zBWWLCPJ`*H~ncl0VdLzi7$ z>pGZ&Ymy3#_b}wwmNGND?F?;)JB_;Q&Qa*&HB|v}S^IOgtTBNkoo;vD-C@*!bH2ha z*JP@(O$%y4t!(|Acn^4m?mpX&jyYRV{y{UCU6;|_$k*BS7**SwvsioW$mO{;D@C!+ zmgyjtqq5w8c2RD_b-Pg=q0{ErQCfB7SxW8}Up)8sQ2ZQwfZu_zr=DYv`VK^_OCj1e z$DXJ%-(34BSj=OT7g1Mg2f#z-u{n6TF>n{_!c3)cuGTow*T{EXP~%K{h;F`>QcyGP zu}b4oqk1`2erlN{_~jXjwF@o{~7s>wWUNs~dpp$vZ7k{06|{EVd=%y!*ip0P%$27~q?&EZ)~ zH-{Eu&`MUzC#>krTH`QZ;~mhbn&1;w6m=r-IarNOd~p|!Na@@u>zF3ir45^k2mFIIXo+R6J5|~B8x^3+ z^IJ8l$}h3%^vI;_I4Wm{(!&q3<0w&{9;S(&V#B7OK_i&|X_oouDSPVq6VPm&)2wEd z`&O0v>ABpaL*ci_%?YY;?x!W_evU&LmRFUf6RdvP(n{_SnP4@lwmDCYRuil#YP4!$ zOKS4nWehxx=8aGaK3uI#Jj8d!O;pf^nGZcbxwS|Y3}>xVBIDvWhi~$Y*d}&gu&8Riu_wnM7wG; zq>;KDF>IPO;D6}(UzpKqYpKa zxv-=5SjzjA(rR~Z=%{^xmOh$G_;#%_6|%8ODQ9XCX?~ZZ+1P`A$RCV`RdT%DHuWN3GP5l3WeByF=BG z@}3$p&7Lq*`fhN!B3d&jU9LcKpbO}leT$FL=Ye;CRMDb9Ti zm08&j6WPM;&dnV|rBr{It>7+gj*&CxQEiUhV@|`TEcS0?VPTXuX_If#;l4@V)GL#= zcMOv{|IPlY${WK+(xQJBDT|tnhSR}g?lxH!f8MSn>3b^F_h)>8yZhwwIFuvL?qPlw zMc|iZI*Y@k8h$xY^|>25hL6fZ{@z8~Fo*TxHIw}N=!z(xb%iZv z*Fngx%E4>Zc{zAPa=_X*{7X{4DYF{(Kf~Xqi$2P5EyM0Szhk%zY#&D{s>gywfW!jJ zXsD%2cA8{({}|G(0C7Fi$cXenkOWO%9D$aLobNT;!6M*>x@Q zH%z>+wJ#SNc}`-O>|EbEM9tPVcZ@ihFQmOo-&Q@`QU9Yvj1 z_mmc61fO-8_m)x_?xse_qRD-wV}XW+b>D09S(^Mvkd442{9hE)0!*Ea`a^Zj57i|5 z%x0z@uDgK}tW^N?j3Mrj^!_6qnic z5r~G#0f#FFyo?l>HUe$PY?v$*tQbtk;NEWduD;-3<=^%<+)uyFko&IwM=3$_S!P7duE`)CCMyLqs`boH z+SiPI^}I_-pD|5IZ&5wSj6-QVrtqo*nXy!X&BMjAnSQ?EpxM4}M}I;?CYX;Lsf^H# z9Y%D(h@qgJkX!sw7VSSoS=45X`VoCHLh`Uov$GrLWp+J6cJcU#zS<`&nvuTdF~g~O zaA>?{9jZ9N`W>?`Mi1_%SlfrPum%rP^|H+vQ$pU_P?_ef_Ic|obG)^>DB6w2&sns| z&_ivCOuo;JC>9#!ZBWTvp^1}|BXdrc^Lfc;KDWfQpziNEb|uB=geo?dv~GWGM*W&4 z3b#;`5M80s^z6n69#t64Q7o*gSIy5s&Ea0#&Px@?Qp`Phjp+}a{|Ap#*spp}Fr<7E zbOl|#`!;kfp#M83ENnh&|7QT4cAqQO4^- z3HLq#F7FXTg*A*DE^i=1Ndep#H-d+XifBqAhT$ueDq_iJ+zlw7P;u<{;K*V_?0gbr zQ=yC(v>;8O` zaL9nzzV?GiwjW|V+kXhqQN|lW{oD(wR`O9*!MM&xwE(V|UX!Hh31xb%7?;62rXj0; zn3I#ND_a8UB76c;k4*JLSSW8UB05PI%P9n)E(0p({DHAY07V`^RX6>_p|O{cSoAgO zE*_udNJqrJAn7YeH6wpSt+4Q9Jv7EU5!Kt}Yg$8%vAe-xxO`1(XsiI1%h$Aq_KmVq z1Y9mzh4vF5=<+qKp>aYMa`~Fp(0C~<*WE#2f|ORwYnFJ^(y5x{l%uGY|80TOBh+q@#OWL&;lIdrJ@Cm$h( z4vQQFOuajb0_Ka_2KRZi;n3k?&`9@I*0=?ISlmr1zNkFwXDaFM)i`4N*@K}<3)+@EC60L%^EV22ryjTo!lFfJypzN%=jI1&h0_;wdw9>PAH)Uyw%B?BbpsWzkb+b*Bo-q|xrB|?yc{=m5QfpagzXh@9UBpgx%3^a=5TFRAB@#F(#|R?g;@Cot6+y| zvW|9A46ch*fIL*9n?7YM2pzC&YYlZoLRzw1*hKYeh(?IDYF0* z9rHX>1_|nnyX+^*7tj&Mn&yrAzWMLI(%XEc$C?xKl(w6rdn;`>oAZ<&XAaL(y3ALa z<&)9}AlI{ZysZ^^HzL9`=~Ma}A?odWD*ds*G^c2@=KE%q!`CH}nFZ!Fj(^2NfO zS#9Erg*mepDqk$hnbl(S`xBjkL+#{GXceP;6-Q8oxO=X-zs|Yx-#kAnM&%O9m}*8@ zWRF~_nCJR39`j{PH4n^rkG;V(Q|`?%Pghn?Gv|^P)kvwB-lHP!(#`#DqN073v8QN7 z(|twds20lDeS3RIxC zVGg}Q@%_zbzYXlw;<_&m(cINiSi2XfvTCW3w);=N9#)NI_Fgn^=~O~4@nya5%X)E= zlGUzcz0|B^wHZ|xkojKoD$U$;6P3h(t_-<%lx8-nf~3C1d~k!(@kd|P5kB=Tn!2_0 zTTOMQrm97oy`!he_8-ocvn;ghGKK#bMa9eP`k2CG+*;O8^}2Xb3hybF4SNv;>{4r9 zr6ngs2%{}4pPVe+8T*TxCs_SY*WFuF&DB(Oh6bB!o+NXp23w4(2+^tNQtrz?GFEknZFTZiuE-RfU7Q9-jSm=apt$tC$qQL^Z}RnxO5~#;;Pu8JI0()#_V^5z z+DM!`!mD-<2WNpU_gyTtdw7p;-LU)J<6AdPl&!ySvxI21dl=uV;puPe30^@0y(jow z#Dkny=Jo`$?Dh9wavwR;`+#=<<8U7^XBn>E2YeF}4fo&f1O5=0AZeX!C?K@ zVQtHTvZQ<+auH-Qz7w?s>DYg}98jTrGo(NPg`NIMmV+Um5pn7zgX%LP&Oj+y^%)VT_h&?$A<5Oqo%&vbGfcFr&xkk;Qq1Zz zB2Mqmh&cO{Q)P=0+XWMjN3@9U!t2QS84+is{U(xAkHX95i=mR+XcBf1LJKdvTnrPH z;sj?5FV-;5PN-OBZ7=T2EOVk=A`|TwWfv6ZiD{W%Ei(LUtF#-bYVxa>=(PZf%SyTvL&*?>EdZDATHY$ z|0E06OH$;uJHKCBJWAjp_X)gvZLutwUNVlw&*x6*1FJxPspN^Bdipq8)T!ZZ9cAs> ztkGcLVHS)(mFFG2X_!Viw`s5?J)PLwHQ1V#V){KJ`BZBd+BtFw&(|{+K*jk*O(q zRCy&s#4R!Dd$zgKACc%>@%_WMD9+q4X?D%R3|{&E+*0};SyHY)cPL$t`yl1{^UCOX z)D`9U^J&%LquFN54P|`i{%O#)KBQEm7xYLtJ=4t)X6ovm1SBMj=++7NodQ>ifp}4eKM(~MlZ=x zmvEYQWV!O<(qg#_IVz>>Xf2kTkfp^Zn#xI)sVYdG6y2YATwJ~4Wp;6iq*&I(C)FtC zW|2H;jFLQAwfsqwl>bqOq^Fo%sElq?HF8=~)yQ^LBd6<@->NF)3=J+cvVZCarTax$ z*w1ek6O0p809y`3m#sRU{hIXcc=}6PIbL@i?djd*pHM)4tMgc+^k%~SLxfAUyzRa` z-dL!Pt$(#Lw^h}}{-anPn1!pH*Y(jkFP67z)eU6#kE&S?4-eM8RJ+k{ICb?k*=yar zNhw+5>q=wJqIC7m*VQ+ttIvI!=?Kll-XL43s!F?IWFO8#ezcHNjNDA<=bF^)x*hUW z(}?b)`pIThGSU5&gr+LqUu_4OXD9xo_|ofWa$)hWk&5Ko+$@h8XreiKYgO;0)skJ&i9dl)^&W(%(OUCdR6x;-F6|gPI=RUC|pYn3ku@8|R zQF9nG663q*nhXRlv+H4C3#DJ1T+cX03;EW@D8Q$p~Fq_wykJ&6=ct;|AVBp6@5eSh^m(bL_-U^ z`@?{+`y>*I!)`r-u=~0sG4mxBO28Z`?Qo2?xThU1M;%v2jT}XzXtB(VM(W*^O=-5n zvp|NIr|5QAB<--V_#C979cH8*?iyqv)?uM~Eg=p9US`)XK%+c6tgrHHyHWlisp~@T-ma*ossPj`s<)!9%TX7~h*CG` zCJDL$y}0uV84v zI36Rk?n#zZtDa=fuR)I(4$c3&o+RilfFb(hqM><=t9!cq8?}FXqnNun4LF$4(s)WUSSU)>7s-N20n``C zf<*$TFOuQ#>CKR)zDO1<4&MODjovvm5KvNZJ1|XnK6fV)gOVR1j*LHlWC#muug zco18g-0H}Z_mKYd4sUhToM6ZV=3SP=*`5P7+wSV<{Te3>vpG&(bk*(wda!a~5MSB>Gnsh}(tm8G>>WT|ZQ zEtd+ynR;e6nNy+PYv!JgU^SSPKT_KHILUuAse_?h6O&2{m1dWs3~I{O^hho5a4`v! zEObp_y=wy*F&=l>djFnc>%9PejV!Fi#;E>=vFEqhx9kH~{GWWzOarZrrRO5BdCJ?m zuAK28PIAjv|LX27W5z>ygD^g}g@4eF|Akgzk0g zP}1Io07CZ%{|+L<+Xbr7FA8|X8_y@ZkyJq4;{b;zAri&*6{bd*61@Vf4o{uo{2%@! zbC~!76BkM%|06O#cpq||Rg%d6$eH+yZe-#GlF0wa2K>3drftsW?ppx7Q79Z|x3=v> z3jQ*FKHcPvB=6r+#{mdF?JsT z!&D+;Z&U*^&DdX%zd-CGLY7(lIW)MjIvQdtT*h!d6BYcAOo7yBDFwA47IOI?Ih=`$ z$-{4)9WwgUlY+Uz6f!Utz}l$B>#wb zJmI_&d<4mfzf~jgwE~GRqgP%JKgaYNN&H6mZL${p0e?)D8i}t=QUoyq79fTZx zVs!<@@Z|zLv3d&w?=t?65kP%h3MW>HQ6HDWiB$sX<5D=WNOwP!im*aV5j=H6i%$Z2|#^Z3MW=+wfeXe zPOK78AD6<3)r$bAk4xdi>PP_VJbhwyIso-?DV$h+7t++nrEp^PZvfQCrEp@E>*wm@ zQaG{7W7X>8QaG{dhOk-IyV!%*%wxPV8_kH@dbaE>6I zKD^4L!n0{q-w5dn`JJh7Wf{}$pY=ym8X0A}y^Zn4#GObFx%c2d^&9*Z6IV>L)Lq&0 zh>6MABs8lQSvoYs?$A#3NBpo-R&AHBc&~{b?lvOy*3H zN`fgZFRwqdFXJ5jL+;0*&6Gj|9!fHEkJ0hCo`ctU;bSIfS&DC}@Nw!>S_ZA=)M4}l zr#_|f68x!S#dV!qJIa1n4g9nO{ezXevfVVSx$rFkTguL;2RJ?a7s$tyu51m3%?Obh zdjpMflkh|_=RR#toVMUHyGrh-=yB#PfNs#(62TF>%r|yiRW6ei|02g|^CV3@$fv%} zrygCIqwZ5rTWd|ixw**oK1W}1VE@7#HF^j1t_D9nrROoa8YO`2fH(xwDMmNsqvzu&p%%_fPGr0w_r z1b)kT_nv$2xo5xkz0nWWxL#yo*QoNApeXoWlrblO>p6AX0Mbw5cq>t>SxUcSgG+w9 z=60OCZ`bfT=u);d%qirx0KScjkWKv;$wvVS8eM*EMLr5pu(mN9|b5_Uw!~L_M-p=mr1YfM*#{p$c_CdK*7c^ z_j}ln0u*d1B_-`g0SdN8Uxyp}QGkLLm)|$E9|b75Jo_-6#u8~}({U|^|_D2BZ*dc{VsCceiu1zzl$8V-$jnw?;@AVcaclwyU3;T zUF1^xU1V8(b*sv*0U}v_#cv(nz-xNpZcX_STnFsOK{c!ws_^Hugev$Q@sC4vL(5~| z11RYJ6OLuS!l9f4E+_RIKfU;(I+4F3@#4duaAy`kJm|%TKWSLr3Db)Yf2xR|a)%fH zAAm_y{N*KSie5aS2|}zF-;ArE%VVO2K=I=D2$07_2Z7?na~oXHmCbO62ox`#A2tlS zJSLbCC=xF|@=N!7xCzsXkG!aTqZc3fRdh6nzJ=+vKio?&xnX+okv~|B74+gG@Ztq!1-EWMkjF$nfnNvO!h-_jF)>P@c=2x+ zAdd-VKdl#kuK;;WFz0W*_`eq*kBQI8CFe2mHM!i#%ctZr$xFIhK{v(Af04^uc}YJe zC?rnMj|mEG67-USF2B~3sFuqfUeYBAx|9rAs|dPx@bV&oGL?|v*J&V@yxfLMKfU0rWYT1Cj2$R z>BUE$4Syfkj!PjVR5&u~xJ1Dxa$o4UY?;$0_W`F!y!gm>-9qq3m|lG3d!cs_lT*lI zCG_GW&rRmz5_<8GvvTdyd@TV`@s_C1Lb(Xx1D zy=NV{FSqw!#{FbX!PU%TJF|Vyd;-|;$8e5+$m_trsg>Uznq5VjBJEszf0%{Or#i$! z>ZCV=5qxu8x&`zpr>r8bdY|V2Ed`u^_;Jeiy^gQGp3}~P&e!7556%GAA=Gy|HrM)2 zSL;$-Q<2nko>-0=|G&=x$){qN=nJjE0YPvXhGSn5D60xGpA&AI13H9101wn3{ydI> z@B@Gpgnxu<6MpVI$ba~as8tjx$2I8U6h8oJ;w;Id0-HQ45wl}H;a&@zQJNj|NkjZj zlxD|#s))<9Fgwd}k|fp$E~Hm9JA}pviQj>$g*V|U=<*nQ8-ZeW-YGyHW5)>;v-42_ z@)-Lhfns(Z5g?B-CUr|50?t_Qmu>~PBTBOqd{O&GvlIMPlt$GbrP&F-RL(Ds6+~%v zg0GZ)Q$||&UBSp>tQJU0#OwtB!#zZdG&{jRSd67KJ3*KoL0L+(6NK5hk2p(dc7iZF zn+iaKQktD0%nqNy?92kHpvzzvks6 zxxAm3bo_(v7kSA%Wl%^QyF@NY8~ivpp?o|Nc3cSnAh5+hciV*u)g8lM`6hmKr>&KNE7@JcW8lJmq30-7HQ5Z%A8e^=B%PC(e)zDSw;DkwIa<~MfYL;i!^5yeJ3WZNOM+E8kr)^ zSw+wAMsrqCu2B|g&ML~UtQBd_D!Pd`nzM@XD{DpTDsDzUuZ>~=PSN`EzramT^k&{@ z&MNu>v1!gK`pb5>D)WvxhaR#E1ximny% zJ{l$G7wvT)1_I4lg$t{n$Bb1_FpADEiQAmjn^7R>@`21L`z7o^=po$1e}rz~quso; z0oC8(($2qEHl4Hj1|SIrRFPXt&f+>K^PYHxkhcjW!GJ1qo4sa0Ra_&vDEGT4UQ@`G z+QKMK2?kWfwKW7K=r$JHoK=DWRq+&oyYENWcA$WC*ykj^3EGw%FX19%q66l$c( zkoijPiI1Xq;@d3qH?|CaMWW;ikuPu9mSmTO70#j_G^@#V1?WC0ot$Ld)) z)Ue$e($cAol+Fpg4zTE%*+@5@7rhujC;AF+=E_Y$v>6gzdVZYAQkcpD$Z+Yr0P)nu zN*9FgNmp*juDme2a-*#r9VOaD@&uoi_zv$D2lx@v+Je%hp>Gq@CWvt9GAZvw-!um| z7sw6X_xlmcFAtnz`Kr>3LTf@O|6>-pSX=%fE3eR&`}t(0+_=%Ru=}N#*p{O|=glg) ziPiP>_d2DkrH%5sj`mKcv`KF8C9^LQ-I~A;*kD2Fx)8rl7_BARW~mGvd=Kx|2e#r# zZF%Wsp?9W>Y_LV5LqxK%kh-nF3GC$ECjSjA@0M-}eTn5?Ad;=6mh@a!Ep3q-lz)+r zwgv7%v7$Rs*LpnVEx~TER`~aL>I-*bIR0=Gt_#Aqfktll30%j*ug6T)hwsDn>hQm! z%uU7fkom-Brpxfa@fZINFsGpSZ9KWf#VF^*iWl=)eQ|^(R~Jv^vzsDw`OLx3sC*q= zpz{-1EEgD4Nf)lF${%&VP=t~EHENfCF1CiHqF1AG`RC=vjou6t9Zg9%K zC>tJ2>pJ?|oboTpO*N{{G zM9DlBxsye{Q@V)P)x7?0#d2O7_Ts7POK?3Y)!FEjKV7;G*N_MDThQeU1hKNfBPTfM zat`sWe|bvoE?EW?vGT{=H=$mXQE&OzbaEN1lz&}r;AnA(&lHdlE-Z5S3;uVq19!0l zKXb_dPFYp?Kl?9^0Pvafarl=qx{KvEpNGRQ?e!Ok8SY6P;XsKd)c5*QZ(Ll{nd?e3*5AEj=jTM4Z2|*B9{mw?+35&rH_+UB$*Q zZc6?YTr{WrtlN&BMjz*spBHfOPV`@S^KS(lSj;Jr?0aI5`w5m~_C0ZB=(mL|$LxDT zv+q%UPa~n(_b9XPiECnqL5@h2+4n?J>X%xb|9PMibsKXMjARpii2@g~)O*k+yf80$ z>nA^lCh&L0o)}0$Xr@T^c%yGBZx90E%VhZK)<)l4YCC?03!k(F^2r}SZ+y!wri&F* zCI@|08q;#$>>NzXeG5HIlYa{`_|CUDKK-ce##_?8IhMw8zHf%bvAZ6j>O7yO;X9nk zhuDj1i=ja=+>*xNlz8K*_Dxa@QzW>q_RZmZAvBySfpWEP$*1HV-@tTyHC_vS&gAd1 zkH)re_ahedo#__#rdu$+x||k_Z+1=##ea*(>x3_DHOiGvBELSKN-`!WFyLP8^4Vz?Uy^S++SGhLrOq)vjzFx-G^nk7TL>j^0q!GN{ zLooA^>8v0_!%$|(uDmydEJyV?({3lV_e+PSD?Yr?B!9lUpHAc3?@6^Y?IY9#ZPJ6c zf7X_KSGvX=WIZf(+qA~+neSy2ZHq|UbPx8XdoX7ON3_ScLvdY{#&ty+*B;?Frd7_v z+w+cZp|tKLQhuGTVOw74N$kuQG3&mCv&c%=);vAMA2eC0T4dX-W+*>jqpF0y8C@NY zZ;{^h%4pT6KQugmK1=B{HvVVsunE%9`-M_;W z44)wd!>TT!1`A_`_>9^WP;v9wYk*+zw7He7yj9 zjJ$fS$lC+7~d`=TDZ9eA;UfO)l^}MwCoSS%Q^EnLRBQ~G&QC>2i^T(uMNKU&tfD{a8 zK~@Klg6YRKP-zNg7w)1=!F&T3vd0H07`fII%s&#YDVSffs>^f|p~AID!4L(X$URmE z*fOV9?!DCkq+qI{%Vl){DVP&@j)`G0+2ey03?IuLAEaP-Ez+?b7hXH_QR52l-Z({G zO6CT@!kUudwRZ8%Sw$t)5^8k0&qda*Lz-%lwd;_kTI7TFAx*W&2kk?eYLO4xhcwk9 zAG8l?szp9%AJSBdydW9UREvDjKBTD@S-TEtszp9%AJSBde9#^N;rr2VyLKH~S1}d+ zv}@O)_2v9gbGvpO(o~Cl&_1N87WtrkNK-BHLHm%VTI7TFAx*V}r=x*Ti#s3K?Amqc z^5{z3*tP4Brdq;3VX-SKFT)eNb{)E^dIxUo+I8q^>5g5y4r!`IK4>4(REvDjKBTD@ z`JjDhuiFX)nrbO3tme$f_MlLD?Ya&Hf-WD(w6k9_?Sz)&ruawbR?uC`OPgxhic2Zm z>y=HXS_qNtLE&3VZo+j?=3TZ2h2JI+*&YBD6ufr5~-~r zNVW$>vbG0BrU<;8S&(96LHIV8&4QFO3sOAQg5u1Al-MjtoLP_(n+1t83sPdUAaQ0v zO0u#b(X1>;ba`w&B9oxI8An7W$WzfQS8$k4Wh6Ey#2<4AGYb;aEJ&DHkeFsc!pwri za&_7jKvm&o=R8NEQqbFSrA)Uvmjw+L1H;s5Tu;{ikJ#wOGAY&y1^_+OtT(S&-QBz)x7dDt1xmAj>lg64NY5m|2jRWbdJ z64NY56|*3*oGeIeO`r_zpo8l|?`4C`g2ZyNAhGp!LyDap0x`<{$!pwriHWqU0 znr1;_oBaH&M5P^Y9%s0d}-wza9TF z;ME9M;!l)(jYXJmh<~T_30^bb5dUt))4XQBA^ueLKe9OU4e_T-pTjjck24!|Io6=d zSqr)(WzZ$Hf-c!F=#r0$B;OE!+?`T{Au`_(*L*{mAzxhc4PoXR;?ES25H8G5{009~ zRERO(5dWF%5_FBnGM8)S%*4DTfLeS-A(mn}AKqUWFQ?qv{qOTPCBQrUtq zyaW}N^ATU@wrJniOtgWccWbYYdA*)|BUsFLJVEE0gG96BshVLndz&=-^)K1xGEwV0 z(#_tMp_WA8w_U<#L}aP+7hXHSODAf|?}+z^@6C#Hvqg=ed_Ily$aIer>i4qrZ0Us; zwEYBLDgUq&RQP80R6Ae4ePf*jkFzCv6*&6x8*3$coV|orD{%D1H%?-_I7i||zBxa6 z>U>~1Pw#Jf(`1?Mxw4+XpM|gkI9~?952Q|g>5I~^v)`Va$+xn1BQbCOaTE8=EGY{I zN@`2uzS6=NEUh0|@sf+e7l$tlZzw}QW;o&SB`5){9>pb=#}(p2nGwQLg|i%<5X}Wj z!eLw62SBJe3)ym1F3Mns=;EhYN>)@uI(@zkWh`Gj6?ph-DaN+T>dKLIJ27|AQATM0s$)6 z8CWgp3N-T{Nu&&Qj3tT?2_*7p^%{uekt6JpBa+=$OOE0)UpA#nDsyh5*@Oq#ia}S> zKRycsLQX0}3PQ^gzS%;gawGGYV7s8iSYlUt#I8c~CNl}u+3hU{)oO$lf|(Mv9zE-F zib7RQ$_9kP#oS2i-1NvCFW)ijT*rjuc2aOC(w5$QMjHERJ_ z6um;t+0{7=G8=o)^~r`Z^1~bweM8xjYTlfuGaxMzFc;s=0DobX9Z$$u=_m8jd?=0N z@!@K^Mq+ec5Je@!?Gx{o! z;R>=qL6&5Wk5s!8%pXkQtMt#!ALzL1;x%G}#ZXuzP?nKKvz~DLGty{t)QU3O%zP<;)yQ@& z(jy?M*}2cM8iEPQmmZpt94}<94mhnS$JHOXj2p0;!c%B)&Bpb~EPKP<$o3QHk)=Dp ziH8P(&z5DV$Lf%LuddkRx)RHEQBNLXp1%_Jj6GeAv^TjN#=a~YkTLe<*5gRz+x&{` z;`A#j$4Wz$Ck@pZcCX1$3;~Dd5#ZI~OmD1APNI`AIX#8r@ye8Z<|mWpnDD8@>v;;( z=wiJp@8!$KOzl=$3Nq{_{mEswjK!Yg>DKeIIX$QJ-0UYFYpQ8IKl_=jrBC3&cmvG% z(fVw@))KkNX=_2g)HLLCzvr}!Cv%P2b3@5rq*P8z#^US}Z^iHJpwN;9=^4%GspBlo z?q}Y}mt{Z88TkciP8d7Brxgs(iOM*t+!BpFX|D)JeOIWt?;?5N{FtEHui@Q?j3UOrl0WOpzzlFhdy>UO`1NO`m0Pj6Rv3 zF90*LS(yAw(NE6_0U6QHLZ>}qgpyNuPMZ8#h0*o|9GTIH^oO$}`;3p27qpJ$$aDv2 zJjTZN9_xfH>qI;jE6!$}jNUKtSQ^niJN2sZJz1j6WBu~+#;$~dHG!?HxOW_2MUgUxtKFR1KkME$9#=3$^`;1n~n$JH|9z9Y9 z)kg5%%d};AZDS=dU;WdsOOH)rLvPlK?X2Za2(xh3pM#!{k2h##)YmW-xwSopolsb_ zIk?i3A_RaF(!Dx=+A`71Ynq6R2)s(pz!LtyC0e{dbX~FMmeMe%Gf$kE{~|IZeLPmT zUTkSbwTp^`srDwmj6iYW+!mmP|3=c>lvevC+s#j%1UUD4UV!YpPA8Yde|v?_4GAl ztkhGCW3sW9UA$08+!}I8Wp4hUD%-*$!e8QCs#$VQ$hZ=rL}zrLW+)bBoRn4-1Wd{v z4*`>fLg+ON*tlYe9p?Eedfe&yb3||KbQQo$%U>S|dvvv)aS*Ev0zv1IkjZtCbJFId zam>;_?un`w&!#7#EO!!eJY-m(Y`R%K@KQA3eOY9{W-cuxIBg+`Wa%H&Sk+vc>xVIg zo}M3elPUBx;J+cBRfdorak}B+X3uh-I-r}IZk@&H=H>vHP|4x2S=oePmD!%2AJ?Z< zMn#-EK{t?(*TgpH%Eb2n0<+~a&sg2?zoF;HGEc%&{qTC}Q&;9P5A{TPa>zW)1*QRG zG)3NAdznCx*;I|LY`d69asUD9we}NeeIMq1%eE$yf>BArA z9RGJ7Z0q0G*E#Goj0_Jo^!4s-=x%RsIJkUSa@mskeZ2!C2j_PWj5J)>&^yrHH`38* z%jwP7a(jDIit1I1G^7sg^V;+f500ep!RPj#!3B7u-EoFf9UYxr3wp4t)sfP;#1i*# zYG|ZAm0Z7Jb29)~an4+!M(-ei&{V^RhLfE`Lw&u&DX&^b??7t)2o3`l(%;)YG>D($ z!yR;-V|-4?{}HT}^RMDLQ}sN41#U)}2^}{v_pB+o$4os6$Sgwq=a-q-Su^uq6Y)c+7_I9$sP>Z=XQEgFg+frmg*fi)NUKF z<^DvbvP|#iQnuQ6AlM zCe-bpmoSq~8sFh2AUJL!hmFrax2#bbyNpPI;aM;@wdABGN@J}nXBd9uUN>7?PbnNUZ6Lq^y9D~es?HM!0 zKQm!aYKB{G@MV?tqddmWnRquOX1Z4VvfOqsHf+T7{a$?5QvKk|_xWirgnzE_#=lahBsPz5mqd)28wvQ~z@l8Ab07 zgOZ`ZbuL6VP+8xIxrm=N(IW<`VE!je>8LSBP+n%H)s*`i$~ZOV2 z%DBWbf(~@A#`TDqbihnK!ih6yOz0W2c+`YO-A#?AQ7#$+sRe=f3gesBXpB2@4utZZ zTlIi3&*N*mWhSxFOi7tJ8%>@2lJTu{uXJ~tDZenWlU6O&KW@x}Cgd(O3;ff{*_{Z! z4pV&GJ&iuk#y{gG(7i!-BYIa_?_Nm;2_H701{41*25rJCOk^|p&`lZlc~i09l=#<| zo9U!l3P0;e&MC#QAh_EU%h_FEBD`2($~T#!d(rp;8(3sHFuDFD}kTG^&XHBL@)(ywW{w@U{LBm;xgRZGy-dbB|f+Us-OaeZiEe!B0IJa50E!-fuz=?guCBHs&oZhl&C?`nzx_NSP2%K^QKc zA26{kuusdYG3hs?)<6Iv^(Jy!Oc5vfq$zqHfR8{cEADZD5#XM}1aatecoHal&q?i)uYeP>tm zS)OtkSL2j!Mt@JQHl^p-fTu&&pn1^qh%xAE4^=^E1dWr5kQlcNy>X9%T8B;P%O-Np zRE(J75i{dTP-A|XsW^Z;)UUXbB42arv?+exL|!r#tpY!7LXf_Ps9He^(gE^`oA~|4 z+-IV%n6f2i;Yo8oaGr#%KLlZko-~z#qTMExGR60wgJNnlu~8G>V~WwU>0k-SWGHYA zxY!q%Uf(FaH*W#$UqG*=_t0+k!qhD?QFH;5;fglTMl1JPIsKQ{x=T z3~D@V+?RzKuxFc=fd9^!8jA)$TtuXiRuVaO+(hpoTcmH}_e!t#o9N46;_R-OvW2h& z-}bswt$4PR&1<@ixzW_jg)B|?TIM|b@3ef#)SPe30r0mSv*m!=bE?pyCq8aUz+5Ra z34IQXZPMh*kQ+pVE@}Pk&2(?mM(TCWy*o1#$&cm$1 zc)PMk^-UK=R9c(pEacoGz!rk z6aITse20ll2l_=OfrcO)qh?mOnKEihpu8Xet!63|6>eAZ5pJiUf1{>y743M<2#;_} zEN8&Mz|-=T(o_PD(WBCpGbR#rpPdl%e}!t5DTTSjtkirS{Ml`)_EQ`|mMI6#v=r@5 z$sO!!C=l6b${%D&>cZAW)Pwtuy9Z4T>|RQAn$&dfF;(zCv64 zK6>wI9eC|3Q$1>?jPMwPQNXd)%mJ04BUhTbhfK{$Gxac!aD5^;w$c@xji;MT;sws= z)YE4ADKq60nBj$4y(@+d2i<_J^d1PJkP0S>HlcPz*Z{|rUQfE&l)z=fD7So%1G2+g zNpxW_OM{`FLDwVD`f!oJH^uIcaJPWAzx=J~W*0$aHA+)m;#R>M07F#oF-sni>OH0y z9<2LwvzgY%7u<+rKy48HgdjWwGI|gSlqZa6&b@S+%I-8XQ{?lCl~j>Xxr;{4`Jm-0 z-p+0{(?`wJjb{2CW-4ysFFk0WKa1gJq2q7{p-`jjOkfARqCf+jUiU1%`+^{f{4hB#J@cX%Zcdg^v1KQ&@RxYNlz=wf27Ki^46iDB$`o~* z=mJyJWqb{drt%ayqO!}tLc|*MqO!qz9D+54c*AFkJO&ACG$B|rdk_9xiThVC;P+$5 z{2q5e-pT$`hySO9oQ^Y+>g^jIk7PD-mvB8N2n6{uaa=pei~tN#qowIxyM&|;T$aa8 zMF-7!1^CC;m3;+(FC2R5WnG=omT((r3@U9KB+y3(6!XmcT;D^puozmHqj?(U7(|A zXMON!cw&|KdrgSmy)Q_W6S&Tcr( z5P!t(F{S%W451Pn$5s)g{{)K$oQqyHHS_A4L`3OTi;S23LgFNol#r}TjuMijS5~G4 zqNSM@=3K_jtBCTFdR|@yki5JKAldCoc4WA>d!Vh)%H_xaGH4z4y1O$qxG$A#9~`34 zq9zh-1I)Lf2a49-SYf{UN-NBPs%x37cauYy0V;WT43Fyo~AdHaq z!BwUxQ2mlw_JHvnX@r)ahfs{%T5{k1{qUXV?k2GIC3EouGW|3={*=hS3GQh`<=9JR zIV&&2b=6B|1$c^>0s;8<7Ja#vU};=m%+i62p{(82=3+F(;-NqkEEt5=i1e6gX!%6o zd(Hw=`CC(X_>>7eWI_*_c%TR<(P*Q4zyzN%k^SUxL_Wbsp@*I{MVn3G-@>5o;h>9{ z-a(5uOO2x6m_>GkY}Ds2gpCMZ5(JUZl9Un&2;vhH z0cZNFO2GfkJh8*9-mB*&b8HSoC1Z0YN)Y~88Nk!mDyx_JOc~tCnxjx>mr&!0f^IOI z!Kp}Q%;O2(+(J43!Ba)cPng-rCc`Vdk9DL}gSpJsnX7dc<<;45W}Y?EPa-CKo>?Me zUa=>rTuC=oN4K_%C%L0e7Od<#* zJ7e7pA|i)G3Yed4U2H1PAv{O#?_)fHfTzrVUa2XPAOSibeq9raFoyS?4pgoHH^a-a zR%GTL{FGI_nF(hbrv!3tqs*_A<0gK_#8#TbQ8NeB^50-{R|w2;hbT4P$I$t_E6oxV zy>Nv|Jh{@Gzu8nEAQ&<6C$%bVqCe1=@@6LzsCp8KOPDiwqlpz}5*k>sa+BG*$y~D0 zRIf0VFdv)H%O#a=M;Moi^KlQ?GPZPJTL@bNdAO4K`+IWF4GPKoR6N4gU?%&S%M zj9lLZJday~+`$r367BHz7!R9FEl=HIzYE}^^NuSOQqsQ=2}D9D?K~sXC%1>8QvQ}H z)3c@qGmpr{=N@(ML9sgA`KOn`n6D{w??R}6$w6ihwcu5iZ!wjfX40Le@=`NttEpTM ze?07;kIW~kAnbEDoifFUMK+sgw-zqF#8eKMNvlldn@k0&ywSv4Oy!`Nx`rslnEP)x zl?X_8oASSbPCSS?2!t{9QKZBe*1!#_1e1;gLMx1U%uGjWn5lNN=nfpJ?=Zdth+Ox;xZITB&Wh%aEqQJ4u z%s6W1ebtnmGSNc@xfyX@z;p*lLQ>`KEUJ81sPb1HRb&(ocvSfose(MSP$fpH)EqOh zjV6jbz%f&_$&?*4C6CEi5Qre9?*Z!{Gf~Jid?Jt#z>*8pD8>lV zoR&NC9wJv{H$ckbGw5^+HqN0OsLm5;w<(KR#v@C74M=d~F=Y^s6qf1YP(R?3DR-JW z*u+#1Ronbgvz(|mitFoRyc!5nu)q~XI5AYEfFM+*ZyX%OK?7Qr%__yDDoRnv!2ip5 zf){x>4`2@SfgShL-niioFt=fDVq)2R%#LxQ8 z0XtTTpj8epf@VbGyb^kSMvB=6#F+_+Hr=n9I!V@Ez%<=PM%Fl1x~=rO-BqHArEY?N zGsXpDqyH$lkp;_<$A%A~1uG%iSPUqE%1+tI*li|rC|DQh$xZ;(QVk$kE_wh7lguT4 zaaGzxim2q{R3s&>4E2!*n${z^BJf%kuox-;b_d2tls-%n@=4Vvm|@bCuencXi5Mp6 zexG#{t!5sujhe6ocy~D@BB~N%>4?XctMj@(8yTfS;4JFl-66UKL4`4 zL(s%$Kd~iStSUd;h&jc=2e?TueJ<>IC32HRfl3H_2=WJQT70t!{ip5pX0r--U>e0j z(&O+$9t3v~`60IP2ONx;sUUR`QWL(Q|B}QZ$+yjcl0)Udg;-4ka)hQKEd1b#3n>0e zu~yE!S*fXd3yl4fW=aqE4H+n;tS~pB1E!SrCG>Ih5!MNs4Edt##7TfPf(+1#L&%o$ zlrr>ya1yQ*ze?p8;Os0wNuV6*EzI17w!Ea4B~(BuAt}xj{Q`InJdr9qukaKzQ?^Kz ziXrvMa#j%*T_Aazsk0Ms$&seVRQOxbML=W=6%@Q;PC)6^CI()uR#}nAeBnN9Gk46z_M!p>A>vWrUD!=Ze>%#rIli|h2BTs0=C133wFZ4xC)~w zN34YoiwN$vZDS~Vkbl4ek6Cz%S?Q`XBM|y~rT@4KOo98y0q@~}t7O3OyD-88MH&ky zRnSANW;Rw<9wvm@6>yGRyZ+9o4geihDtd8mNQ1z`z2*bTt52B$^Z` zlKaFRCjQ`+CK0#>G8mXqZ>pC`H|{XSr;&S~F0?7$f)V}{&zHERzc-TuH=rsb3M~I1 zBbwC{s6Tkwn7>3IhIKvA2ZVw*pJF}*KMh=t#?SXJ^#yi6$J=qJTZ8&ofSt6AolWd9 z@rTXi`G71zsyI-JO$&jM74)=1$owxvkIuYdMc_`zLp<;f9E$_76@jlf$n^vsb?O&G z+@~iX>(JutBvz<+!ooUFD};vrjn*v(V{V4O0XOU(j;r=CA_xq+LY$607%tWxPMG-*i@f3b+S-ZjqsxuH?ThsnJGA)G^LVIFKspRv0994ghR-pR$#>rb_H!w z9dmU6OKQk1?J?#!yA(WQ!n7)gYiN|NqM4e673>G~VI4EVfqh}%6b5AmAti=%9T=hmq7!R4s`N9W?e`f@yK^I~{B-&uY zAM;i+Maq?5;nrMhD&AlwJ#1E3hmanl-=-~TY$Tr8BCK9O%~$j!7MdP{`|vPbGOXiZ zO9^ttNIAjYMi98d+|{{T85Cm)0FCM@tf(z`CY%J@=s`32w7D#+(K8}RXcT1%w%}7r zIH5_m;;fl_7JDFmMz;;i39X~x66kFIyfPF1jB#J@_2i_Pi{ShPa9g)~9htTkaXePj zE5!2x=P-H+G}whpx|&OPuV9GG#k_TY?1jS@9E2S^yZXUEJwo!|Qo`WoVTBFyGs|=H zP>VoVtCX3whr3qdN3bX0(IzwF-$;1U;Ire=U=%-#Z6@tEi4+#MAEce7)0Q&RPnZhi zF9P^2rMke-0<0&Fm{L5)d|@FCHs=JDf$wvx%?#u>pucVextGe~BWB@qX!k7J<&q{$ zcPnF3FCnoAWa|N+Y-TPk0xy^@_YCm_r(!8u7B0E;90U2V?c+Eoh@qTbgKBhjHgnN$ z7U&L516zoDB)lPFu$7^gK{@W=Xr?Yfw%(wI&uz$5#WH_0efJc^G6Dn3rsGhI&~-I% zL@`HDJ*Q3LL99@s@mViphs9a$Y_j`iWXnv0*~$qzDJC$0>9|1V>sQ`8PfttSJu$cov z0)erxT?v9fzs@{mrXysAR3S(_eAvuFvgw$ae;5i7DnB*C#7618=6vjj16u5St3;-z z&h5v9A2#)SOr5Y%-BCLGbKN~inVAJp-;l=B>;;Ycq2~&Lp`Q=_lW7Q|OpyMcq zBok6#N6d7HCmhr(@1a%FE3i5JP`Li$F~YjQc;5p{xHn-Ip**Mnqk-dLf3n<^`*&4v zc>{@t+PgTj@a7gBHRr*x9U%`dIxI)IMh*!P_Tt0lA`EgdCS!%1O$F9TfWhBV4KG=C zlAeYp3^@0{s*3*aN!D_+<)4~$9lK-Gs_Ivcsj4par2{79RwyrAG{QCua0NHC)FWMB zA}g7UA+3?x6E{OwbKsiyfy*g8Wvp@mC?xX+GF;xN*s*!lC|2)vQq=KM|WVfO^sY!Y^Ltb!i|_w(3c@*0+;Cc*22 zCkK|FeB6|GjhJ;OOjQ>&KWKriPt4ODUxVdvJUnVDBuQHd?+B{PKoz==rDeX-9kDQ2 z{Z+3t`KOnfGNksP5CDL%MEvKK(OCjYnkAS5(l&s0s1vXtcpgt1JcSZ@+=P#qQY>tM z;jb}O_mk&Iwq7$IqB4qYDHV)2IL63s)8LJ9D#o}LB8dnN5&$WNCO&4S9_R3CP-)6> z3=c8RiNgkaU?(%7`;xinl-Yoel*8YIMRi;8Y^S;GgQl(vclD+Ow1l$`y&4W+)2PIY z$ILqP*MCwLH{qhk16W~=1eVaNvCF>ba_AP)zh07ISan1)tp11`<=XAF?&~pg-upQQ z%uwiWjr)LEc8ftC%tgzwK=gJF0m0gqTe!`Gs(&d)fh(k1j!<);YYAv`^gOgF(Cj{k zy`5{CngUV!%q8{WVeuEQ0?tSNSHzdQrvH2awu1Y~53Ar#^+8duq(wwtmlxJ#;TEfT zUJm3>7imt|aWfq$9I!m}@117O{ct9r5f+$=cQSlhjLAmsRo%B~A2gHi8-bxP3yw3} z167YBwpe1H335@GiW&D|JJkY8A?L;I3G7)An9HE%niXr-Vqz-o#0y(E{#IY>=?q%spXh&N9F(KSIaD zcZ!n-52geu+C418Eniu{IChjtfK(1o>vR+5{48e#ZVywvEE>C#@f@Nk#P_jV zxZ5I;!d9r$W*)*$$R~EW!8L=58Z|SSsl1t$s-TTebJzP!ESF(R8IqoRSjX-p;|`*4 za-$@+)K`4gMB#g~(cQ9k24`j!?>5?<11P#j_GCS1iVsQG&X}pp-&JFuH+(Gc2VC{4 zXAxvV!9OHgqK5r|K%*mq_;#DE7!{oY#FFq&nbNzEAb7}NM;oj>bRpsuKs?UnH4O+_R3Jo;MA8ooUc`h_uF277gi5VvDvd0@o5(w#|xqXH-BLGnFuhB_OvkouW+%GE%zQ(5>*ha~ zxBghh8S@s|pYe8B4)b{&sk52v8|?lsOxu6cOJmvGlf|NN!qY5@Yhh6^Uk-nHyWPN_ z{QgwP@BLtDU<#aHC|d?bV5X{j(DW9uas7D^pk-F7z*{pgk=-3T}FClWDluVB^^N{+VSa z@SOXKna>y30?&cFUuKP>JKzBo_%A63=OZ5lCk^2goTELa;5h_UkKqKx>c@f6~Gc879Sk8xo$5vpZv@e!WD*Fx6l;A9CS4z{PbFAd*YvC@{*4WzURd{Y!(&dw1z2TMmGzxSgwfd(J6#QnMbF0+7hAJ~yCG^v*`2sDqN!ziLo>?shY1z4z z=-m9^0rYr+dL?K#*dyIki_BT^#&sbGAA&;7*lPd^kj*hGx$hmWULnmmQtYU-(p->&~@nlZQ5Ygd!@4fp?HWtpoXq2*LVit@Ct ztW#O$ys{3Jmez}S_*(Vi1Zwa?s6p@h>Va84q&~vpk8;xo7L>`p5MsPwK`-+$y$F0& zyvi7IWB1X;jL~zw*F?y`qn^(RK=7yuLqk%_J&H#uPaN?`ywy?9TMfP+k40KbfU4|X zY6ohVm+-oknbFJesSv6r2o&Pq?l)z70EDEa#d;291lt0wg7M+eWn5y(XrWplXuyvD zjjD60h|pNJd~bqkKoaMto)(z{g^dUjLRq)a1fkk(AL*#O_qun&>Bo{jP(EdXaJe!M zv40`0Gd81Nek`wqPzlO;QzOPOmD-t_2Hs9~wJcS$L8=`@H2_=9TtpEs>y3zSGCA1Q zl}tIw4J}E&I-le(*(KY1+Ik0^;ociN`DnOja45weLS!MFlY85SJDuUqq5YjhPT$}_ zcfB0&D!#L2!`kgFJJ)VYHgDg)wq;#&@^vk{Hm_T=xn=F9vCq~vZQW@fCA)g@TML7k zUf@-kvE_FFOY_dn8@6oN>3AQNXwc6&cwJ+~Wc$bvHj(#@^bZKe_Q8(M_Wc;hU|$D^ z%ipLR)6uOhz`SE;^Va6=PJ3T(=Xis`z%Z_s?Si$xZRmQ8U*6tvl3hccokN|&B+ppf zYns-rZP~i+iY8n0z))|hQwS}TtsfcShWO5odQ#8}y!mknb{rEhUSEN4YxCNj8(OxG z_jqfwbaA+Cf2WDFEKYa1`9zi`2l1qKKq!2vvI@5;Kje1vWRo%G!jNv0EA*9U)6 zxs<96;}Gf(j~)EB=H~5dH@EC)UI+E2bOk$OqR7QUV)Dv?UXZqg;g(2QlOQBL|b<-=Rav)SzHZ z3QGIdMY3~0o(=O6%7J6shB4A!Bq=%wv!nLjw!j#PY~N7le#rYkM-mI+7#LF}8Acs~ za5>itIwf25O%$ydF#&Pj^?fFoPB*G-Q8%A>@o;R9fr6fhr@mM z_Tw687<3!j2euf*p=~&oWUC$8jtGzR1)b_0=!WXLVWbm~=e540QR?!XYf@_|?JQbWD?JPc>=P!e@VAZTs9ebNI`3sOKj0byGDw(Q!S+}^zQ z3J2WOaiDFeGs)kFvHE0@GthaU4+J0T#lZ0G5hb&HNhAr`NOd}0Lv8(?4irRJ=TLIr z;9ws#D=ad^4b0hjLlXKgjhSJG(>^#bVDTi|+xq&*H{fZw9@pzMVR8rilVmUtU?+O8 zAF&k4f(f;(;WTaEhR*M3*}RK7Be}i_QnXG+%T~OxT0$IX!>4Wf_oWV@Tc7~KC_DMR z>AByqEx8SPzGZF8=H!O8Tedm2;=o`^DUv`6>5pVsPtjL-Hn|6p%m6Olgu`D z4ny?vxvYIJU`dsMuD-#xlru00c5d4%>}=VGE1Z^-NP;}R7j{YuAH=Gi4XLDNOmtc! z($aXsCowKwU}@{XY=G-VhK7XmLHT6=u=KzpLc8F#WSf%28A_%0L$M+?mgdi7*C0qG z=~$3_?@-&&A@o)F9W=;hn_cU+2^oevyZf!6L9ZTwFhC|%meB#4DG)J9R|FTG;0p+K zJ~y{)vWGmXm=1Ppz$Pi3=3JOPLLD+Mk6U6YE&2*9WK$TuH+0)zI z1By%0Y&nqbd8rzR1aulm>Ag2-RrSa|3=v@Epd?0os1Nv3wyUCX+C@7HHt;vBJE@hY zrFL%E(%iBOX*Q z85rv9rs5yUGgvasLblwQ(ODT7Ozx$3l4~cL)~;>dwiBI|IvgIfyS0(lYKXbSm=D4; z;A5~ZA}~v`-T}&8PVYLP4Tc5}F)P+T+$}N*RRR}Rs7M7dLcId3JEUfh1_ZP^G)(qQ z4pRr9Ko@*APj|NAlI$f6?=&MW%WciK^)`iNIVx)}$&Ttbi+R_9 zljvE~oJDKSi6d+_3_r>$Xbdjb6sbbI9=(M+NI|85m4>K&I)tJbMkhL|7j+~&9V=50 zc-o+n zfT1UG^e2ZyYCIM~-GI`#m%W_dABhTwTL z?}YSa`6c2t!ZMQU$IOy+3nI|g?oB8Ovla1p6p|Sfq+XhCm=EoBs(vOC~ zdh^S3kZRB{46BCcqN6P>7mXPVd_d8;N^6mEUR!Mm=9SuXm-75vG$`tb{vfWQUP0TT zVW)RExxcNix5INb(#l%DAn38x$S`>~&26+cG&cL%hA0{2$T9wZZ%3bcMPns=!!{wY zXp;S+TRnGW@ggW)nVT_^m2Jc^B^ft@-mvF)$@}0KVZOK_g2bprU#59UJye=`@y+{F zG|u@gGJw^mGm+yGHupws-Zx z9R&e6Ih;+=FNhh0=`o)oUBcot6E=>3%ML1K1YDfcVLIsK1S;3ggJ{o9=XvVVB_;<-`~gAz7z~ugMPs#Q`)XbUQ!`z_dWd(Xo>6@r2b)w51tw+0nW+ zxqa;w2)pvU#`i?oeM{Ll*NI%RXhC1w7xpe*~-3FN_?G|)E&B|y8D0C_dU9fzPJ28U?fSYsS0DiRNr zM_+F$1u?fMa@rz`ZrIV$+f7#7u%jJuFXGM(JGx=Y;NNZ7f#od30=Q`F+tqu zwG%?<4g{B+8#K_o6Sa9l!{|0>c(Q+}8;X z%uz>eDLN8P3W1UOZWLLhcc5e3vtBwt{ zp<+zZF+(bNOx>+5+qX1rW+N~UbXmpIhfDSy2 zA*-@$`ws09Y1Yx%*NKQHx72#ZJLs|$05Qh&Eki683YfE4f`;*Sx-I*JcPk_(P_cjSEK#f{sr3_&s^U zNe?;?&TwWO2S8+dhX&g^+L8Wp`lZjHjZUo?7r~BjxefkTCliBk51e69Qh6S@xLfqK zdIylFvkppL5s$CL;kF5#w)PZpw-5I3LxMiJZ@6=$V^Ew#2(K8+&VlY!4}4c-2zrq) zN+ECLNcycGsS`M+=vRAZFP#fI&E6ecXmNogDDIHRhtUE!g}Z1RIOj|X!B>!Y#k0t; z7sJEAm6YTnEM7YlP-pw~!%#A|3cdNP?sxYLGO}PcP`cB(54PTR3dZA5QkqX2e8;+A zG_@QWEs28=fkYGR=nSGzKI&&`Wth=u9tp*;2*1e(L})P>c!(vG5etD9iGU0aKySlk z>X7M@fo38m>&VfKq#zFJtZ9srDds6McEe5%9U@o^CXmoaXdyT&L!B`64nr4k6!Mf3 znb8_$5mrh{fAD#1WGdiSf&~WP2q17xQ&7g67ZnN2!<5#J>`@x1>ekM=g=TQl&OvE= zlZ3%_!3!YcXxxWzDDCoQqLv(}xV@4D>=oBrup!W6{&&y@)gqScm58Nn#iI$z3`#xg z`t)`nDhI8=vrB7BeWV9S6 ze956hk~&5{un&tPvTVdLK{8Q6*8C8DihR<60+(4KqbsYdZgqv1a!Hq!6dl)Op#H~C z(sO2d;rC(H(dHy<+HsMjg^+Jv+q`23li1L-HcNpuyB)i>!6Mj9p+`L^K(r#YTCiZ( zBpL7R&D%D&PSCK;S55E`0T$eZw8XRP8Ts$RvIVjzh*M!|IBVjppbWCz6AcnXOu?~B zX0_^xlqPJw@ksc=oLJuAk?$mOuNLNIq>pBvKw)pz$sYRUyO2eY$D-8~0SI z!%xylo1iuq5F}8rT^xtP8@682w0Xn23F=E-uq9bT&I_{yiN@ICPpc-* zD@G~H1Y}&jvvnw!c}0hXw=ZkjzV3BR+nbYKU_U``ku4?1r59T)*~F}5+8c)kml3%q zVo1Mrb46-jFDnhNCJdp7;CCr`ttOXx00au5KmZPX4uAMD5R3Ddeaqps1^Zv zjat3QqzY9E*_|H12$uOe({2EHiRM>cBvVre8w(eO0te;B)q_T7q9=|DL`{f8d)qO~TwhG?Y~2PvUwc^#^uJYRf>>rmuDp7J8%#!A`s(z8`l0$??=gWeE=rNBZttR!xvIwz(Ox>QjpboZ~+G9J)Uq6 zN6t$%4R$)g8pCZ$Rd9W}`A)|7c0rXB4x-6iNYH@I8;mXlpz{G7)|2(-as>Ohyz7oW zM>vJqB&mvq6u0U|#~XoVk%_mV5F8Wv?!WM7o@RJjr>%{2&DUu znj1Do(aoU2dqr*Vxw1i&l=i)jm?>(*OyTw(2~n9WqZ^Gb@WiR(8B231$)RmnzdpIS zrDfY1uIXxZBJJqhI|Aq3;^bO6F>b*Im$m~* z?&i1V0|E!Vi}eu}mOUmOTBc|m_FxOV>kVs>YH?7j*J~DwDYkpBYu=vRwT*a2ETa*; zu6fO_ODzoHrD&wyuHhv9jo5DP*omCh7H44bg^gaZRDav>^~?Y>ZNN=TmY20ZWOb+| z46{oY_mcbew@V+k@7lVR`DZRoCbzHKVi8KBM5KWo+SamR>&_NAIw@(C`#{KX?Y+=q zN(`37SY$EViUYR)BRUbxNOL#uZeHsVfOPM*%9hn=io8cdNLFz}B%bn!!97?l+|W7BXdB!9*KlJ>zJTp z{+R>i;1}8PtXqq<8f_Gz;ef3!@f|h>544jElJtepQI^n{Fo?`=>((YLQAiQ#BJ_5e z!#oZ`1?(WSXnPJwvHs3}=A@-xYqqyw7bN*g`i<>ba36%y+raNw9b`j0HaA_-%mM?} zF8ona>b;ec)gkQ%_zoMi7GJnn8rj+cXIHMapgY*^$>GyaL+qIu7KyqaE}ES_aC>^d z?C7?Z?K^igZ%&JspljN^S)|8~5HJ4qjX)Z$+>)V5o(!{TUv_TiR;=wiEOC*dmgxkq zlX&0=h^0_z-KE%b9Rq}L4^W{opEi;ncEtV5kh68Kb zwX+5J#|=%{C6tUZ@a-*IHtfiV1yiCJTJOI78JEF>S#j~EgHRbxHUL!>IeXS~z>)X& z@=5^t60bXwgGDW?9R7IzNN>l_YQyt?vOpRAgZ2JlCS}gqx1ODie327>Lwe?$599s4 z4KI-L@1OKs&$sgMH&xH}E_3{}!e7Q-eE!wo9VGtM>e=39jyGt#?byf9zw7lpq-P6# z&Bp*~s~iL%=cIE9Xj->}R73*gD<8$LZjJ|! zIgidB4<2{UJT@L2gZkEZ@G@uNbK}9wosa)~Jb1!6Q#+Pd15SnWt#RR%&eP+M(Msbk>mb%FD%Kjc3Ehd?S~ z&Wm~TSfcRyIk`26ndPs|gI@r+_dD1AICtrz&%dFfX?C-U$dlJaBc_dS4**Z<=a zz(1<^Th7M?{&v`t^Ld=v|9cfaO*{Go;6A6+`O#ChAinA@f4{(y<-a)3-nZD3^LvGt z&9{K7R8`dgAMw1Xc)S^13^?%&HrVppwcXWPKK8VQdupOp%YSa6h5y)|9Qon_@Yid3 z5C832{{4-%U`X-5Pw}tL!~bb5e{zv6AJOt(Qut>UTlflX_fya>?ElLOzgyw|q~(9S z!~#YX{-VMkT4n(ro>vq;TLJ%|2|I5bDF{z0M2%gud;xP72cxoXBD1Q_^`q+ zTx|ijD*W9F|GdJR6nlT!wJzT(|4E5(;0c?h9J!W#f*|F=D30iM~rOyT(PP6j? z+>TfNJzDhhZWvqA3I-E_^fsdSOdQ2-;)aO>9F^g+mrL0!au8USX}x0 zjl$0;{QU|qhKt4i|8CF%9#{NT3ctS7!acRVK;caXEc~dJU$5{xw7jR6b}Ib2E?eHy zd)Fy^akquvsCaHv_$ej8TkT`#R)sI^wE*gC{=G-x-&OcKE!g>(!h5f?faewd8HKl8 zZvk&p_?Hy^jKb?dFaCWKaPrSve_-#!_T>Cj%YX3(3mDe^zoO;eqvbt4T!Pn5N#_fO zZTaPjXOhAP74FI7e1$iqY{3s|`3(wxUg65_PN%{z92)Zck1v z$`gLC!qvPvQx*Pgg`d^(3l#ooRkU|2{V!Jd_BYsqOrxku}UiohV&hh@@He2u(E&oF;e^Xxh-vU0K zKKW0@^Vr)hfNiz9Ph&l->&eL3Xk1o0ZSFWSK-YHZ&moM3O}asa|-`B;GC~V zm2R^Y{+O0O`c4bDRpHMoeDK{C;L)w9$oBI;{@TKSqvg*7d_4Lu(DL3l6+Ql62RQo^ z`=LeP$r0gl&h(FE|y3E(p)fOB}`;lB{&eNMUa$pR&S_J^nO z%3q4|_?f^laoldfGd7NE)AIT8U`pU)3fz{-K3+Znyki3R=mhY0PXIqD@R(EaA=~OPo&JXbug~s?UcVKLTJKcj zpam8Ftm0{S)BKz;_i-ufi`- z2jPc)`}{+cBmdZZ)UcFSq*6@HDD zZ&dhRg+Hcp@ub3s1+F()r<=8W&ATjckG z|Dy@uzg0Zm=j(p0c<`B0_I}LY41vd-2Q{JcdMzJ+|A;V=*@eb!hif> z3tz8wW-0s&3fQgmU!rhF=lwh_ze?e^{k;Wv{l8q{^VJ?*s^yakA5uD>ukZnd|DD1; zz5Ra_p19T)yim)(Rp5G)b$Xwc-+HYDdh+<;3Ce##%X^<(_vZHp6O{jrmS3oPz@z6M z6uwgB%fnL)MjB6_GzvWCwCuF~T&rVPukaytG^Qy1_e_B24HLlMp?JD zm`C^Pzt_0Q{A4l%^P@5#xOsN>^h`HQzwUJRNE%e!3_#)9yI%8^{Nly-we^cuqFIf7>N7JT)JLTnyRqc+mViIyexCoo6Z*fr z;?loG`+g7dr*p+P|3&D(7XF55#g1S1#Q*0W`3WrPY~Fdz?axKJPnkR-&4N>qKaO#G zCg!6@B@{`J!?zZvQ7gnZ{^myaU;JCHM7?FUf0-!=VE%7Pz9 zJg;`zt6AIK-`fW*6ZT{hap1Hqll?6M`lbMrfxZE_q+8po*w97TEcVIXehEAJw{{3C zy*?bzEY8-I$Op0smb2ZJgTNp;!wvR~ZXLiRyTaBmKpb<`pdu7{9J%Y`b+8@wM7G2R z`wEtRI6prIlMT1xa|gKKRE9nyDos=o*on`5=8k=;$Fsc9rFl4n+#k*_%*;8o%`hQ> zphx7Emci1hkuS{7m!wcVTH`7+I%X>yM{xAO}AJKG0=t0NDYY)ue#<9?8u|L}1sRLVmKPl zFQHSk32}h+FCfH%8z<3|J)p zXeub&Iv|$PKyg}EWxpw~v3+RL52wNx%Flo9| zuk_{F*%EwR^S06QXwksq8K~VnHiH7&bq|pGC=jkSN83sd3;WHGys2&LMd|4{qvfSV zjGZO&w;luL3y0S_(Av=LfQuN?-V;YeIXpN6ywis&fazL7b2Ibv)kd3}ovnBNxmjR8 zs!`1%s(?dc+;I?gU2$oK@J4jLIv})y(lrk&SU?TEQ@1y)R{hq4Vp<;vXIW3eCx~7^ zX^&AC1ABzpaZuY1BDNkAtFORk_o;Od&b0;|jR5JX+Y1-%qh|;D`hTHh4F+0AiB|J8 zH@EEbKoQ%4l?dvu=2|(#h5h2W=U%vU@yyxD zXgC^THRqFX5MPw{DoaXZfw68cL+4^C4OdnHLMuh!=-J%`1evgY@<^0-_b^<79jPPS z-<_`Q9F)St0Nu&OYnK6E&|}NB%V+t}a?Qb{4i<4xP&BUKMJfQQF5`u1Q=1zCBS%Uk z;YwS;SU@ZyLM~H6lJgm{_OfOXD1uBjI``R65R#- zxy?cDibeuv*fHI}jPXM2`5BQX~(R5Sv;ZjJ)H{dlLD`ERv`X-Ug$@6V3 zRYt+K^O1$@i$?4aIWdfqL7j|StiuJC^#_1?i?WL+2dqZdCq_+GCdtQ-QWB%BjnT-$ zW{->7nBnAHtv!1Y3z1V(ba?4f?of#s4?(P9zELKMBP&R;h1AuqM zFpgh1Qa#W^RT$&@-v{E;XghrDH99&QCWG^fpEU#DArmaUx4_ud;&G`K0)XZP`q4pQ!+5s4%% z&DikfM#=*7SgLH{*=f5o$XUHPw_j=#>zlc^ae_l5ttAk)xe+k@NRzdV?piV_l%T?- z)^a>}#WUW(0O$P#bOw{jDwx@Pr9=nJXxlWB=(jFWYLwGg%*Xa^hirggP1?dhwM23{ zA0^7VVn4R(wEk%gk?O}6SX>!6Q(V?*0-0{Z6e`9k5aYhwJT4PK016u86gmo@uFITc z^nJ>-C0lCs^K;0Eba5S!D?4eA6y0>wFvg4GU@}X zWV#pba6x7hQkg*HlI0OY1AUtnTr339WmEConK6a~Q=fR|_L3`jJ2CAtsbtS7LFK?e zu=Wy|EH?3DE@;e33wXp~xAo}zJs{k~*ASifFyp45&|_HPb4jVyRtYm_tVFAB{5q z*FtWgb0h`I97JYMH$zMq%@Dt@^5Ykfk>dlJBwB;qFO7RZw^mpAt&zC04|T*jYEa@Z z&t9QD)G7DJ@l{@Iw@A2f;ln@Gi8WsPB`NmW9?P=4s{{dvI6UE;Q zaKU3>{~P*uesrp{`95yu_Je_IE4;_X$&Qn8uJA{=&h5nypip{>Le~m^+ObbO0?)X` zTgRmTX2)Lp!W4ewRi*5q(v|dA9eeQ-D8x4Q;^@{Nw{fxjYJcs6R5%musYnJoiSV}w zb9?a|DEwM#SU2dV&;1^`z4#CmKKf)N6oLFl(!b#3lG3n%l=V~n-+H@nEL70=%x zjN+Nv#09z9(&V#IqXZVrn!6B?ceI$ke$T5?o_ee`ur7_zVozeei{L*Qhq1D m_$XxZ9oO{#PrT^%Z(v_gest5vcG#-@y>GewM#rFY+58V6l3s=Y literal 0 HcmV?d00001 diff --git a/out/http b/out/http new file mode 100644 index 0000000000000000000000000000000000000000..63edf3ac7714de1d85f0da9f8ff01128a29b4a59 GIT binary patch literal 237488 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 literal 0 HcmV?d00001 diff --git a/out/libmicrotcp.a b/out/libmicrotcp.a new file mode 100644 index 0000000000000000000000000000000000000000..11905eb3359957ccd63428c567b2cb61052db82f GIT binary patch literal 207522 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 literal 0 HcmV?d00001 diff --git a/out/libtuntap.a b/out/libtuntap.a new file mode 100644 index 0000000000000000000000000000000000000000..0c499b9ee3adac819f9a4325abee41d6abea1a1f GIT binary patch literal 73476 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 +#include +#include +#include + +typedef struct microtcp_t microtcp_t; +typedef struct microtcp_socket_t microtcp_socket_t; + +#define MICROTCP_MAX_BUFFERS 8 +#define MICROTCP_MAX_SOCKETS 32 +#define MICROTCP_MAX_MUX_ENTRIES 32 + +typedef enum { + + MICROTCP_ERRCODE_NONE = 0, + + // Returned by microtcp_open and microtcp_accept + MICROTCP_ERRCODE_SOCKETLIMIT, + + // Returned by microtcp_open + MICROTCP_ERRCODE_TCPERROR, + MICROTCP_ERRCODE_BADCONDVAR, + + // Returned by microtcp_accept + MICROTCP_ERRCODE_NOTLISTENER, + MICROTCP_ERRCODE_CANTBLOCK, + + // Returned by microtcp_recv and microtcp_send + MICROTCP_ERRCODE_NOTCONNECTION, + + // Returned by microtcp_accept, microtcp_recv and microtcp_send + MICROTCP_ERRCODE_WOULDBLOCK, + + // Returned by microtcp_recv, microtcp_send + MICROTCP_ERRCODE_PEERCLOSED, + +} microtcp_errcode_t; + +typedef struct { + void *data; + void (*free)(void *data); + int (*send)(void *data, const void *src, size_t len); + int (*recv)(void *data, void *dst, size_t len); +} microtcp_callbacks_t; + +bool microtcp_callbacks_create_for_tap(const char *ip, const char *mac, microtcp_callbacks_t *callbacks); +microtcp_t *microtcp_create(const char *tap_ip, const char *stack_ip, const char *tap_mac, const char *stack_mac); + +microtcp_t *microtcp_create_using_callbacks(const char *ip, const char *mac, microtcp_callbacks_t callbacks); +void microtcp_destroy(microtcp_t *mtcp); +const char *microtcp_strerror(microtcp_errcode_t errcode); +microtcp_socket_t *microtcp_open(microtcp_t *mtcp, uint16_t port, microtcp_errcode_t *errcode); +microtcp_socket_t *microtcp_accept(microtcp_socket_t *socket, bool no_block, microtcp_errcode_t *errcode); +void microtcp_close(microtcp_socket_t *socket); +size_t microtcp_send(microtcp_socket_t *socket, const void *src, size_t len, bool no_block, microtcp_errcode_t *errcode); +size_t microtcp_recv(microtcp_socket_t *socket, void *dst, size_t len, bool no_block, microtcp_errcode_t *errcode); +void microtcp_step(microtcp_t *mtcp); +void microtcp_process_packet(microtcp_t *mtcp, const void *packet, size_t len); + +typedef enum { + MICROTCP_MUX_ACCEPT = 1, + MICROTCP_MUX_RECV = 2, + MICROTCP_MUX_SEND = 4, +} microtcp_muxeventid_t; + +typedef struct { + void *userp; + int events; + microtcp_socket_t *socket; +} microtcp_muxevent_t; + +typedef struct microtcp_mux_t microtcp_mux_t; +microtcp_mux_t *microtcp_mux_create(microtcp_t *mtcp); +void microtcp_mux_destroy(microtcp_mux_t *mux); +bool microtcp_mux_register(microtcp_mux_t *mux, microtcp_socket_t *sock, int events, void *userp); +bool microtcp_mux_unregister(microtcp_mux_t *mux, microtcp_socket_t *sock, int events); +bool microtcp_mux_wait(microtcp_mux_t *mux, microtcp_muxevent_t *ev); + +#endif \ No newline at end of file diff --git a/3p/include/tuntap-export.h b/out/tuntap-export.h similarity index 100% rename from 3p/include/tuntap-export.h rename to out/tuntap-export.h diff --git a/3p/include/tuntap.h b/out/tuntap.h similarity index 100% rename from 3p/include/tuntap.h rename to out/tuntap.h diff --git a/src/arp.c b/src/arp.c index 8cc0201..259080f 100644 --- a/src/arp.c +++ b/src/arp.c @@ -1,125 +1,6 @@ -/* Il protocollo ARP (Address Resolution Protocol) - * permette di tradurre gli indirizzi di livello - * rete (come IP) a quelli del livello inferiore - * data-link (come ethernet). - * Per grandi linee, i messaggi ARP possono essere - * REQUEST o REPLY. Quando un host vuole comunicare - * con un altro host dato il suo IP (o qualsiasi - * indirizzo di livello 3), manda un messaggio di - * REQUEST in broadcast (MAC di destinazione - * ff:ff:ff:ff:ff:ff) contenente l'indirizzo di - * livello 3 del quale si vuole conoscere quello di - * livello 2. Ciascun host della rete riceve il - * messaggio e controlla se la richiesta è relativa - * al proprio IP. Se il controllo risulta positivo - * risponde con un messaggio di REPLY contenente - * il proprio MAC. Il messaggio di REPLY, a differenza - * della REQUEST è un unicast dato che è noto il - * destinatario. - * - * Il messaggio ARP è grande 28 byte ed, indipendentemente - * dal tipo di richiesta, ha questa struttura: - * - * (16 bits per row) - * +-----------------------------------+ - * 0 | hardware_type | - * +-----------------------------------+ - * 2 | protocol_type | - * +-----------------+-----------------+ - * 4 | hardware_length | protocol_length | - * +-----------------+-----------------+ - * 6 | operation_type | - * +-----------------------------------+ - * 8 | sender_hardware_address | - * +- - - - - - - - - - - - - - - - - -+ - * | | - * +- - - - - - - - - - - - - - - - - -+ - * | | - * +-----------------------------------+ - * 14 | sender_protocol_address | - * +- - - - - - - - - - - - - - - - - -+ - * | | - * +-----------------------------------+ - * 18 | target_hardware_address | - * +- - - - - - - - - - - - - - - - - -+ - * | | - * +- - - - - - - - - - - - - - - - - -+ - * | | - * +-----------------------------------+ - * 24 | target_protocol_address | - * +- - - - - - - - - - - - - - - - - -+ - * | | - * +-----------------------------------+ - * - * I campi hardware_type e protocol_type indicano - * il protocollo di livello 2 e quello di livello 3. - * Nel caso di IP su Ethernet si ha hardware_type=1 - * e protocol_type=0x800. - * - * I campi hardware_length e protocol_length - * indicano la dimensione in byte degli indirizzi - * dei due protocolli. Per IP e Ethernet questi - * sono ridondanti dato che ogni indirizzo Ethernet - * è di 6 byte ed ogni indirizzo IP di 4. - * - * Il campo operation_type indica la finalità del - * messaggio. Può essere uno di: - * ARP REQUEST -> operation_type=1 - * ARP REPLY -> operation_type=2 - * RARP REQUEST -> operation_type=3 - * RARP REPLY -> operation_type=4 - * (possiamo ignorare RARP per ora) - * - * Il campo sender_hardware_address e sender_protocol_address - * contengono MAC e IP di chi ha inviato il messaggio. - * - * Il campo target_hardware_address cambia di significato - * a seconda del tipo di operazione: - * ARP REQUEST -> è vuoto, perchè non è noto il MAC di - * destinazione (vogliamo determinarlo) - * ARP REPLY -> indirizzo MAC di chi ha fatto la REQUEST - * - * Il campo target_protocol_address contiene l'indirizzo IP - * di chi ha inviato il messaggio. - */ - -/* -struct iphdr - { -#if __BYTE_ORDER == __LITTLE_ENDIAN - unsigned int ihl:4; - unsigned int version:4; -#elif __BYTE_ORDER == __BIG_ENDIAN - unsigned int version:4; - unsigned int ihl:4; -#else -# error "Please fix " -#endif - uint8_t tos; - uint16_t tot_len; - uint16_t id; - uint16_t frag_off; - uint8_t ttl; - uint8_t protocol; - uint16_t check; - uint32_t saddr; - uint32_t daddr; - // The options start here. - }; - -struct ethhdr { - unsigned char h_dest[ETH_ALEN]; // destination eth addr - unsigned char h_source[ETH_ALEN]; // source ether addr - __be16 h_proto; // packet type ID field -} __attribute__((packed)); -*/ - #include - -#ifndef MICROTCP_AMALGAMATION #include "endian.h" #include "arp.h" -#endif #ifdef ARP_DEBUG #include diff --git a/src/arp.h b/src/arp.h index 566eea6..a91ea89 100644 --- a/src/arp.h +++ b/src/arp.h @@ -1,10 +1,7 @@ #include #include #include - -#ifndef MICROTCP_AMALGAMATION #include "defs.h" -#endif #define ARP_MAX_PENDING_REQUESTS 32 #define ARP_TRANSLATION_TABLE_SIZE 128 diff --git a/src/endian.c b/src/endian.c index 0e167b8..04ecd07 100644 --- a/src/endian.c +++ b/src/endian.c @@ -1,6 +1,4 @@ -#ifndef MICROTCP_AMALGAMATION #include "endian.h" -#endif bool cpu_is_little_endian(void) { diff --git a/src/icmp.c b/src/icmp.c index 6af58ee..86a53eb 100644 --- a/src/icmp.c +++ b/src/icmp.c @@ -1,9 +1,6 @@ #include - -#ifndef MICROTCP_AMALGAMATION #include "endian.h" #include "icmp.h" -#endif #ifdef ICMP_DEBUG #include diff --git a/src/icmp.h b/src/icmp.h index f598666..731ed97 100644 --- a/src/icmp.h +++ b/src/icmp.h @@ -1,8 +1,5 @@ #include - -#ifndef MICROTCP_AMALGAMATION #include "defs.h" -#endif typedef struct { void *output_ptr; diff --git a/src/ip.c b/src/ip.c index 5ef8e6e..f132126 100644 --- a/src/ip.c +++ b/src/ip.c @@ -1,9 +1,6 @@ #include - -#ifndef MICROTCP_AMALGAMATION #include "endian.h" #include "ip.h" -#endif #ifdef IP_DEBUG #include diff --git a/src/ip.h b/src/ip.h index ffa3e21..7bfb0b2 100644 --- a/src/ip.h +++ b/src/ip.h @@ -1,11 +1,8 @@ #include #include #include - -#ifndef MICROTCP_AMALGAMATION #include "defs.h" #include "icmp.h" -#endif #define IP_PLUGGED_PROTOCOLS_MAX 4 diff --git a/src/microtcp.c b/src/microtcp.c index 8667cf4..924d405 100644 --- a/src/microtcp.c +++ b/src/microtcp.c @@ -3,22 +3,14 @@ #include // strerror() #include #include - -#ifndef MICROTCP_AMALGAMATION -# include "ip.h" -# include "arp.h" -# include "tcp.h" -# include "utils.h" -# include "endian.h" -# include "microtcp.h" -# ifdef MICROTCP_BACKGROUND_THREAD -# include "tinycthread.h" -# endif -#endif - -#ifdef MICROTCP_USING_TAP #include -#endif +#include "ip.h" +#include "arp.h" +#include "tcp.h" +#include "utils.h" +#include "endian.h" +#include "microtcp.h" +#include "tinycthread.h" #ifdef MICROTCP_DEBUG #include @@ -27,15 +19,7 @@ #define MICROTCP_DEBUG_LOG(...) do {} while (0); #endif -#ifdef MICROTCP_BACKGROUND_THREAD -#define LOCK_WHEN_THREADED(mtcp) do { mtx_lock(&(mtcp)->lock); } while (0); -#define UNLOCK_WHEN_THREADED(mtcp) do { mtx_unlock(&(mtcp)->lock); } while (0); -#else -#define LOCK_WHEN_THREADED(mtcp) do { (void) (mtcp); } while (0); -#define UNLOCK_WHEN_THREADED(mtcp) do { (void) (mtcp); } while (0); -#endif -#ifdef MICROTCP_USING_MUX typedef struct mux_entry_t mux_entry_t; struct mux_entry_t { mux_entry_t **mux_prev; @@ -53,16 +37,13 @@ struct mux_entry_t { struct microtcp_mux_t { microtcp_t *mtcp; -#ifdef MICROTCP_BACKGROUND_THREAD cnd_t queue_not_empty; -#endif mux_entry_t *free_list; mux_entry_t *idle_list; mux_entry_t *ready_queue_head; mux_entry_t *ready_queue_tail; mux_entry_t entries[MICROTCP_MAX_MUX_ENTRIES]; }; -#endif typedef struct buffer_t buffer_t; struct buffer_t { @@ -88,7 +69,6 @@ struct microtcp_socket_t { tcp_connection_t *connection; }; -#ifdef MICROTCP_BACKGROUND_THREAD union { cnd_t something_to_accept; struct { @@ -96,22 +76,17 @@ struct microtcp_socket_t { cnd_t something_to_send; }; }; -#endif -#ifdef MICROTCP_USING_MUX mux_entry_t *mux_list; -#endif }; struct microtcp_t { uint64_t last_update_time_ms; -#ifdef MICROTCP_BACKGROUND_THREAD bool thread_should_stop; thrd_t thread_id; mtx_t lock; -#endif microtcp_callbacks_t callbacks; @@ -393,9 +368,9 @@ process_packet(microtcp_t *mtcp, const void *packet, size_t len) void microtcp_process_packet(microtcp_t *mtcp, const void *packet, size_t len) { - LOCK_WHEN_THREADED(mtcp); + mtx_lock(&mtcp->lock); process_packet(mtcp, packet, len); - UNLOCK_WHEN_THREADED(mtcp); + mtx_unlock(&mtcp->lock); } static uint64_t get_time_in_ms(void) @@ -419,7 +394,7 @@ void microtcp_step(microtcp_t *mtcp) uint64_t current_time_ms = get_time_in_ms(); - LOCK_WHEN_THREADED(mtcp); + mtx_lock(&mtcp->lock); { process_packet(mtcp, packet, size); @@ -432,10 +407,9 @@ void microtcp_step(microtcp_t *mtcp) mtcp->last_update_time_ms = current_time_ms; } } - UNLOCK_WHEN_THREADED(mtcp); + mtx_unlock(&mtcp->lock); } -#ifdef MICROTCP_BACKGROUND_THREAD static int loop(void *data) { microtcp_t *mtcp = data; @@ -443,7 +417,6 @@ static int loop(void *data) microtcp_step(mtcp); return 0; } -#endif microtcp_t *microtcp_create_using_callbacks(const char *ip, const char *mac, microtcp_callbacks_t callbacks) @@ -492,7 +465,7 @@ microtcp_t *microtcp_create_using_callbacks(const char *ip, const char *mac, mtcp->socket_pool[MICROTCP_MAX_SOCKETS-1].mtcp = NULL; mtcp->socket_pool[MICROTCP_MAX_SOCKETS-1].prev = NULL; mtcp->socket_pool[MICROTCP_MAX_SOCKETS-1].next = NULL; - + ip_init(&mtcp->ip_state, parsed_ip, mtcp, send_ip_packet); if (!ip_plug_protocol(&mtcp->ip_state, IP_PROTOCOL_TCP, &mtcp->tcp_state, tcp_process_segment_wrapper)) { free(mtcp); @@ -508,9 +481,8 @@ microtcp_t *microtcp_create_using_callbacks(const char *ip, const char *mac, use_a_buffer(mtcp); -#ifdef MICROTCP_BACKGROUND_THREAD { - if (mtx_init(&mtcp->lock, mtx_plain) != thrd_success) { + if (mtx_init(&mtcp->lock, mtx_recursive) != thrd_success) { ip_free(&mtcp->ip_state); arp_free(&mtcp->arp_state); tcp_free(&mtcp->tcp_state); @@ -527,7 +499,6 @@ microtcp_t *microtcp_create_using_callbacks(const char *ip, const char *mac, return NULL; } } -#endif MICROTCP_DEBUG_LOG("Instanciated (" "debug=" @@ -535,21 +506,12 @@ microtcp_t *microtcp_create_using_callbacks(const char *ip, const char *mac, "yes" #else "no" -#endif - ", thread=" -#ifdef MICROTCP_BACKGROUND_THREAD - "yes" -#else - "no" #endif ")"); return mtcp; } - -#ifdef MICROTCP_USING_TAP - static void log_callback_for_tuntap_library(int level, const char *errmsg) { const char *name; @@ -622,17 +584,14 @@ microtcp_t *microtcp_create(const char *tap_ip, const char *stack_ip, callbacks.free(callbacks.data); return mtcp; } -#endif void microtcp_destroy(microtcp_t *mtcp) { -#ifdef MICROTCP_BACKGROUND_THREAD MICROTCP_DEBUG_LOG("Stopping thread"); mtcp->thread_should_stop = true; thrd_join(mtcp->thread_id, NULL); mtx_destroy(&mtcp->lock); MICROTCP_DEBUG_LOG("Thread stopped"); -#endif ip_free(&mtcp->ip_state); arp_free(&mtcp->arp_state); @@ -687,30 +646,23 @@ push_unlinked_socket_into_free_list(microtcp_t *mtcp, microtcp_socket_t *socket) mtcp->free_socket_list = socket; } -#ifdef MICROTCP_USING_MUX static void signal_events_to_muxes_associated_to_socket(microtcp_socket_t *socket, int events); -#endif static void listener_event_callback(void *data, tcp_listenevent_t event) { microtcp_socket_t *socket = data; - (void) socket; - -#ifdef MICROTCP_BACKGROUND_THREAD - switch (event) { - case TCP_LISTENEVENT_ACCEPT: cnd_signal(&socket->something_to_accept); break; - } -#endif - -#ifdef MICROTCP_USING_MUX + int flags = 0; switch (event) { - case TCP_LISTENEVENT_ACCEPT: flags = MICROTCP_MUX_ACCEPT; MICROTCP_DEBUG_LOG("Signaling ACCEPT to muxes"); break; + case TCP_LISTENEVENT_ACCEPT: + cnd_signal(&socket->something_to_accept); + flags = MICROTCP_MUX_ACCEPT; + MICROTCP_DEBUG_LOG("Signaling ACCEPT to muxes"); + break; } if (flags) signal_events_to_muxes_associated_to_socket(socket, flags); -#endif } microtcp_socket_t *microtcp_open(microtcp_t *mtcp, uint16_t port, @@ -718,7 +670,7 @@ microtcp_socket_t *microtcp_open(microtcp_t *mtcp, uint16_t port, { microtcp_errcode_t errcode2 = MICROTCP_ERRCODE_NONE; microtcp_socket_t *socket = NULL; - LOCK_WHEN_THREADED(mtcp); + mtx_lock(&mtcp->lock); { socket = pop_socket_struct_from_free_list(mtcp); if (!socket) { @@ -740,23 +692,19 @@ microtcp_socket_t *microtcp_open(microtcp_t *mtcp, uint16_t port, socket->next = NULL; socket->type = SOCKET_LISTENER; socket->listener = listener; - -#ifdef MICROTCP_USING_MUX socket->mux_list = NULL; -#endif -#ifdef MICROTCP_BACKGROUND_THREAD if (cnd_init(&socket->something_to_accept) != thrd_success) { errcode2 = MICROTCP_ERRCODE_BADCONDVAR; push_unlinked_socket_into_free_list(mtcp, socket); tcp_listener_destroy(listener); goto unlock_and_exit; } -#endif + push_unlinked_socket_into_used_list(socket); } unlock_and_exit: - UNLOCK_WHEN_THREADED(mtcp); + mtx_unlock(&mtcp->lock); if (errcode) *errcode = errcode2; return socket; @@ -769,10 +717,8 @@ void microtcp_close(microtcp_socket_t *socket) microtcp_t *mtcp = socket->mtcp; - LOCK_WHEN_THREADED(mtcp); + mtx_lock(&mtcp->lock); { - -#ifdef MICROTCP_USING_MUX // Unregister from all multiplexers while (socket->mux_list) { // The unregister operation only has @@ -783,14 +729,11 @@ void microtcp_close(microtcp_socket_t *socket) socket->mux_list->triggered_events = 0; microtcp_mux_unregister(socket->mux_list->mux, socket, ~0); } -#endif switch (socket->type) { case SOCKET_LISTENER: -#ifdef MICROTCP_BACKGROUND_THREAD cnd_destroy(&socket->something_to_accept); -#endif tcp_listener_destroy(socket->listener); break; @@ -804,38 +747,36 @@ void microtcp_close(microtcp_socket_t *socket) unlink_socket_from_used_socket_list(socket); push_unlinked_socket_into_free_list(mtcp, socket); } - UNLOCK_WHEN_THREADED(mtcp); + mtx_unlock(&mtcp->lock); } static void conn_event_callback(void *data, tcp_connevent_t event) { microtcp_socket_t *socket = data; - (void) socket; -#ifdef MICROTCP_BACKGROUND_THREAD + int flags; switch (event) { - case TCP_CONNEVENT_RECV: MICROTCP_DEBUG_LOG("Signal RECV"); cnd_signal(&socket->something_to_recv); break; - case TCP_CONNEVENT_SEND: MICROTCP_DEBUG_LOG("Signal SEND"); cnd_signal(&socket->something_to_send); break; + case TCP_CONNEVENT_RECV: + MICROTCP_DEBUG_LOG("Signal RECV"); + cnd_signal(&socket->something_to_recv); + flags = MICROTCP_MUX_RECV; + break; + + case TCP_CONNEVENT_SEND: + MICROTCP_DEBUG_LOG("Signal SEND"); + cnd_signal(&socket->something_to_send); + flags = MICROTCP_MUX_SEND; + break; case TCP_CONNEVENT_RESET: case TCP_CONNEVENT_CLOSE: socket->connection = NULL; + flags = 0; // TODO: Maybe signal closing and reset events to muxes? break; } -#endif - -#ifdef MICROTCP_USING_MUX - // TODO: Maybe signal closing and reset events to muxes? - int flags; - switch (event) { - case TCP_CONNEVENT_RECV: flags = MICROTCP_MUX_RECV; MICROTCP_DEBUG_LOG("Signaling RECV to muxes"); break; - case TCP_CONNEVENT_SEND: flags = MICROTCP_MUX_SEND; MICROTCP_DEBUG_LOG("Signaling SEND to muxes"); break; - default: flags = 0; break; - } if (flags) signal_events_to_muxes_associated_to_socket(socket, flags); -#endif } microtcp_socket_t *microtcp_accept(microtcp_socket_t *socket, @@ -846,7 +787,7 @@ microtcp_socket_t *microtcp_accept(microtcp_socket_t *socket, microtcp_t *mtcp = socket->mtcp; microtcp_socket_t *socket2 = NULL; - LOCK_WHEN_THREADED(mtcp); + mtx_lock(&mtcp->lock); { if (socket->type != SOCKET_LISTENER) { errcode2 = MICROTCP_ERRCODE_NOTLISTENER; @@ -861,7 +802,6 @@ microtcp_socket_t *microtcp_accept(microtcp_socket_t *socket, tcp_connection_t *connection = tcp_listener_accept(socket->listener, socket2, conn_event_callback); -#ifdef MICROTCP_BACKGROUND_THREAD while (!connection && !no_block) { if (cnd_wait(&socket->something_to_accept, &mtcp->lock) != thrd_success) { errcode2 = MICROTCP_ERRCODE_BADCONDVAR; @@ -870,28 +810,14 @@ microtcp_socket_t *microtcp_accept(microtcp_socket_t *socket, } connection = tcp_listener_accept(socket->listener, socket2, conn_event_callback); } -#else - if (!connection) { - if (no_block) - errcode2 = MICROTCP_ERRCODE_WOULDBLOCK; - else - errcode2 = MICROTCP_ERRCODE_CANTBLOCK; - push_unlinked_socket_into_free_list(mtcp, socket2); - goto unlock_and_exit; - } -#endif socket2->mtcp = mtcp; socket2->prev = NULL; socket2->next = NULL; socket2->type = SOCKET_CONNECTION; socket2->connection = connection; - -#ifdef MICROTCP_USING_MUX socket2->mux_list = NULL; -#endif -#ifdef MICROTCP_BACKGROUND_THREAD if (cnd_init(&socket2->something_to_recv) != thrd_success) { errcode2 = MICROTCP_ERRCODE_BADCONDVAR; push_unlinked_socket_into_free_list(mtcp, socket2); @@ -903,13 +829,12 @@ microtcp_socket_t *microtcp_accept(microtcp_socket_t *socket, push_unlinked_socket_into_free_list(mtcp, socket2); goto unlock_and_exit; } -#endif push_unlinked_socket_into_used_list(socket2); } unlock_and_exit: - UNLOCK_WHEN_THREADED(mtcp); + mtx_unlock(&mtcp->lock); if (errcode) *errcode = errcode2; @@ -938,11 +863,10 @@ size_t microtcp_recv(microtcp_socket_t *socket, microtcp_t *mtcp = socket->mtcp; microtcp_errcode_t errcode2 = MICROTCP_ERRCODE_NONE; - LOCK_WHEN_THREADED(mtcp); + mtx_lock(&mtcp->lock); { num = tcp_connection_recv(socket->connection, dst, len); -#ifdef MICROTCP_BACKGROUND_THREAD while (num == 0 && !no_block) { if (cnd_wait(&socket->something_to_recv, &mtcp->lock) != thrd_success) { errcode2 = MICROTCP_ERRCODE_BADCONDVAR; @@ -950,7 +874,7 @@ size_t microtcp_recv(microtcp_socket_t *socket, } num = tcp_connection_recv(socket->connection, dst, len); } -#endif + if (num == 0) { if (no_block) errcode2 = MICROTCP_ERRCODE_WOULDBLOCK; @@ -962,7 +886,7 @@ size_t microtcp_recv(microtcp_socket_t *socket, goto unlock_and_exit; // Warning unlock_and_exit: - UNLOCK_WHEN_THREADED(mtcp); + mtx_unlock(&mtcp->lock); if (errcode) *errcode = errcode2; @@ -990,11 +914,10 @@ size_t microtcp_send(microtcp_socket_t *socket, microtcp_t *mtcp = socket->mtcp; microtcp_errcode_t errcode2 = MICROTCP_ERRCODE_NONE; - LOCK_WHEN_THREADED(mtcp); + mtx_lock(&mtcp->lock); { num = tcp_connection_send(socket->connection, src, len); -#ifdef MICROTCP_BACKGROUND_THREAD while (num == 0 && !no_block) { if (cnd_wait(&socket->something_to_send, &mtcp->lock) != thrd_success) { errcode2 = MICROTCP_ERRCODE_BADCONDVAR; @@ -1002,7 +925,7 @@ size_t microtcp_send(microtcp_socket_t *socket, } num = tcp_connection_send(socket->connection, src, len); } -#endif + if (num == 0) { if (no_block) errcode2 = MICROTCP_ERRCODE_WOULDBLOCK; @@ -1012,14 +935,13 @@ size_t microtcp_send(microtcp_socket_t *socket, } goto unlock_and_exit; // Warning unlock_and_exit: - UNLOCK_WHEN_THREADED(mtcp); + mtx_unlock(&mtcp->lock); if (errcode) *errcode = errcode2; return num; } -#ifdef MICROTCP_USING_MUX microtcp_mux_t *microtcp_mux_create(microtcp_t *mtcp) { microtcp_mux_t *mux = malloc(sizeof(microtcp_mux_t)); @@ -1048,12 +970,10 @@ microtcp_mux_t *microtcp_mux_create(microtcp_t *mtcp) mux->ready_queue_head = NULL; mux->ready_queue_tail = NULL; -#ifdef MICROTCP_BACKGROUND_THREAD if (cnd_init(&mux->queue_not_empty) != thrd_success) { free(mux); return NULL; } -#endif return mux; } @@ -1084,10 +1004,7 @@ void microtcp_mux_destroy(microtcp_mux_t *mux) assert(entry != mux->ready_queue_head); } -#ifdef MICROTCP_BACKGROUND_THREAD cnd_destroy(&mux->queue_not_empty); -#endif - free(mux); } @@ -1152,7 +1069,7 @@ move_mux_entry_to_idle_list(mux_entry_t *entry) bool microtcp_mux_unregister(microtcp_mux_t *mux, microtcp_socket_t *sock, int events) { - LOCK_WHEN_THREADED(mux->mtcp); + mtx_lock(&mux->mtcp->lock); // There's no need to check that mux // and socket have the same mtcp because @@ -1163,7 +1080,7 @@ bool microtcp_mux_unregister(microtcp_mux_t *mux, microtcp_socket_t *sock, int e mux_entry_t *entry = find_socket_and_mux_entry(mux, sock); if (!entry) { // This socket wasn't registered into the mux - UNLOCK_WHEN_THREADED(mux->mtcp); + mtx_unlock(&mux->mtcp->lock); return false; } @@ -1184,21 +1101,21 @@ bool microtcp_mux_unregister(microtcp_mux_t *mux, microtcp_socket_t *sock, int e // move the entry to the free list. move_mux_entry_to_free_list(entry); - UNLOCK_WHEN_THREADED(mux->mtcp); + mtx_unlock(&mux->mtcp->lock); return true; } bool microtcp_mux_register(microtcp_mux_t *mux, microtcp_socket_t *sock, int events, void *userp) { - LOCK_WHEN_THREADED(mux->mtcp); + mtx_lock(&mux->mtcp->lock); if (mux->mtcp != sock->mtcp) { - UNLOCK_WHEN_THREADED(mux->mtcp); + mtx_unlock(&mux->mtcp->lock); return false; // mux and socket are associated to different microtcp stacks } if (events == 0) { - UNLOCK_WHEN_THREADED(mux->mtcp); + mtx_unlock(&mux->mtcp->lock); return true; // Nothing to be done } @@ -1209,7 +1126,7 @@ bool microtcp_mux_register(microtcp_mux_t *mux, microtcp_socket_t *sock, int eve if (mux->free_list == NULL) { // The entry limit was reached. // It's impossible to register the socket at this time - UNLOCK_WHEN_THREADED(mux->mtcp); + mtx_unlock(&mux->mtcp->lock); return false; } @@ -1243,7 +1160,7 @@ bool microtcp_mux_register(microtcp_mux_t *mux, microtcp_socket_t *sock, int eve entry->events_of_interest |= events; - UNLOCK_WHEN_THREADED(mux->mtcp); + mtx_unlock(&mux->mtcp->lock); return true; } @@ -1284,19 +1201,15 @@ static bool mux_poll(microtcp_mux_t *mux, microtcp_muxevent_t *ev) bool microtcp_mux_wait(microtcp_mux_t *mux, microtcp_muxevent_t *ev) { -#ifdef MICROTCP_BACKGROUND_THREAD - LOCK_WHEN_THREADED(mux->mtcp); + mtx_lock(&mux->mtcp->lock); while (!mux_poll(mux, ev)) { MICROTCP_DEBUG_LOG("Multiplexer waiting for an event"); if (cnd_wait(&mux->queue_not_empty, &mux->mtcp->lock) != thrd_success) abort(); MICROTCP_DEBUG_LOG("Multiplexer woke up for an event"); } - UNLOCK_WHEN_THREADED(mux->mtcp); + mtx_unlock(&mux->mtcp->lock); return true; -#else - return mux_poll(mux, ev); -#endif } static void @@ -1350,17 +1263,12 @@ signal_events_to_muxes_associated_to_socket(microtcp_socket_t *socket, int event entry->mux_next = NULL; mux->ready_queue_tail = entry; -#ifdef MICROTCP_BACKGROUND_THREAD MICROTCP_DEBUG_LOG("Signaling event to multiplexer"); if (queue_was_empty) cnd_signal(&mux->queue_not_empty); MICROTCP_DEBUG_LOG("Signaled event to multiplexer"); -#else - (void) queue_was_empty; -#endif } entry = entry->sock_next; } MICROTCP_DEBUG_LOG("Socket signaled to multiplexers"); } -#endif \ No newline at end of file diff --git a/src/microtcp.h b/src/microtcp.h index 8872db7..9219836 100644 --- a/src/microtcp.h +++ b/src/microtcp.h @@ -1,3 +1,5 @@ +#ifndef MICROTCP_H +#define MICROTCP_H #include #include @@ -44,10 +46,8 @@ typedef struct { int (*recv)(void *data, void *dst, size_t len); } microtcp_callbacks_t; -#ifdef MICROTCP_USING_TAP bool microtcp_callbacks_create_for_tap(const char *ip, const char *mac, microtcp_callbacks_t *callbacks); microtcp_t *microtcp_create(const char *tap_ip, const char *stack_ip, const char *tap_mac, const char *stack_mac); -#endif microtcp_t *microtcp_create_using_callbacks(const char *ip, const char *mac, microtcp_callbacks_t callbacks); void microtcp_destroy(microtcp_t *mtcp); @@ -60,7 +60,6 @@ size_t microtcp_recv(microtcp_socket_t *socket, void *dst, siz void microtcp_step(microtcp_t *mtcp); void microtcp_process_packet(microtcp_t *mtcp, const void *packet, size_t len); -#ifdef MICROTCP_USING_MUX typedef enum { MICROTCP_MUX_ACCEPT = 1, MICROTCP_MUX_RECV = 2, @@ -79,4 +78,5 @@ void microtcp_mux_destroy(microtcp_mux_t *mux); bool microtcp_mux_register(microtcp_mux_t *mux, microtcp_socket_t *sock, int events, void *userp); bool microtcp_mux_unregister(microtcp_mux_t *mux, microtcp_socket_t *sock, int events); bool microtcp_mux_wait(microtcp_mux_t *mux, microtcp_muxevent_t *ev); + #endif \ No newline at end of file diff --git a/src/tcp.c b/src/tcp.c index d16bde3..c6378b0 100644 --- a/src/tcp.c +++ b/src/tcp.c @@ -1,11 +1,8 @@ #include #include #include - -#ifndef MICROTCP_AMALGAMATION -# include "endian.h" -# include "tcp.h" -#endif +#include "endian.h" +#include "tcp.h" #ifdef TCP_DEBUG # include @@ -444,8 +441,8 @@ static void retransmit(tcp_connection_t *c) size_t retr_queue_bytes = c->snd_nxt - c->snd_una; - assert(retr_queue_bytes > 0); // If there were no bytes to ACK, - // there would be no active timer. + //assert(retr_queue_bytes > 0); // If there were no bytes to ACK, + // there would be no active timer. size_t retr_queue_ghost = 0; if (c->waiting_ack_for_syn) retr_queue_ghost++; diff --git a/src/tcp.h b/src/tcp.h index 864a90a..e41ab7a 100644 --- a/src/tcp.h +++ b/src/tcp.h @@ -1,10 +1,7 @@ #include #include - -#ifndef MICROTCP_AMALGAMATION #include "defs.h" #include "tcp_timer.h" -#endif #define TCP_TIMEOUT_TIME_WAIT 1000 //240000 diff --git a/src/tcp_timer.c b/src/tcp_timer.c index f0d9db7..9869e7c 100644 --- a/src/tcp_timer.c +++ b/src/tcp_timer.c @@ -1,9 +1,6 @@ #include #include - -#ifndef MICROTCP_AMALGAMATION #include "tcp_timer.h" -#endif void tcp_timerset_init(tcp_timerset_t *set) { diff --git a/src/tinycthread.c b/src/tinycthread.c new file mode 100644 index 0000000..195e413 --- /dev/null +++ b/src/tinycthread.c @@ -0,0 +1,931 @@ +/* -*- mode: c; tab-width: 2; indent-tabs-mode: nil; -*- +Copyright (c) 2012 Marcus Geelnard +Copyright (c) 2013-2016 Evan Nemerson + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ + +#include "tinycthread.h" +#include + +/* Platform specific includes */ +#if defined(_TTHREAD_POSIX_) + #include + #include + #include + #include + #include +#elif defined(_TTHREAD_WIN32_) + #include + #include +#endif + +/* Standard, good-to-have defines */ +#ifndef NULL + #define NULL (void*)0 +#endif +#ifndef TRUE + #define TRUE 1 +#endif +#ifndef FALSE + #define FALSE 0 +#endif + +#ifdef __cplusplus +extern "C" { +#endif + + +int mtx_init(mtx_t *mtx, int type) +{ +#if defined(_TTHREAD_WIN32_) + mtx->mAlreadyLocked = FALSE; + mtx->mRecursive = type & mtx_recursive; + mtx->mTimed = type & mtx_timed; + if (!mtx->mTimed) + { + InitializeCriticalSection(&(mtx->mHandle.cs)); + } + else + { + mtx->mHandle.mut = CreateMutex(NULL, FALSE, NULL); + if (mtx->mHandle.mut == NULL) + { + return thrd_error; + } + } + return thrd_success; +#else + int ret; + pthread_mutexattr_t attr; + pthread_mutexattr_init(&attr); + if (type & mtx_recursive) + { + pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE); + } + ret = pthread_mutex_init(mtx, &attr); + pthread_mutexattr_destroy(&attr); + return ret == 0 ? thrd_success : thrd_error; +#endif +} + +void mtx_destroy(mtx_t *mtx) +{ +#if defined(_TTHREAD_WIN32_) + if (!mtx->mTimed) + { + DeleteCriticalSection(&(mtx->mHandle.cs)); + } + else + { + CloseHandle(mtx->mHandle.mut); + } +#else + pthread_mutex_destroy(mtx); +#endif +} + +int mtx_lock(mtx_t *mtx) +{ +#if defined(_TTHREAD_WIN32_) + if (!mtx->mTimed) + { + EnterCriticalSection(&(mtx->mHandle.cs)); + } + else + { + switch (WaitForSingleObject(mtx->mHandle.mut, INFINITE)) + { + case WAIT_OBJECT_0: + break; + case WAIT_ABANDONED: + default: + return thrd_error; + } + } + + if (!mtx->mRecursive) + { + while(mtx->mAlreadyLocked) Sleep(1); /* Simulate deadlock... */ + mtx->mAlreadyLocked = TRUE; + } + return thrd_success; +#else + return pthread_mutex_lock(mtx) == 0 ? thrd_success : thrd_error; +#endif +} + +int mtx_timedlock(mtx_t *mtx, const struct timespec *ts) +{ +#if defined(_TTHREAD_WIN32_) + struct timespec current_ts; + DWORD timeoutMs; + + if (!mtx->mTimed) + { + return thrd_error; + } + + timespec_get(¤t_ts, TIME_UTC); + + if ((current_ts.tv_sec > ts->tv_sec) || ((current_ts.tv_sec == ts->tv_sec) && (current_ts.tv_nsec >= ts->tv_nsec))) + { + timeoutMs = 0; + } + else + { + timeoutMs = (DWORD)(ts->tv_sec - current_ts.tv_sec) * 1000; + timeoutMs += (ts->tv_nsec - current_ts.tv_nsec) / 1000000; + timeoutMs += 1; + } + + /* TODO: the timeout for WaitForSingleObject doesn't include time + while the computer is asleep. */ + switch (WaitForSingleObject(mtx->mHandle.mut, timeoutMs)) + { + case WAIT_OBJECT_0: + break; + case WAIT_TIMEOUT: + return thrd_timedout; + case WAIT_ABANDONED: + default: + return thrd_error; + } + + if (!mtx->mRecursive) + { + while(mtx->mAlreadyLocked) Sleep(1); /* Simulate deadlock... */ + mtx->mAlreadyLocked = TRUE; + } + + return thrd_success; +#elif defined(_POSIX_TIMEOUTS) && (_POSIX_TIMEOUTS >= 200112L) && defined(_POSIX_THREADS) && (_POSIX_THREADS >= 200112L) + switch (pthread_mutex_timedlock(mtx, ts)) { + case 0: + return thrd_success; + case ETIMEDOUT: + return thrd_timedout; + default: + return thrd_error; + } +#else + int rc; + struct timespec cur, dur; + + /* Try to acquire the lock and, if we fail, sleep for 5ms. */ + while ((rc = pthread_mutex_trylock (mtx)) == EBUSY) { + timespec_get(&cur, TIME_UTC); + + if ((cur.tv_sec > ts->tv_sec) || ((cur.tv_sec == ts->tv_sec) && (cur.tv_nsec >= ts->tv_nsec))) + { + break; + } + + dur.tv_sec = ts->tv_sec - cur.tv_sec; + dur.tv_nsec = ts->tv_nsec - cur.tv_nsec; + if (dur.tv_nsec < 0) + { + dur.tv_sec--; + dur.tv_nsec += 1000000000; + } + + if ((dur.tv_sec != 0) || (dur.tv_nsec > 5000000)) + { + dur.tv_sec = 0; + dur.tv_nsec = 5000000; + } + + nanosleep(&dur, NULL); + } + + switch (rc) { + case 0: + return thrd_success; + case ETIMEDOUT: + case EBUSY: + return thrd_timedout; + default: + return thrd_error; + } +#endif +} + +int mtx_trylock(mtx_t *mtx) +{ +#if defined(_TTHREAD_WIN32_) + int ret; + + if (!mtx->mTimed) + { + ret = TryEnterCriticalSection(&(mtx->mHandle.cs)) ? thrd_success : thrd_busy; + } + else + { + ret = (WaitForSingleObject(mtx->mHandle.mut, 0) == WAIT_OBJECT_0) ? thrd_success : thrd_busy; + } + + if ((!mtx->mRecursive) && (ret == thrd_success)) + { + if (mtx->mAlreadyLocked) + { + LeaveCriticalSection(&(mtx->mHandle.cs)); + ret = thrd_busy; + } + else + { + mtx->mAlreadyLocked = TRUE; + } + } + return ret; +#else + return (pthread_mutex_trylock(mtx) == 0) ? thrd_success : thrd_busy; +#endif +} + +int mtx_unlock(mtx_t *mtx) +{ +#if defined(_TTHREAD_WIN32_) + mtx->mAlreadyLocked = FALSE; + if (!mtx->mTimed) + { + LeaveCriticalSection(&(mtx->mHandle.cs)); + } + else + { + if (!ReleaseMutex(mtx->mHandle.mut)) + { + return thrd_error; + } + } + return thrd_success; +#else + return pthread_mutex_unlock(mtx) == 0 ? thrd_success : thrd_error;; +#endif +} + +#if defined(_TTHREAD_WIN32_) +#define _CONDITION_EVENT_ONE 0 +#define _CONDITION_EVENT_ALL 1 +#endif + +int cnd_init(cnd_t *cond) +{ +#if defined(_TTHREAD_WIN32_) + cond->mWaitersCount = 0; + + /* Init critical section */ + InitializeCriticalSection(&cond->mWaitersCountLock); + + /* Init events */ + cond->mEvents[_CONDITION_EVENT_ONE] = CreateEvent(NULL, FALSE, FALSE, NULL); + if (cond->mEvents[_CONDITION_EVENT_ONE] == NULL) + { + cond->mEvents[_CONDITION_EVENT_ALL] = NULL; + return thrd_error; + } + cond->mEvents[_CONDITION_EVENT_ALL] = CreateEvent(NULL, TRUE, FALSE, NULL); + if (cond->mEvents[_CONDITION_EVENT_ALL] == NULL) + { + CloseHandle(cond->mEvents[_CONDITION_EVENT_ONE]); + cond->mEvents[_CONDITION_EVENT_ONE] = NULL; + return thrd_error; + } + + return thrd_success; +#else + return pthread_cond_init(cond, NULL) == 0 ? thrd_success : thrd_error; +#endif +} + +void cnd_destroy(cnd_t *cond) +{ +#if defined(_TTHREAD_WIN32_) + if (cond->mEvents[_CONDITION_EVENT_ONE] != NULL) + { + CloseHandle(cond->mEvents[_CONDITION_EVENT_ONE]); + } + if (cond->mEvents[_CONDITION_EVENT_ALL] != NULL) + { + CloseHandle(cond->mEvents[_CONDITION_EVENT_ALL]); + } + DeleteCriticalSection(&cond->mWaitersCountLock); +#else + pthread_cond_destroy(cond); +#endif +} + +int cnd_signal(cnd_t *cond) +{ +#if defined(_TTHREAD_WIN32_) + int haveWaiters; + + /* Are there any waiters? */ + EnterCriticalSection(&cond->mWaitersCountLock); + haveWaiters = (cond->mWaitersCount > 0); + LeaveCriticalSection(&cond->mWaitersCountLock); + + /* If we have any waiting threads, send them a signal */ + if(haveWaiters) + { + if (SetEvent(cond->mEvents[_CONDITION_EVENT_ONE]) == 0) + { + return thrd_error; + } + } + + return thrd_success; +#else + return pthread_cond_signal(cond) == 0 ? thrd_success : thrd_error; +#endif +} + +int cnd_broadcast(cnd_t *cond) +{ +#if defined(_TTHREAD_WIN32_) + int haveWaiters; + + /* Are there any waiters? */ + EnterCriticalSection(&cond->mWaitersCountLock); + haveWaiters = (cond->mWaitersCount > 0); + LeaveCriticalSection(&cond->mWaitersCountLock); + + /* If we have any waiting threads, send them a signal */ + if(haveWaiters) + { + if (SetEvent(cond->mEvents[_CONDITION_EVENT_ALL]) == 0) + { + return thrd_error; + } + } + + return thrd_success; +#else + return pthread_cond_broadcast(cond) == 0 ? thrd_success : thrd_error; +#endif +} + +#if defined(_TTHREAD_WIN32_) +static int _cnd_timedwait_win32(cnd_t *cond, mtx_t *mtx, DWORD timeout) +{ + DWORD result; + int lastWaiter; + + /* Increment number of waiters */ + EnterCriticalSection(&cond->mWaitersCountLock); + ++ cond->mWaitersCount; + LeaveCriticalSection(&cond->mWaitersCountLock); + + /* Release the mutex while waiting for the condition (will decrease + the number of waiters when done)... */ + mtx_unlock(mtx); + + /* Wait for either event to become signaled due to cnd_signal() or + cnd_broadcast() being called */ + result = WaitForMultipleObjects(2, cond->mEvents, FALSE, timeout); + if (result == WAIT_TIMEOUT) + { + /* The mutex is locked again before the function returns, even if an error occurred */ + mtx_lock(mtx); + return thrd_timedout; + } + else if (result == WAIT_FAILED) + { + /* The mutex is locked again before the function returns, even if an error occurred */ + mtx_lock(mtx); + return thrd_error; + } + + /* Check if we are the last waiter */ + EnterCriticalSection(&cond->mWaitersCountLock); + -- cond->mWaitersCount; + lastWaiter = (result == (WAIT_OBJECT_0 + _CONDITION_EVENT_ALL)) && + (cond->mWaitersCount == 0); + LeaveCriticalSection(&cond->mWaitersCountLock); + + /* If we are the last waiter to be notified to stop waiting, reset the event */ + if (lastWaiter) + { + if (ResetEvent(cond->mEvents[_CONDITION_EVENT_ALL]) == 0) + { + /* The mutex is locked again before the function returns, even if an error occurred */ + mtx_lock(mtx); + return thrd_error; + } + } + + /* Re-acquire the mutex */ + mtx_lock(mtx); + + return thrd_success; +} +#endif + +int cnd_wait(cnd_t *cond, mtx_t *mtx) +{ +#if defined(_TTHREAD_WIN32_) + return _cnd_timedwait_win32(cond, mtx, INFINITE); +#else + return pthread_cond_wait(cond, mtx) == 0 ? thrd_success : thrd_error; +#endif +} + +int cnd_timedwait(cnd_t *cond, mtx_t *mtx, const struct timespec *ts) +{ +#if defined(_TTHREAD_WIN32_) + struct timespec now; + if (timespec_get(&now, TIME_UTC) == TIME_UTC) + { + unsigned long long nowInMilliseconds = now.tv_sec * 1000 + now.tv_nsec / 1000000; + unsigned long long tsInMilliseconds = ts->tv_sec * 1000 + ts->tv_nsec / 1000000; + DWORD delta = (tsInMilliseconds > nowInMilliseconds) ? + (DWORD)(tsInMilliseconds - nowInMilliseconds) : 0; + return _cnd_timedwait_win32(cond, mtx, delta); + } + else + return thrd_error; +#else + int ret; + ret = pthread_cond_timedwait(cond, mtx, ts); + if (ret == ETIMEDOUT) + { + return thrd_timedout; + } + return ret == 0 ? thrd_success : thrd_error; +#endif +} + +#if defined(_TTHREAD_WIN32_) +struct TinyCThreadTSSData { + void* value; + tss_t key; + struct TinyCThreadTSSData* next; +}; + +static tss_dtor_t _tinycthread_tss_dtors[1088] = { NULL, }; + +static _Thread_local struct TinyCThreadTSSData* _tinycthread_tss_head = NULL; +static _Thread_local struct TinyCThreadTSSData* _tinycthread_tss_tail = NULL; + +static void _tinycthread_tss_cleanup (void); + +static void _tinycthread_tss_cleanup (void) { + struct TinyCThreadTSSData* data; + int iteration; + unsigned int again = 1; + void* value; + + for (iteration = 0 ; iteration < TSS_DTOR_ITERATIONS && again > 0 ; iteration++) + { + again = 0; + for (data = _tinycthread_tss_head ; data != NULL ; data = data->next) + { + if (data->value != NULL) + { + value = data->value; + data->value = NULL; + + if (_tinycthread_tss_dtors[data->key] != NULL) + { + again = 1; + _tinycthread_tss_dtors[data->key](value); + } + } + } + } + + while (_tinycthread_tss_head != NULL) { + data = _tinycthread_tss_head->next; + free (_tinycthread_tss_head); + _tinycthread_tss_head = data; + } + _tinycthread_tss_head = NULL; + _tinycthread_tss_tail = NULL; +} + +static void NTAPI _tinycthread_tss_callback(PVOID h, DWORD dwReason, PVOID pv) +{ + (void)h; + (void)pv; + + if (_tinycthread_tss_head != NULL && (dwReason == DLL_THREAD_DETACH || dwReason == DLL_PROCESS_DETACH)) + { + _tinycthread_tss_cleanup(); + } +} + +#if defined(_MSC_VER) + #ifdef _M_X64 + #pragma const_seg(".CRT$XLB") + #else + #pragma data_seg(".CRT$XLB") + #endif + PIMAGE_TLS_CALLBACK p_thread_callback = _tinycthread_tss_callback; + #ifdef _M_X64 + #pragma data_seg() + #else + #pragma const_seg() + #endif +#else + PIMAGE_TLS_CALLBACK p_thread_callback __attribute__((section(".CRT$XLB"))) = _tinycthread_tss_callback; +#endif + +#endif /* defined(_TTHREAD_WIN32_) */ + +/** Information to pass to the new thread (what to run). */ +typedef struct { + thrd_start_t mFunction; /**< Pointer to the function to be executed. */ + void * mArg; /**< Function argument for the thread function. */ +} _thread_start_info; + +/* Thread wrapper function. */ +#if defined(_TTHREAD_WIN32_) +static DWORD WINAPI _thrd_wrapper_function(LPVOID aArg) +#elif defined(_TTHREAD_POSIX_) +static void * _thrd_wrapper_function(void * aArg) +#endif +{ + thrd_start_t fun; + void *arg; + int res; + + /* Get thread startup information */ + _thread_start_info *ti = (_thread_start_info *) aArg; + fun = ti->mFunction; + arg = ti->mArg; + + /* The thread is responsible for freeing the startup information */ + free((void *)ti); + + /* Call the actual client thread function */ + res = fun(arg); + +#if defined(_TTHREAD_WIN32_) + if (_tinycthread_tss_head != NULL) + { + _tinycthread_tss_cleanup(); + } + + return (DWORD)res; +#else + return (void*)(intptr_t)res; +#endif +} + +int thrd_create(thrd_t *thr, thrd_start_t func, void *arg) +{ + /* Fill out the thread startup information (passed to the thread wrapper, + which will eventually free it) */ + _thread_start_info* ti = (_thread_start_info*)malloc(sizeof(_thread_start_info)); + if (ti == NULL) + { + return thrd_nomem; + } + ti->mFunction = func; + ti->mArg = arg; + + /* Create the thread */ +#if defined(_TTHREAD_WIN32_) + *thr = CreateThread(NULL, 0, _thrd_wrapper_function, (LPVOID) ti, 0, NULL); +#elif defined(_TTHREAD_POSIX_) + if(pthread_create(thr, NULL, _thrd_wrapper_function, (void *)ti) != 0) + { + *thr = 0; + } +#endif + + /* Did we fail to create the thread? */ + if(!*thr) + { + free(ti); + return thrd_error; + } + + return thrd_success; +} + +thrd_t thrd_current(void) +{ +#if defined(_TTHREAD_WIN32_) + return GetCurrentThread(); +#else + return pthread_self(); +#endif +} + +int thrd_detach(thrd_t thr) +{ +#if defined(_TTHREAD_WIN32_) + /* https://stackoverflow.com/questions/12744324/how-to-detach-a-thread-on-windows-c#answer-12746081 */ + return CloseHandle(thr) != 0 ? thrd_success : thrd_error; +#else + return pthread_detach(thr) == 0 ? thrd_success : thrd_error; +#endif +} + +int thrd_equal(thrd_t thr0, thrd_t thr1) +{ +#if defined(_TTHREAD_WIN32_) + return GetThreadId(thr0) == GetThreadId(thr1); +#else + return pthread_equal(thr0, thr1); +#endif +} + +void thrd_exit(int res) +{ +#if defined(_TTHREAD_WIN32_) + if (_tinycthread_tss_head != NULL) + { + _tinycthread_tss_cleanup(); + } + + ExitThread((DWORD)res); +#else + pthread_exit((void*)(intptr_t)res); +#endif +} + +int thrd_join(thrd_t thr, int *res) +{ +#if defined(_TTHREAD_WIN32_) + DWORD dwRes; + + if (WaitForSingleObject(thr, INFINITE) == WAIT_FAILED) + { + return thrd_error; + } + if (res != NULL) + { + if (GetExitCodeThread(thr, &dwRes) != 0) + { + *res = (int) dwRes; + } + else + { + return thrd_error; + } + } + CloseHandle(thr); +#elif defined(_TTHREAD_POSIX_) + void *pres; + if (pthread_join(thr, &pres) != 0) + { + return thrd_error; + } + if (res != NULL) + { + *res = (int)(intptr_t)pres; + } +#endif + return thrd_success; +} + +int thrd_sleep(const struct timespec *duration, struct timespec *remaining) +{ +#if !defined(_TTHREAD_WIN32_) + int res = nanosleep(duration, remaining); + if (res == 0) { + return 0; + } else if (errno == EINTR) { + return -1; + } else { + return -2; + } +#else + struct timespec start; + DWORD t; + + timespec_get(&start, TIME_UTC); + + t = SleepEx((DWORD)(duration->tv_sec * 1000 + + duration->tv_nsec / 1000000 + + (((duration->tv_nsec % 1000000) == 0) ? 0 : 1)), + TRUE); + + if (t == 0) { + return 0; + } else { + if (remaining != NULL) { + timespec_get(remaining, TIME_UTC); + remaining->tv_sec -= start.tv_sec; + remaining->tv_nsec -= start.tv_nsec; + if (remaining->tv_nsec < 0) + { + remaining->tv_nsec += 1000000000; + remaining->tv_sec -= 1; + } + } + + return (t == WAIT_IO_COMPLETION) ? -1 : -2; + } +#endif +} + +void thrd_yield(void) +{ +#if defined(_TTHREAD_WIN32_) + Sleep(0); +#else + sched_yield(); +#endif +} + +int tss_create(tss_t *key, tss_dtor_t dtor) +{ +#if defined(_TTHREAD_WIN32_) + *key = TlsAlloc(); + if (*key == TLS_OUT_OF_INDEXES) + { + return thrd_error; + } + _tinycthread_tss_dtors[*key] = dtor; +#else + if (pthread_key_create(key, dtor) != 0) + { + return thrd_error; + } +#endif + return thrd_success; +} + +void tss_delete(tss_t key) +{ +#if defined(_TTHREAD_WIN32_) + struct TinyCThreadTSSData* data = (struct TinyCThreadTSSData*) TlsGetValue (key); + struct TinyCThreadTSSData* prev = NULL; + if (data != NULL) + { + if (data == _tinycthread_tss_head) + { + _tinycthread_tss_head = data->next; + } + else + { + prev = _tinycthread_tss_head; + if (prev != NULL) + { + while (prev->next != data) + { + prev = prev->next; + } + } + } + + if (data == _tinycthread_tss_tail) + { + _tinycthread_tss_tail = prev; + } + + free (data); + } + _tinycthread_tss_dtors[key] = NULL; + TlsFree(key); +#else + pthread_key_delete(key); +#endif +} + +void *tss_get(tss_t key) +{ +#if defined(_TTHREAD_WIN32_) + struct TinyCThreadTSSData* data = (struct TinyCThreadTSSData*)TlsGetValue(key); + if (data == NULL) + { + return NULL; + } + return data->value; +#else + return pthread_getspecific(key); +#endif +} + +int tss_set(tss_t key, void *val) +{ +#if defined(_TTHREAD_WIN32_) + struct TinyCThreadTSSData* data = (struct TinyCThreadTSSData*)TlsGetValue(key); + if (data == NULL) + { + data = (struct TinyCThreadTSSData*)malloc(sizeof(struct TinyCThreadTSSData)); + if (data == NULL) + { + return thrd_error; + } + + data->value = NULL; + data->key = key; + data->next = NULL; + + if (_tinycthread_tss_tail != NULL) + { + _tinycthread_tss_tail->next = data; + } + else + { + _tinycthread_tss_tail = data; + } + + if (_tinycthread_tss_head == NULL) + { + _tinycthread_tss_head = data; + } + + if (!TlsSetValue(key, data)) + { + free (data); + return thrd_error; + } + } + data->value = val; +#else + if (pthread_setspecific(key, val) != 0) + { + return thrd_error; + } +#endif + return thrd_success; +} + +#if defined(_TTHREAD_EMULATE_TIMESPEC_GET_) +int _tthread_timespec_get(struct timespec *ts, int base) +{ +#if defined(_TTHREAD_WIN32_) + struct _timeb tb; +#elif !defined(CLOCK_REALTIME) + struct timeval tv; +#endif + + if (base != TIME_UTC) + { + return 0; + } + +#if defined(_TTHREAD_WIN32_) + _ftime_s(&tb); + ts->tv_sec = (time_t)tb.time; + ts->tv_nsec = 1000000L * (long)tb.millitm; +#elif defined(CLOCK_REALTIME) + base = (clock_gettime(CLOCK_REALTIME, ts) == 0) ? base : 0; +#else + gettimeofday(&tv, NULL); + ts->tv_sec = (time_t)tv.tv_sec; + ts->tv_nsec = 1000L * (long)tv.tv_usec; +#endif + + return base; +} +#endif /* _TTHREAD_EMULATE_TIMESPEC_GET_ */ + +#if defined(_TTHREAD_WIN32_) +void call_once(once_flag *flag, void (*func)(void)) +{ + /* The idea here is that we use a spin lock (via the + InterlockedCompareExchange function) to restrict access to the + critical section until we have initialized it, then we use the + critical section to block until the callback has completed + execution. */ + while (flag->status < 3) + { + switch (flag->status) + { + case 0: + if (InterlockedCompareExchange (&(flag->status), 1, 0) == 0) { + InitializeCriticalSection(&(flag->lock)); + EnterCriticalSection(&(flag->lock)); + flag->status = 2; + func(); + flag->status = 3; + LeaveCriticalSection(&(flag->lock)); + return; + } + break; + case 1: + break; + case 2: + EnterCriticalSection(&(flag->lock)); + LeaveCriticalSection(&(flag->lock)); + break; + } + } +} +#endif /* defined(_TTHREAD_WIN32_) */ + +#ifdef __cplusplus +} +#endif diff --git a/src/tinycthread.h b/src/tinycthread.h new file mode 100644 index 0000000..2fc7f62 --- /dev/null +++ b/src/tinycthread.h @@ -0,0 +1,479 @@ +/* -*- mode: c; tab-width: 2; indent-tabs-mode: nil; -*- +Copyright (c) 2012 Marcus Geelnard +Copyright (c) 2013-2016 Evan Nemerson + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ + +#ifndef _TINYCTHREAD_H_ +#define _TINYCTHREAD_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +/** +* @file +* @mainpage TinyCThread API Reference +* +* @section intro_sec Introduction +* TinyCThread is a minimal, portable implementation of basic threading +* classes for C. +* +* They closely mimic the functionality and naming of the C11 standard, and +* should be easily replaceable with the corresponding standard variants. +* +* @section port_sec Portability +* The Win32 variant uses the native Win32 API for implementing the thread +* classes, while for other systems, the POSIX threads API (pthread) is used. +* +* @section misc_sec Miscellaneous +* The following special keywords are available: #_Thread_local. +* +* For more detailed information, browse the different sections of this +* documentation. A good place to start is: +* tinycthread.h. +*/ + +/* Which platform are we on? */ +#if !defined(_TTHREAD_PLATFORM_DEFINED_) + #if defined(_WIN32) || defined(__WIN32__) || defined(__WINDOWS__) + #define _TTHREAD_WIN32_ + #else + #define _TTHREAD_POSIX_ + #endif + #define _TTHREAD_PLATFORM_DEFINED_ +#endif + +/* Activate some POSIX functionality (e.g. clock_gettime and recursive mutexes) */ +#if defined(_TTHREAD_POSIX_) + #undef _FEATURES_H + #if !defined(_GNU_SOURCE) + #define _GNU_SOURCE + #endif + #if !defined(_POSIX_C_SOURCE) || ((_POSIX_C_SOURCE - 0) < 199309L) + #undef _POSIX_C_SOURCE + #define _POSIX_C_SOURCE 199309L + #endif + #if !defined(_XOPEN_SOURCE) || ((_XOPEN_SOURCE - 0) < 500) + #undef _XOPEN_SOURCE + #define _XOPEN_SOURCE 500 + #endif + #define _XPG6 +#endif + +/* Generic includes */ +#include + +/* Platform specific includes */ +#if defined(_TTHREAD_POSIX_) + #include +#elif defined(_TTHREAD_WIN32_) + #ifndef WIN32_LEAN_AND_MEAN + #define WIN32_LEAN_AND_MEAN + #define __UNDEF_LEAN_AND_MEAN + #endif + #include + #ifdef __UNDEF_LEAN_AND_MEAN + #undef WIN32_LEAN_AND_MEAN + #undef __UNDEF_LEAN_AND_MEAN + #endif +#endif + +/* Compiler-specific information */ +#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L + #define TTHREAD_NORETURN _Noreturn +#elif defined(__GNUC__) + #define TTHREAD_NORETURN __attribute__((__noreturn__)) +#else + #define TTHREAD_NORETURN +#endif + +/* If TIME_UTC is missing, provide it and provide a wrapper for + timespec_get. */ +#ifndef TIME_UTC +#define TIME_UTC 1 +#define _TTHREAD_EMULATE_TIMESPEC_GET_ + +#if defined(_TTHREAD_WIN32_) +struct _tthread_timespec { + time_t tv_sec; + long tv_nsec; +}; +#define timespec _tthread_timespec +#endif + +int _tthread_timespec_get(struct timespec *ts, int base); +#define timespec_get _tthread_timespec_get +#endif + +/** TinyCThread version (major number). */ +#define TINYCTHREAD_VERSION_MAJOR 1 +/** TinyCThread version (minor number). */ +#define TINYCTHREAD_VERSION_MINOR 2 +/** TinyCThread version (full version). */ +#define TINYCTHREAD_VERSION (TINYCTHREAD_VERSION_MAJOR * 100 + TINYCTHREAD_VERSION_MINOR) + +/** +* @def _Thread_local +* Thread local storage keyword. +* A variable that is declared with the @c _Thread_local keyword makes the +* value of the variable local to each thread (known as thread-local storage, +* or TLS). Example usage: +* @code +* // This variable is local to each thread. +* _Thread_local int variable; +* @endcode +* @note The @c _Thread_local keyword is a macro that maps to the corresponding +* compiler directive (e.g. @c __declspec(thread)). +* @note This directive is currently not supported on Mac OS X (it will give +* a compiler error), since compile-time TLS is not supported in the Mac OS X +* executable format. Also, some older versions of MinGW (before GCC 4.x) do +* not support this directive, nor does the Tiny C Compiler. +* @hideinitializer +*/ + +#if !(defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201102L)) && !defined(_Thread_local) + #if defined(__GNUC__) || defined(__INTEL_COMPILER) || defined(__SUNPRO_CC) || defined(__IBMCPP__) + #define _Thread_local __thread + #else + #define _Thread_local __declspec(thread) + #endif +#elif defined(__GNUC__) && defined(__GNUC_MINOR__) && (((__GNUC__ << 8) | __GNUC_MINOR__) < ((4 << 8) | 9)) + #define _Thread_local __thread +#endif + +/* Macros */ +#if defined(_TTHREAD_WIN32_) +#define TSS_DTOR_ITERATIONS (4) +#else +#define TSS_DTOR_ITERATIONS PTHREAD_DESTRUCTOR_ITERATIONS +#endif + +/* Function return values */ +#define thrd_error 0 /**< The requested operation failed */ +#define thrd_success 1 /**< The requested operation succeeded */ +#define thrd_timedout 2 /**< The time specified in the call was reached without acquiring the requested resource */ +#define thrd_busy 3 /**< The requested operation failed because a tesource requested by a test and return function is already in use */ +#define thrd_nomem 4 /**< The requested operation failed because it was unable to allocate memory */ + +/* Mutex types */ +#define mtx_plain 0 +#define mtx_timed 1 +#define mtx_recursive 2 + +/* Mutex */ +#if defined(_TTHREAD_WIN32_) +typedef struct { + union { + CRITICAL_SECTION cs; /* Critical section handle (used for non-timed mutexes) */ + HANDLE mut; /* Mutex handle (used for timed mutex) */ + } mHandle; /* Mutex handle */ + int mAlreadyLocked; /* TRUE if the mutex is already locked */ + int mRecursive; /* TRUE if the mutex is recursive */ + int mTimed; /* TRUE if the mutex is timed */ +} mtx_t; +#else +typedef pthread_mutex_t mtx_t; +#endif + +/** Create a mutex object. +* @param mtx A mutex object. +* @param type Bit-mask that must have one of the following six values: +* @li @c mtx_plain for a simple non-recursive mutex +* @li @c mtx_timed for a non-recursive mutex that supports timeout +* @li @c mtx_plain | @c mtx_recursive (same as @c mtx_plain, but recursive) +* @li @c mtx_timed | @c mtx_recursive (same as @c mtx_timed, but recursive) +* @return @ref thrd_success on success, or @ref thrd_error if the request could +* not be honored. +*/ +int mtx_init(mtx_t *mtx, int type); + +/** Release any resources used by the given mutex. +* @param mtx A mutex object. +*/ +void mtx_destroy(mtx_t *mtx); + +/** Lock the given mutex. +* Blocks until the given mutex can be locked. If the mutex is non-recursive, and +* the calling thread already has a lock on the mutex, this call will block +* forever. +* @param mtx A mutex object. +* @return @ref thrd_success on success, or @ref thrd_error if the request could +* not be honored. +*/ +int mtx_lock(mtx_t *mtx); + +/** Lock the given mutex, or block until a specific point in time. +* Blocks until either the given mutex can be locked, or the specified TIME_UTC +* based time. +* @param mtx A mutex object. +* @param ts A UTC based calendar time +* @return @ref The mtx_timedlock function returns thrd_success on success, or +* thrd_timedout if the time specified was reached without acquiring the +* requested resource, or thrd_error if the request could not be honored. +*/ +int mtx_timedlock(mtx_t *mtx, const struct timespec *ts); + +/** Try to lock the given mutex. +* The specified mutex shall support either test and return or timeout. If the +* mutex is already locked, the function returns without blocking. +* @param mtx A mutex object. +* @return @ref thrd_success on success, or @ref thrd_busy if the resource +* requested is already in use, or @ref thrd_error if the request could not be +* honored. +*/ +int mtx_trylock(mtx_t *mtx); + +/** Unlock the given mutex. +* @param mtx A mutex object. +* @return @ref thrd_success on success, or @ref thrd_error if the request could +* not be honored. +*/ +int mtx_unlock(mtx_t *mtx); + +/* Condition variable */ +#if defined(_TTHREAD_WIN32_) +typedef struct { + HANDLE mEvents[2]; /* Signal and broadcast event HANDLEs. */ + unsigned int mWaitersCount; /* Count of the number of waiters. */ + CRITICAL_SECTION mWaitersCountLock; /* Serialize access to mWaitersCount. */ +} cnd_t; +#else +typedef pthread_cond_t cnd_t; +#endif + +/** Create a condition variable object. +* @param cond A condition variable object. +* @return @ref thrd_success on success, or @ref thrd_error if the request could +* not be honored. +*/ +int cnd_init(cnd_t *cond); + +/** Release any resources used by the given condition variable. +* @param cond A condition variable object. +*/ +void cnd_destroy(cnd_t *cond); + +/** Signal a condition variable. +* Unblocks one of the threads that are blocked on the given condition variable +* at the time of the call. If no threads are blocked on the condition variable +* at the time of the call, the function does nothing and return success. +* @param cond A condition variable object. +* @return @ref thrd_success on success, or @ref thrd_error if the request could +* not be honored. +*/ +int cnd_signal(cnd_t *cond); + +/** Broadcast a condition variable. +* Unblocks all of the threads that are blocked on the given condition variable +* at the time of the call. If no threads are blocked on the condition variable +* at the time of the call, the function does nothing and return success. +* @param cond A condition variable object. +* @return @ref thrd_success on success, or @ref thrd_error if the request could +* not be honored. +*/ +int cnd_broadcast(cnd_t *cond); + +/** Wait for a condition variable to become signaled. +* The function atomically unlocks the given mutex and endeavors to block until +* the given condition variable is signaled by a call to cnd_signal or to +* cnd_broadcast. When the calling thread becomes unblocked it locks the mutex +* before it returns. +* @param cond A condition variable object. +* @param mtx A mutex object. +* @return @ref thrd_success on success, or @ref thrd_error if the request could +* not be honored. +*/ +int cnd_wait(cnd_t *cond, mtx_t *mtx); + +/** Wait for a condition variable to become signaled. +* The function atomically unlocks the given mutex and endeavors to block until +* the given condition variable is signaled by a call to cnd_signal or to +* cnd_broadcast, or until after the specified time. When the calling thread +* becomes unblocked it locks the mutex before it returns. +* @param cond A condition variable object. +* @param mtx A mutex object. +* @param xt A point in time at which the request will time out (absolute time). +* @return @ref thrd_success upon success, or @ref thrd_timeout if the time +* specified in the call was reached without acquiring the requested resource, or +* @ref thrd_error if the request could not be honored. +*/ +int cnd_timedwait(cnd_t *cond, mtx_t *mtx, const struct timespec *ts); + +/* Thread */ +#if defined(_TTHREAD_WIN32_) +typedef HANDLE thrd_t; +#else +typedef pthread_t thrd_t; +#endif + +/** Thread start function. +* Any thread that is started with the @ref thrd_create() function must be +* started through a function of this type. +* @param arg The thread argument (the @c arg argument of the corresponding +* @ref thrd_create() call). +* @return The thread return value, which can be obtained by another thread +* by using the @ref thrd_join() function. +*/ +typedef int (*thrd_start_t)(void *arg); + +/** Create a new thread. +* @param thr Identifier of the newly created thread. +* @param func A function pointer to the function that will be executed in +* the new thread. +* @param arg An argument to the thread function. +* @return @ref thrd_success on success, or @ref thrd_nomem if no memory could +* be allocated for the thread requested, or @ref thrd_error if the request +* could not be honored. +* @note A thread’s identifier may be reused for a different thread once the +* original thread has exited and either been detached or joined to another +* thread. +*/ +int thrd_create(thrd_t *thr, thrd_start_t func, void *arg); + +/** Identify the calling thread. +* @return The identifier of the calling thread. +*/ +thrd_t thrd_current(void); + +/** Dispose of any resources allocated to the thread when that thread exits. + * @return thrd_success, or thrd_error on error +*/ +int thrd_detach(thrd_t thr); + +/** Compare two thread identifiers. +* The function determines if two thread identifiers refer to the same thread. +* @return Zero if the two thread identifiers refer to different threads. +* Otherwise a nonzero value is returned. +*/ +int thrd_equal(thrd_t thr0, thrd_t thr1); + +/** Terminate execution of the calling thread. +* @param res Result code of the calling thread. +*/ +TTHREAD_NORETURN void thrd_exit(int res); + +/** Wait for a thread to terminate. +* The function joins the given thread with the current thread by blocking +* until the other thread has terminated. +* @param thr The thread to join with. +* @param res If this pointer is not NULL, the function will store the result +* code of the given thread in the integer pointed to by @c res. +* @return @ref thrd_success on success, or @ref thrd_error if the request could +* not be honored. +*/ +int thrd_join(thrd_t thr, int *res); + +/** Put the calling thread to sleep. +* Suspend execution of the calling thread. +* @param duration Interval to sleep for +* @param remaining If non-NULL, this parameter will hold the remaining +* time until time_point upon return. This will +* typically be zero, but if the thread was woken up +* by a signal that is not ignored before duration was +* reached @c remaining will hold a positive time. +* @return 0 (zero) on successful sleep, -1 if an interrupt occurred, +* or a negative value if the operation fails. +*/ +int thrd_sleep(const struct timespec *duration, struct timespec *remaining); + +/** Yield execution to another thread. +* Permit other threads to run, even if the current thread would ordinarily +* continue to run. +*/ +void thrd_yield(void); + +/* Thread local storage */ +#if defined(_TTHREAD_WIN32_) +typedef DWORD tss_t; +#else +typedef pthread_key_t tss_t; +#endif + +/** Destructor function for a thread-specific storage. +* @param val The value of the destructed thread-specific storage. +*/ +typedef void (*tss_dtor_t)(void *val); + +/** Create a thread-specific storage. +* @param key The unique key identifier that will be set if the function is +* successful. +* @param dtor Destructor function. This can be NULL. +* @return @ref thrd_success on success, or @ref thrd_error if the request could +* not be honored. +* @note On Windows, the @c dtor will definitely be called when +* appropriate for threads created with @ref thrd_create. It will be +* called for other threads in most cases, the possible exception being +* for DLLs loaded with LoadLibraryEx. In order to be certain, you +* should use @ref thrd_create whenever possible. +*/ +int tss_create(tss_t *key, tss_dtor_t dtor); + +/** Delete a thread-specific storage. +* The function releases any resources used by the given thread-specific +* storage. +* @param key The key that shall be deleted. +*/ +void tss_delete(tss_t key); + +/** Get the value for a thread-specific storage. +* @param key The thread-specific storage identifier. +* @return The value for the current thread held in the given thread-specific +* storage. +*/ +void *tss_get(tss_t key); + +/** Set the value for a thread-specific storage. +* @param key The thread-specific storage identifier. +* @param val The value of the thread-specific storage to set for the current +* thread. +* @return @ref thrd_success on success, or @ref thrd_error if the request could +* not be honored. +*/ +int tss_set(tss_t key, void *val); + +#if defined(_TTHREAD_WIN32_) + typedef struct { + LONG volatile status; + CRITICAL_SECTION lock; + } once_flag; + #define ONCE_FLAG_INIT {0,} +#else + #define once_flag pthread_once_t + #define ONCE_FLAG_INIT PTHREAD_ONCE_INIT +#endif + +/** Invoke a callback exactly once + * @param flag Flag used to ensure the callback is invoked exactly + * once. + * @param func Callback to invoke. + */ +#if defined(_TTHREAD_WIN32_) + void call_once(once_flag *flag, void (*func)(void)); +#else + #define call_once(flag,func) pthread_once(flag,func) +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* _TINYTHREAD_H_ */ diff --git a/src/utils.c b/src/utils.c index 7e9d271..895dd0d 100644 --- a/src/utils.c +++ b/src/utils.c @@ -1,11 +1,8 @@ #include #include // rand #include - -#ifndef MICROTCP_AMALGAMATION #include "utils.h" #include "endian.h" -#endif static bool is_hex_digit(char c) { diff --git a/src/utils.h b/src/utils.h index 6d0c7bb..ef02c35 100644 --- a/src/utils.h +++ b/src/utils.h @@ -1,8 +1,5 @@ #include - -#ifndef MICROTCP_AMALGAMATION #include "defs.h" -#endif bool parse_mac(const char *src, size_t len, mac_address_t *mac); bool parse_ip(const char *ip, ip_address_t *parsed_ip);