From bd4247e864937824dfd510fb26ddf1e63f9e7bc5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ilkka=20Sepp=C3=A4l=C3=A4?= Date: Tue, 5 Sep 2017 23:28:44 +0300 Subject: [PATCH 01/39] #590 Add explanation for Facade pattern --- facade/README.md | 183 ++++++++++++++++++++++++++++++++++++- facade/etc/facade.png | Bin 33815 -> 0 bytes facade/etc/facade.ucls | 88 ------------------ facade/etc/facade.urm.puml | 60 ------------ facade/etc/facade_1.png | Bin 44417 -> 0 bytes pom.xml | 1 + 6 files changed, 183 insertions(+), 149 deletions(-) delete mode 100644 facade/etc/facade.png delete mode 100644 facade/etc/facade.ucls delete mode 100644 facade/etc/facade.urm.puml delete mode 100644 facade/etc/facade_1.png diff --git a/facade/README.md b/facade/README.md index 22ccd6911..66ca84256 100644 --- a/facade/README.md +++ b/facade/README.md @@ -15,7 +15,188 @@ tags: Provide a unified interface to a set of interfaces in a subsystem. Facade defines a higher-level interface that makes the subsystem easier to use. -![alt text](./etc/facade_1.png "Facade") +## Explanation + +Real world example + +> How does a goldmine work? "Well, the miners go down there and dig gold!" you say. That is what you believe because you are using a simple interface that goldmine provides on the outside, internally it has to do a lot of stuff to make it happen. This simple interface to the complex subsystem is a facade. + +In plain words + +> Facade pattern provides a simplified interface to a complex subsystem. + +Wikipedia says + +> A facade is an object that provides a simplified interface to a larger body of code, such as a class library. + +**Programmatic Example** + +Taking our goldmine example from above. Here we have the dwarven mine worker hierarchy + +``` +public abstract class DwarvenMineWorker { + + private static final Logger LOGGER = LoggerFactory.getLogger(DwarvenMineWorker.class); + + public void goToSleep() { + LOGGER.info("{} goes to sleep.", name()); + } + + public void wakeUp() { + LOGGER.info("{} wakes up.", name()); + } + + public void goHome() { + LOGGER.info("{} goes home.", name()); + } + + public void goToMine() { + LOGGER.info("{} goes to the mine.", name()); + } + + private void action(Action action) { + switch (action) { + case GO_TO_SLEEP: + goToSleep(); + break; + case WAKE_UP: + wakeUp(); + break; + case GO_HOME: + goHome(); + break; + case GO_TO_MINE: + goToMine(); + break; + case WORK: + work(); + break; + default: + LOGGER.info("Undefined action"); + break; + } + } + + public void action(Action... actions) { + for (Action action : actions) { + action(action); + } + } + + public abstract void work(); + + public abstract String name(); + + static enum Action { + GO_TO_SLEEP, WAKE_UP, GO_HOME, GO_TO_MINE, WORK + } +} + +public class DwarvenTunnelDigger extends DwarvenMineWorker { + + private static final Logger LOGGER = LoggerFactory.getLogger(DwarvenTunnelDigger.class); + + @Override + public void work() { + LOGGER.info("{} creates another promising tunnel.", name()); + } + + @Override + public String name() { + return "Dwarven tunnel digger"; + } +} + +public class DwarvenGoldDigger extends DwarvenMineWorker { + + private static final Logger LOGGER = LoggerFactory.getLogger(DwarvenGoldDigger.class); + + @Override + public void work() { + LOGGER.info("{} digs for gold.", name()); + } + + @Override + public String name() { + return "Dwarf gold digger"; + } +} + +public class DwarvenCartOperator extends DwarvenMineWorker { + + private static final Logger LOGGER = LoggerFactory.getLogger(DwarvenCartOperator.class); + + @Override + public void work() { + LOGGER.info("{} moves gold chunks out of the mine.", name()); + } + + @Override + public String name() { + return "Dwarf cart operator"; + } +} + +``` + +To operate all these goldmine workers we have the facade + +``` +public class DwarvenGoldmineFacade { + + private final List workers; + + public DwarvenGoldmineFacade() { + workers = new ArrayList<>(); + workers.add(new DwarvenGoldDigger()); + workers.add(new DwarvenCartOperator()); + workers.add(new DwarvenTunnelDigger()); + } + + public void startNewDay() { + makeActions(workers, DwarvenMineWorker.Action.WAKE_UP, DwarvenMineWorker.Action.GO_TO_MINE); + } + + public void digOutGold() { + makeActions(workers, DwarvenMineWorker.Action.WORK); + } + + public void endDay() { + makeActions(workers, DwarvenMineWorker.Action.GO_HOME, DwarvenMineWorker.Action.GO_TO_SLEEP); + } + + private static void makeActions(Collection workers, + DwarvenMineWorker.Action... actions) { + for (DwarvenMineWorker worker : workers) { + worker.action(actions); + } + } +} +``` + +Now to use the facade + +``` +DwarvenGoldmineFacade facade = new DwarvenGoldmineFacade(); +facade.startNewDay(); +// Dwarf gold digger wakes up. +// Dwarf gold digger goes to the mine. +// Dwarf cart operator wakes up. +// Dwarf cart operator goes to the mine. +// Dwarven tunnel digger wakes up. +// Dwarven tunnel digger goes to the mine. +facade.digOutGold(); +// Dwarf gold digger digs for gold. +// Dwarf cart operator moves gold chunks out of the mine. +// Dwarven tunnel digger creates another promising tunnel. +facade.endDay(); +// Dwarf gold digger goes home. +// Dwarf gold digger goes to sleep. +// Dwarf cart operator goes home. +// Dwarf cart operator goes to sleep. +// Dwarven tunnel digger goes home. +// Dwarven tunnel digger goes to sleep. +``` ## Applicability Use the Facade pattern when diff --git a/facade/etc/facade.png b/facade/etc/facade.png deleted file mode 100644 index 5cc6271da191800a89fd596dfa1202499f210274..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33815 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

7dHXc%oilFv{QwfjJLqXoK*+}VDf{o4K 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 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/facade/etc/facade.urm.puml b/facade/etc/facade.urm.puml deleted file mode 100644 index 477f9eee7..000000000 --- a/facade/etc/facade.urm.puml +++ /dev/null @@ -1,60 +0,0 @@ -@startuml -package com.iluwatar.facade { - class App { - + App() - + main(args : String[]) {static} - } - class DwarvenCartOperator { - - LOGGER : Logger {static} - + DwarvenCartOperator() - + name() : String - + work() - } - class DwarvenGoldDigger { - - LOGGER : Logger {static} - + DwarvenGoldDigger() - + name() : String - + work() - } - class DwarvenGoldmineFacade { - - workers : List - + DwarvenGoldmineFacade() - + digOutGold() - + endDay() - - makeActions(workers : Collection, actions : Action[]) {static} - + startNewDay() - } - abstract class DwarvenMineWorker { - - LOGGER : Logger {static} - + DwarvenMineWorker() - - action(action : Action) - + action(actions : Action[]) - + goHome() - + goToMine() - + goToSleep() - + name() : String {abstract} - + wakeUp() - + work() {abstract} - } - ~enum Action { - + GO_HOME {static} - + GO_TO_MINE {static} - + GO_TO_SLEEP {static} - + WAKE_UP {static} - + WORK {static} - + valueOf(name : String) : Action {static} - + values() : Action[] {static} - } - class DwarvenTunnelDigger { - - LOGGER : Logger {static} - + DwarvenTunnelDigger() - + name() : String - + work() - } -} -DwarvenGoldmineFacade --> "-workers" DwarvenMineWorker -Action ..+ DwarvenMineWorker -DwarvenCartOperator --|> DwarvenMineWorker -DwarvenGoldDigger --|> DwarvenMineWorker -DwarvenTunnelDigger --|> DwarvenMineWorker -@enduml \ No newline at end of file diff --git a/facade/etc/facade_1.png b/facade/etc/facade_1.png deleted file mode 100644 index 6ed0573fc56cd216e926b7c538b516f7e921e8b8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 44417 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 J6`ivR`Y#8bhkpP7 diff --git a/pom.xml b/pom.xml index 44461b091..cf1bf9831 100644 --- a/pom.xml +++ b/pom.xml @@ -470,6 +470,7 @@ bridge composite decorator + facade From c13661810efd3f41e96aec3d94a6d91b0eb6948e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ilkka=20Sepp=C3=A4l=C3=A4?= Date: Wed, 6 Sep 2017 22:31:21 +0300 Subject: [PATCH 02/39] #590 Add explanation for Flyweight --- flyweight/README.md | 95 +++++++++++++++++++++- flyweight/etc/flyweight.png | Bin 31900 -> 0 bytes flyweight/etc/flyweight.ucls | 135 ------------------------------- flyweight/etc/flyweight.urm.puml | 66 --------------- flyweight/etc/flyweight_1.png | Bin 63947 -> 0 bytes pom.xml | 1 + 6 files changed, 95 insertions(+), 202 deletions(-) delete mode 100644 flyweight/etc/flyweight.png delete mode 100644 flyweight/etc/flyweight.ucls delete mode 100644 flyweight/etc/flyweight.urm.puml delete mode 100644 flyweight/etc/flyweight_1.png diff --git a/flyweight/README.md b/flyweight/README.md index 469bb8626..9a0e13e19 100644 --- a/flyweight/README.md +++ b/flyweight/README.md @@ -16,7 +16,100 @@ tags: Use sharing to support large numbers of fine-grained objects efficiently. -![alt text](./etc/flyweight_1.png "Flyweight") +## Explanation +Real world example + +> Alchemist's shop has shelves full of magic potions. Many of the potions are the same so there is no need to create new object for each of them. Instead one object instance can represent multiple shelf items so memory footprint remains small. + +In plain words + +> It is used to minimize memory usage or computational expenses by sharing as much as possible with similar objects. + +Wikipedia says + +> In computer programming, flyweight is a software design pattern. A flyweight is an object that minimizes memory use by sharing as much data as possible with other similar objects; it is a way to use objects in large numbers when a simple repeated representation would use an unacceptable amount of memory. + +**Programmatic example** + +Translating our alchemist shop example from above. First of all we have different potion types + +``` +public interface Potion { + void drink(); +} + +public class HealingPotion implements Potion { + private static final Logger LOGGER = LoggerFactory.getLogger(HealingPotion.class); + @Override + public void drink() { + LOGGER.info("You feel healed. (Potion={})", System.identityHashCode(this)); + } +} + +public class HolyWaterPotion implements Potion { + private static final Logger LOGGER = LoggerFactory.getLogger(HolyWaterPotion.class); + @Override + public void drink() { + LOGGER.info("You feel blessed. (Potion={})", System.identityHashCode(this)); + } +} + +public class InvisibilityPotion implements Potion { + private static final Logger LOGGER = LoggerFactory.getLogger(InvisibilityPotion.class); + @Override + public void drink() { + LOGGER.info("You become invisible. (Potion={})", System.identityHashCode(this)); + } +} +``` + +Then the actual Flyweight object which is the factory for creating potions + +``` +public class PotionFactory { + + private final Map potions; + + public PotionFactory() { + potions = new EnumMap<>(PotionType.class); + } + + Potion createPotion(PotionType type) { + Potion potion = potions.get(type); + if (potion == null) { + switch (type) { + case HEALING: + potion = new HealingPotion(); + potions.put(type, potion); + break; + case HOLY_WATER: + potion = new HolyWaterPotion(); + potions.put(type, potion); + break; + case INVISIBILITY: + potion = new InvisibilityPotion(); + potions.put(type, potion); + break; + default: + break; + } + } + return potion; + } +} +``` + +And it can be used as below + +``` +PotionFactory factory = new PotionFactory(); +factory.createPotion(PotionType.INVISIBILITY).drink(); // You become invisible. (Potion=6566818) +factory.createPotion(PotionType.HEALING).drink(); // You feel healed. (Potion=648129364) +factory.createPotion(PotionType.INVISIBILITY).drink(); // You become invisible. (Potion=6566818) +factory.createPotion(PotionType.HOLY_WATER).drink(); // You feel blessed. (Potion=1104106489) +factory.createPotion(PotionType.HOLY_WATER).drink(); // You feel blessed. (Potion=1104106489) +factory.createPotion(PotionType.HEALING).drink(); // You feel healed. (Potion=648129364) +``` ## Applicability The Flyweight pattern's effectiveness depends heavily on how diff --git a/flyweight/etc/flyweight.png b/flyweight/etc/flyweight.png deleted file mode 100644 index 265d039247511ce2668cf1f620612dd4200bc3b4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31900 zcmd42WmH^$vnC3JAc5e)9RegY8r)ri1qsl&L-59(U_lxQ5ZnR;3($nd-7R>q;KAM9 z?jQ*5D=aYARr*} zp&wAhBvl4ysuRpOG2rtQR|pOHrfO zPr4$!lvE)Kg9*u^qPG;B@84{+jOuQe-Zy!>D{NCWG_+*txV|lz*j|{iIon?_+-q{P zcnXO2&(ApnzANItzaSvQAxIJa&u>&C(upQV<|GJnU-`mcYvbmOB25(#){0cMo>ALT zuLmFmql#f7Aa);)NE3RQR@I{gg)4=}TZx6WpRw0cqD*xdwUL-mGO!1uVsaqhCvyl< z!&|H0aIqF~1NT6gDwzD^r9FemfsIex{^S$!M|4bD3|n`}l{lTC9d#Q=U+d?v(7ZvM z6ZQZaA)_$FGAL?NUtn61TmnZ1UQVB z6_(1E&?3S@cb2?rMFLwDE2$7bmDVyB&T*nO!=rm660EAMJ>*NQ7y6*|177D}#^W<%Kh3%*+ zRK*2N_)b>Ils%7_(P`&%?wk(wW_@!lNB{oE$lNXnUKo*t=eApwUqkY(IrsiUM?RL~9?JV+jn}%W`en#Hdm^$by}NihoWVI_TrV}+;)S($W9%s-*;;zvk*&`Kk4!Uf&Js4m`WbUPZ}+n*J6m{IUySnWonRCpa{n4h&j( zr%`9T7o*x@LO?Na72B*LUqn)k9|K zR=WR4{$o%PtiRAj6bT46k`MRnG^U0SZyburUEnB*Vx^M+uR7|#Mts0T2o5%4H-Ib&9PpfN&P(J;F5EoWi`RE2C>QY+ z`WLE$T%B^V?5G=ZhMgOcUbI@VYdOZjar(TF*BchOJrg0j(orLE6Scv35tBh=YG!FY ziV&?3YED zXL2hJC3`1=q7e?*sDX?$X`ECq>tC@-7-aV;ITRgp2~iTW6&WS=X>~(3M834`?4MBg z|EJ53aKL_-HU4Le{)Y!Ghoihc=e|k)_jE0aWgiq)^8))8YkdwJ@>@>wbQi9S?p!Z4 z7LQubPE)I;3>?te(e<$n3ntIdK7MHsagyA9IYA%kiJT_%>F^^BiV+etp!c|x&2PEl zpy9UIol3~*W@2FT%yOHpU~gS`xQ3JGwPkd*2%X?io7n|t%=HUzRpNph*-@<`Lk8m& zlS;vsduncus2&lon-x2Y)9WgC1Ibz6i1a&2X&*C^Kz>Tt#qLfN#hFT(O{M4z92R(f z$ts&kY|?cY^=tW><;lnQ&^ihc0rlx(SmgUA|EhlPz5cE1UY1L;sDsS41p4?7N;zeU z(~8x}i=4mDvGERgrP}V58|-xDJYipJLwmZ(DJf}rr?e$7cd4G-2w{ZV#JC2W(K)m$ zx~oUjE0gp|Cp!2Z;bZGPIAq=5?mbMYW0UOxdd^+wdR7dz``aICw-6w2;nC2xY_mzN))-UG>!q*rEu+@+){RWKUreQ0U8}LT6yJa;~@XoJA&n zH%8Eu-ep3$V?A*Qc8pR8pOBEpQOLvkpm-Q!iwQMftU12U`gfk);h|pw2ZQRmDdS5t z8NJ6HEqBGk%?HO0KIa#`nhz)bqnfCWciY3`hW5$4X2oBWYHPPi(I*)Q_DJ(|tB8D50@9HzARUteVLoy-W9abRZ6@;e2-;SU1KOgU`X zG;!*dK5_PyVTOBfG&n2O$nyxvHf4O1Hk;lu!B#e#UR-TDH+S}3C7g`vb|1bbE~lA? zuGj-7KcipE)sD1ah_lxGUEyqQv6;q{E)gNRDG*HuI zGfL8kcOV{Foay!}5{zu5F&3nfRs6d;1L_wkx{Zi*TV$mf%%P3lja7yt1md zU)c(MZ1k0C#uLgp_xwgroz$g|*xnNoC%m~!q$Hckye)X944Td;_Komvn8_(jmvgj& zesj8`Bx>jn3NekhImWoKUTa!6)J&C}c;|8}uAOLO$TKBtpFL+4cvy0Xn?kipDi)L|CSVm#m5|#K zxJ*e<D$A{#~KLY0$4PdE39BA+uHdynv|lqanwSvkIKDgO!nD?&$X^Orn;`le)ig zPa&-7-cdKgUH8nnG@N;VZ5}FeThHdZJLvD!)52&<+wUBcZvGJGyQW?xYu}Q3UhX-M z$GScn9_xx+s{!jMI3@gvY$+GFWhH|c)1*nxCh)~W%CIsqHXl;{d$xYc(EI+H&G!O# z=A`9z%D>Qm%RR++RVD4f|1`*~HSx~s5LHI*Jp<1*8lpL5>Dn?Q==_L>#%s%10Q{o`M2;Z;lM$D zym2aofjT^GF)z4}4sr7EIqvN{kc~YjjYl_b{k4lQ}2W5BRsW+t9 zfy9T*C~lsF@C#q5CY`*TFHzr09 zJb$s=wYIL~pcrS>CaJ)3mbl?FKZ9L^TPx1c1+=oMwz`r5)_4B&v3D~`gJ-e2+PtKT z!aE>1-_ttNcq`UfLObZ#%4aOjSsp zhE&5Ndw%#?+01jZqwHo^sm!9gGU4GQ&G2^p>LF@ZMR2NouR0cFQMrL~zGjz8%ddid zu8Z-Yo|vtnMfo>OD&HFOb{*BUyUrS|+_m?z#R}YjA{tiO!dt_L} zW-)#TM`eS}20Q+%d-JK#uRE`tkVVguvvjJlX#O1&#|lNAyL75NHw;i64xxY{MY09Z znGH=K1&{RfUDh7 zsrddJeQJNTv?r^85LTc0ap$da+xjFis^*)Oc>nv1d(<*v!-vBMKevNk z4*$m0x)@x4u)wTH+PaeLr4u?oYdf zh0h| zMSU|!7AyUKutzz4wD|sS04?hVlnZ&5UjH`B;2NoxkVpNZXm9d2R<;`YA)Fxn0*vW> z`{My=m>D^y*<_-stF6 z;dhXOSAj++Ah;9-<*#s%ng6ut$=1c~Z3uQk^BW<{%CZID!#~f32s(bP2FzWJ^R7|P!AVL3p{ciGP2=G0-5>b{lnei_z~RUdQzYiH4C zGrw5mZ08h46>EwwsAL<@J9S-_-Uce#X}U?Ra7l-$Is0jqd#Y=wMkj4o(?XN9@i4R2 zRV3zKm89i$-_?M|x6}e8h^uu?}iqnG<&qSz3kRb{1| zDpe=u7;|{V9Yl^b{`I>1bDkO-y$AW}?1p6zh2=01gPxzVW0;vurbd|x!%|ID`E%^@ zmf8vPdZ!FQ2EfOpu;Ol~`Kmd7j8)*Y=+q9@)~ot|?mlEkNa+{DSb}r#?SxyIEt%NKa|cQKioTAuZHg+N(nZt3N-L z92C_Kk1K(clW{YZHLuuBWwsp6XSHn2W6w+ZZ*ki}YNvN`_}8%oU_Nz!)8%pfLR#6N z{C$bxe~^CyaZUl?F@cmk_jLD3%g!fhr!`l5HQ8r8j^pGw4-D;NTtUBHuh0 z#XvtxxO<|0q9Y;7FCJ#m;5nXd9-&>W$}7@Ujij@muC)sLZd3Sza@#kiwx+FP6`yOY zmv~psHM`(lM+T-g&w|^kLwfP-Jmg-(OTKtYVlSSb4>vt-y+W7>Q;HV6r zGERw0vyFnzH(&6Mx$9pVUFq#&{jMK#D`|T48N;_g`^VAQiQ!T@5QZd zHD7pHKk)otA>z25n0Ir{1M*ndok2A*^Z>(zCm0f}?$HT0o1WKgreyhw zGxyyC2OJ1n8i{6r@U{J`nP(h4!zInZqJ`1}*9Z3odK~JlYjh$=m`riXGQraw%pbeW zL>8S<*}I=xeh(k*N>62r!)3lbaQ-;9Up$KRlqol&n=) z{cq8F58gUc%4}i?(_2Eyuu!yRaX7JzF@)B--uZd&O^jRYOc2`r2;l3aQnAKWLK}zo~tGW%Mu+hKnCatag;^^MwnT=3M6Z@Q(2Co;o_zYNZ zCAJo!o6TG_q?~?Rwsw&tgchUy)v06PBmGGUi|Kwm0#@7@)&-@7WLc)SI1zXusLM1t z9-o;|Mx=Ui9~Fo7nvhtSewQs3xIMqiH~7+$7L}ixT1XejDRdCA=z1v3e9nLr{FJYZ zD)V`Wz_L_n!vX))`*#cqD}j#Bgwy{a;c_9q!Ji5hI&-1!@x1G}5qQBlQcD3IVN8_t z5r|y4PQd_Rz5yIxTEm2>`skO^sGn6uUL8WL{o1D z-TxolU+PP|G)r-ZM!CMP!*AJ?q&&^gxX~UF!+y;e9$$q+*vQ58Jpgx`R`ROGA`?}S zBDt|z>hyLj#(yv$rbm@cvmJN1xjauF?HO!xn$4u{0kD_hs3|50O2Gs)O9Yf~7%Tl@ z(;Ws`Gk-BSFK4*2Hd9+G$3SW3o|{upH3UDq;L zz3Y?{bx$gVlqguea0&U5+ZNWN%GjaflG5L$(r-+g1KcE%kKiQ+cBdrr5j7Z-nmz~n z5fNZB`6!BV4uxjQchRW0b!17wspS8@0rnK*^lDhW)pHKEkUr7~v=}SJd=D{9Ib+U{ z;8AKgvP}fYlG3p%H|lz3d+DBh1XXec58j8b{14sc=&PobSqPoPIf+dh$PPOc6QV|; z<(-yjxB9ASGD%W@WSKk1s$GvF6Ax-$=js-|czBN>Y`Q~5$tr!P0XObZX=4pVK3`%s0& zS$dKlBS<+`GERJEwm;6jp|ThY*?fBEyrZZ^9ml{0_`rxv$~5&pcUwF? zT;UV8T2bT^&vAil&h-5Y?D6;yf>!a_v?Ep~qqSdJu5?SlTla^?Ubs##Uj7#c#vVfp zwFl&wJMJvC<@L(m1g-lbhilb3q?{tXk4Yvs1L)Y(C-o7apR&KRBXui-Jb3S2XsXRi zt!&2$?Q-91;~o@QGhcJqF>=2U8*`szi|l$Aom(tw!(tK2wqpp4NUEctOS##as%rlQ zm}hm&`WBoA>k5Y8^MGM&<}Ej3K@3Wr)M_3C;NRLYbh5GLIU6l6ED~SPH*+UQB?Q-A zhplAJN%EsJPZp`ne90R;B-{tnMr3}TE{06=)RY^>*R>B6mCWF#$;(pluJgYw-Qhk- zHk!R4{(b#UQNK$5m){r5n%`l?J5PD@DST>HELVK5dZy24CWQ`q=zF%h#dXA@{J(>S zI1c#jn-*?7@Hh69axTRp{T3R1#h?uKWIAslea=jDV|T z!ncIGn;VjL(CJ%W`&3fTv{fs%i!;eYKPw;A)*x_vUXP@PZ(7F;{7Rr-VMxDUOS>}@ z-$(bpz*bUvF1ijD*evf}bLEO1+Z7rM%9J9UDBAu_e%62{3zstb#luF;Q}AobY_!@x^Vh$d+J>^;$3+1cPY}2)9+|9ap)(KhV_-877`3Umt7s3XUS) zX6G8lQ=U8_^)rMgt9$O2w+*K>dE0hQoUz6bG-58-yW2LuY5DW*%~Xcpr#EpNnMwXm zdQ?_}82er4VelHB+wLB>g`eUI@?(>DW0gH5rtnblSN2u)CuiXac9+X8RtjRR2 zh44pS?eKqn#AiAs%WgtR^_zI5C=Nvml8afxtPR2bF$LR4v{L)gI_;zKmkgRHAC>PH zlUn~SRMNH&Jinpf9jN4s)J->&AOiDMGGMJ)90%{I=idbHx!5G7Rr3uAoi^6v)I8^m z;yBuGN524_$G;A++U!5FcgS~){Db?py?ZUuVc}ul_{63nRHH%c;g<{%k@uk8z~JC6 zf8Wvm##zo{UFOj6r~q)%x%d>;zkj)vPfA{p@}5+_$DVJT9M^{Mft%b6hF_Xz%$c!a zv+>mOS6qZe)z)YFU*KMj?ovPx1_F!~EMbBYbyWOeAV|aQ%I@`Nn}y>r=ghHVTLZx= z9)_zJZv%skU|!y7#)E<}6RMMR9PSHw9{k~^xi}BeGyZT8bHR=rPM#HB$207z1#(Ij z#U|pa2oLwZd3*o4f~4OlfKP~>O3{}%?pN7vzO#`OjbxMJ6%T!)(>|aY884{Jc@G7# z8-lQ~sV+mE`@_c`3eaaUQkEQ)N8qK*hRmyg|_GIV;+53f85`@3H;iS8esE; zy(7CGj$3&K0Ekz(H5BaoMXz=Sit&+mQKl1{-5KKD-6ly00WJ%;~!^Ge7c z%DnVr2azy_(W%4V=cDa?;D-78xHAuO3(SFylhLqeb*Y0EgBEYTFw*WT^)&MU+2cAc z{AE(1C-k!1x|kg*pDtz=uxF3AVAQ)X_i!lK?C5+j?S0?_mt@;C+z|;Z9`|L-Ir$Eu`&nMaArk&g&HPq($r4sj*hj_z~VrDrORW#8~pr&NIUjm zoG1Njardl*P(9Wu`OCVo_-6{Jg1pL@plN7I;i;*o|iH2+o#JYr3qiH zAV01G#h;)^o{uu#e`e8_VdE1FgZ&yD3$mO1xHZ~&3fqwtnwR!Ko#rio=kXsp2cQdF zcnIaMXU^PR)-G_jRX2U|tnes#&DUdNAPaYF@B8Coo)w;%IdrJ8szDjb1Ya9i5ax+< zp71`*)%mdDiIj49UdEr}N==GGRNODh55ulpr%>sE7QQH}D(6C4K7pMkcK+E%AbZdN z@0uF8Y&a1Zk_XzQO@xf!DH(qVSK|s-4GA^5mBlD{yD*-d2j1{_ywf`Iemeg_i>t?7tpx93V zTH?QRvxYs@Z&NKh{D<^GgT!P(1>gO1ATL*Vc3R^x%&-kd3UkESwOl)0d1`)d+Lpl- zQ_7bm)WW+vTr1Wb=sTu$w=wQYcLZWm?kIipTH871jK1;SO}!4iUAV7p)+r@?_LL_d z7nU@T-p#vDOjf%+A0@agf^>3q9J-Uot())j(3GVtIdEgu$n<=AgdW8KK6fwi45h`y zs9f8nVZP5yqD(dy*PF%;Q_k`6xm|sew9ttAL~*n5MpmP2QhWB}v}T#yvKF%$eNoC7 zt)G9oWpX*PhL^lP3_$R<>;XL&pyhR&>&C^S1RXv7RIsE`o{mg@;gpa6(wE9P`q$^@ zKtYrM>eypTH~Resg%J9btele=v)b1qngQioU7}=#?{a4iP@wD43?j}D2s)E44C?+Q zcx7-cKMN;XKhxB`RZm`mHQPf`s$)+eFKph!7{mGV2?z-~CaNi%yV#t$o|D+K7jZLA zQBhIV%Gc{#p6Rd4|3HnNEnl+}Fg2GsUc8x}&3GUL>0M^I~HJ zh_oGeK4CGE$vd3N8a~NhzJ7z`BqR>GH%N#fEwqtAz00R%N@^TzxAt%RIMPF~4H+ur z+3B!`sfxJSU{qM4b$Zb+?E-f2O>4J-g}Hy0P(X2q$%7UNZ=WvFgxirl>FMcNbE?w@ z!M+&MUR-hDaZtB-z5s*x!3)Q7(A_sgREAr$(E1AS{3e-mx8szGNjF%!FOglo5#G^l zt6*?I3r{wuUcr=vL6m9qHqdGN7rsKmCxz<$M6xPkKd&4mH+|e$vHuSO3>il>Mv}ISLci0tM5~qRp!WZLUI5QiU=1&)zHOcKE zO;^+LGRH{+&KNb-#Hnf!+6H@ZnESI1-S{ULqpasqjlSb}FlhFclo$U~S#^wIL;q2@ zL2f8_-u3pa%)%VAviWzC@IuUj8(&v(5noh0-x6PLQX&6ulhv+wj(p!Xo*23SD~txP zi@&^MTRYcdYfcl~<5XuRd}3eIpbf&Igr`uW^g@E#K9-`5Zn(Ks~7%>Wzs+G!scAKZ!Flv@JI_M>nY2;jWpLhjTYXfYRh8Uo1({ z6vXT-4zXK=zR~G1c8U3*az+MT*XDIK5qha^80|7IfUJ@u#3YFC{JI-}_ z71O~xrq=(#uA7HnSp|gIAgChLfL*;Y$*HK`80Q(3O<8ldkq&qV0-&lU1j8@%oPh=u zX!yh*bS{<($$oy0pkridZ9J{4SjbjjK|+*Hn^^&{m8jEo3c*lLjV-0TT;tmB6aM0C zo*IhuK|PVDL$}uQh|Wu*yQMos3!PQHTnID;Kbf(JK4Q~~JNMO7siE?6F=BJ;{S7bJ zVXSv#PWIkRbn=!JwYS5QA%J;Z`4W77*?xwon+!gDKSsx1sg4@^adGQeM9y1o1*w7D zI*gx4fMX=u49nRPW3)@o9RBD;5FX1EaQ!~D^Awjj43Xco)zrfS54`W;*6Ko-|6`;j zy2>;buSD3#H^Xj>oIJo#7@esaxgKceDGx>h=OeFU3BTyYcHLw)`d9rF`W62txeU?G zXXoUZR3ZgTx1ig+Y-0S5)$GSQbf;kKLy?9x7b#8sf@D4;+p8M=L8@5k?y&avY%MWJ zaH(29QRgNYU2kBSjL|Lr;Yrz7x#lG6@Gws6K50o=Nd+1+c*{ zdE?Ce|J`eG!zaWgySLTc{zRD_z44NeAmyO79ShE=t%xdrMT&P27O@tbZ2(Y zt;v8_nSWvMjJ2EU#-a{E7@b2m%gQ_cO^)M4|3U6YMV+ZoOTjP@qGj6@9s8;JjT_Ej zt=2pGMFs8;rj&yjnCqq|!qtnW!(Sc8ZXt75N zuT54DHGA`^-Qz^v>8Gah$w}!Cs?X0Ue>sQoU3fO`RxBs65XW|Lj79k3eZJUbxsA6s z1D!Y$S0PmeIWrPo;Rw^vp^e%!-m0_#d^qQ+*{mWwWdaPsF|yo2qz?%97aC zO)ga3*|DBt?*%7YIVO?oD&ynAo!3u(NgV;^EPo$-enP@=*O_ z>)E3B4cV?mv+@M#-s}vjLO-2cUFmg~V^I0a_;sdUo!^I?DmKkS#L{XcbkDSeVO~Xg z!@G-q9+zSw&~>l@R`*S>8=)6;J4~ZhWgi(CN-mxUGGA9{U=!tA;VeURL5%a?U3R`LO{iD4K`QNp-os7)xBHkPN!}C?;efpdT+ z6F}B;xgY@7xYcgO<8^j8gjO{%>X1?E2&(fLP>A!w%c6zeua7Q-dT$I<8 zeeHrJn=D!IKi;3w0|mGrzTGhVSyVPd-}ja$Ke5_h*9N5yuG{kH7CmvrrNsNx zW91T^ri!u6$Rcp5)6a6dKyWZD&&Q8AFnG?fD-{)2fw0s~7>D}+0>o42gBgGzolQCc& zc~BQjcPT@@ZDeNp8&uv%Ix_}^cbJxIYZOm-HANqO<`LTD;7q#F>RRqciU<%B2LMOn zK-<6FGptxJ+>jn=z|^qm@WNimUw?yx)63WoBhfLw8WP?as7GZW5Z`$Q*a2`-0Jt&+ zG~&tWxG%$ZUUKmJB2N|cDB>~&dERmWJD2+6VV=2p-|J3Hl$SUjn~>kL24yvt`!9lJ zaVEFszVzP}U)?gF>U?%E&mu-c{8w3hAA~U&XeQW|ItI;-?X-K zaj_DPP0=gV`!HwkY+>n?wNy+s*i~Jq;2$Rk<0gPNI*Td{x9K6mJ_M;d9q#o5u%u2i zk^wl$l%1-N5EP_l0H_bmD*)8j@%WK|Gi?VE$)XclMaTByG;9B9L$@0!)oIdME2nFR zNQz>JCODT1sg6EpEYPSQNuP*wk`$~k9i&zqpuHfu2^R_no%=Wpwf9uFzjZ`C8h)JJ zt-9Y?x$Lj53YujMDZSGTbiDHrVkLN%q0IP|e?zc=lCW~80~HX*1P~{lg390K4#Pe# z@bL3bLa3_9!}8laf}yPusaE9weF8NzR9#il74b>zk0UM^>$+PNzW%Lea-hM1vReL=I+6Z$VVtAkAnGbK9Y(D* zq5yU<|dXESYEPV}kk`F287_OsK2U+ieSviteV!UN+1B<@y& zfEMj5ML6iyH0xC7--Vo1o19sp&#wH=_SV9#fk)hN0w@GVBvs0_BhB_`sEyc(37$RO zG(-;)AiMGr0Yv@!b-|P;jRGrFm56>%v0zM(RkqY>{3+rNdB-Yr)QZ4W9N{;X3T;2d zFjn$VI|1SK)NFhcZ$L-fkIDF6C&<{2V+yO;z8rE~yfkX|rGqz7e8m7~2f8A@iqKZg zKSf-g@5-?0z;Qp1j*i}rf^%5qyiybys&t}0jJ+$QGvi5n0hK=PdfUW`5Jr(Hm6(uI z@z^s(KZBZo>Yo`9_AhTW*30e5?QQp>@HJkZWtS$Tl7Rz_;kaLtKw^*PL}M(-j}(wf zWO;IH^5}`E=lQmlFHD(D=+lwUeS*P3bpmZ|q_F=_l@rGhN|JaV?-bm+kSh?Jy->lB zi2w^5J183U$BS{huzIvs-t991KYbO-@hDJIzm*VOu>9-VX4+sqfWSx&Yt&2; zihGwW-s<2;QnjX{cGkR1-*b*uq%*-3!06Y&OYB`v{?Nrr={dZxtgU6^+9yOVQ);*O zXD(b?g!oa&z{#ytHviowLp$G<8^gxKc~oF5y5r($Q8E~kX?-1cJX@+2VJ=``NI_by z%FgnJ*0ZOKyt2|v9-o`7Y7On0TEsimI`^~JC==B7myvO!9< zJtSbxFxYSuC#I{eG_{Gh!{xsgH^6oqx)#5_GxXYoG`bZA>RBN}CO9JkiFlZvXXyi8ngauaUu)3ZeTF8F)hXePnX z<`ct_hSXSau2?<>7~o@*h3T7dh&wFt+<;7-xaMifL=;7srhAioy3#sw!#oVxUL|;f2F(? z;eW!$IqZMED!3p;xO7x%{)e#D4OthDaOkjp5P{IuB$mCX+VhzuF>U|b3}ForAx9jo z6M$$h0!YEMty{xHBW~#qNtjJ&)Es~0gCq3Qa)eRSwwkXK3gcti2yi8Q z`Agp7yB9(O7ya-NbSa5pm{j$Fse=r`r6XUzQ(~ehlIAlauIeHdApupYARth??1(^9 z-NTZ*&(iur#l^yvStu~e1vp*#uUDj@FKzm~R*sHL4?NA+we0WzST_-je!bwiDI}~} zA!E2_3NPM037?BLn(ncB`-$N_u=2x*LFD!8HNmq>3K6Hn8)HS99`g!tEgPaDK@O|5 zPV(>uaSstEz@V-idE}un13{|^h1w42UF|G!z+#tSx&<*JN1?XpmR?IgVpz~CJH+DX zT${4rJ}CAl#^+7h+>WbQzyx~|eR#f8wy%)kIcZ&QMEz3yR8f!P|G{l&TjJVnzmdMc z;k$3c59!2&<3AI&JPLVu7TD5Hg^vN2-DP|Q&9%RO&1pOjp+Rzrg8L)!2ob5R1P-^? zyggBr0oo5535|&Y<&5@Lc?9JDz5@PhJxX+sI-ldqOWo6)`DQ;Z0iw-1o-NzymTCeP z8pE?FnT|4&-LWl#Vst6A2_ZkNNV;*=Z>(N_pFXc#e?2mbjre`lsZNnMwGbnYmZ`d8 z8pI`qz$Hc7f9jc3Q8P|-tqZIwy`f^f9>NBZ|Lc*l(iKaG>QytkDw8RYshK|bz-mawqC>P9+C+a{6iIgX|eTFR(ZFftWK;B{1&2?vni^+&ojKT>}sldYLO zyMQ6r0z|B<`oci@cMv+C=xMplw}L zl=tSPGsMyPt8rX=t<0aqX8x2GZ^tpW`Ei*(_n7{>Pu0Fph>%TF*PAo#GE=6x$VWU^ zuJ$FVw;zAx{i1!%&RKnn=)f;^r|frM3wWtw&^!MWoDqvBq2S4PL#J>+)Wki8HRh zb*d`?;&T%o)5(=k+F%Ykk`Z%tZ{KmEtd3b$-R0$5BJg;IG%beZnyNm@k~QL|7b=4o z8OH-I$cgQ(wR7E`W3;5UmMSauz?5X)3B?jMbV6I0as(=FhKNqfN(&wRxi+QoImmV#bL)hHT0PNY>pH~fed8;y89z}i0GU$>FMcW+*n`S8lt$0 z1KLqw)^FzDO(57p<^G#l1kzT(?CjJxd{h>(j1^Oo(Dtgc-lQm_@;*JWEVYmqCvoI9 z5LuEA6N4ucys=$g+C90ze7!%e_|uih4uwa5nNBz2*_pKE)nYHF@!L}5yu@qN?Y>Hi z$~?0xZUg|dDm*txLtK0~gc=WS1@9gjHC|s;t$yxy5nv&NCJPf_ozA5XZ%prcQNLMb zSS;hl!8z1$9I$x9^TC{pG<%i`*+tNbi?qbvyNU8O$;S-bFi^d|XEvlCzXsU03dyPX z?TRe;mMx>@xbS-<-%paC-?AgDaz3lZ8ea!iFBct!fJOd5+1fEVU+?nGZAm2d$--!% zA{sqkaXyfhwnuoVyw~NxdVmOpsV=JiS|rB$TU4i8d@!emBm8&{L`B<=GUHE=s1}pR ze;HMT`Y6IN(#1mG`4v9zv#0=4Uu_3G$W&8W>|K^I?GYh`BJDdufULOxo?fMzJ52y29e^ zT(JGcK0{POcX@n_yC9@fGEvK!PiZj_L^y~s-{z^saduxduYN{J`=Ekq*`gaLmR(@| z%_^2~`vD*kfIKJ^@Jgat(p{0KIM$xmD*rYl{FUu{h7w-Xk1hXU=%5=0@@WfXWU8f9 z|7ub)fv@nIP{E0i$1#YP&)g=qi_5=nQHeXBW zMN3V?2{!l? zfTpl!UK=%)yT=pP72lilUHOwO_dXr?5(tk7hQKSq18YuwBVf%oKm>8ukZH*PiRg~u zta!r13J7TOF&om}gj?2m1c&?k=Tey2KHF48I;ySzwa@iQbGCIe|gq7!HI4dA7t zmn;fvmF7zunmb~%?Stt#8%57O(JkZ8+XgF5%BT*eb;^vv>hPfeUT~;S zOMuoDi4+}=;n4C*;H5`)u0gcz9c6Wj>r{P&~t$mn%< zCOm0XvwI0@O+do42Kq&uh~6Bx6(w}Y**v*gx@{F&xvx~X{Pa=*(Ngh?Mm0MNBBk0q zwPsTHQCc>`&Ss0x0u_Bgp$aS&6pweEewhqlsfb*Eb&p2zcraLJwkf?5O>^2%G(;BQ zU?^jtU9`e%Im0B#8clV2SQ#=!Uv0hvjg4yfZQkM_%8Hy)^G(?hRIt;1uTwD`J=oPRn%g!-7K(-4*_|>LP*uFE0Tz$PJp518ps6$$a;h0ZKg( zfPh5`%eR=p=S1HX6$3wq+VVi}<22qeR*zbJ9h^q3ZI`l&|}@g>J3iVav^Py zeTsmm=p#j#Ob(#!2U4w7f^uxcm?$$gFB}{>oHb#1)>>AU6d(sI#f7MlED&Vc zCqz|5NW2dlG3PMih^GY0a;*B7q?ic{@s^T_hi%b_)nuY?G=hdf5ADPd#H!)05--1=LODF0XKkl=MX*rf^ZBeOB!pwbgkN z#Y3{X{*lDKl{9AY$;NdBUO+|}+;W)si5pZij#r+^S)HP~DeY#43UL>Y*^!$Rgd)64 z_CuU!NQba|Ol(G{%G}2`W>#ZIpW=~{tFDD;oEz_Umz6RnFBmxeuH!wn!gP zL;s6uhAq)I+(0q=7wHd_**=;p(j^46rj`mv8PIuzHBc~Q4+yO|n9!@27ih`a~3<^_2gc) zUg9_br@B_c^QKu_K@q?iC+$Xfwm0#5_no4FX-PtKuo&4xN&^0hjyQAH1f;(Fz$?>! zP~s~TM28nhfbj@7)TFjV6BcXk=H%qZHOgy;nx~OlscYk%F%3ykP=qZ@9tn15VgL~7 zXj;{*qoAf=lOE)o51m7qel9e*q*3I=M&WGWkbmYgr4`=v28BPVsarWm~w##2aOboy# z!vloi16!RK!GJp$wI#uVlh`U>uBq6dT;7ktwbTN)ns1b8k8>!QwA$rpuQcTeK-tIt>wB`;t$|C9v73uO6;uPSCh5O339CUQ@ zZdu=R4scOj#rC@6Z4THjRXA&3f?*9r%=+Jt;k&h5LHE$U_Y+~FY+hoN5qU)Z^WQUy zt_UV#+iDwfMC|NH24110lEfEcXK;mB#tQe7HR`ZFFOu^RQMAC#X!*Rx`y(Fkg&s^P zzI=yrat~YfMZ((_SZ`9B^@A$4a8;O4u(yOHIgro2Hv!Z;w>eV)$ECM2TSfQ<_oyis z(F6ExP#yla^nq`pNqFpCr1JFL$Gwph6_ou}xvcZGQUP&ypUno*E;bN`eB8ZM&qB+8 zom~>p{T~n;)S%yQ{JK^@W<_#06l~!;iAai)kkP=K6oEULy55jp3c*`kED)<=x;kFw zt1xKB-_IDKY@Xj4&Qbl@3WaI|NL$X#xueqR1U*o*d?)sJl)duTzHms+hcS>mYG3e+ z{R>5l3@K7$|7Nqm6E2R9bhJj_R|KU`Z4H@UroVS}ownu@O+w%}wo48Vh=g#MgNiA- z2kQYQ+asYEJ`8co47NV;ZdZZA5zEaNm_InAC4z246pa8NGcsao7{czAk-%;)B~wMm zej6y1dsVgUhZ{9YKNN6bcf->j@B}>V;ljLU3B1KPGJ`ZSYA5Ujo}6;$@A0omI@ zAxPzF^(B)>DFa(?+vC#VL|g|BDq^lzk8M*3s)P+XE|ez% zio+41R%Mr10tdvh;a@wiV4jkLb&+UCrVk%9WwZ-(F@P52bv_J2A&$f z_g?y(aI+C(X`K&Sa>BE3L7F?#pgCxuG2#83QAPwQQx(HcrY@EMYEkBA_o)Z3_36{P zU6c%UH_5I@)=-WbgK`W-oLa7WcNZGg4;?DJ$3jsNJ*GKqK~-eoO*WBsS#&X7Vdqp3 zqkPLpS`ehd8Yib|tLid|wI{SPa30N7}H})?r|Hcfx@WK7iqtOVMkDC;9sYNuH~lJ@-#n? zfyt1_D$?aMA8s9Hj5VOnwd#Yg2WvxDjuDXnF)(XLcv;h6@<}z}K$$4i2fJqM9M~mF0&)j zc~d-#=@592jHK78nQzt$AI1Z^QBJM_~~IwGj%xA%0-1X^B6nQz99u zutY*Vz|L$VMqajGz#L zqzyc^vR?oU;fsb4g|4lXaiuO|LR3n)DMOc8)N3+%adFX_>#03`xTyLq^nYXq;$3Q! zxKt?D7uvx&cP!g({{G_12tlNc*LTRkpO6PSe_qAZn`j)?{v^3lWZ*1u0+n@PkWKtO zu6WqGN=wp!IcS`K;Eiq2%<-MZ9KxFphXwItb80L~hti8+e*lVQbQ)?CIFw3bzCHur8} zL67Lb4ZJB(z(O8RhSnm3e`eC2d6*uFRU}7GIp!~8cG!Tqm_4>Vy%FY!{yTOP zneV?+Cag1E*HKj;Wn(Mh<}m;h-nG01HNlZw*7X5ix9#pImJ83<=c9rbS?$#qMXaFZ z3^hdQ7fLFY%Ax<&d*tuhLH=O*4mM{Eq zJ*Kfsi07bct<+`i>DpGn)sP|U_%19do;8%R;pZQvnT-KG!mSR3`FM)W?fH6}B5h0u z5CX>gQP!a%UC%l)=DawDFe1tz;uc4$(DUA8=D#W+nKF-o;A7e zY`ozYhNTm4B9_&MQt?O#A`@}NMvfoMlf6jVCUxGZC=~q2`ggW(B>~)vdpV_iWtSnS zO2gg>QJK5?YN?Om2xD5<(to#~ga?%#m_fV*l!D4s5x~@=vBmfeBbK&zAt~4S8J9 z;{^`C7ICxPEi36nNMCLC!4bcrf7oUxU<3gL0# zlLHos}MY;Nza5rsY>8j=_aWdtk z`vptXyj{Kf_awQgc~`3vX~q&nmcX`;!;aylGR3u8O0K5Ftv&uoBAEodU^c2I9S%?8 zSH5+{_RtR{6V{zkG$Be*i8E;fMnngw&9fK|P&jR1%TG9AIh_|`TV{o0#;;J-MJy$^ zA!xz7y4|+x#UJ;hqLZ=-(I0x>-I1)9|Hm74KEayB(XY8NX=jjW?xRODHWeDVTjv=0 zYRJR-2x^f*zK>E2j_sHS!9||<_JvUY(e&5Zlw$vR_3qaeO+NfOB?@#+!whB% z{`MIFZ_r)Lc%Bxw?CCeSDmh5+UgG;>#L{w)J=57x4_w&KwAB4&)1Q&pwLJJd`t!H1 z5^0TIK9Qv)`#)I-fvUk7;ix_1uPP1OmZJ72}$Og z!$+UyRC0#b>{6NiYLxm_N+tCI2tbrn;Y>|Y$tjvv2U4NRo)ENOS91~LfP}uh$Jes? zFPBD+a!OW`cw|{-$8(1yhHP&Co1AIyOlItW3&v)BUH1Lg2Id>wn$zot#pf((yseSp zq%j*`8HP8+_0cbZZfb`jhagx&^RG5k{Z55F`*T4gV2CBf2@ewt9+^;V8Wl^0q~3+3 zxRS8v>i(y0#^@(8j0!GNU5^<&;$UUPrmW#T71Yssab8pE7SPd})t>i7DH=T@$l#+_K;r zFrH96A$`8jnZr5m9>&>`k{SD8A-->=Oq)slc|CCC&AIK^52uWU0>~pUXvHz)o+Et| z+5ol?2?@!e3;(NI;!Q|X+}U!7=XtfZX5h&4>?LO*T1sdy$O6V5J9rel{}Fc=6;mf6 zwo;%`6)g@`E5SI?77~(?ifm6^u2X-Lt0f4_=sG=cnG73K%;-gWBe(%iBJe9Gu64FL zw3@xh2RJR;#?{HXm_E!{iFYw%k5hug^w0?jv3zYi)7%;}AJClff)wAyM()t@E(GyP zgJGw8K`_gfY)ZwkuiN(9A#IeTPy+MJdk>f z2*vNc%7lqXSHnu(@M=Kf9lm!zv;(e^J2DQ{0_NmD#ZnOTkC=)Wo~9JqGa$4qGV?Q8sMGYM7w+B z8f;q9u~ftXTv0%)5%B3GTq%Xx`4W1Ml0oBNjtMXn!Yf|#3gugI#pjP$D&qrjri=bz zH7j9hhyFonmG=4zrYX+?$SBWOG|@S2l41{7`7ky3b+z8~UJ{BioWNGG%kn>ojRqbE z8U#q92F0;l^-S-|UWX2E5QWCmD9>At5Y%ul4I2zIrb@VG%>-RIcOa8`>}Z(`iL|hq z&$q1kP3tJlHIC{0R_tH_}wW}6$Ooj?QTU-!r#Qi;m>X}T_ zCn_uul)F=T}?m&?mz=i7? z;r%VECUSBqC|Q~?nzvO?Ajs=xLbHVz&*3mjYW*&dJHS#o<9nzs(uo7VJ^V6Y9$BMS zs1L4yfWy1hNu=i^$B_C*&}QWdTqi+lNH39?G@sA*20ohkf z4^L4pOLaY)*7Q*6N0sw%3252nd}H7wz_cvW&Z}p~6^QA&hJz5i0H&?{uFI@C^wQh@kAwU-{4AywSaH>xjz#mH_q?e)oFjc0+(kM+#8P z9#iTVR+@!8?jsLq#n_?{$aZ#@2I3Y37+eYdzi zW~<~#3G7Pne9;LB_F&^K=)ZRlnx0z$i~~j>G*rOQ38LH?k*A z!RiK-D}m%fHHPSU@?l>-5Q_`P0)JQ=fg)SgZ(+n3t`wJ%KYp?1P?P1*eycacd>k&3EuCykksbF2u?&_1c! zB^q`n$pK^BC{_FO7Q0Aae2}ngYRH2U7Q{yh9^gYkSuTeg@W-4Jh>sN+)gY)4D9Gj= z9WdifM-%(*go~9L$@;0vU!#hqF3{fmfo1$oc&91g@u^Ax%cz<9j;-b7%Np!$IbEM( zC8cX^2Ng<<$gB4t8Eop*Bwxn{X7=tzZHhRjKQl3A>_zvO0ur^I_@d~&YgVCT`8<~q z;3732=L?91d8bl?c6gw)Ra${L3vmiRLq2DeT!uT21bqdZn;1!-ke$Der(lO`SFLwK zi^>$!wPshPa<|Q;wpafSkPPwl@ilyXhgz<56?~B-7!O!wNqo;OpAovg zGF;7mowI+IA7oPF$MwZa8t=5elUbs%6|rI}n_FlzN*&_wg7<>Z%cUy-r2h`7*}AUI8T~onQ0ohB8rM^lfJCJHh84&jVfIJ6ItvHI-;#c z%1N)!CN{|#-oRYmt4+Gp)?KW~$^80FT2R%9t3`ZN8Y1*Q`EOeBea|g1JVM~M02<3g z(D6XWRCaej2i*H2dcd_F96%J93j&D8lN+^2p2xBV=>UwD**@DTO{z)0?#H=;LaXX& z^23cMrg=k_VEkawis`JJSn6ki`Zk_D$tZTYFFsX(%l)@*<@f67X-Tun;f}yl!7!7I zppk$oG*`_|+<-T6Bj^lI%kIM@F{8LLWj%nh6d~bI2tvD?^_eMH!jo&V$~}qtL7Uqp zvl8i_AFece81?DQ0dT3y;=p$7@A{ym8lPtDyUP(Su6fcV%oNc9FKK#jEshs3GK=me4C2f&`)v#)=HJtxy_$CE#{ zVf*zFFk3+I`5h;0*OAO)FQe@bLb(Uajqx{m@D`cm6=@&oNxJWx%H@tAz#Vl>^sKo; z&CKlaSIxyR-x9)3!!tRn)E<&S)ow&@J#u5nQXJP8Aj}B2D|6PLe_ki0%GYna8TU5UezehBK0q8l_Nx&e#hdKIA|*%(PrWt> zAB?s-=SBGK8+);bdkcS3V@Rs-F3xyL5#D3^fV#p${kOlUiaZ4omam%A{graipl67+ zHWt;ai;_qyR`CKzN0vex(k@+Z)O23>!fiA|;PTS5aC*P^wdST z2&J}>!9vrn{b(8Lz0L_+f7pzTV^>SBWd;Cm1RTpNHQa7)f~DJMAQntQd2s zCH z+VQ15g)Qwl-*4kq+8VJe1D*4n3jIQS^{~w%UDmx5UF@iUa{wCx>chuiBmxKp-B<*? zp%kY#p7dPcz!vm;*8*bn>*8Wn>wc#_Gr^5Yt9H|pjj`0kGc!r(GS=5Kr*M1I?b>y< z`uB*m+f4rqqcwGKX2b#C%=$iF^g;{BW!|5V*k=uoCT;rs8SmICn56Oy<6#=n8;?6hw@XeddD!zj%QOdSC+He75 zgJEc+zv_z}GlR!_Vlnf`D6yI^&nW1lp2>dGSNP!{5la6!N61Z%c62#xTl0C_Z!87}?IHcbV2hAnz7 zaLK9iJ-`P*a(+r3`H8MYYfCBOnh7*1CJO-dj|G`uyu%wP6bBPV#V$)z0F=Uf9kOm)4I ziS$pmnNYmxo-&E3JR;2PZ z7QaHNN`#mwpc9hZhsvMnxt{V<3yaS>x{LZ#BY=4?bAazizk74i6iS?rM|Co7s8mV6 ze*LQX&|M(e>b`D}oHmM~_kHHgIVN#DlfI64c5nRG+V8&c4_kA6BGpPWnIG9T=R2DI zuxvXqSF+gv@NSGDaIB}i#8{xgSt?Ex(gq}g7|8Cq_aemKn_6~|__7~#fzpEK!Wizb zf!MWl>spDW?sCb)1(IJ7J$Pe)aln)l@m98y$3n{|(Y$R!7_O{;j%pG|khY#e-iv~G zsA@tS%;n)-SBAOK1R!hLWY=(Xt~fb{D49~mTSF5$eA;Dz=kkM@E6=ls9b>g-vwc6N ziAC#ho4Z46LX zxHlw)nq+ix#9Ih4ol&J8Fmj>&a^AtPw`1ypl(S;W?`ClW9-~Ume&?&Y-2lb{v{f8r z>CfUikMa5t5hI@DcQiG3=>VXDu?-fNfxz2|crD-mbg2~d`!}6$gW5l)%e%Z3S@sy9 z-bjn~>nZM(CT@I#A+D|+Q~Jq1jd527i<{f;{2ur7HurSq7xwid{0~$DnNztt=+?u$ zp9hVz3oYAf#q+}xIMiTuusf-q>vM(e!vrC1fLjZ=>?8rXM#b%T9bX+pkWVW5a_ugu z?xr;u%9J+62>lM3j;%~Tr)X9Yvz}iWSP@h!mZBXsCII*%7xgzefY^*a7^QhIK(3J+ zSd=Z7lo^h z`@R0^hwS5viR6okcgI>TE2k{oc<%Ovp6x~v%6u!GCUF{)X<=LzXcU1<6c{Jjy3DU~ z)&I6ff;&S1Z9Kcn6YbUHlNy41L&ceQU!gvoPslaj!4`;xy} z_VlSBLe_UATprKV>Tio*?FPu%r;<*W7nSJg{4FATd=Qb-rk|s>UAdCvQi~NPZW`uI z4+GV9O?2PN*6mJU_jrNAfzRw5qFa2Me2h>kt$``G0{{vwIg+v~2VPvRXxP9|jY9|7- zRQBXP_pOn*?!DKVg=0Ez`{4Q)R*WVxe$h3fEiNJ|R`RXsGkK8(+^Xu??!AC;SBVoS zE3GH4kk`XnlZ$A`bSDmVcz7qzKN_-_ow_|zlSSdn7RSi zzy*dz|#V<)!aHUr`1S!z}rF?DZ3k&4~_p*s94(Dczq4={7uEoVOWT( z*anG?fL^{vPKDfz{iHK10b1{(7Mzg&-foeec35lS7kR8>W5a~v6n^ZJzD6`f+e$(mM-9Gub9`So>ae`Fo~uqUvU_Gj4jy&Oo=T(r>$t>DJ1EFWB(> zmHI@^)UdRpf*!X;*kZNwX4YlNBi>JL%fsKRYijs(!>YY;(+14@owp{5!Dd3C8*^yz zQGyTjqm-Y|{<$Eruh022W6dRa`8NdM&Wkpn3!|OycHB&Ax`-d-Cl(zHZ-`Ro1rqH~vTm9%xhK3_*ra@M7wfjPl2-)*pAj zR+gMo;b_&+!GdN`O5|uF0Kq*oL_SOPBWU$QPzQAF&Y(>KFI>Dy%)cLwXF= z_DhtRgSia=5ZgQ`bgwmenao=8*njwRjVaF{uAjgnyl};O9b?+jXYqXIQ#p=wPw6%pvL>cO9)UJhceupl}DFY4@#;m z?3cgjw6xfWWugdct&aRB+rvD0(AQoLIiriFjC;Ezx4lU| zd?DWe&|^0j0tH`c#m4TY;@A4=ho12y_Ri1Gi+w%;77m0WlQFn)pzCQ`tO@c4+Y1G9 zRB$#e|B}fLs&VI36uEKWdxI{JYG=gg%OpA<7NUlE$2r-P^QZU=P>FRVAn-IW*@MIF zM!)H`BKp7xh{MMpn(!O5j%mx5;D%3~+c0hI$$3G4Bf;L)6_DitV{XXiz$H<)&-Bg& zDjRT}(ArI*4xOi@8BCaK1^B(G0idn>!7KNJrKOe-`FN0)|uKSkQkytPIqu96q`MLNtx1ef0%l$NKZ7wa1a`FVx#k?mE|9rxL z0FbP02A8oPh+{;-SM{}L7-4Aw5ODf{TA?T7B>z|DmR*&8m*6iz`eg9wTAG?@?wPLqmA1>BWn=o)pUw`$j&DQz{xGP)M@L^@ zVL^6K7wZ|1-H`kXJ;xb)imuE6Sn{XCiS3!{=GSJ^;9Idi-^s1KV1lfX&nr?s4Y{@b zS|U;`+S}VZz0waBPm6%DuoND*EbmUu0bUdaq?DaFn{2;>wlbLbs$_~T%p^iAdMHcr z&v-Fq<%CRS81mPUYbkvnSsjVGl$j_vkdUm^cw0VZhZ9Ea0!ME3^5Sge_wS}o%S(92 z*4wfDS12C&qTsxCdFIpcfAAAhr&z?IPq}0-m z4lU&|A@b%pD7)gG#5~-p-Dz(e!y~!SL3kY$QCpMFekcx0u2D{YTX^EvanxOI6oUiu z=FDHn52`UE5?;PPxqN$d8544Ou&LU$(&rWnGvv3vKjq6S3%>Qh-fXRR{jnBg5Xg?W z4ZR!*fL)!g)*o&2938uEc>fkeNM5a8TzN4GeoV)meQ<^;87)U_(dU?4!ZBnWLuyX% zOrlDpRq#a|e#@f+xq`D*&EG8-d0IpQpW9lPXW?b`UkS~m%aM;ADRXXViPrbKicw#` zWv=1nLM*LISHFB7`_G_m=XONgA^R!6cycFkL5!`2>IWdJ@${fPNa!;sU(*RjEb<#< zW&`JH_cBlq6BMJD`U_tlo9*s?EMf7c-h9r5!0dxtEEm#P!U_nqez~qEcFf$C09!gn zE|KDfM?e+5=`H%C($5@xl}g>r%68pB96xX0v~$;xp)}T~%gUpO7{fEYiiA4HvAyOn z6S-r8N;|qlx530EcJ_JdCt95XBfPqAZDg&=xx$^m=6<>mXx;KK&*X|Qu^HR@Xv6#A z)rFmAxM;HAnXo3f={v)l+|dK4Pp}V{2)*pG3y^sc78C+ANtSWgcum1EGPN84gIKjB zG$68X;2Vd2H&q|GZ+M?MBqvTCY|g$-0(<&9?Tb97uDYo{{_1h}1|^H%k<_3)KCR{eq52hEgt!NB zMIs*~0S7<$E_3|@ia_wT>PGN;Q0ikXAogr*mACvR7yzP`n7A>c;klX1V1-9wz-P^TX_fM zENEn>+Y!R~lHk93+K{V81i}J?wT&_-NG1l~-j(e+l`DA}Z=L@lM&PZzZYoEo@VvlcJR z!bQEJ+!&=_Fms)b81GCJ71xJ3`? zSF#()B|wf(+mY|{97hYC*`g!!v)jOGFWkb+w5(LpK~o35ra&wGMZxil94#DP&*jeU z-AFO>^V{eXhi%egJ-6EvqzvwUn{nx+^yh?Nzp?1odSnhKtV}YY)7-CaPN$S*5wg45 zdP6LOoxeXAudOUW@9roEmsY5b(Uws(c)xRSk(+JnY`)ySkOY(;_xgq9*&?VbrDZN;u*W-AS$_tZ;wn8>d*s|3?h)Hn!}1b)u38hS)zNt zrXx&h!>CIXk5K3=99L&~Ubq`a>K3)jQ_(wDa3C;e7R#6JqPyQ=oV)%g_q9@OxK}Aj z!|4+n!l{C624dgh(1a-D6YTq4UY0c)dxZNQ?Av_fJ+l~ zT(_SD^ZbAZ)OPV&_iV#Vx?o#N3*Y_S3|B`r+!W!<3TjCAY7&9#B~_afYtr}zpU+fWjkU#yN6?{`RUZ&!KAg-reyTD z1MM{R9gXUjs&AR?1!gsMS59z9t5&Iyj_1*}!u*nm#*Ka-M(wIz7*a~qifbA`OOJpW zMy?H5l|<`n&FNB1$ZXX`i>_vzHhfLqSX#f_)au}*94K(!SLBW}sSvJd11Ke!NKKe_aTS&Tz;&*S$xnI@lwkY}lY4maQ~=UQu6OdB89{ux$Fj}sxcab5F{3MIhuykc z9&=4S+=2FcdKmT0@re>#dP;`Ynd*d6o+^<^{5_niWvRmMORp;!XX(j8>Z&*({mX_C zoTBy3oBwRz&5+z^o8>zk*9kd@9yOjf8RssY>M!F9^o)a@7^(bZ>!9xG))Bp*S+P%3 z1TVMKmOk?N>3Oz@B@oUZy#1>wB4|bf_`q?pYs+~Lz7tHaez6Y!;j_Bqi)~w~^QZbg z!D+>5+=%oJ<73;Df#8{T?7EaFi3r`F^j~3Xccb^4Qd2_UEM)7%8OKz{6}U*3d#wbf zy6_3d%eEKERV&9Ek|FgD`+vv2`b5Pm_Id}4RtG0`Abi>fYeQ*=1Z+d}nf+ji!Owd% z!nJ4FBJM$}*RDQt`uK38$CKCn!&S$N5Yn@uhs`ohaZ_f~{92<#TI}@j<&TK;vxhd{ zH-PO6g$?ULQ2+XK6p>Db~Kcx@U^mAFalJ5Udt8J>-ot^_(g5d`;x! zzrXr!JGRN%OfQ#nT(!7t>wnr($$d&$hiI8xWxISO@Bi}O^pvu{C%U7Oeu1#j&_aj| z++1ex2_9r{i7Px# diff --git a/flyweight/etc/flyweight.ucls b/flyweight/etc/flyweight.ucls deleted file mode 100644 index 633e385b8..000000000 --- a/flyweight/etc/flyweight.ucls +++ /dev/null @@ -1,135 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/flyweight/etc/flyweight.urm.puml b/flyweight/etc/flyweight.urm.puml deleted file mode 100644 index 648c223af..000000000 --- a/flyweight/etc/flyweight.urm.puml +++ /dev/null @@ -1,66 +0,0 @@ -@startuml -package com.iluwatar.flyweight { - class AlchemistShop { - - LOGGER : Logger {static} - - bottomShelf : List - - topShelf : List - + AlchemistShop() - + enumerate() - - fillShelves() - + getBottomShelf() : List - + getTopShelf() : List - } - class App { - + App() - + main(args : String[]) {static} - } - class HealingPotion { - - LOGGER : Logger {static} - + HealingPotion() - + drink() - } - class HolyWaterPotion { - - LOGGER : Logger {static} - + HolyWaterPotion() - + drink() - } - class InvisibilityPotion { - - LOGGER : Logger {static} - + InvisibilityPotion() - + drink() - } - class PoisonPotion { - - LOGGER : Logger {static} - + PoisonPotion() - + drink() - } - interface Potion { - + drink() {abstract} - } - class PotionFactory { - - potions : Map - + PotionFactory() - ~ createPotion(type : PotionType) : Potion - } - enum PotionType { - + HEALING {static} - + HOLY_WATER {static} - + INVISIBILITY {static} - + POISON {static} - + STRENGTH {static} - + valueOf(name : String) : PotionType {static} - + values() : PotionType[] {static} - } - class StrengthPotion { - - LOGGER : Logger {static} - + StrengthPotion() - + drink() - } -} -AlchemistShop --> "-topShelf" Potion -HealingPotion ..|> Potion -HolyWaterPotion ..|> Potion -InvisibilityPotion ..|> Potion -PoisonPotion ..|> Potion -StrengthPotion ..|> Potion -@enduml \ No newline at end of file diff --git a/flyweight/etc/flyweight_1.png b/flyweight/etc/flyweight_1.png deleted file mode 100644 index f30225aa0413f756df9dde93f191b8b79f614938..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 63947 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%0AN4z9t8| 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