From cd7877859f2f08cbde83dbdd01ce329ac66188f5 Mon Sep 17 00:00:00 2001 From: AndrewShmig Date: Tue, 29 Jul 2014 11:14:10 +0400 Subject: [PATCH] closes #106 --- Project/Project/ASAAppDelegate.m | 23 +- .../VKRequestManager/VKRequest/VKRequest.m | 39 ++- .../VKRequestManager/VKRequestManager.m | 13 + Project/Vkontakte-iOS-SDK-LV/VKUser/VKUser.h | 8 + Project/Vkontakte-iOS-SDK-LV/VKUser/VKUser.m | 227 ++++++++++-------- .../UserInterfaceState.xcuserstate | Bin 31104 -> 88001 bytes 6 files changed, 184 insertions(+), 126 deletions(-) diff --git a/Project/Project/ASAAppDelegate.m b/Project/Project/ASAAppDelegate.m index bba83e8..20c221f 100644 --- a/Project/Project/ASAAppDelegate.m +++ b/Project/Project/ASAAppDelegate.m @@ -29,10 +29,16 @@ - (BOOL) application:(UIApplication *)application bounds]]; self.webView.hidden = NO; - [[VKConnector sharedInstance] startWithAppID:kVKAppID - permissons:[kVKPermissionsArray componentsSeparatedByString:@","] - webView:self.webView - delegate:self]; +// [[VKConnector sharedInstance] startWithAppID:kVKAppID +// permissons:[kVKPermissionsArray componentsSeparatedByString:@","] +// webView:self.webView +// delegate:self]; + _rm = [[VKRequestManager alloc] initWithDelegate:self]; + _rm.startAllRequestsImmediately = NO; + + VKRequest *r = [_rm info:@{@"user_ids": @"christian.burns"}]; + r.cacheLiveTime = VKCacheLiveTimeOneDay; + [r start]; // Override point for customization after application launch. self.viewController = [[ASAViewController alloc] @@ -52,9 +58,12 @@ - (void) connector:(VKConnector *)connector NSLog(@"Access token: %@", accessToken); - _rm = [[VKRequestManager alloc] initWithDelegate:self]; - [_rm info:@{@"user_ids": @"christian.burns"}]; - +// _rm = [[VKRequestManager alloc] initWithDelegate:self]; +// _rm.startAllRequestsImmediately = NO; +// +// VKRequest *r = [_rm info:@{@"user_ids": @"christian.burns"}]; +// r.cacheLiveTime = VKCacheLiveTimeOneDay; +// [r start]; } - (void)request:(VKRequest *)request responseError:(NSError *)error diff --git a/Project/Vkontakte-iOS-SDK-LV/VKRequestManager/VKRequest/VKRequest.m b/Project/Vkontakte-iOS-SDK-LV/VKRequestManager/VKRequest/VKRequest.m index ee7ae79..44fde14 100644 --- a/Project/Vkontakte-iOS-SDK-LV/VKRequestManager/VKRequest/VKRequest.m +++ b/Project/Vkontakte-iOS-SDK-LV/VKRequestManager/VKRequest/VKRequest.m @@ -195,30 +195,29 @@ - (void)start return; // перед тем как начать выполнение запроса проверим кэш - if (self.requestManager.user) { - NSUInteger currentUserID = self.requestManager.user.accessToken.userID; - VKStorageItem *item = [[VKStorage sharedStorage] - storageItemForUserID:currentUserID]; + NSUInteger currentUserID = self.requestManager.user.accessToken.userID; + VKStorageItem *item = [[VKStorage sharedStorage] + storageItemForUserID:currentUserID]; + + NSData *cachedResponseData = [item.cache cacheForURL:[self uniqueRequestURL] + offlineMode:self.offlineMode]; + if (nil != cachedResponseData) { + _receivedData = [cachedResponseData mutableCopy]; - NSData *cachedResponseData = [item.cache cacheForURL:[self uniqueRequestURL] - offlineMode:self.offlineMode]; - if (nil != cachedResponseData) { - _receivedData = [cachedResponseData mutableCopy]; - - // данные взяты из кэша - _isDataFromCache = YES; - - [self connectionDidFinishLoading:_connection]; - - // нет надобности следить за состоянием "обновляющего" запроса - // только при удачном исходе данные в кэше будут обновлены - self.delegate = nil; - } + // данные взяты из кэша + _isDataFromCache = YES; - // добавляем актуальный пользовательский токен доступа - self.HTTPQueryParameters[@"access_token"] = item.accessToken.token; + [self connectionDidFinishLoading:_connection]; + + // нет надобности следить за состоянием "обновляющего" запроса + // только при удачном исходе данные в кэше будут обновлены + self.delegate = nil; } + // добавляем актуальный пользовательский токен доступа + if (!item.accessToken.token.isEmpty) + self.HTTPQueryParameters[@"access_token"] = item.accessToken.token; + NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init]; // HTTP метод отправки запроса diff --git a/Project/Vkontakte-iOS-SDK-LV/VKRequestManager/VKRequestManager.m b/Project/Vkontakte-iOS-SDK-LV/VKRequestManager/VKRequestManager.m index c4224cc..ec520a2 100644 --- a/Project/Vkontakte-iOS-SDK-LV/VKRequestManager/VKRequestManager.m +++ b/Project/Vkontakte-iOS-SDK-LV/VKRequestManager/VKRequestManager.m @@ -30,6 +30,9 @@ @implementation VKRequestManager +{ + VKUser *_user; +} #pragma mark - Init @@ -53,6 +56,16 @@ - (instancetype)initWithDelegate:(id )delegate user:nil]; } +#pragma mark - Getters & Setters + +- (VKUser *)user { + return _user ? _user : [VKUser ghostUser]; +} + +- (void)setUser:(VKUser *)user { + _user = user; +} + #pragma mark - Users - (VKRequest *)info diff --git a/Project/Vkontakte-iOS-SDK-LV/VKUser/VKUser.h b/Project/Vkontakte-iOS-SDK-LV/VKUser/VKUser.h index 4519c35..cdcc234 100644 --- a/Project/Vkontakte-iOS-SDK-LV/VKUser/VKUser.h +++ b/Project/Vkontakte-iOS-SDK-LV/VKUser/VKUser.h @@ -66,6 +66,14 @@ Second example: */ + (instancetype)currentUser; +/** Non-authorized user, guest. + + This "ghost user" is used to help caching metchanism to work with non-authorized + requests (requests that don't have access_token) + +*/ ++ (instancetype)ghostUser; + /** Activates user with passed unique user identifier If there is no such user then NO will be returned, otherwise - YES. diff --git a/Project/Vkontakte-iOS-SDK-LV/VKUser/VKUser.m b/Project/Vkontakte-iOS-SDK-LV/VKUser/VKUser.m index c52743c..d83bf68 100644 --- a/Project/Vkontakte-iOS-SDK-LV/VKUser/VKUser.m +++ b/Project/Vkontakte-iOS-SDK-LV/VKUser/VKUser.m @@ -2,26 +2,26 @@ // Created by AndrewShmig on 6/28/13. // // Copyright (c) 2013 Andrew Shmig -// -// 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 +// +// 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 +// 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 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. // #import "VKUser.h" @@ -29,9 +29,12 @@ #import "VKConnector.h" +#define kGhostUserID 0 + + @implementation VKUser { - VKStorageItem *_storageItem; + VKStorageItem *_storageItem; } #pragma mark Visible VKUser methods @@ -39,121 +42,147 @@ @implementation VKUser - (instancetype)initWithStorageItem:(VKStorageItem *)storageItem { - VK_LOG(@"%@", @{ - @"storageItem" : storageItem - }); - - self = [super init]; - - if (self) { - _storageItem = storageItem; - } - - return self; + VK_LOG(@"%@", @{ + @"storageItem" : storageItem + }); + + self = [super init]; + + if (self) { + _storageItem = storageItem; + } + + return self; } #pragma mark - Class methods static VKUser *_currentUser; - + (instancetype)currentUser { - VK_LOG(); - -// пользователь установлен, но в хранилище его записи нет (возможно была удалена), а этого нельзя так оставлять - сбрасываем - VKStorageItem *item = [[VKStorage sharedStorage] - storageItemForUserID:_currentUser.accessToken.userID]; - - if (nil == item) { -// пользователь еще не был запрошен и не был установлен активным, либо -// пользователь был удалён - if (![[VKStorage sharedStorage] isEmpty]) { - -// хранилище содержит некоторые данные -// устанавливаем произвольного пользователя активным - VKStorageItem *storageItem = [[[VKStorage sharedStorage] - storageItems] lastObject]; - _currentUser = [[VKUser alloc] initWithStorageItem:storageItem]; - - } - } else { -// обновление токена доступа текущего пользователя для случаев, когда до -// этого имело место повторная авторизация пользователем приложения ВК - _currentUser.accessToken = item.accessToken; + VK_LOG(); + + // пользователь установлен, но в хранилище его записи нет (возможно была удалена), а этого нельзя так оставлять - сбрасываем + VKStorageItem *item = [[VKStorage sharedStorage] + storageItemForUserID:_currentUser.accessToken.userID]; + + if (nil == item) { + // пользователь еще не был запрошен и не был установлен активным, либо + // пользователь был удалён + if (![[VKStorage sharedStorage] isEmpty]) { + + // хранилище содержит некоторые данные + // устанавливаем произвольного пользователя активным + VKStorageItem *storageItem = [[[VKStorage sharedStorage] + storageItems] lastObject]; + _currentUser = [[VKUser alloc] initWithStorageItem:storageItem]; + } + } else { + // обновление токена доступа текущего пользователя для случаев, когда до + // этого имело место повторная авторизация пользователем приложения ВК + _currentUser.accessToken = item.accessToken; + } + + return _currentUser; +} - return _currentUser; +static VKUser *_ghostUser; ++ (instancetype)ghostUser { + VK_LOG(); + + if (nil != _ghostUser) { + return _ghostUser; + } + + // проверим, если призрачный пользователь был ранее создан + VKStorageItem *item = [[VKStorage sharedStorage] storageItemForUser:_ghostUser]; + + if (nil == item) { + // пользователь не создан - создаем + VKAccessToken *ghostUserAccessToken = [[VKAccessToken alloc] initWithUserID:kGhostUserID + accessToken:@""]; + + // сохраняем токен доступа в хранилище + VKStorageItem *storageItem = [[VKStorage sharedStorage] + createStorageItemForAccessToken:ghostUserAccessToken]; + [[VKStorage sharedStorage] storeItem:storageItem]; + + _ghostUser = [[VKUser alloc] initWithStorageItem:storageItem]; + } + + return _ghostUser; } + (BOOL)activateUserWithID:(NSUInteger)userID { - VK_LOG(@"%@", @{ - @"userID" : @(userID) - }); - - VKStorageItem *storageItem = [[VKStorage sharedStorage] - storageItemForUserID:userID]; - - if (nil == storageItem) - return NO; - - _currentUser = [[VKUser alloc] initWithStorageItem:storageItem]; - - return YES; + VK_LOG(@"%@", @{ + @"userID" : @(userID) + }); + + VKStorageItem *storageItem = [[VKStorage sharedStorage] + storageItemForUserID:userID]; + + if (nil == storageItem) + return NO; + + _currentUser = [[VKUser alloc] initWithStorageItem:storageItem]; + + return YES; } - (void)logout { - VK_LOG(); - - if(nil == _currentUser) - return; - -// чистим куки - [[VKConnector sharedInstance] clearCookies]; - -// находим нужную запись и удаляем из хранилища - VKStorageItem *item = [[VKStorage sharedStorage] - storageItemForUserID:_currentUser.accessToken.userID]; - [[VKStorage sharedStorage] removeItem:item]; - -// обнуляем текущего пользователя - _currentUser = nil; + VK_LOG(); + + if(nil == _currentUser) + return; + + // чистим куки + [[VKConnector sharedInstance] clearCookies]; + + // находим нужную запись и удаляем из хранилища + VKStorageItem *item = [[VKStorage sharedStorage] + storageItemForUserID:_currentUser.accessToken.userID]; + [[VKStorage sharedStorage] removeItem:item]; + + // обнуляем текущего пользователя + _currentUser = nil; } + (NSArray *)localUsers { - VK_LOG(); - - NSMutableArray *localUsers = [[NSMutableArray alloc] init]; - - [[[VKStorage sharedStorage] storageItems] - enumerateObjectsUsingBlock:^(id obj, - NSUInteger idx, - BOOL *stop) - { - [localUsers addObject:@(((VKStorageItem *) obj).accessToken.userID)]; - }]; - - return localUsers; + VK_LOG(); + + NSMutableArray *localUsers = [[NSMutableArray alloc] init]; + + [[[VKStorage sharedStorage] storageItems] + enumerateObjectsUsingBlock:^(id obj, + NSUInteger idx, + BOOL *stop) + { + [localUsers addObject:@(((VKStorageItem *) obj).accessToken.userID)]; + }]; + + return localUsers; } #pragma mark - Setters & Getters - (VKAccessToken *)accessToken { - VK_LOG(); - - return _storageItem.accessToken; + VK_LOG(); + + return _storageItem.accessToken; } #pragma mark - Overridden methods - (NSString *)description { - VK_LOG(); - - return [_storageItem.accessToken description]; + VK_LOG(); + + return [_storageItem.accessToken description]; } @end \ No newline at end of file diff --git a/Vkontakte-iOS-SDK-LV-Workspace.xcworkspace/xcuserdata/new.xcuserdatad/UserInterfaceState.xcuserstate b/Vkontakte-iOS-SDK-LV-Workspace.xcworkspace/xcuserdata/new.xcuserdatad/UserInterfaceState.xcuserstate index 1bdeb83e1707dea851316b91ad60e0adf8b67645..8d2d2ffe7916842466e0582157c6879b26b0eb22 100644 GIT binary patch literal 88001 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 Y|Nhy?zggD*>38z~{{R2~hC>qn0g^TfRR910 delta 15348 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%0A$gKKMgD}q5CrBRFjwESuxA!|UVs*p7s!j`CGr>Y zGG2QGMj$W-fe8rcd1=ceUL|iDG+raGlQ$6H5kLqGT}a*{Z2-i2n^SkE!r(2 zpOAliP4qeWf_#apMD^}5Bb9T>{=E0UBM zWlmWjFcE=C2u#M_AnuvK_^(Rf?gItxXDC~NDP>0qH(p&l5bCBFnS*km9Lrn%U81&L zyAT&S3Cfh&`G&VoW2T%bPt42YHOhr@C2vsf6yEoE%7+r+ z-`)sdA2I`hnF!1_KFl!06rO2`N%2+nwf$@LT^9-U50{P71!JQ^sL&$pnCokM)Zj33 z1TSt7VjRtCwlIteZ#Jf80Tm`Ft0?GItsUsDt#=QJhz^%qJuJ%Y+pB9$RlSkmsAvId z5?JsAFKvF06`&PhCYS=IgE?RtXrz*;WGaP9<)`pN`3d}Ve|{8?XSN9e3`LB?rG|BG z^#xQ`^EO)WWkQ4#Her`9g%r&~i*PzN){H7@ep~WolZS2&997m_vCNPPm9}h2N=Lu>#2o3Q{&sL!(Dk(6RAnmWNM1QlbTB5W#4PuX0-@TMQ|2^ z7ZALO_aMB3AdaJB%JEVsRoB+{>Kos;Mys~6!teQAdJV|d_OI=%#l>nX`}n%L+PZpe z&-!M;x=iiBUj6FTR)PA-tDN+mR}Bv?#jOgom6_Vgn(i&bSU{~2NLEq{sYTRcY6-QJ zT1G9WR!}RcRn%&|%L>Pi2pmNKM+V1MQfsMom?p6C*!<1Z7HTWCjl#pjOmM=$7nmk$ zjX!@Q=!KvZ!EywL<6z|C4j%{m))8d&s;*JzV?(R8eXI4>J8kt1J1T^B|Ey1`=~>&a zP9ML+KD?y6aUcbKYie4IK0+N8NaoKsP_{8_ppH`~vDctZAaJsYI)%WgMvWH;Nv6(F zI8$k&&LZ$r6LlVe(|k}tmbSKMOS@mFs{)&a)Me^d>IwosBX9+jKuLxXO zO1+?7Qm?4j)Enw8^$vln2wX$p76NY&xQD=71m5Z2@7<`TNtzSb{O=@{Hla-gp0qgv z*Ac+k7y>tWv0-;3`9VL+ujMG`Xgz~A9%>Li1x+g@`m!J#U*LgH9hNV zJJr_oEi?vG#zD+L;C`txLs8SGUrk-Tw1<&!=s;SkPu}cCETDt*iJQHujcVu+I+PY8 z@EZaTajW9iR#xy+N3@)dG)O!~;0cz%h;Nn2()QGLuIXz zc9B*@OMQX>+l;_-<7(b-VYst`Uksrnol2((@)5uu8uj$)KTUF!UYOWv7{Q7I_Yy8z#BK=dg zZR6blAatZtoB8XdkyzCSX*E4Jyb2z+ea4s;K?4~8|}lkP?LMo@qtKoBmZ`{IeHM-Y=6<{1wotm#39o*NJ( zTVYKPp+{g?(>j``5j~V1Mt?^SN0360Mvy^}MUX?#1VPiK^hkOXJ(?ba{~Je-N6-vG za|Eps6dHfr5Og=dI*6W5&%v<%YG6aprRQO2Hz8<&prwKHtQx=Z0q&lk@w=2>hVi>X z;EkXQg0=?eLYo%o>gY8F=&q&L(d+3A^hN~j5VS|o5y3VHwrzzjJ;n$FY?^_k{(;mM zpzLgxaA=nJjLMe!ea-bwtr`+~_3Y`2y=AYyEh2}TMVy;OFe~eUx4qw|TETroEuY$4 z*#f{*MgT&bdcJD33;^RARlXp}k#5elpldTgE*X~T7X&>G0BO_slP_Rw=&ST~12V25 z=-ou$K+s2j)6_YPz9T>j=)3ei1Vso2w1!&rZ}ek<%>w!%{Rlx{1pOA!Pw3wf^hZ#v z7n^xS6t_~aSBHiU#%SjgPtvdGxBqJTj{Xxt34(!*z5IZ^xLu zOnZSR6U)RIk^mTG0CzNk?HYw*;Fa5oZzhRJrk!vui}9U^U<}4LFTf*e9!!Sd`~oJE z$wDv|!T8o)%H%Q%y!cEWf^khuK7t(@M~Q*hhEXvkhVo(rJ2o+;2qrWh5`#E1M$-(l zq)#w=q+>Kj3W7<^{d6}>S`P#>c&XaTuEB8Z6+Bqt-Vh#%kBuTjLs|)m>BIE<+FJC- zYw-<&S;n;}ZCQ&33|!`01hYR|u46{xwb1?l2!Em>f+_@y|BGWQ)AZ-s#dTGgxexaq`f;J;*~Y!HGC2!6|pOR*cN>(#x+FlAmHhIaXqdD$>F z3Lgou;cNseXCo0Df}jpT9znDSXD;4sdlKg>#w|A#N8pCE(7APr4NGLm66*B+yE?nG ziGuU+3QTF-?+HSQsqC~y4=*4h7O>wpx_N_T?QzfioCU4~#Ig420%u2%=$Km0hmnqBw5#5WklXX1RKLqeZ_ zxN&w1yVC%^t?V{-JG%qH*$B=-a4v%L7O}h7-RvHAFM`;n{RkdL@CO6>-1Q-A9Q3`m zaC+&Qk_`3-_7tWb_6U2F{gFM!9%oOmClSQK-U0*{BDe^_#Rx7zaOqO^CyZxL_6+|2 z9D5$&uVKbuaJhl3w46eBBo*BzvFz%`nps5M0&7VvbwQ2Yt>Aj7cT?JNv>g`lswOI);6Y z;2NZZYYlk@TxTeK%D!gt^BUvNdizQ&^`0Z}St0v@mU9C3DF+eU zU`TG@Mq}$ui*Xsn(FU!?g3SnSF+O0WMX5F2d)M@>!||vtABUPa`N3(HA@ppHJeyNs z&VsYX0TmsBHQ>Aou36Bk4D0wrwwyiZgoSWtjz;ZU4Ud@6@EEr7LFLMfPx{m9Yg&#} zI5!R-R()!s!-9r3E#v;I*q8HfoqG;DwH>^;rO!YvsCA|}98c~1+)BoU<0=|QJWrdr z2n2V1u8QK?8LH%XmYO&meC;+=>5L1*#c}b5x)40jCaxobdp`P+RFG40MI3hU2M|1n;Gu=IWvGF3u}?HoE&$iGYPqglHxBzH?3Rxr_#=YH5Im0H2?X(0 zIECO(%LSfXFRnM&2mh_(>hbUX2GpNM@Mi?i7#`0ec+T+my#CsjD>`nNVCQ^3%1Acc zh%cT;3()*eXLa1TFUltxpIa7W3WvW~ee!SIGz2exA{lPF04?NZa5Fi~JeLss6~Sw* zOvBCPnm$p7^{4cKTfpHhjFXbf`t)r+ZMkLK%72mzw~AYh;1vX~>c?(#Z_91qHvdat z3%3=)>j>V^AKB*P%I)IzVytnyxjhKpLh$wid>XwGyEUU{(@VCy>&>=%;G+OR4xLAL!B?SX<8*Q(zVx&eUwhg~@5a}j_T!6Bhw01s zs?#<4CVhv#k5j29I(*~lIlk@mnlZ7! zG;J^)V#=EiGaYU^(sY*TBGcujD@|9Mt~K3dy5IDm>0#4jrYB5KnVvSiX8MPj(9G4$ z*DTB|$}HI|!z{}z$E?6iX{ItOF)KBzHtS*bt=TZMv1U`vR+z0f+hcaz?4;RGWJvxjDn&3-p~X7=3N-MpQ-(!7uPIP=Zsd(8KnA2dH~e%kyO^Lyq` z%wJdtEPw^HAT6vdY%FXogchC_UKZXKA`6*Cm_@jS+#=Q@#UkAz(<0kKZBc7cXQ8t| z7Q-xtTa2`LZ1KtxT5^`Amgbh0miCs8mbx~UZ7p3beJmxGIhM7SeJlrA4z|=;BFhPu z6D=oMPO+S2Ip1=*<&T!9EuUG@R_<1TR*_cGR_(1~tvXnBw92x|vC6Z`w<@$MvMRP3 zZMDhjmbJBY2kR2+&emP6yIc3N?qgkNJ<@uT^)%~7>lxOwte07@wq9$!-g=AmHtQYM zyL8satgqSt8xtD`o3=KtHtse)Hoi9gHUTzaHt{wJn*tl9jmoCPrp%_oMq^WHQ)ko9 zW`NB=n+BV~HaZ(*Gt6eV&3v1kHWzG3TQ}Qi+bY{3wqtF_*^alJXgk|>j_q9A`L?TV z*VwMLU2nU?cDLQM2KEgU-Kj8r3Kw*P$uuvyN!ePSU!jZz!!m+~f!aX|S zKH&l3A>j|gqrzjt6T(x%)50^tbHWS4OTx>-E5hr-Tf)1-2f|0f--Uk&UkYE_6ZVun zW6#--w*TIKy8TT1*$#|@orArDqeB~qaSk&aW;x7pnCB>T^mO!g6gm1i&U9SrxZH82 z<7y|u$;!#b$s-B)y>qiwPf zc<+hclfCuc)4UtKH+cWzec#8@$I-{fC&;J0Pm)iHPnu7LPnM6;N99xEQ|43Qqw#6* zS>UtI=aSD&pGQ8gL{MZZG8b8jtVOn>wjx)NyU0`IEfR@>M3JI+QMRZ^R4ghLm5bCm zQ5R8HQFl>KQEyRSQG;ldXo_f_Xqjk*Xq9M9$=%DC?=)CBb=#l7& z=&9%r(F@Vvq7S|TU+7Ev(!L(PslH0zA-*Ghr}@tFUFEykcdPGq-<`g@eSh#h>U+%h zgzqWe)4sp>-t&Ft``(ZCWBpA0%=|3;bPj$_e$IX_er|pqeqz4}zYcy`eo8-;Ux{Ct zUxi<1zgoX;em(qp`StM|=eN;szu#|u&;367bN=@JZvGzrUj9D*zW%}fq5fh15&n_> z(f$ekS^h=-)&4#Fd-?bAuk-KcKg6H+AL{>|{|Nt4{tNw&`Ck$X#GKex>>?J6Wjb-V zST2qdw-YCdlf`M`3~{zNS6nQv688`f5)Ts(7mpN=7LOHA6*r1!if4=GiJQbL#9PGs z#3#j<#J`HKiEoPUi0_M^i(iS~ivJY94-f>v0J8w!fbf8_fbRmv2Q&uElz2-5C2^8u zNsdG%sg!h=43rF&d?y(p870w;k?1AgOJ+!BN#;uCOO{JEOZG}mNX|~3F#LyI%Iap+>rSp3qw|gYzx^P@?*%EkVhfULrp_HLZzW0 zp<$u&(CEh-$<}xdpjZ7+&%c5m5vN&0RtVmWYE0LAU zG_oGD-m<|mUN%fNLN;19RyI}ED4QvpEn6?!B-*e3eXUJ#ESIXDO*U2}^x5&54cggq4_sdVn@5=vZs09wNd?}21oHxx?xcxqQ*x}iqc1YA2mH{f7H`x=VdR+93==sqLqnAW4k6stOF?vh%_UN6_hoX-}{}g>C`gZia=-;9r zN56=E9sMr)@8}Qhn06NJ9NM|XOo*8rGc#sc%-WbOF$ZH#$DED15c7*J=1R=0dawGL2;pR;c=01?c!qM(&IAYvg7jN&c)q~yB&8o?m>qx9r|?` z&|zSQZ##U9H;cE3w~DuoA04mzK7MKZiul#>>*6=YZ;9U?zbk%k{OS0!@fYGR#b1uU z8h<1HcKqG=`|+G*>G(0hF~K9jJHa=>KOrI^BOyB>FQFizD4`^w zJVBFCmCz}nHepBtO872eWWtz)@d=X>^a;}vrYFown3J$FVNb%vL?*FKVp^h7msp$l zP2zWnlM|OEu1s8$xIS@H;?~3+iMtc`B_2%tA@Rq=8;Q3Q?k}fCRO?sa6BI#w)>trICPUe!$k}Z?1lcSQ8 zlhcwjlXH?4$py*9$(@pWB==6POYWbn8=TB14@(}AJSurp@`>a-$xo7>CBI01l>$?& zQ|wY4Qre`rq`0SerHE3(QzBE^rNpMhrzEDNq@<^0rWB{tr0^+IQ`V)NO1Yf!I+aK@ zOSMR~O0`L~OLa+gPxVUmN%cz=r^-@eQd3gPQhTKiNu8X!I(1#@#?&pT+f#R?{;o@X zlLphMG&apN%_7Y@%{I+FEg&rqtuAd!+Pt&{X^YdArEN&tl(s+Z zP}-5SV`*2@uBSatdz$tex_7!HJu1C@dR%&Z`l0lb>9^A#q<_d@ zGD0)t8I>7BGgfA7%h-{zD`RiQ(Tw96x>FgaGah8T%6OacSH_1-kV#|)WJYGT%Z$y8 z&rHlr&dkp&$t=&*WL9N%&FqocJF_mcUuIM0_ROC%FK1rOypee;^J(UXERaQJF=oIov)5&B$ljZM zAp3Ck(d={CH?!|#-_L%S{W1sSkU30_NsfJvSB@yhKSz?2l%vQg$SKMx$?2TaHK#{T zube+~Ww{-4JLV?lrsU@4=I1K$d5f-h?%-TLcUbO-+|jvXbLZtQ%UzwjE_Y+@=G+6h zM{J=jtdc|BtlVXu# zsbYmk62gOmv&x)&x`-;C6AM;^8mCxjx@y7tzbaG{DRd5YYWyF zY%17Yu&>}?!Qp}{1-}(MD|k`xy5L=*ppYn}3%NqmLc2nT!Zw9%3;hct3)>aO7RDDQ z7N!)Y7iJZf6{-s>3u_9y6m~1@S=gtru8=PrT{y0AV&Rm+X@zqOn+g{dF3}Y(FI-u; zsc=u>k-{s5*9&hI-YtAk_^9w@;YTG@Qc6~7sX$}Y-&$^ptj%E8Jp%JIrc$|=fO%DKuW!)lirND<`l`NF4OdN3O;b%*%~H)(%~x$w?bfLds1B=+s*b5Hs;;Q6 zt8S_8s~)PJsGh3c7h4s(7W)>56-O1fFODltEKVs-FU~Ah6>E!o77r*MR6MwtFCJDr zu6RQ6q|G4?k_!5dZhGN>BZ8^rB_RDls+hZRrayB0ec9}?17%0bo|OHmD|=rqC@0G4a<<&M z+`inYyluH_c|dt^xvV^*yj^*0d3bkwA43N#u`4^3Z9Kg~Cq!5UsOOfy_FMboI$%+$=$EYK|0EYqyeY||Xp z9MhcCoYtJzT+;lixvF`nd7^oyd7*i&d8?(gtkzU(p|#f9YTdP7T9MXYE73}|?X
a^pu6SY&c)3npIGqp>#%e2e2E4ACS zd$qa)+QZtT+Ml#%wCA)JwZCXzR@zlcEAuKVD*IH{R}QEgR5`ekuN+o6qH=WQxXO8z zO_hr(msYN*TvfTYazo{&%B_{#E6-Klu6$EvTGgg1v?{r(vT8upgsR4>=~XkU7FI2) zT2i&PYF*Was-0E4s`gYJsXAJ9tmz&ys_s_(UiGT#ZPi~@AF2h_=G8XU z!fMBAmumNFuWFy_$m;m&?CSh#Wp#0NMYXoNy1G+!ef8k#G1U{Rr&Ld?o>@JodVckS z>dn=As*hKnu0C6Rq59YAYt=WaZ`XhtubO!^D{FSw9H=>J{3<4Zu=y`{y!kIa{BHhN HbL@Wr$<<4m