From e57d35f5eca570fbd4ac63e890db5e9144420309 Mon Sep 17 00:00:00 2001 From: yanglbme Date: Tue, 1 Jan 2019 00:07:15 +0800 Subject: [PATCH] docs: add hystrix-request-cache - Update offer page - Add hystrix-request-cache.md --- README.md | 3 +- docs/high-availability/hystrix-process.md | 12 +-- .../hystrix-request-cache.md | 75 ++++++++++++++++++ .../img/hystrix-request-cache.png | Bin 0 -> 28409 bytes img/hystrix-request-cache.png | Bin 0 -> 28409 bytes offer.md | 2 +- 6 files changed, 84 insertions(+), 8 deletions(-) create mode 100644 docs/high-availability/hystrix-request-cache.md create mode 100644 docs/high-availability/img/hystrix-request-cache.png create mode 100644 img/hystrix-request-cache.png diff --git a/README.md b/README.md index c9cdf48..87de3b8 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ 本系列知识出自中华石杉,我对这部分知识做了一个系统的整理,方便学习查阅。By the way,微信公众号**石杉的架构笔记**(id:shishan100)有其它很多架构知识,墙裂推荐~ -一点小建议:学习本系列知识之前,如果你完全没接触过 `MQ`、`ES`、`Redis`、`Dubbo`、`Hystrix` 等,那么我建议你可以先在网上搜一下每一块知识的快速入门,跟着入门 Demo 玩一下,然后再开始每一块知识的学习,这样效果更好噢~ +一点小建议:学习本系列知识之前,如果你完全没接触过 `MQ`、`ES`、`Redis`、`Dubbo`、`Hystrix` 等,那么我建议你可以先在网上搜一下每一块知识的快速入门,跟着入门 Demo [玩](https://doocs.github.io/advanced-java/#/offer)一下,然后再开始每一块知识的学习,这样效果更好噢~ ## 高并发架构 @@ -86,6 +86,7 @@ - [Hystrix 信号量机制实现资源隔离](/docs/high-availability/hystrix-semphore-isolation.md) - [Hystrix 隔离策略细粒度控制](/docs/high-availability/hystrix-execution-isolation.md) - [深入 Hystrix 执行时内部原理](/docs/high-availability/hystrix-process.md) +- [基于 request cache 请求缓存技术优化批量商品数据查询接口](/docs/high-availability/hystrix-request-cache.md) ### 高可用系统 - 如何设计一个高可用系统? diff --git a/docs/high-availability/hystrix-process.md b/docs/high-availability/hystrix-process.md index d877607..7f7e33c 100644 --- a/docs/high-availability/hystrix-process.md +++ b/docs/high-availability/hystrix-process.md @@ -72,7 +72,7 @@ final Future delegate = toObservable().toBlocking().toFuture(); 如果这个 command 开启了请求缓存 Request Cache,而且这个调用的结果在缓存中存在,那么直接从缓存中返回结果。否则,继续往后的步骤。 ### 步骤四:检查是否开启了断路器 -检查这个 command 对应的依赖服务是否开启了断路器。如果短路器被打开了,那么 Hystrix 就不会执行这个 command,而是直接去执行 fallback 降级机制,返回降级结果。 +检查这个 command 对应的依赖服务是否开启了断路器。如果断路器被打开了,那么 Hystrix 就不会执行这个 command,而是直接去执行 fallback 降级机制,返回降级结果。 ### 步骤五:检查线程池/队列/信号量是否已满 如果这个 command 线程池和队列已满,或者 semaphore 信号量已满,那么也不会执行 command,而是直接去调用 fallback 降级机制,同时发送 reject 信息给断路器统计。 @@ -115,16 +115,16 @@ observable.subscribe(new Observer() { }); ``` -如果 HystrixCommand.run() 或者 HystrixObservableCommand.construct() 的执行时间超过了 timeout 时长的话,那么 command 所在的线程会抛出一个 TimeoutException,这时会执行 fallback 降级机制,不会去管 run() 或 construct() 返回的值了。另一种情况,如果 command 执行出错抛出了其它异常,那么也会走 fallback 降级。这两种情况下,Hystrix 都会发送异常事件给断路器统计。 +如果是采用线程池方式,并且 HystrixCommand.run() 或者 HystrixObservableCommand.construct() 的执行时间超过了 timeout 时长的话,那么 command 所在的线程会抛出一个 TimeoutException,这时会执行 fallback 降级机制,不会去管 run() 或 construct() 返回的值了。另一种情况,如果 command 执行出错抛出了其它异常,那么也会走 fallback 降级。这两种情况下,Hystrix 都会发送异常事件给断路器统计。 **注意**,我们是不可能终止掉一个调用严重延迟的依赖服务的线程的,只能说给你抛出来一个 TimeoutException。 -如果没有 timeout,也正常执行的话,那么调用线程就会拿到一些调用依赖服务获取到的结果,然后 Hystrix 也会做一些 logging 记录和 metric 统计。 +如果没有 timeout,也正常执行的话,那么调用线程就会拿到一些调用依赖服务获取到的结果,然后 Hystrix 也会做一些 logging 记录和 metric 度量统计。 ![hystrix-process](/img/hystrix-process.png) ### 步骤七:断路健康检查 -Hystrix 会把每一个依赖服务的调用成功、失败、Reject、Timeout 等事件发送给 circuit breaker 断路器。断路器就会对这些事件的次数进行统计,根据异常事件发生的比例来决定是否要进行断路(熔断)。如果打开了断路器,那么在一段时间内,会直接断路,返回降级结果。 +Hystrix 会把每一个依赖服务的调用成功、失败、Reject、Timeout 等事件发送给 circuit breaker 断路器。断路器就会对这些事件的次数进行统计,根据异常事件发生的比例来决定是否要进行断路(熔断)。如果打开了断路器,那么在接下来一段时间内,会直接断路,返回降级结果。 如果在之后,断路器尝试执行 command,调用没有出错,返回了正常结果,那么 Hystrix 就会把断路器关闭。 @@ -132,13 +132,13 @@ Hystrix 会把每一个依赖服务的调用成功、失败、Reject、Timeout 在以下几种情况中,Hystrix 会调用 fallback 降级机制。 - 断路器处于打开状态; -- 线程池/对列/semaphore满了; +- 线程池/队列/semaphore满了; - command 执行超时; - run() 或者 construct() 抛出异常。 一般在降级机制中,都建议给出一些默认的返回值,比如静态的一些代码逻辑,或者从内存中的缓存中提取一些数据,在这里尽量不要再进行网络请求了。 -即使在降级中,一定要进行网络调用的话,也应该将那个调用放在一个 HystrixCommand 中进行隔离。 +在降级中,如果一定要进行网络调用的话,也应该将那个调用放在一个 HystrixCommand 中进行隔离。 - HystrixCommand 中,实现 getFallback() 方法,可以提供降级机制。 - HystrixObservableCommand 中,实现 resumeWithFallback() 方法,返回一个 Observable 对象,可以提供降级结果。 diff --git a/docs/high-availability/hystrix-request-cache.md b/docs/high-availability/hystrix-request-cache.md new file mode 100644 index 0000000..089473b --- /dev/null +++ b/docs/high-availability/hystrix-request-cache.md @@ -0,0 +1,75 @@ +## 基于 request cache 请求缓存技术优化批量商品数据查询接口 +Hystrix command 执行时 8 大步骤第三步,就是检查 Request cache 是否有缓存。 + +首先,有一个概念,叫做 Request Context 请求上下文,一般来说,在一个 web 应用中,如果我们用到了 Hystrix,我们会在一个 filter 里面,对每一个请求都施加一个请求上下文。就是说,每一次请求,就是一次请求上下文。然后在这次请求上下文中,我们会去执行 N 多代码,调用 N 多依赖服务,有的依赖服务可能还会调用好几次。 + +在一次请求上下文中,如果有多个 command,参数都是一样的,调用的接口也是一样的,其实结果可以认为也是一样的。那么这个时候,我们可以让第一个 command 执行返回的结果缓存在内存中,然后这个请求上下文后续的其它对这个依赖的调用全部从内存中取出缓存结果就可以了。 + +这样的话,好处在于不用在一次请求上下文中反复多次执行一样的 command,**避免重复执行网络请求,提升整个请求的性能**。 + +举个栗子。比如说我们在一次请求上下文中,请求获取 productId 为 1 的数据,第一次缓存中没有,那么会从商品服务中获取数据,返回最新数据结果,同时将数据缓存在内存中。后续同一次请求上下文中,如果还有获取 productId 为 1 的请求,直接从缓存中取就好了。 + +![hystrix-request-cache](/img/hystrix-request-cache.png) + +HystrixCommand 和 HystrixObservableCommand 都可以指定一个缓存 key,然后 Hystrix 会自动进行缓存,接着在同一个 request context 内,再次访问的话,就会直接取用缓存。 + +下面,我们结合一个具体的**业务场景**,来看一下如何使用 request cache 请求缓存技术。 + +现在,假设我们要做一个批量查询商品数据的接口,在这个里面,我们是 HystrixObservableCommand 一次性批量查询多个商品 id 的数据。但是这里有个问题,如果说 Nginx 在本地缓存失效了,重新获取一批缓存,传递过来的 productIds 都没有进行去重,比如`productIds=1,1,1,2,2`,那么可能说,商品 id 出现了重复,如果按照我们之前的业务逻辑,可能就会重复对 productId=1 的商品查询三次,productId=2 的商品查询两次。 + +我们对批量查询商品数据的接口,可以用 request cache 做一个优化,就是说一次请求,就是一次request context,对相同的商品查询只执行一次,其余的都走 request cache。 + +### 实现 Hystrix 请求上下文过滤器,并注册到 Application。 +定义 HystrixRequestContextFilter 类,实现 Filter 接口。 + +```java +/** + * Hystrix 请求上下文过滤器 + */ +public class HystrixRequestContextFilter implements Filter { + + @Override + public void init(FilterConfig filterConfig) throws ServletException { + + } + + @Override + public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) { + HystrixRequestContext context = HystrixRequestContext.initializeContext(); + try { + filterChain.doFilter(servletRequest, servletResponse); + } catch (IOException | ServletException e) { + e.printStackTrace(); + } finally { + context.shutdown(); + } + } + + @Override + public void destroy() { + + } +} +``` + +然后将该对象注册到 Application 中。 + +```java +@SpringBootApplication +public class EshopApplication { + + public static void main(String[] args) { + SpringApplication.run(EshopApplication.class, args); + } + + @Bean + public FilterRegistrationBean filterRegistrationBean() { + FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new HystrixRequestContextFilter()); + filterRegistrationBean.addUrlPatterns("/*"); + return filterRegistrationBean; + } +} +``` + +新年快乐...待补充...... + diff --git a/docs/high-availability/img/hystrix-request-cache.png b/docs/high-availability/img/hystrix-request-cache.png new file mode 100644 index 0000000000000000000000000000000000000000..a75e6cd819c228ca1424270dfae673eaf701bfa1 GIT binary patch literal 28409 zcmd>mhdb4O`1j`+8HHqKW+r=OWLAgFM93Z)*?W&D*`n-&C?b1i?}TuWB*{*w%#yvH z`+R@D=enN%;rU*5)m1t^pZB=$*Sf#acW&PzBV`~(5QI!s1+9Z1s5kIagZK>miK~<6 z1pGqcref%cAZMv?KT$|V7CnMoLR8V$b^Wqdr~OTI#}0`$hdm!4+SiRfV@+=8#G;qX zlHHW}jK%MXuNd3rW7G|grv^Svd1{Wnrs6VE#pO7OHVL%QI(-N%1_v_5Tlkyuv~O*2ns1i75<*ON~Xvg zI)L03+1g0te1W{wFVb1;$d(H%_scz|2`9e&_!9AcR9u|+<;$1r6FG|*#S{{=vrjH% z<=sZ_FD38GwEspLa-ur0Na(+RUZ$ywInh5un#w~=^OT>m`mTPp6k4p;c@;IsN&NWP zStad^Urq8-TwM7Sl+*L1{CdT@*GCI9-A|8q^Bx`_6dKnH{{CDP#&Ff)rCJK_=AS<( z;Ez;zLt6vcpjm@{!0W&Lh&GXnth!AtxiyB$!$|RjF+1h)3v+J z<4HJwd$PSUzVI&mZ22H>sIR!@WQ4J>%5-8#96aqr^qiMtjR8Md6c0m(74q@5Dpkwh zem=YLa%RpVC#no@)82B^=JU+VPdRSIH%PczEnU|y+1ABK^mL(l8!r*p^Qvkmvn6se z<82xoA8dvQJXtEJ6@w6AF$Z>iCpTH_q$1d zHjyKYtt~BPQL(Y=f4nBuCIzU%39p|=F7fl1s_N_OGl}^+eywEFFEa{fyBU$(3{NpL zGedvPi%0(S$Wz?u>v^QTDFs!ki@1`>+5F3BS`O8>I`<>i$`6u?r zNksXtUti+j;OMQZbsYbGygNI*+i)|IoK0GKKVl7o!PvoReO1x!JSp*Y&F5%;IY-KK zN#oI>d0WuMk&%&b`4IQkHqS^d2?YV7qp$=^AA)GYd=k`|fU2p1DfW#Z>HVUZIJA zrt*cd`kBWS6+#8KU&K&dzWq`wM;>>fT+$!0(9=hSpQXbSwoSu*UYSwtJ9VMfA2XN5 z#Hc7KDJ5Gf7J3sF#_pN7&L5-+n!a1BpUrlhtaF`x*j1NwSu6Kmg_-}!l&F}P>sMMz z%12`*_wufXosn#@mB<`I$fmAjg9-eWl7d-`+m)^y zI19&=oKZ=no;zwgBi7tTft>Ha)<*rzc6y^iG&h;APN$JB{OVil{T?g94{d()BS1f;b@}tl>-ZWu^30RFNHGlw)qr0~?L2-lrj2D7%lPhGH#n=u)_aQ9Xx2himoje}AYR9c>Ml1qTHcAoRcB zk|f7S{xs^-EiulSH4<9;`uiRBc+w(hGF+Y8m!nc3# z?>*|ph>G{`TO9S^>uEffhm?$rjIs}9|9!mqwb^%rY;t#PGLlxn=*J|>E04Q+SD!}3 z9Gy>$s>3h52bc3?E{vkzrg(4g@6JvS?!wkO=$+ZrH!v{BH(WISm!+nnrbhZ{bTrm0 zuEcCSRlxXTleZ)K)~&ADS=RQ`6B#el-bT;mxs{bzIx{~Mh3qDR%>8B(;US#JSXS68ooA{~7a#`&EFut*~<{+@`Ug9C5d=}F)@7TJb7 z8`_1RQ;`pckL+$6A`zlnjL2)r*&wP~hcVvPRDT1w2b)WouAgA#qc93&q@+6W%rdrH zUd=A4#J9PucUC9hAPRgEDK7pF*Ee0<{sO%161id|IrHPRG&-O4Dcm+J{bbgI9n~w* zA9T+)YYkXrU|RK&`BGuNakA?Ri zoWF89yy!#LbnEU+ESw0d=_YT#jn>`G+0zp`Xo0Qs{^Ox2d|}^plc0lNZ=P|IsHX`k z9qz30Z9i4wVbas15}+MmV<#1~7*~icyd3Ig`%qDv8kV(;KjWwNbhB?S9N$;=Ms80T zu128J*M3P%^HXN2eRv;DCF1`5Jv(cC(7uP)>emtGbYww#0KU~G)PYw}I|vI}xVgA2 zPfv~|o!aFCnb`0$)w%Iy-okX~Vjt_k|dOlu&AtSl2ev(k+l zcT_TUe-JL6qa@wb}0W#HuB7#?g!54a*<$r~7-UsC>9gLPAoM?J_=izOyfEC|fS} z>({SLl5@d_JM+7T`oHI9aiciUn$eGN+FB{NN?!g||Ay;L5R-<~JGN#$o$Q8qq-g@>}rPZgoJSKI*=yR3%Jii?&QOBjy09RxX}#@LVA4iBxd-2)n{F5n#R^qCM5h7 zvY(&S_wV1=|7~rp;LRyyyWDk;p8LVp*4AcF=X4RdBq2dN`bMkw^mz94)vW{;>7CfP zxcAVTL@eJC5D*b9oE&aM7T6=9BYC$LpwSPEobAVApKz*5g`CK?w6q|IW~M~q@B!28EhH!?qBs9E?#vg5oSqPqk#)l{*o0Pm|7h<|V_mDwz*LQ1?6o4paqpJB z@39Sjf7qLRH{z?TdcViZth=?JOnDBo@$!;ZRaF_ZKa{I;o{WHdgOzJnFKpna9hgS{ zW2bC|Ufen~Xo&uIHI(boqerKv%|2^nIgd;AONx2aWW~m9m&yUmc6c|p5F-GZb+5FC z{Vjot1JDwmvNej7Da%E*n!kpBz{Jd?H6TUn#kG_T`J$qt^^MWdQU8sZ*7cCc@bJd= z)167z{pictb8oT(VwQ(ljB?^TKm%nF|h4$yG1g3zrczu5#orX+xDSHz!hHfWv3dp(5b(|v92VIW} z>?i;F{USkhplHvptOV8!w%Mzys?y5`NdeeQ+Blv5R_kcB(DRhb$JE^1{H^OOi*db6 zikE2!UdJ0QpTDAZ_E|$f|2o3)wy-?NCG#@PwtqKDnab>W*&@m+G(Na0N}o zBj;JnqodO)llmC?)qQ9MmvZ9^Uv{ca2X9*VNN{p-1{CI!p39`@P=bVTIG9ut=5wo?AUm%F1Wp5tjw)YXi0&yncTs z0nC_w)iE`&9XJWTa13knx8(G6VkPbKR8(QmLhr+Stvkaq8#Ma}T=V)FnoMm)vjY(2 zt@9-9gW+reo#vY3b1ce)0-FK>II5A1t1$`+?b$>As?V{j2Ol#(VAWTB4ws{&qfe82 zYH5^;Nb?xpFCgp1ci)h&w;e|GYIpkpzg1aW{PzfmH{+%Dnk`BX&J@^jy zsV9s=K591PbUJu7hKBEBdq~LYbn|Y6Wotu&l+(AjB-pHlbSR-ta4_JEcQd-SJfe`_ zL*PTbwIr{UHgB{s`c8Y(4dp0=q~-Ex>gve_Q7N2BINzyy{>l9+1AYoA{7+lRx|d6v z8rm`4zo@{TOI}rgo&CEHGzNyA^D~S?uWr~bQA80#a|)>%nuJR!YaSaD^KPZ0J^t-m zaU2xPlyJT=oGo`9z4`Yq9_9Se{+8WDb$+w5^>ru?X)B(#?C)eYTEcK(%C_d>Sg~Fg zlw8vvy9)<~SqdR6P31)R|2<;0MH=6y!p3su#VlbMT~yD4&!TIu?WYu=mFzO&c0shMQ` z&O`ggx8M}h$Pg!CeYnSlV~lakGPJa@`5i0MfN%WUXn|coE2Yl~-np2{Z>Y2So@;#g zM&fHyL++adpnH%~GcYjls(wW$29(oDr(Mm8vWqRS_k_CT!G5DPVB6*E8&0&6lI7OYpp@@A(>3U{lP=AJ$KR;5 zWFOsP@h8|?9`1#%)xYy%!u-&RR)WBDJ0B%{Q= zzrSBgN=*FI`{3U%ZQ;~F9y+6Xm$kI)>=`=c9#i@_vkUlplpPn?57b8Aw$T0Jef;d% zGb7s?Y3=cCBgGTR4W~Nz1aJHfv={50qwKraulcUW0mH&UazBt!rYDDA$V8r{6P)WL zVnxIAKf_>tnN^MgL=Jua`QuyrySwdMc`Mg?5?B-DgAZPsw?71gPlV$#uo-lXgA;hQ zI1)~+2}EHC&jN_awKrNhEU_Nvv);XXXLOAz{?Sm!58mEClA(I!kygI|{!*m;yGnK8 zf?$7j3tmUzJC^T@i(?OfkNPaPyAs`T2!DKhbOcz1=;&ajLOMW{JQ9DS{Zt-@p@4AQ zhmySB@eN24PA=(+q__n*?d({d5pa-`lS9{*qrU^7JoIeNci{vLG#cG79>Q1Zq!2s# zce0|T_}P^R$pJmGmxYTyPx|{(d`j$%FsE{Gy!C8tHx4)2Ln;dF+Yr(ICNktaoQ6xP zpFD*FRN00Gu~-={RinhLtfQPyW*vf@oUeiWp3qE0{Qc`TWGx!LG21@dT3VCK^9Hk@ zEnr+nz0YlC0B}!fcYS)K-gQ<-Iz&|lx+-kIIpob%O}-a`Hdiiy+_w1=?$_Y>`0lI6 zyZp@6{Pp3K&jL_|qz!2Wdm7{0`G5ZWxiwHMfWwoPmX@x+n%X3Crawg$s_%e2f;C}Q zEYgjDO4y#N_^+dwP0g2(?lXg+*f5eEQjCvIgD~8>RMBG498jTX zbo)w^Sz43_)`TlpQde*KbE#p?B*2Rvku70FFY4#e)Ub)DNy?=s)m(7ub?*xpy=_n* z-=@Rt+aOP~GS?6Zl))#sGy;tRn%c^ohN(oNTe|clWWUhj0wA^E1i-law!TJ8lmf64 z@%n%t%U7&k9IhbxnS)F9%;b@zmoCZ4O}FY|%LL)q?KM5Ey1WLo+l43nw@A;P4Kx|w zMv+J6okhl{4>-kyM!kdg;h+xVxmA$qf1y@-j`61qb$j45X`9sd?*Mv<7NTfv{R5kv zoXm!-<86{5W3#iTlC~~$Q>THpEQ?0NpsbZ(nVw~5n-wOn8DBTbkQp$?t(oi_rC8c+ zCh}f&#O#yzbjphqRrE^M;*+|rpU!@9xja|X{YAwn&RF0*BbX!89F?%1b%mR8F($XA z1A7)V)s5xL65>)z6kqCigl}BEF^s+Uh^aOFeqVq8J5UjD>_6+8H)&IO9uVqu31@~3 z31_2H&!%Ec6Z7!gw}6Z<5qGBsKfh_1I_;bEuAugovT{a+N#iGwc^{ESE{M=e2Ava!0G)ZL*am%7_>MaAD^SnjT<+9Zy&{%~Gc40zHb+rf-ZmwFBnkt&l?3O!xWZ#;sH zd6j(CGogaaUGIKjJeI2ztJpj(e+d*{h0tq5ugcHanl12OeoLif&`}}YR~^*uNi1{$ zN%toTeU(vg>~Y-o>eVYUF4c_JD+e`bPE>;iTCAnDRbi^x*EM^Z-Bw-=U6z=b7-PD= zoR=W~7@+>&#er$P_pPn11A_;5l)Mk#%1oX_U7pl70YUW!Ate*jDiFI-{0=0tYh=WK z>kK6`Ugi7A$-psSjY5kdsnt-qbOr|o9A(AYe_>l>C@fx&IUFAy1aq*ny9{HoL7A9H zq!7<4e@Y41R6o$}6TzQGXfJ{f?l%Q5G*8D@w4X2}aclPbj(vmbU^&y`FZJ+9%3-WH z97ht^+3`ZP1MEPz#6e?0lZH^4^#=T!2g5$Bna`eu?r$wG03j{}5(5mxRNV2)IRq+p zG^l`<0G~ee_ul}VEbKBRrCVWk#P2qKBeFb4Q;7p^RkCMHuK1XDFhaSFe`mB&nx^C4 zP;|9IK&5}94t2ha*s#^o8H5R;y)ZHfiui+BAyLt4H8r*V6^Tseb8(_F*Th18xk=5a zs;KPA)q5^SU_v-@?^noXg1ip(%eV4_ItUsw{>#h+goKuzj|p+7@BaP!2m&Os8_27O z{U=Uf92{4!kU+cN16+Y1=E2)EOM{t_yn4kJz#VXc15VaNaKFK!Bhc@Fhhm>Y!bw^M=n_Ocap$M`lW@6$V^L~IB?~1+1BjGHZ(L)CrF6WK_Mab zl49DzG>Rd@Tk`A-x%S_-Yu|AyX=iJxs`|5r^7$_qvoqw=aD?AUe0>ue2Tnn)!P-#2 z=n_-r;Qs6d832WGap#y69x}nh^n#yYSwHzaJ3IcW;}?sOTqV1i7HP!l*I8tJPCRJO z?Q^l-S!5F{Hf-^=((b6;QI*J_)yZAX9AeShUIX9tqQy9oHW^`F!{<1Bjb$d*b- znMLr5>A8(GL5E`I;EoWx2hFMmYSR@__h{@(JNv)VB>keBR1e;!&5}A=e8{0zu+y95 zTs6M}xdn)n4tvZ5!pfs>Pic1#ii=OU2mbEEl232_PtP#_J)bG* z+GFZFt@qk$E3vF_+n48Zw1^Uye-rAlTM6_j%WD2xAU+;lN2{Zrh;1ogWpko395ZMw zYmF2HDjpTV4f3`zG|O8#ka%FB#+kd5QP65vYc&1n3Mc0ev)JyxgrUL0c%ur4^8VqW zq_*DGiqD(h_s9_--!a~sfQi8RVT)t9N($vVtZQBoq(_{(hdVev%~jWMO5?M{#K$40 zhqLQe(4wFEtbMcWPrf4M@q-vP0CW+_EV;nCj+HOvri|76R&Wm*zyX54if59343&ar zB^YsI9l*}g9CEU70~@&$0gW0pXO5f^^(^!h!~aTXp$gjBm$k1|T^s|p)cV%eucf)T z7Ox^ys6AA}4Kx+tDtT;O+XbUKCx6hELx?&o5P4ypX*%%mY#i*ZY19(mhGVv0$oQ)L z`t?gGJ5#s)VQ|o&ZaRY&KM|00BHB++7~%5TO*M$%0O1)j2An2LFYUpJt6xy-?gKwq zUwET|c}$^jbpB?9lahue92^+jUhZwqD><~Q2LxOL zk&*;y;#4(`^-lCqEM4ZD`rChB?hRn>FMt~_QEo?g+LI!5sM2Ik`(KaniFn_8q8==6 zDhYoHx{s_tAIdEEPzimG1i+wYB*CcnDlQ{qVgr^@%hob2?s~h(eRCv?G*IXAbUNmO~ z7izR?ke^yfd)<18!X%{&#YDK70i?Nljk~Y<=!UKB(jhj80_u!UQlIz%H0UonF6Mfs z<2i0NS6#ln{gp~~8zc_|u{B$tFPNgnU3}~3xjfI2GvC&BScJKg@j6%${jX~~`AV4f zyW}d>{1hL(gBd6rc_X#7Zr{#+9&9rO%W>J;G>81~ZTH{4_DVn76m8j_G zPN={ju#%Xx1x<`A5U)-cb}E4C~Z_TQFy!uhMfIN-haZ}AeO z1^y=sP;TPSq{s^NlWaUfBIABGoUR3?HAT&3(y)e`cSoEjt zETRX=-q^J@9Ms~#rYrTOAVJ<76}QWXfQP*gDtI>WokaeD7sxqigum6$oQ4u z5a6UboMj8@1hA{Lulrl@+#U&OX=#qA_A?-dAz#F{bV|mW$XLuWavRDkn8+>a;3Cha z46O(4{EP3Jr$5)hsCXun(5E@r2r7NFUOPD{>EA!QyCKwyIRIB((8;sxnmzz-*x^;k z5OU^gUV7Te7qPOAuzq_#lC)%JY6P8|%5en*{VJ~%8~-Gr zOVf>Nj`&D#lwE0`b#aBgkr2EK4UMoc4%zV!%%b*~lr6sXVQDo-l`jLsQbwcq`m1H* zF$pMo@(whbFS;SDDtl2O3S|5QR12-Zr#JU21w^sb)w`Zi+%ST=X57rAUt+}EcXKZ6(L zF;-jRBxu$W1+(4( z+v(}_I45LUa~NTma($=e56F8JBXtz# z30C|~i8#hBA!J50bI|*$W*`6#Qe%cQZuiJf!=rjS{OaC5!(=w$LB_%Kc9xX;N5j@! zLF6e$#y(@GVa!1w1-L56D0>rz{Y95T#J0|U$a_;%(&YM z?PU(c`pztAPl#nif%Qgc)f4w<+NBq)a1;VI6^qW@yVHw@rd_7tDfb#fI_TT@Rz33` zf2(qtzNV2WAuw(Q;S-cXJ7czY8U`w&qy$C-KTA?}ymwXH){IZ}la8KV$fm)9+OrzT zh7LVxrjCb5n5mLY7l<6cn@&)nJ40_bXHhMA#lPFNl{*de#%zZ0s#^bki;OyBm$7rp ztYV;==^geVvh$zSiffVJILsM6+KqXN5rMXZ`(ukGIS|-g1DiCtR0%Fq(98N&Hh;AO zV++9ZYo?0bmGR+ezUH8P(fd|bRZbJ4yXW=6tTPMV)&tKM0cE8pUp=kTaa^#}sFu`s z#{V*60YMCU2`7VB-#md+$POISDOrBQ_20t6LiU{Ix7MfP&Y~FdF2k$gQQtBCMdd5z z?|Xai#rWglkmtjP4>_Xkn6jX%w>Z}t(cyozF(k(m2C_IK{E$2ZKOG8XOJQkb49H(M z(VstUqXg(;_4KCGC(m|vb^;`vamA;avo zOABh(-Ne^_u(HI;XUwiq4*E(ljmn)*S4~}fj&O_B(1oHAO_a5{^7KgUi%3@!j_uGozM% zHq8(zyYf(W+<~fUtesp;8@tHN&d`TF5#}bVfcVnJ`fPi<-^zAI6KP4x4B9bj-+^u40O$uQL^#-C)HsJG`w-aS3%|Yj zND-TUY9_e=YEbq-ycd(-|3UR{Wt;-JQ(-2D1BJjIRa8|wfoxTIEUN8F;{YW1?oEy^ z6HXFvwEK?(t}mV(A3xQY0j>V^>mRLq4%gR^I7>M_JduxsZl6+~96J<46*0_c$eE5LX14E&_BF zweREr2SC11%lW?LwWH0bS&EZ1sLeXRSB{0B3ss~iMEBs8G7lCk&%&ylWRLE*eT6K&VL)TthgXWtpjg2;P7Yw zw+l7H@}6>OGd~v>w{Mu3n9SUyPkHiFnj}RzM?QEe$(>8}2GA71@f2uf<<#cP+aw&z z!qd8lFQP&u%)!NF1F?p&6~372R7_y!p6~%3rRLCw4|`ve!mq>Oj>Fu0r!t{HG$&m$ zcJN{>FhbTGT2s!Nn z8GZz;#RP@ePu|SHB$y#+5cT>s=Xq^j%BQ+|R~cw3@l@R*t*Og!St}cz!m9^yIX;}z z5A7q{MW^WO*|Rl2n@&VR-Ifc=(Ep6|^}o=Bgq%(wX70AF`6649Lo-U%Z@w{Jyl8(L zC=P)Ib==Ifq)+ql{*xz9VhNcYs|<3TBqs6b7gKalapU4^H>u}sovRF3F6HV0M-@dt zy3UFcyrAu+qw~oMY<^|Hb&y}X^cFZaHY~Y(WgWhRoRW?5`L?5jsHY+9XdknnQ z=7;0#s58aIMui!AF}Z%IpXDnD=hlibo%PLoVQ-BG4{v zknwU`#@L%d0{|Qk3BZWei{(T}%Yq42$vb`aE9InHy#|SBw_+2M_5`8!qYIFi>H*Rn z3QeJLIi8XdH1Q{33FJCY*4Y7;kJoxnBOnDlRR}5XpEpF7C`YJm*U!$$A>I~KSP2=X zcoDcs{D*PLD^DUKd^mEoUYw=nR!#i3x;^352o~Zog7s!eJ7)o8xySYFVy>4{w6js=hAf~7K^iBPfkt>b@EAz zbwy|u;1((>E1v;-dlRRc0f?6hJ`jJnzevX%@(2zD<#3K@UVqO z%$FngmZfe^!$hR^wa^@lzYJyYH25;CXOr^%_;3WBH^2=N*;G-)A;;VIiUgGn^kWVV zrTqVL;>a-2_65M>>vIGM+Up5M5f+m^Y5=sMG zZpCxwzMUXzlwG;~w~BCo)WD@`@x_Iyu3*?&U5iZxo)13 zUNXfsU0Of!wE!ru-btDQ;vh-wBTZ70YnO9spFwH_I?(OuqeSfr^I4KQFOsLz6n`!lL1B+r*^9|L$Sp|3v?`6t z`~@#+f3Y@fo3*VeLw!8gV^Sh{RWo*IBOO2x5%Ac$xG1A{KLrGUejc>5mzS1MX)BnH zuSgFkrQJ>B)D(Q@AFGu3n#XkfVkq%#$?G5zyLrU#pUxdIEUdPAMNpQqTfSDT2O^QW z$ca=XayplrwI29FD(yqV#EQ8&kSkt90iT|XLo5OHUU=(k?(J&=(2jSBHYwxS%DRy3 zA)!#dnD5=#1us)pb+kNk`@+a2fE-tbw)ONhW22&eVxB*D|9Y`wx|(J$SW|E8?bPs{ z`<%AxS5zhO(R!m z6ZV{vwvq1AyV873STP=g<)@xuTd@#s?}{osOX+>a0`-wb@m^Bj`)Yn;jC3l-YGGl4 z;!;9s<%bU{p5W9tBHSGxG@2p6@Sv%DV8~$}aZASZ8kT+W&Oc^}?Z00oemVE5aP>m@ zg%M#rJ%s_sQ=BMw<;oQ*R10Cps)qbUw;I$v?c@V!tW`*c$QGe$Vu9!ulZiTqR@n1? zGuo-))-0|(v>PvE=wonsHpq)BJ2(^vb{lnynXKp#5)dRW+DtUk&p$*qqyyz&yl5@H zg?vDBQjIiM^XCv%5-OGs+D@+jW`-712W{1r95fV3EVikf0;PxzdKAS?IdWffv|s6r znNLjaIoqWPBnZWMeq^+`m}ST@#4vTz45IQ^LVJX>F~M`o%eym!y%B_^= zGkf8`wC-&_Mp*b);O@ZVgH{+>a>v@=G+tJ6!f`|if)4E!Dn)-F0^j|dkg!q5ZeUY8PKislY2G zD1vt?H6co)Z!7+OGf!RYwZM8iARWr+yC@C5=W7&bTbD znVFd<(t<3oP%XPjnF&TSgbXcvokc;I@L3 zf;+aRGBsb}XG7W$XP!P7-L1w*cwL zO;f*O(xF~7w9O`5;C7DG-tN%5cqoZ1=<1nnd}{}j>ZvAolH+YXMtZKGZ}@wPsf!D4 zLq%#@TC;}wUAi&3Z>uKP%<&3|@`Qh>>z7>Rt`EL>f&N8m!RM} zo?15Nz+d_Y(rjX48zPy5!>hCHr(P~H1Jy@Nq5i^Z3i-lYb|qsBPcQWA+@1U&#jQuwRk7iu)@!BfRv@giv?@x~X6f`tB8R z@qcWpi6*VZwhcSJCHP;5u~mR1wg6uJHD72s|E{ac5tvW82l)%2=MbxA*f3+&Kv}hN zg4#P73mn!Qsu9znzS85Yl1j4#h>Q|;oTE=^IJI4p zJZr>SR7kCKu?u_G!up4R1E>@$i|&TeM**6G5L=-O#n^nzQo9M`SjJ}VfwvoV$?LoJ zI(iWaDW>?U{6_iYn);n6&)Z{3$Zy*~Y32@JER&-|rsVQ?rn^32P6yV?^54HUj@)Hk zy;ipT=?QfMya#Hslx1R>gI#JKej|py8&vdLT}+5F^?hcZ1Rw+Mgw$Cu_)=q3Hg7Xl z&<{57eCoZ=b3aU`y*WeOg}Fn2H`MJ-QD9~J9ctGFp4KgeQ7cu=8CCG|8)woh;)NQ} zPlOz1Is1?e2BWN0J!B{~b@aSNUHA=nLD*;N;H2+1g}A*iP}7{mASxU#P2@Z#QoKb^ zm3W$R?}D=be<{I{zIUqwSTbPdMLI4z`D~Aq+y?m6+&l!Gb}3y zZ$Af!d}I3QCUqY*MKM>(sj8Lo-t%qsQd4{KmzGB3aK9x^;_$g*CUTI2rxuw)qXGX9 zc&IaMCPM-@hiLOks8-nH$3eK=Vo}~Pe}Ftf|9k9c{y=%Y7oD7!(Ui+$)>NLro$HJ2 zAu4#n9~^2=>R(SXGBAAWpLcU2xRVt1y{5W4TTMkp>h7m;N?vks4B1%!7mOcWr9XRO zvk`2!}z$bhP`z^%nY=l-!duEAXQ*=4o7ieA(Rl)r^j|57h-h({-p4{b`O|+ zIAtAz9J5~GQ7yOze$D+mT0E4f#<>nZs%~;^0~{O33&p0g$98{;jY`EMM%*rRhym-m z1p`^Eks~DmOp15eJ<{gba`~{bvrZDj0{I>P$SF0SRH@7!y?ptyzTZkY`_7I_pNO`$ zafOFH3^LjdXPf>+Qk-pc5lMMZsEoI5PY}frlS4*J_Jaf<33RNiA#VvX&3`|Jr9L`7 zUPkE8EgU<60T{4)CoE!1vjR1#bb*7aO`Wn5M?KuWX7nAib-f9{eXb|42d^gPe0t3_f zuU6la9OnC&rY{5Lg8PpTl(@MqAnrFbG&EkRss3t;?@PLz2O}DG-~Jsiyto9pwckzh zhfVoyA&9V!-dK*>Dp~UL|ICKWLC17yYH;qJj}twD2&V%yxlxc8?$BR+7!6{qlPE?I z^|N#(fR5dP=p`9t?TB}96aT>FdF+Y0s_Mi%(>4BNaBwEYL`6?-qMr*#+{)3`^Y$cZ zwRx4uvtRYhxMOLsXLclA#0qXszo`W;F4>Jsa*B$1rg|B}gc@S8F;hL1aR!9eGqK%| zL2|-J>YOHY=0vb@pu{eK_tXPJ8g9V?;)baq5mip%e8S9DOD-7&wPWIC?+CdKQ%`Nc zN|3@I)mBY3GG$GNvc>_g5sf`!h-1N`GY4sDSy|i7^~M&8i-$ntdl3{I>?rC<9lD4O zLMh%vx{#xB@brWXQzZ@fQ`4YmdIrmsJKlXZXnQzvG5xlfr!i&vlc}ieyCPXqmbz^A zQw{E@Kz(uu*{G=T#)hL~hj1pI?D!a?#~w^6R6z(F>43D}AIKrIL7MGQusomage_Ma zTJr$k_bmz~?PAd_JVfZ7!Hex#7%sk;e2meCiXPf$ozaaI5)ngv)j|uE6lbJQO26nm z>D}i7eFJa2`t%0M>vHZowsfGnbpBfwFWC@7AOtrFD_J^TAi59!d{IzaBVyCFgNk~t z{6}Q&PWlBZs#iRuV6lclj2l9!b1<>zn=`x}06sA;BWzd`XX5}ON~PThyVtKzgb;r5 z``dT9%DV5u&x2b3L_q1dm<6~A;UJ7$g0>p5QjniNT{$?$2+|y%eko2hnjYWVzL(b@ z0*4euf0oLYwSPeKASs7&-v$L8sowkP;WKbDur3t;BV6XlmO=TAsMDVIEi zGnoG;3vihNmqUQjH3(Pz>0xxWfT_rIQJa{i6%*_5CZKFMpRI<12`pdxP;NHc+DAv~O;26Ix7tJ$pD+ z_|m7;xSkvW;{)4YnPq%BhKGg5$6a~=m{wVIK4z>tg-P9U*QQ>F+L_9#+&k1Zq2(*A zc!g@{NC14J6Lfnpb$vD3PCoRFC8x~lC+}dzpr9k|ys*2nL;ETtNG`j5$v3195+ZdB(p() zoTC>;x+2K?5AYFLT z$8x&-mowPfGS)(CU90F4&ejvSl)GQee~QIsYI5IQh5b1k9sH-8z^X8V!L&l6`=mMq z;Y}u`%#wWx1ZsT)=Ip@veam#yYj?^s;qVY>&LfN~F)dhnyuVEm|H(kp8e%qn7jovE7*O=T7z++2LQ$%y5p`9Rb%?GsN zLSCBOqrJlV)r6s^|7iy5+iba>gwtfmH#`;8$6l9uV;E4+4jn1^P4My}p{3dGd2MTDH5{x{c5U?h0z`UjhcBD_9=nWW| z>&GlXo8L@6iai*530w7yvyT}8)Boqm3=I#`5cwUJdTJb!_umMPU{ZiA^mz&$6O+m6 zuHGG)&}zmnlg++DJ@L$$96#?#fT4HQHk%~x?X$6Yw||3Xgr?dj?X5Bi3B|IE@+Zw& z64#$t7#4^A<-{{m`;diy!!PKHpss|~+gCJxiVp7AOCHm7hO520Qstz_&Q6-kL%Z0? zfSS|^#(&N}kQIID4&@zfGs!2y=PyB`qdf#`t-<*$oKsA-d}CQGXV`j3+OxdRda1uP z>#({fyza6?83kj+pU}y*hgIbZzoA9kYoBdD({OH21&s=Sht$Dav*Qht#GLJy7NCoHLe+KkjMEZoVB~(d5(AfRcP_ld;r( zBVXXcBR#lD(<>YzjV9$e7bB{oEvhFNsHjHkbE9cp>L-`~_{~%~2Z9!Fnyhn=C!giB z(Q>#?qmiTBq5a_+X=8+KSOY^^i?!59+HIO%A79~+7^rp`Gg45mP@ay0--j2=v{`81#69}%S|Wn^R&CNsQF zW*|Ms{nbWV`^r^q$KcQ6gCP!O_wZfsd1ndh##oi<{I2`hh)#A)JXOtF`Ky#aT2vAk z^vi(+23+RXuez_R%_hL8aw^OqZM|KCsR`(#;gF{K1ThyF98t#o{{l9yJ15&$5cP`> zsuIxIJ;j%hiT6~$e!cSzl4@gGUTb#lABWVRxkZ@OjW(`x+Ao*CU&HU%^yOgW<8Y1h zWVVKYMjbKD4UL7viID02lR!SiiOoxM46<68=I-4znNE`~%5G|b26pZf_fW|?R8uay zLANUm_4us!bHA|(TpqET@*X#xKUCQ7(`r~uHQwvfdiahj%>)M+2{>dVUtO6Ky5OWF z)!~%?nS+p!unmQO=6yixOyt`ycS*{BA2(Xk`+}cS_Lob{p%W&chqeM*h3v{)*`$IG zStjdpO3Icg2Im5WyfPCrGQLd+$60pVu|S^DHrar0vgR22`Sa)NFsT*-V)WU|g&)7t zB1S9i=>`6IIu1^zTIVRQUhY#BX8@s+`|8ycBG#a1J8P4-u4NgGz5*)tz zNcWoo_er`H$xsF3JdxkMzadKQE}AzXQR`bj&cpFXpYBLMl$>ZO~Y$G?Pvk5 zBD&?V>-%_m{#!Uy?d4=Zlq1me3^)NY~;WgPTs&`bwBpRlQL^_yHw|Q zBwuNoLs6}nLxyd{>_&Uds}x21RqMKJJ8=f}`_=p_?4#nRN^T^Vl668fZr^TOf_Xiu zpB{~$AWHiS#X@*4|FcQH?(l(zMuELqUhRqGGlG_lt^I=l+3WyK4VsTE2@f)zCr6zo z*YlHq7bZ8EUfJgEBy{GJ=V>5ShvvQ-nQEigR@z!9`N`t~dkkzz>z4zrm&}_fUk*Z? zCLa>nxn$VVx(S`nOaAtM%KOr2D%-zp(=AHICUb^l%FsxeZjp>-n|G9wOc^tUL?J^m zWU54|Ez_pKCNfn@Qs$u|Lo(b%p&ey2-5;bGa_lUl(;RG|6;y z^;o(sM>UNEwJBX){OmE`7PQtPGrTnO=GF#pm|)n0XdnNJd?)G*s6vkv(%qyUZgPG= zJHC1I=JW}~Eq0o@KLcM_Sa;BC$hF@EnHaqt@p;c-(H`GHZYgzNv}()9cuV-{C^jc% z$mXO}TDaLc-yB`-JZYV?_WnpG3-|_Xlnt;V_yYcZyswIJmZMF2V0FJ$DruR`|8HY@ zpxQ^AKKq-a;`Tz%mHGC0-D(*AcszTCLZR%DQ&0%y*}|FPOl=5O%i2cgKWO~w^=nS* z(A_4C=y`d0McApEr6+DkK9CyEe~|TJY%WqUXJZl~O3=Mw6~h$LW~OX8${_@yd7}=Y zLk|~=B)mv&%U7Bdo}Kl-kUlex3TzP^?tS4Jbv#=;hG(jdZ65Qfu)UQ^vg&?y&gu%O zz*pW?+uM64qP3{jRj#@}U#x>Xc3v&3P{P|o-^93eB>hD5HDQY#pCu-=f#3~;vAM$0 zr}xm}rzP%d33GTDE?2@Jp{>g>u#3Z?58F^7Qg`wuahW8%Z7o%^XYGgYD$P5Tm6cCq zsc7>_W z1TP zx+=Z-anUGwGCllO*eNPqSR`SL^7a~EPVpN*lRZbtss32J)Ne8qMX}5CJ$!~1iay`S2o$alWA;sjQPSxb>GOc7^Fmbz3Eh)w0((Y3b z4qfi4-n}0`el*HbyMbhJs8r~@U#jr9k)h$b0nfwCZ4C*c5CW?cY#as-{+*I9cv5=+ z!EAyYZylRuz+cv9w!Bue*YMi-y!f$|_J|;-uB=JZ;~*BM@UFUTbq(QK_SPR=E46iE zB_9aDhzHIs2}?^$2J8OXE18sa+sq75(HJ_OtG-)KDx?=aAi4h4x?XxG$8e3-*4A$C z%y_L`l+MlM$(b_ul53|kb6q&w$t4VArr)SH_I)g~6QyTI3!lVUsIPBiB&n);19nP;7|lPvH2Sf;TUB=uXDi2tyD5LFhgA|}DDs!66y3Um zW$t>uQ)NdpkMJyU239q@88c96%>3Xba=b<>yS+M-V)-+H|r!{ z=N_xu{XRx(@AK}Y?Y@hbyZ5tx_-pBP+0?wm7I6lYPNyiH$HMd<=1d!VlrL5vZrE0T zZdm-VV}`E z)i3zZ(+CwoeG_f->y9>7c;krHb}F5R(z)qU4;z2jluEPbTKp0hbWC)#IY{d+aiuD@ zlE?7ETOg2nOSXHnoAOt%Sw$D@GU^D?aa+C^Zeo!C*&zRV9bGGiG?9cz{VOJ|{;N;L zbQgJb{ZlQs41Ij)b7iILfwkrB%tYI2jY zf;>6hmX=|wU{%>2q~6LH*x;QRN-WFv9S;P2gs$}U*@DRO5`d1Qdv#D+M#f0$RGD9WBHt8yPRJ>@J4pO_#Md>vVV<<^d1MW%mfw;zd0(C%@>>td(6($jarEe5 zoR_tB<}Q7cJ%cKog!2z-$RtimqpZAqeVO~&-ZSt+gQL&`1NMopjn~0G<_668X)o2U zhE%{cU=zWp9@n>X*@ zQ+;`kQ}-Z8jeUtz97X=5I;XeS-w(S?o_yxs+f1e1anlD;j64k%UnI$u+e_Q+LSe(O z4L@;njCYQjGo!0!w1>_J8zaxqh&BaQb)RpCF{A(`d4v%a!(R7-RrZr(*%vhw(&K+|r8jvY}L@n*Noizpp- zTc(jF1oVw^l#|oU)?>mW8b(A@mE=F(KgUhssKNb@lC1e35n}%pExPwT1@AudM+-=W z(xA?Uzz%DuA%&E!a_!uehT-25fVIPRJ2qThM_2{Qy|gWlS9!7?*_9vM8a3lmE0+zyrC`@+f%Tg8|L=Iu^r9 zE6W}8XT3Wk(HJpg`f0z#SSj#pl3pwMiYURCYuYBokloTFLFT*ea&sSlRFa;O^0JwX zUuwf}QoW?W4i{BjEe{U`n2NmkKEDg@D?kQxExYFno6h!E-6-!5l3Q}TnVR|vtCj)i z3V7AGPqa9K*FL|297u^}_TJ>arZN z`uQD?JG+#0%`m!BvQdT!g0B`>6|u1#+Xfkzbom9KZ$p+g zXhP8(oB=t1NTDbtWy5skq{3)Rb_)iqsv!$X;E~#YeC$YAD274bI@3F_Qf4qCbin`W zMmfue_RpDM4#cj7MwfQN%Hj)5#c)5Ld}^`dyEd%kH(?HH@VoS-QZ%BOnK|##@tmqY z{=I`dc_1u|lB`U3%-UeBsweCxUg@CwkI(YVX#J zDua2s$vDNDJ6PT=Q9LFL10i$9fx#|03@_}wff5xcMd2qiXU^Tf^7c!ZeL2eFjs4)e z`kRa?f)_;evSr;_B^s36Tz}TRQM?`L7Po&3syCamvo?Xj_!$2T z)M^qJyR|p|>(|r2rav2EmlK{+7__rstP=*TR&8mH%VN`-&Lidhh~MXNa3+2V`Mr8v zq=B|FpXR}JHX$a4zYJ|^i-fS1!!M|-cH)rq2M(_X=I!@-S-wfOXL9Bsv4$0s%W!q8 z_}OmAxB$_FO}U3~nxi*%bLs&i49EqjzJ|e)4M^$8Nt(kEIpEp${8>0#n)G!8BTyUo zgC4cDeFspp0zP;xm8*~>VummTUiICF4-;_YpT!n%`%pYga=t zih2$pB5d}_f`Mj=Q`|ib;?_aWmipz(E-SrS98#hkSx7^n<~ega-qGeIty@u+a+A?> zpIi4gD@41Z>e2gzspSZ{lkAp4LSo9C$T#b#)X9gK z9x$+S3bC;SE5n6KxF4FJ2<(NZi)HS&G*@O4Z2h_{AS6nP;oBY+Y{4m__69b8Mj&#C zf3j1UNOZaRX}7VR*&g*!+-2gAK#hmb#dW0Ch=M%RhJC$$)i!7n5-*W`9+{yyJ9OBq z1v#uwe$Oo%@&te)|R9A=r~o2SYq;QpxpBWmDUXk>1_oCg>HCX6^k73FX|>wB7OdY zx;A3HvrrE? zA@=pQ>l38BI}X}gx$|!QwN>s1qT4KL0!G4HmDpThYuiAnOW-%K>Uyd4bfTcpF z=b(}r0oyk&v=4P5stnhACI|J_kVx({g)rn}x4@SZ=hmhl29Y4Pf#m_LVI|BC5 z5Duc0oLt-yjo%TX%j0^suo+SV-a?y?i`ki+Ibn*;()?7bKqVkJSL}tP0I6M%30?y-FK0cOX6BafO zI~5eJ!R^HhBiKU;BJZ)qx9oA7%a93k4Hj0 z(KG1?MY->I>rh`PyQ#t-%~#sy#McrR)=q`D=C5@uOcy1rXRGVR<~|dtQc+yEr=pcC zYGx4Wl$KI0l=DtwqXy@?d@|zjS zlXmD8FN-T%tiXkml^8rK?i2JJtP3CVC?|rzPy=`>P21q&Q2Jwem%0clU2?eyiy}!; zUj8e}#j0PQ+>CDT-%~XOXFv9Vi%4^-K|iJ8V0Coi5m=@vw?6k|H0nMzP8?R*uwjFe zQ?t-gs7(&F1|=tIx)O#l7izYFiAl4wWDI*k!`y0EKw)KV_x@*?S*hQe*kcP@&B5Yl z(>W;RmwrCbRCiwlpn86a)`N-X>52v}Q4QN-N_U2SQ$D-EZf9--8A7z0n-iR~$?to= zI`{>lNu&wOOO%1{^MPurB1bL@pZX*A@^MkN>NP$q(|~@i4NUjcMOr4_`WGouc5GV+ zrKQ9!JEKlFj&jcA6a-n*04?b6afX^|UnqlYob02c7DaDV=QPz133f-d(IskBu6<56MzI z+Q*(BX2Et!+9KKlie*g+TEp+6!ojA9s9be70XtvzfzrOJKduYRh?9jJJV*db_hm{jC z0ML5)>jPQ{(8vkOypwHL?W3fxoh)`BpkrPj(SCAw5RghsTiYsuan_JxTFvvaDK27T zD;dx2q;wvp(%Go=5l7y34JzG-VlLoi_tzDLA3@bzgfH1U!vGzvkM%6i>j`yvQeq`!ARU6th4C~Gy9dd|j2(dL!^uiEBRaI4T`}Pim z_NuKUwYQK^gA4aAQ#V7(>cs9t6f5-}UvhxU^Xe$I9U*9+ zEQ;GUOf}P&rPce(rpSwGK(j7}S!fB?QE4Vz@lCr`fYGcx8dj-YOG^%#Tb_SyMV{>8 zcxgTD|7;&KHl`7!bJCGhk!0|B$p2Zom46nIncydS;Z?%LrQ!YRdJac7XU9!A?{~3| z4mx#nRN7uS@lHxm$JktaY`1ol(#+Ps2dj>1%d+~=x|@#CTxt6i6~AvV?|Xr`(V?H-L>K3_B9VNY9B#x* zPh=C&l93VY$r1?x*efy*KgBO!T)lel&sQ~Dw*0k_N}8|uJnbZVKw<3`KqaoYzk_G) z{M^jX(BDN?>>;lb4#+1hvXww92*BJ!l|#o@*{g?5T6Cb27*m?DGgPH;Md)5@;XJ9D_u-g5%x` z9P;}(hP%)ZT-b19JVN?Nve|m{bl20<^`L5{L^25`Kh`f4BWl-u{eceE**zmZ%U1`l zR;>%CA_x5gXT#-!erDBmh_1?BaU|D>VU$6}2bUn&tT zTSY}hk=?U2WC&Ah>k)yjN6(*3+)0JZOD8hPwb`?fP~XqSV7K0>8i7TgK2GwqfG~` zJ0U7G%dz*@X>qj$O$dGGu8F9F29y}ZEpNu?wRS=9Vc#UZIHoMlK2ilAMBBXWe~gS6 zL+aqXsku2nP&@KZF{UZ^dnT*(Wx95j$}lXgvo1~{kN7`JI3#;W%+&w@kp*TApD>B4 zWn2!^rqaC-$4d^^;}nQu#eqJ2Pp?ZjXm^wBR{cup>PXbdqUf?miU4}>*3^gclRi{B ztkh)aF~ce^)kIo~|6F|z2>5N0OSKj+7*YZo*#R) zH_VBx`Asm)NYfk)(x>y~?(z!Wz;QLmU%}fh-O(%UUKJ#t_EX>4VY1sNIWt1#HgNij zBm-mCR&oo#s|1qXu37meSHwofEjG5cYHZP5e!aI@EafO^+57!mr$B`(JU(R-&1!-# z>3IKt3@aD{Fdx|Lx~Rs?$`MTus_x;jJ-vtd>DJOluBC%+)qopDJsuJ39r03O72$Z$O z@6WAm4w4|;burjEgpa)&F>)00hZ+JGOX6Wu@(#kOzM+RpqmmI}1s#y0^ zSf?s)4k;0pecq_#oP}EeHJNAuofIMU6?bssF~gU8%i! zg(|VJu^*l|aiM!V`{7}DUtb^a$8i--;?W8a%K0oPm-nj2x=LNcUYc__b*ep;B(WU2 z+LB75D9*AxpLkS~mXfk$cjgnjsXDEFb30*H#~MZ;F+LSJ3d&t&n6Z0x81FMBkyaM{ z02ML7p)8(cr35b~-1{-$~g;OzP zE=eIZg`Z?;GOb#F70r!@XYVhzgof*KG5XOH*Z+m1i3&ZN2B04ykuM4uVg%(_66ZZ_ z%J=6u4+W*G0RtBrfOimmDL5yDoheanTBw@aq|pbi4PWgfbFKN5QtYy3Nzl5O7W#g8 zCbPpjm0SGq{~aXlgk;_SF_Km|YH6AHgFw>S*VbFyNCbiCI7~%e;y6`&O*RaKAGYiT z^<0-+>$Fr*F1C{=Lnxhrch>*7OPb(m@J>G4yW$CiHLYG!XDTVpjOFX-=wp!PmO?f8 zq>Svb0%*=7%RT=Ms>QW_Qvj=u(14;U-UeU;FcBd?$II~~fi;6*mOKFH3TQdZE5OPE zL+k|bjdnpi0n6fMbpFsz@^gQyDV%s}>gZi$TagTB8q2`5$B&C_w)OfuvbVXbc6Hg4 z*q5fJJU~z(Y#^Q(v34Glg()FEzFp#_xu1_14y?K4_+eFm+~E;?n?*K)K~hz>9uQf@ zj~DC0?F&z10Y=Ia_;*S5$;!#gpN6Ja{&@(Y++y@Kf$0RqC8`V3l5`D0~Q zp;BcaeBMGAdj~9Kvd|_yLKg_UlhAfE!uh`7*JOc#5bPwt1+iSLXn6$!$nUxARimxk z_Q*&}aJF9^vgTvRb?N6LcNCwvp=-&N+Fbg?eNp{%?rm{RU zvg#vT#mCe`mjVNW(T#@>7FD62=vnY1@TU{y{lK`-|7_EABziNIt=)R2K09>SJ%Mw%u4{>(6%H4#)ak+3q1%p<@C^tNWuar44Ps*i>4m8awe!6hP8?5$Ae^+gkW8i zi-b^gyjmda%a>DV$v5@)|L=^Y!M_>EWgM2P3ewUzcUj8a|Hch_r;2}A9*g;>*R$3U zlvn~3uCLc2wgNy*G|gWCc{;)Nd1+X5_0IkKEa^=fHJZz&PI{CFS4if*!SqUZKdWh0 zcaY)z<{dj8u)%vlOhV!^J`5|D$U6W4q20^ybcH^f6U;m=3>FE@2zK6Sg3lV8o6kTB z%ORwa2wp0zfEsa*8PRrZ1!w?H*b^8yKvdm?(%Q~L$_^APAPJHPTl>({_)hn!s_72{ zUmU^H4Mt(2M7U!T)J$p3xRRgZeNSGQifa5Bmw<=Eo1POF-|KF+(;29_K-|72+8}Ig zUflWn@>6tf72`Q^Up48{Lo3Lcl;rs4-&$cxO39pnEQxDaGUCpK`TJ$!5$+_9SPV1;~F|mleBg7~j-?jU?bgz}2uDm%(N&gvuA3AjZAdhzRA-&g`5!~83!le+&Hs8U$Kt=?|$PETNTwB{GIgs)$b2@mK}q>u8B^uw*965 E0+;7G0RR91 literal 0 HcmV?d00001 diff --git a/img/hystrix-request-cache.png b/img/hystrix-request-cache.png new file mode 100644 index 0000000000000000000000000000000000000000..a75e6cd819c228ca1424270dfae673eaf701bfa1 GIT binary patch literal 28409 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 E0+;7G0RR91 literal 0 HcmV?d00001 diff --git a/offer.md b/offer.md index be66189..e087806 100644 --- a/offer.md +++ b/offer.md @@ -1,4 +1,4 @@ -[![where-is-my-offer](/img/where-is-my-offer.png)](https://doocs.github.io/advanced-java) +[![where-is-my-offer](/img/where-is-my-offer.png)](https://doocs.github.io/advanced-java/#/offer)