From cab07ec2706e2a36b51617d4a4a34a1237a9b526 Mon Sep 17 00:00:00 2001 From: BlazingTwist Date: Sun, 1 Sep 2024 06:00:35 +0200 Subject: [PATCH] content: Add "Zig: Build tiny, high performance executables with a modern language" post --- .../zig/16Threads16,384Input-Bytes.plot.png | Bin 0 -> 19230 bytes .../08/zig/16Threads512Input-Bytes.plot.png | Bin 0 -> 17597 bytes .../08/zig/1Thread16,384Input-Bytes.plot.png | Bin 0 -> 20670 bytes .../08/zig/1Thread512Input-Bytes.plot.png | Bin 0 -> 19113 bytes content/posts/2024/08/zig/app-capy.png | Bin 0 -> 9231 bytes content/posts/2024/08/zig/app-wasm.png | Bin 0 -> 13793 bytes .../2024/08/zig/binary-sizes.log2.plot.png | Bin 0 -> 19233 bytes .../posts/2024/08/zig/binary-sizes.plot.png | Bin 0 -> 21207 bytes content/posts/2024/08/zig/code/Md5.zig | 233 ++++ content/posts/2024/08/zig/code/build.zig | 176 +++ content/posts/2024/08/zig/code/build.zig.zon | 18 + content/posts/2024/08/zig/code/capy-Main.zig | 64 + content/posts/2024/08/zig/code/cli-Main.zig | 16 + content/posts/2024/08/zig/code/pico-Main.zig | 223 ++++ content/posts/2024/08/zig/code/sendData.py | 78 ++ .../posts/2024/08/zig/code/wasm-Main.html.txt | 59 + content/posts/2024/08/zig/code/wasm-Main.zig | 19 + content/posts/2024/08/zig/index.md | 1177 +++++++++++++++++ content/posts/2024/08/zig/md5_ghidra.png | Bin 0 -> 283990 bytes content/posts/2024/08/zig/md5_pseudo.png | Bin 0 -> 37680 bytes data/authors/eric.jarosch.yml | 1 + 21 files changed, 2064 insertions(+) create mode 100644 content/posts/2024/08/zig/16Threads16,384Input-Bytes.plot.png create mode 100644 content/posts/2024/08/zig/16Threads512Input-Bytes.plot.png create mode 100644 content/posts/2024/08/zig/1Thread16,384Input-Bytes.plot.png create mode 100644 content/posts/2024/08/zig/1Thread512Input-Bytes.plot.png create mode 100644 content/posts/2024/08/zig/app-capy.png create mode 100644 content/posts/2024/08/zig/app-wasm.png create mode 100644 content/posts/2024/08/zig/binary-sizes.log2.plot.png create mode 100644 content/posts/2024/08/zig/binary-sizes.plot.png create mode 100644 content/posts/2024/08/zig/code/Md5.zig create mode 100644 content/posts/2024/08/zig/code/build.zig create mode 100644 content/posts/2024/08/zig/code/build.zig.zon create mode 100644 content/posts/2024/08/zig/code/capy-Main.zig create mode 100644 content/posts/2024/08/zig/code/cli-Main.zig create mode 100644 content/posts/2024/08/zig/code/pico-Main.zig create mode 100755 content/posts/2024/08/zig/code/sendData.py create mode 100644 content/posts/2024/08/zig/code/wasm-Main.html.txt create mode 100644 content/posts/2024/08/zig/code/wasm-Main.zig create mode 100644 content/posts/2024/08/zig/index.md create mode 100644 content/posts/2024/08/zig/md5_ghidra.png create mode 100644 content/posts/2024/08/zig/md5_pseudo.png create mode 100644 data/authors/eric.jarosch.yml diff --git a/content/posts/2024/08/zig/16Threads16,384Input-Bytes.plot.png b/content/posts/2024/08/zig/16Threads16,384Input-Bytes.plot.png new file mode 100644 index 0000000000000000000000000000000000000000..d7c9ee3e53bd06351fcf819770ef6b01057f32dd GIT binary patch literal 19230 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 literal 0 HcmV?d00001 diff --git a/content/posts/2024/08/zig/1Thread16,384Input-Bytes.plot.png b/content/posts/2024/08/zig/1Thread16,384Input-Bytes.plot.png new file mode 100644 index 0000000000000000000000000000000000000000..3514f71bbc3c69fab593d1cdcad48e6755e1a595 GIT binary patch literal 20670 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 S@Ls}g=hQUMWT{-g|9=3}_1eJz literal 0 HcmV?d00001 diff --git a/content/posts/2024/08/zig/1Thread512Input-Bytes.plot.png b/content/posts/2024/08/zig/1Thread512Input-Bytes.plot.png new file mode 100644 index 0000000000000000000000000000000000000000..fc841fb9c8f62c2de2d65d23fbc3758b2efdfa23 GIT binary patch literal 19113 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 literal 0 HcmV?d00001 diff --git a/content/posts/2024/08/zig/app-capy.png b/content/posts/2024/08/zig/app-capy.png new file mode 100644 index 0000000000000000000000000000000000000000..5e93be805ca2f372bd42c38069ae0393b76a40d5 GIT binary patch literal 9231 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 literal 0 HcmV?d00001 diff --git a/content/posts/2024/08/zig/app-wasm.png b/content/posts/2024/08/zig/app-wasm.png new file mode 100644 index 0000000000000000000000000000000000000000..425d2d6b4497c7c9a9f529fca0478319618bfa7d GIT binary patch literal 13793 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

ro6EN0opmM03dN>q%^Sh1&z&T_Q38qpUSz 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 M61P%sK6&x~08LABhyVZp literal 0 HcmV?d00001 diff --git a/content/posts/2024/08/zig/code/Md5.zig b/content/posts/2024/08/zig/code/Md5.zig new file mode 100644 index 0000000..380b85f --- /dev/null +++ b/content/posts/2024/08/zig/code/Md5.zig @@ -0,0 +1,233 @@ +/// Md5 Implementation following the Pseudocode on https://en.wikipedia.org/wiki/MD5 +const std = @import("std"); +const FixedBufferAllocator = @import("std").heap.FixedBufferAllocator; +const time = @import("std").time; + +const init_a: u32 = 0x67452301; +const init_b: u32 = 0xefcdab89; +const init_c: u32 = 0x98badcfe; +const init_d: u32 = 0x10325476; + +const s_table: [64]u5 = init: { + const shift_table = .{ + [_]u5{ 7, 12, 17, 22 }, // + [_]u5{ 5, 9, 14, 20 }, // + [_]u5{ 4, 11, 16, 23 }, // + [_]u5{ 6, 10, 15, 21 }, // + }; + + var result: [64]u5 = undefined; + for (0..4) |table_index| { + for (table_index * 16..(table_index + 1) * 16) |i| { + result[i] = shift_table[table_index][i % 4]; + } + } + break :init result; +}; + +const k_table = init: { + var result: [64]u32 = undefined; + for (&result, 0..) |*p, i| { + p.* = @as(u32, @floor((1 << 32) * @abs(@sin(@as(f64, i) + 1)))); + } + break :init result; +}; + +/// Computes the md5 hash using optimizations for short (length 0-13) inputs. +pub fn computeMd5_shortU32(message: []const u32, hash: *[4]u32) !void { + if (message.len > 13) return error.MessageTooLong; + + var block: [16]u32 = undefined; + @memcpy(block[0..message.len], message); + block[message.len] = 0x80; + for (message.len + 1..16) |i| { + block[i] = 0; + } + block[14] = @truncate(message.len * 32); + + var a = init_a; + var b = init_b; + var c = init_c; + var d = init_d; + + inline for (0..4) |round| { + inline for (round * 16..(round + 1) * 16) |i| { + const g = comptime switch (round) { + 0 => i, + 1 => ((5 * i) + 1) & 0x0f, + 2 => ((3 * i) + 5) & 0x0f, + 3 => (7 * i) & 0x0f, + else => unreachable, + }; + const f = switch (round) { + inline 0 => ((b & c) | (~b & d)), + inline 1 => ((d & b) | (~d & c)), + inline 2 => (b ^ c ^ d), + inline 3 => (c ^ (b | ~d)), + else => unreachable, + } +% block[g] +% a +% k_table[i]; + + a = d; + d = c; + c = b; + const shift: u5 = s_table[i]; + b = b +% ((f << shift) | (f >> (~shift +% 1))); + } + } + + hash[0] = init_a +% a; + hash[1] = init_b +% b; + hash[2] = init_c +% c; + hash[3] = init_d +% d; +} + +export fn c_computeMd5(message: [*c]const u8, len: usize, hash: *[4]u32) void { + computeMd5(message[0..len], hash); +} + +pub fn computeMd5(message: []const u8, hash: *[4]u32) void { + const num_extra: u8 = @truncate(message.len % 64); + const num_msg_blocks = message.len / 64; + var pad_len: usize = undefined; + if (num_extra >= 56) { + pad_len = 32; + } else { + pad_len = 16; + } + var pad_block = [_]u32{0} ** 32; + for (0..num_extra) |i| { + pad_block[i / 4] |= (@as(u32, message[message.len - num_extra + i]) << (@as(u5, @truncate(i % 4)) * 8)); + } + pad_block[num_extra / 4] |= @as(u32, 0x80) << (@as(u5, @truncate(num_extra % 4)) * 8); + + // Die letzten 8 bytes mit der urspruenglichen Laenge der Nachricht befuellen + const original_length_bits: u64 = message.len * 8; + pad_block[pad_len - 2] = @truncate(original_length_bits & 0xffffffff); + pad_block[pad_len - 1] = @truncate((original_length_bits >> 32) & 0xffffffff); + + hash[0] = init_a; + hash[1] = init_b; + hash[2] = init_c; + hash[3] = init_d; + + for (0..num_msg_blocks) |block_index| { + const buffer: [*]const u32 = @ptrCast(@alignCast(message[(block_index * 64)..((block_index + 1) * 64)])); + var a = hash[0]; + var b = hash[1]; + var c = hash[2]; + var d = hash[3]; + + inline for (0..4) |round| { + inline for (round * 16..(round + 1) * 16) |i| { + const g = comptime switch (round) { + 0 => undefined, + 1 => ((5 * i) + 1) & 0x0f, + 2 => ((3 * i) + 5) & 0x0f, + 3 => (7 * i) & 0x0f, + else => unreachable, + }; + const f = switch (round) { + inline 0 => ((b & c) | (~b & d)) +% buffer[i], + inline 1 => ((d & b) | (~d & c)) +% buffer[g], + inline 2 => (b ^ c ^ d) +% buffer[g], + inline 3 => (c ^ (b | ~d)) +% buffer[g], + else => unreachable, + } +% a +% k_table[i]; + + a = d; + d = c; + c = b; + const shift: u5 = s_table[i]; + b = b +% ((f << shift) | (f >> (~shift +% 1))); + } + } + + hash[0] +%= a; + hash[1] +%= b; + hash[2] +%= c; + hash[3] +%= d; + } + + const num_padding_blocks = pad_len / 16; + for (0..num_padding_blocks) |pad_index| { + // Letze Runde auf dem Padding drehen + const pad_block_i = 16 * pad_index; + var a = hash[0]; + var b = hash[1]; + var c = hash[2]; + var d = hash[3]; + + inline for (0..4) |round| { + inline for (round * 16..(round + 1) * 16) |i| { + const g = comptime switch (round) { + 0 => undefined, + 1 => ((5 * i) + 1) & 0x0f, + 2 => ((3 * i) + 5) & 0x0f, + 3 => (7 * i) & 0x0f, + else => unreachable, + }; + const f = switch (round) { + inline 0 => ((b & c) | (~b & d)) +% pad_block[i + pad_block_i], + inline 1 => ((d & b) | (~d & c)) +% pad_block[g + pad_block_i], + inline 2 => (b ^ c ^ d) +% pad_block[g + pad_block_i], + inline 3 => (c ^ (b | ~d)) +% pad_block[g + pad_block_i], + else => unreachable, + } +% a +% k_table[i]; + + a = d; + d = c; + c = b; + const shift: u5 = s_table[i]; + b = b +% ((f << shift) | (f >> (~shift +% 1))); + } + } + + hash[0] +%= a; + hash[1] +%= b; + hash[2] +%= c; + hash[3] +%= d; + } +} + +pub fn toHexString(hash: *[4]u32, result: *[32]u8) !void { + _ = try std.fmt.bufPrint( + result, + "{x:0>8}{x:0>8}{x:0>8}{x:0>8}", + .{ @byteSwap(hash[0]), @byteSwap(hash[1]), @byteSwap(hash[2]), @byteSwap(hash[3]) }, + ); +} + +test "message of 1016 bytes : matches precomputed hash" { + const message = [_]u8{ 0xff, 0xdd, 0x2b, 0x9b, 0x7f, 0x45, 0xde, 0x3a, 0xac, 0x32, 0xf1, 0x92, 0xb8, 0x0b, 0xb2, 0xc7, 0x7e, 0xca, 0x53, 0x05, 0x65, 0x01, 0x1b, 0x5f, 0x93, 0x34, 0xcb, 0x6e, 0x1f, 0xb1, 0xde, 0xdd, 0xb1, 0xf4, 0x77, 0x93, 0x46, 0xd6, 0xea, 0x65, 0x8f, 0x0a, 0x15, 0xde, 0x9b, 0x76, 0x1a, 0xef, 0xd7, 0x2a, 0x1d, 0xc9, 0x59, 0x77, 0xe9, 0x61, 0xae, 0x40, 0xf5, 0x06, 0xe7, 0x90, 0x2b, 0xf7, 0xc9, 0xdf, 0xf6, 0xed, 0x97, 0x5c, 0x37, 0xb8, 0x58, 0xe2, 0x99, 0xd3, 0x19, 0x6a, 0x14, 0xef, 0x4c, 0x53, 0xfd, 0xe6, 0x7e, 0x66, 0x94, 0x7c, 0xc4, 0x4c, 0x62, 0x09, 0x06, 0x75, 0xe6, 0xd7, 0xa6, 0x6b, 0x4d, 0xd4, 0x12, 0x7a, 0x9a, 0xb3, 0xad, 0x34, 0xaf, 0x6f, 0xe5, 0x52, 0x64, 0x80, 0x73, 0x14, 0x34, 0xd0, 0x24, 0x59, 0x37, 0x25, 0x44, 0xd3, 0xc0, 0x3c, 0x32, 0x2f, 0xee, 0x84, 0xb8, 0x36, 0x90, 0xaf, 0xd6, 0x3a, 0xb5, 0x55, 0x68, 0x6e, 0x16, 0xe9, 0xd4, 0x75, 0x7d, 0xcb, 0x38, 0x9e, 0xd3, 0x12, 0x5d, 0xe8, 0x95, 0xd2, 0x13, 0xb0, 0x41, 0x41, 0x81, 0x47, 0x23, 0x32, 0x06, 0x60, 0x9c, 0x52, 0x08, 0x62, 0x7c, 0xaa, 0x17, 0x81, 0x53, 0xf6, 0x61, 0x50, 0xcf, 0x8f, 0x5b, 0x96, 0x65, 0x90, 0x82, 0x50, 0x9d, 0x50, 0x0b, 0x5b, 0x2f, 0xdd, 0xf1, 0xe4, 0x5a, 0xab, 0xa9, 0x85, 0x67, 0x3c, 0x53, 0xc6, 0xee, 0x84, 0x7f, 0x45, 0x6d, 0x90, 0x2a, 0x89, 0x2e, 0xb6, 0xf0, 0x7e, 0xac, 0xd2, 0xac, 0x15, 0xd4, 0x16, 0x76, 0xf2, 0x41, 0xbe, 0xe1, 0x45, 0x96, 0xd4, 0x4f, 0x13, 0xe1, 0x1b, 0x63, 0xbe, 0x8a, 0x70, 0x15, 0xae, 0x67, 0x47, 0x70, 0x70, 0x3b, 0xa0, 0xdd, 0x6c, 0xbb, 0x67, 0x3b, 0xb8, 0x69, 0x0a, 0x97, 0x15, 0x7a, 0x9c, 0x96, 0xc8, 0x80, 0x8f, 0xb9, 0xe0, 0x3e, 0x98, 0x69, 0x9d, 0x54, 0xee, 0x83, 0xc9, 0xe1, 0xd7, 0x9b, 0x10, 0xe8, 0x20, 0x5f, 0x0e, 0xde, 0x5b, 0x53, 0x79, 0xd8, 0xd9, 0x21, 0x8f, 0x8c, 0xba, 0xb7, 0x83, 0x76, 0x52, 0x3d, 0x20, 0xcf, 0x21, 0x9a, 0x3f, 0x80, 0xd8, 0x29, 0x95, 0x81, 0x74, 0xb4, 0xce, 0x7f, 0xac, 0x85, 0x01, 0x0b, 0x7d, 0x5a, 0x2f, 0x4b, 0x2c, 0xbe, 0xcf, 0x28, 0x77, 0xd2, 0x6e, 0x95, 0x43, 0x44, 0x9d, 0xa9, 0x38, 0xb0, 0xa6, 0x0f, 0x58, 0x9a, 0x9f, 0x17, 0x21, 0xea, 0x9a, 0xd2, 0xf8, 0xb3, 0x7a, 0xda, 0x10, 0x7c, 0x2a, 0x39, 0x33, 0x89, 0x38, 0xa4, 0x01, 0xd5, 0x1a, 0x9b, 0xb8, 0xcd, 0x4a, 0xda, 0x27, 0x67, 0xa6, 0xf8, 0x2f, 0x1b, 0x7b, 0xa4, 0x90, 0x0e, 0xb1, 0x65, 0xf8, 0x21, 0x3b, 0x3b, 0x0b, 0x27, 0x29, 0xea, 0xc8, 0x94, 0x35, 0xd4, 0x4b, 0x95, 0xfa, 0x90, 0x92, 0xe9, 0x21, 0xdf, 0xac, 0x01, 0xa1, 0xa3, 0x41, 0x27, 0x00, 0xaa, 0x32, 0x16, 0xe9, 0xcb, 0xd5, 0x5a, 0xd7, 0x5f, 0xa1, 0x8f, 0x5c, 0xd4, 0x2a, 0x63, 0x28, 0x21, 0x02, 0x4a, 0x3b, 0x89, 0x0a, 0x3d, 0x50, 0x93, 0x64, 0xc3, 0x53, 0xd5, 0x16, 0xed, 0x5f, 0x72, 0x7f, 0x9d, 0x97, 0x87, 0x56, 0xbe, 0x4d, 0x9e, 0x49, 0x2b, 0x7d, 0x06, 0x8b, 0x6f, 0x22, 0x1c, 0xaa, 0x11, 0x2d, 0xee, 0x2a, 0x83, 0xb6, 0xe1, 0x1f, 0x76, 0xb3, 0x55, 0xed, 0xd0, 0x06, 0x37, 0x1e, 0x61, 0xfe, 0x17, 0xd7, 0x00, 0xed, 0x3b, 0xd6, 0x36, 0xef, 0x0f, 0x28, 0xa5, 0x6f, 0x21, 0x07, 0x69, 0x3b, 0x26, 0x5f, 0x09, 0xb7, 0xd8, 0x73, 0xe7, 0xd8, 0xe5, 0x38, 0xe6, 0x4e, 0x51, 0x33, 0xc4, 0x4c, 0x14, 0xe4, 0xa8, 0x8a, 0x5f, 0x5e, 0x2f, 0xf7, 0x18, 0x57, 0xe4, 0xf0, 0xd1, 0x8b, 0xb7, 0x75, 0x8e, 0x39, 0x30, 0x54, 0xf9, 0xf1, 0x67, 0xfd, 0x56, 0xd0, 0x7a, 0x02, 0xdf, 0xff, 0x4d, 0x30, 0x76, 0x4e, 0x91, 0x09, 0xa4, 0x15, 0x59, 0xfe, 0x1c, 0xf0, 0x83, 0x46, 0x6d, 0xee, 0xc2, 0xa7, 0x0d, 0xce, 0xee, 0x9e, 0xdb, 0x76, 0x4b, 0x87, 0xd4, 0x02, 0x8b, 0xae, 0x84, 0xff, 0x24, 0xf5, 0x75, 0x7b, 0x6c, 0x30, 0x05, 0x08, 0x3c, 0xe7, 0x78, 0xd8, 0xc8, 0xca, 0x56, 0xed, 0x37, 0x02, 0xc2, 0xc5, 0x4d, 0x75, 0x82, 0xe6, 0x6d, 0x26, 0xb3, 0xa2, 0x4a, 0xc5, 0x37, 0xdc, 0x99, 0x36, 0x9a, 0x9a, 0x3c, 0xd0, 0x20, 0xed, 0x22, 0x72, 0x3f, 0xfc, 0x71, 0x5c, 0x4f, 0xf0, 0x26, 0x53, 0x8b, 0x9e, 0xe9, 0x90, 0xf8, 0x7e, 0xa9, 0x00, 0x57, 0xab, 0xa0, 0x90, 0x3a, 0xe3, 0x9d, 0x1f, 0xdd, 0x5e, 0xd8, 0x3a, 0x06, 0xeb, 0x9b, 0xb1, 0x05, 0xe3, 0x2f, 0xf9, 0x2d, 0x7a, 0x83, 0xce, 0x73, 0x5f, 0x76, 0xe5, 0x10, 0xa3, 0x61, 0xee, 0x02, 0x88, 0xa6, 0xf4, 0xb3, 0x21, 0x47, 0x3b, 0x09, 0xd2, 0x6d, 0x09, 0x0e, 0x2e, 0xf9, 0x8e, 0x19, 0x31, 0x27, 0x28, 0x21, 0x4e, 0xa6, 0x66, 0x39, 0x69, 0x38, 0x4f, 0x64, 0xa0, 0xfa, 0xc6, 0xa2, 0x29, 0x2a, 0x02, 0x8d, 0xf2, 0x50, 0xd5, 0xaf, 0xdb, 0xf9, 0x32, 0x74, 0xb0, 0xd5, 0x5e, 0x54, 0xd2, 0x70, 0x34, 0xc3, 0xc2, 0xcb, 0xb4, 0x79, 0xf0, 0x8a, 0x91, 0xe6, 0x7c, 0x5d, 0xbd, 0xe2, 0x09, 0x31, 0x59, 0x7e, 0x92, 0x97, 0xea, 0x5a, 0x1f, 0xd1, 0x72, 0xae, 0x69, 0x88, 0x85, 0xfb, 0x3f, 0x97, 0x37, 0x8b, 0xfc, 0x93, 0x71, 0x42, 0x1d, 0x58, 0xa5, 0xac, 0x49, 0x76, 0xcc, 0x25, 0xf2, 0x6f, 0x5b, 0x77, 0x42, 0x9f, 0xa9, 0xdc, 0xe7, 0x1c, 0xff, 0xb8, 0x62, 0xb3, 0x2b, 0x61, 0x4f, 0x1d, 0xf4, 0x64, 0xb0, 0x81, 0x7d, 0x08, 0xc2, 0xa4, 0x57, 0xbe, 0xd1, 0xb8, 0x33, 0x2d, 0xdd, 0xd1, 0x2e, 0xc9, 0x9b, 0x0c, 0x83, 0xde, 0xef, 0x55, 0x8f, 0xd3, 0xd9, 0xb7, 0x02, 0x37, 0x3b, 0xf7, 0x7f, 0x79, 0x9e, 0x7e, 0x79, 0x47, 0x1a, 0x04, 0x38, 0x0d, 0xbd, 0x98, 0x03, 0x83, 0x92, 0xf3, 0x8f, 0xbf, 0xfc, 0x2a, 0xca, 0x11, 0xfa, 0xcd, 0xb2, 0x68, 0xb5, 0x3e, 0x19, 0xc5, 0x25, 0x0e, 0xbf, 0x72, 0x2c, 0x56, 0xef, 0x4b, 0x07, 0x22, 0xd7, 0xea, 0x68, 0x0e, 0xba, 0xf9, 0xaa, 0xab, 0x74, 0x91, 0x5f, 0x66, 0xe5, 0xa3, 0x55, 0x26, 0x77, 0x19, 0x03, 0xb0, 0xbf, 0x76, 0x26, 0xbd, 0xad, 0xc3, 0x65, 0x39, 0x0a, 0xea, 0xcf, 0x3b, 0x55, 0x98, 0xc8, 0x17, 0xef, 0xd2, 0x85, 0x7c, 0x7e, 0xd3, 0x80, 0xd2, 0x0e, 0xd8, 0x9d, 0xd9, 0x5e, 0x27, 0x25, 0xbf, 0x7c, 0x6f, 0x11, 0x56, 0x7b, 0xbf, 0x2f, 0x3b, 0xdf, 0x22, 0x7e, 0xa1, 0x40, 0xc9, 0x99, 0x35, 0x11, 0x5f, 0x56, 0x23, 0x3d, 0xd6, 0xf5, 0xa5, 0xa4, 0xe8, 0x3d, 0xb1, 0xa7, 0xb6, 0x9d, 0xdc, 0x11, 0x1a, 0x8c, 0x9d, 0x74, 0x89, 0xae, 0xd4, 0x45, 0xfa, 0x93, 0x39, 0xc4, 0x33, 0x1a, 0xed, 0x31, 0x28, 0xda, 0x0f, 0x41, 0x9a, 0xb6, 0xb9, 0x09, 0x92, 0x84, 0x4e, 0xe1, 0xa2, 0x1c, 0xbf, 0x8f, 0xe3, 0xad, 0x4b, 0xbe, 0x27, 0xaf, 0x60, 0x40, 0xff, 0xf6, 0xfe, 0x25, 0x88, 0x34, 0x48, 0xe2, 0xf9, 0x77, 0xe0, 0xfd, 0x43, 0xaa, 0x0c, 0x16, 0xe9, 0x5c, 0xa3, 0xd3, 0xdf, 0x91, 0xe3, 0x7a, 0x94, 0x60, 0x8c, 0xdf, 0x42, 0x6a, 0x9f, 0xf4, 0x48, 0xa0, 0x7c, 0x95, 0x69, 0xcc, 0x53, 0x1f, 0x58, 0x80, 0xef, 0x7c, 0x39, 0xf8, 0x3f, 0x17, 0x5f, 0x14, 0x79, 0xb5, 0xa0, 0x8b, 0x07, 0x00, 0xfa, 0xef }; + var hash = [_]u32{0} ** 4; + computeMd5(&message, &hash); + const expected_hash = [4]u32{ 3824439167, 125395705, 3767690293, 3983405441 }; + try std.testing.expectEqual(expected_hash, hash); +} + +test "message of 1016 bytes : matches builtin md5" { + const message = [_]u8{ 0xff, 0xdd, 0x2b, 0x9b, 0x7f, 0x45, 0xde, 0x3a, 0xac, 0x32, 0xf1, 0x92, 0xb8, 0x0b, 0xb2, 0xc7, 0x7e, 0xca, 0x53, 0x05, 0x65, 0x01, 0x1b, 0x5f, 0x93, 0x34, 0xcb, 0x6e, 0x1f, 0xb1, 0xde, 0xdd, 0xb1, 0xf4, 0x77, 0x93, 0x46, 0xd6, 0xea, 0x65, 0x8f, 0x0a, 0x15, 0xde, 0x9b, 0x76, 0x1a, 0xef, 0xd7, 0x2a, 0x1d, 0xc9, 0x59, 0x77, 0xe9, 0x61, 0xae, 0x40, 0xf5, 0x06, 0xe7, 0x90, 0x2b, 0xf7, 0xc9, 0xdf, 0xf6, 0xed, 0x97, 0x5c, 0x37, 0xb8, 0x58, 0xe2, 0x99, 0xd3, 0x19, 0x6a, 0x14, 0xef, 0x4c, 0x53, 0xfd, 0xe6, 0x7e, 0x66, 0x94, 0x7c, 0xc4, 0x4c, 0x62, 0x09, 0x06, 0x75, 0xe6, 0xd7, 0xa6, 0x6b, 0x4d, 0xd4, 0x12, 0x7a, 0x9a, 0xb3, 0xad, 0x34, 0xaf, 0x6f, 0xe5, 0x52, 0x64, 0x80, 0x73, 0x14, 0x34, 0xd0, 0x24, 0x59, 0x37, 0x25, 0x44, 0xd3, 0xc0, 0x3c, 0x32, 0x2f, 0xee, 0x84, 0xb8, 0x36, 0x90, 0xaf, 0xd6, 0x3a, 0xb5, 0x55, 0x68, 0x6e, 0x16, 0xe9, 0xd4, 0x75, 0x7d, 0xcb, 0x38, 0x9e, 0xd3, 0x12, 0x5d, 0xe8, 0x95, 0xd2, 0x13, 0xb0, 0x41, 0x41, 0x81, 0x47, 0x23, 0x32, 0x06, 0x60, 0x9c, 0x52, 0x08, 0x62, 0x7c, 0xaa, 0x17, 0x81, 0x53, 0xf6, 0x61, 0x50, 0xcf, 0x8f, 0x5b, 0x96, 0x65, 0x90, 0x82, 0x50, 0x9d, 0x50, 0x0b, 0x5b, 0x2f, 0xdd, 0xf1, 0xe4, 0x5a, 0xab, 0xa9, 0x85, 0x67, 0x3c, 0x53, 0xc6, 0xee, 0x84, 0x7f, 0x45, 0x6d, 0x90, 0x2a, 0x89, 0x2e, 0xb6, 0xf0, 0x7e, 0xac, 0xd2, 0xac, 0x15, 0xd4, 0x16, 0x76, 0xf2, 0x41, 0xbe, 0xe1, 0x45, 0x96, 0xd4, 0x4f, 0x13, 0xe1, 0x1b, 0x63, 0xbe, 0x8a, 0x70, 0x15, 0xae, 0x67, 0x47, 0x70, 0x70, 0x3b, 0xa0, 0xdd, 0x6c, 0xbb, 0x67, 0x3b, 0xb8, 0x69, 0x0a, 0x97, 0x15, 0x7a, 0x9c, 0x96, 0xc8, 0x80, 0x8f, 0xb9, 0xe0, 0x3e, 0x98, 0x69, 0x9d, 0x54, 0xee, 0x83, 0xc9, 0xe1, 0xd7, 0x9b, 0x10, 0xe8, 0x20, 0x5f, 0x0e, 0xde, 0x5b, 0x53, 0x79, 0xd8, 0xd9, 0x21, 0x8f, 0x8c, 0xba, 0xb7, 0x83, 0x76, 0x52, 0x3d, 0x20, 0xcf, 0x21, 0x9a, 0x3f, 0x80, 0xd8, 0x29, 0x95, 0x81, 0x74, 0xb4, 0xce, 0x7f, 0xac, 0x85, 0x01, 0x0b, 0x7d, 0x5a, 0x2f, 0x4b, 0x2c, 0xbe, 0xcf, 0x28, 0x77, 0xd2, 0x6e, 0x95, 0x43, 0x44, 0x9d, 0xa9, 0x38, 0xb0, 0xa6, 0x0f, 0x58, 0x9a, 0x9f, 0x17, 0x21, 0xea, 0x9a, 0xd2, 0xf8, 0xb3, 0x7a, 0xda, 0x10, 0x7c, 0x2a, 0x39, 0x33, 0x89, 0x38, 0xa4, 0x01, 0xd5, 0x1a, 0x9b, 0xb8, 0xcd, 0x4a, 0xda, 0x27, 0x67, 0xa6, 0xf8, 0x2f, 0x1b, 0x7b, 0xa4, 0x90, 0x0e, 0xb1, 0x65, 0xf8, 0x21, 0x3b, 0x3b, 0x0b, 0x27, 0x29, 0xea, 0xc8, 0x94, 0x35, 0xd4, 0x4b, 0x95, 0xfa, 0x90, 0x92, 0xe9, 0x21, 0xdf, 0xac, 0x01, 0xa1, 0xa3, 0x41, 0x27, 0x00, 0xaa, 0x32, 0x16, 0xe9, 0xcb, 0xd5, 0x5a, 0xd7, 0x5f, 0xa1, 0x8f, 0x5c, 0xd4, 0x2a, 0x63, 0x28, 0x21, 0x02, 0x4a, 0x3b, 0x89, 0x0a, 0x3d, 0x50, 0x93, 0x64, 0xc3, 0x53, 0xd5, 0x16, 0xed, 0x5f, 0x72, 0x7f, 0x9d, 0x97, 0x87, 0x56, 0xbe, 0x4d, 0x9e, 0x49, 0x2b, 0x7d, 0x06, 0x8b, 0x6f, 0x22, 0x1c, 0xaa, 0x11, 0x2d, 0xee, 0x2a, 0x83, 0xb6, 0xe1, 0x1f, 0x76, 0xb3, 0x55, 0xed, 0xd0, 0x06, 0x37, 0x1e, 0x61, 0xfe, 0x17, 0xd7, 0x00, 0xed, 0x3b, 0xd6, 0x36, 0xef, 0x0f, 0x28, 0xa5, 0x6f, 0x21, 0x07, 0x69, 0x3b, 0x26, 0x5f, 0x09, 0xb7, 0xd8, 0x73, 0xe7, 0xd8, 0xe5, 0x38, 0xe6, 0x4e, 0x51, 0x33, 0xc4, 0x4c, 0x14, 0xe4, 0xa8, 0x8a, 0x5f, 0x5e, 0x2f, 0xf7, 0x18, 0x57, 0xe4, 0xf0, 0xd1, 0x8b, 0xb7, 0x75, 0x8e, 0x39, 0x30, 0x54, 0xf9, 0xf1, 0x67, 0xfd, 0x56, 0xd0, 0x7a, 0x02, 0xdf, 0xff, 0x4d, 0x30, 0x76, 0x4e, 0x91, 0x09, 0xa4, 0x15, 0x59, 0xfe, 0x1c, 0xf0, 0x83, 0x46, 0x6d, 0xee, 0xc2, 0xa7, 0x0d, 0xce, 0xee, 0x9e, 0xdb, 0x76, 0x4b, 0x87, 0xd4, 0x02, 0x8b, 0xae, 0x84, 0xff, 0x24, 0xf5, 0x75, 0x7b, 0x6c, 0x30, 0x05, 0x08, 0x3c, 0xe7, 0x78, 0xd8, 0xc8, 0xca, 0x56, 0xed, 0x37, 0x02, 0xc2, 0xc5, 0x4d, 0x75, 0x82, 0xe6, 0x6d, 0x26, 0xb3, 0xa2, 0x4a, 0xc5, 0x37, 0xdc, 0x99, 0x36, 0x9a, 0x9a, 0x3c, 0xd0, 0x20, 0xed, 0x22, 0x72, 0x3f, 0xfc, 0x71, 0x5c, 0x4f, 0xf0, 0x26, 0x53, 0x8b, 0x9e, 0xe9, 0x90, 0xf8, 0x7e, 0xa9, 0x00, 0x57, 0xab, 0xa0, 0x90, 0x3a, 0xe3, 0x9d, 0x1f, 0xdd, 0x5e, 0xd8, 0x3a, 0x06, 0xeb, 0x9b, 0xb1, 0x05, 0xe3, 0x2f, 0xf9, 0x2d, 0x7a, 0x83, 0xce, 0x73, 0x5f, 0x76, 0xe5, 0x10, 0xa3, 0x61, 0xee, 0x02, 0x88, 0xa6, 0xf4, 0xb3, 0x21, 0x47, 0x3b, 0x09, 0xd2, 0x6d, 0x09, 0x0e, 0x2e, 0xf9, 0x8e, 0x19, 0x31, 0x27, 0x28, 0x21, 0x4e, 0xa6, 0x66, 0x39, 0x69, 0x38, 0x4f, 0x64, 0xa0, 0xfa, 0xc6, 0xa2, 0x29, 0x2a, 0x02, 0x8d, 0xf2, 0x50, 0xd5, 0xaf, 0xdb, 0xf9, 0x32, 0x74, 0xb0, 0xd5, 0x5e, 0x54, 0xd2, 0x70, 0x34, 0xc3, 0xc2, 0xcb, 0xb4, 0x79, 0xf0, 0x8a, 0x91, 0xe6, 0x7c, 0x5d, 0xbd, 0xe2, 0x09, 0x31, 0x59, 0x7e, 0x92, 0x97, 0xea, 0x5a, 0x1f, 0xd1, 0x72, 0xae, 0x69, 0x88, 0x85, 0xfb, 0x3f, 0x97, 0x37, 0x8b, 0xfc, 0x93, 0x71, 0x42, 0x1d, 0x58, 0xa5, 0xac, 0x49, 0x76, 0xcc, 0x25, 0xf2, 0x6f, 0x5b, 0x77, 0x42, 0x9f, 0xa9, 0xdc, 0xe7, 0x1c, 0xff, 0xb8, 0x62, 0xb3, 0x2b, 0x61, 0x4f, 0x1d, 0xf4, 0x64, 0xb0, 0x81, 0x7d, 0x08, 0xc2, 0xa4, 0x57, 0xbe, 0xd1, 0xb8, 0x33, 0x2d, 0xdd, 0xd1, 0x2e, 0xc9, 0x9b, 0x0c, 0x83, 0xde, 0xef, 0x55, 0x8f, 0xd3, 0xd9, 0xb7, 0x02, 0x37, 0x3b, 0xf7, 0x7f, 0x79, 0x9e, 0x7e, 0x79, 0x47, 0x1a, 0x04, 0x38, 0x0d, 0xbd, 0x98, 0x03, 0x83, 0x92, 0xf3, 0x8f, 0xbf, 0xfc, 0x2a, 0xca, 0x11, 0xfa, 0xcd, 0xb2, 0x68, 0xb5, 0x3e, 0x19, 0xc5, 0x25, 0x0e, 0xbf, 0x72, 0x2c, 0x56, 0xef, 0x4b, 0x07, 0x22, 0xd7, 0xea, 0x68, 0x0e, 0xba, 0xf9, 0xaa, 0xab, 0x74, 0x91, 0x5f, 0x66, 0xe5, 0xa3, 0x55, 0x26, 0x77, 0x19, 0x03, 0xb0, 0xbf, 0x76, 0x26, 0xbd, 0xad, 0xc3, 0x65, 0x39, 0x0a, 0xea, 0xcf, 0x3b, 0x55, 0x98, 0xc8, 0x17, 0xef, 0xd2, 0x85, 0x7c, 0x7e, 0xd3, 0x80, 0xd2, 0x0e, 0xd8, 0x9d, 0xd9, 0x5e, 0x27, 0x25, 0xbf, 0x7c, 0x6f, 0x11, 0x56, 0x7b, 0xbf, 0x2f, 0x3b, 0xdf, 0x22, 0x7e, 0xa1, 0x40, 0xc9, 0x99, 0x35, 0x11, 0x5f, 0x56, 0x23, 0x3d, 0xd6, 0xf5, 0xa5, 0xa4, 0xe8, 0x3d, 0xb1, 0xa7, 0xb6, 0x9d, 0xdc, 0x11, 0x1a, 0x8c, 0x9d, 0x74, 0x89, 0xae, 0xd4, 0x45, 0xfa, 0x93, 0x39, 0xc4, 0x33, 0x1a, 0xed, 0x31, 0x28, 0xda, 0x0f, 0x41, 0x9a, 0xb6, 0xb9, 0x09, 0x92, 0x84, 0x4e, 0xe1, 0xa2, 0x1c, 0xbf, 0x8f, 0xe3, 0xad, 0x4b, 0xbe, 0x27, 0xaf, 0x60, 0x40, 0xff, 0xf6, 0xfe, 0x25, 0x88, 0x34, 0x48, 0xe2, 0xf9, 0x77, 0xe0, 0xfd, 0x43, 0xaa, 0x0c, 0x16, 0xe9, 0x5c, 0xa3, 0xd3, 0xdf, 0x91, 0xe3, 0x7a, 0x94, 0x60, 0x8c, 0xdf, 0x42, 0x6a, 0x9f, 0xf4, 0x48, 0xa0, 0x7c, 0x95, 0x69, 0xcc, 0x53, 0x1f, 0x58, 0x80, 0xef, 0x7c, 0x39, 0xf8, 0x3f, 0x17, 0x5f, 0x14, 0x79, 0xb5, 0xa0, 0x8b, 0x07, 0x00, 0xfa, 0xef }; + + var hash = [_]u32{0} ** 4; + computeMd5(&message, &hash); + + var builtin_hash = [_]u8{0} ** 16; + std.crypto.hash.Md5.hash(&message, &builtin_hash, .{}); + const builtin_u32: [4]u32 = @as([*]const u32, @ptrCast(@alignCast(&builtin_hash)))[0..4].*; + + try std.testing.expectEqual(builtin_u32, hash); +} + +test "short message : matches builtin md5" { + const message = [_]u8{ 0xca, 0xfe, 0xba, 0xbe }; + const message_u32: []const u32 = @as([*]const u32, @ptrCast(@alignCast(&message)))[0..1]; + + var hash = [_]u32{0} ** 4; + try computeMd5_shortU32(message_u32, &hash); + + var builtin_hash = [_]u8{0} ** 16; + std.crypto.hash.Md5.hash(&message, &builtin_hash, .{}); + const builtin_u32: [4]u32 = @as([*]const u32, @ptrCast(@alignCast(&builtin_hash)))[0..4].*; + + try std.testing.expectEqual(builtin_u32, hash); +} diff --git a/content/posts/2024/08/zig/code/build.zig b/content/posts/2024/08/zig/code/build.zig new file mode 100644 index 0000000..854f5cc --- /dev/null +++ b/content/posts/2024/08/zig/code/build.zig @@ -0,0 +1,176 @@ +const std = @import("std"); +const Build = std.Build; +const ResolvedTarget = std.Build.ResolvedTarget; +const OptimizeMode = std.builtin.OptimizeMode; + +const BuildConfig = struct { + md5_module: *std.Build.Module, + target: ResolvedTarget, + optimize: OptimizeMode, + doRun: bool, + }; +var buildConfig: BuildConfig = undefined; + +fn add_build_lib(b: *Build) !void { + const make_lib = b.option(bool, "make-lib", "Compile a static library that computes md5 hashes.") orelse false; + if (!make_lib) { + return; + } + + const lib = b.addStaticLibrary(.{ + .name = "Md5", + .root_source_file = b.path("src/Md5.zig"), + .target = buildConfig.target, + .optimize = buildConfig.optimize, + }); + const install_step = b.addInstallArtifact(lib, .{}); + b.getInstallStep().dependOn(&install_step.step); +} + +fn add_build_cli(b: *Build) !void { + const make_cli = b.option(bool, "make-cli", "Compile a Command-Line Application that prints the md5 hashes of all inputs to the console.") orelse false; + if (!make_cli) { + return; + } + + const exe = b.addExecutable(.{ + .name = "Md5-Cli", + .root_source_file = b.path("src/app/cli/Main.zig"), + .target = buildConfig.target, + .optimize = buildConfig.optimize, + }); + exe.root_module.addImport("../../Md5.zig", buildConfig.md5_module); + + const install_step = b.addInstallArtifact(exe, .{}); + b.getInstallStep().dependOn(&install_step.step); +} + +fn add_build_capy(b: *Build) !void { + const make_capy = b.option(bool, "make-capy", "Compile a GUI-based Application that displays the hash for text messages. (Using Capy)") orelse false; + if (!make_capy) { + return; + } + + const exe = b.addExecutable(.{ + .name = "Md5-Capy", + .root_source_file = b.path("src/app/capy-gui/Main.zig"), + .target = buildConfig.target, + .optimize = buildConfig.optimize, + }); + exe.root_module.addImport("../../Md5.zig", buildConfig.md5_module); + + // register dependencies + if (b.lazyDependency("capy", .{ + .target = buildConfig.target, + .optimize = buildConfig.optimize, + .app_name = @as([]const u8, "Md5-Gui-Capy"), + })) |capy| { + exe.root_module.addImport("capy", capy.module("capy")); + } + + const install_step = b.addInstallArtifact(exe, .{}); + b.getInstallStep().dependOn(&install_step.step); + + if (buildConfig.doRun) { + const run_step = b.addRunArtifact(exe); + b.getInstallStep().dependOn(&run_step.step); + } +} + +fn add_build_wasm(b: *Build) !void { + const make_wasm = b.option(bool, "make-wasm", "Compile a Module that can be used in WebAssembly") orelse false; + if (!make_wasm) { + return; + } + + const target = blk: { + if (!std.Target.isWasm(buildConfig.target.result)) { + std.debug.print( + "target {s}-{s} is not a valid target for wasm build. will use wasm32-freestanding\n", + .{ @tagName(buildConfig.target.result.cpu.arch), @tagName(buildConfig.target.result.os.tag) }, + ); + break :blk b.resolveTargetQuery(.{ + .os_tag = std.Target.Os.Tag.freestanding, + .cpu_arch = std.Target.Cpu.Arch.wasm32, + }); + } else { + break :blk buildConfig.target; + } + }; + + const exe = b.addExecutable(.{ + .name = "Md5-Wasm", + .root_source_file = b.path("src/app/wasm/Main.zig"), + .target = target, + .optimize = buildConfig.optimize, + }); + // based on absolutely nothing https://ziggit.dev/t/build-wasm-using-zig-build-system-when-ther-is-no-entry-point-but-function-to-export/4364/2 + exe.rdynamic = true; + exe.entry = .disabled; + exe.import_memory = true; // https://github.com/ziglang/zig/issues/8633 + exe.root_module.addImport("../../Md5.zig", buildConfig.md5_module); + + const install_step = b.addInstallArtifact(exe, .{}); + b.getInstallStep().dependOn(&install_step.step); +} + +fn add_build_pico(b: *Build) !void { + const make_pico = b.option(bool, "make-pico", "Compile firmware for the raspberry pi pico that implements the md5 library as a usb device.") orelse false; + if (!make_pico) { + return; + } + + const MicroZig = @import("microzig/build"); + const rp2040 = @import("microzig/bsp/raspberrypi/rp2040"); + + const mz = MicroZig.init(b, .{}); + const firmware = mz.add_firmware(b, .{ + .name = "Md5-Pico", + .root_source_file = b.path("src/app/pico/Main.zig"), + .target = rp2040.boards.raspberrypi.pico, + .optimize = buildConfig.optimize, + }); + firmware.modules.app.addImport("../../Md5.zig", buildConfig.md5_module); + + mz.install_firmware(b, firmware, .{}); +} + +fn run_tests(b: *Build) !void { + const do_test = b.option(bool, "test", "Run all tests") orelse false; + if (!do_test) { + return; + } + + const tests = b.addTest(.{ + .root_source_file = b.path("src/app/wasm/Main.zig"), + .target = b.resolveTargetQuery(.{ .cpu_arch = .x86_64, .os_tag = .linux }), + }); + tests.root_module.addImport("../../Md5.zig", buildConfig.md5_module); + const run_test = b.addRunArtifact(tests); + b.getInstallStep().dependOn(&run_test.step); +} + +pub fn build(b: *std.Build) !void { + buildConfig = .{ + .md5_module = undefined, + .target = b.standardTargetOptions(.{}), + .optimize = b.standardOptimizeOption(.{ + .preferred_optimize_mode = OptimizeMode.ReleaseSmall, + }), + .doRun = b.option(bool, "run", "run the compiled application(s)") orelse false, + }; + + buildConfig.md5_module = b.addModule("Md5", .{ + .root_source_file = b.path("src/Md5.zig"), + .target = buildConfig.target, + .optimize = buildConfig.optimize, + }); + + try run_tests(b); + + try add_build_lib(b); + try add_build_cli(b); + try add_build_capy(b); + try add_build_wasm(b); + try add_build_pico(b); +} diff --git a/content/posts/2024/08/zig/code/build.zig.zon b/content/posts/2024/08/zig/code/build.zig.zon new file mode 100644 index 0000000..f3713cd --- /dev/null +++ b/content/posts/2024/08/zig/code/build.zig.zon @@ -0,0 +1,18 @@ +.{ + .name = "Md5", + .version = "1.0.0", + .paths = .{""}, + .dependencies = .{ + .capy = .{ + .url = "https://github.com/capy-ui/capy/archive/d55a9ddf39ebaeed7d25279c08922bb8cf4613db.tar.gz", + .hash = "12202d8a1a46e0e78dc366ba3cb9843821b65ed3d0e110cf705bdeaba9eb8f75ac75", + .lazy = true, + }, + .@"microzig/build" = .{ + .path = "../../forks/microzig/build/", + }, + .@"microzig/bsp/raspberrypi/rp2040" = .{ + .path = "../../forks/microzig/bsp/raspberrypi/rp2040/", + }, + }, +} \ No newline at end of file diff --git a/content/posts/2024/08/zig/code/capy-Main.zig b/content/posts/2024/08/zig/code/capy-Main.zig new file mode 100644 index 0000000..2bf9bba --- /dev/null +++ b/content/posts/2024/08/zig/code/capy-Main.zig @@ -0,0 +1,64 @@ +const std = @import("std"); +const capy = @import("capy"); +const md5 = @import("../../Md5.zig"); + +// Override the allocator used by Capy +var gpa = std.heap.GeneralPurposeAllocator(.{}){}; +pub const capy_allocator = gpa.allocator(); + +const UiElements = struct { + textInput: *capy.TextField, + outputLabel: *capy.TextField, +}; +var uiElements: UiElements = undefined; + +fn onInputChanged(_: []const u8, _: ?*anyopaque) void { + var hash: [4]u32 = undefined; + md5.computeMd5(uiElements.textInput.text.get(), &hash); + + var hash_str: [32]u8 = undefined; + if (md5.toHexString(&hash, &hash_str)) { + uiElements.outputLabel.text.set(&hash_str); + } else |err| { + const err_str = std.fmt.allocPrint( + capy_allocator, + "failed to format hash. error={s}", + .{@errorName(err)}, + ) catch unreachable; + defer capy_allocator.free(err_str); + uiElements.outputLabel.text.set(err_str); + } +} + +pub fn main() !void { + try capy.backend.init(); + defer _ = gpa.deinit(); + + var window = try capy.Window.init(); + defer window.deinit(); + + uiElements = .{ + .textInput = capy.textField(.{ .text = "Hello, World!" }), + .outputLabel = capy.textField(.{ .text = "", .readOnly = true }), + }; + + _ = try uiElements.textInput.text.addChangeListener(.{ .function = &onInputChanged }); + + try window.set(capy.column(.{}, .{ + capy.row(.{}, .{ + capy.label(.{ .text = "Message (In)" }), + capy.expanded(uiElements.textInput), + }), + capy.row(.{}, .{ + capy.label(.{ .text = "Hash (Out)" }), + capy.expanded(uiElements.outputLabel), + }), + })); + + // compute initial hash + onInputChanged(undefined, undefined); + + window.setPreferredSize(400, 80); + window.show(); + capy.runEventLoop(); +} diff --git a/content/posts/2024/08/zig/code/cli-Main.zig b/content/posts/2024/08/zig/code/cli-Main.zig new file mode 100644 index 0000000..6379317 --- /dev/null +++ b/content/posts/2024/08/zig/code/cli-Main.zig @@ -0,0 +1,16 @@ +const std = @import("std"); +const md5 = @import("../../Md5.zig"); + +pub fn main() !void { + const stdOut = std.io.getStdOut().writer(); + + var arg_iterator = std.process.args(); + var hash: [4]u32 = undefined; + _ = arg_iterator.next(); // skip program name + while (arg_iterator.next()) |arg| { + md5.computeMd5(arg, &hash); + var hash_str: [32]u8 = undefined; + try md5.toHexString(&hash, &hash_str); + try stdOut.print("'{s}' => {s}\n", .{ arg, hash_str }); + } +} diff --git a/content/posts/2024/08/zig/code/pico-Main.zig b/content/posts/2024/08/zig/code/pico-Main.zig new file mode 100644 index 0000000..dc8e5a0 --- /dev/null +++ b/content/posts/2024/08/zig/code/pico-Main.zig @@ -0,0 +1,223 @@ +const std = @import("std"); +const microzig = @import("microzig"); +const md5 = @import("../../Md5.zig"); + +const rp2040 = microzig.hal; +const time = rp2040.time; +const gpio = rp2040.gpio; +const usb = rp2040.usb; + +var ep1_out_cfg: usb.EndpointConfiguration = .{ + .descriptor = &usb.EndpointDescriptor{ + .descriptor_type = usb.DescType.Endpoint, + .endpoint_address = usb.Dir.Out.endpoint(1), + .attributes = @intFromEnum(usb.TransferType.Bulk), + .max_packet_size = 64, + .interval = 0, + }, + .endpoint_control_index = 2, + .buffer_control_index = 3, + .data_buffer_index = 2, + .next_pid_1 = false, +}; + +var ep1_in_cfg: usb.EndpointConfiguration = .{ + .descriptor = &usb.EndpointDescriptor{ + .descriptor_type = usb.DescType.Endpoint, + .endpoint_address = usb.Dir.In.endpoint(1), + .attributes = @intFromEnum(usb.TransferType.Bulk), + .max_packet_size = 64, + .interval = 0, + }, + .endpoint_control_index = 1, + .buffer_control_index = 2, + .data_buffer_index = 3, + .next_pid_1 = false, +}; + +pub fn createDeviceConfig( + out_callback: *const fn (dc: *usb.DeviceConfiguration, data: []const u8) void, + in_callback: *const fn (dc: *usb.DeviceConfiguration, data: []const u8) void, +) usb.DeviceConfiguration { + ep1_out_cfg.callback = out_callback; + ep1_in_cfg.callback = in_callback; + + // construct the device configuration + return usb.DeviceConfiguration{ + .device_descriptor = &.{ + .descriptor_type = usb.DescType.Device, + .bcd_usb = 0x0110, + .device_class = 0, + .device_subclass = 0, + .device_protocol = 0, + .max_packet_size0 = 64, + .vendor = 0, + .product = 1, + .bcd_device = 0, + .manufacturer_s = 1, + .product_s = 2, + .serial_s = 0, + .num_configurations = 1, + }, + .interface_descriptor = &.{ + .descriptor_type = usb.DescType.Interface, + .interface_number = 0, + .alternate_setting = 0, + // We have two endpoints (EP0 IN/OUT don't count) + .num_endpoints = 2, + .interface_class = 0xff, + .interface_subclass = 0, + .interface_protocol = 0, + .interface_s = 0, + }, + .config_descriptor = &.{ + .descriptor_type = usb.DescType.Config, + // This is calculated via the sizes of underlying descriptors contained in this configuration. + // ConfigurationDescriptor(9) + InterfaceDescriptor(9) * 1 + EndpointDescriptor(8) * 2 + .total_length = 34, + .num_interfaces = 1, + .configuration_value = 1, + .configuration_s = 0, + .attributes = 0xc0, + .max_power = 0x32, + }, + .lang_descriptor = "\x04\x03\x09\x04", // length || string descriptor (0x03) || Engl (0x0409) + .descriptor_strings = &.{ + // ugly unicode :| + "R\x00a\x00s\x00p\x00b\x00e\x00r\x00r\x00y\x00 \x00P\x00i\x00", + "P\x00i\x00c\x00o\x00 \x00T\x00e\x00s\x00t\x00 \x00D\x00e\x00v\x00i\x00c\x00e\x00", + }, + // Here we pass all endpoints to the config + // Dont forget to pass EP0_[IN|OUT] in the order seen below! + .endpoints = .{ + &usb.EP0_OUT_CFG, + &usb.EP0_IN_CFG, + &ep1_out_cfg, + &ep1_in_cfg, + }, + }; +} + +const led = gpio.num(25); +const uart = rp2040.uart.num(0); +const baud_rate = 115200; +const uart_tx_pin = gpio.num(0); +const uart_rx_pin = gpio.num(1); + +const MessageError = error{ + MessageTooLong, +}; + +// there is no useful allocator available using microzig. +const Message = struct { + response: [64]u8 = undefined, + hash_buffer: [4]u32 = undefined, + buffer: [4096]u8 = undefined, + num_bytes_received: u32, + num_bytes_remaining: u32, +}; +var message = Message{ + .num_bytes_received = 0, + .num_bytes_remaining = 0, +}; + +fn ep1_in_callback(dc: *usb.DeviceConfiguration, _: []const u8) void { + // prepare to receive the next 64 byte message. + usb.Usb.callbacks.usb_start_rx( + dc.endpoints[2], // EP1_OUT_CFG, + 64, + ); +} + +fn ep1_out_callback(dc: *usb.DeviceConfiguration, data: []const u8) void { + handle_ep1_out_callback(dc, data) catch |err| { + // send error as result message + const fmt_msg = std.fmt.bufPrint(&message.response, "error: {s}", .{@errorName(err)}) catch unreachable; + usb.Usb.callbacks.usb_start_tx( + dc.endpoints[3], // EP1_IN_CFG, + fmt_msg, + ); + }; +} + +fn handle_ep1_out_callback(dc: *usb.DeviceConfiguration, data: []const u8) !void { + if (message.num_bytes_remaining == 0) { + // receiving new request -> first message format is .{ msg_len: u32, msg_part: [60]u8 } + const msg_len: u32 = @as(*const u32, @ptrCast(@alignCast(data[0..4]))).*; + if (msg_len > message.buffer.len) { + const fmt_msg = try std.fmt.bufPrint(&message.response, "msg too long. got len {d}.", .{msg_len}); + usb.Usb.callbacks.usb_start_tx( + dc.endpoints[3], // EP1_IN_CFG, + fmt_msg, + ); + return; + } + + message.num_bytes_remaining = @max(0, @as(i33, msg_len) - 60); + message.num_bytes_received = @min(60, msg_len); + std.mem.copyForwards(u8, &message.buffer, data[4..(4 + message.num_bytes_received)]); + } else { + // receiving request continuation + const input_len = @min(64, message.num_bytes_remaining); + message.num_bytes_remaining -= input_len; + std.mem.copyForwards(u8, message.buffer[message.num_bytes_received..], data[0..input_len]); + message.num_bytes_received += input_len; + } + + if (message.num_bytes_remaining == 0) { + // request data complete, compute hash and prepare to send + var hash: [4]u32 = message.hash_buffer; + md5.computeMd5(message.buffer[0..message.num_bytes_received], &hash); + const response: *[32]u8 = message.response[0..32]; + + try md5.toHexString(&hash, response); + usb.Usb.callbacks.usb_start_tx( + dc.endpoints[3], // EP1_IN_CFG, + response, + ); + } else { + // switch back to receiving data by sending a 0 byte response. + usb.Usb.callbacks.usb_start_tx( + dc.endpoints[3], // EP1_IN_CFG, + &.{}, + ); + } +} + +var device_configuration: usb.DeviceConfiguration = undefined; + +pub fn main() !void { + device_configuration = createDeviceConfig(ep1_out_callback, ep1_in_callback); + + led.set_function(.sio); + led.set_direction(.out); + led.put(1); + + uart.apply(.{ + .baud_rate = baud_rate, + .tx_pin = uart_tx_pin, + .rx_pin = uart_rx_pin, + .clock_config = rp2040.clock_config, + }); + + rp2040.uart.init_logger(uart); + + // First we initialize the USB clock + rp2040.usb.Usb.init_clk(); + // Then initialize the USB device using the configuration defined above + rp2040.usb.Usb.init_device(&device_configuration) catch unreachable; + var old: u64 = time.get_time_since_boot().to_us(); + var new: u64 = 0; + while (true) { + // You can now poll for USB events + rp2040.usb.Usb.task( + false, // debug output over UART [Y/n] + ) catch unreachable; + + new = time.get_time_since_boot().to_us(); + if (new - old > 500000) { + old = new; + led.toggle(); + } + } +} diff --git a/content/posts/2024/08/zig/code/sendData.py b/content/posts/2024/08/zig/code/sendData.py new file mode 100755 index 0000000..29f5f48 --- /dev/null +++ b/content/posts/2024/08/zig/code/sendData.py @@ -0,0 +1,78 @@ +# pip install pyusb + +import usb.core +import usb.util + +def toU32(x): + return bytes([x % 256, (x >> 8) % 256, (x >> 16) % 256, (x >> 24) % 256]) + +def chopMessage(str): + data = toU32(len(str)) + str.encode() + strLen = len(data) + + result = [] + i = 0 + while i < strLen: + end_pos = min(strLen, i + 64) + result.append(data[i:end_pos]) + i = end_pos + return result + +# find our device +dev = usb.core.find(idVendor=0x0000, idProduct=0x0001) + +# was it found? +if dev is None: + raise ValueError('Device not found') + +# get an endpoint instance +cfg = dev.get_active_configuration() +intf = cfg[(0, 0)] + +outep = usb.util.find_descriptor( + intf, + # match the first OUT endpoint + custom_match= \ + lambda e: \ + usb.util.endpoint_direction(e.bEndpointAddress) == \ + usb.util.ENDPOINT_OUT) + +inep = usb.util.find_descriptor( + intf, + # match the first IN endpoint + custom_match= \ + lambda e: \ + usb.util.endpoint_direction(e.bEndpointAddress) == \ + usb.util.ENDPOINT_IN) + +assert inep is not None +assert outep is not None + +# message = "Hello, World! This message exceeds the buffer............................................." +message = "j(R1wzR*y[^GxWJ5B>L{-HLETRD" +# message = "Hello, World!" +message = ''.join([message for i in range(100)]) +# print("send len: ", len(message)) +print(message) + +blocks = chopMessage(message) +for i in range(len(blocks)): + block = blocks[i] + print("sending: '", block, end="' ...", sep="") + outep.write(block) + print(" sent.") + + response = inep.read(64) + response_str = ''.join([chr(x) for x in response]) + if (i + 1) == len(blocks): + # last block sent, expect to receive hash + if len(response) == 0: + raise Exception("Device expected more data that was announced in the hashshake!") + if len(response) != 32: + raise Exception("Device reported an error: " + response_str) + else: + print("hash: " + response_str) + else: + # middle (or first) block, expect to receive 0 byte ack + if len(response) != 0: + raise Exception("Device reported an error: " + response_str) diff --git a/content/posts/2024/08/zig/code/wasm-Main.html.txt b/content/posts/2024/08/zig/code/wasm-Main.html.txt new file mode 100644 index 0000000..b54a504 --- /dev/null +++ b/content/posts/2024/08/zig/code/wasm-Main.html.txt @@ -0,0 +1,59 @@ + + + + + Md5 Wasm Example + + + +

+ + + + + + + +
+ + \ No newline at end of file diff --git a/content/posts/2024/08/zig/code/wasm-Main.zig b/content/posts/2024/08/zig/code/wasm-Main.zig new file mode 100644 index 0000000..f126c5a --- /dev/null +++ b/content/posts/2024/08/zig/code/wasm-Main.zig @@ -0,0 +1,19 @@ +const std = @import("std"); +const md5 = @import("../../Md5.zig"); + +export fn computeMd5(message: [*]const u8, len: u32, hash_buffer: [*]u8) void { + const msg_slice: []const u8 = message[0..len]; + var hash: [4]u32 = undefined; + md5.computeMd5(msg_slice, &hash); + + const buffer: *[32]u8 = hash_buffer[0..32]; + md5.toHexString(&hash, buffer) catch unreachable; +} + +test "hash matches expected" { + const msg: []const u8 = "Hello, World!"; + var buffer: [32]u8 = undefined; + computeMd5(msg.ptr, msg.len, buffer[0..32].ptr); + const expected = "65a8e27d8879283831b664bd8b7f0ad4"; + try std.testing.expectEqualStrings(expected, &buffer); +} diff --git a/content/posts/2024/08/zig/index.md b/content/posts/2024/08/zig/index.md new file mode 100644 index 0000000..f8b363b --- /dev/null +++ b/content/posts/2024/08/zig/index.md @@ -0,0 +1,1177 @@ ++++ +title = "Zig: Build tiny, high performance executables with a modern language" +date = "2024-08-19" +authors = ["eric.jarosch"] +tags = ["Teaching", "EPEA 2024", "Zig", "Cross-Platform"] ++++ + +Zig is a rapidly evolving, modern, general-purpose programming language, most notable for its performance, safety and platform-compatibility. + +In this article, I will cover how to build applications for embedded hardware, Linux/Windows, as well as Web-Browsers.\ +I will also present Benchmark comparisons with C, C++, Rust and Java. + + + +Since its first release in 2017, Zig has received 29.000 commits, and is still receiving several commits per day. + +Despite the language still being in its infancy, there already exist some notable projects written in Zig: +- [bun](https://github.com/oven-sh/bun) - that's right, the "incredibly fast" JS runtime and package manager is written in Zig. +- [xmake](https://github.com/xmake-io/xmake) - xmake is a modern C/C++ build tool that uses `.lua` files to define the build process. It also supports building projects written in Go, Zig, Rust and several other languages. +- [tigerbeetle](https://github.com/tigerbeetle/tigerbeetle) - a database written from scratch, optimized for financial transactions, where safety and performance are critical.\ +The Business-logic is contained in a single `state_machine.zig` file, which - in theory - could be replaced to create a database serving any other purpose. +- [river](https://github.com/riverwm/river) - a dynamic tiling window manager for Wayland.\ +I'm not too familiar with tiling WMs, but as far as I can tell, the key sales points are:\ +*dynamic* = new windows are arranged into the grid automatically\ +*scriptable* = the layouts, rules and appearance are configured through a `riverctl` command + +
+ +## Interesting Language Aspects and Syntax + +### Arbitrary Width Integers + +Signed and unsigned Integers can be declared using `i` and `u`. +The maximum supported width is `65535` bits. + +Examples: +```zig +const u5_min_max = [_]u5{0, 31}; +const i17_min_max = [_]i17{-65536, 65535}; +const invalid: u3 = 8; +``` + +#### Packed Structs + +Packed structs have guaranteed in-memory layout: + +For example, for this packed struct it is guaranteed that 'a' comes before 'b' in memory, and that the entire struct will take up 8 bits. +```zig +packed struct { + a: u3, + b: i5, +} +``` + +#### Converting Between Different Data Types + +There are several options for type conversions: +- Type Coercion + - Is guaranteed to be safe (read: no detail is lost) + - Integer and Float widening (e.g. `const a: u3 = 7;` \n `const b: i4 = a;`) + - Compile-Time Known Numbers (e.g. `const a: u64 = 255;` \n `const b: u8 = a;`) + - There are more Coercion-Rules for Slices, Arrays, Tuples, Pointers, Optionals, Unions and Enums. +- Explicit Casts + - `@as`, performs an explicit type coercion. E.g. `const a = @as(u8, 255)` + - `@bitCast`, e.g. from `f32` to `u32`: `const a: u32 = @bitCast(@as(f32, 8.5));` + - `@truncate`, e.g. `const a: u4 = @truncate(0b1111_0001)` -> `a = 1` + - And many more. In general: if the conversion is deemed unsafe (lossy), you have to use an explicit cast. +- Peer Type Resolution + - Determines a coercion of multiple source types into one target type. + - For example: `a = @as(u3, 4) + @as(u4, 11)` would result in `a: u4 = 15` + +### Tuples + +Tuples are anonymous structs whose fields are named using numbers starting from 0. +Fields are accessed similar to arrays, using indices. + +```zig +const tuple = .{ + @as(u32, 1234), + @as(f64, 12.34), + true, + "hi", +}; + +try expectEqual(tuple[0], 1234); +try expectEqual(tuple[1], 12.34); +try expectEqual(tuple[2], true); +try expectEqual(tuple[3], "hi"); +``` + +### Error Handling + +The Error Handling in Zig is not necessarily unique, but too in-depth to not be mentioned. +Errors in Zig are eerily similar to Exceptions (not `RuntimeExceptions`) in Java, in that any function that can produce errors must declare them in its function definition. +However less like Java and moreso like C or Rust, errors are just return values of functions. + +As such, you might define a function that returns multiple possible errors or a value like this: +```zig +fn parseInt(str: ?[*]u8) error{NullPointer, NotANumber}!i32 +``` +The `!` operator declares an 'error union type', meaning that either an error or a value must be present, but not both at the same time. + +The fundamental syntax for error handling is: +```zig +if(failingFn()) |result| else |err| +``` +This branches on whether the error union contains a value or an error. +Each branch captures the corresponding value using `|x|`. + +The Keywords `catch`, `try` build syntactic sugar on top of it. +Each pair of these lines behaves the same: +```zig +failingFn() catch "defaultValue" +if(failingFn()) |result| result else |_| "defaultValue" + +try failingFn() +if(failingFn()) |result| result else |err| return err +``` + +### Defer + +You may be familiar with this keyword from 'Go', however unlike in Go, deferred expressions are executed at **scope** exit. + +So this will print `123` in order. +```zig +{ + defer print("2", .{}); + print("1", .{}); +} +print("3", .{}); +``` + +Similarly, `errdefer` expressions are executed at scope exit, but only if the function **returned an error from within the scope-block**. + +```zig +fn notExecuted() !void { + { + errdefer print("not printed", .{}); + } + return error.ErrorOutsideScope; +} + +fn isExecuted() !void { + { + errdefer print("is printed", .{}); + return error.ErrorInsideScope; + } +} +``` + +### Comptime + +#### Compile-time Expressions + +Comptime expressions, as the name implies, are evaluated at compile time. + +```zig +fn fibonacci(index: u8) u8 { + if (index < 2) return index; + return fibonacci(index - 1) + fibonacci(index - 2); +} + +pub fn main() !u8 { + return comptime fibonacci(7); +} +``` + +will compile to +```zig +pub fn main() !u8 { + return 13; +} +``` + +#### Generics Using Compile-time Parameters + +Types can be passed to functions as parameters, provided that they are known at compile-time. + +```zig +fn max(comptime T: type, a: T, b: T) T { + if (T == bool) + return (a or b); + + return if (a > b) a else b; +} + +pub fn main() !void { + print("max(true, false)={}\n", .{max(bool, true, false)}); + print("max(5, 15)={}\n", .{max(u4, 5, 15)}); +} +``` + +Since the `type` parameter (T) must be known at Compile-Time, the Compiler is able to generate these two functions: +```zig +fn max(a: bool, b: bool) bool { + return a or b; +} + +fn max(a: u4, b: u4) u4 { + return if (a > b) a else b; +} +``` + +
+ +## Notable design decisions + +### Integer Overflow + +The "normal" arithmetic operators (`+`, `-`, `*`, `/`) treat overflow as an error. +If overflow is detected at compile-time, compilation will abort. +If overflow is detected at runtime, the thread will panic. + +If overflow is desired, there are 'Wrapping' Operands: `+%`, `-%` and `*%`. + +If overflow is allowed, and you want to detect overflow, there are builtin functions: +`@addWithOverflow`, `@subWithOverflow` and `@mulWithOverflow`. +For example: +```zig +const ov = @addWithOverflow(@as(u3, 7), 5); +print("result: {}, didOverflow: {}\n", .{ov[0], ov[1]}); +``` +will print `result: 4, didOverflow: 1` + +### Allocators + +The most notable difference to C is that there is no default allocator (`malloc`). +When writing functions the difference is subtle: if the function needs to allocate memory, it should accept an Allocator as a parameter. +But when calling functions that allocate memory, Zig forces you to consider where you allocate memory and how it is managed. + +To that end, there are several builtin allocators, such as: +- `FixedBufferAllocator` populates the buffer like a stack. Only the most recently allocated block can be freed at a time. +- `ArenaAllocator` wraps another allocator, but all allocated memory is freed at once. +- `GeneralPurposeAllocator` and allocator that can free in any order. The stated performance goals are low fragmentation and low worst-case latency. +- `CAllocator` the default C allocator, exposed only if you are linking LibC. + +You can also create your own allocator by implementing the Allocator interface: +```zig +pub const VTable = struct { + alloc: *const fn (ctx: *anyopaque, len: usize, ptr_align: u8, ret_addr: usize) ?[*]u8, + + resize: *const fn (ctx: *anyopaque, buf: []u8, buf_align: u8, new_len: usize, ret_addr: usize) bool, + + free: *const fn (ctx: *anyopaque, buf: []u8, buf_align: u8, ret_addr: usize) void, +}; +``` + +This seems like a good opportunity to look at a simple example of interfaces and generic types. +Suppose you want to define a generic "Mapper" similar to what you're familiar with from functional programming languages. +```zig +fn Mapper(comptime A: type, comptime B: type) type { + return struct { + map: *const fn (a: A) B, + }; +} +``` +`Mapper` is a generic interface that provides a `map` function. +This is possible since `Mapper` is a comptime executable function that returns a type. +You can then use this type as the return type of another function: +```zig +pub fn DoubleIt(comptime T: type) Mapper(T, T) { + const implementation = struct { + fn map(a: T) T { + return a * 2; + } + }; + + return Mapper(T, T){ .map = implementation.map }; +} +``` +`DoubleIt` returns a Mapper implementation that doubles the numerical value of the input. +The compiler will throw an error if a type `T` is passed in for which the `*` operator is not implemented (anything other than integers and floats). + +Naturally, you can also use the Mapper type as a function parameter: +```zig +fn mappedIntegersFromZero(comptime length: usize, comptime Int: type, mapper: Mapper(Int, Int)) [length]Int { + var result: [length]Int = undefined; + for (0..length) |i| { + result[i] = mapper.map(@intCast(i)); + } + return result; +} +``` +When called with `(4, i16, DoubleIt(i16))`, this will return the array `{0, 2, 4, 6}`. + +### Builtin Test Support + +Unlike with most programming languages, Zig has a builtin testing framework and tests are allowed to be part of the Container (`.zig` file) under test. +This has several advantages: tests are easy to find, and you don't have to mirror your source-code directory structure into a separate 'test' directory. Another direct consequence of this, is that many of the Zig source files contain tests which provide always-valid and always-up-to-date code-as-documentation for how to use them. + +Here are some exemplary tests for Language Aspects covered so far: +```zig +const std = @import("std"); +const expectEqual = std.testing.expectEqual; + +test "u5 overflows to 0" { + const val: u5 = 31; + try expectEqual(0, val +% 1); +} + +test "sizeof packed struct {u3, i5} is 1 byte" { + const TestStruct = packed struct { + a: u3, + b: i5, + }; + try expectEqual(1, @sizeOf(TestStruct)); +} + +test "defer executes at scope exit" { + const Buffer = struct { + var data: [3]u8 = undefined; + var i: usize = 0; + + fn push(value: u8) void { + data[i] = value; + i += 1; + } + }; + + { + defer Buffer.push(2); + Buffer.push(1); + } + Buffer.push(3); + + try expectEqual([_]u8{ 1, 2, 3 }, Buffer.data); +} +``` + +
+ +## Performance at a Glance + +### Multithreading + +Zig provides a Multithreading abstraction. +The actual Threading implementation is platform dependent. +There are dedicated implementations for Windows, Linux and WebAssembly. +For other Operating Systems, Posix is used, if available. + +Let's have a look at how to implement a n-producers-to-m-consumers problem. +I first declare some global constants and a data-type for shared data between all threads: +```zig +const buffer_len = 10; +const num_producers = 5; +const num_producer_items = 5; +const num_consumers = 3; + +const SharedData = struct { + buffer: *[buffer_len]u8, + buffer_end: *usize, + buffer_lock: *Mutex, + empty_buffer_slots: *Semaphore, + filled_buffer_slots: *Semaphore, + producers_left: *usize, +}; +``` + +Then I implement the producer Thread: +It generates a random number to push onto the buffer, waits for a slot to become available, pushes the number and finally notifies the consumers that a slot was filled. +```zig +const ProducerInfo = struct { + data: *const SharedData, + index: usize, +}; + +fn producer(info: *ProducerInfo) void { + var rng = Random.init(@intCast(info.index)); + var data = info.data; + for (0..num_producer_items) |_| { + const item: u8 = @truncate(rng.next()); + + data.empty_buffer_slots.wait(); + data.buffer_lock.lock(); + + print("producer {} stores {} in slot {}\n", .{ info.index, item, data.buffer_end.* }); + data.buffer[data.buffer_end.*] = item; + data.buffer_end.* += 1; + + data.buffer_lock.unlock(); + data.filled_buffer_slots.post(); + } + + data.buffer_lock.lock(); + data.producers_left.* -= 1; + data.buffer_lock.unlock(); +} +``` + +I implemented the consumer Thread in a similar fashion. +One noteworthy thing happened here though: it's surprisingly finicky to stop the consumer threads once the workload is complete. +There does not seem to be a way to force-stop threads. +```zig +const ConsumerInfo = struct { + data: *const SharedData, + index: usize, +}; + +fn consumer(info: *ConsumerInfo) void { + var data = info.data; + while (true) { + while (true) { + data.filled_buffer_slots.timedWait(time.ns_per_ms * 10) catch { + if (data.producers_left.* == 0) { + return; + } + continue; + }; + break; // if semaphore released a permit, break waiting loop + } + + data.buffer_lock.lock(); + + data.buffer_end.* -= 1; + const item = data.buffer[data.buffer_end.*]; + print("consumer {} took {} from slot {}\n", .{ info.index, item, data.buffer_end.* + 1 }); + + data.buffer_lock.unlock(); + data.empty_buffer_slots.post(); + + // slow down the consumer threads so that producers run out of buffer space + time.sleep(time.ns_per_s); + } +} +``` + +Finally, we can spawn multiple Threads and point them at these functions. +Here the initialization is a little clunky because arguments are immutable, so the shared data must be passed as a pointer, which in turn must store their data *somewhere* (on the function stack, in this case). +It also would have been possible to use an allocator here. +```zig +pub fn main() !void { + var buffer: [buffer_len]u8 = undefined; + var buffer_end: usize = 0; + var buffer_lock = Mutex{}; + var empty_buffer_slots = Semaphore{ .permits = buffer_len }; + var filled_buffer_slots = Semaphore{ .permits = 0 }; + var producers_left: usize = num_producers; + + var data = SharedData{ + .buffer = &buffer, + .buffer_end = &buffer_end, + .buffer_lock = &buffer_lock, + .empty_buffer_slots = &empty_buffer_slots, + .filled_buffer_slots = &filled_buffer_slots, + .producers_left = &producers_left, + }; + + var producer_infos: [num_producers]ProducerInfo = undefined; + var producer_handles: [num_producers]Thread = undefined; + for (&producer_infos, 0..) |*info, index| { + info.data = &data; + info.index = index; + producer_handles[index] = try Thread.spawn(.{}, producer, .{info}); + } + + var consumer_infos: [num_consumers]ConsumerInfo = undefined; + var consumer_handles: [num_consumers]Thread = undefined; + for (&consumer_infos, 0..) |*info, index| { + info.data = &data; + info.index = index; + consumer_handles[index] = try Thread.spawn(.{}, consumer, .{info}); + } + + for (&producer_handles) |*handle| { + handle.join(); + } + for (&consumer_handles) |*handle| { + handle.join(); + } + const total_items = num_producers * num_producer_items; + print("completed producing {} items\n", .{total_items}); +} +``` + +### Vectors / SIMD + +SIMD instructions are executed by a single CPU Core, so they offer another degree of parallelism on top of Multithreading. + +Zig supports SIMD operations through Vectors of Integers, Floats, booleans and Pointers, provided that the length of the Vector is known at compile-time. +All operations of the underlying type can be used on a Vector, Zig will generate SIMD instructions where possible, otherwise the operation is performed element-wise. + +Example Code: +```zig +fn vectorXor(len: comptime_int, a: @Vector(len, u4), b: @Vector(len, u4)) @Vector(len, u4) { + return a ^ b; +} + +fn arrayXor(len: comptime_int, a: [len]u4, b: [len]u4) [len]u4 { + var result: [len]u4 = undefined; + for (0..len) |i| { + result[i] = a[i] ^ b[i]; + } + return result; +} + +test "vector xor" { + const a = [_]u4{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }; + const b = [_]u4{0xf} ** 16; + const vec_result = vectorXor(a.len, a, b); + const arr_result = arrayXor(a.len, a, b); + try expectEqual(@as([16]u4, vec_result), arr_result); +} +``` + +### Benchmarking a Simple Algorithm + +To get a feel for the language, I implemented the MD5 hash algorithm in Zig. +Here are some things I would consider worth mentioning. + +We can use container-level expressions (these implicitly are `comptime`) to compute complex data at compile time: +```zig +const s_table: [64]u5 = init: { + const shift_table = .{ + [_]u5{ 7, 12, 17, 22 }, // + [_]u5{ 5, 9, 14, 20 }, // + [_]u5{ 4, 11, 16, 23 }, // + [_]u5{ 6, 10, 15, 21 }, // + }; + + var result: [64]u5 = undefined; + for (0..4) |table_index| { + for (table_index * 16..(table_index + 1) * 16) |i| { + result[i] = shift_table[table_index][i % 4]; + } + } + break :init result; +}; + +const k_table = init: { + var result: [64]u32 = undefined; + for (&result, 0..) |*p, i| { + p.* = @as(u32, @floor((1 << 32) * @abs(@sin(@as(f64, i) + 1)))); + } + break :init result; +}; +``` + +We can also use `inline` and `comptime` to implement this part of the algorithm in a 'DRY', branchless fashion.\ +
+ +
source: https://en.wikipedia.org/wiki/MD5
+
+ +```zig +inline for (0..4) |round| { + inline for (round * 16..(round + 1) * 16) |i| { + const g = comptime switch (round) { + 0 => undefined, + 1 => ((5 * i) + 1) & 0x0f, + 2 => ((3 * i) + 5) & 0x0f, + 3 => (7 * i) & 0x0f, + else => unreachable, + }; + const f = switch (round) { + inline 0 => ((b & c) | (~b & d)) +% buffer[i], + inline 1 => ((d & b) | (~d & c)) +% buffer[g], + inline 2 => (b ^ c ^ d) +% buffer[g], + inline 3 => (c ^ (b | ~d)) +% buffer[g], + else => unreachable, + } +% a +% k_table[i]; + + a = d; + d = c; + c = b; + const shift: u5 = s_table[i]; + b = b +% ((f << shift) | (f >> (~shift +% 1))); + } +} +``` + +Checking with Ghidra, it is clear that the k-table and switch-expressions were evaluated at compile time: +![](md5_ghidra.png) + +I also implemented the algorithm in Rust and Java to get a comparison. +(Note, I'm obviously not proficient in Zig or Rust, so consider this the benchmark-expectation for laymen) + +For the C benchmark I used [this implementation](https://gist.github.com/creationix/4710780) with `gcc -Wall -Wextra -O3 -lm -o md5 md5.c`. +I also tried [this implementation](https://github.com/Zunawe/md5-c), but it was slower. + +For the C++ benchmark I used [this implementation](https://github.com/animetosho/md5-optimisation) which makes use of hand-optimized X86 Assembly. + +Each benchmark computed `2^21` (~2 Million) hashes.\ +I did not bother with implementing multi-threaded benchmarks for C, C++ and Rust. + +
+
+

1 Thread, 512 Input Bytes

+ +
+
+

1 Thread, 16384 Input Bytes

+ +
+
+

16 Threads, 512 Input Bytes

+ +
+
+

16 Threads, 16384 Input Bytes

+ +
+
+ +Unsurprisingly, the implementation using optimized Assembly leads the pack.\ +Slightly more surprising was the performance of the native Java implementation. I was unable to replicate its performance by copying the corresponding source code into my own project, so I have to assume the JVMs C2 compiler applies additional optimizations specific to the native Md5 implementation. + +Lastly, judging by the differences in performance between 512 and 16,384 Input Bytes for my Zig implementation, I expect my memory management to be the primary bottleneck.\ +That said, it seems I shouldn't be too hard on myself, as the builtin Md5 algorithm in Zig is actually ~2% slower for 16384 Byte Messages and 15% (!) slower for 512 Byte Messages.\ +(On my specific hardware, yada, yada...) + +An interesting observation:\ +Changing this +```zig +var buffer = [_]u32{0} ** 16; +inline for (0..16) |dword_i| { + const message_index = (block_index * 64) + (dword_i * 4); + buffer[dword_i] = @as(u32, message[message_index]) + | (@as(u32, message[message_index + 1]) << 8) + | (@as(u32, message[message_index + 2]) << 16) + | (@as(u32, message[message_index + 3]) << 24); +} +``` +to +```zig +const buffer: [*]const u32 = @ptrCast(@alignCast(message[(block_index * 64)..((block_index + 1) * 64)])); +``` +when built with 'Debug' improves the runtime by 32% from 7.8s to 5.9s for 512 Bytes.\ +However using 'ReleaseFast' or even 'ReleaseSmall', the performance difference reduces to <50ms (3% speedup).\ +Guessing blindly, I suspect the loop is not inlined for Debug builds so that the line numbers match up. + +
+ +## The Build System and Dependency Management + +In this section I will guide you through the process of building a fully fledged project.\ +Starting from a basic zig library and making it accessible via CLI, GUI, USB and the Web-Browser. + +For my own convenience, let's say we wanted to publicise an Md5 Library.\ +We'll publish two functions: +```zig +/// computes the Md5 hash of the message and stores it in the hash. +pub fn computeMd5(message: []const u8, hash: *[4]u32) void; + +/// converts the Md5 hash in 'hash' to a String and stores it in 'result'. +pub fn toHexString(hash: *[4]u32, result: *[32]u8) !void; +``` + +If we wanted to build a C library, we could also export this function. +```zig +export fn c_computeMd5(message: [*c]const u8, len: usize, hash: *[4]u32) void; +``` + +For this project, the command to build a library is straightforward:\ +`zig build-lib src/Md5.zig` + +However, there are over 200 arguments that can be passed to the `build-lib` command.\ +Also, your project might have more than one file.\ +So, instead of typing that out every time, or writing a bash script (which Windows users will love), you should probably use: + +### Build Files + +The core idea of Build Files is to store all the arguments you pass to `build-lib` or `build-exe` in a single file: `build.zig`.\ +The Build File is typically placed in the root directory of the project.\ +Since build files are just Zig code, we can also add conditional build artifacts. + +Let's make building the library an optional step of the build process. +```zig {linenos=true} +const std = @import("std"); +const Build = std.Build; +const ResolvedTarget = std.Build.ResolvedTarget; +const OptimizeMode = std.builtin.OptimizeMode; + +const BuildConfig = struct { + target: ResolvedTarget, + optimize: OptimizeMode, +}; +var buildConfig: BuildConfig = undefined; + +fn add_build_lib(b: *Build) !void { + const make_lib = b.option(bool, "make-lib", "Compile a static library that computes md5 hashes.") orelse false; + if (!make_lib) { + return; + } + + const lib = b.addStaticLibrary(.{ + .name = "Md5", + .root_source_file = b.path("src/Md5.zig"), + .target = buildConfig.target, + .optimize = buildConfig.optimize, + }); + const install_step = b.addInstallArtifact(lib, .{}); + b.getInstallStep().dependOn(&install_step.step); +} + +pub fn build(b: *std.Build) !void { + buildConfig = .{ + .target = b.standardTargetOptions(.{}), + .optimize = b.standardOptimizeOption(.{ + .preferred_optimize_mode = OptimizeMode.ReleaseSmall, + }), + }; + + try add_build_lib(b); +} +``` + +The function `add_build_lib` adds a step (building the static library) to the build, only if the option `-Dmake-lib` is provided.\ +Additionally, you can pass the target architecture/os with `-Dtarget=_`, and use `-Drelease` to build with the projects preferred Build Mode. + +Great, we have added 3 additional arguments to a list of 200 others...\ +Is what I would say if Zig wasn't a little more clever than that.\ +If you run `zig build --help` you will notice that Zig now only offers ~70 arguments.\ +But most importantly, the options that we defined are listed in their own section: +``` +Project-Specific Options: + -Dtarget=[string] The CPU architecture, OS, and ABI to build for + -Dcpu=[string] Target CPU features to add or subtract + -Ddynamic-linker=[string] Path to interpreter on the target system + -Drelease=[bool] optimize for end users + -Dmake-lib=[bool] Compile a static library that computes md5 hashes. +``` + +This is the intended way to discover configuration options when building Zig projects from source. + +Now, let's also add the option to build a command-line application.\ +I'll create a Zig file for that `/src/app/cli/Main.zig`: +```zig {linenos=true} +const std = @import("std"); +const md5 = @import("../../Md5.zig"); + +pub fn main() !void { + const stdOut = std.io.getStdOut().writer(); + + var arg_iterator = std.process.args(); + var hash: [4]u32 = undefined; + _ = arg_iterator.next(); // skip program name + while (arg_iterator.next()) |arg| { + md5.computeMd5(arg, &hash); + var hash_str: [32]u8 = undefined; + try md5.toHexString(&hash, &hash_str); + try stdOut.print("'{s}' => {s}\n", .{ arg, hash_str }); + } +} +``` +All it does is iterate over the arguments passed in to the program and output their hash.\ +However, while trying to add a build step for the CLI app, something interesting happens: +``` +src/app/cli/Main.zig:2:21: error: import of file outside module path: '../../Md5.zig' +const md5 = @import("../../Md5.zig"); +``` +Modules are only allowed to look for .zig files on the same level or below. That's pretty reasonable.\ +However, Md5.zig is supposed to be shared across multiple Frontends. To do that, you can import the file into the executable: +```zig {linenos=true} +// extend the BuildConfig struct: +// md5_module: *std.Build.Module, + +pub fn build(b: *std.Build) !void { + // ... + + buildConfig.md5_module = b.addModule("Md5", .{ + .root_source_file = b.path("src/Md5.zig"), + .target = buildConfig.target, + .optimize = buildConfig.optimize, + }); + try add_build_cli(b); +} + +fn add_build_cli(b: *Build) !void { + const make_cli = b.option(bool, "make-cli", "Compile a Command-Line Application that prints the md5 hashes of all inputs to the console.") orelse false; + if (!make_cli) { + return; + } + + const exe = b.addExecutable(.{ + .name = "Md5-Cli", + .root_source_file = b.path("src/app/cli/Main.zig"), + .target = buildConfig.target, + .optimize = buildConfig.optimize, + }); + exe.root_module.addImport("../../Md5.zig", buildConfig.md5_module); + + const install_step = b.addInstallArtifact(exe, .{}); + b.getInstallStep().dependOn(&install_step.step); +} +``` + +Note that on line 27 I am naming the import `../../Md5.zig` so that ZLS knows where to look for the Source file and provides better autocompletion.\ +Other than that, any name would work here. + +Now we can build and run the CLI application: +``` +> zig build -Dmake-cli -Drelease +> ./zig-out/bin/Md5-Cli "Hello, World!" +'Hello, World!' => 65a8e27d8879283831b664bd8b7f0ad4 +``` + +### Depending on Zig Libraries + +Next, we want to create a GUI application.\ +We'll use [Capy](https://github.com/capy-ui/capy) for that, which means we'll have to learn how to use other Zig libraries in our own project.\ +The `build.zig.zon` file is used to declare dependencies (`zon` stands for 'Zig Object Notation') +```zig {linenos=true} +.{ + .name = "Md5", + .version = "1.0.0", + .paths = .{""}, + .dependencies = .{ + .capy = .{ + .url = "https://github.com/capy-ui/capy/archive/d55a9ddf39ebaeed7d25279c08922bb8cf4613db.tar.gz", + .hash = "12202d8a1a46e0e78dc366ba3cb9843821b65ed3d0e110cf705bdeaba9eb8f75ac75", + .lazy = true, + }, + }, +} +``` +Note that `.lazy = true` (lazy dependencies) is a rather new feature.\ +If present, the dependency is only downloaded for the build if the build requests the dependency via `b.lazyDependency("capy", ...)`.\ +This makes sense. No need to download Capy if the user wants to build the CLI app. + +Here's how to add a dependency to an executable: +```zig {linenos=true} + if (b.lazyDependency("capy", .{ + .target = buildConfig.target, + .optimize = buildConfig.optimize, + .app_name = @as([]const u8, "Md5-Gui-Capy"), + })) |capy| { + exe.root_module.addImport("capy", capy.module("capy")); + } +``` +The second parameter of `lazyDependency` specifies the parameters passed to Capy's Build File: `-Dtarget=... -Doptimize=... -Dapp_name=...`.\ +As the name `addImport` suggests, Capy can then be imported with `const capy = @import("capy");` + +Here is all the code required to register a simple Capy GUI: +```zig {linenos=true} + uiElements = .{ + .textInput = capy.textField(.{ .text = "Hello, World!" }), + .outputLabel = capy.textField(.{ .text = "", .readOnly = true }), + }; + + _ = try uiElements.textInput.text.addChangeListener(.{ .function = &onInputChanged }); + + try window.set(capy.column(.{}, .{ + capy.row(.{}, .{ + capy.label(.{ .text = "Message (In)" }), + capy.expanded(uiElements.textInput), + }), + capy.row(.{}, .{ + capy.label(.{ .text = "Hash (Out)" }), + capy.expanded(uiElements.outputLabel), + }), + })); +``` +which produces this output:\ +![Screenshot of the Capy application](app-capy.png) + +### Building for Embedded Systems + +Now we'll get silly: let's compile our Md5 library as the firmware for a Raspberry Pi Pico, which will then expose the library over Uart.\ +For that, we'll use [Microzig](https://github.com/ZigEmbeddedGroup/microzig).\ +This was somewhat painful for several reasons: +- Microzig's latest release is for Zig 0.12.1, however Capy requires Zig 0.13.0 and the API for writing Build Files changed between these two versions. +- Microzig's API is painful to navigate because ZLS does not (yet) provide any autocompletion for it, because the RP2040 implementation of the HAL is obscured behind several dynamic `@import`s. +- You cannot use Zig's heap allocators, because they are not implemented for the RP2040. + +Also, the only code-example showing how to *receive* data on the microcontroller was removed in commit `3af91ea8f9210cb5459b87ebcb63345991060e5b`.\ +Long story short, my firmware only compiles for commit `063ade2a3cfb5373fcfc6a079ecf0734a45952a7`. + +With the code forked, we can now add the dependencies: +```zig {linenos=true} + .@"microzig/build" = .{ + .path = "../../forks/microzig/build/", + }, + .@"microzig/bsp/raspberrypi/rp2040" = .{ + .path = "../../forks/microzig/bsp/raspberrypi/rp2040/", + }, +``` + +The code for handling receiving and sending data looks like this: +```zig {linenos=true} +fn ep1_out_callback(dc: *usb.DeviceConfiguration, data: []const u8) void { + handle_ep1_out_callback(dc, data) catch |err| { + // send error as result message + const fmt_msg = std.fmt.bufPrint(&message.response, "error: {s}", .{@errorName(err)}) catch unreachable; + usb.Usb.callbacks.usb_start_tx( + dc.endpoints[3], // EP1_IN_CFG, + fmt_msg, + ); + }; +} + +fn handle_ep1_out_callback(dc: *usb.DeviceConfiguration, data: []const u8) !void { + if (message.num_bytes_remaining == 0) { + // receiving new request -> first message format is .{ msg_len: u32, msg_part: [60]u8 } + const msg_len: u32 = @as(*const u32, @ptrCast(@alignCast(data[0..4]))).*; + if (msg_len > message.buffer.len) { + const fmt_msg = try std.fmt.bufPrint(&message.response, "msg too long. got len {d}.", .{msg_len}); + usb.Usb.callbacks.usb_start_tx( + dc.endpoints[3], // EP1_IN_CFG, + fmt_msg, + ); + return; + } + + message.num_bytes_remaining = @max(0, @as(i33, msg_len) - 60); + message.num_bytes_received = @min(60, msg_len); + std.mem.copyForwards(u8, &message.buffer, data[4..(4 + message.num_bytes_received)]); + } else { + // receiving request continuation + const input_len = @min(64, message.num_bytes_remaining); + message.num_bytes_remaining -= input_len; + std.mem.copyForwards(u8, message.buffer[message.num_bytes_received..], data[0..input_len]); + message.num_bytes_received += input_len; + } + + if (message.num_bytes_remaining == 0) { + // request data complete, compute hash and prepare to send + var hash: [4]u32 = message.hash_buffer; + md5.computeMd5(message.buffer[0..message.num_bytes_received], &hash); + const response: *[32]u8 = message.response[0..32]; + + try md5.toHexString(&hash, response); + usb.Usb.callbacks.usb_start_tx( + dc.endpoints[3], // EP1_IN_CFG, + response, + ); + } else { + // switch back to receiving data by sending a 0 byte response. + usb.Usb.callbacks.usb_start_tx( + dc.endpoints[3], // EP1_IN_CFG, + &.{}, + ); + } +} +``` +`ep1_out_callback` is called whenever a message is received over the Uart Endpoint (`ep1` stands for Endpoint 1).\ +The maximum amount of bytes that Microzig supports is 64. So for longer messages I implemented a simple protocol that tracks how many bytes are still to be sent.\ +A particular gotcha is that you **must** provide a response with `usb_start_tx`, otherwise the communication just stalls forever. + +Microzig uses a bespoke build api, but the usage is pretty much identical to normal Zig executables: +```zig + const MicroZig = @import("microzig/build"); + const rp2040 = @import("microzig/bsp/raspberrypi/rp2040"); + + const mz = MicroZig.init(b, .{}); + const firmware = mz.add_firmware(b, .{ + .name = "Md5-Pico", + .root_source_file = b.path("src/app/pico/Main.zig"), + .target = rp2040.boards.raspberrypi.pico, + .optimize = buildConfig.optimize, + }); + firmware.modules.app.addImport("../../Md5.zig", buildConfig.md5_module); + + mz.install_firmware(b, firmware, .{}); +``` + +Finally, we can receive hashes over USB using a python script: +```python +# pip install pyusb + +import usb.core +import usb.util + +# ... obtain usb endpoints 'outep' and 'inep' + +blocks = chopMessage(message) +for i in range(len(blocks)): + block = blocks[i] + outep.write(block) + response = inep.read(64) + if (i + 1) == len(blocks): + response_str = ''.join([chr(x) for x in response]) + print("hash: " + response_str) + else: + if len(response) != 0: + raise Exception("Device reported an error: " + response_str) +``` + +### Building for the Web (WebAssembly) + +Finally, we'll finish with something more reasonable.\ +Let's compile the library into a WebAssembly module, so we can use it from JavaScript in a Browser (or other Javascript Engine with WASM support).\ +I think this is actually more reasonable than trying to compute hashes with raw JavaScript. + +On the Zig side, this is a refreshingly simple thing to implement: +```zig +const std = @import("std"); +const md5 = @import("../../Md5.zig"); + +export fn computeMd5(message: [*]const u8, len: u32, hash_buffer: [*]u8) void { + const msg_slice: []const u8 = message[0..len]; + var hash: [4]u32 = undefined; + md5.computeMd5(msg_slice, &hash); + + const buffer: *[32]u8 = hash_buffer[0..32]; + md5.toHexString(&hash, buffer) catch unreachable; +} +``` +One notable thing is that slices (structs containing a pointer and a length) cannot be passed to exported functions.\ +So instead, a 'many-item pointer' (`[*]T`) and a length is passed separately. + +The Build File has a few gotchas, though: +```zig + const exe = b.addExecutable(.{ + .name = "Md5-Wasm", + .root_source_file = b.path("src/app/wasm/Main.zig"), + .target = target, + .optimize = buildConfig.optimize, + }); + // based on absolutely nothing https://ziggit.dev/t/build-wasm-using-zig-build-system-when-ther-is-no-entry-point-but-function-to-export/4364/2 + exe.rdynamic = true; + exe.entry = .disabled; + exe.import_memory = true; // https://github.com/ziglang/zig/issues/8633 + exe.root_module.addImport("../../Md5.zig", buildConfig.md5_module); +``` +- `exe.rdynamic = true;` is required, otherwise the functions don't seem to be exported +- `exe.entry = .disabled;` is required so that zig does not complain about the `main` function being absent +- `exe.import_memory = true;` indicates that the zig code should be allowed to modify the memory that is allocated in JavaScript. + +In JavaScript this can then be simply used like this: +```js +/** @type {{memory: WebAssembly.Memory, computeMd5: function (message: number, len: Number, hash_str: number)}} */ +const wasmObj = { + memory: undefined, + computeMd5: undefined, +} + +/** @return {Promise} */ +function fetchWasmBuffer() { + return fetch("Md5-Wasm.wasm.gz") + .then(data => data.blob()) + .then(wasmGzipBlob => { + let wasmStream = wasmGzipBlob.stream().pipeThrough(new DecompressionStream("gzip")); + return new Response(wasmStream, { headers: {"Content-Type": "application/wasm"} }).arrayBuffer(); + }); +} + +wasmObj.memory = new WebAssembly.Memory({ + initial: 100, maximum: 100, shared: false +}); +fetchWasmBuffer() + .then(wasmBuffer => WebAssembly.instantiate(wasmBuffer, {env: {memory: wasmObj.memory}})) + .then(wasmInstance => { + wasmObj.computeMd5 = wasmInstance.instance.exports.computeMd5; + }); + +function executeMd5() { + if(wasmObj.computeMd5 === undefined) { + console.error("wasmObj was not ready!") + return; + } + + /** @type {String} */ + let message = document.getElementById("message").value; + let encodeResult = new TextEncoder().encodeInto(message, new Uint8Array(wasmObj.memory.buffer, 32)); + wasmObj.computeMd5(32, encodeResult.written, 0); + + let hashView = new DataView(wasmObj.memory.buffer, 0, 32); + document.getElementById("hash").innerText = new TextDecoder().decode(hashView); +} +``` +- `fetchWasmBuffer` retrieves the WebAssembly binary as an ArrayBuffer (this can then be instantiated as a Wasm-Worker) +- Wasm-Workers are single-threaded. Multi-threading is generally done by instantiating multiple workers. +- Please do not ask me why it is possible to hash messages longer than 68 bytes despite the memory being limited to 100 bytes.\ +Surely that should trigger *some* fault protection, but it does not. + +![A Screenshot showing the web interface](app-wasm.png) + +### Build Modes + +Now that we have a bunch of applications to compare, let's talk about build modes. +Zig has four of them: +- Debug : no Optimizations and all safeties. +- ReleaseSafe : Optimizations and safeties. +- ReleaseFast : Optimizations without safeties. +- ReleaseSmall : Size optimizations without safeties. + +We have already seen the subtle performance difference between ReleaseFast and ReleaseSmall in the [benchmarking section](#benchmarking-a-simple-algorithm) + +|App|Debug|ReleaseSafe|ReleaseFast|ReleaseSmall| +|---|---|---|---|---| +|Md5-Lib|2000 KiB|290 KiB|39 KiB|5.8 KiB| +|Md5-Cli|2300 KiB|1900 KiB|1900 KiB|17 KiB| +|Md5-Capy|3100 KiB|2600 KiB|2400 KiB|109 KiB| +|Md5-Pico|459 KiB|37 KiB|34 KiB|25 KiB| +|Md5-Wasm|465 KiB|375 KiB|523 KiB|6.9 KiB| + +I included the binary sizes on a logarithmic scale (left) because the linear scale is nearly indecipherable (right). +
+
+ +
+
+ +
+
+ +If you want to replicate any of this, you can find the source files here (zig 0.13.0 required): +- [build.zig](code/build.zig) +- [build.zig.zon](code/build.zig.zon) +- [/src/Md5.zig](code/Md5.zig) +- [/src/app/cli/Main.zig](code/cli-Main.zig) +- [/src/app/capy/Main.zig](code/capy-Main.zig) +- [/src/app/pico/Main.zig](code/pico-Main.zig) and [sendData.py](code/sendData.py) +- [/src/app/wasm/Main.zig](code/wasm-Main.zig) and [wasm-main.html](code/wasm-Main.html.txt) + +### Interoperability with C + +To finish off the article, let's talk about C.\ +Specifically, what to do if you already have a lot of C/C++ code and want to transition to Zig. + +Zig offers interoperability with C through the C ABI.\ +In theory, all you have to do is extend you Build File to link LibC and include your C files.\ +I have been able to use [my Java 6 interpreter](https://github.com/BlazingTwist/Java_6_Interpreter_in_C) with Zig like this: +```zig + const exeC = b.addExecutable(.{ + .name = "CInterop", + .root_source_file = b.path("src/CInterop.zig"), + .optimize = optimize, + .target = target, + }); + + exeC.addCSourceFiles(.{ + .root = b.path("src/lib/jvm/src/"), + .files = &.{ "interpretedjvm.c", "util/allocator.c", "util/bytereader.c", "util/hex_utils.c", "util/sourcefiledecoder.c", "util/utf8_utils.c", "interpreter/classloader.c", "interpreter/executioncontext.c", "interpreter/executionframe.c", "interpreter/instructionhelper.c", "interpreter/objectinstance.c", "interpreter/opcodes.c", "interpreter/sourcefileinfo.c", "definition/constantpool.c" }, + }); + exeC.addIncludePath(b.path("src/lib/jvm/include/")); + exeC.linkLibC(); +``` +Where the `addIncludePath` points at the directory containing all the header files.\ +And `addCSourceFiles` receives the actual `.c` files. + +Then you can use it pretty much like normal C code: +```zig +const jvm = @cImport({ + @cInclude("interpretedjvm.h"); +}); + +fn printTree(height: c_ulong, symbol: c_ulong) void { + jvm.push_U4(&jvm_instance, height); + jvm.push_U4(&jvm_instance, '*'); + jvm.push_U4(&jvm_instance, symbol); + jvm.push_Method(&jvm_instance, "pgp/ex1/task4/Tree", "printTree", "(ICC)V"); + jvm.executeAllMethods_NoReturn(&jvm_instance); +} +``` +You even get code completion for this!\ +After executing `zig build` the cache contains generated zig files such as: +```zig +pub extern fn push_U4(jvm: [*c]InterpretedJVM, value: c_ulong) void; +``` + +
+ +## Conclusion + +Zig is an impressively well-built language that has been very fun to explore.\ +My only criticism of Zig itself is that the standard library is not always well documented - but it never felt out of reach to just figure it out from the code alone.\ +Other than that I'm left simply gushing over the language. Not what I expected as I'm usually more comfortable in high level languages. + +Currently Zig offers a fantastic opportunity to contribute to Open Source projects. As the language is still in pre-release state, breaking changes are generally accepted if the change is for the better.\ +With 2900 open issues there are plenty of opportunities to contribute. + +
+ +## Further Reading + +- 2022-12-07 https://ziglang.org/news/goodbye-cpp/ - This article touches on how the zig compiler (which is written in zig) can be built from source.\ +Spoiler: It involves multiple compilation phases, custom WASI implementations, and a C Compiler. +- 2024.07.01 https://kristoff.it/blog/improving-your-zls-experience/ - A brief article about the state of convenience tooling (such as code completions and inspections) + +
+ +## Sources + +- The section on the language aspects and syntax is based on the [zig documentation](https://ziglang.org/documentation/0.13.0/) +- all diagrams were generated using [JFreeChart](https://www.jfree.org/jfreechart/) +- all other sources are referenced immediately next to the relevant section (primarily 3rd party source code) \ No newline at end of file diff --git a/content/posts/2024/08/zig/md5_ghidra.png b/content/posts/2024/08/zig/md5_ghidra.png new file mode 100644 index 0000000000000000000000000000000000000000..ab1b915467c74e9988ceb28ef2c897c0abc15e95 GIT binary patch literal 283990 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

Pi9uFS;Ys!L_pfIBeXlps7#O7u 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%0DHa5Cb`08Xz zIzB%0>8P51K%Ni7^!a|3hX(?<&J~Nv!9hvk+#Qafnd!vi11xSXYqOQ)wALuuto&R< zN`^q-7)Tzs)bN>}URG%7+sUj z(pu>kV}CH|HK+!X=P>9`-aOK%N6i3ITG8Cm{*v(dp2zEUZUZQG-jb7k`}Qqc9u|ZE zP0GWgB_}7h9xDbB4$E};+I*fA_07h{?CoTiCGH1#O%gacr03NL#q;XDxupe!uQD~h z4Ws92Q$2uF7{&99y(;#7ekQ*A=8~owf7jDTIGhy^(S^1hVujPNVr!!t{|+z#z$Lcf3FcIx7UV*A#x;x_CdXe>x&;Y+Otim z-;IA9xRv(T#e&buprdxDiC1yOYoK%u0zD{q((%_md_mk_w)Xz)d-;e!@Iyv@V5v2d zIuG8Ah6VjDVrq4f^#>&rvSd(A+kUNa;rbHk2VTFoxpn_j=_1o$t9G>5NIMRHMxAz= z-^s^F_TYy{qyIG8#(!=!>2TnB7TSH4>-U5Np@xthzi6DDYU6mt$42}mlxy*nzX}Tj z$$Ve)Q2{QUI)Rn7tpua4&IyWyTvRLwnJ^MZBUxHorb?LKd z;qj&+TI(q5D6{Zzoz#%NK!=a{{0vACZrXO-v(|I;ijd)r^Ss9mnj2a<{pn91T8MIv z&@{-GTq3S4@vJPnSYQ9DTL9x_%W6v+JXSOh3bg9sUU_4Gh-ugX0@-Sv>)O7%Z>>Wi zrNV%|=EdsTygKCVhCX*){3LD>CMffnY?x?oyh{ul{@9IRG?GQhZ(o0PlxgmvT!XfJ zR2z49IO7pTm=uY94Fy_UcHiiDJ#P2FG-E|dFwKkHd{3b*+LPW(u1&Iq_L@;kEBgcs zO9T)sL6D8CTi{?_b|4S}p+A^j`8j50sE9#VkrOotVC~W6wOL#xfLeDimKPZy=;DeN zf|TKwWv>h5i*4gS{Bw55T*Wp3l<)VaR^>Yu`|17cEuK!K^%74*-MwF5{?F+7`VbpC zyP2684(?2z;)f)U&86CBxE4U^RuUDx%MmTCufJVsNQzIN2B2J^um`79)zCmsO|4i^ z4dMJ}eRWk`)kTxqI#DtWpq;wxrIsRsl`9yK(ye%-i8Ax@XbXUX-{D7Vui~Pjuk3*@ zE+(^!>J$5>Lt>A^!?FS%F2FjXP%<1mvP(^n*!zzx{;gb_i8)at(M|mOz*09h$VGRh zTxdEt3;SH+{$}C=#&-+4M*!zaVK4xh>Z{uq9WnEM)5I+2B~xL;p9O*BW69((k^nuv z>f=HPl7>!YmBgu~sR8@d)WF$DofN8MJd#Dtm0wuS(Xktf%VqXwP>3|QLbTn=`vVAy z4Jt~PSBJ?Z;K8H%WMHlT_1FGy4w~fFHDWK9X~chF_5^gQ|HAAWPog;xb-bdHy5YzZK*X*N`G6(h!mKg!=pzZX{p-9SmU2kW(eNR}n+zqjOid zBH=~g;9!+YPWx3}{7qY{?R2~0c%(AUx9+v}6tNnSB2;d)F6Ht0WCKWnbU5${#4!j2 zU~cij$D%%9mx}MW7UaR-JGcnccyp<8!35Q$IP7hL7Q~c)dJ8`$Uxd^FnqTT-sy<+9ssg)pae(bR4)#qP15;S@N zj81dV@gzR!jWX=BOlqM5`^7)yBLAJ}m8XRUM4Gj`-vS|sE!LiDKu_lGpFeGvU1}Sg zE+^{J(xXeYrqBN-fE56l7YK6zKA(z{Z1DXfkFoAdm&=_T&P5%UWX;a;dP9?aq@$|= z{4e^z*q}3mx=KIdS8R>`c2D8|XL5rqN!bwA zrgvScF$REV(zu~e+>KARK4XBLA1hFxeSf>}L`1ac?9tfx{+D_F286`%yIuVO@>16~ ze%z==S?s;6YQHmhdNlVD%>E<3`3+v4CCGhk#6svV*J_M67f}|KlA;mNJ-d!x7d_V% z8*H`w?FR*qL3?mc`IP!&OW;*%4H%uUSBZjbELVt>l#~bO$iSKLDL&F=p)pJx_!2oU zYN*|o{qHaQuaB3Wf8(>jHz9@ot>L*Hw^>=8{PSpJNHE~({{DDdKqg=L@j0^lmU-w# zCI1Jxxyf2G8p>t@upG_7N?%yyYDs*t{%9lwhKJ8mbU#@YnorQ$Dd(?#0&+uf=NKEbg z^cIMAGsDys6(Sy7K>|d{>5u;~yH96H9yC*jH%Sb-cdqELem9G+!$Gh0=4Wo=77n3B z!pGO79SZdNbCP8YTYVX@?t8&hqFhKDRjd)~bt5+>HM)|`x={2UU-1~eWT#9C142R>h zit}=5##3l-nBE_u(Q1;QNpdQXl7b6x16n@24qSMM#~+`HE5_fqU>v;PY-@By{}<$lvJJwanv_!6ha6z3nkKgk(MpEs4Z zlDhZqxbh3)2irPY7T*xB5i)q+;u}P#W4Sv`4mtJz;^DgYu%{y(lWy_)Hlryv-cAm6~6gSf<%xHe5ng`i45F zObb5?UKZ!;jDCV8PkvCWeM+WBT#9cvH`>RlcFl~s=Zj3b9+-vz$K74?{A}1<+v@9Q zWZIGS`qOK_op<7zzjpL`ea~}xe`t-?(01n(A25!YyQ#0bsA{|~3n~)NhjVnfGk+>k z4*c%+C@!KLjz{(W=FzOPG513}u1uqr9O(K6x>}S2#pl2JT<_U3r;spT-Q`ITo~$%t zfq3}}MMUB`yyRyc7lEor0s{lXxlxY7mw4hgowrXYpRQsY9`7A8%xCD{_1*djv2$S} z&Wy&^zE%o_&ZI}=5y~S1h}kbS%V;=yEjF( zNa}0^wPco=YQ8jdaqzws|L=Z`oCB-Z9OC83)}OYutftzFBOW>JuXbXtlA zI8hH*_Ji+g`1cuv)qPM>7YXkV3RURu7ij6tkye>s5-reXfttzeYwlm>Gb0-p^lRSE)aI{d7PKfJ;xSd9F{q%kA< zfnXYq%vXP?uJR@5(-oh0&V<))XDpsCRaV{vbZ7(IXNoBMgxT~ngg#bYn_bfo zFzdlljdF5XmPJR?`8RK`85!v~s%@*SYWOY3&#xKmVwVhw_GlUZas zf}`lDlqKQaZ(bXBuX+yQ2E$!rHt@n0(Plc4d2w+OLn`eTLaR(<0&Gych;=T0L zbY%+EAX=3#Xg?9q2CbH}KT!v%%cxV;a#Ng&_O!85!w+Wr&4-jz4A6}gs_w>JB{X4+ zN>UE%kTJg;Da*&R=_jKVOq9Vg#N^S^n9O5Xf~!g)p!I$JaOE{bv@BIlH`nHy|B6-2 z?C7`h%eh45kxI_c-;AN2I!n`;d>kGO)DmxG$xs`4c~oVPuVxIF(gzNzD)~9nZ5y)f z7q--RCrOjrGcjpWM&`bS{J3|v2_|x|>S>|E-%JDv1ERxD>JZsQE=8ot#|)@4B|)`i z!-&bR(TTo=b+K4@0sd0nJV`JccngL?l4^NV_+Zwx zIEaiP>+fF)MJhr^fRut7TWri^(0X-?w>$U@_cQXorh6tA+kl~-TVPBk!{L+piBhhe z5mleL{p09s$?kxm6>~1@$M?)d=GYRx{EC#^@1#L+BWfLt1We|9s$OOd>0g8)u2bss zQ#F2*;G%<)S3lLDm3iv$*RoSg@zcEQD`WUlH~VrzQ_zPbDH~4-PtU~-#PwmSgNlf# z=-_RRr!kBz_r|m3L#=OcNP|hZhI~eHIo>>9d<~D!Gf=-m$*yzIim)2aj>m>STWI3pO4Tlfaw; zpl3&C_&g2X%XM-`$GG!SYRcO7c33umS=pUcO>J#d)Wl0@D2U%aZF0LVi}+|_JZAy5XxsTY3cGeS93&n^;0%-;Iqh@4WKSMCnV_yX z=5G(%1#PJ&st%dPd8K>pJ&$%O+V>gzj+nk>(XDmX$*SGE%&+{;(W`F70$G(=gMR63 z9JzWm^;~%UcpfGlZtSe_3UQD~D_s+<#7!|?0$kP3R~i{OIPM=VcM58N`QZNOtX!bs zEzUe^md(9pYCBL0IQ0Ps#nJI`Z`fn!*i6P69bH@fsh6H$qPqwtE&vbR>RDS|mhQT| zaAFC75-nugCl49meJfZJK%I_`mam+zu8x%E^3Y&*Azlx`DJm`GlqRw9J}H=8z?z!8 z{3z5EnL`8C$T2ITU|ePli!;Y^i7xziq@ulk<`FSLAGf80T&`QzZ(j?-D zvg5DziFt7KoL)xzYh++WMnVqZu4YaH-lW`7?6AX$(b7BH>IHik2b_0cFur;}$w+WP zdgueFi!nT?ULR&re`o1X&MO$f>}O3We^}v0-Y$wA!K&ukGsmkIVdC+ag%bs$cMFRA zP?%~LBuvPoW_B{hfH(W7L6Ac`5&kMC8O=Q4@@!W6BcnxXvosRYDMBH@4yV z>NbwC*y?=#g9M`#NYIXFHt%-WrT@=z5KQj~9tubhW-Nvq;$ScyZJ<{v*6$liRWDg) zZg!}N?`J9Xp|osKdI`Y+-q1z1WyHbt;KN-&ay%QB2hP9ISfCQ7LLvWPeAP~iRhr%q_wY%Y*8YhbG#V;49i zA1U|NWn(V}K3~3^GVagvG}vBeT@G*lwxNT-$_>#yec2nF=rnqF&?Iwr*}YmgKK3Ak zJrr$ghp5ngL;=CUBeBuF;qg9j!31rAe0NZ3Xwq6;(*mu9Di>rj+rU6iclA)dXcX*^ z50J}CAFVZg%jee5R~CT2&QLUpZ6Nx)w*I#3`96X$Z*zB7Wj$3**K01kNUcKq^6u`; zJObgs$vFtAlLn(v(??55=?btf@bbb;GhZ7XwwNnX0dmGV?Y6odC-??x%8GmMRu|SA zk1f^gJ4xO|UiOkWkm?B3?SVra#se);da#Cv$!_9azodZ{#?^L_TVF;1hROO*WjGhnNG{KVnU!3x6O zqyfLCmWUd06Y2Uz{YiW(E**9#IA~Ufyi{yN%xO2C>eRTz0dfl6IX=cn7ljEKgpl?l z%|L+nyL(#^GZ5z*bRh7N#_Ho_cy)WLnBEX-0ad|gsZ`8?&;cI|o5~Qy@0&b03$5!s z1ugy4T=2o=Ukpm47aO#puuS-A7l2o>Qy5t*qqzf3uvN~eE^EgOX`IY)EoY3Nf&)Vl6crF6 zc%lS-6=sq|<=8UOT!QqWk^NINB+tM#STy}`A-9rw5KMSrnFh7{gF{qTV5Bvo=#^u} znca>P_T>}vORyQNwNJWM4YLIT55HbD6q+G}=acPHVrV!jOT_$U0%oD6{Xfvg=gi@| zL{`4oS&)>LuJH@b`9}n$qgU1!>0Uh8xad%_N=|UMH<;KbE?N3eq|3CiwlGo&Q{Ru9 z&43e3QM>oH^*?tmO^^$@=`%1p-lox7W6kO%TXdaV^rN0~uQh#-Smn!a=Fw#Squ|`*k@A=Dn2n!Z0WVq-VNdH{oCIeV=BF4yAV09)hw)f4oz8sIfF+`Sb(A z)~sGz=yx`i5)EP3Tf1zB7OTZ}*AHW_ z=Vc(qyTN$-@md$PH@(A)hjXjCriPh{>To~H$9pG&0~!HKkG%RL;wv5}-Tl@CAw6#G zXwUf0_)i|$h=Q?d2Si&|9q-0f*l+u=V-7me#$jWM9v9uy&{Sw}jgrJEZ#|w9HPo9s6_By*Fu9 zJNQp>jc%|7Gvj!qnLMONH@zq%W@ro~5mf2q6bUZhs8}FD#$=z7p&T2E zm`Ihxsu7ug>a79}mGUC24dE>TWW&P05+#>7=)_pW`IQWiyB^lp?hYuA*u_{!krh*M zX_-`K?S{lq`K3@1X;bitRLE{#x*d(07K2<|50#6K0r#dH({A1#{1lA_BDi>4sD zH1R3(ON}_g%@E3q1?I}MibO!+zX(?+q}x76UVWai$)~n?7DtiE=Pbz!?$T6my<=9{ zUE+n&`VpGhCnU~1=X+~QnNKxnfIpvtJ4=~O2^NSg{jF5t6RCj@3Xl<*L#>4*oZLX5 z{?!EL#u(LJCm2j7kvPYc2^2_eC|?=KeLzD! ztUz527RY=UXZ4|vb69g-+=^|ax!=NXH(t% zN`>d=J^9X?#~frNsPOGK$FK`4TvvPyfC^_iWp@!ZhScu%~-g2l=Y) z>Zp^;iyI7bpG0pyx9$F0%L#$!Q5HE5{O89)=NL0 zi57o6CI*52Qce@+N)$ippM64k>Yv^(mvrd2v<#iv^1o6!0jD)dDaW)1?#ArW>rr-g zcGq+EtoBJX9BldG?vat=t}X=lFn*a3_x7{ZW}h@&76j1L)D%OCff#^zyz>sz@+#DoP0tJ27PlY0q{;>qXtU(&r@5^af6kH{ z=Jg{zJM>2JqHS7Dcx_{o*%)QdRc>=bg#PtPf9^!DlbROQZqvy0*kfZg<+ezm`E0of%vd z6SrQaP3Taz{Q`=KdoUF#_F4Q9HN2*nGwl~HJL4w(YtK2T8W;b;W)%~q`JQj$q|%z2 zP%vH9pEV?Vwk8lcbvz`!BB1a~ADu;4GXfMQwgatC{e4NL!eG_98As?G*m_@RMG153 zyAsI6UscJ{kp0r`BtXAPL%T{;3UkLHb&91~>c*#11!{^kL4ws_uu3i|5WYucoMTMA zF$a1~fepbOQNQSRj+kTX@aVkY#DN@?1Io}(&D$Ws1ns>N)+0DXPD%UkXmsIl)-~#_ zvK+(&fQf4fnj`hkfkwUu-;pTvbJ(vZqqv9Pzh|;aztw6YH`xhoe(BjLUDxLS#%(xn zl|tMuV*uER0xWQUR2D2KG()$g8OffIIdA{-Im*+$YfS@zy88FQ5h?e#mn0-jf1UMp zFbdgTzS~);K$zp@WgMvy{>aF6VEAnJtpN?wEGqlSOe1OCX?3hiGjg3r$Im{X&8Ap=ASzm3Z5{9C*31#0kmS87c-^eZmyH6#<9qV9zYO{HD;L1ym#2)`o^+?ttZ9v}1Rx)IRN!rv>pIsODzV{ouDO8e0baoDX zFdZ5CJrM!>R#~~|UAOpAs0gZE88=kshPN8byp;hIrn8*HDK^_Av@vm)iFG*IeSNVS9X z?&5l0U%@~pYW?kB1JBUNkC40R$ZWQ_KY%NL2xtk^`-s*|86OkBwcDS7NtujxQW8%t zTH_@?qRWd+A@Vy<4jhEs9kBhXFQQ1s%qW7=CTsO!vw_>*Q$1c0OAWq=jlNrLfY17% zQe8qU`Cvq36+;|Ku*v1-4C#2tfrOZMOqf`(*V`1mgL0Et;b&5i&!IS{elkm-W+X;4 z35ZprUm}Y<-hzWWF5 zfB3x}_J_e|qWMAgA+;b6g=rC zU@yy?|IOtfmOv#JcWCHwZ!qR7Fv4|o-hi>~bJ=&#$EySKJv!3L@;+j>)k%$-02dxV zIZ=-wmmm@(msWp%KKH<&9RyM!@9sBX03UVX(p_K{K?(8Gai{7q-UVK|q@?uuu3c5p zVQPGQCqYdy5Fure?g|rFqX-4w0Gl?M>$hj znS7N9xa`)eO|C7Xm`d8^El;_>K4YM!RH|Bjgc0%mZK0^La^d(^AD4e12;u6+j-j-uCHh%h zNC<4t=$z)p(;_%6V@+`KC&A6FrnSBOou}%%1RZ7608Z*0hykex zEeE}o6bf;nN^Jy%>SCK$YRH|aN1Jos8Q`bk?bLFOm%gTZW*ltk#*Oz}|CuUIenfGr zG1%(_i=&X!skcy}*av!a@>rOFO&l{bbA$DY3&4}DW8|$+($n8vT~X81_cOl5WbErR z_Kq$NNMm^1Z%yIGl}xd zoJAq|w9pJV-D0hlLu#Z-Vt7)kInfd#;tID6$iT}$&Li}@sjoXR)CVpw?u?F|Za#nC=yp9a z#(rMmZo*DR>#bQBuU#KTJwDC7M!u%TpPw^r_STJeCusgWgVl@KM zzVJ^amKt*_x>%J+j(zt#J+F_+Y&<&?)DKz59$2h2RQMr2ICsHRj~+RbTm zd0KwKLuV(T{D@T`NY0?+?+@PAc1bq#E&raYPw7kQ8Zbl-YcHgbDKwZ1gCWu=5uL;#FW_I zNP91$TmSwSW|OJ6t=9CAo$R@l?1RdidQ?~Sy>(>t-fD_rL3T@1HEcNB zuRXI71`g-k#Vb8UK+tTNg)j*py6qGFn(8Qf!&jU1aM^f?H89XDZelO`S9HwtDmNIv zQZ&Dfi6eKx8GHf}}lHz>TDVo?;Fc#CyB7KeDK%23PB>CE9ZuNo8fKCR_G=;2Vg~ojzzk zYBR8~g^eYcwHq-TYFZ$r8nP+LQ^y|crwdV5gGfHPA!y5$IWW_1s~`qhh4Wg7x8a?; zJi6ncJBlw+H|&J-wu2F}T=Rm3<8jrrJP~_yx@B55yf%!n49z^E?SD>rfnR@j@O&zM z2CAKeKC3`-1;hKW^Oe&Fb{@@!mt>=rH_pzAiB*Sz_-8H+by$6fgWkDpG;?FIM!MNv z&!Plrs(-Tpy(A0>^+L#Cez3mOwC;nUbs7pgp81!5NF{Qie7*4rb1b@vW--Bf<7LQT zKwShM(Hxs8CBbDmjhG4??C{D92mmF<7Y)%Se}{+$no2yU`n= zF$0eJ;K|`|_}D&pAgVr6Uwu2D%YXue`-R(!RZ8ib4$r#iPeHeyQFaq`ZM|eFI(@8D zGjmWRNKa`$*gCXGjBd$sD0{}!UJY~9ql{K(EVT|ea`688RQZfjLI054)zts_6YO+! z)`+aq5-q}=C0te7kx+D?H^&?lp9%60PNyAu`={uGDmF8r#Sf zg~R2=$wQLW4}JY*2pN&Fm<)~}J9-rfIYckK|m=4%7m+)YH zSg&=HBMtZ3c#l#F+r2q|v1T=KSWlFt%#eo;lxbJjJ@=icAQI}7DzbIv#F7E+m3dNZ zfA$KjSN6~dZL?xYT3k-mK$O%^Zr3J-1rq}AAum@W{b#5TK=>^X9sq2`@X1{UNslW8 z+#DPou2|AIcs^4+V_;@6=B>9lzm-<@4-D{FZSX%m-70-UExzV;AHb%h8hSh+6_OqI zLD1D`_?mqY7A4+jeQl1aQ#uE5EVY;nE*1z4ZEbixRe-!uAvuj!0ZZPJD~016OVThX zw-wZ%%fI3&>pXjYUw^MgsQJ3~az4CHBjxtFPr0FPl{L$n|L*cG2YsqC0>?Szbid)* z>e~LT_c4L5(kbZzX)M?EGD@Igxz7C8R*>=ex?7+~d&k>q^J$jnw!_}&{28kASn4q# z(*Rq?H5L7&Bi51_g?skUsn+BmE_^!OI@sS8=3TN)NHHbR zH7>&%0oYT^2*fmWM{|*b?I9#B_yKfzr#@0TW@9Qf2|s7W1l;r5;7O&e?rqhMf%Eg-2i3+s)@0?Ze-$)z4lr z2l*<%3%_EiK=+w*?dcWt_v>=^%ez?|tU}V;ak%Bib2W0ro8dFm*Jb`#rCqkg)KDzb zM5L+|Z_J!9if^sCfPxp50Yiwx;T8KDjzgnW8^`)kS4@8(^s^5A0(@xGK*8`R-@hoU z*WMPTe}A$bUBV%UDHjFQ;G47d;Y+E6n@?PcCnQsNz9y1a-4Re^sy@`u#x|QBGT75b zl_kj4iZ7^@c!|T?6O%Xf2L=TGWAi5xzdC>Jpm@@Q~K6_3-)Tu;iEK&-biZe z!+7|!?-|2YahW`Jg1j(YW(l*Y@}!+PU)!AAG|4|`96OIM>a329EguYw=c52EJcbb# zs?US|BO%}vgTvYqm%y8T5rt-mgKclCgw-DQzP~lAYiuw4gV*VVcp|f8i&GHUU-eu@ zCDS+>3|6^z?ePS&D$GlMBwa2_gE;BQsfm6W(vK@NRMWz7CsnJQ+aex@ziv*vX6lBv zE-^f9`^Us$NVx{Zv7O%UJR!!%LW!K8Bl(U!MQ%LX1vwy)n?{M>^O$5w`2{I>K-Jh3s1SI zO>KboQ#LpVR~v`OW=WvD+_Y*aeX@@e92NzgcDE*eU-Qqnlu9}Q9g>x@-9dU2A58o+ z5{-aXh$V^fc^a9?P6zGI8h8>UT*{$SRm>pQvrF z{(1^IjyP~}OTp0F&W68%a+l|BCh-s5D?w#%HKYSmSCqj1RGyR+?4whDsR7SpzO#1s zY>A-t1srmC;N7XboWd&{06g-(aS@}BLV^bjxh{mm*^*UfXBZ&8_SWM2pT0gqRYJD% z>-OKQn_DMSQ+tp~|C{8hl=%O1@Uh(Ky;6xaz5kxonbfX{#I zhnxnd#gD?EsJI69DIK8JoDyw7tp5ipdv#p>e?evRYKdS|4XBE#t)1a4Q=?)InvNJ4 z?51+NvW;$EZR^?!F|JIAhH{85v{YUVKh&Vj9^O2*#NC2_HG@1UODKC@eP0}|SOJPQ zMINJ}&m;B{8bYg8OKJE|XB9O!HIhjw$t;{NDxe$) zrk<+h;=OlH}};on3R0y z)n3`LeqxLB=@k`mQa}={pqrR3IcTQHC0;L@`pZmTq3WOhjf_k#YfVHU47XTfsieH0 zGdUyVs=thqQe&}nSgbMq;I*1Btlk+f-0Nw)#HzPT1MLOoaV?kU&5JxzDNqI;-yOD8 zWFGgQTM~XXA@KU#ZmnXy+@K?m1;LCrpN@>XnE3uC0qr<9vTWcu72E7L+u=C&$bbUj z4kz){gOCg_=9KFm-BKiH7|bwM_W-XQS?0i1G%YG?b~%-)w>IJhj30YV1zt++5qd?w z@h%!a3JSFn^__6LAFRe)l;Umv?ooUFPn_f?bVzQkS;DUl^;|qxa z`CmL36)$l(8Gk`~Q^DS+fB`u?!JS~zP(|#XBzW{c_KA@yr6lA?OO&qehH)*~;?R`f ze$==A;CrXYk9*jjBPk-4FetC7iA&~eCr5f!S@E+ZfszD#+r)RkZZCB=epe{#a<2;r zZ3b!kmHpw5M;ofeTAgrfin@fiSVcUdiIu=aWs|)3?KW2l!24BL)M1Bt9nX(oguRng zg=Vf3lSB$_nBge&wcK8&_s-aMT9NNm@-|@`HLQ6wksKBb+X1l0Gqpfc zo`#?=_TBC*N(wR7EU~1Jw3)PkvLgCSr5UEKf$b(XJ!}`97xKwxNeg9n*Nb_ZT4gA5 z1c66pIrHg%me4*m!-S9>VnXdM_dY8%X2Z$fBb|CA6pzIUn$(i2i?!CN8hvWR!`64a zQjgay{dYAgB?;Z8J&J_WJpF?l`*)peZwFC~jIBq?5rmu=816ou34VKRNvvZxM|=DG z6z>6$1o{2@iI{j$(^=Vz{w^2|t*p}84d z(QK4K+e<7c9AYC|0;cHLYIdK_+E~AsJ2>2e3bTvD^_i_VyN{2}u6~_>V*H2G1xQFpS9@b?4Yqr_v-yE! zicC}ZDbx8;Y6bNS%i8rZIr5hadW42)4?I_8Aa91fewpxQD1Jv#}h z>u}A}w)uR(DtY(mnmU|Ih`G>lmpm-K;*Zp38fo z2}IoD7B;*@bTkp&FELK%xE*d0lEh>U-)I(83sJf8i zN|90@%%j)<xewOCUm z4aq8sn~xoYd`n7BDz@@k=WoxXcvq6+?i@MESC%-}2V)2!(#y}Kr+y89ptP+O781Y) zI-*uKxZWwqdbDV;I$uHq`%81RlrnimoNo8(74dG3A5cGG`*Wc-n_~I&g=lSMpriSOT)oaY#W&~LM zZ-k1wj_wlGm)BY+DqJc(Wo4WUu4eHGWK~w$G_5xUpND8IK^Y0BHxHrU-Dda?98OiM zvn8rvtbkZAsasvFHCJ_apZo4>;V5*qGLaz+c02lIB!iNUczr3!$&zV2=1ib@gL_k} z!>7A%n^N7D9?n;MN58>0fY$FZ$j-p{8bbvOV~b*vSvdhY_8XB0!lYb_L*0oz>^MV> zbEggIjf~tP`^H8`F4x-UBR=ZE$kqa!0oCraZpWdb2!5K640sHR(deiCr0uC zx*Ur^k2p*!H~$4V?;~7myWf0*)jEfGY+8duof!VKNlWuVg=cDd*O8 zTQ61TZ;JMvH3||yUKiJ^dY?uhMDk7s zb;yH+AlD1oN0Bf$U;#Q9S@}6!fpZh29+52;puMndgvkeQf79-kpZYF6)>T^E0xSHd zM5egI0D{6yWDqx|U@#^N?WOXHZ6y9!eQ| zhpr^4MSo@yL^Yl*rFeqGJAmbv4`$({WF^q9F)XJc7@&;>Xff_gHgCt5{ZN3HmMFS2 z#c?lbxdE4Um)K3!#CKtfInoRFLpbk*Zr3Gqv?R~3cNY{Nr3(-7Migw#G!&M3WtDjg z-ZL*iaT}p%$(b7XPr*+)P<8*_V(U`2`@Ets$b7A9JZL9~p3+4C%MY<{>8+P$v*8+< zjn#*(fC03}`!d|=Ql=RzQHz*M$q?CYqv0}}ul*AfNElxh(ioU$z!<|&sj@nCJP{oo zj0f%^6bp*es*Pj58zSn6acx2Kll-==SD&yZ#|G9*O`{h=FRC!u{^2OB@a8U+${aSe zWpgsQau|>SFG)of#CO<^@w>Qitml49uQd*GD>uK$IV@v&Pf{o1E~>p z{SpQGhd9sAJb5kIO!FEa6^0CDVPI&*hiW&jMq;7nD?QhDD<`G*gd=0>9t z)Kd&wZTG@TN=hEOUtgXGL1l~e_TMrxGN4)7!NCD{;Zvo);p+wR=$Pe;qNW5`0j!Og z@p`yw<8&}{|K9oc`T4D}DZH-6o;7PiV4S+M%1p+>ViBHJu%@^{lNY8W_UT~{xi3W7 zz;N$ky#xPS5rl-Ixw$!bI4~71hsUH*QdNcb^-Bo$n#Xg(~lA?^*A4q(J=3zgg#>OV_h4H-^^~ z_{E#}P1$(YA+QwB@(2@}vX3<%w=;lY#uV4GG&1qy-K?a3H3%d**4ZQDVj380vv(SI zo1HDRp}*-c*zMnzB6)t93~lO~NSVy2?LIQm**eX~ zNU~`tBrf#QUb?jdRvK zW(T*?2X@hEFdTNj@S3DAjA5a@MpZHQaw5a8qDJEhJU*grA=-$|b&L1!Y{E_DF#d_| zH_FWNw>jM&tv-tK-rJzYMR+xfOBVl&P$RU`D=f2x)}}FsN38I7u*{+GAnd6E9vXt{ z{%D1PMe=a#PXiq3&@Y@n>wy(Ph&~1lw7dJ?seTBoF5_YbKmzst*~jXk*|ew)4O&?k zBpN2@z472o7nba;#0*g5&gT5=CQ_W8F_loQuDsujA{tC!P*5E&q-(9H>LwOH=w4$Z z(iLGW+>{Q3_$xK$@{=fG5PH*MrbBIhO3nOmuWR~bt>G^@gZwh0DryeS1PI_a#o>|D z_ZAhPGEGV7tcwS|XGV4!&ELiRo4`V_c-=SI)EhGn2Vm$MN3K+!Ac%&egz4*wgMqu-2vj z)m#+0g<9L~bJZ9a9r9!eImI;C&Ll#N((286k{k;Q?Ko0$a!3KA8kKL~qL5oXt^bRs zYtb;&)-ISkGBFWDI8ab{=ZAo;spPbOd-9Ed01YC&wA5g&wI>+k1+=FY1uy~w1ytvz zSj1%hCF4lN!<3Ym&h9`AW^eT6X+}|YBtS3T@U-~@NYR~m<7EY!@3XH!w0CBP*EzOF ze2G91aB-2u=CGRt0|CHS)RGn-fQ-LbLpm5P0&;v`s8rE04dDTo78>3+|D!o6iG<6s z%S+I)Vp!Eu9nx!Zav5x@V)|52SZKnlH4zE=&c0pCUhSTM>GEf56TS47Z;1!sY(L~m z&EMO(9Qw&@dr%?{{8dfl)V)Ul#=T!#zMN6JIxO_{@ut3AyDhc$CgJL^cH4U$g)*}) zYJO1kmED<+AQgFJGSLg4Un^`SwL?#&^#Bj_gHJIWEu)j2AAv(V`&swm&|N+D+5GeH z@8PS~fR?tlu`#7n@%qH-6nO)Eq>+2@`q^GBb z)t`BT`0yMLB(D^?NKQMP=lUAzy#XPydm<`mWd`iq~gu%88`BN-?P z3SXlL%aA`$36CjM*0^trNxeWji=;at>BquEBoZI2;ISX>r8c;xsQ$vm|$Xux?F z>NmXSTUPsd0@qHC#DywP$f_0-Y8PEb-Cb>os7uT17%#jhdnz>n?}qi^czB<< zw6Ye5{zVt9q3dso9-w2WwIktL=vM?n9xhtiGDdJ7z^#~?78$FU$Mb)s;?f|^vGv+^XXh*SSZD2Y~@3l?%IN)r7hs|LdPJW zp>5-`+t1D=2JN)`*tbRYz#?kG>3*{?iRj{dd{PQO>NQk2X12yJK`%TSF1Lo~%j}FO zV7+Q8O<6_BBCSSUxW7}L?5zQzijZa4Luv9L8|DTX_*};{XH|atB(laUJMEz zZj@`a+pEc|cn0{S43rnIb# znu;rX4un{4$fYcVWu#o6@`i^VtU7UfM$DRx-t`mOm$%CSv>7FpiT@46i(WZDQb!r9Qjqoy=-xT*R?8AAw zfz}a+7OF%S+nvUhv;nKiMgGu%SU+AsXUy~D#)~482nq=)E-Es0-i({*?n`fy%#$zD6%(U@R7&3;2X{e? z-MSz&)B~nHN=nRy!#&(5vyqzw&Q38`<-{2c%vS2oYU=;>xo zGb%Fj=ci-)(4P&N1*iKKp;|{FC1oeBh@k@9$6S*d5>=zc@lqfv8O_a}@c|~ zIqT{;)=a-#iZGN>SpF0G|O-L4LUkk1lCEM;p8Ee?4F)=O!z|eZc{> zZ};e;-lCB==iRDN1d0o4G;H38m{k;K4mzY?%q3lc-O1pv`}k^C+eQQj2PYm!g9rPu5T{-#ahyjwYShG4ED{^2%-Px^1FjPSX8W$Zarke%B%2p=W zHyOeX!-G$G892=a=f6~i{Y`N7yUt`#^`BJ?-@f;5!^8hx|Eeui0c}SYH@O45mEOOz zyX#p;vQlC$BCsNHw9PbV0D-_Dbo7Toqb!$cwq@{Gz0u@3UdVqTM0ZY_I$1LmwdyGD zu>vV!aq*g^eI_5{LVDEA=?UA;Eh$U45(lCY3+{W}c7-b*-ND`q7RLD+WotW8G8h9y z9Y~N7;uwUozeb^*&$ejT%5V=hknzMQK|RX_nVTntP5fO8DMds`^OeArPhPch&1J#M z>vhFs7xuiJBN+B*L72?@MhsPy)gdOj>GMla_I5;MLWN2IaI5!yKcvDZiTdzsG}S`( zDNCInbVZZNUx#t*h)Q~b_$+uH6Bk+1ZOng=qx=+Vj%meP53&^{W=CVgeRQJT{XbH$ zV(fFd{9()c{zxc(hOA^*jIc(OJ(oaWIQ-%qi<76Vwk)*+T-7FaRxlC*U*50-Kc08A z#GQBpnRUazER;(?T;3#N;9)(ush$&7$6=@nTBsd4-Nv6~(lfYz)j<*($_wqmFPVT# z;=r2}0B6?KXt!1ZC3d*&eRv-H{}5luQtyr@ek>$qZy&wTqY=`8dj#B%2N_O|gCr<@ zDNS7pSUeAu5cw2ZVfn0gvGSEO6sKW!(V?;>nvwl}`5(@tIZ5=oBkP0lXWfFe={k#Q zcAzrjHF2j69ftYSkDw`kz`BzM&nJVfV+3Kx2pUm~TzERwLQ&-iT{^3R{)tKJLleDzJs7&BL?4JMuVb3*@d5#9Q0cV z?pe{JuRpVuQIiEBfd9=W)#V@lvWdn~xh<9P_5#Z3FZ1y)Y?@;}_o^O$-0fkMjKjl< zSC25B`J#e%_2Zj{X8QVeP*l%w&K4zqmJ9$WfNYmg(=T}^|ADZ+@KV?nN!DEvlC)jc zWf#mS9KYe8%bEd*MCujF6%ID!`tSJY9ivNhI7j=ZaQ|~hkO3eGpIX)9XQjDk@|wWt za-~St*8F<>fp?=K9Un?JG`|^&&xjZ&`}fv#Ml`YBaRZ^ytC(Ki#Y#hJ;QHvE59>7E zhL;>3p2!SHspqgGE*TyNfEyuzULVak9*-M`>=I5)7w}S`x+E1Y`SC69BPJ{yq2@s> z29ZeAseC!^LVso*gz!RRA40-FRNPUBrfN!MGKsE+nk-~8+=~^-gp?3yFP&gWx&jRk7 z?Pd5scH#@I^lb2NHHiOHmR^@6>(9I2w4jMklCI=Ra0~d67Yt2Q2P4|&q*Y22e>cDG zWG~=Nijaj*jo6L~m>uF(NT3S61GIQ_A~5|HKL-H(@A*DqKmf_&@{>^lYp7X}g4M)w zgZjBCX30Y{laxo%o5LzT7Wlb+hH7qWv@AVGa0dO1P36JnyeZyQ__;fbg{fCEP{v2|{jK-#!=}Qxdu*Kr>VEB?B1j9>%%;I1jKJzytvMX3SuLS= z$kPzo*p!PAog82HDI%U?ONeBs1QPwwRn*1ug}A(>j2T zG$CBTnJ0+<5Q9UvJR#SB5qTUhRL>ApJ%2pqg@z@>LJxHNB@6DU83zUBg!l9$qn{2& zYXM&VgoR{9HYB%#*BdUCwJH_9`voEb0}4%O1R9+)aPHV3nRUA#E35h8QpV~ z8w7k-VSvv^G?^Av4j1!S8q|%x*h14W zvd7FnCwbsu;RfQ$b%D!2{sZ}L{4p%CMinfms3LeK__ff23;>JT_29flkugZvDpJg)| zD`HBi(d$Tj@`{FU{1=caHpF>3#nnx7!b<(ezHfz90)VZ8sJpQc>VS#Tqfy0RujclO z>RSYzT{AO>uC~qz)j^^V(9ZNXnvvf~ZehuhV$lGV5i9c8nTP)*JaWT&;_8XiDHor? zhlo1Sm*{2~hv6rGbTw=!=gLn-gU!PzxwgZd3(f_5(M=Ct%McZbk@kE&-p&DttLqq# z!dcx+==6v~_0*BVNzE@@%MWF~IkC6X=2~u{?}v>!+)syL=k{$w=yPp%8#yk0_f}dd zB5*${G%d`1Ei z6I&;+^Pk+#AudnqD8JOSznAzKRW^(%A;5j-l4{JZo4pOz?vn@c{E_h;knLlcg}CcuXzzeHy@aB zMuKTumE@WK^cWhPpQp}QpQzkCom~~Wj_AdcB@DAtBZ8tfRr**Oo9p*E9bb95dmH~W zUT^=1ORX%tR+=d?o{S)`&K=L!^G_5sg%nARx`Na{x$C#%xAYyXXQ!z@@(QmgDQ7yI z?xDG#RHHITn&0;Jm5haY&rhMRo%)Oy`ty6bw>AVoH_(^xoE4GDn$@4~ULYQ#(4BW)<(QfQ?L{PaO{7tAf!Bt00pke2d{kVu`M!Le3}4=o;> z=fk2zsOfpA3C@gqXN?OG3?g6deF0dN{J0Y|JI3;jat0>@D)Y~iA&P<%Dt-1d4+781 zCY^C_LjTebNxuhn#Q$jIn$je4TMdVxye5upvSUGd)t7vHD%V4V0@}NL`Q1#KFhRsy zBo#H6B=AYH26=vLxkV(6_Jl`_{qnn3dWYit;5cr=bYW&ebN_0`=v_!YYyT5LW>itmO<(u zKHJPp;p|i7l7Q?tz{xEGnc{XY0>AxN4>pvcm%cIp2$pMmdT0l38fhPX6t3l9tN1uf zpefwZRqMO#KjHizNr1%G7H($6oQ4}YN6uSwc7BTSDve7&)gtn1+(It{t9GUE)0I&G? zcpsnlVD4D}ieQoWWTt2>xTkV{{*6ZMKCjDv4rsqV2)2hl2W#7)vN} z@pTFOD{|lTP-kf#HyrzeC(h2a2{9(*nYeP_KeORoO0qr8wq$d4$JM*&svrogn-!kN3s+ zYImf|4kB%gumj<(3t0*OgV6NU%W(A2m*wT>It%kOZq>_&y^kf7wANP7lYBlGq=TI# z9?E9d9jN*vHJn>w4}tX05v|82IJbhO$v1ISxGnf?PJikrs|u&y@mxyyVR~HMTdy(6 z`u@INrJAx-k^GLLr5yUXrcxPIh>ske#VFkN_$6luMSjIjG`~H%$x8e0-?QIawmy?B zqB^-s8W-zp(40Omfd+JVgmR>yZsZb#lM;k{(wFZ_3f}1~ezZ_W$*~M zeMDh9ySi~_uVnbFJdIIGX*j3q))PyXiJTQlAI;jPvlM?NVPYN+-Pw_It@sX*D~CQr zc^e4B+LI7HGt+iXrJP>}@eEcvDg$0Y??ppYtkM$>nnm!DNOWV#6%fYX-yk43{`#R4 zgblpsPmj{)X8lI1Nd8!k0N+pY-YcT-OlwUt62S#Sf0{^me=SoPOL{C_;JSms+>8B2 z>5rDum?r+*YCVMv@JG*gEa&Mhz>2yWV*0v!yc(TQ zPb~pH2?-5_S@?s4+a^cX>6sXyy~VZ8;neP7NV8a6Y?YGo!5s|nP*9eTe1?XgbKq2Z ztzhPG-6}^|=9I{s4=BD0nw0Jg#f9exVU)GpPB4x&zt`G0edXwqR#&fkI^vTd?+e9! z8)l@%{&hLRy7p5{tkM0cR&+z!qxI#=`SCdxO0`rQ%FqgZSrdL(Vdi>;Ev z3GVD!3Pm%@nFX``PNp8u*tde{r}LJ!i!xpjXSBkQ#DZU12xq*7W9qwuc|F@jt}6oT zQYJ`=Jw(a0V~Y65?#4=;8QH zPXGN>?bAnDZCJAkS;_9qrcAbX#?ebbbgu8+&Ar3coS)174n><89mSHFRZ;^ z7-vNaTBf4qZ}iMt7(6C^5PVAbL}X`i-PBh;zje3>Zt6I?%JTSCN^%VXI^(opfn7AB z3zARd`5lPHO1TOW#sDd7GMQ+~#<5T(Dk&@iQ+8vdoSBVCuj-em@0ZwLpO{s(ag4i( zau3WWsIH6ho>-QNywh*ntMBxVsJgD7g*2rj3_tEEf7vRD=;15~;|ff1T{h-hfh}HB zU4Z2qgYELM_BAXpWi1%|vH{!Ubnbsz;eYNm1H`kph6pgTWR%^*3ty0j>0Z;tGFBa@ zwCQ_1YaBa-3hS!Pi@audLi-ovxHA)e!@$^DUWq#}C@s|}Nv6{Vxu;WrPJeLt@82$P z1!#G72~#5|oLQ}_O>K6zwY56mSX}HBjYn#fc4cDRVXNaV`Eu825nQ*&{7ps zQ(R!&)F!b`_6!1Wd5#`@-v9T#_a&_u^`<8IB+*;NEb zX1zNQO*T*R=Hen^Ko8vS2>S>$OnVsbMkjz`TgrQtTxqvz2Mw3Mo=E*gk(!*xCB?;VZf>CLC&B@!&Ch(g~?L@yI zm_(5O;F2jR#X6Vij$hOYfoX5*N?fLdR3_2z>u0nbK+=*t8|DcO7I+T;Aq+GO$Wo)C zFKpy0RkDetXP*W&<_kBU(MVQ$E14*zMy2QPgP&Fv@DEW^`9As#@cxjlE(hA>FuolE zz&TKn{`Ff{G<59X*s$(%H}Mk@^-ZT;IRy`99RwikT<)Yq$?Z@b6T*79f=-C zviMSqpoK(jnU!|%%YAD4*RQ!s0AdN7O=Pe2va~jEu10#nme9x@ehiG$ZAa*uV6+=V z%!kM9ZAan*)xR8kHlJEUAj@l%BWIkI#I!S!J1dK6Bp?xo9Eh>_)42cz>Thg}R%Hbf zj`R~hr` zfISGOvX7i;!>c(uOjHR`C47*iJh12Q1Le6(4LIRRC}_AnWUVC~d(n$SC;WO?{0S~bHTjyHI zAuMqMkd63O)ahFW0%+7G^7tcmbb1F!2YtMOb5NPUcy1&n#Q=uiN&3ta8iV8(F)w6D zIBhHxB0O+>K5JTz6T1X`9N42Y+DvO$_BJ_}=G7%A=@}NLIc(}a8PfaCqa42<$FK15V-0E9eX_(T`NWEQJ z%T-mCYMmO(TxoLj_w`N4A%f{cL%>K)B`FsBo9N~^fj5sUq4#bCq1BX0SA^zLx^&Ps zMsKw1D?_=^`yRSs=XOJ^qp$w#4}Jl^kOZ?Dh!s^g%}FC{K3gCGz5P5;WKM zMn~LQUWSU{b7BQy>R{(k-Y$$AH|h$%G?jSD!<2*RJrqF{&3NkUkM8PpAMDMJ!ob^%uT@#~kOB_Vp_@AlbRztfDsyjB8dvGcA&&GVF6&H;X=a2FBS zToCo?w^67k@3-=E^(WF}$&4cELnhiVH}!gO~lvAqxf5yD^jvI`gY7#Kyl+%)$&jYOFtBj~y_mjk8ap})zufQSNsjN1w9 zxUwS0+#E@%mP+JWA%p@5cu%XCzGI8AH3obbuYV`{U3a2%jVN6v?@=jBR&ywK{#hEl zH1{bJme~ZA|Gwf_Gb~u4(<8R8KI7Whq+_=%4QxS1;otmiJ|CggIS~shk1_zWx%&=i zuZiMN69t+|i+!WQxn%;|&?0wQ%&pxIrnqOhrvNd@UJICv?}h*+VENcl`LU zry|m~@mjYwKK>a6!KpYkCB>Y?yw&+CH!G`Sg-c|J7@w5Xv@g6)wOmWw6EvMmLlIoR zzi{Y1Y4mvcr+t8R&F$)G?agB{TU6M`JDx%NLy`8|^GMp9OPPIzZG-b&?n`$njEky! zZR_=29FOvA;0>E;7r{8k5{Jl0IHZ^IZB?u*)m!a@DsA6{ThjV~_2qPdEJXY0s8Yqo zQ&phxVA()fq(VaT@{g2%bhTVh7MZ_%l}Ka~y|dv=8v~`Q>ngBMzvjqXaCI@wOmB?ZNLx|Y>c*@Cp^Zg-$xo-rGnhxPgUf*Mvrx1KMTv?AB;0#2~MVm`-5 z(Q?b-oD}RGW}sB)|2*a!xUD+A%{YM`Ts%XR714Q8HZVezD<#qLPlVtyaAHl|tu~4` zW)qHLMsP}WslxdrNXUlE&F2%yTjWVs=OwZ|$8E)Y{#-@-bVnO{Pexe?%>{KT&?bPQ zmaO(!l7On$dlH@B*u?~UlDNKPkZsknL(A>WQ=kjE&JVf3Tc(K8On%dd?LqqBtJBk(bNXoeXL;yH=*H9{0m|JT)VKSYeIR5+O)x_Pqh`&+XQHd z|32(!;nSRg^;8ejSxI-X9w_}4*b0q07I17yT#0zl1s|<`v`6EP1VO-Cy1A+~hi!p6 zY#qRJGmOgs#M8Y7d?i5Gj1uN?+DGh9zFAl+COk$t8wn~TaxI&OF>phR&nOdX*@A~# z99v$oR0=0DqKMQh*VlDC2KofF=?q`NLq|+3p{C0P6tI7Ks*uW+(Q38o9nUOxzvrX3 zGUxee_sxED4)pZE0HBu- zGNDG5%S~KqDLe!f1A`jOY?h~SwXZLT^NbCOd9vhVu5ewQ4=v5lFN4OBs7l$=f^{_! z85x?YN+CyRCN(QDF`k+g#AEf5V1*E5@s8%octO!PFf$bj>(79n;!$xzyuv?ckq_mS zIGdQm7zgQvQGMqAvbu;l_qsE!sld}VS-U1@?g`3ecrdY5x>6%hWeN-7WTt*k6ZPhKDMJ}E5NFM{ZG&C9m`Gn;?BAEgR;2(P!3g(TvJ z%`Q2*ciVLbQPJb-&((X2>@=eT+@T(h2WcW8`KzpCGE?A~r*+6D0#!1}YH-86Jg;=P zOUB{(8r9@T$mMu<4og8R<$l_rXumMj;+hg0yOk?>Gj7sUREV_P{E(HwakkbbB14|$ zdMXdxpEiX{+dYCOH&zF-;biuz>}oK0x(hMh-@P^bNE(w-18uNyB_ya0(`KW=P@s>325v7M!3@k?d=7F0)f79;3wOAc0Q>t z89H-iS6n!$E(s|rdJnCzgE8c0oj)NceYmfr2Mv;VQIXbVS&U263JLrD9?DcYKl`Ef z3br*Di}1;T5&vt)`nqPvsV0Va+$oREHoo|fwS~p2g$44gtCLf+^>u#rSy7Z_k!|!$EwSYtwP_m@g{Jh2V2`Hj$YC)ugN?C9g;$ zb>QK}f&3C`s&C@0_D6>~;+iR(abVzk8<)TQOQlx-k6&a_QIR8V`9$4*+gppAMyu}g z{Xjwjw`<;5QXN0VPe?D@y~(elXbE!2za5O2UZRM_;%v%rcsU`X>23Z`bW{dqzk+`OQ+R$rX(p!A+2>1PNhrMQL z((Rlv$U~gwG^OGCieO1)M){AOgV@RtA{<0|QPEM;S?ka+UWw}nJ$AW^a--edMvVl7 z-~X@xU6whynGOy#-xRjPkLtKOIy#7WcsxK?!7M#=nExJqXg)ou#Zs?zjV7{oKhun2 zIgtR&qk;*Ot+ln}M{g#(YLhLx0kA;NVzJCNT)>4CHJr+=n)3_stwaUs3p(gXv(j`2 zp5MY%BV@7~8Wu)IN*Wp(&ai$UAqgzEd1@BTyh^!MehXWYsuB4M2g|TJX_Ndfl3?d( zdgiz`=U`fs-cmLJS{IgS-rWk+-rGJQE)Aeb#BHtrJLp0JuM*fj0*{v)7)eQm&a}1g z@WLZXOG~q}v%`5`@2$TvBu2-@m8msEipPUb*1yA}#ESi@42366Q(1Xn>qT=d)@Mt! zYjCizvC(BT*`NE{ZlDf$uV9b~+?G|WtU`#c^C0%+Fm=K-g-^B=^eN;@^};xLW)$LC z63KNF{>U5p!E!AJK2!{9-c20@DYY6F9|l%dP%9o|eP+}(mFp@$Jf6|0k9xO@Lw1H` zOp53{2}Khh_3qUGgBeFG!G{Ou+qG4DvYHR&OWm_pG$n)&_|ff8iUz;9-}%A_UMeRUL;kej~~0u|qpEKq|6u@S0!NOuqD*+0m?!diRhtj8{06 zWKKsuK|2%bbe_air|9x`eFhuNeB7By@H|xizDLhRz;of_ak@woQJFC5lI!obqQqjl z8e^8MLD&?3&PAQn)(IFLQe@#kF8j{%bq zr;n1g`B6<;H%R)HNCUIGVwg?3viRpv+6yr)h$a*dw?HeniQOkwY7tmC;=6hr;tSr@ z4igYYmz2A;fzdOGchl0Yr3&I5Q25L6xlB9k_=lNtPW`f&<|=J1ME(+Gb(L^0@BMmG zG})5ushBhzlC+{qLD$j61_c{z74dt3>F{`)iz_F!b+UMQ)bq3DfcVP0iBBchF^6)R zvWJM&ZXB`k(}wjW6nSr0xGa9q1?>CCV8!-EIN-Mt`IOs4>u3rSt^Io`Km?tr>pkM2 z%v_2@cTiRE>ls(ry>G|PFy4O+ZaQ+Ep0h&VG#GLPGL(hfjG)mnjG9GH(F*JQ zauu+@mAq1rJj3F+=O>yJE4pF**rzI4!6vZv18+!!LKqm3oQF0JKt^B7&ya5;ouZ~`{|BD${j=+Tf-3Amle@`9?u0md`kO5 zo#@Ywge}81@uYjjX@KYo#;aT z^$x-;z5Eq+g7Aa`O5k>?@ztF76KiwUE(~2HEImBBt#ATv$iW}H@OS?_+y4##&>H;M z9YOBv8lL?arnMWJTbkYpc!t2h5>Q+k4D_OI55w|Oe6JMrLR4AaqC!Bv!bFnzG%RFG zWziZ(G1ATMkoy(F3oaL#KwD}synHhswi8-9ZR8iBm_{}vU?T-oIQb_+0a}uR7u;Q! z#z5#VhjnsMm)ve#0U7i(+IDjQ*ta1)Xb@|B|Bhf#vrf4iV^0wP#HSE0Ow!v4+Wk-- zM)WBnp}hvV*lT_?ih5n5ymAx-P>=GCK$ag)8J6p#>fk}(ey=1#;U-d~)2eSX5^@99 zz?$WGD9`sBvR-HvCip5m9jaudn^KhDMekU2HJrj8`41)cdfbDAEm0AEqAJ_F{Bco^ z>@G+vrczixpb=|p#|zzbZA4p@X{=cQ4XRjRb-c^Z?wV!fIAiae4LeiJD&Qz zc-G~S3uplHaKXLTlcFU@2@e(%Jd94UIDH~ZZi#n`hb+G^{#k*OqMZ;S0RUO58wYZQ zysK6c69(?C*3d z6eTk6j~keBWmFxCMUZ{)Pv>|S;X$97fj&S4i3~G5;H$LU#FPkX%cuHta;(F5Rvw*R zUq!US(r^E*P0hiMFN$+=y|BU%`z+PX$dB}5#m@NO%hLEKxX76XB^%MgwSZF>=RfC; zh6Um1vQ*{v&Ou+*wpsN|&Mvwp5lLn&UeS$t|9=bg)R_IX%K02(`x{;jE`d6i6xP0WS1t&0}tX z$n}$J0Rsk%aDa!ubY;I*0-2hIYgFkXIosTrt6xWQ?$q8Wf^H~JpRU(X z!hf&ZN;`RdN{Z5PsdxuP0k9W^SY=8gKWl_FLvp@5^gM*v4IIvQz(?1teVKAqlrxF8 zwpFv5gGl?W`VCPqOH%##5A8^gPA%f-h~MNurPpWJ9ID}{w5$kGSUWl}MNIa<7UjwG z>)HSvyPDP>?gL=utv?_2@aZ`uNTHA_lp^@U7!d^ED)eJ|S3fPCzbpT)KN_JNp9)A% zeI-ufswiUKtfs?NPOJD00JYw}qOdkQKVLhzX7t|+d7bD%ptO#uJsOoJ>tuLGpHSw4 zC0e?1&Em>yl1j6d_ag0nwC;UvV`42}&{amF|0v1Ts+Yps`)=CRy&gG-f)v7wQsRes z;16|1I!ka7Is1eLw{#!Co}m;+UKIZg?tpoGK@*3pTLvKbs`iB#XJ*^TJjftbp!efk z`?LV*<(IylrrE7RrHkC=Rze8vd6(bZUM2`==z;_?t;CbE4!HJ1Z zKERv(-x=%5O!Fok*jz1$(Ur%eL9-wLqGWOpP}LL;N&VOmfSE^n|2w`cg=8(?BVt%w zzGdQUi2L<@Y;+DssFTr^$A7WEwGXu#+H)W zITA;`Ppfr!!4mDgV?N1M;M%YsdB8XBA`b5LFKgYbYN>>G5{&X#Kh8!Nxa(Np_`UR* z|4a`W2%$ryP|c@vv##B~PU;5~S~QYWJA!4I_Z!-qh(`|;pX=M0U=`z1z_Y(?71fLW z4H@mUv4&j=-?4W(1tj19DyrHV|33_Lv~GlD+zOETE*imiUCWH|8YbF=#Bm{4o8p={QAr@fF#F=6X9+DrDA@W$ zq5jzNC!t_)CR&Yos}`C-3PhC)@yS|J82|8&1UWHVI69F z$yP~1dZVa_7A$H2myj`{F~0*&{=Hy(x!$R%`N+fLsHHiYsIqbH<_hl8S!{(9#W;H@ ztK;T?`w(|@bdG}0;~U2dD_)fUp_=S#%2@x=;D?N)-`BT+Zx?kk$#|AGg zPHWA6OMvT}+*Sb=gHEOFoR-&)o{RqW6c)Si{x9AdwO*;eS>GOqEI8QIsw8|b0sC82 zy}&{V!EY}G;|1>%Trc)e?}G(7FY4HuK6Rgsw;j3xqtFJ9QC8Er7)X+n4NFcd(0E#Z z&~%s?+>w(jKNg!#zVEVsam<8Ak1s5+{#G_aH-(UgPHtk9K{``Q0iPJ2Izj7T$n;w|@N0NyjCooQ-U3y|<1B5(izoWW ze}=OWd8g)6ra*I}i9+0Q9Odml-ERNLyv7%DMdb2^dmmiz`v=*!JJ38^I9OLjGzW`f zTE=%8sV?JDzIj8CYhuiE)fY=4$mWVyO@WH4fSW5DONebs(oW=Om`*WasMawU^}N!) zBN>8`MI!;5Mu{nbWaYO{^_ifM?bg}>aMFohOFWSf^g)>U!T|r0f!A?J^9*j0rk)gj zH`;r(3!(f%1H4e|yO{~zeusea>_1ZQQBvVnvTWH%27dCm+B3}ZR|a_skOLzkrf6&& zVQ2ikgkQ~1az1@fedZH+8-#qsoErU7Fu`ZA1(KMuvu9N_t62i43AFD|X#ln@@el`bfaL zH)_thl{v0V@Q<=Gx#}8xD%4Vbr|)&J(A$TPG~5kes6jjBeqwK$Bu;Caw`l$kXYxLe zQ=mC*kkZLtuP4yXv#P3USP@pDi|k)4i@eZ0t0H5Bo#WM7Q?1vn)xci5bj_j-^Awl> zarHno2l=U={CVYhslHCyM4BR9x~X=hYi{-$xcdQT6V&Ow6k{<&GH|wGEMS2}<%e9%UC!dOy68oW&O2Rd z;@I;2l_+VbjO4*7VChX&wW|sr+*A+xvrjNhCLigVrK!WRo*m4>Kep_M1)QOH%qeU2 zlU=ZWO8X=I9dL9vy*1Y+Bm)-)vG!4Jt`2gCeLNFMsgq6|?*PuwZtoI)>V#t;Bd&@Z zbM5XMCg4j+H;viF%3z@(Q_{&nwoKsr`CLFmMOmg2z}K|jrU={OMs4?qn}0CAWyH!h z7)Y^#c~3J@YC5ZMh!}F9f3UdOaOV)kfiBvu;6wVqD}&dGnb^+beTqg|Rdg~t;~<;! zh1-1kfv3+5nK@3QYO3MOC*LKLov{DXeUG`4?UPj=xDJ)Pglp<+KfBg*ETL{tE3;9e z_u}xfeRkYwX}4>GlO&ny$hy~Fh6QkUIyMcyRTynVR{GP9C@Cw-zzt0kNxzUpTwo!1 ztmG`G=UPCSDVY#A(VS~d$8^>a#t`MG>kquJ286ZEH`kMi{d7u1VZm%S5f5H9gVWSd zD6z=+gA&M_8h4M^bEoAG1;~>ibZ!$<&}gay`m~`~&Y%p`kNWk{Fa7JFG+c`wKfCBP zUpE8u@{^3jB});MaMxsQ-}blIfpC2e`g-JfjL=^x5A$kzf;ZE#2V*15jK>YmLk}7_ zfL+f;v&-45gX3;E%Hzu&@u#EzJ8P3>BWQYO6VcT49%yhmn;lJM^mzz%mK@-tq->Ly z_9)6&mjy!Sbf5PBnCe1S*tz(m8Wfb3Exi!r7Q}$tSU$Ud5+r*57j=`2Dag1~uJfb^ zU75_|i02C<5==zY`oY_JZ=MDfSi zhny)Eq&~a;Mr>q^4ouHt%cR`bw0ezgjV{&u_sfO0@+5Nja4~*UM4mQg%++ zC$+9#Hv)k?cc4A%Ahc|`DGR1_l^23UDc0?|bZaW;`m2a_#}r07)iE*uA(3XjMuHHM z(R9z%u5}9U3>1(jujh0$iv^sh|K+l#5sR*rE&J=RBqUkl}UGxT4&BzGMOwLz+q!Bg7 zYU!ZyX-Pteowy;_R%7KwfjT#c_SEgSKs)yhn4xNQo1a6pbeSlG!iN|nUiqS0xJR2N zR$Bzq>$j8Vc+?v_kz)+u0?H}g!iXAKcy$GL zRJHPXC3^t|f&921FYVe}e||frU4U5Or^fzk+2+6U(WzEEb+;#q$<(thYz%7sVoOk( zJT}umJG1}@A@p%InC zrCO`)e`etQL!!!5X&b`OI9mfxo4ZKmT!ApDZEv{vn54&ZU0I3jnY@Y>?eaD3GU3BS zv;0@;+{W|<{m} zMYxG4_paf75~4h@Yq*L(=viEgKXRp9{GXbP!WsSQuSl(Yykl)VN&W6Stw`hckNkKV z;a8QIw*UaWmpGCYp%dnB=Q_QK#2fPV^`~Hnp!JP(A~d!_GI?-et<%7%#gQU74VHoZEt znV?$%GZhsTs4|j}knr&E{Cf+U+vd&83bYy1Qs;M7|4AZ$vuYf{idy~*@^*-be(dZ+>Ci;It7z8H&9KWm0Jp`fShKs2RNo{UDL!#5k7 zQ!wL&I9D7*?c~#b`y7>SA&QSdJ9s?hg5OP3Q!`cIsXjmbwx-tE!nSSu@Q}|lG;kpI zR+=q;xTdP+acQB=P4MKv_{gd7CAz%$jPXt9jLA!_uXD>!V zI%4)-j-UZYCSq|3%We?7^L{!BU#O-8u#MO^SHW8naINR{az03auMIFe?#fW-cc4~q zOCYC_)Yh#raej#M;mJB9=oE`Ag6>H1Jjk3h%O0XvSR1KQdW3_oe4%glGHd=(b?fod zxHBSoAtET&Nw>Tq^K349Fb?`yfz7uM>8w{wFLaj;xzDUB5JFxlnJv?AAIdZvE|~ek z^k(y~t?MUmo$}(7AZ%Dbrsb%_buKa~^#$YI3r0}zf61P3lGgse)}~PztTNh|4W7|e zp6#@t0g2MQ3YA}73pOi+|7iMxqTURU0Lg+dhM>7|b6Q}Rv`ru?=7!c_U`csjj$W-4 z+`zKxH$uIe^&?;m^mNsNQ+a2!3$iq6KDXa|1a5}qmF5l#b;{kv-d$yf7i0y-lW)q^ zLIOF|$Y@MU@=Q>`7b4~5aT1O`(nrYo;eR$3UGGgzyKcCCg~q(={@IBDiplQdOfT0H zIHVxj16K8_aT&4^olJNI+m`x63&Uynn#Y2e*iG&ss zN*l{HKAi939zG?WpTjpe9nb-0R`e%Y*7w6~ZGXV)16Xeu9~|7BElqzMw5(kT#ioR6 zzrU#S>O4Iy+vSt zzqz^L4j)Sw0tthoYSS@q<2pX>VNiv#5c|3L`r?7Zgw4TDIF(c_F-QMF@u7b8k(am0 zd?>ycly)yO#mZe=EFa^h4=qQtLE5fC3LJXlrE-A^gRVf(UTL+hoLT^vFLZFo#nnA< zexdR9K|8yV&AVkKmG5L{$Gq*ux~cYNo6lwOiNmxrYjjl3;0@^2XL9o)^=4c&e5`j8Z&s$KZyT$WkUwEP6>(d_d>INBJR z8sD6VWhdN>`RNY%_h8Zw-rX-RXIF|!6Le~{o?aO3Dd=|;G^nt!bEhlKU?|eCVxUot za2I01(1>x|FaL)N5DrkAiAhMt`g)&j8QX`t_Th^Ue?%g2@pEojF@d2fI*;r``3cX)jw)fvTlR(n!up4 z$GN@FR7;DUOzD65r2oIT5R9UKaUpPRJlcv?-=AHZVcykU``q`_{UV)Ut!#X3EFi4?PfJ;K?;ZUP>h*MLum1p9gF6Onri{+ty%%O@7b1Dc zjcQ`knGHftBYHxG3JT_LuEuJ^!+WuREG#bSHh&-a^5fr*H6YDJwU!4T(E0rQ%wdTn z$bzR6iknxMN2NzgR8cwy-sIWw!CZpZem}Pc;7|vZp}z^*Fr=ZOP5gDA*izk; z^!v9i4+|A6mZDEi8*L|~w|^+ap4OrY1$B<^E?~T__RJbs%yrFuthC=D0h#p~dc*mp#Q)r<23C zzX(3BFr``Tw5te=``xyduW3DPF1DpS4h`<9Er!>h93N^sx{f3iw`uP;jYHCF!)daQ z8fyD~7CxSmIVlUJ|3y)NW0pQP8+ z8D|IJ5YCnxS7w~gJa-y#T7AU6$_h=-^74dT)@+a)ZGQ5wJQ@fK%eAq|y4n*uc=OH( z`V6Y}hmK>dMbgiwD@Qdogj~)=L8?nSD$eV>BgA3K9-G~_yStYa6&SO#F;7EGI*)^k zi@ggEJ73uic8C8o@fgQ+ittM4F6%U;N-}D)BsTQyYH=T;83nWf#PZ3Ea^F zo_8ysX?R}>^V8VMBy@Ci6vp@YsR`eOwzQHzt)`5P;eZw~h)m^c5Wb;9bai!Om#$xo zwl2W_0HK=C`cazJhfdhgUOhW;rq=1=uKgFiTR2OMj7~c6Kr`)k&^TkaB??0cAEPw* zm43Z?)FX9^zRykOW`FiOaRKl7)(B{|x24Kxa+=aYA7M1k$#v&ld;z0amso z|6u`4e>{+n=3Gj+CZ@jwy)FM~;na~|=O;Wn{eKag9?MBRr>ARaQOl=2_uXys!@u06 zwn5X!Gp=}T_w#|U3Rpg~vi!lS229xMoyea2TOUO&>wpH&dA4xH9}z^aUIEj!3)wC& zl=}936{%HUX2yQ3_ZD*TU;x_6-mbmr(lV{Fct39s52uC2?v5;xU{XP}H##mze1F5o z1MgtJ!@^F$(uuaM1l+zR@#u~frW-(6djLQNP5NioZ*3_ zEAZU6ZD_01sCak~7$fI52A6t{m5o5g!7K$WMsb;nhHn7f;bVE+TapQztZgcwpstmu z9q)NFJ5$c+73anHL~Q#irZzx=Gy{?w#7Prpo2NEmiho>BG_ibPLYlx3T_zoO{zG!P z?8a)_HED3A>T+76)2MiHGk3ST_{l(6oMjN>=iT3=CJbCZy7+F`EE4Md4&o53ybq69qi#q;l~) zmf|9!v$C?lsX`jJ{U*p!SUf+{Z{7z?E-xR06PD%W-v({RBVSL~+Q8iIH)_EJtiF@{ zMe=@VXgphUp3zRQK{hql-Zh_DHrHy7ug;kzB`437dpwb9JvY7to^1ch8^Q~CW%r$T zhj2{$=CF3$2gK1K%x79;UX+@~Rc1S)EHmrR{4tnp#ldA~esW5(lNnR89>Ve%?5X|S zd2=>%eiQ_v6Tb#1`Opl-emOj~XIFFd<*+GUln-vE)l_V|UMg7MM0W~0H?=!W^g$@q z$ThrB95v8fR1^MM+L{d%Bc>V!1qjM2FbF3$HdZ9x_z274H#T^3NJ>f)`|w};#_G|w z35IfeH~t$TxlBl77Md_qwoj|u5EsbLpUnO0hxhkaJ~1J6$UQ~j<5}{G0wGvAQW=F)7rfhTDbbQw6LgsUfd1W}y(VvORpLj{UHrQA3E3bxZSoYDz6)sO8 zJk_+OC&Vk7#z-?(G00N3{1$KOxU=lImPjA1)xLdt{D%X{4kclYfLsZ#`=Gz|3|$Kg zs9);G_AB8Sfi%cZzuzkP_gOK^*+Wixh0iW8_iTjYl6CWhZTs>wt%nmKv1lDga85-~ zm98t1QXddsAgletjRxx{tAf`RKJGM;8NiUj}j~2?cNWMT2pF zcf)0Cd$e1-FZ!Gupu~EGx$%Jig>uNm@3`{+PfX}S29ZbN9UWaUcpu_%{C!gNGPF5o zir&YRFjK5X%+>}Lg4t4*l^8)w8{v^g7`DU5|yy#K{hq`NO)h0Ogy!F1ttBV#WPMjg>7 z!wlmZ@Djb59aqlQIx7}JL=f_mATG+oKf)r0ec$`qYyzHY)f`7yVO$4Q?9bi2<|r@# z2v+|kl14<0oJ-mvm9a1@se%FkS6?^j&D&hbbBJ0JPJc6_BGH6V?gia(X zDSH&trYhKICg^}=>WfRm*WHt{&VyvrpXnVq_t6fgXb!&8SC+(?^M4524(QuHaQGzC zz>~dC@0=S)yVRpr>YK-0+_`sCk0Bj z?bxPtnJ}V%*`6tc%{u+g1UO-{zl>&RU%;J$B5bd|$}dTanl)amM}1{i2z<5KLFGL3 zT(7OrVRhnMGS-OAvs0kz!uX=Z8QN-(DgGLr-Pz# z3IX3`3}O1!%;ajL|2I&D*wt6%3=zG7SD$S+V6Q*}7%zy+7r7p#?Sw^J7UFd(JN&`| z1H`#GSVTF+06V15&Wh+-DL$H9N}q#gOW%*A2VBB7pxkI+eW0KqgoD4xu(mf4?ZgvL zg_$s5s;;$AgaQi8q@$-JB9^if@7xQCi^`hJZgUDWP#~o07DE%O8Qa2!;lES!w|*kN zp~zJhiS3_)aJ+oqM`x~6XVOnPXQs)fhUp6?JVy)vkj0P$ZHiDu+zo$48+U^uM22Zoi}UAh#&NN-Yj)c#&7#}|V|;kghb2{ zZX4!bTp^I^qKdSE+EGB^S>OkfnzAwnk~Ps?lkxen0?$d3f?st|*Yci17%O*ddeO>hLuS zwP-f>$>3Kr*|+)=bdjJdNP|GD12WP$1o`WurTIyH9|&Mck?;}-avQ#H&Z68 zM)5^;&v1aU&>OXN`p@5tJbMTq_JpZwYQu*Qr`?`H=6Q#tREFwJKXMj7H^8dGDP<}` z1@a})&WT17Rl}=EL}4d;;oCuG_fx_8&PT@Vr_jlMt-P*mNQ~*!`STv>|L}bHS^M`` zk`jZ_){62S)WLTD^dKp+Ie`CB3Q7h_k_W?IBCgddD9aj~CqZ|5<@UBaXb1Itz6!rgkQT0jyDrqYUGb^wgHs6U0KMjw5op zW}iMnORSbUl%@;$qS`h2IaG!7mF(;Xw(9n--cgjPUgQzOxd-SwTF7DvZLx^+`>>tB4t2KdIPc!sPH&0G~01VX1F`(lt*;$ zGXP-wGifxr`tpRy?%;xQi#l%#!s-uP&^#RFKp~eZYI7UjNQfQvF*J8@`aWm|#0fvq z%Qw}kwJxUGzhURt>~po1kq$`2pSKrg`FFoq#I{dJM1y;@&>Lr?io_rD)b)=pF;yD+ zZO1<#!Uhgk{2PP$?F3>l^Z(pv{@qG0r;JMI3Z&%)Wk5(RBhxtfy8>x*)?P%2App!5 z+dl+JZRb)};R@bdI1GHS@W;CNmtVtQFJJcm_%$&1oYU7xq&CgN=p}{rSYad&SMzFM zqd{lJ2Dn{1va=%mKna8a+9`-lFC!#ER)3TIyv=14fdFhOkUUu1Kpkj8DlQlO+t&@A zR!c88&jDVLy(_qTv?G@KDg_zAbPdt-%3lSgUc{Zfj#NSa?*BADAa8pz8GN4=nn(S& z%|c(avq&gpaMyZNJt$cx8w6kgFVV~-bkdtH-ylS;Qk?y03@EUUf)Qy`X{l9#PmBNZ zH#4Oqzdjv@YNJpDaxfa6R$t(`*X|^!mSMgl%CVAXnNi{Z0O(`W)79)T9E!4-VEz%k zSN%M(drQvHJ+L5mvrg)`E1Clns31bp`jhV@qsYlwe1|x2l3Dn&_Uk`p7tX1{tz;Ay zS5@-k83xlH#!|5JDA+&-C6f&?e(MS`QS>pw)X~DIY83^8yEBR2p1|?9Uy&o~$G-DC z!4d2B2k5TyVmJXTl7?K+u8HR>@X!8+xOByE`rN)Zy#6Y=eMP#mF(|Ht`Xz1Sl!^z0 z;EV24Rm}c~EQngW`PXo6k=~e9(y0=y8m#zLP3W6G1CTo{Rq1FXsiF8w1`#Bs(W7}Uci9!GSFjL zqSM%bo~vcmW&;{OfCL_r0m%r1rjQZAQQr&}?Zsf!$TZ~E!&{+U z=ns9xDP?@>`31jxcgn&DoNsv!Bm$5zN~(Z+h)1!LR+OowIdElD zMUqg_`GE<&0BJ*f+L1`!G4#H-+h0XFF`LI^i=onfi-5%JjF6z#{wkI97HJUo@;Zo= z*S`hru(>n5qLR$&7?P277y~vo)uuvueXIu!w0PJxmzTQiKgCXzmL%(4sP=FHl7$Vf z$qrEXoO=Cy9m#b#+fM*`+VyZR@*fU3ZUQ6i@*9JF^g*VYwI=? zmBWoH3o?NEF(m3(LwH^tol~{DNQ{*z@PpxK$w%KOzMNx)FPzl$1-2ALXH3vNdCu6J z;$L}WxuE_K(szFkqCZoD^CLm(%6M)-y!?$bI{q8NZy#Vc4QM#aUuG-(TbK~Roi9*PDi-l{M)%lJ4QH$IL~xhmRX%d$ zeq%+fPg&p*R>j1R{GWmW2CALQzT>&&U9ny)Q$w#@{Ge~( z_+RYDv$m0P=7f1g@4G{W4iB0TCD}#P4Ez~j9sbmOp;|Qv_&q0fEud)5Y7jumRJ0av z;vk{wN#GlWwbmK`)Tl|8@zcSRzY$rjy9Z##>tY^@!K$hn4K0zoA~H-dgI|9|$;?$O zWKR=PLB%WYTkr^L+>S_o4Bp0n49zTjN-ZnQHYdUq7g2SR{k{lATpskB3*DG)(vEMM z^4BbButso6i{(qp?;KNfe-zx4>Z8t zrZW5mHy9*H#0~8hfRp+JyZipKSqUOBO{vK z?Z8R3WPd!Sr=H<p_5DpC^*0sPD@llx7>A~}mBEa{K)C44JuG~c$7or5Jb8cGL~ zX}Isf6B5W!)l`t17^$K6Xj@j#lXN7xwS|Z9Gz|T4?XQm0_-Nt4ufqfN zyK1XRA2*T>7+;By(P-IQ#H1$^7=|!#$E1>fYWQFbIof?$nU;zI0LrSykv^gu!e=aj z+h`p6Lk}qqQ3Zs6uM7s36OPIb+Hm|&wO>kC=0HX$+ov9QmSVcF80i308~a(e8-eNO zbTMH$sdti1e=-MIMFpiqXCE%mfXLhr!8kZEPHeJRlmXp3VkeFAYZzexVz@~^%>9uA z0pV{_7B*@-w>D*Fs-ju3@lZO66!g7rR6*o<_siZypVep^%K_$S$S{_DSrqw%xY)I(-V9FB<1nf%L~s zO;}&jv0sS#R0a?kT{qf%vV^sIibEh)PKTwpUwPI}LX^emtHJ}VlOQ29Q4oHxjGr_QQj~-( zC`nYRZ?Igp0}@5h_8Gn=#lrdq`b}HCuTJ?{^fpj{LLJ8J5V!(+9Pn*DrLjf(cCJm` z`_IQolIO~j>7gy1Q^?Wgvf`Y{WTUKuD{^Yne09R{m#?&7gk}rrjDltoK8`5{76%XM zkE^S(HM)SXFf38hv-Th67Z=}M&UEp`142VXPmYfl7Z<0oaNmW3&a;F>*2`XAw|JK; zF6dpg`oQU=3sFG08Kwn>sblGFQegB+$ZdDlraBZP14empJ7iu+C)$dMVp_QQ5 z^ZkWlVV*%u$5VAyr62XSEFbd-V_tol; z6ZJ=d^t8VcAC+kqLqpyRy)AD)s`tKsH&hLC6^62h6@>Wy37OqliC`?7wrR)%*MvCTPbaJsV_9Xr$ zNDjqt7Z&4NZ@tfS!_z6vq*$KON-s|)yg&2g|Al;Ll)oc#jWmtCibnVDE(F+r*&2MY zibO-t7u|&fC=nOQ>LS7}+J%GAx=(te>-~2ofdb3xj}YBgrg&Mmd^sqUohLe+WTCDF z*gD@OeLn2)<@^+uu*|(Ls<;_F2 z@eeYBil73BwRpQoG!LeA21g_s2_9Gs z-W^(^O*F>k&zM$~U3p315Zn)U5cMIIi7fFsXL>RBujP4~bFmXVbB@^^VrQqn-Gcn( zd!;+tJy>!D2F1EBEgr!R!SBWSgoq3X-vzCE8;E@In}S@GqMq}juvweI??mRSC1_rk zOT>S_YG}At7+K~8ZEPBiXw|~+L4+qcBxk#!mArm?D%vaUN~DV-mxY86bJaz=)3_McLg~c3d@Byiv~r;DGgGnNT+!?7C$_HV#tNhj&Bni9%n3 z3Q*QbC4vuMApvNY?MUJU1GeK%nsWc2y7&_QmClu-sJxRC(6y-X4DvDxWvic84CP?6 z_LdQp#D-V34DlG3`^2VSji>!%Ott~upDnEw{FXK0y~J;A(VIjNA}d)us@%YG8A%+m zS8MBsiR(aFtu=f56UHf}c`%e>60~m4e2V90Z1p@yJ|Fin@uB;}Y+&fJVaufVlHC5Z zFwcgqtfu#JIW$7-tzP!*db+%LFm-~%u*kEIh{?m_Q(t?NBKR@`?%F<$a5X=_oI$o< zY-xKujeuNAi_6(#+uO@-nNApZsO+rs%bg*xI_xJH*jYfwEP;Kqy+6TYW0RjJ?<2c& zM}UtHsts`D$_VoPTUwVw4)-*h&B0q-5oF(V)ov!;|9Ig$6EN-ect9)dV61(eB8?O znb{n-vOf!1nwx8Av{vh*Rd!$Mfzo`lXy*Oisuwo54gU<2-(B3lL)u`rF=-l4-?v z(&n(JO|-Xt>0h%Q%;!aM9Mpb|i*+g8`Ji8$qZ$&^(#vdDzXHH4>5D!QE6ujC-w@

;iM$1U>ID0D#8(@qmD?*agU_VW$*)EuWa^{T!~IkYEZa zYBT| z&sLGkg>kh|fo5`O5(}}%g=1}|e%k1*)BAo04luiKHCX&%4pR#QpbbTgXr!}Yq%Ks$ z#&t%W8}dGYwm%RM5OsBRpn%l^+C4P+yM1}}yxyLm`{%z|P%>q6kXR*Ed${R%7suPs z&;V)>$|@>hIXF#t$)~>Y@$O<>cwUQ}S4MN?V;xj;Y#yPCy zzDGI{0=ScAD2oKMAe#O004MIh9?Jzk-vtMBL{B`FKcONkMS6r*8*wG0ICt>opq7Zi z1`5{4vCWB_q2X?JPz^KDBsrJ_x;={@cSQKz_3t5dLm9i0Gy;>Vo?0$A9@veQq1>sFWmS=3q>0Ybi9YtL4|(Y}nr47akXD*oN> z@j^9z&B(}zPK#@0Sy>+G5ldA;GO>4Xef?UN$PdtVTsD<=rlUiI1``}5&CqW5)i%+y^`*u?F|A-m_zy)1)=?YN<>?Td{!-5xGPW&ppGJch|Ez)4M`zRx?I6>Y(($yWPCIg zjK|$;xjZ?TGQF13e|%@Er7<%%x8s$tG&>s~lX|nF@+;7P4>hFr=8(_jFRX7-k(K3< zOKj)ClwK<9H%?%kTV8E$y?*V~B|(jb7ZhpXfUQ1)@9+3{7abg4M|WUpg)}u<1x8Yi{ABXBL*X) zUHa#iO4aVb%fsV-u&Js_@h1-h1H+(;L~d>_cQ^q70S-2{1A?Y<(0;( zgakcZr`_Qt0qVel-?`+U!$DgwBuO#s|7!6#XthjVEG>OrA2-#qhRfkFL8}%PD$diZ zf-zA)7hYb*o#EsNgDKGR)ihLe;?J{|Chs>Bo9LlGgM-K4h6Gg*hlbe7bzinOx|)G@ zW>gPBG5J4+3qJM^CcC?!(FHcsskZ1t`WyFHdYk#{v+TET<^u!LT(++eBFZvag(W51 z4j!j&@Ss5k{^V|69+i^P)Sh8fbTU^2hX2z2g~Xwg!sYo!7igzHl)z-WSR<*Yr}wi0 zRf$T*V0*YPL1@*gZDF~;#a~Zkqb{5mz=!gkpN{*_M(*T`Cp`D-3XFy;Z z{{GRQ&&7OHGKpEweO2Gmv9Le9-psKoP3iI#SNx|vfBc%v=98Z8QhvKPxBG?#@bdCf zs4+^~uGCQNUgLNZHl5APVdtc_0svB1OXKm)*sag&FcPj#O>N&tOt4lVC_cVUbYfz1 z@&T>9xcKdID72`k3QUzXvN;6+YiowRv2v~ETe^3llz=7+3wG<#LGnXz4+JtYtL>R> zO-(OEd-mrU)DOy|>1_yrl@-6u3a^Gvs-<;nQ=8PF{ccCHzP|oB=m#p`5gJQ_NhB`* zcD3s9F)0oS8Cd}2XzHw&Y?d29=D-!X^L6->>8eeGEQiv!r6F*z`RlZE90z0oJ)hS+ zYusLU<;%SvU-eeGj#-rXW?K^FK2ZF;Grh?^9E6KY-nE4UPzfSp>g9G-_jonAZ{L~* zd1p9sw!zq-z`*ROZ$@)OQZ+R-wYAPp&MIwF|K0`xA0J{eIZeOcojcr}E51H;q1JI< zsL|eysD3=&-yffywXtx=e7rcVUv+Rlpp2=U^OQ;Co=}&!Ra8-_%cXqV9odpkV|RWV zSaf&R)!n8mZz&ws)zs1ge_h#Bi&6zAOq_HJi$@Ky+62av!oq>8i^iOMuEOTb@bKBB zB!0)MIRXMYP`m$?bzhM9PX*ra@UW?ER5W-$nVn)|X4A^ikhHWsO6IaXJUBq6IYtf1 zC{J#Ct=bq0Mu}F6b8OzYeGm4GUBh`rUHtb=zF#5>A`qLtF~#y0Wu};JEUEloV9(^Y ze)X0TmAY}bf$!CwP`AH&l_l&^@z$|TStSWru>e(d%lU&=>ZGv|zsiH~+gsJ>mdimp zTgdjiHDck3KZD56>i=o4*GQg%SNdOgUd{r_N1VNage+%|eNI=nXq^SAYgEhl9X2|9 z#e#-?9(DqAa~dG5yX)*?UQ_py1WxELW$cfq{4N{@Q%6el_Gn zsau+KJpI7f*qJ@|6P6ozAieq4lxnBF|&#eq)}ainrGn(SPdMo?f5MIOv-`kY%qC0g(wf4-b2J za40h6V2@u9k55j*`c_q4H*ha4)sOky>3q^oVVEJ0mywYPCp18{HhEwZPE`++`YDVyCKINvuFE`y0#Z}@A@Z28cf81tbAkt zxs7{cm?1X*zO7VnjC8ZS*z4%+-K}5q_E^^D|9U5CeqfytpKKozPlViI5&$QHgOUt%Qdpb?gJ{r+)Cp#_2wvIhK(IqK#ASW%W z-T5o3UVTlNO-&qQ3A=}CC**)1~lEh zq_=~_MTX2ANL?`1gi}CXVqUTpDxby< z3mEgreAkuhWm$%1qb-$~8I0ohUK+-J&ZBrv8LbI^q63C!B^v)iC|cKVXVCk9Oe<=Ff{E$u0_I*BvCjU7mkQ5t`4b1kw>9Rrl|`r-8x>6#=b$ z@#Yqc?WJxNS!EkcZ}Vc3C_=fJ>|U`Zyq=NBA0aH8t*b0G=?z7a-+xoD>=0@2>yO-h zL?oy8Sd>HLYIuhyZ{Urr@|~l@RCjM}+UbXsSxARKmUsY%@x(`Ov6ekJN##8~wABv8 zrpjM7R#~A&d}AXP{b&tA(cwXqJ2%F!g}!rf$gIjxgQ&6zv2*>CFOlrTYx4$3Qz%`e zFOkyZT+l$WPkr+FIzrjO&f<#D$}ZsPhl6L@%^yNLG__eKw zZx^KRN!+h_oEO))kdX&U^Fy@h=#)tGWbAu8!e3&>?+Y zDU=3Bty}O}*EbIDIqg%c>{`vXgx}l>>G@+5m5sI{AEi0A5qvtt>FMj!$_5dH6+M3{ zDyMf&s%WR)DeDu>e{;t0I`d-+Z!X)lpb>OZ7)Ht^HlI$|dFa?3_7UYKl>7QMDjdbb zf?|jm0OyC%(b0{LZ^|AD)R^)BG74>^GC0Fn6EM9qYZ1)AG^xV6aL6bY;CsApVYuM^5eg92 zyWE?<&rt+~5$6`s9qaQr`wf>%;R*O&A@BfU4Jpx!$%?L}2JR5tEkd}gsRP<(!1tpZ zqPlrda*{r$97O&%BrxIC@_W$zIXoLC#}@28z2RU^RawFz=(GU~Z|F;+vq0j^D8g^) zBFc=)C85BE;!?&+F8aXN1tUkejN5ZukC38Zeqn7=;7yPu2KYv$qI|FA>XVVR^T>}3 z#RP=Eh6HQV&Uc7Aqm8OUqz`-q1ez7#mv!hB0vT%s1c>; zx7ST*z~l15L*|rJ(RoD0AT*0F`@p-mz-IOAm1TVRk;V;~=;(Xb;^!z9F+j@mDTpo@ z-l?|lD<2%?~5F3pv$gLFbT@FU3 zO`uCEI%Q@ z?WV-N7VZoSuPVLk6l`p3ui#;OHw47S$D_O&lY{g3cp(~PgMz(93M)O6oT-X5cT3v= z{M`&ipR`&86N5ffDbk=6Wn>f{VJt}$M_Mc~mBIdAbaM$D>@N^qGiitO;-xaP{6Q5N zJzqNz9>92xkIm9hXiFGf!_m;_Fi3G&@0|i%xMwk-faN=xUnSfVQ;G20dZcu8=w}pw zZ@koi25#fnuS5gC1#U#SFC2xdk?89mq!@*$TGiz9niZcOBeYm2H<$XgZPZTtFh7-( zl$3JQd6HF2=6=!iBD_E$f~h*>-Ps>c{3g%|$P0@1hdc^56C`bFn%&^4%B z$@!-0U2`KW0669TW+#Vt6X{HQ*$m|Arq`rW+Lf;{J0mr*Y_N=2SJA`GU=MYYiJzSb zt{3hM96!B~8DOL{ZXvCk*RwjN-hU*G9C#Jwr_eV*4c%eYz!Fp6+HM@LF#agDZWbrQ zIh{zDC6*?-60OLc@bgD6ya6MOV@YXnfSljF->B|18mV$fc`Fu+%MVM1=$hs+WNyEh zxq&A4%S}%110sj031!#rf+Hpl6w&~#Z zSLhJB6rr0H&5&1%WzoS6&kJr!@aMwHeHSd)A@?h~+RmkX6y2Fezqqrf=VrP!I#Deb zB6;guQfvMPt6rJIUXBIa6&?)<*nhO7e>LW442|C~U#iO$pm0=s$OBEvac- z#xQM@@N$_>zwgZ`_lB7P27m~fVssi=lL+Y}Jo^-Q&F{J~$2;1;d(-h*NHU5V;!x>k zpOX0+(#@`|s6rmLHE`?t8M}x<#xy@fp^e#xu?Q-7gtNmz)3Z_yXS^{JV$USdYcl`> zAXz>cC_MPH8F~;kWWJ$!S3w5oCz>R+keJk&M&HpY3hXB$cWmlj8Q~p3yg{e7Czjp| z-$sm+{@!+itzzVFhkydWG3_uI0+<^174%zfj(6wH&A=By*Vn`aGOESMEnmpyZloAz zuwcRBFpQEebYXa6J;4}C+C$8%EV{&acMTKec1^Bu766#e^CuL8y5-Jp?FH}xMbP}C zbfnNt*7DFX%}o+BcZa(|(Re;CSEgTc6ILjgXCK0MtRhJY#C#ka#e}u*|H+v4S#lhW z6x$}slvNzZ;Zsok224j8pJFT*#AuW7Tq78aq3+(u%Uq?XD7F!m{kKh-Cx=xmk?%9w z#^(%xMye>(+2ENbWgENcdC)RO#j1MCu9?SIOJCGgP&`!*AVY+5z>XRk29@FBP z^SsPfI|tP$9aPujGIEEYwI>QMA4h#=alm85Nsau6bbu zNjtNHjq%s8`E*}wSfp{e+OSlZ;z+;CKWVGlBY_}d04ojis*NPV+-IG3n?n(ytd>}m zn>a`@)~M94#n=jCgd2;uh;p@Yyp}(TRwXxls9J&=x=xt}%F8b#_OPS{Z z^Vmx)#qJZ_j@9+f#2khEowTVjwI}}=28-!;$G`~)F-LguufAH>I_jY$@HNc8WkKy+*Qh zZtLyy_MjnLJkVxRQdJn7BirDQHVO_KF9^u9H0qG7rMiiWl$@fpg4B7B=oVLE=3YB? z53Dr#SgvOemycuy$))O)(%X_zQtDnm-S!7I;dGwQ1lUx?6;kU(750A)|KF_x^gZZj zvcXt~*eA~hxM4#t;z0@OI5jmc#?NouT8pAsdY597D=Dn6-a#H@j4(PjgIY@`JH!Ov z>RDUTCM|rphc)QGLmJxYsONhr7W|t)_@({d2!xwo`g5^eP8lAUU?9bpy+}i<8oS24 zGU0-@63aZ)bn;`_D^i6EgbBlXomNurEP^lnX5;QHsyfgf469$_8a)QGV=Ss)x6f?9 zvIT#`fiiJ6V9bU5slt-XB4undTB7LR<=3J{(u&m}2o&&x>3Bpr3f=Iu0{2R(%Yey@ zM;yLTL8J=1hu7mGr|m%ezn}qWC~in*_?QG&q}@1{*bFfQ_t{ob2^b0_2iR-~m1uY8 z3the>7@+~Mp`X(@qzdpSBqY$kArz&+h)oQ;xn^qMw6vrm;=%x#!=BuqLGQ}jC@Ki7 zc2U%)HTi8pW3ZorqWk~iA8L_OS~mZtaHlK?DXEq}RN>AhX~(J-o7R42k36V!Jb5R@ z6m^qO_A>MdEGrXs;jdyvfZA?<|E=aay_nv7>d=La_FweKU&xzKL>)I;6Ny(4e9-<# zauLETdl7Jx>80Z+8O4_2`o+R9{w5d{TaQlIQ$mh%OH==y))hr}Ik8}hbZ(8!U$Kn)?o=CCs;HMly8)uN&0*AX1`d9P+K^d%kodSl7al( zQYWb~2KJOe5vRWtjjBS-fCx6@-kxs=GA(r9n2%czHUSfNFH`aB6w}HSf&V4%TGHOs zkQW>%X$4$~0Z^{H*tc|{*tP?sH!}%^HR>Cm1p^xu9L}vEH)Md`fzmIIrXeGo!%$aF zrQnrg=^Ba+G=ebG@bp_LOUlKakq)ydFgf%mX9PFf=AGIO!gQTqi#-V4@dqp`n85t5 z7wPh6k@8~^6t$QOZR{7DwvA6vqzU%W1U>SJZh8`KBKPsge#PdQVyG$u@WH`gaQbI1 zc^UgVRN?Q1A>on$r7&7cCLohd_{59hmyMewz61byss(umE-AS!RVhgXDI#-siPFKE zEl(>3;me6)91ugeC3G_JGT@*gDGO35PF7Vd@gWJRA#MSEjm+6ZG_)|>-zqui)OF;U z!9{Q0hNZku`&WjPd36L?$?>{WM;*@7*m0uVHXVEp-&&G|uH2iz0F$~|+;r-8ybFt< z7}iscZ;W(5CdRIzyA~E2n%(0I-hpr<0ty;AMN9(U_xbN5kfQCZa&Bng2oAQ2lvewY z`_?hN-L|9nGiZLO{_3?j=*VBu;wAxPC1Mg3Es6BM3)-R&oJkU{rU@A9oX8s0MPm8d>5&ZB)Q>$a(_P!>30C$M+0yGBVchZmsdf=BPr<2&^a0*$~Lr2o7Hf zwUJ~Ta&SOltJWxozlFBt~Qvma)PL&%F?A%X<|q$H8XnZleR@X*?a z`f@|AQDLS_#v-&Gt^&)lA`J7a7v6=gOI9vKE&J0*A&5|ZXqZZPM=mMlW_Ieg$~G_J zTYh%cnKIpCy0PVi02J6@k2@6Tf7h|uA`6XAi~@>`l!{XUlnTz?|a$@~A9RF}JU~IDjlWkgTXobC15cJ66TdkFK zltc^#YBJD7iQTI6Yn&N&CJtS7eFr37p`057v%iWu`xb|ztUc^eYjDTf8vBn|?O4kn zjalI;*Li+2G!$++rF0K1_H3nWByS=QejP$eHN+Nory#f$p7%iR8e=5oLy@{U7-Q-_ zXc>%mwvx~PVwP={aj*^QLJr%JYP7@VxzczJ`R$&*J7(F&3333X3vK9YX0U5Z>_&eW zNL@wwW!X#<&=P=bG=7gn@9)<y8r#wmYdm;RsZU>5`{D}{oOKl=+iYpsk&64?)I`7umSwGRDSFeW8q3Pr=_Obdf*+#nSEn323(p;9@NXy3~Q2udQuuXy^!6=k{)q z7z>*+8lRI0WVbfG{zd?z!Z_o!CF=BgGL{%@hsW|NqT~7;4mGUzTv0jH*i_**kcT^{ z7sZHIv?+5eeL$Sbs7wFq>+)eM>8#GC{^Q9(#@+Zy2Hk+WPoU20z~P@tAaSSr>+UG= zh4b2rVPY~(APuh9a14{UkmtwycxC6t#*|`I4pympKjLFJK5ubxg}S=!Kb4(28UmAa znt+DRv-0xsmj?wnM75%_yh-oBxKkS&6^c~v&90fBqVN^i#sASX*4Ob&`vVLtCnu^E zo)t_&xKC6o``0NcDb_li5mo&L_{6yKDPMb}k4%s!HmqQ{CG5WNeCtxt&tx` zPU#M)2z$FSn=8`AYnTdLQzN^@>8|GXB|DlW>f=|{Od2wK0|S+bJa==OC=LxnCVt9M zqu4p?)p_k=X+YqeX#1$OlNnuJCkAR}WMl##9hV0Wft(3|;J~Z#gM=;Jwzq+s)qaVq z3)FjgZmx0Jtv8XTPGv>e*zvojT7t3l+k_&G;_LM&az#bY))utPpV!^jC+B}uC~EXt z@md%$(z&b_baM0U6crWC&CN5{H1mN)^23wTsQN>OkUk=&3&_f-%UG3M?wN0baZs|x=Z{4gMdIF+dddYSliG5_%9HL zv4C=?3F+zYN;N2{bLEqnAi5F_Y@V(L9cK&1PqZ8)0dv#fUR*l{zs#Y@<(X!CjoiZW z!b7desGra42B)?+Ga!W{nv>g!OML;?x3~0%=vD$(8Aq!Va|l0r0~@Y~-DdapaaC&7 z;Vl^&+z63pRxF{_jrY&=XX_L)@3;hOM@Kj*f9`E`bVfC)KIoJ%>q>m9@Qxe}jFg~{ zU^jZC2G=8_st-%`Q zPQ+9&!8B*3Y(ay^C!8p{|9|2q`0y!)X#q8*O#ZieCFX5Fbb*3`f`Nen z0xmQ33&kS`?fC*w&+{W8ObG0FaWjz)2P&%Qu=+VU zH$5%IcS8*91zztZ$CeIdcRqj2Eh1}cwDY~*U-lDo0F?##bjwd5m4dPR%deeQ8ojHw zlwqP9aAK_)8+lz_c&-mOz?FS|X8Z&#;N*;XUv>=Kgg7|gT3Xt_kGx%qw6(usIhO+z z@%E0o_gr_ydx}+TuiUn|xzXcI0SyL10s;p| zM|LY`0Eq_JP`gg0!^909Jj&J5Xu#+26IRKBp%DwXb=Z@1Lig7Ul9@N?R*6}d1 zF{$CTv4F_|y0lqo{l%>Gq2&Gi@^=Gww4nf35zmW;(27M(3}dZN50;;ZZ8_dsvU_iE4Iw z+65pP?(cQ{1Bg3rn(UfF0HCFkKWxpMZr}Oz$jIns1RLVIEhl*s){UX(cj0htWu+zU^N|3D%Be0*oy9~(s5P1EQAq!}VI z9Lp6xzrCc6Ztml3Ke7EM3*e(Mv^}=jU@8Jgzn}*tn=pkI5EFf5{_6Ct(=jl}EFg|* zKbXX@I+=Gp_d*1zsV%RoP!uZoIs?}bi36cC%SBQR*P z+XfuktgWpFhwj_j-Z(gj#Kp1J(W~~a2LZf=&u1+u5&LdIXWGLfj!3{}?%T8^PIy#p zjfdw<-ruJuB|<_6p4Pke)Y^)&vbnOE7;*_na6rU%vxAR;p`zW}ytoI3Uc2)>)z7b$ z$MyXh01_tB+*>_=6M!(_Fs=BZ>x%O8#hz#i>*_ED?EzQBo*v-@3gS^>{76nquQi+m zY|JG6G1NmQ9DvP1Qx>gXaw2_H=q-ftkJDb3cJI;ez~mGqHusVJ{>)dXg#r-@w9C zZH|kwlJ(i7fx)YE{F5_rbBxlV1LQ|n=f}%t&j=5uxcE`r0%fov(3>C)}C0ucj7%#qBD z{|VA;EUUQP9N7EY;S1=W=_@8ABrIVV$aXdfM^q_YuoPn`kL)@mcz6MLwv%^>uGoVK6N~D zEH#4-*Y)m&Ay}{SZPE&eR8JyjA^ciz*XL&Db~X$}*i|CZl6}6lT<7YN`mVn^>!9l- zICFmty3fAK0i206t&C1e+imc;K-Lh-f|BVUGarY$xK>~WyF?DM+l*o0v7j%0^GE1S z{iBre@&0kJ_p0~#8ZaWsPhKVy5viS4)0dJNt&ID^N0`md#%5(x0LseGuka1Wqr)S8 zyQqu%;v5v&(P81}m_G7?2LB%;oO|wIZ1eDNz4Yy={>k@~UsM#*aDvQ?4yORp`l6no zj*gDmS`#e#7x@g{W`N+?UNm53JOFj2^X$tIB=SSd4}t?EDuDY4PiN=n17J#Bozr*t zmX>G6&bFcwnwRbXo`VCxIc;IV;r+Fx-m0^vN)tQ_6Ww^aHKQZC%E(?&Bw%dy1)sj$ zeqA^)C%5Rxcf*rWEZ~1IK8WH=!PQmmCCB(F9r(BwFd#TF39Pipt;4wiHvrKODKNU{e;`UO%l;1#JokS=SNn?yY?pw!^g+Ez*aWW6HUa&!o~)9 zH{9{TIk{$8OGp6Am>g>vV7yw5rOg*3b^zQYSJR6Z)_qI7P49 zaf#GJ+xOe!!i$f6@7}ARO;vBl#11PQ;JXoqMKRKLw5fa2n=Ab;?)clD<;i!Fhuh+t zJ|A5|ORQ>>0su|CKX~OgxRZ6#TU$z_q4M&}P1m2C4a(mvL;KO_r)rMQCYAQIHmvFB z{`}bRA_VPS4>B`11@=#2eL_HkfG8_2Zg}|z6P`?K#sHz1I5^&T?|*irNTJ7rrMUnA z%lMcWE>KI^ef$BygfX{GibH6@i$(Ma`S??LsU-Pbox1{!3be6K)od0VKMIL#F z+P9vg)cEVQT60DgezP8}oCejJV8ceR?sJcX-7Ows(nWHt}0_tPHpp2rNVDel(-A|;%#amhJ zynn`z+8vCZoP0SiEE&--(7B|u#u57>&$cj|s;ZWNnAPNd^B6}dx9(fhpq~zqG5}~q zL)`!0nJLM9DLFX-tD^gvd_Hz|_mf4llfQDu)SZrpR(yN`O1uxBK;I`b^z`-laSVwE zdR#nT=!t#lH1yTg87eAS?qL7r;5@x6DR(p(wVd#ix_l493<gDd;^B;5oR0s;CK{)Y85=&-+U zv>$t#;^nkItrcfBp2ADpz;rM5f)1i8XY{^&{5irMNr~6!Qg<-F2PP)o`fj79MLKA18_6wvLY5^Yu|6ZdP?S zz{C9X-Zca-`~$&z()nCk()7jAj4NngfR7Ew9){7a#g>Cy?%q}JN1y_`s2RQ8da97i zBw7}{QQJQmoTNzOE{kQq!r7864qAr*bhAIOmL|ewODT#=#R0cP(6$v^Kq5FIV9VST4qGTa&JsM^avjBL!&=?47u%_4k_e)!@!LdQN>b6C)N86%kX7r zj))Qhkk*JhnVja_6L%uys+b^^E<)JU@;Dl)fGC>(Drzl@6gnM(a;;lc+Rnu>51Dzw zrbr#VJ)@&FKE|4u-x;%G#l8ni%Q{X zScTUJxv+vlrY*Paa)YR4(CBJ=3R1Shz0tygc9E~J;wmO)LNPa3PAB&l^_pB_jgu5vJY}%ZO}b$hv$X@T~46O$@Xp6^LR$Dc?Ry|T3^Cv zqatX$c1iPcUH847z(@ek2cS+w8JWX#0ZpAw#|!;z2V@=4)FS7$14J~@+h}(HqkzvV zsP_P@>+OZJ^U>&jx%M2x`NrU*r{j$S2Smi%6qnfe(H#)Bw4?=~|G*2t@oHl6Inmfo z-`RNqVmLN4b8}&VBddxy*S3`#*u|6$4DfJ65B5&IF52hpcW;BN&T(ieYj&NS?>0Rd z&vyE)flnz^;OV?mcY0Vm0QM8W^V?@QHs;{N*bEi4w=d@N-u(9`#H^L&H7_4)ypBjh zLjGX?@T*Ug^67Lg9+gd*dHh0+Y0azU`APYvv?=iN zkbP7DdNfe?Dn38?dr@f6>FWJ`Y%G!A*WzVy6$lwi%Tx?B1kT#)tg#z$CGdGNU7~zw zJu3d{f+QJb8Y64@d|$l!Tu~eB8ybsrXac`HfBCuA)k*L+Itp#zbNSfKTXw@no?t+X zJ9%z%(~B&ToAYIGaP^`fWM`>$| zsF-OiuLI%n0SPRD5l(4Zbpj@qny(JOLZUJ}wtJwQv5L!7(!t*X)YH#^09#!A0LX%; zbJdP4KZS#Bq5~~01Y9g|49~m525>HKf+IZcq+>#QWFv}*R03>z%KGFo4_i~Rdzsfp@Zc6BWSXVXSfN4?^R2G zmEHehBpJTptGNGrI%Ie{-Uuk-|QUA!fYL=hx{tKV-_h`U)SSX`zRn+=?%E1Ixv?6%L8PD)Lw2RkhdWXQqpQ>kOGqNKvzWo>bnx4ItXNYHvzg5!Vd6%Hy!=M zXGPLaUFWtV_Uf);Jw5biDnL$zoZp^I;DU1u9Uv$wF3Bt}u(>QUt7bwoC z*KamGU2;oBbyS1cyBz(8I3?2@&Y`t}&x(<={J%ag%;>AD+z%lcGXt28 zbEir>L}5r|uhp2x-M)#Kb&h4Lu?o^?*4nm50&XWNGP0aQSi|FAbh%={vx1x3V|M^F zfb`}LWKNR(5g;2u-R0NNTi3MSOh`<80BC08CEvejLM2Rdj@D=mjI1*jQ!45EEXDEL zOOql%|MeHE3=z$#ouaK@UR|&e@#}=cA+UOM3AmHHW5>^4-Oz-U!4ukO>KqbPHcP7o zOse@2KL`%!{>t~m!RPsHd%Lcl2IB?)U)UD_V>UvLZpbFi&xb53#lFfTS`^2p1;)Ij zh2VZkip<^mRabe;*9vl$p(^>Ee$_kP_NyOgus<ZD6`AJ{ZHCx`g2j z>t7^&7qC}rKgEb{n^TDFX8IhAK$hkq0Yksy8M2IbzC!6XiWKNI8o9>bG~ILHKV+AD z!r$4^2*N}H^FtlnGZ%#!yF>e`yyM6sKB0)s3WtyexZ;5#2=?E|^|aL#67pLYf}X{( z%@uzQBReC~Y>66B;#>8t#z0;uO0f!_(QEY*s2)$&a&*(3J_=EfJRLq-8Z3UVE((F- zqHiWKBzRg=(#99k7?EW4|Be0mbeYj6Nn|Vsz#8VbASJi4T(j3SR2M`siFY?Hu|LPQ zN6^Shmpk6;maEE(fJVu%@yVXQq#;so?VVV{g1TTQ{`}EHb`)*)tQZ-g$t!FT@sGg} z9LmQldBmaYEEQ{}8(8I=ClS=uS5VW7)(Qw95DY$f=_dFah!6`_z$>O3agz?UVF#AV z9M@uR-BkKjbKuYPX0!i(bMLlYSXdYoxd|>kkmr+;mi~tgAO4S})9Qj~2;CP`3o!Tf zR*U?jSO%YQhC}Hp*#E)9PTHUzR{Ua!E)}L=W!J+XKy^$ABrw9#Gb(u@#2Umuzk57R z`qbkBcDtANdi$=GWd`Z80#XH|ENBx-ys3s0iID#wV<)rG4pJfQu9g?72%9O?%e_i( z&dqENfifnfz3YjyoSY}o+QHv4pp7Zybsjfast)4axZpsF859+|pCA3g!MlzHC!489 zFoG=#l5;RZRa)}GAOc_b*4xRgWqPn&8mC*~gMM+}(XEk9x}h#msTxQv5uUa{P=DPI z9M0d7L10_~c-E?0^s)^`+<}wdq+BLlcE^OIPA=vq zRX(ypPIld?)kZQTo?&X-qECgW1OKe0qpddfv^hPOBWMs5L3g#RhB3f_O)F&4`PuO< z(uK9zrGi(aY_gMcrT3KaW7ZIefG*irb&*@b!;IXiL|8SH;d7PY(P6o1O(LUhcX&eu zz?R4qG8C)EK8qrSPKEZRC@)iBn0MFXXl*NdZrSdFr6fOO8*Ir(x3P-YSnitc|on0P%LO zaHWN7&D~pTYKdDe&-giUu7N;`6L|a5w7=YDF+aZ1G6P-*`%s00Ul9mMnSqB-2OJ)>>VFVI1iW93oGP(I6T^r|IBx5NAf_60{*1%W zB-U205eXr0NU)$7NAhsXzIVtvrf+^oto7Evf0ZE?aO6?C-Fo|rS+9ASh42Nih?|XP zB5{6x@euNp=iS@NndzV3WiDrfEhL zWjK&-1S!<@t+*>QoD?v18lTOG-;2>hygl(J&6ek5ttdqg?y~QhW_0Mpj-`)fgXr=u z0XtiOVbpCrk;6{Eq`}YrdO+^8N5|<&B zAmX@O)c-@HMi>f|R1=TlDiQS$f7ZY18W>~c=G(7W&*p3sUc z`V*upR#|s`^P)LOt1Q}#gGgnrkGCYzt4p+EgN7&{v*{zV-7(r~NBZLf0utwwAx2oP zG7fEzCY`tig*2^_4(y6_8NKKmbylg7^(QCnsdESWMwru*Z)#l&XzObJrD&(x;N^Jq zbKk@u;7|M%#g9$%zDax{r1-r_yv+bhlGU*3-g$uR_|bRpc)=1WK-M|6LsRBL3H?tN@OEumpoTpKn# zQ{2@=zzSLG;8VF{kESmkN_v9E6#7kCQIjgG9f^@MyuL|^n^nK1%@^H?*emS3zraoz@Q|7@x zUQDx(g<7@4RK~9hMc4%Kfk%H~Ej0^dtshZVI&zfy$DDUPo!muvJd$HY55pc2Tf}mq zrUC2>gD{2bixX~Y9ckbkMITnbW`Q+Xf+3#vM<6#UPNfJGBq-}nfzL#!^GL*ployf> zga^V2SZ0ycF^Fk?IoTRm3Lt?R^Q`$bm8iD&l=Sy|NHZ>r8Rh(M(rT9|I#A6Kulo=& zC#T5RnZKi!a~XaMlb*pxlv3&ZF-A-zu93|^H1}i%T(^X)fNyIYiJp543l|Q>FZI%5 z*qp9^&`x(KDP5_4YB)bxZR{Ku1w|~4-=>%&MaxjZh$sjmp?4BPHE`=9dZki&exRV; zp}31`lPl97Houo(!H7nXf5RM4P(fL=B1ofrm5XgL8USWXG3Sh~l?W0y((n(zRA4zr z+&;UizUIrZ8I4LwT9xR|29b*a9Mfn`Ud!C&4$hxqtMVsV!toU&KzYRoM?`5IYPzC$ zeoS?k1#ASOZ-deftYCz1)+$v8UkPD&no8#hI*Am5gD({-agSR?s_BKTI` zu*m1bWSvd$Ej|D!cHZA3PMAo8?C`>5K-ehP-?~vBMYq=}RDp#hiLbENZj_>?74s?s z5bN|w(X%e$?1^SDl!wgrfD}qJWw8!^D{?mTTjwV^_>0% z^ewD*4-laNgFqbRAj1*L;svSGkMnLChCvBxd}HfsXd&w{m01#5)wYc^qMENJaE9>P z|543Js~|&(4>HeZOWpAt7X%~KEu1N2!C2G+{o($i(e2h#&1aXMq!2&M54Y1H`os5& zb7I(Zm5FuUCyC>`?9Zp5Nf~#dw(x; zSz>)75Xws2PX>&sj#X=P;T%)uPH@Od4N+|tPs8E<>()1ihL?@N#FBt6{Hr4+IWkit z$wIp{4p-kGTwXpE*pm7KRcWnTkxg&UT&zqL%^sS((5bC=qx=i4MSl2BrIR6IzRe zkonU9JKV$GXI}(2(aVkTrJwA~X1H5dBAp>(50mI)*J!@ty9{TBFh)o=12u0U)9QV2 zpQ`V^9%qJSEmF3rp=SiL>U zxl!NCjK4kb*q=dGQ!QL5QHnqDt3{J^mwSBXK?#LO;JOr2xY-})jATTV9C-ka{th18 zZA$~XU$$*%9tr=DPB*>85K*HL&&t3;#2NE}kca6Y z?zCbzdIUijB0b*ZPLLnvZS^*1S3n^AsLGz9=vbXY2)E@egz3&y%ENPx7!;;y6FnA? zJpA-AV2JdDuA^jOm=ZDz0s1PG;fJ25U|uvAIJ*xojdAi3y|I4j-#gCg_-bR}w)PFf zYOYcPkndQVnmTD_V5EW+;`Nw2F%kka#iQPTLYXKpS`O`CSN0-++tCAj@l>N&T2I&3q#KYPEJmCc0S%kw)2VM7%6-+avUR~ zR$>zqS^v&s+rfCC*x6r|myKC`XsIO}?p*8pf&;&f@cht~jknF_U`*hBzNQstuqVZ~FZp=MPr9-r9SO{qDfgk-3VB%D<-PY&=yUtbZmXgy(HF<-a@vYQKAX zygsska0Gnh-Q4tE0&;dKW!)q;U!0x!)|yvxjiVul1H96_j(bli;wWNsW3jAdd?Sdx zGFmf~l$2%*ZP`UU+Z&8Xt9yzV4TZUJYz)Q@(FjgIQOA*_@nQM?k<~0Q6nw`!gUgV-AqLI%bCt z{|L;8aC)|RHp;j^!GhdgAKxd^k$hiLmqXD@< z0S7b%4u}u{p|sa0K!McGX^491TgSo6 z%7FGM@lrIWFQi`!w6k$Tw340%m|t?}GT?L@vCKcfJbd--iiFPJjroq(>(S2K{0I=* z0WCG81P2bGNITo4?ATj_}YI;4OPeVsdU0hOv zrx{g$O~*PRIDdbC9~F*Ya)W%r*p{Kp65IflJIe*8!S`!-h;`u;xH+k3L% z%_+xVkUh_lnj8rOUwU=Jqp$AL*Rzu!5@OJAWa0T$PA+oOx6}IC1lA7~)ONRk)y#Xe z(?1sgy@?8E?A~U`H=wVjWwDw7$R*)b0olx203Bmv8s-h52KP(lWYpF+Dk#vKNCNmk z4A%#CD1@)h$ML}TEi5clrLnfKVBUKCtZ`B)PryDsx5Tz@6m}w0LEPfwR{vg-9=Ohs zsaIN~!Cuei9eX21BB1z<5#%>G9v%L7C$rb*-D7w$bI(iJy>P})O<~+|G0rflsHh02 zJtqG7lfmOEpV{amwK&nAip?zZqv`MEzb09)t)QSFBO?QVaLx?A1KOV>Um?^0SCUYG ztix}?u($j7K;RB~9($R&e;)I7JzcU-=V5x8{dhY2dok%_Fm$M()A-%g(b4fGvrhXA zMf+J7FeC(YYw$ruB_q}b?OZOWC%NKskRSr=loaiaPT$h?PW4q5&wF(c6KCU0v)5Js z?W5c6K%_8ZC1BH1d(%oT9zjnfX>Kvy)J(sKT@N5=dK&zXTM!Th`t2U`{rQP;*U%JV zAV5eUKJh`~XVxhA%D}*?z+3#`LBp8fDe#+!0i~;E$3q5#j@RdtN>+s2$tx)$OCs%5 zokf8%g&_q=FG~Ag%OTIfcc87qV~HiS3qqgDx&}6NoYiyRQ6M2Wz}q-&W7~P{B3~HT z6fk--k1jS1h@V6ga9soH9qH^=fB0?R5|BVC+9~fz4}(lXNga#9J=Jj~3<(KAL0owF z_|6bg|5Ahja@GLbgm?MzStQ0Ds^lI(6(PXEpG`^sZ5j_fcq3+;`Sg63*~#^kId8S- z?AX{KJ`N~fjE{@-yt^GP@+4TRjCab^S-0|~r?vUMKedVXs;eIytJ{JLx<7?7cDRYS zimHh8mQT1W{k=KOMh zR;ZAP1Oo$PESR>IB9(f@tMTp`3qNXByz2w%d)p-*=wx-ggFJ%{)%SzogvVvaR^Fls znbjYnr?GNvIoCLTsQJ3v-_})EgMqB9L^hsj2|;E2)hjD&98tAg*7H0qsvX-L8>}e2cP$3gR$&r&abyJzqs6 zd|ZN7&I8NG@HFdmVR2#FO9u&bMqTZ{d@oNx9QK!t5)uS1Pq6Ksb#f~5`~zD}!VK>-$HCvR>E&BH`` zDH2i!XliZ_*vD(!Z{AUf-eug}(i0NA7lGzKJZlq^ot>R<5-Pb;K>W$&P=3G8!WRV6 z(D;ZUH)wV#KV&a@OE&{f`O~#=oE8jfjBID;yv`41a`HGAiSma0q9gcT_)stsZtmyu z#to0Z`H2krZ8&IXIXY4sxw~-@5`zZCtvN-izdVB=1TCzo4P`)nSarV7_X?$jrV-|;J zo>6e%B{*G}zE{L+U9(Q{Os@g3O_N>X2B`zcQ+Km|oevo6(;LfXpt3wj$jTtNS= zTQ9j^f>w-=zLx}T--^bwi3rEBNG>d z+-Pm#Ue@Yb($TTAP%c9ihAfTtMLtav08{dS<4>iqVQy}Z(ICU>J4a6K%Y5l(QnJ>{ z>Lk;TyzubRe3`_BN&{OP8=IvoDMd){*=@O)IGAlxcQtp7YAz9l9Z^&=i`h9x63w%_B^;&=5a^u#r2~UH%(EG60jgOrb#7Y=P z9`yQrGZJ~hZ+BR;+Dd z&o)d$R%1iG-+deN=Z}QH9d+#dHYpy?SrS6;z88si7c-ty$d#Ne0Qg=ee-7m@qN^~q zi5~(daTW_n0|RyaGL#x*P~@~Mu5EoRsc&HkWf;xV2_NTscEb7j6mm!gh#Bw%aPFam zQjA49W=nc(4In^)bbBxwSHqSgPX!6EU*HgMuG1i!#b$A~Z$;m0N|H3$rEhP=Io)29 zh*#K_8;j~u9;iZyl8jNiJvE1~@CrJFX+9gP+o)JT6~|i6UD1+DZVO$zM6P9q8lYyM zz6nQU;1PJ~>8LM^XgJIMA$f;h8R>17?A3T9ArJi&Bh|Wa7ys)gyM2%#vuAwsXt|uH z(BHR;VjHh!#{KeSTetRo`{JX)$%i~#e0&H$vctU|*Y?gg^=d}vN#L)_*NacOo%0eA z2a}tCZL8&>d@vANadSP@eRTKlx8rldt!mh6Yc9b;8hYNhwHObMA`@?PR~3WoP8RYf z1v1@ki-_e6o(Bc0E;_;i4F#-7W!#&G&d&JXOveCC0qDqW{`q4pD@V`&NOH3`>B@7)i{KS1}VNqt_#%+VV`JXC;m{DaQ8F0dOa@f)M9kt4Nc!-5i zWFV_WQNBp1GfC|XUQiHtn>t%<^V>&=x=qJVIq+V7#4Sg(Jm6QGG|f*<2zok|Ty z|6>TVD>JrSupsv<18%z&YRDXvLGqPB_B1M&N}5iea)7#Cn=>@<5*u3T0Itd=*B?(C z_mI)9T13J%17~g*7i4ZaBh6@(MtE>Ur<;&Iz`7Fc<0NEg+;8Hv^GjyLQWTEA|fSKDUIodV#~`iB?epSOvxZl7<&P+EXMGHDk= z-x>g=6c}W%pqyh6h)Dx%6IO&C^;a+nFG*<$7|_brKY%tjShMsAjTsJ5rXE$RI1z4V z7PONZLSxgYC<6LlSHf^T)eEY0(T?&@lxD)H4Bo%;jP=v9rCQP+PwJycx6DN*)u^jW ze0kzRudvBEJ2O@*<7U=wCsChi-kd0k{UbjpvAWF)p*%|L6580#QIGg?gq}Bu)-%Pn zOM|8$1XAnWSlUq(TVWW?xDT2>z3Nl zRfoS=k}e<&F~Lb1m=(5`64*WcH$PS?^UTjfm)n91Nv>XCp%;c&xZ3T4T#Ak zK!D9#Up%$SKs2!}72g}MYo~RT=&7jmGDU2+V-gTdqP8$;J5WK$w4q$AA8JV>7OU63 z_N(Z03gW9?Rp&jHnw%y%ZQV2VTh6#x9{pm7+9OR~;Zr=moy)FqqL7*w7|+>4>V;FY z>=IqCT=()n`MeA)?;$EQ7iC+U19TiQbygCRg~EP}3Am`#^4Fuqp-8h|trJo$*7!M$ zr53tfoOQ_|Yv+u^2Zb4BsJjskqdi-ZO~+ek?aKwEaq5r5A#7q#WCVtD%ZEY`pyNk& z)IERnJua}+cJ;dWexN~a$>01+JmIkvzNVQf9hXcWRSx3|JgT%F6l4s=m86ogpC?rR zX&C16Nw}>Yq@jaIpOVvMH@t&FM0F+6n5-Zot4^c0>hKj7%eGSDzDRX-d6ArvrR3Y=4AuCYBS%<~bPlC0JG@GcHVFXzI zpaJYT$sfa?JKZrL0Xh1Nb`rO(?N~uM`O9DCuaAKYvw5aG4Ie}mSV~x zNja8;@`cbIW>xyuzSD{``4h@m-D}vNBy0gP#N(5YCj)7dZPw#&S^c`tPHIJvGIJFQ$@;+Y255$@3gRIPzqZ7de?nR6D=;4yv+$Lg;rv*0d){-8 z#YAbZFxqxIxb@6P-t9L#oJhB~w@J+TWrEtw^KF!QUh-3pu8XMJ~NLq)7T<<&V8 zDg}56w|4dB%Q=OWVr^nG&x0mLt0_8>EDm81=S%y{PIa;3gaU(LnVC`6Yjo$%-?C#& z!Gutx-9L-?#E8?On12IeP1zdqWM7BKqc;?XtB%KJJ%|~_8N^kp54~(CB(}Mtyx>Y0 z&VjIWlr6)aX#YzUIFVA#(HaxeT9HPE9(pi0D&J~kVlb*nCDjR-S4ltcZykoQ3!j+F zt`(t9@bS5@ML^xymFPMLL%^A5h==pUEbUe0UoisTFb1=hG<`9i_J;mTjc7#pPk)ey z5y)=|zF+@rSzh$rF1ox@@e~eTm$x;S>5=Fg5nlnL=|EXRh;HjG*U^vS9+%KQk;9=H zx^PYKT=gLq%+Dk+(Wcy`8X2VYX*5@q+T%lf0d$&_-KbT2(3RH~qvd9dAw+B@Gnq9Z zN8?_3DzWUA{nYAB93fSZebiJ-*tT!@ww7BPirVd z-6g|oky{s&bYm)oacMQCrk8TBnKBRmX)Y=-mJb62ibkn4Aghu9p^SNk!n6yk|Mc;Q zP*O;kF3b?R^c(-_n)|d%@cE^fzrE`UVf%TkQ{>UhM@b1ada(R*>#^L((o$PlnZxZVB5YSQdH(Mk)qY>Dgo&|p?QN~OBKa9NvP#j;o?L7pS;O-jST_-pM0>RzgA-EGH zI0SchcMa|q+%-sWcjtEA|2gk>?)mPyb*H9^ssXBdx@-4-_FlhdEyD*h3K5i>KigSU zcd$}X7}CMqSI!&Tz*us8U?q46U=da2=kecv zUuwLiJ~%@1wtlaNbBPJ2{Z;#(0pw5Gb%z+&OsX#pRe33l82=))S>o$I$??89?=>@t zib?xVul0@0VJj@IvkoSY9NALxoP`<<6~BF^dTYLo9UU;eu7KP=eo#sLAfm1c*n0IT z5PhO;7Srh4SdoCCi7veN!&~m~n>6XP*^gL~4ZEN)0r10|a(J(S{dc|V` z`#6JVSpTB{-zWr?r&=~gOHRPvw;Dm>oGFOqAC3G2-0x2NMdGgxPq}o|<^LZ#{>JZrbo_bv+T8ugG1i>X#r*fQ z#=&CshTA<-A7mTt;MYg9@1&4=DfLu-m{g!RGtNxQ-7@e^s4TnYDdIO(MsThqH~uMGcbChWmP#-QPamqtM8BH|Z(2}$YS z${rSF5DuZD7*A@SO6hD`r#3_vPpTPy6X$g3D~F$qHKGL?iP4(t-e z0d)S_`|Q5o-98?Mvq~l&s#Q3}rIy#9Ng(cs9!36j+y13;X?DMhH4Qjs_D<8S--@9;s3M|2Mw_@LxETIm$JSkpy5MYN{Rs@y8)eD6Mv zG#1f>(H4Ho37@98%amM$w%JDhJLw2=e_6GVg}B2)3{#5zYN1c7@fBv95xc?0)Kso; z)II!N`^uACi2XN|E1g83);902NpB>7K88NPn_AawY*?Qw^q_d&N8c4g9oY_VLn|29 zl%SokY3~nX9FNT)Kj2F&kban_3@V6T)afMk_yo7fmmrjo(>(sJdX}{XVZb$lXTL1p z8?(jl{bRR=ZFF^E;)hAG&$KTtA15Hvphgyo}S^0X{Y+Wm-WX>HytM+~!^lPuS_cr}U z{)uv_?&?!FaB#9u?XVJ&*3iV3HiiDF0f@`R4Op$!cb=b?e$E+F{c<`B20M_e34gML zDEO2dd?eE70w*|!eYEM6a1<+Ki^!obwSbF;*~{|8gtGiZDNmA=MUmSakYnCDG!>>^ zLb-)3AqN4{>~M(e5#${vfh0z2b7gnY|2(DvbNE&9uB>DguG?Iv=NFXCN@>C-a!5l0 zWn9kfm}o^sAYg`c&TaCcU3y^58CVLTA&TUiltWB(0n-yn3`c&L&N0j2!M7C5b3kpH zWHy|7xq_-|>&u#ImPwn^t+}jd-lE{Pt|!{9if(o?H4qYF{5LB|eVNn8G zL7;aFJFGr47Y@jMPy7}WQ0|5+14bVtJ&?pky;{q$To7c|jzn#pLLGb$dcRP-5N3=ux4L zVD*{9Dty3qXHhj@vJ=Kt#IAGV6Iw>d!pN;gi8}*iYMDQ_h}T~SB>3S}M@WDBF$4lW zi5I(W)Ioi{G8`NH^&pJ;lc(=Tzyv_=A@ep-{Z7=5(mu|8uX8p5v)7uCrkI+ogfEAKuVSHx}4(A1!NNg zf?T@Xv3k7b57Ot(SE~Nfaot_Jq3u>t8+(7J0E~RsWFxB};G7n!-Fz#1pZza=+Y9#Y zKeM=B8Yg_}<b)jcf-4j>{;%c5bV`w|5-vr@HrSkR@H~mv;p{bu+-e6M)b7OPkH+ zZ@0qV;c-~uaam1R%y1#*dO`c{1Q+E0q4EFKuyMe46g)`NPd>YsUoRWfGCG9F7G9oL z=Jywhmt*6d{zAtSC6DXW0y2HyS6)f8$Q(8XA-V=PyaWta z;4-$iD8eB=A};s&_bn*u)_tybmT?%Z8ioaVSKUd8dk1}?Bdqg|&4V2KD z33wcwjjB%F_doL2B%r+h(-+|B-;lxNdfP*uIs*~^?akZE+5W}$sEA1EV00D+vF^gD z(L|;+#)md`br?IqY@d&Bd3Ls5ZBQ4_emSS6W`2SDWljyee|&$lV0F6w;y#vK@`6y> ziL~fOp)|AU<0A=Z?P1|4rY03|@PI5|TdUgqvnrF%c`lLw=k;Nt3DA*&{c?AK^`a~v zd~9r&$Lj;#-nAyXtnhGv6#rywyi@mC0Y%*5iy{=rO9%`GZ=7rTk-Gngj+;2}n*nZ! zbkwI((bCAsYvh$RcQ;s&F3A%g2#K3W$m}`2RZhipI#c>g7Wmwfz-q>O2E4D_713o5 zNV<7Gk~-Gf$k-&>F%4TqKeDdd*D2_0Rm)xU+AR-D5xJS#UM8B3dXL-(+DPnPX|QDU zNS+?2-iUNuyfmDpZn~h|W4|r%03irNGR)4_0tur5>FHkY-pTpCd9P08#s2tVN%1mr zH|RzYO6iFj>0A5X?jhSm`qeLAi6}zO*9707a8*Y_!a5+WE5cI~dM|V)#l);ijZK2>DI5xvv1|0%X_F(u2OYc@#N&>XriZqY|5P0*4F%dB~tx zu=nF27Z($V#pn6>>CO&h4)J>`?Q#D9vH&6KuWWcKJMqERFBhzDQSQv9#c!9S#kT6dS*pnRpYA!|4J2{GC%Uo#hiZGFnquwT_yyh@_jXYm{{uDAy}AV3X~4cnPC`Xusi zi~T@ajA?Y1_x9_1M)R9?pO^I;=wO^h%4OMQcG@B~$-T|fyr00HF*NAIvaB&@d7-!w zl*G!Ojjz!$frS2b<<(D2QNex9@GO5ax_ZzT)kI#edzr?@z*7J|>72YSNMYx;XjrcO zd%BH&rhd z#iL`Huc4{g6MQ939v z2QJ+z3f5+4XJ=-v0L0^a1)tCJ{c4M&B%sv*dq{;vMc^b%;e}kDF3g*lvKuw(s8n-H z>(sBT{Wnw#C_3OaP2aik9^0geN|mKD03Z+=exUq8LQ{>?yx6R*=~;4)60|FD)q36v zyx;b2-}qn?E{#S~8|fV1E?)Xm!X>F9&_4wgH0Xpm7%6Qxo;68-kcsG$+BiBh>yTeW zZ}2S@yxfez(x3+(5D@wR&EUTyT!N#t!Fw-P&f~HudlAQqUCkG9u_NL08cSyU0L@7DmAqQ6d*PWd3E;B=oL9RuB2p@Fh|GW zZf*v3+DIq{breBSQ}i!Z^~oo11p-*ZFjvK;E3QA%#ZJSRW~+rKiUnp+WpcMT%{&;y zXrErVC+(3Cu7}}r!il)Xg%@2ORNoBZ9Xk4W_^s2mc9h z%Yy5_PZRO`r$n*tqUO1O+5-IUqGm@pJF8Vi`K5bWPY$f8_pY~vr}u6rzsqqmU~1+v z_;T>}e0zOo*2%ncRaBu>SKHE(w~{wyj*cOO2&c&zcq>G$t?dPb=D>hTOTVtD5kwI^ zJpx}E0yG#@SeOWKRF-#DbB$w}?O33(Ulq$lTAHbsm#;LafzHS+H5a#lKTJytRM=niM3ncxpeMKcS2?>m4K28#T+z{Tup5zN z*5-My^H~cb?X};DgP5^R0e3CYLB2z7KIX0LX```aMK(fKx6bqAb1=7K*;k0)I(x2z zQMhSeeq>urF`Us!Dap)`T)pDXH(-M^NFQM;z zHhE@E>DFy{q591?)C*a&)d7SI79GL_@dgu2t#o363B0TRg1>RXDuhRKHV&hqI z5p^QvCn3BL(kEQXrs9w87ep1PR(ckDquCdv8V=%zTV|f5RT5Ndo++JWfegndlhzUm z^@e}Te#aXGL9ts89Xt8zogCDdG9pVO$uR^eMm9J3DxsTe4Yhc5p3%QY)NbcblLV-P z&o!bpgit;!@iv|mLr~1Kt4LFV*fZN%wxEJefAiTAE%x(fghz?UuZV9YxlqlSXq~Vk zh*k##R2RB1&kD8CZ4Vg7Ul8f7!(8`$oXxJ1k8M~Nl4vUDrWcSy7+0oir^9j0f}$L; z8BS13eXnIu-&cfO;WY0fhz9yY0BOMYE<52ZKnDf2Ma2*UKrkF{`e|wzRIXn@XY?FM z|Hx#^hz)*1EaK6h2dWs?v)wt`?Ib{w(#nal-D1>`S9*c?-{FKLxTl%l`!)?oA_YwK zqSi<{u4aIKxNkQx(gid-PQzvSGNdd8EVy`dZ%U^=#{|Y!|6sG3A z67m}Mg>+?ukrHYq(r=^XsHxAge1)o}suL1gTIarlzUcY@h9~Qj8M1(fMcLKfTCsxM zz`&X-au!d`^6IL`?%3xHB4(Y(SW@hiG_9k$oX)E;V4T#|*0LS*c-^04P|HQ&vXZm0 z)wZ_sv9mkwPYYQu(qLdX5~HNB@72Mg_&oecGGmoz4Z&;rf5E3*IHCaX7I;!{>n{TS zUI4O{p5Yv4mlr6KBm2Q~fYzTnZ0n<`H*BKwK+)zZ~3!o?|}8dZv3?gyjdedI@tbnKRkG>#aKfx%u} zdvySgsW`9N#Z=zW^_miS8J61OTWD)_9alB;o}x77+E`cGok+iJp!v7}{xGF@8O z9{L~%+fH#v@VvK{-GLF;+7dhCzR!O4gL+s(cyx*M$O>6*B`;J0$K_ab!M7=0DB0?u zDbdDbZy1fpLvbA=t;Wv0vBtc@=dPcUBu9QHX38n0!}Qe?I|qR#O;T)9zD5fXN$3l0 zwZMU@&GPyQRQeJHE+rx#hfEdruz2MWri}`%%u}i1UJeP}D_B!&9T9GlZwoY5JSUx>^U>2k zRc<<+70~>fP|HL1u3t{f&1FVn82kP@!472l2`vpDOkJcD=mf{a)YP!bZwx+y@D#Tr zBV>U|84aqy;%4pV0zg%ybDf}oejgr!zwXd4R5~+Qw*v8{agf*<0Lgghy5YU>3gjMx z^%~3fs9+|_X^>gOz0CypUO%m2i5HNsvJ--UnGIg+9jHG0Wv0njQ_$vSWBlc0Jr983 zET$U06t4SIGfN|CVpu1V&8ABHQgBo5Tkmt>N(<)%J6>yVM)MdYjuL$rf)-fO#tQM$ zD%aXo-HR?!W`Ky%*UDF*(*9$eMw%1$r8Y`n*LSSX996R=XK1Um)DEwZPiXzH%J+|o zGSGer+3{d17#3Ak_ES-#ubb$J+uJR?xfF^=`lLHrJ2cm?7IS zmFsD_7Sp0va+9B0_3e~(yn>)X*(C(UlMArh5dO^QEp^5!Z%<>1JR1RB)@V?|sKoD( z#19JFj)T5I2=zeRW`I7%VH|9J_~dq|($V@6q_2J!TwH6mvsBJQ3FvII>u_Q_m zpq9a;@3Y4m-VI zzpt46%o}ye!CEXYxE7!H6LQ|Yw)MF!ER(1?G5Qj8g@kyWyR&2o%C7xGx8R(!j!W81 zX$+rAuU0>ieTh1YF3f-ib>Q5l|JxrBjBWek8*2I3h9^?&oiS|ej&{sx`c-|u{Vfl_ zCC@Y_Hb@F5m+QNl8Cvi;3sTsJv2XIVHxS6~_1(LpMY$}R!@fSFYP3`~g`*RDtrCkf z`~^5Z#v~wtx|ZO+mDSN)usN~?o*l|I2M-Z|{0c0-yLrZRVRyx%y33o;)Nb^*>-n3< zPX{znh7O~Z1X%guUPmE!Vs0y{i*rRU;$erj(jU z8OMMc3<_Oyz!VSdKkDNtP(6y3qR$1K)s9(kswS;Vo%28Dsbc$?&!P9Aqpngr^((8m zV9)6Zhq3L<9{+y-E*qH~xfXi_QfeLx$kkw2ke zUem}04I??mN1I4;LzfAXs z>m7s54Ol4!bIk_MHyeS)7f>5R)F&}{KNQd4w1tP;`S?5oyKNOm76Lx2=GNARM%%e_ zjm2{Z00d}Fy7)gaez<*_4EFGD%Olw%)_4gOUB&y=KvYf<2 z*d_tnX44ed%9R7eEC3qnd00#X=fTJr?R+OUx1hG#>I^S_ajP~mI_m5=#B3UtU6jkC zPODfp_dQxe0__?oK*ip^!9z^+HZr7!Ps~k2TVNaGVykjGap#kHJ)KXim&Nk6 zCol#h7BP;56a3C^dU={35 zdWjQx>foYFgH4hQ_C@i}Mn<;d;|+Ba$Spv%Sl>Ra;UUwyMpmV5iB%c+{%oG@^|KNogYVW)_<*^$-%hLDtM0K)3wn6sG z$zy%jRd0>WKg_aBa3YY+`Sc!FsFmAyLAureeG|Z1$Q2Pm)GT4;rl61;3)b6%ZU?%= z@z7N_iDr6@+_d4^9avxIZ>>5q8QQRV6(Ir-`7tQMye2ZwvZ_sz-TvPT=*l!ewa*BL9Po^C(W|NAyy$_u2<{cX zW&n;OoPBeXD81YxwWazM-XE5ji7b4EvQcdR0-?5CtVUWbU42fqQ=baWvGjX~Lf+~J zku>2d(*4}oT!c$|RNGE5O>N;sosbJ480x(~q9Im)!*yhA{=!^NnbPteVZ!EkNDCGh zyO;q1W_cN$E_`V%LjOR?zQ3`v2DC;zLn9POtey@|!GzWVB*6&Q_?2}OfKo!bz#Qis z_r*D6vLD&e3BzVAyA=xn-BKe%l72~mK8lu%`uQ=01_L8c_}r&{i_gzT7|Ga!{@R2y z67e1v#F9eRJvce!kKamzrwjX;rHd^0S2#;)v^zfJ+Z@4CL@y6lMq;_zAf~LMI$+YSI)CfXkukNy z23*yCcYND|32F<0c%L_>TB}R`?X+Uu%E`6bVf!F_FUuAOcJRy08AK%WT|uB70w))1 zCR@U3TF1{h;;;NOzGb=^PvHEqZ> zJMLNfymC2Sp$!jL3`Wamb?DMWK>LN`D8YK~8qb$&prN4w)|eUc&xcbNc=<%2%d72Z zA}v#EYc|{TV6oVOpPPl{$3shXT4x)b?l*_rILw6|Z?9nIZ%BUK+#LntdCCL8&N7mI zU~UwN&%K?@C@bi^8#aYnzVfH<8@9iC=Ra(w6B+kE4CL_eFr>^7YN3>#f|n|-|Js!+ zGq{5=Qj(~g$e3hkOm>X!kY0%YZYgLEC!&kS)^;^Mo)*9_Uoz{~5yKRj3tiHTqb8#D zT&z<!blcetahkGf!BujR9Q8u}#$u$80h zeK6M>juMT}MRyf2=1je?*6KToUn2*!n~dz!s-0=CC3e~bK7_#AOjl%ebTI#{de275 zSt$vitlrP}m-lY7%gdVqD8?VW)gkS0BX>7DyzMx+=7qe}0ej)irj1vN`Esy)MysXY zz}=#@-)rIY_&5_C-QjjLm{|WS50HlgJhRZ6{rK*X+O4I}j?^JQ>NmGPly#G>8Ib|) z?V=I)&79F-8^sTSJc`m?XwI4vH3qyIZk-(;Jgw4L_hc%awaFMe4?evwQIKe@`r&-? zwrM55zs6UlFgT%wt2czuxEtz8qz+IPA5jApiHE;X2){#w!pFr1jOLD|R6VNDya#)> z0>WAHX?oOG8ATfk7hx$hSPY%-jo&JtC5=0lkEuEdm;ZPw8n!;6QOmj4tV{~I5$76%s zSQx4qM#*tmEQ1&@uzV;*+!$tnYtT+a>**-KioD-*oqQgIz7E~*(WbY2r-mx1ksWI? zovV{3ehUZECk___!9X9tduIKfk3;>k$%a;=_u2Ae)2v3adiMb9Y>AV_fpSL$ndlca zl9)gEHQQW?!N1pQYHwah$PSZ8T{XT7Qqar(z$!$OmD}0!>#8pq`4J^`@Gm5)M^xuxwHjq-{*}v{wRvF!s~O8WIs3?(25j@t5!R!l+T8m14xaLG)>(fV{yr zxfmyl2DiXw#%-1}Dsm@i4QM}zI07PHL8(Th0Dq=4IusMK(Mu6QR?x@eAj7pDTI=s( zH19Kwa7rNhETpGvNC`pLv*x`Bzai2fQJ8n4S7_w~sI`Lbl)zDBrt%|6-A6(XdhX6o zd2^Nxnl@%h5JEo{k1d*?2R zJZb}Dp;CvPle69VX#R>TpTwLa73k0k`Q^Km*7!Cwb&T;gJo{@gspFzu0!Ek@- zeTE)T;3By-q=AmjYd z^7M6H@Mc|{$2a3yGfl?ZC0p=A1ivJ=kZEbHs341hp>&oZw?0;Pbj#%MA4P_ZY3dtI z*Q`sBZ1v5-R;#35Sx#xIfRi_~-PB+J+!Lw0-TGoJ)VDv!`IqxqrEu>q1SgsD==@PK zUPpvHWQms;F39bv30-?wF*kiZa#Z%bj{@ar{I~p7;By=mrq=NrS+)Ghiv=sMBKS9P z8;gH35FP#n8bWN$Ce(jlcpm2sUbh&B!bWN4-mg|C-+0Y}m8ZOnZQ17Z8lGt3p7vQ+l8HhtjF_CimVikm9$2Z?+VRkLv~j;xDRH=5`aWq- zYmxwrlN?V}UdSKvrL|LN(MBYU)6)H+jAlGO?`3UEMV##WEsmR$L2K_IYpib%h3_j! zP2k_j2wXcI$vbn9XiT=Ks`h#2`uA}K5KIK2OGy?CX$7yq46k6hiJ*$6tgBNXlES?~ z8kfB-E1$`sWgt_e_r$k?bw zyAstX6b%ZhXI2+T>O83RWjh8F(|qLqKzX~HLXokz$(F0Z31oR~oA-XuRoA@;F0w>+^$ zCr6etnJywZ0wSW1MfOq!T4Vn4%K{tZPqiSIn}1wP_}nZ1I+%bCYvepC{VS`eI+r5! zib80W&_F#V=t}NE(?JSyv2D_UMtAXKA3*r~t^>f1pf{-zOMGE#mCR{4DN*s3YTpdG zg)p>+sxUDMg@?9diNWv|y+^?0k3%-pduFmPAQ|oBvw(D!(#JBXPN;7C)h@2fTqli( zh>yN)H`FN9gfSgeRC8Ge|EA5PS02pZED>eBkCu@V4fs?o^m~RVaEe#%igS-Y1{!ML zzX;Z#P{9E)O>3Cko+QXFH^{t%I*W@#2Dfhxhgj8< zQ&R!aP8RUscPC&oe|}Z$yWlrEm@WuLCh}NUeMbH_5XM@K6T^o|y59YrSPt6&a5l-l z;*BDm9KDp~gakR$X)p!xezw#zkvX~8`&o736LIxscDA~m+B_ZnmJLzp&x6oYj5!d- zf{l|`k6MsW{FBO@zD70lF)@72vb@621>!`t%eKW?rFx`)9{r`_UFA?g15_Jy5PrG2 zzQKDq=lo&{Xd*PHz>n+Tp3jtEN6e}5MJDw4 z5TJdwmfG*8=8D)qh3d_}En>ieRz-*CqoRj%{K%9H<1Dyyx{yFL8kVhXvAF~mwWLDV z{IN%kptITdk*L+BSL>Gl*@XjScoqQ(_?j*QLZPY zg6J@;x};7}Z`QZ0CBurjf_Ym_|7{&uFVa6#^bsc$X0oSixQ*^pj@{ENs1_PVggb<)ZvD!kV zZ=e0j9oN5o829QVpN0mZcI>h3>Ps0zK!ao>1t_B5eS~{jnzi_4hsVY!imU{0MdVt~ zgp1W{3whhq^Ek%P3HeDz2DY67?XO?@=*KRv+}`_svMn(ivl<#D^qGVarPYBH*fGU+I8S8)K_kx(VBjxeQ{7p2rsv9N$`NV{<(pTLoQrM0g?u95VD1vAAqH zIx(?G`1b8!K_JeHcS;zuv|>|k^Bdz(DbstQCCmE?6#j;|rVo8Vw=WxoSx5C~!uMpp z9MbwWBIOBao5B8O5TJw__l#Lqt^o{4WU{E0Fd}W7R7uEFf>u0fd&ezi7mQOT32uBDGJ+DzTy`!V0H}v&r1?IpO6jh>nJ#S@{uw37M#NFPqEn>1aaWvoQyY z{m@&0%#FrrQ8$=L@1y?mmKRF?YfCoGFObLek14Fv$g|Xd8hSed5J)$a4o9M z#0A}kQs|^5jd&9l0V!RZS+kLYC+11kb|Q&!Z(Ll4#nm5n$4x7!SteXhwn*5oR=)kq z5rg4&{G(~pU<&WYtSD5*uU(AR4=Y%Gjd}3ve1$doLY~NB$!lI#7*1hI)n9GLT(y3t zPouHI(M1SRes}BUz?gN2>!AYrfc#U(6Z606M|$1`{a%C(g|{`XF2k}E1jp)9E&VC8 zl9Q{7)J@8;|0ui*b-}>l+6uv}4GgVIn$VA%XNP@y`x)ISYbwVXbvg7I=d`N+HebmF z=nJ1z{a-lXf(f2=Fv+gS8Ootb%+GUJI%-@3%-w&RqgCA%VYhl&E@9Ozo zoD137I7wR%AZvFF!`HD;Ck74?K!D&n`vS#{tHZG@E&De_5$~wO9437vkHnz6@K(7{ z87QLGJMQh?loZ>BeI3oFk+cXwm8w5_RR&Ag_k_?q->X^tlXTiC30RuXS>9|komCGw zuq&}cxx))10g8DA;C)a8YXg)8jjGORn(q%)6G~fKJ$fG-M9VLl9-lrK4IbUIpp1E+FS4W zgs;s)D~X|b86i5O=m@#@Z%1~D5dvoju1ZWt$j)8(`LN}}kKg6ACN_K^YEVM1jfr+~ z;@@tl1^)>rKpge!N*er>gtEfx)#-@Z{ff|ig}o*2&nblhoW}cB0fm}pcf{^o3>QK6 z|M-u8e#o3v3$Y{0kc_4C*45NpxXZ9g!TGyAH&3kTXsG}D_Drcm~IWql2#zlf~Q8qLr`sHXe-- zBu2i8QXB~QCp7as6&GK?!>nJ%I;6ndJ*zE0r6qKn% z14@oopBGuDdX2rCKS@ImSDOKI*(jAW3p!Ml=9rcwX1>Bj2byygq2i&tdMRh^&8~rg zQv;6NUrkI*w6p-0A`S?mz(UX&jJ(~*#Q$^}Z{P9zxok&|&!&9hZrTA}sL$D5g6TGs!(bfagH9p1Yk%z&9k zp{q}MRTX0N^I=iXC>TpO>V=OObbWn|x>JxW=m30h`=YO7|J(E==!L1K?y9(a?DQGP z600k-SsT9G5w{f2nJk| z_0m`Q%hB_NH@NrVxNhPdU>s4xm^4Zx#^O69F+a0FQup;wO;=Z|`<2jVdAp5uu;7~2 zeED6IbxXU`K~qV|=<;$sGPtJtnfW8p`Nz){AsV)*}b|1B?TNXf+XMLrFU_c!6gg$+~xWTw;(Xs?t~uEpoT}S}c8B|5bT4?e6{0 ziyaokOE4%;O8vx7o^`Oio!zG@Za7mcfw9pg@_5giFMEucMbj4W(WXJ#T814Ce)>QJ zzh8f&&97zn`WQd5$A}P){dk^I=lg8%d=IarmolI7_0G1vB}hEl+UhlHVYZ|SvZrkmT!w=pvE2LJ^;?|dLYpd04S^!f&GSkNb#I8LLZiix|ZEZx&ROtC#bd3WRYrZ;qJCK z?u%-?dVL@Rx`q=mH`qKMWiI+I9(1%&l@uS(pwoJdXEmz>6Dz>)QNOt}TxErEx#qe7 zcma9dpBrR_%3rPYZZIh&HI1$0s+L735~-BU?UhX|aLpOM_4#z%u!Cj=%hT!|W7{N< zK{fu1t9On?xk^8ierTsY7u|zX#M72e8b;|R4o7pnuMF`YhGHmQUta<^;9QLtdz_W`CPH^fm>a^D9=jWG}TH33gbPwU;rKbyVaW+8ul_=o| zxY=WTeE*l3BLTl+0d-nNr6Q}1jn13h+UjagucYNWXv9%RQ7V*1?h9!vuwcT-#r9{% z_l)~|6gUp>aX79-90iMe!&xRlQS8DMM1d>Q{Bk-}?C%60>dLDfJ~Zd0y&0Hf70uj= z=(wC4QX7WBvyG>#?-R|C1+a}^adLd*NQzNf2p2j{Qv|{eo`JA~vRIj|O8dKb8pNk% zj!7L`y zTS35==M|dZ&nYH}Mzv{@1uGOhsXI9n%+l*96(mY(pLwH$hU!VX860P4!gqeUHG#N|RoXXj_YhpaQ2`#imQ{Vcpvr))p- zZ7MJL31b_Z*6#Pbbw%;rl3<7*-0PV`z!68P95(wMkL(kgP zd}%nqC_IXuj_$;?15fz`y@XlaER02t-8G**kX{8OHYUo~f-g27&l%i7`quhLpo+u! zQ!3dkmY3$ei`K5zz9x)zwl)ther*9)iW!b}@2A`U&o4=<5n}1eV6^wdtjYIgUJVE# z0p_WPPkMSA{ryzT%<@`uqGrtztJBj?uU>s)DdZp^`t<6T4IW-c5)&06-!+a9IHK1b zD1)vKW{QAy=U4oiY5~{%8R4F2%;z&UQJs3eTwE~ehZA!5y2P=S-h`^VP?dL}Vw$kt ztGCniONj;!)Fc~CJWZbS!x+5WAELEenvbT^Vce8%4<=4LFd=)wr5)cY?Xr(1puu}a zxo1<6G`6AF36U|jcVRi+1uE}HUcAJ!)r>dFRBV+nB^Cut9?~dHA}|CevU6y|29867 z{(LN73+NnHQRVz%qS0-7AVfl?0O}eNX%{J`l1y;L$9#Gi`B*iSYuia1j*=+cl#5r2 zj1@?jkf25%{YYN2eiA9f0t~1GHq(Ht^bnO*3(~8`+>-U~V8BFjA>YL*0On8@^sNOE zhpcN;9J_&f`UVT0m}bEUF9{Olr+(?(!GqbFpENG3g!vn4-DXy_W@d&O;|8oKqN*a* zsVQL(0`1q6UIA=(7_J0yzhCFAG$6z%@T-h*!qt86d9z3*R2@+4363J)$di5=SS zq>EP>*W*8nB~5ZqJWxmrrNuc%o0`M+GblX1>ihm;>)F3dxuYIvVfOL7+@W0~N`{nv zbG;k`JS2j&Pt)HY%>xM^PXw7~?mWEXbhHXy*EJhMVb229byv+UCz5|{vkuaqdEGCq zfTS>35aHg@5dqlE{wI5<=31kEH!_HYgX2Kf+RAG9*Gv2$A_(Mom4ZUNT3Q|t1VQVy zr>bhCRLrxH%?}I|o=UHKo(U4=>i%^3H9mg2WHl?TG?Ss{Gwf`yo|ot1?fnuBe*Md? zs#R*cpEN9(r_Lwdb3`jg58y?W`6`nnkYK$e?bpB<9g)mIc71wE2*kS>k8uU4ir#yJ zHQ#BYtzN4*y)+>MKG3;CM@`4YiLE6v^TfgsO_*-WSCi-a3u^hybg*wnqcvo$nV3&t zQG3x1&(Zk9%CgV80mRRdPdYOZK;$e3h48kW?ZWZfox`ci!mjg8Y zh0$Y_8O#tAk^gZLtNzvfmM4t-?>Vw?$LAwt zKl`U^{;tam{|a)1KX;&FXX78sCC6wqJr}}oy&Cz_oybx{fWs}yI{4m@TUo)&x$6oJ z#uPQIE%Z`wl@*!vp6we&UU@DE!~>Um05gy+C1aKt5|~;U=9E9PL<`L>M$btm8TfNm ztv)0e4@@hqi#oBcis~ICv^m(&L`C?*h7Y04Hk`APyRRNY@jaL3bgVZLf`bC%_T44} z6zC7*rV%G)iNg-VgV6fvbB>!8BpWc}f&64|Fc#B{ln4V?OyUQ!)M$;NN$>Ts43OYX zPtQ2DGE?L%N0B}jP)QZpe1_ZFHifes{`1R{BvV*N^?_jz16zL8;r_Csd)=!CU7XSV zb=@(AEl3f%cSbZUmVF3%>$5<7fc-)^w5-P`h`c${Wm~-L{1w4wr7>21wKv&X85k_8 z8LNmrP`FPv1U^gE(W;@2frmodhs&OqW_gyT(#0h-UG@0fAAf$w9oQ``BK& zXM1El#1PN#^5)DcOCD|pF~DBUKBCdr4%=TKAt6OYMLYfE&(?oxEumS;2_}}@M_=Ye zrm2P}ZoK71#5g_HaBRilvfBiX((H5>jt6EJ-F`knjl*MDOGF;x z9sC-3oSd{@ZFAQGebn19?+^3M68!0XcbY^`=TlvuZe?h=RE7i@$AJs1JX)?E-<1{!Q}I4D2aYApWQ1IB5*yv+1z<^ zw^XN~S+f)upMKWbk`h`_1VItK z*4v4DMn|S%D*Cg8J=hl+^x?w?6k>r%g`Y7oF{YH}z^aW>8c1m2<>x+tS=mE{#N!OSH{Yc*3rP9syy`!4pQ}DVXhRCcL5XxK0|9t&m9Ct@5rD>cV)U zy$iY=O*n?QY2e!hf{8|`6Cwo2j|m9V_(FWq&!{FHMjvm2 zBdP-!{0j4i)rRL((%7x=nrH-V{a}Ux(ZQsA2;~z^ zq?F0PH~?+ihfy%K6e}y%Y$}Yx8Xv5L86`wcFd1YO-&QWt>dw_lsj8rw!w`mr4>_x? zF#qc#mX8;|_v%S2;~b*rrpDBJ5aCdh$ZUhg@b{@e37W>?*T9&uYQIO6Ax@ zsGL}8>+m1*zeo$GK2bqKwwdfJgB|ekwZDAE>fZ{hGnU*O$;ix=Ww;mP1lBKVO7K8DBnyXMEuL*=xVwn2bC?%l&T(LZ=H zDY{xFq-ePd!q|F1rm-coIvIQ!)l`=ttPr}AhkoF;^6~Z_&w9Ns{k6ni)CgnqKyLkn z(MiY|#_n+qG%fwYArkbs?h*H8#k0z7d)z?7bf?7Qw5-=$D|9DPD_coTJvE=cxrqc2 zMq3q?aey%_FW3GXH+gV>!D-iiGtt$x@ecCH!>vu;Q%JGIS0`h7h8B7P~rUcD!|E7MfdtLnk8Y6UDorWhS z}}o*B=ZTD$mU7)7xlxB5B0f)6?cU-Y+nwa+X(gj2IY;8}o~Sn>Rq~CMpblCFJM}2^3}qxr$;;^*uP$ z25C(QPfqEnxG<`V$FXzwC9fJ!jbrT?pZIY!%2k#-08>(n{pz%FV}WSLtc z9LT?=0zF$TA%ozPeh1!N+5y2HW!6L3J=8mpi=+D@v~;e&Dy#CktuzEklpXXXjTlm7*s2ZHtJ0wSE7C4jUqE68orqh}VBfg$E`3h&~co2HP0Ua~}|fHJ5{ zl|>+yyt&c0AWvZVnkvbO7Mo>4D zhDDp{G`37?0p=3VyApYxDg5qJb0}?v(hKzvZ|_~2s#mq0Hb7!L0*4joyOgQ0R-lT-!SSAxKRudRDJ{F%@ZlTi)U`Cp z-9O9HJ1;2mK%9nEb{rg> zV;N5zbb*aO?n1hx{2XEc!8g}jc2jWx(V5xJlXojZ-X2Fq=KsDnPIxS!;4pJ2pLZs8 zwmfSk9-6P?RJtUqEk*he_rBtgvBNocKs{DB>wF}z)#VlTVD{1!cztaTq%q%v0V}ic z2&agyNdK6$G+gnYg&~3}N_*eFy>i-Zhcg+BE-$CD9{dwmZ1=(zzIre2?7rrL-m;m9 z#YfoL|MWz7evxiI>zy)zUSjItuA(X-Y~)${t)GLIG?kA`XA6$4Yb7J=taw=fcd<%)EZ96XP)`h0hPjSWtYuDIiQaY43Qr!61uA+`Z48s^6 zim9eZcSo8X0%lOV*2Cg}$sn-1ry#7|N-Xuw2S=jbp{;Z2*PjM*DOJaCykX@H3RrWk&gns)z7v--bgD6bC~Z7i4>+ zL86GIE*jF}1hv^WRF(x$S zu&%Yf5j)}aPdNP8Cv?MI2BA2~FLgCh$zoA=UY6~w**GsY$aLFNPT&0W&c=)a^@5Ed z5EZe!#mYl5rC5j)CFP=wutJH{Sx900eDh@g;6~cYokR0_KKqqdz161V!c2+Ucez0K z$zQ=&l{QnUmQ-sLl@GT}L({X7TwFnw zbf#J1(Maz|pQ!7(QuDOaOpcbBaJBbZM2l)%e<1@F;WIFeF4Ss?RQy;X0onZ^etGoG zc?jILoM~rC5$Hi{#Uf8%q{ATE3E%dK)Z?y(mz|CDhvt*C@uV<7pIK+SSUyi(snknn zV033}>${!H8w)js^G0vTJ}L1Di-675c3Vmc;pw^+0LqZ#;y#QsoSv>Xx&8g)a9spA z<3?frvDqkVac+A(oYI0%LjX0{=)6Cl91TQP8yiz(JDrFe5<-fW@M5AnPcD?$OLBQ?v{_5xFXC1`C#}xtEoG$Qx@8wge(zeo_ zba-~G3TdlxxmpKe)Hl?%*cS4=HuT?9P#AX@fR^fY=QMjD ziXBUo4iAAhucz_qD9tQ}1L+M&yR+;?+skcX#D#DzBLZQBNs%Ep=0*17Y-u9PVj5@y z@P0m`#Fs3A9=ybDs*om+3-G?1>n$#ZEt2_ErFvxpO#0_%k&Ct@_wC-mL({)KL2Dn^ zNv3dNY8g%`X=xX0FXa=@#(HjSx`|k-&;6&#G#mBWg7+^b)PeL0j;Dl@;_M6vg%CgQ ztGa{q^ay$wC4|i;+(H5UK@9kbQ{e<|#~6r(rx3|MWl?kEha_MP@+@YGl!=gfo=R#3 zG4aaOUssJw`%?@;1z!~?pQ`lq+4^XLY}}CJuy-9`JP~yi6P2jKkV0xtfA-5sj7d1m zy8YhO{G_B)_G(9?Erj~ln3TF8SM2MWVHg$;kx1s(Zz-3`3*WVOyY6y1zA>{ZGd7Ap zKrjy?1o&mrsrLwd_f>6vq3zmTGvP-kFNmMGyXws<_Z{a*j&yze{LBPfkI9I4VN}AM zN89d4ca5=3)G5%kPNKc0X13wcbQcANo$qo5Vin49fJhbzRdyO3>woMLWr%gb8O)U; z^v^$Q)Qp@TeXPaSI=T5id7$o9=-MzylhIOiAoEM;l$c6jGyZ1@c7%Q=KCDzz}rvBLz9=B1KDYtb=?3&>!>E{*&yxIrl@kVSQ7IUFv_r*LTcIg}!x z3IPh#<6p;G+$2zQ!uRTFx>E9_~2)mjG>9|36x`hmqGyIkq9LILqIXX=pgfL zYaq@J7CKNHAj!tKt7scmm1A!}ij<+ST3le0Xy{oFV$H-=n;zw^OeBydMU3Y-hse#2veG6S1_r+9&PNx1m5o0XolvM zl%`{Gsu^{Nn*WU;{q$PzO_w{(lP2hwO*Gq`Se3M@-}Qr{i`qqtQL#gEZb^#UsuaOp zABxng0dN*-?R>Pv4gRe&{0Rpl?wc?uL>A`81nde)6JJZskGL?V4~-i4n8oK5%ySz# z8uC7MXb2;Zph|p;Seb0IOTkUa!Da7Fx4@G5y(*5OrtfzcHoIfIzu%;biLR5iqE`%c zB!YJ%Rp1`4Log!Rl!NJEIyJg#BX;%UDx&H3jk5h`;Dj)bLQD8ZBbyOIqz47{aasy) z)4OIordBt%weo3l*yw7s{9GruwVZduXHm@Fc$Y8h{5tSEI1IsG3EhD0Ow`w?Jp(ur z$yDIO80I;rnx670r5~0kEqPWKR>mUi@v1R*GHS=`XGz0N*8sk6xl{WA+l}z?mQ8Pn zCKIr2EQ$+L$7lQU&cG9gTEQ8#L&UzIoS<)7@cX%~6XWvI2%)AfqsG5$y*nG=oeVMd z8X7k98qKp@cUru?^cKyTs4e{oF>I z{tV-aC=M&H8rsk()a`QfeeZx?v;l4;b9V}-Rm_1^p$SEnsI;R}hp$a@Ud11cYR5rn z8sm2<5p9_xteYGxBViLj_iIm2PfHeZfA@8`nVA_Z9NY@vD|qw8kOSCS=v3I6V>DXPQigIyYsF};0yCx4R9+Bb5CUWp|{X%ibf##SF zR<+WtyZ`QFL@xaB+A-@OO7Gt@h_(Q0tfn`!{~{@WmGk@E8Ppm59fh~DJ~;rx#_F>x zq0|+rZuD(2iU1S*U(ap97sTsZhxxB0FnqgF6tLye!F9|euX2~PploKgsyNR6epmfY zV!%YE`uB<8O`u5)!+%E(5Wiy^4evKJ&WzfLR-w<;_~+@R29(!wYwzj@NIRfr@xMh; zggTyG+iQM%VK$n!C(2AQ55e`1W1+}l7fN!b@aPQ zm>2s#v({~2>GAO~!pQ<+b^pfkMOrxi3}Co2 z3C+{A!a#Hge-(rGap1{#tq?6v5(V>VY%^^_{O!_2u|xvpxHTT0HpUfk<6f)7_4M@Ith3ik zcHumzzXRpT)0c9ZJzKAOIy6x(l$Jzt^dDCr3mf@ZZtEDp{F%o;_WcibBcndE;|*M& z5cz0`bCiMV;{>pt`qxMV`^6BIKp*9`{c$nOoq?|`m14ALT+;1ARhuA^J7{?pAD zKViyKcjN!~kN^0;bv>{DuSXI$z<_EnV9GK<@kZ+diIawV*L~}Fkb=$5(!uG295C>P z$Ij|}+*?KAUhp^V2??XF+37;NMaTR5UF#>{g#S6P1)lFyMn)2R+~@XR%HhWbd`@B9 ztnNnvP6R*;uU-s)N2dE=**i3d6})E1^TTt-T&hB1beg_S;vEv^WHJTmX z6r9WDH_z9SyRT1|Td0kVjf-7fIY177qL&vNb`321zwsIn)PFw0qc4FaE8sj~tvKu7 z+q=Zdiuo;sI>8)(#ryjD-oDmXRwDNNd3m@%62roRikSWMY3l0ACp3~REXt+${PMep zRV0|%tn9x7CpkTiLIMcKhkl2AeIG-#%cI2WIkF7TF~{=!GMybNuP+T9Z;6-A;Gq2Y z!o`85s3@EX>CN}s6IssT*T;dV0g-UlFgBJjHVtpbeCJ~<_aZ<{B#M-z-<*I}lxtV9 zOd~85wc~mCb-S;vhpHlTor;BJyCA9Gf)`QC6#=lB_q_U4l)tOfLqaw(nSU8vkk z+mKvyKsP)SEuO1Z-&k_);1Y!YUw8$NY`V9|AOwEnuj>PahnoU=anmj0l9_~n)uYe~ zX+lSY|BYU3ocUg126=}rcpx1G-8JWgr`w!6=-cY^LO@Yuj%x(|8fy{b1nvx%qOi%A30NRbgvyv1-R@_q9jYqI1>4g^S{h#nrk{G?UR@fa|pz^4DjZnKUDSV~k?ZJ6k1h5Mg_ zqBGA~E#_Y|>Q}X!Z&zk#jjXI7ZgyXW#9%g-pE+3X)}C%Y2+$QTj&WjBpRFY&(LlBw z=@Yy!v_wSNe0zY)#|F^9!pqx!Q7+4D7;$@hH&CwWM$7oedc9S4h6}u+jcvg98#stQ zY2`o@v;nW^G#u1bln%kGJNJcXq4k{G~VA{EhCDkRK^=6yFh(E^+dIc7&km)GGLX92W0( z-Ba+Ih3}&!>`v4O4y0tyBX(OIkd==w7 z6V*sh2U>dS8jFE)wHxxU%N<|2q2vA>LfpXsEAv(W-`^ZC5tQ>#oTcZ3J26VM#8lG4 zb?o1`v{?QE#g18KP>0*D=5iQ_SP3M0qRa%^0&C@oRy)VTB^9!W!M||wRj!VAnNBoA zzETte0bh&xJCy*4-y@GNp^9V3ry9cA+)te=_}=MWT%x|`w}q9Tj2$xkJdu=ItZNPc zR76hP$WY-7PIvR!vaNqrX=oS}^w;e(#H8ny*qc>J+b5HZ* z7LdD5Tb;x8?gH4YrPW5ESxv#7-h+hr_37bMU>s!!FD*52Q)>exq5vk`i-K2ljgYUM z56G5+bj>-n3iOwk13BeBM*TY+4)|c0t)FknLGF;mwSR06(~|+g-|5)c*wRw!wcJw0 zQa~68K+Z@-BN@ZzMGpr}A!TF;(^8kgI%iAZ2)G+zv!Tw$req_Yhis61TBNkrnQg)V zUQgXwu|hekidSbvG3*WP@R)Y$U8 zds2h_E0rg`U|hKuZq7bFAVav40vyJ#1kRebu>^`0M3zKh0p92AaaJ=7pir&to-*5b zMKrCn;=Voo*~_VCwn#HCN|wU@qF{=ZLt$-R z%IYQ|^NZ;I?ZH9b@tAS=!{_5cSrHxQOX0)D2f<7}yp}77ibfKj#W*(wdn%6;aJ0L; z)JqHR$%S}!jJ_oO^wBaZhglIx)sGY`-XgXRq*m{3_fEX@S9Gq?xp=&oE`gM__@%;r%k0P-kG( zG9?*F}2mE(?S>Cg&!uO7T#SZBL9fKmT?NC#6Q9y^I#jfwvLTwl7X++fZHxTdWIS+ zfYI@7hWV7pSllnnBpKh%7hElpX!46bD@BjM3%}*WMqov;ls>7jq-5w~2Z5Wi^5G@d zVu9KbxM61(u`ka%hfsLipD0gBGNh!YE`xXa!_M&VL_tH%x4k**iv%XAubJyIvJqvw z?+x!58Hq-OQ$T%ML;Fm=7S`-^5?jqwSjAW9u|2^zz{OcPqwHa1RIn6>$K@;)RO{yE zcC$Zrf+Fk9X$SlfMvVf+k1pSUS3|9m`Sazyn!ZBz!Wl_%7sOvC|9i}`TF&!$#nMLaGA+< zytmonEX}eGHm`2SH~HtQr0p}x<*GkAb`|fbO)*ad4?Kj1-jmbw*W&k-yqbiWpY;+uQmH)8yGaNrSS}V zPQL289bd!BqdlT}n^|2vj7(y?qXCWUV$xa!7_0&$TMN#EX1V}WWbSmr82bGF(j*{I zTj#Wp{5lz61K@=Br}qu(&!u&B2di-a0VJEkoNn-iwoULL0A?X$Z@@^T`Pluc|I|$r z7aqV45dCcVfs_e|pF9q)nJzREJuPMk=FJnyMKQgMK!p@* zA9Mg8pWgEAhx$xRF)TQ@lyjB**0~BNu@SCR-{;&+U-KeGH-i2ExA?W* zZ)_-ak|`mPD5IX0I5;YexR^YNU2?}_db;*+v57B?D9GXAA(c)Rw^87K01VcM+QNz| z8Xl~X|8J~{wgV=8 z0DYF5kAC{gb_0OOOwZ4=23+$`e`Ihw@LqTlCvlndG}l#BR4m)S$NV2$kQK-OCl}Hrg3zYNqcax+mgz-9#uDlDXd)=ag9lQwWPX+?L2ID8w0471h?F57@D= z`~?VnZ3o_;JUAvCmGAOiir$L1I=KTl;T1lLNFbUs6;$J1F46U`6?6zYK~DP{_xo() zRFS^}da`t$9Gs2r0o8?D(W4i8FR;xwwF_Ka$F^`TuN{Ap+yHhsA%(4?4WXMxfsy@>4}{zZVz#T7 zi>%v+j&`GwiX@#(kKMtQHA=hUIrB9oK9{YV8`9G=o`HzJ%6zOgK7eBzAc+Wp8fcU) z7eJglC%zb2F4o}vqm;Q#UI@Z*`E{}edmHf62ANk3h-YC+i5KR?qc_&R}m4^++hR|Mjv; zqBxB_N4187F$K!E+3_QRcsKVgG_7t|p13ZLr?wB>ABKITX$o`b+5AX^tcxa}$FrzF zXry_uQ=7}gGSeaAeViJUax@8uA9P6!Sj<< zQRsVV`sAHDS)Kbx9XJCkiT{tDA?*S1&j~-(`jDMDQof+N%l$&-P%ltKoFsBAh^-}q zN#NGg@UOLoVu}Fr|C3Wf?r5?WHWzb5hc*7WpZ8F7R_zn=8wJ&znP!EP?hf(zww%d* zCWMb=DwrK;E{6033K_rdMYaq=%uO{mcNIz%&}(5$QzIs#2$fA}D%_kzQF=exz6BB- z?eynBK|uuu26}^Kt+%-}T&oAvr~807H&!eyR{^m=KZ!m?<$Y6QT)^VdZJvFjwQ|X# zsQSwJ!DZ%O+)$G}2hE9)P!ABSt&TEXpROAqt4Ako)7h}0a7?UCO&OV(rZPB;N0Wj1 z4J6Z{prLg-ym?qz@32qat9+U!GTY`SE}qkDta)5*!Fu3te#FP1Y5za)qm-H6-rcU> z(43Gh_Ishfe*LPbpm=2aHE~dspU-U&!TWl-z40;L*lf*btGk{j>LOqQ%yR$`iZP}# z`8Pu7A=RN<5)BLE<|$=@&+&EAJYA`02a42-bWG(J{jcvz-`}}?fHG6Y6J=CJ`BP8# z;I_<8Mstu;##i@j_9a()lkqS@ZNv9*OP4j?i%#yb(7p2O@`VmJEf(k(=N&7ncdI1n z8eTjT4r|Ebpue<}~*J0743 z%RtEcdd5y?k63k?0Wa*D+O7>~J@(^vL6pWAJ?a`l*I--7?WUhCbjwHmzTGiCwl_a? zkLe@;12s-ejxNOuT1)BCrC zj6Py2!Q>wp{<3D9D1MxlFx7e=MXh#8OSAeMBDpXx0jwYeX*}&v>)k9iDh<$j0P~If zQ&anX^3P0y*)hg|L)BEJ>UoHhpUYeP$b%@oIYV#@1wRLz5C}OJ1>NV(ESUHv~X zbR+X$?&13PFJTKWTa=3b}9BQHjuo`LsiW6*;Sj;LCM5M4GppCbYp9ep)|dv&1&KtT>FmnJS1 z(ZkhgEx>zB9)vioLrPSNE-}Y=Hw1Pct*wV+R!F60j6zXXs@!{(u+mDx708)&PTZz} zRLcecrfuw(qoC2p?KzfR%9^kL16Dx_Vub%q1e3>|K|9nWK}t0}$Ov(pk|F{Xj=Z}c z5Z^O&jSCYBn#pG>RsPLQms!7FIY*>^NXG(v1d-*iH!fWuQ1vdHR?7xr_^B@Q&KAui z$Fw@G3TESja@Gs+>R07lh+Tf#fos}HPT0*Nzt=R@j&|MyS1Yg?<#@lnLNlw#Qmz!(8B+z_9{Y%Vn;eLKA!i%$t$`A*7+}j2@;fWEH4Fb zZMDYQ@%;YwB8#NzXacC^7Rfl_kKWuZ=r zXFQfR#kj5YRN@Mt<((VWuA3rpMP|N_wU_ ziKlFni9C0}+J5j#%&cLA1M>3`x)A`#n%NNVF?fc`>Rsm%24-Jlp6 zNUm&!n!3HJr0I|ARlCX8j}JB&ACE-GC$$*K=#Q;WU*8-eJ_IS={V*Y}i@!gTjX%3XN7M|S zecpOk)hz1w0-(S6GsN+&z|8Zpls&0#DOR7HVr;<~^iG~q#J@zn5&b8Y0kY-0+zJXB9OmB)CW7flf8`h8b<8kpg{l$%R@Z#U>}^>Hak0O!~J1Fc*x2kEbrT5?#3&36pL0&6}ItC zgC9|bPi@s;=;(VYf@OmYr=co>RbjWEkXiPAvmr57r@IB%WH@^h)Z`Tukn??LTKr?2 z{IWqSQf;?7wzyMlwm3;=3KOP|divjvcp zE4gk}KfH068Y3eEd4=m{=Zt=HC;Y%`;v6ahH+o z6B_G{_VC=tP7E*JZXr?b=>LM5DxH+~_V!Y-0L5|Gh}3@}MAu6Hi4eiBjZOJPpnnF; zgey(BL$hsE+lc?55aE$EP(PTj%{>A42VL2%OnLV_)D3ZTRKX8xN(^DlA7#sm1$6}` zm04=sURUYj4nUl}_;|+!#iEPjd^A-z$%_ns)7woiP1nKo&S0_=`M>ZdwyXM?mFuz_ zhxG~Um8ssg#HH2cbcKYOQfn)v1`*63vcg5}%aG!I5 zw9sSwE?)X2CsyrcWaJ6&hh{;OrB%}B0BE(KC+y#9`npHBe+?=8cQxWlRZ! zTjv>17t7GXc0ZQZNbH9q{C$?A|GfAWcs__RkoOdW4T z&SZV|R@4lbjQooQNL2iyB}Z`Ii-3SEL@@;d!Aq}MyX0L=euEa4?_@-` zTc@TelQXX@H5cYU0s%%zi>``GF*57LGOB*J+IbQsR6ixymq-Gkf@4fROH;HObw~XK zcM`5_MLst41%MAYm$-VrvF%TVP{BE1KqK>hEur;PwOYe5+Z?aC z#EcWXc_^4v_o!(zsioLPN70i|m;h*$F`Q!P{fq(dHV(~)jP(QP zJ7l_SHpu>?<_l!s$gKozcNl(~`I-5{RKeqAE>0~`CS$D6zOrdk7T70t#R)6l#eFPX4=bA8z2jy`F~oA2 zI>unYSbn(^$8f?eX0y6$0M1+sJwfcI!Xs^|s?1@I5>n~b@8ogew7j$I# zoGr=Qyu9)r)+KrD^o1O2m$rJ&eV!z11NzE|Pu@;(&JVI4goPubqFjvSin8`6viJQsS_~Cg>&t&!KmU!4JJD0RAUmCVA}izW-uaVzUgh6upur=;MhfB)1pTR zZ&U2AKxlk=iqY{hs&+Wo1+wKaR9b(HwA7ZS8XHqostEXec)97VDTKAKa}TNK@_+|{ zr)q0?(eu2$EiRU*RN`SZUve_Cvv0Jxa3CcaPeJYD;~smGyDGHa_oWQSXIxF|$6Du? z-qJd_;e31!L4PA2mJJsx?F14_PK3f5JGnMvFUpPoe+eUEqABl<55Fomd zK{FlXQXo%uU-rYTZtc&LOj&&9rp~koNrC2R#jFq58$a!bz55zvt<%(cc~|=z@YeB={CPe=wDNT zMBMmESTaW%ph1d%Ji#)WxdIG*haQP*y1Zgk0n)Uv`}_Bv#P4FbLuX}a>o6G zndEh~5z6j)y>We#k@OGVYi>;;(Df{Yuh`fv@bc*u@Z7wkyn66!YkT_*jg;Ad?qz$r zSPj@}@Y;M0jN{7`q3uxkcj{|UPQFBuj*d=1gD*;w+xAw~cpj;#spuL&z4*N9H^a*} z0s1Rl!EIVo&G~$Z(3=}O$yWD}b$)&dpCD?pkhfrN8<^1Yf{J~-!9i##>TFrDi- zQOs$tD!N>!vrm5a+fon+FbooL^w|I36=?6;1uSn-?FBH z9ZtFx8Mz~z5NbD#atDIIt)9~Vdj{tKR}++ zrW(n*#2FF>Hpg^`M0|3-*eLn34em|hDe)neWa`vcEqUJfyrR(tCWB4<-U+b)|}# zm<67{5wuOL&h;~sAHD`BgNOrjWx6N5Fq1RmRbXHzo=CEM<$S=k64>*Jkd{s;(fsyz zoT1J_7 z?|}Xt{l)++g$dgN6*AYH*ue@^aG|qHUY=%Q2ixDt{3yJkZcvmN=UQvRdlD?_L0*#T-z4VlkZE~uVGd@D)#Lkqo3lY8h1kQj6G)fUR;Eq3X2a37@pnO z0b!I`IfK1KAFt@EU(D*-TO)iOgaEfO}rRZ{!~qqqW3Q5~89(GDR;AtIn8s4S(x|qD_!{ zhgUuQQho^Ai4XW`E0uT^8T#3IqwhJeC|_@aqac_iV*5VMWPg@7Ki1gJ zh>znR2cj8*(uoT7BFixcGDIQM;`}&*p1$sNyva;l{mrhaxfW0B1Y9w?x~4w0lSns_ zoQZ2(#rulgFNkHY4xLr(S9e?m!|7i#Lzkl_^kDKgo{`+8r zKVWgN{r7u0)W_j*ToKF{ygTEf91V~Y^r1(eSf@4q4S>`x8j3*@HU7gz99yLySJEkyW9 z-3xfkrhQ{DQxvkaR8sEMXCIv>&_RxsHmR;FJ;JwTl6E(?HP(&|$C!%EnWsfrF-x z?#Csj<(poeFCH$EY_3gR{1wVC-Ea)?Nl8cwzowW7h9Nq~(vlGIlC#pe$yprE7oAlR zBa1%oD~8`%MLgaZz^+r^$#Zg1G~7M$ZV2lo*p(@yFdAvWHR+Tu)o_~4dSxh4l9|ip zvV+iUWO(dOgo!F{fwdz;K_K6}M z9FT2x?_K$1daG9Yl*kz%XQiGcj{pkSA326Ug947Bl^&j@P8cJOpciDQ!!xs*%lD1z zOV0YwkeR{H@E}XO)^F<4mR#cRa#cec)OL7w|GYvGw#g9RHg&seydzR_)VQgH<<(^q z@Z-M~jI596f^~ZRt*MqI-w!g#;h?|6yle7@O79$av|!m;Gz#2?4&C4RkyRPi_}J&| z9$RjaQ})^5?6csV9~M*8cT}`$z~QRGB-LV9pIL8A#;Jil7}97)i|)+wl&XENa*nJb zgt!lSsNY=}Ij)vdgmu=xFZx)iV4&3Za7I*VMTK%UbZ?JN%1O`kq;k@VQk8MO0~Bo% zVpLty!VVLpuv6DU!j?hwlRBAjT!dIHXX^V}PekzJPHN>BrA)T)sOg+!wBc1Fss0^T zlH~go7w_c5W6rXJ+NLHm(P^CzCHEtpf~09)aYB+y%-=07K2~QTnKRAJap&h%5hVCP z3F~-vT_ac!W&ilN!AKIY#j0Uwk3MqDFwms|fqsaJ4h#%vsH$RxT@I2@uQgs(C{jm- zG_~1od5A_;g8O2#e6d-Yo^{AR3{PS4u{nJ%q=1kdfQP~%lS0`)I9_NiP-D}ecoCd8 z(`>%<@h5zmh-sSHzekYjNY1ol+A*D+BK)|`6D-6sE+pLx3B$w0d;l)P*O!ftFEEgR zAX1aVL1cAu&w_$%KJ(AXB68f;Rb8T}0S}-W%4W09Ed}c@xJ70BI3V;C842y?R>h$C zc#xcIOqli9+Pbi^vLa%R1wAl>q=3hOz(>07LOV1tJ4%;<<^hUuSDAg08_tx+Gbo7B zgCvx@7(-c)-wt+HRQ{71?>biVLyfQs9xd3v5^Go#nZWPTx4ea|G#;#$QooIxY)A-! z6p<7K1ti#KBBiOHrfC5hxygH@)S{4oagiNKiJ12$^kMzNT@c=;u$? z{wDd}R`oG>1M{_Po{P6Fl{L@ zrDG&6adJ|&4#OrHI;<_aFn~uO>sH0Z&lkJFOS6E7I3j}kh9-toLxmnQ1qNkn(T(i} z#}W_QqtE6BOOwP0!7PZ1E&8pZ&KDC2t=a;M80CP&HkjOoxSDTc$PCcIr=Ul`D~nzz z<{Q?L4rr4M5#b801+f(YryTq^S&(iKc`ppiZ-nIc6iGnMi(7q>FoFV-{|n@$LO5*J zQ*Y9T=l#-G7H`(Sl)Lw5#vaf?U{ml=?|5cb1$>X$4PEC;LbD554$k-OE>%zC85bZB z|HGP#PE%7G6euC#`_WN{xOnx--+{K~W@Hcn@2lAY{XxfTU(Fv|E4{4`Nf~c8h6^XJ zpGrz@fU8m6-xC~&R+kIW)b?84t`^RW%2H~bqM5k`9~KH>KvG0qSh(+cZ)5;Kt0a@W zzj-}}fsC!KtC->E*1fB$5YU~ByCKVtW^}$8@19h3WF{xOUaa%P{rdfMwH}ppD0xBe zs!}wwr?PkA*lcs$(KP1__o8#Ug1Z6EKhsudMkuYoUJOPg9qW8u5yvu#?WG{5R79X{ zx41Ts4|3f%u=R206z27Ov{h7`1?=+LT3hJ>F)cvN3@4n8ga?eMirVJ5x8%ovL=dl6 zz)DF4cD*H`^XA?neX>+h1ck2u4zvlHb1v0NnEi%9&Px>CR2JJmo- zz=*Q3-U?itr!>8jF}hvL;$6seI|{B?&7E6!fIP*3VLVVSM|ZRO#zLXgqTlg_+=>i} z*N^~Cpn`TP1rDt=GfK726de`<1d?2cRlFgk`)n*Rhtp{rC(9!ONz7(U!C@qPD);v` zWbu$?d(Diw{3GDj2q7ZO9}Co(z6nF9?&fb;N9)zfKlTvkia0C=CnxIE6n~11fmT}F zBD@bhxzZCi{48uJ`PUxz&G7x%Ja2dFm%UYSZfOAh217H}602GTxq=Gx{&imbT*F~A zTnUZsB)I8UX$)jJq8s~uymaBJ0UFWjW)DL@ES4x?E)2P!dWk zI9f1{VjGzHoI6JrFc8gf5EpSbtW;Z?FN@1IYcv?;XE^X@ap!In2{ZQ659V!`5+_<- zS%?6!C&O=VkJWH40P-SJ&_vvd7Da>oNL#&@LUoYEoZy_0+DeIf7;BQb)PQTRRqC? zR#>_8a#Nsi5xdt^+Ymy;o)aA&tP=2==g-H_-0GPaEp5K`#4u+V*X~IK$MFUJEoru9 zVn0z>@jfvQVBhxLL~Rv(ij-%J2dpU{_{3ixWtmoLm)BVz0rjYu3rplNw7^#K7WX>i z;7%QQV`DVHUGK=G(t4H3V;@^XLxUZZ%xt7AH#tS80jT=3D&(kE%s8p4%dEFH@iJbT zDk;6^iz^uDpNkdPgG_BYT=u0_rwe?}4iD8C)>b{8hU3-t_rCx}2C^B{$S~`c*6rqu z56jEyE$^OJeV9V38k(A|x?O(66e$DwKX_If?P4YdXlW_#5nk_C05PpgVt5Xx<9Gl7 zYG`QCq`x>l#Urt0R7tBEPh}qIUL|?cZ`Li{lI**I(PIIFHZ%Q*AlxC)Zf zD;^XFyk#YML5_!x&;o_|JEHyUP&UNQjg=ZQusD=TO6 zc+9KTq8zzZy=kweG!TC}mb*xt5Vbu#3RUpV3%9d*A*gt@kCkOkC; zEaquN2d2sub~jy9b(NrH{?KQCk^$<4UFG&tb*SI0!hAPhEzDMX*splG;&ZDyOpQ(|p8qiCLeSru*UNH-}v&)FDkSVG7Li{ZKN*V9ckL}+jsqDec4pGtUh$}tQ~1zOs+( zJ5uWZ88Mx^?osKT3i+u5>6-j_#`qd!1|MCQTYo6@gUNH1JYh`6)6?CWm>xy zE^2SG8^ZVMm#JbaZ_|(OD2khuTL)rVv?v1s*n@$y5spXeK@#xS-!Q?kg6Fcdi7d-5P-RWZLT(DfD1%NL`Y76TUOk+CnSu$y^I}+aspa9RHj7|H^1$>(KdgBjj{)|T<1?!l_uGWCL;GD}kC$!pkfWN7Rm4U9+* zS!@xd3g5fpTG=Rgb1GA#NoQi3#S9A`?Tfu4RJ#;E2 zBAS)|8b*(m=JM{EyO;}i9P1sVA2;dhsdswhPR-}Lo@Ct(@r(FV^-Y*+U~!qrpmNwV zhLR-Bx_0KUtYUs}3-{5qt6Hsy5cMqP!%^_!>~L<3JaTRkL9sYqenHGqkR0 zLr-s7;L`Djpgfnq-m@aP77<_MuyRO?KHGHdy?tyIF0m~sq;+oNO>m+SC_5xq9*?kb z48xCz2!55;LDW~)zw%Btd`Q)Co2p4~Cx%O9oh)xUTJ ze*rIqX2aKGE{(MC$B4_wri?txMD*6j^e5pkiI<>JW66kU<_^CI8Bn$Mgg-I=f@Qpb zVVOU&nq#J1XO*eVqrXI7GZMoB<`-i49_(op9?EJ?kn)9urdwe|eX*rM(dMuC`w8Gb z20A{XyrQs8NB%@kSurs8%oG{pO9WF}U9S80*j?Cj#idfP-8Jfvdk`SOM?eU0 zv$0GLH4b}Em^v!Wo7|tbMv_+#ID*%?x+mGN9XDe5^C$wshL788*2z55>f}g2R9$Ut zZB0$+>g&LYi}iwb1=E*Dxa@=K#kskMmx~FDI!ho%dS_6A6jd;RF8#3QwPbY-8)xVH z_lIQWzPZ&_i^3$mN+sp}_S>J98}V6g#-Yk1nY?f9MF*U?xChWk>Od^RuGP!G83mG? z^Yiol-uQ8-cXFzYhM)n06Ck)-2=4B|-66OW+zIaPZow_MySux)!(I8`z0W@Hx#!FKR2Nl9 zcT=l-^_tHdzd449rQu8S^5x)iyeFej@y4V6`R_o`9}fXc?dBK6ZB3g^Fl&fysC-th zY99;$L6MTuQqPC|{7(`|OeRqtPR1br@?MacnHhxO-)YEkZ{|1qb?30IKD99#Z8#je zl;!QDOG#apmI}A}A%PpgcRRj6%FhKDv{C+s$dD(IFv>j^BDI`l|-!JUTRiA zh*D}r7ysV$=`T0)jqwi}M5wg~m|;jkHhgnccLmKRvc+>#lKc8re8vV>7b=FfCogMh zEqTUa{z;VZ8s49P1jhu4ub-u50U&{my8c&rKz*4KRzbRRHI=-+n* zIv-UgjQOCr>_Mu6bt6HH{c)F2o@L;a6It=V-+L=A5luc;$DT%&enC0G|2?Zw{FyZ( zvg9q@w4HEDHiQsK;K$%fiQ9p9{wBwoSmyPETp>CMN0*k@MWzLZ&Y4ilBH0y8g_&WA zy;0lom83dn~jLuDOR*rcqnm()EaFzOYAhmZ}QN%vYqm<5-qMBlHef*NLx+KTZPtPqp0ES=;Vw z4ihJ}tiqgceY)yBl#`M#$t0Y15`)N~JcSaHrN{O;uBBHvG>p{Mvw4;}bSG>_hs%qp z8r>g@s;gOn-*t5#xf@OQCtjDUwtKTc}GE!1i&ohYfygZpqIFMHf zqu|Ic+!wPbomg~50G1jR=P!#c0U?gjq20?z4w6k-B5pAQ1$lJr_jX-F=HH| zZuZB_{2>T=cwQXa9+#&IYB6Y`ZtK>Lj1+_86@39t-k8?$K^8?nD-GWW1(Z?k!pX$YWmBQSs6=crlCL{qSQuRy&RnwJoNt#4X{7x(P|4L5=%LTx zGJz@Kw-g_~ic>|TX4>HGVxMX~e4g?4*sp12#3_bc()#>aTAC*7XYP;5A6Qz2T}TkJF|(?K}=*DADQ^^Lqh}A>trH#6#vSmWoh|&G*$dzx?FRH zm!H>d&d`#leP%`@|8UBbmH7+mT=^dNM@kb%kW32KG5!}JiQ&e%WZ!iDB zffNg~26nOVnQFD6qOx*?SrD)`RcLX2y}RO4+y_3_>KRzb{{Fqi$v#Z5AmZqFD<1#F zVyS+7V8C?mPkRR3L)4`>nlgL`ztl`>^Msv2=HNGAPNQ*gX^88xMuPHF*uiCCCIp)* z=X1|GYfyI($5^CfPL)!Feos_pDRciMepg}KSiit-K4-|Eq& zsJIyP{Px#N7Rp|~48XB;PZ>DmwvB6%m#Ii1guHt)>7;~&?Hxs-W+IjSj!zKDK5@$a zDe5C^_84_g2y>;7;1L@ZXZ|hg%?Wc=oZ*{?_0FY8grA4OzJHwSvl-7HzASL6MsBb! z&@v$R{WXWMJ#fs(BX{;^&o`DqQA7P$b|oSHuER@M;Ak<}Ab|WmwHn7PH_l9?+dt;VL4Uq)9Y5s|z6UbSLp4$QS(q!c>1vD?S@c`6V#SRX z(0{_*-8^$E{)yAyW}$wo@$;4*8Tt7sBStg|?ucHP^}I3kOMbAhz{ipJ8bgugWBPdK zOy?L67i{(9#C7rR2e#}l2+;}J_q{qTlX1g1-9M=@3>xu;3BeO?3`0Hodn^MjK|fWi zENKEb4g@%L1b);R3ir$EZjJh5m%v?@@2{Yqf{JUViqC(n5xk%h5-kdh>7UBYm~Q>F z1T`&Fy)X`F%EmUyv}AWk4OB7~)y^JUJX$`djsj`)aVT*?1os?*iTc9$GvCvl+*ScH zYMUOsqacIGi=t0qI{iy~xgCi&^}7e(ExrnQWCa=xaS;+RGRDbNu8b6vRy(m0FQ;Sw zgaX7djuEeII>FwM*^f^ooUBz5A#4)hlgy1q!%v%bw5vu1^x#XpzYIfQ*m`G#q5?8S z*iGU`x?vn6A*8$c9<7Rfj4N$86Qs2>d(BRghlv!9W?l3GnK0RkYmMxB=>*uvKRLcg z=yq;Vwo?FqBoz(o^}`tt*2tEH#cy`Wosc(MGhx=k9ID@h+w_=QJs7=~QLMhlSVq5U z#zg{@O$*X~Ij$hx#x`Fp{4jBKeQc~LHY+L~CQlemBwl*ZY>u9^eFOElbAG*F?HQ=@ zobdLlPeI}7xVT(*Xqddd@uB87)6pyTE4Xq(NZ&?wh&Lj2y%adEoahM@uTJXq`cJFGN^ z>Dmwhcsx%BLy6)o%`9P}s-ZT|C)ai1t%@ruC+3?e=cfL*wkyoT%(U(=6MpuX*6-WO zTX@OcM}%7mT6S*KJQQDUHjY_68h@Vsq8ydDUp(|o4jFDa2YYz0-(QcBR~HCbIOC2~ z&YyxatCRmP2e9D$s2alM#_jqgaz||S?i%-X^PKk$E$at30Q_{D%#(b)S+p`5O3)cg zh`gAKX|rCB1`AedntR*bGS&Js_e&nmGElwf?e1>59O2ZHBMR4|`}pxAN9xI_&7y|& z(#Q-FUm70@mF*?G;omhjUwF88G-iKbmvJ~|dU$xqTB3Cs$o?|tHtTYcUG}8=-*JKL zyPbpjZwCEOj;2^2B6x~Jy9ng-)Fi!Uf0&BNeJq3ffh z5O#hOH=s_>S5eAbVmmUp!i$L1xgUz?8yz%yfvEt8MIBe1jk@2Wml5{TVTX?n(MyEm zu~%8Gw#w&Aahve>gg!jDC@ar`UlBK7`fU={j1CxW5&b#Pup@tXdwYdO>7RQ(s);FK zpG0!(=KLUj$)Rx;TZ6_1$OBChh!49#*n!V_qP2A6)6L0_(~qaR)qT&%qlFr?K|y~v`ygVW*AH$^KtE5(5uKg2yK+da$h_~7H#wzFVqZxf%}Asd z0`uXeenD7!C%gf5-u1l3G)uPh1I$1f3Ti6c9-}ojHhfyp>H`B~^V*=Cyn7(_Fa2K|b%wCvcQ3SMxCR9!O&w5&w9wb=zhc^>YS9E&v1ozrzZ~c=U zOhRQ)vhgvi(?7Vtm<&X5+zlqD{pO2+5~}G;xBlIW$E_PeAnsp6rkDFy<7x1vP$Liz zZ!-puq2Gxmm~YTfBfan*iP)Nl5%%xu^<-7EFZsi9C34GZ8bTz<=#D0qkhY3?Dqw%V zhAb(IJ$Q_|h|&$fhJJxdH3@2s;`yFFiehe)V;xmv3_EWD?wzK0&w^+77`r=v44N@0 zajnqKfo(4Lc)up9J~{bhL&k%t=}T)^Gl?~H`#`4q22K8otxS=iKln8@$rl8rQy70ao(OcP5fj;yigKd+_-sTI8w+0SDv?UMph0(Qh= z#HhYsg5zmY0~Xb?5FC(77W`9kT2K^SLS8b7`g@(w-jPSm+`Tng$Y#0enz+W!)fg7V zwp=auoWC<6ShsgLFX!Q?I&+5-K2wnW_y3(P@c%qlR1(;2nNZ5z zN=TAz9`jBhJ<2cunWLY^RDl>yh)P+U$`Lwf>H3*oXny(Q{6$HDGMBabUsR)3S&RKI zcTk>l63HJ?o=L^PJdKG~;T=jGVS5*$2mS9?3sx9&s1R#^5$Alj7p+;6Ez8b9!t(Ia zr#93mW>KCJ^C>b^dm26nCuWalJ1A;EEy3_vHhMkc?K70G^bg)RP6?`D&QEz+l>_zD zg%Sx>WqwPvGv=zP3OpAjMGk&K>6j;F+BjxEd=he|&p$`ox6U4nI?bWo26M5EVNQ(sN&-5=%)QLOPjvcrD9bM7XJ@9zQ@jtRY=jL==~qeYYk6z}#7>>zmO~yDC<__~bJ| z1W!H@OgpML-CAbHbuy_rpCu(Yr*<#}fi|`No$~XtsiO$XTrs z8!g*Pp>z8NHJr$yek^&!I!iPI%J9deK+Yk!zWu+ z`B}wZWiNg*!Nl?1#op(Z=>7cka?;>Y!oR%=~9Nma3=A#{G(_qS;4ZUFEg;{Ri3CKQX_ zG9W|h+jz=KCPL0`4|DSyZ)Tq%dqe)AB=JM$R z8P_Fidl%osVqVTFa@YUbtaosZysJO@^mD8%cRo(o_b-?c6n+B(OYV=*{r#hc`fzQp zFIs<{dG}-9H>GWMB1c-a&eJQsiI0zWb#ek5AIXSJ{lxJa%5qUrX)np(A6?l+JXq4^ zHZ%x*!SuWu{|$a`HY*j@m$QDkhmoIOS-IhZ?1X{gIh)Qf#N4n%&W^oYCk5{ek5o=7!E?!eHe@Id-md#O~$IrpiaN zSvg_;`GI}>4LGARiH8O9M*C_}rXDfO>3?F1n7!7K@-~=%=^tMDB4kU1_ftTm{GqtO zf%k6t-$)YUYpkL9Hl{T`pcHAR|bhDv$72+ili3M>u(^aN1y+0x$B zETQV;gR_i8>cmwKOAdZCCbkW97)@dR;Dq%swyDS^n4m&k7)GjlNVY5f6eJ3= zPCg_Oe6>Pm<+2~rBrbP+o<@gOiz{mBfvg}spD?bW+lHL}UcMBlf0cM(B;5_SybMRX z8pw2QOa?1V7Kl3L651G}#@y>s->NJndd4yTpAxp{J>VrW1i^ja^jm3ftBJVMqm9m=8mY;;6b*2}gh!q4n3SAxoT&AVq7sfw& zT5q#_CreHfW{%VaiI;AEwA5?@&xshVc55=d2G|{KX=*spWA|b|#e8bgrDb1n{;1%B zbqX)`kqp{2f@5(6yv-1kbm!fGpt7=R7pdgrWCxPxYY?A$QFNg^j<$2xwj5ctwM9N& ziI&a!vRG~P>V*C1YwdVjUdlagtETKYvHV;UNs`fIv#DOFfRAqLy54acj;{d&Fd9;? zROJ@#ejUeVGs<8pIA$scNu@3{?TKZ=+1g((R^>Y1n9pNs_1QH_0c+<@ zARM)_Gn^a{y#|hnE-x=nPEHD&_B%0k|L=^Hwl66pkSSyQgXU`j(a`90xwCk+d9B2a zUy1yz$(-1jyX&TUgMtU=&W$U=s=B@1w8#Klh!M5r0?2(0eKmSo5!rR=3iUT+^F}n} zD#8+4*-ZO&u7S8`^Li(I=lNo*zwo;uTO?SIq@oClTm^INeJVXWXV?2~a%NxBQk*lw z(IR=>DOz&j(3MP>v8Y1N&x9LwZ{LmlBbLsR6hjJ~Mqfg14I}rzmv!_mnqwcS7jNTl z?!2S^trY!x4%?FyA!LQax>=jff*JwNTc+p6Fwv$B3Mxtom1i=>9@cCKhNz8&DHU=K#wbT7zVoX0 z7rfil(8UI+Z;VvFIE!EFaA$s~X3sL{I}qAB!A;1Cheq3{e*Imbu{~Gj9B#}!yFOKg z0-x!Mv-UhH?_7k)uLVfw^Gj6D4!HLKhG0o*IlG7V8*O#$T593#Uj;?Qvq$LBi%R6N z-m-jv7y183&?W(huF}K_M&)Fve@9)kz{IrDom>jeIXmb1k5}29e{qHf1}pv)A#GQ@ z1XYUDL8G{JzoC5f%>wl+S9X?L>&&bI8GM=?9?dU{;$aFAk?;)PWYR0ZNq}G=?i}fUd;v^fsPuaQ;nVSlk5<0Sr-n-9XYV`Ego> z=t@?nkf7!g@>z;3n3$hY6o|7hD9{sg(ED`FFKLMq-6+(y@$r9Z(g|t@$beJd%vjU; zH({fB2-BPcn^0CVw;gn?m&|y^>lh0R^$N&cbvfn4wqc3j(a|WA}&rxCVhUjG>z1wH5D~j4+nn=YxgIEVSun=GP@eW}p zKa_$aEcRMvhoE()IeFE$Gt#x@M-ERLLAoJd3dA2i221u}dR+Qe<{uV50WMmN`>ZtN zpWrG=lwuT=%0o#q!eDq76zMqI0u2HiUHr}MZ#NwLb?&fc6d4e!50$=FsHQP!Rrf>L zr(i15M7a=C1OrPs$zy433H-BSPQ(Y566o6D8Y@WNItikejk>}A5|v>9g~m;7Ult99 z$t0Ce!p~52c3Xpy!XzTZl4i8z_l>BKtl!qif;l6MRo?)7C~LIAf$w$Tyzk9_Im;E< z#?bSDjmt?o^=B<`kcJNN9dNfW6l!4S9l=PZQi=vGatAj6`?U)`om{sU3Le(ThJgx+ z2!$sY5ND;kinIocRFryDTgYvu!P+Xo%jH3|86J;ZfUjTl(B}FaomexNi-=DMPCXVK zcQ2b&z4;lj`1rDUJSSKKo4>q&6z<>@Y7*vRv%oyIo>Mp}55f_92M&YAlT&77vB=V` zk41?@M|FZ(l^6ru0T}Cn;d9g1!O&K5IuMCd79kLPh)Mqz#7Bp4KlrwYGGc`zPt93x zOMOGZCtI%P3xxE36fF6}+`Wta72HCMj;Uzjt!H-BWa{oT7rg~gI#|DQ!S-tSMI{VT z(8@V4T~U3yiqyD(Pga~gw4L1`jtbwT|DR|WYzdgl*5}9)xC76>5~b0i1_i9nYI&ZW zwFja1x@%rsTxuv-Z@u;`AM}PK&O@`-89dxau*ff()KXjLY1ml;**oK5R{xz$ONuwMY~?T*ptiLQ3BjDqm%@O9 zwqjw`nts*S(OEw}*7$C&8`1;fU|&?L^ao-nty=F5m6T@mzQ`hTOUmXS(lH*kAQSdg zFY}CAi!(`-v1p|-8^rlF2tIV%wJWqId$X3aXw{_aw=G)TF6fypaxT7FZy;xO$V5gL zoGM~keeb%P69@?cfw6&-Y(C-SS|)?mqz1LhM*i7$(|Oj5)j%{sW-F5qn;XIE7*Gt7 zuPoe4jCg=V&r$MtXL!K2-TiHH+pF*y?+f^_HFaiTFyZW*c6ImnH*7$~?=2`Vsablq zUQmBw=iop>+Qs^qfc{2Gr*Lt%xUMu_zGrhhetPTP*EudQmbA(Vb2^E*+9resLMVIO z80>(9Kh32(;d1?q=7{w>x0bT6>T)ZSaA^RovMPc?mpKT3@1o=+HawK53D{4C#zpvj z;7f}Ct=uDEOAkGwb`LG6B9`g7Di59Sto)a~iBE?d-g_5z2F_#sVHyh8X-sw4Ir;cZAT-4OIr zq@a)OPj8^9rIIwYCmtN6cS$P~Mx!uaDdVfVXZz15#rj4~qTl3q$r07$zY2Sg% z!ImK;U{6Y?Ssvg602MvZ5Wv_;h=`k zqt@TDRnVgW!zv??-4^vL9U>{qj$@*%BELrYs0zzi_ct=YSf>m9lo(B4|5qU{5p!C9 z(FI5i2w~I}%<2loqF|M&I?%EHSUdX=ORhYO80UNgt&R0&>U!O|RZUJFCM!c55@v04 zf{-^yB^N)F2pmCY5j%0!9KT z`Z)d*@0nvVTVg}j>oX&X+;%Qons7m+RSFgkc}{1FSkdvFd%rZ3e;r$Rr5*+7thU3` zrmUIDvs_tS?Fhg9v!u=4{vmn8O3beVlf}1ue{b)ua=*9WilXb^EWqOMFnAUljijwM zolZvZN)?v9l|%TKhi~nZtikWI~vJjg5^g*Sle?D_9*<#meQ4O-;xjLB_geVPPRD2?wtiWTH=& z8W=%Z>zwK_KYc`8?3?FZ=2S1aCc(ze&B0dxq_|iVCua>lzSTR~6yYt@FkVN?{I4kb zdYf5?nt~4W4cHOATAAuRProKQ2J<&ArODyp(xe?0CMKoQMb#U;$@p!B%=W z5>(osyI2wF)jVS>UhwHGr)EBLa^Qo3jXAY9zGb6PCefs(W@eMf+X_lb8*G-Kznhwx zDcz3yu{$nR^3LOM|8A7LM>@m&j~|!Mh5+1qXf%f|vjDB)X2nDbsUufW5E~$nezCE2 zjK4p=S_P3+1fZ)v!K%IOesVa3^^019x-WbuuvW@$bx!m6oNi)n#&y5kuZUj^XzwLJ zF+h4*v@P~9?mDwMH9r-{OWT#RvS6{9@`cjlJ0|Pg)RS92t>Mp-=UG}i{D*HNYyUQZ z*8HW{QjGPXw&>7sdO6_8=bzjDFdHx1t)*lXYew-!0<6Y*((z>^sfmJK?eE9)$OT-I ztMBDlXA`>_9~(#>E$wrk)|C8di9*Y@-*z_Qv40l!cpG1e)}BpAD4a&IuHcvVdo?qZ zrKTMV*~>BAUHdcb|AQPX&yLJuCJM zPwJn>U`8`_GQ@mlrVp`03%*jPU^SkaW||!MCCEw4(@Lp9Fm|XtNgkC&%qS-5EJBRd z#Y{ML>2`2~u0Z7#ms>1F5e)X{Mgd9}B4YVYcCND-;O|`Lz@J3p-uZZq>>a%<<87@{_rh>^K`oIT4=yf0v94B!#HkzH$ zLd@m)@on<$|Aqz>6KV|qgrPwIs0TYxcoO0a7EwY8W$=OG$lcUa{4iPaX8bZ2lQu3n zIO@gGkV(_609piPm|IoZus|Qkxud%rG#p^=O-HJXjCz^FVSPkoNdrQgh+};cqtT$pxeilMv>Y4crq17&VL>lO;d!`Q9uYH4={Om zbei*jAOU%$jFLCmv4dJ9*9I7gs`^wwX%s=WFVCecu%Q@Kp^&B~0adXD(Gbk5MGY9s zQC%qLLv_|pBpuyNp?%-r3~f28p{{#3Cm$l4-jKQeNE`8LyZrDDs>8xuMqFH+imJG8 z*t6Mv*Wq{?XY3~w%W>(n&d$zGThcxl!ZT=qNgG-{9}$$c%c88jdfLWYK3!E)Bls}w z56Ea}-0kPn9S&5{%&MoPz?@wxI@uuJcJTLmXw%>&eKge z@5IG@0PSuvp~$6Dz=2!PC30(SZVsF-2AyWY%;slHo6dH5t9f{AV3DZnJzrUXr{_}- zP$vuuZN6z*wHO}J?5fghu6#+r8l{^BBP+FBC~K_-M!6UTiw&gHJys`eQ^Ue8ePC%m ze28}OsHv@e0Sz?#>5jm;lDN1yOUsA;I!fJ2HdfZ#%GiQ{R>^UYeM+`^SxscLX>#CJ zmcNuH&%d9UX-Q9@Q_T{MCfg7AVK|y5DXRe5L4qy9_5}H~#17N>Tj{p85!=-2Fxx?& zIML+^i}MvZ1?Bgo!C>(}e;Z}*cW7Q>zH)rR;5Y3@>+z7~VN{-6%371Ukmo8nNiIG6 zYWl`-@_zDB^JPAF6fzLNrNRZUICi{3feiAhPLhD0nVwIO!ZdwA&$T7v5dN)x80*|7 zTN<>Au~=3;7Y~swbwJyE(`=tw682pTulL7>zD`wBKI_qt)@+s>&v3Y4odo$dC}!?{ z#-Zt|K>gl!3MTOlUC9zzR8FLx5eVRaV;%mW3%Mr+;;VdC+arGd)#EDMfPEoT-?fZ? zix^Yge&Lf0j}H)T)cc@HG&}u_V53V-G}(ye*bCNg5J2B%lx}7dXir{jF`dqE2B;Hp zTNKzP@o&GU7QgH3lYYNXuz@>D0zK0CF_m<2sw=!>suj1J+3Y=Rl>!KogsGtX;pgS0 zFo+_7bR8O(Z2ppMMocCUV{J|4K>f?Qf=r1j=onV7#s58YBCXK&MBJE9-mhVQ-J z)-TLT&E&C6@ToSI{Nk&>D|B-n*dvId9pRh7GIN*5Xs+7a*MsBEJ-FA2E{z3Z^OXp~}-`A9ReT}-GUk{lq_?{o0 z0rD~w9x{;P3opL}=^dM1_(&EnWg@(G^AA~*fp$2N_@UoI+^ib z2+%fUXO>j|(O*Yg9{{sS8gs;ZVw$|6G9nH6i$lZ&Mh5-1hug2%M@+TiDgEsK823SC9t z8<lbwtL_a+Hk6;ZM? z-5eJHoQcgS+)8(|%C0Xq*%h17{ZM7GAc5&34|{6=N{1Si2PcaA1od)~A!e|~}TLg6zR$apcF zgULxl5@9w^ME(6Gd}RIK>D1?d=7DM)7za z*RzaU><;klz0{DS^?YFPthd)0V6n4z`-zXJER-C*2_$i9p-c;TFxuI_5bJg#Z zCDx~dX<8bZdyw(&t$?dG94;y=!PO8c%CX8l}<69oxhiP zT`t_&NlIp=&7|O2*a*))PfJ@rZ7ZK9u(TY^oj6j~oDU%^sJ;|0D?`IaE-dDppR()j zHqaR*ot~b4VBZqnwP6u_CiyhDLP?<_i2~u~ae6}8NgMeOpO=)%hk8Z28&6V(<{OYw z!s(p5KkzNy52$Fet7}Mf-Z4v*`-U_9oSS8lUz=LYt9+$2zGca|h+iv7m%e6sxKemH zG@(ZFR4=((%Ut9+++^Rf%IvzNG{t_B}ht~rlPv-^$ z=>C=n8N6x2PTd9g_WUhc!2h-DQ0kwv7`|Z)_>W`9i0YSJtMGRlZaeugsO3qo=AI96 zj@d*1z+g}MR(T$l?AxC5=o>5QcN5M1PyL?Z;%+DGyEb&!=h`;|RIcG4)y+U8b9#Do zdb)fU*70^WoFHP)nb&%P#5L0Ra^-b&rJej@I`mjM6~j3#=^Md+Z?p__33+`!teBH=1HJGXI1Y5g?IRh0{p}`DeN~zx9P< zZ>Dt6l=*Sq2rHf7V!_M=OaOn`8-H(mDVv!1aWKNwnFjMMI>g#m{}GSUD-ITjaD@Z~ zfniCxieX;bZmRUxkgIpy1fEOa^leIF zVs}@NI0%hZRA*&cqM9eQn4G6|8-G49-cI1T56HQAzirlU& zcOcN=&%u+#HsCQma_5Y9rICJ5R)$vMVsa@ChpftNa4ld?1Q2rNoRxM2S`o#as2@n* zg`^0k+8d+~X)bJUOe9`DmG8PLU$w^|rt{kkn2=UNAvKc z*|_5#9~)acI$9bV8*8v1iIxV(u!OSjg}+CkhcBuu686DC)3Y*vG}Hwb<}aEG~Anynj@bHpv~Cu>UsNxzo#5>S!(-NJ zu1e%ZM4YecW*jJ9K&4FE@K#sP(rf9m>AuZ1?AM4SVpX47h)ehor7=J5BXRE^IIrp3 zLTb88geWCz2Pe`$0}aoOM^7cbG?^doT=IDy_v1dA;!I~(TB;>p4|s{Rv)NN&v~y4j zn3jaqHF8D00UM7r^u#3DdNBv+InwH4a%f*@ercKK(4L?;meDUXAxy=XrxL98qt)2H zr*1A!Q^P*I(as>+G3?uNng*D#y$GLkL?au=5bCN0QkS|9UEWT(v+aNUbboq(*1M2J zOhb>HUSLtwI)qEaH&i2Ws@hK7ffq^XL)Wv@-&B}*P>*&gll_VlwqiC`Dm83 zq6wydP;(u-w(3GXE8voohEzTjk}xRFTFM!ijeGx^)377RKlJOBW^;%(Y3*lP&8d4J zUJ%e{q9_MsbcxR_w_Z50sv;*Z`l!-tV)ctrk6emQ)^CwpzS_?wUbO^ zN!HJzB}&tQsOETaD6gbEXYYbz;l7Y}7tHm#2HM{Q<8jQYbTPhOnd**8v4%syb@W9u zP>?_IK{9BfwaLp)_kAxLLH>EPCW4)<^{X``?=K&=8+b4eGgaFc_^k3xl~~@B;%z@d z*oYn|!HSd~VdYBLTGSE@++MPJSR;M?<9LfPyW%RP3iBHJ70@NS4PK1t%00YtzHipm&!0wI-EctnYkzXr4UOQ`|oa~2cRiFk66oY@Dw6u6t0MNH#Z_^5>Df2iOZ}FsD zgy1r|^m$Iah(5q|@S|k(ar{kd`GvA43EtNs{AoV&e)mK=14;AO02ekhw{9-5{pslp z4pluxYvce^;FXl0iXqMk{iZe{I>cHhPOMZ5Jip=RF5X39pVYU2AK66TlX7(*4rr~{ z5SIS!n?f5EgR{0|L(0v~loD|PBsYGZN{))fdYR`-3pDb^Yg~8RNh{Gh{gq~UdEUE| zFXetu65oHWkTL$-Vqxo{?e%%r2Dbye$mjr#M4DA}nBoh`2a^$^$@TBdowDl9gwhDF zTF#52bc11TzNa<6#k@yxLD++0Ce_&cR^Nz#*~44^k$^#^F+3*;R*_mhQvt$%5qrQf zh(x^yT`H7|hO7zC8Zx^N0THO=B5(i1N~GF90jryhjKFFrMhE=icT|p6WJkj#GL@!L zm8a2i*J??6SNV#X^W~I#|8MGsT(0hY8oH~yE9?}a;_PN6OmPuMh!dO(duP5P)0Z{J zAp&_$qFg8QsV#iLg9E#4Iw=&d4+f@0lu~aGnM)<}q$&l37B1qqeo7b2H9W>^z{pnj zsfY@hK)ILlVFwJx2{}ODxaL!unQo7xkFzHhC8UA#8P@%p46UJNt{J z*l&H*<)gksU6huY#VLFq)ONK#dU@vu@%TQI%=JqA` zpzC2r<+RU<3rQM6!|tdH^p7%6T$3|ETJL=%T2VyN=nPWK?r6g-I>6me`gWdsH)cob zwekW9WY~5q83xvbI5EY z(z2f}QcZe1u~ELzqLWJ`a+wTliAJ8%LV3O2rau-wZhx&loH-gso;?TBa-B)lBvHK|WIL(dMkj^YJ)1 zCPsFDp9Q@6`9Xjn2PLia=)i-mOQWPxoGX9lcqT)dkI!ZVbn%>nmp$Zkd*>UYfJC43 z!uSq3%>xdbgI5zTtp4yy2k+4MDu?19^O zmQ~_On2!Y0!79kYONEQ$vtr-C4|_ymH-|4DT4pK^os$1C%#ckW=M*I-Mm5$^0RV|A zp6E8uLSs!5>pJl zwwJ}e!|iZPw=hPS=$$cNU7Ec7L@cGkSWiJe09aGfI#A)%j9?z0C?D?I>4EQjr9}K} zHyWC60f&NJ_)YyRvjePUZ{H=XEN57H0}&{+T7=eL0hA%5pK#pbGq`3<9qAmAE9q3( zD#o93lS3%A=gYE+Vked{1wx)+vqB+#1ZBYai2#h*j99Eey-=}`NB<_%`b*+t^6+VdvU`B|JSoHIMfXa z02$*88tV0e=>8`ZUke=_67TOkX>C-}&ZvB-+E!*YEIUz!lq2Pd__13N>cE+dhZijY zM2k1DhbL9wsL~|?DG124lB{7o45{Kg?9l?$5)PaAw&#IYr#fh#ega;HRFFsYOv2p- zs*UD8zwx{b5Fa|6`WD7;&)r;w`&kB@p4srf_`C1KNTY!n3HBc5mX=~t&sQqlg?bqI z3~haoUj5#b3lR&Q?dyJ&@~@|#lAf9jS6g#=pB1i_Y|)!?Ou+dMS?ai+t|tzQh1J_5 z)f`D~XNE&?yOWW@P2hGGA~10-kX_F<*Qs}YFs-~h@?4eir>&)Bx?rKRqr=VJ9YhLA z(SihsOh8i>PEURPoMiP;X3*}VtjxpS9+rc5W|rWGz58SWq}|^9j6+?9_R4RQ*T5i? zo11W2iiFt(m!?y>J2ww;aZk%_36iL&-Ly+QqRsW2V%d z^QTt1>LioFz-n-aPuS;QK0ZF6NfL_AlBS>zQ5!W`(dq3k_4kD~pKS&hnvEWQ&i#4M zVNL4}9#PAHHQx3pk7oG=gzs2{TTL7F0d%_JSqYSJidZ~GYiH1vu+kKRO&_abAN0hW zpXN?+3%+@}h{x#|d60MmgGDffvF|QKAT6u4e>ymQW@$yWMcHnkkJ5&+8JP;lqO4_c z$g>PcT>3yX&#!-^IXLTaS}T_H5^S2wX?lubFGZLZoU!MFK0olj-&Jh<<|AsE#(>OZ z)$NX<3dz8PADGQW93rk0Pa@{x#Pz_jOc9EfW5|ER=kbk6tDNUU{h5Up8719jJLjJk zXb81)=X&ER&UNtm4=qM(@96jl`{E#VgU8Xnh-!0;E1!S*re@QHVZ1>VxgFxj3}F!oD3$we-sg$S8WX=MtM|u<=j@m@TbP$~ zr@Jzhvh8KT+$^7!urO=m&YH0r-qV4A0V*A_Orvh}s()7jHUc zN=w@yyyOy5Q7RS}7C_)mk~8fM*sayO+Qa-CVv?dZTw8}*slQGO=6@bc6;2l`n=vJI zbbJdFy6i;ey^3th$XJv1d_d0|TfWK2#xVNzFdB*Me;T3dT zyKH-P-`%(%+mm})X?a^8koa#FKpmHb&Eu(Zex=0<%o>$aTiEmVcILQlb~tW>(`B|? z!UNE~Q5NSLkVToULDol1oF5%s5}Z6Vvlz$-3s|hfrJ*@?RoL3D`NoOX6PoC8IAd@u zGqtg~8J&{Cbyo|z$v&O5E>Ptkvls=RK3I$yr?a8> zcB@utE<*Z~m@GL<^u9MWa8qcvl?|B-jaAi8e=X=A*xV{3Tv|e;uM1=AD?(cyZ)jMs zmN6Bs*GEWF`$g%pwn`)*lGmIU*`QP`LZ09fnlN_$QN4x_?fcN`oSq4*8a_8`oN8>F zJzuY!im9BU=zww~A-Eas%W(4_NHd_6Aij2Jl*J;3%a$utP$e>B>{<#Xa7>{I>pFI! zof)p8F65Y`7ji-9i0kq_@g373?*oe^)BLWpDvQRo^^GmG>29Hi4fy@yuSDqg$dv_HY4`Xi`RY$X~i#8f0!JQxp?(QDkg1b8e5AG5)1P!hU?ykYz-QC^Y;dZ{Y z_Fa3Aea;=X#{30SySv_gs~&sw>i2yY#Dp>Z7#&Y9^kXH1#N}s0#SHqL7r8 z-=I|RKovpuiyEvT1;bCmf}9lme%slN1j>%ATSN@L-vw_)5fO?=q+x>J}ti@ywyCDr}gp#WfCVV&p~;+6N!n3 zwk=6Y%GGN<;bFkp^DPlOM~2VqvxDUfYxBJ+k}o{K`*>6j-ZB3E;an_22CI0y8doJD zDG3JH<2f9N`-z1$ceXyN-KtxrTE)f|m;r_+VC&WAD>p2>eZBQLG_EZFNm1o;;;BO^ zvvn?Z)p`I*U?cH4Z0^q1H9*M0#>N)hfV{uly*7C{u3O#M*x(20rZcLWxs?#VN=rv_ zdGvgqonGZQm~eMCn8hErHU{DbP)R^<6&=BZ3sci9)sio8Zj8`Wm^44Ra7+-nSIm^@PdQy@H*?+wt{Iq$x+^8at5*2?_tW0fX#XDK^XJ%$m z;31e2;ZHUCFB_h#yd=FB=DZA+-@zdQGQ(GJa!D9r}GP5ja zv+w1l{^iDj-woAwVx;g0NL&yQub}~b%Suwj%kr&`fC9L|FDB3>o$p2I`d0q{v#^DQ z5U&0Kg^y_-je`CgsKGYWhH%YkD+&{SQ+s_!2*RTrKTx4{l-nFxpVF!KF^x^hovecs z-^ggFiuuK44;rO!Brg8xNOop#)GInp*PP+M)bILTEzBzsekCfu27!ExZf{g=@0Zc zU+NUC2Yx#oU$8a|<=Vm5Rnqm*?X9 z2*)wz38)T#9rWd^xY}m19iHFdc?{pps5`~WYNWd@I&FFVeH4tq?=w-EBfYRd=;|^o zE89EZE;zPf&WUgd_yeFu#4FQT@* zJYD*Xzl3jgtasAcEdSy5#bd*hJ?*-=nGp_tAx9~O^o_@Q0Gljmp{y(hI(7MrjMw63 z=Mp?XTYCkE?co06q8i-(Z+tY&qHYEaYvbZn92^`pH8tJcAHYDOP2Ze{|5nyW{zONk8#U3~cPK}@3$+*$60MU<7pQ0*4q!ok%D ze=xJs3&es!bB<3mEAQY^NWN-o(6`klJ~YprE+) z)W~2GT1=-<=BhHdPN^o{<^Ags>bCeFCy71hUqKXZ4_rE-Au%puzZ*VMNE?RwORV4? zLIBmY?gdLMEF^GHgs2rJbhSnnpOPvX2czz}x=A(OuiJ!bYGkU$?`a?3biZw|Ea;oY z0x1`jh}k?mJAeugd*7k*gkVC%kh2go)~|iR8+J@5Mlt<7x-OZq-moRF$>JF6K^1ve zzKIVg(CZZgsW~5!#jTF2DY@_}9K>UbbcM!zYYIlb_8Z%dTV>>bmGMP3PfyA*wlqWi zT-&vTA(i-(=$4p0aVf3HQH%K8mDGRD0DfGeHZsAkHj*>6gRfD>?qeC8LV;^B9jf{d z3hVIc1&3q1PrtBjPAN6>NMmkIuNulTPEb3ba#=;0Ckg5tPHR`apgAIpSJ(%~w@RNLN8@mB*vxbUGBLxqS-aF>PB9i;%@;UmJB)!sw z_VTiup59g_`3eb0>Y$rcj%n4EK3$i+k&y{vV|`CY1@H0t9O1U+ z^%!rM*gMF;@OmNLo-KI_e&A*6{d~?~wM_Yyq7=JY10LKUi4lcX1!-X;;oYtq)?q%)cpKB_wr6W zmU|~`FtWf=J&xE>=6O9`jLX9B{52W&A+D_CdFS!;l@N8@ zVY0K-9kQ)EOdN^eVKE#ZyEi<=>u_c|6uon4$^XF|CSz2<{VG2&aNUEZKzVPwW+Nwo z8;_H;2g+A$GChX*;J7Xl3^iMlvnVQg1{a@a+k-xMOdA^Cg6!?=c)>LL1y;OafsL3{ zyQQ85SRpaukcNVNM)beK+;+CQrp{u44R5TvVEWy=cY_@XZ!3HBl5N!^+)bkb8F~Eg z?0ZoiJ-bf6DMY%%BMO5cQ7Z;!=f=4BR`eZ7p>l~-B5#7G65Ttzs};3Y#6%q-5j5(O zK2&>m0HBay;1qfYOdd!-BufFe>i9$AZa4|?+)03lIHG3H{oMqLXIx-maS=0ES|v}; z3nybLseNiHmcwc;1eM_R2WV&Us+0IS9~6$fxFH@H2;+RYlQR;@Ve`amI^+llMvc?a zsWmH>LOPh*Nm34!*+D$_lqt z;yieeeV%JRAO37?fJx(T2GL1oHMLf6RVFY)waRRCf>lRJ2?{V9NlgOHIYv@fy>6F5 zh>ezx?k_9HYqiA-+=p6iYG@71vD{61{5d)0m?$<`YMm=K>HT=aX8mxsP6EwhxYh;Ya9y|bk$rZ0#Xdr*ug_+roB5%o?y;mL9wh0Rz9qgZ0z}Gfr zzXe5lptJ}lSv4G&W%I-QC|G&Lq25vbN}n^w1mP~~BL%gA&EV3@NQv8zGmmBodGN1$ z6|u#YN31^EA4UkkHQ_%PX(vV?;${SiO_Aa^Fg^ob)Yi&bf6V{&MLCZzchr@R?D!IS z^QWekRwN-G7)uR~+T+3Z9>Lh}bzOy0UL}$?lA=lOpCls(F2sYIo3VYxa$+FOy81Y$s#@Yb(u*xw)OiB|2=$&T-VYJHr{lUA_|&PVe4{gDXID zQ+BBoLyLWVv)kRuN)bR-30*^tf{4X*hh=oGx^8vShHYv|+vED6V1()fBpQOZs&p;~ zF+EJcH*>G3tc4ma6a|{gac^wC$}CSdC6{G)B1d}qHi^gOB!YnF;gk`-8+@b0r0~Kr z0k~gWPGGo}i>?^0GFZBJjE|xB12t=dT%t zxKA4t^EPIUG0ZL_6z~_J){79ZVM%|_DdgS;Z-~Q6EUuzdLaR+v?Y5L_x7WT$^vF%qmka@4c~AcI%G|3nzTw62WCfA>zFS4NCDs(>)m> zauTx%TafHgmP{J#)D%X19NF?8r|qYETebVXV5q86+)W@f9U_}YzsS{i(O0&c90fw6+8|0{z+ zH!oe_rT+eGofG_Wq38)RDL3nDvZoWLvS2p?3ew(8<~|EAo zyemZ%tqctpR!UVV(ZCG~NJb%ryt`PEI*+^+ zP`0vioYK|QJXjyEx(SZ{xfyMLwKoo;_F)c*|1oiamC^H%wddspx7ZH6c=3X9fn>+u zlMP-tTwH{>AY#8%V>!E7>kn=-?+5)~pm@`*5%q8XhT=o|nZ84uVmvdN4`43dOFq{0 z?MxzNN!*YeSu=Uu&QozazKd2bxj%t zrgm56Vm5>@&$BxvcIUs>jr0AaF}$;3lG^ma`VVYxBQdmz8Mn%RMp5IUHNcnwJA|}({!gKprZKsyrjuVnJEAn_+NY#={?5&4rXl$hOD>O=c zYn(i&%;uar@$TO-HMe70R105ls)KUh6GZAfxF#TyWs zQ?S%B)cm1M(^}!bm(3f5Gp`YnLz%ZJmQgT-khbHmp=D?j^eA1!_4o6@_V4q_hEsRY zE#XWklYhBN18S8vqowpvzs`FX--Cl-?E&fKw+fiySK9~5w$^AR5*M318ksjInNHnP zDEx!+N|jFDAg5qzM4_Bfbo>M1|D*&!m5k@3LIPh@oD~VvwWalJwWab0{=_02#4GN8kL%7(plA&F`eP&B+$gaKE`kd;+d>ri67~iL> zAI|!*xYAAV9@0}QqJKa7c^pj(tDne%O5()z%5>>E=gotDlW{z@jdjpxNv1mqMUF~Nf?+08j9fhsKe#}LZ#j-J92WLh#jqUM*U}?_(UF+3^oRSsfJ0+e)c^)x*+^uINfB zuj@|L4nV9@{sN|x$hNuk$Rk3pe}F^odq5OBG>s(|R7z0zox#up1$~R{R%y)l4rs#= zcm0Ec=ujZ-_M4DCAVuvH7r=Ot*=asT4IcsQ;A8SCXei5A(5NU~WE1=StMU{2_UThbQU z&r5oa_T<3sV5wwbPoWC`hZOL~s;&RgU zg@WPgGLFtHwpJWI(=ck4!`2%cdA_q<3%69FRj>+QM^L+=`1yU-LBS&?J^FFi{Hfj~ zH(md~D(yF@z3;C59on=OwuO=F@@BQHL8k|wWNt$Hln)ZIe#;e^Yqt@NK?Z!0`UC!C zCv5s3qXM%g)cL1)kBHK<(aM)?kYPOf)UniUc09uO^wGwHt{tJ#dELedP=6ya{2++q zcS$+7#7Jp09t5qf4Ay&O;9>3dS?5^^RYVbVteGfW6dYH+Y1w8$8z9pp%4>L$Xza;R z(0MUB$?OKY|3M+t-PqGsNmxRDk*`u-hQR`+jK%EqTSQ}@v`KV)K9T^zBl(*#DB$gY zfQRn4sb^Q_%V_#L36%d$3IKq7A7>M~2A;Pr>cl05WR{;vWnkog8uLllZzwBxb|7I& zt(o&l7DD){ki&>kh6GH&K79T5Q8b{|f^2$OY)3zvGXlegS4hv2RC)%1*0ILFSy1;V zJ(FC8I{uVve9w$a3?9;T@8nA*wYZ_M$Z-LgW#M+wH6o;-Hz6riyWuSdV}e}vMmOrh zzCB-3JCCe}5=~@!$Vk8P^i)h-5<$g0-N2NHVk$=NrIabn*UPedsi$fI?Bb8~oLOWt zx~mc=7>YTC5ZXpE1d?1R0h&q8^r9=Q={SQ?r0;qnP{z0xP{$VyLMqjTpctv=Ul5;? zTIz37{>@dOaCgjzIFv4t(!mpMQI*iOjAF>d+$NAUM)*kbeQfRm_75|<8bR(4TUUz2 zXPk$vbBN}dj`Okq7{aMm90P~Yh2MhTjUXA7b?=<6(D2l&;SJ}_jK*2z{_!fw&8ATT zfoX-G;dTBTOpek9-s>OS*2Un=6ON0pzo77jATKp2Wu6JtY|U zb+qV|^Qvd?%)*@~$cOV)zO(wkW1rQG}xri^GNqI#mc!-t+({FH@mcFWR`>pAe~*wPhd%ogFOH zr+1_0n^bVu?}V|saHgd8PpUfhL@HPyd1dZ&adfFqX+|_SikbPu?lm<7s!nV%c`npj z8KY+!Rg1QAiWzx9T2vPoZ3i-uAS>KrM~4J-gD0<#TKdID|Br1eGheKS;KsQYAmlmp zqD9l^`rlS$#D~)ks(%J2#lLa>r;~A-KV@YOZ?>Gu0$L~pAsAa#&>|nX-}C+$(jad~ zEngFFI_632#ypFv`OUF$e-ja7Jw^O|-IemM^II?kxlH2N1amzmDG?F0&{DIW-5==UZ}3XN}Fhx7Bw%&Gl01BfZ<*xsw12%N1!v(b6j+60Ma(&}*j@(}-D zaBiVJ<9~y5J)iIID^@w=17EJjd%1l>ir| zQZ+!_5pWzj_afLaqLA2w@C{DHQWsq`i?h_>yNXt6icfyCHkyvrl~t>PfA#y2cQU`B zZYMZSn0B4vUeIax4+9OLh1BCkMYX;ZEF;>*8`KCj9H}I?pRJsvoUl)@zN=RnrBZo1 zPCeps^sgh?!78@9#MU4N(PWLUS|P^B(G?zaJ^+8FfZ%!Y4>e1V>MUHyYT{zRNCEa0}aS&HL#qHHh4&#q~RXV!ITRWmPJARSFps zT&$?*+pyEuzvtgCz6G0dyF^8|u~)a~bNAP7>8}>R7x5n$TKGIwX6R0OdT%?`_0@Y% z@tj*LXeXf)y?V=qVC$MGbgG58tw2mz_+|0#pL33LlQfz}^7<5W+0x8>+#C6Gt7b9sjy1d|Bb;+IoUk$EL_s>*U(hf%l7Y)*Mc#8fF_& zmvf?}U`&UtEl3C21$9y?g)O=(hpp)~!!@4@&KgED97ew~G|Mma?mx>Z7ft^pmn|%0 zZo25#$MJMAZ*VSo$cl8Go_?M1HcmuTEO7aYONTAy@aJrqPlIXGiFKl8)AY-s=_1un{bIt;{Hg+(lJU2$5|~4w^Enw2gz@`jZi}Bsbq&W z@qeBDM~t{T)M+-e5YodmyG)CRKGsB!;zZn@@>xUq=a)?kFSO$1hKiPWthABvLQgHI zRYIgS$+%~Ol1b85oiM#jxX4gAU``)LSi$R2?Mr-t0&cTnwSvF4azSEfj3{L6n~-m| zd+%lD#i5}iiF-b7H6Z0Bf21;{6*>c=b{S)H-OJ8P8pCmdAe<`H$au9=wKMyY(+FFFm#0b~c%CuMhRb2|0SsgM$ADi8&Lh59JoJ$!?wwTt zFU~QD14H@$f`LZR_Y3>x8O2oLdmkQzOG|C>R633q z!@a#57Gx8lpu(y{A8+WM_wzD$(^EKOYr%X-M@L6b&nJ*Le{F)}7{;nr`b3E(ZDi=3 z#?D)AX8m7Wfa6n-8(K(TCL>eFWlKEK-X8>ye_Ae6k{zvx3Rn~<3@RD*%vN{UhGXE- z`e$RDWgA;krElrz9tzA2U80@Hk+>ptw!oAnQ1beG+xqI{;Gk7$+<$%O{_1zFH@dd5 z)=d~zR@(Bgy~Oa0_@uR{b)B~IDnb}}3qILvx=`hLDsXfcS%1OjOsxW|f%ihr$GzM) zR|ae6=%~?D_A&rIrmQvI{7SmF{k+;Y(3o6?pP-Rhx>a0+2H|_06YFG${I&-CB2~+% z<9oqFMsWqii#qzYn)4zZsbB1G&iOh`_-rUVO8UB0F?SPU9MK0SvT3P=ZPsaSj;cdUMHdc8V_)>CtFpK2B|x#f6Qi82BoiI2!-?Pl zh1-uh34ExwDawB7w}bNEht2{9_ECj60pCT)(8Kj9CpTk6-{cR{Ncrjj@uk3MjGBTB zqOjUdj}2FZI|3mu)^Fr&F>zBh9QO!=SmGOKzw~&_d>l}_y+f4ExO@IUf-SGm=9sH5 z%-;>^MQpTdA>=E71n~Ni0zbXb7+SkPO}GZFz?+A~5V&to^91Jw+pIu<n{79v~=N zKuwt&m}B|fNT5#?E6^fOwLs^?#-jl7KC>QtGY?5J z1}1k*z)=Ch;g-W*yeU;)JsB6z^NXn1{(jmb!mPHTu;y3nHwn@0}b|9~NzgXUkrZ z0f6=Oan%Jxa3I@~Sll!;d_IE=pz8kXrG{p}?sTQ(9sYZPmpQA`mAcy#FA6$qN1=9J zpx&!-e4?_~-IEy2gkIMZPPF%}H99C>0cG%fpq?~%{^L)LDt_=@kN_bAVx{^xg*Df8 zrR?%k>js@eAg#f~OKb#G;xRFu*R6W9B+jMic|UGrczwB!oyH5#EzgzD8h;u)6W%-) zJ7PKNr4ayg3vFdby-`vRpp~S8f&x0&Eb+Qs6e#71 zMG}^QjAWXxm89{M zAzNt`gn-~+X2Jj;3yVMF8Y-&Rj3G}vc`Or<&*^0bZ5-O8nVAl*&RKF6Zt21?q1{A7 zq`Hl)L)#2_Ei8-QfTD^W3filVW7>1jdplUAvV=gIn`wZyUs>F$Sgp&OwUALfbD1eb zT;!NOw%R!C?>e$<3=+W=@NE;-_y^;Z7+MsRll__F;$~Z=LADrQ#Mop~#pM6%1$R;H zw+tDANnDPnU;bOD8qTSg0Gm|8ic)g`~BN;cx zVLRz=CrX#ZT@fO)E*ZKhx1n=wSE_`?uzV>^cl_>-UNRw`uZyH`fISaMqU$<_t${uk zOYLKf<}*e>Z{%{i7^OcvkGKK^UL%WwIRv=IQH zj;Aq6?hg6)`YEW{WM@nQ&o&ni|mlpYH5JlgYt!V7ZZFc$luv=DNx0uuyY&VZLEB zy}5tJ`IA}r<4v=r+3q^XkIRt!3zz!+vXlbTrJn9DueTGVa=N>_$;il%Yedtg*;t>> zPJP~#>Uz}_y?cFeA&x-Q^KMvV+>-+1s6T%mskL7GNJ0YcN6X5}UX$JI%#HT02%LFu zPYf`8_EcDrx3RSlSTTL#`ME+>O!aiv*BiGU*WTUE`8{t)W}kO^+3VDO&aHTlzH&q) z4Yc+XDp1x`-)jzcXBIWZ=~-TGE-W1A?cJ>!VDJz|Jdyw{VFUSZzm2nrh49fUBR%6Jd-#Wkf2dLf4I*pi_S^fHz94v1V^m=UG zPrNR-tsr5f0_x3*-k<7=u22R%yaA9lXl>Oa_h&T|)Fn1OT?~R03s|kL^WNVjC9+@< zBcbny@3k(rMlpu=PfSThVqpS@-;J}ZmPbmiP8Ni0istgzSUK&|8Rj@gE9+|c`|BZM zL<48&a}e;`y9-%?TS>0!cDcbH6|h}hc_Ci2 z(>hUG^?DVaN5=Gg$u^NrsIIAj@U?q*tHsj@;#)bLS7k_QA$t}ANX zn!3`dsj6~Na(S>zgjfTw8?XR-8RNuYS%92qKF2*<5P{EMSgb31KJ^J+TE@Oscm(@A zwPJPqt-k2VJUP&X(PzBn`8P`ihs%^p@lZ+fDQg~qth5iGSL}TL4$m-vvWF!xhhlr; zeJQhvR2n_qLbV0@E~CQ}zo0Nee%L$X>7RdLMZ$PJ6=_{7 zS4Sik;Oy@A;nV)LZr2u0_avSgM?m>N<>XVGC6~({e=0HG8Z^^eC5(~VM4B3PO#Cjc zAvsF-O*DF)hx^6n)xI0=MUv%#LZd$M(uYMgJ;}q7**|ET2`%W{uXO!Sb^b`6kFw@x z{ysiB%mWjZYSD5;X&k*HBm5xCB1^RjNer$upC+eh$tG3) zvD_$7(nAYqZD>$gJqF*--PCmFcGc%~gy-}J7zGj8Maavup`kkLefJ!E>fUl_zU_K> zBAa4nRjpT&^k-+=r{xK3rH6x(u5})TxBF4&7Z&iqaL9)N)7bQu*9$MR2_A5g=Kadm ze~8!@XnD*UnS9Kcvk1z`*#@DvhjIt-0$Jc#c{jpxt1t2An*n_)*H0qUaqHies3hqs zMf0bvuVa&!I-uSf1d{nDb3{RqrPb)nSH?|nXR~$#9sXfNhjefZiQ zdNcoJ#YI*E!}HTcwg8l%hezXvUBSUs0SLEqvm_=bUj)6wXWB@jQKRS3ZsL3`AqLLU zo_o?WJBWOW6Pc7wCq(3!K`5Oy**QFSxvNV#%c9k*ag*Hp?kpOd8&Y1+?Rq|Zr+b{3 z02tPHI$veJ-eH@XnhTL=Y|QDzAb$IxMNXcZo7=SB>E!W^dmQ|Q0Eb=Dg#vrY*t>&uy-}$hh3yy|y;?^z>9v7_T%L{G85fVPmr*ZfM){%V>l>Ek|oF zd7BNe%RL`Dvaf;=gi1zkd0bnTJoWb6+N{%cADnm^=c{pJ7CoVOp1s@%4|8grvB)a; zw&Y)%v7+l-F|^pAe$hK4%Y*W+5k9i5!` zz?|Qtq@?z)6)*#;aI=U(y~Xz|O87b$Jj7``tnUDJRV!9DreQZ0iU)niSl%yFWeO6v!_5*Eo+g zy!yVQXEUr>#XaDdSP=Z?HEfs*ypBl3c&qr0lngrrye+KWvwfLbk)XXMFdY? zWoAoF<+cctV5+Lhs;X>vvB4Gj$tuzKz2<&jbS-3i;c$xH#(5N#lB&_12vF~SJvFQM z2Bacrl$Z)UzTLbO*7cx!_kY0i5de_NY+@o=XQRXA^Rfssn0JRCrL_8plh~~_Wn^SP z53J|r+@KcG|6#p=Soq(p7e3EsB4g2O&y9+t{r@#VSWTg~#hSq&k0aA*aN1tHTs6%Y zdik=VhF%fMjsB=nLzpfS{V4Z(O`E7!ZuMGOR9C9`L3O_@&tuMQk9Rp=1Tg=%E5nXF z3^#vlkvauSmdjpq8dNEa!BBB^C&m=I(o zWI9#(5Xofldw~qJ=hT`_#*lWWDlS+_aCXMiX-P>-6V-hX784f!2HqHjg`tA%!`$q6 z*Qj(jQdV}vi@CzNcpDB)X&A=ulF`2>Lf8tL&=ym(kQxqJz+R8i%c1jse^$m7{VLJ5 zv-wv4cVm%KGm%iZd;VY;Ttu{vaddy^cfP^1V7(8`0%B-s(zV207tPp=+fH!8agIAF`KLOO5k8azVVSPCFOT}Hvu~vl_IwLx^sN~&qh}rrs@0FcgTZf zg~Ld$)rc3MER8Pj9>1s`K^Tc8YY6TJT)i-HoaXCf`z>2M%AYFg9+-v{nrAcM+a(rc z;#B03m|BN<+&Rur>U~+Hq5_Ep>i5Qa%ySZ|aYx}1j-k|t@r83ZWf(`*G@n+#OQgauNl47>ryFlyexVMtC>~d zf0es0cx1)Uu>yLHl9>h=^VVBACHGRZ2#Y9bmq(j+;fa=2x;t{my{04k6w`4}pk1DY zF616C%E?M4JisqoDL4#{#jL<8%sW`49-_?qLK|3uRtfd`GqrcIQAYzW`$E{k5p2R{ zF7rfMa{Ot}IhQehe>Ua>ZCiel8E#V?E7E&0>M{=^*0BrcW$!Jvdg~{R`@WxUK!;bi zcaCmvdLIdzHM|gX>|WB)(6}{;pYNr7Gm3gk#NYJi&q8NbD^0%uCare8-E65&rs(QDn^j4-Udf%T%MxI2NbD8P!rwamelW@jVh{ zhb-na`Qo>u{BHo_g^4yt#~E3b3rEL7bz{5vq~v0C7!AQqYXOdESi1v`nd0rx#4H4o*t8@6C`{yu5e%e3i+i;3|Z3Q(hc^DISE1<@;F&lPN9+lM2Fj z=}3G?Vtizt>0k5%%~p3A`+z*e3dV##vDgRepX%K#p0R2@zZnPd*w}{6H^L>D7F5^G z&zfuUDQpFk0CO@ve%&xJ;2BwY1?4FQvfBGZKJXB*+suMps3@Oc&|sM2Rj3@v%+>rg zyA)BKRK`jSt+zMIe4W+CoH5I(s|UKL(X3T|QA^B1)>2baYK{wvLVXGi!9#TvjDq-d z@kj#E00Za0aD30}md*?kIxo{txr}!CW$5nxTfu~qi)nu>!6RaYrS-E+GD_M*I|&>ice4ZXPJqTdSIb;F4{yUF}cdDM3!DH zdz|Y}UwQ-c?*_84vDM<{2r+HUBb`kWB2UDhUwhYCVuPMG#H2j_<4kE)pr@f@;UrDr%uU~B$N zVuGW?T3by+C7;2h><8|wOAb$+n%TRPrmoqrLBhpm&y68CTkP6ECZ?HG77pTu*aL>I zt@`HGhwotThv1+g{RD{xJ;|2LEYK?GNG7b;3Pz^p<&g%1_&SFLY6Z`ab-jeuc~G&T z?KFA<0{Iy363r=DWFbgDz9{0e52iP=HeDW8c|iLjjHBdrK$6j8e?JH^O@h3T@&n*@ z=KMBP5Cg-}=dp}cmCZl#GtLJ{s7peY&r*mblHJ=f{OU?FXy0wn>wQ2OnC`?T$B2iI zd|(=mKMNZOAX6g&*(8+kBhS1l@(LvMlGnvZx8d|4qFvdwDw^u_NkWqHe7_o!z$IPy zwnI-+%6sdiN>I1;;|rc`OBY9Twvcx9>ba)iu6*{MJdlBl#hJBO$4|kkCI6MJ1IA^^ zQ%GHrobxE}LOoN;ADFx~uPCP+4{k@|)gY&(8d>Or1@dJPuaK~ZR~YK`NTjYYY!BJk zX;2ZMF?tQCVF5u*tIL~F1M$=nwAHeK`S#952q6E-ZgdUu^OcH%j>?QXt%0cP=d20p zJ)TMt%Hm&hw7GjCu3aA>Moc#_Km9JWR%80}KHZwc>#+A8D$o~k! z0@oOlX>u(cp$&>81L20duy^EzFZ&W12lxresqW-7*Oo-?$**sIbAN6frI+*i-exrx=b@@7-+LsPQAvp^A)vlV0|tKgYWx999Jk zeH`)uNxpb**&pFOzoN4N04`&>B6ZTzl?WQH`9^%C2SQmD+2#B)W4MP2NZs7Lj=0;g zW&*~Nv>77ItN2RGdbJ&r8oi1rvJQonM}8YkK?~p#e5}5jAS559DIGc> zs2G*{aVOAbBgp^|98&Kyf&k(iws30nE$6Htp?>Vwj3`mCG|OvXQii_85H-LNgC8Z_ zG+QNSdT*Icsp4gd3A0X%c#--^A4r@=lQWZYRho)M;W<)-Qc;V)c8V%Xpn)h%$!nTu z7zcx-!x>4a?e;$*WtExn5Lb1Q6g_`Tc;`ieTo~;?j^q6L^&;8`#)auURH5Wc<}DSR z3JQVdnQp949YK|HaT$beQoF&i*XYacWq!ZANP@g&LBh83|oZ0u;G7>Q(oU}9T z)`)LVYbP(dGQCTK#(-8g69xHf7}aa1fQ=;t4e_%Stqc1}!*jWvFr4itAhF@Woq-g| zNI3Or9_o*g`ptCP2~j;xY15J8=eY*z*GbC;{0)a0@{5NIPky{k-%Qeo=s*>KcaK*LcNVgGmb5V_|oOB z^elv!Uc@ot{rAbcJbO?Hz3~vOPTPRGZ;DRR8Y`a|NCI!%9#1e;_?GAsKa7{Uf+PxA zNKv=)y-5aDFUBlJAl-@ft0X*f=@nOh1XoQciCmyNB{@7&m3T~SeKH1i>AGX;v>=;e zlNf@`V=-jrX`inFj;I1BL#YfjFwYf>lzY*oi3x+6h7dWIplX)^2^7YEOkC!Pa7nPi46vkyicqZA&Eb9$I?gy z?dgZg9jzC=*(Un#%=C+H5z??u+<1N;Nue$)kC7iX0xKsFsyv%jZmDAT+2h_!MpaHW zh%{Sd#DSlfCI=Lm1XXbe6PfAla51Ys=rWP!B)fMcIzd1N=ci^e8%S!5V5!~zH1rc> z_1oo1X#?QQ1c-=P@D{PA~4YMZLtBu^YPDg}&p zs$@VqYHTdL^mn7B2P--ZQFs^*s_7wo;~Z&9gK_H|6Vz2o6y1o#(ohQv!>XGQyvX~# z#ei*OP0#_UZQd$Zoig_HQFIwgb?qo3{L~%s69P1(5bvl2`sBoxRfA00J1|)!iC&?k z<-x}URfQtGA}KwL00QVsEobXZTtp*r zp@5aTxf4gE#1U-P&H0s2{zJdYo*N)r%hOhs(Fa%5G?g)zk^pho#6%e5O#srZ!pAkD zq9-Q2|Kb8Pw`q&cB6<t+Dn?cm%{Bupo*3#OVdnGNU`PIt;xKy zyn`b0q#OD17D=L>dCb!-4q5?{e>6c2mB?O1LJFW%O!S~F!T?za#yPt-)Mw_jk-sRv zEB;8BAnj4iM7k1Z_ zMvS%|)_!p&F_JXz@Cb#cj-V8!f#D~t+Ob|-C33hH+CVFXEy}qYBz7LvtGy@+otlS( z+qh`#5^0ARVFlvfTO3>K#w39(dCX3L?+{lE`4Pw0S9vr9Fu}ctxqMVxlRA~R|DgAW zq&vqn-ZRzyVX`m*yVQ~UHivXUJ1^*CFdEmv)JRoTe>X?4 zZTGT4SYmfPYlETX7dE!fDz2h>A`Z4$qr+}umiTUKQ(77ZCg%JisCKP+X9OBw+64U~ zzFU9e`h>>3|i|mjZaLV!9hPmOOeKakaA;wexw5-Y?h)E z+tiGIHesr_$4Yo}Ba1Sa^h~h&YR)QuCG{vxbL(!Ny2hk6PJ@3Kd%%&WBCO z%9v4?(C;0a8&*X{41-XQsJMQ2RiEy}Y`3ujA8B;tq(duR?*7c77!4Dsk#!CT_d|Tm zK)C(Ee}sJA1n*wo3G3%T>+_7L7gkt?5g*o{t``nYm5(q_Yh0<|zmHQxQd0Y-)YF&j zJstTwJh&&PQtKLgoB2pgQ5s{ZSXw+Ha6Y31Xw(t$gBfYWZvvQBZaV#3(MCT-Hd6;T zKikb=04RBH%KE>CglotEX~#r$p`6v^9}|xBn$yR)UKXGGj#&uI8qS+G+ieOvh<8h# ztdIQJZUUm27I|>`XT%9i2&JtXcPtl^47j0=@a+ zCy>dv-!|>0NcmIxRWN>FgX7s4W|}4;m$_YzBZ&um8M&BbDP=C}W;?I1?Y#JwguOKx zcIwI4{Aj-0F;U1269^1`oQ41x6H4|M6E%ny(T&34-$aH?ew}v}Edqu~O08h8K*C7#eg=ScoZoEf9G zxBd-Rjxd`T>?!ILj#4p?Dt4MMc#qChOC!Dt#aa|9dQo|p6mGhSx!+yc32ojB#uJ(r za@r(wSD?+#8rg8lVFvLW9Ig|QMgvW2l%@LNSwHb@PX-*VzU*>3WJJFagdFqW_}Z1? zx6pD2)ryI24fposZL)bMwC|$H$NQYq?_}4c4F^P)tG8#+zQ260PaJkf?LF4tgF9>^ zPAS)AXVxq_+M{XDZkBffRX+XWGlbK)>j@6n{MULAK9FDv`q^eAk=I4&lN|@AynJaIkhtN(LvFm#OWm3sCP&*HUix8calvk6V$g2p`UFE=iS3hEm_6vSFr zDEi~gF(}T{jue3{i^-!H%0Pa->y=I@{PrQ`>O%HBn5fCxx|u@uq1;kmtmok2!Q;!9 zFYN56av3lEzM*!UsZCA1Dsl&SA2#njOXDy{=kKe+u~F zx=AuOqjZb3i84W`P@UCGGGSs$YM_)-393MOhTb|s(u6sxMw%29@E*>Ty7#{)nw>t} zkHF*9ZH)@Xa;VkrISYLeuY$6E6Y(mAN_I~>_kozo^enI#*r6Fv{uq+D{sDn%hk>y2 z@I?T|&6vppf21|0PZ$)qqGe-CLj#^m)HNo8hP2LahBioV|5eRd3to zzmP_xq+983kOt}Q?(S|$rKC%`K|or%ySuwvy1RbM=leYG95eGCznNqB&+TTrz1LcI zT-WD3&)pHD^Yb{+j^6XOQc{Wq$f~(s$l%=tTW`rR6s!l=i&16qoV;#Onqah zrCO>J-DWtYe7_jf63y$)!UM}B4&?A~{Y~NiVJLu-F0gJbXn!iZ1_K*WpK<;16av^C zhQNnqWBcTzeO^)-{-vOh_Lh(H%ayslepY(=N;nP+SQn(jka#a(0ElxVWFs$wj4+(1zg{h-}76*ExZ&|m{fcIzcW1)dx_)bhWd zsKSS>@_=%@B%c8hlg=iU@=*gAfUD2#^7Hx0{t-?#XIHDjED>@M@hyy57x^}liyzcJ z1e&pa|9dM=C7wGjL4&ZEuBV{M%rR+&k+trV7h2~k;fu{zco0m0$SiS68`Wr72IY~= zKy+_E3onTl=$TlOg7+%5NDwRBD*>cx-Ggc&Q#cJITP= zx?px~ZA?teI{+J3lR?*une?aY%TxE&6$Z0LQ+~d!ynKA!?Lcho^h9o7KoH;c)i$Jn z*3#wWUfpnVRaJ`))A7yz6hcS{(9!)W4P4Z`dt8G6-JT#~p|BDmm=9QFOd4+CC1SN|tvSI=k`a*8(ykwu zBL>XDFad7vz1>|T!MxS#nvSRY-=^<)yb(e|ejCFtw=B6ak)fSke2YeLKLd70JSW)B z{>+ju9$Zen1V^zS)YS=tW9%}h^20LdjfDs0Mzq~YboO-APCGPxGoO_=YS<2Ow=O*TK6DP@@UxO@-xP!$WSSjwA@ygiC{M!{t2o<hx{x2kslXeJn-ugLHwuX5ew#NBY z*pVZmZ?i&|4o>N@G7k3_nUIh)9JXGJK2O|YQKN~HWIBd}4`Ypmg%Yb)PM5nfHvbLj~ zqtkWphRblNyp`rwG~|boxIO09Uej{=6zTM3@$pM7o{3~=Ma?`~eA(y#IDx)gW?Ebj zgy7;4xw`O!7s;Hp$M1uL>S}ZH(@B%Tic-SiUj5iA0M+=vZcSSrPYJliRxiM+pn|nNBLt9=LI`>lRE!DW%IJ{C z4H_%5v870p+gK{PPvGL__C@&?#>Lq0IrFU|`@5BxMS;a64D^SND-85xn=!GZ8oUd%5mTPRq#aM(Y-9{>2{5QPX z$ZuY~=VhM5t}~8;!O9@h;wJggUIEOFGcuZDGw!FB$wXqtIlCv06ZGLr<41mrc||bQ z0kOEW(R2!c%f;6G3KGi$EDy&4P4fwXEQR1BDNA>VC<;qiX6eR#%ro+8}k+u zA_s@>++e6!fe{9VnWdGTmU?qi!kU)xKP4wPsL!MAdn~u>?Jsw2Try7ghvA2TZ9Y|h zqcuQ6gJf+aiM{92do=)l_I0_^rd@c|*qpVo_2o{dNxJQIHN7v4iM3i0?H9Y-$*NL; z>gj^f%X&wR>>MtjUUGZ7);7tR?R;f!B-WSZ{YZYi%G=s-4=*SU?H7z(?t2+=eZIA7 zcz#{p`qAf}tePl}?{2-nD|oK$!BX4t;#-5$Ez*eR{>X4L%jM-I_t>3^l7EY*!L=nL zM=;19aa&?{5wl^`+CoD@*1My+^N6@xQfs#${8Ne1LmnCN=3iY#bamCYM#Q3Tzu3{Y zfQLn<9w~N98FcjZ08L%!bsDFQ0x$KI4`?T%_&X^wfjICTZ_<%)aH5moU|@cKVe@+B zWlZ+oE6#)Ni|SI-gYbv&ya9r9QzS^H(JwDPx}D%RStUxSsANRRrFf+XNk~{~r>z_> zQ84H(6JnWBV6I_@j<2}8^p2%B)#dM+8k73$4)-GSOP{2bPk=MDzO{9;+bJBOP=vsf z0t%6~A6{}*L4D7!-@;oeA0#i54ZBzmZj%-^g3-F^U5yvQyIU7Fr?RyZm<%jOSLm^K zf4=I&k(l8=W}I+@l1{C4k~#K|#G;YX)|jQ>zQ?4Q!V6C6CxV!u$1+q|)Hl+D- zyqfwgS59hr^5?k~BVgX?GeVH@x_!=$v4=$%yq3wUD3!I`Y~FQ{W>LUN-XMKv8^Ph-@qj6gZnU%(Vrq|9G;%-vwaxbDMCgxb_T+90 zvq^MslXYT8HH`>4H>71LwJcJ)!bmB`UEf{1IDA_Y*ilkJ2_f!W5JFcRzE%7#L#WxV z9VgN9{i`QospL&(fC7D_7ClYpe%kk9uwD#d$V)>j_!%Mum?(qS>`$ync?%XE=dqC2jlJz5#k~}rJ1H0Qo{@<@9 zG|!?9Ef^5PVum1Ob$9urfPCO86J_9uieuQ-4|B4Pjw)>7@e}7Bdj(j?&I=CcHP*un z6(2qz7+Y6w@KAn1${dSDkQ6~rAILbyLTw2#g8|0fFn)z1e7mw))kisYbfASt_id8b za5}(zl%zDnAVnA9oQ&Ug|3Ze^GurUGu_SZ$}-ca+|H5_GM)xUQ8AG zvF!e{KCk(o^nGniZebTPO6+8anoc|?KTqAf^xd^pRZF{=)5)cdrF){d88Y`(%S)7(Y%gS&uQ5VO6et>CA#v9Zyrvt4QNbUW257s$)>`8KQCLsV0vZ*u)0 z^AMLMz1`g0EE0zKAsFYJB7g_);J(7|v9#0R zLSMyYpP+cMmsNP@(e}xMjI;z!oB{%HcTh1F`}pm+tiFmuuCNPnJ4F7~`^VS-b!A!j z7=~!cq5?4lAgLX8*{S3tSsYO4qdqwJL8aq&b#yDv=eHkv4D~DZ++WZtl1{Mij-fYJ zib_ySM`2FC(||49K+k#KQ8*ghZZaH$aMrb`I4(Eh{agfPAq>GENd;)ntOclp3T&*- ze7X|q396n@D~s~KPL9pEir1=(cS%;yi-cHgod zw0&>vc~-l}N=(VTcDjgCR`l8z?3ew(@n^R36i<3(#Q(?w(7(^n_?5oBu0|$nfU#D$ zp_Rab?%BXzx4p+ZpRlydtWM(4iAZrc@Rj7FE^NQqi&EEyJ;K|!`_9g-q~Q4o9Sch? znK|#aR4q%<@MAa;G9t{=p|fLP;q&=AB!#RGEmWJN zRd=tyn+YavYgqMexHb}>=FMCOBUjLbpt=I*k4*?aQWonVUWS96d|oL)KFIGM1= z2@Tm!u;&nB8S@JjuwU&heX+$Shor!ty>Ht1mb0W2L<1Xa`3>mD+eUZloDRbBlAfNB zqLqYSU%-8zf0Lo**iGq24e7emH#-2_ak9K?Y#9v5r9jnYVIBKYY$GkBJHC zTf+odvq&~mu2N~rV|ChsYR-_VTH5s_-1oGJ?MgY39Zn{kZ>qoF6>HBMMINLOKHagwmoFE2ym7HFw&n{BIKP7OZ@E-Q=i;1d<>0ClgNvB1W~`(R zeZ8pz_hgdmv{-R8^I6Bg42`FohjKqrp870R6-<}+$b`x`US0Dcr6pClIgYAI+2u^B zS-xMjMh{)eP&lTusl=48V^xKfudAE%ajjxMY^~0#xSwXYerLDeR*VeRC`^ytunq&S zsngoRvd0=Zu(w&fl`1e{@wEjM-mC(f!G(Vw{vf#yQ3XtW9 zKzw8!UvJJ&p=Ut&ee>CWtjY~5>{J&n;F2>!r&e}<dF-x~3HhMR@j!F5ZE$@VFeIK&pTlA9WDHOL*+Tf!G~RVXMz zlTe83?OyAMQkxBhCW*F{gyL=(l>I5mG7CFhP3!*wyuNo=_ld7(OrZM2aA0GJENE*Q zs*MCssA5w3H9%#9GjwMC2c=s3vIcFd9=;&{B{FAz5qV=kzAcH0#N6ZEDftPE@{ST) zoP#EyXkhBHti&@dB{$d4=sfXflc-3^3Y#!KkhzUfn6CBbB34VYzqm* ziI$JjbUkzQZ}kq=D7wYJdi}d!tvuQxJ@^J{VXp_Wn{+^w`8lBf(muIHxe z5HQc7Y-g1I5%-1mIRzUpLXf2JppIxpTrsfEvDbE_@E2OQLtv_!u&XSrj{SFQ3k*HE z5cR{ZDgsLecJB{uWh(Ox+lsO8*?ZC~CXVOUcD2w1w`rYrmq|am$Co|zRR6gVM}?LQXs zB8RSRKRDO!J&;A3VgsV}bQ>FWff)Y3l|F9T&418*a#;_LMCoK`X^n68{QBCEiL6!; zs_uaio<;1PG-rlG_N}A}-K~^J3zm_F{}q}S%gxPBR$2DO!+MpAh#ZCs|8?esSIgK= za2WG}!N}0BLha$=*YMS65k|hHHD3f6=T4_zg#W9G;oh8hQny}XZe=Liwk`LsHu^zouFE%R3 zrEbp!-&(#NdbayV<-j)!`P( zC~Qm^H9ysO$j{23xjj#W?9y%+sN+jBvOIB;XYD3MA%VF_M*SBnr@u^x!&#`s*^vEJ z?BOEPgn@tpT3>%>Q3=4#s*vShe6VPU4Z~IT0uc!n zgi3$tg)hwMkyD0hzZBS-uff-0(N(n@b%LGXT|?Zq#NZ7n=Hc}hh*3EB?4bSB{vyEt zjdA&T&j30vfsY0smLi7oe%$0{5{o3Q-k*CcdBnJq0831y%w+I+0P7E9L-ERh%_@`5 zT;D(3i;1>KWK_4|K!i94UTx{SrP*GGArtA(F+k^hJm11_QYTDNEBT%gwPVL(3B8kD zAgtO$nsFcgN;l5u^1#7w`k#b0uD1~1kVv5Um5^18mXc#beYJ2K%N2Wzx_6{Glxi?m zTVo)1zN@A*?bq@N&EcVskcmrcDz|}GTP)oEO2h9wF=$sFfK=`H4mVlg0p=%U*JDy( z6Y$a+^|_4Ii#g@=YZ6O`L>juT4dluR_M!zmX*_)TCKww!%7jSKOI3*7SeTy&F{b%5w5MI}P|0qP_N}=9|9@D32(mqTb{-JDrGtDI)Hr*w zF0n8XSD8yekX*1*lwC#>wM<(We@Z}ZQ*5I;Hv^MpL9b_VLhpTqb&=ZDTUr0bKmEms z*5a&01i?mTzW|T0TAT=d#$>f%sjAvfl%w;fi`>oQFh^eq7x%X z|K)KVu!AU$4A*Pmz23>(>*DO{nRej)ybfySe3u&XV1rhCa|&lQItmHwf9@y1K-4c; zZ@AVCfxUbu>_=ZN%L1l4QL)F!ymk6gC&K+43l(~3vTA}q?&sq-wmsyHB>|lP@Wq1@ zEtD4ZdyomT@P9+)WZMfMOEeHG8@THa*0-A|4+pt#=p!g5{m_1hJT)}ULyhZn4c+EQ-PvLmz?0(I_LF3XSLzGXzX!}=E3|+6>q#suEAsdlaaY{XjiKRUV5Eu}uIHpu`@OWjzjo1#&T)!3d~?F{A{2DqgRdAzGRH`Uw~5 zFKmobkPH672#FeQoAvUtONF1=PV`MD-a~fx&wFf`AW}jCy*z>f1=lA&gF==u1Xf)z-((|ySWw!;Ob6e+JL*!#+3_2Eh zV2@5O0e-OKxWXy^ek7_{7_?gBbLF@AC>ENGH(4A?khVd^(kRRn)+0>2wcY(IAzx#8 zUnW{+Q*HtVIUS{WmgX)43#k7aXh>kUx9=x9To0)V&G2F?NrP+AmL6BLaEPDp6^z+J zELPahQp^V~?Z|}$Dodzn`OVnjD{WMuw>F)c4}@z{-ed_=OulW8wE@o#T$Phf92oAb z31af-B7$?fAO20|$a5-Vk?zTR3DODJ$aYRFMcS4@0ZgfVR5Ef5&;Ux_Pb|uuo0ZSM zL_;Ud9FsubZMmVhGsv4I`cVQCvD?p5NdgK#ys9`*@E1GAFhV6l(RaG7WzbR_@JD{A zc8DWP)_Hg*#*A(>7;sWBgJ_Y{WK~mH^zlj>;|Y)3MPl_gQ2@nkAX71e1Q2i`fBpXb zjimec%)G6Wg$Y!l3>k6C9D$Fr{O;k-8xGu$lrR+HL+J&32Vx$VSJ=1*H@2cvi+Id- zQV_t^wNT>W8oy4+SSH z6=FdRTLw-1XHTg@?0F>7BLzTno_5rHrJxjfF)Oc{uT7(GNhdfP0S?TCf5?}xsnYX#`Ogq`hvd7u=?P$S6Z=9hi3?huVMaNgj@+I`YRorGl zl-3EY29b@I5J|bi52_U8^&y?w!wzA|G23V_w*25hcFTqz|2xGw?bUp-KI5lnJ<+<-*BKy=h~%>4F!%74z7v%8m;+;8+IYDpMh^L@R)Dcog}LGi({kn@1wMB%q?wq~l`?ttX48uhOmLSIWFVK3rhi*>wPl5{3b z9(+9K+V@ac{0pG@4ufx|qJk2B2p3Z|5<+DKHCh3GfiXSo0^hWtL6h%f)&PaMflqM1 zeAKE1cTz(&Nj+p1^wzFSOP_CJ{xxQ#CK(HFkdB3i!;FUoE`s^x=Iv}u6pm(1X{d2t))4Nc2_uc?Tz9~2&FQP+ z^*sYR;McfYf=nBATFu>RTOx7q??;5Y{cO=VikaA&;k9g3oxnt5Ft#oA)kqq~5``E- zKntm@@Yit||CyG_AT^eP!x7tx2N_rx9B< zZT|gRUdYH#mQGGCiJ$1@JZfV=?PCn6BIKo_D!d)wg-l^({s<|dnqTn9_eJ?j`1TSAmDxjv-+5S7CdTbG=T42Sh&aMKOu>GH_pt7FKd(=>ZuwYex8s}_4%_U zx9=xgPJ_<1EWH?T$8Sj5{(r}yRF*tMy;F(y^sh2_e}T*`@a+nKXJ*_EsY#)d86{6(R@$)m;ma zjd4Goi>da2vam+?J?{yNhXTQ&;-ZV;k@QUda?gh=Hvou!et8@NF)YaTk<`A;EebI) zmYWlk_ykix!0NDy*K@e-Ns)!b$VIf5KPLxKQIRj2LPar_*>V~iW~*m9eSeCdiP;ds zFE8(~%Ip@xxJxl$aBy&Q(-0XM`94n_@rquGWZt@eNa?})Ke!KpvFRW*gp!iDIPmr@ zBl9<#C3L289e*k%{pC+**MSXAdO!C!HWakAwG}3g8G{MQTbN@q`F&|I_1qj6DdPqt zB^6DWHB@Fq;-Qa6i>*JTe;3}HnW>SM&L3cS1YwZni7IW`$|(hrnD4SdWP4P zCk>4iq220AQ;wSc1C5Z3%u26mh8OX9hyQ0A8?fPz2Qac$>o(sRi;EvW-G}V&(->E} zg73=8qP9DYBO@yW?Iz&gc^~W#!1~qJ?(L1)fll~lo}OA!-Ajup^t#IiW_yrXvt}nd zJ3HYg`20T2L{?yWOnO>c5M%%HEX?IzR|?zN6%{FYXDpfhEj`fg4|}#`C$9hz7>Gjf z&h5lc_>HbE3fdcF!uDnlgj3DPpr9a7NNj6cRzw~V(C^~n2BHrZtPxgon|p6GWV7Bx`?@&YlObqy|4p$KPPeXQ7PRf_y=i~b=kbmM}VmeN< zdal1Yk89-O4Z0>jwx0vK>V# z0D#91q$5d_|5gWw$i;;?uA|Zf0Kzc8*0|I;tJA7_c-*5%#hTL5J@4)|HaGv8 zDP~xyKeusm(#h1|U}Muz2Qxb*Vx`I71G39~`dU%xIMja^Ec`h>(QGW`I*;dfHS1PqAVUUU zDHIU;g*v`fea6__TqKt&NJXOZVt2&Y_x0nS9x)=F_<_Zt!57c7tf`0Vy6T$8@zUnz z<%x+3EAh{tJA;XQehu$}w?>6gA9d5xnB-+&RQ4fpUNX*i?wf9W4%zeIznlv(rqCSZ zsZ8T3PzZ4`RiA2auwL1O??MFWiNOUM%)SvB+jZ_;I^Qnl;w9R=z=GU`=V1 zCXXNZX=%xtEWJ4W(_V^|RWyp|RaQjgCXT`locbWLN=x^*2S6K}m$^{r^R!9Q6ZxGMCmRfLa%-bIIDgv`S$Se1$-`i zq`#Pa1TWm_;^I<7#OC#(6p)p_n_qLSowq}TUtS;BZ#>!A`RaAIQ9)>Wh52tu9XLec zP?FxJr#({5SPU_*&jWo{%kEA)W-<%E)g3&I=6rG0HSQmK-Zs1t`4$xy?5#6K5cgVG zSnTZSJhkLJF-+yReY^}#RmjCoNofS1HC5H-!#U*YYF6h}!wSsp9g)`SS&+y*0LB*= zg>wr*EZCUYLSbU#FIFfbazwIpjOv) zxvh0v?AY%jKHX^5HRa{y>FVk}CtVE+!vNrCUtjf3?W>FQB!eS`iOCY5Km>paGr?C> z-Mn+aes2_X4&iEv>Oc55m-F{N!iI<8vnqm}(Cb-lRAIhc+0QI_{FA9w8%bn`1b|e? z^=SGej&DU&=N%eel1)WqQ4lCdcQ2 zbLKKO7BKvXjop4Q1Lgy^8{eb{CSc<8Bk6fVBf=alK;n;vX@R}sM0%YR&Z<2t(eIDR7wJ>}^wMIM!*sauBnl04=*}-Q`>HoPu z{trb6-VwSF+*SzZuz_70=$M$1=9nQNASii!tZx7@Fp!l84P<3!gL{pq#(#c4PYN8= z#;chn|Nr1}Pj>!Zrrq+NTn=2c{QmPIF$xKCN@~Ra_#>R~+P}1M=a%2y3k#g~Ac6WP zw@jiq;8BylyTD?<;@w|csDAO8J2B>nAtP8Nms7o^2RER)=S&mpb+c9B)N zUEp}`d^kQnE*ubB^X}W|zYP`}oSf@RX2Gkfe8bHE{e~}dOob{il_L(6ujJ++qM?1d zJ<)mNH#q1tF%dqx*7h2q(_HUek4R5VU0GLW2Tt*f_5z|gN5I+H#pK$o&{IcU`aAu(swi1 z$ZMSLBr0(h6dT^qv@XIx&)X*kK1|0>Is=d1VsFtTq&qTc6uuD6v(B; zG+UPqfARdNy7CepZtdBk!U=4|+S=L8L6$ZnKBnM@J!jw`7m=H{^qmuq->9Nq^lhTo@ENX@UFiB+kps>}(f$ z`VA2EudZP$G@c>$u-M8jEHv%-M(RP};h7l?3+gyhwCZHRSj`$MX|8n8YdI4Z8u}gi z!t>*8m3qnDoqK%v*A2>;w2~6g|5mrTbbsGRRrTb<2NzdYzP_l(eq%-X3Sppq!yYE> z?RsLyiLHqW7TTtf*`Cu=y)rr8w{u?gn1oud!5_hR9E4|Q>PfMaUw5q)vT z7njhWj7J)GV>jQL@$!<5z}sWY>HYUJ)~pM2_CIMekS^PvE!9f$cC-L6=9C_J`N`w% zt6dul3m(5?P%ADjUJqyoWyo;;f6!oDe28iB)X2-j0oTe0>oLMhhPLV9e)aU2^Qd2x z{y%;o1Jk?13nqrl?*vAAP5C537Z)?!MwCgp%FD{YS8dco<-rtIZSA9t4e-hyQa|R3 zwHYL})?D)dZ0t);N9vD>nM<6^ytHuE>MJryGy`piB7=lu+}na-E5){0JEZ^KZHNVNJ0?jXRZHA#2V^{1OBk~v^ioG z7v+30{oKU~R$hpPkn7W)rJ3*G<@P+dKZhusVfh>Fgl!IQ;H>aM<=wx+(v z2(()%ay^`N@aTubVdxtfv3a~PNDcq@EY9TqaG6Y1be}rEk{M{5AdXI?ep_@>TU~2x zn&Il<7Ssf;p&>-u8@ZwpZ~Sgt_r+5mHRY9*>MD{ci1Qoc76uj;%;p_kTWibD?_FDa-5p6SFF67^*_6ew zpkMh zae5=y)q@zWX%MlKVHxPh4 z+CXq&;n&DWmk%Gb$*bz~^NVd{Y;3scb+0O_lpxI$2h1%k)9Vl!k8TU(AOyse-UExl zM%K+lL5C5bS!koXLvVUJvL7x0#zCe|O+A=k~XKbFxX(8 z>>aA8tz~CBUicdL?^zt-&zRY2CiWhmTWd%N7z}40L^Q|eqo`I;P~i5`x#R8dy3oSi zSgkydqsQK<7gvsoY1NU=%?}{}ZhQBvh2F=tfx;a~AZ}o0eB9&a$iVFB)$Vk8E2XiL zw-t?8I71NiTNDayK&~QBR*yNIuogxV^}2wFCx&(2W(~m<7t7>Q;kT&-u|oiZO?4^9 z#j;ujRgb3#3eQIP2MKftT1~L@&gLM@P?Ek5D6vR_QHl zxS$2I7SKLDU9|K|wa(1sIeq9@>1c7eq~3#NXyy6%Ymlp}YuUb(z5Q>(LQwi)@8U9J zXKi6Y1$sWw(V0{&u$YaO6c>Xv1w5v;%)NB5tqn;IJvt|dbcNI_dyW@a=1+>O;4^+iTTzEs@){z8h` zC!5|ly|`H6IjT~ms-$!{JF8jo36wEF;f_?+)VTg3WaHqlN^}HWGv}>qK}}Cj7?w+| zwMt=$jEt3*)>hAE!2KniMfKvWD&TH)pgcV53gXY0Dr$Xa?f`LVVS}pD`^SevQS`wf zS63(XlHoG#+t-$x6sGtCTf5iZpAw5tm#O%ppQMKFF85R{uMynbfM^aj6%G!TKUYgc z-ptx4X>=M zjg0IfBP$ph{4y7f{7}9;PGL-(@x)+zYg=CbsW+V)%iD|HiVlA?H6dYZG&4%ASmoq| zCWGNzQ&CZ|v$K;>0&&wr&^fJVtv2D<{U-=>pqA?DeU9;I+yH7^24B6)=3 z#7yz0W{ze}SJ{y~i!qGkN|fi8{%#e|v9XbzH*Su#3S=|HrTAz1iXc4myF%lO0sTp- z(aYTy2TuO684Ntzc)75X`pyLpgD(%3@u9RdLunkRET!iU*H=z^FFI;!5CEyh9CsEj z?_#p#@$0tzmoEW@h1W+5cwg|!wHN#i1oQJ}AuT9rXto?1TIj$ns@(kY__)5EUHO{1 zscAw+1`+_eX@fspk2rj5GSb6BpM3@gA3QZRlfuGY1K_JlO2`qnN4E?p&%t?h_J!GQ zbq|Zd$NN;bqUD*DcS}=4g9;si_Z*DPjl z+KsiAddkY$R8=GEs*ijap!KyG(mha732;Y3CMOrxd^~Md8Ygl^pV84SZc9qQT8%GO zq6TO|{`)}V8Rti~oH#$?9Tpa9Ou>ZnkAw^`lw;v=RtJyG^6KT;CnKYnmsbr7i)gvY z%~rUZj7vu>=H4jm)bvv~e-TV~oY1yA^sKiuE&RbHl?5kCtCnBjuITkEQ9f4DRLlTG zp^XkhVb!MU-bLRZq6p*0ZsDl?TanN7^QZKVG#H!6-tv6`y)6eF_`}fFH%$B14f>f) z{TmzQlw4w7uGl#|$<+zQ+`QA)hT(twu|M|F{Dv??4&wn2EAFT`jHa#jx?X!XrD{BS zpgXiC-5{qBx^{^AW!t;!Ys;Dx$-Fmyl6lNb+3%*iF5%)We@^^j!(|KnJYzmRGLk;= zEhOZ=JEUrGhy@g0fTwK);P`k%EV8-9>mFWA%np!Lj5S*Gd4P?;!Ffu--5-o!Ko3=@ zQ^-{S`ySk%?)(TP7I`kmb$n1Er2>enmm5{I&>l33C8fz}QoXt|Y@nz(3_KqOpG=H97&1y)T5ik8^c>DY2q?JJw1vF|%z>Afbb^ij z`-KLl4@&v!$tkj+R-1#P?Q%lQdo}YdKx}7esG$Yvm($=eIA7sAJ(sxB*0wnH9!QW) zf6x&WJR$OxcC-IwWuxL2uU=O?!%9NJ?R1%vkl_tgO?6@$PWb~+n~PXj2+-ym8yHxc zU}E_A2GCTYc2%6bjr7i+mPb4cPWa5^=<=?Abd@skJ-C~6e)UN%*s}zZxLhm*JKTJq zVh#^*8S!Otw439mnm5Kn#$i1)<)Jp7-FDHVWCSa zjb&7M2srEmLVIj~54Ainkh7+3HO>pCbA#3VU`qxSukCtjL@P;}yl=)uOtMlmx51<8 zY0jx(S))o!@xwGAl(n(AVuZN z`JPV6sVov9nK|gM>-xSPJ9GK>q--4>Sy@XnFpL!yQaLzZ`5;EYeH+hAFdpA`Qm553 zGi$7H0L#b{G7)vTB!HLq`N#Or3pM5n#6jmQ%)mMsUTUJXbu1|M9iM;zL}q4gn?5fG z{9T@06kM(sLJ@qiu(VjJ*lRRBMU^dVj^m4{+5MS11`kX;ACs1~-}zPNljoKkxlmBZ z!NMx$J?t;C0e2b1)#px1TB+jXQ?_^s8oEBk*#;N$6+jkUZyCuzyjT>BK~h(4fmSf{ zhc1UOu(4pw9K#-?rJJ!ZZf|uoKVWKFYw41D^Cy3Cak8k01`*~FzUQ#x_a>1Xf+UK8wZgDgd6QW(ss9@=DQYj$5jx%5`bfN7KSDMM(- z?}>!TE0a6Hyl;MRgWx&C{ICJ41`2}E{gk$D6cs`^S@*~olRLRbw$`XyGZ0O(RL5h_ z^M%iCH&InuP(ZsuF={T>+Ks2F2~L}Qe(a)!7!ok&BDjr1&am#gn?#b*VL0+R6QSF* zbJ~+aBT;HOv!T7oP!IVc;L+$^LiSTXmsWF7rq+o3@hr@^W#z{-qr+qCZIMK*^EB*| zWsmp`LL!RJqg-rv{B`RaOs8T3r&Kj}pK?oE5yPzZFg>ny(fGgX^Jgag3=d+oR>{!S ztB_lK2C270zBZxBpJJc^oC3L%`4<}<)pes+w4nPLAppe`!2r@f1hA1ML7=9h=+bnd9c1o};Tq`&~{{=rbJu%(#; zDx3XR!WaEOSMjJ9lid=`%@kzruVc|9tNDkf57!M3+=N((RWpGq-J!A8<+{S~Floa&czl|h9?gTS@%mDeqnTd}RDuLhLtoQ3bp`+!zi>d>?`Kc)S zzKMGFb!{n~j$#A|_4H^tI-Rn!XEZtpMQ6Tt#gh3a1|xmju&dB4MGMKn2rUNCVY-+| zw<(UlDchfQ#8J$#v#U<*&tC3P{PFG9rv#UtHLpuaCnpyxs}XP~SXK49as14H9OV`) z)Qkyc&C8^+x4gbQ%KgG;f};*umlRq5X7bFpa*@-`T3qw7AlsN;BBv;T>Bh*lPLPi5 zBt}w-_MkK>dHd_QPQ~Y*#XskOGLNOnhc?Ra^kAcveRCt-<%7vTIgGA^^k4RbT+4kt zE-!yBr?;*dueUg^T);Z7%}vIUSK^F_k-RpMpJ>Xvan>mc_FKEFpO$lSi9xN?4ad-@|K|pL18Q~C{s6zR52p}Fpi^ENT zH~kHYfF*jj@2W+#*;Nw040B5!;o+{s0`hvqHZen|lhAfM@WTQc6a`8U0(Cs;eAK5B zc|{1r+MaJyF0=E zv72Gn*wFou6ie^;z?YDKqlV)_>X2WAIVB2ZxL}bN{K`viC-*I92Wxk{Ced-6)&M0{ zJdS0!-e|@nFxr{i!s_wDoT+N+gXQg+{6^ZM>Cd5kzA_cv!et)hTm<@G!R;)W+vedI^ZyfYMvh^b4sYSJlQ z?dOQ;sHO6BaOV6Go91`sSf=m6GlmFk7k*~=>fLBej|604ir6j<>#mYC@%vhLv+NfZ z8`(#bA8XNejKQD3WU4F#1~z+oY4{NV(UWZIl+)6}OHRHE_9flHYtx%KM$&y5 zrcR3l5AU%Gxw{9{C`Z5Ix%HO$AWu=}g?v^g-$p#PcdYdL{{qejG5Dxw_bv=36@=89 z%hj%V))G=G7HZS0?|U+A(nAB@ld=070RUvxgmMfY>kgPzvW(wi1=oL*kt7MEvXvS6 zYPU!^p^)S54|k$-M3VS*Y4{C1sWV^(XvxXArIab&!iu|EfJd~Roa<UF$w6EsBl1a++vRk^tlbIW}uorz462V8!rsboh`w-9E~t3OSDXb$m< zWvNs8#Z59{UJf=RPgiPJ7YafO9-+MogJp`I5KehdDzo9?-CsS_Qlf^5&+5AxqSFWf zKuQ%A7;|!0q)AH7ERL*Qm9~5rZU#`d(>GOucjtjs1w@^$UBq;BPD&+9Lw{$-y`Aja zUCi`AE~ok>tvwhz#C=Z9o!GPr**!ua{*C7yuZ`-J*VY7zASxs))t;fv)hiu3r-4w& zFxF%pA#;Cu1Nf+x5_Q0|=#0!or8zJmhTD0Alv0HZWB1wsOs!OsjPOOJNzM-qM`io^ z?Dh2ldHKe`BeBA1yhzK3+8_`J1VaD$%m~CYLQzrCGhUdDKp+s$IdWm%QMTt=Zr`D#%WhSoeAiSfy09ktF%h7FG|9D9sNG%x6R| z+ZEXR%tuQPoK}!lC?x?vrIeN*71j3dsSi{PvzCd@Z%(DJjp|Cs%c=^Lw!A=l27prX z>qbF+*SKmaQNzIO**f~^FK+-J>r139N}^n(1dx|+jxKfJ&k5=Zl9h6jBp)byJg2g; z(WI#OsH_bDNV(#4T7?_{poK`25^@y)D3x_Gr8$m|>UvA#fyi&X!ihnT!A2kuh!+Kv zXGS0p2n6DV=gv++tzYyKc3-PJ?a~1Tp2ZtNx>b_N;a!md06-3R>t<}mIbuFn8z15` zwPCVcdQXnKVE{mg7lsoRWQS6&0_k_0XzHx!m3u?AOQW>8p;#hc$VxS)bA9qs-5F4^ zk$du}5=dpE5>C2{j2ONP&Lwf!f!wuezbxS1oXobs*c3WrtVd5xGuy81th1SMkp*VCRrPV_^0{e7_*Q-ZL>9 zy69R()bdr`Gl=6K2OitZ+mnV_F)>Rz-4e$;3%^UGt&;=$t`rO~A-a7e?-5d)RiO|5 zhJPui+xSH;KFIIsjU6~+S=t#dW*(iv*((k3qXQ#!{x0I=W?pg_Y0O~S%nE&N763qN zL7F%=^0*v~nQVuk=#ZH1PB_8G%3`5QrBWl^pD1l5o7AS>D17oF9Y& zW&{F(K)m3fm>GdUAP|Tb8)GbRj*fk*nNF+tBQFMlKp+r^XAHCl*bB;p31DjrrlzoG z&(oHIKp+qZ1OkCTAP~zx0karPycfRKl|*j!zg*g zadiziemnvoN&B+AJj>N}(IfTH+*}h_SKpC!c)s;fEidJ$v?1B@NFc!|~(q)z{y0aPSynCpeCa z#o|Xj*J_x=r=_iOcJ>PkJNxUeU;O-Y==${)6be<(BqI(!Q)+Pb=%005x5c{7{CSp)z@MF)27d^sV(HYLUN`t@`GXlrXs zOk{ob87)2i-SqU;@$ohX4=w?K=H_ZEtMPq@qAXajb=u)h z6c!dPUc6ZQQZ5JMUJD}_24eAm?=38Z*|UMc05>-{eHs9usR_o92Y~<_9bwEE*s`Uw zWqv+Pn+6UJ5FQTx{ylvzUc9)lu&}(mT#uv?oMiCzO34$xhI!j znLT@hMx!Y%KBUoTDl0peqI6C&04!X%@QW|LFqEeV1OkCTAP@)y0s#IWC0F0G`4aH% P00000NkvXXu0mjf1=s8K literal 0 HcmV?d00001 diff --git a/content/posts/2024/08/zig/md5_pseudo.png b/content/posts/2024/08/zig/md5_pseudo.png new file mode 100644 index 0000000000000000000000000000000000000000..b9bd921bceec761518f25a84fb561b573ee14321 GIT binary patch literal 37680 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 literal 0 HcmV?d00001 diff --git a/data/authors/eric.jarosch.yml b/data/authors/eric.jarosch.yml new file mode 100644 index 0000000..c2db192 --- /dev/null +++ b/data/authors/eric.jarosch.yml @@ -0,0 +1 @@ +name: Eric Jarosch