From f89caeefc56be2a633d0a5e954ee6c05b4d47b62 Mon Sep 17 00:00:00 2001 From: Ryan Ghods Date: Fri, 26 Nov 2021 18:28:18 -0800 Subject: [PATCH 01/17] fix webpack polyfills: buffer, process/browser --- packages/client/package.json | 1 + packages/client/webpack.config.js | 10 ++++++++++ 2 files changed, 11 insertions(+) diff --git a/packages/client/package.json b/packages/client/package.json index 1214fd1ac7..3fccf09489 100644 --- a/packages/client/package.json +++ b/packages/client/package.json @@ -101,6 +101,7 @@ "os-browserify": "^0.3.0", "pino": "^5.8.0", "pino-pretty": "^2.2.2", + "process": "^0.11.10", "pull-pair": "^1.1.0", "stream-browserify": "^3.0.0", "supertest": "^6.1.3", diff --git a/packages/client/webpack.config.js b/packages/client/webpack.config.js index ea62fe099c..959e494186 100644 --- a/packages/client/webpack.config.js +++ b/packages/client/webpack.config.js @@ -1,8 +1,17 @@ const { resolve } = require('path') +const { ProvidePlugin } = require('webpack') module.exports = { mode: 'production', entry: './dist.browser/browser/index.js', + plugins: [ + new ProvidePlugin({ + Buffer: ['buffer', 'Buffer'], + }), + new ProvidePlugin({ + process: 'process/browser', + }), + ], module: { rules: [ { @@ -36,6 +45,7 @@ module.exports = { }, resolve: { fallback: { + buffer: require.resolve('buffer'), crypto: require.resolve('crypto-browserify'), // used by: rlpxpeer, bin/cli.ts dgram: false, // used by: rlpxpeer via @ethereumjs/devp2p fs: false, // used by: FullSynchronizer via @ethereumjs/vm From 1ababf8f3bac21be1b0d18efde9abd1b17c0fd1d Mon Sep 17 00:00:00 2001 From: Ryan Ghods Date: Fri, 26 Nov 2021 21:15:12 -0800 Subject: [PATCH 02/17] fix browser sync example * remove premature PEER_CONNECTED * parse bootnodes, set consistent chainDB * tidy libp2p files and other small fixes --- packages/client/browser/index.ts | 28 +++++++++++------- packages/client/browser/libp2pnode.ts | 20 ++++++------- packages/client/browser_sync.png | Bin 95265 -> 0 bytes packages/client/examples/browser_sync.png | Bin 0 -> 138036 bytes .../client/examples/light-browser-sync.md | 5 ++-- packages/client/lib/net/peer/libp2pnode.ts | 28 ++++++++---------- .../client/lib/net/server/libp2pserver.ts | 22 +++++++------- packages/client/lib/sync/lightsync.ts | 2 +- 8 files changed, 55 insertions(+), 50 deletions(-) delete mode 100644 packages/client/browser_sync.png create mode 100644 packages/client/examples/browser_sync.png diff --git a/packages/client/browser/index.ts b/packages/client/browser/index.ts index a170b7ac5c..954e422e00 100644 --- a/packages/client/browser/index.ts +++ b/packages/client/browser/index.ts @@ -1,4 +1,5 @@ import Common, { Chain } from '@ethereumjs/common' +const level = require('level') // Blockchain export * from '../lib/blockchain/chain' @@ -20,7 +21,6 @@ export * from '../lib/net/protocol/flowcontrol' // Server export * from '../lib/net/server/server' export * from '../lib/net/server/libp2pserver' -import { Libp2pServer } from '../lib/net/server/libp2pserver' // EthereumClient export * from '../lib/client' @@ -38,6 +38,7 @@ export * from '../lib/sync/lightsync' // Utilities export * from '../lib/util' +import { parseMultiaddrs } from '../lib/util' import { Config } from '../lib/config' import { Event } from '../lib/types' @@ -46,34 +47,41 @@ export * from './logging' import { getLogger } from './logging' export async function createClient(args: any) { - const logger = getLogger({ loglevel: args.loglevel ?? 'info' }) + const logger = getLogger({ loglevel: args.loglevel }) const datadir = args.datadir ?? Config.DATADIR_DEFAULT const common = new Common({ chain: args.network ?? Chain.Mainnet }) const key = await Config.getClientKey(datadir, common) + const bootnodes = args.bootnodes ? parseMultiaddrs(args.bootnodes) : undefined const config = new Config({ common, key, - servers: [new Libp2pServer({ multiaddrs: [], config: new Config({ key, logger }), ...args })], - syncmode: args.syncmode ?? 'full', + transports: ['libp2p'], + syncmode: args.syncmode, + bootnodes, + multiaddrs: [], logger, + maxPerRequest: args.maxPerRequest, + minPeers: args.minPeers, + maxPeers: args.maxPeers, + discDns: false, }) - return new EthereumClient({ config }) + config.events.setMaxListeners(50) + const chainDB = level(common.chainName()) + return new EthereumClient({ config, chainDB }) } export async function run(args: any) { const client = await createClient(args) - const { logger, chainCommon: common } = client.config - logger.info('Initializing Ethereumjs client...') - logger.info(`Connecting to network: ${common.chainName()}`) + const { logger, chainCommon } = client.config + logger.info(`Initializing Ethereumjs client network=${chainCommon.chainName()}`) client.config.events.on(Event.SERVER_ERROR, (err) => logger.error(err)) client.config.events.on(Event.SERVER_LISTENING, (details) => { logger.info(`Listener up transport=${details.transport} url=${details.url}`) }) client.config.events.on(Event.SYNC_SYNCHRONIZED, (height) => { - logger.info(`Synchronized blockchain at height ${height.toNumber}`) + logger.info(`Synchronized blockchain at height ${height}`) }) await client.open() - logger.info('Synchronizing blockchain...') await client.start() return client } diff --git a/packages/client/browser/libp2pnode.ts b/packages/client/browser/libp2pnode.ts index b17f69239a..91763da633 100644 --- a/packages/client/browser/libp2pnode.ts +++ b/packages/client/browser/libp2pnode.ts @@ -3,16 +3,14 @@ * @memberof module:net/peer */ -import LibP2p from 'libp2p' import { NOISE } from '@chainsafe/libp2p-noise' +import LibP2p from 'libp2p' import PeerId from 'peer-id' import { Multiaddr } from 'multiaddr' -// types currently unavailable for below libp2p deps, -// tracking issue: https://github.com/libp2p/js-libp2p/issues/659 -const LibP2pWebsockets = require('libp2p-websockets') +import Bootstrap from 'libp2p-bootstrap' +const Websockets = require('libp2p-websockets') const filters = require('libp2p-websockets/src/filters') -const LibP2pBootstrap = require('libp2p-bootstrap') -const mplex = require('libp2p-mplex') +const MPLEX = require('libp2p-mplex') export interface Libp2pNodeOptions { /* Peer id */ @@ -31,16 +29,16 @@ export interface Libp2pNodeOptions { export class Libp2pNode extends LibP2p { constructor(options: Libp2pNodeOptions) { - const wsTransportKey = LibP2pWebsockets.prototype[Symbol.toStringTag] + const wsTransportKey = Websockets.prototype[Symbol.toStringTag] options.bootnodes = options.bootnodes ?? [] super({ peerId: options.peerId, addresses: options.addresses, modules: { - transport: [LibP2pWebsockets], - streamMuxer: [mplex], + transport: [Websockets], + streamMuxer: [MPLEX], connEncryption: [NOISE], - ['peerDiscovery']: [LibP2pBootstrap], + ['peerDiscovery']: [Bootstrap], }, config: { transport: { @@ -50,7 +48,7 @@ export class Libp2pNode extends LibP2p { }, peerDiscovery: { autoDial: false, - [LibP2pBootstrap.tag]: { + [Bootstrap.tag]: { interval: 2000, enabled: options.bootnodes.length > 0, list: options.bootnodes, diff --git a/packages/client/browser_sync.png b/packages/client/browser_sync.png deleted file mode 100644 index e78222965615332c9e0944c2deec2b0fe6652853..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 95265 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 z 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

tk{s5*OiM9xw*V;9n|Tf3 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

  • 7>+bh7X8bCk!j_it+WMNkhr9FlmqBLqrQI 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 diff --git a/packages/client/examples/browser_sync.png b/packages/client/examples/browser_sync.png new file mode 100644 index 0000000000000000000000000000000000000000..5e72b64848329c37ba9d16cff22edbf5af59eb93 GIT binary patch literal 138036 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

    K_n{}5@u zz(T}o=Y=b)tb_JHA3^a0)D{X@-MGmAzD__=E`$Pqtg~xB=UnjjSO4bu6A2+t8h#Mc zeR*Q(UU;#Xw<0Qo2q>rr+{PN$Zx=^Er|=8mXn7MsVgx>N5xjRN3y>&86kqa^*x=4n z^`B4g3n$F_5*cQEqF8OOno=sXZQeZ|d>z0$Jrd7``z&AY5>2A|owA%U>H!y{1Q@TX zR8Sb{6ddt@fBH9zAd%>>ay*w6S8xKwzqDDiXU}xt4QhF6ULrrdP3rW=GaBc`Px%}k z@6v(3fb->1uh|wyd$l}l3l0O%Bd0N(Pg|a!Otk@lhN{o*AaDvjw!m5!gH|+^oZ}B1 zZ=JCy90aBn@^Wymt4UzjTI^q6I$JE$(Wbo*{OU-@Av$R`>Z9B3kmmxvBkB>3tOGEq zFWmEqs9rvHMwd1mOajV{t}@ZE>Vq%Hx)#-hA%ol1-t4)Fb1&51`BC*zK`h{T0+C#U zt!m|#Fy$&+C1Uxvxq;ZzefT0K0h1ku(M@59M?(Iu)oOmyIr4+&nY+)G#EDFc5{(gKTblyqk_5H46j)Bq#y zqtU7atCDq&Y9n-0c)Ek3`h36|PbUg{(i<6sJkvO$y4DQrmpo6dsMQvJHmY_D`|ha} zD~mormK!@iFMkFIPpdN@M2^j`2Vsb4>aoBr3#s!w5he{M5MyGB(1Ms)3ON*g4lziO zlf9#A0yB{x5fTPwH&+r)Lo`MQv$cuewNM`;(B2I2=rh2*mZByVg?-@4G}aGjSUA^U za(B~B76J&vTF_@gWZ~t`e0*1-t+&VRAbH$zc9iq$G<6iMa1fJYfnhUVdWAv z(oJEYpds4`Zg-k!zA~N5HiG@7W*C{^(598mR0!C7FsHMuf|?xz$^R&m4O`fdah5r;D|=yh7|6BZCBCAG0(JPG-CQeAt|bMT~{+P=}U{6i!O zzG&1olO}M8ZG6 z(W4A)Weuo!D!}8qz+wu}w@+ovQ&uaTDTaBA?=Sa}Uz$kmE-&R} z(M^PmJ|Yr~Z(kQ7Sg0)Jdp@*iQA%chAlK8n0$l4Mx17XGv}w6iI?n4yN3vgNQ$SMP zZ2W47gPz7|D}&^0$<5t$sJ&9BPO*|wH<#ON9&Db6Gn5@ho!sTmw;0fXaAp?+ zG$72CJ?X`CYU4&YCieoqO1o7Y2;JrY zYFm6NTj3odwNgQjYK_4N*CCo1Qe3^v$jj9^X{+rs&h^O!Kg_Qhv9I(_tn8i~H3QQw z?Kc2u`NNZ5hc)T~ovQC%G#CDtN$i&W&d|ujYfyB`7PaCK=WGl;?m~(&;TG0T^!jEI zMA>VB3+u^zb`1|wIj;B94`Ou=_n^K&S`gM|X4h&z6sAn>dOu|QebGp;IuD^1>n9{D z@B{Ttj0zXe)oHt-nM-`v_RDxrsoQ`8G2iofnZq9dK<8w=N|ujMA`Q}t zaeQ+XU@ogo2hRDh!wYU<^mMIErz-uUo$p{aRm753>Jb9^_Q`Wow#R5SxnqX&fZ?yma2a%`-52_1|Wg)~b}-gOG_eatQFP&vA#_fhU6DxT$Of*F6yHoWG-}(ho)96S$|IS_saH%8KAtRWTA`L4)JyNF~Io< z`0<0^tufg5>}e>h_&LR*&5t>OZ%fELKA>1`h;3bzYX@}`d~VkMmfI3R2CMF=_;V3V zjKfJqN3>_5|Me9NbV~Wr^y8GXkKyX=8<16C{;k*4%2&rwCD^n#w_^El`Cu@3k%1T@^cVDp3gdN6#2uPAF&T^QvT5Tvs zg=PP+!|CaF$X~qC{%6qj3TKW|V=uZ>1|msNR_O%8%z&*!0oxG-`@|a;2Wae&9oxB! ze(Bmv$@j{N(Uy0?>zHgf+Of$O8v-+EDoZ~Y!A2dJmU2D_(eYAl6H=3wL4FWJ`Iv}^hqG_?xhVHA`?SQKyxB?}Ocyqco1Rl-9PHz9W<2Yr`+xA)&Jx*3` z^w|y|D;|Qgp2G^@j6Q@|6plhzQH!ifMIIQ$$Ie7(u@8ZPH@;OROdKz~w8NZFx&)CW9=!TL z-u6*WJ@2wZ`X%v*O18Q`VxW}`#z)~#X1GFhriuMJ;3Q?V-v?})xm@Em!;}lfzOh5F z5G>Xj;9h5}ec}m>Yc`rsL#{&$;e7{qeP+ykMzh^Mn4{TGzifm--S?{7+s+Wy;J-|U zdsL$GguH->gak*-(D2wZ))yH`NEbyuRb1%noZFr^^ZKzE&DKl4Dq zh63Ib%jq9=3Eic+fB|*eE9tgbWf4CoI)+2lIsBJim_BC7<%n5RgESipX7UZcu)j#$CRFSEYuNv0%T&$0{kZzBt0R+Fq zEHSdficXkvi7M%8qL*D6I%T@NAh?>lH*P7NeR<6RAja^J1&d7?@nfmiQ(MN;|dL}{F z7b67D4XPHGlk(>3_dAVHhNwGE*V1}xiu%W%eq}Iy9BpC2R{HZnJ*7R+?;;IHJH z08ap8%hSglT2ml){<4g$qNO>g1W9d?en}ELI&?WdT zAza@f&KiAgIAXBSkrZymu?%KWj~)Sd>)NOkwr+UZXjs;R@TFG-7Q;Cc{%p}+(|5)U zcS^~zAolx0BkyJ?JZOm~?Wl6~8QQpRZ&!cjqWF0Sp*kE9Npm+nOEjsHCRXX{IquJ} z`>=R%?X&~Et6@7RX4Gi-VA*Jp6o5O3c|>4a6dyl#71pH}9tN*dbrx2zYe>JE7kq=J zO<+27hUx>oL}TL;P{P#27TNN(*_&tA;~g9f_3$W;iN?Epc#%?%Z5n-9(dVUB*Y>;R zZfU=Vu$ZqTc_tC{{1;g@T^{guCJ*48{@HxgByhR@2Bzr>#?XABO0|}*w%%Rsx{ZXH z^ebe#jf~3q&3dd}2@NI9jjqo)=SZSl08p3U&~w3vXt5bhagqZa$80c^P9J=S(DMrT z^=fyEsa=B$@4@kOxV&YDsVeED+s<0@;-3g;Yn)WuR~pa^ZB2x=bT^ zf9mAVvW2PBYnF__(Mv_CwE>oR1P0AI#j63d;9-*}@wOc{u{AJsyB0D-oCON2PXpR%iD zskSY21^$;7U+9xyz{RD^sLx;sOzqzEwXvs%HY8XUgQ-sZ?-`oCy|bTPsy0j2Dq6M8 zZ1Y|;`i94x4Ljqg9r&fwvT02sKL$zIpEuNW{m|N$hmCR#yf zC4i*_5o)Qv%fj+IrSvLXmbWnD5_QhCoiUd3xBdFd8YZkY1QcO~YL*IP*)I7rg1((j zGsadcv2NFRJZCt3;T}Mj!k9fZcr!lSduMC~L&71AXX(my2<({Uo>y=-fSF^V?SsMLjDOxg;YjCIG*Z6gCWogdXodt(VOKhK4 zcQhR6H2zk|06H8(*zA2L=%;P$oc(`55ulU7K2+e*FBIi#$VU~pG&tO8PL88qx_7VS z1~b?jz!{ z!OjQMV4<`^$=-P@)yz2NA-v~9fs{aN3$Gj4-BBDKc&6+I*l)j6{M$;FmT4F$;JT$@ zIyp5)(P^|z8jqsceiB7Kuex{e-#R)vog*jc5S(vlybN#u0T{wi&t zrj;&b{x}Itzf|Bj?sxY%aP?^Cs#2g8xh2`M8#7v6vTSEG5e>HztSIFOfwYk=Cb`p- zZ!7!Xoq`~R#;Tw)GF>iJdisdpaIw~$o6~fe2yp~o5&12e_k5w3Nr3cn_P@Q^8Z>LU zLaWcwK3Uz}CV~|B-@ujEz=I+&;?{vySNN<=TZfJtaY9;O-T7O%%4F zg4qQD#_(}MXLh&y%j;59jSP8zEr&dap?}x;ib};l2}$DCCtIk{?M5Xep&Oysr>41} zlKkEL5Fjcx{85l1r{A{~t0UIDF^N>L!DN|=+gORxkRIEE=xjfmQM9^Ge;K~=2-8`m z!~4De9F``&1V(=i|i_5ZP30f<3l(elIw+tBm$ zKlnn@(3Mg*+cU$$u>Rw9zKAwMj4dbR~?yJ=W^A#Y&p7)TJ`x*#Yc z33C12orAf)*Y8g&&EZ(rrzCOLQW(*y5Yzo~xmZN8=FqJ2U6nkCR zQ0BT+!&b{<-bqYqh_4B8_c(5a^CG1K^Eh%=)Ar(Iw>0>$10Vpz{GD=#Tdl^UBEY&C z7F7%^_+01j4%gkFhI+lRVWz?h$4?`1o!M>vE@Iv~JXt`sz>DKraYxxJyzk2W1>BM_ z?r&&nz<^!t{C^v;yHU&J-0&V!7c`!`vRNBW!;GV5etRmvouHpHfE4oEX;Sto9o(HO zAv9*8ABL|486}2Gu*xTc!*4VJQ0)LKgMEy_4!EoUG7l*dIWVVxi=il>*R~0dhS1S3@h-D-xmUW8&Cbv1*S`3sC2=e>c^8 zwKYZhJz-8!2nD!J%;zd?^Q$fKgRaidY)d$pGieN^#kaoIr|AauGJIN(b){o~$=!D}}2wdg%ek<)%u1LfclmcFJ z8s%0GQQ)K#K-jTpPJ?vc<%lapVyY4JtfVM4x7ifyuIFw6&7}LIlY&2KU|b*&zl8zV zc!pjqaClWD6qd~+_@o{B&=z>X!T`5874c}bA74lEpkG8RMaWieGYE;ohLO>4soLbV zJNMY*{7EgEe^&mvZ&QXkTV6a* z?gM}xy=T<+kT~qh)T*~!Um@C0026hj zhYc8m741!JyOuF=+U>5JV2WOhe#wqT4hGCo#Uy&`;6M9Fa+hF>-DypsI^GXXW*WZm`;`GLM5ksC0nE8t1Mj39kroDIGem(xUeXA51!tgzwmbEl?IQDcYYmU* zlXxY4GFt{tlc@}mb|dU4aqpm<-WQ*MtGjjK8k{=-+fn4f8DtSzBW#Z0^4dbCPv;em zrB`|pD^)K;?2o`!`qX7#D3{n884lE8;=QYcgz-n;zb;F9>&wOAGDanrPFJn$TyNAL zUW`%H(dK!*+OO^Dm;7=0*(%gxVASF2w^!vWRTiOE$5+{n&2}gS2;c6#m0;#U_xyaX zIOAz;ff-#oAfUkX1`1*vbIAjxXXL{`y#_pvc-xH2g#9k9Zn|c`v4#aLeFMs50B{FD zo=X&H@Etf8h<57IT-E4c`n?)hh+@o1NJx0Fl!HL*1;BZJt5r=&l&r${Sog* z`~u&e(KkX}ty1J33#guvqPYKncK2%T5=-?E<@|zH)MBlaaYU9NY?+KOEfp zu{|jjdJU2Q2HBNn<*JzP%|k%Oe|Co?kxEMi@=D$?8~%HvRSf$tbugLKSLt)`)oOW$ z`Ud3sJZl6Tg%4g$|CDV6<^R*QaZ=^6^@L6lBU!1{GOAKz9^cKjxgbn2H|k2 zicD>~CtMA5OXc>dMW=zm4n4-3G|eLh8!A?xk@-PJBamphWVSY1a+S!P1Nd2rIr{ww zg@+uL`a!R=fZq)e)fE6W$i5GelY;ZnlO2CYp+8js0b@8WXl&ukTfhzQ@`-?)XE9(; z)_)zBwlk=h&(LTxWky>8V!g>2zcy@v-kDS`>v-j8ij^9FvfLi_zlt<^p>7g*aM>*+ z#F|+|^1hqj>vP%Z5(40fB+%(>JY%4x-eO2RSGpj7;d@hn_{Dk?v8BV^z9kD_HRa1* z9SakWxfDB3GRWFkl89r%;j}tjGL5D2r1m=}sPHW}cPf5FN$3P8$|T2gC;<#A{aSFV zPh=5n+>qz@#u?y#3`?O}f&aj@+X{2%7NWty-4tMn;+FoL)XF5}x_Yg1rZ{6)(INbm zgFN&q^Fw+#T~cy@EJ40-R77YeB83(^)-}^aG04zVfJ!n*8av!HdK4xl*x7TT{n6#5 zWtVez?Qkv4Wq#Lw{4(8S(VhQL&HcE+%i_51UR5$?!Nzw`b*0u?1e3&Q`6DhVW;0FQ2Mh~ub#8CU?Y^Y~P17^fP74eW!)<6HV zuDH_e7aa!n&Xb=OG+~<7noR@JsGDpCJ9H>K2LjvVQi&_dE-mW$JLMQDS$wwXSi@3% zHR_cE-n-5Z$&iW*KQor^E9Dpvu_BSL1vy}xi=@rM;;GES5jTHr^dI0)a~(}kcp>zZ zH_vX4mZ#teE>E%ItXpGmTJ}ROa^+6ZpC@;Z88(nt%+`=iOzMd4=82HV+|Lj>yJA)v zjp|&LBP1hSAor|!f91782Rxl2G9U0>a3C+>iIYSgrz7!CzNnR$J7VK@vU@)}Y7VxL zt#cl72s#l~Luqv?;Cc0QUl&Ay+a2BSizyXmqf3<_j$L)JD&C& z1IpTqRnVEe;5WrOrG{07kk%;Q)vKNM8Uto79*M&xK6rHH7sM6XxG8SX3`sHob4B*R z%}1r+p^RD{>B)b}ZZeV142ATR11+BV2y_EAn+!Hql!h3OCFe2*3YIkoR0|*oN@V*( zAz~rJnGkHjpk&MS?fD)#K9F`{LK7%gIPtDhNTl{{VFnN{1|sH{ue-g85Q{ zA2B1As-2%unmJjDXoY%U0^SRPlFR4+cH)vyJmw(cMcy0zA^40QxQ?C8>*tUV&m(lv zKM#kL6yA*=CYeNCR_nmJm zvY~pDGAPK90?2E_Z02Rm5@P3?jzkiGXE?p1?JObSJt6hh|11A%v~{UYnB3H`8c1^>apo&dp1Cu^RjND9nBN<4LjEe4+o@*E&A` zI**&xWq~aaEvCKp%m>8g#Fqej-?$ILlP)HF6uX;gVEdBkNFVXfRdaf9rc9Sk)K9od zK<1P4pI>UlyrI~-snvp0paa%0a`EP{0&c}f7SDHV#2+|Z3^8Gnry|I;jshIs` ztpkF}eu}axc86o|!Q$pkUN)7u^~4EuE2QmC>7d?h431HS3AhV7Q#1AIq51T(@J%9qDuMRP zXNjEhbO=Alr2yslk3)A~Dg(N^(l@<&+GH<~bT}vOPboV{YjBGEA8xKPNHoJygP2~3 zgg6z*)9OsB264e!dR)jjy?1XaZsNDx@IU9n)*IeH&GZQ`n=MP;0dJhu4=_l6l>*sm zi2`U?^)Pe2;8G?p_k$-m%j^6Rjkd+EdsI}xsTMy*4cbu#?NE9*~Y0C6ycoTt2P;euxMR z8n$70NJxRVY*y{}*6SqRt=BOX86y&Xa)f>UwWeZMF^c+_+yKkFnbXc^^H1V^J)}|K z=iQ*Y99V^eJ!7~ER!xCFF*r(PTj>l!$WNNs#f3uW7i)T!32(TX=*1~pqU?=>womLc z>SXo^4){IxvJ0zQ5)7i^b~*kZ*3K#{j&)ntArK@GT!Xv2ySsaEcY?dS1$TFc;1WEz zySux4@Kec}bFaD9-k0aLyQ}G^tEu|`cf8{pt}CYEY82TU2=5T}Y$Q>cYC296wP~ zA2@<6ygL$l9oT4ZBPy@we=r$#SoUhS$^3jNW$AO4AOo^a-yDU_oy%U_s`|!d)G|72kUD0R$m$?Y;g4UjVmcJjHi#j<4Ond~ku$b5mTi0)gKi zxaNx+dRJa1arv2Sp&d(I z+1FXb(rr6u0FZDZHmkIr5SD&LqnFpu3|~`U?7TC)wW!!S9d?R&+>De>TDu z$-*vy!;dj;70*Q1Av%C~(u zMN;1ST_5*xylaZz$miF69gOI(t1qAGQ;qqxSsn><28J>QV@1iRDTBwT$%Ww`*I=g_iGMUylD5%CfmZi`5a^H884vT8o-83G@`{ZC3z9`8 zSX{SXF=VrM!|iRUW4-8iRpHgI0kEPK{BP8HKM*Qph&Z+ad=N~GsE86q6duA7K9Oy| zEaFxL`&p&9`>v@~JB03e>*p;%BCxWU11)@q3&Q)@3w~nk)$F-=r48$g*S1ZcSXZ}e zJ{pKfrJt4gcxIa#s|V%wh$E)?680ZU8stI>!Qz3w6GQ3QKq4pQkJrR|^qBM*j5D_s z16wC#M+AMmk;@Afhn0e_&VAtkk}M{#2(1w!)H5Y5k}w@x$}@wjP?EkiWChjmmf*^$283#+anTpt6uyh8N+2)Y%$fwOi#~X5t-DS^RH9M2<-;1 zoT|hW8zMSXk3u^giEIjiC@B3dRWtd@8uVL;#V~Qt+={PPAM7aM)HaYpyij_jWtbRX zCyO#9fJq@?M|eNINjK|REmpN3B-XXA775J8m23Id*yHpbVWHgTrJT}eO3LT$Anw4?f-x#O0Z00ll%Yk6s6)hMnms}lih(>WZg zs8t|>J)N&DJ%8MWgae`91v2sQ7?F0s7Er-Xko~F7tlP~W|6U}x%GV9;te# z>D~5#nbQ*Z>(?#TH&5|(BIoH>>s{Csmz&-qXizPjvVN=KWO56oENT@>SmlKcdZf`L zKcPb~lURR3_|$nDc#aE5mtQVlcyx(`WEe*M|T zfn$jgRSX)4!ng-mB4A{r>!dOZ8h%#%=5$?tpRjyC;wfd(2nLDKad%15U}yAoZ2RIM z4VnB5rK~w6V8RZ8$QCa#?2>iJn*ZKL?@6*on*;qe1IoH+U&hN5b#3LU?X6buY2fnV zdf&qge14gx^=P_CR#b;~cm!K|W1ar|%9G#cqEubB+V? zW4E-Z&mPhzcD&|Zj97b%qC3ZwjS&39nK-L?_kM2J9#RNM=Ict_*Sq(gK4gK6pQw~t z4$kw_-pL6C^D!z8c#`&p)*q7QoIzL?%N3MjJbU$YeBV|}R+3VWdRxFP9r?xM-HjQ? za!=Ndu|2zQ`*Yi;-}mi3L^=K8;m}*x^3@XhGL}oOjl5#MOXva(i}q03)1=fx?Ulmg zyij)PH$!=3f%$6bZy!>2Dr2@{t-ct<8Y*___`=8hFbq*`=m&`c#esO0#JX_U^*;RS z`t_F02AI6J@6b1rLfqvhMCdg?_I!T_9Cp>wFHzZx1HlFBf_1^R@vje}0o-yK(w^oF z%IX2LY*7w~1c+)?xvXX#x z(K}1Ks&|9i{m)}VaA95g44*F+%X)#Y;va8mqiFY&k;Hmv{)jvNpO0_Y;(4)cV8qGq zT)(ZxNz7-$I=Zes!wtuZ$Obi2_3i7FYbwuUMcRTiZbX!O{R|U-1DAIeRtrv1wtBTd zUalE=+yNpVA`mbSyvq%dlX}9?4h)V3nkG+cGrqEyGz-f9=eM)aZf&D zpBp9sL4o3zH7xfBqxEv+)%%;Z4TK{R3Z_oBiHwP;`+DTmoCH?zD?WXMyZh`D}XW3u%(=FBVRt^W!Ib5fz?l=Qtl=f#u zf{a?eEW4X_gbX`}u2*UyW$0^G8Xe9f*1+B;MqoN< zS-kr)u7UAed^cRn|`SB$Ss8-QqS0FS=4m#@_N~v~HyEsvZ;j-~3 z=}eCYX@3%G1x-b5^*APSm)0& zw2GU%N5+pmwl&7L#EjN+QnmVrXoX^-u|X_G-gLow54BMyp1Lg7Un++%^BV1L)hVn8 zjkvX7p41o%Q*l|o(yhAPG1ninG6_E3zE)Q8j4fjvare4{wtnP-?ePI!uXr9Z97q=L zOI)J=!FfT=_G%ys(?%m08(XQ_Zkg!uTC!O0nRZlML#xbmJXg*l3XAK*?rH1RX)sbiRS{QJU znNmTtI7Vlj)%CY0>%w!+)g5BZne}XSeZhg@v2xQs-$IK$3{H=# zhEM42uFI@On|H{2@l@|SF1Fc?XH|!Lx(9XF;(Z5#1Y8S2+ScWnKn)8$=be#H4dERW zs*5C2k}PIpF4nR4#(D3Kb$>XITeanf<0T7+aU0PL@`+)=@};v~RIj7l6WP{Of1?UO)D-G%&SJYCG}!EaeUxD8o72nsSN! zvV-ZO(6B-FhnP%u$6VLj+r6;p)r>1|1Q#&B{ku$s)wHFmgSNPeuzkmiaZtAdCn%&9 zd@|(oWrg-&+{r2;M^v&eVi3>wJPeWr{^0H;tZHj@ zUKw-KkE1lruSdYmZxp~J$Xa^=X(zT7Zx_{j`>VX4Tcr)}k9Q?MU}TlO1YFB-xUos8 z>GE}}p4m@Tfq0JM5~wx+yXz0j&T+e$FG0!fXKkw1+{B*lU*7I-UhI7Cp9Tz~B-4;E z!sh{(eE6{SoG!D4RUB*x_Ymx$sl2z5`$T@fD_hxb|fgUW;fB*x?Z4KImjkkq65;?}t1@H~J6 zWBBtc$iEbae2%-r8N**6zygA{#D(dTXrWr}Mfn+VM-n8*d*{(iMLYBiMnXFxF(2W^ z*(`s$FIkP%AI@k&2&YFfua{pPg0ON6x2)cLJg_KgbPuJGEOJ9e-d_bq5E4VQoyiVZ z6yNW7N8K-P^U=ZP%f$87nJ)9+j>)z-J;FDs-)f@-pSx?NrN+mb*B?vlnEMR6c{@!C z)0%eRF?4=mc=A6qpIA*G2rN-4s~9@3&J*=l#@y7rj4cqlM^Rc8!koZ9c-B=adbJ=i za`}vU+DrwGFO=LY5uv`!^j7V+0dtC{YS||!bDO)v;?}V0dn}@wus1ReHTn3TCuVx-~v&iQk2PV z`}_kv={$|&)918Oh6#Ns#KgKB@i3`BV0^Jd^6p$Zg9I_k2K5)1n=JPF5&7=w;3?1h zKI^sYiq|pfV&y+%++;j8MIWmY&6-MDJ-oB56pI2%UkD)MA(heZI0rGFd&mUuD8yZ^ zAM8+Ol40(otZFPH25U{mQY$>wF~ZYI>$N9+S&~mCseVP`v)dmLF|Wu|pqs<(gDLuk+^JV4?=exg=Y4M8Lmz=x;z*{e zNPCQ|9^C+bZ<$B1$(+Pf&XSW`ud-Tl+Q%F1NjT57GyPbSw&_;~%6L~j-H1B8h}iyuf|$3S5#om>fDQbJrW_QG%e;b2qaqOApoEVRz%Q}3 z-MWZ7sJ-P<@ z^-Dj+b+&?Y;Fyc*g=WAgpMCOL`#P4%ZUBq(OK=iRKq}G6a=FxW2;giE8$edqH*%Vx z^v?I72pldOKCU&UwpsLp^jw$!hTxej|AyeSauY;PHqD>;wnbs+gJEAwHff`4izhA( z`g@?4a+CC1cSkZ*b;!if#6E$dzW-TtpeS1wlcSFK1gUezx%aT z+vSI*fOAd=|7ZV=ZnL;s1v^B1a7wvxGo*g={S-oQ+aw&%T&CX~+_EAC_3VDO!j-Ut zaNg_gbaM2W7@WEf4bs|(Ux=RMG$3N{>l)M3-3bdoi^5~+#Ruy?)H&~7(awsssiZvt zeVp1?i|=a4!b81_|q@SZPOd9SIgP^=BD>N@Y;c-k#CA1 zP(>emFq#Tv^HE&|&2V|0X5!t>KGeQ7>UetMLNFi$HoLhT&et!EBH_0yegu1SUc*22 zp?1ST8+U30d5{zBmuJYD&2doMVmQ|Yj|R?SIzuOvfs~LByIckAZ8!bi{u|IW*S9qV zJo`7*0)foAlQmkvXx>cEob*LXk*c)J$D`q1x373@HHzsfSGb{k@N;htUSF(StDKL^ z7M3sB;Gwbb+(K%h5DEqoSS!`q%nM$fp58}Sxkd@SLh4NK*BX!0ytsYK8JT^5wS!v3 zj2wgeiThd;W0eG@EtylNJ-RPn8*9Vj?RDKDyi%d95acgRPH&Xkr1g#+`h;z~An{-n zdTZl5GM{fXJ*LkM14K_$CDh_E5v_euvnKA59tF|H0nm5Dd~ik{=i1ZxKUm55|lH}kg|vQ@6R93nh0%soRLFB+rNRHICvE~=c}Cz zdLSTFpXqIzT??hugirZV z#{w{`-55UVcxSQYs5V_5TnA>M^PsEAO2!+;XD-^$%`~q&-KW%3VOd3#I!(4E=d=-APhHGJ@lFMr^Ih>N_{q{xThGzb!L5 zHdI#x`tfjU9US)KIj{VKRe`Z9=cr3dl;((pFe%Prx(NKbQ7|dbFDP$ z_0bifBqQ_37Gavd+{_S8c;8lp(uH}2nvt~|8zs>80f#nUcs+xmK3h|qI4l%V%UegWdte}89L0DU1KQWkQHA45i|$uD1)$#QOJ20ni} z>oc>r;5hfI;Ur`comf+mcv%BNWbh+@B->Xng)YYfDAVnGiv;I@pOd&yMpeWg@RKvI zW|8rRBSX>khJg^RsT zW|w41U{3QwC>_wbJDqi)>7&CE@D>OrYzfGr&ar?}Wz>uI_GhCsz=zE)xI&@ClQ?>n2Wuo!aZB(>tV-I5XW9@fK5&_6ijYn!1sOjWUEc$HsQa0O)^_@2G2#i&r4~ie#Qwq`nx84%xZV(EFqGw}$VhFQBGxxP4m%(BrddtZ&cI zSbl!&+Rww|+Dhd+hY})#-?Y3yqw+Xdao953?msAydi3$$-K907V-pX^{xf`a<$!cwQpC#RBwv`VN{5Ejh6Fe-msSMw7l zudubSbF>KzJ$^|*z}5Q6tJM!K%oj{Nm<7GtM?UfrDQ+Cc(=YG|kc?d}4i1FO7UjW4v>JwKJSQ7~ z-x&C{2e9h}OpXP=Oou@T71K?ycNyWOu>_c$+b>^bg`?}S+#EP%yxGcCI$$se`5j_} zOiel+GQDEM-6YF-eF<6U=vjF9y8M9wF$4n7vBdDb&~GsA_%|2_Cd=Hd9KkuIb7U{L z&FMOBen7HwEYz`S8}iS#LysM6M=mdy+vkIRfB^G;*y3sR9`mna@0PGKYQBVIZ>H7a zu-A+h^7hrhrxMm4)Ky)7kbT8)UImIwTErL;7!i=yO4$SHH2fz8nlHFYW#IQ zCN0}k50cR(M0oXOyQZUM_8j}3jjtF(?f%^QMp$5kWeFZdW)m#d>OCI<_WMyO{QC@K zPb0-!fmOH#xf}^)#$PWy2sFFDsX0XwK+QM1FgN-?SxYUY7hw9RY9sxNIbURL`Y@9` z1Vc>8b6v67FxvTq@W*Tszs5ze+~=iSnd}zKV1UnR5`D{sZ;t$`PBpOO#80;UFJwNg zLu}oN+xAV;*u}{G5C7gU-h5{&H8?ds%!^3%Ddb=cm>0wy46u0$h+pG};VF!gO4}hK z&#z_U{4LhM@%e~S<>`Mj^1wg%Tt%<&KK;L+iuenkFEP50AO9x;zhHxx{DaS*pE=#A z>gOr@{*#1n*lvJt`JnB!`)UWxBmV~c|AzKIy(2&~=^u354Yb|=i@LMILvR^ffxBU7 zEB^cSe-Qf{^Ka&kypB$3S#{??rti7YZ)jHiBNvTQb(YzByYxA&TJzO93MKCKQ|?(< z4J>2X$_ivpDf7H!IZP*Gb*_-*#BCzlQA*eVfT~tckH6AN#;CY7H4i4e#Xt%dh`Z|q ztmk-L1aFm_oW}fS_w(bvH#J)-g;Z*l9e7EIIIiW{)>cX|HN+^MB`ws27% zXSc{>9IDcW=Is&9Em$p9Wu8yeb`gdjbVIdRNX%SR9sVd52M4q78zrt!I;WX$-+Rz*uQit z_#~`pJhly-4pImlnv3Mm?j0{R*<^>DoLs$_bW*}Z4X|jsb5O` z3&bP`I94=RtR@Q74AjYj&T5T@O0`YIr&oE;7_!E)(5AO?9d%lhE6P8$D9tSze-*zA zzB$JJF48yGi@{*TFewbLUuIRAUTlv?a&ESLf2`CHT?wo{&5h8bY3Iucv2Wa`8%0^| z_cI1ZC_kkMwc)>2Q_>S%X3M_5G&YTnQ+j?kqhv1RY@Zy_HJ!6wk;mm48vjSFb9kvYGTMpauncEsm7IaESPiO=?gL`^Nv%F#m^<# zCjh!1ceFOM_nYtQ`32ypa>1_9Vf}L2Rs9ItW9%=J!DZGLiSDKqM0DCj0DFp9T_1Gg zKJL+O(>@qO+1SJ?ow{IIYN2-NCxydpw~)@`sDRnoUa*N&7<9fy0$r8GG8nsVR49XP zF!yn5(&8r__r3T13ZcjW3ZwTJRV`3_a4T01rXevo<7)1ByI+@DcWxe({88M&Uq7*k z!C=gS#|&}zW;IvwDl!pD0Um#lvOhe8XfU3#+T!#Ot_~AU`VlSW2{Bn~xe?fl2aCJQ zVkA10KdBoC>!WAqNxUJ&TMjG?1_|%8hQ=^D{nBki`9C?jVHLp9Pv*MOKJKP~-+1+> zbGoZUtlw#^%hz33Zub)~S4(4Lz>MV;=@0v zG~^Otw&a2NY}#m5`(4VEi79Y}QXz6y*|@ts8!qk7l0$;gWt*T+sklbEqdZAJjq}i(@CJfu(z3h0uHK|OsTRuk z@kSQJ&BQ4p$q&J3=C#HG4>;ajf2Kbay{*1Dfb+iyx`GMW0%OzQRpIS%9sBq7licIV zOf(^joouf#8v8EkJGOc6Utff$FIZw$E0btZW-Kc1kj6L<4>kqetgaSf3LEe^9&kNJ zT$l1?(&k3em=z~QA3p@Kn4aPAA9J(=Spt&K7(ep_E1Av6Ar-)xTSefob-!q^BvTQ- zbsCO$v}QTK5uM|C=96S_y7xUhKL0pooNVN1Ta}#nDOD4`@!@p7A-V`mkB?@PRBWsH zyqy_HAVtjEZKX0pEllIXh7=sndWu;yzI}JU0e@Y=I^>?g=JrFJ%sS`g#%bJ$ z1Mgz6m%Zq^A3KVan-9rlz~komnj1xvVE4?_rmEAkyTt=>FN}U~ztQ|}5A{GFQ+b8p zmTd88TsIRu?QQVt(WR-EoTA$^2A=CIir`|(l+TrGUAym_S(wS`XU*pm21ee+DerVR zq@ayF*zYT`GA53^>NbCNa4rzjE1fMZBRA@g#ED?=4@;sdfaQKnV4>1@ZsOmE$m6)x zVI=RKt};b)gA#~RDv=*vA?1jE;We~OV>U>wEKaSQVdWY>(DOHHZO-m@4tvo*?9brr zX`;418-L9f5`taqwrv0^T2tR|$@b+1!67B4W}ZKCQHM3p)Edp8izjlWtj*PGh~D1G z_o2r@@>OuTD#v8;crGznPp=_UsE?pEw;xxuFbQ4t=01Gp8H%Bdf<<59)ZJmLRd4-h zB1T>tP&w$WtE)?QFwqta@->;ktFDBgc#hWnKGjTrqv333^pu_e+XU}3%@8~YzLH=& z)_aW(c}DxA^SDCi`!RKsQMXSc&OqTe@ABUe-7&SUP^0qxQ&UWBp)7qu>FmrEKZ7>v zrtw6z(rFnwf_1cPdUKmuKM1}kx8lUvN z)`_3)3uTZ(MOz6Q?`JN*XDX~^G_b8Q&@o%fsovY~4_jYJ;4G`r|1=4+ZS@*8r_ZGa zuPn7IR%%NO7;bn-kB0p4@FGSd6Y&KP9I(puM)!x6HN&u;%vzc9dwldU%|M!LgicZfvB8t!_u-t@I> zFykCQ4p40q;LbW9!f3Qw9r!1?umTx&DbZnkbZf9A?w*IYn_6yR7;VzO5{|6sq*FJV zG)uPH!iWpxU6h-js(LiqpI5zZL5i0`iV!?M1MqKe-qYQ4Ua4GNF}*FW-2gq^!|e`} zz|Fi81DN%GzSM*(lXR~(Z#W(!8Gij{hRaWrGq2HrAb1TY+?UZuw9iLqYe|35_*TWP z{Ym^t7T=$E3@ehR1n$DOcofj2n~%r^ZULv90rXHiQWY7yK^}fVeCr_EUcwaj<6IFv z(QjiM8+N00^x*>3F_J?0JB`8i{9a{801Mjm^2XN32)~AuyTxJCnhUt-lVhW*7)+%VMqCR!?@o+fODgB+zl zw)h8OrRT$`u+OAs6d@&*0SA`;H?Pg2g{v-cM%*GsE7Z!dc90}l`0{kJd9fwvi${|A)wftP$b zo+o?HYO?1LCmK!yi7zaN<9cHILe!ig6RX4ti_Zc12bAZw(jGC|zz~(@?;rp*mj*Rj zE=`&T^_*gd6uT{IEe2efwDP3bILJvE@a+Fh%m2q3H-p5?|F{hu&}bL2WG*!|nf(_f zpQFncuG4~s=H=JmOIM+JQ;3+6o44orr#0>|Gr9F|YkagZ)*8w;J*EgvtHy&&zO;^F zT$_+Hg+Gr3-Ehy%baQ2KZ())U@o{yJ(MI<9HmQs%IF|eE%4Mza)&jyZH$x8PAmt+p zxm6^jf@B4Dmc(o~7Q@HK>z`h>Go@xdzOV1~lr#(wi|~NLtMQ=8w;RpkN>OMYe9!GL z^rI(a*I{xoZXsUbl6tzJQ*9@+3pa%>CcNlbO(DM6^`gA?jDX-cAh2ys}ZkvpMwGBi} zSg2I0mvpSQ+dNyY5yo`D=vV1U8INXa*$p+C4o#SYxZ3RlC(mlv=6TXD>iE#4M?QdW z3%G!wO(oBK1NAsve@lzJR2K5~wX;g}kRTmRW|&-|c^rDrIc6`EtL;+lr`DvOB4V4q zzh(aRC=&O@6eao$aK}-Wdf99dAwL^(t3~6JK+*aBM7&4Zb3_cSkuT_RCQ{jUkXz4e z*Z9N4$&^EE)RYcKQoIQ?!&rOp0xy5)o>5_MoP6ky`t6Mi^E~;RZQ-9X0iBLX7iwQ# z{>8*c;viP*;+YOJ%&B6%&Gl@@G9LETSL?dHecqq0v^zB=xfBnd#_9eXftYN`N z<4FJK4e7t3c=tq#1+$Kz_SwgyIMryi z`h&#@!;{8pKu_O1w`jRN_`CD<#u1KE{03_jBgKlcwXACPEyraMOKlLvSWOFf5jcdP zzzK%4f_ue3FBApmu4_U_ICDE_#?uP%O2cQ)gC8A{4Cnk_ezYhS&e+s@V|u@xsxk^h z+mKB#POcAN*BHhKcr}`@t07ziW=W|BJS?fw*OD9P-JMmUXpcPE6a0DVG3ZEwF=TLF zF~;5M503fijZZMq&$Dz7hgVj(;yQ;pL6mX6zo>q>G+?mVwchl{`bE=BHrMPAl$epZ zdo7{p)u1E59dUX-#uLnr1vRa1xAu9jm#|idz4iToEiB@b5PQ3vPZ+ZUu8jh#Y+F%0 z+F~)b4tVTEosV_3K>z1&_On4dE_I^VOyOH-v)uKDOGYz{t{?jJ{gXgu1vX{*i(aMu zvY!LuWHRIRk|D>xSh!wFfapgJG6E*<-)eXU`G2b6H!=TP4TsGm{H=!bfSM_VcyJ** z{Wil<$QY}k;$r7Prw1nWgBs#0KF4IfbNGiB4i5H6vJMM);XC+My)8LbFmZl?VQkjl z?s(YqAQ8mC;;@UMmEZ&sXt#FONtsr_KOe!s#eqIVli9-5F>INAA()TVRIuA7JC5FQ z&ri7GBlO%^sPBh-isNPYVNHAMu%Sct=&{Mgyd?=q0kcY(;rB$>%wIUbzuR^-FTOvP zp^O~wAp!1KvE9x2jpBowEF}^0AQ8$lE z*CW$HX?d&l%q=riZMUwzc;r^2%=OAcH)Fw<0Ov*tHZm@mO{L6hP zQmkT2{|r#z8{MvcD7+CZ6SCFLUE<9+t$XS;WN)q!HTUu4*-unL88}UutJM0=5az`f zJmE}*A1syY8x{DC*9h*ZVPxsq=zKgiaf|by#^1i5uiKtKU!BjSrzC~mwe^nPcoa$A z$M|C`-$I($$FF|lJKTaY-R<(%tWw>^-wof9m+qgSnUeOW)tOtsJv3O||Du7c5)8>` z52X>_FW0;*K>v2;MnQ5VQJ-CpzTZal6^y%|(|6^uE;F8%GOnxG;^{6QD6eevgXE%+ z6Fd4-mv9S7;o0FZnhX}coB~+#vW4JoKOX|S(l0;WW48z(r8``7IhOgVB zh5>E+jyj?8%c2j%TGk7QJJ~^E6WT#6ie!@MD=AA@M4^pAo-wsFknHTR=1U!dC6Pw> zG56?L@Xn8IB`EF8_KQCB3AE*wF0Z8 zN2vKYQD(yvqNbfN?YVYggHMBsyr+J2160(=JAQu?@4CRd%SIZHYy;6qbYo_SyrEeO zvo(d}eur5PDt3|_$ZjA58XbT3=z^6KY9u)alo>|qOL?Z0?q?poR3{oah>)3g;R%gy z_liX9?`tpvL{~5mxMO5LhuE-aTP!K?4nSqN029^S$m1wBaJ@hIcZw6-03$BmqaYO+ z@Mn<=LH(|KaBbB<<#mxHeTd_3+_F4inQ*l;Z@xV_<^-lcz<656^@Y=UB>!Nsd`9LT zx0dYglU44{TK|ow4O#&_eOGs!2ql+TJ}K!In)cUy(|Z`z+qf*G&e6RP5P|?jq14>% z4mVeXv&L%qzBgAkUv?gGzpCnUxXeB!p!oZF6~$v6R>vG|{X{vemC1$MGL2D`T;FAd zB=&v-U4-J6q6xSY6Y??HIuA@95Lm5?z*s$C#(lUEeP=!49J4M1a|YsiNb|6GgZX$= z`E+NVW93F6adl+TUw^0fOoB`rs3?V;%>Fet)8TkJT}Z`d2mfj|+Gye+Ip5V3e{EiR z9E5=A7L)aI@EQT+Yqm7z941T?D~E%^&ICi(;=N~omv6D-`gfJQa47C~NUs6hReCS# z(rR70nDoURk*-3)M=a5Gv+;V$~Ru}AHT&`;%}H;^y!k;<03h9Pm({^!7mJ5^)HyMyzqK2de0hXIH1v^Ya=j$ z)xW&yVu^5z_vO{d4>6k4JaB9-xQd}H0jr&FpN`<-7k_5103IT`UOXB$0a)LOmUlAd z)YjzRSpYbj#OL8M+v}Hn!F(Sxa{3NtFcK`jwm?clY=I2eQKVcTt?oOPaTbpEJP|u= zX1Q$u>i=#3%@4P!O$OAYbN{=hK|3j<@zWH4Zlss+6-^j6QvAwR!ME4_R+8o?rz;7i zbALD>6VdR^TCRo0+Dy#d^o{2+NzM1BI4v_Qv{hm5wy161RW)-EWG!Y7qw>dZWY3FE*1A6uc*o%2};jpA%Xy)y&6#HIGim&CZ@vqDX z#d`#5$bl1%meczDB#qDl7)cJ@pW}$q5S>D$Z}4a^4iirQC2GHYgy?!@A(9Um^m$8Y za6i3av#GW5c}pKlX0H|c5@p(R-tnx-S`L6=8%(p_22L4vo{4wte7&_@AIUgcz2H!-MDqF3X^Vs}lV`j|Dt-jSx`nP={S;gdP;J1cH?5vbc*v_F`;)=3V>GN+NN=7c>cz2@+sC%9FV(=fcf zES>vlp>EsLwtks>{$bxjmG#RxeE7$tb@-XPoAm``_mxAU*FxQ7IM#}+H_z>eeWCi- zIi!x!XF?02d%*SHi2ZiAwy;(+vu$sr!?a#yeBD&VoMzAhtFZ=jIHi1c)KM;QxEoQM zZcr0+ANp|#`42FihFUorQAbo*8GV7BNWYsh=g~r;l2{yW=K8m?tx|1#3S=aYqN;V= zskx$tYh^|d4|pv#b;BGjD^|MiJ=8SElO5|lAst)TM-`B7iyYcjSUa8T)vUewaF;Iw zO{$gx-*L7{+^O0I9(P-5LvH7S@4o#APtE)h*fAAqEBD7j-{X2+>GFf`74`n{)4=@X z1?Z+CTSI6YmH>b>dzE(wyYodkO=WnVo6h6S-cx-Re>Yf?f5MDK|e8%~&*f z+{0;7+vJb#mYekrKB=|ozVrE%DBkp(QEvM^+*N(_R?XVT&*kA0}a-GKU7tOQ+})50++|5+EE^!T*sgQ;Br$=M>k0*o1b#_e7O1# zg}cx#w@44KYhtFnsOH5krgok-fP2uG5_)N&ukbEI(#3oK8!M${b< ziXgN)i&V#JI$IoCSTzbOOv8lmi@SB5J@v99vJ!htd6`!ykyP}Bh(+dnrbhBV_3rAv zKt)p7)M~;Y?Ie70gNlFZ-L3!7yTj@mno*Ex`+#_r;L$@x()v#)8oCfZtRWkE3}NoI@a9a!26H_za8)mNhZ^| zCD+}@>xuU_S2C*BeE!r)x2I(R0bx9fw&Ex$D!ik)S$ek!C|$?Qsx72W{a z)cVUG%~M?1Fh(%8-ip}jI zHZG0BIW>bSMEaH&#V&j7g@<9AV?z%mc;$W{$@DE`}Go|!Yp6<(oBlQ zd~(UKg}3D(0eL9+Z}>cZa3_@xLsIGMU>!w+Ju+R8#kxz;Mg{Jw0IJU5wIetCt@H8b zkH4M^amtqc=^6kLV4HkLOlDHw8n6w+B@Dfm>ZgMTW=ro&*)rCTmuB*NmCCeK2~KZP-KK*b?#~1mT;pdF?${+R&o_-MLbr2<*EY16qIY5#V)9p|+eei||9P^DH52t{hTjsTT`S$BwVEEAP)s`RW_ zow@8O#2(VGpu49}u2F}0_}_sVSPJ>JXc~o|`Ady+WeN$n)v?U#v-H-)6thKLxD}s7)6oOU#;^3tKx|QU)1l4ZgJW ztJ>Z+-`=|JjlT>qSuRN+MACfKIC|Kb3Q{Uj!~_qO_kT*WgySm4?^wFUOqJBX0hqC< zV89`x;Z?$Z11K1r+wE-)vGLjooOGmS(`euYtipF0ZhHZ6r-{ErZW{wB2C`*3oZUh( z+s4m5C;vmE*`PfD-7C`iHvXz>0)NN{Jvo)Nxa_Iv!{#96gN;e=yDaj)OSj9usr+8_ z*3zMz*lZOCrsIGEX&Rlu-jYs2{yU1$%L|XDkLFT;x+xm^i1hY&H!GqDW*wr%W1x+9Eq z3*3T##X1=*?_|hhL@L<;KUkjJX0H0}?}!p0+q=h95~YTGhcE7)&H7HXl$A~d1WzSU ztSpVitTjB8+z`e($0zuENHGG3_sj%8hj9@a(~NjsM*FeUsBNZ6I-WCDFgp*KcJ!bw zT+R9Z>fT8TK~y$;9vE@#76<#UI*aPmh5IiX%78{Kz3d;zdHY`U3L>MJHv zb}&ktNc3)a?isI;7a#l}l*_ba8^vQu=pUewnFe{%EB=I(D0Nmm7#Do5caskR3Yd|H zKHWwz+3fcFvuGcugck~rTh2?~;eo-(pqrWPHnrTi$lATV7WwOxDwWhHLfGvvV9r&_ zgISG@9DYXK1``O&=DJ$geiV1$%pfXp!upo0D;9w@qZ5BG>;7Ut~A)Zl{gy|Mdfj+i?Pxk5Hg;LVGRe{g$A^jErT&77cfhaT z_BF%**w!^Q(l;my11@@vJTggJKDEvt($+*5G!z!o~@C?3)m!Y`GJkR7r6!j4G zb=hfQ`zf>U>?WGp8>#6Nj&SuCX*Q(eCCJfnfz6$2?>*itpqSlZ?{dM&4ucGS?4dxqTMkR-{vN8bWXljXxxD9}A*$?GeXY%}#g~I-vU^lZ_b_eVaUWc~J-bXy$j( z+VEGkt%cJ_V*2nD7!a{6BiDlfx;~%9_RT}=p_q7+Kn^m!#Bvdr&RWbI#FY0TPKKaz z0I>w|Mt0x|k}wg9MTj|FiGOGR9EsGU1iAB(skU#`5U$Q47+ndkX(A+adX&*<$ehS; zebIhrhAEz#_cV-7E!?D=p8F3_*0dNr#c}7EnEMw{#`tt6g-6VG_1Zk8=7hH@S)7KP z_&YddfQ#dz_QSPQ70)Tv^zuC$JPPcuVMg{w2~{H^#0}7^H;Ay|&4v&AKh~G-m%RiHY)M)6MZKZ&`GT}G4R@; zk-qsKOj!>ra@(Aa12F*8h!`&K^*73Ml0q~A07Vwky}W*{QqTF>$N}HRp;i6UC^;d z!-XRD^HCCJ1`*p)4-$Xa&0Y;AS||J-AMATb*k8fj_fGs3(pBGu0}d986q`r4!h)C4H}0gzL>IBt`S*P4+IFg91+d-`9Fd9iXwf2N~I*ln_v6Ty!3x?aMoE!|CK-4*Wt15Qa)_n%O4*lPGfs|4o!-%6W*rpGu#)ApXss zo``zGe7g||LPnd+F!3aBg@(s34deh5ozfV%Pdf-mLnn8_0*W3UVq1w2>VFn^;>{9? zZn|q35K=XLxRtw!J!H3!?>1TQKYy4^r2>ls@9zlz@b)LQ_@Ja6j*5rs{M_!Roi9!C zbA7sgM{#)Jpxz!u6J2D`7j31cV3R-A6zOzo1syS%0fTyris6jGxp`W?;pIBn+Q?z_ zKY;Sx7gXuD0-0sR<|pUw5=xL%*vFf;+INC|(Rk;@#)H7b@ zxO@%O--UncrLFjE;e7Wc1Hxo@+#d&uf=*4If{8iDe-!cnL|-9({7LQ9M?bIybpgJU z^aTDYQ!o__Iq=C+R_h@2VZR$#88acx2-G$b(oKf)GgD^P$&fuR<`w-T!Y8Y;$Ix;i z;PBiaWUGo;VbdTY@MI+-rk>mHO1r2~|m{^c_?u`v)a$y7QEe1hF)CZ2Mg;rtHzC4#!w#4;HQU2f=)$Pgwz-eq|Kaw5~JkU#*bNuhIu(@j$(- z_UNn)c}6EgR`~cm9oq#d!mf#AtHUCcX3^T5VZ0m)6ajC}{g?FBs%vOa29g8%_9cVu zU2E)j#!&|~JyOAn^hSRJWrb>{al*--N08nd`PdkX`h9aae2r;Z}(NGwFX3sgo0&%ygKa^-r?mE$D z%_Rn;EJ0on4LNdDpWMe58~U*QcjrE^+INKnz_6OuGcy-Kgg7(xyLmpFYCL729`dOz zXd}9u03^Kma?}XoN4 zjb3J_QE#;+Ox9Z$XI^?`dv}DqQ7!)b<5c{qT_ZC%+&X{#F6P;P@SY=P<*av$mKb2C;`(-qOzOSRtW(7|g?$jB6(8Y}s7^1{Z z_)E3wu>;2e3cchjmAzyG1wqv$YJuiD6IiPnjZ}-C-`oU^`>d1qB#d-LmR;;G{VHMUR$93`-1^agLA=}Tum?GWN zzU_DGg;Fnl>)U?|iQqc83;Y{>Zdtu}h{4LU9LeH*NhyaPYq|ucWf-Mn3xGj`VUsx* z+dYh zTHSBAHIRfQ(Nv_*SLBU-lBKw-)%tvE#A-PM@$}7HSG!pzyWh*&*u1aCWuhq`)e72sA(hZ0p=M^Sp4eV2{-GXxk5dPEP~+?chS zzgv<=+$n2o#Xl22dx)3BRXN*-$fOxW5_PNLwm1m?Lz(W@Gy9tL%b6zs!TDZClh$XWMADCj;wL@^BUs>yAE+d0m8ktX4bAB=n6` zfDf5WPn)V;;i z6qYk*EHRl$yD`pytYsMff~I72#{PfuYUDq7bpqYJw#h*d za|F~C4wKB-^BUi67_vvtaMrsax)&#Z0?V14PXpBYRA#TI?P+bNPRi5%K#t^n6N}NX z)rm~9OiTFM$l}ae>P1p9mO`#+CZnZPvd`$zYTc0Ow88Hn$#P1^QM`~_=brxLs&WW9 z{$bm!I@Fi<6T)DxlvE3`RSEE)Mr~0@O^?ogu*&M+?O3lR1}`b6Dp$iib;j(bs_N1w z_%jB&*JvT?QYD(=j6dQ#o*Zeg`7F75i%*QUM-xst9DVq^O@gelg@8X^Adh2ubFxrY zC?xiWP968(I(4OJlg&{0k8`j4l*CY=Ps0i%kl6%I=52r^gegwFRT(&UpEBspiN}?#@&;1sSE`N3L z8F8z!P`jRQmC%Smr=h4{E%nGde^lXDBzRl)aL%0XZ=qVicQq1kT7JS;+_W_a6 z62QuNKbGFRwCl8~C{#2q%5$FP1Es_??1bJ&1bgkarx>cNxbSK7sn6~;CNvKc?H%J# zBP*oau3mZHZc;E<{KP|bEGH-Phhl}`zfOoiW6dVRQw#;=1Po;Qx(l4XNUjP!NXT*n z8H)SEJNqurYW+umkMB9#vf5-nzZ}ez>>%!oyX|5I?XttQYT&(<7O+|*dTuMq7hEPC zO2cQb)3v6ud`h04G97&~9DQ-@)uDNkH-Z8HYdpC$gEQf~)+Sda{5XZ^*ZV%7GSjs& zPnj2SLS=9Qw8;Z*1vufu%Uz%RZT)`K$&C!PGSv@{1GTV*s`B?Vk((J}K)BHA))ccf zUih&;+FBr0|9Ndn(_P;G3XL*wz>;WXDNh>u(rJHJwo!`lOMX1Yk4G#4hoXZXJ#UYB zzqW^$BTl5gqqB&1Sk73@$N~&&9y8r%^Eo-7;8L<$VsaUB>TGRsC0e)WOwRJI!wCJJ zQF{l{@nxB7W+allMj*8uYDJq`Db-?9cg)%oym^hSvYw4JZ_Bl4Q_{U&`-fx=icI(1;26qT{~K|$ z0@9bL&X9jYCvXSYX_4b0#P_vV6liKlg^Z}JzOZu^LX5*QByQT0qsws ztVjdIbuRCRTJzO{R%(^nR7NN7Ic?Vgkdz6pDzmnbN{6jM!&&d!vehBI%3q?jI_+=K zI-3_N5Mjj=Ydqw?@%AzS>7+eW^v_&4WF%p>@B}hN|FX5BG_LDg$*E>f)3O?qR;Zn3 zTeXM@x87llppD;*+kEn~P3!7hZ z8vb3f23+LZCvGjoKP78WoZ?@F5@PVjGylH}C2WTWk6n5{4XH&VnrDc1Zndj@Z4X%E z+=6O4D91ey?$qR|Pvx}IZLt5w+LzlL?mceYv`}|4%+Yfd8uU=_xxII!Qy9{uW-KKe ztiFuFhAYIb#cXX%hp{vD>yQt0dA5CoWTOb=OZY+usG+QtmRV|0fn^qDAJC%S{HJBj zc}Vj(MWraLRd02HPeJ!dC{Ttnh2P(yE49!^xHzb5>g!nc#Sd9d-HETCQW&TnLh=*} zynxw8B$;H9U;q7hUF$RTp`vT7LlFsBZCx!)n_SJT`>m~>O+IAd+2Ox=8ZaOq?oiwm zon=fLBB5ko9&;a;NSBJ-2kN0}d8g4lC?&*=dkI_yd#B?pfJXha1e{;kw&~cw$P0Y9 zA)g?fx(*adj$Kg?$B_7=n(G9pZ#{&iKxPccJF_pMV=>A96%=$#XXNZ7PEYg9=KN1b5i(z zFmulP=a~o+ZoeztkA$&87F`c)5gj9GTq|41d9cC~$cf?vo*xCmZ3+{}W}-zT;K4Gm zxr*9zzr&#*NvQmLpv0k97&!q^kX<01U4xOF5;->mPVjf9Tcp2SI)-2I^ASpzcu?L- zk@lsSO(AO#yi)KvWT#f6m^B;4zL~-$yX|LhPZvw9Ns`6#;NYxmdLlX66yI-R7Db0# zgfht~Uf%`XYYp}dm?;j;>}{$|yW^^A_aCo!v+X+-$uY0$Yf%(=-n&i zs+g;0wu-s11d7Qr^$%ZYP~0< z&ki9o{@CUv3U}=t(Xx%!#sf=9`j@61cS)Zy_l*1aUOepoR=yTl`$N7SChgD<>5m!v zSBj+byaq^--~o3x`N%+Rutr+$9wSPk93z&}bv5jnTfsdB!|NlW0O=?V1WMNb=#l(8 z6942=)e(J(7gvO-Q>v#XwH5a(NAlaeCjP^`hNy<{hhvuXgM~nSqm`~I#42EA?{2gbbgvw6fIWR0^Xu12qxvGzAL*XFe$2M zDgZPbO*@Bo9f-O+VZGVP(o|1(G<|7Q<2cqM2}$^8jD*edOMpBEhGA**WxT}WbdTS@ zJU>BjUZPr&kbCF5i)Jnp3e!J$wMhewNxZl7BA|)k2B#+_IEbpsWitZgv{tesglQP%LIhsD9&E$I2IF84Na2HY>+4M~yVSd_8^)nk@Fx|5-m-`$nneRTT zmP)_%4IUR8yz!WPGl>ia>4uPZp?sE7{-Q?g65puh(`|;wX2g|k`h=dxn|!j^a;Icm ziCdHdF$O~KmROR_y^b-A;dg)f*7=3h+DU@S4c0$j5z(%UrI&53kuIE$)qhsJJ-U9; zij^Zlax~HTGQMktswn<>+tKM6j0QA)}6Lo5{WN#WFlB$ZXZ? zX9=P&t=}KgM;D8nQ^X>6{|<3OHwAPei1ad)fEiP;>nmM&=q-BhzuSYeHr4nLB_R*O zO`iEy-+|KmeBTQm9LzgVY<(p^zU9qd{}piB(EdG+-HtUNyM0{{eDH*C)>V zTiDB)l)us=LP7*6;?Wq!`0-vbwMqnmnK5|HH(2_<7vfO2$Hr&> zQm)hHLH?I0V_<2r~#X2ZcpkgKTP4^9cG7kUpDNO1q3vm-~k|06rnZxNhQ z^5t8ARRE`A7J17_yL@_V`XXNeKuj$NVn#T=3TTo?T%ydpm=C$w1P(Yj8OKb6JbH~D zA0+8=l|;P7LRaTcH%$c4QqHG)DC8PVB%yWg#+pWvq|HE6MUBg7hliXeW8 z*SJ491(r|3opLroymD-Fr6;&(KX_61<~IM9Eb-0gdz~01afQZm=7{V0%P6;p2J>4= z|0P~OSW8K+=t&EZ8-T@K_6xil4<(G}eJC1d+<;?o4`z;RKfM5)>uuza??FGs8o1-; z-%>(E{@E9)5zs?~Tw%Ed)2{xzF!JMP&2*85^i+W%W`?U?OdP6(<9i_$Z|{B`q|hb1 zDLw?t*j({{1h!G;MHDy4!qK_bzcMRAkU+=!qgG&aDn}74#3?8tq@YbUPPZh$K~~P*8u^LJ$oN59Ds_`$oe1>@F_-} zk6LTaPnBy?2x?S|G47KC5cT(T-7{bXrInGKsXYV;_;Uty-r%F$l*8`IVO}9^v{U_r z@8$LO16*meuyjp|0y_lvRub=Nls=jv!H#^EQTltQoEsrLdIyXB<||30K~k1+LF{*? z$bsx%w?2l>SP#8v{OU`!VBODy$4z-~>(}y&iyMWsJ(R#@#{xQUe9Ob4PuU1oJ8X~S zPc&3W6S*(>lq(OclyT_kq+wolaS0|=IQU7dh^+&UP1~G;LHRzL6#VY|C@+ZUU)W1u zeQ(Oa+ahwq5k))aJ#X z+sI>xyTLtyVk;dJ%6B*9gQ7sFXU7=VF>L*n0K{}t38N9_@moRc5n+L7BgT7tS zk}6gU1}D+J%YSH|KtjY*Y;`5sn7)DhD5<) zn7Ne3O$ll6kbD-6{$BLiMbV4VyAJmQ75U1sn z3{NV49((>YfA_#?6!Z`uGzjk8VSwB)G!o=#XWHe*g8IN^(DW0QDM7QvpzWpUrI&;x z@{6JfbU$Sc-hd)47kcJPL<<3*hZ&-zyY_wV;q}@M$j6bpgHR3K4!k#v!OU>Os?x-a zs5Q(mex0abpJ7Qa*m0|9RK{j5L2!%RXL6APyL{x)t^G@di{dqsn+D$%pSIr&ZoPTw z4yPCa{eAg|ZTcxuK;P_R+ov6*vqI~DLZ7);7?4Z12E^;O_4ix`-WhHiZ%w@yWczSd zKxL;b&RS+-bU{U$7$;d##uBcl+@L+Yr)|U{vRlTL4P0mJb{#hhv8l<#sJ7sUPPlB) zI&9EqBl|$vr81OFo!6(LiJwvV#j-@EO(yTE<}>)8mtvPcmBt7@o9x6_GlV~{_iWGx z1rjehDk=> ztlqV2c<1((u=@mho_SvtX|NZ=XP%9W2Bw);PdvY$>oh5f{%r>G ziDCQ2vO7@vo`ikg?9|oyHN&S-f#}D?m6eDLxY@g+h#_KU8Gb*d~0Lh7|fd~3fJ2mgi8g8 zC$qJgn46nHDp0-<(zKr2E`zE0%WGIRw*zPVb7zl$rgl^E`xl z&$q4x6$^oxZH4}%y-44GC_C+S_~7suggrf#9$~69gWjOVh~1v7kiVW};M+77Wk&6h zelP9HT+pgAy%br>96{C&862xu<`|6QiFxWyjDH5;8I-D)oP8mSa1JY6iL zzYZoA0(;`(ba!1CIB0K+APLCizVP#9JYGgZ%kSk^1c3i^mw&uHDaaD0+yYhyO4j92 zd25e-f!@>6Y<0kPKEEuq{aoi|NLgSx7ht~J4+3lgWMZ>iNgk}}toIrqd2HK@c1z^& z6%t#vjK~h^M5Wi9)~tzJXn%wGoG6FKBSi{*TZ3uXL+Tj-!%zLPu*BPm6+roa8T>H>%wlpD6al% z3J%5i!r~0Q$#eJnH0W*wSm7`nUsNw{<(l!Fyzpl(W3Xd`?mXQNv&LJU$^4cd_wO{D z%>1b!8s@)CBMv5$7A_0C-g4ng_r>UT8s5XJyk+6BZh}K&^zq6hdo2KBA4)SgIuKVm zR>6ZRP0N^02i>qZT>0(1;E;L!g*`?jJ<>pvfOYN`L0?)ttAPG}(Mp@M^kmcJskYdF zm|VKtyweK^Ef*@dc)#JkK)*y8kIxuxJ!LLW3+&TH7RCgy@zAYWQhKc>H}7MPnX=$3 z|JB(KaH+Hd?}O!U@*l_$}Dhv+9jKzH`ST_-V@ldp1KGJvk4RgJ5iciQL!TweJ|+#P;#7U1u<6DKnl@ z$-I#IQ=X)JrbCC50+`#AJVz8^J^eVV^|`>t*30Hk#KstOA5}{0h6znn>*-@&0z;=Z zWBU?moDas^II?ChK%8eOO4_{i#%!nypKtk$UT4H3W25l--;WzFR~~paaIo5uJlh|T z{aAdz_Ny>My7|dCeZ4KNyxM@pbkXRMJU`G9vp@O(HQLST^W`a!qmN8s=k@m#meqPt z0(M~SudXz+`lx{D+iIA4V?VEHti9X4?fbTNkDu?JBZWw~T!=eooy8hh4QyUybC;)0 zrYp!wp|6V3Iy(YJmx5etvevq$&;65sm$VZ%_dOjbNY~{mHdkVOOpLOnoEbfN5UTC- z_Qw6a={zGGvBZ>Cm5y~6icZ95tK7fbBvLzKB-4f)MdI-|gaK(1sveC2>Sd={UHk!^ zR|0LApD==Pn=Ar;$ua~yQd_w-%zWH>NZNW_MLYie8-b&@BR>Tr5~;t*_A$`W8cv>4 zMlT^ZKEUHn{qXiQwmrxnh_5Le4CVU(ni%)!+Zd6wH_;VJ@`X8tE}cgUtqCX+D;_`a zqbRu?AE?%+sZ={*2S@{Dzk^DfYnp&zSFzQo&r0#*Omx%I*hzNEo-<|gr!{ch_mG)O z7{h7CW5uf+Q835Y0v-@!ABY{EIS&~lsCj}Z51Jh3$qi*diM`~AF2--&U&mUr zJ|vkbAfC+=!5(+Rf00*Xbt|0DZeH)gW-`EH<}&UUT9m*y0)@f z=Ar2Ms8}ZKG#@g(JSYs<2OW5q1hpb1*+fZG>*|9csWdOUSI}#`@#O5vnc`RY=lPnq zT!)@TD0c{=EM_~bip#_**&bO)gd{BhX zxH}a5grOljG<02NZinx4R(!mz-$Ym0*lFFK%t|u+&^uf!`GOUmG_Q?ljIxRE>m3?t z)aVdG5ru8;wd`ZFg$&0MTX;H<7I`;Y502}O34zT)lRyP+Mh2%9WQxb<#3Y3-nV1zu zDUIdG#aN$lV zkg=H~xOIYJ*?!s?LEkJAE92(nu*t>cC?Dd*q+~V0k0{^{J@P9J&4G2b%iE#vxeHPJ zmAoiGF`{%)Yng#5Z;paZ6oAC zrof6zy4n2zu6J8siBj9PcDEtex{W}aoX$zSm0I$()4J=vEc>ssgMD+l==vc*8e zC<(`^aEP!rwJ=qKZA#5gPt{bLe;b7IK*WBt?A{^I`Gqe!)m&(-3};>W#R24S63%-ImyLZFrLp7s$;4 zo|nDwLv2UJr)ifWo?2`UCsJVCFSm{DX8c28Bvxo91D~VhF1yzw@Xlez+%7WH2Vf$V zVH~ks4boF-AV|@@O9g+DSP}VBRm;17kdY)k2G*6FrTgj4CvTdOu zJcD)-Pb{etuxpHRNZX$&EK$F|>rWv4U{iR%ZsOlbDE+zGiYmabd$&Jh=_?C$IQ|ol z?@RjdxsLMz?4Wz>CUq36X|IY$C@5EV;1_DqVilGBA&c5HzL>#JhH|JA?YfODuoAZm zHM?NPpFa?S3V~BgWAr0o!18+D*jgcHekcksKmapd`8r=^@X3MOOF{RM)NW2#5nSjV zoX^LKXAlwdRb@C+3d$0uA3d?pxP=G|bUOlgqR~j8L)-(LeqNYc4!`+27mL|?TRa9i zqYUK>Iii!Y;&Q|JdquwzogW(wuCJN&Itrs)F5|pHpvSz92d;_+t(-e~XOvmhxf9aH zhi75cnf%^2oqRko!aOwx(^aX3Sov_L3t8dlOCe81Z=>DvPq?^UPN!ajRgd;C1$(FU z{1w4yk?i9Y$dD7DGQk!1mv^)t220rMyLzR?jj<|Ln%qTvLe4xtBxjYd1J9vepP+{K zTjn#jk=J+6cg&meLQVc^pJB^IV1%%E1>*`Maq$bXG|pkX`C6PZf*D~pSv|}?;wpS7 z`RiFDolXYpeE4kJl2=Tb*vA|h6sYn%gC(@)D5}QW>6qC<=?N?qBlY9n;JYP25}e3g z>J^G1gtohj5O{XJi40;S3esPYe``KJKfp^MeQA)(rsPZo^a&|{-nx?v8!)@^>ZPu> zdWy$d81j^5G8Zss;coZ7BUob+%NU?0A{VS4sh&)&AYFL-fx}H_eKR*;SOf}8$c4Qi z%KgA`1k{yN?_^AUp0fMKi4}@paEDQWcbn@y@Ndfvv*9%JG3N>~Y4iXlAGIpxQ^3xA z0@fi!1?gbB!+m^E5H*XA4GVzbD0i zIU8Lj7e6%zuUHga&OJw@f*z#rPe6ki6#vGu4fBTkASB6ty$_fXB9p7zDmL--j+rQC)kNY<@CyC*>CheSjD7?tz9s@LfWjERh@);#Q=1L(F+m z5LG0mYaeAMTS86Sk@;HSkVf5@+xwyj5~>eajN3G-7^Ii#MdE@h9E4?V`IGLyUU|Z} zrYMK7aEFK~&ZztXuq6GKa5K>&P0z6H$A}tE(AjKPqCb1jB~!+39K_@KyKHz2eaG+m z*oRnRsv}|60D{TWOJPLq*5KY%QA(#d^zH2G16oSd_FeJzYn~4tI~W&qBSJOKltaSn zH~xXhhue=U)8Zo%m+D;qXaRttLZ98&li@Y_8-gLY2KGS&rS`!Q8pWR{|C)eRj`n>S zfFkT{WD4Ehq1L;6y}gbz8SptFIw!2l|l;dQ<&jHkzOzDlc|GM zP7H7qoOtFO9YF7iM%5~HX|fy47Xxy;(4Z z{z1J1#8=V74~ghRT7v@EyvFyj)gY~#P8d`rESQ+5uaIgf*Q? zY{ZM-7h&!Zy9$dAVK@3o3>)IL*x^h7O%6g>K8tfyk=;hyaghR( zOOF`N4Fb#pCcwdB=9bJq(04CI%xEbUVh_>HPZZ@2oESp?HB&p8SNQWpf@#Ef_kGy8 zvMBcHY7V>)H#wc3QhuUNP>TAs@dxj*bi&oOrWt_}5>D^$2Z>c{@mQPfRvP7@MIdxjGg`E% zU(40Toz)d~q$*JX5iQrYns43Q=30cvebf)JH#Yh?g5#y;4pSB~n-mXk(0q|LW_snm zkeb!<=o4JTzTD2*gAl|64$k7EBU2!IHu&QW5?Z5+b`z{a5f&mK{qLZGChjwb|X*myQ&g=9fI>G zCMLgNPk_^^6FNuR>MnK!lH8oC5%740`G4A`k<7=>`zoC^vGQG1lN`^O*Pv77At{bZ zBfE1j341d58Wc+l)=J#n%>n+C5mG%&Flb2;`cLjs{EsnI!d!dmJG}lVL@p}M+^PiJ zv}$!EA!8GK5Idb4?ar449^L!MVGxN-Tf4A7AVX%FO;QOmIM@zGQRCg$LHVGR%p8$D zl|Db3tG2FxcIgHu8X9o>5mR_vS1jbV6mNVtWjvX^@SI0+ta50QdSr7#`VZnE(=Z^JU6dJ(? zjUEJIR%{iTtOjR(Op+5Az)To*+U^SztZpD-MJr2VfPj6jq@&>Pi)e#0J8{6@+e7SQ z0XOA{|A!7xFU=D50i}xUtrSLw^CzMgb$9H0R%C?{^cLzjALo!|OR&>;2VsnjCIP%k zGLL41`OX6~ZFt<>@;Ah6fyb-#W+y8!?(bge0ACRU{>l+hFGp_e5V#|37>t;;lJc>k z#Mecd1jZ?<=hFWmqJqvMMh^CPxMzme@K?lj&C z+TXVSkOdzjs**$@`dKbd3?^zv| z9X2XI1FIGCxlih(<=!~UC8>9X^gA4+u6-m`=lAsa1LXwZ;dKnz6Ui<*CB6hkGNyzl z6kcM|$k=bpZ)yLF+&W(bnbucA8vcm+v+WwO7 z)7li=h=DG!=z5*U$5THs8+FLXa1t1qRwTv7s5!8N&y~lbt5N{blCra^&67_4_O?|@ zSFJFiFXlpLxxO=_@9-tN@YH-gj5(+^8XcdzG7G5rk_ZUUK0?meoWTp}H@coO+`FD0 z*}d9aTfHZ&qP)ROYR@nG!me=EC5@cno%-a(Vvkuy--s)oR#CWRUg=yGN?O~?T}QgbTnV}O;$Mz^X3DhGR$ijGHF4r`R;dm0q&#nF6A05GNW%uOj%(75@!R_|H3?07X+ajGYk!0-#|j(L95&Ak}L zr5f84nJ2ux-Rv{F%WjJ%a6Z&5pd*~DZ^Jiw)#0r?p98`PvrfRGTrHG;;NHxhz8Hc6 zMUl=Eji>KtLiNCL=oYQIL}II>Z>IApD57!_gH|R(rhq&mBVRU|w;SynF2=mqS*X~>a*{81}t_QPiY~&_Cb%7{F{U9AcfS*cb zVWUQ$p|7s?Q8lZHB+!oUYYLTT@wljm#5Gn1#}spm*({KyJrAavAgwoCp#mvEZA%LF zbrJ4d4x|Ka{zAfGB7v{;LRsbrK{4PtegObWs%*Qt?lZ#o>+-@4>Fesa_D0d8bMx>N-h3ZuX6QF7i6j0HEGY}!RE9ah_KIyJDYq{G3^ttr7bLU%0 z$!)in_07T)1%5Byd%&G*?vu;Og829-uohmD|3LR|42*3ZK@Kx_;b(;YJ; z0`7a@0Q>6^m!tCAwHpKU4ekTKTj*8y8EZjpFY7@qOdCR^{p>X5Z|C)8koFy9wp++Z zyd}3}3_?4FahWyS&ih%P9QN^DP`eF`;7_#_PrU9$(}dF?-(sR$(qD#_CxN{F=-RjM zHx&AA9%FWNMjXJf8KSz@)tcjvx*wxV2|G*i za00|Rv9WdOHX&}KfTx}@cfV9kt_bvveHO#$$#Z_o=^?sQ98D6{dqF~GhHNwN5x$Xo zSL->cUTNIS4!)cMdT(my#agG+6Kxy;8b7&LpGkAw5ZuB41%xY;g}P2)S^xeQ5|(cJg@hXq)hep9 zY@eLrajE!K8qAo@85g(AWHv!tPF6ACL~FQ+0=AmGjlWzuTGcEMQe702mlR15F` zIz)C`g?{5e@|X|MVSj1Bsi5+dbi|loCNz3t%;5TDu!zLSHmW zL2C4Q z+CzSPPB;>}&vj58Oy4HGsr>j|H>NZJII=3EiGg(hPMO3cH79ia3f;k|l-qKtNY7Eb zQ~DkroY7Nof_M@oo&12O^O*HKd$y`A(B~hzMzo@FsxF8_`qhLTaN?uFMe#H1=N}l==!QB$jF3GdyBQ)K1RxW9dAc`Rwlv-T!Iip3r;DQ2@X$mJ=X6RqQ^mz<;XSod z0ZF@0AZ%6KTQ`SN#pcW{#O{5|lVt@2w3%~rvSW=VH-0w5t#6V;?9+L970YrR&JxKa z!7?bD^Iy~UyJCz2tjCM6`Sib5IHTICNuelwuH9F4NfsA86Rcn_(-M)!7)7;&MrAEx zmv7^6H$cQ=Pi^^9o2|(^Aq)sB(E_63DC8KySna46Tomf>V$OWdclY?5pK};@G3AXZ z#bsp5zTEY@M=!fmWA=6N=|S>_C2a!l-Zfxxnu~DtLcl7j1#OpZo1mb9{wq>YT(;62 zq+bBp_78vzfiv$Ys1?wuR`SAeWjMwl_ef9-(IyfH_nAu;%@qcnYJ<>t$flTif)hhH z)R%_{V7e4k5#osWXrd_kmMtBaD8Zw#RH;=yTmTL<_m zH2ejje_Y#=(<-`(S7XkV)W9u`N!-_l8&YeBARg^~s$qr~5d`kGDDnK58-Vpd%+VIp z#a)h@6ixPo_o@jh_a96Xas+bNg{}qq7=Y;0uO*LUdhhE+w6`Kaes?ZaCd2fik3ZK zC>G(jG9X15`_6Umq0W+Jf|#CS+=|O#;H@Ye<}y2NCt=v8OEzjK)%7$ z?>ZF0R*pav>>%=ch&mSQ>XRkDN=wPv{)9PMSMtMYWB$K6w1u9AXm(XtsO+l{1^c|g zkelGf752M`s*Bw;0f?&M?qsgz$!6Diq!6A+7!o=#l@xS^{=~q?8wp&!$Z%$2*RGd9 zyAaU&o!#x+RKp7Z>x2ac`PbN7j|C_YQ3gHuu{#j@>CZFjCGyQ;8d4X-t|Gh12{Ktp zI}FcWkbk0EN{otfi`7uWc`PAa@QhkB6w)b;^`jiVF5T;b0RawA;ssx)@Xq|e&j>p8 zposbTJ31d7{|ocZM{rU4H3cE|ItE-ruf_*%pU0#fPI5 zg%~-$ycdKA-RJkb`IxO;BM2D)r3Cs-Fl4=;3k*!ujlf2SlvrU_I|85fJ5^z?pGSk` zOtCDLFHyt9@>f7t2$p>FH?NM2CCdIdac%hl@>>9rE~hJomPFq-!+M>_&+{8WxqV>_ zdv7MeS5(kAYJ->#qvcl~{G+ePunu^nRr_9u2h;-}T5?cHM8(TD0P!XNaXc*`C#tM1j0 z^vQ@;1ZhVg=7@ucmN)LSZl;8B*j-rKcPCpq45P@#`ot!gTx!6cp+J9nVmFO;Vg}jc z@HLgSgE`k7{C>@B@0N^Ls9$BrtgXrvM5c@;kZa3m{uIZQfz0Se=eHB+7jJ+^B!@BW z*`a_@I&&OCz7c^&tOB-)YR0fCeF_SSM&DGnc5`PB68hzCO4oD@31g(g82%J=gHmX; zm-R#>6T6SD++VNb*klXuCp%^Xy&aeC!*0Ma#p@W5Tnx%de|dhN+G8NdrT;hIegv2M zlW*6-O2ERo*OapE97^1D&cKVbbo7ZrVu!*#xi6qN{3qeQN;l0_FdTV;j40#{rRuzt zf)+|I|4f_sk~67+@9#u%1Kc9vd7>C*5VzZtVkI z(I0|Lh>r8oXjECQ@M}Z1g+8Rf?o(ZdIfOD6VHS#<9zxp48xQxx(ysy^1S^K-z$*<~ zI(h*64EmdD!x;foTVb5$Z>qgJ^lwyKko4GyQ+00rM*In8qg!v^&$rxc=7K!8yQ>HK zH`5l{hhhnqL_S5&lJmGb^CxNyE9@qVa=Po{aZJH$ErcJ&CF1E7$i}0pCz4kpq9PPr z%g)ZTQOAb%!Q%&BVN^c(Xm;8(HfdoRHl>)OVrXQS_edut`}lciT=N;G?X*Q!Kw!CN zkLGZao*+C!Y`#6OCHl(LdC&&LMEa&PO<2pTy3dQ;l=D9bqxF7j-kegGcRnd)^jy3} z!pUAVZIR(`{$Da1Ck2g%o&suPW4nXTRBlz6sum%itT-O%>pYd1CCw%`{s% z=`(sYz(P?uh))2bfTZXgs{-oWv8Q6WX;q3Gdp!*!Mj#g-TDDaKZe4v2WAg?EAzE z2d11ho7T--oeE4io0CFLy^ctIkg=Pr($3|531{?V=;lMOY!+<*!H+WqB)_fyhTi@0 zd0t%~MHVo&yR>8E10vHoWhqd}4wnmp8@3er4T)jE3h*nzY(lCUk60&mSTY zwMDmduh$J!_6t);rJeQF7WU1WL+7iQd?vLpYP)!37R{jBErRv5^$@87pQzNns9U(| zUtYq`=O40GqA*$=ZeTevG+;Du(OkwQmYPF&T-iensK7SX=Uij2KC~!D`o?PFh4uJl zPerchA%tNrMAt}9PRok7|9Ou z3#?S&fnnS|zd|`p-?A>i%7?8L+x3CdYrCt}i9TXdzwc?V5_tUR=!zFz7BYDsuP~<- zWoa6q(C}%$>COnF5|v?b73Gyo68eNJSL`I_oo=~5Bp^_pK1Qa=4VP+ z05(s8cMq?~1j#-NVw(Mh%@@K{b3Dp3q30DwN-(0Zc!^|`Y9TN1az2`9{6CbvWmHw| z8mLWoN_RJi0@AVQ?v|1kl}j?neXvi zkaV#Ac**AxAGVt1X-Q&Z>z@q19R2Bq|8>Ro27w#18OyZWjOxiRF#dReu}9xhaM@O> zDSbhBan?}B#pfu{9w}MwtH55%)m28OC^&^qt#gAE^BU7J5R_7pBO;;zAYE?#Ns2wL z2p!$8{;r0Tw5(agQ&j{!-#N*frE8*U8XsL65GwhKZua}po0d3>GiY44s-J#R5i{pG zgZE;JTxBPv!Z-pK)ETtvc?W${?6Ep-+ak5w_=T(>&5P2n(nz+F+3J!!G&T~HMuXRB`y?%1DPjlOV058|nsJQI{( z#JJ$^VfP3{A)1mm6i155$cVr9HRoveTp8UWK5W=qY^mz}borwS-NV1~NEFyuyPJ=U zdH2FrKx%ikfndEaUOd^mMW3VeJ^*_-g`(|~GgRvvtINN$@7gZ5Qz$LWY+0T`NTvXE_w$-XAXQM4FODj4@-QtK^MDBZ5})?qih+7`SNQ7$}{ttGkC+h zJ;8HwGf2s56?SJ&-4;TRBYD;H8WWG;?;y@kcj>j%)RsLKIUX95Nxy$(v%JxE^Q`AE z9OIlOW>+hnI_vb#s@!BND_^%T#2HSBP?pUi^j12YujkTF;o1`wFqfFJ*kH?H1A?mU zAEPj6o&$Pv>9MVUTH?R4c=Ud}enndbHS+#^4Xe;V`$T!3Gs(f?#o-5!md+G9%z0q* zaoF6KgoXmS^i06b_UGVh+S~O7-@4J5!$3 zFBsh0B}>1d_;!Ip_x8iRo05gho!;c>26$tlTDi8E&fVR1iV4%=REXJWV@>s&3nYYA z+a&j7Pif=ULWxH$&L}`?p}({4%4xnvWLeQwhB8jJ-`0Q={q%}p;Q^>dI{0cU{>Zdp z6@)9-LBwzc+B6k4KsJ2Q}2X);VFHdXWP3!9}87?FVO$K)DI>2*yy-BzO*T>Pp6 z+3Yke4rQqY@kX}{PnG>$ZZ@|a%7sOqK-$=p$w#SEQ~3f$65~7q?N%Nr=w}c__NRds zQH#kAJFH3%Wk1^VPZLxk10HwcrT0Tic&=Nw&D?n${_Ry;x!O70J_r*|)w)pR84veN zp5u#Xd^((KmBr`{ccl}37Vpwi>4{8G0KB6>=Tf~c`KeVSw7PS3?3l+Z#?gLI_bac+ zY-Vz3Z^&+^V-=RqIfmJDqVx3iXR{lCn&}P}Z}T3tJ#5L9bn!bit+pS9P=vGoY>`MD z$0RP-;Pr55$5t3c(&pcLLQsg^?pM9dqR@PG>=JvI;%KobrTWe}M7rqzs8v_PIlkZC z`d%FXS2J5@Df!yzp=GeJzc1uFe992X8!A(SB{&zP7w)@}i>E#NAzLU`5N&q_qSeN$ z+_lzYW0$2{wCc1om?LedeC|iyO8KrC+?RV4Z#N@$Cp$3pR;pOe96YQXx4WPD!+lsz z`d&aOD=PLPEdDAyo!5ihg?By2swyxpfvH$+pJx!}LZaTdlRKHmQ0gNv|54b1ARbVx z2aif3;3?zN2{YPnC{E`#H20&Uu0Ik@k@A;xtN)6c8uJC%wVGD+4^5daK-$ zQV_9Gp5|y4N<Kl+pa%VNlE0s=8b?>=S&xe|d`M76StWlGktNGdJ<$d#> z9witH9PP_EJyDkvoFyCA8*C%Rf=xX0i+SqQZ0O0c>G@W*@bVz{n z=CTttRg{L)8LE)ko)fU=1B_;1;RkRkYbqa)>Q)9pOL6&Vi^VVsq*X-O4WDarI@N|x z{^?!2DF5=VS>SCA=66(~k`BY030~z$UQ?nRBzAwd1w!!ifyip%F$k>shB$R`tabj+F@rP26n1 zc2!6!^#6qBD;FJW^)KFH?@v{RDCNqCdfvle7*P1Ij2G(24{XoZP%uRDXA>6s?p^^$ z1&lhp8Ob%~(z35>$?C5`@bxJDO1aUJ26Mq#aZkit=}%%lMI#emkV658v+5}mpR%aJ z?E!_{Pe=$>!s0N{{sYZLyS`t4lO$qs_kk$whmRu11+PD1>>x$ig77nmP_ zchqG9XX|$>MSE+(Aw>=tDLky=2hDL|Sbngj-msr-n}a@mjw{MU;>TH5$dU69EB+7X zIuf~5AupNs!_QN!c$Vv>2gn_+OeR7764gh7o6n{=1s z@uf2em6l81Ur{o|xzhh7tT4`T-qw?;ZP!w|h8g{iK{KS0C$^b)F zuZkfja?KKMMl>4k6^{^{r*a#lduIh#)E8#b3R0)NTH7Nj*!psR3m|Z4LA@mdCHrt4 zMKpTEjjz#(vClhURZdQAees0^p>!IZV}Ru&V`VZc_zGb4mmvDIJ8K|QN?hpZ7ib%f z!GW@FOi9k)`$7;rnb#y2PNTjp^GBmF@Vhf)*y4~3g=f=>)IJgNvHxP>2aiYu<^_6{ znVYxbczHz9C)M6$5I`xNAe8?2;+^A6ooNB7b(pV-vYc8nXe)P%_8QTH(d*^n7t#<0 z1oCKdG|VDk47HNwTw})j9VlDMj!?gVxWx?h)cSr#&w83JzCPnM&kUIK!}FC-zCKWWza(0;&un>j($ zS^ylKk1qS&&MQ$LBki0F2b@;B+?QwPt|T+qP9#p=HOn{yQ*GvI)GbsDC9UG``)Ii< zoT7+c`We6ljN*N{5}eNhGyZy)6;9Xe#X!t8I5^${;BkaT$DeQ!#DL`%=%XHsT0iFS+)SGAq^_x9}hImtMU&5!)BZ`g{bjJtYGhvUO)t)};?^}#4r z<|uf*to01PntqK9h`hT{XlSx~YYkg^6$S)xgI*F7_HgO=y*35CAYwV2mbXeCB+ySHy>x9+WaE z0T<_xXkhn(cO+@q?`DR?rwKb0A8vqT>)3Es(X;-lz~DlKMFta8_JWLQ^^F%)90P;_ zcrJpk`|_OTdorSe$az=vXmo`$+|g=zVWROIp{tuz4v54Zmi zyz9G<>-Gu)peR3GndZ6p^x;brXO#yfmQ@`=>!*rES?-nt+`XjLbO^O1t?B&WQs_Lh zJ_3(jqm0Isk_3)7j*SAa$(50$aN|LZ44#^P(3MQgxB;MShCBF9qOa@eN5L3*GYF-w{#QzV{Cct}i?;vP@lYv|;vQGcEi88> z(_REsb;!Dm+El$8oC|EmNVq3G6s%k7eZAyz55#x0oB*sDF;}@qa^#*}rzu;XlsSnu z>m@e`#|X$9u~N*^6r-%Nm;Xfq7yC;Bhw#Pnfk!M6@(IMB?+jia=oBKvP!X+V!z7z{ z_Bq!D5i_>=xm~k3{m^i5C8q)8+(R%4-pfLg-l=_zha%ojktGSt=v1wkIUS@jOG`Y| zqwm!Hs9>-TYiw)qE9();STbKJWXGU*Ih!8D=3G|$xcK!?Uctseu4AuBB0#O@s3h6) zzSN6v)Hf!)vbkCU4^d{iF@tYf-?7vQ-`35S)liLW#Aa4~eFMH@3``UlC*QKPK6|s~ z!yUAO%wIZ_*88U&!7jMl@7J@M7(45yIL8Pa!BxcmExW*?66M=~P_F~);gA>pxp z2x6D$N5L6Mrm|y5< zrGr9Cq;37xA%M-u`?wq2o*I0oLPDL;{z8SW*$*ikcLM|2H9x&kn`w1fl6a0lath-WCqTu0PM&a@IQQ9)ex8CI!5I)|W z?%~02b`T~+ZECRUKMzXvCwPsH$x&ZoSlQ}bF37udgw=;As#-EhnF(yWa4&q$#b>bJ z?ExdfUaCXEQ2C#B_(aZsv%}LYn87x^vv1FLOxjEwp7F@N7gRqQt5AUQ2ieG^R+tM` z#OVb~zNr61skqe!Y`Kp`?LA-qKx8cpjdX;Q2P=WH(i&$BG08d7InIzE`IQ_K6u^jg zYUdnT$utnu^q{qf(#&a!Pvb(}&s}Fm28S>p-U15FQmVcy2v~{jVRb|d2?LV~yjiY# zeg&z6h(cXDwwQTZVjLc$?XK_q)^35ZZnz33~$AYRrKKZHNdjfCrgF<3nc^7IwtW%zLqM+JFT zGVtY5ffF5$&trvCe7fG@n^}tXnzshw5ge2V64d&S;zLOY*vAp(h`!pF@R$sY(cam< zmx$1atKE1}M|WHOtfI%g|3wWa^-=Sf1_l{6gD&fUbK_#TpkCf<1b;=!m_poM1qe|{ z5)fQK634sbR7f&m0q~3?SfP(%GGZ^${E#|4NK=$)pa!gHk3e)hmwQYu2B~;BgJ2G* zxU7=tvyEmgydRPbKcfh*jJRV>fIJSZIMDsyyZ>^|*;p~2R`cYrkX_`%icVFrmBI@PA-0_bNj z&l5^0V;sYOM?cKst>cb^;gz@5#j+jW&od&i2{%^ogBcRw;BpT1&cD;3^wVIbMG}L< zpVZ%9auq=z5bR~ygpUJz&NjZS;<8n$F^-VQIXE=rwTqCokN$ZX zUcUIIY((R!zY(!BD9Q(OM!PFLZo~7nDsz24(J@$`EsO5a>i>z86ZB(6g_}{V%oQ^S z)g8LLra7~!k4KX>vwy`k2+Qj#;9&0CG|y;tM5q8miWPZ-J0e5dW-f>^mV<)3i}UcH zb+DWq<9$S7IZA64eo1lKtQ0aDq)_%c?8FtBBY%190&HyDK zOw)y6ZW%3{(Ld!0os&{L1JJq4`w|5{^z8Thdoa-j}i=)>kPKnYd9coao z;KpN8x!FZ!pkwCC9vpll+Q@>t8f`5h*`IERsI{!#&)AhrATjzXqFU@SD)k`L!b*QC zYCLU3e0wbhqaVxTaz|^G;mp8N>BV$%cE*QH_%bk4ftK6;jX(s^OA${Yvch?=+Ys>_ zx66ZAugf8nx=!U`u`_h7Gkt-re@W#nop(SoLiNH<;Br%Q2N0GeA-nUW%Sqt1qyZ@< z?wU0&^3GA=KNBI}wc%=Cil#VP&ORg4QVHbvsbBzuu$2yYJ8$2Ye;%4jxu>ney3I61 zb;|kd1S}@o0S;sNxZ?I(g~d;>GbgtW+lIz^^wbfD8_y5Kr^uh(!)dYkmQRsmhME%{ zip9drvOhHM(Zrw+Ei_qeTEwI~X3Jdc{Ya3Cr;|5kP$6#{+Sj&JJ5WUAl}Kgx za80)!az65xyP@YqOTVo4I<&l@vlnXhdQ4X#z<8WIZ+7uM$Qx%!RKyYRy2;lZmoLEhX-&-6wKckn8w#&^PA9x6vgTI@|`y%35a9BB$7{m`1$sPyDQ z1D0@+$^H!>lW28pe3}i3-5*$*1H5*ok9>Z<<=WI4`HMD(A;M=?r{mUG3;fC~vMNh}t$IW-&&I7N9(@<-^_%_BgO8dJKm~+6H9H zg5Tecbi$&-9aIhR-NMa;NRCK+9BC~({8lKzm^5M{pCV!^mk~>eh4+O~ZH3kK3ZH1rK{@)7?ZVOmQ9mi*C zX}&zGTPmb2PIUCp&QsoqTo`60-H#ed_&32^B6V&41uw*m@p*bImAv58*@DFI^hx8{ zuxP^>N)x=n%gVsZPqa?0cXtN{62G|kHzKEkKbd$z4KFCIroWh(WU5N5`1`{xapmLA ze`@B?vVJuot%&Q!REMfjHU{}6r60W?9hwOSG`z7aaxsgPMq{A`efbTvL8DN~ZpovK zW&5xDoy|Hi>S=yd=P^@A{5>^7tE2Y6Vk6~M6<@`8>MT)2p)*E4ceY8sZnh&0G1FKQ z)?{Pod&_eJ2$`bJCTm@0EE6^)hZtK%<4W*Obbw;g!Jd6BNuK3*)1`FF`Fo3c^i~Yi2<$Rdj^8>`#x@VtMBP7#zW)-FK0aW z`pEG4>@zVO!eKq+=1t-Q)S^|0fN zCO4M)uS)rJ3VwRf46^$aD+UO!;W4p9BZQdGowgFst{)gB7tNCXNQ*vRc1S^HJXxme zkRnMXok&*SMJB8eaOm=A4dGF?@CDN7;b_LGUnf1~C9i;3H4 z#j}`RZ+%mwR$cunE)%^f2J=E{>U;eFol=kh2t{|(~^!YrGfT?cU=Oc0x~cF z6i1wS0W4%YF;LkZW;K0_%}~GJbe&XUbxm-r;KPVCD!5ea6B~>&TX^kczd2#Cvsls; zr&+F#G4tgE8FlafN|B(9B$hYW8ICEc{3}Ef9#cTgH2WfZ<*yD2*@rGpM>CU~BMQM1 zd^U42d5!J2^Ia+Nu~2c;7OwGW>%ct5NQvz3#KmSrkSq%_mz{z6?;82J``W#r z{+Enwk&tI$Lg9<>*Ss#Fam+_>TV($U#YwmT$&-0~ASHvi0)n_};F!3!M=9Tz=i=s=Gij9w1TRh+Q6FMEo$MWcP&%^a_~$PUsH5dYY@H9p#r6! zi5x~Zkq~q!=Y=Z!cfcZ7f3BAuyGM_=wixD~?EX$Z)*F~nCWv#1^SbNP2O?gmc_!Vc zQc!R`i3Mj@l5k&k!GyC6#?7JrGf$%aT*u(SV;DjInGI_q?R~=>jKK>a7Gz^69OM5E zlec7iiC}d#Tf%YY*bmMER~a}{O|(0s3ZG0Ryqv4CV7O&f_!_Yabx*1!=72@;V#&LaR!t=t-W=n5ED;BDw{6gM~CXnE3EH zP8n48$%yL2p3=>xg?q5#zR76}u*Y3UR#1(2R~i9*TvX|&J`O^<%yzMZ1{ErnpbST( zZ1qI!vJ7{_M`#9R7Y%`5fF=%2{YVa$#J*`E^nvHp(*lpQ{i_h$-=F1am`QI`(rc*u z)b~;$ZVoyJvLJvNgoRZ!YBE-3HnYDQ7h9{Qhts9#E4RrB985({GNJrIWQbEakFNh8 zT)gYkFDkConlY1phb!;;n~OsT{x>QkfKQ#6Y#J2>B#AXFj9qZY%JDW^@6Bq+9&&lMKZZGyQp)3_g-VgLkVZfzf5&@~WsCDKI9$ZQr<0UXU2*DV9 z9(P*A!`?9%ZOCV;$*XWY=UcLFAA@$ebO*7Xpg7I!FDM=gK=GXr__q^3LRg%!KMRH9 zvO8fnaju}xjjH`9aL{Gb>s#c(pQVsI>F>-NvJL|)+=c(HfF`suBuF|)dSpL-lNa|9Da2f28Xo(?g zaheN?3FQymWHotEFv>V7!_A2LYUeDz#0CBZI8~|yl5c`*ME?&VlxSGefAMj~woeaV zj+AWxQt`zD*_g#Jfss)8A*EDyYKT-mQd_^bCg%3NqwxUT|ql3~eO zcDDdlRe@zEK7=jwy3OrX(g82+*LB&RocNG;^k{cl1ZC;E$!UmgON zt*08oe#5~08zf&UgN$7dSHPy0Vf{_ViNajWg-su7J{okR+yWch`cm7Doi6$B^)$L8 zJ;9A+kg>ZOzaWUDQex6}<@)?xD6cpk`&gHAs>NZ|w~l7>VPQS@nSlF?>=CR`}zeZI(=+8 zhzveJar>J%ZH+~;Cq<}fUk+MvPa*6LVK@$M=!^W!BS(8rJ ze{ZE^ygETL5Wt|3>-aDe@*=EzNfPAZbhvG1=2HwwNN)RkO+50j$n@C_jc5@`@Pn}%k zNJ#lO-5 zk>TJH^)d-f(0L|pM`*prZhk2tG(JL}Cb|LXX$4x4uUZTfvS@IP2qT?AwZh>b;bBbZ zX{U%WO=nRf%k#pDHauA(y!B= z{}lFeey|$8WI$1!@dzXUYAFS#8D#AAdekApc@;JjnRRlPA#W>VUx}!hLtY24@L65h z_oJwBU>30!$YY>!{nX28Yo&raoWC3%#r{gCglYUtry#%?<}1X=2b5>T(=m%}0I9pt zbe-9}C?S4O;F~>K`gRF^OzLp6(vu+l9jPT>4m#)eg44oV5_ebdZ#(fL0}NJCFpy`U zg$kj!_z7Nx0{1m%B?X!zyaC3(!YM;Cd0?XR1WHNUm_po{%DTmPHd4QAHE5ibnUYQ0 zJB-K>qY{(F^fXXUQ?oijd3n2>7Uk{!@3e}qQ=k*Xf237_oXXNCiH ze_+i!$_ET?1SEdZZ*8Y}C^~L^jgSt=FXQONFoTOdkcyyUoRL)LDLz9DxqkgIeF0&O zLffcUZh7%ejpp-e7j_8|GxBFy(k^HHSbtSS-@H2^8DGV$Se06@5;ewkjY{k%Rge4I z%V*%>V<15=A@6!-yR(82_gQe{c>K~3 z{=oT(E-9^1XacJ(cp@7%?9Y_STf|=}6@O6(jq$y3^NAv68)^2iZLV_f+W74~y#FPY z=eN^U8CionfRSAw{ItsZ{E7Z$m6N6aK>sq;zN!0*l>diS4i9a9(`6G`X|tRBoxP!N z*-s`ZKwJWbgP~7z@dFgf1Ks2&KP`O)Mvc~r(&b`UKqwc(E{jO#?R?OZyIOo==5JRn z|H`REG+MZHLC^w1xx>V-+n}@8uG(X1sPi&h$$isBT0r^MFi?k~sUe*!V zi~VV;e`i;;*PgN~5ClnJsAy3|;f|^cVR^~#^l#HbboP%|i3*G`aYop-|ON3P``h*y|n2!@%T^1PER^G*FfM z)Pa;+qvc)T_NdF}kC1*nyhq+B;B;(__}{Ku_pE-ia$1$&tb7OSPp3TSk~GtQ8z=6=?|^} z);6aja74AGN-r#bXo;Und8YI63Qt^)nk_x=J(i20i#i!ydG@!)uN)bW)~{AeNK8Dy z?Pz-{fKE0R2PreUCB)B6c2aOg)3=xXKRekkxJ&-l$xdyre>te6?jm-6KdGCf{Ut+a zH1}uJ8o;bJgbD+ctx-jic1vwve}`Be`>7ezNxDcFm?<)-A^sn+I8qhvk;U6O%bbn& z-L5|}EW0Wk^1CNMh9#X{q~K4fe1tIA^%oYmN_ejL2aX1?IDiCyV)1N3oqrav+X?#q zg~dq^?LYj9#TQ&r-f~=OEkd(F{`o@3FpyOV%y7Dq{L?nCO9%4U?z>IiCVz&uL03O> zD=t9L*QoNcx@4{4WMlOnsM^Fc&OI6BVQpoH5B!tM&$p0W(V9r!^yaDy(h|&W>Q6>< z1XQp>&G-{hk^AaW3+(kq5`_?=JGz|Mmo9l|u5T71IUqOnzagrtNT&@}(+1{Uy#!~v`!RY9 zS92$Jq@tu^CCB9zo}m8B+QGt{K5?iw$$rz#XnNZ0+ufdX;>`=e9vPLqWSmcH%s+UZ z@+t|k8}`4i1?nG@abyXUV6EZJjBL(W4l&`q?6}$hDH4 z53A;f8zeWV>r4{LgM9C+rmK{BreSQ>y0*vURM{gLoV{H3ssrvTfrT{{=ZjOz!dsUZ zz3X))Uc$XH(R}Szx^03}8N|0fTIYO=a`Uv}2fVRVwI9{P{me0?p)LTmG3~&HRPT#W_MYH|C=8HO(XCbT_{qIffxTc0EbPC$@ld~It#D#aD6tN*Re5f{W$q9F2Cj?8vyp66*}ASwN3C3#jX$#i=VSKm_D^z1OZw z@V52@QW5u+26P1BVcWng46bphxZmBq_5{kUTyF?Q;*7`aM`C_w((SbKmj4KO8?>fk z&GaoW&l?Nt=0E}De83F>9zF|q)Ua9X)pu2wS*{9;Q!%MQ-GK7lSHUmTKytE#tUGy_ zk}4Z`1fSojeagiUk3s_l4CtvA0P81}kJbm#)znMEvqh4c@!bOs78?HUhx=P6uFyzG zuolQ<>V!L=A>uM!E=VWG(e(T;Jv<{5r5;QLQ8)iT?QnF3Y#?r~yltyDQiMVCb}jlL z78WgpJOlef2qv@sz}2YsB9A{4kwWeu@Y@N<`o_D+UYKx!&1KM z!yMD=hwtPwl{Q53?q=I=YW8sqm=*|Ii{jMzz>!zMPyFq&dh@DZ{GQ=h6Yr+6m80cU zj!`i9F9<&SZwL-g_CIUeikh#9ODZ}Pvv$-wI(wr?l$R<5?Sa+V1L>?BHAfcAALz<* zP@KJ%($wc+estI6t-*_;1lx~%E&6daJK@VoDR*LtOANkW=_+r{XYl{t+V*`veY4>H zdJyu*A8L5?y*de>D`hawh;j6PDXoZ(e&Kxi9XQT`RxDkeSLo^JKHdB#*@qq_XZN5p zTN8Uc7D!_)UuY(+CzZzjUxn}o&U2nNKQ?BSZ9puvU%hd_XMJCBzu?p2HuZ*yq3z{C zhJcqGjx(X4AfkS{A(Hn|DmiV`7IU;LU{@y&7T|`62($utWb`1{_M2wPi29EzVMrQ@ z8%L((7bhQQD-XXVv1_UdE|@-buy_kUziYz_q5187S7=L8p7T1cp+yjLD@awxD%Wq9 zwsFU{Jn%J+Y_8KQ#N+EJYdh|*di<@r9o;PO3RQ%h!G6LD4i@m0B`vre^)>O7c@Yp| zN){_#63x}AU*z{_e420nU%_o|XI}Hk%a|8Q@6^j1zh%Yd4WenUyr5nl*Qj&Fa^oWA z@>pn6RF-;%9~j{Jr3BnJWv0Z^!!^U0bcng4^z~CWr5xy{Jey|qJcCOw7h1cqnb5-o zZujAQ5~_4|2~i7##!9b-+`FLQ5nB|))Xs30%+kRI;>u|UB<`S&sa*8h%2t$0{x698 z1S(MuEfD#gS61n?-Pi%q?Ao;V=MQgrw6Ma2(HVc*-_{mnZB<^W`OjPKo{rMk0MsqW z{qJJRJAa`XW=~%z%)SmZBB(Na+K{b^h-5EuC(HT#hn7a^q;q`sEFvwAsxjvbY?yD^ zL|W{Mp>aih<%@5G-mm#ivlas3?O2On;qB!qfmx`aFb8*hNwGI!R*W>}nTOlg4 zHI^TIl1wuc)BoQZ_^)uva{tNWo(^oP?Br?2R@xnT@IuoTStDtPzsU4fiIdtP(|fe+ zD%U!VSJ|Rye6FaYZfKKmzDy?2V8b0t*o2rwX(dL zF7luvrKZSP2q@Gub0Cpa{r(tY!%Pk@Ge%KXP50mgY`+t-$@BxZ3Sfh~c;Sv5E633) z8Yl+aq()x~$R+S%MtKvj04bL9D;v@R9C<1lEhHI>lpl%rsV*l(0zt zhW*O9aon)b(26y$9e@_g51_>&(PtkGHh_-^S>0kz2zlv{M-L$Mk`Jm{Y6C{?t6)2) zc5Xn7CC3u-rbwQnzyekD$t%D4mPGf9Xo zORv#da7fVGOSh6OB9${@))kF!)6u|@LO8@%{}nLl;{r24u?7`44{VZ|E8IC z!AkkEnv~wD@jw{d2N~wG&+DI-J8a4_kic7!mwE>}OiDFo950m}okOki6 z3RLftJAMo1M!Jhy@dfoM@%^c*&`(htkPrG@XGBQodn(s*awT=Jp-<@nb^QIYknX$N zK-!#W=~-?6@#{((`1Kmicg%`Hs$xg@f*bO{=8B&8cHyrEB3s{GfQmL>%7Mu!wg+&N zXwE*l<5&-O)88?Vu7KUruA(D}YkMq!JU$OXqX+8a311+53o)B2UVsT5`IYIk&>zql z60Yf3g4#ZhK`LGL`}jR2zLU@K2iX5ge7C)M4yfbop5bs)I=>3vmWz$uY9sm$Sdedl zEez`c7J zg9aH`R!nvlkoZozGw2eb31J|Dl|YBv`U)(}gD&bI1&4U1ny?Djbao)`mJ~#wx$G#4 zMX&bE$j;}Gu>tF42r1GEuD83XOw3S~Ki0~^fEDf&=N2hiI?vQ8(P*9;Dj@J1}N6kXt}$ zJbn?3j3)}3tF;5_-VjpVP{q4FObV40L8zm^KbPJe6mV){xZLXpr!E z1|N?e8Ir13A=NzuEjOG8yrq>h(sP~W_WM0$!FlxCy;3=~J==nP@O{|Is0zfh@j~h! zSm_vONLsk$)^%F_MSH)K-?~8ZTk9$LZ3HC0-&h)n>H*1bkJl_?UdfR9Ps#5iPaiar z41ihBe6}bd)Vc?cR`?g`7T)-3e|Dswlv3d*n4a2jszIeMpqF`MTB-L?5?TrU3>7ti z!FVj)+ide>U79?R*L)m3?i8(88Q*MS4{y&R)C|@!eDZ1Wz@oc)KyBsb=vKtb1&q;K zEA1qx+}o9IX&=X|R9tvCe7L@6aD8ah@XgNpem*uR!=2yWQHnq3Uv*gZ+|&3h%0=|b zKJ%V!P8(Mnr0@X3jhmwaVD~}LE2uSu0Sez!bcM35i%%)ODuU6>>4$^ZV>ZB!5fafT z{Xv1(XK#JWmOL|4LRWesXduzF&k?YDU&)9l_}h}UFG_%ThST_|q)K6X-7z1UKay(p zxP86t+r2);+4x@WjES_`nFbfy%_~Y{>?|L-uDut12s}OPaqvuSzj|X`nAGqVsC}!L z`Y8HFhH*+FZ9MGVKo9#A+MkFpzHTV~P*wZ>y?C&+ zNV1y6utqe%xbaY-w_#qJpp z-PKg0UHU*><=ng9d)Urff1>Ob?5agmS4)dNO!YC*E}?@_)_=jG8<8L?Vd@Y! zcVow-a(PUj-?7iN5;nJri6g?Sdi!Mn?_zvukDfU% z>j?XpbTu*TnfI^mckj;n&+hjXod$;_R~dws21nno?sr5~fD4I@=35aUoRpQqVJV>t zI$sL(!vde2*$|jSz&E!?rHI^7{-cosne1z;x9J>(nW_ut-w96e6iDgY%JPHziLxh3 zwW%SQVAMx?=je`7Lz#q;=ofbDREzu9farH{f&a6J+oRus6xpu?T}=31Ag*XDLE>DH z0>2ax$pb((`&R&DM-p<=0w6mqzFMp7AfelNarXy2tDEA)v%Enm9#BK+O!`ZCJ1rO` zlQo~2HqU+f2z-|4_)>jF>p)gi%Mg~9HwTObyh6HLQBU;Rrp^n0u;?PKX1$`8&mX4n z2CoiI6`ahGTRDM|#gM2F;tJ6>k;1aM-oPE?Y?v<~WPrK+T}Od1>j!P)R|I-mo=emp z0v>@fE3Z4aOdUEL#Mesq1@l#|v#`JEL*e&j($`59xXhybD3x_121ykvR|cpAJ)Af!v3FAyP`B^^?*S~fS ze}!=aw+8jQfr8B3uLDB?kq#AHprBK(UBeA-{56g%jC z(OjgNq`>)TupO1Nz&;8ui;$j`(qRx$txj+iIM~Jr-GnFki`OH+1TUd#geQdsO1dnt*Y)P_;;2nOAV`O5|<>4$-saZ^` z&axH&g17$uA$^#FR+pULNDpSsdxaFWBc9>jEPCPIsfAZ_4R(0?Dk`6CRf}>E?%Q4J zyOupIzT9K@%R@4)Js{Ys(KLMV8Qmz|2hS7M>Ndi@1A#!QoSh8U%cS}ZvtKfFHtHXd zX2b;mi(7LI5`p(^SK(vHEBJ3@LLZe`?dddsC z^vuzr4&F7B`^yE}Uq$fg*(w2`2<~@#`3$oGW&XXMlL8U~cr#Q6AaM^55do_kg`y}9 zkC36ac_9{J+6;1khR-v)$yS z?kAlGA1JJ4>DSb04YrY6d|CR-BEWCIuORRrNXxm$NajU0dT$%vgwT z_bs9b1Om($A|lWPpMGkBM{rOL3_->=tp09-2T^fc9;&YUzMDZu^=715hZoTQRIUo& zp+)o8_C||g`p2VGr|z7iT;RN_ zN@oe_r{-mqed&`*Op&?RS6Z+7`cb?aN=fb_JkolQ?JY0=jnoPhDFw zF_I7R0noL-ue+q(ExtBBaiISny7v2n!lKZj|E6nGO!q#9?eIEy{`KSk_4yDE)?n_) zs|J|lSEA8D{sS`uk#O1-Z$~?E^c)BFzb^Ro`H=jnYVy2QRfpz}OP(%Jqs|E){YN^* z$0-IN*7m2L3{;UypKR^TZ{ixa9F<#5JFkqsE%!-1>d4@fki6;6 z>6rOcF0FwF;m{HK3|+AN1MvhPFNj3KHLLH+@ibcU2ifMzqyEAmX zL2uJmn!7C#sg;dA9UdIr5K464V|(yb(t2feTsVBT^GF8JG;{x|`zYKXN(lg_OC|hs zX;^~P8#>wP>7*t$(%EL2MbhSUQh2(A(XB^5i|fraz2mvBaWVX;ES*6{p<28mSaOYc zK2$iTzBoXB3e1k#J8IRJdz|X1a=YA-=<*-y)_-@NB|+MC!)I~j)lcFV^&;T~VTjF6 zyz2qet0JDjc=QGqi%KlCG;(YIxe zWzEL&b1d&Y$r%qXSGw&shOL2iZS)cJyC(Ike3mCp-JCpuT0?0PEOP}WjhQV67z<(1 zRP>!G3l%mW==8}`R)UPjOyr2=&G$E?RQZg)x#mqF@67r=wAjb=$RtsnvrU*`l{2^b zO?r~B8IQMPM+9M&DJOy))Adx;^r_uPk$N#t6v1HSV?& zjns!<{Z1o4va>$ek)r+aXXr#e@d8*sn5gowYgK49iSitW0aY2f!`kj??cG>_oxZcs z;tlnato<}LbK~%Zm+k=A^=E`Ax)Q{lJ|}oNIy25tsHJCRK2kc)!}nso!2=l9xJbAW zaKnD<ev9<$U-rl+3JcnPI?QftOvbja|)Do>AGiX=00+rc&VX?)RC1|abTayX;UOT*mFin z3L4^h=T>KV4XlHt*t!~}_)%)%b`y(r8ecjhwsCWQ(eWTKZ8n(~)LhWs4hkh^x_SJd zv}@3cN;uW(z?x@L-ht|{BdXz`e)zErew;oF=oDMsEWSZ}Y>flI4Ry~ShF`e%hV>5uI{iY)tR5`;CS8Uj!8W%0UL+n} zh^cLv>(baELf#+to6hrraB=_n;G=GK7Ua!|v@>-tsAkDnDvg?`JB%a)w%^O_GP14E z_7y5IoI$0~EmQobBdj!j8{Zxz0>)v`7h0v#dZb)uctA|S5P^{9p0Jt`@_(%n-HwV! z1qtCRx`|pD%i3*Py#|TfYO#6HZ0$zw+8)+ke&+yhG286Jl=|aG8Wzzyf@qo;5-};H z@(E^!!X!T=)V_cAo7`CAfl*WkzMtuEbeK*%Q@KH=C!(!ei3EMz9>n$ntoGeRv{IGm zc%z}ZW;-#5mv% z^hC79_g#N{(qWK%(z?ysxL6Bq25Wy3ZGE`kMBCV4)QzIWXmEGNOMP8MhIq~Jm(&dm z9cF8g4*Ld#h1Mj{NwYgl+wR^E(z;?_g#&OFZ|(wn%=I91Xvb(g0rg;>;@W<1L2E+K z$(5%F94_i()ikLrF(oh_2BEexIVe}#G37VP8 zXRJ6y)2qa!L-FQ6?Ipd6X`3ns7;z%<#EETc`5S!~t2QQ05DAU6T!9>6-D1!triX5J zTs00=N-e7^k`RIG*%5l4)cpW*TEx1nqvbBo;|%#eD9@)hTL?DrRwm&)(Q7vSwU<%G zvnd>Q$*$T9z+}yJoLzozl`fLUHoWa zI;9)w?hfg0q*F>-x}-$9yHmQm8|elGN$GA0Y3b(%o!L5j@Bg#Ud3EFkFZejh%x{2u zUF%w3I#>IXy@i+0_|IJZ2d1oMk`ND;DJ_(9DyB=-Gx%6ZslXc^;4s>=3Vst$uHyKK9z$Vhq z;xr#iVE{|_xQZEa*ZgU64#Cy%ogPEF&rXLCYz^x4;Ld<|SKo?w4O4QeC@*@IYqjLt-Qzu#+r8&l-SWNN`O0R99i*{$D{>h{jG`|1Fq?rdkxcXg&X5?H>uJ?PV>hi{? zS~4@$Ss6HRZUM*C_NSS69RpE>wEb?gxH9QrLn|^Uh*RcM#?G^fEhwlY#1leb9OfFh z$aA{v5#Be=N*Ib1X;Xv6^t8q-D|R5~S516C=|r&s^lq}?!$f@`$)nYMxAh7Ar`0_T zSlyzS!bDUtI`1B+z+eNwqM9HUD2Wy_KaqM88Q9k38<9di>fGuYyP66_KXvX+nn#`c z7wubehn_>nGn}>7ZV|t8bE?Yl$@I_m-0gzoQqQzSDYs$6 zNx{EUYWS;-ASSsE1<}8jC~55P_s!s3Zj%56O|k>8EgKSXoC%#({btD$hYsj}yDJJQ zh)@M(0;f}`$WV`j+R5y$PZ~*bkrEp59vCn+pSGZye_^+-pexR?#+W3d;FTXvND78| z$VdgmgATMBX5hH#8Vo=_r?WQv^tfMl2!nT2h$b_NO8J(QHe4c$hw`J-l9?&Z=lami z+J6CdM$dVdV_-HP}R{zp9Uy_Z7tK)JJ~%i2f^$idp!Nb zr8_gmQ(IEnh4Mn-UTGgohVNd zlPwiL2PoAlbmW0s9&8Hpa*MmS$rEokzJNBwN%8tt-#TwrH%e#aHUq;Gf6{5wzvwi& z0TgJS0oat|`o(zfDI0Jr+f2RgIonoJDYB)|J%*?YV#=3T@t3J1A!FYhAL3=O zCdxkC10irlV36{11i#vRxO^_1i*K^Qk@RbMZn^ulgO0)Y%xZljH;m(187Lkhe2>%4 zj8y5qhrC1nY?R3N(mkZQTs;sm&T$X5cfhp`Db3l}!tK2sN{P|nnUFyirMkn8u2Jc0 zO*Qqjcy#6Kqhy zNHR~PD(b~4B%CM3&1QQsl@`(QcZEhJiUZgrCkDMXGQ*D&W!ygY1ZytRq@O?V`5Leg z6?oyVv%6%sU6sRG84Gs)qSh6hDWZaAM7eq&U8uWohk~QMGQE9#e2n0YV63@ii4^>{ zSGU+vpT;WjR3eFP6h)x_6)_pW_N1Upy)8=ObA&G?CQ`>QhE48TwU)Y>wBX7ATfr4fkF(@#TCX(hgH977q`GtN&4!2r z9G075jf^?zriKLcv0<_|71MTEICu_N+EKOLi*C+G16P6(c_O$(>W=o)3E>AYg*fB2 z=58^X-h6HExDX52J`k7y z^R3cZkzD1%H_Wh3NOmzu)1|jBJ(9>yA>E|Z>@`Vdg5>fH`{%v zCQ-LS3ZVYtLG>W+>UG9qI?SL?Wh$2j!>suX1|EIk7s;Ogcaq%`UCNgK)c6j+#{5xQ zNVFd1-Cm*5XIC`sK9`ig^cBxG5Pa(*EZAN650>5G{u|4-4Ay)A-xb|oM-|Z8Z7?^pXIHT7go}6(n^mt%o5jI+#_6+W@{hluSgoAr!TWDLEmx zjrqj0?w54VsybE9c|XR!w||R$Grvj#mMjxDW`;aFewx{a=k|8sfSLUmFv-PJ_ogp> zzVT#cul4nJeT;0RVd`Qw!rP&U4cy3C>2;)$pfmCZ+st;5W9rZ9!%Yc47u zsjqWTvzc@k4l?@efu(pWu2L(cEYM<)K6+tQ!JxE}IC6M|`zoyG=neZ&M8bHl-;(f8 zV-7`&Yu}t8Kj`=Il#3K8LR18X6hKzPUS-EAW2XorF@xU&yT2?uvL;_+S?#AUh?JR{ zOc6=H2tti9giU_5f;OMd=R+bQ4=d=U^*$||b4IiyfL0szYaX)&W3JixP)KVuGX2uC zy7~?M6Whi&c$t-JD9*Qmx4}J7EI%xEuWS|be51tOQPGASS{AQkdpX8-2dWb8qJ=PI{ZE4_LfU`Qs;Bn=J;8jFE^nMa4#*yoK| zs#7OyfSCnCV*ozI!a*ZDet{m5!y>0Zn}?& zDgYh#Y_q#m^;WRq_71itB~9`Cl_M;8!RHXSLDozwS8g|`5OxY?A=skb;L&~293V{@ z@*LZ`DuCB}(6qVYEd#qC>7$4p=^GfVga-DQ_m1lxa}(w*BK4{AmS0;5bn=ngf4)B= zN{9PHJ=ymm%U0Msh21zi$7q3jyH<`tNiu^u_B%`iXgC;`g`2&vuRyH~YfPSX$zmof z`=vA)+}T8d{F|xjJSQXEjL+UD?ACLZP5AvGeJ?+dh6qGR$fpnwxm3vM?p1GM{si1X zg})B$R`0AdZd!&&CNZlfh-#U|=$}uTguXAx46*eTF#~d=EIEY+o5e~JALYexSdEE$ zh@>4*;82K*k@j_DL(CNEr zBG;h+_(mRKziAHLP6?JP2&Cp9b;DdqD_+GA%qA!IbLvLFU@(t1*3E3yj6Shi45~$< zo|2bIT=HMunCcVQ*WA0=aDgC60QGG|8vgtZS_3`PE6y?olnN#&Ry!aBfZyuN^!7E^COR)BZHpluk z16suKfz0y`rJno6Aw!9KlNE!!oO#l-1!%Kz6Wa!Bl$5HH9w3-5YJu&Mj8zWST1%-X?inI`UTIm!99$E8tp()@O<@S=1W9N>?#HBT<>$2M3!3A^B zKQ;t;8|d{YVOtA2r+4xRwlcXrcD;`cSfIJX|EAn6ACzYfm48w0N%CKmoBB`6?Pk)P1#g+=6PqLTLcLdN7u)jHDtZ%e&B;4}}w%Xw|(JVf6 z)vC8?WeH9q|9`@|BjXce<4;|B}38b{>+(6d+Y*960i2p^8{izCYa9JTb? z5>&A#>O**#S4_?rk@@4d0e&<7BLZ(1VN_QC6RZOjl>hc80SJ6KE3v2~`SSJOyi5;vEkPxJasT__&8m6RQz=%F9o$77}=Wd){urDwrPVE zUQ)G~OfcqJ7QK&-rcA&QNvq`56#eooH}QoOYS&4EJ~^*%9%8uP6A4HC9_ZICtwDi0 z8W4YiK_xn6J{_H>-F;o!rU!gh9ev&^3zy^hqsV6a1A2u_y}^dD&Q1KEWyC@g;~XnV zX+-EcHNMx7pv0txInzZ}hD(Q_U?jgxIlv2G``zeUTaJJgx&|v z0IrrZ92TWK8iLxCL>_zb&9>_V=p4UVn@c&<2LGEm&SllS*#3vry2c}ap74gd&dRm| z;+%doD2HD}94WS&WwSjSu!4}${Uss^Vw@|=tt+NV$KBHCrv>i!=8txMLGiCrLz^`K zjfK~Lq~aOP@9LtqOM&F~`x|%m;_okwL-2VxT-nPA&D|Xx`o?nlqqq;|+CH!1u58`t z;0JQH>aSBMcZqWJB3T@cr1GXm;PFcWjY)BUt_BR$8~e`Lr!qTWn$MQUmZpWGeR$B8 zfq!p0Xm8>x9v1K9bL#AxcIoZjJOLyjY~M&Jn7Fw;Sjr!b`=7G?=+{lSe9rhW0*(g4}s#~~R^OpZq{3{bE1~$3cgSG~ zrGfAwhKHYuYQI&K#oflnO8MU|ruc zSUmPEsAH%;g>H|UEv8JpUCYRcxITxWEm0K)S}#jy?VXtS?$qEH z7+10xXdiDtkzkOXQr@Q5MsuHo`ZH11H|8GruY;fiuxf#ez(C5o+Pz^3sCO_ld0Z{a zu)P)3^MD=Qz%Im$#JH`VP<%{zN8Khm9sLNUQ9mWh6y0pUPZ(1B5h9oILdY-xA;C2B zHE>v{4W;zaZ#T9Nmc;wK^BboXu`oTIMgA17f&CZ$1^&7HvJ z^!@Tsa+rT|Z9b$Jw)E3_9iZZ!LSHnzB3g`&Yp4meGr*sW*PkOO-x zS8-e+AV&B2g0*6<%yJVgU3G4bic>=dt$j4YN>|-!hhiB8+FN#FOgp>8uI@YpldFxC z6X_e4+QYI3OY5%&O1&FX4pi7!UJ|F9ME?%n?bw7mz@w#LQEwKj&+ zRv`hTP=Uv85F~hZtEmW`mZIIU?m#xPeHdf{kmNoXC1T45 zZ@-KLWN!ykY;x@58cufeF>&ozE(Pp+(}^ByJnkU_)HmJHA16|ywZ4NfxSvHEN<8G- zbq7k8tJ%Y0rPZlRRDW%8=Dg1C`l?bihlHNkP2!ax`+-SqBfEy5&$>sUxvN?y96b6H zV%jZFhquvSY^?gWH65)XaCe~pAV_;LAbj`Bz5Cf{bo*{jE@4eUF))NCt^j5IfI;IS zBA>yFG8ZqsrF5Jg?6_dfV^}0WBbClj)$P|@J#Q-#s=5>XM9zX zfh^1QAysU#{T997E^wZu(O91!>Q#XAlIqe}Oi_G|vJ&>d+ubclrc6l{Ns(d<1Q=p_ z$x3ncMTDSd4j9N4lZmTsDMzag#bJo~C-a^~LCYUUtfxtUBGsUh=XTN~y$9V*6L4eW z&nx?@1rX4Dewx3>{%sr>kA>K6v^~VTs`i<$GSzc9rjJ~wloaF#ZZsx!K1RL~fMraM zvy~-x+=Yt74b1|eXfh}X1J&QlTY0ch@Bi57afiMW4hq+1bFS}ECMG2!6tG>t|L#dR zds?R29zAJ#HSRxI>ge|G_`7GUo7ym;)Mt9qVlvD}W7lH7Cl;uh5JSnjb>-tfE@ReP zYDf%YGQLjV%I#P|RGO$EUflFv41{(XrJyeqPrE+3&m36)tMmPW_{h+U{S-)=ctk7# zK|5&scgHIB)x8~)^-}J$ql3Qgz_kHtFAQ4&wTR1V_5@zYxXwfpyyB_i;lt`2CsHy| z;e1~R%gGKBq4|=&DsMgYVv?cU8g9)x<2+d?Uc^j(fd)z{OTikCy@}6e^CHo}hI@>M zgGtC5ViuSfuf+vkJ}TNvBVq_264*;>2-Ii({tl*tuD8I3oc(&&4>(#rcsMc_{MWz` zrnWy2`nLE*3|o!_Klm8Z&4*ijE%Y2^xKKu}RXAhRX?!gJo!1QTY7#%jR2~tL)|I3gFuPqqJk9~s3FMUf=febfXEI%Bn>UZ-1#ZqTH);8XiK+B$9k3X6 z5~LIEgvX)HnQgY%W+hx8uV)I01;)rZa-|ch7Qvl)JrpxNd6pj6sV@B7lKEl?{hmsdEluLyBDzXqDl*1o@E)3%hZe~Od2b` z<|TQe;SgV*4N+~3b71K^w$U*@Hcbx5r3;51nbs=0WEk#)3n80xvlBZ|reasf~72Hl1DQo}Jo0U~E>m*eI2@o}gR~fh&jC zl-OAvASpn}$~8-{d8NM7%OA>150>CHQ2JhZcX>h3Rpm)I1d{Y`sx~bQ?2wmuNPy1| zrr$;FkV!z))^rhwevAoYuhN&REs8*D8fnH7d=vrqMF z_`D3(=)_s@dallt^_L`_M!j(x8O$JJ!(P($Q~gD~rnk&m2fy*};rjhz;CqUQyB4SY zf%M*7fk4AU5}Q*aefi-J0f|E32;XPlP#AB?6ZDW&VUC0KK|hX|U#WLC8=rP=R9YU` z?WU%EF1ynJXXQ_a&2E(WQDgx=Po~a+=y2sI5zjd!SjwZu6b1}>)4h9c8Irt{Rj^^1 z!p9lnQR1Fg!mFvXpGAFYmi*J?#-x^pb?I0bkPMFrAGxkI%6$M%ZaP3+kjAitV6+CK zc{mSd>i+`}$LD*mu|=`}I*QWtkXKD=W)zF+HhDksp*Y*py9c=O*`LQ^Cf`x(aCJfs zc)ozjjbk6QP94q`xhX6AGg^{BCkA)D)k0Gn4+`mGm+iCE$N~$o*&CYZlZ)-oO@jpS zvR+828j{6N3XD;A=Jo5;o>SXXTv+ewL#2ON+$fC}S%uz2DneU7Sh>uOfvESSv4)6X zc_wccdqAh$*nt-3(-tQ0aw2{1`ec)-02m8c2qquyX{Va!FO7SM= zWH54Uua~`Wr~BhH<5b_<(sbq}!zCc%jkVDJE8^{C^uaifSqGR4F1H3A9QbKz26&BD zj%X9?w2K`xIP!}wf2O?oNVn8>$RkBNp>nR^(MNq9;THn8;}Lyc=&-9b@(@G)W_2q; z-TQt;xms@Yc==4namhUNMZcyprQ#A8BqT4G7X)V`2_$ZjVV!?LUcIS^Vhj+XDU*}9 zzKEA12-Xy04#g}@)z?E9DX$jgCHO+|oaI6rf(lu(Q3~ZNcs}tGGHY%4Sxn>ki%e+C zrjD1^xdLj8SeLY!Ha*gv%~C^l7&BeXLQ4v=a9H%#@993>1dR!k(kL{-EPk{TIRVBm z#Zc6G+@0F>O{kHPbKJ0*qcW<0uaubSs$nV|egiTkJ`=tq`jp+}+|W;%lHYMSj>5li zI0={$960L|Eq|KdpsJu1vOFv~?&WHr^A-cwJNXYuoPtha!2IPv0};~W{AG~0uTMm^ zz6p@>-uNN}q`Y61<}TVhHqiCm=oZK&?RZxwyiTN=104cxo`kuk%>PVz&jBg#GlU_K zIa=*fre-49)MFUeECCu~xb@z}do#L%Ip^tw?zszK@^a5~;c%u|vsz^TZ9bi*(FL0V zVYD0rt6Dm-T3B9_2BFl6Y0=V zsKnM13lt*_=F40?u6P=JXnW$_uyOG2Xpa7$W}A2A)iBF8Rb1w1tA|I9z~Qcm5TAp# zfAG3d<;nPe7D-&P3rm+Fn)bn#R59?6J(RK1x7K11OA z2PO_$SZF`B2NB1tyhXPcH$lIpD|l%6s$FhPAS5!4n*nW5$0-G((?JgY>anoE-h?~OqFATF0g!H96IM+6aKxbhSy!K0z* zEL0fOsc&b;lhDjqzeX;}^;yj#dR-0ncf`A{L=9#f1X6)mCSU{ah{PuJcD20UR0?ok zsKIfqy9>0uNQgb-;Ehrb+D^Xq{wjE9fJ+CQJQlpYkta53?u*}*HM7{xl{O~wg3l!s zki9;J?#11~)GlD>J5Ek}!{)j#X$Rg7^t&mUu4FIcFCivDA^tMF!7ZN*@9(958Q$O- zJ)KBt&(mg{=Zu=znZ8rY+rRo0`_2Q|AIu|CyTIP?;FBlBf{`HA&d!Sr35^hxi_ z(5=zcL5Dlo3}c@d*Vvl^nm{sx^T2!J+yX_93sZM7yQr9#q?SSz<;($bPqON zR5_^H$7Urv$z{>MpQce`m0hzjWS4bBK@;m*b$xR65pU@gaFu>&wZZcW%mps3UR>;t zW+LpY+_&Ct2JB5{X~_d6Z@n)MpK~{6($jcEsk{9MB$l4~d-Wg9K;PI&jbxT>U2%!Wo_we<* ztc?+tsB<^-36Hu1u?8sTZ3y;{_O8rbK$>%Gu7KUHI}fY>GYG~ z^w10IGc^y|5=a|SY03~qmvioe?@L>~S9GT4L>Skxv zSK;8lO{=Lmx@87(?49Wel) zJYrD5;h`5B4y)#bqp=(G%=t0i4FjK5LAkbl=pb7SH|227`#U2S_{qq(s`M65>n)ex z8KW}G0M^UTH0~^XO!*%2V&!pQ+W-%+79lVgRj&~?Zm%^NbawiIPzmK@s3h2C zsq3c?F7+Olnq{|4l>+4(L_;V}YpATrPVLVC_7XJW4F7Y~ZWg08_Z9DQAXD;T3#5$; zxERU}>+Rit^uXF$H?;9!n!i_V@oReX&C~mjjCesYvkOP?td4wtwzQWx5ql&rjvtm9 zxW8ThxrzA(Q55-61dmLq$dOQRb!7Qd_f7$~0cI>e+|a+nX{P$~Ll4U@01WcVJA|9&?p3)BJ~w2* z2N#R`mk*vD5~be!49D0X%^_W*<=hdLRwPqSLy?4J$8o&doI^vOB74ViE~JG;I3DBD z(2?Tl_@biUTcv1X0Qa;aG30#W3Lc}rA~fyW1d!);ks{a*eIepJeZv8~w zmFYjA&vwQ{P7bHoCzV|Gng(VJ2AeC|?jr8zs)KJcL=Pp*6#FCit`&f1fjk5IcUmjHP1KpnTW0vkKg=BwmG|cB=Tv!0Q)mbWtZhVbK|eJOOZfSfNwak%+%c zaG+PhmLTfxBX2uP#m| ze+=vR?c2-awf;o1%IWJFed0t#)`Gh>`~suRj-QHmiontQJd&IH=})fh@CVn{)WtbD zi&ZIlvwWz75`&+>$?*A`Eg^rU-ZaqQ&Q^HaUizbKz>!Y>{q+XytJe3LF0t?vK!m&b zVs|`!`jmTKLksl=pr(ibN!i<)G@C$$Xv%N+@C#%|*ZW_vTkJs;5ygcN?zz}QFG>Jh zU1OHRgL4d6Zr-6ZI#6Y)OMDaKRM+7wkq_rqfCH2`x zSaVn&6(V)K&lR7Elkqf|i33DRVPqj=ynj&nqg>3JcWi6>9Xre)CZa_ z7T+lY7paXNPTCXS?0B`^qNWcrE6|4_6;0%#4L|H{{%u~{-NZj!Ytd+}(sH}6`RNq- z`zYpW*m*GErv2EadYQo%F?{1ynQM5LPY*L7^;5lm&T5RQKX&C?x*>avLvJkefgil? zU?C05T3!^%1?9)@q?%PJOFOG@BB&F5M@rC(s$J*i8FKCE$bnWJvEKHi^KIYpIm+IK@Nm+pX8XeE#Nsf0ssT z*y=9@8+jmpbRY{ziU>R=IdY%NDvt)qU0Z=NgcESfLZMiZo z(lS6RFlmaBydJ2^@sznzz@+8!w-}i#A)SRceh7urQ_eFNP|!vU1$hN#2yH*6nL)s5 zK&7M4RoDl*Q6}Zkfdd^=HNG*`^n7>-`|Vzj9S@0mgT5hmt!GB*%W$TQl=HnBQxgc| zl?%PBHO{lMLA2=4*fN--8MJWtyaepurW2#8f$%2xFh@_FlJPK#_F7a0RX0!ygkf36 zapf?Vj-n@u`^H7#CO555i^l2}WG%)r45bM3{EMO?5UE=`q@jwjlV; z1#;r6ykdfE*=*2_fp{&t>pqxnp!52+}m|N=E_q zHd|BiH*+?u75_{X6yF9kK*Uxhp+Vok?U)<8&GjJVH3c!~sb?TSY!-qB*6FZ3HKUq-PPDkZ9ki^dWM;z4{U z&^)j+h5BZKZ``I{aD4wJtttwTOv;k_(m1J1Z+8!Cd4(DCNh?8t^IZzNa5XEW-v3wu zVKMzY^6{ml074B8<71Q)IKPHlCVmvJAAloTg%REiC20PrU(3v>$QR+Fmba@uslM4z_9~Pv6w*~ZW`)iI#ml*Q z3xNXaR*<*fW?Ca*&f&L522NcN-xS7&%>Z4c=b_KVG{3R0n3{JTA#UmdSAiT2a-4UP zg2yGk>mu7D$HxUh%V0Y&y+vsVc7j~eZokOLOO=kN2+u1Ooy8y2O|2MW+5ZKZbpv0t zo=K!S{~Kkt`HeF7HND`4^38lx?C!-Ebq+nV5~%pK(3KXH>oqzSy_)c02FF-nNIczV zX)Pr#r;9-BH$8j|S|6jn&b1K(oEg=~i}fUp>t&Z?O5Fu2xym9u61>rUPgRc5C%Jfv zvSu=^IDB`k>OmC!RFEW}$5~0vV%cn;?a_3ThIvDPB!^@&4hl$_Ra`O?oDr#D0;t&+ z5<;v$-?S$2*$E1#)X|~=UJr3|E`UX% zV`>G-?1uk}15+N9VkV0ZV};-Oq=&hH1uP&O%Z((n&>+({6?_x8v8M3$JNO+h&L#0P z(FU8QNH0IC_b-rE@Ii%PeDvYT-8QSqeFk`9lxJsypp%XBs#<~IRKpKG%#A@fSPk#R ze}~TcN&hh)l4s(NFk}?)DS5VohmK$n|JljLr?h?=*qbXbe}UM$6Ft>9`lug3Qm9eo ze-^PvN&EVM7i+mJ*tq-gTApBwf?OB`1Oi}IkZBQ#B$0W+LWF$hUHB-@(p(X?jepP| zfuR*Q@n~T)c85cXAwXooy}S5S9}kY@39NX)*+D;g*a`&dbUI|9n|n~thy;s?2Czmi zjp27+I3CVMX7^Wa64Jk8tCzMshi)#SvR-h>rX#sm>0E1s`kG7i9h@pd?{TP5RBtRF_K)F0x%=_$Fj*;8FLm>Waqkyg_D^t}-Mg+xx9z_N&4%|%V zsV_qCMUn@{X^N}y4n=_F-40Pi(LCd=^4HRO;IRXZoWPd|CKeJn$X)!qmaU)ZU-IlY zP9fWl(Bs#pWU#BRly)D`%HGh5g8sXe{dZzSQfJJ7{2-yE#h7{NlH0LMRzI#zbhmmO zQGo&Ac%LQ~5{~0RNRcM_(M>fblRm~#*%@?MieT&V_|iLQECTh1&7?V2l@=kx;C030 z{Qsdg^8EQZxF-fzF&e~8Au+fn3O+^6tapU34gAc(ercH?qIUri%v&lQEzVMB8d9&3 zHGEPATsVzahy{ueBIII2li7_~Hkk_#xF%T~HuK&ob!MZk@d}Xxn7Xj3HdAd5L8mV& z-%(742cQKdi`_@%MR93y-VGYp0g-I8iU9_mQ=3P-1355UaKt-q@>($~vmz zVoI!a3XjPSB*Rk%sASJjtk`n8$O;Cz$|myX4AjY=ZgTQ%{`d~&#=ztXX{fv0K8TAx~7K7kD8pMQG_WgA6i z10>q6QPw8eIdgugv>3oM+|&pWOSahzjeP{a+-YwF<;pkmf z6I6oL`du`u*kJ%kmu!4tICc<)cd=J)7wRU%MEa_FJ=1UMkoi9R1IP0~dpe$5PU|^5 zl#~|)d}aYu>#f|bMZ*bNvR+ELak_qq8ow^1EG-ArwU^KdTcPkE2tQZO<)1ZFr8K-n z{sNkb1Y-)KSr^Y@Ne3G5Yaiqh$b^Jp{hFK?!b2B@5Gt5Z5Z;dfa~=N2rpUqtJ>-Y(}xvC6}*M^#LNN5ooVGLk#m^qn&ddV z`5K2nD&wRthN-qd5sSYPm^6dc6mBN~gzPX^rk!t`tFEv@LIz|c1j;xEH0@uSid96c zS*uI%31p6MD?5W>fu*QQkfh=e&OqXPq>OD<-!YY)o&{o)|=H!{{sis6a1I*`CqG?Y1)E zb8SAP%B&Cx1l&8BfkvB2NVIw6A!C9YojjbWuK;GY$MA#`14eS5-UNH>1gT?1pw5CD zMIEI9FzW>_780MimM7irovJ4=oCkmRBA_`HJ3)|L{WzP-R!4%Z%-HCJP@IZ1cIlNd zYL%32OVU`&fKh;)))TK?abNK|s3B&i6QNjwCfMONNBn4pxbk7*G1EKh)$Ve;^ww3E z@}WU3`F)!7uIZmhnGHHS09=vf1CM!ew!;|Smp|Tu%zyIcY;O6qj9-8KpPvM<6Uo!% zjm>%cxD$B<>_oEvh0*_d|JP1r`9FT2;LIa#t~{1mF8f2S&IDfR0B%P3^rhubJ`Ggr z)`1T!ZeXdEbj(eZQ#miaS1BCWF1LoiJO_;H$_g~RL(!!g=&EZ_H6~XyzmFx;g)cSO z$%mN(l z9GAJX9>jYahjR8)1Zt$r!!k~OlTdaxnE!a~ql7NrwNLL4+ zp{X!Ee1{(WCuUx&OS#L?4&B)h$qnRo+8+x9E?rV@1EgAg;=0zt64Avbe8%3k-| zAJLXslD7)|u{=BcuUg(gKH~64zHADee+vn({8*rz^Q)=_RJEZG?XQErZU;#;ZqL(9 zi7Dhu#|HQ-OuniihQki@d7km&=U;>^bw zMMC(usRNYyGToYTs!5H6N+5xjZPdNux60zYr80N^RZV*2o6;pNQ&91(Lg>~=60W{$ z`!MWkTIT@FvuC+GW7+M)s#A_Po_*ec3ZuNoX69;Hgr!gJY5Tzc@?W8k+FzlMyib}n z%nAze7yENU_g^a{G&IXlLr{%R@*fcD2aaTLDk}y|uTxhRkz7D8{@r1vkJ1M_z#o6Z%~v1+HuFt9j0@>O1m8)%(|YO% z18bF0-W5Ew+(Q^4+~L@~Ug;1J$P1>wv*vD)D-j)eaWR8IuYk^P3&|7qO(djAy)p?| zncG4!eGW_ix%E*VQ@fyM;J^NDXc->KTl*>uPnt6FP6X&KWMLj~ho}afQh_fKx@;@9 z5I9u6ssC7h=d3E%Ys4u; zCqDhX4P$dKF=JWh?O@I8)og<@jeJ904p5hD3zLdP4gm4#~k z)&;G`H_Xkw!?DzHU_Q-&LFMPEz&6IvDNhva=44$kt4uj}YI~NRIz`Rh(DG2OjX8OG zJIfl^AV_S-$mf3ISI>%zApGI|Qw=0dEy7#)?cS_BRIceLnC9xjmKtGPAn8s;lez?O zJF$jpeuuO_;{N3$sh%v`Kxg2#sE9DCa6Ym=6Z5YqQmP}QVh9uiq4%x=Z`vu9k9^J? zS6+#yvMvarszrH<=s=`-vhm2FFAx5WL*FTmN6sp%X7H*1Rs0}6Q*}XQN}x*@P)Bd} z3r1D^+js*IrKz z-I&b7=ZF1GM;l+yT!qS%NSqX#7haS7M3@x++4ofu^Z6oL40^@!!)Cc8rmP<7yDD=o zt5*-u#>3Gv0G3dGBG8tqbO_>=QJ@CH$PZp;OxSO~ZNC(J{ups52r~!HAAV1MU=O%! zU}t-G{5Rcs020uhf!>G1Jf<{Y4WHwm!4q@Xk1foql$qcU7I;REl)jkWo@tNVznU&y zmfWj(zbkA$-OR^swkc+N>W%tW?&Fv5{Anpsr9zPv&LFSC3Qb<|#UzNS{A4F0l)!(k zeRLeMo?x9=j{BHT7BLBApzP+V*j zDHKHMZyqv984#v&nBM<1?{_xA^x+un@-Wkb@1TKuZ49_Pw80%#Q8`|dDJTT3|6i=< z=Raw)d_2{iKlb~Q#Cc(bl?ax4i;oS!H0SW0i_?NFhu;eoh(6FCO;@9JrO3L`-y)V` zYq;rkm=c#w-G@E}*~TCV#PRz$6%{__KguM2=092!hvkW>5YIub>AO> zrxq!8&4GfHz_j&xr%Mcpzr(iG<3K=$3vy#lS}nUH!iaH1-5AHoEBYi^nF8h=9y+?; z#73#SNc7~-Fm-?%5T*trQu!684&=kej$HpwVQPpCuiwJdYSnDCR*zw7IO;WmM0#DS z0ERflfg~%2uD$oBa)wQ5LH)LWcB%JO!UAw%jU|@-*Y=*8AAY5wa3QEh{_L~xJIkMV7C>DhRxRA2agPPKP}d;DCs z-=QIpRBCiZX8VGl2cA^7F!3Xy{vG|GAu|0H{isHGhAmjL{fV9tT@q`71N-$CkngmL zTktquO17+SO zp?haa0)ZxN1+8bOL_~`Jf0%O|+W%Jk2vPm7#Saj>pQf|j2nLtM@HY=VV&1u04|-a{ z^q4r+c~TA|bRgRFHNqA&n8*G{W;43^b531tA(fUo8}gmYj#Wb{(?j{*%*r*zLeVZ; zgU#{YH8p;_{X(72R<~_L;9JB~kzsGXIod)U^_m=gyFb!$6@f`IB$0u1fZ-bQdJuZd z66~_QBym=ugc>O5Vkr!%6derZ=3H)+$^ntw)wW|F#miHlkH)6COOi00g3m0}I68=+ znG`S#Hqe*+oOE=luk}2Xsiotk;!u`Qi2R7K>+@ciSo~kO`9C_&t9M|;pU8mdN3G$! z8dv?b?`pvs!RnRo4X!)eKWfz?7Zwt`7=YuP%J85nHVYO!noJofV?3@1#M}VKIa-IH zZVzV2^~rIzxp)>b=#>igd#>7gj>s_Q_?6K?yPYv=)L|$VBjlXFy#X1~8zSRDF#QfP zZ!AVjCZ_ULR~Qpg&}7?0gQsQ2!YuHE$PS%QP#AzW`|u3uC^5V3dHgh-%Qc!M!G@;l z<{PZxlpuxLT-q45B>Rh4TROaqyt2h2`_zIz#{j4qCJ5@+D5HhBV7z+-zRIEJIo_8M zhXVOv)Nh^4gtiX|=Z6IhJPRa@&yq~4Pygb~lK~?is~=|>ubyTZ+m0Lm3Vsk-BQnS% zhoNeC2gUl4?2eY}ea8!uRXQ*I3etXt__~T_O~`4pfQ*i31$h_`W=Y-cZ`Mny9&7dK3OmvUI#4GwLp;>P zqC!xo?5Fz2Xct4~7tCgIoruwY9OmcCZ$d^0bF0E}jV=UxZaybyKnb1!rGz0)t#UW- zd_W#_1&qn&x)ZrK7GnU`teT_GF&HFDAG-G3cY7i}OU85oN~vnMGOE6-Q1ars+c%~x>I$a7QsoW?A)!4|G8<$Z>VnM;tzYEV<+B~t!g3`YW z&s4X+3(t5(|1Lc9r2GQSr`Xvrzj5Z~QFC};k&#{Ic5Bv#IRREzV#5=dU4hlFSvIQj zeG;DSc4UP>BSDBd5y~aK#rHIYZ!Y)M3P|0bE4hW{?q|Lgg;yJaAcrAH z)iDlq;f1mMX*`=4biWK~Bw#`~mVIh}^py33^1U90w6-U`t9sYes0Zp!S`Rz@QYk{D z19KYTB)~wa@r~WOq5cvu%ZQ5-_3RJQjN$zJi^6}OQq)JJ(kNrl05xEOS zFmkrg8%wNryXy|pHSbv~_>EI&S8&psv&9|lB^PaRv7~{C|D$Ye(vxG8ZTS;44`tV- z!pXadISE>1DIl#?q6}~iI7X>vB!u1;%#m>psNd{mFPS4Iz3>`sCtv-7V2Nhi_?(x5 zsE0RSCPQ&!uHfqAL%RKY7w>Q(KL`D1!~KS(z#JnnS4`IXAEodfM6%o+VLGNNt!g?rJCBSx9n@-gVwP2*lsUM_ z$+u7Czhh?G64K18{?6{k(oqqT7C9F`Q~XxSo>*=Y?B~E0^jJb}PVTCs+Ch8TxM#o8 z)(}dZ7DFY2m=WU+P9tV%|G&o0GAxRR?c0bnNJ@jif{0Q}cej9aO2@JwA<`hdbV)Cu zq;!dNNr!Zo2-1S&!qV{!{_p#K;&?y2`*C(=cXp21IcCo5y3XH6vHsZ!n;|CAPKU{7 zv5Cz&9}WN2|NPW17WzQVaYq13@rc&4H1FjyW!#6623r?dsD=N@XUg2@vz_%2nL-%0 zdSuc>)FE-{KXXJ~S3ka-dL)N*?G;|&z|@(XNi34CoEN#U94tmh+IAD;Z}pMXXWLEo zG-M=b0kT!QicCApv2`abcW@!(DU2TXNOPZK(!0z$5OStTao zfu$AtNDMMVeR$tNO_ur;40KS(eBdKM_08LC;S3B>iGFi#S)!U-BI=>wCeL5nHNcoc zH-hUoEx#mL+vV9^&nc6PiSDpmF6w-O#mb>ektjFlCAxfa0AxEtivx5DqyUu7Sr(D- z=*5tcP>CypuVhTQyQ|^G+P)i`k`-`m6sN*Ph4)V8G?BEuPMhIl z-l1Ec5-2WzU59F)^IrYHA35W=qamjE(Y&^3yr@(UVgj}Z)rbBjJ~AGf%4Y*qMEkR6 z#GMsM3fsp~-DpjOEeOh|hY+wcZ#v~IHy>Vio>7;7)}s$09w`7f>)R6Kl05!YFE7cM zO%y(i1@q%)%E=#;wRdcG%#f!qpbv0*bp`2fPYE=uI`2vHmMeI|m68^%VtK-I|J{E# z8^eMEyRszL&f47A`h&?h{eLXIU#Xr@5zgK7dg+C7Y97%)EB|X-!a+hsPd>qu;L)lw z<0hg1^NA*sk{OMyC|^0GfqnbWc9QmTl01o3$l)FLe;&v;ByT+G7y0r>+eRbUb0hm=0bUK>}9%xiRe=c;OdcoYul^WH!28RAI8 zii9r2U;K{0wrX8t@euS*Y$49@nb^H>cX%hjU;k6)$@zGXM8N6(!mA(r4&iSd4_Y$f zU+5t7bp9gl5+gZm?zVe{$aj!0LDb@QVxQ3aRf+f!#sUe7@iSgts3?O`B~x(&NLc6YwK|aU)NNh7=kjb)eK1{1Pp@+q-)RYB6iFr!SNG_ZMEq zeu`z$G%NEyy^Cyr%%FP-%O-N&J!I%WulhNtUBou(4jpGPQdDWiyTI&(=c)oWZKPuO zK>sGDe7SkGF0mT*(Lf&_9Y}|L(BVOKlt(O~Ra>U0RNl8IOlKy3LPWk?RH z{mf4}uKku;F+uPWtL?AE>ByB0OkxwtW83r^Tig4->!I(WLY>s9zXSn=-EL~b(q^%d zDSF=Py7zKv9)z9eL)%(4cJrFE1m5%^dit||KSjQOj)|by0#M+oun|w%i*!z)Jz~8}6^{6qT zzGX04I{`yevFr=(#E^wH7ZLBbcMtd+e!i;M8c2-e+voeeFkOleF%hj)!PeB(zH{5% z=j5uBk(OqWy56GdFI3AKn>g4ap;!Z^$2B(X=bukvrsX$Kx$RV^T&i|#?^YHT;i^q5|u^I-Dq1JLaaJeg96BOxa zsZQ#qv&w?{qu!o)Bj8zv|JJEPI=7!n5{1QjhsQqb1{zr+NPCJmq<`y`Og3pL$o zZq7<5b0xZ|b;Na@HtH52{kr4d<$Z!_)~2kK@J)XC70}0Rutp^Ku58ig&tAPj^I>!f z`)%e-nIXrlFmhMfz%vlV`1%;t_r@Bf4c3RCHe}yqVEN>P@$w@RwlazTeT-evJ2wd~ zjpW-JP%@iV?8wJebWn6Lda%Zqw?uv%;-6N(`(A#o%9WB-?2~6VjACX6rMC+hC}Xe_ z1&z>IG209@&=*rr9RkMg)%Lybzwt2xO^>=P7Mg6ulm)ko^x7peo49V$&ix`PTvZEyCyAQ?4j7Lj{`)y zD!dbLhPitUV7E+KnY8-MMRDloEq{^Vbl)YD8l}p%qXJs_F?WO3!u98x#6e5c+omZk z9CyA-9If4upi~3au(NUiVTf96%BEf5JSMi?Ydw=m!%6Pl6?{9#;!T5qYhInhkgXvg zJfSyOGp2*>8lb7pT_p!AOX1F1`nc}t^bXQpjb2^CGtr#! z&Oul5K-VJ#*Cuv9@R280OIRr6E9#Jvvo#a?D`OqGcNMuf&# zf6pu-myP(N?B0q!2ybT1&R7Wdw^SvS!?);y&bwGKv|QRRYtjqfP8#_0W%zU``fF}# zm1wszw+pu)6ylb;)?(}3XJ zT%6hX@F?(>NM5Mw>oIC`NByE%EeMtrA^2uzrjS<@bM=}tQ{h_{c?nbd4Nz-~d}=*0 zM{iOo{ZF8^E4QHW6otdyCuMC3D-PxWH19M@o(Sh8>QFTDR|sAssed2@!Ws-Y+s4gJD3+7 ziL<9mgt?!FF>keA5;#^l&9G+qqT}+x#E?M`Lf^XM(It z-cm^Ew`a}!Anq&(w^H@3pDD1Z>}7vu&X zRL`M-NrV=u@m+DB*`^NdC4c)&&l_FZ=9hG;2;cuFb%&U00&hZHL16pZ9f5+%OC*zx zFM$r~z8Mp6NVO1d7yoB#W3IF^EbW3ul8>?YAn&Cf&vHqZ;$u;zN1)H$&L||mz?M1_rIZQ8=YdDK1&gT|Pd?P#UJv^&0X>ui^wRNbtd-xS z8xf@0OuGu`7|@0Daqf~FjXgNjJ6ThM zDJc){?Tfr+c@wpi)Whk8NJ3m+rBzP==51L!Ls5SYYnuXW*sI9cglBgOh}6TUcnNye zza+KLP#O8mr?4_x=#;77K1wf2*j1QoJwRC)q;NC~{XuFT2!ptEd^AXSEFM9xsH`8b zIRpm<+i>x8`(oldzp0L*lm{!k);K#YFLR8*rZyA;al0ygRi9dwg~N` zsz+yVPOECu3%`CLBzX6cHRfj8e!q3(fQ!yaS8)J$6JutosBwHAe#%eQ)N&_|N{E;e z49ifOp%H@i&9J|s#t4BSd|(@#pPalY^9~>b-QpWz)=r)Hx(F-Fz;V(I_QQCl=fmPN z^w3q{qOqNjmekFB$6?Y!|E9(ClQ;J)jfMX|vTYNKkdKB8x6J8-yi6BQAaaxSWApmPUM3y9-XXzClQk7LF1w2CuHe71|L&xPxM6fX1y9E zsgeRIg zTke}DN;@;n5>kl|BD3hlm7nJ9g}G~umsT>Tpkozy=acodUY%v8#(1+Fw|V0)jJVkN zkuuLznml}Q*w#4|jnu1Gjbr(*pHrAzXx^qzs}bPAb%xKyMq`e9 zd7dm2%6}Tx8cTu?C-=S|-ZX(XjW4y(krEFJZnkHoa6YxMT!0sf&tf$M2Uz;|_KGv4 zOs<9;k;R&3ds6kjrl-x+6UBP}W!f<3JZ@~L>`rD9d$|vYU7aVU{DW4?IMC(|nDM{N z6B~SN=M{Ui!!(dAki`<0Eg3{<6t78Dyu5>T7T@$J11qt`f7H=UXd&)&@ii|gW&xx4 zUEtf;kSW@rDSQX5BFJvBO7@s!rwUFriDYmbnL8A?Bjrv-9DG?vs#N#w zs>hyCeRo>gPBigo0K*bBtF(yl{p?r-f{cYFgI1la#@p;MgWTfnR?03-2>%rHNhsZP zm}o?>6zgb0DCpd00xEb@w1X{kVGaExaA2TH;zE=o>zhqHy~tX}L+2Hrx}A zC-vM@{g)8<=j{9$p7>wUHt|p>IJqN>ScP|D<=(T+?W0ERrN>TzvPM@!!y-V(sYwr} z8~YY0rSS6$556ajn5+7=HZCa#B+=++c@&qi_5#d!qllH?Gn+2kMAvszzrfP8R}VFs zqR0h2LjOJm2bG-6o>6KC_*MQLO)(h}ba4oQ9#8E=78tolUm=&j+kP3RLd`)3pJeT* zC#*CQq~lakQ~v0{>U|vFf$3q(mqar^{t=RK1nO2^ltfwma^h0z2 zjLM;2JdheQ>N1uZWKoy@%Ys5WQyCN(GUTW?Ip9>M>H!752LWL#N#NJzO$?$x)!}?=y+~!t}a|w zM?(161S+dyVL~)(G!Uqq*`is+tNv@$Z%c;(v(i`rkuUU0rN+3w^#xUkz*@-(wFN3( zv)*R?(x5+lZZ}=Q=!QICMJ;c_$Wq^6#EB_!z$-=@_r$aOnOB82a<3GrLw$>{<7##X zv@7X8i!f1=T~@i*icrf*9v*deVi%L4DG7a4L**oc)TFDb$IMj%rtO2@Y*&iWR_u=` z(Cps@ET<-@m{En*nGFwYtX5-TsN1FtA!?gLzp@X6HQpY_8uyITMbjrBe~%gRK4GCl zq6RW()vSieStRssqGZ6jN2QcQFYo0d4~+@%nRo5n<>!VYLpZc8E>r!?=t%U?dZ{wt z?XW4w@X_7w!tX7Ur0KNqp7cYE0_VxCejiO0Jc^fKR#Utu9O>(QWh>S3B+(ywcg3W- ztmFy#e+`C8;5p*03QaOAYo6ymXdBqQCI}^oy*G>S4)&J6dG%u*gb5aG$3k;>+;6a) zh{k+3#!1U(&}#+U%aK5+-1sJjzOP|Z&-T8`U{5`IJw9i)*C(?HL`|On5|{?)_UX1_ zcn-I__Z`7J;N!fu-MOZSPm@`1pgJOl(Yc_f;tbG@q->1YbaWTUfP;PH3ymf=%dOEuM`=fuv>rnSwZ7As$}RKkFe z&$fT~>uzaiPD3K^vn44SN5p)hHr35@d#f*F@~G~7-1i9!@Tk4B;cuA$ErG# zFyx@%(s3gqPeI?gs*|lzp|a;#^{%4X;TYOc!Ht_P8tiATnq;qTzB!h9X1A4A*;VjDl4 z$1rmt%jSuwu)*g2oFFt33ikuylI?M?s4`qYtf0@Q&s9g}AzePOPPWjQw(yeMWg^usf}I zaBr1kGTAJbiCICA|7Q!TnC+av01RR>OgFk4?thbU$}C@^t+B;iKTCN$BGuA)Q9C|0 zxq>!OCEzVyFw!)U&2USrqI&>OUujwuT>28)*ksG8IrO;ZY zeJ|oyk*NG{LVZug32(4Gtpz+z1Y}bG2fMz1=MeM{4(H4@GA{Vvq+F5>NKu~twRQB~ zQp(4bv0UI3Ee`i8PvTg_kR6%?h7DM?imZxA*_S-OM?-VmeQ9 zH;WF#G={ZiL}K5Cn>|yEhLu@^e&iMKv^q^v|#$hrPYwL8RnX*_@ zN5Zhjw8%pqxc5$?{~IBh!ZvaCLc3VLQ0>XqVZ@!Ra2)*BOm=y4Ec*xs_Kl3C0TLvG zLI+3VfO5maBSJONCqJ7#QZY`q&8dJ0$v@kS(lZQX$92Qh&(BwmDaJB6FfU>p*NjB^iCc>s|=O#y=q2Di`e`DQBifzQOAa zkhA7dHI?iBE+qt{pm8St5LWz_ff%c?j9aC%H87eiZ?yP`_H#Xr>xG!d{bC zk4;`10gtnu@rUsX-CMV7k;3k0'peerDiscovery']: [LibP2pBootstrap], - ['dht']: LibP2pKadDht, + ['peerDiscovery']: [Bootstrap], + ['dht']: KadDht, }, config: { transport: { @@ -53,7 +51,7 @@ export class Libp2pNode extends LibP2p { }, peerDiscovery: { autoDial: false, - [LibP2pBootstrap.tag]: { + [Bootstrap.tag]: { interval: 2000, enabled: options.bootnodes.length > 0, list: options.bootnodes, diff --git a/packages/client/lib/net/server/libp2pserver.ts b/packages/client/lib/net/server/libp2pserver.ts index 6898a8db8d..e172fb56cf 100644 --- a/packages/client/lib/net/server/libp2pserver.ts +++ b/packages/client/lib/net/server/libp2pserver.ts @@ -1,6 +1,6 @@ import PeerId from 'peer-id' // eslint-disable-next-line implicit-dependencies/no-implicit -import crypto from 'libp2p-crypto' +import { keys } from 'libp2p-crypto' import { Multiaddr, multiaddr } from 'multiaddr' import { Event, Libp2pConnection as Connection } from '../../types' import { Libp2pNode } from '../peer/libp2pnode' @@ -81,11 +81,12 @@ export class Libp2pServer extends Server { this.config.logger.debug(`Peer discovered: ${peer}`) this.config.events.emit(Event.PEER_CONNECTED, peer) }) - this.node.connectionManager.on('peer:connect', (connection: Connection) => { - const [peerId, multiaddr] = this.getPeerInfo(connection) - const peer = this.createPeer(peerId, [multiaddr]) + this.node.connectionManager.on('peer:connect', async (connection: Connection) => { + const [peerId, multiaddr, inbound] = this.getPeerInfo(connection) + const peer = this.createPeer(peerId, [multiaddr], inbound) this.config.logger.debug(`Peer connected: ${peer}`) - this.config.events.emit(Event.PEER_CONNECTED, peer) + // note: do not call Event.PEER_CONNECTED here, it will + // be called after bindProtocols on peer:discovery }) this.node.connectionManager.on('peer:disconnect', (_connection: Connection) => { // TODO: do anything here on disconnect? @@ -151,21 +152,22 @@ export class Libp2pServer extends Server { } async getPeerId() { - const privKey = await crypto.keys.generateKeyPairFromSeed('ed25519', this.key, 512) - const protoBuf = crypto.keys.marshalPrivateKey(privKey) + const privKey = await keys.generateKeyPairFromSeed('ed25519', this.key, 512) + const protoBuf = keys.marshalPrivateKey(privKey) return PeerId.createFromPrivKey(protoBuf) } - getPeerInfo(connection: Connection): [PeerId, Multiaddr] { - return [connection.remotePeer, connection.remoteAddr] + getPeerInfo(connection: Connection): [peerId: PeerId, multiaddr: Multiaddr, inbound: boolean] { + return [connection.remotePeer, connection.remoteAddr, connection._stat.direction === 'inbound'] } - createPeer(peerId: PeerId, multiaddrs?: Multiaddr[]) { + createPeer(peerId: PeerId, multiaddrs?: Multiaddr[], inbound = false) { const peer = new Libp2pPeer({ config: this.config, id: peerId.toB58String(), multiaddrs, protocols: Array.from(this.protocols), + inbound, }) this.peers.set(peer.id, peer) return peer diff --git a/packages/client/lib/sync/lightsync.ts b/packages/client/lib/sync/lightsync.ts index d4af95f51a..6116e01967 100644 --- a/packages/client/lib/sync/lightsync.ts +++ b/packages/client/lib/sync/lightsync.ts @@ -40,7 +40,7 @@ export class LightSynchronizer extends Synchronizer { * Returns true if peer can be used for syncing */ syncable(peer: Peer): boolean { - return peer.les?.status.serveHeaders + return peer.les?.status.serveHeaders ?? false } /** From a99e3b804c76ad4f632da944e988ee47fc3068ff Mon Sep 17 00:00:00 2001 From: Ryan Ghods Date: Fri, 26 Nov 2021 21:18:24 -0800 Subject: [PATCH 03/17] remove index_old.ts --- packages/client/lib/index_old.ts | 78 -------------------------------- 1 file changed, 78 deletions(-) delete mode 100644 packages/client/lib/index_old.ts diff --git a/packages/client/lib/index_old.ts b/packages/client/lib/index_old.ts deleted file mode 100644 index e22e4b017a..0000000000 --- a/packages/client/lib/index_old.ts +++ /dev/null @@ -1,78 +0,0 @@ -/** - * Define a library component for lazy loading. Borrowed from - * https://github.com/bcoin-org/bcoin/blob/master/lib/bcoin.js - * @param {string} name - * @param {string} path - */ -exports.define = function define(name: string, path: string) { - let cache: any = null - Object.defineProperty(exports, name, { - enumerable: true, - get() { - if (!cache) { - cache = require(path) - } - return cache - }, - }) -} - -// Blockchain -exports.define('blockchain', './blockchain') -exports.define('Chain', './blockchain/chain') - -// Handler -exports.define('handler', './handler') -exports.define('Handler', './handler/handler') -exports.define('EthHandler', './handler/ethhandler') -exports.define('LesHandler', './handler/leshandler') - -// Peer -exports.define('peer', './net/peer') -exports.define('Peer', './net/peer/peer') -exports.define('RlpxPeer', './net/peer/rlpxpeer') -exports.define('Libp2pPeer', './net/peer/libp2ppeer') - -// Peer Pool -exports.define('PeerPool', './net/peerpool') - -// Protocol -exports.define('protocol', './net/protocol') -exports.define('Protocol', './net/protocol/protocol') -exports.define('EthProtocol', './net/protocol/ethprotocol') -exports.define('LesProtocol', './net/protocol/lesprotocol') -exports.define('FlowControl', './net/protocol/flowcontrol') - -// Server -exports.define('server', './net/server') -exports.define('Server', './net/server/server') -exports.define('RlpxServer', './net/server/rlpxserver') -exports.define('Libp2pServer', './net/server/libp2pserver') - -// EthereumClient -exports.define('EthereumClient', './client') - -// RPC Manager -exports.define('RPCManager', './rpc') - -// Config -exports.define('Config', 'config') - -// Service -exports.define('service', './service') -exports.define('Service', './service/service') -exports.define('EthereumService', './service/ethereumservice') - -// Synchronizer -exports.define('sync', './sync') -exports.define('Synchronizer', './sync/sync') -exports.define('FullSynchronizer', './sync/fullsync') -exports.define('LightSynchronizer', './sync/lightsync') - -// Utilities -exports.define('util', './util') - -// Logging -exports.define('logging', './logging') - -export = exports From 907371d5220f09f6cb64c0cc3ad7b0f111898355 Mon Sep 17 00:00:00 2001 From: Ryan Ghods Date: Mon, 29 Nov 2021 10:14:09 -0800 Subject: [PATCH 04/17] fix spec test (add anythng() matcher for new boolean param) --- packages/client/test/net/server/libp2pserver.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/client/test/net/server/libp2pserver.spec.ts b/packages/client/test/net/server/libp2pserver.spec.ts index f68be688b3..3626d33a51 100644 --- a/packages/client/test/net/server/libp2pserver.spec.ts +++ b/packages/client/test/net/server/libp2pserver.spec.ts @@ -148,7 +148,7 @@ tape('[Libp2pServer]', async (t) => { node.emit('peer:discovery', peerId2) td.when(server.getPeerInfo('conn3' as any)).thenReturn([peerId3, 'ma1' as any]) node.connectionManager.emit('peer:connect', 'conn3') - td.verify(server.createPeer(peerId3, ['ma1'] as any)) + td.verify(server.createPeer(peerId3, ['ma1'] as any, td.matchers.anything())) await server.stop() t.notOk(server.running, 'stopped') }) From b8cbb542a5dc745290e25d06f8d158f0ed2adb80 Mon Sep 17 00:00:00 2001 From: Ryan Ghods Date: Mon, 29 Nov 2021 11:40:16 -0800 Subject: [PATCH 05/17] move client event handlers to client module refactor some cli logic to own functions (helprpc, inputAccounts, setupDev) --- packages/client/bin/cli.ts | 267 ++++++++++++++++--------------- packages/client/browser/index.ts | 12 +- packages/client/lib/client.ts | 23 ++- 3 files changed, 155 insertions(+), 147 deletions(-) diff --git a/packages/client/bin/cli.ts b/packages/client/bin/cli.ts index 9e1ed19e18..c4985cc04c 100755 --- a/packages/client/bin/cli.ts +++ b/packages/client/bin/cli.ts @@ -9,14 +9,12 @@ import { Server as RPCServer } from 'jayson/promise' import Common, { Chain, Hardfork } from '@ethereumjs/common' import { _getInitializedChains } from '@ethereumjs/common/dist/chains' import { Address, toBuffer } from 'ethereumjs-util' -import { version as packageVersion } from '../package.json' import { parseMultiaddrs, parseGenesisState, parseCustomParams, inspectParams } from '../lib/util' import EthereumClient from '../lib/client' import { Config, DataDirectory } from '../lib/config' import { Logger, getLogger } from '../lib/logging' import { RPCManager } from '../lib/rpc' import * as modules from '../lib/rpc/modules' -import { Event } from '../lib/types' import type { Chain as IChain, GenesisState } from '@ethereumjs/common/dist/types' const level = require('level') const yargs = require('yargs/yargs') @@ -262,9 +260,6 @@ function initDBs(config: Config, args: any) { * @param config */ async function runNode(config: Config) { - config.logger.info( - `Initializing Ethereumjs client version=v${packageVersion} network=${config.chainCommon.chainName()}` - ) config.logger.info(`Data directory: ${config.datadir}`) if (config.lightserv) { config.logger.info(`Serving light peer requests`) @@ -274,13 +269,6 @@ async function runNode(config: Config) { config, ...dbs, }) - client.config.events.on(Event.SERVER_ERROR, (err) => config.logger.error(err)) - client.config.events.on(Event.SERVER_LISTENING, (details) => { - config.logger.info(`Listener up transport=${details.transport} url=${details.url}`) - }) - config.events.on(Event.SYNC_SYNCHRONIZED, (height) => { - client.config.logger.info(`Synchronized blockchain at height ${height}`) - }) await client.open() if (args.executeBlocks) { @@ -409,26 +397,147 @@ function runRpcServers(client: EthereumClient, config: Config, args: any) { } /** - * Main entry point to start a client + * Returns a configured common for devnet with a prefunded address */ -async function run() { - if (args.helprpc) { - // Display RPC help and exit - console.log('-'.repeat(27)) - console.log('JSON-RPC: Supported Methods') - console.log('-'.repeat(27)) - console.log() - for (const modName of modules.list) { - console.log(`${modName}:`) - const methods = RPCManager.getMethodNames((modules as any)[modName]) - for (const methodName of methods) { - console.log(`-> ${modName.toLowerCase()}_${methodName}`) +async function setupDev(prefundAddress: Address) { + const addr = prefundAddress.toString().slice(2) + const consensusConfig = + args.dev === 'pow' + ? { ethash: true } + : { + clique: { + period: 10, + epoch: 30000, + }, + } + const defaultChainData = { + config: { + chainId: 123456, + homesteadBlock: 0, + eip150Block: 0, + eip150Hash: '0x0000000000000000000000000000000000000000000000000000000000000000', + eip155Block: 0, + eip158Block: 0, + byzantiumBlock: 0, + constantinopleBlock: 0, + petersburgBlock: 0, + istanbulBlock: 0, + berlinBlock: 0, + londonBlock: 0, + ...consensusConfig, + }, + nonce: '0x0', + timestamp: '0x614b3731', + gasLimit: '0x47b760', + difficulty: '0x1', + mixHash: '0x0000000000000000000000000000000000000000000000000000000000000000', + coinbase: '0x0000000000000000000000000000000000000000', + number: '0x0', + gasUsed: '0x0', + parentHash: '0x0000000000000000000000000000000000000000000000000000000000000000', + baseFeePerGas: 7, + } + const extraData = '0x' + '0'.repeat(64) + addr + '0'.repeat(130) + const chainData = { + ...defaultChainData, + extraData, + alloc: { [addr]: { balance: '0x10000000000000000000' } }, + } + const chainParams = await parseCustomParams(chainData, 'devnet') + const genesisState = await parseGenesisState(chainData) + const customChainParams: [IChain, GenesisState][] = [[chainParams, genesisState]] + return new Common({ + chain: 'devnet', + customChains: customChainParams, + hardfork: Hardfork.London, + }) +} + +/** + * Accept account input from command line + */ +async function inputAccounts() { + const accounts: [address: Address, privateKey: Buffer][] = [] + + const rl = readline.createInterface({ + input: process.stdin, + output: process.stdout, + }) + + // Hide key input + ;(rl as any).input.on('keypress', function () { + // get the number of characters entered so far: + const len = (rl as any).line.length + // move cursor back to the beginning of the input: + readline.moveCursor((rl as any).output, -len, 0) + // clear everything to the right of the cursor: + readline.clearLine((rl as any).output, 1) + // replace the original input with asterisks: + for (let i = 0; i < len; i++) { + // eslint-disable-next-line no-extra-semi + ;(rl as any).output.write('*') + } + }) + + const question = (text: string) => { + return new Promise((resolve) => { + rl.question(text, resolve) + }) + } + + try { + for (const addressString of args.unlock) { + const address = Address.fromString(addressString) + const inputKey = await question( + `Please enter the 0x-prefixed private key to unlock ${address}:\n` + ) + ;(rl as any).history = (rl as any).history.slice(1) + const privKey = toBuffer(inputKey) + const derivedAddress = Address.fromPrivateKey(privKey) + if (address.equals(derivedAddress)) { + accounts.push([address, privKey]) + } else { + console.error( + `Private key does not match for ${address} (address derived: ${derivedAddress})` + ) + process.exit() } - console.log() } - console.log() + } catch (e: any) { + console.error(`Encountered error unlocking account:\n${e.message}`) process.exit() } + rl.close() + return accounts +} + +/** + * Output RPC help and exit + */ +function helprpc() { + console.log('-'.repeat(27)) + console.log('JSON-RPC: Supported Methods') + console.log('-'.repeat(27)) + console.log() + for (const modName of modules.list) { + console.log(`${modName}:`) + const methods = RPCManager.getMethodNames((modules as any)[modName]) + for (const methodName of methods) { + console.log(`-> ${modName.toLowerCase()}_${methodName}`) + } + console.log() + } + console.log() + process.exit() +} + +/** + * Main entry point to start a client + */ +async function run() { + if (args.helprpc) { + helprpc() + } // give network id precedence over network name const chain = args.networkId ?? args.network ?? Chain.Mainnet @@ -436,55 +545,7 @@ async function run() { // configure accounts for mining and prefunding in a local devnet const accounts: [address: Address, privateKey: Buffer][] = [] if (args.unlock) { - const rl = readline.createInterface({ - input: process.stdin, - output: process.stdout, - }) - - // Hide key input - ;(rl as any).input.on('keypress', function () { - // get the number of characters entered so far: - const len = (rl as any).line.length - // move cursor back to the beginning of the input: - readline.moveCursor((rl as any).output, -len, 0) - // clear everything to the right of the cursor: - readline.clearLine((rl as any).output, 1) - // replace the original input with asterisks: - for (let i = 0; i < len; i++) { - // eslint-disable-next-line no-extra-semi - ;(rl as any).output.write('*') - } - }) - - const question = (text: string) => { - return new Promise((resolve) => { - rl.question(text, resolve) - }) - } - - try { - for (const addressString of args.unlock) { - const address = Address.fromString(addressString) - const inputKey = await question( - `Please enter the 0x-prefixed private key to unlock ${address}:\n` - ) - ;(rl as any).history = (rl as any).history.slice(1) - const privKey = toBuffer(inputKey) - const derivedAddress = Address.fromPrivateKey(privKey) - if (address.equals(derivedAddress)) { - accounts.push([address, privKey]) - } else { - console.error( - `Private key does not match for ${address} (address derived: ${derivedAddress})` - ) - process.exit() - } - } - } catch (e: any) { - console.error(`Encountered error unlocking account:\n${e.message}`) - process.exit() - } - rl.close() + accounts.push(...(await inputAccounts())) } let common = new Common({ chain, hardfork: Hardfork.Chainstart }) @@ -505,58 +566,8 @@ async function run() { console.log('WARNING: Do not use this account for mainnet funds') console.log('='.repeat(50)) } - - const prefundAddress = accounts[0][0].toString().slice(2) - const consensusConfig = - args.dev === 'pow' - ? { ethash: true } - : { - clique: { - period: 10, - epoch: 30000, - }, - } - const defaultChainData = { - config: { - chainId: 123456, - homesteadBlock: 0, - eip150Block: 0, - eip150Hash: '0x0000000000000000000000000000000000000000000000000000000000000000', - eip155Block: 0, - eip158Block: 0, - byzantiumBlock: 0, - constantinopleBlock: 0, - petersburgBlock: 0, - istanbulBlock: 0, - berlinBlock: 0, - londonBlock: 0, - ...consensusConfig, - }, - nonce: '0x0', - timestamp: '0x614b3731', - gasLimit: '0x47b760', - difficulty: '0x1', - mixHash: '0x0000000000000000000000000000000000000000000000000000000000000000', - coinbase: '0x0000000000000000000000000000000000000000', - number: '0x0', - gasUsed: '0x0', - parentHash: '0x0000000000000000000000000000000000000000000000000000000000000000', - baseFeePerGas: 7, - } - const extraData = '0x' + '0'.repeat(64) + prefundAddress + '0'.repeat(130) - const chainData = { - ...defaultChainData, - extraData, - alloc: { [prefundAddress]: { balance: '0x10000000000000000000' } }, - } - const chainParams = await parseCustomParams(chainData, 'devnet') - const genesisState = await parseGenesisState(chainData) - const customChainParams: [IChain, GenesisState][] = [[chainParams, genesisState]] - common = new Common({ - chain: 'devnet', - customChains: customChainParams, - hardfork: Hardfork.London, - }) + const prefundAddress = accounts[0][0] + common = await setupDev(prefundAddress) } // configure common based on args given diff --git a/packages/client/browser/index.ts b/packages/client/browser/index.ts index 954e422e00..9cc41dc377 100644 --- a/packages/client/browser/index.ts +++ b/packages/client/browser/index.ts @@ -40,7 +40,6 @@ export * from '../lib/sync/lightsync' export * from '../lib/util' import { parseMultiaddrs } from '../lib/util' import { Config } from '../lib/config' -import { Event } from '../lib/types' // Logging export * from './logging' @@ -66,21 +65,12 @@ export async function createClient(args: any) { discDns: false, }) config.events.setMaxListeners(50) - const chainDB = level(common.chainName()) + const chainDB = level(`${datadir}/${common.chainName()}`) return new EthereumClient({ config, chainDB }) } export async function run(args: any) { const client = await createClient(args) - const { logger, chainCommon } = client.config - logger.info(`Initializing Ethereumjs client network=${chainCommon.chainName()}`) - client.config.events.on(Event.SERVER_ERROR, (err) => logger.error(err)) - client.config.events.on(Event.SERVER_LISTENING, (details) => { - logger.info(`Listener up transport=${details.transport} url=${details.url}`) - }) - client.config.events.on(Event.SYNC_SYNCHRONIZED, (height) => { - logger.info(`Synchronized blockchain at height ${height}`) - }) await client.open() await client.start() return client diff --git a/packages/client/lib/client.ts b/packages/client/lib/client.ts index d51be11d38..83ee173392 100644 --- a/packages/client/lib/client.ts +++ b/packages/client/lib/client.ts @@ -1,12 +1,12 @@ -import events from 'events' +import { bufferToHex } from 'ethereumjs-util' +import { version as packageVersion } from '../package.json' import { MultiaddrLike } from './types' import { Config } from './config' import { EthereumService, FullEthereumService, LightEthereumService } from './service' import { Event } from './types' +import { FullSynchronizer } from './sync' // eslint-disable-next-line implicit-dependencies/no-implicit import type { LevelUp } from 'levelup' -import { FullSynchronizer } from './sync' -import { bufferToHex } from 'ethereumjs-util' export interface EthereumClientOptions { /* Client configuration */ @@ -52,7 +52,7 @@ export interface EthereumClientOptions { * lifecycle of included services. * @memberof module:node */ -export default class EthereumClient extends events.EventEmitter { +export default class EthereumClient { public config: Config public services: (FullEthereumService | LightEthereumService)[] @@ -64,8 +64,6 @@ export default class EthereumClient extends events.EventEmitter { * Create new node */ constructor(options: EthereumClientOptions) { - super() - this.config = options.config this.services = [ @@ -92,15 +90,24 @@ export default class EthereumClient extends events.EventEmitter { if (this.opened) { return false } + this.config.logger.info( + `Initializing Ethereumjs client version=v${packageVersion} network=${this.config.chainCommon.chainName()}` + ) this.config.events.on(Event.SERVER_ERROR, (error) => { this.config.logger.warn(`Server error: ${error.name} - ${error.message}`) }) - this.config.events.on(Event.SERVER_LISTENING, (details) => { - this.config.logger.info(`Server listening: ${details.transport} - ${details.url}`) + this.config.logger.info( + `Server listener up transport=${details.transport} url=${details.url}` + ) + }) + this.config.events.on(Event.SYNC_SYNCHRONIZED, (height) => { + this.config.logger.info(`Synchronized blockchain at height ${height}`) }) + await Promise.all(this.services.map((s) => s.open())) + this.opened = true } From 3528acb170c79b883d65ecaf8fde5fd9f26e42f5 Mon Sep 17 00:00:00 2001 From: Ryan Ghods Date: Mon, 29 Nov 2021 12:23:04 -0800 Subject: [PATCH 06/17] align headerfetcher/blockfetcher logic, small grammar adjustments of log messages --- packages/client/lib/sync/fetcher/blockfetcher.ts | 4 ++-- packages/client/lib/sync/fetcher/fetcher.ts | 4 ++-- packages/client/lib/sync/fetcher/headerfetcher.ts | 12 ++++++++++-- packages/client/lib/sync/lightsync.ts | 9 ++++++--- 4 files changed, 20 insertions(+), 9 deletions(-) diff --git a/packages/client/lib/sync/fetcher/blockfetcher.ts b/packages/client/lib/sync/fetcher/blockfetcher.ts index 4e6f918602..325c74c5b2 100644 --- a/packages/client/lib/sync/fetcher/blockfetcher.ts +++ b/packages/client/lib/sync/fetcher/blockfetcher.ts @@ -109,10 +109,10 @@ export class BlockFetcher extends BlockFetcherBase { async store(blocks: Block[]) { try { const num = await this.chain.putBlocks(blocks) - this.debug(`Fetcher results stored in blockchain (blocks num=${blocks.length}).`) + this.debug(`Fetcher results stored in blockchain (blocks num=${blocks.length})`) this.config.events.emit(Event.SYNC_FETCHER_FETCHED, blocks.slice(0, num)) } catch (e: any) { - this.debug(`Error on storing fetcher results in blockchain (blocks num=${blocks.length}).`) + this.debug(`Error storing fetcher results in blockchain (blocks num=${blocks.length}): ${e}`) throw e } } diff --git a/packages/client/lib/sync/fetcher/fetcher.ts b/packages/client/lib/sync/fetcher/fetcher.ts index 875d3cc3c9..2bd2d9898d 100644 --- a/packages/client/lib/sync/fetcher/fetcher.ts +++ b/packages/client/lib/sync/fetcher/fetcher.ts @@ -268,7 +268,7 @@ export abstract class Fetcher extends Readable return false } if (this._readableState!.length > this.maxQueue) { - this.debug(`Readable state length extends max queue size, skip next job execution.`) + this.debug(`Readable state length exceeds max queue size, skip next job execution.`) return false } if (job.index > this.processed + this.maxQueue) { @@ -329,7 +329,7 @@ export abstract class Fetcher extends Readable this.finished++ cb() } catch (error: any) { - this.config.logger.warn(`Error along storing received block or header result: ${error}`) + this.config.logger.warn(`Error storing received block or header result: ${error}`) cb(error) } } diff --git a/packages/client/lib/sync/fetcher/headerfetcher.ts b/packages/client/lib/sync/fetcher/headerfetcher.ts index 7174aba59e..99d5b89e7d 100644 --- a/packages/client/lib/sync/fetcher/headerfetcher.ts +++ b/packages/client/lib/sync/fetcher/headerfetcher.ts @@ -82,8 +82,16 @@ export class HeaderFetcher extends BlockFetcherBase { headers = headers as BlockHeader[] - const first = new BN(headers[0].number) + if (headers.length === 0) { + this.config.logger.warn('No headers fetched are applicable for import') + return + } + const first = headers[0].number const hash = short(headers[0].hash()) const baseFeeAdd = this.config.chainCommon.gteHardfork(Hardfork.London) ? `baseFee=${headers[0].baseFeePerGas} ` From 5964341cbcceb6b4665ef319c522abc58290cc73 Mon Sep 17 00:00:00 2001 From: Ryan Ghods Date: Mon, 29 Nov 2021 12:42:56 -0800 Subject: [PATCH 07/17] add `string: true` to `unlock` arg so it doesn't get converted to a number --- packages/client/bin/cli.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/client/bin/cli.ts b/packages/client/bin/cli.ts index c4985cc04c..4441dc8174 100755 --- a/packages/client/bin/cli.ts +++ b/packages/client/bin/cli.ts @@ -204,6 +204,7 @@ const args = yargs(hideBin(process.argv)) .option('unlock', { describe: 'Comma separated list of accounts to unlock - currently only the first account is used (for sealing PoA blocks and as the default coinbase). Beta, you will be promped for a 0x-prefixed private key until keystore functionality is added - FOR YOUR SAFETY PLEASE DO NOT USE ANY ACCOUNTS HOLDING SUBSTANTIAL AMOUNTS OF ETH', + string: true, array: true, }) .option('dev', { From 1587ba98334c21e66a977bfa31ddd759fb239520 Mon Sep 17 00:00:00 2001 From: acolytec3 <17355484+acolytec3@users.noreply.github.com> Date: Tue, 30 Nov 2021 12:27:17 -0500 Subject: [PATCH 08/17] Libp2pserver test additions --- packages/client/test/net/server/libp2pserver.spec.ts | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/packages/client/test/net/server/libp2pserver.spec.ts b/packages/client/test/net/server/libp2pserver.spec.ts index 3626d33a51..8d010729bb 100644 --- a/packages/client/test/net/server/libp2pserver.spec.ts +++ b/packages/client/test/net/server/libp2pserver.spec.ts @@ -59,6 +59,11 @@ tape('[Libp2pServer]', async (t) => { ) t.equals(server.key!.toString(), 'abcd', 'key is correct') t.equals(server.name, 'libp2p', 'get name') + t.equals( + (await server.getPeerId()).toB58String(), + '12D3KooWHnPxZvSVGxToTNaK1xd9z3J1TkQM2S2hLeX4bhraGE64', + 'computes correct peerId' + ) t.end() }) @@ -87,7 +92,7 @@ tape('[Libp2pServer]', async (t) => { }) t.test('should start/stop server and test banning', async (t) => { - t.plan(11) + t.plan(12) const config = new Config({ transports: [], logger: getLogger({ loglevel: 'off' }) }) const multiaddrs = [multiaddr('/ip4/6.6.6.6')] const server = new Libp2pServer({ config, multiaddrs, key: Buffer.from('4') }) @@ -149,6 +154,7 @@ tape('[Libp2pServer]', async (t) => { td.when(server.getPeerInfo('conn3' as any)).thenReturn([peerId3, 'ma1' as any]) node.connectionManager.emit('peer:connect', 'conn3') td.verify(server.createPeer(peerId3, ['ma1'] as any, td.matchers.anything())) + t.ok((await server.start()) === false, 'server already started') await server.stop() t.notOk(server.running, 'stopped') }) From b6b1368b05253846e1e99cb8d58ac41496811f92 Mon Sep 17 00:00:00 2001 From: Ryan Ghods Date: Tue, 30 Nov 2021 12:48:16 -0800 Subject: [PATCH 09/17] further tidying of cli.ts --- packages/client/bin/cli.ts | 168 ++++++++++++++++++++----------------- 1 file changed, 91 insertions(+), 77 deletions(-) diff --git a/packages/client/bin/cli.ts b/packages/client/bin/cli.ts index 4441dc8174..d910d85001 100755 --- a/packages/client/bin/cli.ts +++ b/packages/client/bin/cli.ts @@ -20,8 +20,12 @@ const level = require('level') const yargs = require('yargs/yargs') const { hideBin } = require('yargs/helpers') +type Account = [address: Address, privateKey: Buffer] + const networks = Object.entries(_getInitializedChains().names) +let logger: Logger + const args = yargs(hideBin(process.argv)) .option('network', { describe: 'Network', @@ -33,11 +37,6 @@ const args = yargs(hideBin(process.argv)) choices: networks.map((n) => parseInt(n[0])), default: undefined, }) - .option('network-id', { - describe: `Network ID`, - choices: networks.map((n) => parseInt(n[0])), - default: undefined, - }) .option('syncmode', { describe: 'Blockchain sync mode (light sync experimental)', choices: ['light', 'full'], @@ -228,13 +227,10 @@ const args = yargs(hideBin(process.argv)) default: 2350000, }).argv -let logger: Logger - /** * Initializes and returns the databases needed for the client - * @param config */ -function initDBs(config: Config, args: any) { +function initDBs(config: Config) { // Chain DB const chainDataDir = config.getDataDirectory(DataDirectory.Chain) ensureDirSync(chainDataDir) @@ -257,15 +253,46 @@ function initDBs(config: Config, args: any) { } /** - * Starts the client and reacts on the main lifecycle events - * @param config + * Special block execution debug mode (does not change any state) + */ +async function executeBlocks(client: EthereumClient) { + let first = 0 + let last = 0 + let txHashes = [] + try { + const blockRange = (args.executeBlocks as string).split('-').map((val) => { + const reNum = /([0-9]+)/.exec(val) + const num = reNum ? parseInt(reNum[1]) : 0 + const reTxs = /[0-9]+\[(.*)\]/.exec(val) + const txs = reTxs ? reTxs[1].split(',') : [] + return [num, txs] + }) + first = blockRange[0][0] as number + last = blockRange.length === 2 ? (blockRange[1][0] as number) : first + txHashes = blockRange[0][1] as string[] + + if ((blockRange[0][1] as string[]).length > 0 && blockRange.length === 2) { + throw new Error('wrong input') + } + } catch (e: any) { + client.config.logger.error( + 'Wrong input format for block execution, allowed format types: 5, 5-10, 5[0xba4b5fd92a26badad3cad22eb6f7c7e745053739b5f5d1e8a3afb00f8fb2a280,[TX_HASH_2],...], 5[*] (all txs in verbose mode)' + ) + process.exit() + } + await client.executeBlocks(first, last, txHashes) +} + +/** + * Starts and returns the {@link EthereumClient} */ -async function runNode(config: Config) { +async function startClient(config: Config) { config.logger.info(`Data directory: ${config.datadir}`) if (config.lightserv) { config.logger.info(`Serving light peer requests`) } - const dbs = initDBs(config, args) + + const dbs = initDBs(config) const client = new EthereumClient({ config, ...dbs, @@ -273,32 +300,8 @@ async function runNode(config: Config) { await client.open() if (args.executeBlocks) { - // Special block execution debug mode (not changing any state) - let first = 0 - let last = 0 - let txHashes = [] - try { - const blockRange = (args.executeBlocks as string).split('-').map((val) => { - const reNum = /([0-9]+)/.exec(val) - const num = reNum ? parseInt(reNum[1]) : 0 - const reTxs = /[0-9]+\[(.*)\]/.exec(val) - const txs = reTxs ? reTxs[1].split(',') : [] - return [num, txs] - }) - first = blockRange[0][0] as number - last = blockRange.length === 2 ? (blockRange[1][0] as number) : first - txHashes = blockRange[0][1] as string[] - - if ((blockRange[0][1] as string[]).length > 0 && blockRange.length === 2) { - throw new Error('wrong input') - } - } catch (e: any) { - client.config.logger.error( - 'Wrong input format for block execution, allowed format types: 5, 5-10, 5[0xba4b5fd92a26badad3cad22eb6f7c7e745053739b5f5d1e8a3afb00f8fb2a280,[TX_HASH_2],...], 5[*] (all txs in verbose mode)' - ) - process.exit() - } - await client.executeBlocks(first, last, txHashes) + // Special block execution debug mode (does not change any state) + await executeBlocks(client) } else { // Regular client start await client.start() @@ -307,9 +310,10 @@ async function runNode(config: Config) { } /** - * Returns enabled RPCServers + * Starts and returns enabled RPCServers */ -function runRpcServers(client: EthereumClient, config: Config, args: any) { +function startRPCServers(client: EthereumClient) { + const config = client.config const onRequest = (request: any) => { let msg = '' if (args.rpcDebug) { @@ -400,7 +404,7 @@ function runRpcServers(client: EthereumClient, config: Config, args: any) { /** * Returns a configured common for devnet with a prefunded address */ -async function setupDev(prefundAddress: Address) { +async function setupDevnet(prefundAddress: Address) { const addr = prefundAddress.toString().slice(2) const consensusConfig = args.dev === 'pow' @@ -458,7 +462,7 @@ async function setupDev(prefundAddress: Address) { * Accept account input from command line */ async function inputAccounts() { - const accounts: [address: Address, privateKey: Buffer][] = [] + const accounts: Account[] = [] const rl = readline.createInterface({ input: process.stdin, @@ -532,19 +536,35 @@ function helprpc() { process.exit() } +/** + * Returns a randomly generated account + */ +function generateAccount(): Account { + const privKey = randomBytes(32) + const address = Address.fromPrivateKey(privKey) + console.log('='.repeat(50)) + console.log('Account generated for mining blocks:') + console.log(`Address: ${address}`) + console.log(`Private key: 0x${privKey.toString('hex')}`) + console.log('WARNING: Do not use this account for mainnet funds') + console.log('='.repeat(50)) + return [address, privKey] +} + /** * Main entry point to start a client */ async function run() { if (args.helprpc) { - helprpc() + // Output RPC help and exit + return helprpc() } - // give network id precedence over network name + // Give network id precedence over network name const chain = args.networkId ?? args.network ?? Chain.Mainnet - // configure accounts for mining and prefunding in a local devnet - const accounts: [address: Address, privateKey: Buffer][] = [] + // Configure accounts for mining and prefunding in a local devnet + const accounts: Account[] = [] if (args.unlock) { accounts.push(...(await inputAccounts())) } @@ -557,21 +577,13 @@ async function run() { // If generating new keys delete old chain data to prevent genesis block mismatch removeSync(`${args.datadir}/devnet`) // Create new account - const privKey = randomBytes(32) - const address = Address.fromPrivateKey(privKey) - accounts.push([address, privKey]) - console.log('='.repeat(50)) - console.log('Account generated for mining blocks:') - console.log(`Address: ${address}`) - console.log(`Private key: 0x${privKey.toString('hex')}`) - console.log('WARNING: Do not use this account for mainnet funds') - console.log('='.repeat(50)) + accounts.push(generateAccount()) } const prefundAddress = accounts[0][0] - common = await setupDev(prefundAddress) + common = await setupDevnet(prefundAddress) } - // configure common based on args given + // Configure common based on args given if ( (args.customChainParams || args.customGenesisState || args.gethGenesis) && (!(args.network === 'mainnet') || args.networkId) @@ -620,36 +632,38 @@ async function run() { ensureDirSync(configDirectory) const key = await Config.getClientKey(datadir, common) logger = getLogger(args) + const bootnodes = args.bootnodes ? parseMultiaddrs(args.bootnodes) : undefined + const multiaddrs = args.multiaddrs ? parseMultiaddrs(args.multiaddrs) : undefined const config = new Config({ + accounts, + bootnodes, common, - syncmode: args.syncmode, - lightserv: args.lightserv, datadir, - key, - transports: args.transports, - bootnodes: args.bootnodes ? parseMultiaddrs(args.bootnodes) : undefined, - port: args.port, - extIP: args.extIP, - multiaddrs: args.multiaddrs ? parseMultiaddrs(args.multiaddrs) : undefined, - logger, - saveReceipts: args.saveReceipts, - txLookupLimit: args.txLookupLimit, - maxPerRequest: args.maxPerRequest, - minPeers: args.minPeers, - maxPeers: args.maxPeers, - dnsAddr: args.dnsAddr, - dnsNetworks: args.dnsNetworks, debugCode: args.debugCode, discDns: args.discDns, discV4: args.discV4, + dnsAddr: args.dnsAddr, + dnsNetworks: args.dnsNetworks, + extIP: args.extIP, + key, + lightserv: args.lightserv, + logger, + maxPeers: args.maxPeers, + maxPerRequest: args.maxPerRequest, mine: args.mine || args.dev, - accounts, minerCoinbase: args.minerCoinbase, + minPeers: args.minPeers, + multiaddrs, + port: args.port, + saveReceipts: args.saveReceipts, + syncmode: args.syncmode, + transports: args.transports, + txLookupLimit: args.txLookupLimit, }) config.events.setMaxListeners(50) - const client = await runNode(config) - const servers = args.rpc || args.rpcEngine ? runRpcServers(client, config, args) : [] + const client = await startClient(config) + const servers = args.rpc || args.rpcEngine ? startRPCServers(client) : [] process.on('SIGINT', async () => { config.logger.info('Caught interrupt signal. Shutting down...') From fc9050420bc173b14414db5cbce4065524c396b2 Mon Sep 17 00:00:00 2001 From: Ryan Ghods Date: Tue, 30 Nov 2021 12:50:15 -0800 Subject: [PATCH 10/17] grammar (on -> in) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 6204f84bc9..41529bc6c5 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ [![Code Coverage][coverage-badge]][coverage-link] [![Discord][discord-badge]][discord-link] -This was originally the EthereumJS VM repository. On Q1 2020 we brought some of its building blocks together to simplify development. Below you can find the packages included in this repository. +This was originally the EthereumJS VM repository. In Q1 2020 we brought some of its building blocks together to simplify development. Below you can find the packages included in this repository. 🚧 Please note that the `master` branch is updated on a daily basis, and to inspect code related to a specific package version, refer to the [tags](https://github.com/ethereumjs/ethereumjs-monorepo/tags). From 81748ef9a915e7e647385eff7da5a2dc0cfc3f24 Mon Sep 17 00:00:00 2001 From: acolytec3 <17355484+acolytec3@users.noreply.github.com> Date: Wed, 1 Dec 2021 13:49:11 -0500 Subject: [PATCH 11/17] Add more lightsync tests --- packages/client/test/sync/lightsync.spec.ts | 68 ++++++++++++++++++++- 1 file changed, 66 insertions(+), 2 deletions(-) diff --git a/packages/client/test/sync/lightsync.spec.ts b/packages/client/test/sync/lightsync.spec.ts index 1645149f7d..8275b3680b 100644 --- a/packages/client/test/sync/lightsync.spec.ts +++ b/packages/client/test/sync/lightsync.spec.ts @@ -4,6 +4,7 @@ import { BN } from 'ethereumjs-util' import { Config } from '../../lib/config' import { Chain } from '../../lib/blockchain' import { Event } from '../../lib/types' +import { BlockHeader } from '@ethereumjs/block' tape('[LightSynchronizer]', async (t) => { class PeerPool { @@ -93,8 +94,71 @@ tape('[LightSynchronizer]', async (t) => { } }) - t.test('should reset td', (t) => { + t.test('sync errors', async (st) => { td.reset() - t.end() + st.plan(1) + const config = new Config({ transports: [] }) + const pool = new PeerPool() as any + const chain = new Chain({ config }) + const sync = new LightSynchronizer({ + config, + interval: 1, + pool, + chain, + }) + sync.best = td.func() + sync.latest = td.func() + td.when(sync.best()).thenReturn({ les: { status: { headNum: new BN(2) } } } as any) + td.when(sync.latest(td.matchers.anything())).thenResolve({ + number: new BN(2), + hash: () => Buffer.from([]), + }) + td.when(HeaderFetcher.prototype.fetch()).thenResolve(undefined) + td.when(HeaderFetcher.prototype.fetch()).thenDo(() => + config.events.emit(Event.SYNC_FETCHER_FETCHED, [] as BlockHeader[]) + ) + config.logger.on('data', async (data) => { + if (data.message.includes('No headers fetched are applicable for import')) { + st.pass('generated correct warning message when no headers received') + config.logger.removeAllListeners() + await sync.stop() + await sync.close() + } + }) + await sync.sync() + }) + + t.test('import headers', async (st) => { + td.reset() + st.plan(1) + const config = new Config({ transports: [] }) + const pool = new PeerPool() as any + const chain = new Chain({ config }) + const sync = new LightSynchronizer({ + config, + interval: 1, + pool, + chain, + }) + sync.best = td.func() + sync.latest = td.func() + td.when(sync.best()).thenReturn({ les: { status: { headNum: new BN(2) } } } as any) + td.when(sync.latest(td.matchers.anything())).thenResolve({ + number: new BN(2), + hash: () => Buffer.from([]), + }) + td.when(HeaderFetcher.prototype.fetch()).thenResolve(undefined) + td.when(HeaderFetcher.prototype.fetch()).thenDo(() => + config.events.emit(Event.SYNC_FETCHER_FETCHED, [BlockHeader.fromHeaderData({})]) + ) + config.logger.on('data', async (data) => { + if (data.message.includes('Imported headers count=1')) { + st.pass('successfully imported new header') + config.logger.removeAllListeners() + await sync.stop() + await sync.close() + } + }) + await sync.sync() }) }) From 3d4247cc5da73dce80a1f0a091a975211686ccd3 Mon Sep 17 00:00:00 2001 From: acolytec3 <17355484+acolytec3@users.noreply.github.com> Date: Wed, 1 Dec 2021 15:35:00 -0500 Subject: [PATCH 12/17] Add new blockfetcher store tests --- .../test/sync/fetcher/blockfetcher.spec.ts | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/packages/client/test/sync/fetcher/blockfetcher.spec.ts b/packages/client/test/sync/fetcher/blockfetcher.spec.ts index 1f7fe92191..ee83cfdbc3 100644 --- a/packages/client/test/sync/fetcher/blockfetcher.spec.ts +++ b/packages/client/test/sync/fetcher/blockfetcher.spec.ts @@ -101,6 +101,36 @@ tape('[BlockFetcher]', async (t) => { t.end() }) + t.test('store()', async (st) => { + td.reset() + st.plan(2) + + const config = new Config({ maxPerRequest: 5, transports: [] }) + const pool = new PeerPool() as any + const chain = new Chain({ config }) + chain.putBlocks = td.func() + const fetcher = new BlockFetcher({ + config, + pool, + chain, + first: new BN(1), + count: new BN(10), + timeout: 5, + }) + td.when(chain.putBlocks(td.matchers.anything())).thenReject(new Error('err0')) + try { + await fetcher.store([]) + } catch (err: any) { + st.ok(err.message === 'err0', 'store() threw on invalid block') + } + td.reset() + chain.putBlocks = td.func() + td.when(chain.putBlocks(td.matchers.anything())).thenResolve(1) + st.doesNotThrow( + () => fetcher.store([]), + 'store() does not throw when putBlocks returns valid result' + ) + }) t.test('should reset td', (t) => { td.reset() t.end() From 551d01560cab59d8e085730de00102d125a9fe22 Mon Sep 17 00:00:00 2001 From: acolytec3 <17355484+acolytec3@users.noreply.github.com> Date: Wed, 1 Dec 2021 18:21:06 -0500 Subject: [PATCH 13/17] Add blockfetcher tests for store method --- packages/client/test/sync/fetcher/blockfetcher.spec.ts | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/packages/client/test/sync/fetcher/blockfetcher.spec.ts b/packages/client/test/sync/fetcher/blockfetcher.spec.ts index ee83cfdbc3..c682c83037 100644 --- a/packages/client/test/sync/fetcher/blockfetcher.spec.ts +++ b/packages/client/test/sync/fetcher/blockfetcher.spec.ts @@ -4,6 +4,7 @@ import { BN } from 'ethereumjs-util' import { Config } from '../../../lib/config' import { Chain } from '../../../lib/blockchain/chain' import { wait } from '../../integration/util' +import { Event } from '../../../lib/types' tape('[BlockFetcher]', async (t) => { class PeerPool { @@ -126,10 +127,10 @@ tape('[BlockFetcher]', async (t) => { td.reset() chain.putBlocks = td.func() td.when(chain.putBlocks(td.matchers.anything())).thenResolve(1) - st.doesNotThrow( - () => fetcher.store([]), - 'store() does not throw when putBlocks returns valid result' + config.events.on(Event.SYNC_FETCHER_FETCHED, () => + st.pass('store() does not throw when putBlocks returns valid result') ) + await fetcher.store([]) }) t.test('should reset td', (t) => { td.reset() From 7f2aeef5aef3b94f1fe5245cec3df6fae43a6129 Mon Sep 17 00:00:00 2001 From: acolytec3 <17355484+acolytec3@users.noreply.github.com> Date: Wed, 1 Dec 2021 19:16:40 -0500 Subject: [PATCH 14/17] Add header fetcher tests --- .../test/sync/fetcher/blockfetcher.spec.ts | 2 +- .../test/sync/fetcher/headerfetcher.spec.ts | 32 +++++++++++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/packages/client/test/sync/fetcher/blockfetcher.spec.ts b/packages/client/test/sync/fetcher/blockfetcher.spec.ts index c682c83037..b0bab5ae6f 100644 --- a/packages/client/test/sync/fetcher/blockfetcher.spec.ts +++ b/packages/client/test/sync/fetcher/blockfetcher.spec.ts @@ -128,7 +128,7 @@ tape('[BlockFetcher]', async (t) => { chain.putBlocks = td.func() td.when(chain.putBlocks(td.matchers.anything())).thenResolve(1) config.events.on(Event.SYNC_FETCHER_FETCHED, () => - st.pass('store() does not throw when putBlocks returns valid result') + st.pass('store() emitted SYNC_FETCHER_FETCHED event on putting blocks') ) await fetcher.store([]) }) diff --git a/packages/client/test/sync/fetcher/headerfetcher.spec.ts b/packages/client/test/sync/fetcher/headerfetcher.spec.ts index 65e9dfa1d3..de359bdf2f 100644 --- a/packages/client/test/sync/fetcher/headerfetcher.spec.ts +++ b/packages/client/test/sync/fetcher/headerfetcher.spec.ts @@ -2,6 +2,8 @@ import tape from 'tape' import td from 'testdouble' import { Config } from '../../../lib/config' import { BN } from 'ethereumjs-util' +import { Chain } from '../../../lib/blockchain' +import { Event } from '../../../lib/types' tape('[HeaderFetcher]', async (t) => { class PeerPool { @@ -42,6 +44,36 @@ tape('[HeaderFetcher]', async (t) => { t.end() }) + t.test('store()', async (st) => { + td.reset() + st.plan(2) + + const config = new Config({ maxPerRequest: 5, transports: [] }) + const pool = new PeerPool() as any + const chain = new Chain({ config }) + chain.putHeaders = td.func() + const fetcher = new HeaderFetcher({ + config, + pool, + chain, + first: new BN(1), + count: new BN(10), + timeout: 5, + }) + td.when(chain.putHeaders(td.matchers.anything())).thenReject(new Error('err0')) + try { + await fetcher.store([]) + } catch (err: any) { + st.ok(err.message === 'err0', 'store() threw on invalid header') + } + td.reset() + chain.putBlocks = td.func() + td.when(chain.putHeaders(td.matchers.anything())).thenResolve(1) + config.events.on(Event.SYNC_FETCHER_FETCHED, () => + st.pass('store() emitted SYNC_FETCHER_FETCHED event on putting headers') + ) + await fetcher.store([]) + }) t.test('should reset td', (t) => { td.reset() t.end() From aa5df7cb5a3246f11efd1d489f65e1a14c531ad0 Mon Sep 17 00:00:00 2001 From: Ryan Ghods Date: Wed, 1 Dec 2021 17:49:51 -0800 Subject: [PATCH 15/17] use different input values for `td.when` rather than using `td.reset` --- .../client/test/sync/fetcher/headerfetcher.spec.ts | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/packages/client/test/sync/fetcher/headerfetcher.spec.ts b/packages/client/test/sync/fetcher/headerfetcher.spec.ts index de359bdf2f..9b782aa489 100644 --- a/packages/client/test/sync/fetcher/headerfetcher.spec.ts +++ b/packages/client/test/sync/fetcher/headerfetcher.spec.ts @@ -45,7 +45,6 @@ tape('[HeaderFetcher]', async (t) => { }) t.test('store()', async (st) => { - td.reset() st.plan(2) const config = new Config({ maxPerRequest: 5, transports: [] }) @@ -60,20 +59,19 @@ tape('[HeaderFetcher]', async (t) => { count: new BN(10), timeout: 5, }) - td.when(chain.putHeaders(td.matchers.anything())).thenReject(new Error('err0')) + td.when(chain.putHeaders([0 as any])).thenReject(new Error('err0')) try { - await fetcher.store([]) + await fetcher.store([0 as any]) } catch (err: any) { st.ok(err.message === 'err0', 'store() threw on invalid header') } - td.reset() - chain.putBlocks = td.func() - td.when(chain.putHeaders(td.matchers.anything())).thenResolve(1) + td.when(chain.putHeaders([1 as any])).thenResolve(1) config.events.on(Event.SYNC_FETCHER_FETCHED, () => st.pass('store() emitted SYNC_FETCHER_FETCHED event on putting headers') ) - await fetcher.store([]) + await fetcher.store([1 as any]) }) + t.test('should reset td', (t) => { td.reset() t.end() From 60ea5733be11b1769a97e986391898964b417f16 Mon Sep 17 00:00:00 2001 From: acolytec3 <17355484+acolytec3@users.noreply.github.com> Date: Wed, 1 Dec 2021 20:57:07 -0500 Subject: [PATCH 16/17] Add fetcher test for queue inserts --- .../client/test/sync/fetcher/fetcher.spec.ts | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/packages/client/test/sync/fetcher/fetcher.spec.ts b/packages/client/test/sync/fetcher/fetcher.spec.ts index 9ba42034bb..2535b9bed3 100644 --- a/packages/client/test/sync/fetcher/fetcher.spec.ts +++ b/packages/client/test/sync/fetcher/fetcher.spec.ts @@ -4,7 +4,7 @@ import { Config } from '../../../lib/config' import { Fetcher } from '../../../lib/sync/fetcher/fetcher' import { Job } from '../../../lib/sync/fetcher/types' import { Event } from '../../../lib/types' - +import { debug } from 'debug' class FetcherTest extends Fetcher { process(_job: any, _res: any) { return undefined // have to return undefined, otherwise the function return signature is void. @@ -70,8 +70,8 @@ tape('[Fetcher]', (t) => { }, 20) }) - t.test('should handle clearing queue', (t) => { - t.plan(2) + t.test('should handle queue management', (t) => { + t.plan(3) const config = new Config({ transports: [] }) const fetcher = new FetcherTest({ config, @@ -86,6 +86,16 @@ tape('[Fetcher]', (t) => { t.equals((fetcher as any).in.size(), 3, 'queue filled') fetcher.clear() t.equals((fetcher as any).in.size(), 0, 'queue cleared') + const job4 = { index: 3 } + const job5 = { index: 4 } + + ;(fetcher as any).in.insert(job1) + ;(fetcher as any).in.insert(job2) + ;(fetcher as any).in.insert(job3) + ;(fetcher as any).in.insert(job4) + ;(fetcher as any).in.insert(job5) + + t.ok(fetcher.next() === false, 'next() fails when heap length exceeds maxQueue') }) t.test('should reset td', (t) => { From 619a1839b671d94e439942fe1e7ddc982dc903cd Mon Sep 17 00:00:00 2001 From: acolytec3 <17355484+acolytec3@users.noreply.github.com> Date: Wed, 1 Dec 2021 21:27:23 -0500 Subject: [PATCH 17/17] remove extraneous debug import --- packages/client/test/sync/fetcher/fetcher.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/client/test/sync/fetcher/fetcher.spec.ts b/packages/client/test/sync/fetcher/fetcher.spec.ts index 2535b9bed3..5d4ec7bda2 100644 --- a/packages/client/test/sync/fetcher/fetcher.spec.ts +++ b/packages/client/test/sync/fetcher/fetcher.spec.ts @@ -4,7 +4,7 @@ import { Config } from '../../../lib/config' import { Fetcher } from '../../../lib/sync/fetcher/fetcher' import { Job } from '../../../lib/sync/fetcher/types' import { Event } from '../../../lib/types' -import { debug } from 'debug' + class FetcherTest extends Fetcher { process(_job: any, _res: any) { return undefined // have to return undefined, otherwise the function return signature is void.