From 27b7a221c2e08f8c995f3ecc04ea2a46569b1ef3 Mon Sep 17 00:00:00 2001 From: wynyibo Date: Fri, 26 Jul 2024 18:16:29 +0800 Subject: [PATCH 01/11] add rst --- .../net_watcher/common.bpf.h | 48 +++++++++- .../net_watcher/netwatcher.bpf.c | 22 +++-- .../net_watcher/netwatcher.c | 91 ++++++++++++++++++- .../Network_Subsystem/net_watcher/tcp.bpf.h | 86 +++++++++++++++++- 4 files changed, 235 insertions(+), 12 deletions(-) diff --git a/eBPF_Supermarket/Network_Subsystem/net_watcher/common.bpf.h b/eBPF_Supermarket/Network_Subsystem/net_watcher/common.bpf.h index 8d6948e40..b7e775a8a 100644 --- a/eBPF_Supermarket/Network_Subsystem/net_watcher/common.bpf.h +++ b/eBPF_Supermarket/Network_Subsystem/net_watcher/common.bpf.h @@ -116,6 +116,39 @@ struct hist { u64 latency; u64 cnt; }; + +struct trace_event_raw_tcp_send_reset { + unsigned short common_type; + unsigned char common_flags; + unsigned char common_preempt_count; + int common_pid; + const void *skbaddr; + const void *skaddr; + int state; + __u16 sport; + __u16 dport; + __u16 family; + __u8 saddr[4]; + __u8 daddr[4]; + __u8 saddr_v6[16]; + __u8 daddr_v6[16]; +}; + +struct trace_event_raw_tcp_receive_reset { + unsigned short common_type; + unsigned char common_flags; + unsigned char common_preempt_count; + int common_pid; + const void *skaddr; + __u16 sport; + __u16 dport; + __u16 family; + __u8 saddr[4]; + __u8 daddr[4]; + __u8 saddr_v6[16]; + __u8 daddr_v6[16]; + __u64 sock_cookie; +}; // 操作BPF映射的一个辅助函数 static __always_inline void * //__always_inline强制内联 bpf_map_lookup_or_try_init(void *map, const void *key, const void *init) { @@ -196,11 +229,17 @@ struct { __uint(type, BPF_MAP_TYPE_RINGBUF); __uint(max_entries, 256 * 1024); } dns_rb SEC(".maps"); + struct { __uint(type, BPF_MAP_TYPE_RINGBUF); __uint(max_entries, 256 * 1024); } trace_rb SEC(".maps"); +struct { + __uint(type, BPF_MAP_TYPE_RINGBUF); + __uint(max_entries, 256 * 1024); +} events SEC(".maps"); + // 存储每个tcp连接所对应的conn_t struct { __uint(type, BPF_MAP_TYPE_LRU_HASH); @@ -307,13 +346,19 @@ struct { __type(value, struct hist); } hists SEC(".maps"); +struct { + __uint(type, BPF_MAP_TYPE_HASH); + __type(key, u32); + __type(value, u64); + __uint(max_entries, 1024); +} counters SEC(".maps"); const volatile int filter_dport = 0; const volatile int filter_sport = 0; const volatile int all_conn = 0, err_packet = 0, extra_conn_info = 0, layer_time = 0, http_info = 0, retrans_info = 0, udp_info = 0, net_filter = 0, drop_reason = 0, icmp_info = 0, tcp_info = 0, dns_info = 0, stack_info = 0, mysql_info = 0, - redis_info = 0, rtt_info = 0; + redis_info = 0, rtt_info = 0, rst_info = 0; /* help macro */ @@ -421,7 +466,6 @@ const volatile int all_conn = 0, err_packet = 0, extra_conn_info = 0, .sport = BPF_CORE_READ(sk, __sk_common.skc_num), \ .dport = __bpf_ntohs(BPF_CORE_READ(sk, __sk_common.skc_dport)), \ .tran_flag = UDP} - /* help macro end */ /* help functions */ diff --git a/eBPF_Supermarket/Network_Subsystem/net_watcher/netwatcher.bpf.c b/eBPF_Supermarket/Network_Subsystem/net_watcher/netwatcher.bpf.c index a2d059e90..46834bfc4 100644 --- a/eBPF_Supermarket/Network_Subsystem/net_watcher/netwatcher.bpf.c +++ b/eBPF_Supermarket/Network_Subsystem/net_watcher/netwatcher.bpf.c @@ -307,12 +307,6 @@ int BPF_KPROBE(icmp_reply, struct icmp_bxm *icmp_param, struct sk_buff *skb) { return __reply_icmp_time(skb); } -// tcpstate -SEC("tracepoint/sock/inet_sock_set_state") -int handle_set_state(struct trace_event_raw_inet_sock_set_state *ctx) { - return __handle_set_state(ctx); -} - // mysql SEC("uprobe/_Z16dispatch_commandP3THDPK8COM_DATA19enum_server_command") int BPF_KPROBE(query__start) { return __handle_mysql_start(ctx); } @@ -328,4 +322,20 @@ int BPF_KPROBE(query__end_redis) { return __handle_redis_end(ctx); } SEC("kprobe/tcp_rcv_established") int BPF_KPROBE(tcp_rcv_established, struct sock *sk, struct sk_buff *skb) { return __tcp_rcv_established(sk, skb); +} + +// tcpstate +SEC("tracepoint/sock/inet_sock_set_state") +int handle_set_state(struct trace_event_raw_inet_sock_set_state *ctx) { + return __handle_set_state(ctx); +} +// RST +SEC("tracepoint/tcp/tcp_send_reset") +int handle_send_reset(struct trace_event_raw_tcp_send_reset *ctx) { + return __handle_send_reset(ctx); +} + +SEC("tracepoint/tcp/tcp_receive_reset") +int handle_receive_reset(struct trace_event_raw_tcp_receive_reset *ctx) { + return __handle_receive_reset(ctx); } \ No newline at end of file diff --git a/eBPF_Supermarket/Network_Subsystem/net_watcher/netwatcher.c b/eBPF_Supermarket/Network_Subsystem/net_watcher/netwatcher.c index 0d8a63088..c17a23203 100644 --- a/eBPF_Supermarket/Network_Subsystem/net_watcher/netwatcher.c +++ b/eBPF_Supermarket/Network_Subsystem/net_watcher/netwatcher.c @@ -44,7 +44,7 @@ static int all_conn = 0, err_packet = 0, extra_conn_info = 0, layer_time = 0, http_info = 0, retrans_info = 0, udp_info = 0, net_filter = 0, drop_reason = 0, addr_to_func = 0, icmp_info = 0, tcp_info = 0, time_load = 0, dns_info = 0, stack_info = 0, mysql_info = 0, - redis_info = 0, count_info = 0, rtt_info = 0; // flag + redis_info = 0, count_info = 0, rtt_info = 0, rst_info = 0; // flag static const char *tcp_states[] = { [1] = "ESTABLISHED", [2] = "SYN_SENT", [3] = "SYN_RECV", @@ -83,7 +83,7 @@ static const struct argp_option opts[] = { {"count", 'C', "NUMBER", 0, "specify the time to count the number of requests"}, {"rtt", 'T', 0, 0, "set to trace rtt"}, - + {"rst_counters", 'U', 0, 0, "set to trace rst"}, {}}; static error_t parse_arg(int key, char *arg, struct argp_state *state) { @@ -149,6 +149,9 @@ static error_t parse_arg(int key, char *arg, struct argp_state *state) { case 'T': rtt_info = 1; break; + case 'U': + rst_info = 1; + break; case 'C': count_info = strtoul(arg, &end, 10); break; @@ -179,6 +182,7 @@ enum MonitorMode { MODE_MYSQL, MODE_REDIS, MODE_RTT, + MODE_RST, MODE_DEFAULT }; @@ -201,6 +205,8 @@ enum MonitorMode get_monitor_mode() { return MODE_REDIS; } else if (rtt_info) { return MODE_RTT; + } else if (rst_info) { + return MODE_RST; } else { return MODE_DEFAULT; } @@ -435,6 +441,7 @@ static void set_rodata_flags(struct netwatcher_bpf *skel) { skel->rodata->mysql_info = mysql_info; skel->rodata->redis_info = redis_info; skel->rodata->rtt_info = rtt_info; + skel->rodata->rst_info = rst_info; } static void set_disable_load(struct netwatcher_bpf *skel) { @@ -601,6 +608,10 @@ static void set_disable_load(struct netwatcher_bpf *skel) { rtt_info) ? true : false); + bpf_program__set_autoload(skel->progs.handle_send_reset, + rst_info ? true : false); + bpf_program__set_autoload(skel->progs.handle_receive_reset, + rst_info ? true : false); } static void print_header(enum MonitorMode mode) { @@ -676,6 +687,14 @@ static void print_header(enum MonitorMode mode) { "INFORMATION====================================================" "============================\n"); break; + case MODE_RST: + printf("===============================================================" + "====================RST " + "INFORMATION====================================================" + "============================\n"); + printf("%-20s %-20s %-20s %-20s %-20s %-20s %-20s \n", "Pid", "Comm", + "Saddr", "Daddr", "Sport", "Dport", "Time"); + break; case MODE_DEFAULT: printf("===============================================================" "=INFORMATION===================================================" @@ -1102,7 +1121,52 @@ static int print_icmptime(void *ctx, void *packet_info, size_t size) { printf("\n"); return 0; } +#define MAX_EVENTS 1024 + +static __u64 rst_count = 0; +static struct reset_event_t event_store[MAX_EVENTS]; +static int event_count = 0; +static int print_rst(void *ctx, void *packet_info, size_t size) { + struct reset_event_t *event = packet_info; + + // 将事件存储到全局存储中 + if (event_count < MAX_EVENTS) { + memcpy(&event_store[event_count], event, sizeof(struct reset_event_t)); + event_count++; + } + + rst_count++; + return 0; +} +void print_stored_events() { + char s_str[INET_ADDRSTRLEN]; + char d_str[INET_ADDRSTRLEN]; + + for (int i = 0; i < event_count; i++) { + struct reset_event_t *event = &event_store[i]; + unsigned int saddr = event->saddr; + unsigned int daddr = event->daddr; + + if (event->family == AF_INET) { + inet_ntop(AF_INET, &saddr, s_str, sizeof(s_str)); + inet_ntop(AF_INET, &daddr, d_str, sizeof(d_str)); + printf("%-20llu %-20s %-20s %-20s %-20u %-20u %-20llu\n", + (unsigned long long)event->pid, event->comm, s_str, d_str, + event->sport, event->dport, + (unsigned long long)event->timestamp); + } else if (event->family == AF_INET6) { + char saddr_v6[INET6_ADDRSTRLEN]; + char daddr_v6[INET6_ADDRSTRLEN]; + inet_ntop(AF_INET6, &event->saddr_v6, saddr_v6, sizeof(saddr_v6)); + inet_ntop(AF_INET6, &event->daddr_v6, daddr_v6, sizeof(daddr_v6)); + printf("%-10llu %-16s %-16s %-16s %-8u %-8u %-20llu\n", + (unsigned long long)event->pid, event->comm, saddr_v6, + daddr_v6, event->sport, event->dport, + (unsigned long long)event->timestamp); + } + } +} // 从DNS数据包中提取并打印域名 static void print_domain_name(const unsigned char *data, char *output) { const unsigned char *next = data; @@ -1311,6 +1375,7 @@ int main(int argc, char **argv) { struct ring_buffer *mysql_rb = NULL; struct ring_buffer *redis_rb = NULL; struct ring_buffer *rtt_rb = NULL; + struct ring_buffer *events = NULL; struct netwatcher_bpf *skel; int err; /* Parse command line arguments */ @@ -1444,6 +1509,13 @@ int main(int argc, char **argv) { fprintf(stderr, "Failed to create ring buffer(connect_rb)\n"); goto cleanup; } + events = + ring_buffer__new(bpf_map__fd(skel->maps.events), print_rst, NULL, NULL); + if (!events) { + err = -1; + fprintf(stderr, "Failed to create ring buffer(rst_rb)\n"); + goto cleanup; + } /* Set up ring buffer polling */ rb = ring_buffer__new(bpf_map__fd(skel->maps.rb), print_packet, NULL, NULL); if (!rb) { @@ -1453,7 +1525,8 @@ int main(int argc, char **argv) { } open_log_files(); - + struct timeval start, end; + gettimeofday(&start, NULL); /* Process events */ while (!exiting) { err = ring_buffer__poll(rb, 100 /* timeout, ms */); @@ -1467,6 +1540,7 @@ int main(int argc, char **argv) { err = ring_buffer__poll(mysql_rb, 100 /* timeout, ms */); err = ring_buffer__poll(redis_rb, 100 /* timeout, ms */); err = ring_buffer__poll(rtt_rb, 100 /* timeout, ms */); + err = ring_buffer__poll(events, 100 /* timeout, ms */); print_conns(skel); sleep(1); /* Ctrl-C will cause -EINTR */ @@ -1478,6 +1552,17 @@ int main(int argc, char **argv) { printf("Error polling perf buffer: %d\n", err); break; } + + gettimeofday(&end, NULL); + if ((end.tv_sec - start.tv_sec) >= 5) { + print_stored_events(); + printf("Total RSTs in the last 5 seconds: %llu\n\n", rst_count); + + // 重置计数器和事件存储 + rst_count = 0; + event_count = 0; + gettimeofday(&start, NULL); + } } cleanup: diff --git a/eBPF_Supermarket/Network_Subsystem/net_watcher/tcp.bpf.h b/eBPF_Supermarket/Network_Subsystem/net_watcher/tcp.bpf.h index 97eec262b..78a617f08 100644 --- a/eBPF_Supermarket/Network_Subsystem/net_watcher/tcp.bpf.h +++ b/eBPF_Supermarket/Network_Subsystem/net_watcher/tcp.bpf.h @@ -295,6 +295,7 @@ __handle_set_state(struct trace_event_raw_inet_sock_set_state *ctx) { message->oldstate = tcpstate.oldstate; message->newstate = tcpstate.newstate; message->time = tcpstate.time; + bpf_printk("Dport:%d time:%d", tcpstate.dport, tcpstate.time); bpf_ringbuf_submit(message, 0); return 0; } @@ -343,7 +344,7 @@ static __always_inline int __tcp_rcv_established(struct sock *sk, } message->saddr = pkt_tuple.saddr; message->daddr = pkt_tuple.daddr; - bpf_printk("Saddr:%u Daddr:%u", pkt_tuple.saddr, pkt_tuple.daddr); + // bpf_printk("Saddr:%u Daddr:%u", pkt_tuple.saddr, pkt_tuple.daddr); bpf_probe_read_kernel(message->slots, sizeof(message->slots), histp->slots); message->latency = histp->latency; message->cnt = histp->cnt; @@ -351,4 +352,87 @@ static __always_inline int __tcp_rcv_established(struct sock *sk, // slot_count %llu", histp->latency, histp->cnt, slot, histp->slots[slot]); bpf_ringbuf_submit(message, 0); return 0; +} + +static __always_inline int ret(void *ctx, __u8 direction, __u16 sport, + __u16 dport) { + struct reset_event_t *message = + bpf_ringbuf_reserve(&events, sizeof(*message), 0); + if (!message) + return 0; + + message->pid = bpf_get_current_pid_tgid() >> 32; + bpf_get_current_comm(&message->comm, sizeof(message->comm)); + + struct sock *sk = (struct sock *)ctx; + message->family = BPF_CORE_READ(sk, __sk_common.skc_family); + message->timestamp = bpf_ktime_get_ns(); + + if (message->family == AF_INET) { + if (direction == 0) { // Send + message->saddr = BPF_CORE_READ(sk, __sk_common.skc_rcv_saddr); + message->daddr = BPF_CORE_READ(sk, __sk_common.skc_daddr); + } else { // Receive + message->saddr = BPF_CORE_READ(sk, __sk_common.skc_daddr); + message->daddr = BPF_CORE_READ(sk, __sk_common.skc_rcv_saddr); + } + message->saddr_v6 = 0; + message->daddr_v6 = 0; + } else if (message->family == AF_INET6) { + if (direction == 0) { // Send + BPF_CORE_READ_INTO(&message->saddr_v6, sk, + __sk_common.skc_v6_rcv_saddr.in6_u.u6_addr32); + BPF_CORE_READ_INTO(&message->daddr_v6, sk, + __sk_common.skc_v6_daddr.in6_u.u6_addr32); + } else { // Receive + BPF_CORE_READ_INTO(&message->saddr_v6, sk, + __sk_common.skc_v6_daddr.in6_u.u6_addr32); + BPF_CORE_READ_INTO(&message->daddr_v6, sk, + __sk_common.skc_v6_rcv_saddr.in6_u.u6_addr32); + } + message->saddr = 0; + message->daddr = 0; + } + + if (direction == 0) { // Send + message->sport = bpf_ntohs(sport); + message->dport = bpf_ntohs(dport); + } else { // Receive + message->sport = bpf_ntohs(dport); + message->dport = bpf_ntohs(sport); + } + message->direction = direction; + + // 增加 RST 计数 + __u32 pid = message->pid; + __u64 *count = bpf_map_lookup_elem(&counters, &pid); + if (count) { + *count += 1; + } else { + __u64 initial_count = 1; + bpf_map_update_elem(&counters, &pid, &initial_count, BPF_ANY); + count = &initial_count; + } + message->count = *count; + + bpf_ringbuf_submit(message, 0); + + return 0; +} +static __always_inline int +__handle_send_reset(struct trace_event_raw_tcp_send_reset *ctx) { + struct sock *sk = (struct sock *)ctx->skaddr; + if (!sk) + return 0; + bpf_printk("Send reset: sport=%u, dport=%u\n", ctx->sport, ctx->dport); + return ret((void *)ctx->skaddr, 0, ctx->sport, ctx->dport); +} + +static __always_inline int +__handle_receive_reset(struct trace_event_raw_tcp_receive_reset *ctx) { + struct sock *sk = (struct sock *)ctx->skaddr; + if (!sk) + return 0; + bpf_printk("Receive reset: sport=%u, dport=%u\n", ctx->sport, ctx->dport); + return ret((void *)ctx->skaddr, 1, ctx->sport, ctx->dport); } \ No newline at end of file From 695a770d766dd30327aa728b37a1cc6a382f25a0 Mon Sep 17 00:00:00 2001 From: wynyibo Date: Fri, 26 Jul 2024 18:44:53 +0800 Subject: [PATCH 02/11] update --- .../net_watcher/netwatcher.c | 1 + .../Network_Subsystem/net_watcher/tcp.bpf.h | 26 ++++++++++++------- 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/eBPF_Supermarket/Network_Subsystem/net_watcher/netwatcher.c b/eBPF_Supermarket/Network_Subsystem/net_watcher/netwatcher.c index c17a23203..263459c7c 100644 --- a/eBPF_Supermarket/Network_Subsystem/net_watcher/netwatcher.c +++ b/eBPF_Supermarket/Network_Subsystem/net_watcher/netwatcher.c @@ -31,6 +31,7 @@ #include #include #include +#include static volatile bool exiting = false; diff --git a/eBPF_Supermarket/Network_Subsystem/net_watcher/tcp.bpf.h b/eBPF_Supermarket/Network_Subsystem/net_watcher/tcp.bpf.h index 78a617f08..62482b57d 100644 --- a/eBPF_Supermarket/Network_Subsystem/net_watcher/tcp.bpf.h +++ b/eBPF_Supermarket/Network_Subsystem/net_watcher/tcp.bpf.h @@ -380,16 +380,21 @@ static __always_inline int ret(void *ctx, __u8 direction, __u16 sport, message->daddr_v6 = 0; } else if (message->family == AF_INET6) { if (direction == 0) { // Send - BPF_CORE_READ_INTO(&message->saddr_v6, sk, - __sk_common.skc_v6_rcv_saddr.in6_u.u6_addr32); - BPF_CORE_READ_INTO(&message->daddr_v6, sk, - __sk_common.skc_v6_daddr.in6_u.u6_addr32); + bpf_probe_read_kernel( + &message->saddr_v6, sizeof(message->saddr_v6), + &sk->__sk_common.skc_v6_rcv_saddr.in6_u.u6_addr32); + bpf_probe_read_kernel( + &message->daddr_v6, sizeof(message->daddr_v6), + &sk->__sk_common.skc_v6_daddr.in6_u.u6_addr32); } else { // Receive - BPF_CORE_READ_INTO(&message->saddr_v6, sk, - __sk_common.skc_v6_daddr.in6_u.u6_addr32); - BPF_CORE_READ_INTO(&message->daddr_v6, sk, - __sk_common.skc_v6_rcv_saddr.in6_u.u6_addr32); + bpf_probe_read_kernel( + &message->saddr_v6, sizeof(message->saddr_v6), + &sk->__sk_common.skc_v6_daddr.in6_u.u6_addr32); + bpf_probe_read_kernel( + &message->daddr_v6, sizeof(message->daddr_v6), + &sk->__sk_common.skc_v6_rcv_saddr.in6_u.u6_addr32); } + message->saddr = 0; message->daddr = 0; } @@ -424,7 +429,7 @@ __handle_send_reset(struct trace_event_raw_tcp_send_reset *ctx) { struct sock *sk = (struct sock *)ctx->skaddr; if (!sk) return 0; - bpf_printk("Send reset: sport=%u, dport=%u\n", ctx->sport, ctx->dport); + // bpf_printk("Send reset: sport=%u, dport=%u\n", ctx->sport, ctx->dport); return ret((void *)ctx->skaddr, 0, ctx->sport, ctx->dport); } @@ -433,6 +438,7 @@ __handle_receive_reset(struct trace_event_raw_tcp_receive_reset *ctx) { struct sock *sk = (struct sock *)ctx->skaddr; if (!sk) return 0; - bpf_printk("Receive reset: sport=%u, dport=%u\n", ctx->sport, ctx->dport); + // bpf_printk("Receive reset: sport=%u, dport=%u\n", ctx->sport, + // ctx->dport); return ret((void *)ctx->skaddr, 1, ctx->sport, ctx->dport); } \ No newline at end of file From 628a539f40cdf0d450061b68d8f2c30282cf7511 Mon Sep 17 00:00:00 2001 From: wynyibo Date: Fri, 26 Jul 2024 19:01:44 +0800 Subject: [PATCH 03/11] update --- .github/workflows/ebpf_net_watcher.yml | 4 ++++ .../Network_Subsystem/net_watcher/netwatcher.h | 16 ++++++++++++++++ .../Network_Subsystem/net_watcher/tcp.bpf.h | 10 +++++----- 3 files changed, 25 insertions(+), 5 deletions(-) diff --git a/.github/workflows/ebpf_net_watcher.yml b/.github/workflows/ebpf_net_watcher.yml index efce13059..4f3372d75 100644 --- a/.github/workflows/ebpf_net_watcher.yml +++ b/.github/workflows/ebpf_net_watcher.yml @@ -48,4 +48,8 @@ jobs: sudo timeout -s SIGINT 5 ./netwatcher -S || if [[ $? != 124 && $? != 0 ]];then exit $?;fi sudo timeout -s SIGINT 5 ./netwatcher -D || if [[ $? != 124 && $? != 0 ]];then exit $?;fi sudo timeout -s SIGINT 5 ./netwatcher -M || if [[ $? != 124 && $? != 0 ]];then exit $?;fi + sudo timeout -s SIGINT 5 ./netwatcher -R || if [[ $? != 124 && $? != 0 ]];then exit $?;fi + sudo timeout -s SIGINT 5 ./netwatcher -C || if [[ $? != 124 && $? != 0 ]];then exit $?;fi + sudo timeout -s SIGINT 5 ./netwatcher -T || if [[ $? != 124 && $? != 0 ]];then exit $?;fi + sudo timeout -s SIGINT 5 ./netwatcher -U || if [[ $? != 124 && $? != 0 ]];then exit $?;fi timeout-minutes: 5 diff --git a/eBPF_Supermarket/Network_Subsystem/net_watcher/netwatcher.h b/eBPF_Supermarket/Network_Subsystem/net_watcher/netwatcher.h index a17775258..e7559671d 100644 --- a/eBPF_Supermarket/Network_Subsystem/net_watcher/netwatcher.h +++ b/eBPF_Supermarket/Network_Subsystem/net_watcher/netwatcher.h @@ -200,4 +200,20 @@ struct RTT { u64 latency; u64 cnt; }; + +struct reset_event_t { + int pid; + char comm[16]; + u16 family; + unsigned __int128 saddr_v6; + unsigned __int128 daddr_v6; + u32 saddr; + u32 daddr; + u16 sport; + u16 dport; + u8 direction; // 0 for send, 1 for receive + u64 count; + u64 timestamp; + u8 state; +}; #endif /* __NETWATCHER_H */ \ No newline at end of file diff --git a/eBPF_Supermarket/Network_Subsystem/net_watcher/tcp.bpf.h b/eBPF_Supermarket/Network_Subsystem/net_watcher/tcp.bpf.h index 62482b57d..abcc05698 100644 --- a/eBPF_Supermarket/Network_Subsystem/net_watcher/tcp.bpf.h +++ b/eBPF_Supermarket/Network_Subsystem/net_watcher/tcp.bpf.h @@ -354,8 +354,8 @@ static __always_inline int __tcp_rcv_established(struct sock *sk, return 0; } -static __always_inline int ret(void *ctx, __u8 direction, __u16 sport, - __u16 dport) { +static __always_inline int ret(void *ctx, u8 direction, u16 sport, + u16 dport) { struct reset_event_t *message = bpf_ringbuf_reserve(&events, sizeof(*message), 0); if (!message) @@ -409,12 +409,12 @@ static __always_inline int ret(void *ctx, __u8 direction, __u16 sport, message->direction = direction; // 增加 RST 计数 - __u32 pid = message->pid; - __u64 *count = bpf_map_lookup_elem(&counters, &pid); + u32 pid = message->pid; + u64 *count = bpf_map_lookup_elem(&counters, &pid); if (count) { *count += 1; } else { - __u64 initial_count = 1; + u64 initial_count = 1; bpf_map_update_elem(&counters, &pid, &initial_count, BPF_ANY); count = &initial_count; } From 4f953cbdeaac60a8fada1b171c7be23b0c96d6cb Mon Sep 17 00:00:00 2001 From: vvzxy <145555693+vvzxy@users.noreply.github.com> Date: Tue, 30 Jul 2024 09:44:25 +0800 Subject: [PATCH 04/11] =?UTF-8?q?cpu=5Fwatcher=EF=BC=9A=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E6=80=81=E4=BA=92=E6=96=A5=E9=94=81=E8=AF=A6?= =?UTF-8?q?=E7=BB=86=E4=BF=A1=E6=81=AF=20(#869)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * cpu_watcher:schedule_delay增加阈值选项&&workflow增加测试流程 * . * cpu_watcher:增加controller功能 * cpu_watcher:schedule_delay增加dump出调度延迟过大task的前两个task * sar功能适配controller * . * proc_image:增加进程画像子功能使用说明 * cpu_watcher:增加内核态互斥锁信息细粒度采集 * Update mutrace.bpf.c * 1 * Update mutrace.bpf.c * Update cpu_watcher.c * 增加输出过滤,识别被争用的锁 * 添加测试程序 * add user mutex details --- .../cpu_watcher/bpf/mutrace.bpf.c | 139 ++++++++++++++---- .../CPU_Subsystem/cpu_watcher/controller.c | 23 ++- .../CPU_Subsystem/cpu_watcher/cpu_watcher.c | 54 ++++++- .../cpu_watcher/include/cpu_watcher.h | 8 +- .../cpu_watcher/include/cpu_watcher_helper.h | 52 +++++++ 5 files changed, 233 insertions(+), 43 deletions(-) diff --git a/eBPF_Supermarket/CPU_Subsystem/cpu_watcher/bpf/mutrace.bpf.c b/eBPF_Supermarket/CPU_Subsystem/cpu_watcher/bpf/mutrace.bpf.c index c1552cb23..79212119b 100644 --- a/eBPF_Supermarket/CPU_Subsystem/cpu_watcher/bpf/mutrace.bpf.c +++ b/eBPF_Supermarket/CPU_Subsystem/cpu_watcher/bpf/mutrace.bpf.c @@ -23,7 +23,9 @@ char LICENSE[] SEC("license") = "Dual BSD/GPL"; const int ctrl_key = 0; -BPF_HASH(mutex_info_map, u64, struct mutex_info_kernel, 1024); +BPF_HASH(kmutex_info_map, u64, struct mutex_info, 1024); +BPF_HASH(umutex_info_map, u64, struct mutex_info, 1024); +BPF_HASH(trylock_map, u64, struct trylock_info, 1024); BPF_ARRAY(mu_ctrl_map, int, struct mu_ctrl, 1); struct { __uint(type, BPF_MAP_TYPE_RINGBUF); @@ -47,11 +49,11 @@ SEC("kprobe/mutex_lock") int BPF_KPROBE(trace_mutex_lock, struct mutex *lock) { u64 lock_addr = (u64)lock; // 获取锁地址 u64 ts = bpf_ktime_get_ns(); - struct mutex_info_kernel *info = bpf_map_lookup_elem(&mutex_info_map, &lock_addr); + struct mutex_info *info = bpf_map_lookup_elem(&kmutex_info_map, &lock_addr); if (info) { info->acquire_time = ts; // 保存锁获取时间 } else { - struct mutex_info_kernel new_info = { + struct mutex_info new_info = { .locked_total = 0, .locked_max = 0, .contended_total = 0, @@ -61,7 +63,7 @@ int BPF_KPROBE(trace_mutex_lock, struct mutex *lock) { .ptr = lock_addr }; __builtin_memset(new_info.last_name, 0, sizeof(new_info.last_name)); - bpf_map_update_elem(&mutex_info_map, &lock_addr, &new_info, BPF_ANY); + bpf_map_update_elem(&kmutex_info_map, &lock_addr, &new_info, BPF_ANY); } return 0; } @@ -72,11 +74,11 @@ int BPF_KPROBE(trace_mutex_trylock, struct mutex *lock) { if (ret != 0) { // 成功获取锁 u64 lock_addr = (u64)lock; // 获取锁地址 u64 ts = bpf_ktime_get_ns(); - struct mutex_info_kernel *info = bpf_map_lookup_elem(&mutex_info_map, &lock_addr); + struct mutex_info *info = bpf_map_lookup_elem(&kmutex_info_map, &lock_addr); if (info) { info->acquire_time = ts; } else { - struct mutex_info_kernel new_info = { + struct mutex_info new_info = { .locked_total = 0, .locked_max = 0, .contended_total = 0, @@ -86,7 +88,7 @@ int BPF_KPROBE(trace_mutex_trylock, struct mutex *lock) { .ptr = lock_addr }; __builtin_memset(new_info.last_name, 0, sizeof(new_info.last_name)); - bpf_map_update_elem(&mutex_info_map, &lock_addr, &new_info, BPF_ANY); + bpf_map_update_elem(&kmutex_info_map, &lock_addr, &new_info, BPF_ANY); } } return 0; @@ -121,13 +123,13 @@ int BPF_KPROBE(trace_mutex_lock_slowpath, struct mutex *lock) { e->owner_pid = 0; __builtin_memset(e->owner_name, 0, sizeof(e->owner_name)); } - struct mutex_info_kernel *info = bpf_map_lookup_elem(&mutex_info_map, &lock_addr); + struct mutex_info *info = bpf_map_lookup_elem(&kmutex_info_map, &lock_addr); if (info) { u64 contention_start = ts; info->contended_total += (contention_start - info->acquire_time); // 更新争用时间 info->count++; // 更新争用次数 } else { - struct mutex_info_kernel new_info = { + struct mutex_info new_info = { .locked_total = 0, .locked_max = 0, .contended_total = 0, @@ -137,7 +139,7 @@ int BPF_KPROBE(trace_mutex_lock_slowpath, struct mutex *lock) { .ptr = lock_addr }; __builtin_memset(new_info.last_name, 0, sizeof(new_info.last_name)); - bpf_map_update_elem(&mutex_info_map, &lock_addr, &new_info, BPF_ANY); + bpf_map_update_elem(&kmutex_info_map, &lock_addr, &new_info, BPF_ANY); } bpf_ringbuf_submit(e, 0); return 0; @@ -148,7 +150,7 @@ int BPF_KPROBE(trace_mutex_unlock, struct mutex *lock) { u64 lock_addr = (u64)lock; u64 ts = bpf_ktime_get_ns(); pid_t pid = bpf_get_current_pid_tgid(); - struct mutex_info_kernel *info = bpf_map_lookup_elem(&mutex_info_map, &lock_addr); + struct mutex_info *info = bpf_map_lookup_elem(&kmutex_info_map, &lock_addr); if (info) { u64 held_time = ts - info->acquire_time; // 计算锁被持有的时间 info->locked_total += held_time; // 更新锁被持有的总时间 @@ -167,27 +169,104 @@ int BPF_KPROBE(trace_mutex_unlock, struct mutex *lock) { /* 用户态互斥锁 */ /*----------------------------------------------*/ -// SEC("uprobe") -// int BPF_KPROBE(pthread_mutex_lock_init, void *__mutex){ -// } -// SEC("uprobe") -// int BPF_KPROBE(pthread_mutex_lock,void *__mutex){ - -// } +SEC("uprobe/pthread_mutex_lock") +int BPF_KPROBE(pthread_mutex_lock, void *__mutex) { + u64 pid_tgid = bpf_get_current_pid_tgid(); + pid_t pid = pid_tgid >> 32; + u64 now = bpf_ktime_get_ns(); -// SEC("uprobe") -// int BPF_KPROBE(pthread_mutex_trylock, void *__mutex){ - -// } + struct mutex_info *info = bpf_map_lookup_elem(&umutex_info_map, &__mutex); + if (info) { + if (info->acquire_time > 0) { + // 如果 acquire_time 已经被设置,说明锁被争用 + info->contended_total += (now - info->acquire_time); + info->count += 1; + } + info->acquire_time = now; + info->last_owner = pid; + bpf_get_current_comm(&info->last_name, sizeof(info->last_name)); + } else { + // 初始化 mutex_info + struct mutex_info new_info = { + .locked_total = 0, + .locked_max = 0, + .contended_total = 0, + .count = 0, + .last_owner = pid, + .acquire_time = now, + .ptr = (u64)__mutex, + }; + bpf_get_current_comm(&new_info.last_name, sizeof(new_info.last_name)); + bpf_map_update_elem(&umutex_info_map, &__mutex, &new_info, BPF_ANY); + } + return 0; +} + +SEC("uprobe/__pthread_mutex_trylock") +int BPF_KPROBE(__pthread_mutex_trylock, void *__mutex) { + u64 pid_tgid = bpf_get_current_pid_tgid(); + u64 now = bpf_ktime_get_ns(); + struct trylock_info info = { + .__mutex = __mutex, + .start_time = now, + }; + bpf_map_update_elem(&trylock_map, &pid_tgid, &info, BPF_ANY); + return 0; +} -// SEC("uprobe") -// int BPF_KPROBE(pthread_mutex_unlock, void *__mutex){ - -// } +SEC("uretprobe/__pthread_mutex_trylock") +int BPF_KRETPROBE(ret_pthread_mutex_trylock, int ret) { + u64 pid_tgid = bpf_get_current_pid_tgid(); + struct trylock_info *try_info = bpf_map_lookup_elem(&trylock_map, &pid_tgid); + if (!try_info) { + return 0; + } + void *__mutex = try_info->__mutex; + u64 now = bpf_ktime_get_ns(); + if (ret == 0) { + struct mutex_info *info = bpf_map_lookup_elem(&umutex_info_map, &__mutex); + if (info) { + if (info->acquire_time > 0) { + // 如果 acquire_time 已经被设置,说明锁被争用 + info->contended_total += (now - info->acquire_time); + info->count += 1; + } + info->acquire_time = now; + info->last_owner = pid_tgid >> 32; + bpf_get_current_comm(&info->last_name, sizeof(info->last_name)); + } else { + // 初始化 mutex_info + struct mutex_info new_info = { + .locked_total = 0, + .locked_max = 0, + .contended_total = 0, + .count = 0, + .last_owner = pid_tgid >> 32, + .acquire_time = now, + .ptr = (u64)__mutex, + }; + bpf_get_current_comm(&new_info.last_name, sizeof(new_info.last_name)); + bpf_map_update_elem(&umutex_info_map, &__mutex, &new_info, BPF_ANY); + } + } + bpf_map_delete_elem(&trylock_map, &pid_tgid); + return 0; +} + +SEC("uprobe/pthread_mutex_unlock") +int BPF_KPROBE(pthread_mutex_unlock, void *__mutex){ + u64 now = bpf_ktime_get_ns(); + struct mutex_info *info = bpf_map_lookup_elem(&umutex_info_map, &__mutex); + if (info) { + u64 locked_time = now - info->acquire_time; + info->locked_total += locked_time; + if (locked_time > info->locked_max) { + info->locked_max = locked_time; + } + info->acquire_time = 0; + } + return 0; +} -// SEC("uprobe") -// int BPF_KPROBE(pthread_mutex_destroy,void *__mutex){ - -// } diff --git a/eBPF_Supermarket/CPU_Subsystem/cpu_watcher/controller.c b/eBPF_Supermarket/CPU_Subsystem/cpu_watcher/controller.c index b507e48ff..2c319dfe0 100644 --- a/eBPF_Supermarket/CPU_Subsystem/cpu_watcher/controller.c +++ b/eBPF_Supermarket/CPU_Subsystem/cpu_watcher/controller.c @@ -41,6 +41,7 @@ static struct env { int freq; bool mutrace; bool mutex_detail; + bool umutex; } env = { .usemode = 0, .SAR = false, @@ -55,6 +56,7 @@ static struct env { .freq = 99, .mutrace = false, .mutex_detail = false, + .umutex = false, }; const char argp_program_doc[] ="Trace process to get cpu watcher.\n"; @@ -72,7 +74,8 @@ static const struct argp_option opts[] = { {"schedule_delay_min_us_set", 'e', "THRESHOLD", 0, "Print scheduling delays that exceed the threshold (the data of cpu)" }, {"mq_delay", 'm', 0, 0, "Print mq_delay(the data of proc)" }, {"mutrace", 'x', 0, 0, "Print kernel mutex contend" }, - {"mutex_detail", 'i', 0, 0, "Print kernel mutex details" }, + {"mutex_detail", 'i', 0, 0, "Print kernel mutex details" }, + {"umutex", 'b', 0, 0, "Print user mutex details" }, { NULL, 'h', NULL, OPTION_HIDDEN, "show the full help" }, {}, }; @@ -126,7 +129,10 @@ static error_t parse_arg(int key, char *arg, struct argp_state *state) break; case 'i': env.mutex_detail = true; - break; + break; + case 'b': + env.umutex = true; + break; case 'h': argp_state_help(state, stderr, ARGP_HELP_STD_HELP); break; @@ -242,9 +248,16 @@ int main(int argc, char **argv) } if(env.mutrace){ - struct mu_ctrl mu_ctrl = {true,env.mutex_detail,MUTEX_WATCHER+env.mutex_detail}; - err = update_mu_ctrl_map(mu_ctrl); - if(err < 0) return err; + if (env.umutex){ + struct mu_ctrl mu_ctrl = {true,env.mutex_detail,env.umutex,MUTEX_WATCHER+2}; + err = update_mu_ctrl_map(mu_ctrl); + if(err < 0) return err; + } + else{ + struct mu_ctrl mu_ctrl = {true,env.mutex_detail,env.umutex,MUTEX_WATCHER+env.mutex_detail}; + err = update_mu_ctrl_map(mu_ctrl); + if(err < 0) return err; + } } }else if(env.usemode == 2){ // deactivate mode err = deactivate_mode(); diff --git a/eBPF_Supermarket/CPU_Subsystem/cpu_watcher/cpu_watcher.c b/eBPF_Supermarket/CPU_Subsystem/cpu_watcher/cpu_watcher.c index 3ecc8ca4f..e50e23ab2 100644 --- a/eBPF_Supermarket/CPU_Subsystem/cpu_watcher/cpu_watcher.c +++ b/eBPF_Supermarket/CPU_Subsystem/cpu_watcher/cpu_watcher.c @@ -24,6 +24,7 @@ #include #include #include +#include #include #include #include @@ -559,6 +560,18 @@ static int preempt_print(void *ctx, void *data, unsigned long data_sz) return 0; } +static int attach(struct mutrace_bpf *mu_skel) +{ + int err; + ATTACH_UPROBE_CHECKED(mu_skel,pthread_mutex_lock,pthread_mutex_lock); + ATTACH_UPROBE_CHECKED(mu_skel,__pthread_mutex_trylock,__pthread_mutex_trylock); + ATTACH_URETPROBE_CHECKED(mu_skel,__pthread_mutex_trylock,ret_pthread_mutex_trylock); + ATTACH_UPROBE_CHECKED(mu_skel,pthread_mutex_unlock,pthread_mutex_unlock); + err = mutrace_bpf__attach(mu_skel); + CHECK_ERR(err, "Failed to attach BPF skeleton"); + return 0; + +} //mutrace输出 @@ -584,8 +597,15 @@ static int mutrace_print(void *ctx, void *data, unsigned long data_sz) { if(err < 0){ fprintf(stderr, "Failed to update elem\n"); } + }else if (mu_ctrl.prev_watcher == MUTEX_WATCHER +2) { + printf("%s\n"," lock_ptr locked_total locked_max contended_total count last_owner last_owmer_name"); + mu_ctrl.prev_watcher = MUTEX_WATCHER + 9;//打印表头功能关 + err = bpf_map_update_elem(mumap_fd, &key, &mu_ctrl, 0); + if(err < 0){ + fprintf(stderr, "Failed to update elem\n"); + } } - if(!mu_ctrl.mutex_detail){ + if(!mu_ctrl.mutex_detail&& (!mu_ctrl.umutex)){ const struct mutex_contention_event *e = data; if (e->owner_pid == 0 || e->contender_pid == 0||e->owner_pid == 1) { return 0; @@ -598,10 +618,10 @@ static int mutrace_print(void *ctx, void *data, unsigned long data_sz) { return 0; } -static int mutex_detail() { - int fd = bpf_map__fd(mu_skel->maps.mutex_info_map); +static int kmutex_detail() { + int fd = bpf_map__fd(mu_skel->maps.kmutex_info_map); u64 key, next_key; - struct mutex_info_kernel info; + struct mutex_info info; while (bpf_map_get_next_key(fd, &key, &next_key) == 0) { int err = bpf_map_lookup_elem(fd, &next_key, &info); if (err == 0 && info.contended_total != 0) { // 添加过滤条件 @@ -613,6 +633,21 @@ static int mutex_detail() { return 0; } +static int umutex_detail() { + int fd = bpf_map__fd(mu_skel->maps.umutex_info_map); + u64 key, next_key; + struct mutex_info info; + while (bpf_map_get_next_key(fd, &key, &next_key) == 0) { + int err = bpf_map_lookup_elem(fd, &next_key, &info); + if (err == 0 && info.contended_total != 0) { // 添加过滤条件 + printf(" %15llu %15llums %15llums %15llums %15d %15d %20s\n", + next_key, info.locked_total/1000000, info.locked_max/1000000, info.contended_total/1000000, info.count, info.last_owner, info.last_name); + } + key = next_key; + } + return 0; +} + static int schedule_print() { int err,key = 0; @@ -1013,7 +1048,7 @@ int main(int argc, char **argv) goto mutrace_cleanup; } mumap_fd = bpf_map__fd(mu_ctrl_map); - struct mu_ctrl init_value = {false,false,MUTEX_WATCHER}; + struct mu_ctrl init_value = {false,false,false,MUTEX_WATCHER}; err = bpf_map_update_elem(mumap_fd, &key, &init_value, 0); if(err < 0){ @@ -1029,7 +1064,7 @@ int main(int argc, char **argv) fprintf(stderr, "Failed to update elem\n"); goto mutrace_cleanup; } - err = mutrace_bpf__attach(mu_skel); + err = attach(mu_skel); if (err) { fprintf(stderr, "Failed to attach BPF skeleton\n"); goto mutrace_cleanup; @@ -1144,10 +1179,15 @@ int main(int argc, char **argv) break; } if(env.MUTRACE&&mu_ctrl.mutex_detail){ - err = mutex_detail(); + err = kmutex_detail(); + sleep(1); + printf("-------------------------------------------------------------\n"); + }else if(env.MUTRACE&&mu_ctrl.umutex){ + err = umutex_detail(); sleep(1); printf("-------------------------------------------------------------\n"); } + } else { printf("正在开发中......\n-c 打印cs_delay:\t对内核函数schedule()的执行时长进行测试;\n-s sar工具;\n-y 打印sc_delay:\t系统调用运行延迟进行检测; \n-p 打印preempt_time:\t对抢占调度时间输出;\n"); diff --git a/eBPF_Supermarket/CPU_Subsystem/cpu_watcher/include/cpu_watcher.h b/eBPF_Supermarket/CPU_Subsystem/cpu_watcher/include/cpu_watcher.h index 54a328542..7ffb2b3fa 100644 --- a/eBPF_Supermarket/CPU_Subsystem/cpu_watcher/include/cpu_watcher.h +++ b/eBPF_Supermarket/CPU_Subsystem/cpu_watcher/include/cpu_watcher.h @@ -158,7 +158,7 @@ struct proc_history { /*----------------------------------------------*/ /* mutrace相关结构体 */ /*----------------------------------------------*/ -struct mutex_info_kernel { +struct mutex_info { u64 locked_total;//锁被持有的总时间 u64 locked_max;//锁被持有的最长时间 u64 contended_total;//锁发生竞争的总时间 @@ -179,6 +179,11 @@ struct mutex_contention_event { int contender_prio; }; +struct trylock_info { + void *__mutex; + u64 start_time; +}; + /*----------------------------------------------*/ /* mq_delay相关结构体 */ /*----------------------------------------------*/ @@ -293,6 +298,7 @@ struct mq_ctrl{ struct mu_ctrl{ bool mu_func; bool mutex_detail; + bool umutex; int prev_watcher; }; diff --git a/eBPF_Supermarket/CPU_Subsystem/cpu_watcher/include/cpu_watcher_helper.h b/eBPF_Supermarket/CPU_Subsystem/cpu_watcher/include/cpu_watcher_helper.h index 3db69defd..08e38f0e1 100644 --- a/eBPF_Supermarket/CPU_Subsystem/cpu_watcher/include/cpu_watcher_helper.h +++ b/eBPF_Supermarket/CPU_Subsystem/cpu_watcher/include/cpu_watcher_helper.h @@ -298,4 +298,56 @@ void add_entry(int pid, const char *comm, long long delay) { seen_count++; } } +/*----------------------------------------------*/ +/* uprobe */ +/*----------------------------------------------*/ +static const char object[] = "/usr/lib/x86_64-linux-gnu/libc.so.6"; + +#define __ATTACH_UPROBE(skel, sym_name, prog_name, is_retprobe) \ + do \ + { \ + LIBBPF_OPTS(bpf_uprobe_opts, uprobe_opts, \ + .retprobe = is_retprobe, \ + .func_name = #sym_name); \ + skel->links.prog_name = bpf_program__attach_uprobe_opts( \ + skel->progs.prog_name, \ + -1, \ + object, \ + 0, \ + &uprobe_opts); \ + } while (false) + +#define __CHECK_PROGRAM(skel, prog_name) \ + do \ + { \ + if (!skel->links.prog_name) \ + { \ + fprintf(stderr, "[%s] no program attached for" #prog_name "\n", strerror(errno)); \ + return -errno; \ + } \ + } while (false) + +#define __ATTACH_UPROBE_CHECKED(skel, sym_name, prog_name, is_retprobe) \ + do \ + { \ + __ATTACH_UPROBE(skel, sym_name, prog_name, is_retprobe); \ + __CHECK_PROGRAM(skel, prog_name); \ + } while (false) + +#define ATTACH_UPROBE(skel, sym_name, prog_name) __ATTACH_UPROBE(skel, sym_name, prog_name, false) +#define ATTACH_URETPROBE(skel, sym_name, prog_name) __ATTACH_UPROBE(skel, sym_name, prog_name, true) + +#define ATTACH_UPROBE_CHECKED(skel, sym_name, prog_name) __ATTACH_UPROBE_CHECKED(skel, sym_name, prog_name, false) +#define ATTACH_URETPROBE_CHECKED(skel, sym_name, prog_name) __ATTACH_UPROBE_CHECKED(skel, sym_name, prog_name, true) + +#define CHECK_ERR(cond, info) \ + if (cond) \ + { \ + fprintf(stderr, "[%s]" info "\n", strerror(errno)); \ + return -1; \ + } + +#define warn(...) fprintf(stderr, __VA_ARGS__) + + #endif // CPU_WATCHER_HELPER_H \ No newline at end of file From 73686c54c8f3ce62b1cc3f0ca50e5bb637fbb507 Mon Sep 17 00:00:00 2001 From: zhangxianyu777 <93031728+zhangxianyu777@users.noreply.github.com> Date: Tue, 30 Jul 2024 09:44:50 +0800 Subject: [PATCH 05/11] =?UTF-8?q?net=5Fmanager:=E5=AE=9E=E7=8E=B0=E9=BB=91?= =?UTF-8?q?=E7=99=BD=E5=90=8D=E5=8D=95=E5=8A=9F=E8=83=BD=E3=80=81=E6=9B=B4?= =?UTF-8?q?=E6=94=B9=E8=BE=93=E5=85=A5=E5=8F=82=E6=95=B0=E5=BD=A2=E5=BC=8F?= =?UTF-8?q?=E3=80=81=E5=A2=9E=E5=8A=A0=E8=BE=93=E5=87=BA=E6=A0=BC=E5=BC=8F?= =?UTF-8?q?=E3=80=81=E5=A2=9E=E5=8A=A0=E6=96=87=E6=A1=A3=20(#870)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix the para of t and change the function of connect * change the parm_in and add the output of match and add the document --------- Co-authored-by: zmx --- .../net_manager/common/common_defines.h | 15 +- .../net_manager/common/common_params.c | 32 ++- .../net_manager/document/ip_filter.md | 149 +++++++++++++ .../net_manager/document/net_manager.md | 209 ++++++++++++++++++ .../net_manager/document/pic/ip_filter1.png | Bin 0 -> 35238 bytes .../net_manager/document/pic/ip_filter2.png | Bin 0 -> 19358 bytes .../net_manager/document/pic/ip_filter3.png | Bin 0 -> 30154 bytes .../net_manager/document/pic/ip_filter4.png | Bin 0 -> 10860 bytes .../net_manager/document/pic/net_manager1.png | Bin 0 -> 57847 bytes .../net_manager/document/pic/net_manager2.png | Bin 0 -> 28249 bytes .../net_manager/document/pic/net_manager3.png | Bin 0 -> 19157 bytes .../net_manager/document/pic/net_manager4.png | Bin 0 -> 40770 bytes .../net_manager/document/pic/net_manager5.png | Bin 0 -> 14126 bytes .../net_manager/document/pic/net_manager6.png | Bin 0 -> 65962 bytes .../net_manager/document/pic/net_manager7.png | Bin 0 -> 53174 bytes .../net_manager/document/pic/net_manager8.png | Bin 0 -> 43331 bytes .../document/pic/session_keep1.png | Bin 0 -> 92135 bytes .../document/pic/session_keep2.png | Bin 0 -> 43893 bytes .../net_manager/document/session_keep.md | 72 ++++++ .../net_manager/conf.d/black_ipv4.conf | 4 +- .../net_manager/net_manager/xdp_loader.c | 75 ++++--- .../net_manager/net_manager/xdp_prog_kern.c | 36 ++- 22 files changed, 548 insertions(+), 44 deletions(-) create mode 100644 eBPF_Supermarket/Network_Subsystem/net_manager/document/ip_filter.md create mode 100644 eBPF_Supermarket/Network_Subsystem/net_manager/document/net_manager.md create mode 100644 eBPF_Supermarket/Network_Subsystem/net_manager/document/pic/ip_filter1.png create mode 100644 eBPF_Supermarket/Network_Subsystem/net_manager/document/pic/ip_filter2.png create mode 100644 eBPF_Supermarket/Network_Subsystem/net_manager/document/pic/ip_filter3.png create mode 100644 eBPF_Supermarket/Network_Subsystem/net_manager/document/pic/ip_filter4.png create mode 100644 eBPF_Supermarket/Network_Subsystem/net_manager/document/pic/net_manager1.png create mode 100644 eBPF_Supermarket/Network_Subsystem/net_manager/document/pic/net_manager2.png create mode 100644 eBPF_Supermarket/Network_Subsystem/net_manager/document/pic/net_manager3.png create mode 100644 eBPF_Supermarket/Network_Subsystem/net_manager/document/pic/net_manager4.png create mode 100644 eBPF_Supermarket/Network_Subsystem/net_manager/document/pic/net_manager5.png create mode 100644 eBPF_Supermarket/Network_Subsystem/net_manager/document/pic/net_manager6.png create mode 100644 eBPF_Supermarket/Network_Subsystem/net_manager/document/pic/net_manager7.png create mode 100644 eBPF_Supermarket/Network_Subsystem/net_manager/document/pic/net_manager8.png create mode 100644 eBPF_Supermarket/Network_Subsystem/net_manager/document/pic/session_keep1.png create mode 100644 eBPF_Supermarket/Network_Subsystem/net_manager/document/pic/session_keep2.png create mode 100644 eBPF_Supermarket/Network_Subsystem/net_manager/document/session_keep.md diff --git a/eBPF_Supermarket/Network_Subsystem/net_manager/common/common_defines.h b/eBPF_Supermarket/Network_Subsystem/net_manager/common/common_defines.h index 12c822f8e..4d7e9e8b9 100644 --- a/eBPF_Supermarket/Network_Subsystem/net_manager/common/common_defines.h +++ b/eBPF_Supermarket/Network_Subsystem/net_manager/common/common_defines.h @@ -1,11 +1,12 @@ #ifndef __COMMON_DEFINES_H #define __COMMON_DEFINES_H -#include -#include -#include #include + +#define FILE_MAXSIZE 128 +#define IF_NAMESIZE 16 + struct config { enum xdp_attach_mode attach_mode; __u32 xdp_flags; @@ -33,7 +34,13 @@ struct config { bool router; //路由 bool state; //会话保持 bool clear; //清理 - + char *ip_filter_file; + char ip_filter_file_buf[FILE_MAXSIZE]; + char *mac_filter_file; + char mac_filter_file_buf[FILE_MAXSIZE]; + char *router_file; + char router_file_buf[FILE_MAXSIZE]; + bool print_info; }; /* Defined in common_params.o */ diff --git a/eBPF_Supermarket/Network_Subsystem/net_manager/common/common_params.c b/eBPF_Supermarket/Network_Subsystem/net_manager/common/common_params.c index 5d261c394..0bfafedff 100644 --- a/eBPF_Supermarket/Network_Subsystem/net_manager/common/common_params.c +++ b/eBPF_Supermarket/Network_Subsystem/net_manager/common/common_params.c @@ -151,7 +151,7 @@ void parse_cmdline_args(int argc, char **argv, } /* 解析命令行参数 */ - while ((opt = getopt_long(argc, argv, "hd:r:L:R:ASNFUMQ:czpq:i:m:k:g:n:t", + while ((opt = getopt_long(argc, argv, "hd:r:L:R:ASNFUMQ:czpq:i:m:k:g:n:tT", long_options, &longindex)) != -1) { switch (opt) { case 'd': @@ -195,12 +195,37 @@ void parse_cmdline_args(int argc, char **argv, break; case 'i': cfg->ip_filter = true; + // 检查文件路径长度是否超出限制 + if (strlen(optarg) >= FILE_MAXSIZE) { + fprintf(stderr, "ERR: --ip_filter_file name too long\n"); + goto error; + } + // 设置文件路径 + cfg->ip_filter_file = (char *)&cfg->ip_filter_file_buf; //初始化ip_filter_file + strncpy(cfg->ip_filter_file, optarg, FILE_MAXSIZE); + //printf("%s %s\n",optarg,cfg->ip_filter_file); break; case 'm': cfg->mac_filter = true; + // 检查文件路径长度是否超出限制 + if (strlen(optarg) >= FILE_MAXSIZE) { + fprintf(stderr, "ERR: --mac_filter_file name too long\n"); + goto error; + } + // 设置文件路径 + cfg->mac_filter_file = (char *)&cfg->mac_filter_file_buf; //初始化ip_filter_file + strncpy(cfg->mac_filter_file, optarg, FILE_MAXSIZE); break; case 'k': cfg->router = true; + // 检查文件路径长度是否超出限制 + if (strlen(optarg) >= FILE_MAXSIZE) { + fprintf(stderr, "ERR: --router_file name too long\n"); + goto error; + } + // 设置文件路径 + cfg->router_file = (char *)&cfg->router_file_buf; //初始化ip_filter_file + strncpy(cfg->router_file, optarg, FILE_MAXSIZE); break; case 'g': cfg->state = true; @@ -286,6 +311,11 @@ void parse_cmdline_args(int argc, char **argv, // 设置显示完整帮助信息的标志 full_help = true; /* fall-through */ + break; + case 'T': + // 设置打印的标志 + cfg->print_info = true; + break; error: default: // 打印使用信息并退出 diff --git a/eBPF_Supermarket/Network_Subsystem/net_manager/document/ip_filter.md b/eBPF_Supermarket/Network_Subsystem/net_manager/document/ip_filter.md new file mode 100644 index 000000000..1d6b7bb7d --- /dev/null +++ b/eBPF_Supermarket/Network_Subsystem/net_manager/document/ip_filter.md @@ -0,0 +1,149 @@ +## 黑白名单 + +### 概述 + +​ 本工具通过XDP技术,在内核层面实现高效的网络流量监控和过滤。通过配置规则文件,可以灵活地定义黑白名单策略,对特定IP、端口和协议的报文进行过滤。结合实际网络环境,这种工具能够有效提升网络安全性,减少恶意流量,优化网络性能,特别适用于需要高性能数据包处理的场景,如大型数据中心和云计算平台。 + +### 实现 + +![image-20240726104526418](./pic/ip_filter1.png) + +#### 输入参数优化 + +在原先的黑白名单中,名单的路径参数十分固定 + +```c + if (cfg.ip_filter) { + load_bpf_map(); + err = load_handler_ipv4(argc - 3, argv + 6); + if (err) { + fprintf(stderr, "ERR: loading IP filter config file\n"); + return err; + } +``` + +因此其使用的方法十分固定,要求路径必须在相应的位置,如: + +``` +sudo ./xdp_loader -d ens33 -S --progname=xdp_entry_ipv4 -i conf.d/black_ipv4.conf -t +``` + +将其绑定到-i参数上 + +```c +cfg->ip_filter_file = (char *)&cfg->ip_filter_file_buf; //初始化ip_filter_file +strncpy(cfg->ip_filter_file, optarg, FILE_MAXSIZE); +``` + +通过先将 `cfg->ifname` 指向 `cfg->ifname_buf`,确保了 `cfg->ifname` 指向的是一个有效的缓冲区,然后再使用 `strncpy` 将字符串复制到该缓冲区中,从而避免了潜在的内存访问错误。 + +去掉这种限制 + +``` +sudo ./xdp_loader -d ens33 -S --progname=xdp_entry_ipv4 -i conf.d/black_ipv4.conf -t +``` + +#### 增添输出格式 + +原先的程序中,除了对所有策略的统计输出,并无其余输出,对可读性有一定的限制,现在通过增添filter_info将数据打印在日志中,使用户可以清晰看到相应规则所匹配到的条目信息。 + +### 使用方法 + +本功能的使用命令为 + +``` +sudo ./xdp_loader -d ens33 -S --progname=xdp_entry_ipv4 -i conf.d/black_ipv4.conf +``` + +也可以在其中加入-t/T选项,t参数会定时统计所有策略对应的报文数,T参数会输出所有匹配条目与策略 + +之后可以使用xdp-loader查看挂载程序及卸载 + +```shell +sudo xdp-loader status +``` + +![image-20240726114124092](./pic/ip_filter2.png) + +其中可以看到对应网卡上挂载的XDP程序 + +当不使用时进行卸载 + +```shell +sudo xdp-loader unload ens33 --all +``` + +在 ./conf.d 目录里有样例规则文件 black_ipv4.conf 别代表条目名单。程序会按顺序逐行加载进BPF Map,同样,XDP程序执行时也会逐行匹配规则,所以写在前面的规则具有更高的优先级。每行规则的格式为: + +``` +[SIP/MASK] [DIP/MASK] [SPORT] [DPORT] [PROTO] [ALLOW/DENY] +``` + +其中分别为源地址/源码、目的地址/源码、源端口、目的端口、协议类型、条目策略。 + +需要注意,**XDP只对收包路径上的数据有效,因此此处的源地址/端口为另一端,而目的地址/端口为本机**。 + +**当某段字段为0时,代表不进行此处的过滤,为全部匹配**。如需要匹配所有的ICMP报文,则为 + +``` +0.0.0.0/0 0.0.0.0/0 0 0 ICMP DENY +``` + +若要实现黑名单,根据匹配的优先级顺序,则需要在规则的最后⼀条写上(也可不加),默认为ALLOW,当匹配不到其余规则时会默认进行PASS策略(但仍建议增添) + +```c +0.0.0.0/0 0.0.0.0/0 0 0 0 ALLOW +``` + +若要实现白名单,需要将最后⼀条规则写为(必须增添,否则没有实际效果) + +``` +0.0.0.0/0 0.0.0.0/0 0 0 0 DENY +``` + +如需禁止源IP为 172.17.0.0/24 ,目的IP为任意 0.0.0.0/0 ,源端⼝号为任意 0 ,⽬的端⼝号为 80 的 TCP 协议 + +``` +172.17.0.2/32 0.0.0.0/0 0 80 TCP DENY +``` + +对于掩码,本功能用以过滤同一IP组的报文,如 + +``` +192.168.239.0/24 192.168.239.132/32 0 0 ICMP DENY +``` + +此处的192.168.239.0/24表示掩码为24位,及仅留取前24位的IP用以匹配,同样的,**收到的实际报文也会按照此掩码屏蔽掉相应字节**, 所以此句将会屏蔽192.168.239.*地址发来的ICMP报文,所以此处192.168.239.0/24 中的0并无实际意义,其可以写为任意实际ip,但需注意掩码位数,尤其掩码不为8的整数倍时,但是本功能**建议屏蔽掉的相应字节归零**,便于阅读,如192.168.239.194/26应写为192.168.239.192/26,此处的192为194屏蔽掉后后6位的实际值。 + +最终给出示例,我们在配置文件中写入,用以配置规则,其实现类似黑名单的功能,及禁止所有目的地地址为本机的ICMP及TCP报文 + +```c +0.0.0.0/0 192.168.239.132/32 0 0 ICMP DENY +0.0.0.0/0 192.168.239.132/32 80 0 TCP DENY +0.0.0.0/0 0.0.0.0/0 0 0 0 ALLOW //此条目可省略 +``` + +之后加载到程序中 + +```bash +sudo ./xdp_loader -d ens33 -S --progname=xdp_entry_ipv4 -i conf.d/black_ipv4.conf -t +``` + +可以发现已经drop了所有报文 + +![image-20240726110021447](./pic/ip_filter3.png) + + +### 输出分析 + +本功能将输出所有匹配到的报文,此为无其余输出,由于用户态程序只用于激活,不作为循环监听的载体,故在内核态进行输出,当XDP程序挂载到相应网卡并且与相应条目匹配后输出。 + +需要使用相关命令查看 + +``` +sudo cat /sys/kernel/debug/tracing/trace_pipe +``` + +![image-20240726153912838](./pic/ip_filter4.png) + +其中可以看到符合匹配的相关报文信息,其中包括四元组、协议类型、XDP策略行为以及匹配条目的序号。 \ No newline at end of file diff --git a/eBPF_Supermarket/Network_Subsystem/net_manager/document/net_manager.md b/eBPF_Supermarket/Network_Subsystem/net_manager/document/net_manager.md new file mode 100644 index 000000000..b6ff8fd10 --- /dev/null +++ b/eBPF_Supermarket/Network_Subsystem/net_manager/document/net_manager.md @@ -0,0 +1,209 @@ +## netmanager + +netmanager是一款基于 eBPF 技术的高效网络管理工具,核心技术是 eBPF 的 XDP模块。eBPF 是一种强大的内核技术,允许在不修改内核源代码的情况下执行自定义代码,而 XDP 则是 eBPF 的一个子集,专门用于高速数据包处理。NetManager 利用 XDP 的高速数据包处理能力,实现了过滤、转发、统计信息和会话保持等主要功能。这款工具通过在网络数据包进入内核堆栈之前处理它们,显著提升了数据包处理的性能和效率。在高流量环境下,NetManager 能够保持卓越的性能和低延迟,帮助用户优化网络管理,提升系统效率。 + +## 框架 + +目前netmanager的整体框架为 + +![image-20240711091259144](./pic/net_manager1.png) + + + +netmanager 的整体框架从主程序入口(main)开始,首先进行启动程序并解析命令行参数(parse_cmdline_args)。解析得到的参数会被解译,并用于挂载相应的处理函数。接下来,程序会根据参数进行进一步操作,如加载对应的配置文件,初始化处理程序,包括加载IPv4、MAC地址和路由器的处理函数(load_handler_ipv4, load_handler_mac, load_handler_router)。 + +在用户态与内核态的交互中,用户态通过map与内核态进行数据交换。内核态的默认处理入口包括多个XDP处理函数,如xdp_entry_state、xdp_entry_ipv4、xdp_entry_router和xdp_entry_mac,这些函数分别负责不同类型数据包的解析和处理。xdp_entry_state负责筛选TCP报文,并根据新的报文标志位修改连接状态;xdp_entry_ipv4处理逐层解析报文,并匹配相应的IPv4过滤规则;xdp_entry_router则解析报文并进行标准匹配,通过bpf_fib_lookup实现路由转发;xdp_entry_mac则负责MAC报文的解析和过滤。 + +最终,所有的处理结果都会通过xdp_stats_record_action进行统计和记录,处理后的报文和字节数也会被记录下来。这一系列操作确保了NetManager能够高效地执行过滤、转发、统计信息和会话保持等主要功能,为用户提供了强大的网络管理能力。 + +## 功能 + +netmanager目前实现了过滤、转发、统计信息和会话保持四大功能 + +**xdp_entry_state** + +通过解析进入网络设备的数据包,跟踪和记录 IPv4 连接的状态变化,特别是 TCP 连接的状态。 + +1. **数据包解析**: + - 通过 `parse_ethhdr` 函数解析以太网头部,检查是否为 IPv4 数据包。 + - 如果是 IPv4 数据包,则继续解析 IP 头部,获取源地址(saddr)、目的地址(daddr)和协议(proto)。 +2. **TCP 连接处理**: + - 如果协议是 TCP,解析 TCP 头部,获取源端口(sport)和目的端口(dport)。 + - 创建或查找一个包含源地址、目的地址、源端口、目的端口和协议的连接键(conn_k)。 + - 在 `conn_ipv4_map` 哈希表中查找该连接键对应的连接值(p_conn_v)。如果找不到,交换源和目的地址端口后再次查找。 + - 如果依然找不到,并且是 TCP SYN 包(表示新连接请求),则创建一个新的连接项并插入到哈希表中,同时记录日志。 + - 如果找到现有连接项,处理 TCP 标志位以更新连接状态(如 SYN_SENT, SYN_RECV, ESTABLISHED, FIN_WAIT1, CLOSE 等)。 + - 根据不同的连接状态,更新哈希表或删除连接项,并记录日志。 +3. **UDP 连接处理**: + - 如果协议是 UDP,解析 UDP 头部,获取源端口和目的端口。 + - 打印除 SSH(端口 22)协议以外的所有连接信息(在调试模式下)。 +4. **日志记录**: + - 对新创建的连接项和状态变化的连接项记录日志,便于后续分析和调试。 +5. **状态记录**: + - 使用 `xdp_stats_record_action` 函数记录操作状态。 + +**xdp_entry_mac** + +其功能是根据源 MAC 地址查找映射表,决定是否放行数据包。如果源 MAC 地址在映射表中存在,则根据映射表中的值设置相应的操作(例如,放行、丢弃或重定向);如果不存在,则默认放行数据包。 + +**xdp_entry_router** + +功能是根据数据包的目标地址进行查找和转发处理,支持 IPv4 和 IPv6 两种协议。通过查找转发表和最长前缀匹配表,决定如何处理数据包(例如,放行、丢弃或重定向)。 + +​ 其核心功能是对路由进行匹配:解析 IP 头部,获取源地址 `ip4_saddr`。检查 IP 头部的 TTL创建并初始化路由表项 `nitem`,将源地址赋值给 `nitem.saddr`。调用 `match_rules` 函数进行精确查找转发表。 + +​ 如果找到匹配项,进行数据包的转发处理:减少 IP 头部的 TTL。更新以太网头部的目的地址和源地址。用 `bpf_redirect_map` 函数进行数据包重定向。 + +如果精确查找未找到匹配项,执行最长前缀匹配查找:初始化 `bpf_fib_lookup` 结构体 `ifib`,设置相关字段(如 IP 头部信息、接口索引等)。调用 bpf_fib_lookup函数进行查找,检查返回值并根据结果进行处理: + +- `BPF_FIB_LKUP_RET_SUCCESS`:查找成功,减少 IP 头部的 TTL,更新以太网头部的目的地址和源地址,调用 `bpf_redirect` 函数进行数据包重定向。 +- `BPF_FIB_LKUP_RET_BLACKHOLE`、`BPF_FIB_LKUP_RET_UNREACHABLE`、`BPF_FIB_LKUP_RET_PROHIBIT`:目标地址不可达,丢弃数据包。 +- 其他返回值:默认放行数据包。 + +**xdp_entry_ipv4** + +其功能是解析 IPv4 数据包的头部信息,记录连接信息,并根据预定义的规则对数据包进行处理。代码支持对 TCP 和 UDP 数据包的解析和处理,通过匹配规则函数 `match_rules_ipv4` 来决定数据包的最终处理方式。 + +## 代码运行实例 + +目前功能的具体使用操作如下, + +```c +黑白名单:加载到本地链路 ens33 上 + sudo ./xdp_loader -d ens33 --progname=xdp_entry_state -S +会话保持: + sudo ./xdp_loader -d ens33 -S --progname=xdp_entry_ipv4 -i conf.d/black_ipv4.conf + +``` + +**以会话保持为例** + +![image-20240711110643737](./pic/net_manager2.png) + +可以借助xdp-loader工具进行操作 + +![image-20240711110713174](./pic/net_manager3.png) + +可以看到我们的程序被挂载到相应的端口上 + +![image-20240711110826395](./pic/net_manager4.png) + +可以看到其能抓到本机网络通信的各个报文,并获取其中的基本信息和连接状态。 + +#### 黑白名单 + +在 ./conf.d ⽬录里有样例规则⽂件 black_ipv4.conf 别代表黑白名单。程序会按顺序逐行加载进BPF Map,同样,XDP程序执行时也会逐⾏匹配规则,所以写在前面的规则具有更高的优先级。每行规则的格式为: + +``` +[SIP/MASK] [DIP/MASK] [SPORT] [DPORT] [PROTO] [ALLOW/DENY] +``` + +若要实现⿊名单,根据匹配的优先级顺序,则需要在规则的最后⼀条写上 + +```c +0.0.0.0/0 0.0.0.0/0 0 0 0 ALLOW +``` + +同理,若要实现⽩名单,需要将最后⼀条规则写为 + +``` +0.0.0.0/0 0.0.0.0/0 0 0 0 DENY +``` + +如需禁⽌源IP为 172.17.0.0/24 ,⽬的IP为任意 0.0.0.0/0 ,源端⼝号为任意 0 ,⽬的端⼝号为 80 的 TCP 协议 + +``` +172.17.0.2/32 0.0.0.0/0 0 80 TCP DENY +``` + +如需禁⽌任意来源的PING请求,可以写为: + +``` +0.0.0.0/0 0.0.0.0/0 0 0 ICMP DENY +``` + +我们在配置文件中写入,用以配置规则 + +```c +192.168.239.132/24 0.0.0.0/0 0 0 ICMP DENY +192.168.239.132/24 0.0.0.0/0 0 80 TCP DENY +0.0.0.0/0 0.0.0.0/0 0 0 0 ALLOW +``` + +之后加载到程序中 + +```bash +sudo ./xdp_loader -d ens33 -S --progname=xdp_entry_ipv4 -i conf.d/black_ipv4.conf -t +``` + +之后加载到程序中 + +```bash +sudo ./xdp_loader -d ens33 -S --progname=xdp_entry_ipv4 -i conf.d/black_ipv4.conf -t +``` + +统计信息如下 + +![image-20240715202110387](./pic/net_manager5.png) + +可以发现已经drop了所有icmp报文 + +卸载命令 + +```bash +sudo xdp-loader unload ens33 --all +``` + +## ## 代码分析 + +现阶段的目录结构如下 + +```c +. +├── bpf_use_errno_test.o +├── common +│ ├── ... +├── config.mk +├── configure +├── lib +│ ├── ... +├── Makefile +├── net_manager +│ ├── common_kern_user.h +│ ├── conf.d +│ │ ├── black_ipv4.conf +│ │ ├── mac_load.conf +│ │ └── router_load.conf +│ ├── Makefile +│ ├── xdp_loader +│ ├── xdp_loader.c +│ ├── xdp_prog_kern.c +│ ├── xdp_prog_kern.ll +│ └── xdp_prog_kern.o +├── README.md +//以下为子项目 +├── router +│ ├── ... +├── testenv +│ ├── ... +├── xacl_ip +│ ├── ... +├── xacl_mac +│ ├── ... +``` + +### Makefile结构 + +![image-20240711102520620](./pic/net_manager6.png) + +为递归make,尝试修改,较为困难 + +### ./net_manager/xdp_loader.c + +主用户态代码 + +![image-20240711105855149](./pic/net_manager7.png) + +### ./net_manager/xdp_prog_kern.c + +![image-20240711110039806](./pic/net_manager8.png) \ No newline at end of file diff --git a/eBPF_Supermarket/Network_Subsystem/net_manager/document/pic/ip_filter1.png b/eBPF_Supermarket/Network_Subsystem/net_manager/document/pic/ip_filter1.png new file mode 100644 index 0000000000000000000000000000000000000000..5cccd9127580fa65cdd817383f68772f8cc6606b GIT binary patch literal 35238 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

Mowd+9f|o3hR@CJhCczhVO zG4DR%s}JM96JialoxdC7S;3QIplS?n;yHE68bz2eb z_2CueJPmw)5DB@suB?l%xo*AJ6XIw@%no|ibrfPR&*rO>Wi3F}LM&f|ZabQMXd4Y| zYZxjSrQC%0_^@NIi2#A$$J-l0**Trf_?uX}1m810#meNa=^!e^zi~0exen0J8@&iJ zG%_lLAge{=N~kFlHzaAU;udzMrXf9e)q^YpWyd>tFuU@gB_^D+0JM~#o)*;e_xdyq z9c^mrS&0SzvtbU-r*$d6{TqI_H>j<9b=6HH#&x*ed+@Rhz-tzFhBV}IP$!3&P(a_l zdk}HrApie+qx|1F1Myw)@N!;#wecpRcp`~ETm4SNe>G6ziLwHe0?JF9B6SLY>J~n;j%y2AZZ{g+L=fU zAmN&nrwoEfLB;L4XNjLIobmsCPKY0|p~@FTRBlGR%MzKQc#!ua<}w%)QLF{{0_K=! zitNN!{QmtN z-jj-2B&4@UvLJDF&vf`=K=STFZph9FRa+-O%V96T%})@$)m}q2`mHC6#qQ+p__zQe>ylH(75q&2nD5ul5+GiKe_nxX&euonc8kP1zzFPzLFV0%w ze5!$C?Wi@Uh3xM_K3Dv$n-Dvl+5%IZb)u1ocbmq2Jp zNG&rp8JPc$kOW`lJ%)?)`BR9>lgESiP2I(hf0451jn)4hjKbNO{vGVN6XN|la21Mp zylUWs$fS@T|E}ki7yXDg$eej9;MO0np)8Q5Yo(^ogR4U_(fKV3Ev#9Ot@R?0e$j1Q z;KHEeAPI%OcIR`{z4xNwvfH@ybmhDsw_|2tYu3VBOkrSKhkSFR4mRW z1~nf1K~WOit&E#GK-_&u4kHGG1N_z_@E&UK-KcWK?EGwc!y+dG^gJRgb?y-hdf~?F z5zLvFXVXoe{O-V-bA|KzvPsKV3sFr=4Y3PdP1R@}UhXhAL;tliJQ7R&<6pHxSvR|1 z#3HR}=~2pZ5AHNz0?Xd!6V!T%i`La08uRfejfU+eK#L?vyAKAkb)sHY;MRWP*3ky+ zT>EcTSB|}Pn1S%>A%(x1nd!(5P_ zxKI*2JFm<1%p~#|#K9A)xr>9~`Nm3ZAzANu(|U)rvpwqhr3`!+rzG_Lwv#;7V=Sve z)UP&?=Va;BXGuSE2{F-oKl9rsur(Opu)`dtw;DKi{u}o=!1Hu$^#XxA_S@&`qlCO5 zZ*Ds2lBe5bV$*4WZ_+tgm14^B8H}tVs_1L{q<~tUeS{%dBW#7ex#{Hc16i=flp1ND zQ>;{eg1ca2DgT-$Qf{abd=g~`fTJ36mVyXCbaSZD>S?@nMB z7*Q@dLxaAzIe1!ww1P(Z9(T6UQKWa>;huA~Phx*PF%`T9g726I^*8$fbn(UQre47-@q%-$ZL0PF2IoWen z1M^bhLM)!|$%56C1!Qp*xzwiA{+LvyM0p5Oeco!5Mi$~rKilH!fQK`?ReTmA97&9>mvj8uQsz9*WzsinPjrm5da5 zCFmhanb>;2vy9*_YbXSgXkO)KvMKC+@+B@`BA-R5ZA+NS`JvedE<5sjvWHEZ-}Xu? zk&#(UaDvUb@h&1vm%mk3=Rs%Tx_NeqSd}N_zI3pZ_iJ#TRd;zDAZgc)Ttjl@P zJO8ll7B0G@9r?9imN;}a5i7%iD7yW<>s$$6h9Buoc)-l{Uup8fLqD&nyy&*8`Pn+Y z{4HVc3*gQVUe2Y`F1I@l7tZrmGWk2s-^GwU9QEJzTC$+YkHGS@>Mg&7K+wL~n$m*(5I*sqtGxIJIHkAwF6!_Gr0z^wR_x|I_`cL*e_aJd{ufeg@aYd`UQ4%1wLC-{9!)_Ib5aC;?oK^OZs*bG;6k zi`N;74)zU|V#?;PTVXNu_@BHEZ#U70Y)48r0`9KN`JkC%P6y%9Y|WkYS`+Y1!_)i7 zp{eQw*xc z5A|RixY(Ie+JH&C4u+#4)cdv z`ia_GcwHo zes>-dm_iV%`DbDs=YQ_Rsba)hoq`s=!*;5sD`!|l9DiNkCfK92U+Am(xH(TU6cG!@d`Syu^Fm>VaQeB2zL>$e?Zbx( zn2Cp}j&wkSn~t~PR^;4SM9;2$t4)zfbY+YGW5NOh>u(pXrQcy%z^rE@d`GX9e9<)? zBIX=8dW&go#&EO!P_1hfw>S0 zIbpl46eP>~2;~uyN6}hD#8pVAvR3c?&h&AZzZjuD3t}_0bNiYm^?Pg4PD$u4H5{_! zdG|1X{E$u&!oW;Sol70yID+OA0@?AS$W&}4ze%EfP$t58JvJ#{?-_#Ccn=pi%CGEr1%FY} z;6+UIr~K}!@R{NO8vWV93K=D}mh3}PP;_f+o%?Ibi%qn@#^29R%DV}{!L{x0H&sJ( z$2vc**Jj3YbJ)&3J%^()C8_65>I?L}x~t7x%a2VjqxqB1-Eq!KW#-HY)-~@})6q(o zc=}KafpCY${g&$w3yvk7ux~G48SrMxsyj}lWMK1hh=XZMsh-*a8<>G6Q>qhXv{rMj^y-z+dtR35@ z%%R1XH_{MI|C1jW(+~4oS`dhV@9{TnyQ#Kgh5?gB7Tbri1sQ3{pBh_Dz2dM;CPZv8sqfeQ#E~`EEbx zIfj|)yRCG-oVL*-dwlUm>20nh0$%hMPtu?{bAhfy20fwR;gjS^H?otr^nLp(;Y*zh zl4g>V%Dzm&i?B$p%F84kJ;QTW7`XKXZ{%pGOI7ptMZVG$kFnX1L$Ny(DnTa%qL1}@ zDFh-Xy+7}@?PrBZ4AG1dcAIRJkEZoLT-r7;PHF(=mdAL_^7XZ0w6L27?Q|C(io5qB z)lna{hna!v{r83A$Ve_tJK^0H!)2%MR)~eAo>j{VeaE|m`J@qHpBHcu&yA>%00GmU zUYKhZvF%E8zv48^$p7%pg&+cGt0TY*AA2)AAxnRGPsF37p*W_flGw{+wFL`1vhD7~ z_OI&~5Qw^C`D`fZkYC2|^2E?yTUUT~mtZv{sglrZuQWzTOa}BuPx;+nKe_Ry*}*om zs|88W@@(yZfDD$(6r)QNZEhYls7mZ%7muV_+JG`wHFW1!N>ao=>1Ee%|GuXb(b$os zcUy_NrnU{dguUauR*lm0GdFW%cOU}#;VOG&+s64_f{RRvv%Ztl$(pm%k#=b=i)Ghc zVJTJw!lX$8(LN~1KPY-x!nT6LUL4n4RhUtZqj2NYWs-HBhjk6q z`u#NcZk}1cm9Yr<{wFM7)+VQ%IgHW*?s6Yd3;FFODBLcnt#hy4CH*ae8dbC_PQ{Km zM>Jc2fY9*WsnpVyCj*DA<`g#-C{(V%B037K0ZP~v@`m*lTOUQhK1aj`Jq6yT2kVGI zokh%gvg10vsDR7Xy&7bvelvV2ptn6GAX!&sM0SlYY^y2GOeoH7Nd6m#`bHRo)HW@zcJ6_r{ zTeGRvmu~pus_NeViUg-CH?J=``q-0r5>KKQ~GNs0oj^wnu;0UE4zI_2JbX_BmRA`}j-f| zD_6GzT$#-Jq(WDz1>5BY`YE(OT(9=Md@x0?f0hCGbPDL+wu@-j`;$6WFNzwMtCOlL zhjiJ$c7_&qn^gt(*QZ4k(x9Tj9J$1r1_rSl50q%sl;+_mGWni7!*>h2>xO8sU1WP9S*1m_5&tdg}kj?CEGnrT>>ITYmk)#D8@HcneC zTLR;faBRB1oSZDx*x+CM1HHr`k25N&5ApG;4J;x(0xx8qFy-kS9WZj4fpJYh+T6d{ zW7F5J*#$vwN~8{Vw2Ktuh$ygw77QX*B+y8tsHYZth4_5s1YLt`S(HOsyYBr^5V#rQ zpqq!doqFV=Hnq39%`5d1^H|vLlA9ft@pBVSm8@NK5)%vs+Qwl%Tm(zaTg`_{h`kZW z@Vwqkb>x}{+pXE?2T{kxQi~1~mIsZS!)WsRov??amh{<(Wp9petlgm=) z(v$10FApY)l-EO+s${S ze?ISbJ^PJ{jXg=1;S+yedJ7as>1pEx#0HMWD#F;Ot&>G1DF*i{@npzw%Jl8uJ}9-y!hg*{X>G$Kwy5iYH#XPS)Bi4byWq}CW!tqR*9(nuO)7%sSe?%fKUtv>w z%lh0z^e3?&Sr)#`Dn#4t&R4`u6~aDJ641zsa!sB^GGQvSt?N^8y6=5rApKxr21=*} zsn5_FSGzkL8Pqj3&{30v8QQBG0y4`GWrLOE=kEBPI(_-hfm}9C=*z+(8XTs{)}Eil z=!%NiXS9XR6=XZdYI+n&WJlOnjl7;`c0Gb)bjKa~A@{rspgx%QxuUPN9kyL%oyi~( zr6m(Q>|$$kym*Pi+u;g}b9jvnJ!Qon8(iPU`IFTSqe_7w{19~=V(%#~H|Q-Jo68Fm z1AJdXTa6d1!o`?B73ml@AFqEI@aY)o8BU@96}mGTp2_!OU&Q%4#9hp5wxZ!GN(lYI z>GRGBN)_>A!e6!Z_dI?1#nfty%0dTSDMcQ%eD{aX|EyPqDmSo)!rt3gf9-PRB&ZL2 ztoDZW;bP9Ua2|`oVhP2$s{zPE4ZgeO>lRt98${=Wf2~0v%f78o_s#{>POg1ehn|7M zhPnbov-l{|OSDwpw$pc59g3jPa3#wGo{)|s5LIgPK_v)YS}&6GvjiAU1jD2ufj3V~ zBd>44hGqIw{MS>JaG%q~K?($^Ni&|Q1vC%%Hfr2N}vDaxEcgz;0iM-@6hTEQ( zi|uy*9sT%#Pn0^j5ng5agi`xAtA{U8u|=-a*a8aqbi~rc2-JY8KRtQ%GWV|A;jYnpYt=<-Fgu2CTI~E( zk125a^S)M zW0YOrOi#hXkaSXNzhE4&#V)8(ur+>R$b=mV^}jRdKs9}5AE;Sh51r`(YZGR+jl4J< zx*IYi;H7vwcRSvkW>_n#mk33?M0lM;n>(;Cpg)dA47AV3PNV1&hQI^kg$?N5(=7Z! zJEQGtq7N5Z9ZdH-Kgy=l#j)C2zF7Eewr>v18%*U|Obm>yRJFFe{dD=KX&Wk`6_D%x zEbu%co9Sx8;}58QAGgDYYIdLXOLI*S2-(}HClG6iO0h9!cnqo`-=Oh6|Ks z`D&~1a3)~zeuYo;9NS&T@N#X?heFhQ9q!eqrkjB^#ow}b9oZ0aIGnuL`eRp-p0cg= zB4|3PZNHEf-^_ZqMeSQD=fvPPw<4P{%`F^(#O~sl)i)7l(7VXhi zo>r>~V9onXCp(j|-M#bh2Vc!gKO#4Ngdk1r0guva6=SH$_hf4)8|e}=crgfcYAS4< zu-v%UZNnt{GKR)njw@A}QVh0aTRt|vfC*dwW*cw~P)>j_{4@#Y+jw19UUX0R2XnGnl zdmc{?RVWDxI9%xN77U?8wO$>VZv#tXbXBvDc=}RI&yZLeU--^wa_?Y%fQhbI(H%c}RUHc;p@`vr$-|F_Fu);+j z0&kRRMD*keD-2&}+&9?K*ieNh@y*31vPa}-N_9-(f3 z4cTFHH;D!V~1o$2BP}s;|OxanmiLTpn*#rbL!P2=*K-6ce=-ap|XXyglxY$F& z-Km9H?KU^&^z=$Jxxu~o3Lot+(dKz`!dT&5)(Qguk>%)~pzPL0%F*Tyr z`B_T{^JPiiI%D6HgK6^Q&OL%o_p2K*jh*mX$jlU$v&&m|EQ`&N4u+S zG(jJSuMWJg&CVlZLMMj%k2ei=9t#zfL`@*upXRq*3vdn1SG9X#>#9>^oe?YR)@tR6 z34`>`T{eMh*03>|1}1lrz+&?VxVh}MS$nN&`W+JOe}@`(1b#$RM^h$r_iow$A*;e? zf3t}xtL=8*bR>yB+bp@!f4pP$a-hEBVJM)%_6vBS1$f50pq31&rF+@S1lF2xQ&S>; zaCnfvSZI6vM<29+ef3u#n-UED5CQs)tC#JT5AckB6p7{lk^5SVzUAwH4{SJ(Q>^|K z;`|H)Gn%K3(ZnMF3|=-W%KOZb0`VXjX+JxpU=eoi&LLs-9?k5nWw|;2bFOKcELTnd zOLvi);7d}hsr7|7d-M!=T;@mieH@sW$e)R~=hK-BK2_8R$2opG!cR2A`CNZ9=kf8W<~d@eeI@=*N#~h_CnG}$fb(?Jt{5-)7xB)>3b8zgzfaf{1MgI z*Y(QwPphe0Sm!85Tpccw_w?n`ZxZvHZk*6sg#>WFw`l56*pSw*-y}4MDOURD4n-|$5L z^^4Vt2-9!dUjt?I{BJ0HKiD;+4}Y(8y+AL`k4Zj<%l1xC#Ux%Z@&D5d@NXK#o$=Ho zFP|T#cE-K_!+@!xLoq6|kHIBdXt#kON(rLU3|L5cvxyte2Pv*L2&G#CnY{@~W#d?Z zusRY_)^sxz16G;6o#10{Oe9SgXO|~Ia>p#<24>Mp^Rcs5^yE))4BsWaIO9NG*G=bP z{mzY}!$x18?BCO=ET{a?i7IO3PkY%5Irl||5S#?xr2O^=16 zz9hD#A7{*b9SZpc`mt}L%Hi2Oxyy9ktlhB6DQ1C1SXy4U;-<0L)LEO!S2|4rP|VUg z4?v|+Ss=zQA4&Q;EhTK9S}2n*Yd|s(ZAh5IgF&6is~9J8^l#?Kw@M?o*`*ey#CiE# z`+uid+f3J)7>!%U{rjC(c+%T3a>V`_>zLK1n0r>*dbyHEb}Zq)mesi-3?|YaChse) zTMnKc=@`xaCW(S!y^PtjI0SuDP@gE@l>mubqUd06m}PQ@%JX!@PH;y!>SFwBRoE*M z?dMRM2b*}J*Z2!zr6aCb?STP^Zu@(CLc%xdFzX^su&TN51dn;&o(o{O)(*p_ZBqw6 zlEhfW7prS=72v3F%bl9~eiwN7*T+;t~EQke~w%LI?R`r^?< zjD8LIXN70BRpHTqIB&CV*NNHV&sDoIYR%5q{f57C#S-G=UQ~2cFv6Y@$ILK;m=?F= z!6WtMMZ^xbWLTARkfNTJ5*~9AhwsS{HPBt4YRdnp1&}!s^$_F2w=y3|Rno);ROrhY z{t9)G2liA8jPaSrTWb^nn3BhnoZwU!IVl~m4!w!iK$}ZvHgi}Pz3@mNJ?NyBu2bd& z7Z_b9SNNQsV|YE)4xCZieC14$#_G%4v?v`+?D)fT+V4(>zq?9ulw!%@cuS7wzdgOQ zMJHtAEQJP>x+nraur@LeNiA6+;Ed6JZz|jdfB^qEt^ZZ@*#8-~YJ|C7#CgPP`^=%?I}vOv zvpVbZC|$reB(?rG$>QAV>Gx!im(;(3S);q-N_r2R8Lh1~pi)U>bcnAII~}vr+;>%v z1A%^bKoQ!-QXmM$Ac|y#lXSu^Celgd*wJ}qJAS%B^g(OmXtQWk8m5+<_Vx6IX zF4U;jnEd-sQV1zA!D2pECo1PJuzOv@X~cIY8EaJ%tF6)V4?}OABiexVLaN3Z)9*ci zBFJMNSEiWhfd)2+P93LFG^$FjDsW@!f%+S33rQ*i-ZCarkBf5^OG0yz0>ZZRvW$?| zA zs?mZdr~hWpg?^wp67lu-kt?n(bcB&H5rdqW~vSNZmC3!^?s zTu6YBT?=lPI?mqvHx^%B<@ncjTc1#G65RgF{Q)er&lJ4gjl4xGvifdJBhYhhTrcSN zd7;&0jysU0ZgrP9p#)h%GSGAO^s7Z3dm*F5YAI}RKwv_H=iQXA4jTYC$mAiYFAe_a z;ri3De6S#VB+LyYdZ)z4oXcikKpV@s={j@gdDyw-)}!9kAL#m>;w$cNljPJ{Ie5(< z_2?U%d+y>$?=h>>!}>HsA-hK0F7DNUx2ZpB3B_iOzum`#6`5zM#ioC4mKg1!vr>N# z_gB^hoc)T%-;Wyi&`E>@p<4Gwmh<8iD)kscOyP`(6o>7LnYA1}b=1WLZ@BTyEg{%c z=tdaBrdyL60#-QFk&_a7)r2c<$$!{m(-Y6Xqeug*F-A^^qftsTkS6^6nQn&&#Ie*; zS8Xp>(610Kb!ys9z&%ecH64no!pQ`Vt%*Nx6Cd08MJ||Pyz`8hZF}%qz*3Q2SA9N+ z*>oHW{7DJ*KTQ__`91!;Vk?yfMWh$(PH1`` zQ%lEY*;DEHne%;ydo&s_yJZHZ!CVB7DOCNY@J=eP!K>13q#uGx6vMqefa#_|QN-S& z{DDS7WuNJ9!u327odhA}b$A5+r2A@rYGp-I4P%C1M$0bBL?Le}o2%{etFX=)xZ~Wb zmKJf}hQZc=^M3ErUARHqMt0xjpT<}bA-q@iS20Wpf?Oq7*>z9b=4ZUAv{wYkcL94~ z4vbwU3S!CRt@|Y#<<)7L#*G6`qw3S3%R6;uB~g@%B2?f?EG@)g+vaSrv&S%PappnF zn|ta^MET*kJ|(;$cDMvNgFpH=s>JtA-wI^S*tGWD;KkfIW;30Ms&isVlTZDgbMf+| zTJ`}J?jn|2fAgy_5Gv{}BGw%1F#)$6bH+b1PzC88(LvSS9yZ%{YWsEE7!sk_lhtpx ze;QSxf_U~1F{Km)t4mLJUH=geq*2*q@#l|W{eP&G{9g>> zf8wSYBgFs#VcP0I7bmvLdfcZ+Y?E--3d(YHS5`etsZ)1!>?q;)qAomaHar zmplcTV{;e~Ki+G-2?TMGHQm3dvyfC`l|6`g!lpH$kP`ozzU~nw({V+h899%s9ZXz> zg4A`ED}(wb3S}N^EI{hYc!9s{=GJ|%DdX^Db&S~+k3}G_IBYGxwZvcAG;=F2?_w=u zt^*$BIH^mBaF1uM>L2Qye^d`5txBf2MpH{Q2-Jb7FIxZcrLt7iUMriXC4>Qml(Iql zG%=80<)(OT1Ty9#3E;nlV#ld@4i$jB1nA}^+~0{Io6eku(C;{Cwt4J78H)8)Lp6&W zHq$Sd->Ca!C`=4WCA@D=ruxu3N64QCbo9#KlVT$%kfrRh27Bz#2wT7QJH^sjC?0g(qB&19-vAJ0kO*Qk8@G36N3 z)Bd^^58r;uNM%M^bMi7X!sMNN)$1Jo7-Nu6kj!T%OkCT%%a9zbON06`6z=V(>t*Ik z#r4mnSm_VD^d1?a)k*|_z26TVSNK7J9swUkQOrTUuO#>aDYwR*F#GR*7tji9-%)6L`tFR9R#Sa?ZQ&BM$r#JK>ba^bC%rT2*rH;|_tiI2{phRIW zh@@(Dk0r+kCi<{AZ$vxV3=$S!2BXgs-C?Dr&(zJrJ0&A#>riuS{{X0 zmt$E?wWUCKI(iN(C;p`(-)I#bHXae`5q&lQ#lQt_3P~kxAkp&VZ_nOlm$U)>^Sm;ocN;kscin`=<3ZETF~uRgu8o=XLfn=~9S4;7I>Yp~l$z^y&W%EVauiket!tp!j+?RJ2mYs3Ow0&&;LWT~ z`flQnc}bcOoTjrz(^r8!S)yOAKe&U}($8`bG^@{58 z6i^rcA6AUCILr}f1^(jR_TGVFPoMo>Ni<0GROkBlSEasxY5_ZjhUM!!I8(pa#I8~5 zuA%e;tW*i*Kc^N+xda8}e9+Ej!-dFX+2;*=@&4%=K#_GO#767o{Y`Vds}4%uvAJCl z8QW{@&8!^QryW=B#|V%n!fyWL%O{NuHMue1G`2G5ef{G#|4ae$2)o7#9Ztz6o}x3+ zTO-h2=@S||@aJ=Buo-W*=F_L zM%w|y7sIfrW91;Eb;&{mA+txI{U~Evy&6+W@HNPSCyg~sncNvgf7CDgnb1>=A%%05 z#d$Q+GZ(+V@&rlHI9Ce!*cD!^r7RFieZw#$^EBCLcnXyr|6aQBT1rz{pu`MX&{AFm zREwqpEF+(oY~r}uo3Xe2K1M;M!AF-Y)nW|>P*aa3#b(!Iml$Iyq zZlA;~b;H>JsVxRt+1~u~r3QW;uQr}J#s)}dOEw1|f2Wl(rRy1zs~r83)@$&9FyQ9c z$|51Dy*d3|h-F2C&?Wl?`CgI{_NnjK5o!XNwejGh`pxOU0At={dMr0mc@HEx-s~h> zuaL0dJ{)u#Rmu@t!XRIJNeBa=pvfg5UvHz)>+3|!8EL48<&|3(iqLU#ICJpQGJ7I@ z9zLePi$8y(l`syEMrZ0PL56Ke(GGdBl=%$<3(xgK`tejs4St+aO9?ku!$F{KnRC5_ zk026{eaMh}xnXwME-$ZsR`6o~L3T?&nCV3f-DDB(h6@`zv0Hv~?IpZ=@-^9?h(%|8 zWFh`yw=%fyW~ZK)>WOGAo_f#9=Hz|SGr58z$;9)P!5FK*2cPjVaBv%((Y+#n|0Yo^ z{ZT1B0BO``!j@z%>Yi=B)n(%#d0%GEVH2pM@}YOz8G|bcWxMd~B{@=d9I!7$dU}bc z#R#$UbvDoTkho$0;Ba^MksoT@1c2cqUF~xZ(jh1}-rm<9(X~3uHt$L}J|y!71Fw|A zEoN+#hZD7IRfe}ztV1frpd<<54^QpMBWF5{>wXfF@4IX`!5Ih5bthGB>cl!Lw>!G$ zC^cgP;rZ}w!%7$Cvx^@#C7%*L!gvbUF}=?*x`!qWBnaAC58~RpjQavgjn6O+Dt%k$ zEcUbqO8n}sojy7xfZZ=H_=#zmwN|o7w4R}=XvWPQ$vRuL6ZmY_a+7-t2cjVDygjr< zzW&@h;0(XsvPt1PX*i{bny)5BKRwxUN)9{Hv*j+NSCzDh&KWMrI2vsuP#epM=GbyLTGX7 zED8lBXyw$I6fYSs=-gz29xX&^H_*-p@ zCu+Ui>l7%~`;B+I-J9?xmqp5+J@%(YmEK+985VG30|6lscpI%w>r9sVE6y;9A$)xB zfG=&9^h5czylE<(?12M&Y&OZS34xU9{CpG0u>83j7wO({&D=wvn|m6|sF<*3Hv+3$ zz?_aKJ6b$p*d=$8{6iht)Fc@=Eo0|vHS9Y#BjAoLY_!ioUSl}FO%+Zhn?-}+1ty7T z0kfVaGJSE=@mmCAoXJRMjzLNj&Q_l%74f*5K2u_uhVS>6>E{`qJ~aBkzLO$QU7_`s znQCmM24Z0H=SXDTlW$A|O}xpnuf(0b?BpztkdQLgZeHa&f`8$178;2dim!1$1m)M| z(qZhBiQo{)vPWuw^%KuHgO<+5c074fKV!@jNj(x&gd{A7VZBHsx|$R`DEOwXdFH+9 z>I~KbBaAk8=No9=om{%H)(zgj{y}^*Cp8LYVQM_-D=DtQkQ(|r<~6NkOm1OH4Q}`g zmE4{J>2C~-1*$1)*f8C!24w0Fy%DA9G$k*q6!(5hcIj2+J^98uP{a$#_|-YQ+03Yi zN{(do)XR_=a%?I{ZJF_QAk1uoXj__yPiwWk>;N!~VtWS!xR{B<)>@`Vy{?yULK!9{ z|I`BZhrA%<_2tCGQSP>uVi3Uhrj)U2E&EKN}&^-N#7@uzps z+p#=qZRHC84Nq4bKy^sc(tC(L2IZQ*R#xU&!}X1$OMAT-IkZ`c_&*he!RMK=|@0kuOQ3P=r-IA{l%8CY}kP&cft^MA)2E z*28_(JEclP_2wZNGD~iR;BB)dfhS?M5CPi2Y4EW~?CP7+B0|9EBUmxdu z77+;GxwJ}h&WQ97q{Eh~!)yMi-~)0(hYn~^#`B4+yOz;CO|Ye;VrknEVS{Sxx&DM)zT4TX!N+>;6XoPYQPFI;`G=oyA!eU+wBcCL1GjIcc#9pMHY5ZwT4HCQW*HSJJ1^ZMbyWs zi29|)&A?d0 zR=*Qf!S%uafFZck;LeWKW(RIRXZq}9v@CygmEhU&tKM9sYX73jL-29K zqt&yvD&SiGQRWF11qeW)NR!5e$WY#+qcIV`L+UgOu|=Nv2&@{@69xZxe}Y*5qf9>a za4h`b_;?5^a^2J*4z)_%RSMyZ{NVw;UK~i+EA_Grvvsfs(-`PAPrg{uHu9l5!=l!= zzuY|W%?h=h&=$DDH`G3GduyK1Bg*nfIbye*j0oy11Pus+UCd#5sEt#KE*eaEPSyt% zYjWl^PdY)wLA&;k_I!uO_>qwz82oV1Z+IsXCDv;N|Conv5zU$`(t@Z&uv8P-YS0z3 z9M;aOyO43rOiut0U1X(8y39HER*$Mj1=ugJyAlL@cr=Io0+*V962LzuRusHgnVSZ3 zc)Gj;KJtxFr17`1NPOpJ<|05kE(#dcE!gVe4@Xx;8LlM^*;IbaxTb{rWg4a(F2Gi) z_{Cw!eh|M44`XBl&EUP<8~DO5KOzpX8FdNbE7LnzjgOK37B>JUF1 zmXEQs8P)q7x3awG4N#iXqlCg)(K7+;u4s35WZB@s@qy#E9)FWjuXTq$;x-1iZL|=T z#Dd8e)dn2D?9TQ5LEp`nl&7L;KS&X-+E9D4`ekbhc>e=tdcyJ_mE+Km1;!3p%HRN5 zppnoqtp1?-s??sk=s!i~nPL-PSx)mCuF(y$%Kk5Vxxw9H17mtm`kTUeQ%KBnB;4`} zz`1w}NCZxduJ4Mz=8Bu-x*xsU;Gvp!YU_SvUg;j_+7y3vwKmZK6Bse+Q)|Iq7Sw<1 zGn_!J9jd?h%dZ1jvprM&6_sMGOX-1KR8VQq-u8K*C67#e1Jd56(&XGV?OG> zQ;so$nzrR^=8?!~mK=w4hlzP*M7#4LuW6YQbZ=ie zZZna11%gpyAUrINesN>5eM`TeWRuPLHaUTQC+mzU$Ns3X;~e|Zo3&PJ;C!Zf_J;5E zK)*0iPmYqL4gioIcfk~(>j7DycqrrDqh4X5D6h2j(TnGQY=?Q}NbM}X8G8k)tnIW@ zcWN+JTzg@n89PW4maF$<&OCflW`V1Y=Z}Gv(pH6dVafCw*aW)FW-6abNqb+ZGzVR#&Y!jwOi zo_>BgbyD2vba^V^L<9gd#<>oOQJu-k{7DX4TAf*43CSDosD7s&11@TX_S2pQ*rK^@ zd)%VKC`$5nHz^-WuNF!ROC^?78_P7EZh2ycnDsEp$|EM_SRn>X3!J+32x14f$ujh5 zV7CPB6N29i{VoYX1~H_}s=tN2={NiHgEbpJ}J0!Ia%g|KEKV-8elpaKd=Eq(W98saPicy^C)CP^a$HX!r# zbLiv=7vx(6(FT7ikO9Ni`7y8>Q$SQ-S+?WkGRK_&)usd_;mwo+-cYzf8R7Y3%n2!S zab{$s4Fz$j*~&@={xWz7?&-6606ZF1xdP4}o$by?`6gCPpF%1G((6jRsF7hkQ7#pa zjmPQ`k4$ND7uA1~?19sv5mh8vnkX4REi5lZl*M`gDw}g>?}$Ow^^?HD;-GpLQ(ndaFKu#?$x=*3Roo$ecX&8`u5XYTrlzVhdgGywTKutIOF z5eW%h@$q{BFzHKT4d^I=095jetu6My<%)A7T&Ccf&{E?dGG|J0*6^lNqVS=ajwGM~ z2sFisVai~0k~6E`KMj~Uxz=t3<)Oo-6p`=Qcgu@qpIz@oD8o_o$eIA#HIIqD+1ok6 zQb>?BDrid&zlQkzVjU~ssP69Iwhm(e6mksvRST}pgc5_Y&{;W#`#1mQePHe#@k6p< zlb)DVRywAF?J<5DH1u(?>NGs?hjl%`v{46Zee-!$3}&TvcujO5owIe`PZXMJBc%TK zt1_RrF_5;NTY0Hx7xDKLKa9F%4hRyi$8^Vy1Bzq2vjuZ6t|VC?l5MYmSaV@=(s}&( zJjKTm*)Udq;)K&8k76tCOvZWw73W*j>(JwTygqO1w?8gzQovj1oM11TfawKjKelKW zvlo;FbPAX~Ib3ao5 zP^1##d63R8O>EktPNzVO9tmao@DH>|3QypEqb29u8*ihlfx_3sm`}yN{li`mA|;3^V-_c_?+n`ty$AOe&$MuIa?=OjpXoNm0uS zFkBrRtFy4dWmw96H)y(RpZ>Vn51nIvxrVxyYnx97R4t!tHArG;>6S`Y-nYCU^`t*p zWQNV<1lU(onN1tlU7&lmRdohH_o8yoy`HrVWWOV6J1BTE?3r=MTzvBd^8_bUs=c`_ ziqbvkthJ7xIqW}KjtkO196rg;$iLhy+qR$1_8;h6s()Z_th)QF+K^K>k|_g^M|O?D zws0M&=Sbp*sqz3O+rGDw^9BZoPNOPGR9xbhDi56|QFXR76p?Axv#_unbuY(%+-jb54fTpfg_)ZwwYzb{`l$FpcYe?xIYE9ip58_A+WXfZ4XN@Ua67GCd z{B#yO_6*i-dlzSY-E*%vGV2pBPE$u|e)zJ2DGyj((AB=)ZV zS~%=*--}Nzhd|MP)sh_FGH+K9fx1#E4qq9bx>9bV!t`z@lZPuVAfmmWkDOlYMe2N{ zZFCkx|3SL%zo|TN#hSdcdQ}wKW@Zm2w_zCxk;Tp2_JV#j2Mn$3070a|&o zfnxPmtd*+ds=eo|}cfSvT^*qYvP z0=lQQJ=3z5@|4>8tk9Pzwg31>=4u3guX}V9W!|X|oE#kB?~SW^&!83t{nu)0pNIjX zd4HoYt0E38e+gDods)f3bjC*P?~a8xBY86pB8%!CNnA8KP?scAzuZr)nHHB4Cm-u$ z);TcAtwx7T&<=cpQEEzQ-qVjNz@X_c4Q8D*x#U}?$PonL3;cXpmW=ZBkWD&<7am7#^jjQm@ z{+FdV;zw!Dg%7!wud&r->6va4CjT_%u88y@nYl$31hRkY=rd*e z+uZm0C>Bf)J`tfa+q;(wE#`9RtIFVewHUO1;6+FzO}ux~jjevu@H*JCXBIa<)^!jL zcdRuFVDn4!^Yh9Lt)-ToE3KNC>-nLUr)wAVh)VH^JT4V(OZv0_(I#`tz?jO4exnuc zN&nhsJJCJyO-+UGePE2xnX^63#Hh|NzR(04)8M0@y}Fv!?1r3 z&Wum3u^)q{`8CCS%r9fL75JFy0@H~Q$^778KDQI z;NCxldUzmlUHto0T1|cOje@vW^(Qb6p=NTCF{DQ(XiTFwtBY;Sc?V@gOIJCso(!aj zWqN)F$ZBCkf3jk6@{I_7i%HDx)Q1+2TvpNrO?OJUsa1#V9n5 zR_6T)Vy$fl#hyFtxZhICXp#1DAZy{r*{uV!2eswL@^m%LwD_$FVNw@nI;zo6I%lqR zO2Z8o5pQb`Xr~H5RjXhk6lzq%9R`vu83yc!H9X$tMQ0B|6M-tVo^>!TA$>wI;ZGDw6_P!k28Nc<67;%=gnE(8@||h0t|Q2D$?S8x zce$bQk~`BbS2xdYEi`)mGtqXv-q^$@m8ds4)YxMsV0!AD zv7OSGW-H)59yZKnz%TG6cW&*lO<6dfLm#hO$bP9pYFW7))Sj2(Gk5&Ml)dFd38MBM zfHyP@yPhmdc#*3LB?=v3*@rV@U52k|?sHI@E;{;qV&W%McE5zt$j}Fi=;ii{-Z!=j z?>VVdO*LHN%%)8DAbWxSpFS3cOD;$3(==v_gpGwplLI-O$M@s5JZ(9>q)%|mD=7bg z!32Q_n`k&E4O z4YJQrNgz&&2&aq~ta^z8S)^VsKfFFtnss$QXnsl3k`iabxp+=J)y@%>zbW>`|CDvu z{;sv%NN(J36h)C)62-GgO~h2?-H=v?0dA0%VesZ;~%%r z4+M6(Zn&7PMx3C@PA})tw`30hA~}LxZUndlRZPfJy*bWesgWn54dK05;DJ=B1=xy= zgL&Zi!bmC4$m&g%xR@^z)4A?pu04q;OmbyHFumEXAFiSzXKiUR-68F>10nGM*MZL=pA2ceIOd-tQGDve_4W|kgF+iz~G=0ZpFNz9Wg0a1!D(z olrK`p7v}c)fAv2+P2Rem$ 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 z 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 E0lwh92><{9 literal 0 HcmV?d00001 diff --git a/eBPF_Supermarket/Network_Subsystem/net_manager/document/pic/ip_filter4.png b/eBPF_Supermarket/Network_Subsystem/net_manager/document/pic/ip_filter4.png new file mode 100644 index 0000000000000000000000000000000000000000..1dea447790e903044d9e89649d877aec0545ab1c GIT binary patch literal 10860 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 literal 0 HcmV?d00001 diff --git a/eBPF_Supermarket/Network_Subsystem/net_manager/document/pic/net_manager1.png b/eBPF_Supermarket/Network_Subsystem/net_manager/document/pic/net_manager1.png new file mode 100644 index 0000000000000000000000000000000000000000..0051b629586362ebf8945294eeb26c85aa43b912 GIT binary patch literal 57847 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 KefMdm|NIZ}6EODx literal 0 HcmV?d00001 diff --git a/eBPF_Supermarket/Network_Subsystem/net_manager/document/pic/net_manager2.png b/eBPF_Supermarket/Network_Subsystem/net_manager/document/pic/net_manager2.png new file mode 100644 index 0000000000000000000000000000000000000000..eed5d0fc1908eb6e8b89d97f540a9d4f138bcdb3 GIT binary patch literal 28249 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 B;?w{D literal 0 HcmV?d00001 diff --git a/eBPF_Supermarket/Network_Subsystem/net_manager/document/pic/net_manager3.png b/eBPF_Supermarket/Network_Subsystem/net_manager/document/pic/net_manager3.png new file mode 100644 index 0000000000000000000000000000000000000000..2655c5f4e09707aaf27af8967dd8d85a6ccbe825 GIT binary patch literal 19157 zcmdSBWmJ^W|1XLnqDYFAfJm2gx5CgRE!{2Mt$;KrodXh*14s-x1H#ZL-QC?Cb07Tu z&$;WIv(`Q5#l0`?^MbV(&pfmDp4t2R{ls@q_(vsaER5F}C@3gcvN9l56qF}#fp*Wc z$H3p4H~H--C~r|@K_ApTGxp{JV6*CAvHRNhzbKeKj#oe*o8Pu9Y7zf|TTjV+)7WuM zkZMj44gM?V@fZGc*7(;+ECt1zH0i_K+uud+s%{%f`UtHgv~-fwmz6>v2bxpUvi>sF zC%=8K(_-sWAa7gi8{x6!e=kE9-$!G~>B4oPWjKib9Ubnnz6x`3j_Z~kke%n@HRORmAv zYYyF>BATpq>HIBRa?&nc-{*3)HH>==D+K=x%49ZVgc z8&FN(olleUv1yBZP*Re%zDVk0#`)~!BM0fFIh(G!6S6+PqR?^b0kPO#f-ODvbu(s; z6;6ug4uw!>(24Zm)+eN3bm-kz={V%?gO+TMbKIdrp$J;#axOzI`OtI6ydQVXB$2m;Z z`pTBgmjm`QZ-_36lUc=l==REmZ=k`u@ZgQq!!9 zVtOsrRBS$yXh5Azb`XZrkr04xIy1c@R@Jz~b=94&nW+ierDjuVP8RYhrPPRl?`I94 zOxRyHLLKPKbPMN?zp@0J7+IjQz%Gun-ibwrS#{=Si6YmC*8BaAi{$68ha$g^RMhUl zdiIt26y6znU5k(!_%DUu^(y-c4_7AjUp=h-Baz0?)p5-ytIqgt>;lH)w}ifb+Z{3JT}jqO7GN6^ z7RJh?chxmKb-F3iX^H*Acc>-N5&+9;*XG}P3uy?a zMKPMQ#V*N)x+&_;qjIMVZ&%i%3+9!@U^X2=IJ-A{eW|up^dg=!B{PEw;-qmU#Z=djW1cEG33F8xsptTziG1sa4Hj z_#!O+HMPL)#?l?gb@sVsUyc+#`2L%6VtEmn|NWU5p5ISKfhaJy0>~l#W)HtJm14J^ z*S4Uv*=g=ru9R!#E*{?VVdt!~pHvx+JoIp=zrEI;(e&T(xT2H;BV#*VPNv4>o2P~M zW^OXVHaaa0(&3B4I8C7ye>$MEjc(fR7h*URXLGuQh5_R~fmGE=7M4Z3nKfqQcw;`^ z*b5de>ru?^Z@drb*C_n114CM8SauF;$Nk(k;ktaRf`iZ>dl#kYT9wpS{c7pW$ipV| z3w*qOF_-a+N+Lb}ow?kiXcY1qET7T~WInQEua+Acy&w#|y4hKn{5(fM*(e4Bw*R`F z_eMthNffhk?Md_buH;0Mrl9@!3mi6KzPDPvdjxtXEz$i$)rq9jx0%)>l~aUvqMsv= zw>>?KB#AR3!)hF6T~9j166amfVpD{CX99no<@|`oa+|a!Pf}n0MF8UdG;|dVTGDO~ z;Tb45(O%-rH(N#9IVnz3>~%tP#qKyvTvpW~A75R+d^{ET68ue<;!u^tA^H@9p#L$Ywk|d|Jg4F@b5#JTzbHe|Xi|26Z@~oxVo(djW=>Hbt&_Rj=887f}GI*WZw` zHM8%uwW{^5A52i(J?d}RkMDKA?OnKCEA6BR*eMY6+o`?CxRuQjL7$JPd)L8~A#$+u zBD|;kcJ|6l%L_r6^Nm86EdOcE-BNht1Y7+^DIC;Tdu!a?p6>pwo1k@{2zxI6YJ)VB zcq}8~ON2@CncRG<_CPDRdi{T&g&!PA~Fg3_sL65{+A^e2R`m8=a_qj zmwQ?izVTL`mp40Lr}G;^gPWOj=7U|z>63Lw|FbHOyKxu3=6VRCdD>US-sAr4`Z6A^ zo@Hi-C=7?K*?X>z93VCJb*32a$#so#Y7w%D6+> zV&0)}xFqOw|6(w259iKvNo*4Sf@-?P<)C#pzw_MPfV4$wgm<&$w%KrGl=r^QYen3$ zFR{122q!Phz}sfxe42hnK7awwZ>hK2CCH_M!?wxI^aVfv=!`HH&W0A!2-idF6A2o?&r>`=lb-|yueHBLD@E=4?1Zh+-0XpH1}3ZH7bYxG*ER~Ye&gXxk8 zSXnx4>m$mhFdy)YLXj1{EKP0Z5gGomWH|lUn-PsMGmitRx_4AmJP7kHIi|3Nj5lMu zHkyYTEV^<6P?{sA{;mJ>8Bx-keLf_x;LRe-|kqUU(de9+u>Pyb0Apc7`N}hZ%S- zO@d51cI^|)E7lo=kW=xA%DVT7&2PPZ_U4*vn$J(PYH(R@Falm{o5tG0`)%G*G=1+9UhT`tylYBL-`5p{9UZe| z2}W#!g);q9^~bMoF6?r1n{G-6u>fc>01Yri@-}b1a(L4qfDF9h+gf)hPp>hXJ2JdF z>%R%N7}(bTd-XfRrM&6$&hnO}LazP|&YUl@Sy{JopIPU9G|!R#TG9@*xq7Ee+a;9G z;Qpq>0#~KT1nG^gd7vE$kpz12y^QtpX#Q?>smunKViXEqHCM-<|#{x%b|q zx)Hbj7<^z@ZRWYMhNy)lhcR%}Y8GCITN_oS`Y$bOpM*CxTQ@c~FMQCZ&vbo-NB)M+ zdv9v+opz_lAtzoc-H_7=8`=CgGJZ*<3{5oS?Q79nu;N+AxV;^FRKDF`g{+#2oiT(@ z7^@6eZQN>l1L4ZaAJST>iqLXpNPGjHU!5w1Uw%{v%ByRjY zg0GH4WNboC^kf|De&^t4rHm*MQk5FgRxJ7`)k}?g$vWFpKZ|RNpT33((5=3pDkAx% zH)f_y^kM+~OiCNH+9Z>uhgSwMf-IVf&l5b!T9z%Zj{3NxHTOcH?1v|O)&EcOC-z;Q z=;uyUBcIO>%VTPYs4ubI2&IytDM3e@K{==6wBMLD2Rz6P%C0Wy3zQdJsPMor&wC%G z8IidrZfVd-vWQ0A1|k*N^*MXhEplJin-gzn9~DGDkgKJcyp_{RP&;C3X&#fQcw?|B zrTzH@^0+};*Z=qVgizVl}|yIC>I`zr#)xsQL_d&gV*%D(!CS2HXF<>7!TR z-L2vM{(etV=K}Un$+J)ul@I27mxvdj>d!4b$~qc+Tos<$t#{vc?ynDsvZO$+Ikwg; zSF6*=wilscn`qW2MZ@dYe0+OzcNg3v4kRE@Xcls7Ig4yw0>qusj3jFIyBqv&cs0~t zTdE5y6+JdXj_WT_6^of?g;IIdoXB%MK3xVCK2GlB@#2;_ayH z>1mTlSx}_1c4&)A^bhKLBlA!atQcQIM&oR*|X5+zaLpZrU;_X z1i2>-K?~oKA7G2(ak_wG`6HM@o4xmP4NLtvg`8Bo&P=$04AXUnQH;niUM<$)Who(1 z!V)lINR9VYQgU$?%GF~M42Sz0mfFxAG0tmPDaaf-cSBSw-Do7c6)cBAIkDwz!oT0W zI1r2sd+rq1ucNJ#B-r;fzz3mJ5)``9L)hUj>@7e~)@_?y)PP}_&-H-D#Wx!G5TB$#- z_I>01ApJh_Fb;XzXgDMH*PFvtj}WhacM}gqw0_=y=gR`$#XX;G)To2|y)_Q__g3~G z_+opcx2dYOdTXJ;?%IPYO+;)x$~It^KGbTuZ-)pxE&Ed;6bB0*PsQ&`ld^Vz|BMIx z{NsqJstrENQ-ji%Q{!eu)UkL}~$q z|5tk+QEh)ML>C6Wie5y^v-hRjar8e&_r1D%xC@ zN?D4beRqwS3*MIwY?&^L^gfw)d!(U?X<)&x44YoY`%`cCMy2?Ns8&2xeDZI@`?y>}vt**VYn(yn}>if%u1J)QrYxfrDF^rIQQTcV-}pQou&Xd#lVvrnqVUy7+r;geLa7{i=prUg)i^WL1KYx?5*Ig*f{6-E z8jzz?*b&bW@}uWgZaK8gHL_lL8m~>+DTvP3oR6fUS}xrD+OQXLKL{am@H};+%Bh{F zqe}Dddq=g!Rh!8M#KOUVdmNuFHqoo@ExhEh;pOivd9@SscRM|U%(~Vc6XjQ*Hjn4= z9r--2D`cqz4+9TqBJ@Mg@rPoh*_yINd0lm{#4cXyJ0Gk)AOL>XcI9#*URO-Jw83|_ z`{7k#o9JRU=lJCmbX3!ZUM6=4{qPldVm2g8)wzR|Ia(JEqNAS90L4-eJ2;u3kY?KxHWLekR8=a8E{W%e_;`p^ zxm%hg&+gvQG|y0p3TqbqY+5yW9j)@L;7RxO1^1R9pl z4*67%eljZfbX?>KJg>3iN*x;a#zslz0V^9Yy+%_>HopLU`%-yJXdGiPi_PUZLi5rm zNGUsrN}(ExH9a(bZh|gmVeFcY(?kmZya^z4^tAfo4xH1dg|$4l27_A6CwSln3wUT*>t^L&zq#d0J5wXR< zAXlX!%UK-(=GxkNH&qAy{*g(3FwrT5caK{1X{s(QRm0{=vk%RjjZ{0NO*n^hu4;AO zCu1>rAith|AP3cl;&Q48=N3YVxYgzg!?wGeZoo3M)k$$69>^`6hDK|T-!?bh#i4VN z&R@60p$B}tQSgroa~of>q9*b~|Ppa6C3{=-}?^I}}GD(rkZp?w9Oqxno<)Vnx2hNZ(fg zXTw5TA0AZJ$(CnBav;sX9&oe-vra1^woT?A3 z(fZhL*rjKQQJYBWI-4^+wzdDKhv#k%BoTDN>N9%pGp$l|RlooUI-5}g7v}$2g=x!R zs+{B3+VmU?>yrc{)$Zz4IRei!)o*G`&+90K7-?0d3?#(&v?a(Eu8r<9#;P9~B z4<sX8F<3fM7fWupP6P{F0^-TIzm=Ai2Kj1Vn&jI2{zip;#gM274myb=`NjutL+W3~#%^^g0x*x7VEkSH0gS=q1_Ug@ z!@DP9qf-ZJKc+^)!X8qI?{?7IZR?3eHN(zbWYX=nuFL)TYOc;HDFjXQ_hu`Jij-|S zbaCII|7zw^W&B6xh=mezCUVeIpm}rF10N53vF7DLACm@5KHt3jy2LsEh%WnpDOA7w zFRQ-5L<71xLG{*h4Mh)(!DGO~ayYYR|Kwn1O0bpWr1_#$TMJgs$fH-4TEAHBpj3jK zQqi`|OnUn||00VoG;G;2(-j+U=yU|ah*jTPYv3!s%}-@x^LdGTRO+YFjFj*FbHl>Y zq1}~0>J0Z$q5*K#S(D^hR)#VN6t4C-i)=1~*~rIj5?ct!Et5Hd!&Cczy3T&B z%`AYv35nOxB1?wS8E^$EuVYqdYBnS=g_K~)twTa}$4VwoUKQ1F)FjhtC3yP$;@`mg z6tzfFPmJ}`oOs1F?`Ga}d-}rnK!l>ZRFkdSHpAhJ=rBS8490Nv|jr;gvs2 zels>YJdlvnwal?dQEq!Yvah;VQQy*=&Q4iy_83zScByi#rS*UCZ%s2Jw<9SqZ`^-M z6(WWvj1>!|!H*Rr4_=dykR1HS%`%F3=BvQ+9~-Ojf3mSqP+~uz|HlWT3c`N+??s@e z|J@JU5g~rSS?A4OMOJWbgC+jsrXal~el@1`Z=W=J^UdLzZ^xTEWsYB|G52|s!djhd z;AX|iN{ZTPM5Mn(GuyR|!_lad)%geDAk8n(!%5=$Ptc(sv+7Bf70@Ua!cE_nM(%Gb zqxprxXZRL#8MNFEo%u$-tw!r6+%DhH#k zYbBB1zwZr|?@FR*Zq|+^?m14+&gw^eZO<(RtV`54F8tl z5PTIVV~BjQaPzL+V1*qZ&$HYlB;wQA<@flrGsXbw36E5L|4(4 z6Gj8JEsYI{c#tgBO?1;L;C1fd@E?N_f7U8$JLV^@l3@U{|L#^o`m1Te{^LMM$A2!NRK zEFJq{eFQH~v=rLVsR+;8ycN~e?k;RAxIB-$rO}eHXyz?85{|5DASOu!jR#}pJfU#J zn9;s_vgSM{HO3vjEXws(A^s_|;8C~$C5BD00X$DPK&Rk5t?@hlikkXx@md^H2<*|@ z(}=uY@{ES6Rx86!ZKakTx+;;Kz=W#)4H#{80)*h^MV5vQ~h*@!s4H3n$S3dM&_6J%j%?=fUF-Lr-@^# z*o|pO+MQucOck4UH1p|0VC&|mUiJt7a?(%cq2n;UQF2TJPD})Y9E@v>QsL#1>QJGr zAmggqXu>a-h_lV?FN}n5j_U4kHcr7Skdup#v>eVAHV9Kd1ybn?54I^72w6(y!2A8D z*kD-SLsFHB2U9uX`Bh!9&Pr}rD|SF76@#2`5ee(e^}T8@yWoiZzb*UM&YwJLV4c`A z`K_#Q(Vb{5Ik7BcZA}uYp8xEc*u35QwA4+tn7wI>B;E|%L>glJd!LuvCKXs=6`mPg zp9@JwXd*hTl>%|N#Bz!N;aw?D@Gc`tZj@V?QEO*J+e5xJ^0`;;+c?(R-QsW0b4`~J z50m|3f6^Qj`%)Ii-#s4q;Kus$y}HfZoXS9gjRIHbkub1CAFTHeF7J0$+3!vNh4xB6YDQ{~wsHiDCL zYp*65?UdVnM(bc^I#QKj z0;E1xmA`rR@YWb!dX=P=Z4uP-nUV0YLOl#ji4$vbx2TTs5C7H#`_qT&1@hhQo%QLyL^$@*J`=>Rp09Mk zp#=j2W6|*#D4U`{XjbSVeT)~|>cl-S+*GlB(;Fp&Sc|f15DTb(HXdc9=N`#6e{d zX)~MTgv{&KBz@DJAycfwv=L|OFGuYA3TrmpXqmC7O`iF2{EE{=$oakIQ=Tu2SzidH zc|&*uDs?l|T~DdU28>De$cU-WhSp%i8pt)wzM^nE{TnhFYNh+9d51;KYylqSl?T9 z74J|^5b0@%Sm1HCTFK~)t>~b2Frh<%2`>Ek+ZCfB;s;!)5+6!o)^K2+13hW5QV*-2 z<(6YHvDsgnn!aX}mw0PNe>y6k=4iE75fauNEPkOiyjmE&o@;eNAB{fD@jS@smH8fs zeTW@L222*Fmqs+VO!fuO3|(xhbbNqMyo2(Wq}|U{R8T=KrE1yEBi{&m_%LVac=>VM zsvf<}gIAEJv15q)BE*k`lCCXWp-S!{yM-9P0#O-o+Uzo8%#;4vXD`;#9QP{v)GSD~ zYO`{q`;B9b(OP?h_CkXsE6q}edS_oS$`_>8^^C+AQ`2=>O-WUbhEvf4@4kd=HYe;M z{3p;1pLv$!z7TQav{K$Ggvic%qcaPt#F_X;$l1!}r#RDd^8OkxkNb28591HFHC=vY zAIjoEm7*Xhi0fAQJ|xD!QfOpZnu+1EB|^#9WWY-9>6eC@P#L%U|0eaqctrzYK5hf- zt?#O~t{BcI!+}@AR((2aG>Fv_SY4oQ>%VfAiqd#(n~GE03OpxXnutdv%a4cUb430i z>BxAZY~v^D1OTLE-FH920(BFF)#0 zbH|Ca$11JsH8NR)IRq4Lm$qW1h$B10)u#lmUcHbCW0`k~-2M|g>kWQ02aGAVkxmrN z2B9((t{i;^Rg)6h{Y)Qtw3Jyp9wY1YmsEZ{XrTuqx!ZAjRIn8#3eMpjp&nRE=PK2~ zy_ZeXzfSY`U{dN$2Od3Ln`~_snpu$zEqM8;LIi^g@%LH-5UHYrwsnlE3%lGj$5-v( z8Y48KOIhQ^lJ%Xt^%M+zUbeZ~8ok9>6MCIba>?Cm@LN1(!}EG=r~7$6V0%Yp?J7lG zOZU76>*Ib8E3ig&RURdeO2MU9m5-J<{$>z6s=(VoIeg^lr{IVfQ8E!Xpc%WfQC1vk zc-4W&KpV%}t3+Vqypj+ejw^*;kQqftP!DW@;?m>_#<>DTtQF>b1-sFC0pdB_*uRr| zjyUnlV=dg3+n2lbs z8WET3{)SP@Cr6Ld@>N)GU5CPVdvyg)%P=xaoY{?ECX|^2btddlpqeB(n0nttmE`LV z^)+i0?^3i^C*o0Y0=X$&`E#c99V^>()R-UQbtrr(Tfvy6sZk;YHI2ga@6+;uVT31&A~t(xrCxT!xF+nL5b?1 z@r>ttPYM9RzNKOdsf$zkFGV>2?qKg5{Ye-(WQ{vI5YL5}=@uwM2tD@_{C`KHoH= zaR~t;Amx!MDfXAhRwt~2upX-c>t4B)><3Vw+iMqNZ&n;~3KgN0T1l5xO!`B~mN6#%bua9CR;Lv+QrSTvIMWRu& zapye{y8u&U_KAB+HNfn~c=&s?0_iywvx18)Ube4rWaT}z3F-YoVEkcpt$JBeK3P@L z7DQ;+sN4Ff{K3dsr3nYo5bBjIHoq^nnNlqlZHm;=FW9ol7gOQJph~@)x(8J-96@J< z$c^n@NdbC;eDBfpWp$2^y|lK|csF~LxE^+5BqQBwY4q1f>W85YyQ7;%147lRo=Jxz z9x=SK)rmyo9r3;8EeECKuMp;eThb77aSeoZ8xZMZtS?tSbo1c7X%WGfDgaocTkKf9)`molIK@;Vy7G1!XQd{}30Sbl_s^fp& zy?OO=hhD&{jLc9yPyaqwR@n-mtOq?XL&aHYQ5<0Ej2ln%Y~D1Eef@}9^0;l;iAuwL zptfB+#a{`ihO>bqEuyPl`;dnY;H^$euD(S$;#9Yy>Tiqoc!MIX7qtNjx_*7=AZ zA-dC2@6p+yZTY66bF@8XMy5_tZ$W#Puc%?PkQ&ynghU`57;-YoF z=fULPv2ov}R^`*7E5a4ae)Oq!UsYAPZ+aa`Dr}yywy6L~`@l7DNNu?C%`zwpZV*+q z_ZCQP#UW6GJyuF#slzCCRjMs0Jsuxs?n`e;V9$czOR+kOuK6}VfI=zl__f?R+J{Ko ze;X>}HGp!8SrEsiPMOLT5&n5vL>-#|}4kcf1i{Ef81whMmT!m3b#Xe#0m@UOKa(xw}CJ9917=|KL4VLtz zl@R06dl}0Ins-(m7^^(J#!Kc~;w`)J%Xeg`4yd8#l$E5WIH5}*0F-q}gpTjSq%z2v z*tIMLnIct4ArTn!47+F+3f=6%I@Q*+1||9yhbSm&e>^c`<<@C3N8=XOn5AB#{8`O5 z7hocmQVL@#;<7cXayXBtRz)Bx*Xl}~c3SafA@MvEQwzi>NmiP*1dtBgyMEza_3 zRFz{2hYxH3vCVAy1?Iq5>Ohal=+ly%Kt2p=pwMpO;L0;#`cn%kio)|24*=%#vdoCF z!B)u_dNGo-17n$-NXC?0C^~!P_FSl_I4%vIWToJ%b5cLgf8CfGJ}>{>8?I45Ly4y{ zduDu=Yb2l^hujm7fLW` z0UNT&q{ZbdO}JzhX7E=WsL9DYpV*+ab>5TuYI_^s>I57WU>i-d<+N1XW(@pZ|dF_p9%DEP&yF5EO#ce?B{SiHXH3i)aF&E# ztd`fd;3Mq3^Bw{a&q#Ucp{yBA%PY;sjMu`x0>Pdz-Do;9gnOt8aP(rDJvmQ)2v0F& z>Up2ws~7E{0G;*i!KtGW?p5;E-!}7_nr0CjrXZR&*(5HYpj;@N0L(D9J`4amvk{0Y zr^VdY>KY>;j{vFKEFocm&TTE{uykS!MUa*GCvOcnDRhLqAKc{mN0nb<;iCL?ytLk=>2AXm-|S3A-XH*aRL&f=9bm(An&R#RAoWz%Oy-^su1+Az2Ad+=!?vq#3X|`jDBX@syHDSyN_>cNZ z=%rzCDngr8UnQ3KQ)xC-8^%6oR0vR(@TDHFR-PN|+zLE!)`4;6@>sW*r8K}2E}bAZ zwghqrwb@H%Scu;EUxwz+UmX8N{UE(AXAL{vYouFS!rykKx@r0Je_T1?3l|>DK4tB5 z5zB~uqBd2649)b4^RFsGRu~Qy5uN+*W8R#IAjgrD<(m+;bAJst4{cK!PponaQ zfg;_>$!0roow1*p07@q*He>wG=Hf^Rq}0PwHWvqBDezSpR7RVox>D`qP!{ryS2%L= zgvPuh{wJ!x{Up}Uph{vW9%qq(!N|Ey*Dv$>^>D3BdOdVB92E8|G!J%^hK<MF(P^)#X9wo zbYH_BlU;AEw$Gd|WBr#GDV#nr_6bTnz96x5;1|R4>27mTSx}xMnKb{%ldz~(r(y$`sXZgNHd9VSGCxE*V2^2bo$eEHGmB}7_=`o1Jc z;-7MTA)w>xTt=p@f~ooCKlrFy6fwX9`UnguHAMo{r-5C@Af+9Z#}38o*Hl^uP=2g= zbglgO17Dsp$g!+)&S;EZ5=@_{B_!e z?dBDYJiZa(`M9BPE+xs)gFzux^{mzzz~z7>)&l~WOO6-4N!0x>#x6Djz_YxXn-}vb zCI7cqdq$X>>^i6!_FRc5@Zk&4$^#U$x3aLbrAmHzFeXs?T6FCM(^Cx>7JI$|BxivE zk=5zzpYsj7Y>s4|0ulmU4X1?(`lxLZwbB!h=S+Ko2(1D{Sav`*9oK;w5qpJ{xpK6h=JC$Bioa`z}+h(GPgE&zfIqjb3e2zj_5JvCS84Lqbi9j@0TsX)L z%rHJUpg7@BlC*Y>j}{K3cYXsEUcltc0gUeq>E22M3QJ)5R+F(2C*`#H92b+YN@%JA zVu5Q|cs9WH0lmQI>$kdHYlKb6j`Anjm*u^c7HFFZEaOy1*z6y<2E-#@I_UF%ZZgr= zRDY?9qfs91U7nnfH*O4MHO4hxrlVr00gH2mEh?49Q24Ub#vs6AVXxe`#hC$pvAoxP zq5_f!z#>iVfc}Owd!ioT;EZ4iU`ZsCUN?YN1FEw%g+Bi{tY4?`9RXx}~FB`U9{TA+_)!;AD zY!f}@=>Hw+zpf!T@pof2;^V~~V6-OZU895(#NA8`iL9q6ALVI@mwg3}0i@_pTwT68 zc;lFJRzj1n!)E(C$EUnDWSQInm-CVk`e=v|0AFP_f0V6vO-W}&z@SjtXLD6`~lgKo(CL)kGkPsbQ9Jm^Z1Kw$)4=I z`1~`Mk9{OkRDj(zVk%`s*8W76>DSuJwK#72mU!799bSDofvTOtApA*I`E@|p9mop@ zA$WdO0|bF|_V*>|ZsEVYrS1k!ts&WokqnPGYu_JM>RQAiW2sdZfiHn#CI%OPMLgr! zq1TQR-=zT%rHgY~{EY9i)(GPB@`nXi*8<+3Di8IW&KGODF|NU#3L9U=ugrjmJ(96& zFH$Buh@q8!Puktm;#X~5k9cad`ttZGuu1K6Vd{XDGI|I;em!ML*KojuUy=g|Q_pkj zd2<$e#wrzbx@sxS7IE%0oriAs=3jZ+f8OK2&+eh|P& z22O=pA|B#{N^K_9FUO46-Kd0=-uarefJgIR!0$N$xDXL(sIT6bVe@TnNxXIT!eJ#g zEqDF)RP!v3^?V&cVC!}O(70|#o4PNgnMT$kziFc?AkozEcihSoegZzN?^EV2tj6mh zZcQZk$5MJrocHuU>jMiduAu~1GC0_|({@wBT8%vsyMj>K;yGG|-ves;C9^re#Gua* zh|yviOsVF??s@{v1R14X5?Z3$6w$}t$Y5OMXt9=NkGO=8 z8O@_VtAH3M(d*n_nLF$`W4=@#9UktVV701OPF|A-1D!(;o|S4;?(7O zwM%AJPuf4%#+;0Q;Xdfs_*ODkjP`|EVaA0WQk0FAfhq^UgK_-Qp~e(X$Pw|tAH(d4 z6PP$H{vms(lbP~vQZO;COGshwz~O9y%)rXq^biy;25W7c3Ik0$*JG6G6kHr{rWagV z5ff{!I&?^qLYCBgOAE)3#DM-JUU1WIy{iYFcp7Yc5D|?!Hyd>`Y~o;JNv9tQeO5axbzvlO~);iDaB!Ej8*(}>ElkgUzANfE2*5nlvQC=pu{jrY&5ao1A+c$iy= z_1m*HdG2j#w1qO7Cf9xijlQ5WuU)tI&1q((k4HibHg;4lmT9QDx_XzMNeeqn!_o~W z&C~+InftIS6>NmhrHcQjB8+2h?utm`1mF;F2o4aUon=cf1i~xHw8Z@D(}e!b(<3@6 zD#`=XG5D&*&UIrC1X`&3TGq&M+^);E3VvdV0JNgNv7E|9y`qrvOwfqT7Nwv@-K?NKv;3 z8q#uopnCF!ngkn!!tT9k^e07Vi)}YR_?~U$HF{KbmR$vsV`J4R`k^GI0XrUM+(**< zQ(lyB{=*+n{_{`QSCQO4fpC^Lz-_9rb05H6io9WNIOJL(e-agnEdA*LfNJ)&CG4kB z_$x%}^GY`t-#y6K>E`(&SueT!vCfVyfG1N%|9kmg@M|iK2gf8TKV^vR5ei-KzhAIe zjXc=>v=sk8nkcD#E`XL)lTI(lzW*x5mS0j`s;cP0K!MQZCD@u@WeFsc4p-_F;3+)+ zkJ~JB>nZ(!|M7?O_KbietrJ58Q6ra7=h`$?kQG*@70HSG+pYJ3Mn4J68ba4A7(Ni0 z+ot2f3FLtzcTUfuBnugu754}D{{BbzbPHg-04L>`CI8{TsF0M$)sPE12_}N%2@v$q zYyej_c_JY^tS15z|LM>tSN*>b8(8y0oTutg7B~Tttv>nS(9FG>ZE?hUFW1{Z-z{R6 zXI&S@%;9)jHT+}u&F-p!(bQ|a6}d9-YjxL`YTegF@=URBrheHI69ICs6Q`^f<@$Ak za`+?5lRkH18p{i^9yuvmEefd0|KP=N^EMuh2f6NHw_v5i4fe^~<2i00gMHXE35B|! zyNFC!4JAnpfzjkb7Bf!OjPK@juh0eD^+$jf_;;gx*a&)HV(> zO*G#;4cX26+VqCLdt*=owO{_>1tWZmEG13vci23LMU*O`3FPBq!W^eqyM@16R?X~e z4+yJuJAmg)Wg*3W-{!Cpuf`7VG!*+gnT+$Y6=UkAjfH-FYE+ldF-2IEX-ULc5@8uE zcKv<-e{H^YSo+d8I>1#7%GSU|6kopr*GaTS8-8E3Cq6BA$^rwo2>033*xCQbn9e(s zx3!di=Q3chUJ(0lEfH1!;OJdb;ONVw;?A44F-xEWQHJVHeg)5Up+in5uG?S#75bfN zvbIW`{!V>;&`ivdw=tG-Yb>T~i}tPlB2}sQ!pX#kDYf;n(W(dop8ICv!a*TfJ06|M zXx9Zc=>;dwc%>7is{4A6NX6^J&L%w71m zeV`o%8dzJI{t~`oq4>VVE0*lVEbRv^ZW#cJm6*JbJMMb{i|fP=t7n&ho+&wMxNm+~ ziBR?5x?SjVImy5yPAWV(Y`g=FGnL}9EIQY`Sn@j4?^}(jokxm(yZ?@Re`Xu=C@sor zQlHGWH3zshTFS3;-ugo-z`@=~V0mY^MPFuZday+%%{nJ?(WJo6jw?NrKE1zq z1u_A&dTU@@(N;?{yN7)Sew!luFKkcTd@b9rNqy^*P}bESCVB07?&w#?t)jGO)1k=h zH)}$Rr*V9n8z!x)(Q{xi@8<^xPKXAbGZ2bAx9gGMy4}D@DTakV$_;io>xc;d&72wh zhU-E(@gfip8Fi`4QYDxYue^1Jd-HB-Xh>0XC+jM~}Irt_bHGy6}bY`S0brfjOH zpK6?zm&)>|J(G-?#G`=C0Za7)y{HYWa4~4bHv2v3&+>V$Qu> zF)8r)3mvXqD!@seZ=Y-bTn5gIu6*+6WJWvBJn{G=EphLiWPpf#~*)PDRr%C>+Y5h5(kYBCCKDTu(KmgB`r;z)HU(WBv2rw0oNIW>(svBlTw9o z5r

c^-8!dn>p6q1D>eyxH4?Dp$@}u4bqhzoI~LrEkcTCMqj!y*8)A z<@<}>=eF7xH*btFT@`ldzP5Vwt zKR6L|)n~u|hbJb$lsO~g*eA^(h6|e2DGQ&^T)U$hG%6%40AEC4-~u{S3Rv4=S(Z-Z hKn_?xzJ(HJ{xdJxl literal 0 HcmV?d00001 diff --git a/eBPF_Supermarket/Network_Subsystem/net_manager/document/pic/net_manager4.png b/eBPF_Supermarket/Network_Subsystem/net_manager/document/pic/net_manager4.png new file mode 100644 index 0000000000000000000000000000000000000000..e749ff86d306434bdfaa88f14f6e2a573a449a93 GIT binary patch literal 40770 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 N1fH&bF6*2UngDeo&?*1` literal 0 HcmV?d00001 diff --git a/eBPF_Supermarket/Network_Subsystem/net_manager/document/pic/net_manager5.png b/eBPF_Supermarket/Network_Subsystem/net_manager/document/pic/net_manager5.png new file mode 100644 index 0000000000000000000000000000000000000000..e56504f2025e3c612c9b8e34f5534a2f5b635ec6 GIT binary patch literal 14126 zcmcheby!qyqpm>&M8%*RK~iF9kd_|0yStGNDV1)97`g@!X`~xLKo}aNLt+Ri>4vkw z-&cEodtdvy&OV1fV6k9kSZmgL-}}9vhfqa%Nz8{t50Q|NFu_t{%1B5kP+&Xx!9CzJ z2d~M1||&4C2opW+B`WCWq2B$=mzX zuLs6y!YCC=XUO!S%Guzfj82Sal|BBS-kwQeq+-#`=sA%_!mp)a>NxS*3 z)?k8nG^|1uK2-eN0%e6GsKF51Edz!>kK-ZNevX<5<)P}-krs+s7@F)axf7dbLBv3#ote!A%KJvMM}^}J>Oq?eN9Juw@aTxTgv%6;38c`7a?vJ#E< zS+azI{jg0KC$?m?HpaetsGaJd@ddB*L%qZ^FeLsY?7M{U?X`r|=E`Ceea~j&+4I+M zPlbo-B2ETYNZ8L~jU0&Z_o!*>LD!j*HWc-(eD~QW=fUQP)R@_m?cUOzF8;TzH5sX$ zcYiNZYt*qeqteeHF|ll7#ver$V)@a0c=r%b5gtRrdEh;~6YO`-*CswxZ9M89`0XlP!I*lsP3F91hmta< znX2VdmS{{rf=$A$OjI?bWCF=kfR8V`ulVb zF`S0tFk@GUsk8BWMvx-`1I((vbtZ-3B<2@&kFj1J)`@#bwbQ%vJUYPb!XBo1%?oYB(Qo0isAzsARZzLhm;m)H5Tsf+Qyau3eF_N+2zJk3Kd zi+*a2CZs?lj5Q%nRKBXUG%>I+gmBExMK-~IuB-HwS3^IRIa8gum5XJLlt|r{h-KWK z8+dF4D*bcRV(}Qa9UB($$xdwE+6Yt4`B6FR>w2|s_HNscqEw3bamyYLh^m-FOBZrL z^=+ab5?(CSMjotr%UtHt1y_*yU=`UAUfRcRf1|e(&x7{{8#%TJ74~&)37l zgZ}yk*s-sqccPZ-O|s+VTgGlR&)Iu%&;h@=a9+;tCT!uzP|N3((bPLTy7sOs(rY(Y zpKGmVCu#C{AD<=_i4HPK*mtzDn=2))E`qL+bmtPAho zhm(3KdaBntWox`0^R}c9=jLB0Z(pQ|lx%2|bwWTq22OsN{iEGXemmO_Hhq+d%Bk^EE@$+4|QoN7uhPa}<_r%J}0*#s(qA1n2lQc?+ktg2u z5!43LK}ty#g)(O!Lg+9>mSpDlPZ&ud7lXqV>ByZ7A2+tBU&BQYq?co)IFso?j|d)( z1Pz)D?P00*V;MD>7l!&+{DGb+yGJE52yZjg_`Z9HnRD z_ro;Zf_D#o?Mt#*)Kd?Vwv*0-ifgzE0 z1jjUBi0PU$rA4Z$s(cW?cB9eq?lhd$6Gx`R&38>#Dqa-KyU(^oJ&_{y5${t7gf4R2 zew_r*$yx;3%={#WF>yQ!>N)a)%0ky@)W2j2QF^&Kj)RV}#O!*8lTF|ac8vezxb9Mv zqd_NT>e)$tb^O!Q3zX7=(E}}6yufPUA9J8fk@M6^XgcuRb|Ec@%-QPezkDT{`R!}I z0!j^*`H_C(aw_Mf4CN?Ez0}{wgiC6YWmkpPX!z zn*P}zCpa{sQcbnL6?L~B-hZi=qnE8*Y~H`{)mHH2=#s_oQa*t#ghMy5vl#D{8TKT#O++Mb2hrD2rH37M8Z^jL`#}L?|S!1)qGr(3=o< zsc&6S?e;v0FV2jFqUSje2a#EGByF()v`4QMeOXc<`KZnOkmUWAe$nlb6 z7f-ffhDtG@RdJ2j9K=?%`;z!bGn-6lYU=TBC-z=>`L0@&F2&Ubi4``w36{a$RsTGS zu=c(da3sijRd* z9MScB?h!lT2B$MyHso0!IedeZ>=#v;)k(GHFeAM0P~tnYL>?gIDVFRJRMFJGJd z!?4A*Y>8kgqBZH?6HK_FtX5GU9!16s@r@z~MS3cWt6zOKccbche#N-}TyE=nxCgHF z!w%~lsTd^P!Zo5rsmK_a=gv_abheT{7uvVi87405^xjr^+IG;7SEgA~BR-A-RmGE1 z548No%qA6{fGMIP-?z(8Xz!8bfSy==y&!hn^VHZYmdxZ1&(-YK=XL2qOtLqzS(*q{ zyD>kSjj6&nvHp;-uGL=Als;%?(QVto#aWZIt~E{GUJmt2&7Kv&$3bW+w>FiYnWS&7 zx+r<|zBc6+?a+6kS7&$w-%&xssiDgrAUU#kIb%G}GZYD`^cp_2Q}n}iPe{vx_xp;r zPFa4j)sc+l@qSX}A{ADw6L}MJ(CEnBC(! zv&q!$jC$kF<6yj{?MquVnX1bNSuW{gvdQQN)U^-(J77vA*dV0Tj`BGLo->`_0nw@lKAw0 zOFaNHrNYuT+fqt_xkeh8Ye4%8CnqNkP-K4N z&a3|CZ)J&CpaU(o>?rH|)Zbx8(n;(HJ|$?GoeR>MSvwi9XppmASj!GCLzD&bYu84f zplHa|o2>7qmfzQFd3+EZ=g<6+Yxy~<1+C#0&x_oj(s%{PJPB-F2yLHOzlcM*XNg7* z@2551iJKt1oZXvDHJu-!b0KsQ7Q0*PA=L>yQ~JZ6_D?k{?zVm&`{VwB;QwOR&w(D; z(bQA>ao^vB(OmZrz$j8n4N@O>l9M(1@9+{wGFM;ttvKqYuBUi|x3=BobeoI2rDlay zn`Yx24*Ch&9bGzGtXIY5)7pv$Aw0h}TcxjbRj%TqT;4}%7FIFE-z^VoS-HoTg3j<} zGNtizLTjx<)6sgIrXKvKd!sB#4WGKwF8y9y{a;L3YVbzqgE-o!!mb_>PwX!zRf{Iq zS?k(C!u{bZb+;9d*osfQ;3lD;>u{91&B`1zY~Zv229X9cAfuapI!xC^vS zBy;R4XMO*@d36?J#P``-vohdE!a*1^b3eSJqXYgq7hlr{Lt%8~P2VW!=angQIG#by2hlkGtV=oT>=xE=+`*xG59q%XZV2?OXovb9#rF3;Y z+u$XZ2=7b-QB#TN;$~S%w&whJtVkO!J9=QdHC7$Pi97cv?1^Hy^C3eto0E5@aWcM; ziF2bXv);(_oQb#7R#kpr=o)57SPd%(+)6NPBQ>C66miw}EQ=U_Ghy5mU?k44AD#Oo zL>>aSi(}g*Vmh{B@W+@_NbRM7Oz_I}fo&&}Md!RMA%0+D`pG+zLYsJ<*xj@nfuZk+0+4V9$8HkzgQ+Gl_M!1cbnR2=`rxfyL)tKi7Ku(-r`_9Q+Gk;qE7qxc5iOU!_k zYZ#|?1pB_w+#@E3&4AKPtVmf|{3efPn9V-jOSb-=3h^sKKoDS^ync?*k}y5K&y-$G z@KXa|tM0J|4i~L;DzJ!{RokqZA+28Yn>NkwSJv|N;H~|iZU?7B#{e2Grgh97&?TA* zUY(&ON)qlNTK6@o%=er&oi(HcH8B8fJP=sYl6tF^7!T<_OD{khq1>QFlFlk8>B z_^!xY{p@G42oF~XAsi&hRP1_2Q6>kFrA`?Bl`w$7*deZxS8;P%{Dco=jviPqQ@fw2Wo~z z=>gnZ3in&aKb~99dOy6@qHq0xU`B|VSf^DPxEiEJ;-FTLi0DM&Hbl%{{P^Uc$JmOA zS^fJdgnKS(*rtGeU97Am>x+5N$!GY%;ifYvl#%TevQ*2%S2~HDou>FbHYHm0m+yq@ zbG@BiZq@$$Iy;?YLNEPUZVH{Rk-nQ+uY|a8yBu>^=3UXn?%+f#fs1u^063cz&jfLGq#Ujj9wjNm7F53HIPYvP6@3H0P< z_n0TU5essGt!~0NxTaj3e@6cK@Ug!&*%@KUlvf3xYEvR-_On0G2yeeCQ84DLfyEf5 zCg{un%((5=2h+6fH#vbw?~z|tCuCmUE(oqD*|s7HgUq+Lw|z!~6wTSx4?L@$M6Y2$ zhY;_5MSs|a%@F%~o zjGWJ(QK`3MHoY{k>(}SPizUWxoT_4DWU*a{)>z{7nw>-=%m>Gdzve9BgiqIi7$;IG zqsJL2dZwZdiKK}fUk0AW{trh;MAf@7%r#^gflAFs)wbPPU149_dn#S4nl*0lChx-xzs?{_`4|{QIa5iyLbUa#4E2A0z)9^Y zz#E^IU+Jw#g(q>KgyDI6PyHTn@eJ}sXpL(psIv26Er(pE>|T}H9F~TiHO#JayQK8r ze>}6rE^ZxOPZ%@ggkO{__~O-cS5xk=ajwG>&*dt=Xd8jHI$$@8g?_PZ(FW%}>+TXZ z`lRp{IXZjb?S>+$;L-Ylc`WY*pTADdZ_PC0cD&)iALiufj1FtgQ&X%n<^98QEW9!o z){ozLer)`xckkkJwVeJ>GB?BFPX_TO;H!P>Xu6-Yd-2ZS?PplFsG-KySXEoS?!rdl zUHR;i&BS_w;lA`qF^k3e96rQj2Az7;wChfl3quZEDU37YN>oqekMl&8n{fRUP}IdN zYu4vrhPJ|twE~t7L0PxU5s9!^{7hF@_k%hYY$k$eIw_R#sTbq>ShS`&=e-~oE$Szq z>RtGW`yZD`0s~lLy&Z8-^VG0cb)g^ue?QtiXugYV{DZFhY9iqQF=N*EbLkbdRz<~{ zt|h7>jT~y;t%l*wkUJf^`PLMYYxv$DVqUDm>x8BizJ&@!BB*tY)qXs|$U_gLLx;Gm zsQF?>Mj7!w3|KRLaofbs z-H!x$UmTZh0B>b6l`Csl;AFr$a7{u`>&z}S#ymB&OoSQQqXc4ey2(U79 z?O46E^L>&yw7xvkQ5%u;zO6UiTbkgPC=t0eFA_kR7Bl8yXu_xE&DZp%RCia z9u6`Tv_b;w;#&;~upbnj5jXHN$1jD9J$g`DV3^KOCIwX}iZmcj+IfP>z=cU*Q=7W< zbN&T&j(@e~&f|2qk*b-3^U`^hkB#nb%DCX4=yaQ{3MLnj>7|CZ!D@%p_>;r@ni%KH zI?nD1XA?o>o5Qpf4T)cOt(D+K35A^JZpAtCDoeD^tbuB8n;UeW1WUqpS>C*R#>mF= zmvLdpW2)e{_BMd;j`+mQLYlrOTjYKC{S}4$?OG8`%AO2z0fa z3%Ev66o57@xyrS?n}v#q^kcnu@El`h9ipP~NfT};!ZHvxm+h_LBKq6Y42Q}Lt;l*i zhX>eo5qFx@UL(-l;B5abe+snKPmWH7FRXD05&QnL=TyWkn3z+`(RIbR46vr0qWjpIzqAbpy3g!^tUOmiP~O@`UTGYRv%Cgi{+iGlby zpZ8Qe_P(z_zxJaI+uA5|h>^n+bbXx+KutPqZFMg-1IS1rEGCv%>ze!QZD$`vWQRG( znu#>WcEm~ZXVC1zT$;RYC9|Z6l!Xp{{|qlqOVk7EJ8Mo+ zWr5;7@42!_7^nSbc07aB&U9)0kLhs?#%pj%%yemb2(=T^_quEcNy>Z+M7g<`6v$q4 zQCx5hp*poj#~lmg8!(8y&)oMWMN;skxH7gJt=K0=E`bcWZn@_~qYcglS_8+iS9RS7 zUY~Q7vo`LjhA7A8YHiOcQVoewlu>FI7i`N1B=feeokR-`TAdY06Q<7jYQ&^p8%Ygy zvp%iPU&v#wm25j%YsgRNyz&Bs`q}9<@WuD$99R>bF*BSl>(IxiTuY`6g&*@HW*drs zapUyoHZP2{aN^pG_DP!0#u?O~Tr=dBwyA zoHFW3ZfQ?-P8 z4Uv-!jRx}BGg>_wRPP@RV|*EwE&R8XxHNM|i8Kn{P61_y#yD4=#jX`1fIW6bpq_7h zX8>>+!&zshwxPQ34=a9p|2I}_76JUC{^YQ}GX3?()|&k|;2OBmc}sa7F>c#DNy^J5 zXERsMZBCFqN|s9& zxNCnP@b^)9TQ+P5R-pBOe#-V$dC6asa%}rXb&q2vF**w$7fDl^SY`?;v?f|#tHH9KAJmvBS)U< z5f_)k2&lIr*VnUJ5+^I`Wtmyy-~?I46AwU4{tQaLdIr@E`yo9vTxB6_v`str`q$jL z(_U|N>|9AlT=KuAO&1PoEOgq75x|awwSGcopybdw+)-lTdU2eAlJ_^#3`%g~jt17$ z*tM#o%YHDx{cqYnv+)eYW~+F(_3dTOkXZsx8r4)@TrA+!{3w)Cu~cTE3A=IfgB~750Z_V=%%E<&U`cVC^F}iW-J{c^9hFvW zho*hAIrNa`_$Dw^D7vGtPI5O!#cDjSseXU_G%E&ri=jJ(h38$hYz><8|JFuYDU`L7 z;a6NMZrHoldn3Nk1n~+mtz`7(Szum4I$r`oy(;{_LQl=IUzbFIwN2j!35rVPYaIGW zL8t5fldbthw~RB^Nta*U-Ct%`oH-_fdwFto<#Vlze5y6#Uq9usdtd^z3}pMDt66sh zYCo@+_xfHGAT38sb?Zzeyc_<>^h zeZKdVagsLNO+zjGD({&MKAd%fg`sb5Q}jw~7B`Y-%191Eb=Z&JRl<&b{l8U{oF-pE z0;ds@#2?Obk*OT@a^IZv^%bo;tnb$;hP_k~E z5BvD;V|>WH@tk^gmuc|mbGMTWiI!et|Hd4C!t(;K-j){BL#iArprqbUIleZBx6Arw{O2-aadGkNs_63UmK}d9U)}&a5U_@wBB?W;*`rH+i;*UoVD$l$PNb8L zi3?}ZL(o&nZA0~ciLi6lqg%Q__XYZ}%xoTUe1IvQgFLm5s=m zM>1FZLLhVWW7&Q%NF}=WNN(o*h43{ePSlXV{KSlYRx)|?3}YyCjJf? zYnMA)XyozD{(*{v&!x%CR!#*w*+9Nst8SaR4Y@DH$`-3eEpPrqK+Pb1>)z&3 zQfeL7cjSJh*b>|RCrErMAMci5Qh+D7O8(r}AWbj+r7~F@^l06g{@DkPkDfXFy5#=` z5r^cFW(0oi+h!+ugDa?V4&{<$!b4WBE2THFA67GzEBRQgiv#k`yJyC3xwwIU#Njb# z>VA!c(^b>^>2>gSRfmLmCm1fk9o3?i7}@gWE{$fCAaj*ANup62FJ8PwTaPy;a(+|C z%Xt=Zr<1z|jC6kFjkGkpq*2c5I4H9ifeSf{+g`pmLss1B>PjB`Pqeu188$FiW}CmB zkvv`|8)QJ-%TcAWQh!$@D;%dHrlmI>H>TLNYB=0qzidy2#v~dte3_yN@{z>D=Kt_~eF#HpsuKkR0f7pFpM__$69=RI6;~=> zDvop_;;8ZrI=r@m%5rZTDlRqXwckC!r%Rc~9Xi~+zp->><59p~`)qQMy66I=gn|k+Hj?MF~a7KkL1}zzxuQp>z{(PcAW-sd}?>>-X<1r%_4!ZN_Ov z`lQ-Unj^-!wjxz7SP$sN4n7`zX{Xl`6o7rYHY;MjxwR+mpLrdoF$3ey;(Gk>vs{O=ptE(Mfnu`@ zkuFAJsuHO0;h|0}U=96eL#p!Fd1elmNfk#ToOnPDO!blZMhvmcmu=my5zpy$JIB1C zA-*w0+!0&`vLtkam*&-fRHL|>UFu0FvvZ-c%lr0&|1V$BO4du}yI6QYy{O>!D6EPJ z0-K~qgk$Pi!xVnk?;6ZPvupAGmJdr*hzK5T%aWCd@`jBG;!k%X)xtm2c8HG{%7^#D ziUoqJ3NbnIYm)yi@o0ernEPK7U@HeK$%jAMweJ87fUZ>wibsMiwjLG@{GxQ8iPh@V zKl-A+@#M6wzH8kiYA!NvVdg%^OgCpo?%)D$1%wjgQ#@z(7ukz#NP9qSfFbB*qP(~pyz#D-StvTRnk~<{3R=S&rR9eZ=B?Qawj5eD{SYY< zL3C|iRfjhTXvGgAZHF5r-z>J1*O0>Po=&Gy(EYKI@wF^81+$U4NdY92ykhb|A1rbV_i1sFR8eCfzpmHNZtY=bWzrf^&# z7=EOvQ;oofx)A24uJj%K67O@k{xtJ=TO}5m{#n}T`!fDushqBVQvAoy_jLRlrqsb`#ad-AD@1OAqiv>2VZ^60P{Q(NPUD&)< zX~A|qo0dR-s}Iy_kdTJH9s7_qoN8Zde+MD~edbAwwB*|WD1oH^fnLk~zarg+cQ|RW z{uRsqF(2ql$&gA3?$YuGb%Pc1mp<45W|KNu$MX8ann-#rNF`;{pZ+%tp3m{e)M|3? zE*R!l?-3+O9rH-mJM&ew18x^jUAoTapYfmlr_SI-XFjrX$GDMmXNKuQ;TNa#Xo;4>^rsF11F>%SCCy8ZlOOR@ zX#%m5pN~#QCJusS9HvmTzcp$=-zLDK7oW}^7xrX-O#SU2rN^&FhiqbG!pOk(lXj=g z>x<%ifJ=>b_r%Q`y&YCA7hr1A0v8%{jA(-;C5AsUl|UUZ1@+0u$TAjMdoy$DukRHs2HR(U^lz-6VaHWV8#@QNG~$@4`XgEqbZBCsn6ahBHZG5ba7&s^Vx;mPsz!K#e=wT$RJmLZ<3;QnS*3`$P|*}mB#t3NAim{lB5;(Vf(yDQ-KM>8;XF!B ztDjL>(gQ#(EaI*!{j0@1YlMQkYcjxjZ0$c%S-zY-^7DRN#NxSs;Owp!)<2m$ID@7_ z)zbeZmdy!wpLY${j%eDb+#cu0&hIdJtH+~My}nM>BLA)<7#|Y?7|SIY!NtU3o-e=P(?%B#OwXM;khfCO+;s^S+$8pxy_Vrl|J8n;5@EbaRg4epOLw&-#D$3ctXBtYV+yaNq>wSHCZeiy%+ZIxNCnWjN_T(alk zht0s6uRQU|^VrI?liXXrt8REo-wSnP_k&hh{Jt#!elA4Zq(J%Ipx^-&W#@;tZQ12Y;E&P>V8-yRunG4#mR@3QI=rF4BrgttMaBw;n|C6P@RDWK-| zfnvZIM=bi?t=nrnnQGiquj`Qa>Ako)jAdi_Ge|J36jw)kp)q}s-bGDM*@j4MG6W2X z2)jwzPq*-W!e)0|a#Nfcv2*nih-sDUF63a%TWh81oVxG-xH;Fbz%tv-_&xoU`DdaQ zJBRpn@pR~ME(la)IRuB2_HozR;`f@A?e&H{73N9=TjD_6>d>&ht7QrQY&LUdu>s)U z^q#)$SNgvEc#KmB$L$iOLHC3>%-mTZ{=(q34in$q>Ms%(7NcRcKCBOUt=o4H-1keX z!t;;_>$O6SQp!8gl2_5=6r|$TgLz5u+q>@b4!L2cf{j?AA|^mt9A)etmiZB@Q+ z!6C)gYhjWJD{3Nt&nOe~f+AK>Kgg z;6JqgHt$@^Y5Q^AL&PvY%}AQkK*HBZkTUox$2vs@ z2=iK|Gj>+XGqoFY0sfl~XXX4VeaN^77$cx2pdD0flu9(CWtx24)Ea`_(05Hx+leav zI&lnCW^=8%*6>;{KEvtBRR2)7y->_aECrE-Y%FKDxfR zzHSj~LAs<$uVnU1x9s;lkMDc;hN3qvS9kU@c%Y=o5io8pla(7Mw{W=BH=VqnUI3rq z;`KjZ1O8P9$)BcX_h6`VVt+yeSiSvj`YQkPLp)#5bqj{f5CYC}!-KKTX30*b^w#ZO zR}_lK!~8lgq&nk&Bh^qn{}=my|Fc%$|Lt#``h~VZl0#GGu5O*`!%Xkse~pOG9)2WWuC_pLP(JeCCN->9?O^{Aqkl?hh)mwAS9V*G9~kz zS%$OU_5JbCvs7>Q`@Ubpb?s~KeZBltRW9t`OS6}Vh-klp z{5f?ZqMZpuL_63>w&QPfE6olO5it@eoRijYcs1E$uXA~MQ*t(B+ru;4Z<6nP^56jz z3CW|_R?0gT6KMwNQyGg+x_KH6T}-MOSGv;@-AXl%m3DPaR9?xr`sVt%@$J${jIw*Y zn5ATPv3`)O8;sO1yGcSq{CQ&a=qr~x;Tfsn371{UiRuUN)qgLihnW+E=lFXSkp`3f z=f?&Hd6ED8DCN#L_Mab#HXgp-@t>a;cK`49VI|$8gr{>-N!93ef4L~cs@d)>b!mQy z=I4m$^Xf@w2BDn$_ZTF;U1d95#7*o(6H`~^vv5V2ah9n)H_jGimOvuDq zy?y)krNC_i`xx&e_0*z2$8g&QD}H|d9>sdCLt!0kA!9|9qb72kZDY5#@^bq}i=I8L zuB#5vrPZ&-GAjY4M8%^mMrYnsA{^P>^F*{O`idecO5%BO`2dWqdbWw{DtTbCi|!B>ZJ;qj3>; z+-b*`iz_Ay3bx7tnfo4=z0O^@W*@U%VK;7Kb0Spn{NnJL8$7PQtE6)a4YubS4n2(# z!(ZF#o@eD(q)pYU*OL|VSzV!`>fdqy17oNFy`-ad`;`Up03K?EG!hSM1~KE8fq~iC zL75yLz3KT^SN<>@bspAn7}!Nb^dS1ijT>j2G>lt{d2Mw`7QE(u|R9>d3~q1nzj=5R!|v{Z7fU)+p?L-*+RQcXR#ZGRU{0|y^XZOfN0l{5?u_tf4@q6RoT_0z)7w*IYbGtdO(B?@oBPzMQ%Ollcj}{W z=X7S3F46c`G}#6aZN(_DTvSjo=&YeqU-X_%N-X#PEKNOp_%KSyUp=+t z?%*zI3SOh{XZZLgza02=&rw-f+0t@)%EC0siE<_{8oGUVCV*bqLZ;!GpR&%ZGuxwSeNDEWJSJ|sB!*s)_G_Dy;fwqsjEDE0x3$e1<}g)NZFqloaJr{>xn18qhFLSE$w}hzwYFBb)X8>){j8v1U*Y{bq9J6vJhNR^e`A0XlapsUvQHd8 z{^{e#*!v?>wa;v@Hy-5sA3Yrr9=@MWqy-b&p0}X)VQbUb$w|b&;&DJglz;_|Lh$0^ zB1X0-GhH&c+HmL2odE#>y}iAam6b)@$(re@sjFkjF@`+Xq@+HsElx~LPI}24j~?5o z4du}M{{4GNNy$S0YP@>t(o}a?SeW45pI`8s>6%&e;!X=2%YDg>#u2s52Ni5=Y~luB~*Sc`4pOxd5OG^I_V zqBf)Hk%Cq%tgNC!LQm+$MVOdAx3?ed>%Fd_s;a83ZF=LzY~uxn&d$yQ#M0uHcj{i5 zn42pF=r!5~G)(dE@Tf$I+`fJL2n~&h-DF3ctnZQ%>!aysFJ9nJXOA8YOS~ASnAkKq zIr;0CAuDV0++dZNKtiLj4tINXb!vsDhNh;O&vtWx?xv=96)&&_Ib^S88&r7g+}D+I z=Iq(CJUs8F4xGJq?OJ_|q}9~bLLEJQ{Yw;IuyMPDo|cwwG{niK#++wr?991SVQ`n0 z^(0Arp1Joyditk-llsDLh2VpJuZxO`a&s4c6y9%ZYb*C9C*Qw+ae28QKfle^w$wvC z)!f{indEbIwZg>xkyvR@%F}vp5{lM}zkU0LF*_!F?@L>o05dZ)6O+N0M+d%+@l_l0 zc+1?hu&^*QOD~M7Fi?(>(AB*1Q04gx!bLA)^R=^6SV(9kuU(H;!o^|6PmKBC9{!!d znBSTqW`(wv7FEIQPV=-n42yE4zyacHn=$nZ7cO`(8WdGh2*W@axMZ3A=jSCNsTu4@a0_eboiU-1tQ51)=&8T=Y_0yE?| z7Kht(y|*22NgaRf$>XvzJKQ6sSK=@?*~xqQ^yx!~Lh>)&v9#Q53U=aRCgkY`o>0Y; zVKqbd3ePd6rlh>L84FHKObiUHPf<(QzGFvf`lr}M+XGI1X=!PflU39-Gdw*!n3$OG zPmMKl0pss8C)i^P*f)DR%TNj>C%{66x>Y2iWDJUpJT#t{BPhm*0 zJRBMtx@XUx?GJBszPmkG8IWK}BWS7P=(rjvx%vLy&^N43%az#yi&ya}DWmCGW#8)R zo<4rO*6&F!fiUaAShhMGi5NQbqi}vZ_|oLyHWiOnCEBucNTK+gAD9FHL zD38n9+S)AYVR58->YL2Wx|*7hnjuR|%N@H&jpyRSb-1(Myy4{LW+5?Xh?Rc&^r_Nt zjpUX*b1*h|SC_V+pdgn1(qxm$y~1_E(yXY!!qC&x%euF!!FCvP^=;@L0|P_t%q+9Q zRSk{9hYwRxQ}3td@uG=ruxf2-c_rz-xxPAojO-3p94>^KB3-lC%*@Q(+}wBXnh*!e z%geE6R+rf@aR>eO?%QW(X2!+EB`zk`bx6sk?}J{VdTU$T@X!#yfB+f2SVv=HkV>+B z>nHx!)>bTFO8-P#cm5cmsdY0cR*kDyk>PNum&R8U!)yEcOV;s$ekqp_Nr+R)GtqMUxddFOa*da_b@ z)A}hy#j;yfPcMdXhet+QAvZ3JHmavSFY>D}$k56*Xh~6o*q^1^Pkv@F* z>3cZuqR=qo-&7&>C-p?&+M1I@OiXmNrKzc+G94il{`}d*d$f#(hGuEH$9b|NyQoNH zQEr##+)$XlN~C~t=@2Hr*ltS1e)`q$s2Qa{|E)popZWj3kS3ScLpFFRBfF$>*g`5lDW#R zJTv4nUS3`-$d!e$%ZsOaUFK`+CH_n%20d0!{Q)S0I67vt_Is!%vVNq!-S1p{P1tGu zGM7#)jP`c>?=R0DKYqNfu1@^w1I5H5`x!lTb#*(t{9&5?vc6=>ii+yw*~b-rHzi)g z+>X05c~=c)=#`2vGD_V)v1t7Ig)XDQJxtelDIdd;b2(#FHQ&Cqm|a&V7ps+ZbaXU{ z_AZ*<7;QYUNU5pWo>jIsj;v4E+=uwCYHGSKG+xLMe>pffSpP~mp;K>OjqcE)oV$aS zNaDfFsr+LJZHIhSl0PhUnZ>v+Q9He`Ww6a+;|{yH_?u+^{;7el<+X$>fbr47!UCpJ zRJ3?@*4mW#_T9U4c;JhQiXNVx7?>3PQ{*AlPyGA_?iCi>&!{LVegFFPQ9wZAV^)RV zKrzlslZCE-1f(f)jB2&t87j>GIiJwz;o;%-XR4s5*q%Y$$!6|ng$}pB{BosRX<;!(7d;W05E466^;uJWg}yNusS)mX!VF|A8i6u;9g6sy7B^Y*6f z)vJ_?9C=El0djxVCbFnW<;sxvh;#R%E=f82)g>hJG=_Kbo) zu-!X~F;}&H?)UHCBpx?%Isr7X0kNsJKa9=KzuGg2DQ;|RbdiW*B;gLL8JruRn83?3 zAFTf5xqIKfeFf&7O)iy+-ZFDN_I-&-NnPFD#f61KBO{tuu3+P{Ff(JJ4_;w0O3%vb zdwa7SOFZ=*FlWFMBzdP?_pMEAvO=BSO<8_EKERz#;2a4F2|gMwNlAUCAOa#WGBOHb zy`-08q>M@}FfdR()n#oV6|h%X8BiDxXTf}wS%F^2nvtLXivBG!Wq>e2t6nTmmdM(r zrKP8j9#Qd|9$xfL`;(%PrtiMNf9h0fYO0?~a(7o(QE{=R2H_&{mhqO6=D*Ay+K0Kp zTPp+`W@{m);#yr@MYzJC5SI4`x6(E-|K}G1=@VbS=0j9tkkCm~7kB)9jwM7b@Nq{+ zhd^0MNSoLlGnfXv$T>N3Kk`{>vncC*c zl_OCquYLmWorSWS(UA_ECy*L zsvkLgI7PCc)M1Y4`0nLA!|rcp?U{w|-yajPG5+{q8?p4GbMf_(TVmqk8^8xgxpe@`dyDN) z+cqN%A&}-EQFCZ!B6lR`-IZex9S_rYi_6?w7b$p}ojonxfQ&N44*ON0`z0euZP`$Z zLZns8T47XigE3#Cy5rX7#?tfG>ZvWFip;^77InHqz>vsan8lHSfyU0_?iWbZQKI$& z{QNtKiN91;rEeWQ==TeAv}@O{maMIf8TVBFQ>g#a%JwQ#oJ0O}aakX%3KX>H`ZYQE zX7PJkR@N4l5UbM5w??%z;~d7w2ncbWyU9_o8P!ME4$igcKT9d2ohlh#|5@Qb)m`9U zVE}}U*^m?eaLdhY6L~mGr?BaYdkkI{_3%(lSbdae`^S&{tMenAlou1#Hx`;NwOAK= zd3im0L^AG<8g#w$P7F$psoqj&RMlC*gT}!%Lq4Q5o+>Ga1CSz3i?dTxQDejoC!FV` z>??IHh>eXEA9?rg-Cj~so4a?_tOn*+Q9rvbOH*}a$A@W`k@xL9{9ZT)~&&3&z`mGIa?rLi8s{9;=YCVeb@5)n*2RK(C3F{XK{-k!w0`8WiLSpWz3{!)tCbHP5b5jp z&5zVahKGCm_?Y(cxve|Y+CN-bamWZupuE$dnjk_%Mkn$-LP>-9AOiHI`!0`5OG`z9 z)YwDuz!BLJA=L{g6!P+1Hx}Ekiv%ipbM_9u9(AX*E&%WO-@Z+ASTu*HJT<;)7GmMbeNOg2yK+E4TR z*|WE(izH&Q$a-1|f|&4JH&XHG4tp3|lW0b z;1hFma{#2Lxwxj%HidYuod}V>b(Tc^_y)LxF3ZXO{u`E-nc+4FE!f=mN9yuMbYy)< zv$L}sl|)cn-JSj+oVNV!;?CW>MMXu;PSODn*Volq)=#5!kC5HcdyIl$>SmuXoufMmBLrp7s!kC+nPorm5p6#$+v0d$_ zPsh)kdDa!b`kjdcMHtiBv)Or#9QO*vPM%C$9Ss$@`Vu(4MKnx`QOJ3T)4w7DtMUpt z{|_ZjNW7P3oh?Y^u&){M!G)Ii}V5dP#*~(*65e z*Sr44hZ4sS#zzees`~o+8P`qtx)A1p3QtgwSoW1=Ebeb;ZoX{R>rCkn*kV6exj$8- zt8w817cv)WoQ{qaAe+{22VN=-U$-i?1zNMSi$6~Cxu-{W;zTNvU})%-Yu5nMVvy(C zlu=a~WWUd|dfh@3z!N?>RnVuGXL==!Ty$I~i%EQbv@yZM1NAB@$d%ZN=%we_q%Xq4 z3RZ-U|1IJ`iy<5rx&FzQVr@A2xrBLudx>2&{6R%4?5^iK-a_9+q@odQ*IX{vjDsEi#UfsA%(; zO{zu_id;Zv({i8vEwkl-bPQq+&rDAR$pb952wVB{B_vWNzcx`*QK=&&yBHHb?F+Za zJQxxBGotgs){FpBmX($1yUd;U4=61ui3rqFOVwyGC^|-#T+zsJ`n;{$_nI32Cr?@; zrZ4CpC&(QQcL4BE08EWOnFF5#a5c3xo#7{!fO2MKbyfN0nNNTV&nmi#x7xW^^RMI5 z)&^XNiP5L!t!xKvQLg3U>Uw>$ZTivS>&r354&^!#M()}%r!WF3oeI!sxp6CD$CiNdR}&~bjtTvwNl ze>na9`}YBkE}~u)Jn9122_6>TH&+G#XJ)Ymoht-DI}^ zlLeodx%q3Ksa(6efz^iUeWj5J&11D6c70g$m0`dAHZRX&u7r~^UH0gn>zu(&>(?nU z*coSI>XX;x|NQx5)$ukiplnwZ%jL9QclWZ;D+Tqvr$efjX8QV~U(3#CHQwS4RwpOA zaG@%{T`o~XKX(b+H$G4JfH9x;JYP;l0A0LWW!{p;_~)u8QBhHC%wQkiLG@vLMY@6QwB*rn4WPY6V(R6Q6Ld%m$V zJUpf&_RO-fvf!V9%y1#J(Q?=g*%%dRp(8fcZ-!3KQ@twO=P@W@3=fA|oe;hmDMl zM<*tL6#2(BJs9`y-MixArls{VAVArFH><+Cs6+4bAJQ~AOuVoQqg>o~QBCbYl#2V< z>%x7MoDHvMWQ{CN?&C){7zeOGK&(^v{4* z)l+jTjP~!}?^SuCq$+pmiPv%rk)dH>m*-t`@5a41Q`_+y zG@Tl->w3;$bMhtIU>geJo2I5kzS1Cv3oi{Ba46zn&lrkoEH`}&Guhj z0He9dv&dM$?4ZD$!6YEBnAMh)mR`Pm89_N(+_|kp14?g3-q_^i4_<`;r{FN$3}v~Q z?dk#lic2vP78d$J@~`s}rhqZY=`u)P2&SMRP!|E2A*D?T(;P|7owJ+mb)LzyyFB0T^KGqF7CO>*?a5f_ z{l2+x-;Vy^)F`F?D-1jAxqtsY5X8riQj(IActq?)1B0gd%Mohrzvk!X2{Z&kb6(rF zPoF>kgl3Qs(NpTIS!&3cn3{SDF^7{;bM z^Tt;gq2fS30(T28efjtArU*uX)2C-3kr7Kjq2YfV;TKzc?fP|cT7fr!=*ZI%XK(qm z8HR)3aQpqsuZ^2f=GfUm00Ku6&U@#nQT=mF+3-|1h71LJHsT_v8(_X1N6(}rmW9R9 zgO~#B3J9rPfc(xzWKWl77Z!9%o%sDLg5{ZOt@wF)@87)(!bb7#-Rz8v3@8PqrLF*a zs%*dJSMgQQRx`LVlqtM4*exW4&-;7HAkAH^9=aDKZ)k4*X3<4s_g*mWP>jg;>=|pI zqCijw1|7GMfrX;T_99cz6U6ZGjwY9V(iA8xkL>li9y+E0ff}>wX+k1EXjX$~HQ3G{%i=H`SJ=ze5SH})B7r5?wKfl>H7gCHKo*Rpf zR=^y~24PZT%PyEXORp4AIn}KODDe+4qyOW_glY<9Hy$gEn%`>3?-1*#&DvyVPWKAM zk36szJ9g|q?S60gJ2m)Ea>?~)YX|?J%ICVC|7&CWnm4-B8)GIht>x-aelVa zKSDx6kg4A26sj{);Q#L~`O=Y*kpW_Wh?`wpoO&vJRrC(@3hZE1?)FYjPA)Dk7_q1* zI@`;(wu^X*q)RaZu_H%2AKX)@#PCMBO@aqA207b6g!0f z*k~spx$F7nW23?4Se2Ml$j)m6z6_+Kq+q+17vIta$>&=2N#Okn5?5o-RNyYMV~FDa zr87o9kPWCX$jfFt?D;9SO}MVMc0U;zA{^9&tc;8!e&?W%B8UgXaS%&Gy&ev^Y$LC$ zt7~GCO2|*ryYeJ5W#VR+muFP9`p3s^4049qr|?+$dKGzxrL$(nhbmY=*goh zyGg0uTJ{uy*u&hoVCxdt&^(^o$m!>ppm^?V{f+_+;aNl^qJAVxE8C-dKvmxf%kMT1 zb(BgBXw_H3_nqFDQ~Dn{bZ8zc1vT9B=g)DQR>(jgRqL@V-r#ZQ#2ntfd82ec3^C#; zC8fHgYS4v(-*a=T$SX(|Cn-pRl|G+t$S10^t6JZ?rwyi7 zq z_ADn)jv02<)!oe2DlK8y8(FJ|Erjj0Jk<>iAW?7OVTA$Es@#UMAE+F?(yqR~EsR}C zTAI`5dSOu~s;n2B*P6KOYjfDpX$Gb5}I?O)kvNSRhfPO~ln=9pvKr7dN z(q@~aZP_Yfsz+s~pLVrke2BwbciIVraW z8McfsjW!qj^Y>YZ#I(m+Kw5!3b(+_DszGZZC?%je_qOfAuuj(06PKPdwjlX=dqA#tg)M6hx;ccYHpn2)-5u;bEo~M%O!A! z?Z9DRpy4~|>=9?W!hS>{IN~~i^_u&69<0h{j-7-5KMgkKi&2iQj!w#L<*pkj5c>NY zoQqgrhKHLhO2oG5WxsvfFv+Tv(70w(aMO5yl*-7x!qd98!P@)dmf!sTYREG+HN}5A zIK5r{?!9}a(Y)%5yNQWyu51H=J>^&?>&|%4uP$1=dnxz|wm+_xdJsRCla#R zZ_l^rzN(|6qopMT8_%%#1#Eh->dYb4Mkp~VwJ&CkB5nch*x$XInvqfJwow!wP8}K! zrhclYxZwSJAvU&@KXtvV|5i`~^8!o7oD|AVI z;tG(%YPfp!DimIPJ;Bz41oHFeZ=gf|nRlOt?!otjc(=7$?_OpQwwEP@nv#;`@ZMJ5 zoU{TVVPQleaL<8^BqC9pkPzn`#D2Q7nwEm$M1|lyz?mby=byc+07BF&5K(QWrvX~= zZFS$jWBCA7OpL@R#vNscQH`6MAnpx!P{SGt8=BRJjjM60q=0WR`hq_69}Ti4Hdh9L z^G#P^tegDe#Sb_OSm&e}YG`H#C8L+}f)kh%^X~lGj*j;gLoq2YlPX%Zj?vLU(5?Oc zy`|6xD+bb5R;OI4H*+;SVc|3dpAEA4b{jpV6|AeS_R~IyTOnA7Tabk%DeTh34yOm7ZrBXSr(`x&_Ve7iGty>hdLn7SS_mYE z#YkuBU2Cr1a|w-@lBQ@+)F*8$9IZS4c@~SJ{QUMvQ$Sk872&@V>yrz51S%h{I>9}$ z*CErO(!|{S)zw$uIf+K8piXyiaS>ywBYM!gXC@UD7EuqkfPfv?7c4})iH79UZ98@W zr8_w|Fb+P@GXoz2!W<65RSX$&6Nv|WfRGe$%?vDBZX*&Qo_RyKk2tVD6DOxqVDVm0 zJwyv6uZT$sqS&n14<#UF{$5fH|9d-?|L>YX&)Dh`-fv+ayG$#iNlIoaoSY4ZEoI@#dnK~ zq zb&M4qh>|Plwf4Z2Y9PThaS(wD~&d!O8hRz~*_UddwVyZw`ZHABs%6CWl;T_#^^q>Zv3ivot@? zey^(fNOZbz!$YIXVf~khu4bb@yu=*smYIGRTWpWV(hgRgLuwq2!S~mXEiE!I6mKIc zirShT*eB^w|K$tbPU;f8+R{yN3UL||b*?fL!~t@!!qZYyj}0VK48me?VROFQz~V87WyD>1fR%IZP;mRn+2$!7Dv2tycksW9pP z2Nv+(`6b+rX!Ja6)&vuIM+X%Z)mMXTZF9KQRoR#on&4w=Xn1?*PEgGdj9^S8KOtvL z{WuWIKiW(%?5+)h!AJ7Go@*Q=#W-5epDWEC3dPl~E7t@CWwR|85mD*$zb12dBrl?L zHM7`+kgI)Ccsa#T5LW_%(J0Bn4^RTdHW4>VK zKlk@rsHSSbR#Z}=!*&?KhUh_=;{VFmJyFEAvi09vJr~q@SAmtjo?h=4zeAWm&=^i| z@GbYb$3Vyw2$5%o1qfxpY4IBl4i2;hyLRrh=qWm)py>PG%{9hZP)d=E;mqLFErMWZ zbmtB$oW{b!VCVF5r~#es6@q}`qK8LUnf7(~9fvudhMy;w!y8GXP-X1``a( zaCkNIh9Eeh!{qjD@P?@_!sw@#Sg|CcsTWwaBxz~Ths6b~%@MYa=I*NN({prSc;9Y#M zR&*Dvr>={wnt}A<>Q>pgxjGPe4GmwnB`X2)&h(bPe*JoK(!4hDiVqoG1nT4gYwdKM zR1LUAR#A=Fh`6r)9;#){Gz(B-fj_tp;8)Q$B?;gV^{tPW7X`7JuI>g5?;t@ey7Rf1 zm}JbBK>@)pkSh=wrJlNu#b7tpl_(+P`ROIfaV)wZdm<@Gc)@VVQJe#<=IUA+6{YLo z@IEh(Uz!43BrLF8r%vr5BkO&CHvzLV{8WjBmxaZrW@x&%R1~z&i4!LT1lqoQ@nR$i zW`;L07u6yj?-21>c$+aTs)8nv=fQChwmy_!ynPWylsin+@%JzLKG*h7pSI20*! ztobB)k`faus;VwBAN(uL-?@1cROa!&%n=OWd?)sVDlUQ@0s#RbqH)XyHLtz>GTLh% zKi(Usnxe|4o&Jis8nW=~q$E4OVHBvS6INjwgG>`x1wQemJhRhm|3fLpXEj4~8#_$Z z*be{4{D&F?48a$JIgpgMc{<&pc7m@0?`iD%bT`qcB*rU!H7z-yT~}Avg9i_A z-+~oF<#?1!+t9=WuFoY9F|ayrK-v-l3yu8^ePPtb37&3r0>R?XXTN9Pz67_}{FiXn z{H|t&ZK4|mIzp@aDm{Way4tc`}EQ{@2h9Nb;C(c+P7w*>h3 z%)4^O5X-^(2*GR)C!GG=VIm^eAT3U)%Vdl9RaD3#Yv~~!z=)20MSJ83|NUVli1t69 zVxi;NloS*oh!2C8j23ge_w&o1AbCF9aSe$WeQj-my@AsHHOscfgA^2C6P!2K9U-|l zG&E!u*>4d4!=6*8pC&3BG}ue zdJVU7IzbeeWUL@5L9GpDMr~GxWkh!JFtnwU3QdiTQ0G+dOT8~HcK$=&M3b#mf`7*L z(sVUM&jg&_xv{Z~5J(6)Q0OjGku5g<^N^5`n3#G)o>iAk1V6Yx;cA>C*gwIkA?|{L zZ~0DF8xBF3ii(t8?4|ZY?5#T>{GgE>BV&apLtMO6_BLFoupe6CogrE0ouSkA{D*Et zC1Tv6uzE1EC`Y_5e4uakBp{&AX@V<5>1M~e( zum-meEe9AKO?*M`{1z z85u&GgTx*Bup0PJ4PbTwedg#`n4Em4J^CknFRc zHs!1<5}$;_EMu!WQxMGPusOsABq05#xFpWT=hd?b|`jWBvUf z2j{x3*Xm0>;K+-ncRid3iX(_s7(4!C~9$G?5V~v6ixLo(%1F`}X+{ zcf$aol-%qsGXPU4aF3MxWep89@laAzhlho+hAO(cxD40FY|S7F5pwl~KyEHB+xz!# zouL9T;7`f*(^?4R_X&Ovyey1o+FDvJD+9i8J{OfSY|#B@k$*AB)?nv{|0P;K_mNz} zSt`#HkW|+KE+f($bhnz?Wp_snlpgM+g0(#ksV+4DYt=h|j}W zhZ5*}NJNNvpi&t`?Kqj44Z%EM`D96uOZt|d#g;CE=LmQ-UtljCkyIcYN9dOeR}uj8 zRZ=46!3d4%|Eg=DZ59SFH~-z>n*yIcwY;=@zqgDU?39ViZ~Fd)!;OfC52XS8{7Y#; zYX}O?oYN=uU=%v`w7B>WFey@y3zE5DuS3H9&U0E?9f*Mh=MLT$?N|iNiWW;S|44p4 zxfGnC9JWY?eMpu-%IC6 zK_~*hDkk!Xi;Kgr{OQIM2FbGfwh&l3VH+e+-$*P_z^V`>qD5@K_4aOpl}|R}HQnf0 zI-#JRsLo%nPrUu1Oxzhnws-Hwbv_|{!cv*+B{P7ah+rJiM|13$3wl*ym%bn;$3sO5 zCpXAaNThI?93Z|sQb!le{8w4vzF=b)O*VS0h)_8`C>!}7YXem)PIh)h6&3JEYF0st ziLg4O>9Gq$r;QrRXdoyjt?So04nGEeXE$&Y5Ev#s4fez$wu0LB_AtgraOVXf*`3RSpnJQ+t zE?+)$g*B|ELg+rxs8wYkgCy1!f-B|!Nn3|OudVGx`2YxYK|Veb@6X@AE18*195^Aj zqqQvazq|ko=G6^63uAayGBaaiw$rD9E}0e7ufzQYk?M-N`aQ%!pxtrxw~C3dg+rmn zPDx&ri5VFk9UU9HrmGtj5kZgwmpDH(#g#{c>|JcvZ`XG7CLkyiKAP5vPmn8XhV~MB z0Di0S&K8Uu#{1vBdza(t8#aumlF|>PTMo+l0c+632$jsCiYS_;DgGx-+dTvm2A^@R zT?+n>-x7sO_x>$d^I)*w<3X}#kICk4l(1Il_XG!Rl&z($#!~@1Kt%;YBS(wr5ZGZv z1%xe`IApD`(9oT`c8LfJ=h<1q35bzz+jY_O;9hU4^DB=Vl6MgGZ+-p#UCez`Oipe4 z0y`(=L^-)6-`TSVNQi->9OdME6cghu(dP;z3Dz-6bP_s?7AM-RdI{L&XT`onWo88< zL&G=Pd5?>%FHn2|Ux1>*2r65$;1(CBxvzUv_vla zVA&&*tz~}e7B6%l&6owG3@eCK7G5Q!yKbSXg5N?=FpQDp(4j-l&dw|$rw;lxH8&@! zo6yQ?5{S3Mz&=&o$GNza<5X>G#3u#+jR}faC?zY%tSF~x;A^3zL^+u}5x)j?Bb`uC z!Q&gkqWrnTZIldq9g(FEN-~5>DCfe*$Xe5pVo+q-I(Z>0c0fZV$Qsa41p8c?VM%Ci zCWxx9U!P+N!W*YwZ!*r^xsMWc9-Jvls1u5u7Sq5$LaLUD1HoZuW8*RsWv?yjk2XnQ zgaXr6_J>jwM~^PUw`*2s+wOxnN8r{`7eav&qdzSvxdkZ76OL$Q1W)_;;_d&H`l)dR zFyC|6en2Qi|J@9{MoOqs-`%cxuagNMW!^r8V2E?zzc>8Hwi7KdfGMsTR4X0%pOnsh zSeCc+zc)9A5CWpHnW<^oU%6uqU`R<>8MzJJENG?)I6h%P3$Yc0WUIT=CIGt~YAiWa zGAMM=mIZaXu{j}>4L{hnBj2hoIx33mpkIo~DP$8kI7Bz{UO`?&Ki}79$0gTiWsw@8 zI$gU)ZQFr>f<`|X-a;TR@cy(SHlx^bC?Q&+K4@{ap%b%9&(#ino+xrqv2&a{g_akz zr?U3K@N1V4$U&D(Y#Ydu+X;q9V6miF`sM?EZin`2W<<5Q0GB^to6LEKo_bvZ7|k zfB{^=Q;Cw(NOJ&dj#KMxY=tYlFR*-dxJOwVOBNWa6yv-_Oa-HP7D7 z6H@&Oixc1-4atDU(iG@X1+0w7+LO_G#%+D&Dffqi)YPk$v{rDfLq7*N7+%(_ZEhy` zFj{os7bJ*=+`_Q2;4;lO%;|&|eOw>iWjK`JLT&Xp+F9)McHop0Rkn4oPmlmB(awax z3kJodFEb@Y$YC~CiN$QL4ZsUI6@{xsSFT?dG$HIJc(;L8ieIA>1Msq&TUbMqAY#OF zY5Y1)Xg795wQOWG{9$Xu%J$d5=;))b39>jO0fU2K!W9;#>HK1xSQnwsMPdsO0`pe_ z$*#0iJg^Fa%I}4R+`PQjDQ}6t?vk8LIz8!xM$}kcona4ElJ6J(hz@@n!v02_x5IXn z+Zbm`$g+|VHGo7yI~{CEaJf*Yb$1aul>=y6t;$t{W&;N(bXofi}P(b-uTvpoC!zqm0pOScw1 zP(niqp>PMy(Gn8QOZ5beTU@$DhaE3i$#KQP4v$Hg=_wxR@0U7{xJI~;E-aKvaX5*S z6ibLMp;5+rA4d1)&6|j+C|)P5%y~x$UUM5b!r#r2__A| zaYt!hCabauCHb_f6WSoTP`-6p}sV;ls?7{;AiF5bVWhr6_R!q|(4;y8RLO zF=TLbr{e-aKu#Wrl1)@Z$qjE!nrG|f-y~G4guMi zj|PV+G#VpP!84-7g6IN-S426Ug+C(Vdr_dp*yplWi>a-wnO`K%$*=_uz@@Dn;qUJs z8A%&czr3_WNkWVdzr?P%(e>-zD*Ayzw0<+>K_r4_neOP(k@0cU$-DflyF4G>cAcUj zloj`|=0F!9?D$f|Yp_Soa>N_G*nPy2U?zdZ(#V`Fib|xWF&Cl574!zG!ly?2$S+>3 zft55j>H`mEoLOOMvQ&HN%8h{IAqzHTz=v4~x#nBm&k&&Psb95@05%_49zMgRxDl$8AVIE`XkfmTeCt*Cu%poE;G$NFr(_$e!=IVGzm~ktDb9-qD z4CTM}LOgw8Q6aUnPQzV7s|O>&Z>S;A-idC0UhH`oOJV{y?FQ}S?nmY84$iMGP9GbX zno>?~hRp|QO6k;?>Y)g2Wn;e2H_j|11hhR7COHnX37k6ZmT1O|sHR&xyF2fFQhdD3 zWznTP`NXDIua21}Tn3ph5i>J9y~!sTD4i}zH2xNzcz)9swp)Sm6=$h`^?!;1lYe|S z5}7bF^EuJ6_dvU7E(97O9g{$Uf-83F^&mnD_{XDu=X`7ko*ny)qO~Pe?r_K07T4ErTt;Sdunz#ZGS^Kmf+jluv& zPA>+|wreYP(IBT2Z~|yB;su~27(DFxur8Tm6R19f!!P=fHkbSC$C|uvTYmb;Vta#> z5K}kXu}sm;PKf&LJ?lT}>rW%KgIxwA3K`qUt!}iVINLZUJ3DoGjvoz9@80pOXWwyF zOINKPv&l>x8b1=lv4vw}G}+)KK7v)Cm>A6d8;h>hG%u;&A9Yx&25>N_U#zkWZxJ5~ znT>1nAG%Us0N zA{!!Lo?S^|*n2o>r$I%8BQsVybax?G zqX^*nHSS}a85&Ha{J?5}h-eEPuxdl3q{1)d5?25Gsro{=9GslgKU^9Q(|jPOapelN zPD0eGOJrz3>XKn0vIh++BhjVQB06Vb7(Mq(JcsuKzk(j5)iXDcEXmUhE=)HrL zUI|stwsMF#YvPQb63~G@S$d7vW)4wN2?11;Yi5mVyqH^F2D*!18V>~)=jZ$M1?Pt( zgCJx@F!^Y4YT-_)?O4-EPR=*Ioz`m$1z!F0t5_7f+P>kep$3z?u+or|3mTG}#Hkv8 zJsB%|Gp7@$O~qc#a+&YRoG`I}BF;4Wh!9pw=pnC#e;ODb_IXfF(K5MX^OS|RQG)iai*kH++*8zASq}YCp!j{QJ_Z;{JCn{E z=V|Kq^lARvw_j^&iXGZVF6b6q0|ik(f!j6z;H0T z1I!^x;6i8@5D=&p)H;+4pDt|i2v&rn1(ZcSHQ04=Oa=CI-!EpO1{oNL`wZ>XQPm2L z)eTsuOv6l-)!qL6`x{^b%s$B1Mir5i(sCr{FS zEIFCAwdtUs61>#LjqyM`r!FTwp%Z;!3hoz;7%=0Fb{AwBxm`0g9fufk6RovQi>46j zG@}dot!8lC5K8D;_sw~Ra3#6qW`v+L-I+>ag1~D`>RTRXWQ{EbV)CsP9N?`wV1@Jv}f!E*A;?k!of>9OEX#b{I$D z@U4=X=4mq@EFDlFA|idwa39KCN=gb+24XnP`*Z1?$f9wofGH_VSG}IWokcj%0Vn`9 zD@^Tz{JOb?mM;mk9m-rl3nah<^;D!dFPXTd@qB_YthXebf(OS`!0xV&PEjSc!`j!c z)4r$4ZMB>MUyq6SR$H66*;SIa+D$_6M=ZY0%_Suv83i;$zK2&0hQYk!-q}^HdeuX} zae~v`!XJ1;)BQClAn`OxXOU@H9(jAJE8^InmsiCccpa( z5o(YJnK#RQT(JWnp_>cPZo7~Jr3mKt4ba{2Kl_%$dVqS9J@j#{(P^!>ILv~|`9T8} z3Vq@ksk&ewC0Y1Ar>UN~mdG7O@>)Krgjgx@JVdCc)&7 zstXDg!3xko=q5xPP0M(wQHjmPls9imaOBEyL-ZJcT0NK5?{7k|3(dOQOtjTDHXb-H z7kMdD7}EN`?nCmnmdyz7I0bs;dHDnE>z3VvRZ_dl5s{&0J0rGr56R5?)-HfLjN7w z0Q;w>=?@-6gI|loDvmlma}uUWLhC|n`q8AkgEF93v5U(G=kU=Rli7T{8+1v^dkEpf zSX_tuXoygkH;C5oj;0J`aUd!P*f@;?-2qby*O6d>bU@53E-l&Jy=!790oMgIS>Pog zWGF04zki#$RAy;sKnAJ#{+-zi@_7fG(<%xPxEqRXFr#?l<5!3uv?D;_(55Hik11cT z3cbzAfyvTg$YLEfQiE(EZtkb`BOeA5`5E>?JPeHyQl{cM&lChOgDzX{iCSw>5P zgQMfvD`l1th(GZ_`9X zQ|%m9FZX)?1m-53K_rSUI|rOJ0$pa%=b#rj31A0wv|^+1M{nvE-n)&t!ZC1b_V*OQ z_~6(n=-_-@AQ#Y>V>Ppb7n`Fb~pbC%VW^)TV5Pk+Knp|APa;Nl6N zyFRW~-G2OOzUC&3i$t<0mr6iL_^}!1Dh-)F-3jRq=+!e%<#^zzkPypOdt^8H;bX>B z@e6Yd-Ti5$zw5g*;!8e)Uz;M@_Hd;~9!k=)=NXJa|ZJ-!L zxA0rofN?KfGbAwMU54KDP}ba?6$=&|TQUlVnB}~APkdK5|7`wFi3{$6`zmkn91c`| z;`)da(QUqC67o2mr~$s#*KZo%uh-Fy0_kh@KiR1KY>?U^1WA8w#5Vv&zn;V}Aqz+| zQ}nP9pJ3OAC&|f;+Tyz}cj-ia1KhSOCJSC2aMv;1eul&pp8wQG3xF zqm*V1V8{RPI(|}=z5@F#fNX4REZ`Rqd+g}YdA~}=7eHf4$+Hgd2M>(ei~$H8%TF3- z-WF)z0L@)D7JGrH0T1-lZqt2dy<502FrD;`LQq4@7O9Q1q>s+xr$R;NcKaF=dgE;;GD?faiy3>YLXg-(d^;+S`w5l2Lz~nb;9ILoy60Vyzw?T znz?7BopkH=^w-Ailh5;}EpvXM4+(s_4RRF3+&l?Lg7}@8QY_=NeZvyK>sKlP(+`}m z{_uXSH0m;o1z$uhW07%}QV25HMOp>T0X3&z2}&%KQ9jLEduii)pjBXF%|ia>=S5t} zo~foF+Rv2F{~|FfLCf#bZ9veD0p+!OfKcQQ6W>RORkasw8Ko=mC7wD3f3w?e!{)xf zc!h=+0gguP-i$d5p^7?FerB87?buPpIWIq)g8K61x7~_ne?OQtru8oGnR+22Vn^b* z?XjyNg;;!br16=3BSwmMZ1(lwCU$LWY~d)TR9;mwJlo>w;cwLjy!U zM-huLZ$2qL+o6~O14~cK>lALwr?4yi_%XcbMX4>W4!9709f^ax{L*p;Da+3qB3+TQ zEHKRs?ECO(N&|daNH-Fb2biyEC1MXGBV6jXEU2O&cB0Guv?(jM+@B7WY;3$xN^~$& zR_bi2jRrh>R>~7uuQ061%S^^+`%gBJlMi*7ds4!Dw{p# z-Cc0So7iZ!uAR>EXzaqi8a73A)oiWXBoYN+8fpQ#Zix%Da`DN#UcatrQSBdHc71jp z$ux1)8#(XwKbj5r3j2|xQMj>9xp?*B<}Ma7}-1-^KlLvNRc2|}Bwc))g2M=+Z$I&DuPv?;7 zV*&cgYKUF^6Fj52gv3*}rK&^{Q~Mr&sNu?5b+$Tpx&Ib=jJY9GI!V_4Nts0YNR_Ih zhls}Nsm-!Ns1kImzolC*ZPr0mqI)^7($b#VKbo6&YInOoH^j}uBXIC84kSRW-r8)K z?@eZI_`CHsN>t5&GmvJoM%eO~hGc1kqY`6>I<+|XYgNuEpZUd*ij|e~r3eMG!$aM0 z&myV`I=rdF7yGG5Nk$w7q^a1ar#pW>+wX*p=i%pIvQX0i9oNgHrZx0!FG=`uY{76w6G#7dIPI21?5BcPHt0?xU+Y6?hOxwe z$a0{pY+k_J9%$rJCKVC6tM3qGha(86Q;5qZHO-VrBDdJa?nC>F3L;b6j~YGziNA6BEn~p7oB0ma?>rjWsFzxy@8pI^TQ2 z=A!1HCH?(4*I`^?qzjs<~3-Nae}(_!m#ES-$~3D;O7L6-hYVxUo|QJi&T-dp@j z3y|0UEBIe)pJI`HV^vCX1iS1cdLrDj(;MIQhTtsT#xu3k26l>bNm{CX<~q_YDMN;0 z%2BuK=bK{fxsb=>l&sqO@{3MHTMe!6tWPF$X&J&rs+Xo)NB#)NQs>QclTgOp<8y-* z4IX-!B*r^-mFXv!UpcgPaqB86p@HQRs&08PaIDuD_hcH!C8PK=a7^LfW)-5ah&n}D zlPFTKKfkhy*1v|UPo~Qet_X|)?{V#|l}%n1g^AxOLau84%JB-Vef*)2d*56;GjTw- z>}M}u+JNFi^sXP@4-|}RMLlhcJ(-=Cp9;(Ny=;0H$$?$Ro|T5JiU@LQ`N$q~~QfCE{1W@rysq2Dw#?&T2eKOKV?JFQ7vdv*d(4WKAnL~m_TwBeKN z7xU}o5%aF3+uY5M`tIWBDI>FETI05+$oY?ClYLQ@@c}uUY-0=Z^L=5pH7}@M;p`*= z7+&VrKUl3lJz8jANWmob@d2DYnC7Pw0fkirmSwS%_er8E8v$fm!@m2=Gv?H^tV|ShC)P@111hQg z?P5DC5G8iR-$$u^`T_2dSx`2qHZG@wq+)W+YHRSV#Br?p*N`}mOQM!6>#E>h3Aj^S zyl#)zoH@qhWL=lr9L?x16|#aK%IlJjK}Z&LC%S4lU#js(a@`X~KL?5tuLCE?%F7pn z2j97Q^U|(vF1xz5ZhHJ5JBX?j4%b%!2R0vSEi%N{uhkfj(xmlushJE_l&ao_ioZ*> zeR%rP=rAuHrHra07@LlM~kBSQUM% z)32d3mE8I{NJ&zczxi3@AL;geI^FmI&(94NZb<{DyIpKC3|!vdK`Aw_LNzYf#rM|S zG=*)?Q;POmzN;DBa4pN?=&WN?#z`cD+SjzKoz?nIQ`0Us{QO)s|5~K(#{5*D$pepX z-!Mnkq0iP|UFUpx>u_P({&!w$^kl`)eB|2SoSo~#Qpths{CceI!SN$9iucR<>_~g{0mpQM79n9W_#|)xWJS`K7e-=%MYI|4(5J_Xtj)!*RPx`+Ixq5iGiffncQPA=)} z$XnM-^F^(%l(u0q;@|&IJ~juEh47G=AqXN)*r26KG9UBre589;^tfI-EZ>g`8oi@% z4uN4jk`s!~wDGQ5;#VKo9AKzOSMB5O-n)PQDLC_)lF_G&xvI~utG7_o69zyoB`5l$ z2M?CG*2^`<(NpawDx5Kt?w1ET~RLWmJ;3LwG}((P7=|HGKe^HA{v}edZSXtIW%L)pJ;v` zEhImL=txplh<7@1Z>?&HH@nlDsJ14lcP({0WgiG1;M%R+56;~YC7svUX%VqTYs3h2 zw)APr!-rqV)f45X^Zoa~^N;a8K>(jVdnST9Na-H4CN3zb421G91+DYSRjZ;tXYo5` z3@8&f_rPclXlM$84S{x@zF1u10^hv(iK}X-p*3WPC|~CUsM-EN3&FS)D%0zuw_n!@ zU5>(X)8@_S#~}vHgXOy%x!kJTN7FNw@A~`i%l;uEGQzPb^6FL6xSrG z3r$-NpeQ8gMTIslqu0QJ3CIHV^j_}OyK1N?vM;@!5#=W05gvgX)1N@p?4#}?(scQ_yYaLWKkV6Gf*FB4+XJbp3dIVtE$xgV2|kY z!t}4rIVDGafObkUPJ7C8KQ}l3DX(6|q-rMZchWnFgT=IX;%|JSJgq1rN1{t{ zcEET8?kWUhEqaSK3Of&w2uWTj=A`6lj$jt|;DbvvX=}%95R`D&D)ernr)@%d!Z?QB za&k50<&QTTb6df~QtWwmSLMx+IY?5CQd?nH`1AwDw7 z=yl!Tp)8uE>skx>NQacDkI5`hI=%jb1|^c@u2=#|AcpSX!kRZc562JXd7Y)7`rYDZ zut5}lK;622pXibxBcG+D0KncMgrHkDlRMUf>WR>&x{rW9As;@(;3Ep1l7Lgwj*$Zs zWOOx4bVVBw{DN2kF%Ceusq=AO@1WlXPTt11`J5Yu^8u8Xc_ftbK9gu*`D6F<=MyOX z|NQe$*iD6&;Vk|WZJ6n$*8vS$m3dKB18N+G63nr0pXazWi<`^zr2I1~smHHeK8z%Q z0?;i-Kz=MOrBKYA_byDSI601Q_w)X2G_o~_U#cuP(kNZ z+pSgchUr2QfoTDFu&(OIJF$?YTTj%~yJ{tOc|ILU@Y5KHc!b2!sOV@UIC&$KM}-%B z3gm5TbhRKH2Zdv2c|vy)E#{3QHn+F-Miq+CELC(=%|{ifSu@RBGw+Z7+=)wQdDv>C z!XTuuP{GYXXebyEHB-vID)bKM#;$RET;wF$^I*dggFEode!sbwe@OD~0A--uR=xf4 zXfa>O4!7Td2Zu30G|$*aqw-m;tWnvbPY++d4EOJ#CJ?)wT2Mp}N^K$hu#eewUw+MS zoM{5v#a>tmvbXp~5|L&14nvTM{EaODJP0s1<9XgC#M`Tf_ac<>_`|nsu@!ZJV@(VV zhr7*_&6Q#sxs=itSx|j0NXC5i>hoZ)11_W#6r6un`u@(2$>(`I$eOB%w6t&|v~ZH$ zi#hL|F(p++rdHZD`vgIE0AYYCLsy0GX?Iv!8-g3@HyC9lv@>ko6iv;lfkWJrXZt7hF^uR4{h>zS7|B^YhIA2LI*DkIkyU~ZhU#Bqm$0v^SjwBU&tlhqTteWgU+ZTH z`lYSJSt0Bz#N$L{4h=*A#R^dD)1~?m1OO>q%P5!Fi@tw15aGiJa$R%yy@*-rqYVP* z52(bR2w69%e}7SP?xx*xd z1WsqvXc~UgtP3XVUIpXZiS0!0)Fd*U%Hr%2c@7EH$E1jJMYZR19&C26?@z-&qf}%y zSEUCYU!(vVkt?t+!nm~HwQ<7w`6ZIhT^%b=Fe-uB94$C&H+4-MCOHsuWxk zBOL4A9%wB{r7q@t5(zhRUIZ);;TY56}B%_{-+ci7sBK?VSR`o{;0*x68{z@+=T z6WQxHS9F${>4#(?@L|928-@(U6x<0Q$H*v;>y%QwO^O?L9kT-<&BOKWijebyU#ZG6 zNVET|z|Qz^#1F?lrhEKF!J`JL)<>Y?`i&cg*9;L$B1I|Os%b>>_9WjF+(ZJTUh&BD z)z`yw0th;0YXak)KdO(uD-%{ApIB8}R9e0tH>k4urhV)7Z6j0`#Gw6bEFbJP?`$it zht<6fe=72f+|v`;>_q+{zE8kJ3J8vjZomD;>A?4W{`$3roYMsh7ha@z`q8*UTdH-g z#sxLY<;TY+|8hWmp@KW8Q#dezhKA9O49l*nJ-;CFzBV9}O}^}fpYg|gaOMz^nbwFq z3lV?Mm?4pWke0TcolXEky1ICVs zDysK_m#1{Yjv9lEYvjneW4-tWE((4kwYnh5rD2F}R+46bn)f1PcwJ?0LIg^mJ@WAN z{mu`-RV4_xJJ1p=<4J{+sEVnY@|5{#uroq-1&>N5CrOZI8#V~h22Dr-tC(+Fq+n34 zefTt6G@}YhQzYN=X6=>x3@!p6r5I}dn$+@IX8&H-t05ur`UQ`Iy0L+jGN3xZARIlo&ocQr59}4Y@RQslJYTup5 zb$n|Z3(A(V-$>SVv!!KzuPq%9G%O5VP72)l){mO;?-Cfk_>t^OszZ(zh{~Ot&-28E z@h)9=7r{xNn*Q@@2FV{W$g5y0mqBo5XX}66fp&}Q@e)3;xv8G_2i)rO3pMp-LLd&G zo_$=#Ja2$@KpG_{FVm{6Xd?Ydiym=U3{22ZcWnjWWDS`LN%afC%;ZI2__^dYFkL`H zLw2|4+>mMq{qW62pE_WtKzoiRg2y4j+j|v4RjNh)t}|l1k(8SM{rvoRrsps&g`J%X z#ZaZ6Nq6;;;V{M|dOgm46GYoK$N@)us zOJJN@E|dchyp^TpfPVc@%DyDYRQxp0xnt(aF`|Mp7~+X?KrMV>=WgA!;E>&u$#ODp z4rwRpw~!3=`kADWLEP*`<33E4-6$RFS z>C9YOo>;9a8(Ns#pNmTliCA%5T0S(DB+`-@L%zK|K92t^{4vO!scdjbpFi93T%bE# zvG^KI0GS6oz!cJ`EkI_&m7bWaSn-tyl*tIl*%=*Tpg1mla_chtB+IQwipUEO7W!>Y z3QGUi7$d}_subhkeS`cK+mt>&ng>Cv@nX_!e4t!o=C9CvZBp@Ov9a(^9zVW=U`hXH z;t;_=PLyg@QBu+(g@9-?Kb1{g>W}VV1cJ`u&qm3UUFYz>T11U4H+2uCg7!Qb9<(Zi zI&_<=!{vwB;%-l~%vNfCy5uktgU^J^48rbx%}`%Rn&6o+#98ZHyn^TqPv9mYxEawV zxPec~3-+62W6D{8YQ{_1SXi*2gcy~Y_;l^~LU=Wn^|_`#8KW!XID7c3r#5Y%x=mq0 z;q=N@oN6p>Y#Jp?>kWgq3m+KSj-Ib09tcy; zuVYVKq^IYVyz#e=!w5Pc*^o4BJ^=(3rrjhKR5jy26h3&PFUx**jJlbiXMy@g2r(`n_d2;kuTmM_=1Rvt`XQ}Iq)s&6=pflSg@T7t0g@ z1)kC<9VYM{O9SSp6%T^V!P`KdODxwq^D|R$&#>_l1Wy038B8XxxU2j-YE_uN6DLo$ zE}dOf1YdB~-g)%BV76`01Is$8$&CFdU2ywdU zPB#y3UGwK|Q|qH|$O#QtYG4rHt!FtIMi%allA6ANBS-P`8wdO3Zr^o(U(~~WW_P(C z$$wq{gNuU47QrqWm^-{@8grdEI+AH*O=wmEsNCaBgdvoFEjp2igU#S#RH90dMa`78Guq+peNnw&i0iUT*OcduT|=1@~6(wyD~$WP^p z1GtTFNK7midbzx)F~f%4KV1WN1eFIj86OmQ^X4{=gnH{eH^z||MRqa=t&b<#7-mNl z|C{e2b8L_E9HM8>lJ)RAtMc17;tmLN#AU%M;*Xi*q!ah0@dugKyg^GNs$#-->IlIY zkp7zb8aD(_XzP!r%y(A5nvG1F$6!X*^-JK7!l8X!(-iVffv?1Y?BfZ`Eb^zhW{`r; z=lxA-a=1<~o{0HY zEoaeCUUCLgFObS;fia`68^GwvYk|XzWVRX=0j6gJF^ZmPia>{Y8InSQpwu)Y}I} zYZAxGvtZnKndS}?&!tOmfWUAC{U+mUe%{gi7s(s7%&e?tI;NDJ(JN%0?ZZT3MxV-R z_fa)Jv#Sd!2*lzLYSHj?qN>Uk`KeR)u|x3_G#-wooL(~OO4%-K4D?Nk^~f{PQ!zir z{No5l2RXGvIU6@??%azSI~7}XO4<%vCeTL`#_PBC;G6(N5_KFzn9M-zH0HY?Dgni{ z``MXw*VIt$>*ls}$r2_+H>0ak|GBHRjXrPgqyW2v|@PJY&w(ym#|5-$8^c!^)ouKd}IDxA#!!Cz7M<2*7K zU<=9#CaL(x$7^O?ZN3;hW5_x6tv+N--P(XJE{E(=G&f@09jkKi;BkGruo1j|(#SHj zY|hgQNb?!EV@W_(%ekO`S5oO$w}gRlCO(T|G^y2=Er{$q{QN?{^t$*m{AnA`eGjUX+w5Ai6m`EpzBJ|2 z+P!@g>oF#=MZTRgh0ULr?p-026xNM*H4Gl(rCU=|QlfKYkZx5WT2x9{wZ`}V2irzG z+BFpI?(r0)=F(V%QII8oB=_WU_*B8l4F1kwG*{XMRm0n@CS9F*ke3aq?x|FtQ#@V?jY#zx4y@a#hEa6)TmS^AuuSsdFF8mU>hqx@x`9}5v^sS!k@_- ze=;>wx8^SQmhPvKLnwUenR{!=RD7Y&iFd!Kb&u|>gSLC%d;J6e7=a{ya>eAh{ms?IhnV$Mi1hW%??%H`_(!1*FP!q(1`i6#f9E2dH&6PczKTfus ztTSy_6i8yC^->S?aqYImMeT0YS-y#y&}yCB9FdrifF_eyVq#*^#%GDUW+8cEcpwpF zInV8(XOPu`m~*lN-&5KJz8`iy%L40GpDsmL5(dMBS3VvHpT}%Pt_^U1H(fn5Q#PB! zrz0a(8HizHW3y#T-`>4y*Xb( z9GJ1nEg>-D>cPHjw*#i{PhdJK5c#~}O|-{Xrwc+5poM|o9c$iZY5?gmy!b`%7G2$L zQ5%?^d!s}1cX zX6pam*Q7VvC}r@*{=VwIuOkOP;RpL+ zePKHE>pe7Hl&QV6K?VXMq!2#>ho~SpPySI8e{=l`(p03S>W+62A{Xj^Tp@X` zEMG9Ok%wo^o*lJ$`KCUt3+O#_eq+WE85F$!D+LCG+QQ*y;MrW9ox_Zx z0I-CThuV`!9}DC;a|b(Selt&MdLIHtk@MYx(L1)bxA%*>3+yE8@b0C{mPN5M!GIFJ zBrPO%{74Zf{x6B$rJ_;}K|D<#6Tix-9U+9CAy)EQT6n{;k}q}|eT=D1NaMVo3B~vR zS^rt>x9I2g4y~|mDjsFFLK-bLQ2xH?XR==JS9y86PRC&iOXJ_H*+XfUwr<@1mNzlZ zB(9FPdFD(nX5yGL&c1ust`7IzL$cme%D^MH@6e(0?6488%ZHCRjP+H$`Z6C|Ob%nG zXPK;0@+2gvu5RLw|5sTR!VasVy_6 zCZKAp9-%A?Dv1nUWFUc^Daes91WWT)>R&|+vE`}DOW z8Uy&?p2D3c4svPfoBxUXy;~cx^n2!h#C7O#eIDU^0VOGM=^?qal?*6OQ1~IkrN3dZ z#4JPmi~~6H>C**6-BgRua~k6+IDDF%u0Ljs2N`cZcYg+rJY7ttdE}it_|!L+xU!)$ zj1U^T%r=&Gx4!#Y@O7Wlo5T$3gfB06eo-spdp>liT~vU*4*XRlt^i7DA~D(jID+>1xeXW=K*%6!wi?_JQc@V~PJ{Q2$K@LE;Ua^#5zrH@ zR&2tF3#M%us)gcg(8gXa|LB*(gY0GIro86Yzha}vxbVvbEJUC&AW2|BoK^vHPX#c9 zHf(Da6rBSKnC_cX{3ilag8pJ)I;&bE=m)TDgtU)In`d=YD9eU!Q+!Q|CR4G)*bi>G@JrSnT;hgOO>(K;t~$>{sP|v0Z4Z-~ z7Pupxrs2IXhas}48jPjK*vXLZ3KD55aFbO`aNtxKc38yBKp-G-`Eq8~&?$BmsdS>Q zlZ0%=;DCm(!bn10?yXIrx}?pGgY4t>P#t_^X}o=VhN+;2hF1&~Ii9RPOyC1V+MH_* zTu!|Xe8!V2_5gKXW#sh}CsJvCgF#SmpF-#e>3~mOwQDcL9&H!+joKm_DIPKBNaK|& zKNQ496uPf8G8&6ri_?}362P1+5h7JcXUDb=!Z0h@mr0M<)5$Mtlh5!u*jv#B<&WEy{>7NX3@qJ^7dR zYlw!cwdDpKDYr3wDq9NXx0Ii}HJ7Ux`pZ|R@k3i{(+Gq z{TGkfN4B+_y?W^Og`ules`o0}|J<-gW;dRx69kz8quI+aM~b!y!U{@?k7O0#xV)bCtj5q>Tu zbk%Qp?Y$Rm(+AnP_QB*yeeKz3<2z{vV(Q{0548(+nc45%othdS3^wn0$ls&u!Plcb zp8n$2Tob?LL}J(2?ibPd{{7?W zse#o6TWim`8tVF3ee)Go2ljo z3QSXsUaWRA{PNo~`L%=21V@_0>R!a|%%kPJY_oW)lK=1D!~dD(X%;;HG1%rvcx?EU z(B=6F%DyROK;tfQdq-(#XyBv;BxLvBo46mI42=7bY51Li_8`WjdTIfAb1bA7x6AuI zbh#$=3xBwkTDkT9Owp`F{1#UN$O7d&?Q|Oo*XQLxo4D6_(gj+?%{ZyL{{-PtzKbKRqKn zXYTCTRI80mO<0R^VW|ptMhVA~1Mn7=7==@!W$QhiCp~}ej;AkP+}&2pMDqJocVq7+ z!v%Lf_=zlVk?j-{b7J6>^g^|~B9u6$ct^m=yNQ{#H`f7*MDK>~;>A;Kws>zMZ}2Y7 zG^gV2LX?Ogsq4e9=UoCg2fzmL94;^K4+MbR5s3$rr7tF8O6FD2Fi*qhBBcmXQi&lk zT8MYJ;=G977o-XUO#4mS7n78fw7PI{`BSmTB?Xt&z3h+%QJq_=%2IbhLI!?z8k1RR z2Ovoe4vYownjLRtG)h@H<>^x(xUSv1*FX{j-G=tXAGe$7Rm7)NR}aFpmA=Y3*J>>F zHD4JT+O2bEvRRVyzIt>_G<5<_gpNC&IFjn9Hyk34k2`T6EA(BWut;G;rUND+vGag33GX9rn| zs^&oSjc$qRn9J4zKXg1K&*vPNg!SVtW0J{Iqk-Eha6H>z%QG`8(18j7be3v(4SzVAiY$&;tTMSTYKA5BRvqsQ&nC>yzzj zF(%0!{e=^O94$Y}r;9%xzuS7RRnJ6-4A|G2>a?!$4M19A zsl~-X0|!2MNe<@c;^hm38WgaFb=$026T?h{UED#a&6Ik_d?jSi!58*g(1m;cR04N> zOsG(lQ8jogh_6-A=MT`TogXzZof$0@auGy8E{6}VYr}kS5ov&8JZ>`tbwlRWrAQYvx4k*AJOmi^!?06R*XOG7o}s*;XWoO-x5bvr z3|Ix^k#cq*@O6)=pJt$TYUM$Tv(B6Z9k+UQ^WH`kU2m0A?=2T@C9J#vu?T4hrBBoX zI`f#)Z}j#fFYI|6=w(W#X)2Eyd#7)yLO<6>Ajqs8kZE>^%riO6&f$6tX5%Bxf*+#n zXD4-Vt-5z1`nWO+!ZKFf?!kO+t>}t5ej<(1d!iWI4qy`E>#}IPNz3_sccW05`wCUA zP_T%%Q{lj%Mv?OoA(;3yLNoTc)r|}h@^|OeVosyx=H?DFNxTD^PFX4|HX}_-o#|F5 z8N?WIr6WZ?dvKtWDQAQ?=B;i5yZH#t}MW#(--G1htH-B_` zFjGT@YmE9qrv1!)54VPmG1dKY(rtoo3K3G=i)&ORVPV$Ohb^%_vU;q|WVNH({=k}K z10&D~{nRhA6VJ!ngz-QlY@i2+j8`FXQWEnz%46CfI4qtYOFJ*9Y=*p~JOa_4DNU-( zY9vq*3xhN8RM5&F(~;w-glP`n^;$gRs7Q=L)fE&(0&n(Glqj#!>2#RM9Bv?o!zo9( zaBru&$-0u57JaSgix2jTNTX1meTGPL?YA}@E7InZR1W^K$+mIB#FlmA`~Ai+aWmDG z*TTc^6q-e>__5*sh8yLX39~^IIdQ)qI(TqeZrww-67!tt#k)4IIye#m!H1W&QGbOs zyCwg=;K*~OX=3(G?Autv-8sN%XD2PR6!*?(jq!YqunD$>DJh}r($gvudcfrN9l71= zt;0?L48o;(v44~97TWRS$a-T>I~1}DBu}249Nn(<(^qb8oMxTfX4+JH-2Y<*NPQ< zep}`oa6ufdd!nj@DricQ^AKjJGT`uog~2g++?Bhh#wr8#p-bCtIzbHCrbSxe9r$ud((3@prw+Q~{qurbN*DK&@i`C@Bh>PkG zZGY)4TY#A!x!w()@61f%_5%Tr%r9DQBqZG?KU(+v(62)IXfs+kuOtOsjwZ}x8J50# zN3j0-2T~k#F)=I8o84RrQz-;D1SpB$7H*1cr6#Uw>~=3$H?U9s5UVGLsjwV#ZbuNR5nIez<3cUDLMeLk_TA49-%1F3kyrtCN zkRPF076ar`Ph^aZ?#Us}JtiyxpgkNJ9Z+nV_4n;7dvCEakI^CnfJ<)KyjOhuH|j&( zRxIEg-EP+mRX1u^jdc5&;W;Bmj9})+r#PDzNDRSzA*+o-8xRBB8S&vy%p;SxT}s|~ z?9{2EC`+%M>-Co|t<5&JLAey#KZ$`FKCtr(0&)86Ek4qh{Xi)m5hCgd>dF24XnS6psZOg))d5jWc%&V18Eue|w{RWOEusKSol0CM zu@z$nV&~sM#xH)GWg*Ln|LfGD1Kb`~BG^p#WL4_3vgV-}aj9AIkrs2O6&9bbC@*J? zE^ozO?fn+#@aD@B&zmgrRvDqFC`?U-M zz)ATkeulX6X7R(*gLR}2vr?5-$D{&KhUY+o1zouk6B`=}7tG16Yb6gq0h>;;3&;0D zPo>dHN`2bP!`V-mfHIq*pNRV2a#{!p%h<8ZQg*CkoYKBe_sW`O76gi17+Mhe0~J|U zmLZiIwK_;5$D3niV9Px{GM$D<=FggG=wscE-^_nF45sQGDd)Jc=7Uolo$dZjlOC@fPf`mLsc)gv z;8R;Y>OUB~6u??dRu|luM0BCyHaQa=doE>j?Uo-+O?$W7FWv5uEwjvUwTj(?l{2L^ zzJ2@AP}HpK7;9|zeOe#^s+DM_0c_38u8Pj(nR#!ciqTOwR2=Zlzw}WHfo@63QsK=V zSgzofHij#38-7$ATn(P&2r!nCmv3U}9KwSUct8kd#}3R>pju%2(-9-&WoR@5)p0P0t+4`kcjK=EgZbIO$68Q$ggX|H7vs1?XFyyY_BoQ zK*39V(KwW^AA4DM{C7-4w`Bg~H9>_f#gFvtG)x4XzIE%Eoc5|6^hC^xnOPF^lw50WYN>*<0SS5a!@5h%+o20=xCb8>3Y7f~2I(8@^U}#hQt=;mI##LGED$5<{u;Q136Gy+g zM(n0PHwKza)nEM6{=IjHg`c~2sWy?iGH&=}vz9w+xUs%xJ^Ui}WsNB<_2PeQn|L=r z{$umEoNAK}qzCe;4tUzCRA+kR89A)@W0yE2oql-B?{^l2DEFOSS0R@^Z1}6Y4<))^ z@88|%;Kfcnkmo!y=C0%3>5Z?7H0?g|Sx);Lw{Hwi&(I4B%#S}^Het`&%=;OGBX|Ek z!vH7r4By!zIw0?G_d(2c&=zl35>tKasZ#4I{J&$nSm4l?pPjk@AI5a7BBUwN=#U_i z7eDY7*|@oJJ40a3ihedsLPO!;1;@2n41AGPKg0(_z{*)~?_7&{hh8a-ys&wcu7q$7Yk=uZh93`DnX#QfNU`C&}8r&*!lxUl})P z(pQQXq}_?-7aTUKtO|I{$%B-S#(^%8rX=w5bthdu9Do#>A&xpi@*#tBCdaHoyGQCe zX|y+Cc7dvF8(V&^+=+A$c_88~O5FR%DfW7)`7K_ta^=-DGZ-wSzu3?BL=6koGk@9* z%>?ZXC|z7!9!bxWC%l(UX`3S_IbhQE;q#N6l9q?KGAO%i*WP#jJBoy_eI2oelt_@Z5g=Dz z_qHNhx6{0eIqqh8Ap)i}$-DSD(7HZ?U-6+2SG zvEr%aD1v&m7t=Ez9{YWLPCH9#opV49Kurq*WvO-f2xy#e6;gTw`vCsW71ebkc2_8juvpBPaUg~&I($_GjrTEIkb zrPD*CusBeEO5YjqA3-d`6Aa(M2EgvgjFR0Xnem|b+}T4{f+l6cGrBW$44?jLhlcjx z5R}H#K0g`eX+o*bAY&FfG&pZIBJ$Gm5bTe8P)QlRyq!j}Vr|#5ckkF$eBHS;=}_BKESXklXKe=!;oi;ZsqIs zJ-xjfk%?mC7mmxccG$8+q-WynK>gWs=5#r@4dwfxdqb=f{sX?XbojsUt*~AL3%c;0 z5$_wHium;Tb1%&W{4g3dqmQ2(8klt9J4A|8%+qbyTg@ch2>K+XTnC5rk&#hXia9!I zmNd>T7v~K#;_NDiDlCw7ol`(^!iWhTF&KFWuCv(j197!%!_CS2f5glQAb<~GK00>R zwrw|)lAJi8SmIVM@EqlEQjJ*sFe<)*)9G;QR`e9+g_O660GsTrb9z+pX6RN@=G49s zo79J!?wz55L4;Gwe%}(1r6Vn!yNBKS{KOS2DP6Z~4e{(>KYzYmh={%b zwqvF=Aa&i|#GU;;AFda`6$UpJHYZPrN#xN<4=#s=)u6=T)WgpB^vM$jWDp7*HSH3< z(~vA+-3eoFks6qXxCH=el}(?PisIt!jO1Cketqou$x#;fCyZm8LBr^}e{?|FHy+8= z0hT=^GZqL^`M}0i9hJbk75f~UbBafRgfYK&*$;Jr-Hk!*>w0%2f{VyDJ zp&PnKq68U|);4w$^o zf;48evfkzzWkWk0XmAz+nR%ykt$qSP0ncL&wu_3LXY;2(wLTT27Red6GoBFZ1 z!Sdz0w95}-XUkf@eD*BD^k{2pII~0(|CYljz9CGQ>UuECewQsGv zc=E}Uc{u*FEZAY~kMEAM7Y~hfS8+YxM01I{y)Wh0oq7;20oif3|@*W%!OqER?@av$jX-r=!%6aClJ z)=$Q)-Dt+8)ZVAC=rD8gzHi%jx@XOrMe*xXrTAZ?Ons{kF%bxzCYuT`m~t`wy0}%1~pyACs%{wLOD`^0MkU7yN7k zXgAtfE(ZBP!5M0+6QgFM4S_*2vLJ^r`NfNq^bV&^-AUeLt<9MT$cqYatE#M!Z!)`1 z#T!!a2L|cHwAmIAGIb(5+fWgOC72wS3l5RIYk22L8hsw-lO$4>K)?s{>~e3QnwU=j^PLu~HyDSr zuVq6<%9`N`E&j`mr)_A81hd~+kviwG%i!tzr!qX?`t|qN{;X2g_-?NnTUPqgL0Fj~&hs*nqADv#8nzUho?6YDbr@u}o2K;4I zGK=r@nKLS^8=?c$r#@Ueo(gC4rcI3$7>$iw%iI$uW1R)gY!a`IXd8J$|B2(4&I|wf z)@4Vqo~q3=$pPaB6~9Z&4#%jLw0S7Sj58zz(8B5;t7hiAd3x@ma4~NAqi?nA@{rd_ zP8dGEGnJN5iS-*c(EEI#@$_1cU2F1a=OI!6?NoE2;o(VDVev*+0dDu%I;@w4A! z>n6GhZmcg(Fs-iz8BYUdZwpYe4Cf#fgP`pPh>(38IfIxwfvX}xxt%0$vH(cVP;F7| zf(>Vo0)SBfxkm-&=-}XBlVc*ho#KY3!J)3An0w`VvHZDTHF^1dYS6drA9_g zM6{FVoWh0V=@z$-WuzS8(y>E_#LrL1Acj!iQu!~Dh>@q~*=MCRaA4~GuU;0U--ww+ z3O>8j+j6li&QJL=#}W?kZ}jvh<+K#DgO-evvw!C%%Ihvi*0T*lL=oQH_a)8?(JIqd zg}T)FE($_WfY5*g!D!881o9kpku^g;v09#A6cVNqVc+v!gw^tLX&+Q7WXaRHuX0h^ z9MK3P4f%+SH#;JXcMX+(qgZm-`OaehC2XA~_c{$ePj6;wT1Yei?t)M~rW)*pLV#j8Y|FXIM=|#gh{gw<35?hUOsem0Q)XH|ue*hTXg$UXvKU&1%i@D=C@7baT}a z0qrI8glV(j3e_(aJE!&C-YqrLxIyG>M4G)@itwXg$IE7RRnY(5eeD=)!$@lrY;Qcx zTeTM7Ma)944iqKR{vKi$tjs)3Z=ZI6iv~I&m&)F9jFQrioTQ)2h_LzncgCy|Fcp$h zHNCmcV7tsC$^yb%=>5&2^6=2TuW#Z$kl`${cRghgJFl@X^}ug{3`3M-phZmB4M@8Z z7^rNT@T#oqG2}l`b7YsY@jwZ}{FsIpk)skH|DCKBr7ER=Km-(0qzpmN(hj1PqOcbq zguaDVeS=?bGB9Y<_Oe6{4*B!3=9DRfo;Wh32dyNJEsZTWp-{r;>t9|n3Uar1pFVZ~ zc9byesl0I!Jkza6h|Qw+H}6d}EmE44q?}Pz4^PAkSpq;A7BXIMKaZ+*Kex-IL^5At z4YS9^^aDj2@!cOyt2%6AtRxh%5G_Plb(2W$i0mtCkJ67~))Zw2VziB9WGtK|$G9Rf zXdO<5W@?BOnk7mg@@p88fS2n6KF&Sos6>&&bss$KLvisfluWN)t=wMc!b}<{DV`T@ zI&nqW{yHvf44sz`>L&0l-=8C}8vAj;kuBWE;V2%j?N|o*qlJqW;dp{<7V|4;sW(AQ zhcn)tMHAtza1(}z!#TRnhHxEfD3e?3XCwLKhX*b8vv7RKHp5tTQAvQ@{O%MjBua!~ zlZwdHUglRtqNp+M-cVP!@BOu4!gn@w9)ytR6uY5iR37&X(fcdgcc5cYHbs<_KM~MC zwHtqMqj%y-EwOBg=TygB!Fl1xw*y4SbC!tMrX!w9Y3FKklMA%Z?L8~re;uW`y zw>Ngx?FTtIcOoM*b8{QZtmA2TJ-qzRsvI)?+Pu3c(C>%NHAA|-BihV~4Bd&G=XJLB3=nOl;UCya&daBkPv)-A3785o; zIW6M1aZLmEaTN4vPZqQm?dZ^<2V=E=k))jDZvSMK$pTyt@S@f=b(^ zFQG1dq40I1oDB5aTwGcjMWn>D0Y+e3EkC~|g|EED!09+PQ!t0~n^u^aRp7i*2Lqvo zr&L?$bSyPB6>FoB#(JrPgtgUR;Q`^K6>es`QlIaVyzxCTAmZ6e%z&LlaC8(QACEV8 z>HZlz;03-r&+Y~@ygoAJ3@j4`Wk5#dgE@`A`#S$snnPZZ@V;8@QSVADFr3oYNOnadnc(%WV zWwcXlwM>5OSZ^`%v`?2KxmN1^ew&o@XPOy{@GVFn!-LaV4H(zggry_B*p&MnN8c_@ z%^=QGN_Ati&iy2k8&Tnd^(AleIDYp-mQn#2TLs6(HPJ-I%DU#REIKh}`fswTPlEK~ zQ9!vLWG>z_-*OrTBnZTAqb4=a(B88rhS5mM%D+1qY@LIh474EIm>eMaT~_@OYNhmw ze*2~a@=d^-XLD}l9MFvbOjsYmmGE3OQAuvkn_qm_9O9xBUNaauQyP7!@_>ikyQ-Ii zDX@igKDcD%N;C6Dx;*qq$R)(-w{c#k-RhuKy z&=;{z$&O%iipbrh?u$W*0HA-zbb9%2piI(LV0rq1N9BDw28Ukv>C?@{Teu7l2Lf6oo2=4W)`MwR|8EN}o;S8H>- z9JR%4h?D@?nrqm`8>(__vO6C8jcvP43vgrA+X|0wyQiCt90bNPqe{?=>o_6DCD!Q! z4^Z0>aPzG=FZfkL971-avG@FAtkkjc+F(pVFq30#F!d6j-*xeM zfBkC%2M)Y(2bSj8jQFUVtnI7aaok&N$}LfQ(S%N!#mY1+eJTd>*d$N;BJ69hE~4Ed45@3)Kh>#s*9L zEyq517c#4Y1tpw#Cr_Q49eueke>5)bv98DNdMO4?`5doVCM2P_LqV_y?Kc1#Zs8e~n&73Bv zpTjp5ms1Enc=!;`!veq>$+k_QEEMGwu$FE2nLt9DBf1P~iRfsH1AzuQY?u6w@U*PU zy7Tq)(9wN_N&#RLRj9A=>wu-KR3D^N%KPbaa#;zE#sLgqm}@MdA@>NSfNJ*P52kS


z$7f0l)DQ8`QAe)_A3ln%e{Oie*wKoTOO8V!;vaSB*pYAu^!P)kPE9DD;T)~RID4G7 z91YAPV}|TG2CJ6p#-m4q18AtPcSO>q^!WHhX9k>KB;f_V7VHL;(}H@qDqdAG0HU2d+qJ1)a_Ys_!!?#f69I1VIn%u_Yiz6g2ZohwjW7= z26DOeSdLK^Z)<6g#5RrMCv5J2Ywyg%a?anre;H;p46>6YF_s!-Yay~Ep=3#l(!zvF z3u&QHLt%!jEeMUFQfZ-$Ry#A5(jqM~sAv;fEK$$vb9MiIzx#fU`*`j@p67o4c#h{f z=9ptfxvuZ^{eC{@=RDu%`~5yKB!m*p+W1LPamSnMuPkVE(?C8y076`!9zB5XDXK`rX^~L1Jifo**O%Z3`!MtEt)9^5_l%kaOU{GauLm1PUVTxAXGs5~;`V z{Xi#Me_Cy`+VloO?K@{&v{3}HOcFfJ{EPjM{uTY-TDr7g7A=8v7+yQ0TA|a%Z@XP$aD}L z9m<$rXT&ss))F|r!jQ1{=tIkrttWC|ep-C)ZamfNj3ixFUjp z3x}q?H@DO|SeUU($!~eYK)1oy_Nh`DEqXk$qqv(ywYjExQoo9hDJO&GxId2{Uy%P*vn`|T z@#bS+KPNR0G}Hc)Dt{+4b)Kxxj%9Py8f&~tQ_lqRN&f=rM32Kyqv9h7$(`#?mCm0) zTv=wI(}AZ?fBx&I*wq_v)4QhX7q~}D0YWNz^cwb0tftwb(cVQ@!&a+kGY+dnjB`Oj z8emdjPo_y+8F+LDOA_`5utMP2qi8FV?TR9yJ7*mOhJw^7hnjl&y#`vbwl1Mh0A?tY zR?2qEa>vSa!|h3qB@^=NS}5)eC$a0vaBj$`CwUj>0bQId7yyss_BDY<#I!ju~{o@1}oj=p+h0TRv9({y~5?!c@c9 z=;w+y`^ky|C$4ekM1e?{WqpJRL zHE~wIjI{tT-&qx4LaGf8*$6I%bqZh9Pxl0aK*{n&`?++=P1@ZimsdZUTs<8HoBpJ9 zo`sRpDu(2u%4dwEag+#}&^?=C-b|Fyc6Du`Awg9)QAVipnRbYV20wS6fSR12>pBjm znSxsulY6yQkBao}jJ3b$3NuiwU(2BreLQ1iWHbu`5L>#9C%l_lg_evxqLgwp-wA9> zuyf@9J2(vqnSr`kZmCnTQte%dqD~R^eBfC)dgvXa zR=~*q_d=Yj#^*i_k>u^3ybLC1M;!)9xw*N?C9BDwNUC{1FfnqrvdzjP6Q(i@laf+@ zI8%f^9r5~tuy9RmG5vXgn7N_tdw6mRd|mct-7iWUOpq;x&)Ochq3Fj`OWa`m|F$hd z0AD7lE&wlhdjM46UqT$4xb4pWBvtv(yZrCQ3CmI*#lN&Kp~;J2n)hEeiy9sS3*w6J z#Z0E>~C~v5^fM`4Iw!Ok;Y>*-6DjY_pGDcBV>s1I<8?O(SNYq8+ zHfdtPaEq5G_r>?o+l!=Rlni(kFOK|pd(0EPUi>;9?naE!`^=?l^`Y>_s8>0#5MlPT z3=%4)H)2HO+O_uE;z%kL75~i6#>xlRDK{!@;z^N;sikEmkC>{7)Ils`(w@gck@p|; zB@YMA59Hvg*3%>nA`AIRW)CEoU;8JmbTwYJie!AAES-!C)7rj~Y^nQLCnvcPs27?- zr628O?YJm%r4t~GHKrLH_<;kb(B05vYa)!C+FKQgO=fA~xn7&T5CVJkp=uZ9KMl)* zVrwwTI#@*b;M2*ZoShJy-kIWMWVD}kudrReHyLv=0ys581zeg|n z_hrH9jQ5+7=aKD`nhRDStvSK7MlunY-osa$S#AM;F~I^~kEGQN9U)7`^?zkJaQxg2 zzYL_F{JDYQB;H9c0D3Uz;}H$l@AJ#Gq0Z;l>FH`UiMb;%6koYaYiv*!v)>2H z%R5aTa;E_<;EUhlExo=b8b>*7|AU%1I49ZoV@Kcrps(nnd*RB^NzDB2B|@Zk(jOf2 zG!ide5_W%qm&BE0rTVz8rFgc4H#(M*&A{_FN~5J~|A zBTz~D{$!bGw~8zYRhnt^(q+qltf4XSmJSs^eIv2*n@vAk;^6zgNZB|kgY);G0D;c{ zIgVV5t0pC&WoQ_Ii-{w-9*D*v-JhW`a5B)Cac~ggOiPcNu|y|i7bMr1w^PcoZOBH2 z9u|xc$^&gK=6`$!7*=nDYZ^ChbH%z-63M}38eYfVw(mD}_;jeIpgQMV(fRq)G8ah( zH@$zQva{9NG{tfgN3aLDfTgF2%d{8IzK&{t+H23KY|qaTJC=16R8%Dl1h?TyLDWRV z%+1ItqV!}E9)}Y;v(9Rr(YE$6_lAMDcalRvWojW;)YO#R`F2BT#!-u}cl*3r8WQI; zRw5a8$O3w>&9=_O;dJ^MY1go*pR%QBa#=}VQRXPgbz`}sy#BAaG)NiT5(((1^~SSb zTV79rs0{(bQ`FQi@|T8=-~A;*=p1|gQusP%?G^X$b87bQ`g4YyUwRamn5-owS9_h) z>u54c;g3o$jeNRSIV5*uNc_)ZZx}3(N^da#Msj12AXEEi=AO)`X>u@ixX#-(GazGO zYu#q-5b{5I-h1=8dS*jaR;!B69+jX$X0ttAUt8bT`_cZv@4vLFbdgx;Z&VL%Fz+f^ zRIpJ`Ns(=?;ElBS^i>82k5)y&>d1$HYS>S9woFxB3zU5ToPp<^rex?zsM7KNj;(+wD;A}UI zcKrN~vBoF6N=BJTAD%M^3j)t`4H82ZV- ztgO6KI8fr9CLRCwzz5oy!T30kMRxSFvmWfVp3;@|=~_+pfUp>e#9FE#=v-aWg?aSI zJ(HsjpY;-uTBb_ZoOS5Ci!U81y8ey%{y=X`)5?=6-$-nFcK-ZsLBTe#h3ZKNwwu@U zUw~F_N(^UB-7ko0a~&scikL8wX1 zYa~Z`>aWtjz3;N_mdU?&mE^fe7yg5zt4w;Ic0tV1>83LjuSbB0{LRtE!(?Txp79;8 zZI)hFr7eGibKB#JRS!;uC+o^w+4$7MbMWYGxrawMH1_j;49DqBa>1tDaLYJ%g==LVE{%`F zP5duhc>0ahvC2w5Jok*}hT21s!!+v64_rQVNc+GA+wcbS{n?8Cf4$4i`{CP<9gy%W z51&1$HnT?8H8Fkj&8Lqa-rdkv-BMw3u2o5DLHA@~?Yo5Xw4KEL1n-Fx$}`*_xjr1gAk}tDy7i(oK!p-p2Q> zr!KxQ&YPEDVeTuqt=?R)x+4ab<(ag81 zEUX4~6BE+_Yk=%Yxu2vCXT?Zu>?<4bZ-6JwaIZtZ{(8k-`F#+*ZREdPm?+Uw2TA6d z>4+_9{m^Q%utZBrYCXSyBzjiy&O>H*mBh`|JkHWP1(kjV5Hx=m{Wn(J4PBtlkes8m zp`JQ&;K19~)+DWLT2s<#eM}n6DJz>fdNldu%dlkZC^7kFp=L_4ek~g+HgNRL2alM~?b}5#$0`$sifW=Nwq`yTr zizukN0pceAM;yox(!H=1*bU@~bnS3e4e25+W4z~+%C}?RO;6Q4+8DnPNPjN~zd2c1 zC*1IWLC}2n&K)j}VxEWh$ZGPURQf7#C<-W>n_QbczS4ITKJl1^MoT9u=rB1n zlUsJ+5JU^8AV0qXzt?T+ST%x%16>udchP*tl$p|wg{ZYYBSL6^US5B74nQNJYJ3O& z?syWJgGo`33*Cc&T=}|9O#oXv=uSnSySQe|?MZ>?{19)#5M)5WrR`h zVd~lR!qT2vPv!o;@f~b2eOvV**;~M#c0SlY;)Ie1W? zf#w__xc(SM2!sh|34Hr38+XB5cw4$TmKFrJWYNn}JSKIJH*VuZ(*zruZxoS@#jzo} z7y4>fLUB5$HFMguf>upd4pe81a^&$1rR+x!e@OQw^am719`qTYDpb9CMfjucW~vuG z9s8##EzGK-h%mm3kV%1ufMzSBfGvTewesq?-bI5l&uU6BDyli_ZgoSn zF!faHo2LMEYtJs#0Kcj$j?IMHRc#)u?qGUt%Q`IUVHE-&T&|ttTq%GW5Xb_0+X^}u zUk`IiJBFPMp@c5r$B!R(BAUpL;aq^?%=`qHO*T~6)$absj=h6x#nJ?W7Tr6r!u(d6 zyn;u8sShY5MG3(sKBWcNfJMuv^p}%U@?l_)8SEHTk<+G4107NYNGJ<`n#bO%VsBOc zGKDxiH%VBbBWY2U>)uPwx};1SCEwcXR~gN%sreb)Ro(0DAZ^^S2~LY&4hAC>_$sXuMf?eQkjZggSw}%_dp>w6v&5q*(#$dn@?h4smJ4g^MnK z(>aNWh`6GeasK(V4|!r=NkuIAQwL5RJeUO| z&R=f>Q!n97UT&R@#>Y7Mv5ji}_TPw{PnK@CwfUH>)eHvoUOEKax(=9xEs3R$ck}bd z^*|Cd`f0Ad`_vP**g$OaRJha*ULv zrvkcChwgg#K&d6vA6WFm8q%IlE&z5WRrfs=m^5~*w|en5s2yOnQeT^uje^|AybOFg zI0B;GT-o+4Rp*1+=a25&&U375@yIgA+=6|VbbHest(JdYeC40BPK{Pkd05*&wRy#w zs3P?YH`@gZd_`Q#EheYteX3BSK-@I{bD=CYdrB83KB4DepY?6E7(T!@t!3;mv`9NO#Svvw}`>E zu)O6=y$6v7NL3FHmd{ULr2N#SeNW-D^K8KLkGZ7*+A{EU^G<$~iq8jPEMSPFbmbrO zfA90Iqr$#PweVn}q1pCQTn6@p^k<9hldD~zRD+X_>m2<6JEA)V;2Zj6P1(@PeDVqZ#9>bpIzW~P91AQX~N^o z903CADyKI zN|N&o2|5>>*U=Bf58T)jdm)5%e!4%SL4YgVyYJEp8cq3uoqaM+Yg?F} zElD9{ElqS@d}X1I0Wv90m@v6fNkzp1njH!iS?#DIp&Y<}oxBC20(Roljn&<=Vk z0P_+_IU|*Gg5yG$PeAGlWS1!@B?MO7{IJFWTVjqUUNhW*mco_!>mYIb$rN0=HiGcv z`N0wS3g4MlV?@IOE33b8BEd9e%iw2kl$l|-lM_?;m>^qIY}w-Ksy5^Yh*sb2McRV= zNRd8JPU^KCAD3YBoql_h&M?nXN&Nyna~kL)@wW5m1JTK|`qU=cL4saRXC(9dzzB%g z%s@DS7Ke)=4(TawA;AU1!$>aJa53;^$1AV)`$@LPR3F6>WqN(J@27ocj@ND|%sx5mMjlCX?*KWqG3O zAxLN+fKs78bt&VPg*_Z0R!q}kWYUf&aU?W&kL=JgqDjYdfcPOy#aSOvder1wQD$Vo z5bTvW(_s~TXv}k}(I292+qRi`L_CyShL;Gpv=Wnynzut22YZy>&|=_VJ>UEYxwrZK z6t!vLF>IZLX1^CiEGUT{>D>hrhWzhJ`5(qnWYcu_+!b`7Aws;G2f?a0P=$?jLK}coc;y~UuPGv=M?VD8PhINz_va-b3CbStGh#hAG z0@S?PcP?AD%oaUSu&Ql7GKg9&(Z~T^=6j!KseXnc+{b zFSM*#@c7e-*640Fed)T3^bi7-pe!)sX4tS{_%x>J*F;4IPHfwGcW~5Gqe#WrwCT1l zt_3O=88Q%n_Q&514PQ~}nvNSG+yD(chp?|jAFcZ0d|_Y1Q-isK#~HVF<>x_0D^^S) z72|O}gjR)i!ML~t2?vKCIs?Qy_GK?W@swlJ-v5S{yeKyeFHHInf_{uVzWTW?R;b@m7s4Nzeh&l4+YmI(R7>qYo;p!$Z%_b_CJ68$P9%w73OjZ`FuNe z2E;y%mMiL6-X9fw7u?l8@N!`*D%*}5r&50pXwPPS+l=VWGHX+NTH;6nt} zG2<@XqfBJ~aJW9fL&m-?XY0N{t%W2MTP+`1xW-rgW@OJ_x(_?=mUu**YvdAF7#Uet zP}CMf)>;y*9!<)ArpW`NO%yBnb?gID+1JpB&){KJRYVhQCL81aNY8Ag8Zttn0%e=K zX0?r$KvBGR5(xz5i*W*!$Wq^k2jy%_<|)cE*|C5BpBqgj<$a+J5=?kOWWxyH*yujC zkydq#(@kUnqVmL7f{ld4BMrVZznr|ISsRB|ce5r2a-1}xYq5wGd=pgV z!11DG?2+oTXdqtzBeTorLkx`dSNiVTM~NQJ?N4%0>vR`eYi>^Xc1X>#QDqY78i&}J z7^sxW1Ghcv-}yaUY71*nMj9&x{LuYcPkP|-Ki}_-6Izq1v&5M$fl%nfuNNL0bhr?i z@q*kKn_kzClnB8OZA%7UUDdq+4>Ux~#Gom)%JjW0T2w)|{nDe_HTAN&Fn6Zh`)yMZ$ZqewCQo$sDu&^y%mA{f-;pRGP3@=3RY!uHK2+ z6N|Sw_y{O-1Udo8(}MR7zhcDnEpufav42rAt0qh>WF7Jr-OCz0(k)_(d1{MmGt&4y zI%R89-3&~JWW9d?nLs$?o^fHLQY}JAyOmT=HKX8DSbY0+>6z&(%*}VP4k0@0nZ00M;`;TdEPZ9sJwOYy`O<^b zyF6~)-ewP?2L=Cy9mQr&=|!1dUQIzTyo8)3$-&Ij)D*fO=65JDrcRy8JHTTaDJO?2 z;Rvn=#H&Bcdt;yanO=R|+H-E4bXbBO+c9*an3PanzE;5pdaxgp{SlqD^Y7f{~;xQ#R-!TZ+s#dBE%PIw>&ez0uia`E(`bZipGxPn-XS>&75+ zGq-M3aF?5pMJRr#<={e7Q#JiGCTCDf(0TY5AUt8tP>$E2LE3OTs4<_{)UfHU?`WzPVufkbnvesNnJ)8@RSK{}xGeq;nioEu ze}K2_nvb(DOj5*fV9~rThB}DdK|2>ZP%+Mc??S_}dmV=ZysXJf5$b>EILFGRXi(>p?AA_8Naz8pH#grTyoM+jrcRDn;rE^ku5joH8!aX=- zmm9n-7@UGk4E)IAoI7`}y?s60rt5h5D%^oj^8xftuOpv9Ebh#$&&s%nzkwhtDk|Et zV_#0$&mj}P(ST+)Y(JsQst{EIh!R{p!wp7-L|B_lUcNs6?`t% zEf1YPV{vadkcPAa&A_M-Cg5&m~8-yS4rcH&;AOSgEm>XMaV+4h$_;HfYzU~ z_2oXW50F^`&}R;IK@|cw%3qUYuo&efFMePOyXT{fKLrQ|&5Os1K|?ak#!6j(w})-4 zzYP-aWoI>u-YeivWc#*|QVLd4`^!1)FW~}b)^xpIEIkw?IYyiMY1kR`@ZH`}HQ3Q3 zuE@K$f{u|Viw2uWYx z(ieE|HP$YX?u(b2k=?SwjLk-(iNW$*t;!{;%ZU6ykw>^4d+4#I*K1kr1gB^17;x9X zV3CH8B-1fWTlORigeGV(1K`&z8c&PojH&;<$c|6~Q-MpFn4GY=SOsV73y%stcXnE; zIJ$mw@KjZOfaczHe_qWs2%DdiYE%HrlVsf-;TVNgby%>WL;*9V6Yb}fEi-1Rs=9FD zWKsk`u}dgMHmqJgiE3nAdvYM>bWMnzi;D~H1VGo|j&d_BLJg5d2pE!3*b>t^`p>K^ z+^vQExOTU0-GHE0%N#p*E`yQbHQuZfm}Pr!=H*>hvGpVt7d*>KKPdVm5}Pp1y^G}r zb-+oxFf<&i`Ni>d!Qo^lf${wuR}tE3%?HH)3P`WK$+|oenpf1vzXK5y;hFqLNx1v# zymeIKIkTVMzyAvC*0HsQl1?ZaRBe_wEe$$;m_)bwEcWqG^?B7jHCw*?Edk-FVZMTL zy+hftgqX<49Rn*Osa~Vk#D@_J!0ObT061W}1%z#ebB~L3x z08zfZM|btZO;`NSoUu>c#TiOj%KWuH;9@c|{H9~&UkH65mCXP^pxeN{y{KBc#~X z?{`5^NwXU%avUz!jL6ePv$M~~2W}p<0NFhZmM@d$%$Z}`Fp$!*Y0o$SZ%fFP5WrPu zzn~hT$_$j-1|gM7MlV+AMLES#c%}And)v}NA#`+HoT|TzjKajWL#BT|c<>~_cIBAl z?HntigZ(BojvnUl!hjyr-vS519UeuWpK5y7N?~pVUA@Qj%bLMS{Yd2_O=4sbgH*zz z7N{h8sDtI9X=&w2+u{myOk#_R%l6$S18`pP>K^@L(S`sR0&({M1f7^w0eV6Lh=j6W zyGbFK)xBUB3}@ti_)fv+x@}Zv3tA#+7xufbuwaO>V22G|pI1s+Ns3q}g;?pyH!S;Z%&T*GKdYDeW*^Mh1x>9jM1k{#aLdo*ezb7P;v{2+3=dk1QR= zVH8IE&BlPtFC8fO=^{?2yq`Dkm#WkE?Gir=-Ez)BMBJbV951>Qn2BQs`nml$P+Rq? zg?&0uKZK_gCNctrGa1&?!=r}+af0>hE309C0u4)vox&^ie|;vE7F7R3jCA;xL!NSA zkT#NJ;kt%;i(OAWg5~t}vvIn$I@JE^K8%~CEE*;!gXD~nBPk>Wb^`A^`vkk2;) zO^8s`#q`^=G2O(%Ld7*TudXHM+D5t~%y;mW<@%{$aA@0XQ&k)o%KK0)ar!%zTxGCk z4kC1Va)4SegJoo7;$|`O@HKeMU~OC>M#3+xh^nft#vh;Fs)El=t0#mBVhHRiPV&ZE zo>!#&X78E87>Rhory;VX<9YQd)df2ReyAxuGBVpSXWycdTN<9a{oQ&#kK>;|U%C6a z`m@rqGGVNe^KnG_g5SD(&&&a!=JjO*ybbUx@^oc0^CyN%0eEi_iAw<{Xbeth8Kg$? z$H{jb>vymAS6)K13$e^S(qkAs5`5N$^jb`#-rGIYkHCVy;(Z(|R_GSA50IpjP8WJc z0LW4sn>i9{a1XE+?JtSrO`-Ml`s$i!%9J*tiXfxJPGDJSRYSvBe}5Wi7mDi`G@rEf zrEWy`3<0rbfTq#di%+3YX@SOCCI>9*o9DWo+^G3pdn>z z4ss($q-tca1BxYT7=mF7IRodHP{@h-=iD6HBgk8DTqZ73zOd{jnI&aA|FV}GN=IrM zu0S&A4)MpM@f-S*+^7Xd0kr{x=zERAsD>NE9VHXX%FagXh-Uj89riEgpAHXlio!^d z*4>@qk~ax_9b5#n)AXP@*U|f(kRGR*fAi*ZFhBI6oL9~7-?M(I%^9CfGL%x2P6d)= zb#qVHWrLT`pM!WGB2-5kdlu{+*kb`{DM`G(zCPR-R1zDO;)Dwk&hk_yYlcbVmp*86 zVdi)X890saaLnk*Zl#RNoW6BE--?2i&`9WL$UDEcDjHNlnB*j9eiic}^PTPydB|1M z30tho50tmz-CCI)lU#pe>{%$m%oDLIf1;#!3F>f7>*fW^I+}H#^cw+v?Yb~=!m>iMazRR zM`)|gm)S}~8sxmD2Y757X^)Sr5M1HsH=}95R$uK$eCgy059R`nrIe%fkd!Q1{y9_j z%Z?^Rh0&~ifJ6@yfp;ncoI+`>12)saU=Is3o%wyVT=e_&mw0cK_GoO@35>Yj>J_7D z1`ZtSv&GrjgQG|Jz5??>kt!?b;5y*o5S{Rjqlf+y={f51@%H15K5(eB>$DG$mYY`f zq^`$|C9d{<-=RZmo++SbS3#}D!`)H1EDraZN6jw}tT`q%5 z*ci12CS7I}+%;RniA=Zzs6k_*iu7MS|GPdCD|e}%tj%K1`K$3~$3iM8i@QO)?|l}6 zC27`!)Y8H1^{Lo`yy)ndapsvdeQ!Gqa;hPLB7&khfe3x;$(5gfodGSX*Ux}~lDzk1 ztypsV$`XYbJ^WjGRu@Tvf;7R3KCr`R0g-XO!)zuQ-%;-U_*xrdMKEVyi!cVH99RWi zzo&^9ktZ#vO#31=gM6=`1OI_$trmlsLS}5!m3c%vR@Zo$eJ^+mqS@v<0-%%WKyge{ z@>Z9Q2mIX?q3c3wUIg-wV=bMS_tiRb&h9T{PkNzKr%btWOnqpy4pKMDGdRqkoWcJ7 zKltsefAQ85n$pvrOT}=m_~?!^+a?@M`-v zzZ53CE{5KIu;{5bh~{96?eijx!otE(n(U41D%lc#r4`rPxpgmIzy1hgV<5wTFJ8Qi zzKQJ&txa3Z4@DL!t-n}En4>ktgkY^mYzYhs@@i{HW?hPMN#EFM{`uvHC^D@kV_Z5* zP0f{!&Rwu`d&hx2K>9RHM_@SE(cai`Zt8~LP=g?2q3ys6>l2`73OwP-AjCXvFF5XS zG1Ha-xBzqwj7ph@%@t)dD9AcTXjhE$5tXBb z=cgT>K?Qn4|B<_4AP08qr#mJ(+c_Ap27U4H0Rt-Q>vy)9Y|hgB@cO6p2bx~_83B@L zzl=ybsy36IS4s^+Prv``;E8dE2 zx&^l~CxYAW-@iY(UagD7X6#8Za+BA817mjog>>kD5{I)EmaEnpu5VOg(fceusnim% zGsJ1kA>9*@+oWX0C+4-k_FttDS#SPr-cBVG6Bx`17Kv(!3k`QGsyr%5l`ZcT;F12% z-#)1OQaOG4uIlodX|L+de%Laz-wXMx?%&Uix?nUReU_H5Y@(~H?RYQ!nV*8wf6^ZI z$K+F{cc1iQt9{pNWNTq!zM*jE4s=sd$r{`d?;bnBbMQ9_n#Foq?YYx(1I;rXVdf?8 zh%5@uw0PN2WgGjAbC>+P5=oc7Vn%=z_|}SU|4v0?eqH>pAsk*^wR%lD9T?fr)FzaPL9kf5Z`O@f~7h!+E#o1 E2m3JYL;wH) literal 0 HcmV?d00001 diff --git a/eBPF_Supermarket/Network_Subsystem/net_manager/document/pic/net_manager7.png b/eBPF_Supermarket/Network_Subsystem/net_manager/document/pic/net_manager7.png new file mode 100644 index 0000000000000000000000000000000000000000..8cec2c143219b310bd876aa8f40d458e51b9f00f GIT binary patch literal 53174 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
pK+1>CIkOg>cELR(VSx)=HE=L<5`w ztD@WlO>Y93FI#kBWM4pAG|N?1IQRwnj(c|Pp3b55>fcu6LE8QUMZB$M<5TWh8{9Sz z$~MCS9S*C3V-#BrG=BO%6}{0~NZPHvJN=2~TQIWz*Z2LYNRazeXOLkDdSi5;HX{DU zM!jUl{^`~BaJ=(QExSSh;Po+@azql>&GXu&(418Vt=Vb`&G^r(&^D>@Oqgk{1}KzI z69nXsMnzp+k5q`n7OwG}oNM{AAZnM-&S0;_>zz*?>BNNlSIS1SAKuE!C4aGEPT7Vp z)C!}{9=TfCs65s5@-0)*yN-f$P1)+G+R0kC5|6cYQI@iR?vh#9INFmF^wi>lzrtXj1!3f1p@f(-2=chQs? zpW;tT2|wM8aX(iPdttyKWRV+KH3p3OzrCUQ1pUw)fiIfTG_hplE|02?;>{_p+Nyy- z0boHO59Q2}UR+`z)^;pzH7CwrH>+6I>WII#cCKDF4H*rKC5Qjz!`TuS08l=^ZODEx z)SwwdFC=%EUhffOxztR0dTRZOKy10517#w7b=ml2-NZqt%TyR^tZd|Y7IxkxNV)Ij zj-=CcA-6%c168Id26QkiXECa-slq=^3U(J7fm=>eYGK*l98VF;~m+tH2bRKux&`B@}a=j;w<%<7YVb3wvYMo3HN7u=l- z+qT%Jr-xdRYi*bh0uT#IuQ(bagoy(~XiwhOs#lrRQ_G zR*S*nTY5Z;HW$sbZy>Oo{$b+9Z<80;MzZ1aJSyVcxoOsTXF^>|NzHt1!S8|jAnvFh z8$A~yQI_ALYw{D&R8mRmXN4AvG?fqglG*Cwa#F0ZIDI>;bbO*i_wH0WE)4}Z!2Ha2 zZgRh`$RDU;b?e`h{^AdFGD48zBuc7bqw<%ZBRl_S2!W27aYSOK*C!0y^ zOaM@0(@E6w?sWNCj=?=*dab*t6TRh=HCd4F-V2OhS7MRW&LA`8K}t^O;}KhY)^D8? zX6nc=;CrVwav52p!{$>w8TX!&jhw*JU=E9rb_L?6`Kx+bIn>j2sv~QugRCy5bB@WO zmD$=>yMs+CbMcKYI+T7~PC@WhHEMB9sd#7W8zF9R+gG76FPU1ZATgLA8hCtOZ%6l0 z!Oj43X{2XDm26s`v!P@>LX`BGu_e9tiS;q8C6cJyyFBDat@|o{42C)?e}QrmevpYk z6)XT>e;^FlsuEH+33@nTLIB!fJQkl%lGpBu>(sT&$#jKsM2sDEdO<>=ahTN-TA91e zXr%P`4cZ)49OG%I8uLub{$_Wk(|sWG5Vp63ED!2cEq2WVraO!HQ$rD2m#)aKpYQ6G z(%l$1W-x%t+P5y05MoRqwwjdVHDe&X@_K{%;U4vsu4aEc{krKS0KE(e8!_}VrBSVB zqZ&CB=K#L$iT`xpkXjEdLhN*VzVAqIVHV`qD5Ko4Cr&5Z?T`Bb%QMwQsg!&)8v5FH z8Z6V20JR1t{ZFGOO@PS0lHc!ts&8UFg@0D3XL|#$lT;%b@T?OIR*M=I_L{d|dF~p#XbwbVy zdtAc9k;v{$)t_dK#GGA;sWfti3%}Cs--72MSM3JJYv0rrCiSbDCU0Mft}u-gkdTnZ zRJE6$&qvOPsJPYFI&|I$!ZyV7Jqc`DSfMiS1n)~c?B(-2$bx@urQ-fayHl{MNy z_-YQ_@*O^bCV{WT8+KL3V+zd;TIxfi^R-JIXZ5S3gG7q4x%+!hQ_O~%V=bDjYDJSt zagz&{lSiRG-BcIX4_Wk4L3V7Gklr?6Y+t~0(YeWE zp{dh7Kv^#>A*YB-mH+oXzsGZnthM<9Pht}%6;-G1bLv$kSX^4Fxeb?X>5++F6^OT7 zsv0g?oV)9`|LP)w6K%PM;GFX}T8X>Xxo*6aqZ|@UZFfS$cYQbkJ+1xFx$eDGHGb+J zO(cKyb$TcBMq~K>IScY;DdHvO-k9yFmXGS0b2Y{?SO}h16kbAVSdoESr*3#XFdEAXSYoV0XG4QIGekZUX@H98P1=mRKfN z?_Hu{+-5m??MD~Bpsn0zeZy!kvm9;PzRNlISGqqHnqcY)ouwajl|0t6VZ$MNcoWzt zUR!jpxId*1RxeUXKg>WZ2{OV)+rf;4(s%Q(b0@GJPc$F;O-hnY6HAP{&(zzR2mgBT zAHOOtLvEcbg5JjR|K32=#(bM{u5$UVR(&1Pn7w5)u?gWBcb=m#S-n)_DXM<8R)zHG z5cFS2VsJ>NFW7a~v+~E zVdl-HeLE$5elzSp?C|ZqKIC+;Y}d~$4rOqqg#|1U>&RJHx|c0xhmo#GIWQC3BgmNq zVzg(D`sIRu>3Z;^#?5?0G>JmC?#kX7Dg2Vgevtn&PJFVoi0*7$tE;J&%h`SHuyO#p zh@ti2$SxzIU ztWO#OaCq!{n_CQNTdL7x1Xz*#S;yxl3sJ~+y=RnvNB0W**O6{ZCFmoKGaVZ49ILv7$3(pV_<>gk_^w z`{DA`bhTccaK<+HU4GAJ+KT9#t~kuJO-u$Yz2(UK@W~}j?6!V4y@C=;NI~T)=Km1= z?AF^hK2+56Cp6lCv$k>Vq>AX%;YK((Iejx}{2_5h8cUG*;E`y#+iHfhV2RKYNMOgt zGiUAjK`mu5W4vq5&~mPFFykS zHq6~SH6s&N<8E$&V~aMPt?cq%R0I1CE2fp*Kj8D-k^W)5K%@#DnGV0jLvo6vlsV6j zONan&f?Ms%-p}bb{GFRU`%aplZwvd)8wbcJ4uO*%tmwxV_X$BX|2460Xi zkzi0)iybIq@e2#|?F$zVR1t>d$25p3rdxz9D#Jnz{H@W17L~b??5=JKv**Lu9NfE| zC#1NkGMq@~IIvxUpiss8fQ=aOxzD)Ps$4XTt!&}3Y13AKvy#py(x_$1kj(%g=A;iO9c^-FZYxC<=n!jDTayeUVmJ#lXH14hg>>cC!o3j z2SB&+>-2iNV~%+hx-pN-WoQP~nf@h5lA3}&<3{a*@cZF^`ZAEoV^?TKu;Hs$S4A@C z;r7f+Eo}_iJ(w({r5E(+3~9Xk&P6GW+g_JC74PNxXXW>>9E_EQ&Smi5Qy-Es`EL_c zf&Da9psfO&Cd;kC#JKWQO4VWvWM<wT?}tNOZ5Y8U|c&*^agBWd@Yp{+4xd-BpG1+rFJ0K7R>S2b`{Jg!=b-SlK^= z`~NEJ-BfXaAGrMc9=bTe7s<91N%*-WeMMzOq=Fk**CP8Z=rHz@nANf=aiRs-~o4`A*Y`4~deB%8mMJ;C+Pp&kT?h3;231#?I@0-4kz>!p&VxEH4k8C0O-% z?`zQFu`h!FM9VulOkB55Gui0pwsapbzl72pd207>h1W&qlKi|y+wnVU zJ=p1jgZ1}2YfCW#kS`sPp6%a`wU6XBo}Z4+wxqUvmYQSCO8(9^g#3MJ)WIp)5${q(cb=pACTWHBvzKa3T1=&|63!|X!neYMCP z`*Kf|5A1vMZ|Y)s{xn)U+MIaWbp8y&6r_cUT_BWY0s9~zxPmEowTGVGZQGu=B_ zlPnPzID5_HY@sm|YdbWbHH~IV8$J2e<8wO}7@4HY4H4$=P7T6_x zVE0bR_k@K+KdOaF=DRQe*rt0gV8#WD>HAtjU8vA87E@X=YFEI5Xs6&dTQ{Afo<6=TB-71 zV%N+42)nfXO0QqLRXBQ2Gj<5NLiq9Ix*(zT4oM| z;{EJOo#fbUuHRNLI(I<4CZ)qWmT_OPb*ZILUQ#J@PkypqI@^+YS-Rr|I^Sl@OF~QC zT1nRM0L81+Q_9*7;kaL?KL&R4vwU6aOm!n^#)!^no~t9Kqwr*8$@b3*3Lk&TJl6H>wpMzfR$av7apxPHGOJn^nj9 z3MM{)row*fcg`5h5ULKGE3mQi8rjiah9&zI8wjZE3^B$jC*!KO`AcpJAuiHQ4glK% zO|Dl7KMD&+O5V93#7APv%P9N%gSDKv0S^Hl;|6k;$a%yym^B$KfHCJ#M$h1=6rrji z{c9BDf-RdA_Tl`jPLFr*2r4EE0p3lt^rt!O{-h*J+tZBIs~ixVbs?e(;;b|Ky*X|j zM9=6*x*U`kVlWZ1W7JWt%y|Q!M}G9}@kR|}%3e5$-`mBxqG=wdnfZ%RkqjDfF=>}c zn}AN&l|1-w|Er+i#L_c$;aS^oE=;~@DdaCG-z#!n>DynYHi%m{6nOx*h!E*hk`W2*~o4GP-fDPluXU76$(Nh6rlgd5w$A+Gw|#*IBki;ISipA6{ncB~Mn2bXTZ3$JhY!&rmGN2tV9S`a z)p^A$tR0`8?0bdJP+Tcje7sl7t8bJ)*T1u$Y{9R29Y|;MRGS*7mZ+V!!WJ+;HDaPMcqeokc1M}JSS262u<7`*fS%^WBa4|w?0WczqiDJP%*T{R&u#?v_^{=PhOKbU6f z>+0&Vva)!I6)KZ{jm2eoot+*8<8oG8WN{=Lbn)-ta~aD#8`|xOJT%-H8AXOMUDw_0 z)&o6B21%pePxuhu*qtgG7=`5ZAOYyH(XGX(AxH@=$+9-pVdu+z3>b1Z3?#0yteY!H zDgbcMG)5bfWN+ebf2i$jY|eA?r|I9t-twxFg=V*1^rTPm$(2}~HSRvjapxyS)BD9KX4W}3A@w#ix9imG zxDYfjsY4+AIj`-~>Q2GUmn77XP4|DL*v10&U=qED!<(W{mqQb)YMf5WZ9hfMvK(#a z>3USIgqwCg?72_j{z{|o-b;wJ-O%AhdbF=rIVUXBBz1q9Jln!{lWPz4mTo!UVIjz^$*`giTlitB}Gp%|C7LB@Xeoo2Zv;vMv^OaiMhxV7eqE9WZ>@L#U79!+be(6m0g@KrUF>dC@Z<}G+!ki;Ro<9I~}QU6aci#X9< zYa9Xtoi)b6#Q5R-M{+K#Xzb;dz$p1fvt4|p5egcj04U~7!*{Fl1@LlY%f?_VK}+7$ zeg(xv3^eL|DDv<)f2bls8jM?UV>&-M&x(92X=0qwnG99rSruuN`$daJPg3rII5dwN!uHN$;a) zRB%mCJq{yU*aFt}gsFVU^jhdY>q^Qd+~T$S(y3A=xR*b;{!4OiK%dW-Lm6&1FE(3; zyRQ0({`fNct4vVOv?OzqzNZjvou86ME$xnM(`;PzGw8~^A!$SERW1Q?^nPUdlJEr(;Y4={$U{nL}=`;fpoKN_1Qc~j6?XRqW1 z?QtA>nJYMbj_#$%n(^RkElD_pnbUv+kqR{dL`^b09!}7G>+;E&7 z4;X$CX#eKzf(fKGTv3Jld6vvGIREs2v-@30#TNs0Vn&i%x8qb+`-=fbOSzt|D#7cK ztJ=QPe6K+buMR(qotkVCSlXX}I>lzIR|lB@hZS;j`%FA-Joby6JsW3RsHPl8jmO2D zgfX?h%<0F%Ec*>DcwgKgp8ViR;Kb*}^VA&pFbE&TuJ?ZkqAk8?IX_CG*yzLUp-y-3 zK`+2DBL#$Ui1g;`T987kBQAFkAh)=%e>$hLsRfrL$!=)kVmG9TuNQtU#(;(?Z^aZi z&6M=`UJ`w~p-5IAYw$(nXEq+q&u_}MPWdWT)gp-8vPJR@gfJ*hcgZje3ZH9~Z`1K3 zQqctONH#0Qb%d2D_11rH+54>w$g5Y^?*!ME!X&8_jIexRff4_^IkBFS>wjg$T5`Q} z8uyktWNKmi693pAkLW7QgBjYmCK5L#dPD#^n#Y8TF`Ulp))k_R;o2Bg-!= z-`&^2CmgJq%-$#{W*)(RGFIbSfB;4yYq1NBw;e@kp^zv5QAhrYT(ktc?Or%$vTeR+ zM90q;BQ`CUbc`7&aL4@(AGb?j8c{uT4eP~@;kP&;Al@8B4_`y{YQgyqZ1GH4r$l=i zky&L<0Gyqu{`^>@DNoe+kTtvHnhn$2fe#r~aRi;ZRi%|MVu-6I+DI(nnStvM98l9%NU z^Xt;>MO7(v)z%PIkx@5tM@@mzm}th1^7ZQn+u4;)hNc{8h1RdMBXV(e!rzYLAoRlg zvTDA~4|PMq+dzrqMq9J&Py4F-3tR4&Y=H`mSs2K(As#A!$#-$OD!+^AyktBg*=oOM z7Sn1aOm4kn@b9d|AMDj1XJrKSD?j+a9}?%&zySf=qT_6uPQdKn0GY6HAgvD29sN`M z@y8d4A{aao3j;EEiqnVyPiG@CvKD~psi%;lhqkwne!1J?aPYSg-p_-U*UaKi@SPu_ zuM={im9yQ>`u3`a6!q`s1lLt66xi)Q-jQD#G*Z7-R#Y(3(b1t6FQy=WvyiPEX5fe< zu`#tt0D!?l21a@|$hB2T$&XyR=`^VW7C1#kvM4CJ>5a*|twP^vCH&$OeulDJb5|Zj z6*0{Y|0qKRyH=@phWuzUv-bhjQ+X-BB8&rp$^BPr-V5*mHwk)1XHCcB`HKt z8m9zI5p2+|oGD{iip&7@blGeld!x*U`oA35{dkD2YN?2RBwxIgO2w=Y3Ln2AmyG3o zK|w~d3CV-{fgn~K^7o4Fpq|gr42hU<7bedf0Dj|=V~HFcGciCWlLDgT5DWz9K(w-> z<3@w$%&orw>%`Tq2FO+)OSG>TuZM&W9G4}pXD2I| z4_)J_Y)w>tIwizyo{=($d#s5c?^V9rMJEFSu(fmqKPFSvar%#7>F`D}m8k|(CGbU> zCdZ-Mx` zw{}Kj-14AJ7PxKiO*=;SGWeGhUm&42SghPKujEYr#eyC(ya;pP-i27@`kbHJysO>P zrr8ZDBM;HX1?MT1HpFT?s&Y^^-I$IMakpmL2ic;)DvdY!4>A6?on39i%SWzMqiZ`v zDpJal#?rn*7`~JGzsB~rlYOblRO{X3xX;4TjC09q!YU=q>)ADH4=xbL(RI;Nv3`s1 zqVI2TPa^dGH~Ytt(@1~t+xgE{8?7sK-pkb*-#*4ja+r-K<%@?mSudU0D=Ns!t~S}O zb$DKfd@|Y_(`mHgGXDMj_(1COXF-n(!?X2PfYtlXhJ~e?zLNT%~fQ4{|5&<_(k>Oo%1!bcR2NToyZ87VmOj=fU zba?o1ra&r&B~`K@A~v?_GJmt9p`js#N$2i-%YUWLjE@i8;L6WcfUE`Qr|U*5y!C+g z&No-K{yj#(4sXUdUV7XNOBApjjt~-d-uQ#LlSpzd!>!n3LX*9Iw|1-BKZi6%n)U9r zQ0AH7{WH0L@?ETo^f%Z;S}l7b1DeF>2-|;|d9@DOP(J#O#9Kd~C%qN*bJCq$ zy{)l56*Dx@7QJ(yjK*Ug+rPDHB2>`&v!+k&N3|MXzqi;_{h-2j98)U0OK+}{dPetO3TOUxHBlv4QL@O!-4gMfeltu>>e zpfuLid6C?gtsA=i{T-3apg}6&_N8Fv+d=fiq;6j#GF-Q0DY@a0zjm++?FAFj; zAt9DbMA&{)&>3rEB#~~S(Mvx{&+PgBTv1l`c(GDvFBk_Ukd2KEZ~&{)=t7Au79L(I zSoKzxmpfMHUcb^Neq{JJPI>~NHa9orGr2*Vo$a}~WRHD|u{;q}R!y{A$2iQ4V^MLO zDJ=L`wL|sEThI`}`{u}HyrDF%miVh{GN~T>c11|8k*ChJSN1X3qLr1Mx;l|_Vma_z zA;F;QH;4p75QMMp_8%D5&Y7}Kggu&j_Qn^C*qr28%X72e-`6FzuX7rj-4Gr>a_vfl zmLQku#MwgxR8Dg*GxIj`HU_#v0mC0g4)-@E*45zvq2qgt*2X=Ma`T+*EHAaxU}^;K z&qJvh%2*4Vi{eemK z)8*QIId0q4q^vBPGe*BRhSya#|M2*D>Cw^M{Qy2DLb}Ce zzEf?s&Gv2P6buR(^?+s8e!$i(#bW>#NM@7MjhF!zxekr9 z?>TM#fz)FOq4O&+8$KXVPtIs7*YE^YgchDhT2fgm=6g9+kiDrdVofwd2 zE(|al{*`4yMim#a0`}~f{nIdQ;B0QoWBaJ2ii7hlU(j5?eLubkT}HkutzK)F&&Gsn zI2=jrWQ0Nj-L2(v@o1-q&1M)WksIA<%B3l`_|X@BD6_ORN4svx*S@K+a4wYV#>zh+ z)O;SaU_HI-?Ov#&E3KiB8BOu`_!)~1HxSqXE&)ALQ})X>Mn#BfOp9X7snwdbl!Aim z>yw2u7FXBT47uA!M@Kt5&R4rK&T=`Gm7wu-j?hnkVu*Oo!0PmEA|sOHtBQ(tgTTEjv!}s}4LQ?YWq8|;1F0EbI zd@4t8hE+ZPDINifHf@b$!UWFO$EQpeAM>hEtS4*G*u-SQw{EUj@%?g$3~WtGW-P*x z2{1`X^=Zlne*a!?b1hdZSI3dETW|Suc=#b+`fRJ)puIO%qAv&rNi(@-#U_ZHml!o_ zfKn!*{|_}St$J%DIeeIrle4os*y1}MCDb!41oR3yz#9*>Qup8kC`8d`)dPl zxuzTxFx}SopcbY0T4S+erMSm(vh;d--J67~wq_@9re(cU6%!NHo|qw0U>Y5A!0YjJ zb9csE@N4`u-pTR!j|bL(U@_Zd*>fDy$;Qf@yY*4fqk)I?qcMZPsw!#w?upCEOgT@e zB}X;mR-J&un`XqXi{<=Qv=Zf=1I8)gPRoPK2ZDZ`?|jvDrTG2$NSM{X4~{3q=`?K= zf^qZDX3L5{UK^cgw>ZN6{c1GIyS>)C9D!~DA;YiPhR91z`~<6>75La`h3{aZ)Vnxw z@#l-hAH)!#0;cEC@D`f&He6mjj~tcTKB)CikAL&Ku+o)v_;nh@8%pl$v4ySbi*n7; zOi#x_*zn_;LR1|oX@)byfa#`SVtyTB?CF>MZ_S(YQ60iZv#BVyexThCAn-XmT`G|T zaAfFX>+77{x?n#rjM$j(gG;>;nqgT7wgqm05Yvf}jLrk1aT(SIVb!KHiVh|1x9|?YE;?LQL z$#x7z@fz5G);i_1Kr`IA>P@Sbf>~7}?TAmICps&?*W=)qFcRxp6r_(H_|u9X7+AJ* zK#j`kNnx55jPoAcdXnQhu$t1JaBG-HZh)%bX$W1i`CAs#P)6*xl?N|kpEv~I(pqzc z4_&q`j23P69U{#Fve^CUJoqEUqeZLPG92oZ-&)&ML-0!2rXEy|YS!*@1PRI~2GYxx z+0Z)F+i>6cp5$MQPx?C8dTDc;GwoN5>4wGIh9ytxP=LT+x2!J$E9<46RGE@=D&SK~ zaT7!YyjOmIUN4!3x?|}+A1-vvfp>@o7B;qOyq@s;%Qg6k6Drm>HN9Ppv8*-OTAQ1@ zA5AfY`-@zk+v~N`HTb{3?c-Jy7E&jdh2e@hKmSnrz(`Mjb$6Eob}S8+b7fg3lZst(VU1%daLw)Sd?azPn&-)Q>ydZJD%Q;pMCT?yQ1 z@Q97QyT7+ztk80BaM=|z!x;bL2dm%90~j7z zG;4YW2M5;)^i);no9zu6we^(yCNg=v@6WQ+(-8nBohC3AePek(WKKclHZ7u}DJ}sGKqCx3)! zvBq{%m8d*?tR5h}F8Sm_SEoCqtVV5+dR_ok5F3 zeqNqv!HjN;0|h5%gV$hCaUwE3Tvz0+QrQ=~$_nFvRdBp8&QR8oH;EZx3SMb}N_7v3 zMYqN9j3Xu{2Ie0@jgIA|De8lldW;GQ2?6gNutA8%XZvaV_j`N$^X~{OI{AzSs|EUN zn*UH)7-t7Gj)zLjJ579=!DA1W`{k-_L!xZ??ZIoZsFJHDe(D$q?9C1)vrm?)SrSLA z%4u05xJ$68?ny_Th(s9Y!=_*jKO`zwFA&NnDOb-O-P+(n^e82X6)zA*+Di@9NX6cJ ztPGD#!v-r9FM%mny%?tk8tmZM2wea5_7I@(XDdwYU1~yKJg5g{33v|B(=qq&Uumf< z`E~kM7n-{uozd?>_Wr%FcGbcTW82$kcR8yX{S0nT_IOd4oH&(WNd_U)=XK_XB27EB zBqJsvu>wg5F50XrhO@y6aJr;F0AdJU?qJ(7!^P$wl>y%rrprGT(ufTM=s?Y~p}y>3 zNxZ@1YpRs`YqvB^$F+65_N z`*rXsG1G%;$6io&y1p)r_61$eZ&_Hl*uU7Uel@2naNP8WL$NLAyFirH*6Cj*nw`lowjXNY;DZS{12ivFT2&JCvxD>I?4OaXGrV+0Ffu zmzI`}!ev@MZN6hRn#X-_wO>~}N(}Q`-vsXrla-aCuTtY%1$mas9VTjqLopc7FQV?o zI~sPGQh`#>@)$a>-a_|{l<+~+Bav}@tKsqeQqh8*9I3wu;$qgG6*oJ+?T3$GaD>aR zBq`1zJ35?PrJUU59-mOvS0mKl4ubHR$++hHy6b zp}whk@x)Kup$w8hfMZm?lsGxCm=z$i(R0KA1a!@j8>3!mil({TQz^cA6qaahwhf+t zVPLYI{WWA$f1hT?;Bgn1$lU7MIsPrFTt_0YlKI@~Ks@*Nhds{zmg?nA7K^bIg$)Q& zW+A+%YtJAC0xW^!gC|H-z^1d4tB1nybI*7EXD={gk$I*jA&|m2cYsz;BxovpCyhtLLYA2p5gEu^;V)R{*7gN>Oo#=Z{Ikp!M5&01;d;rE1>yP4@NLJs6AuJJ99q6;+ns#e7ej{iHbHjP zfRzAJrM?k-<5<{lMf zcPKy%i2l{+LnQuHXQDs?(ctahMvLS#f+5W45(KG?Pfvc^S`Wr}P`*V`OZ`qIZ)y!m zK!SX5L@JkC*n5W5<}9+AlF1yN5+gNaxuUm)p19w8W|DiuegtCLbC|T>HPJKN zo;5a4NQ7OpPU1uIS-=TJ~+Mag)eDK*z^uqV~ zRaUxcYmTJ2-P*$TzZnDIkf+XSpCdp+>vqFLiF*5==Am=}J~p=Mkz7|sE7ek$>=}gUzbRTj;{7acskty zFU#++42`?0VQI7v(_tR!?!H`&k*ELh_U&89Pmr^VGx&Y3PwABNp<-ffNqO?WfB#nA4$SP$gavOQ8<2bPU-XsHfy+4sj^uK1U}3hwTu1?4H}#fUZlOxbHjSo zvm70ltP1)?SJYd{Q%?NO_xYJajw7C2x}ASt!^Y*odBg&3`Jk+V4Wp&vj9`P+X2hvm zEUQ{z#>II=M!UtYCMBv{>bZZC%66x4|N7i<&#~jN*T6xR2G-Nm!L8SMZ8}yxc(H40| znChGap$fOF9l!D}xLI^?N;aE5olDfvhY*DoEoT=B>R@>b3wKDwk+d40jfNs z`|-!;#-6uJvAC;_!Trp8aFtSqiIgoq zNq4B!4ALIVUr~y}v;5||{{fjzxYdfn&X)@_E zzOwCtEB%w3A8A~b;g3q>p`sS2C)A!-Pqv3+W%?y`ctj728d?17a$QcgJnO2E_~IzM zrv6CVG@VW8yR%#!^f^in`}qb1b{)#KyUnVYUq_!v&qt5{9{1tCklo`|WqggL=Azjfz>8LlP%Z|jdfEX->h^a zMXA_8kbodhqdYC9leVGzV<)SkMi@_rvOsY_aZ71wW#(u7Y+5EJlgr0d65X$>v|!ab zc_#R6AKqdf25E#ViF$ug%Tcnb_5PyqwiL16I`5?tFG->m3D22v*I}X{crSE~IF5#wSlJht|PJ$$O;*#@Ca~ku+OO9-!7#c386kGW;6ZWrvDe+(`o$6cVRW{^P%Ib zJ7Cex4|tsZ>^m}HL^Zt^FxFq?U}Em>?w1&9QIDk=>hJGoqMfWX zaeGzn(P|V}M=B7%*Qlu`%c(SYySXz*<=vG}CghQ0)b-;o#vI;yEfTvC;cw~A5sKIU<2p^^CURS;W9P*Cs7&1QM%33F+ocYyn*aKPIj(e`(k3l78yUDMG9L0$m)pSTmg7XYQ_wWXgH> zRJr-E4}F{wqeOL8H@$spO|FE`_0~tk(SRqTD`Vc}*t&g&ul#^^D%Qo1>>A>mI-R1sJy`;EIB z>el658Uv&w3wx(WDQmrsfm75OVG-@#mdzHs=}+i7Evx-9*eRR-r1<^O4UV|%RfEnJ z3rmeouxr;J+-_+7%3JZXovEgx=hDk!v*0m5&TzQDz4S%SYwC>)3exd zjAfCCjO_lR>66uHE~)nM&IC0P%U^v#SdIR#K_5KQLJhS%+PgCanRa>KW?Vl#m9`UM zN4Q5>niATSw5!kmbdBYyu9|~|l$ z%gY3-nIrbLYy0qd>R&CA1(QFLiTKs} zlq?p~br~wCHc()q^>*+>Msk}wxS!!cL^6)K9Thd3jg{(Ie#`B%y8UsRn&pdKy@LT% zYXmLvp+7~`=lfb)iGVJ=VCZAP43^g+q-{eb9Ct%bQ<#SBEq>7&vWl*Cc7YTyF=14e zPyf1o_2i(ZTc<3HdyJNjVW^bO+t~Q4rOVV28%I|IrA3bZGB)OyPq)WYk5MdoYXfzw zij|~0Gx9pe84HbCuv)~%T7DGO zidNC8dSnnc5*)af5@Bg{*5Hv%doW8*;8$C*KW9B#Z$hK(5F6KM#2~F~sHxUx8F!&} zi=`>CHd}qlXkwZa?TE5+0;?l~S({P(iz!Rc&eN6r9$iK9Hyf2;jj62WC1jC$QJX;@CV`qZ98PYSQsjRJS{hy!JGB zrup??li(8-9vY!LA5x5?r{2mG3pH}~&Qi{vik{+uKboj)tmjI-eBhl3tVaEnnw1ny zt~qy)oCvTCO)g}=^D{Nwsew!A^YwQtFa)%+77HV)_dBet{CN#6+nA`7Y&BN&QLDY9 z^0#e>?mx}Y&YDASlZLK3*>*ko!R`hkw`EgTSZgs(m6WJ~tEs7;gN0%`qjtPfhRfH{v-Bx=e%F5r@8%7`G z))bkUyd=N~KO$W*TvE!WA2H{2aefR*f6U|x8UA3Q86Hn(vosCuHVW#_m8==O(;bk3 z?zP;!*G!^q<*hb-HR!W=;I_5GvQB)l&2yO}NtURM(ZNpix<%>yBx2E()+w2gEx*zSektvmL)VfEv;GrI>RZCw4i5^3Y!j6AI^vs| zsV_FcU1Y3?m>r=~)K_;MEgd_3f+!1@?TIW{MlHSUDRjs$5FvNL!OJ%BEj9AGy{oFK#jV>P6}F(LJ~}z%8uxr{T!>U33JM{R7l#zRT#{cFaAJz_QTjE}(+q~cKXFQi`{r@y(hxA%W} zYBS=NJ=77lc-%%5E!J|42%u}%+HL&H#U;wWYMOFNq-SJNDa4+np46n$ELSUc^ylXh zn$a=dr#mZM41w^E+utc8K?6s^6}2K9YqbcwpIvJaQ6hr$hnwBw%L4;Z{`a3 zu*Z;bu7JgU?oEcpHzHFx7;FxNf>uAW7!;96_2l2g2Y7~qr3Ym_nydS4vc4;AZE{+jW2IhlTCv{UjG0z?1x zDkw;Af6?uFTr!{>X`Ead#Ysf{QDz$&T#%!JF=FUYdLplitTVo(4;{`kt~NUpKT~O2$HU?Mp3pXg=8{rgO9c^W_TAvX0^HCp>>5Eg@opr zaIHpSO331}jc8YjD?@12jW8+2=ia%TIA6F@?#X_?GP&Xt+pomdKEKYx!?0wfS9-Un&QbaD5;Vu6*(t?{_1d2;I2R@BB+U-TjO|QRuQW&(;Bs+ z9$V|i#i4E$F?=-_RirbrG1j|u%g(C!@H~hnM71XOOW#0CVm~hu5AP0BUwgdsLXV9a z7DhzS!nv=P&-^uo$w=ZWqkvk1Yy~=IGd(V>WLTX|Sv!el@NP~ynTy+&98~$0oF=C| z4hEAzvr3WTu&Zl-NwKFM`aZO^*)!<_q!jd!8(@GEaT;4 z-Cp?&xfgu&t!+L^wU~k)6q6^Cj(M-xq5jQuMKfWmNb)qZz9webD!>}IZXXm+M(-bQf z{%PG)jl|7{q+l6TBr4W8|7v>l0}PKBAdm_(kZi-afaK!itN1F z;az1ztB4pUDW`WrLikj*(~mwF{fb{VVVS8lpPX7GMRR?Dl2(a0u&ux;zg+ux6ZEaC zKg8Di{%k{k*6wb$go9yCuP8Zay4qVazh!#fWB53z&}awG&f_0}pisBWPpp?uMeEW1 z>hFGg&7s%TkLrcoei|_CO1eK`Vu>xAtF#+WkbWi3xp=tuUAExHZ(*n`UAsb~jP2@R zF=A1{T!Vt*i^9Ck;pO>gNJXe>x5WuBFP?Y;rumWE+p3%knwWYjfp>XAcW*H=>RP0w z(MPMfiyViXJTOFWWnw4`>lrX2zCSjUHveVrh)B&ArbX~G&3q8@mWvKRyuwgj?;&vv zjJV||CCjY4oQ4VIy~>#GpIi8v#!`8hcHy=wQJw?YQGoc`7ClH&|cF4O5{v8)`DK9&wmc&`qe&79>2DkX3!k_a#V+ceGz|l{@CQ*y}2l z>(6y}B9mlec8^DkY5RiLi;3JTl@T!wW8-%ub}3z5>Zu8bH&6DOE4;Skrk2@5yFjxJ z2yj5N>AC8m$T2?mV``~vIc#okFF8Df@-@3IoG(DJWre=QPDz%ejgUCr z)UD@|h3{lu5B-hKe~0*c#+RoPN}^AT+3Xyt7Pm()9h%39QEN^FiyxkGscla-{>z=k zx;QqBeQnExB&M|K=ou`}FUSO!5p;z@!#3~>q3!GMKcj#821A3M@_!V+`O#?77{@(5TjydHI0${q8RIBKEYGW#AP!MbfA{x6 zhT3TUnkmbOcsY|=uAr*s z535Hl;(n{vHl12C1LNbTG9KwteOwn?fiLes>Ca?_#kGn0COtHdi-9Z|r*{2GpQ*vtgXp5X3cq)E>Tv-wr3;#sj>iyn zWg;_mGop@X`~eu8JG{A?Q-nCU+EFE4E1GgTydyt5IBee*d2e>zk1Tp;JBGl;Y9_HT zM%11Eq_t_wGaYZ9)Ne(H1euScdj3hn&mQv4p;F%51JVxhcWf#~qMK4MLOnIT@w!WB z!Mi{{i4Q4}#yMS~Ui`5FGCn`9vGM;U%g}T&+?R55bKmpu zyzoc!G{)t}leIV>w4>QISp0EmTH8GwH$vxbe>-90cgw#e&f*0Bqjo&CKea-v<~!MO zLN|sjMkRjcu$MDVYed$0ZZo1@e=E12Mx8HfEo*azve?_WX1JB@)$};C>O&@kkc{OJG!_t6>%h`r>%(B;EB8flt!jU; zJL}4F?+F8}G(KojU#ESupJLIa4M@?Ha%+0!gslWd#dw{ewgr~##ccM_hI`p*Z3n5? z-^aqX%II!oc*l_KN8rPA*lr&$&qp7d2`*MJs$x%OYOMUWq&s>VP5|}}V*5s7$MGS? zV-N9=kQCdqYPX6XS!xt$)a@R}k=-|VfAlkOSb&)Xwn@?{ZpU|HS8Ix!wl1zA5>oZG zybNp_^ILwq>N$FB-F`dK$r<-n|hq;GYIiUx;x}~}$YcBAa4GOQvf$?x%W>s_7WDgyr@TvTt#~*U? z8(j`>s_MOS%vx-jJ$tcDPcQ0JwMpH}FTEpY#-upekS@%v-uhsQ?d83F9bI{>@B9en zljM6K%3!8wTJ>-`Dj{Ltf{S!LVL<+I(^2crEljR1wRlCnh;nm0VD$B0a2q61rYf!%vC7Kt z6m^w0&o^HHRngGvMr4}6`tCKEmAjcubgu6X4!YbUX1ENAFc5YJ_Yak9W-o1Gq>t(L$dAr-j2s#f`K3SeSg(Ru!0c+Y_aDBK>$YZNoTQ=8LR3?~VR05un^K z#XhGB9b#_Nw{Mrxt@9kVWY0>9o0iH`ec}F?p$Z3Mi<&l`&bV)g={~a$d7v~I>Ebyv zErSMT&FaqQiUQZPUYvidEftU3D6%ik+v-o_@@SOh26=b`gOrYy1qClzS;zm@4KTKA zO1LXbJ!IOdPtvOict5T<)N&3#*C769FMuh*dLDs6mcUaX*;Jpyg)`)kF)X8c&FN{M z7HjcLh7=FPaP%Jr=7M;uvXp^)=3A;zzQz8V+tbF_FvlA7a%)VEgSz9cNUrr{>8^{r zQ+UP2WvAyk!r_j?4!KV(b}#m&RD;wM%W#_YHD7XRS)mVdbja2^Px2X4937p!aLJUS zTLJy#gyrV$L9IDcTyk_JvdwjBa&puzwSQT@UwLFBlI*LjpUf&JZsUXjO`8Xu;e%!M z?}MBdiL~8mwuAnK0%tw<$Aca$7j%z%-)57D@COyWuF+6pkSux|9uT{xQvQ}n z8fpyxaZd6^Fyby%IwiY%gQVD7rk8@ZA#VL3bDtTC$_ll96;33p>^dy$)+?FIQyjYOHBTUVqJS z&GdSj*zEg0kao-o8a6j}r<%+J3t}~Xbf*t5)=_RdJpJ95lpvpo`s-bPQLM7T7Xz6;ESQ<`U^(rBk-=#3(1#l;jE;r5>+PT1 zo~}D1jd=q4ZVARg%_h~wEun$+6+-qRqtG|)9zCltb&Ys@QV}RB#>u_TIMDaLzNval1*3tQ(13Xi_wvx$5j#vLeq6wInmvDteYgg)2^4HdsYXX%;$O{UW%}6 zN?femhn3bb`d(b@$l=*Dxe8UdkDa{jvnfk<`XJ1m)yGJl=g!OFtM_n>&a4Hv(f8sF{kEW$4Gpy&5IQkKXIHyFGg4%u6+~T zCtYT(<)49)vBtfVAl)8o)%!%?u?Olw^WCDu961F;RUGuq)n2dNt348H8Jq9?2Ff-0 zFdsrl@xzFq#fp&&RW8H-Nw=a`pr2P_W0eeg*&nzT%ZNNSv+{B)%F%#Ay^B)BYvO3o z&#bpC$sMdVjEqK3sk}V4VI^G^I`=0DB8_&J4%$`=^8t4}Ue~o{usGS9^D=mI>+Evp zD9;Xh__nz${}<&x*8!UWLg7v${3^5Iu%TN{bnRVte(k{IANAZdlzQwU3tQLKiPK)v<5}mBPGyCC7SlA{0!nygaheIx3ZG>LiSr_sS)v zokoTH_X|V%ufpT|5odGtR4(qrLz3Fe@(X*b|E6Z=W$MFJ^X{D(%H1j);^hOX&hVya zx-rFSi7;YtMWFQImKOb^@?JjMCL4MBr4pLXr~4!SNPk`BUFk^1n=r_SVJ5vMz{Ovm z>St+QU24Y%)sh=9*tK@E3p2lyf*RBWenhgQ&bn-W%SMK|Z$gH^mIw$Mj{fFwdDnYn zeTIDu*)pkgXT)kz$r=>eR_zDO6cT0aiI`9U%k{d0UMJ1NwrBk{Ta zQpz0cU44n7W=cFZM|3|aT7cEIB-YJXmicJYX#L`tO~55#uUvMad9*7zL#EkUc|AELh7CIV1Lo&tW@XqbIAhEamt^vXj%ZIvc z>x?>M2`?UxwAm{xNW+kU|5vY(drqsk6S~GbR7%{S;BJ*q#a{2?gIuZhEzPC|RW1+d zOo)_IeCp5h@bb}5h}ERU(GOAk+4a4U!$Tt?A~G`c-Q63q7#_2v#>QfUCep0RM`6m} zw6c5Ubx*DiiS+ak zh-Zs$H|hQq-_)+7JlcM)wF`k{(yz_XT!?9&BaTvj!O?W%XgH3Z%iIOw2pzroI&l~! z9#piXytS))HF_!^q1stU-(QeOlGn>zlBBeq_Uq)Z{ zW-p`GFUb631`+~(jWv>sh_UUqv-ihquXf+_haI?i_zjNm^gT`ppW$4;j@<#JngD*t z=Z%M18;++P?}ykx+F{P8em*;Rx77R-Z|_wpa}HLs#S{VNyYUq!!pSsxLDkIsTqo?h z@cp+V|0>L@D-5ruJ zDHM7&!ps1d;?mW-##kM^u6WPBX(GvulL4=}q>yo~vxI^+Yl|_*PbFW#08l^1!uk^Y zndTivVj{`_fnkH31|K`08HySB-x&WGjWv&6APTKDk(`~1PbCz^+_uV5dpNHw_CT*c`T8PKEjc=V0$bEZ-<4mP!NmVhQqkT* zB6~{$G7HV!aFR4Zk!GG~(Ns-JnZ|Xn?$KW4zk@#ugQRL)#q%k7av~dYo*hjep?qpN zj11~Kvmy9V!9|%$f(%h(WZIjz9wCilp>5>Bu?xO|v&m!rq1agBol3j<9L6ug%a=_q za+wR#tTweUIAK)jd>&0viCLk3!-Lq>CPn-S%-6%01}Yu}XfL&sucy*FSgw3O{TY+J zFOh3(qfr~*@q2~7$XUl_zL!qq1*!{vgqLH>HKC1N0Pse_L|kwww=_wo7@ykcN39;^ z#dTI1nkW4s^mAfu;%)V9;&@_`fNAn`8L;mba{nKVi`m;!h$i%x&$nTH1ri)-086It ziY~Mj_o@18Jy7nz?A_aRI~O}fqj#`mYB+a(_MyuWM_bSSpo9t~I+S{btrM@uJFxVs zGDTGKZ`DEDj~JYi(mw%q1*4WP@2|5LY50t#&@iH=`;Ti#jt*cn>pcm064n;u&|@1= zpOVcGReBNJ+4=hFQfcQL%IHD6IV?)J5KJGa3j1nHoUN`FZ6{sLMouxBJ64!fyN&Ns zowbb2VTB&7y<$G4k;8hIn|z@phAwIn%bdPmFte2;gSVuYND-bx5n`fyqTSWkHM)%zD7e z0V*btVTr=n9*=brPxqjws2HsLzHxak*Dg+0H!iG~G+9wgOcu>|@|G;3v!_^eeX6#k z_3}efQwY$BI^0{%2Y+CacGTDtAF8?w3ATT{6<9qgd&V5*aaAJD&=~I1iz~z`(TF1n14cEJG94sT@y% zo9n^vY0y~p_={My1G)J$?c@~A)W)rC>VU)^T^h={k1L~Z?jj#SR6dq4cenZJlUwXr zvaGYe<*?W)6!fJmYEXBwVpY~tg688cONG0x%L?f19<;F;8eXiMMhG%CwRr?uR74I5 zZfiSlK)scS>tja-O#U7|May4|nxJ2<>tD3b|By#cftf5J*8k$*Kr5#{e0@Hb&!qMc zt9oSkfXBHh*~sv66&}%oDD-1w(v@RHSX6R0a%AaMjO^%22#r`wtW}?C=Pj=@?Uvo$ zWKEFPwXFVHb1ae9Nh90fRr6Vq6CR6ylA_JO%YPQ@=_w^pKGA$AnknSrVa<*VMY~gHGrko+_7|#$QkRgY z7&Tt6>`+s058Juh$@2~U5~wG>wc3+EDw^?IjF(39F_!N*e5>2Vw8OiM zLa0=@b?$=M7_BCI!91FAKfE|4af2*6pQ9caBTI*9j2ngJGUrmi8lV00bh4H=Hl8J4 zTR>8HbxEYcnMP2g_;;=T2HJF1qStA}r@2|dQNQqsSd;nb$$p-n1Hioeu5P~1o!=vS z-&dOao-cPV66p@5VdHJv`y+qbtLxC6hf!Flzi85I-fM0=fF8eqsimnUo-6OlLsuup z88SsbkdVFpU}JdrzCP**yiQI~(9yY_MgRGOPU+><)wkG_v+p=TK_-qkL1lfs(Z&hB z^2CIvC&A9l5>_gmA~#?oJ3%#bq<%mTR&~-pY>qcMIaz(lZ#i@|^e+Dz)IE~pgW@GE zrt5yvJ3ySLwYzFC!~&~xV=buWlboqz(&E6F%4I73LeG$S%4j)xJTg|H)hm^qYi(H8 ztt{n%+9*}@?-5+WM?;S>i)*h(MKm~}D3Xf8(eh(C5QP}hJuhMvKR}IlWXh7UBFNQL z?G4v<8~u0=goq98A}LFyG<(iWgxaTE53{)Etx0`6W>d^)eABLad$TCZ(otO{JtX&K z=ao^E?j>$lV)iqPan0_$k2bPw0_%X-VNl4X2gN$q8du8fr<%gPnr(O6=j-RBvi#di znGj2quW3~uE1!rIfd}?I%kOQs-#q*wz?XuaaWV3R(GDUaOh*)SxN0X*@g_%{~k+2P&dhL6BJp_~;7MpUCn!r3=^M)s2(9LvaF z2nPp9*MRb;5dMsS<2U#a4p)BCyL3>Zo%XY->UiDC`$r|cwfNOPY44G7 zurGUgSxHEp5du-!5JGA$wVnwYS&5ZWwV8N!dgLzC-$Uurn!wJwVd~3EHnQ(ueb{&P z(BdMvZ>XNZ?9!C8**;|2 zx7vE!l#-k%*v!GVr zcYm?>xvdbZKrr!IvUP8NZkRIE_d`%cXH!Jm;1nHPt?LpsUcGE06 zI1S`)X^%4F4?CH3u3HeJ#G-n;t;0deE-vf%K2vLF0{8C@O5v=E5PE3jS5a>mEMrO{=_6jv=G zpP#O&$!&3jyQ$4&KG;<9K7zF1KUDHu>1wq| zGe+*`4B=N3kobw}@7$>n$T$-}|04(ts_eKnxt~^auQAg$F}l1IDx>mpW}7TOt>0e1 z?w^qxQI-M2!$ZFw{!siORXVANSuMUfMQ!wRQrAB(Wo-V+>a&V{vNbXYDWCx-3$`ji z#&N~oveg$=1}$lGRyu*B$c;JCFkHN_T zEidtA`Vshw|Kh<(JnXu7Fbd#cLi0*#85v@JcY8y_<&*M41zKv^WNZu!MTUvUzBQ2m z)Ca6ZT-nEOd48>;P^e5Yhh&z5y%0J98(`k(^x**F@%;I}rk~k4IiQ~#yuhw}ikKef5~#Si6Cw-X zBy_%PY!jiqcyZ(b^%E_po_9o)Yr~H}fBp>m?6&Ljcgj|ptU!x4k8$^Fc$Ixa1pPsF z)!3Pvx**Z%s$$^x@0%6XmJ`L2G1Oaa&*9tGG&B?x!fpioHR!d%NT=;6`$RG_GUM&# zr`#IwvwZm}Che<8mq0ZWSxY4|#I-%27R)lvw(ok1#tqt3Qr~;>3)X+ zcLu*J4LY3HGTaJrBMeLjFLUKVlWY^N*9nVI(wmpT$y^e55DK*I(2VMJ)?$;CwkXq52bYF3a7IxN76!dA@kN($&V#@;dL&E{uW(ypeA-K1>iBC#880T?)cHS@Y3I%1Z-LHLL z%d^*C@uRadN4-Dz0Dx_?MfUIN1W^0>!O01Wh@4e)fTPI(Kg5kh&0_&ftM||Fjkq0G zCB((M0PzLjBQli>01_qZ3^99D$^>v-a7&RBy zc@kd}AjyD!S{DY#B*&e}vX}nC6j3rsZ2sE&+uO5X3|Ci;DMG@-ZN~Bkx}zwACBRQJ z1mUBjO7$?%(HkLjmw4kcUa07HurL8v3q&KLj*~jO@csAmk+`_Htupjhaeay^A$l~qk=>e_M4lXVeOb$*?b1*AByxj&|PF)cR&;p13QWV@@;2#am z)aqz(G)}<3VPXOR5`}g(wxqC-G zLP}0f zaiJ4bHaFi~>Ie*`B`5ziI9Lv1+VK+x)#BT=$$9pQ`VFNMly6pat4#qJdaVUIfy9WD z^MhiLE5$$~8#CCEOG#-2CRdJFcnJ8AKYpzL6|$Lch$6aAPfTn8VGW`B5(Nc>mO=O* zml7c-@wT=$@LNqsTl1za^{TpzL1AIzXGDOSq|Z&O$DFXkU1)D~<2)fDBcs#e?%*%r zC~x8zfnqOS;N|@3YH5DCn> zy-W#xYvknQ6QcDm^_ktsCo0#6S{Bl!WtmZZbTUirT~rTacPfuPZl*XvK3q{=1kYO? z83EG)Gy;Ojrc~q%8h*j?;MQ0+MOpc)-q_IaJs^Ntvl?0-4|+I1KYHSMu`fF`rcDzi z0k{FU#Kiq&<`x!3MDZMstKA^++3Jh~#zd3rUT@j*!2uaAE|<|?)N*fg^TPdf`Y4IE ztMwGXII-7W@mx%=c9WMM0^kx^5S@q={*WA>WK;%N{r>(!yWVzfZ~_1d8tfvy-haL! z{r2_iDe|=HFlcg*q7;8fFp3%)_!q7HpjY|*`@|c)29~C#zhy7=Z50$002^x{=Va`^ zFQS(e$XEp66zv@xJT}tYK=-MFvj)#kCnRi9Le2aIWX7a`8%08&5aLuB z9UYz0>Iez)x#_cd$Rm#TAlQSj)0A}OEC2@yL4NA_*R;FT^6S%$CoALLlP@k=-eSJs zPLV`BfAON|@bxq9?D7TrLl%`pswga6T(z}09jcamAlL8w#a{0gf8$$3p#ZJ_U%DE4 z0rd!MAVkvzn=0IwK7~EVnEz7+_5VtK{ci`qzP*rTykh0|K5M#fBN;AGD%y5(tB7z< z=@RJ$^V59(PPy{LdT#d54Bg(xCSgS_ZJfs>%2+XzWm=PGdSCTWZrAFWkdXXcS}D!n z>!dW}H-QmWpaDnKRM&I`2S37{{Q>n z?>~oeARR`Ulf$Z?J^#FuK^$Nw%%F6?Q78O~^6J;Vs2lbAe82q0O8Skk=H=S$BgFOi z1}TkvhR4z9#PvKSerj-VPZ6ab=plu$5I=3k(>+}@t1&s&^9^MiOZcC?0B~7Z88ltI zLiGPOWE*J<4IbJ#6PM20DnmC&B8{#HPfM+2Ag&K7z^-D7Y&(&5dk0rGXQoWShWZ`r zNQ7sdMeBKi$+H>G@%F76!JCtR#}PT$}}jIgq}UifR|OP3-~6Dn-Bx00UcZ&UU8q zr16lEkwvC9XMhH>w?71umVvRpwpIsbsS4{=72B*gg+FUgai(=QimgDl2s}x zDFMldj7FHNy$q0AOG_A}q@;v|#oDxSQgApNkc%=raJDS*v9OHn><(5|a@xItoNLPH z`28EGJ1i`$0+}Qw4UIzWLDlq?<>ljS-AKp>u%#@-WCj=}@XGMJoB1!@=j-bWoCIz# zG@zUi9|xx8^I$t@d&emBy4U@P{=Kzc1Kq}6>D z8Xk`J^5tlRiF_5HbtUNgYSPCA0K-+lJc?qV^B7n@9VMkvK*RtaETeIzyIaD`>jog( zl2tlpW_TW2c07U81lSb=*&mM~VW?lzj)1h(1~^PW9HYYQ0mfy)bBD>wYA3mtcw7iB z&>(Ci0t^NqUjWtS-wZ&Hz~2aKX%TM0^U>qC0?{2Ray-#FqV4tX{sX>;wScwp#reOZwvvw>mcxAlM;?cCD ztdG`V2n-vryucvJL%}S&X0qo6zz#4T#1|*ukkJ9Qp=3TbG*lWb0tpiK;wu~lnx$Y3 zjs~0|;jBtvE5L7CDfnFjWFA055CUU)aKMt#2Z%F=z*=B}=Vbr4m;3+)*s8t+mMM9; zm9B^lTSxG2Sky9r)Ap^Tq$DOr+1k3aprGJCim(YFgQTQFz_&8gHI;AkX6iC#fVH_d?f}TI(%uB%BhY@izgS-eJN!S08K|uHDJX`ykpO&T@cj5J| z!Cp{JxBTCcJ8Fmh{Se}(|2w!N;&I%4hCw2L?Wi{*PESvfP;eP_8ipq)&({+4(|KJi z5u}TL)qeNBx?bAgh5X<4(2V- z(u5LV(A(EHHa12{K>Q-C=EVS`2Jo*=FX9ptHKK>(`58D|fS$g0aZ!klt_Kcp?QNBQ8x4lERHMoe zTx59yM?Hg0A0RyAOn@-})rPFa2sIN)kr&=JnSLxnYUmgOC+cNt+6GskP~>~FS5NQu ztJ=E8bO4yy5nx|4Gc$cF(2BZNN+hPfq(?<5n%qpDL`&s?n>jo*G)Cerm?L27>pU(Q zc4{&o$tFDi=?D~mW0^zyq;Vn%SZB`!dle~H|NZ;7yQ{-9&1o^(IXB1m=FKN?lcU*( zkxbS7a;dz&yxioL=C1(p$DzzwQBiS!e;*VtKs?d{U{`=#5f3L+h5x6T#p7sfZ(n(* zz=L?KBZv>GAApy+*@OI+!K!;@TSvPAR2%Lt_7anm)t-a8ZiUCmI>;0+UcTI(u3GV1 z{NvZ<5*io~U<+@8;dV`fMB>Ec3VnEZ<3s%UIq)CJ?hZ~JL@aRo0Lybb#RQuOuNrHw z9X3RU;DBq#6JTI%Z4KU*3$QLgMF-#e?G3ww2)r@Mrpb1)_jGRK{k2b#Qqg!v#|nsE z04@PerKYB)ufLz)@2&;pk&==f<@0is1TY!b0@k+tk|QHOK(EKNRq8Q79iu$Fk~+}( z>389*xH#1hAAU9;w3QH1On$h$xp6|5=RXJm;|)f}6ZnPVTMl~qV#n(#J9J=OrQ;c| z@Ng#8mom7Um~}}WdR36n5M1c@gb`gkGc_9r?f1U_tGYK2r?PGPhS${~4Wd$HOasbT z8Om5vDl#OLIYc2c&(xI=YE?+)q6nEY4~v8lk~y=iWS-~g{jIL&ez#|PzJH$YdEfin zw$FBN*LAzF);iDgIF5b)4g0?Le|ZjWY}2MqLKD}(1%8oCKO>8#x*!ykEY(?rO|RM7 zeoXE@_6J0s3(o84?4)HCla)3Xn|CV|8{g zE=uI%wRwS&Zcxg*JkG#Ec`?xqcsc?OpHr>+*wYX5YUUZ0XTl<@VNjRs%tBHC! z_K>hJ=DdS-B@GQW%X6dMZu6|WtnPBu@shw*qCd>NPBoo;`%W~Nnl1S?SjWhW}Otk@fGJn4d*2Rt5x9yQv^2MY}moFz+vx$R$8ne2?ioPge zM&3R-QqE&%%~z8KvwN*t&RxHLy=IHdHOBZ#+*F}?>P66lb}f5b8j}*+L2m{F?;?8G zool)0K+xYrH{!2Kj-z3ER25SO^gSys#Ius%aWe7sC%GWYuR&@zyqG!H1DULIq_kI$ z2!|v_r|t18^Gg1dF&G*C`$uLXzsex39?sc@y~#JJ(7Xs+5;P*#7}g%M=o+aopXfJK zFum^az`}y+NE+*9<=xvY4xh7$*?Ifor;nRx+HTPYd#XR)xBL6Wi=U~Pt{6rr+BXDp z-v8vjHUH?708N>9-){?&zIifMxS!knE3RJeRjbaMx7=?O#^~yPUFe;!P^(k)y4mkO zGvU0}YxwKy>4BxMR=*}9hs8w28>@M$GVU39ZQr@`Wrb~4b~d}TyXz)zot+}|!)s~a zysml3yf<=fT;ZZCKJ(X9py=&~EYf+SS?yj@o2I{JlnE3pyjXqW)|!<{ddMDCizsPhR{w62Z1xxZ@4ep+h=uJ%ojeU z{Pf9>QTr5uN*dwoM+gLJer5lyG2EARb#+x$16=dal99u+&HSmqKfMh4Q6p8Ic(8?y zo10sZafgf#WQ*XSp#3|ja?zmrL6d1vb%MZF4&Ht8>gwv}&p*;lVUY3k_D&=o@hiKk zrN!gP&Cf3qqM#Vpa9c=fwow%=7He^xnp#?g%^zBZ&z(C5eA5&w`AQ)c5ar`Xp~NQB z6Cpi!B*4pSo2$JsrVii<1GkW_QB_}6PqYJ;K=-mk@3r4? z3UbIgIxdjbmr3B%8cZ+lmHD7Y(sk=-Y`k{$>OoJzu$uIOl@-_d*@1z9#7ioQm#$oC z8lJV!*U=%m_>En@d>P%45oEolAS4FRlZPcw;ke|J38R8>_47CuCj=(~5S@8{1>lapaJLx!2w-DWR2 z)Tl9r9O-S-+gsV~!^6X!E(^zw9m_IrJ7H4G!tt4M>C;i`1qlh4YY$~dj$Edfd8NSV zU3&Z;jV|*Bg8qTOSuY$x+lNDk&egC;c?sV#-F5Dwj12W`>nRS;YH~t6jNx_jOe1;u z`OC}80FnhF2`$6(BW*uz#cZst`)|k7^>w+77xpY)m6MnB*Z+Dgr6o8xxcX@&aOE}* zBiiWt+h1#Hg4#cyyL&gOrP;>D#=DE3puhWI>rMYk!(UWWjO0Ka+uq*ZM2!?ENmuFL z6&9`{v*22{zaDuGC~>!PIfo(^r}K<{EK=*D-xzP`3%I`|bO zC1RNY8q+5xBus^dG+LajG|kjZYDR*D*#z4;jD-AseP8gf)O+pfbJe|85nHx+Xhp(0 zsm*-uhoNYn{a=Itoa%dIQ(82xUHcLJDwB8BtNCC%2{e*P?L7qM|VI+|N6 z%N*kasJCr9CLrJ-7Ll2m3HTkD@*O?X7|(4I_g8muaj~?tw6&etJP`OZ%%J$DJ;bA? zrlwoBZasWrea!beD2l&-(4R*y`thnD9zDn2%^Xlgy$YHm#2$_?s&2Xah^|H3=E-uI z^5>SAFa?dFM2Hl~w85iKsGPI2%cMKV!y_*x%(w$RV)yx#nc1p}54nc#9oFR|5XPwO znOeHL+3Dy6ldlMgh}2@(L{5u7&(WjL_mkzMm!5Z85Pf|^C0(+dkI)lC0L!>M886$< zyymV7KW)>oJlAM*s$gfCh=>T)=FK!OLq_bE!TMvjbZno#PTCS&-Sq9-gys62|;XZALlgv*xx0!lLmpT9Lr3l4=vCjM^{>0|y zX2|j!vL+@b5G3nw`xA-5XD@dxpY0lala-|&Nf#O!S#-113se2T=HQ{@k(edtUWiON zK>Idex}~wve`Kl9xp1x5o1LxiD{jjZ(XNU5RpS#O(D7nk-ppt-H8pKc))~&fKQ%S= zAjq;K$13&I?Tj}63x;^dk)b^@LZYH@TDx>S*hskl;CEU>4u~lU9H|f>fmhJ{6hfGj zvhugFRM~!HAf$QQF zZUcU$iT&0F!u{hHQX4{HlmIo9sL?RdOBqZ;WZO##S>5j5DZ3OfE%DNU);l%mZ{MlZ zu8lkD;E+vRH2L}}&3Sg{^`OS~G@F$~41+E+m~tv?~;sZN)mH&-;m3 zbX?cam|vN$i;Iob{Ti>>wO{5%@Li+?L!BS{Su0_w5F^zXOQ>pc4~-4 zSqB9UnPj&&l|?9;$jJO{US^P%lTz~Yll4YsYdu(tem-Fnf8sJxvLzrOpmU3ffcwrCVi^SjckzD}6#NzA0$PSn zhA0fteCx36H_d26q=JawnGzKo7RF=pQsdLK<6gr3$#cYr@=ipIVD*Fm`tzpe7v zBXV}KiX9d&R!`C-+ls+<*C-`HJ2sy!$n*r@Q87-{?NV2#yb66TTZ-AYL0cFQ#NAhN z6kg)+0b|HMVo#49EABAnI+i<7kX&PQBBbWm($dl{b0onR?(2K|so-2JI9L9ZRos(q zzT1OT+I#O53;sZeafh9qoqD3$(~v5c+A2n_23_Da9i52M-cybfuL}$^=wws^qt;gj z@SY9Bv)G|Xzg?FG<2t=aLihDJDap78w=H~3X2Gw7{8etxPaqgj~jPqBcZ*^~9vr?B zeG%2x?L5XaxF{9*|5=p$dyb1JrBumg;X z^P^mR($k#nZEYcefkr}1=xe$qQji1JN1w=D1)=-%VuryZI*- ziCbq?0wGRprYPy?pY_&8s#Xnc++N4kf=hBC+m`@SQ`!liN3r9bn(Ph{| z(Eqe)W`2G-pUQuKOg$qyY~Q$Xx?^+qdk>eIAG399Bk?XT1z3rndh~`xBqoQ2>erXX_iPd`CQ|;=XX3`mT)w}`OA~^+^#XzhDFFLm%)oN~CjIoEj1>3Y ze;arGUj+aE1r*=E`FnVHx#uD6icXnetGS3@S)Wwdf1o%U4>gs*krDI!&at8oofb+L zFWwW27@L0Yx9nJXTPPuM>UQJmk=$!I&GExamyWyZ0KY|ZZ|n|^=4KW#R}P~h+yS5^ z+&g;OVNCnNh4Rc6T{Dp|j0Bq?t}hVRlD{y7)u>Y-%=@IIAXRkJnx39EsR>on(Mf6< zzAK_-W|m0z$sq0hw2-jyRu1IgP!GC(`~dh$NK6D+!UUTuoB`onFw6iwh@^qW^Yz_U zs5?ISqSHc;4hT0|VsWA;<3a5#z7$zs*!s z$=bP7Z@k&Q586I>z)*IajWgg*sw^4D;jjLF9Z2QU5ka}MbT6i8&P zyLX@Hn3DKg^U|ftJxUVwe~yHHDJ_UiOOB8<5sD6H|1|+ass4_c+1b@!q9mt9axl`0 zU3>Nf1O<`Deb=ORCrGJHw-x``K~?$(RahG}n`TxGD#m3*NB70YMOw2D&z$N@N=Pt; z>ZV)zGMZaQM+ZPzw;FfZdO;W?yM%?+o_0|X8-uIf5FvR>-Y@}N*L`$fnCgc}>vh5e z%qOn*ng-=-zHt1=CVz)pQXv%3$ieQiqpWDUR(#CH**3D0nvsQN<;x+WEA%GcXl~!B zR-nzr{s2?+V@SydFP9%p*^HNQu(#*r;;N1VmeYkV)RhJ274e-JkP&7I9X*Qv(YMXa zrbAmBAI=>I` z*^5M8a#GTj(T_H{+LlF&v2@WNKibxYpB{_2Y1;atGzVuS>zvxjsL-zdnFm}-)Er1r zgdq1}g3j82$JzkaL!;f!k)yV8+*Qz9fETH$7jAt5^b^?Gsu8xUi$bLPI;mN3qQSA3>bM9BT(@ z8B5MdC#gjL%h#{A(&s+KJgnIg*U;9~B#fI7W|4OX!|{MCr_)|XbF;fI+yuYEBCKv_ zYx~}tylaX;S-i6P`aPmWlTYxeli|yS*1N`U(htU3Rxh29A zc>hEVnaNW;&4aceorI}(MnrRCyb#9EooL;f{RgsTef&txK~;TMG0q0${pQV^H;Mmq zpS|K$Z zEY>7-Gc7G}q=R669?`+6X3aKxMyyxli#RVrF&CGK&q*HNt2b_hL`F(ow>ZhT1Ckl5 z1r6b&H+CoEh7B9|A7A4ta##OgIaPINDvib0PAmed|BC@J;3B^=%rC;(LVosMEQ2`f zn4>@Of-Bn|k3_YRhqj`;Jo!e3F*dxZ$(!Xz^RO*=PqF=_up5g!z^_EV6^}_jB_U2A zXF$+N&(|tJPG?$QH2c}Fx~LQ>^(}Y*D&AOPk-iK?+kJH^*~X-9F`rH$oLzF_+#fQM zVN-tPm^6?1qa*7T2(mJ6KbcRC-6(48Rzs4=hQAy>?WRdRIewl*y|wp;M!+Xpb?Kh* z-2ecO^tW($<}AjJd)9>_Si$Z$YhaRg9o*&T zkMI7VpBiK4fK2d#z(Dz(Qk-TR2|a&P+yD58v0~YUYHC zG|bB0D0iN3pWmcJcT6~&VU9=`pSZY|3cX!{nobb$O;<@MGDd3y1nh>vYjNTcwIF6s z7ruLUtJRW?a9@RjDK+%m>@fJEt4nwOv74J4Y}$@17*uaO4FsT}r{{s6)k&{+=$&7B zO<`jr>H2y~9`5u$N3Eizl~@!Q5z*PybVTn*u1#E-!T!lz<`6JJ1MT#Vfk!+m%f83i zRcOFg46a9(o!+IrI8!uG}M;*MO{+vM;ZN8M|0z_aYNBGkor+5o8vx#Wln`MJFZk9Xoc} z?GiNBysrCb09?Vf8a1pT+v_L?y*!kHzP5_CADe@!xhXRwutAB(97ZyX&qmV~k2gJK6 zXB)yf94pYLDKB2lpZ~Sn&I#9m+#;Ua*LBD`_bJQizS$!jvN-LoUvJg#v_m}tGJ>I% zq@<*nc-g!B2M)Y`^M(UCK}t)0oq#w)Cr-sXlpR$pd$9FR8_rO`>cwy8XbWMm6)2qf z9z&F3+PjxL9?gG1OiYs+u9{;}FJHb)XyfMO-vq;#o4J!z|}$3}h@d{zkx zKmj5NmRfna@vU2|lFqijgBETpM(({S!~`Xu-KqaM!c{yU`~%g7;}~+Aq|Vc}lOXtf z!_w*E%jZC=IXgSU?geSL_*?B`$6sxI47#qBYvo0N78Ust+B<+Jq?a?|PN7?#(Bn7P z?=l%AfcMdap%4n9kNgOMSN{Nn7bI_1Yw)b4Rc!YDi||bXP|?Y`&>aI*fO9ac!jK!L z+W(Q3_+Q|}{{xMwuIdm7cf}l%#~n!B(|YTjL*p`nx_>{68~7#BkJHl?dPH%KV@lcL z=jON-s9FpqJ9AnoS%aUAo12W!mhtsoUl+W}_Hx~(ar^bDGQDM-(vg1v7N)30O1d<6 ztDSjRblmWQ(PwiHjR$G-PxhaLib)Xo^E=|}N6WgQAlRv_`7q`W*qkSgctze|3_E%WNdD#pRZKCX_u5caNWGE+b% z2uq-?^C|^J*f=m0f*pSKk&@Q)Yh^)M(@pi~xJrLST)f>N%|Bf*H?qEEV~+v4zX|Su zIdBn3CEuD{1$Gx%-#oa%wPfl;^&K6Mi6}SPzc7A{pHO@x7PD09Jl3GdtPK1COC$_W z9Cx43hvlw*&~}ag3dlYkC#OYjjXvvKc>OJNdcBSx-CBJ95t}&S(13NWuIpqO&QsVn zDT9wFuLTyoykKu!L&&pd`UpZ7Vk&;WfhyP_>1EM0c#b7A@LYiPuCSU|#q9qGKP)PH z2ezoe!C{wjrG3=i&e_3XUb!n!jE=VjyGP_YIbHF_o2Bb+8AIg=sAJ4k7TNhNdYYPI zD6PsL%QNHFqAGred_n&sDBDML!otGvT;fDTYK+rke_~Mk=p5|#HcBqVQl>CS4~(G0UTT7w{Jc7PT`pJqY+Xrn&=U*;L>E9xhvQ6o?vv!8b-D@g%|vU-t3VNZHMBX{Q;@wj zC8!yuYf?14zb3|}k&$3P^?1(Dr^sCs_8|7*0wh}xLK=b(%g5I@4=7$-(e3)O_iD@s zP*m_1!U|~Ts~88H3gAJ&opR%hcvfqOfHKr=H@E|yfXsC&(P!ATtJf|MppA&*x@i!C z#75##TcYySix>Kx6gl*=F|m$o2J9@4-rAZa&~}_)qL4+V`IApF6zgCMn<1A;KJH3^}78wYB{N_&+}vf9jPXlO7lKD>6v?X6r&1jb0@Fd#XQ9-9G)p`eD9 zbd9T)T@*x8bfhTsb0%2H_Ut(nh1Blxbj$cNRbxa6oNnMut5vrE=gQfXi0lvRKM>o} za6lpfPDC5&d4r0ltPcz0fBev#y&}0hk}*`dr}SO2oW&;L$3wGAAeL4Kl|1r(g_==b zEInvrPCp*e4j8Li%~A?qMny?ad`q)3I1vIgMakAuesg#tC1@G6ooe*N8i}cY6%>?- zseq?Rig7&0jv*(gs9=6l4$TfH^sbM9g^=L6QgmK~hht=E-?K13n5qeFZ43ZLf3i<0t&IXLW*D?g#gZ&yuC6P8~O!Jm#Z=Za{jY!r*2(NJEn~Wb3BpW_Qp?LxGg^&|Dng=IGzxcOq!c`9+VCxG^pUkS!e+Dn^EB%iKG5OJF`Xm)8erX!inzI^sZK6lmrP zTSWq)z|Ug%?_*vmsglC11FqITKU6XkDq$KavDkB|exvk^!&Y}nLC)=tF1Hj*$38A( zX?sTN)>pehh9C9NI9^XlyPgb>j_#FNaWw4W6Yc&zt|@rdJ$30XkKi75K=5P|i8O54 z3H#m}|E8Y?n#$jBUad4OnMg|dPD!tsvi`g~)OeJ`xsa5|=#|@2_gJ`g-eGU?0wqaG zS%0(ke3qHwF;aoYi1cx}*IOsM(#EAnY5|b_ z3k%G$*|o+;mcr-^x@tt3EPSR6_cLJk>8?naW`A*r+ck2RuXd$A z?>@hZbnER4KTHF>I_?{03WqBWfZJ@WYs$$Y$K1*9jC}FpL@U=mh73Q`0ZxrmftL}Z z$B7-qDdoiurrGUUO3k>j3%Jubqi|AC?FLaH0~LIQUQ6kK9Ay;zjtL zo<4b!l$dC9iUrjZ*ue8Y)PWL8dnt~nuo}Sj39(kK!htl zFzO)UOMHAhoF4mmU%&}b8ztSXFPNj9jHAwp#ss;^*gT{Fa;@@Zd3l?94JZfxJ)y@R%SHw*nx3q-5ko}iZ4 zzcHhYw_6^*v+-M<+ffr50uFMdEn_c5I=-&1-kf@QD&^OoFWjG3uU?@B2{bWm9N8qW zH-h`!=GsiaT1-+3UB)`%TZU2Y)A0Q}a4F~O!N(oBPzQ;Uj~P=fD{E@dS%L9X7(F}t z_}WL@Jfjn^;C%b`EHaYclk(0dO`ewMGk*Aax4XyMDl7w2lj*p?WxO+Qj<%j|cz> zHC@wA@>qnThOX{dnmNF`9}HOGTgrDa6+T5CsQ!ES`8XuXlO#iAfOHY^45_t ztutfa+(^6D#c*dZychg7D3_UtaaR)%K1kkj#`1<^6Lur;UE8qyL%C`BUF3bXc#k7CvjTWP@>PM`w3kliI`2!=NDOX%zYouXXD)jsWGcvr5^Kxsb`UUN>wmPj1B%^Yx7o%a;XViQ13GqG zq;r*FU8Z?kIual0$&+LOX=|w+|mWvMrU7tXC<5q`GyI?twrc`ZDanbo!E(cp=VPnVnj~`FN zTIb`dDJ+AZ1YWt>_&>JD=R_QM=;$y!G}P}<74zdkni7S6a{c*4)S1sxh+VOFuI5EI z=d77^NzI16SYD`(0D9A9KUo0g4iF@VP9~+L8^sAfuayh8X#bq8cvtcMU56?jh4j>y zLzKq`O)XktuGJ8Aa&K2S!xUoi3E0;cD$v;jxh(_|P)qjtZmBcVc#cqJ;$Ocm))&Nl z?WUHN#6vrA0j8G_c?L&ESDUko$VDR`Ze$<>hlj;kIhEzQRaAw;9Ar%F&~z0$1Nc=a zK{6JIh1s%zgP3e)X&EJQH?)Pl$nePT^!sIg3`AoZfr5!o+XV`G)=XL{MP}XWYxAV_ z)$u5&Um@+|KD0X+uT*(L3e(xMjlH{DOxIJ zUz_ljUf~cFoLI_LiP3x0pAyjyR}scmYhJt7zqTtR2~&yt#kb$Te-|Iip%fU&_~0gBlvT;6)#3-+7mdMF7uHIL(#9<;iSmF@1uea5 zs_#Q>9||>Uad9AOI|pd(ciG+U?ekwjzrokJ2E4}k_9F=bFK}AA00Q-uRh?n$+%6Pd za>$|(K%()Sj!~KK-t^K7tA{ji+!!qKzKYE@>e9X3g@TvMf^;<9D;1Mjg#soQmi&N7s6dgY`$V>8J#GEjZHLg|!$zCB}8AK{;x*NC>spb(5I1W}-8Bh}{Y`TNjy@wdS zYj}KoeJcFo6&)sg8bp=i>HeRv{lS%&qcktpUK}UASgFLHKay_gvD`it!^pTmGFga^ zQc}~>3Tsgmr^RuIZAhEb6MWOQ+-_hW6VuY_xW_sc%X2F}A)#w)_eaLY@W5l2@8AC* zYrmzcFd&*61)eAdb{O~EPD67=QIQe~J?YL#43(0t<4Yh$(99iWo%B|fy0^aK;@Wmx zc9Zy($G%I;DOcG&7@^oAb3t`7ZuYHUow*D>`X_3`u=rxyZ>O4uhN!S`?s{_2B)5=| zEoz#$6vJB~P#3>z9M7sWg5~iUOZUuWRxfOUNGUf^e)!6kP(2$V$GXZ3yKk;Ga>7ZK z34QOe%H!LKkHsQjn6k4rO2V2%6O-uZPi|pfin$(k78^!4HU740ZT6XUZ)^Es?PydD zlQlf`p$f4;IQXF~ zB=))GUu5!=-l~e_o;Ox};P73W)J%#-T&60yD(o|%6i^J4+qP}ryi; z4`kK7P%er-O5?c$k>H)w*XA57Ti1p968OC$!gN!jkgKgU9hod4vUmD30Q6O6L+955wx!O+4KwxNCg)u7fE1*x#S`=+UG6{Bx(K^%3Ae zhQd0kmR|zrCb#FrDHr)z(FjEb)UCs>20>&CFR}=ancpfzwOU6tq=ClP@Tg%L)#s!{T7=O*QUfa=rR{xQ^4;16=sR52|osbNaRPaQapN;>@#VV z-21Pps!C?1{-M@XSdgQ>e4Wo_a(@N9TA{!8M7|l*^LDGcl9}T8vf0(7PO1V0wK5&7-Cha=#k6RS` z9(wwIsqaIxK4+XpUb_$@KCDx8_a2eSstVD>xHvgBWsZ)bkwa#;zW0gQYub~8G%j4Y zAT{&t91It~auvs#wt9?r7<~xz-u9lP z3GNoP@^#^-52eTq*qsHTsHNpnN+Sxpwtq#?3Gz<+&(exi%f_=aGbp{*ajRUde#!xv zItZKr1P%AKAQGKUNx1o+XKuLY=xhF6fuJm@5%2 z-pb3LIdjI*(NR~oi`Ajy_!3W;BY8eTi&FR?V{ZYs7oK&(Bd1ZhYeby@X+5&66S==6 zd05C6gnrEFm&FyLJQ5PFlYM1l8ZUEgrK8*%X!*dNGxvonG0r$- zyXK3yv{W>>HSAD~A#B#n%h-YR3UxGixgp(4&|IJ&^xN9i;t%Z|9IDMSbiO^Lm0E~l zU;R?ZmJ)Uw?+93b8koK%sW&aRT-NiZuIJ4zABJ@b8Hx{tU)DGBTPMjq#fO$$|KxXw zpTLkYptsO;TT18Q4KSGqyHcM+$k}(e-Bs0CZ@zNq=~-vBkX-A`t#teGVB?k!y{XI1 zF=OO{A_luCP96;hH#T8N5&4$ab2W)N$rbWLk#_^pE3PMIt=CuZYx~4!rE(*+;C+90 z8i{hkh|BdiYk6H6-H4aPXH?ES))(cZXra(D@vmZ|H(eeI!s+c>ly;_+-zA$985Knf%g}qp&IY{|nml zkfIx(s#>ex*hXu-L@8;U(koiL4&xuCQ%fD1jgmLOIkS6a;9wWafonzT=!cWG(&6)|6ZanX$%zp3q!xM}3XoQ=y8VDr@LnW@dWuI5;3a{s z@2U9M^+M-a_}c+JyxL(Ah2S9LgAOZ0wqg*GaXe>g!q*$kjh)gBxGpAn@Zcw-6O|Pq zAt4|SttWw@x|0xxfXyL`z*+CUO2Neem4`jwgZX;@{@d^@9s>_gwQ&Y;-mJ%^f^5L2ya)byV7sT!^;^?%FEL%QtfV6rnZ7V^yq`XkOAlP zgqK?5yMGC2j!3==(JBV2&rQDB3hA{;qQ{CMN{gT*N$;?^_&PV2(kKvy0X*uNS2&*A^ z2Pj{3sR1k-I*2=XV)!r@7gTIp2M6XIUMNk(YD4$UFQ%X*vEHaefSqrlymgOrp_H(2 zW>Jyu69Z6Jpt6CT?bqK-LxQ!l;fyHdy}Z3?StvnKHCEwtdy5D7o2Pf~5H9!ya1s2qjg0zHCN|B!KFN;l zV+w5@^tVw0a|jApYHJneJ?opBA$X$RqyJfA#jBW+!#3GDhl$Ei%LqthmuTV!GEf6QNSWZ0#7~~ z&L5nZntJbZ(mW)02Z!w(Blh{rUk3I6NdNFpOd->aZ&ApFV-6K>aC}$CiGnl)7kKUP#fMoX*^;Ce literal 0 HcmV?d00001 diff --git a/eBPF_Supermarket/Network_Subsystem/net_manager/document/pic/net_manager8.png b/eBPF_Supermarket/Network_Subsystem/net_manager/document/pic/net_manager8.png new file mode 100644 index 0000000000000000000000000000000000000000..902fb198119e6e3d47a30592527a716bcf56a38d GIT binary patch literal 43331 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

PaZo1Vc`CCN|*JM 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 literal 0 HcmV?d00001 diff --git a/eBPF_Supermarket/Network_Subsystem/net_manager/document/session_keep.md b/eBPF_Supermarket/Network_Subsystem/net_manager/document/session_keep.md new file mode 100644 index 000000000..eacfdbf26 --- /dev/null +++ b/eBPF_Supermarket/Network_Subsystem/net_manager/document/session_keep.md @@ -0,0 +1,72 @@ +## 会话保持 + +### 概述 + +​ 工具能够检测多种类型的网络报文,包括TCP、UDP和ICMP。通过对TCP连接状态的监控,了解连接的建立和关闭过程;UDP数据包的监测提供了数据传输的详细信息,如源和目标端口以及数据包大小;而ICMP报文则用于网络诊断,帮助确认主机在线状态和测量网络延迟。可以帮助全面掌握网络流量状况和性能。 + +### 实现 + +在先前的功能中,仅能实现对lo端口的监测,不能实现对通用网卡的监测,且ip输出格式不易懂 + +其在lo网卡上监测的信息 + +![image-20240719173203213](./pic/session_keep1.png) + +增加对通用网卡的监测,UDP、ICMP的监测,输出格式的转化,但由于XDP仅在收包路径,所以发送报文/相关状态获取不到 + +### 使用方法 + +使用命令将程序挂载到相应网卡 + +```c +sudo ./xdp_loader -d ens33 --progname=xdp_entry_state -S +``` + +查看挂载程序 + +``` +sudo ./xdp_loader status +``` + +查看输出 + +```c +sudo cat /sys/kernel/debug/tracing/trace_pipe +``` + +实例截图 + +![image-20240719173840908](./pic/session_keep2.png) + +进行卸载 + +```c +sudo xdp-loader unload ens33 --all +``` + +### 输出分析 + +**tcp连接** + +​ 程序可以监测源IP地址、目标IP地址、端口号、连接状态以及连接的角色(C/S),通过分析和统计其连接状态,可以获取到其连接的相应信息 + +```c +tcp(96.91.189.91:80->132.239.168.192:36676),state:ESTABLISHED,client +``` + +**udp** + +​ 程序可以监测源IP地址、目标IP地址、端口号、数据包长度等信息。通过分析此日志,可以了解网络中的DNS查询活动,并监控数据传输的细节,故障排除以及检测异常流量。 + +```c +udp(192.168.239.2:53->192.168.239.132:36874),len=247 +``` + +**ICMP** + +​ 程序可以监测源IP地址、目标IP地址、icmp报文的类型和代码等信息,用于确认目标主机是否在线或检查网络连接的延迟,有助于检查网络连接的正常性和响应时间。 + +```c +icmp(1.1.1.1->192.168.239.132),type=0,code=0 +``` + diff --git a/eBPF_Supermarket/Network_Subsystem/net_manager/net_manager/conf.d/black_ipv4.conf b/eBPF_Supermarket/Network_Subsystem/net_manager/net_manager/conf.d/black_ipv4.conf index 730cdf8f6..ea5f7ac8c 100644 --- a/eBPF_Supermarket/Network_Subsystem/net_manager/net_manager/conf.d/black_ipv4.conf +++ b/eBPF_Supermarket/Network_Subsystem/net_manager/net_manager/conf.d/black_ipv4.conf @@ -1,2 +1,2 @@ -192.168.207.138/0 192.168.207.177/0 0 0 0 DENY -192.168.207.129/0 192.168.207.177/0 0 0 0 ALLOW \ No newline at end of file +0.0.0.0/0 192.168.239.132/32 0 0 ICMP DENY +0.0.0.0/0 192.168.239.132/32 80 0 TCP DENY \ No newline at end of file diff --git a/eBPF_Supermarket/Network_Subsystem/net_manager/net_manager/xdp_loader.c b/eBPF_Supermarket/Network_Subsystem/net_manager/net_manager/xdp_loader.c index f871e62ed..288c1f178 100644 --- a/eBPF_Supermarket/Network_Subsystem/net_manager/net_manager/xdp_loader.c +++ b/eBPF_Supermarket/Network_Subsystem/net_manager/net_manager/xdp_loader.c @@ -62,18 +62,20 @@ static const struct option_wrapper long_options[] = { {{"stats", no_argument, NULL, 't' }, "Show XDP stats"}, - {{"ip-filter", no_argument, NULL, 'i' }, + {{"ip-filter", required_argument, NULL, 'i' }, "ip_filter"}, - {{"mac_filter", no_argument, NULL, 'm' }, + {{"mac_filter", required_argument, NULL, 'm' }, "mac_filter"}, - {{"router", no_argument, NULL, 'k' }, + {{"router", required_argument, NULL, 'k' }, "package_router"}, {{"clear", no_argument, NULL, 'n' }, "clear_map"}, + {{"config", no_argument, NULL, 'T' }, + "config from user to kernel"}, {{0, 0, NULL, 0 }, NULL, false} }; @@ -361,7 +363,6 @@ int load_bpf_map(){ rules_ipv4_map = open_map(ifname, "rules_ipv4_map"); rtcache_map4 = open_map(ifname, "rtcache_map4"); src_macs = open_map(ifname, "src_macs"); - // Check if any map failed to open if (rules_ipv4_map < 0) { fprintf(stderr, "Failed to open rules_ipv4_map\n"); @@ -410,13 +411,14 @@ int clear_map(){ } -int load_handler_router(int argc, char *argv[]){ - if(argc < 1){ - print_usage(1); - return EXIT_FAILURE; - } +int load_handler_router(char * router_file){ + if(!router_file) + { + perror("ERR: loading ROUTER filter is not exist! \n"); + return 1; + } - char *path = argv[0]; + char *path = router_file; printf("loading config file:%s\n",path); FILE *file = fopen(path, "r"); @@ -467,13 +469,14 @@ int load_handler_router(int argc, char *argv[]){ } -int load_handler_ipv4(int argc, char *argv[]){ - if(argc < 1){ - print_usage(1); - return EXIT_FAILURE; - } +int load_handler_ipv4(char* ip_filter_file){ + if(!ip_filter_file) + { + perror("ERR: loading IP filter is not exist! \n"); + return 1; + } - char *path = argv[0]; + char *path = ip_filter_file; printf("loading config file:%s\n",path); FILE *file = fopen(path, "r"); @@ -488,6 +491,7 @@ int load_handler_ipv4(int argc, char *argv[]){ __u32 i = 1; keys[0] = 0; char line[256]; + printf("-----------------------------------------------------------------------------------------------\n"); while (fgets(line, sizeof(line), file) != NULL) { line[strcspn(line, "\n")] = '\0'; @@ -525,9 +529,12 @@ int load_handler_ipv4(int argc, char *argv[]){ rules[i].prev_rule = i - 1; rules[i].next_rule = 0; keys[i] = i; + printf("源地址:%u.%u.%u.%u:%u 目的地址:%u.%u.%u.%u:%u 源端口:%d 目的端口:%d 协议类型:%s 策略:%s\n",saddr[0],saddr[1],saddr[2],saddr[3],rules[i].saddr_mask, + daddr[0],daddr[1],daddr[2],daddr[3],rules[i].daddr_mask,rules[i].sport,rules[i].dport,proto,action); i += 1; } + printf("-----------------------------------------------------------------------------------------------\n"); printf("%d rules loaded\n",i-1); rules[0].prev_rule = i - 1; @@ -554,13 +561,14 @@ int load_handler_ipv4(int argc, char *argv[]){ } -int load_handler_mac(int argc, char *argv[]){ - if(argc < 1){ - print_usage(1); - return EXIT_FAILURE; - } +int load_handler_mac(char* mac_filter_file){ + if(!mac_filter_file) + { + perror("ERR: loading MAC filter is not exist! \n"); + return 1; + } - char *path = argv[0]; + char *path = mac_filter_file; printf("loading config file:%s\n",path); FILE *file = fopen(path, "r"); @@ -611,14 +619,13 @@ int clear_handler(int argc, char *argv[]){ return 0; } - - int main(int argc, char **argv) { int i; int map_fd; struct bpf_object *obj; struct xdp_program *program; // XDP程序对象指针 + struct bpf_map_info map_expect = { 0 }; struct bpf_map_info info = { 0 }; int stats_map_fd; @@ -732,27 +739,35 @@ int main(int argc, char **argv) fprintf(stderr, "ERR: pinning maps\n"); return err; } + ifname = cfg.ifname; - ifname = argv[2]; + + map_fd = open_bpf_map_file(pin_dir, "print_info_map", NULL); + if (map_fd < 0) { + return EXIT_FAIL_BPF; + } + i = 0; + bpf_map_update_elem(map_fd, &i, &cfg.print_info, 0); + // 根据不同的选项加载不同的配置文件 if (cfg.ip_filter) { load_bpf_map(); - err = load_handler_ipv4(argc - 3, argv + 6); + err = load_handler_ipv4(cfg.ip_filter_file); if (err) { fprintf(stderr, "ERR: loading IP filter config file\n"); return err; } } else if (cfg.mac_filter) { load_bpf_map(); - err = load_handler_mac(argc - 3, argv + 6); + err = load_handler_mac(cfg.mac_filter_file); if (err) { fprintf(stderr, "ERR: loading MAC filter config file\n"); return err; } } else if (cfg.router) { load_bpf_map(); - err = load_handler_router(argc - 3, argv + 6); + err = load_handler_router(cfg.router_file); if (err) { fprintf(stderr, "ERR: loading router config file\n"); return err; @@ -812,5 +827,5 @@ int main(int argc, char **argv) stats_poll(stats_map_fd, info.type, interval); return EXIT_OK; } - return EXIT_OK; -} + +} \ No newline at end of file diff --git a/eBPF_Supermarket/Network_Subsystem/net_manager/net_manager/xdp_prog_kern.c b/eBPF_Supermarket/Network_Subsystem/net_manager/net_manager/xdp_prog_kern.c index 57af0c58b..509e3e595 100644 --- a/eBPF_Supermarket/Network_Subsystem/net_manager/net_manager/xdp_prog_kern.c +++ b/eBPF_Supermarket/Network_Subsystem/net_manager/net_manager/xdp_prog_kern.c @@ -7,8 +7,6 @@ #include "common_kern_user.h" #include "../common/parsing_helpers.h" - - #ifndef memcpy #define memcpy(dest, src, n) __builtin_memcpy((dest), (src), (n)) #endif @@ -20,6 +18,14 @@ #define AF_INET6 10 #define IPV6_FLOWINFO_MASK bpf_htonl(0x0FFFFFFF) +// config map +struct { + __uint(type, BPF_MAP_TYPE_HASH); + __type(key, __u16); + __type(value, __u16); + __uint(max_entries, 1); +} print_info_map SEC(".maps"); + // 数据包统计 struct { __uint(type, BPF_MAP_TYPE_PERCPU_ARRAY); @@ -71,7 +77,6 @@ struct { __uint(max_entries, MAX_RULES); } conn_ipv4_map SEC(".maps"); - static __always_inline __u32 xdp_stats_record_action(struct xdp_md *ctx, __u32 action) { @@ -180,7 +185,6 @@ int ipv4_cidr_match(__u32 ip_addr, __u32 network_addr, __u8 cidr) { __u32 masked_ip = ip_addr & subnet_mask; __u32 masked_network = network_addr & subnet_mask; - return masked_ip == masked_network; } @@ -193,6 +197,9 @@ int port_match(__u16 conn_port, __u16 rule_port){ static int match_rules_ipv4_loop(__u32 index, void *ctx) { + int i = 0; + unsigned char *saddr; + unsigned char *daddr; struct match_rules_loop_ctx *p_ctx = (struct match_rules_loop_ctx *)ctx; if(index != p_ctx->next_rule) return 0; @@ -206,7 +213,7 @@ static int match_rules_ipv4_loop(__u32 index, void *ctx) if(index == 0) goto out_match_rules_ipv4_loop; - + //bpf_printk("match_rules_ipv4_loop %d",index); if( ipv4_cidr_match(p_ctx->conn->saddr, p_r->saddr, p_r->saddr_mask) && ipv4_cidr_match(p_ctx->conn->daddr, p_r->daddr, p_r->daddr_mask) && port_match(p_ctx->conn->sport, p_r->sport) && @@ -214,6 +221,18 @@ static int match_rules_ipv4_loop(__u32 index, void *ctx) port_match(p_ctx->conn->ip_proto, p_r->ip_proto) ) { p_ctx->action = p_r->action; + __u8 *print_info=(__u8*)bpf_map_lookup_elem(&print_info_map,&i); + if(!print_info) return 1; + if(print_info){ + saddr = (unsigned char *)&p_ctx->conn->saddr; + daddr = (unsigned char *)&p_ctx->conn->daddr; + //bpf_printk("%s ,%s",saddr,daddr); + bpf_printk("src: %lu.%lu.%lu.%lu:%d" ,(unsigned long)saddr[3], (unsigned long)saddr[2], (unsigned long)saddr[1], (unsigned long)saddr[0],p_ctx->conn->sport); + bpf_printk("dst: %lu.%lu.%lu.%lu:%d" ,(unsigned long)daddr[3], (unsigned long)daddr[2], (unsigned long)daddr[1], (unsigned long)daddr[0],p_ctx->conn->dport); + bpf_printk("prot:%d ,action:%d ,index:%d" ,p_ctx->conn->ip_proto,p_ctx->action, index); + bpf_printk("-----------------------------------"); + } + return 1; } @@ -282,7 +301,10 @@ int xdp_entry_ipv4(struct xdp_md *ctx) conn.sport = bpf_ntohs(udph -> source); conn.dport = bpf_ntohs(udph -> dest); } - + else if(nh_type == IPPROTO_ICMP){ + conn.sport = 0; + conn.dport = 0; + } conn.saddr = bpf_ntohl(iph -> saddr); conn.daddr = bpf_ntohl(iph -> daddr); conn.ip_proto = nh_type; @@ -354,7 +376,7 @@ int xdp_entry_router(struct xdp_md *ctx) ip_decrease_ttl(iph); memcpy(eth->h_dest, nitem.eth_dest, ETH_ALEN); memcpy(eth->h_source, nitem.eth_source, ETH_ALEN); - action = bpf_redirect_map(&tx_port, 0, 0); + action = bpf_redirect_map(&tx_port, 0, 0);//这里可能需要改 goto out; } From 31cd1560181e9f7b67cbf4000065d0c83eb5459c Mon Sep 17 00:00:00 2001 From: liuslient <57473872+liuslient@users.noreply.github.com> Date: Tue, 30 Jul 2024 09:45:16 +0800 Subject: [PATCH 06/11] =?UTF-8?q?fast=5Ffuse:=E6=B7=BB=E5=8A=A0=E5=88=A0?= =?UTF-8?q?=E9=99=A4=E5=8A=9F=E8=83=BD=20(#871)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fuse文件系统示例 * 添加文件创建功能 * 添加touch创建文件功能 * 解决问题 * 添加删除功能 * 修改 --------- Co-authored-by: qcloud --- .../fast_fuse/difuse/src/difuse | Bin 17520 -> 17624 bytes .../fast_fuse/difuse/src/difuse.c | 66 ++++++++++++++++++ .../fast_fuse/difuse/test/test.sh | 34 +++++++++ 3 files changed, 100 insertions(+) diff --git a/eBPF_Supermarket/Filesystem_Subsystem/fast_fuse/difuse/src/difuse b/eBPF_Supermarket/Filesystem_Subsystem/fast_fuse/difuse/src/difuse index 02094cfdae543c5bd3357c5503788493355417e5..8b255be73fa02d7c7da25c92ddd0ad14ec5f1558 100755 GIT binary patch delta 3107 zcmaJ@3s6+o89w*I0=q6|7hzvK+{Fa6L6H_C@lj!9%}qlyF^a7*6R^Q3?fM9UjkXkK zm@wHaPQ<@)hBVEPrqg6POj6v;6rI+Zu?;%fbg+-XG$zEV-OMt{TB$A%bNiih&y6n0 z^v>M-{pb51=l}n6?!71RoH80#4lPtYt9!rpD{GaNiL0vjLbNJkGS$4e&lmqkIyq^2RW(hM(!&?A=BWf zcF^(xI;w@=HA2oYavH;wW9+VHD|O5uavzR$PEyqM9aldr!oi71a6&tn`zM|UVyNVI z`_$vpw95UBj=X7I7izmy=k+gwmFRK0Gh(?^%Gl~y8e{uxBAZwT9Ju<-sq1$YP1S4R zD_YmMU*oG5vD6CRdSokF6GufzJZUV2Z3sjClb`Y|5FpaY6t;{++y?+hNFGs$rs(*HG}ujoWq? zA>Ua8z2Po&c4B?dD>LWPTXe`%LNo3;u5SuWFm_z!$%fzKJI%q>_u}=stcB}Gv0&Fr zQrurctFd4S@wT9(&v;2+*CN?xg&l(N7eWU6`3!>9dCvTor)c?JY9#9nO?X~+{`#Jj z`0J->!26K;b{b837pT2yROH+39J)KjreTU+@ojW&NM)xcDJ{P{yA;L9=_{_&k^G9q zF5V%&$HbO>=Q#3XCq&5yE${M;gtE5@8_R|TG?8CX*dJgFWb=P?{mdy?^L>mxoTYXB zG3!)Rv2Irm`~4kb(D1KZdP3K85$Bh{Rlv7_8-cagbbSW;#RwC^cptC_n0Z~-2Y^2W zo&){@I1VhB&~-cVdI4AltU}xBfO~);;2h-G16+ZfI-s%!_I(KFKrF)c7za)P?RXKd zV9S>Q%kXa30rvt!z^lL>;9J;g1HeJ7 zGmE^%^OY@hKc1IqbMgGZ3>x$^9ws=~(XFn{&QK5AGx0g&{~pmW+FzV+;VtW?K1jT2 zN9b5_{yICVUxqe~q-t^b*7}h<}-+;}Gj0rcXuRU*NLRj>VeVQ$$A> zf2cH4?~?h-Z)kAIZY7%n<+`fo)1c~dn!juF_w1sNm%7Pe_1nxJa7iI4)=lbJVXx|i z+%3oadGhM`rTAd<@N0W2)Q+A!gA#p(XhqLd=3wRwqGRCaN!~mFh)#hokh~)Q&kq>k zSgGXAj7@&2796Rr2Nm zqh9dne={wrEcdoRtzdud;5+!vi)t#}-cF%)vu9S{slrEqUWN8$q4lt5)}(5W(nzIS z`8_Gi+{%0WX^F$qk0qI>JWds0GpTo(yTXTU;$U93rzX`u06s@`vYw(;zLa|@YlQEk z+y>s8+=k6kY5JIq$*NO*w{tJc0cedp!W6jAtsD^%-=OvPxxK%Y5jV=6Q6&SM<~H7c zinu;@a%*bbMjC|g7_?62WBsxc^YnIwK8E(18Clk|Ooq5Y&gJexU202R23?L`@hcl^ zl*4=G^>YcecFS7D83qsr|F{)JA zm6DciJ9qEf*6`$x=1@~Z)3#l$E&Ewhb3@y%Q1h-IaH(ZyQ*%qye*eX^Xkt~Piq~`f znsRHSEU_^fUh{yWF3P6!)k|#Vis5~>)pX=W*9U-_})Vo W*WPPwlr4XSoVCl9&*{P1(*FU2tfw~s delta 2384 zcmaJ?YfKbZ6ux(0g6iEmd7f{ODn6aZpB!wV8LJ7UrnnODOj z3spSUq)nQpkElVLf=e2$rX{J5+K?i~R!y1~+ostB8<&a|5Sf1SLUw=jCUd{J-*?Wr z=bV|jb1T3jt^Du;p=)VJ?r~$Hktrjw<930`o1`whNtDX-O(SvYawIOahOgqrK6T0Z z=mX(53#*8XZE9}caN*+0+5;DEw+??X)D>!r+Z)$%Dor&ktyD2l^BWe`n*%X?lU?Oo zWB7iJAB^D}ZL0lf41dz0@C#XrS2fT#F4Yop#qgbC==X$-M5;6vo=JI=3;Ru>ede@y zDzv(t#~w+NKj4e_gSgt~RG1j^2Y&Vku7tNeqU}~MAEPg=nF61rYgXI*`bot)><`xB z^4-!*hd>X_RzkqBew|(Bz6Fde z3*%unna(Pk+9#AuAt#@V%VFT@U?l8}qALZ$opa;$xb7xKz`_&`boPIEQfBaM>tqC-}U7B&i1LCSW5l;l3mt1?~a%06zuZ06MY92=EZl zf`*qqkfb7D1F#18@xSl~_5+U!Y&CoDAp(H-33vnOMCK#FLqH22b=?>O05{|PssV<8 zjled%D@TEMfIV?E>B{1DyfIlHF&3$G{vWdF6$cR{}zrT6N33)=<*C%P#h zk*NfPG2MW*L7#+P9~EHzlztj|37UU9O20Ox_d$<9uZ_~zYC6ii3xj#1p%>;_jW~ds z>E%4XP~@aDdB5^P>d4RJ2dF!L2cJpq0!cWPM%{u{7#7K6TxHY`%zkovo~K?RQE0Tu zIzLJ7LNQf8?&O{2(J6ba`>equv~+4mu+nx}L-hhnVfxXm^G1!=Ln&>BxkcmkBVK7Q z_)Lx0k7lK-;Bz%z%eb5=?S!yM6ZA7)X(RY@jn~d{rnC?I3ffszV5)}7nT18Nsk11D z*V90eXnP4HW3!plCF7H^n|QHk3qmzBJL~moic7^~U31z-WTVYv@2jXHj#ws;S z4F+W!&wa#6f!d(Q(bRG9se+jm$#32CK^=&nCeOBoh@1-V^H$ZMP_tW1?j<6xR4g~r zh9#&4mS(}m5-X>NVr+*J=Pg-9B&4YfoLb5_Ox=j{i4v!W?jTN?w&NDFYJuZW8Ry7c zB5wT#Y6^N1Tgwlc*JJfZ%8E6weq~=f>(XkMKT>(z((K#jsOtjsLLPs~nRv!Dbx5mP z`Qbq|pc3)MYv#i+oiJjcKJSvxnZOD&dEyyK4S_#Xes7 diff --git a/eBPF_Supermarket/Filesystem_Subsystem/fast_fuse/difuse/src/difuse.c b/eBPF_Supermarket/Filesystem_Subsystem/fast_fuse/difuse/src/difuse.c index 387b0304c..03cdec001 100644 --- a/eBPF_Supermarket/Filesystem_Subsystem/fast_fuse/difuse/src/difuse.c +++ b/eBPF_Supermarket/Filesystem_Subsystem/fast_fuse/difuse/src/difuse.c @@ -151,6 +151,25 @@ void add_child_dentry(struct dfs_dentry *parent, struct dfs_dentry *child) parent->child = child; } +static int remove_child_dentry(struct dfs_dentry *parent, struct dfs_dentry *child) +{ + struct dfs_dentry *prev_child = NULL; + struct dfs_dentry *cur_child = parent->child; + + while (cur_child != NULL && cur_child != child) + { + prev_child = cur_child; + cur_child = cur_child->brother; + } + if (cur_child == NULL) + return 0; + + if (prev_child == NULL) + parent->child = cur_child->brother; + else prev_child->brother = cur_child->brother; + return 1; +} + struct dfs_dentry *traverse_path(struct dfs_dentry *start_dentry, const char *path, int ftype, int create) { struct dfs_dentry *dentry = start_dentry; @@ -220,6 +239,51 @@ struct dfs_dentry *lookup_or_create_dentry(const char *path, struct dfs_dentry * /*功能函数*/ +static int di_unlink(const char *path) +{ + struct dfs_dentry *dentry = look_up(root, path); + + if (dentry == NULL) + return -ENOENT; + if (dentry->ftype != FILE_TYPE) + return -EISDIR; + + if (remove_child_dentry(dentry->parent, dentry)) + { + lru_remove(dentry); + unsigned int index = hash(dentry->fname); + hash_table[index] = NULL; + free(dentry->inode); + free(dentry); + return 0; + } + return -ENOENT; +} + +static int di_rmdir(const char *path) +{ + struct dfs_dentry *dentry = look_up(root, path); + + if (dentry == NULL) + return -ENOENT; + if (dentry->ftype != DIRECTORY_TYPE) + return -ENOTDIR; + if (dentry->child != NULL) + return -ENOTEMPTY; + + // 移除子目录项 + if (remove_child_dentry(dentry->parent, dentry)) + { + lru_remove(dentry); + unsigned int index = hash(dentry->fname); + hash_table[index] = NULL; + free(dentry->inode); + free(dentry); + return 0; + } + return -ENOENT; +} + static int di_utimens(const char *path, const struct timespec ts[2], struct fuse_file_info *fi) { (void)fi; @@ -369,6 +433,8 @@ static struct fuse_operations difs_ops = { .mkdir = di_mkdir, .create = dfs_create, .utimens = di_utimens, + .unlink = di_unlink, + .rmdir = di_rmdir, }; int main(int argc, char *argv[]) diff --git a/eBPF_Supermarket/Filesystem_Subsystem/fast_fuse/difuse/test/test.sh b/eBPF_Supermarket/Filesystem_Subsystem/fast_fuse/difuse/test/test.sh index 55967cbd7..5dbb6234f 100755 --- a/eBPF_Supermarket/Filesystem_Subsystem/fast_fuse/difuse/test/test.sh +++ b/eBPF_Supermarket/Filesystem_Subsystem/fast_fuse/difuse/test/test.sh @@ -28,6 +28,12 @@ $FUSE_EXEC -f -d "$MOUNT_POINT" & FUSE_PID=$! sleep 2 # 等待文件系统完全挂载 +<<<<<<< HEAD +# 确保脚本退出时卸载文件系统 +trap "fusermount -u $MOUNT_POINT" EXIT + +======= +>>>>>>> e040be4f7b8f162b7a4c9b0c5f5bb40158e2b6fb # 创建目录 mkdir $MOUNT_POINT/dir1 mkdir $MOUNT_POINT/dir2 @@ -41,5 +47,33 @@ touch $MOUNT_POINT/dir2/file3 echo "创建的目录和文件结构:" ls -l $MOUNT_POINT +<<<<<<< HEAD +# 删除文件 +echo "删除文件 $MOUNT_POINT/dir1/file1 和 $MOUNT_POINT/dir2/file3..." +rm $MOUNT_POINT/dir1/file1 +rm $MOUNT_POINT/dir2/file3 + +# 验证文件删除 +echo "验证文件删除后的结构:" +ls -l $MOUNT_POINT/dir1 +ls -l $MOUNT_POINT/dir2 + +# 尝试删除非空目录 +echo "尝试删除非空目录 $MOUNT_POINT/dir1 (应失败)..." +rmdir $MOUNT_POINT/dir1 || echo "无法删除非空目录 $MOUNT_POINT/dir1, 操作成功。" + +# 删除剩余文件 +rm $MOUNT_POINT/dir1/file2 + +# 删除空目录 +echo "删除空目录 $MOUNT_POINT/dir1 和 $MOUNT_POINT/dir2..." +rmdir $MOUNT_POINT/dir1 +rmdir $MOUNT_POINT/dir2 + +# 验证目录删除 +echo "验证目录删除后的结构:" +ls -l $MOUNT_POINT +======= # 确保脚本退出时卸载文件系统 trap "fusermount -u $MOUNT_POINT" EXIT +>>>>>>> e040be4f7b8f162b7a4c9b0c5f5bb40158e2b6fb From a944dbca4c8103624d7298874087047f21c750a1 Mon Sep 17 00:00:00 2001 From: shangfan <45649554+sf1999817@users.noreply.github.com> Date: Tue, 30 Jul 2024 09:45:45 +0800 Subject: [PATCH 07/11] =?UTF-8?q?fs=5Fwatcher:=E6=B7=BB=E5=8A=A0=E4=BA=86?= =?UTF-8?q?=E5=AF=B9=E7=A3=81=E7=9B=98=E7=9A=84=E8=AE=BF=E9=97=AE=E6=A8=A1?= =?UTF-8?q?=E5=BC=8F=E7=9A=84=E6=A3=80=E6=B5=8B=EF=BC=8C=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E6=AF=8F=E6=AC=A1I/O=E6=93=8D=E4=BD=9C=E5=AF=B9=E4=BA=8E?= =?UTF-8?q?=E7=A3=81=E7=9B=98=E6=95=B0=E6=8D=AE=E7=9A=84=E8=AE=BF=E9=97=AE?= =?UTF-8?q?=E6=A8=A1=E5=BC=8F=EF=BC=88disk=5Fio=5Fvisit)=20(#872)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * write_expaned Signed-off-by: shangfan <45649554+sf1999817@users.noreply.github.com> * fs_watcher_new Signed-off-by: shangfan <45649554+sf1999817@users.noreply.github.com> * disk_io_visit Signed-off-by: shangfan <45649554+sf1999817@users.noreply.github.com> --------- Signed-off-by: shangfan <45649554+sf1999817@users.noreply.github.com> --- .../old_project/disk_io_visit.bpf.c | 59 ++++++++++++ .../old_project/disk_io_visit.c | 93 +++++++++++++++++++ .../old_project/disk_io_visit.h | 15 +++ 3 files changed, 167 insertions(+) create mode 100644 eBPF_Supermarket/Filesystem_Subsystem/old_project/disk_io_visit.bpf.c create mode 100644 eBPF_Supermarket/Filesystem_Subsystem/old_project/disk_io_visit.c create mode 100644 eBPF_Supermarket/Filesystem_Subsystem/old_project/disk_io_visit.h diff --git a/eBPF_Supermarket/Filesystem_Subsystem/old_project/disk_io_visit.bpf.c b/eBPF_Supermarket/Filesystem_Subsystem/old_project/disk_io_visit.bpf.c new file mode 100644 index 000000000..cdbacd3e4 --- /dev/null +++ b/eBPF_Supermarket/Filesystem_Subsystem/old_project/disk_io_visit.bpf.c @@ -0,0 +1,59 @@ +#include "vmlinux.h" +#include +#include +#include +#include "disk_io_visit.h" + +char LICENSE[] SEC("license") = "Dual BSD/GPL"; + +struct { + __uint(type, BPF_MAP_TYPE_RINGBUF); + __uint(max_entries, 256 * 1024); +} rb SEC(".maps"); + +// 进程名与 I/O 计数映射 +struct { + __uint(type, BPF_MAP_TYPE_HASH); + __uint(max_entries, 1024); + __type(key, char[TASK_COMM_LEN]); + __type(value, u32); +} io_count_map SEC(".maps"); + +SEC("tracepoint/block/block_rq_complete") +int tracepoint_block_visit(struct trace_event_raw_block_rq_complete *ctx) { + struct event *e; + u32 *count, new_count; + char comm[TASK_COMM_LEN]; + unsigned long long ts; + + // 获取当前进程名 + bpf_get_current_comm(comm, sizeof(comm)); + + // 查找或初始化该进程的I/O计数 + count = bpf_map_lookup_elem(&io_count_map, comm); + if (count) { + new_count = *count + 1; + } else { + new_count = 1; + } + bpf_map_update_elem(&io_count_map, comm, &new_count, BPF_ANY); + + // 分配 ringbuf 空间 + e = bpf_ringbuf_reserve(&rb, sizeof(*e), 0); + if (!e) { + return 0; + } + + // 填充事件数据 + ts= bpf_ktime_get_ns(); + e->timestamp = ts; + e->blk_dev = ctx->dev; + e->sectors = ctx->nr_sector; + e->rwbs = (ctx->rwbs[0] == 'R') ? 1 : 0; + e->count = new_count; + __builtin_memcpy(e->comm, comm, sizeof(comm)); + + // 提交事件 + bpf_ringbuf_submit(e, 0); + return 0; +} diff --git a/eBPF_Supermarket/Filesystem_Subsystem/old_project/disk_io_visit.c b/eBPF_Supermarket/Filesystem_Subsystem/old_project/disk_io_visit.c new file mode 100644 index 000000000..4b573c850 --- /dev/null +++ b/eBPF_Supermarket/Filesystem_Subsystem/old_project/disk_io_visit.c @@ -0,0 +1,93 @@ +#include +#include +#include +#include +#include "disk_io_visit.h" +#include "disk_io_visit.skel.h" +#include // For PRIu64 + +static int libbpf_print_fn(enum libbpf_print_level level, const char *format, va_list args) +{ + return vfprintf(stderr, format, args); +} + +static volatile bool exiting = false; + +static void sig_handler(int sig) +{ + exiting = true; +} + +static int handle_event(void *ctx, void *data,unsigned long data_sz) { + const struct event *e = data; + + printf("%-10llu %-9d %-7d %-4d %-7d %-16s\n", + e->timestamp, e->blk_dev, e->sectors, e->rwbs, e->count, e->comm); + + return 0; +} + +int main(int argc, char **argv) +{ + struct ring_buffer *rb = NULL; + struct disk_io_visit_bpf *skel; + int err; + + /* Set up libbpf errors and debug info callback */ + libbpf_set_print(libbpf_print_fn); + + /* Cleaner handling of Ctrl-C */ + signal(SIGINT, sig_handler); + signal(SIGTERM, sig_handler); + + /* Open BPF application */ + skel = disk_io_visit_bpf__open(); + if (!skel) { + fprintf(stderr, "Failed to open BPF skeleton\n"); + return 1; + } + + /* Load & verify BPF programs */ + err = disk_io_visit_bpf__load(skel); + if (err) { + fprintf(stderr, "Failed to load and verify BPF skeleton\n"); + goto cleanup; + } + + /* Attach tracepoints */ + err = disk_io_visit_bpf__attach(skel); + if (err) { + fprintf(stderr, "Failed to attach BPF skeleton\n"); + goto cleanup; + } + + /* Set up ring buffer polling */ + rb = ring_buffer__new(bpf_map__fd(skel->maps.rb), handle_event, NULL, NULL); + if (!rb) { + err = -1; + fprintf(stderr, "Failed to create ring buffer\n"); + goto cleanup; + } + + printf("%-18s %-7s %-7s %-4s %-7s %-16s\n","TIME", "DEV", "SECTOR", "RWBS", "COUNT", "COMM"); + while (!exiting) { + err = ring_buffer__poll(rb, 100 /* timeout, ms */); + /* Ctrl-C will cause -EINTR */ + if (err == -EINTR) { + err = 0; + break; + } + + if (err < 0) { + printf("Error polling ring buffer: %d\n", err); + break; + } + } + +cleanup: + /* Clean up */ + ring_buffer__free(rb); + disk_io_visit_bpf__destroy(skel); + + return err < 0 ? -err : 0; +} diff --git a/eBPF_Supermarket/Filesystem_Subsystem/old_project/disk_io_visit.h b/eBPF_Supermarket/Filesystem_Subsystem/old_project/disk_io_visit.h new file mode 100644 index 000000000..ef68f4443 --- /dev/null +++ b/eBPF_Supermarket/Filesystem_Subsystem/old_project/disk_io_visit.h @@ -0,0 +1,15 @@ +#ifndef DISK_IO_VISIT_H +#define DISK_IO_VISIT_H + +#define TASK_COMM_LEN 256 + +struct event { + long timestamp; // 时间戳 + int blk_dev; // 块设备号 + int sectors; // 访问的扇区数 + int rwbs; // 读写标识符,1表示读操作,0表示写操作 + int count; // I/O 操作计数 + char comm[TASK_COMM_LEN]; // 进程名 +}; + +#endif // DISK_IO_VISIT_H From 7eded63c731383546f29ab4346c27c95ff2c09ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=A9=AC=E5=AE=9C=E8=90=B1?= <85030740+syxl-time@users.noreply.github.com> Date: Tue, 30 Jul 2024 09:46:39 +0800 Subject: [PATCH 08/11] =?UTF-8?q?mem=5Fwatcher:=E6=B7=BB=E5=8A=A0=E8=B7=9F?= =?UTF-8?q?=E8=B8=AA=E8=99=9A=E6=8B=9F=E5=86=85=E5=AD=98=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E7=9A=84=E5=8A=9F=E8=83=BD=20(#874)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Memory_Subsystem/mem_watcher/Makefile | 2 +- .../mem_watcher/bpf/mem_watcher.bpf.c | 14 - .../mem_watcher/bpf/vmasnap.bpf.c | 247 ++++++++++++++++++ .../mem_watcher/include/mem_watcher.h | 27 ++ .../mem_watcher/mem_watcher.c | 126 +++++++++ 5 files changed, 401 insertions(+), 15 deletions(-) delete mode 100644 eBPF_Supermarket/Memory_Subsystem/mem_watcher/bpf/mem_watcher.bpf.c create mode 100644 eBPF_Supermarket/Memory_Subsystem/mem_watcher/bpf/vmasnap.bpf.c diff --git a/eBPF_Supermarket/Memory_Subsystem/mem_watcher/Makefile b/eBPF_Supermarket/Memory_Subsystem/mem_watcher/Makefile index 7c08e2775..7238a8af4 100644 --- a/eBPF_Supermarket/Memory_Subsystem/mem_watcher/Makefile +++ b/eBPF_Supermarket/Memory_Subsystem/mem_watcher/Makefile @@ -24,7 +24,7 @@ INCLUDES := -I$(OUTPUT) -I../../libbpf/include/uapi -I$(dir $(VMLINUX)) -I$(LIBB CFLAGS := -g -Wall ALL_LDFLAGS := $(LDFLAGS) $(EXTRA_LDFLAGS) -APPS = paf pr procstat sysstat memleak fraginfo +APPS = paf pr procstat sysstat memleak fraginfo vmasnap CARGO ?= $(shell which cargo) ifeq ($(strip $(CARGO)),) diff --git a/eBPF_Supermarket/Memory_Subsystem/mem_watcher/bpf/mem_watcher.bpf.c b/eBPF_Supermarket/Memory_Subsystem/mem_watcher/bpf/mem_watcher.bpf.c deleted file mode 100644 index 2872e867e..000000000 --- a/eBPF_Supermarket/Memory_Subsystem/mem_watcher/bpf/mem_watcher.bpf.c +++ /dev/null @@ -1,14 +0,0 @@ - -/* 请一定注意vmlinux.h头文件是依赖于特定架构的,本机编译的时候需要自行生成, -生成方法: -1、切换至本代码../../vmlinux/你的架构目录下; -2、安装Linux开发工具包:sudo apt install linux-tools-$(uname -r) -3、删除那个vmlinux_数字.h文件(记住它的名字); -4、生成vmlinux.h文件:bpftool btf dump file /sys/kernel/btf/vmlinux format c > vmlinux.h -5、将生成的vmlinux.h文件名字改成刚刚删除的vmlinux_数字.h -如果编译不通过,提示找不到vmlinux.h文件,那么请在本代码同级目录下运行生成vmlinux.h命令 */ -#include "vmlinux.h" -#include -#include -#include -#include "mem_watcher.h" \ No newline at end of file diff --git a/eBPF_Supermarket/Memory_Subsystem/mem_watcher/bpf/vmasnap.bpf.c b/eBPF_Supermarket/Memory_Subsystem/mem_watcher/bpf/vmasnap.bpf.c new file mode 100644 index 000000000..550aa2fe0 --- /dev/null +++ b/eBPF_Supermarket/Memory_Subsystem/mem_watcher/bpf/vmasnap.bpf.c @@ -0,0 +1,247 @@ +#include "vmlinux.h" +#include +#include +#include +#include "mem_watcher.h" + +char LICENSE[] SEC("license") = "Dual BSD/GPL"; + +// BPF Map 用于存储插入操作的事件数据 +struct { + __uint(type, BPF_MAP_TYPE_HASH); + __uint(max_entries, 256 * 1024); + __type(key, u64); + __type(value, struct insert_event_t); +} insert_events SEC(".maps"); + +// BPF Map 用于存储查找操作的事件数据 +struct { + __uint(type, BPF_MAP_TYPE_HASH); + __uint(max_entries, 256 * 1024); + __type(key, u64); + __type(value, struct find_event_t); +} find_events SEC(".maps"); + +// =============================== +// 查找操作的 Trace 函数 +// =============================== + +// Trace function for vmacache_find +SEC("kprobe/vmacache_find") +int BPF_KPROBE(trace_vmacache_find, struct mm_struct *mm, unsigned long addr) { + u64 pid = bpf_get_current_pid_tgid() >> 32; + struct find_event_t event = {}; + event.timestamp = bpf_ktime_get_ns(); + event.addr = addr; + + // Initialize event with default values + event.vmacache_hit = 0; + + // Update map with initial event details + bpf_map_update_elem(&find_events, &pid, &event, BPF_ANY); + return 0; +} + +SEC("kretprobe/vmacache_find") +int BPF_KRETPROBE(trace_vmacache_find_ret) { + u64 pid = bpf_get_current_pid_tgid() >> 32; + struct find_event_t *event; + struct vm_area_struct *vma; + + // Look up the event for the current PID + event = bpf_map_lookup_elem(&find_events, &pid); + if (event) { + // Check the return value of vmacache_find + vma = (struct vm_area_struct *)PT_REGS_RC(ctx); + if (vma) { + // If vma is not NULL, set vmacache_hit to 1 + event->vmacache_hit = 1; + } else { + // If vma is NULL, set vmacache_hit to 0 + event->vmacache_hit = 0; + } + + // Update the event in the map + bpf_map_update_elem(&find_events, &pid, event, BPF_ANY); + } + return 0; +} + +// Trace function for find_vma +SEC("kprobe/find_vma") +int BPF_KPROBE(trace_find_vma, struct mm_struct *mm, unsigned long addr) { + u64 pid = bpf_get_current_pid_tgid() >> 32; + struct find_event_t event = {}; + event.timestamp = bpf_ktime_get_ns(); + event.addr = addr; + + // Initialize event with default values + event.vmacache_hit = 0; + + // Update map with initial event details + bpf_map_update_elem(&find_events, &pid, &event, BPF_ANY); + return 0; +} + +SEC("kretprobe/find_vma") +int BPF_KRETPROBE(trace_find_vma_ret) { + u64 pid = bpf_get_current_pid_tgid() >> 32; + struct find_event_t *event; + struct vm_area_struct *vma; + + event = bpf_map_lookup_elem(&find_events, &pid); + if (event) { + event->duration = bpf_ktime_get_ns() - event->timestamp; + + // Retrieve vma and rb_subtree_last + vma = (struct vm_area_struct *)PT_REGS_RC(ctx); + if (vma) { + u64 rb_subtree_last = BPF_CORE_READ(vma, shared.rb_subtree_last); + u64 vm_start = BPF_CORE_READ(vma, vm_start); + u64 vm_end = BPF_CORE_READ(vma, vm_end); + + event->rb_subtree_last = rb_subtree_last; + event->vm_start = vm_start; + event->vm_end = vm_end; + bpf_printk("pid=%llu\n", pid); + bpf_printk("find_vma addr=%lu, duration=%llu ns, rb_subtree_last=%llu\n", + event->addr, event->duration, event->rb_subtree_last); + bpf_printk("vm_start=%llu, vm_end=%llu\n", + vm_start, vm_end); + bpf_printk("vmacache_hit=%d\n", event->vmacache_hit); + } + else { + bpf_printk("find_vma addr=%lu, duration=%llu ns, rb_subtree_last=not_available, vmacache_hit=%d\n", + event->addr, event->duration, event->vmacache_hit); + } + + // bpf_map_delete_elem(&find_events, &pid); + } + return 0; +} + +// =============================== +// 插入操作的 Trace 函数 +// =============================== + +// Trace function for insert_vm_struct +SEC("kprobe/insert_vm_struct") +int BPF_KPROBE(trace_insert_vm_struct, struct mm_struct *mm, struct vm_area_struct *vma) { + u64 pid = bpf_get_current_pid_tgid() >> 32; + struct insert_event_t event = {}; + event.timestamp = bpf_ktime_get_ns(); + + // Initialize event with default values + event.inserted_to_list = 0; + event.inserted_to_rb = 0; + event.inserted_to_interval_tree = 0; + event.link_list_duration = 0; + event.link_rb_duration = 0; + event.interval_tree_duration = 0; + + // Update map with initial event details + bpf_map_update_elem(&insert_events, &pid, &event, BPF_ANY); + + return 0; +} + +// Kprobe for __vma_link_list +SEC("kprobe/__vma_link_list") +int BPF_KPROBE(trace_vma_link_list, struct mm_struct *mm, struct vm_area_struct *vma, struct vm_area_struct *prev) { + u64 pid = bpf_get_current_pid_tgid() >> 32; + u64 timestamp = bpf_ktime_get_ns(); + struct insert_event_t *event = bpf_map_lookup_elem(&insert_events, &pid); + if (event) { + event->inserted_to_list = 1; + event->link_list_start_time = timestamp; + bpf_map_update_elem(&insert_events, &pid, event, BPF_ANY); + } + return 0; +} + +// Kprobe for __vma_link_rb +SEC("kprobe/__vma_link_rb") +int BPF_KPROBE(trace_vma_link_rb, struct mm_struct *mm, struct vm_area_struct *vma, struct vm_area_struct *prev, struct rb_node **rb_link, struct rb_node *rb_parent) { + u64 pid = bpf_get_current_pid_tgid() >> 32; + u64 timestamp = bpf_ktime_get_ns(); + struct insert_event_t *event = bpf_map_lookup_elem(&insert_events, &pid); + if (event) { + event->inserted_to_rb = 1; + event->link_rb_start_time = timestamp; + bpf_map_update_elem(&insert_events, &pid, event, BPF_ANY); + } + return 0; +} + +// Kprobe for vma_interval_tree_insert +SEC("kprobe/vma_interval_tree_insert") +int BPF_KPROBE(trace_vma_interval_tree_insert, struct vm_area_struct *vma, struct interval_tree_node *node) { + u64 pid = bpf_get_current_pid_tgid() >> 32; + u64 timestamp = bpf_ktime_get_ns(); + struct insert_event_t *event = bpf_map_lookup_elem(&insert_events, &pid); + if (event) { + event->inserted_to_interval_tree = 1; + event->interval_tree_start_time = timestamp; + bpf_map_update_elem(&insert_events, &pid, event, BPF_ANY); + } + return 0; +} + +// Return probe for insert_vm_struct +SEC("kretprobe/insert_vm_struct") +int BPF_KRETPROBE(trace_insert_vm_struct_ret) { + u64 pid = bpf_get_current_pid_tgid() >> 32; + struct insert_event_t *event = bpf_map_lookup_elem(&insert_events, &pid); + if (event) { + event->duration = bpf_ktime_get_ns() - event->timestamp; + + // Output the result + bpf_printk("insert_vm_struct duration=%llu ns, list=%d, rb=%d\n", + event->duration, event->inserted_to_list, + event->inserted_to_rb); + bpf_printk("interval_tree=%d\n", event->inserted_to_interval_tree); + + // Remove the event after processing + // bpf_map_delete_elem(&insert_events, &pid); + } + return 0; +} + +// Return probe for __vma_link_list +SEC("kretprobe/__vma_link_list") +int BPF_KRETPROBE(trace_vma_link_list_ret) { + u64 pid = bpf_get_current_pid_tgid() >> 32; + struct insert_event_t *event = bpf_map_lookup_elem(&insert_events, &pid); + if (event) { + u64 end_time = bpf_ktime_get_ns(); + event->link_list_duration = end_time - event->link_list_start_time; + bpf_printk("__vma_link_list duration=%llu ns\n", event->link_list_duration); + } + return 0; +} + +// Return probe for __vma_link_rb +SEC("kretprobe/__vma_link_rb") +int BPF_KRETPROBE(trace_vma_link_rb_ret) { + u64 pid = bpf_get_current_pid_tgid() >> 32; + struct insert_event_t *event = bpf_map_lookup_elem(&insert_events, &pid); + if (event) { + u64 end_time = bpf_ktime_get_ns(); + event->link_rb_duration = end_time - event->link_rb_start_time; + bpf_printk("__vma_link_rb duration=%llu ns\n", event->link_rb_duration); + } + return 0; +} + +// Return probe for vma_interval_tree_insert +SEC("kretprobe/vma_interval_tree_insert") +int BPF_KRETPROBE(trace_vma_interval_tree_insert_ret) { + u64 pid = bpf_get_current_pid_tgid() >> 32; + struct insert_event_t *event = bpf_map_lookup_elem(&insert_events, &pid); + if (event) { + u64 end_time = bpf_ktime_get_ns(); + event->interval_tree_duration = end_time - event->interval_tree_start_time; + bpf_printk("vma_interval_tree_insert duration=%llu ns\n", event->interval_tree_duration); + } + return 0; +} \ No newline at end of file diff --git a/eBPF_Supermarket/Memory_Subsystem/mem_watcher/include/mem_watcher.h b/eBPF_Supermarket/Memory_Subsystem/mem_watcher/include/mem_watcher.h index de3729d1e..1c69f4a1b 100644 --- a/eBPF_Supermarket/Memory_Subsystem/mem_watcher/include/mem_watcher.h +++ b/eBPF_Supermarket/Memory_Subsystem/mem_watcher/include/mem_watcher.h @@ -135,4 +135,31 @@ union combined_alloc_info { __u64 bits; }; +/* vmasnap.h */ +// 记录插入操作的事件数据 +struct insert_event_t { + unsigned long long timestamp; + unsigned long long duration; + int inserted_to_list; + int inserted_to_rb; + int inserted_to_interval_tree; + unsigned long long link_list_start_time; + unsigned long long link_rb_start_time; + unsigned long long interval_tree_start_time; + unsigned long long link_list_duration; + unsigned long long link_rb_duration; + unsigned long long interval_tree_duration; +}; + +// 记录查找操作的事件数据 +struct find_event_t { + unsigned long long timestamp; + unsigned long long duration; + unsigned long addr; + int vmacache_hit; + unsigned long long rb_subtree_last; + unsigned long long vm_start; + unsigned long long vm_end; +}; + #endif /* __MEM_WATCHER_H */ \ No newline at end of file diff --git a/eBPF_Supermarket/Memory_Subsystem/mem_watcher/mem_watcher.c b/eBPF_Supermarket/Memory_Subsystem/mem_watcher/mem_watcher.c index 22bf3fee4..f00b7ca05 100644 --- a/eBPF_Supermarket/Memory_Subsystem/mem_watcher/mem_watcher.c +++ b/eBPF_Supermarket/Memory_Subsystem/mem_watcher/mem_watcher.c @@ -34,6 +34,7 @@ #include "sysstat.skel.h" #include "fraginfo.skel.h" #include "memleak.skel.h" +#include "vmasnap.skel.h" #include "mem_watcher.h" #include "fraginfo.h" @@ -229,6 +230,7 @@ static struct env bool sysstat; bool memleak; bool fraginfo; + bool vmasnap; bool kernel_trace; bool print_time; int interval; @@ -245,6 +247,7 @@ static struct env .sysstat = false, .memleak = false, .fraginfo = false, + .vmasnap = false, .kernel_trace = true, .print_time = false, .rss = false, @@ -286,6 +289,9 @@ static const struct argp_option opts[] = { {"fraginfo", 'f', 0, 0, "print fraginfo",12}, {"interval", 'i', "INTERVAL", 0, "Print interval in seconds (default 1)"}, {"duration", 'd', "DURATION", 0, "Total duration in seconds to run (default 10)"}, + + {0, 0, 0, 0, "vmasnap:", 13}, + {"vmasnap", 'v', 0, 0, "print vmasnap (虚拟内存区域信息)"}, {NULL, 'h', NULL, OPTION_HIDDEN, "show the full help"}, {0}, }; @@ -311,6 +317,9 @@ static error_t parse_arg(int key, char *arg, struct argp_state *state) case 'f': env.fraginfo = true; break; + case 'v': + env.vmasnap = true; + break; case 's': env.sysstat = true; break; @@ -371,9 +380,12 @@ static int process_procstat(struct procstat_bpf *skel_procstat); static int process_sysstat(struct sysstat_bpf *skel_sysstat); static int process_memleak(struct memleak_bpf *skel_memleak, struct env); static int process_fraginfo(struct fraginfo_bpf *skel_fraginfo); +static int process_vmasnap(struct vmasnap_bpf *skel_vmasnap); static __u64 adjust_time_to_program_start_time(__u64 first_query_time); static int update_addr_times(struct memleak_bpf *skel_memleak); static int print_time(struct memleak_bpf *skel_memleak); +static void print_find_event_data(int map_fd); +static void print_insert_event_data(int map_fd); // Main function int main(int argc, char **argv) @@ -385,6 +397,7 @@ int main(int argc, char **argv) struct sysstat_bpf *skel_sysstat; struct memleak_bpf *skel_memleak; struct fraginfo_bpf *skel_fraginfo; + struct vmasnap_bpf *skel_vmasnap; err = argp_parse(&argp, argc, argv, 0, NULL, NULL); if (err) @@ -412,6 +425,10 @@ int main(int argc, char **argv) { PROCESS_SKEL(skel_fraginfo, fraginfo); } + else if (env.vmasnap) + { + PROCESS_SKEL(skel_vmasnap, vmasnap); + } else if (env.sysstat) { PROCESS_SKEL(skel_sysstat, sysstat); @@ -1256,4 +1273,113 @@ static int process_fraginfo(struct fraginfo_bpf *skel_fraginfo) fraginfo_cleanup: fraginfo_bpf__destroy(skel_fraginfo); return -err; +} + +// ================================================== vmasnap ==================================================================== +static void print_find_event_data(int map_fd) { + __aligned_u64 key = 0; + __aligned_u64 next_key; + struct find_event_t event; + + printf("Reading find events...\n"); + + // Print header + printf("%-10s %-20s %-15s %-20s %-20s %-20s %-20s\n", + "PID", "Address", "Duration", "VMACache Hit", "RB Subtree Last", "VM Start", "VM End"); + + while (bpf_map_get_next_key(map_fd, &key, &next_key) == 0) { + if (bpf_map_lookup_elem(map_fd, &next_key, &event) == 0) { + printf("%-10llu %-20lu %-15llu %-20d %-20llu %-20llu %-20llu\n", + next_key, event.addr, event.duration, event.vmacache_hit, + event.rb_subtree_last, event.vm_start, event.vm_end); + + // Delete the element from the map after printing + if (bpf_map_delete_elem(map_fd, &next_key) != 0) { + perror("Failed to delete element from map"); + } + } + + // Use a temporary variable to handle key update + __aligned_u64 temp_key = next_key; + key = temp_key; + } +} + + +static void print_insert_event_data(int map_fd) { + __aligned_u64 key = 0; + __aligned_u64 next_key; + struct insert_event_t event; + + printf("Reading insert events...\n"); + + // Print header + printf("%-10s %-15s %-15s %-20s %-20s %-20s %-20s %-20s\n", + "PID", "Duration", "List", "RB", "Interval Tree", "List Time", "RB Time", "Interval Tree Time"); + + while (bpf_map_get_next_key(map_fd, &key, &next_key) == 0) { + if (bpf_map_lookup_elem(map_fd, &next_key, &event) == 0) { + printf("%-10llu %-15llu %-15d %-20d %-20d %-20llu %-20llu %-20llu\n", + next_key, event.duration, event.inserted_to_list, event.inserted_to_rb, + event.inserted_to_interval_tree, event.link_list_duration, + event.link_rb_duration, event.interval_tree_duration); + + // Delete the element from the map after printing + if (bpf_map_delete_elem(map_fd, &next_key) != 0) { + perror("Failed to delete element from map"); + } + } + + // Use a temporary variable to handle key update + __aligned_u64 temp_key = next_key; + key = temp_key; + } +} + +static int process_vmasnap(struct vmasnap_bpf *skel_vmasnap) { + int err; + + // Load and verify BPF application + skel_vmasnap = vmasnap_bpf__open(); + if (!skel_vmasnap) { + fprintf(stderr, "Failed to open BPF skeleton\n"); + return 1; + } + + // Load & verify BPF programs + err = vmasnap_bpf__load(skel_vmasnap); + if (err) { + fprintf(stderr, "Failed to load and verify BPF skeleton\n"); + goto vmasnap_cleanup; + } + + // Attach tracepoints + err = vmasnap_bpf__attach(skel_vmasnap); + if (err) { + fprintf(stderr, "Failed to attach BPF skeleton\n"); + goto vmasnap_cleanup; + } + + printf("Successfully started! Press Ctrl-C to exit.\n"); + + // Get the file descriptors for the maps + int find_map_fd = bpf_map__fd(skel_vmasnap->maps.find_events); + int insert_map_fd = bpf_map__fd(skel_vmasnap->maps.insert_events); + + if (find_map_fd < 0 || insert_map_fd < 0) { + fprintf(stderr, "Failed to get file descriptor for maps\n"); + goto vmasnap_cleanup; + } + + // Main loop + while (!exiting) { + // Print events data every second + print_find_event_data(find_map_fd); + print_insert_event_data(insert_map_fd); + sleep(1); + } + +vmasnap_cleanup: + vmasnap_bpf__destroy(skel_vmasnap); + return 0; } \ No newline at end of file From d42e2aa363ebca99e341892b2ca5013dbaff6d1c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 16 Aug 2024 11:07:36 +0800 Subject: [PATCH 09/11] Bump github.com/cilium/cilium (#875) Bumps [github.com/cilium/cilium](https://github.com/cilium/cilium) from 1.14.12 to 1.14.14. - [Release notes](https://github.com/cilium/cilium/releases) - [Changelog](https://github.com/cilium/cilium/blob/1.14.14/CHANGELOG.md) - [Commits](https://github.com/cilium/cilium/compare/1.14.12...1.14.14) --- updated-dependencies: - dependency-name: github.com/cilium/cilium dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .../Network_Subsystem/TrafficManager/go.mod | 28 ++++---- .../Network_Subsystem/TrafficManager/go.sum | 68 +++++++++++-------- 2 files changed, 54 insertions(+), 42 deletions(-) diff --git a/eBPF_Supermarket/Network_Subsystem/TrafficManager/go.mod b/eBPF_Supermarket/Network_Subsystem/TrafficManager/go.mod index 675073ee9..6fba00706 100644 --- a/eBPF_Supermarket/Network_Subsystem/TrafficManager/go.mod +++ b/eBPF_Supermarket/Network_Subsystem/TrafficManager/go.mod @@ -3,7 +3,7 @@ module lmp/eTrafficManager go 1.20 require ( - github.com/cilium/cilium v1.14.12 + github.com/cilium/cilium v1.14.14 github.com/cilium/ebpf v0.11.0 github.com/prometheus/client_golang v1.16.0 github.com/prometheus/common v0.42.0 @@ -18,7 +18,7 @@ require ( github.com/davecgh/go-spew v1.1.1 // indirect github.com/emicklei/go-restful/v3 v3.10.2 // indirect github.com/fsnotify/fsnotify v1.6.0 // indirect - github.com/go-logr/logr v1.2.4 // indirect + github.com/go-logr/logr v1.4.2 // indirect github.com/go-ole/go-ole v1.2.6 // indirect github.com/go-openapi/analysis v0.21.4 // indirect github.com/go-openapi/errors v0.20.4 // indirect @@ -30,11 +30,11 @@ require ( github.com/go-openapi/swag v0.22.4 // indirect github.com/go-openapi/validate v0.22.1 // indirect github.com/gogo/protobuf v1.3.2 // indirect - github.com/golang/protobuf v1.5.3 // indirect + github.com/golang/protobuf v1.5.4 // indirect github.com/google/gnostic v0.5.7-v3refs // indirect - github.com/google/go-cmp v0.5.9 // indirect + github.com/google/go-cmp v0.6.0 // indirect github.com/google/gofuzz v1.2.0 // indirect - github.com/google/uuid v1.3.1 // indirect + github.com/google/uuid v1.6.0 // indirect github.com/hashicorp/hcl v1.0.0 // indirect github.com/imdario/mergo v0.3.12 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect @@ -54,7 +54,7 @@ require ( github.com/sasha-s/go-deadlock v0.3.1 // indirect github.com/shirou/gopsutil/v3 v3.23.5 // indirect github.com/sirupsen/logrus v1.9.3 // indirect - github.com/spf13/afero v1.9.5 // indirect + github.com/spf13/afero v1.10.0 // indirect github.com/spf13/cast v1.5.1 // indirect github.com/spf13/cobra v1.7.0 // indirect github.com/spf13/jwalterweatherman v1.1.0 // indirect @@ -68,15 +68,15 @@ require ( github.com/yusufpapurcu/wmi v1.2.3 // indirect go.mongodb.org/mongo-driver v1.11.3 // indirect golang.org/x/exp v0.0.0-20230522175609-2e198f4a06a1 // indirect - golang.org/x/net v0.23.0 // indirect - golang.org/x/oauth2 v0.11.0 // indirect - golang.org/x/sync v0.3.0 // indirect - golang.org/x/sys v0.18.0 // indirect - golang.org/x/term v0.18.0 // indirect - golang.org/x/text v0.14.0 // indirect + golang.org/x/net v0.27.0 // indirect + golang.org/x/oauth2 v0.18.0 // indirect + golang.org/x/sync v0.7.0 // indirect + golang.org/x/sys v0.22.0 // indirect + golang.org/x/term v0.22.0 // indirect + golang.org/x/text v0.16.0 // indirect golang.org/x/time v0.3.0 // indirect - google.golang.org/appengine v1.6.7 // indirect - google.golang.org/protobuf v1.33.0 // indirect + google.golang.org/appengine v1.6.8 // indirect + google.golang.org/protobuf v1.34.2 // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect diff --git a/eBPF_Supermarket/Network_Subsystem/TrafficManager/go.sum b/eBPF_Supermarket/Network_Subsystem/TrafficManager/go.sum index 183679d98..073b75e00 100644 --- a/eBPF_Supermarket/Network_Subsystem/TrafficManager/go.sum +++ b/eBPF_Supermarket/Network_Subsystem/TrafficManager/go.sum @@ -52,8 +52,8 @@ github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWR github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= github.com/cilium/checkmate v1.0.3 h1:CQC5eOmlAZeEjPrVZY3ZwEBH64lHlx9mXYdUehEwI5w= -github.com/cilium/cilium v1.14.12 h1:lQ4XilTUJK5R6BrZnSm4pYxj6jsBQFWlBuRHA5FHJ1I= -github.com/cilium/cilium v1.14.12/go.mod h1:Pjy+qd1hrrXulp78Hs76ahKCttij64LvjxFui9XquVA= +github.com/cilium/cilium v1.14.14 h1:KYxWuIcibhR2ad1IjAoUT1ofQt93vtSEQwkYRujjgus= +github.com/cilium/cilium v1.14.14/go.mod h1:Av3AtSEaR3A93p4saMzhNBCdCnmyvUGQYu8oueKmKIA= github.com/cilium/ebpf v0.11.0 h1:V8gS/bTCCjX9uUnkUFUpPsksM8n1lXBAvHcpiFk1X2Y= github.com/cilium/ebpf v0.11.0/go.mod h1:WE7CZAnqOL2RouJ4f1uyNhqr2P4CCvXFIqdRDUgWsVs= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= @@ -81,8 +81,8 @@ github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9 github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -github.com/go-logr/logr v1.2.4 h1:g01GSCwiDw2xSZfjJ2/T9M+S6pFdcNtFYsp+Y43HYDQ= -github.com/go-logr/logr v1.2.4/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= +github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY= github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= github.com/go-openapi/analysis v0.21.2/go.mod h1:HZwRk4RRisyG8vx2Oe6aqeSQcoxRp47Xkp3+K6q+LdY= @@ -176,8 +176,8 @@ github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= -github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= +github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= @@ -194,8 +194,9 @@ github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= @@ -216,8 +217,8 @@ github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1 h1:K6RDEckDVWvDI9JAJY github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.3.1 h1:KjJaJ9iWZ3jOFZIf1Lqf4laDRCasjl0BCmnEGxkdLb4= -github.com/google/uuid v1.3.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= @@ -323,8 +324,8 @@ github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMB github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= -github.com/spf13/afero v1.9.5 h1:stMpOSZFs//0Lv29HduCmli3GUfpFoF3Y1Q/aXj/wVM= -github.com/spf13/afero v1.9.5/go.mod h1:UBogFpq8E9Hx+xc5CNTTEpTnuHVmXDwZcZcE1eb/UhQ= +github.com/spf13/afero v1.10.0 h1:EaGW2JJh15aKOejeuJ+wpFSHnbd7GE6Wvp3TsNhb6LY= +github.com/spf13/afero v1.10.0/go.mod h1:UBogFpq8E9Hx+xc5CNTTEpTnuHVmXDwZcZcE1eb/UhQ= github.com/spf13/cast v1.5.1 h1:R+kOtfhWQE6TVQzY+4D7wJLBgkdVasCEFxSUBYBYIlA= github.com/spf13/cast v1.5.1/go.mod h1:b9PdjNptOpzXr7Rq1q9gJML/2cdGQAo69NKzQ10KN48= github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= @@ -352,7 +353,7 @@ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= -github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= +github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= github.com/subosito/gotenv v1.4.2 h1:X1TuBLAMDFbaTAChgCBLu3DU3UPyELpnF2jjJ2cz/S8= github.com/subosito/gotenv v1.4.2/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0= github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= @@ -376,6 +377,7 @@ github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= github.com/yusufpapurcu/wmi v1.2.3 h1:E1ctvB7uKFMOJw3fdOW32DwGE9I7t++CRUEMKvFoFiw= github.com/yusufpapurcu/wmi v1.2.3/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= go.mongodb.org/mongo-driver v1.7.3/go.mod h1:NqaYOwnXWr5Pm7AOpO5QFxKJ503nbMse/R79oO62zWg= @@ -398,6 +400,7 @@ golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20200302210943-78000ba7a073/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= +golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -435,6 +438,7 @@ golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -468,8 +472,9 @@ golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210421230115-4e50805a0758/go.mod h1:72T/g9IO56b78aLF+1Kcs5dz7/ng1VjMUvfKvpfy+jM= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs= -golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg= +golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.27.0 h1:5K3Njcw06/l2y9vpGCSdcxWOYHOUk3dVNGDXN+FvAys= +golang.org/x/net v0.27.0/go.mod h1:dDi0PyhWNoiUOrAS8uXv/vnScO4wnHQO4mj9fn/RytE= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -479,8 +484,8 @@ golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.11.0 h1:vPL4xzxBM4niKCW6g9whtaWVXTJf1U5e4aZxxFx/gbU= -golang.org/x/oauth2 v0.11.0/go.mod h1:LdF7O/8bLR/qWK9DrpXmbHLTouvRHK0SgJl0GmDBchk= +golang.org/x/oauth2 v0.18.0 h1:09qnuIAgzdx1XplqJvW6CQqMCtGZykZWcXzPMPUusvI= +golang.org/x/oauth2 v0.18.0/go.mod h1:Wf7knwG0MPoWIMMBgFlEaSUDaKskp0dCfrlJRJXbBi8= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -493,8 +498,9 @@ golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E= -golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= +golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M= +golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -539,16 +545,19 @@ golang.org/x/sys v0.0.0-20210420072515-93ed5bcd2bfe/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.9.1-0.20230616193735-e0c3b6e6ae3b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4= -golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.22.0 h1:RI27ohtqKCnwULzJLqkv897zojh5/DwS/ENaMzUOaWI= +golang.org/x/sys v0.22.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.18.0 h1:FcHjZXDMxI8mM3nwhX9HlKop4C0YQvCVCdwYl2wOtE8= -golang.org/x/term v0.18.0/go.mod h1:ILwASektA3OnRv7amZ1xhE/KTR+u50pbXfZ03+6Nx58= +golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.22.0 h1:BbsgPEJULsl2fV/AT3v15Mjva5yXKQDyKf+TbDz7QJk= +golang.org/x/term v0.22.0/go.mod h1:F3qCibpT5AMpCRfhfT53vVJwhLtIVHhB9XDjfFvnMI4= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -558,8 +567,9 @@ golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= -golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= +golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4= +golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -618,7 +628,8 @@ golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4f golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= -golang.org/x/tools v0.11.0 h1:EMCa6U9S2LtZXLAMoWiR/R8dAQFRqbAitmbJ2UKhoi8= +golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= +golang.org/x/tools v0.23.0 h1:SGsXPZ+2l4JsgaCKkx+FQ9YZ5XEtA1GZYuoDjenLjvg= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -648,8 +659,9 @@ google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7 google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM= +google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= @@ -715,8 +727,8 @@ google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGj google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= -google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= +google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg= +google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= From 84c57f806474744297bc8961701a797ab3e91fc2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 16 Aug 2024 11:10:52 +0800 Subject: [PATCH 10/11] Bump axios in /MagicEyes/src/visualization/vscode_ext/lmp_ext_vscode (#876) Bumps [axios](https://github.com/axios/axios) from 1.6.0 to 1.7.4. - [Release notes](https://github.com/axios/axios/releases) - [Changelog](https://github.com/axios/axios/blob/v1.x/CHANGELOG.md) - [Commits](https://github.com/axios/axios/compare/v1.6.0...v1.7.4) --- updated-dependencies: - dependency-name: axios dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .../vscode_ext/lmp_ext_vscode/package.json | 2 +- .../vscode_ext/lmp_ext_vscode/yarn.lock | 14 +++++++------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/MagicEyes/src/visualization/vscode_ext/lmp_ext_vscode/package.json b/MagicEyes/src/visualization/vscode_ext/lmp_ext_vscode/package.json index 967eb2fd8..e22b892cc 100644 --- a/MagicEyes/src/visualization/vscode_ext/lmp_ext_vscode/package.json +++ b/MagicEyes/src/visualization/vscode_ext/lmp_ext_vscode/package.json @@ -178,7 +178,7 @@ }, "dependencies": { "@types/uuid": "^9.0.6", - "axios": "^1.4.0", + "axios": "^1.7.4", "cors": "^2.8.5", "express": "^4.18.2", "http-proxy": "^1.18.1", diff --git a/MagicEyes/src/visualization/vscode_ext/lmp_ext_vscode/yarn.lock b/MagicEyes/src/visualization/vscode_ext/lmp_ext_vscode/yarn.lock index 5eee14503..c983e7f2c 100644 --- a/MagicEyes/src/visualization/vscode_ext/lmp_ext_vscode/yarn.lock +++ b/MagicEyes/src/visualization/vscode_ext/lmp_ext_vscode/yarn.lock @@ -638,12 +638,12 @@ asynckit@^0.4.0: resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== -axios@^1.4.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.0.tgz#f1e5292f26b2fd5c2e66876adc5b06cdbd7d2102" - integrity sha512-EZ1DYihju9pwVB+jg67ogm+Tmqc6JmhamRN6I4Zt8DfZu5lbcQGw3ozH9lFejSJgs/ibaef3A9PMXPLeefFGJg== +axios@^1.7.4: + version "1.7.4" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.7.4.tgz#4c8ded1b43683c8dd362973c393f3ede24052aa2" + integrity sha512-DukmaFRnY6AzAALSH4J2M3k6PkaC+MfaAGdEERRWcC9q3/TWQwLpHR8ZRLKTdQ3aBDL64EdluRDjJqKw+BPZEw== dependencies: - follow-redirects "^1.15.0" + follow-redirects "^1.15.6" form-data "^4.0.0" proxy-from-env "^1.1.0" @@ -1123,7 +1123,7 @@ events@^3.2.0: resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== -express@^4.19.2: +express@^4.18.2: version "4.19.2" resolved "https://registry.yarnpkg.com/express/-/express-4.19.2.tgz#e25437827a3aa7f2a827bc8171bbbb664a356465" integrity sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q== @@ -1260,7 +1260,7 @@ flatted@^3.2.9: resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.9.tgz#7eb4c67ca1ba34232ca9d2d93e9886e611ad7daf" integrity sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ== -follow-redirects@^1.0.0, follow-redirects@^1.15.0: +follow-redirects@^1.0.0, follow-redirects@^1.15.6: version "1.15.6" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.6.tgz#7f815c0cda4249c74ff09e95ef97c23b5fd0399b" integrity sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA== From f060dd316bde2253392b8b1fa6e14d4789fff370 Mon Sep 17 00:00:00 2001 From: ziyangfu Date: Tue, 20 Aug 2024 14:14:04 +0800 Subject: [PATCH 11/11] fix compile error: undefined reference to 'pthread_join' --- eBPF_Supermarket/CPU_Subsystem/eBPF_proc_image/Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/eBPF_Supermarket/CPU_Subsystem/eBPF_proc_image/Makefile b/eBPF_Supermarket/CPU_Subsystem/eBPF_proc_image/Makefile index 2c7d12a2a..d36f59600 100644 --- a/eBPF_Supermarket/CPU_Subsystem/eBPF_proc_image/Makefile +++ b/eBPF_Supermarket/CPU_Subsystem/eBPF_proc_image/Makefile @@ -142,7 +142,7 @@ $(CONTROLLER): %: $(OUTPUT)/%.o $(COMMON_OBJ) $(LIBBPF_OBJ) | $(OUTPUT) $(WORKTOOL): %: $(OUTPUT)/%.o $(COMMON_OBJ) $(LIBBPF_OBJ) | $(OUTPUT) $(call msg,BINARY,$@) - $(Q)$(CC) $^ $(ALL_LDFLAGS) -lstdc++ -lelf -lz -o $@ + $(Q)$(CC) $^ $(ALL_LDFLAGS) -lstdc++ -lelf -lz -lpthread -o $@ @mkdir -p $(OUTPUT)/data @[ -f $(OUTPUT)/data/offcpu_stack.txt ] || touch $(OUTPUT)/data/offcpu_stack.txt @@ -162,4 +162,4 @@ SUCCESS_MESSAGE: .DELETE_ON_ERROR: # keep intermediate (.skel.h, .bpf.o, etc) targets -.SECONDARY: \ No newline at end of file +.SECONDARY: