From eacf46ec8498b667ac8c60f7dc0c1c19f5cf3a39 Mon Sep 17 00:00:00 2001 From: feng-arch Date: Wed, 18 Dec 2024 17:15:11 +0800 Subject: [PATCH] finish Q32 --- .vscode/settings.json | 5 + pre-study_phase/2024_12_18/Q3/Makefile | 6 + pre-study_phase/2024_12_18/Q32/LICENSE | 0 pre-study_phase/2024_12_18/Q32/Makefile | 60 +++++++++ .../2024_12_18/Q32/build/libYOUR_LIBRARY.a | Bin 0 -> 17878 bytes .../2024_12_18/Q32/build/libYOUR_LIBRARY.so | Bin 0 -> 22400 bytes .../2024_12_18/Q32/src/lcthw/dbg.h | 45 +++++++ .../2024_12_18/Q32/src/lcthw/list.c | 125 ++++++++++++++++++ .../2024_12_18/Q32/src/lcthw/list.h | 41 ++++++ .../2024_12_18/Q32/src/lcthw/list.o | Bin 0 -> 17600 bytes pre-study_phase/2024_12_18/Q32/tests/dbg.h | 45 +++++++ .../2024_12_18/Q32/tests/list_tests | Bin 0 -> 34680 bytes .../2024_12_18/Q32/tests/list_tests.c | 107 +++++++++++++++ .../2024_12_18/Q32/tests/minunit.h | 45 +++++++ .../2024_12_18/Q32/tests/runtests.sh | 4 + pre-study_phase/2024_12_18/Q4/Makefile | 6 + pre-study_phase/2024_12_18/Q4/ex3 | Bin 0 -> 15952 bytes pre-study_phase/2024_12_18/Q4/ex3.c | 8 ++ pre-study_phase/2024_12_18/Q6/Makefile | 8 ++ pre-study_phase/2024_12_18/Q6/ex6 | Bin 0 -> 15952 bytes pre-study_phase/2024_12_18/Q6/ex6.c | 19 +++ pre-study_phase/2024_12_18/Q6/ex6.o | Bin 0 -> 2160 bytes 22 files changed, 524 insertions(+) create mode 100644 .vscode/settings.json create mode 100644 pre-study_phase/2024_12_18/Q3/Makefile create mode 100644 pre-study_phase/2024_12_18/Q32/LICENSE create mode 100644 pre-study_phase/2024_12_18/Q32/Makefile create mode 100644 pre-study_phase/2024_12_18/Q32/build/libYOUR_LIBRARY.a create mode 100755 pre-study_phase/2024_12_18/Q32/build/libYOUR_LIBRARY.so create mode 100644 pre-study_phase/2024_12_18/Q32/src/lcthw/dbg.h create mode 100644 pre-study_phase/2024_12_18/Q32/src/lcthw/list.c create mode 100644 pre-study_phase/2024_12_18/Q32/src/lcthw/list.h create mode 100644 pre-study_phase/2024_12_18/Q32/src/lcthw/list.o create mode 100644 pre-study_phase/2024_12_18/Q32/tests/dbg.h create mode 100755 pre-study_phase/2024_12_18/Q32/tests/list_tests create mode 100644 pre-study_phase/2024_12_18/Q32/tests/list_tests.c create mode 100644 pre-study_phase/2024_12_18/Q32/tests/minunit.h create mode 100644 pre-study_phase/2024_12_18/Q32/tests/runtests.sh create mode 100644 pre-study_phase/2024_12_18/Q4/Makefile create mode 100755 pre-study_phase/2024_12_18/Q4/ex3 create mode 100644 pre-study_phase/2024_12_18/Q4/ex3.c create mode 100644 pre-study_phase/2024_12_18/Q6/Makefile create mode 100755 pre-study_phase/2024_12_18/Q6/ex6 create mode 100644 pre-study_phase/2024_12_18/Q6/ex6.c create mode 100644 pre-study_phase/2024_12_18/Q6/ex6.o diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..aa48e88 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,5 @@ +{ + "files.associations": { + "assert.h": "c" + } +} \ No newline at end of file diff --git a/pre-study_phase/2024_12_18/Q3/Makefile b/pre-study_phase/2024_12_18/Q3/Makefile new file mode 100644 index 0000000..afc0548 --- /dev/null +++ b/pre-study_phase/2024_12_18/Q3/Makefile @@ -0,0 +1,6 @@ +CFALGS=-wall -g +all: ex3 +clean: + rm -rf ./ex3 +ex3: + cc ex3.c -o ex3 \ No newline at end of file diff --git a/pre-study_phase/2024_12_18/Q32/LICENSE b/pre-study_phase/2024_12_18/Q32/LICENSE new file mode 100644 index 0000000..e69de29 diff --git a/pre-study_phase/2024_12_18/Q32/Makefile b/pre-study_phase/2024_12_18/Q32/Makefile new file mode 100644 index 0000000..2c507e3 --- /dev/null +++ b/pre-study_phase/2024_12_18/Q32/Makefile @@ -0,0 +1,60 @@ +CFLAGS=-g -O2 -Wall -Wextra -Isrc -rdynamic -DNDEBUG $(OPTFLAGS) +LIBS=-ldl $(OPTLIBS) +PREFIX?=/usr/local + +SOURCES=$(wildcard src/**/*.c src/*.c) +OBJECTS=$(patsubst %.c,%.o,$(SOURCES)) + +TEST_SRC=$(wildcard tests/*_tests.c) +TESTS=$(patsubst %.c,%,$(TEST_SRC)) + +TARGET=build/libYOUR_LIBRARY.a +SO_TARGET=$(patsubst %.a,%.so,$(TARGET)) + +# The Target Build +all: $(TARGET) $(SO_TARGET) tests + +dev: CFLAGS=-g -Wall -Isrc -Wall -Wextra $(OPTFLAGS) +dev: all + + + +$(TARGET): CFLAGS += -fPIC +$(TARGET): build $(OBJECTS) + ar rcs $@ $(OBJECTS) + ranlib $@ + +$(SO_TARGET): $(TARGET) $(OBJECTS) + $(CC) -shared -o $@ $(OBJECTS) + +build: + @mkdir -p build + @mkdir -p bin + +# The Unit Tests +.PHONY: tests +$(TESTS): %: %.c $(TARGET) + $(CC) $(CFLAGS) $< -o $@ $(TARGET) $(LIBS) +tests: $(TESTS) + sh ./tests/runtests.sh + +valgrind: + VALGRIND="valgrind --log-file=/tmp/valgrind-%p.log" $(MAKE) + +# The Cleaner +clean: + rm -rf build $(OBJECTS) $(TESTS) + rm -f tests/tests.log + find . -name "*.gc*" -exec rm {} \; + rm -rf `find . -name "*.dSYM" -print` + +# The Install +install: all + install -d $(DESTDIR)/$(PREFIX)/lib/ + install $(TARGET) $(DESTDIR)/$(PREFIX)/lib/ + +# The Checker +BADFUNCS='[^_.>a-zA-Z0-9](str(n?cpy|n?cat|xfrm|n?dup|str|pbrk|tok|_)|stpn?cpy|a?sn?printf|byte_)' +check: + @echo Files with potentially dangerous functions. + @egrep $(BADFUNCS) $(SOURCES) || true \ No newline at end of file diff --git a/pre-study_phase/2024_12_18/Q32/build/libYOUR_LIBRARY.a b/pre-study_phase/2024_12_18/Q32/build/libYOUR_LIBRARY.a new file mode 100644 index 0000000000000000000000000000000000000000..da75d9096135cd686a40b2e3906464057d0f23a6 GIT binary patch literal 17878 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 +#include +#include +#ifdef NDEBUG +#define debug(M, ...) +#else +#define debug(M, ...) fprintf(stderr, "DEBUG %s:%d:" M "\n", __FILE__, __LINE__, ##__VA_ARGS__) +#endif + +#define clean_errno() (errno == 0 ? "None" : strerror(errno)) + +#define log_err(M, ...) fprintf(stderr, "[ERROR] (%s:%d: errno: %s) " M "\n", __FILE__, __LINE__, clean_errno(), ##__VA_ARGS__) + +#define log_warn(M, ...) fprintf(stderr, "[WARN] (%s:%d: errno: %s) " M "\n", __FILE__, __LINE__, clean_errno(), ##__VA_ARGS__) + +#define log_info(M, ...) fprintf(stderr, "[INFO] (%s:%d) " M "\n", __FILE__, __LINE__, ##__VA_ARGS__) + +#define check(A, M, ...) \ + if (!(A)) \ + { \ + log_err(M, ##__VA_ARGS__); \ + errno = 0; \ + goto error; \ + } + +#define sentinel(M, ...) \ + { \ + log_err(M, ##__VA_ARGS__); \ + errno = 0; \ + goto error; \ + } + +#define check_mem(A) check((A), "Out of memory.") + +#define check_debug(A, M, ...) \ + if (!(A)) \ + { \ + debug(M, ##__VA_ARGS__); \ + errno = 0; \ + goto error; \ + } + +#endif \ No newline at end of file diff --git a/pre-study_phase/2024_12_18/Q32/src/lcthw/list.c b/pre-study_phase/2024_12_18/Q32/src/lcthw/list.c new file mode 100644 index 0000000..72ff962 --- /dev/null +++ b/pre-study_phase/2024_12_18/Q32/src/lcthw/list.c @@ -0,0 +1,125 @@ +#include "list.h" +#include "dbg.h" + +List *List_create() +{ + return calloc(1, sizeof(List)); +} + +void List_destroy(List *list) +{ + LIST_FOREACH(list, first, next, cur) + { + if (cur->prev) + { + free(cur->prev); + } + } + free(list->last); + free(list); +} + +void List_clear_destroy(List *list) +{ + List_clear(list); + List_destroy(list); +} + +void List_clear(List *list) +{ + LIST_FOREACH(list, first, next, cur) + { + free(cur->value); + } +} + +void List_push(List *list, void *value) +{ + ListNode *node = calloc(1, sizeof(ListNode)); + check_mem(node); + node->value = value; + if (list->last == NULL) + { + list->first = node; + list->last = node; + } + else + { + list->last->next = node; + node->prev = list->last; + list->last = node; + } + list->count++; + +error: + return; +} + +void *List_pop(List *list) +{ + ListNode *node = list->last; + return node != NULL ? List_remove(list, node) : NULL; +} + +void List_unshift(List *list, void *value) +{ + ListNode *node = calloc(1, sizeof(ListNode)); + check_mem(node); + node->value = value; + if (list->first == NULL) + { + list->first = node; + list->last = node; + } + else + { + node->next = list->first; + list->first->prev = node; + list->first = node; + } + list->count++; +error: + return; +} + +void *List_shift(List *list) +{ + ListNode *node = list->first; + return node != NULL ? List_remove(list, node) : NULL; +} +void *List_remove(List *list, ListNode *node) +{ + void *result = NULL; + check(list->first && list->last, "List is empty."); + check(node, "node can't be NULL"); + + if (node == list->first && node == list->last) + { + list->first = NULL; + list->last = NULL; + } + else if (node == list->first) + { + list->first = node->next; + check(list->first != NULL, "Invalid list, somehow got a first that is NULL."); + list->first->prev = NULL; + } + else if (node == list->last) + { + list->last = node->prev; + check(list->last != NULL, "Invalid list, somehow got a next that is NULL."); + list->last->next = NULL; + } + else + { + ListNode *after = node->next; + ListNode *before = node->prev; + before->next = after; + after->prev = before; + } + list->count--; + result = node->value; + free(node); +error: + return result; +} diff --git a/pre-study_phase/2024_12_18/Q32/src/lcthw/list.h b/pre-study_phase/2024_12_18/Q32/src/lcthw/list.h new file mode 100644 index 0000000..93ba06c --- /dev/null +++ b/pre-study_phase/2024_12_18/Q32/src/lcthw/list.h @@ -0,0 +1,41 @@ +#ifndef lcthw_List_h +#define lcthw_List_h +#include + +typedef struct ListNode +{ + struct ListNode *next; + struct ListNode *prev; + void *value; +} ListNode; + +typedef struct List +{ + int count; + ListNode *first; + ListNode *last; +} List; + +List *List_create(); +void List_destroy(List *list); +void List_clear(List *list); +void List_clear_destroy(List *list); + +#define List_count(A) ((A)->count) +#define List_first(A) (((A)->first != NULL) ? ((A)->first->value) : NULL) +#define List_last(A) ((A)->last != NULL ? (A)->last->value : NULL) + +void List_push(List *list, void *value); +void *List_pop(List *list); + +void List_unshift(List *list, void *value); +void *List_shift(List *list); + +void *List_remove(List *list, ListNode *node); + +#define LIST_FOREACH(L, S, M, V) \ + ListNode *_node = NULL; \ + ListNode *V = NULL; \ + for (V = _node = L->S; _node != NULL; V = _node = _node->M) + +#endif \ No newline at end of file diff --git a/pre-study_phase/2024_12_18/Q32/src/lcthw/list.o b/pre-study_phase/2024_12_18/Q32/src/lcthw/list.o new file mode 100644 index 0000000000000000000000000000000000000000..c2b638fea63adcf1d652e726f80d5cedb679bc9f GIT binary patch literal 17600 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 wgt$=r@jif;l35=wPh*IHK-{LtllZkdWsXL7h($ literal 0 HcmV?d00001 diff --git a/pre-study_phase/2024_12_18/Q32/tests/dbg.h b/pre-study_phase/2024_12_18/Q32/tests/dbg.h new file mode 100644 index 0000000..5ce9da0 --- /dev/null +++ b/pre-study_phase/2024_12_18/Q32/tests/dbg.h @@ -0,0 +1,45 @@ +#ifndef _dbg_h_ +#define _dbg_h_ +#include +#include +#include +#ifdef NDEBUG +#define debug(M, ...) +#else +#define debug(M, ...) fprintf(stderr, "DEBUG %s:%d:" M "\n", __FILE__, __LINE__, ##__VA_ARGS__) +#endif + +#define clean_errno() (errno == 0 ? "None" : strerror(errno)) + +#define log_err(M, ...) fprintf(stderr, "[ERROR] (%s:%d: errno: %s) " M "\n", __FILE__, __LINE__, clean_errno(), ##__VA_ARGS__) + +#define log_warn(M, ...) fprintf(stderr, "[WARN] (%s:%d: errno: %s) " M "\n", __FILE__, __LINE__, clean_errno(), ##__VA_ARGS__) + +#define log_info(M, ...) fprintf(stderr, "[INFO] (%s:%d) " M "\n", __FILE__, __LINE__, ##__VA_ARGS__) + +#define check(A, M, ...) \ + if (!(A)) \ + { \ + log_err(M, ##__VA_ARGS__); \ + errno = 0; \ + goto error; \ + } + +#define sentinel(M, ...) \ + { \ + log_err(M, ##__VA_ARGS__); \ + errno = 0; \ + goto error; \ + } + +#define check_mem(A) check((A), "Out of memory.") + +#define check_debug(A, M, ...) \ + if (!(A)) \ + { \ + debug(M, ##__VA_ARGS__); \ + errno = 0; \ + goto error; \ + } + +#endif \ No newline at end of file diff --git a/pre-study_phase/2024_12_18/Q32/tests/list_tests b/pre-study_phase/2024_12_18/Q32/tests/list_tests new file mode 100755 index 0000000000000000000000000000000000000000..9821512d065df0ed2e718c97a7793c4cbdb0d6ba GIT binary patch literal 34680 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 t=cxH>9I$ literal 0 HcmV?d00001 diff --git a/pre-study_phase/2024_12_18/Q32/tests/list_tests.c b/pre-study_phase/2024_12_18/Q32/tests/list_tests.c new file mode 100644 index 0000000..b99368b --- /dev/null +++ b/pre-study_phase/2024_12_18/Q32/tests/list_tests.c @@ -0,0 +1,107 @@ +#include "minunit.h" +#include +#include + +static List *list = NULL; +char *test1 = "test1 data"; +char *test2 = "test2 data"; +char *test3 = "test3 data"; + +char *test_create() +{ + list = List_create(); + mu_assert(list != NULL, "Failed to create list."); + + return NULL; +} + +char *test_destroy() +{ + List_clear_destroy(list); + + return NULL; +} + +char *test_push_pop() +{ + List_push(list, test1); + mu_assert(List_last(list) == test1, "Wrong last value."); + + List_push(list, test2); + mu_assert(List_last(list) == test2, "Wrong last value"); + + List_push(list, test3); + mu_assert(List_last(list) == test3, "Wrong last value."); + mu_assert(List_count(list) == 3, "Wrong count on push."); + + char *val = List_pop(list); + mu_assert(val == test3, "Wrong value on pop."); + + val = List_pop(list); + mu_assert(val == test2, "Wrong value on pop."); + + val = List_pop(list); + mu_assert(val == test1, "Wrong value on pop."); + mu_assert(List_count(list) == 0, "Wrong count after pop."); + + return NULL; +} + +char *test_unshift() +{ + List_unshift(list, test1); + mu_assert(List_first(list) == test1, "Wrong first value."); + + List_unshift(list, test2); + mu_assert(List_first(list) == test2, "Wrong first value"); + + List_unshift(list, test3); + mu_assert(List_first(list) == test3, "Wrong last value."); + mu_assert(List_count(list) == 3, "Wrong count on unshift."); + + return NULL; +} + +char *test_remove() +{ + // we only need to test the middle remove case since push/shift + // already tests the other cases + + char *val = List_remove(list, list->first->next); + mu_assert(val == test2, "Wrong removed element."); + mu_assert(List_count(list) == 2, "Wrong count after remove."); + mu_assert(List_first(list) == test3, "Wrong first after remove."); + mu_assert(List_last(list) == test1, "Wrong last after remove."); + + return NULL; +} + +char *test_shift() +{ + mu_assert(List_count(list) != 0, "Wrong count before shift."); + + char *val = List_shift(list); + mu_assert(val == test3, "Wrong value on shift."); + + val = List_shift(list); + mu_assert(val == test1, "Wrong value on shift."); + mu_assert(List_count(list) == 0, "Wrong count after shift."); + + return NULL; +} + +char *all_tests() +{ + mu_suite_start(); + + mu_run_test(test_create); + mu_run_test(test_push_pop); + mu_run_test(test_unshift); + mu_run_test(test_remove); + mu_run_test(test_shift); + mu_run_test(test_destroy); + + return NULL; +} + +RUN_TESTS(all_tests); \ No newline at end of file diff --git a/pre-study_phase/2024_12_18/Q32/tests/minunit.h b/pre-study_phase/2024_12_18/Q32/tests/minunit.h new file mode 100644 index 0000000..136aff5 --- /dev/null +++ b/pre-study_phase/2024_12_18/Q32/tests/minunit.h @@ -0,0 +1,45 @@ +#undef NDEBUG +#ifndef _minunit_h +#define _minunit_h + +#include +#include "dbg.h" +#include + +#define mu_suite_start() char *message = NULL + +#define mu_assert(test, message) \ + if (!(test)) \ + { \ + log_err(message); \ + return message; \ + } +#define mu_run_test(test) \ + debug("\n-----%s", " " #test); \ + message = test(); \ + tests_run++; \ + if (message) \ + return message; + +#define RUN_TESTS(name) \ + int main(int argc, char *argv[]) \ + { \ + (void)argc; \ + debug("----- RUNNING: %s", argv[0]); \ + printf("----\nRUNNING: %s\n", argv[0]); \ + char *result = name(); \ + if (result != 0) \ + { \ + printf("FAILED: %s\n", result); \ + } \ + else \ + { \ + printf("ALL TESTS PASSED\n"); \ + } \ + printf("Tests run: %d\n", tests_run); \ + exit(result != 0); \ + } + +int tests_run; + +#endif \ No newline at end of file diff --git a/pre-study_phase/2024_12_18/Q32/tests/runtests.sh b/pre-study_phase/2024_12_18/Q32/tests/runtests.sh new file mode 100644 index 0000000..8189897 --- /dev/null +++ b/pre-study_phase/2024_12_18/Q32/tests/runtests.sh @@ -0,0 +1,4 @@ +#!/bin/sh +SCRIPT_DIR=$(cd "$(dirname "$0")" && pwd) +cd "$SCRIPT_DIR" +./list_tests \ No newline at end of file diff --git a/pre-study_phase/2024_12_18/Q4/Makefile b/pre-study_phase/2024_12_18/Q4/Makefile new file mode 100644 index 0000000..afc0548 --- /dev/null +++ b/pre-study_phase/2024_12_18/Q4/Makefile @@ -0,0 +1,6 @@ +CFALGS=-wall -g +all: ex3 +clean: + rm -rf ./ex3 +ex3: + cc ex3.c -o ex3 \ No newline at end of file diff --git a/pre-study_phase/2024_12_18/Q4/ex3 b/pre-study_phase/2024_12_18/Q4/ex3 new file mode 100755 index 0000000000000000000000000000000000000000..bea705bcc10217c73e39e07144bb26808011cebf GIT binary patch literal 15952 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 literal 0 HcmV?d00001 diff --git a/pre-study_phase/2024_12_18/Q4/ex3.c b/pre-study_phase/2024_12_18/Q4/ex3.c new file mode 100644 index 0000000..9f5916a --- /dev/null +++ b/pre-study_phase/2024_12_18/Q4/ex3.c @@ -0,0 +1,8 @@ +#include +int main(){ + int age = 10; + int height = 94; + printf("I am %d years old.\n",age); + printf("I am %d inches tall.\n", height); + return 0; +} \ No newline at end of file diff --git a/pre-study_phase/2024_12_18/Q6/Makefile b/pre-study_phase/2024_12_18/Q6/Makefile new file mode 100644 index 0000000..c75bd53 --- /dev/null +++ b/pre-study_phase/2024_12_18/Q6/Makefile @@ -0,0 +1,8 @@ +CFALGS=-wall -g +all: ex6 +ex6: ex6.o + cc ex6.o -o ex6 +%.o: %.c + cc -c $< -o $@ +clean: + rm -rf *.o ex6 \ No newline at end of file diff --git a/pre-study_phase/2024_12_18/Q6/ex6 b/pre-study_phase/2024_12_18/Q6/ex6 new file mode 100755 index 0000000000000000000000000000000000000000..afa4ce763062ef8c5921c62973a686fee05a68a8 GIT binary patch literal 15952 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 +int main(int argc, char *argv[]) +{ + int distance = 100; + float power = 2.345f; + double super_power = 534265.64357; + char initial = 'A'; + char first_name[] = "Zed"; + char last_name[] = "Shaw"; + + printf("You are %d miles away.\n", distance); + printf("You have %f levels of power.\n", power); + printf("You have %f awesome super power.\n", super_power); + printf("I have an initial %c.\n", initial); + printf("I have a first name %s.\n", first_name); + printf("I have a last name %s.\n", last_name); + printf("My whole name is %s %c %s.\n", first_name, initial, last_name); + return 0; +} \ No newline at end of file diff --git a/pre-study_phase/2024_12_18/Q6/ex6.o b/pre-study_phase/2024_12_18/Q6/ex6.o new file mode 100644 index 0000000000000000000000000000000000000000..6ae9ffd9c32fe3a70fcbfd7f2a9bbad0aed6fcf2 GIT binary patch literal 2160 zcmbtU%WD%s7@uwW@X?yI7AaO?F7*L+NlOv+AgOij7EF;!6)U3CWI`5`Y}ws3t>S|U z#ZU^xKS2Kh4;~ey2ujl)gdRM45-ehc)aKGdp?Etptitv|%@oxoHfwpk_3x7r*PzenpFqzUsyNYDwEp0$T}3Tzw_ns%>rZ zViSsuC9T|F($>dl5|y;I>uFM0(te^jZM(Rn&$}MISbEDg_`x2jaCxN?9*b|K^zh?l zc;r6#WUNtFrq5{`fn<15E7x9KpV!v)Kx!?33NMb9_4)YPU)=5stbBy_Zkc&ZEQ-65 zIBR66jY)w_s|Q>>O(uaz;S8Om85^4^JYg271+3>2JSkAy%u;OUC#Y4`3}KfiIc($% z#~>Npl>n=Namui42j>VFyKFy^A$#!nG%lpg4E3aj4Qg1)^C0xF{YVVjL7$bGp-LS0 zqrriJ3;5J!I&Q$uJ-uqL8tv}sJIzzn&cqPPgAt@mMU>9wrhN-=PsadbgT--nZ~ccN zvvmV4jiC+&Braa-!KC%*_f9P?RP#$kD1>|;D>pX5+~(7}Jpk4WBf>R%COUOiO`t3> za%jRba!$%)k8)8R%pn->d3{pCKk<54!nb$4xXtl;m|3?1&r5o7o-+aZ7m~h@*RKNf zuO_mn40b*Ixqk-z5Dkugd}Y26n*^;yhn^C2Hfid_I`-OwUF&RC_w>ka48i zj^)j1ky$iDREJJENKF!lAa&ffk!qP z)qVam!Qf}F)+ntLuV7lmBze*~~v_xFZ@5aOQL{V}ib3!L>M?+p-o&cOv%Kpcd@ jmX!Vb0h8|zAk@LZ!>sUy{Qj-L)$%X%{)x}aQrZ6pyB8