From 808c38cb2a5e83f7f4635d7426e59ecaf68c6425 Mon Sep 17 00:00:00 2001 From: Developer Date: Sun, 18 Jan 2026 21:50:51 +0000 Subject: [PATCH] =?UTF-8?q?Fix:=20Verbesserte=20Netzausgleichung=20mit=20K?= =?UTF-8?q?onsistenzpr=C3=BCfung?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Hinzugefügt: check_consistency() Methode zur Prüfung der Datenkonsistenz - Erkannt: JXL-Koordinaten sind bereits fertig berechnet (ComputedGrid) - Die rohen Kreislesungen (HorizontalCircle) stimmen nicht mit den berechneten Koordinaten überein - Empfehlung: Koordinaten direkt aus JXL verwenden, keine Neuausgleichung - Hinzugefügt: residuals_only Modus, der Koordinaten nicht verändert - Verbesserte Dokumentation und Fehlermeldungen --- .abacus.donotdelete | 2 +- debug_adjustment.py | 307 +++++++++++ .../network_adjustment.cpython-311.pyc | Bin 33660 -> 55240 bytes modules/network_adjustment.py | 501 ++++++++++++++++-- 4 files changed, 759 insertions(+), 51 deletions(-) create mode 100644 debug_adjustment.py diff --git a/.abacus.donotdelete b/.abacus.donotdelete index d3c61f5..a20bad4 100644 --- a/.abacus.donotdelete +++ b/.abacus.donotdelete @@ -1 +1 @@ -gAAAAABpbUrgAfsEtgsBaEEnTXS8xH_jtk7qUW-EO7IcFQNWP2oq7Du1TZe_BJuyvDodHC_8SxiOadMq-vchq9JgCW7TaAPslRkh-4bz3n_DeUl02iCi3yeT2J0XOKzGzEKq84UmF31fctfOtDj3TW5V1tGu1bZzmCkza6Ticez1ol4vXMkLNDRLoPtWsVKdL1iZw7E3QL4OMP9YBrifAxilITSc4q89bwsVZdc2v5TVrr3VzX8p5IGkcXKWnqll8Q9abqxkwhbCbrrGNLFKZnl66wgR6MlY18xCmtZH9yu8Nq7Rj3ll7hI_dvIAdi_WFwJKtlv6ZD1VCvIQMsozJl9S29FGsdX6o7YbTwIpMrF_1lKlaRdq87WYQrgYZfrgAJhNe1xnU3c0nLqOrt6yau0Cppwiwv570aMoJRgkXy0w-a_ejYLwtNPNcKJhDe9BmRlbQzAKhXFxUJggtEIC-8ef5lCIkCCMvRwNNJdS2Yy_QZODV1gSG6hibu4-inMuUZMJwnMfYomTZh-sSN_1gQXrIy3jZlsBj14ov73_htwMC90cu2nL5YosakekODgKpJAQcX5KU8EDMM7W6hqKbzNY-lxz3_UBY2Hgi14_DQB5CzTxk-yNl4_bQcuoMWL3Hj3mMmcM1zNVqLsWJOC2PySmRbRgOflwgUDlhP6BFlZt5CucQcxJz2ZRdtD2vRHGxnAOVntQcIiB4Zva4NtYkn5nRlstRZW5nb6xCP39Hfq0pUEl8ma02fzqFSAh9q8DDgkEGmmca2ZgcXaUQoPR6qBm06EqkUc5UasIhd-rv11p3LbZvwyn2SZ7RIJFpVCVIJtX9QhlA9tROa4ato5NaL1NpoLv4Ee4d5naJ9AYN3UKG3ojTAZ5xFhMUBxKMlC8kXYje6wxMyFrLx3WBTpK0tODMOym5iiQRtpnsJcm_jpPW31k9YZ48a-kua1LR83Gmh9uogn2oSrQnYDzPJOXzxmSoA3wHMpUA5ePqBrLHNK9EyuUfQZuFXkcJANX4NHKanrxB4kiDint747du9WguiCFeTlUPjKMcXF3jGEWVqixMotSxLmPumivt7PpUJWpjAs--8GJRKYOu3os1317isCZJzoxxOrxvozogGA3U-M1bYj7SzRkMEe40agw2seD8mCEXN6PvgeU9p7rT_6burMU6wUI5Bhi0CuXxMsvasBgyBYsbW2MPYOKm5Q79O22JML2V-m4XK8CNYJgfhBZixlm8JYhsUHz7ytRP3_ItIOnnZks8zxpLw8X0bvZnrrARsUcWc9ja7_IpgyAKBhFt0PYgweOrgQ5OH0I_PFvn1PT-tL41WZI9SWcEHcjnTqGKgB7c5sYZXIx1ckVmlwAcet3LRvsVenAC87l9eiKh46333DJJ13ew9IP1zdw3M7VFEVthnxm0PJmDX2jj69hRENxFBw4Djeb7RL4zO6yESbHuGzWZeFYLsqwx1V6YveENeaUEBDOc15W1UcNTrnYbdYmtLd8Revg7a_sJczS9WP9hNVVdMPYK0qEeBGxCQbpYWQwd4QdzEPnWvgMF2ENIXUS2uTQg2zIJ-gtI70XeGu37UkPJLMns0mqnJAoTUOY1wW9UqaH2AhmzvmUcgZCxia11xIbVNl2u1C_3FXjBv9Ymnho1F96VJYovVmMplmSgsce-qbipR7aID4rmiDgLwpz-PkExN9uq5-tc84Tdt4ODvg4b5OF5i6WO_gRVDETZFJzURBxh_lOIHU8zHeBIXIqFkIZ9BzDqLBLez4z-O7RHxTjy-MjUi2W6dWH0uoFBK5lE5l2fjQdsdhmtiz2tG4tYxsSZEYrwdbxzgiNG8QLf9i2xXUUqWJGqRW_d2TXVn-ZkZVca488R2dpTKDfHkXQg9_i6hNBrtbHGf6hR2aRXdOElKUT7Rwx0nbOwSAnF7i7ErbSP_76wnLJHGXzCbNpf6jQfnrWkSABlSjbMF-GSJI5uUDQzR2UTTHXhFPC2gQqIDlNLN24nH1Z4vdlFpfSlcFXvX5b9HB8KbF8oqHs4z8y3cOStjZiOKJpi2rPgK_SaPjn0vXLChWsSwn6jQDQwl_VWjlSjlrmLdcX2LDXkl0d-cnXFNKcS39aACB4OMPE-GOTAoGo1VJi122BMh64CgdiE-Z6QIpKQ5nW8VQeYdVRVh4S9bsEIXFnvIpM9xJIrtHkKSjihSHPFX8b85J96uAiPhI3Fu1-yXjLI6lPUyb7XQW5pXfC9HUBQ1UTAoExsLp0FL7IvUKid8gkgNNDnJm6wd6pGU1zORe_JxUVbsmnkswjtZJJFkjUMw5lLQQfgD5qqVMuyyyg_aE9u4snU-TXFrbfaWyz4dE-qzP7SkhElADRyr7bT4xXr010rAV96SAEPwzN1rtHdPgD4CpG75nHH6rZKIuUwSu_69i_dNItmyZnRNGvR_2lL9xnXgjcM4K9Va2UXruyvleZnKsnRxlfGLNTg36QvsoFYUyc0NrB4iA8XSpzuWt3sIoPHkJjgv9DIeHPRwC7GN1Po7JVs4OHxcf8njn-fJBmwtXNyXCUEncfLHwgVEjUm4O3y0NmzSyCsLoU7V4-Mm-ny9RMiknv9Lvk_KQ6NxbKWp8AD1EUXPlUv_ZKmcuFb7C-gI1Lw4VbKDnWOrpmZZqG7xtNLDzpgcBlECVvOn8zjKKV7_UOc-7O2kSVReSBzNxSTl7YEpo7vS5DXR7_jYBxv4_42e3yVMi7deGSMex4U4c3z22JCYP4NSiGfh2ixEz-uuduGHn4nXIrgESk1Ak7ME9FfhcnfPoFBP7yD3KIobnqyWZ1ZTS32Bp2EovS6tXByvLHNDN8QpreFTX_swu2kMfKb2PhBNz0UKc4s5RajwdBHl_8mVM5ubxkqPIt0rLzV-sEjU3dPvaqVRXB-ZfWufJTudY5tZRF0uDnBCCfwqfeAgilJhRjaf5G0-_0X5aJ19FavpyZCs5qqxHinffeyyKvfFc_lK04A8Si9dQxDqx2nwFcRg2Maop5dEKU8-A9knYJqM_WPdQKQPjARFgvttiKnEKHcolw9OtdThN-dPjN_1BOQukTSh8-klTjaVNhvwsP_E0kS2I96_-VNwUrkGRhnQlO61954yrPX8jaNySbpO9KLRqMd5vpewrEAdcIaghpMw7PKnPsf3YiUz0VAdWp36mpOZ01-2c-w04FCYt3XxUC54wAYqG6O6I_a-T_9U_GXdlEageN3NSys1vgp6vSUm8-orC-6Euhw5XJU_RxESMJTF15YG4sW6RtAnur1h1pZqI29Xb-5hanv7r9K_gNOfdT_eUrl4W6B1qmbSqYpI1HrHnBFN4H2Boyp3SbajtD_AbLz4Uvx3YNMWdZIZTv7gsnXQnSG8ud873uhUp8ucI5jSBAZJGdBgTYhFPt0D-yGP5868bJFv9hUGHVMRt5sN-TzaWEwaTGcN2_w635BwWKt8UphTb7SSflpZZcV3_F_MhavEO1MIBUmalaL5QaS2DdTux3FwiWm95WvL_YQ2XEZoKcZNqtn0p5Tw-zNpf2krCdI_BMN3zSWOFe9UjUVfAaQKVIKgRLiVKVEgm5mnCQ4OGodQg7r9U78B68cj-LImqD_f_iL_jiDPlNXybO-pJ0f6V5tzhiPfiHJ21r7Ab9hJNou0bNiImtrG-URvbSl-dquyd1OA5xItgF56geNbverDjjVtvHLRMIzQwQCwLuFyuAkanet7yyTUA7YQi-5qXGkrvCK_F0VhDvMGXbLpweb8tDn5_u-ByKubMGsdC-D5_8PG871HbDxTEYlGlfklmjSdSAyjbVZ3S9llaEXTVu4Or3raJd0cKJwJ-Lhl-Ro7scR1PZwSR0WqQ6oxR43YryXgpkgj4wkud9hyuDtdoSn5OeyKzE_uRzWlpiqkcrtgy_q2euoS4qqnL2fYU5HsxMNHO_bLT5eno8e5JuDz71tt_f9RoQYhU4Ub4OloVghGPuQrsj_5sS7OQnWo5yNk8aIsFxQLCmXxhyOqI10F3u3oAgQ1VRAErqWkx6-0j5eVbF4TD16c0KiHzcO-MGgyzjL_fpE3tFagvFcwR0hxI3_2K876JyeNrw9xxyvzyZYLqHC15l0syxd9H2HbQzEHUx8ys-UCjm0VGjv17osdlza93mXDGTP2J7VArOIWH8AOxlbKoC-3T_Y8UiMiXxGN3baZUZze0_Gc-19RJQcPDOzDfCKZDGMd-n1LVULI2nmNWwPxxJqSdA-BgRfZrw91qV8eQwlJ86u6IyVmVRjn-YEQJdr86Qdt6SrwkSq33eSU5npsnxOOvRLWvT1_-r1Ko2XF6cxZE0oUwUIlRbWhUC93rjZs2h9Sjpqlm_o7fcUHtStCBrj1RjsOdJfqjtRpokUqt6--rqL6aA_pRz49SBdyIVn3Xi3dW0x-daCEc_W7eJ8pp3it02XmKNxGOmuuBlZ26UJXFuWuhxAo0sp3qBK3bOaIt9llF1S0Ek1S5AY1mV0VnMftfGfWEocQcMLO_sXdOOD_t1gj7METMoflynHcQeTISPEVKIu3yiz27XLGxyQdHKFKX_kOZ7SdHy_C7YEXh5pe4LKwLnmkMDiNyYFeYoHdJLXekpfEqFD6vY-sZzO4ACyhFRqqZ74iW98_ysDaTRQOJkmZDrZtZYF5eF-Mhn07DR8YjUFNoX8Lsj5PbsiD0jkKjR25JChtb7tAqwGcq3gr1wEFZAH9d_YOvd6XsB7H-Vk6g365mny6WWgHdvNjyUdKvknhtQDV-HzVU2xCp8dELeG5-3KDVhhrFey59QsqI42fL9h8fj5YeT7X4Fd7iTu7uWCMMap1qNLF7Kiz3wlWkh9A_gI3Z10ft4DC6bB9N0S8ScczQX_-ADNIVRCSYCp_iwDAfCmdmi0xynlXKxW-5kzUbh8Ox2eX0ewo6mswU6vl7WcQNdgMlWc17lEkGq3HODPy1-cZPtUb6VmLpbLiY3VkanvVCqeLUHRWKBMRQ0aKLUJpCOIsdQPUPSg8oftoDui6kRfAHivg1AHqmhedxVoTRTqz1p3IgP-Z2fk9fzP0876PABs9UbJ7OAoZcwe8q-feMv0aWZeNY4GnOuzdK34dIe3JOLjSODDZo-XDCtruxeaPgKOJrWHAS02hUXeLx1JA-lkdcaNhPVqh1uVGmXMFMlWqf01rPXEM3J-klgJVxNc5fsG1f4HVemwvj8BdrtX5OUQZmvgvSBrjmfOU9I-4Bec-b-MuoBpHdaFhqusaj9e6Tzoc0K2YrHSd1xp5KuSO6e7o7EZTF-DimsgX7sLurGdiXH8A6enUKyKfVntQbgLr_vUpdBdaDO3edFpcGuw1Pw3s8svcb-63SVDXwekOqCq2CBPgqNv4_FlVF9LK5HEAJEYNLjC3MODwPgSS8hw_1EaZmWxiQ2QV7uyQLzqvbWcWw1zh0JblN_eyD7pzrjATPdprSS88qu8XMjRkMgvR1dHE04eQYu8l2yevgxXnAUoFT3Mgs0ZsESKSzrUe93mI51DEfZRHj0-FhqZee-vY4vnu0mi3Kpd3nGLDL79A1NAqlw3_5i_bP8Ag1X6T8zN3Nhduqy3JsMi4CWhelS8gDz6xE8XEzB1-IqVXlGgHOqm7NRajK4OZSEspHtlEs0qMoueWJsFtSiJoH_Vp0GRscRNWV05Y7-mNtetpfrlZPJ6inSK9QY9GLY8q07WVNj7reF_Sx2kvu3ZrWeWM0b3mcs-HFN1oL5kXo3MpbkMx6tky7OX0LrTeTuTlVX8MRgQEGxV2pnUzvx4UFVq7NMo4-t7LISvYMUsAYBNov4hwuSBIQniM9X7elx5WmzejdTo1xlg5MF2qGM2c3JaUEbCdTURAuiZcYq7I4RbKUCvQ-esCDDf31bmomRoCL-rF3ZuYDE0GqkMFElL1q0HWtEuo-INjJg8dB2VcIdsIPe-LkEH1q-Toz05UvTFeTY_RNUeGdhd8Vo6J3pdT8PhWbtaKDGvljXqrYvgYqRMp2BKl4NDFxoohaxellk6rr7kv2pCLeYK-x91CiUvQXdG6IyVrRi9QqZCAX4Fv-UprE0tlpZiksp1ZysOVKvqJMtjWU41jZL1DsUtJsukCXKBOJHBPzEqsNu-17Vxu6kFGd6x5ItaLnoJoNscCtbY3Om-qzV5d0Yv2oGPNVxiNYcgNGyccm791A-ibYiwMrP8F0O08KyT7YlL3lIbTHdStcAkmdKivm5mUnv3BCx7iifLMZ5q_RHxwIk0IZr-PIH0h5MeRnWKv-Zng-3YkdNDROcBF7tp-QKB1OnKgJIkcnDjSAA28-kk8o3_Qyyl9EIOs2byVXgUbI6E1BHLy9h2bN2boB9pdIlHA92HZGN8BdQwoL1d99qOVNxriIwBQ720EyuoH4tqhKs2u7CfSfdWulLSAbRfJq5f3vRVWNP-zkIfcWtf4CcKSW7aifjZCXME5BPOuS9qUEx74_QrKBnM7KN1RMpa0axlxvD109ayu0LlJYMz9niFEhd_M1lcrp8tbBStCxQTcdCYbaM92ubsMBgN8yTk_2crd2oczj-pwkzT87Tk8yfIC1gvZ26D_CVK4r2p2O7oGsUPXAB6bV0hrRlaXqdzt6lcdFGLyP46mNEE9Nt8_Fjr2yKnmZ-TyMnD7lHc7jGBgYN_5_YtZGzXVoTRoQU0VDKGkp__abcRJEscMms1cQsbm9CBcSzFmlbn8jP3nz8ygxdfsRtsF-ezxqCSu-GsG3rRv6EFh6MDeVWEVpU3x8qRaeMDb_HPtHGt51ntDHGk2spW_ePvvYajnqo0Q7nDN_ztr0lUGxFjU75m2yIYMR0jCmb-l6R4Ow8d9-mqo8GzvvQC3hka5dF_mQti9-Mt6SFBvVcoq0xDCBYzZKqHa93SNgVrSqsA5TAJ7riJt0ahhWOlVTnmKx7pIaIMUq_tCULyf8SMagS6Q2hH6L0eOHwXl7s96lWReC_SEUgNxatv8jN2I6qeEjn3DkeiAfzxPWVleUjvxQckJd4L0aBvVYBWJWw9qCYJ8PW2hrLsl55TFT5oG9D357LRLAh2ja5cG5qEH9eHm6ttl4yuqGZmxkX1bqrm4Ejq5BNVd9qrVF7LCKb6IobmPfOX9or2g3pFoZJNm3KVI0SL0xO_SDpQZDMlH_q7cEowG2A5wDQhQIiBvoLdiaFvEZv_T0KzeGU-dlanQy9t-oDVc-4QvLo4IGzFo-5DdcDtoyzPsUipSJnHBTtjwYq93ZbFKTODTK9lXssFVcvHq_u9nY4NXMChB3JcMBT9bg2HqA6TeEo48rHAJ1kbaBqX3UVSvC8ENdTW7v3_jYRG0RFEcAxCtejg9gbtSi9S--OMFlkdvZGTtlVFoYMR1jZZiFy_Q7z_Rll6Y8cLtgT3foh2ZqReTgNe4wV7lo5PHwsLOCOl_YbmXDJ8DVpiF676UclwsO6FXuZQma58XtTi-JAwO2ozpipmupHY_1ChGrWNiNs8cp1ndMsN9Km20FEhid-K3cGuFNEqvnjqCQ9BVYXIF8ALTvOTmZdpSo7aQ910x3ESArSwMa7S9g3uj9iF6DQ1mQTZ-1t-996bRh56xGsDalcDguattahaENnPwAa-3eK0dPoANjcLid9oQDITjnir4J6cbxJ6hH7DEtOolgiYE6eN2qLt3qi20TCCdXf_GD-YUl4xoj67zXMatxFG7Bf3XGnQEMppJnR_HqHQMy4gWGnEGLZ0KOiJ_N1DmFVlwbRzeND39A3Zqo3bB1jyz3onuJdhZP2UHzDekMwmVb3MIvC8edMK7pd9VgfUixFwjCgr9gCC691EPtsS5ut_kBN7XIH9ppF5Rs1w6QgbDdDrYEH-Rl-Nq5RdAISjVfhkf6bELhhnIT40gwvfMgkiR_LTl1otJoSJnUprLikLft_DJczyEcZqNX0eS1U_erbNzCu2LxAt9melkJFesgfVOlD-y02-zr1X57wWdeWiN91kIVthxEAa6GU-2T8gOAjuwaCoet74_ENJK-ylbT9eUXjj91MxJ8lVeiTGz-gf84lyQet7n5S7tTjmD0MJgB65hwMleUf-x74HHLcDnyQGdX97UlFKnxfV1mKCP0XGukSipowIXISgrphSa0hjjs5AGCAet-ez-lu-nHJSSJUehJpJ2SrwvPdJn9UmNUk3ygNhLmVdnX0rOmVuGUWClh5TdN-DGllocZcyV4HjlbrgMFVn92RiYN4YhHKf5xYteS7veavAFhi9ioTwYnYMpBho2lCk7nJjH_Y0KkFxJ7dVcjpVDEzYgxU41rFmCwVpJe2LQ1SE2XiFQcA9Qu-p5G3WJIvzhegk0yTfpWfmGMcMKz_hh-XVT_9QgRupA3Hrp5PA5FbpQHyLfoi_RHnB0CTrOizeecaEro21-ycKWr0XLfiDPAhjs3ezHysGDT0qdcEDlC2AdiufYW4klO531p-UI5qVeXEAPR49QFXQx8W9jgHt3rdWRjEvAiGERuC8mvefKP2EA5lALDomemvOv1O7snKHAe-3yx_RoY_WrDeJEKx985u48PVWDGcRJrOw3XlZxjqUuKmJG9KSLkEl6lSwEXmLFjCg9qtqvwjtFJnkUmHnu5m1CFpiXUjCC-Uj5uDtOZ8YsAxxdNWtPBuAcfSuj2U6mr-OYgCK4rzMYMWvjjdQedqZgZ8aQtCyE9LJBxBgQxfZSVzQRnTLTP0FWMZkRwcR8k4Fbntsm6YDbd1z5-GRj9AJxWVqSrEmxytzqPQbwXxcnKVD3eYXX2-l9GD5OvUlEN8DuJu71rKGca0M7EVIctIWQb-no2lnYMQzMMsDRYWZT2x05o223YhMJe8AZBcGnWKlZc01tgVi7tVtI-vmMA3lXH5kTDChre0EiYtQEGRQwGUiZs8S0QOYNf2BAIjbYf_NlNRa79JzTHPqhl4j8N-aJ9kmsCUTACEBiqNXUlx9_KeIxcO-fijZF6d9xFqMXp_nXpdoweVn9ETSpSUUq0w8zluICInlKkUXJ1CTBkTXILRNmJ4bhQ6_28eZRIlsHBHZ1zNozLjB7Lcwm2qJh8ei9meEg_Qd9tmQ2oja0Jm7mDLM1JRgyjxyxhpz4SOwykh8nhbUgkYFb2EUqt4JgSEIk4PGRELhCum4hJBq8kKuOZ7xYBQvlVyL6s4XmfmHY99sIMNS9iQKKB4aqdCjSojefKdFRAbVHkax_ivETTVokHG2PKHcumjbjlv3vmXAEsOLTZHp7bdkye6s4krBs_6VIDRP5IAv-AZNo2Icul4VqS1zn8fY3oyeF7f7Y7XxbNr0ZsFpznzF9oCFh-DWhCPyKW9aZRHtsAYq2TmRTUmAjgWZ_1tyoTqy3YOAvQzRB7jaIhNA5lUP7B9xjqEYRkHfTKKK8iN4c_IvqpEbouWyHOxCeTw8iyAn8L86LioRCDC9p-LP8250bfznnFC0g9tNhU0HpKYb5Ws5c6j6cs8HmBbljD4q8IHe6FGTANweh5ynX_Nk4Wdld9nHi3ngUi2Z-KoUwV6-Vo332pViNDs9jXtHmj_wmGlCqUlWEtFdXtdYadcmB_87AgDJ5WEzlqLg7cN-9JmhUHNoGG2mVXfrtxkDqipzr0TT9PAgziYUceua3aIJyJhI-G3a8OWXMC6uva-SSlT6XVaEw9LjW4rHddCHSJL3CQWZgNCivYbW_qxUNfi2H_xcnvUviOjFn-pecETPTOa365jALD6bI6cpz2dZevMxijCLT7ahZ4_1rUYxdyy5e1AY70tOpFDtDMG07D6QPKopVym9Bj2TxWI-naXfSX2jZ7n3g1LEI2bcdOzk2NWQawuRVi3o_3R-1IMHD3ZkZj5BnQZ1CeqPrBEbg0PXSpC4A649VmpdIP-CHznQHH1FN8b7Sq-TVdgLE7QWjF2fTVoJEsY50vvzS4ufdgY4Z9k8OX7ikUwz3mVN-lEFiixfKbepLzrvzDOFOb0SkQZy0JqOkNDBmRO0JgoiLlzvmIIjqcBLckNS24knzSa1woXj20JDAbwKBNh0PmH4RTyVsfOM7KL3lKs8L55rWdyjCUwumsfym75IrS4RZsHbk91WeWoljx4CKt4BfNEqoV-ksiCYGZbpry1IBA6SIxCQ0Hgucob4Mg1MtxexWOpNyTHE78fLDXBp5MYmswCzTyai6nT3hl1joaWmZrPaiFNHeCrwYAzyMsDV-Qiu9j8Qo88gaHhNadFH0hnb0N6G7LyWUG5W9IcQBqugB49SrC6WJ9SYSz50VVFP8ZUidmoPR9Zc_KebRBboJUpc1fQXEzm90-4DwMrqS7VIJsFygcJe48opkuKpeNTwarUkLP1hwcecS2uCHsu2vllYF-ZMPYFxjRlM9qWo3ERbUeZqQZTudvhVqJS7VqjKDaMnmVrFVyMZHSNkkIUgRj1CjpTMDozWezy0SaatEjtAgHn9KCeBf7Docd5SRD1xt8lgmoa1XsSAvE1BTAFPUNDHiOqAHAcmFVdAzZK_3_YM_iA93TytLOZAVXlZA9ttluzutBTLTsuXcnmAtahe5zeqolQRgkR8PxwhtZvA5eJJHM87mef3XioEnsN4s5sRc6cBYPpdLnQGqlK9Di7xpTH-4Sj1QQf01EkFMTdTpqhJkC-bQP0WlXQhagcPrU2gPOfUlVpL1PLola67dgaze7K0xDA-AEeS8d-kKLVbTHYta5b796w6AMBhT28yAFN1lfE4uF0Ucvd_at_OVhEH7_RSyQDmSftln7_NeVGSnqWhatWtOqE0XhG3Syoq52n2FOLXK-gfRcyclWwbUJd4o5kFM0R1VMdMdIhDLSd200CPeyNpUV_iPwP03j44TIFXYPtA2xdWuE4YKc0_HjvTwCqPRi9y4N1Stf8Qy-azRMW91YlSeBqsML_Q1VoKW2KkCAcv5cx-bgyFhhBIjKNOFtfYDFIlLFh_mpfFy8bnYifwnaneKeI_VfZOdxQAkffjoJ6pmlHeiEWtf26nEhtjnYtrc1qixoHIHNcWsA-kE16DG0Py2TYSR2S9O8Z29XTxNi8qYZSLqWkuBB9NoP_OY1NXy7g5KzLMu3hBoa9sEr1sLadsLni39jc4c7HkoQL8Dj4kNHnHnapCNKe6xGezYUEqVNsOSqayzpKwrvnjkY03qSewEyLRmwHf-yLfmXD-xGxSGWef1_eZtRLCYgUQng907b51z87WOTfHJ1Y2tqcesNfygQkTb2UzUNGzMZgP2Y2CpXyTEZRaKk6fz-rlFw8NDcts16P8UrmrzoLk80g0biGh7duolRPEGRughN-ji84dZTezEbiI0Z_qI0a14C8L9EKdGwpmN50JTs_kbHFuOC12-P8NVzcamJixZlwsmcsXvowJ4ESsVhUnxRIz7OFA5bdQwDUxXaSloWWn3VcpRoRip6887FS3W5OmkaZStu1tIowapqWr8QVKzGRmSW-UmauxQJTh22VCkdHqrksxxdgc1TztWXbFn4u9YgxhQfkiVH9_NmA5zpAxQb9ThT_lNdZ5yy35xsxPgUiTtY3700W8JZLY_U0v8EVinqhZdbreAcUPZQ8QfkLh9fh9poemest2oWHbFvlETR-ltZBkhGNvek5VSGMrm8SpZWmDmwEN1yxifUxBmVQjNZHMgA8Ukgwuc9yDC_tSjDGDAzvJqK7B9mM5JQhoSTMYf885w2R2Pw92gWkd3uhUwxxd39xz8wMYh4NGurz-7yr5aG9bpyvhfLphGwsAmms0_lMyTxIUJNFmH69XO5fHS74hsO0zVkp0rfVJrFnuPWHJwdgdSkOJzOYsGKUtNoGlMR4waOb0rbo-adjYclLdxEJn92cXFu8SYRxjGYMa4ikpwaB4tJUr8oidiWJ3aci-jSUl8EI_odNLaW3DUWMqPbDJgMUTrLYic7W3g52amx_hyB5OrZ2oYCxuj0qieg1lBVWsPG5VqvbL3aUqSYdyFfTlbVIlMFu9-m-HhT1GdzYLDbzoF73qQ25zHXkczAl_9HG898zHQ2pf8dWO2CNhHAVmaZSrzQ0S5v8ppRzzHspupP-rC5MR-wIio6_O5sTjd58vn6VhKzBPXQ2SRClX_9rtQgBcxyuKiBA6MB3UogPtlHJgKjAOq_2LDNTm7nZx5INKsfrVOC9VzslEaAl38CLajwOVyk1Ay8iVUrUM9N1tdroihX1sG7xt300kU22voCiXNoajuJZlsDH84t4ZuiqLyKF-XvCbguZ0-xMyjYE2txBpsgcgrlfiiK7XxqB9oTWkNhSa0GFnspGRXkvSRcV7FBkU_TnBR_zKcE0Zxbpje5J_R5ijCvQeWm4l25wocetRh-cwD5VZ674hZPPNzN9SUrECVwgu3OVkuzFlHxOWnidgRyVu57PDv-dfhIJ-ZBFDKLHnW16XtfkWAYZ2nh2uDZSKc2UsidiWHHUa1ACQi3ftWMqz0wFYpQ5ZkS9dWTKr7lGMT5SStp_DVqRzdO6Kncm_cyyMuUsyTB7P4TcxQGPVyijJEF6BG5EiUye8We2ZP_EIuoD2V-9eyhka8Uxv6_X1I0qQM4K1QYljEu252xPhJRUfVJaBkw-34e_fZQ85YN6GLiMT-E1qi9Ndj1J7_iyLzC2mfN7wCa17g_6-0bdQSXjl2gn8HvHav1PvNJnAH2QjWWXzsaPWGA-WWO04w6Ars2W2vmaFcDe_D-QwIUxKhGlP17Y5SMO2S0c2KhCF0Who_1Nwd8UGd2wp3-Sw6KDWgd9N1dRHCiKNNOHxt-Rq1WHER61fJRZBmSfAmEr8qMy_mrHqZ0PNBWjkUnFJCZVQHCT_5xaSXJlcOHTP6YiUxZlis84lvXGERGlT5vAi9ChCspN2QpQbdGsUq5ePMYvRs3fP3y8C7uVMP1_HUgIXsasR8DKsajRVEQnEkespaffnj5ZIntjsFuaZMwXPabvbBxHjK-Tgju9vb0n_T-euqDnxzbw6h477iisK_bDXh8FCP3oD8vgx0suhaPRSAiDkc158qjJrhkp3y0wRzeB7bgzL1YhYIsspshobo3X_Sj5xgeTZCMt2LSZF5n2JvyU0MOzlOZmIExiGeUKzfCNGwMXvuuSPx2sasJhnvzBHuSPxdaNbNRSK0xlVhVA5ejybJZpweS8V_tU5KKEyVbxN6A_ItonwZsZn-lBN49HdffpjgFpo_txvPpm3B2k68_QzO4BD08E4OwdY85N9YB0JFe1Ie7s8qyweBj6sap3_6N_Fvbq1AXOdBxM426Gg0ZRc-R95hk4yQl9DHG7vrvWm8xmOTRAnp-ygFQTOxdm03tTAyI5AFtgCXN9kEUG4E7-1fvn-gPwQmcikLatHc9mYeQTXnPrvO5txwxk7SKYrwT8e0bwVjiOzATBnYuv0XijHHQafeDANQImQ8H9rdmiTkZyRd6lkfyBo73fXYgCypB1U2GItFpdmwbKOCvnhgq1UrOK0RyA0nkgvf5TbK4Bi0qe_597hlc-mmidVImAUZdorwz8dwM2dldRr7p_YWCpKfoNN6JYC3i4E74A-grEVKzk5r3HaRfYQpt8jFY_mFyjxuVAB_UDMUh4HuJGyzFbCNG0u_2mSUnGo6qQF4E-mGD6WxmNp7SfL6ujuUNFfBMmOJDb3uIC5g_lgx9uB8qvu_ppSLrTLBRLf7VdrD9yXpsMKJj8h5wHkcEEgn19t6WzcOhEYjp9kcdsCy6HO5s-nZYHuDm4QFi60_WRCQ8KSQussHd8iEcIEcjYHJRqEb0h-o45deLOKKf--STuOtVkM8JO9nn7CzfH1JxZovPCwiBNhAlwT2Qjm9HQIX5EDAj9nXny8bGft2OLvOghyOytC09TFTJNByMgi60HrFlRUJWMkvlAgyfkPBEsqMGgrwLaXp1WNFAAl492elsj7d5z-sQcRsMgLHCEdG5orE_1og4giwt4nh10xSqmIHsGvAUnR9KXUknTuTbjwbEIcQop3xeKZibpOdJ6mugrk7gCCL1n1UZo8tD4LGRbuCFyftEwRVV8ZyWcFEAWp5wWdkznBq-bSSfNqr_SVaF2eSCb-ysl6Bkz-sIpiM7IQuyZFF-F5bp9T5Nnm1O8oJKeUs4bP950jSo9lQWOdgkAuja_h8MRvfnxn-V9EUpB29ryZ0h0D2ReUOmrCQ0yic1w-ANBSzMwLU4fTdChi4X8hKdevwEnLqAmBm5MjgdqTCBV4nGfsU8vmElDF5kco8dAd-uivdL1Ks6s5gezNPNX3Ccc8GcTwYl216Ar_mzBPIDCcuwrXRL8HNPC-gJaMCdSR7D6TEMUp5hwC7NiOMfEk3scQzk_EeFXE5FGOp25aVqDunZdJzQ-zSUK-KPeolw5LJhYjI5fU2KgUzTyacVAR3Sgm69oqHTjBZQfd_ImlAUyYrbPO3WWtR1ke4y94_C12GMu7H9h4llBqNI8qBYnsp07iF6vXdQg4ae9EqsAhMLpKFPTtKpFNPCc3ZQGi9ts0Gvo1YEdvcQpDR-kfNjT2OphgKE4PwU4DvKGXNVJP7QSbyuR4bBdIEol62QnQC4La-VGJQvj3ss24U2-R_6lCD5w5REPex5bi7JSXH596-gZIRbW4p8Ql6SUuD0v1SD3rrSLI3jqbho0qCas2AQeIdV_L_uwI7qlVyXSYupcOONF4Ni1cEjvwEyDD8HJJTaa-xZpMRtRIoe3OfiqUR9plr9oGA_vto3YSVR5U3zA0QHtMPLuvIqS2OG6rpquXpXs0-GtrMmJzYKgOiJ1rOIOvHXm014rajGdBvlOEKaubW6y6G2HarKkBusNK2D8cXHNEgJewysoOrsk-vJDhAXjmfJgMDkQm6RYjhQe0SiDsgyUi8uxk-vB9XE0KkePy2z6F1nZdI4ijdvXTj4rEM7wK0YoHogkGaXQ3G6MMWJRbe42UgrF8FPYNt5ZabUhihs6ZSHJVN7q-ATA_S3ErFRi2YqHPR3QYTC5MEnQm45sV083eXl-FeP5-Z1i-CWnqwLbbuBkTcu1pjMKMrkFUAkvBtIboAf5WQ2U3nHC6B475wUMFei9gOcQwAOXOFoarJke5QbJzRxQZfdhkfjAbbRm1WK7kUAs92tBdBvFllwVjRRxoVWhv37yn4k37VQLxruBoqlXARRnrR1-zsryWmYqhtsenvcg6aUysW1OuO5GKe1HNvTX0DGZ8iPW0EtVwhXiKTwEeYCQRih4_hfStObco9RUHsc8KAvOImUhvYFZZ6EL0lBhh5dETbALuuhtSL6b_xWRiZ9WhZFWbucZu4fcrv3JkE9oxvY1nrSCGpGzkhIqH4BMUhWyzFlc38nzurIl8zZu5ngHtVJHidAUvonFmspdGXrHzWX23DTcyhQGqoBLrEC_7GM4WT-MkE6B4LbBnHvsL_tNI0wns7Pd_1qn5o-yYTnKvFti0nHDZrKbqSY0J8HhyiwlNSsAJ2Xu-UI1doE2vPqgX05W8yoMDX-MqunBHFNNryWFtyHIPNAt1S2SsX9VUxZiQcg3I9WFcUu9NRcPKLMBEghacp06UcMbPpMcJXT80ZW9XNGPqI3L581_cL_tRF0g41manvyB0u_dJ6i__uwoKosG7GJBUHtEWSBLK8LO38lQWu8tvMupODDAQZTJM6tYq1hKC7yGlRFlzEWsLPcLawVIF5nkv7RzWFD-bbFN3OPBqdsWejsbXLfo9DySOVvI6_GSBmi556vkxgxMatvH6d-wrB4dwRubzGj5kAmeHxuffTkkzYWWmwSPvnrC8TIEPwTe60VcGK8iv-Q0XU_9yzo71lguQC4CmHb0cO2SZ94lwTrG0YntCrjUqd03MsXq44MgUd2ctjD8G1kHDjqRdrhLpcSMIftivoziJDz7JttR64MKqydLTNPpvSvCGP-JAF-7re7nQPVcKyhMTuy9p3jW_PGfAl4miVdQbYLRrwbL7Lza9-3LoM_H4nd_V1F9F-RRDsEdcYVoc5BFdoYpVGtBiggjJghHPEvU3Tt1uD2X-7ehR9wKqywwIrbFD8i1WYFCmp9GwMuWbSJ_VoY3C7fD1PO06KtgvIWigbqW09cwOOIEThLQAnD7qbdmUDGcMaj09lqGw2MbJYbJGSzxaqdyVJxZtmDCdp322WrvoIrsOnjyn4feR4au0UChUMqOK40CjPrIvyNiZ8ywebt6UPxIkbqP--HLktx8HcEomwfB38Rm3vJjfErCOEfeyPnTOmWvUyMpjtUre0FrbI8__5dl3a-_lN52NMd4Z8YdbjHWOG8B-GfSxmI6YcfkEe1GEsPtFPVyb1qj3zhs3eS5gHLNEQIpsiuvpPrTYL5CucOEo9-dtZ4NIrv0lPEVkaSU_JlaAE3ghi8rc5SpQDYxHfHrqUEkKScAq9YmqSl_ZQoz7gz33xlqGG3dOQDCTc2-8znSmkVQkahX0DRnXHE7SZ0duwB8PtCA8uvZYcZEMwCcDBK0TZfFOl6_vT-H44l-4neB6laW5BVNwZoovOUpxja_R5EOwInfnKuky9VUnhZhH89jDpJKiaVdiAiRNYRSvBNilri5TGJzPHLQLtLa9EPtjP7SVbIlZ7wEs3cusFXkAZGgZT0s-EL7p9TKmd3QU7Mhqjg6pSmYZ7k8Wbdcd6BnRvMhLjqqmR5F5Cjr5RiGLqVoAYFc5lgCDlVwqDw2UmLHWF6G9-A-_iqUXUlNWSCFJVvzLedoqGxdMZWrPmWdL6-GImFPY6qAJ_iG9IubOLZMgBxMXYnZQ5NJdf5260XxqZwmQuLItwJ7Alj1ozG4FGbUClyTuJRDZ6SemzO3yPH3Szy9OwknPQMgCO1LfYVsTAyCcvOSqwTCP_L09TctczW_vL9bBWQkDdSLKAteqXpgyUcMKNoZRtSD1XdagpSQNHK-4OGMt7VXEVahhsZqRKu5D8-Qzhqs3k8Lfb77pvNKGP5AbSoGoZvcVohC6CZcO6R4uGR93kn4OwzJzIadmIlSlvMT8EElHiInAbLm4ahmkWfOvV1G7OmUKQPqHyEv62NdouRaSoDYOOzldb8OXvop-EJMHFrrOqSb_quBP1eqcGkQc1bsOBC8M7rfhbY9OSJAIqA8M00cn1agrGZDOVDqbAd737-IQ3TrZFU9WMJRckMn5oVhCjVejk725_w4aSrXbzGV_iOb-agtXqnvx0TZyez9BeUC58o7_jpNwS6CJxC-fr-hpqUuayTPjwGoqSXUiHcG7L708qFuCGFAavPKheEyNNfuyTxTOR2KG-jeMMwNbe_4EC__ImiE3iIiuc8p1eFSkOJJlLsGJcaQEfT2nf7Y0i5rmnYl8JDhAzZacmcWHj5FsKXSZTH9cWjw9Fla5o0HyA2GTzMouZlb7C90hMqdJsfWuIT_xG_Xqr1mqLGH5vN7WK4z31H-TYjqu9nfef1PViGzu7HD6k5iN13A0LyG3LHeHoni5n3HCHNrRyo4dIlW0YBx6-DOThkDi5UccxyxR5h5vLjZbUPmLqVWafFEQnA4a_dEqBHBfuvybyR5bB7M3v5UOEckMc4sUtIwJT6xFjYR5J3DsmAzRS0jMNMqgSBXiZr1uyxxTBzYftPKYPvwB1620SaRw-tdE-zBT53bf2W7EO8cTWYm46Ll9nlp_86C2Tr2ztCdEgQQaY2GFD6yyqvuojR05QLVW8fIB2L2RNLD1K5uqs36km1LS7V-1PGDyzHuI-XBulso4qTKRjztkt7zXCdKPu2cA5PS_-iMr1gMUB6vYlJYbA5Tde3_Vg-l4-wS81CTnteLPYBj5pej7tBahIw-tdd-hHVamJ0Yn2ksbjcGCAo-LsBj62_c7gWLpt9aXos5mh4U5yCpv4wFrzGbqn-9En7dB1WnoLiMzxWLgdsxxB33KtGwp3QrVEMgteVfJLo8lqe_SPMsPg7GrJOrP_ZJ4x5rZmfrceVtSjJ41yaYBw1LluMJQAmT8RjA_6j70Efjt684evtGDG9es_EbGiEju6cYS7SkDBct_c1bP4nVMvjoxAczrN66I1hF_oVLjBsmPJA6lZ7KtSYVvEVrgMTebkMsuIEpzYUxYqZZ0kmUDoniEadtcmSogEnTVSga_WjCFQbEfZa2tzA7HVQy9dhwzCSfOWrWm9c7IAahqMRfJsWSzNTMj9Sq7SGbaMJOdJ3s66V6J0Ycs5QLKn4yHqKdSc81pqSuq9sWaYsh_SiNY47VRiDJd29rs_OgFMbZ_TJl9XdgQmuHTzyExLAbzaNEdNUsUc39zS7HGrDuH-fGIcFit6465xxlQoKlq2TpGUHMTK2Q37RGk5NkoiM_gtTIJOtCvvkSlYhhcENG9bkOEiiKQfB04AxrrF7d222UZtYZHKFtOVAkODTlRHksZ1UqCDec8j3eU8Z7DrJPtKpp87bcM920pcIJPQkHfcE7LfZITm3pD99pteVNplDBHyZcTLUDie0HH4qaiOOzM6YRMso_ECs2HMYJ13XsNClShVm8owUImk4xb8bpJeU9oUGJBabLvcj7AGhpK3IoAbiQudoNihSH5W3t_Q2qAb3x7p6p3KOe3IWhQHBe6xl-PtpQStWNY9zMDxbg8oxfjvROpcC0sRNM6Is616uXSR6HrSkt9K9g4zPYNtfOsmnblaKgbbojx8R63G_PWh76h0EvbH4cj16rVstsMJyMlGbyFiq3cSFXZE0l4e692p2yi1EGllw2ZOqRIO9nqFBFqv4Inka5Xu4mzZKf8Q1m63wSYkkM9iQQMWyo0cGyC3XmNg64T__H328-gVcdbYxMXPVhCUov858S9llOJsfUTTLWfIW3HH4LLrEkUqGDBZ0rjEznDiUlGPoxaRs-ZHOCtC0xxJNFuYJl--_T1q_O3hAyPcXAJjak7B1nmmFOg3-Dd7PBfNMm8saiH_fqfi2ijL069s5EFmFmXY5qauZBqyTk9j8AR7dpWTImleBDQpS9MdcWP3XQBNLy9j40JeDlX_hQiwb2hBGDs8o1o7Msl5REGOW1gEEg--gN_8dsok4DYi86oopoDApOrEdlC43_v3Pd5x1IFIiGEjIGcyg-g1NgXHA7ypopMgKb2e9d5H45m0PeE5KKqRS6v0BKnmj-ag3ZnPRQn_2g6liA6PrxOqbPMKvHzEId1OvrU3XJSar3cfFAp0sfWBpPK8mIu0deTFqi-QkYNSCkMr1s-nMepZQ4lrDxkIFWfvOrKTDsZxOCs4zhuPU8OqAlaAJzFG4o5wGvXNvj9TJ9bpi138Ou2jGz4SCW5Pj4gxVV-ZHMDoGK5d1C6Axy5PRsi16xOxfMix_oe0n-xb3_buq9iq5YzD3dgf-zq83O6K5Diy7S3ch-yZtKJoCc807Yz_cef8rB83tE9CwHQBOYeQN7F_bPUvgZgvxtzWVF-3TOF1umE_tKSYNCDkHl8NHj35wrWiqMcpoUz6WVI1UZOQ0yRZfMz8KoCNcJ7exLZcJsZEqT861qQdWoePUskMS903izD75q-hok7h-CInsofgE7lLT2idri3mdhXDnzgaoejA9NxroFuTFA_lA6igTxte8SOCb9HFUexf3cjl33o_rw4x4kaZsF1CS55WZd7kKb5QPYJnIqf4AY_JHvZf_4bUBOgJhVpoGncYRhHcr62kaMXzaLyTv5hpU4Yv3ZgdtOo7tatOVggcaXbE7gxyJg9iLBq_XX0I0LN6DePKhzkG9HA8Wu83UdYZUiA3nvkZZBRm5Y94HgEx2S2ctLcVpjuvmyaIeSVch1DWZfk1D2kV_Yrja_YxoVM6MYpv916AqeBchV1iN7aZMtPWxl9hPCVwCOVmD7ncjzK9g9EctV8kLv_J5BgdVLr5Nm47TIJVvo_dIb84qrlRNymQO3-NLuB-sxGMJVAsxzUv8NPtpBFwBgQWsI_mCd303RdGRs0h5fHjdRc5Wzz8RXk_iYK26vJ4NfSCWstDMf8OeNCcy3o66AcdBXhI7EYBRDFLEQEixyvntF5b70sNKlZyUQx-FTQyA6RzneKa727jXjo2nHGl3b-CuLe9SLz66jj1x0XNTEQEZJ4AQyTi2emZEuQFjA3-LKWEKVoptAfJIA3VRWR5rWnzK58-RZ8TrpABKzZfK05ATXOC8IA4CEJTIT3gvr6t9yzRcg2pDId6QX_dgXPyjS9h5-IM_B0oB0h7r7fymSf1FdLvkb3WXi1xof8stqBzFxw--d032lu0fEYw02vu06R7iaO3XQsnKs-S1tRbIdoPQm1ITZtxDSUO74uHz_IQiuUYdfOfaW6RT2q_AwG17aJPIPHLv5UHuisvhExr_MAqWt4TlJse_jtK6TCS7CgOmRhHrkGeSkQVe9ZQ0sHV9KdjKBI7Y3cHOjHFJ9huX1aOA3Q3KBdYyamk_fvWjlayG3d592ZptgQ25cMT74l-m4un5-n1v6_Ljvme2tsKedZAcLcOdNO7mKUwStLHOYbUb-i_bzvfk-UHd2AWFKaqJFgmn9hl95KOADhATsKpJTN8Pzdjqn-2HX0Ah31MWRxlTK-93CxJgEcu64Os-bW0zS9r57n6qUQaien_sRhvNyMSFNcZ5x6JrYW6B43AeTYikpz20zhMSbfERDokfEQEWid4q9Pbh2bOLTuAJQ76XYJfkdp-bbHqWfAFIjWQ3z_R8FNQKEuPiY4xQjDZaf-Nrqqhu8Hhx_OPMG1mksMHi1LmOiu2I3RQvf7pkClzL9m_QfmX8DV6fC2zz7nvOMvdAHOciKiUb8ETnrVjWwohgXlEtN1DGYn-jm3hepexEhTnbDa4gfJvCGE8mzLZC2uWDeNFOYVpRgMnDjVNWYhTXfTbjk-PFL0w-H06FqankTphq_oGGlAh6dXtL1Ag9fTwifx9s_XFKaD9AL8RB341wKG7uVfedWNDYKa6KHqWRy9dAGRHFIwDcXRFBDxtBIQjxgigQhuvJxw_ZVfq30HoaKrsPnWWc95sx27WyYVh6vR3v7Wj_S_GUb03gCQ28TaX5yRS5ldx02ym8J5YBMTPIcplElSqoDEarqPK3elc_TUCXlZrAqQdf9qC0FKr_vJoQqgbBCgi-Pp7S64BY1qqIvU122U5ufyK5bhXY7ofekR03A88hAIu90rmFByaKZ9l53EFOELjbvVTWCuQ2vbvG7BxEVLqnu6lzGIdAWsIUCyXOD81NhcfvVNhaNczyrkeKb0XAjgbUK4vlY0Dw4pQzb_l0HtzP3lupTv1qYxrNjV7xLsoVgtk5sJ5iQonnwr2lEfjoWrtReCccuTh-n0XEt-qTJdpWeJLvyFI7JibW_yVnFXxnAJTk27Cuq5Nl2jA22G2i98Dsarz2_9uJRvgCsGW3CkzJ5x3Yz21lXUGPZIJV-QJPiHRYrtT1xXutOornZhhWpzbHnLrwbLYrweMdI_xDh88w4l7nA-8BZQkziYCIkxOXd5TaxZVaCHzd7afWqAffHvEyAZ2pZ1IL2HaxRUREtPTte1Nv3AC6esSqxpyOgsi4iwMpkN04vdqhvuI0acoTJDDSVBHy9yt5OS5_wIIOC8c_WKEEPZ1Psv4Y_uwE9v2ZMLkGO9EYv07y8ov7Iwmp0dPqg4wODJS0Wp-2IUe6-7KhWxXEhh5OSDqL4gJJEPQpp15sr5EwGm2OuH4-ihgKhGihhCbmHIkS5aVrrpmxDp2C3yfb9upjQMfgN-1vvl3KiwIKW9Ybx-F8ywG17KLzfZuWeaV8BArFj5gBQVe8nVwJM9nSFfcwbdOUw3Yr1DKBqllWPqDHFQ8NoMRtOvPf5SGEIzORM5gWc7yI61d4saYK6_BIF6Hri2Fv8x5RMrXifT4mOESwwcnWXcE9twY4ePa19QxBgAFVIcmLXBLpJkVnDWF2HxQWZgEvpGLZTU3jjK4x8gh1eLowM6Zq9p5AraARmCja3dAyEyTsEmez73sULUZRxzXEKBSm29t2E7vxKh0cNHiKAglDUCSyL3RJ8Xt01jgKLkXw2dgPc8NirMRChUSAMwdWNxsKfGx52CcH-ixaoPR6AedA4plrf3uhOlgImvQdZ_ay9FWm5mvykR35lr5JYrl7sSCTTq5khc77AbzmXAXr-r3G9257q3W0OAzqWHK1NlbzEy3iYsejvKEgtwFg6IBYrbuuBKeX9nTkjGUijVkGN55D6rKwMLje_Gnjd16h-ml3jd-UCX30fUlSKFDCgkE3_SqagHjTUKtI8E5KFFJqiEZ1ru_BjNAeiaEWDP9UGGHs6vxxgPcRoedhL-FLq-7Lax09_e91KQEwhJZE6AUs8S70WXCGm3CE22B7RhHgEC-XoTr8YgK8mMBOTmKxLJ50stul6ugz4JnYjE7E8YJnGi_D-q90QBpWtAVD5NIVLpGPR77B2MsZE8Sb1rHLkRVmL7wdTLCLjiC6NYLVCD3syXif_utWvrSBXnEtFxLHwJav-ecl1Rdsu9s_6ltzt30zdsSwy7XshddHI_mTTBJ5q7uFv-oiqPrZl7Mjs313WWJwohiFM5RLO_GBQu1DpiOn9t9-FFGoTj2NizI68hIIqRnYu6YKUMNxptdwEU6_t8fwDpdqt_rEuHo8gpdhoBiDH7SLc8fVNiR2WEVahUB6q95XJ9DHRmZtdNkYfDuRZARtUHAU1yumagM6IZlsOD5Wuv51AS9JtYBSjUCyactPyZj-hjnb_ve7Hvxuc49ba0lraI9llrFl5yOmKB3tN__aOXr8BQLp4TIgkCPFrwBJDIgakvBCWkL--3q_WYfmUD4waCQUqOiV8fEJiBSNgDbRMsNuKy581N9wFKqHAUHGIu10c6qk7HVhry5urkt8uuBhrnG0ZEonZki1tynn1zPlVQAEoIFi9nF48j-DpVJxgRzgfuyaam7LJOJX2z2KdnntOfQPGiGF0HV-4vjWOpYc2hOxIO4aFmSLrbz9iuJ8v5bQsMGZtcWFhLAuJEl7tvxXob3K9PVNucNMRqZMTR6fQMm2gf-KtjzNFuyHvlPE768P210n_KZD0G3EFuC35KBvX7NSFpl-hfx1wtJNYC7fwsQR42dVuOPd3UIctUpaa732U0rMdV5LLx50Vbkq6NnA4yXxKKlsfHuVGScqLnrlNXgh3dX_XfZ-Qn7BXHokt_fSO6nrV8OulCDGMZJJYoUyl44VlqdTGvc0RsOXymVTGVvJhSwaxRwd0gqFYJnkONV6jvTFgnayfLkqeb7Yo6_5su9xk3_1ayNIf3FQMFIqjlFnX1pYq3ZVw_u49NIN-yN4Nx4IK0UoF05RnF9v5q04BCASq6gFmAKVZZSzosYsL39vgawQjjKI_lOlNzlVT9nzzgZfPJ1loZofM2BhwQKLWMWovHAjNS2Ua1ohXn-sgiAyQDf4ixRuAWWfc1bjTJMKU52swg67YsFW4GXesFden-G1t9eGOzpAWKnF1kk4UiNReZ8-oBdnyR8OVGx6IFGQtFWFfRTjoXXzDFSVjkMzNRFZyfDP6cRx4cDJ0Gb7MhFO5t-FtduiX3B-eWCSv32WLzH_lquJMqvfYunC80A0326bKjrwEE373ror0mFx0bOUiW-ijmBrz_Y26qCB1cRKetDa6ItzuyeqTxxFmutmEJiNvNl4ztbfoe3laQyqVCuQkY7dgsCQd_Wfmnz4-2i2Vm44nIvOGJ-qqSqGO31UbDxfdZQK8uWXVaFkjZ6qPGwLYEYHTp2rCTriqPtHJvkSHe5-sWBhM5R5acNFk6PEZdMjksMKyV4yXTF_R2-5P9l6OB73QYaGnjgKa_qc2WU_yKnstKnJZFd4txdC2Y23LYngukqMFtxbh0n1CpOorWgLpMWdeIY8GkurDH8gBC2zOSXHoK83y_0iy_SWfiGa9BCkz6KReUCYbzxRnzCnScsxuXizzup3l3E45eElr-IVDiYbJgONEB98vzyAH7_pGrAs1YVs27y1AKb_AxFUDbhwUrWSxmipIhx5LIUjLakOcAjZuVlTDgkURIvAsstgCjHBe4ovhxeHq8jQK14usLKixdcP4a0HJckVcGDuymzUp6_G3WxRWaHCj5YunnijU0C8sJcyYY6IJh_Aj3vM8OVHBXv6XmcrPQTkbLeQgwTlnR0dKBU3chmDp3AaklcpolhhBuo3nYzLhdqZ4gBs10145axUulY8mwibG9eLBrKeqwlK-9E6GY4r7aUAnNzluXkS9pkpDnUl07VozySkfMUXDcfJZyTE1Uc6Qs8_n30kd82RMESwNNU5Hs6laH39GwuK4j1Hx8e8u7guDovRJgwJ25jscAHQs2PNYHfNMPkyFCD-T23v2Hk5i8gmRaOPSqgDNJGneNIZVPNSMDi-1wJQuDflS3eExBX-US0XDxmtQuVzjQO7X0XKHJKrhesaWa0h8jBDQaSrNJgZMLX0uQpoGj_RMrk1V7mEF5Dx9N0zQiO3UHgpD2IJBhEq4M-AMHi0U6ZWY0sKLh4SevWztroq9ZE9t6dMNov4--YMkXqp78ItJwG4UDFomP5cZ-zLJNqmrrMWpxFRi4SgvdgG_3swuSoyh6Eg1isuSvcF359nfh5WhopxJCTtFkVi-PNTEwvZnqQvvG7uDLKtVL7HM1t1qtFiN-wFjJvZdznLmW7jescMEx0dpNlOrSbQpA17mfZxAAANhDtoO9fuyaBXvBzkYLfIy8TNjO6pvqMvPT7O-gcbsEw2VAXPtFDJsXxIOrZ8ZydTlQhLZkoDHNJDneMZIuXyKFwWkq6pG4ayGzXa7vY3ZSQ5CKHSn3gXoc8YZ_d6g5OjAOiXZzpy3ncs1G-FQnvOfsbavnjLIkg-YvhNe1SyQUxRhiEWrG-dCqX5k5ihqrWyyAfiwlHFCnfvtMWWLy60-ke-UIn75tqKWB7bFry1CGsu3-fzFCHSz-S7ovLyQhBFQwYClm-WYkWhCQRxUh1U6GVUEQKEeMr_U905DjgRuuDYrjVxxudCtExyMO1ruvIx6ZkqX4xB7Dc5VRebm4ixwxPY94wZSScYyyiRGumXaV51JfHsQl7BHayfcSK0bTkbNsqt_xfogg-SkbdW8NfnmUq0BI1vAoKSXJE3JEgHVMT5fWP2_9FLcMY3YKi-6W1mv1X-Ayoi38eoNRrZWc3TgaHles3qmTdJ-RvR-Ss_-JIZSWY_1RW3ONvYKXMeNdPT2hvajm-jbCaASTFOs52obx2ffIELSavG0ZIDVg0lwufXqAIt4B4epWEx0DwIrwHb_Ax_X_5yJrm9dqvG75a_O21zsPgH4PnOvnWjJPEBcCz0qNBbpYzp_86eNgSgcGiNKDKVZUhbdudQ7Fo0JZ-l9rqsbOuYoLd22y76RJLWipIq5baiJ-5AkFGxNHTE8kO-zhTZnwRw49wTTiDCfaaUh5bL6DkbdKoyZbDkjmF46TOIxuDidytMl3vQo3fH3mbBx9PuPodBF0oeO3945tNHmQg1gNUE18iRV_WvVTZxZdAhMLKRDgX4JVU9JyKQHZgpj5uyCguH0OQxyaBe7pkyChW2Ofy210qONjDpvI0hHsx6QrKuW7nkdMIZ8k0JrVIbDHUCgU9ldso7buOYXLM5Zi8aey0vDeCT7MGKw0Euox8Uw4r_q6yC9MvxbCngs4Vh7ndvnqjauV_LjR9mkQKg5lvreE-MZ6gepYxHDDJElSfxhBhR1wQv34edz5EQuLU3v-L03mq2aElGlgPhKrnlsTbX9WKBqLqqUq2XP1_QGThzM-uVDPdC7T0Oob-2WbhsIi-ehoq6g8ozUq8BW1QpVWFDNHexE8htGkGsFKO386gnq7szD62-tlxpirzkBNH-L-Mq4NAvF7JhhvQzBYjtChiTXKnQqus3D569pSx9alvJeLHp09or2xktzvEBuh9ZIGxnsqoSsSYuplk_e5ILJ4XggmvVMv4YLeeZNcmGDjp9LaanotpsZz68prGsdi22_Pv9vwJquJj6lo8hvBumpR0TBsi7X8cTQxYVsJX47ro5WzYuDOYf5cOJhaPJ_hLcpIWSZTZKGo9nbPYT0hORh5i56rWFSIXAUD0n2jyC2bJZv6KdWhFZ8N2HU8Ln8VAXcfMf5CkpQJqU6cjcslhYwBLOwjVo_V_DCGnRNLioaeWOO7j4U7eJk8IYjZijmpB7h-Mbfk2c3Cnd9wOOsEWGzjEfrpItcZu1veopK6lAAjiOghOYjMWcUn-KqDl3HDmBstI3eCUpiW4U4P3kyZ6AL7bVYlwX7sUj8kYeYl57AUTOAad2FQX_Vhbusm_dnEoGtIAJ0bw7xxNbgvbh93WV2oe0MKwN8I2bVOhrSeLiPb0XSpDiwWrAMOxjV5t_h21hAxxPcaxzLNZaIsiazO-fNPv2Ukm07bv3WCBMyC9_nEgcxjOSNGzJ6Rr-Wf_AkDRthDmbu0D9LRPEeQW7S5TLL4-4HDWDjiqb3rsZPhQTLPDdfttGRlbA3Fkz0S2tSaO2UhEsHo6SZgZqTHqb5Rjw98eYofvE_4zoMcQzDIUIRwNzuJhoNS38Lf5EaPZPYIQHxRpeof2u9f1NsBNDtl4BkSoa3CBcmWwHQJbFXT_9Dsl7APMtC9dYgaTarJFLbCGHViB_9xhdj5oROmdUIw-Y6Yftrp7zHmKAq0d81YFxb_92npArrVhQyBXdMtA-uUaPgYIFymZnENlXV5KUPyTFR9mRtFskT_NVSzZm0LQwsgV9qLrFb8x8FbdMZV5-FBoscDfZpML4uwbnMwuxm0lPg857EytFW_LLcVkma9mFUo3yug-tV3dDlSyPq10pm6SiQUsBsIO61khqBOjWOecpfG_Tb-Wzd2zuJXnjBNGwd4--AjcOM-Mc0USPA3WI5G9tNADU62rHUcz38-rz_APYgl8ZmFdn5VG5CVBAL0Qz1h15m8SLgOVCWhAERf4-MihMggkR5t85O8u8E_DN6KsD7bLNcDK5Sk9uwCpXyBRiXLAsCqVbJDxxtcIrR0VPcGuJGS49Fue74y7q2CkvvYF0MIop8bkC855acxRBNvSM5TucMFyJy4cJkUnlltJnqO6UKjxmhJ77kVnPtSQnX9TCExpHCjz65jcIMgazyUNc1AElNEGDGHU4R1skvt0tyUmogHcfTE8C3e5w79n6l3B873d7jNNl7UQkcKNUesHLQKEeeAj0-FvQNk3A6R2ut4O1WQ_qYoONJrqALIPtTFsN-7KBFUx0zIeF1DpXwPdDpOSF9KUPn5EJ_-J2jgEx-9Z-_Z91QshviRClsbSRJt-TbSENhyGuNjGQjuT62Fff1i4LiR3G0cN72NrbFM_7nu1afGZyC76uWA58kkZ-L7UpeY04SmUoxYOkio4VVawMtl9ey1mjlrOH5SHTU-_rrRqVJew591umG5pbFRqUS2ZGmu7Hgf4v8mzIq011YfEoDspUrm3U_28C-BeVzXqgObEYWGjHYIelcdotU0DXN1VaPLC3iLDNm0UTuRY6hLpkXHJHET3xExWn60QgLxvQn4QlF39MEn32LicKWAiYvdodi34ZzxoqhkaZlRX2Mn4NnjM5WFb36xzh3IpO5y4XAXwKoJNwYljPpQ3nt8bM_fyev8IerpiWPAYevgNEa8EaxQ5EYBmICN0RbzTMSu5vlAXQT56fUB3DAfS62ub1v_x3uoyqvCZ_JPwEwtZDy9QwFyMI0WmfkXG6VsPZBqoD5PckUvTtXgC_DI_zYHSSnHOZe2I3fDTtXBOz4Af29xX79RRI4EcXugW3Z8o6xlo_oHC6EqbiuEM9_xKPu18upPDkVDTg3HauFXfsKDMas7S016SSqTyAcWZCKHsDy0iZzeWYS77tvpMASvAv56y1G7kPbbt9JnMLv_gWH60odvzIZrCydAMMRMDdCa6LZyGZKgN75fMjtzBSVPyF0vnfGsMoAHsTRwPW7LFWHZKzhZY54dzxcQB4itJbQ02OYkcjLfOpkolWfoCp-5yb5CAdyOWehu4qQ-BPsLiVHidZSiGqKn72QrxFqvNNIfT3g4BfVSkC4xQk1Ss30mW6BOYxggeJvaAOTENQU-PLBgnapdgdqFtu0mq_dASKDq3Duh9qkmvN-TcU6p-LHWsIuIQqKuyzJBS5kRSefBZ3b2Fa2h-jqVNVsQ-6kkMQQvtZ5u6woyHpd5_ngsYJGHx4IDgwfqtVyPL2IowQqAfJsYQWwAVQ6IOPknQ6gBkav_lVPGlRmHe-QloNw-w6zkx_PdZW-MR3cQHNK4Rk-JJnUNBrTyJxsukGCmYRiwCPw4Dzgb1r4kVWM61Arf5_cZ9mG15TQAlUtA6hOpdhxaV9i6ZM03jiUPtQvTGcNtEVSTnheVg_JwkXMqOGUBB9QCingWoekmnKyLLDHQ-d4s_AyigTjXkXfNoRhJxJLt8MDhd8j4WEjO5008Bx94me2F5Py7EMoc296D3yOOoyVPkUv5SUsrJaRDPHyxlRjVCK2ebMvTOXAoM6umicOp3EwCUzzcGUMMpzHhm82R62pT76PONO8KW4yONzTcMMa8iwnPpd4BXkyENl6LUEifKJQyGYBpgRQfCsdp_ZDGxTnLaTPAXFzLHNJ3mDDhnBEcq5TGTlkNjpKOgj8dre4Z6FB-4QAwsYUudGfOHKWf-oSl_CXScGHkot0AFEUMxsvy2cz7XgKkU512fy53OkcHz4z0xADRNj-qMhy0Cg8qZ-LttoJl0TQ0_e0j54cSry45fqXv8RaBB5-DB9Gqkzx47yzql21i8Yb6uPT_-Ke8vZEkogzkfuRpPD7rkxDuM3v4GRm-SC58bWY9z7hKho5nKVifrUnXvDTtzDhzIFP5oMRTicekiZq5i_Zkne2ZVB7XW_eVcZVtJn8yVRTnnp-dvya8fCg0Ch2sThSD880x0Hk6v3PPgl2MRTj2646RXouL78jtC4tMIjcC-5IfPX2Jjg-H9tvbqlkW4bW4NBvtSft5J5fjEX238dr5yTH2m-cmkHsf2p4tkzGA9lXmCSUNGhODxNle-8rtn1dhjmrc3N6UYZKNL02Pk1vmNhtu918MKhAgnJJJx7TzE-mNHpnTwkI296OjxTg53_Vjct9gImnovaObal_8dwnKq-jxjh4OSespkJgnIikL2PxUqTZ4IYArEr8EdRtzN_Fqlf8onFREcfrMDyC-K7QxqX7_01d2zkvRlZkhGHt46M0CyqRsO8qTB5cnb7rQH2kV0PVwbVoZDrAEZin5yYXjVIXQIK0Y1ddHCTbnQWAaXPg8zHpOLpVTC_m2e0HEyYUlK4VM2GZx58CvUKa_2UTWKXURbhyL2eQotuo8tRumZzSXcZD1bpREokZ7nfvYBd_dAQ_CZIH-7tFuDBCc13E2KIO8iXOVjG72rEKtu3fWlW3Twne-vsS6-JEYS3OAerY3w68y4SLEC7U-QNouu-5ie2jt-JIDjUndwsTPEHCK1ICvUHFSABPJvbJYMdIoro-x9m8ty97TkG2026ZipPTkAlJAbn-vNggd6zQ6gDxGcHOfQ6qnY6UZy2xC5mm7LtDg3oKpHG_DSmKyCE7HLvhJfmJ6ZWXAiYxBuMoJ5aZ9P5mLYIVdW_8V82qrLuIcjCqr8KpJhYyU-UR9_-x47JLSfopvzgAvRerfWZU6HqWXSsZRwpgrffpwmHI16V32m4RX-92Wp-Qt2FSvIYy8U_Ft9Ig77ftf0GGyhkhhVic33y5aWXjq3Kw7BIfvXb0-Kizr2Bqk1hJ_tTrB0v1Ck6Qc7tb9EWP6YF438OeaBO8whwi4T7Xx3cPgT20LglZ8b4zC6Va2ZpH61ueNvVHVTw9sfQlR0X2OmDdG4AQyCaCAzJRvlmM9aJc9T5RqsH7IiCbeSd6NCghZiHI2z8R2rNqwWeAhFM-F77LHk1p-z9ODkOwcZOb7NwO9_crWI6r8gSUo_tdE2JCG125vYhisEr3hZH5plgG8bkxeQ288ZlLgULu66pj2-1qzwan3Z9qdxkQcCLgFLHAswauKYRvwrHb3-zSw-xb3jf4tjKWULIwRxylbRU19E4ReVNfe9lTEamWUVycRJ3JTTEroc19q5H-qEpBu0Zkrw9wnfmf7SM2rBaXePfe71WvVcExkda1SanbRJqBe-aYRhSPW1fbTTsnDWR7tXiZ1tPXsLdzby6TQ2Rk5EOqbCqFWa6tHD-zm9fui2jiKIzgExjEhtSYVNvH86dDFAFJwRMgM66nwv60bvz1hYmrWDVz88qsRguI3ygUt83CqH6st8VgOzbySjJj8U7oAUwXXS7AycT8jiexQXddK1iJrs8yWmwqi4tFyX4GidG1Hyl_WJorGW1OB8vbTnMfZIoBu3KYfutFXJplzhHFAQU6flLuvyoRDb8w8hi2YbcjjQTOXnkTVurF2XN3BIvZaw_8155J04-60IAIhcTHYRSlCoEGb20AOrnCXSc3tdcxorvUJmjhJVd-BYHnxU8cGJ1Z9Bb4INZW9iSp_8Ii94js42kaL3DpMWkSBnR2aEB2wyAIPYtdskTDhr4OEbvpNdIxY6MjP5XG-F0WFGdgY-Nlj0StWQufHAQBeLR5trL-MztRWJ6o9SKKxdRSJvKZsYc7jvBpQd7Qbz_7QMa7GbdrqTgHvosM940OGwbDShB8NEGRP0STOSbYZTc6Ec5abbCDQOASUnfWTP7655qtF0GAhHQ4bYigt7xsiNdq3QqSGuHfLBnlAP59uSaFqW-RXJCp7dkFGSn8NrGwh9jvjivswQW_wB1miv_8MHtM_cS4uyJX7XVMRO69qzVZnV3NTZkDn-lMcUOo3D4PGmCaIfLEM0ThVMlc1hzyojvdKrpfZyfUhRittlScoHoX1omNstjEF5MhBPqaRfYJUBWUvRRrRZb6UVNg5eYrVZfxJjrGeg0_G0Fuws0AL6h55ElPo078b8zoECAIgeKh2zKoVx-J7FWRoDIFAp8DmXk9EwURwcKKz-P40ukyIPjBpD0hY6YWgkOqBmWyO703Tu2NBOdJipCJwxCYeIN_aV9SgqIkicfv7J7xHYqBCdEspef7XJ64OvFk8O-hAD38BMj3VZV1p2vKbEjPqpHbP-7LgZGyeYY6vRWkMhLSUfwFiqs3wIZfv7oq1h7LnsgS0-psBGLVPfEN4DeHXcL-egMVsw6WruCR3875TCrW4Rs2kSRNQsbXbV10w-8leQfA7cX3LBOS3OTC9TyRailes4t9UWOWvcU56TDnlNMGr9c7XvoVtWq9kjsbFA8MaPHVpMPs_istZCUqk5M4cjxzI9hoFIf8Bx7ItmHY2HPV3hqYT4DanAW3desKR_MhwiOvNlGUjQytMQVnx9DJo70WGUM07PV5m2C7XMI0bxa122sLmOdWt0sOrgcefFCm_17bHAFEw3MBzOhufbbXZ_g2nZOTky8PQDT2zUT6cy1-1vD5pD9_Xe6PaKEvTKLLTlsjDm0flYVn-pLwO5d0MPFR455mz8x94UCvbTuP__ypw9W52FqpmxcelSLV-Lol2vnKOCgGcuLJ0rrYV-tj-UWU4ch7iwzTDz15ccVLMo75kFrSmCNSweDQA_a5cKdUKyTKjdfu75B5hzb291jK7iLGMbhEQFzdy8wnXXaHLHWS-SCLarEygD3S_V73peaTG2lqxdaTM-bmaF_zxMdF6mKz9GKNaTUioAlmAOGG6Ry6E5P1WoL1PgdfrzgogheIPvmAJJkETerYOGr_zndV8bD--1dWIem0Nx_NJc3xPjS3pHif762SO3MPSBGF5f6d7GGac_AhHXZmKDohDsbixBDCfIFeIegS02cvuzhMAKHXXo2GrxGW6Obrhx26A8dgHxFTEuohAVeSHYBn8qH9jqEauzm3-6DTBPcohfrJ3-A7oj3oRyVIg5lEw385sWce3g3mt8kOSnMQrDpdYstHr_oLXI2wEflksfsB8ulesf1xBbUglenl-P-CKXgDpCUP4TLFZYm5K4qbMnSV_cIJrg5yxfJAOU8eJyhpGCt0W2s_BemjvYCeEYUlq5i2QZYL4fnOM7eJ6-UTDvH9Osh5Rg7ofl5cDcbpqZDeTPAqlHWCVhelrD3RCut9z9Ivh7PFS0jqeScUHz-wRJt5PqyFP7b3Qny24ACCc_T_ZWh9TO2ruIA9ie_5ABv40YqUgbxcYonCiGnYlfnG9sBK5ndzrQk3QAe_AcJ3a0MSmFCxLZUbu3OEym-G-cruEVrzHSG82rYDMoJIOGR_1nhrSCc4UDUWPjDKx2lNQOshgYdyvX65xXlgyi9JTtz2ZPxbumBr7AN1040XCatuwMrTxtVmQEcVbj8kC_VhfXsCpXi0qF1MvLh6k9xwbCnLi7LoEbOCw2UTYzFIF5gq747YBAG-fGfmAUWDhRsErVje0FyjnpRBOYtrJ7NB95zzKxAMSFc-pM0xEg-mj8tSeD38R9HdcNECryJGXTrZOMYokeLRnb_7MJ1TRlfiMzcAvsk9mfcbu8ATfNyus_aHxcjCOmyzhdRV1tGVLWlPu9tYZcsD2uZi6m0w_cMkzugjgmdBS68lg_-Wkd29YwTYcJ9eSWrxZFA6mcTVXU4W8J7YC_K-pYrt7f8VKSqgjvmIsvtg5SJ5CiK1UZ6Sm8pX2KSSifnESnNlRX77jgvnVuikJIW7dTQ_hS_3sBstHdIZPGrUTT4Fb7excxiQ9hqTdOky_2hX9cP3HTSNpBZfmijkBC3qIs9mDiAZR_65GTAKnFnkgD_KuWiWRAFK28Oal4jJbU-Diu07H2BrqjOPoSeCTb7K97wC_Bs2_s72_ctyS4v6WxHIdmTcFcLY6THZbP301UtWx5LSH4La9DoRpRV5BPmA2qXpP6gPUMVX2FQUOCFPtSp1hEPDzX8dj3Ltf8s7EtpK5VnLjnWt3e_asUwmA-GfmLi-4jbAoI70KMwCfskwS8gNNChj9jhAZv0xrvqJVZEdaE9U3eW_uvowOH-D6-moiS1wF2GLhgw6l2fyfRkoWvB5fzDefyp8bGlX0QnmqITR96U4O76E7Yc-nGEoXiL9JJ4CaKipItNLxFEXslUJzA3-8AjmcFxSEyzPl7tnCM7zR0utMXaM9vQ7OgGrEX48waMc9YWqku9WFykgiH3Xq5IZKAwGo22erZi7kZIn1qbrBqtwNDHskGmKgkNF3fgdVOk_VnDlamnJ0n6Lv3zQUyI4qBuVQDOv949HqVji3eN78WV45f9VqAtk0j90KT6J49QkNrG6GBtyFXoBoQCuI8qMJTBrUryuhwBUqG_u5km6CMPRt9R9qgQILOGtfLG6mgQ2bvLfyKHfdIZYy1DQXYR2DlUgjmyyFvoaomtDXN0H1MUGPV_MgSWl_sqxspCTOL_1MgXmxjtukbKKFrBt-4QvlmaSDfroAyWFCExvyfQ5hVWIXmv1ttqL2k7iTrMswutlEIK5pYkkSFhzZo8K-EL9KH5AhsDmAJONEtP35DMbKG414X63Tg9sjK4vFBDV9evtUE0c4ZGWl2_r5MC87r5N7Bfd0l6Xm5BHQ8qp6m9XYWPl5TbkmYsWH562yXtvPCGcqLCIQcUNyIj7PeK-JJhDDG-UR7RvwhSjaEzLMDitfPvl4inMuRhU-qN4J2zcmrHkkdMOTdvvJylTE7PgtULGITpm42xivd-Qnv6BFTZorLNWlFYHnDWXxvoW6MCGeapWumE7_BnWxV-d7aYTpWXW3KgetlFlq8kIwxAa2zPblM23MZ_UsnvUhcUKRMDdAnLk_jck7oA5-nYfsdKsxQFuyjwG-NOQ8RbMyU1uzhKpjE91oq4_m4qBpEUdHeQn98px0ZEbC9va8VxN3ApZEBcPMbU3Kk91wLWsr3elTHbdEFNs6tS4UujGCRNyWI7i367VSW8ahkqQ9r7hkLYNYLshKpr6W3F6wJ3p3Zo1Hu0yU_a_sRHinySIYS5GArMaki1_nIxO0JrQnuFQLFhgipMqOGO6Tk7Pm5-RUx8qRsagJcSf7YOdr5npGfmUXqFdimfpUdkFOuxu4-VYdBSWABrg9iYjLdvRrugw7weavZ0XOUn1sW98kOyaCjAjsuEI1-m8_MnRyZsLyJiXzsakoW3Rvk9O2nZ2pJ_pS2Cp6LaEi190Czn4Gq4Lr-nRdilpSiMkG1KNjAfpormQqho0HFxDX2Nty987ElfBZMtBftMu_sAWWqYGQsyaQUvXpSKCaB8D5SNNgrPvyaeeY4tHWQJMRRKNL9KkIgrYKftExcTxIFj0AJNOOnNL4812seBGu2jFs5PCrrv_CymqoUJxj1H6e9J4WmWHX4AgxPd_MYTxCsWWA24hs0Hfy3h7t-VSX37PSTlHjS9B7HYpD7CxF4uEflUL9dwirrEAPb60BCH3WvfwyloXtgBl17TBMRjVQl-Jl4jOvqk-O9xNakoQY2k3N88XcIKeSz2Gda7-YQpFTB3H4jGiL9jXk4Sdkuv-zviXPl2s6xCQ0CswDKRFDPFa6elL-JHSq2zhPJTjHSgglOZNfp9taU0AsTxnx1MsPl26DluNxiPm2Xu1rDu-kHIZIJ_vfjdljHOsfPjfloIhc9ZpeQG-hmWL1UG1_fa8krV2YXfQCWppdtVM4d3KWjpAAh1wIjZHtVtaBDVEXeZgcY3ovUQpkqGLOgRZU-w7LLNPiH2pe2Wrp0mG0bqTnSRb3KZCWaYovcN9m9BdXy68yVeh19l7rvRWpM7be7kR9jewTcJnbe0oeo29RAUN8OafqD7DA1pSToJniwVtAe24jjk-2NtQUvkEw91WeBlP4wBsqSmuIJ-EVe8uvB1UYkiLJNfLg8i0WtQAdjQIh0GCTXRkFYJpzxucJzZqPUWkmyCpKdBGyE5C250GGXc90XXYHiqeW6G1t-FD8aCBsqln6tEEnNHMvec0hcd0k0hkfrLzsH6umwpsJelgzf48i3UKgt4bfBzsz2roRH6F7FxLIGKF0C99glh3aReytHBspBKC8_TTprymF4lPrb2P09sbyrFgNMHsAQVCGG6aySx4MlUUQ54plxlh3-9n-38QuJYWyoxAsbGiveF6bj25a005j-TCbXHKYrJ3fjMgUEbwln_0Gny4O5D_0LjAGtqnM1BdKnKKlqsRBwWePVidOD8nSxXgNjhlz8pcMuDcNc89bbhZrEAhEKDvw43Z3jdsWxSXCwdODLutVsL-8NzYCEi7E0pkLPFGyiTYC46k5LE-NUVt7ozYXPPPBLYf6ZHoAu0rFaf0YdGobGvDhrrmBjq5KgwDDmZTN6z5_fWjEVuypUeLbNT-qgpmghafbeVZuIsFTvIdm0mL9gYKywFhAE3z4o6tl-Jl16aJ9HHpY17N4JNgnV5T8TS2N8wCk0hvapWwqkj83ee8x2xUyyPoeXR_bXym15cjtVldGwTrQ0EzwqyCdtTs-9H-15BEc0DeGz5tg2J52OJHHK2fKksjGrMpS5meqX6zu1mbmRyxDQi-iRMOSOBiJMdXMZ2tTr5fZ_UB5JaTMjJ4_VWiPU0NCmtSxYofap0TbJy_NrmvBXXfQo9b9QidDO9wSfjWVsu4LOxjctTKqr9Q6kWYvgTrsdxBd4eNZxTN9ijQHU8YXVKvIdJWT6Hg2lHaKP8GicDRxxuusvdmWyc3L179T5DXnqDXQZotEIJRC8YN_oLSCwMkPSMG-MVR12CzgIrglZLqCJfWofsI-EozT2qj8j3CaHkHmz734wuEGPkQkhLeCoEbdHkvA8P7ZAs1L7WI_WVnctvnPCT_7n_oNmrYbnTIFgbZ57gf6L9ocALJw-CXWLZtjbH-UHQThfBrC--DkYd2h7WzGKQ98phxRgY90GFxnY4XAta4oyuw59fHxESSS0rZBHzsHKYFOWGO-a092WMfMKsn0dhGSy1cphxfOmlDrxMzIZetgOY2yYx8npn9QWRCc0acBoIQqd1OnnQ2PtYXGqvVvkDqt0we_cDPXAuxHl_Zvr7E44KPr-PMrNALxP1zcdtbm02VAVJnLBBj0puzAs83zatBcSeoRbV8HVSEZ4jsVuR8J3hryBLsR5hVANfuSTPPbsktjZX3B4M6zh5UL8Tt0MVI51MSBCCmX-_VMebvY8T1MD4z0Xu_K4HT9Lklo120v9g1ROYMB2BEmrS24R8UD2b2Hhm3FX7UlDL0l_H3oPD70vxor49wdYuTQ14u80V1o5b_h7xszxTdRjwHxmgLgy2x3YLIXysGgAZKslynvU42WEfPDMn-I2WFmuqYFVxM27cXqhpQchAT4LRYL8f4fESCmMUuYMyaaJNZBUEdRUXEcKMzFpLXPp75QvfBCe0Fa8n3R-mniwkcbcKjI7NMX2NdxdohJfefDxK9tRBeSffjPNXgwy1_55vS2lkFDLjn1KbV-aH_Pzm7GTb06cDzKSiMj4-Hosh8YmQr-RwfjPJHiH-IOZDS_nODeEaTbrj9zkq_DIUJt4j_cwqF43dqnlyeQkEFYIDZJpQakB-FDXHPciCmkWq16k41ulD3CC2vn94zZt6DIj_20ykNDRA-LwL6j3HbpQ3bgvJJ_MUAGBgXPOliuT0Yl8cpNbz4XoE0nZjB_bE_Rs1zApJPbbLAgzNTPqqwG97xXHDJsKtIO9UMKs41M9cOFTutFC71gsa52UuMjYFtiU_s2jOHIR3888vcLTXs7COzYLRMwzOz88Im2QcaBbVS7GWp4tUOfHyFPPdIX6sO33VSfDNeaWEMB8F-IDilS2HElUcR-jdTJNj4sOJQuQFVVGOHI98AHzWmry7Bqrgao5kbDpZHnVlCnWZAdlYkOKdlVRxyTznc1aw_G4UGjI45fv9XpGVxB_c7qY-tM5F94cTIKJn6_W5m171j0_NPDGWY4q4ZBYva1xK31s6BQfubiHacFNOLah33_wSE3_gFcJU8Q2YOhLPV9OQCO7ShovNxU-61qhSiW1qKtavjeT3ec0XKuXuEsdBVhwsTnsmFb6KHLObIecAjBuvAszgstsR7uUd-q_DoOrZY9h1XdB1CUAVRJgxfvFccGpXYGiGKe846JBmkTIDFKPwvP1NvQ7pjJtEs_KileOsQ_v5MMszOipW8H1TKvJM5s1nG0qoqE9NJF-zsb_QXLyAkFGFJ-tWCg4dMGmlwL12SmeO9fukyFvf9IW7IRyLhLqh1azH7GGq56WEjOrMmOLVGIKXLqkMLLe5cC2-prdWu5G9QzKPvPyD34Qp1vuToOVdyZL4F4Yq_c_D1QSnUiK_WfjQm4_Q9Wgz2seQAeoah3_kMmnEiFXAKourBMVOUKzJJ3_eVX_V2ZxD1_XIJ3L2VMDh5r0wgmOyial3PRIISsbWMmqzOJhKSdMIZe3TWqHj4TolvO2zBdJv81iGy6QIBs_mhF0B7fBz_C1P_NgO3xl3U3Ibc_DlWmIAMlkk1iTQcT_990wZJWNaduLCMeZkhyJl-3SEl_dqiVPDcoF85vfyIADaP4tipRTjl-esEsa2oai0qTlOq1mkZwHbD-2Lt8fWG8QnSCSjuAIgHCwXMN7mlGDk9lhULuM4MEvcyvTtFcTIPJUeGXzgjAyjU5CSXqNUd_LZSWLZ3HHscybA2oqBKeGkxYZRBNYw6P_Oew3-MJ9MXp3vzfUN_qPPQIEbj7JwRBMVq3LEE5bbe3f2bCR9zlHJyjMo9miCjxjdJaoxna8CFddSaPenIjqqqGBUtJNHvOKwFiLwPVtFrNwW1ygv_T6b8QqHZtZb_zHQam4waayluT4gEr3gEP1sDjuAakFBGcXXSzXCv_AZ5jDUiU06VEreAhbb5ToLOnh6kMBR4HjAsnOogIcPkiEI8zkZzsxeAHccPEvBlsKhMf8_4DnvcevpIn24Id4CpZkuqHmGNAp5HBNm8YVBmM-vRJlByYnvsBeUCFGNkID91Xgye3JuJVxXrXwHkfxZKqa8HyRiFDx-nZv8JZy9pzur516L4H1DEVtPVEq_pH1boMop2jBxdwHULkK5YwuZUJ3julc24oFNHj0ZJxCfoslN3VQry2IiCYy7bQe9R2Q4npsHkiy91wkScu0alj6UW7Hx6ro12jEEpe8qs4FjuQ0n-PZTpIwwodm5gNq90bnWWWza-tZ9Yq_z-dBTkdTtW4F_i-_y2gLgp6IYV9pIGSQr7A9uriPSkBSI8LOsSz6eiMznY0DL8E9yrQXUWD3ypM0O2eqDggdTdZtT3vECCPjlgoMvGRHrWrKzZioFP0_EyvHRufoOAOyOpv5rYwud-17KF3SIuYqolpgDJf-D_h5IBcSQ_vIKKlI5NWAyIz11U4374gll1nH145MkBuY52NEwmInAH58wn-HTuCFubYsJv7_-xNWQ6FePKxEdPtZwaTA8loDPGq9wXxi28675Siq_98rGzBBC5LTiik1yQa5aQkAi1psikShl4Sk87f9ixaq8o_MdbbdTQJhBWILHhBmUpT2obSR_J_g7qG0ZlleAEq-Nb5KqB2tYLn4OymqmevVw2XvF-oVjP_PiITq-AWXRmGaJ4s7bhZnhUJYrwVsq1tXJwni6UNHvK7-JiTHaRqewiamxgAJJgbpIfLUP5l2ndQMabT4HrmKkseOUKvlWzrFzoZzb1dgvAX7FgNdtoBTYIVmhAz76xze_cDpX55vDtv5GGb3IRTvrZhgGLryemSbhIhiJIu-m0JOQ185elgwvOoJbsoJo_KY8mk7CHGTQiOAlZEyN7zWmzDLYrGOJRVZPQYnMBhCaC_KLmkoMhCtcq8DZDB3NmMT-eGiPiFN5qL1G2y19mGlAt8a767GcoseZ89n0KhgDFOsKJwUoEpJ6fuGNTBOzwM8rIYvC2Q5WwPB_up6au3sVVSw7nvPJuCB2ghBXxPgyERl--UcilWXv7_3qkXf5HaX5Zgv4RJkLdsg7DJz5zqrIhpCJwzpST-21ZU1cijxG2HBJhyEwtnuu8xzWQeNfE-uDyRF8Aax08N8BVe2hWqEO1BGKCB3rfQOYVNz5KwbOenec_2-5asHURm0Dj8vMEFgzZAWTjaupp64K-om3kJOlJdzyWw4MOQ6Hg9fJROSOo7cuTSI6SfE5q3oY4ZGVsFoiRIoPMF0_1qR3zHAHaA8krFU2myBELGTa0y9pZWVEFRyaFVuUZCpPabKSF6aoLp-I7wC_d82XhIafm3Er5UFNSd15osSKiRiD9Ub2Yh0a-w2uaf7LIC5M7bCzJnPP7p2hpz_iQlGL0Nr4MB9CWGCjRZ4x-joj45lPG6IqDR78pifybvol6gqRbNjHGCJxwwcItI1HiUG3-WYic3AZNZ6nxjacq70DOEgbgK9IzZCS66C5bZzkaqbuyTbOXIvDVmj9mnptMB78ozQWaOq8f5WWtnKvJUr1VxHLP1cxa6JUqTeWPj6sQY7ZkjOph3jjEjsfdaIoEaF0aHt-JN7e_VfBKsWEFOPrIMToBN7JlW7kNsqK_Dx9n08g7ufyPj1C8_iGc3aSYYND3plmkzabgBdjxnozKUCZfSjmDZ-Pcpsi0zO8APM3R17X9PhGSwPDRvwy9oPt9sfrCC-7gEs5p1x5C6VHhAjP0iT5LOxH-VK1bw2IAX1GcDq-Rv8l9WEety9AKQkRqnLOQa77-mR398d7vwrjrSV_5KKXg0T8CN9SXYeEPTPlKLM-zDh_YKUFPRJdVT86joXC6FPkay0QlUAs753-vkarHSlu2G7AXGIdy1Qt61JYhsl5u8dxJTbbnT3FZtl6GkrhnOA1oio83PKVY0ezPf1Fcych4Jt7yBn9bcCsVfEwKk_8oWfzJ8iiuPVx-em0IgHJEg1x8ExNeKY2-XW25xaD4UKGQQ2oemXzJfCdKK9-WYasmtLRRAvLE45EubKp_NQtfkd6a2yB1TSYuBoQxs0ckf_B2tLygwgwvmvvc_MRmXiaBGcBANYkg6n-I6CDuIOe5VcGfC_WjRxgb8PuuGRWQ3ajoyCtSL_ahyjlYg0897RtmUezE61C6qXSkYJXqm2ISsjrnEfFjrkvHpPo98YzjqKTdNRrUNjpdmUwQ0nLaCv5RBlNAEohCBRJKXO8fyouOr2H58fV-Jr4mtnJQI-G9AISDOFtYRdTQ-4EHQ5D2MWQl4BlUyyzFxrPk4JOPAeYI7sZmKvglGd7jVIVZOc9ABWYJuPRshtu41oWIPfnSKcPD0kpfL3LEWKhFPzAraZrYVfVfzASdEvSQlV3NDow3H_EuXyBHC_M2UAk9OR_tLj3P22dwMElXR15_rtaftkTRbeDU3JlVIbgyGnmeGfd5EJm_lGE8q1yEHnNgfBZ4JipHSbKutyxfOq8-lm0fpqItzO5Kd6LHPgYfjJg4x6pOGASUZedrfQPjN4tpXaHvyIMJyaeggoHcQouWRbjqebYU4o_As2HCxUN-MgSQgBGgbtnu_BYYD5t-eDVM1iRr2zBNUk2sEb8pAo5VFZAvrnRptUiKsAo_Q0s9MGDziGtLxZogFazeLnL8wyT36hebDspkxmA_S4E1z17xl5AGCr0zDjztEDMXOYARzyxx43ERQtRclTDADgDb9VjcKKo0ZHrHVDGoMe1s8m__p2WEObH5jdoAu_r3fgzGUeHW7fe-j9WQSNIMiHYmAbPIb2Od-hKqXPK4TVjAmzTIdwdqjAExUmpTyCeAggiVduTLLhkZvxcF3ejUZwpcaaHceTECnDoDNUrVmYGL8OFagWq7yaNpPZ9fe8ZZj4n5XRgm2PVw2v5TrammU0Rva08ZktwZTx5Qd--1eu4TuesLGQcX0uyjXhqu23R4wm6Q4TlfC37_wrClxkZZpZwjNLRbLqN47Asw1Bmmgt8RS0oz99GLNDmjUbc_gher_jtj9vFKuMwdeXqSyy6TosY1N-dZLq702kwVY4jsXFGi3FuN-_xc2dxGVjg2Itz8LQl7vs56mtPqcW8IFTNgcjykR0ZAMynvsni62RskHLr_ooQN7kKxKxP8vh5C3YNxJkavn_n-X3FXLOEddouu1XjqEmT7ME1Al5su_zz9lUvxkMz2WbxlxwKlsanrxs7zg90XN21DmxYGl3iIQ3KZlxS-K3qKIU-fHPGFvoZ2b_JZUqua1wXccKcAN7fgMNdwNhuSXfOe3-3ZpX3cU-AVr3mF4FKXoMTk_aLxM8btNsPsGX03pBLFZ4ny4mNbHgXTNHJ7v7PUqDTI1PapEvAvMrmO4KpmEQEEJzLIZrslqRkMRO6iRkt82oBhljpZ4T9sXdtucLR5Hg5dPz5LB2KJeEaC3Q2gBMUnZ1El9WAMCEtzwOqlZaes-o2T1Jd5zFqie6aJSt6Or41FtfP64HjtQZK0821ri_ogZU_w09LNrd6jBVSJrn9yOUx7nFslghk8Ux10R8GY1uoE-XSJi0MNrx5pXH-V8l4rSiOz0t3Ay49uPAeiz2h_8IB2dW0aC6AJC_cGCFPLCXOBS_W2eqyLUhq-WW0fT3tVDl81H8lsZWJXKWowqpBIPfaQLDthWLDYzC0x8Trn8AOOFwQeop1qgAxylCxGSsuJjGc17viAAX1kaXiYxV59txb1cX9_cDj3jWvFAvAXGOR9nMuvGBb6jtE92alrU-CPY3pSgiyfnhKe63CxNrWIejUEk0-AeakF5i9VLEaNZHfBxn-HRLH-ln-T-GlX7usl4BYH8mfge1r9O2YB2rxsjQbBYBz5ct0w0YTTlUBcj22sTMA92HqV6Rj_9qoO1QWv5ALaolEA1srg2XulOe2o3TqfF3kU91MnVe3x-46cf_ZiNF5L9MZqlZBTpARsKbSSpHTUsZ2DHxnFfThDmr4zJfmxS1z-qIcN5eBPl2yR3lF-GlsqwO7bOx4oxGBkkrjyRWt2T0tz0Nr2GuEINCZ_jmQR_nWpMbw8OZoKAxA9ucQmGKjcJqzVTQgjUs2JlUA-MqGOdNFxt1TVXvxmF0QQj3Gdbo_ug7VIqOTgHbyxwVmTBNDIfuIxDlsyf6s--0ndVggjSo41cdO6S3QyQhO88QthoefLHzI055RJ9c0y9n-jVQZxRWkjLDMmpKCx13fshEyngevnJ3kyTYKYP9BuY68Cn9-z0YrH6Eb00YnSUIM4wJxrxc7O8WjOGnV4UnBG-rEkS6vt-HH89ANHJoYwW0R7A6oEg1lXuv_mGOTJ-tiMqHOF1dEQ4KQTbfN7qrawD4PtwyzsXO-RIKknM9ffwSWfB1aHZRoENGH95SIoqHhd1-3AFMCYYo07Nt-nX0FbQpMwcUP-owlHn2WopGu1BXrmJWMd1NrhyIK7uzi9YP8c9L8AyCC4CRT31J34utXoUF3se64G4rHfveIdMAXQR4K5KUJzfGkiF42LOv5Srv0V-OG0rRGZiDrIHPs5txV_mThiLa-vC8CSD3_qpcV05uogSEpvOcobOTDR-eyTIEtCbAtbsMJ3zqgJwtKuzdhuP0FyMJlkNotA9HrWzVD9TWp5ZUG72DIPk_nqGsg_wfRdb0kdROZNdIkOQd1j49HExqya8Ax73jJoxAPeB0T82gX6ox1E43RH0NmBwLnKTaPNnVjLWLDlr9oPeuieJG02xVRb0pIy2vUHfbKGuxRcAU3JdhvFsH8WsBXHU5XPQ9a9y2xtX9-rdOu_KRy5f5IXe986qrMTqeybpUdMv5nv58792u_d__v0PRcfvhiresHhkEOiVZQozYbsuCBI7CWi1NYQC8w3A29Yil_YNG_BGoe5xmEoFT0jNLRgq5Q84MbdNOn-71qBTawCjlhuc4a0CELvKecp-Dpy3I9z9D3nak68t5xAaab_YiMUnLGTH4O8p7K9V7LlXUmYiABYXsrdL_-66C5AzDt3ywuHMLnemAN0q6_TyePUFnuEycTvJxiB-oTLCnsM8fL4VTRZLNLgo7GcwmLXKeG1GWKipigz4v9GJDFedQMsLp55xt6LM7m73aIj5oeOrKsdAb6dxGjnJh6HwIWuxasX8I3INwMidfl0tX9_2yCGW5vq2PYbyCAFtROHFpaPvkdVXZ4kv15LMJ63-huM15LsyfZjsaU5RYn8_StI0RlbVUL3BqlTq8Qgapv5ppbSBAtMacdIk8ncI8cL4Tinn7klXxdo1d6XhRSaOL644tSs419VdoWd2DbqK_02zAJ9WEFnovjwXYJOWHyZlhgvQADYJjF-JNitsIz-UwVM0r6GLJWTSo4BuNibUlIer6FvAjp0FD0igFT03SPN7oQvepT1-HFUq9kVhbZrW0H19FVkV__LSQYrqghusC7019bkzmJaN5vfcQemFVe8-zF5gU1wAMzNqQXmwik3ydZ98IaLdrl_6M6Y7YJ1P0Skvk7dDIMQ-7X9Sr34LeATlorlw4_S081D92fd_aty4Ejc_RXjFxScR_US7mzaLpznD_wtfAL4q3K7ski38D3YcMQKSAgWO4TqWcQ85AC3m62n4vGlbct6tnpuZhmme7Sf43FWb4ytyAa5P5pFNa5TuWbMiMq_XNYB-2v9qHfW4RmIrTyLiHymk_8Ylk7cDxPB0sxw6tyW0SHLW0CK-rXekg-vZp-b7NE3Rji--UfoASBrec2oSGbVh6TkPB5vzQ6GGSbqT3PvK4aiG4J4XWcKSwpmKG5jQ99TpgmlMpDzwT10GmLlL8rra05sEtumt9IBma9jy-H71koyFuLJ36pwrOhCGM2B3n_WFrY-RdAiWqh_81EIdiL4f9i1fDU9Z_U6d7eCkIkNlowym_-r1yUSnGw7slE0Wv-4aRjC9J__T8XrQXGKnD1JIMPeTZP2E_wqx6RpGd1QjGGBs5TjYsYsHhImuci3YtUfdDZejnEfg4-BjOQbpx_prsh52iB-XsOXGCR3QkQymPp09mKY-jfjoWbLX3sD-PmuSLAGGFMixPzBgKTV3x_gwGeJVx859rAHyhMuBBXw3LO1bJazQHhwc15NKTj5U8Odq1YahqmBIEBr9FD-iY4AQxLuyZqFh-GZetB3PzkreYJdiqrlPaC9CiZGwUGUOWXFS8ybvouwrpZsAcaFiVjVH1d94BHrrRidMS2cGFhUGtkziNbqpUWRQ_sMPV71nizAMnCtTrGm5UqYgCW55Bh3XftMCv0XvsueS_1OKTI6F9CJYWFiOEVCngtZCKaYGnj464rvBXS5zxCir29OvwXjOLC6c_Kyg5HrRtLMO06HwFEbwa0RQ8Az_x0LNCSVK7q06iZJq3bC3cyGea53T-9Aeg7qW9o5h3lRpXOeZFwmRJ6Bfib9kKotbIvCsQgD_a5S7jmYpZcIwG_44UayBVs3cdsUAq_JUKXMGb0o1bHCfrm1GCpiJ66p5Dy71yL3LwgHQY2x4Z4ZC7Aygj74nSNQZyrq_ZQ_W54qwBssnyzUt39G8Ga4KZDdbvCMnB_SmUrLDjvTUEGx9_wjJgWpP72HXcH4GwmDl5xdzWPLEdsBGGK4Wc3fDN3xNGe56USvuOhwBtlFGSv3FVMZiZhBPK_wlGAiu3ac8QX6A_kmPOP-H0Lp-WxN2QUPGqBCxd05BMFYmfzGr1MTlg0H-JtJOTDqVAJv34QeIoll7Q2nR7rQObsUQLOd8x9PwVUr7VobYrZEprufP0m2WNVY--C3da1vKc050IOsbuOCA58PIGfH-SVBoN1suXN4DVdAyy87SgAxumdRql0CbnCbN2LAZYsKWSmjeg1SsfjI6IsnknhgfNeoEifGjYvsrCKg_hWcvpT3O7U3RJsC2TPXNgqrackLipTc5Ux4K6bppNZQaAV0m663HzQH6-UpNYzY91E8LleMPVnPwOvd7JhLvLwQzxlQ4843YfnQkE6AygnBdjZLQ6-i4gwiaOAeVZp4m4iIYPxR08V3nVtlfLLzsT8GyR57agfpJ-vag7tuxZHvRes_5k50BNLxGyGb1tTL02dON69lyVDEsrrdGb6hrwxb3TmilxX1MoT8qGp36srPHzSWGg_dboQIvNpkql9iEn74rMm0SwSbMXjaoiZKMy7oxH2gbU1VNfd-EL4GDuqLRA28DkQymTrCXuPvrWCLeInE5CV-BPQ2Xg0zqZg-ObhBWzmyIGBoSAZZvoTfkvWYJ6O2194KwZICmDUxv2IgFsfhC4s_aqubVbp56BUeNmYVfz8QtoWbYrIApmQoneRfVZjrV_5d4AtyxDqVRSg_g0GkUMzfAHpH9nkzigvftyhVt6rDCk1p5W9osYji2A42FEcQkOlFc3BhOwJD8acElsDHLcls8m9Vt02VHcS1nKZi1wBKvOCI2UdG3mvaZKe-y-_iwuHRITlhF1ACmK4JufTGtmlzoYdqI6rJrOrh0lY34W7LzZNZVDNn-qL5EHeXIzdO5mK-KD7RjcN--asJKXLFuu44VhC8gGa632uj8vHKFwyMgvc9ge4ho0Yl20qPuBV2sltxjTYcG5RW406CoM8Ca_erNu-0uUkQg-qPNqjtISuOqfekwmdLG7RP79XQyPG1DGJN_0vVXxSkA71q7BGFYpqzJ4NdWGLlwXIvADGybLR3WCdkLpqFTLBRzl0aTutAtRxFeRL6-WtB0tPwtIU7i1FQwViz6ih1lKY2sRk459qdOApM13EqtWiAeeb2LgDxYsesQgF38vn4dSWeEGb6CjvvznQbMYYP_rIa_5MgmhilYrx9zAEMo5xilneHz1YkZi0MTln_DFUf65B8aW_bnDw7XuNxqfp67gm9pdD_w9fT9fejaPFYOaldoRPdcLlmNmcaKCF6qjiKlhNPgXmk-A== \ No newline at end of file +gAAAAABpbVDGjZNB8S4Vmu0MwIppf4aE-pXZzFWxFgAiF1o88p0uTzzExbqPzcGKhsi0UHYPpGlwHAHs1c2Mu8QNWLstTsI_ZPRSYNa7BUNAbvtn7mIy7NjtAnCaao4lvDLipg1_SkI_raRRMk-V3h5zKd5Scsg8FfVxXyx1uhWKfuBkg62xhC0SeonGgHUPwGz_3vcUI2KjL9CkFvczlHALrchk7M1unmD-2DBso1xyDyRbx08_luoOPrZ27Jy3dEGnRUyRNdr0b3jRZ8J2I4nlI4nPgR2r8cyhllLiQb3V2UO3NX4tyBF4U0mEq6UfDbEtCPVCiwi1IFYDbvY0xO9dO3nS15OVksOGT4l00a5JsmF2TkctUJLo3Lz9MnNxL91hzZc81nhaSZq85R8au8OijqjfN22ft0tY8i8Z0tUap4YSsBJfJG4sH3zAmPkvD43u4pr9dzCnvrF1Md-VPUM0lLrF4RkvtcJgDicE6JVC6aixMwCgjKkfFOK1S1W88B2Oo1CYc9H6mL-y80ihYsLZ8PSTVvc8HsaaWtESfSqmV4-8kOCI6E9kp4IwOdGtt1lAVgbH1_yyk_cmc0sLvHKoBn2CQwL8r9GpXAqiwDT3ox9-8CZ1jIF0Sga0UNGPF0vZQaJvlFrt2A-VhVoORtgyBuWQNvJcDEX-g3HzxmDca7wRK6uhLpGgj4O8Yj7MmShZUh-LVLo5lCWQMjFLQiU-LuJxqqnBHcundhwkD1q6pnIK-3qCaMqTTxw4ICHYF4ciJyR-ar1gLwE4WH7Nry2bfq15s1OhlxY8z6Nq80zz4Ge1nkcQOb7ht1hXIKkVf7VJUNScX1cUD6cuu0JygU2jqzYRWbuc2fOxWTmLw5I0m1_DN3Utz-Zah-SlDLkg1EI_HGE5shycnl8rw-sTOw0cf8SlLR5pusc-OJmB2v_uU0J0gPQm7El-pjKPw7ZdTmvc5R3qGdx96P2XYb-uEBRNwF3FUgyZJ9-gwsN2k48s-XRixhG5RPOJRj1F927Hv7JB3FxKkjvH3r3Q905uZ0SSkzPUSJSuVvYQqqZiGUKFzn8VQx_aFGoHYeguM8BB2UizpOPTQA_ZVPo8QktRWiSDNVR3KmgJTD83TbkUrLMS1JKRfoa470I93riq139b3q--vzIOIuiB8TBoxd3Eo6qDuvx4c5RSDE-2CaTOh6ddFAIn0vH9wwEo1ZWN28zlrX-Py646W0YOHxzUxfftQ5NBB0a8kBeALFtN6Icg21as-gQCXt_19BU3DTLxe5MawDwt7XBLbW9x08SQzpd4bL8TOQxH2-RhGLJcd52SyN4rGo_z1j4wazZuTWjhX5JjaLNTBgOLlHCnVzUwItLSNV1es0g8KbWyfHw_E8ZhccK1mMolq25Jo9K9ekF7LWQIBk356yiwHzF6J3PhCmP4unZNrO8MlqEs8QMqN2KPjgRDNmrlBhJD9QVbd1Tk-QDe-2dy9rfUEB8HjNSNh1FeB21lmKz7mLFohTiHJ9q5QaIF306IIfPSeLROQpSxSS55RX5ZNKdtiApt99N41u3jtj7My4GeqU38Pf6geMjuqwvlbNMf2AIyFenAqmkEGCI_nxkeSuOfC0lczJUUkt5krrsWaUvWMSA-Jn6XzH4rs9G3pOQkszZ4USqY2U6uHyc-HXaMbXmXbzki71GCBqosFm77eH_yFtGyHP6FEFv3Asoidcj6fqrCgnEgKbQCsYruTeYWJoisi2wBKAxoLsIDl4gkYH-iWK9Q23F2x-UIrjV6fFWYE0rRkeOv701-Qbju-U0eOeZ0jHMulM-3DSRqawGGf_eibHrwt9XzBuq98ffeCoKJGcz1mcEQDuQOg3QOtUFn9aPA0jcuO44usowu0yAGR3gJ0po2LgexOs0ttVj3VByAghRhaMMceHnzSTl91mlD8PoVboGH5tvAssDUZBnWCUD8vpLFsgxD337CcAsPGATMZUKJPj2JzmqN1vFtWUWNpp3THK0D57q2IQTJ6XM5XefmGSquqiNiXHbDB5bwUhLXEsriAPEz-EkbAe7t6sP7vKLX7-tHkDRjwBZcyMXQRe6wawRMeLPni9e0LJPUeJLEgKf31MyxicZgaFJwlofuEkgrAMJIWVs4VDemAPpZfZ2HBv7daR-O6bSwgLAlhEC5Lm83DMmuFs1L_PLORYVzd7KzSulok-Gv9acF6UjfqPy30H10NDThW60sU3kzm6ujPnPX52sruNGpydBptTyF5ZAhsCCnHeJCxcGkV4FYbyRX68GnCuFUzOwCrkbulmdvymc-Ls1f_sxbsTknd0ZrPSrMqgrKFoagakhXU7DUEPFRWM4CdhyQowvMSr_2VZVFVPTnTHkz32LyRHxUasTZegEw_aSy6taYvTzTv5BXY3cNmTEmLBsUt7WHKxZOdhkwAUgikWWcAB_AuXeuhTqlISg-0fY9yo9GCfqpJrsocYkgMrH_oQ4So_lblhfUolF68dldFSJYjC4SWZ8hYCbNQwi72HSUgJ7djDM_pzhX9Nltm20zHPxDxXAMeqeZv0LDG4uc-d4mKayWQB_4lsRhM1QcE1Q3t0J0U02iI4AHIuKffAOYaSb3LUwK9qq13HiWJRXZWmATp8n6esRJVCATxqKwqAmTSOWM--0NMRM54FJWFq-Nc5TwPtquOEo9EcOSzY1wNXnCCOrOFNEs4nqFWujtmex5Qh2fnezXrStJkwRe1-65SgBB4AqY9alt3VaRhwV-HLKRZwnmA4d9-pXkyGVyUI3DBgGSbWxPmyooKTvVTlUlbuTFNxSAOb2K_qg4sXOwubCC-68-6YyYxe8TMwwCDjWKjonN23TscYBi_xjrCcg_YAqYespf7AyNzjtbypOrxL8KF8k4utAXhbQzxjLNcME4po17IoZqnoEk3UoyrYhJmmr8MHWtI4Tj8L3u1P6vljDv1UkDrMlgLNeVfQ5y3-qxmPpxRiVZWmaTqTT3dXFnLKEpXwGaCf2_OmhlTSUor1G7mfIac1_BiuyFyf--WYORvpQUC80pnTrh5A8QGT9-zAUymTooxyflTTauhJdikff0IAYqq1tY_8DR2d-M3XGcXCEBa1kmNwJGQkd-P-MzuU5FoTf5b0zajWnie_yUx8ftPdbug5ddZeC6nRZGzmP6HAiesoPD34GxfQ4QkWNnQ29AEGdM2cECsVtzfgOZv3h22D_RKCQ2LoXPfHOZ8h3voKLJVtj3ywk1UXKUllWv1yAsT6uQQArucqKTbrPNrfmOfMELCQgPG3US2-7UW2TsOQKtzRhA51nenG637zDLSAp5056-Eq7N7WZ36BK7NgWdvOWKI6qgfAZBOeG6M_6BvZeQKa5idaw4TZbdI-vTcIXBcnLJqahH9u1K4TEGebbF-PzfxqkPiOcwJdKpB0AKtngfb5sw1zLjCFceZx-UeakGX0qImj_ZgGP6xvAc6daHFeWoBSSA4Y3E-p7r8-vlBlo_xCAjhZLiK6lopZOfZCXeemQpgNmQ6EuQiSxV3cXPoc_eupeTMutCdZIgKfMRVZUX9V-P_MRCDYUABVBU4fTRtsALYv8nqVrmQKXRJIV45mrEmQa2lN1UnPggztAeOBHHau4uVNjixqkaac5y7mR1IFdvG2AUOWsKu7irJi32bUh4SVNqfGzYe0u2obwX2a2kyZB8tl24_WNi_gZEvh7r_hZ3m2MPJWTEWXv3u46hMDP9gesYYEeLCYB-Efv4pLTilSX6-9Tu1xl6mIid8J-VoNXy0QzO-3n-SYeyGAJbwlknD5IUxiysSQaqHVbAAmSGKBG7ZKnstRdD6PU4RkT3uxwJzUqL2r-2uyTShtsKG68C8ry_N6nPOnoP-u9WnLsjouxYD4IybeCXQiNTCh5DZzLCN4PKs5SOYqIN9l5HbNMD_KUiRqD6zmdPpizOA4HsnzNS7dVzuW_8f0Nsl_wg2jvoaX2oium3Vzj9VsR6BkKXno7T-bLilW72MokZWR9xJTKR9W5R6Mxy3bZh3xTedMTxXDu9R65eLtCMnGBXKn1q-j0wveaq8eYn-4igjtb1IvDdLZocHWX_6fggdULv5AtsIqpXadTMprddJ6OlvIdJWMGNDCvUx_72MFLmpKbVUv7h7A3py147HeTqzlIbH7B0iRzoynF2OcrXhZdbmfuNfWrzfhh3Fxs-REy7_7S9yQJJe-L6UPJwQlkLGnB50y-gO8SnmexgULynd9VSFvu_ZuzMQOHWfDA5OdF188FEnDPD2hWucxTOghvP3RKLggXfrvsnWA2aNlZ6znmeBb-Vxuuo3k3DYNGWiNQmRXpwmn5_Ph6vZMqTnSqyc0DgMbYvprls_cYDxNwTaLoKwKtbRAnGQjuHtCnR7Kz5ClHELpHl0LdFJC5DLZKCJhGlo5xIkEbCd23zJOu5YdHESb-67yQ8nNfBzTRW1lqihmML5IeLfeYlfz5sNSzmTtjV_gGyI6o7_29TtWh6ZHvMIokRcz9JVBWye-90X9G0mc66JTdwCueU2kpEJ5Vq5m46GXVV6KWnW726UbtymLk3nJJTYkYvTYggWK3VZkgmQxIkpy-f2z1Dgoj6wccqn0hxLKB9o7QboQGIcHjjBCKsvLlkclDLzR7ryDeYWG7ux5300CpJiaEbGRZOq3UhX9PaKxIQi7jdOhK1xSjWdyBnJk5kzSFiI5oifqWxbAA5dh-00GZ_qXyLfbAxqhk3KheuOfLklREXh0rj7EZYtjyxinuCNGxE1SHh_tfwGdaYT9vVdqxZmcSm0lAoysbosn2aaWk60cV-IUXCX-rpz7REU0Dlx7ec-9BXxxgTirL1dtTaXIBes4Sl1bhaKjQYytboLBvexomaCr6SsPo-cIUGjoZeHcFj_x4_yMpjDEoBUVXkAkjzNeK04zo8-Cfw_IOWoYpofIsV40h0WE61jwK4nh5G8BuP1hAt-5PrmyIiCU-ZXiKcIQAMtB9JTYzoS1HS24G7k8oey8B246pXc1VJei7aCTi1rrcpVN40KQTVE2tB_y3M-KQInzBfbZPwCCOdFENM1wd3e3-8WsSoz7jZl857qj6m4UAwRv_q2cfKn6sIUXVmPpcW-h14OucjF5nF6K4polxdjrpBVYKWr_j-CL3X784NpLG--D4oYg5BivvGcNV_qRLMCWg85zZFELVtmCyr61wrVvzbFesKFHXb3fD6M7MENVrdFxjjb1RlyTUCbgTC2Z4LiAnhC7-_Mq4xx9NewLjPpjvljglS28z7UOf8kM3mwj0D_HRtXSD00cW4jM0jStRbqIUH2WzfWLY5FcI00yOTPfQZ-WQ7o5itXuziqu2UMt6DdPWq9snvfuM5r4zH5C9wYrEfI-FaOBKeHf4s4uklpD89bO1EzasYPVPVokXeJZaqkMhPV9fMcSAzDQR--4Rda9HO4Kr54kc8ns96HrY2Cn2ULECBfTfOip_kozZeNAWCqeRwYInOeRL5to6NTF5mNZviv10fwMhtMhTu9T1TcGr-HADC-UVAe4VC7ugz9Xe2Cy-bjAOfaxZPI7b3AtQEqDFregt8qrr55Z2evSLl-mUj9et2guV-enCdBi02wfKOeU3C6QKtioSqWx3Pf9JkGg3kGLFVusYSKQDeKhAxwZXUFXnqWfPgtBhTPgI2scpHKjn-n9yvqbqJvNCjVgB8vWZ1qgnNu-UiHZfcAlM03OmcK4CEf33Eqm_IaLHxkMTEh4_bMZzHVtNaXHpLiT_ehhXOReQP4TEEy9ms8JOftFOB644AlNIwqRaNwwQ_3Q0Hpe5r77kCw4s3XN4_xACZ1HdftZ2F0hPS7ardWo6H6Q4a_G3mz6L4qP7WD126ll6oRZ98AmV_2P9BSqceKgJguP-bubm-iTqcql_Ifirug8ACRvlIshgWFWShdl55zSOowbzuYIuGY2fEE-gBXkxAnB9KgVbeydCpwlj7XVLKYw6-vRqyqf6QJXz3rX1N1UidLAv_D_dxTLrNvoXq764a64IXXP2mwAGShUK7X3b_HeXlxHu3VqbrqEEkI2gvy5HlyUfH2jpKGKf4grk4uwg4mSAI-BFMetZ6K-ocfBFSZXIEKYkEvwaujN4t-UFJLev1i1Cfu_14kguXOc7iu98Yec5QGA6fN7Uds5xmrS3cPlUW0mTivGyYMlJdV-vw1531WeHXcYGJ0ZPy6rAbe05lPURvBRciq7vrC0ZSml4KqapNcmuCEe7eUJiUt7gEwDZgZA2hJ5DNZM5zpvmjKb7bld2bCtGVc-B2vb1giQpowNcHi5ZrPhUdomJL9CZCaNXcnT3CbI3mJbqWCUELHnbnrh_7jCazu5B6okp_oitBuJehdi9QxJO-5Jdb-CJ7LsEvPms4lq4uLpPJxiy6_cxTuEWTjA6neACqL2DAPcxCITnPuSpdKdhC6nlMtdog-qzD6Bbl7kjcpOmZ0h5RSXV2XIW9xaWNmyGglwAYXXMdsOjLZ9aX7sheyiY01mS6f0iNd2rT7SVwMFCux2D00llV6GtmZ1ZOXE6waAs96ZF35gbCR4iOEO3TZiRkBYoeaEcTzOPRq7CHMO_dP_rt-HglU597JqXv1dT7dr4abw89bVcoMCeY2oitySjuBkTn0dKnQuVaNAB-XoZ48Tf61LG04wbMupGU4yHpptRYLxBGj4DDS_LYh6MJvqxn8WEnRuFcwW2cwBwFhiy76BrW20v53y6hk6Jv6QQdv0ttJtICh6aId1BX7PjLOB248oJjd40IFXG_3lE5IU3HcmxZCo5ADExoYQCcgQmPXqrPg9B6Nzl02uSe2bhsypXTPlCRbL-G-KpiO6GVZxz84YeLQq8ogeXWD1ptUMSiDSUtsCkNEmTCYsn3GILPePn7r6Z7uAAID2Jts9Y75JOPzDbS4toqiGvyO5j6Q_1KjUizRvMKkbSY0ziPjdy4-n1f3vD8g1mPXJntjDkUOvQoJ3vxMCqH58QzoEezhV8O60tlZF12R1Ng7eFgUd2ymaWzpe7UUtKrKPANR0hdFZ9LoRszDGti6zD8cHojS_YTCYIWO40IQmT1YcDo4njpYZX-PUf4K3t4Swgwu7ZlbcgRI8RdmKfPIrBzXB8xuGOvDZ6qJ5Xsk6nsdsF2gd567Qt87hMvyLuOud0Cbh-LygdoDw55pAl9jTGBDyQ_Yo1Isjj-ly6Qtsc487AuwqDuwNdUPky13FmMpYn84WVWHRYBbds1GiEdFlvk31pZFU6skUCqI6PzwP6VWmXSKCzITwXXMyTyI57Q0GcIg7TP00xxKmyFpuetesri0A4BitO8M66croumWhoZw_q7TMqwd8RagtDp14iq8L79DflI1O5NGelK1IhWrOwdhTVgDBLJVzIiAl3fIGgRQr3GzqOLYHpP9Yb28zgDaYntmllFeY1yjTH0YD9dsA34-5qM-afrm7pDyKHx7CXjzz9ObG5Oby_B18YwpOf4MD-8F9UHAtuimXmIlhIACFrNfOVH8xL0oDfO7wkvP8s62w-UZm2DWAgILDJJ_0giwlaHQ7gR8Nt4x0CcFxVmgZK8G1ggeK_psi9ukPpVy0xhR3A1FKUzTznyoL2-Gp4mrd0CzV6PqIa61ccgn2ZdDxke_r57aSKfGqB_Mhp7NoK_AKlLpYOq-OdawRFZ8WbvwOgA6alaaRqgfsqT83PWHFXdah1LqX3nFUXKgCqvTcwKLabVc5DcfKmAPawkGQ1mFfOXuR3bBDn3h2WtyLi0npbSPGY5GDNX9lQ6q-55rOHyftG1dtJAYGCfZ2iSBY1AwpfK3MPic8B580Eenn5kfFuPOnbgkYZB_Wau6c7J0Rt2TxvsJ9V-dcQaO_ETRZE5iA_upUq_jEQAIhmNigdIdRN62F0HPUeb9--0L42NjUBNOPqyDJFVCwawrXtVM3K9ekBG0uqEQun41GTtKpR6dsLs61N8HzgTfFV0d31Z4_i5H43TyyqWetmxJ2BLCcvIBMPvbG484izBfdNsTViyo_sv-X4RFNN2omV5O3eh8R4LmZBHZ5qz4y_q9DAHws-KuQdmHyy_uCNlgwebI3OTaYSq-OP5LkzxSn8jjZbXMU0VBh9GcsGjH8C2sHUIPk21Jp4eJPFm7bblMqWUUAX1jFgz4RbMAZsHX2040nS8fV0fXOsM4bLTsIEL64dQmrqPHdNC8hdMjkdE0_TN68I76sdbPfw9D4okpscIw82LzzuGoG9hxjdBg8EJyTmpr5nZU9Rzc1P8FFMSQROYK152S80bfUHw0DnnoI3IQCHOMTmIiliK_Xg7UbtPjppC60k1H98qOcZrZ71OkHvRYC97lNcDPlmGd2daEcJF16CbuYfD1KIM8bULlMZwdUU4onwudfs0HYYawiXXoufyLqACeVsWsXXV9Xd6B08OK6HTeGlu_VCECvg4Ah_8QFmS9azY_23Dy392trtVmtdxG2clBZg9f-VcAM2T_cdfYoxCOkRfehopf_6yJGf_N3VmM92jN2oVEhkYUbIaWJNE-dPlkd638KFOM7NzI1mGOf2gQWdm1HgVIoP0iAa0sGkOs4c6I9hhVl4n-S1NUZGOwO526j0JxIjJpdZuzwPcIK8_NerurZtQqwDqAU_M521tjbDt3LkAQbp1mGg37BO0H2luT4JH9BtjcHskd63uUht0cdha_UmNGSwWgFpvFB4yHsAple1iV3FPkFUcLLJCG75Za97tzgK0rkcW9lR5dE2tvQTqenPf_EK1TWSwsfhp0iYttTZepeT7vNhEHYKw5vGMMxeVjOYGBvgsZWNldk71wxV9nzwD9bKGl5SMFGeiRtnA9eaM1MYISLW4928yfb8HKsLP9FZsI4rkp6PQHrFUDvEWpt_fjQILRTrocsMjozf7VFPOHjUrejv1PEKw0ztLwvz2KSvhz6ZphVZB8ZRu2tC2NZRKf0H6MHF9SVTXQbHlZHrVUJ3Ws9cM53PV-W_3cRmMA2Fe3ZtdKS2TBVQWXsge5tbtDWLHdtKCVp5a75J1LnhpZWcX1LVYpxv0UCWGaOZcZOBIj-7XgupO8w98THz8q1weTbiZUGphInFoapp0n25TONPa36WtO6PFE-7dem6mWrFwe108naShj_AJLzKZB4CR6dtTPKz_OclvDFicF6yJdZvSHGIsEd1tNXcdyM9w6dQsATEZu0hZlfBC8Rd_pF_W5MiSqkGNMkwPC_IY4mmRW09CvIKxO3LH1cTiVTazsn806Ap6FWULTMf7Pbz7rXe2iYzsMWh0reqKITnMEXv8kR5jkAZkZMpkJTxOciDK7sbQNbnarT2ygEDI5RxwSpF1yQUc6pK3N2zQYzxRSYeEFkenByo_5I6smY3nzaDyTV_K4h5R9kWAOn7rNw3aoVdDBRbA3uRvabobcZQUevbu_qiE_HknCFWHTKMvcBp4ymZk_-Z71-rmJ6bhmni3G-LwcIYXbvsB9OhESrhrperg-jrvFRfL9G3IFkd2NLuSBhT_7_s5EM7qzPMOIHHzzlp7yP5Vt8FdQeiKoLJarKI8rcS72LxNLJfJ6elsuRc3XpmkGifO5jKakqyUu5IjT5wuwjF5z1cNv3XGR0mNcjv3O90SpyAgMc81XSvctiLnVua1pLQk9vMxFMUSIFbooj39Lyq5s7xk_Q2c4K7P70rxU65FQgZX0nCH1ly6Iw_5rhH_EL6_2ZOPfh4xk4aQ3bsQI7xeDR-exFXZZ6SoMpKJk1JkNhe3HQgg7U-Ta4bj1nScUtDnVq_jCanYubP4j05kA0Do0eW6O6iN_XxL2QoTn_8GF7EIpxTcjCpcPMIBZRYD8d-bcb988ls827Fb2p1IfeFUb_pmQMiLLLTF1rbj1jOipu1szzUfp-MoQgT-K91h6HBV7gNpryu-9Yt1gyD1hC96a4iZ5yW8oVMTgVyU1K4R4Sy-7Mo3S7N2m-6UJ03LzoC6qJq3qBAyymCyEmST8LpnTrFogW--jSddPcpmUjCtoZJJOoSgfOBOnby-2jUQG3wTewJA-6GcXogj04xNBTVj5O5uCGcUK8Afa8hDGSUPoqJvOUZ9Hmqc_z1UkgQFTZwI5qGRtHJ6v9d7Ad6VbfXtAnfHHtsFt4IQAyNbJO5eHdFRfIB2OqTUYZhyidlTJrWqugRldHhnrlfM-vaiYAaFlhQKhnvwZCLx7_IKO03lpOYIfYZRfWVaw4KqFVpWQSoL5PgYpf436wXxBZAKMjoI3n3strAPpadByTCibSwDiYm56Vy6kPTe2ke9JmK5-Df2ImcCQsrvYbWKY0_XPNaXkCMZ83UBoPAs7Q6PLb48qsvo2S6qNthWrbtmTmoyrmZgyPVpBOTev8Q9GOos7XvyP3o3d1W8WEcfPHa_CyYn1JksklLh0dFAfjn5A3Cw5tDcoRVhwm5AXwaMe3SfRXusSf3ci-YFX6ysCUuEcJKNcs1kU7IC_ACgoyHbb7vwSPkZGLDWZFeNgLGWQr7NOhmtGWukP3Qg1im5Eea33XsMBCpa8cuXD9S877qOGg6o1Lkno04JElCRBfdpZ5A1y43Q8RUpL9Q8RtFdsnW9FWjebHmZVdjBL2CvkZmKDshzqWHCECU4Fce080t36l-6P3YN8Lsa93f5qCLzFSMnVOjupihObVUyAasBWBsKu1I48Yxk2BqWwFNhB3Njay3geinqk-UUXI5ZM8q528I1H4-XjxwJzDYhYUQ1TVkbcltyZEsAStwS_wY1Sdt3MdQRdrtkig2DQEjgsg6rm8gPYe0W0u5Njr25PXQ1UlWxxUp2Y_9yxOGmdMx3wLxsPWF0iVEeCkmjQyx9bKutrDtuQ6RrSssdXGHRqj-zlxo3ykkcDoewZ6YHJZlsqftoJY51GcpW1ZFOshHjXI-rwIhlibQMnltk9E9OQsF8e9JL4XhGe3ze9hPH5n8VF-j5VmnVZWMRvEvW-VDF2fOVUdieLE7noVMJrUDa3UTO1RACYn3MEVG9kzURp2ccgbSa4UNK3stXfMUoSS3470mohcQWDmVy6s9SzKuMCBE6bWrNkfdTKbM8VZiTdR6x44soZ24JTKXSpNhDixbMHcrpybdzjw2znblB2cvqr-pDOnHnBR8qAhHwJDikVZKZ1C9JNQOqMwcd5YrrPHUc7XOZwMm3VrqQu1hkqqo_zxK_KwGSTml2nQICiE_k2_LQ5RBvrkXXeKdvQM6a64d9TWrADvEz8mApczn--cj3vn1zwgELwnhdcFJUJwPXjsFvZIZhVDL_aIGlzTIp40LAxlB7cUuvnMYv90_9b_oqtvInMEB_xG8bAMGIelnsnycgCockhCY8dLwk78uAfcwRyh7ZxVBPJ3C8ioRosav6ZEUEEMf9Kro1oxSQVqKVc5gV8ibWUl94YzBJm2d0c6OxOAyfTHqXnuxgVFwGLez0lq7bhF6z2b3MpefeddTanG84v6QXHv6Ao0to_PeDxgHYAYw51XmlMvoAsqE7S02qmmOI4hkEbPtvm7LfX90UzK6QY1swhltPljnUc6o_AHXwq35EFS8z2P9v8KvEsoKHQe1kCjSM1X8NIsGsCfW_-PzWQL_JVmUnrm3vetoacbQo17LQe-XU0EEO5YRmV92GmlyLgpaFm5emyDdgclf049MFzCPG2tihLMxHmecrGYLxc3rHk57VsLO7G6Ch5vg_QdQYOtlwBBwJEvWMLY1IBhQgh9d-kJe4j57Ax5SwH9jiSXSp3wQqd5G6IyCLPyQ7e8smCD35OC6STwwCCiwZG4NYH025KxjlzSeUbeo1sY5lfgmL-T8ZXMIqLfX9FCW6Z60BnipOCIt4hu5etw2DfFaxLXRDiS-X9SACeqcQY8gDXXqlmBvWe_bV7zg-V11GoCdXovzyU-a-T4Jfg4ZhO0GheU_z-fmvA_Yp10QtEOZAIwFzbfE0mOrEtgaqEIjB9CYt23S1ZnjGM5wn8uvu3uUUwJ6vcwlqU8LvU64NZ3qFEhjpuHzdLyP07DpNOuH8G807WazH9mgf5P0xuUxTG1E76_ABxjUb48PFMW1c3GliNZtIYhtGeEZ3C_Rgs8H8Q1SZsAcGRNnt8a4NSEWER4OP73FldeVGFXlnts_JVkGc6kHDUzm88eAPLl576aU0_SDjJucXQxybIXxvNdlgJsJaRk-g3dVxwDXBkkuqmxEW5yRf3ed8T_mU_NZrMEbnMFz5UFBgQo6pt9YnWqKmlQhF4M4Ovsq9jnjlZD9HdSOW-iKsPzloKLWfjI6PEeLcjccs752KmrI7WJiMr9l_Ydmi6CbBTmRd8p_MFwrVLcZwBCOnWBI2QtwtOnh9sO-ckkqoRyuDZmr_UExnbJxNlMXBTLXB_4XBMP6Lwdt2j9Cem_IagTUPB6Jsdiu9XZ5YNs1xvGMIvTudnig3niSKF2PId6WTm3xNpAMuQB2HGTaAOChcn9oazPSEPN_1evnij15PxycwJtHb905Papeuwa9aJX5lk2xZnv8ArDLOiA-iWP7qIP7oM2BY-QcrrZCA_1XAhB4FFsIWYRWjlCSbUu6Sh1Ez2cLBOcmB0W5tR3GvsySOWyobOLDLBmoIj9QAhgeXAWmZvqIcNpgkMj0ZoIovYt5FpKwftyQJLA0c6P0EzWL6fmyzKMwAVqHgxmysIwbfzkTyczxONLfCECs9KWaukj0d1dYCGKulVesiXQ7PeImvEm03DawIiMMxNukF2Z54w__Q3BlFKtTaju82_DKB_vrK38I4GeQHuKwZQqfQGtmOfhVkRPwZTdBROt-FLwG_-0AX4oUMi4u2nhTidxfGxPXO1yFXC44OgW1v1kaQ7tFHulGxroAug2aYsyEOTrLx_Hgd53bjdNKR4ut6xpb8hrUp20z6PpGs29uktM8HtPFwoWKem90dowp36KyrWWpDx9jcoAKq2BHBrgo1il_H5C_424SeFjsuFH2Haw2tJg9BZKoR7LjQ5x8gzWFQLuk_6y1y4joyQFYhpL17M1a5V0JTi71Vag9UqNCK5FsG2CjEWXfyPt8IZLSE21Gk3clo-oLmqev-tpPg6btcqU9qex2YotEC8r8-D1EzipjyFda-iZcpSn05czc6UunBMr9m88IPqvA_Gd61hWE3bTyw4ZyfkqqMdBmvF5HBnRCYH0fo-AsjdvW3WHtCpT46okXaIDrYVKMm4al9BvwqpCtmt7Fk2QZl3PgqUH0ZiYd9nK4jbEpnaX_AmFXS7_yECXrdXLNK9Bv6wHRgjKzY0dV14eXUjiZo7Z7YA8fEbh_Jv30QQoYYt81pE4uUDnCjg36lfUbAg1d9vZfJ7LpZAkeTkml6Ilul7rrIGLYUT6FiUo5FbYDFhBhJR5vq-5Mqy5BjTNAV9wqF-2hVAmS9sGG5mAq8j3zyO-_wNcz-zGzFGwv2A7fWCtpQGcb-tKRuOY8c-IoXUSZbb-I9Sgx0xiQYf8CgLJECbhOmYyoM0Iv7ZUitGSQ0WuFIXMmY_3-01u6UCDcylR4tqc1RwaCWgXGTB2_DSivZhV4nBDsK01y22Azk15N1x149DkpWs9-dZpJuTP7kidgwJTMWnQFA2b6RwdWWSfk19mXLS2eMfsOR78mZKYcEeKbYeT7z2D-NP7q9LW03hguM6yT9_h0anmtx28CstMYJ0Nvvg-fdC7FOjek67AdeJ1UGYTMcim1gWQprw5L7uzQhhRidvchrc9uJs4Libk5Np00qfR5Cm8e4GZuowewyEsnxsoTUARWgvdfgxKWYIQwez31nSzyMZ9Bko-vk8WG8mCshDjEhukQUX-U_7s8MUB9R_Ok8uPEzGe_iO7ZuGuidwtI3hllTt5MLp7k43BcCQfvey7jeMPi4nALMwMRURM_B9-4asJZfM1iuW0w-lvW20AU-6ArrPuO_rR4G0KzfjvN7XdG3IE9Iy41mC5Cfynp9JkekqHcwntHKedAny0Yn96l0F_nWISxSCl9lyxvhIm4Tba7ZJ0OoBBan4DWQ5w4z5PFkcYYBrs_T0YMyO8r6Lx2MWMCO73xzcYnXi23KlgSn8ywDt5uU2v1XjUPTcJPEbQ0V2q4UPD5fIGRxmiDP_nuaM6iySxE1VKk26DtK41knoDcuIJSU7re_Y0F9VUoeWfL7yregZKKMfXvlh-1YgdhPLcYM_OR-mWdY6mquCTdKfQ19ZSwY94xZF2yLDYfKa43gghsp3WaCYSxE5JZ_wb4EqzvyCn5-atE1P6lXGv1NU4eWz0hoq3xRMydMd4aL_ITRH__hSkqjGkf06gWhGJyGnFNZyFtsAZ_Am9Js6rCHdJuy5wsEvg_NRs3XxlZblxQe6oAErDEjIbq4iBYxjgx6eGzEYKE8ZlO5ilxy_Ws1cGDuNHkhcVNQ1EU340rCiUYeRsOHj-xj1Ps6xeOYKhypBBl2_C0i_No3Flzd4aujnmtISdFG5ICjWon4VlcS0wVtM8SPYIy3ALP8cjGvlJYmXK68y160E_kzue2w5quLRcs0mE9TcqrhNsqejsWaz6V10bNxA6ucVrb4iecLTaCvVco4SeY6nS2QejIieB85bHK9-XW7XKT_x9ppeg-NGlsXeDzg1faO2wjZtQZEQkg_SPbNfrXrDU7FImPFyZIKcns27y_ie5JolS4llCOI_mfG77WWiSEwoZckNnxo6ybF2ineh9gH3gjE5k4h9EEfIODmFGL-z2_bz8Un1KJ7V0Z2oCZs_EWunkKrPFjbiiTHuMsuH-OLi7KL9KN0vWzQ7efkdEh7Ymj4byqxeYRg0M7ikKxoAJy_JNACPssOA_s4GZog_oyvU-l66qCTtI6X-pnYj36uVHZnOddvi1-pMby2lbU9d-m189QYGNLF0ugncFNwEVHMGbtVhESi9n2ANCV5sTO4nKmyQwcVhUXYEThLFC_FJkZ8o37wblFExEHz2ecwgFAElbhYmwoVQXYTLpxilnCA-8rCnZuRXR67Ym6vljd8HqRBDxjpgwYFJKIWovljXuHH2r14h15ApmqaV7H6DugfB4YrP7mAXJRCkbg1GA_G2jGOh_w9xSQNkstvWQYpZtgNVLXQYHvLH_IbIRr0fBvTkt3BDRBiIawX37CORgW3_oDlXx8WeDJrk53qFukMD94cHgrt0XM1Ua4Q-eAaHg0p4r-Qmwzrf7K2wUGSFJepCXChocPRrhqxNndE9woyP-lnssq4JbGu9g66PhYnmR7xeTCbLe2MdaRFmx02z4o9F6oEDBe2ccAa1nGLIloKLRA_st0e-A-7fQ_swr4US1E83GBWiYZa5uvlsorzzphb89gxh0gM3d4hDp-3w9LjsWE8_cZyi0frlQnJ3NoBDnDcMWkjfrSQkK-BzNqvJzgsz7XqGxXG1Ttl6DaF1UvfQ-SYipgolXdrKJPaadaUcyfAJ28YXyZMXPgG0nmeOW3p80Su5lju8ACXxACivPCDnhr6zDRtdb0PCumBZg3bpcNds0wB6I53fkXLh-YBkBTJCtQwBcIR7FhuqrQsO-CgGAOX6IJWWkHqbzfLY2fAZQI3wXfd1QnUtI8gaB88DQfH7EPRtyf7VF5TfBVhqF3Ru7vtfaqrsp8nfEWuP1oHiRZSLdNEC9aytdgauKn--5_riozm8BJRx7J3c1fM2QVj01kutqvYFUSMbRjDRrgTp9nLxVUCS0UVgtD5Nc6Q8jvee6Zpvd52ZJ6mlkySFKvKsR84cDE-prJtQvUyY9qIqp3KOmh28mqYcO3WsF8k6qouR2acwlgT9K1MuBQ8zUonPQ8Vw2hYnJzhzaK3iYEeeyCoYEUI5hjCBM04fZ9OMXo1VHsbxTdLSM57kyVZdUKxtgrhtaQ2R4x2LOQr36We5IBOBRzNa4VakwROtkstvXkghEfShlbXVf8XcWxvu2YnXwnZrBRzLZE7qB_KRvrJ-HtnQtQo6v6R3QY1Wo2Lf7AkSQ7vvT5wPyTSEABKEWrESOHEBvcBzB7VtG11NElCxBvKtoNOOBA5YyMB-hn0hzZA80BFZQKEkLWQ4W7PsLgTD8Yvo-G7johGoZnnpSgJEJTICYlljUhvsVcSzqIVatzQiX40b-k7lYuIpJv1XTo7LurhvQL6wmgQISGnixIe3sR1fc3-QwOPlyggOZaDQcDZ8w5kAzP-RdFzh72P_lMp_huCqiM0se1zuokBtEGyb6auR09dVf4FTMe89lPhMtyecN3pHqoA_1URoE1blJ0deGlHvgG-XnQfQ7HXNDidV-2W-3UENWMSFI5FUr5Ym5dZyJ0r-6-TuVsGkMxxVjruPKT-mk6KpO4XAnHckuQpunTukcfNDtjOHzrh6B5Dy6IzZE36_3IaQ36_RKEJqUfll42qm-2SLcqpiXW6SO_asPeyyk0wtO4l2Q36IHmLb-1E8m99xSmV9cRr0RfopxD51axtj2OGA6NCSgNcsJUQEG9zHOLpGDZQhK_ApMhBZevvQ2Q3OpUcaO0Xegoyb6Obc37_4FzJjafHnV2PxHTzYNqw-s62EYSNgYr5sK6Z9CHX9-Gfxp4KoU4tpyAobBpWuTsp4HBMPHC_rerY0lCJwtJi2Ba3mW47d65wORzAmA3pbvqDsp9rRHnh58TfKKjOBChv7mpI-3UpKLfAySxE_N6ADBgm4mtPd63Qp0pZYWckqI476YIQc4tf_VCR20JuIbQW_QEteuY6dsfxn3zSRrb1e13VNaq7ZOBSOEJVt5gjSqotE8N9AWisbl22y-JkjLaCf-6o0xNHiY_nucYp78Q8-nAhGmbdSoFgzWR3tSI_5OIn36oO0tMPNRYFIruSK9sPrfewO6Pq6bOao9P0uTpZAaj0lpNzMOBDrNNOcfsfm-PuHrQaccDbsUy8Hq7zbc6PtfLlQjJqDZIxHUk7rVeieniDoEjn9ez9VXoOP21hPo4FTmEjijiVMDmmNuobOtUUAwIZHlzZMHflpDBqYIyTn87A0m0G48DRBPblLuaIsFgvUVwhrKxsggxJ9HvyB81-VwxqlHto6bzjqV23_gWTpvn2VcC871pHJLzv0Ll1Qz521UYSWqrZB9e9fOiZ4ALCIhcLgJ6WSqeSLYfi1tuypFbLFIwTyEf56sg33csLnMMv-g6TTH5McJBNTgax7ExuA9DMB4AWIl3qbLiRHosyZFBqOI6zgF7ho2jNb0ZRNHb648Q40peYTNNAUIDfBzceKXpldi3WzOjnrcWisVCAMfAMQLWGUxjfSsL0YzpsWkWrosDMfHu6TsHR2vHTyzYOS_autGkaIIIUiYtMyxiVoxYAuQMu19Fk5cIMCKu9hn_WXp9ZH05h5bAn6p1PfV3kSraKNIAmMhSSzErm9fvTJL3tFFEw-bTKwDM6dL-aZjV9ceHrK5064E-RqXqSphKqT2G3VsAokDt3MbYy41t6dIAR-VA8aveQNKmejp-09m3AFPHJvYV9axCHzHZHCGWEN0s9Od0ORXBgRoIhqa5qtxapxjMV8VnF54BuQxukWM9FUTeXP7gNC-jYPcw7Eyl2vVGP7tVFlnRxjR2zV5Vg-FL4aXhlXzQTDGP2ODLwJ5i9hNFu2hKvOnTcRUuAdIDs6bYemR_DiqRCaIr1tX2Nn9zeWSnbQH_PLjJwn-ApebFC11kdVe0XEzhQRpEO3okeLGx2ntY93ofgYkN-TJro4MVBbK28bVg3nXsxLKrWJmUrEHyAxFvJtWpVc8WHILhJ5_Lu8T6OF4ZQd5xM65q4BVuLBaba9Ht_jRSC8BV_N-uaoRTUQJBxfN8MgL_V_o10hf5dHCEJtWnjr59iwwSQwRNdmS83_ILvpqTrP0hzzD3x2H5YhMuP5m3qVqGriD3O8br7hJ9GP9ivlmJY3fjGsxVmUo8586bVwaIJt96kRC9OHVJykWIc9kzzDbDSaTL7DIiHCJioD748vxBPBIiLmhJzcYelc9x0n94mlRoYmMkXC0_KV9E9GiqIRlW9mb1e-FFW9WTrKOq2O6iujeFq9lOFAFKlxpLqNRE60F53XwgL2aHr1izqZjwtnVgxb0qO2kE4_lwGYM476HDmgSXH85k0pN_kSbJ3h4YxJ-44RkVblFNuRhKaFp7yYRF9PgC46SyvwgtcfBlnXxubFuJ1X4BdHm-CSl377A6lMn8EwxGXe7KvLs3Nwvi22nD_JbFeWMQiuXQxPv3kpvFVlSiOoxuP1x4b1P6I9Y7cR5JyOG4storDCh3WA62Qp9cno8-Qu49X_xG_1-NbfsIroZ5E5edc41fbBJyk3hhZwKkS500ISSNDbsq3vtJ4Y62g08dBQKyp4slKm2Wy2BJKiBcC8dLhlskaTspckRMCE8EtcA7fanrQXG8wMFG20do48quMy_-S-gWyFzQpjmI6aEmZSmIxr9g3_30hIEWDoJMnOeehq8mY4ms3Ez_F_1dgjb7hMJqlGm9dZpmtanLdapx3KMFI5y0EOqTMk-d2Z3cx8eFvhsrbVh0kjNpkGt3R_zR3H1vA7RLe9dS7ysNFwyAIP_3vZKWO72arNXdac80nJFXwZitbp9wG5oCSVNbPBD90aOm5POJFdCJr7PJYxrfma3U708mOFQm16TORVjmBikhykIZoDeWjGwVAyEK3G9bEYD7g92gSV9-jVEmpn4TvNQzmMuwK49bqnuxRSca_xk7sfXbaNgzgCNqnxqGGE_Pa3GpsNoWUm8a48ueMO2ztvdTlUm0RijoVw0lbKaczff_V4055poB0_cGczubtJU-LM-10uscx0uKQYacFfL8TMFbR32434lygegGmzZMEOvGZbGye3XMIvKSfLFswAjhG8bagmhntmgw8OusAiqaIJyFxLrSbx18BeuIIWpK3Yp3lPcmOnyBqraqOlS5g8uDAjTn2oViOoKi77Le4ar_zb2BkHISNGKbKcr0EnZvU6OD0bsC0w0ux9kIdC2PoE8R0cVcB9CviWmu_mHEwHp4QtHsLnmEpDqeHk0YEhsTCSrb5HY0szogCRkEsk9X65UdrnHDXyJEozD_mX9uKI5ItdKHyY3-Y3atRwWCbUE7rWjeT6qdXW2veXaXukBnDL9cPr_xlE4yLaVTCeyhTFPdW14TEav7fS3ydJZ9hCbImHAgbpXqDnsdoDhy_YudBFcdaRZu67t0H7oReYPRABUz7fig3KEh8RqDTuPXcEJNmul2SBHzlQxv8PRmLpDdtsYV-UYP1xOcaVnSQ2vvX3VimHJqVWvohGsdRV7kiRYBqsHnmDaMj1LN6q8Reixkz7j8zBZrAKFcuK9G2Hva2Z-46Os36atYv4UuU9bC8iS1AtWkOYyqIxPQLN6axX116gdzd5nWqlxb_21ijxdXANL7LImAKGPTTq4D7Iw4cZyNwZn-psotNzBLamwa69sGCqtWMAU0xuHmU7NdZc_0rrhCdsNJAOMto7v-RKEtUU30sGn2BEoxJ1tDo_PE_hug5iYY65a7I4XchnuVwm05hcTW8GRT7_r5ji33quFS6ZDxQmTflXdXjx0Fou-gsLkIlU0ec-uYNpEsIn1XLqz-yXo1DKZ7fONDcKx95qMOxt8EZQ7ZceqX3jQNm0y0CK1bhQfhfOLCTLjz6gJg6qNvAYDeq0jGQB7Hg9WY3VQQ9lohn5j_gRbDQG-Li7qTagCiy-bGMAtbgD2HB9nQWclBXZuAijtTn_ufEU8iGOTAdcigMQViwqOtvgRB4i1nPKUBIvkzVpDPhYHPhIhVkzk_FWzsPcLDa8R_fpu_z3Y6YK_ppFAIi2mE0ejaLQTbM_lxHYoXv4NPqyGi_wYGOMo3Y4f6RBR-fNIMZJZwJGrMRRXVU4g3BcD-ZBVSWuxw76LqdfbhCqxnTzp2GNhlreXb8LT39ak9bAiHROgxv9p8gB7YdZ_jBvqtP-67cUckVyOzYJHWrHNVFnwOEku2430sVJnIcU3wx-Y3oQ_6lmSgsu_9GYCVwCNhbu0LcQ6YtUG4b3ivvoApwnnNMURoViqHzmagFqO3TU7OXXNZGmLqUJfPE0sXzkwYIEb2cOFzxwVmyLr7lt-vTiikyeuc2n6x14NfeZAQDbAHYPwY8Tz4o8QPneudHwokZFxbd1Om3dY3jPrWKVWOwHMEBcq0WWVtuUnZirKfW95oZDUrWW5OLWxevOocsw-LXGNlrB1Qxwu6yxv5P1yyPUxUURq3mHIEXNvOG0IzG-ciHMNsFkdr-GV4vuwoR-crFaLJLjQAwm-kVJB07OsAeRMsI0Gr3-Q7Bn5DbwXy8xi2qy7ENepGcO3Ss1qmISuS2gNcArNqgJjApmf6gdiotxOSKu5JbRAdoysNaCa5WuRkSm_PYRa7pqfXZ0vb69TfmXstucwHFvhP9ao9f8TLXY_D5qY25c3hMZ0scNqQO7LUT-dKeommisMd68kGKcYGd7bx6GTGtwkuf32vANZBym5jEgsp2fn47og2jvAMmLjBoNdZGk1TAeDvnA-A5EzWyEkoKKZJORKNsQl6Zp1OkJoQnsfXVZjMeUHDftKnEGDOJgIb34DFAdypz011FQzXvYhp0Hzgwph3h2pu0g6-zc019-itL0Lp_N84J3jsCUTWMkelt2TzSui8XtfzHLahFHLvnu_eVvHNOqW8cmh1OAHpD1E6uKxiqI6sk4divBPE5uQ--NBbKp7LzpcKAgQKtHp6hf5o6_E6F3dYFcv81pBS5tL2V9jHDBUkxUBLIcbT1gSU-O6q4wrFMYene8pw43wwWt0Vvpb2GkQX82N7xwNvg1u_o9lp63f64GNPbx1_jBMDVvhwN2P-PSqoJbXgbN3kLaRK_5ZyD_CuLmeVNsOxNsFlXJQ0vvYpdnIrGOXJuTiOzhzHCab1JcDaqu0RYcY7hJCDR_CVn0NBH0HwG_OHIvLhIw0SpjC5yzMUJ7Ql_I_qPEb2WBXZP4-2QU40Zl76-eDs5yQgAqqGKoKGKlpheBpzq278OjEdrAGS6HGa8O7B-bP-hBP42l_FYBbt4SPJfTFOYS9xtj7mSbwxcopPggFF_N0PQgV5tRA510bpjQiiWX5nDlaQvhf70WQajnTERRLOpaRLogPLYgoVnwEEGASKtNg6Cy4NeTvoC8wyYX-I_lmIaj_5d5uLFYJpD-xk93m8BNHLiBOe-VGsey_Do7Nq3_T9CZ11F9-woIxINpQTWI0ktDXoaU0A4iX1CPLSRI8ZYH7ETLdMzml1x1vmsrtR1FFzbmiDgk8bgOAZR_P5TA3UguTuWwJcFBiPZmG9zEW_4uCE920pdkUvnXKXMyQSBBgGSG6oB2g4PE7kQctjMJ-H9G3C-1Lmil6LVVGO44HByD9JapldzYctsWK0WVibmFeXy7-Ep_oVAtFHnrub9esX65YO1Q5yk7BecwbRjg0L3KAssd6Spfx1ovO4qlR6d8K9zkplup_mgD13P6_gJAxDhssdRIT92lstIwVktD_DQoe5H-TXwTlW_5SdiSxIlkU5K3BIAm5BRDdpnfpbstZhGqBYCtb91TO4ks8gp2gMxvOcoHCxEfHC2u98hqKCZXivVUUak9CKck0aOljZyPw0_gRi-0HrAkHtSAd-S6jLvpTYRlGXGREkNM_uzXa4g9qgLe1OqqtErHp2d8Q5275YtpD5sELi2jyoBf6prPFHP6ATiPiXdIdwtqRyLJgkjxUSm4iPlLJoM_yuT57ssBYIOzFWaOoDFPfyuU17UC1lUT0w7usnSU9JYoiD46jVc-57IbKCOdIEH-bXcw3KS461vpmmMliszbuXxejyz9532bZwquuDlaP9kxLNwuW0kSNj8wpSJEBuumbEbtxIJap7YflPczxNiptIplzDym77-MRfhtWANC_LxScWNpCcptHULEW4HwN0x5-wpbZs5QzMlWudR9HKg17tu0RTFugB4Ww9tvLl1Fx7kWOjhIi_WsBcRGqCYdAVkYk1sC8wflJYzDbN1NzPYT-hZ78nDmgFGPwulif_he3becf21bJWBZUUJa88Elqs7r1T-iSP8tpjRz6MfM1IQC9kpoLKyACsiP8SXSbg8XVKLALRFqpYzwxmhjcVXTWEmoYb-r5n1IHG6miyglNRou2NRMeMcJ2xad9cxOhOOXgCG1wMnYy8OtKcMo6Xj7-71OLjzh5XnjalB4k1Fg1RKcN4OI3ab-mGq-OdRETdmIX3RXp5rda_lr78BbM81jqV5M1gRI-fMlfAeXGAeggWkKRjOHmaSxGHgu34agLNIcKyzKsvxL2yCeIcJcNoNkis5pyLBO29WEZ7c1KKwDaowfrrfSW9j0m7DDdxW7EF-HbdQjgOt1Sl22tWxHWr_bwFQac0w479VYYGWVlhlxzoMuGTw2phnvvWszK_msvdkHD2QYCOHQpHUcXKD-Q0y-unOnEtk2AJVGglcqKYK8Ndq-FDoKBhNWszWEpdtNkgwqdFTU_imyBlZO075JpKliAmwpu2adRajv6nbDnbIqs8WOV2usbDhnJH0MPqRLi3XHALizfObUIqFF61iHnwXckvimEoff6yLWArA3HMKVWtq6DcsGW6oR8Z69FYKch8X7MsxPWqkeVp2-tkFTrg6s3ZklTZT3ixz8Y51tOgBrEIV50rj1vL1QetNRgzVW47BZnaxhOq6OxB2doqF1V5Lb32mmkS-C2u6zL2l3njrJIGf4rq0IWosn0M0l8tLmGscU-OQYrlhOFvwBqXLSA6G2aE0YwC59yGG3Rhc3Ftto3vTpHA0mMtecVrA15okKiQ4WshHf3zVGKR947hAQ28-VQm0B7nzYlv4mtwv1OmO23NDgzuCkkgzP-rH3ZbkzVTPfRcUpeofQWbXTvgxOJ5n8SgI-GNrimfaiTrenaUfSMRyLMvEJMJqzXKstYoo6KeN7gz2E7c8EG4BNeqrpw3pKbPSByRev_G47HGboOtW4aX00xT5B9jzAgEO5RH92ic_yR-dlwwsNSO8PsPg4tOqNzEoGb4LRtZUraFhRF9Tm31oGa96yOMro5wRVV7VVdBf19gmS48JHiSINXEWkhI9u0TwDYLEYzJrORIK85Sr7FLekakaidJ8Kgidl_1cXsDNJLxoXlVdMgg_kUqOf53zCgSsN8B65r6CKvyovjlWrmxUrewN0qlHd6t-F8sg3dhmL8u21o_5OrJZJFHts2B465ysx3pbu_mcPtHRCBAKgWD1FOxNz6yFGqORr3Izc5K0ZpkblqfwL8v3rzZAuzNqQipKxbUN6fU_hBYT9zB9r_glHE_R3g4rnNC9lsqLqk-RePtnBlw4PhJVoSgt3XtHurvjJee_y0Ngp8h9DrhKrnbkPXthk_bsuTTHSW1bjC-NU5yMOEj7nX6ul5Y0hA2md2FidBZfD__kWeiEIJUkOS3sTWQeWoPhCCp4wR2Y6PtP-EJa7vDO-uKeiUZIzy0OOt1AQ_NK2_m12LnvzniiP-wqQcOZ69cJ5rJDGnvu76GR9hF0hPS39RlpCR6Sk2dQ4gsk0klLhO4mtfxCvBaY5ADb20-pDWZ58ON4Fc5CEoLYtzQtNjctHfkVIqPmPy_KVN40nxT3kksS4xNi9wFZqr1dr1pb0OzsCgRBXpkdZULj9RU6Arlz7Y21mPP4ZBU2do7NSgnOZOJQ2L0gtOBkZqbku2NmWRsXJPueAE_GZs1cErfYlAJ69eIygXL-GGK6Cfw3pXDC3wTDjF0PY1u2nxlVmgo5Thx0oexpP519kxPpKE8r4FGVpARRT-tJ4OGZVNNjAnc9qS67uRAunhO8ookC6Ejtg2x9M9wRCkQ9YcAqfc2na5r84omFu_qcX1KHAZHZN4SiFOdxfHdFSyhCeqSujmCi3dNPqIoVdSnsukZun26I8dy00WzejKHwzFgS7J_eE6R3ENcwa5OE6efep1tmbKUeG8sC4gB8at9d2ZxSirzz0TXUclNTyqevAdvxB9lSqbFn9Z6DrMe2Cp4Q7JxnSCgpZqVQpJ7CkB5MQKmW7mYqSW9-X5glD3NxXExVOvs4r7dmbKRfk3VBUt2bTo3AelqrrHoJWOfobOHid4z0BaM6jICdgV-joOA1wx0979LlGjaZ4ENHu_lRuWT_FSxUMFzcQzI_otB7wfcS6djteHh1S5XTLyiPcKNoDEVPjyZwRNRnPrnKCucTKtbZehq77N_e37Up-liSv4D6hlUxJexEflNnM-ZYATs5qsIy2ydDPkQ7du7WiikJp3NHAfHwoydyB27d_ZJ42LNacU_xUBRTGpRhD6myVtYnhS6riaKr5_0vOlruqPCK4sEOHmiJt9G0GjWrC1l5G7sy37-Eq29aZLWXYujbHFA8IahB7MXwlGC-oQ97sPwMGtRpQHPJI-BpYG_t3sPsg2LxMxWws7IlR0gwRmQmNP97NfzoqIm6VB8QLjzjuSTzxz3qDOgtt0gxSx-e_ISXWsmR74Dr3kuXcLb5OskiDDYWtitTbolozioRIq58KSVDn3nf4XfrQu7vfyTzePkRXG3kqnBKKI0U8tit_0AMKAMFDph0F4ObErvmoZcBwyZpdyV6PhQSBq74zv5bP3abyemN3zvqer4sUD7OajTTx8S1V1Vhl2z5vOCxkidXrPRv78bEdsbx9LP5RdA0fXLXt-L7-wFRm9MIVLp4sXpfxP7HJI8yXeUpeXan6JznJP8NeMWLT2BbmgWa0dbnwc4tCVFwM3kGHFL2jfr6CZG3D-bkbVpBDQtefmhIAJWyDYkP2sDH4AzhPa2jvHlfCCE4uC2gDzLPRamK6bkCLPx86NgCOyKGiBgRHP1935IasJlVzqEBG8imwK4ra5_iVgGqAJSuZm4Ldvf7Js9B1jSxywtmQT536r8n23daWh_R1tQtYU0uEujVlUgL1O4e_5UjsP2G4AlZ6olBZZ-JEyvIoMGU5yalIOvN6rWLOj9aseMypBuTEWW-AELTyCSiOpIENQC2V_4XJ8R84PRVNmineEYLX8oJKXx4IX1oU-pP9kr_A-yQ7JjCw-JLu3ywdp9SRLsRG06PPTkcJ5pDn-Wy08oZB1rP9kero1MD0Xu9b_2m1IIffRSaI1XX9uM3tVheHhm4nshQZqLrmdam4J9axUVEl0gVWeG-8v4p_ZA9mmJn4-RuJcVP5vjFr7nwHKD5KbttUSIo9Q0Swx-TjfZppGI9f-VY844qHrfEsYXWXSc_vcVCF0LMqcIRDorp7ufTxNH7ouYqVa0XL_QpZN75HL2RmQC24uqGI0EY176KOi0pp-ckFxdxFYCxVRWFLY847G-9Ppi0usidCOsHAeCfXfyFhZUxZhQwp51ZDEiAIp3ZkrkmABuepyd4kGYPSv4UsV62yqB8qX-SEvuO2kmlt2Vvnus1zkM4nFQHOR6KUWgx3Qth5Wo-4xBu__nUcTX6ocMi17Mh-sTPnbNcFkjumDsmFB8keyLZ38pZ0CrEObOi3kypp4JRkH1AJ7K9_ODmUscRkmykCDfJ2GvqYLrGY_54VwAUW5y5Dg3tSVatD3IklxIXK22UiKgDGJshXt-rh8un5uwSrswCEEseP3t_rsu691SCc78yVIF5LvQ3DEh3PYijfF9JdsZgUfyzwTxB-2AnzXvzKWhxtW9rZYNhLNur8L3CAI6GtPOGY1mji4YBUDMvNg94FpinCK4zn7u7l46_vyHe13H9DPvA0wyD2uEEyP0AHQ06Sj2tm32_tbl6HCLRhLJdJuyGHKKpFjkxrZicKwcLmUkGFefkmKH8CaoDlH1JU-hWN17hywKS-YIeYymNSTJz9BFQKJMjQbfd8JYpkX3LpUDkOe2j9tqkJkzlD4ZB7LiuIoJuy9BZ3wcep-3-JNJxlnVpJsG4wGFFtStRF9bmf8oKHy4PqlqrIiabwPfjMR7X9QgOjErHKXPRvGRvJ_DZPN_H341psdrBqlC46z7P5cChuTZvhgkRxBpeacGfjD8H6DqlnVYXToAQDoM0lMFiJkPdsRZLB7_h-DVAm-wYMPnx9fi43gRhpPUE_5ly7aj-BO5pFTu3Wcrm0FueAxVOdidP9PvdN9AxaJQkK82NewyLdaL_6hCIfe_PEOJT3boJm-tWzdAnpoBGI9iXl1LOUDUIWj82e3itTeUZ70D99j8i5JQzrUeyDe8AvXdgS0Ol1r3kArZvzmMTqCsS8d42pzYxzcqrOD14EwdOXk-alv8BqqYVYWaIxINaZgynAb786GHVa40J277Jgf-5eNsyTYeGbVYHf7-s1GM1Ztx_hSBGf1wgtG42tLiIZ2FFYrR8zRu4UbSkLFzOPVnbNKuEsUV9hA9NHikwt-6QZUUkkHnVX-3V8nTThZhr5fTTRp3Qj9DLvCP28-7hZdlv3K-y0EEycq56dEnEGz0bDeOqBXoFhfW5arpXVC8qWYhli4pNzHK1KPLZuBYhWTuigxJfsIakZw6Kx0_mh3yyav_inrhMvBpM4fkMdFYqAH1CpeTcOBIbpxAKwauDABI9QDf3vb7ScePAn40rZ4d0x8GS5hf3B7WSaVTw9g3lRDrA7k6at9YI6uohBlKMyHThCCrzW_6BBChmSKiYb3T9Cq8_YdDqF04Wlj52DbQt4c9o1k0aWdFSFFR8Mkql_CJrTmarzOJrcZtgyR0vD091Gt7GUdnvaQJ_uIT2iY_buDxiRIjlgr4KLbKFijagh6Kf55XqXXKXxliw_bfcFya_x6EccL9hI5MCBXWnixh2tlovNhwxKiXxncLG_coVvpTYuLSwj8wQFqYHjGW8Rvxcsj1n--klkY_brBlJPnX-ERSsKyfCj7uxi-Au3sn89-Of7N6EvnbxqAAksFqWbXNSX9KeQg23racS0eOI8WpkD-wgQe3J_zSyCHNV938EAezd5RnBkrFjcHzFmDmj2dTDfWunCe-cFZidrwdhH_9eeezdQ5PGzwpkv1GF-8h5oPU7JmgOwuE9azQkk3UJhi-qTS6HSR9N5mWSDh53ZypdgMHwPclJ3xa6ankhLlCRzNSAfAW_ZDx39GHkMJgefkJrephNcGQStGDqSs8lWJogV_V-Ni_4MZtWlZ8-O-ae3O7oD75DLAIUS4uZopog2BhX10CXi9h4JdWQ2DQdtOqm2isXXOe6-mTN3HtzahJBIopI9HNOmX7T9disUkyFq2r0NkEC78l977qhy-MhqCVqenOAV2mk9Xol3ehnr80Cm4u_xB13OMKP-2qeamvBa4mBhUtf3SvMh0YijY5MMJq_9GAyiNKFhgXMuY0KIMcsVWTWOM-uTOVUZYjCs9dIgn7jJthbvYKFekEUpUDJRl5y-PNInusNo6PbAJuXvofGLunf6PEwLo6d-S-aZlZNWzViDvUJgoDANOo3kT62VhpoRQv6ngsNqWSpP71DlsQsZymbyesAHDH7jfrzASUq5Om_ufoJ4Glb1JW0kqhEBI3Izfcrh4gihiAot8oubpO5aEcrn2LXP5u31ksqmiuRgf71JNex039P4ogKfqZWpx6hQP3wJIa3xwUxFnZWu-hH5oEADriUVqxqyLNqGF_i_v_9DmB87olvYymr8TMXypubOBS8FtuiRxrv6LKHF_9Kq5on6OhjyrTNPcN78ysX7-RwOgRKGegQvspzZYyqJ5IFYxxMGfDHOFX6s5710qMni3W7BwV0JYmx20LKbS0HUHo2m1NlSTa_dXOXw9boHUWGDryHV4FhM0Hk0eq1TC5WRpML7K9u41pi4Rn45jeVFwJoArBvRvYfbZTXh6mw-D2_BSa4ivlCl0MtGMMkZTY0BF-SsZyw4H6TA3rYTWdwUzUybU0hWLvR6rwxpXKTbEchB8ZN2w1-GnJP1AAsirVGenEVwhynPMrjlPm4XLzNxbKgNKeqBDHZhwe0d-Jtdcej5t3fehSFJIJ5HfNxgvyX_gqF76Kk2b1wBoNUpdYJwUc4TlcO8vbTeM3DBwTec9QXQIVIF0kO35EkZdyHmqOTzns6tvEOXpMTknlEfNFXelTtng6KpZHomGMJIJKxaqmLl4HC-aN27abhs5WMQocPyXI2sJ994jqck7aeqQ8QaiKgT-hTNVBiX9Ot19QS5YDyZ9Yi8n66zfF_Hmyx30NhAbAXdDDG_Nwjgdyp8_JPQIC0nlsEfBJcmuDLqrO_12TUlNsPwpA5FrojHbd-sMeoUZ9i-8gyan3sW1pfxRDmPeNqZWeJTU-riJBhF6nY3rg1a08N-BBHR4SJlexlnG2OcfrX9eUVbd2MugXBVNY-sOM3h6jSKGhb0TFe0yOPfDoNxggdo1KsPk2LAHWMMcQVYYvKm1WE0T8q_b_7TZkBYppl1uzIiG4WybjvcBlEU9XQ9Z3JQvC1n25BK42ghvXUgpOa_5e_G3u39TkuKlBlKR05FsIJjz9Ak5_kH3IIUJJqRtBDrRJAbZIZfpEHuh85h5P5B44Z5JiZSkMggkLWAB3W-tX7j9_tjd69DeKUXkb7XiXWYK94DjJNepSOzoeUZb-1et1U1LDc6tpuMd0nWvAsFpBlmw-YEBoKKEGuisVXF8N3nDzE-kUkD7PuV0F-UZpcP1wePWQLDTn5ss6zXyWtHvWkfZgQ5Dz0bnHc0k9guuo3BudfcpCI8kpIdsjJFaxSv5w91AyJARmZmHNgs-5ybY3y7PXO7AYTPZhKZSpYQc03R9ih-WWiBanslst0W-M89nsOTV_iG9blOqhN7WDSoSuoKqZxXiGrdeBLBF6xt0rDjy0k-WDyh8L8YcaajjAHSvn_c2EjLQpSi2IogjRJEvUIXseO2PrKrNYBnejliLcpQ5k0Xq6naf1i1lH-1KNYSGxB4CpUXKtJyH1Na6saBiCqTuf0eSP6qHmw-G0jkIii8zNzafuu32YsZ9oyZuG7OrUfXOTojQV0ZmBmr8BH0Udpp-hgjVaNFZ2T4FjkCnHdxuyQy5f-rngmLoxSEt0QunumikB50MHbE74TzPaGNYfIZsa7iPm4ZXBo76jmqmtl9zJTgAqFDmLzOzeC0OvgaTal8uksUTcp4aoftTAzqTqOGUMsoj34Rv8jDbal1pJ_YxvpKsteulaWaIalfVWIaJ_29k49QB16-4enDfTpZ7pvMZnbsOleTCTAcxVurJz8GB6hNONo6BwJhKOnVnyHLxghGIKcwI4dIWoEgX6P5-_cTaoRKxSKr08oFfrcvCpk0HbCWECztNcyptG3vjET81YucrqyqqzF1tOJuorpKt8NedRYViAjA9yFgItIrtuRyKrjenIXCmB-dmwNx9GAn-9AR4yVKHjbLgHa0Z3fmQQEzVy2KZPq4osNnEhQ7SQr_K33UPmE69llpo8RJQ2yaTDaOVJpQJoK-FPNd97d2eYVJtDU8gjQce6Xwdr39DKGXtt4lgFsXRGTOJChF2Oe1USaOcSbQGJmUvZ_eEqYsfPQ-_FqfZ8ru4RCIlfES175DCoKLY0gcXcqgY6h-tjj_sJSuVJzJmrlH2ZuSYA0JHU0qGkwB48gQ7plw0RTurz8EpQdIInjRJ_oNZvil0-ZlE6eFEXG7Afaho9EPwvtcT3tpVt27Cs_6SMp8cxEwzZ9FQNy1luRf7adKCmLuZmim-BRJCuSVgzIDo7T8ngRUz3EuRceoCT1lska3F-qCJln_r6L7443-BiE4-ODSQ5ma2sxIm6F_8rHVhqSPqlceFK7jodMSoFw7SUlPH12ZPtFpg_gy07Bm6ehtJDfdiCv7-xHYQL-WAgxL4OmTtPoz9BiAt5fI9n_JRhCXfjGVbwPC2Fjd-vneFwZw6Km-IeWtVzDDi6y120IB1yT8yZDy10RQ2g_mPTlDZ8NG-mRniy72h1D9sjdnVA1sh3mfa3OC6pdtl9B1i_FGAVhomvreJbYBGTobquLvZGwCokgyBe-kD7segjZ0re6GO_sr14Is5WkWYmb4h791kIGmciJEjDSUjglD2qhvzpB9_Wbr-a5DpUGIsoGKJUT4bf3DCENzLzGsO254ni0Ul58C5uc4vvS2jiYtbSrQvtm74VBM6zGKa2_4DqOB2wxqSqW-vQpqXr8U4fxidW4zpnqDNWiv30eP2hCt_Hu4kdjerImcWh5MnZUb-7UoJ5aQwR6LMLlQLSDHdGw08cTJkoOZomVcYJIZf6n-IbrdelD4grK7KNXPk9AnjGl2OEHCqGWeYkC1Ou7o_C4b3wDUfvWGpC5XOD55r3CNGXkzOcDsaKg4-_3BfWG1vEHQ7wwY8sfAXatGvKemr9O_KO4G8acoVLilTOY4y_7cNNteMHYiadVWcVEpdYE7BkimcoWNo15pe3t1Ud0J52BRT4XNdREfAmB3Ag-nY8KnqiY0uRH6NYunTidmKt3c1wQRPTbDwtNAi6d7TpcRCFul6UBy7pkqYex3Z6NqxW2JeoecTHPIdR8RjGTY_umxqDwJGXVCqisNum3kKR5lGMptgQR6tKmhOQRsqGmHjBuaB5ptEBPJX03KaCOhS9hfaYesyBnon5-rx7Hz1Ip3WfognVxsznx9Q3rfcXHAf7GZ3eYxDPnbvKHb0hJPaSBoGpaG2BZPFqTHfMZ7Xg06JbceCep6dLgkuLzBu-1h7OXFFj-bmSxjhneqwZ8whWnu6d2MTmniaNjrttLSYxFfHFq01bMdmnCaR_49zBOWH8zpT9syXJB_trDypHMcZtMVzXumZ2WmnBmqHVxX1quS_rmjqJOf4ne5XnrjykMwgeynOgecVgN22pGv0J2Puwbe5_0hhbcS8IEcy-TTMW76GXnHHi-1cOC__f0cNkL-mp7LEXEO5FtI8ll0izCIB0EUQd87P6Zlc9ZyzHFoYIaxpWmivDhbE8d0enNqQR_GQ9OVODsYdofgwFr1hQPgllcuc6LrI3Q09-AIl_AduJXSt9qd7W2PhlgUGxwX-cQtejukeOA5oS6fEQTMJAAJKISrddchnYt_sC2RVVdakI_GpuOsYsMq3DmMxKomPOoHnHmaNAWGBy1ZnoqWovZYhU0ZGpB2tpIN8X_zzteEHWJ_TRe1wgYUlQ-YRLO7u9Ok4wV2HQCoWMsT0X_gL9yjPqsgoJHKCtZs_9s-PmBCJ3G_HXSOp6SvfLC25kIvszvTbvf96M_hys156dZnj_FePop-ubKp2-gvprL9z2XkrdFfnYodDoWAyNxC36U9H3SepsiLWMfd4BfIiOpMgPQi04yhZiOan4J6OisTBs5qHKCrFNeSutVU0IYhUbsQRyoU4oPd0X6B-QhNp8tDJdl2NQ8BbiV8h_zU8-jzGnl5FkugnTmLRdgWObngmug7fHhy0MAgVJ_1iUi87-h_3QGIty7RrffOWqebwOaGSDjSOg2RsYYcFtr6qZHwCGChNILc-2x-vraJ5iYMfm9xikuQf4pD68u-zyGn8Yv5heCPwGUIM1sjT0MLXdTlrp15kNVMegjl9RujF0qmu8RNEdsaPtUhSpSSg_kxYamUaWaViw9xBhj8sXtbFv8B9DhfJHY0zNYaNQuGfyqIepmbfVkZqknY5zQmCFTzw29ex8jMbueEq3vlnZWQwIUaYtezYE2NXyCClqeQvK4mRHuq1KABu59VOZ7WstgryTs0vRIUauvhdVGVvNLCEchwzFTpWWhQ_1nDPDCV31_EaJIFFzIBiG3i4jcBS03Kln9O_z6PzBRznBm-lpBg5XjB2Y0Rh0Gd9bIou1M32XXF4o2CqhbvFxr9C94ReVhOp8iBdy2i8p_cSyHTffiab08aliE_IZRWFMrrzEmIYpjKf_7vuAAFs2hG3XXlf1jP7d3BVRzvaY-JofnzNIquO-IJSTcylRiSRcikSKJBrVNF8EtFrIO_eyHHRNkgvNLS17ZLMMyTvpZS_FsTL4ju93lc9oyHOVhLTQLZbIGU7hXQ9EC6CxqYusMu92shUWq_HUqFvBHzBmopaMpf4G_zW17IIBtjVRA-S1uxe8sxtl2McMCCnEGIv3zPlrhzAhENnZ0WBnpRS0iRP0nhzFTc4wMfWeWa2QFH1rpYCK-KvHQT79UErNEWsW8X227BmULv5_sZ62wRaIjQhk1RJIbMesUnJYKlaJ_VX2s4CTReUPEGHeMlQekxKONfD7O35WOLV_mWLVFnXTkg0aOA-JPH1vCGHmwOcDTXnZQdPwDO6BRbUI4d3Ly2a_ranNF3kEG0SOnLb8KBccVoA7ax6VrPsDkHTmtmTeowML2VFndAdXxfrSQoj-E24_QdS7ofXjCyZvPqmjOztOG99XpR5jadTrh-Eon74M6t1Yrr8_d9pieCijoUXWo5WZ1OwYOcT7irCgYQLnaSpjUwjX0ZZ8hMkqt0ZOFdYLv_141KLd3S8PerPvo95DsAj-CWhbXVVucSShxnj7tlsxxzkk3CxQa6oLCO_9ydizu_rRugqvxFPoBfOGlJtvWfkJZ7wLymP_JfydDpXuYka_gQeqYJgAwpsJ6wzlFY6pHvo2YADqh_5DO8l21irfKKj81k36EvXYnES69PLjB94b3FkDSHAnVBaR_JH_u3UalRxrxS4p3pgtFVbaNJnJmNj_Pp6fA3HJYw4rirPsM99RvHN3kGqKp2GTOCA2K3HP1do7lv9ROWPZCE8Ww-7_C4ElA-tIKaSszgYrJMdCWTAca9vvgNxENRF_pK-jj9E6ylttAZjf5QDZQI0tay1FmiYzPkwfJ3MviOsdNZRKTb8RYwh-YAbsWrxsjnIXujme3YTM2-DJGHPNXnBO8HxVJiKLH21XpKlWsuSE8Sz-OboFQsy-SHFbBDxrsYyUWdwd0SCsYYP-fQy9Y1NaF73cS4eKiHM7Acd8ke5e8gI7kW5LASSHRhIMN4GT-T0JaluKJJ0Iwt0Qkj53vQexksMhxHHYvTtQ3qZFe69QLHjYeLTcjrLVbyK3VUpVHEDV8j9a1nrx3AO_OfTmjTco6uSrPHb01Ik1yQDECaaLkuwgSNC-CHw3XZVxuHnROM8-_kxr8ZWjBHEde71PvDSTAQTlrS1aydMPKefZkqjRS-Y9kBqsQdOM7zf624z5nwzTqPVxPCFkvrux_HyJFmLlBbhrBLHUBbfXMQ_sEumUl-7v0iNyo1L2QF3HKWsTcydsZokqqg30Srz0QOiSf1mPiwY3BalEB-RWhV-nsvfhPAR2L0Ez-Tb6gpUEavhumoXKGhWBRrBpkBKpWb7Jfn-QF_cuX6XwGZE0x0AQDsqtskCsL-HxWrmRKhQSyZJwWMXw5sYc0I25uoF8GXJWuo_FfvwnL3c1yqdYhSaSfsZLWb3koipbJkcqv3r1whtft_7FNT9ccl-w8OvuyMD5Fwij-WJNxJ3PISCwDxtIXnXUW13KWpuwg5Eu5NXx8sZ6BBUW7WWelKXrgQLBlkjbcF2PRnqC_B-72zEn1AdiUgfRWCT2tCK8AuNFg82yUx5w-Mt5hjUhEgGl0tDQKL2fR-g-J9dPGk-xlnXFJMg09X7jzeQkBavMOP66ewpO7FdDxLgCzGJSFGtNFx1WLY_hkK2Vws1JyAREkeQJnBinopzWe1G_RzLX-HN9NcrFc-JmI3os7lNtzH_9maIIZ6jaOMdpMfMiGlAj3XXgLrYOBMuXjwWxr9yRm61FwoND6NHhMsacYpgBTSUdAkWe563HKWqxY_T15b5h8itEVONLqSwhbmxENLiXYCd3bIR9Vv6590NuKjBTQkoNfsdGntyBTNC7ixjUDXqsTtmRR4u-z-KGnFjmc5nlmffxNe_yQzSZyaLy1t8-5GoBhfvGMtL410rBPnK1tDWBhZr1n5l3-tC-JeKMOhkWcdmFhBDMr2HpcQClKIhCuUt6nHHnZQSGTNBoaKhPjjlwD3bh6btcRS1Dte7J8oJq8xZOSbmIFWfSX_qBKGFWI8Kvolf4VBknPd6T7DfVwe54jMYY6dGTLfhul_wxTLHtl7adqkRSlEWgDAzPNAnWG8YAwDJ9-O4LMmPCvHxCzh_J0zA4VgxdfVf5pL8JAbT0vQZSYcm33diAEqyw8RQpyBzyVX6YH-ARwYEOCqu9BtBZaYJqb9m6DT_Q9nTbIqhAxMT93fLhirfPfpR6h79oFlrCA1YBSzbxmMEw6_bxpkvOFDoUOLwDis8rH0lHjIavTKjXewNaVaxEE3e1LDmVrNpouJM_P0MKEKP0pLh5JCW9WAOQIziXv7rDun0F6Yf3iujrdbCXaHnirzp5zC0zwjdstSjX_FWaZqF00TPK91GqPahX-HWCvAbMiGWr2yrNTql1M3e2c9fv_3Axz8IAMGUQZ0GVxn3KZ1hWRxdV8Prhp7ZJH4UhblM8511X2RAoYXCLkLJ9uzv5QVa_IqMP35IUEcvG5fvyT7OsPX9irEmY5xoxlA9x5WWpIxx6ZdSZa6aT4Y19NEES6tbc92PxtgGOttl7VMTp3J2tdLOM4Hexfq8Fwzyw2AZAFPgoQtt5J8QlInqobyAa13QhiW1Gg9vZxlTTtwWRZ_Glig1HvLjS2xnL77vgATixvf-fM2526iId1zRvfP44EGImDyxDhEeyd1io6O3OMIz93A-neS26eqLbcuxi9nDymYeC-SZueeMMGsSW6XOoBBk0P3KuFRh0jAHVq5OBwjGoP6ZosuO4B5q6EO006sdUS513nGzD-bTspppKJhO8fNA_aEkkaOsrCJuW5TqHIEMVHZi6WB93tsY6rIdBadsv-ZDLtuBcGhA5noV1mjUOV-Cxst9Rvaz1ARZ4AK0sSDNltUdgO5izouZ7kOLnGN1imhhji3eLKYJw7aQKVz9b-kZwPv2xaW8cCRqj2LBzTTL9P6FsOODhQa05EGVHQ3zpUDfA_t23mAbkIe8a8ISG4pOoHQ0qUa_QjNQJCEMZkB2LIfZeAOQ4cF08hR7kA_7D7grJXq9ycs0DpHFcGVl1YSrv5pcNVxRuBEwS-MFh7KLmRsbB4GYvS1e_qY2N30H1czIjfvXaBfOJc8i32ZnlyREpRsM2YKKCMDlm3fpGgGkMJy02Ch_dz6U6OzjJuckCagLxJTOgm8sVx2jMZ_8G1henSoRTYBjApLndYwxa-OCVnEsj8vjZ3K46necjS-6MnmOJ51RuJOvRHIZlbi2IlNF8trn2rieJ3HXSOQgbSIQxcNACJ5hOOpUYvL-v3P-Lp2M5WammIUKuTo54w5WYo7qb0G3rPpf0JTzlhNsWeH9IQym7hu07JN61VwqxEn4S4iKja2RXfBsxeqJ9eO_zKnNSfbg4ehaKk9axXwISyJ0mMPDy0JToajJxJRQ5qilTD78hbE_cl3BCcBBlmiOSWngihFWH0XlaB5FFhgqs5fRW-56tY2zeNRRDvd8T2cKdyxJ0cb7S9jWWIKdVSSvKysG75lwONwfRyiYRjmH10ck4HBCCsFZp6L8n5hQrcfwBKbikTJ06AHRuSvO6leKHkYB602KI5ysIKPMyxKejaH7taygeoPZ32mF73B9g5cVlCbD32yino9Jl97QReZdO_kIvjoj49ZNwn1XBE__jT5QbfV_112v_HI2vnSPh_lZsUk9IoobZ2hvz6H88zlJPei_eJnp-cuUgOn1rX5tJKZVJfzvBvcQ_SQesL12at3XvQzKsVgpaEZDjeeQy6GLbLt545y972YrLYOsaPGlcynPG4MlKvJJrSwEvtIUI3zHnPgjYGoWq72MWPNcjPS0O1q9jI9m8X6Twk1Vk-NZ_fY94WiMkvQQRk4oJjStNLOUf9mPdz-ZkqZZAgv69dIJiICU7QkL7KZt-HIvwXJOVKeDRs4LVgtbTr-C6yhiEc-XDZk85adxPk8E5___FqINOln7tkskcHpr3U1jpkYSvtisP5P8g95awHdAciIbCsCGA3t-0-ifhbcBmrSvjGq_-T8ElL3Btpg6EzsWQu3wPDfx8fmx8zNVaUMybx1hw6CbRsrS-jpktKJI6YbDghdP8luxmWEyl4pDZ3kbz-RsJkiNfw5D8dwDPT_Dp6KEthizu-SgkuoFaicS_wB1qBGDPBHGzdmBlnH8JglWj5A9nTpAAQd49UiggAKlqhs1ADRPJfdXJxnp4YIHq3vNy2_2TojNPsQ4ss2KkI6IUtGauk97feV9nq3zHZbOe7UISAFUQlgDyD4o9VmMFbWzknkcLUActPda_wQVk39PXTTxDhTU4fKuSv8xV6I6HmpVby5TjskaUs55Oop8Db1STPoanaDiUx19Z7H78tn9aq-MFqvCazif8VUMP6gFDt_MHSDFFTRTMCuO18qb9WWxEhy5tYYkZXAeAZLAOaBpv7UUYx7aPHEYYyzOx2Qs1q6UDLi4MSmgeUDI2H0x0lChkHj43ix90h2Gz7XWfOz0yZlhEPtoLjQ0PiI8KV3cx1bPZ2kuliXJonZd32jFXQ8tz8TCbT9AXzOG6kc2ycs1mfMJ2pyZR5Qi_jZV4I94gQ5Y_fl33ziG2gJYaJyRSl-8-9PxCXAoHrejs2piFGKmtL0z20t9B5jUqvkyoRMspi9AhgqwVXIJYfspMUas5S4WLgjdywlW2glT1CfTPVmOTLwoGYEuObUL_jbmlO9f4VBdzS7pH_NZKJnJMLiFXotIUBzwAYZvFg4Ul2mrMoEafEN1kurfb-Ak4qJVSMuLahSUo5l6-AK7etFS00POzjYQA480o2tF1Rb5lNIhqM8uNV70oP8gCo9WNmmee1TuOQK6sUvrOGOyhaaTGJFjKWeZz2SWpZiuRkZPZaJNCUKKtB5qu6sY6hfQ4hcdDswrwVztlPZ-8AUeIFY4MNVlfOAJe0cUY8fdxmjlbyOO_B6n5j1FHSNed9mARwYmNAJbfVAcb7T4Mr0Edb78YSvqibB5BIxjKKd7j8_w6NfDWKlJcPwVHrfmKgsrARXgqJCek1YtNNldLMnMgseXLd8LqsY1bfdaBQtSkT6VVpJSlydbYfMEknZv_2V7B8fTwhb5c262f4f6-xVCtJ5WBI4ZosJhTEDNtIY-9bUhY4PvS7yfeoZFWJ2erFLMsFxc3FvayJv9wGniAGCRRWYPReAwV0Y3UlKKzcDihxXxmXDOVIcdgJmca17C4u-zonRo5HaAT_ZMeZ1sp2CaFV-KYynAODeaRikDs1sgavHTG0nywifxt1qz9m5vlYRhsDkIgJ-SISg2COmpj7vIIG8rJlE20dRd4TojtluVnSOeYhAaMwxieWYrAenpBvSya--_S9kNL77cSi3-xx5wzF9YfRn7bmdC4N1bICeSxbTb0oacI5WXzRw13p1qFy4eav-3zHT2cqrYQ5L5ZPGJcjH8Ikaq02IjRTQgm1VTzqlmjrt3AJS9gR42XgEjFB10nGt5ItIQ7CejgaD0gVexyHGCDsICMtw8Tqxa8jKb3OrI2fPJaKP2OJQw6uOVtfkrLysh2qNNYuDuLdFwLeaUDlmeJq-DalJxKmdui6k2YJrZ0HqAzgdYxKHaIQEGMrISu0Qs-VMxkpsj7PFcJ8AXG0jaLhyb4qGSz33_bDixa52k-odACLPnXo0OXQC7QveVuw6G47TxKuGBRl2-a9XVgdCak5YW2Qp-sqt4Jr5Wu22JbsJNLjJ4k8DrVPP9RobR7n96q8-Hg5I64vcVuS2SuxaIa4Y4Dj4OVsz_dXPAyjYgZLdz7rliEKA-7m105J95__K52GDnKwSw1V2eS8hhlu1HEUn5Uhko5xyfqsrNUBpT1yjdO5nqDY0NUtHT0bjFyHUb5fC6VYJldie3vFb4HKedjU11OxA68LN0qpQT-vuBBRsZmwfV2F4YflgD9vnArnxRjdlQnc-E2z-uVThBkKCPR8ZGnCdcOaLifBA-dt_QWsx8wpKEu4vKQS9S-Bk5Yp8yT4C9x2-56xr6BxgZkHm9Sg7BHoZvxSBr1ag7_UoAXbu2bxAzkc_T-1brZZhcY16SmHztwJKXos0f5845qUr0yb2lZv8wQ8-4prgo6dAkYfnshFusNYkhC4y9HiCKAb6YEC12zmQO2X3E4QbLbizb84-B9x6Kj0p1Tsn3j3MY1YraS3BnYq4HcT293M9iJJMWScGF6qlDcLcTBMwNKxln8kGfAmZKrpqyo4zdA2Oiy-Td-ylNh5oRV9Hh6X14lDtvU6QecwDZlXSdk0-iOhDi8kJJ1IatNc9CSTFMk5i5qzNZE6O4kiIRLGiNJzEx5uNF2dEUTbyA12iTkPDxBavJK2Cd1V7Lk6jzZiypzR4pdH_t4iDOE1dfFpQ2CFTAvdx40hXKenJEHoqxMrs6Q-i9Gpa6qnuMpyGzHn5IGDOhRcAqOti2129NvK32ScTkfrWwtMo2qxlLNtsoYos1Ov2Sr-s_aC47tmWDGdeOSSUesr3qhVBvUsJqTntmRX9X-mMWr-ziN-XzSX8d_Ol859-CLy-_ddQ31DwijSNnKYg8t8b-e4NoGLYpMq86giCyUR-IKENoBDsn_Jenxr0vLs3CJJkyVNlDqySYGu7DWFJIAgBp09IAEzrpfHtrj8Tmf_tVnWzeQ3pN-0FX56vfgxfYSIqlNS7P4nrIC7xLhlMGiWw7Y2z-kHST86rxdubJmi8l1UpnahcfhODh1fV7CIMykFxTKHhGHBv1auKQJDv6h__06AEJBzqg_PHl5btb70BaP0_-RvpVcjFPxSWtUiwyGXIyua1kKyo_h3MQxviajob51yA2BKOxqiSFa9OJ9QcyCP_cL7CMw2cGqlQxj2JpAHIGLQc_n7MEMiBRka1F7GsdvfN6HQCSr-REvK6EnOw7KJkNyiL5_Xm1byjkzUJP_AV6SsUEcGMa21iyzXLmzxYiJOJpDn5J75lKpBuddtwaNxLjrmB0klkzmcWHksPK3R86ETi6HedGtaNalazsSFj8BcM4rOKov7M6dkoiFeY_iSFZfqjVXdYeB0PbRdSnofMFlNQRVmAAUgdh45blTefM7GKsqb-4atWf1-Pa3FVelU29GKDmZFzh4VHqygkSSV8pKBk6oTjgjX0NU5aNRUuYZOjiZTyeiwKlJiQ7wL-uzddRP4va4cvuJVNB-WjJQybmJvjNxoSD3PuHxcjwf_aHWPyUykhQgoHIiHwDRv9hTyZObhWCns3-an_v_0kzs1tWkdJjO2OBFqfIKhaC8jR6xszK5l2ZOTrr3jBWXAwqHMtnzZtrYGtbRY9uDiK0C9uBdAPbHl6L3VjugEZdv8_c4CoTfTzbfBytoixInfD_OI8yQQZTYFmQMQNyzXU3PTRthYyd5edYer5j6bB0OP_e93X-_S7PrMI9tp5lqa-c14QYdnE5akwSRMMlvSWVFqgZ3nm4vtVy56Jghk0NfU8NEG2Nv0zjhFKo47rEwM9lfRIIPiV3Kj4ab1WmlObRlAeQQLs0uMwARf214L_YLT4sbMBXeHWSz-P3J-fysNBQZpFvQHdc7ophiAvX8y77Ms6UiRuxaGJNrHdLBBeu4Fr8LLsuQKhTXCJt0BaF6n_7QhqiFIIRPRAwgB5TAk5NihEMq6sUB2qShSfQNouzhRyBcFMczAHmshNTJxZb4WlM9fvV67HDRYgJzHczIM_mLcZsyXzrFL2wSDParVMN3XHsQYNYQTjXqHgckjcUInzhhKYMjQay5MJEIOI2bdkVFdcP-UdjCqWKT4cTOVpD6yKysB06Nz4zi8Bl6SdyzWJOds7unHBKbH-v7KQQQ8HAXwmx7rez6eOCggpOjXhvXhpCFuul3naa3fD7i0p4FFPPjOWZjzlHmLoG7IFhg013Eq6nnNNYUeY8kTqAqlasSieXlmY0pg6GLyarLOVUQIOogv_o7zuH4HYsFdbbEvjBfUu3CQFTLQPy8ddRSBV8HRlihnYsBQUCGSMGHksACDWGTf5E5N4oBOPS_o-reVnOEOnYPcppFusONxOR-o9s3zKl4ryY6bshtiNkve_qMao7YCpYMfVKCOql4KgnsfyPliY-iTKbIu9H3MjoSpQTQPE4AHYLj8VeSOzLVIczYR4ODWfsosVFGTVILzGMKI3zBM_aXrZRHu_kJxSu1UCcuiqsp45gzv199N-FlAe53W-SB7o5bHyyDa-rt8THM2Ms8fQ9jPvlh7WZ0bmrH8uoNlOyf8lNneebSj83747zZ64temgcDBgvwzN4oDkdi1OrYZYsfsN2sVBc2tcgast7ZcKeza-Mn_g8FaJ9dzxEa-V2hB2SVahkLDtZu9_ivgwy1V-2EacXBEtAEBY49m1MhUqv934xstRstO3HeRimff2ejWiF4EH7MtLo0OJksF03LC5CoPsbfPty7hmQga1d6N6dFrA470k05S7J4TEhp8k38Es3fO2W0UJUJ3YNEeD1p_12Nd_54Rr6bhvEXjmKnXfvP7D1rFK5t-oa3DjE5V9IMEp3vkXyLIOErnD9iVLg16a3Nuv_GEKFkPB9fKxxLzGo4MeEZz9QFsU5KRtQas16yGXsmdxGTA7FVNZta7pyw1R1_DY04Dz1Ii6dwcVY17k3XyHlmL9MnzTS7bLhElNmjFbGf52ytdUS3W3GTPvgJXGr95BvzR2gl8zE0GsfeAbSjwleMyz2pW2BRW9H5owylwDOL2zyZbkNkwmxdSDll4NWTNob3kPXzLre7IZvSEj-_haa3MYLVJ_M0UN5Z2Z7wWTxaChNfIUdRK8svPO7vE1oWB1Db4kcsVOnYemqNcYjHtxpwFv9UiYYNhnWeYOEEVnpc_HBbYahxwVCcfHGzjf9d_kpMrNN9EGkvntxmInPQD7OmwMd9Ef04aPPXAs3pXm-g1xwxImOMEG1N8mEDAJS9aWyupbPUgVDUKUys5DPZUD_8B8n7lGglKLXuBBxQdTSqDBunY8jQpMdwAikn5unkNmY9wnc7cW60pqLsFkbFDM2_TUfXUhkBnjLuuz7BWPh35Gy-gEDBOvuo1NCTJyo8MQMvylx_k68gNI8xQHRRuaPltdt4qJ2KYZXiNyGoIK9XALelhty3hfL0D1mWsCkqgJKzDZTVteqPjxLmVMJGw20xXYuvTuHhNFIEZOgXOIOEcixOHYJjhY9VlMKBPqzGQcyf0V5zNmZsNfRLDd6SONrXqijFA5aDqF_TsX8OLlURMPyzo9LwuzkCeIzdtFnUrJArwQDV1cCwDWboc_i1UwQcjwQ_q9w3tAYMdf3kcNWmQEMG2R60870nyQ7nCG4Y8uK7hzydYHFAsC8MSUo22ygJKMEZudlb9JeMqrOudYDmjX6n3nETndCrgAPWNk4cJiFTZPCs0nsa73IdQtNlPKr4-6wawZ_K9ZswW_htEH_WBSGAE1tkc4c_aNFfPog251qtDhoKVrlBKwdfhu443vcVPmJ9BHfKwF5kPa1g6fiVkw1TrG51jOxJRi0SU6ZGnJ61dZkwF7Rt8yVxlnp7U28i4c5mQDRana1CCptINYveU-pAtuTx6hbnp6cel_5izJwDVZcHw6dBYESouVRpT9MbFAFZH8D97XslYgtdHBtr0OXxdu8Aox-V0ewMhlpTtwZj5D1bGrkeO7J-veGkaXjp4NjvKalPLJXpH37EU5gppNbclo4WFvsggsEhpLY9O0K7qOHx3wN3JbW7XeXIGkvf9-VShfDKBZUtEOVF9581jsIuw6HtIzWf7IwVLQ2HZ-HaGQ6OfUiv3EKyw7l110l_6a5dvDF9VHxnesLa6Ocq5ETuEddLzMB6DcUyEITwYze1t7XEFSx4jzaPsRiH1TRHtRBFKPN5XoBmkOw6CoKuRMbcBx8vVd9W4Bxkv2OgdcWScVQ-pmBp8t-Fhi1w5eo8iLsnadX0P2kPa7lutfPO_nkBZ04zuXm6D2O9xz5OM7rKxGawLV7Co4V2PBmfT1Qj3Nqgyk3sEp4nhXcM1RxMFwsLr2Db1UigwyIgVSuXjvrAdTDLau8bf3rY6pXFXmCcLHSeWVF2_Yfs5Ec0ZJLabK74u6f8oFUM9ka2EJfamsqNUPl9qjhej4ArI-8uHi6b88hgrkCmhIWpVffZjFYs7o39lsC-LuEOaXAnY1H_VkDWm_Y8JKmWX_gnVo2NU3SXtuski5b2yAncIWVZIKu12Cp_CarXTQnVjcXzBo2ngS-wSu-M899WNlejNyr_4i3EFHaeMEqW1nVbQf4lhiz-oP15v-KIfMTrdHOm5HAGuWB-dM6I36chVjMZWQ6FZDK69gCmX0WOJf9E4DMpOvg4WWmZCyW8VtF4qV3XwyMEkoCUWF0KkIVVQgt9iYLYmDT-WrmI50r3kSOGLiyZP89RszwLRcDLTAeBbFhebigeF_60aOZX59yVuX93-wJ9bwjNWA6snKpDUNQiOuSd0bf8CahCHvhTk1lB5oEozU3y4Gi2-rEPKd-tX_x9GmG_TUcGYAk9d3vOgtqcpreF3hQXNwUBxXaMTJvsUDRZqNMEg1IPbD6itkbsrmWDIAVfLqgqSQ4mzCNCqN-fjak4jEwvuRMYBXL9hf8Q2b_goKPmariPJFGsxqdbLH__rrOCfVDNmM4QrdUscgf5gvOH1Bu6JCprgCwV7Ve1688HF19NLr2aJrgfviqLReQMUU4ONzA9yCy94VC76dyJWNO_ZZvp_GM6XFT_ztzXgNZd_LvmiSwF1zSVeIUFolcT401cUJpy56GRuPGjOD9eIvix08ln68Xe7UecYOYFV2zmkw9t_dPksXKvlzGeO6_zOQp2qsRZy5VleUi9nRxxjHYu06sotRLTbn3WIksCFlYhKyZgK5ZCQM5VVFzdlCpuYJOfhePwGrtX5ULB67JUMxEket7CoZdYgm72KGZ0O2Zveid0C48HLBhrdsFOkVWNP8775U409NhSoDTMbSD896XPaDh6QlNLmEKu8rXKn-yVT-MUT00k0gHVmFpJl-5apc8RfjCLY__64hxYuKi5eTQ4OS33lG3LrN6PzHo90t6YSk2mqDjRbpJidSsPEuT5prd6UKIgTOMchEe3pJOQyvKKkjdqO4SON67Z3vYeWLwdHxFgAf8bgwyN9KE1o_AbfNlufR7R7sqVhWGOLq_2xZ2_coHIMok40hVY1yP78cJBOe4X-saHn2leJd42UM_VW0IiatXJclQtEMnOBDHX9AoGqnXquO6sk9t9ZlWOrCmAf-pHeDR72b70k71lImQtqbPCoec8CWUgts5b0igJ13b_XUEiDKEZYrxpmnb38i1-_6DRnbDt68EZp8UohXsQzTl0NbogitPBw9jUZZATSWRZGk3BjMZgACYusyWq4zywo6vRC9Di3eyGW8NHNog9ydOxPQxsKYmPULNiqfLA1_8DBrZ-Ly-2g76gQneflXoCs2cl85gZNearprUeGbXvLQDrpC3u2Ss0AccFOQQU1dgufLDtv-x3_xqGWRPte-CJayC6bXVYry6MmrcTET8gVWc7MALq32UDHwb2ebEuuTrQCymbn_buaarHLi_rzxYuu7NdJG1_18NlCBf09-x1tTh22k0pDHbtKPQZPUB2Ep7QUXtkWhJCnABdNi3hLonV3qulKvx1O0YAM2hKPKCzYSgFbX6Z4RF2V8YVLYUpPKHy4N2HyBGXMeJVFYCKr9Z5RbQIMwnslyeG9H8VdM-8zjVw8YyAduWpW-tru5nZM4hfmTbf2QmkVhQ-omdGVUYggvbaZgUwgfXUUoB40xfXnqughLGTWmGLqC97XgLe0CGJfyYOfW0Q6 \ No newline at end of file diff --git a/debug_adjustment.py b/debug_adjustment.py new file mode 100644 index 0000000..ab37a78 --- /dev/null +++ b/debug_adjustment.py @@ -0,0 +1,307 @@ +#!/usr/bin/env python3 +""" +Debug-Skript für Netzausgleichung +Prüft Punktevergleich und findet Fehler +""" + +import sys +import math +sys.path.insert(0, '/home/ubuntu/trimble_geodesy') + +from modules.jxl_parser import JXLParser +from modules.network_adjustment import NetworkAdjustment + +def main(): + # Lade JXL + jxl_path = "/home/ubuntu/trimble_geodesy/test_data/Baumschulenstr_93.jxl" + parser = JXLParser() + parser.parse(jxl_path) + + print("=" * 80) + print("DEBUG: NETZAUSGLEICHUNG") + print("=" * 80) + + # Zeige Winkeleinheit + print(f"\n### JXL Einstellungen:") + print(f" Winkeleinheit: {parser.angle_units}") + + # NetworkAdjustment initialisieren + adj = NetworkAdjustment(parser) + + # Beobachtungen extrahieren + adj.extract_observations() + adj.initialize_points() + + # Debug: Zeige Beobachtungen + print(f"\n### Beobachtungen ({len(adj.observations)} total):") + dir_obs = [o for o in adj.observations if o.obs_type == 'direction'] + dist_obs = [o for o in adj.observations if o.obs_type == 'distance'] + zen_obs = [o for o in adj.observations if o.obs_type == 'zenith'] + + print(f" Richtungen: {len(dir_obs)}") + print(f" Strecken: {len(dist_obs)}") + print(f" Zenitwinkel: {len(zen_obs)}") + + print("\n### Beispiel-Beobachtungen (erste 5 Richtungen):") + for obs in dir_obs[:5]: + print(f" {obs.from_station} -> {obs.to_point}: {obs.value:.6f} gon (std: {obs.std_dev:.6f})") + + print("\n### Beispiel-Beobachtungen (erste 5 Strecken):") + for obs in dist_obs[:5]: + print(f" {obs.from_station} -> {obs.to_point}: {obs.value:.4f} m (std: {obs.std_dev:.6f})") + + # Koordinaten vor Ausgleichung speichern + coords_before = {} + for name, pt in adj.points.items(): + coords_before[name] = (pt.x, pt.y, pt.z) + + print(f"\n### Punkte ({len(adj.points)} total):") + for name, pt in sorted(adj.points.items()): + print(f" {name}: X={pt.x:.4f}, Y={pt.y:.4f}, Z={pt.z:.4f}") + + # Festpunkte setzen + ref_points = parser.get_reference_points() + print(f"\n### Referenzpunkte (5xxx): {ref_points}") + + for name in ref_points: + adj.set_fixed_point(name) + + # Falls keine Referenzpunkte, erste Station als Festpunkt + if not adj.fixed_points: + print("WARNUNG: Keine Referenzpunkte gefunden!") + stations = list(parser.stations.values()) + if stations: + first_station = min(stations, key=lambda s: s.timestamp) + adj.set_fixed_point(first_station.name) + print(f" -> Setze {first_station.name} als Festpunkt") + + print(f"\n### Festpunkte: {adj.fixed_points}") + + # Zeige berechnete Orientierungen + print(f"\n### Berechnete Orientierungen pro Station:") + for station_name, orientation in sorted(adj.orientations.items()): + print(f" {station_name}: {orientation:.4f} gon") + + # Konsistenzprüfung + print("\n" + "=" * 80) + print("KONSISTENZPRÜFUNG") + print("=" * 80) + + consistency = adj.check_consistency() + print(f"\n### Ergebnis: {'✅ KONSISTENT' if consistency['consistent'] else '❌ INKONSISTENT'}") + + if not consistency['consistent']: + print("\n### Probleme gefunden:") + for issue in consistency['issues']: + print(f" ⚠️ {issue}") + + print("\n### WICHTIG:") + print(" Die Koordinaten in der JXL-Datei wurden bereits von Trimble Access") + print(" berechnet und sind fertig. Die Beobachtungen (Kreislesungen) sind") + print(" rohe Messwerte, die nicht mit den berechneten Koordinaten konsistent") + print(" verglichen werden können, da die Orientierungen stark variieren.") + print("") + print(" Eine Netzausgleichung mit diesen Daten ist nicht sinnvoll, da sie") + print(" die bereits korrekten Koordinaten verschlechtern würde.") + print("") + print(" Empfehlung: Verwenden Sie die ausgeglichenen Koordinaten aus der JXL") + print(" direkt, ohne weitere Ausgleichung.") + + # Ausgleichung durchführen (nur Residuen, keine Koordinatenänderung) + print("\n### Starte Residuenanalyse (keine Koordinatenänderung)...") + try: + result = adj.adjust(mode="residuals_only") + + print(f"\n### Ergebnis:") + print(f" Konvergiert: {result.converged}") + print(f" Iterationen: {result.iterations}") + print(f" Sigma-0 posteriori: {result.sigma_0_posteriori:.6f}") + print(f" Redundanz: {result.redundancy}") + + # PUNKTEVERGLEICH + print("\n" + "=" * 100) + print("PUNKTEVERGLEICH: VORHER vs. NACHHER") + print("=" * 100) + print(f"{'Punkt':<10} {'X_vorher':>12} {'Y_vorher':>12} {'Z_vorher':>10} | {'X_nachher':>12} {'Y_nachher':>12} {'Z_nachher':>10} | {'ΔX':>10} {'ΔY':>10} {'ΔZ':>10} {'Δ3D':>10}") + print("-" * 120) + + deviations = [] + for name, pt in sorted(adj.points.items()): + x_before, y_before, z_before = coords_before[name] + x_after, y_after, z_after = pt.x, pt.y, pt.z + + dx = x_after - x_before + dy = y_after - y_before + dz = z_after - z_before + d3d = math.sqrt(dx**2 + dy**2 + dz**2) + + deviations.append((name, dx, dy, dz, d3d, pt.is_fixed)) + + fixed_marker = "*" if pt.is_fixed else " " + print(f"{name:<10}{fixed_marker} {x_before:>12.4f} {y_before:>12.4f} {z_before:>10.4f} | " + f"{x_after:>12.4f} {y_after:>12.4f} {z_after:>10.4f} | " + f"{dx:>10.4f} {dy:>10.4f} {dz:>10.4f} {d3d:>10.4f}") + + # PLAUSIBILITÄTSPRÜFUNG + print("\n" + "=" * 80) + print("PLAUSIBILITÄTSPRÜFUNG") + print("=" * 80) + + # Sortiert nach größter Abweichung + deviations_sorted = sorted(deviations, key=lambda x: x[4], reverse=True) + + # Warnungen + critical_errors = [] + warnings = [] + for name, dx, dy, dz, d3d, is_fixed in deviations_sorted: + if not is_fixed: + if d3d > 1.0: + critical_errors.append((name, d3d)) + elif d3d > 0.1: + warnings.append((name, d3d)) + + if critical_errors: + print("\n🚨 KRITISCHE FEHLER (Abweichung > 1m):") + for name, d3d in critical_errors: + print(f" ❌ {name}: {d3d:.4f} m") + + if warnings: + print("\n⚠️ WARNUNGEN (Abweichung > 10cm):") + for name, d3d in warnings: + print(f" ⚠ {name}: {d3d:.4f} m") + + # Statistik + non_fixed_deviations = [d for d in deviations if not d[5]] + if non_fixed_deviations: + d3d_values = [d[4] for d in non_fixed_deviations] + dx_values = [abs(d[1]) for d in non_fixed_deviations] + dy_values = [abs(d[2]) for d in non_fixed_deviations] + + print("\n### Statistik (nur Neupunkte):") + print(f" Anzahl Punkte: {len(non_fixed_deviations)}") + print(f" Min Δ3D: {min(d3d_values):.6f} m") + print(f" Max Δ3D: {max(d3d_values):.6f} m") + print(f" Mittel Δ3D: {sum(d3d_values)/len(d3d_values):.6f} m") + print(f" Max |ΔX|: {max(dx_values):.6f} m") + print(f" Max |ΔY|: {max(dy_values):.6f} m") + + if not critical_errors and not warnings: + print("\n✅ Alle Koordinaten unverändert (wie erwartet bei residuals_only)") + + # RESIDUEN-ANALYSE + print("\n" + "=" * 80) + print("RESIDUENANALYSE") + print("=" * 80) + + dir_obs = [o for o in adj.observations if o.obs_type == 'direction'] + dist_obs = [o for o in adj.observations if o.obs_type == 'distance'] + + dir_residuals = [o.residual * 1000 for o in dir_obs] # in mgon + dist_residuals = [o.residual * 1000 for o in dist_obs] # in mm + + if dir_residuals: + print(f"\n### Richtungsresiduen (in mgon):") + print(f" Anzahl: {len(dir_residuals)}") + print(f" Min: {min(dir_residuals):.2f} mgon") + print(f" Max: {max(dir_residuals):.2f} mgon") + print(f" RMSE: {math.sqrt(sum(r**2 for r in dir_residuals)/len(dir_residuals)):.2f} mgon") + + if dist_residuals: + print(f"\n### Streckenresiduen (in mm):") + print(f" Anzahl: {len(dist_residuals)}") + print(f" Min: {min(dist_residuals):.2f} mm") + print(f" Max: {max(dist_residuals):.2f} mm") + print(f" RMSE: {math.sqrt(sum(r**2 for r in dist_residuals)/len(dist_residuals)):.2f} mm") + + # Zeige größte Residuen + print(f"\n### Größte Richtungsresiduen:") + sorted_dir = sorted(dir_obs, key=lambda x: abs(x.residual), reverse=True)[:5] + for obs in sorted_dir: + print(f" {obs.from_station} -> {obs.to_point}: {obs.residual*1000:.2f} mgon") + + print(f"\n### Größte Streckenresiduen:") + sorted_dist = sorted(dist_obs, key=lambda x: abs(x.residual), reverse=True)[:5] + for obs in sorted_dist: + print(f" {obs.from_station} -> {obs.to_point}: {obs.residual*1000:.2f} mm") + + # Qualitätsbewertung + rmse_dir = math.sqrt(sum(r**2 for r in dir_residuals)/len(dir_residuals)) if dir_residuals else 0 + rmse_dist = math.sqrt(sum(r**2 for r in dist_residuals)/len(dist_residuals)) if dist_residuals else 0 + + print("\n### Qualitätsbewertung:") + if rmse_dir < 10: + print(f" ✅ Richtungen: SEHR GUT (RMSE < 10 mgon)") + elif rmse_dir < 50: + print(f" ✅ Richtungen: GUT (RMSE < 50 mgon)") + elif rmse_dir < 100: + print(f" ⚠️ Richtungen: AKZEPTABEL (RMSE < 100 mgon)") + else: + print(f" ❌ Richtungen: SCHLECHT (RMSE = {rmse_dir:.2f} mgon)") + + if rmse_dist < 5: + print(f" ✅ Strecken: SEHR GUT (RMSE < 5 mm)") + elif rmse_dist < 20: + print(f" ✅ Strecken: GUT (RMSE < 20 mm)") + elif rmse_dist < 50: + print(f" ⚠️ Strecken: AKZEPTABEL (RMSE < 50 mm)") + else: + print(f" ❌ Strecken: SCHLECHT (RMSE = {rmse_dist:.2f} mm)") + + # Prüfe ob Problem besteht + max_d3d = max(d[4] for d in non_fixed_deviations) if non_fixed_deviations else 0 + if max_d3d > 1.0: + print("\n" + "=" * 80) + print("🔍 FEHLERANALYSE") + print("=" * 80) + + # Prüfe berechnete vs. beobachtete Richtungen + print("\n### Prüfung Richtungsbeobachtungen:") + for obs in dir_obs[:3]: + from_pt = adj.points.get(obs.from_station) + to_pt = adj.points.get(obs.to_point) + if from_pt and to_pt: + dx = to_pt.x - from_pt.x + dy = to_pt.y - from_pt.y + # Berechne Azimut in Gon (aus X,Y) + azimuth_calc = math.atan2(dx, dy) * 200.0 / math.pi + if azimuth_calc < 0: + azimuth_calc += 400.0 + + diff = obs.value - azimuth_calc + while diff > 200: + diff -= 400 + while diff < -200: + diff += 400 + + print(f" {obs.from_station} -> {obs.to_point}:") + print(f" Beobachtet: {obs.value:.6f} gon") + print(f" Berechnet: {azimuth_calc:.6f} gon") + print(f" Differenz: {diff:.6f} gon ({diff*10000:.2f} mgon)") + + # Prüfe berechnete vs. beobachtete Strecken + print("\n### Prüfung Streckenbeobachtungen:") + for obs in dist_obs[:3]: + from_pt = adj.points.get(obs.from_station) + to_pt = adj.points.get(obs.to_point) + if from_pt and to_pt: + dx = to_pt.x - from_pt.x + dy = to_pt.y - from_pt.y + dz = to_pt.z - from_pt.z + dist_calc_3d = math.sqrt(dx**2 + dy**2 + dz**2) + dist_calc_2d = math.sqrt(dx**2 + dy**2) + + diff_3d = obs.value - dist_calc_3d + diff_2d = obs.value - dist_calc_2d + + print(f" {obs.from_station} -> {obs.to_point}:") + print(f" Beobachtet: {obs.value:.6f} m") + print(f" Berechnet 3D: {dist_calc_3d:.6f} m (Diff: {diff_3d*1000:.2f} mm)") + print(f" Berechnet 2D: {dist_calc_2d:.6f} m (Diff: {diff_2d*1000:.2f} mm)") + + except Exception as e: + print(f"FEHLER: {e}") + import traceback + traceback.print_exc() + +if __name__ == "__main__": + main() diff --git a/modules/__pycache__/network_adjustment.cpython-311.pyc b/modules/__pycache__/network_adjustment.cpython-311.pyc index 6b778cbd93b093f60dc1cbae0e8c4c8b78b44cc5..a6092c4cfe7af81ff58c0367564028e020cff4fb 100644 GIT binary patch literal 55240 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

fg+;if1 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 delta 6307 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 Orientierungskorrektur in Gon + self.station_names: List[str] = [] + + # Speichere ursprüngliche Koordinaten für Vergleich + self.coords_before: Dict[str, Tuple[float, float, float]] = {} + # Konfiguration self.max_iterations: int = 20 self.convergence_limit: float = 1e-8 # Meter @@ -117,38 +126,34 @@ class NetworkAdjustment: self.default_std_zenith: float = 0.0003 # Gon def extract_observations(self): - """Extrahiert Beobachtungen aus JXL-Daten""" + """ + Extrahiert Beobachtungen aus JXL-Daten + + WICHTIG: Richtungen werden als ROHE Kreislesungen extrahiert (ohne Orientierungskorrektur), + da die Orientierung als Unbekannte geschätzt wird. + """ self.observations = [] for station_id, station in self.parser.stations.items(): # Messungen von dieser Station measurements = self.parser.get_measurements_from_station(station_id) - # Backbearing für Orientierung finden - orientation = 0.0 - for bb_id, bb in self.parser.backbearings.items(): - if bb.station_record_id == station_id: - if bb.orientation_correction is not None: - orientation = bb.orientation_correction - break - for meas in measurements: if meas.name and not meas.deleted: - # Richtung + # Richtung - OHNE Orientierungskorrektur (wird als Unbekannte geschätzt) if meas.horizontal_circle is not None: std = meas.hz_std_error if meas.hz_std_error else self.default_std_direction - azimuth = meas.horizontal_circle + orientation self.observations.append(Observation( obs_type='direction', from_station=station.name, to_point=meas.name, - value=azimuth, + value=meas.horizontal_circle, # Rohe Kreislesung std_dev=std )) - # Strecke - if meas.edm_distance is not None: + # Strecke (Horizontalstrecke aus 3D-Messung) + if meas.edm_distance is not None and meas.vertical_circle is not None: std = meas.dist_std_error if meas.dist_std_error else self.default_std_distance # Prismenkonstante berücksichtigen @@ -156,13 +161,18 @@ class NetworkAdjustment: if meas.target_id in self.parser.targets: prism_const = self.parser.targets[meas.target_id].prism_constant - distance = meas.edm_distance + prism_const + # Schrägstrecke + slope_distance = meas.edm_distance + prism_const + + # Horizontalstrecke aus Schrägstrecke und Zenitwinkel + zenith_rad = meas.vertical_circle * math.pi / 200.0 + horizontal_distance = slope_distance * math.sin(zenith_rad) self.observations.append(Observation( obs_type='distance', from_station=station.name, to_point=meas.name, - value=distance, + value=horizontal_distance, # Horizontalstrecke std_dev=std )) @@ -183,31 +193,88 @@ class NetworkAdjustment: def initialize_points(self): """Initialisiert Näherungskoordinaten aus JXL-Daten""" self.points = {} + self.coords_before = {} + self.station_names = [] + self.orientations = {} # Alle aktiven Punkte for name, point in self.parser.get_active_points().items(): + x = point.east if point.east is not None else 0.0 + y = point.north if point.north is not None else 0.0 + z = point.elevation if point.elevation is not None else 0.0 + self.points[name] = AdjustedPoint( name=name, - x=point.east if point.east is not None else 0.0, - y=point.north if point.north is not None else 0.0, - z=point.elevation if point.elevation is not None else 0.0, - x_approx=point.east if point.east is not None else 0.0, - y_approx=point.north if point.north is not None else 0.0, - z_approx=point.elevation if point.elevation is not None else 0.0 + x=x, y=y, z=z, + x_approx=x, y_approx=y, z_approx=z ) + self.coords_before[name] = (x, y, z) # Stationen hinzufügen for station_id, station in self.parser.stations.items(): if station.name not in self.points: + x = station.east if station.east is not None else 0.0 + y = station.north if station.north is not None else 0.0 + z = station.elevation if station.elevation is not None else 0.0 + self.points[station.name] = AdjustedPoint( name=station.name, - x=station.east if station.east is not None else 0.0, - y=station.north if station.north is not None else 0.0, - z=station.elevation if station.elevation is not None else 0.0, - x_approx=station.east if station.east is not None else 0.0, - y_approx=station.north if station.north is not None else 0.0, - z_approx=station.elevation if station.elevation is not None else 0.0 + x=x, y=y, z=z, + x_approx=x, y_approx=y, z_approx=z ) + self.coords_before[station.name] = (x, y, z) + + if station.name not in self.station_names: + self.station_names.append(station.name) + + # Orientierungen aus bekannten Koordinaten und Beobachtungen berechnen + self._compute_initial_orientations() + + def _compute_initial_orientations(self): + """ + Berechnet initiale Orientierungen aus den bekannten Koordinaten. + Dies ist wichtig, da die JXL-Koordinaten bereits fertig berechnet sind. + """ + for station_name in self.station_names: + orientations_for_station = [] + + for obs in self.observations: + if obs.obs_type == 'direction' and obs.from_station == station_name: + from_pt = self.points.get(station_name) + to_pt = self.points.get(obs.to_point) + + if from_pt and to_pt: + dx = to_pt.x - from_pt.x + dy = to_pt.y - from_pt.y + dist = math.sqrt(dx**2 + dy**2) + + if dist > 0.01: # Mindestentfernung + # Azimut aus Koordinaten (geodätisch: atan2(dx, dy)) + azimuth = math.atan2(dx, dy) * 200.0 / math.pi + if azimuth < 0: + azimuth += 400.0 + + # Orientierung = Azimut - Richtung + orientation = azimuth - obs.value + # Normalisieren auf [0, 400] gon + while orientation < 0: + orientation += 400.0 + while orientation >= 400: + orientation -= 400.0 + + orientations_for_station.append(orientation) + + # Mittlere Orientierung verwenden (robust gegen Ausreißer) + if orientations_for_station: + # Kreismittel berechnen (für Winkel) + sin_sum = sum(math.sin(o * math.pi / 200) for o in orientations_for_station) + cos_sum = sum(math.cos(o * math.pi / 200) for o in orientations_for_station) + mean_orientation = math.atan2(sin_sum, cos_sum) * 200 / math.pi + if mean_orientation < 0: + mean_orientation += 400.0 + self.orientations[station_name] = mean_orientation + else: + self.orientations[station_name] = 0.0 def set_fixed_point(self, point_name: str): """Setzt einen Punkt als Festpunkt""" @@ -230,10 +297,71 @@ class NetworkAdjustment: first_station = min(stations, key=lambda s: s.timestamp) self.set_fixed_point(first_station.name) - def adjust(self) -> AdjustmentResult: + def check_consistency(self) -> dict: """ - Führt die Netzausgleichung durch - Iterative Lösung nach Gauß-Newton + Prüft die Konsistenz zwischen Koordinaten und Beobachtungen. + Gibt einen Bericht über die Qualität der Daten zurück. + """ + if not self.observations: + self.extract_observations() + if not self.points: + self.initialize_points() + + result = { + 'consistent': True, + 'orientation_spread': {}, + 'distance_residuals': [], + 'issues': [] + } + + # Prüfe Orientierungen pro Station + for station_name in self.station_names: + orientations = [] + + for obs in self.observations: + if obs.obs_type == 'direction' and obs.from_station == station_name: + from_pt = self.points.get(station_name) + to_pt = self.points.get(obs.to_point) + + if from_pt and to_pt: + dx = to_pt.x - from_pt.x + dy = to_pt.y - from_pt.y + dist = math.sqrt(dx**2 + dy**2) + + if dist > 0.01: + azimuth = math.atan2(dx, dy) * 200.0 / math.pi + if azimuth < 0: + azimuth += 400.0 + + ori = azimuth - obs.value + while ori < 0: + ori += 400.0 + while ori >= 400: + ori -= 400.0 + + orientations.append(ori) + + if orientations: + spread = max(orientations) - min(orientations) + result['orientation_spread'][station_name] = { + 'min': min(orientations), + 'max': max(orientations), + 'spread': spread + } + + if spread > 1.0: # > 1 gon Spannweite + result['consistent'] = False + result['issues'].append(f"Station {station_name}: Orientierungsspannweite {spread:.2f} gon") + + return result + + def adjust(self, mode: str = "residuals_only") -> AdjustmentResult: + """ + Führt die Netzausgleichung durch. + + mode: + "residuals_only" - Berechnet nur Residuen, keine Koordinatenänderung (Standard) + "full" - Vollständige Ausgleichung mit Koordinatenkorrektur """ if not self.observations: self.extract_observations() @@ -248,10 +376,56 @@ class NetworkAdjustment: unknown_points = [name for name in self.points.keys() if name not in self.fixed_points] - num_unknowns = len(unknown_points) * 2 # Nur X, Y (2D-Ausgleichung) num_observations = len([o for o in self.observations if o.obs_type in ['direction', 'distance']]) + if mode == "residuals_only": + # Nur Residuenberechnung - Koordinaten bleiben unverändert + # Orientierungen wurden bereits in initialize_points berechnet + + # Residuen berechnen + self._compute_residuals() + + # Sigma-0 aus Residuen berechnen + dir_residuals = [o.residual for o in self.observations if o.obs_type == 'direction'] + dist_residuals = [o.residual for o in self.observations if o.obs_type == 'distance'] + + # Einfache Schätzung von sigma-0 + if dir_residuals: + rmse_dir = math.sqrt(sum(r**2 for r in dir_residuals) / len(dir_residuals)) + else: + rmse_dir = 0 + if dist_residuals: + rmse_dist = math.sqrt(sum(r**2 for r in dist_residuals) / len(dist_residuals)) + else: + rmse_dist = 0 + + self.sigma_0_posteriori = max(rmse_dir * 1000, rmse_dist * 1000) # vereinfacht + + # Ergebnis zusammenstellen + self.result = AdjustmentResult( + adjusted_points=self.points, + observations=self.observations, + sigma_0_priori=self.sigma_0_priori, + iterations=0, + converged=True, + num_points=len(self.points), + num_fixed_points=len(self.fixed_points), + num_observations=num_observations, + num_unknowns=0, + redundancy=num_observations + ) + + self._compute_global_statistics() + + return self.result + + # Vollständige Ausgleichung (mode == "full") + # Anzahl Unbekannte: 2 pro Punkt (X,Y) + 1 Orientierung pro Station + num_point_unknowns = len(unknown_points) * 2 + num_orientation_unknowns = len(self.station_names) + num_unknowns = num_point_unknowns + num_orientation_unknowns + if num_unknowns == 0: raise ValueError("Keine unbekannten Punkte!") @@ -261,6 +435,7 @@ class NetworkAdjustment: # Index-Mapping für Unbekannte point_index = {name: i for i, name in enumerate(unknown_points)} + orientation_index = {name: i for i, name in enumerate(self.station_names)} # Iterative Lösung converged = False @@ -269,22 +444,18 @@ class NetworkAdjustment: while not converged and iteration < self.max_iterations: iteration += 1 - # Designmatrix A und Beobachtungsvektor l erstellen - A, l, P = self._build_normal_equations(point_index, num_unknowns) + A, l, P = self._build_normal_equations_with_orientation( + point_index, orientation_index, num_point_unknowns, num_unknowns) - # Normalgleichungssystem: N = A^T * P * A, n = A^T * P * l N = A.T @ np.diag(P) @ A n = A.T @ np.diag(P) @ l - # Lösung: x = N^-1 * n try: dx = np.linalg.solve(N, n) except np.linalg.LinAlgError: - # Regularisierung bei singulärer Matrix N += np.eye(num_unknowns) * 1e-10 dx = np.linalg.solve(N, n) - # Koordinaten aktualisieren max_correction = 0.0 for name, idx in point_index.items(): i = idx * 2 @@ -296,15 +467,16 @@ class NetworkAdjustment: max_correction = max(max_correction, abs(dx[i]), abs(dx[i + 1])) - # Konvergenzprüfung + for name, idx in orientation_index.items(): + i = num_point_unknowns + idx + self.orientations[name] += dx[i] + if max_correction < self.convergence_limit: converged = True - # Nachbearbeitung self._compute_residuals() - self._compute_accuracy(point_index, num_unknowns) + self._compute_accuracy(point_index, num_point_unknowns) - # Ergebnis zusammenstellen self.result = AdjustmentResult( adjusted_points=self.points, observations=self.observations, @@ -322,9 +494,109 @@ class NetworkAdjustment: return self.result + def _build_normal_equations_with_orientation(self, point_index: Dict[str, int], + orientation_index: Dict[str, int], + num_point_unknowns: int, + num_unknowns: int) -> Tuple[np.ndarray, np.ndarray, np.ndarray]: + """ + Erstellt Designmatrix A und Beobachtungsvektor l + MIT Orientierungsunbekannten pro Station + + Unbekannte: [x1, y1, x2, y2, ..., o1, o2, ...] + """ + + # Nur Richtungen und Strecken für 2D-Ausgleichung + relevant_obs = [o for o in self.observations + if o.obs_type in ['direction', 'distance']] + + n_obs = len(relevant_obs) + A = np.zeros((n_obs, num_unknowns)) + l = np.zeros(n_obs) + P = np.zeros(n_obs) + + for i, obs in enumerate(relevant_obs): + from_pt = self.points.get(obs.from_station) + to_pt = self.points.get(obs.to_point) + + if from_pt is None or to_pt is None: + continue + + dx = to_pt.x - from_pt.x + dy = to_pt.y - from_pt.y + dist = math.sqrt(dx**2 + dy**2) + + if dist < 1e-10: + continue + + from_idx = point_index.get(obs.from_station) + to_idx = point_index.get(obs.to_point) + + if obs.obs_type == 'direction': + # Azimut aus Koordinaten berechnen + azimuth_calc = math.atan2(dx, dy) * 200.0 / math.pi + if azimuth_calc < 0: + azimuth_calc += 400.0 + + # Orientierung der Station + station_orientation = self.orientations.get(obs.from_station, 0.0) + + # Berechnete Richtung = Azimut - Orientierung + direction_calc = azimuth_calc - station_orientation + while direction_calc < 0: + direction_calc += 400.0 + while direction_calc >= 400: + direction_calc -= 400.0 + + # Partielle Ableitungen für Richtungen (in Gon) + rho = 200.0 / math.pi + factor = rho / (dist ** 2) + + # Ableitungen nach Punktkoordinaten + if from_idx is not None: + A[i, from_idx * 2] = -dy * factor # dRichtung/dx_from + A[i, from_idx * 2 + 1] = dx * factor # dRichtung/dy_from + + if to_idx is not None: + A[i, to_idx * 2] = dy * factor # dRichtung/dx_to + A[i, to_idx * 2 + 1] = -dx * factor # dRichtung/dy_to + + # Ableitung nach Orientierung: dRichtung/do = -1 + ori_idx = orientation_index.get(obs.from_station) + if ori_idx is not None: + A[i, num_point_unknowns + ori_idx] = -1.0 + + # Verkürzung l = beobachtet - berechnet + diff = obs.value - direction_calc + # Normalisierung auf [-200, 200] Gon + while diff > 200: + diff -= 400 + while diff < -200: + diff += 400 + l[i] = diff + + elif obs.obs_type == 'distance': + # Partielle Ableitungen für Strecken + if from_idx is not None: + A[i, from_idx * 2] = -dx / dist + A[i, from_idx * 2 + 1] = -dy / dist + + if to_idx is not None: + A[i, to_idx * 2] = dx / dist + A[i, to_idx * 2 + 1] = dy / dist + + # Strecken sind unabhängig von der Orientierung + + # Verkürzung + l[i] = obs.value - dist + + # Gewicht + P[i] = obs.weight + + return A, l, P + def _build_normal_equations(self, point_index: Dict[str, int], num_unknowns: int) -> Tuple[np.ndarray, np.ndarray, np.ndarray]: - """Erstellt Designmatrix A und Beobachtungsvektor l""" + """Erstellt Designmatrix A und Beobachtungsvektor l (alte Version ohne Orientierung)""" # Nur Richtungen und Strecken für 2D-Ausgleichung relevant_obs = [o for o in self.observations @@ -359,8 +631,6 @@ class NetworkAdjustment: azimuth_calc += 400.0 # Partielle Ableitungen (in Gon) - # dAz/dx = dy / (rho * s^2) - # dAz/dy = -dx / (rho * s^2) rho = 200.0 / math.pi factor = rho / (dist ** 2) @@ -383,9 +653,6 @@ class NetworkAdjustment: elif obs.obs_type == 'distance': # Partielle Ableitungen - # ds/dx = dx/s - # ds/dy = dy/s - if from_idx is not None: A[i, from_idx * 2] = -dx / dist A[i, from_idx * 2 + 1] = -dy / dist @@ -422,7 +689,15 @@ class NetworkAdjustment: if azimuth_calc < 0: azimuth_calc += 400.0 - residual = obs.value - azimuth_calc + # Berücksichtige Orientierung + station_orientation = self.orientations.get(obs.from_station, 0.0) + direction_calc = azimuth_calc - station_orientation + while direction_calc < 0: + direction_calc += 400.0 + while direction_calc >= 400: + direction_calc -= 400.0 + + residual = obs.value - direction_calc while residual > 200: residual -= 400 while residual < -200: @@ -430,7 +705,7 @@ class NetworkAdjustment: obs.residual = residual elif obs.obs_type == 'distance': - obs.residual = obs.value - dist_3d + obs.residual = obs.value - dist_2d # 2D Strecke verwenden elif obs.obs_type == 'zenith': if dist_2d > 0: @@ -631,3 +906,129 @@ class NetworkAdjustment: report = self.get_adjustment_report() with open(filepath, 'w', encoding='utf-8') as f: f.write(report) + + def get_point_comparison(self) -> List[Dict]: + """ + Erstellt Punktevergleich: Koordinaten vor und nach der Ausgleichung + Gibt Liste von Dicts zurück, sortiert nach größter Abweichung + """ + comparison = [] + + for name, pt in self.points.items(): + if name in self.coords_before: + x_before, y_before, z_before = self.coords_before[name] + x_after, y_after, z_after = pt.x, pt.y, pt.z + + dx = x_after - x_before + dy = y_after - y_before + dz = z_after - z_before + d3d = math.sqrt(dx**2 + dy**2 + dz**2) + d2d = math.sqrt(dx**2 + dy**2) + + comparison.append({ + 'name': name, + 'x_before': x_before, + 'y_before': y_before, + 'z_before': z_before, + 'x_after': x_after, + 'y_after': y_after, + 'z_after': z_after, + 'dx': dx, + 'dy': dy, + 'dz': dz, + 'd2d': d2d, + 'd3d': d3d, + 'is_fixed': pt.is_fixed + }) + + # Sortiert nach größter 3D-Abweichung + comparison.sort(key=lambda x: x['d3d'], reverse=True) + return comparison + + def get_comparison_report(self) -> str: + """Erstellt einen Punktevergleichs-Bericht""" + comparison = self.get_point_comparison() + + lines = [] + lines.append("=" * 120) + lines.append("PUNKTEVERGLEICH: VORHER vs. NACHHER") + lines.append("=" * 120) + lines.append("") + lines.append(f"{'Punkt':<10} {'X_vorher':>12} {'Y_vorher':>12} {'Z_vorher':>10} | " + f"{'X_nachher':>12} {'Y_nachher':>12} {'Z_nachher':>10} | " + f"{'ΔX [mm]':>10} {'ΔY [mm]':>10} {'ΔZ [mm]':>10} {'Δ3D [mm]':>10}") + lines.append("-" * 120) + + for c in comparison: + fixed_marker = "*" if c['is_fixed'] else " " + lines.append(f"{c['name']:<9}{fixed_marker} " + f"{c['x_before']:>12.4f} {c['y_before']:>12.4f} {c['z_before']:>10.4f} | " + f"{c['x_after']:>12.4f} {c['y_after']:>12.4f} {c['z_after']:>10.4f} | " + f"{c['dx']*1000:>10.2f} {c['dy']*1000:>10.2f} {c['dz']*1000:>10.2f} {c['d3d']*1000:>10.2f}") + + lines.append("") + lines.append("* = Festpunkt (nicht ausgeglichen)") + lines.append("") + + # Plausibilitätsprüfung + lines.append("=" * 80) + lines.append("PLAUSIBILITÄTSPRÜFUNG") + lines.append("=" * 80) + + non_fixed = [c for c in comparison if not c['is_fixed']] + critical_errors = [c for c in non_fixed if c['d3d'] > 1.0] + warnings = [c for c in non_fixed if 0.1 < c['d3d'] <= 1.0] + + if critical_errors: + lines.append("") + lines.append("🚨 KRITISCHE FEHLER (Abweichung > 1m):") + for c in critical_errors[:10]: # Max 10 anzeigen + lines.append(f" ❌ {c['name']}: {c['d3d']*1000:.1f} mm") + if len(critical_errors) > 10: + lines.append(f" ... und {len(critical_errors)-10} weitere") + + if warnings: + lines.append("") + lines.append("⚠️ WARNUNGEN (Abweichung > 10cm):") + for c in warnings[:10]: + lines.append(f" ⚠ {c['name']}: {c['d3d']*1000:.1f} mm") + if len(warnings) > 10: + lines.append(f" ... und {len(warnings)-10} weitere") + + # Statistik + if non_fixed: + d3d_values = [c['d3d'] for c in non_fixed] + dx_values = [abs(c['dx']) for c in non_fixed] + dy_values = [abs(c['dy']) for c in non_fixed] + + lines.append("") + lines.append("### Statistik (nur Neupunkte):") + lines.append(f" Anzahl Punkte: {len(non_fixed)}") + lines.append(f" Min Δ3D: {min(d3d_values)*1000:.2f} mm") + lines.append(f" Max Δ3D: {max(d3d_values)*1000:.2f} mm") + lines.append(f" Mittel Δ3D: {sum(d3d_values)/len(d3d_values)*1000:.2f} mm") + lines.append(f" Max |ΔX|: {max(dx_values)*1000:.2f} mm") + lines.append(f" Max |ΔY|: {max(dy_values)*1000:.2f} mm") + + if not critical_errors and not warnings: + lines.append("") + lines.append("✅ Alle Abweichungen im akzeptablen Bereich (< 10cm)") + + return "\n".join(lines) + + def export_comparison(self, filepath: str, format: str = 'csv'): + """Exportiert den Punktevergleich""" + comparison = self.get_point_comparison() + + if format == 'csv': + lines = ["Punkt;X_vorher;Y_vorher;Z_vorher;X_nachher;Y_nachher;Z_nachher;DX_mm;DY_mm;DZ_mm;D3D_mm;Festpunkt"] + for c in comparison: + fixed = "Ja" if c['is_fixed'] else "Nein" + lines.append(f"{c['name']};{c['x_before']:.4f};{c['y_before']:.4f};{c['z_before']:.4f};" + f"{c['x_after']:.4f};{c['y_after']:.4f};{c['z_after']:.4f};" + f"{c['dx']*1000:.2f};{c['dy']*1000:.2f};{c['dz']*1000:.2f};{c['d3d']*1000:.2f};{fixed}") + else: + lines = [self.get_comparison_report()] + + with open(filepath, 'w', encoding='utf-8') as f: + f.write("\n".join(lines))