From e2afc3ea4c2fe1586b7ee8ad610055c98d89c1c4 Mon Sep 17 00:00:00 2001 From: Dawid Kubicki Date: Mon, 19 Nov 2018 16:58:23 +0100 Subject: [PATCH] minor changes --- Friendvatars.xcodeproj/project.pbxproj | 8 +++ .../UserInterfaceState.xcuserstate | Bin 30102 -> 33870 bytes Friendvatars/AppController.swift | 2 +- Friendvatars/AuthController.swift | 17 +++++- Friendvatars/AuthViewController.swift | 27 ++++++++- Friendvatars/AuthViewController.xib | 56 ++++++++++++++---- Friendvatars/FriendsViewController.xib | 29 +++++++++ .../NoteBiometricViewController.swift | 30 ++++++++++ Friendvatars/NoteBiometricViewController.xib | 33 +++++++++++ 9 files changed, 188 insertions(+), 14 deletions(-) create mode 100644 Friendvatars/FriendsViewController.xib create mode 100644 Friendvatars/NoteBiometricViewController.swift create mode 100644 Friendvatars/NoteBiometricViewController.xib diff --git a/Friendvatars.xcodeproj/project.pbxproj b/Friendvatars.xcodeproj/project.pbxproj index 76736f9..ae30e89 100644 --- a/Friendvatars.xcodeproj/project.pbxproj +++ b/Friendvatars.xcodeproj/project.pbxproj @@ -7,6 +7,8 @@ objects = { /* Begin PBXBuildFile section */ + 123D62D321A3148300D5CD74 /* NoteBiometricViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 123D62D121A3148300D5CD74 /* NoteBiometricViewController.swift */; }; + 123D62D421A3148300D5CD74 /* NoteBiometricViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 123D62D221A3148300D5CD74 /* NoteBiometricViewController.xib */; }; 18F5657D204DD7AF00F128ED /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 18F5657C204DD7AF00F128ED /* LaunchScreen.storyboard */; }; 48DC83E42012A5D600F82C5D /* FriendCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 48DC83E22012A5D600F82C5D /* FriendCell.swift */; }; 48DC83E52012A5D600F82C5D /* FriendCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 48DC83E32012A5D600F82C5D /* FriendCell.xib */; }; @@ -28,6 +30,8 @@ /* End PBXBuildFile section */ /* Begin PBXFileReference section */ + 123D62D121A3148300D5CD74 /* NoteBiometricViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NoteBiometricViewController.swift; sourceTree = ""; }; + 123D62D221A3148300D5CD74 /* NoteBiometricViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = NoteBiometricViewController.xib; sourceTree = ""; }; 18F5657C204DD7AF00F128ED /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = LaunchScreen.storyboard; sourceTree = ""; }; 48DC83E22012A5D600F82C5D /* FriendCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FriendCell.swift; sourceTree = ""; }; 48DC83E32012A5D600F82C5D /* FriendCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = FriendCell.xib; sourceTree = ""; }; @@ -133,6 +137,8 @@ 48EA9AEE20117C6000146CF7 /* FriendsViewController.swift */, 48EA9AF020117C9000146CF7 /* NavigationController.swift */, 48EA9AD3200FC48100146CF7 /* SplashViewController.swift */, + 123D62D121A3148300D5CD74 /* NoteBiometricViewController.swift */, + 123D62D221A3148300D5CD74 /* NoteBiometricViewController.xib */, ); name = ViewControllers; sourceTree = ""; @@ -248,6 +254,7 @@ 18F5657D204DD7AF00F128ED /* LaunchScreen.storyboard in Resources */, 48EA9AC8200FC22200146CF7 /* Assets.xcassets in Resources */, 48DC83E52012A5D600F82C5D /* FriendCell.xib in Resources */, + 123D62D421A3148300D5CD74 /* NoteBiometricViewController.xib in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -315,6 +322,7 @@ 48EA9ADD20110EEE00146CF7 /* KeychainPasswordItem.swift in Sources */, 48EA9AF120117C9000146CF7 /* NavigationController.swift in Sources */, 48EA9AED20117BFC00146CF7 /* UIColor+Additions.swift in Sources */, + 123D62D321A3148300D5CD74 /* NoteBiometricViewController.swift in Sources */, 48EA9AD4200FC48100146CF7 /* SplashViewController.swift in Sources */, 48EA9AE020110F2800146CF7 /* User.swift in Sources */, 48EA9ADA2011063600146CF7 /* AuthController.swift in Sources */, diff --git a/Friendvatars.xcworkspace/xcuserdata/dawidkubicki.xcuserdatad/UserInterfaceState.xcuserstate b/Friendvatars.xcworkspace/xcuserdata/dawidkubicki.xcuserdatad/UserInterfaceState.xcuserstate index 652272cf1c55ae5cb630c50701e25c9101c5a13a..602167c26d3d5823a87f7229ec76836ea1c779bf 100644 GIT binary patch delta 18406 zcmb7r2Ygf2`}aNP&UB``=^#mywrNXC_uhM^O*$!~l(s;jZ9)edat}kM2m}x-@KoJ!MdCyH61oh|t^HQ?zS>N-VXFvD8eg~YH0q40;qPIj#=Su>> z=J^>Bh5^JtqJ|hm)DnY>}PH4iblmqr_?AJn*jLj<`j9Pdp-iA$}!(BOVjK6Mqm-00-=W z7&rqL;0ioIAP54zK`;mbeGDKJB!d)?3erG2$N;$@599+i(1QM80H_DU!3fX<^q?Jd zfU#gAm;?}*3|;{02l~^U~d=> zBVZhihnX-7X2Tp<00+QisR26w}E;XwoZ03LzI;R*N=JO|Ii&*10q3j7LQh2Owi z@GkrTK7zl%U*R*7AgxF{Qbx+jU^0a4Lxz%JWE7c5CXvZxHkm`_k_BWTsU@q)fn*I? zM-C-*q@El}wvuDWvE(>%5@{fLaw<84oJktVH^}wmE^-fP*h?NJkCG?JFUZT}m*jQw z26>bGj=V+QBOj5E$=}I8DM&FCOIcGklr7~zxlpc@52c`#lrQB+g;Nn!Bo#$PQ*l%Z zl}cq(1yngzK@Fm6si9O8HHsQdjiDw}Q>dxb3~CPPA)>LK+r^@t{Eil%9X_M-#oAi577N=MRBbQ~Q| zC(|i(2AxUg(s^_dt){hfDP2id(f#QGbS*uY9zqYL+vs+>gC0eXrpMEh=_&M7dK&!- zJ(qrso<}dG4a?}|^a^?<-A!+#H_>m?o9Qj|Zu(t%5B(v1ls-lur%%uy(HH4U^cDIm z`YL^gzDxf=-=pu-59!|-$dC-hh#3dQk#S<28Fxm?_%kXdfQe$FnHVOPiDQzOOs0@2 zV$@7E(~s%T3}6N_gPBHVB-6^Y85je@Gl-eYOkt)obD7tedCYuf3G*iN7PFRF$E;^I zFdLaI%sb2h<{)#3In8{;oMFx~A2S!3%gmR|73Le}Tjo3FA@eiyi1~&2mHC5(tQBj` z+OY1dg!N!OSua+``m-uFlnrCU*~Z!4dyYNN zUSKb>pR-rk@7O!+UG_Kj3CD3ZoIB^k`Eh|I;F1L{D=2mlSxDDJ!ZVR`SdxzW0y~lmTo#D=MA9Lrp^V|jQBKIlx z1$UXd%6-Fq%YDb);eOiOH?c>5ottPQGd|@(IAmtG*Z+mY7@1K#)!s?CWt1A zkZ8JSwrH;L9F;;2;G>LA^mw~!J{p03Jk7iD(R}2NrF0&!eTARR&*k63mzMF7#-Et; zeJTjQ)r5x75~V~LQO-+v58jja;=NZBl|&WM7dQ3ed-18f7B`K;W864}p+@XkRi~?O z2+7OLDrjsEQP+-Y99rA1YYoY6Y^kpid;O2r%!a`oLuz5mCM zytcNEhPDfYh_E88i8^99;kPD&s3#hTA;eH(7}3Z}c^NO~eRu`0Ttkc?dJ9GYKQHkXS^#PP{=ZCYIp-!F&kchY#h$_;5Z#=wO(M-=6>B9xwkzR%eZA zZ)j<2)U~vgS2Q+^ZmTH5$I;Z*FGJVT-l}VAYG`e%%x!4WViWN;v6wrJC7e9+FKSnvA1k| zcuZJtSxjiu#EF)E?-L(9pTKa0PxxzwW5kK)hjNln92+h z#3i9&F(2MZe8MOH)$loSS!nozPwB*GhEJ?UELH2;8`2wf%?<6Xjdf;{87$Nc8Phn} zvf4G`rf}-li5q+xpWa1$jc3R(&mkGv(a<`!q_!2)u^rR?FQN|^(%6Krl+?E4_ZG`k zw~70NUpH}wxJ&#%+~YI(EIymh=_Vc!KN3F?4|zi_pU3C(1p+=-eQQHoLrZ&O%h1v~ zoxUMsm`>N$(2AuEpIm!ZZQIx~U0zFLdt+^TgGPXnA)IJG6QVTJ>D7oGO}|R@4Rwt} z8tZC>BNY=hViznI>9y^3!vygyYZ%jR8ecY~(a=)=3GtNplXwOQ00?UU0ZHrxG++SR zx3;Bjn64GW>1&#`tf95JZ?iB9KmnA5A)ZhIe?rbz@qKw$thGA?RbC@@ z$3RNkYwJd2=$Zw#5HvwWZBs`>jo1x0ne=Q~Yc19gm|<|o_6Dp5+%nU1o@-ozGjW@s zHhQKTrW;+{(ll1v(b9s6p5COZ8_|X}y|=JbPg@=ygI5z+uxGp&TDB7gVz4Cv;UEG; zf+!HpSM&Y&{`>%b;A#*{DDgfLKq6m*_u$6Y@$JGc1hz9l%^IVxZK-dl&uedJ#z1{7 z*V7D5tqryHV}_<`3@=pq_n&yA<~e0w$% zk~OBGu0s&=td>!Yt-6+Gyr)cEb8Tabd7Xivt{c>VL7)~4=7;hl_-4L^*Ixh)URDBtMlsdAS`MPt>t<6jK=W8_(pzsWtc;_OqfV)W8PIWXfeh(OX)74Bevmha)Wu2 zkwiRbjj5F)@G)^Y>2K^_99V} z%}W~qU#TulYi+F^+XW27HYdX~{Lcoz% zVj@Vig|SU$-fVx{jHkH^rC=-AwvwN0-ck|R(IxQGKS4*wL{FS(KJ<5hW+mSy1{T5H z3-)1C2;SqTcY^)=4D2fXZWCyDA85M3VekPzlb^+7nT+mXF+l?isjX{B@4!;k&?JAB|cIE8I3H~~)bbNE-g z1X7s@6KO24O?NmCE(*{u@UL}(OZ+?xeYvei!skG<3VZ=BgD?5{{OkN;-r}!;tKcT# zxC&eY*TD^b0dM3Nt|G$mF?`G0W3n&8zTZRJl+qu-kN@a}H5mArcfq~h;G-0&(+3g4 zKMM(e15f@w0zAbdp7BfYh&S=P)9e(Ekb(?`3u%67C!xd*k;c7tz5}5(bS3;YKpSWa z?VvprLkH*xouD&x;g|C(_?3Jo-^H)uyZP1p8h-5tLJ8fW1Z&iIA|86fUQh~Uc(Qf; zclh0vcSRr+feZu+5Gce;#Mz&Bgu$?nuyP2$z7vM>8}Masai3He38RI}QT)bE7{hPk zBg=}gNcZdtCcqTDE0_qAU^4$UznR~%3Z~*U)A_AuUn;2c1!@T~1b-Lz|TD`srhZ%q4x`>brU7fDBOxIC2ETk$g-LmiyID&BOhC|^n z*a(O7@A3Qi{rrJ$*aVy5aH!)C^6&Ep_~RJ)wRC+793>zh%^%|R)s0a_!6mK1*(1s< zbB%`v!fzFv04Ksp{9*nB{>UoGLj))DAM!`}V;JO|j4)&GY%hal#0)so?BH51%z>|( zFDO#=*93mCFbtdzvD#Pz7eFIi2p7TE;T!x3{v>~jKh1x{pIHN!z&GJra4B4d+5Ig4 zF@KIf&tJfdA6Z?k(=}(;3ewgu11o0iQ5uso+YLXQKfLCx?cddi1ICAig~W!2$4144 zhDJulhDSt3^p*ujMu&t&#Nywv5m7Or_!VZ>25|jz8dy-j4LA3oPU)HT1sepn!yTY6 z+(pFmU-6${`*VqRtr7PzzU35YfP1hxfqUV5a39>yf69N(U*^AjZcgw?zmF|J3jY~D zT+H<7dtxy>iZ6!qU*LCyJ5eR(2F2FOUOIL(TFPYg3*#EGG7vUxNi5$@V>UDJ; zf{`oN7WQp#Y{sriZL^-g%3tHLmpjBbFE~f_FJAtOPQFQz!Y|-uazH6|m)lEpZP@A8wfLmGz+k_@KZHS#v25SrH+I1%@F{;60S7*^Z<-K?v|v@; zbKoQ(>A%Z4$q?}*$NwN`6MH_&gqXC(UI}T#-{aL5g-Y6!ZvU60lkTL1^dLR)pEucy zzt2D5|3m=iO7VYN1njUNoptaIBz;JKEW4zFRFb}=AO9o&6aSF^xtmmx0c0Q<#6RMH z<$vQJW7+-8bGCsD$K)d;_+NOv8C*2xJwYRa<(M_G7Q{x>mDej$l_t3(#NL+OrjY4` zV;7l9rt!b?e{_)#M(Dq^G$@4(nN?z~a!doOkgWWN* zh*V>Dj3(j{u;!m(Ss-{Kwlgd3g<3^`s94&2L3t!V;Zy@G&P@H1XW4MfCX%@rB* zmne|4$hrUE)YmYl&PTveVAT){t1c9{V-W&Q&y5nf*g&rQzjzgvlU?L0vYT8DtI4(e z9t4~b@IjzA0>1nW1cIL@5XcSWmVYxfyXzYt0YHBQF^k@)&viFOV0>OXMfyr-U2{BseT0BqAy*CNexU zCORx8Iw~x@w=66oG$b}QIy?s3mFUQ*sE8P|9U-rPx-Rl7@+tzo5Rl>>mRIHmmktfq zSH$%gSHla|mHe9g#$sf?U3>DxRY`zFv;@iep1f@~G6)1BpfH;mGqc>sa!x)Ve0-zEQ zNbEFeRUC{s;K094*VK@0N@oe-h^2QLm4SPkoN+1>0i0|z?=uHS5>zgghd>GfY0sT; zs*o!Ao6~GqMY$77sub^#cS9gm@U%zsCIxO;q>}3Qw?V5Y>83HEFO3;Y z)jtQ;fIy}N*f0TDBZakR76Q2#n8B=Asb*^AKNe}li(pNdEi975NA(qAvie5shAC2~ z40~z0vDCzWjGlx?^9bY#qx1PFoRYO~fUS@E z1<|73qLx}js~myi7etHd#G*xYQLCtKYBd5S2xt({B2fBVv|e=KEMoItrpoXU03nAq>Ixp)L}t_=3+7kP5@41Q%9*| zHDZ5E+DcvPh&H`(9W6G#=3~!N$Ay^K-?)O7;NNy4bMKSXsRar@x{EqZY+Im6b*9eZ zIX|Y(3Eo^i&hr;LP@fpf6wUJ3&`=pJd4$R$Vr60Bv7xe<@JLxG{xki+t;QRQP}#rb zk6-jGcLXVuNW)jeL!9z-1RlT_7n(zGjX50W%c4ON&h0b<9T*APz?-;syb-*EYs6=8 zW%vsmtvWqWCO#&w;sWYT@*9Jxf{OJkd6)cwypQ$hL-H5$H(XEsgM4aYV*C(*Cx zv*&}tr0;L0+y(05faj@`OiZd()CKAiv8@6Z3h*xr3x7&oC;Zk^pHZJvUr?8+FR3e3 z@mJJU>KX!AUTY8-gg`98{HZ}yqS5r@^KdEOl zL1UM51cFKglMyUIa0nj%RY0P#C~&xeW@#LSZ>Bj~L|f6;v<+=b+tK#4n0BBYX(zH5 zjSYGe0xbyW5okpKD}zx8j6q-=0uvCJgaD80|Jb2LVCrVtjdrIcvFIq~= zXgTdeD`;%8u&=Wafi48zMqoDr?;~(31c6HkV8GZ({|!MLXWAm@fldEkVFn#wHXqG3 z;(jJevm(gV<+)EqhnQP+HR5Ws*VWtQh1LjjE6x?xnp!9K_Hz7dY^=Gp&A7F9#S4Ry z%$GZA!~;!(1_w)C7?f^q9c_Fyxc>`-a?F>0v^v?Mtzoaht^XrMdch+>EZMU8Z*Ik1ZE&G6MDL9cfeUCOy^vmn0RI0v0&gI& zxSM{1UQ92c-$Y;u0?QCsj=%~FT&({)Y0Q;xTHvl0;I5(93NHlSLSU)+9mDk#2Pje= z^uTqsth|-pVTQY1fV)zFyGwxE`A@jyIm@8E^g#h`zG%v z0pmsi<7ENkCLCG58X*azuhG~w?WV8OH|U%6*9dGzU<(3U5!lvEe`|vCJp$W%;OsQR zDWD$+aDGH!hXu~h{|d)~;t%>yGm57Iid`55LkK9|!6-IGx`#0|V}(&L48t-UBSPR^ z1aLUA7lHS>8EXLrgB8ub9ux<9P%thS1%s)yzXt^)!6@MSV7c(ZnU`s%mnBih$QXqQ z1>+;2I4Gd-6;K?)D9%J-6oCxR8+J26Om8Nb!8+mcicPX#_q( z;0yw1yP0wm3hd>4+=Jr01x1a3Vh{r7EGX*!6UA_**^Ht|Kyg7pp%YMC#3-y|CE-jv zGgd&+!Hi-?Gg$9`g21N;e1^d1-OM;r?ehpDra=@f7+ zW0o^3n3V|JL;!Q`Hwb*&&2*WlgGK4P9_oB=q0S}&7PddPEU>ozCv|o+d(9~J2q0e=n?Sq9x=eh^T8 z&)jD2Fn5t0JVpSI#ty@iZswkeSQz8e9%4PS5bHMqCGPsC1?7`}McK0oOR|g!8cSnn zkigJb4nuOTW&^HCLohwWMoes?r(<8GN2zjNI=@39l-hy zWNQ%gM9>RCZv=aFv$ZCo)gvhFA)4HRbcBGk3E>h+4^rKK9^EK*tQpoA0hW(Iu<-)H z6#v3i7B$N9tZ=gsixBkfWTznL|J-jA3;AJohRK}q6Zhl~+!p3=AKhFdl_ zo1G_YZVvk@JC}V8K^1}l2nHe;)XmOk7qCWlA%eXTj6^UBK^)@Oh*d^;s*`bJ%BnK< zEp{1R-xPVX%Mrv`D)XUq;sBTJVpky;f?(M5$eUfmZuonI%5Ef-?Ar+T!Ok|W5Jefg zQX`e@cJ`frbli<{cu_;~(NS7INU>q-ch z#LR`I9>PDy(bYagdoGmBljep>v`f$#0 zIEU>%Rs-2M>4?j57GiJ`&RZbHi*+on7bk_25zIj_SEyuJrdM#vzX)l-5jN+~ss6em zTnOUAiT@~EaS>c37sW+$F*v^n^ARjSun<8tg2m?i;*FX~zZ5)iGvyb@t;<=g z=*CBchlEFkM}|d3M#aWOL_~!Nb%Dspkg(`5p_~~R8xx5$F+F^;R^XF$2-aaf2@T5+ zZqf(qDvElJBa7R_z5PG-zm400x58~laA+sD6T!xp*<+7cMGUJESD50(!8xua+&&Ix zB;&!C`YZ5y43a8W7|WM7ZXSAU11L*KvR1+YaO+Ac7)NL=j2^r{UajG=i@nI2}Q( zu4m%kQ9G98u|Oqq5lOJ-5xI)oMD7UAMsN;-udWh#h&)BuaL+{$pVDGs)A>zWkq^+U z7AZtZk*~;4^O9TMBv^y9)*z?F&5(qBv2~zl;+li&6wEuOs+|35z1ttUL&ftlV^mi)Gzx z5!NFASXWdaDijqV_$GpHA-EK4pH#7V0&TqPg^EGi^IL{RrJ~AznTTF2>MO$HiZ{C) zK^&3S5i(y$$j%EnNzp*++>VEZueuiWx4@|tVHL3klc7#jFA5e75e+pFqZ7d{Ob-OH z$?smn;$o<1gs2JEL-3@yB8uQ@1lQsqa2lrigF3nKZrvn*WTFUmWXCN?}}e zQ-vRp7{Juvha>8lAGq^=q7k1%?3)XP! z@WTbWxZT_y{9wU;tXJOWzQzJ4#}5URiw28y_}>3EQHN+WK9}*L8KPODIik6ud7=fP zg`(F*Z;Q@Z5mr*G5UW(HBC8TBtyQ^IrBz?65msZY##>Fa;;klIO|_bDwcKiz)oQD? zR+|h~o2|B5ZMQmTb;#-?tFNrCS>3Su+Ui@YTUNKN?pocmdS(r*No(4gwH8@hTiaUO zTRT{LS^HQASVvhWSr=RPwH|EUY(2_)jyNC@TA#E2 z%KEDHHR~JJk8Kzmk&U&DosHPW(MD?HW23b3w=o3R1lh#eB-kX`q}rt0WZGzK%4{lZ z`r7of8DKNqrrAbk(`wUhGsG(@9^3q3^VH^< zEwHt+wXwCc727)6I@<=@7TQ+XHrwiKr`yi4U2VI?c8~1`wr6ZVx4mq8#r7-PYqmFR zzqWm3XKS!?wez&|wv*b)?LzJ1>@;>2b}e?V*v+^Bxcy1{OZK1I ze{O%-{)+uo`|I|P#d2}Ec$9dlc(r(gc$0Xuc&m87*l9JV>^b=c={z~PX?VTU6Q=N!ItxZ&`%!?zB%93D9Q zA2HLr_)YnoIZ9s?{wFhb(T6OI~O_EI(InFbYAVe*ZBkIBhE*i&pKapzT^C} z^CRb9ogcd}E+Q9e7dscRi=#`lONvXTOSVg{OTNn#m%T2>TnwjO&bWN+a>?aWm(N`; zyF7GtarJTab@g`*bnWdL;+pPS;Hq^kbFFZ#a;e}L}cWrfTcOCCK(beFJT&K9s zcU|tf&2_KqG1oJ$AG@A+z36(`^@{6N*Xyn~UGKU+b|c)N8|B8h*}B=gIk-8wxwxs^ z!rYSG(%drKvfXkGZuxG*+&bK5xy^B#>o(7Af!jj2*WDJoz3H~pZMoYHw_R?#-S)V> z=eFPNpxa@$58aNtopSrg?V8(Tcd>gf_bB&N_X_vn?ytHpc3?swepxj%6K$^BOeC9#&+O6(;L5_gG*#7ojkB9jzK>Ln8-hG~)+l39{Dk|mOL zk`0nglFgE>lI@b6l6NE@N{&fRNKQ#UlAM*ClU$HolH8Eo^ALG>d&GHEdenK$^H}Dw z#$%nw29Hf1n>}`W?D2TdW535ikM}*Ucs%oT^6c#y<9XThOV2BwS3PfeKJtQIlo#X0d0Bbcc-eV* zdU<*JiKXUN^n&dfoT>(d(f%;SIc@H|1^X?c=TV z_VZSG2YUDR9_T&PTkqZK-R?cgdyMxu@9Ew%y=QyB>iwGcQt##7hLzr3-re5Yymxr- z^4{%z#QUiCaqpAfpL&1o{lNQo?vFGKy&m*>((6wt zA%#+Fse{y2DwX<3l~O-xk~CjhEY(O$rB%{uX@BWJX_IuMbdq$6beeR!bdGecbiULm zT_)Wi-6q{3-6h>EJz$U?k{*_RC_N_qSb9NvN&2buYw1JjBk8Zw$I?HfPo>XfKqi(s z%A94cGKtJfCYAZfl(KkPj;utcm6gdVWL2_SS)HswHdNLq8zGw^+blaT`%(70?5XUT z9LTNYPI4Eyn_MFIlzYqlvya5b z%SY;?^zriv@CowC^y%v}#HYiZ2y+6hA2LD}Gcw zR6J7rs(7sAlvYYxrC8~tbXB@5J(b?dKxKq7N*SY!Qzj@gl{w0MWudZIsZmxd2Pg+A z2P>PE$Rg}%#t*Z8jY-Q>H)cf0RS-}ilw_#X8=?t9($p6>(SpL~Dz1Ae3*?Z^5#`?(qX zBz~TLD!(YdSig9`M8BneYyEcmz2o<;-+O*X{EqpZ^gHc$)9-=bW4|YU&-|f3?QiGr z;P343>M!y4^jG?a_{aHc{0I6E^&jrv?63E4^Pk{9$)ES1;y=xQy8mkb!~Wm+|EXeC zoXSe&rt(mEt7Ix4l~NU}%2MU3@>PZ+Rf$Tg>Zcl{s#6V74O4ZfCa5N@PzQH@ZsUp!WV=u3tt(&DtvYLy6}zR?}YCO-xq!`{BZb( zhVWw%AR-}RNJLx2ya;2&>k&&LmPV|I=!#e!u`Xg`#O8=?5j!JxN9>LGG~$bhD-qWs zZbp0?@qNVIi2D&gMLdf5E#i-eKO;dT87Yo*jC784i|mM;962@emB^Wq-$p)+d=&X> zti;?Y>st^?G-DF^@;V3ofo?-c13JwYiOr#UpL{Xx3qI05aq9Re1 z7?>EG7@ioJ7?T*6n44ITSe00tSf4mFad={L;;2N!*u)8mlM+$ll*E;ZM-y)+iINGh-)NnJ^+lh!6}NZOQiBI$mzQ*wB6LUM9)T5?8mVRCtLWpdx-e#rxpYm%FiM<%x= zk4he&JkgNMCr?hEpKMHCnY=!EQ}UMN?a8~64bA$+uGMQo>U-Db*F2`Q6OW~aJY5UVorkzbYmv%Aj^R&xpU!`43yPx(`+Ou>n-8$Va-67pM z-8)^Du1NPw4@eI(r01r$q%TO{mcBQAfBK>H!|A8eFQ$K*{zdwg^lRxi(!WmsA^m>( zlMIkSW-uAn8MYbX495(4hB6~8BR(T3BQ+xh)&a}<6&-BWaXDTxNGJ`UMGea}OGYx5(8JQ)SeKY%K)?^OO zY{+cM9GTgkIXZJ(=7h{8nFlj(X2C4$EW0d+ET=55EZ;2utbnYbtl+FZS+QC1SvgsS zS?VlJRz+4-R==zPSxs5GtO;4uvSwt>&YGJwKkLn`Wmzk;y0TVht<5@;bvxTGJ2*Q! zJ1#phJ2^WiyChp{$S%vS$gaw+&K{cGl--g&GJ90^nC$V{6SL=Jzm~l;dv*4@?2Xx* zv$tjM&EB7VDEn~shuO!nzs|AB3CStSsmSS@(?4fm&d?lvPFqe#&X}BWITLaw<;>2R zm$M*eQO=t=OLJD_bmnZ$*^zT7=S0rwoU=LSb1vn4m2*Ak>zwa$Zs!>8=8AIrzSyrX%?^G@cS z&O4KLIqzEDjl6I2Zs*<2yPx-?A)m-6^Tqj2`L6kre6Rdo`9b-?`F--k^QYx6$bTz; zd46YpcmCS^t@%6h-^t&Tzc2ql{`Up$1vv%!f{6uu!Q_Hz1v3g}6&MQ^7ra%lykKR) z+XXud-YIyuU~j?u1xE^w7Mv(JRdB!Hw?ewmrqHfXTKDO<`$aePK)C$inu*(S_p*rxeaBTvWKY@U6m?g{ulz7p^VbT)3<7WZ{LvhlRfv zc@%{fB^4zXr4*$Vsf)^sDvPR%1{Bp74J{g8)Lf)1nou;Uh%cH_^lj0@q9;XvstGkz zQ)*kaSna5GR=cX*)pE5`?Wa~5)KThWb*egDovF@N7pt}Ea&@J;THRmWpdO|kp>9@> zQ%_M(Q%_gVRL@o~RKKBqQ@vEZLfxs}tlp*Gt=^-4PkmVZq58P`r24e_bM+VM%jzrY z+v+>&yXt%DKZ?0xt74mCyJB&%W3h9wyjWT6UmRE*TpU^)UL0ARRBUK0ZY}O89#cH7 zcv|s-Vq@{b;@68;6mKftR=l%#ck#aBgT;r7j})IPzEFIr__LDqlHw9gNoh$%$?lRP zB_EZXEjd?mvE-AIt0gx|zApK$rODCcX$mw&nqrMc zGf-2jsn-nE4A(SkbefR{%{WcBW}9ZaW`|~%=78pu=Az~k&1ag+nk$-bHQ#IQXzpo# z)I8J@T2f1EIjxn}Mk~?!X;s=lZEtOeHdGs~P0^-nv$VO|0E$y9BLuRR_bWmws>5$UK(xy^f zX=`am>D1EcrL#(3EuB|tEPcInN$FdqyGq|Ly;ypq^idgG=2F(HOj;%{3oHvN3oa`v zt1jzT*1v3E*@&{1vXN!&WuwZ*l+7wzSGKF{owD6!d&-WMohUn9cDC$%*~PLOW%tXT zl-rhz%bm(y%O&MrhH`1SPq}Y-ba`BPLU~eoYI#O^c6nZTL3vSmW%=Op@#PE3*Ou=q zzgYf5`R^6c6^RuY6-5=*6}1)h6+gAljmmE-Z&lu@{HgL$ zPG0AbqjR6b=URQ zdS|_t-dC^EhYi=q>XY<^dbPe%U#;)2AE+OpZ_(@ZZTeCAF?yt*s((d4LqA`?K)+DG xOut>fQ@>lkSHE9>NdJNUsQ!fhwEnFAoc^Z%mj0eO^9iB(Q?$bTX?fQ__uI4qJ zn$s>YXI6&B)S2o+b)~vdL#P^RC^d{4PK}^OQnl15%0wXwQ)8*g)D&teHG?u!bEpN> zDrz;ghFVLlqt;WKsIRH*)DCJNwVygbouGcCPEx0-i_{hBDs_XpOFgEZQ*WrZfCdcU zfisW*7vKqGKmh_l5C{e#Ak+k6ffl5JbdUk`AP@8c#h?TjL2u9p^aZ7$ALtLtKqaUG z!@zJb7K{Vq!2~b`ECHW`rC=GT1NEQ*G=k;eE3gr40$+p8U>n#C_JF-$KR5us2S0!l z;1oCwu7IoHCb$P4fv4aZcmdvkw~&S=2HHU}bc9aO9eP4J^np!aQ`iiK!w47;lVK~^ z8g_%-VGmdcd%_}E3j4wSa1a~3(#7x{Mw|*U&@hk@Q%4Iz5M8L@%Wq=#}(Z zdL6xi-b`gDPj6EWy}Dk zoT*@Hn4!!tW*jq~nZQhBCNa~PIm}#U3G+F#lv&HHW7acYFkdp8nC;A7W*@Vk`H?xv zoH8+|nKR4<=4a+M^BZ%A`Ga}R{K>pvUNUc4hGkht)`@jy<*X0u%PLquHh>Lg)vSh% zW_4^Do6csinQSiGitWgDVmq@&wl~{{?aP+31K4VIFk8!xVomH6b}BoKozBi+&Fp7v zJ=?%GvK!d1*p2Ka*7P;ImEFZ2Vh^)N*t6_8_B?xmy~ti+Z?HGn2kb-k5&N2b!@gzT zvF|yWbKqP#H_ne!aw^WB3*ee_;an`I<>I&$E}hHZT5+wpHe6e-9oL!b!S&@zxqe(V zH<%m3)o>#?%#G$Ib5ppf+%#@BH;-G)Ei-X-+seFJE|k{L2?vH^2FFH%_@7T zd7quibegiK94Hahohqf8t)+TUg;YP_{b`XXPXKz>MxRLCC%peCp( zYKEGxrTS6*DHSzgQ%GuCD4q5;~MtmG&w#wk5yK_uWoQsL|AzWhm$rHI5ojO`s;4e+hFp zwQt$3ow2%}{GQaQWjj)wT|yv~1U6aCH%BD6O)xXjlU^lbTIU>e#ZK<);K#GtQ;v6-wMbX3Z=ut}d-8FRJW7 z3e2VEQ1jE2z(?Mbu(y36bMc6ou4CgQAJ_VpdRfL^=)Ry_{Ns zVu?)B$U6gN5`E0GpJWbq@J{-I+CaJ1QC}i$9rYE8L%KqVvmlzHvcblxw5oziqtVvb zW@-!7td9By#n(|=Q39!CPe*q-^)0oFYF1C}q`pImC`tIThkQv!5v_%E6LpX}DvXUo zB;g23AxWtXy{PF8z#GVc4{C=xp)M%QR+}FPpj;b(5~zSbDnRW~hXzVbH37|#Gcliz z#OTLJQ`?1ssDI^(Be|lH2g%hL=>l{UdQ!rlt=>40^v@C?nUqLHT}g>WPX_FI0?5kP-Dp zeNbOix`x!-33MitKmwHjx`Q5|5cDLK^+U_Zr5|Qm&0)C0GSkgEgoYjY1}b8o@fSo&bJ{Fd9z~ClJKeiBnAA8v$_(8jZ$TW+<>7 zOl|}_z_-F1jX`5A?{N|riP&mwv%$W4VUh~i_1L20k4ioWj!>@k;1D>BCZb98;3znT zCZj1x*S>c}SxHrol8WNN1B~U>24i`j>b};-e)I*Cm!WYkZgFS98E}>ofpg$IxBxDK zOW-n1w%NtiiB<73Vaa5FhmA}E0nxo`VQD_O8Z>`(|O37MBx>FB5s7V&xK^Yl1&CaW;j%P)X(}s30a*hx*q;74%2-sKJCHy0;rxR$AShq{9!A3Gf7&99p%S1Ltsr{ZjdWJt1ZsL6 zOhhZuhw08Ff+>(pIR9;oFbC#BJMA*dvePOZ0FD;fh-qhMwt`{^~3<;JHL)t(L z3HBj|^cB+m!-QPuFFvsvSOy1xOGKRm(GIkUSPX@>TRUC}CfCC%SdG3$TRu)ium%nz z^BWwBHrK&C(jPCOGv!4?O8W@zh`!o5ps>7XfU!{0+-%ayHOfGJIgxwsqGDr^4b%j& zPz6F;>)>d#4MlV*{b+iHl0fqee;<8D#bBY_z@p0PDmT-6>z~b9CK79zjJ_pyv9r(x zbQu~pRFGfTr?XmE>4#>`v*I%alAP4CqVhh2i~1OoI|;eN+gT)^LB1M3B!uS}%Z-&} zgp{-s=EslV&8!n;m|%d(W>vIKs4utKhvrK9Cl4qpuBaLs6&W5C{oyIG?LNlp(N&+J~ejblEoC>jm>{ zK>PpF_zL*N|25jdT(|*#1vkQt;4`?HEIkL%33Q6Q7NJWYT^G0&?i2?0Hn<(`fZw8n z=ny)Ljx@sWfU_{N_n@PefqneL5(5tlC`Zt-4@(R@P9||-brxR4LancHwo!E&68DX) zBk(L4{@)A3{{k8QKm2?6i(Nh){#W2t>!N`!pdW<=14*s24gHlg2XDZe@D{v{PNFmD zEIRjb%^-cfM<)4G=ro#HD3J>zqK5?9R)9~I1>2*4FAC7I?4a}i-$miAuqdF5*6F{O z`73P>X~wtoud(pfG8QgccxjGEi{{Z!|JS@qi)abetdSPej*e=CIW-?n&N z6Pk}S(IJ+V`GZpEa5|EhIvs)T)LC>!CJPthh*wpV8OcB=1}8KdZYLdw z?x6^4#}cXO^>h-QjP9d{wn*&mX`i8WaGBu%dNRK?x1HqlFK^9lTR)0R->R&}1 zsU~z=A^}hI$WkKmZzVd=ojwwEMo(-+-2|fUbPx19`r|L6BHBoq{^17Gy-EFj(Nj|Y zGo>Nu$dxE zbqu42ds;UtXXsjb6m6nJG=h*GO^-3J2r~H5WVpP-fICNzqsNo93G_sI5=lq&RLV?G zGrI=2G0_;X==CQCLeHRQS`7pPh~9i+A@p2gAoM(XKD~fmh~A=i=sgD1M+>ofRaPg; zW(5DIU6=%aj9w*pOPFk4{?lEuI!1r%4E+`9&Qz)egj5R*7!tZ9y`ikbNN`x`(dd;h zn~=>oy`A1c7Ac~Ujun;ts|Jz0zoH9xs z7pc^$qm_~5W&NSmn)ioB0%0rXy-6CDNSn@6_W=V$z>S1Tn}X&fSQ-MtKm>`Ewjq(x zz9cGI2FxV>*$BP_TZ#XCl*BhLf#*;Ly-5I50ktG-SpbV+ZxX5;3P-@na4`u+o`e_S z17i9z5?hR*V@X7@E!~5}562QcZl-tBN9YUmCHg1&s?W!8;Y|`O{Efa#-=`nZPw3z2 zXY_OP{YZt0eu;s-RhWn9!`=T1G>~pL(1++F)T9n1!a#o6Ebth8mTI<|K2Cp6|3IIh zf22>+r|8r484N@ih%s=)zzG9q3?vx1VBm^@+iGG2=LyqALUoyNU7?A2W8jXVhXg}6 z3{@DWW0-+q7KUVJZT>v!VIqNjOf_2$J|oNz=!f(pvj(*Qj3}7Hb!_5rKa10L?G4>dE zW8i~<0s|!m{ungDWY>EMgFp;|F$hJAF$iDJh!`>B$T%_1jD&GvTp2gUo$+9#41tNn zAO!KuYq>Ux@+ZgdDsgc&yfI>+ROKOu? zFW0}?jj^USHMffG_DP`x>*MCO26?T|Cxue2sX^v1w8l>gWm+GH*a|(2`;<~|O(jlG zCksdKc(+f=wzQ^_rKY_l^=!O{nrXw3U_c|&mTAWnFzqpj!a$9I27~BErX$md>CAM& zAO?eY3=%LP5hTklmnkBX2Ga|J*bhDkVEK6c`2(hTS@^ zNH&H|5Ex=vEgQ!Yi>tz*8iT?OkV}!sl{$GQ|#o@h8iHIF1uwiyI zJBA&L0Vz2NgUK=srZlqSEpX)bR4d%{4{$RDxLFuXvk7RR3)dGI%(HSW_@KDW0@pVf%(roE z`%kXj>^>{kUV&?&z;!_2`iv;9Hk&B!D0@PHIL01lzh{XxlNFY%g`Z=vw2}SM!f+ac zWmbj;D?`gm0>fnt>TC>G1;zbLRS0hk>IFk0A4G8uw!YqC?^rp06F3?Lj(Y;fa>0;t z2*+dg4}s$e`#bxTeTKnG3|3)4q_U=weQx1+iNRVc$9fCL6ca}g5Ds9l?gI$N5RiX| zO+P?zBF@PI!8r;LUl0geaP%KDjjez?=S8464^GN?a%8-0z<^A-8!_0_$aw=7V&0rD z247pLzOho}bHtqMxTY9vwowKCmx{OuPHm-%5~#KiDlS?O%~m3sCwi|CE}lyy+a``I zq}%JbBuoOrpSmwxnstFD?ssdlKxdmr63v8@W6# zpEGd8qu+zU5e$xEaEhRRm$$8eE8xhwZrw9-9Wfw*K8v@{bs<|ct}E9KgMAnrM7E;} zu8=GK=RS)op_*{LG1xEol?O;4j^#%;;reqG|H?R!WUR#CkdW~($rxa0(vur12yYlB ziWzr?8wuVE5nZm98^xt@sB@LEjGXO}ASDLhV{jY`>+ne-`ZMy>#M5aut&QQvlb|Ix zmK%ow8PO-|xd{~M{EsAt9ARE*Xv&YH#&grT8Rl08CEvi!sY8Cz2LP>XvZ{!@{mNc}qm#uU?w^C3-1J}qc=ZN2V z9)k-QT*Tl~Be#lM&8^_pVnFQZ3VDLTbwantdtef`Q4ql<3`p#uOK*LPu$oR`1$}LC zNp1_bUFh9bZW{(yG5EQj+rfQ{!8HtiAr%aiN10m`@O`*F+}^);x;2{ZB zM3{qoCYa7_nhuYpc#~M;2u*Z&WTaLT7o#C3d9fO;n#9ebA|u12wXvGmn7CMNj5b;w zTWcLuzX<)jj=_D>&(fF{VXZ5}vildhGj$MOxlUO1Sy zXq-1#bDF~nnm6HF^KJe%Ao&7bn0)y57&_KjZVW`2hZbm?^4<9Ef6v&H??n!V`63Km z>iA*|UCHEerog`=-XwGcjz6VH$?QJ&KVX%E)mUHGMfhpI^W)g{MQ0iIEE2cs<$0wf&31hTm<-cbG!LH{9X*z7-}$#CS6GGq)g)v^T+>J z=I{9*_!Ah$VyMM1PB708Cy>RIvMHpLr-YCVe}+D=X>O-!(w6o%i#X3;B^E)tdXc}x z*YQ8`S1cV)z%Y^Y8ACG0l2`BzR0aPFf1O+%sUZC)js#4>P)B@;a6t7UKNUieb2BQHT;)2?+#p+=KbdzdP3~>+teD)~av>Xy1hx&^gWSieUOS|7T!s3bOkfH!L1dDvO_TU}Bu?Rwdj*!8ySYuC@N%&y#Spk1Y1wcQlEX?8R0X4#qT z=Gx7-TWGh)Zi(GeyE?lDyPbB&O?J2K-rFne!|c=S+uN7gkF)>GzQMlHeue#)_S^0E z*&nh0!T!AcL;FYeFYI61zjk08+#I|e{2iJ&ggIn5nv0mIk+*#aJ+(X<`+)G>`t`t{`YsACEBg7NMQ^eE6GsUyT zbHsJxM)3;qYVlg}dhvFXc&B)mc&~WB_@MX~@k8+w@l)}0@eA=QM}=c^$3VwmN3CO$ zV~V5BG0QQ>QSX@VSnN2?akk@J$N7$*IWBhm+;OAh4#&NY`yCHD9(FwHc;4}<<2A?Y zjyD|dIX-ZFmPA!~TIkjURO&R)snV(1 zX^2y;lgSA?jd2?1w7{v(=?kZ?oHjXqNmoSQl~cMft6aSn5iaE@};ILA0^o#UMi&PL~v&Xb+%oYy(;bw20(Qo@ki3+@uB z#7iQV_)4-QZ6)m`9Zixhl5Ub7l48j~NsVNfWQ3$vGFCEPGEp*FGF7rw@}uN8$rH&l z$#cmI7uLnyMd~7R@pkcXQMf2w{9U44G%hhNT9p|DUu18&uyPkEuIE@)7@se&32pPHqUK=+fldEZa=wQb-U(v-R*|kEw`s`@7x)8&fU)4!QIVW?XGq2 z;9l%*bnoL{>fYadsL6e}`$+du?o-^SxzBK)<^H+*TK6sPd))WAA8A`q)Vjr(l4c7OTUqBmF|@8lJ1f2lYTF~B>hGDtMsPyw$$`c`dIqA^qKUz^t~ta zWIQ=fH&1`hCZ5ea13iO1Lp{SiBRx|+(>yagvpjP=^`7~jEj(L!mUs^G9PT;NbCf6Y z9PK&9bDHN2&sm;k&$*r(Jui5^k;!E~vLIQwEK;VHX=U-UL|L-TAZsNnk@c4KmGzUA z$;xFlvXQb;CK-~Amd%jOmd%mPmo1bnl5LP(lHHcwmED&;l0A_ zhrGXhxO}91lpM)N%g4&c%O}d`%NNQQ$(P8N%1w3h2KjRNO8M9Fo$_7sJ@S3>1M(l_ zKgv(Z&&bcoFUbG!k^7|j^ziB9)6b{Or`)H;2lw~cQP-=4m`d`o->`Hu2MzN3A|`rh$`mG2t`tFTizD8z~Y zMWiBLk*G*kq$<)Bc?yG~rJ}W>t)f8DUC~ETshF&ouUMw2S2QYCC{`)HQfyLeR%}sh zQ|wS&R6O_d@>BaI`X%|L_~rYx^lR-)O(Fe$)JB`_1v2 z=eNLbx!*d!FZ?$6ZS>pbx5ICz-!8vBen(D4QyqD}$7=%4B7#GEJGG%u^baEtRd6ZI#`WMrEaPm~w=&R%ud> zHz_A7Co88arz@8!S1Z3!Zc%PkZdV>tUQ@nOd8lM6ZiCgs`viD zpZ1sdyZL+gd-^x=kMh^}$M|dgTl<^Z`M3A)-~@WpY?wo zKm{}lNDashXdM_3*eoz2FgY+YFh8(UVE@4Kz(Il4fi;1{18d1;)-i$O0~ZD^3j92< zF0e6hW#F2?^?@4#HwA7EJRW!_@OhA9kS?fgP(=_9S{$@G=94Z%BuF9cr>z8d^X@QvWx!FPin1V0M?J@}8{7s0QB z--gISRY;SN<{`l$VIh$rnvmF#_>iQK)R450mLaV}+J>|b*%Y!nWN*m+kVBzO zLZd=8p)sLxp^HOThpr7>AG#ro33CZ^3-bsw$-;((jSrg`HaTos*zK@qVb8-}guM6qOK_6qOp48I>KSkIIkg64gDbUsP4pkf>o%Bcn`F6Qia?O^cclH9Klf)K^jG zqh71M)dA{e>L7K9I$E8q)~VCgS?V0MUY)P*r0%XRRQFQ%QJ1RA)aB}0HBwJg&r>f{ zFIF#A*Q?j6zff;bZ&YtqZ&9C7ztSi)$r@9(Mz1kwT539KdTM%UN;JJSeKq|wHJXu{ zQ5vinubHTsqM4>ytXZmAr`fF8s@b9WPP0dIRP(*&gyy8?jOLu?X|z{#a&)(7V|3r> z{?P-XheVsAarBtzanTc^Cq>VTUKG6~dRg@H=#|lHqSr<5h~61}H2QS(x#)}0KSlp+ zivBJ7Ui5?LN727WKZ|jR(Z+O*86GnxW_-+~m?<%HVwS`#i>Z%U9#6L99cpW2|$mORRgWlwTf#SR}eQSZhqX3xJz-r#@&j$6L&A} znJMmVJQWY)*?2zQK3)_ri}#K9i}#Oj9v>7R8Xq2?9IuOS5#J%cb9}e>!uVeC{o~8y z2gX;%500;ipA)}5{%ZW&1TMioL7d=};F+LI@K0!x&@3S^Avi&skd%;;kd~00keiU7 z&?2E*LXU+03DpTT3Bwa=6HvmWgsBPB6HGG`%n5T7HYQw1c#|kkY?9bKF*q?aF(xr3 zQJ0vWn3u}fmN#KOdq#NLUeiTx9YC)OrTPBbUZOI(<^IB{v>s>HR4>l43B z+?e=v;>pB6ljKPWNf}AmN&2Mxq=KaGNj;N#B^i_YB$X!hPa2w3n`BBFoirh7Qqt6< z>87M5Nz0PfCw-H&E$Q2&T}gYBjwSt&^kdSgq_auqlb$7eC#NKLPwt&unp~D#o?MfR zl1C?xO&*^-F?n+G{N%;SpC{KPuSi~%ye4^F@{Z)g$tRP~B%e>dlzb)mR`Q+Xd&v)y zA1D8w;+ztb(m7>l3QifDG9hJB%IuUyDN9n8rqrdF8d8?0Y)sjbvMuG?lszf?QVymZ zPC1`)Ddl#`-INC@k5ite{E-S%nN%*-KDAqFX=-Ka;MAe1BT`4DPDq`cIxTf(syTIT z>h9D>I)yGrSD@>t>#XahE7TR~`spfkmAb*Y8r@jk6x}r44Baf<0^K6r65TRgz3!my zgzhKZuO{71-EG|+-DBNT-5vf_X-t||ntxi;w7|6Bw8XTmwA{4(w3caY(z>Me zNh?dMNUKb%NgJLvGHq1axU{Khb!ltTj;5VVdy>wlyQh1kOVefPP16I@L(;?3qtZ3$ zy7ct)%=Db}mFZun?@ZsFzAyb?`jPZg>1Wd~q+d=qT}{81{w70_q0Y$9D9GrT(Iul> zMxTu8jA0ogGfWv{GbUtA&X}69B4cO9(Trmm$1{G&xSa7*#+8hpGwx@+%y^UWJ`-lL znRc0?Oj)KpQ<164Y?9eLGbl48Gd43lvs>nv%q5u{GPh;k$b69bIP+=dA6ZnEW0q5v zbCye%cUE&#R&Z8WR%DhYD<&&FD>ExQOP{qVYj@U>tm9cHvQA~4&AOU(E$i2;TUmFq z?q$1VE3#GDO|qM32WN+7=VrIb?vdR;yF7bPc6D}5_VDc5?8({FvS((`&YqjSAp5iI z#o5cVPh|g;eI@&9_OUM@`Rnp88BCnP*&sCp7$OZ?LxLgMpfltc z@(e8utqpArT@Bq0#fE`~8pCiytpOP(7$zI08D<)08x|QpH>@>mHS99%H5@P;Hk>e= zGMqJBFkCYHYPf57T0E*47f&xx;J+?=0R`ytnv3@uA`)#m9;t zmw1$<4k;-usVo^@GNxpF$&8YDC5uYdl&mY+T(Y%fd&##YM@o*D{7`bT^!Xh JZJ$QN{{zLL#gYI3 diff --git a/Friendvatars/AppController.swift b/Friendvatars/AppController.swift index 072b1bb..5275479 100644 --- a/Friendvatars/AppController.swift +++ b/Friendvatars/AppController.swift @@ -36,7 +36,7 @@ final class AppController { @objc func handleAuthState() { if AuthController.isSignedIn { - rootViewController = NavigationController(rootViewController: FriendsViewController()) + rootViewController = NavigationController(rootViewController: NoteBiometricViewController()) } else { rootViewController = AuthViewController() } diff --git a/Friendvatars/AuthController.swift b/Friendvatars/AuthController.swift index cb01de9..cfef81b 100644 --- a/Friendvatars/AuthController.swift +++ b/Friendvatars/AuthController.swift @@ -23,6 +23,21 @@ final class AuthController { return "\(password).\(email).\(salt)".sha256() } + class func logIn(_ user: User, password: String) throws { + do { + let finalHash = passwordHash(from: user.email, password: password) + let keychainPassword = try KeychainPasswordItem(service: serviceName, account: user.email).readPassword() + print(keychainPassword) + if(keychainPassword == finalHash) { + Settings.currentUser = user + NotificationCenter.default.post(name: .loginStatusChanged, object: nil) + } + } catch { + print("nie dziala") + } + + } + class func signIn(_ user: User, password: String) throws { let finalHash = passwordHash(from: user.email, password: password) try KeychainPasswordItem(service: serviceName, account: user.email).savePassword(finalHash) @@ -36,7 +51,7 @@ final class AuthController { return } - try KeychainPasswordItem(service: serviceName, account: currentUser.email).deleteItem() + //try KeychainPasswordItem(service: serviceName, account: currentUser.email).deleteItem() Settings.currentUser = nil NotificationCenter.default.post(name: .loginStatusChanged, object: nil) diff --git a/Friendvatars/AuthViewController.swift b/Friendvatars/AuthViewController.swift index ad944f6..ee97cc8 100644 --- a/Friendvatars/AuthViewController.swift +++ b/Friendvatars/AuthViewController.swift @@ -1,3 +1,4 @@ + import UIKit final class AuthViewController: UIViewController { @@ -11,6 +12,26 @@ final class AuthViewController: UIViewController { case password } + private func logIn() { + view.endEditing(true) + + guard let email = emailField.text, email.count > 0 else { + return + } + guard let password = passwordField.text, password.count > 0 else { + return + } + + let name = UIDevice.current.name + let user = User(name: name, email: email) + + do { + try AuthController.logIn(user, password: password) + } catch { + print("Error signing in: \(error.localizedDescription)") + } + } + @IBOutlet weak var containerView: UIView! @IBOutlet weak var emailField: UITextField! @IBOutlet weak var passwordField: UITextField! @@ -18,7 +39,11 @@ final class AuthViewController: UIViewController { @IBOutlet weak var signInButton: UIButton! @IBOutlet weak var bottomConstraint: NSLayoutConstraint! - override func viewDidLoad() { + @IBAction func onLogIn(_ sender: Any) { + logIn() + } + @IBOutlet weak var noteField: UITextField! + override func viewDidLoad() { super.viewDidLoad() containerView.transform = CGAffineTransform(scaleX: 0, y: 0) diff --git a/Friendvatars/AuthViewController.xib b/Friendvatars/AuthViewController.xib index 4c9e837..5a736e5 100644 --- a/Friendvatars/AuthViewController.xib +++ b/Friendvatars/AuthViewController.xib @@ -15,6 +15,7 @@ + @@ -30,19 +31,19 @@ - + - + - - + + @@ -51,13 +52,13 @@ - - + + @@ -66,9 +67,9 @@ + + + + + + + + + + + + + + + @@ -112,10 +137,19 @@ + + + + + + + + + diff --git a/Friendvatars/FriendsViewController.xib b/Friendvatars/FriendsViewController.xib new file mode 100644 index 0000000..8e86c66 --- /dev/null +++ b/Friendvatars/FriendsViewController.xib @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Friendvatars/NoteBiometricViewController.swift b/Friendvatars/NoteBiometricViewController.swift new file mode 100644 index 0000000..e79fc7d --- /dev/null +++ b/Friendvatars/NoteBiometricViewController.swift @@ -0,0 +1,30 @@ +// +// NoteBiometricViewController.swift +// Friendvatars +// +// Created by Dawid Kubicki on 19/11/2018. +// Copyright © 2018 Razeware. All rights reserved. +// + +import UIKit + +class NoteBiometricViewController: UIViewController { + + override func viewDidLoad() { + super.viewDidLoad() + + // Do any additional setup after loading the view. + } + + + /* + // 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/Friendvatars/NoteBiometricViewController.xib b/Friendvatars/NoteBiometricViewController.xib new file mode 100644 index 0000000..1d4e26a --- /dev/null +++ b/Friendvatars/NoteBiometricViewController.xib @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +