From 18556ca6af6b2e325e1a0a66c58fa72138448fcf Mon Sep 17 00:00:00 2001 From: Kevron Rees Date: Wed, 8 Sep 2010 10:21:53 -0700 Subject: [PATCH] initial add --- McpBluetooth.conf | 14 ++++ adapter.xml | 66 ++++++++++++++++++ agentadaptor.cpp | 113 ++++++++++++++++++++++++++++++ agentadaptor.h | 44 ++++++++++++ asyncagent.cpp | 80 ++++++++++++++++++++++ asyncagent.h | 29 ++++++++ audiosink.o | Bin 0 -> 271416 bytes audiosink.xml | 23 +++++++ audiosrc.xml | 16 +++++ bluetooth-qt.pro | 8 +++ bluetooth-qt.pro.user | 181 +++++++++++++++++++++++++++++++++++++++++++++++++ bluetoothbaseagent.cpp | 87 ++++++++++++++++++++++++ bluetoothbaseagent.h | 34 ++++++++++ btprofiles.h | 31 +++++++++ device.xml | 26 +++++++ headset.xml | 53 +++++++++++++++ manager.xml | 34 ++++++++++ nearbydevicesmodel.cpp | 158 ++++++++++++++++++++++++++++++++++++++++++ nearbydevicesmodel.h | 57 ++++++++++++++++ obex/agent.xml | 20 ++++++ obex/client.xml | 34 ++++++++++ obex/obex.pri | 14 ++++ obex/obexftp.cpp | 131 +++++++++++++++++++++++++++++++++++ obex/obexftp.h | 61 +++++++++++++++++ obex/session.xml | 49 +++++++++++++ obex/transfer.xml | 12 ++++ obex/types.h | 11 +++ 27 files changed, 1386 insertions(+) create mode 100644 McpBluetooth.conf create mode 100644 adapter.xml create mode 100644 agentadaptor.cpp create mode 100644 agentadaptor.h create mode 100644 asyncagent.cpp create mode 100644 asyncagent.h create mode 100644 audiosink.o create mode 100644 audiosink.xml create mode 100644 audiosrc.xml create mode 100644 bluetooth-qt.pro create mode 100644 bluetooth-qt.pro.user create mode 100644 bluetoothbaseagent.cpp create mode 100644 bluetoothbaseagent.h create mode 100644 btprofiles.h create mode 100644 device.xml create mode 100644 headset.xml create mode 100644 manager.xml create mode 100644 nearbydevicesmodel.cpp create mode 100644 nearbydevicesmodel.h create mode 100644 obex/agent.xml create mode 100644 obex/client.xml create mode 100644 obex/obex.pri create mode 100644 obex/obexftp.cpp create mode 100644 obex/obexftp.h create mode 100644 obex/session.xml create mode 100644 obex/transfer.xml create mode 100644 obex/types.h diff --git a/McpBluetooth.conf b/McpBluetooth.conf new file mode 100644 index 0000000..24125b0 --- /dev/null +++ b/McpBluetooth.conf @@ -0,0 +1,14 @@ + + + + + + + + + + 512 + diff --git a/adapter.xml b/adapter.xml new file mode 100644 index 0000000..c02b83d --- /dev/null +++ b/adapter.xml @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/agentadaptor.cpp b/agentadaptor.cpp new file mode 100644 index 0000000..7967f13 --- /dev/null +++ b/agentadaptor.cpp @@ -0,0 +1,113 @@ +/* -*- Mode: C++ -*- + * + * meego handset bluetooth + * Copyright © 2010, Intel Corporation. + * + * This program is licensed under the terms and conditions of the + * Apache License, version 2.0. The full text of the Apache License is at + * http://www.apache.org/licenses/LICENSE-2.0 + * + */ + +#include "agentadaptor.h" + +AgentAdaptor::AgentAdaptor(BluetoothBaseAgent *parent) : + QDBusAbstractAdaptor(parent), agent(parent) +{ + +} + +AgentAdaptor::~AgentAdaptor() +{ + +} + +void AgentAdaptor::Authorize(const QDBusObjectPath &deviceObject, const QString &uuid) +{ + if (!agent) + { + return; + } + + OrgBluezDeviceInterface device("org.bluez", deviceObject.path(), QDBusConnection::systemBus()); + + agent->authorize(device, uuid); +} + +void AgentAdaptor::Cancel() +{ + if(!agent) + { + return; + } + + agent->cancel(); +} + +void AgentAdaptor::ConfirmModeChange(const QString &mode) +{ + if(!agent) + { + return; + } + + agent->confirmModeChange(mode); +} + +void AgentAdaptor::DisplayPasskey(const QDBusObjectPath &deviceObject, uint passkey) +{ + if(!agent) + { + return; + } + + OrgBluezDeviceInterface device("org.bluez", deviceObject.path(), QDBusConnection::systemBus()); + + agent->displayPasskey(device, passkey); +} + +void AgentAdaptor::Release() +{ + if(!agent) + { + return; + } + + agent->release(); +} + +void AgentAdaptor::RequestConfirmation(const QDBusObjectPath &deviceObject, uint passkey) +{ + if(!agent) + { + return; + } + + OrgBluezDeviceInterface device("org.bluez", deviceObject.path(), QDBusConnection::systemBus()); + + agent->requestConfirmation(device, passkey); +} + +uint AgentAdaptor::RequestPasskey(const QDBusObjectPath &deviceObject) +{ + if(!agent) + { + return 0; + } + + OrgBluezDeviceInterface device("org.bluez", deviceObject.path(), QDBusConnection::systemBus()); + + return agent->requestPasskey(device); +} + +QString AgentAdaptor::RequestPinCode(const QDBusObjectPath &deviceObject) +{ + if(!agent) + { + return QString(); + } + + OrgBluezDeviceInterface device("org.bluez", deviceObject.path(), QDBusConnection::systemBus()); + + return agent->requestPidCode(device); +} diff --git a/agentadaptor.h b/agentadaptor.h new file mode 100644 index 0000000..00f662e --- /dev/null +++ b/agentadaptor.h @@ -0,0 +1,44 @@ +/* -*- Mode: C++ -*- + * + * meego handset bluetooth + * Copyright © 2010, Intel Corporation. + * + * This program is licensed under the terms and conditions of the + * Apache License, version 2.0. The full text of the Apache License is at + * http://www.apache.org/licenses/LICENSE-2.0 + * + */ + + + +#ifndef AGENTADAPTOR_H +#define AGENTADAPTOR_H + +#include +#include "bluetoothagent.h" + +class AgentAdaptor : public QDBusAbstractAdaptor +{ +Q_OBJECT +Q_CLASSINFO("D-Bus Interface", "org.bluez.Agent"); +public: + AgentAdaptor(BluetoothBaseAgent *parent = NULL); + virtual ~AgentAdaptor(); + +signals: + +public slots: + void Authorize(const QDBusObjectPath &device, const QString &uuid); + void Cancel(); + void ConfirmModeChange(const QString &mode); + void DisplayPasskey(const QDBusObjectPath &device, uint passkey); + void Release(); + void RequestConfirmation(const QDBusObjectPath &device, uint passkey); + uint RequestPasskey(const QDBusObjectPath &device); + QString RequestPinCode(const QDBusObjectPath &device); + +private: + BluetoothBaseAgent *agent; +}; + +#endif // AGENTADAPTOR_H diff --git a/asyncagent.cpp b/asyncagent.cpp new file mode 100644 index 0000000..1c2556e --- /dev/null +++ b/asyncagent.cpp @@ -0,0 +1,80 @@ +#include "asyncagent.h" + +AsyncAgent::AsyncAgent(QString path, QObject *parent) : + BluetoothBaseAgent(path,parent), m_connection(QDBusConnection::systemBus()) +{ + +} + +void AsyncAgent::requestConfirmation(OrgBluezDeviceInterface &device, uint key) +{ + setDelayedReply(true); + pendingMessage = message(); + m_connection = connection(); + + QVariantMap props = device.GetProperties(); + + QString alias = props["Alias"].toString(); + + QMetaObject::invokeMethod(parent(),"requestConfirmation", + Qt::QueuedConnection, Q_ARG(QString, alias), Q_ARG(uint,key)); + + return; +} + +uint AsyncAgent::requestPasskey(OrgBluezDeviceInterface &device) +{ + qDebug("requestKey"); + setDelayedReply(true); + pendingMessage = message(); + m_connection = connection(); + + QVariantMap props = device.GetProperties(); + + QString alias = props["Alias"].toString(); + + QMetaObject::invokeMethod(parent(), "requestPasskey", Qt::QueuedConnection, Q_ARG(QString, alias)); + + return 0; +} + +QString AsyncAgent::requestPidCode(OrgBluezDeviceInterface &device) +{ + setDelayedReply(true); + pendingMessage = message(); + m_connection = connection(); + + QVariantMap props = device.GetProperties(); + + QString alias = props["Alias"].toString(); + + QMetaObject::invokeMethod(parent(), "requestPidCode", Qt::QueuedConnection, Q_ARG(QString, alias)); + + return ""; +} + + +void AsyncAgent::replyRequestConfirmation(bool confirmed) +{ + if(!confirmed) + { + reject(); + } + else + { + QDBusMessage reply = pendingMessage.createReply(); + m_connection.send(reply); + } +} + +void AsyncAgent::replyPasskey(uint passkey) +{ + QDBusMessage reply = pendingMessage.createReply(passkey); + m_connection.send(reply); +} + +void AsyncAgent::replyRequestPidCode(QString pidCode) +{ + QDBusMessage reply = pendingMessage.createReply(pidCode); + m_connection.send(reply); +} diff --git a/asyncagent.h b/asyncagent.h new file mode 100644 index 0000000..82868e4 --- /dev/null +++ b/asyncagent.h @@ -0,0 +1,29 @@ +#ifndef ASYNCAGENT_H +#define ASYNCAGENT_H + +#include "bluetoothbaseagent.h" + +class AsyncAgent : public BluetoothBaseAgent +{ + Q_OBJECT +public: + explicit AsyncAgent(QString path, QObject *parent = 0); + + void requestConfirmation(OrgBluezDeviceInterface &device, uint key); + uint requestPasskey(OrgBluezDeviceInterface &device); + QString requestPidCode(OrgBluezDeviceInterface &device); + +signals: + +public slots: + void replyRequestConfirmation(bool confirmed); + void replyPasskey(uint passkey); + void replyRequestPidCode(QString pidCode); + +private: + QDBusMessage pendingMessage; + QDBusConnection m_connection; + +}; + +#endif // ASYNCAGENT_H diff --git a/audiosink.o b/audiosink.o new file mode 100644 index 0000000000000000000000000000000000000000..99056ef1ab4de1e4c38889038c8d8b33bdffb5a1 GIT binary patch literal 271416 zcmcep1nzY-uL&spZColTh4r^oH=vK&YruOo7=f95m}KxvVxYm zv#f)igF?!ZV-+jIsvz`2xMy5xJ*Vn94d*^fzv{K{LZxr6{QK{}^Ir&{L@t;2ah7)} zwX}1kWj%9`PGRd-H6cWRb*boJi;^V;)L%6l8fW2&@ zWjTew%7D1a7N5d_C|rD^6?B-XL$OBTdhwQ(P>Wh5h~}7P2`niw27FlwmX*X8mQ~0A zZqG^TP^=k9g)5^PMH-Wcif68(o;h+`4CXj&PO?`XV_C)7Hp?pEnIzbfFo|pKnN-Tt z81I^tVhYp*R#`eaS{^Yhq`GHVJcPT})bOgnW!#wT$(p6moV7f73>(4awM~(rBjt6X$|I$9 z)i6Y#+XD5}sa`>Se}QFX`57!LyRb%XgIbn`WW-3zYM3p-*vRb-merU;DTo?aRuiHQ z#n{}Y<$FZ(SXNiBz>O+5rn(ufsK)G`Cn{ZZ56>nUUV7#MHA^T9Klef@cL%qbIH0+-H@xq# zVSV!0!DW4;%3NLjJj>W#x2(UENnhgvZj)~e)?}gOKVw{(=3kBp)e1bEiFMirUXukwF=HoAvjRU9!S!2hnKxwD zD$F8cH%x&Ha^?-gT_EPG4rIklgs@PT;6%m+>{=Hw>6f31>;A#{T;#;;*#^{oak#!V zxL%6vb|fiU`u6e+c9#=s3Q$}Qb5rbxd$A&!WCI%NYHvhY{4gujO|AkJtzZH%E!5Md zTR=p?; zB0Z*AF->-36<&1pR`A3OzZWEXoVaERj$}W19Qy3{UP1)e|Fi?f4*vtc+6}{G#TJ_~ za)f2uFT4)fwml3|?Q1e%w%rn#czfN8Sfbe@>X4Oa7h8x$nO(L!S%vJI;>ap&-+luO zuC>^t@!*G*lw3<3DfPHLa@S$EexlIVg|=Ju-N__(PY_g zqbrfU5*7sP&*9~OJqS(?+ON$4)Sfc~;bjL?V5>cF1zENgdto}uxFMzr%lIb+I*Rq_ z-5N4}nJYR@zsfdjiD||31rM+d{Sj%9Fsu}FJ`^*ZDMg^gvOhq_C;PcBtoOiutT#B6 zeKh6bx&+ol=Aa~|B{74QLTyp+*emCj zkj1ho8Gyw4jIv78duJi~pSqi{fB~4a9A@kT)Ildglk#QwL{Hqu#?WMxl;ILsLS>1I zV{M{DE?2dzg_*BGQEFUIG<9qhdI>{!Y>tE4#vZ2ApxB4e)|MTZ&)%4bMhw{LeYxk& zex4oJbOAS9k64&)XO0BW-ck`BvByG0oRwOo3OY*cD^xPZveKU30@SOb0#>EH{2El9 zinu3Ds(+f^fB}JuPTK8=z1TDA%ml042rKqAF$k>b)E~_fTa`wSQirsJ{6w~$KrHtH zh}G!G)0QPggZ;#xe+97yHCRJdEe^?f9x;jUt@1Q&iWOUjzPwh}ju!1U0BJ2gK#6r1 zZ7Pjnv5v6VWasM><_Q4cZ$} zVT{o-aGH?|>lx?P8r!G7ZG3h-+qn)17H&h`_xp-;s&rqPR(bF-h=t^|lp z>ElkydB{&ZiAf>08NGKzd zSyB;?=0mLHexFOvVh)hTcq<?M?8Iar+l5-3v#c{sfjE{Av6ee_S89AoWqj-*xJjzPgzj{x>#)}UqpltGL~d~musn0wL{bOoU`^wDbn2);h_5t>^Bk7rtIw2AaD z-xYf+sVfLj_9G^$*lX$gRJCT)e=q@hAqVoWqkU*>k^lUEK`T%vZtlU9UJmBJ&oCKT zD$q}Zplv9} zv`RAyfcZuC#{w^QG~JJ$Mk^WHn>|#4>cP&~F*F8)Ded-^m#Yl?SX$f(_!lDOZbj3n zJXdra5oT)fRXSqEt%?j{JY^^Gw3Ea$)c?`JQsJ|x&?72*X0-7CcXF4}hAJxe^=P?b z^#9u4ZB*<-m0OXUi6g=d`~Qu|Kuh@dAsRT-awoAV5UHcZ|3+MO9wuL)6_J7TP9tt1 zw~~nytdP3`dz|`i)S=9+Ngfzh6{jF0ZU(rW&^f+*71302;=_m{u6hbxJcPx<-{*_y zG#o%-BKKCZDiyx#JUB82+gJzA4y?2+mPJ%~$50ehqZQ~JQWC&IBlIC?nXNIwgq)E) z>J^>dgs(pu2Z8pL3~05FKLmC=_XMw9%D3QE%i8B)mleDHbKE%fXfb1#J;>OBSJ;Hu z8snJKj2>dj_%lrDk0aTGd$W`dI0mgM#g3xL`HNC-yB|qN=lZ~`BxL!fj2vY-Ljo-a z@j}K*3+#lhp#ki6H#6wr%v@00jow0$7qPnP6 z?J|@)f77>kzzE)ric#f1mZD@_pe_7<5RRZARW6D3uQNUnm+lqCkFcBx0S6qYZLo5a zp8%K~n1|k3ouve+6mj!7qv<@nlNfs+3N0-gL!m;EvZOk2n1ot{I+jwSsS&~r)W8tl z;&DpljicU%z#dQXQ^(T;Lrs7k5w;0*n<4x;ObGX38geGmT^=EkgjlRswbND$EM>mO-$IR(1ONCFq{L<2>a5oQIe~6038DbyK4g zig=Z+PMFvYZ76 zHzS+Pv{`;Wegbh8-d~$sz72l9evsxY+B8ySK5A&ysT@Mdxh=LmfQ?f|Th5w2*P}&w*!a~**aiWj$2|;r825@_*X0O8n(-CT_0$=#@W1dI-h}f6 z-_zh7G}C{`-_$xr@e2$di`f6dZ^?d7@sAliJNZB4Z@ag-;y*WdcF2F=cU-BV{wbR5 z)%Uvp#_#O9M&-9Mc%CT!L;kKkh#m3IO$LuCQ}Ku(z4AB0Jx7t&6Q;WjQ^C;tZd|4I zoHkHzL`d>Wz5fd=E=B4k1LZh(P4`0|%)x?EplQWDuLxB7g~rMr9`yv(p#YTIg%tYG zI80&!o%LVPDE!|27?uUU?|;NcF+Gy|zAE|V|DGv|^U)p1w28V*JYM^T073odA<}6M z?y9Vck(vL0&K_mL<2egd#=-w%8Lprd`h7Y^tEcuN9A!>?p9Q&NwJi8+4Mm)$(BC;2 zo1P0|p&_U%(Wsh0+_w{mm+E7okOdCPEa_FsL>4CmBhVA)>%n~t?P;JUvi#7K@3E&D zI>$hHzIB68p+|U8`SNR<75adI<}*N`uZ%*HPo%zOp!p0C=&LVhR4Up7YNnvh%)$sOsE!6Dx)mi$h1XiYplT-@lvKu#dj0AfirQ#Uep%8o zZ%w#HQBNDxC=BA_Lo|w1^z9Rvn#3oc7mO0?&%QLta;*;{xvP=SvLHqbe`o1f6;ml6 zK&*K;x3~JfqXBH+pU0Z_YDPk2a=|FE=KY3vR1sgUiAKSi>v?`ZU%4Hu;pyp^0hpNJ z>L%5_TdWuS*Jto{LGZsAya|ka_;0K7TL6|{zI2p3e8aoSA2tCodZ97W>Vj`&@GKPu zzs=7BKMcXMl>mn40o0%gW3g!e@#s_qER6<48Z-Mbi214G0L!`?PNhB3DCl_u3r6SX zy`vTIYCgbs$a^}!{Pvszeu)M|^c=YgF&D@5({)nGGG6`t0Vt^7*4>~hrsf7EeJIj@ zS=R3kCJ{+I3^ypAWs($i@DNacIEPi%QiJkq6x5#!CabJR49c%jP?whfqp~=$rNQji z_-jLW;_qEUG={9Q9!erX0*Nh#S6^-h<1W97#jUhn_5T67u{)su#FSNNI}Zvm8?fAQ zu0Dixm>UFs+A`GK`8OTeG@;Ekv~+61`Fo;rcdDt|{lr!Ez!;$OHI?%TKe6#?5JR+Q zwLaH;%0#nbcOQ?^NnkOQouku0LTWV3JO?T^mYQx>Z2de~ZZ4#RM5IlH&m^lyaUwq<8QEjU%u$T9B@=90Qa7Bb{4eO zF<61+lUs$b@^R$`%6qjGY(BZw=t3p6p_ajlGxA}pQ_DswcR(I&J{xM%RU|Z|Zu1RR z7BMV05@)q&T?G|+Pc#gOQXeB=v*>;-37$HLsqr;NNP@;)v2*e<;(Wn2pb~g*BiPFZ zD-%RMY-9TLHI-WdCiqrHNsNX1QFuggTG2<5`MZsQaVj%{XiZBi=^#EX8j)12x4`Zg zj(X%$+_eh3!@#u9?d7#kJGuumcaz6?5#S-9rO4|bcA!;n>Z_U)e&XM}IOs?VCMfYs zKe7K()Swe3{h~yw7^x`4cKi~YooVUaN=)+;`z!&m3ys1Up34R`^%GBF>T$YJ>Kv`l zKoH$5yH@AD#sGAu^c}Xy<8YjYf(S@NZ z;Zp{%@7(21I@N%?oZd9AfdUAPl*F&SBY+n0l+%Z9K~u`~T!8^z_lARt;eCtKkJ@0L z1J{e%0H9&g73(7)3anpHJ-ZwCR&3~y0Y1dP$n_(5(eT8AB+rVx?3?ZbJTtvl;C`6=B z32Yd>K0qDN(ZKxuU0@?=z$TS84lwgb9Z@%$2AxyDnkYb&wi~F#SBiSvL*-L8fvOKu z)JKdGfPc6WlWwF!h1Bv8p5N64JY7bqoI(xzsIY2)xt9A;8!)vy)9Go9XX4M!Mwkv| zf|x;nzO8a5cyj!JS#${RK}EzWBSNQd5pgqpjm4ZG_In}}Q1&vcxP{7XAnQ7A)pJHf zU^vWXF8F$CZ@}hI=?^UHD8sH6410-t=&kg{gQ_kg({qqtTA{9xHkbNg3ClS)>Rd4F zp>=@GqY3;}4_jzz!LT`aUU25quTv}wp76Wz5?0Sg%5_l^KI z(>17_sCa+@`RZDmAELKX|B3qK`wCFeqxn}nk!_>13-k&4LO#S_jMz@Q@!Ck9*ORK} zm2vDgAa+olSk+P|AL8l(AnqjW({*L^%!jy>TV*HBzFoCU%ZHG|D(I7a18$mouwXm~8ddv}n z@XI(rgRaqj^1eZEcY+LgW__IcqGyPVD+Zxj1n~q7D4|-?uwu|Us1|wteu_3@i6=60 z3_@iH;u)&hOcBEjLS@Jk=}{V6ND+$+LS+cz82vd+?bvM)ei<)NlB0-|2BEc;n0kqv za@v;PF~VK#s1}Kb6ZG{b+Lj5m@**VaPSWKk6;Uf6LL%m6YSCU1-SZ(NE?=R^Xj_Tg zDfti*Q?C+@P{jIt2&v0yY8_U@VS`YANL|iQ!hS`(n-3v%d5wO#NfCeNLx`ns(0R12 zSX#EW=MU8)wS9}a4_2RElMf+vIZKU(D`H4K#IG31oR8>2F?|O-hY`|G5TZi-nEGRy z;dL-=_1Hl?*%jl+C$xQs5+66j@-%WHa;l$FwN>Q4T7KJzRpMuK6Beu@_7}s6O^&@F z_H(L@WPuQq@C@Px3ie;6;xWPbijEE>%>PVqdo(`>N2uqiBKj9~G*nsKRiIlj4LM&^ zmz|)FF;wLh>Nga`R7tlPsxAzl;g!?(^mUd_5_bcU)ah~Q$NlR-?gd)X+_KJ&1ou(q zmdJ*anx}&JE2Zwz$>RfN?CUaqx&}foQiJO)>vPcQl3~=*=`vB#x?U}Zx@X9QN_(KJZ?^N|7<&pQI4wxIjO9@^ z;`&+Ng0vv87Gti97#)qMLle-8orQth(XmirP_<`GKwaHhOH-St;X>58J6Ki(tTmQ3 z6)4h%u`>H@03oh1@2M?%5?hHwajiaqM0+FV56hnaGq84xWd5Z}(T6T#XIWeu{?&^; z1@pgUPsL6TvTdXz1NK80*n(Ew8<0bYTgLl2c~4c{Lf2sf-SSrfc7I2}>f)MG1IS3c z54j-T7Gz_!7T3H-6>@(efZx(ti4Q65LSx{ssaR4s%TM&vu8jjt%4Ss1TI-l}T^_mr%dM!TU3+H@!ZV-D zuYOzq&-aa5nVbLQuwTO)#ods-KRRR|Fd@s(xOMa`*W|E z)*BHf8=Edy50v-Q+D-xA=6@$@C^R>;8Z>U?EGuqHu%gNw?9tqTA%$*4_l(=R2iaJO zvAOvGC&~k`z0zfsu+0OYlU>H@Kkm-nvsClb9?jjLof*$3~%<3jVd;j0h^DUWYEsuy=C zF-hH&?xz*c0pH;aol~fppOz2;-;tlN9+Cj>@24$X2finoVSOgFX@1(6{-8ZsCbEcL z?WYaJEFSk%dL@HrlGWCA|EQSy$U~CbvalXc(jOzO2EvxQ)PB&MFtvxY_&h| zwRFFXML?YneXgd>iAKR!sa;^hYs03fm@OUvH0fQhk47$B+WC;7l_u$xZ)74=xMz{t zZDsz9M2{2qA^%#%?Rj5B_q;D7J+BloH11LxrE#uThlD{}`}B`l|=(FAvFRO$-4)=;?;lA((Ty@PJb zLzTt6@~))ShAPjTrRY-(s$t{`Jwnt@@bH=!4q4U|w)<5NktD3{M(^<2_^ArGU;sMW zi*MH_F4d5CFc>Dz6d$AzZ`clRSXN)dt&*X+8@9t6AE^$lExBC$7MUSNFYj}ON8Hn`>qEh6=SOrhP=9)^g_Dol&` zhqq*h@2y%#X>AP6-I5)??+g-tG|(@Pw`7NRkB`^>KhyBITe8FVe?L}fTRfWEn(mhD z@B=SxfzU^dQ0z0EW`!TApH3FLm)Z$vFMX}3$I~!YN=)oB zD0Y7&zC_j$!tf`k69&a$A3^a}!0;18uqYSQ4+iCrLP0(GB4!Lh6>I6)<<}^vr~bgO zEvUu@<=4m?`NGevL6EhBwKTw>SRtEO98VDfR#l6M=x(xz;*-B4$T`A!_PHO zR70LI097G?V>x)75=%ce097G?=gUo0z`q8dDtLEa`1q;Cx&TaX<#~i9!bslT7k;r9 zEa6#&TIK<`yZgc~{W(AZqoV;{`&@;Xll}VY@Uq09)DYfq7k+s>qE)852Ms{$Du7q6 z8K;0(3_$D3TjRo~X4h80_XeOU1aSHo_Qr{dgw|eNRfPb~9GR;UY8rs3aDR3Ze*K;i z=#w3p=<5~k&rZT`On(So8l8ujLcDh_{MM`J?&8LUo@lt3_s)gi{%yU|cKT_&KQ8>v z@9Xs^s89K6yge>_E)CBvBJ-S|#ybGR?^X(^%s?BjuH3F}H)JnBJ?{Vvzt>@sLTmmH zP)?YKKVNuW$NH`eb$y^76u=j)jw@i20cax$;LBrBER)!VXh0-d1ohSKcydvP4N9Am zv+m*Z!zU@=oB^mI0{GgAOqQ1nKn)SVH$#w67emspz}KoUAYzE1zI}eCn%lyl)DYea z82;`I(hMSIqycz-hKmLD{mJSoW_ccznk1+TzhX5gvJMx3ir6L4AF@AHfgk39s&Tx9 zE&O9}wW0!Ty*i3~_+K8y`)|5YOXB< z%zSR86L0MbWBE2v2az!bAyMY;h7AYln@CStW|ZhV0Ey`kZGTqneAFN$Toon`j-j68 z751)yF~W@$cf(~kmWp1dmHOAf#Cd*cHWjI)u*w}g=ZG|MK)UO~IC}d9RoXrp1`o(G zB~0TZd7?>-aD60#)D5z>h^Mb23zdxp!}twYIEh~TQ>UUM(J<)aH(=pHG_IM>X7A@i z@EfpjVfq7WGMVqL+jN9&-=Ul-s-mw!-p^~|} zW9MqYFy65fE=@1ncy2}rQ${Dx1Ag0h$4omGx?^W+!LTQwDV#>rTj`FSr=wwL9p14ME=T-`9)LgOV<{SQY&{SM@V+UG zEu3LpBV6`mfLQ2pu$QMzA8Ds8g>|vZ4&ugJK&(J_VhWMfMH`POBb|GY5y;(p6Ru3n zn`S6Rt^ruF)~$HiPBX z@;wUSU2kc$Q!ToL$8WK6uffWMz%@dn@K%{{9a@s6jdBJs@ovP$0;o%mr7Pek2Ke0} zfO^F54y0KNqo3s4t`n|LyBjK?E(8275D8gy9=SA;(2oK6D#W`=!`YO%L<4Uoqr7<) zRY~a!Km$tXuYmOo(9!mhIiNM9Ie0xKD)#$m<6(KY5p^x5v^OF&H}B%UQxCVG%w_t7 z|04iyFhVQ8a1ZCueR#}ZV<^6xFXZ`!d$=Y2h5jJKDu(F3QxCVIv6ab99ON=lVjLfF z;-52iRHne5Crq1RXqWi)<+>xH%L>BGvM7niRYA0$M2kKLX%GT-Y z_;6?XqYtR>8LBwZeH|a}Lfh{E^-n{UF00h8bpID{LUBBsXm?e~{IWjWjmpCzRNqjw zdE}w8hkUJq`yzE`giLi-I`KyV!ab=ghH)WI@DusPdAJw-yHqEfWrkRrI{ype1bPoo zJl{cVkRCA9T5gW+M&$TTbE!B!iL-jX@ONKXho{i*=q5qBV1P1Y)S+|e7U8KhcpJZj zjmJ_`)dg9yj7YB-7#B3Rg?^CrW-u&|S zLoEB$RLi=H>;`y&`_I2YyFw~iS8)EUI9dPx6SOz)vaGAP|6-|SJ@}ku*BE744?G7+ zw7?fn!Lk_KwJ!U?><7O8>!(Rg2jAy)} z_9vI{K|Y&soovs;Yr5k0vNdFtu;0S`Qqn$gGd`|iU&6+R6ni(yOWR*xPgWUw;SjRQ z+7t1LE!CcmxjD_=&Ae98(}UP88>ja|HAX?SWsk#=?A4p$I{N_}gZ4fgL-zY?xH5${ z;4?IK6<}<8GLDWNK#0ZJDGzXEj=Y1GvA;x;CBeQQ_(XdQIsqz!A+nHN@>{OVsC2GO z?{)B`RWx@5`*Qn_tp4O1tiJwu_GKEL!2<*6hnMJ1nTbn$BNU?DiL{uY+;Fke$1g)&E_JtRhy?Rd8=8{xJU@ z!%lmM6|cs_AK4W{toX&nP;3=-o?+|W9>}1^vlx`Nm_e1$p91!R3v6B2=h?aeIL6qc zaE!ID$IxNhRfn>5AH~5rR{ZqgQ?2+h#9`;gJx6AIN16x8iSj`Vq{*eMGi~w8+`gcM zF7%ioz^VKZ72)VcuNne}eT2}RzBL5qNbU^B7|O)We7Zz zMhLyBiy>tB2%~6}A;>S=QfL<5w#0wlY&5=gjSfT$7$Cc^@bonT@frU`kxwm)I~U#Q zr%fydkA3;VILqQ-p(p*cSNehPtHX#5S(?A&r|tX^eCOZACQ@F z-kL>8eSNlkHUYG6zr2jW8)Fz%^V7zo=f;1RvWzV5H`LZot5XBC3oCEcL4TN^#;LFP z9}exbTz$9tX`K3s|MC7;l(yARYg7sK`{^3=YO(XMpT<8ajsN-Erb>I$PwR6Kv|sT_ zIE&+)e)QA$H$?G&mA_U8*f54FuN`FY{kt{Bj2w*ARM}6H!T0hwWV|_Os8v4N)u9jK zYuy-fX)x2==uRj8iBNoy?s!-$cr%ERg$n;VC_Y5h_A70pkH!;ad@LRPO`oa`7=`Kd zKIX4@o9<3g;_H5*eHS<#T7pLd35y^6#EUP17)MyEyTovRum0(jg$M8WFePGg6V6OO zv1noFjHii_nY)dj_)-v@3ADGQat`$qhopj-h;4_e^Hx9c?o}WrQO*`6Zu1it`~hMi zYW9|jJ>n-m#8F(BZiIBP_N<@y!7Nx?gf_NR;;(*UVMKO(QR;%A6V5`21`UFAx~CgB zlWFgpO03~0c7vGslC+?tTHC=-?15*j_%gH>(RYAjWRxM6rzw+evf|597qpxZ7aC#( zie<5>R2#D%?P7vNk2`KvpvCn;O`{#lK|Pv>s`jSS&5xH$BGY6DPj`pVMzjM# zFJtIuK0X;<8`FCc+CM%%8D5*vk*eg5uPGS$Bi<8QQ#uu)Wiw6n$?)2Y`Yj}PeC^@m z6IyfXfw>ODk3|!Fd@}U5pr$R&eC&PJrnurb}d}DolGMsmyzK68#i+y}T>qzf|CVabmd@|H`qQYa9?-?JT&^l8` z(1hJET`BD+tQ^r0^t+EwXx*r1gjNItw_CqLBvW7yDvU>bnFHN;zzUlK+zIiA zu;TbKJH#qWAlGAs5*qXx0v9(qh&5OaUt+zJLY%})XmjvJ?S8j_GqFF2`bF*($>Ak* z_yOfI5bekZsE%My=-PFq0-o>ykiPc>XuS$yxhqY3)=%Rt%nAK}$D({V>-&RgV~yqp z^iCNpR)=52NGO^c&=((qV?-THNm5XQc#lTHsLwViB5QC&1XO>A^49_Du;`Hb|@P&jV;ciFmR} zn6(3gm>AW7Ud2?EaPw#^yw%E5a6-Z@U&pGBi+Mz((5GDinDgNb)sc+A@JB}q)msg~ zt%tCN6eF_p07}z{0We~2_iYOBb6X9W#|aGvQyg#c$qw<+kzyz*&f< z2{>>mZ$!$L{|}HY2q(m;gzV4+(Bs@oJ~~p6+Tc1oE`<*fZ-$N^iY*gVcDVbngwOhi zA1AQ{A9Jroj0_(^`r`xyC6)(@lBVD?lK5M*2T!8U(ZmJ1vi*`_nGC~_&CUqFKx2ZO zia=2;)Ts=vKm_p;rEXG06@zF54j|->#LLtTQ6q8IkrARGvYwSU60cIT5sDa}4Dq8mEL&#f=H|Q}0xgg%mgDB*_vv`ZvW8EYOzm- z?9e}8i{tU#2{9-Xin#}C#!x8KY(CO-A#T$+_OBDVRgN{`g*d*qXRYfg(0gmo(wZT$_VrbTd(hXd=riPr>UMHt@Gv&1Y zE;(&@Mot?)kkh8WCO-2bk{{W-Cbfl^WBpr zr+a(IY4=n)J-9(m4?iuZeILtd|7AHnR%!zC9cUt_gMH<6Xo{Q;uawi{d*pQFB{@BD zC;CsNqE8-{(^Kc<^z7R%|?`{i`%WjUSxTux^$%jvZ;7-}mOeZ85S-WVvSH|OAVP0=vjBj{RKml(yw(YZ!;{HhS%{YT$O@Lp^!%rZ;YV42S#8%Kdhwj#^bXaW@HG+qE?(c+5`+a;P! zABAMjU_8W0ut!N2uq@G}AQM|;y@23N;RAhJu$VO@Xz?!qdS?7I9p zG;zspyX4gUUODx@Urs|`kkg1y1%X6pC{;e2ODxju=cHE&0__O71Qm z4T}EdMp!^2EGQ9HsZ?gkDWI0BQW~e6Io$L)%}`y+dGZ7wZ?ySX@j5;hfi$vOp20X% zy3s)hZB@E4Z$h+EvoY7NFH?x7V>C%yk0o1~!a7q}X$vOdwz!62DD5KWK}+bZllJ#P z%)2G^HX-dR%r9k1>22Y(O%LG~s~m)Cpki{`itV^9t+%DpmfnKfGJ0D!?c)G$%j#`< z+Exaq>20O7AD+f-IlZltR-**WNY~pMX*279T7hmDh*qmuC+*NUP%F`7xy?%ZjjgJz zHENVrmMd6IZ=0pfgXhZBpy~+jK*gN2W?$pB4q=GFZJV@G$ZD0TOK=@-+onB=1ap~s z)Iw_1E^XUb+%}*YqNsgZt1rRZf*OdZ&S_`Zs`m77ka>Hjtw-pU>7cj$)Ba{^N4*`G zMs;!9NpFXwIegohHz|U5L|QMjX_>BS^O&@SOK{trZV|oXt-#lCW!aY8rZEmKgF~n- z7&99jN8qRSeizN!dd!mu-qe0i;kwQ0jcD|18PcXCUVEhuVuY1d0xRUyKJF61${Mj2 zpuw9#!LPR5g$d6+vM>o+fxjDqe8UQqAX0PbYm9fP*V8=Q6VFEOG9s5YV{l0QIw0kh zxttG}1Ub}l=~1SJf;{e!3_fyT3nIAQAYm>Y2xsNe2UVfucUKtCZb?jak+~GE24Z}W znMpnsBL`Kt4Zt`?=Ta}^%2PYY2hE8mMd6Q_TYVM`>h2PGs&t7gsU}#@p;1z2xm2D( zqp5^;PW{HUjwe>vu(q^w0{9QtSf2Bv zTzse|h*w-9uLOh$rl(_2KEU-0FAZE$@wUHM}UFbr1+2DT7CqlicCj=A=N|f+w zB8jhD|K-xhm>5!rxvad#FkVkeK|h54HdxE1KH?&H`H>&7ejj8^auK{T$zx$eP~u;J zJ>|l9@RMv!=xLfJomCgEK9`07Tcj;Mmkw;2f%bRZk6)R6!pccnE-dSPAj^(>N;v*!U;_>qG*tO!G>}r3)1S z*zT&%VFb^MNpdBA)$Y#?-j0620xtC*E+<~u8g;0{(RV<5j*t?yXs$=(E3^n3kV`Ky z*t;@PlA2Fi(8xu%|@FW5j{SLa2v zqnpM9aZGB!D{h|>E`yE5Fo&lOcZV)sj7z6S`9ZvXOl{?s^XlBx-F0;?HRuRLJGTP7 zaL+HheH9=&y9i#>=SQ5&Misle2wv{H2#Gp2zaq$U_H1;CFIrgq3eBn<=L>sf2brSmgJlz^V- zX{kw61k{Fp&_Li)BvgH?*D+@mNIVMP!G#+SwtVd$C5qnzq9&SfNmXD7qGl!&1ZE#0zkV`Vuh0wFJL9x^4(`jOq6#xEpb~RM;H>#EOozrYyLpPJ9Xo zAC-?S z&yAgF;$(m)kPB3YLOef$W{1w;7{`|#7PzhE;K|5qwTmo_OIU%nTEetQSyB=xrqwEY zggmV_`3|yV#B9fi6c(4nq2#sNpgXjyj4^;BF2HTI)|K(Ud=X%@($i5ut36d4Pgwg6 zf;j}{wc4dY+G?jfMP94T$IMMX=HV7ABCYlj9udiPhm0fKNN*@nwSaFJGpmdvpT$qyUy-ide-Y5fb8PlRmxh1CQa{}gRY1fIqUvd+;wyB zs%DM9fV&>GKMqn4A!2eFD|rv#jz}vk=&U`48f<(R{wF zzaE!&$V%m#&bVBe4wgXS4fssVYQc`gL{YI;OD=oI+w9kI=xskbs!1}#9c@F0_%O0gK27oj{zu~?^j0>*TL_=@z` zDa%@d;Uh?u{L~>&gPKW=YeuN847Co`JOOHT%El=u|0K*+44rFxgHn&ib#^;zkQRA- zZm;JN9^as8R2sM@bPa}=AnnbAkwIO6wW&!<0I}9sjt5(C2I*`8U?{$64{#l6XAw(M zz(KlXaH?}uF+h6J-z`{YnOTSl_MH28Clf>+Dw+(J4WyJThFnu1WXwcBMp7=87(p89 zLBwW`K2+}4olrEB?gtSL@F48wBtAqSx6o&p^MV3&ZCS|>K13k%s4Yyw2Y@^&Vly8i zkVUi!*_0st;6b>)Zm8F$m;Qw+s!`-& z+;O-L&2EN&ns$OlAR`x~o*vNZN)kI_1> z%$?_yu!kNtgw>FP`H9739HG~u2|oK3@;v?dUyvvrXQ=dSuZH3$sivf9RTRGMl?URd zen{6Ds_=57yE+o6NHx^@5A;e8qr<=ZMke_x^}%MUji?)K_8>`8S4G4I;;Jd)NrR9G zRz#7&!-zeR@u5LT=()R{ldA<5A|g1_=r0d})h%y@PR?lV z=d7Osci}&CU%`JtXX5>SP9csDjKsVpoX7o~{JZw#X@Qih?yx|g`H8$CIr-+mUOXW; zMHJChKatmf$#VnmMu=sQ8`eRwg8ZMdjCp~#p8?l3OmGKOubr_4oBx$r^47q^4KPR# zjE2C){J+MM?+%VA(3nZLXMna2Y= z`?y0Joi;Ml<(J#ZZv_@(P1^^90{!F>-EOOhF9Uy}+wyvwirgAiFSPE^X;$)If%mRh zu84XJka@-x;Q|tZ#~)S+z4AzKe=L<;CO85~AqmXs2BE>tzer226s&ki5t|G`gIf?a zgYnfhxSucx4Q~EvW=1akdcDf{z#vqMAo^07=M-Vj_3Fw9-?-uaJT0RdeRxr^wG7r9 z7~p*tnLHv`x~-bkJsPHnj1*dbRR!H-5dOg75A7wd4L*ZenKl@R)GdVu4ZtXTaY01J zVFS>rF(7$=@Wt+G$LGLXT z1@$xtf7SSRe956u)v^e$n+-%JJcGmA0LIl0jk!g|?J`(_X;lT58#=pE?Rv8SSX6zP zA!7{vfyA-Y_i7#nf2BqE#89~h6q_;M^NrY`(I~LRp+aaL5!oXTEMK)YhSoLJL3gIX ziVHM+W80wi`$9cRs>q!NCeru-p9}2S(DNVYKzz)=Wbxo4GH$0^+o-;8q7m*I!~H#E z@>iiVNLEM{k{3kRRFtaA`6rgimqX()1_-v}e_^Bi&RiLH(s;OAxMml`<#)cQsT_0U zyfWPXUkvbrV4KGrYo_METM$<2p#BwxZZY3)Q-;t&ufEa@a`4x8XiVuPYDjiL*nF1H zh&g$mG7SAMhKS|MV?G$H*tG>=^I85#%m%nq{P;pa3})e{zIh_%V1hFIRuF@j&xeRf z$79N^SB8v51^CAEQiS15O#dWh=vxqjS+3TmikKHOwg=|x>Lo}^42RU!9HhN!Q{OMq zYaa|e1svBpNKY2TVH%+uUE-zcmhtr?Peh-B!3{_j=`O<3DX<%I-wK2fI5PbwEJj`3 z`AmH18G_mT5S|h;?7%cUUQjj0xf4Fy11J2l0==Sh>@!Fwvl-ORlLR7vIwrYq>=1Nk zA&&49=VKa99u!*!26Kjn=KG1UMNo~;0&n-z#miogXdXtSTF}DSLgXK_; zg54hbZ9|1!HZbErS6arUK*@Frt8km=8u1{z21*xWfth??><=*t>tJAhr3}jm2UlSg zCyt(OV4l*5fgzbmZ2f#ow$M9#2pNBTotGq(UN3>1+=f&-Bc7T9hB^BeeQM;N%? zPCuubPaBxuK!#}WgP4=3ft$$KYa@a=k3lI^x-pD+{O<2DMKMo%%oBI&$+fe?31M_LUzr6Y{C_gb^9Z-*Y z<*pA?sP}Xzdgrb2`t#<~9sox0hRWpkTNG2;MUN)4VPs0|+YL3X5NN#4O$Aa4s$e3- zMOCNtKOpNX{`V8q007r$mso-3)PRU*=;%IBd*`91Q0{85UL1$~B~P(5*#jV6S|0@G z+X&GoSEHl}w=26<_pUghJ-CVEFmOW4M46FLkwwv@tFOS-=9cKW4&x4U3 zDL^le+H}1;_5~>wPgkxXCJ;;>wf}E!#0M$I;P{OuvW}WZ-7%i69uBha-7TvGMDwVV z;Nl?NRv<+4sC9d>lm|VC*xcJyq zbfz#%DY`0RuDoI5Lj&HR?NZS{aAk9t!(%Q`KQX7Z@d8=U4TAEOVvGWX4s686wg7?3;JuC@0vMIF(h|X59(6}Ul~KtcB=o#I>I@9j9BI_jLtwJh zJn9p_SQf_^4Q8S{pm=%I;&=`c&e?`jiR}Z`ZE`s`8%{5eI`I|DdJQ8P9WtC=9(5c{ z=B>l@rk_*usH?h=%lVU^Q}d{IVq6x^gteZvNZfscaeG=I2!nVGrmB9T=26G!m_cp* zM9rhV{}V$6Fxyl1GJ1&7*FZuakLk%(mKWULN(Uli1@w1)L2%qT6k~JZiU=_%S0R zu4RO&mzPI<9?yj$;^sUeB6-wm5eeJ!NbvHgQ}C`^LYMzZhOfV(5}HRXgw7&}PYgnX zTl1*R(cXgK{U0hrgIn{czr3l4iUy%wNb{)8u(}i(-J%h`al^}_eqUIzGYr-n7+|>O zQFq_2u+7mhMIeuQ??FWzH3)y;XdZRRRJ6fI1|oHfaB@ZlLwKj(4w0DeEUS@Wph zVNoChaoi@a_I$4hP>jq5Uv*r;_^FR)Krd1zF8T5`Y#65Qn1Zq#$&P+;pv+_KN$1nO8qMg-D3Vk zqCprs8wP0xIcSIpc4*Aw`0o*YH4^m&F?hNn3}<56{-P$`SrCI+ zu6lXYQP}LpbqLbyhNGbN^75#&@m9s<2w+b2%}j2nnMR1@QO_YcYohRvW=o+J=8kNVs;-AMMZ zpQw4%n0U+LJyZ0upQw4%>6dho@ViHJcRCsay*z4CWVuon>a;T6un%J--FkcMht0Ll ztqsgL(95H~fz*Mx<^}^353*)R(>&_j@d{gGV1A{VN8O86n@D@cz&xeWJQ0z{Vq=>q z_R9jW3PT=s&KC-c-|kh{Z=mK;`*v1XJp=O_sCm>G?X@0*4J@C5nnyiQPDL&*01E>( zj~cpLVGkRa-$2P`mbHfrQ_XJ~nBPE#A&+WfLKF}FYhd{d6p@YWU7T(}D^cYgo@+cT z3=~)=`|?W)>tbMj12vC2xVRcP&A|KyY9955nhLwiz&xdqCe}P^qZHMAq5v!m)I4fB zDk1gw(ZKu$O44(^eRn0*T>MV2x_$#C={YV~vWQA+X<+#b6p@eG7m6x&OaWLJC?e+t z*CFX72CgzNzk!-ZO}&$>LueB^Y+(Klta;Q4$meBov%PCzTo35eJZiVOiU^@tySOJP zGEZwBwFa^yBCW}PVclU-`?GKz3VuCHGoJ$u7dt6p!|~uFSPF{VB?e(^5UiI+tuR$> z$Y-nPcus>o4M}nAASdJ=zr}TS$UQPKTgp3qfnuakOWgH;mO^DYNTHtFg%s*1kmgIF zuGkw%v}p=;T@QTil*jQ%3N>^qR!|UNQm9*=cT*T%3iY!TO_MH%VTr89q)=xdO)4qW z`wcCULS2(X_y`V{bMDQgP`|wfcjx@&ZVHvS{5P-M?NgByYNO8Xj7No`Uj;@|sHaNl zKIH};O(w#~Y^W*JKW-w)0@6UhOmMiUNDB3Z&5nnFE>VU#xIp+-`uk79cv zPs((_1DF)*rpMGq*LK%FiA_YsM_`EKW)FN?4N=n4jgq4lzFEMB;N9r02}5yZ#XXeB zVRR73icOconChT)PgzA)<&95Pz`x+YExtPdND{8XC1&z3{1!O;k0J4qg3uy|Lz@$= z3AAw-Xtz5w3c$o!kAp91E{>K`mN+!eP;#I!LRsq2RzukxG?Zly9W<0f1d5xn39WFb z7Bcg!XBhy(Qczlj!ZRhgI z2BH5^c{lPb&ZfX$m7x#<=?+HRt*yx)*>JW5ZbV?q5cr5kO!{+}gq-~2+iig<^Azz$ zK7{;R+Z};R__2t{xR?(i{~C8^pfP?)Ac*3-BPK+&$iKDS6?h#9PeC-yhq!tGmfjPn zh|VF1Yx5zbF1rJ7fh>sG2Ei3agGpT;2n_G92>yJR>xzgw#nL^2y%B#L&4-ZMJ{%~H z$8pi}Sw4hVx-YQy0S${Fn$)kQ5J_$K2cB^h;in=hI5r&lU`Xn_n427@Sa8V082qMM zPIB-8v>Xq97z&-@@@r=Pr)i0gcaT0tvagv|NUqf^n2fH;>;tD28 zc)*+dHAJUL@ZeM>KIrG<4<0&AgEjG3D+ayfC-Mgmoo2xbkxu`GpIDd!xOwovVs(PG z$5+ofH9%|;O#4JWy=A0i8dOd`@Kk~dvHpI zialV6?)M^{9>LCw!1V?b+~I|#U|q@Ii*$Mhn|1>Ar##ej;t!xY*9O0Q7vCS@=_di> ziPx3*3#iV3;Af+hSk+H_Y#E5x1*?tKZ|$`;#6l#*LBac=Pd|Hw19mUi_W0k4D)5k-i7TO zF;>y*u-*=3wmZ!XH5Z_|wvBWx*$dI-0$5hGBP(-#F1j@j$)$*OWp<#S0Z;6NQvRKu zly#(Hdn08s=gGf?PMQN?1k#ym7|1A>&=#Sd*@fDA1bq+bevd4(>x-i??W1Be+CwA> ztNSg$%fF5j81i+JFW{+?2B2#+zgZTiBp9Y{;@&pCE=mD_rq{9ya?Qpl{a$bY>kyu1M|gK_Mo21ZcCj)>bjo{4@t$HFM7M zmz1{JPg~m`v|AgXVV*h&OCQcho7=32(oQnXjq4gTeCT8=bKYc(ebUU|dVKDRLjm*m zpmqWXBTilB2w?K0saEEK){E7u>I`s0lxt_zAOS4ge^>#X^GHaca|p7`MPFyDiZPx9 z_(N!me?!ZN`b8eIRhst1qTQF2Z=j>E+h`ayc)&Cmd1qj#)qIVzXZ=L}R}9XeQ2H&(`GKFvZ|t4Hq1LY}@sgh?E65?C zK8W*I*^JVUdA^X^=o)im=m!i;f@o$CTm`IGWYixWitC1LGZ^OST1G@F#hH9(eCW<3 za)~qiME;PKGaEVc zYXA~0Znn{x722MwjWod^_`yx47gT^#hR)5Q^S!i1)*Bc*Jqk8E)O)hRo-#0gI*o$e z5}NY9!af5mN#x|yd28sAR*JG&k)ZOaoEQ3at)gmrD8I%HXJG%rP}j(a*9|Dwjc%XC z*MS+aDD-BA%DK@XSRH&Ih{d6bcu$*!0{LLJu^QAo?Wzc&Ns*9%7BSKL;Wo`kgb7*=taQQ`+t z<{osO?o$D3dnfKtwPi7|t6k!S6uO9js?v93J(bm*0Y(;TEr9;dBC18%U;|JIQnP^v z>Z*#lMuo16#N0vO*H;Pm83_!CIOx8eFl6xRD%!hVjTYlhU@64^Tdm6V_7+9`QZPzn z4O!e#TdE|&M{CVXH&<3^SJu$qrm3ua2xJ6uz!`TGQPJ!G`UAcx+Jg(uj^rpE$d{k* z;!94oIx=H9p;v*<4mna%7su?-Vg|aGd~~G132~>(mZRflr8swhe=H-%CzyvXv!x(A z#05S0J#(n)j=)-s<|RvX#TV3f1~_+&rEnmD(y`#L`cQzb0Gh}Uo(H9HUw}#+i4-Pn z1__oejWVN0i1@CaJ<*}&GnH2>V)Pwch{#ODLg++kV!7(c<2 z4Y5LeIq>-kd=?Uh&?=AU`aPYtv+Og0NeEkEf7nBSU5IA`RZ_@hKjRT2?9YA=_V)wr z(c{GKpBW)`CmnQa#v7ulejM0zN);4EvFnfsg1bf4&jWvdp+;sgB1*siKkfpk2PN=0Ypkx_^S_Xpy~Kc_CQ^a4W+BL^88}{tH0UM-;K8-a~@=&NCtLK(JC>geN0QUJw z2|iO=m8@#RAIXSd0zJP&H>x(G338k+Ce(B9c$AE+jfH?);`BVS0CGlM!n+H%Py;C>q=y=M@4ffldl3<&D82WlC`ADkL7IS|h=6ny1r!lP zR6syc0Y$&}oSogh;qw1|K96DVyze>F&zzavnaR<-E_}GiK7+9yXoZBg=r(YmitP7# zQCq5Nr3+a2qx=uDftimug*;6wy`d#^g;Gd%r8tbQalhCGl)_Z~x*L=Ne>$=_O-IB2 zOtU_!f}rx0e}PgB$B1BwkMkpjyZe+XJ@ZR|9q3jvRKOGAHyADZ_2e^m_(;^qk(3z| zn~<+q73{r)y+}o!FyFU8Y~WQ&bpctt)DlangA1^PwPlNk09*DAn)nPwc$(5M57M%O zmOGRTGs?(=?T~Bc(_V*Rr7V;#aRx7z%A^#V9Qu+8KS_41*=FRmFj!UbcK&oQTbO5? zkw0e|pnawMkh6p>LO4wdMh#@6=9iQ@ht@_3oH;3zR`d`nG?BUJXRNtO+R9nQmxMCr zFWjv{^>JOQ)>QlnVoIfhCHU)=)|7n&WGhlu3>iTbOPRT4RiQj+Y+NEiw2I@A!f8V- zW&x~5mEsxDTBY#hkC4#z2cfouPeRP=Igh`=Tt8k9CpyV4 zH@QUKBx{$83d%o^`@@fd$;_uQJfO&1Iyc^+{3}rBkw0lXTTuQm%se80rW(*?l*kcO z`fhgU`-RHD6xTx-GEur0+>prI)CePs9rX7i1l^$*F1SHgu|yGhmrizcgTBDLJ@Qv- z*Uk;$&pZcad_$RwU9eg6O;x>gx}M)^TYX4+8$1i*uvMfO~+4VDPr$v!Mkw5NT#WWgSR& zNUhcjtfqrWv`8z@r6RK$3%s1x9?!tB)G-@ipE0Y3)!Tw-vO|IJ^0~-PsIjgd7r_Px z@r~jvNh6P=e^LICg^k%58G`8eGn_6ULeG)W;1o69k7mx@XE@x_z$sh+oZ`lmX3WV6 zIh}omeW|Rc4H*r7j&(qNr3Pjg@8I%OR5F@&lzO*3GScesn+MFKrzC_*wVE^(a@NJOxuWTJ| zVHqvD4tstcDvGX`_)jWC>#}~FvWz1@X5eS@m$5P!hG>WqAlxEePHx8slSI4Wg(E{~)@_%}}i&%pYsY zSkp_e(xSbBi$&43$4FYUnH7;EZk;mwAOyn!F*LvHXy8j6NI*-UeUsT1rT=i2BF zw?Aq^FjQ*29pw(w=lRPy61oNX;9wQozB2_o0 z%I#0ldE#qhwI-(OR8SIE=T<5vor5vdCSEN~DyG^4`Q_0d4ng$;Yn$@RBfT!Bj@9cD z6Mvcw!MawjOHJfbim7M)s+5>z1%B1%erA+N@6ZS9; zQA{H%pa=(KISvJlC7=j&)RdkX)8Rc>g(k=Yf6jETDJV?|@p5YMIg6Gj>%Ev<0!a>Iv^JnBtFF9R43=H0w<0IBs43yOzZT?zfhNk;8LAUQswG?o?oex z7|bw}NY9J81y!nyGQ+8PRl)Jfa;;Zh_2e78lZ|K}I%gkc9zFbJa5@iF(Zjj9bcT@| z&aFyy>49+ezbbKiq4av;{P!rfR5fw+t505u^RI;TcIUvU2hV7)>xKDd&Fg#QGmG?!@8^~dVJYQy5H3g zAV{a3@LhSmu+ZBfVA)9Q@5H}`K;J|sZiL^CLk1_M!11D`Zg?mSjX?M-OAx;}@bCNU zic1CdYL(X@bHH16G+A6T5Ph@}TPf>W*k@J3?0Tv$jJ;pP+^}G^6kH8K)^R0`Dj{LB~u-zonx% z@kXxb>+~+Zwx-PisF?h_cwGkcsEcxXka9s2f;#mD`h$x~%P3A_?6Vtr@KS{gv{)-& z*5Xoe%iNbY-bLT0QZCAN#isDahUgYXRWy96`+Q39S4jPNs&fchdS|4la9X|x=ZljUGvJN0MV^jvH8WFpMdj%y= z(WQFz8AhmV&W!$d7hb+BL+hd^Ot2cY#{T;SjbZ^~`C$32#6mM)1s<&^Jd3ix1Q)dS zZAN2mm!K@IO&PSiia37;niZ*AgVJ(tDWf&ireu4P551_-R`LMapJAE zh}{M?k+hGgXr!iH$Vfxtg^@F;e>Kf`l93_W?9$6hD~joA$bZtW0QlWebT+ydqKh`s zAB>Md1%}YQjk+&4W6&yqa1zi*4>OTvEC%~ahID{rcKV|M4ozh%Fw0+3z#J5Zjwohk zvnyGg4y7PLIjM9rNF8>iic`G_P??MJpe@j47YL_47`>u%Q^jcAqyBN!*+seY12FQ? z?oiDLgX8DdUh(2*5N7z%LyR4nF*D*uQp;tCeb60m7&03@&B*&AN-G4kJ{f5!Y+=kb zn$Fj~Z*E40ZD@EqV{{=}dj(3iGDS+&M)_Ly=)!d4BG41hpy4z>39?1#I*M4z_Ljpy z`~rs2(mc9sJ*Vxg0&I~E$)fb-o4P)WF=*GPfZ^1!oR+NON*1SOcOhAfS|<`F0j^YW zDugnP#&R8x=|f!rb`DNybO~CzRG0Z2SDm$=HM(%nz{>bI1>Wc?w7#O&@w=--n_7Nr5uHwtt7=BxGj?|Eh9QjVbO=32(vjjaWJtl5 zWUN?3*P8skf>xaQ%{$OHxfOV-0R<$Gta{&4xL4#mA zX1USz=nxzu!QNsl$-?en!6mvO{gzi_pE8ziVck*8(T%Ar-e4y5L4?=c2xDn|LkKQ5 z9>ODT0D2H*IqT%tZNzc35XL|Hed8?;bINAqVC_KQPYis91DM|_>lPA6KlVceH;nu6 zOMSKLqAFRY29I9&hes!Ptz6Jao)E|fTaWzLD*=^`e}lrT z)bDNlP4dJsg)1BP`|%@JZIY)pKXRetY!VUV&o+`goj8~uaRH$4tYCJgBOc~NUB?c4 zbitk^#SY&DPGSl^?1&w~!SII@`l{HGFx+^?6sb(CQn6z+l=ukW!^V!~MInGPMT#9~ zO_97ZDT*D>^~!g2{MH|GFIc~FB;H#Bxd|Nv%agdiAb!1Q{mPek0c!)X6D?)|nJvY> z#L>&5MPZpO#ZIyUFnua4v!&R{5)g){3d?LMcG>Kyq(&k$gvrqlaF=4IynykA=a4k! zJlc%s3p~M36>Mr|8(Z#RmXi=gk6;60r>!Uq`|*JbvLZ-xTa2Ba{WTd}QC>O5i0yh4gwLFf9xpz1RTqn* zSy_S2`mhjW+W3cWhbtXBJEks@Khg=eBYK6)dQKnqq!zd!rw3DlA!Pv04SpHmTMmd+ z9La_7c{PznZU*$JKi2pOQn7eqI9b>=U_NHy+nTE!*OEokwU`x*Ryhfk){IX zdU7ECu2Lu*>XV}OdP;L>c`hnZm~Z&U_|he=SC#89jjP^61;q6^@FhOPJFyPYnboHu z*}3Zt9;pn|*9jfooIM=HZ>~?q_j~38tYK$1Z($Z@=5B=VmAvK$=nuhW$=ujjVs^qn zp4A)=Gm*_q#kdk;W`}R)Gh=7roGEh?RyA_uZZ&+M%4v>Xfym8z3-DQ`8Jdbka`T1k zO64^Ve4tc5a~Z5}e)Banz5?bFR7|Kje=wn^EJh0{aTnQtK3a{4OXX=8I8A6rGhYj(&MLDFVmPPF zZk0%#SLPA4qYKL1j^XVKWu7mIw>rw)f$v=|DzjHt#s9q2T&e$*$#;MLhySvxB7@N+ zym6h0uP`Y(bmVXq*Hzz0ri$`%Wn4EJ0$CV|!o=LTE<_<*b7a*n?wRV2(vIs%*)V(Q z#;cv)xB;{Z{zdm5DsCX96Q261xIvVN+U-6{#SNy<`Kh~#8$#S0y7yFZLkSMO>W=t^ z$rUy|x?+ro8%}>R6E6YdM$jq|=jV}xSQIYFi5o@bLhvN%9xdtaaT8-y+!*2{sxbb5 zC~hoeLuz0T%l3mQiyJ4=d%_Hy^i_6l6@-kpLWnqIM@iW^3Ee@=|%Jh)P&UJ zysN@iU~d$L1o-N6e5y#-H5eD-X3*;>jIa(}p=u`e0)*JZcxoIsi$=>&PZ)ns6gQg| z$WL#W2SaS!T-qc*vxVK7kDv4Cfc(r6#$Wx!EugRDXP&S*=uB}7>2LX2AZ#VNN!%jJ zdxIk?9QN9)__>%4-r}F(Dl5u&gH$k5VU(@|XC`hF{aBjR5in5j1&DiO+`DuUsSY{A zfmkHDwh&?O(S0XOFNJ9Kb_)L5X8S55JrEH!?^A>eaGhJ%sc3Wu)qf6ZU68FQJE@0D z*@4v9ns?I#7Z?nKV*~qWi3@O)Ht-?6;{x33Y+yfq<^tTZY~TQ0bAe5Mz(IQK0^DqE ziH|7PC8r>`72Cie;!7Z`^7Lg#m$QM7siq4g`AK|Aom`+#H&@~)jdp=A{fgu>n&$%I zo9aS5Mw?wg_6=#^I30EY{i%}F+X=et0V0Q&h?Y zO8?;kr>TkyeDK5t&QKc{Xp5nyR`m__cY)w)E^w8mxPW{Er7P-tTI~WKw{|6N&<8G1)IhOYpPR?seE2hl&Gr~@ zFS-Qja-k%~^46BxxQZCPn|@rFCH*Jda z$HY+GPQ&=Tl(7a5W?7I>62o?9(Ih>y8^{DPNH&2#Q;+*2Q;H_M>S#c!#G?NB4Mqgf z{-%pX$+~3Rqx{_w>wZV6UR8~IvZOG=zi`8?)zi4Y|3i@Iy3d%M`=e>d{nN(q0wni2 zzqK)+!M!|`vNuK||4oD>+Z>7yAYA4_>c4u;lv>4v7S9mEX?!kdP;>!f1REh56~Op` z6G8OhWL=gE9frcX#YTu5^g}o{L2yCubU-VK;j|Z8PDmufSH( zC;s5PB>=P0IWKmW!d}ree{cg2uOZX`i9YlM;8TCFY(7Z(=nCAe9j$OYg~21^nqNM%mIfF~n;XHegl(gu{@|)Y01MHjsYq=yz)Jq$%4C3rsYF+N z^aUG7?fk*C>j1-OGSb1{@zZF3FjHTowivyT7Y75hhU6j_EKcH0RiM)Fb!a;SmJt!B zp*V?iRgoT{h0_^F%qM6#)ft9ZE7K3~zr}*x2E#Hx;Z%>EwklLFOj|`0)nt7TV4XV? zSDThC(v#Jaz_d3NPW-icTpiktcKZe@oT@Qs85Av9m-dg>U}t}jKOl}{ia|d= zqo$nY-)+ZtJ|0wzRv~jd4ebF`(uH9E^h7#4HEfC$?5AY(pL{%s=z_tVk*9uM56?f6 zJWU}S%#U5!Y4)*eZF!GgPb)lkW#3ssAu#~Yy*P?l9LRqV$O^ok3HaNUJ!wmW)T`IC zj6>O>7P3{_Ue7iJh#K~-Ekx`3#75Z7wh$f(W!__%QJj%rbJ+KGIY^CEnWo1>_e7j%ImL0vL*7M zT)s{)a?PKC+&qO}b-4`i8AxKY&iGZ&`jxi;vHtSa=w0X!3GId=_m%DlrUt6hF&B_6 z3JooZ8l>4A2{cUWjX(8S0n&yIah!$n4JkA1KuA%4wE{GvqAnn6wM1h|bpcVWfhN?< z1xi7o_D#w+U9cZbhGQ81450wMdl`vpMzbA2&rL!}iloEKleOq(hXJ*p!ho0WxV0|q z2CF^dk9~+~U-?e+n``WvKgLVB<+}{Q8zhka1M_Sw^K*k|- z8(%;ZYPbZhE?YzQ88)G(OGx)4^e7psHB55}9iYJ0(DUP}I*}V)!eBo_uWfb|pSc9K z0=9fDWNgk{w0xk4`ywd$@$YhMmYrmw>kBXy`Z0CNyvfqx=X1CfS66 zF5y)_!l1QwF6Oudc4O>Z41UMX#XBxR=4QIGhWwGHOY)3MU~6w{7|K_7p{5wWcHS)du~m)JRs;D}cbCM#R^c+FLu_lbJAH;tZ9SxbZdb#iH52hYn60j10{iuigei}tbqbg?KoZ#KR`WCBu~8zRc5v%R--;uE+n^*=) zo437!$ksT58Ne3rZwB~LM$jsNC^|9;;w`@(1I9NQ8A$M?Fo3PTd_zb6^cjMDFBaeC zV0Y^viRC$8nC@6kf{J?D?r1HU@lJ3^9 z2e&~D=2=z5^6#-^pODH6KDjQ|;^zu^(L~K0YmgQ*6^fw0e@~S#<8xGxWhq!Dp(>?- z7t*;G5(rBnVd>P~36li6e{}y#s9vy$F1gW6?J45chV_IR-u4<>=#Pynis)+f!%G*= z7QN$-Ef|0|oV90k(%198qe>0&@N>+{i=whMN7nAygx^H8U7oEmkzqGsrZ3*?l zdulAqAB)HLSqb$QU=$X)3jWxVj*x56xsJwK`(t&RLayOJ+i;C>Fdu)Fi^3T-285P1 zyXy}I7J^_^v4&dx^ELE_Aph^%knbND^5N*##6$@U&#u2MP9nLkq4Q|G zpbDhjzcjJ?(Y=0Pl1E!XO|TrUekP9!5&~DcEOeW*c3CEZJHcdJ+cIwR81Z0D-Mg!oV`sbhdvA zAn;L234`hu)P&&sPA+s5d`?or;FKYn5E($=qm~keRJALiK>&fzQA!xPrLfj8@EJlf z)hvl}7=Ey#E{9M$+7=QcyI{>i3T6!?=HQ4UYAw|Vu6w#sldy!B+v5lI z9HA19aW*XT%UHrP+67+7P_dr{h9l>3+od`cv-GTrlze*j`xlg!S*W(%EV3k2S{lmGH)!@B~G!zdts=5aiyx z$tI6=PWQ*e0&F~2TU&rl4raFmA#5rH4@^wNF_)m5f`NsJgtrb~*SUGb1SzfmqhxrQ zCSl9+ntDMo^mjY=cF}#l7KE)ozpRs6!6nGsl2Ces%V^t{7qo^BE`jrhCb1356W-Yc z2TwB0ANE-V?9&?9w@7%e!5p3DH30D4=43)cko z@Yys-uim+3u#Tcw06}{72VrRS(oCv9LrA7xnNjk)r@@1jrCHsp_l}!RR=@~I1orBE zwcx{uz#<3t@74QTeyd|Vz<44`^qD_+0g%@~0e-x6Ihxa#VCn7=N)c@k{z=F`x*0z3 z$F>~K8jDWNZpEn56YuT%`)1~Owaph+q zqVMRm12`)v{Gofo_v!FEs&WGEISikOYJ+g&9PF;tX4XHE)>@KQZ4iEV0q-URi}1%n zhoO>xoIPHfw;KK!Zx2qm)nlQq?=JpW|J_K?Ph0n5Zi-CN3;tLNQkU@a!o@gOi)&(; zKlayrV83)8&RqSBt!h||4tzMEQd>3Tjd%>ubhYAoqb0E-gQCga8XnVpQt6= zt@<{=EPpwYQruDW@h(XI+6|v&P=pI|($Lb9(TfxAO&JKunl8v`Lq`|m^dMp++D!-u zy_g_{n!$Sg_5`bMLYVFnbdwh!4)ZKN1gW0WCZ1K~AaQ->1bTohx^V|TcCs%$!&-<>AnN_8?ix`63^BF_4a2}79i&kJL#%BO zJp>?(Aps0Aw;sAvUo#d2FvQ+wq5*ITMaPb37{%$#XcVPMb=RV$o@3PN08)+Nbm1W? z!AraFvPcT+S4Up8qC3$L%|iVv=qhSOuV+I@R@!aXYPjW;h0ye}nv(!i=V!k)!AEfz zVx=xyIs|FW;dC9JL?z^)9ZNM~C=;ZwgwvbsvgM>*KHU&zGbRnJ6*WigB;=x3^66@9 zBl~6&N>QQ8Vva4N3UmA+go62XUcQ}KVUDBw@K*;l`tIZB;kOa~yp2XD5zdDCe{3`= z_%}+kFu&q}`PCbZ5}YufeDvUMG-~W1+WuN+CSjw|*#`Iqo7D_;D3-9Z(WuH;UA+sL zQHHq|!`^75UezsiM*zXvXmo3)?k;B>f_^0)J#iSEbh_oljc{wD(Xo%vIsS9Q?TtpA z2kF!l!jNgD1~S%0qaOHFj#4>X3dUY}vo;#757UC}96>u9yfha*t0CI3G~-bY0ozUV zMk79GnC3dFt%H`LkJ7!#O7UwJde;%MyfSB_(U8hGHIW(Tp3gWTJ%QVOia8WHQ8$8Mz z15o}n*F`yA>uq3hxt;|Zjs8IopzY76=#54nu7;K~87a!yXk_Hlz5jvBkW@GujjmbHx|9oDDxw z-9$sd5(GAZWuzfXdZW>=aA73AI?pidjYc0PL!PU*2NNtqVsA9+(1p|!m>_z|5r$^H z(WnKc83L|$L1&}UwMEDyYu)Q=)u2K1M=DG5qATfaG>V$4!QcHsz0v628m+b<%$@Gs z9F6^ET5mLJQdH9_WuzhTdZSSo=I>UnGctS}XqR4A%2r(0)+DA$Z2{C9jY`zhMZ3ly z)EkWsH_#tC?Q31@ck15 zRy8^sjc%F%YPf*2(ddW6x<}z_Q~%b8r0R`Ecd&RX#_*MA7|uo`UngaKrt*%<;1*}M zXuZ)W@rv$SXEV|emELG{4QnRS`~J$vunmpgXjG70;k<^OOB>Z2ji%=Zn(z$jY&6OT z$3i|oYw9o%zustc5?`-ySENA<+LhfR9hRji?fFhi&h(cQFr2DmB}*hXxsuLCqhrlc z_=j96XQNRIyy~D!F5ql5`far?^FLj6&PJm;)ATr9Ajl~KG3DXZ3NxwbO7uyru8<1M z@EfPKjw&<)j+Tt|9bFyTkjgfqbZQu>855t+s7@ncGDXL0E<>k7Z!{WtO{sG1B^+Re zU7mWQ(Y<=;SqxtG2lYmy)Ft}Mr#}JuDuAZK?TtqDQ8@BdR4%-o@YS*~z0oN3MV<3< zj5W0|z0qiRb==;Ien$;}>C`wIjgDc+=>U2VjbPOB8r(+gY&7Zx&ohV?X5`?rIK9#6 zvA|m$7>M3zlpm}1}^Y^coiyE_WF2b<|K4uf| zyYJjf#cY;6`dx+~oLyA^UGRNq+d8FUwzSM+S;!#jLzj}U+kfjX=wn>2LDYo$_e98! zDMysrEJc3Y>pzPdA*j~zkwHqtUr$5|1fWb26LyB~O48Cp5 z+jJL%ovfvyL$PGDSxUDBQEwO7$K@JMcYV;hFR1PdSeW2;GldzSN?I(JIA(d!L$n*Q zjvE}%Qf#@zF-O+-)P$n}1UU-g=-;SwE)crz5HRy(M>OWxU-4S_Ul+6X<;R>@m4X0*!4uoJ_BP|Q7g zf09!Cu>y^8X?lt%j3?AELNnH8WY|6kza5UrYK-Wm2aH2ZlQwKeC5%kQA*@YERM#^q zLfLr=ATgmqDMiWJRQaF70C?viB8Um95TU`s!FHk8V1=N(ujnn8RUFVx-@JI}ZXfhD zR{q3}c5oOF7qCxI3TC$gzUY8<;@Pi^$!~N=%a>|h7r@{XTVjS0pXj{?g-ZLGVRd5b z>fxB-^lBw+^k(pqBaYbFvy2%*)$omjfPcE60wYjk_qt$9~EVap@)#9sM zyY*Y1Wz0Alx<`YJ{6TgIV~!bLRn%&SIBI>IdZbEnJcV+ZI>)m!i04FRdmE+lXz_Pk zaoueAM!uN#MvjI$Q)eAeTD3&9X7n;sj} zV%U(_TyzklEO*o(YD|S;x?*$F`k)r@}v z7(8mmmY{A}=@au4ibXj~2YMmR11bxb@ zAj24tqOezAvZFP`mZgrb0-fognD_H%SFt!@IUT?oE)Xu?UB%*Kr5-vZhx{YsMXJ~s z+A|M1zv@U?!*RGAhZ9?lDi73S9!_D*P)gR28(Ycv;7`OF%BWRu){q+;5;Xj}&SFIe zw2c4{xv?dKYQo~kRI5_}gNNMMUO{=Ibo4K|(ThQ|2GrPfMvl9BKz-e1_zk(S8;k-t zf<^}AV;LECVt7D}?O^l_)&uG9+*TPCq3!UH8#~OHSzM2*!yN`d9&%%+8P%}R&RgwiUI4hzC|y#6 z+a1tOACIcB?;AyS>rwTz!+>r9KQgwys^>NL9ndZ(9)My`8b4#Ck~W_UBZ}@fI(t0i z#-60hGhhVJWhj;zcB>HZ6g4c5`hppuhK@L5=OH)tG)2KA2-wdBtx+}h3_Yw3^TBGT zyJ|IfmNLWEi{u-wq&4Kmo+EE_4Ic6bdB}}T4SGLZr}ny|*2mExRg&YcXbkoONsj-^ zAdVlgorC_Es#8@AZCdwNT^u~*#x@Tsg|#n9S`B7chDI}Z$c=3qv?8z0cCP>i4|TCP z>=@aTywA=Ui(R!m)WuQ|pN%549nYunP!}6%?8XYF7{@PNnpjqAsEfTx!GpEM_{~X? zo?pgRH3_}}4EtujKg>Mkr zBzXVa$KL|R&R^`2WSXlAwXa{MaQF7H9wg~xI3ym^*Z2`cZ@O$5ui~ifB2eQS*{r*5AEV<{(1LjnQABUV=}k=L-IVcTdaA^Z+zNR7i|;#9 zCGs^b_~pUw0464;Qc?8$kh1;IL@`g4ur#Xdg!wJiT5ppRD;Arpi@6=MVnx!Lb|qG7 zu|s2{{4xG+C$VyOG-w%G7WiX}J_c4b{zctdxA|jTyCF0^4f7Le$;VwRiWZ_{Csy;M z!lL}h;gSPu(21fYSpio6>l1)MXr>v#);z1K5zOf>L#8;*@DJ;k7tN4~iKl2I$5c@_LkT-gA30%G`Zf6sed_|O$S2Y3_Ia*#f^KJz znN`ideV(75uCcuN{V-{t7oNbwTZ%48<^3^fpI;WPqIXs{^2eloUYwL2SC=6b)X&9q z`~2$mU{u3&4wtN13DxcM>ne=^z7YUQ`@95&iavBeyWw4__9MctJK>_y`s3d|zbTFR zfQ-vJVm1dE+UM1%EqY&JDU9A$G5KT*wr-!_!Kt=39@Y*ZNc;T02MqV>zKEwg6Rf(^ z?eqG%7d1A~ACva^Ly_rt^TO4#&cW=MrG4HUyh{@f1rVft{@AS|4vAw8-@63e2Bdx7 zYTid{Fwp+|%f2A-p3B4s@py$Ky;C<3wB2H$2J`ODh*}u#y-CTuy*z&GP?hAG&~f5?(}S6Dnb8G|35bO$d4~?@~yrII*~HYO9$wRV1TntV*h!lRGF^{VsoG zoJy*)A{ZTyk+UumMLl;yU)6365cl1TF`~uvV=(+xIbugct z!Jw=5Y-iNH5XJ=%q-xKt$FxNVD_sKT8$E+NZqoUe(H@2H;WLDS^tuO)zoH6H}$$hmMSQesaY#HMtTMDS`sptSer^ zDpN%#Oe)^4eL<^G4;ST**cJ)hTZD!x?sJ2vSLi4IKHQ`&A;HrtDNw5paEzhFI&=WTzF+Nc=oxxVGKSI~c zkM@x6>ejEH?-nbu8ALD#@@)vwKNv`c3vFerl)n$a6tH;7mF*|Y( zH&=ZP%cinQbI(C+{kXm3H|p5_odXS?btPXSUpNx8Q#W`CyG+qem~>~WPiu)Q)Y3&A zbLYAp81Y2QH#ErQNjC9Xr4!2GYAPn!aty&75c~u!tC)Q4^F_KC-eLv&{CdjuCSJ0R zR5+3WLe6evpRA$p{2}fsHyg~>Ci96u#69K5579!!&gR7k=ETK4<)@$F(h7uw3S5YL z%Fl(WYn$G{AL5>JdqBFD>YV{XPq{NbkCvM3LZR{jMDnjUwrXsRi$zh}rzo#`Ptg`> zABRgd*~81HSXD}Xu)|h*(O>Xs8wmdPGS&v@_W;4QXtT)=TOZId=7D-E=RP?N2U{{1 zfbeIoBwbB$4gpR1ES%}&zYOS?Ds1SF@g-o%PxfGC??W_78t!1C*vDfMG)TJt3C*md zUzCvr!rBW^^Y2x78{Bwlr%RBLLEDf2PGBL6&M{~eiwr!)Ez6@Qt~x{?x~S7q6&6(3 zx)}6epw3{v5>5$-63qyr-D`9sL0|9#)c4nPzed8nNFFt07@kXtNV0mew-28m&r4pFw4o zs?l`%)kQfj*9Q9!#VOVAz;Tcg$WjXNw~+X)1&fp#7fNfav_HlZ!jziLv9Kd@)%~&V zgOHcn6>jJux3h~y)5sx1RZ5)=C~-~?jd!t7`r;UL){P&b<(B$m2b(}=z5ZCo5V`mL zvEE2;O8rOBDd)$Wb}@DxQ(AQ=E%lQ>GESwmHtnI>DDC7sisE-79c_HoPzyylTCxXcB^@j1$&M!ps|kr*niC+*Q;Pnjg9rkio`>% z_xo`gTkMaW#5RMJK75Cd#P^#gfXf5G!TkXaoA4UI4+22;E>lM2KyK+P7ep=T59O>OB4uRg5HKFP z3`w%(Jf@5~vmTr6U@)j)S-U=6gMnd)M~Rfte0H<2D!MG4^HSUt$6iL^P$vf6s<3;H zFvgwFiBybt8Ctv_?0CwgF{c1-bU`N*erbuKj_?dqCYM_W?s+#I&MsBiRcvi7j-m-% z&r|kfMza3>|LN`UEA+l{hkfA4NT(E@uXj5%rp&mq8r;^*eI~np=?$fe7}Zi{?(C#( z)O1((^YUk1c#|@_^DVswv)R*C&-H*t~LX5rYg0LnCZlV;>;s65sktu8U!cqz0g8;(A3Mj#KBa*a+i_Z`W z()){`;k5-DbV~gz2+qtC@PqlRvm$RcQ7Sw|8GLqQR;=u$bT-(#k_i(QhElrdpWdLX zV=#E=Upa!Z_QhzSe-*$r@jG?GqAXz z8qQ?U$1eOl$4?V88}yA!ly-#IU|4ua@fv4gVx+04z3l?LqCzsI=1FAsZ`9pAfavQzRYN;nKRNV4=@)$23LMjWy z+Vy75u8LcZPhKMz4_(OtsCYj4jN1fb#!MH|B#0G$zliZ>KvoOuFt zQvfRNP&uOw<{|WH04n}aoN*a%0_i6g$uJJuJ-381^WzO5L2ofk5D)KB9%UJ z1XQ@?9Mv#97;{;gzVQdeJF01f4AqwLu?rTL_vI@@sR2n#v+}=QOvN)PYzEGw_K$9#z>e?IdXJa07HDF21bc= zoF2*p)?POjtwWrohQ@21HRDPELp+Kniir>D8m51y!Gd1e4Zyq*?DwS!v6)&PdMJuQuD zziYputz z<`ZBeS~bG5b82Ni)H+w#Jbtd)2H|FzYiNJw(b}jim8-!&*ovE4>rDn4bszwLc12q; zQve(0ug&-#h*^2?Qq^4E2#4*P$FZImZZ@fp&$g7=1ZHd!nO}T|e=b%=4HP|y- zO%&GljG&d~C>oywx8n95h;Lx%w9Dwz4W+NaK5N@S_x+5ZC2k$^klMcy7CM%q2q;@B zvR*<;(OLmZ9r%8B-FV8ln03Hi>frpmAe+wNR>?=v?}#gPXb{{z>g0r5xe2A5cFM8M6e_ita6E>3Y#GK!kBRotmX(eC6gcw;gICysarDH-nyN(%|49e6>R`ch6%B*vxwg2T&0aMHCl zh;fH2sAHT3OP@M7pN_F|Ux3pK&(?XY<}a8GTa)@~2)ZG4b_KbyW2*Nk3Ng-@&=N7?H;s1% zH8!)LjjeJpd-bFWx_s)KpO!*!kE>bdW#u4fp38d#rS!gVq|pnWybNsKtLP~7z!lVa zDK!J&{KRoOFCi73LI|Z{1rX!He88l0ly$Kv>bo9ti_^11X>AVAP(aIbKyXQ8*w#*! zKJmEr(;&6N(NeOTm5U9llfWBXk! zioSUt*s6~)s?#M`bJ?Cy5=EcKLFww1@lg1;3v%h%O}-(wl{J;hp>iNX`SGgRF$G1> zK=s;1=)Y1DsSaif-)8%^?&&h!mf8gnig6Qut==Da8MG5=82=0*iuPcZpZfa9RsfeV zXceebZxr*3BIKDJWeQRZJQV&qp zH2fJt6pe;)N`3p&-2mq?=+}^#2mQXsqakx zTvy0VCtkFLwEuv;Ti_!I8mKq_C_`x%7PL~|JAgq~aumh{dqmjo1-88(JWy!{75uTY zVMywZGnwH?B%>HRIG8<%?m**6{ortAEj-2{pvjkg8N$1IqT!3;GH-8a?Ju!c2 z?K?oQo8DVvp?B|BFzwRy&p5Ks%SZ8~epm_>FW7wt^Hqm6VT*JL!UuQ}QF5EJs-0V# z5VjH;4%V2gBaQ~au6uz#dJ&CMa@^2{?6I{S_tlS8SB>{!T(@W5+>m-C?t9e0OB|(C zI+DX@%BFtWpp!0#RgBq%&*#mges=OlU4Hu=%q}DTtRVH62PGwi_-z1zw}7M`j||p? ze**{ulR^0W+<0AFp|C%8W|vL?baH7A-7KmwB-X>fE3H|Dw+F>%Olg9v3!|&?r{g*ROk6gb^j93`5`-WtZzF~$rN1z(1n5M$YM~Us3}Id)GzqJ zRXWc+xezCuzIqG6K{N;bP};yfV7g4LqwG_C6opZz0e5~~5%6%c!=Vl4YYZYf_J#AB zHkdDA$<-+c9&XzB%kW2X*MI|iyggP2P2Lk9Wb(dukD050!qsLsF#cyYFE@dwYnI2e z*Ia?6iC}X^TWq5+?;OQxVdkHhd1f<9cf`>UW`ldMN9MTu3Rj!G^*TOMGSf#ZTy3^} zBqBABOhk0%i}`S`g82lMoY%b27>C`MQmD#C1XTB$PTEI2)7&5{q4iZs1mQc-5oQ*4Phm%y)#F}Y;RnUCRv#G2JmopI)W z{c#wGxf#x5ycvv?Czy|swnX!T)%c9d%+?Zbmd!r~V}4;)ft#Od9*x8va&!L{+&*r` z!9GXGg$vpiLLV+@n~bp&7qktA--ip@4x@l^LEB06jFZajd_?gDZ6}Az z1#M;EAK`+witrP0LEDH1azWc%^jTccwiwL}7qp$4M0`QpV>m>(pzSDfi+_5;#NmRr zB}md&%KQdN`dXQxDBVlS?1HiCvNDgu(p^zzJB-BND04bof^QKKJh7|F?2ES$-zjrZ zSKPLu%sn$neXq=jRHd#fv)*jH5>aMej21sAv+D|_ZYuNkTBUwe<}|dDTgn`k84GjD z%=QhoB`EW5Ia0qU^C#5FZDs!0OQ}1`dogYsCJBM;$-5oI>7 z%SV8i7vNm|g9O6$e2TQ71pigJTaM|+7uQupjxep8b5g0vWS&n_>SZ!>qm-tQxfL$g zR5H8FAT^E5W=oWsPUdxZmamXm08QjoGW&k1)C@A)qp)T|d?W6TAd~NXm`&!|rb^8r zvsG33Xa4|FbIGiQ?l6zcmp!EBlleKU%>ptztRc0K%=x`YEu!3Yx~auv=Bh<%37ON! zv!ONnAPvjNd;?XxoXq$Yq*jo53iY;<%#E-qtH{he2%kif`8Uko8p>V2|0uPV%w89j zT1RFOitIJYU29A)^*WjPzr**BWcEhCdV|c`lazXs%+2Uu8<5((q&AZIdt+P^MCO0^ zXET`RmERqH5p6M_=f_ z+sT|+nAH1Zwyl9PG{`)Girz`)h%izgpo}*wwTsODu$sHcyoR>0hs@W|X7`d=5&7Fk z=Kd2fu4JZTJlId>0T}lKWPXHBc#zC`FOd3(%)*H85ShC%ejg^2?*ROm%&aTX8Bt1E zaa$tf;E;Zbx><fcQ0fGk8=l~NKQebMBXyE;R~s=( zog%XxO7}FGb&-}cWd8IRosn`kAJa{pqudQg4N>RGY<>lu5jwl0Gm=@XEN)9AGpr4I zA>@#Vi!jDlin8TyO+&FHsKA&Vb6?t8jas$Zb56vWX8atW;W-c zS)1n1umoPSCS0muvw?}t=jP=0Y{K7)!tIyl^yU~*%))4NKC@dlHsNnWXAbiRG?tv^ z^mI1i<6v%bn=_lT3Ga7?O?Zpd*T>xU z0Oz!sIYTjsniqz#3D1OrOE!1xXA_>O7@P2e=x=G}0wSjV7X&6{%f(_MW%}F?lM@YKC@V%x_}5n|Ht!vA9FDquB0S`Ecr#GP`9K+uau!Z1>=M z*yx9J_GjB|t_sC^r80+B65GumF-#`2_&~AUoqH>`-Ahrou-y+mBA&{<%# zr_54pw3ofYM%%oI^)p!QCP)jcb^=BtSnaLl#cBtm8ez3x!2k)X-Qkg9tG#a$vDN;p zBC*xpcNiP#F$|$~!fJnls)E%{z!2~nnMRsos~v_`2dljo>m9J#Piqoe?Jmd|toDL= zVzqY<5v%=40kPUo+Ywvs=B8NfL2HSv_Kf9XwJD2O?PC`dTkUTX#A@e<69uciE0Wl1 z_x@h7)lNDuR{M|R*uqcdzbFY@rJ?_k`CdJ-+W+Jfs~v-W468kN zkz%X;6;cMPeFZfQt34Ra23C7!d$>?!PQXOzB$+R5K>tG(qjSM(e{n~w_RXOLt8LyZ zivCCDWpqPW?dxa^u-cIe#AY$SjwN{zqn=edvE=zB-uH4Kf$P2LC|j z7IdeZWVVDU`H{?FXiK-yT3ew1p~A1icOtVzG4wx-g6PG!$$ViId?zGgID97zTqV)} zklWJmoyaT%8+;!{*9-j*@xgWf4H3a4{7z{R0u{Tm3b_@7Ef9W<84On3vvjJn#{v3u=1@k_o&aal9t91#y^Aa zKxPlv3quv*dwV@;?;7`kgtd-@O@7bl4$W9D53BhRes0%44ShO7+HNBkEKc{)Ds7L! zcYt*ts?zp~W>u;)8gbf?{TMw@W<$cL3#;Xo_iV%yqqO!0RfBLyHw-BJm4gI!z^4yR zpf%^!NJo7C;3DDZ>^`1M*@B%6TI|C7QbAd#Xr^^B_I#yOAC6^L0HXtpep)x9{dLeG zLl>AaNKzC|-7v_dbvGInL+e3Qbl)GmgfS$ohtU&eQD%oBs1Qf8Fgi_IFQXJ%Oa~Mo zr8%HA_2nxft<}kJ8UX{6*4t=~krQQ%O#uIc%a=~3^)c4IgGiaX;D2!W{>iky2Jh(m zoVf@72bZs+OzUTif%!pWRrK@!;PS1MY5k4v=56s(MC`%h)d{za%4YEv? zp2I~w@lBO!1C7@wqJf~|sK@hZye5-2*cet?7x^@o#wmd!VGJ>5*o;js18v)33^j7w zjN>kYYs%I!%!slXw_OI;kIfivOfO|ueKV&7xK?b&2xG0yh;wU-N@`2%2m(m3_#`p||Us~^%&(PSc z*r^O)JsdNubdDwT(B9V_1_&>$@~QJK5(?d%;)=|3PTO zo}tM~SU5F9&r5sJxPzIB&=$Egt?1xnFeVxY3Ts6l1TcDZLW_FIfcIhP_$q)gtvqy0 zHrDTfoksc5zb-=-v2;{?uV~uK#uiv-Ig7p&Y^{H%&@{ebG;NAe5{oBt;&H?0((rLyPG%1O6<@0G0>2$+WL7$Y&~8%{CTI(%|3z;CD&L)f{6j98;0xBSx$UAh{9UDs8Tj^99VbSZ$I&`05yd z^NiN$1p+qr2M@r1Nt zs}D~zZLv`d=3ZLR<>%ARplzltG4c=5G`=rammha`TibyGD59mt&Uj5L^L$zj4E$-! z4bF^2TFarKuzo&?s8$%0ztsuv?hnq#Fq*c?h=jYub5VN9AAEqaODxbgbN*H(111oUq*zE0L5;dG-E zB;PWwtWatMkH~{rT4F3tD?0<*Vq7kU+{{L}YeP{&zuGC9VinF1ta4g&&11p$sk&OuI2S=zvYL@nxfUkOwpDQW&WM*SHiC9X* zTnip%Q4Ch**I01~GB1qa*?-G&ynvfx^6Y=g_aK^AQJr41c|PbhyTUYNF|)!JWi{VJ z!^>vA49gW_euI4b%!q$^_Wv4YusO_*@Vs)Gs~X^DEpru2KyGsZiXe}92zNu*?-Sn`1rtFIh$wy9g)t0<_S3Th0I;V3%L0(Jt|_(-oms0uFzl9T)U7|xOpjt z7jUz-!BL^+M_3;!Vg7&?Q_`IGqQdOI7aC@1b0PY2ggNRhp8X$0Udo!|;R{EaSzg8~ zLG#6uJp2C#USo_|7!$&BmbX_S?My*TrO`}@%0C*41=-%sFnzPWw%{_Y(2&wljv)gP zO1?`dYJ58(KqG4I0{YhSJQJ`U(3l1~fd2Bq`l_Nr)7=%68qS*LI1HbNTKgm`G#l1c zxA%9LFjgYf1a9vYn#Zly&HYRO!G~h2(CUxfJn2P#ZaW0L1$%f4SnHfHGUSEFq_e|3 zyp!0vA7ItI)1%4G2~X5bO$PsX_-6MJs}x`~_btfTHMFc^EP~ zK0uJKgRRhcAzC7rC@u9DtkfNXU4Ge&7?GOaJl^G48vo6>M<%E1xJ^`@% zu2h`7#07W9)rwuF8-ewVDW~(Oi&hE%{fN)7^2+6sNphpF*Tbh4Cdpr~9Jya9B`*?G zX~C;doa9MIHw!L@KS`bj{KzNJCV5)(BcBcH^*n@lL^&9*0x>W0siX;VzT`wUHE3Ij zas=c{94n5WDZe^5TIEze1{Ig%29>`Ga~m`5f&9!91ZCZz!0X`yRg?7JLmU&IChC>L zRx7=GlPlKqxe)nWxFiq%MK1>7e^+$|}_opG~Lw@8MJ&q<>X#Y_8J)%!?89I@|Sm7Ow4#Xj} z-eqVVNyVXKrS}KeSz#P;8M?rQvC4ZlS*PPim!S(>7^}Ud4{IG>cKR80qUd-SISB9*DLRs)3f)2 zhDu#vp<%72K~wNJ{PB7?+9c0X4zM2iuU7)n&$WY0rg3wzx*kG%h5ix#_BxF}{J)R? zKzbAY$@ErzyhruXH9QaW;=$V$>q1B1Vc@wap3zmqOpN&WX>~A<>Kcmh5dLEs0>sOz zydIX#)PWUdr}B7)!tB%z50=90)F01|!tAa>4%Z6V(T6IQ%Chk+hJ#AEC^!0g)hFbx;pgsUVdSh1hV@ZFnD5sgTx)EjK;-s!D~4mEpp4m;_c;DG$*lj*0b= zk5!2wLmwA7FVQ0xX4O7P%^=!;9n$$|z$Fx{mX8-dl@;v&yjtxsJf zqt&|e9+vVrmRl}E;&ZIl#stj>hJ&F~l+kK=a%e`B%gAW8&bQQzMlM4>u0cO3hO(IN zy@#$K=@{ZN_#0v6SS?SqW-M?ST8Fk;L*Y$}jvX#T>(Ewf@DM$8on=N}&Nm{^R?GNR zDOO0oIiU4{k7g|Mj)iw3j6CqAEpeZYKwGUZMrlT}%g~9`R_h$xdC}38}~9T}DQ$)ue=G9CR5v7Hzfm!_|{mt~d-7g|=E#;TMV3dgOwR)!Oi- zZMCETtr9@H=MS8cL&5ZUlTohl|2TlZpi6%@p9JtH+FlQ*BgxZ= zLF$h5fM^s-nhz_Lr-TrJ%|)Yi`G6m)V(m`{``c13G8bLTfJ0STPr~j>xY( zr$b4Er*XIyR}__+3YmFPm_1N4H{7a=%FBwR=<*)q>ayl{l~-(nMgT z`Ca9enGCrnRSHTw@rbr2ty9;UydW<51?0i6YIGL^TT{sFJgxh#i2pRhX%USA4fkxLNO zR*S9t@xM9kLSTYb`%!W^QspD7R-n{Rx`M1oHKE(*5%tYo@P1j7K|ebTHAJq}sC>IK zJU+g#f|G`U>=9A{FNB*QCVlwp_2dT>%$HhvJ=Whc9AGgROVYu-5Q<47{(9wl%u18z zi>?OXpu6L5FP>TQnt`@yfw%NgkF@@>n5! zoR?Ql_VRl8RY|vIa+uoXkcnHB>O;|m4k6{l5%B|(l$-zZv8p&%PM&!;mRC-=O!8RIylDpZ z5`SSk<(c>TcxA(}S7(PqIwheq(gvheUbj`P7rfJ6fN8n|#-{40|DrEGz_Jg)Mqtu} zVcYB34t}upxFwkbKIQ=Hu_fModOa67z+XasKpf4|%)rBF? zY#wa}y15v($ZJ*}#2?Ev@5;+%)iLkPY8HAE{*3v%3fcK9N6`NnXp#Ws@f3<`i>jz5hqsyTI9Xmi5AGhe(o2W33Qct^uTK zn$YaIPe>wj*^^8smzmj z!544Z^|m~=_pX%>;%AWk5io#>+HUk#gvCa4HJGR?uz=Dt)s0}{lK!>(N!h78(YEof zCsA)??HLYxBFuav{H@n>?3umS;U~7V+*rd~%29Lg5Bz(~+@4tf-`{4K#~0#z&ydL2iORvf2JYRe2ydIs{IR>?aK^=N#GSc+!|by6nSaF(^>IGB45)=aFv0cvpu3$Oe;r^`HhRHE zM0;kHfX6C`yC#d%n{&_+Z>X%ERBB`R5m)b9a2`Rp#TLjT?||>=2~YowLt0 zuh|8cr1_5Ns5E%l55T~bjvR^`_}zUN+itQ@`II5NS=S1)z=WL1m%sI$=3eCAYyK7P zg@19(+e@AJ?|CYQf@*%0Mh{CiJ<>N;6G@J#dE`}}*Oz{e&_gWy%NLH@+Q$Bi`^ zed;fv-EnQdT9rOo_t{NOV(Ja=rec_Y}SY#sAOAs7gze?ikd z-15U_Q-M2DkXlr}OuP`|;$i@BJ-ui#@0K#IwQ8cLX;+ zDF?m(t@VoHO&RwU! zAOGy$b?Ari&vSNt4ifxzJ9fSOFv7TY?)vLn5$&{l*CSx8|M=WpzdaN1;%m{n2lfXy ze*8Dsql@2o37`Dy@8%dL9>9lH5>K6e^V_T>hE6{9i~j?IQ0B!^O*Jx;c<%alfLb%U zw{FVFjb`Sq_y%JkAy3{8x}9oe+U|y9P?QW)oBKga|CMk0QP*OxJbH8Hq0?w^`8D5W z$l{mS;Mds{MEZRYic{NbtA>C-?%(^|0`6V;`5#0i9~Li_tKPZ&-e&m+3<#kXL} zU-v`U12W}*-2WZ^*X79{{!{ENdGcFYeTUuAd3pQ|ulidvYZv-I-o5kpqqkE({)GeP z9j{8gLwfrM*jwO_EqK7D-n9E+u!WyaH6vfZOze3GE#CaohcW@5%lsBw$!@UXZ3{^0 z)KB~%z9|F#Z1OdD!zOs})LY;D2Gd{{zU&bK8c;$_z5NZZ$^;8nKu<4V1H0jV553vkFY>-js@%Uda}T!h)H`1NY;^sKy%&sR%1{`l zex`x7m)DMDKJi^>_p@^kxC@_!K{oZy-^DZ1;*zqOckjrUzLPl-0|hq$>n6Xw?h|Lg zP=Q90L-j%x`^H=3SK#4XG_3>x|JdGJ+qEOQTAR5@;R(x8#~d4$7a zc`^^Un|sX%j1T1tClRpD7C#xcFdr~z(g?Yy?NCZBV z2fQf`{Q$$O!Lko<>t{vw{(qrdVe3}RgPw$EG#il3ew z#*9N^Pha>Lm@Xvtj+-*PGd-PogdckFdoj0rUyGj*%>VmP5KQMXd!cIRjf7yHo_WUw z#EtWT+guBM^ybXRe+7@;e*crrAm-TMZEOlgb{C}4^jr>I%M{&%;4Sxn5l^2!@PEzN z?vJ0*atzaFR`!~EZ}RUw2_k&@Z29#@n7_xr_htAkrsv;smr>~d$iFvv2KVxRfmIOM z_(j~a_Q(%IKbv0qBp8j{+Ji|`318LOLbUD+aLr8DIZoFly;A^cB$J5D!QXiU){lHr z(2LyEQ=t}U_y`t-3$c4ADFlvs{JuwjVb$FD%gi6fHxA+v`^0B6e;3~v5{^l2fy%h-((uRx}yP8eGmTqd6+vw{y)>v;A_~I2fz5xgNE*Yr=!8Y@(us+ z<_o65=Q|qw1kjs<|M;F8%_pwA*N%R#>Eu~xh6lg&+CK||lbn=W*g#j|=8W9?^6P;r zv@ori6Yid!f;R&RIQUOnm_K>A=o(<&<=!Lva8DloZg76D=-k^T-F{Ia~w5b&@5@-vbCMB@Hy|DF)=f4u^G zP@emStM)lNJ3_$kxwT?wd#C&i&>SAMI!$qxitDeb6-cLfpXLh9CUel4)=~7DeaJ zZUGs^Z`|?@)8IuN4P+D_ejk{x%){A^1~Q6|ytZu`)H@o;D1PUe|I0M^p^gT!)jqoN zoFI4~m-gLkpd@3q;m2;my)#(f%*Wk5yO6Tge(w#}nTH>C4eU1j_^;&5!{3Ov>x=Ef zvJHR#9gF7SgB=ZI8~(wEUSS%X?r0#}@DnfjJ@bhw8wi2gPslF&!=HTAGQf!T(C z^i#iPx1m1G(Q>Qt-`zX8_lD*71s<)s^U$rCn<3Gl?jAan(Fn2tX}DLPiV(8V%p*lT zb~N)SKgNd4TA^4uG?vLc<(0Vjt^URFOy(AMQIF6z&5va=FNyCQz(avK5qTo>+pr%V zUBaHkrBnmW+y=EB;M7`3}uwKK(j#^Ns#Zdif5W$c+9ZAbRfgU-55} z&<~x=R1TZH@~7_R-eLAiOT8bO&1{0P3Zec>M+=hKp*du6A_|Pde;Q05GZFiR-5)xe zdGRPxelcsAQFl`pa=-BOLra-|E}6%dTnl`iRCws6nI>+^}S4@ldceEh69(p+(!KMqJ>i7!j^-!2O^`A_Ouccb7iR1WCB{KkI zlJf)|N0$y%_FT-$9(Hc`PW~L;d6*Y?1n;oi8Ci^WA#wH%Wp3N-pKlDiE`*`hx{_{~o^x6^ros zL;v#sya1*j$%LAn`H1Q}hyL%MyxiP-)W0Y6_3x*C7uk9g7vBOP%snUM^|g(g4RsB< zdwYfERh>EX^;cgq#C0y!z|c=7^JhS+KEly8*h0r?Zhk}NXZ{h63Un#+dUw;Vz0l8f znU7V?J==F7L4iM%iVioZ>tm-!OV3E8G^ zO|>utdQ0Y&S#1FVRT2VKk{);OCq69^WuS(0GD7zZtpKoXg+n-rzky1&^>a_^Y^qyxPVS{PdUYB(Q<5 zzKtiCycKVL7GAF-*vl8Wc!GDebcuIl#$5{+Pq6dl!Zmf^!O=Iq5HH%jlO#ASKX>n3 z#qWD)l<(fDKQHrww&1;CbD0L|@Xj~zrvA#GyXC^M($j)qW@hgDKSK3-?NewoxEUN= zQ=e||vP>&DSozo}qE~(f)N}nDAT{*=*ts2<;M*UVV;DM~x)HWh=TjGs818sIb#*@V zhQmQ{;_kcKkR6#Hz%wJ62H?lcb9maqFdAfT%JANf8#6D%-Rpk>KhzbVm>&UrfpLRI z=971#-P1ESv&k!5V?zsKJ7=CX|7mACH(!7@{NFzLNri`xwuX55Z}6l2vtQC*GMn_o z?YQw_T->DNZO4uOz+cY+gxYcABmDKBK-fEOBwiZqVITKUcIXdwaqFjXjsH83{~yHv zN5O+G|2!`4_@UtPd*$Dqmw!|K-F^Av^6yhF|AqW}gFekCq3;JT#sAxn=jj$FE_gj2 zi3imFKYxf^nUD*&#h3BL7;Ny}`2R2Q<@e(Ux~6wQ$^mqf;1}@kA9UOu!yPJ&a8m|f z^zR<|XI%Lju1LiB*Msd}hqttS>>Ixy>yz2TrnfL||GH}C6PU>IQS|0XnJX{94rb@r z7k(VU3G83y0sQasD}EO}JvsiVm)Wad|N7VOf8j?C;^MK{Z%63j7Ms5Cn|~hG^zo%1 zGh@pfxP3Ps*qeF!&P-7KK56pWGH{f^5v+;1a0dwag=1gBu6r>CftURGuj9h>+rATJ z4<6zL`;xDslZlr+^lo=SU-Bah2>o97Ua}L6&b$PsYOwpOna_ikpY)S#B4giuamP%E zsxhD&jQy4)|A0pI9S{5$0QGG2q|D-vpF={?@`E64osP`nXTAdkMvDIhTVJp2SbP{e z??CCuIeTU2;=AERJP_RmGg8~^UVQJX@Sc@_IceM6uz2#xXtP?)+bjET87-mB^E0nL zgJJ}j1bkkS20nxhDN6{l{zd$L%lG{W+TE4;+(;1o1^z}mz5e&#gf~8%`F2d(><4v3 z(HGJ5?=q*sDeR?x`w?9FLgp2J6kq!E^YP%{XFm3__|hLA#icK1?zkhqboY1S!GFm7 z6?T?=*UFR7>K`*t#quxd7hkCKv-8_C!7F$r^Fk$^|Neo%UQn_Lpp7WmEGpUj`@?p& z_U~aKr+eRkx9+AF!8hxR<5-_dP4~XS?mY_TN`4wt{`n&Fp-NZS|6S zd2A65%o@XP(bqq4^=aqv;4PWgV@~x_kh!`I72H)Ge0zGyAr(Q z-iJ$QcRaHPN|%237w+AM`}-y`e*{fUFWr81h=Z8UJPYcbUfP-2^Ybg1;!k2;_npt& z)<6K$Yh{Y>9RhjmyCbs*^3Y2=?)?Jn(|z}3{(co!r?lF6@88~nOJU}^ui93@o;F^1 zU%49WyFWAf^i1$FX}SBpS{rlvs>}<%5|~Rj>|uS4`-<&Gu@4&Jumy&3}gNv_%a{L^5kqGTwuh{W}R%qYy7I4d52Qm*`Z|Y_2 z$jC#7?)rthphA6E`p1$QFFN_rr`w05#cgkV2zE*96KrwIiI1cH($8c*dkab-eGXU5 zTl@?%`Sjex^po9N_}WuPFMxw8_%1E{(j9W)^oy&1nt0?)>0N)ExN!Dt?J0>1^ArEG zXfMp)3|hS9N8kT^CjsQG3n!odx3-B~@RLY8f+(fM;&|a=;*tFLcSE3ieP25In)?$M zZg~5zP1y?vINTd9WFGuT^2)_b<8}6meCOPe?>(5f;D=Z4-nj*N+ZkjjPo97A&*B?i zhc1i`{#@c!FMaWD>>#hj9Y?mYqr3}uj^37>-Mfw)x+&4(Wk-K(J@J*hkNxU&qQyP0 zyyHJ7E)fC4A%MLL;Y(in_QZwdW52m4@klZEt@k7@lwSPajl?6-k-xk@ z(PHJuvy)$0J#yb|i56?$dHXLV-cg=7z9(^E{n-1k-MyY(JW>Gj^)6J7{5BYzcVXkj zk9;X{p?drwFi5XO?a0r8wRsonN9P|+T)6b&7grNK^&@*^u^UUz{f)#U)6tJ6hwnSK zN&Lx?a5XRz8+& zY%bomTy8bH--#}_y5A^8%k9ma5l+sz;d+of`?S*~7u(HdsP z`?FYw@J9iGR;d)N;3g*R(rTr)99Hnh4*XFKH=<@eEJo(<+VXl-Y@u;8al!o2Y&FW& zRrAM2)C#q^xv;$5io!-C+%|s~*TROq6*kMouvObA7tIy_4|ES%YPf;!9bImhE3HH2 z>T!1bQn-w7hQ(I76>V(PN|EVzQAfl$x#AYTBfnK@#jq0b*JXaM;JORBsK2jlmGBw- ziRmh!5r>Vx@Q&7YU7oB)TZOQ~H??Z){Wsuly&_`r#@hjvA2(Vnkue)TT z?XS`;z1k{o@I$!ozZu`v4x2{!0^bcfuea73QCQ+P&6QPLIfPXS+m#mDU`Ocu6}D;( zjtCbLLv9s|9M`25XtRiEv$NiaR-?;xJixWrDXEm3d?hY4Ta^OlxnV}``d27c!e&#t zf@?Zecml(@6hC}vBed@=jtVvJH zS1f_nYi0KWY<7FO0jf10X*Vo!yXoaSB9KIN724sZeP$ES$QtuDX9^P%g&XEIO;A-- zLPtV#0bjcqmAnxb!9c=#y+X<^*Q%x&=DUioG@>eAS&Zu5t1XyLi1*mfWUM%3;c-P1eaFI6+4^D?Uj|t?sr~qZa1-Mx58F&&0ViIYDEm# zOjR>#wJ<3ACtBBQjj*xpz10zLz0zJSyE(>&@)keZ#AH`$HA{e&X~^|b8T`%f1D8$i zm|kq)W!^F?ODk5Qu-dM#h1F8U^L2x5%~5uFnG)cdoVaa{NPC>JUon)HX zYx4cFN0%}i9amS%7@7b48aM?;?qAa3cRZSC!X9jd#kF{|+KzTH7vW zJ#2vJqe_pP*ir6|8K>bg>C2!!EK+MbeZ3i7YJ+~tVfRmPle!LF4O;8!ggINXV9{iiX{l7reUil%u_Xl3dm*4%H{0Tt|j^BcL zi_huryZP@v`MnJp6#uVR+w-Zm{QH7jYwhH}KzR6#-Te1m@_YPV{tc8(`oMo-8%taM z3#Apm$8CvH{*&I{$$w$+OI!Xsiq83MiCMxr=KY=gm&Pyqz<-Hl`fV%nH(nCl{RY%d z1u$~9u{y~qbTc?>x$2Q4BAYdILsVkX>(K=rd$2G`wR}R%0CWYpOl#pr*bG|X#b^TK&KC%j za@xlh;!n*}^{C2e!UX~ZRX3)V~VY%AOEskP-S96!^yw81GC}3BJ>6p!eU}=Um z3*~Aqn2VzNM6-_mEmEhM+{Q!D9--d`by&@y_FAjC6;?y+b6I`9(e&JYH~n3p7cwLkh5VU>OG|sF7B%%dm1wQL{Bs zE#*N2FqmhcZez^ns3OZOX9pGtTbx$QXIykhD!}MLb4%uGh3&Fg;U>yE#)tuILX*tR zTXs^OpEu)Z4mT{tHrE5pJE;6jt(q@3%Jo)=)y`Ki_wwx#kV-Y084jzfAOiA#xoihp zjjs(a%)p50#=%dOqvBc%lA;yCEzu~iuC-b<@(+2{&;odW7Z$~`ZTw)ipk%oMSfe1E zUwf7&g~5$7_>dC7(89S!Wvmf3Yn9DNcBXVYJDlRE*|C)f8xC_nQ7SD$XTFTq_7&Z` zWwwfJsj2pIxd>zdLUOs?ikisxUZrLXn#Fox{V7$mhk+n~u%psa%}ijST5D{CF?etk z+o##uPo{X_;C?_gM~?XD#8KWb*FDB5myet44k*#9`;YHGE`4yKZ?xRZ6So4!=ZK;Bz3koY?~02zqWsU|!0gh8LD# zv}F&IdnsSSa4n(a2MS1IWcyhRHN+m^XT}#M%PkSwW35KJ3S1!4>33UgxG;k z7uoBvuvEGOU|iFzeqt|W2LRoz)kVZ&FDlsY^cD45<{cyv>I*QwgA7@ zQ+y0>hR~wT2-(sxW-xH}4xbdYVPq)4Dn&YXN?pTELU^Ei)v-K=dYYm=I9Dwb&ngTT z4$HcFdJ?1-_#bqYd2IjoDw))2aOM)6wyoL)vMyN}nd0$%YG>Uh{#lrMshpjSghX%^AZ; z^XNx(2HSCyWDAM{npM15XhLEZC^p%h@db!FL9)8-l?@<|kZ#=Gd4a@a1U=V!tQdl? z(Ew3892i@GL<7hOJ%2lo35ZJA<)Nq$QDb&sP=x8c;)CQ}^9>c0Lj<+(63Am~A_S^y zE!6^WApm}1#q{VzdmS)KOGSlG>_$8Y`>~Vj8zjMn2B_F-{2ZBWmCcfIE{0p|EjXBJ z59OfB?Q2*qm!-?sWZ?NG%rt>ea_hlt{w!IW%v{V(e3hqj5r@l7D3TF?*kUwAeGsac zTSziIOoQ5q@><*PQDGTpS8}Gqy^X!O>_~dN^96t`le($L`^SmN0$Z$*Nn&=S(vGWtIb(6n2{Ok zD6&h>3MQY+g=aunZ5aHk)u^aN4G6z&{)tx6BGyQLkxa08X4v_I>~Ko^d!qGEx<6Bp7;UEGqF%oQ-3nt z3d@|7TqPe?Hp5b_K_ll>t-8wp2eOM*&tji?QO=0kd&)1Yh;ke*m);G~1woS74JSf4 zK-9>80*e}`W(i(Qy&Y3n$`iGs5ysBun?r@gs6L7%T5W{O{A4&=%<;Qa-%7B)MH1HP z+rc`}8QQpb4Bh9v!p1i0vars>yr!Ek2Pb9m;uh7+tH#uq&pieZMMtfs@04?p@oBqX zhnGF&EvfGg8eWGj1+~{wTdyVY(T}TYAoDxDnvd4QZMt5}5*h<@phWq-D2g@pQ8PbD zvwRp5(otU0G8Op&**Rg@@298*$7K+UR0LWrgf;|WiiK>IX+ykXlwwLIumO(n=1zJ(_j4n(Ekbr7&ZN667 zu3}HgUQH`y*+J0{@G%%ri*^CWIU(t`PTcZ^&%Zqf^XAf^h(M84Va`U1{ zcFOj{0yZnvV@-^mqKej-Mf}hOphKKHzJ7dR_UyET6Z9Z@SiRQhc34INL>mYuRvP7t zA)Kyi5yD=tRMd~nFN}zt-{|rBe%#d}yuzFyDdlC;4Em`wb22%QH0IADRBmHP#TNzV zivKKAgTNF5nFJot4!8NnejVsw(@<50WtYS+-GBhch!+v15Y%gRf%=m@Z2|x=XmY=g zWk)@N@-&3x%LGV`zb-?V%UgsFf?nszm;=z4A%YzbOz+|`^s9NHEIJdZML1d!DjvTX z@7hsa?*UMb0HqXCKq%o7fI@Hr4vHw`%$|caA)2nN6G79NFXv_+R3eUYb85^uAiw*0#H)$ z6%*!(vlM#O#i``2Ol>7dGVOfpJObaqaR3W0twlgwsv%%$!>&_ctc0h;jG!Mqfc;@Y zTe)>h{$X>wS`_pQ*qj)uT)JSRiQsxgyrCdLF}^C&BW9Cy{0NGwt4bFSdGWYI50oh- zW%`KN;pQdapiPQ(azDc)$@hcVDpZvP;96Gxa?yvk$|dW-$T#gM&Wr=nuC@!s%a^mG z0Qr-M=Inei-^}IKiw0fxpk;CQHG>UAW|h$oSzFkyvDXIEBa+bx#{+VG z+#7SHL%#WM(;4vKN$X8DkbcL*S(qB}t|1RmW2xU3bVky(sCNr9kjv#q3hVG7rd%u8 zF|#D%C7Ilo-S50CY~In=VL%nIv#Fc8G3SD90M2Y~7-2T6)|zT*N$%$`i9v|s93SfI z15N8PYS6-63`1loTrXe5X8#Y`r^5uBjGMXB4s)Y)1{h3{Gx^if^H>lW900?yThl6( zx<7hjN&X(Rl(Jq9Vy||fUKjbGuL;K1)@G20%Mvcv29PecQ#UwSX?6h9%#c=fkn7&= zWzb{~$G|Mf5OVii{(QLsXnYo7Ymms=33bn@Dm>T2B-NfmUam~-YI~j#i8O#t09{s{h5~Q z#ZmX$G54E#%Ekpj%2nGN;(3%c&o{@RDW;~)S zfd@Lgz=>q-Jc(=wQF~jkoXX26{)$gjU5D;5Z!v(JTf@{USvAlxhwLCU1HcQ6%>zh* zZ;Ci4Qm4VC2u5x;;DKLm8s}Y((Y0cb$|sYG(>Tz_MsuxJi?=y-jV`|0AwsBz1^b>$ zd8u7V(F)U6G<0pKR^nw$G)~MNW%=kCGnYW!YgG#NoS~-dka2RIM{nuoH{OsTA&}Ua zhIk&>ub33)`yuk{0l(O6J;rDFl!ct{bt`o>C<2{j&wD;=6(->fPD-I$^svD+9V8X# zX15C+^C;y!o!8d`AOrNEIY+1}m#3*!=~6xx>o>?lzr&PGYot6Zd?8%35@H*8@Rahg z&d!Lk=&6H)iJSn0_KaC>nnOrVuc6wAlJr;ABCjn(ZdB8r`t&tWGWN<c^FE-bzcN5*%E!VlLrdM3rI6H^S}ZNWxlz*@pPyApel5 z1V&wD_LD^Y!N4tDFeVee-DzbZ?s66K92S~}oW@J5=q!Q*VH1YX4=nez$F9!(EGBI|> z>nW>d_i?-l-HWqh31v#+_OM+lwAVEVgTn%HfiIWUpNR_w!XhIP2uBTe`E`c=AlS;= z2p5S-COd3MW*&ZJW~V7Hu<{OGMi~AR&0@K1V;r%b~ zj_6!$L`9Fhcn2W$f`11mLu6_MwMjWi+pJ_jC1VN^Lew`P$5#0o3jSfR)S$x#86COi5u|4{Y z*lKPH*aa)#YiGbLW$pTHTmmlGm0XA-!d$Cxx!{3d6U0q6ZowKw`}ANW?~BI zG;O>Zb1_q1FZcnHlnaFAw;rVRQ6DAt(FK?$4NNEAuxguj_|U=>FjJzLla8yBIn2d98~wi$w7 z6=U*TYh^50XeqX1!gjpAtbdP8RB6Da-bjLabN6(}gE( z2lbI5{byLdq@j!&N`b9ZsU-P%Q~IfvoHB$!k!tgB4=ch!)L;%dRp0HV2Oq{fMuCK) zn{6GN2nay*1gLI=xx}tVEJB47;aSNmTL=xTipRv#hMkdILg^sa;38T}TQ!_sTC78M zKwi=^W|$07DAo{;*o;#}q)D0ssCuLGCtcQG#m$Ha1qPZTTt{qaWiA8QQEmz331xWX zsMaXkFVwhyvsNx0fMUQ5#?mQ?y;moP%rA9a_*2V8%YnNG`Fd6ZDc22AVjE2ebkY%! z9S~1|ky2)fY*ddQca@%tI22~FwgsPt=;%U6E?EHaouWiKp4L-qLWB+j#u%hvsB-}e z+X$8r4{03839`vz%|&KHPm@d^6<5k}Vl^mx{qXX9vukt>bRgrz<^-i@a@;73_3e}wTpZy@0}+!>QW1gzQ)Y3J zCtl<8UxyDMnk9{A|FMyVZaA@3H9CP0`Romuii3!!DRLaq7| z9fCg%7ErxRJ;P)>sX~8tg`juPY_rUOy8LGlEW(%fws4rP#GwHgr7|xT1Nq92;ppyk)nNDEz1E@{Sdpn2=yh$=UVuppDUW$Cd` zAeWm-Nn;aT)n9*iyG;AeNZB5G2ijU6Wy^%Eu!C{Xf#r1llwp%HB%UPrau!dW#rCxJ zd3m49$13T6ro!-uYs#RRjiU^AJLa5Xl%@J|fQlA}{;WP<$p zvnvK--wgQfNC-7V`^_RuL!ekMfO-s0fGq}53!ik8>n9?*>|0Wn!?v>+ zThjTBj-3um;c5uw6j0D<*GP>x$qOxW;L;g$~76!~~lRL+I7hG)k+Y;A|1;2-Z=M_C&mb82tOfgO}-$!UdX6Xrctk{nX zvC553C$!OX%=|K3%Y0~LS-znc({I&fG(3ejtI@zVy;|sj$Ja-hCWqvBRe$Z2rHo%2 zpuIg{I^aQH-C(1we!L`yoJ8q`g(Mu;$c+ofBX6{0;#4D&1t!7mlB0?sCKZO*2+A4Z zK6Qa(6xKkydTW^d`XxLr?LyJ{bHYsY3tbZ63)M9w$AndbFf6s{+~aO{xkgZ!HwaNW`G7Vk}$%nlJlxI0Q1<#5U(rLCro|}6@0|@)M?6&Elil2 zZ?j0GWcpsE8-5;>s78t5%lSgH2;`b29N;5jgc83ZA7N(@dWgMlse(TEEaGh8u3wFF z1g~Kl^|s0q*rD`I^31tiCnVKe^#KLq2&jSyQ(>3PD}aa#fQUK(~== z0X73d_T)q+um)75wjwkNr}Dy7!uQew2ylie+#yU7%P|*i=cPE3X6V|f6ZHeIK@=nS zhEb-XA$rj6MgdMesXrAgA%4CR3Qd_kA8#Os%ppBi*`Z`QTaSrr2p0?_=Tc4L*08KY zY@sZ`-&ii)(_n||!zutsWQBJtc5z8+j=B@ld=Viac^kCWlM+0Y!&=LR0PKQ}60TvSiCM<7 zGhVq#jJlxy2q7FB@ejujQU{r5u6ws1N6HRhf1d3u^B zqqT6eTx;ZdkP%2&F(+;^l}!+cz~E1yXb$^nhnEz}U2NV(*ppy>%NQkq5s4`oL^U@>k!F85;+&ZD0%w#u5a+Gcu3~ID`6_NNDBz{X~KRndDdl z^Qu0q+B^l;JpdGjESDl`ILIr~+#cyRk~5nq(1cGp^?)K15PnXa>9Oy|v+nT~Nm9@r z3c3c*4%9`6{SIC6G*+MCdlEmvnRXv4ZYtZs(&bjS>!KQT2!mnCV=~(_flg;f#8Kj9 zYM~Vq@&e6mN1PC{CDoUP&vv{yZQzPVHvugI2{<6f$*{59E@^O8znz^9Q3fv?D6B*2 zF@-(gS6GF@MaM8lx_4sc%>#oPGGa6 zEK5rrR&L+G!W9C-+QBi_MrchU$e-@;HkA)9( z(BTj>uhCz?R-wdS30X@;l3;Q>s?-{7)DxpmIWFsdu9>xN%Ait(qZ*{^PY6myF zR@po##W-wjn52rHP?sh)fTTdT-$J1m&O~8A%g9)+V5MBnE=CFN#zI|PL#8ONthO8FW01MU&9ac8 zhI$d3N4!;7b%=_i1^0EUC7|Y((cTmEnpHqaLdJ3?@ENNhJgOgy8mdB5K`cBqIgbS0 zXR}$2Bo^0;u4b&ALd%BtN|W1JJT0|}9DZMAMDR96L zV+AqCSb4=D>^{fJAZ5J;V+|@9wyIP|a1r{2xv6d!rzvBkw4(IN`@&{$rpzKNCbJYn zcN&nZ#3IjFW(g*Uo$N>J8tlw59C>@TON1$q%ot}ANZtw8oTDsJPnourrfb=FmJ=i} zsALXdZ(B?|hBPXwAl-snw4k^Q7g&Utg1Ql)&S`W9nOHW--MBa7c!Oe1pXjBfcS&7> z)oD;c0iXz~pzIi5Yv-Jtjgu}uyFSuqCT!GTD9W>D1Nbov8b;HP|8|6|ZC%R@oHKcQ zV~A31!zQ*FT+)Xa;mu}a5oasD8IvJ9pt_$4PJ-k|$yFTx5C(9fN=;O?WeV!nk{28G zS_4ENi;_hS9!EU`gy{A7kKbXO0ho{%$>~rO)YZhn6{;|bt;qGVcCcz+xMIoGq=HGE zS}-KR+vxS0LN+J!N-E6BS;cTn4PMO#14o257Np|zHOr2P-KJI+R9Fb^yk)3j(*{f= zz>OF;z-KIf)2ey_8RAk+B@rrmG0d?<-mgBBo^na;M+5^9CRR|`EVd=l*Z_l(5;nlk znfftXYZmg*MN8#Ia1x>j#o^^SJ4YxUS!cCETMkks1+;Dn#pSMoW2YJ27eHOrqCDEOwL_uvxpTU^G)8pzfL;2%6DzY6c85`khrj#HsHJ~waP^` z{R7E}!(8BO2248Ts|+n+1r8un4unB)17etSC2iDh@T4@l0|4kGP5Nz_L-h_zh> zD6NRC?dK>9E&`v|-j6}smkRvdo}Or+zK6z_#`7iho`uVHI)KLGa&r@W`y5tVQ2hw2dq*i5L>V#4{lScGP&|9`Os*)zkAAm3;vf!?k} zjoLKpUUQws=qB&N{c%JO0{zy4c~*%6VL@#vOkq3A;+ljg12}lne3W}+<;aIq0`F;uFw>-kLmtvM4` zE;7Z|1HEDr5;uwzal@8tF~Y=f2`O?zj_3L5xS``+kkSV%ZJ?))zGM94I=OE2KlQWjA^dM)iiNsNMBRQt`r{K*46J(}m|%FfRvfLS4vuDVfN6r%|WqPhVJFG|+jvL22&OQpzB;*ZJ~(DlCF~wt@-p?&Yw&4#9-xs`tZ=k2A>)#l#9~QULdj zK11@FGs;zZCjuM=)hre^LqsZQe5jqtaq=NAG=hhrkS7|bhh23BkzY~ZF;Sa|&P@A` zMtzZDy{4|BBok9;`>}?eqAsfZJz>gJD6v`-mr-q|BKGgSfDs+}>VK<7+FObe^f?I6aci@lRt zRsv(oQDJ;Xb_m*_IVP%CeRhu74huw1un272<{FvqQ$-vX2-o^AVUgpSLbN~=J;z?K zf|5Z={nwf*c^* zC$Ld8kBb>0EgddiNsO|kmGwnOju^P~IAQk2wsUZs;-Y49QtE<(4{Wr{C`+zER@qs= z$9w5U0FNQ#Obmiul|-}zcq?WPt`Z-?o|&;`TRDEDHr7 znsrm{guNz#j@rOvb>`YN0VEaY8yNo?l~Dw~A?^?MfDGQpl*X)Q7n=sajkx9E$0{Kl z(S*MF$kn*yyh{`Uf-cou!8o#`R-tq?9J?6}rq9v`J54FfwH)N(iBj@$S_?=+1M8LP zDmTuO??LxrwKH#b1xS9N^BOWEEmh7FBe%9G*#*i_o0=vD)+gLKQ#y|jA9GkD#x~ap ze`h_XuaN_$PstRGe7O{E$U?ilIwo3$v$3p_=MkBmm?6e`GApJq#03|#%3}DA$>)5Z zVKQ!1;>lb?&beoSNZO4S-pS3&H)tQ^%2YW_Jf_emBK5JinI10jzGkq!QC)GP7&kaP zQhHpUTJEsknSg+*&wefrzhWF;qaCLjpzK;1+lo8u3|wb0?zB_*%6i}*cA#(Jl4haS zF^FZRRzal=Q>(@ik|zL&ghAQu`J~**H#O2%h{oSFzHoJG>%x)js`BMY;1Bw!C^MJ{ zWVjS4bA-e^Qwg#|yeOD!Qb5Q3&Kg>pC({Sr#vqUbAaAnNHD+tMA>^0g`MjydCKOLm z*ulqP7qk#(Bqgn<5OfCZ5U2$+E~@z&T$~b#avBlXU^O$Yis!X-z!EyxYv&zJsQGtVkjJz%B+4N92-9 z>`u1fq@8NDNrYXHs)+eoHb_ znCYf)7tl}EWR{rDMzm5Q+f(`GcJMgBKNHBc8BDZrL;*i%qjhz+3Nd#bOi?I%qR8_( zr-5Gq|H>8HQrDV77Cz7=oIhihCZ!;xls45 z)vDbHED?0Y4(aC9IM6cGTkJogX6!~!pw)Lk^dc)q2@-+mkIFOf68qBmDr3^HIylK8 zn^hc0f)>p3X|#e1-9ew>9g(w(`_sJNITk2rU&JBF%CzAzA=*u!+ZakhiOQ!h)0xt9 z@sL+RN0Y6juCv8n3Ujep!5;U`4vBzv87Xo~8Xt2eluG(8&MEbQv#l>F5^CUlSZ{}C zqOBM=j%g^Nx+(NyR+k%Vpk&fkJ5U9`xVooLjx;Zp>szpqD0Ok_?S>7xFkzpVJY)_9 zRYsLa#Yg#=-*bmxrR?Y4?lCL(vW!;rLrHnkM~}xqCab{2RDL*hB^hxCSG=ZU2PFwq z$hS_li+IFFiTDR2a2Rn0TTG&iK1wTuBHc8oRz~mfZF7uV{5)g*rW!c9kh?CA>PZOo z;#yyGU#YP(s0dgGE{;uxoLMB>YA)zh4Nh4Aj5rcz8)0$Fl8g}}=Q2=t-k6Y@ubpSd z%;HYj>N|*qH1f0OZg&`KrrLv(6U3ZbKqhi0T8`u~#-VSD{7y4wC0jNk4j%m~Kd|nStnj^jh z)D}KaaYlNLo%SgbKJ%bl9VIqx?* zTgFJ^B|4RiI4JuXv)nu70D3muZb}wbJK&LoHb;Co0CQmZ}f(FA0%T7U#%d9arn(h0}vh%N&-v4b~YUS4J}Le~SSIN7Zl ziaz$M70ol&8^@$3 zEFH!wYV72|dy>QugSj>iYQYIH^b|C$m+#0CFRS6W*lKqmS^y!1UCC9|Jq2EqwJ~6M zL|gDP!EXhJBRG#a>%pDrASSvR>ZzY#L;}hY#>BywIErE}tfDl#Op(vFJPa-L>y^NMsYpJ=1Rs0=dy_^UV}Cyqs&3?AQ)13MMXnD>3#+AU?y z*!AV9-IZbd;CO?$ z2?AmdI7(O{ehF%g>fEsBGCyJ2T$dP6b5t`CQEc{<*Fy$zjSqBDv6Q~ZiV8Ecr(~7- zQFaW*A^S=T+t?i{4l@n^k?oI3?U;5w#IOG`I*Pi0a-kfN(=Y%hK3Nj;&+3B73_{D% zsEyKXcT!6w_5bgwWDU*4ur7S1SVyo(_17y!%zalyE%Z^Fh!_m_d&Ws)~I-8hS6HqSGKlry}_ zuqeN@PQvDRoV8{jM}*&KA>ZRac6(sR1$%;_?U;j)lfufui{SV~+xkYvIwpHez) zV!KA%&Cvb3G{uJfmYxV3F?&NoX~@8Bucd808>&OBj%(?0mLC=~$qUG!^nl-up8NgI z3(OE1^vRj;kV{p>612qdqZ_tAr%fEDi)x$YW=Z|teZA<6+1BJNGfttav3gvSGY5>U zR#(w(pjHACP=Yk$ON~%DMaw_~X~jw-MhgPS7s=w(C8w`6Far`hwKxZtuivsbuH6El z6W3pJsL5e;&QvkM$x8UcRT|`*JNT9+`!d&TiU&RmQ6vvXgHyh~MyDc9s-I}xiD)#e z8x$sK>$Ls;<++I^^YgB`Hqi;zZNyxOpkTgiHMPsAWC^c_O0wUVIO6Ns3L0LFx(-}0nov4Q$6!w~h*+@jU5(z_#-HDUW;%MwvV z>S2H|pa{h&R%r)vfW4$Q@ZJa!TVC82mYX0&`b2kg><(T9#y^4T6y+kEYT%sE4sh}l z&fvnS-gL*vi51M}!_h9t1VnfVRcw}!Qh26=c2a|MtQT3*-u~z}i_SrCtq3i5EQ_A| zCe+fDk}XCd#W}+(JgGtWijvxSp5Rt(A@!RD4M1(!=>h@ugt}e&u(918xkB0%B}4|( zO}{l9BXESTS&K@6)*-IKlfS_{Ewlf^YYM7!La;a@RHuN5phTzzG_OLVL%DB`x zWM8mrfpX~$*R3kf74hX0oG?(frC$HR;wGk0duntE&mZDU;~{b%<;NXlVaxoYOFfAf z#Sclja%utk1A`Aglu7vKqQKXW#P&8aKH*o6J;7^aB@@6~PpvT zGKDbHy?k%1w=45yYep!CoTyZQZX<>USq4xQP^nQm;O_%lDL1n9df|~nMQsQQ;@E8d zSXKq=im*~!2tcW=Q&i$`iFP$APlwE0g&5MLElWFssiZXi-~#N2aucyYtb|exZLrT$ z6Dn00oW##L{9n&UqyUd&cf6cP3g8uFfVbp~Y>uhJ?WF|hPmC)-rL-f?ZNIiVo{#`T ziK;PSz$qxm)lU(e!?4BP7`)f0>>khZ$7invuTK9!=S+!=~?C@OqCB59Cm)_s?w8H*HtL#ZDhJ5VUa^s3hp_G^kFOJRNGm3z!x*J#5K*`r=E4KA%s* zeoHFiqX0q?2YtivRhZIHB|_Wi%*WEqv>sRiulQi%!k7Csiq5v0?mPp3)2xR*W&Sv)P6r3*JeLH~SN3xqjL(?K-81H`eF7e?flxLN zYA(DIUR-m&awK25!!!ud0tv+l=SnW3cGywoIzJbeEn~}mWy{pE9w3$3S{UAhLfL~Y zdeH>8DS^=N-@qt2Uk(rdwmPtjH=pryCM_vh#dU{Z46E zJ=0fQ%nS6UltD-nFcq?GB#Exp%7e|Ksp%W%c>V+c6FjsL%|Im=+toh>CmCT zVJ^l&ZFN$+-wwqG`W~_;`ckzdBUkr^P>4$XAs!zn^qb&$zT&7<+-r*td54;ujFubG zmK^P7(zrXt#h8sRh0g4XRzp(o*uiQ(#JY>?Q@J`L;8kpa*IQjyK2xN!#d z@vUNmRFXDG$DCQ_ojjmk$HN7*OnwynaAO0i&L)DNE>>$>Rjp4-8jJz^aj88iV7)B0 z1uGDWVyDtm?<4{Zn+>7th=zztHI@Q#SujG~zNSWPFcldhZ-q>yZ$^qkD+TaT!^SLw z&m$v)xke^FsC)(c0UECmJ)1-MN4+0Zo)W(bW%g)2bH>>*?v~oj}KkhJ=$PnG;)e#A4bbRT1$RtQ@4;`)M33SZ~9=iSt#R z%^S0O_$-3SS`(x}%h_q^q@>^KE)@#PsJRybDBOEdB-J_H?8s6f)_An{1Rx7BfkT90{Q~G{yzw zc7_ESzG!L6!%V^VF~~TZV}524d_JZV@Q)n0Ga^lzQC#@dp~gp!bg2pp67O07h-zFH zWl^*{bKS_I>p^MQxj!7Wy{*wQtE;hcpBL&b_UcaL|k% z;bPrV8j_dI!cw&dA>r+s6D7piF$2yeDMGA!SUzNuMYb(6OrR*NOC1FutSBvuK$G~I z`4ssj@&v78Q<4b^L7Qip2;i(5cWm$Tu_xxOg^H=LZ9jI_S&R>H!cuSotiy8m!^+*I zl7kWbOKZSTNQCR`5IbDN`FH-viMhzTot1vK{ z!JRDVYf83KM0(E}ggz;-{KWU3z-RU_!rjf$&t&}&_Ay6e@c^struh^~`q4>-sC9WseRUfm{vh#U=0b)e?W{v|AOM8Jsr7zgdXM*Y=+q%jA4=-R*gPOr)ofv;HMXH zj#nzPfxxwJHlZLJ5a2k!@R2wg04NU%mLl3l;@k)YiRXw=R2*BFNa)}J-L_Vt=cpdY zE~xS`h3Lp?yKc1n9)xb_+BmL3*J9(_K;Ht20HQ(}&JV#!4?OZ=o(HH4AAklyJ;(Tv zx5rutfFz;Wt&t?;F)z5oD<2_mvV0JMP_VUax*M3RVkV<7-)W2D#Z&M_*Ge|jQN9o( z$6gwmZUT`sG^2>XiR#B+@^zdPLhyXd{RPN2YT1MmSm>t#{503;_)DT7&gkDy(WtYK zz~*oSt1FIXZ3~>clsuA0CkVq+uyq_h^_HB6qIJ*{wP5mPOjdX*B6u6}^x;+;rrJwU zwKCN6BW{O40?kNYOgL2baCEs2DZKb-(etgEq2ihx z{R6VdRZwn-M|n9@82%`J*=;ee^296-Es!Kq6*76`=?Vd{z4nD9&efsm8!REt40S|G zP;!?5vY^)YRS!qUGj6`(s5E;RizkoSP*evwi%5#52)BntlA@NRfTTCl>>8+ARQP>` zkkF&{TX;5=ZH=}sg4Lsj3augD$Gkb`FZiFG`+Soqk2rb#nT6@69Mbwl;9S80b|4Su zH|9%aI0KBDO?Qcc*Nkg;fx#xT{_8O$_<}hhG2ZzEA`GCL;B-Y*bNkp7TGD_~7aQT_ zf>d`Fxj8V18*6Df2WEz1aeXu)HGkgXYbcxKS!hztdAWs)^ zoH39*b!P_%nsyf z2sA`EI7yBawD7Hs0lloq$#^mmkQrPbFRK&k^x`SAA>nWXGt-*8cFp9QjygL&-WlH$ zR!yAw<9uk{X;?>(#=nZAu(K3Ex0S@K(!>i2muy&vSq9Ewh&<gde#I~>>khyv^m0%vVz9k(Yf=#*T6NQX{1}T;niDXr>^8X; zAgok?hz!Q8y@7QO!@g;hm)ii#l%V_>1Mn`095z&|#_UQuZK+t3hI$HKTjoKP-;}8a zAxKm}@(YZYq-6{vzBQk8sB7Mr-WX9~m4G?bYvgJSO3vi`oI4VR52^|~&|R@6*YZje z$+(iX@VK*lbb64Cm<$e+n(!5%IwOgd#NN;W$ZCCI*^A!lRCVkMBS{e(Hk=AG>G@n!etNA%?P$HQ6;XbNha^@{rjP-+@T2dTA!B_1wU zS<}EVSuTq4lPG5B30#iW>{`@$fNLiu6g}73m?bD(G4JppDM)Se$IM+f6g!n^9NEef z^YsDXU8!%!@$jh3#dw}IIgJe-FsX)s*kqCZO=KR{8rbudZCK4VDdA{{=&0=tfUijQ zgxgI59pZGuK4y<|i#_K2FjK?8;*vBox*f8ogr!Uy5UyeMmVU*2A*<{-w-r`jpTZ@e zRTGCY%skJ$!L?YpN;rkb{!{Vb#oVa1Ur>gH$_*(-k)YnTHHsFPINx}EEMQj-)WHPx zj720?aCZ5!30(B(L1!R!bg8RBW?<_<#-KUJJ~*XG$iP9zRV2b;$<0R9x5Z@wkZ@;G z=~L2JcR1268?dWfSQy`8#Htl!w%9>X*W9?Nwy717eBt3{8x15(fivADTU}5UmiB0y zC|DkP2mdb%t(;4#EU;qY$G>ZAZ&sh<~6(;Y7Yox89p{(0);AlL4{?U4aWRy z#JsB1Q4^6B=nN|4ii@Shsj4P=z$vyX^vVs)k5;0zI;iR)7(()Vpw37_Z0277akO^i zW1CIINJx-m7nB<*{4G16Y+9olj36)}F!ip~WH4n>S$XR&TX+K7(U}*Z7>~qxyj*Dbi9c}R>cj%IS<;3k4BJU;IJ4OfQ z0DXo*EK~Thl-e$mLu`6SPDbvj64k?Ul6t`4o)Z;}m{q(qa|lXnGH+_&unil`BPb*? z$CnzbKOy@@G>V6;fE0+H`g~L3pX{~_q=pNdC`3Ut?PL@mP=eh}j1OBPn?<#^(`D{j ziTRpXS;gr{m|Pl01=wvuBx3IQUmL9>%8eX@l#F1za9fgDP01sE*l9?E01R|EJ*9*P zZl;7pu#B^0{LlnD!knCFln2*dgr5Tc&VsgakS7e#US-&h3Wa-Tt3j-9Vhboj;g7CY z#0@Jr&)Ocu+(?tf)k2J8)-|FV>xBKr-Bb-LFgc-K=sA-(z81=NkVZr~b@mHciAIX^ zG%(p)0zAdS@Co=K#3q;5*zdT-w5V-|jPc|H1K{lO4dR~A9;*v3JA&|T91^_>RY+CD zRP-^4cHC9KSt2LsnHNSu!^sogJI1&Mowm8dM z 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 z

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 literal 0 HcmV?d00001 diff --git a/audiosink.xml b/audiosink.xml new file mode 100644 index 0000000..dc20f05 --- /dev/null +++ b/audiosink.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/audiosrc.xml b/audiosrc.xml new file mode 100644 index 0000000..c5273b6 --- /dev/null +++ b/audiosrc.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + diff --git a/bluetooth-qt.pro b/bluetooth-qt.pro new file mode 100644 index 0000000..c8a3fbc --- /dev/null +++ b/bluetooth-qt.pro @@ -0,0 +1,8 @@ +!exists(bluemanager.h):system(qdbusxml2cpp -p bluemanager.h:bluemanager.cpp manager.xml) +!exists(blueadapter.h):system(qdbusxml2cpp -p blueadapter.h:blueadapter.cpp adapter.xml) +!exists(bluedevice.h):system(qdbusxml2cpp -p bluedevice.h:bluedevice.cpp -i devicetypes.h device.xml) +!exists(audiosink.h):system(qdbusxml2cpp -p audiosink.h:audiosink.cpp audiosink.xml) +!exists(audiosource.h):system(qdbusxml2cpp -p audiosource.h:audiosource.cpp audiosrc.xml) +!exists(headset.h):system(qdbusxml2cpp -p headset.h:headset.cpp headset.xml) +include(obex/obex.pri) + diff --git a/bluetooth-qt.pro.user b/bluetooth-qt.pro.user new file mode 100644 index 0000000..da080d4 --- /dev/null +++ b/bluetooth-qt.pro.user @@ -0,0 +1,181 @@ + + + + ProjectExplorer.Project.ActiveTarget + 0 + + + ProjectExplorer.Project.EditorSettings + + System + + + + ProjectExplorer.Project.Target.0 + + Desktop + Qt4ProjectManager.Target.DesktopTarget + 0 + 0 + + + qmake + QtProjectManager.QMakeBuildStep + + + + Make + Qt4ProjectManager.MakeStep + false + + + + 2 + + Make + Qt4ProjectManager.MakeStep + true + + clean + + + + 1 + false + + Qt in PATH Debug + Qt4ProjectManager.Qt4BuildConfiguration + 2 + /home/tripzero/src/bluetooth-qt-build-desktop + 2 + 0 + true + + + + qmake + QtProjectManager.QMakeBuildStep + + + + Make + Qt4ProjectManager.MakeStep + false + + + + 2 + + Make + Qt4ProjectManager.MakeStep + true + + clean + + + + 1 + false + + Qt in PATH Release + Qt4ProjectManager.Qt4BuildConfiguration + 0 + /home/tripzero/src/bluetooth-qt-build-desktop + 2 + 0 + true + + + + qmake + QtProjectManager.QMakeBuildStep + + + + Make + Qt4ProjectManager.MakeStep + false + + + + 2 + + Make + Qt4ProjectManager.MakeStep + true + + clean + + + + 1 + false + + 4.6.0 Debug + Qt4ProjectManager.Qt4BuildConfiguration + 2 + /home/tripzero/src/bluetooth-qt-build-desktop + 3 + 0 + true + + + + qmake + QtProjectManager.QMakeBuildStep + + + + Make + Qt4ProjectManager.MakeStep + false + + + + 2 + + Make + Qt4ProjectManager.MakeStep + true + + clean + + + + 1 + false + + 4.6.0 Release + Qt4ProjectManager.Qt4BuildConfiguration + 0 + /home/tripzero/src/bluetooth-qt-build-desktop + 3 + 0 + true + + 4 + + bluetooth-qt + Qt4ProjectManager.Qt4RunConfiguration + 2 + + bluetooth-qt.pro + false + false + + false + false + + + 1 + + + + ProjectExplorer.Project.TargetCount + 1 + + + ProjectExplorer.Project.Updater.FileVersion + 4 + + diff --git a/bluetoothbaseagent.cpp b/bluetoothbaseagent.cpp new file mode 100644 index 0000000..699e2a9 --- /dev/null +++ b/bluetoothbaseagent.cpp @@ -0,0 +1,87 @@ +#include "bluetoothbaseagent.h" + +#include "agentadaptor.h" +#include "bluemanager.h" +#include "blueadapter.h" +#include + +BluetoothBaseAgent::BluetoothBaseAgent(QString path, QObject *parent):QObject(parent),requestAccepted(false) +{ + new AgentAdaptor(this); + QDBusConnection::systemBus().registerObject(path,this); + + OrgBluezManagerInterface manager( + "org.bluez", + "/", QDBusConnection::systemBus()); + + QDBusObjectPath adapterpath = manager.DefaultAdapter(); + + OrgBluezAdapterInterface adapter( + "org.bluez", + adapterpath.path(), + QDBusConnection::systemBus()); + + adapter.RegisterAgent(QDBusObjectPath("/pairing/agent"),""); + + qDebug()<<"last error: "< +#include +#include "bluedevice.h" + +class BluetoothBaseAgent: public QObject, public QDBusContext +{ + Q_OBJECT +public: + BluetoothBaseAgent(QString path="/pairing/agent", QObject *parent=0); +public slots: + virtual void authorize(OrgBluezDeviceInterface &device, QString); + virtual void cancel() + { + sendErrorReply("org.bluez.Error.Canceled","The request was canceled"); + } + virtual void confirmModeChange(QString); + virtual void displayPasskey(OrgBluezDeviceInterface &device, uint key); + virtual void release(); + virtual void requestConfirmation(OrgBluezDeviceInterface &device, uint key); + virtual uint requestPasskey(OrgBluezDeviceInterface &device); + virtual QString requestPidCode(OrgBluezDeviceInterface &device); + + virtual void reject() { sendErrorReply("org.bluez.Error.Rejected", "The request was rejected"); } + + virtual void accept(); + virtual void doReject(); +private: + bool requestAccepted; +}; + +#endif // BLUETOOTHBASEAGENT_H diff --git a/btprofiles.h b/btprofiles.h new file mode 100644 index 0000000..84e4b9a --- /dev/null +++ b/btprofiles.h @@ -0,0 +1,31 @@ +/* -*- Mode: C++ -*- + * + * meego handset bluetooth + * Copyright © 2010, Intel Corporation. + * + * This program is licensed under the terms and conditions of the + * Apache License, version 2.0. The full text of the Apache License is at + * http://www.apache.org/licenses/LICENSE-2.0 + * + */ + +#ifndef BTPROFILES_H +#define BTPROFILES_H + +namespace BluetoothProfiles +{ + +const char a2sink[] = "0000110b-0000-1000-8000-00805f9b34fb"; +const char a2src[] = "0000110a-0000-1000-8000-00805f9b34fb"; +const char syncml[] = "00005601-0000-1000-8000-0002ee000001"; +const char hf[] = "0000111e-0000-1000-8000-00805f9b34fb"; +const char hfag[] = "0000111f-0000-1000-8000-00805f9b34fb"; +const char hs[] = "00001108-0000-1000-8000-00805f9b34fb"; +const char hsag[] = "00001112-0000-1000-8000-00805f9b34fb"; +const char opush[] = "00001105-0000-1000-8000-00805f9b34fb"; +const char ftp[] = "00001106-0000-1000-8000-00805f9b34fb"; +const char panu[] = "00001115-0000-1000-8000-00805f9b34fb"; +const char spp[] = "00001101-0000-1000-8000-00805f9b34fb"; + +} +#endif // BTPROFILES_H diff --git a/device.xml b/device.xml new file mode 100644 index 0000000..60658d0 --- /dev/null +++ b/device.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/headset.xml b/headset.xml new file mode 100644 index 0000000..c12573a --- /dev/null +++ b/headset.xml @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/manager.xml b/manager.xml new file mode 100644 index 0000000..b9bb111 --- /dev/null +++ b/manager.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/nearbydevicesmodel.cpp b/nearbydevicesmodel.cpp new file mode 100644 index 0000000..c3b3a73 --- /dev/null +++ b/nearbydevicesmodel.cpp @@ -0,0 +1,158 @@ +#include "nearbydevicesmodel.h" +#include "bluetoothagent.h" + +NearbyDevicesModel::NearbyDevicesModel(QObject *parent) : + QAbstractListModel(parent), adapter(NULL), agent(NULL) +{ + manager = new OrgBluezManagerInterface( + "org.bluez", + "/", QDBusConnection::systemBus(), this); + + connect(manager,SIGNAL(AdapterAdded(QDBusObjectPath)),this,SLOT(adapterAdded(QDBusObjectPath))); + connect(manager,SIGNAL(AdapterRemoved(QDBusObjectPath)),this,SLOT(adapterRemoved(QDBusObjectPath))); + adapterAdded(QDBusObjectPath()); +} + + +int NearbyDevicesModel::rowCount(const QModelIndex &parent) const +{ + Q_UNUSED(parent); + return devicepathlist.size(); +} + +QVariant NearbyDevicesModel::data(const QModelIndex &index, int role) const +{ + if (role == Qt::DisplayRole) + { + QString rowData; + if(index.row() < devicepathlist.size()) + { + rowData = deviceAliasMap[devicepathlist[index.row()]]; + } + return QVariant(rowData); + } + + return QVariant(); +} + +void NearbyDevicesModel::pair(QString hwaddy) +{ + qDebug("attempting to pair..."); + OrgBluezManagerInterface manager( + "org.bluez", + "/", QDBusConnection::systemBus()); + + QDBusObjectPath adapterpath = manager.DefaultAdapter(); + + OrgBluezAdapterInterface adapter( + "org.bluez", + adapterpath.path(), + QDBusConnection::systemBus()); + + agent = new AsyncAgent("/temp/agent",this); + + //QDBusPendingCall response = + adapter.CreatePairedDevice(hwaddy, + QDBusObjectPath("/temp/agent"),""); + + //qDebug()<<"new object created: "<StartDiscovery(); +} + +void NearbyDevicesModel::removeAll(bool) +{ + for(int i=0;ireplyRequestConfirmation(confirmed); +} + +void NearbyDevicesModel::replyPasskey(uint passkey) +{ + if(agent) agent->replyPasskey(passkey); +} + +void NearbyDevicesModel::replyRequestPidCode(QString pidCode) +{ + if(agent) agent->replyRequestPidCode(pidCode); +} + +void NearbyDevicesModel::deviceCreated(QString hwaddy, QVariantMap properties) +{ + bool found = false; + foreach(QString path, devicepathlist) + { + if(path == hwaddy) + { + found=true; + break; + } + } + + if(!found) + { + beginInsertRows(QModelIndex(), 0, devicepathlist.size()); + devicepathlist.append(hwaddy); + deviceAliasMap[hwaddy] = properties["Alias"].toString(); + emit nearbyDeviceFound(devicepathlist.indexOf(hwaddy)); + endInsertRows(); + } +} + +void NearbyDevicesModel::deviceRemoved(QString hwaddy) +{ + int i=-1; + if((i = devicepathlist.indexOf(hwaddy)) >=0) + { + beginRemoveRows(QModelIndex(),i,i+1); + devicepathlist.removeAt(i); + emit nearbyDeviceRemoved(i); + endInsertRows(); + } + +} + +void NearbyDevicesModel::adapterAdded(QDBusObjectPath path) +{ + if(adapter && adapter->path() == path.path()) return; + + QDBusObjectPath adapterpath = manager->DefaultAdapter(); + + if(adapterpath.path() == "") + return; + + adapter = new OrgBluezAdapterInterface( + "org.bluez", + adapterpath.path(), + QDBusConnection::systemBus(), this); + + connect(adapter, + SIGNAL(DeviceFound(QString, QVariantMap)), + this, + SLOT(deviceCreated(QString, QVariantMap))); + connect(adapter, + SIGNAL(DeviceDisappeared(QString)), + this, + SLOT(deviceRemoved(QString))); +} + +void NearbyDevicesModel::adapterRemoved(QDBusObjectPath) +{ + QDBusObjectPath adapterpath = manager->DefaultAdapter(); + + if(adapterpath.path() == "") + { + removeAll(true); + if(adapter) delete adapter; + return; + } +} diff --git a/nearbydevicesmodel.h b/nearbydevicesmodel.h new file mode 100644 index 0000000..c82f474 --- /dev/null +++ b/nearbydevicesmodel.h @@ -0,0 +1,57 @@ +#ifndef NEARBYDEVICESMODEL_H +#define NEARBYDEVICESMODEL_H + +#include +#include +#include + +#include "bluemanager.h" +#include "blueadapter.h" +#include "asyncagent.h" + +class NearbyDevicesModel : public QAbstractListModel +{ + Q_OBJECT + +public: + NearbyDevicesModel(QObject *parent = 0); + +public slots: + + int columnCount(const QModelIndex &) const { return 1;} + int rowCount(const QModelIndex &parent = QModelIndex()) const; + QVariant data(const QModelIndex &index, int role) const; + + QString hwAddress(int index) { return devicepathlist[index]; } + QString alias(int index){ return deviceAliasMap[devicepathlist[index]]; } + void pair(QString hwaddy); + void discover(); + void removeAll(bool); + + void replyRequestConfirmation(bool confirmed); + void replyPasskey(uint passkey); + void replyRequestPidCode(QString pidCode); + +private slots: + void adapterAdded(QDBusObjectPath); + void adapterRemoved(QDBusObjectPath); + void deviceCreated(QString hwaddy, QVariantMap properties); + void deviceRemoved(QString hwaddy); + +signals: + void requestConfirmation(QString device, uint code); + void requestPasskey(QString device); + void requestPidCode(QString device); + + void nearbyDeviceFound(int index); + void nearbyDeviceRemoved(int index); + +private: + QList devicepathlist; + QMap deviceAliasMap; + OrgBluezManagerInterface *manager; + OrgBluezAdapterInterface *adapter; + AsyncAgent* agent; +}; + +#endif // NEARBYDEVICESMODEL_H diff --git a/obex/agent.xml b/obex/agent.xml new file mode 100644 index 0000000..be0606b --- /dev/null +++ b/obex/agent.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + diff --git a/obex/client.xml b/obex/client.xml new file mode 100644 index 0000000..0520bbf --- /dev/null +++ b/obex/client.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/obex/obex.pri b/obex/obex.pri new file mode 100644 index 0000000..b5bb507 --- /dev/null +++ b/obex/obex.pri @@ -0,0 +1,14 @@ +!exists(obexagent.h):system(qdbusxml2cpp -c ObexAgentAdaptor -a obexagent.h:obexagent.cpp agent.xml) +!exists(obexclient.h):system(qdbusxml2cpp -p obexclient.h:obexclient.cpp client.xml) +!exists(obexsession.h):system(qdbusxml2cpp -p obexsession.h:obexsession.cpp -i types.h session.xml) +!exists(obextransfer.h):system(qdbusxml2cpp -p obextransfer.h:obextransfer.cpp transfer.xml) +SOURCES += obex/obexagent.cpp \ + obex/obexclient.cpp \ + obex/obexsession.cpp \ + obex/obextransfer.cpp \ + obex/obexftp.cpp +HEADERS += obex/obexagent.h \ + obex/obexclient.h \ + obex/obexsession.h \ + obex/obextransfer.h \ + obex/obexftp.h diff --git a/obex/obexftp.cpp b/obex/obexftp.cpp new file mode 100644 index 0000000..6fce62c --- /dev/null +++ b/obex/obexftp.cpp @@ -0,0 +1,131 @@ +#include "obexftp.h" + +#include + +ObexFtp::ObexFtp(QString device, QObject *parent) : + QObject(parent), m_device(device), m_session(0), m_ftp(0), agent(0) +{ + m_client = new OrgOpenobexClientInterface("org.openobex.client", "/", QDBusConnection::sessionBus(), this); + +} + +bool ObexFtp::isConnected() +{ + if(!m_session) return false; + + QVariantMap props = m_session->GetProperties(); + foreach(QString key, props.keys()) + { + qDebug()<<"session property key: "<CreateSession(session); + + QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(async, this); + + QObject::connect(watcher, SIGNAL(finished(QDBusPendingCallWatcher*)), + this, SLOT(finishedConnecting(QDBusPendingCallWatcher*))); + +} + +void ObexFtp::disconnect() +{ + if(isConnected()) + m_session->Close(); +} + +void ObexFtp::cancel() +{ + +} + +void ObexFtp::transferFile(QString localfile, QString remotefile) +{ + if(!isConnected()) + { + qDebug()<<"must be connected first."; + return; + } + + QDBusPendingCall async = m_ftp->PutFile(localfile,remotefile); + QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(async, this); + + QObject::connect(watcher, SIGNAL(finished(QDBusPendingCallWatcher*)), + this, SLOT(finishedTransfer(QDBusPendingCallWatcher*))); +} + +void ObexFtp::finishedTransfer(QDBusPendingCallWatcher* call) +{ + QDBusPendingReply reply = *call; + + if(!reply.isValid()) + { + QDBusError errors = reply.error(); + emit error(errors.name()+" : "+errors.message()); + } +} + +void ObexFtp::finishedConnecting(QDBusPendingCallWatcher* call) +{ + QDBusPendingReply reply = *call; + + if(!reply.isValid()) + { + QDBusError errors = reply.error(); + emit error(errors.name()+" : "+errors.message()); + } + + QDBusObjectPath sessionPath = reply.value(); + + qDebug()<< sessionPath.path(); + + m_session = new OrgOpenobexSessionInterface("org.openobex.client", sessionPath.path(), QDBusConnection::sessionBus()); + + if(agent) delete agent; + agent = new ObexAgentAdaptor(this); + + QDBusConnection::sessionBus().registerObject(sessionPath.path(), agent); + m_session->AssignAgent(sessionPath); + + if(m_ftp) m_ftp->deleteLater(); + + m_ftp = new OrgOpenobexFileTransferInterface("org.openobex.client", + sessionPath.path(),QDBusConnection::sessionBus(),this); + + emit connected(); +} + +void ObexFtp::Complete(const QDBusObjectPath &path) +{ + emit transferComplete(); +} + +void ObexFtp::Error(const QDBusObjectPath &path, const QString &errors) +{ + emit error(path.path()+" : "+errors); +} + +void ObexFtp::Progress(const QDBusObjectPath &path, qulonglong transferred) +{ + OrgOpenobexTransferInterface transfer("org.openobex.client",path.path(),QDBusConnection::sessionBus()); + + QVariantMap props = transfer.GetProperties(); + + emit transferProgress(transferred, props["Size"].toULongLong()); +} + +void ObexFtp::Release() +{ + ///FIXME: not sure what to do here +} diff --git a/obex/obexftp.h b/obex/obexftp.h new file mode 100644 index 0000000..bba46e9 --- /dev/null +++ b/obex/obexftp.h @@ -0,0 +1,61 @@ +#ifndef OBEXFTP_H +#define OBEXFTP_H + +#include +#include "obextransfer.h" +#include "obexsession.h" +#include "obexclient.h" +#include "obexagent.h" + +class ObexFtp : public QObject +{ +Q_OBJECT +public: + + enum State + { + Disconnected = 0, + Connecting, + Connected, + Busy + }; + + explicit ObexFtp(QString device, QObject *parent = 0); + + bool isConnected(); + +public slots: + + void connect(); + void disconnect(); + void cancel(); + + void transferFile(QString localfile, QString remotefile); + +private slots: + void finishedTransfer(QDBusPendingCallWatcher*); + void finishedConnecting(QDBusPendingCallWatcher*); + + ///for the agent adaptor: + void Complete(const QDBusObjectPath &path); + void Error(const QDBusObjectPath &path, const QString &error); + void Progress(const QDBusObjectPath &path, qulonglong transferred); + void Release(); + + +signals: + void transferProgress(quint64 done, quint64 total); + void transferComplete(); + void error(QString); + void connected(); + +private: + QString m_device; + OrgOpenobexSessionInterface* m_session; + OrgOpenobexFileTransferInterface* m_ftp; + OrgOpenobexClientInterface* m_client; + ObexAgentAdaptor* agent; + +}; + +#endif // OBEXFTP_H diff --git a/obex/session.xml b/obex/session.xml new file mode 100644 index 0000000..596f152 --- /dev/null +++ b/obex/session.xml @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/obex/transfer.xml b/obex/transfer.xml new file mode 100644 index 0000000..d1b1235 --- /dev/null +++ b/obex/transfer.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + diff --git a/obex/types.h b/obex/types.h new file mode 100644 index 0000000..e6517a1 --- /dev/null +++ b/obex/types.h @@ -0,0 +1,11 @@ +#ifndef _OBEX_TYPES_H_ +#define _OBEX_TYPES_H_ + +#include +#include +#include + +typedef QList QVariantMapList; +Q_DECLARE_METATYPE(QVariantMapList) + +#endif -- 2.7.4