From 24023c790a91e1d09989e957dc1a7a5e61aeebb6 Mon Sep 17 00:00:00 2001 From: Darya Rednikina Date: Fri, 3 May 2019 00:13:23 +0300 Subject: [PATCH] Added chat info xml. Some additions to channels creation. Added new framework for hashtags --- Cartfile | 3 +- GDproject.xcodeproj/project.pbxproj | 10 ++ GDproject/Base.lproj/Main.storyboard | 100 +++++++++++++++++- .../ChannelViewController.swift | 2 +- .../Messages/ChatInfoViewController.swift | 94 ++++++++++++++++ .../Messages/DialogViewController.swift | 2 + .../PeopleToWriteViewController.swift | 2 + .../chat.imageset/Contents.json | 21 ++++ .../Assets.xcassets/chat.imageset/chat.pdf | Bin 0 -> 70136 bytes 9 files changed, 228 insertions(+), 6 deletions(-) create mode 100644 GDproject/Controller/Messages/ChatInfoViewController.swift create mode 100644 GDproject/Supporting files/Assets.xcassets/chat.imageset/Contents.json create mode 100644 GDproject/Supporting files/Assets.xcassets/chat.imageset/chat.pdf diff --git a/Cartfile b/Cartfile index a96d1ab..fdc304e 100644 --- a/Cartfile +++ b/Cartfile @@ -5,4 +5,5 @@ github "macteo/Marklight" github "Alamofire/Alamofire" "5.0.0-beta.5" github "52inc/Pulley" github "HeroTransitions/Hero" -github "ReactiveCocoa/ReactiveCocoa" ~> 9.0 \ No newline at end of file +github "ReactiveCocoa/ReactiveCocoa" ~> 9.0 +github "ZaidSA/TaggerKit" "bb826a7" \ No newline at end of file diff --git a/GDproject.xcodeproj/project.pbxproj b/GDproject.xcodeproj/project.pbxproj index 6181036..ea07cbc 100644 --- a/GDproject.xcodeproj/project.pbxproj +++ b/GDproject.xcodeproj/project.pbxproj @@ -17,6 +17,7 @@ 125BD5812217314A008A3575 /* NewsVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 125BD5802217314A008A3575 /* NewsVC.swift */; }; 1261BB93227B364C003898CF /* ChannelViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1261BB92227B364C003898CF /* ChannelViewController.swift */; }; 1261BB95227B3991003898CF /* AddToChannelVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1261BB94227B3991003898CF /* AddToChannelVC.swift */; }; + 1261BB9E227B793D003898CF /* ChatInfoViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1261BB9D227B793D003898CF /* ChatInfoViewController.swift */; }; 1288B5CE221F1158002BE6B1 /* DataStorage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1288B5CD221F1158002BE6B1 /* DataStorage.swift */; }; 1291BE2D2221312D009D3F23 /* ChannelsCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1291BE2C2221312C009D3F23 /* ChannelsCoordinator.swift */; }; 1291BE342221569B009D3F23 /* TabbarCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1291BE332221569B009D3F23 /* TabbarCoordinator.swift */; }; @@ -29,6 +30,8 @@ 12BA4B9B224101A400DF93D7 /* ApplicationCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 12BA4B9A224101A400DF93D7 /* ApplicationCoordinator.swift */; }; 12BA4B9D224101E700DF93D7 /* BaseCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 12BA4B9C224101E700DF93D7 /* BaseCoordinator.swift */; }; 12BA4B9F224102B700DF93D7 /* LogInCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 12BA4B9E224102B700DF93D7 /* LogInCoordinator.swift */; }; + 12CE7D6F227B94B10024B6E8 /* TaggerKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 12CE7D6E227B94B00024B6E8 /* TaggerKit.framework */; }; + 12CE7D71227B94B50024B6E8 /* TaggerKit.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 12CE7D6E227B94B00024B6E8 /* TaggerKit.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 12D7D133221C321600B35452 /* ChannelListController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 12D7D132221C321600B35452 /* ChannelListController.swift */; }; 12D7D135221C42B700B35452 /* ChannelController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 12D7D134221C42B700B35452 /* ChannelController.swift */; }; 12D7D137221D78E800B35452 /* Channel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 12D7D136221D78E800B35452 /* Channel.swift */; }; @@ -88,6 +91,7 @@ 12FDAC92226B5E5400995B4E /* Pulley.framework in Embed Frameworks */, 12FDAC8C226B5E4E00995B4E /* Hero.framework in Embed Frameworks */, 12FDAC90226B5E5200995B4E /* Marklight.framework in Embed Frameworks */, + 12CE7D71227B94B50024B6E8 /* TaggerKit.framework in Embed Frameworks */, 12FDACA0226B9E7C00995B4E /* ReactiveCocoa.framework in Embed Frameworks */, ); name = "Embed Frameworks"; @@ -106,6 +110,7 @@ 125BD5802217314A008A3575 /* NewsVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NewsVC.swift; sourceTree = ""; }; 1261BB92227B364C003898CF /* ChannelViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChannelViewController.swift; sourceTree = ""; }; 1261BB94227B3991003898CF /* AddToChannelVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AddToChannelVC.swift; sourceTree = ""; }; + 1261BB9D227B793D003898CF /* ChatInfoViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatInfoViewController.swift; sourceTree = ""; }; 1288B5CD221F1158002BE6B1 /* DataStorage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DataStorage.swift; sourceTree = ""; }; 1291BE2C2221312C009D3F23 /* ChannelsCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChannelsCoordinator.swift; sourceTree = ""; }; 1291BE332221569B009D3F23 /* TabbarCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TabbarCoordinator.swift; sourceTree = ""; }; @@ -118,6 +123,7 @@ 12BA4B9A224101A400DF93D7 /* ApplicationCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ApplicationCoordinator.swift; sourceTree = ""; }; 12BA4B9C224101E700DF93D7 /* BaseCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BaseCoordinator.swift; sourceTree = ""; }; 12BA4B9E224102B700DF93D7 /* LogInCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LogInCoordinator.swift; sourceTree = ""; }; + 12CE7D6E227B94B00024B6E8 /* TaggerKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = TaggerKit.framework; path = Carthage/Build/iOS/TaggerKit.framework; sourceTree = ""; }; 12D7D132221C321600B35452 /* ChannelListController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChannelListController.swift; sourceTree = ""; }; 12D7D134221C42B700B35452 /* ChannelController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChannelController.swift; sourceTree = ""; }; 12D7D136221D78E800B35452 /* Channel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Channel.swift; sourceTree = ""; }; @@ -167,6 +173,7 @@ 12FDAC7D226B5E2900995B4E /* Result.framework in Frameworks */, 12FDAC9B226B652C00995B4E /* ReactiveSwift.framework in Frameworks */, 12FDAC7E226B5E2900995B4E /* Cartography.framework in Frameworks */, + 12CE7D6F227B94B10024B6E8 /* TaggerKit.framework in Frameworks */, 12FDAC8B226B5E4E00995B4E /* Hero.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; @@ -214,6 +221,7 @@ 129320052279B4300035C7B3 /* Messages */ = { isa = PBXGroup; children = ( + 1261BB9D227B793D003898CF /* ChatInfoViewController.swift */, 129320082279C3B50035C7B3 /* PeopleToWriteViewController.swift */, 1293200A2279D02D0035C7B3 /* DialogViewController.swift */, 129320032279B4270035C7B3 /* MessagesViewController.swift */, @@ -224,6 +232,7 @@ 12E36D8F221424EA006FCDD7 = { isa = PBXGroup; children = ( + 12CE7D6E227B94B00024B6E8 /* TaggerKit.framework */, 12FDAC9D226B9E7600995B4E /* ReactiveCocoa.framework */, 12FDAC99226B652400995B4E /* ReactiveSwift.framework */, 12FDAC95226B61C400995B4E /* TinyConstraints.framework */, @@ -414,6 +423,7 @@ 1293200D2279D7310035C7B3 /* CompletionTree.swift in Sources */, 1293200B2279D02D0035C7B3 /* DialogViewController.swift in Sources */, 12E36DCA22144635006FCDD7 /* NewPostViewController.swift in Sources */, + 1261BB9E227B793D003898CF /* ChatInfoViewController.swift in Sources */, 12E36D9E221424EA006FCDD7 /* NewsController.swift in Sources */, 12E36DCC22144725006FCDD7 /* PostViewCell.swift in Sources */, 123E37A5221F1B3200F6E42A /* LogInViewController.swift in Sources */, diff --git a/GDproject/Base.lproj/Main.storyboard b/GDproject/Base.lproj/Main.storyboard index 90133d6..e8348ef 100644 --- a/GDproject/Base.lproj/Main.storyboard +++ b/GDproject/Base.lproj/Main.storyboard @@ -11,11 +11,11 @@ - + - + @@ -546,6 +546,97 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -593,7 +684,7 @@ - + @@ -621,7 +712,7 @@ - + @@ -709,5 +800,6 @@ + diff --git a/GDproject/Controller/ News and channels/ChannelViewController.swift b/GDproject/Controller/ News and channels/ChannelViewController.swift index ee5ec3e..ad5079f 100644 --- a/GDproject/Controller/ News and channels/ChannelViewController.swift +++ b/GDproject/Controller/ News and channels/ChannelViewController.swift @@ -129,7 +129,7 @@ class ChannelViewController: UITableViewController, UpdatableName, UpdatableChan let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) if section == 1 { - cell.textLabel?.text = Model.Channels.fullPeopleDict[channel?.people[row-1] ?? 0]?.fullName() + cell.textLabel?.text = "👤 \(Model.Channels.fullPeopleDict[channel?.people[row-1] ?? 0]!.fullName())" } else { cell.textLabel?.text = "# \(channel!.tags[row-1])" } diff --git a/GDproject/Controller/Messages/ChatInfoViewController.swift b/GDproject/Controller/Messages/ChatInfoViewController.swift new file mode 100644 index 0000000..d7a9c4f --- /dev/null +++ b/GDproject/Controller/Messages/ChatInfoViewController.swift @@ -0,0 +1,94 @@ +// +// ChatInfoViewController.swift +// GDproject +// +// Created by cstore on 02/05/2019. +// Copyright © 2019 drHSE. All rights reserved. +// + +import UIKit + + +/// Class for displaying chat info +/// +class ChatInfoViewController: UITableViewController { + + + override func viewDidLoad() { + super.viewDidLoad() + + // Uncomment the following line to preserve selection between presentations + // self.clearsSelectionOnViewWillAppear = false + + // Uncomment the following line to display an Edit button in the navigation bar for this view controller. + // self.navigationItem.rightBarButtonItem = self.editButtonItem + } + + // MARK: - Table view data source + + override func numberOfSections(in tableView: UITableView) -> Int { + // #warning Incomplete implementation, return the number of sections + return 0 + } + + override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + // #warning Incomplete implementation, return the number of rows + return 0 + } + + /* + override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell = tableView.dequeueReusableCell(withIdentifier: "reuseIdentifier", for: indexPath) + + // Configure the cell... + + return cell + } + */ + + /* + // Override to support conditional editing of the table view. + override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool { + // Return false if you do not want the specified item to be editable. + return true + } + */ + + /* + // Override to support editing the table view. + override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) { + if editingStyle == .delete { + // Delete the row from the data source + tableView.deleteRows(at: [indexPath], with: .fade) + } else if editingStyle == .insert { + // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view + } + } + */ + + /* + // Override to support rearranging the table view. + override func tableView(_ tableView: UITableView, moveRowAt fromIndexPath: IndexPath, to: IndexPath) { + + } + */ + + /* + // Override to support conditional rearranging of the table view. + override func tableView(_ tableView: UITableView, canMoveRowAt indexPath: IndexPath) -> Bool { + // Return false if you do not want the item to be re-orderable. + return true + } + */ + + /* + // MARK: - Navigation + + // In a storyboard-based application, you will often want to do a little preparation before navigation + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { + // Get the new view controller using segue.destination. + // Pass the selected object to the new view controller. + } + */ + +} diff --git a/GDproject/Controller/Messages/DialogViewController.swift b/GDproject/Controller/Messages/DialogViewController.swift index 635a219..2c9e462 100644 --- a/GDproject/Controller/Messages/DialogViewController.swift +++ b/GDproject/Controller/Messages/DialogViewController.swift @@ -9,6 +9,8 @@ import UIKit class DialogViewController: UITableViewController { + + var onInfoShow: (()->())? var currentDialog: (id: Int, name: String)? diff --git a/GDproject/Controller/Messages/PeopleToWriteViewController.swift b/GDproject/Controller/Messages/PeopleToWriteViewController.swift index 4e0bea8..0f075fc 100644 --- a/GDproject/Controller/Messages/PeopleToWriteViewController.swift +++ b/GDproject/Controller/Messages/PeopleToWriteViewController.swift @@ -10,6 +10,8 @@ import UIKit class PeopleToWriteViewController: UITableViewController { + // TODO: - edit button when it's used for selection + let searchC = UISearchController(searchResultsController: nil) let users = [(id: 9,name: "Anna Mikhaleva")] diff --git a/GDproject/Supporting files/Assets.xcassets/chat.imageset/Contents.json b/GDproject/Supporting files/Assets.xcassets/chat.imageset/Contents.json new file mode 100644 index 0000000..98484a4 --- /dev/null +++ b/GDproject/Supporting files/Assets.xcassets/chat.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "chat.pdf", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/GDproject/Supporting files/Assets.xcassets/chat.imageset/chat.pdf b/GDproject/Supporting files/Assets.xcassets/chat.imageset/chat.pdf new file mode 100644 index 0000000000000000000000000000000000000000..285bf16479af9e5462cc2b480a60167f7f09b10c GIT binary patch literal 70136 zcma%D2e|WO^#@dzfH)8b=mi9U07;rAO+LTx!|pao(~&kwizrExv}s1OnkG>ke+Mey z1Ox@yOJ%5l2(qW33=iIw%t5n$= z-3Q-#*ZUv1@t0d~nO#9vrpjdNwQFJ4a5ULBQcYb!VRj{lpcnx+R|vSgk|hZY=D_9d z3PDlX3|w2;Zw1GQ6*QaOfBpKcHAh_)vhtdrtz%!)x6ZDhnXQoxACy>G{Iue1z2$~W z1d061wOsaJuAvBy|MNH$A<2KamdjB8d@YOR{^h;dEcvhF2=rg%WeMV6pUnXc{PQ|i zwes?{(3cHM^H;UY1I4bO1l*ZU!xgZEl@45Y^yvz={IRs(+6;+ed6J~i0!n2Ic!?^P z^JJw^qAD3GUnu6+ugzD=Sh0W?af--h35=x5IFTvk%2XkP=gZm5`u*XSuSKhSgk{0D z1flGQ3+*FY@49QbS@}0Rw6d}_x;mu|hEOrAQ1ju6C5Ku`8%|XXuCL@snAMz7I9?$L zm|wxj_3MMs*JOL^Eys5&2OMy(dcXl&${TI6v9W3Q(#@~jYpWf$zE(N9^|MQlyY|vu z&i`co(CZI5e5X&{_vt+!f8E);W3Sug#kZbz_x>Agyy-?i{N1LXST&#x(l(gVtESV? zLRpnVc_p(@RZAXe!3w(gxtq8eTm<*5>F5V%pT1}ne}z&;iIsrzq6HZ;|c|INLY>;oYiX4=t$ z>C7K$0WgK))SCLdD-X5RUwC9CxB8m(>)~=7R{0QU9bB)1>nNDn;zkS1K=VUm@pz*M z?kv~eD55Lq(t;Yr3^E1-_8#{arzHN%;)v1ogaPl^fS+U_~~b^x&HSj9)0GGA71~lwFguC-}SeP zUiignH=q9J@S<%_{WX7Bs8)+n9uZR$Xa|6Qq=e_->UyklTrapY0+pI_!Y zbJrDTymL3?wAVekTlc2jiOOw9?taskAN{m>^0i9l9cO=flMBE5J7=_g^TN;mV85ro zYX86+-*`jiYxh5S!={z(_bez|UV6y7>p%70x5VQ2sdFwEJa*caU%%@^k01S{{Ei#8 zqOLgO>W`ik)mFB7V&k{G``tgSy!)c(GLQ7O-|xuL@pOQ1m)~q~&GGK>y>FJb|JY&Z z9_Re{{WtIV)z|&8^ssr#R(EgvzJqF~b34E8-mhML`*A(-T|cdD*V}o=>puA2V~)7) zBHbKe>{Kqz=_** z-ulEB=jfaE{B9*7E_tze+R5sDd+#y5@ZIR{H?16Y@q7Aw{lYV^I)BYp-aA@9IQWRG zpMA$=fB4jq%3b^Ic=vs$T=M9-Yqox1yvIk6JLa72!#Ax{hd+4R4>mrtcrW$aM{hi{ z`^ST#`+vLdQ-wF}e*U4yocHFZAN#@UfBLB_@4H)7Zd-f7w;sRpcL)2AK78yJ_YFVr z$@hHX%6C82{N% zis9D#ee�zk*xxS9g4Ud-M9{8^5JcyZsIM(i`4ZE`8=Zhi7iH!%DM!%syuh&)DX+ z10Vav>z+X#dxSja?Z5icG24^XW4O^NzkK4oPdrCGH-F-ZyY9K@xnrK%=(zWv{GD@e zMc%m4p|>4(BYntKZ{O~1%1K*n^tvrqHhJ?#ndFRp_Wr<5o89}htC_P0cW&|5gTMXZ z&Awt>v@?6%rN|#&{KDS9dUWfJKKM>@v)vCn*FX9L-kIOYJ;FZw&ZCo)58v%`?YBPu zr`LPuWxqf9_C*hW>>=uoE4MsU_|y;g7#&kM5&4sGwD_xc9!~CZIyt}f^uwPaKXTQt zPrmN7_5**t^KIX4UpLwKgOBcZVSW$znqR+Zbiw-fGynJ0CL3KF-ui(Ly|B%@58Hav zU!MHFTQ8_wH0U{(-ud8rj@&)lJ!IEC9{=uPn|>N8?snE;k8XG5NrMx=ZoGTrBQJUC zX!4Xhl=!QkE+2o{Wra_?_vR0L_Jy;)bxG@#yKngA*MIioZ|DE|#;LvU!{WLvKN-LM zte?N|qw{{T_eO`D_4-Snd}zOKUH_MjkUw3#2G z=QZ7%axWaa%_Sdv;wLv=6W;l)ClBzh%N+In>ppqZW4oPo=68t4zCSpIJ@d-X?7QRr zAKCHwr;>QI$MuJ$C%^s6*Iscddq(fR-`}?9Et}5HeLHWy$iMXy+U?EkzP~#E{NY&} zpLP3YXYcdmMo<3ejT=4qi;X(xY<I2(u@`-IXxjdi!{ANF0+3~lZ z+~n-HU7M$F+GyQro9%tvj^U@?bM||zO|CfL1Mhgw7`r}@kZ2PXut2?}T zr=2VBtF7sL{;-|WleT-bvgudb>c0L~)WILh@AlQ|wQoG^^L~4)?M}FF{FZMXeBI6O zI%m7zmk+vm|3~Dfv*{a-DU5FV)$2FC?1+2Io9|NF;^58qEUY{JV5D|?{rS(kpK}jI z8ZrI8xBR)ZG5VP!OM9&d+kWc{7hQSAm9M+h9M(i>0KesRk= z51zBr9Z!sp{pBfR_>mnhc>n$d_=I;q`uHR7{l%AmdC3X;%E&vML&lYzuDDdX=JubH zS3UpDKizqV`Ot7ToImp1qYgcCN8&>3*(2-n1)1TI%u$V>y^KM;m_}T?|m2k z>Eyre`SJI@xbotf7f=4|G37%(`wQjJt3H14^>4p%FMF>O_dfiHyN=jwue16WpL6;5 z?muJCGYIL>{qFjH<&1S_U}rpj#*g~Pe*fd@6+hhKM_>I-_?sQh`LXfF-=ufwzb1b3 z@dG}3S#;YCckgpEH~P_4e>m)}T|Rp8f#)3f*}r}AZ>K){rX9}T=BwLG4%+yj8+Z8o z7mpgE(ssmWj=5Uj!QS!fI~@9@5A5*%9X>*BakPKTnxnTN@A6JrbMP_OAHCVp%{4ck zPo96$kIy;(ce5WqN_*Q~c*KQHwC?d2e%846h$qgw&c5^a7hl?0*)F@qvs*eBVt1Z+ zr+H`fuCvl@*IoIZ!{4*tx{IIw%(_pny?$MFEu3EV;mbZeIqQrMf8!@x+AUXz=xxuP`;o7FR}b6k zv2AyJ>wynH@hJS8KW@{%?Lxj! zdhbv6eLnwrrdGf9qdVoUT?NW`d-|>~OIC=l!%$ym0t@yQX?0PJB{Hf}xTb=r`uRnIwcbe;t*!0w0Pqo<# zFS==Vd~{#DruL0frtBqO-|5=Ze)@cIHx%0?c;8cS|Ag-y@x34Z`p)0o|GRa+ZU##5 zg6}+d!Nczgnh&8*eeucY;dR%4`T8erJoZDsy>R^N6P|j*ZEtw&|91K8NtgfR@?$>x z!-F5#emYpY|J%B^^uhzba6tWvuLaB*-w^ix+et_E_kz}U3%mam{x$#Pr}x^Q*z;S! z1TPlX?DCCkbJxFj&l9$L-4{2zZgcIDCqLXT^*{0J1ACvDocLHi>HhhEKkssGY2Ek! ze%{WfD<8e;hu1xQ-J76KeDAum)*QE!NoT9)?qHw%Y; zPvE;||8~kd?IUu>TApQ0j~cxFhgKE3WpGFOgP;HSj33%*a{rV2|NfR|uX}di+4Hlf z=O4Rd=TBVqeeS{=9z13)?sn##ztL_x`H2g@zvstpefHKzCeJ+f1$<-kyzeDi+rVfxr57ozq9 z_ibz)_tAU*(zxndH*CG>HqJflUDlmzsl#4qZgkSd`~CgM^N)JpQC~UguiqSh^VV+_ zzIE2oI~@Imqn|rQJ?0nR{@}OIJa)%p4?gyVy(2}`P-?^srR1NIqk~RbElvFogKdO+NS9eD+3X&(41A`v-jgwjVG*xcrCY56?Vj*K>|O_pRrC@w|=COV0b_kH$Z` z_x%3(H~*Oa@#PnM;DU26+~>kmf3nk0zID-d7k&BSEieAe#V=lxUh>SP?xnxGY;@TJ zmw)8)-&`SGam$tMD{r`px$4@hD_37}P5zoou3dNSPky@Qr$4@qyzWQW6W5>jGyG@g z{v7}Lxi=6uoOfgH#`ABYZo1&+wKre6i+un7=-8|2FvTUmyI;Lt8&|#KZ4>`1D6IkNo7(%A+?uw%=n9KJGsLm*0Kv_iz6F(SO+e z59d7b!6$z9N9m6b{>lH-i%%Z%)H|O#_37->mp{{b=I&?hXaDlt7oUIU^QZlp{PQ(0 zh%Y?+m-$~e`|FW^+v9H+{GIvxoiExizPQO&8$I`#r~dMVFIf_-_YjEdoAAph*jNi zt80XowmT~)n!l3S0~UgGgMV`7B6}Q zGowqG{wlz`9(-QHj|+(U56fOI7|Y}ca%G`{mzTZVgO}I6(86mjdvWL0t43d0_3FJ> zz5bOo6sNOQbPh9y8tk`98FcnvZr*}mc;%6QRTGiT;W?O}Dd8&pAT`+Kb1(4}uPAZt zzA-@grWUR!+Q@L$?fk@rm+ZV^sOxqX@dnaxi`v+zrM||eTz8n7LrUFw-}PIrjn~As zYXjC}CAKXmSQD??SqA)?wg&vXdKun%Wicc)*X^8Ny|E%SS}Vn=udU$w5PJ_%EVq)Q z_Caw9=yWe&OMrGlNEk);MzJ-S?3!%mC7y2Q^;?1;*ZQiyrcYohQ`!cS(Pg*(^g9T6j6)AD>)a{YQa|3H|fC*8(lAdCAe00K>Q*c$eJX z2(>p#c2RTA7=8Zk*_6V z>UXD8YyHxn)?cyem11$#gXUItZ^%OsWv9V-kLA)90yjMNPZGQ1nXNd0`w#v}&#TJ+ zM>Q|^^rd}Uz3<9?psjj@bvwW05?*aWuNc9q#R8YMW^SnAczp&Z7V~=5rB`P4uMdqi zV>Ax`@u>~h{?lU{jF)be0hoJf0vj&=r{@fNm1l;j37pO6+q^lTJEMFdKPu<>e4(Dt zm*8AGAM~o@NUc(-T&3pqQe)Q0=d*3o;_?uZUwjIAFn;w@&hNHMoc}<+z4|ctwDScR z%H~UE#Z)r1m9KUem-9NTYM-0M_2 z)5ZOTz?TQU`l0{vXP5*FZI8gB%lZ7g+*vL;U+?7GjSg5^IWI3(U(2tqt_=pg{ApM6 z^LiDirB=+FV0qx)s9yT#aZ7>id=ab`=w(tOlyQlSmZrQI(Vfk7y%x*eBGg<_d+^vac9ha1;N zgLpJ3Ckug7r8ciLYMm_46)OU545M;NmpY}>R4)D6kJ8BpqhkstbwggWzqGODmqg# z|84mTfl$e!MbW~If$h$Q&VbNOuW7on?0Agrc|;QW9u&bcFf?E$`C@t1#7bno3pa9P zE}qtKOB--iv=b_`g}|0)q1DjfIJ8eFg_;s7ZIdSWI7}3@sv0<_!b(N#>13AFZI{L8 zWR9@@XpqFP*rAmmJ1|mcA<(B>KF(y}AnSQx8i*W23Weh& znqXv>@L8QuN`pjmORSoql6r0~mHXXMpv-!;651i_MKHV7_nU#BF9b3e?&{72>Qg8r z+b(S3Qz|M|rZJ6V@KKqzW;8J7F+sw0vrz=xOhT%o8SWdN4|N@Y8SIV}aAP5` z;uj&OTSvoEKA=HxK}KQ5HcYQ5DpqxbkKyVp!$e-UA{j8;Y-6~iDLUP>vEfj3+99r^ zdRH-$P!&hZO^Hi-1_G;|1&UwhtAn!V>v?A4C)If@fc0bv*q-1s63=jxKHRHkkWxn} zG6>3wikB;gR7;;4Iip^&i?ziJbrp&vOUe!f4exs+RgY+&ZHJwxUM#c}F+h+`-D?hq zN+ax$vEk?S1RA5Rsv!`MIjDgnP?wK-tHUR;oi zmfZKKMl6sPOyYIeEV{ZNmUO#Xts+RjSdUn4h*eTba!TEz*bs@hlS~sX z_F}xp39hja=+`1foN9fz4m&DL4-;AHOVydA`kv~#O(*Uqq7q9buA)b^7ROBH4O5sR z##G2!lvVHzA5$t)>cjIqz7Qzub`Ez)*L5W;N^q5z)gfV(DO4lIC1Efw`higR)(^f_E0v$|7)gc=?a65b;*dA2+$0ik+mT2hjEf(;^}A*4(loz=VbE>}zf zj5QKJ0SFzOg*ho`JZ!^W(Dmt36 znp`a)1+AXMX|*{)aoX?+H5RhqoRWAIEX~((9RSYInKpVYLP8-C>^3zUC*v@iZFNh5 zkPEs?Zxb@PlHLa^8oGL`<#ffUQFSp-o>LKyAxSpGxfUumHGCZAl5$ck^o8*t6ZYfA zpr6TS{VGAt84{H+p+qb;C7Q-i7?-iKHm&$z`!QDvrHTMCGhompZ0m4pxSBT9TUA#Z z_}#Q>8Me#S!0D%zR=uazvj|reg?w9I8g>Cnp=sYsO5_C2x11V8!K^M(ZB!#sR24Kb ztOVJtFqZ2~K52+-i>5P1FAt884RoU72#m*`p4OmYSz62xAJP6ioa#O|QBy)gqqHCP z{i;);3-#%gn3slrzz+qXm2|+Pu?4fObf6Oy?R$i6rGrFlfGz`kTo-wHA+RagX|+Se zM7@%4LQJFpFVTg;OxsmU(^;=3g=|zs*mOJ?cNM~|^jMk@$-b4Xh^2amY#5FiMeRJ} zMN7lxV3VCjxE8iN3R5}1WhYdrm_y}$)flIV+Hc2$$WU@!kRWRqaEqSC1O>Puk#@xB zPJSP!tUDAWPD549M zux^q_2IK@T1?%F3r%OXF?g7h{=1YNT*`=m_kD|aqnDjlf<~RxN)$CG2wff)~HEdg= zs&ZylrYYKPC>@*0PHGfhB$9F?QU=yE@!DQ4Y2m|#zzAmHJgtucu8mf^y&PnOL#$*P zoLH7)qlrz3&U_m5i$0l={YK1qde$RZn1kmfJf1~*3$uY4iWoX8E@wE2Y9TI(JZ4*# zkkd*?v(BV$xi^rxsFwH;+O3E!jgO#VI|n>UB&Q`Uh59)y7ov9P4g?Xk`Cbv7^>gN8 zhQ)@FEegZ=xI`Gue336C)3yg$z@xA@m__0uSlXVgx}srgAji7Mh~1=6uZ`_W$S6jp zoCStHWK6V(EpwZSSkL8(hR187p6F3s?J9zwz%#XJ*inur9YjJ+G@r!8a4Mss20|o} zr0fv2GWujbwYWggJfMXbZn29Qk`s!98!+$pilD(N6B4onO)Lt5u8^ z1x?c}3hKd5l|mp8=2~9a%C-7HbyA}Y{6?B~#lSR6F-`S_3DGN?=xiVvLMN$J^zrg6 zn?4iCU<*`efZ+lpw$cis)w-cV$qbK}4RoT5eu2)?MW*bDB}Pyb)2%6SzR5(D5^zNk zZZxB6Eat-QVurYCqYT>%+h_)NteGm!%(2gdWVO?oigG8z71dO*6{7%r?l2ZIt8VSz zeOn0pw|D=`4Kgd~I80!86h#dV!xhw9rXq=jmr36(E4j494sPD`0s^TAve zD)~|%PqM(kK(<2`;if}EI&F_3HK!z&hofVk?FtQO)+TzLJQ4&!Z)mv{VtMqO(B%!k zE}6w3uaB#6T&na^xXzM<&N?x8(k!g zF0o8Ft9}`cg`8mcz-58hO+zwlDJ0rz3NXhFBNsC2@Vq$T%Co6638c_fELN;$)pk8e z1jY0{R8%N`(gR^+u_;}03a30tK*LsQAVkhYD^rkL`E4xnqxQh=wKJqy_A?gSE(0Ig zZ5R1SGU9^I&zQ(;Y&>$nH?;k1TgWbBu~2G^-v4LCV9tmy>q`OS)%O_n(}&Q}<&#>H+$ zh&rv7?&V8@FlpffkVJt7J>Y!9OoXeL7QoptLhubj9b)CQn_%Upn-L-rx61)C9LS8U zE|y&D(TV1WQ&<*sUSuMt1Uqy@=D8?EUCFM_$qB@}v?5YYsQW0aX0kOum;@mHRbyzL zuP13^2J>SA75WQ-V+h3CM7JGR!pE|JDZY_^AEp(-!0DxmlmRYiu8F;`DI=yxoZs7m`~z1~eq;9$bFgl76 zswUi5`V-B|0jn8t5?p7PTH4aVlXP_!;nEDmC=0b?88Oi6eAdnlZ8{v-3xOSh?xO@k z=2sbpKGca40fE~su7ctTiV1Yoz?>%O)ldze@Rhp7kc(2!-c|-nb*nzM-fOp z6AN4`$;0(l8bQ)>$$5GcEN8$&Nl`V*6zaScHL zSyuqkFU1KI8$(+uTpLKUncPOFTp2C#icL=X9Z_DAX?4_T`$}w1>qx%d&5i*WuSgMy z;*AL8fWMyEGpMG-YkOP;hCcp3Gw%48NYObLWa z0Uto312Ocx4eu+NUqLhrw|_mRy>qSaVG7i4O$Xiqf+Sl?Vg|kh(yY8 z3t&JzrX(`S1mHBys0jk6rGC5+Sj9?GG3e9TW(QDj%+PL6(?)yVqxfRe0=b-S0)*Ab z`Vwa5(ry7jYlN66l7;t&6PL33(3Gs313vN+ehJOoa?Fe;agRnZ(3R~IfV030kmBGC zs2`;@k|63zPB2I0NY;zBh+{i=Wk$2}R$Uy{%h@tl?RCuo<29x7(y()0Fkf}x6-cUC zApDVJL{yZF3jBpzBwLI)WV;54rdFm_*JT$4P&|PbaS$AaR+DSAa1)aIdZP#}V~U6v zViN_K;E0>Du2@!PN#Ig)-lw9WlJ(~H97OTaB=m{QjBYgt=45Q~oh*tV^^}?9t#&+f zvL-^1T{2kc5cmU;2})!ZwkUiGtX5H=0YHfMSZ71H)~|Kh@qjHhVUe$)kyOZ=rjf0I z?az9#lvW_VhL50u3Y1Yn7XqU+C#QtuHM}lH_9P2JN2Y1EU5KQF0n|3#sz*X$p$pt~ z2GAcihJ#m2o`X+_%0TW62-6xD3JnCE)5}z($27H8rJC)S1;fVkic;y}09=t?i1M^5-z$e+5XhXG@J)v2IksyyC34E;0k9a14Zjejiy01Kw#cRwu8#pso)Zdy z%88vt{9b-)3bjFT5+_qVjQOd?`cR-$glvo}z%g`49E)r@1>kHp%LwSy8ZDher$Z?2 zR28g|VNxAMLEug}o%Rjj5W0m5*Og`($R|7y1TL@as$nF9@ zO~6b24CiV|M)m1J-knu=8miY#-2sk5O}kOpUERhya8dPzK!;2KX#|X*h6`wdhqdpXCT6P!k`;~ZFHLwz)_6ga8-6}br z24s-BrFu{7BEDr#+LAg8%d5n(=M}v%;FlO+5ia=3E(Eq33Doy%T~&-+NBO$hiC=;CWmr8xIb1X zR;tum3YEdYd4dnH>1zDz?|- zicD_ed6377L#g7InuWNWu=NUo;Q6WztO^65C~3g09KZ&3z;D&s3xN@vW&*(k^#XjD zwu?dr_-nI((L}G^1Id*F@vYTl9>zTqk)sMeL{omM-Bzqgch(utvvw*p>D$fqjgwZu%cE1p@UpWQt}+b*4rXNNT!+> z4Hz+)o?mD5*AVOMnJa42*zysw)o4ua$aSXdM;1QutC!K3J)UJ=t7??a8WqX06AL@od)j+sn+MnzK7%GvQi{--OFb z-lQ4=fRnOrmT-e~wV}dFIZO(z0TpkvX;Tp~KxkTHWYWojsH-*0DcNCL+^}i3yd?0*N`6wDHiaU_%$Ohm z*s|b9CPvPIp9A!~@3es;7XpD7E|7D1G9aQ7(VX&`GV1CvU+IZr$FVfI+$-@+2LNq1 z206Q};|<-4RHERbvG3SoW(3E&U%^1hL|tONY6+gYQDT~C;N%jKlX;fxOs3Vm7-}4F zmNszT9+`nntmRAiWDaVV^N1)%D2#DpJg}^iTQ<9z(=Ioblqn#&^Zl`Rx zJi)DHO)6BINRFpLHpKEuQ_TV9$R8nmS8AlOm@USBJ?6OzU>o{j05bhXL*Q)^fhCt4 z$hlB$kH&%SHLR$jw3f91$gPK&+}Ls`1ufIZ3D%)N(C%GmH_((4dtw!mPypb$BRu-q*{QN zDkV8mxT5dZN>!1TIg2p?_6o2G3W$~%5YqVEK!#iy6jSJ?Fc{HkD<9E4!kR**d?lQ5 z)ePn@DT1jWA)s5qfu|VH*1Dh&2cryTgs{{vh&o~xhe;(!<^(mt&R$;QtA2fGIKy@ zu5Z!(Y@s@xlm~zhs?@4PP-P2VAaET};*-z;U51d7%iq^lLsG0}q=$RJcVOe-=r z6m5~442wf-p~EtXL{Kj33Fah^_auXFg(ZL1_Us5B0&bz%aqJvOS5ZXiQ*OL5J0Ap5qS6|RwVXeZq@ZRBHWV1u}tA3X_ZayAmMyc zq_Lr74e)u@bVP^=&O!O(V+Ses7h0p@wj zm?BcK;xFBzR+q_9l7S!BTngx^i*LuI`YhRI8R61 zutY>k9K@aGGJ|avacUAqk_L?urQ@T?JhzxQ&ezpCjNKA;h3esXx2tX8G84#RX1&p|_i3$i}6UQ2bIIFQJZcaw+7RVmes)v_KS+8a=4hEPM6q1%1>}=Hx zIxQ0uxI6&Uy&z0+m5hm4ksFi+n1fW3c}b`HxH;t!emtHPGgK?cjj|r(0$-=-js^9b zQ>Yg$3x)j=5*O{M>?^VvhI(OCQaI2F#i>R|V1lY*mGi9#lPRiQtPYc*y9NIk*oRC+!?u0pY&2$}(#6x78mVEn9rq%ThjUeL|19|68e<{GFLn}tvjWAOKQ#c^lQsneoa60Cv1n0zmT zc?|&+LrQSH2CDp$4dH0oD{z8O=j41yFLl`S>H35d`Wf)g9_SDOHm-x}e^YmIa5{lq z3?GZ21KBOcA`p;~C~R0RlxIkHvkMxpmY&V?(rb^c?cM3Ga0Zik8bJR^II2}<{Cn%%U-ZB*#_|1&z z$Y{-vootb|`1VvTPjWQb0=rUyIv{z`T8v~yDJ;tv=s9Xqks|h7Bk~PO163^2YPk(V z%o?5L(d*3vEDm5j*J^{J-56x!5j2qSHYh+g96Tmkc!W^7p4{yd9o8j@BxwYg-wd;b zxL2PuFu~iDUIQo&l9nL=@ZA8S&cl{M&e9g$FKa?5nP{m8HF9>q0x#BV@vu5Ev0^2h zbU~4Cm0<>P$YEGe-{UZVLlsw@;8L($vW|tWm!Hwo5?d+iU8>pvfoL#AGJ|oLfS##z z)tJC3sHdP_%GPiNyXSy9PdyJC#Cb&e{288IGizOwiGj z0S^9Ei&O#82qdyqFv>$Tzb$L1CA(a+&*P&p6p9%a95Z{QP0I6W3O2kCJfQ+<;83J3 zd`VRWR7Ghka*>i_YnIIsh~q$hB_~7Rn1~XBYwTDmCe?ABE47gpNQ>+mAS8hgWhNqK z8wlExe1<^0QkPz`#D0=tWLLpl+ZkH|G8vQuUpJh&V`9yyU(%+4^=&lu^(4mc1Xg8>mh6dMzEWpx@3r&*fO)?e1Ur!C#Bxg=geOXT_^+6GV$&G!kI^mHqu1Q>ZGB7~G+0bxCeTYpf~sOt0cCm676oc* z9f}L;?Yd83)@BMD4>M^bP_FQ2!d{p1u?hTbRdc9@dRM% zMJ_6KD@xt$&2mgEw?=7xEY}oZa-dOLn1G&?bj(g$sD=h%Em9Q}(B$xX~lE|UrBksj+jb4XEAgP(Ymq9Us9#{EH{s%y5lB|DI24HyqsY*>tn9r zf!ZHn^L15*88}sZ$%cDbu0uvN`0I!iWVe%nHpE?JFs-Xis8X-%?IEz3meLtV-EqCF zd%eL1;Ny7|1S+&LRsvOKx)@BtdUn!ds_I0rIR=d-LSP}g%nCry>aA+d^RpgWS2BgYOnA@Gw_qo<;2 zI0X&0ozTXI(`1qdr8&)Jrjta%n}AB_%AmW3P34Ye&&g#fg4H|>@-YgRhk3Kdp>wK< zj_jET;DnS{a*Q{!LFcgsg791d?MXUl2(^6-RQpAX(pthaTLD;TB75_vrGJp%f zK|#^wlx94sPfWgD0tseNGQ1STHVyn|w~R0Apk1L;Qs#0KK`5uvph8;1gj}nN6lT6p zI5lummk!p~I@7+{HTjZYdmLzi1jU~&yqY?}X`9Sq-~=>BSTV$hky;7;zE}?D^=#@j znjSq2>phSFP!jL7Km+?S>S2ijbz#t51hBAexw_pIx)s(%Eg$rVSpT0WS+_`oCBqdEOQJooHLkaji>;j zB?-Xi93X|}EpVQk)h_4~=sOYM>CDw6(BxVR`YtPHLl>j!h&q!KCNA`#LXB7mgc5+E zlQF2r27uQ|Fq}e^9wkEVT;>LnELoZItWZz6QmyWRre_(2HB*&AZ5#sReLutrB$u{8 zGnzJ%mnpICX{Kxs%4kmP<845GXA-YO2*DV1_YMU{b0rECOWU^1xZP>Z>XLC*?S_7< z2RGVMf=(NWJ`H^pwC;J!K%bw~i?YSiNteo$;+E@`>iUE(fYbJhd(1}Qq*1Hx(UxNr zG&f}Z8B?f+Zq}_1#POu8rHouIFT1LMxs4$SRBuW~36QP@U-j`2t+Ik53G6`8Fdpel z-8x+{%Oi*H5Qxf8^H6yNj6VbRS#Po8cn)yM5b>8}+LW%^Bg9U_T$LFR1&q%aA}z`` z%9nx8`VOR4C!l}T*R48eEGp0H3cwZkxa3tZ1_r(Da>F0OU7#G(9xXP7?g_34Fe+#y z@L{n37~u5N5DaXh{|RhjEJ;F2)%ifop`|*;5c<^j?;2braU;cDa_=5Gt+=Iq6KadO?mOH3F$H z6VPkWaZ%hCQc#|>K@Q6HTI|v}fQU+G;cj_oIcmlSy`nN`1vX0|5rOhouL5|FzyOqk z0oxcP186nZ0p~PEqy+a(+a`p5R0MrP^%m&MUxv}Dka1zqB^HR~q3KSG`Dq_zKzTQ? zfUVErMi+2Q1CY)3U>0*q0)|#mP&m>EW1`V@BS0#6MQOVc@Y2VT^qm6x$5Fmjhm>Cc(AA|fL)GV!YEcJI#o5b2Ji?Onb5 z?mhRM`@FCtC&ulO;jm=3&+_gVghrgFPfQMF=6Z|im8TAdi>ohPd%qo#+{zy77q{z@ zvje;D9}mh|tiWiHc)azBP>Z_!(b2%BUa>3J4D)!O+B0&{UWJ`acRPab9D0W$2Xr-t zoA(;7(pjh;2%-8$@qx3Ld){m8`Q7G3hjYS6Zg*%NcBf1pwM)_BPy%OT4GAK23Rx1x z4U;H)gHVvBc9N;PHLs2~`oPGx76Rt|iQF3jUZ5r_q3vFu*wiPyg?Uza!Q#ZVhy%x6 z2t_D~1YqeLnV&8k=B#t&!zc$m1~gXo;IHE%o5@ty@AZ_akVF8#ZRJK7#ZYWs#CK|nx6Pr#9aA1aMZBJ=hz2~RMAUIu zq);;T7|$~HYd-Q&!R@v$7n-Wm+o_`)qmvw_IoT+I+bP1Pw75K1byBoWG2I7ymU7KJ zS45n+9-^oAZI1Gqqh-C5rnBh3AK@>65Q%E zPK=!U0_7P*~KYpqSs!2U>DJBvHZwVQ)9Js&ji>Y|ucYmdFpK?QRbP=SrTxaGF? zrabEBvCh-Oe6^hq8jT)u$f*uuGh(-P#-QR6RQUCPqnRmZ+v@Vn8;*u#*uGi$v})P; zq`h1&V{e-3$28PSBUlX4pj7w5HmZb}b3iNxC9`UHstW1L8MR5?Nzcbpa&orN0%*~? zW3WqZC)_|S8ZPGPs3(Icxg;55V}b%S+>{kf1~f3hCzBP~xiU#3(#;Me$<^p%8xOekJ7yMWlR&p2~oL!I1x)*eBOnoVsnaF?T@ z8I3vnL~d=>7!K$?W6THhY!6jPezx6_twU6J%?~v_M#xl3GL4Mp9J1_7#lX>fL6h(r z86W5l$ySUp2pzEaH`beAgCY=7ZpEtwqN54%6UvobY?*v6EPF2@u~)MC+U(A?V^hKU zbmsGG%L$89&(tgEeq4l8@hZSAss_cBtE5LP>5QLGof)G_-J!o4WpsZ%vi5_T_vQMd z0d$*!F#;E-Nb7e}@D}LOAjS}D(Z?vZjA&%c=R@`o_O5}r(&CbLhN9EjX34N4DzcoO zM}4_Y9t$y=%7?~)kd47E$Q@sFE$G_lm8}kHu(c4V898%h^T&uvA1- zRGi35vhK02nyZ~49|;kE%ud$@SnjtIuGjuBKCy9|lZSJ0s8(t&4a2VCyl7KavQ+oVn+-efN*;eB*iwk$7bLy zb2P$Lu#!$p-Zn1li+;RBIp`4J~f>) zXAw~_f8Gxb3+gsWvpXPJ^B|`0tb=uxQWdP)EbV&x880QJ*}EhXmyqOj22OdeSi{?h zi}bp!ryeIzS*5K43uz$I%pjsmSD4U{mT8i_Quyi2nUi3r7mMAs83mDH$G&o*TRnS` zFzt-8z=Ya>t)L-Zy&0tlK=10DGE8iV4vhd~A5VH6&c?=LTid4{)7K5$PL!;;|fD{@4eT~jR6IvEM z_X04N%l(r&3s0!^J5(5LBa0#g+KHe*)lRv#Sf>(LNQ*%TMqxIeDqtTwZt3%gJfO=? zUes{StqzhYv_ySn!1_79kU~ZJb*cQ1{(7_W55K&x_eA_U(x`X%|Ttk0PIw z`=eoJEt3^mjb)srxDdr(%rrB20nOrUHTHsR)g{z9^i7?Ch1&E83*%MZ)0jo~k4q%_nYytNjfQ5MtoSh-eftxm#8+A#Z zc*wP`BrQ;zI<`?l1VJnM=nl`JK3PlU=(64E5G7&Fq*1;F_oT$Ik&uQK@wC#ILZULa zz|2DuW%KHiH%Fs|)V|K9b@F&Tva=DNwv*+!OY;haD%T7VdUq3r7ytt~-n_SBfVDcdKca%(MjtN`mCowQ zg*I|$x=?Zo0B4WZ7vudYRfmhk?x6Q9Nju9g`c?=S^k<)+YLW8uIjOwe(maM3;~hA9-+R#M32@ z*K%nKlg_jU{n@1D*nNF6S%D}$Jf4AMv=75Nqu+FAy~=AqQiGKP?>n=Ys_p^g!#q=^ z=0ev27lchC(nm`=<|EzNABh30p;CQ~SAG*^HacsCop#=?-$OqhP6)qx6}+2tp5Gj@ zPL&yN?YIcMGo;=<&hn}DC<0Nyx7HeEBylu7pA(H{;ok2 zi8R`9kmi*KDq9Sk?)zR%&DFNFkmGuh6Qvo<&wKd1gs>1C(!X zuZ>ChVo-3B8c}T&m&0f|*Vl^OAa&7HH)hX(Tv=;S$2q9$$RbFqY;}O)#Jua$Q?vk? zl5$^+e89oM<#s}Vl!1B4m)?Mv^O%fQLF6tB+6ekYe}@p%MkF@wgAKt#c&TtPNLDsO zK|X38BMuvDv za$&>oJUdK|SIx{ru&uWyQjVxpXNxJg?Gj|?1)%)d=3uOd!#-W$g>txB9lUqdK}7lt zl=m4hK|$yGsgmmIFrBMPPmUW&Y7@sO=~ebU6W10rkibLd4W}R3QrZt1`$Pq20GUQT zm#I=(<_DIhk-V?L2RQ4-0mOr(*UYsBiP|(j#b5}VXy1U96MGN+ROYQV%6Pp-j^`Hk zWxt2`ArbvLy>0b}bjNSSSDL4KI&e+UZVO_fqN;BmBAYxZJ`nZ6d`jj^J6!KnbiUHM z$AcSX{n;gSi^a4TG1le?SoCIP39xX(g^DrR0Oy3H7W;8*`8~HFC3mJ@b8hKu+w6Ah zspW8B6pV0bZlzPT%y&Wf6?a8>B*9E76m(j-oe;EWCs~=jGZ?=m^dwTmv; zG3+9BsfF6Gtm-|?IhXV_7arC+9-_Tz4&690gI=_k=3+;^MvQQE290Vdj%w#nH1W7O zBz%WX>7eDn5jmj}Qfel99ID_g1g4|Kp6#Z3XV!>NkMjmt`LHIs4M#=eo+9*!0;EL7 zG3zl5Q!wK!<05yBuD?BXgJ6l$o-v2K6-1yRF##f^WYaJu^4ua_)y;!l5YFeOVS1)E zq}i-JM@5Cfl3Vwx>UI%DR#%-)fCnv2GqABfQrR?s+TU;Z?3`bvUN*m2@qW16Ue4>~ zateqv1(hf@8bg<|NW{N4>d?(7x1at=|J+Vkk&>>K2|S-rA&zgVedtkQ33cJ{NJ)LK zrKE&x9mAAug&Q(-z>*}FQJ^)2_0gDj#N%{o9SRh>w^WTRbqr;rjno#2jwCHKm9n;{ z0p#}(Ie`e+oHh*`m@hRkfOsVc>##OAFVF&s<;+_N0^U=+_w&6zJh+2XBz3`(;j1ZFprOM$#FpTCNdeTgy=xlGeV4DN8+OKVI1yYQ3 zygjnDPDg;vPQVOzKyCNIC2pB9)?EjcEe0W?LQI*m#1eL}<`UMwvpGLolY_B1EoFulEeKO?Ck#*(@p&SZitcF(1kc?=rI4tRt3x@FU)0eGyeBeL z(9OcIq((k5Cb`OY5o%+FL99KQ_d=8b`-(QLvj7UsudIGtbXv)jSA1$VCdIO~&=-*M z_&bYJE>74up>Qvvwj>g2SrP;qABQ4j{;6ng(aHo#{lG(?tQyCT`0>);u2>2Xc!L?u zy2#Mw=@o#px`B>YSb$kwsCr|S4{}M~MGB^!(dw-u^e2+L^4y$&Bx=^~`}W9M!)>JA z%+*ecd?x9(V0W~F#2O<^nyUfT?q4-|r2FZ}TnmDL0yH4kO^|^_#K~9BRTp_a0>gj` zS4^FNC%S&I(NI%3o`dbayB|$EL(`q{#(2FQErQ;BMxuJaB3T9&Q9v;15VCi&!A~E= zEeb1YZ!fJvRzK;pI&w&d%W`ns2dEb+>2w$Ov4lAw6?VAdv?*n>yo!e~hN6$x_spU1 zGVx?NzFxy6iTneL7O|RM+9~)`h-q(+j7}Y%#i0gP3>kh1h(A%ov{evIys$b$odZ4L zt+pTUf*q(FJOvt4dozT#rxU1HUh>A;9RbiTl*UWsU~e`|8-2@AS4#L)ZZKdsgWu5= zL~lYMl_srfnJINbJzR^1N$+QNm~FAz2;o>wY%_(DW8XBE`{-Ib*xtg`O^gu2IS@$o z$sUBS60&94pCpW$K^~^rgJouGN@tbz`c@R2MqMP(v|Hrrg^gP?qop8#5^;{(BPURb zbCgL0dvIKA@yPVUsi!rTkulAJ^%>1YycKGCF0zZBnQnZf9a9G{G*^yE+nR$XO^ZjX z4b0rCf$_{9YwmCr^{ByGM|DXWE8>(g!-+>IS$;|zensvQJlSo|&~=dCqMd;3=g?h` zE6>OA;-xWjz34IZB7j_iNrb@r+-|<>hMWgALCZQV{Biq=otiS}l6LdMV!hYWc8C)J zWJY9&qV9DCK}jLWb|>wFoN}ngFtb<6y0EWWo7%d>d>@Rv`vaBg0%`5@BMKJ+aDTX+ zW=9vdjiswlL}{q4SS_>%qcTW5#57LT!XaHM_Bl^RSgAE8Jd;7|U{35w-`C}G9o+8FP7mNY zZ;8fQ!<@?PIoF^XLImcz)0v}Hns%xX?Z1@ASa#CEtj=M-B9Fht3WRXTH+&Sw3{;FcZN)WzGFt0@Cvwv{$F)<_O*qsf9Q1Z>f$gqM}R5v6AfrRQAC zY!rHTrWi`D-BBi_v~N!q`*V#sw3E{9_J!kqmWjijT`hWS3Dz%#`ifd;sCa>tvKI@+ zJkV)sQZff_NZ{{!dwDVr`x_F}!vWn}P@JpXtb9SOt-;_qKu@)hIYe3Mf=hMqRxSW) zk0SeCm!S$}xa53{|GdW%J6Y8LTbnIW##+6E%`a6NXVqX@RXK+wXlfIujJ}@YY~%m{ z=;a+Wlv8@G-Xh}6!$sN)hOt@oc5Sh@cV^d(ruMA8TPM$#;|U5eqe^&<)ZreWdbS_#Ksrt%nSOyxhX&K^sZ}K_L!bvZ>sCj(a6#4WZ7fVt`zkbH z!a>o@uIQ7KaHi5nqpubMj!Q!FhlZbyi6OK}!#esZA)ynQ&Xvdj9OT<$z8j^eK+uAo z>i)!6M1VT66SzE7Kn0rOEvmvFmqlV}oqWCphEU484oynv-EuPuGbTr?EKjy+d|Y(t ztKV4%m|pgg7*8XfhRVWCCIwVimx~>T=&Vt7E3sFh$IK=(UO&(F{`HWeQlpIP*v3Oj z?lfH5Cs3t4H``Vbnd0m)SH~kdA)&+ZXNJEZ(2;epPE&9dz@N{1+=-GKV(P8pY=aoS z5tij_UWaq}iE?ZXds`Z%Gd6>C!5)HQObsrec(G|=LEzCO(0r+KBFrG@lm)agl~y5& z(W79wLK2H@7E~*m>5JPVqr|jX%4Z0c(UU^BR`PW&Vxl8xj3d(L#q2_h{g_$zlF@YF z9xGgMritgoU#J((NGebe3-@3;-bA%?SO8~HteM)%hmhE!g^CbHC(D*8@afd;E;_85 z!XXgWOO^sg=Tgm4J2gO**`gJ$0B|J2_45QI*pXT)8s}C znNC$Nqphf;6AFB$nj;@e*S(7?q8l6V?_sPMakvgHGo~{U`pcFPPrHYUu>`Cbp%Uci zm`N8{1+w8OM_&Tig2N1b*dZ@uy5n6L-hSQ%I{jK)hF;mE&&n23dQQt(q^ckL6p zJ(#Oq+4HZ;8sR41+TPe6cH3zJUfT4$MN`j4fcJfj1Q+DIPDjiw6Hxh}aT`Okk@EX? zBeftW@wE92ZLQa3K9-y4j<@EU*vD6Jo2lDQ^=yDCKk?;zdbV0`}tSu;O z(8Ii*%R-w!@&i|HZp?;9%|#Wf&C1{dxek^9Y%CTTd~ym96LkS@0%moaY6Efxn9!a;5^pWg@rMeRr87@@ z!|O>5t{Wj6NvfeuQa_)8B)!pK)LM8|VF>7}pbE3;RARh_p0{^Y2OTiLMKRe^=C@6L zkeOt75!(tn6^F7Sw>`s_j>Zh#-gpkw|7b3rg^5!a{V&{VM`pS@+G1N6hiCjCZ!Cgq z)}Jh+1A1#hXtZdejTG_|2X|8S-z>vcV+M8EYP3R=fiPStnZd@PReKvr?wPhN_dNM( zvV0@<_wJP5kqu=PE)p!^Jc{F%!jvQ8dd$jGK;`R=d4R@~#CtMB3&#E$9+%Z-hooj= z^i^ZlG$sUXw?d0T0|`_)(9k8?T#q7QS)559EXBTg4n5hf#23fL#j8` zjW}?lrHBIC?X~GGI-G?&iHJ$yt@9qGSSz-F6s!g7Y6TF7b9ro!hD;Q+9Wfc0BTXQC z0JSX|7jH=}neyloa6KG=sNYUVI}5ZCJ#I)epH@>{qPoZRHrSqqv3~BR8{5>-0Ygya zjyMB$Af$~wp*HPNXN8&^&4e_G_5wQIj)kk$u}uJKT;4{RRq#gsaeopEnn}*a%x!4B zo|OPlK-YiNc}CNS!EzUoeV&}pM;YIy$-R{U7V0*4SO?CYT)&5%#op7(3y2vgr>=;y zAY}sd^{mifJY9FYM?Cfw-BsjrK3|fBxmyipsc{%w)`%=nXO~(iFINr7`gPEbz9lLr zlATgbrr}i-FQ$|ylC+x7Ohwy~!6D36IsSPHEvOp{f;(H@qkCA^4UWG%e+=e{zb+6_S$@}cwWH{Cxna(k?=HP zO2O+`P_h>D1SI-lwn~&p@X;)jW4g0Wn`+>9udQ!YJa=K$uyoWAlaMow(N)Cv2(TfZ>@d}<8WvD#CQLmsI4KJ&?b(qwA z8wv!aEjlP2wS9Mfrpau$2sL8S7H4RPj`S9K%!{F)vXssh+vHElVw=ZZTlYL|>ks{Q zHZJ>H?8Tr1sJ`7{SzcF-_1HQne(8g-c28+n@&v z35j#rzfcOei(8XDDyb}N*DZABa#y|KYIY4!=s4AP*kn^Q!th#~=oYdm=ISXPJwr+4X=zucn^papkwJA#Gz4d71WD~45 zMQc9Wd5SS;EYM{sy_Vr2JhCIlS4hRz(NC!sQD)YbTL3v`V$gWeOn80Z0?1r8fz63$ zpK6>KD@7+$<8+Z@lFYqPummrm9qw641+Xb%SfE(qu3dM8?*${B{$S62zAm^dT+OM&g+nR88)55;l^Jy{nOS8?0Pg z(l0X;-86YpgNA3&mU?C)h$a9eD6F`GLeUHha50PL2^wjGr-f7=$l+~XfBXdqsK^rfIV@kUNyIKml4%uQ!*|ZlU-=381|KNo%l^|rbt`o z&|9QaF5nSM0_3j?g@tytN0OaG4ZFAP(6NTY(`w1ii1yfxqQRNMZI*W*ckKZI4zp{X zT3q2dQ*nW|&-`ehtay*!*YyXsy4JxQUcc2dj&1O-4x{_u82%y>n|6 z%Lm`?R1rgrDy>m~p0On&v@gsWHRdoKqbt_AnP2S;lF80IR#kNNV48VrigNh8WoT6$ zkZ!P!6YDah)VRUvH6x8DM|}^?ey~5% zo^Z8nQ3b9!sH`BFAnnyb(Be{12oSa$tXV!J=3;jYlpTfeG{`Tv6AsT%$W6(hXY4^V z#l0mdLTqS^Hfr)#gOmAb`1bQ!x+cRxOFPGh-A=P<` zya2(>IbK!~11t)$e7lO?rjRLIWx*Fq&&UjH1Cb~mi7idgh;_{v800-Rjo90|rYWQT zMN5iZ$Wk@jCvQ|^u@{fn=_3GJxP)_66}4sM7)r!nm|Ml z*e-a$?RwSj3!!L*fu3%U9M9m;2i$~eP(GMgjrcrLJsx^didkoTS`MVr$?fgPDKF_3 zk~$TYg0bSL zt)|wj6Xs=%dZYwkqp^WlzrrR8$ri5+WRc=g0c$F*t!!{)kh8-=87I7*J0DJhFNyr8cOe|l^Eo}%sR$l%S7fC%`vud z+io6**sE-6pX3B0j}A3A-2oZ3oV|gpkZdrktzTM;bQW7fG?b_VPVBuo8vw0r*+BY6 z2D84 zxpwT!^06Gd+opO2Nia;nQt2lqc$$fH8Mw4@-3GZ3^|qoD-%d!gE7Ob->46=6UyFYA z(-kU`h)7SziwW;Aha`Kh2}zdPtY)KM9J|rGo9Tspq5fVLUe#)3BWCK7D)cEDV-*$v z3@qMGgV||IoaW_VJEhCa>Qb7sse zg=)y{$<`s$1?rYYGd7G9`fQBczId6Vr!*wA;MWf(7Pc~5>B~#)vDFh)G4Y0(>rjs9 zhu&T^%Qc$#4aMKMIgmG907v1b%;G&H(_rHj$|&k$JKozJj)q*1*EL~JpU+PC}r`qhd(BEC0T3~69<~{Z!yK(uCtYbUXMWl}&A}$--cZi)8~3*!1C3$zl}ShF7~$zcSvG@xt=j=;Ir|rffA8$^s|{1% z-FJ@v-es`A#BbQ9KFzQG{`nMl<9%VAFLn}rd2t8+5!>!wzxYEneAO1Bx|e?a>HQDb z8uqCzMsIr#|75SL_v_Qq#(Pqk5Bm_`Kl^;kpSKvTzwn*cgIasihH^F^*Bcgdi>KL- zqAS`TY1S4%M#VIi9_Rn!@ZY}1dFLHocAynM()65Se`2VgP@jI;fwsPr+qZuEBu6yy zKHHhs+`gT9ON+g{8ctNo_w4>o?I|IV;~XQaO;hwXh~d7SJ!_xt&h zUn~&Vs`{HX=ZD9B;hP@Ee(~9Nj=hiNW1zmaYjs=S-I%-jL*=la_uF4t?hTqYK7%@G zyGLR;?*Csw;+VfrRct9;8{$tBRzC8bnUG@tG$H2e=l|ZJ3B~`eCj8MN{GGM-k#cS` z&-D=(9=~?jH>cdPw_kq>)4$SN|EDg3-)2~kRqTsZ@q4RS?VZ0^>K+Gv@!78r{AaIh zKN_o7uPXm@#^jH?>Hk4v@`wH2n;4UNMt$vm?it1K@I9CHvmb`1W1gX%W%iSv+Ym}5 z(=4vytWVPnJJ0`2{NNj(XLRKk=hN*^1N&(BN8p&=r0}w&I>V=)4LRQJHh$|HKRVAm zvkymLPslv3zj>;!zVz+c)TzDoj-RNY?Kj8vrTVV!m);*tSz!2%AN_Rx#E^d{ zZ~s-nYW>mY^H(cC{ps%8FYdlxEndEOI{5jgsegg`?taGGN1spnc$_cp`ioQDZ88mQ zY*%7O7=h2n-j}4W)6Y6ad0DGIwXgQ!_nh>nF^21q15mBgk*_atze?zTT6$p^pMUpj ztDM>>7=rIUC#~OldGy<_zkgI-4cAngw7a_g za^&r!-#-%J+$WmjUJj~$`~73!P%D`6aa8^L?;q!cC+~~HZomHKQQw~nkI}*puL&(5 z$A4q7mkIc5L;mLdRX1?^@_&WJnAaGLsn>yO5?1#6{U^H_h@oHJjkjg4_IN3O&?@-- zeOQcUgxAcmy7Kj`$@sTxvioxQPOSFuaZh*RmAeZBcF1d4OC-sH=n1!%6Q~Ga(rs) zarY?otr_p(H}S(e%JkU#I`q`U6JJ%YqaNYWTQeT;l^4IszANj!YU1(tmGY^HM?DtU zw`M%yX1pp-e^(gGqpbGS%oFY=f690?eNRl@n(=NC%MBuXSH`37bLc7KQTL;sG9D$q z)qtf+5l~pDrrx`9o3C2*9{%q+%IZ_bqaKI7HS66lviE4c2eITC>peo9C#`qS zP2QUIP!zheA@Jk7VncARa-H{r(o^=6-fCSB0NLGqn1}BuS*NMjSdYFR^qlqXZu+fF zzDLN3D$#qg-K&C@*Ab(sM@8wa84rQxxQaHHzp(GhdX#jJ9-mqFsMnPjs0WGut(gx- z8~*}`4EbJVzB{P!<`ag`Bl?v2n0o;7l;@=A`*Qi#%y)}A@z3%XzB1qYN%+v4@1;ck zl>Hv5##8otvv3PnIZs#)=BuJk_6`NU`ROO#Bf)2^_b9SHWxR(h<*m)V+sX(3`C`0x zV>?Q^SKOX49`&HpK4m?MyvM3<&3q`!j;lp)`OB@o_kIfN6#tsZN6~kO`;`5}`)mE? z%=d7eDD}OomG6O_JTv_s(dtvy3e0J=1X!!_#i3Y+tz$XH1@@TxBfHtO!#)H z_tlZ64LV89W3D0w)N0;~;_lxEg4*=jP+fmdVQGUzD zdqhree%euw+U8Tndob&tGv1>d@Rp7DezGg-l_KN&e0|P%+*__^SIKb|WxgLspL(#! zpPG3OF!DL$3Gcyp53lm}-R7&pmCv12o->~G9*jr7oAeHQ%)X))N>lf+@hRic)O#@A zBN%)0Gmm~aiD%p<{kl%1^jmF3`c-;<&w1az?H&mGQ?`2@g^PY1_74S{Zx~Z-VF$fk z{y!5{teM}{zwe5{c$Y6d_5R;0`cJJp4;=m&vnB-qH$ z%RhJr_m_V?|LcEz`U`%-PLrM;RX@ef{x8f2@ zI!h==IH^H0|4x$s{xH*uT^}K34yJ;5iOm12%v8 zm-;hSq_+k=uNhMoWQGc8g~Qxqkt1;J{I z>qy;hQ|z@mQjeCJt#