类型: INTEGER
*/ public static final String DATA1 = "data1"; + + /** + * 隐私空间ID,用于标识便签所属的隐私空间 + *类型: TEXT
+ */ + public static final String PRIVACY_SPACE_ID = "privacy_space_id"; } /** diff --git a/src/main/java/net/micode/notes/data/NotesDatabaseHelper.java b/src/main/java/net/micode/notes/data/NotesDatabaseHelper.java index 39bf475..cb6e34e 100644 --- a/src/main/java/net/micode/notes/data/NotesDatabaseHelper.java +++ b/src/main/java/net/micode/notes/data/NotesDatabaseHelper.java @@ -36,7 +36,7 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { private static final String DB_NAME = "note.db"; // 数据库版本号 - private static final int DB_VERSION = 10; + private static final int DB_VERSION = 11; // 数据库表名定义 public interface TABLE { @@ -96,7 +96,8 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { NoteColumns.IS_LOCKED + " INTEGER NOT NULL DEFAULT 0," + NoteColumns.LOCK_PASSWORD + " TEXT NOT NULL DEFAULT ''," + NoteColumns.TAGS + " TEXT NOT NULL DEFAULT ''," + - NoteColumns.DATA1 + " INTEGER NOT NULL DEFAULT 0" + + NoteColumns.DATA1 + " INTEGER NOT NULL DEFAULT 0," + + NoteColumns.PRIVACY_SPACE_ID + " TEXT NOT NULL DEFAULT ''" + ")"; // 创建数据表的SQL语句 @@ -328,6 +329,12 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { values.put(NoteColumns.ID, Notes.ID_TRASH_FOLER); values.put(NoteColumns.TYPE, Notes.TYPE_SYSTEM); db.insert(TABLE.NOTE, null, values); + + // 创建隐私空间根文件夹:用于存储隐私空间 + values.clear(); + values.put(NoteColumns.ID, Notes.ID_PRIVACY_SPACE_FOLDER); + values.put(NoteColumns.TYPE, Notes.TYPE_SYSTEM); + db.insert(TABLE.NOTE, null, values); } /** @@ -448,6 +455,11 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { upgradeToV10(db); oldVersion++; } + + if (oldVersion == 10) { + upgradeToV11(db); + oldVersion++; + } if (reCreateTriggers) { reCreateNoteTableTriggers(db); @@ -580,4 +592,20 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { db.execSQL("ALTER TABLE " + TABLE.NOTE + " ADD COLUMN " + NoteColumns.DATA1 + " INTEGER NOT NULL DEFAULT 0"); } + + /** + * 将数据库从v10升级到v11 + * 此版本升级添加了PRIVACY_SPACE_ID字段,用于存储便签所属的隐私空间ID + * @param db SQLite数据库实例 + */ + private void upgradeToV11(SQLiteDatabase db) { + // 为笔记表添加PRIVACY_SPACE_ID字段 + db.execSQL("ALTER TABLE " + TABLE.NOTE + " ADD COLUMN " + NoteColumns.PRIVACY_SPACE_ID + + " TEXT NOT NULL DEFAULT ''"); + // 添加隐私空间根文件夹 + ContentValues values = new ContentValues(); + values.put(NoteColumns.ID, Notes.ID_PRIVACY_SPACE_FOLDER); + values.put(NoteColumns.TYPE, Notes.TYPE_SYSTEM); + db.insert(TABLE.NOTE, null, values); + } } diff --git a/src/main/java/net/micode/notes/model/WorkingNote.java b/src/main/java/net/micode/notes/model/WorkingNote.java index 40bab6a..9eefdaa 100644 --- a/src/main/java/net/micode/notes/model/WorkingNote.java +++ b/src/main/java/net/micode/notes/model/WorkingNote.java @@ -132,6 +132,11 @@ public class WorkingNote { * 标题,便签的标题 */ private String mTitle; + + /** + * 隐私空间ID,用于标识便签所属的隐私空间 + */ + private String mPrivacySpaceId; /** * 数据投影数组,用于从数据库中查询便签数据 @@ -160,7 +165,8 @@ public class WorkingNote { NoteColumns.LOCK_PASSWORD, // 锁定密码 NoteColumns.PASSWORD_TYPE, // 密码类型 NoteColumns.NUMERIC_PASSWORD, // 数字密码 - NoteColumns.TITLE // 标题 + NoteColumns.TITLE, // 标题 + NoteColumns.PRIVACY_SPACE_ID // 隐私空间ID }; /** @@ -184,6 +190,7 @@ public class WorkingNote { private static final int NOTE_PASSWORD_TYPE_COLUMN = 8; // 密码类型列索引 private static final int NOTE_NUMERIC_PASSWORD_COLUMN = 9; // 数字密码列索引 private static final int NOTE_TITLE_COLUMN = 10; // 标题列索引 + private static final int NOTE_PRIVACY_SPACE_ID_COLUMN = 11; // 隐私空间ID列索引 /** * 构造方法,创建一个新的便签 @@ -198,6 +205,7 @@ public class WorkingNote { mNote = new Note(); // 创建便签对象 mNoteId = 0; // 新便签ID为0 mIsDeleted = false; // 初始化为未删除 + mPrivacySpaceId = ""; // 初始化为空 mMode = 0; // 初始化为普通模式 mWidgetType = Notes.TYPE_WIDGET_INVALIDE; // 初始化为无效小部件类型 } @@ -241,6 +249,10 @@ public class WorkingNote { mPasswordType = cursor.getString(NOTE_PASSWORD_TYPE_COLUMN); mNumericPassword = cursor.getString(NOTE_NUMERIC_PASSWORD_COLUMN); mTitle = cursor.getString(NOTE_TITLE_COLUMN); + mPrivacySpaceId = cursor.getString(NOTE_PRIVACY_SPACE_ID_COLUMN); + if (mPrivacySpaceId == null) { + mPrivacySpaceId = ""; + } } cursor.close(); } else { @@ -576,6 +588,25 @@ public class WorkingNote { return mWidgetType; } + /** + * 设置隐私空间ID + * @param privacySpaceId 隐私空间ID + */ + public void setPrivacySpaceId(String privacySpaceId) { + if (!TextUtils.equals(mPrivacySpaceId, privacySpaceId)) { + mPrivacySpaceId = privacySpaceId; + mNote.setNoteValue(NoteColumns.PRIVACY_SPACE_ID, privacySpaceId); + } + } + + /** + * 获取隐私空间ID + * @return 隐私空间ID + */ + public String getPrivacySpaceId() { + return mPrivacySpaceId; + } + /** * 设置便签锁定状态 * @param locked 是否锁定 diff --git a/src/main/java/net/micode/notes/tool/AIService.java b/src/main/java/net/micode/notes/tool/AIService.java new file mode 100644 index 0000000..c2a0e93 --- /dev/null +++ b/src/main/java/net/micode/notes/tool/AIService.java @@ -0,0 +1,409 @@ +package net.micode.notes.tool; + +import android.content.Context; +import android.graphics.Bitmap; +import android.util.Base64; +import android.util.Log; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.net.HttpURLConnection; +import java.net.URL; +import java.nio.charset.StandardCharsets; + +/** + * AIService - AI服务类 + *+ * 用于处理与AI相关的服务调用,如豆包API + *
+ */ +public class AIService { + private static final String TAG = "AIService"; + private static final String DOUBAO_API_URL = "https://ark.cn-beijing.volces.com/api/v3/responses"; + private static final String API_KEY = "ee5fb4c7-ea14-4481-ac23-4b0e82907850"; + private static final String SECRET_ACCESS_KEY = ""; + + /** + * 提取图片内容 + * @param bitmap 图片bitmap + * @param callback 回调接口 + */ + public static void extractImageContent(final Bitmap bitmap, final ExtractImageContentCallback callback) { + new Thread(new Runnable() { + @Override + public void run() { + try { + Log.d(TAG, "Starting image content extraction..."); + + // 检查bitmap + if (bitmap == null) { + Log.e(TAG, "Bitmap is null"); + callback.onFailure("Bitmap is null"); + return; + } + + Log.d(TAG, "Bitmap width: " + bitmap.getWidth() + ", height: " + bitmap.getHeight()); + + // 将bitmap转换为Base64 + Log.d(TAG, "Converting bitmap to base64..."); + String base64Image = bitmapToBase64(bitmap); + if (base64Image == null) { + Log.e(TAG, "Failed to convert bitmap to base64"); + callback.onFailure("Failed to convert bitmap to base64"); + return; + } + Log.d(TAG, "Base64 conversion successful, length: " + base64Image.length()); + + // 构建请求体 + Log.d(TAG, "Building request body..."); + JSONObject requestBody = new JSONObject(); + requestBody.put("model", "ep-20260127214554-frsrr"); // 新的推理接入点ID + + // 创建input数组 + org.json.JSONArray input = new org.json.JSONArray(); + + // 创建user input + JSONObject userInput = new JSONObject(); + userInput.put("role", "user"); + + // 创建content数组 + org.json.JSONArray contentArray = new org.json.JSONArray(); + + // 添加图片部分 + JSONObject imageContent = new JSONObject(); + imageContent.put("type", "input_image"); + imageContent.put("image_url", "data:image/jpeg;base64," + base64Image); + contentArray.put(imageContent); + + // 添加文本部分 + JSONObject textContent = new JSONObject(); + textContent.put("type", "input_text"); + textContent.put("text", "请提取这张图片中的所有文字和结构化数据,包括表格、列表等信息,清晰准确地格式化提取的内容。"); + contentArray.put(textContent); + + userInput.put("content", contentArray); + input.put(userInput); + + requestBody.put("input", input); + + // 发送请求 + String requestBodyString = requestBody.toString(); + Log.d(TAG, "Request body length: " + requestBodyString.length()); + Log.d(TAG, "Request body (first 1000 chars): " + (requestBodyString.length() > 1000 ? requestBodyString.substring(0, 1000) + "..." : requestBodyString)); + + Log.d(TAG, "Sending POST request to: " + DOUBAO_API_URL); + String response = sendPostRequest(DOUBAO_API_URL, requestBodyString); + + if (response == null) { + Log.e(TAG, "Failed to get response from Doubao API"); + callback.onFailure("Failed to get response from Doubao API"); + return; + } + + Log.d(TAG, "Got response from Doubao API, length: " + response.length()); + Log.d(TAG, "Response content: " + response); + + // 解析响应 + Log.d(TAG, "Parsing response..."); + JSONObject responseJson = new JSONObject(response); + + // 检查响应格式 + if (responseJson.has("output")) { + Log.d(TAG, "Response has output field"); + try { + // 尝试作为数组处理(新格式) + org.json.JSONArray outputArray = responseJson.getJSONArray("output"); + Log.d(TAG, "Output is an array, length: " + outputArray.length()); + + // 遍历数组找到包含文本的message + String extractedText = ""; + for (int i = 0; i < outputArray.length(); i++) { + JSONObject item = outputArray.getJSONObject(i); + Log.d(TAG, "Output item " + i + ": " + item.toString()); + + // 检查是否是message类型 + if (item.has("type") && "message".equals(item.getString("type"))) { + Log.d(TAG, "Found message item"); + if (item.has("content")) { + org.json.JSONArray messageContentArray = item.getJSONArray("content"); + for (int j = 0; j < messageContentArray.length(); j++) { + JSONObject contentItem = messageContentArray.getJSONObject(j); + if (contentItem.has("type") && "output_text".equals(contentItem.getString("type"))) { + extractedText = contentItem.getString("text"); + Log.d(TAG, "Got text from response: " + extractedText); + callback.onSuccess(extractedText); + return; + } + } + } + } + // 检查是否有role字段为assistant + else if (item.has("role") && "assistant".equals(item.getString("role"))) { + Log.d(TAG, "Found assistant item"); + if (item.has("content")) { + org.json.JSONArray assistantContentArray = item.getJSONArray("content"); + for (int j = 0; j < assistantContentArray.length(); j++) { + JSONObject contentItem = assistantContentArray.getJSONObject(j); + if (contentItem.has("type") && "output_text".equals(contentItem.getString("type"))) { + extractedText = contentItem.getString("text"); + Log.d(TAG, "Got text from assistant response: " + extractedText); + callback.onSuccess(extractedText); + return; + } + } + } + } + } + + // 如果没有找到文本,尝试其他方式 + if (extractedText.isEmpty()) { + Log.e(TAG, "No text found in output array"); + callback.onFailure("No text found in output array"); + } + } catch (JSONException e) { + // 如果不是数组,尝试作为对象处理(旧格式) + Log.d(TAG, "Output is not an array, trying as object: " + e.getMessage()); + try { + JSONObject outputObj = responseJson.getJSONObject("output"); + if (outputObj.has("text")) { + String content = outputObj.getString("text"); + Log.d(TAG, "Got text from response object: " + content); + callback.onSuccess(content); + } else if (outputObj.has("content")) { + String content = outputObj.getString("content"); + Log.d(TAG, "Got content from response object: " + content); + callback.onSuccess(content); + } else { + Log.e(TAG, "No text or content in response object: " + outputObj.toString()); + callback.onFailure("No text or content in response"); + } + } catch (JSONException ex) { + Log.e(TAG, "Error parsing output: " + ex.getMessage()); + callback.onFailure("Error parsing output: " + ex.getMessage()); + } + } + } else if (responseJson.has("choices")) { + // 兼容旧格式 + Log.d(TAG, "Response has choices field"); + org.json.JSONArray choices = responseJson.getJSONArray("choices"); + if (choices.length() > 0) { + JSONObject choice = choices.getJSONObject(0); + if (choice.has("message")) { + JSONObject message = choice.getJSONObject("message"); + if (message.has("content")) { + String content = message.getString("content"); + Log.d(TAG, "Got content from choices: " + content); + callback.onSuccess(content); + } else { + Log.e(TAG, "No content in message: " + message.toString()); + callback.onFailure("No content in message"); + } + } else { + Log.e(TAG, "No message in choice: " + choice.toString()); + callback.onFailure("No message in choice"); + } + } else { + Log.e(TAG, "No choices in response"); + callback.onFailure("No choices in response"); + } + } else if (responseJson.has("error")) { + // 处理错误响应 + Log.e(TAG, "API returned error: " + responseJson.toString()); + JSONObject error = responseJson.getJSONObject("error"); + String errorMessage = error.getString("message"); + callback.onFailure("API error: " + errorMessage); + } else { + Log.e(TAG, "Unexpected response format: " + responseJson.toString()); + callback.onFailure("Unexpected response format: " + responseJson.toString()); + } + + } catch (JSONException e) { + Log.e(TAG, "JSONException: " + e.getMessage()); + e.printStackTrace(); + callback.onFailure("JSON error: " + e.getMessage()); + } catch (Exception e) { + Log.e(TAG, "Exception: " + e.getMessage()); + e.printStackTrace(); + callback.onFailure("Error: " + e.getMessage()); + } + } + }).start(); + } + + /** + * 将Bitmap转换为Base64字符串 + * @param bitmap 图片bitmap + * @return Base64字符串 + */ + private static String bitmapToBase64(Bitmap bitmap) { + ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); + bitmap.compress(Bitmap.CompressFormat.JPEG, 80, byteArrayOutputStream); + byte[] byteArray = byteArrayOutputStream.toByteArray(); + try { + byteArrayOutputStream.close(); + } catch (IOException e) { + e.printStackTrace(); + } + return Base64.encodeToString(byteArray, Base64.NO_WRAP); + } + + /** + * 发送POST请求 + * @param urlString URL字符串 + * @param requestBody 请求体 + * @return 响应字符串 + */ + private static String sendPostRequest(String urlString, String requestBody) { + try { + Log.d(TAG, "Sending POST request to: " + urlString); + Log.d(TAG, "Request body length: " + requestBody.length()); + Log.d(TAG, "Request body (first 500 chars): " + (requestBody.length() > 500 ? requestBody.substring(0, 500) + "..." : requestBody)); + + URL url = new URL(urlString); + HttpURLConnection connection = (HttpURLConnection) url.openConnection(); + connection.setRequestMethod("POST"); + // 设置请求头 + connection.setRequestProperty("Content-Type", "application/json"); + connection.setRequestProperty("Authorization", "Bearer " + API_KEY); + connection.setRequestProperty("X-TT-LOGID", System.currentTimeMillis() + ""); + connection.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"); + connection.setDoOutput(true); + connection.setConnectTimeout(30000); // 设置连接超时为30秒 + connection.setReadTimeout(30000); // 设置读取超时为30秒 + + // 写入请求体 + Log.d(TAG, "Writing request body..."); + OutputStream outputStream = connection.getOutputStream(); + outputStream.write(requestBody.getBytes(StandardCharsets.UTF_8)); + outputStream.flush(); + outputStream.close(); + Log.d(TAG, "Request body written successfully"); + + // 读取响应 + Log.d(TAG, "Reading response..."); + int responseCode = connection.getResponseCode(); + Log.d(TAG, "HTTP response code: " + responseCode); + + // 读取所有响应头 + Log.d(TAG, "Response headers:"); + java.util.Maplw?P$st_AuHJN+g1I! zRJEcCP72bDLxF?pPV?M}%#-;N!=*cjf|pIm8ORfk49>r^IfVCL%U zslNs5=b9V3r# ?~fYpY~giP{PAFABj+biVCZa^&k^=!>mb zeWwj0#j=9cO*46PdWj(55jmb~J|0uXdn6F&pMh2mTxLq=(|R6x6t>;L3t%7#JVkok zlwP){OzI%CNh*c_WUvg {EKJ)X`uHn0GjSae)%OxUp z3yi~+6gnmUUo1*_&x1(Fl#XU;M0FittvW@iz~H0@NVh$on=pt;v!Ik(U&&KoFtchR zIyoy3T>VNiH%QZ57 =HHzV^o 9N1dYB(;S-k49md&h9~BYgjRk>C1whF8cwy}oLd`#r@Mmwl@1Y9GoO`-7 z;v^#c9DZ^$rWPW6C<6nl@uJ&mkMG@5JA~jAX@Wlrc(C<~`cV^mOB@g}tR?~_+p|;t zqrhI>q#wr$e-Z6!lLRj0dtmwGDeWA?BirV^8VK~+-P0o#4O6pl*}%q*NVRGJ6dd2X ze(~I0hL fT3MZj)02rvkg7dcqv#5I+A8;(lIikwu8N0Sl=NDMTvyPkT<955h~qeqc0 z^ (Q@+t0G}(c1n%zD_-up5*P7-Hso;~@Pe%DuZ%ocnc;QK*I4m;&qBPp1 z4)<^Rx~Z{XN!fdNl3cUiVIBp3Rw__!sZFkuD%uYe&9Ivwm-U8P+W>T9X1cc{t9pKN z9fIiEf4n4=G@`5?fV1#?=?g$x@ FM?|u)!2oc)f1=Gk@Q$p zdCzDPO7qm7KPs`l0?drFyGPZG)SLskQKGIQUN^jxzeNX 6J;=B8sZ+j{%5gPDS0pC`TE(I$j5Fv8Juy4nPDei1*NTWzU7`C2VU~>EA zu@#I5BN8aZCx+oqavEbv37L? PwmF_v4^~%Z0cyq(xK=5$Wjx@64OYG)kNhUKN)@RzcDt zj5tZPaBiF|18dF-`5jP(q-vKq2JQX8@!fb2wI$-JuVlw4dw=Qk65Ihv^f?L`kcv5b zJQtngbX)d#J8iKW@d@myvJyQETg1qK+<17eq~UorANmOcVW1(jCDO+2&s*ilUt*aL zT0Zr_K`+>4H+a01Z-@G2_*>q-=d7tP*D%z*73tIBMXV00HsbtYpBbkmF}n}{E;HT7 zg`#@6o09@}kwlEQkm~q+;87zJAKd+mC*5G@kQ)D9CgQE1eNvl>!mPnk0jFgA=B7MR zN>p_WyR&+hkgE`@YvyW(xf(Z K`3UV?^T*tzFF}@7QL>=Ev=obGG2^qGb#|T*tIX##x z2$~N|ojXRTAiGELsomfHH$j5;%psq{hsV-wZGWl$l<{(lkKhBJMiy9kNh{{ou&=7N z=h|EfC9Tg-K%a}}P`V2fb}ub>#%?<0_$;3ULzCH*#*;Q;lU0i*s>1g7l1L5%*SD*R z_9Tey{UYd^b!O95&8!$5z;=fCewx_CpK2D%0uh{%ZX$3jRQe8$?cvWN{zdQu!$E`< z2&cfuTS46$UBuv8$lG~I)N}xNcn!i=q*2yFud`H=Ec%1FJdmp|*=j?=4Cn8`5Ta{( zozkSMlxeXmFk%v~dsvmO8L%}ffWQS15f%SS$8=B{6#j{89EqPCdd&-Q0WlSm5!<^= z`OnY9ehX$9h7x1Z-C^f)H}mY2m-ZlL-m7xbUF^;Qwixo5re%%MZD6&I0IIL$JltF5 zvhkb>^9zlRJ*Vkx2u%y|QTl+saQ$JdJ-KqxwN~L_O_2HKu_(mFhhu0Z$y1BOv}2^Y z-fZMRm~YcTB>g(AwEz$Va?_9q=>}+oQK_XA!A)B9%ZCsZLj$s#$?hS2-T3Ax9_e7U z{?D{~8Dmk(f!mBgn*H4gp{!t(H$C+p{4V0cVRB~;!|*#v;YK;#vO!x7pZ_rB-ZyAr z>V3RY$cDmiGa8xy0Y {&Km{wglh&SYquh+kByeyFV$W3~m ODR zgy{$-q$OAL8Dx@6F}Mn%>f2=e=$CD@k<$WDGY^mF51gqo*i1JO6rzMTrv?y`pZG`p z9=+r0KJTZgQOr=vCPRmDrKYJ5tnl&$8VARCBV>A4lN!D$voTsXKDL9NxrH}aaBa0Z zH@e!b3(f1Se=9H?V+chau7V7v2%s3B0cYj0qU-{LvILsC*P6DTO1^&6%OQLmRhZhu z%oY(beO@PTTpKtKuu5-BK?-&<+h;JoA8AJoM1A=$M%Gh`FxRt(O7ydjW4*9qZ==kI zeS$hQPE|cy@U3U_lj))p6!UwDIYb!b(Snk+tC8}WGfr+gbG#3UG;^w|q (%|O4o@*H>gWV(|1Es|w>#P}-tAPqV%xHD4MP|zeuiCCWzdy=IL@2Ifm z3eV<5y~)wO@uC0GI_%!N69R}wiof}B$Mm+%Hn!_`Knn;;voB2lY??WDC>LjNGZ359 z2cp%zQho2s?gZJSO1ip^X!TP-%|X(A4;C>$J-cIM*5%?QE;~M?=}aCyRjnG+jDm7k z@@kzxcZt5Bc7ZU`RSLu}4wHi&398zw@;Y>Y)oKE9j>CKKT0wThLF^Rkfnb4GN^-r( zrr5}}E{uox?dKS}t>`9>3#&5;xNK2PJ7da@4r>PI9#e7RkgTk 8KtC=X(}zNl;7%5Wf}%(O zxNJHNkpJ_r3JNP{7?YQ(SKuv@t?PEn +Pax^|6>t$2VEDlwbuHaq*c^=IYES4ia@n-pZp(c2`HKAf z**SASfbmsWJxDU&z`HY{(sBn#Sto3&9gklMt}tzEb{yr2fvWGI)YN3}_{8+Y `XNsFz KO>ZbX}Ai;eq;^d950c9jQrhGq`NtzkO&gZ zyuO1}e19`DkRTt*mW&JH%iC%2lUvws;uGKnArxW ;jkAyLIykdJJt1 *3<$~tx9lC3wF|^k4U<+5N(Y|qX*8Vf`XEJ6ZCw1@dNrqU*`{{(I z=}1Z+Dt4l C-pZVb|n3ViFa)s+4+LWi;^Vv?bF ze&?c-#(r{daK=}keh2(>*I(woDuvc9EY83(px24&z#iu-b2GVh%0hY_> = zWT>XdvUym9oBb!flW Fu3FL({aih8!gt|(waP=KWZnwrL! z&ajXWsLVlUq?!gSS>Y?L@_ReF z` DtH=yss$rYgmc;b+N+^{$E9l$afL&OKwlU=ymm77 zxc8|T2y=RN{OpEWvMUs2IZVTE1dfy?z!h|Ph%^+^qZ<$fJ2a0#MVOUM*6zusc?Pjc zU7o~cJW`QwJ9=&w{qKpX9I_HPb6p^mHC=QBAYSB3?1Uj9_~sPP)nDav!w4xsv{S7w zKz;p$_Heg5 wns&N$|Z;_Of8V)$4SNU;d{da0Z|UeFJi)OVGfaIw_R*APtncHgmsLX{{dCyH00 zqYj)>VdwvreW;{mQ0=6;+|U@2r2!#j#OQrQcCXHQ?%)N1acZRbih$m*MOkzA!PK13 zVG=}LUPKd9E$$-q3yVssjU R5G9d=e6#1 z2^~(__`%Be9f+eX oD`1KCKh{*2+FQgza#8+Ie11-2!uSK6s2Vsm5 CbSZu{FPf z(>ORpa$5 WgnH(e^7*(2NnGlZgrx&0&k23GGW|xRf6eT3)k{DV z5IcUwo-sfa-#Q8=iJx?m!GWRH_Zj9(Q(lj9+L*TKo __lS(yF-4KTcO zLdO%6yD^hR&^mfeE*j*Dz->epsDk`cyY#oQ`JB}81!;-?hb!OAmpcu!kp@w0$#tnv zbS(Ag5spc&WC;`=YC_wtR(7WU`EZ%OTq3j53VJ)!j{zu1s?niODP*qVMPMJXm=T+C z|LouGEq94PtXfrQC8YGICC_gXv;0Z956?iX0uGNDV5;Rof{XV2;XK};_y`fOGrVc7 z2gnM;9r}GxhVO4I`*xIEzBUkqE{aqw@B}0c_*7SBp3rnW&W9beI{wfc?XXk@i*#mj z036H7*X@ulaH`KXJ`L0$+3M4F1D6yV+@|t*sm=s*ccoPd9&!8xUT#0IY!V}~&9H9x z=MJt@w83FVNsxm{H}Y?PYe7wtKKW)P+kN2-`NBXLgviB;4xRyLXaGnH7Bhx%%@{2M z!N@s}*$2FwiQZAP7>l*)usV3IZXR@0SiA$XK#dGavD_N!!RiE#hnp?F!$V$Z_$6+d zX==6LE}_jP!FQ!fBy@7(go=Dl>+Mi&%LjW`6c{`*r59RVD)pgWoTY @*g6i1Bqq(kByN#!neyin2nNm!#2XYQTy@Hr^m zrQ_X+0J|d4WzDS_gR^kY!LxFEtD~hpgV!26-1u`w@AHQhhL{7H$sW^5%JKhV4wwva zy={y2c{K?h#!f>9Z3^=n5-}}vK$v6%`W%brlF#9$WTQ+h^M@TgU)Pa>x>P$S;DEL$ z&G(5@yj~k&v}~2soh>^R`;i)EB4Rwtp7M(%jk&PRcMC_HwihQWtb4v8Yve24hf3f* zz8+n?=+Z)Pw1UP3e_6W%#SRwsEOKzyR1`YMr~r%A-l{3JZbr%cT+OBpA5!7|Ahf%# zKC>EKJdc>`F(pUuB (q7<{d)PLS0oTAg<=S4; zBy7`k@+Dsph&jx9V=6Q{Fa-LcTh1w3@>eF%8aT(cSn4txao^vNOFt29CPh;Ok=0Nw z3lWN+lca>5#3np_wjL0oEIvd%tM@FOE^CphmlT|NspM$5IL1Ltp3nr1{-H?FZ_9H^ zPY~NejE^_K!Ew|e^}(1);Ax5%0KOg_Yk(sJYF%I&ujc_&$Gae~qRCZ{$yo*SMtT6= zP#d=_#or2R7K|q#pGJQX2cgC75Iwb8WLm!~f=Qo`X`;(}Q1TTfAY4GT-E?Lk^`bY1 z(^iykf=Lfq-=$%Rp{(Hb8_vn_H(~ZDl|h)7ud9;pm;p#OV0ZQlKdf}i{pwacVxF>| z*yRU8j1LF&muhlX(0KS5@~YYK)W1NAl3zPYE ;?crALcaOCmCjS2HuxYaDk8?FR z@r4~57oxFxN1AY>rhwpVn$v!_gwkUp8UUiyaUSGhyyqj|CS|%qth_9V5|NOhKDywi zd8q ?DWy5lPfc?mEtVoso|p3y(?hNNSJTSf+ryI1wpbK4#^uUzOR<6Mq?rE%Hy!w==`(fD?czf`Nvaq7ty_>tIu@dp zctURKp|wgsFt7ivz=q$$3YOkRXns{F-{E)oO-;4g5H|F96k~?L6j6 b66q*7DbvELBabwC}ag?N))m6Nr!ztch%n1=vOZGFd2p{v7o z6#jZauLj1OMU KK4V_13|HSu_-Y?s8J+I)qYIMP{ z195}$Ez5m}ssI^1>-|Yc;pDW1w~ccp!*1y{A{c}$+ZlyDT&LusmLlWF3?N?QRv3%a zz&6yhK~{rWwzL@Fv-3So5o3_it5xr+#7xszTBYOm^(@{};LVQWG+A<{YAtf%<)}z} z;f^|t5MxQg 2Xle_0DEng>^>x _cNxLQN6RAQFnHJrDHWcA&I7cw9s93Wa%R6`E{K*` zd%Pe-Oj>(;ep|$0xr07{5_g&UV#4O+oM2T *4kChV2Hxy3RxZ3odvkimiFyPjU9+oH~7O z>=4w-d9J`36~)~q_A5A_BkB &YXA;PzN~rZeR>o^g(%TZC 6J##S!arFT3!w3=xO>XMckw8)1yJ2^p}d}D5&wR&LR_LD;nX6mk0oDv%)55$ zZ=G6Te8;B|8Mj6wJu5p9K1n6Sf%c!rn6=MRpQnH%K#nRYoB8VrgZ-@^Z)useFI6N* znc7o(l@m| w(|s=eTw)n}#vkd9F#7*WFM+>L_Nhl^whg>&&fK zx>-QHd&44?Est?n2JtCmMfHbpvj!1yAaY_{o_C7$%)-*-n6DiViy|1z`NH%6jqmn3 zq}XJ^!CQQFgeKi_jey@-wFG(m9)!;vhxa7rXmq~L_dY`0&qeMwOkG)(KJ1tgd;9<& ztjfQ9m_8+NB3dZvr^BmiN_bU@UjH@XFm(&}?J@PnK&?VX8>gFYRjH )T!}^2u$JV*NFb$7Tl`2eAyE+1vTHR@S&3SPQ ze`{@gEL@$bPnu_GJzZAoY;|l$1dADY`N*mHwR|rtWM~T&&%HzBw_7wdXf1G%$5U4` zk{rM}5 {aMz7nLtpac*A4DN>wa5R@c#UeN(*$@W|^%=Vy*%m znv-VR?uO_F_u3gg*8`I?J!uUcf}lZi2u#>3=`@C3#w(qU=2#0w4#IXP*P-Sjm6yDU z6*~s6WInlh$X<`&S07(VgkyL{=|~Y$Xr4eqiiMVX06WwMK;=+Y!ol)X2@bbK>*!m} zC*}1av|59hBi lDwHEYo`7_2{OeRF`j#@>ybC=~XG zoftuAOrmLjqiMr++*4w$x>)30Q1yfvkAHFqId1Vr{ZS;KPQ$J0EaIN;65X}`wn=h; z*ULNfCoe_-EETMlfYOybxi$-);WlC fgCDb2M1R8aRQ>RSbAjlTp|T_`lZ z_jh7z5enz>Q?2WPLWc~>kAcYIuPw5my*#2OG5pkfRHxeUslg&4;-9gLF4F5J<(;Un z`F)*>RrA3dARn7>g6eHRK$#c*p5$vtc|%4k;-6!>+77Akcg9iExjXt=Titkr{LsaT zkE`z^Iln+OItRiwHPeJMX#8F!2}i-flbNTeZePq%>*HN*4w`dR|20})x6<(Qr$!TN zbi@saz6#?QWvDAVSBhB6U@zIxkqxpvYlzY~_={+PzEmZ@M{$QxWypPsu$7$1xoT-{ zrXRb?1z1WHAB0Z0L#n~LSwR1ZtmYTns=Y=8YL4F&5$(X{i}(v`yjwd2@k8 P&0|-*tW h z$CPFxWJLmRR-`o~nbjsSWFdmon*D;p`INr$Y^Bx$`tPkPQo%0ZU?>{I7X5cA?Jhc^ z4#-~9Ayo#pG61n>ZNiLcY1-H0$D$gfdvMIlL{~GzaWgz>wS?St w2BIoE24sPWs2D7DsT#c;i%n=S{w{ls%y{ zeogqw?<%;(+5YJ6L|A$;Yg>n;{-)4n&(CH!p5Ir_L}whpP&4V=xJd<}%dkF0Edn0~ z^?Se^K{}mxH;u7Pi B9yOiqMAgIe!9 z>h)3&YLeWNGxm~yY751GY)>b3JGwVVa0Ni2375jV^D+Fp14gM-!~o;K3uptA26b3K zqW~-NN)st}=5Stf&BRO`CGfLZ*JSpLlV3|f<~oT)ZUBIJV;d#T={zyEdezPjEX5Lz z@PGGz6+eM}>mnw4T5r((Q<=N9s8NGkxHO={X4sJYMEMA(Iye0P*fVGcpNl^XTL= rHy(KQsRzZQ4^(9CYqCGO?hUNdX_8{^$hy3`tPhzmcK$^R#KZVa%exbJ|pDUNLF!!Y{d|L;!5+JhSJLV4h1ggBtsHvw^4^n55g%~@(Ety}G; zAZNctBQrix?#<7QzLWWDQDz)NZ_ai+NJ+crKM~g-!Wnl8_^)~qxW?Dg7DaK7$Z3<2 z4sUgP9sui+I{c}uCUA+((TR1+*OO0GQn2}KZ8 )s=Vk$#nBbaRFA8Pwf7(|XDvEGc{0`F5`z4z#Fg1YLY z7R!AzRC0NS@h?24f Kz+-Y%y2C0VPV`i8fHQ?`W{7D9cDeMaIfHwsEiXL8kM1v z;pcSBU A|6_t>xo&c1v6l3D=0D+D)xL|NetJ{HtxDFY|Mk_W_7Iw0xT= z_8smq)7@3!qiS=XiK8)1yDovPI_=;7ha<$>O7?$e`RQ@1-&cf0&r{0LWtLmOM@l3U z5;n!bzJF#4#|R1ry}Ob&c!Hy (D1BWr<0;pKQ z(^P _I>j$*!N% h;;F!skJ(E40}+DGlNH@E#uT2QrMW~w9h$RiHS34Px2COqqb@6uq=>yRcym>*$4 zBzvPx(AhXsy< ^!@`uw gD~F7d^7BzASKsj?%0LA73~OFRhw?yvI_{aTJrb*l&HR-fNpIx-$bknt z%O#OOHwZ1S&aU<}0>5j$iSG w zjHcTsddJ1{&Yi(uDXR#`g&TB%Q2PjjuX1Hn;n5^2tE5Iiti1UZID7Q{7V8ysQfRlR zyAV?atJGU*hnfy|%dy};88ig8zAB6+9}=(DX-ew&kgB;kJ-lpdc9U%EmSpiEoUp=s z@bN;Ro2M@!9bEGe$ 62u+( puNS@k>fP>3^ zout))g={3Ou6_m3o>0-rbez^nQap)0*#InvQR>2uX4&)~bj^M2R(iA8;(?9klP@bW z_D*}(KpSH;p)APtz?J#F$}9OJil&wk(6F=WdqFc!XMf%rb%s}6ujf>NkXIq2u#oVU znOr-j^g2uN+$D>c*1^2VYju`$YO9noOPp2eNJZ{5Xa& ki6d)pA)`a)QT9U6&|2tdC`*dn^njV8OM^Qa%Nk`|L>5K!{2Jh2O>meX(kzmuhkL z)1~DzrJZ$4Do0KRuyrFTwZo_QrO-EkYNnU?Di<2mt1@l{wlwn5MQ2Udj;t!&6%o>* zUR*w9Pg=t^F z>=QWGvib RMck0 zzCshak8gL&o=uuPu>@Wy$J#na{nIDIOZV8j=CJx&fS4$ByX$+5656KQ1RJ87hpqGd z$HZv-W()V4qQyb -vQEFM=Pw04Yl%>h6 zuzpJ{5y=rL+S3O9G7yxgYF8D6-t>ColH#3vovN;^5KSgkaRSOO-up+k%5U+T+h-tZ zHOe+<4|jbjG%MQ|9zNXDQ6G6jSCB!Vlw*wU;@K!$3Us-huz3io3ehm{vRvnZeA)e3 zvk?l&$An96 HN#OXqzkFEwnqCAFKIwC-KpR6tH^Rha-L1 zAN%51kH$r?HWdn?5N~mic;}E+Q*(C6-(mK0Puk|NH)W*av=!9Os_6?Q6bGtZL;>eK zO+g`t#a8u+d#P3tOV+7>t?hAk75}7j{h23&>{j&kLG9MY$fRaDkH};#uK`c1*Q2?c z8FBQ< R}c#?XaDmqVm8BkVRC#eVr%VK#1enO9`h1=V@lAr-_PxG z7fICQZ_Ofs;~SutrF>>*%p`@eJITtOx&3@#{7z{?9p~b2yTsZ{umC4Mp^k3+yPz`D zQq##nxMrPfo hV^L?cc<{YCQ|aV!0bdR$WT@=$0;N z=&wQL3rXD5+VkR`AKoj$XN_>W%gc0Ki~psZ^nDC@Seq*HScSy&s~hsv^c68f#`Ik! z8{%f3SwRG{$JLLoL;W%zH{zV!tb7(#RyE10s>6Pg44qYz)aqqZlL=f+6P~CsFT6A< zeyU?SW7EUt#McgHYm_Sh6{0FAO3;w*m3758yS;f=IpdxafF@R-UWOgq=ek_)>NpPf zY8Jq5kt<=32a><0Ng8b777#ku&pT2Yi}(Pp+xTts>0m3@deM+28o6V@`D+E4CVyB3 z<~yscd>v03&9D%qq{6V;CM%UF{~8-=e1CiDm0j16WAF1^G_1vN$b)xJYf)9Qo;Dgn zL0HF;;F7b29DU8b%`F>=@GZF~d5be`Pl@` 1##lf*_RfleN#`tQfj586xJOK-^eXYT2rEh=Q>!R@ch#{8M(gKy>OgrBbl zT;P@teVj1D&5zR;kJR)}%3TV8-DM&R2-{43@+ZdglNXNG)1nUE9I?1gC dYU8R6KVe%ZOYdtAMm}!4bO7agjp6=Vp}sW5VHaQ0{)@zge@9_d zvcaCk^0-XI4r;TWv+sbOWOcB3IgyM2L>IRwo}9;u1_71wiCTx#X*Bo&v;{j)**~h0 z5}GeGiP$Ynz8vp)%ie#6U`#v~X!?p5dBpi#OyD330O%Y%P%I%}`?ROmMl4i*dK-|~ zc#W41Khk4R+k7cHke!~MKkaQ9Vu0PS@oSn|+Mk&67O7c!#4lH7s9ew|lAf(;c{UB8 zxwvzLl-Y+wnA(wceYGk+fZBJBZoCj_TS@qIm0}n%;I3(GPoEu})+>+nN-zC#)&?54 z0#Y`RXn%Pv>A0i%fjtZ0LD>17gn|nznW%~(+%Z$@I{gVt^~V-;A5BsN8#@4fL#Ioc z2G6R&zCPlRz8C^O<6gF&Z>0|`0(fsSo)GlonfjK-I<%RDjKJ2A0r(_v#w@nSXl^z2 zCuLmEd0z*Nbask>480SzWb|_UQ I*>At-fa^Ew=&>ySoZA%A{TuUNIp zVnD<9&DrKO+5`q4QU4TM96VD3R$j2|k<86|P>hb~ZAV0GtwGvugeU*6V>&EKnv=03 z@Ps`FDSxy5k*p6agTvN=12h0QO(fm*GM;v-Youz@-8V`k73A9xsxic5cb_Nkw$!$` zLU-{#-6E7+9V9dhD7E5RP}w}>GF>cU4A$J?DCd(#fbt}t!b#ID-txXxIhb-Alt;be z8-~tdYiV^-Ge~&YQB>Sx>j+-}d7}z2 w6MvIwHm%{4&KQE=dfz(S-!JcCc5iVcyd;`RHtD>!4+M*3NN~jcVuuBDTbz1 zsF9?`-%w$DFcZ!`BXN&J%}_?skx@Zv&-_6Z>yffUnmj8Zi?IHJW#3wcfU>v;}?& zd0PMcH`gI^v)mSW;sa*>UwU%)`lak~$Z0 #Iujs1z+hgkGE)qtx*J^@Oe5 z1#C|}kK_b# 2`nnw+U{zKN!KR-^%Uh`5_=wJ zbU*jWT5|a`sjLCZ(yAmL-@Oa1F9@F)yj+9~B$0V2Z(q*33+bYC-rK)sW}xYb3pBKU z WJDp#-*4Uj-P z enwVp*I2Zi5HeZcdbwOQ3= znm6|2J5ki3ih07wm6c0vP&)(E<`;xUyvyT$o9qeMcO(paYp)}@D0aaAu1@eH%aw7a zWp#$*xcj7>n3!hY5iqxYQ^U2^*J=}#&xqTsqpp2}YDfOT((Y!qFgJQr!Kp7L2=GWR z|2it5$m!$IMuC}&*4GG& Lb?h_ zJD&648Pt7||5s6wu4I89C~M%$snLo}uoAz{IIaz-MyQDvgN2GSo%%2iUn@soLar8d zXwoR{P*8c-oKC2UnJMmH7oa{^0f=A}T$RqkvR2g9 nN<_Iw?19{izSw|x*o%E87micK^Roq8ZH7M zyjJ}r$rzFnNJt?uxCTH(zu2&VbVGn6gzQuNG^QEsixQ>0*>uJlz^%sCAI&P}(PVg! z88+4#I BmAFQ^9J4i_4dlu#fTHdrUp0+dY!MyyTIuPMZ z;f3XupTHsRfTfb~+te(WJs@%pdqz&JiRryRf`7shYR(ZR>SZw4r+aPTXR_bJrzym4 z53lhza};dSF1U$3MmtX&-y@_T3aHc{(QMF_tJqg (AEB%T*EpEsu zb=_*o>a;bL`L#u$9NlIyfh(+(yN$Mon5ev7B)s)?H}ZO>67>cw&-UEkt;^bCt?p)4 zFCK=vA=nbr@*+I;wr4q$fU7vNk+TX5`OtwaFeE|ZqwW0x38x@C7saLs9XTnaeFUZ~ zMb0spw7L 8REtrWz}YKe;&9g8&;yA+Q0yt@M)=z-4?N=9*Ft@DCbqL zaBj_CA`Z9IQrKq!m9!uWaC)ixC8zAi$-yr|bsFd!en2ITQ679N_i?aXFumF^U6r9F z+i;Q6SoJ~@h_H!QgXPRzR tXXiayq43?Y(4ERN9YYx@H71{Oo>UX-R;^UAw_Klq zUVpfb_%n`&N?sS{GYJ95H3a*eTfb_B+nWv;IQ@zgK0ZCth@$Dn8CD_xjX4Ly?!^u^ z Bb2@^;=Af%{e_ zlk+D)Sxf4``~}WaVz@0t43M|v<$!}B^6C5+V1D@Q0(oNH^)Qmjedd;l3D1Qk{p*d% zT-Uj<{kxRgHN0EBVCdCX+c6LNVBYsBlrc(7Ne}#B27v?RR7TC!xm~Z*BgAJ*qph`* zlhz!TYKhcPRPYx9TZkGj0b}D0s{ACa_Od;W;?KCtFs^-l)Fzcr{JZL(HOOxg=)b16 z-#OD#Q;_wQv#rYaMNd7nw8n8y#61S{+7N$>%va`I6pvEL8XMjT9e^;k-&8yZYSf!J zGM(7rDkWdyiJ+hHSCx46J8X&{lGls|ac2C)beuLIyR+mEP4W4vOE~VRSxvMc@L|j0 z_aCYnzvY``qSO11^xDZz_<(4`GbbYZsGEg8x*_OCvUB8ye$}b !2V|zs~D5@#yf}v&lOMmcI$L1Y}2B20+(b zFMBGBw=D|GW9M;< zm~Yp{88}#aA3~%VWlMEPQ2lV5E;^XvAyd&ZJ8I=ZzNjq0(HY6DUVs?uhkhJjRJV6= z44W?Pb8LC@j~1ri_}Bu=BvD@hP$5U*Z| W2~GHLeEm5GsP$pvsWp%?8cZ?XwK zKaG}0?0%^_8PV9UoqpW_4-DZah(bxH8C$=~P>6`PF~l||vu*u|E)_ow?F}JQ*GGY^ z_Y(IyP`Hw{eh3-6Bhh0v53eLZCy$X}n$sNLK+RG3G_2~tn-`=%z}d%f*#j7>fq{B$ z>Nu+{sl#E>5Bc|?!2a98-18`OB{uET4*Od_%4W9a^P3O>?rjY7&&v(1vGc}>fvtMl zC0|XYTqD*J{!<5spXw;GhtO<8D=WGeKd3ruxklL5v%OZTj)6jw->-j?&wYoDC865b z(zE&*(Dz{u%07BgzDhb(3cvQq#!oosrh3 &`~ c}cJr}Yr_U;-w? z##k@3+}jr(eQ6}2C~DkVF(+(;14pP=N z%fMCzkI;T(4*Fh+-o&1UgSV=Tu7@C>n{}rTW{K6|H{JLHHFGcj{4rx=Md6*|kcAL# zC;qr;%M?Iglytxu!=Lm62HF+p1ZYPIm~rXTdIFMJuhiyg%-Wn+tY^XwjI9uDa6Q5W z{upjoxn0omW0sG#L H(_!FwM3S8g%!-7hYsU_RFy>gg@!QFU{%gW=^$W2 zp#X;8T-;fJ`cYumeG6E8YCB+9eQ^*W9%rZTd9`M &B&vl2QPv5 EOXUt`NAM7_6-9_UBD>~STJg-~c>Ei-wTb61)tQ!^Y->CEfc4MTQk#0_27@i6Wt1l8 zv@0bLwuMoWKH>A;^8g?D5j{B|sz0AywR`s~q4`Y@hgKg{HPG8AH#Vrg=9^UkbhE>L zQ-`#XuUYVJ0r(P$^%#3|PapwbjRM>+dVgcITSx_U#<_V*sfXCGlRtJ_I@V}IzIst$ zE(L|Rs0N#A_wAIDWtz_hp#Y*VO8d##mx0OLG!w`eCz5^)%_O4;H5Xc5Ha0(>b@K_7 zFBo849+1wy!f4EJ-2)-R>n|xT^eIsz%E#~XVOb8HOr!2)6U~!kl74g+VM21RLOA`} z3Qs+#Mt{o>3$BdEZonF~Hk{YI28NRiB-l>nB?~OLXO7tVl{h1lYv%i;Y@VLY0%eg% zcuU}SSM#>B^pXZdP);!v!B^ypG8Ymj90qXToe&0loVem1v+dNT;Bhuh7XDli-CZ^v zwoUy`W#vq@xbv{BaC|hT%1Z9#a02eJ3=^kS9IRm(Y)EMyezN+i>M@wTH(O3*pbeCK z y`Fcc94Z~n;B@QbLs zH)GL7E83!SP=he 4P@quihii@5~lj)JD#7P5A?CC@F zuGp<9Xy!}m xlel447wc)tJXK zgPHC!-ukny(Y7hCGn4#?ONsbt$NDXgy$iE_5s*VaAl@)*TL%0Vikj))xFqbbIw-Oz z3|!5(ne!o*cFV7d`d)|+5VNIwoGU9Zfso@ZUfVsw^p%0gByN)2 (GS}GXMI$6RClKN~Td%=htV;S3)o2&^M>CV$AO0Avrt!iNExXm7 z087}grO)T6ufpaRAq-%DGa%+qoVCg!;A$RB39{B1L_F| 5wKEXCTKbga}1L=j>^rPQvgY5oUHa@f3|UJC*`-pQ|R5 zqrIWozW3zPy~o2E<+n1DxZ2BJe@IEug0O{HPSrQ5;e^fcVqa^WJTR1uQ^8AG9MfJ@ zGFyNygKNxm0#iSU_oloyuQXHb`1~ka(H4$YgRI>~SKOSJHyI<6u$&1>P-_7r4x}LJ zlEr-_DW#(sz_p?H3ys|32#c5Svo<{$d8{O~=9i4uO` xrUOojj^R z8lS#t^Htk3NCn4Qol7f}rk-wgTufNVG;jZ?35~&g2*&eOkPrdZLz*Ba{G}TszLdSe ziGh?FGAthR)&$@m;7n!-T4m`#eHr`SbJu}usVFB*cKdypf;nj)?hG3*?fz>ZA{nH_ zR8R7I83RQb2dZJqSJX!yJFm^GTc*i`eWIg6 =dSy z#3CbBdbC}Rml)D_PSQFk96I8x0hHyXaHw$6apya|i<@7ek7sv@XLs$#? c(IAo zztdwVag;yl(hUjMCjPhVc+)3}I%Jr9ZKfYS$V&;freP%H84c_BZ|l2_OLSCbNiZY% zw&r5zYw4yA;-x;688=8H$-5p5{7Cy3E=kbgchvfw6kRPF R3o?+&t zxr_?qpG$>~s&H90V~i-l2CaGxtB$$QyJm&Nlt;CNy>8;`6>C%V -9Gol_kAGjJ^TBXY8@hXsi&gXt7*74lEqTqH$$M=*&%y#(UOPQvflt6 zqf^*ns4p%x2pG>)46vq#Hl33O)AG;3l+B$1ZPTd+I# ^%DOtiD` z-&6z}F1;C#)V3Y#QI{$mdNEToQ#qp21iL6fH3HHpF&v4b_i9mphFeeirnuyOC~lF6 z`09FJh+!ZjMWFW5E6#TVH3Gdhj|d#SS|S T@-`QVX9K>|E zOlG9 D|$`D3fV3O!sSc`A;Tn`@;=62l)2g(bm+JL z$lEL3)|iZ-NED(c8f3GCy;_Ds*`tkz6L3$yjQ8mc$3`KFzSuOT obrzAq$y?P9ESEPb zt^2A$eFytNDr)eDd3`r{@{{A^3lgA3Pej&AzmH^Z A_8j6^X`_YIT`y#oR2Q(#nFkCK02IFAwIqGz9Zg&xWwT$-kI zxzC^`c=qBQ#H6P>5rnMMvDE*Xo3K(_z*ks8@&ca9hrEdl$gfL0`_6`PRj&{c{nmG@ z{$?+fF3eh)@pGM_WF4d%_<|DV1dkd4>eG2BTYtO;hM;;%*2guj8VS=Dql}>|{s%Fp zZD;E&aX--^&U++S!cf3~6C2b;o2 <;>D@O7AA$=k?N8w=$ zl}v-A%ELt*8^pEbhq1Kw;UNIYk>!bB!}70A)y=yKIfhA&yb))@C4_U5We1)6YpH=6 z`=4TI (u>(daH-{rvUu#RS#@*12l6eU3 z#6<*|I0YY-3UrR-4Aj~hfPq1IpC!_wGS*NV-Bm6HMH`Qo+}7%b#;y|atx)yN$bF@X zS7^<(Y)Qi(e4yJu5EK$y KthCw3TU+jW)j_kdex@{&fkK$9t={-FTQEIu-ccn9dhez#Ve0`N<@^ztQ8 +p(_Cb z>h4D}FG0oc6CSf){A2?!-rl8&1Mt8xj$5eGyN`TSb50U=gZKK$)zi8UwtxA^KiP*i zi+9;jp$!&L=Dmyp^OC0@&DP_Q;a)63PmL%&{^t$p9JzGGOytpQh1IE#XLN6X (3{e?x05PD*VtN zu`I6`GU_<*Fw{t!lP5fOIUHxWvaRxuDK8R?z+V=72y>ky8x9!whdH#Gz4e6UO7LR3 zP;b >%X^%DHakMlGH}b;K$^MK?FGQ#Cf|P-7Usb{9@JgPbdEsqg APdDbkiFTs!(`Y`+bj3m2+p4iWgqeVy& zR(uGP>}}{(fhkqI!#C(nu&%`b`CckpknHg(BZ6(D-Nomrg1@A(KW`FW-Sx04?|YNL zb$u}`Ht)ii&s$UhW`aGjHr5Fy9}(QFa%o{AEj=nQg`T^|I2?s7ItN+rH_rGAq!G3T zG@~y(l6=7j7?_J%F4pE#&@oA|A<*tB!YHdTRv0&;w&!-ZrD+xy^*a>LK=lhes?m7- z;4Vqw_uWVn;lS=7L??y(jjFsJMQrC7`r4r#!%|TLTn+AG`pD|y+l0j(`KPReTWv5? z&c2?a*L1S?I*G`K#<=;8Psvoby4Z_nkHrMK`I1@KSz{L&CRJ;dy#3c>+f(iJX*7=E zDh!K#euUf;VI4SanyIO6`cZka2`b5=BTNG0m0+Z*2!eH)v*;VX$NmHjJSF7yIq)d~ zgqhDZ^0Pg*Rga0B-*@prWu}P)dJta)geMV^wMGpkz2UDPA>qn3jtittoe)l z@Ik6=$4UCN>V}gw`4E~}Zzu~okGP2jGGd%9Oi&E={yL-vnmcv zw 9`jPi%=iFjmLaZZE0z%N$c2PfY(1x9e0GTQb^ zHXgv983Ff#C?)=b+p7|JU~yfsOOIHW_etTGFrgMwz5&aU2n!^$JQ-{@ZU8IeQ*0)3 z|HeVIA q(<#Pm&{4(=Jyz9#fJLM_3JD zgUGP(m`R|c@Sryr6~y @Z>pa)7_m0wO{n-h ztq4!it1Dqnj1`#b{6PBADQ>}P?FSa_Rqam)8XDse4jTKPPSfm{uA<1~*56L?1`JxT z7Vd7FFlHlan|dlQ$^OsFqcEQxa05-}i3EvwVxF%PYlk+OSy4FGES?pQu{#*o;MYdX zIq}Kybj)6@PgdphJKAeKWM7^U5rzB=nHbT>ti)&Icv e=03<{AL9mM9vddn=Bp`}fQXJTMTa|h$di_X-p4QWER?YK8 k~ADacl;&Rm(H>pI}L%r|Dyq%OWMa z*H>5^5Ed2mJSUMVzi*o2tG+$I|864_5bApk&Eg~hrcRkhko zzVMvNf#!aF^pEQ$L}#wN@E`mVnFfX}-VZn}5BY89Km2F_^T11%c{|?9 2 z{PppP2(%>uo!lJQ*!-?kHUyYFaBPDUOj6k9u$t||qqFoJK#5+qu%BV?X#vxS({nPy zqi0Ll;FX?o7aBQ#z4HpX@em>^6HCN&f$l&t#08uw^s9g_X~pffBc*1dHtwVh`WEY} zQZsmrY?Z*Xk}CU2Wh$!~7{ei bGS;kDI{%@g=_Wq1#6Nq{ zzoRwH7M2jK{g-Az&J^TlTmZf*(+q6Bj^_t^L`0f&*q)&>x}YL~7J>AE5(JCe6R zG9uiHcq_dIs|N~7u~*~3sb8HVMO ~UAbiV93%Wnn}>dJjGwrpEAQ(D4Iedw}ddW`7)y0NDNR44X1AqVD#5a^s6YAQ#D{ zHLeWrTJ4 >vzrE3; sI|ulN}(On~B(8%d|Gsfw$N%;Um9Tcy%kay2}X0k#+m3> pZU=E&1(t~Tul9nNW{Nm3G-#;b4+XhRIvZV?7_ai2)o_i zj@w)wK9QQ Oa$d7ba z=3Cl^LJlKvMhEc5XLzP4hcEeEZV#*BqP| gCOy0x6S> zm|IIzw;1-81 k22bb zjTVTFPj*WAs=XhzmR{Kku7{lFHp}O&RaCZ>2wsJn*IeHPmL*nWAPG4Jp-Dyk*+kn6 zQ*xc2L1PA4hXQ(z{JxoOQ2cC__)rkPDedgY2sQ_`1W^MXIQ46~#@Riejkz`*#SmX~ zDD_t{e_d;{QOQjMZW9;8=rVpeGK>v0N<9$~@G3^CPn2Tum@=}B=n{; zx{`voDtJ$8-X>!WL9aB2!ENnh;uc3=<~w_%+y-^2f 9s%p_Lx7(A#P&s xn4Cd|H~~9_y5+ z1CUNTzhP~$^_#}7%E|1> )!KI8 z smg)vp6IK z%JH%GKy2?}w-5hY*Fe|}A{z8~Wy&_XFH}4y5nm@voy-S#u$wp At%9Fd03a_8Z7 zX#mt<1BFqL!LSBQUmemG@W+|cg=cSWkl8ceu6uN5@PiSU1@0fSWzG#3`0F!fqigs} z77K=s0b-&|-&(h(l)qy9V!)s9O&BFNdC!^_N)(lYkTqJ`E5&Qk6oi0OL$d;QDRy6y zA4}X+Mq}P~vICx1VY17KFJQgn!YJb^AQ{sGA0~+P>q(0z?qn7UdHaEqHhc%-kY>GM zzGwhgi%TF)gr$piM0a`2f!krZcb-!x9e(h)xS6h 7U5%NUw zM&qd9Y(2qpH6bob@F(GTj^lV;3xqka^7VB~W&Y|nZ|S@41B7kf071A03ZiwA6wc(T zfA7jWzB@pr6FFlX`RR&(4C3-XclmHh1x()|>+4!SI7h=}^OF&r^SgTTxjZWCcksx` zD6RJNJbqYV-Hr{Sl8$lNOjU`k+_RUBLF7ZskqH+?;*rnfyg}-MRD1g9Qne{JC$W`u z-H@$$);2ib?KGs;%UI|v&;*~8O&Hx#PR2j;opZ=wzVX`C8j$TC3-ybq2oEdX{~8Pd z#k?lmJ|Gocr;Vx6+?V;f|4t>s!UqzPz7#x4CI{4KxVves6tpDv!rSyWN4$kyl;Pd} zE&KtkpAE1(XR8<3lM>W5MAQEE(!>(sATaW mf3YmKER$1L!3?LzsZw3PV7=UC`e3`zIAW zq%PbpZZwJY>-4nn`YC&7coMz+_W;~K3PcSYz7S@V?9mT-myI$z-PfgAzov>oiBi*s zp82EKlDG#w?B|U@O~iK?XD!1LXH;s}Da#@`_(-h=o3rZ{`m5ePM2^?qVpNSZ3Mosq zy*1#cTTO9HP LRCp|L&9ZkP~7h*e~N0N3NdmPvRbnMm1z_Kuco|t%TjPB~54< z5){i)13 >=Vq3Y{3a_my%Qe{bwz@Gzvh^_tfY??CIBbBb8Z_qt4`b$taLD5DWDvoX z?J8Gj01z(;E}8+U4al`RyJadeNPJ66e+o`C+2T`)Wl52t1DZwZn_zWDyiBR_a Bn#RATD2x^^5vYsb00k06*AP5USpGATe)M=x>}a7&($D=YqPMjdTDbnO}+ z!_K~ndK&X=X_@cMyAQiR-use@TGm~(OLY_9manh6q>i{={qzB|VUBbH6mAs C0Mv8P){$*b5KU%VqrvY=o8m4zQcU)b|C8F3b}zhnHW31&3M zCP|%}p2u(a=Gt|VMa_q{6toriQS?)z%xc1!2)sUAaK^`GnydEmShq |=;`pKx=&~=2B{8dY1Oe% z$Vz}6Nxxq{)t6l2>AOA33TuxLKSq0={G %4S=K?52&l -9jQV%;j#8skl4nX(2@B#~FgqK-^R zeCaF7#* z) zb#>CP$$ki9%u$pIID55pEX^!CCZga`fuKgSzROmNP^HPT@m1m>*A|q`dR`=%64pb4 zBpU*Ec<8v3S6K3y`x8Gyi`wnu(F;UJ^CKS>Em3%u67s|SQUzjP%<3dfoSvSBFis!T zMS!1{dBymXOyk+dZf(;l9Mo}2;5jbmcOS+h&@a3>e5Iav &X>vY0shs#h4) zcXn0{2a&$1_KJZ_kBl4sfM*>YG6T?OX7n~UY&iQzv8kepeHf>6VSiGQCqKw )K1#gI+!b^c zLK5xaf<$q*AVD9fE3$T#x%eh~+o%oK2!XK_`PzoZ1lQpcQQF>97#sx^1{loU_G7zP z57Hep^sbyV<$?^JfK4eirk9Jv+3NF<(t2=yu-*6=G&@o7w7*$bV>PL$uPO!MgAr2m z#`NMgbVdV9|8;sSOmu$<%FDi5Izlq@SP+&V-k3||Hw$GXc~x|et1^WLArK@bSRN3} z#;FMAo5r#~-;$H|{Hs`;|6rt#@Jr9e%{x;FIcOZoB`ji{=7(w%m;&hRuzHs6)BQ^x zs)QgvQCqhni{{BXt1HdblQUba3;#5gz;4|lfC~z86iTMp^b0-Ade@J)%%5V;=@PlR z{~S8qjwf~Me@dY8*_gyXTvSHG1D1Q@M2*J;==qQX1kfwpG1(E$@7_py){0>Ha`5Ax z36R1rcLg4*lqS3*ScXDg)p{Y686q#mZG9_hcQ5l*KIhj?iphXou^(R=rnk5$l3M $+Mml{@4b~`UiNOz||Tf2~M`yG|Q zfYct*iS)@*
3TsqDwrt Q#KY7?E`gw`vd!FKOld>_&BX;D-mr)*Krq>{;T2%dHNgC4$~o z{jvc9-a@#+Sfg@kCqZ6*c!p0iJTOKs{X?}U7A2iud8_UmE*u(@2y5?wf>HMcRzQM~ zu~+pl-EXg)6j(h@j$#;Rl3lR<>bsm%06cSxM}2UA#3rUA2Sb>Z`y@@=J5_ozwWV;- zKI?p_yZwC5FbxTN+%v`-Fsg_@G{Ea}0;%;HJm@r(!2^uIyQ0z})JVxcd}XbW>K($T zXheOOYi5T8B-~9XGc;o8<3pnd49Nl%cqM-3&u@1ixRbtp5^m>dK|vJrMC>;!Jo3`N zbCZG |d4d}gD vm{|ot@Wf)+lsSv6 Dp0wf8l97yEDf`}zm&P`huJqWK-s)lo$`tWy?Hy%#6v1Xp?l(EEU6REaV zdAD3e7+ZhgBVw?khg@X=r@L{7-pE^NOPmyEhxk)&pA{?}2L JLc27 zS2!k6+x0 ip_nW-QPI-Q^j@k~BT;lY229|9g(&9@{8$)&s>$xRk2Zlv znZ}fypObpBHc#m;9_D-3Kw0T=>U8S+G<#mvRe4!cCkaWi!nezi{+~wQQeoZRN0k;n zFX@w$q(>HIK0dk>cQf^;ETA_NKfBmG5Ku=T%|!0IU;qF9 W7U>TEvIQVUSmsr8IO#A7JjK5Ew(C;g`mYYxi>CP;bSeqcmTa;#-Nb@pcg1P} zH3ZT}OQ+()$86ynDwh*S+}pc=55pm(UM+R)+`wnL*_hgliY);mLa KIujR#0pRmtJd6E^H)IyHK}#dGuYA9tz=Gtija3W)fL>f?S zq6+l-J)l4U0~AHr#?rSHLOt`N61imnxg3RIH1TO^0+TJiXXvg_sM+Ul!wVfCVrV8# zQI-TnS4#tG -l(WzSrC(A_!HeqDpH>i4VDpz*YtUIY60op J7~@?2z+s5SR- oE^4~VR?WDuxQFyIlwSO3ft@a%d&6B|~~<#9Q};*ZojqFaUpxQ=Q@k-Z^ld zrCitccH!Eak%{Wlf83+;6?4$mN!DCa%KW)t@&Pn4>+;cd0BoAbjYR=g5tgEuXB1_` zC4RH4)QO*LlUyNf??cM5GuhWB8?V!KEwFJDq;ePPw7Kv?b*H1gbgl*9+vC+CEV8 zM!nz#X~bAVxwWP0k|qvGXP}SOU9-o;H7+Lq5hVw&%mbtc2XTJWywPvN-ToHM#PpGi z{m<=}AW@;_DyS8|FFT-VE4UITerL*0^nBF{#bi2Gp;MpgkoH$NcQy=Ri@aPHQb{ga zv0k>a%==bX*fjj3pAW45H$j~R1!Z>ZDNM+Hlp8*G?T)1TzJ4ZzEoE~h((da7{|kjC z&%w_Ik=>q5&;YW;Oj}gNF;)>uvq?1H0RvxbYeM9DC0Q##t?mNONGL4BYKhJOtnb`s z>(1m~l@7dntcQ^_B#J6HqD}79&o}2habO+mKHfz*!;U1;cj956DK=|hSU%1J&sn%t zR`UZ7d}uvJ{Y6Lu;X?XE9kjsT&@&fihW3F9S YxjgZPXXyseG6DQ)UXjw%#}5x(??isbop>3TC-C)6dWsVQ*la(@>9{aEqh)?w(J zzdB&bgKyXJ18FNT_c?^6N-g*QmH_5QA!d?rEiw}|8R%|Er~}7r@yA7MP}!kop4# zRAS%=NJua;7$I}6o0GNg!3% S6V%&y;Rd$)IGbpQby96Mb1vZb5i zDDBr5FW6{J$Cr2{!8-pu|MRQoLp8W6M_MYT@g|=ZZM>0HJOzM&6 uJuH-oR`z*99@Jw;*RAo+IynI;Q+FuhseyL(l5nT521NgFC4Al zrP<9~P6o_Oj{emXG5=JtJ1YTc`A3uBz`X=?>p(!rZnhP(bFraiJe9ywpOH@bD0Ana zmWH0HnCNUKZ&xj!UeY#KD@w=?I{lX!{w{1fpT$G>qT}wbmy`(8%}qmLvS*iiE?ITt z1RZv7wjE(Lw%kl1hg+|Ym>n $CjyY7QW-{ z=eIP(@z320J?Xq0%nY~?K^Nd%5KPsUkTb4VYZXmS0EBf_ux%E4|` z!bAuXB> KRZA_L1%>{_`3n*cmaI(3=cdXI0FXou1RFGOKU-`vv0NoUbBf@JIx{`Knoo6?R z%{o@`nK ^)-G|SbSf$1mVz9%GBP2wbOEs*S-`#EUu$RwR4Klzws|T{P zh-XiZb+Yih+y>{Hs7sh`z%vk) CN=W*xSX* zosB`IXW(fsvxI$wDKB~KWAK2XZDR_u*D6-(GK16X1K=)M6^HPlUp0S@Y8n$+R?=a$ zL7+Z8XfX5m&>>F$dq8re^}3Ix`$tMte0m1HWtte!6sthuHt}eYl@ptji0&Tyd0}Se zn-|mBkQd*SKyEt1JPWHKCrAw-PX`q4*bE7-nJEI8rF3ti|C-xNT|Dj(=Jdld4Ks#n ztHckA2Yv4iJ+Ic*dgI;;5H&*66aVZcq=LV4n~hLi%CIXrcC*AdZxrEbmu8`oJ~sjR zCGt;s;;a*H^J4t1U3_VidOclkWkLLLY;JErjSc!i&PWVz=wR-H5+EalECbM(ypggV zqw9z}Gl(kGB>G70hHKvF2AYpSIlQ}hnrk&Gf8+2J@(!@}SAUv^7_G=*t0p<8CSq-A zv^sEHBdLDi16hJ%9{mfOAxCZ$&qW)a5*38`A-y9bZTc2Ts?6q5U*`}I7ed3^x@uDz z_=m^6`3AY3ZW4?OQ(&nVcPUNZvZ$y?s^qJ4-uWxZ$7|~?JE!`e&;k;{NTP&vN-q6N zwmof6Ys`xh?R{=81SgxN3X(PWkxxD(hH5eDI2u%FjPbSd7Y)i~+1qFj;)aEimTlB4 zp}J3-K95CYlUIe;m0N&9) O&0?9wMV1o6D z9l(54eEU$x!d#K0-;KJT zF^67;7FSYf#N{}r?wxq?fj^;VpNSqph{3t{j?E%gN$Ncw=G$dYWKKGfKWBe%9!Xb3 zMpNStu_nTBdA9ZrSz*xCN~p4(asd!!5lSFXzIvenY+ dyq$mRTO%pZ02NaBi& zFW}vLIz?GE={d<382rpjSuwjboxs&Ba|mGL7f#9I(Rg(3aeBjYfh8lm-<`q6v%_#D zyDvPpQu25SmxDX%CTOzrVl(?jSKIWdx95kbVfz9t7`-8o2$Y z;Sm_YtVM@iadA=;9uz1t+_`iYYAM$g-7jY?_GlT;*=Oy}oq_R5(X5`2S~7($Z;k-5 zQu5rY8=VTk)4smy|ETs2Ku*O!yGo-77j{7YT&OGEKyIeaJvp@Uc^l)tn7L+kSQ8@Z zbD4Hnm5%L1G>30KY72B$M~~5E{YN|r)sM}-x_Cs(BsJPnh03}c8owVZN^W5-2<>xs za&!K+7nHy;S}D&Y@;vMnVcR?H9qqmGkVUaE;!7H|Cqt7w)94R|U;qQY=Qn`nRear9 z@E>mIh_+viOp8oTD+4t^E12tVFOxgq@BThnd90druT3njBa6j~Z3GHKvn@c9NQ(+B zl+&b!G7;SBAspC?(Lo)d{P1j^h)l}dJ9EQ+d|4~5z<%o(Xq5>r(Tr}bKqGFhOW7eU zo1T;(9qY6LE;YG9?w1bVq= -t%B4;)tswRi=kMK*-DcgY@q5N#dzd*rpKXL zX|{ekw*mfIZL?8+_qw{{@mi?Nxnx5s9#EFj8=a}%cJsV9f={xNddx!MWYO_|XQanQj9$erlO8c%Oxv_9GCcW*OQP?`79X%*AyL?^FUd)`G` zVW3tNNG@n +xfULjCv@CFB11pzMNrbRvGK?WnvaW=sG~vK0Z3P*)LKxxq2$%^W04 z4;?a@3-I_gei&q}EMS3X*%5KvLl~yK8=6JOhMOq|u9HGm=3Mfnu6HUf-ZJVwA$LQ{ zgtJ#s=V`X~dsRdh_CtdETL|ej^Sv98f2X2%OM~;lZ}iF39G-ThgE41(oU7db(oj =M=<^Wz>4d z&CWj-%0~=fqRbSRi0Ublvt0mn9nqmRaXkXV70RWHK&9#)54VNQ!-qjW?iiI+D&j zTQR5>O%*MfTBEJ?IB9;iV{B~R!c{(5wSecAk#7c(iz1N%R*Eb!-=+D`eIud4-S6;{ ziiH!Vx%Y)bj0Z{Aa!-n&-@rWeqhJwJy$rwFpV(U&s{m0vLOdL)K}>Q~jmE%srer*K zz_#*!T1<#5{aiJPxB}TRh);Y9qUvB-qu;niDn@zQ*W#^nhnZim6>|NY=q7SOwk>Gj z<$y{9>!KrQ_8UHakwd}7H}*eQvd33e4*k3*)iF{2x8#P>|MxDtclk#Gsi?CLSflwj zU3PbsfK&gKwzS+&>n4u}>*uS$_{SK%CBJN?gMA@Vh39jTFpzLJDYP??$Q4m_lfP-Y zvj^`OIAY{Gz#=*3c99;QDa5a`_vC{;n1DHV66o?cx%1~ zG=45be3!7cQDr+c({)RAu>yeHJuEC8l0@qP aAjP65Um{FKc3yzoXj!YE^L z`TyE9{f^tQp;B7Nj>ukq0>g)~&~jlURKHH@ti;WWHX?J8zAa9pPRp9}HocOt3%@uq zux*?8yj65&K*GKf(4hATAr zZ##_Xy_CDJj6nxS^WmbTNFn`Fk|jy{;70}&4*ZQ;<*KN#xhb@nR%u*V52`3aeczG# z#$X7NubYJ;XNQI5!P)MwiPq1mzuugwQ^>Ro6qez%T_dbHK+TYUvMVb2+d Y20~$} G^x5a# zT2@MgD;`C+&w9iI46f4 t&<4vNsNe9cyI9@mL B?^K?&Hq-J;^PFRz1jzw}wWT@n}{9$6R+Zwy5A zYQfJ2$GeGE6%@m6tw&> m7rgLPp!Vl>NQ zJDs0&GU_}7nmhyihG>2fwaf#a6=oj^#g6cO)#)n{X5B2JEuzY#QE-gwt`cn}X9Lh& zk%SpI?*#=V9N+#vG&`UeRoYrYi~j|tJi%&VfbU2tn{~s)x1b8E>!tBx89i!E(Flf+ zrrP+VYw$S`+Y#R3UEU~`CbPZ4aL +Z)#+#Ly^9~m`x?K_j?@&cgr{M}|fKM6V#VmBo-k3?qkbgPU`sP(G#k^5+tA&wtA z08NNYT}omAJC-`&W)~C;$exLq5aeQVqJ z_XL0x*a6O9?%QA(c8vmAY#)cuv4 L79)iJTYOUzR%elQmv&5tsuNL1W5XRkk zB;#4$6MRznuE?0)=Dh$zK)k<3FLL2R(rRHxYbn045JaE4Kj}zo?L`go7k`0q?(Pxt zFdBw7z;m*>)|u1ZRm$a$?FjhP@ETd|r~Wr09z^x*j8J-J%SnCb9cb@ZDu7iQu_)fe zCX`lmJeKPvvmLTjvNgx(P4ABbKDz3@u6XOMTBnvmJ+2%@?6Pw$qx8XE3=+y?J7k}v zaUvM}%rmCSyr}!nYWw>OUk>RMLW$5IU`uEvg7`nNvr|bPfs19K0j8)}-$CbbkHapm z`*IP4L;d9^@9|at=DPY!KP_la(wFzMi@a?Pvs bq!>9BIuI_bJm)y(j o^w?n52>xW^*9Nk;q z3kSn8owTA_Bm9L^l}3{P=i 7z}u4nt_Ud^sVE&8+U{Ckp)dy3s2iHZvm)dFZcWV=J;K8NKa-4AbNcr^MBXN zE!+Zw>)NkW^E=(CipV_6T2|W(^?=74YxmlH9z!kx>k #y!+&}R9|y+n(m9;;=I(Y z-Ww*oNpRu77!bvDm0X_L1c*&?_wA^)C(sCfmh~|>CR;h`O~O1g2zgWE(ohKlJNb$v zZa1p+7!NHf#j7lk{+N@{v{|8TM1Tk<8{XE5K+C-Miim*19?c`j;=#oF75;d?5p{(X zM=ORk?(UlX^zt}_XN-yX3!J{1f3=Rr;LYaiMgz5I_%r4D9*Fgni4hM13K%UYmaj(s zm!5LeBI yT|0 z0vn~fl|fu~xv$CZlC`t) ZH zV6GG+kdp8zU@@7$eJwwQ-7yaK#gdxhovFARf@APTlmOZ-*JK#u46^k#9J*}HN-0Pg zO`#2eP_9ku^aaS!KxwZC&3z8_h*id0$Vf!5@FaUYU!uYbV-10T4DZ}FA}>AlNrz@m z`>IJ)V|^Ukq);yP9)tNwI44F(jGOY?Myd)jcP9d-K2T7~2m~#6G23Tb6@!pp8U!+u z%YefpCd2Qpo|9>?voO_Uep8y+{lNZv>;ABvjLb4tjH+(qZc^HBBs;kprb*jC&0jC1 zHw88o+H($2@tUZ4F7vwI+@=1Ap
vs45$_tD%vwtCRASzU~Jv(G-L zH8J>0OLXhkV?Z5C l>R{^q%>5RN^AP_B?mz(Y!XC|Gs$-eFSOaJ`t zE?dZua}cU43bC%pWhY2JIQ=5 9at11enGaeqO!PJdp4)TYbcBjS;qu+HhAHA= }Wp?&hL&}56c>_cSJE+?58=+x0Xv9a4`UP-Ar zkRYBdeCgYxF+b=mgfJfZ+5R(qv;Ht`OFYQO_5}JN_QFyKt>yYf^o-
_d?E*shB3}JT}7JYn4^5hnO$$)ay2VLvP~rj`CPpwIA}zdD~CdM1ab*X zh!F%9j?IfwrqPvaW_!|%GO%dSbKk53TPBE|hiyrHPYIQs>OSaQ?p?BH2j>x5_N5?{ zHEeF#>{A)2$Bx+tHE9!V^@lFP)_-S^8g4-C6L_<=klB{xfF-iJE}KG=TJua BaM%a3eIdwVl&?oZx{t7~t~p{nOyul@%1jIY9QJ zbb*%-v=v-c3l$TNo0Uj$e$zLx=6&6|ryMCjVSEKall3+0ThOrcUT6R%Fc!5(d6QAI z%>Hc*oemFSzEr^}TpR$o6LC%m9$_TU5&J*qn m-BBmU~rfU&Ec%( zLE?_B7RZ$d<5_4jf63iRmDXjLeXPSl<-%`1T?{6K$OcW?HC6D5T2%Vw!CV?)z2}p% zcZIPnf1P6=NbE{e$JaPGIMw;39>h9t4P8?TpKMzNo}jb@yK|#Q`b#qe75}I4 b|!lHRCpZ%zjmy&+~TvM8`?Ub%`{M5MNxjIzbdi>)`DPTGnfO; z*F);}Cg{j@bi;+$_%wa+Ws&~{%xS_<4tt~g#E$AMPU?YL5bAyFAK*B(6T#FQZco+S z%SAWQ&MWZd7F0ve6sur8+-tt6 RHME!7d0s!(TzY*Y4&%_z zPhaUP1k5U4-?#61C#>Eh%s~L97o?sJkVwcztwlxnpTYPvEq8cJbFqwzip=oyB8&o8 zwXBJN*0l3e;1hsiM(3}$_VhItP3-)7#TbbGFhYa3CYe&7#tv}tYnLj-t3QH$3@Z$F zQ%);R{|@F0Ll8tgrlolIiH#*E*!t5LIRS#`FnUvcax0Zxf_J7_JGsHS6X*n}D%&H& zTP_UJM%Uq*%FUPIJVf1c!fYAx8mgpr3Q0q}>snv+F8r{7zx+N}fWYkkA>zCXc0Ywp z&KY!`Fp%;XD=v36+fS^xuO2;F{y&3scpqN2y_(ztPRX+*jsB*cbf&op;1Uw{aG7KN zM( %uG|{rlz4ob9kh05?(jlRZSRFr)dW$*QrYD}>Xw736=DxZ()@{e zL)ZYm1v2VRxZErA_r@t{>Fan1lHrRVKM2%#e)>_s4HE}90|=4l+xm%$iWHTIZZcvb zR>plZ`&_>fnmk{xoc%rS1w<|MPk~d=I8o;=z~VZ8)?PN=dFF 3Zt*GnXyMbGWt9j`#UBgua<2}$$a zeGcZ?>Mg6a8_m0u_rms|8fcyn`~d|@3f1Mk4)@s-tdd(Cq@wHA=FGfMO)DG|5d?)@ znQyYf9+{Uf*#bq$Q7JV#NC}2VFbQZSTNM&B5fFDIYUg!}Mn;fec8DSGU`3#B)*lvH z!kT4vh&q iWj5OZY8Tj;$}MUh(J`(S_fnMeV3o&l`RC7Y3Du+w z5+)Zw(sRP<8$gt<67{phI6s2w$PTTt5=&c2a#1scffhi6O^dXA TpCl41AFg^K;JGm a! zNj!W@Hlm^&y7eUA!>Uu!d5;Dxxq|^eYeos--{#YsHWQo2(jnlktyc5>thWhFU#3KI zLPPU%>;QfrLebV-pCy2`It!^d`qtT1;nkDhzjzGe7+D<+U zMzS64E(M%9e CABHsZSEkI3FNX z&9-JY-#wdw+hTz10p`vo^v-;8NMg?Cf=S1XW8#v|82>;gg{L7(%_oek@eA0&AVKYL zOC6)LM7bU~3fd>I3N9y|Ng?9@Bz%8~-}`c3IE|p|qNZb227m}QmoTcI;`?;HkhDnm z(01t;Abt1Q^EeA#klv5-@4j!Cn@+V9P5F2HMO+%g9{0K1o#9Sv^X*X2-Nm%mPt*LD zc?}iU>=Af3kpYEy)KSUu^=& d`OeHVLa4;>A$qYGbl;NTy2o}U^jg-gu5p}x! zXJ$2S#J0(1icO&^O|DaAMVY8aK?mT-^>H?kKkyZ#7BgRP(+|n=+^;pC1Mt8gw-Am+ ze^2Y&C(A7-GQwt1yCT7unn7(z_?_%BzFFAJDPUAxvtzx9dbmOJiALAodxHf(LXB|P zfa}d0qBmBCf#E*l=Y=z16(c^OQ5W$nZWrI9r-80$3dVEN_CEl&QJ<(}_rWN!fa@+q zV$O*iDT};Xom89FJpZ`#W0^tn104)sp6WKvlB|4gXB}URgu$uywFDkHo9HC9QU@_6 z;f+~5V_BFka#)_j6|Q HifGpM3U4qYtp}C{6G`OqiaSC4A#k+qK(zvT`_y9jeM=#?O%CW&+v^m=4 zoQ|9N%KbeIMRdvUO*8{7LU8S$3W-TbpQPD-y8zOQ)gr&dI6E@d*X(gIEyX1-{FZ}E z>w;K;FO710S*#x)g6Ayb#(?ib2w>vdGDH=j^|QJGZj`k|4TW`BuH4>_J5wrU5B z2ZZrvugEk$cQ@H4F%3)R-x)VdwPpa06wthJ@C%@@j~YcxD!okIX)R&YbB@xLf5;*(4dakPO-Zh*_pTkwrI*k>nkmw7EUe@u9T ztuQVEW5; %Q(HiQF*>TPZfTC0Z2i4y zv&rQ=Gg||j*SyAJXBfD;0|*p(2Rr;JALTl%`$nsu(sj-xFTt *FPbSHI5Q5 zZdWoGdOxHgxp~S=-@Ba}tB4w7fM*8@&V9R42Yo2luk1FcoZ<2E4}KR2@(qZxE@8Xi zxif`skFK1e0vY5zec>($c_M!2;|B-7e+Q2a!u5iX@7u`@JlE}4bi5AhNSYPL5E=pK zAQ#`$TNcR&jwv!M)AfoP52b~SZ0o1N>Q{y5@PbY=Q1?qk*YP(@GruSM$-iCk!f-_K zR-Gg~v>Modf%Nx}6TSu+1#)QvG0guniL%*@95Sj0)JOw#SkEBM6RR<@S{la`WX0Cu zZ*YH@X6E;BOEabFO`x1`e%U`hhEi}n
N<4 zW~f8`%RpDXBCZadIR=YyNL($$-mxB1ywx0=jhQ9@t+yupVm*PRFS`Qkd|Ch$@Rm_f zYS&&Y#3@ZR;Wmcm1zzn)DlS@tg#0N##*(h(&t=YfHKK=dgj;M13=cq0(~%uWaO8UT zuMJ|L2N+FbES$vHU$s>WK0^f4jIRRE5lOuNW`=RB#FUam72)IuDm$Y`nhfCV->+U$ zRc1GrXPCu)V|HEA;S)bSHooWW0uFR^x?uQ)+%Vo;WelyVE6@ZHp-KddYQQN^5j=`= z5w(7tVE3~llNi#Jc{@ci3|tIm+>TU0@!1OCJJ0M6dM|j$MTm<^N^rdCw1EBJK2?}| zyzW}M;g;&j_kcVSi~)Xt(LmHTEZ7&haQ!a2)7H5E)tD$S(ZtM^zm$!d_^#vB=_CH` z>a?|NnLK=X;F0u0)(!m4vLopX)tNt=fdW*lceStpC0F!J5e<_59y_n~MD7h~i?;;E zg<7wS4LV6{I2%OG!rvSYa1`r!9-@(TVmw`J;EEM$sgDT1i!0duAeB^}eTffIN5ETi zTS*`ycmCk#kE;my8x#4q5kVDxnf7K&Hy^@Vw zKC{UBHuS%j;gZ744mmw7aBTs-^0Le0cY&d|7tqC6^* z6m?GOq4S3G<^7|pEg!zQNqD}EMa{o`aFv&|uW GYVm<~ z6?e2HriuQ9-AC58iqmf! FZ!F@k1L3aO38$hsO EHm%Oe4b3(H;QCNCL1GMcKg1MV_#boEJfwCbiW z4~b6AP7&K^b+fu0WK?9HNRVSPhNpZG(1#wltW^wi2xJt&ffSsgnxDHGo*~imq1xy` z01Gk6N0#TcK1N}8-K5umtC9aC$sJtTPxB97siIH+u#ATY@Csi6>ZaQ^O>hswG_r)M znP)M!G#^00#GcSl`|Ib9n-{LzoCxJu<{il2gEeO`je;Q*G-#7c{}@l`7n$u=Y~_UG z_T^)jEGG)~=WD=_5~qR{ K4X3w#^o#4Fu z*PlKlC+I&91F>*lIGW8K7-Lhe#iCQmX783(ZQSfi3C}#>5Ljaiei0>nOEu$c_09)5 z?(^|UMAUE>6r2L`KiM9a_o1_tII`fQ8AqIyOk{rge^lV8XDSjnWVtX^!1Jcm8S=Qq z;pCc+W<*ZBOy0w@&UnPIw_K~+8 +y!YLEjn`d0}9GUvc3TjTh+1O|F+AW1&S2N(;>M8B1&CAqx1Kw!y3{KGOPst9i&y z#yOvSNk4^G&6q^lky6>B1BBY5msv}P2AB0zyRQ~0&2t&j1lZAre lkC^ey4ZiOzTX5~;ISId^Q})A<8;b4=BZh>ZpQ&z7ia8Ow-pN `Sg{Pfkl@N4M=hs)PpPGI3XQpc5eB!&A%TDtzA&lXDU~5;@FN!4oR;a6Zfo z#%)d+Kg$>m_fVy!Ixh$z4;9p`96@A@PCA;fzXCqvg<|xqTgx8Y`U3*~*j)Tof=$)n z47AOjdNgEn+w*N7hRHKyeyE#~wwgVOqV{T4iCmqV*RDR@4KbnhSK49QeqsM8o4 ^1WeDq4m7T_|IGm__+fQNKq7Xp5{;v3*2n@#h)BOASMI2tK% z?Vuz5Ki^d`U9E*Q^H~hd$eJjj5**+c-b2Q_r_~fJxFyes#tRjn_%5sP(o}mi7IRf< z%_{Rqo1hwxQuIW`;3%L+e_WmREtHvQWB{Hl3IG{$8VH;5q!OZ{;WRGf@?tCJn_mC4 zi$KEbjVW*~7)@|~fz74!SNJz1CXkeLbm?ddIr7*-azyV9qNJ9s895bh`-4f6qf5m% zc-^i=+7>y!>6lJ0XS&=W{Sxmi9+0i*MQ6SIn{OvR2YEcu)R;~or!(&ToT;uNu)t1O z-gfZL2PAz3*x>!P5cPxJu+zpKTZncs6b40}Wa206Y8V0&z^2NCpobb*>+qS^Fy& ~`CgpzXF !JWi{-j;-Rkl+ )^QQ;BZ`qZ?UCYEE`IMFRSX`m zE#cxrkRFm=S72KZdJbT z+&b;nG6}=c|CwEfv1IJ}#k^LO%i~I$9h|2GhdTMmst%x*HsD@HwPMSnP=JXaxw^>J zxk(H~1#;r7NmUeyVlJIfjQ&HKo39 +Na7 u2jl{=h2xLaEi0x2Bla^oYcl|pDh2=zTkAyWJ zZT(CXS=j)c6*62Th)TCoGVUSj&!09tu;;R+x687ylR* }S1a zp;<4R5}=;8WK;V0q%8Qpw8Af~O|h|9&>p9f)shyTi@;(da74KLCb+FzB^PZn5Kkwf zwTveGyL|2b%taoA&PvzIf7~0UBD`4q>?Q|g6kRX( z)(qZ2<;P%S%3}