From 5b44aa6fa5738cbf9c253411e1d8a3719a9a91b0 Mon Sep 17 00:00:00 2001 From: zhouzj Date: Thu, 16 Mar 2023 15:07:51 +0800 Subject: [PATCH] auto commit --- .dccache | 1 + idgen/SnowWorkerM1.go | 9 +- main.go | 29 +- reg.go | 56 +++- regworkerid/.gitignore | 262 ----------------- regworkerid/design/regprocess.jpg | Bin 159315 -> 0 bytes regworkerid/go.mod | 10 - regworkerid/go.sum | 106 ------- regworkerid/main.go | 91 ------ regworkerid/reg.go | 5 - regworkerid/reghelper.go | 195 ++++++++----- regworkerid/regworkerid/reghelper.go | 415 --------------------------- source/.gitignore | 262 ----------------- source/go.mod | 8 - source/go.sum | 106 ------- source/idgen/DefaultIdGenerator.go | 99 ------- source/idgen/IIdGenerator.go | 11 - source/idgen/ISnowWorker.go | 11 - source/idgen/IdGeneratorException.go | 18 -- source/idgen/IdGeneratorOptions.go | 31 -- source/idgen/OverCostActionArg.go | 25 -- source/idgen/SnowWorkerM1.go | 252 ---------------- source/idgen/SnowWorkerM2.go | 43 --- source/idgen/YitIdHelper.go | 43 --- source/main.go | 52 ---- 25 files changed, 184 insertions(+), 1956 deletions(-) create mode 100644 .dccache delete mode 100644 regworkerid/.gitignore delete mode 100644 regworkerid/design/regprocess.jpg delete mode 100644 regworkerid/go.mod delete mode 100644 regworkerid/go.sum delete mode 100644 regworkerid/main.go delete mode 100644 regworkerid/reg.go delete mode 100644 regworkerid/regworkerid/reghelper.go delete mode 100644 source/.gitignore delete mode 100644 source/go.mod delete mode 100644 source/go.sum delete mode 100644 source/idgen/DefaultIdGenerator.go delete mode 100644 source/idgen/IIdGenerator.go delete mode 100644 source/idgen/ISnowWorker.go delete mode 100644 source/idgen/IdGeneratorException.go delete mode 100644 source/idgen/IdGeneratorOptions.go delete mode 100644 source/idgen/OverCostActionArg.go delete mode 100644 source/idgen/SnowWorkerM1.go delete mode 100644 source/idgen/SnowWorkerM2.go delete mode 100644 source/idgen/YitIdHelper.go delete mode 100644 source/main.go diff --git a/.dccache b/.dccache new file mode 100644 index 0000000..0e487a1 --- /dev/null +++ b/.dccache @@ -0,0 +1 @@ +{"c:/project/_project1/Yitter.IdGenerator/GitHub.IdGen.go/main.go":[1952,1678950385570.279,"27308dd87e048d51a3b1ef0da09046f0dcbbcd30a326ebc199c34da73989a8bf"],"c:/project/_project1/Yitter.IdGenerator/GitHub.IdGen.go/reg.go":[2638,1678950429101.9556,"31a018d8d099a9c68a806c80a46d5125a466a3bef09dbe5aa0ad59273d7fcd06"],"c:/project/_project1/Yitter.IdGenerator/GitHub.IdGen.go/idgen/DefaultIdGenerator.go":[2625,1678948712618.3582,"95670f254be1b92f737df2f390117b9fc6de200e476507acd1396b8c02553e8f"],"c:/project/_project1/Yitter.IdGenerator/GitHub.IdGen.go/idgen/IdGeneratorException.go":[404,1657434368000,"ee0ab19bdfb44d03284fcce23a619e9c6f628c5585e75bc6f865ea62a0e03676"],"c:/project/_project1/Yitter.IdGenerator/GitHub.IdGen.go/idgen/IdGeneratorOptions.go":[1601,1657434368000,"301827da63c9765ca3cbd34cb966beb218a5434f4cc0ec0d43a4c1cc06cb5f4d"],"c:/project/_project1/Yitter.IdGenerator/GitHub.IdGen.go/idgen/IIdGenerator.go":[222,1657434368000,"9891fd54b9a4beb8d9d10eb252eb24a227ec14ce9400ad40bbca69b4c245f229"],"c:/project/_project1/Yitter.IdGenerator/GitHub.IdGen.go/idgen/ISnowWorker.go":[219,1657434368000,"02895d7a8e045dc8e40ca7a84e587ab1b5866e43c4a7d997a5092033660619b1"],"c:/project/_project1/Yitter.IdGenerator/GitHub.IdGen.go/idgen/OverCostActionArg.go":[769,1657434368000,"34751899a8bb722ce838098760301ee267fa43d2e03dd025ae66cf669887eea1"],"c:/project/_project1/Yitter.IdGenerator/GitHub.IdGen.go/idgen/SnowWorkerM1.go":[6300,1657434368000,"caaf30edf6e78ee5bdfa443d828786831f38124108f05348406685298021515a"],"c:/project/_project1/Yitter.IdGenerator/GitHub.IdGen.go/idgen/SnowWorkerM2.go":[1078,1657434368000,"969e1191a68a654d32a91b37b0b1a71e23e550c58344da3a836a0c65845ce8a9"],"c:/project/_project1/Yitter.IdGenerator/GitHub.IdGen.go/idgen/YitIdHelper.go":[799,1657434368000,"ab5150d7fc3269974127c9c65b1dd5aa6856eebcf97f250fd7badd5e33f8db72"],"c:/project/_project1/Yitter.IdGenerator/GitHub.IdGen.go/regworkerid/reghelper.go":[11229,1678949394759.0046,"06f236bdd917aa2884c2141e02398c29bf84bf0bd6266ada93bc6116711b23d1"]} \ No newline at end of file diff --git a/idgen/SnowWorkerM1.go b/idgen/SnowWorkerM1.go index 02e017c..7682930 100644 --- a/idgen/SnowWorkerM1.go +++ b/idgen/SnowWorkerM1.go @@ -76,13 +76,12 @@ func NewSnowWorkerM1(options *IdGeneratorOptions) ISnowWorker { // 6.MinSeqNumber var minSeqNumber = options.MinSeqNumber - // 7.TopOverCostCount + // 7.Others var topOverCostCount = options.TopOverCostCount - // if topOverCostCount == 0 { - // topOverCostCount = 2000 - // } + if topOverCostCount == 0 { + topOverCostCount = 2000 + } - // 8.Others timestampShift := (byte)(workerIdBitLength + seqBitLength) currentSeqNumber := minSeqNumber diff --git a/main.go b/main.go index d3ccfb3..59bb904 100644 --- a/main.go +++ b/main.go @@ -29,31 +29,30 @@ func main() { idgen.SetIdGenerator(options) var genCount = 500000 - for j := 0; j < 100000; j++ { - for { - var begin = time.Now().UnixNano() / 1e6 - for i := 0; i < genCount; i++ { - // 生成ID - idgen.NextId() - // fmt.Println(id) - } - var end = time.Now().UnixNano() / 1e6 - - fmt.Println("耗时:", (end - begin), "ms") - time.Sleep(time.Duration(1000) * time.Millisecond) + for j := 0; j < 10; j++ { + var begin = time.Now().UnixNano() / 1e6 + for i := 0; i < genCount; i++ { + // 生成ID + idgen.NextId() + // fmt.Println(id) } + var end = time.Now().UnixNano() / 1e6 + + fmt.Println("耗时:", (end - begin), "ms") + time.Sleep(time.Duration(1000) * time.Millisecond) } } else { // ip := "localhost" - ipChar := C.CString("localhost") + ipAddr := C.CString("localhost:6379") passChar := C.CString("") + sentinelMasterName := C.CString("") - workerIdList := RegisterMany(ipChar, 6379, passChar, 4, 3, 0) + workerIdList := RegisterMany(ipAddr, passChar, 4, sentinelMasterName, 3, 10, 5, 15) for _, value := range workerIdList { fmt.Println("注册的WorkerId:", value) } - id := RegisterOne(ipChar, 6379, passChar, 4, 0) + id := RegisterOne(ipAddr, passChar, 4, sentinelMasterName, 3, 10, 15) fmt.Println("注册的WorkerId:", id) // C.free(unsafe.Pointer(ipChar)) diff --git a/reg.go b/reg.go index 708de5e..c53ff67 100644 --- a/reg.go +++ b/reg.go @@ -5,28 +5,58 @@ import ( ) import "github.com/yitter/idgenerator-go/regworkerid" +// RegisterOne 注册一个 WorkerId,会先注销所有本机已注册的记录 +// address: Redis连接地址,单机模式示例:127.0.0.1:6379,哨兵/集群模式示例:127.0.0.1:26380,127.0.0.1:26381,127.0.0.1:26382 +// password: Redis连接密码 +// db: Redis指定存储库,示例:1 +// sentinelMasterName: Redis 哨兵模式下的服务名称,示例:mymaster,非哨兵模式传入空字符串即可 +// maxWorkerId: WorkerId 最大值,示例:63 +// minWorkerId: WorkerId 最小值,示例:30 +// lifeTimeSeconds: WorkerId缓存时长(秒,3的倍数) //export RegisterOne -// 注册一个 WorkerId,会先注销所有本机已注册的记录 -func RegisterOne(ip *C.char, port int32, password *C.char, maxWorkerId int32, database int) int32 { - return regworkerid.RegisterOne(C.GoString(ip), port, C.GoString(password), maxWorkerId, database) +func RegisterOne(address *C.char, password *C.char, db int, sentinelMasterName *C.char, minWorkerId int32, maxWorkerId int32, lifeTimeSeconds int32) int32 { + return regworkerid.RegisterOne(regworkerid.RegisterConf{ + Address: C.GoString(address), + Password: C.GoString(password), + DB: db, + MasterName: C.GoString(sentinelMasterName), + MinWorkerId: minWorkerId, + MaxWorkerId: maxWorkerId, + LifeTimeSeconds: lifeTimeSeconds, + }) } +// RegisterMany 注册多个 WorkerId,会先注销所有本机已注册的记录 +// address: Redis连接地址,单机模式示例:127.0.0.1:6379,哨兵/集群模式示例:127.0.0.1:26380,127.0.0.1:26381,127.0.0.1:26382 +// password: Redis连接密码 +// db: Redis指定存储库,示例:1 +// sentinelMasterName: Redis 哨兵模式下的服务名称,示例:mymaster,非哨兵模式传入空字符串即可 +// maxWorkerId: WorkerId 最大值,示例:63 +// minWorkerId: WorkerId 最小值,示例:30 +// totalCount: 获取N个WorkerId,示例:5 +// lifeTimeSeconds: WorkerId缓存时长(秒,3的倍数) +//export RegisterMany +func RegisterMany(address *C.char, password *C.char, db int, sentinelMasterName *C.char, minWorkerId int32, maxWorkerId int32, totalCount int32, lifeTimeSeconds int32) []int32 { + return regworkerid.RegisterMany(regworkerid.RegisterConf{ + Address: C.GoString(address), + Password: C.GoString(password), + DB: db, + MasterName: C.GoString(sentinelMasterName), + MinWorkerId: minWorkerId, + MaxWorkerId: maxWorkerId, + TotalCount: totalCount, + LifeTimeSeconds: lifeTimeSeconds, + }) +} + +// UnRegister 注销本机已注册的 WorkerId //export UnRegister -// 注销本机已注册的 WorkerId func UnRegister() { regworkerid.UnRegister() } +// Validate 检查本地WorkerId是否有效(0-有效,其它-无效) //export Validate -// 检查本地WorkerId是否有效(0-有效,其它-无效) func Validate(workerId int32) int32 { return regworkerid.Validate(workerId) } - -// RegisterMany -// 注册多个 WorkerId,会先注销所有本机已注册的记录 -func RegisterMany(ip *C.char, port int32, password *C.char, maxWorkerId, totalCount int32, database int) []int32 { - // return (*C.int)(unsafe.Pointer(&values)) - //return regworkerid.RegisterMany(ip, port, password, maxWorkerId, totalCount, database) - return regworkerid.RegisterMany(C.GoString(ip), port, C.GoString(password), maxWorkerId, totalCount, database) -} diff --git a/regworkerid/.gitignore b/regworkerid/.gitignore deleted file mode 100644 index af01ed3..0000000 --- a/regworkerid/.gitignore +++ /dev/null @@ -1,262 +0,0 @@ -## Ignore Visual Studio temporary files, build results, and -## files generated by popular Visual Studio add-ons. - -# User-specific files -*.suo -*.user -*.userosscache -*.sln.docstates -*.editorconfig -.vscode -__commit.bat -__download.bat -target - -# User-specific files (MonoDevelop/Xamarin Studio) -*.userprefs - -# Build results -[Dd]ebug/ -[Dd]ebugPublic/ -[Rr]elease/ -[Rr]eleases/ -x64/ -x86/ -bld/ -[Bb]in/ -[Oo]bj/ -[Ll]og/ - -# Visual Studio 2015 cache/options directory -**/.vs/ -# Uncomment if you have tasks that create the project's static files in wwwroot -#wwwroot/ - -# MSTest test Results -[Tt]est[Rr]esult*/ -[Bb]uild[Ll]og.* - -# NUNIT -*.VisualState.xml -TestResult.xml - -# Build Results of an ATL Project -[Dd]ebugPS/ -[Rr]eleasePS/ -dlldata.c - -# DNX -project.lock.json -artifacts/ - -*_i.c -*_p.c -*_i.h -*.ilk -*.meta -*.obj -*.pch -*.pdb -*.pgc -*.pgd -*.rsp -*.sbr -*.tlb -*.tli -*.tlh -*.tmp -*.tmp_proj -*.log -*.vspscc -*.vssscc -.builds -*.pidb -*.svclog -*.scc - -# Chutzpah Test files -_Chutzpah* - -# Visual C++ cache files -ipch/ -*.aps -*.ncb -*.opendb -*.opensdf -*.sdf -*.cachefile -*.VC.db -*.VC.VC.opendb - -# Visual Studio profiler -*.psess -*.vsp -*.vspx -*.sap - -# TFS 2012 Local Workspace -$tf/ - -# Guidance Automation Toolkit -*.gpState - -# ReSharper is a .NET coding add-in -_ReSharper*/ -*.[Rr]e[Ss]harper -*.DotSettings.user - -# JustCode is a .NET coding add-in -.JustCode - -# TeamCity is a build add-in -_TeamCity* - -# DotCover is a Code Coverage Tool -*.dotCover - -# NCrunch -_NCrunch_* -.*crunch*.local.xml -nCrunchTemp_* - -# MightyMoose -*.mm.* -AutoTest.Net/ - -# Web workbench (sass) -.sass-cache/ - -# Installshield output folder -[Ee]xpress/ - -# DocProject is a documentation generator add-in -DocProject/buildhelp/ -DocProject/Help/*.HxT -DocProject/Help/*.HxC -DocProject/Help/*.hhc -DocProject/Help/*.hhk -DocProject/Help/*.hhp -DocProject/Help/Html2 -DocProject/Help/html - -# Click-Once directory -publish/ - -# Publish Web Output -*.[Pp]ublish.xml -*.azurePubxml -# TODO: Comment the next line if you want to checkin your web deploy settings -# but database connection strings (with potential passwords) will be unencrypted -*.pubxml -*.publishproj - -# Microsoft Azure Web App publish settings. Comment the next line if you want to -# checkin your Azure Web App publish settings, but sensitive information contained -# in these scripts will be unencrypted -PublishScripts/ - -# NuGet Packages -*.nupkg -*.snupkg -# The packages folder can be ignored because of Package Restore -**/packages/* -# except build/, which is used as an MSBuild target. -!**/packages/build/ -# Uncomment if necessary however generally it will be regenerated when needed -#!**/packages/repositories.config -# NuGet v3's project.json files produces more ignoreable files -*.nuget.props -*.nuget.targets - -# Microsoft Azure Build Output -csx/ -*.build.csdef - -# Microsoft Azure Emulator -ecf/ -rcf/ - -# Windows Store app package directories and files -AppPackages/ -BundleArtifacts/ -Package.StoreAssociation.xml -_pkginfo.txt - -# Visual Studio cache files -# files ending in .cache can be ignored -*.[Cc]ache -# but keep track of directories ending in .cache -!*.[Cc]ache/ - -# Others -ClientBin/ -~$* -*~ -*.dbmdl -*.dbproj.schemaview -*.pfx -*.publishsettings -node_modules/ -orleans.codegen.cs - -# Since there are multiple workflows, uncomment next line to ignore bower_components -# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) -#bower_components/ - -# RIA/Silverlight projects -Generated_Code/ - -# Backup & report files from converting an old project file -# to a newer Visual Studio version. Backup files are not needed, -# because we have git ;-) -_UpgradeReport_Files/ -Backup*/ -UpgradeLog*.XML -UpgradeLog*.htm - -# SQL Server files -*.mdf -*.ldf - -# Business Intelligence projects -*.rdl.data -*.bim.layout -*.bim_*.settings - -# Microsoft Fakes -FakesAssemblies/ - -# GhostDoc plugin setting file -*.GhostDoc.xml - -# Node.js Tools for Visual Studio -.ntvs_analysis.dat - -# Visual Studio 6 build log -*.plg - -# Visual Studio 6 workspace options file -*.opt - -# Visual Studio LightSwitch build output -**/*.HTMLClient/GeneratedArtifacts -**/*.DesktopClient/GeneratedArtifacts -**/*.DesktopClient/ModelManifest.xml -**/*.Server/GeneratedArtifacts -**/*.Server/ModelManifest.xml -_Pvt_Extensions - -# Paket dependency manager -.paket/paket.exe -paket-files/ - -# FAKE - F# Make -.fake/ - -# JetBrains Rider -.idea/ -*.sln.iml - - -# macOS -.DS_Store diff --git a/regworkerid/design/regprocess.jpg b/regworkerid/design/regprocess.jpg deleted file mode 100644 index baf4c2fd3eb9f2fa56ee31b735d6475d6a542d3f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 159315 zcmeFa2Urx_mNwjEB3E$qob#zpkiQTpkoC7r~Bn31iu_fL`)7GNJn{r64?6RT+Tm(=*dX~h#wFU zTm})+6A;l8oOgi0z;%)k{AB_C%R)d%L`*_TMt*^U64;@J4nzoiHz6?*2?;SVu(u!Z zIf$5^gyGUnB~nJ+CuEmhn8X6(v&easD_WT!4x;&PS-1vWpkQHTW9Q(%A|QD6nz)3d zl=N*Gl{>0x>KdAN_4Ex4p^uD=pFXp+vbM3cb949b^n!c)1iuIg4GWKmOh|l{l$`SV zO=@;dZr=O+g2JN8s_L5By84d|ZS5VMUEN=Lz77qKjE;@}n3zN@EdE?tURhmR$L#Ly z9~>TGk57KFivUFQSF?cEzZ&)%yXXPC2#J9vCHuuL0zxlfC88%Lxpb41K}nbFi3{Up zu|RSr<@l_M)(gD19-^5oTn8yw_{35Cm|sl$i)DYGVL|^R%l^%<|6|uAh>C~+=sY5N z5Cn9lmmMhx`g8pUXoEN615+J)(|6-lIg-6RDT>G*YOV_PBD7Dn5H|+4r!)thoaCTI z(SerlOwwxm@0(iOxHZ1a=c9i=_iAz9kJWaR(85x$GL24;zh9g|cC&vIwhFV-DZtHv zz8{7XQd?7~avk^L_q*frME_LM{_;xO93xIOaSpl^qtX2p*MAP;Z@}qfd-x%h(KxW(cug_2B=~sE%k^dXatFnNgwCYs zd}w@T4est>?$r2Zr9?kIk~($Q7aRnk-m*S*SPt?qsXE%0kc|*Y$7l7xh8m*4RB$J) z?nCRa>fU?qyTZJ2;G-|hiJb<%d@bNz*-MF!QJC)!_wPb*@j0SfFmxsC7&L`VF~jd1 zdPd!HJn;^^R_s3vWkgIOTXnc)zzvSVmjf~jL|mYPg&xI_8Z5Fsty}c7x}C#GFD~KM z)L|6nRVHQ)&DlY{wmjF$y4QCDhr|})rttkxs+RrXjlAKW9M_ML)G#n@{=m}Soxkm zCGG_p&Uy|Kf#OL-@tR2sXNB(MG!i?Z8IYlhF->t7KG@OFZM;Fw(^GvMRpUz~NOWqO zKgN9R=tlejza+lKIJ>^OrYY`gV{N26elwiSUoExV$OGnuW4vuyf8i`bR1^8uXx65M z#h(oxF~-HXKpVEbglwd+qxTNOgYNGPHGEJ41(C}I39UHjq2k*6EGgExDTglBLACT_ z&OtlX1TDthbyy|KtaLmXCNmNz0!@n28GUxck3(vv-q)(s;(fE=+~7F~_NHGhks5*; zwI79HboLdpvzuLON0Bz=)K9ACz&8GZAu>uOYc1BU%^A;#8T|SeO$?FMwOLsfkVpvS z!6$mwuo3ZvhLG3iAlt|%FMXfH*k3f0!kGEI^$@$R?~yxl4r)6%P0yTuv+WMOjiL>2 zCdC}oO*U~Yq(k%{NQo&4?ma-(vA35mkhpsc<>r>X`Kg~T^U%2<)jnr1gh}^az#o6? zDlE2}bPRcKW-rsZY3M1bD?ZNnb?TwGZh~f3qg_{GV&!z@c6^Q|Z-^?%o7eLonFRYz z9Q0JR)2+Z1Zat3=Ko}K$?z+0ud+cMDgRGOnRYNwjRw}kk&8rr`jQD}XrbI2@cevZc zB`onDBR5Py=b)0;u@4zz8CzP2Jvj{H-`g0{+xp1AVDWq@@&gq@SO5;wTlY!bTeq;( zyXzxz4*Kb*#ww5(YWkz553;n{(lNHv<1o4}z0n_r=fjNj_+o;)##7N$T<&RN4(>m` z+$QQZWxpBA{=v`9%rib~b&}*=#lU{C7NyHM==v7w(a7mr8l8{DBZd@LWe?kUTOF*tdfM{)>4uVXEO~h?6OK=jJC67BX95fN z`?+woSPR9`Fx+(=+U}!tI+bFR`~sq-%yW>k^tw=CcAf|nE-SVoVXW}INq=!-f8Vz} zQ8q5@9K_hfj*-%KP;c`o`ZiG8o2IFr;`V$osPc}tx$nO8eCqnfaz7J7K1z2av9p^o9!H;8+II*rwo@wF(GkJ8XivT$$G)Z;T3=&$*0*U^ zCfu{0->?gXq*z|mx%IQKWxk&X{OZ~R4|EyYB)b)Nv+TE&7$xYD#pm4U0O2_w)=fAz5i6Q@oB#Lz(EL?w6*fICRQ31V-dkj4>B-d zqaafxdvZTJa!LN(zaK}+M7x{CF;aom)J~lV@Td10hpM%VoG!)~->FX)9CqnIT3_P~ z0*S`?Yzci)fUGM>!h&X{PoZJ%(pzbFnv^$6zU@BlQf%{kMR;GGv+*FG*;7^1wX@n0 zo4+6s)x?YXg3u|1Lo^b`?4yJ%H6%V7D~{jlrg|1^M@n=zcW>aLb=Dkuw7=u_fwn%p zTNS+&`?eH(Xkwe1d!*N}b&NYmnB~`Nl%6z+ZLV2{aFjKZc*|n{# z9NKkjKVNfD{5j7J|G77CqLAW+xesGuJ1D2c8jiO^o-Wv%SuFdWgK8YlK^YDX7yZqr zk=&an`}q#!4-sRHYbS5>BNW7J##$J05-4qg5--^9;=RvFM>Ote+YU7$C3b*GrQpsW@`fHW4F2lprn})7bg|7BoxxW1YqtQC7^OH-meWPR_s-w0K{xhmFYK5U-E-tcNs;N$M? z7;==0$5oYQGoNID;m`Q3k}A^!f9FA1rNK}e<%)#)NR{MMAAz39? z4O+FLY#!}gQRS%}WM{J~PUY{9sqT+@Ig1Tzmy)S1z>`&k=_YFKKAdq38Ob|*v!oQ{ zs!06SqueUHI8BRwGwC>aHBC>Kh?kZezeJ6`KA~OeQ%BdKTEgYL7i1xk z=OBjtHTP3lQUo0#?!=%)CG>2eZ~5-1irCoth(o-I!{ zZymUe2P4FW#D(<)^png_A6mF-k9;$0RVaShg!F8j6fA#8{~$7Q6=8n48Y5w8?Aud| ze*$y5ES-S(Edxs2Uw8+@Dhw!F@;Dy}le{VnZ1M>!CQAD8M=!xz`q_x<|SN#2aNifEh; z_;zmXu4kqyxS?A*TF9`qdY1Wi{%YATN*X*C*hF%kjId25sQZ0n9vQb?Y(6(G zED9mv;NcwL4UJzGDySHKUKq-@7`-^z^z|Gxuimjk!6@1ei%`+8Hiv3qWZ0eMS(a}$ z`49xixS6_U8FGmc znoXS4sS3OoY&GDnLu3TO)r|nL@jT2R67mvk-N`S441^7zR2W=6rM9o3#mGV$y>``A zkOe<%4HIDNULTB2?uhN_@Z8be?hZ6H1=C5)U7S&fLp!xI!hLUgS#YA?ZX0ce- zZ9T+*r@wl<9kQ~!jk7Ry=gzQ)DD{k#(Z0i76Hl-z|4V;Lqlfsu*~?YHXz06`AGw7& zLRMRZo`TI<-OQI%Ezs4liPLIaoErOg1&Z0h785PNXZ|=Zh64kgn2-D-wGb9s6YY*4 z9Gskj!1&%8SfTT`ZaM7sWWj0BaSL_LAETuPWLEadvsMe>8tzUz=b&5Jw+{uj)I{+! zTDui{IkuVA2nZ6D8Mb}%93)rMX?hNtQ~pRB4rW&1$6W*FK?j5vI(4=m&#*&hgf&sK zIatkQmB|}B2VJI(=d{`p#(PZ$U;MDp+)$o`bSgit6FrrtB}ZMU%7G=~PwwNP%W8`5bgG)$yPfvJ?MMB=}Ub??{djC4@ZLD3(R8UT%)aj{EDu z%HC(@udI@DH5XGl{$i9!riO+DAbC6>J(Rz_!b^ze!{<;23 z8_3liCSlG&9XcUk@`JbtAXI3&{d7U7pCYhuokL>KU24+ZTS|y2BJpC;o0m7CY%wXe z*KeYs-LzOir_JM26|B>|WAT&1S**Q2y1dJY5*rK~IXkDXo*2uecqqpS@i=dvgx5$)tl{>l$4|FTbCg zQs8o>8Gdr>=A*!E3ug@XN-r5U1ms_exN!~&dSQ$ohE$VgqMZ(%(TF2|a3yU4HmLfnk2{J_9G>4e&GU?v@V=WQq8SmCdMefoOkY9z_`W%G9>lsH;a&d2TR{*TzhpPO zV=BktOt$HKYH9RdVGrcL?eEb5IwsXK2`2BV>&WcAVml#7n^p zbQQrs|Fo;%XEOI=%W=I8kaG}c4xR&ixCu=19>`@g0Ik5z_!+2z5WsnU`>j|TUz&OxjFTEg5h)0y`k4^Ofd8h=nv1dn6bydb6Y9Tj zGGLwo9YcTD72w}>>jp5m5-q`g+ZXQ0-*jtvQNcUfB;;><0_fm>^h+E^o(lO7r0#4n zqF}6cvsbY|5{LXs&3r!_3@fWU1gX{2pYX7~NPTs0NO}OZ{H!e$mUt=LQN9eAnF5i^ zi%4K*f}MkEs|kSn^FIbU{wELd|DVTzui-zp?76f6u8An%ni!uH{l?y!1B3r{6v(_= zzDaowlHxoESrY&`g0q_PqT(gkuf`iiu))9PbN>MEzyS7NS`3V^1gd&t5+>TTcN@o? zI=UviSnJbzLYAB(#X5Bftau2W-zENFG;kMXvN6Ag9xabT2o$uIuK9#~XsoQSNHP=2 z;pKhGz$%c>_xPX_WUp(w5`gEynk?K8Jvn-@GYjYWnA){|)xyTQx*?*rmw2$ADnZCu ziTlMfy88#C-y}VUW~RR|u+itn$Eg~y3+yrx2s5|CeHY0>JmSK9kR6|%nF1_;k?Z3R zE)>1cd{SdYQO7`Rb%B1m#4MbmgmP;ZX)0)EwTQ)MITM-Hz96LMJO*Vc_U3l5WO)5`8{8nY?AVRon#s7C zA;gAIM`J)SkdB|+O57{}1bxgMAQLI{V#NOzR_flkoIGlyQHP=1Yr#)(Etyn@2G$OK zdno~y{xiY=`ds@vd?zqLHd{I9n<7zyjvdHY=ruNT@dvoH%eKa<;lzD@I`!|M&xC_@ZA)`;rJLtNeEj?tKEQ$gHyU;w+oG$>9mp zS>ceT6k(F0&{S2`>jp%0lyuVU>=I%52t%w>A=XO`W2zuII6s6_vgX34$&XH&oV_P| z@O8bCS)RQAqSrf`vdG;Q8vh|MWli8hVGWFBl|!ODq~>-B_wtHy?NyJ9E_|Wx$5mCd zvFZBrsr!DMMneeI+=-1zmK-N!z8xKZU+HL5;9{x(JJj$Zof2t)$e?L?Ai@bmW^JTgCBiW#^*)V6Yn55Y4qFD;;8|%e5W^8Y}jDJ{x3TvXvqI=kJK^PsOV$h8*ZjP+gJg?m zM1;OfZcnn`TI%8B*}3zat3;8EjESIF^~r|03|c+(;FCbR`DILOSl;@{X|?hFOy7cb zlJD;}VtR@1x90KkULxpHHNt=+a1!%pSIm4nn=cKEYm1SpCLifG#!eDnZ`Bu1pnI3h zLzSUP7$Cm-J|{Q4Qmr*9;M(V(^y^ngK)MfLFeBS!y>;WHpDfAA71hK2azWAyF=|E= zX$1NpO@ROs^*p-<^Tzj+8!}h&>mxo`d?j&OtzQ({c`S zuwO4ah8~ifgVF#FNL2s^iJu%G8`b{VdGh&b0Wc*XS3)Waf#dYnZbclUpnKiD( z)Q3I^S#()+U6IH~#f4_D27jKth@K0t)`plkTyB%b%_xrw2;Wp%?%508leLW4)&_a6 z1c;|YVS@@hQ!@zNF~m*ky2u0htL5&!4%fz%k)GM8nJqTXP!R=$t1`wcr9+e&TZRmE zLC6l2i%M+F+-2MEozc;+*Wk04BXGMu)J|>?zep8TDcZs#t4O6ziAJKJZ846$3&M5b zcuwqH{1BMSu6Sv7^>C;wzRSXr&7FsYm-oYlc~9YLGcCq2%+YE86EAdV=%$PPa{I+Y zlqaI>4T(!NTAl43ZQ22~n??mz(-)J{o=J>ngZp$Xw)Z&MI%AV@lRaJ+8K=HQIMGbG zaXw3Wi~I4Vs9`J^l^HtAjgg9Mx{XOg)oeAVqoOG7scE#-62RD3-Oh(anj>1h$w~J) z<+3yE6VZM7?diUUa%pDh{J>3z17WHAVfPX{D%R-Qc{Mx)n|?fglZYsyD6|4~Xy_(i zYxUb(Y<{BIyOc7+Nq=tV5LJdujLt8 zKBPSnbLSZ#yNMx0GQkrUz-{@kF!RfmwZjN)`O(plg|SCjai@}7M7QfQlmn^?ray~l zu=jvYL_0JRoWk%|LJg)9Y>tZBN7%rZOR>QnGLB(cb~4{iVoG#>7;Cxi@D(vDUwWQ! z|7Pb?o0GCP7&nw^b8*(jgHM@J?!p5w6AJ@f7gDJLGBVqzT|Utd$i8z64mQaPY&v-P zoP!A2%%lQX)J8dmHTgbP5`Q!4-}8n@dTt-~IUwxOD7O2^!HTosdo5(sNzKNW?St5lCRX*!F;$fk|EcCkU{pyxqC7VoOf zy;6efwzsCH*viKBumUI;8(c?gSk%Lbu_Ipl{W?z^o%y%Ct@n}cdKZV9EVa}KNOXu7 z$%sK7_!}cQm7Fz37#yiQ>~WKrp;z3iA$YRDKv|LGNs6bl+6|#T_c`_%Y#K^5xan!Z zDmN#(Hon-_P^yp}llMK5E2od`>hpwl$HrHL?`U5!cFhu$>tUXT)3`2CDs1q5bXU3u zGLQU8T*oYU`W%E#U$4V{FLa2T)?ot%_IdT#oOrXNE%3Egw3}&qds3`}{Fgf-9h9rI z6z>xJ0{8~VGVSZQ83&traFAhtI(Wl|LA`B_ElrBUB4u%-cdlgFmvQ>)?dC^GM^()7 zUwS^@nuZIsadTlQ7wt1CvArFv#$)kMN_2|Mr#8k9V5;ZKLK8Wo?| z9%N@6Tddc7flzp zTfNu&e!e%G>9MkK)#OV>_k$`o+--v2tnYM{<^#{c`Fk0AQ^h1H#r$4MU4O3+$kqKnUbGoSmk zY{?cIA?%$3GO65yMBL}X{jXGF_|a;Mry_0O+M5bRupU@pS>hoCopQLcxgiyf&?D;c zz?kppV-&Khu3YRa&{!7yfvj@0Fa_Vm==^|cj2)bVqP!ZQ5$?x>5bHidWSHl}@2=(x zCTnKte$Blk?`cgXX#|PJYjk2E)nuLE@Qmwdsm*Sb4v}geoaVs&6RaacEMu#*%!4{B zx27g&oCfhh(U$$gh0kOcf1t~^ZZC4F11-^M4`GK3>7aKy06b?Bam11Qx{lT(-wc@} zJ~sXU(!)E|Ta9*ZCuYpB@5d2fg4jn9^EveIcb)hw8jO_~7(ar-+;;DH#lcwt|$%byp zpKeIggztzj!ikGkB0=joQH<2#OKcyS5{k`Q6s3ie-9dxHaRk1;PPTSOaV5unRzKqF z7zsO8+=zR{$_9)gr1R0mi{+8(?V>MWgm|Jg4#&pDH*!~V%{NkfqFpufuuk`H2<(*M z^3`lj2``73-r~N`j-jL`biL|2-ZOuVP`PP04n+hO*yX#>QvY9-!%X)t?1nkIlEo=p#tZvH;3eI;1nD;a=)& zL^0fA!E5Ni*Czd;`=f239V?O_8oUXlehDvs3uHq9deJ$ESl}%8dW(%yZ1csjCQWo$ z7oHx_I$&6$yb6Vz5O+XzhT3C%k0& zim2hDh1P$RnsaE5oLw7`e`~iHpA@df_O%<4hAwz#O?GIE=?X@FA3iL>1}{WRatXB0 zF&y}*ZH-tq)o<}wkovxT>>FO_upHZG(NA}d>01UGNs(lU`axZ_2fSx{w zlR8aw8)0qaZZ8C4tmfL>Y^9nn_>rQ`CQVC=)%g-2DNDi)Th@DZTi2xdFfeuhUhu9% z3l(zHU>LcdE=V-8@tb_ZUx2I+qPS@%0LY3u2OW<6v5+hvoA;~y%J1!ME_z3$!vPm< zI|tF>Zu!pdu-o2T_fg0$s*^0+4s82idHgc;A-fVWo$EDW71U9{fp2ZgD2_F2Zbqi4 z`p6ier=c7TG8)MM5jIc=62(GD{b|#D)AZ2!tzDFDTQ1;3=CYnBs+%rV)bZo;_E`gR z^6%h!YSrkSkbQZG`p|P;y2(e6O!z;2YI>U8%>gQC{!C!Z^ng^dbbg0&BLnP2VdukN zohmE-{CN_hK0=c?YWKbL?7PLRowupMU3d^0+EGe^6J6Y)vOPIW;;XnnmNF2*E2f4T z{NNj^i)&yIdY2u*_Ms!5oPm%2+9o-Z17-A6?$_lv>(7!}tSB2J9Lrj)X+wr}ZdE5} z3Iy*Tdbzq9MTGGs_FVa-775zTJ9`DO%zNB>DuECpz8ECOng0xYx@VqlX=(j_QYC+F z?B(R-lv;%f@y!>p;<^DvIRT(~0=+>+_6&aXY}g_-5a6}p`G<2_hH9iaCb!3wmHQZ- zzd9?mavx+d>9#YdFpy}BTq{@wtzO-KKw#9+5+<(gLn&)!+$s>-woSPKKN2g_p>&M+ zkZWxZQoPMh6f1N$60|I*gYHJH#CVi4cKBZhm@LJ1%@-S38?={3i<-vVK#I>?#bgp= z-?Vlq^4dcOt3Ua-?tijtd#s6vqYc2wy=f|+)`Z<8Q0f=0-N3Ydl zv<2iygJ^_=@LVpZfOjxRbq?xHdjzni8h!!g0j%VA+aaiN@Q2JZx_;cpnmD}HJKCZG zpp}2UG3WP({c%rM4gga2{Xc{b?_&W#gaV4EgM~mQGSSJn$3XB|6Nk-M*YhjZYS_bJ zA->L2Qr@kb z4nQmbWbpg#$X_4%3uN$5cD~;}@o`v>?oEMn(4AX=q|E{FjT1H|n<)S$mCmUw+;F26 zMkaR^z`5{Iz6A<}@^w>Xjz=?cE?q-T^$F_i8c*5CoO<6rOHh>m3v2kFg^Thh*W`b| zp#jp23`Hf$KO6=SrEyRSTMPIzNHabM*e$VqIv(R zB93DKX+s;_EQr-y;E5n@u^3cx?yaAkxk^jCIK!|1+zS*N+Cn0yd8+O|0--4r?+?z9 z#*}4w3$$f&nAoR!B!6Jp+MhAewtX6Xy^?T?Tx72Cx*maNfJ^{VC3QRkA&;uC@;Gzs zzKBl=+X(aU*n#u<5v4 z%eLHHDY`GK?U7XnUozOgs%12EYi)avUU)o$_sE!yfJ(O?#PMN$C|o=wvAN zW&U)he;p?LZ)1lZfCl*-Yod&n3h|eL3$=|wECvw}Onb+PdAh@LQ-*2@{X{pD?{rn| zh$_3qqeZ^NK9FDFA3Fg2O~C7C@SkTR{vPVqpBan4Nk{yJw zy?j?O&%)!@!$h!<0%6PkfZZrm29U?pX`3-TT}`@pBa&+U;r2)0i3eYKSe9BRL9?Vc zXxw6D;@ELInEb%4eXVrp=M(Y5@(q?${(>;`G*=yG4YijNsav{nY3#fM<0L3e1wnZ6 zVeF?SjA~M55Ic_1YU}A!&(x&3q{HJ#p>LRyn~(?V5rVD9&xjq%iVx#BpDS>QXm)o9 zlRpCjgh%@Xb6De*1(NB8BJA9q0r4-%^VHYZWJ<=%`8Y|9og^peV!@t-J8a#z`<#*V z%b2?0ohEjNe1z6GKa3upJg44p%heu7M+iU`n2PUW9+ndX^wJoV% zjp&L@l?(dm@w;J$5B-Z&;Z9u;s*PQ2Bg!y@wnK-0W_ku&x1|Vh#c!xOS-S4tBb@v(e ziv_oh&(aL=4jj;OY~ZgY@h8K!xLisn*Mch?UQD$!Fq@+M?*#@X2Ab~IJ#a|yeBpai=EeoIZHs#YL zbtUk!V1^d*5hUv4WHCga{cqHdILPrYIuMy;s=sP2=*+i!F#YLm@NLZ(&+j?3qCUVS z_Udp_ZYK4Fky4igKmu~`S?uaX`s5nBh5^Nfq0I$`xxun;uw9Wp&?6f!2 zVv|s2UIrifCpX<^tR~kN=C}}F7F~PdoP|_6GbGSX0oBRlIFE%H*7j738)~0M%NMEw zAMKNB8tH?(nn|$n=uIVKhpuV4v@YaAg`l>T`Pb`9lnNKs5WvJR%v^PXqwvw>Y*kqS9uWRb#!4 zzwTmY-L}JS&oLKV1E#|+cKQ>x*b75-1IwF)5xZ+><9691zM;F_4sDkMZ+stpd4r9x zi3~N~)=!KR24?YqjpPiX;devsTPCQsIfXW^^|oE4LMQK4hY565e--R)_RyFoQ~(^*~mb{TJ12H_x%(E}aU?!yY0oLrlXzbVbieGQth zp#GuR>v3-ZU1ejkCo=K2qjxLlM7G@v$sjQ1!H@9|L^X2pKMh|if4{y5Fk!I@HgBHQ zMm(_Qyj$h<9jNaGT?8{41DeT$gSfVS<~bd*7YD&yFQgitJGrZlzNC_xy$)xG_yuy- zbJ>?;y-AM3np6wnNF6L}QCReDv)ZWTm`6WDXQ4X(hU8cv{f^_6xFv#S10dJT-R$Dw zjgbN{e9nEX77nbKJk2x~W*ke+sNGyQA}T5zvK09tLo-Quah9B)se&?d_Srnh3Hue0 z`b?%oUmEhrR?0eMu<;LhYaT^l!&)HcZ}7vf6cHFe$Hl8O(lGn`ppNMvLo8m2j z8S0@p*7x7>mulj41}V&Dr;Cp1?iss=JdH4aNH9$mpBUipq>P37&co>KIhpM3DY#en|{AN*gy8g1t# zHnq=^G(&2N3X9RhfapR14GmQg)WmdmG)rT;65ma%UClCDO}%&Gv7ac9pU6wq%n(pI zM0f{!I{GVJ3NL6D#X=UsVi0EY4x;MA)$DS@@39Hv<|8%iPJE%;gAOWU9Uq=szWve{ z(>m-(qf~B|9dP+$vWDQd{p4U*373o zV(EL5Z=$TF^4|Cssk<5vYqFZYm}X$x;Sp;!*DE+p{CsV%z`Hc7#u05lwZch`>eNM7N>?g z71OzR^ZuJRTdZcL>c2bt81{ETUYOHk7w4%}01%X6_0ep#o2r|wXp)A`Vx`g zLG|u~L7WS_#3aJ}EM0<@1Kx5E3-DAH9Dt_`#=YiArpZzBKAk4Z-uJPIb6rE#s~1TI zAC=jSG^G_XMgd*Z5gK`@Kh}H^VL#F=i>+H!C|``D-)I00)~L4(Thu~5-fF}VcC_+D z=#$We$Sp-BXhW;cVydgLQf}zVorNosoohIvCc-Y-KmK0;l&7%avcE$?-|qRAxpvR9OxvW!zskC1GX?@WJ zrlhOLZIABKnN-`*`746bzkFiZ7sU9^K5_U<9DOwdJV%H(rw|>8UB_<RejQ#2o^JV zv8p8qRR`s-hV^LD;F1d_52MsaE{sTANm5Mwu9T+nXpstK?Zrm0*ewrfp8`i@TpV>m z2rN|Otow6T)C8Z>8dXIbPm4tto0v|Ce&JGl$RA~QLwa|hTz-k^S5eJx5te^KO!YsB zQ2w6q`ETv>XGr~*kQxg`x#1_~s_G(}Z`dlZoW&qfvV#a~j7kUh&EXm(_K}ZaO7qzE zokw9W@lT_3uN_;I?#&kn^}qYA4)0$xNx*FW?-h~1*WvwZ+Vj_<&A%ZP{1?3Xx2nzG zO9lTmLHZln=I^9}|9F?^@f8m6ye7^{`~hx6+ijpQ%J?SjFVf`;PT|*a!T`&yb9mV5 z)UeQ_@k{X01IfNw6WmS>>Fp=+ieS6JzaY*3mB{rMzQx}oa{X6``@a^s{z8ob#-!gV zHh(9?{WmoHANv}AJHE#KR&(l6d`gK^z*fvVQQ&k(n{Q%?@N|9l-AE>h7Pi)0q}`OA zf@!o>s{!UJg)5`e&*=@n?;Rzt)ZT?{F6W#Qp!o{r^AWC;SHY zH?KIoi#-P|2(-n$@aYBu|Ipcs6&U7~5XF%LYL3+g&Mg_aw4}&8J+TJ&zOWTXtMyhV zvtfl6!*EPehX{aoE`^pd_%O1AkSKyf7o|dQO66-l)zl4N+X!4%rb{Y9H7y>tzf{>3 zi+U+Ybif^n?MDHJULHSubM{XB92AVK3JYFoM4!F%Q}6H>9<#8?iEX<~L}~vdY(}Ws zrTD9Uq3gYSOyd);e&q`PZ>Wj?R~!rbf3bSTpN`i5DdF)qe8IxyP@(XQ3k#Z;W)gKn;fZuXzv!3MV)N|uAeBqZ?@=#7`2X&2r^cF?*phJ_y~Jc4ux z9qj$Cjs=``OK%=LS$tTY@_7&2kH4^b=!%sx);faYudNPA90b!jUT51hi@K_T_rJR( zO?D+fUJHLg?^Fue_UbGHg;{QS@)Mi0pq^B$^T`=)`x#u(zLjM4`t%#YY0Y6NB9C^9 zQ(D{k&S^*n~fE7f6{C&NRe*!1^Z}jb739KZeph{(pR6kU! zDN!lH?oM7sNBF&;G3#}<3dbaJ^s>e4d<%K?Hk9f)zDxK@CVF6Xyh4uECy|!5M2x!R z(x}n4nEIK=-rmkQK=CJ1WyZ8bxr>I+v9vhsu;T>7fYQNo0`tY9M7A8IedS>u*43F? zSG<$%F>tj}Ph3%pQBmk1`9RJCex?h{oCB(|*nmlG=Pm+27+{Tz$gGiyRA7S(efD7v z>PNmeyW4OSe!#BhA~vT^S*;PyRQow^;w0Lo^i&!@roi+8o3bbxf@i_*6aw^b#}pK2 z9IGwI`;xMgyeJb%k?Z;C+0ox~#h=H1{?J35@fqx9W(tT-#$8FTQaSLFtShoh z(RN4-jI)_x?Hp7cTYjpJUDU$FMTvKhRmaeDtxKRsW2)bM`jlHsLh-%XeAJu$#oL6E zT&sF88Bl9%mKMO^JaE^V2R$~a(H~@?7UH$^@KD ziZu7#`ak)99ap$ik5b!Yq;L8o(O{&BVTtJa%c}uBqhjND74lPwz0-ILfT0T=xxT9Rp zv*M-FW#5Gtf$yng9$I1?QXgT%HSiRT(X8m%?1;o??I|{df!p_Gmp_@eX@#IAUnd*u zt&2)#Ix(~*URR-}<9yS@sqZC}Oq8A2334{S0?12G!I8}r=-JG9E`Mq%gPKvRmYT#< ziJzH08i>kRkq>EFZbBZ_h^%%5lEdNuXkv2m@+7i;ladi$uiabp zt{_^*0mBA6g+UmP`%jvrskPLY_Z9Ca*T-nK9DFHEmHRo> zI=NJ?Ui&QemcA7fyU;|m5c7HL-3Y|G=E>n4GrVj@u6#j8{HOU$Z{Xlf=8@ZL^#waH zmCM&{DzZZiKp7ciCk1rO6~Vhypf1SR2_khDo_wibZgS1}Bf9K;*0!~CeC*@TBylKH_01#e#XJlihAKd^DE;ob;lU;ch>al}DT^MNFTlsAknJMSI z6-Zq2sDyZhQfhpQCq?GRJ!N(V~I- zqQTtMn3$CIt*c->LnwacQ)N|6P5LJ9$7ZFK>Dw`PY?mLi^HJp0^TaE1hgf4$x@F2D z^58!9M&jjc#&abZJjoC$JLm(GwTkbjR&?Zb#b)YkKSG+dx4js-X+L1KI*q}xauWIQ z#&$2UX5jLxT7}?x^Q^UB}&t`7ET6^Ld>F5FItT<+O z&#I3;#v4MlReTC;d9F{@DYVhf+8yqM`9PvzhmL5c7u6fS=>pJ}f$RIn%dbEucH)X! zSJ$PA9Dm&Iebvv-L+BI+VUY7$FvO5W2%txoYfw`&R?D>1F)~7rQe}l)d2IO;e8X}5 zl8=_+CCkax1$deKFXBwFAtkHa*G3M&p|h99tcROai+-$Olthx8UT3||eZb5Jh32;^8ZeFaPcdJ`k zhD6+p)50HWmXw(bBu{+liJ80t?;#5^cqp$cqiM)l|>>i6sZ;ED%VMyjo+8e~1bkiyLvG)B;h@zQgt2a|$? zwdvkxSx=mhhbB?5>N}O*QWq*8?cS;xe|uw96`m4;=YUV$KdVBx0kt3Q?Baw<-~yUM z*URz47xo-c^>3EqzS1s>Fpq3oQnzx3>*H3y`eGVU>fH`biz}b|No{B4K43E5 z*gsi-QB2!m)>4!g#+`$<$GnwZq(>VJeqA9V8_vNx<@*mJ84h5Kc5~eBenPDow4?ip zxodc`>Zag_AC*xr#-Y%PF4ASg$%?K{#h-iQGlK7EU&_&E`%eJl4hie#+Wa{vgqs7S z_9l0#ClBk^J&aA2HSyJ=iYI8Q5VW?$u3GN*M`VRQ!}fNoL8 zwxf?ss)JfnR5$^P~1I-;%YLAKzTTT>koXVks3yxlXS_rD2pFO~q`W&X*VfD%Z&l5Oe3e zlhQWnkaSSlAo1d6FIC}7^<)A=y<<8%GcO$nmAlD9vQb#5)3;iN61}?tZX6%G`evkr zcxk?UvIj)p$Ng=yg6Oll&c-v}Ry^sr_!(onKUZS=%OB?;3oTohLc196NqF+z9`_FyOq(g9_1hBz*Yn~^WaeQNr2=yY{2d3BZHr)zhwH0o^1{v|h zlBi2l^EWUCbaPLsg1o=yU#S4@6<091z41;U*oaUzvB-wgDJx*fI$&x#fca|zai&;s zC}%fWAU1d&sIOOv0}mWH=$K>+8>TfWd!B={ zfZHR(59^BC0!m~%uVJT6Cb*$lCs z(Vu$*y2s#H)R|ji*wjs~ChwQk){LI)Ry*ON0 zlf#l@DtRDvAi5*=Q>X%x1Ml9)B{Xq!Qdwzb)Ud}exL84;eX^>mI9H4G6lGJddGi)( z0MnXL3X{OYFm*jkWcZ8dV1aIP{-KsL=8WqDCaoRGh0Uh+W{#rzTP&X+?NSGl0tWmf zke}FwdGy7N9tjq678Sm+4X2Ykr-rcTOu6A}QFI~45u15(B{B!N=T+GN&5eGQYrzQk zJr6bfD*AcQ4UJ?2vJl(7fEx&_mvG)!1GanI5x#UibH%4>_2bn7UL{N4>P~cVC;Hq` zeSBF0THf!DwxT}_3gV6q{7Qd%8`;a3$eGi1rTiJ8Bowr%C`iT(Bo5SIb7Q#LOSW1@ z<0XgqY-wzCnkK97YY1ycq3G{jmAq_8cb^gdr+}kB>Yo2 zoWPFiFLg1Jz>AC+)7|m23&c?%vkmGv77e9?n0>;h2ZQ>!*gto6rb{ro+^I|*x{~1$ z{z_b5{}Ra4rh{YOfLu8!G062JnWIN*wP|kjDM|ToL;1a~U z|5pRG7T7TSCi%tOW(rKIenr1Y21^0mkUbHQUmOF5S%BtwPxm)T(&N8$W_LShRf&-Y zjKDyx%AnY7)&Cjq|AFf(GtQ@xs7_r;Y0t}(q-F!$E4}~e?{TP;Nfq>)WKM~AdF$-q zHj+yDJ}=<`-X7d*g4ru>R64Kalyp#f5q?H}8k2_V`*i`^{9fcs1^#`QcA=h&SsH`R!nsA0^VfqQ6bbbsxIuXFq_)EaAoys zXpd~cqo!E)k#=+R&Jzkbe#n4Va-UA$B8k&NYP{WM-Ykqri9j#D*d-XA>3~b|ep8HT z5T*RDDM&epp6`)5EpIZ*+qWTyY$Rs_|K2AcY!yfdSo6f297ZQAcX|8cjoUbWkI7aN6 z+{g{bAs;ZcN z)SY?`MX;@D&s~3sE321?v8hM)vr`i6Fk@Xyl-~(=ymX&Q#8$hF{yb(qb)a&S?PKww z$+JujhfM05C~XSz?4wLHV5DnYod50kX-3P$I^@t? zE|`7>u?@dl*(=eFs-dskELY=6zxW;YU`uUApu!8BpuZqtJ8FL@22p@<_2 zEjSZdovOy+7eO#d76;yUnq-nM&%a+XCU4t%<}j=eZyIQ?>( zcfyioc_r}ekg?tct^Fps2I5kkAuygPx`4`^OcBf=Iv35uMp3?(ouq~=w4F9r2;+@Jm`DE)59ag%5ya$bE{{? zQ$~1j&g*b!R7Ajccuuc%-on*APi^e$;j31f$g-dQsv!OA4hz``W|0GFV9O;m5>`CPeK4U zRZ&AN+oL5G#VNx8H*sq8%8319tFvAqhbzV1txRr$kPY6-nupj+{04l%3FkSqxCW%u zw=;>6I@tcviJa?cO`ShG=xc}yIKPby+p38bs}pSRz-UyJJj;KsJm0IV@_=+I^I;7 zsa($L#?A3pWgmi*`WiB&d)BNP?(_I1zZId)CST4DTVR7>$#AdnGMGlAq=(qC#NFe) z2kJC9qgYVPW3I@V>)tGP8|`G4xmfF4FePzqq!RM z!i1Zi=X1w4v*CJ-8~C(a^)n^?otX4(UbCY&NBy5)-DCGxG3oOAO+srExL))g(Pz9` z;?%Hr;PPqZ`f9z){z1!Z-DE!oM?o58TybRdns;>HoIW#q?sfIlsogLP({7$*k=v9< zM_`l-FUH4#&>|MFtM^?_YF(K6zJ^~XZ|=F!7tc}39>y{NN}E!3wh0R~X)OV}0W1KO zET;T&P3i`$>$_63drpMGD^Kaw$YQQ!UrV-@Kow1Pq8<^yPk=2P2{)5UT}m_#J#k(t z!^$gHxE_N|r;_s_5)vmkVzg~%|D@mOv1MCXk)Vcu+T=-o zkbH%=45)7spHvN!wc#W(Y%wYJ@3lu2o!8(-o>g<+Xr6slq})dV+Eb2?h?r;%GI+B@ z(}}G@^tRGGUj*TpcD(&vFV@$J)ygd%*&E-{7_6&Wtl(^Jh1+gcV)h~}pnGx33rEt()MJndkRbb#?N`^c?4z8QZU+YBK9$Qz z9ve$k*s`+DUx8k6&ZW&8JW*V1#Ro2Z-KK@Qe^`-4`Li;QP+Quaeat*HSgsBE?wVksbDqsI0<+;lVDbr>VE>88G5!e=+R&i zS*AM==y30!l^Ub~0zI@fHsgudy$I?Jm0 zp7cInn9jq#Ylp2utDd8#_%$?lLI?eL3D%$o-$pB*R_KgiZpj3V_#tT4!n^MA+%OoX zUE5Hhe>)qp)0N4=ox+~Flv^Fw542oFXgveQ9N7dXLAy?V7@oNDM!x3Iu? zRM;u`<%%}p(Z<@9wiL>)^;+Ydrv*CMw_t+J3I9tV$wPZh}PyndiP`p$zEex8hX5_m2-YRy`cwyU^bLT8I+qDQpgSx|(#rc5)`-%)h-^Tq(cNybqS0K)>5uLK^NaaX z0lv$3Aj;x>vDHQI^#%AGFW#xo^$#+(nTsImoebvTC^AlCcS5+KLkbw=d6+10vU>1@ zMbClW@~~0ZuOq`1_FdSx@Q_l~?xNh&$Lnh+l?9i@+}r0{cRd43_Ds)Ion~g_0+aeG z1XG_lKD%yVsT^VV&K6r~zrvmtWhp5Ch0ohM+8Yg{F~fV{J9cb7$30})@jw4`az%`g zLQ1>t=r%#wJ*L2Tbg)~6qNRrRs_guVbMkZbtzHCOF8w-wDd?TH{XLkz84Ks<+@}Q%>bc2DT>^#+pmflJIGG z>~zEN39PoEbw5ZxmwCi7E|>YTaNO)P&dbXaGLr6f@-(*YgyX5}k!)UT%`|=l_YNb_ z#~qVLt*nG8K+7yn<}sAJ%-~}DT~g=Y|G1bM_-Qz+X7H;LqJf}+AHj^EL}ia453s(~ zZ{3bo9}e+NYEhUx`()x(&}zr^bB&uDqK1mVCM`F<7IokKRslk*w*<+1SX0@t8jDga zkgt%e$jfh8&J+U15Ei%!>>z;$@RdC?^BGlmMG;4X%)v3Ris9~1U{13LW5MtYgeQyh zwCU5VY&)NvjAm$b=DC=gec9xBTWRwrye#)8B(3+4Mj2*+#62xe{pH3J)Q6-0>_-k!g#p(op6i!F&eJdc( z@)Stjup?=NF^*eE!yddA{wBP?Rb^7)?6$`#AzpU(7%|r4@r{f#u`05_ME~~Vl$1I> zX_%f$30rJL!Yfga-?>VBYwyx zxZpmw$Gn+mnd-3}=y`wYw-OJ;P={E9)o?Tz?!5?#JyO8>Q5*pnqPlXgz~Wt{=jQ|T z`rkg7*^7BK8!jj6wQ1*l82**fC@8s8czppM*p_{eEDie~6)Vv)a<@W6lmOCTcgfdHXTvf*=tsvrj z_524quMNAbxwF3t^vjCC>4Kj>=8ZHnD;ADzmLjDoO3g{mF1(SmQ8E-fMU?ad~<}a`j*>=nS4D|o;D~eK$ z?!3@OdZrBRzE9vsaYx;8!DX6MVO9*M#6PxASG%iy6CWodlWI^gCcDtF`}Y&Y|1-_F zHb6=OfEOtju@c0-b4MVltO#}wrh1+aT@8Z(@L-Lq8Q@+lUqa zZbrgDu0q#t zx^edCyREUwsB!A_^Sz4yg_zCsoR_@kz!e@N!51krVbXNRIxpV#G zA;>7eAVSq17RF86rtOG6pae7Tvcbdb+&#}r0>pcUjR>_m!yzWTZv$t>l8EFGUVK4? zIjBP!qn=vJzoZ%5WN07H){YY!$M`O>YIcJO_iiLat$a*Gr(N1bR+IE31#78mij~g!g@( zkq`U^7)eNY$YN1#>Ssd4v0PyUAC{>OGiDI9l|3YKUl}*Vo0>Ap@l^PZK#I=MQoC)% zwj3_gIPzN=RI=CAnQBZr-s9SJ`o41#8Do$4E^k-M^u$^DH>^apZ)YMlEJ0|IP;s z79Xn1!*9LcdM1K0CA*C?%LLVRgrw(8wRba&-KV+UZEZYrk?NhSkkj{i_p(5!X{h4X z+-&i&-hqR&Q!XW@Gg@ZRyRSv|11?y%FI8QoL^X%^Jby*+jb9z(BMFwrqz49=jR=Sw zN(c^0qIK?knQGY?tWP+d(B80YBF)>dYrLUJ6*j0d(VVhX$(N;GesRw$#By= za+7Y(L>n<3GMOyau!tPShInW)PE#+t@#NwwVNCe&`JPRoI$;?w2p8mskW zTbqQ|+gv~4qF!0Q*Z#3d$H~u*#(nSc{uM`S`l6@S6T_Fwl;#%7g_dx2@P>vgR`ckd zF_P^Ll}VzY4L(o-Vo=oOS|vd^H5z24zWw;N23m9NU2-n1P7n5AcMD^IcB}8WiERw6 z{7IvA(WF_sxG{iaYn{ak^7X39E9{_-f3&iD5XI{%pD`9NvbTZjPF*A1_1TizS}%2- zzRMq$t9CS!<&az>AbwNXVPN|oI5zjcYSEs=67*y zzHNRDhvT~a zx5+Pju|rsjzD4%lj9j+b>6@~y=!fZ#-8K>zW(z$j9Nua5zWw^fh~8`QDvj^3kzi|m zT8e3-#%|hqAlD-yJJ00RI4}LDew}kVhpsk3zB}czGB%g+?&esg1oWtZ-Vxk}_7q5Q zLU8%Stpjoe0MfH9${Nq#u%lGqWaX0WA*n`vSuwdKmnO(=XHf( zvlk^o;>LoTYi|0EU(=UX(hkO3k%kf2ja?K*7wu37oS|tGlt~?f%WjkI7vzGR`MbJ~ zsKs+%kdUU2kzCoFMCFCuz=$HL_uAxKT~S$a&Z4W6dm|4M7&gEQuWt+RrBnFnduPs1 z!E<;unD#2R8~kqWqr_ZCzwR*SD4l!qf9dkDNt~4}>?I<-Ur#{y^Y`P{yUe-~U+O-GD}lg`Qm+!O3s*l&@gP}E z0mb3dFx)83{<9IF$@3ST!JhR`4 zrBcTn#1o{JLGu=fPORx%#~`0p6bo^T#sBE?^Ijfoq+1}mC3Yir?o%#}5c|}=SU+E!Q?I-c*QcBNlmBci&h!8T4eDswK^T4u;SCwHp&*KZ=zyje z9puJ&1=Q6|%r@if!8T3JB~j*APla=zWhdvlAbV}X0PltlI@yoNtAsn}DZc6n0Khrv zCUA7YZJyYoIUpzZ$hUgG`GB6FhM|ZMzfq5kPK2oD8+b%%*-pXb#jGDvu)ovlO3sxO z$$e(YFPvxg?q(5TMjMCp?#Ok_vMm*D$#F?3`AwoSRk&gg>kV@HIset>3ZAMbU=;*aF_WCU<9v0)b|GB=#=63&1rfjlK*<%NYGexDdI?IUMmxJQSrWi+ ztk)mK`J+RPBWkgU>$NeG267+69KW86>?X>6mzi~ar#!xu`A$xcJ~i~2MqjBwb5+Gi z>F%qI_IG!5!E+{5Q<1FlC+PYFW##4Or=IY7c-3^Eb4{eB#tV%)V@H`ML)wc&Dz2^q z!2xi;pzWVi%gQom$^s_)AE{++e6ENZ zS`MHZ{3c;aSq!-WR+%&jdi+pIYKVHgOhK4GCJncd(>w@wg2-cWNm#XRbDP9tD$qy} zjk#YZq|2RB?W9-AVu&iejVZ4uPymf;c1y$`5nA>Mm_L|r|mAWZS1Dr z8It~WGbiQ;WrJW<6m4%_G?Akn0}CfeF(s9_2%Bu0j|q>88&y9#BP@jKU)@dYGtQAf zC50Z_Txjgolk4>x2RrBnh*@{lwX}J?>{z$8iV@Yeov-@_D*e=u$QDokBwSnMRYMTW zfH%F^KE6soF|BYuCDl!DN!R(VZ_4J0hG`_>P61f%UM;YBa9wMh^x1qZ`+dY)bX|T> z9VsI9R*^b2EL5KH$n-yq(KOc(zN{fU!~qx9uV2(jXqNL^s%mU?Z~m$FNh^UPmh~Ck zu*Q9^s3s&SgdGpUw3;H|&}eIhI?N6@^I5fwu9Y&2>#ZCz(%X&Pt%(m6ck}WU9wC~@j`TSF4cBXm6@12MDI{5!|(x?R9 z{W^T}Z}2d@@@g~*nW{b9XAH+<=XCHrU-VyB{^9Zcr(;h6n;UD;**)jX+;+@ZpQ23V z;oLI-CbhD%Sr|C8DoDI#A4zN3O4@|G*IRMrxO}ZcxL^n~*k3bH^r2pNx%`s0iW){F zkNKh^L)`9|no#+s-R4x{_7lQPC-3`?@4W6&%*0!rO)2|(5O)5m3Z30`%FIchXm5J6 z#Zb|~6h;bLJs8;%M2qVZCU&cX12YM@nLZZ?_*vE)2j%ydET2p6Wa$!13i%miocIvW zA3!xQ!h@-dHHxPT`2rrSdW=cxh0?kpX_XZ~<$7oiPRRky1c+K`Z-aUQi$^L=({p(a z&xxjKh4PBo&C_7TUs4F)EnOOcnCT#0F$sIO7#;51%6(s}n}}yIH(GOl$s{yJfP!S| z7~-GTKPpVJ^|Zc^73ulqRBt2++=K9J_Moh#0=0p$K2M6Bxbmg052@`j&NFn&hl9$~tS#3(Wga~3e zznU)HLVV!s%;Y$IJP>+n^4V=wokf6rxlZa%_bZwj>4G;dDOSeFm+;1lxkdP1$fHI^ zLy3sKW_ZElgt=B1#Nm@xf8xuOZA2E~;Y=HIC4>XpPy;lrui;<2C>m$ac+ZbiyIfoN zvDo;fOjJ_mO7`ag4HhpsGJsCwbeGn+2`{CR>K^QSDX-Y9+uPs6jcU|uTrt3t$<}f$ z)Zf<2FD$hwIRR^Xa1YDW0_41$gu%1iS%EAx9V>IwNh>?z*M?>@E@wC9+qLBf_l)E0 z(+ut>so}BI2yV(Yy^C!Id`V8_Z(?=t95IJdm>;b%nlMf_BsXM=R6Dv`nD49x9hWPM zL8weErvp;5^a{^2_0MF!mJI)z!!-}!V>L1?@L`|S&`MU9^vn;m;KcE!7P{a}iCPh@ z&H3@TT@&NE?%J-^=gI!Poy;rkx@V&{=;*NecDei0>z}hnuOS26>BzonvmLB1SVY|* z9zd{@3lE8mGX%Br&2rx=@4gG;d-e5t9cr2s?_i=IZpwd~(EZGLrPQHI-osgOtlNrh z%p5)`0nsI&pYIzfd0@S@&!4si`tgEQoIK?V+nu9V!Ww?hH&IXDElk#)z&heS!0Swx z4r&)R5?-m?iY;6Tkh#dXUyS54A_}%bgzva(N<>@K<>O)Am9qp@1jGQ<$!P6d=R9|J zdg0QHQUJZ?vp8M`QTOCQOmg-NZCo|P3`HZ$%{IS1=TH(1ZgER+SuX0W-b!MI23)TTeWV}*S2kd=hJbwwjiaqKtfp!}dcar_Y>Y zGB@63)z+H2mX=hvY}HxoZ7uz$&|jZFS+gQHkJ|Q>(b^%gkU~I6Sk3AT`l( zGJq>Osuc`K+v)yaP)1&AoiYss*zuK zfwiEqR__MO;!du%!)htP6*9-x~t^Tqvr9p``)5)uV&IsB_F)JsbFR= z`s5|)1A3`1Fco8zB1e-=h|wA+gS);%Mo3o2eD1mOMHl%s<%ub0M5OwtV5!SinRcUn zMb1Rr&L{JVi5cRpIfBD@2;I(5!BF9-@5*LD^W;VGSR{Lo0mt00Qoe5wW! zB2Vy`X;UjD$m0`Azzn@y+|!QZy9=AiE~bjv-|6@RlxG0Y1m$;>2)|l_i5qNy*83$? zZJJBFFH4n5ym70(IHir##oCEg@VsfjT~#hfdn#$r&SnygU0L>PM&IQ|9RU7LgVxLl zxY^IROT_s&{XD&N?+?81bZFm)HM0i{hIm{z;r-C2lP4ilh%U^kf2!xTGrWjwMd(#q zX=a=W4vM9Thv++L6y^)|<`!lzpO-X`F%D;_R9RJ-i*2d0CDiJ-v(DyK2&YJ4Um;ZyahH*8Wyu~ z@a@*Z6yMVcGg8NEeIH5gEw8uas4gEQiiS`VG~qMWlTQI3HS&&*mhjOYi=w{Ir=AuA zhjg;#k?iloQi8m#^D&(oQ*BC^`JTB;b*{Leb0y7scynA}XNK^@@{wk3!*I$kd?v@A ze`Kr0i|Bh==CGR|DFM7?5i8&A58bg}y%t&+g;7FJOV7(&JfEHf@P7N0GZ&FFWe+OC z)Q|DtXIJhr_aK>6=)m*+8QimM!Bxd@e;+qenyatA@A8(t%4zjX0aqhX8bF73P_YQn zXTWHwi~3DMZKJ{b05f8tw(;IT#Mk$R;mt3-|=reCa(_~slwNS_vJ5a+2~!YQi&*UU$AkS zFopdn)_lSDMm20o_7dsJ{=yAwmRW_8-GvsL5Uq+!RWd_lwH{n%WR2oKc=12?1EC)S8+ed)1Rzg)KC(MYu6l7 zGIu7Nl0A&?+WR5Zh$!0?4Uq@O^{WDey%^#x=MyFqYrgNha4P@in)$nBZ4F{g~mpNttNqYpd0p%p#569#VTi-gz|< zJLR>$mNs3|sc&+Q)Hld2sd?X)7Hsu6o>SG?AZ;mON@XrH>41|sSzZs)bnrOBN8@VS z@WFQ2+(DDcC%ldDRs-@Mn}K6D8je9x=<8kwV6O0szQfxj8b6&JKBsZixfEfHxjvPQiz8W1A-3CDmpciErN~; ze1yJ3ZJ5&MDWVF&3j;8{n0o-Gug?J)*w)UUE3Noe7$X6ZUc+P{8DRh1&QbUWR@L$C>v{%J~zIBW5z?R0L}^ZBNLx^CD$h zR1olNPRu}5i>TK^e+m9uur`Oqtj_MdUb^z&2er474;)#)u*&P2OWPL6Ts8G&6zp&n z3o#(BrL-ruA#uJKzfOR1vy6x$+&~9O)Vc(|k{nc4vDL2skQ4nie%Py!>++6uvUP*i zWy9`?*VCEt?kBu!^08HlryasoLP8qGw+F#)!$f)?wDrGl0K2bO8_W6l_BPu&MCrcM74i>(HSB!i_(5NdO7sIF&WR`ft?! z;Zbt`L3i|5mlhD%lU)BdhNS<<Hi!fF|eME^SVw)cSgwb35eJk8_;F-|AZey zN54_FD{%qH{hyDkB!a6J-qg_EAPll<86WmrY;-?1&ASJPUZT%iRkt{8PBVO^u?&EY=8afAl8+CEsJnn2ibN%1JI>gkSu zGR6K!*Q~b2Q=|*ESMSY^>A!L&BjNu4~JZOhMu-e(ZhF%yavi0H1g`bY;-NFH}8PMExI{{2*oMgHvtyP}SYE z?ap78@Sj$Hto%bS{2$G}e+01tFaB|@xyMnm3-C2=B?0MVedkg@CZ1T375Hz|{wZVp z(`Nuygnu811}m>vv-!6vRezEg0eY@~!r%WpYlbO1HlxqH@wEy)exyH;=1b#Lz3UYm zal$0Ql5hOMx7QUHD2Ed%tFw&9k8}Kn>KEM~)lZ3WL^+A)o7vf3)i4gDxYTBddyk>$ z-BVijkKL=!y8w1U8qK&et4&(py|th^ckt4}sR8AkGZ8UZL=q$yU0n@RzFUlRp)Xi4 zaHOtlxz+FZ^5PrIZ0ghjePNMKMttB{Z!NfT`?En2pS9P*Tw`u+{4yoZ@vDQpvGI@t z4~cfa2RBXIMGVpulO3oJ$DH+~ZqMCNl&vn&Xk@RxNvfMB)bk~h|H=6*Q;WugGA$;r zhiHlp{Ml zuvL7CZsxv9c!;%082whXJa&02#aUJ^Gb+_& zeKzKu{Kru%6L>=rCM|0K`2rfqdD zi`81_3xoulkw9qdS}Ks|2usF*R<7oiL8QL_%!}owhwuQjWHI8r@AbgQdQ}JQ%V3n} zx?SK6W82$QWL+g@PDc>iI^z8Mfh8s^T5enXow zpsMpL!AJc_rZy!QKJIZal_}u7FwSfC<@TKUAZOL~y?`Io-LH5r-M+zU{okJW+tpmz?h?~hTtx;#*xj!YZcqEDUccuUFPDuDef%a{q@H_Q~ zB3&JP^R!e18KCw2ZToCb5fN{ppE0VTy2Y&cwP*Zma8JbmO4FVy^Ox5gIlLiuPPO@p zDCn5%0^s$*03I7yqQmT$pkZ`i@1FEbhh%55y@dm`c2}a{R2|o=cGB_=I&3H43dxFB z(!u(c^ty8Evh~ONfBvxzcz7tie;C(n@`5v~yn*ry^$(cfc~RD5{MNEND_-?}ODh~B z5#=*7-yUSz@V@`NBG{clIWV|B_P!8DEL#9`=$D)1c~XwSh2XsYkc)Ut6gM;A&=MW% z69=XJp<7`-$U9c9k>~i}d#50O(c0hU{rWG_^_o09bn z4+(34!ipm*I^kzhOefWGCr5(tm}dJ-6&HGG;TyuEKm7%Rlxutwj|d&fPG}G!WfK7y zA}vdBY!m6?23q{z!0%c-i8IB@Bs8S*Fq^!>4aisR@6-NL2GJQ=iqOfqQGW%E6R$Zp z0B2vawrkEP_Nt&>S>A^=p! zNEEZo+6f?uRnkmR&4ccbz5nPaufR(Y??{ku!{?#LB2;d6)L`5DPvWX%&i%x0{`xhC zbpItr81Hr$ewbYFaD=|VgPmH-{)Sc^8ng&{iaqIS*X+xbpMZlt__D$($v-^-dCXaS zxOugi1|Gx8!SR@)1g|?_&4AsHW{!a{qVFnMPLu@jCgOTf4w17g6`{jgU!LFpWy+aP z{GLY*0RpFt@l>eM7jRXEO+_1AajC1{UHIE0Msj-jS1}#W=PzVmE#x4Z1$Xw!=1O52 zDo{%2YENn!ruSafWv=MAfIy|=11$Z*gz<*Uy;n6|PIXb-JvPzMi@?DP1iMI(!oZ88 zi_|eK3g+_uQez@60zS20R@-Vhy!QL@%t=n%b? zU}iGsqRIkm;=gQB@(2qKSj`$aR;exz?vX7gC5%*4IJrcy@f z!iwO_$e4@IE*Ou0&{srcfR+4eev@3J#>c4?k|&@JqBHp$vf3PnbmL-jZF93eT<7rZ zIxfOeH6#Gfx(4J$_}%2<#XFV_mR%$}LC@iCg*HN9@0Ww_e55V;w-K`c$m74VpS3Xt z90VE>g!zo~Y>L;axb1(Q%^%sC0W)-17eWeX=wSd6dSVS$zVkO~|E0v!3%L~)TbcZ@ zc^Qi@duY*X{$3Lbn{Ns->}HMVgUGA{0f@Kb7JftvYZEKIb(};Ec3588oHPE?KYG4D zQ5N78asKpX9ZSBd%K8$D^#QFukV8^}E{?;}_Lvty%C`9 zv~EvPe9xE9kNU2`PoO#*W&5S}3GUx!YHh6aOWEu7KIgbU$BG z3rSUy4O80I$tvY>LF+@Lt{YCPjb1UMhWbW z)c~lZr;>xlF=gh(N_-u789#I(1kDJQ7)gBgsB&B*zBKMASltqkSxNxj4m}jh-1PX3 zU2b5<_}X8yeY#_0{nQ#diwc0W<6T=D?EEIfXgWRQpWNb~^}Bmi>~ev=-e zO5xg9Y*_>Ftx+I+p8#D%YwOOD8ErnO*4iw3~%9;9czb04c3%`=rM$L3Z> zwsrDFQTi!~zu<`m>!2k)wdzF`K4=dLSi@;!p+Atb+?cdY++5=im2q5BUBDOikt5k+ zf+KrFb?`;MdeUx!<)r8_GHgk5LOO`j)wPOnr}VzNt2^Dpgo|~N57k*nJV-9ULzvY> zxvATD-8~rw`2fF1Ma8$nJ&UB|T+wqaz>PNCAq1wENyZTo)DgI!eRxo0en_5vO*%{_b6bE0}#w7P?zN=(UMLV7;V{)}15dv=ISP160ok( z(EP!_55{{Dyy{HJ!-5xIvOufG%(XzQzIX6|tXc3#C<^Gl#m(LrH$}Z`q_0}*3Aj;^ zJ4@==K4?lL&zZ z(95y7TpIkM-I*qV8k3%bKAW$iC0^@f0NZXD>H&$6FW-&0-)-*;9jMj#x?Hi$=+<1O zLJd*G*PxT)=Nk8JV8?pq93y2+#|;5LBg}O1r_A_F*Nm+7QPC4Ya#zu6hP5Q&3s<#a z`K5oq65+4a68|S{_En6q{)EEDE^eI8Pn&ab^Iz2+f2f3B`DZu>|EU?rOw?lT>pWxl znRk9Oz5T-9kcfP|YKRm3O_HjKSNl^x>Cqs~cKkW&Qe($tbqe}2#V=FM2O655Q~n=mKbOL! zu*`exKtLao!N(v1n6|ph!5h}iXUc3>GvX>ruL}j-YP#Y#KagCZHSnOYJSRVq^mzEc z>~;LNwoRvo{m8=wWC#|BU;?;6ZNk7Lb`ul(VT z2~{xoQ9#t=M$rQ8Ge_bZb6gAd50!t)`2KXUda+~Sgu7Vw?iOTdo0+YIv^(81gA$tu zU@_{_C!d3EQ`~3?C*_DGdW75o^P(koXR$VYPzrbW`P1Q*o|bK^E*ygXUaBsgm}99% zd5Gy9El%zO!MCBBGUsBZYmEfPUQ~29j2WVhcZTU=HG2UgT>JfeiYS5_`H7BWgii9w zV5uJcS{lzH4}YjQ-(z`w5*eV~nt-g!Zn24iAIw4f8>)XL#jsfc$(Hi`k)O1)D&86x z@(uG+lpgZ!{`_TcS<;gu(Z$Bx3#HjqrE>Q<>%6=b_=?H=A&yzdlRO>Eqi&ye+3fOs zO4p&bK&qA1KLrQ=BP9OE%0KqTru{YzV?D?V5a;tssC`}(l>S&^FOOzN6_a(|FtTT8 zaoS;$&e`B(S0o%T4%a9)Ev6|}P`i$zScoN=sa903mEdcEW zaaTJ){p;34Q7PzEq4jf|=8{*ph0uB@BM?j5b2HGSLn4hyC2-28jPUW$kKJT)eUx8H=; zNpX-+JT-7RtwYo9Au+AmSZd@|BGqQg;D8NhvFRCeH}?F~(qdiwqK!8>CFS!zW?{{* zpMVT17&*TE3DCsW8pU9O}vCjv|J_v4>0=&(Q}O^TI4@8MCx(Ew@gq`Uw% zOYZQ+V9!UHEN(ASme73ZLPmwjEm5XVZ{Mc~r`)^8!bOgcUN(p!az*q*uM(^Z@kv@u zXBnBU69!yC6^sI)tJ^=GgLzEVZSLTYa5Q*-PqYy6CWI8L0mm2)(i29@z)!-TEjIE| zRVgQv52f>!&ZZ9C`V2+oLtP|h$IcmW1$cGfXxbS0aT$Mx+7(kx&qKCPX3?w1CwzN< zKcZfSB-mHoqw{iy0-#Ra`j|uyxrN20qIGYRzBAW5JM#*lk`{}(;qGWGv-p_w?+l6m z-#wpVI9D8KQKSPYXhYTjJE3UA#u)K8YTy5NFYs+yx*h?-Sw&^q(7+ zbKFFOI-JIDlIFADB#*GB(?)-8SekxQxr9%B5rCz&#^)3V!}?^GB(NYb?W6Evyr{|N zt%k|^lvB4JS-+;(Wk;Spp)nR16ydXzV58kUu?J@rHQ!P$ZhGVJP_6g6!l{MZJvR>z z56{?B|87OAq$nQDw`A0)u)LVhK|B{v?6+@=#zw-k$USxPu=!@Ljdl`WYvqP1AilLd zNC)qXLcXa5>4GzT`(}uW4?(QTo5b%`jfUq7F${O8LPHKpVXrU^Rb|`hb=5^EPP_YO ze4UPwzDjXsh0XDTedXWvB*;@#ytsK%6vzo14NyvmKBgpevbU4Yu3@@<(bNcWBd(9i z4bgaHd4Fwzlo78*rprHYUGn8;64|A@E8V|>JIYW@m~YL?cWrbhD}Ve@w?~U?`YO0p zO|tVltM_-m<^JVzcBsH9NR~AXmxxihfH6&S7xz`N^4pW(x4G2Mvgq>&J0P~_xESfk zEGb#0dN}sNE;|#|CWSuW`T=pr`t~36cGB;#wKs-K>)~V(fx&IwmZy!aIZqBCg-5LS zC_H(tdMIua6fhFKXG&u+CynNiK(WM(6(N|lmEyXdg6*}fhL5c>tpZmff8~<88(Kz( zD)alwy;0%9*I77Rx?hA97p0VCRtV0id`E_W?H7N4T(+AS)2yz(Z900l7E1du(uZ z3HCZVhjAd^ot)|6`6o43@}aYt=Ksaqn@6+t_x;{MO*PN6P*iKC#tNZos*sj}D?&rGhv(9~;v(8%2A68a2 zOV&zu_Wpj~pZELqe$oAquUTY}O7PFOwDo;?eM02cQwUSdj@2aJR$3ieMYGlbziKS_ z;>Dx3Fv0iB1G*2Z0|sfNyK#D@p2fUp1?Q@Od3+A#+Aw{zyA)w_pCQ-M{*GdM%*u}y z;}3^A{C0+^WZMm>AQ?v7N>nK}`-E*e8Oz%vI_iVoT0tnVL; z^NPDva;+gfiEy$glmVw-*Z;<3tzPR*5oJjM{ts%!{$_bQq%N7Z1K7k-DF=~sE4RBS zngjqU5c|HAKnJ%i80z`-Qp($zob1Ul+r+&b!}J7@(9jcPWF_K!>innK1k$uZt|U@6 z<#Kzeqi6Q*JDa0Per$|c3SS)&Vs$K>XNG-t`=g@+U%UEEqduxhY+_^9V2b^UC%V}S zFEeU5?8D_{CbRAaFfUA{rA8N_p#*4?o$;_QdeKvC*RNHA_yanL9WsG|j_$1R! zL1FSKM@%6n$4`mEF%XNo#qH)|zA3qfO_+u`_$A}l#YD&B?VtT(58p=TkA3uw*x&xZ2b@)#Ln1vt0Zi(8#xO#H5@qq@iS-%ffMvZ0S;teAw1V98bdM z^e(1X(Bzyaq1PgdE;Xhb4K0ecvik3txmt-qRSmhm7XBH@=P_adXk=M^J~ z9DV3V{(%4gd3;h2ZSP_+3+;K)uGl(H{C&W}+E*w&x#4Trmv494*%(%_N{TjsCS(YlCD)UP8JNSm+ckJzARXSz7X7l zZ$UjNxQ-N={dD0$SXlREiLwe9LlN}pQJ5wALi|t z!NRwr{*CL1j&M={UY?g^yAu`K+lW_vry2ci`+Zypv>B_(4oCn5O_30^6tSP$9J zmO_015#7&{)w=!|&2Cv~^G;*X!pMtxQ@d6n?UPL^D9p}@wP@g*ffH_9UW2fmS9hon z7okIK`fGi=0ue@JTdyC85*@2NEtY#2|Af0(W^Qx#%v;$Cm6Gawl3csREX4GpO-<>V zQ8knKcP@?X*`xV3lXaMF@hbrx>|fc6ug$1m0NW8^Nn&`du3q%scoNjDcoRlSC|&X_ zc&e|r!|y-qdz<59O0P-$m2MFIjh=f7T)#~Jv2p&}WySIrNOIv+47Ggr7w8S5W~UmE zv=RVWZSO3r>mUk9AVco`8|G=Q4E#7R2?i7%jVD8V@s8JYr)1`XP8QRq?0a}mLPgxu zX)P8zAK=cKAuhz2KPcv?fi9XRmP8s2etP7ix_1T6@xBi1^z7=ke#u!M4LE<$$?AZu zyu#lUmTjN#H#fdrvawk#&5I~}k$0s`cedzr^sDe3X9YyY@!=%Sx^|hwa||N|)&gHR zai%Y$5pPgsq^O=T1wR!&+B}_Mk;{6F(d)C3YR8x6qokadNae?)q>gH&X?wCRM4Nm1 z#jkP31@$i!a6ao6F)9|(y9RpF*3+GQKyM6^r_7Gz-E%HH9b|g>!-bH!>yg#=Js1DT zcu;0^-=Q55J2oLr6VLK3&KjbWVS(kJLV=rG2LY1pxhPe&HPYHLz9^R<&T7=dXML$N zhZI2=+Suxav*>TY;yW3qAZo7%hMT8rt++zYe`YG}MKrPxwbm6U|BFKP`w&002L;F! z+MP($#`9ok{JD1O3lXAqte;sC!c|@41;X!DHsjkxPqtT%Aug$<124_qi0IW;;p>E4mM{cx4u} z|8QYwCAcLcUrdrxXXjcsS_arVVb%5~pc7k|vvMQ@{4bD99beEPw{5=`_&HjEe)ol7 zG|eLD&p|S9RgLLthINmp^T#5b4T#i32}l>Ju+S)WqDt#@a736tea3K365a54-gr6* z?f-u+vIC+!%QFa2o_AH2Kzo+m0c0yp@;YnK|HZNYtrr8zJUmdpwZ|6(&bJQFt_}QS zg#6E&g}0!;E0@ui3GlwceOj{_crY*|VKTX!Ft~_L4D#5--D5o~{c7|rWEmuU58d)$ zn5j397i|lSTYrpi+}Ke)7n>nFS9c60BFzQOO~c$z>)#B}%la~vKFAb(?8@9HFX|>j z$>zOn1;uc#Qq2C+^0p;JRwi%A!e8&s5k?_uitd#72m`uH`EX5cV~$X0=vTA}@Za4n zNg8-C!}n>H3m<4xT{~MG_3Wo`mer$h?nWe+^*#;$$`>|vwm_C_f>0utSdU~JskG{R zvRDB-t-=6a*c$jF+_mxHYYD82(3OVMKDeFre1-Nn6~-YZ7TC#Zprl|3y<-m45}jW2 zC}9tRQ#qLs^={7n8g;ohvo-T5!JbH+UK81NLk;fD;350aq0aIWqrzh&4XR>*xA_++ z+36BNt^bg6yFfUB647OkYiq=H&ApCJbkN~C?z`~XeFTnY)S?d0E86@zqb=#}%!I1{ zYB>3;P}XKG?BiYi)@)a{y^UBZD#0IgT5Z<$I>O-1uBYc3MC&IihZjG4s!lk1wLKb0 zRayp?4i!nlMjzvY6j(pfe>Dj+odPnG4k1xwLHuI2vJ zJWD<|&=7QBjpp5a^Bi=^F1Iam`ItuxHgV`D7LNxXW#OvWl9klIt{Bj141jcbqK{x4 zh_azUFzZ3>oAbfk@v`sDaRpN!eYj3#!Ve^vNql{5+U4bP>}lm=^fqW8UzcTC7JC0ZijUTN_PY}`91u5 zINL(%tGxJwYTo8a`WyMyNn|U~Offvkgk3b$3`eKqB+E5oPVEx*FB^-d&xt&0DRxbJ z?NOFQ5$5_ieTkJ@)QlSBioE=u)bWPoU`zHOvcxylKISV{#!bAFXiE3sN=!FqH}ttR z64L{+6n~O6>P#eevC1N$p%H{{;|4P-MzUWKn0?dNaq{9zKMdqJvzTFgS2nXw!e^yR zQi_@1PdVGq;E7yuxvFJ9@ZMcaUgokmd$pXa9-s`bA3gP0TJ@f?5&Tg6k(Rr`BxY1> zAXLx68X=$G#~)+UpIq2y@|f^0poWoJqVu7_72vAQa)A`PG2hd5k)$>dKYi*BYxoNU zvp1B#2ouAkC-zf*toRuFMzu1T~H#?-;n?&-vJyVb(rm-ZhGKYml~_GhNQ zYY^@l{BEgBh!ko@e3t)2Me|L=Y_NTpT+nP$$Pf}Ry42b@tGnyyx~ltD`d^?l@WT?N znB?)+@!A5m-?7)94JE#V2lM&)esPxTU0fTXw58ao`|*@lV_e6;2(%9D4cybrhBk&W zg6@%$@EPp8!g9?WZCP@X*y;5g^MbXJ<+3^T zabns@-hQ%EQ;VA8*yX``zw7bDq*v}qffwJ4U&0nJb7?iVz>>f`LEr?df_I_*#sM{- zzpE9TRm5_zcEv0NDh*ww4wbVI`9T#Mqw$J~h29IwKHb*{BeL{ezcMGgT&BOVufLVP zuiKr;@OZob4_cZuT zPf?rd*AEgcWl#GI2T%f-5+;)U0RP#WCskgd+C1;EEqRMvOG2Z|JB(K5x1+3{=cTe` zd8_AXSHlam#1%CnhWrROub+3#8t1Zg&hF$oi{awUtCq^*Uwf-TXdE+ zd>&F6rPRNvJ`@aCRn&&S3`jF#Imx?En|mrqvxwQ5ZMz`83KbAeaPXWv&ZmETYoI=^ zC*-L}pXlB7^=Q-ZQ2;&hw>}5N?be#WhY1`bX_bo95mRkJSMik&Q|9g!%Q8gpvVgPKfVogty7Bir{1dWf}hgEaCcydv|TNE102S?rzY? zAO&Nq4P6H%d>fFBT6^Esi(*8?X^WCAW>ioqt6Cd{{leD@_hYz)sGDlscsT#pVg>t^ORQ zZX90{9du@gryh9oI{E&L%=n!Lt*J>Cw6uQvub*Uk_k%Z3`z5C;=pupz{sL40$>p2f z$xdtWSN@zo;Ph%fuaLslg~+tz8_m*?-Ae=&Li4NFe%F8JfO z_-*lcQF=r(aVsXs_FJFmCrYM zzcc2IZ4q4@nF4`k&cT#*$E(3i7Go`~ttc_r^uEQX_8B=ki3c%?BdtA>4R2)zER8|J z0vj#C*s~h4XPH_C#86POuRtp|JkwPD1zb$+T1UNwCx(sjgGl!Wfu9rBXrRl?0mkE5 zEY(74-!yq1^xZ8ElW;y}!cc!%+cR5JKjhJ(>a$?6;{MoSMCb-jk}H9`>g_I1UK^@k zD8dHLr831Kb3LkzvKGh3tE4YTmv@*7hh5`cu>&)sJe)5eMjT53#TqU`0JJpa#3L|+ zmjzuN7Bz0~`1#bbJ=oY~SR}2-UJ9hKmK=IK4`vJMdMbQz-VZa*hgdt)w3!!`+_#HL z@#tB+@|w!W=gaQ^Nf5l?245`qW{|9*Lu1b1IsZg3jB9yE`wG!HDd%?M)buTd_NCXl zi`MOTMzXv8*Lo3x)}@Fp*d#FEKioLlV;%BoTtH+W{|FJsWPG)Mw32Sz`<6FMDYH(NQpk3yrX*(KVHN^A#GFOIy*3y5pwRaH%0Z% z14R3Cwq0QN$f~S)M%!Bzsahz1%&{G4cyY*&sJT==rjzxf-PU-}MEH-hkUS)$g!P=O zE`MY6;-id#Q1E^4G&c|2$@xcIcdl$>m>ycBb+b}~55)rakwJ;IU2w3SFx4`%{|CZF~8P)zfbXdbkg zMWfv6>eWjt^!jc;c{jiMM9e2ZY+vnKhqh6texRu=4+~iJ98)#%dj}0Ujp$z&N>{49 z;4al2COOze@tI@@^x!ZVm{c7Jx!dv%y&g_pAXuXnC7c2+k?4R@xpRK23pmikPJI*?^*VlWAr zqyE`fzG9>u!JSRd{cVGVklXZg48}**%C*_WVR{(5Z@=l#roTO_a^`MC7<=~SFOZkh z=g1sgj*Ssn+*{-{UrS3LRmMs=1!msoQ9bso*7w(&&RNN9=L-%yiuTKnBeG4nv-QO%&EPw8Y{>hhvIG+7Ax-ymO2epk_?uE}x3RHz=awwm6k=SK&I;Y>b3TS$4mMizdgf%P#L6=j#YHy2 zTrUFFxZG<)-kUJS%KYQ7CGVXAgnG<5doDDT$T%R;TD z4x40ejrZFX+Bth>jSCDkFM8*n3U#+UTUekMx4#DOlbVlQM=|TZLk1I5v%QPOTBng5 zXD@u;*qh*GbvNRVy*GeGNsS_FGd?nrV-o|F}vebWP>Sfv4PDZ9($rV znz}3QD9jHnw=er9uB}V=!zD>?aE!vrN+jkA)q9|~T9%Zv-qp7cIApmSrv2&; zk>+I{*_TTNGk9Zu9IH#*XPY>@_@!!$Vo+Dmx}5X|%nnd6?#1@Z=W!S8D19lP@jy?4C@9}WhIHgP*AeUE9%-j?$PTHHRF|QUio)TyaQ0Y zoq?2}hLgT3$GtGW!I){y2fhgq0!vWt&;^FRRY@YW4@CzoRU|7$ypQ+&P}sG#Zvw#~ zE6tt~@Mk73MLzt3+@Vb(t2L3v*WpX;1_b$jc!rY%u@?w`GaWV+?iy1rcq%&9?kQGb z>r>cXSq?Lve);mXbs)0Bxgfk`fBRH&IcoV2cu+k`+K&)d($_wE(bw>l;jVyu@v#QC zy!76==f|s>F}|C8<6M9AUhm{x|CaAw>lyg_*e(tiYBjb0XpJ+OPk@nv?}8vJ6UhE= zrQ<(-{&}JJUx*`r+ic2k(pG1U+80?;+9bPCRNf_oLd2#m?o>JNI)@Cwv;LJVWZqij zcR=E#L&H^1rP7epSRLWre+-YgzM*)vFOg!q{~SIEDq>tJLzG*!OdnL_7`M(iiJM%l zWXxP@Yt<|T9f1^;DYkO~oSq)3Zxc<8aDuVgI4*i!8wz#zYo2$yFeh^<(=<@fFt|Va zSxOT9vMwK0>{Q2S;FA_mz%Z>c2=gBp1nU^2(^*p|Jy~k5YlCL`2yki(k$zYy+LH`> zxrZ!f?3@pV#eR$S4BkxTrOJGRJ0gQm{Q+bZP;o(k;m-RyEC7duyI`CSv`%1IdpleKaX-?xYeOZ(II&})l!K&`T+K;I314^A4NpzqzO(UBDT4@j^fVP@h= z(Ol_z7sqzN*V<>xd1@Rs4zIU``rTRh9*NTk1{_FdlCn18+}o>K1XK);i8FB7QJ~hv zK4sX}VcTl^{a|4cmut4?!+Q_cncjtgVkowQtTRYxd`9{npx1Ep{eeg0bgARttEhH0 z2fo4OGceLk<~|4t@pb!>$H$azrno|KAGm(rUgKqTy`*o{UAM83tE|*BpFzBb!2mV^IHIS0|Ainq&9|;i6MKY0qX7 zP-n`R-m+uvD=0r5@QOJ;88Ebfkb!fZml3i3=fZ@_c%){4WSn32)J_OdFh)B5{$s+! ziS|K0M@Vm}NqL+sX0wSfx;CJh!M2mMDbGT>+o#KRGw6fz=)-RZ#IIYU9Ix~0FQH8< zY>Jr;A)w$ObEgQxA<#`Tk3$jV^=9EN1$})5qeaDqyiY9gK)dW}C}ZCt`A4&ok`{~? z^h-*rVaG1ei{-WKS$$_ZS4)Js)bAQL3BBC08`*TUyu&Jbc5Or-j{ahyiC=}^Ul?Z{ z1{=%XYDR!0aP9G$U+&NhaD5AB>0c8BpiISA2)+qVekpen3KtC#KN0bdlJx>u3W{yH zT{C%NpYdv4n`=9yhHciQQEF(5c@{9mW50bAPq^7xa46td;T8IYCe;h_+TV70ZkAa*nmrGk7y>TR{1l}A z%oi;MqP_4#dIHd>aVHyVDG)t0@Va=XgzD8Hm4pP9LQO4IMar51!GcKK0bjz}@2@_t zuHnUs%XJl%s;~asSX&bKzG0ux#EvegXTPU$`^#04=m6jX%?IStps`VxNKu=;#SlVs zKAuT<@1eKstywuyml!Hvf1L+8@q+37)}KO4>MQ#*Vz5fPYxT~95o>fk9dA&Sq|z_5 z5HlW5DUU~U@ zjd+d;dpQrt*Jb#EAexJ8PFzXoAE!j1ObI-RBJbyD-pn751lQf9p508zC#MlyQ8!>jbhbS z1!utNm*3|;yP>nl$1+U62=I=AxqfJM?MD#Z*YDK>1dis6o|Ga6m=zlfn4}>wLx#$$ zuR-qf?O%)W?@8KwWj(d}-*ScBq1FH2aAf`e$9ZM0AFwD_h~MWJ623aqgyOVwAQ|ke z&K<%qMMo#lb31d$KI*+t7CQ6G^HvYCdhTC$uLZ$u zn~Mb}eVR0yT70;g==;Q0K90)tDuwdSF6Y_&9M%`r{Vulg%|L%l&7pZ5^f`Za>9 zAm&#I`%{QSyCvC74>dY`!4DO-Ov$BFT;Pz8mxug2Qu*KrngkFuS%blp+8Gipr_eN) zz_S{mN$W3O_JcE4H`MMch@?)?PCUEeNOhyoF1A0%qglRYN$2?eT2q@q;>KeJg9aD> z8P;UNLHg z_BinnRZBgqz1wbwhN>z!*mVOzrU7+xC9VsUyq97#5f_3aRS$5`awl*8sIK7q*vs~GMB0`+kRtl6=p!l}<2aVu6>KTr-)E*1e`H{&H}QpC`X&ejy3b4< zHUuPf#2iRa0(c0@3AyI!5?D=g*Ke8e741x0UHPJ$DSprOVdpCa?W1Xuv*RpI4;VZe z5tSB~R4c1I=1zK9Z{2XurjC5|@|ok1(6BIuqO#_Dn_s(^Pp}cccL)^n&{{t$qC8G4 zT=@Hf#WH`Rx3{;8FW0kY7^`E#r6Eppk(+6tZcFoSARJalwQhhVVx0+$;R*W`>!U2a z=Q3*fbjSQ!Ym2f2Ey$av*sf33Z{zmM=g2rkNw*Rh%ZAd;KCpE7O^pOT0NW; z9s0=fO+b$r#lxro1_T7PiDvd(6>lXTrShj1@Fa?*Ni;X-g`VnoRLC+u9=OF_&!4#ud6~zpDI_{eN5;MC*MlevKXQGSr+s2Q+_RMdT%{Hm5v-5+3z_W#eFY z;binI2PB1-q`GMGlI9_2oYh0lvzmXA;iI9_D6es#R{1SywtAe8JZ}sGdSt+REErO_Bsf?cbFnf)i6_6o;u`R-3v)Gm^;0wTQp;))`^<|Gtq}}g7Y#m~A z2vedCaa|JCyY$W#Si}#JRZ#nCe}N1rHqqp(L4TkdfO*%m>yHA95NgAua{g~L*!UVF z)B~2@sY(PI|1x-^hB{>lPFV;^HU6&$t&akj>V_RBls$i{p6I8#l={O!a~T5+g=-v$ zp^d#98$?du_4H@ej%%KT*MF|I&DboAFbrHA4;gu8i!I4Y=Xo`@vEMKv$cCFXsvqLd z3w4Qp_1IYQ6&hUF=OjhM_QOdIK$WdxWxP+t6j}a3m6*Qpt41#G_I%%p4R)V&^_N#g z&0p5Mi@rmviPoz{I!!d87;M(a#;vB3w%DebyAddsJ(CpA(iRURtE55^k>!jh?NvQo zi-=f!N&miNPq7s7a>=PCso6?GP$cuaZyh${b>U$4KwYtqNwwc%c zgNbTzm5V@AwV7tJ>HPFu261cGfhapx3Fj`U+?{Xka`Skg4~H6X*u~uTiy|Ri{Ar); zu7PkULgBzFZ;mlZFAQH;D{c6!EKFquYL~8`)%mzH>TQfMY>b&ol|qOb6bAiod>TV1 zYfVG@X+qO)fST+JTSW2WJ^}HPA?^T8|7*GSp;Rw3aEPt+XB(!KEMfX4Nq1dKOc#@<@>5Q>d@UeE zL1AiHQOV@<*XO6!rSrp;e_MA56onRNX`RY2-|}8SeC_QZ_Gf!tm%g$!(hOL4WDP+e z`VSiJlo+JOY3TP=j=6mt0|0c>nCoOfWQY8C&@t0Bg@Z@Gkmp05Plb$5)28W*o1?FPjR2-6=hB` z1Va_$9$nkqy3uoAT}p7i7QrzT?pI&yB`nZRLIb;5uL0_#ro06H9+jpNy4#6GAgY}!HOF(Y_W6e3@|6XqZjkhlsKfh@+>8noIo0}` zq$v4Cgb9pPRIO40c!gCoCz)2#3I~LSTbt80puvofg;K=U;a`dar*PBw3+Kv{Di-jH zHH421lFbon8?9fyEVT*?r5?pDIIG<(HTq&}@->Brk4i)9lM>l>7I$lnzmgz-?5fJm z(hl$w75Gi_*8JVyr40)0JObe_0onzuZxMrPk}KbojXK!(JL;lUkLlZI`m(Ul z7oKvFlh!lyFxya^o&UzG4PD6A-u|g6I0MQVY$VfELbYPEU0{UGTkCDhtEqVxs_h9^ zvVZYw#OTu9R*F!?hqxe>?{>%7N3YH&La_Oh&c*@=C6A#68Q{zr`~!LPz~I5e&t%XK zmRJj?w{7m|tytF`_|^q=Z$sDhD}z6~xpul5MmzI)`g{!{ zFZbPQir*cuBUc0sS~t6#l`F-hSC`Ivy=B7q(^9s=V)y|%lP2L{=~i3zsj=&f%2lhW zlZ~-P<;mCi({0?rK}^r?cgG2`InwT(;9tC}l|!=Ckx&Dwf118Ep?A8xN_xZ7(qeD^ zNv%s5D}c%=?TQ5Hi9T%I)nO+Gx99hVbH6C{vh!=*7~Ujm=LdLKDgQCz;aFOcnH-=i z-q#JgZEyWJXDlRJbN3v+_B=}QGf$7`YmP8A1`@gcvo+?9cAm*H?pDC zTZlKExJc+tC@<2B0Pcq~E$!rmTh`{D3t{I}Of=)M#!u_SCufIm54W54-rOq5yhGbW zhRz}H=A#JlJ1EAc6#?VPpb?{5mG;w7tR;D`ZxpA%u{h$!fS|$F1k7Fk*I(kn%jhC63`yDbO@5fRT53Q`m9K2;zl4_I8#r z>N`~>3G(r=x@g%(ll`wy@aMvD-je^5fSow-ozbXl$EP{U0Y zl%|}anJ%qJrY_J)t0UwJIONU+9bpoq^U)9uH#<~{(>SWMO8Ujmh@=jkQJMPVM%b}omQF0o{D*egzMwf+!(h$ zUb{rQP#m(wxhEqpAGKg z!VZP(|Kzhy$GzVkgmF@AfEnLKiGtIiyjConh+s+kB9^hx33pf2FL1tBO1Cvtor(KW zMR?wmGO~FSG5A{z9uEF)m!I$rlP=(UX}mAPQ--64eOe%|J-6k)&Xqe9nEUC0ThPYC zMA|fMN%BMDv-E`8&z||$2TR`c{&`a*TR5Us@hW{?%825TwPq+Y{TMwOkPJ)CB{Mh> z3HXu(GF2VIT8C)&`SUWVcpyI0#%?&{_>S<^Cc5(ctNzQ`I$9j+58~EW^o)pFb){#G z>+;m!PeKX?&NG{{$SN%}eCMO0HwO0I5q+$$a~YQm1LxXIO}bI+$S`6S#2XKbTV;&Z zoBGw>adGL?-QpDaBfiC$dtY{H`PE&q!NF%>rm^eR8iYneqS>>J64vigT-ao1Ry)L! zZR@n`{rBA0O{;irhE1yql_%x4`54N5+;1{txI*hfkZ`Y`KXRr+xC~woM40qi<^8!& zm~pz;HMIt7LyqDc9hWtYTg5L7Vb*;#_d85`n2)07Y}>Ad;ra>q%TIP25fxUmiqdN zb)Z_H7%!*4^9nY*gfR{L5Q%F^0L$(uYtGA9b)>uT^!h8tT0sJQFt`8D6` zYp_W{KLx&D$K1@!?%u=OeDQsap|%+eufL!O+9FGC?At*X^UaBQU7;b^@U_^Nx(|-y zfB5Webm+%jq{0k`eh|y1XA-^R|EdH^Qc>$`Me_ItqY)PC`^S~ORXfC#TDV<|<`K=g zzg|2h#Edc(4xw=BLVJhUvFy`&hedMz%EHE8PL0g&jc8tmmk(NTx(TtU*GaF(H*Lb1 z$(qemb+0?8Y*mBy@O;vEAcf4KuiZ?Bjznsd*LeY)$EEk z*(u*y)qm5=)?w6f$jalS*s;)K`lMvPd^3AMDmPp0&c_`CIuU}dPz`>3(c&0&_FS9( zLjbY755-q<3@5tw6sdq&mZ`Bb%dUGl#(efY*~Uhh>|q+U^?+@B_N<~iWdjb_#u?Tl zN&wrqy&pE}QtMM-bkq5gd6=1n+$8zN^3)nmC^-fLMX8$rXC3%u|HKZ89TF+Z4#T7Q z9EuDGMoNJfp$F@r9PGmb&}P5@C;(b7zt3=Lj(qTQUt5MOy0+l~>8V7Ve((jKn)7Je z18z^zHnL;|@Qn55~96Ka_IhYj55ZShnC{%^&hihW{nj#-1(}=BD?$aMC{Yk;He- z&50-mqyPccvqrn%$r&zHwZM*cQDWc57s^I>NpSi-+b$f%vFxhl<+T^b|a{^C) zu{@EhYd~OJSReTCj7{4(oBxE5R{(Vg=Q}2zblw1`@{L`I5#S@-fhRvHOo zH*&a%mWg||rf%`_hho8rko87M|7hSQ2l7_e`_c4Xy2k+LWSMdhlXh%d=oZ9QpQUCnK_^pfF65WwPsv&B%8F(sst0q zo@^9B&1}Waha)AeTX4lUKSRbbGR+g!LJNbv-7(i>3&Iqi1ZalzHz zi)Z_vIwhuyCE05R2k<|sa$PNLX72y&M%$3i2(WXWyx5Hnj&pYS9*ks&v#dZAj-K)? zB7rgiGl?IH-!89^2FXPoA;r(Oe^LCdA{GvwGXj}>V8c$>8iFtU1=>6ufH5P$=GaMP zA+hdo-$s>Kq`UC&v5}n)JSsVA^oF@Q6#D_gF(^GBB^mWeSalW|S&cL&(Vpt;Lg|50 z-Yc&%9BnZ6j_zhNx22mk3Z}L$HeUD*8MtpmC6*qMK}8mw`vo8a=bxO*BF*NsB^(fG zZW$I`Gqv|I7M%5Ti&ySHxuGY#{F3oycAyTJ7y0-s?VPpb^HP78Fgf6I2YxM?WqrDK z6rZNoulDIMP{u^mGR}>a?ul;=I6oDnfqoYZj$XS6^>B_przM0AvRp*LzaO_*6-IJl zm+E{&#+s{3u}dEWg!x(|1%IK%JI|sa=6D#$87T_PHuv@Mfb4W}u4fOY0&rkMj<+in zZZsc;LKt(rgpC(JrhjiW&l-p@?1#oV^BzGHqPPj}JtY}ygt}lM$}6&UN6sXD-{1^v zA19?kv1wmiiVW2kcEpgD2h}G4@lwcd86S75YFy@dCyd(;l|t6{_T~QOn`QX+*4x&H z#@!&->`3piztyuiE4#`eChvhROl1!=(V4T8cih_@m<=wUv(Frg!NrK=wCm05>K zg&g#(QYnf}fI`+9=V}SlHYB}`(~_s!S38Ncabigu(+7ujZ;HQKy54{Atn%#O`=SWM~7^zLE~Hubg)E?CmTnxqKaRVv%B(EqulWy{)7S^0dcZrL38#E#d<%5_O+ zKqii!1(37oOb-BN1AGt2;=-3+ov!)*2C_}kC9 zcEi(3VNb%~>+@(D3h3rk3*hS`Lr6JzSn`}Uv~5z^#^)VIAWhVFAL;Ve)@)p&|8asm z+^f|=RKOULrNfCiBpCr@1)SJfJMj8u&<(zMNY_4k4~MFIKQ{jUoNsME{pjG)y-cGE z>BX}fZTSG*><>I$c}*ChsY6(vw{y#QyZynt7O`vDnr`eT-t6i-WoKlr^P~~u`X$`@ z4Ji|`X+FI%Nrp7HS$_SZw;x`kUaZM#IR3>z=h`in6}jqI&B72!Gw5d;a*Yfl{q%O< zs3|meCp3J-ow z_z#%>psk;u>%%FB+h1bE)4w#b>xv)q4&{(edZ9v{;)s*JV&-`a?4lhRIvH#)&*ro{ zH~*usYT5<$d_M88$J2_Yow ztm5s1#?x`haAZolJ;c>YvimTjgwP&e4XDe=djyta^F)^+VZrl{r%q>UJ5a>A+e(+( zZP)PmY5=(>iR!tD*@wbNJmo5JaUJz-q?C=3q)&=cVGT_?2O-_RpRc&h}ixO*F4`kHRQ73dW`g{HWNt? zi0g3W!Wgt#H8c<-tO{IKWsPS| zWEVoz9~S1QMQ0%Knefe+n-2G=RHmRZ-tT25g_4M;uL(!55ibF#QL?|sGpA}-^l~wz z!kv1h;v?^y7({>8@YDM>(yj_(Zr9n7=l&RB{JWmkMV(^rMuE=qa zxO=go`D(ND*Kw}%UTxlqqmc}7)JU=BoHjk8!R6bnHsQ;Y@-H8AZ<%KPmTB$o^);XO zQ~}OdCfMI!_i*_8sLx>PFE|1jEKin!Qs_$@7qGgY=Z^rPFn@oP z5YfFV0%bwca@PQ*Wn;JWH%e&i&pKUwqLIII6m_bNmTgn6e2~@w>su#~y@13i4U%<+ zr}xizq8vnjQy~7wK15=pFtEz&gnc~=oW#yuKm$dlfOViUye%}^Pl)Zzdmc1E60xvXVeh6igkn( zFR|;cI8_p?k99~Kgv&%AQg)GKc?5K^v7ba;o!`2iUjKOOP}9NqBgd00UVZg1))@2u zgU+J=OSMfv8PfkM=;Ca)8}5EQml0VGWJv(CaPz7OstFLE9duib);QMp1760)#!z2g zwBx$)GCQZ?z_F~;Xfle;JAVzV0_fa7qb8udKvO~*&9r5_IUf6S)mB{U?|8vwP#fqpl6miIf7;+%>RgpCT&`ifI$IBlu5u{(g4_?Q`d`2Mu};Ec`>Y(vwJrNmZQDQ1X2x_bEy`szo; zRIL)FLS&omNxPMHQ5i0yTU(p}>sw1$6`3C&(jZ5^@<^Rm^5VIk%bzw{Z~@%vS^5{q zrvFE2G*p2riFRKCf2Q&dsk=G;GFrDP5m8 z`Q*{780=VRJ-ynnxIefpujU$7lMv9fW2SETscf$hBUps?81z%htv!BN_*;3cebUL4 z=)JiQB=C7ifxVJFZFyY*_z3$d84EN2X|4W8lsCkrV+6t^MnI*;J(Xl-(tI5WJ%|M^ zI%E`K>SvF(cvHROT?S7TUUXS2M*e-<2rEO2A_xt2nsr{}MfvV&bnGsO#Fh9aOVEv@q5Y5}lkO#(la3mQE==Z25Gq{pHzBOd_gQvm+(0?GQEO~}v+ zxM_@-d$VAcRJo@qq8_RiZGHQ|=O9%-&Z_~&ST)rmqNckG@-k}HY($B5`MzPt-U*2? zxU>@HuCIs^yMbkcdZo31*-I~#nz*_SAAlP0*#Cu`B*)#S5(m{ES~`UG7Q-ch9fy77 zP~D`HC-EBI>M4YcC}~QVPqgtqXP?>WS*1+he1-6*}=uh-+qf*cRD8HU5PV#G-J8rnO z-~I~_B!>f@7u@pCz^%MHThX}pyYN|dhP2s!g?q$jAm{T*n~&_#K}01Tc7jQ3-PY$9 ziNSHzYelNx4m4ZpWKDd3J}8FBM61zK#qN%&pTZVXoQbmM?ErEGMHB4Iv3m}lmD@x6 zmd&^{H^tLAl-)W}dUfZ=gXI3wjE`YQ`7bugxg=!|vi}Er?-|r&yRLr+Y0^ZhNDBf= z6HuhLh)NRyMS4{M5s)qtAP_}*6%Y^*kS;ZJqz0r*lMbOK0qKxX1B5*9{p|njnZ4F} z*MG0Q_geeQ`+i`;WHKQWuKT*L^E{8^chn%f8*35Xs3{3sO;tA^GqtDDUYP%2msYd-# z)9<7SE7ut#i9v29mO#fIR(-FsNG;3G9L4gw)ZiC25;UeaL#Z>d)UioxsQRwsupV;< zU|+vLcnwWAXX;U{!t8Gyp=64y%3v#$lD(n>Bv+>gI#3JXjGWEg|x77Xz_3I~# zw%WKIQF-s{SGHL?mrr+FBo-z^3lJfV@pZJAU!p5qvp zg|8DJM4PFb@<6G(IdQqAt8}KCw!aSHP~bbj$_BE-%oBU2{OUuSHPLjtG=vhhz1b%t zJHNG$diZWAyhv3wvwh9C!VQuhr8$VDKTb)-rD!?;FE>B8lg+VBR|BtgDRlcvox7n^DO&4c3dZ{YG z(BFo%b{|EaGZ!iILRV`?55Qc#~lC_?&XW`jsEUk89Je()Q7O6!U1% zQub646E%yWSI36Ih6c+xTbg9caz~Cf-e90UTq!6h;Y{93xE|WqeeC$Xt3hzoRZd%5 z(z|->6(SkwpdW_%-GIqrbvB>s&WbqRTpGS&x&AiU#9F}D#dRrIV#JF}WS?fvE9fh} z4PgKrFS=Wv-orm9_~Ni=VA>rEdqP=ky?|2lXG^O6MDHHz9N}5K9bNn^K>-`xMc;iV z`!I53MR!Ir0{I~6Y%RV{F3drb8^`f5GB4qGB0+%7?(h>z+pNsu;m&Mkge~HgU&i@S zO2MYAoKK@|sn6suOTh$GHN(%UuY%bEA35kFkv58f1Loz(GU8)GS1~lVg8@Bn9Pm_6 zPSMsXf28jDYmG%2kV!9S*>5Um1Gp1aljI%YR1h@NxIJlf)NTS&J5Ks7o*(+7$rmg^ z=Za3%xa4INHgL^2*x7I_O;1ddI4CY>Qg0PLAVoWE`5N~|<(SsvOKnWq7FNNm@MY3L zwU346fs%}Li7I4@bc?73Wbne&iX7wDrxy5pw}c{Z+|EuGGBB%{IcswTy%Q~YvGKI?UQnU8 zM7@=GfO5G*@K1Nbm)3Gc?-MK8#5ge@PozYXv%^||iaIna68UP-M4OOOM!b$I{86Ug z#mhgIUH82@a`H(2MW%wlqQKzINap#cqF)ncqsY46*w6>c%s^M~;xA=m+!%+^;`%?X zFk3jI0+u&#RSTydM;Lcv)ce-5n!T!Q(Q0~K<^i8n2b`dKEEwPIGP-4pbQ^Hz^4)tN7q4s}xU zE{{)6$sQ-;tx)>hIK3!AgYNeDkp#0PyjeKwZ4X069 z&|3+OJu|7VPwW#6B$|D+6ZVS*Aohp-i;=PrdJ;QSusq7YeA9eBBqlaKcN#m~lC`y= z)$bnu)&2`Er=l=zq{u)U#uVw}STbLmKUq?3g1p~|q!$ z?L8TvfqVzn@-4qEwq+6}VG6@z(tQgCA!Oki&)OP)=ek{=OipmRwZT3$(i3;v82auB z|A&O&H>)alvR&{A3q6>(2;5Y6qjVszzq3HGqhfGMrhRMC%de@H%uy@N(33>*_laNV zryhBX3$clzc2EViTVoFwmEP>cDHf>5p&ZRHAL{k_z?YNa!YWvHPuB|mjo z$=P3eC65_{7n$7xMPD6fibVYwbu?$0Z#I`1IHt@WFB^|PN@VZaiw{51_$}zwa~048 z{#E5#{My7=^>+Tml+noAp=xnXq}cs0f3G+F=kp>L z>1it{crQu=mhmA7GyFL`m?VU!18gT|-vCd}MVNoTWVrHGx#`XUzo>Mh&O1e`?mw#S zc5E%*5&F(v1P=B9-3Ks>h3JOxVa4ldeqw^7=IURJz@<3{KtS}1&?2Rgo8vgFLuh#SPV04;L~}mC#IB= zw(~k<=REsbG|T)c|31#wh{4C^7fd{FZj*Fla!Wc!s!zE;efI2AeGn^Yzjs+Q&eM72 z+~Ek*LWnDxBWNBe5cErkX5;9@-mFe3sZg;c9lE5k4Yuf*g%q zdZ{)Io-b>pf_-%^bw>77pU0>Q!kikS0Mn1Ev^AlXVN(ivrGxQC3cBen$2B|DgDEH< zdai^%K0$1Km%9eLy<2a(JGG zbks+I<+5s1x{Yziq2&q?##Zpdqh!QY$i}YQko|Y8>oWL;hGFEX7#jYkyP6WF+Iocm zFa-oU%-y>WD(h+Y<45v8{nk#;YTg>$wMzOQ2j=}t!|{MD(7)zUtvKg*BGPt~-imd1)T4 zC^2WaT-iEamRI}v0#7k5Q%sVMuDqUS^!SOn!7(auQ*S%3MhBC{NDw4y5R~xUj3JHO zN2hw#h%PvK&E>Uuw^9@Ifm;=You$Kb5J>ekZGSkC3ZL{vm1%;c68Ot6xddt(y80u< z#Drzwdhhvod~H$q_VXbN@~eo(Z{0KMPeRH?Z}t&h$Xwb&gL=}&k4GFhK|n(2kVgJmR& z#a)34{XpWvHx%oMH_W3<0}5s;>ORx$Gu7-uWVL>xjbfqgzv0fC-)a!SA{d1atiKM= z1q@yk(^1B5OWjq$>H6EVdE;ttvu=!iI!LG*Lys=1coXSwDP)4l!hc|%YcAyNO8S!a z7mzP=cg`Ax<_ON1oJE2hx`5PMCAL5DHdrRB8kfm2_Y*Pi<4mTK!P43Fp7 z5~Mo{9Kn015~+XD+4^$LuSLV4NuBV6+0S5iZ6h*o-fN2d;5jkl zCA&QPHqwf%Mp^Et@YjJA_0e0rN^D4;nPc6aC29z7)>e_LbsT@i^D`3*`SA*djOBTbpXVc;F<{rFa}e z0u%2NqOjU|6+u5-Y`Pc(KQ{Z%Ov>9ObIeD6)aHK2;Wzbb+}LpM+gO+4dO`Wh%Zwf3 zNtxT(TatsGKxAP=KReZvgoNnl-oks|yC<7{6%ckQc=5@e(7?XCjP%gCcTzB)G6xbV z@&LjDO-I+aGhXZ~+q8Lsn+ijJ?>LWbZ?2Rc(pI&+sAm=-xV@n*GyTNs&8=a^FvG7? zQpUQ7(aoKPWo)(lOZgK_iP|?k?e9fq>jeoOPG>XUn`~^Chi5)u7k@m*Ag>aDvK&cB zg(ADBQqpcho;UmfdKmh+)xve}sK6cSndft%kq!}_2`13t_j^(R9;z*}W~|xyQie~? zVn^YiXT8*YrU<|$YP!o1MAo+Y#m-?}Q7ksu$~uGNK1$-1QsK|-V#k7p+WD=i`_rBH zOVmu!WmeCZizb7DvD++u@-lhy%@MvNgkKjEFl1n{Ae#K}c%KTAU;ZbAOTvtuS zw27O*O1sP49pUyN=aFyaX&etf``yl`O)HX}PcG`KYex86@w&>%c3|;|T}IitLBTKb z&Zjsun39g)uC!#H$sQ}%gd`gBamGoIwJ2|H!YArUoAeEMZN7P>Y$kdfB%bdi}XVC6DHpWlXU(5J? z{%jIG8tq#4b9QoSD)sG{u5!Q8S@*v}ko`Nfp^H_NEwEV&khCQFAZ z4}kiZgaJ+e3O!&5m9x+g<#x#_P@?6$p!s(01-CM!>u zgugvB_tLX~LuAtrelPZ}#WCw;Xd8#9SSj8zUl>X(*sW_`7qzw=_|tO)^qZh-b*L;@dtw_T#ECO1?kBxY`BOb{@!T)4-2Zm zX4`dS4h}mw{9w|IEA3X%=)SrwK<6GT#`CTK3?h~~Z=8x{nmyRmc-W#-my?w1?AcUa ze!7duk3EH1Xwn$4v_C&#bx>#;PDMKMY73qi7~5Qmo%d}dX5n0WmQtcsh1V33A6oAa zE%2oL?DHH9OWC0E5xYf>z1!`=dfkxsZKxR`p5o&k9x?#WpwBS}6UX_Z+U=JNlUEI< z(ysAwMs@eI1-oP#9;VFP-B37s){>GQlBFeh@@XK=rFPX_n6b^FPr?N4cKiKNXL(ySty2@?T>ePF`5rmF{1IJu+uF%qi$ z&>IW7FJ~RAr)rL5{mODBXr+B_qe%v2w6iI(N!TL5Rx<>oPIE*uD%@-**HbyLxpC;m-Klb{1A(~NNAm2 zPmAn7pYF^OoKa|tiMlLhXwov31t2cSaX#3E&^L@x)}Ybm`>w^tR|}(D2J5^A?i5@P z-zVNw*|)xkyZ~{A%yh^>s(reW2uWyR1zt+R2Y2%gj(t*j|5FaJXtaSPf5>v>S4M;| zBCQon0uF6-wQiR?aQj$|s8V3UIE#i?!k&X?ws*MX2g{Bx>ji&gO$doNF`OFp=;N*| ztyFB3r!OtM_I^!mN0@B<-{)N>ba)4B$`8nUKN>u^D+>(BQ>ytshs-S^zY8Q({Afsc zd8BS@0|6kv_ekS5H4djjTMf7f8-WH0g$-3kS+-L*$4H~rshV2bHU2SJfZt81rdU;2FQ(YI@QL|!$vgMnKeF7$7Y@PbbsWDCTwisrn32Lj?3oIoc}@1BQT z!w*%uVBJv1n9yo`l+}CUSpYw5n&71$2o3$g&(=%r=m3!?_naCxSB=R9Y)W+_(hQ=* zkH$)Wsk=BjT;v|A5W^0)CCr$GGPKM=ctCwbyT8qix!yzkoYf(D76V_$9JLnz|6llD=MDY6)wR*ePHMNQ@@aSDSgUjsWQRvlCpmrhr6>8@(+KP=s4!wO)iw~Nkn-e38#NO>Q3rR^B9F9ofecO|NO z(U8OfP{2T~&u=gQVo6GnRoA~Tls zNFSYY-iGW_=G2DRtIo)lC&f zj};U2A7Y6j_*}GPEYYZlAkc2Z)C@s5r%8)=!0iiddfboJ1`OGSwWtLs90UaT?Ci*E zaz1_}6I{Af5YHp1o*-wUL6-Ds`Lh3qyO(mlrXBr6`TJW$eSeX*p2`=qOgma((8;G< zNlPQYMU$`7uON|M8N0#W@ZM-8#Ex>rLPsZ~LqSQG?HklT3xKnn-^7;|;{G8Pl*^Rxb5N0XdVAFGfa_W4iKm}ZEO!fjH z?kS!!zcs7SaS?Uwd58FGX8R?J6yp~W+G+V!NAmc)Ts1}kkjGUMrQ)@^vcHwmb-pJ+ zZvZOtn0KOWrxJ-veL0 z!G((y+#l5J=~*i%8|n96k-hpxd6;NjmsbCgt0wxR#Tj+2rT;s1D-ucSnT!keo0zoLWszrL1S4#0wkg<&F{ z3Enj94#Gjhdf%I0W0gxUE;D+95Vr~W--tB$YQjB8q@QuEz$*n4a0a^EJlie02)4t!)7ZowHL%$_$ zYs?SwQCDo*aKMyuqWEEQ*mSJFFWYB!YlexJd(GWF={Ll2@d#tvUnbtxCfF=4AkXpP zQ%fXnIa3}N)EnjRRnRRkDgC_jf2d{g$46I6w zbKS^oF5B8#3nMXl$HeHY)akv!*vR5yvLBAe=9IC8c!8&QcxWrn{9HR`Uh_;|3F>b5XH+}nmC7(XEl z&($+}_cWtEWVck>pTl;RJ;N0%rKPcYPHcMWF?X-HSmbQwor*~ZgjSWw{6<)rqbenC zqKg#9p$jnzkfLsR|HIc6}G;UjP^E*}IRIuJrKoH~bMW`ZW&3)unxtrzcwD3v+AluCO4of^EX=px9!_02(ps&$rKnNF{)^K#nfXrS0Z{&%Uy0@)-Kk-`v~l`2(E;m!P&?rrf;%4^ zPYVbt@?B|Y*#Ai}UB)a{T)2CeOG8(E=^RML!Af@g0Sf1=MT9qt_~zWFIF$^o9h92? zYQ}!C>X^RU*YJS^b*~zzRPDszJ7`@R!U8jxP`%~EOUAhynlq{_X8-(~la%_`0p1hW zkRN3=cJuM%LJ4ur5mFosxkUhQHNZfm`T93LJS4hobk<~~A2mw=jFE9Kvt7+P2kp)( zW78#>7ySXUi(~D>>vXgV5oUeqji&;oCNBW-Q39!3OVuIb2|~hJ6jeIHSI?>t zWu8c|viUxAs;8A5&N2-8(6PX+tNP>ZN0bb9BTlfq=wqC4%=4Ss^;_*rUUxa+OxvZ+ z-ne~poJP7gX81C++G;#+>J7rWc#p-if+e- zEm_2&Y<{4wd}!uPt|EZd#>>5(v%hM;EV=pnqDy!x#^`fnSs#5!>*oHHIH3g`K~%sX z$gBy-t_b-_;&Yz&s#iu4Z#L^ItYo(bYsx4)$1Ek&a_(Mv1)i55e6{A|rxQ5R$exj7 zLzr;U4EEMZshcQ2w0pmD#rPHYXUntldzGMfZ&xe%-^sRKb3)SZv|fkO2Dt8arokf) z&R_oSxSuww)negalwXrFP@neXN{S%m(*Xgf)rf#YcotG! zo;x4p=bO--N;(Kvte`H(zkx6k!R3-&i_9}~YH<64zI@eO%Cf<>(7rE^Fh(J!qEyjx zpRshq0z!PeE@#q?SyfKLg-j_{2iCI&oHhKPJ`q&i&!rBLm@Hif63KehAN zwOrj!$KOAS#_fJ+e)1JY12lkP=5Aqy6Sew0PCnXfWx;CPHL@NO_GxRy+_JyolMS?0 zR9KD-Tk6J1RIe0UqBC7Gb3MK-p!#dx-(+6Y!}s19n$$3+{uNny_7oUC)DiUnN0^Dh zAD~g6uk>8tC=)QyNV9cjj9$2wi8X2*fzh~?>R%ry6Rh{SFkilEw9ix*f>qArzVw2;0S^YCUmuDFf`j#}#BUT9oGW{AO4!GMie4k)r zwS~!iJjCH!TQkS?9suvGh{#U}vBle>eL_^PuUDSDCEXYm_m+vv`qQ$p?ul)Vdv(vIV3+;gd(p4~ zDPi((+)y^U4{&{*!(uU(vq;|EU851~+yH zBVcu{Ac{BtU!MCP|8er9DP?LG%vmjRPYdb7R1Hc?U13y?eH_O}FF`h}Lh1A7F`4Bs-~sKx3$&Tp*Liv^7!I_R6ZzAiv-!-4u7HbUXVY8;*56Xa5yYYqY$%c6K+h$ zlM*Q|y)F&)mNog*V|z17Fuv5H(?5#;<5pRa;$FBA57#VNaFH9Yl7Qw)jGE@jGfIf7}PP6iiZmSBse0BmigMLcSRPI<~_mE)$+| zZi2$tJr~g2r|_t4dvPb)wkhYGg4<=nrP*$YNz%;;gyfs#-T+>HzUnWoy(}T;%N^WO zcTV(F4_;OZ60R=kAee2SL7SSDv0Man=%#*Ut%Zg2a@e{4EE^oVTwp5vf`#Hjm=h2` z_%|i^UEaV&%I4eDU4n$_?2WXAh+BNFS~&(Vldv&R*QY`Jz8|OSt3|jl2(&LQ-eO==K_t)9H6<=EP`*1{dAudAT-VGRbL*UiLrCk$4r24#hjz_KF0{n^=!QPZVP7IB!m%9laQ_$lQF#bvvutvGqo>>0`JD z^VTB)y>=F-cOVe$A+XN-U@T`4U0@u@d>^p@^CFaBlq`(8TH{Kb-RUlV29dw6s}ETO zffF?CR+Hp84s6(FC8vYa~`2DFf|tVR)<2I?<6WCIk6-)Yn}jn@LXL=JaDK(**ytJuT#mteKZ!9>#Dy zkz<6au09Jz>oefOzNxU^l?f=GXzl<*8cBs!neCd#WTQY}+lBw>&tG-m{!gez0DQ0k zKGOyT1f#Cs$Ty1r1;zEBh4=qTf&KR?d{tnh4YGvyMG&R_0DYe#WlB2#nfXYf0kl*% zgmC>Ntj#I31sG)gD|Y-p-;=x_?q~xhJ|H~7#hC*7;MtC3RsLq&H_puLT&pYh0}3@0 zJu9_RZ~rVxC1>*ppLv_m0j7ijm0D0JX*jC}NIaz4sN>Ao1r{JJ@g)u!E^{tv{J!4I z^sa>RSyJ+?zMBtCJue1oJn^Iq%+aMcVNz!4Oi<_l^v0XgOsk!O_iH4{2jYsD8M2wl zI*Pzk2bH>5LoPYFoL8f#__k$P?y!aP{uW|n+JRNT!yi*`Om#34gw+w-ch2rQ{sE!_ z@Dz;H!#?OUzSFpHqD5)vh$c_)11k2(4#q~4S6GuzMFz{CKZ_u$#V`oMb^R@1TuuA* z$Um$n?K~_I6Bog2T&8;1(Ow7&>|v}kO0(U)MZGhHs`V|HPkvsaEqp|Dal0 zkIlkC^a=h30(s$88tq9y8*-UxLzsL8PWY=C9*_dClmgy+0jEdq0LP=kDAZ}TVC>yT zo?0WxPiJ>FFD{3z3$wifXOt!Z=dHlf7WaA@)oy)z+*?1y`g(-1z*p$%qX14* zWUz2NFguBkX8gj^!*<}EbeNp)$VSTWrJN}HLBpR(L*B!m8C@zbFlQ_jL*ju_W2|Er zz=W`+7M9LNXNPkxBj8LeBN(u9>CzfQFD-Yg$HPrjhqahjf$4)-(Nzkjb_$=uUw<>r`ET&A|NTAw zrCNu7|093*(I!5trm!21xk`zRx^GH?d%_1}~Xz4o`Zyg;;eB5wmwLHb#C*G}dpZnfR z!H&wH?#{{~v1152rQ;l+&c2fdhXryob1_i;RCI3#lU`-?0rcb}=|r^0>zH@iyh`c@o8$$uJ9P z;TKFTQ&;lHkidq`imE3Y&?(V;^(KZAEZ?zc1)^5KI`DCGuB(Cr+u+qcLAB2@h|7c* zXBf#yy)g+Swq$j(eC2uXi|WATTY?{rZ>jCJA#%jGmuiBPEKF@fIUZ|rdwereCnvl6 zf7C?xNo;c46Zpd8EH;wTTGqt_g%cM>^h$Qt6Or>78LrqD9>as|CWX8iDIGS`I!CVv zEF z@gEL)4FIKthIAEXHX0j&ztd)ZC8D(Ao@UW>k3yUZ_9a)Y>W12Jc@?12QFWWXMN~@D z)jxVlIK;*UkGV>fN4x4(f30?a$Rv%(_w^3#zk{+46D)vCV##*5d6*S}EDvV#YYAPu z8+OHB^60I@n5(KUcl7dudmk33HWh`*+XAnW<{{OP&TSnMQ?GJh<`q1@e54h5m%D5{ zoHc8I*p8qHw|j{QFgAI-)}9m!Knf!?|CZSI89;*0WFjswXM zcwPP07~T)}s+EV3YFn_0Zfr6M4C_?6M~pHR~Oua)z_DY6eQ z83nt&w5?KW!{$7xX!LbRurbw^K7f_i^o%|Y7#aNxzHadFmdWeMoMySl=lQ><%(h9) zM3o7cR)c6`#_B0$*xAofh9T+#)+q=S$pd?yg4gU^YgT!E{#seaWu+?a^dwR0g39-D z#}`YjJOPk_BN02(RA;kd=V3UJ((3$3HDp4j<;wjJ+vW=h`$C`-tRhj)e4RM`-r5&P zkpWZGD5wrCDAtZk(EPYxpne_gwMPHYn&2kxbUvuAfXnAae5)=6LWQ%t&~qv0NYm2`F)bwBE9mRyw$>^(DEsc)04X|>()x= zA0m7MH7(sgi^3UL&n>eyQkJ}=2#H6@kl0mhT<4w56{jDN<=WX1os_9v`{KdZ3Bbi?OVUgyz?V8(8AqS}g7E;T3q{#f z=ceAOn(+iBX#MTCvz%Xz`tRIsTTbvx8?&Jz-VY;OOKH>7k9$(1oq@S_st(5!XF@qTD?=;E16&TqTWy^tUnZkijNBXu@YF%&T=J)A z&$xL>lIFf@N>1y`8eCx~f(G48j{jgDDR@?=h$_z}1J6;C>}(2UT5R!~7?Y4na3>;^ z;hTlf;)L>T$;|IOrn3zT)Sh0OUC!K=fhcD@F_yD|!M=<}U>Hxs z#7i8aZI_WykCh9@Dlrs(kS>xCf8pBg+(SnzbmnA9J9s7s92T)|MA!mB>?i;S40`s4 z=1n@S`7Zhet+Idf=r*CxOPqd8Jr*d6j|*<5%k9U2xuCh)zofrICKon*Dp74;98x}p z@TfTdKDQy!GT~;e#|v>&TiZ)uPNLJ~5?rJwRJwshw;twjd^|=OE3*vS;PK_2K+?h6 zRazx*zO5DT@I9i?lgJ+^(elGL)lYLe!NA@mw6ii?!bCb_aTi$ zmt4hm&v3oH9beZPHQsDhW=d3z>SRER%`yb;%m~!}D*qknIC-iT{C+uPIU3!%Um_Jk z-?_vI`Z=O1M}QdM86ys?jCZCU)Z=yv&r=vk*>H+m8&aiO`@Yw{DD0&Y>jZ7xml8h; z6Ks!S2sY&?Lc*EhpHfDDz$7x|=cVIOW|5RB47!2#rMO1Dn7w?65XJd~!=5im&g8b4 zRBg8E)fW+}lz1E-kJbz;>U{7j8c5NLR~#^#Td89GazLK%NJz~mc%e%oU^D=`Rit>nPN1jd9=wwI*K=fKAnsURQ)U#OBME%^= z!wS?t1gb=J9HetMio`Oi%!C%FyN4veQUb3{J$JcIpR5=TcBrn;xF$Sw=`13Vo;)1u z-OK+@1)waD6n~Mxj>&$=aCYFL-7row;Iep|n(UuyEL;_}&nEGc1{D7V3yMcdk67Hl z-nne78)Muf~Dl;tRvV1s3(fkYev3JDUgzfKf@ zO4Ge>RBs%r<7lm5W)aBC|F}x)c7v8Y4;2uE$Uz4V&7yCn^AdcUVm|f$rfZFJvSn#i zhYLrV6eHy)Wmjsv#2=uYMB_u7IM*x?Q4@b(ebhF+Q<1{Q{B@dgD%K)YpU<2rNl<#_ z!k3tz8){bvL4I;U&2DJP@CA+veAfGBHHWgbv@d}!`P+Hv*d#xXxyw+#rJ!5tPjJXs zn@*A_-X=@{cfL{!XeIcnI1?K=B(Fo69Zb7@$ibhpt8VwU58eGiC@Cf+j2#8wjcdQT zjLNLR#C*KurX?)cQ|`@tJ~2RBtOUliFLCZO0!@87?FNDu&@(&kQH;$lvVmqQMYTZm z@fj2Si?^#AQb)DY&`C*ohV$QD4%@ym+Wu<2VNUpffk(7*n!QqtP-U;K`rb5weEWJ} z>e^=u#&mevx8h|NvD&GR(DI>X+ji>EhWJ8M!*^ie?eH)~WL&Ev!J>WYxG`osIRnke2-R@T_4e|A zb0$#pJ#Fdr97nmmI^DZfHxRe3GuC0-7H5p=2b93%OE#hPs^ksLKs*Q_+huNPRg8U? z*jt%57Vy>AM=N?sA?`WPUB1WEf;R`GY|S=gNC!p+g3S}WN?japOWCHiP^L%zx@E#}`h?mI*rT0pNL3WwYeYapmfb1J!dvrYcx>XGNRDT4fnNO6CL}7GAS60UmzZQ2a zqF#Qaxp3M2N%zV#4b$i06e#MgB1|03jCL8R3tmgA&tErAVMfI$}Y7> zqH~EJzs5_42l$%~=;3fxFuMhfn9!Um@=*P1J*Mdo?b93%E&ejT@UG#R zxTPySuXt2NiDJLJXTx-Z&bNu_%N*V88~oM6>uoT1F~Bc~j#pKL2>?ij^AxyK7L%!I z*FYdUe%aP)^yny3G>0ECjAxo8X7E*OD?*diYxdTO*+IJ4Ao;l7NF{piw=$?M z*2fP%c5wD^JFziouo=38$iEhvP#~TxYl4t8>qogbg%Z?4#{N2_;60Whbby6AqZ|AtrAlUGv&`(#>;kc zMr|pr*Yi8xE%6C|eO9fN<&)4FgGPk&(&As{!m|lp-HNi6MUFH~7JJ@b=H zw;4Xf>K8co2XaG))>}n^%p&~@n{hX?i!ChfF)-to>w-i&-g zVJ9jqA~wzkH)b&=-R`&=W4*E0o^!{wCvipHeQ%XRscw5a-f&c^@W!EAzb#j%^)38$ zKu6^YwEdDXt50#0*@Y6-4*ndm3z(mqlnV;g@q!*Z?n<9T4R;Krz4fm+qkO{4n&r+j z&|Qt=!NY~>Ugf&1^-sF$eQCu_?Whb4Zwsij4SMnNR5p#Pio+g7j#)O3&RD3wOq;m& zQeZ1?FH2U=GVm(qdzq|0C$tHh9Pv#kR^|b&ckIyLg?)Fc&c?CncKQ>UHa7u>j|2A# z`w|2sxSVO!5jai*B&TZz4p*6F@2W2<<4J=A@b$1@cC@0?dQAPo6 z3;wcvNNh^mbGzVJZw~2UWOb}hTOn0S^RkT?A>4xbeUYP*4e%TC*kQLM>WBEnnXnFC z1p*M73{%GscMtQX+b}>E&FV)F`cTf80ZBO%F&MA8KEi(J=a$=GzZHcbN zlq_nYvbi#M_>x*sG?GUXKWjvAoN{?JgSJB zVbxcZoGeanv175eFzRr4rpd4sw-{OKy~y5@VbUKk|p;}wEnx9kcO{d7_uaJFl z_`ROlBD&oZt&WVYK~N(?mDO%d+!R7`*2r4aY`We2y7w~6r%!D6r^Kau^#W{r`r8nk zTn~Uap>i_sO6dV}5-ROm#$u5U80Yb(`i#H{cKh1LkuGL76rwyK+7v7wtotyMmp6|V zYr{Ga3>MBl`1LE9bd#>-(gzLRb(ybL>X>@*F%z*JtEjcySml0aaO2XIlE^)*%J|uW9Vt6w!;y%_D zgpM;K*gb*~-kk1ie5@wDDK~#jcBHgaoVFXN*~3#WFb}Py3*`sI9}~RttTqE> zLRCD)Z`-#bf3efJxZT+M12n1O5Yc*11N~0%^hMYugQ6)TH~SN~cI*^zXN7mDUPN_?OmqcbuRwzXL;;PI3W7kq)X*R2Rc8r3D2dCXZzjkLOHQg zo`h!5&M<4ZTzpfvW&Cn}C>h^JRuis*4Zp0oW-{CmwhMBl`LTW?AyQS7NsXE3C4^kH5um$2;oYPw;+i8)Zu78iKyMEF`nyu7hGBFp zrg;~=+9Q6&jNp^!G=*A;MV4#kSvV=qDZ0$3sU&FSos0<#1PT7E7;?V_z0hcL8D@r) zO+}vzm_`|-8-{h_v$l*z%dR*3?>%+j>wGxP<$JTsNJHl`nanDffp{MnxBW=M&GAYQ zLY&dg&}KPT!3v!-_GD9fP)d?eNMwSPY>@!Rsu0=rY|pHg+;x(si6dUF>y$O&6-fwZ zwM{DgrtePT30gRQ6pA&djbW;2-wE<9`5t7rElU2(?)^Hhckf3+vm~8j=BP1Z|<<9U}Gr!`pjDHQD`9z9<4BO?oFNO+yMD9otXZ?x{7XW}ll5?N&i?NG*(IUH zmUuXv3+}+U$08wERnfVP48}~0A9|1KQ9r+XKJ_D!QrT+>!ur`Gyy5NNLd{1wQ=Dk> zX=4jVdyX*8j&p*+qZ)Q0_&ljLJUBxGcBu)4AL4l1!R?@9xNP zv*~taD7)RwuM9n2qv$Ivv+;=H#k-34-2LR>I8OmRn55|W5vg8ZpZK=GNyg#htnmG> zr$Lx1o~f#`B}ke&R(=3&2)A4PX>078QJiZ2XVnY(JwS@T=dr>hLn&U?41k?mw$;XK zJTjrR&EH6~&&=OE=}dd2zE={z1<71FRtu3FBi4a@HI|F*4na<0Q-{sU;rB{A(%AkJ zlJ%(@-Zbki&@<=D+u91#7{)`|{j5TpeDG1g1?sywd_sQ@qh>pQXw)<6; zTk3)YZ%SuYetIhW6Uf4|qb<9{<9O#{xyqyJ7qasFpuW<&G$GRF*Xy$1dFMTYJy?^p z*9*1-aC*E+(OrBm=IyFS6zR!bnO=o&mivgRb*5_V~I8qrS zp8}Wlk^tu=VN?y#GpkVR2fQL&UZdxFE?X6mAhbAHsPcDP6-OQ{I5seiZW}N;)HKiR zm9@r(4pXv`s^LG;ebg=kCQG#VrJ=&|Q1O3NtaF~oW59B(e*3RWil1j3S2jc{gTmQX ziGskmf@VIgrb~=c#upF%L&8qbq+b?;Jo_>#S|GkM+MHag`+-QltO$;q3p643jq8#{ zPu<)$`Qr!}bn;8LbJlJzdMu=)G}wT-g2H!G{H>XPS!J2f>ddQILiOKd((C0f=wsAD zvIIt~_dz>aJl2u-TcY(}QE;E_V8zLA`N~CfhFy(Y8g+6Lbv(avZZs@IdLlxU^KlD~ zE*|R6+1bNX^=4hJL=)rq{d-Eea0NZh) z?V5Scm2X9?+iW1JbF}>Ov1fgso1{T2bwv7$kzlh}uf;&R>i{sQ!@?Hy4sxe-TPcv0 z{6NG&gsmi2X!20z?&oXAlLxJK!%!ME5X5+vZ<=@qFRg>4DHq@D=P7Z|WaB3iUiM4E zF7-9eKGDhJn2G7w08Ct5D`l4`<|9PfcXjKhx4=(`^k*-%N9n&GjWVVG>K7TlY#nhm zsk-5&VpU3z!wGBwfq-&+mDNvKQNe?KM@^3})~XeAVC8#D)UQ=ue5Rnj*1LY|*unf% z;3{7>pA;y=6S8DUN$#gel8t91EyXBToI@A4XA@71Nkgf6fl;oCv>Rahy8cHFsh$2j z{~6FHs8)M0(3KjV>u;0BpQ#Q~@@zcsX@>RxB92A`bq=38k2ZZf5`yCMC;Ifd<>cWf z7YHp}oZ*p*coi_5zv-6tvJIcFenqUn__o?r5e!A)1Sj9zkWc5F1w2ZKY7MM0np*Dt zuTdFSTVitnHVLh@9%Z=FPe*CY<`S9V-u6RY zn7WEg>CH8Y#_O+TTYH#1!o`xrT4p#0EG7DBDg`n&BL^QzMxPaYMWqfae!r1MI}4Fs zTZwaGg^1wj%)F9NhY2tkhjCKv{)UJ5OF5LDTJeV4>$Y9ezDbg0S65Yao)vThc__Fy zFEAYN z1WM!(s}8yOjdnc5uSS#q)4j{C_5I=M-Au<4TsZO281IJBtSrei>6qPU{F)q;ap1S! zSGLO^f8X~uiE~R(uT=Y?a z`53g%T&Y(|>;>KWTm8(v2xWqmd6_bAjI3)?Y^Vb+N)#W2vomU$QRBnQ8{n7=W7n-t zf3AENu&zqpuy##A33)+cL#e z%lLv&^MPQFtJ7E)nRNRdOG!yqiN0y6p8SnYW@K-Z!Y2HA4;HAu$Q}B+7;3zV=moJu z^l&-VL1eXXCJrDy^Ps4g{dCyLnf#fM@U_&N#lMcv17T6h}8W z6@O}V3ZjMc;_dWj!7%UIt**A|hQG&mN*%K>?cLGo1IomQ6dciM%%s4qge4#~@@l+l6 zphyZY4<0DKWlwmFWn4)*U^kjPbU(cDBCe-Y~uMe}_C9`0?$RLQ#Oh zlPl>rK^Om|bY(~Mn8tFM&*QU5@Ux(6dPa1-EPSdp3x7V*WlZh0UK$WUJkY)AON*Tl zWFUB_O9UrIw;yp=>8-)sbwCce{-ub{Q4x&(3YUfOgI%wxp)OEH4;EAIrqHThTG=K3 zdc_>;p9yuDpZgDd3Id#LP1Skau$iaXcpBWok|0n~W~_nOd~r;ZWySMkM@%}mHTUI+ z($R<#NdNB`&Ns=av1bp3`+{yY<{*g9AZ$f91z{EMW>1*jbH!agB6Ik~qkYwn>_QOP zXHUQ3J2=)#%+y zHwOanFHrb~exP=z8w4M|#bi{d!fZC%k}X3U2&neDzyf zeM+GMFyp>99H=x%k;v{E}N~@lAW)u9$IbI8!eg zF!!*L2@>I3U*A=&<}qg6vr%%!gsFbEZJzqOny_B~4+*R9`~On1!Hoeid4;z~{VAqd zH7I=e)Y;qCeRTFOA%i;h8!PQMg+!^Sr=%ZxCxT^61RF}Wys@dOpzkb>>{y>>(VW(@ zNn~MagZ~?yT+`IT{~6yV|BOtZej?0{m7<@n@(t&pa3ihRk-`(rV-_{Zr)tR zTwz+BrtXUg#r2cg8)lTNj4khx;w7ON-z21CwRl`$lGCkFU+vB}lRFFe*1;dmExeki z&K&V?9&kg3DE!yh?soGeiix}SfEKpi6BKYX0FO%ne`Ysb7bM#>`?p(MyU1=y4l~7? zt`~TuT^jiC($aczgG|@&jc3nZEB0`(m`)9}dqJ1-*Y8;n6tm=OmdNPGgxdEJv%x@y zevoe{_9}9Jm)!$aELMwj>!ILp6v{@|djBf$5@j&zH!?`LGTi4kE8P$Sz_b63*x{&%Si+MB!=x3#Qq@Vw>nGn_b_%YG=g(dpHA1RBa0M{%zC z_InUPJ-w=o{p2F~imjZ3IIZrL)22a{muAxvaI?aS(T`cLJJtC&yS)ZLbOa~pr9mj? z@M+#NV(&CTpvEHvRvOw&HaBDUA#+@`yNNI0eTB9n-`(!i(su_ln|dX%jzk;L0v##7 zcan-Gz1DOcufDII@}89yH<4*L?zjCV$nHT#G0az=eOe54(8XyzZatI`Ygm!phrKR6 zzuI3&n-(#jhSQ{-5viYdmjjzmyds0f78LilnlCgO~!uKKm5F#}(_mhHiVPQRWX`Oh(t)^fH(Iwzo|( zZdpQA&KUivLp~e`q5O8d=eOCxrN+~Rr$aZ8;ES!kHO?_=fA!kuStkDm&!#ucTej2f z{aE(WJIJKUgZJwV1Z-MQnfadFnTpiuF-9&E!|9X=bTg@tBQ8L3doFMKhPCfB>_Pf& zAew9rT%J2$d#ELo8qaxaW2~Wd`|Px%BDSr{Sv=o6&X3MBCC+e1{Gy?2IXAW4{BPhQAw`3U^ zlO;6%L94fpR#)TCpoYDahoOmfE0G_4)F!Wr$9=PLf84L{&1!m6=dv=Cn?9;oPyYol z!7}tzNGQV3cQK&-!%MkP#wTj5(*(PqHK4SK!BU(K&og>bGin`V^6YBts{)y=mZGYH z!g<^p-5&JPX*qO}V1=`DfFgZ+P202ZrYbt(vDVL;zuD>}Jy+kWH*jWau*ZvDT1Soa zP$EI^E~fgadKM8j@5#Ky2jD=9QsQdNc+!A5SIvmpi&QCEcTzhdi~RmEu67R}fQ{$} zleJK$k~gkJG=KJ-;87!3-ll0(gT8s0N~e;TH~g<LQ$$Pd6-8}T^Y+CVWKAtWqP{w;*F!g?%Ew0o~@+HuMLowLl4pyksNb<^~i z6Ga^MR|l^DVF2Vfzsc#=ZYRP(@H8q8;cBBz9+qt@V_v46%v64o-@LIX&)GS_U!Q9^ zy^NQ}Xt!g;lhwfZ$VjheJcVfMmaXO-en08__@tf>2Fwb4$@g&x+31?6c{TDl>#i9U zKD0Pj=+>o@IobY7>|eR=wzl^{mYM!Q7VE=^4R=V5y0-j<-b z;NF2ky{*FD6WxxGX8Zlc098RuR&aM`Yio<@V@JJg^k&V`@k9OOr}?LzM`i3|0Wj5k zc)D@$iHFzTGBZxBa1BIf6Pl}Mkk#6g_Ty1Ubjin?0yYk8*8$8z%(m_Pk@x^zs+t%s z_xsAb@YIs3UHWkxsadG(2gse5`(XmLTI0Q*wHqdRY|n8C5+9%z_3ZJxcNr6$h18Pm7?~E46ml1eK2g=H|DqVHpPeOOH0_^d4u_>&*txkaoNdn? z`xSsSY2IdATlrUW1n%goeOoPXj`9ml zFJZNTOT}0h`s}67V8VMp7~3K8t4=Qg5&-7tL5t0W0cORfo+gs3Vf(|S&V#c>*db(b z-(F`>HF&BQ)M6C}afb9hP5XYan3>ka>%RH@>|!1x`NX}y$Ztd61NfUQ4IA(w_9&}& zLzbsZl{@nKX448tPci$BLoeUv_FWzY+(FtZXQbeoRa3 z*T^aPU#xwSok5H)5M^<>DS=aQaCUq;zc*$=2%}nVn^<~RMCUY2?34GWdwkq$W}bOhY=pSAEi@wzRh0;mIuts^?B>}T^1@mH$3g;Z{(`G{;bZ%CDtl>_?hOTM zT%*-^Xnzj}oXNOu*%N6MW9I(%v;)%QV7oL1`JtlTIwr}$_LGU{Bw1NaT*Zy>V=EpBR_crx0#{v z&9;$pCsjIbsdq?6s9mf{7EQ;=+4db{ofIGeoj7o81zsSm=GT7-Us;57#27#8INedE zSmqOl9ZD#SP!xT{w1M50X!|iDX-KNUyovg5jJK|yuNSp`-%9__H<~sBsiY6e%2U;! z>kU&pFdH_+Y{lvCx9t6G33G;8g)|-3y>AQ?U~`daJkZk;7M$rUxGJ9uuMx8*7$HR& z!+8$1AR6^v%gg{Sm~IHR!V-0xV2k^$qzzL`FVjGev#-y#{Ce8A&Q_Urw&y?5slr@; z*mseZECzM)O~~_23@m20MtKBZ)U_o6CwSGe-p}yDb)R^B&O_$kR%gA8bF# z%6ONcSLblGd|~5Mk$>Dco3J{Ht~Srwxtz3^%hVr7+Myx)<2l45zqm{<^Bw)wsQVB{ z7~Y(@Zg8dlkTW!uDt;r!rc1RvX=I;4f>OFMi2e;FZ_(ItHu{2f4{#~r0T~V7Z%#*fKG%*n0PVD}!{&cmE-AEQ<6b&Kfi+We>1i zJZbH!l+m3LGGW{QJ+P%nfsoW;bucNftuph}_LX4>Q;sTon0zkd zIAaLouPyl0YU;hLC*l#AW``%maoXXlv6~=P{JVvr-hDnZze#Cs6AQuyhMv2LOR2K@-hO}Q`7-D2ypxMfSY=jTVHzJ zVna;#2sUwu$^n+z>CVo5@5KfnU5lhkPzk{}#aW()$JRHXgJ2o!4%$gvxW}Cty87)8 zx>Fy%kFdx)97v(lz^%kZaT|I-18PDuls~Rs%D7LX`fqKle`vn`B_R6sK+*grn2D9h ze7H})N|%tnsZ7VDBlK3*6%-OdJep4a@Os0dLKoz*LWG~=b` z25lf4HtI``QRn-|S5EuKDB=+XU*Ml;UTO&KMW)FC9@rz|6mSV^XZwUW z*n)gA7%c(BQT)${w}D~L{#DGL6N<<8*O?Fdu}VWRXTVtm2CjvV2fL-QdO7mV*8+uy zjyPf?&BRPGqkFoeJ?fYJ8>5lpN!|J93g2&9kf>qTugESX@oBa=x9@2byYM?bIcFwC zBjpH&Mh}5SK3-R$j9;c1VM2Kl=ZQm>Ih=<1MpEzzv9T$~lm64?6g^#?^}lkEE`Umc7_wo z3=of0W<@FzhZjzT%}vX0wHX+61g_5@4BF)vhTEqdL1=^GM&c}#xxSC}NJY7Hv?WN{ z%sKIVy#FHZEnLXmAAbfAKvq(tgm6(c56)ORhzV8pvh_vsUlSfA8dWz*P*{K^WSNg+ z_4vzb0&Lr|KkauU&HuGL&wm=Kf%#o=zwV)A`9W!Zw{<{;n?jA2<6+*Vt=Op(P^}V) zrF()af?<>TVLi8B25}lf_x5Qpo-F%h<7`Xmj*p(+bbVr}5>RmV8BPTO?(kS})$Rfa zo9oGOcDmfCRs-J;KId^&QF}2Xtmbzn|}EU(aE% zPJHsE!NbVDnjcwIr&s+lqjmla{uaz3w%_W}C4wFBO!4r;OgxvqlW5M>^P&atFXcN6 zQ&S#IODS?5BTJ3Bw~K^lWgK)&u!r&cMinZjmZnIrX=K8N9>2rut4hK2k=PH{DTmjd z5W>)x?rP!$Wt>3&`58i~d%nfUibtzy8zD4i{Cv?BJm9xzL91!}){Y?EjB_Do)*Jhx zYiOSD%tUaG?3cj`>xGs?B)+9;-(ht(x!Di1Uk#i0oO`k(PYf5+sZTpEC%R3ezs~Vc z(UzVppTWB2Eya+-QM#gzqpj^IJh?c#yV_mE`W#@uUwqJ-Vk`Lqk+;gStZ!S&fGQw`V6P}hG@^?ERj-Jd) zYNL8AFUd+zPtCgZOF(vu-I7|HqEm|6eOwSCt}BGBEjvOyuJ&EAi(8QAvy@omWXh{P zO({6}da}3qJInQ_hP*S!Zi>ux*eab_ zS@BzVks;)AO`ZKNEZmbhBhnMMmSgj5N${!Exy~KR4G9U!n8ZZdF9TzTxLKWs#l?W~ zwt1NeTn*KOCQ9uE1UlrbG|TR6rt{Qrbg@QHCLcAs+XojW4iq=*40f*UPXwUriqbI5 zzH*`w{q;!860V-(*$J4)Cb%p59}*46U9Iq~5s(11FX^gPjf!}-8nVylhU3(V;c<#n z6GF24$kCPrDMR!RbV$R$yde)2ECl@<=#>g;ysCx%8|am~8LWq)x(S5^($dQ3*O=I< zoKQB#v)@<`I4KNs8lpo+oI>#2z7L?xaA9{2t)c!x*~&|;y+j=iuiGBhTx$o;c_e?L zI0&wIV_ec>;sV|Q$Ec1|{bq7RqjWBiLBIXr>0$g|^c;^?aL{=!PUQQA_`U%Uit{0k z17!c@9(1A2uTd|YkZHFsxegKljiLBCs055yXjd%+P+v${`oe1)lJp>03wi3Gf zsrYX=4{)mJ5Ap)I{XZ$@1Fgo2|MLN0&;B33PZHrY;Cq{JcNU_9-lxEL7bTx5^*I#E zMOq?-qE)iB(;sKNdi&1atzOj&Oq5I`R>u*|cfefG(O!r+aDl$@;J*&7;T0sI4SUmW zXk7t(e!%LbgP^L~+AyoDqRd>f=G`Q(r#B@D<+M6mj`P;jXuL4W!-tae03+?jy2;4TZ0N_K^TCSni(QYxcba{C}Rr5)E z_idf4eD_P|{zjpbNiK%xw^lOl19{v-H<9x>H_{ohxsJVvcK?~D+9JG zz;={z zvcWe*;!?U}b>GBa<6MX9)>$4djl8#^_tGe|5u#bWebx*tEQ36ggZn1pC|~^jqcOcH zNLoeM3PHFSe^2O&CoUF>T>>O;T;R162j-)y|NJ?$?;{WZdIO#Q6KVy#*ZBrOln2VZ zrk(Epj~>za&le#14LHOzeQF$BGB3Ot!Tnia4j5m$U`R&lixbIY6w`?C2jE|0fU{eQqK1qE;i z#y(CJo_SHQD!U!zliwk7xuywsa-_3ez*{$hRjgV&_~WNXO0uJ=0Y}CkuPrDWL=30X z$GLmRLJfW&1FON#+R=NnJEMDh#wb_8tz+v%VNLm z-y?|bA&y|vD{e5OVPmc5p;kkVT)2wpITh7vfxZ%yjLt?5IdQjS!x%A}ys-2%&-2gU z4N8rpQJYvM)5q`sjg3}zmb=gB?!>=tmIlJXW`;_MB*!SKv}>MF`UZ#=x(D=Y$rGl; zx_Ho%FZxi}(tRyc*ngzFaP-?JU!C54d!fEUz~3L&yFzWe293R#O4eG=rG_zjv0CP0 zjr5bh8Pt@$_WSweiY(Ak0^UBWChR%m5&Uk=B)3=3``ImVDSN%JyF*=p4g(C~WH*Y) zo_Y~!5klC7d~E(IBEJ5m@82sWQ4zcOtbF(uZ$|9@ z{_7NjoO(;pSOwyGy*xB(?9)|6t9CY#8B{J$o0{04@VX|~WdCO4(ID?S)Z?L=5s!Kh z+A|nM+p;j2n|wEhe2lURB~X!gzdD!nTKS|r?a2y+2lps^BlD`VWJ{!>ysVq1)?Z4mlSA&2l#W z*Q@zoFecOLmiP>dI&%W6Hg#Zl3z6h!t0AeuJe)N0W0zJn(AF#Bfi%CX|2)HRs_A*} z!-0WS#$l48`^ImSEOX04<1n#p*_Ft}hj8)xe6Uz&6Y^rW=va~v@W+~{2UxcO(TIU4 z$~m_M8Iev^Qb&$#q*m3qCq}&Kw^p`mk@|38&Cx#l3ELMZT4-xe3tSxfG&1wjn8=V2 zHGDd;tW$iI@7DZd@%ZIZ@>+o#Q{as{fgr?RRa-dtssesL>gP5FOrwMThlI{}HSHQI z^jLfPAV|2O&C_-}V!-nDF#Qk9DlfM%axK1;@|fLXsvdMB7%h@UWVIp)_u#d=5`gc$ zKJlyS(?exY=P(i)(yTZI)!zbpL(drqq(D2UP`}fK<-Np~T0;-T8GkFCpMXNHF~{`Z z=buknxebhG9#qV=8vODWed;h{DE(H8XMKjlu=DPOACYQy1xU*d<{KK#@fR^*$wmu) zlV-u^g9(X+@kz=sTH+5HvsqEdGu(kqOV7$imj+eRioS12`}|8U|e#1Hgu=FOxC*;IpLqrg~N`+jyVGDWkb zZp%6%(^=11-n3YL_e(ERE#_?y@Bj18wMdvVF;Ggp-4Ie`nFp8quB9%*03ey$xl}I> z2i+)yyRVZOo6m*Rc>+w86fYv>KDI|^ZVLxMUe}=P1QvuVRCcAWqqcbQ7%q8v$!?&% zJ-hCZ^!YfYnsfz6C-y_{D zCI@yN8eq45H|w-MFnxXN%3Gqag5@+JtWqrt)%?aX_y<|Q&s;MN3Z5baX51S(%tL36 z?Z>FLMF#{=Pk7g%tb3~mrb&;W4BI*FgIpLfyAJDr+x>TC1RaLf&+zZ>Q3v&*087c3;(2Nt~k{=mx~!D4oTtyeg)L zb3=^aSha4|jO~uBuiHOYv?5;C>XUMnlLd`lJO4h+yxxN?fcC1Z-Gaas@y=-DRHYl> z2n%cq;?$_A5$J$15RS_h0WgYm4UXToA!L`(s7W62`C$Mkjp5co!xG<3i$$+>QcTyE zIe#}hBCcm>kWfk)d#~T>6THjAifx@8S@{LCm4$z9+gU$Ir4+bRYGg!0QLiVIcNSq+GZI_Bjpa#(Ke!>!-|iwVgfi!w!mX);fe zb$@QQ_iT>R!G2AMTR~b39={nS3jqE;9|Imw7wC&?m#OV5ogqty&A!X$&B*2`DFTIY z(lQ^mvW+N`s~6WlGbXlQ)_M$W5iNILTov6E&$*d)WB=v5ZO2BfM_9J-tPOqBvlr(@ z4OW4NJwboGbyR=cv#Lt0GMla9(e2dHU97QP2$!!x)E$J0$HT8_)De89)g(}%r3Uv} zdO4T2sa(0m-4caM6U_y2U%x!oSyCj4V(QYvQVmLm4qM`K`^1wu;-Up{jJ3$YPcxt9 zyz5;_c|3K5uM6?jP;ViD;c$Y>FAt}s))m=VkL869kII&PXIqHQNAp)#7*7d{nXG35 zBZV`5S+?0l)uVE?wSRRA@tUhc>8mT(z2Njs3%t|#qVVX43s z?NvEJ!^(joWDwO{|&$gWp9(5x+Jth%Z#FD~Nz~?0*Zuk$0T4zCM z!7OW1GTIR`=5H3^#h+*F{UBdYRCM-{EpDqn4R6?Gu-bDQ2!vfF5$S23oPdS)h;B&O zqv^e+Z!a$wCpjx6ZSs73*8rDK2$Wuh8KYTly_;wpFT>|9(AHBxmxGb+h9p3{zDxM5 zDayiD591ejBoM$FT>i5)Qp61VqYdYz3FWf>F-_?#%rB*za#WisVZS`&B;e!`QEFJT+jNN*ZSOH9-++MBE~s_ zZHMY)HA|)sBA2CYfO7f9dAZ~}bOG;kru1*gFI-#xF6qx&&hE=93sb(ixX~ULp5@GW z@2P%~4mB{!o$yjoRm$p4>JdW%-$np+cvMrOA#N}-ST3M5>aVjv2qH&sc-D}o#(bQ3 zlW+&0fX!Q8d5BPxg7z7s$EiS#zdWGWG!2*2=WNVSMTc?-O+U5q@?>bOSK4Bgb&TzT zcb7cS;PsQhj8R?;qA~B!$w~LgunEh4)(HqATqjSsDcKwJ@X)nlyis7cxp}Uhw}eN> za!J`<*g%onq7Mg1UV)9)oHuyN+~Eljw{=B#7kJnpl_O?4j=B$hMNlJu!3&RvcbO&i zP0g!uwuLhJMmzRjRJulYDs!d6m$&G!Ug)5z-b2#C)d(7c{kDa(+z^SL4Ch6zS(zjr zs&-{fvfoBV(nEe0kZafo;%%pRz^C~S2|)mvS^-R4l5xhT?CoE|L7+3%#W%RADvm5dp15t+Y05^i=KWoEC}iI4%ALs12K2 z8%_8+uVn>`BWbX0FVAf? z7MEMQV5c|@L;welCQ@4i{f9aO&gDCKo?*ck+cSLMkd@AN{vpv$A1kO98IQQMtgpbO z^Gymc4l)$I?)Yu2&uV|ZCzAv1T!uD7d8794ri;q$Rp_Bgj>0L~G=OoGo0SuJK* z`~}aI{T&`?g|kOWAO4!wf4DAxr~M*Oc4yA)-|djRo{;MyPOs%KqH<{#-XZJ%1t;fh z$H--0pg0#6SfMAxDKLKT^Sx0U{;bRc(Uc3IfM18dO(Nz%viuUTPF@9SNl69gC^*`7&C@V88we!^TIg)g< z3lrcS_{bmI+pDc)REzmpfq?CZq^P41HYvg;_0Rcml&kZp^r{=MWVtw81+p;&59TYi`x9x<<6 zOp@X_hUyb}DpO2p^P7FE`M7Jem4)G>oaFe+*X^|0n5i>etr4H2#N2mPLV_2EX9B*4 z%m~K{O{oT>+sO{?%(*#DA42alDC`*0@2~vW z*(d4rH**}T?v2i6=Zr74ZKKegwjrt<_UhZ_1uQ)I0hZpE+J~<7Jz+0qyhTK8kPAOg zK#40Y#@`R4Pb+sZut6Hq{#w>>FNr~aZo33_Q+kJ0+!u_U7A;MQlP}iOqn5H!r*3YeW<{-MMSMTN0 zs;aFQkSSF7%DRk)=s3OaxZ;>_JUr@z{jt(&JOo}LPX9yFD!Un5F%=^o3um({6#GqE z!9g_f5zsu-|N4iPPId=+v*(5Q;`nM{H57Y^c1-uJ5ebX4fon!q%e>tv-j~iz*HZ!9 zkP)v$etrJ`uzzVeF~)tLqwYBV$(txnA?Tq+z4{N8Z9MZBZNt!l>KOy0AvbVJ5>Hfy z-&@?)3Mj^wtMNjo7YP9S?Yl8G^r)!YKau1JN=LZV*M0RmnovVi+QcU*`$xqEe5Z+=3N=Sb~xQ0bM#z#bAB9`RM zdOCqqMe!2{Gt)3X{(UN{&`&q{(?9-te%t>?`0CSZ4zWzvlFC9Ir}P$rfQ==PQe1eE zHd**iPUH4nHj7{_vb0WR80S~v-=Qo+TNrAm+vVNgSS9{6{YmnP^9=KU+|+yklG`hd zej_>6rUZxuQxF<#e5f*pA`yPaF%;#1I3VaS*A=!XWe$y2F7|fkEZ_Y?l_q856tDq* zD&?2=_x}G2#P>htIQ`F`ODBns!P51?rRUNTW$Zc|s6q?eINCnOdg%Q_QiQu&jN{t6 zaj}+o?5)3rIqWx^#-H^bVpQ*| zSrr=|-Y?XeBAY(w=GmQnvJSaKr}5yyLz0w093Hs@m-a$njI8%QhzWM)4}G9>X;V*ryvjO|M(Y9)uk3Pm7Na(cF?P@V;r;uR z2_*ZkTPN|BjV-y~G1Jo1 zH`gOl6m6Jpv-ZMpn`EFIp*l{am#hOwhh2HBW?=H#PWuQ!>*cJW zYBC_uBK3zEU9b(0WAu*>PL^zU9fN%32fXi#ecChfdk=TYp_L?`5{f?J*f@l<6T(^& zML^`lpSG^~E+mvpAb~0>eN_%Y|cwcMVbqDUdYY35&#zepu8)_A47%oRN3jzxT^qu(mJperi?ypS%ZA zK8>~3zXYW_Hqm$4E*hB{o@e+6Ywd`{bm7rhBqedsxn8X%IBFlB?$ngcqNhGXf5)3PVHFm>VcF2_L< z`cgBp-m@*|HZ}1Gyp1zNHIF4 zfdWXiw8X<_zEa#`GDj^nuBS=0RZF;{RYa>6)2pHXPPn)p{hfsNO|ir6J}obK==i}u zB+{b;ZrQE{661^Ym*YUVaQjI2g~XsQgT@U#F4NDC9+@y(P?M1SA*q_y3Myjz|6^TS zNv<8f1JgzcZ&Rq_(^tLe29RNsyz>v7+bx9fnV|xlRX@J*aeGw((J15gtLVUgNJxGg z)DXv3I0*sR@V!p`4wqK+e2dWgf=vUe(%$wd-0JmL!o^s?xZne*pDUgC3aqj^zPCiP zcYz36%6E7ybhbXb^$&^dR&frOxKU(OGw{+7yx(PL)C8Db))=qtqv9EY4`Z#mA1#=nfs@ZNkopr*KeDqsRqTkEKLYX`bNK~hu_H5zCj z7)AzbB*7}IlkReete4?nrzpT)-IL#YD^CxcxLimJ$`t4q(J>T2-TIm##dDbS;T%>=|zHK54?dv@Kj7lNak+d z;Gbf1oIpu?4*Ln^MnbW7%O^(8lA$AYUM{Zazd{3G7OmA{N+sLnuO&Ngdk3(|yA zRtlT0G(O1AUNezm4sIq1gwm?`0nay1R0*iZ!v;ZgD#DeaWp*>GGf!t_cRfDkX?k;k z?rEiDeUzeIcYM3Wg=oj;4z}@dw3&JP%8G1f+4^@h==;O=KEvr`vsQ$`|HUHmqa8ol&wH!nCy z&TIac`vHZ@@LNMG3{ebO2yud{QG$?R=LT?m7BoyikzRH*ag$%Fkdc`y3{O)Sg8o-&*)zXn%1hZNX2} zJ3#1vzXIP9LO2-MV z*x;^jUkrV_$lk2Jf$Z*{M=iEAQ<*HkZ1BC2`iy#vM3Sc~@8l5ar9RUTMT?)cpTAZJ z9P?;bsB|}xFJ)7y;4}3@;l+;(|R~J2w>ie0J%(4LPwCpOE zn#j=E6mh~TZErWw{DEnh-MSw;epE?&?Jm4@PL^A||H9&;s18b&TKtSMCnEpjLmg^; zDTk%h>#wEs)HdOvcn=H$Cq5W?-zh1V^ikK(mx4{$M;zt;wxbQh!YHxNHTUZU-7{p4 zzzahh+AdUgt*VIA&?9v?AM{t<7wEQ3)-_-$;rjRP9N-bh8~6eZGZfkpFL3rV#-cg! zuPq)|A45sQzK+z!@KYbKPbwpf<+8DKLwTFIXcv5n-xtqOiTPTYOQ(3Hn8*7s$CjU_ zDtC31xbWY$D$=M=>jyKbap<7C1r^oqhPv3id`ewq1-k(f4F#+E!PM?yhZCS4E94+r ze3HR@)D)UKWJ1o$Z)#(6v!An#F?sdm? z@7AUrsRd|4JbO`h>a$l5Tk%!>O{8m))VygLg>pSe?U{hkMUoRP#vPHet4}iR5U27` zU-V$XOvP|~mrm8FaO@(Fva;gL0mg7llNWXC(^Cza`vDmu1^Ba7QCfsPHb5s5BY3Rh zTQUThV(^rD%K4s>vr0iNSwiRez3aY-3q?{f!=RfWCq#?gxG&!DHT~i?14`|1Z+wsY zFo1X1QI05kAiD}>3Iuv+oam$I`zyT=2-e*-?=zl0P*Lo7bbWyB-_Azwv%W^*n(pA)$ttar*MXofo!@7@;&RDw;-}To@`XU=tQ>aUA z+{BL#@Ln_4YS@WgJU#EuXX{0|+>-LwYcF%p^uKfgt`-fF_nzW-OD9;>5Kx_Bh@VBT z#Mn~*F68_k{O;_@|Ha;WKs6P<>z<)W6A+PJf`A3-U0Q-7O+-Ybmms|bL|TAA5Co(b z1r!lfP&!EOgbsp;bm=4@y(H8?LY)1dS@+Ia_nbNFo;hdEoqK22f(0uq_R88j``hpL zzR&Y}T>pX^B|kw~p~g*oNwfmtU`?bJp&8eV5yCd=iqX+6jTW zp>NoBU=V#`;5v3b`8nen+B(mKx&ZhL143|jKvk6bRtu|!=L?SYt zXSGliv#>1^6j6MH4{z0){(=&{W-VIN`*a|IyXi4D-+8jh?1#Wqky?+MRm7+F6DzBR z$s=h1O?8E0--jSae1>!raOpLi;e0@_`ZRoU$P%3qv(wB1Zs?n_pYR_ZJb<$g zGF0i;&bKXh{W;I_*MIOAWQX*|e`$m4%`S+|p%(8q7FXb)%Qls>Zurj59a>F)On+)y zj03rL@5vLjYm$rcK)v)?c~{w6{$q=DjXb2I~%P2MIwQbfoV(?Tn02T5VBx@Uz7$V;)4Bl6> zm6|qdulft>_w8v@nyfyFI&N42cd&bSXrE_6F04O~-Dwl}ZT)?`mXtQX3&A=&or{eX zmY4?{&D`t^s#Ez~T_zT!m^l|`X&ayC`Ybe4Yt*xbfLi-dN`IMrA5>CfWOWUm40-%K z(EAafH@Wn$RgM4B-^^(7I!n-wibPW=Q0uUV@vIA6(`XjXI3BXZ0^_6yYg`$SR->rE zH;-t)=i-1WnP5VGO}rU4N|wQiUpnB7_CMhvMP$& zz!g#uWdMnSQ~sUqoa+Re=iXsP6SD@{v3+0}Wd`N;ic-L~&PFgKI+KTTxy#M;a4|hh zii=kBf7)V8y~g|j*Ekm`KD>0B#pZoXYlu@2x+i(MYssun)w!NffveZRUrcDGnLF-O z?VsZ6wC<~O1n)MitBZ95o3SK_H1ZnM?K~au3Bj(cbNKLo$9QuWPSrezuDy9c$eLE+ zD?i>EmZvyU?~VU5ziHakGoNM<=*VTIcipOAoX%MTVJetnesL)^+vmYl3-lwR;C}91 zJS4VY^9(+^o%54CEh(5D%A-VM9;$_`fx7(#&BQG2?LyrQrvV9p>DX0}J~lVnj21{) z{uEG|694LvzxdEE-0cc8f)>$={46vte%XQ3`m z%^}5s@=^B5(^5p+S)2IdV4PO#pZxDWj8+>)o$*4_P7q5_3^g-dpI7?!Ae_=FUKevO z%6QQH7u>|!0mK|BkS_6$kSR2?Ya8n?Pc<3LAWhZiVgKcs(RquvT9*@UMRdP@v8h*3 z7nN7nkaG>LLRH-7J}DYtb`nqVY*ji$)Q+CNUm!g!4)m$QRRtO+?=j4Rh%}5N8lYcw z`ND4w=yPwDsz%P4a3NVSx{~(IJR+C%sdxNY-`0G(q5NZjFGZw747~^MTyv$Ycl~(L zkP}EHM_-cn1&SDcgt0E3`K^;)Vorez{||^gU&(d~YlA>cnL#PSs_X0|+Ka?r?B=8Q zdC{Ww<+0n_JdXgIXqj&jCG`oEx63SVQmP`Z)&lVhh;E;|5%NYOPcBlNnuxYQKhJqg zF5Jj{7gKt#`_>5?ZK|Eh`Aa4d5PbTXCSIX1BPw=p!e&;d4VEIe2W7sC3GDQk z{bGyonQ~uK)fSqlkpSCT0bY-FZ;swgu`U1fK)SVrRb>!)KS$@&YQ-chR?QfbdtpP) zgDi#T$o#Yc_yxAS{l)rsJ|>@Uh+Ngt9REebq=}h&p#bA?%VqTk({E%7+!*SA>0^lmyj|~?pb8Zn<7ghK0REW zAO#h*6-8#J)a|^Ybm219ZU?!Phb4{4x5{aKi@ZNlvt`97=D5F9R~Ka;ca03lO|OIi zcn~pECoceRq9RNUCqje~`b)MilorO25?%_4o&|nsyT&WMi#uH#V^euJscj0P3c|`9 z#zE-2Hvzd$D8zi3LIxE=Dt&~hvQM9ftvuJG9qd1<$iMlK4lceUPc#R(b5HB)Ur_sK zGEnP|`wq$Zjm+*ET)UOPq<595a2Cw! zPj8`p`}Ta2idiuLG`WuIx7$_E8^n+?(7@23p$qphM0 zQUhAmOdj|X3@5P0{RK^1!Ro)opL@rJfxn;Ee}(Ufr#KpVz9XOBNbL!A(E0xtH?%FBm_ddMk0LRnC4-Ly@!5Ihd5zCmd}%`AIgum3hT5M^WRVYwQMX;lpM=(g-h$}E_b z+$i7kx=d#eGY!1@B-8-8i1jAiH0-!qGKi6iwDgXH$RaWz&}tIP7rl^+j)!iNNmrjN zrEUHMaTm`>k=SN2VUVw+x?|4zPCyz&iWo$6rXbD)E0TJm}|8ny}$Ef!yYF zJm)J)0Rnb{S^e37VXYg%n@qolvo){;b09q?ktX=e?o?7IvA3x-GXP(?DOB_LTd_~4 z^fQ{!J6fPezYdvbyLcQ`ZbaAUGu?Pt$NRLVvQGEvtKeIL40-Ff&aeEtRK)+6F;D-F ze5(KSW5O87^I#B!!2`-prm(R^O5^tD5CvF?w#>32Z^w*%cf~};W-V2nntsNc%Jzny zOIgHXAi1$dnNUHLkvccwV)+BV1`6d~TBJY-V-}Kfz&Mtd^4`pDsmt)MnGXD=7F66~ zT%cUvA@BdH2h{@oQ-$UKCx17EzG|_-py^T0xtHB>Zp&tE$q%aBsyIA~C`7pg?Koz9 zvM=Jt<9>gn1WtCfG67ALmO6jZ4NWgiKQciS^zB8H1@Ob&Qjt89^~?Q$PXYtu{9yR7 zI^;qw(RRs7j~pk${F&o7fBmKD8I3CxJAOvGKZ<34fJB%LeKi=h*lC82(o{KA^t%jr940mXbcXCw6Y=&q3B9Hy)6`f8cdSy1JZG+eshk;JJEfZcM8OS^!K7Rk+ zqby6F$6&Q6KVEd#C53L*lVd~beGZj31BEhI#dSjMl7U0t0+is5_r)4S^`w1Yw&EA= zvb{tWth zj`gDPw_1N1+0ZXTyT!f`PEny>NG$l{qAxIOiv3#lfB_3ykT0RqXwEq}!x93Wdh9JgJxD50xm*=pR(QpiT z^DMAk&#&%%FOS;gmVl;v&WNlf+VImr>XhXO-aqO;Z=qfVgJa+%6fUZid{HVon=ql* z>|vllC7V-Kj)^ys1w`0I)rcEE~$A$E4qvZSrT@a zyVz{pWoMF^JSNXJ#a(%a5s$Tih$p|xr#D{rs;C4%!|2PAPCl#r%C{!~ zR5cvI&424lOy?epxj7IlRe+7*z~$dTV{VL3sXn>5WNqiSE>-~~uzDn+T$87rP@4hc zEPw1>spiDVtm|2*ZUZIkweqsk*53DDY~9@8K}FWK!V=vn%@CK=fz%a>sNUzk*$nGa zBq^6-MCJp$z^AKk*GC4Ax#&)Xa_-cwLMs0J;r#k*-+#V$;tItOVX;FoOu2qkqN2jN z-ay!*deV3R^iHHcbUjA>O14Xzy2=z3>mB(Wh|103AiM}%4h>e7VjNaK3T~aX{trrf{9oWWr)I}BYsabQ=~Lta{zqif3(c@uIXwa( zFJUk?#t*lnu59usC6d@a1oWzU>Ir^cdN{Je%+umifPDY<+QG zWK}c9MfSm1AzbYEkC?~&W0U2b%h|2Nujv;Cx&_m8`Hgfde%<;X z+9LkXYfl5UR2k_hewNHx-<}+iO9PQXbpqY`D4-2Y52!#30K4T;4q#^#;CN=;MSKr5 z^~y{3n^2|S=W7^1XT@j1EaH>fVPu=(7>R2Zq-5(-SFKC%=S0{1*72kJF^rdvU_ zmjK`aNkCikBAyt48r4D_uma-?((`ag@#i*^zo2Nuc{6lF2z~mh21QoZA<6aa0L@fA zcEC)i1qe0p1OJP?Loy1`3FJ;2TN9u}3mXy?_b^gq#wEETZ(Qvf+*^RXXKpsEKk}o@ zPfO{>pTpw0t+3+7|Mpsly}=u9>k&;5vpr$#_`W!_*Q|k#HO`>>#FA+RO?UWVQg#TO zDSVTS#h0!3})+&cTm z*8CHYO-h71dJ}Wehr{fkP?P`24HE1Y8SvHbhvrr(oewXbxx}><19yNc>J&0O%}ZX} zJD2MLtlwI{Vq9y+6DVI?IN(-qcp4^xv#h`2wsQi*6f`Gokr*f8FUt&i2U zMa@y|k6s&#_Cnbz0n)bnVpn8XY<1n|mZYuYQUWJ+G%t!vKU8qDE(<>XmUIts?%o_W zvB+ph3b8_DtdSdCtHG-@E=O5nJ5nuM77)9mV*u#TZmFIYhxa8uA;_SYXFCMc8-eBD zl97+>DVlfu6-Q8hje&Ldj}do1UPP_Wz%27f0DaCLDE-#P)QjWrFMw5s6}7z98KzWs zbl`V`i}ZFpo@hq82FCB7o!6iHk9b{xUXu@XPCmG*_FfvczY6o&_A^Tdnw+)Z_78Vj zYVn60`+kniH4WiKCz9b|wc{ITjxbISE*_U|7}K20dTg;KntVE+J6f(#H0UPPvR0Id zT?YWHZ!$|Q&zY;@q9^x9k7X3n$CX%flG$RwZ;MJa)4$d{1+Kr~KV0JfS>ONd2Lfhd zHh`{yl5$1D_EPufB6U^=#iMO1HVXdc~kklXFOG&a8qx?#etqHm)|q%fqvmH zye~y?niC`#30>WfVD7=A=3CLr)=fELqfItHl9KuM)evqDv{BR!5n^+al24n)yqv2t zcR)HqkzT}DJ32vjXoyU2l?*vqn*CyK*geH(CWq0dUY+FCApCy*P40!G} z?v%zY-hcjE=cN)@t@2}hSa>Z$Ka?-)__iw!`Dg^fN4h;lG6v>bv5N6ux+O`0fuYzxFKa(rJg|7HUwGl}^?matVNijZ zo^~CR8{S^m}IBze?LgTJ!9ds8b5@^2wWq) z#w~W3W^nLCCzo#4KXX5GB7eYG&3eq59};6ZL@$pjJ!>9eemK%+jSYv?jd0-oY}EZP z1T=9}(hsJXfB)tsl5{#`Tak{~k5j`>^gv=M5`cn=Lia@i)B{}cJ=gdje;taN_1oz2f%B5S78lB+DiDn+~UGUEG6 z7Ko@FN02)nBt*JkS!P)D2siMYnB-ot0D{E;SGAQD0~i!H4t~z0uN>6qP9JC(DUJtw~=>L(Wrncm}-wvSheDuO3zqT&Jk(vJSz{`Z?diGUxRecYN73p)HOX9{` z^<-H3e=Wm`QTh8bf8a}<6+TU9&`O;T?@TK7Sj~-Itk&s*&J=^491-cx+D!DgncOnb#X8`<&a1OJI7EB;I9*7DsH)GCX#E@rk5iWyNR+v1oZ4 zl|U_dYVo1*Muxq+;jAI1AXd#~8O*RHAVF}#?!^MtwPy{nP+^e)VP%#!dF1_WyazFf zA7oq*`sl=3`i}Z_&1yKL@pB93v3fIsu8nH^5FE~FD^xq`S9Y%}6tffNu~_G-bd6JS zhZ{))L-4%_CCpwoEZUZB zyk?d~0P+0D@-N7EQfUZNG#=B~kg-(2Ie(@93HXi`aA{i1DhOK`@Jpl%HnR$DW(DlT zcN5<*UF2QS=oXS|q{`VweF6DMBM#?~PY5qC=*uKWz?|SbcCTq{%%J+f?>8z?BKx`W zP`BjH!Rw#TWVM`uVbX`ESdT?ctF7Fcd#07^IahNZe3O}XU3aO~{p_DwZ}p+OCP_(> zmMV$Kl|a?45{2$rj6c}OVV?AVrCncODL?t#Qb;^?BjeAT(}P~U^QCpVlWj5N75u|S z<`TSgA8xVR_%uhUIe>MzfJOW~Yjy=brJ1AZ=sOv%0-i>9s}#hN*vs6T3gW$x+B)$H zgB~6m`LPFZrtQ>wh4v-}pDsC2@n!qGumK-)Ccz=1<<$jBQ@wV!!YTzx|!fW4Gpw8p*W`t0zd9AucUeaD~*maBT-Irb(@cYQTDDjwI zOR0NLTBLwJIs$f_gMV;l8~eo#a8q;Mhff~k+f$=kTMxK)Ko?KlUX%L|KeFfmnc4Ir zxp9!|+#(ow%?}nYIDNUtF>)}~=M{Qa+gGiLvsrV9i?R4i|EM2jz`Rlk% z2p1Aki=&N_QezJ)PYf*>S76d!)muvBpFG~QsQb=CLiY})fZ+MzDj<3_Sl->UINR%y z%MzygFT0q)-Le*49CH+Jl%5sdfOazb3k z1bsO#UcQHWg|{Kee625Yh497bkw^W0j;=?&jiLp~)z`_z?H2ym>g3;EJ^btagO6?K z%F*pV;|gNGB_!+~?+>d*++K#6I=55J{gQtlaPQFU)fT$uO>pga6SM=(IE-z6`#V1? zyL;9x1$?&NCCfU@m~ec(5!lBwAT{wDvLs_de2_%*(a52YXK6TjOZxN=f7l7+Xi&|X zBV}rz2#Bzb3mr{X8Y`KMZG(Z8nBp%;RiJeloP=gjV-&O8BFj|~?Nr11Tn&bLcLy9^ z$rzK5#bTPz^N_}69{^fEvxk|FlKzmF-`MBAlL-DF%NvnTNa{<;vS;`^NX|#lrg91ul#|^Hk&i+^&Pa_VNx| zy|L`QezO(P+}qR3zM;NBD?{}2vkf8Xey67$)X(V(YEtuVH5X^9K4FXKqh1Qe(UWdH z5vtP~WV1wFnLVw%8o}ttYSo!4xL){4XGQeT$khJ7Od`#i$F`-WoQ@J(I}f`n#gfNO znNGUEF~La&ixKkL4igyz@(zT;3r(g@CgRd zVPAV;w%b#ZADrbtM7Mxm%+56Ng0CO~A5Zy9T{Pd~sCJ)G={}is{|jn;;bb#XEoCje z9{kMXaau&uOt7nUrNXU}C&)qKcm0FLVJp&|^Sna=$-})1gs(Jvy!uYh7p+%iPEE^l zcQgy!>~!!qFl(_$@vgnOQm|Jw47RBCoy3thhP;!vd2*KVt^g)7WvR9W54}V!e_7r` zC^B`PUsqT-%g=H(RkBhk=Jlf(;(a>PKRbG}QfYmZ8U+~-@C}ZRtl4-=(TSu{;t{}$ zA!NVqvMWJdPCJVCL6xGY#*o5zaC?qg%rGt{?r`2Xq2}2SwQ=x{_OmU*3!7`mc`Qqm z02Q7Od$x5aZu0cuN^7M9T&4b`zAqv7q*|}QhU7yC*1+|}U&UvngAJ6rX*ut=#rm~W zZk!MV(p!AsNFO44kj%GKmO7Tx;GT7yk$WmTwr2!M``l8}0j)8NRMQK~;lrzO0?Q+t z9m>U>p!Mc2XpFl-kG9}$2*Z)(W|Z!@S!5#y`>gic>y-*l&eJpXtb;pRS4^@o|B*ZC zf9Y8N_T9Bv0znF+-H4m*&XJf@Q}R}9Ei1ppnPUNg$^A)k) z-G>x!9^Osem@zo%uETwZnykfCFjvHiFdol}h1z>pcKZDMKGYc4ag-2>SS$P-uEyC3 zqYD#uU691@#U6!9-A_TFZEY+UB%pnkwQnP2T)Z#znU|$n)NAwwsIZ#)qodHQYb~#2LU^ae?Hp${@&}8?KtVQ){TnE3LURgBCFwcYJV_0WN_E&vMxWJu+aYp-7OAR zv2z1A+hZ$_cZvEqRTJ+4W;FD6JFifz@T@zjXStN7i+zkq&fur8V@T8edFKj+<}zv< zUkHG51zzKMF>5^r9+>*%8dW_%qK)sv+UR}J9TB@Bnu+|b!4FiR0eWgaAcBvE%#Jj} ziBFy7_6*PPS`t1K+O}ulOV1>7UORXe>q+p}RxO9P(7bye4(d~0muOQYU2VmG&Bg8Z zVGU!-NqWVz`hhM5R*QY&)mq#X{WH4#!*`!+*i$h06yd3Q1JEpLH&Dw4h7X&Y$Nb(9 zAAXczL;jkTI{Tik(s1X19W3)`R+CQ@bc&rl22XB#9eH2aSge7?i<4PAI5Rn?1Ssn& z>l1cA{77qWN&(2T`pyBK-S5L5Yw!Bn^u7SD1rf8ijmbkY5$@pg5jvK?I(yu(K9~ln z#Jf;cnt&?r=58nfi?A6XiqWz<|gf{Q&-o@ua<@TV9F5DHSKuT8fvRUF$ zJUnD+Z%3{aDcg`V4fm2jVFaosOI;|YU*>52RMb1TWMP%UDI9lb;L;oXFbeCIAQp8H!QQOESuBc z207fUjCL_z)9L44E4V@tiIZBoPXhY=FJo+`)O?E(W4!{>O>qaXsUy0p^&Uk+2|Abi zs2M7|cnaH1hK+a0=Y1;6?*jxB-#QNpZHBOctsrwESsRM&)&a3oSzMevZ#BW71_q{fL&o$PIi& z(r>E-L9)O^yFK+Y5#Vp&zNXu2aKcX8$#QWk2SiZD7}9TXj0~5!TC&%E=vLgPtWfg- znV2uxeQUoFw|ny=vlV74as?LvML3F5Qmx^gi)8qWdGwy+B)^!1A5x1cV=qwIx zqZbEP9tBcA*vJfdja`ez*9nuOTjcE#%$t9-Ro@FutDjPrTYBb>r*jNsvk3a zl)t$J@g}vfh^eNvK7T?%5#mEqcou(o&J6Xl@Oq_y6E^)TV~sx#4R5F4d4aw-TUV}v zW*|%h+Xin=gx~s}dmH<>;5VXPw#q!Wgnh#tC+I76hpzHQN~lT}2scmFm0M%jrF=Bc z)&XH5_+r&LA5Ho5yH6gN;GK>${XXwv3S4vO4rkw-a!+g0L+mKp%l2ZjpndVloIsd2 zjLo>?j6JEOz+!qM!&YE?*Iy6*HGXJb)xa0-m3^8={|DS4+jqO-39$I)cIIC2A7GvLiW}^YQ^H zWf4na&H5k4JZr;ziMl-g1}a8>dG9|zmsY&YQ?es8$OCyhQ}E;a)u8&)4{1I8Sn zRDOUrn=sk0*kJ+C;L}85)ZF=B&{squFhRTdk5O>Je-?o#RlM;m?TW%u(CXBRFMCTd1n zqhGZtZD#O1nW=~j6Cy$J@f$z_m7m1pVZ-Wl%lQh)r^!sWZ2DOv9`HGF@j39jQq8*- zXSJS=9=@M9uscZn((?M%34F0qA3p54%v~Xb@9Pbn3r^y zki2x-BAW?e!TpZ6#j_{Hio});%iVij?e#2rg5v6v<<+gY!%bl1+~|Rh1G60N3CxnD z$4O>S9kB0b70^{q>SHG=(obxt1BxPDu~i1kU3gm@unL@W(J2_F7Im zcob-&2Q?3du3mktaN>L`Z!71`dm}Tav4UIGPnOCTVuRkH*Z@$d2PQ0+YBM5a-uTgV zb-DXBHYZ9|%mb~NB2LLv>OU#)`pFjwUDyvlR8D#g?!7nhR-EeM@G>3v?IN~z$yYwI zQO$qb#~1_)*cMO-tT%&@L(CrDw|;rLUD?VYc4+VB}h zghN0QwD#GkD5xq$lYcHJr@4q=W-w7cv@@~rE$NBmEZlx~Mka|UlxhYcRIufC#`NW0 zQh;$GWJ3c&p&dNPGv^P=Qx&@7M>o<1HgD#;(X$q7eB(4u+=n7IKR-2rp9hm^3)jgU z_}&=bPro-7uHzK{y@mey*!XGNu zHNQ%CT}`lN`M~?UM@5Oe9;2mB~>j<~xw%T5c7JcOQZ%^_Cvh z^NuQ6+4vvm@Z&YRp$tfxC3VgRBS=*@2OpZ=51(BhZ3%ERr9aTdD!2->bzgjW&+)2B z{WIOw57-i^n0g>|jLehELf~_&=MWHc3M#;jH+k**4Hg*l>R%2Dza;x4n{`;h1zR5F zU*aZ9IO$2f*1FS5PIt+3D-)_5+gTYet8ZRf8WuH~kGNZ0Od0lk-mu5}l%LFw`aPmV ze($xJFavMiDOhzt>>cOf3|~O5E|P9}(-Q_^c&(fd@S>gqS4+zU{Xpu{rMGW%S$0V+ zjiGT$g4Ag=)_C;JwWUR>udxNgm|V^+f$LM-+Ib!r8?dfNnT-Ta_TVm;_*K0b{RZy- zwF?c4^s@j>qdq3N+*U!hXNig5=+z%h>%kOA12{eC4-gju5#2=9<#rpWc7l1tA>hrd zjHvwKg3#(N>CMC<^UqaPolfbBr_a5_OLAN2Hw-hNFJw!M#LCMTa|1$oan;MH$T0E5 zhr>Gclk#wndrmfHnp2(veMXh@9}-0jCb+0#9uN3THrQw$cM#y}lO^7H>jH}7@=VIB z)y??Cq$u$w_WX_gZyqUuPpzU;AALR&r&VZoU1UL8dEnpo8hfB?(lZmuf_+PjWy*&k zEObmVpQBAB;NsOiV!d3q?Ftta!Rj(L729Z_TW1;8XUpA)Zmp~z^Mf+C<}_V*GO25b z<@QRm3)}KuObJpx$zNtK)GpJT`3GB&Mdu{jyKC>2ks%Qnwg8j6OD#Uj-$lmN?l@6Q z$g3NwBz9L6b7AzH-?fDVoSNQAdk{ob8^Y4rKBCPEcf~fcNn+oQ8F5|2cor#;sQ%Ije)uN%$ox^Xg}VVnV<&`?jqD zj(ssM>^6WRBG3>u(2-d6R@S}94DFuar;OJ-}r2S(?QcdPghPP;2AsrZd7{+|1))TQvvSkNc6oi;K> zceP;_%1)BQDZNy4C~|{9@XS$P5h0chP2+hDm6zm|lx|it>if0SugIj{7oybH)eb6# zR!b$T8CPum1+gNz@l;*5%r$tkC*p;y3rs zy?kIyYQ_bKz;4Sg$*~ZL+263OIxsF{D=W>t$wIdv^@ko1NGI)ZMMfxtnRYNGoaY2g zeRm%ru&~yJVwF@g5%|cn-)A{N%_*e&$9~Cv+Rjvip5X!=7j?E76WnFFg5b)3N9WZc zxCYgE)m*YTLzAb+X+c2tR7M z$q3Box-3uP)zmpkme>8gFTx13eN8>BH9Wk(^^O}J-P8|p(`}TX?4wlM7d8I&4ua>a zR;nv$+yOH?|GMznzW@I8F_6kbn_=*?Ug>fO+>DjEl6Nhx}Clg12vAPXUGDe;D z0mvYr=5e)QmgJAAEV-Df;>M3>(4l}Z*TY3dL`fG};a3?_ACve{>|6yOs3jjZ$1b>E z%0ex0r_B8{m`RUJN$7=gZbX>iOq-v7BSiE-CoCSU+_Ke1cgku!Q%Qzpf(`RZcL&a>uWSKqolAyatXdTJt!8cYFFv5sm((-w5K(0IQ0;}V zj3H5Y#V&)$E(m|)Xw5`Wi?Kf{Z+5WvhEe0(_SLKk>pwW4sII_S^{yV# zbJN`hOS7(>{CMDU%kdTkR%P+!Av_qy>T1h7+QLB=m^iW$Q^dn!1y7GbR3^U z)_bG$qA`!9xiv&Z2QqXVwjjL8y;%jlWiDFYv6iF-0USI%vKDymOh|cqnL3EbRasrQ znM%ih_ln(cTKA<3v@aDHlj%vkZ3L}lsSElXwO>Q?x)eDqA6G(zE?jeLtv#T>#rHtK zEI{l^j`NA2ml6Q~EJJo(Krao0VY8ZeQ?cW5HDiYc(YH;-cYHlrWM|$w#9r1=$-BVN z@dosmu!BjySkXNkV_85FwiH{iUD&i=4I)XORU5=}^b+j4lM^oTVSKXo-H=x?h&Cpq z8(uv*TAmjk0Oe44qmp1NK%^e&bovH)lw`Q5Bd|oDfEICS1+qm#mCPr?BoTLqyLbQ; zWJPTVW9*)nLw!asuR4oi7Dw!A>cUUcK;QiyR@LknWfSeEt7j)&t$+*J8c*9LT#OjC zLUSU%POceMOFd!rJwvqH?4ORKCkYIqFHFirS;7s=bF-tTkmIh?wtyxmqa{ zP$0HEqWuk#Z)>e3XjZrf)W7ZuVu{`@NWv;J^rtbJ+F@d@zF1TDgs6=^b=)4OE#Y(Gy+?bc|rcy^R2wa@TPO~ z`T*-W2Jovc1?w~Lo{7-~x2kzP8IythkQ>Pt`~FZ})O(tI|8x-pizPW=_off-;+$jf z0-gLi#v}3)3=&d6=gDu!Ogjs6FKwPTvjN}&#aeI+YdjDs5zsgjGsVGI8^5^L<%qS# zZ4PVI$L+348qRtH?FT*j6?|(ru}_dI{_|G7FVZo&gDm=56VDX$N_=Ic;!8Hy(9)=Q#?3Y6 zfFZtwyRvATY3kdi0+^5AOAS7493Y}+7(^;`)LPz?ZJqn78X^QTr9c{VZg@L1c zp*-%8n-lV7_xmtMt7R9Oujdx^I%IYSzr56U0uUls?gJWR z5FkSSXRmLPobdYXxjbQnD54A2x57KQiRM-qBz~pn7tkc$Xx#K+L?D z5$^cC14jMvOy}b8sB>e+Q;9d6H19H2rRm(>K5GS4sN(D6S_}bGZ=`4;p*&R4su>nr z$Kwcp>UxZS3van|h3eQ-06gwwRKz}cN*jfm;v;Q0_+Kepg;Q8JJJ zXfEeDM-sJ(g|5zY!c#N8U$jkxW{rl)(p9Eq17pofqI~6C{Jol){yTHqV_jFRFCGe- z{ZtuBN({u&V$S;_)I63$_LwaRue-9mk~s>P5?{CYxL@j_={>O1FBnJ@qY)EY{`y?~ z0IQCUsci-z=!o3zx&R*AkA}0J0!|i3w_`}ng+H+gh-V)&z)}>6&%u|4C);iS){Q7& zFPeB?zH+>@mP^6Lf>*DyI_sxjhV-xgT=%z>;V*U5`6%1`f|xWeAs@GW8}XN7B0(m| zYDmqo+6vCaQWZ}X_Kf!u8|G-lzO)ss%xvN($CUD4e3Tl>D77E~;J zF0J6nE^A>;&RCeHSG6}hdE1<}n%QerlFPboncQ*CqK9srM8fiHXM3K*^Q{L*M0{1Y{5&RY8^;H!0wZ&Czf z^|QY+K6rb>?JFX(FBsbOU4a+Ii->=OyS7`Hs#CaCuVT=>DH!{}NYmk2szPzN?B=Md zE@PwXmHNT8Dx~vyG_N(zzppDdSw%4x$UlLV1`OrboG4}0$PT`b=Y7fG*eut~aas?} z(oCp(PO*yu^jfPQPyqQLAGKq-b_jRrc#YH}ynecz`>I~W_xD!D$nP0_?Cg7*xC>)t z)~~P@zi4FTa%dlWz?T24jBeyIA4w?PZ)@`=Jd}?eoxJ_hxCv{VSbc@gXI$Aju*Wah zWaaGIaY>O|E-lHB>1VxPedc~>^+N~w!OQo!c3W?EYRA8Lv46OwA;5`=pRNT48q5mx zwS(udpM++q%)p?+!QefH&A_5d7EaFg5ega~`Rsgb0(+!pfpiOk#B!@4Cbt_MxA=QO zWTYjxZW{H}-AusjJ%a&w?`l0_R%Re^zq0q)vpbZ-Nr$tAne9BZ(QTJKg0Ce&)T_qV zoUD}MWQXOe2e1o4d`|Q4vdd-lM9i9h(GH+-hp69%Sz=5r(!LU$(kQVTz_e&%u_)sy;=SNXT1=``!0jN%}6xJpLApg=g z!CY-O2_AaqZ`wcz9pfqgVa}T1ZbD(p*XIzL4l3PQ3H zl~5ffXjj9CT&G`ZLBLwbDBOwLF%&kW{7B-{P zor`<3DOP7l&^df368SLUFDSr*Y~gYym7$94Z2Ll3TVi2C%HUigTQrxX7~N(hW0nj| zEN!3 z)sGJ{)&25lef@c9zT>5k2+^bN(0`y9DWWP6UTfW6lYwV{#(DI^MXIZQu-xvrSoMQG zv>@^osk)cmPPfcP_2IWsarj~DtpP?=Rr5(MiKPS)AE5*q6CnKQsd-jGoVQ;tk82xG zre;GYO5HcZt|82Ncurm(DSu%p?aDXg znc2F3rTF|SJ?pXySZeQXOnYyzL&0PVn7JCe$3&>o-w;AEGY+K`Q(jkMef87O6J$u0 zhLQvBuRA%DJLIcwZ30z|a;uXPJjWsV=88!oLH4gQnVM5RvL?|uL6eZ0fy?I}?K7Ow zhg-?pR*bwGl3qtT^^35cWPy(VeKDLBs1!yC)6sF(#h{FmcY01w^STVCF?9YtTzvtxHUdiO$fy>vhcfuFYm}F=7>yqULD=t3mXwV zkg#`l9UGMRlOQM4|L9@R^{TcTNH&56K4Wxd7;6^kd6Ziz<6$wq60tg$(`JpA9eB4_ z8|`D6%i7{wfRw{YHZGsT9*#?G`!R}2mBSASBfA13+};v4sd`j5XkzYXjrC?Rtwq=q zBKg1D@YqPZV@=zI=6Y5g4-$4x@@zT^RXe`S4G>&#ftbvWdD+k#nEJ@=8ePe3{pWbj zw2&Bn9*cYlk(Z83)qKv49|Dh!&vTFl%gSn~a-{gEmw(Y0PPTqalL+ji=OS72)|z5# zAATnI{`AmUGVDXq0!8Yj++GONw@Goq+SU;69fc6Th)q#;lNXLU&)Cx^-mHlTMAVQt z@vyEoHGE7$3->3BO{gnQeOo0g&tG1*Zq!=u(rd>DeAVoam7L6|mz;B3-e0>Vm+<)h zJi``F3S$X~cnS77?2MQXLTCKi10CLyplGZpi7*F!*Mfz;ce8JO)yHm(MQv~4V9VEb z>Wc83?R8B#pImdED2-Sfy7*PDsj3kJ^%(ZU9{*lBo5~x}e|I7=7HR5cjy(iNLK#UC zOZw>O99|qe=^dt-uoAa9FzXkFNO?NFLi@v6xFkbj&kT77Hw!35N4IO<&&%pR8C_;| zJJ_fJfUwj(q6@7 z%r}Rv((?KwotKn+s$-CL{~jcu974QpZK&KZhIVC%4|Ygl^KYwm6MNfn?NQ5dl`2S2 zSlsYN)-IB9i3X<~DH*SnKr+GVm2>C7b!^6mdd60=X?|b6-A)VAj{W6wBWttp)Aw(Q zw|nM=U*h_@T2UR#X7Ba!KeD2Bn~NcNp+J_n_$d5$YTp%mj;JdlMxUc^b*H{gGtgJ+ zWVzs8r5B1N>ZutP^*3`GO(@nJZ)Lym{!{$FvG?9lO?7?VH;4*IM|ulN6A)18EvQHr z5D<{AB3(d4AV46B^cDeuORDrvKsp3MN2Mt(5^Ct3gc=~k=Un&9v(`J;J!{?fyPlcn zT{H9km5{8QeUfw7d;iM!^OdNlqP$glTZ~#L+y$VRTjSFFtu+W%LAt@`e zFZsN|{$tqk+33q9YVH*Q?kN7GALbyD9=Z!^(Re7Io2vSmqdQaGa)xHM!YdYb2nQaXGWsB z`#30?t|JA5f2DCwz{C66hhw$OtzdQO`2nT4eu4Ds_K+X&lL>06>F2=&GO%N}b0K`qzD#}H&hYLOD zN006o@Agx~dqqzI$OJV#LaLL$YEguW&gU7IJwZREU{s-M@<3pRm~Y}eO3Dw0x{-@F z3=q|^qX2Ud-R~XnNmD6>)!xJ(|dr?Jap#An{I6+{;bOU{QpOs(Ls3=C%4!35S+HG|68l z>EfwMR_wDF?1>{~~DIQTFd zvk$jZggG1(Iy!hveBcbuVE&&)xSiHK3s)tZ0ow-?=8tYxedD`bm+zoj6X4T2z}DQFVP2*6y7Wt_cFsoyZvEJAkC^bpuZ1y&DnLN#7 z@0g_nd*7tVb}Q-+nqcbjznBoqm;Zp@@E_@r3!B^TLRZ^+fVN=f2GnqI&7G{$U7 zQ!P=gCpSJc{;i$W z6{$jotF5U=Zmyk^!DH@z9(%|ECyyPkE!9h&=8B7RoUl$x?4$}H-J>dsL~1O5PdJab zTYY9T<)JVwFx_M{mVpx=BvPN5IKvo`8lZ?bcA?o-@ncurkw6JU6Pm=u>PG+PYbLDe$-hMjI2HD;-MG5PINKQFrI6=tinQdeRrQ^3*huPkLHeoCJpYSioXL6fSS7lb_yIS>z$L_fqW=W671e{c!WkmhE2 zOm$J{+il`!iU!Wzv^BR6c=_&aNwD)DsCv%>X*t^W%r_yYj=8%f)}yEEGC#4= zn4!3|#F!;jW+o+O*VitJ11f9%ct+{=imyk1t%*A^@#W@PrPYFYw+#)}DNF?K7x@&~ z*bwdPo;drBbv4Vv`nsU&z~@9mUmgk@83TtX!P~VCW4ASXmxt}+rSF%p%j>I}rk~8t zC9zZ;KGT$42EEqLKdW;)N83S8MH5fjOis8}28$et+cWXf@skKzTtqh<&IRiol)`%U zxY?1*)>q`sxK<5fmynXV!dEC{w%-lCzK~s9?zWH@@zGx9eATU>U^aTymhxuVA0}l= z#_*kmrBPpZ!Kp8sFX~h=(KjlShOYdrv*lki`~WN<;x}2+)_DSICm3i$RWUs@{rkia zkoEZojt(ElsQJm0l6Lg~!%B0LQJHf$gXR%gEA5?f#50H_{|AQ`ap9cW2mEPu8r*U6 z>~Em;*T;e>+^QiAJ)<&NSCI)35p@kizuqaH33a_OvnG~91g5S9ky}`(i(jDn%8%0s zsBHPXHY);T|D+gQQjU+;={!yv z*4^7fy-opSuU=5(W(ANbrR}>uN|vxMhXJB>veRi{2R*)zu60~(0iynMFV5z)W?uTd zF_*;}MrN_#qXL7(AKjk2ubpk!tWGy}Qz<;IX|aiu?{H+or9?ch{#CMkzpUdc%aqo| z3h@Q0FrqTJC}+4}6NX_nNLWwoQxaq<8%!KpcSF>nRy8wGp&FV!sr+lQl zjB;zB)mZ-6OCPJT5X@y%y4yEeX1Yjox)rhHUcF?Vti0~mo5AvURzSscJJ0pUFT#@z z%a{8)l#@FTm-(qxKFy`GT-YJOR{U5Q<`@7P@ zv;AL$Zk}U?xdSkXmryu}KfOW8ZuR{h*HJTs)BqJ{`bd1X3 zSqK$Bqt^9eA|rmcJ;=PT?OGk-HXf|%fwrcG$-OI5mpKaX8L}E`GBcg@sB!QU6)PA^ zNbIf4w206;&1UcGe^^*b(xH_tSYnSaR72^Td**uK+?(Sznx%ipo^uU%Te9V0&+p$l zYECY%PZC`-ejqlNgNOrs2ADUBj-;vycMx8HhKsc?lA*J;;Ar5&EQjsGGs}<@-seVd@Y3h~#AegJeUn*wXLw^iVU3v67*2i%~_~I^vC;9$p@}SqrrSoCC ze#c$maCCRW8KUt95n@-1ict|$DO08FX=ALzv!=bPr9K!xlO1k2&E_Yut^%SX&v+Gv zGud_98@Qluxhy%t=AvWP=%c2$cP1rslsQ&zbkW+^$N7eD07fsvQ`}hgZbT#?+4S)Y zW%KG^5a--EC`*y*k_7X)+eDf9Y?^1tvHGzkPIU*X$5K89lBIjz%Ln^`Y z1oOpVIMPTy!j>Dw=mHiQV?OFKu8}NLh?aQ2RY`uc@D5ooL&Xz92-F=ff0X-!NS*_9 zH*1Bfh?Eh?Hqe`Su9s&W)m*u0A1rAIcszPxI#;I~B5h3A)IKi+HfL~pM5iGqRA>au zM+hJ}Q$`-GKIYBjhH_Op9cyhAXO7Jh0aJINtATt|C^(q%e7gM{ehN&6&Hed~?=xvg4zsnKU zo;>*tm1OiTTQ{IVmuliQ0JR5UgAi{flUIe`e<^_69ov?>^c(jTxLy!IiufPRW z?Kzvc(evS3@AhI}-R{-*Rb%u(+T+uY-XaO?dC>c4A}2Qc${O40M1wc>?44Wj+_d%A zep*qlke`~Rv4d3?bb5p2VXlY>K50Ty4uoyEBS8Kr79$^D>+X0M{F4Q2nsL=5<>A-w z+|H}6%kZbJ4c#aTs1eSt2an&Jp9|Yku>cq46-F#b(ObKUKa-vIQVjIpUj4w)9o6)) zY@SshO=reG?K}M)U&BHLmT0nAJvUaKR`FQQflDI%HVP=s-F9i74!d7vNy+?rz;m1x2x7 z`8mrCdA4|mYTS15P`2Yt+I<+h@%SX*9Ba{|n^&g_6DX`L!3u2OmP&qO=W;4FzP?$V zfJ1d!X7}u}Jb^yKYo;A#vHZ+;fhrbFUt_i%#2lHbve@5H1&!Bd2OWu*JbM$e`kmST4(m0$XW04-9zOcpcB)ca zGx(n>fWCk+^(enDQgF041)Yrxwb*wBLEuj5HM`!KEv`kBVfh0WZyEFfvevb=CMkj7cQ$Or@N;j$bcGFp18 ziQm019?Kp5ynJ@&E3&l7Go9yycbjS!rERs)nB!4k+*U%d z+4*KQ2y)Oay9HtaGg=chMxkncE{n>ols&;5e^{?KAJ&y>8ylw!%~3Fx$14@yU7zCL zpJhAG*p-1rVn97GW~lBMQg6WqEMAP*soZ9hZPpQ(ZyweKfRCjZ>mp=`$Q>TiFv&^?9JL{&I9B=3trg-!xmnq~g zo#c*Kmjw1FpJy+icPqfRfkK;GzRuz%oZSv{v$+u_WG0b2tN0LxWV$3m?wZ-xhl*9Q zdmDTk&WV9IN-+^GCxIsK zD^}>oXeEyt!)2Qk6$J!aH(M&0_Aiac#}z?*fo3i+LG5@?fRCoi zeQ6t_lUDjI7BfIQc4pSAYKw4g&YOC18U~}q3o9oTvZZdb9uk_TnB%qx<+CUJaO_Y* zX$HdP|4k!&4DxwlJAMT`XuW%Hhq}E^&8gL)YM)g#9#hBge-ID zEL;ame|s>{saGw60dJ2z%A1GOb>-7#z4aHJBNd=WM2JJkyy z6cll@!@Z;HsTi^ZD~mJsOralX@_L`~Co!bjuLHsM@8j#jpN048*6Cm;;>AnNUDqql zls5}Tl)upSixj-i(YlqmVk#8a)27{~BU&bcP+_q&hgMp;dez&qMJ%A=p|Uvhp5xSS zSO!`MgTdI2Oqo?`y}s_sqiVQp-qV3d_P10gEok+5PZ|p%^ZDm35+{Lg?@&cx!H#~~ z)n2O+nYf?|UZFOHevJ+LWZLyK#K7=}eI*`%wD~fjM!lNrg=Ilq zzTfR(x8Gzcg$=LS?lK67gaqPavgyEd(-7ru_E{x-Y8-;-v~aFD^D=+jqav?9p4&k= z^wB*~KXcNz4n+YKZxcguGuGtwv+p|lGf=gDlpMx#y4CYFUU7%3@`}!LH9s*AaOVg~ z!1Fl$wdd}>xA%Ga6Fe+@j#9=mhNM8KpoG^28Ju+~!D1^%q!_w(l5dc;hjUILf zF|W1_+Zx_}vS?U$o;|d8^c9hrp6WN#H_PkNC$`+FUrajebqhK{yqI&Z_<7YlI`bhW z*1?SM#2~ib7k(Wst&46W4vO~=tM{o~x(KVK?53H@j$E>wgo2x*dDS|+;h7G z@ANmq%C1qHs&v3&%ZS?r#D55~on)>6WpHLw;K}4XJU;%3-w22A% zk-C?A_ZGqq-_YTOfFyO1RB@?M>0P!re;B#P=cYVgP~HT~Pg$$C%I9qPUC3YZ?Ih|G z6#W)$JoWJnp-7)%h;k3cre(6H)MBcj+uN#|_IVmL*y52qKl3fafV5vc>Rm&r63YYW z0fC!!>GkOr7$ujy(TBqRsa+twtHb@542)ufmbaWdqZA4;NiC~!8{!)XmbpKI2k*=Q z;TN+kf{vhtUG4UyfvRTf>b1B@vHj9#wwNo=v5=V6geClJV3o=!Q7C74KXFGu>U)izw_U!nA*06{l6?9=_jwu#k-_!orE-94a~tM{`H1L_sir3)=h0Q{?OZ zchcr={dP<6G3W3-gZL+_T#qVfIuvcdR^nUb>1JDX+8IvFy&v&DRmsL>LOPmWs~!gO zD~TT$IYq6sg!4oykNrG5)GiZR0BTRynIRRV-#W&;dDJOO-0I_}W#Qog;Y+?g#uksl zRG!+Cr7fsA0AN890r8v6o>V|gY*p`T7KtIMV<%hF$mI;h>u1p6qavV73`R3k)Uw9QDz+IE-^M0Az*+7|=F#HlNcjwAZ=eX;3>^ z--TvZ;}XqQD&r#2`|Re(fHI#%kC`_IO)J=H1*iuNw>fKMsMv%{@!r^YiMLvKMlRyZ zal>rCaZwah${xSC*cSx`5q9=YJ*f!ty4A@tR)Lf5xvkAjw7o8|56e65zs(b%-0(I$ z^1*3^2lEmkga#~#@>g9}k^?<_>F($^`P63i=ki|%`Vs?@Z2G#TLX?gpRbFK?wedm? z+Hl}j)x`DYk5%hG<}?Cdmg`dRvd)(+8AIjp>99g07|4y@f6Tu=ThSW zSQ6Yu>^RM}tVp!H+ka6xnppf=Zhx3GKFinEMgX)>)LBuSO2h9ww~1OW%uDvT?;w8k z+QFaMT&}|fp4l(jhT&sK%-foPnUsFIA?aHj%o}_@ciVlMAzjEfBUwG6A?xf>b=~+) z$v0EKLhFycRIXlI``R83iWF|iVlpeROp1__4wyamHA_utRjGtL8q8u~4e1eULr-eT zTO*NWY34=eOQU|Nwr+1!*n3WA;Jw+=pesbF0#s(6l_dk8E7|J;*83Ropck*bNP~~g zb1H)=-GUV&y4sX*+3;X~H?w-`Yq-_$u(6+$-4>CJ5Nx6>?PRas)wf7`=}G9t^Q=XJ zkZ^^!*TM-=%NxeS=KE#PWreW3ZX_VCVQ%AuS|f1= zc@>y0m$F`&NLi|#lxv|5%n8d?JWkm!y|clPm!{UznYu1RuMLcj9bP0SSB}}D0l1gp z=bTRtkeA?Dg1)cqg30WlIFx024+Da9=mZ zF5*Dn_}4m@R^)ifnST6}7@3>p1E#O+8(UbOh`uP+>jCdnPY+LW@8A>XB8Jy4Fj@eNtGzu*De zAsv+MX!+9Ub|qj0L{-CQgN$n$eVY30+s@-`bzK>+$FJTLHyaomx75T(8LYbrjlQV0 zayEVFXdX9+f6@~br(lpOwi0KyENX1zIa4HppZoNEaCTz_y)6oGI@CIb&-k`s2al88 zfGr|1)h=WX5JHy0)_LE6nA#X^q1rfbOpa@?Y;zr6_??$~u>~O<^OJRgB-D}7PCrsDm9kak5P7;Nn7iJ3<;7n`AgDZMoMSY$ZKd9()_0Tfi(!TYiMvkZY zprV@P_MI}JD}E-)inf~?Y?WCJZJ9FrinlnXo3q%GDr`iJ!yvEs2AdRnp%q}O8*OgN zwWDWp+9ezb!j+_EhM|8l+ zcl!n3M&Wlm5z(jccd|ha*Yz!~8blb?B5%i)TnjP2@Rgn7l`5q{(-w&jV%QzbJR(w$ zw}T&o*j>#{J}tMlgoyjteU$u~6YCzQFr>JYlr~KH4xz`fF=prw_VgW8o|F%Ea+h)a zj**5gs8P5{{^5(FY#YRX-(NH&3SnZ- z5!(9VXZ-MKNh;-Ik0q}UEs*C1{yh%CKWDGhj}!R-L!$HNKxenqJH1UVgEHw$+TUrB z%vpHtJQu!vpEV!%V1}Ud#pKoAY+$p@erEe2&HU&dsL`6yZ)fJ~;x%7fcgB8n`a(o! zQ=91Qnw%0Uik6Rk)RXPZ_-Eo+QfV_!ccLEhxzJN;{Rm&B_}h~v^ve-t1~TQ#A`XKs zo;r3#ffA;*V|%wwLPb{;tTi5*E>da8fBT{{n_RK$vSV}h1%=%9^#^*Yi&4M|$vOk| z!zWsG`2ky=?mUej6se@ILac>ZciTa7*2IeVs}xzk?0Aq`u(Ml`4S>l+me{KYi+uD@ z>cAzV)Y7gO>H6&P)#X^y@w=qCEY;6M0e9tv0~jk*bb%>f;_$;4bZw5)ihAiqj_`*O zc480KTijlFy&HP|gG7Tt#6nFM;k=tngj`_kSG;l@OEr5>M-Ms`YvX9z{H~@#5sy=n{nL-qVDo0Jhqk*?h7aJjoGVtefj#P+oi(>>D$ZQlGW@R*o()3#>*^#GNe| zOu?Dgbk1|wR5Epc#C&lNf@GLgM%(@ z?|W>gxoLu7;FKvtI*}tB9=y;ou_HDF`ck$TOSN-byGMt%hJf1j?x|);Qxb6dwQ*z=O zZg+newsGoP=IPfmEw)cE)d?0GF2W;-Quw3fcmz0nMXlpw#+ag2AR_aItF&ubbXS2PEnt5XY+svU!~GG~ zDt|0ppWCEBx(Ss|-63phfOc)K1FnN64c&7QS6bk3s4CoDml-B8cCt8~T{dC&?0jI| zxl+?E21Wb)Y*z8-@L7Y{-1pLNcog=bU0`p$$oaT0Nly=>-ptjB4!n0huyX^U3gQFv zS}VqAw~qO^koWfU-dRx3Hh6TUhP@lcxS_Upfgrnh)*if-xUS|D)fT@E)Iw_-^=QmM zJnoxCtM*N~O&o=Uld@+rsF0|q6(fr#Xns?>a+m#y>vEnk(H^zM zw;#+Xl7YMkrUi=7+b|!LGKaw%Q5bW%`7ogM(pixg&-j}Xh+zJDb5?Y8`-MT(Ny{?m z2-xKpxLc9>1L$^#7Y!r9ckt9|0i3d+nki7e*ITXgL!05yHaemtPOcXy5+9W5O4 zM+{}ylhVEcnla0t&o=tM5Mc=9Qc2oVmzT@(OXY3H2$C+O4ju>fT6`$d1qwT@&!fRL zXO+d!sKEU7h$9To-rKNco~c4mJ^9u|8^U|(sRoH$2+XIhQmuI(G^?!|$*Y8JHL}v8 z2G#GLz-)`Mt-$36T|Mf<{z1E*iJBszNLH-c1sAtGi2B`{k&4TAK4^t3`T43zXZs3H z%&?dn>xzBFizq%$%9xqj=#0KmsQsUr-~98~|7?yE=ui0%^VwnjJ4QpIB(REffnN6Rq~_d!SshE7;p;p_ zEv&ENw>EC5QsZwjyLk}3PWJBlBl&&HauhX~RbbZ;;4qpUa!FLFonG?!`1nl0SN2Ki zriT1+O?Cu!_pLinL7i(Sfnq?@qu1<~>Ht>%|GiI91#~6| z1uC0i+qknuyIvG#n8YSU6h~}(ZVgJ47?o88NNQUcjOUycz#XtoUjZsi=IExP|;HvRt>lk$JW znA!u39`Dt;yM8QUeCG_f$fWOz!`>sMXfg13$1zYI1`PXoOgUd z5~22wUN6akAH`*>k7PzQ9f1C21n08{YIEmw-ff)Yx#P8UqRRcU>D=mZGHrV0 zRmJs#N^@hpXJkd2va{{whNe0$;T&uxkYSG6-j~AgH`T{o(dKaH$oxX}a^9Y2`IlsX z)4!hkDj*dS$0Fj8KKSf;_86#W?s)8tjmpjwXC_pbC zqi7_FZlL%!NnUo{(K;HhMaF2)!>LFWq|1bp>jR192iDbsC7gmw=70K#;pv9rUPFzF z);1BpYGNvs)yD=GJ}Ww>LVtFue_>VdF-jVXcX=Y|Gv^#}_M0pxZyV?nh8@W6Bf^6D zXV*|%U_sl>ET)NanTB-r_??|&4^DthC zhWG=EIt}DF8^CEGv1QIQRa=#;kcR1alyf4MojXOne$X?JRau|5{L4TxLAjt^Qg|aG zqD=@lQJ2$^zZNVxDm&H6hQXkX%3%0&p5m0I?}mTPQmOQ=S#R|((v9QSMIlHSACiI_{nzW;LJ#0I%DOD9DzZC(Vu z1sJd1;x4g%-6)IJ%&#hU5bP%zkO8Er>-dwme zlvl#QwPwpVT4C%!>Q}O@P+dywsq&PLlE|T&I({npN>lN24E?H=28;2ZBBlQ^bJ+j> zu8-Njl(QucV556m;>T|O;=x_k0k=CA6?<|fVzi!M?&n=&=d@qDb9ZU?y20XXbu1DL9|(HUAR=6Q(}%6ALC z6(XUgjywD@_Gadq(7sb+>lIUxW``5@{^_af_ZNM6n)t;K-JaBLSps;!t_pMAhPZ8{ zGNQkDgMKeel)Abp)SdUq?k5G_FRoG2!89%?x`T9}+^*K1brm0;>Ec<8Y}g~D4Vw-X zsjP9X>SgM^N##GEaPPaMEx;iHNP^KJl3;O{U?yBqhvy|%ruCyl{RLIa)rarsGcUgN zXTvMRrlx7ytVq9QlD~Z^3EU@er+1)u=zb!rS7Oj*$S^v3VM~H&QuHfb3V<6A>#|?{ zCNVzL5X@ySzUOp%>LlA)@Q_Z%iH!E`r3)%ComEf}&Ze)I;VNObtBoT<=O@%!!hKPR zw{UqdEM4%n*aN{d3&9Uz#uiaxWxbdD>@FT~e}zhwL4HB$aj9JhCPKJ{WB9}fRbEqL zgZ24`4GG$(QT5xi@A7Ge=pkHu>;$1)mst@{5TSEVjTw@;B5yP;`_Z@F*W@GBh?SM_ zeQneGCnGX7+b7VOMx(V|qyR@}Y6pg6-l^VM9jqVG3BG}sj|NMusa-|d%P0+1@V&nZ zqIEX+W0M<_=*M3WGuBj144xKX_^sA*8~M#Bf!*E5?Wo@~Py|GM~#Po_I) zy)Q9d=(w!;D#$GbC-v@)s?_3cT&<$Le2jeff%w_FL+|EPo?r0x%|`5(d0y0;OQsag z7h2h|yJ4hjkjJ(zvyy~3hUkMasLN}^{FtEoHyS&q4H8ehtCl<%dkrrxEsfi7cPh0=LiwaGr)K=T|TKUzhiM5}zgjhE0N-%VXRV_@3W*x2$V%ZgLb zh##m=Xhh3W<%IvZr?BYNdy&gCw5|mfAFvxQ)Nn7~4q~rA%AY!5Jm^I?IGrdty+l?c zBJw`l^*|hU*iZOPCPvnz!SeXyKT6mAw|qY~r+0$$a!NEAd|O>YJPA*@Jk6{%Y*)J*59P*R?VbBF9D}^H zkSW#8B|FzcrINlaw=NO}pUnThbN}wM8AE>DUD-p*Zd61YHvs|M3*8_(q>bBA9H=`D zit)k3dYC3?(}y1TC^)Eoy0>jN*w>>*0a=}w?*^PLgwcqdtwRu zw|t4}!po|@dOOY(r;LAku@CO{oXgK^g%WkMMDdxMx*p}V*48}*UCb#dR!tpy3p8;p z@|-kxD(C(%uSBmRh)nxO9>6yZ!U1i5i|DAEDy`l?VWV+`*wfXK*G*)a_8%#Et;7<| z#_M(<_CLzIQe_ix2m>=ZH)pQIl@L(hkX2cFZjnH1+)nz7;vS3F)gNBnU3xg8?YeSM@&Bk6N zIKc%LVt1hQn`~Kb_cvLb>GvC_S?ska9B`C z;u<2L`mFKEd6Qkw?A_Qt`7(1{znhRt+Wc%vfvW)h{}V%&sSqKdl^YDQGR89GRM3U>DJO<@^s4Q@kMZjTOKI5J;aH5-$LC)fo$fy3&FAgDMK163tRTqn zX>MaHtS?w%dDPQ|}JCsZ#!o`AaW<;>5})3JA? zd{7Jhi!F)DST60qaF^hUW1k&Hj9Iv;0EPuW0O5UMZOaZe{T73rL%CK&jZ7%>|{ba7CA!VY&?QyqSaDOQO%26_##x-w=8C zsX|C+t6Coj*r32pX-!KkU^Qssdm^Cxv#$iUC7*jN7GN_)d&I#TFfKLeKW8Z1@T31s z=;!~P&F;0T7C2E-(Fd~@me2nSZn90sWZP`PCaIyQ0+>{q%-v%cy+42F@{7toR zb{H*DeE~+h!Dd-HSDDLwFEbS7mS!Q;A#aZ?;^Yl;x>4UB^F_gsb=|E9@_v5zD78Zm zqH>SE7R_$=v~~omR~A{@p8^wMr*virx7i|VUsb3)TZk_xg}lcKCzTQ+I#YxB#)QxZ zoWi40fUwa01y=#;`-^w8az|o)?|06Aivjhd zoV<>0Vry5n-74g4%0;VVZ+dASoewn`MQVcCUAP=;0@8-QG*5&yn9Femwx`mk#kHuE zT|S|83v(0*BqLvC6?Zh5;ouX%^H$V_=im$^K-*mPttE!}vrVmMw-d!Tt=UO!GCSne8*(C1Fr`c@Ze&dQ7zX}Gc6Mr9>hvB2HHog7lbd#BM2 zfY><+Km!n^7gWuA0??6%Qj8FQQn!J9-Vi8Gb+E1etpUFEjgOVK656$&I4RLyT-QpY zfzu+2WC`P~!MF7VG_s_&oa&m!J>JEYkF`B(aCD0t*c;IH@uBTg=)2r{&nhSBOn-O* z6s=Z$GT{!T4lLW?8sGw#$i2_EYAd*zkRIufc;g4ZOYp;0F-mK^^>N2A5JG%;n9cM? zf|+451Qu#5)9S>~U~7{Jrv9ivD1^|K6KX(_q?1b|q$h7sGuNj&FDeG(pCy(aETV zk+^VjRn4a^)tf&zEwgg`x$bngz0|H&r<&G#nxa5aASyDDHfNAstT|CLH8yfyVc%*a zrSX#}cA9ZoUxrwhw+zX2-Qjj~mlNOg68LC-BWxxw?p4!tPlTBE8j>1Y3{^+0E0vP~ zHH`A=W4Q7cLrYTT^(^FNsZgs>Eoor9ne11cWG3*r`D@N==t=* zK}e&JE1iPSdB)E>><$A{tmjh#eMnjr)&)CSA{(x|d2l;5=B9h9^=Ls=gA1?3XJyIf zpHd^Sf5@lk5zE`{Z(a)Gwbtq~48!=nwMUNaI7U3evmvTBETgB&#Y`^?G=yABxK#V} zL&62G#O@mD+uIwT(=3xj`~Xf4>w~brwrx0&hVAwk@O{9ln@xJp>S|`U1^n{-zsY!D zzcx#Nvea!eNcOP{5hbk)>V*#+2HeO+N{{^;w!#0CbMRm6xe7NHK@3$1{B!95BHkvH4R&{?EV9- zI2~J&#x+1Cj*b>+1e6)qMtz*Oh4w@OxrHUAEi2OXan;d6zON4ivQICit(J>dEuiG>VFH`-SGW3I!jzgB=F9O z;RANFiZ>H_-b{@Tm}{@~9^TicH7~vxLVhGG0sXe%c~#x7a)YY}-XqK>h9l-_;|_^w zS&8+2^~bX&Is(t<_#X%ejqP;AG9|Xt4NCR2T^=XeyPQbybUWcYBr?C^5?>8n?-0!PrpBt=5OJVPkxGV~cDco?W+ z9W8b?9PO4&TB%{K#k)o2?pr=%iJrCBy5_#zB#<#5eH_+eQWUdQNelL?ms=^(-RW+u zeUgjx20AvkDRbr9CBzp!du{yg<5~;WKCPsCYj{v*Uw=@{`)Ov<6k@E$Gw)mB84Bq9 z+fng*Hde$Ngt(&3206F3KqH=dG}Wix-({bbn>%O7*?IBhRxFFhPaX8wJfy7SGM|$EJdf2i+ zKOc*nYLM2V9628|B_Nwf^ET6b3NoVN*4C9rN~Pk%ZA?%YK^ebj*gV#D6|&RU%`^$v zg6*GZLabIicF42MJg!LT#&&s2MV4Ia0lj(PlS3}?cU1&9Lk}#>+*a;9lc>br5NZ}c;qtyPGJ&LyFD`p-CR%*87e817 zjWTNk*2|rj&o=UWm7)!D&Gtp_)oh80ClEg2J+TcPD2Cr;okjq!R0&XGkC3ci&os?Q zFDeVf-Sg+>+13!@K@ZPSpq%aKh(6~PNF#4t|AGVwHJ=W<@Jq(5r81{3`fNKfipT0< zS^fPma`(3h@3L-u9J7QQ-H=NMBLJ#m_bEf9I^Jnq)d zk;4{WMiD6Inb)d%?IJxlvKU4t1@_zp89{Zk%hlf3$+NO01H3U2;up+S+j7E>hE`m* zD|WCcR%X;HF8q#B(c$E8mvxNk8J^QYDBsu4uq`eix|PM@As|I=N z7%VINI#T-jL&XM*U>Pj6A_Q7Av?Xb@1}U9Cf0-Wmk*wBz=Ztyu-#aShBPaN~0Tezqj5tJmL1^q~U1&BB zk|m_AzdRlK%}epY*oAPvo740MipsyNOVO&mC39{{W}mzroQmf<+~x8_Lw-60wY|yF z^LI78R7FiQ7WSNyk`IQ9=^|Z5yO+1gL;N1%Ws`rC#mJ<;UN74`PJJoS z!P#bDv7nIg69;om{ttKg=jY#_n8!e3bkOA_wJDn?8*MknJcMus9hW;LgkFTG)fZls zXDXf?E|UvL+c#ubGY8~qltjv)5}Qq~^R_(v1zGni8{!NSRBcFlc2`Z#Y&H2$;*whZ z?{tQSCb+^*vu$>4rsU~<4M`8Fx=H^vDfJC0RIttltA&mL^+ATwE}(QoWjKAyQqy7Z zcoyX3$6NjFa;wu{K2>7w*JU^!>|kVu0DamxFw%fT6#g~9{IB{q^klwO7p-X+rPR8) z-S7qPTkR!!@EBvbCcZj`V@oY0z;1Lt`$Em^KkPX%p=|y+_=v!X}RbF@{VoKw-Mk`5a`Vl zI6FT%$PyVLLUCQlI{s}^h})VM(@N^$FZ|l~{?i?Qz62nfe?olbIj;&BxIHCg=GiE@ z^fPN#sb6~kmB`p=O7DfPBo|>_o4aB%;0fwm;W&mg6Fte8o5JZe@9_kNh*y5WRldt# zM+ewO6yD442vlh>fjNC{kWh(hTK;aoDv}s@Jot*~jMJv{4Z zHrF3pTdNH2U$8g5a^cdwT6%VL+Mwn@gLu|G?~2Vfz*0LDXex3GzMV*g!d}-`JGOk1 zMxtVty=ui!6E-C|@<=C^n9oSRF@`feM@6Zq2Ua+fZj2+f3V%UW=DZ|Q&ZEsWMm(C4?%ap z{)7Tov>ndC=B}nLz}%InG>R~FuE_hqbTDP@j2~P^!GT58d9?g1R3wmrC|+nJR#z4K zBr0)Lb$AN-)jQ+OLR-mbFef3HAaZZlTr)-ke!q!+kjA>bDl%R84kyhG5;N8C z(8nUPi2upleb05-wV zDg|ZEZM}EHbGl#c@`gB`?y$CYPQg5pOh`^z-;;D(_fNYS-qAp85l@r*?d&m>hL8R1 zHXiENoaCDAIJFu_v*n2z>Kk14@0Dm;^!1u;1z5ZnNi2jK>~c{joS7hCFh&%8c2RDk z+2@A~+r=o~UZZdOtRHD9=~@sfX+s3{GX)|ufsS{CC`^OAs} zv`U!w(9Ex4SKW-1Oc^5ipsJw&L2=%bdSkBM4%pOjyQcBh&DQ0C;qFB<11*?wp_+lL zCo1A{QUqETng&kX zQn`QeWq}jIJM74|)k)E#g~fBnV~u2_9xVC}>&rJ__?@?!a;bsM@yCJw_Vu_h9Q0$o zSbt3L7)-?1Z@w=wd`t!^4y-?L1s}m8o zAqV7Bu2HUpaB3`(8N1rL$xJ@FF6}A#5S;@w7Y@xiK5+aBUrT;@-=a-uVf@vk`&4>F z^|9<6OVcuR{o4rR&%G#kTVO1yqNu5&3QM(^bu9$EI#%gtBi~v2%yh30?p%r=*D=Y| ze+#?bzNFC-JM}#%GjWFFe!blLsL`ehXv)@M&hZ78!L4MqPn{c{)7t|G{JB0Eju;ig z9+vcjS}DpSOkQR$oQ28iJc&e~par?-PP>@6Wv=(<%#-sJ zmRqLzsS5F6Zo+`B)K(`JyVZ>Zzy?%sz8NPT+Ek5RfB(>0 zy8*(Z)v)`1vx3n^o->Fww5G%eCs%nWdr!MK_LK>)#~oqqcwoIFN|+kBx<9*1S1oj0 z()4LOFtoYc?Voi=buuiyysPF`Z|;|40uQ>Z4Y!Gj7#1cUI&?_&6gE+kqm0Vl@bI1A zW##UpC8f({4lg{cZ=GblHsf*3mdHUDqq%{U0GrBTwBXFLs!)WgVz3$ei{NCH_E@Bf ziMUr-ddH`A+3eE1bmwXNnjmEnNzIfM7@^A2z9nl}t5zO41Tflv+^@}&tRt+wN6mzLo4 zsKRIV!Iqn+t-f^>Bguu@({J-hX4HS%J)GV2FzlbS;a)fjF?2HQE zHVp|2m9M$p=SZO-#`qBm2hV{D{6`Q5!yulH3K(j$3u@y|*6vvCeO6tqrZFnaf2Z0ZGQc`MPL z$@C^Er;fSePS-nk5d9@x#h6x7ED|92YnKL58tmIMW19*s3S51~Qj^Tv3%ZV>l5Gvm z@{&(N`Ub7!(-SSxE#0U3;fz=GGT^0oswiv+ZXN*JKE7NQxZ62SoMz{lv=h zv#8c-1gxl|aoRXRn(vPB7X#0HlyBzWXPz#8lLHY{EtPBOrBWh)h%Kz8;N{}4BTgfg&NWsW zq#$`w!slrMZ|P=0#@qM4r9MI zfv_t33Wee zmJLIg8@nqIP2Uu@AQK9}wtf`#~cXU~d z(3$IbB+J_`d~v{MB)?-^Z|p?a)bUA26R#QW8IaA64w@mw!H&=#Q2Hflcng4;>^*B~ z_Bk?tN|yKigphDhD%Y`FdFd!fX6DkE&mOTi_~mlfK+b}3lqYi#4qU}>E@FIv(Uk!* zhGwRI5R^$F%Z$86-Avt_Vz2H|Y3w{N!WKCyxJg>!$)!6t(oPF^!m+NZ!`dV4O0X?y`C2+eeY#qBcSl_BDMZWOqS(;`Mm!=X8bR7^C9KwCX5GY zj{R#tB$b9Mk;0%P1yu)2AzT`=Y^Z)Rd6i90oc~)nTY$sdm(GPb_UB6Zd!Ncc>I`w0 zgEkBD1+0ESj1tP*e?jW3=5{l!nWv(>$^EMm`>f0XT>1IQr6?uf#Ry&f4>`1HZtREh zD_hU6Ap$30*9*Rruhxz(LRXRjp{`leW;i$f8sjCX9@vzCIZQW`-WMX^4|^=_88^O% za4B`W-EJ#Hmq}M-n<{x{k1n>oHcLL1AnL&T$;3!9wuZ!l7N_|Eb@ro`m^fE~a$p&i z=}@d~;bI`-FaMI2MWY&8mvT-d*27jkW~!zjjhvH9mK0^YZB(T5P-7nh<=cG&n^|Td z-5t;3n6fwSKmPOUg2MOc4IRoXG*w>Pup3WN;jezDRl2y9u^d?171q(Xz;SMYDXS%OW0`>Yv}wl zb3Im0-+%t}5^(I?_ghDXzZYsk_TK#sc$+*2e+Ld+D(^z$U~)8tmPRS+$P0?4-%8j? zTGQp10xLs^=RGkTC*FkE&7P)IH<2UgU>2VX0u-_V7}`|ig+<%PwTV?P4X_8buRYB& zjWoUm2O5}1LHHL;Bhq!@^Z@K%b_<-CMPD!l6~{4kZMMQmADQ#^Rd{;Oy8e>#eULP{ z4&a%wM0y(7b3Gf3Y2BfLB$V^^Of!()N3DesopzyBkz)IoOym5W(qg8;`YRvHcY@gFnQoV z0wg((`>9^Po?p!I+b}5mMIu`<4kLGEKq6!3;$B1GcT5nEzt!%u>9DW%tiO-{9^XjU z>J9jZxc`s;KOWC-0simAfA}{_$fy7Ewk|e#74BQww=vbfuE_oLCmJC0t+-Z|Yjw@8 zf-uWRnP@GC>pw2$hz0l%YQ@NSQG2X%;{tKOSa3$N#=aY@s{|`>Tp`3*WaW0syVH%L z%T%96Sr6nE^VnAx|F!e8>mpOL9vm^=Udu=adoJn_c@i$fRmKiQyeBEOGeuj8x^9uaolvPyD|+cj?zB5 zu~v-%DlZAL-u=g4yiy5bEbTZ#ekXPOovxMP?LtifUqX~syjO*SjIk~sO}7Y~=U7B! zKug4D%s=oU+x=q?$iW}_CM;-8>&Yf_@NLJvfW|AJ@0gbWp7|*}Fglz0vt?R(bW@RK zNmN_$d&>?3AQmh_{sp!k>zvitAxtYAkM^ZGN11`f3f{=7(!~7?fr=obuAA$rqr)K^ z#1&91j6ZNfYr6nwno6)Bar#*w=?w@T{po;d{>r&m@V952!)zF_bCQx&{OWO_He_Sr z3sc3{@v9A{U;nJR-h4GA{JO5pGSc3@yHO&T=Kl-Au0Rb))71DzzebC6D{5s3MVeYX zB_y369wDi3YHvOLmxL_P1fYw-!Q@n+7Jt2^4QEFMZ00tORW$xOyKsV9@1ar`Rm~-GB;hLke`v`$WkNc@G8LV)3}j zo1Ydm@Few9#K{Na^}5^av_yg*iDNB_hqgU~X$=E{Y#z5{ZmM)ebOo4yn@rkpPiMC- zj@peMzXyBq&wqJ0(@nYkRf_W;acOBbTc1gf;Dqd2%{*xWQlm&mPe1E-Spen9aka`kbmwJBtK_-6*-Hvv@z_->y<9HUL+RfiTd*|Tk zI5N`Ve_qk!f4Z&$t-y!AI7jvTf=JY#-uJnoQ;y?Y>fw3FRCIDOLF%Zr+}t|%>J9*F zckdD07`Xi*IWqAo^Ekkar+ntH2D;*d>mn@>!vv4AhVmNA0V}oy+kv=SSJDgxe8S&l z5q@N3j$k9%S7YdWQ;w4@QYd`P*OO*RdY+zA(RxzD1vLCje?ka$>;Xl)X{CW0cucPYe>&1~lSETEt z&e%-M!K>Jym4gU92)`jQ1MW4&(GIV`cZw4yE>q;=!|Lg`1s182wuPbp}$US zdGWv6yZ>E?Q~!A#dh3a}KMX+or)Du?o7JN|mGGSSLgTVO4G`Q9)+`0K5WE{jXQ0+* za5b9gta=B}7~XLR#>X5!^N=Y+^9fOMKwYM!n{=(Ty$KC(-EhC9A#^j!LSwr-i6q@t#FD_Oew2@481E_{>JlDOhZdhPU2R{jnDlOK=Z-{{y5TWrW=> z8rc!rP)V~8=Pt}sJpKfj#Y{x3eL69HFKNZ)!x#vuV8&S{U!>^^q-ou4MCRWx|2Iah>Rc$sX>qB?W5S z`KJvQBvAQiEj--T;WyXf;svm_ejOUeIn##;=W+^<%fvtLf#@ z2C-@VM)ywk7Ti56LkUdm!{?#l<=8fu8ueHX^x37xVgE{wlA$*>(PaOHWLudJ9_>k} zZmB}nl&2i43RDhz0D3P3K^MFxN0k_^x7McIgO~fuzPPTd)-HMF5hpHU}DG zs?Lxe<{aNwk3(zbI)6h!$wQWGXFk8Gy;ooR#M~=OrD#y6`)YP7LiX{s>ji%Z->cs`vpHSseM?@Ctci~R$U~@20?uUDb-lCAM~Dq zb|I?j7sRB#ekj=G%XjWVxiP`H|?$cpI!A2fES33~nudmLBYB&CHBU z`6M2wbVaEDAPk44&*7Dzy2I; z=1`+lv;^U}-N&Jvi?*Z{QaM^{t15x@<|sjdabMwZm+ac6N5$?{A2P<>kEXv*=ziYO z;H=oJ5NN33r?g``iq@JjqYIOvl1ngIDlt(ecETdz7i5LVNRXV?l$}$3jrFWoe1W-} z-e-H>^Q*lCAk*asXw3x15YV1sVfmq?|qX&Etkhl2C$GlYl!d_5Dt9Cs^y8ncY4~dj=Hh;>wV# ziWDq|lX0)>QL4T~#JTY^#=KctPKs-vTx#-1XYs33K=0kZ%(gtH#JlWlZmSW2Wh8rv zJ|TI;`%YxS=tu=9{{+GwE#{4o#kCUp6`-q~6syHAIMk7IxUPC^IX9P zQLU#Q8#8k0hq!T}`m5KKMV-b>Z`qWuCT!o8LD;;0Dmc($XD7-g`6}UOlR#7-w49Wb zgQ&L$bekP31{pt!>H0phAGY{Kc39UALqak+lF{On3LY{>XmPwXE%l~4rG_n>p5zD8 z9Y!%T+3-@`N7>!^Xx2e#*#*Wy=Jv-ZyPr};7+NUD3KB{WM{5nMo;AP;`sP7jw!Gpg z_#yiAN;xk?RCe<~qYYRN#_UV?>GY71{AJsARIfLN^!Wm?&S1-DB)m;U+y;KyXFnLU z;zwrxf_!)W!tph%@gxwNg5)<1Y-JY@Mr1e@0mExWqE!?bAqg19jh4w7b!pS%gH9nls~V)8p{FqBDX z))}6IpswN5xce|DDtzetms6!uU&%)gM?M|^QFeLy|jA`6vi^9rR z7iQOyc^xq|hZRwS$%UWurKePtFP1RgZHfjHW0T1zu+dwdsgXH-n);DtJ%RM_kF!#& zJ0*AZ`nA`CtvNE7Lum+I@N|yfnEU41{70qyZiUrUfc-X7cvFAXsTCT)EwH0NUO6qusC=j;Mm5c!awzTGo2Lod$D}>V{jFKNRPG?O z=Sc?)G~d!5&pcg-rQ7DcozE)pi;@x;pX>~^V#_29DYh&Xz0r^ -1 { _client.Del(_ctx, _WorkerIdValueKeyPrefix+strconv.Itoa(int(value))) } } + _workerIdList = []int32{} _workerIdLock.Unlock() @@ -76,25 +96,30 @@ func UnRegister() { func autoUnRegister() { // 如果当前已注册过 WorkerId,则先注销,并终止先前的自动续期线程 if len(_workerIdList) > 0 { - UnRegister() + //UnRegister() + myUnRegister() } } -func RegisterMany(ip string, port int32, password string, maxWorkerId int32, totalCount int32, database int) []int32 { - if maxWorkerId < 0 { +func RegisterMany(conf RegisterConf) []int32 { + if conf.MaxWorkerId < 0 || conf.MinWorkerId > conf.MaxWorkerId { return []int32{-2} } - if totalCount < 1 { + if conf.TotalCount < 1 { return []int32{-1} + } else if conf.TotalCount == 0 { + conf.TotalCount = 1 } - autoUnRegister() + _MaxWorkerId = conf.MaxWorkerId + _MinWorkerId = conf.MinWorkerId + _RedisConnString = conf.Address + _RedisPassword = conf.Password + _RedisDB = conf.DB + _RedisMasterName = conf.MasterName + _WorkerIdLifeTimeSeconds = conf.LifeTimeSeconds - _MaxWorkerId = maxWorkerId - _RedisConnString = ip + ":" + strconv.Itoa(int(port)) - _RedisPassword = password - _Database = database _client = newRedisClient() if _client == nil { return []int32{-1} @@ -104,18 +129,21 @@ func RegisterMany(ip string, port int32, password string, maxWorkerId int32, tot _ = _client.Close() } }() - // _, err := _client.Ping(_ctx).Result() - // if err != nil { + + autoUnRegister() + + //_, err := _client.Ping(_ctx).Result() + //if err != nil { // //panic("init redis error") // return []int{-3} - // } else { + //} else { // if _Log { // fmt.Println("init redis ok") // } - // } + //} _lifeIndex++ - _workerIdList = make([]int32, totalCount) + _workerIdList = make([]int32, conf.TotalCount) for key := range _workerIdList { _workerIdList[key] = -1 // 全部初始化-1 } @@ -125,7 +153,7 @@ func RegisterMany(ip string, port int32, password string, maxWorkerId int32, tot id := register(_lifeIndex) if id > -1 { useExtendFunc = true - _workerIdList[key] = id // = append(_workerIdList, id) + _workerIdList[key] = id //= append(_workerIdList, id) } else { break } @@ -138,20 +166,20 @@ func RegisterMany(ip string, port int32, password string, maxWorkerId int32, tot return _workerIdList } -// export RegisterOne -// 注册一个 WorkerId,会先注销所有本机已注册的记录 -func RegisterOne(ip string, port int32, password string, maxWorkerId int32, database int) int32 { - if maxWorkerId < 0 { +func RegisterOne(conf RegisterConf) int32 { + if conf.MaxWorkerId < 0 || conf.MinWorkerId > conf.MaxWorkerId { return -2 } - autoUnRegister() - - _MaxWorkerId = maxWorkerId - _RedisConnString = ip + ":" + strconv.Itoa(int(port)) - _RedisPassword = password + _MaxWorkerId = conf.MaxWorkerId + _MinWorkerId = conf.MinWorkerId + _RedisConnString = conf.Address + _RedisPassword = conf.Password + _RedisDB = conf.DB + _RedisMasterName = conf.MasterName + _WorkerIdLifeTimeSeconds = conf.LifeTimeSeconds _loopCount = 0 - _Database = database + _client = newRedisClient() if _client == nil { return -3 @@ -161,15 +189,17 @@ func RegisterOne(ip string, port int32, password string, maxWorkerId int32, data _ = _client.Close() } }() - // _, err := _client.Ping(_ctx).Result() - // if err != nil { + //_, err := _client.Ping(_ctx).Result() + //if err != nil { // // panic("init redis error") // return -3 - // } else { + //} else { // if _Log { // fmt.Println("init redis ok") // } - // } + //} + + autoUnRegister() _lifeIndex++ var id = register(_lifeIndex) @@ -181,24 +211,26 @@ func RegisterOne(ip string, port int32, password string, maxWorkerId int32, data return id } -func register(lifeTime int) int32 { +func register(lifeTime int32) int32 { _loopCount = 0 return getNextWorkerId(lifeTime) } -func newRedisClient() *redis.Client { - return redis.NewClient(&redis.Options{ - Addr: _RedisConnString, - Password: _RedisPassword, - DB: _Database, - // PoolSize: 1000, - // ReadTimeout: time.Millisecond * time.Duration(100), - // WriteTimeout: time.Millisecond * time.Duration(100), - // IdleTimeout: time.Second * time.Duration(60), +func newRedisClient() redis.UniversalClient { + client := redis.NewUniversalClient(&redis.UniversalOptions{ + Addrs: strings.Split(_RedisConnString, ","), + Password: _RedisPassword, + DB: _RedisDB, + MasterName: _RedisMasterName, + //PoolSize: 1000, + //ReadTimeout: time.Millisecond * time.Duration(100), + //WriteTimeout: time.Millisecond * time.Duration(100), + //IdleTimeout: time.Second * time.Duration(60), }) + return client } -func getNextWorkerId(lifeTime int) int32 { +func getNextWorkerId(lifeTime int32) int32 { // 获取当前 WorkerIdIndex r, err := _client.Incr(_ctx, _WorkerIdIndexKey).Result() if err != nil { @@ -206,6 +238,13 @@ func getNextWorkerId(lifeTime int) int32 { } candidateId := int32(r) + + // 设置最小值 + if candidateId < _MinWorkerId { + candidateId = _MinWorkerId + setWorkerIdIndex(_MinWorkerId) + } + if _Log { fmt.Println("Begin candidateId:" + strconv.Itoa(int(candidateId))) } @@ -214,7 +253,8 @@ func getNextWorkerId(lifeTime int) int32 { if candidateId > _MaxWorkerId { if canReset() { // 当前应用获得重置 WorkerIdIndex 的权限 - setWorkerIdIndex(-1) + //setWorkerIdIndex(-1) + setWorkerIdIndex(_MinWorkerId - 1) endReset() // 此步有可能不被执行? _loopCount++ @@ -272,7 +312,7 @@ func getNextWorkerId(lifeTime int) int32 { } } -func extendLifeTime(lifeIndex int) { +func extendLifeTime(lifeIndex int32) { // 获取到可用 WorkerId 后,启用新线程,每隔 1/3个 _WorkerIdLifeTimeSeconds 时间,向服务器续期(延长一次 LifeTime) var myLifeIndex = lifeIndex @@ -284,6 +324,7 @@ func extendLifeTime(lifeIndex int) { _workerIdLock.Lock() // 如果临时变量 myLifeIndex 不等于 全局变量 _lifeIndex,表明全局状态被修改,当前线程可终止,不应继续操作 redis + // 还应主动释放 redis 键值缓存 if myLifeIndex != _lifeIndex { break } @@ -304,7 +345,7 @@ func extendLifeTime(lifeIndex int) { } } -func extendWorkerIdLifeTime(lifeIndex int, workerId int32) { +func extendWorkerIdLifeTime(lifeIndex int32, workerId int32) { var myLifeIndex = lifeIndex var myWorkerId = workerId @@ -321,9 +362,9 @@ func extendWorkerIdLifeTime(lifeIndex int, workerId int32) { } // 已经被注销,则终止(此步是上一步的二次验证) - // if _usingWorkerId < 0 { + //if _usingWorkerId < 0 { // break - // } + //} // 延长 redis 数据有效期 extendWorkerIdFlag(myWorkerId) @@ -340,11 +381,19 @@ func get(key string) (string, bool) { return r, true } +func del(key string) (int64, bool) { + r, err := _client.Del(_ctx, key).Result() + if err != nil { + return 0, false + } + return r, true +} + func set(key string, val string, expTime int32) { _client.Set(_ctx, key, val, time.Duration(expTime)*time.Second) } -func setWorkerIdIndex(val int) { +func setWorkerIdIndex(val int32) { _client.Set(_ctx, _WorkerIdIndexKey, val, 0) } diff --git a/regworkerid/regworkerid/reghelper.go b/regworkerid/regworkerid/reghelper.go deleted file mode 100644 index a68c4b5..0000000 --- a/regworkerid/regworkerid/reghelper.go +++ /dev/null @@ -1,415 +0,0 @@ -package regworkerid - -import ( - "context" - "fmt" - "github.com/go-redis/redis/v8" - "strconv" - "strings" - "sync" - "time" -) - -var _client redis.UniversalClient -var _ctx = context.Background() -var _workerIdLock sync.Mutex - -var _workerIdList []int32 // 当前已注册的WorkerId -var _loopCount = 0 // 循环数量 -var _lifeIndex = -1 // WorkerId本地生命时序(本地多次注册时,生命时序会不同) -var _token = -1 // WorkerId远程注册时用的token,将存储在 IdGen:WorkerId:Value:xx 的值中(本功能暂未启用) - -var _WorkerIdLifeTimeSeconds = 15 // IdGen:WorkerId:Value:xx 的值在 redis 中的有效期(单位秒,最好是3的整数倍) -var _MaxLoopCount = 10 // 最大循环次数(无可用WorkerId时循环查找) -var _SleepMillisecondEveryLoop = 200 // 每次循环后,暂停时间 -var _MaxWorkerId int32 = 0 // 最大WorkerId值,超过此值从0开始 - -var _RedisConnString = "" -var _RedisPassword = "" -var _RedisDB = 0 -var _RedisMasterName = "" - -const _WorkerIdIndexKey string = "IdGen:WorkerId:Index" // redis 中的key -const _WorkerIdValueKeyPrefix string = "IdGen:WorkerId:Value:" // redis 中的key -const _WorkerIdFlag = "Y" // IdGen:WorkerId:Value:xx 的值(将来可用 _token 替代) -const _Log = false // 是否输出日志 - -type RegisterConf struct { - Address string // 注意:哨兵模式下,这里传入的是 Sentinel 节点,不是 Redis 节点 - Password string - DB int - MasterName string // 注意:哨兵模式下,这里必须传入 Sentinel 服务名称 - MaxWorkerId int32 - TotalCount int32 // 注意:仅对 RegisterMany 生效 -} - -func Validate(workerId int32) int32 { - for _, value := range _workerIdList { - if value == workerId { - return 1 - } - } - - return 0 - - //if workerId == _usingWorkerId { - // return 0 - //} else { - // return -1 - //} -} - -func UnRegister() { - _workerIdLock.Lock() - - _lifeIndex = -1 - for _, value := range _workerIdList { - if value > -1 { - _client.Del(_ctx, _WorkerIdValueKeyPrefix+strconv.Itoa(int(value))) - } - } - _workerIdList = []int32{} - - _workerIdLock.Unlock() -} - -func autoUnRegister() { - // 如果当前已注册过 WorkerId,则先注销,并终止先前的自动续期线程 - if len(_workerIdList) > 0 { - UnRegister() - } -} - -func RegisterMany(conf RegisterConf) []int32 { - if conf.MaxWorkerId < 0 { - return []int32{-2} - } - - if conf.TotalCount < 1 { - return []int32{-1} - } else if conf.TotalCount == 0 { - conf.TotalCount = 1 - } - - autoUnRegister() - - _MaxWorkerId = conf.MaxWorkerId - _RedisConnString = conf.Address - _RedisPassword = conf.Password - _RedisDB = conf.DB - _RedisMasterName = conf.MasterName - _client = newRedisClient() - if _client == nil { - return []int32{-1} - } - defer func() { - if _client != nil { - _ = _client.Close() - } - }() - //_, err := _client.Ping(_ctx).Result() - //if err != nil { - // //panic("init redis error") - // return []int{-3} - //} else { - // if _Log { - // fmt.Println("init redis ok") - // } - //} - - _lifeIndex++ - _workerIdList = make([]int32, conf.TotalCount) - for key := range _workerIdList { - _workerIdList[key] = -1 // 全部初始化-1 - } - - useExtendFunc := false - for key := range _workerIdList { - id := register(_lifeIndex) - if id > -1 { - useExtendFunc = true - _workerIdList[key] = id //= append(_workerIdList, id) - } else { - break - } - } - - if useExtendFunc { - go extendLifeTime(_lifeIndex) - } - - return _workerIdList -} - -func RegisterOne(conf RegisterConf) int32 { - if conf.MaxWorkerId < 0 { - return -2 - } - - autoUnRegister() - - _MaxWorkerId = conf.MaxWorkerId - _RedisConnString = conf.Address - _RedisPassword = conf.Password - _RedisDB = conf.DB - _RedisMasterName = conf.MasterName - _loopCount = 0 - _client = newRedisClient() - if _client == nil { - return -3 - } - defer func() { - if _client != nil { - _ = _client.Close() - } - }() - //_, err := _client.Ping(_ctx).Result() - //if err != nil { - // // panic("init redis error") - // return -3 - //} else { - // if _Log { - // fmt.Println("init redis ok") - // } - //} - - _lifeIndex++ - var id = register(_lifeIndex) - if id > -1 { - _workerIdList = []int32{id} - go extendLifeTime(_lifeIndex) - } - - return id -} - -func register(lifeTime int) int32 { - _loopCount = 0 - return getNextWorkerId(lifeTime) -} - -func newRedisClient() redis.UniversalClient { - client := redis.NewUniversalClient(&redis.UniversalOptions{ - Addrs: strings.Split(_RedisConnString, ","), - Password: _RedisPassword, - DB: _RedisDB, - MasterName: _RedisMasterName, - //PoolSize: 1000, - //ReadTimeout: time.Millisecond * time.Duration(100), - //WriteTimeout: time.Millisecond * time.Duration(100), - //IdleTimeout: time.Second * time.Duration(60), - }) - return client -} - -func getNextWorkerId(lifeTime int) int32 { - // 获取当前 WorkerIdIndex - r, err := _client.Incr(_ctx, _WorkerIdIndexKey).Result() - if err != nil { - return -1 - } - - candidateId := int32(r) - if _Log { - fmt.Println("Begin candidateId:" + strconv.Itoa(int(candidateId))) - } - - // 如果 candidateId 大于最大值,则重置 - if candidateId > _MaxWorkerId { - if canReset() { - // 当前应用获得重置 WorkerIdIndex 的权限 - setWorkerIdIndex(-1) - endReset() // 此步有可能不被执行? - _loopCount++ - - // 超过一定次数,直接终止操作 - if _loopCount > _MaxLoopCount { - _loopCount = 0 - - // 返回错误 - return -1 - } - - // 每次一个大循环后,暂停一些时间 - time.Sleep(time.Duration(_SleepMillisecondEveryLoop*_loopCount) * time.Millisecond) - - if _Log { - fmt.Println("canReset loop") - } - - return getNextWorkerId(lifeTime) - } else { - // 如果有其它应用正在编辑,则本应用暂停200ms后,再继续 - time.Sleep(time.Duration(200) * time.Millisecond) - - if _Log { - fmt.Println("not canReset loop") - } - - return getNextWorkerId(lifeTime) - } - } - - if _Log { - fmt.Println("candidateId:" + strconv.Itoa(int(candidateId))) - } - - if isAvailable(candidateId) { - if _Log { - fmt.Println("AA: isAvailable:" + strconv.Itoa(int(candidateId))) - } - - // 最新获得的 WorkerIdIndex,在 redis 中是可用状态 - setWorkerIdFlag(candidateId) - _loopCount = 0 - - // 获取到可用 WorkerId 后,启用新线程,每隔 1/3个 _WorkerIdLifeTimeSeconds 时间,向服务器续期(延长一次 LifeTime) - // go extendWorkerIdLifeTime(lifeTime, candidateId) - - return candidateId - } else { - if _Log { - fmt.Println("BB: not isAvailable:" + strconv.Itoa(int(candidateId))) - } - // 最新获得的 WorkerIdIndex,在 redis 中是不可用状态,则继续下一个 WorkerIdIndex - return getNextWorkerId(lifeTime) - } -} - -func extendLifeTime(lifeIndex int) { - // 获取到可用 WorkerId 后,启用新线程,每隔 1/3个 _WorkerIdLifeTimeSeconds 时间,向服务器续期(延长一次 LifeTime) - var myLifeIndex = lifeIndex - - // 循环操作:间隔一定时间,刷新 WorkerId 在 redis 中的有效时间。 - for { - time.Sleep(time.Duration(_WorkerIdLifeTimeSeconds/3) * time.Second) - - // 上锁操作,防止跟 UnRegister 操作重叠 - _workerIdLock.Lock() - - // 如果临时变量 myLifeIndex 不等于 全局变量 _lifeIndex,表明全局状态被修改,当前线程可终止,不应继续操作 redis - if myLifeIndex != _lifeIndex { - break - } - - // 已经被注销,则终止(此步是上一步的二次验证) - if len(_workerIdList) < 1 { - break - } - - // 延长 redis 数据有效期 - for _, value := range _workerIdList { - if value > -1 { - extendWorkerIdFlag(value) - } - } - - _workerIdLock.Unlock() - } -} - -func extendWorkerIdLifeTime(lifeIndex int, workerId int32) { - var myLifeIndex = lifeIndex - var myWorkerId = workerId - - // 循环操作:间隔一定时间,刷新 WorkerId 在 redis 中的有效时间。 - for { - time.Sleep(time.Duration(_WorkerIdLifeTimeSeconds/3) * time.Second) - - // 上锁操作,防止跟 UnRegister 操作重叠 - _workerIdLock.Lock() - - // 如果临时变量 myLifeIndex 不等于 全局变量 _lifeIndex,表明全局状态被修改,当前线程可终止,不应继续操作 redis - if myLifeIndex != _lifeIndex { - break - } - - // 已经被注销,则终止(此步是上一步的二次验证) - //if _usingWorkerId < 0 { - // break - //} - - // 延长 redis 数据有效期 - extendWorkerIdFlag(myWorkerId) - - _workerIdLock.Unlock() - } -} - -func get(key string) (string, bool) { - r, err := _client.Get(_ctx, key).Result() - if err != nil { - return "", false - } - return r, true -} - -func set(key string, val string, expTime int32) { - _client.Set(_ctx, key, val, time.Duration(expTime)*time.Second) -} - -func setWorkerIdIndex(val int) { - _client.Set(_ctx, _WorkerIdIndexKey, val, 0) -} - -func setWorkerIdFlag(workerId int32) { - _client.Set(_ctx, _WorkerIdValueKeyPrefix+strconv.Itoa(int(workerId)), _WorkerIdFlag, time.Duration(_WorkerIdLifeTimeSeconds)*time.Second) -} - -func extendWorkerIdFlag(workerId int32) { - var client = newRedisClient() - if client == nil { - return - } - defer func() { - if client != nil { - _ = client.Close() - } - }() - - client.Expire(_ctx, _WorkerIdValueKeyPrefix+strconv.Itoa(int(workerId)), time.Duration(_WorkerIdLifeTimeSeconds)*time.Second) -} - -func canReset() bool { - r, err := _client.Incr(_ctx, _WorkerIdValueKeyPrefix+"Edit").Result() - if err != nil { - return false - } - - if _Log { - fmt.Println("canReset:" + strconv.Itoa(int(r))) - } - - return r != 1 -} - -func endReset() { - // _client.Set(_WorkerIdValueKeyPrefix+"Edit", 0, time.Duration(2)*time.Second) - _client.Set(_ctx, _WorkerIdValueKeyPrefix+"Edit", 0, 0) -} - -func getWorkerIdFlag(workerId int32) (string, bool) { - r, err := _client.Get(_ctx, _WorkerIdValueKeyPrefix+strconv.Itoa(int(workerId))).Result() - if err != nil { - return "", false - } - return r, true -} - -func isAvailable(workerId int32) bool { - r, err := _client.Get(_ctx, _WorkerIdValueKeyPrefix+strconv.Itoa(int(workerId))).Result() - - if _Log { - fmt.Println("XX isAvailable:" + r) - fmt.Println("YY isAvailable:" + err.Error()) - } - - if err != nil { - if err.Error() == "redis: nil" { - return true - } - return false - } - - return r != _WorkerIdFlag -} diff --git a/source/.gitignore b/source/.gitignore deleted file mode 100644 index af01ed3..0000000 --- a/source/.gitignore +++ /dev/null @@ -1,262 +0,0 @@ -## Ignore Visual Studio temporary files, build results, and -## files generated by popular Visual Studio add-ons. - -# User-specific files -*.suo -*.user -*.userosscache -*.sln.docstates -*.editorconfig -.vscode -__commit.bat -__download.bat -target - -# User-specific files (MonoDevelop/Xamarin Studio) -*.userprefs - -# Build results -[Dd]ebug/ -[Dd]ebugPublic/ -[Rr]elease/ -[Rr]eleases/ -x64/ -x86/ -bld/ -[Bb]in/ -[Oo]bj/ -[Ll]og/ - -# Visual Studio 2015 cache/options directory -**/.vs/ -# Uncomment if you have tasks that create the project's static files in wwwroot -#wwwroot/ - -# MSTest test Results -[Tt]est[Rr]esult*/ -[Bb]uild[Ll]og.* - -# NUNIT -*.VisualState.xml -TestResult.xml - -# Build Results of an ATL Project -[Dd]ebugPS/ -[Rr]eleasePS/ -dlldata.c - -# DNX -project.lock.json -artifacts/ - -*_i.c -*_p.c -*_i.h -*.ilk -*.meta -*.obj -*.pch -*.pdb -*.pgc -*.pgd -*.rsp -*.sbr -*.tlb -*.tli -*.tlh -*.tmp -*.tmp_proj -*.log -*.vspscc -*.vssscc -.builds -*.pidb -*.svclog -*.scc - -# Chutzpah Test files -_Chutzpah* - -# Visual C++ cache files -ipch/ -*.aps -*.ncb -*.opendb -*.opensdf -*.sdf -*.cachefile -*.VC.db -*.VC.VC.opendb - -# Visual Studio profiler -*.psess -*.vsp -*.vspx -*.sap - -# TFS 2012 Local Workspace -$tf/ - -# Guidance Automation Toolkit -*.gpState - -# ReSharper is a .NET coding add-in -_ReSharper*/ -*.[Rr]e[Ss]harper -*.DotSettings.user - -# JustCode is a .NET coding add-in -.JustCode - -# TeamCity is a build add-in -_TeamCity* - -# DotCover is a Code Coverage Tool -*.dotCover - -# NCrunch -_NCrunch_* -.*crunch*.local.xml -nCrunchTemp_* - -# MightyMoose -*.mm.* -AutoTest.Net/ - -# Web workbench (sass) -.sass-cache/ - -# Installshield output folder -[Ee]xpress/ - -# DocProject is a documentation generator add-in -DocProject/buildhelp/ -DocProject/Help/*.HxT -DocProject/Help/*.HxC -DocProject/Help/*.hhc -DocProject/Help/*.hhk -DocProject/Help/*.hhp -DocProject/Help/Html2 -DocProject/Help/html - -# Click-Once directory -publish/ - -# Publish Web Output -*.[Pp]ublish.xml -*.azurePubxml -# TODO: Comment the next line if you want to checkin your web deploy settings -# but database connection strings (with potential passwords) will be unencrypted -*.pubxml -*.publishproj - -# Microsoft Azure Web App publish settings. Comment the next line if you want to -# checkin your Azure Web App publish settings, but sensitive information contained -# in these scripts will be unencrypted -PublishScripts/ - -# NuGet Packages -*.nupkg -*.snupkg -# The packages folder can be ignored because of Package Restore -**/packages/* -# except build/, which is used as an MSBuild target. -!**/packages/build/ -# Uncomment if necessary however generally it will be regenerated when needed -#!**/packages/repositories.config -# NuGet v3's project.json files produces more ignoreable files -*.nuget.props -*.nuget.targets - -# Microsoft Azure Build Output -csx/ -*.build.csdef - -# Microsoft Azure Emulator -ecf/ -rcf/ - -# Windows Store app package directories and files -AppPackages/ -BundleArtifacts/ -Package.StoreAssociation.xml -_pkginfo.txt - -# Visual Studio cache files -# files ending in .cache can be ignored -*.[Cc]ache -# but keep track of directories ending in .cache -!*.[Cc]ache/ - -# Others -ClientBin/ -~$* -*~ -*.dbmdl -*.dbproj.schemaview -*.pfx -*.publishsettings -node_modules/ -orleans.codegen.cs - -# Since there are multiple workflows, uncomment next line to ignore bower_components -# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) -#bower_components/ - -# RIA/Silverlight projects -Generated_Code/ - -# Backup & report files from converting an old project file -# to a newer Visual Studio version. Backup files are not needed, -# because we have git ;-) -_UpgradeReport_Files/ -Backup*/ -UpgradeLog*.XML -UpgradeLog*.htm - -# SQL Server files -*.mdf -*.ldf - -# Business Intelligence projects -*.rdl.data -*.bim.layout -*.bim_*.settings - -# Microsoft Fakes -FakesAssemblies/ - -# GhostDoc plugin setting file -*.GhostDoc.xml - -# Node.js Tools for Visual Studio -.ntvs_analysis.dat - -# Visual Studio 6 build log -*.plg - -# Visual Studio 6 workspace options file -*.opt - -# Visual Studio LightSwitch build output -**/*.HTMLClient/GeneratedArtifacts -**/*.DesktopClient/GeneratedArtifacts -**/*.DesktopClient/ModelManifest.xml -**/*.Server/GeneratedArtifacts -**/*.Server/ModelManifest.xml -_Pvt_Extensions - -# Paket dependency manager -.paket/paket.exe -paket-files/ - -# FAKE - F# Make -.fake/ - -# JetBrains Rider -.idea/ -*.sln.iml - - -# macOS -.DS_Store diff --git a/source/go.mod b/source/go.mod deleted file mode 100644 index 7561ad3..0000000 --- a/source/go.mod +++ /dev/null @@ -1,8 +0,0 @@ -module github.com/yitter/idgenerator-go - -go 1.17 - -require ( - github.com/cespare/xxhash/v2 v2.1.2 // indirect - github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect -) diff --git a/source/go.sum b/source/go.sum deleted file mode 100644 index c2f5cad..0000000 --- a/source/go.sum +++ /dev/null @@ -1,106 +0,0 @@ -github.com/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cbYE= -github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= -github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= -github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78= -github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc= -github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= -github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= -github.com/go-redis/redis/v8 v8.11.5 h1:AcZZR7igkdvfVmQTPnu9WE37LRrO/YrBH5zWyjDC0oI= -github.com/go-redis/redis/v8 v8.11.5/go.mod h1:gREzHqY1hg6oD9ngVRbLStwAWKhA0FEgq8Jd4h5lpwo= -github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= -github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= -github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= -github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= -github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= -github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= -github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= -github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= -github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= -github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= -github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= -github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= -github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU= -github.com/onsi/ginkgo/v2 v2.0.0/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c= -github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= -github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= -github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= -github.com/onsi/gomega v1.18.1 h1:M1GfJqGRrBrrGGsbxzV5dqM2U2ApXefZCQpkukxYRLE= -github.com/onsi/gomega v1.18.1/go.mod h1:0q+aL8jAiMXy9hbwj2mr5GziHiwhAIQpFmmtT5hitRs= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= -github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20210428140749-89ef3d95e781 h1:DzZ89McO9/gWPsQXS/FVKAlG02ZjaQ6AlZRBimEYOd0= -golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= -golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e h1:fLOSk5Q00efkSvAm+4xcoXD+RRmLmmulPn5I3Y9F2EM= -golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.6 h1:aRYxNxv6iGQlyVaZmk6ZgYEDa+Jg18DxebPSrd6bg1M= -golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= -google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= -google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= -google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= -google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= -google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= -google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= -gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= diff --git a/source/idgen/DefaultIdGenerator.go b/source/idgen/DefaultIdGenerator.go deleted file mode 100644 index 6c3ca60..0000000 --- a/source/idgen/DefaultIdGenerator.go +++ /dev/null @@ -1,99 +0,0 @@ -/* - * 版权属于:yitter(yitter@126.com) - * 代码编辑:guoyahao - * 代码修订:yitter - * 开源地址:https://github.com/yitter/idgenerator - */ - -package idgen - -import ( - "strconv" - "time" -) - -type DefaultIdGenerator struct { - Options *IdGeneratorOptions - SnowWorker ISnowWorker - IdGeneratorException IdGeneratorException -} - -func NewDefaultIdGenerator(options *IdGeneratorOptions) *DefaultIdGenerator { - if options == nil { - panic("dig.Options error.") - } - - // 1.BaseTime - minTime := int64(631123200000) // time.Now().AddDate(-30, 0, 0).UnixNano() / 1e6 - if options.BaseTime < minTime || options.BaseTime > time.Now().UnixNano()/1e6 { - panic("BaseTime error.") - } - - // 2.WorkerIdBitLength - if options.WorkerIdBitLength <= 0 { - panic("WorkerIdBitLength error.(range:[1, 21])") - } - if options.WorkerIdBitLength+options.SeqBitLength > 22 { - panic("error:WorkerIdBitLength + SeqBitLength <= 22") - } - - // 3.WorkerId - maxWorkerIdNumber := uint16(1< maxWorkerIdNumber { - panic("WorkerId error. (range:[0, " + strconv.FormatUint(uint64(maxWorkerIdNumber), 10) + "]") - } - - // 4.SeqBitLength - if options.SeqBitLength < 2 || options.SeqBitLength > 21 { - panic("SeqBitLength error. (range:[2, 21])") - } - - // 5.MaxSeqNumber - maxSeqNumber := uint32(1< maxSeqNumber { - panic("MaxSeqNumber error. (range:[1, " + strconv.FormatUint(uint64(maxSeqNumber), 10) + "]") - } - - // 6.MinSeqNumber - if options.MinSeqNumber < 5 || options.MinSeqNumber > maxSeqNumber { - panic("MinSeqNumber error. (range:[5, " + strconv.FormatUint(uint64(maxSeqNumber), 10) + "]") - } - - // 7.TopOverCostCount - if options.TopOverCostCount < 0 || options.TopOverCostCount > 10000 { - panic("TopOverCostCount error. (range:[0, 10000]") - } - - var snowWorker ISnowWorker - switch options.Method { - case 1: - snowWorker = NewSnowWorkerM1(options) - case 2: - snowWorker = NewSnowWorkerM2(options) - default: - snowWorker = NewSnowWorkerM1(options) - } - - if options.Method == 1 { - time.Sleep(time.Duration(500) * time.Microsecond) - } - - return &DefaultIdGenerator{ - Options: options, - SnowWorker: snowWorker, - } -} - -func (dig DefaultIdGenerator) NewLong() int64 { - return dig.SnowWorker.NextId() -} - -func (dig DefaultIdGenerator) ExtractTime(id int64) time.Time { - return time.UnixMilli(id>>(dig.Options.WorkerIdBitLength+dig.Options.SeqBitLength) + dig.Options.BaseTime) -} diff --git a/source/idgen/IIdGenerator.go b/source/idgen/IIdGenerator.go deleted file mode 100644 index e3ac4e3..0000000 --- a/source/idgen/IIdGenerator.go +++ /dev/null @@ -1,11 +0,0 @@ -/* - * 版权属于:yitter(yitter@126.com) - * 代码编辑:guoyahao - * 代码修订:yitter - * 开源地址:https://github.com/yitter/idgenerator - */ -package idgen - -type IIdGenerator interface { - NewLong() uint64 -} diff --git a/source/idgen/ISnowWorker.go b/source/idgen/ISnowWorker.go deleted file mode 100644 index e3b8a18..0000000 --- a/source/idgen/ISnowWorker.go +++ /dev/null @@ -1,11 +0,0 @@ -/* - * 版权属于:yitter(yitter@126.com) - * 代码编辑:guoyahao - * 代码修订:yitter - * 开源地址:https://github.com/yitter/idgenerator - */ -package idgen - -type ISnowWorker interface { - NextId() int64 -} diff --git a/source/idgen/IdGeneratorException.go b/source/idgen/IdGeneratorException.go deleted file mode 100644 index 9431122..0000000 --- a/source/idgen/IdGeneratorException.go +++ /dev/null @@ -1,18 +0,0 @@ -/* - * 版权属于:yitter(yitter@126.com) - * 代码编辑:guoyahao - * 代码修订:yitter - * 开源地址:https://github.com/yitter/idgenerator - */ -package idgen - -import "fmt" - -type IdGeneratorException struct { - message string - error error -} - -func (e IdGeneratorException) IdGeneratorException(message ...interface{}) { - fmt.Println(message) -} diff --git a/source/idgen/IdGeneratorOptions.go b/source/idgen/IdGeneratorOptions.go deleted file mode 100644 index f1ab4b8..0000000 --- a/source/idgen/IdGeneratorOptions.go +++ /dev/null @@ -1,31 +0,0 @@ -/* - * 版权属于:yitter(yitter@126.com) - * 代码编辑:guoyahao - * 代码修订:yitter - * 开源地址:https://github.com/yitter/idgenerator - */ -package idgen - -type IdGeneratorOptions struct { - Method uint16 // 雪花计算方法,(1-漂移算法|2-传统算法),默认1 - BaseTime int64 // 基础时间(ms单位),不能超过当前系统时间 - WorkerId uint16 // 机器码,必须由外部设定,最大值 2^WorkerIdBitLength-1 - WorkerIdBitLength byte // 机器码位长,默认值6,取值范围 [1, 15](要求:序列数位长+机器码位长不超过22) - SeqBitLength byte // 序列数位长,默认值6,取值范围 [3, 21](要求:序列数位长+机器码位长不超过22) - MaxSeqNumber uint32 // 最大序列数(含),设置范围 [MinSeqNumber, 2^SeqBitLength-1],默认值0,表示最大序列数取最大值(2^SeqBitLength-1]) - MinSeqNumber uint32 // 最小序列数(含),默认值5,取值范围 [5, MaxSeqNumber],每毫秒的前5个序列数对应编号0-4是保留位,其中1-4是时间回拨相应预留位,0是手工新值预留位 - TopOverCostCount uint32 // 最大漂移次数(含),默认2000,推荐范围500-10000(与计算能力有关) -} - -func NewIdGeneratorOptions(workerId uint16) *IdGeneratorOptions { - return &IdGeneratorOptions{ - Method: 1, - WorkerId: workerId, - BaseTime: 1582136402000, - WorkerIdBitLength: 6, - SeqBitLength: 6, - MaxSeqNumber: 0, - MinSeqNumber: 5, - TopOverCostCount: 2000, - } -} diff --git a/source/idgen/OverCostActionArg.go b/source/idgen/OverCostActionArg.go deleted file mode 100644 index 4ab978a..0000000 --- a/source/idgen/OverCostActionArg.go +++ /dev/null @@ -1,25 +0,0 @@ -/* - * 版权属于:yitter(yitter@126.com) - * 代码编辑:guoyahao - * 代码修订:yitter - * 开源地址:https://github.com/yitter/idgenerator - */ -package idgen - -type OverCostActionArg struct { - ActionType int32 - TimeTick int64 - WorkerId uint16 - OverCostCountInOneTerm int32 - GenCountInOneTerm int32 - TermIndex int32 -} - -func (ocaa OverCostActionArg) OverCostActionArg(workerId uint16, timeTick int64, actionType int32, overCostCountInOneTerm int32, genCountWhenOverCost int32, index int32) { - ocaa.ActionType = actionType - ocaa.TimeTick = timeTick - ocaa.WorkerId = workerId - ocaa.OverCostCountInOneTerm = overCostCountInOneTerm - ocaa.GenCountInOneTerm = genCountWhenOverCost - ocaa.TermIndex = index -} diff --git a/source/idgen/SnowWorkerM1.go b/source/idgen/SnowWorkerM1.go deleted file mode 100644 index 02e017c..0000000 --- a/source/idgen/SnowWorkerM1.go +++ /dev/null @@ -1,252 +0,0 @@ -/* - * 版权属于:yitter(yitter@126.com) - * 代码编辑:guoyahao - * 代码修订:yitter - * 开源地址:https://github.com/yitter/idgenerator - */ - -package idgen - -import ( - "sync" - "time" -) - -// SnowWorkerM1 . -type SnowWorkerM1 struct { - BaseTime int64 // 基础时间 - WorkerId uint16 // 机器码 - WorkerIdBitLength byte // 机器码位长 - SeqBitLength byte // 自增序列数位长 - MaxSeqNumber uint32 // 最大序列数(含) - MinSeqNumber uint32 // 最小序列数(含) - TopOverCostCount uint32 // 最大漂移次数 - _TimestampShift byte - _CurrentSeqNumber uint32 - - _LastTimeTick int64 - _TurnBackTimeTick int64 - _TurnBackIndex byte - _IsOverCost bool - _OverCostCountInOneTerm uint32 - // _GenCountInOneTerm uint32 - // _TermIndex uint32 - - sync.Mutex -} - -// NewSnowWorkerM1 . -func NewSnowWorkerM1(options *IdGeneratorOptions) ISnowWorker { - var workerIdBitLength byte - var seqBitLength byte - var maxSeqNumber uint32 - - // 1.BaseTime - var baseTime int64 - if options.BaseTime != 0 { - baseTime = options.BaseTime - } else { - baseTime = 1582136402000 - } - - // 2.WorkerIdBitLength - if options.WorkerIdBitLength == 0 { - workerIdBitLength = 6 - } else { - workerIdBitLength = options.WorkerIdBitLength - } - - // 3.WorkerId - var workerId = options.WorkerId - - // 4.SeqBitLength - if options.SeqBitLength == 0 { - seqBitLength = 6 - } else { - seqBitLength = options.SeqBitLength - } - - // 5.MaxSeqNumber - if options.MaxSeqNumber <= 0 { - maxSeqNumber = (1 << seqBitLength) - 1 - } else { - maxSeqNumber = options.MaxSeqNumber - } - - // 6.MinSeqNumber - var minSeqNumber = options.MinSeqNumber - - // 7.TopOverCostCount - var topOverCostCount = options.TopOverCostCount - // if topOverCostCount == 0 { - // topOverCostCount = 2000 - // } - - // 8.Others - timestampShift := (byte)(workerIdBitLength + seqBitLength) - currentSeqNumber := minSeqNumber - - return &SnowWorkerM1{ - BaseTime: baseTime, - WorkerIdBitLength: workerIdBitLength, - WorkerId: workerId, - SeqBitLength: seqBitLength, - MaxSeqNumber: maxSeqNumber, - MinSeqNumber: minSeqNumber, - TopOverCostCount: topOverCostCount, - _TimestampShift: timestampShift, - _CurrentSeqNumber: currentSeqNumber, - - _LastTimeTick: 0, - _TurnBackTimeTick: 0, - _TurnBackIndex: 0, - _IsOverCost: false, - _OverCostCountInOneTerm: 0, - // _GenCountInOneTerm: 0, - // _TermIndex: 0, - } -} - -// DoGenIDAction . -func (m1 *SnowWorkerM1) DoGenIdAction(arg *OverCostActionArg) { - -} - -func (m1 *SnowWorkerM1) BeginOverCostAction(useTimeTick int64) { - -} - -func (m1 *SnowWorkerM1) EndOverCostAction(useTimeTick int64) { - // if m1._TermIndex > 10000 { - // m1._TermIndex = 0 - // } -} - -func (m1 *SnowWorkerM1) BeginTurnBackAction(useTimeTick int64) { - -} - -func (m1 *SnowWorkerM1) EndTurnBackAction(useTimeTick int64) { - -} - -func (m1 *SnowWorkerM1) NextOverCostId() int64 { - currentTimeTick := m1.GetCurrentTimeTick() - if currentTimeTick > m1._LastTimeTick { - // m1.EndOverCostAction(currentTimeTick) - m1._LastTimeTick = currentTimeTick - m1._CurrentSeqNumber = m1.MinSeqNumber - m1._IsOverCost = false - m1._OverCostCountInOneTerm = 0 - // m1._GenCountInOneTerm = 0 - return m1.CalcId(m1._LastTimeTick) - } - if m1._OverCostCountInOneTerm >= m1.TopOverCostCount { - // m1.EndOverCostAction(currentTimeTick) - m1._LastTimeTick = m1.GetNextTimeTick() - m1._CurrentSeqNumber = m1.MinSeqNumber - m1._IsOverCost = false - m1._OverCostCountInOneTerm = 0 - // m1._GenCountInOneTerm = 0 - return m1.CalcId(m1._LastTimeTick) - } - if m1._CurrentSeqNumber > m1.MaxSeqNumber { - m1._LastTimeTick++ - m1._CurrentSeqNumber = m1.MinSeqNumber - m1._IsOverCost = true - m1._OverCostCountInOneTerm++ - // m1._GenCountInOneTerm++ - - return m1.CalcId(m1._LastTimeTick) - } - - // m1._GenCountInOneTerm++ - return m1.CalcId(m1._LastTimeTick) -} - -// NextNormalID . -func (m1 *SnowWorkerM1) NextNormalId() int64 { - currentTimeTick := m1.GetCurrentTimeTick() - if currentTimeTick < m1._LastTimeTick { - if m1._TurnBackTimeTick < 1 { - m1._TurnBackTimeTick = m1._LastTimeTick - 1 - m1._TurnBackIndex++ - // 每毫秒序列数的前5位是预留位,0用于手工新值,1-4是时间回拨次序 - // 支持4次回拨次序(避免回拨重叠导致ID重复),可无限次回拨(次序循环使用)。 - if m1._TurnBackIndex > 4 { - m1._TurnBackIndex = 1 - } - m1.BeginTurnBackAction(m1._TurnBackTimeTick) - } - - // time.Sleep(time.Duration(1) * time.Millisecond) - return m1.CalcTurnBackId(m1._TurnBackTimeTick) - } - - // 时间追平时,_TurnBackTimeTick清零 - if m1._TurnBackTimeTick > 0 { - m1.EndTurnBackAction(m1._TurnBackTimeTick) - m1._TurnBackTimeTick = 0 - } - - if currentTimeTick > m1._LastTimeTick { - m1._LastTimeTick = currentTimeTick - m1._CurrentSeqNumber = m1.MinSeqNumber - return m1.CalcId(m1._LastTimeTick) - } - - if m1._CurrentSeqNumber > m1.MaxSeqNumber { - m1.BeginOverCostAction(currentTimeTick) - // m1._TermIndex++ - m1._LastTimeTick++ - m1._CurrentSeqNumber = m1.MinSeqNumber - m1._IsOverCost = true - m1._OverCostCountInOneTerm = 1 - // m1._GenCountInOneTerm = 1 - - return m1.CalcId(m1._LastTimeTick) - } - - return m1.CalcId(m1._LastTimeTick) -} - -// CalcID . -func (m1 *SnowWorkerM1) CalcId(useTimeTick int64) int64 { - result := int64(useTimeTick< m2.MaxSeqNumber { - m2._CurrentSeqNumber = m2.MinSeqNumber - currentTimeTick = m2.GetNextTimeTick() - } - } else { - m2._CurrentSeqNumber = m2.MinSeqNumber - } - if currentTimeTick < m2._LastTimeTick { - fmt.Println("Time error for {0} milliseconds", strconv.FormatInt(m2._LastTimeTick-currentTimeTick, 10)) - } - m2._LastTimeTick = currentTimeTick - result := int64(currentTimeTick << m2._TimestampShift) + int64(m2.WorkerId<