From aceb28f3ce854dc4017e02286185f33805310cff Mon Sep 17 00:00:00 2001 From: KangYu <160075935+MadKangYu@users.noreply.github.com> Date: Tue, 26 May 2026 04:12:35 +0900 Subject: [PATCH 1/6] fix(mcp): support ndjson stdio clients Allow kmsg mcp-server to speak either MCP Content-Length framing or newline-delimited JSON-RPC, returning responses with the same transport shape used by the request. Also make startup readiness less brittle for slow KakaoTalk AX state and surface FOCUS_FAIL as an actionable MCP error code. Tested: python3 -m unittest discover -s tests -v Tested: swift build Not-tested: live KakaoTalk send/read via Accessibility --- README.md | 2 + Sources/kmsg/Commands/MCPServerCommand.swift | 85 ++++++++++++++++++-- docs/openclaw.md | 3 + tests/test_mcp_server_contract.py | 37 +++++++++ 4 files changed, 122 insertions(+), 5 deletions(-) create mode 100644 tests/test_mcp_server_contract.py diff --git a/README.md b/README.md index 3419db4..51822ca 100644 --- a/README.md +++ b/README.md @@ -305,6 +305,8 @@ OpenClaw MCP 설정 예시: } ``` +`mcp-server` 는 MCP `Content-Length` 프레이밍과 줄 단위 JSON-RPC 입력을 모두 받습니다. 요청이 `Content-Length` 방식이면 같은 방식으로 응답하고, JSON 한 줄 요청이면 JSON 한 줄로 응답합니다. + 추천 운영 순서는 아래와 같습니다. 1. `watch --json` 으로 새 메시지 감지 diff --git a/Sources/kmsg/Commands/MCPServerCommand.swift b/Sources/kmsg/Commands/MCPServerCommand.swift index a815182..1c2c9c9 100644 --- a/Sources/kmsg/Commands/MCPServerCommand.swift +++ b/Sources/kmsg/Commands/MCPServerCommand.swift @@ -24,6 +24,28 @@ private struct KmsgMCPError: Error, @unchecked Sendable { } } +private enum MCPStdioTransport { + case contentLength + case newlineDelimitedJSON +} + +private final class MCPDataBuffer: @unchecked Sendable { + private let lock = NSLock() + private var data = Data() + + func store(_ newData: Data) { + lock.lock() + data = newData + lock.unlock() + } + + func load() -> Data { + lock.lock() + defer { lock.unlock() } + return data + } +} + private final class KmsgSubprocessRunner { let executablePath: String @@ -58,6 +80,20 @@ private final class KmsgSubprocessRunner { ) } + let stdoutData = MCPDataBuffer() + let stderrData = MCPDataBuffer() + let stdoutSemaphore = DispatchSemaphore(value: 0) + let stderrSemaphore = DispatchSemaphore(value: 0) + + DispatchQueue.global().async { + stdoutData.store(stdoutPipe.fileHandleForReading.readDataToEndOfFile()) + stdoutSemaphore.signal() + } + DispatchQueue.global().async { + stderrData.store(stderrPipe.fileHandleForReading.readDataToEndOfFile()) + stderrSemaphore.signal() + } + let waitSemaphore = DispatchSemaphore(value: 0) DispatchQueue.global().async { process.waitUntilExit() @@ -80,8 +116,11 @@ private final class KmsgSubprocessRunner { } } - let stdout = String(decoding: stdoutPipe.fileHandleForReading.readDataToEndOfFile(), as: UTF8.self) - let stderr = String(decoding: stderrPipe.fileHandleForReading.readDataToEndOfFile(), as: UTF8.self) + _ = stdoutSemaphore.wait(timeout: .now() + 1.0) + _ = stderrSemaphore.wait(timeout: .now() + 1.0) + + let stdout = String(decoding: stdoutData.load(), as: UTF8.self) + let stderr = String(decoding: stderrData.load(), as: UTF8.self) return MCPCommandResult( returncode: process.terminationStatus, @@ -107,7 +146,7 @@ private final class KmsgSubprocessRunner { ) } - let status = run(["status"], timeoutSec: 4.0) + let status = run(["status"], timeoutSec: 15.0) if status.returncode != 0 { return ( false, @@ -139,6 +178,7 @@ private final class KmsgMCPServer { private let serverVersion: String private var initialized = false private var shutdown = false + private var responseTransport: MCPStdioTransport = .contentLength init() { let env = ProcessInfo.processInfo.environment @@ -678,6 +718,9 @@ private final class KmsgMCPServer { if combinedText.contains("SEARCH_MISS") { return "CHAT_NOT_FOUND" } + if combinedText.contains("FOCUS_FAIL") { + return "KAKAO_SEARCH_FOCUS_FAILED" + } if combinedText.contains("Accessibility") || combinedText.contains("손쉬운 사용") { return "ACCESSIBILITY_PERMISSION_DENIED" } @@ -692,6 +735,8 @@ private final class KmsgMCPServer { return "KakaoTalk window was not ready. Open KakaoTalk and retry (or enable deep_recovery)." case "CHAT_NOT_FOUND": return "Chat was not found in search results. Verify chat name spacing and visibility." + case "KAKAO_SEARCH_FOCUS_FAILED": + return "KakaoTalk search input could not be focused. Open KakaoTalk, ensure the chat list is visible, then retry with deep_recovery=true." case "ACCESSIBILITY_PERMISSION_DENIED": return "Grant Accessibility permission in System Settings > Privacy & Security > Accessibility." default: @@ -767,11 +812,16 @@ private final class KmsgMCPServer { while true { guard let line = readHeaderLine() else { return nil } + let trimmed = line.trimmingCharacters(in: .whitespacesAndNewlines) + if headers.isEmpty, trimmed.hasPrefix("{") { + responseTransport = .newlineDelimitedJSON + return jsonObject(from: Data(line.utf8)) + } + if line == "\r\n" || line == "\n" { break } - let trimmed = line.trimmingCharacters(in: .whitespacesAndNewlines) if trimmed.isEmpty { continue } @@ -788,8 +838,13 @@ private final class KmsgMCPServer { else { return nil } + responseTransport = .contentLength + + return jsonObject(from: body) + } - guard let object = try? JSONSerialization.jsonObject(with: body), + private func jsonObject(from data: Data) -> JSONDict? { + guard let object = try? JSONSerialization.jsonObject(with: data), let dict = object as? JSONDict else { return nil @@ -823,6 +878,15 @@ private final class KmsgMCPServer { private func writeMessage(_ payload: JSONDict) throws { let encoded = try JSONSerialization.data(withJSONObject: payload, options: []) + switch responseTransport { + case .contentLength: + try writeContentLengthMessage(encoded) + case .newlineDelimitedJSON: + writeNewlineDelimitedJSONMessage(encoded) + } + } + + private func writeContentLengthMessage(_ encoded: Data) throws { let header = "Content-Length: \(encoded.count)\r\n\r\n" header.utf8CString.withUnsafeBufferPointer { buffer in _ = fwrite(buffer.baseAddress, 1, buffer.count - 1, stdout) @@ -834,6 +898,17 @@ private final class KmsgMCPServer { } fflush(stdout) } + + private func writeNewlineDelimitedJSONMessage(_ encoded: Data) { + encoded.withUnsafeBytes { rawBuffer in + if let baseAddress = rawBuffer.baseAddress { + _ = fwrite(baseAddress, 1, encoded.count, stdout) + } + } + var newline = UInt8(ascii: "\n") + _ = fwrite(&newline, 1, 1, stdout) + fflush(stdout) + } } struct MCPServerCommand: ParsableCommand { diff --git a/docs/openclaw.md b/docs/openclaw.md index 9a8cdd7..bd9bba6 100644 --- a/docs/openclaw.md +++ b/docs/openclaw.md @@ -58,6 +58,8 @@ Run the MCP server: kmsg mcp-server ``` +The stdio server accepts both MCP `Content-Length` framing and newline-delimited JSON-RPC input. It replies with the same framing style as the current request, so older OpenClaw-style clients and simpler NDJSON supervisors can use the same binary. + Config example: ```json @@ -248,3 +250,4 @@ If MCP fails: - `kmsg mcp-server` - `kmsg status` - confirm Accessibility permission and KakaoTalk readiness +- if a client sends JSON lines instead of `Content-Length` frames, keep one JSON-RPC request per line diff --git a/tests/test_mcp_server_contract.py b/tests/test_mcp_server_contract.py new file mode 100644 index 0000000..6acd708 --- /dev/null +++ b/tests/test_mcp_server_contract.py @@ -0,0 +1,37 @@ +import unittest +from pathlib import Path + + +REPO_ROOT = Path(__file__).resolve().parents[1] +MCP_SERVER_COMMAND = REPO_ROOT / "Sources" / "kmsg" / "Commands" / "MCPServerCommand.swift" + + +class MCPServerContractTests(unittest.TestCase): + def test_startup_status_check_allows_slow_ax_ready_state(self) -> None: + source = MCP_SERVER_COMMAND.read_text(encoding="utf-8") + self.assertIn('run(["status"], timeoutSec: 15.0)', source) + + def test_subprocess_readers_start_after_successful_launch(self) -> None: + source = MCP_SERVER_COMMAND.read_text(encoding="utf-8") + run_index = source.index("try process.run()") + stdout_reader_index = source.index("let stdoutData = MCPDataBuffer()") + self.assertLess(run_index, stdout_reader_index) + + def test_mcp_server_accepts_content_length_and_ndjson(self) -> None: + source = MCP_SERVER_COMMAND.read_text(encoding="utf-8") + self.assertIn("enum MCPStdioTransport", source) + self.assertIn("case contentLength", source) + self.assertIn("case newlineDelimitedJSON", source) + self.assertIn('trimmed.hasPrefix("{")', source) + self.assertIn("writeContentLengthMessage", source) + self.assertIn("writeNewlineDelimitedJSONMessage", source) + + def test_focus_fail_has_actionable_mcp_error_code(self) -> None: + source = MCP_SERVER_COMMAND.read_text(encoding="utf-8") + self.assertIn('combinedText.contains("FOCUS_FAIL")', source) + self.assertIn('"KAKAO_SEARCH_FOCUS_FAILED"', source) + self.assertIn("search input could not be focused", source) + + +if __name__ == "__main__": + unittest.main() From a615f6a40855c0ce2611e60db3983e4b4891872b Mon Sep 17 00:00:00 2001 From: KangYu <160075935+MadKangYu@users.noreply.github.com> Date: Tue, 26 May 2026 04:23:01 +0900 Subject: [PATCH 2/6] docs: link README to MIT license Add a visible MIT license badge and a License section that points readers to the repository LICENSE file. Tested: git diff --check --- README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.md b/README.md index 51822ca..50ee91e 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,7 @@ # kmsg +[](./LICENSE) +


fGW3gtLr* z`}34F7dD=_^u&2x!-!$UaORfq)yp?;$vUj3!l68p`o5mMO0@p|SeLiL~nUmXpg? zEk2~_JyP81cE-r{c>TtwN5*#_e7hk#;$yt^4Yk^hp0?f}blLb~$L>eh%XCH$HhMd* zxHUun{xHA4p?|Tz9vFgSgMXYh{w hQRdqxH9A1xVL9o`$Xj&xi+cf?2D zhkEN=k>MSa1Lr))-fzgZviug>9=N2&sF=CqJuh|dnlo pZdd2Aw*Gmc#m$N*& z-=#5=dOsy<3@Pe=PoG*^cKKNM(?vTg7v8xCi_tLOd7!m|CovDNX_^xCJotUmf*7-b zK^H;}&Pwq5#mW)0r+#jjHOd!#DYf^P)}&Z&));!Szr((~-Hq!Vbl)@S5;b#Z$YJdc zd5gTxeHmYhSgp42amSiYBuhm3-M_@JC_1@*c~Fl6fA=?W4f*Bj76wztOOy_N<=!g% zG ces}4osLf%6)mj zG+stDCar#3l*V3lH+=ZS*WClJZe6kbeoT0__8IiD<3RQ)#ZzX Vi{Mezc%u8k9%8IH(bDLHZKNfv9@QVxIEa!D_ z^86SjZcdnXPoTsZZ2nfyNlK%e-sW@(E5*n9$Yu9Dg-6c8(p_)Ze8BMG&2le`d$3#61W@1@J?%-`vo z5wqv{R!-Bd@BwZF>xU97wf#2%;%4yFYp~QSu+&Ca>IF$?gY)@Q+Z|IeysVISgr49Z zl8<%f9BB03VSlgq>N*>pcv$LgSaM0?|Dm}3b~YrLCYDlL+^@}D139#_bm6KM4T+mA zrAt28H_E^1PNxc~mS=N_sX~3-!6pTZy@`k0b64DOSSnw$Wc#X4i>j-e;l>x%=p!TA zlHJ-Kt<$|y?>Z2$NJn70PqiU_bGH43=AxW~Ei`GG?gQ3Q_uO!W EfUI&L+e&BA{nD2LEB^xO`K56 z!M@nl$6f8T=2b7$sw%_Y;dNDSowU*+gUfE=&t-Qyuh3YvgB+z1u|`{bLu D|u^ab(`#^p!rMZNN8Ic4fnLIHjN%Ea+s7om$bGkBQ&-B zp 34eFsSJ@dHt| h)Yz*H`ZFNJhG zBew+(NY&_KhLpAyx1AWf(jh*i7v~o%J!-sQ+Y;NtGzl?KDoujV82BX3mZKq*o$-U+ znDB)o2_2_fwx^R0zkTwX0{` Gjo2>VJ&4rb_$%j)jVW}H_D}DYh z5&m+__qW$J|K=ukP71h479B4B<-J-KT(FC-J*SgVN>Usgum8>M#v%19&y#X$=RF?^ zH&EXc_IYsEIZB*xBmc2 v|&Y$NW z1pXlK2Z28b{6XLk0)G(rgTNmI{vhxNfj e0d4+4J>_=CV71pXlK2Z8?^5cuM0%_Q!);1%J6)uDfpFFzhV zzA-^PF}-WNK{D089dY$^%(?r-_?CffcZB}jJtM^8HNo= 2P`t3CTtEh z5+Py`2o?Na1!MPbn0$OU*kQ+#j7c3tr`P&-p|~ckpyPwAJO0=?)RN`*M)b*ZPe3G+ zwnGT-)8{o!<*+Z^O+vq& ;`eE3;-+jf$L&>KaJPq}nyw7_( z2^k&5_V(+<-Ac2{j20L|tg~h1ePtkb@OlpnGP^8xuAY~WnCS3g_g7(Pt9d9%yE*(> z73B@X4w k(MRtl9g6?li^0Da38;k!sw1^Q#@y`a!!hNWRH^-0^O2Q1)Kpbfr64-edjqmn zAt?Gw%eP0GKL0SPTyZqBRM5wDXOt<#Ju9(1sQnOTE$iZzOCWgNBo mA*=Q!a@Z(C+DeAQT~Rjr8h#>pO!?&O%s@sZElR!)9DDcC6K zB9(h(@>14L_IX7{%Q0wHABQh%R%tul&cb{ c3r8lNkMIa zg}<~+L2l2TU-4?Npkk#&_|6ATyQ0@Yt)-Zc;9;(39;YX|FoQLs*b9^BOM;M#+rKE+ zsSv)t9+?+SMHu*g`Fd`VT6AR2(8JfN6RZxiwx=!^s)i#b0}|TcgyEGAT`K* 6S$hoD-rUFWGhi|XE@5B*xb zM>Tzp<`>lB6iHQ`jcPvIPOS`NL9DfO`>$L);~{ZQVNZtf+d~TsHd -e#+!33ZmpGR@PQe$aYmT zj0!*Ouj{`()bM;~h->e)TdQ~hlM`|&ZZ~c}u+pw@%e^FS3q2ll@sVk@*y6UtI@Y({ z?-B+yzj&j!c84T)w={l=X*wEmT@K>-Y+l*JtQ#F4%Ebhv#UDFHEP`JI`+e%bO(JQM z2VUlN=jRSSy;r2FW34_u5^SJy?|MY}xb~6qLou-{(Qg~?bx1vm@)*%CUu9cxfDmwX z>$tD_tK`;gNdw!mh@nLvcW)_p@@(IQ`l$fyzHf>?NsB_)p2^HR#7mf3)i)YxSyR5R zx0P-4#IUE4Q> 7>8Z2lp* }#5*eFBAm1+hWg#Gd5ns?iexN6xI%E=Iz*Dfv-*KrZ=BuFmL^qG4z z4N<9PT{K@kMjfUrx3T@kzJ+1MsCAEww<-19)-7GUmQXwX!67nwEWt4FlcQxur?fJr z4F<=)9k1K0H3(a{&zBgAKe+ZpLw_=#CbREI zcGgp^pp~~44p{RQwPnuNrAXPtM7}u&p 1^T-FJN!_o!*IJpE34D>2&sy7CU4W$$toUTiQ8|7`Y^ct5Kvurt}>{_y)^#fdhz z4sYAt7nEd-Qmj>twikO@LscQrT6qUCU)TaBqw~FUHsQSM;A@rJ8n@q?Cw@Kh#09Cc zWTo%Y iJ$6T?;N5Km24E++J~*~>lqK+e?8i?K;?~YK}1>#RSb6W4hiC) zF+X?Y2x{vDcTFe4>=xhKqj-nwlQ(lTW8(Jt |Idlt6^}TzxSORZ~6QMc`_y0P+cEgcV!6CUJ@4U6=iy~H^JQW`Hzmy=j;1! zI8TilG{@a~=m|BP*B4!S)h{kpvwQD-`1aIP!`BJRO7n) (t2^HR^kr=SY(qWo5l+bZEu) z5fV9XmuITiR*7~+r7MCai)V_me( )W z?}_BDY`4Y4je+e>69i+Wjp9tDf}Nd)Wgm5yk?j@Ga^=dT0=tQz#O$2-6(hvjfYcO* zlbwq)Q->32wLj)P;mpN1sU6prT)Sv$0!^z}o|;8X*Y7wbGiFeEv*qv-rbJHI!p1dD z*Q>3+RA&a*?b1puFD}{9#4n(1h-!YU(EY@Du3X96NbKo%Eh+T}3hIgra*DVv%Mo_T z7IvSTVvUKH;THNX?;eXg3u)Lg8Mz|{z9nAE^jfc`r-{A%@dJ`t3ENBQpir{*kbTwU zlr&rngKjQZkOQ&XwLM*bUB>aQ&D~DL%iq|QZJ*06$<8nqlOW=P$}6?UW3-RUbwL*? zTEMAceUN^^OOrMB(6D`Z*lUc)l&l9u&`s}YZEqhDQOaee!%8PR+%`C3j%yDZ-_0LO z$lkKt^t#&HK9gk$>sd_(>d9^~FD{_un|!&MtzFj&a6>f`3zN1|lLo%5JUc?GI^X(w zcT#Ihy~BlhP9MBoeH-W!HTsA%CyiQs?#a5UZcM&?a+g?VlrD=V126E$1Xp}m^lZLa zW?Sn1u2&}ShE3N=y@IwTEeSmIb;Yszt@sa=P35}>o|Jy7+ihO`p|bJw!`v^XF*W=c z&cvv5pG6qyv}ME8j;GIe%WJ2Y#Xu{bfj`r|t<`FJT$s9Px9g9%-ckkm#!qMVq-3W3 z@IUxL`jNN7kxdR82F%(gSI0)Ht2MfLN6ShkT-`q26MrwTv)!&?Uw^!huvgZD|0aU| zG3cOj-P!uD3PC;9W}}N%ZDXe0G9HIs8C=$^=S^- ZS1*j1=l&A%IS+2FYYU^PbgTwHuDqW;7$pg%$cX8!kcbGDplWEtD4pn zENlK27^}`Dt^KkI@3#HSURF%Cl1WMNDY5K`kT_rO?27TiZ|$3PSBCME+UAuo(!AC} zjmHeFUkEZhRF5!@3eE?yPTn!PX1}Td*G~2Ar60KC&QdShpKH5U%JF9UZ3C6?gR9$1 z+U`KrY$i^{_dSg+i#}4~|3KN^>^5G0)Z}QRjM(*6P0+U{IjBh~^OQlIyxtDI9|dHB zPk->nin)8%FEV^SnlH0c@V%?Vr!&xS#a8QklKU>LcZs;pN q(|Cp_q*E+OA^oQOU7dwzBl+Z z-a7GQ&gz`7({G<;JTs{K_8{V^gILWuP1lhf_x&N4bK4}u_}4PsBV;x1jS$%yZO6G; z@k>AMJK6CP=cc;agwmn+{B8A!b_dt{jJw<;lXHrnH+a3#i>PKCa1LVWDe@)e4 n59*m^6M(cfL3=IMDc6>qo!X-OvYf?tb)G`RdbSST%R~)5eL=gud6kL(iu?%o=gk zI)*&=iu|ETVw=2)9wS4AX^4_Pv?~Ae_=)7C*wd}6Chk`jRDLji*Of5QG^t+gw50KT z@}mbmU%X^1^!je^^;1o$X>&N8cV#dB b?SRKkdPP5O}o8qxx>B~ z^HI!Q9q*eiU9}(6H +{(62$r_nt{qAS z;>+O%`8qm82%MU?&R$H};LX*(*B{K1z8|hm{v5P+@{1X5N%H88zC#TACfq;*1Cs4B zj-XWeo;2}H&2DDL%Q-zAUvAXgjD1+M=!kLd!`_0AvF8?MXuakqPy7gJSh?!Lla7f~ zt^Afegz~0(n=?YGXe;X~mxrn*nhOSBCQGc;nW|J?#Ax>_7!A7{J({*r!)V09T@b$H zM9ZtC`!^qe@>_d*$8ws-?y$eUdOYlLynk@clF6~&fjjOUmMJ^m?05PYlX&i8UETP% zhll*%G~MY5Twhyty8o~pl~i@Kv`TP08;R6={HeXSX()3d&r?jdt+@E4y9C=e4N>Nf znzwv@q5bEn?zBSdn7Pc3hm6U~%5+-bvDFS^t=IN5b|iOcY;3BJFB3e_*(hMhK*IG) zY*z1*NDCWVu%^8Dsw88+=jD?xi=b*2yEZ$ei+#{s b$ijXJNKHJUZW&VrSIlf zzOZgU@A&>16W1IS9PnIqj_UR&s%2ePz5^X06bSNlYAi(W(AJ~l?d8Wp_GQg^Eq1CR zYd+KU%%YC$p!=r+9%tFADlgZQ*0VpHzpyU#QHelxL0_!2DtR3@O-(OMGj|SCM Z{aeCG^9{s1Z6=9JTP@OB%q!KH1lMrb4=6@m`L6GYj&6?* zMqYsB>Vev-zAbyZgabPspFfQ=!UkQGxxV&|=W(@y2bAz5rz`DR%uiIk#N>SGxvKSS z|MIK^&Pjs*y+)`{2owbEzt$Zg|vVf9GFys91-DeqBu4L!$%X}2aZcthn*C8_ma zo?%}y?&&wKIv-R!aB26#w`xZMMt>;OZ@q=R1RGstTNQubiIY{o$3wYYbrcfb;OYJH z$@xP4T2JWt<@E9G`@GCHSw7LRo;o$JWob3H>;S4jZsMhQ!tuaU!SaP$R$3~COsJ|Z zEA`lLyQh 5t((cmgUEPk(vT=npDXKo8M z!ECIe)ZzKq1LxbVYK;l?HqE}K4!Gc((dO!0d+g>niI`S3#r4}peCj%*r$)T}l?FqW ze0pljoKv(JgN{w8Z;@J`IFW3+Daj=KBP-qk_R_TWCEp9(xz+Nv8#d+)`;4YmXk$ z@~wB;@J>S}+Vy X#4 Jfh+Do0TtQ>$Zl#({W0+P&+NM2i}MwBo=LpNds&J)s(B2^s?V;}LVD=Ib>cPPqi$ z;Io9%^x$_K0rI9SW1nF0VMyUfCST |D1+*_pX`sRLl#he_b3FfZka-l`${b@LY3Z-M)-@BN68_%1$Q+ zI`oZX9;m&ClX!9Gg^Q FsNB7xPzRb) zxs873jm+X_fJkeZgGZjqa#QoSlRQhW-99U*k-B)IdsCOVJ?d?qZRx9|o9 HzvO$|C0^jY?8n1NSwp?5jH`k82VY@Yie9MNs&&ED|Q`*(M;0_X*D&>wm zv!~ HGmCrj&8x)ubp^jd^KG*f}sK-I8^>wQby?On5a-ipeoLnCny(4@5f|?Fzw_^iZ zr{JgUSZ_{MUA>SWtR-Ba*hD=z)tn5Qdj6xI^72#F$I9p5+If6zx7ErACyoYBE^18p zeCzpz@dEH^{LxeSE-7mMLN_w>wqeFwl%!XlhT+L9NU31_ e%Jx zX41;Uz9DSm=O3SKmvkkDo3k&N55>geMve@?Uh$z!uYBevgz_$iL^|z>x`UszYwhkY8M*{tvhULBR?@&|8V3@Lj36}+n2jsU*@S4=4IKD-L9tB>@msT;yHThY0USJjo-R=^6svR z{n6^tT-|!h-R^9a(#h0y8o7J77GiF-O=jga4?KpgrsAu>YY_JFNHc%cn;OfcHLgZ--5dTqCmXoV;MSKcd0*;&CiyaP &UOw 2l>T& zu5GKhvC2fP)Q6>6=?#g_`yDoU;RG2k3Fn(jR+6$N16_7KVskqQw{{S;e4^L6m*s77 z4Y95+QeAYpbf9b}tU8UEGmkhN7*SOog9z2ht*|cLb9lh{=>eUsP}IDjxz-Q+DJfsC zAy7V&3+QDgxUcM;Pdpq?h(qU*vkl8VP_zkmhU#vqNNv_qNuRq$1=M4wxVf79qYh*{ z^X>C@cYdj}>?a2J)g4;kbzQ5J3d0$1t5You@D&uedvy$zEAD$*JibRkHV+l?y Q=S2!vq<%iO$2dcbga6eehnyudMyVdFMt-?0&jy zct3V;l&R%?P8D|I`c;YKw#ZsfmfSEtW_#j; N@x(rs}S~=|a1G|cjHhZ!D zP4-$U8ol{}7_0EI4|NI!T^nR-=WD!^g#-ur_yk-~;oIG=Iy>+11ceh5_+Z|FxB=Lw zV6_34BZ&n=PZbuAbWWn0KfS6d4U&09Fn+l9QFwBqGtx&=;ZAC>&%FDFgnRpJ%!$}9 zT{$-TR~x<;tGsw%kTIBJb?!vli9FMZx3=BAzItxZ5ZLo_M!{y{YsS-sPp;N5cUUam z#!x)7dk9*&Ek_3w2}XmPiYr_$IW?I&pl{HLU3TJUDlYEBRwk#bl&-TNb!rA)W;yWL zvi_}@Q7C#%N#Oj?>wRw5ES
h<4Oir|1}bO2oz}U&|4rHP-JQYM0P_7| z+EVmxdRf}81rgWlUVgf6=80z`kKcP;nz->)jmN&G@a0-GmlL0 ?*TY zTIu2E`RIFTm%NqbE9~-w8r3T0`HK%T9vt2fYH?D%40%?esNvlywif=wF+%<6V{;n^ z#EUC-%r`6vU= a3xZH6pwD-d#(>GvC+1h7CdNS&kC6n5Ec<=LJY-z1xwen-UuW8{y zshdLP-judmlfNT2He%;-g@?V2HC kPf_ +>ZmpFMAk`~33rK!T-X+-~V3$Fk| q!VX03SE{_=E%^;~7wBiQP-&l=+4!^gi&BpOOd z`eUBAwWwBxJa!)<@yNI9^MrVxUBfk1ecS{1qx{7;W4yL~G+)v@Ij=N#G-*n(+xhF! zW-QlgD5kYO9kz=>)@?r(a;~;n*Wk|Oa}dgKo!gxDe#Y^!700SJSSr!aSuHpWeTaH> zGVgrLCf$_z-p%OSW8F84O N3^6gcPHHrFnXLpWT`^T=zROny z*QN#H=~wGstk72m|6@dgB+T=i`@Nc?IG>%zm+TZz!S7`De@}nmo^#@`JZ*}Gvtfzf zF55}yTwFq~6(e8P)w%l0g!$f?uA*k v!5J4b}>Zq(n`(L_yhs;UK) z6I9pZBZzEy--#TBh1!Vwl{90k-PKJb%{aRIo2dk>B21+-gN`8(61JkmJPcw-?V!7A zXR;yExODp@X=kho^liQIJ!<%_k$kxPyxa6*K4Fs=W3kVePj_zM1Q5PPYU^FTm|1Tr zHsr>C0OyAlg_`pR|LL4k73_qliozkG&xc}F*w JEC{*-+9)jIHu#7ht}r?e z$`rex1Cunqs?B-O>M0TA+ Q&j#Nn>8+WNe`G{F~|v7m;|V9DjvY6M{!J=ELBw3}MA9@Ime z152Xa Nz5v)TQ;Ns0gnwhf$GrxFv2==um0JF+F9R^3cpP-ZkuZ`9zN7~?f|*AQS` zFh5eoEH|MRybwU|$PmH8joqEwT`bJi45Kr9n9EdAcZ; T6AD$eht(RShabpsft( z r@dx?Tkr1YGDmS;0kGEQM*tA4XKY8P zAnlL_17Id>i*66tj@{VYTtW48IpP7FfSLjbF*7Gfk?j%NDb(F#i7To9J79_sl&i-s zVj3po8^vIsa&1(hgvC`wT3C($YYeWLA9*-!h8ZC!{N5Ztu 5$+Wx5NfTo$Wf=I1 cY03ji zPWk5g_G+2$*YlfFmc&3FnF&ax9;IqzU)(DkopVy9^LjonC!(BkB1k=%j+} B-e_*iLuL`OR{A9CwF2O!GR6 zDtVR=)))ZN{p)l(!eL{ZT0O6FNK2Cd6=h}>>+zE!(|CJx^^R=o`TTg^?vLdS*PWIv zc(mI!Q#3HLV=ss~jf0eOclXh8xWB!6mq!BWvMoyMdtZG@n`}A{0-{7Yt#Y2v%h%ue zt)#=U%BGL!_02jzf{^l*I9bLB?mVE;40X>H5fM$PVvu(84(Rc}qwYaYpaM55jWO~R zfI;0Q`dp?HOkhZl2tDM~A1UBcOJ21{%@GWS@0@C3!$6ah*_T!8;JISexX~d66LGCe zDpaI!U3s(6M{Uk<7H$KM08_=)$W&0BpuM4YwdYj$DrD_Ety?=TssSzkZACZ=QXWX# zS{fq;*UCV99W5V=l7zQy_|UALS$|X4zx#`kV)bm(BB-f{oLr(tlL#XQ>O@I_x;Sav zp%V6{j_$v)MilPq6x@ebFHA~MO*9_Tpa66`m-$|0_2CdyWjhmR=43sfT4bK#U5%lW zODi{RDg+{;2Ojp|WGB;YGu8*lMr= gI5GdH*0 BU?Z3NP|;0^kNEUYBr5dB#|XL%c|8I zM*y?U&<8G**A #Yb&R~7pM&)$hxN} z)^gFYBkBl^fr_-X>ey9*4!+!PH9Xxv?X@z?SiDwS6(_K2z8})$2;=q24)R^!u&KLZ z3?Xc;o`bqY1?b1W+EqYWUCvpyFLs6aI@z}TwpHs8)ET~TYXP7eO{-UjiUSz5ivyvY z7;k5cZUE{JkBKWXIqbQ4GcL`k)@7sp!AfRk;%=QPQj>g@FyL_T3%qY~HNMS&SyY`s zR6XkJwXQ_oIEl`qqi$=337@H%fq`LX$`ngdfo KlutSFW$D58r0u43&vo=BB;}qG{Mc@wRhPvg{y2%h8;fIWR#eq8oz4gC{ zab)(S7sIHRtFbRu78}y~^&JVKK4Rnt0l*;m4kYuuY6+Z(MleGQbg8#jEg*ZY8l<+c zHBTps{2ZP5jSNvsTFDLBQOR@Rrf}0+=6nDRMXUof-U`bJzMxPy3B+f79NLwS5tamn zqL^ewEEm=lr67&q -m-KfK=BNjK-M~0ty#B{Avu%5Bbz@}_R)m_%Y zP}!`L(Y|;Q9XAv#qj$$kmfinhX4EZ_G#pf*bv6ZZ)Czuew+Iw9CfM~&_7VRnyvG;i z(Sd?nrJ0Jotf3BgCDEtk`0S&J!PYfp=@qRa;3#pbLWz={d|l4E9d(;Qg(w*pgJMv~ zjO`KY5fCMbW8(l-Bya`~NTb#R%k4OH1yswX>ruCJG&gngpwMM!ZeF2rt28H37fT&& zzCxNH-GWotsy8|y8feuiN)7Ks@%b)@JI^uw7`8d`S4jc>Uq>RdI;vr%tf;##IDry4 zK?%%IR;yRm3p1G1Fu|FXT{MhaoiF+H8VPY5uBPP()-f)3yzWDAf)vE2t4)%}WV?Hn zoVu;H*wa;j5xGV~e`f&dbB(w9_z()y?j3V9H~6Y|@gY!vb^|x9DP7xLUTbt35^Q2} z=L@g#lugY#+FKfxMuUG*rvWjwRz-c=H@lfT;9IvLLT*rq=(a#N=td1qH2?b7c3-@_ z`{+(zEtK~(q%@6JPll@}Pw@Eg@aExuUKcPCGkfe;=N9#T6^WRknK#jghvRad_xtg1 zz26PnFz%K`ri=uV#J~S%_uqWyop-+dl_&4-9_H7}HXYLZs~_fd9@18ZA-&$_AHRHD z%N3BT0h1TLiAhBjlBkY_?jF}^o_G6k*iC2I|L~*JyU*$Czwq@JFCPB4|HThKJkW3d z)p!5>zxVC${>7_5`SHtzpX~Q}$Fv;v-D~ iE@_uJOppTbju(y0))DKmADph!PR7JGfo#enaL~BhWNGq zRTP|fJPeYs97|bBIp;i%)1=DF`Bav39`<>EOT%tBJRA1c%klMmz8}YN+V8dKaz0mV z=H@)kxBE_epzg_SP8KsF3Yas}+&gpiEiIXMV>*avp7vM!Cs*6EhtsR`_K>nD`^tXD zQp4FTxWGv&loIl8w=EAZ?~aG*=`=jO+C5#j@-P4F&wlAUzc%GPfjDJOoDvAcNEs8> z{q61bxa4^o9@jV9HX{$5n3z$N*duG8Swr@U4NAnMfu13S4t;`$1XvIP LOgl1CrtdiL@n<5oUuslHG$`;Dkg;R20RRcN)rph*PpM zW PxS9f0FX5J_dMIu7NPc}+U$oYl ztRjM=WsL!vE|M eW7lW{W-3J 5jS@(91J z3Cj(nTlVp4taCfITGcSodV(yr8mzF?OjgKBGy*E?EHYaz3V+HKS@i@i+|U&Wv^~gu zLEceHkX4r>%1kN6rr`vd{z{ z9N3vIh3N$~3Rwmmb=Rp&?u15$Jc0q057p6;m+%cYI=$N{sRqqB;<`g73zyojNvoSc zv}gIqtJ|ryp}SIp*N2>2R@BTsB-U>3NNuFHK9fYkL7OEy>c^lhvS=Hynp-;RtJPy1 zV+?v)@xr^wdkwZ*_@_OP1$0<+@5W>00uNA8P1Z ^7Dfm8W`}-h z-)-u}wTN{UDt$W$`OUkOHpJ=f(5ltk&gBwytBZ %h6kUOgbvBfvn0a?ESF67`rk9x#59hyQrW3s@YmDP~#-Y{4IGynjdMCy<%LaBDe zmue&ulXF91-}f9*H~`9t2Mi#!dA=_@5Qs |op4iu{gJ}7_!S+FS*K{m)nTEG CQ|@ znLsp5z~D1z7j2BgUZfDdU5wNNW2mWhD^^HXYhgu1l@`R!45F%~aPCK>fPe{@h}oW@ zL5!dco!Ke*5ngry1o>?XXWHURqifoX-7Tv!=Q=b?-+Cr)_T&wo7kKQ$x`=ZD>wZ!H zm0YA6`m?bSLB)NNLzne?bg9#hp`y(;L>g8N0FZdlhp&FUeYJWmvCA}S;qOrFmoSso zxJg&Op!)Dh6>oW^hzRPm$Mxt4)dEF`(JfouFDvsij$V&a5W!ZTM=Vs2it4VApA5^t z`}aPOMSkyJz4-?}nm>QZH&4cC;Eeq4(`Qd^t{zXvyN8Fz(`f@3NJA#(o?+BpTNSZ! zrhHaCy*b^V*J+w|6GL@51K1Ax@pu35%^!UK?%)39o8SJ;>#HGCqQlLgwEX1Nu*~}J z{q1*epUnUAhp+$959u#H*KJ!VWlCJzM@X3%K+#eXa~|@#U|o5WH7!WY!)|)<>h$vN zlMkNV{NlI1@#gOIfBM6_=lSJd|Mu12`SqLc{p|6xd%il{oX*=aoc`{wTw{Cu-bW%B zIF(Wggi=nDxIQJOY~Y*^ho{rHe>}Z@eEecv=W%x!$3Y5h+XiM4UA5G@PFXi5A * $T^E67)^YZ3=K5bXqyU#xO z_{GmY|Kew|t~o1bC4f~1){K%RNm)7VQF7MtohM&;b9^%&@AHlsnK%LPhjs*#+H} 3FA%I? zB}&ml-kVHE$XgOcZ4kty1<7ct0h4lt1tDY4=!qtE^_Px1wX%gVNVG5v^rdX=QrN(-h`Vt;G zt-_
p zjmMpqwX8Fw!1_U2;35l(xEy$$lTbNgJNxV647i5aj!RkCqZUS`$a+E=C{1qEJ*{Xt zf6xBCV@08$ai`^^Wg)f$hN!cK1{+b`FuRkMV1oeCA`WHR2GCE~uU9#(Mx}{d_in&3 z*=BcPTEu8oxk?~|StzMO`9J$l|I_EspC6BBB(`;MVnoY;7n t`+}{bmh~Cg?V5obu{0Mm(g`O}u~-aS7P5 BC|4-5czcZQF!^XtnW zXE_Za?W-oqfE9IaQ Dw8se==tgHbcFISpFdO&-ypUZvpuK0#2P45+f zEL4kiYO6hyS}(8Rj7I~k`c RZq|JTYh0v2pkQM=e zvZ(@`K|m>x4P^rZ^-zUX&Eq%`vy=^ictp+r+8rZwvOmlMZZryAoiW bi(EZDYlUK*MI1fqwA^}^Z^JP5J4$u(R_ zeI8eX0uAm#(12i GnY~^)}yM}PC$X5)}~s`TaW-1 zNPWv6fh7tOLIO{i_MnWSPz5X28M0}f(zwI6X%Wa45z(V^*jDSwa_gzTHQL;yMof7R z8Wd2?M7eVr-<+wPstM3`COZJ9$x&9j_^~lWCqaw8ZJT>%PTGAY;#i_Qfs)4nA5e_S zYzEO3=Bd7~bvVvjK?kG~r@M(iNFgkz-jw=K 53a$}jfPsykW0CFEjgW&2 zeQQ8R4S ;Lf|zW65}udh#-CR!HR?epR4YPZ{;=JRPjolf(4ogvD@ zz+|bin<%?93M-Yw%PQM;T9$OP-=!gKn~p=;b~m3d@_+ur Gl5IC%Vb3O4ELL?>T+r9hwp^tBeDsA pbAS&WalR5*1)?KtJMTcPop_G-G6;jUt zOhn8iO3Ylh7<*dffgJ!+8V;PMQkJsJ%W_(`d7SoF*VpU1F6TQfW!T*ca-OcQd6?(d z%lUp==5c>D?w-!4Q`r`VkU#Jd Y0Nb(B@|%vvfT`JXO(1Ke;ilI5J&$m19HwmbEWKWnotQ>4Ukxd?5p^M| z%GPJw6ha;}(5Bhuu0XpE*~Qi4U>63A)Kd3d7r$Sbj30ElVINz=+dECi1zOmM8>xk) zPV^CI?L#eUxH(yQzZK8?1O@=UHG?S)u+ 2kER23br9DBb+8hJPa+mAoH95=)*w>BJ?v0`cCFwJ z%_j{)jrnQ2Pt|-AvZbK}U$MK8K%-_(_+$8&8LEAljMLausRmmu8x7aL`wxGY6p}_t z*)7mpFq(bSmpr+v=NR;$wLW#e(r{TjL+oTyLALQ%X*2Sa+nqQFu6lbb+Pi)q2hl!m z_ oP#v(7|xBEaQU8WPq$kM5<8BI+|U4(bxHjae|j@W(rZA|iYf zDuZed-!W^j0g1M6c+M}K(zV;(;38^Vs4Eb=0XSe@c&mxGF@=u%`Su;46(u{+@?zlI zH5a>xz&sdh*}{m9Q0!K#m?^V z&$y%`io49)Alpq4w`zFUYZ+fMV;4gs19erSsWnnbDAGv7jpltF3@3&Nihu|yQA(;x zNR)QSI}n?x7#eGYzDv;Upr*#1>OhgT*L_vSpp=L;F`-M!%%#0<<0^~8ojQhCXH@HX zi5O5(T_H-Ekh!ud4^qV>m6D%Uz7QvcA8A;bK}uF^P$k&Y>RQ;OsM>;3X39uIE##rB zvYy>d!yCg-E1pQFaq1_5hFL96ISdABc|0Q1z4=JMN(3WnF;gw>1jj??zZyw*P{d0s zBlNQgr2t<(Vbhz`>b3k?mQIlEVI&ptE>K%RpfrL VqyYk;1ZchO z2&&!@K&_b$49-MQEkGes 5!xujo+_QnTuo$>QSVph)t#- zhO$T7T2s1c%j(vLdN*_rB@3)XE)oT?2LP+(*^YiQf%s@M=EyrQDoruY#`mbn#xbqg zLkp`GL!+6Y7jFDV;=8JFE^4S=4HjINf5L;~Iv1DgYaTA2I&X$SrUOzNJGv!Wn9%%M z2>&BPrIs NX91A9{b&J!a|WpvI3uzT z=SNKck3T+r<97P{e?9%ZU&F6Fz5Y-BaQg?}+g_f_i!ZiK_fys(^EB;q-tDJl!*)KM zkB{@ZtvsZZvWwATI{<~${dQ7xS@32%oz7{u8wS#8#MLk?X?H?;^X3fVKlt &wltoXZ`RBpKh`gq(sCl zB2qLBVAb=g#5qm0t(yqtyuZ2G?e|ZY<#;~6Da$zxIrB)IQIG#gD%%FqM5Ho^6oyDC zf=#!1S=Q-h#QC(I@5gB%R+)u|X_%hoVZY7y%W|(+avnG()>K4QOG`pJH&QJ`n0C{; z&g*(kiACIUL3Yd*N>HC5sj!#<5EFCaA>~8a&f9uCogPz4<2X*cXt~P$> %2q!l}xdEA=5o zJ-s93;#5Qd?iLS%7n4!3`f2H4%Mhp`loBx|rBpdky@iM}6Xj70P*fpRxGj9t1G+SW zSd((VMFpxVQ>j$WAXTEU6#!aa1X&+Rv ym0IUP#0;&C& PaEG1vJm)HhWlwLWxrvCQ2hpk@*C;OH#Kn03c=%srZwERT15D z?a(g0oTCGf#vj2a-O$XFSiP{}5LqY1RRzYw+=|-;>aPhx0~D0vISF-uP88fy&`YXW zP)|PErZyLsyM#6mF@?cP6Fz3QanD8~J-WOJ+7^5#k _dEW-a2q#tkp z;%cFYG7dj#!Om0In6D28K(|O`Zr!RyUZV-q^)EY74xj)*RA7&jwEn&t5Iu2?F9M$S zTQ2QJOBCKvp;`Lrh52 e9e{WXWA6dYm7X*u&KBB>G$bi#eW2S&7!H*%V(_@ z$Rn>tGp`|-24;p^crn7Bbk}p1M)=8zM(2MO6Y3?JBYSj=0l-q9__E=*A}pc0Sa-x= zm*@bIdR^AbJ2X}&Y3)lfiI!8@1;mbF3CAG#f@Q<+<{btqJYLgy5bIF1NQyK7s>DhI z07?Ufooa@6GMc6g>uO`JL$FQ2_JW~7ui2%FsQ+r71uJdWB}sCEjM_#Wq9dS))*}Io z3ppzTgX$ycifkuc&qS;=kWSt^sUSrW(xQ|h3N6qTAaF)qUX=o pngiZGk08DoHUmKfG2_OD?A;0>lQq9zSJ%^=i{O6-W7L0uFH{jOfp zf$a%Wx5x`~w|@Kv^Ua-G4Alz~*;qu_sYc%K_)J6|!F$SA;Y5tAxoX=7l#m7tlh&v4 zQg%YGP=OZRR!FJ*xpN+$QwuM!I-m(CBM+4J;88_EO0^VQH)tzB3A|I<1FW@Qk_lzO zdLk5%YB`s4Arx4fUPM)VspH#Z-Bws)g#JA<04XFJkN~dct>k%FP;rxMFtk?0)ZjLT z5rIYSAVCbGEG2QgzB+nnFFbN;(*ch!2&tP&H?5eM5r11dQUAB0Uo#+$_@l-W;jpWf zJhWNC`I=270xSEncz~$0qn1qvr6Sjh+C{7%oI-{0;X@(4O4Wq#AK+B&O4aKR<{gZ1 zXvgo41T~W8^KO>f$YCsVm;tdxpSEixqMv8WQ9JKOc}WNjZwwqNxr@!`ibg@g%!o*f zmK9PcWe|Ht;%->+P6SdQtF@W|D#fqp!XxCbJUzUAv;6OW|L!0Bsr>Rc^VRv7Wctky z21?~;PsSg 41V%{LD(SNi-x zKY3BMtrV6qO(_psfe4rqV_TP*G=XWJx3aA{w4bgH zSBIyk^Zn!TuB;o$35oKwPkF#F0ZO7;5=cwgR23+!OU9Pdl(G<(l$4m(c_ykINNL(X z-A&`NJkIl@$T|#TW>zFoi1zSqWhf92<0!IRpf^zaFqFWY&@8rFcZxOUY6i?{*i*_< z&Sg2z=Od*w4SSHvb}Hvn8umO+JY4O^!>}CZ)7|mz)i8{QtLw6C=XtjN{0b346l^RO zGF3Ej9>)Fgct=ix&1HRJl^CZ?MNY3Cev)WUieWh9JPo`jX4Gd+I|xQnW7Y;V*J^7{ zk(gSs9jwDZMb^jDXY+cv**_a7PrK{on7{+2#7s *_b_pskxeen64 zKR=&8WvYZ;{Bf&+t^oN1qXMH_QtSxUp=ZmI8gH$#uxuP0q_!!Mq^K$=5f4QE=!oDG zc>qJps#*Z}id l;GI4P~or==HmcC@a{&Jv;#hMTR)gsJa6!ma67g5go%iW)sg`F z5ZjWdg1Ke@u|3$cFNzvlkRD$MB0$t4Fgag!s#;lHzXk$N-r9O*oqe2K0H<*+YB?MB zq{lNIf6Iecm0}#e*jQwJ&*M#-7JNn*DF>W@HzwE(B+N!3Xtl@Q{nd{1gG4wXg6Grz zad(qyT0t@znNWaJ+F#Q)t*1MnH1L6HnNeq}0Qzal<*eI)p_XDq*zV@zWI`1wQJ!cz z5DmJXbUi~>g@Okj_cUG;=lXn}X0lyqMTFW;Dn3yZsHzY#Q34N|_L>GlL0WAC4*9AD zb$o`{D%%}d2n$hPb%Tq-+g92D!#v(n0lGa`Q3tP& 7{cemg`5 $-CD90L%=cQnt=>J=$mk=MZ3T-i-x^ zw%R)vJ;+u+@``_dFC+g>b*Xi7bxjjQF;#OtkjDhAk0)!m?RkP_U>4vV5u0(l7@L81 znA@^hZHb5Cf|N^49N>=8djSLRs+>{yYOmcGd{pWT$3dZe(6e`2+e27sT!r9F4>8K< zM{A+UYjDmEy1HekuUAg}S__e_anG-Mp=+CEd<^ZC&O+7lz2;%?Noc#MsoQ1Y=I9#e zOv_hRtfR)Ml|tRQ;Lc@)x7`E|;q}Vyzv$qaTp1QMpuKfnOaQI+)mQ$s{g){1k@f-x z)#?ub(Uib@mH}X`jiQuD+3i?kMbdQNbPT{rff}m@w0d;?q&>?J;T?K0>RyX>DjWKD zeC-$ZT+Zsg^+^#-Ad=;b^+@&n5D1DYWg=Dxq@WT@-l0AxoijKiB_>kc)Y`0^lG-5I z+OLSf8N(i&>XVZJ0Lh#Gs8*5S$5Mu(&6v#Ux?WBTNnwc >=cpbeo#=4M{7ij2ctN3=Q)MHbnbF*iR^QKW&!E9Ieos(^W$ zUl(}*RI6;=0oo8fQR>D$Adl96N7=KBf-;k?P*G*@h+#*0r<(!=i2$I?C`V9n8;g=$ zySSG#TCpA-NxHP-FB`RztXj_C5!ETExqm3gA{}?|+~BL9re739u+7LOG4H(4#=H9O zMM%=l20E38W7CClsX2#66t+5|I>~DFFW6(M?N5jDAY+YGHPRGAK;OV_))eU*!PW-M zr$P}h8**RkZ8q+CDLatu1|^^?vxO6TEbgq^k=x@2qZ -_wdQdxfUTf^7ioxc8D{`^Jx$$fr#T#l#p zW B%%lV d(bGKVwC*0xw>Q(( znBRXkrh#9)T3^lh&;IetU;j=*#%Fh;#4p!;{_K1+jvLB3<@c{u`0>@_@pxQChdfOx zxyTBZ#L%)ak}9^Xtn+p}pAY-p)2o{@ o4~E>+7qVWj-& ~Uwpp*;QjA> z<>s@`|LE26Gf8gimEhEcvbrmw)pu+Zz6KN=9}ZA87*zLmZ+C)jJ*Rdt@5r@_7H9z# zRi!i#53Pqp0b=5Tk)Yak-j&q~^P-e2-!O6d(w`!@A9Zxx&^(g5%4M2NRf$;YmHj#` zkJb7#aIdMUoqqzc&l6F7UPCh&mzonXzpp7f`6v}CL||h0I*f-LjY6IY+!!+``nl9K zfM!&r-4|Q8c`$$Ng78Hxl)Sd+&=-ambwyNa>yZOq1&VCU) EGg`WB`BbN zfUV1ieRBi*Sr{ty!KvEiQqEV!YC1j@s)cXQ7D4sxO0N~sZv<)ybC`4Ys5^qo*qJDM z0QPOOz7noVOvA)^gouhFPfDYLFzksEwiN*9f%0CJwRls3Up$P^BCNKTd!i?zL`-?d zG%1+UAVOL#hZ1D12hSl22UVUT0tLE91cLlYPbLV5oXWZ-$fR@l=0#?Sy|0Df8y>d* zk~>-jm$v>AphwLgowQK%Rijg^7eyC!i~+oH#s{p;tu89ps%~fP)(wliTo{yE+ZBzf zMcQcx++K>h`JmQBNuwd!2I@rw@t!+>+Mq&Xb7HK7cC&=Nr9vUER!eON 7;T1}sCy?6n52=edP1t7ZoE*?-w>TB2G zgW3t)VNq4 r^md_L zjNHL(+|?*mnjU@dp1FxxNYE$rrs9D++*7n`dFX+{90)# o{4}=j>bnTH zZ zBD4d &0;cCzpA5S@pJlxYIYEQZJJB1_@F@U1|-a>H;QVIAFNeoD~G$ zA!s+CaCY!8A}5)TSW5`r$EIWuRV&m?!-TX`9$HC`h^Xjx)^fInL{2p9l}9ZKVlV+h zI_q{+S*t;-gB}R>X!&R#jtUVxcsF3^<=o<~BNCvBZ9~?|$L!EXwP%B zFr{p4j1nlvDL&?XG05JOL}Te0YE1+l>6{dKP<4x_!5!L_aGh7!49F(YRsuqiE|3}r zJey$d*d*Dgy1-*;g*pxpJPJ4x#^9{_>Rn`tz#QsUTwsy2#qPT2*O7){&$e!ZGLGRx z@T{ndmsE4|p8t5Lx2yX05o&%L0n~|tPr<`wL;sf4U34J9DvzOvDwNu+Coy`@Y{>`M z8Lfws`a&fy1VD>c7~}y|w-0SvW)z_`B28enGXdLro2nL+8M;+)u*U_cM}f}J0c4)n zZ{F~4eiMJ~Tjl%ryZ`oI<;M-G>H9Ae-JO2>m*_X%pJbL_{@T^u>(Bq u@sM&J z(r#YvCQ4WD-kz7!b#tO=Wo3KH-Gc1AN}m^zxu~_KfX)%!keJ1 z8?!%To{$Iy3Z;j~$7MM`y}o{aGd-T?<9Ye~ p@%2skcyp59*>T>yVUeb`$cqlyW4u_?j&c}!4^svfl znsy19ft*L8tF5f_a%N;oWQ*qn&J5CRTQeP)lZZW+HRWl4n5J<(ogcRK1X51S#6=-e zM1-J;7{K{-EM-ZFy+Nibw6>#z01+wMc^LLYY^`Q_FE8m^O1(X5vI?q_UKCDdn7p zX~+j6M%m{1G+pgE?-T9vG_CX9>G5?+^R&AeZ>HnpLn#|G5hXX~4qO$$FzyaDlc^~Q zF~>RI4vPwZ=p Fqzx)}x(THu7qE*oX>uDszE-h#KyksP{+6yRFSQCZ95 zXRm*>A8ziBcZW~Mn|z}sDKc|{7Epfr M8O6vEip3u+*A@6RMU4O=cM+S6pfRgR1~y1c2l(lja;Qg z!|FuN9lEIoHSwS;TuEyKy=qBzPfNkbBcBbNQ~e4F5lLlb{xBIL5 zcTJcSzT-cLsm6MW1>%OSksAT6X5t1FD@e5&EpiyQOfLsTL!owF6d&t~MU_N#rcqh0 zEju?gm~a$`kDEx{UbMS_$5vvhYuO0t8-cI(4OQ~hFe1OCjg7s^(3K23+a$|3psMQv z6-pdabth{U?<9b_#Mn$lRXGL?&m6j*1Z$b0MB^2}SXTgA`|~Iv?>J30lvY@CjdsZ^ zK~?Hu##GPsuwjTlqb3niDGE+BUJ;QN5kNT@8NJoC7!<`H?paw%%cA?O7O|S=HWq$l zA9B7IN%6& G*Q|Q2T5 @2yzu=|vuMDRy1=PA(E zz}qjLevtXDx=A XqFiSr@Zwsi!&1nmojN>jzT6Rai-n#ubgYA5 zl|CD#Sz_Ev17Evwp>=`Ay*it`oP&9ED6a#-`hLyW$@VS!9NX00^*rOE?lYm3c)zB2 z2pWOTHC&RepRlJkmqwYoj@>?*c5_5XJ^WVVV*NfU!}$xDIYa2YAVlsaL>)4BpKY mQ3IsO*GJ-#v0MVbhl`mk`jR!ewO!+BpggE;B#&V`tFl#Bwm9N$ z)nP9H^|GeL>MF+?J&1^E`?Lu`naR!oXq&9v#$cN#yw5wL3K2oYcZSw$Qaz+tbvx;H zCY=FRSpbDB1`E~vRj4+V*TJi5J-vsLIR<=}mO&6Hky3s1S^*eTph79xMoSH-S2rN7 zS%%7D9r_m$&`2lPIhzkAg06a_6S;{JHRJFY9W9n-6R!TZ=wX;NHN5ONWOw}wzSqMQ zy;Wa!7jarye|O&3yrP+V7<$e7V@LpMzYCBtTw}aZr23HDwrS(SN!5m_H68Gv?vUF! zfhssrK491b*_6XD%DtVi9TD4vYo{b7k1QLula>>7^GUbh2vFB=3UX&{BIw|*NwgQM zcT}U6tB5GE2L*MQB~Uf$0y$wl8A=pZ5h4ap7_NzvQ8R8~8LTM9)MD|%h0YhaTYuNU zk`BGhma6X~UV(G>fL$@DY3o*Q9<@+ZEsYf3@@Lr3fiTpts{vq3(%O 3QPZxw%2O&D|-V>5zRXroXsX*Ub`JUDd^j_&h #rL%Xt0X`b$sBSH{P${knetasQ`3T|T?Rp7<{}dhs%S z^051b!}34 1IA|((K6F{P6+3@nscK0x+G~MjSo7+6@(( db$hitpUbjt zU(B!G-1FgPzdu~ Ldm z@8`$Yj}Nb=-E@6*y~#GuC) fjO;d=%^cVT!`xa# ztfieeD-B9SQiz%BGOgV=WdiC;#m;-y+Hpd#C)HZ3kQJcBK)3bN*e@NxR@S8C3`JvY zJBVJaxK#1^!>59#z%T7+-nG3Ly=x5IBcH{DDvMrAAV?Q=oR&2d_Dm+0%OWd?l_Itt zqv|KB&3rxOu=~29`L)HXbqb{@Jw~+j*v>}O#G-$tQBXjO%PtO7LM$~}szv10JYW2* zhfP4y4kijUdGWN0k(B^lPqJ+ob~NlNe%bM^h(ck6Y=4BY6LB+F*<@R4!ob4_N=zzc z)>2dn!^lVi2B_|Q_6VGyMcwj((okEhHf~K!>hp{@0#(Qxc53AgVL|Y$3AK@mT+4lT zPyLD~lZ`^bYjA!qz}B3#*;~B=g#lCZM q$pG&Ouv~qV(HT~<-?0a+Ce-zak@Od zQW%lw@iY?Icv%H{iTG4c*bhDy*6x-c^xX!m;jI+@a_Mex)^~xlEt7Q}g+_pAtqq~K zUZbwm<7KyoFqZx?`SJiN+`x(}hA& 92g}-+cA(`o+sX#;^-@5lAU4(Ba#QjXr9JuYf;oP^N)Y)h|V?W6t3U z-8d= MXy@`hQol>tvPLR8cn2DvHvngOYLWzY=|wh(U5UuYx&0M*uDKnWyG*>PVt zdmFX3hjutr*SOQwkuJQ6I(rKv37B*&>^^g0{59@)rN>6%^5~us;I+B%Wp{?4SzQ=> zD~RB2kL#)i+BrJKr9&HN)z28An~l~qM{Oae1<1HW AC?_c2Q_+h`Rg@W4oQa^_*5$c{Bez?ijnETTj_aUP{sa8iP*Zf8J% zjaacM(WVlB8C*i6)QYA=LQ0**h3y#O_5rb(HYEj+k`FFa0#x={&qXd k ztzl`dShKUvYz#|aCA1dG)h*0j%Q;^3%)!^UID(VK!Rl5_0Hi=$zaE@yZNa1*q1kHu zJ@BEkhu-?A*{y%l$BU?l25AX6RKw^9BDJerMU*PkSyZ7usU#l@x?#sUQXDJnf{Ouo zb*;<1F5 gnbM@{ zdkC}vGj!8!M%jD>4)%?kIS`p9DF5U!|Liop(CM$r`Rh;1uf12kawEHq|MUxbbFV+U z%STPav*9OSy#DU@<(Hlg|Fgfl|HGfX`TqU&AAa}MXD 961N&+nFy4=0a!!%A;H&^@lxSmgsuU~%g z@bGYRdwV$Cq;$K?=a&zsl(?k)*-2j>^>*T?d%d}$(;Xe}?!YJIo9S@7+oiIWG^Rm# zT{Vq~5*|;dbz9SruWsL&_E+b}`)xUH>zg8HN+S^sV+L_4s*;# 0Z{AIo;kqrTp~O%P)#(;(l{QO@ynbaeeMMh(XC3*_g>7 zCepn6bWyifR48B&kP@fNIq{OpdR~|NZ9PrXJWjXUCdW7DX+LpJMW@}(2YJ5R=KJH_ zt6`dUyMt`9tY`Jz7VyqxMu94mA4lg241>cu0g@uaboI4g{Ebh4^k?VOW6qj}TuARu z55z)VgmzeISmTtzd^)OFZEs-2T1y WO3byI%@c9PIEFt}CGNDl `8Wi_)w pqALo@mU-MGWi7L;vr54> zFz+!PVui}h7!ZH%SWrfX4Zz9@01*;uZYI`H>57dDcGaeiKKlna99UI4eokoJ6V+(l zqS~Zu*F`JHkSAVonWmk$ssmBbC32SQ?8oiYZeeRAJ?pvPL5Q-W`HhfU^W_DdKF8o& zQdG&SUYKq_@>Z=R$2d3zbu!obM;pUpU(oJq4j1V<3=Gk-Ab^O?&f!@Q#iXfYae=vN znynYA?i!TNEvWlfoAF00bGM2e5z8|}7gASt2?tW+>mgwi4h^~K-6&t7@%H!s#dnKr z7@ouvFVx)gEs^{E^+JK29!wiBaaEdeY5$Hgs_pt7ZzDx-N^`ay3mAS;n{(4PI(_wy z>HlaqTK3@IY_Hv{yGlP`zrDgznkZ?6nSszXZFTlw|8JEN1g6`a `^8#l;q`c{1RpwO9608_h1X8|47kjK`G@`PJ>S51l@md5H_ z8=iv(9cmTDy6)(4v8!U#0(gC{5iBnBFa>j+$~YBDVkg}DCMNb}rbZLpI=?hN@?g*p z-d6+=`6NuLM5-IMM@>qUlxrKdxQSR8@A;||jn>Ev5PA#oH!5Fp=0YCUBP{r5qqt}} zGKds%*6j?1@&HxcW k)2%L`VZta$z{j zQ`>?E)aNF#Lrk(Jo3|{lQIvu*t8PGL_ `Kj;4S&h4BATGXAnk8&lZ@cj zt)jL{n8uCU4h(kzc=6gOtvb9=II;i7ZqrCt9d8Vd9Co@EhA86zb`~Dm5IUP@8m}=u zRb_|})Up{N+cQvsr2bw+%Yto&6maEe@kCPpP|7rp$O9 ru-o+}{;a(@aHK?3Zl?DQKYSiWpiJT^|7vQQ{05F&yHV=wWdVZJq785yj*# zaiw_&+_MRUa0$agX%-tkNZkbp2=X7+)}?n8#r=>cd6=RYT%!+egR!;~HhD3X0M`JT zX5k%-Q%xAC|5}e^9aWB!v- BEJJ-YbOx5eHfj&Z8DVa0&Gb;>$H z@yi5XgiD1sY%63V#KW(*x;m&t{!AM~LTl2jCAr!wM>S-07820jzXSl9*YW9_nf~!d z^3Oh+zVqSu&BOLro^SuwSM)nK`hyqS?i%0!^n9N2jj!$h zZuy zQJ%&$ za9*}!2FtJ`9Jft56+kJaQp$Xu*QJcpes_2>?xy*4zpUriFTXh5-yg1@?55qwd0rNk z?R#Iyn?Jcf?DGC<+!3c#zW!eMwQmkTdin6(kBF|GOrxypmdAmBb=@*!%4s8%tsK{L z-cS1{`?4I@)5AI+RgXl8(g-R0n DgwoOD5^RR!G zcGt_p-TCqL 1v;m!TD-w)$Kl=66+^R%At*5xSkdAB?4r~Ov8 zZ7Wj5Qn(_-QkI2ORO(T|6h#x~b9MDY5+9!4e)t)EpQLQ_F;7={e6p2?GK0mv9l*s( zJ6Qq?sMd$C*@A_tM%lYV9km4=&w>&q6-}8{2~u9X`0;+cn#OTnwogC%5l`=na1z!{ zODUQ(3V((`M((+K9TUmL!ff~G8E+cuTh$RuAONC0sTEgz`0AZcm%P`u5-6~VP@z0= z8ob-C25He!_pvfzL)j{ZN0&I-2oflB8ZG!)zR`fg7H6zx#6^obhaqNzXbb8 zX9enXJYg`iiKXwF)YagkUh1+kn{J@Tr%DoN8ON@r7blBGhBiV3#A0yfvKr zvmHWrW><|jSk*wZpH9p4$O*p&`F3k0OO5KJAVR5bjE6mmwJ%^bzG1KVz03jI={D8f zoah?k42cqxZd!yENER9 l1)EYR~MLU&67EvBlH&P)|T^C{H zaUx>fR+J5>J)!~;$O1$wyMu!B^4c&bc6yh; Cy@G*|fbb z9VxQ}-&~SHkY)|tbmOK3YI_>2N^KLht42<0_aJu{IM->VjaI4-yR32$DK03}UUf&y z!3=5@sK>hyV70(D$jZZ 1=g?O%>8ptbv5G&Ft5PKbyM*FB$CwR4@kxa)}Jy7Ta7 z)qL;bYHRgqV9_EVg;?51)K08&pMxDj>WKikYU7;#7^Znc4Gl!35F$V1r#V_kGLW~~ zJfeHW>oOKG9m$-ESeB#lI(5Az5v}|NO~PL`?Z$}U@umv1oi7=HM(z7(9^K$a15Z2) zBTw_m;G& ;*XZAug0An7^pR;`|E8Q(WhVyUtN7dZPS38Sxf;&?;_<=Kx@Ox zpj!ba5JQV +o53YR&lCP z=u2HzW~hCIE<(Jb&a2AM0zJqp1r?ASEs2z{l;s}l3`)o#sLBQ{kOxg84c98Op5I_Q z5`lD8%__w(FWP@W(W`|Pj+B(ZnK&yrLYHT~)P)|mY$7cyL CNc{fs6 zmj-CV2jf2!D(i9wPxM=uCfAp_W2Z`T*sW9MP(fop&fR*as{>XjQAQrYsh0CqW-SGf zpjlz(?&Tg*m7SbLWU2pY_U)L^0`3J*Ab^rmh7?GtX5SVj;z&$_ZCjCoZ3P6(5YH4S z0ST0l5^+WvzzLur#ekA3WYO)xj~DUbR$tr}#bWd7K_;RmykECrV^9S5{Td@$0TXDt zBBULL1Bf6;m6HP(Ati|TuIGeAR@V|DY`Pv%N-b+P_%qBGU5_XXC`sM8nv@DS>2}68 z0}3rF6AhE~dy2G!-l~2o=Z|f$F ^&|^zr5ka&pstc9k@~HWp zb9iQ8sPIe>Yzwp~09naSgs*KEQNqxm?FhleWI%Z%+8qWWI?dyEKh-}i`cJOutJC@m z@6d1j;?;-Oc`W50{c!u*tv 9_Vz#cx1apZ-NO%lI{eX( z=#M@<|K;arrs3vxoUSw0^KKe;+isoL^J$sOB8tRpHd_zitcNS8stPeDRsfsmHtVu( zBjf63xL+`HA(F&GxqSApEV#Zq;q_58D-9@%)C@~ihk->{Rq{A+W|hLkQn!o{m`Qaz zpC6WO+wBj-exG;KGN0Gw{N~l?d6*9S>-~P3fFksAkq5;{>vG&aye|L#-+BH&_*+;1 z;Ge(z{(o|O@p%03`9RDH$(dESl#)o(lzBIu=H+}o70%QCiaCQhB`wP`KR$Be>H6t7 zUC*cEs- B;qs;qJW*A4nR4@k-CvCxC0XE0n1ET0p`qU#4wlnRJQea{9+sq z(=;sSH`{!^x_K&^HqGPyd6xY)pSNWO&BHk5X+Mm6Da4t|vXymR=W`7h6{wv-dQCuy zm6$2#LBYvZ=%s9D8uEVs^vy%IgD1&pS)XsXQ<3LE f)d!DR^vG5Uvtp% z$30L?%VV+O1vTt|0=^xoOOHfVv8jmgFxBFk^=a!yiHS!Lmra%YSP*zsQ2~(Zrn(AB z;t6SR)P(Ptw$P|raa(P!iYmG)XJS%o46Ns&R4SuVtWv`yML4HakLFd?gj^>;b_#$a zdqfm%MW7IZ%Y)SyY?^tvTHqN-C(~|Ks*5visn(GfLF0k0w%{h^7q*LisWT$hVp_ED zFPfRO)&^6flUc9)QdfR#4^62DPgJtuhii&=e%Eo>li !`Yq5-tu9S5kVnmT{h@O!=5++s#HxvjU~ud zX|Z>)Rg+0+m}FJejUZ5gZcx>_C6*PWy3PQwogjreyQg0AaPr}s{%rN4h3}^PF8Opj zi7dkYt%EbJ AqNYHq^H9c`>fl!_ms z?#Aal*0Em|?H+IanBP?-u=00v<8HLoRN*-ucd2kCv{lw>NBo<-L#3etZUCYE#T~l> zs?b@CnNK{4yhW0*S>NK}DJ}r7#T3c|tQ6vS=)AW5XqZz&H6LD!QFhz9kORO PmBSIS1L h9 z=PXUEFyM-8!EFNVxfZ@~1age>#)i%%Tr8b%sU_n!eb=vAfv|>Jw4BxKEeyCzc*sYg zZV6!>ov6%iw0^*GuvrC>n=zUvP$w5Arle3U1+n@ 9+8&N1l)sDN!PnRpukMLSf&LxOyb&h-B4X;2ybz zJZ>A8t1=0IVNj|ILrqT a*ko8` UI3HHKg8R_)=h1z vb6J*C@2}6ZPezQ4Z1+YA2_D|Zdidw02nn2x9>cGK*(Rbe7T$U zw^!ryo1JJnt@LuEpWWww{vaQGvi }w1}> 5VWY6QCi+zW1Z@De!QRaFiq2L9QWfit;@Wv>)rk9<7wFK_PhOl zx*CQ=x~|KrKfc3%{0H|X%hSW*8#kw)eRO L6j2 z1SNmfsWvmQa!zT|?L5!tWjQ514a2a`_xG<()9yBn2Pwq)YJYtz>uEl}Ugi_?GNj?K ze@ba6Ls`zpWj%@%PVJy-g*_)EayC-PGS8 m2#XnqB7-A-#I+L%1@z(#6p_w`G5+jI1O;D zvZ-hXcfm*NV>*bGtWONK${7f&=pS(Jebhb^azu7W@D&G3N5x*24JrajX+(Y2f&wB) z#6-dg%qr5I9t n zTo;#zco0OFP0GU473YZnDXVUa%BrYm7gFJb;gE)%m1vNJ2O3DXvu+C!yxYzz3o5!C z0R@C0zEirh8MCd>S3R{P)!V5`Fshb7T}&YgdhvYPj*9@%eBq`^@B*7x?rP3LhJw`+ zy>{BDfQH$%UP!YF4eIHAZEn0qP%QNg9r<5mCK8B*(4w7&89dC9O2YHidqkRxdBM(S zSEoW~n)iBy$)j!utPftXG{7@Gwv!U8F4c|GVaH*!TZg17KoMuX(H>Z-7{|xN8jUF= z;{%NGb>YK@6lKXy_4XnAs{M-~zU?hHhkiZZ yuA9;x*Q`qfC%=`*dC@Mi*(bi9#|dM z%s6i5Hqb$~mDYReix&KwIy5LaTFuC>;f`8^L5$0jdR3}h+Ff*raMI&(LkU|y_v(Vr z)G~E)j@If!jf^z23GtzGG$?8xoTYEw^#cv47O*T`X&-CJ9@HzV&2Fh_+=pv)qGF+s zO;kzkaa0QN?N=q(jK^X(r1oe1CENk9xy0jKJw1hXb2pG^ ?|C>7PpZk1 z!{%j`#MCNOZzn(;Xke#+_N5_J^D!S9?4)^5K0)fw6{W^aRFw&;BBiJ(Xrz3tG-`Qt zO{ !QmMGLtGw z!T{qJ0r9e^)W;M$40x YH{ccG_vt1TckKyZE7EyDIAvQR9VRx(pz zln2_~Do w!A;-Ik^!NzscaYs zoV8{ObyBsZOJe!}nDP!%%ZRMRAO@1b9b0oKB=D!!z6;hPwwai^k+_?O_XN9Z{KqF_ zEYayhL>*s!aYuveS34z47_OiRMUfdipiD@j^;|3wKy9m_%+Q5Wu1KWY$#2vU$vY{- zzMO-ZTS#RFstIX?J^LbQ^)iZ+J~bL|yPOfm-3^=rRGsI9*1Daw+AJ-w+=+_OK@I78 z1;g@8>NF61&ke?1AzrC7?kuVsL35J!PVhj9LN|F~m`stK(W3j!rW7L3dK7QdJG#6p z{tE7B>6)DZOEFrLb|tc+e&BeEz5W37u6kXMdiSj-;aFk9s*M#k ghsVwPXuMr zvP9o#sL!=%qLWhhbQebtb+xpqn;g5S=F~kZIi~h}Jia>5=Z7QjhkSc|dv$%d+NEW{ zN%W(8`rRMsj<)Al`P(Hw+vB%?asS0XJOAEy*V9t+VfV)`^uPJu_G@3GZ$B@8^;_e& zpKQPNA^q_$48Q*a{Hu?S_osZ=@$G)doKvCw?)l^6`SE-#C Y8~3z-_W%5+r<*ZNIj1S%Xf5TOm_RB;Hz+fwL`+obiH{nvp`JT3 zv~1^7SvZg5Gz{Z7?RLv~ndf=FfAe@c?RUGYtNnhQ_7gvxwm S#zi5}8`iMI9itMlnD z=W%!S&Tw@t+j%>#(2a;d33+5Hs+gwzFb&)Jc$!xtaLS;x7TpSo0F<2JIsG-8vsEwx z5vQVs?OD=`3fASc2oL+~A@86`rKn2l%>fk3%<#_ex-m0ZUpIj>Pvb7_%W|5R`>mX& zJZ@!qeEe)DH@n?aN~3HvjJG*Y%kt)YygS~%T<3Y(KS@L8B Ks=ONYu z4r6JNnm~v;U<>+XLeK!ZFTs6;F8g2@dY6RsGOq%0#$XQS-PVrE5gEHtsT+Y6x8g73 zWFCS&Ml~IGYHlIgszjEZBCG)ImtYkJ@ThyPY^A5gC|GtN0M(Tc5EEr)74fI^l4_Z? z6wV_vL!o7 2k(uw0DHBaxptYlJZ@7V6JoK;4(r7O$JOz1gr% zz)PSMS(vjEiWLXbvTy6Ho5Y=BSuiGQoW_`#Ka7vuVvPiwr-#>enyKrfjdav&1y>8e zaM=gXAPVwL)J}>)Fbk(;?LO3&AG}}Jea|agWQJK83dNQX%OARDQ#8ABD{_HUies== z(-nYPjVvf?bvA!mL{zD$GfQW+Atm!6iWn5$=r33z)SI!BX1B)X7xj;N%BYRsO*(=! zHPIScG-vRC ${BftZg?IMJkZaM4;_b&ZAJ+_PGZ6Er8eiy*tp!~2 znMB3R$K7Dl!MB}z2#;2kh!eU=AfVQ_bk)GwwH$QmL|9Ll55jWl8Ds8fJ@VIY)S8{w z5`DH&E01&z_R+wDUYlfnZR%S0{H+r;A?6rdzNx)lzsZ(;LTdk-jwq}&ygSx=oJmE^ zfqH$k;1?M~ylB+K1E1Ej#_Evj>Jh~aDupnrY2FVCbt@YDz&9w73moM31yc!mpoj-< zlJmD1wR$Md6Q*k<*3-TDNgj2)0cF*?@VG}FQHUrjK~Hyjx+fy7G|y5vCM4C;%*>}9 z=BKu3?SFXy)M^@5d{)Xkj88FMsTSB04m{v?Zqwf+tT!~?XW?itU}wU5VGo|KM_-hC z7lEV_LwGTs@-^}`jaRy@kcXC@lHl?IvKK!T@Ydez!h5DX0Rmm^Um6Grx@uXWpqz=5 ziU5LbQ7T$yXd$Z0 O~s^A1>=md~;n}#tG2x4`vh#gEQqO~elpT*V~ zK(&(ScMcvEwHv^1Z1+&q4Orgd>Edq=V(ZZzmJc)>RC6sKgBYAJ?yNSd1q?`qbs<@x zbyucdR N> 6L)Z9$YmH+`u zv0+%*3nr?zYKYY79&z$d1;5@2)Qe_yNOjol?hU^haKNl7^cE?zHiPu5RyeXX16%m< zP)6h#pAzD6UCv?DEx2nqZrPC2Uf-0_jHZjd=!gh4uW`I L=KA_7 %umwtn;)!y<9XIx?y>#!^XVs_(--UfvzPL