From 608d1aebcbc9fd6a7538179cdde00a47d417ad2b Mon Sep 17 00:00:00 2001 From: Acerlaorion <52343449+Acerlaorion@users.noreply.github.com> Date: Fri, 27 Dec 2019 13:02:00 +0300 Subject: [PATCH 1/8] RPG --- RPG/Archer.cs | 25 ++++++++++++++ RPG/ArcherSkill.cs | 23 +++++++++++++ RPG/Battle.cs | 51 ++++++++++++++++++++++++++++ RPG/Game.cs | 76 +++++++++++++++++++++++++++++++++++++++++ RPG/IUseSkill.cs | 11 ++++++ RPG/Knight.cs | 25 ++++++++++++++ RPG/KnightSkill.cs | 15 +++++++++ RPG/Logger.cs | 18 ++++++++++ RPG/Mage.cs | 25 ++++++++++++++ RPG/MageSkill.cs | 15 +++++++++ RPG/PickPlayers.cs | 23 +++++++++++++ RPG/Player.cs | 84 ++++++++++++++++++++++++++++++++++++++++++++++ RPG/RPG.csproj | 8 +++++ RPG/RPG.sln | 25 ++++++++++++++ 14 files changed, 424 insertions(+) create mode 100644 RPG/Archer.cs create mode 100644 RPG/ArcherSkill.cs create mode 100644 RPG/Battle.cs create mode 100644 RPG/Game.cs create mode 100644 RPG/IUseSkill.cs create mode 100644 RPG/Knight.cs create mode 100644 RPG/KnightSkill.cs create mode 100644 RPG/Logger.cs create mode 100644 RPG/Mage.cs create mode 100644 RPG/MageSkill.cs create mode 100644 RPG/PickPlayers.cs create mode 100644 RPG/Player.cs create mode 100644 RPG/RPG.csproj create mode 100644 RPG/RPG.sln diff --git a/RPG/Archer.cs b/RPG/Archer.cs new file mode 100644 index 0000000..b45b9ec --- /dev/null +++ b/RPG/Archer.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace RPG +{ + public class Archer : Player + { + public Archer() + : this("Незадано") + { + } + public Archer(string name) + : this(name, null) + { + } + public Archer(string name, Player opponent) + : base(name, opponent) + { + Class = "Archer"; + Usingskill = new ArcherSkill(); + } + + } +} diff --git a/RPG/ArcherSkill.cs b/RPG/ArcherSkill.cs new file mode 100644 index 0000000..db0a45e --- /dev/null +++ b/RPG/ArcherSkill.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace RPG +{ + public class ArcherSkill : IUseSkill + { + public void UseSkill(Player user) + { + if (!user.SkillUsed) + { + user.Opponent.IsDebuffed = true; + Logger.LogText($"({user.Class}) {user.Name} использует (Огненные стрелы) на ({user.Opponent.Class}) {user.Opponent.Name}."); + user.SkillUsed = true; + } + else + { + user.Attack(); + } + } + } +} diff --git a/RPG/Battle.cs b/RPG/Battle.cs new file mode 100644 index 0000000..a53648a --- /dev/null +++ b/RPG/Battle.cs @@ -0,0 +1,51 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace RPG +{ + public static class ClassBattle + { + public static Player Battle(Player w) + { + Random rnd = new Random(); + while (w.HP > 0 && w.Opponent.HP > 0) + { + int AtkOrUseSkill1 = rnd.Next(0, 2); + int AtkOrUseSkill2 = rnd.Next(0, 2); + if (AtkOrUseSkill1 == 0 && w.HP > 0) + { + w.Attack(); + } + else if (AtkOrUseSkill1 == 1 && w.HP > 0) + { + w.UseSkill(); + } + if (AtkOrUseSkill2 == 0 && w.Opponent.HP > 0) + { + w.Opponent.Attack(); + } + else if (AtkOrUseSkill2 == 1 && w.Opponent.HP > 0) + { + w.Opponent.UseSkill(); + } + } + if (w.HP < 1) + { + Logger.LogText($"({w.Class}) {w.Name} погиб!\n"); + w.Opponent.HP = rnd.Next(1, 100); + w.Opponent.IsDebuffed = false; + return w; + } + else if (w.Opponent.HP < 1) + { + Logger.LogText($"({w.Opponent.Class}) {w.Opponent.Name} погиб!\n"); + w.HP = rnd.Next(1, 100); + w.IsDebuffed = false; + return w.Opponent; + } + throw new Exception("Fatal error"); + + } + } +} diff --git a/RPG/Game.cs b/RPG/Game.cs new file mode 100644 index 0000000..bf5ef69 --- /dev/null +++ b/RPG/Game.cs @@ -0,0 +1,76 @@ +using System; +using System.Collections.Generic; +namespace RPG +{ + class Game + { + static void Main(string[] args) + { + string[] names = { "WhiteCat", "Vaxei", "Alumetri", "idke", "Micca", "FlyingTuna", "Karthy", "RyuK", "Varvalian", + "Mathi", "FGSky", "fieryrage", "firebat92", "chocomint", "Abyssal", "Aireu"}; + Console.Write($"Введите кол-во игроков(1-16):"); + int n = Convert.ToInt32(Console.ReadLine()); + if (n % 2 != 0 || n <= 0) + { + throw new Exception("Wrong count players"); + } + Random rnd = new Random(); + List players = new List(); + List winners = new List(); + int k = 0; + int kon = 1; + while (players.Count < n) + { + int c1 = rnd.Next(0, 3); + int c2 = rnd.Next(0, 3); + if (c1 == 0) + { + players.Add(new Knight(names[k])); + } + if (c1 == 1) + { + players.Add(new Archer(names[k])); + } + if (c1 == 2) + { + players.Add(new Mage(names[k])); + } + k++; + if (c2 == 0) + { + players.Add(new Knight(names[k])); + } + if (c2 == 1) + { + players.Add(new Archer(names[k])); + } + if (c2 == 2) + { + players.Add(new Mage(names[k])); + } + k++; + } + Logger.LogText($"{kon++}-й Кон\n"); + while (players.Count + winners.Count > 1) + { + if (players.Count > 1 && !(players.Count < 2)) + { + Player tempPlayer = ClassBattle.Battle(players[PickPlayers.PickOp(players)]); + winners.Add(tempPlayer.Opponent); + players.Remove(tempPlayer.Opponent); + players[players.IndexOf(tempPlayer)].Opponent.Opponent = null; + players.Remove(tempPlayer); + } + else + { + Logger.LogText($"{kon}-й Кон\n"); + players.AddRange(winners); + winners.Clear(); + kon++; + } + } + Logger.LogText($"({winners[0].Class}) {winners[0].Name} WINNER!!!"); + Console.ReadLine(); + } + } +} diff --git a/RPG/IUseSkill.cs b/RPG/IUseSkill.cs new file mode 100644 index 0000000..56792d5 --- /dev/null +++ b/RPG/IUseSkill.cs @@ -0,0 +1,11 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace RPG +{ + interface IUseSkill + { + void UseSkill(Player user); + } +} diff --git a/RPG/Knight.cs b/RPG/Knight.cs new file mode 100644 index 0000000..bed6968 --- /dev/null +++ b/RPG/Knight.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace RPG +{ + public class Knight : Player + { + public Knight() + : this("Незадано") + { + } + public Knight(string name) + : this(name, null) + { + } + public Knight(string name, Player opponent) + :base(name, opponent) + { + Class = "Knight"; + Usingskill = new KnightSkill(); + } + + } +} diff --git a/RPG/KnightSkill.cs b/RPG/KnightSkill.cs new file mode 100644 index 0000000..1b39698 --- /dev/null +++ b/RPG/KnightSkill.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace RPG +{ + public class KnightSkill : IUseSkill + { + public void UseSkill(Player user) + { + user.Opponent.HP -= user.Strength * 1.3; + Logger.LogText($"({user.Class}) {user.Name} использует (Удар возмездия) и наносит урон {user.Strength * 1.3} противнику ({user.Opponent.Class}){user.Opponent.Name}."); + } + } +} diff --git a/RPG/Logger.cs b/RPG/Logger.cs new file mode 100644 index 0000000..0c3b4f6 --- /dev/null +++ b/RPG/Logger.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace RPG +{ + public static class Logger + { + public static void LogVS(Player player1) + { + Console.WriteLine($"{player1.Class} {player1.Name} vs {player1.Opponent.Class} {player1.Opponent.Name}."); + } + public static void LogText(string message) + { + Console.WriteLine(message); + } + } +} diff --git a/RPG/Mage.cs b/RPG/Mage.cs new file mode 100644 index 0000000..562a304 --- /dev/null +++ b/RPG/Mage.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace RPG +{ + public class Mage : Player + { + public Mage() + : this("Незадано") + { + } + public Mage(string name) + : this(name, null) + { + } + public Mage(string name, Player opponent) + : base(name, opponent) + { + Class = "Mage"; + Usingskill = new MageSkill(); + } + + } +} diff --git a/RPG/MageSkill.cs b/RPG/MageSkill.cs new file mode 100644 index 0000000..75139a6 --- /dev/null +++ b/RPG/MageSkill.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace RPG +{ + public class MageSkill : IUseSkill + { + public void UseSkill(Player user) + { + user.Opponent.IsSkipped = true; + Logger.LogText($"({user.Class}) {user.Name} использует (Заворожение) на ({user.Opponent.Class}) {user.Opponent.Name}."); + } + } +} diff --git a/RPG/PickPlayers.cs b/RPG/PickPlayers.cs new file mode 100644 index 0000000..c1e4f02 --- /dev/null +++ b/RPG/PickPlayers.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace RPG +{ + public class PickPlayers + { + public static int PickOp(List players) + { + Random rnd = new Random(); + int randomplayer1 = rnd.Next(0, players.Count); + int randomplayer2 = rnd.Next(0, players.Count); + while(randomplayer1 == randomplayer2) + { + randomplayer2 = rnd.Next(0, players.Count); + } + players[randomplayer1].Opponent = players[randomplayer2]; + players[randomplayer2].Opponent = players[randomplayer1]; + return randomplayer1; + } + } +} diff --git a/RPG/Player.cs b/RPG/Player.cs new file mode 100644 index 0000000..a7988ef --- /dev/null +++ b/RPG/Player.cs @@ -0,0 +1,84 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Text.RegularExpressions; + +namespace RPG +{ + public abstract class Player + { + private static readonly Random rnd = new Random(); + public Player() + : this("Незадано") + { + } + public Player(string name) + : this(name,null) + { + } + public Player(string name, Player opponent) + { + Name = name; + Opponent = opponent; + } + public string Class { get; protected set; } + public string Name { get; set; } + public Player Opponent { get; set; } = null; + public double HP { get; set; } = rnd.Next(1, 100); + public int Strength { get; } = rnd.Next(1, 99); + public bool IsDebuffed { get; set; } = false; + public bool IsSkipped { get; set; } = false; + public bool SkillUsed { get; set; } = false; + internal IUseSkill Usingskill { get; set; } + + public void Skip() + { + + } + public virtual void Attack() + { + if (!IsSkipped) + { + if (!IsDebuffed) + { + Opponent.HP -= Strength; + Logger.LogText($"({Class}) {Name} наносит урон {Strength} противнику ({Opponent.Class}) {Opponent.Name}."); + } + else + { + HP -= 2; + Logger.LogText($"({Class}) {Name} получает урон 2 от (Огненные стрелы)."); + Opponent.HP -= Strength; + Logger.LogText($"({Class}) {Name} наносит урон {Strength} противнику ({Opponent.Class}) {Opponent.Name}."); + } + } + else + { + Logger.LogText($"({Class}) {Name} пропускает ход."); + IsSkipped = false; + } + } + public void UseSkill() + { + if (!IsSkipped) + { + if (!IsDebuffed) + { + Usingskill.UseSkill(this); + } + else + { + HP -= 2; + Logger.LogText($"({Class}) {Name} получает урон 2 от (Огненные стрелы)."); + Usingskill.UseSkill(this); + } + } + else + { + Logger.LogText($"({Class}) {Name} пропускает ход."); + IsSkipped = false; + } + + } + } +} diff --git a/RPG/RPG.csproj b/RPG/RPG.csproj new file mode 100644 index 0000000..958d2f1 --- /dev/null +++ b/RPG/RPG.csproj @@ -0,0 +1,8 @@ + + + + Exe + netcoreapp3.0 + + + diff --git a/RPG/RPG.sln b/RPG/RPG.sln new file mode 100644 index 0000000..1510808 --- /dev/null +++ b/RPG/RPG.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.29609.76 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RPG", "RPG.csproj", "{FB5E5FE5-EAAD-4CC3-A9D9-DF22DEEF4B73}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {FB5E5FE5-EAAD-4CC3-A9D9-DF22DEEF4B73}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FB5E5FE5-EAAD-4CC3-A9D9-DF22DEEF4B73}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FB5E5FE5-EAAD-4CC3-A9D9-DF22DEEF4B73}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FB5E5FE5-EAAD-4CC3-A9D9-DF22DEEF4B73}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {9A8D6197-8DF4-45DA-A169-89422F723F9A} + EndGlobalSection +EndGlobal From dceb1460f01a3b6b48957b38d738cc0fba8e50b2 Mon Sep 17 00:00:00 2001 From: Maksakov Ilya <52343449+Acerlaorion@users.noreply.github.com> Date: Sat, 22 Feb 2020 09:36:55 +0300 Subject: [PATCH 2/8] Site --- site/images/png.jpg | Bin 0 -> 63019 bytes site/index.html | 31 +++++++++++++++++++++++++++++++ site/styles/style.css | 34 ++++++++++++++++++++++++++++++++++ 3 files changed, 65 insertions(+) create mode 100644 site/images/png.jpg create mode 100644 site/index.html create mode 100644 site/styles/style.css diff --git a/site/images/png.jpg b/site/images/png.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4f2382ff615b9b8754b05d79653825a9761c1d99 GIT binary patch literal 63019 zcmV)dK&QWnP)O008y~1^@s7i@WpD00009a7bBm000*e z000*e0m>%xKL7wA07*naRCt{1y$3)~-~T`UXb&N>l1PP+vV{knzZ_3_#Z$kE7p(yQM|9j5uzIxqWqgUkpet*9I--Fxh?tAX@JnuQr^E}U?ED#9r zC+OeH=3&(;8kMrLa`Sa-)jzu=c=?Fmy_a%nFW9lhL!hLjDBQLm)>8EF@ZIa@4CglD zH(Ypm;Mm!^WnP%Q8|P9IUcQ!$4(%G@!Nb?c&dEb_b3@GVh)3AsahM;t74yA@3%4hX z>0m&vyLjbk+LDNE+J9V_n3Z9RbSr)JP*h~8@%YJmbh0$X=Pzlnwlb&t!k12?MtO%aO zJC>hc0N1Jg;2W?B{_{o)_n*7)0JZh2BI(f^#IHXJ?TY2#JI4;*vxkA)>(%Se%tvT97*W)#>)(oeKrFgS~kL5-ZHn-GPGO@ZE?BpH8QX6l zGGS@HLSa3Z)6&4DD@kyfIsmWUd}az$^svugzDX z(APnDR!^IbZx0?jTT84kiVAEMu8DS|zinGLVwg|?-FgfVp5y5ghs^X;W=UuGNdc9s zSI5_nA9?G50)AxtLZvFz5FfjkURS?SJDfj#5H+e-65i|Ri5r;Z+(%E0GB^+FhVRLXUA(7b(Nb8LA0N+LoaP#V^o%U5kMj_oFmz}?u?i^2%Y#=; zlyFT0TZl>8d{h7wvfNUj>ubxGC4J?G@<+TJZMOH!(lTFN}m{zk*gdsfGDn zNP5nKg+UW}g>iF_Nec;?Tv6VeidK!J{nD#RyfBtcOf%2lyRRWEO!Lfwiu>GRF(A}Q zY5|@-dj+RS?sR?g;d3HSU@6EQ<8bn%1y)2Xf{F_JnD_5LLZw(?65ZpVo0CuZLRgq5 z3V8+1p{jV?YYoaXeNx+bqv-yxACsX|qdr}K`Sd!54rnX2u##~0it-w& z!e_aeHWdWlzpX$E(;zjwJT%mJZ*>3VXSA%Z%QS|H@Etq@D^9Hw9{ct!71>!iShZ?1 zGBdN7rahAuWW&bYxOMA3)7!IBLGqIqNJ(Kk)sR6mpr=zFRVr%Ydh!P}Gva@#6AT*( zXkp@CJfdWp*RmCF5OwGIC%hNrz;511{P^|)6)M-I4<$H$Y_ssZx!y|KRiG%<3Yjo%2*3E>4s;#V!E5UnkLs^Mdx7(hT zVmBiNA#iaX$J_t%?ppk#Bo!- zmM!q|)-9;0sbQF}H+IcmAoG0g3lW9et{n*KH;A|IOTx(^h>@c(Ti!oYu-C6otLn-1 z80CP<{p^~^`2+2PWDfLy zt1$ca>>Mk|xD}uF;};5;adxFj;_@p&{QBciQ&q;O;Z}5;Q={}B6(CokN-PXfWsp0$ zc*LVJQ;2Wh(}gOK;+Wvj4f_vXr2^D!@3jb8U=N~LBKIKd&~N0zKU0ZtV{J|qLh$YT zPpT}cq^*UR)rW=qr%vpJzCGK}wq|L-SgNfc*Jm;Pm^#w}ll%1-U-?xcL}fun zlC4_QqYH=EZ&MHzHifP~dHN0`MvWD__SUsyO!uIK$ulD9xpREiG1WB&I+e>~$DZ>T zGQd)Pl?YK)5YkR_i^7Uv_N^zmtU&bgY0S;1Lc5v?^lH}NsY45tqM0#WZ)nz$ckaHu`$j+fUKFsWB#x@6A(*T)T1s&tJU5fWB73eS-(E8mz^O!{9i&531EPqTA#J z9^XHY@l(T?uW&MI*Q$nqrCTv~)^IFYFd=`oZ>&%};1z~Q?w7AV#PrGiS@OpwB0g#+ z)gTbOd-WJqt5$+;4IR2jQjLrpZi}4UT%qcuRvi=iB95bz7@j!?htb{8x0eNdR*Po! zczuhoFsBlh3W!RiU7JS2gG4p*?y~^(3%3_8*~kp=RD^1ew2WUcG^$Iti8>@RBZH?Z zA^gIrL^`%_LKlMiMtVZ^i^Rf^>dDK?$H!01+vrslp3tdN8{zt*W#Oo(ktS4o)b7z2 zqec#(+a622arwwmoY}V@oO(px*ixtxF>crv3469ttyup)?S%I{b0ApIsh1mH>?CA6 zd*L>$J2$7>PSZl+;XWLO4a8nRI8fWTX^(I_pONgyB5iO-U}|be7lPY&pEA5@EQK=6 zCuh@zod*bs*ooMcZm46-9}{!n#?!Ssb`x%UM6Tc+lT@h4Rfo{Fbv?>&pFX9E4RwWu zDJT#?S(#;QcbB13-|kPabg2*CJikTPwX`&N$_8FxR8)&TtPx`tV#_*jsW+8YO`^x7 zfv7|XDpe{kc1)s5WZMSWg4yp@Q}O3WFN_3LMOh;^H&5nsXkj{=n`JHypC)$j;Gq-f z*~40FfAMOPbW9SSJ-#8adU%C7b?2^zN7Lql56sq#(4y|5RZ~6Q$+KO>g{pJsE>M-o zl&P$Sbkl*;yyG#^%Y^GXI(+p{Fw+MbD5|36&51>Y;ZRRm6=!|cW8b$Fgs$Z4S_p%d zRvl6tTorlEUV%R4wP9Yq0@ZYIpoN)I-&8hJBvTPnzgG`_1z%&WU2n~y)N`aoe$AEMdKYylERS5?-m$|6|n@RA6P<0Db$~(hFCF7tJSmcm`qeq|r=a zK4R|NB~(pv_B4My@9ypkA1?>QZ8?Xh@4mxau^jfjc!N=m*{&el(qh|+@D;;_)kNUq zw{R+$$DG$Y~O^U!ib`?T6x3_n^8zLC5)BREkvS$yTUA%}B;b9UVL~pF7hJHRC*z6^)fslGl@g4RPCWPe_pd{C@1- z1F174GDnnqFI+I<*8AF6-)Z>eyIJvb(o<4+1r@~;HRbnPuV2!Wcu-Pd{?tlDUJ&)k z_47O8TDPqCTRk!<=f)j3AMZVI%%rT#CJCjsSdj;=(SS?8QeI)vbXKAHOqFX(hONu10W>BT`a+pjuV7e;qTtRf9bnym&SF z_Wk$l=^jzM8R@b>nGt5+CU0SZtt{B-b(h(32wgl5-x&gsVL!KT`4V(~SY9`k73cO z0aCvHU^uY?d_0Fk6dpcn>9bV|2gl#v9zS+)`*HLfDp`&A+l0Ay_fE^V$@{OVsH#v! zs<+>I1TAoY_k#6U=xa~UY2K_zmvH5JG6Lq0!J(tq(W6^SgfC-jHW!u9q`CMAOdf1l zZw*)1c~nnAbgTqbt7>Di%Sudh>WvjKiHKT0mF{1%a4a@$JIzSqnRxu zUqG}8y@rabHH)J}!o-Kq%&MiQqs9$(6dBC zoI^imAovS9)eXe%!`*+PlN)AEW0j#?+cwp8C02&A9Awp@2`ZH5&lZz+vl%d_^iu{K zS9uCZS4jk`*KapUXPP*qpm?s95{Rdy=>c4 zq7V?G$O0h>LHY8Ulu-UbahNw}JidNQgKn*&*@IOv!SpxC@2Ak-BXaq4;qg%;y3$|L z*iUi}7rw*seTxNM`+3MeebL*tOY+PqtbFF`8HKFuT;{WJL?vxj78yG^81pNRSM295dmd2sgz>KW@(q7V?G{0RtA2y`k}6f;RAuf$)by4sJ3-$bU7qhhbkb1tJn$fg`3yF|qicq1lY?C`l*JxMKk?VP% zzA2+dl>)4Y-iK+E`oYuj`UE4#2GUR{i+N8_WRj7+p56WoIym;iYM# zx^Q$_OwY;4$dtQ){}$9#Re4s4Ne^G)_T6X9@S_>*92U}jojbAf&Q+>b;F-Khm^xNK zx2`SeA__7HB*%!^0Qn_Tz$T`pD`;syB}v!F`zdiCWwmVAgc;oGqnxI?P`uc>p08U> z`SK%2bX)4DR2;QxvVvah3U&&iv57&c3P|uze@X=8eViwY%T~n^6~Df-=r)fqd3kv% ztJWO(>@==NHT)mI9IrsQOc6J~mjr$N+Al=6d4&1$`Ew1e8!xKuycdI^;nIy@IBeg# z8AFHL$z4!cpOU=Sl;%@%oi?DvbBJWW$8{C9=0piNgHi$>VRUQOe8a8pow*9C%&=We zMG1*NzGL}HH?f;`v1)<1_{|tUPMkQ4gO)I39u?lcTOpxh=YMgXQd$`aux>mZi$_{5;1sCZ{9T?b7sqPYpM9~;WKn~fA5QabpHyfRb^G8 z35gf*>*yV5s3_A)CY3#`T6Ov^qHuO|pCh_W2{T&1o`B^JWqP43yiZFjuKjtyUm<{{{6aRrn^5Q=;dR1*nFHha~a+~%jk?{+qNyR zz}FSK_Z-H+0k%TRa{^+0{`&PhtchQSp1mD#FmWwCZqu~`eCD}e;9w{0-pN|+PMhon zLGnAiDaeMFk}`4>1gNC0hB|5*D4&y$YTB9---&=&tY;Ti{PO$P%TvN^c=LpQTj3$g z{GP{ckUB@U^~EdH%Tq;aS|+||2w+{KXb}0cQ7xo>eGU~3U23_`%@=boNI>S9Idtk| z!8=Akh*JC-LNE@5D8-L+MDg%gfPjVL5jG+SMp{~^ps7aZrysxhhTP0-d?^qhMKKpm zWeh_q59}G|7sRR$d7qN=Om`oUr4Zr4OM|lZ?)BuhjdE3h!se+)wjv(B{zByhvebC~ z5uWw|n6YFsYU)t)J#4Ko+-@56*4VI4 z`dlZ6^Jk93yooWqJ;q?Bb1)h(au%5p{*v|!pT1}C&dvYIh$7byVbHH;T|s$8*-et6q8bvt)=+~oC5Bj62+<1H3GveMa`7NP2S$zR!EWp@ zN)&=Kr?&I%vpQ}m?%#imCH~9t;K5_mWSWEe8s(tE+^c};Me+;SrJ$gI{@yNJZ$$RX zEFm!C)Y-DJ`X%`E@uQw5q)#9QojZj~J9pvGiYSCVxPvb*Utvk#{$l4oJRAd2PDR5<`4qTBo)?-1f5F{!D4QQxSC2Gsr*s?xpO8 z6mk-#dW{(6oCu>*Bhl%ye_`TW+seq8p}{Kb**JefBVy>;`3MaXE!6O{@e)*s$IdQAAK z__uFQiKkRd0TtS%lTf2Z?K_zDl{TG=--;rjoov&t2Nl&{9KUqMQ07T;piJhjn>BB7 zdBcOdGTka;qodrnty%4&o1b5yCIl6)OT_e)>}-5cRQmENH}_Y4(sYTVQ<(1V`71ad-g`98SGx7vb`95NlWALCM zL)Vpjr@w>0Vg@1!wq4r4nJ}gUZx*dx^NP$O@zbbX$RxX_=;)y82&J zBmNb_Eb7Hx-*r?|B`naVl1!;f~mXRm(W5gHLy<|gfBN*Eva5&6xV8Y&X&2ZCR}vT1w| z4qP}Mf=A3?k4%s3*mDu>EgGVmbyMMVNzZOAuzLM*_|7RZ?RfF>6Y3g>`|x*aQ+WvS zWozDHqH*myb)J>gyOarGdf8YdPjs-X*P@xwevpO&>fEsj&k}0LfOf){H*Hj#t~-qE zLVxexe~HT4TGSkkn3*|G?nU<#(~;`cwP9G79k4EsOn}RjK4N9Kbw2j#^)m$+Xdn37 z#zLa_W5N(8KPSf`ONY;2Qc)he`+Y2K72<{Y=d z!h3LB_2cI+YFOmyvw`m0xb-xQ4RwY0bDkB;b4nz(JET0XQ!3A&=Ikol8My@f5n))9 zuA&MereDOAjQjnP@&g*` zf?9f2s7L3`JI^p`m=!Kwe#rCiB#4ebgh}Iyj5(*f#|Y24c;z8Fwl~G|mmguMRb=D8 zJaRwt>GTzDj~U6DjJVHTO)am;_2fRpV(Z<9uh3`8L15M1xK85M`T4zv&o6PnC<&z| zOiW~0kf~9@42}ypyEzVP3T@^%{7lcp*Ka>yP`f%NkMAjVK1bXJ^=i@e^B0p~RJSPh z%#5kTJ|+{tva)HguEG6TiwQyq4&AJqQQzI9hp$n)7SEnXk=Wre#3^;VQ!2u&2n!CV ztDEjA`uPx-TH<8dxM3ZP9BL(Wu_dfd3VZ78T@c~AZk-y!^SOXwqVBj=tFTs`4x?CG z7Sa~YU9cX3^T%M${B`u)r_Vo7;t^v=(?)fK*XHFF(EY@$ji7iyvV<-31${=8jyR3+ICQ7JrW{_r`h*oR2dE)o|K1jej6H}o8;@b^Xx31OGeVRF@}k5om^(iw zH?J`084wkBkav&4{fitNr_PKPyT6i>0wYR{%Jf^dk?)5i19B6F_$rH-q^NV-G}Mn-ku=f|p`U%z>e)Gv=P&$B3?<@(Jh zXjxol#W0-N7M&RpLA7u$iuukgE z?$Ojlb!OpA-@e34_?4N1Dpe}LrdX&&Vl6)1#hGWlDGAqa+{OC!I}pCyU*hrF`Zei7 zJQ|Z9uvS#0QC497wQb#y8d^t0@5l5>Y!9~3#~#j1Lr=;}EY&%CVM%cUC80#ZOr6kG z=#mz_d^#3~?7)J#qj=U%q%rjN7(vZOyLD+U+)v!VxuA#AaPrheShg{SS;HEzwrW9b z>pZ+85gIaI;`wCufZWq*(k!@4?u*RKY}hf4{`(K#(6^@rj-9;4^is`fW4evZvH$=e z07*naR8CA=Ni2p9TTW8KaAh9Q%j(OX1E;G>e1JTJApsV-o4L%2Mka}ZR2UGEVCUZR zOv7i1RxRo?vP2Z`Sn+5B#j$VS5oVy+j1uMA^(3@v*$6$lvyEuKUY3+Vb9|x^yiBrV zZ%j0++I)ETEd3>p8KEooK(|I^UZoLf*p88_NadNCvfA0n`Q(v?i7<-v#$VZfYR7ezJ6H5$+MGc>)%!oi_*mSyY&H5v7v}Xr|k}Sc4 z7Oh|kHU0y=qY|BR^BdnM|sB@)KZYuxwt7HoG7^Q+gNupnq7f`gpkG?sn9v6DCG zcN@2Irf|w*&8AZb4B!(cV4(*u&@74JTGp_$Yzj@TntgwLHa%~{OAMvO4epFL~9HR_}>BSBM$j)mLT&AJ6$h}k^% zu)qL`BLy07_G?NCBj0Ev<--SIZ^8YNpeh7K#}w#u#P@@D?9-5;5I> z`tTA03O^UpD08U3+Om0 zn2uN0#<(*CV~rFQRK=sPav-s9=ggXkDNX~00bf|Kzg~r1anUgWY=#a&E9)-B_Vce< z;2(jwb=z>~YNEvF5(h7CP&#~w6%r3!VF=QOHp&SHFT=KLOQFt(G|-YDMwp&9&4gx5 zM9ec+?dstX@$MeTmXi#B-b*pC4-=5uD z(}jRE6P!nlB#5^$BEpfOVNJMsGD6lOR)0cl@QK=TO65MxKv5TAEA}Bgyp7l`{u5x{ zWBIZvaB+|1y%Tu{0&mZe!uU{{rG-m(g&y1WQ7;;ogH6taF9?2B|!$f282{l<8>9a-0u1cgFPW5o*Pura>KD6>`b2E1)a;1Q-ly;^j96u5LV`uAy%MkYlKE9b#s zHAmyCo5=MP0iQd`UW0de1i6*~h!(sT%bC7r~k1%>QDpn&mn>%|X z4G%9mO5MDMKZu(&N%9T2^|8zPx=F)IFklE5PjLx4PnF3QEDto_Q&!i1^8nCCeP zCJp$ZluCntvR5Mb`u!&jnnB*@>9cou^!ODTGR=dmC~_Qlgn9cuHI4av#GDSv_qchj zWPQkg8w#{J*qd;HDzMtL66=+vf=8HVFFyU0M3~atP!{CrmF!$yU|?b**EJ=9#C;%y z8PKgAw2yN<7ccJqjk-(K!x&3wS5<2=iDKxn=^WSU?R4?s2F$!G`Jg4W!<5 zqSI`widiD@*cbDko+85!BwxFJH~@rAz9 zrCNe3SCjC4*JU&nC?gAb7%+GU&!(71nBa{Y+pQZpMi@~4)!GyIpsWPz0Lc#tTrf`J z{*NEOpqZK6c?tgrB>f4O@C7pDB{s!9V=?w2E#zBV< zpMtF|e_r~*owI1t`1d8`(jYK!85S<&JLR1|eh5uWjd=TrN_OY$7}O}IDHfpnV~+TM zm`9kNojSZ}Bz6i5QUmWdoWhITd?cl%Vc5J;G(}YFX5vvAx%5513liy7O@^;QNzXEC zQbd%=;{wsGf)0%xQ%TA_Q?<3yi|-Q>hU6JBB95XeC7Y}nX_mwJpdHk)@>g~)(wfvl zix%b>F@kmewze5TojENmn!&15TXeOtLx&En;p;O40f7-T{B7*2MKCrpz^>f~VPawo zKfmR0bR3G7EzKB-mGyvipS6&N#0`&F1Lx_E)aQEG&^|bN^ek%W>!MM^dRVu9C&t(p zS$w{JaTh*QLeNM_gL=(&(kOYbYw{~sYepk;L0HnAqF%|$+$^(hYPPzn90W=F@dJ9w zBwvyms#nqydeAC8c#n(B2%IB~MVn^u^q7LvXD;!sfBW`>a9vxwsKAXIv1Ti_-8&&N zYCWb*wig~Fv4bUn5T!W0Iy>T#LKb!VxviLoyj-AeIW6cipV6@opJ8ukAoKku88;TZ zQV|p!dYGi7eEQB^4ci6{3+m*TEIYsXoQC(B%IKm|L+sf2aYZo~NWf!)BS+3K-?|C? zG_GC017~MPrZ>1vLM6a{j4QToj=<(E`w+H#wJ^2|Aqt7!?B+TVckex-v1!kpzY0f( zp*VH=61v%RMEsg<@DB*b;e+dO=Ij+A$7Bi$&|0%1t+)#1*a{^6)%Rb1fuTUYPg60s zfEI*)N{1gmq#L75%>?4FT!iWhDp1T;z?D}Y(4_%?+QguaE_E-isAEX|stLFWcu{xY z{d?ni*X`O-EYlH)8!_8+T3fRdV>`C7LSA$vt3}+lr6>gzaV#Yu&;F`g5!FS4dhC4p z8pipo9;t$YY*V1`3IeQq`arUPxAFd6dSH}U6M?ac^c#_f+&AIBYa!ogmL&DMaN#;?*U^KIw+jXgoPa4)>}mT{8jvJl9$>L~Q= zA>H;a>ETleJrqP^rOBR(pz#lPm5^81_z))2~=zd&JRg?Zo!@f7~(4t0F z#9kHWkm8WbYV+{jB;}EM#-;KRY@nuz7x8-$y=I@#r~1jSbbQoM!EpOQ=+LnZmM&(E z0o2vmcHs0$)-ko=!{MbmAWV~L{OLPi!BZHnD#~< zq7cYM7^~K;UX~PWTdQ&<{7Oxgc}@eZ@@U8qDP`*+?Av~r_C(?i>8#a*67#~=Ok%KqF)RB+-G2&TalHM=fOlQ>D5>2HD!eb=g%Ub zTMuOX_*tg+{bPS61G6T0bMHRZxXwcBetpn=(nK1*U{TNBSaRnU<~C<%D{IuNhtJQR z{&9f`hA&-;%%ACK(!CqzwrT?_M@JlsjW78^1{cnq?b^OW#}b1c%SD*2AD$^lYh#>N zgrSmd4ZLQEqg|s0j>W8kQA=WDCqUxTVAN@9j@-;lSdOvBZXX}G9XgD#p1e5g7`J5` z%2n3E#kf`IFl8E2-@JjgzCMWqHzFxHoAE)6Si6e$!^mJ$?j7!y}OX z^&3V62P5_Ud$D_8Ubhwxj~=FN%)Pz4K-w4$32|OX%m|MYCvcd#&-MKY`1a;4ZZm|w zcj6SrMXo@Ey=)!Krgu-uHUcz<4R4<)gf3m;cW-69)Zja=jm>ETnsnwY4Yd~Bryp7k z=#Rspp{P)`3Vwb6CKkfr!Qn%csD|w=QM0irE-{=#k}niT6$1nKw{43F>()`i1ovlc z@N%=Vu+l-YZit}Hi2l*@7cDB;Md{`3+bK7s zfBnjfidr1cFPw))dFjc90^73&kTIi2%T?C8qlbjfnZH0{;GB~1+l}wg;UiX)g{*h$ z*#2>Y&p+h$?2rYLJ{7+?7xWtWnKNUf`n0#~aNMwR3I^Lo}#fp-36Muj*_tbCMs?~+KyNcL7%5rvTxmdP_w2{-zq9;yr1Ii?$O4g?U^#U z`F|AuSd^5%iB(Z6ye^$TI;nTJM*5OwO&mtZ7rnc*AkV62q^rOz`pl;OyX5_+cPH=X zokPM~96pu&)XKU~)cA=`A%CSH{~-S77-s3Bg<-!^A5AiATw7@QR#l65Zk96UG6Ry7 zxsJZL|KGQ7KM}v-1Pp3dL%TK&sP7yB=Sf}~5X1aIy-6n3SHXKWcm;F&kDp2U*1)tw zg!2ry`K2!Szli@l!?;YHkl40arCwb8TVo;`=@n_=iIujhs`zV=XgxdjTtGNQ35$0%-mB^(-RjE~-ZWAPfo7peF4uMG z>FV&dYuBoRd(6H2^pxC<`FIY4+nm+(dE7k-K79I)UbZbU!y^up#@UKpN3xQU#5B^N zQ%Orzr&7+0y&Ju$(`IDc@sy*dFUxd){x|TSU>Fj=edz+HFO5ue>6C3BTgh=miK7~q zeL8O4F)Z*JfhLXXP(O6P#oOTP$MGQ~LlUM= z=vsx#*T*nV>XB2I#S^#w3;0(V#@4#srzzvCsV`mQhT=YLWP&95>3fX-dE3 zre<}SZPw?I9G8Xfsp+`G+>7fL4j;dX1Bb8E>&P*mg`0WzAkPX897~yR)3!6Hsau)X zLL?lz1~ujw3EQSD5_x{=MAqEHdv;N6%{><7?%rgXqe1FN;EUQNeV+w;lbp zV!qDag#u_p6LAAj!XTbL>oA~CTN;9si#SP8y?Q0A2$_V0gI8&HMTFz&li4VgHEOWa zRRj956As&Uou`5;@!Aegn&`y79B&DR)a%hiUy?00@bQ$2UG0d?ehX>@OUfJEgxwx(5x=kl&^cWI2 z(xyu@8X1p^ibqC1y?eAqISrPe<+b=iVR+Pj8gr3L^Foeu*M={3qF?vGzC~d-NEkv= zVI+rgafn996I~||%}2@|)6&#{n@A|K_7;txTfMT-;iq=3YBX{vw;i|kC=FxCZF_jH zMcdXUw7WTQ_!YulLkD!A@0a}K9U~KUr6VqDEAfas1?e}oAJ}#S?YlWw z(XLeKtJE9*0sacZ?Ahp>sivx=E=lV;#gzoBV`IIM$XWzXnSR{ZsHSkgERgI`yb5n64y)>COyja&6)uVPse&^t!w7(|w7)4=FQg1<40OFmhOt zdD*6Ir+C{Oh#xe3%%Vy$+ z+OD3fP>?TRx;eHy?>~HH1Z-9}MC6+wzK0M6iBNgw{5=|b^wync66x2fX)VJ;JNyL? zU#cvcIm=TnPepl9W(*S_?wUJhcx$oyJ)prh^ccZ4n!cd6b~zfrkVA`NL_B`#HjPO! zsK2E!>g*(!6*O8UiDt_|^d1~Y#K=K|2BB$FR@gLUKIVaC9$8&Fyywmk+c$ZN2c}Kz zfmY4=BViJU^~$x!)D?W3eK)F0@?X3K3+9fL>P19i1d+V!OZ>-T#E?!jK4W%Ht{4qP z(Wq{o=LGwHV`JCvlO7+Z6!>F?IeGk8pWL*o`$b1Lq9CC`(|-J7n$)Ru9!4~8xhRO{ zmNc)V$tKIzoo5iZbQ?Wa()k>A?Z1I}^H`%7{}KXLmV^rzujA3f2N*q~$oMUXsSxk^ zs}L6UdqKyeA{PtS-@Sd06UPqHfRyILj*%u=cfKwFu`c-MTS0eEC>1jcuY$ZQ^C($Q(d1NAD zqFLulY5C~o!J)&akpAN<`t@cjq*c?}NVkzsvA$Q0(|%z*Q(Xt9`|B!2Ia-GKt_npW0rEZRv<$|MJVn_>ENw|X^w zQa7H&MP!Eh_1NJv5gJLpdNPVx7Bn7XCFo3!p13I#e2Knc)e1i0e7#2Uw##W7p|-vr z!z{m-H)Z?w1XR#cVuq`%t+92-#@Mp`2rgf}2aDEhWsDick51jYC*SjB*PfFYGSEuM zKy19Fc>6E5U>s;jpo8CPo(yB>XsuS24lSmWJXZ z-xi@`M6h(b%d`)tPx$*Dh@H0}K(?k+3Vw@W>__xVcAnH-Ogtw7*z%Qo5g9g(TClE) zaA8`5y<%}DX3dSGlE1y3H6}Ci2{9Ys5W9l!_x|ejXLRrNd%mV|ahsWLPLJsV*x)7o zd$+;PJtuJP!Yy=Y&yH3`4DDX3dyX2xx7A+1@c4M{x@e)YK9p#tp6Q{5p8)=77=Vo7J?B>H$s*RmmV-f z(eG4noiVj&WI30p|@=truo!De5APf$C9vJh>I=RIBkJn2*VWJpjVTP1v+g~ ze;hh`5ief87X};e+w0HLew7v;?qhh{A>o_h;bt#npp=wUM91%k-vTK?Eg0B4j>F~4 zH&D5J7QEbtQw{O+7a!p}XQVJVMsdNGU|GNfoV{?5Mp(U{^pa`4Bbe@K3Uq6TMU0}b zY*}&AhxhLTMRRwT1i2X|>A{1ht<5xeW7)Nvj?p-qi~Yvo=*gQj)I9-dUC3~e!=`N~ zscAxd|% z?LabNLJ?6P+`WN%#`^LW|38VBZ_`n~zU+Lb-Fpp$%Z$0y2#jFq@|`pQwB39AU|=JsiViQGb55_!fE;`POO{go3~$}FOmw1gkhgIPdu}LEYzyk1x8KSkqsAU zo8VkRBF@Q?v-tV9OvLS2%iC8xx}GRJB3Do~0f+Oj{>J1;BllKPHW{!5pTG+PL)uO@%=cKoT@G5s$a+JGbcLBP~ApNJ-a5uqKAz z9Xe0$S^esj%N<*{u{c{&S>$7wVXfPWaxk$vo8-J)?7X#wLAW_|>R?Xw2t@X1(M2e z-KyC%c0yEK0;WzBcQAkY{5_S>KQY|>f%zRWpd*d_FNzNzzrxM^KW+0Y74pW?D@)9u zKMUi=&&1qW!|C%E1a5%OoKaMcT(XeOI96PR(Zi+{-AC%`;E^lz!zHo|sXtLzbud@i zy=&*_frAEbkX42f8OFR}l{TWpdHL!i;@2OBKaCtMz%-|RGDZzww{&VL#I2E!1<$A#eBse_EbTosO^yTie0Db~i!7CIsCOT2)7y^977 z`iw9f6Q2mDalL6o^FBSLCz4OxvoY|G80KM8l6mWvMG&inVV#GQN3U@j8a&T+IY>?bUyb9sch z2)N8wq8L5AgLI>uLday8MGJkSCfFBoD+&2ST9t!GuHwnFcNjf>QDI`VqH9Q3G(TWH z?>@xTF+P$n+5Zh@`Tq;d%^SgQK@i4_w4tV+6Q_sL{g+n7iU0s007*naRK%J9i$HY0 zuXCrSbY@(%PKb8`0U46d^o*k70r{v&c8ZoFv*<*NeC){Kem320_ep!UOokB@Wb27O z*~o|;R`+6LkzU2*5e|FypU1}4tog-KrWKmSv_izXUi3bJOSU2=rgWJuN()&d9)j8( z#pkx9T}Lu#l&dH?%3?{+F|zI{^Z4(gb(^-7ro_}UcI8ZJx|#Ad4aXSacRnNAkWrM~ zup+HCS0|z{Gcyts-Z!p`_xx>!F{)donrL4=(lJo%oK0)^b0)KA4yV7*Uwl9nor-W^ zn!?bfQ+a*9ogLpY?f;?lu(h?q^(!aobV1^w%NR1S6RK9xrc5HrC>-u5y+F`XaV2N? zvS~;-bcyElAxQn6B2&2~lVK`XDkn6ve3bkKp-ZOFgo4EIn)H+H+e-ImHZrV9mvIi_ zUs$J3(gm;o2l;X8%pIx#ZPmg=OdcWL3#uaVEt@np6sFZ6UDM*=t#Gurg;seDyng*z z_(5w|EHBe-MJB_LSV`P4EiE-24ePTL)Wl?=nRz`#MDBs}l%m$+XZkPNkDj}5j~e-G z-Fb@c-y)J(g(OGQ{|CZit7}Tl@mT8X6cnU8;Q#J($^y@rR-Dui`G`M%PQ~7Y^UP?7 z^@>naQNfd^Z&8O4j5)?3!)h{!AuT^ic|`E-`wz^YTQvWrsH7+}q@qlQ`JVcV zTbQRWKd0IhGK@ShZB!TA))%Fpo<3;+&mWqg_~h5$LdMVEiy$fKIt>}E$nQRn>vj;*epZLS-G7$uP4#=S|Q4e&tG;mWaW*^Ht81gSQ|qm=#E$Lz{~yErA;?Ep&!B80 zfNb1$`i+IPY`v0Hh8fV4av;&Jd#~P`C7mOcVd{2lf5@YGo1fau_4h)vga7-=Ux;*~V~OnnQ5+JByDeet4= zX#6#sCUnrqFHp#1-Y<_Cs-L`aU9u4{N|0f48XDinlh-_Tu7;8l^3OiRf%A`;VVwfb zXa9nCkdx3jxit9v;Yq0(CTw{;K7V?Hnl<=C-D_7b^S0j<+m?h+A79J$%=ZtIq#l#! zIb7MQ>hP26J-B}xw{O=My7tP0>C?U7<7Hp+i4s5(orn9cL%YJ_bySTV2c*g1156tUl`E4dBUdgi@tpsw2wNVDDHD3hJm>JCOE|pi47yd;p&u|Ys%lBP zQ8{A^UsK4-R8v#Sl68(mhPiwDcAJ1a_BeCu2s(9^?uAHllC57Cin<2+xOe{%O%Ztb$QhbUlH@AevUNYA zqBr2|=^dEq?oYFiuU{Jqdk0sVg*;^0JbDj*KQ~;tavS#_JjRA~Vd!i<9Mh)SW6;2! z=+(yo2NKqzPrtD=bs$Ma*t)ej#*H102~HjuF}xqTbZ&=P9)UCy7TKq&s*05n{unse zi78V9j2bxrhK9A7dyK;v`$06pC22j#v**oqMz?MqF?h%%gaprnu5NV<8!;9A`r4p* zb5r_Gl0YIr1k7iBvPp1&)p7gr{N@wXS5SkdiZYEEOj-~nrmn0j{(i>wRsv;>sg0Tl zOr6FCO?GjW=(;Inm>rupPun@iH$qEMi9TG1Fv=h5gox01hB_*!sX|Fj znI?|=nJ0i+c0TrQIEr2CkI)QQn*%nZx_!g6xcrpAVFB+Npfsi8sg z6yU?h&oFD!5Fw$lc>MS|WflT1Z5nw_IjwRCT(lAuE0%|jP9@Z<$Ddgh?P~7aeTY4b zz`k=wv>2_5GfQ;zMtbd1?`1H_Q$_g5#X_b~W?GJhit6;YI7o`NZ`nD})euicEDzL~ z`hOg=cFwfO)pN*)t=_f$;jrjcLjPdpvxDT%%w{=DAPQD{+fQlq97v;GIF|l z^|o-|U8ZtKtKu?aKJVOqeY*);8!n4t!-huim^~Tk=^4<{VuKf|FwDp0?`+nrF*DLR zBJmxsUAs-0&vBe|Peu;rW(_gJWgJqN5nAy8N5zqJ{~=y)JAuY3>QGZx;?Yk{wP>4w zBt*?*=yo-Q8M$RE;(mSxh8dQP3MAv`d0WRiCIZ4d<*h9)DAzYJxpVqSvXE0&ED!U! z7`tY^c252uwJ+I3kV84Dx_Xaxjcbh>iIzD+||Ne?c`x73c_* zPyhiMD>9=XrlpaUN=F|2P*FhNxt`9$M~xOHmKT#@rn$`UBMZ0fD;e zW8YJzB~U2x7HBBYz(eN6=-dbM|8YSU%$TmCsuF)V-mF~<;rvKe`Uhqq4qqD3)04|F zPi{<|J`XLKCZEVEsi{8@w|XlQnC|M#DK;x-#EP{zdGZ4G>}K6uyLPif#Bx7ezH*aZ zQ`X4J%ErcxTQFomC-msXnjsiBXS%a155&&>oSlv2_i3o5s78I&t1~n#p2leV>o*u# zw{)#cI@4@avb9;WaPiWy(#|Pyl;jt<$O&XA#J-(7CT#cfTViQ?YhJn2?Fc@7KIsywnh2xLtSD zs-c2;e(?wk^)L1PrD5lG)>TAWcIXu=*TH$ZBTcMq)n%w$8Kg_XmMweHyD+DM{YYCZ zTDS)9U%ZELzB06wRA`Gq7Gq5<;d*JZ>uNCczs$%qmeq<}d%iIrVw$Ph?qw^ZelOq- z${@zw;?U*9)=%gqZ)s-su?`f<)aa#(vI?r^Dd5G1(|Eb@42&2?S~1v}wp4_vKICNK ztrBydUUdu^JrHJ$aLFZpmWJpkaf5bIM(AN{MHhl;Q^!a=M;b^psO#77;L3&TxOL+$ zDikO{C$|7K)YPENR3yg$oA#b5WCQ_fGR&aM$Q}ZP(lLfCd`bO2N|CpZ{U!R&T%sEyl?K*V znT%A4(o2O|S5;z0BZUeua*Ul?Vk=nIdO;yWkO>)U6-~+j0+rIY5`T(XATmxtnN~)b zGR)lmL(f)*^l5~W;1m@B^>UgpYS99&W^4>NJ(C7-UcUx&+WgsMrz9v*g_n|$QAC-E z=3FmixPKChZeGLeX06KXeoiCo4xhettIRUCmKnng?bYjYC4o|LUvRlFd)p=~9X=8< zlc)1qh6N{&VL{jKI1mT)XxFqII}kB=Fs|*~#axq*tn_p!DJ$bxRFT$qD$|mZ-0gvv&tq=8j?74|_*`=7 zK`3L_zu&pdd-us7EKml@v`gBOm`FX;dRTQ#(s}x!p*+_F4j3Zr3JBtyUEzIjKUR*N zhzTnrFq>f(?W$EVDJ~kz1`MX>F1d3H9!;BL!TGbuX9UcrmoGtGOA8xaXTtN?F)X$z zGVrzw4TXw^27Y}0T%u^@dg?5~y09_vQs2F$&#Kd+CGpikUUoJQrm_m-%K)5LEdY>zI}(8<}GPuh1rd! zziD5-U`hYMRL&T{bVIYvo6-IAEjyvT-Ed?xU+e7y2e9zQb@;Sm>j|Jm5YREYGB>AuT^8D3&Ns5Y!`Bxq% z3q7S4%$pmYyzk&Bjr6SFwqD*7xQN$MT->sic1dL4yq2x#@0^n-5It%X&aYbs-z!(( z-`1jJH91pJ=_y~JRka#rKmy0j+o8a;E?qsn5Y@d4s?~2mTN-(>xU&`QRyYO->0K25 zS8Svp8YH=_!>Ri?{HsYq)zsB9_Z>Oby!ieX&!5+yH_JUX`~3&Q8fh7| zl>en@PyZx-G0gQ&L-i9XYk!#OHFvgU$4i(R^ftwR6Il!cd@9J#`l6=#C0!uMZQaiDRF8iBH@9rn z`hu#es{H-he+l8L@Zi9w$w_VM=#{V5qG?@qE;yqBGuk!iPO_MlDid5?;7g}>$@_hng(lay zar;f`^H(Y9J$m)sIB@W=SpC{{p8t(^`7hxA6tkqKr&pLd(J?VE=SRc#ZR%F3UQHVo z=H-~B>{RTcASq_7JDF%(GpoQi&#R}RJh#65gonvrUskDJ_ky>t-}DLFDPO9OA7gi>ZOd9l^^9sL_p>cs&d9QcQQaD3F<@2=j_+GE^3H>|Ka!HaKi$4N zp%pW_k{O`qzmES|W|`~Zx;gdB(}C7jrfT-X{%%0UKY@AUS{0b3`JN44`6tdi`r5*x z`?9eUCN286%k?|>pJJ9r50lK?TqYeFKiaZpOH*P2U$Uc@G!S`%2=}6Ci#hB~yn_~V0bU1fjhhv;`#{oz?RySL4+!`l#Qy}d96ESl z(B5sa5w=|$=`xH`s%uH4tCMH$p_?^p#YV!T`}l9cVt;!Y%huI%H9{8^nX0;Zt;Nh~ zeQ1_8g2>oIlvxO)kaIm}4g`^f9wooSsdM)*d7S(TI}Rj1@rZ%ujhWU)usiYYv-tsG zy^V~G|4ulEGQ@wHS*~BZ);=a;;r5<3rZsK5HWoWhtk+aj#9!fOdL|Yw+5Z2rcNJh! zbxnBaF6j~!14R&N5HUa$TM@Ap1p~2LP!wCRyBoU`u>%xAY{f1*1?liVbCz9p*D(gx&ngF?Z%J(i^xVYPfYb0G?PcD03s zqzqaGTUVzdt=-qBqDqum3q#nv<1);jGk_Ay*pU@2`*!XNr*-8F^wpt5TQi>5#S4A9 zwKRGfx%<^vpX*6s*CTZQWWDB(B^KBA_DQ}YJ7{)w<>u5+o_!)O-VkO5?uS)Ny`ZqL zn2uH^6cuD>Z^WJZuCm>;|qysl@M}bj8Ev|E7Dc&u;bo=b1{?h6EfB6^!EeGJLoC?(Z~e;Icf1Bz3kGSugUcn3B;?qE1uR^RW4jc>mIJIt0M3xQ5Io`cbfToRgAmYJmLckq4I8ISf3E_bIVC@QTp`S&wrkHtL zI=*j@4xY!)UjIGSA%(ynK`cWD_KkG!YHZipnSazBlaEk*$PvzfdcmbDk0`MW?%x)6 z@4v=#9~4cO!ykc<7iSerd~sO)T0~TYh%wH2SbDl@uyTnP{cO^#V&Bp<}mMEL&1S419guD2J&^ z_9J3q-w}PnfMsIivFFe34_cbausHZA^dzP;lh%-}RMY2s^zPQ<*s1e1%gwAIek-wrESm7n$zI=x-|q{S9-tle}D z%uO3Whqf)@)VcexV)aSz8{LiQ4}z1~@u6S6`Ix-$Vbtm=C_rBfr}>(ZnG33_O4OyF zo{owrgIbQCjvyk;8Q4dA#QoRcV8@uqfXy5nY@30uwi+d*MRNy(k`n*o0thBYJa+0H zRnoD;2~Nk=)?yIXnF|ky()$?t^>HMGVgyG{+yPH_{xds<_OrC`?9(Og$jOVpO^^9) z#Ik4e>~F@6RCvywyA$yO+Bleijb&r#(y1aS*uQTZxEuKr6cl9XsPEd@3fwyKA517# zPy`@4xwN9koiuYhOqcqp?54#jIG|=Gq9-o-b@g1Fl7q3Lq z&&tXbgz_Nz4ZMAqK(Cco+zCx_ra8_IBow@6r`9H{d!I3P53E=?obUY(>1W*}V8*DJ zMJu-b77p`Uh$VD~f4Z8A6wjh*i&q?h#Nj?QIt@cyFxF4^-$jFyAxjv|+Ba^y0OLjpEpE&-8=|)3(C=C81QQd`Qem zH&;tCG8t-37cxR61;kk%#=N0Uxecqvke8kUqLqp+ju_gJ>N*o=Y=c$HMzWM;GVCz$VgJo!lcvHE4*RKtesS8-WPfu+K|zXVrI&$9po6^l(7(#wQ5p-y0M)yPU ziQn-Y%;UU@`^x&v-b|bq=uee?Msbx-xMg}~4&j1PFmf30t|{#t8#bCZYxI+#Wm|t~ zFXmrLEGrlJB^ftX=UD|h^1&;xw`J%6YnG3K3DdXIGN6izvaoFBG5GK?2_}r~K|6s} z#x7OP{3eT zuy5!9XSy&UCMrfb5n|ZDiuD0A`ooKtU!aq-1vTdpMurRp_v6Q8`d_MY^7zk+Fu}Mf zn_={b&gA^uX7YxWV_|RTHIDNkWM!nm#JD~jICKMM&)W;jf`;>YoM78Z$E=HsW8%fD zcZDu#TV4DzVwpX~>z$*mA(yKPBKFSO~Ufe!{R`O^>X4&1i1HfpgIfX7z9(t_pbFlVbBp51S-Yr zf=9zsB9hFANNU`ObAI}Ut>@`~CO3Kh@-zL9gtBX2IC%7KO?5GLR3;QAaQp0>Jo;SF z2w;dOZjAHks5QW&$CE?H&i)b(^Gk@Od*}9_#*S#mvk+PsF-g$_TNxOsMe9XLiFcQ> zS!7f#nm3pR9o>Np7nF`~tfVj9Qv?N@Li7DfI z!OPd5p}3@silC(nhO(66%{wkaN1}h>_mRUo(v${_BUJ^APsNadf%+Hjiwe0QchV3K zOS8Q@H_sn7a_s!t-5odToLB~V_PIB9M0=iul9KwJaua?IsF1}Y`5xDrSV~xNQde6Q zW(V#iVuDo~kLVnXyp-*`!@zrZC(6t%cj-7tk0-`BYO9!XdW?g zXodcP{VVl!xJyIczV{psAIC68JE*6^;AkGb8RqnZhjCzQ&D&~LS4a&!aqP%vcMs3q z0v|**QK!Um=l0D`gZr90@cUgsL7FBZVMh;U*uN^pkBPp$7zKX6Ykc|ci_WjJmmWfCnFI_U<_V@2hG6Shb?ZAM9Ce~{nV2+zjvYD8U97o#_3AA+ zd-e*kl*~DTj_g2Dc=Bun3??s}*KHy(pcBxewOwW4V5+2PsUBz0<)*~gZldF#M&TA-Jt6AoW-v+*=c8pqw<1_O}m zS4>JCKVwaur8v|Xv5fKR^R;K!R$S|M?Y;SF@J#>!AOJ~3K~w?{$%9(DU>GPX%M%lK zEbQJN4(m3bg#rEA!mzMD9Ki4pHdPd!GOc=MCZF zwoDE@cH&0rb3se;$@32o_coqySgBD%RgE5Q&Tr0My4IvF?y*jYWyTc0O%(+ijy6C!e~Yv-Y*lGSwE;aWA{2QTi^v-cU_{tMMk|QR$zB9X;6B1`5tBz-7nYFo=$QOF0VrbD15uhbqKd){f^m z)|io9h?u7g+COj;tPY+6gZeY(1?||e7h1M72W#t^`@1%7Tn6#P41XALojN5E-b75J zOP_rLoA2a}Gz76``Dn-`*CJOwWrc}Bo}9W^;Nk<2L_`ug^^o(79>LAIM-Ok?I6FIA zSy53jtESgqD`Ii9t~ZpIJ&4MvygZ|4jvV>FnT(FH6W2q)EdHI(kbU}2-UM6MGZNa3 zjC4Q=qq&uik3^-dZ$=1(ZwVKnF=p&6SQ|1KRyzoX7HFK7#_STcbU3S#_}U|7Fu zIt(4icmdnC?FLIrE1}xn@q(_77U=dJ2&2bLgNeR980Q$$nsBasAX;j7s|cGx}3S+0M2(eEF72EKLor?dMGO`mka9i5hposxh&2?b!Ci z#Ic;_D9*{5PpBMS`iL%_tf3d-Bx0f>5VFLZOAQ-6VI9nz>;VlMXv5mzF))S@)adc+ zsI#fQo(6R6z$t=`p1KEtfwOCR$ra}vGm{X&R9Lr?K@iwwY!2ZhAxkGxLSY9I3R)sl zW~`yode7KtR1_+j`zJ zLM~j20xeAyVnSo0*k)KCG8T@Xz6*VO@t(EW!_87<@2>4LhK=x9QIl(~5wQ?)AwJQ! z6IV3s_PuAYcs@g$zi>GU&YZtb^Hb0xiUGpP@F9wB!-f@7Yzq&0%fzmI*C05!=9z@Z zk^IK{Q%-_}g1}(l4F7eoYWZYJDExrB1QH6G<+JB)q}zH8W#rdx+Oz{492~0Em6eHc zD|@&!}!tMPA;@)m}XqJ&bBm@Eb_r?XxE0*Ga0h>1WcRgPA7Z`Q?h#pA(W6B z5(>7knMSOemCGhjLP4NzG;P*eN&rYG!UChzNGPb&ELye`mIRFh@8JwlvT@^fXyeod z%uM-b>hr?Lkpm$sD-)8wR`hLHx$Xodla#)t z%zG>(7M5%!Cuw6N9kGdiqff8hu(jHas;f;b3Gwmu38C=py?Zb6C6%|BWQ}Om(g?n1 zb5^BB%|Gt#H!5=GOz#gqers93p|Xco6gy5|cti+geswRCy5r~0T>;A%kE4Wwzyzr& zGuOZxLL^L`q$WTs1_|Z+_aCr&eJIQi7)7`wL+@C>ej9Y?(2j-(goU!Q3OSY`Ivl(si&Xa5NmR`Zt}fcbL< zbL{`=OERqrv1PiS+|i11l?!1H>C8SiSI#7Uym|3*7yZUn<6uefVep%}3G4_r@gB}ux?;!PE7c+t zj1I3|yA1;UM^Zvzf@#elq5LYStE*5#iBCv@Lr213+ToVch8M^t%jU(S3V!XQhAooD6B{ z-@(eFf<4cfF@Uh~li*#+qx z(~V2T9WZEUmDlqA{bx8rM&YzcgD9ae!6Xt~{wXwUpi2qmRoo}Ib2k=7jqDA6V;Kz~ zLV`Cyuio8g-$s5|v~V`83Rw-^+-$&+5Xxf0f&Gbo$4jKJ14UO#Y8C_p?WNWqCV=s;8hZS)&{1ijiRIXl!y}qD)#pf$k9_bF>}{Ka4G|;9Pu+pAtI;r$5Y3tu zV>p~?&t80lz&S%;718qJ6VeE4T?Z{q8xrEu1-DL|qUwCubC_bnzgg9*SMT7$h0Ek+ z^rM8rj^vaKm^Wu6d0-jB-qtULYCT2h)uS!FE=>)F1v6nBLx)?jVjcAD+l#BmH4{^& zO@=owBj{&;!hw@hGRZL*I^C0}?;-qpEHxmUD}_U@-+n^P>tzf1Cz3HSa%cyXcle@& zDuygHv0T4$(%+*eCo9{r=Q5pL*T7JVYUsF}y%5Qf&w*I8;S_9I?FW;_^`_G_P?_~# zum>jka$0Z8R~?5PJ67?%h7B9G)6VM|8Q)?0?6rKi`!@g;*DGP+lv~W4$=m4`cKtPU z?!XZHTIGbYB;+tH@qy_cO>%W%+~f`P*)lPpZ#(ep_G%B8X5Bettgm|Eks7h!s+8H^Co;^_!2un6ZLK|9HOmlhgdij&N@+1hKR>}8O(%YWhaX|-yhDRg%cp@?Pq(nTRQ zEjXP!C`%FDh+MoI@toTBSBN6Dd&^Xg?RpcLi3@rkr_SC+*X_C*GNJyv7MUYX!8OyqK z}-yG znA>OlD1e4WoH^*ip692S1gNSp?l+SR7?JYaE|V*F-B5ZU*p!_+79gp zty@>H_n2F^AT0DS&wXALOTx;Kc^vx-d!9yZ9iiVqhWRWZX9QZ>j98fW@WEW$^24^R z!SFcx294xTBV6J%8F0+!YG%s2+QP!X;UHG-)7rl0605kPzP<)EEZCu`E-l!eFGrQc za`VP@H-++agUUeBg7F}TBzj3lbw0?c71l!%ex zGj27_1VErZiB3}#MU{trudX&iRfDdQSk|ptzH-7C&YamL!H3|@Th3mDNb&642TNJl z*))S5UG0fAbP@s=?W61WY~%EQbn7ns#PPa<8X4Wm+4(|mFUDu~KvhuH)`G&Uyc+FW z89@tXK*XKPEc2O(4<8d@?Z#8os`4Atlf&uR(#!}3dUoK5R4ehQ?0_8T_|d~7`u6L; zOVBk`Nh~^A3hI?9(SP~?*tYv3wP_kCn)~~H?Yv+?5PZq=Iy(R#Wl1v>%koIPCkB4;&{G(qkHg7VMR%xTWM0;uI-xx zYfUU}F0IsfnOvj1x{`|z1Fs?6sR~%~9H()n5IKo)4ByG?VbkgfFnVM+j_uxk_%obm zh#GY_|IOIGEf_w;MbXc#?OV{I0GK$oX5&d3U~F!TN_fS6AfYhRGO>cziPLw88U2Yy z_I-Ug1JAZrjjGI`6G$xBVoqLxx4we#8rliA>^KKbt<9i$vkGfrNpL8Q1tDXQ-e+3fDg>z>HH#6Wo>f#j#p=)PbFgI&NsdlV4cWT6}DFfib z<@=yPLNFv!38l@b*RsBFg0mFxB_E#MP65lQ8yhxg@Rr}X1ry8JQ(ny`REUmKXYW$hwrc$ekdP3A z;^I;mKeiWGTXIg&mX(tN4|hgFH3qb{?mSN@x*bObyQ;dDpi|ch-gEsyLytREksZnR zIOkkpo^6*QgTUO8n}Gc$@V3@Q_|FEd`n+R1OeEZjtm0~`huO2n!^gLbYe#SSP&Vgg z8fqs3QVAvquGdnQ>U6QRR zbW}_n#J%|nb7u}_ah+4=?hzB5)6shA!kM8pCKeN8V*9aC;`vMW>4NoUW#y!yJz;qk zSSN*To8UD^pl|QCl=U%zr9jzzHJ8I5!kET?ZuhZ29r=YnS6eoy^d%fSj&Pcl)GcvfSJjj8*mI&0y1Lxer`W-lSiXGu+>l+lMT^GJ zK#RtAFy|JR^Oqut&0jHh`Tm0!uxa~Q)_0s|)3!}Z@ETm;xu4fU)jmX?DmE+JA4NiCNOSVzub|>fRcjXD&c&IB`GmcSDnpG zgJ##$=bX*ZjT-7ew=NaLg0l_}?w&&__SW5}MCpo!tJh;Vyu4U|rgiP7DgWPtrahF? z!_BX>MtmZi5CS^|o3&s}cR&Y^3!!dY(CyE@4HoqIi`t__i)O6nYH42egf?_v zppKJ}mjt+&60_$Hy)Lz zxH6zf^iA~kV*bmOYtgjS{L^Re>HPGao2Rh?j(K@`a@8gl3yW4ye&#)6eLr_0k}gaP z9KIN4Ps3@G6_hY#)@Infbtdck^_!32!>2^>9$sNKD=JhOg7^y|psl421wR-)s;14} z!u5Oa9*z(b`xY!)F}Tj@vv*->a45$%7`NNCWd_H(($W&XG{N_WnCM65mdz`?fQR-3 zaQu!6l8TBvhZ?nXfe#!%bqm~kwgIovD`@wwo?RU{w$aoStZ~-`BqSw4Ok99hfKS$+ zI8n&OC3sZR;*%*=)p>*|*;-Sms3<{FIkC98+R(6ydoL%J_x#e82XO1o6R;{LmIj8} zFv!yd4C-sLEFg?Pb6uf`2;XTTeD73FULg}i3iw_ud#Ma2P{GB5IH;W?TU@z}yLhpz z9PbL+bqUx0p3t&&)!Af~Vb#7p&7!Leez75E4|lL|5?t@@R{;x1Gv72?oJa(SB`XfX zoEd`%F)1<{ag}c~WFU7@Mw8}-TSAH01-=>Me)ylJ=8 z!h&LW|1kkfnpIqsWaUN(e^FyF71N-l`{<;2CI$>!1T9UCz`@p}+Ic#%GP1e+e&b6l z+B!Pl%6?RjSQ;7W!lJ;6iqA>O8MKrY`}GpjtXjwX3jrv9uA1s9(2AJO7=Od0Zh1Kw zh>Us(ZTVy{3WBtZ3||X`FR|$8>VAojdsM9xEe_X;P&Lf3w^BW0*m!9pX^NQcp`YJ4p6g?7-l7W^_{4^;pFBkue(38v zhVO5+MS6M`i?hhe)y)io#AKcpGYkC9BysWL+}uJ|osYUgcD8VntNubTQd84GMWJr3 zt)Ya5OjJ~~)N{a)4QXG(>y%g!7cO3dzV5$&+UkD^jO@d@1E!TUH!*oEXd9ly z668O7_nVh5EknVx{w_EqW0&pCg*YD ze;##R9Y~0N%J=u0;_>5`psilFhQi&*XC?OKeZoc#8FX#u{)1etV0jYDq#3g&``fii z>(r#lPwSqoGkbNjSK+l?P2uENvnC0`LaAOosNdw5H&6$~dMdx=Je6_eDDPHxwZYxU zHwi9LQLY&1)OJ3U0EzRH0fC(Ar=|Y5A~g!X{|w?f~uD@oyGY z9h^RW33~P7U8(yo_yebXU@AggVLRqbKluVSqEh0eWk2C_8Gq}UFR?T*F^PfL7pyox zQe5VlD42Ha2CUpz`;z8SQPDLb7ObTG{{2UAcB)80aIiOrXU|^K&noo|;Y&&;oH~73 z;BnH^Ga)6l!o8iBkp{~826UF?Px8>PoiGCb7bfL$9S_g*H8rcs^L+js51E;amO5w7 zUT3W@DJg=yynK+AtzP_S*RDg*!>#rM7H2K4owXgBib_I>1X)TM_nR&&nayt>zQi(X z!NQU2dh~f!d3_scc{ny@D}2(BgXyz})c9g2kN2q2em8DLKw-fTkYdYph>58b@cf!e z{?uN9Wddi~UA}yk`v)P<^Xe7jF|uE?l%zP^xf=zYT&tJ8{_*1nVlr1f2S^YW2J8Tv z5>YUbkY*7H6C?e`^KHMvmspG%HF}+2Rtj=r+?&XVi9w63A~-&6D`Ym&0v{f8nT5fE zpj8k!Pk1i%I_^D0Mnr&Wz5hmP=AlEUz{bWLRFsvf-WYH?M!hI$q7U9dFd-UI!U3kusJeV-ey-pg3MOXH zUJM?+gd@U#6R_d=moM?qpn>2B@|G=o$o&hKSA6MmB)kfX26K6NFqacN%a9$;-MSqX z^t(V}v9ou$xwEtcl*Ou-H*2S=2BkSAaAo#RxSEv#j-73x2Oo2Y&6xa z%R4O&_-SvN@Bmlfw3FlIWd1lw3Q%W?g(&lG$(9!FN_((yUgjn z{U>1ijze(g79&-1@sjo6KW99&Y1M7IDw{9Gz)w}UCb6e(T?3~)cr9b`5 zYukqppRgKyG#nf@hZ5Dkvxfx30rrejuZ=rj(QvICtPI8M1m!MIV6` z%jaBB3BwhRo&IZeb8_2{3ueTyXE{1e@0$1^pjopiGWsD<%!1QorW? zm=%jk`!+TGsqN8y@7zU8hO__1dV)^oX1R^BiewdQ$i{d9weibIiNsox16A@;Wu?Vw zMtVkmA$%>!h3w*DC?*;@-nM*vG5B}%hWujQ8Roruc7nk}Cy^Iy0dxH;nnD~scAn#9 zumi1({Rd8RteY?~5Zv6_a}Y|2x%0!7=ue96>378iGi-H)v8rg{)p{iP`a`uNWuwY&=sKjSO_|qd`Oa`y0Xw@n~ zdQl;$OVut{NQ`i?#G_}2xt%^Y=;E`dQcQDNe9OAEORle2H@gA$s1dE(x+w=geu8cq z+8`w%1`^_8ASEdVlH|X(v@96QD?mX}30(?{OIiPal$G#2*3>CJaQaLbOqs-4xUio` zH|jFqvh@JR`en;E!K|6ST*pE2(YAd*(9%?g5nhb0V(i4n1omgXezn3lNJ&lyeSPj( zn1Ksc6TLyWdcMMLhgd?{(CYvIAOJ~3K~yo^A5_V+N)suC52b}5Q6>TsJ%3G`K96`8#F5|wQdo!_tOHbQ-`~^#7eVO0)#|~!cb{0_ znRAkN?m7%3M{w__si6kvFIwBnVB*9PaQ^%?y6(k`H>^h9$B%6R&;H|RHd%ap5-eLf3$9*cbZ|q$Ni7dZ-iwHa z)(%#1=FAn2V}u?$U4EWDaQ*r{m|HILE?#1|u%14B1!iW=Sobz#=0ebG+K}8NXKx{X zC@3j`$4Tj6ARhb}rgLhUOI5_FZ*!XqE3vxMN)$oraw1qCu)+P3-9I6be{ zr4Bx3=Rhk_c~Ar~c#)C;%{1$QmSoit)_Q6x;N0E{{Kn6Q4eKik{GoNi4s1lpv_ug6 zKC`>h2M*vgKi&Jd(FHNy&x^IbTQ{yGF*tIV)1q{7cBBgvUEC`CM5xoS>or3L_n`~p zJi|HmVc!pN;X*jfnLY?MZ@C2dLJ-R#BI=QYs}OyLS+z2)ps5 zDbe{v92%39v~>Qp2M^VeXu7s*^M#ntH71&-P(c`~AOWcivgw&Ze7#eM*ZT1-$2P^1Rh@ACt^z&~IaEM8Qt#^zNbCgvGTnzDe!f%*^hqgKkH zBWJ0yi#k)k{=RVa3d8hXvvw!t0HcT~ym|ddon8wQk&!Xbya_huVCYXhh`GEd{1Na9 z%-u>(0ezy>s*6f;5eh<6q-MktDN_97{N3Az)vo-+#HENx`bOJYnrF2EaiMhK@c2Y% z3H(Kl9{LFY(?Pz&i;_Ihk(35aa^uG?L3HkY;FE5-iaI3W7N9ef=X3O;Je-yNx(7yazF^`qMXJysv(ZT7Xv#5-~ z;=1}};sWCsOrRBFD#558m03~@uV2N%&D*ii&WSS<3|r=n^P3GDHwZ3L{HxH3K@aOgD$5bSB zvbD@;FDlcmUNkHIgYJC<`eyX>wCOprva)INc5MiykZ|2yyN&sz4C1i= zDGg0ZI1X4<1-Y z|6|ly7$m2pLDc<6aO27y$VyEIg@R&eC@l-}Y{l9Ccyga}RQuV3Tg?aO!Y@%?8=P0aw&vQm&KDFbEl)-|Q1 zKuMgDD29Y!PKiPe$|RUN$FF({ydfbWi8ajX?5uT4EOC)hZU2OHYK)rdNXr2BMMsNE zB(D@iBA>#``%mE&VSCtI3yG_Uh#L&bmHcEhdqR^F_mv<7CP9c$QcM)YMMUYgc$~8G z7p_kJsNrWBIo3L+0xGPv@;i{1oW>pbtOe?nSk%53s0d{<3xJ}!8swz@p3FHZLJ-pB zgdkE*EX>c$|Nmylrsve@*sU{SSrfb>s5Z}5Qbq<=J-QE3XU;)=ljg9j7h`@*$m3|3 z*VY*da`;Y^`_Dj4UmvnkQlKbb_-^)sAP-_#i(g(=R<=$G`PCV*oIM!oUDEf;5QNBP3=kmV56iBXQD_pBLkdU*)ZFGQfBr3HL^6bqxaZGm0Be(+0*y24g(A2=Skfa*CjE}R98h7IbJSPtykHU5tymRvc>ACh^+)lPX||2zhK zo0@VpMOYqn4<RRuMJ`a~=};;By0x3OUnpNx_cn04)1En*QRimzHjBS?GCXr3-c zxL;X$8F>W_4RD*c05qB!LvC6cz2=QQyK@}_&o8H<0zb%o;pg!6>*@Md-Mhm)!VOz> z>k4lpI2(jN4ZjNBn>T=jj5HjbUpK_9@I6nt>aB!BomxXjKE+9UH89B|#-q?qj4RuB z!tzK)RqLep?_r{;1+0#Zg1qnFq1VhA5El^vM+1XkQN$gXZf;45!~bd+YkzzZ?h69J zg1m&eR@UG=W;EQ`x|Q|&@GV>5erVP1A1z~J7`S;m{hadl4Z3mRsNWc9<>3hqqsGuu z94Pyqojn6LH>`uimoMn5GCpQryGM@(Jrfgn7RI>tmR;Q7SvaFI z!=T{hU}R$rXnlq@_L|5j|EQL{WKEDUKM?*s^ zE0}L*4~k^ei?ekdvFqO-V$Yt1=o2TZybcjjF$iC=99~|&$YDAop=@$(4-P(~;okPG z;B)F6+*r4|%HydT7*eGbAuh#8VRB!z2-fssWa}BUY{{~Eju7s-Ao4Eg6DzQ;Pzpc6 zYx~;1u3frTee*)1PKkwy(D$!o`?PKMO8!GawTs^R8Jj|5D@!;WxR8EFODQ`wjViU$ za&q9{*$-y6w4g6C_WT9tJ3kN>PHhh*L`+P-c!98Z8<=zb8bs{h52l?vgEG-`3@j|* z_V(?NQZ80_p*s870je~u@j9CUMx)pIO zCIKPv+Of&ibTbPGep-9wwpd*y@zA3Ob(e%&j$cA7h?BQ&He0=H>5_-GvgC@Zi}Ml-Gc}8^EA`iRduS@$?3%E?b~Z!#6jo$1FQA-ZKu8FzCf`R9?(+Wr{VI=J zOvJ%f_nwfSk;xK2HiL&kbm)GNV&f!je8d=qA zzW)IFf&(nASRw?)PIhW4JiB}uKF3zA-ZJ+}w_PjTsxFUCS)Dy1+k5EbQGd=jy0| zSnZ3C{0k6YQdE*8FOy{H;Bak5z}y+Cs%pZ`UHy&tV~B+vL%l|9zy&{NW@MsqjtuX%a?kcI(oz_@#Dv)_3{eTRSJvh$<$$$s@ehxBBQ7f(xs%6Gekvm zmDSY~T06U(>+9*c=TGDq!s3r77G7}e>~cGTs3702~h=cagY(Rk^?Ukmz6}=&Xad9T8sVQ2~QIRgMU%s&Xo|U2g^Jkf) zx|&j%jEtC!qP(PnqJp%flAO zbG~Qi7iVYZiIjmzk&ce;=f+K%$Fz2Ab46EA|FdC(2Iy<}OOXE&{3|8V|0~|VduROM zeuVS=d$+oM{P3=sqJoU1j<&o?ecgJ}Sbv$lvT5@MxCmeIzOErDDNYw9B{@3L0x&C> zv9QC4=nx%}K3trh^Z_8|Hc&?NH9if#C4B#$m;W;}>w9jgm9_1iW+pA~Sy);|Hg3|i z?wWY~#V^HQ=JJQ(P2B4iXHK0Mdh>dCZ!xi-@+M8S<(rX3UXD?R692Zd*PzRP5vWlq zDb|M;%>a`^nTerBQ2cE8v-{5=_HHSpre(wDZ`n!jKc(i$$SNkgcJ3PL+|l)%uCCta zfAZS@f)jt4%RdD4I>y92bXvbUc!{`JnR1I}TB;_-dg5rJ80nDFG}!*1zQjKg_ zMN)frZJ%=T_>oa9O${V9)ueR{^cf}lhV{3pV(-5Y7FbT7XnM+I!LM4$A1-w~@%|z_ ze)_RA_UX5DIR%xk6DH4?)w)d^9{mjeqOS3mx%>h=j(uc%;oQklAKyN2Z)B)sVBADk zR80HyE4KCxOfKVVCP`YP)BIv-s(wdxK1ysT<(H9?+-y z)e1N7xJ)$&pW(cVCxl&l(8UMnl|8@4d1SfDc3p$1zB43ck8Y&xO(FW zG&IzN=EnN;dg9(Cz_bb6z5S3`B_(H4M#MB5=Pn9`oSb}UY@`jX?V5oZVO*khIAw$h z4Ru9{?wu5Irlj%d1O7kXe@rR3dh2!C*m0Bmd-QhSSLY}EKfqt+A|zrT#W*YsoV~k& zzJh)m2V)scBJ(=7Ya;aiICuks4niq0Pb`TEg83h!g&}sPOSBk% zFlwM7O%}bf+(&y4Zj0P|{_^9DmKF}DW(5R!SH1UNApSBJ0l0nZdXM!hm#!b+VWTff z#O2UhIA6txhO#thD7^cS2rplKg*L65gO0W;e9z8<4cjhKZNsRc7TvBYpjKdI(Fmd+ zy(4DO3+U3xlJCIN*Hed{-E85^`3LZbm>g}}v|#y65Cw%rkd%~32e9{WSB|;j+Qht@ zF}V+{UVnz33z>ywt418hkBNOp8K;dEC!_uHH5C*UWx>tW58+1b&-$&?Ow48Puucm-`8O$2U> z3p#KQ9=Qclk`mCgu@2QnP|KM#t_QsaUeF~BCS(bt2OK(ZBgiod3X4HgT^Z`@s}XIa z5!XJ*Yq9MW&w*>;HN=H72gF-qI>jfXQ$B;&&d(4+rhM?| zZR#Zc^f`t4jDB^!S_3^5C9i?DO83InCguDn%0GPaVdCivSDJ~7OB7YT_x}(6G8cj; zj~_YAo<8yTz`nNHI?6Jj(~Az_aYG$wWF)wHwyusE=)hfYI4hKptpI)9O&p&tlgWzm>u4%}77 zkb#9By#*cGnGrL}8BU#zq|5~~e5MS{g2@Pnz?l8==8zbTunxa}y0Xn<1f_H@Jyde^M+nz8oI0u3> zTO@@SrcV;wKl)F`)90VSlbA_pYViUx+;f*6Qm3+}x)No?2#l2NCR$DxVr~r`*q&&G z8F1#peTaJ(Pk%=rjUa#Torsrkvpl+`Pc$!d9xq*a9O@IzZ7?}!ZP3tARk5L=gJRsH z(5DwpW_^=WHrhAZcandt4*D;~{~dFgIBxWb)T9sXJ^R?H)Rdt-fB6|spTAE{ikXw$ z!K9f1T~IZD{U)ANgIQBOxFQ=}T&<|e|DKpZYd4>V5yTW=O4$J60p;tG1&`^H` zhmYT(8r+W`1wn1b0k)aCV zni+G>hR&OF^mObS?=h36wCmt}p-v9|FTwu>b9rz-vhC*eA*(t#8n$$C)Fie_O`BIR zASERZscGM7v}WtB%P^)qcLYPVi{}l7`Gi3vC1=6>#i1~7mM2H_1~GD2N0>8zKmCjv zOi^(On3)(7lSTp7hm5M#wFv@h0k?>Dl}rXwUVagDBH92tOC==4AS&i9Yv7?)fR0#R zxD*~kO*+)N2KH-9CI9`XI5ne*Pu``UdvvjZkDrq0chrOsEt=IQOv>(;G#K*i-Kt4W@~!j1LC2F5 z)8Ou^b(?=l-O)b{|7qs3W83EG37?-0Zq-8F%)MKSYVRNO_#NE3^PEOV+B#P3-=vWq z1kC6UOM;J5lW66-(=c@c!$gshks=Ic2rOKFm`KDQ;2(4V{HON=B}GP38~O@R;;s)F zT_^XLkeERjMIjmN+B7N?em$0kw(*=YGMr|Wg?S?=!F-lOH|Y14W({fN31LUHBqnny zDZfT`pmblj>@fWe^IF_{Iu5@kvwQzldW^X<`_o8KWr&N5!}si5!kl8M=7PQ{ zOu*C8ss~05w5Y$uxQSl1L(a(5n;X}s3p?ZrQ1 zI{e0CxO62Nii;V2jZmvmB-#+x>hIszi9YY@!nm=9rg39%Kec~u(T)RmKko}Y*81OE z+@~u1Cz;Fa=~MRVYm2ti*O9BQX{uhWeVNh~qavtU_wHfGNFJ*s(KIxaAZXqo2wHN8 z4(hp!4iMtequYrSOWm=b7mpqY@Cp3QZ?=xk;%9RO>~ z#$3N+$p-{RlEQC3=3qYTh5H*UKCgZj6l*}hUz)hm-IE+Hy0#>=Tu zMELsTi&x(~>)U_C9A}q~=WBA0e=`14%w^=TLE$b=4NY5HDpbqv$t8pIz>%BOU$QuG zFh~&Qg2`Un_gn!V%>Cd4B_get%pVGY#Qe$1%7xe`812v`1gs48_0%DFkynlG10`)F z8HA6YeWV%_s_RT3!5cT$g=Im*AUz`o)@?oq_aa}>MUh-j;Ozc%IsiYYvoRMe=7b?- zCNPZqjxesYv}~^Nr@^+JxHxx_;WuyNS)cWFc!z@v3FE1eYWKpxHcXvC$sTF9#;Q;UKVj=Xv)=*P|fgVm(Zg-H-0Wub38bJYrxU@e+ z`Ftffc_soz4y|5xb!BvQX=0k6cK2Lo=fJc%^A-~%-nB?07jELHcTEGcHKZSDYlw)57T5SD{t*1Dnakp! zxtmmEbNaeCY6)%o;6RXMbFg9<7!gEF37p^;cJ&dg-gt(X7@CBr?TK`KO6~QdCm9Wj zFp`5Nj=Gwv3ij^+03ZNKL_t&{INCR-&e}dbYaU_1`8F7i4G20w!_w=woP&TFp5*fn zdTvkmHdP+uV%S3}Wf7ZqT%vxUNi(<8kof44o#_B)-utW9Ux{h;lQJGO*X}=jO&y`H z$v{VD+OdNL%^eER$&^)+DP+vhJS(6U7XXw$kPQ4iJZ31hoM z(6Ylcn-|TjW=-`W?(H|MMM9)uL%JQF8`JsOv2ojZqAl1F^MIjMc@vH0%=!Ct4ih>_ zb8`#HU}0zuk`fZo(zGG03+8qvTefOU7hzzauSpj{kRay@UNnMhJ^FJVKm9=eqXvb~ zgrT)ma2NJ4a>ov>pt4qj&jEcv2wgI$MMb$aG<ravEV=%tR2d`;*f+?Xh<~tM?gZtUnkG{F} z+vZ)@zn-~xy`h+xSV^@G@CV>u#ax~|jrB>^CwU%;0HRh z+QSJB9lK2jo^cah`W;OXl_tYKOw62~IJvj(tb9 zCcn{Al({@4CIZ$s@t^LA-M8ts%1ZKdsV&gSnqN=^+1YuJn*NU zL}jHv8D;s&;1way2OZ1!oNxfk%SlluI1W~4bJaY+NwkSkKJZ*^2(AL$iNc}A#jSikGL|Qr68iT5Uc{lqHU8fnL zOmua#uF>_PKgI-A=W=OkYtt0u6=Y!J*7HQgehfbdgBd!=ndiP3y{Sj8v1d0suqW5c z9GuKBc6E_XG$0J~e)*O`wJ3Rcd9bo-Nd}l6G-_lBnwn}=b}X$ee*DNKreHk0dGi61 zl9J)ot9S6TtOOJlrD@7NCd3IE)X2Q>S>PfFIJ z9SShv@keex(Nx;g`Aotf`q5kJct)n?MtA4hPgX`6dUvaya~S0I?5{|x>}=CXFxie)8vAAJd95!%&`*`8=Zpp#aNt@g(RqNZZx0W}khqD-E(ovz21 zi%w6Xa>9rq9jlxqSX&s@*CY(a1D35kMzsheYAYcfs7xSJdinY*F}2=8OLG(G>)s7o zv|>1TJqG-WtNwj3Hf}_h%7}<~2&Yb8A|?lblf5yQLz@W{B-1AJ5&C>+?k!t&91;>4 zMX-hvt<~PP!XJlox^SKsCKV1H*nws@^MksY5?%Nq^w>?fQ$DFxg&cRrq`oX>V$sqF zW(V$}8dG& z63tpg2OfIn5gxrA!MR<9!w~aOaQT%$26pJ^O=^3iPk=oyg9*$_*|OG8=wmVqOMOes zf?hq{pkv1_VBZE{q)%O5`JW932Wz@8k(HGV&!4}7z59-Woplqk2>)K0+1I!3K7&KY zZqaoZMju25_M^w|VEvY}VBAEXZpU=aqW09Zu^wHA5Jn?HA$RBAb6WZD#VbZDB`pmV zm^{80b;d7T7D}gvumh)u)Wk%cJg%$inb4q|6X#zg{}<~1V=|(x*!URiXi&o6WD*?7&LFHTb_`|8^~BtYrJ-o zk?`l4!{cNJh!ZC!K?LwAaV2nN`J*d1WUv&DXPcXvGd=`)|*-QC@dqJWBxD2;Ru z{AZtWhHwUk0R;cY`o6;qckaD&?wxzq*?XTI51(QG{^KZJswg_OZ-lb;W~?q!=0J6)_DiY!Kn=f27 zrswF=6*n9?Ar9Om6>H+y4r$cu)Npfu$6Xbu91E=q%9A+gyOu5J#~lbK&)mkBqb1g$DoN{w?@^BL=m>^tn4RkRAX9jkV`4Jmxc( z*Q+l-IX*RacH%SLd`3PrD;+*|8$+ovm>n>Aofaa%!drrH@(NzC0paTU2dY(*@5hqc zSiC4DKhxg5NAT>KJ5N59-cy%UAOhK4Zr%|mkm}W~F>2S8ZTp~z^TWr*X&Wf!h$gg{ zn0THxG^11!L{^LE{p?Vf9^}ik=fE{?^p}7f^2lyzY^0d^v0KO5ru(=3_0-a?`d@zz z7&1?xgK`OZMlR9O(YoC_G=DdIkW03T9@Fyj+!;N&xVdTDdB*l1FlxdEKAW^?>V%~W z`eo^Sh0MhPdjD=dgZg#L^Ei>zP~%a@Juq&{W|S;pm03nbDQG}$-FXErO&g z<)lg#{;^ti=bk55nJJoF5ma?5so@{+e(tb=eHyIYxLvm2!!JOdkjvo%`}@9nadqCX z0ZlU{7Se-n-g&`&M95%EHV<1{bF^@&%H66ZpqX^oz}9>auUK=Osaoy0W0yRTKg7^oH}(8O`U6?RrA`6R7&xd8gX&)IC$hT++V&$myXVGax9HLJ<~3o zH*Z>tHwliPx{hntAESM{MvRmlp{1$8?rRI_=V8G<*njvE-gx_s3=AZ z7gq&|jg7^GiF47gZdvZCAOTHCr5$9)6OlW?@=MncjENw~{bALRp|KvCRJ znL1-?YLIEJ;g_Btv2N2DsiBx+)<^}S;}-pWkb7!V()6}1Ycet~j)~K^K$WR!;&6z} zK?da3E(VQSH*56%)cLDfi#^C8{Bm;HvT6Oqz%NgyS97$@RL(na(ysQSjS*j zv@rj!`Z9`ur3Y0p?A5C)CQKTi>AtxInu(7dJI|z(8))64Hk=z*hfBlqyrl+7eTNvC zJbm^WojNpT_q-f>y0(yWR@rFRx&dzlBKSj0MSA$ygOd}Tk0Olw_DreR7#j2m`wv}a zzvWjh*;KBid{XqRLQ_){t5+@H@2_9Kh2VhCJb*Ma=;~-;?1(=&iAK9H+%vGK2`G6)6X;iLQf;R%W*>B%{ z340G-M`3g0G&7JqP|OcG)KznGz|aA$ux7(aZZnZ*kfZOGe7~aDyyG$^P8fj&3o_3g zlGETMap)B8+H+eygsX zTzDgpB((1!sZ}4@WZ;5|73`T5sD*yLQ>3AgfRCJPK7RH?kM12%p+d$nU^#^b4aB7I z<;xc=T(}A&2LJ5bNVtB>olDI}PTc0nwFu3cR6&Ofve}UV*X{XRG^{6k1&gHSIn#RJ z($%MY$+{^!AEntykMt{$G-=S%xuSulBL_9L=-0FT>!tr}s$*ek>7&p=Ie=eAF6-B> zoE;JDF}ZRDJNaw1sX+NL9y76#NI+IZsl<0>{^EVyZ9X#`JbIHGI0@6t)}m5A(s>@j^(NiC6) z(b#+70(`#sb3!ZaV9R5D`u9z-Lk0PN;ABJgj2=DOqkK8VW6G3)wY4?Yu3f^UlCL;) z;4qpyr&T{lVkH&*_B{`nGnFHwRU9I3^2U`cGLTJ$;=<&uK9OWjL^OBNUNmV~nW@|I ziItYYNxGrX7Lu4cw^wWu>)ox6&8(>-ZjPHgzs;{Id-6-jW$*4Cqx?QUol?7IX@%Wj z2Q!Ic*8H7VyHOkgO9Vr+MB!8cU*vXeXIB`GnJ_q|PoQJT=jHUd2Uz;gVZNRG5xR7& z&-GsNk@?Kjpv%|XxFcL+_9J)gSU$q|IDcZMf$Za5nd0RW`0YLR9lFFgm}xkHvaq(Y#F()o@%r^!?Av#UJp(Df zs|I_1rcCI{?RBy;c~gMtuDzFeASi)SY7Xkxk_Ss3Iewd0GAJcS!lnst=9HgnJ&}Vb zJ(J{fCGoYQuOA_0R?(dlYo3#NUG`4C37RGB#99j$EeY4NH!aap53(V z9M^A04r$9>xM`ar%YI8&9>w~9m!d|U+zagp3J%4dJxB5F+c!pnP1wU(41e~NU8?lN zsT;U*?Gf6wX@EuzoY1~qL*9M|7#ka4z%cY;WFsqdAUkkyD1q6tr{L11>v;X@1)LkENHV%V4Ey&Vdhy8n^Ov7U z!wAT+jwA|-b?VTz4tJG!@9YU_tBv^sf~~b4J8w!Jp&CqjAnBQ6hp6(vutBZ4(;fvquKM=`qL|uh z|6_kzVd~B%!a{`%<$aYDO&B>*r1-^7$L`Dg zm9l-cYF1tBN1_B4{e6IEAv?tMUUJ{=(xJXgX+%v`6$AP<=RY_tZD$lWLd%XXD zx%XQi?Ad>gsU5~ljcUfF8j^m74NfTs^wsAL_8z#%RLL0h>eY#-n8*%Bju-&<7q4*Q z^f|O^RZY6Rkf|YG$=SZ=5>L`jxopTL^Vh6CX^vOKZ6W>sv@D)FpOBw_2t2($OXHOY zlt!~Nd%h_M*88n5n~*FsjZqS+2r*)ii%q*$E}q9vUsS%nZzjkUa!E`~R2$g0+nrHE znrFDwLWZw0Ob6YvZVdnb{YO7;6Ct-}s%j{K4U;s;GEROb@+|KXc)k9N$>X}<%JpYB zeEb&Axj~IU8SJ}tY9OulM`AY_b4gXo2$y>U~++xr6}lOxd8QRixo zMPXA+93wwQXa1tC+HfZ-UUSJNA}W@tQJqk{c-ANF3gt`jcJ}N=eEQ&>COEcFcV~FM`i$vww{rtF zkprbo)yqc0EFzYG!0(tbZ>Q8BhCpdjyLE2B6UV1URwiS*e@*Jyms-4F?&?WXXO2+1 zlNlga$Ytcv{ujD-tZ9=``8q$p5bWA_1tW&El^Vy2*;(+LxPH}0E=ACdJ;TW6&V5h5 zB;2Zb4Y}u|8a{`P+(6%6Vw(gRWQjP)zk>3{o;rJz`MFX;Fbx zA9=)3h)F>!77xOT)kiUIR7ZtUgFJfj8da-g9_v=Rl#Sr>HTOQ}&YZf{yk+ZynI4cu zf@Bq%?`6ho$5mr9t^8Ba2!!%1Glt zWP##*X3X2cB@tRGq_`sTs3j@q#%*`*Yd}kO)W`rw{w=h6B&%G91ZOThf>YHRm^4Yb zV((9%zT|G?ojQqaCSL>Nuy)f9lx3nWt%ejJ?{Mb)T~u+Z3}+YdVnFEkaD=koD=S{Z zWy{*LHXi*4jK`!g@?*p9-1oqi9pbE%WRL0Eu>r4Wkh)sI`w!o+?4LuJFuIe>bCAS7 zeUfX2{h?&yS8qJyp#oHalk7gNnpe;87=m-d3cA~NZd_8Sa+P~I?E{meg;Xej;RV!sX}pH=Au`3`Gu!QZO~z) zv}x@aF7?oP$mO1XP-+y~PR2hXl{&S`!9OsRNmdz0NUz;+3bSTSgppC^#y5G8^`KtA zei!A-m0+_}zKM$ePvX|y=P2b+9QHY2^xeE^8RpJgjz;xLaa&7zP}vtswJ~Q#FS$97 zixsm(OGX4Y?z}+#I`S73KKlf4QX*sToqI3&N@_?*M4EkQ<+D|b8a$UVB{P?|^qm^L zUF#Md+`sq56K5~wsOMsilFPJ7|&Q$ET2Xyi#ACqq`OM=S0W4Y7a&hax|xgS z{+VHHAQ`Xpf83pjb^9u~~*o8kEuEIWv;TUID= zwOPlvZvhAl3WcR*zDykUp8-v1Mi8Pm9SRHVx_tCAhM`dwG^za&3LX9ft;e` zzF@ch~0RfYqHucHeSN#%h=$*nst=NhpPtcw&u<(eH(uKdrjNmC|_ zg-a7hlqhbSX8WyEr*Z4_nH=lG`;Zv)9X%{f{*&~0a{UG_?AxE^b9;mVJNK-S>xoLZ z&93FY0f^EAlqI=gyeA$~+ zq|ZF>kqQ2qoq1W|+BM6lFJH5LN|$ckH>jzpMd_VAb$G<^flZaKu$~I! zfJ9;)<;jqTbsJ9dyt$;0Iyu^-MzvCMBU%YvGawei>VHpT)5fLBcKQDcxmyt6{}wf> zJHo`+2z&P)K=&>Uq}y9I6)#nY4C$i;G*<1?dy?Xr_ zU!EqZpE3v#$ls+-&9Xce@8adhXxhX{=DAYCwPP)diDO0_Sg~fka)!oq$Pse+d&z>O zO&gcD&FHB-bN&H0tWtha$|e_^fmlj6udf_WR02h#lI}_SefZ?ZjkeTMgLF?vc4KK3 zDWh|Rheu)0p$BSQa)#o0jtXN_Ig{ua7u;@gd%S@WblAhshuY0aW%XI<6a7H8$t5^AsF2r7x2E;}%s3|v z8LXTeJ7VS9V?4nVB|WAxqg15)_T86UWg#hq46>al7%PKkkm>+Uo8*c_k%-4~xOQ$N zHC$1uOLEJ;|G<-ps1LDtet)^=BBo!r`79%rWy)TD0kVkPu9K7>U}IyA{sVe56?+#` zSJEyCTxT+vKwG-?dX3)Umfw&)*T&qSo6(Xu6-r;Re2&83_g_Iy)o=PQ!_KZK zoT^pD-FqIWT{9(DjdMdsj2ypKnqZ1nkeWMJXlwW0V##X+G}qgzG_9~Q5x0H zIQ=Na^o57LtnlgM#}Y+tZQm-~85zhnx!k^awd2ImZL?&>6{-rQ2CPRHfoT0CcB1pOBLC$Zq@7sOP2Rg{_3+yE+>y4>sHONxNdgl zIg&8QKV|O1-Iy_{yWBZ5kcp0mkKW|W-h{C~Ez6PrfR2t9*EzESiowv(GRTw47Q3SW z03ZNKL_t(ki&;g14Dowo#`LimI&2aqk4= z3E3i-OXpAbu2;j_P@a)4C^!t0rf=qqOd!`~GEz}EIY}VV(XmWStIVC`W=-uW^BfWw zndoEtrip2`(K`O)C$A9~pMVPGigBL;djH)09TP=m6GwD(9L`>Pihow*X<~GRLGf1- zSlQV@T{G*&(k0N=&067lQws~|87k&TsHKy23DDBc78;t$FEHxpDqN5=&p;t4L@?{t zZQ?<)5|F*`@zXcFg5-?JJ!HD|Pnn=tZK$@bYQvC8LTy{6gd&jZ#qGNuXizV$8l<0z zzl{Xdol0tx@X)5+ANv$KKn9d17s}r6`{h$Pb94E#|Jn^F@%O?(JP}Ul_XsRlvKK=~ zui_EPlsM-#BZte^p7I|7F*MH0pnKPh4Z^B2d?zR*AbnT>InDL%AwNslxl2#byLZ=2 zt}Y)TRp4Ut9p;8_BX&jY7YO-wR+6{$m6p!hVi6{0H++S&qzEv)eN9YrmRZ7O8gCW9=Ii+Tnw7ZOmmMT(P?1sY%EP}i&f;xyZ7!j%Q` zf3e9Vfp~GdLPoc5Ug?}C_T*RK?l$4xh9Ex&pT5`qE)KceTp_i*Omuk|(_iIpw zQcmj@wQzsVR#bB;#Z@9&Ej2Y!{&}}6YHa@K;r;r*lw2YsBlT5<0u5#2i0Bwv@uAkd zX*F?`xeS&>^bK@i%On$ORh=9-Nl*ad`bndCQXUCNQX=A!cdnavJ(yUUd5lGV#%njF zeq$->w~?JPQyzT0-}0si>a@sujq5kho@e=()Tq}w+kRfZ6nc8Pu(7ehhfm+Q#4W*u zFy?Y;u*`_>;6bZdz^${LR zM7}5=K7Nxr*%7ED?vC9T`Fkp+R;Q-?qI^1R3@G9R>BESM#+9{|ncRISg{P0tqvCRR z$OKA}%U9noHpT{8a^>@L7awB77Wt8{s!Vzzse_6={j)@VCAs^LywK^7`g}?I<0n5n zdFG7=k6)$PXW(#gqU`abI?Fl*$BUOA^0Y8|0SX`irPuuC7b;D$N-$y*EV)pSlPHY| zTO08tO14CrP$}j|0;*6+23rF;zA7&~KVawHOMJ4Wq-?wliX4n!6El&^3y=3~lGle- zx>O+KHxnHlrL^{!>_2o3K_TI2+@LZKRwM@=vRr=; zi{v+nUrYuh+wqUg3qH|}-obX1h?FC&-O zm}q?sim;S%FFyJBpE#n6#8l38yqP6sjUyfCA(?>`U5_pIDml;};NubsJ8gWC?5T zXc(U$;?FLrOSDW)jbeuU{X_9bn>uLQy0*-7(}Kx?BiB*BtQ|j=YYVK=iqyp`kFoFI zRW9ulsCw!0#Y6DbF9^$5AHvv?oqmd17YYT!`1m-b29L5!(E{(O`*zj6i0O9mUxw5(cA%Y**cnucJ43VbN7C7Z+3D_S(E?f7lKXOPV=}6LUWgD za?eAFr;Lq$-{t25{QseFVY8p4c1lG_J}=Y=G{}h%$a|N97|H%Y|5IT&vZGMl>i$EQ zp(+~}Kh?TQPG;jHZT3Q%%qgab@*Gi8HJbD(d`6U*gogDh^On<4id?j`bwcC9MKUFq z_U#la)I}bHl*&?`BuGopGbX3R8|~bCk^8j-{>XhnH=iOr$>95hob=?Jhmu7Z7-XLB z;&(vHUOiE-UZtbX%9gUt@N@5XzBqUB0gpeTdbd?bSuQ<_=Q(WOf#@rOp zyGK(D8nGPqOpQuC2@|S1%1>L88j2+Dii=B3*4EL9%-Y3?p%l3o8=C}qMa9z^SB~V& zl?BRLe)qly7YVy|YJ@f|YNp9)@y#!ohXoY3v*gQlb>;ZgP`-=*LiV!){Qe*b{L1yG zazCe7Jp#q*QJt?{o2TS@pJHO;1UkQxTr90DeL}uR#pPr^)bvngq_TCxBz_ZR!NS56 zbEfy@KM3!JoW793_|uncrvoiO0dfqajtD3RQMzZgd)Fp%C&|>H(3jjCdlHEA^9mD$ zLSdpZ$16oH#Y>cY_02CdAvZ6td>O?O4Len~&+v0Hl!b*yWVp}of-^gJ@un;&L3dVg z|KcUy6agjZ&MMCD*~go*pak8&Bch{YxF1UT@uP@WJE2l}rJZK8gpiOhSXmcQI@P68 z%2mlFr(kMoh=73LyzWK;3Lr&ra42_X%kSgolTVPSd_~9W${w$DRJ6T) zDR*Drz!Dk7CgcZD6~?3_Q5tva0u&%G@%qhs6tgwY_bE&nx%hYL-sPUM$16=P^%^uj z^5XH?7S`5g%I97DMJQR^5*{9}QK3SPmclJS0hGe)*WM`OV4m+2BzwR0O|Deg@qx0( zD^D)<8(iGKXLEo{6Q^wEDa?IPYC(5*j{qAdi3a+`OXC>KrX_^=NrsS40vXM z{ETPMKZLbt)oyck&XKL`{~bEHuDW;cq+@fJs=4Oxk`th1ZQG*e@bqHhXz7x9-JJsb zhjH=Jb=0CFY5Clk`{ddC@1v(QKc1a)WQkmQcIkAhWvkXly7uh#5B=Y$Ns}{MH?9tD z;Zil5Dd}?`b=ePk?(F3Paw$Nb;{N?7m_IXrXGHw;*&oG9lzOD4r5%->^JIx!`VAhk zVCm4|XD-ZLxZ<6bFmBG0r2}fzZgAM$#h{wKZdyYcwD=7hbK|X&!Fse!QW%QP8&1oaO7v7 z;uTc2pv}g3l)6gnm?_gnWaV60wz-U&Jay!T36u8OLTr#yVJuuRSqsna7?f@f~IeFcc0{lnd?;nWop}{DcD)U@^ zz~d)g*t_#0DhM@UEKq?>QZka&G$Be#PP5+^P1X1A^Zr_E zqmprgs^ThY5JV>7>a5*(8ykZVZ8bD*UIUFA$xo4x+tAh4LX(D-v2)i!^y(=;sdrA| z?c0yovSm9eSFpu}<11PFc^^}K;OWEbto{61i3ZjAYe4LG9Nf1(TYXVy0;liiFdY1x zaT!#}cPfg9Zue2IW-%N&n0f4z4*3vOoqTj z7k~C|jY4KQQ)fj{RCOwaJ^L@g?b%CIt|Y(KbxvUa{u6lR^#W#$J$%1~$mL6sHUV`0g+- zY|LgBwd{U{OiUQv1=D9N#+ucCK`0dF*m>jP;xKy5Oh%H)_#T#&W9KbE?qKugT^Kg3 zAIg@^IDJP};N|5F&zCRoXYUp{c20S?dHWfT9Jq=ynp&u+uMay$Aht%v+;$>Q-BAP| zRgy$==PD<)5R@htRaMo5RvkKQf3|bqu)^v&n_0h%whqeb=)z~)MSN9JfqQraJYu5I zwVN|4IXXZ~P68=qFmGmG3?4EWn>H@Zk@HdJ_7NjzAR^-bBZtg?1uOp9fN9f4!_Kxy zw$Bw35{j)`_h8bv%A~2f{K~3uVWRb zUmq1s7&d0y)YeCi^evo#TwMw(ucwD{y1Gcb_#BTeJVRh?EIgy55RjCJ8nw#9xoLHn z7cy4*{FE4Z;Gl`vxM4}Q`$}SIl`0k3j8P!5{7#^JwwgImeuhF!&YnJp$>UvfpjYCe zf5#4A!=nctD5<6aTPB_8Fjc2IV-gihOQ__MG3PxJlPAue+dn(!$QHTm-??LqskUxX zL`WD6RdPplkp&a>5Y$#v7weE7-|+OsQN)Ro@PQG|r^Gm@>S&@??eeJK*a;@aij@^v z$nIlK5Db-o7&Nd)w$4$2-xJ@y1z_)jAPbqRjPQBj+k`rc;niwH%Lel!Iw!o-$e0<6jG8a8#HE;4ms4Nx8=;4 z-iN6)Q?Yv0f-HakzI`XKcmD~*$Hj9;slkJ~B7Gj1wosh0AT3m>(Gxjkwr2lqpjZW5)D{ zk)Z+4&UfhWX`DPMetv9htYB(t#8Vr7`s~XSYn?f@9pAr)jp?rj1a z*p`;&FfuY==lh6a?AVq6%+Av9@8|039mdp;MPqy#D+)1LZFHw z>RQlX_nU~Ljz9wfbq%NpRPxNN|EvAohnpFg0+SB`dxeKnwXddWc54>vBLOa zLr=ZDd8=8`m?TxY0S*GOXYTI+RrVuUYiPkLSrgjKPyq(7W(?S z*s^&kEG@(<2jLMBnDO)_e?N3^PiQl}+1lCy{sBSwd-*25JWAUMMcDR-51--kmD{N5 zRDlmVLZgPYIJrc#0bQ?Nb#&|?HXhOdK6Lmj5*g`q>(&Mh>epls^*an0IEfGJjq4Yo zbmnnl-DB4((g;{I1lO1&h}5bJ3ve-K!(cp1p>z-~7?CMPs!8qZtk# zIg2Gr*JItkJ8|yJPQLH5ZPZ5>M%t3=S@`36NL`&dV-#xFt}5QI;~?I*1`TTR>m+R4l(z4g;qc*8 z5DH?^t9#QQzikx0d4FV#Qx)ezY8NiH(WT9@@9}wQtWooGfESDnuwn z1^M?TL^CnYpFNP_2?>Z~11f<%K%yU3a_X@v`>Vl7MvXO1(yawT?sKEcuE`=<6@?Q4 zQLqReo3G&crppKwCE)y_tB7L<8|mmkBQzS#N4la@$CerPgR0~0+PM-P7{Q!AbA``@ z0|&U`Jey6cIF^?ZOSbTX)I&qVu;QQ1D9NOtr*1DZJ?zGf`}~z=Ym%JgVeY(@ShR35 zrcTZ{nKuncg0Ybye?4;atW;W(4Eod{DPqZ@sdBG}h>N5)B3N=dlt@D*OJ<&^eL#Qt zhSPcTS8{Ti^5c3)LZg-u=r>ao6DQ7xC^i~jef)83<7pHYsc=tq>c2jF)+&)BsZi~= znT+MZ5<-{ecgB%)3t|%wj|W zx)~O9L-Of8Nk~e^*HGF*8w=#G5E7 zN%}rzTe9@Mu1F1*lK&%<;0@N^DCVF@gJ}EKztO$tDD2vOluII|9Ezh^)B19cp&4BB zM;zAs_nAle`uPQ7%hvsvJ7*k5jh>z1zF)rh;p){pT;(AB-QK>K%;iZ>rlP%^`wzZ; z_0RBp7cbp}pMM}sjg4?{|2kM$6yn=GJX4~rt+N<)PS;GT7ZFeF>b zsNchKcGa$@>j=d7g&-m+0eZe(4sp{9SfkusLbHclH=@z%Q ztXVZT&3B#U?51da?>_T`eRfCc$2)^J4;2;S(62$b{mxn`BaT$ndHn zu4+iz)u@W1PzViG*4QgQPM9*`(JEs?x(V+~bTpntgfZzy2an?Nr)z^=vJej6<8}8A z8gp=S@<@C$(uy8DcII)wuF<-Pv?u5e?D0-G%`YvVF>G}Nap8sf7OU=xb&P> ziWV~IS*XCoeJ?l&8mv3UOcJW7BKA=&3^jO!hoOR@p+f!43#cVCB8`aA-mrSrj1u+^ zFQsZxCC4gvPF%UhlWnsbu5ta!<<+kd-MHOL@2@Z{(5yPp+UXMxO(LRKKq2BPoJNI9?8r1@S*j1?(T)C zsA##wLWDpD%40`1^8d;3N&|ofFi8N^2vpxjSC0{BL=>h>8Y(@WR$X*;+4jgNEL}1! z&2|dJi(va7J-k7>oz7E*ec!Dcho#$yKxiNzKKO5%<0Tk7raw34Qr~FBh{!?$`ky{a z50b#HUp>G{(d*S)-iS0SlrM#Te|F{jP>Gk&(C=6DGml~R<{0eR=ksNZBP z&!``CFXY`1Ss;HTMXu|`3lChncm@4>w~}tVc)<-}dK$2dQr@+ma4#SbA44NhLZAt4 zGXARS^4K3)XBD!~)tN#O#3mp!&AhAT6QL@=dv%rYW^LQ<95!mqY$nOctvIN#gUYx` zlc!Ll_i?eYTB}zqpL6Qap#jAcVQ3)wHQuP?zw$6J7?lO`9fC>1DxRzX0h5Yfeh5Tl zvIxO~L_`XbP|4T`mYQ17RxpkzfJrT7E0jg6meqeUY|o$7AAY{C@$bfyShQ$*b}s9e zFY^ID9Q=7`3k0kiZ+)} z6bS(;!lV~EwwdLxOVb)ANQRHDMo4XE=Yu21j-Q?pnWTqO-ftS3nla<2Or1!L{tpQW zHe2)0irJS=o$TQNp}t8HawW3)EK`R{FyhF{3YMM!a@9HR%fsv6zIY+c? zQ7zN+l__n@+bfSp*t+8!mMoc>?LOu-NP?h7D>@#YZ+`mx#0l}Lisp}?(25mH4hq7;#j7!MN+0y< z?vm;L&6`%n9{&(T`vgM&N6Oa-Q6hpx3Gj`Ng$|q4N~`Pe*dH5cAX)XtJ;1C_dbYqinj;SHJ=C?n1#K<|+B>(T&v~kjwb*rb9 zgix=TR@TcLo%QjBLk=3y(t{lAY*aO2qoxU|yWrE;SkZkULNx^lW_QZM$_y^eYoe-C z8JUuqrG*)$Pws_a|F_t_`vL|H>J44p{9Q0kf_Cki;=sXEIB?(;>ea0-y*>ju_M!B! zwYBC3lW((v`C0@-8}xlgWT#BNn-|ZoA#W($Xhq zdzgY>78KNbz`(`S=skG=FI_Ny`Gph5d(_m{(J7S4%=R!a2quZbJn<0LR8fINf&iAZ zV*552ZfnlK4QCL>)T+qjBt+?|K}A~w4rPm>R;>zLf>Bpj#lSyXA~_)l|E}8uRW)r4 z7?8iSz7HSPn>Si^ubf z_N?Zi1_CT)23H8-Mlm z@?Lr)(wsAQ1sc__h_Y+~XzE-Qo^IYaw*N9hL&KqyEPy`y8BNsGq0bHe0xoq}G0L!1 zVI;!&L`)z#EsbOqDRXz-mhCNbQq9RK@;;oI!NAZk zWYo9`)2T_eef9OVSv+gn<|`L3J3Az*=i4v@S)kYweTo#Pcq|%=??dqZ!&Q`I7vZsX zKklyDjle`E`KYNNR>)>UGh>u4>j1}Ul~BUomPak;G(LX(!i}z-JEg3AT)A=w4I0$o zVF45iMX%MXS5D(2BLR`po!gK2a`DtD!}&IfnJQP-o=YX<-P@{F6P!DD4Xajf2-X-L0*Wn3O;2lH>r$mSLpIq#h<-OUyQcpeQ8Ybi)(Yp8nVtB@!VdF&^Pe z^@>&#LZm8$P+bkymgX=uH-&BSqOh{D;+fNQb+x4ugFKK;gql2%XKqFyqikjp7wtol z%vl9F1ClECJuIA)L`Xm|zJC4+f4=}G5ry(4awLhM$(U%g3^cDYKWRX=EuseL~@|Bi}iHT~IayGB~BMbSKTxLw1utCo+)QWr)3y?V| z8dsaCVwC8|loAfnMggQoaDn8#B+#8miNa%u7~vXnHW22UB=3!og-1HYReJ#?^F=WecB^13gwkT1!_+xtzKd*?5*HahwWo0;KkMJKkZwpb}dwNX@VnvErKW^Urr(gP!biKo8bAy z%bD+(2QU$-sBT%ic47g!WC5cG3^-&I7-60lsUHl@3t`xXe-R%WgWXeSV77A$=od1> z%yXwuwQZX;?}oOMCcv+4d-%Qokoie|F?fQ9?-9mNpFFOaoh<#ig?vXYyS8r| z7XQwtq~0&Kv*;QbV$z{~xPR;f7I*B5zJD)9>(L|O`}#H9FJHw3rnnva z1{Od`RBqjh-RDv`vvgS+70lSm3Jv@BL!}nYp~BR>Z*RQu{QL#}djx(E6G{EvV&9}f zc6RxaTnO4Bk*4dGFQ2)2&)(*F-Iw&pSL71l?{B$x!^SZtiGp8ON`S$2?o3#-fj*~M zYluXN+>Wqi)VQ?viB$XdTCxzO>(<7MIt>u{{X4Ae?J?%S9(dn>fN8ZTXGpSi|JbM~ zOswdb#^zD7Mh*P=?^?Wn{1}@D%8p-24>H2`TDu0}{{A>VcdpER1Z*Gk;>F?r)?4Q1 z{}tHRse|@&=3ry*K1?Ffgr=@8pA?8lnvNR5lbj2gB>DW@c}%ZX<0tzNZE&bn6JI<$ zxkN*fX?}$klV9F>dQ}Jx4l1Nf67AeXz9N@G=H_3|-Md$!e|Oh&AvYg2)(|D-I?41| zyZ~lJi(pBY?otD0YM5AA!oFq=yu5ZD(P813a`Grbe0?#MkqGVDdG<_{Z`2SATed~$ zw{QFyA`*i_g)m~zPMlf(51yUBAU$9G-o4Rc%qT`IPZTB=3EtkjhmTL6%KWUXvoqSy zorg0E7UXMk(Jx#W#cJ0<;nHPb?obMP=H>|g@E!+8jpRg}T{yLGk9z(3VO56?hzk9V zuz&!B`1oMv-8(osdkz*iZHB@n?J;cM9=y48SMGVLw*Ld}7cWCYTboNRy2i$E9@HQ2 zpSZ#8{KahdGbf?$7h<_%^X8FbCr!>*;raQBTqKZ)c=f9|`dEAmv(8NgiEJSyoT^~G zw+H_}E-D%!U%&Dh%a{?1icpBS=xB7CGn0$Ygu=y(VWp=#k|@bjWF(hZDm8P#jUBuA z=Yux>%OA+)ow^{JNj4I6nmZd#ZQJno2dB#pZZx*GMvcy$acjp8M24g!JF3~eJMQcf zpFe$EQ`?!0;F>l?5EJL0ojR2xEBEvr))gzkvV3_IE>#*vMQmVTVIjQ-0k2=-;BYZH z(misSIs?V()J0-k93Jo9foF#g!N#c?%C&BbqSdM~sY-}%FJIu@?b`@==MAq5=MlqH zMO95rUK%AU_9)9TWzc)mW~^-0iru4>3;+)G>Y>q)Az0qBB{#qmhV9>v!_%i>c8!`+ zGniu=aRTu#FJ&h-CrPJ#lg7|7GD0!O%6u9A-jSm?wqS9-T=>=(s3xC1d9rf>xnu!1 zo;>BXH5=Ee@z(N7Xi@ef=XifNj~S0GVwX`ty$U#n6 zi(9tB_!Gx5>D+1fd%xwmRt?#p)zC?C<$iJTl9X6V)~W^9zyHRDoTR5Thti4)A>F(Z+jlq^+22njJUSst*qPELqpq@J35 z$*$66$r65_B*fBe%oz4QmXU}@n&a*3)MgWd2;qT&(ru#->}L{93F-BPG4=D&vE$f1 zej;XFzrvo0U#h7qgb*X`;6mjb-1hE2=$zMmk%fFsE)rb1d%r|NLW26hKD|!Hy#7#D z%`aHKt7$e66A_8`ZqL*Bc+lz(iN@>t4`ymn7?!&~;r5Szy7$6Iw`XDkVQuKP%_vdT z3EM`E#mlQ#rG!(mdNmB#xE>*2zF=X~7HoWqFpbUV0`fG~(nLHPTv~d17_omZzP);l z15>8(nVinqXYCr8*w|n}!$wGqjZL$7re|V;A^Y}W+n_;k895T(ckbZBqenSn2LI~u z68h$av7=Xa-rux-E@|P|wHp#x-*)xr$_=JIPag5@5<3Q|K&6=~a*j!UIpx!0QnV;n zbtKSdDrn!$n{j&KLPpqPm5>O#Mz^jwpN?>Kj0|B?qzFQpYMUA>yL9D*SDb#Y4gccb zKl}6l2W(i!KX+o%4oRqajc7r#DBRlQ)0}0?2Gpuu=W1T}CnNk86eplfEvq$3q<>zX!ykgA3z+xLS^;!suBfb-;OhzbtE+gmr4>XR(QGc}d2 znV_YwkAb^)*@s}cz1MB;atIh{#iQS2W2a)MmZ zsVk|`Z~R@U4>(pZZIoR5`pOq$+ZU!;Wm|ryLTwpAvyT=>J=Q@cR<_O zvr*2)1%9tzbE!oFZ9_wpZ`KUKpFVStqduIuItLi&G5RBmIxO#Yx&D< zEnxzYD9}(laLKCGy=vC0m#v!3d4=DSTvCJLDs~(_Dy=xSe)X!UXAd9gsp}tNtr?q; z_p$z&;P`@tIKi4^zy|w#!LhmX@Z!RSH2c-)+7->mjm48=$8dVlBEGHp*s-YAr3>yc z!pR9#`lCI9-oL}CS<^X9kzv!^-T|g|#i3is3=el~<0@OzsncQKs0m(QzKC0ESL4&e z2WUEDHg@+;Nerc?rG;{>#K!Bl*RSVD|0Hl{Qc5Kz(GjtDUb&2;(`TgloXBHAy?RKH zQ7$AlG7<|KJIf>sl5|MQ%&VLV(Pjp|F-H0UOINSyS<>FYBl9EjH-39^NsqxJMlPTx z`Ty_5i{@WCeY%rwM6|J9ShT5XJ}QwS3sIq=Oq4(QlN9vv$rJqDq6H#?f~22)a&vM_( zj-pkoU zNgn)|nv}kqUe~U{i%A99QH4^&31Iq!EQ6PDI<{Db?aX?Gc(J1o$vny1>}+eXjO_DCQMA@ zPD|x(DH8S8^=nP<+_=#+F(yV=JvLs)C^Dvy9t5htgPK(U@T6MbMTyBV8XDh2kQ|?+ zsv1|sw&=T>_3K}#TD`{2vgOLV{mO*a|8FQD7bQUDZfn%6b)DLTDbuE;|2#ZA+|bkG zWu?at9@Kqw_fDfPpFi8_s;MREC$U2#qs%mulGOEt`Oo9?cLuHWL^HC8ppXnvQc{$L zT3CdNN~}mIjMLQ7jVNw!?@`{d$~`t&JTFnQq*s0m^80^80lDM?^!4?>OUMVK$IO$r zUqC>B#rt<}9jLuxD%e{uuL=Qv{#L5V$wF-vfr@6LNJ~8~PG4J~BGeVCLS3kW{Jz?y zED|XVClLfAhe&FoM3G2cBQgSl*cbs4MXaf5XvP>A8U+`zv-2)lx|F-ET`_N4Tf4U= zCMJPdDKlDtUxNa2$wL$>ROlNuPC^PoBoe8HhlLr2goKy|1qGT11qPZ22L%=S_T`Ih zkiWlG2zwt95pED29jy}=7psY+WS$jQRYj1jk_@sIsSrU4g(}JHy@0E5Ny#d-p8&}M zCIP50F+jXfq@p4c2!)Bs0s-5DUXzoO*!v{56NLyRGBQXIC8?07zbH9LzytFXPWY3t~Oo3LxtGcpP?H7n$2Y-}84Vrm*dgrKXd7f$bK-(0)N1;{h}5BExw UmwndRApigX07*qoM6N<$g8tgWeE + + + + + + +
+
Технологии программирования
+ +
+ +
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Etiam dignissim diam quis enim lobortis scelerisque fermentum dui. Faucibus nisl tincidunt eget nullam non nisi. Rhoncus dolor purus non enim praesent elementum facilisis leo. Feugiat nibh sed pulvinar proin gravida hendrerit lectus. Neque egestas congue quisque egestas diam in. Diam quam nulla porttitor massa id neque aliquam vestibulum. Posuere ac ut consequat semper viverra nam. Elementum sagittis vitae et leo duis ut diam. Nunc sed blandit libero volutpat sed cras ornare. Netus et malesuada fames ac. Facilisis mauris sit amet massa vitae tortor. Nibh sit amet commodo nulla facilisi nullam vehicula ipsum. +Viverra accumsan in nisl nisi. Pretium fusce id velit ut tortor. Faucibus turpis in eu mi. Id volutpat lacus laoreet non. Commodo quis imperdiet massa tincidunt nunc pulvinar sapien et. Gravida arcu ac tortor dignissim convallis. Et odio pellentesque diam volutpat commodo sed egestas. Enim sed faucibus turpis in. Non tellus orci ac auctor augue mauris augue neque gravida. Tempor orci eu lobortis elementum nibh tellus molestie nunc non. Suspendisse ultrices gravida dictum fusce ut placerat. Malesuada fames ac turpis egestas integer eget aliquet. Aliquam eleifend mi in nulla posuere sollicitudin aliquam ultrices sagittis. Neque ornare aenean euismod elementum nisi quis. Vitae auctor eu augue ut. Dolor morbi non arcu risus quis varius quam quisque. Sed velit dignissim sodales ut eu. Amet consectetur adipiscing elit ut aliquam purus. Auctor augue mauris augue neque. +
+ + + + + + + + +
ФИО
Возраст
+
+ +
+ + + diff --git a/site/styles/style.css b/site/styles/style.css new file mode 100644 index 0000000..5d60baa --- /dev/null +++ b/site/styles/style.css @@ -0,0 +1,34 @@ +.leftimg +{ + float:left; + margin: 7px 7px 7px 0; + width: 279px; + height: 246px; +} +.textdiv +{ + font-family: 'Courier New', Courier, monospace; + min-height: 251px; +} +table +{ + margin-top: 10px; + margin-left: 10px; +} +.bg +{ + background: #00b0d8 +} +.button +{ + margin-top: 10px; + margin-left: 120px; +} +.title +{ + font-size: 36px; + padding-top: 10px; + text-align: center; + display: block; + background: #00b0d8; +} \ No newline at end of file From 77d0e55d9e0f41779ca6592db4680356bd83ef2b Mon Sep 17 00:00:00 2001 From: Acerlaorion <52343449+Acerlaorion@users.noreply.github.com> Date: Sat, 7 Mar 2020 16:51:42 +0300 Subject: [PATCH 3/8] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20=D0=B2=D0=B2=D0=BE=D0=B4,=20=D1=81=D0=B4=D0=B5=D0=BB?= =?UTF-8?q?=D0=B0=D0=BB=20=D1=81=D0=BA=D0=B8=D0=BB=D1=8B=20=D0=BB=D0=B8?= =?UTF-8?q?=D1=81=D1=82=D0=BE=D0=BC,=20=D0=B0=D1=82=D0=B0=D0=BA=D1=83=20?= =?UTF-8?q?=D1=81=D0=B4=D0=B5=D0=BB=D0=B0=D0=BB=20=D1=81=D0=BA=D0=B8=D0=BB?= =?UTF-8?q?=D0=BE=D0=BC,=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB=20?= =?UTF-8?q?=D1=81=D1=87=D0=B5=D1=82=D1=87=D0=B8=D0=BA=20=D1=81=D0=BA=D0=BE?= =?UTF-8?q?=D0=BB=D1=8C=D0=BA=D0=BE=20=D1=80=D0=B0=D0=B7=20=D1=8E=D0=B7?= =?UTF-8?q?=D0=BD=D1=83=D0=BB=D1=81=D1=8F=20=D1=81=D0=BA=D0=B8=D0=BB=20?= =?UTF-8?q?=D1=83=20=D0=BB=D1=83=D1=87=D0=BD=D0=B8=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- RPG/Archer.cs | 2 +- RPG/ArcherSkill.cs | 10 +++++---- RPG/Attack.cs | 15 +++++++++++++ RPG/Battle.cs | 22 +++++++------------ RPG/Game.cs | 55 ++++++++++++++++++++++------------------------ RPG/IUseSkill.cs | 2 +- RPG/Knight.cs | 2 +- RPG/Mage.cs | 2 +- RPG/MageSkill.cs | 3 ++- RPG/Player.cs | 44 +++++++++---------------------------- 10 files changed, 71 insertions(+), 86 deletions(-) create mode 100644 RPG/Attack.cs diff --git a/RPG/Archer.cs b/RPG/Archer.cs index b45b9ec..3c51c7e 100644 --- a/RPG/Archer.cs +++ b/RPG/Archer.cs @@ -17,8 +17,8 @@ public Archer(string name) public Archer(string name, Player opponent) : base(name, opponent) { + Skills.Add(new ArcherSkill()); Class = "Archer"; - Usingskill = new ArcherSkill(); } } diff --git a/RPG/ArcherSkill.cs b/RPG/ArcherSkill.cs index db0a45e..07fb1b1 100644 --- a/RPG/ArcherSkill.cs +++ b/RPG/ArcherSkill.cs @@ -6,17 +6,19 @@ namespace RPG { public class ArcherSkill : IUseSkill { + public int TimesUsedSkill = 0; public void UseSkill(Player user) { - if (!user.SkillUsed) + if (TimesUsedSkill < 1) { - user.Opponent.IsDebuffed = true; + user.Opponent.Effects.Add("Огненные стрелы"); Logger.LogText($"({user.Class}) {user.Name} использует (Огненные стрелы) на ({user.Opponent.Class}) {user.Opponent.Name}."); - user.SkillUsed = true; + TimesUsedSkill++; } else { - user.Attack(); + user.Usingskill = new Attack(); + user.UseSkill(); } } } diff --git a/RPG/Attack.cs b/RPG/Attack.cs new file mode 100644 index 0000000..cc6de44 --- /dev/null +++ b/RPG/Attack.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace RPG +{ + public class Attack : IUseSkill + { + public void UseSkill(Player user) + { + user.Opponent.HP -= user.Strength; + Logger.LogText($"({user.Class}) {user.Name} наносит урон {user.Strength} противнику ({user.Opponent.Class}) {user.Opponent.Name}."); + } + } +} diff --git a/RPG/Battle.cs b/RPG/Battle.cs index a53648a..0539d0a 100644 --- a/RPG/Battle.cs +++ b/RPG/Battle.cs @@ -11,22 +11,16 @@ public static Player Battle(Player w) Random rnd = new Random(); while (w.HP > 0 && w.Opponent.HP > 0) { - int AtkOrUseSkill1 = rnd.Next(0, 2); - int AtkOrUseSkill2 = rnd.Next(0, 2); - if (AtkOrUseSkill1 == 0 && w.HP > 0) - { - w.Attack(); - } - else if (AtkOrUseSkill1 == 1 && w.HP > 0) + int RandomSkill1 = rnd.Next(0, w.Skills.Count - 1); + int RandomSkill2 = rnd.Next(0, w.Opponent.Skills.Count - 1); + if (RandomSkill1 == 0 && w.HP > 0) { + w.Usingskill = w.Skills[RandomSkill1]; w.UseSkill(); } - if (AtkOrUseSkill2 == 0 && w.Opponent.HP > 0) - { - w.Opponent.Attack(); - } - else if (AtkOrUseSkill2 == 1 && w.Opponent.HP > 0) + if (RandomSkill2 == 0 && w.Opponent.HP > 0) { + w.Opponent.Usingskill = w.Opponent.Skills[RandomSkill2]; w.Opponent.UseSkill(); } } @@ -34,14 +28,14 @@ public static Player Battle(Player w) { Logger.LogText($"({w.Class}) {w.Name} погиб!\n"); w.Opponent.HP = rnd.Next(1, 100); - w.Opponent.IsDebuffed = false; + w.Opponent.Effects.Remove("Огненные стрелы"); return w; } else if (w.Opponent.HP < 1) { Logger.LogText($"({w.Opponent.Class}) {w.Opponent.Name} погиб!\n"); w.HP = rnd.Next(1, 100); - w.IsDebuffed = false; + w.Effects.Remove("Огненные стрелы"); return w.Opponent; } throw new Exception("Fatal error"); diff --git a/RPG/Game.cs b/RPG/Game.cs index bf5ef69..0ce3dd2 100644 --- a/RPG/Game.cs +++ b/RPG/Game.cs @@ -8,11 +8,23 @@ static void Main(string[] args) { string[] names = { "WhiteCat", "Vaxei", "Alumetri", "idke", "Micca", "FlyingTuna", "Karthy", "RyuK", "Varvalian", "Mathi", "FGSky", "fieryrage", "firebat92", "chocomint", "Abyssal", "Aireu"}; - Console.Write($"Введите кол-во игроков(1-16):"); - int n = Convert.ToInt32(Console.ReadLine()); - if (n % 2 != 0 || n <= 0) + int n = 0; + try { - throw new Exception("Wrong count players"); + Console.Write($"Введите кол-во игроков(1-16):"); + string nString = Console.ReadLine(); + n = Convert.ToInt32(nString); + } + catch (System.FormatException) + { + Console.Write($"Введите кол-во игроков(1-16):"); + string nString = Console.ReadLine(); + n = Convert.ToInt32(nString); + } + while (n % 2 != 0 || n <= 0) + { + Console.Write($"Введите кол-во игроков(1-16):"); + n = Convert.ToInt32(Console.ReadLine()); } Random rnd = new Random(); List players = new List(); @@ -22,31 +34,17 @@ static void Main(string[] args) while (players.Count < n) { int c1 = rnd.Next(0, 3); - int c2 = rnd.Next(0, 3); - if (c1 == 0) - { - players.Add(new Knight(names[k])); - } - if (c1 == 1) - { - players.Add(new Archer(names[k])); - } - if (c1 == 2) - { - players.Add(new Mage(names[k])); - } - k++; - if (c2 == 0) - { - players.Add(new Knight(names[k])); - } - if (c2 == 1) - { - players.Add(new Archer(names[k])); - } - if (c2 == 2) + switch (c1) { - players.Add(new Mage(names[k])); + case 0: + players.Add(new Knight(names[k])); + break; + case 1: + players.Add(new Archer(names[k])); + break; + case 2: + players.Add(new Mage(names[k])); + break; } k++; } @@ -70,7 +68,6 @@ static void Main(string[] args) } } Logger.LogText($"({winners[0].Class}) {winners[0].Name} WINNER!!!"); - Console.ReadLine(); } } } diff --git a/RPG/IUseSkill.cs b/RPG/IUseSkill.cs index 56792d5..118db41 100644 --- a/RPG/IUseSkill.cs +++ b/RPG/IUseSkill.cs @@ -4,7 +4,7 @@ namespace RPG { - interface IUseSkill + public interface IUseSkill { void UseSkill(Player user); } diff --git a/RPG/Knight.cs b/RPG/Knight.cs index bed6968..641cb45 100644 --- a/RPG/Knight.cs +++ b/RPG/Knight.cs @@ -17,8 +17,8 @@ public Knight(string name) public Knight(string name, Player opponent) :base(name, opponent) { + Skills.Add(new KnightSkill()); Class = "Knight"; - Usingskill = new KnightSkill(); } } diff --git a/RPG/Mage.cs b/RPG/Mage.cs index 562a304..da26c79 100644 --- a/RPG/Mage.cs +++ b/RPG/Mage.cs @@ -18,7 +18,7 @@ public Mage(string name, Player opponent) : base(name, opponent) { Class = "Mage"; - Usingskill = new MageSkill(); + Skills.Add(new MageSkill()); } } diff --git a/RPG/MageSkill.cs b/RPG/MageSkill.cs index 75139a6..9624ad8 100644 --- a/RPG/MageSkill.cs +++ b/RPG/MageSkill.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Text; +using System.Linq; namespace RPG { @@ -8,7 +9,7 @@ public class MageSkill : IUseSkill { public void UseSkill(Player user) { - user.Opponent.IsSkipped = true; + user.Opponent.Effects.Add("Заворожение"); Logger.LogText($"({user.Class}) {user.Name} использует (Заворожение) на ({user.Opponent.Class}) {user.Opponent.Name}."); } } diff --git a/RPG/Player.cs b/RPG/Player.cs index a7988ef..2e9094a 100644 --- a/RPG/Player.cs +++ b/RPG/Player.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Linq; using System.Text; using System.Text.RegularExpressions; @@ -20,49 +21,24 @@ public Player(string name, Player opponent) { Name = name; Opponent = opponent; + Skills.Add(new Attack()); } public string Class { get; protected set; } public string Name { get; set; } public Player Opponent { get; set; } = null; public double HP { get; set; } = rnd.Next(1, 100); public int Strength { get; } = rnd.Next(1, 99); - public bool IsDebuffed { get; set; } = false; - public bool IsSkipped { get; set; } = false; - public bool SkillUsed { get; set; } = false; - internal IUseSkill Usingskill { get; set; } + public IUseSkill Usingskill { get; set; } - public void Skip() - { + public List Skills = new List(); - } - public virtual void Attack() - { - if (!IsSkipped) - { - if (!IsDebuffed) - { - Opponent.HP -= Strength; - Logger.LogText($"({Class}) {Name} наносит урон {Strength} противнику ({Opponent.Class}) {Opponent.Name}."); - } - else - { - HP -= 2; - Logger.LogText($"({Class}) {Name} получает урон 2 от (Огненные стрелы)."); - Opponent.HP -= Strength; - Logger.LogText($"({Class}) {Name} наносит урон {Strength} противнику ({Opponent.Class}) {Opponent.Name}."); - } - } - else - { - Logger.LogText($"({Class}) {Name} пропускает ход."); - IsSkipped = false; - } - } + public List Effects = new List(); + public void UseSkill() { - if (!IsSkipped) + if (!Effects.Any(item => item == "Заворожение")) { - if (!IsDebuffed) + if (!Effects.Any(item => item == "Огненные стрелы")) { Usingskill.UseSkill(this); } @@ -76,9 +52,9 @@ public void UseSkill() else { Logger.LogText($"({Class}) {Name} пропускает ход."); - IsSkipped = false; + Effects.Remove("Заворожение"); } - + } } } From cd690a234365cc6fa4c47ca2579a618d099fb6f4 Mon Sep 17 00:00:00 2001 From: Acerlaorion <52343449+Acerlaorion@users.noreply.github.com> Date: Sat, 7 Mar 2020 23:50:05 +0300 Subject: [PATCH 4/8] bugfix --- RPG/Battle.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/RPG/Battle.cs b/RPG/Battle.cs index 0539d0a..ba926fe 100644 --- a/RPG/Battle.cs +++ b/RPG/Battle.cs @@ -11,14 +11,14 @@ public static Player Battle(Player w) Random rnd = new Random(); while (w.HP > 0 && w.Opponent.HP > 0) { - int RandomSkill1 = rnd.Next(0, w.Skills.Count - 1); - int RandomSkill2 = rnd.Next(0, w.Opponent.Skills.Count - 1); - if (RandomSkill1 == 0 && w.HP > 0) + int RandomSkill1 = rnd.Next(0, w.Skills.Count); + int RandomSkill2 = rnd.Next(0, w.Opponent.Skills.Count); + if (w.HP > 0) { w.Usingskill = w.Skills[RandomSkill1]; w.UseSkill(); } - if (RandomSkill2 == 0 && w.Opponent.HP > 0) + if (w.Opponent.HP > 0) { w.Opponent.Usingskill = w.Opponent.Skills[RandomSkill2]; w.Opponent.UseSkill(); From 72d3de651b8a6776db989d11035fac0224ca177f Mon Sep 17 00:00:00 2001 From: Acerlaorion <52343449+Acerlaorion@users.noreply.github.com> Date: Wed, 15 Apr 2020 10:50:15 +0300 Subject: [PATCH 5/8] Fix --- .github/workflows/dotnetcore.yml | 4 ++++ RPG/Archer.cs | 6 +---- RPG/ArcherSkill.cs | 2 +- RPG/Battle.cs | 39 +++++++++++++++++++++++++++---- RPG/FireArrow.cs | 16 +++++++++++++ RPG/Game.cs | 2 +- RPG/IEffect.cs | 11 +++++++++ RPG/Knight.cs | 6 +---- RPG/Mage.cs | 6 +---- RPG/MageSkill.cs | 3 ++- RPG/Player.cs | 40 +++++++++++--------------------- RPG/RPG.csproj | 2 +- RPG/Skip.cs | 15 ++++++++++++ 13 files changed, 102 insertions(+), 50 deletions(-) create mode 100644 RPG/FireArrow.cs create mode 100644 RPG/IEffect.cs create mode 100644 RPG/Skip.cs diff --git a/.github/workflows/dotnetcore.yml b/.github/workflows/dotnetcore.yml index 22cc4eb..c8b2cbb 100644 --- a/.github/workflows/dotnetcore.yml +++ b/.github/workflows/dotnetcore.yml @@ -21,3 +21,7 @@ jobs: run: | cd CourseApp.Tests dotnet test + - name: Run tests + run: | + cd RPG + dotnet test diff --git a/RPG/Archer.cs b/RPG/Archer.cs index 3c51c7e..6208b59 100644 --- a/RPG/Archer.cs +++ b/RPG/Archer.cs @@ -11,11 +11,7 @@ public Archer() { } public Archer(string name) - : this(name, null) - { - } - public Archer(string name, Player opponent) - : base(name, opponent) + : base(name) { Skills.Add(new ArcherSkill()); Class = "Archer"; diff --git a/RPG/ArcherSkill.cs b/RPG/ArcherSkill.cs index 07fb1b1..2f96bf4 100644 --- a/RPG/ArcherSkill.cs +++ b/RPG/ArcherSkill.cs @@ -11,7 +11,7 @@ public void UseSkill(Player user) { if (TimesUsedSkill < 1) { - user.Opponent.Effects.Add("Огненные стрелы"); + user.Opponent.Effects.Add(new FireArrow()); Logger.LogText($"({user.Class}) {user.Name} использует (Огненные стрелы) на ({user.Opponent.Class}) {user.Opponent.Name}."); TimesUsedSkill++; } diff --git a/RPG/Battle.cs b/RPG/Battle.cs index ba926fe..dc34b95 100644 --- a/RPG/Battle.cs +++ b/RPG/Battle.cs @@ -13,29 +13,58 @@ public static Player Battle(Player w) { int RandomSkill1 = rnd.Next(0, w.Skills.Count); int RandomSkill2 = rnd.Next(0, w.Opponent.Skills.Count); - if (w.HP > 0) + w.ProcEffects(); + if (w.isStunned == false) { w.Usingskill = w.Skills[RandomSkill1]; w.UseSkill(); } + else + { + w.isStunned = false; + for (int i = 0; i < w.Effects.Count; i++) + { + if (w.Effects[i] is Skip) + { + w.Effects.RemoveAt(i); + i--; + } + } + } + w.Opponent.ProcEffects(); if (w.Opponent.HP > 0) { - w.Opponent.Usingskill = w.Opponent.Skills[RandomSkill2]; - w.Opponent.UseSkill(); + if (w.Opponent.isStunned == false) + { + w.Opponent.Usingskill = w.Opponent.Skills[RandomSkill2]; + w.Opponent.UseSkill(); + } + else + { + w.Opponent.isStunned = false; + for (int i = 0; i < w.Effects.Count; i++) + { + if (w.Effects[i] is Skip) + { + w.Effects.RemoveAt(i); + i--; + } + } + } } } if (w.HP < 1) { Logger.LogText($"({w.Class}) {w.Name} погиб!\n"); w.Opponent.HP = rnd.Next(1, 100); - w.Opponent.Effects.Remove("Огненные стрелы"); + w.Opponent.Effects.Clear(); return w; } else if (w.Opponent.HP < 1) { Logger.LogText($"({w.Opponent.Class}) {w.Opponent.Name} погиб!\n"); w.HP = rnd.Next(1, 100); - w.Effects.Remove("Огненные стрелы"); + w.Effects.Clear(); return w.Opponent; } throw new Exception("Fatal error"); diff --git a/RPG/FireArrow.cs b/RPG/FireArrow.cs new file mode 100644 index 0000000..a358964 --- /dev/null +++ b/RPG/FireArrow.cs @@ -0,0 +1,16 @@ + using System; +using System.Collections.Generic; +using System.Text; + +namespace RPG +{ + public class FireArrow : IEffect + { + public const int DamageFireArrow = 2; + public void Proc(Player owner) + { + owner.HP -= DamageFireArrow; + Logger.LogText($"({owner.Class}) {owner.Name} получает урон {DamageFireArrow} от эффекта Fire Arrow."); + } + } +} diff --git a/RPG/Game.cs b/RPG/Game.cs index 0ce3dd2..c20e907 100644 --- a/RPG/Game.cs +++ b/RPG/Game.cs @@ -51,7 +51,7 @@ static void Main(string[] args) Logger.LogText($"{kon++}-й Кон\n"); while (players.Count + winners.Count > 1) { - if (players.Count > 1 && !(players.Count < 2)) + if (players.Count >=2) { Player tempPlayer = ClassBattle.Battle(players[PickPlayers.PickOp(players)]); winners.Add(tempPlayer.Opponent); diff --git a/RPG/IEffect.cs b/RPG/IEffect.cs new file mode 100644 index 0000000..334d59c --- /dev/null +++ b/RPG/IEffect.cs @@ -0,0 +1,11 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace RPG +{ + public interface IEffect + { + void Proc(Player owner); + } +} \ No newline at end of file diff --git a/RPG/Knight.cs b/RPG/Knight.cs index 641cb45..d03279d 100644 --- a/RPG/Knight.cs +++ b/RPG/Knight.cs @@ -11,11 +11,7 @@ public Knight() { } public Knight(string name) - : this(name, null) - { - } - public Knight(string name, Player opponent) - :base(name, opponent) + :base(name) { Skills.Add(new KnightSkill()); Class = "Knight"; diff --git a/RPG/Mage.cs b/RPG/Mage.cs index da26c79..d6d1977 100644 --- a/RPG/Mage.cs +++ b/RPG/Mage.cs @@ -11,11 +11,7 @@ public Mage() { } public Mage(string name) - : this(name, null) - { - } - public Mage(string name, Player opponent) - : base(name, opponent) + : base(name) { Class = "Mage"; Skills.Add(new MageSkill()); diff --git a/RPG/MageSkill.cs b/RPG/MageSkill.cs index 9624ad8..5a2524d 100644 --- a/RPG/MageSkill.cs +++ b/RPG/MageSkill.cs @@ -9,8 +9,9 @@ public class MageSkill : IUseSkill { public void UseSkill(Player user) { - user.Opponent.Effects.Add("Заворожение"); + user.Opponent.Effects.Add(new Skip()); Logger.LogText($"({user.Class}) {user.Name} использует (Заворожение) на ({user.Opponent.Class}) {user.Opponent.Name}."); + } } } diff --git a/RPG/Player.cs b/RPG/Player.cs index 2e9094a..84fa3a8 100644 --- a/RPG/Player.cs +++ b/RPG/Player.cs @@ -6,6 +6,7 @@ namespace RPG { + public abstract class Player { private static readonly Random rnd = new Random(); @@ -14,47 +15,34 @@ public Player() { } public Player(string name) - : this(name,null) - { - } - public Player(string name, Player opponent) { Name = name; - Opponent = opponent; + HP = rnd.Next(1, 100); + Strength = rnd.Next(1, 99); Skills.Add(new Attack()); } public string Class { get; protected set; } public string Name { get; set; } public Player Opponent { get; set; } = null; - public double HP { get; set; } = rnd.Next(1, 100); - public int Strength { get; } = rnd.Next(1, 99); + public double HP { get; set; } + public int Strength { get; } + public bool isStunned { get; set; } public IUseSkill Usingskill { get; set; } public List Skills = new List(); - public List Effects = new List(); + public List Effects = new List(); public void UseSkill() + { + Usingskill.UseSkill(this); + } + public void ProcEffects() { - if (!Effects.Any(item => item == "Заворожение")) + for(int i=0;i item == "Огненные стрелы")) - { - Usingskill.UseSkill(this); - } - else - { - HP -= 2; - Logger.LogText($"({Class}) {Name} получает урон 2 от (Огненные стрелы)."); - Usingskill.UseSkill(this); - } + Effects[i].Proc(this); } - else - { - Logger.LogText($"({Class}) {Name} пропускает ход."); - Effects.Remove("Заворожение"); - } - } - } +} } diff --git a/RPG/RPG.csproj b/RPG/RPG.csproj index 958d2f1..23df604 100644 --- a/RPG/RPG.csproj +++ b/RPG/RPG.csproj @@ -2,7 +2,7 @@ Exe - netcoreapp3.0 + netcoreapp2.1 diff --git a/RPG/Skip.cs b/RPG/Skip.cs new file mode 100644 index 0000000..22c8147 --- /dev/null +++ b/RPG/Skip.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace RPG +{ + public class Skip : IEffect + { + public void Proc(Player owner) + { + owner.isStunned = true; + Logger.LogText($"({owner.Class}) {owner.Name} пропускает ход."); + } + } +} From 5a1111ba12e79bf9ec13006b3cefea80f432b7a1 Mon Sep 17 00:00:00 2001 From: Acerlaorion <52343449+Acerlaorion@users.noreply.github.com> Date: Wed, 15 Apr 2020 10:57:39 +0300 Subject: [PATCH 6/8] Fix --- .github/workflows/dotnetcore.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/dotnetcore.yml b/.github/workflows/dotnetcore.yml index c8b2cbb..32da533 100644 --- a/.github/workflows/dotnetcore.yml +++ b/.github/workflows/dotnetcore.yml @@ -24,4 +24,4 @@ jobs: - name: Run tests run: | cd RPG - dotnet test + dotnet build --configuration Release From 4c982e1cf675c097d69fb618f95b0235b0305d35 Mon Sep 17 00:00:00 2001 From: Acerlaorion <52343449+Acerlaorion@users.noreply.github.com> Date: Wed, 15 Apr 2020 22:20:05 +0300 Subject: [PATCH 7/8] =?UTF-8?q?=D0=9E=D0=BF=D0=B5=D1=87=D0=B0=D1=82=D0=BA?= =?UTF-8?q?=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/dotnetcore.yml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/.github/workflows/dotnetcore.yml b/.github/workflows/dotnetcore.yml index 32da533..22cc4eb 100644 --- a/.github/workflows/dotnetcore.yml +++ b/.github/workflows/dotnetcore.yml @@ -21,7 +21,3 @@ jobs: run: | cd CourseApp.Tests dotnet test - - name: Run tests - run: | - cd RPG - dotnet build --configuration Release From 8e2630e84023a99f24e256b9c76f1028d260e1b7 Mon Sep 17 00:00:00 2001 From: Acerlaorion <52343449+Acerlaorion@users.noreply.github.com> Date: Wed, 15 Apr 2020 22:20:38 +0300 Subject: [PATCH 8/8] . --- RPG/Battle.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/RPG/Battle.cs b/RPG/Battle.cs index dc34b95..cda857a 100644 --- a/RPG/Battle.cs +++ b/RPG/Battle.cs @@ -44,9 +44,9 @@ public static Player Battle(Player w) w.Opponent.isStunned = false; for (int i = 0; i < w.Effects.Count; i++) { - if (w.Effects[i] is Skip) + if (w.Opponent.Effects[i] is Skip) { - w.Effects.RemoveAt(i); + w.Opponent.Effects.RemoveAt(i); i--; } }