From 0a27eb9dbaf55b6089a1945c0da17968f55f3bf9 Mon Sep 17 00:00:00 2001 From: Kevin Robatel Date: Tue, 12 Mar 2024 16:08:15 +0100 Subject: [PATCH] Add missing files --- .github/workflows/bintray-publish.yml | 26 + .github/workflows/gradle-build.yml | 18 + App integration flow.PNG | Bin 0 -> 78771 bytes LICENSE | 21 + android-webui-sdk.iml | 19 + .../com/queue_it/shopdemo/DeepActivity.java | 29 + .../com/queue_it/shopdemo/FirstFragment.java | 33 ++ .../com/queue_it/shopdemo/MainActivity.java | 194 +++++++ .../com/queue_it/shopdemo/ResultActivity.java | 56 ++ .../com/queue_it/shopdemo/SecondFragment.java | 32 ++ .../src/library/res/layout/activity_deep.xml | 33 ++ .../src/library/res/layout/activity_main.xml | 160 ++++++ .../library/res/layout/activity_result.xml | 62 +++ .../src/library/res/layout/content_deep.xml | 6 + .../src/library/res/layout/fragment_first.xml | 28 + .../library/res/layout/fragment_second.xml | 27 + .../com/queue_it/shopdemo/DeepActivity.java | 28 + .../com/queue_it/shopdemo/FirstFragment.java | 35 ++ .../com/queue_it/shopdemo/MainActivity.java | 305 +++++++++++ .../com/queue_it/shopdemo/ResultActivity.java | 55 ++ .../com/queue_it/shopdemo/SecondFragment.java | 35 ++ .../res/layout/activity_deep.xml | 33 ++ .../res/layout/activity_main.xml | 211 ++++++++ .../res/layout/activity_result.xml | 62 +++ .../res/layout/content_deep.xml | 6 + .../res/layout/fragment_first.xml | 28 + .../res/layout/fragment_second.xml | 27 + demoapp/src/main/res/navigation/nav_graph.xml | 28 + demowithprotectedapi/.gitignore | 1 + demowithprotectedapi/build.gradle | 58 ++ demowithprotectedapi/proguard-rules.pro | 21 + .../ExampleInstrumentedTest.java | 26 + .../src/main/AndroidManifest.xml | 28 + .../demowithprotectedapi/FirstFragment.java | 176 +++++++ .../demowithprotectedapi/MainActivity.java | 82 +++ .../demowithprotectedapi/api/Product.java | 13 + .../api/ProductFilter.java | 5 + .../api/ProductsService.java | 14 + .../exceptions/MustBeQueued.java | 16 + .../http/AddCookiesInterceptor.java | 31 ++ .../http/CookieStorage.java | 23 + .../http/QueueITInterceptor.java | 61 +++ .../http/ReceivedCookiesInterceptor.java | 46 ++ .../http/UserAgentInterceptor.java | 40 ++ .../repos/IProductRepository.java | 12 + .../repos/ProductRepository.java | 54 ++ .../repos/RetrofitProductRepository.java | 54 ++ .../drawable-v24/ic_launcher_foreground.xml | 30 ++ .../res/drawable/ic_launcher_background.xml | 170 ++++++ .../src/main/res/layout/activity_main.xml | 33 ++ .../src/main/res/layout/content_main.xml | 19 + .../src/main/res/layout/fragment_first.xml | 28 + .../src/main/res/menu/menu_main.xml | 10 + .../res/mipmap-anydpi-v26/ic_launcher.xml | 5 + .../mipmap-anydpi-v26/ic_launcher_round.xml | 5 + .../src/main/res/mipmap-hdpi/ic_launcher.webp | Bin 0 -> 1404 bytes .../res/mipmap-hdpi/ic_launcher_round.webp | Bin 0 -> 2898 bytes .../src/main/res/mipmap-mdpi/ic_launcher.webp | Bin 0 -> 982 bytes .../res/mipmap-mdpi/ic_launcher_round.webp | Bin 0 -> 1772 bytes .../main/res/mipmap-xhdpi/ic_launcher.webp | Bin 0 -> 1900 bytes .../res/mipmap-xhdpi/ic_launcher_round.webp | Bin 0 -> 3918 bytes .../main/res/mipmap-xxhdpi/ic_launcher.webp | Bin 0 -> 2884 bytes .../res/mipmap-xxhdpi/ic_launcher_round.webp | Bin 0 -> 5914 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.webp | Bin 0 -> 3844 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.webp | Bin 0 -> 7778 bytes .../src/main/res/navigation/nav_graph.xml | 14 + .../src/main/res/values-night/themes.xml | 16 + .../src/main/res/values/colors.xml | 10 + .../src/main/res/values/dimens.xml | 3 + .../src/main/res/values/strings.xml | 12 + .../src/main/res/values/themes.xml | 25 + .../demowithprotectedapi/ExampleUnitTest.java | 17 + ...onnector integration with QueueITToken.png | Bin 0 -> 46109 bytes documentation/protected_apis.md | 25 + .../queue_it/androidsdk/QueueActivity.java | 35 ++ .../WaitingRoomStateBroadcaster.java | 97 ++++ .../queue_it/androidsdk/QueueActivity.java | 34 ++ .../WaitingRoomStateBroadcaster.java | 98 ++++ .../queue_it/androidsdk/IUriOverrider.java | 20 + .../IWaitingRoomStateBroadcaster.java | 35 ++ .../androidsdk/QueueActivityBase.java | 198 +++++++ .../androidsdk/QueueDisabledInfo.java | 13 + .../queue_it/androidsdk/QueueITApiClient.java | 196 +++++++ .../androidsdk/QueueITApiClientListener.java | 6 + .../QueueITWaitingRoomProvider.java | 235 +++++++++ .../QueueITWaitingRoomProviderListener.java | 6 + .../androidsdk/QueueITWaitingRoomView.java | 160 ++++++ .../androidsdk/QueueItEngineOptions.java | 73 +++ .../androidsdk/QueueTryPassResult.java | 45 ++ .../queue_it/androidsdk/QueueUrlHelper.java | 53 ++ .../com/queue_it/androidsdk/RedirectType.java | 11 + .../androidsdk/UriOverrideWrapper.java | 8 + .../com/queue_it/androidsdk/UriOverrider.java | 131 +++++ .../queue_it/androidsdk/UserAgentManager.java | 20 + .../queue_it/androidsdk/UriOverriderTest.java | 494 ++++++++++++++++++ .../src/test/resources/robolectric.properties | 1 + publish.gradle | 110 ++++ 97 files changed, 4859 insertions(+) create mode 100644 .github/workflows/bintray-publish.yml create mode 100644 .github/workflows/gradle-build.yml create mode 100644 App integration flow.PNG create mode 100644 LICENSE create mode 100644 android-webui-sdk.iml create mode 100644 demoapp/src/library/java/com/queue_it/shopdemo/DeepActivity.java create mode 100644 demoapp/src/library/java/com/queue_it/shopdemo/FirstFragment.java create mode 100644 demoapp/src/library/java/com/queue_it/shopdemo/MainActivity.java create mode 100644 demoapp/src/library/java/com/queue_it/shopdemo/ResultActivity.java create mode 100644 demoapp/src/library/java/com/queue_it/shopdemo/SecondFragment.java create mode 100644 demoapp/src/library/res/layout/activity_deep.xml create mode 100644 demoapp/src/library/res/layout/activity_main.xml create mode 100644 demoapp/src/library/res/layout/activity_result.xml create mode 100644 demoapp/src/library/res/layout/content_deep.xml create mode 100644 demoapp/src/library/res/layout/fragment_first.xml create mode 100644 demoapp/src/library/res/layout/fragment_second.xml create mode 100644 demoapp/src/library_androidx/java/com/queue_it/shopdemo/DeepActivity.java create mode 100644 demoapp/src/library_androidx/java/com/queue_it/shopdemo/FirstFragment.java create mode 100644 demoapp/src/library_androidx/java/com/queue_it/shopdemo/MainActivity.java create mode 100644 demoapp/src/library_androidx/java/com/queue_it/shopdemo/ResultActivity.java create mode 100644 demoapp/src/library_androidx/java/com/queue_it/shopdemo/SecondFragment.java create mode 100644 demoapp/src/library_androidx/res/layout/activity_deep.xml create mode 100644 demoapp/src/library_androidx/res/layout/activity_main.xml create mode 100644 demoapp/src/library_androidx/res/layout/activity_result.xml create mode 100644 demoapp/src/library_androidx/res/layout/content_deep.xml create mode 100644 demoapp/src/library_androidx/res/layout/fragment_first.xml create mode 100644 demoapp/src/library_androidx/res/layout/fragment_second.xml create mode 100644 demoapp/src/main/res/navigation/nav_graph.xml create mode 100644 demowithprotectedapi/.gitignore create mode 100644 demowithprotectedapi/build.gradle create mode 100644 demowithprotectedapi/proguard-rules.pro create mode 100644 demowithprotectedapi/src/androidTest/java/com/example/demowithprotectedapi/ExampleInstrumentedTest.java create mode 100644 demowithprotectedapi/src/main/AndroidManifest.xml create mode 100644 demowithprotectedapi/src/main/java/com/example/demowithprotectedapi/FirstFragment.java create mode 100644 demowithprotectedapi/src/main/java/com/example/demowithprotectedapi/MainActivity.java create mode 100644 demowithprotectedapi/src/main/java/com/example/demowithprotectedapi/api/Product.java create mode 100644 demowithprotectedapi/src/main/java/com/example/demowithprotectedapi/api/ProductFilter.java create mode 100644 demowithprotectedapi/src/main/java/com/example/demowithprotectedapi/api/ProductsService.java create mode 100644 demowithprotectedapi/src/main/java/com/example/demowithprotectedapi/exceptions/MustBeQueued.java create mode 100644 demowithprotectedapi/src/main/java/com/example/demowithprotectedapi/http/AddCookiesInterceptor.java create mode 100644 demowithprotectedapi/src/main/java/com/example/demowithprotectedapi/http/CookieStorage.java create mode 100644 demowithprotectedapi/src/main/java/com/example/demowithprotectedapi/http/QueueITInterceptor.java create mode 100644 demowithprotectedapi/src/main/java/com/example/demowithprotectedapi/http/ReceivedCookiesInterceptor.java create mode 100644 demowithprotectedapi/src/main/java/com/example/demowithprotectedapi/http/UserAgentInterceptor.java create mode 100644 demowithprotectedapi/src/main/java/com/example/demowithprotectedapi/repos/IProductRepository.java create mode 100644 demowithprotectedapi/src/main/java/com/example/demowithprotectedapi/repos/ProductRepository.java create mode 100644 demowithprotectedapi/src/main/java/com/example/demowithprotectedapi/repos/RetrofitProductRepository.java create mode 100644 demowithprotectedapi/src/main/res/drawable-v24/ic_launcher_foreground.xml create mode 100644 demowithprotectedapi/src/main/res/drawable/ic_launcher_background.xml create mode 100644 demowithprotectedapi/src/main/res/layout/activity_main.xml create mode 100644 demowithprotectedapi/src/main/res/layout/content_main.xml create mode 100644 demowithprotectedapi/src/main/res/layout/fragment_first.xml create mode 100644 demowithprotectedapi/src/main/res/menu/menu_main.xml create mode 100644 demowithprotectedapi/src/main/res/mipmap-anydpi-v26/ic_launcher.xml create mode 100644 demowithprotectedapi/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml create mode 100644 demowithprotectedapi/src/main/res/mipmap-hdpi/ic_launcher.webp create mode 100644 demowithprotectedapi/src/main/res/mipmap-hdpi/ic_launcher_round.webp create mode 100644 demowithprotectedapi/src/main/res/mipmap-mdpi/ic_launcher.webp create mode 100644 demowithprotectedapi/src/main/res/mipmap-mdpi/ic_launcher_round.webp create mode 100644 demowithprotectedapi/src/main/res/mipmap-xhdpi/ic_launcher.webp create mode 100644 demowithprotectedapi/src/main/res/mipmap-xhdpi/ic_launcher_round.webp create mode 100644 demowithprotectedapi/src/main/res/mipmap-xxhdpi/ic_launcher.webp create mode 100644 demowithprotectedapi/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp create mode 100644 demowithprotectedapi/src/main/res/mipmap-xxxhdpi/ic_launcher.webp create mode 100644 demowithprotectedapi/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp create mode 100644 demowithprotectedapi/src/main/res/navigation/nav_graph.xml create mode 100644 demowithprotectedapi/src/main/res/values-night/themes.xml create mode 100644 demowithprotectedapi/src/main/res/values/colors.xml create mode 100644 demowithprotectedapi/src/main/res/values/dimens.xml create mode 100644 demowithprotectedapi/src/main/res/values/strings.xml create mode 100644 demowithprotectedapi/src/main/res/values/themes.xml create mode 100644 demowithprotectedapi/src/test/java/com/example/demowithprotectedapi/ExampleUnitTest.java create mode 100644 documentation/App + Connector integration with QueueITToken.png create mode 100644 documentation/protected_apis.md create mode 100644 library/src/library/java/com/queue_it/androidsdk/QueueActivity.java create mode 100644 library/src/library/java/com/queue_it/androidsdk/WaitingRoomStateBroadcaster.java create mode 100644 library/src/library_androidx/java/com/queue_it/androidsdk/QueueActivity.java create mode 100644 library/src/library_androidx/java/com/queue_it/androidsdk/WaitingRoomStateBroadcaster.java create mode 100644 library/src/main/java/com/queue_it/androidsdk/IUriOverrider.java create mode 100644 library/src/main/java/com/queue_it/androidsdk/IWaitingRoomStateBroadcaster.java create mode 100644 library/src/main/java/com/queue_it/androidsdk/QueueActivityBase.java create mode 100644 library/src/main/java/com/queue_it/androidsdk/QueueDisabledInfo.java create mode 100644 library/src/main/java/com/queue_it/androidsdk/QueueITApiClient.java create mode 100644 library/src/main/java/com/queue_it/androidsdk/QueueITApiClientListener.java create mode 100644 library/src/main/java/com/queue_it/androidsdk/QueueITWaitingRoomProvider.java create mode 100644 library/src/main/java/com/queue_it/androidsdk/QueueITWaitingRoomProviderListener.java create mode 100644 library/src/main/java/com/queue_it/androidsdk/QueueITWaitingRoomView.java create mode 100644 library/src/main/java/com/queue_it/androidsdk/QueueItEngineOptions.java create mode 100644 library/src/main/java/com/queue_it/androidsdk/QueueTryPassResult.java create mode 100644 library/src/main/java/com/queue_it/androidsdk/QueueUrlHelper.java create mode 100644 library/src/main/java/com/queue_it/androidsdk/RedirectType.java create mode 100644 library/src/main/java/com/queue_it/androidsdk/UriOverrideWrapper.java create mode 100644 library/src/main/java/com/queue_it/androidsdk/UriOverrider.java create mode 100644 library/src/main/java/com/queue_it/androidsdk/UserAgentManager.java create mode 100644 library/src/test/java/com/queue_it/androidsdk/UriOverriderTest.java create mode 100644 library/src/test/resources/robolectric.properties create mode 100644 publish.gradle diff --git a/.github/workflows/bintray-publish.yml b/.github/workflows/bintray-publish.yml new file mode 100644 index 0000000..f4a40f2 --- /dev/null +++ b/.github/workflows/bintray-publish.yml @@ -0,0 +1,26 @@ +name: Publish to bintray on closed PR +on: + release: + types: [released] + +jobs: + gradle: + strategy: + matrix: + os: [ubuntu-latest] + runs-on: ${{ matrix.os }} + steps: + - uses: actions/checkout@v2 + # Export properties + - name: Setup bintray credentials + env: + BINTRAY_APIKEY: ${{ secrets.BINTRAY_APIKEY }} + run: | + echo "bintray.user=queueitdevs" > ./local.properties + echo "bintray.apiKey=${BINTRAY_APIKEY}" >> ./local.properties + - uses: actions/setup-java@v1 + with: + java-version: 11 + - uses: eskatos/gradle-command-action@v1 + with: + arguments: assembleLibrary_androidx :library:assembleLibrary bintrayUpload \ No newline at end of file diff --git a/.github/workflows/gradle-build.yml b/.github/workflows/gradle-build.yml new file mode 100644 index 0000000..388a247 --- /dev/null +++ b/.github/workflows/gradle-build.yml @@ -0,0 +1,18 @@ +name: Run Gradle Build on Push +on: push +jobs: + gradle: + strategy: + matrix: + os: [ubuntu-latest] + runs-on: ${{ matrix.os }} + steps: + - uses: actions/checkout@v2 + - name: Create local.properties + run: echo "" >> ./local.properties + - uses: actions/setup-java@v1 + with: + java-version: 11 + - uses: eskatos/gradle-command-action@v1 + with: + arguments: build \ No newline at end of file diff --git a/App integration flow.PNG b/App integration flow.PNG new file mode 100644 index 0000000000000000000000000000000000000000..00eab464673390be3360903eb9f2fe6b93328f80 GIT binary patch literal 78771 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

AVQE%Zl_IZ6cLX&GkfVfqMpjLC^f@Bi7q|$ z@$&c#s}-IOC`+$1Okc?RA#@w|{9fM+aZGuHU_(q=YNI!VRCJ1q;#uPjip2M`4@}vX z0uKAGJbfeFF6b+w7pIiXNzq?Y8N`wZ()h)zBTi1S-rGshrI8TgGZ^P~|NQ1LYnD>( z_r|KeNJ_aMQL?d7gSpr3S;ez8b;FE1`j15JiAJqlq{t^Sr{a{9#kCzzx6(nbm{2k} zP>*Z4cKc!{ePXOi-EMiS+1XH6(zLtB9v8=-y>*VL!ujQq&g7l|Zu?)njKFUopRDUV z(O9ioDc;B`4i}jr$o@47=fAPSV`6+`$hBhYXlPO?$(LKa=4{Kc9Yd0RA$$tLo)Pg~$4+BdUeP5 zOPN@4K^HYi8?c0X)a&3FWBG3;=Zuv6POYZ{k$)w4UY2uzv_C#L}mMQknPn_|DNwgJ$>I zlGj2Yu`ILu`A49Ag}auk&6kKBoB!gSgs`pii`zeVT#t(qyfc9~31U_A6Yq0i?;ZWqwPky04{VO4QPMetPV-P69kEhm~2LwdnlMo46~ z7HjfdddtrfB}6zTQ#NI8xvBSYi0XL& z3S|Xt)==lkDF6lmY#9JKvGMc)?NaE|>yHQ3DlP`YPv;8cbaBWuU3qkoOXCPYjpt=a zhPFuJAY398d5t<0d9NEX2dns=gW$X2PKH!oBIIYB=Ng6#Ule7dDfSQ=^klVXonO}2 z2q)2>C3F3D;#M0SmjoPO7HirsRcAOT+*N(AwUo=>olB@)Kqv4aWLt_1#>HwjBMPdj zWkA(|@r85Rf@Z}JfO0cYCzi5jje7d@NssUx(4zXU(;Ep-hjz4$O=wSwtgi0~W(b|f zud|MFh%l$RJovFzp$m^|=OHWYj0O+nVvOd;gN0l2weG}dahRA6At1Gvn}&9b1=7J{ zZynk>;O7V0U5{c()4o)p?C}jM*?(8IlN@c1VOI0)k8v z1;`iFO5RZt2x^;tpyTY0f>D&?ScR%u|l`fTG)Q_?ff(w}{9|D2)J zwBVU28hcNGXJV{sNbp*`Qs&VfbXqHB{!8BIS>_dm7uulVG~*_{h~YJsmy~;(6!&LPBxY4E?>dG-K-48M!Jvb#r}#rJHmq1Zd{eFR-ytd_z2@w4J)0wy?xi zBzGt?s*(`3=V-uW%Mo!VCjoSTHC>2X9>AlahuO|TCuUM6v?kc))gSOH9HSQHFdZ^B zT$^aVZGAPysDAmN`P&csQOHv*ClD#TPmpYl7ANO=uVI#HA$p;3Y9uN2FteR|I5(2n zE)&-iTDi6xp@GzL?tx4w!=jg$RYu?I?>CGTS2b4cZ%)b>qhL-~Zlhr<7v$R?cV+B} zyeBHs03hV%@!98&*L7W*tqySahk8|qoD02|&=%QvIeVoSsn zEGwEg;_xxea5XttQeN7%{`{1(ym2UmBO>R-c92)#8@&_7qnL0M<}>qZ;9%Tc^)1%T zQlVrOvDOSP`Ad_Z%B-P)if*i|C#7@RHKz5YiXyC$&N(!T&tmSIH7w_;j+K_OKMF@- zW=8rv!|maDQgJ!bZ3-`j*fxsdMs^b{dEvQ6K0xvrq4#1VW!n+CQlaUnX}S?M{o3_F ziX22S)tK$v{#gQiuj0<4T#V|*{prZ*JJU=t=8hcGT51(Z(CM=o1|O2G?l*8&h*`VY zXQ5w<_WRFL6f71-yP?FV&sA_o%a96o%5HNFU==+$#<>Z+dNF>7j~7cOSQUK3-QCsz zNuE=kjSFt<_RpGl%pPqK9-oHL%Q8s^yEKWSZ#?Nt7Pxy#{nb1cBs!p4^iD$|s}fP1 zG!zsK7pem%hfpYUttUCLTsOYo?;3xU_#qW~A^@mZp2aN#C%7ryh2*e@LPaK#&oTtx ziZ9W^di?1rWXYpAv*<(Y^dKpF0!)4Q>?I3<=%XA@1Hy%`%HYd>TcJ!i$;jXnH7W5= z@co|VV;Pex>9tK-Gmc^xBjpcFLyD~*?LFa|-XgDg3O5o+^)KD&SYvUjSX&pUgJ`@T zH&;Ih$!Hhq9|k8p-^=c#c)PQIr`mM=+9=0&^*Ts+a0e8{rb-#XN4@nBJ;G$+#!fSR z$-()>jnHb$NL3+b?b+(HwHOhnQc`YnYiWv~pN42glGvXW9r?Y#j~{u&DXlF@CXZ8P z0uip0_4zkhlp~Wk>tpFylRICC>^N00RWqdn9lkCa3(+ov?jVo^ufky_ZA@Ts;eABC zc3M00m)a3(S~VtP5cgtZx*?}j+30F(g|72VpGXGNW5Z?ilKSVnzxX(HR#0yHxf69h z^sc*nFN$9XsxomgJHz_g%@*Fx5mAiiDWCqJNIi|Y4A3yJeqY&47HS^#)r^t(UiKZG zEW;vgoCQy8cvVT++%qqoyj-pr~ z>In75Ye^yBcAR+vG~E5E!)a>W^Qj}n@k40NQBw6CwF~(zfwka3^@1PIOzDP-$HRJ+@QH z0Y8X_PPw(-DE+*0F}&(E)5>0mR0Lt4yPac3sC4n7ig?cT$>2i{h+ep9>!)D1GQn-r zSG5a)X9@dMDv3$kfGk84Nj0omd=`FY_v7yET|53|-lf*wSTvL$`ECr3@|)fX&>F8o z9bF=<9eAEEQ7$f`4w^SDLHM`Ar;e7}ws;z-RAk0B$0Hwu0s0~xKHyl8#*5LdyI~mz? zc~_@WRr!SoYkEonoU6q_Ke0%mak_I6VTDx&9M}jf*u+d%JZXDQ>V{sE+SE_mNnqmZ zB5m;_YC37q-BW;9HmMvR<62&X_~e|>E7smAc#N^A)vR0-+-Fu>S2ldG+s1j(Iqr#+ zvEi>Q^!2=A*6PlF-RJsF9R`E#b$m@jVa&YBFjoofDgRs@SXWrK)N)KEeYiLW{LCj~>h>4UBozBZYa2m13JxBl;-6gimbYcT0}j`jWWR0`5KPY#eB{ zc=;a$DyGRE4H3by6I9O68dwc7^DqxEy9wb;EQ>wfwm25+x9X?$uH~o>4qCEM`<+vv z7Oc*SCXZ9jIRRw+OjJe%$ZkNh2xF%2%kt6&R0?)kl*7>HTyFkmlH_1doB>%sjp67- zqHl#$q9q!xWfw_##eBT$D()S-!pJX9=4}I!TZEH5T5h2GfzkF`cj3Gw6PO3M$AA>oh{ib z6maDlBg7sr%wmb)ncrJE6{^2%7~3VU>zN--o^fVp=~;9@_`L#4Cq446!|^6}&s<#Te>otp326irKP`QxHaZ3Tq(2% zdmfgQZ+ZIl4d|5l`qhnNp z@}7|<&+L#QjZ>~;Ir0`hH25KJ9Yrs0xN?GEU{*$1SRZmuL`~>Y%YRfb*_Q$jqdpr) zAxyL8M(C|rNNq+*c5)8mCw6byGIA||CFME&0PRg*1}R8_kNqy-r{PQx*eE@tPljBbepNaS zS;>@{+X}Qp4+&eQ8&S1j3I?m7IViUYx3QhkAvCC30Bm)lX%iG(7PS~<*hZa$aVv52 zPMccSb=C1X&&OQN^rc@aUa!sMj!rMrcCh_&lDuA#HZoQ)ErZR*;Ra|W;Mb3=y7p~A zvF4nKR4W{+AFcTK--IGfZ_c1CzWXjNAg@~g;qsZJV^C8FUGbT$^vnrkR3Rq$XpeJ8 zNP&Oqazf-o$OAs3Xk>@ZqK&bz&W3VVaF>DL_hh+H&C>Wo?&v;ETANYQ0*MsfmC$gu z8PQ0m-KYtL(wrm5QFxyZtq@^~Fj zXA3SSLp4~)8Kf@uyJhJov+4&eQzz$#LQWAc8Hr+@_p^EwjIQug0`uh+S(d^B?{R~9 z4q$#!k(Iz3hER%83S8|wYc!loYEdq$fVL1F+&Kf_eTMMN(wTY}>TLNqJa8hz=EG)v|1GlVf z7h0%DjzL#8sq<)M@1EI@*I=|oY`%1TfDFlDNrW_6`*{>Wec{+#1(>pO)EiCKb?qPy zhK5)q+PpD2Cwvei2xA-(PL*PDi>hPPJP0qG*@}+J;P<-rxLw>!uEdN*srl+8Fv#!7 z^9V&&P5EE=8x0UAO%~q#*p+#pXHl+PW;c)mMS(LQI^n~VLXkU97%!l z(wVe`OOx|%Q4xr}d_SJ_^W2Mfn%|Qi&}oq{MV&hIJ8Lj2oSlTa9t~f@?x~Bu??d0E zx!*J@N$dejO5m%{*>nq#4)$DL6;QuqFb%X_i3g*opX8+<33OzxXlDj%+H)$mC24K2|SAEuw?gHMIOszl%R`yh<&v`!!JsqlI za9J1d{$f}x{#Ecv+x2@|FZ5YBw028^&RJ4kDw$|U`w(61}GMh zo9$AMFJ2McBhE5P0H>tOXDl8|lJ_Bc9sXqo$G4ULOS`E1*TaC}v(|T`IgPT~R()(4 zF2xl)j$?qXvOw|2bhD{H^PorxmD$+^LG#WJ9ii=-;1*Reu-x{s$mk>g_H96O_xncr>Rbg66YJ@+>yu>YG-)vn3U(^AYfJXNbBj7h|F!|zUh74! zs{Qe{jabnh-@+udpCtJ;FsHxW9{6qF?3$ii z`ln1cTTMWc)fVjtdVvisO^I47dfd3snla*Ne=ms(UHWy58SsFS_By6;R+-!MAdKrS zt$g9FMlNz16NUgr_cbaOwU7W|_bRoXAEV_?Vm#aT&PHCF)?Z{X08Vm5_;AuH#xR*{ z+aGFnnj8PH$Rk7F{4lXy*<)8^gn9o98f;q`Arz_CC9*ulKjS7!ZU+FmnOT?EF997> zdZeK4rxl|yk%K93g(QYh2ogMZnl&Q$vl*BvTRs{}fris9@O2JJvLKp6Q81NfH<~Hg z2;XBir+SIK9?_f4 zxo@R1fsR>gfTKze#XbC4+S`~B(b)*132GyLrrvCG!}!wdmZM#Z0eIyGN_ z43b3KsY)E;7}rd$;#hj1=>416-0ZY8;a7#vRhyf#Rj@E!_*t6%7Jd5)`mD?8pf}|} z03KDqO>v9l&5YI;qBoOC_vvI>WqY$#NH;8|O~7g+tk(o(Ta=8!6}YlbpGnkUd4 zKql!xwV&*o5ThtY14BeNzx zQ=)kRWYWqcjdpzyVs#EbK=tY&aR#>6cArCKqNrp-V_1+?j%-b3g89sZA&=o~@8a0t z-H%{c_EuL1%LEBwM7rn3??JE6f`&Fb#UDejp?&?Xz0l{R)&^P9SaM#jKsi3V(vW-C z^&H+s@M*mX7vLB}W#~&N*t^|dZ)1han5_U|?p0$spK!CVNXlu1VE4V9hclI|lguj@ zUs;3}FT$WaM@6J(Hk{RX+9EPk#2B{33cebM(UQ6!zH3eBIx6FH3kwa@s#$6X(Q0GD zXdvz`Hx-R;ser_Vo+ZEe;Vj>g#s0M;h}j+JM9D-1O*7G+=FKS~qc~qq1)~na8E00) zvblOA!a}_G8;vMdoLjQj4UnmXHNF~iy{af4w%i+rZeX1RuJNOWsaN4t8C1wub$bIo zojZn9?Pl@SguxDD6y!Gkz@Bh%5SVkUn=?%MEL5(CIK^zA3geS?h_f9bwxI%Rj!&4A z&*>EBZWqW8N!UEm%#&~Z^>#qN;iz&UEhjxw1(vDQSF3s5zYlCrHP9fWfs)@|iyKVbft5XTF`06c1if z*g&Y>osNs20{dCSzD&_e37fxA$iX1hWowacvWu_^XOUt8uXvt{!xeIxPk2FL=0{tm zp9U#cq>wQltdsT?l7Uq7u@RTYG9p&BLaVnc7{nS1H*=hf!iLaK87sHJ^TiGZr-D?;e*wFOqqY^-fT2w1^}>*w?%nl)As;Hap=*r{^SMpAR5h1b z9^>3+Bd0mEV)xP}o;M{<{0g3?DqTB}Xj%zvDvYq;U&nc#-l>FWgu zGUGG##nd4**eOT_`_xObS7PSIeD^99bCZV$b;(@RK2}TX)2?VDA80s73y#u|WK&4l zL~V(_7<6r7jS`m3;_mBuo^Pl2&HoE7UGN>qo!6qBW4v8e+Bm(DFlz?4Db_2}Gt%Uv zauklasb)t}%kSc2JvpXx$9WBf&BLU=ey}X;UbKaehdn2 zurM+7sbA^7lC(uk;jn|+Q53Yru9;EAB6(uHR;cfXnOIhc8NqOi*~pg>&DSg@p^>jI zY)ZRZ^n5c*N;k6nk>8*Xa?Ov?Khhu9AjQO|z3~`~uO_drh1$|3y_eeJL5iLya63SM zbc{-TS2Iu)(jE_XF7k}sOZpJKlj}|2e^hpDAkcKq=uQ-`k#&7dI90veIDV|tNjB?Y z{F*gO%)7E&=l+~Xj(YJ1Un%R8=nrub&WnlPZ`JdKWiSip=+JLyZjePPy9P8ED(+n7 zDrwUJhKT{1W0SPlD8Rv2LQM9u7nv8@KheTv9hG>Pa_XHY;AU^>3|V z-r#;~qXmnmrUXqY1u~*iw1iH(;4~Q$r=J32_ZCCndcC!O%QYPvAftI$h+9@Ck3BP( zu%d$2m|(A?eU>?5WM#>8aKl;>A0`h1CXK0j2pxKDW{`7p9AqFILIn{XBDVqEFrbvL z_D_zryq(QX*k1b$oq)%_Ok-h859TN zlllL1=W88j?VH40@Y zSu!W&0pYVw=e#cs+zH`_^YI=`@vZDmku}x1B zu6wuQGzvwW^RpVYNiN|&`RNFPu8;b;(eSMJG*nkoD^XHnr2Ay?=JGk5XH=v523%i& zsq<(qWe4+89X{4B;7l~%bWFW)mfV}nMZU%6rHF}coFE@>1?7xkJ)k!DEd?*WGp5fF zspINYvrO0)zMAEiL`LRFW?T;rg)9_qXKy$638(5atDi^1w4W)w!xAT;+4|@k_Yd0) zI$L@IwLiv3eQ*9;>CX$ueGO3*&vJFuk*eBa5@U}S$f%o+->BZqdWOw&IY;m7=cSyB zdn5ylFOL)O(-ZAyM?5H#F!R{eH^2{>7?D?)+=I!VQn8C$#v~ zGr~R`wn(eCONICZ$d1pitXpq7z8!hWOP^nBXB za#|0eFBbg79Am79(1>8$I3LOCOp$p_;B%o%ZTzt01m&qd4p~MMDDf=C{K6XV1V1wG zB-(?`uTRU*T=?k6m1|7Oxw`<}jaXAIV|0arN?*qoQCdX#Cyh7=^xa!M71C5asusXR zQV-4tDX|lJu06u6os?^Rx2?igl^E>$whQ~*^S5+8Hz6vl#W3%O&vF@YYV1i8p=_wH zFKOb?8F|-p9J{~taIwuZGn(pcC}kHj!B)@KW8b9tXSG6-1ox>|YyMham)pX+oS`Ilq16Jdl-YhFP@J3VZuDQP@Z22IOSvH+pmX5JRW z$!(zL4=qvw9D-*5Jwq(>S;tK^4~(}yiQT%(ueSm)#p8TTt2Pr2^!k(Y{Jk6zI7*p32etf-Z^th<(X@G(?V5YKgeQH5n!{z{bR-8(lj zsAfbmP}ahX%*9(4C&OD*^>5kHOyNu!teucGcDVSAj43_BXP^!>DU|)A0Ca6Ed8u^~ zBb2iqClsY(uI)QyMp?nKAes!#V2XLPP);9@yKlQ8e*P4G@W!XdKclneOZKG+3;Vp2 zr6)SZZWHT6T}>};zqt8BRw)HqkKrl<@J{uuKYo>y^=8&p({C~*YLxc@k+PGb>2f6p zoGX?hV7K`&6ap6wB#Twk_{M=Ak)oyS$Xb}{TBJAt^O?HN`r>yB!x;l<9J91&kx$^q zUd@cERej%l#PH0qTU0ybP5t=2xfdcTkYnWt2&FA^NgvV>$`xK=Y6M17ALQC!l^sJ69p;DkN?I6o7*7%deO@^CYT5><~5fJjzFZRx_ zAG8UFPb%9X!;UkEbE(Cl1&)bU|GJ}KI~qZ^VYdN2xxb&DH2&i}8tO>y*r<6pDe_Hc zb|dBFKNj(%g4Ep^oHGsn|*aVwy%z;n-tNegEPQVJd3RYySgFNS1%C|YBo zegI`08~d`s7|>uLAKtVSuU3}*VBtHxaTmCYo_GsXg}M+qDb1xT)5$SWD9TnF ziGojX>;N2b0ABy09-G+R+kC7u^6*oD)S3Kn0=c=42k#9VCZVNni<3{4x+ z4#;L6P}?%8zdG`{v#L9@R#!~0h1ntL=8C8=DQWhREf4`nM-Ftd25hS`E@?5*vDd7=#`Tf;L z!?ccS86rp?zfXhYD|AzuL&F2Yw8-or+GvA33A7}fkE;}GmsASIXFqL~J`H2_5q=1| z?wM)k?&>UfpEF5u1cW8}Vb%iVwo0U}2o_KOK(vMCiw-ZxuqdV2ZbvBcFF70Zdq3&ow|E>0|dI z>SIeiV;7*Z!9tBu@b|Jo2tR} zrpLaTwO-Ry!%o9JuQ6^s^mq48M-%p-O$^0*Nm>-@nSR^87pjz4(H3(E`q%)RsLD=@ zcS{rNApKoJNSa4n1d!O;IUc0$#NMqMGPvZ&dyXEXP^N8*Xukpl8V0!D%_$DBKHTp?>HKm2Uyc$_9NG+~)XKKAcw}wxvCL#d(9J zLI@k0@!d8Dvq6WT?o*yNRQnXrwBE?Vn{($=qh*Xb9!6W@PG+*9K^C4@QWjw#DO{c9 zq7WvX45ehkFksB52G!(`K-U^)`c%kvAFZ2r{4e&-`>n}s&HF%*CPFCEOX#8?P3cuo zK@b!aL6J@n1tC%dDWO;CNRbkiWHSL z8ba4|%RqCQ+O3tup2fx?qL^v(pm!MzS;db`!6m>3a9L}ngJ`V~W38@ktf_6Jvik#_2Qrz;gX zAD#lQEGq+(;iuq;O7Wxl_Kpbk45ftgAgE_^VvgPLbRvg(hw5oL20IHxND%Xnlk>Wb zQV;`bX8ZZom=lB{gWe-Nv{7F6`aMc0-L5Q5Ir#dBB_EzI*tz)9$OW^PWX>wFlD< zdv~m9;L3^WZ>N=H!FR?s)p9~H8osW(gsXB2u+I~Z!uB@vt&{WBUytor8|Zx~34C-d z|3!z+ccnRzR^JX^{f}+Uc^8)t^!SPiw~8LcwrWJGCM&c@-P3fL-Qp|K*<+abpvQNW zM}}(rZrw%qG-nMD$4A<6WH`ki)6Uw`=~S@kw{eO^mecP_22b!HJx8jr51M8~sRlE_-X?jayy>TP zKxS%!|bJ#fv2tFY(;VTJgx#Uy&?^H%XE9 z(K9c5!aGFuYjd!rMKTVg^TR1d7o~Vw^=B?z89b)v_A%!Liko$Sc}1>>n|HQ0ffmtm z%#dmBNVQ7#X*5OxN>f|d7~|W#EHk1esryq^^hJ-T-UAnun3ap&G6QABXVx=*u=>>Z z4lH)%8rnos88I3?t+9(mu1t2B23Qhn&_S#n=lc{zEcLXVmG;6uNQ5niG0%*ci3pJYfjgjq7f}oMR_5=vN1gJP_!)D5QU_$e-5eaR;nRtWq)| zx}J%ldjGVH=Vy@gMCfWi7^+;ST^dk#^SfX7abto#U8FLlL;6ZdP0xNr=mq;N4MoHD z5GCD|NZGb0NxWn8&T7SLo44NawbyYBAw!&o_(N2hTs`N}O<;N1LT(LRkF-3H2|=o# z5xD3`JETu{t)6R`imyr&BOU=EUM}?lqy5>Z`$y?&{Oik?Zpa_c8*=K4b^VByv%a0z zP1MfANDDdS+SFjh);(kJu8guP9OcEdbEws5^#qv^^%^%+4s}PcB{a!!sSICQ?r1MJ zI6ON!r-2Ye+?H}f4H;#!&RUtfBFa>|h*QM;4y3YE&YsA{8YNDABG0yyZpt2Rj5!pc z`SR#XeYc9?P3e}Mv>#||Q2c{1$0lNZtqo?qbBL44_Q10egKa}m;d3NZXesG5x+7;?~#dAw@Gf(}g@>6RqH%mTL4D(7N_;nEA zUqam960En33yclG2hknx(Uk~!M#6*~8L*n$iB&JZy&IMt{vmlG%!f=fZd)$q$X+f+ zM-zKEtQb1bGOxZc{0#!>v8qB}UWTE`3&bK&-^rt1~eW42(bwK*8-boG6T zu6};EHv8(Ai{e7Mc#Df-H91Bmw@va*kmXm2Tk0!DE2mbp;NI1j+50IaBQHm>75f7X zU76k)=?LapM8|3C*bz6KNBo68;eEifHWtDZfj-D>AX;VkFs(y}nlb#eizC-{XlBnW zyc%T^V!$SNTO2C*P`#4DJ^bXjJk7oEN0}otKi?17FL|`2!dPHdMHY{*or_Er2+h-T zW;0IVHO&-m6=`J~4s+L2-=y6&yimQkWFwYgj>&V;=R=95ECd@7w**t-WZsAQz%q3& zzzC_VL1r|4U~f65O~oU%V-EG4y-WfG=fd<@9iwx=9U(L7+CeKS7}uh(I4NrN^Su*H z>=a3DTGfwsLO{4lIA_(F-TS^*5ZkojmAYP-?uQ1?H*>`C-%#}T*Y_pO|b zaFQoQ%BF?2;z3Aof;5In9zC&t5w})7V&Q7(T9a00FQCSs1@KcU7fQ zlet+CBY`ltAyvTLorU}Lrn9}7NC{u=jHkRjiFmN=uH58AyL z%$uvw%x9|Qf>>%4maty}hT_Q=o);V^+gN<%Ueno$=`IFZc&c!ab?Nh* z`V$JqJGUqvzMbU1D*uKyc*CE9Bh=+_KL)_3a;qU4b#ZAwriqR&7{kxtiC-kv3G&IvsoX!#3cN@AINTarQ zD?mYWI$g9w2P5XIhB>Xkb?7*BD5^(P$W1!Jt{l?Wj#dgKc zEW@BVkrg#Z?MTf-mKDtvvlUe)oS=f>bn;flXv9HUlaRu(3Ww0pdztDfei7#$>zSC+ z(D}OX1(k#pADhwYkWYkKT)m+ZST1vdbPJU6DZ?Sd`M?3IbA7Wmr5idrzm<-~{A{X4 z$BHlT>9OnGNc%PjGk(IN)0Q;AQgl|Zz!GNvJiR|~-<{^1`alN@ry{xMv2lI~jm`>> zBg1a$PAHpM2dlG7`sIFte^To)n!as;HTiWX6dQ^54}rirUIS6ZB(!L>(T;R?T-oy1 z0Ed}Snf5dKu%i>D7G|!=PBBaUU6KrXA$#y{25O^$j3fvlYzc#}K?)SsmN7!Fi5aPK z1>G>9?~eVBLx$@rPOu5n{t$TYQ^59;L*t8{0oP^#14|vcX;Ynqo)^#==T?+qJbCNY z^ggpV+g?1ZP+`r}&cH`QmkW2x6^#gS9XhUlR9Y!_zD=#YYQ|q-Byw6+j;@?0n2p@> zt{YKk>qHeV(Ychuw&y)n>eRK$V?QTQ2fqYdG{j8QdK>=f-iDcQ9k2d`Id?#U8*Djp;ih5P-`SN$}&sp2v zq0e^hl_VK@m2dobb&tnOG$Q*zOsgQ1V^+W!g-;54SOnYg8rK<8DR)}om?4bd76~FE z4Zj+u@F9(;)hAAUILB$#3yF%c)8W&h-#2q{z`;;{Ww9@dXI9_y*?mRN%hP{})ODB# z`nb1pos%uDURfWpl_nABcEmic7Y@wtVV?Hx>Z>+&FysOKyxgAsoEgs*%W~s!>7h4R zLIYg&VL;ONs!yEhm8>?N9rSr0IqA9^xW?Xhq354so;u_Xjtj4-I*aVkf9Ly7>zLpN zttPbjRTF4zTpLlCeQnLG6?N_0LyX!S-HOVt&e~D*)}sPr6nghy+|=?q(fe_A_q*fc z(xm;vSnD{1`5a?2HIBboquKkzvQ9;z?c)2N!NjRp+wl)y>!>lZb9o1uyta90#-XEi zW}l4t(^l>eNw3_e%W#WPwba!z)9W z0e<$Mb)hLhtM;HogtuXyS0$%KQ|mrL}~ zoEpRVu4$coC(eTTdU%C#5>mZ_e^tUZz1%b8RKfh-KvT3w)f(0}b>`g|`cfrpM%TTJ z@6~eHi%v!urs-0gHy(K)K$pB!0gLv}Yh{36Oi4v=VJ$v%Rj)@}d%qCej8z+}e+yr~ zyunvsj8SjaUpWCfHuXSTBDu?Hq#jjs4y61c(xiTx@60by#jQLqB?^U-L$9r^HK;1_ zSfS&|_g}mQakwE|U38Q;^1P#k)K0WtJaWY(O(t8S=P{Jd@6|-F$%Q1PnkbjcFISBs z?K3%RG}IpE^hQ7X8GOSwz@^MMwO~Nr>4HGbmDn$1TybJwKZ(0<5ZLc2^+&ckvD-rl z14IGPnwzH;0bR_-HE;^e+uryJ8mqM9*B%I_z8buTH`zV)BRPiGj=5>13*`PRLm=?k z;qt99W)_vYEZxa0_{Z73(HpyAW2Xn=XNe1=Kne)C<3JV4n?fAQ>t@dIJrz&p0@@Dw zvyXtVkdJUa7rEAm;SuTloyB*UPhjTY54~Mk;~Ox)Z1rUEv`2bU*<(yHrLBC=I$V9) z4!lE*D1}W3O;QpAO(Nm?XI#bBFo(0cXi#=ZlDmVNEL`z(*jq4aGxzERUaC$vr3%Z! zJ0!!~VZWujqr;oM^eFs82{wNlBPRSzMa>S5{|2qrf$WYY) zBcUx#)KGQka+*VS+<8CE&4L`yuSo2v;k-8YiZe=SdQ<{zIsGzE+T2gh-KEurP}y`3 z@aQ&)ea&g@++q$=hBM8|Bko3xd6FOv5qmSaMH+;>vOl4lYeQ;WE`yVK>#J9lRQA%5{H<2Ajea^k~$Z<;PQqYBH9F2%aSJrUX)+Hhfk5d18HODH_mJEGZICx35*1veH;@|p5N z@xUP)f;{Y1MBy1tyKc#I3guM2C{smsH;5FzxGi4`JG#@kiov+_`p7OTotGV$Yj8qdvxHbrM zC=tEAKvYT%{@Hs-=|sn{ZazD?qg|#|zfNPO+3IAB9#f=X<)q{ss_BeqzKd$Zmq#~C zV#a6<2|$RWqt&T84|IimQ7TLd{JhZsCjM@!z*^c$eWW6NM(*mPIO&b>CDWXbFHVguCnaqxUcQnRzf42{^ktY`- zhaksgqcpHJwmiozcM(hvAAo+1+Gt9u^!blBFYxq{Tq!t{e(=S@_OUeE|fIbmj#55HU>RI zl)A*7D=jkZLiR@s-bH{&;Gmnq?_edRL&w;u#AOOfX1;bsrCt7a)Ohv*S&hF1sI`Qiw;WG>9xY9vP@rqi zi>94$dKQjvN(IS0M$x+VmLs4&&*ZV6^F1K+ko)p6zEoZ??#p?md}N8+TOfKlB5dq3 zTIqloR0Ox#I>j1t)Z@gXkQ;oL=B0FeBS^)h6iHCT_bTF5ZZh*Mp~%}>;e$gOUA7gT=Ytf^uhkeMM+p{ukybjlN*40TZJvEDN~%xBKr zGJg#s(6Ir_P;ru)ty^6yX!H{1srR$WO!3P-oNJub}B<8Npo|dD~!g^T+du zK29G+Tz!M6Amj+b_b=fev*VpQ_j1K7yORX@Yf7x!BC!sN&r_cnPKPzQ?E-N(!Sjyn z)h?idv#<%O3p|~7k29&{Nvt;KV5L}QHN?``rc}AppytW}z#3ir%ucWHhU$587KoC? zRcx6-Ms0x+bmSHV-t0zsY)*mx%+q~Whdl4!>1(0GsO=%FfCy##aw$q^)uNn!5{y-pPoPFaxWKKxk%*S@gz^6atJ%rBv zw}O83>1GM@I8&Q9M*QY~E6o8DZieEcj>|T9l;Sbyc}e*sWZ3Y!kg#Eo-(qwTGgU^8 zIO$D@x7}Q_;KNCU562_brUQXs>1C%>zXar*Xb>lcVKdR6dls#&K&2;~)B1Y*rsC$l zhq;W=u2z+VlC_sX-pAMwc2k}W*r^nRJ>y`S1p~5NdRJooVC7UEhS^>r`wwXx`fR`UhL#2p&LN9} zc?XJWp^ua=J6Sg-%C!3kw+)o*mV1?dy7K+e3oy0Mu#7w2%LZ%=2qi`J(^v>pCB^Mr zcMOZw>l%MyW7>^J>Ngq-l6Xh*vVeS_7tnm^=6`|XL4SEAVkjllM|aC-W0VV(zQ*%K ztx)M=X`HTXCyge$sfdML@T_`NqOW>)GBte)0ttJ9_NT0 zC%p3>yS@H<>c3Bh-#guwM(M&<;7P@%eiMFLU?M706t(%)%(#v zw!)VQNgUc8>PQ2xkbe^yf>|B6WX?0!ciDmc_L$l$eraDgTr>uuV! zSNif$*ii<_oV%ZZ%1ozw@Hh41!XXS62uJ=FAs#7aRAsbe%P+G)5B4veQHsi;rrJ$h z?wj5pdN{Xg?V9;rN$@EwBk4%1%v^YxY#oxK)C1#o(2M2_QyLE4t1;_|pvZSIu{xey zSqBsb$tmLF+*+K9MHi!`n#vMP;R*lq)?NH0MWo>p%aoZ{!LAEXmqOfpIGzuj*ZcTtd|2oDX!#q{>?i|d|ApH(Vkz}fjin{D32lB)~x>%w2(_iQAb{&45R zs@BTOLdRyt=}Xb12mP|#t2$|^FYjG^%%gCq&1Jpx@apvDO?Ybx-T)+*jHY9o_{@bb z_HD)bAIQ6B9b`We#wC9(5h^LiY`HbZSuDFM==Kv{Ww~)Ixn6y!M2Pwzuy6M1@{3`L z7^A1*V6gsDAa1{dHl8fNNeztTKl02hnm@NQp(89Ir!9)0SfS1*PG-^4TqQ41R1vv@fy3 zV`rUPq4JBsfLkE^dzlu`$To;&G4 z!%mws@|w0J*O#P(neFO`7KCOp>(X2-nD>qW`pTurH6-b_P?uO9foJ!{tQI}P9agNx zsr61%t5+;)xua&%sGc-i+romi*~8Xjid@}9ru27bfFh?8EPly;Uw}r1=BoWhcrlat z1?CCyDe4s~lH>_V{%H5iS~>9BdAd)7msvXkoo}-MX}%Dov%F&`Pszc*95}40Gd*Oi zSL!qA>h$L>`4dC->cb2T`uvx2jef!l@UB#0-^D_PFXP?1@2oc%NmLXMx->9Mp=EUD zSn0;yG}z=j7>UPfr)z7l+z=`T(fjiKx*=({F8aTf1S%76k@cVs=Ax6Na0~G3&-5bZHt$oK>NMr5cc|J>q`WyD z`cCBZpMDnQmgFWghU;Y3I=q&$K5&kLc5KssW0Xu0)4dEE?%kHMgy~A0iX3>P3Wy1X z3(iKc@C!_>qT%s53_ZVqcP$+T#3&TYujkk%GuY=c%g766&L{?lq`jp5w7f(6Cdk!* zGfdW)16o^b`UjZ!n6K9939J?XM&%^=Gn8dqLKGQv?Syet{5Uf%q^3iydKP0rR-@2LTf`mjN0+EEbBGp|Eji=?GuCG&PpFoemOyUWyjMP1=L-72Xx)I z4wwhnMZAS`(C*SJSA(uza({99vXT*=B-5#XjtfG&z4#K{pmuiW?0TtZMu!f%=JvBG z`0iOHnxz|GrY!J6jRhXVtP9h$#>C1*tke0zzwRSSG3EuHEER-QJlkXAx-1+nAHLJn z#S=@;_=18#Qta7Nhni&y)795xW@}bnzv;qq(Lt)Cg6|FBrLIVbMY%9mS4iL`ASwJ8 z*|OQc(yWW!N^OxLJYrHfzIvtlE9-It2~=5DbZRKDiE zq_287?ecJTr`R8Vi`2S+;P}8>hu@hkVl}k>S%pb%?=vdir*17d>tWDbAh+NN;M-n^zU;M?lXOZVk~Pv4IZxCy#NBk%3u4@5!F21;H&7k&XW z8nv0vYi|ksO5e@Yqb8yKQnu<(9au1n7wzE=_kYw|Hgr?H5E3y(rX1uyO4Jq*MOlv% z^T(CTkJHI4O;>G8@2E@^Pj?4eTRy1^&*dy7N%V81W)$Pm&yVBKQ5R#L?qsVvP-M^X z5vvW)Py!06%f)}$$p{7<> za=YtxlPOd$rk2x;Nn1F0`wO05$a_gQ)$4Kv)MYvAp)!OPMFB}14Cnf-2fY&WpCC{z_vBp^wTB}O9j7WeWuMqz9V#OdhIhymn2Rk#7IB}8 z$MAdpN@$s@SA>SXJgG1040KN^t7pL1FTH!c=NN6Q5xac7&b5!v-@3~B%-tF~}Uq7 zl0Q+y(QeeCVBF6{-dXBUrF@q%On1Y!sY_o!aYxfE|AHIZ@%5>&L-?h*KC zY)JT}%wHlciviV_d*DX-lG^DV^mS%bCNsUeV7O_Z-Xr`S$Xe`D^XgT81bU<0u(KYh z(A*ZawWDJSJ_l^%x6aE-xuMSrc)80G;$R~E9x#rxMS*_@wAP(E@=()nk}vXildwnw zL0^`L^)mXw`B-G;lV{0#iXyAqVkg{6N9mfSrjwf+nR=4Voivdq-f3qu)?xaj?L2Ib(z&Yll$p2^Fd zTz@sTX#qJ_;~bl{KaipDBk=@@KwqVE_zcTl*byns8>@FE4}Q}$VgzW@Q@twM#9?MuuWZLEe7Lr%mQh=epH z&V6|TNK*fXEmbcsIj7%_iM>!g61L_sVRYrf|2HMoygCu=V-Mg%KrG?BW#29VO7i&$^15vyYo9v&&!WVW&nMy45{0Vub&^0B) zP#IX#IZ_Rs1S$*mF(E9J6Tda)T$U21A9~TGHE>_Ez?je$(Al){*VH{kCrmuVlG#+Qz<=t;M+aLH(LG=|-H6lh zyt628Z@ol_oui?FDuVwz>vwiC-05tR%7ma2++_Qzj6%*3J>8p^Tca!w($^k@uuaVN z@)%y)GrLr&<#=i31d%uA3%FKp=SO+W&*KFg^_!%U5kfWO4!_1^d7GqJlUvmla!O zucOIo7qF}<5iZJ?l^bG$XR{v*YA6f6ch|Zc+=3YRW&EMM#*6tlIXK3tPc5;?6&b3{ zyd#HE#+*Wyet5bS<{fqDu^V{B^?}gUQuFl^^_nq)zie`GeL4oOwTvk`c)FUr6&^hI zF7fdAkjgk1T0_<-xYvbXf-X&;B0PQZ3W#5i3^E+kxpvoZKb0rUVLJn&1qJqT=*m?v zG5mow{3MXh=-{qhcaD>({d^Ab4Yv77r90joTD{YA;<>h{)j-`xX-PNcEBhw4#zAQ` zH)njmRwR0;B;#&sixC7s#1?FuUWZbLFXOt_wn*4}Q~|AlYIKPcLlap!t*+24`Hzl3 z05xINjs4AlOkMh;zjU$-suPgBR=~N)$-ztYM)E#UJr$`~CB|}8FVP?V^Mr8>Y$iv# z&)pmz!QP+xtQ8>{m|a{99c1Q&&4e!8$c&g%U^n;Iia08MQ^2c*8nMe{Y^E?l%iHT2 zv(TNckfJMk;i>ev2{HXjzxg$+obO2^MR$H{V*&q}F#4{sXPU`Nn4lT00U?(ORkdH3 zj%U;%Ol-~D!^Yh%w$Od%EAp#R;vfL-j>cG>OW?`C=eg9TVBNELA{9fx`=XELGu2+bAiBK&z^8{_qdXW8wEir;pCGv&Q=rKgsor4Yjx|(=*03v^ zSd1~ zxZ6LASZ{4;pP`KtcgA|Vztn)Xs>;wAS}`T;RX2)HC-X9Cnw99ZfTU&iD4F4L*gG@FTu>vmcA30#)lj^I7raDgDXTVGW;`RtGUj zH2IZ{x*3?^2P(rHijzw=)wQgG+UkV`5otjF{5Or@Px<)XfesyC8Wnzt^t?rO+!=8_ z`FVC67$sfp?oR(G!XZ4HpPA61BT~3bPNO#K(rnACfAaXDqim6S<+gZSmGg(1%LnU* z8x+vMX{nAfYUkh&(;Nkfj~|8@uMAyC0v+2Y-q%zBK}DYZPHwx$#_znQrFM_=q|9uw zB?c)+ecw84V5RH7rs&nuR3%&2zE{dJ`;J*&-Yb;ox^I#Mspw{;K|m@n+BcR7BENc9 zT)jd`EC|gIc|o&r8e21)K43ZTv#K`9KswB2uty0-Kk|2@a@Yca4*m9e))gWva~{Mk zv#ORdzI;tNh`MA^r71c-95Z}*_W)=M{n_<>mH3{{h?XH(-Q?)$diw!$GnEmKNaaj? z8}k$1+4|270zk2IV7t`2Z@dn|mSFVmuPgg6;DMqNF4^Wnw#YVHZzId|!76>CCjjjz zH6}Cf15l8hWMx{;P+-rf)UEtQpV$g~Zj<~RYVo0Yowj1oyFV-w)@Rk2UgYv;v7@Wc zK+UyI?Y}zJ>yG9iH)?C}hjypT8U`7t_s>`M(N)@gZDzo2?{|FdK{na~D#Wjv^|F05 zsrdWWkNpDYr7c^!lW8{H-MGW-=P9=6z4;4O1JU+BTLI5b$W>XK2XAi;)1>K64NK~( z3v5#svqNnfx4`fXhxu6@8w{s$ zK7V!&BpI5ypARA=3sHON0cID1*~w+I$uHq_C!r6keo_S3gbsvOg3)IX zai0CSRx1aZuYc?PU|tvylZAD(`wVTfm>vpY`m4MX(N}N&MGzRy2c8m3tGvp#=qjoh zxg=9*`(%5cFy2--V*}mOpb>aXjn|bH zZSVV)NbxTlLgHH8RAZp$tmTk?RG3biN8tI;Pb(4p@~U?Q1b(r|se8YRz?M^nOHRRj zTJCC#MMi2uV2m9)N=$h75Meqse?e3hDH*!BXTN)-U!v*q!=+&U$8?QfCFRq0SO# zii-i9!!6!u^C{Fl_hSuPRQK8YV;A z*~9JmSIIn@&+d1mS2?qc5%CJUQf9=hTj`^EC0eN5G>usDs99!*(VVbZi^7an&@P}0 z&bQDZMALZpO)roD-$Kw1Z9=u6Ug0DO={^zs(1r_SuIb(%>6o5O$#Ux2E8MUicwrBV z#H8S24?8G%jxy>bmF`gVy!P|Sz0h-q=Wn%^Q9F*-$`Sh!Mg(A?r>%MNW*g^-Md&Zb zygqr6EV#Yo9*fRT0Wu5gC2dva;t9)3nX7WQ~#U~qUlSV5-DZs-#H%6pp&p^3lMLdei&>rY$lV% zs+Q5BgEa~gIhz7brZ#rnUbkT$TEcK+cHI&i>`@^Vx|1QZsU_zAgGW36IdE1;lWo!>OS~e#; zrQiH%Y<0M4;4XhGvU-tip|MG2o!WL}Wp(VkWzw;UAwoz^IJ%e6IE77^Yu@{8HzV*u zJ~twSQ%U1Dyp5`ZY5)-A1hWzy>FCEcn7?^l#v$Q3^7;`Hm0spDS?$NlDf3KtfqrKN zXx9MLw%eV{GSb14D#9LrszW7bS99orbq8JjZMYv)4%QjR%Tr0Cogh(Ck2-RyXCpx7 z&65JmG@w&xO&LDT5ea&K#wj|`Zo{^&myj(xq+Oz#)heHvH5d4RgydFP^<%X2 zU%P4he26t;R-&JP*Z41Pi;-ssQstbVq6*Yhg*B55aub2751|V(hmlmSe{j)dsD=!P zHvrbmixkY%vF#hZ8QmH<%?OBL@UNPdK3Tk#_;#-pN+9c%W1I{fBxQ55_UU@pZcgIB zCxtu7IkN4F*BSiF&E~=ZCrSiBuUKX$z0rw;hv2<+Emmb4wJ6Ls9iN;C$Gn(LiLUe6^c^2 z3^@7>*)<}z;UCbttXw_`czQ)Bg|X@HxH<2o=-p~1^Oj59>{^RW!ed9jn^nP;NBo$wCAFLH9I15)Cok~Xj3=WdB?f#^S7t-u@g^|X%>&`pKhw?IL z-k=5I{?21;RtQBz4JVU|wvi4|_siuu)S=TtLc-H8icAla>#T0d0%lj@NYP8phJu$b z)d2>Iast;PmS0V3K6Wdi@S~{3@(W*|dp5}V1JGyW9s{aJ`5PnH)Uu!62hfv9X*{E} zq(sd%OI<%s9v0|Ct^>ZGpXgwUq(V*;?NH`p@-gL6*dZ6y4`xEhejiPYfqT zNDba9_mmKG^2HH5+1ZcKoIWLy%wM+&_u0uQrgt;p4$v0IW#i}V9X=)1GP3~N<#wzS z8EACxV%k0!&AnnMuTfK9%bC3U!Byr@~U@JO@v&`#EOhKX?h`~>= zDlkEcDO^e(O@A*=)3W16Gox$JXG&+E3}NRI>W4hHTom_DtMpMY(PxHglhVsLr%otKMC(%ZugOPbGar=UV=f8>h@UQP$GI@V;QU+2OsmdLcqj6b zxuY6NpG8fal$ebXqAq(reS$O#0FH4Jk_o6ohvsZwFA6d%?1;fWP-&aEM%>b@;lQ(C zxz`0191Yy**%q*Jgto!JktQ#6c&$6sxO4MI&h-{-v?wKdjfvby zcr5be4dAl~{kgaaQKM1yQ8}>ytVSuqKdYLUqicfXsLHJA&*UlE8_)q1;J=>SKO8>*-`X|6; zJZ(C|ic$$7;_Hi8*IfzeQf5hqT6KB?Eltpv4PNKnQq?R>_Mq1v*KZvErUS&P$rSE_ zT#M9bOBv=Ke zR zVob)V+oIVum(@rvghWOY)!Vk+t89cZjCJ{wHL3OfW_L0EH=8Q!^Ms9Y?Bk`z;8_ht z`Ksv+%lf--W?zP6M>ti%_B_q`&31b52 zxDcu;f7><~S3LPwW#r$;X6qs!g=YtiqZwg2>MwiV}5}hE@TWDWCFVr16qba<74v{)Dx-!eN(y3suKDL5Xl2g)YfQe zXUeRN=tIL89mVM+ZziT19Ds@Pf3UEV(!B=f;q_T;2R0oaw#o5ARLkH{ykxTr&Bd1k zikuQB9W8~;g!i2HcItZUM!|V;Qwj|AT*la0vZ8ly$$pmwoz^i&)tms=6^8a zvA{B^$xxu-lrBZ8(8ajNh$28Jr{G;X|2OW@=caW#it5diwnWaGYokE+QXOBj za(CGn1D1U_;4c#<+#w>@OnlJTz_E#>;GNAhaRwq5_HntC)S`S4enTF>E2Gj))umZz z>T8pI0Id9f9dw}d3REgi!B!h)*MUXiEgc`h-9Pd#Ym*1P_}NXBfURk#D5qrJy5I2I zR`F7=h1bWQCC0D_^69LDt2{0&Pa)9?_g=x%{5OBXMl^S&p@=^%0p!h^GRQ%(Pg$pcu4 zmPFSY!h2xhDk*6;x3w672Zr?&NMX|Z@v-aweZ2Zvn~&y416N&51}Mfm6(9zFoMDj^7;$X`cFJF9bIJ5a9DsoSKKJ>^z1y zt(;TOx4D((b4`JkWjFM$5FHzf>P)Er)(iz6{um@`D8$dxYhuNeP%I%%jWV0ssW{^T zcCuj3k0QW11}#f}6Ene$WX9D^(X|=f_>IT}=)l=%{`(9_(iWa=6|u(b9aT^U?BIzjX6+?$OY<`uuvy%aSv!%> zw{(qY{KwV*hGhb~O1YTYK*O)#_jZXMMbKx7RBrBr>zQN+7X{vS_=(}jipR;UK8v@{t0fA`(Z#~19|~`ZIT0Eim`$- z;GzncTW#QVXtXny;kjS2{Ao@e%84rk0nQpi&__KzLAK6HmC|kexa)$I;v(RFChyV1 zM8apVK)^QFm=GJw3G^{uCjoEy_d5PQiey03EF@wUw1Bp8TP&N{+*1+&_F2>~y+~*S zy{JOUW6m7lbe;zn2E}p`o|hZO+ zqbSJBsjo@tPvsiGUy7_jYiqEuY`c8A^)DZ#p3>NorcHq_TT!AfY^k;lg}Yskn4hcG z?UE7|%`YyWLn$v`)H%4C_XPgRPo&`iK$%@7y6O_Wk;T5>tV@>_YOcL;2k2r7zIgR6 z4s9<>n8p&UUtgz~u)a}^g8y<(c3>J9 zaBU^rBXQJjsVJnc?t>RvpdL@Ap!DL4iZgGXl=+CQ&Wz^{aTQmofg;4%+m7F`VfzNS z((=wdDZe?*Y306*?qbG9vCX$lPm6vY#b{_{s<*gR`w919+)VG)^1KR2hr{ zTiZrqJ-WH--OIR1l=7F;<6b=k=6uir6}%faa`WbK*uQ+ivkrdqfO^kGfs?BCUo|l3 z(*xUgAQi)zBYIr3j%E0k)iNkR59Tb z?z_P&HWUb7_HmuNUteZxPGQgfu)z-!R?r{L5nX2!9w1Dgo_V!6p!zRs^;G^10$h*| zfDn6>0(#wj85`^K6ug@c;WtJBg7gIx@hv~raPOS5=BW;WKx`EPW=1ml9!EB?Q!R6-Y5>s%X5Zgoyhap2AplJe{Iuco|M?Wb_}idn zwwk?+>LAk`m4Q-jbGHg8Tk8FDI23Ry446PvLUDKRf+u2=2F7E>8$d8)9NMEVXOTGR zsD}V7djnjkrh!kuT7c24An=0BPyA`3ZUFNUYp8aWcmqZ83;=*fQz;hNXR5KrDQS`| zzjhsbHQE34)jYI;kYy#nGY(V^n4LT-TYIG*@Gwh1nS+&~u*iT2oHQp`R1j0X0r>-i zqCD`AV-N0t9PuxaLuqEZyoXZ(4xrV2#8y^R^hfBN4zRSbobi7eXbRLol#*fj1HQfV zrAlttglO>_w+on}W`Xa(vq1jSvt%XfkW}44)_(Ss-TozuWixBXIEgkqZoc%BKKO26 zR_33-+tE4lRN(qCim8!_5f1UE#J{76Zozi2PCUXNe?Gm}1}H&lYl7gd9Q#ji<+c}9 zZ8I~~mHXiHLGI{OB;|ewv{^G`(8||WBU2*(pGVyZ!y?BWLsnUJh+gA`;8Q&Q)2DzY zQ&CE!^Uqu00J!pOK+FE0*ZMm>Wzo+9sq%l^q}r6-`a0}Cti}#V5{jB110wU_$BM3i zuL0uc3Q4fmsSkjT8i=LXD3QcJpO|29QN>;Zr}-b>|0=ke4T|{w?~(u8g#F(t|GRDb zzm5Gr?Dqei<^Ord{-62!>;7B--tzFr2s?y&lf-tX&>XTxzKy{ zAWP%|J6kF!`PlvAJ@d;E1bYr(c;y(lz+IDD?h^4h2jFzD$~A6;BVuC>jsDYTe4J4c zouRPb+d)|E2-j%@U7Wb8!X)*RCQr|}9n6c0nx6*wxBt3hI7LaI!t`r&KX`vJOXH>x z80Yf>ab0wb(4!NLpvmg8ol}+7_^tcEt(OO)dC`D+tgU&tJ@WhiN!AqKM;?TXky~gT z9m;eM_U^${Mo{R*9U1}+5v{XWkiD4=g|IMCK&k#<0OnCpQm12;6k!7!ZQ$i_ zM6(JDDY3*^^jMBLr(bRZ?vEhF$)Y$e9n;h5BjDSP+ff{8c`)Np2{?jLVA!)Be9|8$ zYQIn#Cx~y|P`Q6UmGi;K^f-uC+&}X7Q9_>dnTeC6^=2~ZcdQ8f*f)iXpeXp*E^{DJ zWjd$^{2eaiz{+gaMbsidD8=?WRbBgmA`>ws6;&A(jUa$= z02u^_h-1pJW08i$ZegTmmp;E|BSPS_1D)s&tcE6Aq=o&CNxS$RmuUJu8v8EsWVVlu zAPIC?r=RlXAvdfXlOGX4Fp;2C3s%EC@d4miMY?3&RwjKL_;7ERF99rNM)RcqeBx}3 z4$&b`)?-4;$>9$w%c(nWfQ;_};GK8+?r2!29LA=9w+)mv$ya~(=W`t0p=RF#?)g!R z5)-!r@P{_h4?reA=67|BU*&Y&n?YMAX;(c`1$YyPw|B(JrKk`-N}i>@Kz`iz=T{dR zC}BwMfal<$z<=#8R&Bg}-r38|D`0cnIe7XZ6HM7@NX|U+wqui~_55{em~U$GeW1v< z(Ev=olim_UW%u^|hQ&5BR->ToG0UTYKDW zZaU!iwf(`LOT9ZY7`!FD@UscHenx+WFVmn`h42d}`N^b))=?~TM~%WHXEvxd`hV=b zc{tT;8#YXe1|>tGOeIr9k$G4eRY;`)Daw>GWGXT&QlUc1kjPR(_O_Fu48=0fEYZ%G zc}SVZg|*i2yY7{qUAubT_dAa7ukU#NY9G&IP51ACn!_y{DhiV0%mdJ%y07VS z(dr^Jpj|rW)6*;(E{(8pVWLSi%7%l`VNawM!uelk#RMVF{kI|R+zP=%CtDs&>oJtd zYAmO6n|SPCelDTVb?Z3zZZFrvQJv|CpbeuPnE7uW1_1q6K^D)>9@2f}*P+^E@7`xh z--pTXQgLo}c8N7mF8?ai-nVz}Z2&BP^>NrmS(nf6FOQdSmvx+I7TSDF;5YA|B1#E| zWj@;k_es&SgAWqaw*msQ|99^Ss3&1>^H@58Dutk$V*r=`6Wzc2+W)H{{@)Z$Zz0C- zxc8*s_3$5nHU7Htiuhv;`sZ&!MJ}T@*ZV+Sb{qjlV@+nk(+hlp(CDoMN5pJl8UzCX zru+fzIP?Pjry?wV>)Ip9pjJHxoZD&yjYxiWWKm^Y7~AL>EM(9$)+zf^o1w)G0R`RE~;Pa*rS`26?O(=pS zKmZ_BA<@wa2!4ixN73WGBz?si<=%Uj>vpl+d>5xxRvNu)iGZ0qVhhOc zg1xv7t53flgS)uomKTDUwYR-G&Q;?v0stcy&W~zNP-wXjcX_f#(GLaZ5x)$OThLLQ zpAtLm6JWtRbnS*(Ar&-qflo1jXQQQQ$d2UeWiFi~ZrO^PC>K6jNC2cXmAxJMii=>F zlHfA+I!o!yHpioCD0esq9rAZtb0I-0glnk~p8m%4Dc%bPmXQ{P@Cf<#(GY^}HSvH@ zy#FyTBkO_f8-1u|CmBgQIyH~naBc_b&iQk7KJmA`CZjrTunX@mp1p?inE?QTj#>Q_ z@RPt~12_F%|L9wL#9YAc3Jx{_*w;abVO&oX*F3#5>wwE%wdQFSL66JE0{)DQGz^lq zlHnj2f3@;jyE`N?y4;vp^yS^v)rqT_WGCmU3ACxi@yQA@Hc7zvM0Fo=?V}B6b_g)D z3Gl(Qe4X{I&TCvoQAkP7sb8tBh1cMY#O*o`3?=F(rUPG&)NWOh=W0}mcLcg_op z>n)VK0|1!OB$NVavO`pcJ{Z4b=-tN^OsKapF+`Gx6g(vS4!0N!&|Jm(3GbN z{MEOR_U=XhRHY#3cgUKk-Uo-S@_n1F8mo=`l>Z5 zpJH9(&Ydlj-D_R9s|AEazl+O4b}2v^KC~s&+_TbTNb>sV(pYkM%fQ^3s~^|N%{0`j zRI_S+#*sUHQ~&Cvwh4FM*Orbv=ibKp(1+nVcgwc$PhE1&Ge~h`wVX2FNDNY(>GNzm z-8qy_3aVP^&~TQSze$vdrFyODdWJ@UKwRq<&2FzHL#;@RYsEypqSrWw>q*HS-z0$13u95o<)7X@l|^kv1}|8lH%DFquT>cZdeStI};6 zWXO{3s^0F)pD{~GiyG3ss#by2v+{-*4j7ETpttf zdXK6)^m31Jf)x}^flNzYTSJ%I?_ZI=)L=kxlLN{kYq!>S#JlBugU5dgtaql^TJ)be z7`@Q?-QP&uAt&l*4kkq1f(28Tjy#{_)s?By>CM!AZRX=rTM5OHeO!rAv_rGMIVcwF z7&O|LJp}1WA@tQ3fqx47>yKAXYnN2nq}QzfU}*K&Rlm*d`r$!1$UFi-G`c=Gi{_X9 zDjhhcFph_a21U1M@wI|u!@En7aHhkh8$-w8A)Yo@G>XR-#*nnKC9Zz>*H86Ob1?=H z({8cU{JDd7@gC@2YjbNhe^fp#RyL=nUCQ%Z{T0ij@?c6AJDs+*~1Ww-PX zE0-KgpBTVl%^Uw{ zC=#S?M=JO(AbnOqIr2QdyASI2yACV)w=ArhMhw!w6PU*!xUc{rEdQ2qtbst=30Kp` z27$1xP8A{%H^7iel6L8CH}R)rLgi++N#%`hB6KJ;vXu~jv0dZ!K~AG1PJ08`I29J` z|G#fS2)cvc&;&UW4#7+SD3+W8Z}oju*5EK6?A;7kL=kGxDZR_fDS9}%>Gcr)E77RExI3@1 zz-PhL{{3#_hwD4DOu$`=56;y&2&}8$jO1Kudve8pk?s6%FOJX39!12xfA&bum-AnV zbR>FHHDHRQrhJtf4RYPaOK{%CMl{Dwa9r5;%t<0wH*SYTW#|}6sW}fTZAyk+Qy>*!?SpK{B}p(u8W_O; zoH#f%5W2sw9z*w2geUc2MDL*DY~Ow&5`}8ZEwhBPhPdGWa-z@{ys`0^@5Z?`f*NWl zZ8*y67}s%9Zrctp>eQcl=HC3ql6J?EgIDY;A)s8~)EF}OZi;yZq0~C0SqzMwR zwn%>V-}XaKHwJZ+zu@5`e;-C-MWopIZ^z|O>U*}w?Es0y+G!65B?*h5Xms9F=IBQflu5Dyj$Bo}cslhBVzUwA;;f71e?4^Mlxf2dQRvCUb z11#g9nhPhEk~e=5NnoC~^_&%D;deg5mED%l7vtI;@UlWQ$~lm{r{4Z`vt<|TH~;Rm zlaCO4V4;Kq#y`!Ww13H>Zxv7 zHK~Fbm;H!#N z8pMnN3F`{gKO9gN|2Qz?x4%&$kc=BI=8U5dr$3x_KXK38t+kqdPGNabTbwxCz24^0 zdBD1F!k1P2aL!p8s^9UK5CZoWc(qt3-aK*AP-KMrencdLbwDhbQHi50*1=k+m;%`8 zdgNp!{;mr_wxjXV`?gNx-uqZSz5kpCi1%(HX=5~e*)EV5+?C^e0ZXN%nF>F>l%#|X z{v;h|N2Su2y8Yv5quoMT^liMC{)W>q4_0jH0_+?fgwkh?qB6T@0AcxEGWa=dE=-LS z%P?vPg-o|X%irV2=n2QKLV7$qCgqt5`PfX3P=HYwJ>cn!jRS}}>PMaJz$ItYA3ECp zAQg|&Xch6A%TJxM^OvmJYaM)ix4&>vFks-Im$*cutCsXe0>mtvWGRd*H294^T#C5BKg}*GwGuGn# zM&AM?Uorqf*xw}>@Z<$S#%sLrXn&^S%|1z^GaC*dsom!*PA1`lUHh|uHaSd(oTC$W z9crF-mL33&gRAke+#9S``3&z!fzH8d6XoI)oT$>~qP(~G^F_`@<1`kBT86E&9OUs} zJYS#k#PwvaVz2egD`1zVyafGNiRaS>UsfwTc(nhGgmDUMHP2MNM$ua7Axt5B8_c*| z77bs2{}L?QN@``R)}-Q>%Q35$lLz*fvNBwL+i(oW=jSX?cXrHE*%G>vzUEy&2MKfw z;MeXNI%2<4+v1sgvO5$^&nDmNQkWD|_OQ>EfpsqFl^fKLWbM7o_s}`F6+Na`9r` zBm1O;I}F2FDhQ_Az3+N33*RRv%6Y&{^3r(khd%jc*0-3taUcD>2asYi%S1}J*ok#N zxT0F$Ggp{Z(yYzYej)MOH1F*(iDIJS?7Actm(x8M2zEv`T^ckOaufu~(8F!PrlxC! ze8^h&9`KV`89%g;4!LeoNxLV7m!)Lm7=q*1Y$c6Tk+Z8ow&I_slO9;FWj7pR(HgY$xKYxf+C#nrshMo3J}<$ zrro<;m7(G=e?>KeN?aSKDX4ySI0;A)t7WT-YgcvLG<$>OP*5r5COtnd!Ed)x4SE2? z?%))v8V$@sQ-+fSPduP#J+qdAWL8Z|gMlQ?3X*#eS^Oe3p)0E54?_nvX+p_= z3IIvm%4=zZhQ0)sId*)xi`}!Rb%)G9q?@lwb7P!1Bb)lFFW+Wtyeo8XPYsk`ISa^?#oIa72bc>Kb;ePeY{eB{;U@Sq{KUT z=9Nu}R|4D?i>Y7c!6dfbzS@bIf6FhxPzX5v%tjP_(p3D2_-;zN$#T0qxz+E0CFDf> z>ciE+Q%own=xk15OuTc|%m;RR0N=agO-zvZXrgr0ha@Su!0vNFJdCsvv)2rJHJ=n! z(U0{AVmzbj`K(K3pl8>&!fIUYrsn|y{Ok4k=txar=dzCA(Guz@B*n|JwOe1!uxzzX z%NpNJ9x^LipR7JW6kN^WTQGdT_4kQ!Pq$!~uXB~Vmk`|9&M`jgG4uDJ+G}@+5&EOnN=S(<&qFcIZUOxtLNzBIV=FOmzn^VU`=LPq0S)EsuwNMZ=6$u7zyiH(HA zC{q?r93bK{u>6GXy4KM*$968RPOLsmn-4p@s_GB<*CvQlGFH(&_&1O?KU5Mu-GntY zsN4UhhvZGczwbg5xNrd8ZbAhPm%-drqL5>HH;mRE?x1Z$`uEhy(rWMYS{2C`lEI&# zf@Ukmped8zDpFoGqS9!8umC^l1ekaqpa{}@STsaugsnp}A* z4?sn$RlZE-x&TUautE3QO3+sBH{N^zs))51HlKoR2nTD}gn?s*Rj5mg)@On$j2&>M zcfISzp5BpOiK-kWNE6~bdi%csB6xPF9MSXR%%8;`J0By@k?;a%Awjbqz3&5c#=pL& zm|hGY-4s@MI8XT*x=|42LeFoyJ%v{8W{zytnZb|WF^Q(lB30&Vxb(A%>j3ZCV6`C< zdIHvB$PP;hRN{|fv@K+$3f_O#QIvp>IqwFPSdaQs|AX!u$9BK##zReZXP_8qht*H^ zc^N2vbk?V=iB^Ps6uh+PG6Ph4g3sH=gsYCOtFaC!vkKR!4y_G>6k-e_OL3Vso>!;S z9tFXk{KDb@&K?Y*4YM@V`A(O>Qk5GyTMJ`*)t{{fwNhh}xV zLcOYVuDm7k#j>#R;&`ngjSN`W;uZ;{K8}G@DKMXn37@#u6@h+D8-@z23+{&$g z-T)1P67!(MS&Ib8G;me8bPF6SZ)z|tp%8LbyB*$GmCP8Px#yE`D;r4H5zkSw@DZ%N ziOZqmCm=wvxRrJ1cFqy#WxCV4zjx9oyd;YEt=C_#KHS#kVE=+xhE#P+6GRY*sQV5N z^#DK3aTqd}mq7O1L`<`nwCxyD3P*GTZO~eX*pge&`7&Cy=PpvGl+I!ZPGwSHJ&$Oz z)Q&p4pUnCM&PX&Vbul^Xz+%LyB$CKrsJmX8Wr(13~R?m0r1;F7JVZ&O8twzRFJLN4n?O9F@6zD z&tTAAE41BG;c}BLuwDnl-FJnexdl7!JYYSdIdnO$7qyWkh zrd50r^TqjG7Hbe3JRIfktT(NYe)A!__j@hJ9ZkDVR|M8tZ+t#l@peGX+*;`TsG-Zl zCfvxb-A@nSepk^ykZvukM6^DA;ZhUclKnECKv!v0;PTi4aD%r>oDVz<*%h^KBh)gI zB^|yBpJ6iurLSjRy@9KbPcF6vWZ2(BD6qy>yWYP`+T1B7d;wx)(9>J5)b*emxC}Ha z$??!kHK0q!+3eQq&}-eta&pat_^4tWZ?u%IPwctumEqo+ruuHerwoE4Sr0!`D_ruV z@Cy%*sq*qIY+qXBlr*V++gm^=V0J~knXvO-`Nr2bd&N$NGIM6*t9O*`o!k9dVp>UC zEY&mI#B{awjWyFdeYfSR&(J}i&2Uk*SG!fnN`%j>`}`L`#JPTC(t0~Cy*K%R1MGcL z`g_#1E!~fH<5n^K;qQ>veHFDk94Ou}4`Tqkhtd@N@ysg>M*QO4?~OD!MO}+Fcr=WymYbM7+rn8&`4KleXH4ogBy-Ygzhug}Fq1=&qG58}`B!8(+o@Eehd= zV9Vp=;})7`AQZZ5%fYm~EqK`=X((6nMb_r^;fzlMKim4nr@(jvsoSNK<;Q{x?e#nh zyoGigO-JG{p39V(Od>!2Qg@$a3J8$aYtL077^NS|t`a=wArTtq0XG$x`SL02o@WVL zHY$f$^?TQI5KmM*L$Sa!H~h^(iaz)Kq(fIk19_%}({9FdmbYsO9Fv()TBdyc!Y+zT z9=Y3LZJ6N+DYF9IKtqk|hX`21ayrfQa!fIO#o9w}1=xMJSSgF#;D|huTya;^ifYAt zzPT3e$qfnaUlM74E^v0rRDrwd{4vGJ4bY>-`*>-$U`Xw;T?e##G$mY49+OfaA$YFpXPI#~4F^-Uzpfd}y|H#=hH zulFVTZ=|cbP*GF1O8|cfnhCp==dFoP*z3yqgz5ulJZ%*)U(FEzgBW3BE;QljD3pc@-tI<5Rb zH;At`wlaqIpOc6&grf1i+;*K?8dYoF9o~L<46$sxma3R$95o+IC$a98Ybxi0S5Rxmc z%v3$motg0B;#cXMv)(Sph>zM_x`QRSwVe;fuhl9K?A>+q#`!-MQ@$?k|$Il^s`3g|KWtKS@!y zYs*q{4ASW?4K}w~!o=W@FV-`=b+H-3)cc5`4VXka_QeFd7TO_YeT!A>3twuCEho%` zFzO+=Ml56tm9Y0#=bf*M@G%N^)@I5pcWhbG-LmvcXF6qri~7@OCElYk?ZKLQ4KWpI zR@sW?YQ7uuJzrk|49gYo+g{vQeJD1!llkod_p}AxjMy{hc_nA2!Pz5Fu9oLO!s;h~ zLE;oKrQWQ_yfe#M2AT*3Jv35PzEB^G6}?s#pxi=2$PD!hfO z{y3aef-}@MmwdOWC&AQQ^WD)+V~LZ0U)=rznuzu)2H?{)*@w(&4*~+B&r_|UKuxjr}Sl&!6~pKZdxw0h9(bM;PN zq?{0)mV-mnQfGk+0w8%FW>i*P-F~@JUH>_jv?}S;B(wA#F3g*fs3F>Q(*_@2*=7H^ zn@f9Atx)6iKw9XUY1xz~FZxwO`1M#1-%_{LtPCBHfB(fs*wfzf_IOUabo?Gmscynu zul6#pdb?+}OBeFTyH)SW2Oo*!@A6v4`eOTb%{K*CTyY%^V7%Y;;?2nIg))u0ys?Eb zepf+TQ~Q~}fF1ir6&!N`%3-j$ZiP^KKyqw|uvV#jyrEUt-D7DF=Qog{df0+oOZs@r zA8paT-{-nk%3nO(Uh}TdXG1T)vh1$Sa&cL^RF+tQ9@pWqDl?FJW?WLH(O-#NSk0z4gm{k&`1vKa zEVk@bt9Lxqxz2VeY4){T{ox!Ka1(F+zEV| zQ`csEM0l>fQQIqqfcihhX;DQ&vSq?GqF+{J?0a9<7I$l5O=$c!y9gLUB+_!yQvO-r zEJvH7Uu_dYb@xO?2eFq$7Oc0#HQ>56maCPruD9GTrycw{smhzo4uA zl~zhka&AT&C&r;|zHqjU`?^7_12Jta%RRMx4kJF*@W}2RuM6y}24tT<7}@cT6~^_( zAGk6f$a?m&PMX8Ag?-UQdH3$#J1^8;m1i-kyNj>5hfmIqqee<=CVrf+XR>Mi4%V{e zU8Du_-7T~^oMOTLwUZ0-F_S}zsa(WWtzA45_SboCH$SwA>L}8Eb;{sr~E;P6_^-`+0YBcG9_*eSq0e8=hQ!|BHb zRveLfQ&tniK8I>bV=uOMo^;F7b=5;={elONwXO2mb@eO}x=Tx%y*!u|d&HisoU5+) ztX^ZTAWz7Jdbcdnqx#wY=MOHp09C6s$9BLv+<5o3275Di4}pbJ;t+TG&a`72oAflC z;QtR!$%bO6TY&_!awX0XY9gUb;ehCcD>~V{@(Yz-X+$KirEGLy^LLpEG`uaf>o5T5YYquL&aYpU9S73GG9I>D6<_mdDeEp_0pKs*nbO6wgad*e@s!U_K!$7K8e#uDWHSF&iuJ~r`e0(J@!Ae60Iq_GjQ68Q zi-lM`_s{eJoTO`Pd9PrFCG++J`3`0Z%gXL!POM~OyWKUZR%(;FMY~@(}{({jW*~|BTzPs4$;QOjXcO#}Y@~^g19` zR8sIdAVC`18dEf?gGq$l7LO zF+Mp{T$W}1BWy^~kXo%|>K?c~KR+*i;8Xf)V1K>rU)OjAf@ZLm$JE4tBb+MyMUauy zxuki%db#Nl3(&cZyQU7UEsLOCNDq=uXW$t+P)4Bks-^%;)&*`uSJXZXaT2+ksjQEr z(yL|1dEUYf7G8O z!TXuZa``h}#=ys=`(dQ<4yA&e`4wqjw1W7Wr<7i{)gs@3Sw^0RoiU8&G$&RAd%}z= zltJsO&vud>*qG*Tc%+Dg8*CO}vgFsaFUFOzB@s+<>@yuu*C*lys^+%GdG~o3sQC9B z#==MM_UdsE7B+1!@-AyqoQaB$tiSS*F@J~o+W5b{k~2^XlK=6?K*fiXo1GhUi{N53 z+NyKf_QVHpY4~XodgF)BWk)RK?T$VzwW%n#HjT82SdpxiFD#;rm7D4b(L#F7pOADY z1Q_n)U@ef=%jr+o+TC_2R?{A>!!7AmuYY8l7Fu&i@-MDhz`7q&3EP|nHZHh8QvtZo z-2s9^a#MkWMdapQS79lO;x7%4XppGc_q<7GT^l($C6T^R=%@lFQ+~p&gr4fFy)NZs z!vGAm>DYh_NRAIb^FW8zY#Fu9W7NIl4wHa~Owb_GRAqT^l=(+8u-1)TRS}RXE8bzw zkM}ywEM`Cxe?#K3BVQ`TEB_PhUkbkzk$f7qyY3-JDN}BS<TxuQ#nD6NFbUxPI4@KN~cr=v+UEUu(dfZ9)%rkl3Uh}|#01PAM zsBBIv%k&traVtvJgp+Z_j#-o zyG>d}-c7FSLj~)lYL1m3W85cnVy}-Z*WRNi*r#b;9dd5|+V{C9PFgs~krve0#s1hj z*32ut9c5&R|IrBu8=$WT5 z8`ttAX;96|&r*R&`8=F-$&t(R#g2Prj~B{4Ed(ew z4?Lu`QpGL=hZh8Tj3#U4iKc2aPm9OC+t@ec z-=;SrGaDrl;`m0#B6PS}qt-*Jfyn}sW4Y7kVDYBEyK*>W_OBb*w%1Kh-R@?SZcx-l z-I4=nk&U>8AU9*)=M~5IHd_N6b0>;8kX@xv6UjXn(;Nd}N^>idywgCf?T2kvT;{oQ zCyvbQ(K6wS>|&=ee#&{`hrN}kekbH6_hD3lb03+-s1WaY18;f+{t4el4u0EsAekgP zU-)80!JKQq*Qlr7eb2bJ%!h#e1ZDcw#zx z#F+Wa#I*7woEA14V-YeOY5Q=YTqUjJ|2g)~{<_$sf40QL z*^}gys&Ifk1j}bc9z>&y6F0dg`vE5(<*unl}My+W*{$Ib6 zWIuz`@|z#Og`J#n$~~DN+9l}yB5G$Bz9qxD586tkK>;(A6>h9%UFWl;OYp)9Y?__s zvy1)@?@o%G%L=sRpRK@}lZ>F9voseueAMiVW!^+#+SWyc@4H=`{!bxZ{RW;P$FBYc z2AaMnk%HrhL1>f(O2Vh(?kY@Eo179n#>RRG{S!Q9!nXKDu-lR^#3u(x_6eiBr20`> z`<;IlkAAF{W7BJ452r%F9IG{h^zblF$hx{ z_mEj)zuXd_ot_I;$kdG%lpKRhy{hlogTq@<=MV>R1vkwne9T0!OOPj&{!bTC06iE* zi9!t0=3{xYxufz&`wUM6?!*OGTvT{ zAuh36j_G%6kJhrfnF!2ODBx5nQpQ=Ad*i4zk#dOvia1IaTh(d%T=|K2o>6oXyJu z=050rMjKLa?gBphxjpkrlubFD;f#&=&BLKD4ju@WFf^~aX5%p5yABBEZTiq=`6dlo zdLy98=EYpguI0Zz1n{MULGY0@1b=SE>opBoJV z%RVT5Q=L5ymK#D9c@uBi_I*sqImk`xsCw%*SqV;RMyRlIgw~_*o2$5kJS;unv;(ex zDh!)9!7k0cAuha`2+;F*>hW2h@Q3AGuNY3bzwAvO#Sa@3d?ZYp#53l*LhN9tvD3c5 zBGkD&(4Y)Fr}0to?QR2MpfE~Al2{9<$Ha;Af2T0V#6UDKLXx<2vxqx>9gyRn*jC2p zqyzTLmr5zd5fN&QbC|eQIOAQvA3}k35q|U?71b0~pz%Bn9%m06;i1Sg4gdwc^KZ6% z?+JG&)C7-mD8q~k@5;3pdG7r17D&N@2Njo)^b8t@fRz|mEJO{Ncfb+56{kI@= zqWC0|tzmNv%U+nzCV9T#J?;rG;C_vj`366(A3M#-83X>eUI!P#|0mx^BJ}!&6R1O0 zeIW3YLaeGX_>i|d_;iTCn!I`g){&JsS`RK9`u^S-&oYe0t;W#y$_Dzr5`;Z=gXA=j z3WO1{1tK?1QuLpYX+?@TGXtH2{hw&MiXSs5oh&$U5RrOLmb#C$W!G#R0YT7nUM>jr z;fE6rSM9UIdhnFs8X2z!D#KLcEexX&FegJOq|vl*3+=K9XyxeXgC2*MV6*#oL6P?FEt6^bi7AXHn8Dr!*T{!w@N?yxblUMIwNez3k=tnHxeQ@kaA;%Gz zEmwvC#cl!u(eyM}$8dYkFQ@y&aB~NGhB=cJ`mrcE#xr*~7c zIn1jVG<=^ z`cP#05+o#%wQqmxGw_j%=3@lySuTBMf(uQmPw@#06{C%;IZGH|E%&0!Q`CZNZ?Pe^ z8b^hW)tv=iK+4)NGrR_n4jo+ug5ZrYw)dYA@F4d}&z?-02nqIhh5)pL1x5xk26+ie z267Ja(@ra=;p}r_JSHj}!B`>`m7;xCxCKMQm!<{f+e#r%xHtvba~Pi5i1%#Vi5s4P zlI*GSos|r+SH2}Hhi+hJv-3y6=b=u@w-hbOJCs$y+(4Rj^(Vrh7aDOX>pn9Sa+-W!gDg90*AfQrM~kbW(j^$XIe>yuiP&sEt2d51s3$DAj6rB|UpyXT zJHp;2$PkPB?s>K!{|JB^eZiEW4Ydk%5+6NmHYdhF=x%|WkAeE1rDmsb5|B1I4T}FT z7&@Ph+(j&4V77F}Li=nbQudr1H-Y7byp>@}Z1K>D?jxi2&nm#GT8wQb5M+m%D5^kW z+~zTaw&p5sX};{fdPo|6`oKipsFNVS_CweH1lTZ!A~TJENl>GlZU*npM|i!Z@T}m6 zG1L+MIZk@sCRUGKD#6g~6l#wS38vw|fa01VG_6)98>Wkz=RjWe)2m2PNjifF;3Zx< zL`ZIebkqP+;?xx@rVDXLRDW1E2ruXigq=E@twYeDp2x~>bbxXQ z0?Sg^?hNzab_LWKk+ou7crX_h2mX0fH5^3z*&c)1CR;nmrHbv-*`OREpJ`m`3d!rw zUmn~s!%^@>PNg+zutvGL8G;+XIH6NdKQ_5{Aw_?Gn9RcPNpEqpLvl=nZiYVS4852@ z;WbAAl{skkS8um*k-oEc@?z&Y#|soi+*@!Zi3&5y<Wsr_$)|cX|^q0v973^&g&6cFpHMQ_j{Z_1sOn+*OEnBJ$EPbSPO@g&cM^ zJvsaD^8%m6*>lR!BFquqI`5J+>V8N>n*BaFF`o+%$1^od|S|cF+^j&3!+7&8^)K;QAK8V&Pkr;h!y_CUrN0}a| zX@6QPRK~#g;0o2CenC>VKi<3Ghxh~OwTDOhTem(0<6WrmlsWs>wf8JNzW)$#U;$Y| z>IfI`;PDXw7h4*=Op*KfBlR~^h#)2GgPw~E(le^C+tQ#zJOcDxsc)fsL^zY@r!Wzf z(M6p7L_?()eTy#h=Ay(Z@XyiP>UITm1WBo5!rQyC_sR6;y8?1uzPhY{*JDfJ&hu7vc+#+2L{Bcv*g z3PZ{0qb9;2eg^te(m(?i290A`$o@z;^Q`Pou?6y$O9j`L>BbTvk*WgCpWzkA?E3>Vck#(7x;<3bA-K z_-%bia;ek~sL7A0APeBelh)lIRD)L z`{x8vZ0qLlFY*7q#Xkwn|JLGvYXR8l{|9GeL9-A8EUJ}41=wQ4=lh+6F%0bB!{#Oj zg55SELEpqgn-fXC3%j>xjf7KwHSeUtdSu&XAoWT*puhyA-c`_Vef%s)$amPA4VKzFJJZ8oBV`gCjo^E~ z&*?Qy?F&Esg70dZLmzy3Sb%UlsZ(cMPRRYGAM*ua3DsZ!ST-yoQqD?&MK&u-Mst~Q z8#h!|+_QiA-C0;t=OS2M;tBP7#jfvjXvk;Q0T1#|h6vT&zV8c#pGq{yY>q>{{7)MG zzqk0`T70F3e%u#Op2--z>}1*q$l1Sg5XcM-(=Ef~YL()UyQjr?cZsmz83h0?u6&;b z*nR54fCZ3-c?(|6(DGF|HQ4YK(2op&ZTMq`3I!-w7+iBIM(#=m$Q^6~aN`W*DO%P0 z3IFf%I*N;X7Sh9005Z27Lyll+5E>#7mTH(Z{^Az}GZbhcYcXj0357Yjv2?%{;O?y` z0=a=lnwV7mPq`0pQ-8Tl_RC8;Ar1vqgs3T{4>h_ggYQ>IDr!@=c=vRlu!+3JPbuPH zA%4rJfpQGAT7MzgRSh8yRRRv3s~CU&q*WM5sdvwn$aoz^4N-JJ1avZg0vM1xrui}9Kt^hsdZ0QA{UNCuh+QVBGXKAObf2<0I?{YTj`=ao>r%r9O+*kQK6 z8SoMmtxYUzqqB8YmtLH^^Zs1#0YQoYE;Ni}u2eB^#|sgw zD!Ja^H0YZcbPWtU(I#~Tk{!i3C*@uA4cwai)JkiC5H(2~bhy`N1`GKGP@gd~b zyMg~y6~N|wX$Zhx*a4_m4!mACSdCtnPb4?&qmz_VV+2M06%)!9SAL8YQjZlVf-n!h z<{bv0U54}JRAQ6ow^y{9=MccB)+4qLb(528;EACP2()G?)qyt0pJLVkn)}3G}q7CVZ+C zf0tkm+^+y8!={q6tmbi2A(7#3Raxm3!Yw^7fW6Pl|r1e zFIrYuEmUepejZ4~QLVEP7KE6j?vguN8mg&_QSzV90(b#6ET(}zGYka_G}4nEWU{+& zOFqiR#8he*1ICXZLBJ8)K=RpFxJt&RT@5+oT7YxgwvM^ltCi67S~Y=i@XW~Ni#zs* zZ~s>@6;aqQGIATef<%pya?4R8Y6J|1OhDck7PZmJ+VZOb&-uFO!jwIVbn+C!VlL|c zgb)}U3KY#B0W{#*T$fP0Ds zw5dpftAiUomO<)g>;*Gl!okSrk8GZ?*q?uzE}2wvjR5SABQQAOFmm%PdYlNAxKM~e zYw0Q2qcI5gk6$^n_+XeHq~Ftnc+jt6h6wv+Fa)f`QHpS(C~1tmwNtPvvI6z;=Qj#5 z-2(D~t`l&I0xQo{L^D}{XhR(N$~ME~no30XyZ|d8I=&73bWq#1Z#MvsP9cV#4{gRC zdrc`Zp_DwVDuW?9j)3~hyqikMzx<6G2meqL`ZWY0H5}@RH^^V5W+yH{pOac@xVU7U zjy0)hGE!d(?Q=>gE1l^_Sc;b2YMo{DBMiy}C??*&jr2mvGGqbmd?(VS7GpC{TePxM z^b`45+HJ<0SX=g7`R)k2qPY#9^qNpZ+ConHDKWe5cFSNy@5%g2n7Yt zsr`1#bk=sd_FC3FI)U!M%)|v{z~G|zx0-(bCZj@#(h#gyAE5su z?oj~%*Psl|w88>U-(raEIz#KXrzIEz4acO1TdA|=+gcZM>h093LFrJHhn>!1I-orO zrZ(aPO0QTIf~*nw5E8sZKk&z!2LdG;-`2;1BkzLZr?yB*{>abc72v=n|^P{*xkk2cSAP3`M7Cu;}}H8}e2{bW|C|xG|#m z*yyHD5cI$5l|Xi|4SIn4vLXPe^z0P2Sv=L8BC6~r3oVV6RvMF$6VUaZCj~ZQe@nem zZ@)4(WQ98o8Wa04$Co#TNd-EV5zWOw32j=d zAp#7I>)fw#D8iHa#Y6`FJ7!Ez44vl3P&%Tt-t;M5fH25`e)J;Hu>B~Vv3Cym?twfM zr_1MZ=sO5qOz=n@LGB&~k4AcuXA#T%_g^{rwDS!TL^7-JS!QQ4uF@!TeGq!2k^gMD z7V~1N|L+%>!J(=NDnfWCVpw2fD^@z{&rMluD0G<~;% zXbD*_Av}3!6`WD!ep><@6G!0n=rkf_DiLQ}%K$kqiaZTcCOb;hSE>x9E)kAii+|uFRz488xI01?CXdyYaZ4L3Iabx{Fzpoo z8WHpNf&fUE(jY<)n@NS(!oeW|D3-E;aI8XlG=%w2M1I5kf7nGpEm>)GhiC~%AlE5n z5Mfk-3exZ}++03axBqGLlV>U*ua5O_*7!_=>4`F;FD!!V(*bTb3#|Uu?oReq_o`Tloz$Y5ip)Yl!6#k+> zc$B2?EXaPs=W%AgS^%gCFjEpJ6*GfJI)GKLVuJ~rmMq%`9iIhQ=SU-JI~!QNDu^If`cwv;wGdl>IKlPC zZC4?Q?t}VK0)%>Y&A{eIDTdP7DHux$qQ_+T6Gh*p+P^w$u(}92EG`yBq>X%_I%DIaeww<5}y+K#Qpoo3r0S`$U!rm3RwU^5``Gukz zkH3+TXR+M>ac_cOv17VTQr2P$i4hXzsza$(dkA}rLfmoNGp*$4VSEiVFE?Y?i zN=h!`;ND%w0hR%9=OT?hxhAR{HH;}Xu3G@<-^acAV3iy10bc4-U;$4qKeg%GfwU;X z?*HefCGpYNfV)pCS${ed?AykMsn;QM%x*q~ykeq~_H)u8H5{-s6>7NKkJW*3EmtouF<@&lH#VVxO#5ueY2d~qWT?w3z4lO`X z_r;f>++()uSCFe{LaL35qVPTtU~y(K$|3>RB4a>MArpi@dVa zO3-SpkkwMU2rlvQ6(hMbb&zYc8%GTxjuADtxT81T%xh#t>VPb1@UX32uLPxZRFXH+6{8F!9QB;lP|g2{ zg-5aX+c|>NLn}KPl9avx;ElEJl0xK^mnmws-i?`^K#(LND;~vNMDlr*x5KHBr&zVb z=rlfX#a+wAPsIs_K`_W{#vde;oHZg}B!-z1vKO3=BB!)BC}6uUoF_KhALJtCYbGpF z>3?YUh=_XiYD&BYY9F_@ndE8st^!*i%}JMk)&sD_{$kXISq1NXihh5+tA88W4ruSA zJ7$4FQ)t4Flgdb}D$lnZNA^S!e$DnuuTrELMzy~sgU}{beF{=Y*Sw_y4`a+pm=A5T)|Fj92uYw>gh7HJYpV95~Op!Yzm*W1^E~ww~qTcj_ zxM8_vddv(QJmHozj)VpUcl$D+06lKhDql?z*e@mPuOI*-Z5hw z3D74{P0Oof-La~Vq@#6TIKt`pM18Gt%s>ywzwFx0*KFlJt?OM;qF3e!h`J*8zM5gt zW9|C=R10RumQ}BUM8>ZWJZG$##r8f;;-^hc-t$S=OB-VCdrlp?YL0)xPpRmTo4zo5 zX|wMhr_VYbA43fU{daxJ-}UmA^YFi#^x7Kyq{DMSUH5~C!$fX-M=xstsD_Bj z-C0+?xA-#f=94q=3z?4Zk7~(lNd$|uZYL_XbT&)+ZZVvQu?11xg%@S--QRnCko?k^ zmsr)9*_u2{HL-gz@N!nyI_Pb!tXl!=~-iW2qCaYW~2873_C|9>Z&4C8#0JYr*=%UHA;2_z~YE2POh46TV9Ud=$I%*Sj#DG6YA<%k^+_#P4UFk0&DAi4U8!*;QRs%g%e zg^D_t%Da)}eg=;v6`$t=s35abN?Q>3IJxy#-Hl?kZH5*{3gkdxv~`l!%>fUWY7pV{ zW7`3fQ0j3Z`ij&|a?O6>-Z5{slunEo783^=*^sPnO!kjf0c7Gf)|CSnU;Rlg( zH?ZrO67rVekaM%ZIxx2Hw(Eo`Zdv%S*hP9#lj2()cOo6tJy# z^e{DTiH9WpH!vc+{rL1fAsk?C^J7g75hS>?WG!*Ih0SrB-D-o~-_~ z$08JxYC~Jz6cLmFgQESug$C=S<|0Piev%o<;H7yFdIfs*)^7J*M&8_KPkId_))u;4 z1cAqvtdATcD8)iMf@Bl9xA_yuIdVL`iMQ3_i?z~v5-irgbW`An%M4Mar?Na@;4Uhz zbvP2Soqmkvq?(y`0$0G8Rt^I&OfX2_uKQG1@cQd|z*U_`we%{R{$a8VPMcT7+mX=-Z zPgUp04#}@)$_<05xq>^&!8f$l_|lsHQVi9Y@==vL7D~t+(D}%Hg+oQDUPl4UFX0=msBD;WSlX&feAPsJ*U{ z$O@u=Xb&32WMDXv!6nhT@RQ-gac4<(i_52}!v5CH-IDxM`2yQO<0qpSZEHjr-2@wA zEN>-bM?Acegrn_bh2}b;;SuZ6f8h=0a{^rrnD+v^6bq~%3g1a1c6DKA&9E?O9T*lYe*&n z(T9WR$CV%TaiFoMBL^rtGZ5YpyCZ=+1L;3v)X^fOD7cO{LI|A~4?+Rr6FbgvZL=*+ zT}CnKPuH#Snq;jIA#9K5T1+n01edf=G_NMqf_{^?yxe>y`Su!SrAJN$d)FTQ+sGC_ zv^8nU+Ef9;iO0bh7vP$)0Blw?bgX*h-S#Y_Mrv8WY48|r!@h!Wj#ynCdy{+^b(*@w zxFeZ)SaUq#MfzMd#X8iFxrn!5g~ z*hN4L+lbrAlN)bT3hGevl7Y_!;MIb8!6$z3aI7iL z^)c??V-b!1 zTgcirZn8$U!;PewPbY7$V;+m;hyC6@mBQ{Sr<#u;FOhbT>SGrq)d#4{kqZVCP~4{U z1NB-3xJUGny=$T|#p_ez2Bqi!qMTnp*pOJtYwQ%=a`8u*-&m@FBC(RgIM+i2Bcv)o z)Nznth^o4oSZSq&8APvkWPuTC8>9Y8b81~S{^6eU{swB~;yhs?O*<7hr8>#T{eg;j zvPZc~B7#nzUGh5Ve&56JH{<5Ua{8j5)yTO*YI$=i6vU3)*OmP3#{;RYNSo^;D^N>b zAEhw8b+6HY*SC3hm=o-5H^?>vD&YFM?#atb>v%qCWm4D0V8?spX1H0<`QpFqe=2Do z>j8nI4*dRvu_ONB>bE7W?{qlOK3bkKb_uHY!_Cy_2z{Ii-juBmF~j{}0c*f3aXH^S zM?4>t`Q}xKYi7ylEoU{rsD=mGP&)ufZlo7_~0)HOLOdT z_HYi=wF(hP_0*IKtJSA{J;9Yz7J%uh^p*}6gjf_udSQ=2#LZK1^iftH>ZsdR*T6xG z_c*n(eXQ$O>YXwLbK!A)rhYR(*!$Kuu$#gkC{jdVz``+z0<))xYxEV<5P^x`pJEpE zaZt~?Y)d3iKDb%qta+^xSNpWQQ-uoFJCv|;*TzK=7Ec9R1wQFzyYj{dnBT^3J_AqV z94AEn9$-fA4aw9&ftMy);36%%@y4&V;7$c{YhCy=+)1io7FDoe@RqB$*&~ehb`ZE2 z8yws`Xs*37`1KDO!UOR&u}fqNUJ+djpXS9Eh$zSvyDw>cItv9&PD*V3KUzr@wCF*u ztei4slW_+z&ZuMt)&6sBvCf>&jVCp)NYxjaQWpLiEzEv-fxsanhQPw}Vifo-Mx4!z zF#n1POO7>N?Hz)YW8z&D=7^b2S*PP#qC$!%Wam7wlV68>&K_bX9C_U&ihzV}*PKBT z0^Ms!IoRYt*!|cE8EpwkEqYfz-?yqC@I#M z)pxt!nP#1qU+)^NaIg4KdP#PEcpNOx&yI7=`wzy>6?=eJfcDFG`*S%W9%>Sh3o;n;M`ulqB3? z1qk(~5T0w+!Dzm5+frU8E~}tB(whXX2hoY7jSbyNW42i--~pnKFvIq`Q6EynD8kZ? zypH^iYo{mzvy7#Pvkce{(F#r@yXAV12!$WM3UK!%6CR{;`TX9QMGBbY(U)rVR6 zf~IU)i~W{@_^IKLU}_Dn9;>dHJ;7eUXcAog-6y+n{CfXxmNOl1gs7oY7B^l#5xXC3 zEqXrGV1?N0)~%Z-z+gYbe{%grBUfN8#uxT`e?BurfIdkmhdmN6iA$*Y|I+UQ@43Ik5wQu4I z6S5oj5U#`Rs|mJQsyo>%q6=2W>#q_UnWfu2+Az94-8A-moW+@(NPokak$V=uTl+lL zu!w?|z35H*Hd6f!87h8M9HucLKxFWz&Wp^B8Y~M&m-);czumYetjpQr_i&ZIwM0}C z#l6RykObk+#vA$f-N-iQENg5_aMiceAIH|>Huh{w-zF>SD2W%z#x_q3?56a{DDjY-R85NpY`&fS>%sO40+iq?WxrA3!CW1^_fJa5C9k0**c3X!go-426R zxlSX`LO*o&^HFpmZFr@}ps;9``R%dDTH-2c5wD>wl^9yxsTZxFwb+;YvW&)wrz}Gv z_Ex8)oERzfi#PV1W8;fI7snOv62W{nDiEkr%M542{jn};yEK8g@(cdRW#wUhdDP;U+lh=dt53*751M|;NLTopbbzr z!X2@_%gw7b0oo+C`nHDlnP>b62D%UKEIWq#&X5KKyz_CG+=#-m!TpnWCNj+gvxJl0 z>Cj_;t|*=XUe(U%pKT4X9xxfjBdo{3Q4rjc!J#gQc2HVp~X&DkN)IEuHpxaa)KzPy-dZ@RpvdfX&^&)-bh5gmx z%=*2yG5l=&$B1gLy(agD7Xgy-8vd&wCHK*eaI@IzY9_)(PfDq~>!cLakbRaGr&nhx z4jY&U?&nJy+rT0?$|F2&{V3#JK*GNBd(VDiBt{n8y%=}o3Vcg=s9DB7#D4m758dZU z{8{qs-f=c8Foyd1Vch6+4ff`_k0)DWjdto*i?4e(v)sH{CIcXQQtI&}#n@2^+A(U}x$n zI6s)B$Z8Lc>&{EDMel5^*q!4xl|6v^;?^6$$6584c%`u2_9|wfBycH_GKrgEA{GSK z!mS=-D{+-33M3fS0#vAvsKDJIN|lle{1+~&4A+$_*dykc+TfDOjr@2DEm0f%tlasADDFA=vG3H0Elh*b>4 z_A0)>F3^fk=nVLX^0tZ7Ai@|@y838{6Xk~uxIiARsR+3+jz~_JMh@CzM1*C?HRS%_ zXH(OlA!<5_M~Llk8;V4hl8BeY#mHaqdj$E{qHo zNF69z_n^}Ch||n^wyY~^o1*KOYtE3Hc2KY^r44@b2|F-kMBY@BT#u{nIVpRlxS&zm zbw3G;BN2@1au7k?lKz+ym*VCe`}_asL$U+valEg5H~Z;=j$&$q(um%l19VyoY%@Fw zuE(`t?~a1Uv4KJAJNg_W)g(?o>xA~xD6Too=(AHU}v)s5# zvNxI9587-!HRHHxpV3jul6O%#miF)0T(;GC_c0^7{?UhZY;-ISGAX`;eY`ACHQ!e2y9 z7Ec=j5`)*o&apo+Pf3(l-BzM8hft-afv^ZBwf)Nw?j^oDj2Y~Js6kBZ;By=alX@?X zEro}7IM$}Ot1`bv_qLB6sLo`jM{qj2*n}N;-8gX>6vTR9ktvXO$>>@qINbX_{e`qQ z_yfBhG~_)j+efWsSNit34o1!#^NVJM`5GmjKRZ=b&Rnmk4lYTl^*K~HQO!GO$$+^d7010Pzs?T=wzQR54E1Sp2O^D5g!Pg4XQ*#+Pz-6O@E# zf=U)s()=Lqs~S!ZSM@Hnf0O5N8GeVCfH0x6qrfeaF)D-VgX=rT1&d%!U}PpON4+$O z-4XXgtX+)LxF1m2z+n2HK{MAez~RHoRS*^DJwn?-7>TvxiRX8T5i z)p<`V>aqLZ+$F7%^Y%d)QAGq$xmX532U+KJt`(5QW(EB5E zG&P~Fl^5}^J#zN?+pCboZ|x4N{b#zF^pi zW~U#t=8*b z7|GB=`9Ml-`%JS`EFrV`-!`>SJBefQ#T}(D?l!-cI5SN=44zBYb{?ZAbhgHusRdw{ z9=SaF>>OJax#15G-e_|H+XXF@#H@A%{tNFB4=*36!9P=dyP$FDmm@l(EGP12*}Det zgYX=F7o~Zbm{!2%cu7pOV^)zIV**UUfY^YP*Ft)bOfdkp<&*efJi*?LKoKdnu- zJlZ@_^0aLI*_CSjpY=s}&$DLuoFu*n??CR;D=-OZr)-zUKRxH7B zAy8=DZ#;MW=82oUaUu{P_(B;rvioGxTNM#>#wZiEE#i^W!4P}cN4q?%-C^>ry#`^rw`;uI{cJVIlr*q`J?cr?10+LaVb16 zVV?=kB3u<$kCjFtO^S|}zqn*e5Jn7!8-sDAIYIo5MV1njawCo|XnSW_Y7Dd{`+#Lx zoG?DthsLZ%!0F!v4(}_9@@KoGojsbW24ZS;oT6QIAT=iL;+|BgSjm4<(LtqB%1-oF z%=Tcz-8inOo`Iaf`>bKqdCU@bYUAd^~VTz6Il_J0&nNx zHcXH^CZadNP9piBwdv_)Yth`FVt^C{wq>i^ooQ+sMU|D=ocT?s-BV<^xN!S5?TmrN zWj2&tfsLyDWhOV1?xTNQMK;`3c8e zAp;v21M9HJEoQk+GODVE8_zh_t!9nKQ@p^_O{meEY{7Omtjt1gFGx?HEa9VkD`VI( zUYRTkB8w-a7~F?*!=G7A;+T~^al74FMs$3iQN)OWT5^~-K9{M9R;0KMy7bb+8SZwZR9nAusQh9fvzE?96?XQ4URcn?`H&o<&{~6o!%$ZJ(Jqmgmtu5%13KVAc#&( zR1ep(BxD=RfjM^Y&xkp%cH>PG{gj~YOM3~9ud5|=T@ivo7n5$=P|Ak&na*2?P`X@-E8B&b(y0gZ?-rtMa!)t8Qk*1vLL+6^ZRpZ2N zN2PU>ApR#xv6Znmj7|PV*=;kCU-eev-1XtWj--$da4AjAsbblX|3`u@;v3Npj6M@I zQCa_4#Tp!|jMF?dC?b2@gvTEva*U_GFJ@OXA)<(xzr@zAFCXa17{ty|J31s#R!FNq}u ziY|O%JW~ik>yde}H=A@|J_`fwfW-9c)d9hs3m%Z9Y`!tig2uFnoSMpfYZySSx@di< zt21rq%f#w?pR-k;id031^Bi!-yv1M2{>n4Ib7`Gj2Z-R^A#X1QYmkb&MRE1Jaz3&j z-`7(i-gsSQuaFUHs$P+dWaH`OUdLHUJokr_QIRKad44QY<;8cV?bvay)v>{Qjh_$e zlzmvn9I&cx9Zm;mltd)|9lcEZWQ^!N?S`K-mH0>DTeFvuVy#v z;v>E4u`GM~s@+gR;Tfxmp60h8(J1-l+1A8*{~S7d1V0iiD_fB_3ydDalXJN2Pu;S; zI_yt$cTaUiJaC;1HUXn!u&w;CZcyDY@+tX6+GGK4iwSOF_;Ztt4TQ-oi9Fb^o!zDx zBq?IMCEJ{r@w(0{no zKnA?khgJR@Xr&aqV>WN48x$#VR3`%=S@#oAK*653uK`cCoBPM#xcxZ4napN}lab@`^%G9%VMjKR@-n%6wlsAK(=xMOjRqz`2ED2sl_^3nXB~n6H z>p|WlaJA_vH68_q@^X5)7d4%1_|NilK+L#$Y;iru^$f6@JX>;l5ev$~7zm+q5p z)}Nq}D4&n66y}0@kC9E4H9M=1F;5|f{oN{512v@Tu{}C$vV^kMMhnx>8Ndfo`KU0k zuprMN7Bl;Cu60u!tE`WWwbA#=?&nqUkiPz`RSY73Ys5OR(Gij3yJiBjJ_S<^wW#U2 zDR#LxWO&Xp1dJi=ZnFF$cr@k!v=xI}Nn;aYqL`@vRi8e%WK(YO`-(ySR)HeCoK{Pn zrGH|ocnXU*f=0Tepo82W)8`sW?YO@F>PnNkrII1uZ237T8M)60uNx|Mc`|6(z2L*C^7}khX{f}=Zq)@HrTYxN9u%F(%o=$q- z;@xT&`-^>UWX=FR01jov@w}btW9;8^Q+Lj$et)Q5{h+z;IJKJS1; zA_vjjs<}ae3hUoe2)tz4@Na@xTj==wD$(GeC2*>(t_dxUp5O}0PNdk=^X^8je5-#S zZ!A0&$0H@&lDv;=C+tuJ)pme2&;SL5B}7F;9yh(rb2_Eg@Gez=1_|lqXP>n;=GI^r zBrHgJc@AXYU)s+VRl0t|lLaQSf>U|5{9i@pNC&U?g1byxaMZOnC2jB?b$wJycclICRtgW-9Wz3Rsk)D9y8Tqx_L{7A{S zp>_r+gGDZ+Ms|vCMFzLFn>YsGq}2o>UlGZyW=zv`V8)q%3v4DZU5KdR*qMCPD&*#4 zT#E=JcJtlN6=n!|Xui`M5I}(WT>b45$?aUmMa_>pcHqa-*^f~uv8%_qx;<$uHz9CB z97t?i0}HzeS`c>&6Pp%isY&hJwfe}r$$dPV%&SAW@vHs<-hI#l1&HN+UQbhrEJI?& z-J^a$Gd*TA!?41>#WAn@sDQr+%(xJolvgIHHe%0C&GGrKhXWya!B!!zXF#aas)!z zE9UF)U0b^sCMCrdRGG#xBM+RO30MIDMSuA}fiy>YA@eoxx`d@=na=x|evg~ud1}b6 z@&TC463dDyxgu!Cn)ZC$3$k5;yw;LFtb+rt4F)__AY)Nj*q3V{Y4iePY&@|5in+t! zz*6q}KOm2mwDfu5gBGlM8T76-*Zv>=nX^Y<4e2f+k#y0an8rVXS-><-TvVI#2UKUy zrcE&{;;PRT15w%`=z>hY`=r8r))fFr1f<)Aj4C1iiw10@ts)@*8-r7id(dtb5f^?s zU;~P_0o6YYwsT%e|E~lBq+u3=>L5>nw_F|{@Wtmk-noAQLb>nv8CVB_&j&355JX#G zim)EiZyhH9cxIm2n~DHRduTG8*Bijn?j8eNa|YDl^R4uscSA&ABhXBBLO6r$aNT*} z;v{}P&$Md6!j8@Z7~tOJfKCEv3dmnezHYT>T}w33#qvu>l#wV<(zz1|W#7Ypw$=Mv zy8ztT6-tIKkyZdjS9gA!F&JC;K)bjB@>bGU0wkw@-Vqei_>}=x`BMld6S&pk9|7vn;VUNAaZxsK-vSQ})N8-L+Sj<@MLa}cY@Ivn>sRt zt)3wOAz&wz4fB!EAWhS z=3RiGf~b5*hJ^wx&20TmgM13}PWB4ZT>_|f4Z+WYzmQt^CG*55gAM+@5$@6&iiVYl>uf5Nr> zqa=X%&YP$unE8RyvyoF8+s0f#WIj=X3e$&gu1`Jqw?+l3jhm@v8i+ya1JUt$e=n$h za199A&%2O9hEj5_thK*p90ICa|J+6*0TC_}pypV&x77KqdDYT+;tvAhI|1j7`#dM+ zuv6gEsK-#l;ND|63ZvrR) z9;)lkZEZ`*g)epikAuiS@_kp)`17yJ-v8UAlV1lk`v;v{Q%0AB+VocYZiGti((l1w zX^fM=O%~EtLq?ta%jP*YfUt?BpcALi)iWS3m^Hil$k_l6kpFgql=VDRQ z$50iTr336x=K~K=%}%IY8i6sg?N6IfizhVd5e-_r0R{`JTMHPXcL38DmflSPG`ruZ89)a6lgNq_Ks*bAZ2xkReF>ovDE``O2xpHi)uM9;s3R+yHv=7YHe#qE6V#vwN+9WT5%73ex@sD_|KMl>ZVn{rB&WMa0gX7{fwO_o1Kav_wgV*P zwL^>l=Knfp|1`{aWd;+np?v_(bROJeHy^UoX@(^J+6$o;n+MsU&z?UK^IjEXm>&Vz z216xlp_(|%E()>}f-RxCcViRKfC`zwI$#x4z=(ZvMu%<-2gLB zJtAUFUw)uLD&SYPk#c4U-_4u;{W0@@Rf{1QdY-@sPw}Z+Z*tksM=^0)>5#Uz`|iU3 z_2TayML|{x^Rp#nZs^%RbmZpu5ew$y_pfU{3%R*L$2!Qx4IJ*5{x#yfG5x>41o4NG Ygd>)|NsPA-hu*wrm!Ic@9bxDH2Ojots{jB1 literal 0 HcmV?d00001 diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..ddabc19 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 Queue-it + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/android-webui-sdk.iml b/android-webui-sdk.iml new file mode 100644 index 0000000..760fee4 --- /dev/null +++ b/android-webui-sdk.iml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/demoapp/src/library/java/com/queue_it/shopdemo/DeepActivity.java b/demoapp/src/library/java/com/queue_it/shopdemo/DeepActivity.java new file mode 100644 index 0000000..339d760 --- /dev/null +++ b/demoapp/src/library/java/com/queue_it/shopdemo/DeepActivity.java @@ -0,0 +1,29 @@ +package com.queue_it.shopdemo; + +import android.os.Bundle; +import com.google.android.material.floatingactionbutton.FloatingActionButton; +import com.google.android.material.snackbar.Snackbar; + +import android.support.v7.app.AppCompatActivity; +import android.support.v7.widget.Toolbar; +import android.view.View; + +public class DeepActivity extends AppCompatActivity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_deep); + Toolbar toolbar = findViewById(R.id.toolbar); + setSupportActionBar(toolbar); + + FloatingActionButton fab = findViewById(R.id.fab); + fab.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) + .setAction("Action", null).show(); + } + }); + } +} \ No newline at end of file diff --git a/demoapp/src/library/java/com/queue_it/shopdemo/FirstFragment.java b/demoapp/src/library/java/com/queue_it/shopdemo/FirstFragment.java new file mode 100644 index 0000000..54e7b63 --- /dev/null +++ b/demoapp/src/library/java/com/queue_it/shopdemo/FirstFragment.java @@ -0,0 +1,33 @@ +package com.queue_it.shopdemo; + +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + + +public class FirstFragment extends Fragment { + + @Override + public View onCreateView( + LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState + ) { + // Inflate the layout for this fragment + return inflater.inflate(R.layout.fragment_first, container, false); + } + + public void onViewCreated(@NonNull View view, Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + + view.findViewById(R.id.button_first).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { +// NavHostFragment.findNavController(FirstFragment.this) +// .navigate(R.id.action_FirstFragment_to_SecondFragment); + } + }); + } +} \ No newline at end of file diff --git a/demoapp/src/library/java/com/queue_it/shopdemo/MainActivity.java b/demoapp/src/library/java/com/queue_it/shopdemo/MainActivity.java new file mode 100644 index 0000000..2212f74 --- /dev/null +++ b/demoapp/src/library/java/com/queue_it/shopdemo/MainActivity.java @@ -0,0 +1,194 @@ +package com.queue_it.shopdemo; + +import android.content.Context; +import android.content.Intent; +import android.content.SharedPreferences; + +import com.google.android.material.floatingactionbutton.FloatingActionButton; + +import android.os.Bundle; +import android.support.v7.app.AppCompatActivity; +import android.text.TextUtils; +import android.view.View; +import android.view.inputmethod.InputMethodManager; +import android.widget.EditText; +import android.widget.RadioButton; +import android.widget.TextView; +import android.widget.Toast; + +import com.queue_it.androidsdk.*; +import com.queue_it.androidsdk.Error; + +public class MainActivity extends AppCompatActivity { + FloatingActionButton queue_button; + EditText customerIdEditText; + EditText eventIdEditText; + EditText layoutNameEditText; + EditText languageEditText; + EditText enqueueTokenEditText; + EditText enqueueKeyEditText; + RadioButton testRadioButton; + + private void runQueue(QueueITEngine queueITEngine) throws QueueITException { + String enqueueToken = enqueueTokenEditText.getText().toString(); + String enqueueKey = enqueueKeyEditText.getText().toString(); + if (enqueueToken.length() > 0) { + queueITEngine.runWithEnqueueToken(MainActivity.this, enqueueToken); + } else if (enqueueKey.length() > 0) { + queueITEngine.runWithEnqueueKey(MainActivity.this, enqueueKey); + } else { + queueITEngine.run(MainActivity.this); + } + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_main); + + queue_button = findViewById(R.id.queue_button); + customerIdEditText = findViewById(R.id.customerid_edittext); + eventIdEditText = findViewById(R.id.eventid_edittext); + layoutNameEditText = findViewById(R.id.layoutname_edittext); + languageEditText = findViewById(R.id.language_edittext); + testRadioButton = findViewById(R.id.radio_environment_test); + customerIdEditText.addTextChangedListener(getRequiredTextValidator(customerIdEditText)); + eventIdEditText.addTextChangedListener(getRequiredTextValidator(eventIdEditText)); + enqueueTokenEditText = findViewById(R.id.enqueuetoken_edittext); + enqueueKeyEditText = findViewById(R.id.enqueuekey_edittext); + + final SharedPreferences sharedPreferences = getPreferences(Context.MODE_PRIVATE); + String customerId = sharedPreferences.getString("customerId", ""); + String eventOrAliasId = sharedPreferences.getString("eventOrAliasId", ""); + String layoutName = sharedPreferences.getString("layoutName", ""); + String language = sharedPreferences.getString("language", ""); + String enqueueToken = sharedPreferences.getString("enqueueToken", ""); + String enqueueKey = sharedPreferences.getString("enqueueKey", ""); + + customerIdEditText.setText(customerId); + eventIdEditText.setText(eventOrAliasId); + layoutNameEditText.setText(layoutName); + languageEditText.setText(language); + enqueueTokenEditText.setText(enqueueToken); + enqueueKeyEditText.setText(enqueueKey); + + queue_button.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (!TextUtils.isEmpty(customerIdEditText.getError()) || !TextUtils.isEmpty(eventIdEditText.getError())) { + return; + } + + queue_button.setEnabled(false); + QueueService.IsTest = testRadioButton.isChecked(); + hideKeyboard(); + + String customerId = customerIdEditText.getText().toString(); + String eventOrAliasId = eventIdEditText.getText().toString(); + String layoutName = layoutNameEditText.getText().toString(); + String language = languageEditText.getText().toString(); + String enqueueToken = enqueueTokenEditText.getText().toString(); + String enqueueKey = enqueueKeyEditText.getText().toString(); + + SharedPreferences.Editor editor = sharedPreferences.edit(); + editor.putString("customerId", customerId); + editor.putString("eventOrAliasId", eventOrAliasId); + editor.putString("layoutName", layoutName); + editor.putString("language", language); + editor.putString("enqueueToken", enqueueToken); + editor.putString("enqueueKey", enqueueKey); + editor.commit(); + + Toast.makeText(getApplicationContext(), "Please wait for your turn.", Toast.LENGTH_SHORT).show(); + + QueueITEngine queueITEngine = new QueueITEngine(MainActivity.this, customerId, eventOrAliasId, layoutName, language, new QueueListener() { + + @Override + public void onSessionRestart(QueueITEngine queueITEngine) { + try { + runQueue(queueITEngine); + } catch (QueueITException e) { + Toast.makeText(getApplicationContext(), "Please try again.", Toast.LENGTH_LONG).show(); + queue_button.setEnabled(true); + } + } + + @Override + public void onQueuePassed(QueuePassedInfo queuePassedInfo) { + showResultActivity("You passed the queue! Your token: " + queuePassedInfo.getQueueItToken(), true); + queue_button.setEnabled(true); + } + + @Override + public void onQueueViewWillOpen() { + Toast.makeText(getApplicationContext(), "onQueueViewWillOpen", Toast.LENGTH_SHORT).show(); + queue_button.setEnabled(true); + } + + @Override + public void onUserExited() { + Toast.makeText(getApplicationContext(), "onUserExited", Toast.LENGTH_SHORT).show(); + } + + @Override + public void onQueueDisabled() { + showResultActivity("The queue is disabled.", false); + queue_button.setEnabled(true); + } + + @Override + public void onQueueItUnavailable() { + showResultActivity("Queue-it is unavailable", false); + queue_button.setEnabled(true); + } + + @Override + public void onError(Error error, String errorMessage) { + showResultActivity("Critical error: " + errorMessage, false); + queue_button.setEnabled(true); + } + + }); + try { + runQueue(queueITEngine); + } catch (QueueITException e) { + Toast.makeText(getApplicationContext(), "Please try again.", Toast.LENGTH_LONG).show(); + queue_button.setEnabled(true); + } + } + }); + } + + private void showResultActivity(String result, boolean success) { + Intent intent = new Intent(this, ResultActivity.class); + intent.putExtra("success", success); + intent.putExtra("result", result); + startActivity(intent); + } + + private boolean isAlphaNumeric(String s) { + String pattern = "^[a-zA-Z0-9]*$"; + return s.matches(pattern); + } + + private void hideKeyboard() { + View view = this.getCurrentFocus(); + if (view != null) { + InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); + imm.hideSoftInputFromWindow(view.getWindowToken(), 0); + } + } + + private TextValidator getRequiredTextValidator(TextView textView) { + return new TextValidator(textView) { + @Override + public void validate(TextView textView, String text) { + if (TextUtils.isEmpty(text)) { + textView.setError("Field required"); + } else if (!isAlphaNumeric(text)) { + textView.setError("Must be alphanumeric"); + } + } + }; + } +} diff --git a/demoapp/src/library/java/com/queue_it/shopdemo/ResultActivity.java b/demoapp/src/library/java/com/queue_it/shopdemo/ResultActivity.java new file mode 100644 index 0000000..bff5f51 --- /dev/null +++ b/demoapp/src/library/java/com/queue_it/shopdemo/ResultActivity.java @@ -0,0 +1,56 @@ +package com.queue_it.shopdemo; + +import android.content.Intent; +import android.os.Bundle; +import com.google.android.material.floatingactionbutton.FloatingActionButton; + +import android.support.v4.content.res.ResourcesCompat; +import android.support.v7.app.AppCompatActivity; +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; + + +public class ResultActivity extends AppCompatActivity { + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_result); + + String result; + boolean success; + if (savedInstanceState == null) { + Bundle extras = getIntent().getExtras(); + if (extras == null) { + result = null; + success = false; + } else { + result = extras.getString("result"); + success = extras.getBoolean("success"); + } + } else { + result = (String) savedInstanceState.getSerializable("result"); + success = (Boolean) savedInstanceState.getSerializable("success"); + } + + final TextView resultText = (TextView)findViewById(R.id.result_text); + final ImageView checkedImageView = (ImageView)findViewById(R.id.image_view_checked); + final FloatingActionButton retry_button = (FloatingActionButton)findViewById(R.id.retry_button); + + resultText.setText(result); + if (success){ + checkedImageView.setImageDrawable(ResourcesCompat.getDrawable(getResources(), R.drawable.ic_check_black_24dp, null)); + } else { + checkedImageView.setImageDrawable(ResourcesCompat.getDrawable(getResources(), R.drawable.ic_error_black_24dp, null)); + } + + retry_button.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent = new Intent(ResultActivity.this, MainActivity.class); + startActivity(intent); + finish(); + } + }); + } +} diff --git a/demoapp/src/library/java/com/queue_it/shopdemo/SecondFragment.java b/demoapp/src/library/java/com/queue_it/shopdemo/SecondFragment.java new file mode 100644 index 0000000..991ee41 --- /dev/null +++ b/demoapp/src/library/java/com/queue_it/shopdemo/SecondFragment.java @@ -0,0 +1,32 @@ +package com.queue_it.shopdemo; + +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +public class SecondFragment extends Fragment { + + @Override + public View onCreateView( + LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState + ) { + // Inflate the layout for this fragment + return inflater.inflate(R.layout.fragment_second, container, false); + } + + public void onViewCreated(@NonNull View view, Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + + view.findViewById(R.id.button_second).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { +// NavHostFragment.findNavController(SecondFragment.this) +// .navigate(R.id.action_SecondFragment_to_FirstFragment); + } + }); + } +} \ No newline at end of file diff --git a/demoapp/src/library/res/layout/activity_deep.xml b/demoapp/src/library/res/layout/activity_deep.xml new file mode 100644 index 0000000..08580ef --- /dev/null +++ b/demoapp/src/library/res/layout/activity_deep.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/demoapp/src/library/res/layout/activity_main.xml b/demoapp/src/library/res/layout/activity_main.xml new file mode 100644 index 0000000..799260f --- /dev/null +++ b/demoapp/src/library/res/layout/activity_main.xml @@ -0,0 +1,160 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/demoapp/src/library/res/layout/activity_result.xml b/demoapp/src/library/res/layout/activity_result.xml new file mode 100644 index 0000000..b898426 --- /dev/null +++ b/demoapp/src/library/res/layout/activity_result.xml @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/demoapp/src/library/res/layout/content_deep.xml b/demoapp/src/library/res/layout/content_deep.xml new file mode 100644 index 0000000..96f084d --- /dev/null +++ b/demoapp/src/library/res/layout/content_deep.xml @@ -0,0 +1,6 @@ + + \ No newline at end of file diff --git a/demoapp/src/library/res/layout/fragment_first.xml b/demoapp/src/library/res/layout/fragment_first.xml new file mode 100644 index 0000000..8cf9428 --- /dev/null +++ b/demoapp/src/library/res/layout/fragment_first.xml @@ -0,0 +1,28 @@ + + + + + +