From af5356ba6e087b98c01dbae6cd0985e5e125c835 Mon Sep 17 00:00:00 2001 From: Theo Date: Thu, 6 Mar 2025 23:42:01 -0800 Subject: [PATCH] End-Of-Image markers for more robust Progressive JPEG decoding --- Nuke.xcodeproj/project.pbxproj | 8 + .../Nuke/Decoding/ImageDecoders+Default.swift | 164 ++++++++++++++---- Tests/NukeTests/ImageDecoderTests.swift | 21 ++- Tests/Resources/tricky_progressive.jpeg | Bin 0 -> 39164 bytes 4 files changed, 155 insertions(+), 38 deletions(-) create mode 100644 Tests/Resources/tricky_progressive.jpeg diff --git a/Nuke.xcodeproj/project.pbxproj b/Nuke.xcodeproj/project.pbxproj index 8d53148ba..67debedca 100644 --- a/Nuke.xcodeproj/project.pbxproj +++ b/Nuke.xcodeproj/project.pbxproj @@ -262,6 +262,9 @@ 0CF4DE7D1D412A9E00170289 /* ImagePrefetcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0CF4DE7C1D412A9E00170289 /* ImagePrefetcher.swift */; }; 0CF5456B25B39A0E00B45F1E /* right-orientation.jpeg in Resources */ = {isa = PBXBuildFile; fileRef = 0CF5456A25B39A0E00B45F1E /* right-orientation.jpeg */; }; 0CF58FF726DAAC3800D2650D /* ImageDownsampleTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0CF58FF626DAAC3800D2650D /* ImageDownsampleTests.swift */; }; + 145908252D7A793D00B88452 /* tricky_progressive.jpeg in Resources */ = {isa = PBXBuildFile; fileRef = 145908242D7A793D00B88452 /* tricky_progressive.jpeg */; }; + 145908262D7A793D00B88452 /* tricky_progressive.jpeg in Resources */ = {isa = PBXBuildFile; fileRef = 145908242D7A793D00B88452 /* tricky_progressive.jpeg */; }; + 145908272D7A793D00B88452 /* tricky_progressive.jpeg in Resources */ = {isa = PBXBuildFile; fileRef = 145908242D7A793D00B88452 /* tricky_progressive.jpeg */; }; 2DFD93B0233A6AB300D84DB9 /* ImagePipelineProcessorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2DFD93AF233A6AB300D84DB9 /* ImagePipelineProcessorTests.swift */; }; 4480674C2A448C9F00DE7CF8 /* DataPublisherTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4480674B2A448C9F00DE7CF8 /* DataPublisherTests.swift */; }; /* End PBXBuildFile section */ @@ -527,6 +530,7 @@ 0CF52DCB26516F6B0094BC66 /* FetchImageTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FetchImageTests.swift; sourceTree = ""; }; 0CF5456A25B39A0E00B45F1E /* right-orientation.jpeg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = "right-orientation.jpeg"; sourceTree = ""; }; 0CF58FF626DAAC3800D2650D /* ImageDownsampleTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImageDownsampleTests.swift; sourceTree = ""; }; + 145908242D7A793D00B88452 /* tricky_progressive.jpeg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = tricky_progressive.jpeg; sourceTree = ""; }; 2DFD93AF233A6AB300D84DB9 /* ImagePipelineProcessorTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImagePipelineProcessorTests.swift; sourceTree = ""; }; 4480674B2A448C9F00DE7CF8 /* DataPublisherTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DataPublisherTests.swift; sourceTree = ""; }; /* End PBXFileReference section */ @@ -628,6 +632,7 @@ 0CF5456A25B39A0E00B45F1E /* right-orientation.jpeg */, 0C4B34112572E233000FDDBA /* grayscale.jpeg */, 0C70D96F2089016700A49DAC /* progressive.jpeg */, + 145908242D7A793D00B88452 /* tricky_progressive.jpeg */, 0C95FD532571B278008D4FC2 /* baseline.webp */, 0C09B1651FE9A65600E8FE3B /* fixture.jpeg */, 0C91B0F72438E84E007F9100 /* fixture-tiny.jpeg */, @@ -1342,6 +1347,7 @@ 0C38DB2C28568FE20027F9FF /* right-orientation.jpeg in Resources */, 0C38DB2D28568FE20027F9FF /* s-rounded-corners.png in Resources */, 0C38DB2E28568FE20027F9FF /* video.mp4 in Resources */, + 145908262D7A793D00B88452 /* tricky_progressive.jpeg in Resources */, 0C38DB2F28568FE20027F9FF /* progressive.jpeg in Resources */, 0C38DB3028568FE20027F9FF /* s-rounded-corners-border.png in Resources */, ); @@ -1373,6 +1379,7 @@ 0CB644C12856807F00916267 /* baseline.webp in Resources */, 0CB644C32856807F00916267 /* fixture.png in Resources */, 0CB644CA2856807F00916267 /* swift.png in Resources */, + 145908252D7A793D00B88452 /* tricky_progressive.jpeg in Resources */, 0CB644C02856807F00916267 /* progressive.jpeg in Resources */, 0CB644C82856807F00916267 /* img_751.heic in Resources */, 0CB644C42856807F00916267 /* grayscale.jpeg in Resources */, @@ -1407,6 +1414,7 @@ 0CF5456B25B39A0E00B45F1E /* right-orientation.jpeg in Resources */, 0C7CE28B243933550018C8C3 /* s-rounded-corners.png in Resources */, 0CA4ECA426E67ED500BAC8E5 /* video.mp4 in Resources */, + 145908272D7A793D00B88452 /* tricky_progressive.jpeg in Resources */, 0C70D9712089016800A49DAC /* progressive.jpeg in Resources */, 0C7CE28D2439342C0018C8C3 /* s-rounded-corners-border.png in Resources */, ); diff --git a/Sources/Nuke/Decoding/ImageDecoders+Default.swift b/Sources/Nuke/Decoding/ImageDecoders+Default.swift index 5d6d8ace3..6cda32826 100644 --- a/Sources/Nuke/Decoding/ImageDecoders+Default.swift +++ b/Sources/Nuke/Decoding/ImageDecoders+Default.swift @@ -92,7 +92,14 @@ extension ImageDecoders { guard let endOfScan = scanner.scan(data), endOfScan > 0 else { return nil } - guard let image = ImageDecoders.Default._decode(data[0...endOfScan], scale: scale) else { + + // To decode data correctly, binary needs to end with an EOI (End Of Image) marker (0xFFD9) + var imageData = data[0...endOfScan] + if data[endOfScan - 1] != 0xFF || data[endOfScan] != 0xD9 { + imageData += [0xFF, 0xD9] + } + // We could be appending the data to `CGImageSourceCreateIncremental` and producing `CGImage`s from there but the EOI addition forces us to have to finalize everytime, which counters any performance gains. + guard let image = ImageDecoders.Default._decode(imageData, scale: scale) else { return nil } return ImageContainer(image: image, type: assetType, isPreview: true, userInfo: [.scanNumberKey: numberOfScans]) @@ -128,22 +135,37 @@ private struct ProgressiveJPEGScanner: Sendable { /// Scans the given data. If finds new scans, returns the last index of the /// last available scan. mutating func scan(_ data: Data) -> Int? { + if scannedIndex < 0 { + guard let header = ImageProperties.JPEG(data), + header.isProgressive else { + return nil + } + + // we always want to start after the Start-Of-Frame marker to skip over any thumbnail markers which could interfere with the parsing + scannedIndex = header.startOfFrameOffset + 2 + } + // Check if there is more data to scan. guard (scannedIndex + 1) < data.count else { return nil } // Start scanning from the where it left off previous time. - var index = (scannedIndex + 1) + // 1. we use `Data.firstIndex` as it's faster than iterating byte-by-byte in Swift + // 2. we could use `.lastIndex` and be much faster but we want to keep track of scan number var numberOfScans = self.numberOfScans - while index < (data.count - 1) { - scannedIndex = index - // 0xFF, 0xDA - Start Of Scan - if data[index] == 0xFF, data[index + 1] == 0xDA { - lastStartOfScan = index + var searchRange = (scannedIndex + 1).. Bool? { - var index = 3 // start scanning right after magic numbers - while index < (data.count - 1) { - // A example of first few bytes of progressive jpeg image: - // FF D8 FF E0 00 10 4A 46 49 46 00 01 01 00 00 48 00 ... - // + + // This is the most accurate way to determine whether this is a progressive JPEG, but sometimes can come back nil for baseline JPEGs + private static func isProgressive_io(_ data: Data) -> Bool? { + guard let imageSource = CGImageSourceCreateWithData(data as CFData, nil), + CGImageSourceGetCount(imageSource) > 0 else { + return nil + } + + // Get the properties for the first image + let properties = CGImageSourceCopyPropertiesAtIndex(imageSource, 0, nil) as? [CFString: Any] + let jfifProperties = properties?[kCGImagePropertyJFIFDictionary] as? [CFString: Any] + + // this property might be missing for baseline JPEGs so we can't depend on this completely + if let isProgressive = jfifProperties?[kCGImagePropertyJFIFIsProgressive] as? Bool { + return isProgressive + } + + return nil + } + + // Manually walk through JPEG header + static func parseHeader(_ data: Data) -> JPEG? { + // JPEG starts with SOI marker (FF D8) + guard data.count >= 2, data[0] == 0xFF, data[1] == 0xD8 else { + return nil + } + + // Start after SOI marker + var searchRange = 2..= data.count { + break + } + } + + // The byte coming after 0xFF gives us the information + let marker = data[controlIndex] + + // Check for SOF markers that indicate encoding type // 0xFF, 0xC0 - Start Of Frame (baseline DCT) // 0xFF, 0xC2 - Start Of Frame (progressive DCT) // https://en.wikipedia.org/wiki/JPEG - // - // As an alternative, Image I/O provides facilities to parse - // JPEG metadata via CGImageSourceCopyPropertiesAtIndex. It is a - // bit too convoluted to use and most likely slightly less - // efficient that checking this one special bit directly. - if data[index] == 0xFF { - if data[index + 1] == 0xC2 { - return true - } - if data[index + 1] == 0xC0 { - return false // baseline - } + // WARNING: These markers may also appear as part of a thumbnail in exif segment, so we need to make sure we skip these segments + let offset = controlIndex - 1 + if marker == 0xC0 { + return JPEG(isProgressive: false, startOfFrameOffset: offset) + } else if marker == 0xC2 { + return JPEG(isProgressive: true, startOfFrameOffset: offset) + } + + // Next iteration we look for the next 0xFF byte after this one + searchRange = (controlIndex + 1)..= 0xD0 && marker <= 0xD7) || marker == 0x01 { + // These markers have no data segment + continue + } + + // Handle EOI (End of Image) + guard marker != 0xD9 else { + break + } + + // Handle SOS (Start of Scan) - if we've reached this place we've missed the SOF marker + guard marker != 0xDA else { + break + } + + // All other markers have a length field, make sure we have enough bytes for the length + let lengthIndex = controlIndex + 1 + guard lengthIndex < data.count - 1 else { + break + } + + // Read the length (includes the length bytes themselves) + let length = UInt16(data[lengthIndex]) << 8 | UInt16(data[lengthIndex + 1]) + + // Skip this segment (length includes the 2 length bytes, so should be at least 2) + guard length > 2 else { + // Invalid length, corrupted JPEG + break + } + + let frontier = lengthIndex + Int(length) + guard frontier < data.count else { + // we don't have enough data to reach end of this segment + break } - index += 1 + + searchRange = frontier..{j&J733#g@BQFDhg98BIUKha27TcvX(C#w;psWmF z0ssK0034Y&^ggn!k;0|4-N|1Q6_inIeD{=2=w>#_cIll%AQ z|2d*00RSkkHHaKsT%5^p|5Jv8M*#fzPdz6G#}Bywqwxp)e>B3G{XqCn88BFg{O>le z%KjzDa0vgdL4Gy(zjnjH{~x>I(Epd+aR1Q;hYSDTZ(*JPx4!>n_sinT3LxzDUi~BR zuPXvPJUjv-!mA)6A^sys$VmSZuPv-#Mc!K843Bn_5as}m$g@$ z(O;&TNj=cCems_7xnn1ax9TeyXwp%W4jlaSKU zGkjoV;^F1v7Z4PZl#-T_m6KP{)Y8_`)zdeyw6gweV{2#c?&0a>4fOF14GWKmjEar{ zrKF~%XMD@d`dLs|R9sS8_N%t8zM-+HxuvzYuYX{0Xn16FdS-TReqnKGd24%TcW?jT z@aPzN`SspK(TBQcv<;gF0e?FfR;m9- zSmM?RmTu2m<)_#}i3v7+&SC%*`)ojU-AYVU}x91g!+p-fs&vZe4o&^d#63&V+ z{D_xl%}<{k_^cBlfPt8~Dzy^$(QU);tBfGQW#nMuqH2$L^}^7YYHU}nO`-+FCAi%Y z`qb2oH>}fBCDLt4>Yf8#E(~4^6V}#F3V&KL7ncb{e{_9HeF4}ivg18ZcH#1_32Q9y zoGI9{U&Xe0)L!nrt4cvs{{17IEj!hjJbY#5Iy^&AD~HL=fR#vRCjXSj@KnL$H;(X3L~yFUddxq`o8H-}WuQ{z3`0o&q7?wxB03IoZSs-q;Ll`hIy{1YS0<+grI3 z;}=iOy3vdMH0A&6OWoX>ee25SvyKX<&dIq3V_~T}hcg+qs1DHyG<4Akfhxi2PDZ=? zjaV*s>hcfzHgpx_>(QP^}y$xUgNDp(v zyaK$0LEWBD6-HI+YX0szpQiAH7z3H2cqc3aG{)5XEAwpbvu2)Ce*deukVw|Nn;L0-b&I zlXE+BCCzmUo=$k<$sW!067~8|UHgA=(1+!%X;>-&W|NlY+1;D%+_WI9cWp%D~>V7&dCb>C&4EQ1nj(r zA{B>N7{ddXttrN5XwVrF)Zlo1WhjuPHlnZJ;I{>@V$|8s7&sAoA}jNLU;=@0Of!<= z=k~ey0%q+v-=kkk&W~+|S8NG{0=_EfCeOJV%BLU$Vb42Xs?@Gpm($n>#lU6Kt6agS zw)gWML4d>9y(1x=iZYP}-w-+00-slo!^ zEa@#C-MiHr=tLGQmw&`W)+-1{1=zUDGcF^aHi`Qkn8s~1?j^L97(MdBuuCSl9~@Rl zrVTf+Whv$cVwpa3By-CWJ`>Ywv@0pR%`_wI5WbOt$-CztE_)}on^&0t(=YTIbqv7| z5)SX1a%h-nMgJEisF%hgJB}}@~X^D28P>S;23R8)N~@tW0%lYNSd|z7g_~ftH z2IJg9Wf3C+(wmYw(Ch6qPCJRT`Ps_ffebTOi8rG;o2zxK5#Iai_KPD1;x+~smkd&o z8X6vpu|oZV>^D@&^^`?S%x6?<*ZJw%KLAdx+$Q>xP$*rp0yGkv%E&rnuZ3$DSSB?3 z)Y{*(Zrr-mE*ZW2d9JRP6G4J5-1yFQ*Q$k$e!Lv#LpaoyEfQHKn29OiMsio+~xb& zfbS)=pKl!i?Ya@j8eQp6!EUe@BX7fYDLMJ1jn%om`c1j$?ir(;Ue7U`8Psa>2GSH4 zWIGv=So&xgApW4MRY&*&u#hv7wV)5TY-wta{_HqPC(loR`Svk5n=ElJO^`w1PyB59 zI5SnXnY{($c1MxH_uTOduRRA^knS=gv$(3{ZU_H1N>m^}?8nmB=3uT13h#JvPLVN> z?1NI&+3xDJWn?3qlvC6gOX1FU-Oj-I7eF<8aF7FbWco8lYfYpStfBDep+4{J5`u#( z)^@2?f=(jc)?Z{mz&^{lWb$Oq_yZ}BZ}~uP&Y!cwe)&y7+1iq^tatHhJvO|)VV`4T zH#?T|5qf!YE;#P3jKgXmnM1A!R3;L*@m54^owT*FEo*}Kc{+pAABQ4&jrrXjVz;xF zg|Q5RyS{ac|IxC_l#SW=w};R&$I{1yn+frKDl&qw!wpI=X+&~y-wOb> zqG+0^fi2l^&%2QG>@}7F{X#vUxX*e#jlD5|P{lq|z%q2J6P&yUO(+(sZcHR=*I~b{ zn_9Bwg@4ol7^LF$d*0bNaITnyKXB;#t3fiNuBotKO+C|S#jTw=ys;TE!cjX}QYoiy z+{(hE(ID-e6%w_4OQp}%y+cbnO$@AOE-K5c8D&SGXLn+HM}DoYX0-bH{AIK8_PdIi zqD{WN$#k+VmYTmY`!&J>`VI>8F>1>V(90Ei6B?7{N4)<#diGhX8+RVh+pC*tM}R`G zyF$q_=GMux?5;0cHIq2Dq?KX(E8tl>wCFgH7%G;@){<{em~o>*I;aWz zbPN3aM;!lA{7oKyCqvuJRjiW`3ib_ZoLuJ@+H)%}vvUskDp6)~Z$!bKd6f~$3KK4H zRMo@nIDNoS2`q5JVy5*2_uJ3!EPcqaR^5Yxjj*HZQAMoFO@Olcvrf4abO~D3U(eDC znCr6}*!+iYH-Cmn50k8!WJ0U9iN3x7Y&OD7Xkl|Z95gfSyymQ@;5M=tOj%sdyS=1B zhanw;$Cy`Z=^njzs+PN+(ZOY~i~i-aOB3aM2ZN6JAxn(z+qXUVX5@*C`qfd3fOjjy zmEZZ1MtSJy9Exsp{hPDXYfY!c3yj6LG9m(TfI<&Fx#+dEA*^n@9sT2bJ#Smm2x;Ad z^>e;z_a>Ayj{}3kJQJ76dijJBlDFgiPWkvu?HeQH%$m}|R7P&(E#+~gaZ4xH1M*eS zJrJ(KfG7%|rc6FGzpuqe2=jR7#amSPC_Q;K#pyvtD-O&CAqt6;Fkt!cz|YY=dbG zDM3+V1K60ZGNnS7O0-MX&>D>7eg4s+D0B>)B%wKDQ>{Pd9ZhX*dhz`qqcTG-l>4yi zlhcMbw+m}pn%ld$%WJaLaTD3?Hujyx`A&D7R{?E68o^WkA3KOYa)-hb2On%EKNNX; zTY>KEeqJtl)BtUh7MZ0BkgD0;*ywQve+cgUMsyw9L28|cO0f`^jzR>E@)RB$UjQM| zum2s1&JWK$jRrxn9$lf!O$qIEJi-^(YhwGnp{g0Kl*auZc}m+pirJa6C$%7ViHMN} z^^AxkwVU#YuTZ^dko%EB#T$QJUM{|g`z`tro8UyFM=PsceOr|X|BU8dpEfw{OgZi# z&ZBC;VFSjxaXPRgEYMB?iP5Qp7MI}#By98tvz)Qsq0=>k1c_@S-XW@HKA6GF9-y2d zypBHLLNg*CeO>^V*E`r$C$A_XILO)AX$xlON6=AJdAex?9)cetb!~3w<3lA`8^A!G z*-H;=S8_Vf>!O0Fsm5iA_arXq4)8C44@^$x`3?AToZnzJ@$*gZ2H+BaBv0x;?8ZDI zKgEmNDs#O)_NyR4GW8vEZ2p3@S&psBdlmHtMXA++r+r`8(8owLIP}0(o^G6`q2dsA z_V|q^hMo%?paJ$Wxjmkt!^zFso9(}b{3qlwTHK6p)(tE71eb}e%(7riCp)6g6+80J z^!^t0&nvU%Mr*6~SY@WHXMMEhgm~_V)nl1_;aqJ=KdcIpkbpk9y0P^&RU7o89uM&wjMe0i2uA;o)Tkp2*N+}=Uev5D~=7& z7*Y%MeDrBEWF)yblLtw~5X5YNrYb3w%i6?0JXd#Fb}jpDb)6|g$dq6OkP{7K1w^lz z$^`TginVGrs9d2d{k&}Va9_w9tf1_Oj&k4&VCPh5WAK~5q|??$WG7<8j&iO3{H~!q zC6rv%$%k?6%S2n|h(wdXXFIft#3ia{4E+a#=P@C+B8dAYVg8Lc=C~j49@yyUW}0?- zqBP-*hG7~1ZA_FTZWK7Un*j1mzEjh@>P4NSD1*Mfmv_FN9_q(G_IY}#$;R@EjdRPN z-ndVTvpMVgV)Ps+KC8a0$l0S}++oPuK^W}y92~T{asmFsQ3aPdQ_Y$$l5>qVFCGVEfvG}**smF!JSi_k8_CNsmq`C1rQql z0x;W%cmcpaGH!i%6yN5gkI!G$FRJG>Ow*}vlDpyd`SHP`k@j|wb zOySxS2i)B+fX%(c70^x}F3kOg8ItyAje6ze`Q0lZ)R>q$y0K#aq+;VKl7vS*U>?*{ zbFXB=30r}xZV#rRH$DfgNlmG}vsjQU>%gkMnu7G`W>vA`Hrn=Av$f&gu@2 z!JY0+(phdKuqud@9;+`tAJn!qw4(?K{6w)fUu&lejKr*_5Z~!C2&#AAFZ75vO!lgV=Mi{@LB;z!;Em0%ut@i} zXGWV_8m&NN&Cb;5^S|TdzR;Sukw{Po+)HkGCl*5)`jlx*I%*#rcukjUWQ7t}^*8}L}iHnn(C5{0FUAf{f0j! zF^{VT)O4qsRuZ2xeg}E;a94fP8XPSsy{pm7#em^dKH@dcKGXU$)Yvw>zP^_CFPHY- zB(2MBeOo~>WfR!ZNwH_VyoaN59fl=tkG}xI>z!z}u|uRNNtF#y2PVRdM1Q~ex>pjl z`{9`qTYZxEdNMSS>Cj-;6}dC=EKr}jmrCSk$nQ?@B+6ygUMsn^OeM7*dWL3+_4G1$ zU7Rfk`-ogdKdyU=M(1rJ?M2`jLw!XF>$9pVji&yzCp)o;-qHzYrk6~y?jYP3K}SqL zK)BcQ+xFN#gN!joP9}nM-UC>miKu(95+tbq0uk2Q>o*R6Mz5%Ix$Dwalc;n)WaMh3 zlDC76d}8t;PjF4L5LCd9ZJ|664BM*0BFlM&@== zys;agXa}}yEzW-a{)^B|ecL5d?uv%^-Mz<|X`lGni1`Zu5el1ma9vk?U;@hXw3%X= zOxjf)FKb;;CjPQ_ZCq;9>w9Q0^hPqV?M1Ufbb9Apb-L~_mXdF*cj!i|8;=Nfo~b;X z)+9rX{k55jU0;oe+XCM;#&A;$!+1~%>Je=BEC(`g$5B#4W^XlD$0&ByhFptHE|OXm z9llginp?Q}3J@dVhcI6S;{B#EZeXag+^&1XD9m8`^Hc|GfKqMdh8CFttKW`(m^6-Z-dlnOvx(oJMFJz!jLF?m|A^ z@Is}6$gV?ao4A2(+SwDsV|Mwq*=XcXbu{dkFMzhcL3Ji5P>lXBrjz)&RBf|tbSd87 zZ`EnhWr&;yWRqLZC-zS{*E^4T@45GG#ExJs+YTHM)ckRR=+A zv(h1@ac7}zm9s}fTiarI^ZqtaQmWHDMA+vY-R9NO>E3cJCvxkRJ(7z_f=kK6XYP*r z6b&Ffh+y#cT^eO3!&T)_&j#@`EfAi#yqZjYp49;qE;_ln&JsLuP22PU(7PIq?qn`jnN0ZNzi{oK~@=9@6Rm82(^{zsLp~7Qv zTm44jbrS7@<@QaiMbS4X6wLP+^So72c~}<<60jmj$v~Fp^to4nX5Rvbp!Pd*;-&;H zJS z9`ST%#WgdsuWY>|24j;iUe^y$rKNTwCxZ)*+Pa#3(-~3zN!Q{8F{^X3b$<;gJ{CS+p zx)C*CPQ(TxAN0Nekawo9(rYvk)iw>6S8{%&tvE-HF_o7C;)0VDk{s^L=DIf9OdIn0 zPDJ?)XCJAG9Y{rYV*#BlsVg6fihpo4@B*O-UNP17^h2gks9G3?nuF@Hfw z3Xs*Q@@(4}Ps27LZ5yAn-c6a}WPqTb9y=)$Q&XzX9$sPB|JgjUO684{aggz;-93D&xeNjgUN2)fj(PqKN1B%9th`QwIUuTEP_Jey%8w?Vn16W+%c;xPupniMu;? zOqYqaY(gF_OCE)wl*Kd)yg=IA(Gh~8EYGO$e%r5gxOxD<6CCfIDN3SCd9(NSL){YjmY=|EH4Wd; z`>lwL@y`KY?%un0@46fDWj}oMSA@Cv@s(`G3bWdu%ibxXA=*)1)`q$}AzoaPyR3ft zxtE7wnrlM&RQ1SR3JkgJ^#%$|;btTnuop+lh*X28>Y%!dvZn@wCqgkD= zqdof&FCHESq-K94amq9`TkEB3w51|@=q`@66$KV$eX(M4SHz&yXUjR8(|c?~7;pZminO^|4iVK^(PS z)M2YQb)DF6n10HsHx@}ReO)dluT{$2(wcc#01+o4ZD1Yvi&>PFm2}HW<2cy2%=}TD zedemt?eBKU*G#O0k}`$AB@;D^%*IL}c49`r7yK7ML(J84MRfn%uCBwy3m`(IZ2QoB zYm%A0`+i6biipRg>dF627Nh0wSKpmnxb7PfU8HSe_O0hOG}86h64OdSyk&_GM;pGR zcd`R701_TigUb&UUG*%iZ<(r=&x)GXVF;}6<0ISzsMyJM5q4bSgc9;z2a%A=2nw^p zP8^&lmOl%!q28IZ5{sDtmv>J^htIC{D2c07CS)hJ1%AfW2cHv(qX${X+y6FM17h^v z!oAKqCRzm^^-vu<4Dh-v9o+Ci-^9BXjYDF4GLnZU7D*{mkmEeWkL4#TnTP!Ypfj?N zyilGsQ@yO2PaU)8g>?;zd3?vrW&U*x_qc{OlM`!^9yNnh80~e4R0J^a&O(A1yPc-p z20|x8XTCcw?Z#4#oraw}txHI!)J@$8vlS(G2aJh^g+uIDf;9HF$%uDH7vj{e)}$#r zwZYBw3&6eRT=OWeuBk`V(=#u!3*`zMYnV&q(8B>3^LC?mpDJS^PIvkyuYN8vx+G$Y zeRYsE>@#^tQC-p+mmGpEU=v}w3mfm|3AO@xFl?HBlqfeEF{e#7lr0?>8oLqBgoOyd z4)`ScRfze&%}^x0)#n>7!v5p6K`esvpbEr&4J3M#Z9Csra~Y_Lmb=Lozw#1fx_w*_ zouf_|9&0{~Mf`T;viy86@)}~4sbZ6A+g*C48ovOr#4h?QC$>77)5xX3?15uj_8SR} z4_!1@Lk6(4t$1<8jQ&pg*{zu?STW8x&w~Q3v^NQTT+$glcIPnJXE&L(fgr3$itRik ze~+ivNQvV4_iZ&$$w2a8(vO^uNV5)u7{uTBCBD%P00>9YJx~*%AL?h1(RoIPkegsW zuY}vo{+`cTPr)ZrYiDI4OW!950?Cn*z%z?Ijf3KdVlJzehI%*Z_Jeo2(1DQy%LxTr zCvA+RJ1RNU5odHQ$?et7$-B`sP4O5+pIt}d;X$AB`ncIhO2R4+x5&PqUMWnfr29I| z3_pMEgU%^QGig?-@az!gK2AOCRHRRvGBZ=X%tl~`%m?DYf61!)`e;_WN+BjJOWKaf zOCSZpA&+*s2?LpdeA4&K|Nh-|MoN96fJkn!p9K`!Za~ug{adS>XQ=CQrvun9?9AGO zE9gN;ZLNxhi5OlqKJdZ4_~@Kj_nOaWX-Hp$mvwt(4 zHXif!t1+s((Dz4Aq1VaC4R>qau z!{gYJv9zqTX&BU*?QPgm(E?5ETl6qpQk0y#rXpDvUHi?nkTucdgA?uS9DC~XE#OF~ zoKGjey=II6{SCLjsY6LRD{gI!W6gdou$mng5}3=)G9)O(Ul_c;Xj^kEM9{ius7k8? z#vgOpmw7LP6Xu^Y)`TJw^C0|;PP4gzvKTn#y)IfaUB0!z+DW@C{ic8%r()H0^s_t; z1I9j6D>WGKMf;-&oT+jA77O|-q9z@?KlM*Q;q6!84$0`d4>C?%-JlHI2!w|mM4j`h zq8*V&MmuS|y@4D%*&uo?;PHw>W)G+0(idls+hH;lLT zj^KN3d7RjutE>pLz#kuC>IXOWCT-7RIV`|$A`e6f{eC1`uC+%^Th0fEHj(0+`6lSF zajeEBAF&DtM3BPI8w^JJDQ68XM9`h<@bC0PZ>;lOIoAeZ-MV8c5(}tlxb#LZ*~~Tt zXGrV%S<(vsw-x*Wb9;gUCq(?3HjRi^{dB%iVyPtTs!27~BK# zk?CT6-S}`fbE7=#`O3-)n5ZaIr5l(f0|^#dTvGqSg|FEK_`>OSSqVp9c#e&MhwQBN z+2p*1zu}3!LA$QnRV8^&ehsMywZS* zb1wknL`+!p_T-97w+a0W&juN=cwZRHMy;XQ5bU>P$&X>zWGOXO?`2E(l%h}6eaqCWlKY2GNVc^b^?0ecu4f4enKzCBSk#2AG1yH{c z=~$e$PF%5L6$jFmmsk0Ch>cKE6kzyEnxHdr)0i3w&92lg1GM(30B4eV{7cN`yRAhg zrjYI={5M~9_cu;DJ%>ErYjXT5Q#1Odbu^SFFUWRwTwmwiP_J-sqBn_sDTY`iZT6wH zIi|@qM>fz<#z3F0IN`zM=Fmqa7NzGR(RBHqKh{I;v>xNZ0sMg%3_Htj=&(==3puwl zS21EKr}_NJ&5ep(KbJJ4rxPxVed(L6`+(a`it&>D?Pk=)L7ju`E@;q`o%{rMkl0A( zZj6wH%VF;#mXJ^=@)5spJ2LDV)iO`v5ATz>;`HgR+Wd_UHLCcO(@$|)4!0nWV9ngL zuI-EfjGG|Hufxbw3)N`FW{HQ6#X4z{mAFlA?0lMzAhUy9a#fT*lS%f03CeBzOSi_v zwyre?5Ajr>%K-71P-+d3NyE(<>vBaA3}*K>Zcvr1fTcG2ZuDXq8qZ(Bt}ou|DS9IP zT5L;kwv5NAq4giVIo4ih`}75VCuU1T*lyE>5_r)^>IHTI12c4IEci*KBjUeVw6uW4 znf+4`xv7`$f>TC~pPi@6gZ+E1T_R4;Sj6Cgmp6m7Ax?aTF17Nc;SNFdLO$#2#Ekon z#t*J-wv!U3XhyKS{!ZejkcKDSK7;Uy98Y&(I%wR9xsNveuRT+()bB7nvabm5@8keD z1O5z=?SfBvnSEGi*1{7DDNgJ24;|RmPzMg}Ql^>`ViQnW0shab3ecsF!PESom!((E z`#-Gi{~>N8AtNK9qN1RpVxXhF@}+Swv0fJ((zkeTUsqBhGC~4EG9t!zHUY#JqTy^A3itrE1w&{_ew{B|AztnKiucnJrXh^3IHAf z6%Or{Mf|_c01yxX@JMjTDF5LYzeRZadO^K%)#%;iG&e5}4;P)`F|?q&adgV-1z?T0 zY`&+qc0G}sGC~8@%KG%lrmOQEzo8{gQpR`kk$yt0yDa#eK3WD?=7X_K3_Hv1r03InZGTybV;nQwi&-tLO){q3;p}R~NVu zrtXYId{#%;dgEQ+C5p)HI|3sqnf#@w%UeD>n(5t$|NWyo-{Yh_O&4oHi7n^7b zySxQc$lIo$;hw5kdB%ClV`QR|e?DrKi{f(pko!~gzVBQ;I@mjWK6P_MRodxDpA4DS zgQ5O==i64~`3z^C6C$D34U(~h$}c-e_Q8Mjbf*xNs*=AE+ORA^e=7fo(O_K1o}v5U zWG1H9-qi-oygq}o;#97zaQ{_A$@0a1k>SF4g^87k!Us=IAJtNQEzho^jJ zLbeCgd+LmCDPUM+({Zqwvpvm37rM=d`95~K;@SJk-kCS|uq%>N6GxzKq}Hk4_UlJh zy*y*rRa?vwCz>(rhPjyBZ6~Fl5p4k)%L$bbQ?8%&XnFjcfkWCs4Tm>gWtHC_NOj(r z+GR_&Wos9U)=m`ByPo~6oy&9QlBd`7rV}9X)snQwn^0-BY&PJVE2BQKZ8_bxOYqAy zuBgRd)|ts6%IRR-r2=M!k*G|}GmTe`sNFe64cf_zvij=IbMGPj&_R z=cJu4RnF8ZEm-AFT)uYOuCU3Q+}O)%t^T-0r9Owdt`g$0b^AMMB0Wo=fInv&>*bGo z*Ys;58Etn@eOnLi;`*ZgS1(Yx2+g<>I;Hg!K-Et11oRllu^$kM06DQsc z=B1I$N_ko(bxUnJpFks$;-2eDDW7O#^+Si0)1iGaGMBMgy%?Gi8^> z?JB>`vcSo|j6Hn`WCvM}CkqYfg`-xi>|X|RJqAL@ZqmsN1$AyyJ4jm-<4umOWyp|F z60@#4tA@YP>b3c*+}U9Q#6;@aPpnV&629kDxm<`HGI#8POqmzTXmhtY)kX;_^uOT$ z#GHOAx*&c5$YL~>Nh5j2D>$2j;GD!{rWz1`)Ymdigp4sym_G#2r5@K<+%3EXu}u%o zHncNvh>TSYeNy;U^8yesG>Bug7n%zpEeG|>;CIj_MSX;}(ViSb-v3Q$fB&~3l);A} zV#RQ3*M`Z7?L6c3!2eO`HhM{rk%X_1WNBhv+%emr*1KV-U690t@Kfv1gUZPIce30_&PMb_ z`wxB2dI9e}+;P+M#D&FW@buAzenJ2bzhb8*;sA*s4GdH2N?UULMizy4SkOim*<_dS zQtIrc^aN=mv8s*ocNyDPO{YghHRCR8Ka3-QujUYkF#{rdp`%=l61|djgl40PGIgWp z2!suN_>^La#hy7q5M)KE_tEW$qaU^%S?Eebq~MCJU}+8ULw39VpHTt0@UCC zDHb^s60yfMyV4hWcK4^U{bWq%Sjq6Vh($qZo_*r>`))ba)mmYByllUPMm;w!CS{HF zFGuHYbcK&+YqpZB)ZhKjlWB-%Qs{1!H)$Bl{F}_#ij5Z3?hXni^(Qq2+q>Kv7pRH8 zkMfuFJ&g0(Ec)#F7X294120{FpJ-3K+k|3DGyF`F2-^X)uxe`iQ7?$8)P$bQWPGo; zJf@esb1?X_W}Z+EUf;P%rN^wWxgZtZN;@LQAx|g5w<2VtaYFLV-ep(hmp=GpFXgB> zlc)Pmig#!<7B(HFpeZR@mOa@&`ssl3sscmNc)$d;dkY9 zy7teL8wMclHxOupRzWXFM#igGdtRDrxJmYqbTcU+?RS-RgoW%Z4{z{ zo0l8g@29fp3jAk$-#Fo~$qE!1q0b-gPEq>Kf1eb?wtF~On2K$1N1Rs3@%ctO6GiM9>TA_VBvYs|k8jOA+f2qNuq!bV&d8qJZ%AJap6`M;RcR=`Lesq2+qPBA~ z+WbiTSDQU?9oNkll27Alhdr5PQNuwTr^vF^B$=2eG<%tPE`f_5}6-+KJ7 z(u{2~uk#2C6I}$;Gm^FDZEWTFtGJmxt!RTdH+59<|8lSM#9au6Nll|6eG~IiUjBsx#z93KJB=37%wIje`W?}P;V&> zr4OgPLJxs|vc(Vq|D?6OCb<18)9+u|Vz@|n@2TJ7b4t9U;Zi5y{-j}!Oe@JDWkJZJ zsb%Gw{0cr$U*QTICcM(_b$*_G?(WBqIS20vxPU#K@SWT8)~cC~kH;gFWQCw`7n8(( z7S;01QZ|!a#Z=VlRru4d7EMzaf`XyJr9xCd_uo213{jINdGn^75^rBGh<{#uqfQuYcBb_ zS!8h0jFkP)<}7H`Qln|H|V#ZT{>!8fmQuWLzjTyM3f`J` z+}Wc9zw^!VJ|C)fROijwfcdy;kqb8#M559A2zGG3O3{+=L9COK z(y*O!RqPRx*|ATMVPCJ%G`$S1?BZC4qVe5HXGbn!$jS8WUllKqj4OfG_%y4fI7wp! z_Z`2zQ)TCKtD%QuAWhg3djjjZ7mrWBu@O^Ibgbwz-$oqcs?E+tpsPMGP%tiUF8MXl zT#BgSG=t1)^$8BSxRzcjphn$Yq6Z;^p#1w1tq-b4uD*_ka~e{wViK7cBEm7_d}M+M z_X2Y2Bg>W@ojw};_g`@}09+$4avfvtwWLbQO}UZae*N?GjnT2`QPk})`6~bS9*gP} zj8*EyanpG3KlN+MHVW5Bc;Ztd*puWMextsB-y|pYeP4xqDK#@Lno8 zsqtPG(OlAu!{Q@&oy385j9r`az1EkD)W+sUr%!;QnuJb}QnDE?BdV*337bhwYp_E? zO%rSS{!wA1Rd1pK4R3`-jowdAB_TE5tjS=rA0Xe)e#MS8>hxx!87x+cZibm+luDZv ziIPvl=44kmOg{{o8aa-rlu?O`zrejxuUeIZzkhUMEB-LQtQ7SN<%ju^N)HizaeI4S z<_M`QCYlSTZ7z|r5Zo9bB_ldC#spt8+11&rj16N@$zGz)$H>1Y6d2y{Y0atpfi^+2 zcCxRM#S4VY)rXC9r&QbUL0^N&$qJ1pGffRW3RED5xpv6IuruIbFfT%WSoF(b!h1xD zZjIcr2EK~mySlCGnubhmzU-Brl$&D?QH4dZd1Y{0QHZC-uxIJ%G{+mSq-XmK-euKG zeamYzc%uP!KGQ%eZ^0O``Y*(+4)Z_L1s6Py>4fsnmdm3qr#^gYU{U90CP(4A)Sj!g zqb14`94XAqRmc_jib>3i931{ZJ|I9^m$b+`oQ7@F#Xp zOsd?+sp|^aN}F=3!aWMV!lvLHy~=TN9gs5pROJ{pYwA^zNp4y~ zgY#scE7H)OhZwF>=7)Z(AdkxeMzFU`!kcq_walZqnP073&1d0O@ir;5eSvW``(pZk zQKwJHh=BTQZaXO3Eu9HOyOpG#+rC245F#j<*Ad?NdZ6BDW*W~c@!NR4qR9okv_ZFM z9w*52ngbK}$KdTqmL6WE7Aao{`wwe#UAgY_GEpB_W%BM+$7mvJn)L}*Z{agtjvux;&|lm|licYMv|0Sd zp_u+gCi7I>_{)!rPToy%BOgXWB#C?NH1zsvym7f9E4`bBV+l4re*TT%7XTZH?`;{Q z=THO^Hxo1GRdebjH)kap;j|H-gQQ-$nrW2MAEW~TIz53OtT6xhcnuz5fNbo~;kfuC zd`5UX;@-Iycix3(K@0f|T@vI`(OMKavlx+ZRe}lR#mV^l%c2AR86pQq1YL2lG7T2o zz_gL&~MQa$^_TI_W^naql1aP zLu$(UCO(~ZbFz^}dG*SOXK~vf^X>N+zV~#jIM{}sbGRt2b{g=tl^WFyNB}4B+kwy_ zqj^Jr%ciF{?2&qwrF6+eB$x=oFMzn1W=_w2am5z#vzTIo{EgZ+1&jW4w34IyE$b}RPAaQ&3OWfvliC-5!Lr|bP8-ju#STlBoOzj8ODp<; zhCf9@|N1$z7MPFSVqh*d*%@Y_;9SliIq#NP?Y+0(*8FRuH7SR}r)>bhek15T`t@T; z`*#B3iV*>@-kr`Lh5QMH4xt5;JIRZ(?|Bv5n8VcvSWjw^yv3Cn#r5P z6~`hNOlgSMu!F7;!kH6yci$b(-jLk;yEi1=TpOzbbH%=jk-?48G4)}q%5^FAUpnvU z&LiZd3u$>eEVJFt6c(BEtaTH5E?nM$JE=1O`1kI=?I@dtSTd6QV7LI<+>C_^Z*P{q zKjJ=uU@M<<8flF{;lmav^)7lsuiOEbPZlLWmJOaTM$00WxLFh$RbUZ%JQ>WJb?DDt z&;o*IEt*>QJ2Wb<`e5DBeAAk$f4CaK4X z$qiQ!Q)%jWa~lj(kX7w~f={yAw*Rhn|9QgKHJy_zX|5z5p}4{wEm0pheE}RuMlI$2 zRqLo1KgUf68f{ri?zmoQFP$4SKBkq={wX|)0Naq)VKjekwo6fE(JP8=dvk!CuI2yL zZlq}ALLv&9yG)iguh*x2fRM$~QL`#L&R!fzP1Q1TS(DJZohR^~!5?cgCBUn2ySZn& zN+7jKvA9`HkMz8Favh|N8A4uUq)IzKa0wt*mmX@6W$VMY>M8NvpAkHoZ+!TZLK#vH z+CNvvXPgrt2cLKqcOj*`PPwUXItHz28R4#}SS9b~hXc@kw2ifLODYI-t^o@YM_ZFp zQN!yYbgZoXjG?x)dyiAA>X94=yw2orp2P0vMG(xeTl3z~^@o3(5-yfqi}t=4m8qY0 zIyvHr5s%sboM_tc=40aQ1^;@>w~EXTI9}owH0rOMdn*?v#$5qEUQctQsexI7x8?IP z%=Ul=JxF%!WYL$#^dx;LnrK(3(X!I8XDVrkt1BUFc0U%0gn?i(s`w!etKg)p+gjjc z>krI9wjU_(HtEe%>02@CFrT}}JyYcV_aerd%6H$h(%M}P(T^KX{j#&Gj-#%S)T zq1|)lB^w#=Ek=dhaB4P|jmoj2Vg5@7Vg4uZuV5b8Y3XuU zmOMvu(yicaY1XFF=FQK0-~HnFHBWtBFoyp-yX?>U?Z1sv-AYjM!(0846IDqhc{C6O z?5O2-t-ldCO0WHutB`3qz`UGwh)u2df0#N4_R0b-S)bUpZQHhO+ji11JGMKvZQHi( zq+=(2^Uchidw;@to?UzGQ>*G-B$MX**764S8MCoYIzJ@~($Re4_P-w&JY4`-YnvI7 z@;7^$3=}tJM&7$?!s6tAfEV4r2L(qZe3!2LPjz1-Q3%^w-X!y~Ffu{Dn(FOFfTTFrH`#)>j|saO+f2zerN)76^NY7v<2``Y`b3!VeR++FIQ z;2ptezqYNV*x6vaOHIU&@WQC{8oJr@vti#~_11+v`Hi1C_Bfc1h95+R?pkU>@cbkD zs?3|et&kAPOF%Z7YgBwIldWiv{PJ-l1WHfSDp7?X9-p%P)AgnOfCjT3xtDSm9Zjux z(*+j&TW;b2-2`$AN_$(1-n`~0w%=@C>RWpJb zzGG_PFlGLpEZ@9%eZCo?Y{rr(v7G)~n9QVL_|swDZPTW9IXa`(SE>3($845<=SKLQ z3p3$f1&u*6{fc_Uik!e{-uGPa2`Xr+{4)ET=CUGQ4}U#*<`j9_em;X}MY<*SblE78 z8oA@qb*U=!H>lgJ^cov{E>Lxht(6YzNVg4J=0;1^BDTi4j{17F&b1s&(nXWq$um|} zlLaiJSFZO-?F|~r(I4S)l`Sb799o zd=)_{OHMi;RZ`;LaqO`}#l`_2eZjlm8W$n6gjxbRKoks^qnS&xiGm{GL{1`Sc*|g) zZ@Od11awZQ`HzAq8D^xF)Css65&i3(q8PwN3x8B>&sW$aR}~qF6!l7$f{8uGF3m;`*`gRP*-(I}K=glcI|Eit7OrI{=CB2RRBFQLVQ=lctZ-6oaecSS(N zg?aQS3ko>2ea1AJg^XJvb2HYwDo&9YO=gTGX~n>GKikfu;-->NO{2cWQ!T%uf=p@N zLX4n0-N#C5GAT*nu>RVdb47eu@_yEG-xn>hQqD5TmZ=1QG0qx@9}PA>XIJ-98)uoB zL^UAFTLuI!;ZgznS(NCLATV^Y%3KfPvm943Y; zAhxFAZvH~F#eHmBdNXdqM(q@w*ovzO@6FLR!@@Hrc33NMw%bk&G zi^T(@K!kTSwBWZ!zYblbX9Ft=6D^9%dgOCX_WvW~YKk*TICZGf0N+_v50>BoJ|XnS zpoQ&bwonv7ap{OkH(T`~9`!Vp4qKhBN#5Fsn}N5WnQmmU+&+cW2R^KD8MTDk_91NP z3VZ{9k!R~X``pmpEK?IN zWL)aV@YER3B2lR4)ZNW9*y?_vZ%6h8`VjpW_rbw|g--xAdsE1deaNaI=@pw`^;LtT z8EvcWLxtouobdN$$+=I=OTfLEb*jSqNm)zW3dwDR`a}<7q2S5bO5->~uaiT{9lNen zv(1%;Q~Aa`)o41?oLIA{5%Qy9c?YgYS@&fkOeP|(#I6uNQHVgg4O3lDNavSisdeJ5 zcEzXze)WI5C_o@UV4zSxydR+dV3dA1O29}=h(tn4Mj*(9PQ;AN!pc9$oq6Z_{(Tf< z!CMxRpu~oS|8Y^^1b~~=?C?O7UbQJ36Es}qZYXub_&i0GE?NyWKf=|%d9ZPV$ZR$3{~#J(q+FXC+15DUxM#n0v1herV75wywf@+m~zVZJ65UM^yzG($EaBt*olbJ`>SJM8HIqtG* zo^o{L8V_6_5;g%^DWE^rW4E4Hmv@K(Ba>RVDq)hYzsNCKd>*Lz-jZ{+zUeWV%D#hFir9W+r)H+25M(Ws}ts zq@gP$Y}(lJI^a+zEvq@;?9>1j(awo7G!ZmqOjyZ#=TMMJS?G~ zrcx?Mpz&KXxrVGnkaTfoUdFlyl5tJ|+=Oo;s@9wN!w&-opeLrkBch%fUEC=^>5DrY zxp7X~fqN3$N4MDqv0{+WL+Bsmy`I}~8S9^p(2zEqKo=45x_({bmGCstVe%ZK_(iFn ziWvIb+OO&tjXxS}{Ph9vg~Z!GE`foO*qQD()Z5Y2JZBHI!YM+ccimfF^p(8opgOg@ z>Qbe6CJ5rpVpf=WVg01D{T;*I+FMvCoIdXDn`!~ph*zi__0ISw|ak6ewC2+w?hrNOHk?pDdtzvB>Fg;14VYmS^i$o_% zN2tr;3(VloSH4=o+~#Z;h4rWXIFAibqab&cya?N4ZN4wf!l+7!8X^d(V6?9-x%eNE z@{(fiqB|c){>J`NbOzS1DtU@rME6&l(5+%)+G$z0(9!5~b4_}il#E&#*H&=$95ZNW z`k$EkWp&saho+5di6jBZv(qsptAk|QQ?ut8E#^sZ*ALomzTc+5U-M<6%?!kITEdEx2!kjlRF(m%LnWHkcD);STxYX0+yXxLLtS*MyLaq#Fu61V zxU&*D)GJ>-nUb=(+cFel!p%%H4VM)Xs2epgo8)yfoYm!;vTF)4qTC?1&B+vlSmPs5 zzi^h6dNwrd9?f`p7iuXy&m1r4H*Zq;82LZIIKjuS^14x)l?l1mCZW2$6@Z13lshXm~APlrzy@~!rdzz8X5^ANkh+*7!*)K0bZXc3`gc2i# zZ;G#i!jbm3{6DyB5{=#RVxmCd#ea_1E%_+8cv=Q-X%zqPbV_zypb~ne&>SPj3<^?4 z3F>fe+m{5#i#`gCD#u`ln=OJm)1c@4rd;rwB$=oAQ&4e8hMTIh;G3#hWv`XBVvz4Z zV$QovXd36yfiiWoPe~*}v5m>?sCR4Mj?y8BQ?e(v?=bdV(K+^^2_bgV2JDA46zQDX zF{D=h&@)9pj=d|7B(=;Ks9<_C>9U$QeDeX8HRS`A0Gc0#ci-R{0=I{jb8)1IqIY

^SF$h=vr3K1jU1uH|YeRDT751L8kMULY1_o`m7CK>w)%K+kUpIYEwB=~8W0Df_XDt4}=|KNC(f|ZN`k~S(895;aCe-K86ZYTkGv58*<$?fF zF*COeiv1k+1gy$yGFDh)*Mt%qmF_%_cdQ=2RYp%uF7nhWYz+l(jM|(mCX?oLH*{=N z0+qD6hNKwiHlLn2ubrOx6SIJ5H(TcQiPt*X z>~V4>t_ImO$O7|WV1}FC!cOIqo|`T?siYxYevxSvz%L4QyRz*xa@u}!J2?yDI7^6FuYtL^sXutsEIS? zmD*Sx$?v^JgUVaEukC5r^qhQ$D&jTT6`Zmz=)vU(Udz;6bt=3r=K&BLiBE_Pq+65J zhC^NFm*CEv-cvbgP|?FIm0%Cx7+_ITiYU!WZ-EOmeHSG5Z=y=5ASILbJ;&Hp8nzW} z`%p9|ag5K^zDKB?4q8;Umn?V^TkZ{bHE5thQA2+>V9L<5sq*d=uM#)RQjKgAbJrq| zp;_E!z12%>Kw8qO2%{*|EMU*adOdgPF3PuFGPGHU4yh5@GO5o-ypp@TYd8gQTj|2g zjO&XRAFyJk2~GESQdZ1?^(}4AS#=yg4=^?6J?3?=xTV3(2q!whs@zKJIMIBJJJp&Q z+%o@yQiR?iLBdP#MQ}kTPv1WKnHhC&Wow)Wh~0YO8dGPBCoV_g8-x2?n@5QwpV6_|JoDGn7-?jxXEd%t%nHgr@qzMb0Y{o;-t<1? znRY^ovs<>V9W0_mHxkLb1Sku)EJH9VS7o$6N>5EMuVx65J!bT=PJ||}<8fB;X$4tGKCdrov9uecDs7EX!KXR7hHy<`e z8w}e_w~c%`S3-@EFr=tC&Z*tA5tIJn{U(8YpSQ+-v!qk0S^?iXg-qFJGzs}_@3v=g zLY&u8D1Uv&=z49kRXjBSRiaue{rgN(ZYV(4K+q$c;hyTOlJ_TFCE4x#nqrYL6u5#w zU%bAcU2V*n_MWC(VkX|V6P!TA`{FPeYeVT^QC1fKQ*TkJXg>ZmLhb|or<=yUGtEd5 zy+tE@GlFj%-95rY7qe(xRHIPggbuIG5PDg^ZvSwy=(4~ef}`AEI3v@EQT95-FrCZSUqLZw) z1gTnu)NU}e4LNnCH3WP}-pX!?$Kz)Z1|OYvVWY#Wj;S0|EAC5`A*1AgfvV{)&6`rL zv?dGd!pjj}T04nPkh`A(%R$LGVXWDOtk9P5tuQrSJnFwE($P=`ydsvd_a}49`wn(h zqi7tkxSPcMZPCOGx8!(thSl2pe4LDS73(v?tMnQ4rKrBav>g?F=}z9Z9{I=tQdryN zsqS>vnY#|s&ljXpg2DUEfXYU&3Z7!U2m!A!WCQED@PDSs@>?ZT&J^ACWWQ~l}b z2@|Q#Q|f^O66P~(VfL*%f+Qr}9r0N{ z*or8oy*1gav2Kzp8$_!;;%gU^sBVlH+WiD6RpBz2q@Yoz#^avb_$3QJX)?-|bxk{* zdiaAXN|i{`HTF2Z;rKs2Ai@Z(@o;fqb!WXlR%Iks+q5I`pjOniP8 z=DMtdkJnx!wGt-b+cS+S_SkicQ5>#*{o{hywwp%?WPOVyIDISTT~(J3l%H?Txq9n> zA2)6^FOth3Ql-Act*TFMo#PNuHF(BWK1}H~)E%A2KXa2n0Z?kmQ3qRUgD502GVf+_ zy_uq#^UORPe|us4O7M4LAz6Idv%E|Dkf{zh5wN-(Y8dp)`|6s&h=F^!Zg=nQnhmQf zK9{y?O;>9@Q7fx)cQr#(vMiyIhMb7};NZJr(`#U3s{Ea4L28&Utjz@yJ|!-4VwPT3 znw#G(GsAz#vQAr>6E$Yygc~RD1kuGCvidRYI|<|s=8JA79|fF@qw|2~)w2`Hd&tnZ zjBVlu3G{*cl1fwMDIYazC80*N+{FaLy0ymyx51Upj!=vSo|}L0gPY*bEz+8^hEh9n z!)01nosF&(B$l*2))3-2(;u!52 z|A9(zsHq=p$TqZ^;F=2jC8zRL*O?_c*Rlq^?*UeC%rV^;^FWhE>?w#O(c_#-HyHxn zoJ_cwbGMYF-M3)qIj+A0pA*3nz;t0xJ`0B{eX@K%>Dm0iIG&=uC;kDG#TJ&TZ9n)J z&iIT_0%`I28f@I7#xZzLv5eI6eM-x3zEJDh)yu@IUq9dO%a)YqKN%UyI2qF00A~Fm z;%N3xHGxF5@eeq5tC_)1^!MH2jd%=+=+OB>uxm90f>$7JeN7U7;yqZe(DzMduu1?}9 z(j_ltb(GnloJ0BSZd@Z@eF+XZ&XdEL=Dr8tePVYt1K9EY5LQPruuPLuZF9=q@YLV= z{*)ebm6c^mmowb0h*^@~%Fhsj1!v2Fb@Zp@gN7T?8^!AvY}wJ3;rZ?5o5i#*RxGB75lL>KXSLoK4YBI9Fx?lWqn9Gi3gQvO8+Xb1Sz zKzQmK0!*S;EVVhSWjQAlyKJCe#a(1|jc-OW91Anxb&aOJk!jFtDL?6Sj+seW7x5$Z zm|nJ0i%)R|KRn}>7jV>QB}$eE*CRPO5BkTE1UD%QQh)k+IaW2-)E%$RA-IC)DWp{& zi5DRLx(l!LOW&7XsoBA@*^HaL)<+4N8Wjt{fngzc*VEde_2pZ>+$|m_bH+C}Y}ZVO z@5I8Hhg}~+7BJb>9uK;4>5KzZb$qEy&^b&7+KSJ1i-?P;Zl+kI4G4}rr!KzVvRdKoV3suA=;pF8!@10L`u z{@)kIsLXJCf(tu7ng&HKkr7Nh%}13kSwd`G_e;1n%4!Q2MIPC484hX)&CYf9Pek{( z9RVbT<&S_PUjH(JO=Eqo&k=P{6`R&k=CztF>_RgZ*2i|e-3)0QK;L&d$Es83*y*^q z%E>Z!ufCpP0|c+wqn9-MWZfQ*ZysfpzLdwSG5y3_ID%zL)BOm8j1!|!B6=|wf(4?W zmtdRkmrU7=dX=?7#Nf6S-6V#d>?>+FyUl^&C}fTN)r6g>!?Dxe4b$)xbsJy&*U&*^ zA(4m2hKek&q&dktZGJ@?E%?c& zr=h0){td&5g&ZUmyI)fpT|kBJk`%m!t5;re6j zN_^ys5m91h`8Pkpw(J_BG>jj{CAT4H+)9@<8~`&X51L6FAokgjs$j$2z)MR7qI&I52i z!~Fpqh$w2=S(U)N5tvAqV;#eHTPS(ReH+jd(7tN({KN7IC5UC}@PcpNjwah>@1rQI zp5oWUmQU{w?k_0m_I*np6R+#6V)kyu5^YrS zw+5aTBVQnO*GG?|v?i|w0!YNBu)Wo?mJ=nIh2@hG%@iKrcHNa+(DV($3IHp(%KLsS zqRn#2IUBF^ubc80Rr4n}iTWroSC{0j_^^fdoE%|YD3iA^AN~}z+XH?*hd*BWmS3ez ze;h*jTr$RyYkGovwg@a4;6X!5;Kz%h`0-*ue%zR!wC8`Z_y4o9_#ZDO5HTU2u)hCx zexLDwtr$caO;${=W?OnJdzH0_d6j#-={FOZD@;XV%`Hzp0(be&nCX%k^}-W&_F|EmkYIQ;&R%B3 z{K!fNe952~XY~F^>c89IqQHjyU6r+h zlH>tmnMLh>qGq3ka0wzs++8sV>(x62=I7i>dO3l>JICay=k(C8ba9i!1&+`6Dp|HUMU zW2zVCdn-qaU%VmhYE;)2Ral+C4$T2E<~kY+9JA)?Lnz%r=?;7^L9i#Ca9Wy20tvr7 z(%h{fTAx~C>TIXK8`!r8fKlgJN2;}RIKfbQCtS#@CHofY8^N^m-@l<`*GnkU0#E|! zn32xkiBl;7D0#IIoHd7Ea7)W_Fe7_q;`19SFi=AUabJ>I;goTpObFltfEH@>hFiF; z@PfgJ_u#5MSWr8p2lV$oq7mq?s4J)h+XijjUgs)U02)0_Vx1%+psu~!| z%9^SC^21QWd?yeev)>DdOR_m5hFgu*$(RF(JKB&e^VjcX$5^s8gfMK3=JR#WPks?X zS?@uwO;c4iWb0)Babo7-RU!oTt+B(u5t_~{_B(%syBt`A;pb?UXB{y^iw}Xdf&lNS zrMq{%I2i@dDjlSQR5Io)AEi-A+X>x+!!O2}z%9tn1a&?pmsDS~72vkaMnu%9eQM(c z7~>=EP9a23K?|Sk){Qm-N(WIfk$cG2?jF&1RfW%E6x~ETXt$thvtvoMyI{znEEz?T zw5#is?5Ki!iY^)UmW(m4{cx-`h__qq5k|rDBgV*t4VnA#_t{-2&1q|$2#9%6WMo7r z1DY5#U{%F4CwY?f?&j%PyDTsIq6H5clOj3GjH-aUhWD7x)q6z?JZd6Xua|tffmjJq z3G>8;W6DU>AwX-EZP9P>$^3$929>^K(F2mhf%~P8)$^E&+hJ(KK9mN;7w)KExdfZm z?ilI?@5PuzA-8BU8H)lHU+zlFVpoxCia1mxJVpHk;;m7NA@WwuiBk|h|!V-s;hiV9#0dPh6D5xunG*nwOSc#2P#QEotf z_PVw(R!iu|FW*)Z6mce0xrgQVcFVv9-OADKNBKaH5-7L%plCoqC?O`V$V?7O$I(id zmYVF8;p{z`_u1o7H%R^ZlJkbI!bHb%YzKyLd8nh81?rTZidcQfefC~tf?Uxsz5*JE z=EZz%4*=Dbdv*AA^9#J+rK0zO^r6I%7^5Y#K<2Tf$n zSYYCAVW}0^!lgD-VMRB!Qw61e0HP$xQEUfFUH)LSy{lqu)xzX{Pd)1#E=KxCplY3P zGo-m^kx#)WEqZENd%-gwCAB?TY9O};9g{w4ASBiaNWI#5jNV-sup9wqgFQTZlz=XS zlo$ovpB8O`st0{nU-e<1U35nod@g|qG16zbjqt=iB}lT?UN9XM!hpE;EL$bjO=(YF zzj=SjfwVf59Rxo?4a``?FM(*24pb=KV&_#hYXyR=F5&Kp?8VL-yks{XhngyRW;im1;r}+o(qq@=;p#T zXa1gP0WCKUkACWqDnQr;IXIRalQ2S>uRFO#{=^e;a|%oNz1kO&ldY?EKUhXZ5Jz|* z>mFc8(ENd5iD?_$X@vLew7A_V>S7Txl#7DTi4^e5i;h#k!k(?^DbrtM&^A9=pP!z) z$7)J+BSV$~Eu~3%SE47CcDX4L>R6@;VuD>D^ulHG0}fxEhw3i{M6R7JY#%I_e}Em& zYBm2)gkk^q93UG!ZeJFVxf6sf7vN%4KN^rYB7ZrIkEms7?9*0OH@ve@u(N_d;AAL( zlCDcUZ~lxf0(JN#2Lnxn`Zmd3UrRroeKc|nc6GhJ|HTC+h*jbPQPAJ)04RedxNpQ{ zKg_4rpf&6<1seyFn2aLm>Tu$a+d+jsjp6cLHl-b)9Je_+&O^^ypV+e{uE*QNI5{i0 zWO`l@2bd`IiiGhJzPY+jmHljIna?(JJCTd3#Jf0D{}%CUkBY~l>N6PGecI$`dO7T< zKd!Ig)lQtiSmRT`mq2spUi$cG)|a6xcB7&GJfL-(9T;hd7zw11x|L<3q~85!g)Uql6s2m4=4j2IyTMFQ6ZZwdId)joebKZ-TB-Ng=k zMb{jv8RpWQscFjBHTq5F&3HJeNbPE=6;VBq#K(H=n)MgQFmjn-I#rLZ!gSu?r*wow z#2X`#?BqB^Hgl1Gqn;d>$=5@ir6Rzy{rLyz&|E`Ijy;s~T|ciV29jEKEYP#}@QI$8 zgfzR{;8E!PAl02=Uco?;-4sUkr<7Zm2w;PlKnN90jp+$a)5 zL2207Ne15pPZq1qkJci=YWRPEkFnXi2F-`RgPZaY_m_3mNI5np%MJC-#}3XIfDY848N4IFd|pwrRMXST z(aJ6#JYi((e*!}Eq#elmY0sIW2E9mY1H{aHHi+A9_M~$GDyY?(84I$OQBVp&jGzx) z&1_oeQ35D9V6jUy~6%K2*+f5Es zB3@9*hxFrZHSf?e)eG48EqpTsX;L!INyfJ!*tC~A&k!?l?Z{!G9)c{s&@+*G&l2Qc zCENp+mLOQ6h!ZucL^=OPR`evK@zwrPgG@TtDP$%`83C^#%w|0*_77l!fOTKTUiO@z z8Gi&~pgS08;(sO_ddEi57sPZW@X`-+lV6POyeq^7q}{?0Vn=q$Q(P8R-fSJ7c$h?g z<=e{ykNhV!Pd&-(#jwW_j$G=R44Ux(uD5&vjlQ(cply{-&3rN0$a>aoq5o0Xk9~Dk zF(j{4>*R(N5KRNFC+rwmO!8v**f)KVPO=%1Pi1il0<;&U)@wf0RSVLO9l@;~w zBzr6b9v|ds0NS9?mG-S2lurcM?bakZK!a}BijiWhwaO98z|QT&#GwvB`gc=?mM_^MK}mfSMb7{T7@%#Mn@wV3@4Fw0Ex77XmD=4)K2l@_}YoOeQ&W1=GvpQPim(xpiu4faAMiSvb zcFK1$fhm--$-w)PhP0BF)DjE=;&5IMY;|2K5N{7zC>h=hPbS5A@|_1>Dv2qz{uV=< z`w|H?TmUaqcf2Ya5@WpQz(w+)HR$o|3qo=m7HLhZ(fEsRvpAa>gZmS@V zHfS%j90ux1@$bn`MEYc^fEh^g0Mx###VlRJC`1^tzqg_R>2Owj1rgF^fLkX7-pn=n z18V+PoWbdFrN9_}Iif0>p#E&|<46Hc<7jMKRPl*6(A`p?)=V zk5me)#r}{9j85J$UqB^N9R`{%C{=H=BX^cipJiCt%$lFi4p&%M1Quu!myub)#+Bpe zqLxFEO}G0cgL<;ii4{*!S-}xN(U{xw!4MeQ z>J)^3KDlDe2(V*%0{Xp5X`mlAF3W85gVYK|sc52&)g#y}YifT53<{y09r7B=at2bw z@%%!Ke|ixGiD3^oS)0^?Pun{eJ34qA(TivmbR8%%zIap*%NO2ThYs`-nxPAZ&EaNv z=S&%)0x02dlHr^LJXJC7=@=7y1)7K!+LQFF!yr>P+hnQvL6vw2d?I7Em2lwarG6Ou z%VH6#LHD*zWy%@m-2D>VGhe{<1^$w7l<^YRV|adk*F{Rgd!Iwy1oFtGbsD17u$V9C zVgUf*hL_RVgQ(n-zZ9YPmMrM7d;ErzWogKCm{`Q0*XOQhg=P?F>i9gri48c>DO^{w zZfF_n#@y7P;4bWCa-0{GG8OktOGK{IF6J@PEaoBdYS;)z#dt&faszuJo`FwiPhTpa z))^^79**^l=oJM59>_5cxOf&7nP7;3`V2Nj!;+B5!e0AMg2tqj?}u7jwM_BL#LHLH zTfu)A9tO{!**Bm-dcX&}{o`pqi)gRWhmF7Pq$YTf?uK3>pZV~6Eitq;D9(7**z)hm zjQhA_0=W^8Cy7{5LnR7#{;)oPNb{>yB-V0gR7Ewwv|!Ek>3)i~bE58EI{$vm1Q=cE ztince!}4+l=xY?>)W@+19Dz%qg`U9hu*VvM!gwgoa0>mR&&wUjEZteTullxufbr+W zC&?G>NQW`E5B{q?*2h`bWeyjVdGGAH|L8r_23xZVp7x~wSa-_O)Pg46z86+bE#mhY zP|PTrbv925Tf0eY?eaYB9*=7qb2G7_HXK?-?VpXb^TH))ePQEyH%qEHL8%;Gl+5aZ zO;X$(XtDf|PN_beF-#%S{dIYW0BMdeNU$-9W8AdW1op-)#$;#DOH2#$Dduma}+H{$AI~ZAk@?- zxEHqY1YJbXcVa-P0xj^vPkdhQSqZEwkIRdYv{}wtV_WbPsrF)GW{nY89yehpL|s}d z#vrex8t1GUQ^OOeVr?&<^!RV$IqXS2>zxwBDFC?HzX&X7dN)mdaOmm?=Ygv&70}9qf zJg&i3)s8fXZJY(pxt7!}x&#RPH<&f1NgSD*-_+9kaAS9s)N+#@qCiK0MADyh>S#7} zE>P->Y73LEKp&V6cr5>7A|dQ)TU%(adApDG*LJ}G?8i|8vR0- zOc3rb8_hyYwiPfWiB=G2NE1C9D%mrCb2rc+kP9|7#vnNe*nr=L%6*}3G-6SP)cp+~ z4AH>H&uY-7>PE!zsz`SpR6!eBz%I@-Pu(eNX$!K@rqeja8mx2?4@#TS$2AA>T$k+k zjFmowd4HEW0<}$m6G){&uhykN8UaNFY~M;Tn2CbWjQsR;`yHVL=}zqRK~ZR-%|-KE z#W;x63NVqXF!6vsG>R6>6yd;tyr`9-MUHY-Jgp2GH3F@F06*a*Ar=kxR+e$Qs#c{< z$#dRX0aDT&8nBe=C2o2!>0g0L(b@AQRllg@;H`9#BDcUHi$4|P6*(WI_f}9BC2~t( znJVn!tcaytcMev(^k*=QLJ6aZl>l?7eq~SdP@k-arYiw`zy&Er7l>K!)bDQ%*?yrwbyRv1Xm7{jxcRi*p*n0$6P`tGt=*h98l*Y-+1Z#okvT{6?thG5=>%hi!#w4LY9Ww@CAl@D_v|q_O zCoRXu&zx#-)B%?)z&jC(Ot9+N=vRV0?GLu7*n}^@ zc>yh9OSca6h^fY;1K3qXOV2$yOv$d%Cq0EeiNg>+m*HhaZ{K{>c0% zBMc1o-#C*0lKIbO3IzElCyYo)Y~%#W9EkFB>zPql`G3?7B>*4=w#;zbxstVD$+2fn zy;Qo2+T_3KL305o02&Xmi*~P(iZL4Z;gd0UErk5e|9mw~NT z0YEM>%CbXpk+VAtc>$4TBw56+LV@40sa~jolMpoVL;%maaF*>??GWW7lyGf`9Wu_F zA*Cm|(FcaaqZcNY0$eNa;}AJ~#45*wsW$_!%+lc^`V5#tW3B0SC7U^eLQnQOxdg0| z5sXk*Jym~jb6=lwh+x>@Rm)k#>=_D6)NC*?8}jhvl^C`)N9*?xPHS(FZMI^MBPdx#M?i?PWf>@ZO%rRQWs5 zjBlC>@;NyrCxGKl@y%urO=bC=M^L>EY*D`?MDdf3wvUO-Eiblj5Ye^UYYe>6WbrbV z9T%X-I-|_7zdI~vd26v(Lp)%8U=l?h!FcaU$Bb``%b43Pj=OOnQ+XKdLvC#PLO>u> z@4>nVp_^l_Lf9*oOhXl*Z(4>fDph`ub*%?j>L7lROz;~QtC-+-PJx*TrVvv| z;+@Ik`KOG_XvVq+A2xi8Ry%U$Cj%q5`#;5iuGZn&RF^gcyPU02U5!MYjIG+1j7*rC zf!F%UySY#<(2znwxhf7U>#2kyF8J~*_C7x3cX|XKYWe%~Uoe2$U9MoV# z0}xG@lX7p&q_ZG+MOtnyteLh&*U51TSFFGr#ZOo#b0zx%z-as80$t=B{Av~64q$A! zSZG97Wl(-}MThj?``#aM{S48c>*W7$d?FH|G7%FpG7EvDk+7hX{*SPJ#w;YDU0ezM8;HTWM25IOQqM2zcYVrgj7A8*ZIS3gVm$ykUA9P}WQ=zM?g-;E7l} z_8lr=G*OIi5r(QVg5NHWAOI;S;B*h95!x)Ln^a6-H(>sp7n*KDUV5w5aLHP@>o{&o z9)Vz#Yj^;^SR#Chzc=6Sti{P2kCGIqU|iy?W=L6=d@(d$j_$8)%S!BGHea!g=l9+6 z6k|Bi5&9HTD);p}h=NO}l$N!bs&Qq|M_gJ$E~b@k!Ete|Y7pE#E5&1{l0jmA!#6c5qqfz&kf8_XRUf!1VT!ya@E6sV&DEv1^sQUvo};#PbmBMnv3h ztLu-?qxpsC<{Qq5DpWZ9;!g@hnMsKgQT@LnXb(YqE(TB^^~MZTVI7n*gARiP4M_iiz@ zxOewaTOVD?2bCN84EEej`n)X%sucQPad3HMSt{_%X4Ew1m-o;!$E<~}7pv&fK>td}-ou1--?48?3$L{XvhJCWaz z(H3Ix##yt9J*t(3v^x90{6_S}nGjy$4L-|iDxYW0bf>eU+;qDb%GFcY3epPlxBpK7 zd=-Q0i$`L->sGQZ)7914-t4)zqPkALw$hY!D|3;fBObC-xv;Hm<*W+plJDr~bB~aC z&O!L+InHyO4V>bh2sr*$^(q?o_gSh{fzC(6H{KUHGKaT*!}Xt##X922omqr-XtVXJ z`>LlU5`N3Vky+A0k)+)cmEp(%`AoMrW}sFoc?6dI$`z1>Rf6cl*&(>c+P7!7Kn`$E z=*~2rtf&6~QM}_|vn3}64Yw%9h?4%TZD!gwRX6p~mWy?v3p3*^BUb?DInD!s=QtY! zV;+7Uy*`AW+0H5q2!8M>$8Z1u?L;RS`iK{EJlyU8#5q>@=Q+lHK7ujAOJ`=nf8KwQ=e7rzzu+zR>H@Y5^Z4@IDh7{oyG5IsX7y zF>!OBo^YN4#A4j@pIi((m0!`T*|}{k&3J&dMA-5hk1btoB$Di{=%pEkY(q=z>wNIN z3I5L`xWPm853vB`ianiY9~l{1o9R$~T=IDMU!j2E&)LC?gX`ho>#sYXhv$KaKbPOY zB?;qRMZ+AUt!P-zwTt(aH(i4jP%jE|S$b&6@zMHwKeSH+JaqNQ+rHKOZKWyRMBsKp z9ef^@x1VcwJlBAXW-q0Tcpp4{4~9SM;9~y1N%>>OCne9#(^hK8nle_MoM|qRN}D=` zcLR(^d9Y-_rGs&t=Q+s!g8BULvya^Oy+C!ZmA&F({tJ5E-^E+#M{8}CzE{K@6b`@f zdd^>yDfxR_Uq$Xa;XM2d7*7~}{ss^AgXDj|iYVc6BJ6nt5J)*v??i>>_~j&>*Koa`_-8Qfm^2UoMBx3d=&=@as43YY%S09O1epXU%>J^`+J@-tbeixInd{?I$%-o zk}Wo%#H}aKMrLwZ`NJkQ>5D^WN$hXc6~fL`LPr~wT7QVZIUgN4IKzYR&BxdFxy^4O zeO-OMdGq~{yx<&vSGk_Z^7S?lNA6LjpQP`tU3z-x;V8smM^bp|Sez=!^FOd~A!C9- ze%*L%I8P_zkLl#`$MtdjV6XcOzw42lkCFbdm$f)eaEFD@OhmX{mhVi}ub`L8LV)&f zK-a2Llb*fetedk`vvpz$jN>@OJx(ig^^C-yqucaZPX`Di`=43HaDI6Hz$ZJL9z$lH zp_`rLCXKDLbiCajd=lB?y=0-Uk_u5yYtDPtN!^lKXt0EI6=?5A@$CNqQq}R{I~#4u z1&^*iHl?IrZaUFN;Ii^~92`G*@>a)#kG$jOjN{{s<2cSUj9C-+f+?P{hDZH+$j*m4 z9P6EPrg5Boah*;D7^5dX{{UrmlZ+Z~_CT%R!3`cX9g|mEU28fGy`Oe zdFx#0qW~GlIA+7`Q1hI8AA){6XHn|*VQgv+c*AeJM-7_RPsF4|(~rC##Bxn$KsmI^ z?7e(+QS4rx6LRUZIc)iALY4+QGjs|w!^N78?QbKmuM!#?nrmmQZ{__o43zTT{eE8e ztsR<-z=BqO%vzE3+~GJJt}~YT7zgh-`CR9YMiLi0sm36Ep4{O$&5Fc~?VY*6u5qD4 zdt++c9&vq>{{Ss*o}_dC0Aa45x$i?|!Y=m0&?#(9&rnnyJ^Yo1m7RH<{BzTa6xDf- zGjepAdox&`csE<0(_ByZ;jjMy+7u&|b53{$hJQvC2l(TBaqt%c;zyh^;NjMnsIhK2 zI2#D(?ER_6{rxjB&R7m`(x25~YicC$Sx zjpKFowW~S!{{S3?8r9s^F{|a7)tnTYbv15!{kuPL!?eeK(S;gkqYa6Z#(PlUApVKv zfW-uIQLFreJMX7(6Y_cE+xZH^iPqI~!-i4+0Id5@`SeWc0r~;g{{U*DyMGI^#DJq= zizyLzwb3SgC;(Jw$Q@Of*zq!|)oZolWfgWr@%?ruIZ9TZw#+V{@yR{i6?`;i8e?l$ z@q&Cj==QUUHPEb;Z0Mtytm$cUuMb57EIgFe7&*E>99&zkGOvrh=xAl)V6#zII?;O0 z)gd`@15=lB@n6^Exd36bUyow`BYvF%kKih1Fzsy~LNxDQTD%yj2qp&wi@0u+77fC( zyndBNuPR*Y2%{40$WPJNty3DJM!J6~^}6Tn17Y+jIr;O4~v-wqJNUBvJe<7dB4VEn%QnaBoIcl|CvN2>doh*=E6zN7{ zDQ2KI<>d}_fBPz_CQW^|QXCVA>WEGf9%{qM!U_(dT1ld8$jRpCDgq3GT2>QT1EV)HB)@)Rb(~*rXCA_I5Uz z7763hUN>G>P5RJMicbu=u)-8GpZ~-FG!Xy-0s#X80|x^H0s{d60003301+Vr5>0n^Fa0e#P=C zjJfD6%|WJf)L7333v5BbKBA)#2%jEX7CeConDTWyrCZ z7iJ4?U@Uq|8wE+JBHMkeh#AOcAIf*?}J*N_|h z%$DkXd=#E=FQfx;Ca<)?oI!I^y$G2Hq4=6z%|_ZTzvDICj~KuwobxpqjxyDWW^><& zs;DRy8Nd`w)eIZ^j~ALmu!H zW*OC7i#^x0RV*+{n-E1NzM75Xsvw@6LzYm+$9ODkH~H-y{r>U_*OZB-ZyDWoIk7#P z-UVP^N%42Vh*4M)0sGg35J;;Auwm#c;mDmi9lk7@Cce_Ci4-`m6lK%{BxE01N6I|a zQHm>cY~*uLmd_(FbioisrnFkDZhnh2wHs&F$T=O!=`_PB;P?UL1Ov$)v$jlJo~N1Z zCG2^HLr+YnY5uHL8SQ#{n%ZirrR!)1gIKBVgQ?iZPYO!n#Gn|O&uNeZ06OGyL~_Q? zNte5dib+-*yMTF|O+l%s*SmPI(YFA#SrjLx#AO7((Wq_N>D{ojkvK6d(Lxbu;vvs zM$SJbqcIA~NE!NtO)_+eG!JRg;D(^VHXx44NPNIq-Nd@wE4j>br=}UySlvUQu{D)} zyCmX=Fb>9qOU7|=4X`(neR;10V?8)U5&uA!OyfD-*jg0z;`%U2XjvmeK2JYh6+vXKwp#p#` z4_Yy(vD&|KEunqz9$K_1nO*J3gAsL=+D$^h1+ z*z-kEULsYaUSzE&l*{r@HwArSU9R2QkS|aef_n zUf*v6H*IyZ#xFHBsA?rO0vH~&CZD`uo>O*3_l1U;V_mPqtj4~p`S(2x^!q?t-4Y4n z#LxkEP}Csx>l=6eG%VYL0>oLW+zq1tikXV z;m}JaYO(=%Q(a{S#l6*zL|wXM`A3C{hM&I%F1G7t)!ww5dJVjoU&<>^juc(ZZ+N>B z!zlm|IzX!WVuL86b9wIo>dd-p&>m`4l~%#LFuBki%@C9=s0$?X4hWjfTm9hD0>NYa zgAl6&N8|Qyd8_{b#e)$<_lAk+B@tPk*Qol9ZSD?9bKJ_akzXMAi-7naj{LxrWB@kx zfZ+2rA5nC$n~jCJ)OecI(_qSK=!k8cl6(d0Fy2UDR3R7ye^fNXp_T7OruA^XW9Uz4 z;+ourYt7Y>!SOA#jn#je_!N_Pp2`QRnlS2*{{SXG_aF3QUfzB^9VOUF-m6a6{YU2A z^ArWFQN@{)%+d@L*gT1%+K;QzS3h`mYod=S`{ukoq|&Xh)u4XDx}SiZ+q!yuvk`eWNQ8%9|bvc3#`{`D?pPG)(|%-LRlT?{r;na`herg1H26U@fy!wkg}W zo2XV2QQB?IQ5UFH3JN49jmjc{F$agx|Y)*ayYZZJoq~)7m#bHqu?w7 zXXRY>PiNc(Ze%U|6H`Y+VQti@w>|MUlHmKLMN@6qmgpz6jW#5WjH(=c_Vu39ucXJz zbQ!+U$pk4pW&&BY9ZBpOfc*i0p7aTVkAmH?X6=|TdWdZa8cIL_c?UoQA1?#M_^||J z5rQU*C$%%5d#`p`Oat2i(o{?6qNuG;WFE*W^)mtYK-qK6euc=|lC9A}lNIW+xxS(<;WgbcsQ_eu(NI3BTHP99u1Q3S+8iYHNgDB_hJ8=jIrE zNT9%1Iq-H{>qeszPba_tN#xL)`^Y4*4W5*=eI*JxQJOPME&y*>Ffo6k3A5T12PJHe zvH3&e(1Zd2d%?uSb*K=%@9FqQVws|(k9wm8Xa4;O?^we8teBwMe`fj3B3B4 z;NXT{*BB5@*~TEU4hI^}eh#xE<`Gbn;zz(B_>N$X1@L3FDHfp6 zB0a964<*?IaTgVfI5BOA-hes90q#Q10_cWXL_r~|i$5vbMF?bbfU3P5VGTi4P!_e!TP z`(~ha+vcNV(x9(Skyp#mu$qHWfV^~oqPq*h0%;*e=4p-K?o)I@>BMVW#SilUK9v-# z$LJ5nAz$wlAF+x@gNdr^>Y~lSPqhZ~wNN0Ar`N$JUPa9+6*S9UB9Q?Y=^l;$05F0E zVv^Fn!gBzwb21Mw@nht^Yp0L)gT#Xn5$J9yA7c%ObJ%s7R3Ow?`_d8^WUc=IiAS}@ zDP2~3G5oa9Wd}B|(rOc?cs=|!-zS>w3G)3_)Q<3gMGWHM259eU2K!m4926M`n5~1< zKueW?mp{OYNgQ>rQ!?BLv~L-x;)oQ&>!+;68vJ}l;~%k(Slwq8;3yblTTLc2PNtpy zE_qsDjzq!l8_U$RKnc1v%skT$#%P_F^%dNom^SJUt51SGJBeUlD1SFpjJSOeWA(X0keW(4c$&I0u=PV4`{$1L5w4dgk!X7%s3HC z9x77$UBwK;j**Iv!f9FV*)jJ0&-xMA$8cd4-i^&wKYSQla1?QgUi8SNLQ{$Wd5=Dj1E8TFc> ziRuR)9$FNv+(oug^%38+ZO5GAA<4>%s3SzcKr>VpsdR>1p2+s!PwlD~c0rU`(!>tY?7cGOu7zto@o!l9!il7r*+|H%2z^De= ztmY5;vkB8%HVVx*ZB=4Re$u_7KGfREc7|&mRA&njLLD(=o!gX<%0CfkDiFh|CyJX+ zFbTM{Mk~U|x>b$1DWf;zwMKo^4kMLyQf%hx0LF{z0_3IdhLH)$~Ny?ZgiNw(!rJ-6p1rtiW zR|aYwt(d(`Ao2j|G^vQa!Y#LR5pr%d5k%igh@qJC(kUe8Zwobf1Z-OBCAZ!&qG$ma vR-rYujf(GZ?q@imSdX;52Fa|=Fxr}0j-;R5%qac@t6%pyf{k9|*E9dwT&&gY literal 0 HcmV?d00001